github facebook/lexical v0.24.0

21 hours ago

Breaking Changes

Build:

  • 🆕 #7047 All commonjs prod builds are now optimized with terser instead of the unmaintained closure compiler

Core editor:

  • #7037 editor.focus() now happens synchronously when called from inside of an update, as if it was implemented with a command dispatch. Previously it would defer which is confusing behavior because the expected side-effect is to change the selection which you really do want to happen synchronously.

Lexical List:

  • 🆕 #7037 insertList and removeList are now deprecated, use $insertList and $removeList instead
  • #7037 INSERT_CHECK_LIST_COMMAND, INSERT_ORDERED_LIST_COMMAND, INSERT_UNORDERED_LIST_COMMAND and REMOVE_LIST_COMMAND now update synchronously when dispatched from inside an update, rather than deferring a nested update (this is the expected behavior for commands)

Highlights

Core editor:

  • ✅ Fix: Infinite loop when splitting invalid ListItemNode #7037
  • ✅ Fix: Handle MutationObserver/input event re-ordering when using contentEditable inside of an iframe #7045
  • ✅ Fix: Normalize selection after applyDOMRange to account for Firefox differences #7050
  • ✅ Fix: triple click around inline elements (links) #7055
  • ✅ Fix: iOS Autocorrect strips formatting by reporting wrong dataType #5789
  • ✅ Fix: In the Safari browser, during the compositing event process, the delete key exhibits unexpected behavior #7061
  • ✅ Fix: Chrome on android deletion bugs #7122

Collab:

  • 🆕 Feature: Allow passing in custom syncCursorPositions function to collab hook #7053
  • ✅ Fix: handle text node being split by Yjs redo #7098

List:

  • ✅ Fix: Prevent error when calling formatList when selection is at root by #6994
  • ✅ Fix: ListItemNode serialization throws #7116

Mark:

  • 🆕 Feature: include inline decorator nodes in marks #7086
  • ✅ Fix: $wrapSelectionInMarkNode with element points #7132

Markdown:

  • ✅ Fix: support link and inline code text formats #7004

Playground:

  • ✅ Fix: Columns Layout Item Overflow #7066
  • 🆕 Feature: TableOfContents Scroll smooth behaviour #7069
  • ✅ Fix: prevent growing whitespaces in markdown table toggle #7041
  • ✅ Fix: Ensure Delete Node handles all node types #7096

React:

  • ✅ Fix: Import JSX type from React to prevent "Cannot find namespace 'JSX'"-error when type-checking with React 19 #7080

Table:

  • 🆕 Feature: Support table alignment #7044
  • ✅ Fix: Prevent error if pasted table has empty row #7057

Utils:

  • 🆕 Feature: Add reverse dfs iterator #7107 #7112

Build:

  • 🆕 All commonjs prod builds are now optimized with terser instead of the unmaintained closure compiler #7047
  • ✅ Change fork modules to use production only when NODE_ENV explicitly set to production #7065

