v0.19.0
Summary
Fixes a long-standing crash when navigating out of a RichQuoteNode with the arrow keys, and reshapes the quote attribution editor so its input no longer interferes with Lexical's contenteditable. As part of the audit, @base-ui/react is promoted to a peerDependency in @haklex/rich-editor-ui to prevent duplicate React Context instances downstream.
Breaking Changes
None — @base-ui/react was already declared as a peer by @haklex/rich-editor, so consumers of @haklex/rich-editor-ui typically have it installed transitively. Standalone consumers of @haklex/rich-editor-ui must now install @base-ui/react themselves.
Bug Fixes
rich-editor-ui—QuoteAttributionPluginno longer portals into the Lexical-managed<blockquote>. Arrow-up out of a quote previously crashed React withNotFoundError: Failed to execute 'removeChild' on 'Node'because Lexical's reconciler mutated the blockquote children outside React's knowledge. The plugin now renders one always-on input perRichQuoteNodethrough a single portal intodocument.body, tracking each quote's bounding rect viaResizeObserver.rich-editor— Quotes hosting an active attribution panel reserve extrapadding-bottom(spacing.sm + 24px) so the floating input never overlaps the final line of quote text.
Other
@haklex/rich-editor-ui—@base-ui/reactmoved fromdependenciestopeerDependencies(>=1.5.0) per the always-peer audit rule (rationale: 88bb7a0 lucide-react incident).
Bump rationale
| Package | Bump | Rationale |
|---|---|---|
| rich-editor | minor | shared version — paired with rich-editor-ui |
| rich-editor-ui | minor | new peerDependencies.@base-ui/react; internal plugin rewrite |
max(bumps) = minor (no exports removed). Incremental publish set: @haklex/rich-editor-ui, @haklex/rich-editor.