@zenfg/inspector 0.1.0-beta.3 → 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (172) hide show
  1. package/GUIDE.md +182 -0
  2. package/README.md +61 -89
  3. package/THEMING.md +124 -0
  4. package/dist/FrameGraphInspector.d.ts +23 -4
  5. package/dist/FrameGraphInspector.d.ts.map +1 -1
  6. package/dist/FrameGraphInspector.js +137 -29
  7. package/dist/FrameGraphInspector.js.map +1 -1
  8. package/dist/capture.d.ts +5 -0
  9. package/dist/capture.d.ts.map +1 -0
  10. package/dist/capture.js +2 -0
  11. package/dist/capture.js.map +1 -0
  12. package/dist/debugCaptureModel.d.ts +19 -0
  13. package/dist/debugCaptureModel.d.ts.map +1 -1
  14. package/dist/debugCaptureModel.js +36 -2
  15. package/dist/debugCaptureModel.js.map +1 -1
  16. package/dist/index.d.ts +2 -0
  17. package/dist/index.d.ts.map +1 -1
  18. package/dist/index.js.map +1 -1
  19. package/dist/panelAliasAnalysis.d.ts +1 -0
  20. package/dist/panelAliasAnalysis.d.ts.map +1 -1
  21. package/dist/panelAliasAnalysis.js +23 -54
  22. package/dist/panelAliasAnalysis.js.map +1 -1
  23. package/dist/panelCytoscapeGraphRenderer.d.ts +15 -2
  24. package/dist/panelCytoscapeGraphRenderer.d.ts.map +1 -1
  25. package/dist/panelCytoscapeGraphRenderer.js +145 -23
  26. package/dist/panelCytoscapeGraphRenderer.js.map +1 -1
  27. package/dist/panelDetailLayout.d.ts +27 -0
  28. package/dist/panelDetailLayout.d.ts.map +1 -0
  29. package/dist/panelDetailLayout.js +174 -0
  30. package/dist/panelDetailLayout.js.map +1 -0
  31. package/dist/panelDetailStyles.d.ts +2 -0
  32. package/dist/panelDetailStyles.d.ts.map +1 -0
  33. package/dist/panelDetailStyles.js +57 -0
  34. package/dist/panelDetailStyles.js.map +1 -0
  35. package/dist/panelDiagnosticsView.d.ts +10 -1
  36. package/dist/panelDiagnosticsView.d.ts.map +1 -1
  37. package/dist/panelDiagnosticsView.js +166 -57
  38. package/dist/panelDiagnosticsView.js.map +1 -1
  39. package/dist/panelDomHelpers.d.ts.map +1 -1
  40. package/dist/panelDomHelpers.js +6 -5
  41. package/dist/panelDomHelpers.js.map +1 -1
  42. package/dist/panelGraphLayout.d.ts +3 -2
  43. package/dist/panelGraphLayout.d.ts.map +1 -1
  44. package/dist/panelGraphLayout.js +6 -5
  45. package/dist/panelGraphLayout.js.map +1 -1
  46. package/dist/panelGraphRenderer.d.ts +10 -0
  47. package/dist/panelGraphRenderer.d.ts.map +1 -1
  48. package/dist/panelGraphRenderer.js.map +1 -1
  49. package/dist/panelGraphScene.d.ts +1 -0
  50. package/dist/panelGraphScene.d.ts.map +1 -1
  51. package/dist/panelGraphScene.js +69 -32
  52. package/dist/panelGraphScene.js.map +1 -1
  53. package/dist/panelGraphSearch.d.ts +16 -0
  54. package/dist/panelGraphSearch.d.ts.map +1 -0
  55. package/dist/panelGraphSearch.js +93 -0
  56. package/dist/panelGraphSearch.js.map +1 -0
  57. package/dist/panelGraphView.d.ts +82 -0
  58. package/dist/panelGraphView.d.ts.map +1 -1
  59. package/dist/panelGraphView.js +15 -4
  60. package/dist/panelGraphView.js.map +1 -1
  61. package/dist/panelGraphVisuals.d.ts +14 -6
  62. package/dist/panelGraphVisuals.d.ts.map +1 -1
  63. package/dist/panelGraphVisuals.js +126 -51
  64. package/dist/panelGraphVisuals.js.map +1 -1
  65. package/dist/panelInspectorView.d.ts +8 -0
  66. package/dist/panelInspectorView.d.ts.map +1 -1
  67. package/dist/panelInspectorView.js +242 -48
  68. package/dist/panelInspectorView.js.map +1 -1
  69. package/dist/panelListStyles.d.ts +3 -0
  70. package/dist/panelListStyles.d.ts.map +1 -0
  71. package/dist/panelListStyles.js +155 -0
  72. package/dist/panelListStyles.js.map +1 -0
  73. package/dist/panelMemoryStyles.d.ts +3 -0
  74. package/dist/panelMemoryStyles.d.ts.map +1 -0
  75. package/dist/panelMemoryStyles.js +42 -0
  76. package/dist/panelMemoryStyles.js.map +1 -0
  77. package/dist/panelMemoryView.d.ts +13 -1
  78. package/dist/panelMemoryView.d.ts.map +1 -1
  79. package/dist/panelMemoryView.js +161 -41
  80. package/dist/panelMemoryView.js.map +1 -1
  81. package/dist/panelPassesView.d.ts +15 -0
  82. package/dist/panelPassesView.d.ts.map +1 -1
  83. package/dist/panelPassesView.js +202 -72
  84. package/dist/panelPassesView.js.map +1 -1
  85. package/dist/panelRawView.d.ts +15 -0
  86. package/dist/panelRawView.d.ts.map +1 -0
  87. package/dist/panelRawView.js +105 -0
  88. package/dist/panelRawView.js.map +1 -0
  89. package/dist/panelResourcesView.d.ts +8 -0
  90. package/dist/panelResourcesView.d.ts.map +1 -1
  91. package/dist/panelResourcesView.js +62 -31
  92. package/dist/panelResourcesView.js.map +1 -1
  93. package/dist/panelSelection.d.ts +9 -1
  94. package/dist/panelSelection.d.ts.map +1 -1
  95. package/dist/panelSelection.js +34 -4
  96. package/dist/panelSelection.js.map +1 -1
  97. package/dist/panelTheme.d.ts +13 -0
  98. package/dist/panelTheme.d.ts.map +1 -0
  99. package/dist/panelTheme.js +104 -0
  100. package/dist/panelTheme.js.map +1 -0
  101. package/dist/panelTypes.d.ts +10 -1
  102. package/dist/panelTypes.d.ts.map +1 -1
  103. package/dist/panelTypes.js.map +1 -1
  104. package/dist/panelVisualTheme.d.ts +147 -50
  105. package/dist/panelVisualTheme.d.ts.map +1 -1
  106. package/dist/panelVisualTheme.js +34 -44
  107. package/dist/panelVisualTheme.js.map +1 -1
  108. package/dist/panelWorkbenchHelpers.d.ts +12 -1
  109. package/dist/panelWorkbenchHelpers.d.ts.map +1 -1
  110. package/dist/panelWorkbenchHelpers.js +62 -1
  111. package/dist/panelWorkbenchHelpers.js.map +1 -1
  112. package/dist/panelWorkbenchStyles.d.ts +2 -0
  113. package/dist/panelWorkbenchStyles.d.ts.map +1 -0
  114. package/dist/panelWorkbenchStyles.js +101 -0
  115. package/dist/panelWorkbenchStyles.js.map +1 -0
  116. package/dist/panelWorkbenchView.d.ts +16 -0
  117. package/dist/panelWorkbenchView.d.ts.map +1 -1
  118. package/dist/panelWorkbenchView.js +228 -50
  119. package/dist/panelWorkbenchView.js.map +1 -1
  120. package/dist/query.js.map +1 -1
  121. package/dist/styles.d.ts.map +1 -1
  122. package/dist/styles.js +147 -195
  123. package/dist/styles.js.map +1 -1
  124. package/dist/theme.d.ts +22 -0
  125. package/dist/theme.d.ts.map +1 -0
  126. package/dist/theme.js +10 -0
  127. package/dist/theme.js.map +1 -0
  128. package/dist/themeDefinitions.d.ts +251 -0
  129. package/dist/themeDefinitions.d.ts.map +1 -0
  130. package/dist/themeDefinitions.js +96 -0
  131. package/dist/themeDefinitions.js.map +1 -0
  132. package/dist/themePalette.d.ts +66 -0
  133. package/dist/themePalette.d.ts.map +1 -0
  134. package/dist/themePalette.js +37 -0
  135. package/dist/themePalette.js.map +1 -0
  136. package/dist/themes.css +165 -0
  137. package/package.json +44 -10
  138. package/src/FrameGraphInspector.ts +130 -31
  139. package/src/capture.ts +4 -0
  140. package/src/debugCaptureModel.ts +53 -2
  141. package/src/index.ts +6 -2
  142. package/src/panelAliasAnalysis.ts +24 -70
  143. package/src/panelCytoscapeGraphRenderer.ts +140 -23
  144. package/src/panelDetailLayout.ts +155 -0
  145. package/src/panelDetailStyles.ts +56 -0
  146. package/src/panelDiagnosticsView.ts +166 -85
  147. package/src/panelDomHelpers.ts +4 -5
  148. package/src/panelGraphLayout.ts +6 -5
  149. package/src/panelGraphRenderer.ts +7 -0
  150. package/src/panelGraphScene.ts +68 -30
  151. package/src/panelGraphSearch.ts +96 -0
  152. package/src/panelGraphView.ts +14 -4
  153. package/src/panelGraphVisuals.ts +122 -52
  154. package/src/panelInspectorView.ts +227 -48
  155. package/src/panelListStyles.ts +154 -0
  156. package/src/panelMemoryStyles.ts +41 -0
  157. package/src/panelMemoryView.ts +178 -53
  158. package/src/panelPassesView.ts +190 -137
  159. package/src/panelRawView.ts +99 -0
  160. package/src/panelResourcesView.ts +69 -56
  161. package/src/panelSelection.ts +37 -5
  162. package/src/panelTheme.ts +85 -0
  163. package/src/panelTypes.ts +7 -1
  164. package/src/panelVisualTheme.ts +38 -49
  165. package/src/panelWorkbenchHelpers.ts +60 -2
  166. package/src/panelWorkbenchStyles.ts +100 -0
  167. package/src/panelWorkbenchView.ts +201 -52
  168. package/src/query.ts +11 -11
  169. package/src/styles.ts +148 -195
  170. package/src/theme.ts +24 -0
  171. package/src/themeDefinitions.ts +103 -0
  172. package/src/themePalette.ts +44 -0