What's Changed

  • v0.23.1 by @etrepum in #7035
  • [Breaking Change][lexical][lexical-selection][lexical-list] Bug Fix: Fix infinite loop when splitting invalid ListItemNode by @etrepum in #7037
  • Clean up nested editor update by @ivailop7 in #7039
  • [lexical] Bug Fix: Handle MutationObserver/input event re-ordering when using contentEditable inside of an iframe by @etrepum in #7045
  • [Breaking Change][*] Chore: Use terser for optimizing cjs prod build by @etrepum in #7047
  • [*] Bug Fix: Use GITHUB_OUTPUT instead of GITHUB_ENV for size-limit action by @etrepum in #7051
  • [lexical] Bug Fix: Normalize selection after applyDOMRange to account for Firefox differences by @etrepum in #7050
  • Revert [Breaking Change][lexical] Bug Fix: Commit updates on editorSetRootElement(null) (#7023) by @potatowagon in #7052
  • [lexical-table] Support table alignment by @ivailop7 in #7044
  • fix: triple click around inline elements (links) by @fantactuka in #7055
  • [lexical-yjs] Feature: Allow passing in custom syncCursorPositions function to collab hook by @amanharwara in #7053
  • fix: iOS Autocorrect strips formatting by reporting wrong dataType by @redstar504 in #5789
  • [lexical-list] Bug Fix: Prevent error when calling formatList when selection is at root by @amanharwara in #6994
  • [lexical-table] Bug Fix: Prevent error if pasted table has empty row by @amanharwara in #7057
  • docs: Change "here" link to more descriptive text by @6TELOIV in #7058
  • [lexical] Bug Fix: In the Safari browser, during the compositing event process, the delete key exhibits unexpected behavior. by @EruditionTu in #7061
  • Change fork modules to use production only when NODE_ENV explicitly set to production by @etrepum in #7065
  • [lexical-playground] Fix Columns Layout Item Overflow by @ivailop7 in #7066
  • [lexical-playground] plugins TableOfContent Scroll smooth behaviour A… by @mshaheerz in #7069
  • Unrevert [Breaking Change][lexical] Bug Fix: Commit updates on editor.setRootElement(null) #7023 by @potatowagon in #7068
  • [playground] Bug fix: prevent growing whitespaces in markdown table toggle by @potatowagon in #7041
  • Fix: Use already defined RegisteredNodes type by @hellovuki in #7085
  • [lexical] Chore: Rename variable and add comments for Safari compositing workaround by @EruditionTu in #7092
  • [lexical-react] Bug Fix: Import JSX type from React to prevent "Cannot find namespace 'JSX'"-error when type-checking with React 19 by @Svish in #7080
  • [lexical-yjs] Bug Fix: handle text node being split by Yjs redo by @james-atticus in #7098
  • Lexical Docs: 2 updates to spelling README.md by @DocAdam in #7102
  • Selection | Lexical: 1 Spelling Update Update selection.md by @DocAdam in #7103
  • Creating a React Plugin: 1 Grammar Update - Update create_plugin.md by @DocAdam in #7104
  • Working with DOM Events: 2 Spelling and Grammar Updates Update dom-ev… by @DocAdam in #7105
  • Listeners Lexical: 3 updates to spelling and grammar - Update listeners.md by @DocAdam in #7100
  • [lexical-playground] Bug Fix: Ensure Delete Node handles all node types by @mshaheerz in #7096
  • [lexical-utils] Feature: add reverse dfs iterator by @nigelgutzmann in #7107
  • [lexical-utils] Fix: Modify $reverseDfs to be a right-to-left variant of $dfs by @etrepum in #7112
  • [lexical-mark] Feature: include inline decorator nodes in marks by @james-atticus in #7086
  • Fix ListItemNode serialization throws by @zurfyx in #7116
  • [workflow] disable size-limit job by @potatowagon in #7125
  • [workflow] Delete size limit report by @potatowagon in #7128
  • cleanup size-limit by @potatowagon in #7129
  • [lexical-playground] Fix: Replace icon with Twitter with X by @awjae in #7127
  • [lexical][lexical-mark] Bug Fix: $wrapSelectionInMarkNode with element points by @etrepum in #7132
  • [lexical-react] Refactor: Replace React$Context with React.Context by @SamChou19815 in #7137
  • [lexical-markdown] Bug Fix: support link and inline code text formats by @AlessioGr in #7004
  • [lexical] Bug Fix: Fix Chrome on android deletion bugs by @waynetee in #7122
  • [bugfix] Fix flow typedef for links plugin to include attributes by @fantactuka in #7145
  • [ci] Chore: Remove SSH_KEY secret by @etrepum in #7143
  • [ci] Bug Fix: Force tag update so create release branch can be run multiple times by @etrepum in #7146

New Contributors

Full Changelog: v0.23.1...v0.24.0

Don't miss a new lexical release

NewReleases is sending notifications on new releases.