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
PR SummaryMedium Risk Overview The notebook supports in-place editing through the same mutation hooks as the properties panel (names, arcs, types, Monaco code blocks with focus-guarded commits), plus fuzzy search, kind filters, document vs topological ordering, dependency gutter lines, worksheet-style keyboard focus, and Cmd/Ctrl+Z undo/redo because the canvas BottomBar is not mounted. Selection stays tied to
Reviewed by Cursor Bugbot for commit 219faf0. Bugbot is set up for automated code reviews on this repo. Configure here. |
011d874 to
4f3dde5
Compare
4f3dde5 to
f3879ca
Compare
Pure, unit-tested projections of an SDCPN for the notebook view built on top of them: the cell list and its dependency-edge index covering all five entity kinds, topological cell ordering with declarations inlined before their first user, and a cut-down Sugiyama layered layout with a focus mode that re-layers by hop distance.
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.
f3879ca to
219faf0
Compare
There was a problem hiding this comment.
Cursor Bugbot has reviewed your changes and found 1 potential issue.
❌ Bugbot Autofix is OFF. To automatically fix reported issues with cloud agents, enable autofix in the Cursor dashboard.
Reviewed by Cursor Bugbot for commit 219faf0. 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.