package/GUIDE.md ADDED
@@ -0,0 +1,182 @@
1
+ # Inspector workbench guide
2
+
3
+ ## Workbench behavior
4
+
5
+ The workbench provides Overview, Graph, Passes, Resources, Memory, and
6
+ Diagnostics views plus a selection Inspector. It supports live capture, direct
7
+ Snapshot replacement, file import, supported legacy migration, canonical
8
+ download, clipboard copy, filtering, sorting, group expansion, and graph
9
+ navigation.
10
+
11
+ The first capture opens Graph with no selection and the detail pane closed.
12
+ Subsequent captures preserve the current view, filters, and selection when the
13
+ same object still exists. Pass selection follows the node ID across retained and
14
+ culled states; removing the selected object clears selection and closes details.
15
+ These preferences, group expansion, and detail width belong to the current
16
+ Inspector instance and are not saved across sessions.
17
+
18
+ | View | Purpose |
19
+ | --- | --- |
20
+ | Overview | Full-width diagnostic counts, timing coverage, slowest pass, work counts, and memory estimates, with links to the relevant views. Capture metadata is expandable. |
21
+ | Graph | Frame Flow structure, searchable by pass, resource, group, or output, with explicit target location and a collapsible legend. |
22
+ | Passes | All, Retained, or Culled passes, filtered by kind and name/ID/group, with order and GPU sorting. The separate Group Hierarchy has its own expansion and path search. |
23
+ | Resources | Name/ID/group, type, and Transient/Imported/Surface filters, plus name, estimated size, and first-use sorting. Full descriptors and allocations remain in details. |
24
+ | Memory | Physical allocations and their logical resources, inclusive execution-slot lifetimes, search, allocation/size sorting, and All/Aliased/Single/Unallocated filters. |
25
+ | Diagnostics | Every captured error, warning, and informational message, including repeated codes. Severity and code/message filters precede expandable retention roots, culling reasons, and execution segments. |
26
+
27
+ Lists show the matching and total counts, retain continuous scrolling, and offer
28
+ **Clear filters**. Passes order retained work by execution order, then culled work
29
+ by recording order when available, falling back to capture order. Retained means
30
+ the compiler kept a pass; it does not itself prove GPU execution. Culled work has
31
+ no execution order, segment, or GPU timing. The Group Hierarchy arrows only change
32
+ that tree; **Show in Graph** is a separate action.
33
+
34
+ Diagnostics preserve capture order within each severity and offer separate
35
+ node and resource links when a message references both. Culled-node links work
36
+ the same way as retained-node links. The Diagnostics tab shows error/warning
37
+ counts. Source, frame, and capture time are available under **Capture information**
38
+ in Overview; an absent capture timestamp is shown as unknown. The collapsible
39
+ graph legend floats inside the canvas without changing its size or viewport.
40
+ Graph controls also float over the canvas. **Search** opens the search field;
41
+ **Escape** dismisses it. **Fit** frames the graph in the available viewport.
42
+
43
+ The selection pane has **Summary**, **Relations**, and **Raw** tabs. Summary
44
+ explains compilation status, timing coverage, accesses, allocation relationships,
45
+ and attached diagnostics. Relations distinguish access facts, dependencies,
46
+ output sources, and allocation membership. Raw shows the selected original
47
+ object and its JSON path in the canonical Snapshot, with field/value search,
48
+ folding, and copy of the complete object regardless of the current search. Legacy
49
+ imports explicitly identify their migrated canonical data. IDs can be copied
50
+ without their presentation labels.
51
+
52
+ Selecting an object opens its details on object views. Overview uses the full
53
+ width while retaining selection. The pane defaults to 300px and can be resized
54
+ from 300px to 480px while leaving at least 520px for the main view. Workspaces narrower than
55
+ 828px use a modal drawer capped at 340px, with at least a 24px outside strip,
56
+ a backdrop, keyboard focus containment, and focus restoration when closed. The main content width determines table and information
57
+ layout; auxiliary table columns move into details when space is limited.
58
+ Arrow keys and Home/End switch tabs. Escape first dismisses the innermost active
59
+ menu or detail pane; the Examples host respects handled key events.
60
+
61
+ ### Timing and memory interpretation
62
+
63
+ Timing labels distinguish not collected, partial coverage, complete coverage,
64
+ not applicable, and a measured zero. **Measured pass sum** is the sum of available
65
+ pass timings with its timed/eligible count; **GPU span** is displayed separately.
66
+ Opaque external work has no inferred duration. Passes is the comparison table
67
+ for individual timings; Diagnostics does not repeat it.
68
+
69
+ Memory numbers are estimates with different scopes:
70
+
71
+ | Metric | Meaning |
72
+ | --- | --- |
73
+ | Transient estimate | Declared estimated sizes of transient logical resources. |
74
+ | Logical capacity | Allocation capacity counted for each assigned logical transient resource. |
75
+ | Physical estimate | Estimated sizes of physical allocations in the allocation report. |
76
+ | Alias reuse | Logical capacity minus physical estimate, where both are known. |
77
+ | Pool retained | Producer-reported retained pool allocations, which may outlive this graph. |
78
+
79
+ An unavailable report is not zero. Unknown resource/allocation sizes remain
80
+ unknown, and partial summaries show the known-size coverage. A valid empty report
81
+ can contain real zero totals. None of these metrics is total GPU memory or a
82
+ measured peak. Memory summaries always cover the entire Snapshot; filters change
83
+ the visible rows and matching count only. A lifetime includes both first and last
84
+ execution slots. Tick positions, grid lines, and resource bars share one stable
85
+ Snapshot coordinate range; missing lifetimes have no bar.
86
+
87
+ ### Frame Flow interaction
88
+
89
+ Graph is a single **Frame Flow** view: resource declarations → retained pass
90
+ dependencies → explicit resource outputs. Resource entrances belong to their
91
+ declaration groups; output roots remain top-level and use compiler-supplied final
92
+ producers and initial-content contributions. Culled passes remain in lists and
93
+ details, not in the graph. Collapsed groups aggregate relationships without
94
+ discarding their underlying semantics.
95
+ The **Declarations** toolbar toggle shows resource declaration entrances by default.
96
+ Turn it off to focus on pass dependencies and outputs: declaration entrances,
97
+ their relationships (including initial-content output edges), and resource-only
98
+ groups leave the layout. Pass dependencies and producer-to-output edges remain.
99
+ Outputs with known initial-content contributions show **With initial contents**
100
+ or **Initial contents only**; unavailable Legacy sources are not inferred.
101
+ The toggle persists across views and captures within this Inspector instance.
102
+ Changing it fits the updated graph while preserving selection and group expansion.
103
+ Resources, details, memory, and Snapshot data remain complete.
104
+
105
+ All nodes use single-line borders. Ordinary passes are rounded rectangles,
106
+ external submissions are cut-corner rectangles, resource entrances are ellipses,
107
+ and output roots are right-pointing tags. Declarations and outputs each have a
108
+ role colour independent of Buffer/Texture; pass categories have distinct colours.
109
+ Resources and Memory retain their resource-type colours. Hover and selection
110
+ change border emphasis, not shape, text colour, or fill.
111
+
112
+ Entrances show source/type first and the resource name second; outputs show their
113
+ purpose first and name second. Names are truncated to one line, with full names
114
+ available on hover and in details. Output ranges appear only to distinguish
115
+ different ranges of the same resource and purpose. Exact ranges and final sources
116
+ remain in hover/details. Semantic zoom hides auxiliary types and range summaries.
117
+ The grouped legend describes the whole snapshot's Frame Flow, including collapsed
118
+ objects, respects the Declarations toggle, and remains stable while groups expand/collapse. Culled-only categories
119
+ and unused resources do not add legend entries.
120
+
121
+ Category fills are opaque sRGB tints over the canvas: 18% in Storm and 8% in
122
+ Light. Theme-specific node text targets at least 7:1 contrast. Supporting text targets 4.5:1, and identifying
123
+ borders/symbols target 3:1 against their adjacent backgrounds. Automated checks
124
+ cover both official themes and interaction states; custom CSS colour overrides must
125
+ preserve these contrast relationships.
126
+
127
+ Solid edges represent declarations, values, and output sources; dashed edges
128
+ represent ordering-only relationships. Edges never carry labels. Hover provides
129
+ temporary hints: resource entrances and edges link only to visible entrances and
130
+ edges with the same logical resource ID, regardless of range. Passes, groups, and
131
+ output nodes only highlight themselves. These associations do not imply matching
132
+ ranges or a continuous dataflow path, and never substitute a collapsed group for
133
+ a hidden resource entrance.
134
+ Direct and linked hover use the same strong visual style. Selection uses a blue
135
+ outline without a glow. Hovering a Summary or Relations link previews its target
136
+ in the graph using the same rules, without changing selection or moving the view;
137
+ leaving the link or changing/closing the detail pane clears the preview.
138
+
139
+ Resource **Pass accesses** entries link only the pass name; access mode, write
140
+ contents, producesValue, and available ranges remain descriptive text. Pass details
141
+ use the same access facts. An access is not a graph
142
+ relationship and is not mapped to an arbitrary dependency edge.
143
+ Resource Relations also link to individual output roots by reason and range.
144
+
145
+ Clicking an entrance, edge, or Resources row selects the same logical resource,
146
+ including all its visible entrances and edges, but no passes, groups, or outputs.
147
+ An output still selects its Root. Its **View resource** action and other resource
148
+ links use the same resource selection. Changing to a different resource opens
149
+ Summary; selecting the current resource again preserves the active detail tab.
150
+ Selection does not switch workbench views, change filters, expand groups, or move
151
+ the viewport. A hidden entrance becomes selected when manually expanded; its
152
+ visible cross-group edges remain selected while it is hidden. Hover previews are
153
+ independent, with selection styling taking precedence, and never pin a tooltip.
154
+ Edge hints show only the resource and distinct relationship types, including
155
+ mixed types in aggregates. There is no independent edge detail or relationship list.
156
+ Double-clicking a group expands or collapses it without replacing selection;
157
+ single-click group selection waits briefly to distinguish that gesture.
158
+ Legacy outputs with unavailable
159
+ resolution remain visible but have no inferred source edges.
160
+
161
+ Explicit **Show in …** actions perform navigation: they switch views, clear
162
+ blocking filters, expand necessary ancestors, and scroll or center the target.
163
+ They close a narrow-host drawer so the target is visible. Graph search uses the
164
+ same explicit location behavior. Explicit resource location also turns Declarations
165
+ on; ordinary selection and hover never change the toggle. Failed location restores
166
+ the previous declaration and group settings. Objects absent from Frame Flow show an
167
+ explanation and a list-view action; locating an object does not bypass the graph
168
+ element budget. Ordinary selection and hover retain the behavior above.
169
+
170
+ Capture, import, and direct replacement share a revision counter so stale async
171
+ results cannot replace newer data. Failed or oversized imports leave the
172
+ current valid capture and UI state intact, and operation feedback can be expanded
173
+ to inspect the full failure reason. Views render their new capture on first
174
+ activation, and selection updates refresh only the active view and details.
175
+ Memory grouping and lifetime coordinates are cached per Snapshot; Raw is created
176
+ only when opened. Graph layout is lazy and is disabled
177
+ with an explanation when a capture exceeds `maxGraphElements`; the tabular and
178
+ raw views remain available.
179
+
180
+ Snapshot labels, URLs, extensions, and diagnostics are assigned through text
181
+ DOM APIs and are never executed as markup or code. The standalone Site page in
182
+ `apps/site/inspector` mounts this same package without adding duplicate controls.
package/README.md CHANGED
@@ -1,9 +1,10 @@
1
1
  # @zenfg/inspector
