Releases: facebook/lexical
v0.7.1
Contains several small bug fixes from the Lexical 0.7.0 release.
- Fix paste for LexicalLinkPlugin (#3528) Dominic Gannaway
- RTL fix for checkbox (#3529) shiva-Aluri
- Add demos section to the navbar (#3507) akmarzhan1
- Fix lexical-offset (#3526) Dominic Gannaway
- Add missing Flow type for indentation plugin (#3527) John Flockton
- Docs: fix "node" type in "Node Overrides" example code (#3525) Chris Montrois
- Fix small Flow error (#3523) John Flockton
v0.7.0
v0.7.0 (2022-12-09)
Lexical 0.7 includes some breaking changes, including:
- Removal of
$cloneContents
from@lexical/selection
- Changes to
PlainTextPlugin
andRichTextPlugin
with regards to how placeholders are handled - Pressing tab with the
RichTextPlugin
no longer indents by default, use theLexicalTabIndentationPlugin
for this behavior. - The unstable helper function
unstable_convertLegacyJSONEditorState
has been removed. This was always meant to be a temporary work-around to allow developers to convert their formats to the new JSON format rather than using the actual editor state internals directly.
Lexical 0.7 includes performance and usability improvements. Notably, Lexical has a new internal architecture that allows for much better performance with large documents of content. Lexical also now provides a way to handle selection between blocks of content by providing an emulated cursor (make sure you add a blockCursor
theme to your editor config to use it).
- Revert "Fix exportJSON return types for ParagraphNode and LineBreakNode" (#3521) John Flockton
- Move default language setting to Tokenizer (#3368) mizuno
- Improve LexicalTreeView around large EditorStates (#3515) Dominic Gannaway
- Improve insertBefore, insertAfter, replace selection restoration logic (#3516) Dominic Gannaway
- ⏸ [0.7] Switch the internal architecture to utilize doubly linked lists (#3480) Dominic Gannaway
- Add missing annotation to internal field of Textnode (#3514) John Flockton
- ⏸ [0.7] Remove indentation keyboard shortcuts in RTE set up (#2855) John Flockton
- Fix dom-less reconciliation (#3506) Maksim Horbachevsky
- ⏸ [0.7] Add block emulated cursors (#3434) Dominic Gannaway
- ⏸ [0.7] Customize Placeholder visibility (#3379) Gerard Rovira
- ⏸ [0.7] Remove IntentionallyMarkedAsDirtyElement from public API (#3422) John Flockton
- ⏸ [0.7] Remove $cloneContents (#3483) Dominic Gannaway
- Update Playwright (#3511) Dominic Gannaway
- Improve Auto Embed (#3505) Tyler Bainbridge
- Skip tab e2e test in webkit (#3512) Dominic Gannaway
- Add poll and speech-to-text plugin examples (#3484) akmarzhan1
- Fix typedef for wrapNodes (#3492) Maksim Horbachevsky
v0.6.5
v0.6.5 (2022-12-05)
- Fix mutation listener for when DOM moves occur (#3493) Dominic Gannaway
- Fix decorator input selection (#3491) Dominic Gannaway
- Inform users that they need to install headless (#3487) Phillip Burch
- Revert changes (#3481) Dominic Gannaway
- Improve selection performance on large updates (#3478) Dominic Gannaway
- Support TypeScript language in code nodes (#3469) Jonas Bengtsson
- Improve element splicing and node removal (#3454) Dominic Gannaway
- Add start and end as format types (#3472) John Flockton
- Fix test for collab (#3471) Dominic Gannaway
- Add e2e test for text replacement (#3470) Dominic Gannaway
- Markdown decorators export fallback to text content (#3464) Maksim Horbachevsky
- Update conditional statement in LexicalAutoFocusPlugin to the same logic as in LexicalSelection (#3466) John Flockton
- Add Node Replacement Docs (#3462) Acy Watson
- Inherit headless flag from parent editor (#3459) Maksim Horbachevsky
- Change heading to paragraph when heading is empty (#3455) John Flockton
- Show caret while drag&drop (#3300) Gerard Rovira
- Fix superscript & subscript not being converted from html string (#3453) Rajatava Mukherjee
v0.6.0
Happy halloween!
108 commits! That's 66% more than 0.5.0. This release comes with many many fixes. But let's go over the highlights first:
Nightly releases
We just introduced a semi-automated release process for those of you who want to be at the cutting edge (looking at you Discord folks). New versions with the latest on the main branch will be pushed Monday through Friday.
You can find on NPM tagged with next
(npm i lexical@next
)
These will likely be more unstable, informal and might contain undocumented breaking changes. That said, that's what we do internally at Meta where we sync the Lexical GitHub repository onto Mercurial multiple times per week.
Collapsible container
The possibility to do spoiler containers has been a highly requested feature. We prototyped an efficient React-agnostic playground plugin that you can find on the playground (CollapsiblePlugin). It may eventually make it to @lexical/react
Screen.Recording.2022-10-31.at.8.22.21.AM.mov
Drag, drop & paste
Having seen many and very similar drag & drop implementations at Meta, we have come to the conclusion that dragging, dropping and pasting media is a fundamental piece of rich text. Hence, it is now built-in into the RichTextPlugin and you no longer have to implement your own event handling.
198162758-c02516c7-3ed5-45ed-b4a1-7bdd177f9a2d.mov
See the DragDropPaste playground plugin for an example on how to validate and insert your media nodes into the editor.
Failsafe DecoratorNodes
Safety first! React Decorators will now be independently wrapped with an ErrorBoundary and Suspense.
We found that it is very easy to miss either of them when implementing custom DecoratorNodes, and when either is missed and the component either crashes or suspends this causes the editor to be unusable.
195731936-a30b2397-9bf8-4f1c-97d7-9893b083ed98.mov
Breaking change: you now have to provide an ErrorBoundary to RichTextPlugin (you can use ours).
import {LexicalErrorBoundary} from 'lexical/@react/LexicalErrorBoundary';
<RichTextEditor ... ErrorBoundary={LexicalErrorBoundary} />
Editor namespace on TreeView
From internal and open-source feedback, TreeView has become an indispensable tool to work with Lexical. It gives you the ability to glance over the current state and understand how plugins work with each other.
We added the namespace and the editable state, which we feel is important to complement the read-only mode version of Lexical.
Note that, while you can convert to HTML for the read-only view, Lexical size and the possibility to have high-fidelity rendering at no cost makes it a perfect candidate for to place in a read-only mode.
In any case, @im-adithya continues the work on the cross-browser extension, what will be the preferred and most complete approach for day-to-day development.
And some more
- Added the
discrete
property toeditor.update
to perform synchronous non-batched updates. Synchronous updates are often terrible performance-wise but there are concrete occasions where they can come useful. TL;DR be careful! - You can now have custom collaboration cursor color.
- Copying a Node and Grid selection (like one or multiple images) now works with Firefox.
- Various fixes for tables, remarkably mouse selection which was acting weird sometimes.
Changelog
- Update intro.md by @crisshaker in #3064
- Update theming.md by @crisshaker in #3067
- fix(lexical-clipboard): pasting from google docs by @LuciNyan in #3063
- Update faq.md to fix error of clearing contents by @Mark-Fenng in #3070
- chore(lexical-playground): add resizability back to regular tables by @Dattaya in #3068
- Add oncall annotation by @thegreatercurve in #3071
- Fix oncall annotation issue missing from some files by @thegreatercurve in #3075
- Fix Resize and Scroll Positioning on Typeahead/Node Menu by @tylerjbainbridge in #3079
- fix(lexical-playground): read-only mode by @LuciNyan in #3081
- Removed extra 'is' in line 9 by @Boye95 in #3083
- Add some inline documentation by @acywatson in #3076
- Merge markdown E2E tests into one file by @thegreatercurve in #3086
- Add open/close callbacks to menu plugins by @tylerjbainbridge in #3087
- Add logic to catch separators by @thegreatercurve in #3084
- Tweet fallback to text on copy by @zurfyx in #3088
- Double-trigger hack for high-fidelity Node/Grid selection by @zurfyx in #3080
- Add collapsible container plugin by @fantactuka in #3082
- Make onClose optional on Flow Types. by @tylerjbainbridge in #3091
- Fix flow for $insertGeneratedNodes by @zurfyx in #3101
- chore: add e2e test for draggable-block-plugin by @LuciNyan in #3090
- copyToClipboard to return success by @zurfyx in #3105
- Fix DOM availability check by @fantactuka in #3102
- Lower key navigation command priority for Tables by @tylerjbainbridge in #3107
- Typeaheads: Add scroll command and increase priority by @tylerjbainbridge in #3106
- Typeaheads: Remove hard-coded "bottom" alignment (Breaking change) by @tylerjbainbridge in #3104
- fix(lexical-playground): draggable blockplugin uses unexposed apis by @LuciNyan in #3109
- Update createHeadlessEditor to match createEditor typedef by @fantactuka in #3111
- Fix npm install on M1 macs by @Timebutt in #3114
- Fix typeahead import by @fantactuka in #3117
- [0.6] More Typeahead Changes by @tylerjbainbridge in #3112
- Fix GridSelection comparison by @zurfyx in #3118
- Fix table paste by @zurfyx in #3129
- Add className prop to typeahead plugin by @acywatson in #3124
- Fix typeahead ref typedef by @fantactuka in #3131
- Fix Dynamic Table Options on Playground Component Picker by @tylerjbainbridge in #3132
- Support multiple classes by @acywatson in #3134
- Typeahead Menu Flow types by @acywatson in #3133
- Ignore mutations which do not have target node by @Piliuta in #3120
- Add Emoji Picker to Playground by @tylerjbainbridge in #3122
- feat: add icons to extension and change build by @im-adithya in #3140
- FF Node/Grid copy-paste support by @zurfyx in #3147
- remove repeated comments by @Zuckjet in #3154
- Ignore empty class names in addClassNamesToElement by @acywatson in #3159
- ref(selection): separate @lexical/selection/index into multiple files by @tranqhuy46 in #3145
- Check if DOM is accessible when calling
getSelection
by @yongdamsh in #3162 - Fix linting error in EmojiPicker by @thegreatercurve in #3165
- Fix flow types for root.select() by @fantactuka in #3168
- Remove development notice by @trueadm in #3171
- TreeView editor basics by @zurfyx in #3153
- Fix copy-paste CodeBlock with BR by @zurfyx in #3174
- Fix nested editor cut by @fantactuka in #3177
- Fix insertNodes when replacing content adjacent to an inline element by @birtles in #3137
- docs: Fixed broken link by @SimonProper in #3190
- Make the ComponentPicker independent of the Toolbar by @egonbolton in #3142
- Nightly and Dev releases by @acywatson in #3192
- Add flushSync option to update() by @fantactuka in #3119
- Built-in Error/SuspenseBoundaries for React DecoratorNodes by @zurfyx in https://...
v0.5.0
v0.5.0 (20 days after v0.4.0) comes with a meaty set of features, API refinements and bugfixes.
Draggable blocks
One of the most beloved features of Notion is the ability to seamlessly move blocks within the same document. @LuciNyan has ported this behavior to Lexical under the DraggableBlockPlugin name. You can check it out in our playground!
2022-09-14.23.41.11.mov
LexicalTablePlugin makes its way to Meta production
We started our tables (@lexical/react/LexicalTablePlugin) development at the start of the year, one of the most ambitious and complex plugins we have built for rich text. We have blocked a good amount of time during this past month to work with multiple internal teams to identify and squash most of these (10+) high-pri bugs that make the experience unideal and we believe they are now in a good shape to meet their first internal users.
Shadow Root
We have introduced a new advanced concept for Lexical ElementNodes: [Shadow Root](https://lexical.dev/docs/api/classes/lexical.ElementNode#isshadowroot)
. A Shadow Root is a Node that behaves like a root (we stole the name from Shadow DOM). This method enables you to have complex deep rich text hierarchies where children node shouldn't see beyond the parent. For example, the cell node content.
$insertNodes with NodeSelection and GridSelection support
We introduced a seamless way to handle node insertion. We bundled {rangeSelection/nodeSelection/gridSelection}.insertNode
into just one method: $insertNodes
. We also added insertNodes support for NodeSelection and GridSelection that was previously not supported.
Screen.Recording.2022-07-13.at.3.37.18.pm.mov
Various API changes
- PlainTextPlugin and RichTextPlugin will no longer take an
initialEditorState
. We found that this is unintuitive to handle nested editors and harder to control SSR-enabled pages. Instead, MLCComposer will take and apply theinitialEditorState
on editor creation - We killed INERT nodes. We found them cumbersome to use, not accessible and they didn't meet the requirements for our one and only use case (AutocompletePlugin) where private node data is required. Instead, the recommended approach for now is to use a DecoratorNode.
- We deprecated the Grid API. The future of the Grid API is uncertain but if there's something we know is that it isn't a good fit in the
lexical
package, it serves a very specific use case and it's redundant for plain text. - Killed isTopElement in favor for isInline on ElementNodes to reflect what they do better.
- And some more (see [0.5] prefixed in the list below).
Lots of bugfixes
- Formatting, composition, MD, etc. (see changelog below for a complete list).
Release automation: nightly releases
We listened to your (mostly Discord) feedback, you want to have the latest, more frequently, especially when some of you are heavily involved into the development and growth of the Lexical framework.
The reality is, we didn't choose to postpone releases for 2 weeks. It has mostly been a lack of automation and making sure we bundle breaking API changes to avoid developer churn.
We know that there's no one-size-fits-all when it comes to developers, and that's why we want to offer different ways to play with the library, what we have now, a slow-ish but less time-consuming (for you) release cycle but also offer nightly releases that would happen automatically once per day and would include the very latest of the development.
The work is still under development but we plan to start this soon, stay tuned!
Changelog
- Fix bug where transforms are inherited by nested editors by @trueadm in #2947
- Add an experimental Table component in React by @trueadm in #2929
- Fix Changelog by @acywatson in #2956
- Add table cell menu back by @tylerjbainbridge in #2958
- Fix Flow Type by @acywatson in #2957
- fix typo on read-mode / edit-mode page by @digitalgopnik in #2962
- Fix link breaking when formatting on by @pgmccullough in #2954
- feat: allow escaped markdown within TextFormatTransformer by @digitalgopnik in #2964
- Fix bugs with isEditable by @trueadm in #2967
- Add empty comment in front of 'export' in a bundled file by @fantactuka in #2970
- Automated releases by @acywatson in #2949
- Update collab errors, related cleanup by @fantactuka in #2971
- Add npm install step by @acywatson in #2972
- Improve docs around the React plugins page by @trueadm in #2976
- Set up Git config by @acywatson in #2977
- Clean up redundant newlines during pasting by @fantactuka in #2969
- Push config by @acywatson in #2979
- Fix versioning for ff merge by @acywatson in #2983
- Remove ff merge from release by @acywatson in #2984
- Fixed exportDOM for paragraph node by @zifahm in #2981
- docs: Fix URL of rich-text and plain-text by @kimulaco in #2985
- docs: loadContent clarification by @ly3xqhl8g9 in #2989
- Fix Insert Column Header Bug by @tylerjbainbridge in #2995
- Fix WWW import rewrite for React by @zurfyx in #2996
- Fix www exports by @fantactuka in #2994
- [Automated Releases] Add logging and dry run to release script by @acywatson in #2986
- [0.5] Add DEPRECATED prefix to Grid APIs by @trueadm in #2966
- Rm unused helpers from older markdown code by @fantactuka in #2998
- ElementNode -> isTopLevel() by @zurfyx in #3001
- Capture pendingDecorators after garbage collecting detached decorators by @adri1wald in #2999
- Fix bad TypeaheadMenuPlugin prod build by @zurfyx in #3003
- Fix $insertTableColumn flow type by @zurfyx in #3005
- Trim content for newlines only by @fantactuka in #3006
- Strengthen RangeSelection dirty toggle by @trueadm in #3007
- add install step to release workflow by @acywatson in #3008
- Revert md changes from #3001 by @fantactuka in #3015
- [0.5] Correct definition of isTopLevel; introduce DecoratorNode->isInline, ElementNode->isShadowRoot by @zurfyx in #3009
- [0.5] Remove INERT mode by @zurfyx in #2421
- Add FAQ re: clearing editor by @acywatson in #3019
- $insertNodes: Selection-agnostic node insertion with Grid/Node selection support by @zurfyx in #2638
- Fix code highlighter race condition on transform by @zurfyx in #3014
- [0.5] Revise usage of root node vs shadow by @zurfyx in #3022
- getStyleObjectFromCSS to compute when cache miss by @zurfyx in #3024
- [0.5] $wrapLeafNodesInElements -> $wrapNodes by @zurfyx in #3020
- [0.5] Treat undefined selection the same as null in $generateNodesFromHtml by @acywatson in #2948
- Add optional cursors container prop for a better positioning in scrollable layouts by @fantactuka in #3025
- [0.5] Make $canShowPlaceholder isEditable mandatory by @zurfyx in #3030
- [0.5] Remove initialEditorState from Plain/RichTextPlugin by @zurfyx in #3032
- [0.5] Remove deprecated initialEditorState from OnChangePlugin by @zurfyx in #3031
- feat(lexical-react): add initialEditorState for LexicalCollaborationPlugin by @strdr4605 in #3011
- Update collab docs by @fantactuka in #3033
- Add position property to menus & disable floating link toolbar for autolink nodes by @tylerjbainbridge in #3035
- Fix nested mark creation when wrapping forward selection by @knpwrs in #3027
- Fix composition text boundary for canInsertTextAfter by @zurfyx in https://github...
v0.4.0
Breaking Changes
Renamed isReadOnly API to isEditable
editor.isReadyOnly -> editor.isEditable()
editor.setReadyOnly -> editor.setEditable()
editor.registerReadOnlyListener -> editor.registerEditableListener()
editor config { readOnly: true } -> { editable: boolean }
Markdown Transformers Require Dependencies
The "dependencies" property is now required for custom markdown Element and TextMatch Transformers. It takes an array of LexicalNode subclasses and
asserts that they're available in the editor when transforms are registered.
Selection Updates when isEditable is false (previous ReadOnly mode)
Lexical will now track and update selection in response to DOM selectionchange events when editor.isEditable is false. This is necessary for enabling some behavior
such as commenting via marks, but may cause other indirect changes such as update listeners firing when they didn't previously.
- Ensure editor states are cloned if read only (#2936) Dominic Gannaway
- Prevent nested editor event duplication (#2935) Dominic Gannaway
- Avoid preventing default for copy events when there is no selection (#2930) Dominic Gannaway
- Non-Editable Mode Playground Improvements (#2927) Acy Watson
- fix: do not import LexicalTypeaheadMenuPlugin from src folder (#2928) Eric Charles
- Change read only mode API to editable mode (#2912) Dominic Gannaway
- Fix typo (#2925) Tjaart van der Walt
- Remove redundant readonly checks. (#2921) Acy Watson
- allow selection in readonly mode (#2920) Acy Watson
- Remove $getEditor (#2919) Dominic Gannaway
- Use window of current default view (#2918) Dominic Gannaway
- Fix bad CSS on content editable container (#2917) Dominic Gannaway
- Ensure we only mutate a non-readonly editor state (#2915) Dominic Gannaway
- Fix failing build (#2916) John Flockton
- Read only validation server (#2899) Dominic Gannaway
- Add serialized node type exports (#2914) Matthew Lin
- Provide markdown plugin node dependencies (#2910) Dominic Gannaway
- Fixed typo (#2908) Heesung Jang
- Add Flow Types for AutoEmbedPlugin and TypeaheadPlugin (#2904) Tyler Bainbridge
- Fix link pasting (#2903) Maksim Horbachevsky
- Attempt transform of NodeSelection to RangeSelection on mouseDown (#2901) Gerard Rovira
- chore: add e2e tests for maxlength plugin (#2478) Adithya Vardhan
- Added sanitizer to FloatingLinkEditor (#2900) Heesung Jang
- Rename website folder (#2902) John Flockton
- remove unnecessary text append (#2898) John Flockton
- Fix Lexical package main entry points (#2897) Dominic Gannaway
- Fix overriding keyboard controls on internal decorator (#2895) Dominic Gannaway
- Allow code highlighting to run without active selection (#2891) Maksim Horbachevsky
- Fix editor content clipping bug (#2890) Dominic Gannaway
- LexicalTypeaheadMenuPlugin - Increase priority for keyboard commands (#2885) Theo Tillberg
- Remove redundant css property (#2888) Adam Kona
- Playground: Fix collab connect/disconnect toggling (#2887) Maksim Horbachevsky
- Improve heuristics around node selection and keyboard navigation (#2884) Dominic Gannaway
- Don't merge history entries from different editors (#2873) Acy Watson
- Exported DEFAULT_TRANSFORMERS array in react LexicalMarkdownShortcutPlugin (#2878) Kevin Ansfield
- Replaced
addTransform
withregisterNodeTransform
in transforms doc (#2882) Kevin Ansfield - add example for additional nodes in plugin (#2879) Stefan Huber
- add the corresponding import to react doc (#2881) Stefan Huber
- Fix playground visual styling (#2876) Dominic Gannaway
- chore(deps): bump minimist in /packages/lexical-website-new (#2744) dependabot[bot]
- chore(deps): bump terser from 5.14.1 to 5.14.2 (#2869) dependabot[bot]
- Change linebreak node handling in insertNodes (#2857) Acy Watson
- Add some React Docs (#2858) Acy Watson
- fix delete backward bug (#2870) Dominic Gannaway
- add watch mode for auto-gen doc comments in dev (#2859) Acy Watson
- Update package-lock.json (#2866) ANDRI H.U
- Update package-lock.json (#2865) ANDRI H.U
- Fix issue with emoji (#2853) John Flockton
- Adjust Typeahead Styles (#2846) Tyler Bainbridge
- revert inadvertent change (#2849) Acy Watson
- Fix small type issue (#2847) John Flockton
- Wider (#2848) John Flockton
- Add autogenerated TypeDoc docs (#2837) Acy Watson
- fix: set cursor grab when image can be dragged (#2831) 子瞻 Luci
- fix(lexical-playground): two issues with scrolling-related scenarios (#2724) 子瞻 Luci
- fix: add fallback for code formatting (#2833) Adithya Vardhan
- rename local variables (#2840) Acy Watson
- fix broken links in docs (#2839) Reid Barber
- Fixing grammar on RootNode documentation (#2838) Aaron Freeland
- fix: transfer format and indent info on wrap (#2832) Adithya Vardhan
- fixed getStyleObjectFromRawCSS to handle css values with a colon (#2814) Hayden Warmington
- Add Panel to Display Props for DevTools Nodes (#2803) Will
New Contributors (THANK YOU!)
- @dosatross made their first contribution in #2814
- @afreeland made their first contribution in #2838
- @reidbarber made their first contribution in #2839
- @imhunterand made their first contribution in #2865
- @dependabot made their first contribution in #2869
- @signalwerk made their first contribution in #2881
- @kevinansfield made their first contribution in #2882
- @adamkona made their first contribution in #2888
- @ttillberg made their first contribution in #2885
- @heesungjang made their first contribution in #2900
- @matthew-plusprogramming made their first contribution in #2914
- @tjaartvanderWalt made their first contribution in #2925
Full Changelog: v0.3.9...v0.4.0
v0.3.9
0.3.9 (August 11, 2022)
Most notably:
- Added playground Figma embed and AutoEmbed plugin
- LinkNode target and rel support
- Many bugfixes
Commits:
- No nullish LinkNode props (#2818) Gerard Rovira
- Fix collapsed selection on links (#2817) Gerard Rovira
- prevent button from submitting forms (#2811) Gerard Delmàs
- Fixed flow return type for TableOfContents plugin (#2802) Karam Qaoud
- Update editor-state.md (#2808) William Cary
- Fix nested editors in collab (#2781) Dominic Gannaway
- chore: add some declare global (#2804) 子瞻 Luci
- Fix selection adjustment after text match transformer (#2795) Maksim Horbachevsky
- Inject DevTools Script in Browser Extension (#2778) Will
- Fix inserting nodes next to top level decorators (#2796) Maksim Horbachevsky
- chore(auto-link-plugin): fix invariant message for node registration check (#2790) Eric Charles
- Fixing comments list scrolling issue (#2789) Ebad
- Fix internal build error (#2787) John Flockton
- fix: dropdown icon css (#2786) Adithya Vardhan
- chore: Move useCollaborationContext to dedicated file (#2777) Thomas Sauques
- chore(lexical-playground): typos, improved build (#2780) Yaroslav Kiliba
- make importJSON static in test node (#2784) Acy Watson
- fix(lexical): ts expect error (#2776) 子瞻 Luci
- Fix documentation typos (#2774) Lyle Denman
- fix: Single anchor element per LexicalTypeaheadMenuPlugin instance (#2768) Thomas Sauques
- Node/GridSelection docs (#2773) Gerard Rovira
- Add Figma Embed to Playground (#2705) Tyler Bainbridge
- Selection#formatText to retain selection and handle all text nodes (#2770) Maksim Horbachevsky
- Fixed scrolling bar view (#2772) Karam Qaoud
- Add LexicalAutoEmbedPlugin and (Playground)AutoEmbedPlugin. (#2704) Tyler Bainbridge
- Bug: Undo command after creating a Quote removes text after Quote element (#2750) (#2767) Alexandru Pavaloi
- Handle insertTranspose for beforeinput event (#2764) Maksim Horbachevsky
- Fix selection format for empty paragraphs (#2759) Maksim Horbachevsky
- Remove unused keys from evens and utils (#2763) John Flockton
- chore: fix aria-label typo (#2762) 子瞻 Luci
- feat: Replace select with dropdown for code (#2761) 子瞻 Luci
- Fix typo in community page (#2760) Joshua Chen
- Add initial editor state for collab example (#2749) Maksim Horbachevsky
- Table of contents style improvements (#2743) Karam Qaoud
- Highlight DOM Nodes onHover of Lexical DevTools Node (#2728) Will
- Tighten check on top level decorator nodes (#2746) John Flockton
- Remove unused markdown functions (#2747) John Flockton
- feat: Replace select with dropdown for font size and font family (#2441) Adithya Vardhan
- fix: Verify if there are text nodes before continue (#2616) Nahuel Veron
- Convert pasted Google Docs Title text into a Heading (#2729) Acy Watson
- Remove isCollapsed from selection onClick (#2727) John Flockton
- fix: cross button css in poll node (#2742) Adithya Vardhan
- fix: getTopLevelElement for decoratorNode (#2741) Adithya Vardhan
- fix:
timeoutId
type (#2735) Shanmughapriyan S - fix: some typo (#2737) 子瞻 Luci
- docs: readme improvements (#2734) GJunior
- Bug: typo in Documentation. It should be ReactNode instead of React (#2731) (#2732) Alexandru Pavaloi
- Added table of contents documentation (#2720) Karam Qaoud
- Fix: Minor Typo on Lexical Playground ActionsPlugin (#2717) Yamil García Hernández
- Excalidraw fixes (#2711) John Flockton
- Resolve selection for orphan selected children (#2677) Gerard Rovira
- feat(lexical-playground): prettier code (#2688) 子瞻 Luci
- Revert "Add E2E test for TableOfContentsPlugin (#2675)" (#2708) Gerard Rovira
- Add E2E test for TableOfContentsPlugin (#2675) Karam Qaoud
- OnChangePlugin ignoreInitialChange -> ignoreHistoryMergeTagChange (#2706) Gerard Rovira
- feat: Link node with target and rel (#2687) Andriy Chemerynskiy
- fix: check if options are empty (#2701) Adithya Vardhan
- Remove coverage reports (#2699) John Flockton
- Make includeHeaders a boolean (#2697) alinamusuroi
- fix(playground): fix rendering Exclidraw (#2694) Bryan
- Collapse and Expand DevTools Tree Nodes (#2679) Will
- fix(lexical-playground): LexicalTypeaheadMenuPlugin import (#2689) Elvin Dzhavadov
- Fix VALID_TWITTER_URL to allow underscores. (#2690) hiraoka
- fix: path to icons (#2683) Adithya Vardhan
- Fixed typo (#2678) SalvadorLekan
- Separate
@lexical/code
into more atomic modules (#2673) John Flockton - fix(lexical-list): remove list breaks if selection in empty (#2672) 子瞻 Luci
- Conditionally utilize
startTransition
if it's present (#2676) Jack Hanford - chore(lexical-playground): make directory clear (#2674) 子瞻 Luci
v0.3.8
0.3.8 (July 20, 2022)
Lots of bug fixes.
Introduces TypeaheadPlugin and associated primitives, which consolidate the implementation of all such functionality (mentions and component picker) and create a base to build similar typeahead functionality from.
Introduces TableOfContents plugin for easier navigation of long-form documents. Available in the playground in the settings menu (bottom-left corner).
Introduces a "clipboard viewer" functionality in the local dev environment. When active, it shows the clipboard content the last time the paste event was fired with the editor focused.
- Remove default styling imports on HTML paste (#2663) Acy Watson
- fix(lexical-playground): code lang display (#2658) 子瞻 Luci
- chore(lexical-playground): remove files that should not be submitted (#2662) 子瞻 Luci
- Selection.extract fix (#2620) Acy Watson
- Specify the return type of getNearestNodeOfType. (#2651) hiraoka
- Autolink default protocol (#2654) Gerard Rovira
- fix(doc): RichTextPlugin placeholder (#2655) unvalley
- fix(lexical): calculate range selection formatting (#2643) 子瞻 Luci
- Add TableOfContentsPlugin (#2634) Karam Qaoud
- Port ASCII State Tree to Browser Extension (#2625) Will
- Fix markdown text matchers during md import (#2644) Maksim Horbachevsky
- fix(lexical): Japanese IME issue (#2623) 子瞻 Luci
- Remove comment box from footer (#2639) John Flockton
- Delete doc from ydocMap on unmount. Fixes init on re-mount (#2637) Maksim Horbachevsky
- feat: new way to delete comments and threads (#2570) Adithya Vardhan
- Lexical Typeaheads (#2534) Tyler Bainbridge
- Add $insertBlockNode (#2633) Gerard Rovira
- Add seperate flag for if script had loaded (#2628) John Flockton
- Fix Chrome types in Lexical DevTools (#2627) John Flockton
- Capture the expected payload type in commands (#2537) Patrik Åkerstrand
- fix unit test warning (#2618) Acy Watson
- fix(lexical-playground): fix toolbar-item button style bug in safari (#2621) 子瞻 Luci
- add docs (#2611) Acy Watson
- Add default value for undefined case in markdown transformers (#2453) Noah Cook
- Add PasteLog Plugin (#2609) Acy Watson
- Fix pasting inline code blocks (#2607) Maksim Horbachevsky
v0.3.7
0.3.7 (July 6, 2022)
Lots of bug fixes and polish. Notably, the full text of minifed Lexical error codes can now be accessed via the Lexical website.
- Update Browser Extension's Vite Config (#2540) Will
- fix: import color and vertical align info from html string (#2571) Adithya Vardhan
- Update PollNode.css (#2602) VelociRaptor
- Update package names (#2599) Acy Watson
- Ensure to call existing listeners only (not newly added ones) (#2573) Maksim Horbachevsky
- Added dragend to list of rootElementEvents (#2598) stuartrobinson3007
- Reverse MarkdownExport loop order to take TextMatchTransformers into account first (#2582) Lukas
- Fetch Lexical State Tree in DevTools App (#2510) Will
- chore: use keyboard shortcuts (#2580) Adithya Vardhan
- fix prettier Gerard Rovira
- Replace background images with pseudo classes to display checkboxes in playground (#2567) VelociRaptor
- Customize default focus position (#2591) Gerard Rovira
- Add missing dependencies (#2585) John Flockton
- Website error codes -
lexical.dev/error/<code>
(#2574) Gerard Rovira - Use Vite server for E2E tests in CI (Fix windows CI failures) (#2584) Acy Watson
- feat(lexical-playground): copy button for @lexical/code (#2396) 子瞻 Luci
- fix: commenting issue after ts migration (#2558) Adithya Vardhan
- npm run changelog (#2561) Gerard Rovira
- fix: typo edtior to editor (#2560) Florent DUVEAU
v0.3.6
0.3.6 (June 29, 2022)
lexical & @lexical/ packages:
- fix(lexical): Text with underline format is stripped out on paste (#2555) 子瞻 Luci
- Trigger readonly listener only when value has changed (#2550) Maksim Horbachevsky
- fix(lexical): deselecting a decorator node by clicking (#2554) 子瞻 Luci
- Remove wordwrap for tree view (#2551) John Flockton
- add docs for headless package (#2539) Acy Watson
- Normalize list children (#2509) Acy Watson
- Add ability to set format and detail by string type (#2547) John Flockton
- Pasting multi-line plain text into rich-text mode produces separate paragraphs (#2507) Maksim Horbachevsky
- Revert "Revert "fix: insert text after delete next to inline node (#2530)" (#2544)" (#2549) Gerard Rovira
- Revert "fix: insert text after delete next to inline node (#2530)" (#2544) Gerard Rovira
- fix: insert text after delete next to inline node (#2530) Patrik Åkerstrand
- Fix IME bug in
lexical-history
(#2501) John Flockton - Export Klass from Lexical root (#2533) John Flockton
- Hide placeholder when readonly (#2511) Gerard Rovira
- remove utility types from all packages (#2529) John Flockton
- Improve markdown newline export/import (#2519) Maksim Horbachevsky
- Revisit formatText node selection (#2524) Gerard Rovira
- Fix $generateHtmlFromNodes to output whole editor contents if selection is null (#2504) yicrotkd
- Remove unnecessary comments (#2505) John Flockton
- fix(lexical): "selection.format" is not set correctly (#2502) 子瞻 Luci
- Fixed getStyleObjectFromRawCSS function to work with unformatted css (#2515) Karam Qaoud
- Fix image copy+paste (#2517) Dominic Gannaway
- Migrate to TS strict mode 6/n (#2496) John Flockton
- fix(lexical): caret at wrong place when paste (#2465) 子瞻 Luci
- Fix infinite recursion in insertText in RangeSelection (#2490) Patrik Åkerstrand
- Update error message and docs (#2492) John Flockton
- Migrate to TS strict mode 5/n (#2488) John Flockton
- Fix composition bugs affecting intern (#2487) John Flockton
- Fix FF issue with composition (#2486) Dominic Gannaway
- Migrate to TS strict mode 3/n (#2482) John Flockton
- Fix Flow rewrite imports script (#2477) John Flockton
- Migrate to TS strict mode 2/n (#2469) John Flockton
- Inserting inline elements (#2474) Maksim Horbachevsky
- Fix component/plugin names in get started section (#2472) Aleš Menzel
- Revert "add e2e tests for MaxLength plugin (#2466)" (#2467) Gerard Rovira
- add e2e tests for MaxLength plugin (#2466) Adithya Vardhan
- Fix can format backwards when at first text node boundary (#2445) Gerard Rovira
- Fix button--outline hover color dark mode (#2462) M. Zakiyuddin Munziri
- Migrate to TS strict mode 1/n (#2458) John Flockton
- renamed character styles popup plugin (#2456) Strek
Playground:
- Flower size (#2527) Gerard Rovira
- fix(lexical-playground): Resizing is not consistent on mobile (#2518) 子瞻 Luci
- fix(lexical-playground): Floating toolbar displayed on composition (#2506) 子瞻 Luci
- chore(lexical-playground): remove redundant code (#2497) 子瞻 Luci
Docs:
Infra: