@zenfg/inspector 0.1.0-beta.1

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 (123) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +74 -0
  3. package/dist/FrameGraphInspector.d.ts +153 -0
  4. package/dist/FrameGraphInspector.d.ts.map +1 -0
  5. package/dist/FrameGraphInspector.js +580 -0
  6. package/dist/FrameGraphInspector.js.map +1 -0
  7. package/dist/debugCaptureModel.d.ts +166 -0
  8. package/dist/debugCaptureModel.d.ts.map +1 -0
  9. package/dist/debugCaptureModel.js +364 -0
  10. package/dist/debugCaptureModel.js.map +1 -0
  11. package/dist/index.d.ts +17 -0
  12. package/dist/index.d.ts.map +1 -0
  13. package/dist/index.js +15 -0
  14. package/dist/index.js.map +1 -0
  15. package/dist/panelAliasAnalysis.d.ts +20 -0
  16. package/dist/panelAliasAnalysis.d.ts.map +1 -0
  17. package/dist/panelAliasAnalysis.js +113 -0
  18. package/dist/panelAliasAnalysis.js.map +1 -0
  19. package/dist/panelCytoscapeGraphRenderer.d.ts +71 -0
  20. package/dist/panelCytoscapeGraphRenderer.d.ts.map +1 -0
  21. package/dist/panelCytoscapeGraphRenderer.js +559 -0
  22. package/dist/panelCytoscapeGraphRenderer.js.map +1 -0
  23. package/dist/panelDiagnosticsView.d.ts +22 -0
  24. package/dist/panelDiagnosticsView.d.ts.map +1 -0
  25. package/dist/panelDiagnosticsView.js +123 -0
  26. package/dist/panelDiagnosticsView.js.map +1 -0
  27. package/dist/panelDomHelpers.d.ts +26 -0
  28. package/dist/panelDomHelpers.d.ts.map +1 -0
  29. package/dist/panelDomHelpers.js +129 -0
  30. package/dist/panelDomHelpers.js.map +1 -0
  31. package/dist/panelGraphLayout.d.ts +28 -0
  32. package/dist/panelGraphLayout.d.ts.map +1 -0
  33. package/dist/panelGraphLayout.js +223 -0
  34. package/dist/panelGraphLayout.js.map +1 -0
  35. package/dist/panelGraphRenderer.d.ts +20 -0
  36. package/dist/panelGraphRenderer.d.ts.map +1 -0
  37. package/dist/panelGraphRenderer.js +2 -0
  38. package/dist/panelGraphRenderer.js.map +1 -0
  39. package/dist/panelGraphScene.d.ts +98 -0
  40. package/dist/panelGraphScene.d.ts.map +1 -0
  41. package/dist/panelGraphScene.js +559 -0
  42. package/dist/panelGraphScene.js.map +1 -0
  43. package/dist/panelGraphView.d.ts +9 -0
  44. package/dist/panelGraphView.d.ts.map +1 -0
  45. package/dist/panelGraphView.js +88 -0
  46. package/dist/panelGraphView.js.map +1 -0
  47. package/dist/panelGraphVisuals.d.ts +38 -0
  48. package/dist/panelGraphVisuals.d.ts.map +1 -0
  49. package/dist/panelGraphVisuals.js +330 -0
  50. package/dist/panelGraphVisuals.js.map +1 -0
  51. package/dist/panelIcons.d.ts +4 -0
  52. package/dist/panelIcons.d.ts.map +1 -0
  53. package/dist/panelIcons.js +43 -0
  54. package/dist/panelIcons.js.map +1 -0
  55. package/dist/panelInspectorView.d.ts +33 -0
  56. package/dist/panelInspectorView.d.ts.map +1 -0
  57. package/dist/panelInspectorView.js +357 -0
  58. package/dist/panelInspectorView.js.map +1 -0
  59. package/dist/panelMemoryView.d.ts +21 -0
  60. package/dist/panelMemoryView.d.ts.map +1 -0
  61. package/dist/panelMemoryView.js +134 -0
  62. package/dist/panelMemoryView.js.map +1 -0
  63. package/dist/panelPassesView.d.ts +31 -0
  64. package/dist/panelPassesView.d.ts.map +1 -0
  65. package/dist/panelPassesView.js +183 -0
  66. package/dist/panelPassesView.js.map +1 -0
  67. package/dist/panelResourcesView.d.ts +19 -0
  68. package/dist/panelResourcesView.d.ts.map +1 -0
  69. package/dist/panelResourcesView.js +89 -0
  70. package/dist/panelResourcesView.js.map +1 -0
  71. package/dist/panelSelection.d.ts +5 -0
  72. package/dist/panelSelection.d.ts.map +1 -0
  73. package/dist/panelSelection.js +88 -0
  74. package/dist/panelSelection.js.map +1 -0
  75. package/dist/panelTypes.d.ts +40 -0
  76. package/dist/panelTypes.d.ts.map +1 -0
  77. package/dist/panelTypes.js +2 -0
  78. package/dist/panelTypes.js.map +1 -0
  79. package/dist/panelVisualTheme.d.ts +76 -0
  80. package/dist/panelVisualTheme.d.ts.map +1 -0
  81. package/dist/panelVisualTheme.js +39 -0
  82. package/dist/panelVisualTheme.js.map +1 -0
  83. package/dist/panelWorkbenchHelpers.d.ts +34 -0
  84. package/dist/panelWorkbenchHelpers.d.ts.map +1 -0
  85. package/dist/panelWorkbenchHelpers.js +162 -0
  86. package/dist/panelWorkbenchHelpers.js.map +1 -0
  87. package/dist/panelWorkbenchView.d.ts +77 -0
  88. package/dist/panelWorkbenchView.d.ts.map +1 -0
  89. package/dist/panelWorkbenchView.js +409 -0
  90. package/dist/panelWorkbenchView.js.map +1 -0
  91. package/dist/query.d.ts +11 -0
  92. package/dist/query.d.ts.map +1 -0
  93. package/dist/query.js +21 -0
  94. package/dist/query.js.map +1 -0
  95. package/dist/styles.d.ts +8 -0
  96. package/dist/styles.d.ts.map +1 -0
  97. package/dist/styles.js +1073 -0
  98. package/dist/styles.js.map +1 -0
  99. package/package.json +29 -0
  100. package/src/FrameGraphInspector.ts +632 -0
  101. package/src/debugCaptureModel.ts +583 -0
  102. package/src/index.ts +21 -0
  103. package/src/panelAliasAnalysis.ts +164 -0
  104. package/src/panelCytoscapeGraphRenderer.ts +617 -0
  105. package/src/panelDiagnosticsView.ts +160 -0
  106. package/src/panelDomHelpers.ts +151 -0
  107. package/src/panelGraphLayout.ts +281 -0
  108. package/src/panelGraphRenderer.ts +21 -0
  109. package/src/panelGraphScene.ts +787 -0
  110. package/src/panelGraphView.ts +108 -0
  111. package/src/panelGraphVisuals.ts +364 -0
  112. package/src/panelIcons.ts +56 -0
  113. package/src/panelInspectorView.ts +377 -0
  114. package/src/panelMemoryView.ts +154 -0
  115. package/src/panelPassesView.ts +222 -0
  116. package/src/panelResourcesView.ts +115 -0
  117. package/src/panelSelection.ts +99 -0
  118. package/src/panelTypes.ts +28 -0
  119. package/src/panelVisualTheme.ts +39 -0
  120. package/src/panelWorkbenchHelpers.ts +216 -0
  121. package/src/panelWorkbenchView.ts +465 -0
  122. package/src/query.ts +22 -0
  123. package/src/styles.ts +1076 -0
