[lexical-list] Bug Fix: fix selection issue from list transform on linebreak#8049
Merged
etrepum merged 4 commits intofacebook:mainfrom Dec 26, 2025
Merged
Conversation
|
The latest updates on your projects. Learn more about Vercel for GitHub.
|
etrepum
reviewed
Dec 23, 2025
Contributor
Author
|
@etrepum added a test and replaced |
etrepum
approved these changes
Dec 26, 2025
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Description
Describe the changes in this pull request
Current behavior:
When a paragraph ends with a
LineBreakNodeand the cursor is positioned at the end,Lexical creates an element-anchored selection with an offset pointing after the last child.
When this paragraph is converted to a list, Lexical's selection reconciliation automatically
maps the selection from the paragraph to the newly created ListNode, preserving the offset.
However, the ListNode only has 1 child (the ListItemNode), so any offset greater than 1
becomes invalid on the ListNode.
This causes:
There is no child at offset X"
New behavior:
After a paragraph is replaced with a list structure, the fix checks if the selection
was automatically mapped to the ListNode. If so, it redirects the selection to anchor
to the ListItemNode instead, while preserving the original offset.
This works because the ListItemNode contains the same children as the original paragraph,
making the offset valid on the ListItemNode even though it would be invalid on the ListNode.
Closes #8046
Test plan
Before
Screen.Recording.2025-12-23.at.12.07.00.PM.mov
Insert relevant screenshots/recordings/automated-tests
After
Screen.Recording.2025-12-23.at.12.07.37.PM.mov
Insert relevant screenshots/recordings/automated-tests