Code reference detail
graph-cy-interactions.ts
packages/extension/webviews/shared/graph/graph-cy-interactions.ts
| Idea | Status | Tags | Summary | Katz |
|---|---|---|---|---|
| graph_cy_controller | the cytoscape object should use event driven patterns; lifecycle is documented here. GraphCyController in ["../../../packages/extension/webviews/shared/graph/graph-cy-controller.ts"] owns the cytoscape instance with inline lifecycle state ( idle, syncing, layouting, physics ). syncGeneration cancels stale layout callbacks when the slice changes mid-layout. Selection and drag-pinned positions are tracked in userPositionedNodes on the controller. syncSlice diffs elements ( add / remove / update the delta ) via ["../../../packages/extension/webviews/shared/graph/graph-cy-elements.ts"] so surviving nodes keep positions; requestLayout restarts the active algorithm and clears user pins. Pointer / selection wiring lives in ["../../../packages/extension/webviews/shared/graph/graph-cy-interactions.ts"]; compound hover / selection / title-hit in ["../../../packages/extension/webviews/shared/graph/graph-cy-highlight.ts"]. Compound grab / drag / free pins and unpins all childless descendants so live physics does not snap members back while the container moves; released child positions are stored in userPositionedNodes. File compounds ( `isFileCompound` ): title-band tap or double-tap opens the hosting `.rq` via onOpen ( compoundId ); GraphView resolves `compound:rq-file:…` to a file URI. Live physics is the custom simulation in ["../../../packages/extension/webviews/shared/graph/graph-physics.ts"]; one instance persists with the cytoscape instance and is paused / resumed, never rebuilt. Grabbing a node pins it in the running sim ( its live position keeps exerting forces ); release unpins with no restart and no snap. ResizeObserver debounces cy. resize ( ) and re-triggers a pending sync when the container gains size. Mount only while the graph container is visible and non-zero — do not keep cytoscape alive under display: none; WebGL init on a zero-size hidden container can break the host webview before messaging is attached. Viewport fitting per [reframe_view]; tracks lastSyncedNodeSetKey vs fittedNodeSetKey to drive [auto_reframe]. Label visibility per [graph_label_modes] / [graph_label_auto]: setLabelMode updates text-opacity from zoom ( and hover / drag force-opaque in auto ). | 0.103 | ||
| graph_design | The graph should show nodes for ideas and files and edges for references. Used by Ideas Summary, activity-bar minigraph, and export previews. | 0.040 | ||
| graph_library | Reusable cytoscape-based graph visualization library for force-directed and compound graphs. Provides a mount → sync slice → layout → optional live physics → destroy lifecycle with a simplified API. Implementation lives in ["../../../packages/extension/webviews/shared/graph/graph-cytoscape.ts"], ["../../../packages/extension/webviews/shared/graph/graph-cy-controller.ts"], ["../../../packages/extension/webviews/shared/graph/graph-cy-elements.ts"], ["../../../packages/extension/webviews/shared/graph/graph-cy-interactions.ts"], ["../../../packages/extension/webviews/shared/graph/graph-cy-highlight.ts"], ["../../../packages/extension/webviews/shared/graph/graph-physics.ts"], ["../../../packages/extension/webviews/shared/graph/graph-groups.ts"], and ["../../../packages/extension/webviews/shared/graph/graph-theme.ts"]. Ideas Summary re-exports the shared modules from ["../../../packages/extension/webviews/ideas-summary/lib/"] for backward-compatible import paths. Consumers pass a node / edge slice and sync options; the library owns the cytoscape instance, diffing, layout runs, and optional continuous physics. | 0.064 | ||
| file_treatment_toggle | done | Toolbar dropdown selects how hosting `.rq` files ( implicit ideasets ) appear in the graph — distinct from explicit AST `ideaset` declarations and from external `file:` reference nodes. Options ( with info tooltips / help text ): - invisible / Hidden — no file containers or file leaf nodes; ideas float free - compound — one compound parent per hosting file ( basename label ); nests under folder / tag compounds when Controls → Compound is also on. Containers are draggable ( members move with the box; live physics pins descendants while dragging ). Clicking the title opens the file; double-click also opens. - linked / Linked nodes ( default ) — synthetic ideaset-styled leaf per hosting file ( `rq-file:…` ) with `ideaset_member` edges to ideas in that file; click / dbl-click opens the hosting file like other nodes. Client reshape via `applyFileTreatment` in ["../../../../packages/extension/webviews/shared/graph/file-treatment.ts"]; no re-query on mode flip. Ideas Summary: `FileTreatmentSelect` on GraphControls; persisted as `fileTreatment` in [graph_ui_persistence]. HTML export: same three options via a select; compound boxes are hittable / draggable with clickable titles; linked nodes carry `pageUrl` / `hostFilePageUrl` for navigation. Related: [graphical_graph], [ui_controls], [webview_export_graph_parity], ["../../../ontology.rq".file], ["../../../ontology.rq".ideaset], [html_export_graph_page]. | 0.170 | |
| graphical_graph | There should be a tab that renders requirement ideas and references as a force-directed web. The graph tab lives in the Ideas Summary webview per [ideas_summary]. UI is implemented in ["../../../../packages/extension/webviews/ideas-summary/components/GraphView.svelte"]. Graph slices are built in ["../../../../packages/analytical/src/index-store/webview-graph-queries.ts"] and served by ["../../../../packages/extension/src/ideas_summary_module/ideas-summary-panel.ts"]. By default the view focuses on the active editor file's first idea; without a focus it shows a capped slice of matching ideas rather than dumping the full graph. Users can filter by search text, path, multi-select @ status, and multi-select tags per [graph_status_tag_filters]. An " Indirect references " toggle expands neighbourhood depth from 1 to 2 hops. A " Wildcard refs " toggle includes or hides edges expanded from path + idea wildcards per [wildcard_refs_toggle] ["@/reqlan rq/language/imports.rq".wildcard_references] A " Files " dropdown selects hosting- `.rq` treatment per [file_treatment_toggle] ( hidden / compound containers / linked ideaset nodes ), with per-option info tooltips. Interactive graph controls that also exist on HTML export must stay aligned per [webview_export_graph_parity]. Clicking a node opens its source; double-click or " Focus graph " recenters the slice on that idea. Linked file ideaset nodes and file-compound titles open the hosting `.rq` file per [file_treatment_toggle]. External file references render as dashed edges to file nodes; wildcard-fan-out edges render dotted. A toggleable key explains node colours and edge styles and toggles node-type visibility per [key_panel_toggle]; a toggleable [control_panel] exposes layout, physics, and node-budget settings. Key and Controls state persist per workspace via [graph_ui_persistence]. Pan, zoom, and drag repositioning per [view_controls]. [manual_reframe] via " Fit to view " in [ui_controls]; [auto_reframe] when the loaded node set changes; [reframe_animation] for smooth transitions after the first paint. Node text labels per [graph_labels], [graph_label_modes], and [graph_label_auto]. Layout, compound grouping, and live physics behaviour per [layout_physics], [layout_options], [physics_options], and [compound_graph]. Cytoscape lifecycle and threading constraints per [graph_cy_controller] and [webview_threading]. | 0.207 |
Reference labels
"../../../../packages/extension/webviews/shared/graph/graph-cy-interactions.ts", "../../../packages/extension/webviews/shared/graph/graph-cy-interactions.ts", ../../../../packages/extension/webviews/shared/graph/graph-cy-interactions.ts, ../../../packages/extension/webviews/shared/graph/graph-cy-interactions.ts