package/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 ZenFG contributors
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
package/README.md ADDED
@@ -0,0 +1,74 @@
1
+ # @zenfg/inspector
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)
7
+
8
+ `@zenfg/inspector` is an embeddable, renderer-independent DOM workbench for
9
+ ZenFG Snapshot data. It depends on `@zenfg/snapshot`, Cytoscape, and ELK; it has
10
+ no WebGPU, wgpu, engine, or host-UI dependency.
11
+
12
+ This is a public beta package. Public APIs may change before 1.0; integration
13
+ projects should pin the exact beta version.
14
+
15
+ For package selection, the capture data flow, version boundaries, and links to
16
+ complete producer recipes, see the
17
+ [ZenFG quick reference](https://github.com/uinosoft/zenfg/blob/main/docs/quick-reference.md).
18
+
19
+ ## Installation
20
+
21
+ ```sh
22
+ npm install @zenfg/inspector@0.1.0-beta.1
23
+ ```
24
+
25
+ ## Usage
26
+
27
+ ```ts
28
+ import { mountFrameGraphInspector } from '@zenfg/inspector';
29
+
30
+ const inspector = mountFrameGraphInspector(document.querySelector('#tools')!, {
31
+ captureSnapshot: () => renderer.requestFrameGraphSnapshot(),
32
+ branding: 'ZenFG Inspector', // Pass false to hide visible branding.
33
+ });
34
+
35
+ inspector.setSnapshot(existingSnapshot);
36
+ await inspector.importSnapshot(file);
37
+ inspector.downloadSnapshot();
38
+ await inspector.copySnapshotJson();
39
+ inspector.destroy();
40
+ ```
41
+
42
+ `FrameGraphInspector` fills any `HTMLElement` with a non-zero width and height,
43
+ so the same workbench can be a full page or an embedded tool. Product branding,
44
+ file selection, and file drag-and-drop are built in; an optional dock or overlay
45
+ adapter remains the host application's responsibility. File import defaults to
46
+ 64 MiB and may be adjusted with
47
+ `maxImportBytes`. `maxGraphElements` defaults to 5,000; captures above that
48
+ layout budget retain Passes, Resources, Memory, Diagnostics, Inspector, and raw
49
+ views while automatic Cytoscape/ELK layout is disabled with an explanation.
50
+
51
+ ## Workbench
52
+
53
+ The persistent workbench provides Overview, Graph, Passes, Resources, Memory,
54
+ and Diagnostics views plus a selection Inspector with Summary, Relations, and
55
+ Raw panes. It supports live capture providers, direct Snapshot set/get, file
56
+ import, Legacy V0 and Legacy Candidate V1 migration, canonical download,
57
+ clipboard copy, and cleanup through `destroy()`.
58
+
59
+ Capture, import, and direct replacement share a revision counter: stale async
60
+ results and results arriving after destruction are ignored. A failed or
61
+ oversized import leaves the current capture and UI state intact. The latest
62
+ valid capture preserves tab, filter, sorting, group-expansion, graph mode,
63
+ selection, Inspector, scrolling, and viewport state where possible.
64
+
65
+ Graph layout is lazy and read-only. ELK computes layered compound geometry and
66
+ Cytoscape renders it with pan, zoom, selection, hover, tooltips, group
67
+ expansion, relayout, and fit controls. Input labels and raw fields are assigned
68
+ with text DOM APIs; Snapshot extensions, URLs, labels, and messages are never
69
+ executed as markup or code.
70
+
71
+ The backend-free application in `apps/inspector` mounts the same workbench into
72
+ a full-viewport host without adding duplicate controls. It is built as static
73
+ files and includes third-party notices; hosting and deployment are deliberately
74
+ separate.
@@ -0,0 +1,153 @@
1
+ import { type FrameGraphSnapshot } from '@zenfg/snapshot';
2
+ /** Construction and safety limits for an embedded {@link FrameGraphInspector}. */
3
+ export type FrameGraphInspectorOptions = {
4
+ /**
5
+ * Product label shown in the workbench command bar. Pass `false` to hide
6
+ * visible branding while retaining the inspector's accessible name.
7
+ *
8
+ * @defaultValue `"ZenFG Inspector"`
9
+ */
10
+ branding?: string | false;
11
+ /**
12
+ * Produces a live snapshot when capture is requested. The inspector awaits
13
+ * promises and displays thrown or rejected errors in its status area.
14
+ */
15
+ captureSnapshot?: () => FrameGraphSnapshot | undefined | Promise<FrameGraphSnapshot | undefined>;
16
+ /**
17
+ * Maximum accepted import size in bytes.
18
+ *
19
+ * @defaultValue `67108864` (64 MiB)
20
+ */
21
+ maxImportBytes?: number;
22
+ /**
23
+ * Maximum graph nodes plus edges accepted by automatic layout.
24
+ *
25
+ * @defaultValue `5000`
26
+ */
27
+ maxGraphElements?: number;
28
+ };
29
+ /**
30
+ * Browser lifecycle controller for one embeddable FrameGraph inspector.
31
+ *
32
+ * @remarks The constructor creates, but does not append, {@link dom}. Use
33
+ * {@link mountFrameGraphInspector} for the common append-and-return workflow.
34
+ * Async capture, import, and clipboard failures are reported in the UI. Call
35
+ * {@link destroy} when the controller is no longer needed.
36
+ *
37
+ * @example
38
+ * ```ts
39
+ * const inspector = new FrameGraphInspector({ captureSnapshot: capture });
40
+ * document.body.append(inspector.dom);
41
+ * // Later:
42
+ * inspector.destroy();
43
+ * ```
44
+ */
45
+ export declare class FrameGraphInspector {
46
+ /** Root element owned by this inspector instance. */
47
+ readonly dom: HTMLElement;
48
+ private readonly body;
49
+ private readonly content;
50
+ private readonly dropOverlay;
51
+ private readonly passesGraphModeButton;
52
+ private readonly resourcesGraphModeButton;
53
+ private readonly groupsButton;
54
+ private readonly collapseGroupsButton;
55
+ private readonly graphView;
56
+ private readonly workbench;
57
+ private captureSnapshotCallback;
58
+ private protocolSnapshot;
59
+ private operationRevision;
60
+ private viewModel;
61
+ private selected;
62
+ private hovered;
63
+ private capturing;
64
+ private importing;
65
+ private copying;
66
+ private copied;
67
+ private initialAutoCaptureAttempted;
68
+ private statusMessage;
69
+ private statusTone;
70
+ private destroyed;
71
+ private copyFeedbackTimeout;
72
+ private readonly maxImportBytes;
73
+ private dragDepth;
74
+ private readonly handleDragEnter;
75
+ private readonly handleDragOver;
76
+ private readonly handleDragLeave;
77
+ private readonly handleDragEnd;
78
+ private readonly handleDrop;
79
+ /**
80
+ * Creates a detached inspector UI.
81
+ *
82
+ * @throws If a configured numeric limit is not a non-negative safe integer,
83
+ * or if browser DOM globals are unavailable.
84
+ */
85
+ constructor(options?: FrameGraphInspectorOptions);
86
+ /**
87
+ * Replaces or removes the live-capture provider.
88
+ *
89
+ * @remarks Installing a provider may immediately begin an asynchronous
90
+ * capture when no snapshot is displayed.
91
+ */
92
+ setCaptureSnapshotProvider(provider: FrameGraphInspectorOptions['captureSnapshot']): void;
93
+ /**
94
+ * Requests and displays a live snapshot from the configured provider.
95
+ *
96
+ * @remarks Concurrent requests are coalesced. Provider errors, invalid
97
+ * snapshots, and an unavailable provider are displayed in the inspector and
98
+ * do not reject the returned promise.
99
+ */
100
+ captureSnapshot(): Promise<void>;
101
+ /**
102
+ * Validates and synchronously displays a programmatic Snapshot 1.0 value.
103
+ *
104
+ * @throws {@link FrameGraphSnapshotValidationError} if `snapshot` is invalid.
105
+ */
106
+ setSnapshot(snapshot: FrameGraphSnapshot): void;
107
+ /** Returns the currently displayed canonical snapshot, if any. */
108
+ getSnapshot(): FrameGraphSnapshot | undefined;
109
+ /**
110
+ * Reads, migrates, validates, and displays a snapshot JSON file.
111
+ *
112
+ * @remarks Files above `maxImportBytes`, read failures, invalid JSON, and
113
+ * validation failures are displayed in the UI and do not reject the promise.
114
+ */
115
+ importSnapshot(file: File): Promise<void>;
116
+ /** Downloads the displayed snapshot as pretty-printed canonical JSON. */
117
+ downloadSnapshot(): void;
118
+ /**
119
+ * Copies the displayed snapshot as pretty-printed canonical JSON.
120
+ *
121
+ * @remarks Clipboard failures are shown in the UI and do not reject the
122
+ * returned promise. A legacy `document.execCommand` fallback is used when the
123
+ * async Clipboard API is unavailable.
124
+ */
125
+ copySnapshotJson(): Promise<void>;
126
+ private applySnapshot;
127
+ /**
128
+ * Idempotently cancels pending UI results, releases graph resources, and
129
+ * removes the inspector workbench. Do not reuse the controller afterward.
130
+ */
131
+ destroy(): void;
132
+ private updateCaptureActions;
133
+ private maybeAutoCapture;
134
+ private handleSelect;
135
+ private handleHover;
136
+ private setGraphMode;
137
+ private updateGraphModeButtonState;
138
+ private toggleGroups;
139
+ private toggleGroup;
140
+ private collapseAllGroups;
141
+ private showEmptyState;
142
+ private setDropActive;
143
+ private clearDropState;
144
+ private reportCaptureIssue;
145
+ }
146
+ /**
147
+ * Creates an inspector, appends its root element to `host`, and returns its
148
+ * lifecycle controller.
149
+ *
150
+ * @throws If inspector construction fails; see {@link FrameGraphInspector}.
151
+ */
152
+ export declare function mountFrameGraphInspector(host: HTMLElement, options?: FrameGraphInspectorOptions): FrameGraphInspector;
153
+ //# sourceMappingURL=FrameGraphInspector.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"FrameGraphInspector.d.ts","sourceRoot":"","sources":["../src/FrameGraphInspector.ts"],"names":[],"mappings":"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"}