Plate UI
Stop storing a width on the demo drawing, which the v54 Excalidraw schema does not declare.
Plate UI
Align the Chinese exit break demo with the English one and mention columns in its copy
Plate UI
Explain in both locales that a code block, callout, image or divider stays in its container on ⌘⏎
Plate UI
Remove CsvPlugin and its platejs/csv import from the editor kit, and remove the csv-demo example. Spreadsheet copies still paste as tables through HTML, and tab-separated text pasted onto selected table cells fills them field by field.
Plate UI
Render a Details title that has a heading level with that heading's style, and center its toggle on the title's first line at the heading's own font size
Format a Details title in place when choosing Text or a heading, instead of breaking the title or inserting into its hidden body, with or without the Heading plugin
Keep list formatting when the schema refuses a block format, drop the bullet when a bulleted heading takes its own level, and show an H4 to H6 as a heading instead of Text in the block menu
Show the heading size of a Details title that has a heading level
Plate UI
Size the side padding of the default, demo and fullWidth variants to the editor's own width instead of the viewport. Padding shrinks to 24 px in a narrow editor, so a 180 px editor gets a 132 px text column instead of 52 px. Editors at least 512 px wide, or 640 px for fullWidth, keep their current padding.
Size the editor's side padding to its own width instead of the viewport. Padding shrinks to 24 px in a narrow editor, and editors at least 600 px wide keep 48 px.
Plate UI
Add LintKit, which configures BaseLintPlugin with two example rules that skip code blocks, wavy underlines by severity, and F8 and Shift+F8 to select the next and previous finding. LintPopover shows the finding under the caret with its fixes and Fix and next. useLintFindings and useLintFindingAt read the findings for your own UI.
Add a lint example with a findings panel that runs, clears and applies the first fix, and a Check with server button backed by a stand-in rule that answers after 600 ms.
Plate UI
Keep an empty caption hidden while its media is selected, so selecting media no longer shifts the page. The caption shows once the caret enters it, such as through the media toolbar's Caption button, and Caption no longer takes an active prop.
- Remove the active prop from Caption; it shows an empty caption only while the caret is inside it.
Open the image preview on double-click again; api.preview.open takes the image's path and URL. The preview renders above the page, centers the image, and closes on a backdrop click or Escape.
- Call imagePlugin api.preview.open with the image's path and URL instead of the element.
Select a file on click in an editable editor and open it on double-click. Show the media toolbar with Preview, Caption and delete while a file, audio or video node is selected. The image toolbar also gets Preview, which opens the image preview. The file and audio toolbars sit above their block, so neither covers the next block, and the audio selection ring fits the player. File and audio blocks get vertical padding so a selection ring does not overlap the block next to it, and a click in that padding selects the block instead of opening its caption. A click on an audio or video player selects that node and returns the keyboard to the editor, and Preview no longer keeps focus, so arrow keys keep moving the selection.
Plate UI
Create each read-only preview editor with useCreateEditor from platejs/react, with the same plugins and dependencies as before.
Create the server page's export editor with createEditor from platejs and the client preview's editor with useCreateEditor from platejs/react, and keep rendering both through EditorStatic.
Plate UI
Paint every part of one change in one color, and each change in its own color, even when one person made them all.
Mark a suggested line break, a removed line break, or a whole-block change such as a paragraph turned into a heading, in the left margin in its change's color.
Show a toast when Suggesting refuses a change that touches a code block, a table or a list item, and leave the document as it was. The mode menu switches to Suggesting only when the switch takes.
Accept and Reject on a suggestion card decide the change that card shows.
Pass only authored={{ intent: 'propose' }} to a suggesting view.
- Pass only the intent to a suggesting view: replace
authored={{ intent: 'propose', projection: 'markup' }}withauthored={{ intent: 'propose' }}.
Restore a saved revision with its Restore button, as one edit you can undo. The per-author revert is removed.
Plate UI
Keep table block selections consistent in color and confined to their cells
Plate UI
Draw a bulleted item as a disc list inside its block, like numbered and to-do items, so saved HTML reads it back as a list and Word export writes a Word bullet list; bullets on toggles and images keep the root marker.
Show one "Imported with N warnings" toast that leaves out lossless cleanups, such as a removed <style>.
Plate UI
Cmd+K and the link button no longer open the link form in a block that cannot hold a link, such as a code block, where submitting it threw an error.
Plate UI
Remove the forceSubmit state. The form saves a new or changed address that starts with http:// or https://, has another scheme such as mailto:, or starts with /, ./, ../, # or ?. It stays open on any other draft, such as www.example.com, and when allowedSchemes refuses the address. Editing only the link text keeps the stored address.
Plate UI
Fix Cmd+K, which did not open the link form. api.trigger() reads the editor's focus when focused is omitted, and returns false when the form stays closed.
Plate UI
Store frequent emojis under emoji-frequent:v1 and cached shortcodes under emoji-shortcodes:v1:<url>.
- The picker no longer reads frequent emojis saved under the old key, so the list starts empty.
Name exported files document.html, document.md and document.docx.
Write comments data with kind: 'comments', the value platejs/comments reads.
Use collaboration-demo as the demo's Yjs root and room id.
Plate UI
Replace SelectEditorContent, SelectEditorInput, SelectEditorCombobox and select-command.tsx with one SelectEditor. It keeps the chips as the only value, writes the form's value back whenever it differs from the chips, and passes ref, onBlur and ARIA props to the editable.
- Replace SelectEditorContent, SelectEditorInput and SelectEditorCombobox with one SelectEditor that takes items, value or defaultValue, onValueChange and the editable's props.
Move the active option with ArrowUp and ArrowDown wherever the caret is, close the menu and clear the search on Escape and mod+Enter, and link a read-only chip to its url only when getLinkHref accepts it, so a chip with a script or malformed url shows without a link instead of breaking the field.
Ship tag.tsx, with the tag element plugin and its chip, in this item, and remove the separate tag item and the Radix dependencies.
- Install select-editor instead of tag; it copies tag.tsx with the tag element plugin.
Plate UI
ToolbarButton uses a string tooltip as the button's accessible name when you pass no aria-label. Screen readers announce icon-only buttons such as Link by that name, and getByRole('button', { name: 'Link' }) finds them.
Name the button with its label and current value, such as "Turn into: Text" and "Editing mode: Editing". The mode button keeps its name when narrow screens hide its text.
Name both halves of each split button, such as "Bulleted list" and "Bulleted list styles", or "Image" and "Image options".
Remove each aria-label that repeated the button's tooltip. The accessible names stay the same.
Plate UI
Draw a bulleted item's chosen style, such as circle or square, in the editor and in static HTML instead of always drawing a disc.
Plate UI
Use the demo plugin's element type, so the page loads.
Install BasicBlocksKit, so each editor loads its heading.
Fix the code block's content and use the horizontalRule type, so the page loads.
Load the alignment document instead of an empty editor.
Plate UI
Read the caret from the view's editor, so Tab and Shift+Tab nest and un-nest list items and stay in code blocks and tables. Tab at a paragraph's start or end moves focus, as it does mid-paragraph.
Install TabbableKit and use the demo plugin's element type, so the page loads and shows the kit.
Plate UI
Select individual Details body blocks with a selection rectangle
Plate UI
Fix indented numbered and task lists rendering twice as far in on static pages. DOCX export still reads each item's nesting level from the block indent.
Plate UI
Add Restart numbering and Continue numbering to the numbered list menu.
Name each list with data-list-id and its level rules with data-list-levels, so HTML and DOCX export keep each list and its levels.
Write each item's indent, list id, level rules, restart, start, type and checked state on its li, so pasting the static HTML keeps them.
Plate UI
Keep inline equation editors closed when extending a text selection across suggested changes.
Plate UI
Preserve selected blocks when opening context menus from nested drag handles
Plate UI
Fix HTML and Word export throwing on tables, task lists, callouts, columns, code blocks and images by drawing the file with BaseEditorKit as presentation.
Drop the per-level margin-left on numbered and task lists, so static HTML indents a nested list once and Word takes its level from the block's indent.
Show an error toast when HTML or Word export throws, instead of failing with no message.
Move the Word look of callouts, code blocks, and empty equation and table of contents placeholders into DOCX_EXPORT_STYLES, because the package's DOCX drawings leave colors, fonts and sizes to the stylesheet.
Draw the task checkbox inside its li and mark the li with data-checked, so Word export gives each task one paragraph with a ☑ or ☐ list marker.
Target images like IndentKit does, so a static editor loads and indents an image the live editor indented instead of throwing a schema error.
Target images like ListKit does, so a static editor loads an image in a list and draws it as a list item.
Plate UI
Add a shared Emojibase catalog with GitHub shortcodes, loaded on first use from a pinned CDN release, cached in the browser, and ranked by shortcode before label and tag matches.
Define EmojiPlugin in the copied file, search emoji-data, insert the emoji as text, show a loading row that keeps Enter from splitting the block, and keep the popup closed inside code blocks.
- Replace emojiPlugin with EmojiPlugin from the copied emoji file.
Build the picker on frimousse with keyboard navigation, the ranked emoji-data search, a frequent row and an unavailable message, and take the trigger as the child with a required onEmojiSelect(emoji).
- Pass the trigger as the picker's child and handle onEmojiSelect(emoji); the data, settings, closeOnSelect and disabled props and EmojiPickerTrigger are gone.
Insert the picked emoji at the selection as its own undo step and return focus to the editor; the callout sets its icon from the picker.
Highlight the top result after each query until an arrow key or a scroll moves away, let Enter pick a result in the frame it appears, and take a loading prop that keeps Enter and Tab from editing while options load.
Plate UI
Request the version range Plate declares for each npm package, such as juice@^11.0.1, xmlbuilder2@^3.1.1 and yjs@>=13.6.30, instead of the latest version.
Stop installing files nothing imports: lib/inline-suggestion.ts, hooks/use-mobile.ts and the shadcn button. The four static items also stop requesting class-variance-authority.
Plate UI
Draw the block drag image at half opacity with no background, so only the faded blocks follow the pointer. Column and table row drags use the same image.
Plate UI
Read the current user from editor.userId, so comments, replies and suggestion colors follow the editor's user.
- Remove currentUserId from CommentsPlugin initialState and pass the same user as createEditor({ userId }).
Offer Suggestion mode whenever SuggestionPlugin is installed, including editors without a userId.
Name the user once with the editor's userId, or run as the local user without one.
Plate UI
Add Move beside previous and Move beside next to the handle menu, shown when the editor admits a side drop, such as with columns installed. A drop on a block's right edge paints a vertical indicator.
Plate UI
Every selectable block gets a handle at any depth, such as blocks inside blockquotes, details, columns and table cells, and only the innermost hovered block shows its handle. The handle reads its blocks from editor.read.transfer.nodes, and a selected table no longer hides the editor's handles.
Cut takes the blocks editor.read.transfer.nodes() returns, such as a list item with its nested items.
Plate UI
Clicking a block's drag handle opens Move up, Move down and Cut, and Mod+Shift+ArrowUp / Mod+Shift+ArrowDown move the blocks around the caret. Dropping a block into another editor copies it, and Alt (Apple) or Ctrl copies inside one editor.
Clicking a column's drag handle opens Move left and Move right.
Clicking a row's drag handle opens Select row, Move up and Move down; the handle's label is "Drag row or open row actions".
The right-click menu offers Move up, Move down and Cut.
Plate UI
Drag handles start a native drag with editor.api.dom.drag.start, and DropIndicator paints useDropIndicator() in each view. DndKit needs no DndProvider, and the react-dnd dependencies are gone.
The column handle drags its column natively; the vertical drop line comes from DndKit.
The row handle drags its row natively; the drop line comes from DndKit.
Dragging media starts the same native block drag.
Dropped files land at the edge under the pointer.
Plate UI
Open the popup when the trigger is typed and filter on the text after it, keeping the editor focused. Enter or Tab completes the active option in one undo step, Escape keeps the typed text, and IME preedit filters without selecting.
- Mount MentionCombobox, SlashCombobox, EmojiCombobox and FootnoteCombobox through each plugin's slots.afterEditable; the input elements are gone.
Plate UI
Read list numbers and table cell presentation from the rendered path, so numbering continues inside content roots and a static preview does not index each document.
Plate UI
Render streamed previews from the latest draft, skipping drafts that were never shown when rendering falls behind the stream. The streaming demo's static output shows its status and parse error with the parse it renders. Both previews render only when their document changes, not on every streamed update. The AI draft's purple text is styled by its container instead of a decoration on every text, its end marker is read from the last block only, the fallback end marker stays mounted so the preview is not restyled whenever it appears or disappears, and the inline draft scrolls when it resizes instead of measuring layout after every render.
Plate UI
Remove the Markdown joiner transform. The AI command route streams model text without buffering or added delays.
- Remove
experimental_transform: markdownJoinerTransform()from the AI command route and delete lib/markdown-joiner-transform.ts.
Plate UI
Keep Word exports downloading with a warning when content such as a comment cannot be placed, and warn when an imported Word file will be regenerated on export instead of returned unchanged
Plate UI
Configure MarkdownPlugin with remark-math, remark-gfm and remark-emoji only; Plate tags such as <callout> read without remark-mdx, and mentions read as [label](mention:ref) links.
- Remove remarkMdx and remarkMention from MarkdownPlugin remarkPlugins; Plate tags are built in and mentions are [label](mention:ref) links.
Parse through the kit's MarkdownPlugin configuration instead of passing per-call remark plugins.
Refer to Plate's Markdown tags instead of MDX in the generate, comment and common prompts.
Plate UI
Stream Markdown with editor.api.markdown.parseSlice instead of the AI chat preview: previews hide an unfinished trailing tag, Finish and Stop parse the draft strictly once, every parse continues the latest preview, and reset cancels without a final parse. The static preview renders each parse as the document of EditorView without editing its editor; the editable preview installs content plugins only and replaces only the changed blocks. The Markdown source, chunk size and delay are editable.
Render the AI draft as the document of the static preview editor instead of copying it into that editor on every chunk. The streaming end marker covers only the draft's last character, so it appears once when code highlighting splits the last line.
Plate UI
Parse HTML and Markdown through their installed format APIs, show successful conversion warnings, and prepare a replacement editor with imported Word comments through CommentsPlugin when available.
- Pass the editor plugin list and an
onImporteditor-owner callback toImportToolbarButton; the button prepares a complete detached replacement before the application swaps editors.
Use diagnosed HTML and Markdown serializers plus exportDocx, preserve one chosen accepted, proposed, or review projection, and export attached comment threads as Word comments.
- Use
exportDocxfromplatejs/docx/export; theexportToDocxalias does not exist onnext.
Plate UI
Show the floating toolbar for native text selections that include retained suggestions.
Plate UI
Export HTML, Markdown, and Word from the same captured document revision. With unresolved suggestions, choose Include suggested changes or Exclude suggested changes. Export as Word with tracked changes preserves pending suggestions as Word revisions and reports conflicts that require resolution.
Remove Export as PDF and Export as Image, along with the html2canvas-pro and pdf-lib dependencies.
- Remove
html2canvas-proandpdf-libfrom your app when no other code uses them.
Inline the app's own stylesheets in HTML exports instead of linking the platejs.org stylesheet.
Complete close focus and dismissal before another trigger press so toolbar menus reopen on the first click after selecting an item.
Set a current user so Suggestion mode records suggestions, and group contiguous typing into one visible suggestion and Word revision.
Link its DOCX registry metadata to the DOCX documentation page.
Use the current editor's document-first HTML, Markdown, and DOCX exporters directly, with one captured projection and shared diagnostics.
Keep the dependency-free copied presentation stylesheet while platejs/docx/export supplies semantic mappings for code blocks, columns, equations, callouts, headings, and tables of contents.
- Keep
DOCX_EXPORT_STYLESin copied app code; DOCX semantic mappings come fromplatejs/docx/export.
Plate UI
Disable undo and redo while a replay awaits external persistence, expose the busy state to assistive technology, and keep toolbar clicks fire-and-forget.
Plate UI
Restore inline AI edit suggestions.
Plate UI
Install provider-neutral upload UI with an explicit browser-local, Cloudflare R2, or Amazon S3 provider; persistent providers share one gateway policy and install only their own adapter dependencies.
Plate UI
Install the Files SDK client and private document-scoped gateway together through the upload kit; the route requires application access policy and storage credentials.
Render completed media separately while the upload schema owner omits unresolved drafts from static output.
Plate UI
Discover open, resolved, and unavailable conversations through All comments; remove stale block placement and preserve in-progress conversation actions.
Include document-level comment discovery in editable, read-only, persistence, and suggestion examples.
Plate UI
Start the Playground in Editing mode while keeping seeded suggestions visible.
Plate UI
Preserve page scroll when a new comment receives focus and keep the popover attached to its anchor during editor scrolling.
Plate UI
Run final focus from the selected menu item and call typed block insert or upsert operations directly.
Plate UI
Call installed feature operations directly, preserve exact block selections, and disable unsupported structural actions.
Share the same server-safe formatting kits between editable and static editor compositions.
Install package requirements derived from copied source and serve production and development payloads from one generated registry state.
Plate UI
Publish generated feedback as ordinary comment threads. Keep completed comments when generation stops or fails, and show failed requests with retry and dismissal controls.
Limit comment prompts to the selected content while preserving its formatting and inline structure.
Plate UI
Await comment actions before clearing input, retain failed replies for retry, reopen resolved conversations independently of document undo, and keep suggestion conversations replyable after decisions.
Let completed AI comments finish saving when the chat menu closes; discard pending drafts on cancellation.
Save comments and opaque attachments with the matching document revision and restore them into a fresh editor.
Load three authored suggestions and their conversations together while keeping direct editing as the default.
Plate UI
Keep keyboard navigation visible below fixed toolbars.
Plate UI
Run complete undo, redo, and AI response actions through editor services so each action publishes as one history unit.
Plate UI
Inspect two-way and three-way comparisons with grouped effects, evidence, conflict choices, filters, and navigation.
Save document revisions and compare the two latest snapshots.
Plate UI
Create provider-bound descriptors with CollaborationPlugin.create(options) while preserving copied cursor presentation.
Plate UI
Keep selected text visible while writing comments
Plate UI
Use green for the current user's suggestions and stable distinct colors for collaborators, with underlines for insertions and strikethroughs for deletions.
Plate UI
Keep suggestion styling with its optional kit
Plate UI
Install HTML export and MDX API components under semantic filenames.
Plate UI
Install complete editor composition as rich-text-editor.tsx.
Plate UI
Review formatting and block proposals, compare document projections, and save proposals with their discussion threads.
Keep discussion buttons available when switching a saved document between accepted content and markup.
Load the multi-author suggestion example and linked discussions from its included saved document, with suggesting mode configured on EditorRoot.
Plate UI
Use SuggestionPlugin, view-local activation, and authored-change hooks in copied controls and review cards. Customize styles, cards, and Comments composition in registry source.
Plate UI
Review proposed insertions and deletions in the Suggestions demo
Plate UI
Keep Home, End, arrow selection and deletion aligned after focus changes and composition. Use Tab and Shift+Tab for indentation, with Enter and Shift+Enter for an indented newline.
Plate UI
Keep typing in the invoking editor after accepting, inserting, or replacing content with AI.
Plate UI
Focused Comments examples cover conversations, overlapping ranges with undo and redo, local snapshot save/reload with a simulated failed reply, and read-only/static rendering.
Plate UI
Render diagrams for preview and export using the latest source
Plate UI
Keep discussions usable after suggestion actions and on touch screens
Plate UI
Allow editors without comments to render optional comment subscribers
Plate UI
Playground loads its complete editor kit, example comment threads, and comment actions
Plate UI
Reduce table selection rendering work while preserving row and cell highlights
Plate UI
Support AI writing in documents containing code drawings
Plate UI
Call custom controls through FindPlugin and subscribe to individual search fields. Closing the bar returns focus to its editor view; mounting another command button preserves the current query.
Plate UI
Find opens independently in each editor view. Custom opening controls use useFind inside Editable slots, while BaseFindPlugin supplies shared queries and results. The demo includes a second view of the same document.
Plate UI
Keep navigation highlights in the calling editor view. TOC supplies heading highlight classes, and TOC and footnote installs include their highlight styles.
Plate UI
Bind the shared SDK transport with useAIChat. Share one session across mounted views and keep streaming while a writable view remains. Keep endpoint configuration and comment persistence in the application.
Render the session preview through a read-only editor view and size the menu within the viewport.
Render ghost text without changing the accepted completion. Keep demo responses in the application route.
Return completion text and pass the configured gateway key to the provider.
Plate UI
Insert blocks with owned construction, empty-source replacement and selection. Preserve source content while media URL input resolves and keep each action in one history step.
Convert the selected blocks with one feature command, including disjoint selections and structural wrappers.
Plate UI
Use createCodeMirrorAdapter for versioned text projection and cleanup. Keep presentation and language loading local, with CodeMirror commands for line indentation and syntax-aware Enter.
Plate UI
Prepare selected blocks and inert preview clones through DndPlugin; keep preview spacing and scroll compensation in the component.
Validate every dragged row and its source editor before applying the row drop handler.
Plate UI
Keep editor toolbar styling in copied editor components
Plate UI
Measure selection geometry while the toolbar is visible, preserving dismissal, focus and reopening after selection changes.
Bind each editor to its own document, share formatting through the active editor, and include the image editor's drag-and-drop integration.
Plate UI
Use useExcalidrawSync to apply document changes and undo to the canvas, save referenced images, and exclude transient canvas state from document writes. Keep lazy loading and presentation in the copied element.
Plate UI
Search through BaseFindPlugin while keeping the search bar, deferred input, focus and scroll behavior local. Preserve IME confirmation and opening before the first query.
Style the current match separately from other matches using the feature’s transient data attributes.
Plate UI
Insert selected suggestions through the onSelect transaction callback. Cancel at the input's current location, preserve outside selections, and reject stale or foreign input callbacks.
Plate UI
Use editor shortcuts and local panel dismissal
Plate UI
Preserve alignment when resizing media and discard cancelled pointer gestures. Keep slider values and bounds in consistent units.
Plate UI
Shared toolbars target the selected editable view.
Plate UI
Read semantic groups with useSuggestionReviews and accept or reject by ID. Keep labels, dates and card activation in the copied view.
Use the feature's inline suggestion projection for consistent inherited text styling.
Plate UI
Derive the default size from the heading level and keep input, presets and step buttons within 1–100 pixels. Reject empty and nonnumeric input.
Display Viewing and select its menu option whenever the editor is read-only, including when the suggestion preference is enabled.
Plate UI
Install the paste and import plugins; call exportDocx with a document snapshot from the export action.
Emit ordinary HTML anchors and let the converter assign unique bookmark names within each DOCX document.
Plate UI
Choose the PlantUML server with plantUmlServer and customize PNG downloads, preview height, and debounce in the copied component.
Plate UI
Edit a local equation draft, confirm it with Done or Enter, and undo it in one step. Escape discards the draft without overwriting external changes.
Plate UI
Use NavigationFeedbackPlugin target attributes directly for reference and definition highlights.
Plate UI
Keep URL drafts verbatim until submission, preserve rejected input, position the floating form inside narrow viewports, and open shortcuts in the focused editor view.
Plate UI
Render task markers directly in list wrappers
Plate UI
Admit picker, paste, and drop batches through one draft-slot protocol. Upload tasks survive view remounts, cancel when their keyed draft loses authority, expose local progress and retry state, and report each failure once through MediaKit.
Plate UI
Insert media URLs through the selected media feature
Plate UI
Explore collapsible Details in the playground
Plate UI
Share toolbar overlay tracking and preserve anchor ref cleanup
Plate UI
Keep search, first-item selection, and Enter activation in the copied command bridge while Fzf owns matching; install only the menu parts used by the tag picker.
Plate UI
Keep heading tracking stable while scrolling and update the active row when returning to an earlier heading. Configure scroll enablement and offset on TocElement.
Plate UI
Keep the native code docs preview at 1,000 lines with a separate 10,000-line stress test.
Plate UI
Read search state and call search actions through FindPlugin.
Include use-mounted in standalone installations.
Plate UI
Stop pending chunks when resetting, changing scenarios, navigating, switching editor modes, or leaving the demo.
Confirm copying after the clipboard write succeeds and allow retry after a failure.
Preserve stored timestamps when callers reuse or mutate input dates.
Release pending layout measurements and loading timers on unmount.
Clarify file-size and minimum-file-count errors.
Avoid adding an empty stylesheet during image and PDF export.
Plate UI
Responsive scrolling beside large editors
Responsive scrolling around large highlighted native code blocks
Plate UI
Code block copy and drawing controls resolve their current document position when used.
Plate UI
Keep comment drafts intact when submitting with the keyboard
Plate UI
Use AIKit and DndKit to enable AI commands and drag and drop with ordinary Plate and Editor composition. Share one AI stream across editor views and retain custom transports and drag managers.
Provide tooltips in standalone installs.
Focus the calendar when opening the date picker.
Preserve server rendering and input semantics in Base UI editors.
Plate UI
Preserve custom command components and their cleanup with asChild.
Plate UI
Run callback ref cleanup when popover anchors and command lists unmount.
Plate UI
Code blocks preserve selection, composition and indentation with incremental CodeMirror syntax.
Plate UI
Open the Link toolbar above its selection without installing Comments or Suggestions.
Plate UI
Preserve discussion state across edits and failed saves
Plate UI
Import YjsPlugin from the copied remote-cursor-overlay file for selection highlights, carets, and labels. Edit that file to customize their colors, opacity, and classes.
Plate UI
Store multiline code in one text child and remove the code-line component and virtualization dependency.
- Remove the code-line plugin and component when updating copied editor code.
Plate UI
Keep comments reachable after complete text deletion, and restore exact highlights through undo and redo.
Render thread message bodies with the static Plate view so replies do not mount nested editable runtimes.
Plate UI
Keep a 10,000-line highlighted code block responsive with bounded CodeMirror DOM and Plate-owned editing and history.
Keep large highlighted code blocks responsive when list support is installed.
Plate UI
Open each block's combined comments and suggestions in Floating Discussion, including exact overlaps, block-caret creation, and static or read-only highlights.
- Install
DiscussionKitfor Floating Discussion and per-block affordances. - Replace
block-discussionwithdiscussion.
Show suggestion authors, changes, attached comment threads, and Accept or Reject actions beside ordinary comments.
Stage AI comments for Accept or Reject before publishing their thread records.
Keep the toolbar above the editor and use Floating Discussion on narrow screens without collapsing the editing surface.
Load fetched thread records through CommentsPlugin.configure({ initialState: { initialThreads } }), preserving ranges, authors and timestamps. Read records for saving through api.getThreads.
Preserve inserted and removed suggestion markup in static HTML exports.
Preserve code token colors and indentation through the copied DOCX export preset.
Plate UI
Render editor highlights through plugin decorations.
Plate UI
Configure components, mark attributes, and structural UI through the owning plugin's component, render, and slots fields.
Plate UI
Open and reopen Date popovers on the first click.
Plate UI
Open inline equation editors on the first click.
Plate UI
Define component-owned prop shapes at their component signatures and reserve named prop contracts for exported reuse.
Plate UI
Keep hidden media captions mounted during selection changes.
Plate UI
Search documents with a visible Find bar and transient, keyboard-navigable matches.
Demonstrate native inactive-selection paint for expanded ranges and collapsed carets without an editor plugin.
Keep the canonical selection visible while marked editor controls own focus, and clear it on every unmarked focus transition.
Position floating controls from the exact mounted editor selection, reveal them only after placement resolves, and mount complete toolbar components with only the Editable ref. FloatingToolbar accepts optional custom children.
Render remote Yjs selections and carets through YjsPlugin slots with per-cursor updates.
Focus the URL input when the floating form opens, including from an empty paragraph, and preserve keyboard navigation between its fields.
Plate UI
Fix annotation hover scrolling
Plate UI
Open Date calendars on the first click.
Plate UI
Keep block equations full-width and centered.
Plate UI
Fix table of contents clicks so the selected heading scrolls into view and stays there.
Plate UI
Use nested semantic Details and Summary nodes with transient disclosure state.
Plate UI
Use useCreateEditor for React editor creation. use-chat exports useEditorChat, block discussion exports BlockResolvedSuggestion, and missing required values report contextual errors.
Plate UI
Use platejs for registry editor dependencies.
Plate UI
Keep required-value checks in each component with contextual errors and no shared registry dependency.
Plate UI
Export complete editor block composition as PlateEditor while keeping the shared presentation component named Editor.
Plate UI
Install with platejs and copied helper source; select-editor includes its controlled command implementation.
Plate UI
Compose node-selection highlighting and drag selection with NodeSelectionHighlight and NodeSelectionDrag from platejs/react. Link their API and demo from the Editor registry page.
Plate UI
Keep comment popovers anchored to their text, clear abandoned draft marks without moving the live selection or caret, and keep the floating toolbar available after resolving a comment.
Plate UI
Use flat input rows with an edge-to-edge separator.
Plate UI
Hide block and cell drag handles during table cell selection. Keep row drag handles for selections within one row, and hide them across rows.
Plate UI
Hide native text highlight while selecting multiple table cells.
Keep the text cursor while resize handles are ignored during cell-selection drags.
Plate UI
Select custom Plate block content from its schema and let tables render their own selection geometry.
Plate UI
Install Base UI source with base-nova by default. Explicit Radix styles select the matching interaction adapters.
Install Nova, Vega, Maia, Lyra, Mira, Luma, Sera, or Rhea code styles without duplicating the complete editor registry.
Compose popovers, dropdowns, and context menus through the selected provider without provider-specific trigger, focus, delay, or value props in consumer code.
Install the docs block with Base or Radix without fixed Radix primitive packages.
Create a fresh Next project with a complete dependency graph, collision-free inline-suggestion imports, and current copied-source types.
Plate UI
Preserve one selection highlight while changing font size
Plate UI
Paint the block-selection marquee during gutter drags
Plate UI
Fix Plate-to-HTML rendering for values with element IDs
Plate UI
Resolve links without a website-only locale utility.
Plate UI
Install the authored editor kit without generated TypeScript or schema snapshots. Generate exact contracts from the application's customized plugin module and enforce plate generate --check <entry> in CI.
- Delete unused plugins.generated.ts and plugins.schema.json files. If the app needs exact contracts, install @platejs/cli, regenerate from its local plugin module, and enforce plate generate --check <entry> in CI.
Plate UI
Keep editor focus and the floating toolbar visible while toolbar menus handle pointer input.
Plate UI
Preserve the active editor value while focus moves into a control, and reopen inline equations only after selection returns.
Give each browser object URL one source lifetime and revoke it when that source is replaced or unmounted.
Render the selected-cell drag handle at its cell owner and keep fake-stream cancellation inside its transport.
Use named React Compiler components without manual memo wrappers or display-name assignments.
Plate UI
The copied editor renders a Pointer Events marquee while exact one-or-many membership stays in editor selection. No selection plugin, area abstraction, or selection package is required.
Plate UI
Activate block drag behavior only during pointer and drag interactions while preserving the stable block DOM.
Plate UI
Show nested property values as JSON in version history updates.
Plate UI
Use native, keyboard-accessible controls for split toolbars, media upload, and image preview actions.
Restrict embedded content with explicit sandbox and referrer policies.
Plate UI
Accept anchored removal suggestions without crashing the editor.
Plate UI
Store dates under one value and persisted associations under ref.
Use flat lowercase drawing fields and store equation source under latex.
Apply the v54 migration, field ownership, and numeric-domain contracts.
Plate UI
Keep controlled tags and decorated text stable during typing and undo.
Plate UI
Keep UploadThing server routing in uploadthing and colocate client upload state in media-placeholder.
- Keep custom upload state in your media placeholder component;
uploadthinginstalls only the server router.
Keep single-consumer subscription and picker state inside their owning component families.
Plate UI
Keep DOCX file import and export in the DOCX example while default editors retain DOCX paste support.
Plate UI
Keep reusable editor composition migration-free and teach named lineage only in the dedicated migration example.
- Define your named schema and migration chain in the application persistence owner;
editor-pluginsexports onlyEditorKit.
Plate UI
Bind the copied editor to a named schema and run its v53-to-v54 document migration before rendering.
Plate UI
Install self-contained families with product copy, limits, styling, endpoints, and interaction policy in copied source; table composes renderer layout and pointer behavior directly.
Plate UI
Use one semantic Heading, boundary-only list numbering, semantic Table fields, intrinsic Media dimensions, and the generated v54 editor contract.
Plate UI
Install copied editor features from one flat editor namespace
- Move copied Plate imports from @/components/ui and @/components/editor/plugins to @/components/editor.
- Install feature items without -kit or -base-kit suffixes; FooKit remains the exported plugin tuple.
- Import feature-owned renderers and family-only components from the owning feature file, such as @/components/editor/footnote and @plate/footnote.
- Use semantic renderer item names such as blockquote and media-image instead of *-node; install static renderers from their matching *-static items.
Plate UI
Keep interaction state and behavior inside direct React 19 component families.
- Rename the FloatingToolbar state prop to options.
Install the exact app-local descriptors owned by their copied UI families.
Plate UI
Compose DOCX renderers through target plugins. Install DocxIOPlugin explicitly in the live editor when using its scoped import or export API.
Plate UI
Reuse the primary editor composition directly, compose Copilot only in its demo, and install ElementIdPlugin only when persisted IDs are required.
- Import the primary editor composition directly outside the Copilot demo. Append CopilotKit only in copilot-demo.
- Install ElementIdPlugin explicitly when persisted element IDs or Markdown withBlockId are required.
- Install CodeDrawingPlugin or ExcalidrawPlugin explicitly in editors that use those specialized nodes.
- Remove schema: EditorSchema from copied editor setup. Add an application-owned schema id and version only for persisted schema lineage, migrations, history serialization, or collaboration.
Keep code drawing and Excalidraw explicit in the demos that use them.
Derive schema identity from the installed plugin composition instead of publishing application lineage from copied registry code.
Plate UI
Correlate comments and table-cell edits with request-local refs instead of persisted element IDs.
Plate UI
Fix heading renderer prop types across H1-H6 components.
Plate UI
Install every required package and copied registry file without redundant declarations.
Plate UI
Build live TOC navigation and DOCX-local bookmarks from runtime node keys.
Install persisted element IDs explicitly as editor product policy.
Plate UI
Infer copied renderer props from their plugin descriptors.
Plate UI
Apply font marks to text and keep selection highlighting aligned after changing font size.
Plate UI
Use the typed keyboard plugin command while preserving one atomic selection update.
Plate UI
Restore editor focus when the table menu closes.
Plate UI
Fix mouse-drag block selection
Plate UI
Close the inline equation editor at an arrow-key boundary.
Plate UI
Apply formatting without losing the active text selection.
Plate UI
Keep direct block drag and drop stable
Plate UI
Keep typing responsive while comments and suggestions are enabled.
Plate UI
Infer node component props from plugin descriptors
Plate UI
Use one table cell plugin and component for data and header cells.
- Use TableCellElement for data and header cells. Header nodes use type: 'tableCell' with header: true.
Plate UI
Read final element types and property keys from installed schema handles.
Plate UI
Read the stored AI preview when insert or replace commands run, so custom commands pass only formatting options.
Plate UI
Configure feature renderers explicitly while installing each plugin name once.
Read cursor geometry and schema-configured node ids from their package owners.
Let resize handles derive read-only state from the editor.
Use the DnD block selection-and-focus controller after row drops.
Plate UI
Render without installing the code drawing plugin twice.
Plate UI
Seed editor-local plugin stores with initialState.
Read, update, and subscribe to plugin state through the typed store API.
Configure and update plugin store state through the same API used by copied registry code.
Plate UI
Use one script mark for subscript and superscript
- For persisted v53 script marks, add migrateV54 to the app's defineDocumentMigrations chain.
Plate UI
Bind static components without React plugin imports
Plate UI
Run two independent local Yjs peers with connection, schema, history, and remote cursor controls.
Plate UI
Configure Markdown parsing without installing a renderer-specific Footnote preset.
Compose the shared Markdown parser with the matching live or static Footnote renderers exactly once.
Install only the presets their copied source composes, without unrelated static/base counterparts.
Preserve Indent support while reserving Tab and Shift+Tab navigation for tabbable elements.
Plate UI
Configure text color palettes, optionally control recent colors, and navigate color grids with the keyboard.
Plate UI
Keep suggestion and trailing-block capabilities independently composable
Plate UI
Use installed feature plugins instead of raw type dispatch in toolbar controls.
Plate UI
Style placeholders and drop cursors in the copied editor component while Plite supplies their structural DOM behavior.
Plate UI
Use the installed List plugin for list-aware block dragging
Plate UI
Compose editor variants with explicit plugin arrays
Plate UI
Render direct media caption children, keep an empty caption hidden until asset focus, and separate asset selection from caption editing.
- Remove CaptionPlugin from media kits and render each media element's direct children as its caption; use [{ text: '' }] when the caption is absent.
- For persisted v53 media captions, add migrateV54 to the app's defineDocumentMigrations chain.
Plate UI
Use plugin-scoped media insertion in copied editor transforms.
Plate UI
Keep plugin configuration terminal
Plate UI
Use the installed plugin's typed editor APIs with Plate v54.
Plate UI
Wire list toolbar controls to ListPlugin
Plate UI
Open the date picker reliably inside Plite editors.
Plate UI
Insert code blocks, drawings, Excalidraw canvases, tables, and dropped media through their installed commands with explicit relational or path placement.
Plate UI
Fix preserved-space wrapping so inserted space runs stay inside editable and static editor widths.
Plate UILatest
Install editor kit files through the configured components alias so relative ./plugins/* imports resolve after shadcn CLI adds.
Plate UI
Show the selected language label in read-only and static rendering. Set showLanguageLabel={false} on the component to hide it.
Plate UI
Fix column drag and drop by attaching the DnD drop target ref to the rendered column element so horizontal drop lines can resolve a valid target.