* refactor(wysiwyg): revert edit/preview split, restore full WYSIWYG editing
The edit/preview mode separation was introduced as a workaround for
code block and inline code escape issues in Lexical. Instead of working
around these issues, this commit fixes them at the root:
- Restore MarkdownShortcutPlugin for true WYSIWYG editing (markdown
renders as-you-type instead of showing raw syntax)
- Add CodeBlockEscapePlugin: double-Enter on empty lines or ArrowDown
at end of code block exits to a new paragraph
- Add InlineCodeBoundaryPlugin: clears code format from selection at
text node boundaries to prevent format leaking (upstream #5518, #6781)
- Remove MarkdownInsertPlugin (inserted literal markdown syntax)
- Remove MarkdownListContinuePlugin (auto-continued list prefixes)
- Remove preview toggle from StaticToolbarPlugin
- Remove preserveMarkdownSyntax from MarkdownSyncPlugin
- Use single full transformer set for both edit and display modes
- Switch list toolbar buttons to native Lexical list commands
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
* fix(wysiwyg): fix list cursor position jumping before marker
Switch list styling from list-inside to list-outside with pl-6 padding.
list-inside caused the browser to position the cursor before the
bullet/number marker on empty list items, jumping to the correct
position only after the first character was typed.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
* fix(wysiwyg): exit inline code on right arrow or backtick
Rewrite InlineCodeBoundaryPlugin to handle key events directly instead
of unreliably modifying selection.format on SELECTION_CHANGE_COMMAND.
When the cursor is at the end of a code-formatted text node:
- Right arrow: moves cursor to a non-code position
- Backtick: exits code formatting instead of inserting a literal `
Inserts a zero-width space as a cursor target when no non-code sibling
exists. The character is cleaned up on the next markdown sync cycle.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
* chore(wysiwyg): delete unused plain-text editing plugins
Remove MarkdownInsertPlugin, MarkdownListContinuePlugin, and
CodeBlockShortcutPlugin — all unused after restoring full WYSIWYG
editing with MarkdownShortcutPlugin.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
* fix(wysiwyg): remove edit/preview toggle from issue description panel
With full WYSIWYG editing restored, the description is always rendered
with formatting while editing — a separate preview mode is unnecessary.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
* fix(wysiwyg): render raw HTML in markdown preview for .md files
Add rehype-raw plugin to MarkdownPreview so inline HTML in markdown
files (e.g. <details>, <summary>, <br>) renders correctly in the
diff view instead of being stripped.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
* fix(wysiwyg): address CI and PR review feedback
- Fix formatting in 4 ui package files (prettier)
- Remove duplicate CODE transformer from allTransformers (already in TRANSFORMERS)
- Add rehype-sanitize with GitHub-style default schema to MarkdownPreview
to prevent XSS from raw HTML in markdown files
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
* style: fix prettier formatting in ui package
Remove trailing commas to match ui package prettier config.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
* fix(wysiwyg): handle element-level selection in ArrowDown code block escape
Add the same element-level selection check from the Enter handler to the
ArrowDown handler, so pressing ArrowDown escapes the code block when the
cursor sits on the CodeNode itself (e.g. after a trailing LineBreakNode).
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
---------
Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>