Skip to content

chore(deps): bump the npm-minor-and-patch group across 1 directory with 13 updates - #261

Open
dependabot[bot] wants to merge 1 commit into
masterfrom
dependabot/npm_and_yarn/master/npm-minor-and-patch-bbf7c0a4f0
Open

chore(deps): bump the npm-minor-and-patch group across 1 directory with 13 updates#261
dependabot[bot] wants to merge 1 commit into
masterfrom
dependabot/npm_and_yarn/master/npm-minor-and-patch-bbf7c0a4f0

Conversation

@dependabot

@dependabot dependabot Bot commented on behalf of github Jun 28, 2026

Copy link
Copy Markdown

Bumps the npm-minor-and-patch group with 13 updates in the / directory:

Package From To
@lexical/headless 0.45.0 0.46.0
@lexical/html 0.45.0 0.46.0
@lexical/list 0.45.0 0.46.0
@lexical/overflow 0.45.0 0.46.0
@lexical/react 0.45.0 0.46.0
@lexical/rich-text 0.45.0 0.46.0
@lexical/selection 0.45.0 0.46.0
@lexical/utils 0.45.0 0.46.0
axios 1.18.0 1.18.1
dompurify 3.4.10 3.4.11
lexical 0.45.0 0.46.0
@biomejs/biome 2.5.0 2.5.2
@faker-js/faker 10.4.0 10.5.0

Updates @lexical/headless from 0.45.0 to 0.46.0

Release notes

Sourced from @​lexical/headless's releases.

v0.46.0 is a monthly release headlined by two major new experimental capabilities:

  • Named slots - a model that lets a single host element or decorator node own several isolated editable regions inside the host's own editorState
  • Shadow DOM - the root element can now be hosted in an open shadow root (or iframe)

This release also includes many other fixes and new features across IME/composition, collaboration, markdown round-tripping, lists, code blocks, links, and mobile keyboards. It is also our first release (other than nightlies) to use NPM Trusted Publishing.

Special recognition for this release goes to @​mayrang for doing the majority of the work on both of these new features as well as fixing some tricky IME/composition issues 👏 @​levensta has also been doing a fantastic job going through the issue backlog, providing valuable feedback on these bleeding edge features, and identifying long-standing edge cases.

Breaking Changes