2
2
 
3
- [![npm](https://img.shields.io/npm/v/%40zenfg%2Finspector?include_prereleases&label=npm)](https://www.npmjs.com/package/@zenfg/inspector)
4
- [![status: beta](https://img.shields.io/badge/status-beta-orange.svg)](https://github.com/uinosoft/zenfg/blob/main/CHANGELOG.md)
5
- [![CI](https://github.com/uinosoft/zenfg/actions/workflows/ci.yml/badge.svg)](https://github.com/uinosoft/zenfg/actions/workflows/ci.yml)
6
- [![license: MIT](https://img.shields.io/badge/license-MIT-blue.svg)](https://github.com/uinosoft/zenfg/blob/main/LICENSE)
3
+ <!-- generated:badges:start -->
4
+ [![@zenfg/inspector published latest version](https://img.shields.io/npm/v/%40zenfg%2Finspector/latest?label=npm)](https://www.npmjs.com/package/@zenfg/inspector)
5
+ [![API Docs (development)](https://img.shields.io/badge/API_docs-development-blue)](https://uinosoft.github.io/zenfg/docs/api/inspector/)
6
+ [![MIT license](https://img.shields.io/badge/license-MIT-blue.svg)](https://github.com/uinosoft/zenfg/blob/npm/inspector/v0.1.0/LICENSE)
7
+ <!-- generated:badges:end -->
7
8
 
8
9
  `@zenfg/inspector` is an embeddable, renderer-independent DOM workbench for
9
10
  ZenFG Snapshot data. It depends on `@zenfg/snapshot`, Cytoscape, and ELK, but has
@@ -13,24 +14,35 @@ The package owns Snapshot validation, migration, visualization, and workbench
13
14
  state. The host owns layout around the workbench, live-capture policy, file
14
15
  retention, and the renderer that produces Snapshot data.
15
16
 
17
+ Resource and access statistics describe the declarations captured in the graph.
18
+ They do not automatically scan all shader bindings or measure total GPU memory;
19
+ workload-private buffers can be absent. More explicit declarations can be useful
20
+ for diagnosis. See [Choosing resource declaration granularity](https://github.com/uinosoft/zenfg/blob/npm/inspector/v0.1.0/docs/core-concepts.md#choosing-resource-declaration-granularity).
21
+
16
22
  ## Installation
17
23
 
24
+ <!-- generated:installation:start -->
18
25
  ```sh
19
- npm install @zenfg/inspector@0.1.0-beta.3
26
+ npm install @zenfg/inspector@0.1.0
20
27
  ```
28
+ <!-- generated:installation:end -->
21
29
 
22
30
  ## Quick start
23
31
 
32
+ Run in a modern browser from your existing TypeScript app. Give the host element
33
+ an explicit size (for example, `height: 600px`) and supply a valid Snapshot capture.
34
+ Call `mountInspector(host, capture)` below; the returned function removes the workbench.
35
+
24
36
  Mount one Inspector into a host element and provide an optional live-capture
25
37
  callback:
26
38
 
27
39
  ```ts
28
- import { mountFrameGraphInspector } from '@zenfg/inspector';
40
+ import { mountFrameGraphInspector, type FrameGraphCaptureRequest } from '@zenfg/inspector';
29
41
  import type { FrameGraphSnapshot } from '@zenfg/snapshot';
30
42
 
31
43
  export function mountInspector(
32
44
  host: HTMLElement,
33
- capture: () => FrameGraphSnapshot | Promise<FrameGraphSnapshot>,
45
+ capture: (request: FrameGraphCaptureRequest) => FrameGraphSnapshot | Promise<FrameGraphSnapshot>,
34
46
  ): () => void {
35
47
  const inspector = mountFrameGraphInspector(host, {
36
48
  captureSnapshot: capture,
@@ -45,6 +57,17 @@ The host must have non-zero width and height. `FrameGraphInspector` fills that
45
57
  host, so the same workbench can be embedded in a tool panel or mounted as a
46
58
  full-page application.
47
59
 
60
+ ## Themes and style customization
61
+
62
+ Inspector uses Tokyo Night Storm by default and includes a complete Light preset.
63
+ Use public `--zfgi-*` variables on an owned host, or pass a theme object and call
64
+ `setTheme()` to update one instance without losing graph interaction state.
65
+ After changing external CSS dynamically, call `refreshTheme()` to synchronize
66
+ the Canvas graph. Static CSS is read automatically at mount.
67
+
68
+ See [Theming](./THEMING.md) for JS presets, the optional CSS preset stylesheet,
69
+ variable reference, compatibility aliases, and multi-instance behavior.
70
+
48
71
  ## Common tasks
49
72
 
50
73
  | Task | Public API |
@@ -57,6 +80,8 @@ full-page application.
57
80
  | Import and migrate a file | `importSnapshot()` |
58
81
  | Download canonical Snapshot JSON | `downloadSnapshot()` |
59
82
  | Copy canonical Snapshot JSON | `copySnapshotJson()` |
83
+ | Apply a preset or custom theme | `theme` option and `setTheme()` |
84
+ | Synchronize graph after external CSS changes | `refreshTheme()` |
60
85
  | Set visible product branding | `branding` option |
61
86
  | Limit imported file size | `maxImportBytes` option |
62
87
  | Limit automatic graph layout | `maxGraphElements` option |
@@ -65,85 +90,9 @@ full-page application.
65
90
  Exact options, defaults, return types, and lifecycle behavior are documented by
66
91
  the TSDoc preserved in the packaged source and declarations.
67
92
 
68
- ## Workbench behavior
69
-
70
- The workbench provides Overview, Graph, Passes, Resources, Memory, and
71
- Diagnostics views plus a selection Inspector. It supports live capture, direct
72
- Snapshot replacement, file import, supported legacy migration, canonical
73
- download, clipboard copy, filtering, sorting, group expansion, and graph
74
- navigation.
75
-
76
- Graph is a single **Frame Flow** view: resource declarations → retained pass
77
- dependencies → explicit resource outputs. Resource entrances belong to their
78
- declaration groups; output roots remain top-level and use compiler-supplied final
79
- producers and initial-content contributions. Culled passes remain in lists and
80
- details, not in the graph. Collapsed groups aggregate relationships without
81
- discarding their underlying semantics.
82
- All nodes use single-line borders. Ordinary passes are rounded rectangles,
83
- external submissions are cut-corner rectangles, resource entrances are ellipses,
84
- and output roots are right-pointing tags. Declarations and outputs each have a
85
- role colour independent of Buffer/Texture; pass categories have distinct colours.
86
- Resources and Memory retain their resource-type colours. Hover and selection
87
- change border emphasis, not shape, text colour, or fill.
88
-
89
- Entrances show source/type first and the resource name second; outputs show their
90
- purpose first and name second. Names are truncated to one line, with full names
91
- available on hover and in details. Output ranges appear only to distinguish
92
- different ranges of the same resource and purpose. Exact ranges and final sources
93
- remain in hover/details. Semantic zoom hides auxiliary types and range summaries.
94
- The grouped legend describes the whole snapshot's Frame Flow, including collapsed
95
- objects, and remains stable while groups expand/collapse. Culled-only categories
96
- and unused resources do not add legend entries.
97
-
98
- Category fills are opaque 18% sRGB tints over the canvas; node text stays light
99
- and targets at least 7:1 contrast. Supporting text targets 4.5:1, and identifying
100
- borders/symbols target 3:1 against their adjacent backgrounds. Automated checks
101
- cover the default theme and interaction states; custom CSS colour overrides must
102
- preserve these contrast relationships.
103
-
104
- Solid edges represent declarations, values, and output sources; dashed edges
105
- represent ordering-only relationships. Edges never carry labels. Hover provides
106
- temporary hints: resource entrances and edges link only to visible entrances and
107
- edges with the same logical resource ID, regardless of range. Passes, groups, and
108
- output nodes only highlight themselves. These associations do not imply matching
109
- ranges or a continuous dataflow path, and never substitute a collapsed group for
110
- a hidden resource entrance.
111
- Direct and linked hover use the same strong visual style. Selection uses a blue
112
- outline without a glow. Hovering a Summary or Relations link previews its target
113
- in the graph using the same rules, without changing selection or moving the view;
114
- leaving the link or changing/closing the detail pane clears the preview.
115
-
116
- Resource **Pass accesses** entries link only the pass name; access mode, write
117
- contents, producesValue, and available ranges remain descriptive text. Pass details
118
- use the same access facts. An access is not a graph
119
- relationship and is not mapped to an arbitrary dependency edge.
120
- Resource Relations also link to individual output roots by reason and range.
121
-
122
- Clicking an entrance, edge, or Resources row selects the same logical resource,
123
- including all its visible entrances and edges, but no passes, groups, or outputs.
124
- An output still selects its Root. Its **View resource** action and other resource
125
- links use the same resource selection. Changing to a different resource opens
126
- Summary; selecting the current resource again preserves the active detail tab.
127
- Selection does not switch workbench views, change filters, expand groups, or move
128
- the viewport. A hidden entrance becomes selected when manually expanded; its
129
- visible cross-group edges remain selected while it is hidden. Hover previews are
130
- independent, with selection styling taking precedence, and never pin a tooltip.
131
- Edge hints show only the resource and distinct relationship types, including
132
- mixed types in aggregates. There is no independent edge detail or relationship list.
133
- Double-clicking a group expands or collapses it without replacing selection;
134
- single-click group selection waits briefly to distinguish that gesture.
135
- Legacy outputs with unavailable
136
- resolution remain visible but have no inferred source edges.
137
-
138
- Capture, import, and direct replacement share a revision counter so stale async
139
- results cannot replace newer data. Failed or oversized imports leave the
140
- current valid capture and UI state intact. Graph layout is lazy and is disabled
141
- with an explanation when a capture exceeds `maxGraphElements`; the tabular and
142
- raw views remain available.
143
-
144
- Snapshot labels, URLs, extensions, and diagnostics are assigned through text
145
- DOM APIs and are never executed as markup or code. The standalone application
146
- in `apps/inspector` mounts this same package without adding duplicate controls.
93
+ ## Workbench guide
94
+
95
+ See the [workbench guide](./GUIDE.md) for views, graph interaction, timing, and memory interpretation.
147
96
 
148
97
  ## Common mistakes
149
98
 
@@ -159,6 +108,29 @@ in `apps/inspector` mounts this same package without adding duplicate controls.
159
108
  ## Further reading
160
109
 
161
110
  - [Hosted Inspector](https://uinosoft.github.io/zenfg/inspector/)
162
- - [`@zenfg/snapshot`](https://github.com/uinosoft/zenfg/blob/main/packages/snapshot/README.md)
163
- - [ZenFG Core concepts](https://github.com/uinosoft/zenfg/blob/main/docs/core-concepts.md)
164
- - [ZenFG documentation index](https://github.com/uinosoft/zenfg/blob/main/docs/README.md)
111
+ - [`@zenfg/snapshot`](https://github.com/uinosoft/zenfg/blob/npm/inspector/v0.1.0/packages/snapshot/README.md)
112
+ - [ZenFG Core concepts](https://github.com/uinosoft/zenfg/blob/npm/inspector/v0.1.0/docs/core-concepts.md)
113
+ - [ZenFG documentation index](https://github.com/uinosoft/zenfg/blob/npm/inspector/v0.1.0/docs/README.md)
114
+
115
+ ## Documentation and versions
116
+
117
+ <!-- generated:documentation:start -->
118
+ This README describes **@zenfg/inspector 0.1.0**. Registry badges show the current published channel, not your installed version.
119
+
120
+ - Exact installed APIs: follow `package.json` → `exports` → `dist/*.d.ts`; declaration maps point to the included `src/`. Only declared export paths are public.
121
+ - [Online guide (development branch)](https://uinosoft.github.io/zenfg/docs/packages/inspector.html). The site may describe changes newer than this package.
122
+ - [TypeScript API (development branch)](https://uinosoft.github.io/zenfg/docs/api/inspector/).
123
+ - [Source and documentation for this release](https://github.com/uinosoft/zenfg/tree/npm/inspector/v0.1.0/packages/inspector).
124
+ - [Shared concepts for this release](https://github.com/uinosoft/zenfg/blob/npm/inspector/v0.1.0/docs/core-concepts.md) and [compatibility](https://github.com/uinosoft/zenfg/blob/npm/inspector/v0.1.0/docs/compatibility.md).
125
+ - [Plain Markdown documentation index (development branch)](https://uinosoft.github.io/zenfg/docs/llms.txt).
126
+ - Local guides: [workbench](./GUIDE.md) and [themes](./THEMING.md).
127
+ <!-- generated:documentation:end -->
128
+
129
+ ## CPU and GPU capture
130
+
131
+ The Capture action always requests CPU and GPU together. Providers receive
132
+ a `FrameGraphCaptureRequest` and must forward its timing mode to the runtime.
133
+ Timing is collected only for capture frames; imported data and normal frames are unchanged.
134
+ CPU columns, sorting, group sums and coverage include all retained node kinds.
135
+ CPU execute total and GPU span remain separate. Missing, culled and real zero
136
+ readings are distinct; zero does not guarantee zero CPU cost.
package/THEMING.md ADDED
@@ -0,0 +1,124 @@
1
+ # Inspector themes
2
+
3
+ The public styling contract is the `--zfgi-*` CSS custom properties. Inspector
4
+ ships complete Tokyo Night Storm defaults, supports partial host overrides, and
5
+ does not require a base theme, theme name, registration, or browser storage.
6
+ Theme changes are scoped to one Inspector. Snapshot data never contains themes.
7
+
8
+ ## Official presets and custom themes
9
+
10
+ ```ts
11
+ import { mountFrameGraphInspector } from '@zenfg/inspector';
12
+ import { tokyoNightStorm, tokyoNightLight, type InspectorTheme } from '@zenfg/inspector/theme';
13
+
14
+ const inspector = mountFrameGraphInspector(host, { theme: tokyoNightLight });
15
+ inspector.setTheme(tokyoNightStorm);
16
+
17
+ const brandTheme: InspectorTheme = {
18
+ ...tokyoNightLight,
19
+ variables: { ...tokyoNightLight.variables, '--zfgi-accent': '#2959aa' },
20
+ };
21
+ inspector.setTheme(brandTheme);
22
+ inspector.setTheme(null); // Restore host CSS and component defaults.
23
+ ```
24
+
25
+ Both presets are ordinary immutable `InspectorTheme` objects. The pure `/theme`
26
+ entry can be imported without a DOM and does not load Cytoscape or ELK. Hosts
27
+ can also use its shared `visualThemes` and `visualMetrics` foundations.
28
+
29
+ `setTheme()` replaces the API's current variable set on `inspector.dom.style`
30
+ and automatically synchronizes the graph. Omitted entries do not retain the
31
+ previous preset's colors. Reset restores pre-existing inline declarations and
32
+ leaves unrelated styles and subsequently edited declarations alone. Root inline
33
+ variables take precedence over inherited host variables, following normal CSS.
34
+
35
+ `colorScheme: 'dark' | 'light'` maps to `--zfgi-color-scheme`; do not repeat it
36
+ inside `variables`. It controls native browser appearance, not palette choice.
37
+ The component does not infer light colors from a light background or this hint.
38
+
39
+ ## CSS-only use
40
+
41
+ Static variables on the host are picked up at mount and graph initialization:
42
+
43
+ ```css
44
+ .inspector-host {
45
+ --zfgi-accent: var(--app-accent, #7aa2f7);
46
+ --zfgi-font-ui: system-ui, sans-serif;
47
+ --zfgi-graph-render-stroke: #9ece6a;
48
+ }
49
+ ```
50
+
51
+ No JS theme call is required. Unspecified variables use CSS fallbacks. The
52
+ component does not write a full inline theme during default mounting, so parent
53
+ variables inherit normally. Configure dependent overrides on the same container:
54
+ CSS custom-property references are resolved where they are declared.
55
+
56
+ For complete CSS presets, explicitly import the optional stylesheet:
57
+
58
+ ```css
59
+ @import '@zenfg/inspector/themes.css';
60
+ ```
61
+
62
+ ```html
63
+ <div class="inspector-host" data-zfgi-theme="tokyo-night-light"></div>
64
+ ```
65
+
66
+ The other preset selector is `data-zfgi-theme="tokyo-night-storm"`. The stylesheet
67
+ does not select a global theme; declarations only apply to matching containers.
68
+ Its values are generated from the same definitions as the JavaScript presets.
69
+
70
+ ## Dynamic CSS and graph synchronization
71
+
72
+ ```ts
73
+ host.dataset.zfgiTheme = 'tokyo-night-light';
74
+ inspector.refreshTheme();
75
+ ```
76
+
77
+ DOM styling updates through CSS. Cytoscape consumes resolved values rather than
78
+ browser CSS, so call `refreshTheme()` after changing host variables, classes,
79
+ theme attributes, or media-query-dependent values. JS `setTheme()` already does
80
+ this. Refresh reads CSS without rewriting variables. No global observers or
81
+ polling are installed; hidden graphs also refresh when shown again.
82
+
83
+ Palette changes keep the graph instance, positions, pan/zoom, selection, group
84
+ expansion, current views, filters, detail state, and scroll positions. Graph font
85
+ changes update label measurement and layout while preserving zoom and an anchor.
86
+
87
+ ## Supported variables
88
+
89
+ All names below have the `--zfgi-` prefix. `InspectorThemeVariables` provides
90
+ the exhaustive TypeScript key list. Values use CSS syntax: lengths such as
91
+ `13px`, font-family stacks, colors including `var()` and `color-mix()`, and
92
+ unitless opacity or scale values. Use positive font sizes and widths, opacity
93
+ in the range 0–1, and non-negative arrow scale.
94
+
95
+ | Group | Names after the prefix |
96
+ | --- | --- |
97
+ | Surfaces | `canvas`, `background`, `surface`, `surface-raised`, `surface-hover` |
98
+ | Text and emphasis | `text`, `text-secondary`, `muted`, `accent`, `accent-soft`, `accent-hover` |
99
+ | Boundaries and feedback | `border`, `border-subtle`, `border-strong`, `success`, `warning`, `danger`, `shadow`, `backdrop` |
100
+ | Typography | `font-ui`, `font-mono`, `font-size`, `font-size-small` |
101
+ | Dimensions | `control-height`, `row-height`, `radius-sm`, `radius-md`, `space-1`, `space-2`, `space-3`, `space-4` |
102
+ | Native appearance | `color-scheme` (JS uses the separate `colorScheme` field) |
103
+ | Graph labels | `graph-text`, `graph-muted`, `graph-font-family`, `graph-font-size` |
104
+ | Graph categories | `graph-{category}-stroke`, `graph-{category}-fill` |
105
+ | Graph groups | `graph-group-stroke`, `graph-group-fill`, `graph-group-alternate-fill`, `graph-group-opacity`, `graph-group-border-width` |
106
+ | Graph relationships | `graph-value`, `graph-ordering`, `graph-read`, `graph-write`, `graph-edge-width`, `graph-edge-opacity`, `graph-ordering-opacity`, `graph-arrow-scale` |
107
+ | Graph states | `graph-hover`, `graph-selected`, `graph-hover-width`, `graph-selected-width`, `graph-node-border-width`, `graph-culled-stroke`, `graph-culled-fill` |
108
+ | Graph press indicator | `graph-active-bg`, `graph-active-bg-opacity`, `graph-active-bg-size` (radius in CSS pixels, default `12px`; opacity defaults to `0.08`) |
109
+ | Derived category fills | `graph-tint` (18% in Storm, 8% in Light) |
110
+
111
+ Categories are `render`, `compute`, `copy`, `clear`, `command`, `external`,
112
+ `declaration`, `output`, `texture`, and `buffer`. Category colors also drive
113
+ legends, type labels, and resource bars. Semantic shapes and layout algorithms
114
+ are not theme parameters. Hover/selection emphasize outlines without replacing
115
+ node shapes or category fills.
116
+
117
+ The existing `--zenfg-inspector-*` names for background, surfaces, borders,
118
+ text, accent, status colors, font families, and radii remain fallback aliases.
119
+ When both are supplied, the corresponding new `--zfgi-*` value wins. Internal
120
+ `--fgd-*` properties and presentation classes are not the public theme contract.
121
+
122
+ Official presets target at least 7:1 node-text contrast, 4.5:1 UI text contrast,
123
+ and 3:1 identifying borders and edges. Custom colors should preserve these
124
+ relationships; theme application does not automatically correct a custom palette.
@@ -1,6 +1,10 @@
1
+ import type { FrameGraphCaptureRequest } from './capture.ts';
2
+ import type { InspectorTheme } from './theme.ts';
1
3
  import { type FrameGraphSnapshot } from '@zenfg/snapshot';
2
4
  /** Construction and safety limits for an embedded {@link FrameGraphInspector}. */
3
5
  export type FrameGraphInspectorOptions = {
6
+ /** Optional CSS theme. Without one, host variables inherit over the Storm defaults. */
7
+ theme?: InspectorTheme;
4
8
  /**
5
9
  * Product label shown in the workbench command bar. Pass `false` to hide
6
10
  * visible branding while retaining the inspector's accessible name.
@@ -12,7 +16,7 @@ export type FrameGraphInspectorOptions = {
12
16
  * Produces a live snapshot when capture is requested. The inspector awaits
13
17
  * promises and displays thrown or rejected errors in its status area.
14
18
  */
15
- captureSnapshot?: () => FrameGraphSnapshot | undefined | Promise<FrameGraphSnapshot | undefined>;
19
+ captureSnapshot?: (request: FrameGraphCaptureRequest) => FrameGraphSnapshot | undefined | Promise<FrameGraphSnapshot | undefined>;
16
20
  /**
17
21
  * Maximum accepted import size in bytes.
18
22
  *
@@ -45,10 +49,12 @@ export type FrameGraphInspectorOptions = {
45
49
  export declare class FrameGraphInspector {
46
50
  /** Root element owned by this inspector instance. */
47
51
  readonly dom: HTMLElement;
52
+ private readonly themeController;
48
53
  private readonly body;
49
54
  private readonly content;
50
55
  private readonly dropOverlay;
51
56
  private readonly groupsButton;
57
+ private readonly declarationsButton;
52
58
  private readonly collapseGroupsButton;
53
59
  private readonly graphView;
54
60
  private readonly workbench;
@@ -69,6 +75,7 @@ export declare class FrameGraphInspector {
69
75
  private copyFeedbackTimeout;
70
76
  private readonly maxImportBytes;
71
77
  private dragDepth;
78
+ private revealRevision;
72
79
  private readonly handleDragEnter;
73
80
  private readonly handleDragOver;
74
81
  private readonly handleDragLeave;
@@ -81,11 +88,21 @@ export declare class FrameGraphInspector {
81
88
  * or if browser DOM globals are unavailable.
82
89
  */
83
90
  constructor(options?: FrameGraphInspectorOptions);
91
+ /** Replace API-applied variables on this instance, then synchronize graph styles.
92
+ * Pass null to restore host CSS and defaults. Does not change capture or interaction state.
93
+ */
94
+ setTheme(theme: InspectorTheme | null): void;
95
+ /** Re-read final CSS values after external CSS changes and refresh graph and legend.
96
+ * Does not write theme variables, recapture, fit, or rebuild the component.
97
+ */
98
+ refreshTheme(): void;
84
99
  /**
85
100
  * Replaces or removes the live-capture provider.
86
101
  *
87
102
  * @remarks Installing a provider may immediately begin an asynchronous
88
- * capture when no snapshot is displayed.
103
+ * capture when no snapshot is displayed. Replacing or removing a provider
104
+ * invalidates its pending capture results without cancelling the provider
105
+ * promise. An already displayed snapshot and any pending import are preserved.
89
106
  */
90
107
  setCaptureSnapshotProvider(provider: FrameGraphInspectorOptions['captureSnapshot']): void;
91
108
  /**
@@ -97,9 +114,9 @@ export declare class FrameGraphInspector {
97
114
  */
98
115
  captureSnapshot(): Promise<void>;
99
116
  /**
100
- * Validates and synchronously displays a programmatic Snapshot 1.1 value.
117
+ * Validates and synchronously displays a programmatic Snapshot 1.2 value.
101
118
  *
102
- * @throws {@link FrameGraphSnapshotValidationError} if `snapshot` is invalid.
119
+ * @throws {@link @zenfg/snapshot!index.FrameGraphSnapshotValidationError | FrameGraphSnapshotValidationError} if `snapshot` is invalid.
103
120
  */
104
121
  setSnapshot(snapshot: FrameGraphSnapshot): void;
105
122
  /** Returns the currently displayed canonical snapshot, if any. */
@@ -130,8 +147,10 @@ export declare class FrameGraphInspector {
130
147
  private updateCaptureActions;
131
148
  private maybeAutoCapture;
132
149
  private handleSelect;
150
+ private handleReveal;
133
151
  private handleHover;
134
152
  private updateGraphControls;
153
+ private toggleDeclarations;
135
154
  private toggleGroups;
136
155
  private toggleGroup;
137
156
  private collapseAllGroups;
@@ -1 +1 @@
1
- {"version":3,"file":"FrameGraphInspector.d.ts","sourceRoot":"","sources":["../src/FrameGraphInspector.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"FrameGraphInspector.d.ts","sourceRoot":"","sources":["../src/FrameGraphInspector.ts"],"names":[],"mappings":"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"}