v0.45.0
v0.45.0 is a monthly release with several breaking changes around selection and reconcile semantics, a major new experimental DOMImportExtension API for composable HTML import that replaces importDOM, a generalized DOMSlot and DOM render override surface, new HistoryExtension ergonomics (canUndo/canRedo signals, maxDepth), notable reconciler/selection performance work, and a wide range of bug fixes across IME, mobile keyboards, list/code/table editing, and markdown round-tripping.
$getReconciledDirection now walks through shadow roots when resolving the reconciled dir attribute on a node, so nested ShadowRoot-style elements (e.g. tables) inherit direction consistently with regular elements. Callers that relied on direction inheritance stopping at shadow roots will need to update.
Pressing Backspace at the start of a non-empty block previously merged the current block into the previous block, which discarded the current block's type/format. The new behavior merges the previous block's children into the current block instead, preserving the current block's type (heading, list item, quote, etc.). A new $mergeBlockBackward helper on RangeSelection is exposed for custom command handlers that want the same behavior.
LexicalNode.replace, insertBefore, insertAfter, and related callers that move a node between parents now correctly adjust the current selection to follow the moved node instead of leaving the selection pointing at the (now empty) original slot. This may change selection state observed by transforms or update listeners that previously relied on the stale offsets.
Markdown shortcuts (e.g. *, _, ~) typed via IME composition now trigger after the composition is committed, not just on raw beforeinput. This fixes shortcuts being silently dropped during Japanese / Korean / Chinese input but may also fire shortcuts in some flows that previously didn't.
@lexical/extension / @lexical/rich-text / @lexical/plain-text — NormalizeInlineElementsExtension (#8497)
registerRichText and registerPlainText now register a transform that removes empty inline elements (e.g. LinkNode, formatted TextNode wrappers with no children) instead of leaving them in the tree. The transform is also exported as NormalizeInlineElementsExtension from @lexical/extension for use with extension-based setups. Editors that intentionally kept empty inline wrappers will need to disable the extension or override the transform. See Included Extensions.
lexical / @lexical/extension / @lexical/rich-text / @lexical/plain-text — NormalizeTripleClickSelectionExtension (#8520)
The "triple-click selects the whole paragraph including the trailing newline" normalization has moved out of LexicalEvents and into a new NormalizeTripleClickSelectionExtension registered by both rich-text and plain-text. The core LexicalEditor no longer performs this normalization on its own, so editors that bypass registerRichText / registerPlainText (or the equivalent extensions) need to register the extension explicitly to keep the previous behavior. See Included Extensions.
lexical / @lexical/html / @lexical/selection / @lexical/utils / @lexical/playground — Generalized DOMSlot and DOMRenderExtension override surface (#8519)
DOMSlot is now generalized so child slots can be expressed for arbitrary DOM containers (not just the direct child element), and $createDOM, $updateDOM, $exportDOM, $getDOMSlot etc. all flow through the new override surface. The previously-exported AutocompleteNode in the playground has been replaced by a VisibleLineBreakExtension that demonstrates the new override surface, and markSelection in @lexical/utils has been rewritten on top of the generalized slot API. Custom nodes that override getDOMSlot to return a non-element wrapper now have a real way to express that. See the DOMRenderExtension docs.
A new DOMImportExtension replaces the legacy node-class importDOM static method with a composable middleware-style API. Rules declare a CSS-selector-style matcher, an optional schema for child handling, and a DOMImportFn that builds Lexical nodes from the matching DOM. Many helpers ship alongside it: $distributeInlineWrapper, ImportSession, DOMPreprocessFn for source-specific cleanup (Word, VS Code, etc.), and full TypeScript types for rules, captures, and contexts. A new dev-examples/dom-import showcase wires it up to a Word/VS Code paste flow. The legacy importDOM continues to work; new code can opt in to DOMImportExtension for richer composition and explicit ordering. The companion ClipboardDOMImportExtension (in @lexical/clipboard) routes text/html pastes through the new pipeline. See the DOMImportExtension guide and the "Migrating from importDOM" section.
domOverride now supports disabledForEditor and disabledForSession predicates so render overrides can be conditionally skipped on a per-editor or per-session basis (e.g. only apply during export, or only when a feature flag is on). Useful when one extension provides multiple overrides whose applicability depends on context that isn't known at registration time. See the DOMRenderExtension docs.
ElementNode now uniformly imports and exports the data-lexical-indent attribute so any subclass round-trips its indent level through HTML without having to override exportDOM / importDOM (fixes the long-standing #7729 regression around indented headings/paragraphs).
Update listeners and update transforms that re-trigger themselves are now caught by a runtime guard that throws a descriptive error after a configurable number of nested updates, instead of hanging the tab. See Updates and Listeners.
HistoryExtension's output now exposes canUndo and canRedo as ReadonlySignal<boolean>s so toolbar buttons can subscribe directly without polling historyState or duplicating the priority/state bookkeeping. See Extension Signals.
HistoryExtension accepts a new maxDepth option that bounds the undo stack. Older entries are evicted FIFO when the depth is exceeded. See the new "Tuning HistoryExtension for memory and long sessions" docs.
Counterpart to $convertToMarkdownString that serializes only the current selection (or any caller-provided range) to a markdown string, useful for "copy as markdown" toolbar actions and for selection-scoped AI prompts.
A new $setFormatFromDOM helper extracts text-align / dir from a DOM element and applies it to an ElementNode. ListItemNode.importDOM now uses it to correctly import alignment for list items pasted from external sources.
ListNode exposes a createListItemNode factory that is now used by children-normalization, so ListNode subclasses can supply a custom ListItemNode subclass without monkey-patching the normalizer.
RichTextExtension now accepts an escapeFormatTriggers config (a ReadonlySignal<EscapeFormatTriggerConfig>) that opts text-format escape behavior in/out per trigger (enter, click, arrow, space, tab). With it enabled, typing at the boundary of a formatted text node "escapes" the active format (bold, italic, code, etc.), matching the typing experience in Google Docs / Notion. Disabled by default. See Included Extensions.
New ClickAfterLastBlockExtension inserts a fresh paragraph when the user clicks below the last block (and places the caret in it), so single-block editors and short documents don't strand the user with no easy way to start a new line.
Tokenizer.defaultLanguage may now be null to indicate that code blocks without an explicit language should round-trip through markdown without injecting a default language tag (e.g. ```javascript). Preserves CommonMark's "no fence info" form on export.
@lexical/code-core / @lexical/code-shiki / @lexical/code-prism — Outdent space-indented code lines (#8445)
Shift+Tab in a code block now correctly outdents space-indented lines (not just tab-indented), respecting the tokenizer's configured indent width.
LexicalTypeaheadMenuPlugin's onClose may now return a Promise, useful for handlers that need to await network or animation work before tearing down the menu.
GetClipboardDataExtension is now exported from @lexical/clipboard for use as a peer dependency from custom clipboard handlers.
Every docs page now has a server-rendered "Copy page as Markdown" button (and a matching ?raw URL) so AI assistants and humans can grab the raw markdown without scraping the rendered HTML.
Core:
⚠️ #8479 Include shadow root in$getReconciledDirection⚠️ #8493 Backspace at block start now preserves the current block (heading / list item / quote)⚠️ #8501 Adjust selection whenLexicalNodecallers move a node out of its parent⚠️ #8519 GeneralizeDOMSlotand add DOMRenderExtension override surface;markSelectionrewritten on top⚠️ #8520 Move triple-click selection normalization toNormalizeTripleClickSelectionExtension- 🆕 #8536
ElementNodeimport/export ofdata-lexical-indent - 🆕 #8542 Detect infinite recursion in update listeners and transforms
- ⚡ #8422 Defer DOM Selection property reads in
$updateDOMSelection - ⚡ #8474 Cache
RangeSelection.isBackward()on the instance - ⚡ #8481 Adopt GenMap copy-on-write for
NodeMapand reconcilerkeyToDOMMap - ⚡ #8482 Children fast path with suffix-incremental cache update in
$reconcileChildren - ⚡ #8505 Centralize replace-area selection mapping + bulk splice across list/selection/link
- ⚡ #8548 Cache last-child kind for trailing-
<br>reconcile - ✅ #8412 Import
dirattribute inimportDOM - ✅ #8417 Workarounds for buggy browser behavior around macOS text replacements
- ✅ #8428 Respect CSS
displaystyle inisBlockDomNode/isInlineDomNode - ✅ #8441 Reuse DOM when reconciling cross-parent node moves
- ✅ #8466 Resolve
--lexical-indent-base-valuevia CSSvar()instead of pre-computing in JS - ✅ #8470 Preserve queued updates and tags through
setRootElement - ✅ #8475 Handle iOS 10-key Korean IME
deleteContentBackwardwithtargetRange - ✅ #8486 Keep caret above the on-screen keyboard after Enter
- ✅ #8517 Handle triple-click overselection in
$setBlocksType - ✅ #8547 Migrate away from legacy Flow syntax in flow definitions
- ✅ #8558 Cursor stuck before leading inline
DecoratorNode - ✅ #8564 Skip
$reconcileChildrenfast path during full reconcile - ✅ #8569 Correct children fast-path text size for cross-parent-moved elements
- ✅ #8577 Prevent
MOVE_TO_END/MOVE_TO_STARTcrash on decorator-only elements - ✅ #8581 Restore Shift+Cmd+Arrow selection expansion for
MOVE_TO_END/MOVE_TO_START
HTML / DOM:
- 🆕 #8528
DOMImportExtension— composable replacement forimportDOMwith rule-based matchers and DOM preprocessing - 🆕 #8575
disabledForEditor/disabledForSessionpredicates ondomOverride
Code:
- 🆕 #8445 Outdent space-indented code lines on Shift+Tab
- 🆕 #8553 Allow
nullTokenizer.defaultLanguageto preserve markdown ``` round-trip - ✅ #8487 Detect nested
<br>elements in pasted code - ✅ #8514 Externalize shiki dependencies in the published bundle
Clipboard:
- 🧹 #8431 Export
GetClipboardDataExtension
Extension:
- 🆕 #8497
NormalizeInlineElementsExtension(also wired into rich/plain text) - 🆕 #8520
NormalizeTripleClickSelectionExtension - 🆕 #8549
ClickAfterLastBlockExtension - ✅ #8510 Set the correct default
$canIndent
History:
- 🆕 #8465
canUndo/canRedoReadonlySignals onHistoryExtension - 🆕 #8537
maxDepthoption for bounding the undo stack
Link / List:
- 🆕 #8460
$setFormatFromDOM;ListItemNodeimports alignment from DOM - 🆕 #8427
ListNode.createListItemNodefactory for subclasses
Markdown:
⚠️ #8503 Apply markdown shortcuts on composition-committed triggers (fixes IME-typed*/_/~)- 🆕 #8395
$convertSelectionToMarkdownStringAPI - ✅ #8402 Preserve hard line breaks in default markdown import
- ✅ #8488 Run element-shortcut transforms on Enter
- ✅ #8535 Fix markdown import with Unicode whitespace
React:
- 🆕 #8489 Optional async
onCloseforLexicalTypeaheadMenuPlugin - ✅ #8411 Pass editor context to
editorState.read()inmarkSelection - ✅ #8472
ExtensionComponentsupport for output components with required props - 🧹 #8485 Make
onOpenEmbedModalForConfigprop optional inLexicalAutoEmbedPlugin
Rich Text / Plain Text:
- 🆕 #8383 Opt-in
escapeFormatTriggersonRichTextExtension - ✅ #8526 Insert paragraph on Enter for a block
DecoratorNodeNodeSelection
Table:
- ✅ #8492 Attach window
pointerdownhandler when root element is set after register - ✅ #8502 Prevent crash when moving selection with arrow key outside of nested table
Yjs:
- ✅ #8461 Handle node state being removed on non-
TextNodes in collab v2 - 🧹 #8527 Fix
RenderSnapshotcomment typo
Playground:
- 🆕 #8464 New "markdown-editor split-view" example
- ✅ #8419 #8432 Position
FloatingLinkEditorcorrectly for multi-line / decorator-only links and near the editor's bottom edge - ✅ #8442 Prevent crash importing
<details>with loose body content - ✅ #8444 Allow
PagesExtensionto be disabled byActionsPlugin(HTML & markdown mode) - ✅ #8453 Convert selection to a code block in place
- ✅ #8480 Prevent auto-zoom when focusing in the editor on iOS Safari
- ✅ #8496 Set
font-sizeforh2 - ✅ #8521 Fix unawaited Playwright promises in e2e suite
- ✅ #8534
EquationNodeclick →NodeSelection; empty-input Backspace removes - ✅ #8539 Normalize collapsible content children
- ✅ #8565 Build dev playground in development mode
Website / Examples:
- 🆕 #8570 Server-rendered "Copy page as Markdown" button
- 🆕 #8546 "Tuning HistoryExtension for memory and long sessions" docs
- 🆕 #8429 Clarify
editorStatenullvsundefinedand empty-state pitfall - 🆕 #8467 Document
NodeStatein$configJSON serialization - 🆕 #8471 TSDoc for
LexicalNodeReplacementandwithKlass - 🆕 #8476 Add missing
@lexical/reactplugin docs - 🧹 #8430 Inline toolbar SVG icons in examples via Vite asset handling
- 🧹 #8403 Merge
dev-node-state-styleintoexamples/node-state-style - 🧹 #8473 Disable
skipLibCheckinreact-richfor lib-types regression coverage (#7093) - ✅ #8462 Add the missing links to the sandbox
- ✅ #8463 #8483 Fix copyright statement to pass OSS automated checkup
- ✅ #8498
update-team-data - ✅ #8509 Drop Vercel Analytics inject and unwrap chat input from flex parent
- ✅ #8516 Drop
docusaurus-plugin-internaldocs-fbpreset - ✅ #8523 Correct links to included extensions
- ✅ #8531 Remove
embed=1from non-iframe StackBlitz links - ✅ #8557 Fix crash on
/docs/errorpage from undefinedprocess
Infrastructure:
- 🧹 #8554 Publish packages from their root directory
- 🧹 #8512 Respect
browserslist - 🧹 #8504 Use composite actions to simplify GitHub workflows
- 🧹 #8494 Only cancel in-progress workflows on newer commits
- 🧹 #8499 Run extended tests on new commits to approved PRs
- 🧹 #8508 Drop FIXME #8348 Firefox
ArrowDownworkaround inTables.spec.mjs - 🧹 #8522 Pin Windows e2e runners to
windows-2022 - 🧹 #8572 Use
playwright install-depsinstead ofapt-get - 🧹 #8582 Upgrade
@playwright/testto^1.60.0 - 🧹 #8541 Cover bold-italic markdown round trip
- 🧹 #8400 Fix release workflow's missing rename from
release.jstorelease.mjs - 🧹 #8401 #8404 #8405 #8406 #8408 #8409 #8415 #8540 Dependency vulnerability fixes (protobufjs, dompurify, postcss, astro, eslint, immutable, path-to-regexp, serialize-javascript)
- v0.44.0 by @etrepum in https://github.com/facebook/lexical/pull/8394
- [*] Bug Fix: Fix release workflow's missing rename from release.js to release.mjs by @etrepum in https://github.com/facebook/lexical/pull/8400
- [lexical] Chore: Fix protobufjs dependency vulnerability by @vishisht31 in https://github.com/facebook/lexical/pull/8401
- [lexical] Chore: Fix dompurify dependency vulnerability by @vishisht31 in https://github.com/facebook/lexical/pull/8404
- [lexical] Chore: Fix postcss dependency vulnerability by @vishisht31 in https://github.com/facebook/lexical/pull/8405
- [lexical] Chore: Fix astro dependency vulnerability by @vishisht31 in https://github.com/facebook/lexical/pull/8406
- [examples] Chore: Merge dev-node-state-style into examples/node-state-style by @etrepum in https://github.com/facebook/lexical/pull/8403
- [lexical] Chore: Fix eslint dependency vulnerability by @vishisht31 in https://github.com/facebook/lexical/pull/8408
- [lexical] Chore: Fix immutable dependency vulnerability by @vishisht31 in https://github.com/facebook/lexical/pull/8409
- [lexical][lexical-rich-text][lexical-list] Bug Fix: Import dir attribute in importDOM by @mayrang in https://github.com/facebook/lexical/pull/8412
- [lexical] Chore: Fix path-to-regexp dependency vulnerability by @vishisht31 in https://github.com/facebook/lexical/pull/8415
- [lexical-utils] Bug Fix: Pass editor context to editorState.read() in markSelection by @potatowagon in https://github.com/facebook/lexical/pull/8411
- [lexical-markdown] Feature: Add $convertSelectionToMarkdownString API by @mayrang in https://github.com/facebook/lexical/pull/8395
- [lexical] perf: defer DOM Selection property reads in $updateDOMSelection by @rhagigi in https://github.com/facebook/lexical/pull/8422
- [lexical-playground] Bug Fix: Position FloatingLinkEditor below the entire link for multi-line and decorator-only links by @mayrang in https://github.com/facebook/lexical/pull/8419
- Chore: Inline toolbar SVG icons in examples via Vite asset handling by @markselby9 in https://github.com/facebook/lexical/pull/8430
- [lexical-website][lexical-react] Documentation Update: Clarify editorState null vs undefined and empty-state pitfall by @markselby9 in https://github.com/facebook/lexical/pull/8429
- [lexical] Bug Fix: Respect CSS display style in isBlockDomNode and isInlineDomNode by @abhishekvishwakarma007 in https://github.com/facebook/lexical/pull/8428
- [lexical-clipboard] Chore: Export GetClipboardDataExtension by @ibastawisi in https://github.com/facebook/lexical/pull/8431
- [lexical-playground] Bug Fix: Prevent FloatingLinkEditor toolbar from being clipped near the editor's bottom edge by @mayrang in https://github.com/facebook/lexical/pull/8432
- [lexical][lexical-playground] Bug Fix: Add workarounds for buggy browser behavior around macOS text replacements by @nmggithub in https://github.com/facebook/lexical/pull/8417
- [lexical-markdown] Bug Fix: Preserve hard line breaks in default markdown import by @pro-vi in https://github.com/facebook/lexical/pull/8402
- [lexical][lexical-list] Bug Fix: Reuse DOM when reconciling cross-parent node moves by @mayrang in https://github.com/facebook/lexical/pull/8441
- [lexical-playground] Bug Fix: Prevent crash importing
with loose body content by @markselby9 in https://github.com/facebook/lexical/pull/8442
- [lexical-playground] Bug Fix: Allow PagesExtension to be disabled by ActionsPlugin (html & markdown mode) by @etrepum in https://github.com/facebook/lexical/pull/8444
- [lexical-list] Feature: Add the
createListItemNodemethod to the ListNode and use it for children normalization by @levensta in https://github.com/facebook/lexical/pull/8427 - [lexical-rich-text] Feature: Add opt-in format escape triggers for RichTextExtension by @vishisht31 in https://github.com/facebook/lexical/pull/8383
- build(deps): bump @floating-ui/react from 0.27.16 to 0.27.19 by @dependabot[bot] in https://github.com/facebook/lexical/pull/8448
- build(deps): bump happy-dom from 20.8.9 to 20.9.0 by @dependabot[bot] in https://github.com/facebook/lexical/pull/8451
- [lexical-code-core][lexical-code-shiki][lexical-code-prism] Feature: Outdent space-indented code lines by @mayrang in https://github.com/facebook/lexical/pull/8445
- [lexical-playground] Bug Fix: Convert selection to a code block in place by @mayrang in https://github.com/facebook/lexical/pull/8453
- build(deps-dev): bump the dev-dependencies group across 1 directory with 30 updates by @dependabot[bot] in https://github.com/facebook/lexical/pull/8447
- build(deps): bump yjs from 13.6.27 to 13.6.30 by @dependabot[bot] in https://github.com/facebook/lexical/pull/8449
- build(deps-dev): bump @types/jsdom from 21.1.6 to 28.0.1 in the dev-dependencies group by @dependabot[bot] in https://github.com/facebook/lexical/pull/8455
- build(deps): bump react-day-picker from 9.12.0 to 9.14.0 by @dependabot[bot] in https://github.com/facebook/lexical/pull/8458
- build(deps): bump react-error-boundary from 6.0.0 to 6.1.1 by @dependabot[bot] in https://github.com/facebook/lexical/pull/8456
- [lexical-yjs] Bug Fix: Handle node state being removed on non-TextNodes in collab v2 by @james-atticus in https://github.com/facebook/lexical/pull/8461
- [examples] Docs: Add the missing links to the sandbox by @levensta in https://github.com/facebook/lexical/pull/8462
- [lexical][lexical-list] Feature: Add
$setFormatFromDOMfunction and use it to import alignment for ListItem by @levensta in https://github.com/facebook/lexical/pull/8460 - build(deps): bump @chakra-ui/react from 2.10.9 to 3.35.0 by @dependabot[bot] in https://github.com/facebook/lexical/pull/8457
- [lexical-website] Fix copyright statement to pass OSS automated checkup by @potatowagon in https://github.com/facebook/lexical/pull/8463
- [lexical] Bug Fix: Resolve --lexical-indent-base-value via CSS var() instead of pre-computing in JS by @mayrang in https://github.com/facebook/lexical/pull/8466
- [lexical-website] Documentation Update: Document NodeState in $config JSON serialization by @markselby9 in https://github.com/facebook/lexical/pull/8467
- [lexical-website] Documentation: Add missing @lexical/react plugin docs by @abhishekvishwakarma007 in https://github.com/facebook/lexical/pull/8476
- [lexical] Refactor: Cache RangeSelection.isBackward() result on the instance by @mayrang in https://github.com/facebook/lexical/pull/8474
- [examples] Chore: Disable skipLibCheck in react-rich for lib-types regression coverage (#7093) by @markselby9 in https://github.com/facebook/lexical/pull/8473
- [lexical] Documentation: Add TSDoc for LexicalNodeReplacement and withKlass by @markselby9 in https://github.com/facebook/lexical/pull/8471
- [lexical-history] Feature: Add canUndo and canRedo ReadonlySignals to HistoryExtension output by @etrepum in https://github.com/facebook/lexical/pull/8465
- [lexical-react] Bug Fix: ExtensionComponent support for output Components with required props by @etrepum in https://github.com/facebook/lexical/pull/8472
- [lexical] Perf: Adopt GenMap copy-on-write for NodeMap and reconciler keyToDOMMap by @mayrang in https://github.com/facebook/lexical/pull/8481
- [lexical] Bug Fix: Preserve queued updates and tags through setRootElement by @mayrang in https://github.com/facebook/lexical/pull/8470
- Fix: Copyright statement to match OSS automated checkup regex by @potatowagon in https://github.com/facebook/lexical/pull/8483
- [Breaking Change][lexical] Bug Fix: Include shadow root in $getReconciledDirection by @ibastawisi in https://github.com/facebook/lexical/pull/8479
- [lexical-playground] Fix: Prevent auto-zoom when focusing in the editor in iOS Safari by @levensta in https://github.com/facebook/lexical/pull/8480
- [lexical] Bug Fix: keep caret above the on-screen keyboard after Enter by @jWA86 in https://github.com/facebook/lexical/pull/8486
- [lexical-code-core] Bug Fix: detect nested br elements in pasted code by @danyalahmed1995 in https://github.com/facebook/lexical/pull/8487
- [lexical-react] Chore: Make
onOpenEmbedModalForConfigprop optional in LexicalAutoEmbedPlugin by @levensta in https://github.com/facebook/lexical/pull/8485 - [lexical-table] Bug Fix: Attach window pointerdown handler when root element is set after register by @etrepum in https://github.com/facebook/lexical/pull/8492
- [examples][lexical-website] Feature: Add markdown-editor split-view example by @etrepum in https://github.com/facebook/lexical/pull/8464
- [ci] Bug Fix: Only cancel in-progress workflows on newer commits by @etrepum in https://github.com/facebook/lexical/pull/8494
- [Breaking Change][lexical] Bug Fix: Backspace at block start preserves the current block by @mayrang in https://github.com/facebook/lexical/pull/8493
- [lexical] Bug Fix: Handle iOS 10-key Korean IME deleteContentBackward with targetRange by @kotom320 in https://github.com/facebook/lexical/pull/8475
- [lexical-website] Chore: pnpm run update-team-data by @etrepum in https://github.com/facebook/lexical/pull/8498
- build(deps): bump mermaid from 11.14.0 to 11.15.0 by @dependabot[bot] in https://github.com/facebook/lexical/pull/8500
- [ci] Bug Fix: Run extended tests on new commits to approved PRs by @etrepum in https://github.com/facebook/lexical/pull/8499
- [lexical-playground] Bug Fix: Set font-size for h2 by @levensta in https://github.com/facebook/lexical/pull/8496
- [Breaking Change][lexical] Bug Fix: Adjust selection when removeFromParent callers move a node out of its parent by @mayrang in https://github.com/facebook/lexical/pull/8501
- [lexical] Perf: Children fast path with suffix-incremental cache update in $reconcileChildren by @mayrang in https://github.com/facebook/lexical/pull/8482
- [lexical-playground] Chore: Drop FIXME #8348 Firefox ArrowDown workaround in Tables.spec.mjs by @markselby9 in https://github.com/facebook/lexical/pull/8508
- [Breaking Change][lexical-markdown] Bug Fix: Apply markdown shortcuts on composition-committed triggers by @mayrang in https://github.com/facebook/lexical/pull/8503
- [Breaking Change][lexical-extension][lexical-rich-text][lexical-plain-text] Feature: Remove empty inline elements by @levensta in https://github.com/facebook/lexical/pull/8497
- [lexical-table] Bug Fix: prevent crash when moving selection with arrow key outside of nested table by @randal-atticus in https://github.com/facebook/lexical/pull/8502
- [lexical][lexical-list][lexical-selection][lexical-link] Refactor: Centralize replace-area selection mapping + bulk splice by @mayrang in https://github.com/facebook/lexical/pull/8505
- [lexical-extension] Bug Fix: Set the correct default
$canIndentby @levensta in https://github.com/facebook/lexical/pull/8510 - [ci] Refactor: Use composite actions to simplify github workflows by @etrepum in https://github.com/facebook/lexical/pull/8504
- [lexical-website] Refactor: Drop docusaurus-plugin-internaldocs-fb preset by @zurfyx in https://github.com/facebook/lexical/pull/8516
- [lexical-website] Bug Fix: Drop Vercel Analytics inject and unwrap chat input from flex parent by @mayrang in https://github.com/facebook/lexical/pull/8509
- [lexical-code-shiki][nextjs-code-shiki] Bug Fix: Externalize shiki dependencies in the published bundle by @etrepum in https://github.com/facebook/lexical/pull/8514
- [lexical-website] Bug Fix: Correct links to included extensions by @duydang2311 in https://github.com/facebook/lexical/pull/8523
- [lexical-markdown] Bug Fix: run element markdown shortcuts on Enter by @abhinavgautam01 in https://github.com/facebook/lexical/pull/8488
- [lexical-react] Feature: optional async onClose for LexicalTypeaheadMenuPlugin by @abhinavgautam01 in https://github.com/facebook/lexical/pull/8489
- [lexical][lexical-yjs][lexical-playground] Chore: Respect browserslist by @levensta in https://github.com/facebook/lexical/pull/8512
- [ci] Chore: pin Windows e2e runners to windows-2022 by @etrepum in https://github.com/facebook/lexical/pull/8522
- [lexical-playground] Bug Fix: Fix unawaited playwright promises in e2e test suite by @etrepum in https://github.com/facebook/lexical/pull/8521
- [lexical-yjs] Chore: Fix RenderSnapshot comment typo by @LeSingh1 in https://github.com/facebook/lexical/pull/8527
- [lexical-rich-text] Bug Fix: Insert paragraph on Enter for a block DecoratorNode NodeSelection by @mayrang in https://github.com/facebook/lexical/pull/8526
- [Breaking Change][lexical][lexical-extension][lexical-rich-text][lexical-plain-text] Feature: Move triple click selection handling to NormalizeTripleClickSelectionExtension by @etrepum in https://github.com/facebook/lexical/pull/8520
- [lexical] Bug Fix: handle triple-click overselection in
$setBlocksTypeby @flavorjones in https://github.com/facebook/lexical/pull/8517 - [lexical-website] Bug Fix: Remove embed=1 from non-iframe StackBlitz links by @etrepum in https://github.com/facebook/lexical/pull/8531
- [lexical-markdown] Bug Fix: Fix Markdown import with Unicode whitespace by @rodrigolungui in https://github.com/facebook/lexical/pull/8535
- [lexical] Feature: ElementNode import/export support for data-lexical-indent by @etrepum in https://github.com/facebook/lexical/pull/8536
- [lexical-history] Feature: Add maxDepth option to HistoryExtension by @etrepum in https://github.com/facebook/lexical/pull/8537
- build(deps): bump serialize-javascript from 6.0.2 to 7.0.4 by @dependabot[bot] in https://github.com/facebook/lexical/pull/8540
- [lexical-playground] Bug Fix: EquationNode click → NodeSelection + empty-input Backspace removes by @mayrang in https://github.com/facebook/lexical/pull/8534
- [lexical] Feature: Detect infinite recursion in update listeners by @mayrang in https://github.com/facebook/lexical/pull/8542
- [lexical-extension][lexical-html][lexical-utils][lexical] Chore: Migrate away from legacy flow syntax by @SamChou19815 in https://github.com/facebook/lexical/pull/8547
- [lexical-markdown] Chore: Cover bold italic markdown round trip by @rohan-patnaik in https://github.com/facebook/lexical/pull/8541
- [lexical] Bug Fix: Cache last-child kind for trailing-
reconcile by @mayrang in https://github.com/facebook/lexical/pull/8548 - [lexical-playground] Bug Fix: Normalize collapsible content children by @rohan-patnaik in https://github.com/facebook/lexical/pull/8539
- [lexical-extension][lexical-playground] Feature: Insert paragraph on click after the last block by @mayrang in https://github.com/facebook/lexical/pull/8549
- [lexical-code-prism][lexical-code-shiki][lexical-playground] Feature: Allow null Tokenizer.defaultLanguage to preserve markdown ``` round-trip by @mayrang in https://github.com/facebook/lexical/pull/8553
- [lexical][lexical-rich-text][lexical-code-core] Bug Fix: Cursor stuck before leading inline DecoratorNode by @mayrang in https://github.com/facebook/lexical/pull/8558
- [lexical] Bug Fix: Skip $reconcileChildren fast path during full reconcile by @etrepum in https://github.com/facebook/lexical/pull/8564
- [lexical-playground] Bug Fix: Build dev playground in development mode by @etrepum in https://github.com/facebook/lexical/pull/8565
- [Breaking Change][lexical][lexical-html][lexical-selection][lexical-utils][lexical-playground] Feature: Generalize DOMSlot and add DOMRenderExtension override surface by @mayrang in https://github.com/facebook/lexical/pull/8519
- [lexical-website] Bug Fix: Fix crash on /docs/error page from undefined process by @etrepum in https://github.com/facebook/lexical/pull/8557
- [lexical] Bug Fix: Correct children fast-path text size for cross-parent-moved elements by @etrepum in https://github.com/facebook/lexical/pull/8569
- [ci] Use playwright install-deps instead of apt-get by @etrepum in https://github.com/facebook/lexical/pull/8572
- [lexical-website] Feature: Server-rendered "Copy page" Markdown button by @etrepum in https://github.com/facebook/lexical/pull/8570
- [lexical-html] Feature: DOMImportExtension - replacement for importDOM by @etrepum in https://github.com/facebook/lexical/pull/8528
- [lexical-website] Documentation: Tuning HistoryExtension for long sessions by @etrepum in https://github.com/facebook/lexical/pull/8546
- [*] Refactor: Publish packages from their root directory by @etrepum in https://github.com/facebook/lexical/pull/8554
- fix: prevent MOVE_TO_END/MOVE_TO_START crash on decorator-only edits by @potatowagon in https://github.com/facebook/lexical/pull/8577
- [lexical-html][lexical-playground] Feature: Conditional DOM render overrides (disabledForEditor/disabledForSession) by @etrepum in https://github.com/facebook/lexical/pull/8575
- fix: restore Shift+Cmd+Arrow selection expansion for MOVE_TO_END/MOVE_TO_START by @potatowagon in https://github.com/facebook/lexical/pull/8581
- [ci][lexical] Bug Fix: Upgrade @playwright/test to ^1.60.0 by @etrepum in https://github.com/facebook/lexical/pull/8582
- @rhagigi made their first contribution in https://github.com/facebook/lexical/pull/8422
- @markselby9 made their first contribution in https://github.com/facebook/lexical/pull/8430
- @abhishekvishwakarma007 made their first contribution in https://github.com/facebook/lexical/pull/8428
- @nmggithub made their first contribution in https://github.com/facebook/lexical/pull/8417
- @danyalahmed1995 made their first contribution in https://github.com/facebook/lexical/pull/8487
- @kotom320 made their first contribution in https://github.com/facebook/lexical/pull/8475
- @duydang2311 made their first contribution in https://github.com/facebook/lexical/pull/8523
- @abhinavgautam01 made their first contribution in https://github.com/facebook/lexical/pull/8488
- @LeSingh1 made their first contribution in https://github.com/facebook/lexical/pull/8527
- @flavorjones made their first contribution in https://github.com/facebook/lexical/pull/8517
- @rodrigolungui made their first contribution in https://github.com/facebook/lexical/pull/8535
- @rohan-patnaik made their first contribution in https://github.com/facebook/lexical/pull/8541
Full Changelog: https://github.com/facebook/lexical/compare/v0.44.0...v0.45.0
v0.44.0
v0.44.0 is a monthly release with a few minor breaking changes (deprecations), a notable new experimental DOMRenderExtension API for overriding DOM create/update/export, easier to use priority levels for registering commands, a pagination demonstration and convenient html import/export in the playground, better drag and drop support, automatic inline of CSS for HTML import, consistent CSP-safe style updates, and a wide range of bug fixes and other new features.
OffsetView / $createOffsetView never worked correctly, has no documentation, no tests, and no usage in the monorepo. It has been deprecated. The only function still in use, $createChildrenArray, is now exported from lexical itself — import it from lexical rather than @lexical/offset going forward.
The "press Enter three times to exit a CodeNode" logic has moved from CodeNode.insertNewAfter to a KEY_ENTER_COMMAND listener registered by CodeExtension. This fixes paste-with-blank-lines incorrectly escaping the code block. Using CodeNode without CodeExtension is now deprecated — a backwards-compatible shim with a dev-mode warning is in place, but the node is expected to stop working without CodeExtension in a future version.
A new DOMRenderExtension (in @lexical/html) and EditorDOMRenderConfig (in lexical) parameterize $createDOM, $updateDOM, $exportDOM, $getDOMSlot, $shouldInclude, and $shouldExclude so that node rendering and export can be overridden via composable middleware. Use domOverride(nodes, config) to target one or more node classes, predicates, or '*' (wildcard), and call $next() from inside an override to delegate to the underlying implementation.
A new $decorateDOM(nextNode, prevNode, dom, editor) hook runs after a node is created/updated and after its children have been reconciled, intended for in-place attribute or DOM tweaks. Override ordering is a well-defined topological sort: wildcards highest, then predicates, then class hierarchy (subclass before superclass), with extension dependency order and registration order as tiebreakers.
Render-context APIs are also exposed: $withRenderContext, $getRenderContextValue, contextValue, contextUpdater, RenderContextRoot, RenderContextExport. New traversal helpers $generateDOMFromNodes and $generateDOMFromRoot populate a container using the configured render config. CreateEditorArgs.dom accepts a Partial<EditorDOMRenderConfig> to override rendering at editor creation. $isLexicalNode is also exported from lexical.
Five new command priorities — COMMAND_PRIORITY_BEFORE_EDITOR, _BEFORE_LOW, _BEFORE_NORMAL, _BEFORE_HIGH, _BEFORE_CRITICAL — register listeners that run most-recently-registered first, in front of the existing first-registered-first listeners at the same priority. Ordering is: highest priority first, then all BEFORE_* listeners (LIFO), then legacy listeners (FIFO). The new priorities are almost always what you want for new code; legacy priorities are unchanged so this is purely additive. See the new "Priorities and ordering" docs.
Both packages now export proper extensions (CodePrismExtension, CodeShikiExtension) with {disabled, tokenizer} signal-based configuration that can be toggled and hot-swapped at runtime. The legacy CodeHighlighterShikiExtension is kept as a deprecated backwards-compatible shim.
AutoLinkExtension, registerAutoLink, and LexicalAutoLinkPlugin now accept an optional punctuation setting to override the default boundary characters (e.g. to allow colon-delimited matches without breaking URLs that contain colons).
SplitAtPointCaretNextOptions (used by $insertNodeToNearestRootAtCaret and $splitAtPointCaretNext) gains a removeEmptyDestination option for finer control over whether an empty destination is replaced entirely.
New $handleRichTextDrop and $handlePlainTextDrop helpers implement Lexical-aware text drag-and-drop, including same-block drags, cross-TextNode and cross-block drops, DecoratorNode preservation, and cross-editor drags. registerRichText and registerPlainText now wire these by default.
@lexical/extension (since v0.36.1, Sep 2025) and the NodeState API in lexical (since v0.26.0, Feb 2025) are now formally stable.
@lexical/offsetOffsetView/$createOffsetView(use$createChildrenArrayfromlexical) (#8350)@lexical/text$findTextIntersectionFromCharacters— broken, untested, undocumented (#8364)CodeHighlighterShikiExtension/CodeHighlighterShikiConfig(useCodeShikiExtension) (#8346)- Using
CodeNodewithoutCodeExtension(#8360)
Core:
⚠️ #8350 DeprecateOffsetView; export$createChildrenArrayfromlexical- 🆕 #8353 #8368
EditorDOMRenderConfig,DOMRenderExtension,domOverride,$decorateDOM, render context,$generateDOMFromNodes,$generateDOMFromRoot,$isLexicalNode,CreateEditorArgs.dom - 🆕 #8375
COMMAND_PRIORITY_BEFORE_*priorities for last-registered-called-first ordering - 🧹 #8354 Remove
@experimentalfrom Extension and NodeState APIs - ✅ #8356 Workaround for synchronous Firefox focus edge case where deferred callbacks were silently discarded
- ✅ #8349 Resolve Firefox arrow-key navigation skipping over collapsible content
- ✅ #8361 Fall back to non-shifted key matching for Option+number shortcuts on macOS
Clipboard / Rich Text / Plain Text:
- ✅ #8373 Drag-and-drop within the same block now correctly moves the dragged text;
DecoratorNodes and formatting are preserved across drops; cross-editor drags work even with two Lexical versions on the same page
Code:
⚠️ #8360 Move three-Enter code-block escape logic to aKEY_ENTER_COMMANDlistener inCodeExtension; fixes blank-line paste escaping the code block- 🆕 #8346 Add
CodePrismExtension(@lexical/code-prism) andCodeShikiExtension(@lexical/code-shiki) - 🧹 #8330 Upgrade
shikito^4.0.2
Extension:
- ✅ #8328 Remove JSX/
reacttype dependency fromDecoratorTextNode - ✅ #8377
LexicalExtensionEditorComposerno longer disposes the editor on unmount; lifetime is the caller's responsibility (fixes nested/caption editors after remount)
HTML / Table:
- 🆕 #8326 Inline CSS from
<style>tags during HTML import (fixes paste from Excel, Outlook, etc.) - ✅ #8313 Merge nested lists into the parent
<li>during HTML export, eliminating duplicate ordered-list numbering
Link:
- 🆕 #8378 Allow custom punctuation for AutoLink boundaries
List:
- ✅ #8382 Ensure
ListItemNodealways has aListNodeparent (orphans are merged or floated to root) - ✅ #8390 Toggle checklist items on mobile tap (iOS Safari / Android Chrome) via
pointerup - ✅ #8313 Merge nested lists into parent
<li>on HTML export
Markdown:
- ✅ #8332 Replace negative lookbehind assertions for Safari < 16.4 compatibility
- ✅ #8365 Add an undo history entry for markdown shortcut transforms so undo no longer also undoes the triggering keystroke
- ✅ #8311 Escape ordered-list pattern (
\d+\.) inside bullet/check list item exports to fix double-escape on round-trip - ✅ #8381 Code spans take precedence over inline formatting in shortcut transforms (CommonMark behavior)
Playground:
- 🆕 #8322 New
PagesExtensionwithPageNode,PageContentNode,PageSetupNodefor paginated documents and print-friendly output - 🆕 #8323 Animations for collapsible section expand/collapse and arrow rotation
- 🆕 #8379 #8386 "Convert to HTML" toolbar button (round-trips through
$generateHtmlFromNodes/$generateNodesFromDOM); HTML view formatted with prettier - 🆕 #8346 Migrate eight playground plugins to extensions (
PageBreak,Twitter,YouTube,Figma,TabFocus,Collapsible,SpecialText, code-highlight) and remove the deadLinkPluginandStickyPluginfiles - ✅ #8385
NodeContextMenuPluginfalls back to the root node when the click target has no Lexical node, instead of showing an empty menu - ✅ #8388 Use
@floating-ui/reactforFloatingLinkEditorPluginpositioning; correctly handles all viewport boundaries and FirefoxfocusNode.parentElementquirks - ✅ #8392 Show floating link editor for single-character links (right-bias adjacent-link lookup)
React:
- ✅ #8329 Prevent error when
editorRefisnullinLexicalEditorRefPlugin - ✅ #8366 Add
yjsas an optional peer dependency for Yarn PnP compatibility - ✅ #8377 Don't auto-dispose editor from
LexicalExtensionEditorComposer - ✅ #8385 Root-node fallback in
NodeContextMenuPlugin
Text:
- 🧹 #8364 Add deprecation notice to
$findTextIntersectionFromCharacters
Utils:
- ✅ #8384 Clean up and test
$insertNodeToNearestRootAtCaretedge cases; addremoveEmptyDestinationtoSplitAtPointCaretNextOptions
Refactor (CSP-safe styles):
- 🧹 #8372 Replace runtime
cssText/setAttribute('style', …)writes with property-based style updates acrosslexical,@lexical/code-core,@lexical/list,@lexical/table,@lexical/yjs, and the playground
Website:
- 🆕 #8316 Add more examples to the demos gallery and statically capture screenshots with Playwright (replaces the third-party screenshot service)
- ✅ #8369 Fix tailwindcss docusaurus config regression (sync, not async)
- ✅ #8371 Add a dedicated
tsconfig.jsonforlexical-websiteso type errors are actually surfaced in CI
Infrastructure:
- 🧹 #8341 Encourage agents to use extensions and
$configin AGENTS.md - 🧹 #8355 Refactor CommonJS scripts to ESM modules
- 🧹 #8357 Cache build + Playwright before running e2e tests
- 🧹 #8324 Override
yamlto>=1.10.3to fix CVE-2026-33532 - 🧹 #8358 Address
simple-gitdependency vulnerability - 🧹 #8380 Address
follow-redirectsdependency vulnerability - 🧹 #8334 Remove example/fixture lockfiles from git to reduce Dependabot noise
- 🧹 #8336 #8347 Update stale dev dependencies to resolve Dependabot alerts
- v0.43.0 by @etrepum in https://github.com/facebook/lexical/pull/8319
- [lexical-website] Feature: Add more examples to the demos gallery with local screenshot captures by @etrepum in https://github.com/facebook/lexical/pull/8316
- Update examples for v0.43.0 by @etrepum in https://github.com/facebook/lexical/pull/8321
- [lexical-playground]: Collapsible Section Animations by @ivailop7 in https://github.com/facebook/lexical/pull/8323
- [*] Security: Override yaml to >=1.10.3 to fix CVE-2026-33532 by @potatowagon in https://github.com/facebook/lexical/pull/8324
- [lexical-extension] Fix: Remove JSX dependency from DecoratorTextNode by @etrepum in https://github.com/facebook/lexical/pull/8328
- [lexical-react] Bug Fix: Prevent error when editorRef is null by @Jimmy89 in https://github.com/facebook/lexical/pull/8329
- [lexical-code-shiki] Chore: Upgrade shiki to ^4.0.2 by @etrepum in https://github.com/facebook/lexical/pull/8330
- [lexical-markdown] Bug Fix: replace lookbehind assertions for Safari < 16.4 compatibility by @Yahid-Basha in https://github.com/facebook/lexical/pull/8332
- chore: remove example/fixture lockfiles from git to reduce Dependabot noise by @thatmichael85 in https://github.com/facebook/lexical/pull/8334
- chore: update stale dev dependencies to resolve Dependabot alerts by @thatmichael85 in https://github.com/facebook/lexical/pull/8336
- build(deps): bump @docusaurus/faster from 3.9.2 to 3.10.0 by @dependabot[bot] in https://github.com/facebook/lexical/pull/8342
- build(deps): bump semver from 7.7.2 to 7.7.4 by @dependabot[bot] in https://github.com/facebook/lexical/pull/8338
- build(deps): bump y-websocket from 1.5.4 to 3.0.0 by @dependabot[bot] in https://github.com/facebook/lexical/pull/8343
- build(deps): bump @docusaurus/* from 3.9.2 to 3.10.0, update typedoc, react by @dependabot[bot] in https://github.com/facebook/lexical/pull/8339
- [*] Chore: Encourage agents to use extensions and $config in AGENTS.md by @etrepum in https://github.com/facebook/lexical/pull/8341
- [lexical-code-prism][lexical-code-shiki][lexical-playground] Feature: Add CodePrismExtension, CodeShikiExtension, and migrate playground plugins to extensions by @etrepum in https://github.com/facebook/lexical/pull/8346
- build(deps-dev): bump the dev-dependencies group across 1 directory with 42 updates by @dependabot[bot] in https://github.com/facebook/lexical/pull/8347
- build(deps): bump zustand from 4.5.7 to 5.0.12 by @dependabot[bot] in https://github.com/facebook/lexical/pull/8340
- [lexical-playground] Feature: Add PagesExtension by @ibastawisi in https://github.com/facebook/lexical/pull/8322
- [lexical-html][lexical-table] Feature: Inline CSS from <style> tags by @tomsarduy in https://github.com/facebook/lexical/pull/8326
- build(deps): bump pnpm/action-setup from 4 to 6 in the github-actions group across 1 directory by @dependabot[bot] in https://github.com/facebook/lexical/pull/8335
- [Breaking Change][lexical-offset][lexical] Chore: Deprecate the broken/undocumented/untested OffsetView and export $createChildrenArray from lexical by @etrepum in https://github.com/facebook/lexical/pull/8350
- [lexical][lexical-extension] Chore: Remove @experimental flag from Extension and NodeState APIs by @etrepum in https://github.com/facebook/lexical/pull/8354
- [lexical] Bug Fix: Resolve Firefox arrow key navigation issue in collapsible nodes (#8348) by @MohmedIkram in https://github.com/facebook/lexical/pull/8349
- [*] Chore: Cache build + playwright before running e2e tests by @etrepum in https://github.com/facebook/lexical/pull/8357
- [lexical] Bug Fix: Workaround for synchronous firefox focus edge case behavior by @etrepum in https://github.com/facebook/lexical/pull/8356
- address simple-git dependency vulnerability by @potatowagon in https://github.com/facebook/lexical/pull/8358
- [lexical][lexical-playground] Fix: Use the fallback matching for number keys in keyboard shortcuts by @levensta in https://github.com/facebook/lexical/pull/8361
- [Breaking Change][lexical-code] Bug Fix: move code block escape logic to KEY_ENTER_COMMAND listener by @anikakpillai in https://github.com/facebook/lexical/pull/8360
- [*] Chore: Refactor CommonJS scripts to ESM modules by @etrepum in https://github.com/facebook/lexical/pull/8355
- [lexical-text] Chore: Add deprecation notice to $findTextIntersectionFromCharacters by @etrepum in https://github.com/facebook/lexical/pull/8364
- [lexical-markdown] Bug Fix: Add undo history entry for markdown shortcut transforms by @kimseongyu in https://github.com/facebook/lexical/pull/8365
- [lexical-react] Bug Fix: Add 'yjs' as optional peer dependency for Yarn PnP compatibility by @grapgrap in https://github.com/facebook/lexical/pull/8366
- [lexical][lexical-html] Feature: Extensible DOM create/update/export by @etrepum in https://github.com/facebook/lexical/pull/8353
- [lexical-website] Bug Fix: Fix tailwindcss docusaurus config regression by @etrepum in https://github.com/facebook/lexical/pull/8369
- [lexical-website] Bug Fix: Fix type checking for lexical-website package by @etrepum in https://github.com/facebook/lexical/pull/8371
- [lexical-react] Bug Fix: Don't auto-dispose editor from LexicalExtensionEditorComposer by @etrepum in https://github.com/facebook/lexical/pull/8377
- [lexical] Feature:
COMMAND_PRIORITY_BEFORE_*priorities for last-registered-called-first order by @etrepum in https://github.com/facebook/lexical/pull/8375 - [lexical-markdown] Bug Fix: Escape ordered-list pattern in bullet list item export by @Sathvik-Chowdary-Veerapaneni in https://github.com/facebook/lexical/pull/8311
- address follow-redirects dependency vulnerability by @vishisht31 in https://github.com/facebook/lexical/pull/8380
- [lexical-playground] Feature: HTML conversion button by @levensta in https://github.com/facebook/lexical/pull/8379
- [lexical-markdown] Bug Fix: Code spans take precedence over inline formatting in shortcuts by @potatowagon in https://github.com/facebook/lexical/pull/8381
- [lexical-list] Bug Fix: Ensure that ListItemNode always has a ListItem parent by @etrepum in https://github.com/facebook/lexical/pull/8382
- [lexical][lexical-code-core][lexical-list][lexical-table][lexical-yjs] Refactor: make runtime style updates CSP-safe by @holly-agyei in https://github.com/facebook/lexical/pull/8372
- [lexical-html][lexical-playground] Feature: Implement a well-defined ordering for DOMRenderExtension overrides and add $decorateDOM by @etrepum in https://github.com/facebook/lexical/pull/8368
- [lexical][lexical-utils][lexical-list] Bug Fix: Clean up and test $insertNodeToNearestRootAtCaret edge cases by @etrepum in https://github.com/facebook/lexical/pull/8384
- [lexical-clipboard][lexical-rich-text][lexical-plain-text] Bug Fix: Drag-and-drop within the same block by @etrepum in https://github.com/facebook/lexical/pull/8373
- [lexical-list] Bug Fix: Merge nested list into parent
- during HTML export by @Sathvik-Chowdary-Veerapaneni in https://github.com/facebook/lexical/pull/8313
- [lexical-link][lexical-react] Feature: Allow custom punctuation for AutoLink boundaries by @holly-agyei in https://github.com/facebook/lexical/pull/8378
- [lexical-playground] Feature: Format HTML conversion with prettier by @etrepum in https://github.com/facebook/lexical/pull/8386
- [lexical-react] Bug Fix: Fall back to root node in NodeContextMenuPlugin when click target has no Lexical node by @mayrang in https://github.com/facebook/lexical/pull/8385
- build(deps): bump @excalidraw/excalidraw from 0.18.0 to 0.18.1 by @dependabot[bot] in https://github.com/facebook/lexical/pull/8389
- [lexical-playground] Refactor: Use @floating-ui/react for FloatingLinkEditorPlugin positioning by @mayrang in https://github.com/facebook/lexical/pull/8388
- [lexical-list] Bug Fix: Toggle checklist items on mobile tap by @jWA86 in https://github.com/facebook/lexical/pull/8390
- [lexical-playground] Bug Fix: Show floating link editor for single-character links by @mayrang in https://github.com/facebook/lexical/pull/8392
- [lexical-extension] Bug Fix: Use maybeFromEditor in getPeerDependencyFromEditor by @potatowagon in https://github.com/facebook/lexical/pull/8398
- [*] Fix Flow type errors in flow definition files by @potatowagon in https://github.com/facebook/lexical/pull/8396
- [lexical] Chore: Fix uuid dependency vulnerability by @vishisht31 in https://github.com/facebook/lexical/pull/8399
- [lexical-website] Set prettier arrowParens to avoid by @potatowagon in https://github.com/facebook/lexical/pull/8397
- @Jimmy89 made their first contribution in https://github.com/facebook/lexical/pull/8329
- @Yahid-Basha made their first contribution in https://github.com/facebook/lexical/pull/8332
- @tomsarduy made their first contribution in https://github.com/facebook/lexical/pull/8326
- @MohmedIkram made their first contribution in https://github.com/facebook/lexical/pull/8349
- @anikakpillai made their first contribution in https://github.com/facebook/lexical/pull/8360
- @grapgrap made their first contribution in https://github.com/facebook/lexical/pull/8366
- @vishisht31 made their first contribution in https://github.com/facebook/lexical/pull/8380
- @holly-agyei made their first contribution in https://github.com/facebook/lexical/pull/8372
- @mayrang made their first contribution in https://github.com/facebook/lexical/pull/8385
- @jWA86 made their first contribution in https://github.com/facebook/lexical/pull/8390
Full Changelog: https://github.com/facebook/lexical/compare/v0.43.0...v0.44.0
v0.43.0
v0.43.0 is a monthly release with a minor breaking change, new features, and a number of bug fixes across selection, tables, markdown, and extensions. Notable highlights include a new useExtensionSignalValue hook, and CSS theme options for Yjs collaboration cursors.
Outside of the release artifact, we've refreshed the lexical.dev website thanks to @m-santanna (and inspired by design mockups from @ixahmedxi). Importantly this refresh includes a set of modern examples (examples/website-* and examples/agent-example) that are embedded on the front page and showcase current best practices.
Asynchronous parent editor delegation #8308
@lexical/react nested editors now use asynchronous parent editor delegation when needed to match pre-0.42.0 legacy behavior.
@lexical/react - useExtensionSignalValue #8286
A new @lexical/react/useExtensionSignalValue module is available for reading signal values from extension output within React components
Core:
⚠️ #8308 Use asynchronous parent editor delegation when needed in nested editors- ✅ #8267 Exclude Android WebView from
IS_SAFARIbrowser detection - ✅ #8273 Fix merging
TextNodes when__statecontains a different number of default values - ✅ #8266 Replace
$insertNodeswith$insertNodeIntoLeaffor consistentDecoratorNodebehavior insideMarkNode
Code:
- ✅ #8254 Remove usage of
skipTransformsinCodeHighlighterPrismandCodeHighlighterShiki
Extension:
- 🆕 #8286 Add
@lexical/react/useExtensionSignalValuemodule for reading signals from React
Examples:
- 🆕 #8281 Add a new agent example using a local LLM (Transformers.js / in-browser)
- 🆕 #8258 Add additional website examples
Headless:
- ✅ #8274 Use
window.happyDOM.close()to ensure proper cleanup
Link:
- ✅ #8309 Preserve cursor position when merging adjacent identical links
Markdown:
- ✅ #8265 Preserve hard line breaks during import when newlines are preserved
Playground:
- ✅ #8260 Use
isExactShortcutMatchfor Dvorak keyboard compatibility
Selection:
- ✅ #8261 Make
$getSelectionStyleValueForPropertydirection-independent
Table:
- ✅ #8259 Infer column header state from position during DOM import
Utils:
- ✅ #8276 Fix
$insertNodeIntoLeafedge case; update@preact/signals-core, hermes, and flow dependencies
Yjs:
- 🆕 #8271 Add CSS classes to collaboration cursor elements
Infrastructure:
- 🧹 #8287 Upgrade ESLint 8 → ESLint 10 with flat configuration
- 🧹 #8307 Upgrade Vite to
^7.3.2 - 🧹 #8248 Update GitHub CI workflows and run with Node 24
- 🧹 #8253 Update
flow-binto 0.306.0 and add incompatible-variance workaround - 🧹 #8277 #8315 Bump Flow and replace legacy Flow syntax with modern equivalents
- 🧹 #8243 Update unit tests with extensions to use explicit resource management (
using)
- v0.42.0 by @etrepum in https://github.com/facebook/lexical/pull/8245
- build(deps): bump next from 15.5.11 to 15.5.14 in /scripts/tests/integration/fixtures/lexical-esm-nextjs by @dependabot[bot] in https://github.com/facebook/lexical/pull/8242
- [examples] Chore: Update examples for v0.42.0 by @etrepum in https://github.com/facebook/lexical/pull/8246
- [*] Chore: Update unit tests with extensions to use explicit resource management (using) by @etrepum in https://github.com/facebook/lexical/pull/8243
- [*] Chore: Github CI workflows action updates and run with node 24 by @etrepum in https://github.com/facebook/lexical/pull/8248
- [*] Chore: Update flow-bin to 0.306.0 and add incompatible-variance workaround by @etrepum in https://github.com/facebook/lexical/pull/8253
- [lexical-code-prism][lexical-code-shiki] Bug Fix: Remove usage of skipTransforms in CodeHighlighterPrism and CodeHighlighterShiki by @etrepum in https://github.com/facebook/lexical/pull/8254
- build(deps): bump astro from 5.18.0 to 5.18.1 in /scripts/tests/integration/fixtures/lexical-esm-astro-react by @dependabot[bot] in https://github.com/facebook/lexical/pull/8262
- [lexical-selection] Bug Fix: Make $getSelectionStyleValueForProperty direction-independent by @Sathvik-Chowdary-Veerapaneni in https://github.com/facebook/lexical/pull/8261
- [lexical-table] Bug Fix: Infer column header state from position during DOM import by @Sathvik-Chowdary-Veerapaneni in https://github.com/facebook/lexical/pull/8259
- build(deps): bump happy-dom from 20.0.11 to 20.8.8 by @dependabot[bot] in https://github.com/facebook/lexical/pull/8264
- [lexical-playground] Bug Fix: Use isExactShortcutMatch for Dvorak keyboard compatibility by @Sathvik-Chowdary-Veerapaneni in https://github.com/facebook/lexical/pull/8260
- [lexical] Fix: exclude Android WebView from IS_SAFARI browser detection by @kzroo in https://github.com/facebook/lexical/pull/8267
- [examples] Feature: Added examples (for the website) by @m-santanna in https://github.com/facebook/lexical/pull/8258
- [lexical] Fix : Replaced the function $insertNodes with $insertNodeIntoLeaf for consistent behavior of Decorator Node within MarkNode by @Jynx2004 in https://github.com/facebook/lexical/pull/8266
- build(deps): bump happy-dom from 20.8.8 to 20.8.9 by @dependabot[bot] in https://github.com/facebook/lexical/pull/8269
- [lexical-website] Feature: ui improvement in the homepage of lexical.dev by @m-santanna in https://github.com/facebook/lexical/pull/8216
- [lexical] Fix: merge TextNodes when __state contains different number of default values by @james-atticus in https://github.com/facebook/lexical/pull/8273
- [lexical-headless] Bug Fix: Use window.happyDOM.close() to ensure proper cleanup by @etrepum in https://github.com/facebook/lexical/pull/8274
- Bump flow and replace legacy flow syntax with modern ones by @SamChou19815 in https://github.com/facebook/lexical/pull/8277
- [lexical-markdown] Bug Fix: Preserve markdown hard line breaks during import when newlines are preserved by @joshjryan in https://github.com/facebook/lexical/pull/8265
- [lexical-website] Chore: community page updates by @etrepum in https://github.com/facebook/lexical/pull/8270
- [lexical-utils][lexical-extension][*] Bug Fix: Fix $insertNodeIntoLeaf edge case and update @preact/signals-core, hermes, and flow related dependencies by @etrepum in https://github.com/facebook/lexical/pull/8276
- build(deps): bump lodash-es from 4.17.22 to 4.18.1 by @dependabot[bot] in https://github.com/facebook/lexical/pull/8279
- [lexical-yjs] Feature: Add CSS classes to collaboration cursor elements by @m-brtn in https://github.com/facebook/lexical/pull/8271
- [example] Feature: Add a new agent-example using a local LLM by @etrepum in https://github.com/facebook/lexical/pull/8281
- [lexical-react] Feature: Add @lexical/react/useExtensionSignalValue module for reading signals by @etrepum in https://github.com/facebook/lexical/pull/8286
- [lexical-website] Documentation Update: clarify Yjs custom node property syncing by @Vedthakar in https://github.com/facebook/lexical/pull/8288
- [lexical] Chore: Upgrade ESLint 8 to ESLint 10 with flat configuration by @etrepum in https://github.com/facebook/lexical/pull/8287
- [*] Chore: Upgrade vite to ^7.3.2 by @etrepum in https://github.com/facebook/lexical/pull/8307
- [Breaking Change][lexical] Bug Fix: Use asynchronous parent editor delegation when needed by @etrepum in https://github.com/facebook/lexical/pull/8308
- [lexical-link] Bug Fix: Preserve cursor position when merging adjacent identical links by @Sathvik-Chowdary-Veerapaneni in https://github.com/facebook/lexical/pull/8309
- [*] Fix: Replace legacy Flow syntax with modern equivalents in .flow … by @potatowagon in https://github.com/facebook/lexical/pull/8315
- @Sathvik-Chowdary-Veerapaneni made their first contribution in https://github.com/facebook/lexical/pull/8261
- @kzroo made their first contribution in https://github.com/facebook/lexical/pull/8267
- @joshjryan made their first contribution in https://github.com/facebook/lexical/pull/8265
- @m-brtn made their first contribution in https://github.com/facebook/lexical/pull/8271
- @Vedthakar made their first contribution in https://github.com/facebook/lexical/pull/8288
Full Changelog: https://github.com/facebook/lexical/compare/v0.42.0...v0.43.0
v0.42.0
v0.42.0 is a monthly release with a huge number of fixes and features from a lot of new contributors. The most notable fixes are related to tables, links, extensions, and markdown. @lexical/eslint-plugin is now fully compatible with eslint 9+. The production builds are also now generated in an ascii-only format which may considerably reduce memory usage in some deployment environments.
Prism highlighting now lives in @lexical/code-prism and the Prism related functionality in @lexical/code is now deprecated. Transitionally, there is a @lexical/code-core package which has the implementation of Lexical's code functionality without a Prism dependency.
Due to its experimental nature and incomplete implementation, the in-progress hasFitNestedTables functionality has been moved to the playground
After $copyNode is used it now calls copiedNode.resetOnCopyNodeFrom(originalNode) which will reset every NodeState that has resetOnCopyNode: true in its configuration. Subclasses can override this method to reset other "ephemeral" state such as whether a ListNodeItem is checked or not.
Note that this does not influence serialization or copy and paste operations, it only affects calls to $copyNode.
The current behavior RangeSelection.insertNodes can split an inline ElementNode (e.g. a LinkNode) when inserting content, even if that content is also inline and could be a child of the given node. $insertNodeIntoLeaf is now provided to insert a node without splitting any containing nodes.
Core:
- 🧹 #8190 Change EditorThemeClasses from type to interface
- ✅ #8218 Respect CSS scroll-padding in scrollIntoViewIfNeeded
- ✅ #8220 deleteWord now behaves the same as deleteCharacter when at the edge of an ElementNode
- 🆕 #8221 resetOnCopyNode configuration to NodeState and LexicalNode.resetOnCopyNodeFrom hook
- 🆕 #8219 LexicalEditor RootListener and EditableListener can return unregister callbacks
- ✅ #8222 Consecutive Linebreak insertion now preserves selection format
Code:
⚠️ #8198 Extract Prism highlighting code to@lexical/code-prismand add@lexical/code-coreto provide a dependency that does not include Prism.@lexical/coderemains backwards compatible with Prism included, but you should migrate to using highlighting from@lexical/code-shikior@lexical/code-prism.
Devtools:
- ✅ #8230 Clean up strict mode useLexicalCommandsLog behavior
Extension:
- 🆕 #8202 LexicalExtensionEditorComposer, NestedEditorExtension, and fixed SharedHistoryExtension with playground refactor
Markdown:
- ✅ #8170 Enforce CommonMark flanking rules for trailing spaces
- ✅ #8192 Update backslash handling to comply with CommonMark
- ✅ #8211 Convert tabs to TabNode on import
Link:
- ✅ #8165 Enable autolink matching when unlinked
- 🆕 #8236 Merge adjacent LinkNodes with identical attributes
Eslint Plugin:
- 🧹 #8227 Add flat configuration and full eslint 9+ support for
@lexical/eslint-plugin
List:
- 🆕 #8213 Create copies of ListNode/ListItemNode in split-like operations
React:
- 🧹#8199 Remove deprecated ContextMenu, consolidate menu rendering with backward-compatible menuRenderFn
Table:
- ✅ #8187 Use monolithic listener for
SELECTION_CHANGE_COMMANDand deselection handler - ✅ #8193 Improve nested table selection by using monolithic pointer event handling
- ✅ #8195 Prevent single-cell table selection after exiting table selection
- ✅ #8200 Call $handleTableSelectionChangeCommand once instead of per-table
- 🧹 #8215 Add test for mouse leaving browser window during table selection
⚠️ #8210 hasFitNestedTables functionality moved to the playground- ✅ #8234 Handle table selections crossing into/out of nested tables
Utils:
- 🆕 #8206 Add $insertNodeIntoLeaf with example usage in playground DateTimeNode
Misc:
- 🧹 #8229 #8235 #8226 #8241 Add and fix afterCloneFrom and accessor implementations
Infrastructure
- 🧹 #8239 Upgrade rollup packages and configure terser for ascii_only output
Playground:
- ✅ #8186 Add fallback for dimensionless images to prevent collapse
- 🧹 #8188 Remove legacy events mode
- 🆕 #8183 Nested tables resize themselves with hasFitNestedTables: true
- ✅ #8214 Use inline style for LayoutContainerNode import
- ✅ #8228 Fix cursor position after EquationNode
- ✅ #8224 make clear formatting work on multiple paragraphs
- v0.41.0 by @etrepum in https://github.com/facebook/lexical/pull/8166
- Update examples for v0.41.0 by @etrepum in https://github.com/facebook/lexical/pull/8171
- [lexical] Chore: Fix minimatch CVE-2026-26996 in example projects by @thatmichael85 in https://github.com/facebook/lexical/pull/8169
- Fix cross-spawn vulnerability (CVE-2024-21538) by removing child-process-promise by @thatmichael85 in https://github.com/facebook/lexical/pull/8177
- [lexical] Security: Fix qs vulnerability (CVE-2025-15284) by @thatmichael85 in https://github.com/facebook/lexical/pull/8176
- [lexical-markdown] Fix: enforce CommonMark flanking rules for trailing spaces by @Sa-Te in https://github.com/facebook/lexical/pull/8170
- [lexical] Chore: Fix form-data CVE-2025-7783 in root lockfile by @thatmichael85 in https://github.com/facebook/lexical/pull/8174
- [lexical] Security: Fix @isaacs/brace-expansion vulnerability (CVE-2026-25547) by @thatmichael85 in https://github.com/facebook/lexical/pull/8175
- [lexical] Chore: Fix rollup CVE-2026-27606 across all lockfiles by @thatmichael85 in https://github.com/facebook/lexical/pull/8173
- Fix rollup CVE-2026-27606 in example project lockfiles by @thatmichael85 in https://github.com/facebook/lexical/pull/8182
- [lexical-link] Bug Fix: Enable autolink matching when it unlinked by @levensta in https://github.com/facebook/lexical/pull/8165
- [lexical-playground] Fix: add fallback for dimensionless images to prevent collapse by @Sa-Te in https://github.com/facebook/lexical/pull/8186
- [lexical-playground] Chore: Remove legacy-events mode by @levensta in https://github.com/facebook/lexical/pull/8188
- [lexical] Chore: Change alias from type to interface for
EditorThemeClassesby @levensta in https://github.com/facebook/lexical/pull/8190 - [lexical-table] Refactor: use monolithic listener for table SELECTION_CHANGE_COMMAND and deselection handler by @randal-atticus in https://github.com/facebook/lexical/pull/8187
- [lexical-table][lexical-playground] Feature: nested tables resize themselves if hasFitNestedTables: true by @randal-atticus in https://github.com/facebook/lexical/pull/8183
- [lexical-markdown] Bug Fix: update backslash escape handling to align with CommonMark by @kimseongyu in https://github.com/facebook/lexical/pull/8192
- [lexical-table] Bug Fix: Improve nested table selection by using monolithic pointer event handling by @randal-atticus in https://github.com/facebook/lexical/pull/8193
- [lexical-code] Breaking Change: Extract Prism code highlighting to @lexical/code-prism (with internal module @lexical/code-core to avoid circular import) by @etrepum in https://github.com/facebook/lexical/pull/8198
- [lexical-table] Bug Fix: Prevent single-cell table selection after exiting table selection by @randal-atticus in https://github.com/facebook/lexical/pull/8195
- [lexical-react] Revert revert: Remove deprecated ContextMenu, consolidate menu rendering with backward-compatible menuRenderFn by @thatmichael85 in https://github.com/facebook/lexical/pull/8199
- [lexical-table] Refactor: Call $handleTableSelectionChangeCommand once instead of per-table by @randal-atticus in https://github.com/facebook/lexical/pull/8200
- [lexical-website] Bug Fix: Removed blog route from lexical.dev by @m-santanna in https://github.com/facebook/lexical/pull/8209
- [lexical-playground] Fix: use inline style for LayoutContainerNode import by @WhyBusyy in https://github.com/facebook/lexical/pull/8214
- [lexical-table] Chore: add test for mouse leaving browser window during table selection by @takenosuke-code in https://github.com/facebook/lexical/pull/8215
- [lexical-utils][lexical-playground] Feature: Add $insertNodeIntoLeaf and insert deeply DateTimeNode by @levensta in https://github.com/facebook/lexical/pull/8206
- [lexical] Bug Fix: respect CSS scroll-padding in scrollIntoViewIfNeeded by @takenosuke-code in https://github.com/facebook/lexical/pull/8218
- [lexical] Bug Fix: When the editor starts with an empty list item, pressing ctrl+backspace (deleteWord) should replace the list with a paragraph by @Jynx2004 in https://github.com/facebook/lexical/pull/8220
- [lexical][lexical-list][lexical-markdown] Feature: resetOnCopyNode configuration to NodeState and LexicalNode.resetOnCopyNodeFrom hook by @etrepum in https://github.com/facebook/lexical/pull/8221
- [lexical] Feature: LexicalEditor RootListener and EditableListener can return unregister callbacks by @etrepum in https://github.com/facebook/lexical/pull/8219
- [lexical-markdown][lexical-playground] Bug Fix: Convert tabs in TabNode at import by @lytion in https://github.com/facebook/lexical/pull/8211
- [lexical] Fix: Consecutive Linebreak insertion resets selection format by @Jynx2004 in https://github.com/facebook/lexical/pull/8222
- [lexical-table][lexical-playground] Breaking change: Move hasFitNestedTables logic to Playground plugin by @randal-atticus in https://github.com/facebook/lexical/pull/8210
- [lexical-website] Fix: Correct the mistake in the argument in the example on the Updates page by @levensta in https://github.com/facebook/lexical/pull/8225
- [lexical-list] Fix: create copies ListNode/ListItemNode in split-like operations by @levensta in https://github.com/facebook/lexical/pull/8213
- [lexical-link]: Refactor: add
afterCloneFrommethod to LinkNode/AutoLinkNode by @levensta in https://github.com/facebook/lexical/pull/8226 - [lexical] Fix: Fixing cursor position after inline equation, fix block equations by @Jynx2004 in https://github.com/facebook/lexical/pull/8228
- [lexical-eslint-plugin] Chore: update @lexical/eslint-plugin for better eslint 9+ support, finish jest to vitest migration by @etrepum in https://github.com/facebook/lexical/pull/8227
- [lexical-playground] Bug fix: make clear formatting work on multiple paragraphs by @dabrpio in https://github.com/facebook/lexical/pull/8224
- [lexical-code][lexical-mark][lexical-react][lexical-table][lexical-rich-text][lexical-link] Bug Fix: Add and fix afterCloneFrom implementations by @etrepum in https://github.com/facebook/lexical/pull/8229
- [lexical-extension][lexical-react] Feature: LexicalExtensionEditorComposer, NestedEditorExtension, and fixed SharedHistoryExtension with playground refactor by @etrepum in https://github.com/facebook/lexical/pull/8202
- [lexical-playground] Chore: Remove unused code from playground TablePlugin by @etrepum in https://github.com/facebook/lexical/pull/8231
- [lexical-devtools-core] Bug Fix: Clean up strict mode useLexicalCommandsLog behavior by @etrepum in https://github.com/facebook/lexical/pull/8230
- [lexical-rich-text] Bug Fix: use writable node in HeadingNode.setTag by @karesansui-u in https://github.com/facebook/lexical/pull/8235
- build(deps): bump next from 15.5.11 to 16.1.7 in /scripts/tests/integration/fixtures/lexical-esm-nextjs by @dependabot[bot] in https://github.com/facebook/lexical/pull/8232
- [lexical-link] Feature : Merge adjacent LinkNodes with identical attributes by @achaljhawar in https://github.com/facebook/lexical/pull/8236
- [lexical-table] Bug Fix: handle table selections crossing into/out of nested tables by @randal-atticus in https://github.com/facebook/lexical/pull/8234
- [*] Chore: Upgrade rollup packages and configure terser for ascii_only output by @etrepum in https://github.com/facebook/lexical/pull/8239
- [lexical-playground][lexical-react] Bug Fix: Fix accessor implementations to use getLatest/getWritable consistently by @etrepum in https://github.com/facebook/lexical/pull/8241
- @m-santanna made their first contribution in https://github.com/facebook/lexical/pull/8209
- @WhyBusyy made their first contribution in https://github.com/facebook/lexical/pull/8214
- @takenosuke-code made their first contribution in https://github.com/facebook/lexical/pull/8215
- @Jynx2004 made their first contribution in https://github.com/facebook/lexical/pull/8220
- @dabrpio made their first contribution in https://github.com/facebook/lexical/pull/8224
- @karesansui-u made their first contribution in https://github.com/facebook/lexical/pull/8235
Full Changelog: https://github.com/facebook/lexical/compare/v0.41.0...v0.42.0
v0.41.0
v0.41.0 is a monthly release with a huge number of fixes and features from a lot of new contributors. The most notable fixes are related to IME, non-ascii keyboard layouts, and markdown.
The --lexical-indent-base-value CSS custom property is now only read from the root element of the editor, so any CSS or code to set this value must target that rather than an indented element in the document. This allows the indent to be computed while the document is being rendered without layout thrashing.
Core
⚠️ #8132 Breaking Change: Fix --lexical-indent-base-value CSS variable override- ✅ #8111 Prevent layout thrashing when setting element indent for no indent case
- 🆕 #8115 Support legacy 'align' attribute in ParagraphNode importDOM
- ✅ #8121 IME: Do not move anchor when inserting composition start char
- ✅ #8142 IME: Fix history not recording composing character
- ✅ #8148 IME: Do not apply format and style when moving to a different node in composition
- ✅ #8154 IME: Fix selected text not properly deleted after IME input on Safari (macOS)
- ✅ #8162 IME: Maintain format when multiple formatted text nodes are replaced with composition text
- ✅ #8159 Support DOM selection in elements with slots Code
- 🆕 #7918 Allow moving caret outside of code block
- 🆕 #8155 Trigger keyboard shortcuts by physical key code with non-ascii keyboard layouts
Extension
- 🆕 #8114 Implement DecoratorTextExtension applying format to DecoratorTextNode
Rich Text
- 🆕 #8122 Support configuration of indentable nodes
- ✅ #8152 Inherit format and style when inserting tab
Link
- ✅ #8123 Prevent AutoLink from linking URLs inside code blocks without highlighting
- ✅ #8127 Prevent AutoLinkNode from creating extra paragraphs
- ✅ #8137 Add AutoLinkNode to AutoLinkExtension node dependencies
- ✅ #8138
$toggleLinkshould remove the whole link when selection is collapsed - ✅ #8164 Prevent creation of nested LinkNode
- ✅ #8158 Transform to move blocks outside of LinkNode List
- 🆕 #8092 Preserve ordered list numbering when split by blocks or paragraphs
- ✅ #8118 Remove empty parent node in nested list
- 🆕 #8105 Add focus event option for the checklist extension
Table
- 🆕 #8097 Implement "fit nested tables" for nested table pasting
- 🆕 #8094 Support 'scope' attribute in HTML import for th tags
- ✅ #8131 Preserve Background Color when pasting table rows inside table
Markdown
- ✅ #8116 Fix nested fenced code blocks parsing and export
- 🆕 #8140 Support Enter key after ``` to create code block
- ✅ #8161 Prevent markdown shortcut link transformer from being too greedy
Playground
- 🆕 #8063 Rearrange table columns
- ✅ #8134 Increase toolbar z-index to prevent content overlap
- ✅ #8149 Code block formatting in unintended adjacent lines
- v0.40.0 by @etrepum in https://github.com/facebook/lexical/pull/8104
- [lexical] Bug Fix: Prevent layout thrashing when setting element indent for no indent case by @InanBerkin in https://github.com/facebook/lexical/pull/8111
- Update examples for v0.40.0 and pnpm by @etrepum in https://github.com/facebook/lexical/pull/8110
- [lexical-table][lexical-playground] Feature: Implement "fit nested tables" for nested table pasting by @randal-atticus in https://github.com/facebook/lexical/pull/8097
- [lexical] Chore: Stabilize playground collab WebKit E2E test waits by @screenfluent in https://github.com/facebook/lexical/pull/8113
- Fix(table): Support 'scope' attribute in HTML import. by @Sa-Te in https://github.com/facebook/lexical/pull/8094
- [lexical] Feature: Support legacy 'align' attribute in ParagraphNode importDOM by @Sa-Te in https://github.com/facebook/lexical/pull/8115
- [lexical-list] Feature: Preserve ordered list numbering when split by blocks or paragraphs by @Sa-Te in https://github.com/facebook/lexical/pull/8092
- [lexical-markdown] Bug Fix: Fix nested fenced code blocks parsing and export by @abdulalim110 in https://github.com/facebook/lexical/pull/8116
- [lexical-playground] tests for ComponentPickerMenuPlugin by @umaranis in https://github.com/facebook/lexical/pull/8128
- [lexical] Bug Fix: Remove empty parent node in nested list by @Senasiko in https://github.com/facebook/lexical/pull/8118
- [lexical-extension][lexical-rich-text][lexical-react] Feature: Support configuration of indentable nodes by @levensta in https://github.com/facebook/lexical/pull/8122
- [lexical-link] Bug Fix: Prevent AutoLink from linking URLs inside code blocks by @achaljhawar in https://github.com/facebook/lexical/pull/8123
- [lexical-playground]: Rearrange table columns by @ivailop7 in https://github.com/facebook/lexical/pull/8063
- [lexical-playground][lexical-link] Bug Fix: Prevent AutoLinkNode from creating extra paragraphs by @polyrainbow in https://github.com/facebook/lexical/pull/8127
- [lexical-react] Annotate @deprecated to menuRenderFn with NodeContext… by @thatmichael85 in https://github.com/facebook/lexical/pull/8001
- [lexical] Bug Fix: Do not move anchor when inserting composition start char by @kimseongyu in https://github.com/facebook/lexical/pull/8121
- [lexical-table] Fix: Preserve Background Color when pasting table rows inside table. by @Sa-Te in https://github.com/facebook/lexical/pull/8131
- [lexical-code] Bug Fix: Allow moving caret outside code block by @lytion in https://github.com/facebook/lexical/pull/7918
- [Breaking Change][lexical] Bug Fix: Fix --lexical-indent-base-value CSS variable override by @achaljhawar in https://github.com/facebook/lexical/pull/8132
- [lexical-playground] Fix: Increase toolbar z-index to prevent content overlap by @Sa-Te in https://github.com/facebook/lexical/pull/8134
- [lexical-link] Bug Fix: Add AutoLinkNode to AutoLinkExtension node dependencies by @etrepum in https://github.com/facebook/lexical/pull/8137
- [lexical-playground]: Clean up old Table Hover Actions by @ivailop7 in https://github.com/facebook/lexical/pull/8139
- [lexical-website] Chore: Update supported browsers list to Safari 15+, Chrome 86+, Firefox 115+ by @etrepum in https://github.com/facebook/lexical/pull/8141
- [lexical-link] Bug Fix: $toggleLink removes link when selection is collapsed by @Senasiko in https://github.com/facebook/lexical/pull/8138
- [lexical-markdown] Feature: Support Enter key after ``` to create code block by @achaljhawar in https://github.com/facebook/lexical/pull/8140
- [lexical-extension] Feature: Implement DecoratorTextExtension applying format to DecoratorTextNode by @levensta in https://github.com/facebook/lexical/pull/8114
- docs: fix formatting and update browser support table by @IkyssOffc in https://github.com/facebook/lexical/pull/8144
- [lexical-website] Chore: Add a website build step to Github Actions in CI by @etrepum in https://github.com/facebook/lexical/pull/8146
- [lexical-history] Bug Fix: History not record composing character by @Senasiko in https://github.com/facebook/lexical/pull/8142
- [lexical] Bug Fix: Do not apply format and style when moving to different node in composition by @kimseongyu in https://github.com/facebook/lexical/pull/8148
- [lexical-playground] Bug Fix: Code block formatting in unintended adjacent lines by @achaljhawar in https://github.com/facebook/lexical/pull/8149
- [lexical-rich-text] Bug Fix: Inherit format and style when inserting tab by @kimseongyu in https://github.com/facebook/lexical/pull/8152
- [lexical-core] Bug fix: support dom selection for elements with slots by @fantactuka in https://github.com/facebook/lexical/pull/8159
- [lexical] Bug Fix: Fix selected text not properly deleted after IME input on Safari (macOS) by @sKawashima in https://github.com/facebook/lexical/pull/8154
- feat: add focus event option for the checklist extension by @rayterion in https://github.com/facebook/lexical/pull/8105
- [lexical-markdown] Fix: Prevent markdown shortcut link transformer from being too greedy by @etrepum in https://github.com/facebook/lexical/pull/8161
- [lexical] Bug Fix: Maintain format when replace multiple formatted text nodes with composition text by @kimseongyu in https://github.com/facebook/lexical/pull/8162
- [tests] Chore: Update yaml-language-server in lexical-esm-astro-react integration fixture by @PikkaPikkachu in https://github.com/facebook/lexical/pull/8163
- [lexical-markdown] Bug Fix: Prevent nesting links creation by @levensta in https://github.com/facebook/lexical/pull/8164
- [lexical] Bug Fix: Move new paragraph outside inline element in insertParagraph by @achaljhawar in https://github.com/facebook/lexical/pull/8158
- [lexical] Bug Fix: REDO_COMMAND not triggered with non-English keyboard layouts (Ctrl+Y / Ctrl+Shift+Z) by @kenclaron in https://github.com/facebook/lexical/pull/8155
- @InanBerkin made their first contribution in https://github.com/facebook/lexical/pull/8111
- @screenfluent made their first contribution in https://github.com/facebook/lexical/pull/8113
- @abdulalim110 made their first contribution in https://github.com/facebook/lexical/pull/8116
- @Senasiko made their first contribution in https://github.com/facebook/lexical/pull/8118
- @polyrainbow made their first contribution in https://github.com/facebook/lexical/pull/8127
- @IkyssOffc made their first contribution in https://github.com/facebook/lexical/pull/8144
- @sKawashima made their first contribution in https://github.com/facebook/lexical/pull/8154
- @rayterion made their first contribution in https://github.com/facebook/lexical/pull/8105
- @PikkaPikkachu made their first contribution in https://github.com/facebook/lexical/pull/8163
- @kenclaron made their first contribution in https://github.com/facebook/lexical/pull/8155
Full Changelog: https://github.com/facebook/lexical/compare/v0.40.0...v0.41.0
v0.40.0
v0.40.0 is a monthly release primarily focusing on bug fixes and infrastructure such as the move from npm to pnpm.
Some very notable changes include:
- Some major fixes and refactoring to markdown parsing #8093 #8085
- Several of the most common utilities were moved from @lexical/utils to lexical (
mergeRegister,addClassNames,removeClassNames) #8106 - A cache coherency bug in
RootNode.getTextContent()was fixed #8099
Monorepo:
- 🧹 #8035 Chore: Transition from npm to pnpm (also #8045 #8048 #8050 #8051 #8054 #8106)
Link:
- ✅ #8070 Fix: Fix infinite transform loop in AutoLinkPlugin
- ✅ #8078 Fix: Toggle links with nested children
List:
- ✅ #8049 Fix: fix selection issue from list transform on linebreak
- ✅ #8068 Fix: Treat whitespace-only list items as empty when pressing Enter
Markdown:
- ✅ #8085 Fix: Fix incorrect format tag placement at link boundaries
- ✅ #8093 Fix: Replace regex-based format matching
Core:
- ✅ #8069 Fix: format removed on multi selection after replace
- ✅ #8099 Fix: Refactor RootNode.__cachedText computation for coherency
Table:
- ✅ #8076 Fix: Fix Ctrl+A to select all cells in table with merged cells
- ✅ #8081 Fix: Fix inconsistent multi-cell selection in 2x2 tables
- 🧹 #8088 Chore: Fix test for nested table pasting
Utils:
- 🧹 #8106 Chore: Move functions
mergeRegister,addClassNames,removeClassNamesto lexical package
React:
- ✅ #8062 Fix: Clear remote cursor immediately on collaborator refresh
- ✅ #8065 Fix: Fix cursor disappearing in Firefox when dragging blocks
- ✅ #8071 Chore: Expose onReposition prop on SelectionAlwaysOnDisplay
Playground:
- 🆕 #8043 Feature: Color table resize handle
- 🆕 #8042 Feature: Draggable block handle gliding effect
- ✅ #8052 Fix: Draggable handle and dropdown CSS zoom fix
- 🆕 #8057 Feature: New Table Hover Actions Plugin
- 🆕 #8060 Feature: Column Sort for Basic Table
- 🆕 #8066 Feature: Add button shows the component picker
- ✅ #8087 Fix: Prevent code block line wrapping to keep line number
- v0.39.0 by @etrepum in https://github.com/facebook/lexical/pull/8021
- Chore: Add an ignore-previously-published arg to the publish action by @etrepum in https://github.com/facebook/lexical/pull/8023
- Chore: Update examples for v0.39.0 by @etrepum in https://github.com/facebook/lexical/pull/8024
- Agent documentation by @zurfyx in https://github.com/facebook/lexical/pull/8031
- README tweaks by @zurfyx in https://github.com/facebook/lexical/pull/8033
- npm -> pnpm by @zurfyx in https://github.com/facebook/lexical/pull/8035
- Nightlies publish param by @zurfyx in https://github.com/facebook/lexical/pull/8045
- Nightlies fix frozen lockfile by @zurfyx in https://github.com/facebook/lexical/pull/8048
- [lexical-playground]: Color table resize handle by @ivailop7 in https://github.com/facebook/lexical/pull/8043
- Use PNPM workspace feature for publish by @zurfyx in https://github.com/facebook/lexical/pull/8050
- Override workspace with actual version on npm/ bundle by @zurfyx in https://github.com/facebook/lexical/pull/8051
- [lexical-playground]: Draggable block handle gliding effect by @ivailop7 in https://github.com/facebook/lexical/pull/8042
- Allow publish to run on detached head by @zurfyx in https://github.com/facebook/lexical/pull/8054
- [lexical-list] Bug Fix: fix selection issue from list transform on linebreak by @dizsmek in https://github.com/facebook/lexical/pull/8049
- [docs] Documentation Update: Fix incorrect and broken links in README by @h8f1z in https://github.com/facebook/lexical/pull/8055
- [lexical-playground]: Draggable handle and dropdown CSS zoom fix by @ivailop7 in https://github.com/facebook/lexical/pull/8052
- [lexical-playground]: New Table Hover Actions Plugin by @ivailop7 in https://github.com/facebook/lexical/pull/8057
- [lexical-playground]: Column Sort for Basic Table by @ivailop7 in https://github.com/facebook/lexical/pull/8060
- [lexical-react] Bug Fix: Clear remote cursor immediately on collaborator refresh by @aldoprogrammer in https://github.com/facebook/lexical/pull/8062
- [lexical-playground] Add button shows the Component Picker by @ivailop7 in https://github.com/facebook/lexical/pull/8066
- [lexical][@lexical/react] Bug Fix: Fix cursor disappearing in Firefox when dragging blocks by @aldoprogrammer in https://github.com/facebook/lexical/pull/8065
- [lexical] Bug Fix: format removed on multi selection after replace by @kimseongyu in https://github.com/facebook/lexical/pull/8069
- [lexical-list] Bug Fix: Treat whitespace-only list items as empty when pressing Enter by @mike-atticus in https://github.com/facebook/lexical/pull/8068
- [lexical][@lexical/link] Bug Fix: Fix infinite transform loop in AutoLinkPlugin by @aldoprogrammer in https://github.com/facebook/lexical/pull/8070
- [lexical][@lexical/table] Fix Ctrl+A to select all cells in table with merged cells #8074 by @aldoprogrammer in https://github.com/facebook/lexical/pull/8076
- [lexical-react] Chore: Expose onReposition prop on SelectionAlwaysOnDisplay by @takuyakanbr in https://github.com/facebook/lexical/pull/8071
- [lexical-link] Bug Fix: Toggle links with nested children by @patrick-atticus in https://github.com/facebook/lexical/pull/8078
- [lexical-markdown] Bug Fix: Fix incorrect format tag placement at link boundaries by @kimseongyu in https://github.com/facebook/lexical/pull/8085
- [lexical][@lexical/table] Bug Fix: Fix inconsistent multi-cell selection in 2x2 tables by @aldoprogrammer in https://github.com/facebook/lexical/pull/8081
- [lexical-table] Chore: Fix test for nested table pasting by @randal-atticus in https://github.com/facebook/lexical/pull/8088
- Fix(Playground): Prevent code block line wrapping to keep line number… by @Sa-Te in https://github.com/facebook/lexical/pull/8087
- [lexical-markdown] Bug Fix: Replace regex-based format matching with … by @kimseongyu in https://github.com/facebook/lexical/pull/8093
- [lexical] Bug Fix: Refactor RootNode.__cachedText computation for coherency by @etrepum in https://github.com/facebook/lexical/pull/8099
- [lexical][lexical-utils] Chore: Use workspace:* for monorepo versions and fix some cyclic dependencies by @etrepum in https://github.com/facebook/lexical/pull/8106
- @dizsmek made their first contribution in https://github.com/facebook/lexical/pull/8049
- @h8f1z made their first contribution in https://github.com/facebook/lexical/pull/8055
- @aldoprogrammer made their first contribution in https://github.com/facebook/lexical/pull/8062
- @kimseongyu made their first contribution in https://github.com/facebook/lexical/pull/8069
- @Sa-Te made their first contribution in https://github.com/facebook/lexical/pull/8087
Full Changelog: https://github.com/facebook/lexical/compare/v0.39.0...v0.40.0
v0.39.0
v0.39.0 is a monthly release primarily focusing on bug fixes
Previously the derived properties textFormat and textStyle would always be serialized to JSON if not set to the default values. These should only be useful when the ElementNode does not currently have any TextNode children, to preserve formatting choices, and will be recomputed when reconciled. Now they are only reconciled when they are determined to be useful (in an ElementNode with no direct TextNode children that is not a root or shadow root).
Code:
- ✅ #7970 Fix: Scope highlight cache by editor
Core:
- ✅ #7971 Fix: Only serialize
ElementNodetextFormatandtextStylewhen necessary - 🆕 #7964 Feature: Add commands for beforeinput, input, compositionstart/end events
- ✅ #7978 Fix:
$dfsCaretIteratorshould be able to stop at its last descendant
Selection:
- ✅ #8003 Fix: Text styles are now applied to empty ElementNodes in a selection (typically the empty paragraphs contained in empty table cells)
Extension:
- ✅ #7961 Fix: Defer node class references to potentially work around webpack issues
Table:
- 🧪 #7983 Experiment: add config for opting in to nested tables (note that this does not fix their behavior)
- ✅ #7986 Fix: Ensure colWidths has length equal to number of columns
- ✅ #7998 Fix: Include first cell contents in partial backwards table selection
React:
- ✅ #7987 Prevent typeahead menu from closing during IME composition
Collab:
- ✅ #7990 Fix: Don't rewrite unchanged non-primitive property/state values to yjs in collab v2
Playground:
- 🆕 #8002 Feature: Shadows when table is scrollable
- ✅ #8015 Fix: Show draggable block target line when dragging images
- v0.38.2 by @etrepum in https://github.com/facebook/lexical/pull/7962
- [scripts] Allow export-froms in Flow files to be transformed for www build by @takuyakanbr in https://github.com/facebook/lexical/pull/7967
- [examples] Chore: Update examples for v0.38.2 by @etrepum in https://github.com/facebook/lexical/pull/7963
- [lexical-code] Bug fix: Add editor key in highlighted nodes cache by @takuyakanbr in https://github.com/facebook/lexical/pull/7970
- [lexical] Feature: Only serialize ElementNode textFormat and textStyle when necessary by @etrepum in https://github.com/facebook/lexical/pull/7971
- [lexical-extension][lexical-*] Bug Fix: Defer node class references to potentially work around webpack issues by @etrepum in https://github.com/facebook/lexical/pull/7961
- [lexical] Chore: Update flow-bin (to 0.289.0) and LexicalLink Flow types by @takuyakanbr in https://github.com/facebook/lexical/pull/7973
- [lexical] Feature: add commands for beforeinput, input, compositionstart/end events by @james-atticus in https://github.com/facebook/lexical/pull/7964
- [lexical] Chore: Update flow-bin (to 0.290.0) and fix incompatible-variance issues by @takuyakanbr in https://github.com/facebook/lexical/pull/7975
- [lexical] Bug fix: $dfsCaretIterator should be able to stop at its last descendant by @nigelgutzmann in https://github.com/facebook/lexical/pull/7978
- [lexical-table] Feature: add config for opting in to nested tables by @james-atticus in https://github.com/facebook/lexical/pull/7983
- [lexical-react] [lexical-playground] Bug Fix: Prevent typeahead menu from closing during IME composition (#7985) by @kykim00 in https://github.com/facebook/lexical/pull/7987
- [lexical-table] Bug Fix: ensure colWidths has length equal to number of columns by @james-atticus in https://github.com/facebook/lexical/pull/7986
- [lexical-react] [lexical-playground] Remove old ContextMenu, consolidate LexicalMenu render by @ivailop7 in https://github.com/facebook/lexical/pull/7984
- [lexical-yjs] Bug fix: don't rewrite unchanged non-primitive property/state values to yjs in collab v2 by @james-atticus in https://github.com/facebook/lexical/pull/7990
- [lexical-website] Documentation Update: Add @y/websocket-server package dependency by @mattcline in https://github.com/facebook/lexical/pull/7996
- Revert "[lexical-react] [lexical-playground] Remove old ContextMenu, consolidate LexicalMenu render" by @ivailop7 in https://github.com/facebook/lexical/pull/7997
- [lexical-website] Documentation Update: Add missing getDocFromMap fn to docs by @mattcline in https://github.com/facebook/lexical/pull/8000
- [lexical-table] Bug Fix: include first cell contents in partial backwards table selection by @patrick-atticus in https://github.com/facebook/lexical/pull/7998
- Doc nit by @zurfyx in https://github.com/facebook/lexical/pull/8010
- [lexical-mark][flow][chore] Add flowfix me after flow 0.292.0 was deployed to www. This fixes the sync between github and www by @thatmichael85 in https://github.com/facebook/lexical/pull/8019
- [lexical-playground]: Shadows when table is scrollable by @ivailop7 in https://github.com/facebook/lexical/pull/8002
- [lexical-selection]: Fix applying styles for empty table cells by @ivailop7 in https://github.com/facebook/lexical/pull/8003
- [lexical-playground] Bug Fix: Show draggable block target line when dragging images by @paigekim29 in https://github.com/facebook/lexical/pull/8015
- @kykim00 made their first contribution in https://github.com/facebook/lexical/pull/7987
- @mattcline made their first contribution in https://github.com/facebook/lexical/pull/7996
- @thatmichael85 made their first contribution in https://github.com/facebook/lexical/pull/8019
Full Changelog: https://github.com/facebook/lexical/compare/v0.38.2...v0.39.0
v0.38.2
v0.38.2 is a patch release to fix a regression in yjs cursor position awareness (#7960). It also includes another fix for a Markdown issue.
React:
- ✅ #7960 Fix: update cursor positions on awareness update in collab v1
Markdown:
- ✅ #7958 Fix markdown formatting when a backslash is before or after a closing backtick
- v0.38.1 by @etrepum in https://github.com/facebook/lexical/pull/7951
- Update examples for v0.38.1 by @etrepum in https://github.com/facebook/lexical/pull/7952
- Update codeowners by @zurfyx in https://github.com/facebook/lexical/pull/7957
- [lexical-markdown] Code backslash fix by @MarekKuncik in https://github.com/facebook/lexical/pull/7958
- [lexical-react] Fix: update cursor positions on awareness update in collab v1 by @james-atticus in https://github.com/facebook/lexical/pull/7960
Full Changelog: https://github.com/facebook/lexical/compare/v0.38.1...v0.38.2
v0.38.1
v0.38.1 is an monthly release with a lot of fixes and a few potentially breaking changes (this is a re-publish of v0.38.0, which had problems during initial npm publish).
Before $config there was a limited amount of "automatic" re-use of the static transform by subclasses, because class inheritance also inherits static methods, so you get the implementation of whatever static transform method was in the superclass if it wasn't overridden.
Now the application of these static transforms (whether by method or $config) is implicit. There is no need to call super if adding an additional transform. The implementation walks up the inheritance tree by $config extends or Object.getPrototypeOf and will register all transforms it finds.
If you are using CodeHighlighterShikiExtension the configuration has changed.
Before:
configExtension(CodeHighlighterShikiExtension, {tokenizer: {...ShikiTokenizer, defaultTheme: …})
After:
configExtension(CodeHighlighterShikiExtension, {defaultTheme: …})
This is unlikely to break most applications but the priority of these command listeners has been lowered to allow them to be overridden.
Core:
- ✅ #7926 Apply static transform and $config $transform from all superclasses (fixes ListNode/ListItemNode subclassing)
- ✅ #7941 Retain lexical selection during updates on unfocused editors
- ✅ #7947 Update block cursor if selection has changed
Extension:
- 🆕 #7930 Allow nodes config to be deferred for circular dependency reasons
⚠️ #7936 Implement mergeConfig for LinkExtension and flatten config for CodeHighlighterShikiExtension
List:
- 🆕 #7946 importDOM support for joplin checklists
Table:
⚠️ #7933 Lower table handler command priority
Clipboard:
- ✅ #7942 Log exceptions in clipboard paste handlers
Link:
- 🆕 #7944 Enable Selective Removal Within Linked Text
React:
- ✅ #7935 Add getServerSnapshot for improved RSC compatibility
Collab v2:
- ✅ #7922 Skip elements that were added and removed between snapshots
Code:
- ✅ #7921 Respect RTL when moving to line start/end in code blocks
Markdown:
- ✅ #7812 Fix bugs in normalizeMarkdown when using shouldMergeAdjacentLines
- ✅ #7923 Prevent markdown links with empty strings from being automatically removed
- ✅ #7928 Fix implicit checklist marker export regression
Playground:
- ✅ #7920 Fix image caption overflow
Examples:
- 🧹 #7939 Remove workaround from svelte example
Documentation:
- 🧹 #7931 Update docusaurus and contributing docs
- v0.37.0 by @etrepum in https://github.com/facebook/lexical/pull/7910
- Update examples for v0.37.0 by @etrepum in https://github.com/facebook/lexical/pull/7911
- [Documentation] Chore: Update bounty program link in CONTRIBUTING.md by @mustkem in https://github.com/facebook/lexical/pull/7915
- [lexical-yjs] Fix: skip elements that were added and removed between snapshots by @james-atticus in https://github.com/facebook/lexical/pull/7922
- [lexical-code] Bug Fix: Respect RTL when moving to line start/end in code blocks by @ashmod in https://github.com/facebook/lexical/pull/7921
- [lexical-markdown] Fix: bugs in normalizeMarkdown by @GermanJablo in https://github.com/facebook/lexical/pull/7812
- [lexical-playground] Bug Fix: Fix image caption overflow issue by @ritoban23 in https://github.com/facebook/lexical/pull/7920
- [lexical-markdown] Bug Fix: Prevent Markdown links with empty string link text from being automatically removed by @adambolcsfoldi in https://github.com/facebook/lexical/pull/7923
- [lexical-website] Chore: Update docusuarus and add contributing docs by @etrepum in https://github.com/facebook/lexical/pull/7931
- [lexical-markdown] Bug Fix: Fix implicit checklist marker export regression by @etrepum in https://github.com/facebook/lexical/pull/7928
- [lexical][lexical-list] Bug Fix: Apply static transform and $config $transform from all superclasses by @etrepum in https://github.com/facebook/lexical/pull/7926
- [lexical-extension] Feature: Allow nodes config to be deferred for circular dependency reasons by @etrepum in https://github.com/facebook/lexical/pull/7930
- [lexical-website] Documentation Update: change setText to setTextContent by @bbertold in https://github.com/facebook/lexical/pull/7932
- [lexical-react] Bug Fix: Add getServerSnapshot for RSC compatibility by @nestarz in https://github.com/facebook/lexical/pull/7935
- [lexical-link][lexical-code-shiki][examples] Feature: Implement mergeConfig for LinkExtension and flatten config for CodeHighlighterShikiExtension by @etrepum in https://github.com/facebook/lexical/pull/7936
- [lexical-table] Chore: Lower table handler command priority by @patrick-atticus in https://github.com/facebook/lexical/pull/7933
- [lexical] Bug Fix: retain selection during updates on unfocused editor by @fantactuka in https://github.com/facebook/lexical/pull/7941
- [lexical-clipboard] Bug Fix: Log exceptions in clipboard paste handler by @niikkhilsharma in https://github.com/facebook/lexical/pull/7942
- [lexical-link] Feature: Enable Selective Removal Within Linked Text by @normtronics in https://github.com/facebook/lexical/pull/7944
- [lexical] Bug Fix: update block cursor if selection has changed by @fantactuka in https://github.com/facebook/lexical/pull/7947
- [lexical-list] Bug Fix: fix pasting checklist from joplin by @antsgar in https://github.com/facebook/lexical/pull/7946
- [examples] Chore: Remove #7859 workaround from svelte example by @etrepum in https://github.com/facebook/lexical/pull/7939
- @mustkem made their first contribution in https://github.com/facebook/lexical/pull/7915
- @ashmod made their first contribution in https://github.com/facebook/lexical/pull/7921
- @ritoban23 made their first contribution in https://github.com/facebook/lexical/pull/7920
- @adambolcsfoldi made their first contribution in https://github.com/facebook/lexical/pull/7923
- @bbertold made their first contribution in https://github.com/facebook/lexical/pull/7932
- @nestarz made their first contribution in https://github.com/facebook/lexical/pull/7935
- @normtronics made their first contribution in https://github.com/facebook/lexical/pull/7944
- @antsgar made their first contribution in https://github.com/facebook/lexical/pull/7946
Full Changelog: https://github.com/facebook/lexical/compare/v0.37.0...v0.38.1
v0.37.0
v0.37.0 is an ad-hoc release, primarily to update the happy-dom dependency to address a CVE (#7909 - lexical's usage of this package was not susceptible) but also includes several bug fixes. This was marked as a minor release because it includes an experimental collab v2 implementation which is not yet ready for use (see #7616 #7903)
Core:
- #7900 ✅ Fix
$cloneWithPropertiesso that it doesn't throw an exception when used in read-only mode - #7904 🆕 Add new (internal) ephemeral node concept for situations where a cloned node is intentionally decoupled from the editor state for mutations that will only have a local effect
Examples:
- 🆕 #7879 New sveltekit ssr example demonstrating the use of @lexical/headless/dom
React:
- ✅ #7899 LexicalMenu guard against undefined option when list shrinks
Collab:
- 🆕 #7616 #7903 #7907 #7908 Initial implementation of collab v2
List
- 🆕 #7892 Keep list marker for markdown round-trip
Rich Text:
- ✅ #7902 Fix up/down arrows for node selection
Clipboard/Playground:
- ✅ #7900 ImageNode caption support for exportDOM and importDOM
- ✅ #7906 Export ParagraphNode as div role="paragraph" when it contains block DOM (such as the
<figure>from ImageNode captions)
Headless
- 🧹 #7909 Update to happy-dom v20 to address CVE reports (lexical's usage was not susceptible)
- v0.36.2 by @etrepum in https://github.com/facebook/lexical/pull/7894
- Update examples for v0.36.2 by @etrepum in https://github.com/facebook/lexical/pull/7896
- [examples] Feature: sveltekit ssr example by @etrepum in https://github.com/facebook/lexical/pull/7879
- [lexical-react] Bug Fix: LexicalMenu guard against undefined option when list shrinks by @MRADULTRIPATHI in https://github.com/facebook/lexical/pull/7899
- [lexical-yjs][lexical-react] Feature: initial implementation of collab v2 by @james-atticus in https://github.com/facebook/lexical/pull/7616
- [lexical-list][lexical-markdown] Feature: Keep list marker for markdown round-trip by @lytion in https://github.com/facebook/lexical/pull/7892
- [lexical-rich-text] Bug fix: up/down arrows for node selection by @fantactuka in https://github.com/facebook/lexical/pull/7902
- [lexical][lexical-clipboard][lexical-playground] Feature: ImageNode caption support for exportDOM and importDOM by @Kepron in https://github.com/facebook/lexical/pull/7900
- [lexical-yjs][lexical-react] Feature: commands for diffing two yjs snapshots in collab v2 by @james-atticus in https://github.com/facebook/lexical/pull/7903
- [lexical][lexical-clipboard][lexical-html][lexical-selection] Feature: Add an internal ephemeral node concept by @etrepum in https://github.com/facebook/lexical/pull/7904
- [lexical-playground] Bug Fix: Export ParagraphNode as div role="paragraph" when it contains block DOM by @etrepum in https://github.com/facebook/lexical/pull/7906
- [lexical-react] Chore: make __shouldBootstrapUnsafe prop optional by @james-atticus in https://github.com/facebook/lexical/pull/7907
- [lexical-yjs] Chore: fix imports of Yjs XML types by @james-atticus in https://github.com/facebook/lexical/pull/7908
- [lexical-headless] Chore: Update to happy-dom v20 by @etrepum in https://github.com/facebook/lexical/pull/7909
- @MRADULTRIPATHI made their first contribution in https://github.com/facebook/lexical/pull/7899
- @Kepron made their first contribution in https://github.com/facebook/lexical/pull/7900
Full Changelog: https://github.com/facebook/lexical/compare/v0.36.2...v0.37.0