FE-1509: Add the notebook cell list as an experimental mode - #9407
Conversation
|
The latest updates on your projects. Learn more about Vercel for GitHub.
1 Skipped Deployment
|
0aaaa79 to
ac2faa0
Compare
ac2faa0 to
f96ccab
Compare
c085896 to
bb8af6d
Compare
bb8af6d to
5116cb8
Compare
5116cb8 to
011d874
Compare
PR SummaryMedium Risk Overview Editor integration: Notebook UI: Toolbar fuzzy search, kind filters, and Document vs topological ordering; gutter connection lines for upstream/downstream deps on selection; worksheet focus flow (roving tab stop, expand with arrows, in-cell Monaco and fields committing through existing mutations). New modules: Reviewed by Cursor Bugbot for commit 4f3dde5. Bugbot is set up for automated code reviews on this repo. Configure here. |
A new global mode behind an enableNotebookView user setting, toggled in the viewport settings dialog and placed directly after Edit. The net renders as a list of one-line expandable cells with keyboard navigation on the worksheet focus flow (one roving tab stop, no edge wrap), fuzzy name search, kind filters, document/topological ordering, per-row dependent counts, and gutter connector lines from the selected cell to its dependencies and dependents. Everything an expanded cell shows edits in place through the same guarded mutations as the properties panel: names, fields, arc weights, type assignments, and code. Body parts join the focus flow — Enter engages a part's widgets or code editor, Tab cycles them, Escape reverts drafts and steps back out. Code edits only commit while the editor has focus, so programmatic model resets can never write back. The effective global mode is derived in one shared hook used by both the editor view and useReadOnlyReason, so the rendered view and the mutation rules never disagree when the flag is off.
011d874 to
4f3dde5
Compare
There was a problem hiding this comment.
Cursor Bugbot has reviewed your changes and found 3 potential issues.
❌ Bugbot Autofix is OFF. To automatically fix reported issues with cloud agents, enable autofix in the Cursor dashboard.
Reviewed by Cursor Bugbot for commit 4f3dde5. Configure here.
| ); | ||
| if (firstMatch) { | ||
| selectCell(firstMatch, { focus: true }); | ||
| } |
There was a problem hiding this comment.
Search Enter ignores current selection
Medium Severity
Enter in the search box always focuses the first name match, even after arrow keys have already moved the selection to another match. That discards the current selection instead of moving focus to the selected cell.
Reviewed by Cursor Bugbot for commit 4f3dde5. Configure here.
| ), | ||
| ); | ||
| }, | ||
| }); |
There was a problem hiding this comment.
Filter drops the list tab stop
Medium Severity
useFocusStops keeps the last focused stop even after kind filters, search, or collapse remove that stop from rowStops. Remaining rows then all get tabIndex={-1}, so the list loses its roving tab stop and vertical arrows no-op until a row is clicked.
Additional Locations (1)
Reviewed by Cursor Bugbot for commit 4f3dde5. Configure here.
| if (target) { | ||
| selectCell(target, { focus: true }); | ||
| } | ||
| }, |
There was a problem hiding this comment.
Arc jump ignores kind filters
Low Severity
navigateToCell resolves targets from the full cell list, not visibleCells. Jumping to a place whose kind is filtered out updates selection and connection state, but the row is not mounted, so focus and gutter lines fail and the highlight disappears.
Reviewed by Cursor Bugbot for commit 4f3dde5. Configure here.


🌟 What is the purpose of this PR?
The Notebook view itself, stacked on #9406: the Notebook itself, as an experimental read-only mode that renders the net as a list of one-line expandable cells. Off by default behind a new Notebook view toggle in the viewport settings dialog.
🔗 Related links
🔍 What does this change?
enableNotebookViewis on. The view is read-only, including for the AI assistant (notebook-modejoinsReadOnlyReason).direct → transitivedependent counts, aninitialbadge on places the net cannot seed itself,. Expanding shows the full definition, with code in read-only Monaco editors that reuse the LSP document URIs./fuzzy name search with per-character match highlighting, kind filter chips, and a Document/Topological order toggle where seed places are hoisted to the front of the flow.useFocusStops): every navigable row is a full-width stop, so vertical arrows walk exactly the rows a search leaves navigable, the whole list is one roving tab stop instead of a tab stop per row, and selection follows row focus. Rows own the horizontal arrows for expand/collapse; the search box's arrows still step the selection without leaving the input. Per the worksheet contract, edge moves stay put instead of wrapping.useEffectiveGlobalMode) used by both the editor view anduseReadOnlyReason, so turning the flag off while the stored mode is "notebook" falls back to Edit consistently.Pre-Merge Checklist 🚀
🚢 Has this modified a publishable library?
This PR:
📜 Does this require a change to the docs?
The changes in this PR:
🕸️ Does this require a change to the Turbo Graph?
The changes in this PR:
role="button"with a nested caret button rather than listbox/option semantics — FE-1539.🐾 Next steps
🛡 What tests cover this?
The pure logic is covered by the layer below's suites; this layer's own behaviour (keyboard navigation, search, filters, gutter measurement) is exercised manually per the steps below.
❓ How to test this?
/plus a fuzzy query, the kind filter chips, and the Document/Topological toggle.📹 Demo
Screenshot pending — to be added before review.