You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Added relevant indent/outdent buttons in the toolbar, inside the example app.
The Android and Web implementations are stubbed for now, marked with // TODO comments.
This PR does not target docs, mobile e2e tests or the HTML normalizer shared across mobile platforms.
Test Plan
Play around with both new ref methods, experiment with different selection ranges, mixing list styles. You can also check the generated HTML and its parsing during a round-trip or pushing the text into an EnrichedText component. Try deleting portions of the nested list - the structure should stay valid.
Screenshots / Videos
Short demo
Screen.Recording.2026-10-12.at.14.20.02.mov
Compatibility
OS
Implemented
iOS
✅
Android
❌
Web
❌
Checklist
E2E tests are passing
Required E2E tests have been added (if applicable)
detect: only succeeds when the entire selected range has one leaf list style. A selection containing, for example, both unordered and ordered items therefore returns nullptr, making both new nesting commands silently do nothing. Select a ListStyleBase when any list style is present; the modifier already reads each paragraph's own marker format.
Remove list entries only from paragraphs with matching leaf styles
ios/styles/ListStyleBase.mm:139
remove: strips the deepest list entry from every paragraph in actualRange, even when this style is not that paragraph's leaf style. Conflict handling invokes this method over the whole selection for each list type found anywhere, so a mixed ordered/checkbox selection can remove unrelated list levels multiple times. Check styleCondition: for each subRange before removing its leaf entry.
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
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.
Summary
Implementation of the nested list feature. Updated API looks as follows:
ref.indentList()- moves the list element deeper into the nestingref.outdentList()- flattens the list element inside the nestingonChangeStatepayload oforderedList,unorderedListandcheckboxListwith a newdepthfield:Added relevant indent/outdent buttons in the toolbar, inside the example app.
The Android and Web implementations are stubbed for now, marked with
// TODOcomments.This PR does not target docs, mobile e2e tests or the HTML normalizer shared across mobile platforms.
Test Plan
Play around with both new
refmethods, experiment with different selection ranges, mixing list styles. You can also check the generated HTML and its parsing during a round-trip or pushing the text into anEnrichedTextcomponent. Try deleting portions of the nested list - the structure should stay valid.Screenshots / Videos
Short demo
Screen.Recording.2026-10-12.at.14.20.02.mov
Compatibility
Checklist