lexical — Node traversal methods no longer accept unsafe type parameters (#8661)

The zero-argument generics on getParent(OrThrow), getPreviousSibling(s), getNextSibling(s), getChildren, getFirstChild(OrThrow), getLastChild(OrThrow), getChildAtIndex, getFirstDescendant, getLastDescendant, and getDescendantByIndex were implicit unchecked casts — there is no inference site, so any non-base type argument was equivalent to an as cast. Each method is now an overload pair: a documented non-generic signature returning the base type (LexicalNode / ElementNode | null), plus the old generic signature marked @deprecated. Code that leaned on contextual-type inference no longer type-checks:

// Before: compiled (unsound). After: type error.
const node: ParagraphNode | null = $getRoot().getFirstChild();
// Port directly with an explicit cast (no behavior change):
const node = $getRoot().getFirstChild() as ParagraphNode | null;
// Or, better, narrow with a guard:
const node = $getRoot().getFirstChild();
if ($isParagraphNode(node)) { /* node: ParagraphNode */ }

Existing getFirstChild<ParagraphNode>()-style calls still compile but are now deprecated and will be removed in a future release. This is a types-only change with no runtime impact.

lexical$getNearestNodeFromDOMNode(rootElement) now returns RootNode (#8588)

The "selection captured outside of Lexical" mechanism is generalized beyond DecoratorNode subtrees: setDOMUnmanaged(dom, {captureSelection: true}) now marks any subtree (e.g. a DOMRenderExtension override or a getDOMSlot widget) as selection-captured, and isDOMCapturingSelection(dom) walks ancestors so a descendant <input> reports as captured. As part of this, the root element now carries a __lexicalKey_* stash, so $getNodeFromDOM / $getNearestNodeFromDOMNode resolve the root element to the RootNode instead of null. Two call sites become more correct (drop-on-root in clipboard, table-selection→range conversion), but external callers that relied on $getNearestNodeFromDOMNode(rootElement) returning null must update. The internal-only $isSelectionCapturedInDecorator was removed.

lexicalinsertNodes preserves a leading linebreak; managed <br>s are now tagged (#8615)

RangeSelection.insertNodes now preserves the first LineBreakNode when inserting inline content ahead of a block element, instead of silently dropping it. Separately, the reconciler-inserted "managed" line breaks (the otherwise-invisible <br>s Lexical adds so the caret can land in empty lines) are now identifiable in the DOM as <br data-lexical-managed-linebreak="true"> — and, on iOS Safari, an analogous <img data-lexical-managed-linebreak="true" …> in some cases. DOM/HTML snapshot test expectations may need to ignore or expect this attribute. Closes #3980.

@lexical/html and node extensions — DOMImportExtension rules now register implicitly (#8662) (experimental)

The experimental DOM-import pipeline no longer requires you to list a per-package import extension. Each node-providing extension (RichTextExtension, ListExtension, LinkExtension, TableExtension, CodeExtension) now registers its own import rules, and the standalone RichTextImportExtension / ListImportExtension / LinkImportExtension / TableImportExtension / CodeImportExtension / HorizontalRuleImportExtension become deprecated aliases that may be removed as early as v0.47.0. Rules stay inert unless HTML is routed through ClipboardDOMImportExtension or $generateNodesFromDOMViaExtension; the legacy importDOM paste path is unchanged. If you had not adopted these v0.45.0 extensions yet, there is no breaking change.

lexical / @lexical/yjs / @lexical/clipboard / @lexical/html — Named slots (#8603) (experimental)

All slot machinery is opt-in and gated (an editor latches _slotsUsed on the first $setSlot), so editors that never use slots take identical code paths to before. Two changes are observable regardless:

  • syncLexicalUpdateToYjsV2__EXPERIMENTAL takes a new dirtyLeaves parameter, inserted between dirtyElements and normalizedNodes (a slot host's values surface as dirty leaves).
  • A NodeSelection containing an ElementNode now includes that element's children on copy/export ($getHtmlContent / $generateJSONFromSelectedNodes). The previous behavior serialized a childless shell, making cut of an element NodeSelection silently lossy; partial RangeSelections keep per-child slicing and excludeFromCopy children remain excluded.

@lexical/link / @lexical/list / @lexical/react — Removed exports deprecated since v0.32.1 (#8704)

Exports marked @deprecated in v0.32.1 (2025-06-04, >12 months ago) with no Meta-internal consumers are removed:

... (truncated)

Changelog

Sourced from @​lexical/headless's changelog.

v0.46.0 (2026-06-25)

  • lexical Bug Fix Ignore beforeinput and input events in captured decorators (#8740) Bob Ippolito
  • lexical Modernize Flow type-stub syntax rejected by fb-www flow strict (#8742) Sherry
  • lexical Bug Fix Refactor class inheritance loops to use an inheritsLoose-safe helper (#8739) Bob Ippolito
  • lexical Refactor Improve error messages for invalid node classes and cache getStaticNodeConfig (#8735) Bob Ippolito
  • lexical-utilslexical-react Chore Move getScrollParent to lexicalutils (#8733) mayrang
  • lexical Feature Support DOM shadow roots via platform selection APIs (#8694) mayrang
  • lexical Bug Fix Normalize non-inline nodes when inserting into inline-only parents (#8715) Bob Ippolito
  • lexical-utils Add dedupeSelectionRects fix duplicateextra selection rects on WebKit (#7106, #7492) (#8709) Provi
  • lexical-markdown Bug Fix Preserve inline formatting when wrapping already-formatted text with matching markers (#8728) Koki Sato
  • fix(lexical) guard klass.prototype null check in getStaticNodeConfig (#8726) Sherry
  • lexical-plain-textlexical-rich-text Bug Fix Refresh iOS keyboard suggestion bar after Backspace for all locales (#8725) Sergey Gorbachev
  • lexical-markdown Bug Fix Inline code spans containing backticks (#8723) Baptiste Jamin
  • lexicallexical-rich-textlexical-clipboard Bug Fix Named-slot typing Backspace Copy hydrate paths (#8716) mayrang
  • lexical-mark Chore Widen MarkNode method return types to boolean (#8717) Patrick Moody
  • lexical-playground Bug Fix Render PageBreakNode as hr so Safari fires beforeinput after paste (#8719) mayrang
  • Refactor Migrate editor.getEditorState().read(...) to editor.read(latest, ...) (#8703) Bob Ippolito
  • lexical-reactlexical-playground Refactor Replace react-error-boundary with a self-contained LexicalErrorBoundary (#8720) Bob Ippolito
  • lexical-reactlexical-linklexical-historylexical-extension Docs API doc coverage of react exports (#8714) Bob Ippolito
  • lexical Bug Fix Insert nodes at the block cursor inside a shadow root (#8708) Bob Ippolito
  • lexical-link Bug Fix Preserve LinkNode wrap on copy in FirefoxSafari (#8705) mayrang
  • Breaking Changeslexical-linklexical-listlexical-react Chore Remove a subset of v0.32.1-deprecated exports (#8704) Bob Ippolito
  • lexical-clipboard Bug Fix Correct type-checking (#8706) Sergey Gorbachev
  • Breaking Changeslexicallexical-yjslexical-clipboardlexical-htmllexical-playground Feature Named slots (#8603) mayrang
  • lexical-playground Bug Fix Preserve block equation markdown (#8562) Vivek JM
  • lexical Bug Fix Recheck text node contents on deletion with composition (#8701) EWS
  • lexical Feature Replace LexicalEditor.readPending with editor.read(mode, fn) overload (#8702) Bob Ippolito
  • lexical-playground Bug Fix CodeBlock layout-exit e2e expected HTML (#8695) mayrang
  • Breaking Changelexical Fix Preserve the first linebreak when passing inline nodes to insertNodes and add data-lexical-managed-linebreak attribute to managed linebreaks (#8615) Sergey Gorbachev
  • lexical Chore Remove unused tmp dependency (#8693) Noritaka Kobayashi
  • lexical Bug Fix Reuse the empty trailing block when typing at root last-offset selection (#8686) mayrang
  • lexical-markdown Bug Fix code spans should bind tighter than text-match transformers (#8688) Bob Ippolito
  • lexical-utilslexical-playground Bug Fix Double paragraph creation when exiting a nested code block (#8684) Sergey Gorbachev
  • lexical-rich-textlexical-plain-text Spec hardening call event.preventDefault() in dragover for HTML5 DnD compliance (#8663) sahir
  • lexical-react Refactor Use hook syntax in .js.flow files to better declare intent (#8682) Sam Zhou
  • lexical-playground Bug Fix clear block alignment and indent with a collapsed selection but not a partial one (#8666) Achal Jhawar
  • lexical-list Bug Fix Preserve previous DecoratorNode on Backspace at the start of a top-level list (#8676) mayrang
  • lexical-markdown Bug Fix Update ordered list start when typing a marker before it (#8678) mayrang
  • lexical Bug Fix Emit COMPOSITIONENDTAG from the Firefox onInput defer branch (#8680) mayrang
  • Chore always use T syntax instead of ArrayT in TypeScript and Flow (#8675) Bob Ippolito
  • lexical-table Bug Fix dont throw on stale table node keys in handleTableSelectionChangeCommand (#8674) Bob Ippolito
  • ci Bug Fix Fix intermittent EACCES in Windows CI browser tests by pinning Vitest browser port (#8673) Bob Ippolito
  • lexicallexical-utilslexical-extensionlexical-playground Feature SelectBlockExtension (#8532) Sergey Gorbachev
  • lexical-dragon Bug Fix Handle makeChanges messages and the listener registration race (#8665) Bruno Prieto
  • lexical Bug Fix stop infinite-update-loop detector over-firing on bounded activity (fast typing) (#8635) Sherry
  • lexical Chore stop using deprecated traversal type parameters in tests (#8667) Bob Ippolito
  • Breaking Changes Refactor Register DOMImportExtension rules implicitly via node extensions and make tree-shaking annotations effective (#8662) Bob Ippolito
  • Breaking Changelexical Chore deprecate unsafe type parameters on node traversal methods (#8661) Bob Ippolito
  • lexical-yjs Bug Fix Yjs desynchronizes after clearing all nodes (#8646) sahir

... (truncated)

Commits
  • ad93fe6 v0.46.0
  • 75461f7 [lexical] Bug Fix: Normalize non-inline nodes when inserting into inline-only...
  • 92b387a [*] Refactor: Migrate editor.getEditorState().read(...) to editor.read('lates...
  • ac3814e [*] Bug Fix: Surface a clear error when TypeScript (<5.2) can't read the pack...
  • adf8f20 v0.45.0 (#8580)
  • See full diff in compare view
Maintainer changes

This version was pushed to npm by GitHub Actions, a new releaser for @​lexical/headless since your current version.


Updates @lexical/html from 0.45.0 to 0.46.0

Release notes

Sourced from @​lexical/html's releases.

v0.46.0 is a monthly release headlined by two major new experimental capabilities:

  • Named slots - a model that lets a single host element or decorator node own several isolated editable regions inside the host's own editorState
  • Shadow DOM - the root element can now be hosted in an open shadow root (or iframe)

This release also includes many other fixes and new features across IME/composition, collaboration, markdown round-tripping, lists, code blocks, links, and mobile keyboards. It is also our first release (other than nightlies) to use NPM Trusted Publishing.

Special recognition for this release goes to @​mayrang for doing the majority of the work on both of these new features as well as fixing some tricky IME/composition issues 👏 @​levensta has also been doing a fantastic job going through the issue backlog, providing valuable feedback on these bleeding edge features, and identifying long-standing edge cases.

Breaking Changes

lexical — Node traversal methods no longer accept unsafe type parameters (#8661)

The zero-argument generics on getParent(OrThrow), getPreviousSibling(s), getNextSibling(s), getChildren, getFirstChild(OrThrow), getLastChild(OrThrow), getChildAtIndex, getFirstDescendant, getLastDescendant, and getDescendantByIndex were implicit unchecked casts — there is no inference site, so any non-base type argument was equivalent to an as cast. Each method is now an overload pair: a documented non-generic signature returning the base type (LexicalNode / ElementNode | null), plus the old generic signature marked @deprecated. Code that leaned on contextual-type inference no longer type-checks:

// Before: compiled (unsound). After: type error.
const node: ParagraphNode | null = $getRoot().getFirstChild();
// Port directly with an explicit cast (no behavior change):
const node = $getRoot().getFirstChild() as ParagraphNode | null;
// Or, better, narrow with a guard:
const node = $getRoot().getFirstChild();
if ($isParagraphNode(node)) { /* node: ParagraphNode */ }

Existing getFirstChild<ParagraphNode>()-style calls still compile but are now deprecated and will be removed in a future release. This is a types-only change with no runtime impact.

lexical$getNearestNodeFromDOMNode(rootElement) now returns RootNode (#8588)

The "selection captured outside of Lexical" mechanism is generalized beyond DecoratorNode subtrees: setDOMUnmanaged(dom, {captureSelection: true}) now marks any subtree (e.g. a DOMRenderExtension override or a getDOMSlot widget) as selection-captured, and isDOMCapturingSelection(dom) walks ancestors so a descendant <input> reports as captured. As part of this, the root element now carries a __lexicalKey_* stash, so $getNodeFromDOM / $getNearestNodeFromDOMNode resolve the root element to the RootNode instead of null. Two call sites become more correct (drop-on-root in clipboard, table-selection→range conversion), but external callers that relied on $getNearestNodeFromDOMNode(rootElement) returning null must update. The internal-only $isSelectionCapturedInDecorator was removed.

lexicalinsertNodes preserves a leading linebreak; managed <br>s are now tagged (#8615)

RangeSelection.insertNodes now preserves the first LineBreakNode when inserting inline content ahead of a block element, instead of silently dropping it. Separately, the reconciler-inserted "managed" line breaks (the otherwise-invisible <br>s Lexical adds so the caret can land in empty lines) are now identifiable in the DOM as <br data-lexical-managed-linebreak="true"> — and, on iOS Safari, an analogous <img data-lexical-managed-linebreak="true" …> in some cases. DOM/HTML snapshot test expectations may need to ignore or expect this attribute. Closes #3980.

@lexical/html and node extensions — DOMImportExtension rules now register implicitly (#8662) (experimental)

The experimental DOM-import pipeline no longer requires you to list a per-package import extension. Each node-providing extension (RichTextExtension, ListExtension, LinkExtension, TableExtension, CodeExtension) now registers its own import rules, and the standalone RichTextImportExtension / ListImportExtension / LinkImportExtension / TableImportExtension / CodeImportExtension / HorizontalRuleImportExtension become deprecated aliases that may be removed as early as v0.47.0. Rules stay inert unless HTML is routed through ClipboardDOMImportExtension or $generateNodesFromDOMViaExtension; the legacy importDOM paste path is unchanged. If you had not adopted these v0.45.0 extensions yet, there is no breaking change.

lexical / @lexical/yjs / @lexical/clipboard / @lexical/html — Named slots (#8603) (experimental)

All slot machinery is opt-in and gated (an editor latches _slotsUsed on the first $setSlot), so editors that never use slots take identical code paths to before. Two changes are observable regardless:

  • syncLexicalUpdateToYjsV2__EXPERIMENTAL takes a new dirtyLeaves parameter, inserted between dirtyElements and normalizedNodes (a slot host's values surface as dirty leaves).
  • A NodeSelection containing an ElementNode now includes that element's children on copy/export ($getHtmlContent / $generateJSONFromSelectedNodes). The previous behavior serialized a childless shell, making cut of an element NodeSelection silently lossy; partial RangeSelections keep per-child slicing and excludeFromCopy children remain excluded.

@lexical/link / @lexical/list / @lexical/react — Removed exports deprecated since v0.32.1 (#8704)

Exports marked @deprecated in v0.32.1 (2025-06-04, >12 months ago) with no Meta-internal consumers are removed:

... (truncated)

Changelog

Sourced from @​lexical/html's changelog.

v0.46.0 (2026-06-25)

  • lexical Bug Fix Ignore beforeinput and input events in captured decorators (#8740) Bob Ippolito
  • lexical Modernize Flow type-stub syntax rejected by fb-www flow strict (#8742) Sherry
  • lexical Bug Fix Refactor class inheritance loops to use an inheritsLoose-safe helper (#8739) Bob Ippolito
  • lexical Refactor Improve error messages for invalid node classes and cache getStaticNodeConfig (#8735) Bob Ippolito
  • lexical-utilslexical-react Chore Move getScrollParent to lexicalutils (#8733) mayrang
  • lexical Feature Support DOM shadow roots via platform selection APIs (#8694) mayrang
  • lexical Bug Fix Normalize non-inline nodes when inserting into inline-only parents (#8715) Bob Ippolito
  • lexical-utils Add dedupeSelectionRects fix duplicateextra selection rects on WebKit (#7106, #7492) (#8709) Provi
  • lexical-markdown Bug Fix Preserve inline formatting when wrapping already-formatted text with matching markers (#8728) Koki Sato
  • fix(lexical) guard klass.prototype null check in getStaticNodeConfig (#8726) Sherry
  • lexical-plain-textlexical-rich-text Bug Fix Refresh iOS keyboard suggestion bar after Backspace for all locales (#8725) Sergey Gorbachev
  • lexical-markdown Bug Fix Inline code spans containing backticks (#8723) Baptiste Jamin
  • lexicallexical-rich-textlexical-clipboard Bug Fix Named-slot typing Backspace Copy hydrate paths (#8716) mayrang
  • lexical-mark Chore Widen MarkNode method return types to boolean (#8717) Patrick Moody
  • lexical-playground Bug Fix Render PageBreakNode as hr so Safari fires beforeinput after paste (#8719) mayrang
  • Refactor Migrate editor.getEditorState().read(...) to editor.read(latest, ...) (#8703) Bob Ippolito
  • lexical-reactlexical-playground Refactor Replace react-error-boundary with a self-contained LexicalErrorBoundary (#8720) Bob Ippolito
  • lexical-reactlexical-linklexical-historylexical-extension Docs API doc coverage of react exports (#8714) Bob Ippolito
  • lexical Bug Fix Insert nodes at the block cursor inside a shadow root (#8708) Bob Ippolito
  • lexical-link Bug Fix Preserve LinkNode wrap on copy in FirefoxSafari (#8705) mayrang
  • Breaking Changeslexical-linklexical-listlexical-react Chore Remove a subset of v0.32.1-deprecated exports (#8704) Bob Ippolito
  • lexical-clipboard Bug Fix Correct type-checking (#8706) Sergey Gorbachev
  • Breaking Changeslexicallexical-yjslexical-clipboardlexical-htmllexical-playground Feature Named slots (#8603) mayrang
  • lexical-playground Bug Fix Preserve block equation markdown (#8562) Vivek JM
  • lexical Bug Fix Recheck text node contents on deletion with composition (#8701) EWS
  • lexical Feature Replace LexicalEditor.readPending with editor.read(mode, fn) overload (#8702) Bob Ippolito
  • lexical-playground Bug Fix CodeBlock layout-exit e2e expected HTML (#8695) mayrang
  • Breaking Changelexical Fix Preserve the first linebreak when passing inline nodes to insertNodes and add data-lexical-managed-linebreak attribute to managed linebreaks (#8615) Sergey Gorbachev
  • lexical Chore Remove unused tmp dependency (#8693) Noritaka Kobayashi
  • lexical Bug Fix Reuse the empty trailing block when typing at root last-offset selection (#8686) mayrang
  • lexical-markdown Bug Fix code spans should bind tighter than text-match transformers (#8688) Bob Ippolito
  • lexical-utilslexical-playground Bug Fix Double paragraph creation when exiting a nested code block (#8684) Sergey Gorbachev
  • lexical-rich-textlexical-plain-text Spec hardening call event.preventDefault() in dragover for HTML5 DnD compliance (#8663) sahir
  • lexical-react Refactor Use hook syntax in .js.flow files to better declare intent (#8682) Sam Zhou
  • lexical-playground Bug Fix clear block alignment and indent with a collapsed selection but not a partial one (#8666) Achal Jhawar
  • lexical-list Bug Fix Preserve previous DecoratorNode on Backspace at the start of a top-level list (#8676) mayrang
  • lexical-markdown Bug Fix Update ordered list start when typing a marker before it (#8678) mayrang
  • lexical Bug Fix Emit COMPOSITIONENDTAG from the Firefox onInput defer branch (#8680) mayrang
  • Chore always use T syntax instead of ArrayT in TypeScript and Flow (#8675) Bob Ippolito
  • lexical-table Bug Fix dont throw on stale table node keys in handleTableSelectionChangeCommand (#8674) Bob Ippolito
  • ci Bug Fix Fix intermittent EACCES in Windows CI browser tests by pinning Vitest browser port (#8673) Bob Ippolito
  • lexicallexical-utilslexical-extensionlexical-playground Feature SelectBlockExtension (#8532) Sergey Gorbachev
  • lexical-dragon Bug Fix Handle makeChanges messages and the listener registration race (#8665) Bruno Prieto
  • lexical Bug Fix stop infinite-update-loop detector over-firing on bounded activity (fast typing) (#8635) Sherry
  • lexical Chore stop using deprecated traversal type parameters in tests (#8667) Bob Ippolito
  • Breaking Changes Refactor Register DOMImportExtension rules implicitly via node extensions and make tree-shaking annotations effective (#8662) Bob Ippolito
  • Breaking Changelexical Chore deprecate unsafe type parameters on node traversal methods (#8661) Bob Ippolito
  • lexical-yjs Bug Fix Yjs desynchronizes after clearing all nodes (#8646) sahir

... (truncated)

Commits
  • ad93fe6 v0.46.0
  • abe40da [lexical] Bug Fix: Refactor class inheritance loops to use an inheritsLoose-s...
  • 75461f7 [lexical] Bug Fix: Normalize non-inline nodes when inserting into inline-only...
  • 92b387a [*] Refactor: Migrate editor.getEditorState().read(...) to editor.read('lates...
  • 9fc36b4 [Breaking Changes][lexical][lexical-yjs][lexical-clipboard][lexical-html][lex...
  • e40f283 [*] Chore: always use T[] syntax instead of Array<T> in TypeScript and Flow (...
  • 27b2a33 [Breaking Changes][*] Refactor: Register DOMImportExtension rules implicitly ...
  • ac3814e [*] Bug Fix: Surface a clear error when TypeScript (<5.2) can't read the pack...
  • aba382a [lexical-playground][lexical-html][lexical-extension] Refactor: Migrate playg...
  • 111a0d8 fix(lexical-html): $generateHtmlFromNodes should self-establish active-editor...
  • Additional commits viewable in compare view
Maintainer changes

This version was pushed to npm by GitHub Actions, a new releaser for @​lexical/html since your current version.


Updates @lexical/list from 0.45.0 to 0.46.0

Release notes

Sourced from @​lexical/list's releases.

v0.46.0 is a monthly release headlined by two major new experimental capabilities:

  • Named slots - a model that lets a single host element or decorator node own several isolated editable regions inside the host's own editorState
  • Shadow DOM - the root element can now be hosted in an open shadow root (or iframe)

This release also includes many other fixes and new features across IME/composition, collaboration, markdown round-tripping, lists, code blocks, links, and mobile keyboards. It is also our first release (other than nightlies) to use NPM Trusted Publishing.

Special recognition for this release goes to @​mayrang for doing the majority of the work on both of these new features as well as fixing some tricky IME/composition issues 👏 @​levensta has also been doing a fantastic job going through the issue backlog, providing valuable feedback on these bleeding edge features, and identifying long-standing edge cases.

Breaking Changes

lexical — Node traversal methods no longer accept unsafe type parameters (#8661)

The zero-argument generics on getParent(OrThrow), getPreviousSibling(s), getNextSibling(s), getChildren, getFirstChild(OrThrow), getLastChild(OrThrow), getChildAtIndex, getFirstDescendant, getLastDescendant, and getDescendantByIndex were implicit unchecked casts — there is no inference site, so any non-base type argument was equivalent to an as cast. Each method is now an overload pair: a documented non-generic signature returning the base type (LexicalNode / ElementNode | null), plus the old generic signature marked @deprecated. Code that leaned on contextual-type inference no longer type-checks:

// Before: compiled (unsound). After: type error.
const node: ParagraphNode | null = $getRoot().getFirstChild();
// Port directly with an explicit cast (no behavior change):
const node = $getRoot().getFirstChild() as ParagraphNode | null;
// Or, better, narrow with a guard:
const node = $getRoot().getFirstChild();
if ($isParagraphNode(node)) { /* node: ParagraphNode */ }

Existing getFirstChild<ParagraphNode>()-style calls still compile but are now deprecated and will be removed in a future release. This is a types-only change with no runtime impact.

lexical$getNearestNodeFromDOMNode(rootElement) now returns RootNode (#8588)

The "selection captured outside of Lexical" mechanism is generalized beyond DecoratorNode subtrees: setDOMUnmanaged(dom, {captureSelection: true}) now marks any subtree (e.g. a DOMRenderExtension override or a getDOMSlot widget) as selection-captured, and isDOMCapturingSelection(dom) walks ancestors so a descendant <input> reports as captured. As part of this, the root element now carries a __lexicalKey_* stash, so $getNodeFromDOM / $getNearestNodeFromDOMNode resolve the root element to the RootNode instead of null. Two call sites become more correct (drop-on-root in clipboard, table-selection→range conversion), but external callers that relied on $getNearestNodeFromDOMNode(rootElement) returning null must update. The internal-only $isSelectionCapturedInDecorator was removed.

lexicalinsertNodes preserves a leading linebreak; managed <br>s are now tagged (#8615)

RangeSelection.insertNodes now preserves the first LineBreakNode when inserting inline content ahead of a block element, instead of silently dropping it. Separately, the reconciler-inserted "managed" line breaks (the otherwise-invisible <br>s Lexical adds so the caret can land in empty lines) are now identifiable in the DOM as <br data-lexical-managed-linebreak="true"> — and, on iOS Safari, an analogous <img data-lexical-managed-linebreak="true" …> in some cases. DOM/HTML snapshot test expectations may need to ignore or expect this attribute. Closes #3980.

@lexical/html and node extensions — DOMImportExtension rules now register implicitly (#8662) (experimental)

The experimental DOM-import pipeline no longer requires you to list a per-package import extension. Each node-providing extension (RichTextExtension, ListExtension, LinkExtension, TableExtension, CodeExtension) now registers its own import rules, and the standalone RichTextImportExtension / ListImportExtension / LinkImportExtension / TableImportExtension / CodeImportExtension / HorizontalRuleImportExtension become deprecated aliases that may be removed as early as v0.47.0. Rules stay inert unless HTML is routed through ClipboardDOMImportExtension or $generateNodesFromDOMViaExtension; the legacy importDOM paste path is unchanged. If you had not adopted these v0.45.0 extensions yet, there is no breaking change.

lexical / @lexical/yjs / @lexical/clipboard / @lexical/html — Named slots (#8603) (experimental)

All slot machinery is opt-in and gated (an editor latches _slotsUsed on the first $setSlot), so editors that never use slots take identical code paths to before. Two changes are observable regardless:

  • syncLexicalUpdateToYjsV2__EXPERIMENTAL takes a new dirtyLeaves parameter, inserted between dirtyElements and normalizedNodes (a slot host's values surface as dirty leaves).
  • A NodeSelection containing an ElementNode now includes that element's children on copy/export ($getHtmlContent / $generateJSONFromSelectedNodes). The previous behavior serialized a childless shell, making cut of an element NodeSelection silently lossy; partial RangeSelections keep per-child slicing and excludeFromCopy children remain excluded.

@lexical/link / @lexical/list / @lexical/react — Removed exports deprecated since v0.32.1 (#8704)

Exports marked @deprecated in v0.32.1 (2025-06-04, >12 months ago) with no Meta-internal consumers are removed:

... (truncated)

Changelog

Sourced from @​lexical/list's changelog.

v0.46.0 (2026-06-25)

  • lexical Bug Fix Ignore beforeinput and input events in captured decorators (#8740) Bob Ippolito
  • lexical Modernize Flow type-stub syntax rejected by fb-www flow strict (#8742) Sherry
  • lexical Bug Fix Refactor class inheritance loops to use an inheritsLoose-safe helper (#8739) Bob Ippolito
  • lexical Refactor Improve error messages for invalid node classes and cache getStaticNodeConfig (#8735) Bob Ippolito
  • lexical-utilslexical-react Chore Move getScrollParent to lexicalutils (#8733) mayrang
  • lexical Feature Support DOM shadow roots via platform selection APIs (#8694) mayrang
  • lexical Bug Fix Normalize non-inline nodes when inserting into inline-only parents (#8715) Bob Ippolito
  • lexical-utils Add dedupeSelectionRects fix duplicateextra selection rects on WebKit (#7106, #7492) (#8709) Provi
  • lexical-markdown Bug Fix Preserve inline formatting when wrapping already-formatted text with matching markers (#8728) Koki Sato
  • fix(lexical) guard klass.prototype null check in getStaticNodeConfig (#8726) Sherry
  • lexical-plain-textlexical-rich-text Bug Fix Refresh iOS keyboard suggestion bar after Backspace for all locales (#8725) Sergey Gorbachev
  • lexical-markdown Bug Fix Inline code spans containing backticks (#8723) Baptiste Jamin
  • lexicallexical-rich-textlexical-clipboard Bug Fix Named-slot typing Backspace Copy hydrate paths (#8716) mayrang
  • lexical-mark Chore Widen MarkNode method return types to boolean (#8717) Patrick Moody
  • lexical-playground Bug Fix Render PageBreakNode as hr so Safari fires beforeinput after paste (#8719) mayrang
  • Refactor Migrate editor.getEditorState().read(...) to editor.read(latest, ...) (#8703) Bob Ippolito
  • lexical-reactlexical-playground Refactor Replace react-error-boundary with a self-contained LexicalErrorBoundary (#8720) Bob Ippolito
  • lexical-reactlexical-linklexical-historylexical-extension Docs API doc coverage of react exports (#8714) Bob Ippolito
  • lexical Bug Fix Insert nodes at the block cursor inside a shadow root (#8708) Bob Ippolito
  • lexical-link Bug Fix Preserve LinkNode wrap on copy in FirefoxSafari (#8705) mayrang
  • Breaking Changeslexical-linklexical-listlexical-react Chore Remove a subset of v0.32.1-deprecated exports (#8704) Bob Ippolito
  • lexical-clipboard Bug Fix Correct type-checking (#8706) Sergey Gorbachev
  • Breaking Changeslexicallexical-yjslexical-clipboardlexical-htmllexical-playground Feature Named slots (#8603) mayrang
  • lexical-playground Bug Fix Preserve block equation markdown (#8562) Vivek JM
  • lexical Bug Fix Recheck text node contents on deletion with composition (#8701) EWS
  • lexical Feature Replace LexicalEditor.readPending with editor.read(mode, fn) overload (#8702) Bob Ippolito
  • lexical-playground Bug Fix CodeBlock layout-exit e2e expected HTML (#8695) mayrang
  • Breaking Changelexical Fix Preserve the first linebreak when passing inline nodes to insertNodes and add data-lexical-managed-linebreak attribute to managed linebreaks (#8615) Sergey Gorbachev
  • lexical Chore Remove unused tmp dependency (#8693) Noritaka Kobayashi
  • lexical Bug Fix Reuse the empty trailing block when typing at root last-offset selection (#8686) mayrang
  • lexical-markdown Bug Fix code spans should bind tighter than text-match transformers (#8688) Bob Ippolito
  • lexical-utilslexical-playground Bug Fix Double paragraph creation when exiting a nested code block (#8684) Sergey Gorbachev
  • lexical-rich-textlexical-plain-text Spec hardening call event.preventDefault() in dragover for HTML5 DnD compliance (#8663) sahir
  • lexical-react Refactor Use hook syntax in .js.flow files to better declare intent (#8682) Sam Zhou
  • lexical-playground Bug Fix clear block alignment and indent with a collapsed selection but not a partial one (#8666) Achal Jhawar
  • lexical-list Bug Fix Preserve previous DecoratorNode on Backspace at the start of a top-level list (#8676) mayrang
  • lexical-markdown Bug Fix Update ordered list start when typing a marker before it (#8678) mayrang
  • lexical Bug Fix Emit COMPOSITIONENDTAG from the Firefox onInput defer branch (#8680) mayrang
  • Chore always use T syntax instead of ArrayT in TypeScript and Flow (#8675) Bob Ippolito
  • lexical-table Bug Fix dont throw on stale table node keys in handleTableSelectionChangeCommand (#8674) Bob Ippolito
  • ci Bug Fix Fix intermittent EACCES in Windows CI browser tests by pinning Vitest browser port (#8673) Bob Ippolito
  • lexicallexical-utilslexical-extensionlexical-playground Feature SelectBlockExtension (#8532) Sergey Gorbachev
  • lexical-dragon Bug Fix Handle makeChanges messages and the listener registration race (#8665) Bruno Prieto
  • lexical Bug Fix stop infinite-update-loop detector over-firing on bounded activity (fast typing) (#8635) Sherry
  • lexical Chore stop using deprecated traversal type parameters in tests (#8667) Bob Ippolito
  • Breaking Changes Refactor Register DOMImportExtension rules implicitly via node extensions and make tree-shaking annotations effective (#8662) Bob Ippolito
  • Breaking Changelexical Chore deprecate unsafe type parameters on node traversal methods (#8661) Bob Ippolito
  • lexical-yjs Bug Fix Yjs desynchronizes after clearing all nodes (#8646) sahir

... (truncated)

Commits
  • ad93fe6 v0.46.0
  • 183fca5 [lexical] Feature: Support DOM shadow roots via platform selection APIs (#8694)
  • 75461f7 [lexical] Bug Fix: Normalize non-inline nodes when inserting into inline-only...
  • 2f2bc97 [lexical][lexical-rich-text][lexical-clipboard] Bug Fix: Named-slot typing / ...
  • 92b387a [*] Refactor: Migrate editor.getEditorState().read(...) to editor.read('lates...
  • e02e669 [Breaking Changes][lexical-link][lexical-list][lexical-react] Chore: Remove a...
  • 9fc36b4 [Breaking Changes][lexical][lexical-yjs][lexical-clipboard][lexical-html][lex...
  • 9f3c1db [Breaking Change][lexical] Fix: Preserve the first linebreak when passing inl...
  • 0be7def [lexical-list] Bug Fix: Preserve previous DecoratorNode on Backspace at the s...
  • e40f283 [*] Chore: always use T[] syntax instead of Array<T> in TypeScript and Flow (...
  • Additional commits viewable in compare view
Maintainer changes

This version was pushed to npm by GitHub Actions, a new releaser for @​lexical/list since your current version.


Updates @lexical/overflow from 0.45.0 to 0.46.0

Release notes

Sourced from @​lexical/overflow's releases.

v0.46.0 is a monthly release headlined by two major new experimental capabilities:

  • Named slots - a model that lets a single host element or decorator node own several isolated editable regions inside the host's own editorState
  • Shadow DOM - the root element can now be hosted in an open shadow root (or iframe)

This release also includes many other fixes and new features across IME/composition, collaboration, markdown round-tripping, lists, code blocks, links, and mobile keyboards. It is also our first release (other than nightlies) to use NPM Trusted Publishing.

Special recognition for this release goes to @​mayrang for doing the majority of the work on both of these new features as well as fixing some tricky IME/composition...

Description has been truncated

@dependabot dependabot Bot added the dependencies Pull requests that update a dependency file label Jun 28, 2026
…th 13 updates

Bumps the npm-minor-and-patch group with 13 updates in the / directory:

| Package | From | To |
| --- | --- | --- |
| [@lexical/headless](https://github.com/facebook/lexical/tree/HEAD/packages/lexical-headless) | `0.45.0` | `0.46.0` |
| [@lexical/html](https://github.com/facebook/lexical/tree/HEAD/packages/lexical-html) | `0.45.0` | `0.46.0` |
| [@lexical/list](https://github.com/facebook/lexical/tree/HEAD/packages/lexical-list) | `0.45.0` | `0.46.0` |
| [@lexical/overflow](https://github.com/facebook/lexical/tree/HEAD/packages/lexical-overflow) | `0.45.0` | `0.46.0` |
| [@lexical/react](https://github.com/facebook/lexical/tree/HEAD/packages/lexical-react) | `0.45.0` | `0.46.0` |
| [@lexical/rich-text](https://github.com/facebook/lexical/tree/HEAD/packages/lexical-rich-text) | `0.45.0` | `0.46.0` |
| [@lexical/selection](https://github.com/facebook/lexical/tree/HEAD/packages/lexical-selection) | `0.45.0` | `0.46.0` |
| [@lexical/utils](https://github.com/facebook/lexical/tree/HEAD/packages/lexical-utils) | `0.45.0` | `0.46.0` |
| [axios](https://github.com/axios/axios) | `1.18.0` | `1.18.1` |
| [dompurify](https://github.com/cure53/DOMPurify) | `3.4.10` | `3.4.11` |
| [lexical](https://github.com/facebook/lexical/tree/HEAD/packages/lexical) | `0.45.0` | `0.46.0` |
| [@biomejs/biome](https://github.com/biomejs/biome/tree/HEAD/packages/@biomejs/biome) | `2.5.0` | `2.5.2` |
| [@faker-js/faker](https://github.com/faker-js/faker) | `10.4.0` | `10.5.0` |



Updates `@lexical/headless` from 0.45.0 to 0.46.0
- [Release notes](https://github.com/facebook/lexical/releases)
- [Changelog](https://github.com/facebook/lexical/blob/main/CHANGELOG.md)
- [Commits](https://github.com/facebook/lexical/commits/v0.46.0/packages/lexical-headless)

Updates `@lexical/html` from 0.45.0 to 0.46.0
- [Release notes](https://github.com/facebook/lexical/releases)
- [Changelog](https://github.com/facebook/lexical/blob/main/CHANGELOG.md)
- [Commits](https://github.com/facebook/lexical/commits/v0.46.0/packages/lexical-html)

Updates `@lexical/list` from 0.45.0 to 0.46.0
- [Release notes](https://github.com/facebook/lexical/releases)
- [Changelog](https://github.com/facebook/lexical/blob/main/CHANGELOG.md)
- [Commits](https://github.com/facebook/lexical/commits/v0.46.0/packages/lexical-list)

Updates `@lexical/overflow` from 0.45.0 to 0.46.0
- [Release notes](https://github.com/facebook/lexical/releases)
- [Changelog](https://github.com/facebook/lexical/blob/main/CHANGELOG.md)
- [Commits](https://github.com/facebook/lexical/commits/v0.46.0/packages/lexical-overflow)

Updates `@lexical/react` from 0.45.0 to 0.46.0
- [Release notes](https://github.com/facebook/lexical/releases)
- [Changelog](https://github.com/facebook/lexical/blob/main/CHANGELOG.md)
- [Commits](https://github.com/facebook/lexical/commits/v0.46.0/packages/lexical-react)

Updates `@lexical/rich-text` from 0.45.0 to 0.46.0
- [Release notes](https://github.com/facebook/lexical/releases)
- [Changelog](https://github.com/facebook/lexical/blob/main/CHANGELOG.md)
- [Commits](https://github.com/facebook/lexical/commits/v0.46.0/packages/lexical-rich-text)

Updates `@lexical/selection` from 0.45.0 to 0.46.0
- [Release notes](https://github.com/facebook/lexical/releases)
- [Changelog](https://github.com/facebook/lexical/blob/main/CHANGELOG.md)
- [Commits](https://github.com/facebook/lexical/commits/v0.46.0/packages/lexical-selection)

Updates `@lexical/utils` from 0.45.0 to 0.46.0
- [Release notes](https://github.com/facebook/lexical/releases)
- [Changelog](https://github.com/facebook/lexical/blob/main/CHANGELOG.md)
- [Commits](https://github.com/facebook/lexical/commits/v0.46.0/packages/lexical-utils)

Updates `axios` from 1.18.0 to 1.18.1
- [Release notes](https://github.com/axios/axios/releases)
- [Changelog](https://github.com/axios/axios/blob/v1.x/CHANGELOG.md)
- [Commits](axios/axios@v1.18.0...v1.18.1)

Updates `dompurify` from 3.4.10 to 3.4.11
- [Release notes](https://github.com/cure53/DOMPurify/releases)
- [Commits](cure53/DOMPurify@3.4.10...3.4.11)

Updates `lexical` from 0.45.0 to 0.46.0
- [Release notes](https://github.com/facebook/lexical/releases)
- [Changelog](https://github.com/facebook/lexical/blob/main/CHANGELOG.md)
- [Commits](https://github.com/facebook/lexical/commits/v0.46.0/packages/lexical)

Updates `@biomejs/biome` from 2.5.0 to 2.5.2
- [Release notes](https://github.com/biomejs/biome/releases)
- [Changelog](https://github.com/biomejs/biome/blob/main/packages/@biomejs/biome/CHANGELOG.md)
- [Commits](https://github.com/biomejs/biome/commits/@biomejs/biome@2.5.2/packages/@biomejs/biome)

Updates `@faker-js/faker` from 10.4.0 to 10.5.0
- [Release notes](https://github.com/faker-js/faker/releases)
- [Changelog](https://github.com/faker-js/faker/blob/next/CHANGELOG.md)
- [Commits](faker-js/faker@v10.4.0...v10.5.0)

---
updated-dependencies:
- dependency-name: "@biomejs/biome"
  dependency-version: 2.5.1
  dependency-type: direct:development
  update-type: version-update:semver-patch
  dependency-group: npm-minor-and-patch
- dependency-name: "@faker-js/faker"
  dependency-version: 10.5.0
  dependency-type: direct:development
  update-type: version-update:semver-minor
  dependency-group: npm-minor-and-patch
- dependency-name: "@lexical/headless"
  dependency-version: 0.46.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
  dependency-group: npm-minor-and-patch
- dependency-name: "@lexical/html"
  dependency-version: 0.46.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
  dependency-group: npm-minor-and-patch
- dependency-name: "@lexical/list"
  dependency-version: 0.46.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
  dependency-group: npm-minor-and-patch
- dependency-name: "@lexical/overflow"
  dependency-version: 0.46.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
  dependency-group: npm-minor-and-patch
- dependency-name: "@lexical/react"
  dependency-version: 0.46.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
  dependency-group: npm-minor-and-patch
- dependency-name: "@lexical/rich-text"
  dependency-version: 0.46.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
  dependency-group: npm-minor-and-patch
- dependency-name: "@lexical/selection"
  dependency-version: 0.46.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
  dependency-group: npm-minor-and-patch
- dependency-name: "@lexical/utils"
  dependency-version: 0.46.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
  dependency-group: npm-minor-and-patch
- dependency-name: axios
  dependency-version: 1.18.1
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: npm-minor-and-patch
- dependency-name: dompurify
  dependency-version: 3.4.11
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: npm-minor-and-patch
- dependency-name: lexical
  dependency-version: 0.46.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
  dependency-group: npm-minor-and-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
@dependabot
dependabot Bot force-pushed the dependabot/npm_and_yarn/master/npm-minor-and-patch-bbf7c0a4f0 branch from 95c5dc6 to 373a908 Compare July 5, 2026 23:56
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

dependencies Pull requests that update a dependency file

Projects

None yet

Development

Successfully merging this pull request may close these issues.

0 participants