@zenfg/inspector 0.1.0-beta.1 → 0.1.0-beta.3
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.
- package/README.md +143 -53
- package/dist/FrameGraphInspector.d.ts +2 -5
- package/dist/FrameGraphInspector.d.ts.map +1 -1
- package/dist/FrameGraphInspector.js +16 -38
- package/dist/FrameGraphInspector.js.map +1 -1
- package/dist/debugCaptureModel.d.ts +9 -4
- package/dist/debugCaptureModel.d.ts.map +1 -1
- package/dist/debugCaptureModel.js +36 -14
- package/dist/debugCaptureModel.js.map +1 -1
- package/dist/panelCytoscapeGraphRenderer.d.ts +3 -1
- package/dist/panelCytoscapeGraphRenderer.d.ts.map +1 -1
- package/dist/panelCytoscapeGraphRenderer.js +40 -19
- package/dist/panelCytoscapeGraphRenderer.js.map +1 -1
- package/dist/panelDiagnosticsView.js +2 -2
- package/dist/panelDiagnosticsView.js.map +1 -1
- package/dist/panelGraphLayout.d.ts.map +1 -1
- package/dist/panelGraphLayout.js +15 -1
- package/dist/panelGraphLayout.js.map +1 -1
- package/dist/panelGraphScene.d.ts +14 -26
- package/dist/panelGraphScene.d.ts.map +1 -1
- package/dist/panelGraphScene.js +141 -195
- package/dist/panelGraphScene.js.map +1 -1
- package/dist/panelGraphView.d.ts.map +1 -1
- package/dist/panelGraphView.js +31 -9
- package/dist/panelGraphView.js.map +1 -1
- package/dist/panelGraphVisuals.d.ts +7 -3
- package/dist/panelGraphVisuals.d.ts.map +1 -1
- package/dist/panelGraphVisuals.js +45 -80
- package/dist/panelGraphVisuals.js.map +1 -1
- package/dist/panelIcons.d.ts +1 -1
- package/dist/panelIcons.d.ts.map +1 -1
- package/dist/panelIcons.js +1 -0
- package/dist/panelIcons.js.map +1 -1
- package/dist/panelInspectorView.d.ts +5 -0
- package/dist/panelInspectorView.d.ts.map +1 -1
- package/dist/panelInspectorView.js +99 -13
- package/dist/panelInspectorView.js.map +1 -1
- package/dist/panelSelection.js +2 -2
- package/dist/panelSelection.js.map +1 -1
- package/dist/panelTypes.d.ts +8 -3
- package/dist/panelTypes.d.ts.map +1 -1
- package/dist/panelTypes.js.map +1 -1
- package/dist/panelVisualTheme.d.ts +21 -13
- package/dist/panelVisualTheme.d.ts.map +1 -1
- package/dist/panelVisualTheme.js +15 -7
- package/dist/panelVisualTheme.js.map +1 -1
- package/dist/panelWorkbenchHelpers.js +1 -1
- package/dist/panelWorkbenchHelpers.js.map +1 -1
- package/dist/panelWorkbenchView.d.ts.map +1 -1
- package/dist/panelWorkbenchView.js +2 -1
- package/dist/panelWorkbenchView.js.map +1 -1
- package/dist/styles.d.ts.map +1 -1
- package/dist/styles.js +20 -12
- package/dist/styles.js.map +1 -1
- package/package.json +2 -2
- package/src/FrameGraphInspector.ts +17 -39
- package/src/debugCaptureModel.ts +44 -19
- package/src/panelCytoscapeGraphRenderer.ts +39 -18
- package/src/panelDiagnosticsView.ts +3 -3
- package/src/panelGraphLayout.ts +15 -1
- package/src/panelGraphScene.ts +153 -279
- package/src/panelGraphView.ts +31 -9
- package/src/panelGraphVisuals.ts +46 -82
- package/src/panelIcons.ts +2 -0
- package/src/panelInspectorView.ts +104 -16
- package/src/panelSelection.ts +2 -2
- package/src/panelTypes.ts +9 -3
- package/src/panelVisualTheme.ts +18 -7
- package/src/panelWorkbenchHelpers.ts +2 -2
- package/src/panelWorkbenchView.ts +2 -1
- package/src/styles.ts +20 -12
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"panelVisualTheme.js","sourceRoot":"","sources":["../src/panelVisualTheme.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,8BAA8B,GAAG;IAC7C,MAAM,EAAE,SAAS;IACjB,KAAK,EAAE,SAAS;IAChB,OAAO,EAAE,SAAS;IAClB,aAAa,EAAE,SAAS;IACxB,YAAY,EAAE,SAAS;IACvB,MAAM,EAAE,SAAS;IACjB,IAAI,EAAE,SAAS;IACf,aAAa,EAAE,SAAS;IACxB,KAAK,EAAE,SAAS;IAChB,MAAM,EAAE,SAAS;IACjB,OAAO,EAAE,SAAS;IAClB,OAAO,EAAE,SAAS;IAClB,MAAM,EAAE,SAAS;IACjB,MAAM,EAAE,sEAAsE;IAC9E,QAAQ,EAAE,sEAAsE;CACvE,CAAC;AAEX,
|
|
1
|
+
{"version":3,"file":"panelVisualTheme.js","sourceRoot":"","sources":["../src/panelVisualTheme.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,8BAA8B,GAAG;IAC7C,MAAM,EAAE,SAAS;IACjB,KAAK,EAAE,SAAS;IAChB,OAAO,EAAE,SAAS;IAClB,aAAa,EAAE,SAAS;IACxB,YAAY,EAAE,SAAS;IACvB,MAAM,EAAE,SAAS;IACjB,IAAI,EAAE,SAAS;IACf,aAAa,EAAE,SAAS;IACxB,KAAK,EAAE,SAAS;IAChB,MAAM,EAAE,SAAS;IACjB,OAAO,EAAE,SAAS;IAClB,OAAO,EAAE,SAAS;IAClB,MAAM,EAAE,SAAS;IACjB,MAAM,EAAE,sEAAsE;IAC9E,QAAQ,EAAE,sEAAsE;CACvE,CAAC;AAEX,SAAS,QAAQ,CAAC,MAAc;IAC/B,MAAM,MAAM,GAAG,8BAA8B,CAAC,MAAM,CAAC;IACrD,MAAM,IAAI,GAAG,GAAG,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,IAAI,CAAC,KAAK,CACtD,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,EAAE,MAAM,GAAG,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,IAAI;UACnD,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,EAAE,MAAM,GAAG,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,IAAI,CACvD,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAC1C,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC;AACzB,CAAC;AAED,MAAM,CAAC,MAAM,kBAAkB,GAAG;IACjC,MAAM,EAAE,8BAA8B,CAAC,MAAM;IAC7C,OAAO,EAAE,8BAA8B,CAAC,OAAO;IAC/C,aAAa,EAAE,8BAA8B,CAAC,aAAa;IAC3D,IAAI,EAAE,8BAA8B,CAAC,IAAI;IACzC,KAAK,EAAE,8BAA8B,CAAC,KAAK;IAC3C,MAAM,EAAE,QAAQ,CAAC,SAAS,CAAC;IAC3B,OAAO,EAAE,QAAQ,CAAC,SAAS,CAAC;IAC5B,IAAI,EAAE,QAAQ,CAAC,SAAS,CAAC;IACzB,KAAK,EAAE,QAAQ,CAAC,SAAS,CAAC;IAC1B,OAAO,EAAE,QAAQ,CAAC,SAAS,CAAC;IAC5B,QAAQ,EAAE,QAAQ,CAAC,SAAS,CAAC;IAC7B,WAAW,EAAE,QAAQ,CAAC,SAAS,CAAC;IAChC,MAAM,EAAE,QAAQ,CAAC,SAAS,CAAC;IAC3B,OAAO,EAAE,EAAE,MAAM,EAAE,SAAS,EAAE,IAAI,EAAE,SAAS,EAAE;IAC/C,MAAM,EAAE,EAAE,MAAM,EAAE,SAAS,EAAE,IAAI,EAAE,SAAS,EAAE;IAC9C,KAAK,EAAE,EAAE,MAAM,EAAE,SAAS,EAAE,IAAI,EAAE,SAAS,EAAE,aAAa,EAAE,SAAS,EAAE;IACvE,UAAU,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,QAAQ,EAAE,SAAS,EAAE;IACrD,MAAM,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,SAAS,EAAE;IAC7C,QAAQ,EAAE,8BAA8B,CAAC,MAAM;IAC/C,KAAK,EAAE,SAAS;IAChB,MAAM,EAAE,EAAE,MAAM,EAAE,SAAS,EAAE,IAAI,EAAE,SAAS,EAAE;CACrC,CAAC","sourcesContent":["export const FRAME_GRAPH_DEBUG_VISUAL_THEME = {\n\tcanvas: '#0b0f14',\n\tpanel: '#0f151d',\n\tsurface: '#131b24',\n\tsurfaceRaised: '#18222d',\n\tsurfaceHover: '#1d2935',\n\tborder: '#263341',\n\ttext: '#e6edf3',\n\ttextSecondary: '#b4beca',\n\tmuted: '#8b98a5',\n\taccent: '#38bdf8',\n\tsuccess: '#34d399',\n\twarning: '#fbbf24',\n\tdanger: '#fb7185',\n\tfontUi: 'system-ui, -apple-system, BlinkMacSystemFont, \"Segoe UI\", sans-serif',\n\tfontMono: 'ui-monospace, SFMono-Regular, Consolas, \"Liberation Mono\", monospace',\n} as const;\n\nfunction category(stroke: string) {\n\tconst canvas = FRAME_GRAPH_DEBUG_VISUAL_THEME.canvas;\n\tconst fill = '#' + [1, 3, 5].map((offset) => Math.round(\n\t\tparseInt(stroke.slice(offset, offset + 2), 16) * 0.18\n\t\t+ parseInt(canvas.slice(offset, offset + 2), 16) * 0.82,\n\t).toString(16).padStart(2, '0')).join('');\n\treturn { stroke, fill };\n}\n\nexport const GRAPH_VISUAL_THEME = {\n\tcanvas: FRAME_GRAPH_DEBUG_VISUAL_THEME.canvas,\n\tsurface: FRAME_GRAPH_DEBUG_VISUAL_THEME.surface,\n\tsurfaceRaised: FRAME_GRAPH_DEBUG_VISUAL_THEME.surfaceRaised,\n\ttext: FRAME_GRAPH_DEBUG_VISUAL_THEME.text,\n\tmuted: FRAME_GRAPH_DEBUG_VISUAL_THEME.muted,\n\trender: category('#57C785'),\n\tcompute: category('#9AA5FF'),\n\tcopy: category('#F2CD60'),\n\tclear: category('#C4CF89'),\n\tcommand: category('#CF91E8'),\n\texternal: category('#F29A67'),\n\tdeclaration: category('#B9AB94'),\n\toutput: category('#EC91AE'),\n\ttexture: { stroke: '#f472b6', fill: '#3c1f32' },\n\tbuffer: { stroke: '#2dd4bf', fill: '#123632' },\n\tgroup: { stroke: '#64748b', fill: '#141c29', alternateFill: '#172033' },\n\tdependency: { value: '#94a3b8', ordering: '#8593a6' },\n\taccess: { read: '#2dd4bf', write: '#f59e0b' },\n\tselected: FRAME_GRAPH_DEBUG_VISUAL_THEME.accent,\n\thover: '#cbd5e1',\n\tculled: { stroke: '#64748b', fill: '#171d24' },\n} as const;\r\n"]}
|
|
@@ -4,7 +4,7 @@ export function selectionKey(selection) {
|
|
|
4
4
|
case 'node': return `node:${selection.id}`;
|
|
5
5
|
case 'group': return `group:${selection.pathKey}`;
|
|
6
6
|
case 'resource': return `resource:${selection.id}`;
|
|
7
|
-
case 'root': return `root:${selection.
|
|
7
|
+
case 'root': return `root:${selection.key}`;
|
|
8
8
|
case 'culled': return `culled:${selection.index}`;
|
|
9
9
|
case 'allocation': return `allocation:${selection.id}`;
|
|
10
10
|
case 'segment': return `segment:${selection.index}`;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"panelWorkbenchHelpers.js","sourceRoot":"","sources":["../src/panelWorkbenchHelpers.ts"],"names":[],"mappings":"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","sourcesContent":["import type {\n\tFrameGraphDebugResource,\n\tFrameGraphDebugViewModel,\n} from './debugCaptureModel.ts';\nimport { createCell, formatBytes, labelResource } from './panelDomHelpers.ts';\nimport type { Selection } from './panelTypes.ts';\n\nexport type WorkbenchCallbacks = {\n\treadonly onSelect: (selection: Selection) => void;\n\treadonly onHover: (selection: Selection | undefined) => void;\n\treadonly onGroupToggle: (pathKey: string) => void;\n\treadonly isGroupExpanded: (pathKey: string) => boolean;\n};\nexport type WorkbenchTableColumn = {\n\treadonly label: string;\n\treadonly column?: 'code' | 'kind' | 'numeric';\n};\n\n\nexport function selectionKey(selection: Selection): string {\n\tswitch (selection.kind) {\n\t\tcase 'node': return `node:${selection.id}`;\n\t\tcase 'group': return `group:${selection.pathKey}`;\n\t\tcase 'resource': return `resource:${selection.id}`;\n\t\tcase 'root': return `root:${selection.index}`;\n\t\tcase 'culled': return `culled:${selection.index}`;\n\t\tcase 'allocation': return `allocation:${selection.id}`;\n\t\tcase 'segment': return `segment:${selection.index}`;\n\t}\n}\n\nexport function sameSelection(a: Selection | undefined, b: Selection | undefined): boolean {\n\treturn a === undefined || b === undefined ? a === b : selectionKey(a) === selectionKey(b);\n}\n\nexport function updateSelectedRows(rows: ReadonlyMap<string, readonly HTMLElement[]>, selected: Selection | undefined): void {\n\tconst key = selected ? selectionKey(selected) : undefined;\n\tfor (const [rowKey, elements] of rows) {\n\t\tfor (const element of elements) {\n\t\t\tconst active = rowKey === key;\n\t\t\telement.classList.toggle('selected', active);\n\t\t\tif (element.getAttribute('role') === 'option') {\n\t\t\t\telement.setAttribute('aria-selected', active ? 'true' : 'false');\n\t\t\t}\n\t\t}\n\t}\n}\n\nexport function registerSelectable(\n\trows: Map<string, HTMLElement[]>,\n\telement: HTMLElement,\n\tselection: Selection,\n\tcallbacks: WorkbenchCallbacks,\n): void {\n\tconst key = selectionKey(selection);\n\tconst elements = rows.get(key) ?? [];\n\telements.push(element);\n\trows.set(key, elements);\n\telement.dataset.selectionKey = key;\n\telement.addEventListener('mouseenter', () => callbacks.onHover(selection));\n\telement.addEventListener('mouseleave', () => callbacks.onHover(undefined));\n}\n\nexport function createViewToolbar(label: string): HTMLDivElement {\n\tconst toolbar = document.createElement('div');\n\ttoolbar.className = 'zenfg-inspector-view-toolbar';\n\ttoolbar.setAttribute('role', 'toolbar');\n\ttoolbar.setAttribute('aria-label', label);\n\treturn toolbar;\n}\n\nexport function createSearchInput(\n\tplaceholder: string,\n\tvalue: string,\n\tonInput: (value: string) => void,\n): HTMLInputElement {\n\tconst input = document.createElement('input');\n\tinput.type = 'search';\n\tinput.placeholder = placeholder;\n\tinput.value = value;\n\tinput.setAttribute('aria-label', placeholder);\n\tinput.addEventListener('input', () => onInput(input.value));\n\treturn input;\n}\n\nexport function createFilterSelect(\n\tlabel: string,\n\tvalue: string,\n\toptions: readonly (readonly [value: string, label: string])[],\n\tonChange: (value: string) => void,\n): HTMLSelectElement {\n\tconst select = document.createElement('select');\n\tselect.setAttribute('aria-label', label);\n\tfor (const [optionValue, optionLabel] of options) {\n\t\tconst option = document.createElement('option');\n\t\toption.value = optionValue;\n\t\toption.textContent = optionLabel;\n\t\tselect.appendChild(option);\n\t}\n\tselect.value = value;\n\tselect.addEventListener('change', () => onChange(select.value));\n\treturn select;\n}\n\nexport function createTableScroller(headers: readonly WorkbenchTableColumn[]): {\n\treadonly scroller: HTMLDivElement;\n\treadonly table: HTMLTableElement;\n\treadonly body: HTMLTableSectionElement;\n} {\n\tconst scroller = document.createElement('div');\n\tscroller.className = 'zenfg-inspector-table-scroller';\n\tconst table = document.createElement('table');\n\ttable.className = 'zenfg-inspector-workbench-table';\n\tconst head = document.createElement('thead');\n\tconst row = document.createElement('tr');\n\tfor (const header of headers) {\n\t\tconst cell = document.createElement('th');\n\t\tcell.textContent = header.label;\n\t\tif (header.column) cell.dataset.column = header.column;\n\t\trow.appendChild(cell);\n\t}\n\thead.appendChild(row);\n\tconst body = document.createElement('tbody');\n\ttable.append(head, body);\n\tscroller.appendChild(table);\n\treturn { scroller, table, body };\n}\n\nexport function createSelectionCell(\n\ttext: string,\n\tselection: Selection,\n\tcallbacks: WorkbenchCallbacks,\n\tcolumn?: WorkbenchTableColumn['column'],\n): HTMLTableCellElement {\n\tconst cell = document.createElement('td');\n\tconst button = createRelationButton(text, selection, callbacks.onSelect);\n\tcell.appendChild(button);\n\tif (column) cell.dataset.column = column;\n\treturn cell;\n}\n\nexport function createRelationButton(\n\ttext: string,\n\tselection: Selection,\n\tonSelect: (selection: Selection) => void,\n): HTMLButtonElement {\n\tconst button = document.createElement('button');\n\tbutton.type = 'button';\n\tbutton.className = 'zenfg-inspector-relation-button';\n\tbutton.textContent = text;\n\tbutton.addEventListener('click', () => onSelect(selection));\n\treturn button;\n}\n\nexport function createKindCell(kind: string, label = kind): HTMLTableCellElement {\n\tconst cell = createCell('', { column: 'kind', kind });\n\tconst marker = document.createElement('span');\n\tmarker.className = 'zenfg-inspector-kind-label';\n\tmarker.dataset.kind = kind;\n\tmarker.textContent = label;\n\tcell.appendChild(marker);\n\treturn cell;\n}\n\r\nexport function groupPath(snapshot: FrameGraphDebugViewModel, groupId: string | undefined): string {\n\tif (groupId === undefined) return '-';\n\treturn snapshot.groupById.get(groupId)?.path.join(' / ') ?? `group-${groupId}`;\n}\n\nexport function formatEstimatedBytes(bytes: number | undefined): string {\n\treturn bytes === undefined ? 'Unknown' : formatBytes(bytes);\n}\n\nexport function formatResourceDescriptor(resource: FrameGraphDebugResource): string {\n\tconst descriptor = resource.descriptor;\n\tif (!descriptor) return 'Unknown';\n\tif (resource.kind === 'buffer' && 'size' in descriptor && typeof descriptor.size === 'number') {\n\t\treturn `${formatBytes(descriptor.size)} buffer`;\n\t}\n\tif ('format' in descriptor) {\n\t\tconst size = descriptor.size;\n\t\tconst extent = `${size.width}×${size.height}×${size.depthOrArrayLayers}`;\n\t\tconst extras = [\n\t\t\tdescriptor.dimension !== '2d' ? descriptor.dimension : undefined,\n\t\t\tdescriptor.mipLevelCount > 1 ? `${descriptor.mipLevelCount} mips` : undefined,\n\t\t\tdescriptor.sampleCount > 1 ? `${descriptor.sampleCount}× MSAA` : undefined,\n\t\t\tdescriptor.viewFormats.length > 0 ? `views ${descriptor.viewFormats.join(', ')}` : undefined,\n\t\t].filter(Boolean);\n\t\treturn `${descriptor.format} · ${extent}${extras.length ? ` · ${extras.join(' · ')}` : ''}`;\n\t}\n\treturn 'Unknown';\n}\n\nexport function resourceAccessCounts(snapshot: FrameGraphDebugViewModel, resourceId: string): readonly [number, number] {\n\tlet reads = 0;\n\tlet writes = 0;\n\tfor (const access of snapshot.accessesByResourceId.get(resourceId) ?? []) {\n\t\tif (access.mode === 'read') reads++;\n\t\telse writes++;\n\t}\n\treturn [reads, writes];\n}\n\nexport function createEmptyTableRow(columnCount: number, text: string): HTMLTableRowElement {\n\tconst row = document.createElement('tr');\n\tconst cell = createCell(text);\n\tcell.colSpan = columnCount;\n\tcell.className = 'zenfg-inspector-empty-row';\n\trow.appendChild(cell);\n\treturn row;\n}\n\nexport function resourceLabel(snapshot: FrameGraphDebugViewModel, resourceId: string): string {\n\tconst resource = snapshot.resourceById.get(resourceId);\n\treturn resource ? labelResource(resource) : `resource-${resourceId}`;\n}\n"]}
|
|
1
|
+
{"version":3,"file":"panelWorkbenchHelpers.js","sourceRoot":"","sources":["../src/panelWorkbenchHelpers.ts"],"names":[],"mappings":"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","sourcesContent":["import type {\n\tFrameGraphDebugResource,\n\tFrameGraphDebugViewModel,\n} from './debugCaptureModel.ts';\nimport { createCell, formatBytes, labelResource } from './panelDomHelpers.ts';\nimport type { Selection } from './panelTypes.ts';\n\nexport type WorkbenchCallbacks = {\n\treadonly onSelect: (selection: Selection) => void;\n\treadonly onHover: (selection: Selection | undefined) => void;\n\treadonly onGroupToggle: (pathKey: string) => void;\n\treadonly isGroupExpanded: (pathKey: string) => boolean;\n};\nexport type WorkbenchTableColumn = {\n\treadonly label: string;\n\treadonly column?: 'code' | 'kind' | 'numeric';\n};\n\n\nexport function selectionKey(selection: Selection): string {\n\tswitch (selection.kind) {\n\t\tcase 'node': return `node:${selection.id}`;\n\t\tcase 'group': return `group:${selection.pathKey}`;\n\t\tcase 'resource': return `resource:${selection.id}`;\n\t\tcase 'root': return `root:${selection.key}`;\n\t\tcase 'culled': return `culled:${selection.index}`;\n\t\tcase 'allocation': return `allocation:${selection.id}`;\n\t\tcase 'segment': return `segment:${selection.index}`;\n\t}\n}\n\nexport function sameSelection(a: Selection | undefined, b: Selection | undefined): boolean {\n\treturn a === undefined || b === undefined ? a === b : selectionKey(a) === selectionKey(b);\n}\n\nexport function updateSelectedRows(rows: ReadonlyMap<string, readonly HTMLElement[]>, selected: Selection | undefined): void {\n\tconst key = selected ? selectionKey(selected) : undefined;\n\tfor (const [rowKey, elements] of rows) {\n\t\tfor (const element of elements) {\n\t\t\tconst active = rowKey === key;\n\t\t\telement.classList.toggle('selected', active);\n\t\t\tif (element.getAttribute('role') === 'option') {\n\t\t\t\telement.setAttribute('aria-selected', active ? 'true' : 'false');\n\t\t\t}\n\t\t}\n\t}\n}\n\nexport function registerSelectable(\n\trows: Map<string, HTMLElement[]>,\n\telement: HTMLElement,\n\tselection: Selection,\n\tcallbacks: WorkbenchCallbacks,\n): void {\n\tconst key = selectionKey(selection);\n\tconst elements = rows.get(key) ?? [];\n\telements.push(element);\n\trows.set(key, elements);\n\telement.dataset.selectionKey = key;\n\telement.addEventListener('mouseenter', () => callbacks.onHover(selection));\n\telement.addEventListener('mouseleave', () => callbacks.onHover(undefined));\n}\n\nexport function createViewToolbar(label: string): HTMLDivElement {\n\tconst toolbar = document.createElement('div');\n\ttoolbar.className = 'zenfg-inspector-view-toolbar';\n\ttoolbar.setAttribute('role', 'toolbar');\n\ttoolbar.setAttribute('aria-label', label);\n\treturn toolbar;\n}\n\nexport function createSearchInput(\n\tplaceholder: string,\n\tvalue: string,\n\tonInput: (value: string) => void,\n): HTMLInputElement {\n\tconst input = document.createElement('input');\n\tinput.type = 'search';\n\tinput.placeholder = placeholder;\n\tinput.value = value;\n\tinput.setAttribute('aria-label', placeholder);\n\tinput.addEventListener('input', () => onInput(input.value));\n\treturn input;\n}\n\nexport function createFilterSelect(\n\tlabel: string,\n\tvalue: string,\n\toptions: readonly (readonly [value: string, label: string])[],\n\tonChange: (value: string) => void,\n): HTMLSelectElement {\n\tconst select = document.createElement('select');\n\tselect.setAttribute('aria-label', label);\n\tfor (const [optionValue, optionLabel] of options) {\n\t\tconst option = document.createElement('option');\n\t\toption.value = optionValue;\n\t\toption.textContent = optionLabel;\n\t\tselect.appendChild(option);\n\t}\n\tselect.value = value;\n\tselect.addEventListener('change', () => onChange(select.value));\n\treturn select;\n}\n\nexport function createTableScroller(headers: readonly WorkbenchTableColumn[]): {\n\treadonly scroller: HTMLDivElement;\n\treadonly table: HTMLTableElement;\n\treadonly body: HTMLTableSectionElement;\n} {\n\tconst scroller = document.createElement('div');\n\tscroller.className = 'zenfg-inspector-table-scroller';\n\tconst table = document.createElement('table');\n\ttable.className = 'zenfg-inspector-workbench-table';\n\tconst head = document.createElement('thead');\n\tconst row = document.createElement('tr');\n\tfor (const header of headers) {\n\t\tconst cell = document.createElement('th');\n\t\tcell.textContent = header.label;\n\t\tif (header.column) cell.dataset.column = header.column;\n\t\trow.appendChild(cell);\n\t}\n\thead.appendChild(row);\n\tconst body = document.createElement('tbody');\n\ttable.append(head, body);\n\tscroller.appendChild(table);\n\treturn { scroller, table, body };\n}\n\nexport function createSelectionCell(\n\ttext: string,\n\tselection: Selection,\n\tcallbacks: WorkbenchCallbacks,\n\tcolumn?: WorkbenchTableColumn['column'],\n): HTMLTableCellElement {\n\tconst cell = document.createElement('td');\n\tconst button = createRelationButton(text, selection, callbacks.onSelect);\n\tcell.appendChild(button);\n\tif (column) cell.dataset.column = column;\n\treturn cell;\n}\n\nexport function createRelationButton(\n\ttext: string,\n\tselection: Selection,\n\tonSelect: (selection: Selection) => void,\n): HTMLButtonElement {\n\tconst button = document.createElement('button');\n\tbutton.type = 'button';\n\tbutton.className = 'zenfg-inspector-relation-button';\n\tbutton.textContent = text;\n\tbutton.addEventListener('click', () => onSelect(selection));\n\treturn button;\n}\n\nexport function createKindCell(kind: string, label = kind): HTMLTableCellElement {\n\tconst cell = createCell('', { column: 'kind', kind });\n\tconst marker = document.createElement('span');\n\tmarker.className = 'zenfg-inspector-kind-label';\n\tmarker.dataset.kind = kind;\n\tmarker.textContent = label;\n\tcell.appendChild(marker);\n\treturn cell;\n}\n\nexport function groupPath(snapshot: FrameGraphDebugViewModel, groupId: string | undefined): string {\n\tif (groupId === undefined) return '-';\n\treturn snapshot.groupById.get(groupId)?.path.join(' / ') ?? `group-${groupId}`;\n}\n\nexport function formatEstimatedBytes(bytes: number | undefined): string {\n\treturn bytes === undefined ? 'Unknown' : formatBytes(bytes);\n}\n\nexport function formatResourceDescriptor(resource: FrameGraphDebugResource): string {\n\tconst descriptor = resource.descriptor;\n\tif (!descriptor) return 'Unknown';\n\tif (resource.kind === 'buffer' && 'size' in descriptor && typeof descriptor.size === 'number') {\n\t\treturn `${formatBytes(descriptor.size)} buffer`;\n\t}\n\tif ('format' in descriptor) {\n\t\tconst size = descriptor.size;\n\t\tconst extent = `${size.width}×${size.height}×${size.depthOrArrayLayers}`;\n\t\tconst extras = [\n\t\t\tdescriptor.dimension !== '2d' ? descriptor.dimension : undefined,\n\t\t\tdescriptor.mipLevelCount > 1 ? `${descriptor.mipLevelCount} mips` : undefined,\n\t\t\tdescriptor.sampleCount > 1 ? `${descriptor.sampleCount}× MSAA` : undefined,\n\t\t\tdescriptor.viewFormats.length > 0 ? `views ${descriptor.viewFormats.join(', ')}` : undefined,\n\t\t].filter(Boolean);\n\t\treturn `${descriptor.format} · ${extent}${extras.length ? ` · ${extras.join(' · ')}` : ''}`;\n\t}\n\treturn 'Unknown';\n}\n\nexport function resourceAccessCounts(snapshot: FrameGraphDebugViewModel, resourceId: string): readonly [number, number] {\n\tlet reads = 0;\n\tlet writes = 0;\n\tfor (const access of snapshot.accessesByResourceId.get(resourceId) ?? []) {\n\t\tif (access.mode === 'read') reads++;\n\t\telse writes++;\n\t}\n\treturn [reads, writes];\n}\n\nexport function createEmptyTableRow(columnCount: number, text: string): HTMLTableRowElement {\n\tconst row = document.createElement('tr');\n\tconst cell = createCell(text);\n\tcell.colSpan = columnCount;\n\tcell.className = 'zenfg-inspector-empty-row';\n\trow.appendChild(cell);\n\treturn row;\n}\n\nexport function resourceLabel(snapshot: FrameGraphDebugViewModel, resourceId: string): string {\n\tconst resource = snapshot.resourceById.get(resourceId);\n\treturn resource ? labelResource(resource) : `resource-${resourceId}`;\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"panelWorkbenchView.d.ts","sourceRoot":"","sources":["../src/panelWorkbenchView.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"panelWorkbenchView.d.ts","sourceRoot":"","sources":["../src/panelWorkbenchView.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,wBAAwB,CAAC;AAcvE,OAAO,KAAK,EAAE,cAAc,EAAE,SAAS,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAC/E,OAAO,EAAwB,KAAK,kBAAkB,EAAE,MAAM,4BAA4B,CAAC;AAE3F,MAAM,MAAM,+BAA+B,GAAG;IAC7C,SAAS,IAAI,IAAI,CAAC;IAClB,QAAQ,CAAC,IAAI,EAAE,IAAI,GAAG,IAAI,CAAC;IAC3B,UAAU,IAAI,IAAI,CAAC;IACnB,UAAU,IAAI,IAAI,CAAC;CACnB,CAAC;AACF,MAAM,MAAM,+BAA+B,GAAG;IAC7C,QAAQ,EAAE,MAAM,GAAG,KAAK,CAAC;IACzB,QAAQ,EAAE,MAAM,CAAC;CACjB,CAAC;AACF,MAAM,MAAM,6BAA6B,GAAG,SAAS,GAAG,WAAW,GAAG,OAAO,GAAG,OAAO,CAAC;AAGxF,MAAM,MAAM,kCAAkC,GAAG;IAChD,iBAAiB,EAAE,OAAO,CAAC;IAC3B,UAAU,EAAE,OAAO,CAAC;IACpB,SAAS,EAAE,OAAO,CAAC;IACnB,SAAS,EAAE,OAAO,CAAC;IACnB,OAAO,EAAE,OAAO,CAAC;IACjB,MAAM,EAAE,OAAO,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,WAAW,CAAC,EAAE,SAAS,GAAG,OAAO,CAAC;CAClC,CAAC;AAEF,qBAAa,wBAAwB;IAmCnC,OAAO,CAAC,QAAQ,CAAC,SAAS;IAC1B,OAAO,CAAC,QAAQ,CAAC,SAAS;IAnC3B,QAAQ,CAAC,IAAI,iBAAiC;IAC9C,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAiC;IACzD,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAiC;IAC5D,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAiC;IACvD,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAiC;IACzD,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAiC;IAChE,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAkC;IAChE,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAiC;IAC3D,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAkC;IACvD,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAiC;IAC3D,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAqC;IAClE,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAqC;IAC/D,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAa;IACpC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAgB;IAC1C,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAa;IACpC,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAkB;IAC9C,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAgB;IAC1C,OAAO,CAAC,QAAQ,CAAC,mBAAmB,CAAoC;IACxE,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAoC;IAClE,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAoC;IACjE,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAmC;IAC/D,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAoC;IACjE,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAiC;IAC5D,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAoC;IACnE,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAoC;IAC/D,OAAO,CAAC,QAAQ,CAAC,UAAU,CAA8C;IACzE,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAwC;IAC9D,OAAO,CAAC,SAAS,CAAyB;IAC1C,OAAO,CAAC,WAAW,CAAS;IAC5B,OAAO,CAAC,QAAQ,CAAuC;IACvD,OAAO,CAAC,QAAQ,CAAwB;IACxC,OAAO,CAAC,OAAO,CAAwB;gBAGrB,SAAS,EAAE,cAAc,EACzB,SAAS,EAAE,kBAAkB,EAC9C,OAAO,EAAE,+BAA+B,EACxC,OAAO,EAAE,+BAA+B;IAoJzC,WAAW,CAAC,QAAQ,EAAE,wBAAwB,EAAE,QAAQ,EAAE,SAAS,GAAG,SAAS,GAAG,IAAI;IAsBtF,cAAc,CAAC,IAAI,EAAE,6BAA6B,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI;IAmB3F,sBAAsB,CAAC,KAAK,EAAE,kCAAkC,GAAG,IAAI;IAuCvE,YAAY,CAAC,QAAQ,EAAE,SAAS,GAAG,SAAS,GAAG,IAAI;IAUnD,UAAU,CAAC,OAAO,EAAE,SAAS,GAAG,SAAS,GAAG,IAAI;IAKhD,YAAY,CAAC,GAAG,EAAE,YAAY,GAAG,IAAI;IAYrC,qBAAqB,IAAI,IAAI;IAM7B,WAAW,CAAC,GAAG,UAAQ,GAAG,IAAI;IAQ9B,OAAO,CAAC,eAAe;IAYvB,OAAO,CAAC,WAAW;IAanB,OAAO,CAAC,aAAa;IAyDrB,OAAO,CAAC,kBAAkB;IAkB1B,OAAO,CAAC,iBAAiB;IAKzB,OAAO,CAAC,yBAAyB;IAKjC,OAAO,CAAC,oBAAoB;CAO5B"}
|
|
@@ -138,7 +138,8 @@ export class FrameGraphDebugWorkbench {
|
|
|
138
138
|
this.exportMenu.setAttribute('role', 'menu');
|
|
139
139
|
this.exportMenu.hidden = true;
|
|
140
140
|
this.downloadButton.type = 'button';
|
|
141
|
-
this.downloadButton.
|
|
141
|
+
this.downloadButton.className = 'zenfg-inspector-download-action';
|
|
142
|
+
setPanelButtonContent(this.downloadButton, 'download', 'Download JSON');
|
|
142
143
|
this.downloadButton.setAttribute('role', 'menuitem');
|
|
143
144
|
this.downloadButton.addEventListener('click', () => {
|
|
144
145
|
this.setExportMenuOpen(false);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"panelWorkbenchView.js","sourceRoot":"","sources":["../src/panelWorkbenchView.ts"],"names":[],"mappings":"AACA,OAAO,EACN,WAAW,EACX,sBAAsB,EACtB,iBAAiB,EACjB,SAAS,GACT,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAAE,eAAe,EAAE,qBAAqB,EAAE,MAAM,iBAAiB,CAAC;AACzE,OAAO,EAAE,eAAe,EAAE,MAAM,2BAA2B,CAAC;AAC5D,OAAO,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;AACxD,OAAO,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAClD,OAAO,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAClD,OAAO,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;AACxD,OAAO,EAAE,eAAe,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAEnE,OAAO,EAAE,oBAAoB,EAA2B,MAAM,4BAA4B,CAAC;AA0B3F,MAAM,OAAO,wBAAwB;IAmClB;IACA;IAnCT,IAAI,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;IAC7B,OAAO,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;IACxC,UAAU,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;IAC3C,KAAK,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;IACtC,OAAO,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;IACxC,cAAc,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;IAC/C,aAAa,GAAG,QAAQ,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC;IAC/C,SAAS,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;IAC1C,IAAI,GAAG,QAAQ,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC;IACtC,SAAS,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;IAC1C,YAAY,GAAG,QAAQ,CAAC,aAAa,CAAC,SAAS,CAAC,CAAC;IACjD,SAAS,GAAG,QAAQ,CAAC,aAAa,CAAC,SAAS,CAAC,CAAC;IAC9C,MAAM,CAAa;IACnB,SAAS,CAAgB;IACzB,MAAM,CAAa;IACnB,WAAW,CAAkB;IAC7B,SAAS,CAAgB;IACzB,mBAAmB,GAAG,QAAQ,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC;IACvD,aAAa,GAAG,QAAQ,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC;IACjD,YAAY,GAAG,QAAQ,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC;IAChD,WAAW,GAAG,QAAQ,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC;IAC9C,YAAY,GAAG,QAAQ,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC;IAChD,UAAU,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;IAC3C,cAAc,GAAG,QAAQ,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC;IAClD,UAAU,GAAG,QAAQ,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC;IAC9C,UAAU,GAAG,IAAI,GAAG,EAAmC,CAAC;IACxD,KAAK,GAAG,IAAI,GAAG,EAA6B,CAAC;IACtD,SAAS,GAAiB,OAAO,CAAC;IAClC,WAAW,GAAG,KAAK,CAAC;IACpB,QAAQ,CAAuC;IAC/C,QAAQ,CAAwB;IAChC,OAAO,CAAwB;IAEvC,YACkB,SAAyB,EACzB,SAA6B,EAC9C,OAAwC,EACxC,OAAwC;QAHvB,cAAS,GAAT,SAAS,CAAgB;QACzB,cAAS,GAAT,SAAS,CAAoB;QAI9C,IAAI,CAAC,IAAI,CAAC,SAAS,GAAG,2BAA2B,CAAC;QAClD,IAAI,CAAC,OAAO,CAAC,SAAS,GAAG,iCAAiC,CAAC;QAC3D,IAAI,CAAC,UAAU,CAAC,SAAS,GAAG,uCAAuC,CAAC;QACpE,IAAI,CAAC,KAAK,CAAC,SAAS,GAAG,uBAAuB,CAAC;QAC/C,IAAI,OAAO,CAAC,QAAQ,KAAK,KAAK;YAAE,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,GAAG,CAAC,iBAAiB,CAAC,CAAC;;YAC5E,IAAI,CAAC,KAAK,CAAC,WAAW,GAAG,OAAO,CAAC,QAAQ,CAAC;QAC/C,IAAI,CAAC,OAAO,CAAC,SAAS,GAAG,gCAAgC,CAAC;QAC1D,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;QAC7C,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,YAAY,EAAE,wBAAwB,CAAC,CAAC;QAClE,IAAI,CAAC,cAAc,CAAC,SAAS,GAAG,mCAAmC,CAAC;QACpE,IAAI,CAAC,cAAc,CAAC,YAAY,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;QACpD,IAAI,CAAC,cAAc,CAAC,YAAY,CAAC,YAAY,EAAE,qBAAqB,CAAC,CAAC;QACtE,IAAI,CAAC,aAAa,CAAC,SAAS,GAAG,gCAAgC,CAAC;QAChE,IAAI,CAAC,aAAa,CAAC,YAAY,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;QAClD,IAAI,CAAC,aAAa,CAAC,YAAY,CAAC,WAAW,EAAE,QAAQ,CAAC,CAAC;QACvD,IAAI,CAAC,SAAS,CAAC,SAAS,GAAG,0CAA0C,CAAC;QACtE,IAAI,CAAC,IAAI,CAAC,SAAS,GAAG,sBAAsB,CAAC;QAC7C,IAAI,CAAC,SAAS,CAAC,SAAS,GAAG,iCAAiC,CAAC;QAC7D,IAAI,CAAC,SAAS,CAAC,YAAY,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;QAC9C,IAAI,CAAC,SAAS,CAAC,YAAY,CAAC,WAAW,EAAE,QAAQ,CAAC,CAAC;QAEnD,IAAI,CAAC,YAAY,CAAC,SAAS,GAAG,oDAAoD,CAAC;QACnF,IAAI,CAAC,YAAY,CAAC,EAAE,GAAG,GAAG,OAAO,CAAC,QAAQ,gBAAgB,CAAC;QAC3D,IAAI,CAAC,YAAY,CAAC,YAAY,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;QACnD,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QACvC,IAAI,CAAC,SAAS,CAAC,SAAS,GAAG,iDAAiD,CAAC;QAC7E,IAAI,CAAC,SAAS,CAAC,EAAE,GAAG,GAAG,OAAO,CAAC,QAAQ,aAAa,CAAC;QACrD,IAAI,CAAC,SAAS,CAAC,YAAY,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;QAChD,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;QACnE,IAAI,CAAC,MAAM,GAAG,IAAI,UAAU,CAAC,SAAS,EAAE,OAAO,CAAC,QAAQ,CAAC,CAAC;QAC1D,IAAI,CAAC,SAAS,GAAG,IAAI,aAAa,CAAC,SAAS,EAAE,OAAO,CAAC,QAAQ,CAAC,CAAC;QAChE,IAAI,CAAC,MAAM,GAAG,IAAI,UAAU,CAAC,SAAS,EAAE,OAAO,CAAC,QAAQ,CAAC,CAAC;QAC1D,IAAI,CAAC,WAAW,GAAG,IAAI,eAAe,CAAC,SAAS,EAAE,OAAO,CAAC,QAAQ,CAAC,CAAC;QACpE,IAAI,CAAC,SAAS,GAAG,IAAI,aAAa,CAAC,SAAS,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,yBAAyB,CAAC,IAAI,CAAC,EAAE,OAAO,CAAC,QAAQ,CAAC,CAAC;QAEhH,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,UAAU,EAAE,IAAI,CAAC,YAAY,CAAC,CAAC;QAC9C,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,OAAO,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC;QACxC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,QAAQ,EAAE,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QAC3C,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,WAAW,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;QACjD,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,QAAQ,EAAE,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QAC3C,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,aAAa,EAAE,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;QACrD,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI;YAC1B,CAAC,UAAU,EAAE,UAAU,CAAC;YACxB,CAAC,OAAO,EAAE,OAAO,CAAC;YAClB,CAAC,QAAQ,EAAE,QAAQ,CAAC;YACpB,CAAC,WAAW,EAAE,WAAW,CAAC;YAC1B,CAAC,QAAQ,EAAE,QAAQ,CAAC;YACpB,CAAC,aAAa,EAAE,aAAa,CAAC;SACrB,EAAE,CAAC;YACZ,MAAM,MAAM,GAAG,QAAQ,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC;YAChD,MAAM,CAAC,IAAI,GAAG,QAAQ,CAAC;YACvB,MAAM,CAAC,EAAE,GAAG,GAAG,OAAO,CAAC,QAAQ,QAAQ,GAAG,EAAE,CAAC;YAC7C,MAAM,CAAC,WAAW,GAAG,KAAK,CAAC;YAC3B,MAAM,CAAC,YAAY,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;YACnC,MAAM,CAAC,YAAY,CAAC,eAAe,EAAE,GAAG,OAAO,CAAC,QAAQ,SAAS,GAAG,EAAE,CAAC,CAAC;YACxE,MAAM,CAAC,gBAAgB,CAAC,OAAO,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC;YAC/D,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;YACjC,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;QAClC,CAAC;QAED,IAAI,CAAC,mBAAmB,CAAC,IAAI,GAAG,QAAQ,CAAC;QACzC,IAAI,CAAC,mBAAmB,CAAC,MAAM,GAAG,IAAI,CAAC;QACvC,IAAI,CAAC,mBAAmB,CAAC,SAAS,GAAG,gCAAgC,CAAC;QACtE,qBAAqB,CAAC,IAAI,CAAC,mBAAmB,EAAE,WAAW,EAAE,WAAW,CAAC,CAAC;QAC1E,IAAI,CAAC,mBAAmB,CAAC,KAAK,GAAG,0BAA0B,CAAC;QAC5D,IAAI,CAAC,mBAAmB,CAAC,gBAAgB,CAAC,OAAO,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC;QAEvF,IAAI,CAAC,aAAa,CAAC,IAAI,GAAG,QAAQ,CAAC;QACnC,IAAI,CAAC,aAAa,CAAC,SAAS,GAAG,gCAAgC,CAAC;QAChE,IAAI,CAAC,aAAa,CAAC,gBAAgB,CAAC,OAAO,EAAE,OAAO,CAAC,SAAS,CAAC,CAAC;QAChE,IAAI,CAAC,YAAY,CAAC,IAAI,GAAG,QAAQ,CAAC;QAClC,IAAI,CAAC,YAAY,CAAC,WAAW,GAAG,QAAQ,CAAC;QACzC,IAAI,CAAC,YAAY,CAAC,gBAAgB,CAAC,OAAO,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,WAAW,CAAC,KAAK,EAAE,CAAC,CAAC;QAC5E,IAAI,CAAC,WAAW,CAAC,IAAI,GAAG,MAAM,CAAC;QAC/B,IAAI,CAAC,WAAW,CAAC,MAAM,GAAG,yCAAyC,CAAC;QACpE,IAAI,CAAC,WAAW,CAAC,MAAM,GAAG,IAAI,CAAC;QAC/B,IAAI,CAAC,WAAW,CAAC,gBAAgB,CAAC,QAAQ,EAAE,GAAG,EAAE;YAChD,MAAM,IAAI,GAAG,IAAI,CAAC,WAAW,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC;YACzC,IAAI,CAAC,WAAW,CAAC,KAAK,GAAG,EAAE,CAAC;YAC5B,IAAI,IAAI;gBAAE,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;QAClC,CAAC,CAAC,CAAC;QACH,IAAI,CAAC,YAAY,CAAC,IAAI,GAAG,QAAQ,CAAC;QAClC,IAAI,CAAC,YAAY,CAAC,WAAW,GAAG,QAAQ,CAAC;QACzC,IAAI,CAAC,YAAY,CAAC,YAAY,CAAC,eAAe,EAAE,MAAM,CAAC,CAAC;QACxD,IAAI,CAAC,YAAY,CAAC,YAAY,CAAC,eAAe,EAAE,OAAO,CAAC,CAAC;QACzD,IAAI,CAAC,YAAY,CAAC,YAAY,CAAC,eAAe,EAAE,GAAG,OAAO,CAAC,QAAQ,cAAc,CAAC,CAAC;QACnF,IAAI,CAAC,YAAY,CAAC,gBAAgB,CAAC,OAAO,EAAE,GAAG,EAAE;YAChD,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,UAAU,CAAC,MAAM,KAAK,KAAK,CAAC,CAAC;QAC1D,CAAC,CAAC,CAAC;QACH,IAAI,CAAC,UAAU,CAAC,SAAS,GAAG,6BAA6B,CAAC;QAC1D,IAAI,CAAC,UAAU,CAAC,EAAE,GAAG,GAAG,OAAO,CAAC,QAAQ,cAAc,CAAC;QACvD,IAAI,CAAC,UAAU,CAAC,YAAY,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QAC7C,IAAI,CAAC,UAAU,CAAC,MAAM,GAAG,IAAI,CAAC;QAC9B,IAAI,CAAC,cAAc,CAAC,IAAI,GAAG,QAAQ,CAAC;QACpC,IAAI,CAAC,cAAc,CAAC,WAAW,GAAG,eAAe,CAAC;QAClD,IAAI,CAAC,cAAc,CAAC,YAAY,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;QACrD,IAAI,CAAC,cAAc,CAAC,gBAAgB,CAAC,OAAO,EAAE,GAAG,EAAE;YAClD,IAAI,CAAC,iBAAiB,CAAC,KAAK,CAAC,CAAC;YAC9B,OAAO,CAAC,UAAU,EAAE,CAAC;QACtB,CAAC,CAAC,CAAC;QACH,IAAI,CAAC,UAAU,CAAC,IAAI,GAAG,QAAQ,CAAC;QAChC,IAAI,CAAC,UAAU,CAAC,SAAS,GAAG,6BAA6B,CAAC;QAC1D,IAAI,CAAC,UAAU,CAAC,WAAW,GAAG,WAAW,CAAC;QAC1C,IAAI,CAAC,UAAU,CAAC,YAAY,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;QACjD,IAAI,CAAC,UAAU,CAAC,gBAAgB,CAAC,OAAO,EAAE,GAAG,EAAE;YAC9C,IAAI,CAAC,iBAAiB,CAAC,KAAK,CAAC,CAAC;YAC9B,OAAO,CAAC,UAAU,EAAE,CAAC;QACtB,CAAC,CAAC,CAAC;QACH,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,IAAI,CAAC,cAAc,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC;QAE7D,IAAI,CAAC,cAAc,CAAC,MAAM,CACzB,IAAI,CAAC,aAAa,EAClB,IAAI,CAAC,mBAAmB,EACxB,IAAI,CAAC,aAAa,EAClB,IAAI,CAAC,YAAY,EACjB,IAAI,CAAC,YAAY,EACjB,IAAI,CAAC,WAAW,CAChB,CAAC;QACF,IAAI,OAAO,CAAC,QAAQ,KAAK,KAAK;YAAE,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,cAAc,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC;;YACtG,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,cAAc,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC;QAC5F,IAAI,CAAC,IAAI,CAAC,gBAAgB,CAAC,OAAO,EAAE,CAAC,KAAK,EAAE,EAAE;YAC7C,MAAM,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC;YAC5B,IAAI,CAAC,MAAM,IAAI,OAAQ,MAAe,CAAC,QAAQ,KAAK,QAAQ,IAAI,IAAI,CAAC,UAAU,CAAC,MAAM;gBAAE,OAAO;YAC/F,MAAM,UAAU,GAAG,MAAc,CAAC;YAClC,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,UAAU,CAAC;gBAAE,IAAI,CAAC,iBAAiB,CAAC,KAAK,CAAC,CAAC;QACrH,CAAC,CAAC,CAAC;QACH,IAAI,CAAC,IAAI,CAAC,gBAAgB,CAAC,SAAS,EAAE,CAAC,KAAK,EAAE,EAAE;YAC/C,IAAI,KAAK,CAAC,GAAG,KAAK,QAAQ,IAAI,IAAI,CAAC,UAAU,CAAC,MAAM;gBAAE,OAAO;YAC7D,IAAI,CAAC,iBAAiB,CAAC,KAAK,CAAC,CAAC;YAC9B,IAAI,CAAC,YAAY,CAAC,KAAK,EAAE,CAAC;QAC3B,CAAC,CAAC,CAAC;QACH,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC;QACzD,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;QACtD,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC;QAClD,IAAI,CAAC,cAAc,CAAC,OAAO,EAAE,8CAA8C,EAAE,8CAA8C,CAAC,CAAC;QAC7H,IAAI,CAAC,sBAAsB,CAAC;YAC3B,iBAAiB,EAAE,KAAK;YACxB,UAAU,EAAE,KAAK;YACjB,SAAS,EAAE,KAAK;YAChB,SAAS,EAAE,KAAK;YAChB,OAAO,EAAE,KAAK;YACd,MAAM,EAAE,KAAK;SACb,CAAC,CAAC;IACJ,CAAC;IAED,WAAW,CAAC,QAAkC,EAAE,QAA+B;QAC9E,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC;QACxB,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;QACzB,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;QACzB,IAAI,CAAC,OAAO,GAAG,SAAS,CAAC;QACzB,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC;QAC7B,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC;QAClC,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC;QACrC,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC;QAClC,IAAI,CAAC,WAAW,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC;QACvC,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC;QACrC,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC;QACnC,IAAI,CAAC,SAAS,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC;QACtC,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC;QACnC,IAAI,CAAC,WAAW,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC;QACxC,IAAI,CAAC,SAAS,CAAC,YAAY,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;QAC7C,IAAI,CAAC,SAAS,CAAC,MAAM,GAAG,IAAI,CAAC;QAC7B,IAAI,CAAC,eAAe,EAAE,CAAC;QACvB,IAAI,CAAC,oBAAoB,EAAE,CAAC;QAC5B,IAAI,IAAI,CAAC,SAAS,KAAK,OAAO;YAAE,IAAI,CAAC,WAAW,EAAE,CAAC;IACpD,CAAC;IAED,cAAc,CAAC,IAAmC,EAAE,OAAe,EAAE,MAAe;QACnF,IAAI,CAAC,WAAW,GAAG,KAAK,CAAC;QACzB,IAAI,CAAC,QAAQ,GAAG,SAAS,CAAC;QAC1B,IAAI,CAAC,QAAQ,GAAG,SAAS,CAAC;QAC1B,IAAI,CAAC,OAAO,GAAG,SAAS,CAAC;QACzB,IAAI,CAAC,SAAS,CAAC,MAAM,GAAG,KAAK,CAAC;QAC9B,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,KAAK,GAAG,IAAI,CAAC;QACpC,MAAM,IAAI,GAAG,eAAe,CAAC,IAAI,KAAK,WAAW,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,KAAK,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC;QACvI,MAAM,KAAK,GAAG,QAAQ,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC;QAC7C,KAAK,CAAC,SAAS,GAAG,+BAA+B,CAAC;QAClD,KAAK,CAAC,WAAW,GAAG,OAAO,CAAC;QAC5B,MAAM,WAAW,GAAG,QAAQ,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC;QACnD,WAAW,CAAC,SAAS,GAAG,8BAA8B,CAAC;QACvD,WAAW,CAAC,WAAW,GAAG,MAAM,IAAI,EAAE,CAAC;QACvC,IAAI,CAAC,SAAS,CAAC,eAAe,CAAC,IAAI,EAAE,KAAK,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;QAC9E,IAAI,CAAC,eAAe,EAAE,CAAC;QACvB,IAAI,CAAC,oBAAoB,EAAE,CAAC;IAC7B,CAAC;IAED,sBAAsB,CAAC,KAAyC;QAC/D,MAAM,YAAY,GAAG,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,SAAS,CAAC;QAChE,qBAAqB,CAAC,IAAI,CAAC,aAAa,EAAE,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS,EAAE,YAAY,CAAC,CAAC;QACjG,IAAI,CAAC,aAAa,CAAC,QAAQ,GAAG,KAAK,CAAC,SAAS,IAAI,CAAC,KAAK,CAAC,iBAAiB,CAAC;QAC1E,IAAI,CAAC,aAAa,CAAC,MAAM,GAAG,CAAC,KAAK,CAAC,iBAAiB,CAAC;QACrD,IAAI,CAAC,aAAa,CAAC,SAAS,CAAC,MAAM,CAAC,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC,CAAC;QAC/D,IAAI,CAAC,aAAa,CAAC,YAAY,CAAC,WAAW,EAAE,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC;QACjF,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,IAAI,GAAG,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,QAAQ,CAAC;QACzE,IAAI,CAAC,aAAa,CAAC,KAAK,GAAG,CAAC,KAAK,CAAC,iBAAiB;YAClD,CAAC,CAAC,0CAA0C;YAC5C,CAAC,CAAC,KAAK,CAAC,SAAS;gBAChB,CAAC,CAAC,oCAAoC;gBACtC,CAAC,CAAC,8CAA8C,CAAC;QAEnD,IAAI,CAAC,YAAY,CAAC,WAAW,GAAG,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,QAAQ,CAAC;QAC1E,IAAI,CAAC,YAAY,CAAC,QAAQ,GAAG,KAAK,CAAC,SAAS,CAAC;QAC7C,IAAI,CAAC,YAAY,CAAC,YAAY,CAAC,WAAW,EAAE,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC;QAChF,IAAI,CAAC,YAAY,CAAC,QAAQ,GAAG,CAAC,KAAK,CAAC,UAAU,CAAC;QAC/C,IAAI,CAAC,cAAc,CAAC,QAAQ,GAAG,CAAC,KAAK,CAAC,UAAU,CAAC;QACjD,IAAI,CAAC,KAAK,CAAC,UAAU;YAAE,IAAI,CAAC,iBAAiB,CAAC,KAAK,CAAC,CAAC;QAErD,MAAM,SAAS,GAAG,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,WAAW,CAAC;QACrF,MAAM,QAAQ,GAAG,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC;QAC7E,qBAAqB,CAAC,IAAI,CAAC,UAAU,EAAE,QAAQ,EAAE,SAAS,CAAC,CAAC;QAC5D,IAAI,CAAC,UAAU,CAAC,QAAQ,GAAG,CAAC,KAAK,CAAC,UAAU,IAAI,KAAK,CAAC,OAAO,CAAC;QAC9D,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,MAAM,CAAC,QAAQ,EAAE,KAAK,CAAC,OAAO,IAAI,KAAK,CAAC,MAAM,CAAC,CAAC;QAC1E,IAAI,CAAC,UAAU,CAAC,YAAY,CAAC,WAAW,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC;QAC5E,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,IAAI,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC;QAChG,IAAI,CAAC,UAAU,CAAC,KAAK,GAAG,KAAK,CAAC,UAAU;YACvC,CAAC,CAAC,sDAAsD;YACxD,CAAC,CAAC,mCAAmC,CAAC;QAEvC,IAAI,CAAC,aAAa,CAAC,WAAW,GAAG,KAAK,CAAC,OAAO,IAAI,EAAE,CAAC;QACrD,IAAI,CAAC,aAAa,CAAC,MAAM,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC;QAC3C,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,IAAI,GAAG,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,WAAW,IAAI,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC;QAC3F,IAAI,KAAK,CAAC,OAAO;YAAE,IAAI,CAAC,aAAa,CAAC,KAAK,GAAG,KAAK,CAAC,OAAO,CAAC;;YACvD,IAAI,CAAC,aAAa,CAAC,eAAe,CAAC,OAAO,CAAC,CAAC;IAClD,CAAC;IAED,YAAY,CAAC,QAA+B;QAC3C,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;QACzB,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC;QACnC,IAAI,CAAC,SAAS,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC;QACtC,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC;QACnC,IAAI,CAAC,WAAW,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC;QACxC,IAAI,CAAC,SAAS,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC;QACtC,IAAI,IAAI,CAAC,SAAS,KAAK,OAAO;YAAE,IAAI,CAAC,WAAW,EAAE,CAAC;IACpD,CAAC;IAED,UAAU,CAAC,OAA8B;QACxC,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;QACvB,IAAI,IAAI,CAAC,SAAS,KAAK,OAAO;YAAE,IAAI,CAAC,WAAW,EAAE,CAAC;IACpD,CAAC;IAED,YAAY,CAAC,GAAiB;QAC7B,IAAI,IAAI,CAAC,SAAS,KAAK,GAAG;YAAE,OAAO;QACnC,IAAI,CAAC,SAAS,GAAG,GAAG,CAAC;QACrB,IAAI,CAAC,eAAe,EAAE,CAAC;QACvB,IAAI,GAAG,KAAK,OAAO,EAAE,CAAC;YACrB,MAAM,CAAC,qBAAqB,CAAC,GAAG,EAAE;gBACjC,WAAW,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;gBAC5B,IAAI,CAAC,WAAW,EAAE,CAAC;YACpB,CAAC,CAAC,CAAC;QACJ,CAAC;IACF,CAAC;IAED,qBAAqB;QACpB,IAAI,CAAC,IAAI,CAAC,QAAQ;YAAE,OAAO;QAC3B,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QACvC,IAAI,IAAI,CAAC,SAAS,KAAK,OAAO;YAAE,IAAI,CAAC,WAAW,EAAE,CAAC;IACpD,CAAC;IAED,WAAW,CAAC,GAAG,GAAG,KAAK;QACtB,IAAI,GAAG;YAAE,IAAI,CAAC,SAAS,CAAC,eAAe,GAAG,IAAI,CAAC;QAC/C,MAAM,CAAC,qBAAqB,CAAC,GAAG,EAAE;YACjC,WAAW,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;YAC5B,IAAI,IAAI,CAAC,SAAS,KAAK,OAAO;gBAAE,IAAI,CAAC,WAAW,EAAE,CAAC;QACpD,CAAC,CAAC,CAAC;IACJ,CAAC;IAEO,eAAe;QACtB,KAAK,MAAM,CAAC,GAAG,EAAE,MAAM,CAAC,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC;YAC7C,MAAM,MAAM,GAAG,GAAG,KAAK,IAAI,CAAC,SAAS,CAAC;YACtC,MAAM,CAAC,QAAQ,GAAG,CAAC,IAAI,CAAC,WAAW,CAAC;YACpC,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;YAC1C,MAAM,CAAC,YAAY,CAAC,eAAe,EAAE,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC;YAChE,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAE,CAAC;YAClC,IAAI,CAAC,MAAM,GAAG,CAAC,IAAI,CAAC,WAAW,IAAI,CAAC,MAAM,CAAC;YAC3C,IAAI,CAAC,YAAY,CAAC,iBAAiB,EAAE,MAAM,CAAC,EAAE,CAAC,CAAC;QACjD,CAAC;IACF,CAAC;IAEO,WAAW;QAClB,IAAI,CAAC,IAAI,CAAC,QAAQ;YAAE,OAAO;QAC3B,eAAe,CACd,IAAI,CAAC,SAAS,EACd,IAAI,CAAC,QAAQ,EACb,IAAI,CAAC,QAAQ,EACb,IAAI,CAAC,OAAO,EACZ,IAAI,CAAC,SAAS,CAAC,QAAQ,EACvB,IAAI,CAAC,SAAS,CAAC,OAAO,EACtB,IAAI,CAAC,SAAS,CAAC,aAAa,CAC5B,CAAC;IACH,CAAC;IAEO,aAAa,CAAC,QAAkC;QACvD,MAAM,kBAAkB,GAAG,QAAQ,CAAC,iBAAiB,CAAC,MAAM,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,IAAI,KAAK,aAAa,CAAC,CAAC,MAAM,CAAC;QACjH,MAAM,eAAe,GAAG,QAAQ,CAAC,iBAAiB,CAAC,MAAM,GAAG,kBAAkB,CAAC;QAC/E,MAAM,OAAO,GAAG,QAAQ,CAAC,OAAO,CAAC;QACjC,MAAM,QAAQ,GAAG,OAAO,CAAC,uBAAuB,KAAK,CAAC;YACrD,CAAC,CAAC,oBAAoB;YACtB,CAAC,CAAC,GAAG,OAAO,CAAC,cAAc,IAAI,OAAO,CAAC,uBAAuB,QAAQ,CAAC;QACxE,MAAM,OAAO,GAAG,OAAO,CAAC,WAAW;YAClC,CAAC,CAAC,GAAG,SAAS,CAAC,OAAO,CAAC,WAAW,CAAC,MAAM,CAAC,OAAO,CAAC,WAAW,CAAC,iBAAkB,GAAG,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK;YACxG,CAAC,CAAC,SAAS,CAAC;QACb,MAAM,QAAQ,GAAG,QAAQ,CAAC,QAAQ,CAAC;QACnC,MAAM,OAAO,GAAG,QAAQ,CAAC,QAAQ,CAAC,OAAO,CAAC;QAC1C,MAAM,QAAQ,GAAG;YAChB,QAAQ,CAAC,QAAQ,CAAC,IAAI;YACtB,QAAQ,CAAC,QAAQ,CAAC,OAAO;YACzB,QAAQ,CAAC,QAAQ,CAAC,QAAQ;SAC1B,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAC9B,MAAM,YAAY,GAAG,OAAO;YAC3B,CAAC,CAAC,CAAC,OAAO,CAAC,cAAc,EAAE,OAAO,CAAC,WAAW,EAAE,OAAO,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,SAAS;YACzG,CAAC,CAAC,SAAS,CAAC;QACb,MAAM,YAAY,GAAG,QAAQ,CAAC,YAAY,CAAC,MAAM,KAAK,WAAW;YAChE,CAAC,CAAC,GAAG,QAAQ,CAAC,YAAY,CAAC,sBAAsB,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,WAAW,CAAC,QAAQ,CAAC,YAAY,CAAC,sBAAsB,CAAC,MAAM,QAAQ,CAAC,YAAY,CAAC,aAAa,cAAc;YAC9L,CAAC,CAAC,aAAa,CAAC;QACjB,IAAI,CAAC,OAAO,CAAC,eAAe,CAC3B,IAAI,CAAC,kBAAkB,CAAC,SAAS,EAAE;YAClC,CAAC,QAAQ,EAAE,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC;YACjC,CAAC,QAAQ,EAAE,GAAG,QAAQ,CAAC,MAAM,KAAK,QAAQ,CAAC,OAAO,CAAC,KAAK,IAAI,QAAQ,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;YACrF,CAAC,UAAU,EAAE,QAAQ,CAAC;YACtB,CAAC,SAAS,EAAE,YAAY,CAAC;YACzB,CAAC,OAAO,EAAE,MAAM,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC;YACtC,GAAG,CAAC,QAAQ,CAAC,MAAM,CAAC,kBAAkB,CAAC,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,gBAAgB,CAAU,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;YACzF,CAAC,QAAQ,EAAE,QAAQ,CAAC,SAAS,CAAC,MAAM,KAAK,WAAW,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,QAAQ,CAAC,SAAS,CAAC,MAAM,CAAC;SAC/F,CAAC,EACF,IAAI,CAAC,kBAAkB,CAAC,KAAK,EAAE;YAC9B,CAAC,UAAU,EAAE,QAAQ,CAAC,SAAS,CAAC,MAAM,KAAK,WAAW,CAAC,CAAC,CAAC,GAAG,sBAAsB,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC;YAC9G,CAAC,UAAU,EAAE,QAAQ,CAAC;YACtB,CAAC,SAAS,EAAE,OAAO,CAAC;SACpB,CAAC,EACF,IAAI,CAAC,kBAAkB,CAAC,MAAM,EAAE;YAC/B,CAAC,OAAO,EAAE,GAAG,QAAQ,CAAC,KAAK,CAAC,MAAM,eAAe,QAAQ,CAAC,WAAW,CAAC,MAAM,SAAS,CAAC;YACtF,CAAC,UAAU,EAAE,GAAG,kBAAkB,SAAS,eAAe,SAAS,CAAC;YACpE,CAAC,QAAQ,EAAE,QAAQ,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;YAC1F,CAAC,iBAAiB,EAAE,QAAQ,CAAC,YAAY,CAAC,cAAc,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,SAAS,CAAC;SACnF,CAAC,EACF,IAAI,CAAC,kBAAkB,CAAC,WAAW,EAAE;YACpC,CAAC,oBAAoB,EAAE,GAAG,QAAQ,CAAC,SAAS,CAAC,MAAM,MAAM,QAAQ,CAAC,mBAAmB,CAAC,MAAM,EAAE,CAAC;YAC/F,CAAC,eAAe,EAAE,QAAQ,CAAC,YAAY,CAAC,YAAY,CAAC,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;YACzG,CAAC,gBAAgB,EAAE,QAAQ,CAAC,YAAY,CAAC,aAAa,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,SAAS,CAAC;YACjF,CAAC,oBAAoB,EAAE,oBAAoB,CAAC,OAAO,CAAC,0BAA0B,CAAC,CAAC;SAChF,CAAC,EACF,IAAI,CAAC,kBAAkB,CAAC,MAAM,EAAE;YAC/B,CAAC,UAAU,EAAE,YAAY,CAAC;YAC1B,CAAC,OAAO,EAAE,iBAAiB,CAAC,QAAQ,CAAC,CAAC;SACtC,CAAC,CACF,CAAC;IACH,CAAC;IAEO,kBAAkB,CAAC,KAAa,EAAE,IAA4C;QACrF,MAAM,KAAK,GAAG,QAAQ,CAAC,aAAa,CAAC,SAAS,CAAC,CAAC;QAChD,MAAM,OAAO,GAAG,QAAQ,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC;QAC7C,OAAO,CAAC,WAAW,GAAG,KAAK,CAAC;QAC5B,KAAK,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;QAC3B,KAAK,MAAM,CAAC,KAAK,EAAE,KAAK,CAAC,IAAI,IAAI,EAAE,CAAC;YACnC,MAAM,GAAG,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;YAC1C,MAAM,IAAI,GAAG,QAAQ,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC;YAC5C,IAAI,CAAC,WAAW,GAAG,KAAK,CAAC;YACzB,MAAM,WAAW,GAAG,QAAQ,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC;YACrD,WAAW,CAAC,WAAW,GAAG,KAAK,CAAC;YAChC,WAAW,CAAC,KAAK,GAAG,KAAK,CAAC;YAC1B,GAAG,CAAC,MAAM,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC;YAC9B,KAAK,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;QACxB,CAAC;QACD,OAAO,KAAK,CAAC;IACd,CAAC;IAEO,iBAAiB,CAAC,IAAa;QACtC,IAAI,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC,IAAI,CAAC;QAC/B,IAAI,CAAC,YAAY,CAAC,YAAY,CAAC,eAAe,EAAE,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC;IAC1E,CAAC;IAEO,yBAAyB,CAAC,KAAc;QAC/C,IAAI,CAAC,oBAAoB,EAAE,CAAC;QAC5B,IAAI,IAAI,CAAC,SAAS,KAAK,OAAO;YAAE,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;IACzD,CAAC;IAEO,oBAAoB;QAC3B,MAAM,aAAa,GAAG,IAAI,CAAC,WAAW,IAAI,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC;QAChE,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,MAAM,CAAC,aAAa,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC;QACjE,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,MAAM,CAAC,gBAAgB,EAAE,aAAa,CAAC,CAAC;QACjE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,aAAa,EAAE,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;QACvE,IAAI,CAAC,mBAAmB,CAAC,MAAM,GAAG,CAAC,IAAI,CAAC,WAAW,IAAI,aAAa,CAAC;IACtE,CAAC;CACD","sourcesContent":["import type { FrameGraphDebugViewModel } from './debugCaptureModel.ts';\nimport {\n\tformatBytes,\n\tformatGpuFrameDuration,\n\tformatPoolHitRate,\n\tlabelNode,\n} from './panelDomHelpers.ts';\nimport { createPanelIcon, setPanelButtonContent } from './panelIcons.ts';\nimport { DiagnosticsView } from './panelDiagnosticsView.ts';\nimport { InspectorView } from './panelInspectorView.ts';\nimport { MemoryView } from './panelMemoryView.ts';\nimport { PassesView } from './panelPassesView.ts';\nimport { ResourcesView } from './panelResourcesView.ts';\nimport { renderGraphView, resizeGraph } from './panelGraphView.ts';\nimport type { GraphViewState, Selection, WorkbenchTab } from './panelTypes.ts';\nimport { formatEstimatedBytes, type WorkbenchCallbacks } from './panelWorkbenchHelpers.ts';\n\nexport type FrameGraphDebugWorkbenchActions = {\n\tonCapture(): void;\n\tonImport(file: File): void;\n\tonDownload(): void;\n\tonCopyJson(): void;\n};\nexport type FrameGraphDebugWorkbenchOptions = {\n\tbranding: string | false;\n\tidPrefix: string;\n};\nexport type FrameGraphDebugEmptyStateKind = 'waiting' | 'capturing' | 'empty' | 'error';\n\n\nexport type FrameGraphDebugSnapshotActionState = {\n\tproviderAvailable: boolean;\n\thasCapture: boolean;\n\tcapturing: boolean;\n\timporting: boolean;\n\tcopying: boolean;\n\tcopied: boolean;\n\tmessage?: string;\n\tmessageTone?: 'neutral' | 'error';\n};\n\nexport class FrameGraphDebugWorkbench {\n\treadonly root = document.createElement('div');\n\tprivate readonly summary = document.createElement('div');\n\tprivate readonly commandBar = document.createElement('div');\n\tprivate readonly brand = document.createElement('div');\n\tprivate readonly tabList = document.createElement('div');\n\tprivate readonly commandActions = document.createElement('div');\n\tprivate readonly commandStatus = document.createElement('span');\n\tprivate readonly workspace = document.createElement('div');\n\tprivate readonly main = document.createElement('main');\n\tprivate readonly emptyHost = document.createElement('div');\n\tprivate readonly overviewRoot = document.createElement('section');\n\tprivate readonly graphRoot = document.createElement('section');\n\tprivate readonly passes: PassesView;\n\tprivate readonly resources: ResourcesView;\n\tprivate readonly memory: MemoryView;\n\tprivate readonly diagnostics: DiagnosticsView;\n\tprivate readonly inspector: InspectorView;\n\tprivate readonly inspectorOpenButton = document.createElement('button');\n\tprivate readonly captureButton = document.createElement('button');\n\tprivate readonly importButton = document.createElement('button');\n\tprivate readonly importInput = document.createElement('input');\n\tprivate readonly exportButton = document.createElement('button');\n\tprivate readonly exportMenu = document.createElement('div');\n\tprivate readonly downloadButton = document.createElement('button');\n\tprivate readonly copyButton = document.createElement('button');\n\tprivate readonly tabButtons = new Map<WorkbenchTab, HTMLButtonElement>();\n\tprivate readonly views = new Map<WorkbenchTab, HTMLElement>();\n\tprivate activeTab: WorkbenchTab = 'graph';\n\tprivate hasSnapshot = false;\n\tprivate snapshot: FrameGraphDebugViewModel | undefined;\n\tprivate selected: Selection | undefined;\n\tprivate hovered: Selection | undefined;\n\n\tconstructor(\n\t\tprivate readonly graphView: GraphViewState,\n\t\tprivate readonly callbacks: WorkbenchCallbacks,\n\t\tactions: FrameGraphDebugWorkbenchActions,\n\t\toptions: FrameGraphDebugWorkbenchOptions,\n\t) {\n\t\tthis.root.className = 'zenfg-inspector-workbench';\n\t\tthis.summary.className = 'zenfg-inspector-capture-summary';\n\t\tthis.commandBar.className = 'zenfg-inspector-workbench-command-bar';\n\t\tthis.brand.className = 'zenfg-inspector-brand';\n\t\tif (options.branding === false) this.commandBar.classList.add('branding-hidden');\n\t\telse this.brand.textContent = options.branding;\n\t\tthis.tabList.className = 'zenfg-inspector-workbench-tabs';\n\t\tthis.tabList.setAttribute('role', 'tablist');\n\t\tthis.tabList.setAttribute('aria-label', 'FrameGraph debug views');\n\t\tthis.commandActions.className = 'zenfg-inspector-workbench-actions';\n\t\tthis.commandActions.setAttribute('role', 'toolbar');\n\t\tthis.commandActions.setAttribute('aria-label', 'FrameGraph commands');\n\t\tthis.commandStatus.className = 'zenfg-inspector-command-status';\n\t\tthis.commandStatus.setAttribute('role', 'status');\n\t\tthis.commandStatus.setAttribute('aria-live', 'polite');\n\t\tthis.workspace.className = 'zenfg-inspector-workspace inspector-open';\n\t\tthis.main.className = 'zenfg-inspector-main';\n\t\tthis.emptyHost.className = 'zenfg-inspector-workbench-empty';\n\t\tthis.emptyHost.setAttribute('role', 'status');\n\t\tthis.emptyHost.setAttribute('aria-live', 'polite');\n\n\t\tthis.overviewRoot.className = 'zenfg-inspector-view zenfg-inspector-overview-view';\n\t\tthis.overviewRoot.id = `${options.idPrefix}-view-overview`;\n\t\tthis.overviewRoot.setAttribute('role', 'tabpanel');\n\t\tthis.overviewRoot.append(this.summary);\n\t\tthis.graphRoot.className = 'zenfg-inspector-view zenfg-inspector-graph-view';\n\t\tthis.graphRoot.id = `${options.idPrefix}-view-graph`;\n\t\tthis.graphRoot.setAttribute('role', 'tabpanel');\n\t\tthis.graphRoot.append(this.graphView.toolbar, this.graphView.host);\n\t\tthis.passes = new PassesView(callbacks, options.idPrefix);\n\t\tthis.resources = new ResourcesView(callbacks, options.idPrefix);\n\t\tthis.memory = new MemoryView(callbacks, options.idPrefix);\n\t\tthis.diagnostics = new DiagnosticsView(callbacks, options.idPrefix);\n\t\tthis.inspector = new InspectorView(callbacks, (open) => this.handleInspectorOpenChange(open), options.idPrefix);\n\n\t\tthis.views.set('overview', this.overviewRoot);\n\t\tthis.views.set('graph', this.graphRoot);\n\t\tthis.views.set('passes', this.passes.root);\n\t\tthis.views.set('resources', this.resources.root);\n\t\tthis.views.set('memory', this.memory.root);\n\t\tthis.views.set('diagnostics', this.diagnostics.root);\n\t\tfor (const [tab, label] of [\n\t\t\t['overview', 'Overview'],\n\t\t\t['graph', 'Graph'],\n\t\t\t['passes', 'Passes'],\n\t\t\t['resources', 'Resources'],\n\t\t\t['memory', 'Memory'],\n\t\t\t['diagnostics', 'Diagnostics'],\n\t\t] as const) {\n\t\t\tconst button = document.createElement('button');\n\t\t\tbutton.type = 'button';\n\t\t\tbutton.id = `${options.idPrefix}-tab-${tab}`;\n\t\t\tbutton.textContent = label;\n\t\t\tbutton.setAttribute('role', 'tab');\n\t\t\tbutton.setAttribute('aria-controls', `${options.idPrefix}-view-${tab}`);\n\t\t\tbutton.addEventListener('click', () => this.setActiveTab(tab));\n\t\t\tthis.tabButtons.set(tab, button);\n\t\t\tthis.tabList.appendChild(button);\n\t\t}\n\n\t\tthis.inspectorOpenButton.type = 'button';\n\t\tthis.inspectorOpenButton.hidden = true;\n\t\tthis.inspectorOpenButton.className = 'zenfg-inspector-open-inspector';\n\t\tsetPanelButtonContent(this.inspectorOpenButton, 'inspector', 'Inspector');\n\t\tthis.inspectorOpenButton.title = 'Open selection inspector';\n\t\tthis.inspectorOpenButton.addEventListener('click', () => this.inspector.setOpen(true));\n\n\t\tthis.captureButton.type = 'button';\n\t\tthis.captureButton.className = 'zenfg-inspector-capture-action';\n\t\tthis.captureButton.addEventListener('click', actions.onCapture);\n\t\tthis.importButton.type = 'button';\n\t\tthis.importButton.textContent = 'Import';\n\t\tthis.importButton.addEventListener('click', () => this.importInput.click());\n\t\tthis.importInput.type = 'file';\n\t\tthis.importInput.accept = '.fgsnapshot.json,.json,application/json';\n\t\tthis.importInput.hidden = true;\n\t\tthis.importInput.addEventListener('change', () => {\n\t\t\tconst file = this.importInput.files?.[0];\n\t\t\tthis.importInput.value = '';\n\t\t\tif (file) actions.onImport(file);\n\t\t});\n\t\tthis.exportButton.type = 'button';\n\t\tthis.exportButton.textContent = 'Export';\n\t\tthis.exportButton.setAttribute('aria-haspopup', 'menu');\n\t\tthis.exportButton.setAttribute('aria-expanded', 'false');\n\t\tthis.exportButton.setAttribute('aria-controls', `${options.idPrefix}-export-menu`);\n\t\tthis.exportButton.addEventListener('click', () => {\n\t\t\tthis.setExportMenuOpen(this.exportMenu.hidden !== false);\n\t\t});\n\t\tthis.exportMenu.className = 'zenfg-inspector-export-menu';\n\t\tthis.exportMenu.id = `${options.idPrefix}-export-menu`;\n\t\tthis.exportMenu.setAttribute('role', 'menu');\n\t\tthis.exportMenu.hidden = true;\n\t\tthis.downloadButton.type = 'button';\n\t\tthis.downloadButton.textContent = 'Download JSON';\n\t\tthis.downloadButton.setAttribute('role', 'menuitem');\n\t\tthis.downloadButton.addEventListener('click', () => {\n\t\t\tthis.setExportMenuOpen(false);\n\t\t\tactions.onDownload();\n\t\t});\n\t\tthis.copyButton.type = 'button';\n\t\tthis.copyButton.className = 'zenfg-inspector-copy-action';\n\t\tthis.copyButton.textContent = 'Copy JSON';\n\t\tthis.copyButton.setAttribute('role', 'menuitem');\n\t\tthis.copyButton.addEventListener('click', () => {\n\t\t\tthis.setExportMenuOpen(false);\n\t\t\tactions.onCopyJson();\n\t\t});\n\t\tthis.exportMenu.append(this.downloadButton, this.copyButton);\n\n\t\tthis.commandActions.append(\n\t\t\tthis.commandStatus,\n\t\t\tthis.inspectorOpenButton,\n\t\t\tthis.captureButton,\n\t\t\tthis.importButton,\n\t\t\tthis.exportButton,\n\t\t\tthis.importInput,\n\t\t);\n\t\tif (options.branding === false) this.commandBar.append(this.tabList, this.commandActions, this.exportMenu);\n\t\telse this.commandBar.append(this.brand, this.tabList, this.commandActions, this.exportMenu);\n\t\tthis.root.addEventListener('click', (event) => {\n\t\t\tconst target = event.target;\n\t\t\tif (!target || typeof (target as Node).nodeType !== 'number' || this.exportMenu.hidden) return;\n\t\t\tconst targetNode = target as Node;\n\t\t\tif (!this.exportButton.contains(targetNode) && !this.exportMenu.contains(targetNode)) this.setExportMenuOpen(false);\n\t\t});\n\t\tthis.root.addEventListener('keydown', (event) => {\n\t\t\tif (event.key !== 'Escape' || this.exportMenu.hidden) return;\n\t\t\tthis.setExportMenuOpen(false);\n\t\t\tthis.exportButton.focus();\n\t\t});\n\t\tthis.main.append(this.emptyHost, ...this.views.values());\n\t\tthis.workspace.append(this.main, this.inspector.root);\n\t\tthis.root.append(this.commandBar, this.workspace);\n\t\tthis.showEmptyState('empty', 'Drop a ZenFG Snapshot here or choose Import.', 'Files are processed locally in your browser.');\n\t\tthis.setSnapshotActionState({\n\t\t\tproviderAvailable: false,\n\t\t\thasCapture: false,\n\t\t\tcapturing: false,\n\t\t\timporting: false,\n\t\t\tcopying: false,\n\t\t\tcopied: false,\n\t\t});\n\t}\n\n\tsetSnapshot(snapshot: FrameGraphDebugViewModel, selected: Selection | undefined): void {\n\t\tthis.hasSnapshot = true;\n\t\tthis.snapshot = snapshot;\n\t\tthis.selected = selected;\n\t\tthis.hovered = undefined;\n\t\tthis.renderSummary(snapshot);\n\t\tthis.passes.setSnapshot(snapshot);\n\t\tthis.resources.setSnapshot(snapshot);\n\t\tthis.memory.setSnapshot(snapshot);\n\t\tthis.diagnostics.setSnapshot(snapshot);\n\t\tthis.inspector.setSnapshot(snapshot);\n\t\tthis.passes.setSelection(selected);\n\t\tthis.resources.setSelection(selected);\n\t\tthis.memory.setSelection(selected);\n\t\tthis.diagnostics.setSelection(selected);\n\t\tthis.inspector.setSelection(selected, false);\n\t\tthis.emptyHost.hidden = true;\n\t\tthis.updateActiveTab();\n\t\tthis.updateWorkspaceState();\n\t\tif (this.activeTab === 'graph') this.renderGraph();\n\t}\n\n\tshowEmptyState(kind: FrameGraphDebugEmptyStateKind, message: string, detail?: string): void {\n\t\tthis.hasSnapshot = false;\n\t\tthis.snapshot = undefined;\n\t\tthis.selected = undefined;\n\t\tthis.hovered = undefined;\n\t\tthis.emptyHost.hidden = false;\n\t\tthis.emptyHost.dataset.state = kind;\n\t\tconst icon = createPanelIcon(kind === 'capturing' ? 'spinner' : kind === 'error' ? 'error' : kind === 'waiting' ? 'waiting' : 'empty');\n\t\tconst label = document.createElement('span');\n\t\tlabel.className = 'zenfg-inspector-empty-message';\n\t\tlabel.textContent = message;\n\t\tconst detailLabel = document.createElement('span');\n\t\tdetailLabel.className = 'zenfg-inspector-empty-detail';\n\t\tdetailLabel.textContent = detail ?? '';\n\t\tthis.emptyHost.replaceChildren(icon, label, ...(detail ? [detailLabel] : []));\n\t\tthis.updateActiveTab();\n\t\tthis.updateWorkspaceState();\n\t}\n\n\tsetSnapshotActionState(state: FrameGraphDebugSnapshotActionState): void {\n\t\tconst captureLabel = state.capturing ? 'Capturing…' : 'Capture';\n\t\tsetPanelButtonContent(this.captureButton, state.capturing ? 'spinner' : 'capture', captureLabel);\n\t\tthis.captureButton.disabled = state.capturing || !state.providerAvailable;\n\t\tthis.captureButton.hidden = !state.providerAvailable;\n\t\tthis.captureButton.classList.toggle('active', state.capturing);\n\t\tthis.captureButton.setAttribute('aria-busy', state.capturing ? 'true' : 'false');\n\t\tthis.captureButton.dataset.tone = state.capturing ? 'pending' : 'accent';\n\t\tthis.captureButton.title = !state.providerAvailable\n\t\t\t? 'Waiting for a FrameGraph capture source.'\n\t\t\t: state.capturing\n\t\t\t\t? 'Capturing the next rendered frame.'\n\t\t\t\t: 'Capture and display the next rendered frame.';\n\n\t\tthis.importButton.textContent = state.importing ? 'Importing…' : 'Import';\n\t\tthis.importButton.disabled = state.importing;\n\t\tthis.importButton.setAttribute('aria-busy', state.importing ? 'true' : 'false');\n\t\tthis.exportButton.disabled = !state.hasCapture;\n\t\tthis.downloadButton.disabled = !state.hasCapture;\n\t\tif (!state.hasCapture) this.setExportMenuOpen(false);\n\n\t\tconst copyLabel = state.copying ? 'Copying…' : state.copied ? 'Copied' : 'Copy JSON';\n\t\tconst copyIcon = state.copying ? 'spinner' : state.copied ? 'check' : 'copy';\n\t\tsetPanelButtonContent(this.copyButton, copyIcon, copyLabel);\n\t\tthis.copyButton.disabled = !state.hasCapture || state.copying;\n\t\tthis.copyButton.classList.toggle('active', state.copying || state.copied);\n\t\tthis.copyButton.setAttribute('aria-busy', state.copying ? 'true' : 'false');\n\t\tthis.copyButton.dataset.tone = state.copied ? 'success' : state.copying ? 'pending' : 'neutral';\n\t\tthis.copyButton.title = state.hasCapture\n\t\t\t? 'Copy the current canonical FrameGraph Snapshot JSON.'\n\t\t\t: 'Load a snapshot before exporting.';\n\n\t\tthis.commandStatus.textContent = state.message ?? '';\n\t\tthis.commandStatus.hidden = !state.message;\n\t\tthis.commandStatus.dataset.tone = state.message ? state.messageTone ?? 'error' : 'neutral';\n\t\tif (state.message) this.commandStatus.title = state.message;\n\t\telse this.commandStatus.removeAttribute('title');\n\t}\r\n\n\tsetSelection(selected: Selection | undefined): void {\n\t\tthis.selected = selected;\n\t\tthis.passes.setSelection(selected);\n\t\tthis.resources.setSelection(selected);\n\t\tthis.memory.setSelection(selected);\n\t\tthis.diagnostics.setSelection(selected);\n\t\tthis.inspector.setSelection(selected);\n\t\tif (this.activeTab === 'graph') this.renderGraph();\n\t}\n\n\tsetHovered(hovered: Selection | undefined): void {\n\t\tthis.hovered = hovered;\n\t\tif (this.activeTab === 'graph') this.renderGraph();\n\t}\n\n\tsetActiveTab(tab: WorkbenchTab): void {\n\t\tif (this.activeTab === tab) return;\n\t\tthis.activeTab = tab;\n\t\tthis.updateActiveTab();\n\t\tif (tab === 'graph') {\n\t\t\twindow.requestAnimationFrame(() => {\n\t\t\t\tresizeGraph(this.graphView);\n\t\t\t\tthis.renderGraph();\n\t\t\t});\n\t\t}\n\t}\n\n\trefreshGraphStructure(): void {\n\t\tif (!this.snapshot) return;\n\t\tthis.passes.setSnapshot(this.snapshot);\n\t\tif (this.activeTab === 'graph') this.renderGraph();\n\t}\n\n\tresizeGraph(fit = false): void {\n\t\tif (fit) this.graphView.fitOnNextRender = true;\n\t\twindow.requestAnimationFrame(() => {\n\t\t\tresizeGraph(this.graphView);\n\t\t\tif (this.activeTab === 'graph') this.renderGraph();\n\t\t});\n\t}\n\n\tprivate updateActiveTab(): void {\n\t\tfor (const [tab, button] of this.tabButtons) {\n\t\t\tconst active = tab === this.activeTab;\n\t\t\tbutton.disabled = !this.hasSnapshot;\n\t\t\tbutton.classList.toggle('active', active);\n\t\t\tbutton.setAttribute('aria-selected', active ? 'true' : 'false');\n\t\t\tconst view = this.views.get(tab)!;\n\t\t\tview.hidden = !this.hasSnapshot || !active;\n\t\t\tview.setAttribute('aria-labelledby', button.id);\n\t\t}\n\t}\n\n\tprivate renderGraph(): void {\n\t\tif (!this.snapshot) return;\n\t\trenderGraphView(\n\t\t\tthis.graphView,\n\t\t\tthis.snapshot,\n\t\t\tthis.selected,\n\t\t\tthis.hovered,\n\t\t\tthis.callbacks.onSelect,\n\t\t\tthis.callbacks.onHover,\n\t\t\tthis.callbacks.onGroupToggle,\n\t\t);\n\t}\n\n\tprivate renderSummary(snapshot: FrameGraphDebugViewModel): void {\n\t\tconst frameGraphSegments = snapshot.executionSegments.filter((segment) => segment.kind === 'frame-graph').length;\n\t\tconst opaqueIntervals = snapshot.executionSegments.length - frameGraphSegments;\n\t\tconst metrics = snapshot.metrics;\n\t\tconst coverage = metrics.timingEligibleNodeCount === 0\n\t\t\t? 'No eligible passes'\n\t\t\t: `${metrics.timedNodeCount}/${metrics.timingEligibleNodeCount} timed`;\n\t\tconst slowest = metrics.slowestNode\n\t\t\t? `${labelNode(metrics.slowestNode)} · ${(metrics.slowestNode.gpuDurationMicros! / 1000).toFixed(3)} ms`\n\t\t\t: 'Unknown';\n\t\tconst protocol = snapshot.protocol;\n\t\tconst runtime = protocol.producer.runtime;\n\t\tconst producer = [\n\t\t\tprotocol.producer.name,\n\t\t\tprotocol.producer.version,\n\t\t\tprotocol.producer.language,\n\t\t].filter(Boolean).join(' · ');\n\t\tconst runtimeLabel = runtime\n\t\t\t? [runtime.implementation, runtime.graphicsApi, runtime.backend].filter(Boolean).join(' · ') || 'Unknown'\n\t\t\t: 'Unknown';\n\t\tconst poolRetained = snapshot.resourcePool.status === 'available'\n\t\t\t? `${snapshot.resourcePool.estimatedRetainedBytes === undefined ? 'Unknown' : formatBytes(snapshot.resourcePool.estimatedRetainedBytes)} · ${snapshot.resourcePool.retainedCount} allocations`\n\t\t\t: 'Unavailable';\n\t\tthis.summary.replaceChildren(\n\t\t\tthis.createSummaryGroup('Capture', [\n\t\t\t\t['Source', snapshot.source.label],\n\t\t\t\t['Schema', `${protocol.format} v${protocol.version.major}.${protocol.version.minor}`],\n\t\t\t\t['Producer', producer],\n\t\t\t\t['Runtime', runtimeLabel],\n\t\t\t\t['Frame', String(snapshot.frameIndex)],\n\t\t\t\t...(snapshot.source.migratedFromLegacy ? [['Migration', 'Legacy V0 → V1'] as const] : []),\n\t\t\t\t['Timing', snapshot.profiling.status === 'available' ? 'Available' : snapshot.profiling.reason],\n\t\t\t]),\n\t\t\tthis.createSummaryGroup('GPU', [\n\t\t\t\t['GPU Span', snapshot.profiling.status === 'available' ? `${formatGpuFrameDuration(snapshot)} ms` : 'Unknown'],\n\t\t\t\t['Coverage', coverage],\n\t\t\t\t['Slowest', slowest],\n\t\t\t]),\n\t\t\tthis.createSummaryGroup('Work', [\n\t\t\t\t['Nodes', `${snapshot.nodes.length} retained · ${snapshot.culledNodes.length} culled`],\n\t\t\t\t['Segments', `${frameGraphSegments} FG · ${opaqueIntervals} opaque`],\n\t\t\t\t['Groups', snapshot.availability.groups ? String(snapshot.debugGroups.length) : 'Unknown'],\n\t\t\t\t['Recording order', snapshot.availability.recordingOrder ? 'Available' : 'Unknown'],\n\t\t\t]),\n\t\t\tthis.createSummaryGroup('Resources', [\n\t\t\t\t['Logical / physical', `${snapshot.resources.length} / ${snapshot.physicalAllocations.length}`],\n\t\t\t\t['Texture views', snapshot.availability.textureViews ? String(snapshot.textureViewById.size) : 'Unknown'],\n\t\t\t\t['Access regions', snapshot.availability.accessRegions ? 'Available' : 'Unknown'],\n\t\t\t\t['Transient estimate', formatEstimatedBytes(metrics.transientEstimatedByteSize)],\n\t\t\t]),\n\t\t\tthis.createSummaryGroup('Pool', [\n\t\t\t\t['Retained', poolRetained],\n\t\t\t\t['Reuse', formatPoolHitRate(snapshot)],\n\t\t\t]),\n\t\t);\n\t}\n\n\tprivate createSummaryGroup(title: string, rows: readonly (readonly [string, string])[]): HTMLElement {\n\t\tconst group = document.createElement('section');\n\t\tconst heading = document.createElement('h2');\n\t\theading.textContent = title;\n\t\tgroup.appendChild(heading);\n\t\tfor (const [label, value] of rows) {\n\t\t\tconst row = document.createElement('div');\n\t\t\tconst term = document.createElement('span');\n\t\t\tterm.textContent = label;\n\t\t\tconst description = document.createElement('strong');\n\t\t\tdescription.textContent = value;\n\t\t\tdescription.title = value;\n\t\t\trow.append(term, description);\n\t\t\tgroup.appendChild(row);\n\t\t}\n\t\treturn group;\n\t}\n\n\tprivate setExportMenuOpen(open: boolean): void {\n\t\tthis.exportMenu.hidden = !open;\n\t\tthis.exportButton.setAttribute('aria-expanded', open ? 'true' : 'false');\n\t}\n\n\tprivate handleInspectorOpenChange(_open: boolean): void {\n\t\tthis.updateWorkspaceState();\n\t\tif (this.activeTab === 'graph') this.resizeGraph(false);\n\t}\n\n\tprivate updateWorkspaceState(): void {\n\t\tconst inspectorOpen = this.hasSnapshot && this.inspector.isOpen;\n\t\tthis.workspace.classList.toggle('has-capture', this.hasSnapshot);\n\t\tthis.workspace.classList.toggle('inspector-open', inspectorOpen);\n\t\tthis.inspector.root.classList.toggle('unavailable', !this.hasSnapshot);\n\t\tthis.inspectorOpenButton.hidden = !this.hasSnapshot || inspectorOpen;\n\t}\n}\n"]}
|
|
1
|
+
{"version":3,"file":"panelWorkbenchView.js","sourceRoot":"","sources":["../src/panelWorkbenchView.ts"],"names":[],"mappings":"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","sourcesContent":["import type { FrameGraphDebugViewModel } from './debugCaptureModel.ts';\nimport {\n\tformatBytes,\n\tformatGpuFrameDuration,\n\tformatPoolHitRate,\n\tlabelNode,\n} from './panelDomHelpers.ts';\nimport { createPanelIcon, setPanelButtonContent } from './panelIcons.ts';\nimport { DiagnosticsView } from './panelDiagnosticsView.ts';\nimport { InspectorView } from './panelInspectorView.ts';\nimport { MemoryView } from './panelMemoryView.ts';\nimport { PassesView } from './panelPassesView.ts';\nimport { ResourcesView } from './panelResourcesView.ts';\nimport { renderGraphView, resizeGraph } from './panelGraphView.ts';\nimport type { GraphViewState, Selection, WorkbenchTab } from './panelTypes.ts';\nimport { formatEstimatedBytes, type WorkbenchCallbacks } from './panelWorkbenchHelpers.ts';\n\nexport type FrameGraphDebugWorkbenchActions = {\n\tonCapture(): void;\n\tonImport(file: File): void;\n\tonDownload(): void;\n\tonCopyJson(): void;\n};\nexport type FrameGraphDebugWorkbenchOptions = {\n\tbranding: string | false;\n\tidPrefix: string;\n};\nexport type FrameGraphDebugEmptyStateKind = 'waiting' | 'capturing' | 'empty' | 'error';\n\n\nexport type FrameGraphDebugSnapshotActionState = {\n\tproviderAvailable: boolean;\n\thasCapture: boolean;\n\tcapturing: boolean;\n\timporting: boolean;\n\tcopying: boolean;\n\tcopied: boolean;\n\tmessage?: string;\n\tmessageTone?: 'neutral' | 'error';\n};\n\nexport class FrameGraphDebugWorkbench {\n\treadonly root = document.createElement('div');\n\tprivate readonly summary = document.createElement('div');\n\tprivate readonly commandBar = document.createElement('div');\n\tprivate readonly brand = document.createElement('div');\n\tprivate readonly tabList = document.createElement('div');\n\tprivate readonly commandActions = document.createElement('div');\n\tprivate readonly commandStatus = document.createElement('span');\n\tprivate readonly workspace = document.createElement('div');\n\tprivate readonly main = document.createElement('main');\n\tprivate readonly emptyHost = document.createElement('div');\n\tprivate readonly overviewRoot = document.createElement('section');\n\tprivate readonly graphRoot = document.createElement('section');\n\tprivate readonly passes: PassesView;\n\tprivate readonly resources: ResourcesView;\n\tprivate readonly memory: MemoryView;\n\tprivate readonly diagnostics: DiagnosticsView;\n\tprivate readonly inspector: InspectorView;\n\tprivate readonly inspectorOpenButton = document.createElement('button');\n\tprivate readonly captureButton = document.createElement('button');\n\tprivate readonly importButton = document.createElement('button');\n\tprivate readonly importInput = document.createElement('input');\n\tprivate readonly exportButton = document.createElement('button');\n\tprivate readonly exportMenu = document.createElement('div');\n\tprivate readonly downloadButton = document.createElement('button');\n\tprivate readonly copyButton = document.createElement('button');\n\tprivate readonly tabButtons = new Map<WorkbenchTab, HTMLButtonElement>();\n\tprivate readonly views = new Map<WorkbenchTab, HTMLElement>();\n\tprivate activeTab: WorkbenchTab = 'graph';\n\tprivate hasSnapshot = false;\n\tprivate snapshot: FrameGraphDebugViewModel | undefined;\n\tprivate selected: Selection | undefined;\n\tprivate hovered: Selection | undefined;\n\n\tconstructor(\n\t\tprivate readonly graphView: GraphViewState,\n\t\tprivate readonly callbacks: WorkbenchCallbacks,\n\t\tactions: FrameGraphDebugWorkbenchActions,\n\t\toptions: FrameGraphDebugWorkbenchOptions,\n\t) {\n\t\tthis.root.className = 'zenfg-inspector-workbench';\n\t\tthis.summary.className = 'zenfg-inspector-capture-summary';\n\t\tthis.commandBar.className = 'zenfg-inspector-workbench-command-bar';\n\t\tthis.brand.className = 'zenfg-inspector-brand';\n\t\tif (options.branding === false) this.commandBar.classList.add('branding-hidden');\n\t\telse this.brand.textContent = options.branding;\n\t\tthis.tabList.className = 'zenfg-inspector-workbench-tabs';\n\t\tthis.tabList.setAttribute('role', 'tablist');\n\t\tthis.tabList.setAttribute('aria-label', 'FrameGraph debug views');\n\t\tthis.commandActions.className = 'zenfg-inspector-workbench-actions';\n\t\tthis.commandActions.setAttribute('role', 'toolbar');\n\t\tthis.commandActions.setAttribute('aria-label', 'FrameGraph commands');\n\t\tthis.commandStatus.className = 'zenfg-inspector-command-status';\n\t\tthis.commandStatus.setAttribute('role', 'status');\n\t\tthis.commandStatus.setAttribute('aria-live', 'polite');\n\t\tthis.workspace.className = 'zenfg-inspector-workspace inspector-open';\n\t\tthis.main.className = 'zenfg-inspector-main';\n\t\tthis.emptyHost.className = 'zenfg-inspector-workbench-empty';\n\t\tthis.emptyHost.setAttribute('role', 'status');\n\t\tthis.emptyHost.setAttribute('aria-live', 'polite');\n\n\t\tthis.overviewRoot.className = 'zenfg-inspector-view zenfg-inspector-overview-view';\n\t\tthis.overviewRoot.id = `${options.idPrefix}-view-overview`;\n\t\tthis.overviewRoot.setAttribute('role', 'tabpanel');\n\t\tthis.overviewRoot.append(this.summary);\n\t\tthis.graphRoot.className = 'zenfg-inspector-view zenfg-inspector-graph-view';\n\t\tthis.graphRoot.id = `${options.idPrefix}-view-graph`;\n\t\tthis.graphRoot.setAttribute('role', 'tabpanel');\n\t\tthis.graphRoot.append(this.graphView.toolbar, this.graphView.host);\n\t\tthis.passes = new PassesView(callbacks, options.idPrefix);\n\t\tthis.resources = new ResourcesView(callbacks, options.idPrefix);\n\t\tthis.memory = new MemoryView(callbacks, options.idPrefix);\n\t\tthis.diagnostics = new DiagnosticsView(callbacks, options.idPrefix);\n\t\tthis.inspector = new InspectorView(callbacks, (open) => this.handleInspectorOpenChange(open), options.idPrefix);\n\n\t\tthis.views.set('overview', this.overviewRoot);\n\t\tthis.views.set('graph', this.graphRoot);\n\t\tthis.views.set('passes', this.passes.root);\n\t\tthis.views.set('resources', this.resources.root);\n\t\tthis.views.set('memory', this.memory.root);\n\t\tthis.views.set('diagnostics', this.diagnostics.root);\n\t\tfor (const [tab, label] of [\n\t\t\t['overview', 'Overview'],\n\t\t\t['graph', 'Graph'],\n\t\t\t['passes', 'Passes'],\n\t\t\t['resources', 'Resources'],\n\t\t\t['memory', 'Memory'],\n\t\t\t['diagnostics', 'Diagnostics'],\n\t\t] as const) {\n\t\t\tconst button = document.createElement('button');\n\t\t\tbutton.type = 'button';\n\t\t\tbutton.id = `${options.idPrefix}-tab-${tab}`;\n\t\t\tbutton.textContent = label;\n\t\t\tbutton.setAttribute('role', 'tab');\n\t\t\tbutton.setAttribute('aria-controls', `${options.idPrefix}-view-${tab}`);\n\t\t\tbutton.addEventListener('click', () => this.setActiveTab(tab));\n\t\t\tthis.tabButtons.set(tab, button);\n\t\t\tthis.tabList.appendChild(button);\n\t\t}\n\n\t\tthis.inspectorOpenButton.type = 'button';\n\t\tthis.inspectorOpenButton.hidden = true;\n\t\tthis.inspectorOpenButton.className = 'zenfg-inspector-open-inspector';\n\t\tsetPanelButtonContent(this.inspectorOpenButton, 'inspector', 'Inspector');\n\t\tthis.inspectorOpenButton.title = 'Open selection inspector';\n\t\tthis.inspectorOpenButton.addEventListener('click', () => this.inspector.setOpen(true));\n\n\t\tthis.captureButton.type = 'button';\n\t\tthis.captureButton.className = 'zenfg-inspector-capture-action';\n\t\tthis.captureButton.addEventListener('click', actions.onCapture);\n\t\tthis.importButton.type = 'button';\n\t\tthis.importButton.textContent = 'Import';\n\t\tthis.importButton.addEventListener('click', () => this.importInput.click());\n\t\tthis.importInput.type = 'file';\n\t\tthis.importInput.accept = '.fgsnapshot.json,.json,application/json';\n\t\tthis.importInput.hidden = true;\n\t\tthis.importInput.addEventListener('change', () => {\n\t\t\tconst file = this.importInput.files?.[0];\n\t\t\tthis.importInput.value = '';\n\t\t\tif (file) actions.onImport(file);\n\t\t});\n\t\tthis.exportButton.type = 'button';\n\t\tthis.exportButton.textContent = 'Export';\n\t\tthis.exportButton.setAttribute('aria-haspopup', 'menu');\n\t\tthis.exportButton.setAttribute('aria-expanded', 'false');\n\t\tthis.exportButton.setAttribute('aria-controls', `${options.idPrefix}-export-menu`);\n\t\tthis.exportButton.addEventListener('click', () => {\n\t\t\tthis.setExportMenuOpen(this.exportMenu.hidden !== false);\n\t\t});\n\t\tthis.exportMenu.className = 'zenfg-inspector-export-menu';\n\t\tthis.exportMenu.id = `${options.idPrefix}-export-menu`;\n\t\tthis.exportMenu.setAttribute('role', 'menu');\n\t\tthis.exportMenu.hidden = true;\n\t\tthis.downloadButton.type = 'button';\n\t\tthis.downloadButton.className = 'zenfg-inspector-download-action';\n\t\tsetPanelButtonContent(this.downloadButton, 'download', 'Download JSON');\n\t\tthis.downloadButton.setAttribute('role', 'menuitem');\n\t\tthis.downloadButton.addEventListener('click', () => {\n\t\t\tthis.setExportMenuOpen(false);\n\t\t\tactions.onDownload();\n\t\t});\n\t\tthis.copyButton.type = 'button';\n\t\tthis.copyButton.className = 'zenfg-inspector-copy-action';\n\t\tthis.copyButton.textContent = 'Copy JSON';\n\t\tthis.copyButton.setAttribute('role', 'menuitem');\n\t\tthis.copyButton.addEventListener('click', () => {\n\t\t\tthis.setExportMenuOpen(false);\n\t\t\tactions.onCopyJson();\n\t\t});\n\t\tthis.exportMenu.append(this.downloadButton, this.copyButton);\n\n\t\tthis.commandActions.append(\n\t\t\tthis.commandStatus,\n\t\t\tthis.inspectorOpenButton,\n\t\t\tthis.captureButton,\n\t\t\tthis.importButton,\n\t\t\tthis.exportButton,\n\t\t\tthis.importInput,\n\t\t);\n\t\tif (options.branding === false) this.commandBar.append(this.tabList, this.commandActions, this.exportMenu);\n\t\telse this.commandBar.append(this.brand, this.tabList, this.commandActions, this.exportMenu);\n\t\tthis.root.addEventListener('click', (event) => {\n\t\t\tconst target = event.target;\n\t\t\tif (!target || typeof (target as Node).nodeType !== 'number' || this.exportMenu.hidden) return;\n\t\t\tconst targetNode = target as Node;\n\t\t\tif (!this.exportButton.contains(targetNode) && !this.exportMenu.contains(targetNode)) this.setExportMenuOpen(false);\n\t\t});\n\t\tthis.root.addEventListener('keydown', (event) => {\n\t\t\tif (event.key !== 'Escape' || this.exportMenu.hidden) return;\n\t\t\tthis.setExportMenuOpen(false);\n\t\t\tthis.exportButton.focus();\n\t\t});\n\t\tthis.main.append(this.emptyHost, ...this.views.values());\n\t\tthis.workspace.append(this.main, this.inspector.root);\n\t\tthis.root.append(this.commandBar, this.workspace);\n\t\tthis.showEmptyState('empty', 'Drop a ZenFG Snapshot here or choose Import.', 'Files are processed locally in your browser.');\n\t\tthis.setSnapshotActionState({\n\t\t\tproviderAvailable: false,\n\t\t\thasCapture: false,\n\t\t\tcapturing: false,\n\t\t\timporting: false,\n\t\t\tcopying: false,\n\t\t\tcopied: false,\n\t\t});\n\t}\n\n\tsetSnapshot(snapshot: FrameGraphDebugViewModel, selected: Selection | undefined): void {\n\t\tthis.hasSnapshot = true;\n\t\tthis.snapshot = snapshot;\n\t\tthis.selected = selected;\n\t\tthis.hovered = undefined;\n\t\tthis.renderSummary(snapshot);\n\t\tthis.passes.setSnapshot(snapshot);\n\t\tthis.resources.setSnapshot(snapshot);\n\t\tthis.memory.setSnapshot(snapshot);\n\t\tthis.diagnostics.setSnapshot(snapshot);\n\t\tthis.inspector.setSnapshot(snapshot);\n\t\tthis.passes.setSelection(selected);\n\t\tthis.resources.setSelection(selected);\n\t\tthis.memory.setSelection(selected);\n\t\tthis.diagnostics.setSelection(selected);\n\t\tthis.inspector.setSelection(selected, false);\n\t\tthis.emptyHost.hidden = true;\n\t\tthis.updateActiveTab();\n\t\tthis.updateWorkspaceState();\n\t\tif (this.activeTab === 'graph') this.renderGraph();\n\t}\n\n\tshowEmptyState(kind: FrameGraphDebugEmptyStateKind, message: string, detail?: string): void {\n\t\tthis.hasSnapshot = false;\n\t\tthis.snapshot = undefined;\n\t\tthis.selected = undefined;\n\t\tthis.hovered = undefined;\n\t\tthis.emptyHost.hidden = false;\n\t\tthis.emptyHost.dataset.state = kind;\n\t\tconst icon = createPanelIcon(kind === 'capturing' ? 'spinner' : kind === 'error' ? 'error' : kind === 'waiting' ? 'waiting' : 'empty');\n\t\tconst label = document.createElement('span');\n\t\tlabel.className = 'zenfg-inspector-empty-message';\n\t\tlabel.textContent = message;\n\t\tconst detailLabel = document.createElement('span');\n\t\tdetailLabel.className = 'zenfg-inspector-empty-detail';\n\t\tdetailLabel.textContent = detail ?? '';\n\t\tthis.emptyHost.replaceChildren(icon, label, ...(detail ? [detailLabel] : []));\n\t\tthis.updateActiveTab();\n\t\tthis.updateWorkspaceState();\n\t}\n\n\tsetSnapshotActionState(state: FrameGraphDebugSnapshotActionState): void {\n\t\tconst captureLabel = state.capturing ? 'Capturing…' : 'Capture';\n\t\tsetPanelButtonContent(this.captureButton, state.capturing ? 'spinner' : 'capture', captureLabel);\n\t\tthis.captureButton.disabled = state.capturing || !state.providerAvailable;\n\t\tthis.captureButton.hidden = !state.providerAvailable;\n\t\tthis.captureButton.classList.toggle('active', state.capturing);\n\t\tthis.captureButton.setAttribute('aria-busy', state.capturing ? 'true' : 'false');\n\t\tthis.captureButton.dataset.tone = state.capturing ? 'pending' : 'accent';\n\t\tthis.captureButton.title = !state.providerAvailable\n\t\t\t? 'Waiting for a FrameGraph capture source.'\n\t\t\t: state.capturing\n\t\t\t\t? 'Capturing the next rendered frame.'\n\t\t\t\t: 'Capture and display the next rendered frame.';\n\n\t\tthis.importButton.textContent = state.importing ? 'Importing…' : 'Import';\n\t\tthis.importButton.disabled = state.importing;\n\t\tthis.importButton.setAttribute('aria-busy', state.importing ? 'true' : 'false');\n\t\tthis.exportButton.disabled = !state.hasCapture;\n\t\tthis.downloadButton.disabled = !state.hasCapture;\n\t\tif (!state.hasCapture) this.setExportMenuOpen(false);\n\n\t\tconst copyLabel = state.copying ? 'Copying…' : state.copied ? 'Copied' : 'Copy JSON';\n\t\tconst copyIcon = state.copying ? 'spinner' : state.copied ? 'check' : 'copy';\n\t\tsetPanelButtonContent(this.copyButton, copyIcon, copyLabel);\n\t\tthis.copyButton.disabled = !state.hasCapture || state.copying;\n\t\tthis.copyButton.classList.toggle('active', state.copying || state.copied);\n\t\tthis.copyButton.setAttribute('aria-busy', state.copying ? 'true' : 'false');\n\t\tthis.copyButton.dataset.tone = state.copied ? 'success' : state.copying ? 'pending' : 'neutral';\n\t\tthis.copyButton.title = state.hasCapture\n\t\t\t? 'Copy the current canonical FrameGraph Snapshot JSON.'\n\t\t\t: 'Load a snapshot before exporting.';\n\n\t\tthis.commandStatus.textContent = state.message ?? '';\n\t\tthis.commandStatus.hidden = !state.message;\n\t\tthis.commandStatus.dataset.tone = state.message ? state.messageTone ?? 'error' : 'neutral';\n\t\tif (state.message) this.commandStatus.title = state.message;\n\t\telse this.commandStatus.removeAttribute('title');\n\t}\r\n\n\tsetSelection(selected: Selection | undefined): void {\n\t\tthis.selected = selected;\n\t\tthis.passes.setSelection(selected);\n\t\tthis.resources.setSelection(selected);\n\t\tthis.memory.setSelection(selected);\n\t\tthis.diagnostics.setSelection(selected);\n\t\tthis.inspector.setSelection(selected);\n\t\tif (this.activeTab === 'graph') this.renderGraph();\n\t}\n\n\tsetHovered(hovered: Selection | undefined): void {\n\t\tthis.hovered = hovered;\n\t\tif (this.activeTab === 'graph') this.renderGraph();\n\t}\n\n\tsetActiveTab(tab: WorkbenchTab): void {\n\t\tif (this.activeTab === tab) return;\n\t\tthis.activeTab = tab;\n\t\tthis.updateActiveTab();\n\t\tif (tab === 'graph') {\n\t\t\twindow.requestAnimationFrame(() => {\n\t\t\t\tresizeGraph(this.graphView);\n\t\t\t\tthis.renderGraph();\n\t\t\t});\n\t\t}\n\t}\n\n\trefreshGraphStructure(): void {\n\t\tif (!this.snapshot) return;\n\t\tthis.passes.setSnapshot(this.snapshot);\n\t\tif (this.activeTab === 'graph') this.renderGraph();\n\t}\n\n\tresizeGraph(fit = false): void {\n\t\tif (fit) this.graphView.fitOnNextRender = true;\n\t\twindow.requestAnimationFrame(() => {\n\t\t\tresizeGraph(this.graphView);\n\t\t\tif (this.activeTab === 'graph') this.renderGraph();\n\t\t});\n\t}\n\n\tprivate updateActiveTab(): void {\n\t\tfor (const [tab, button] of this.tabButtons) {\n\t\t\tconst active = tab === this.activeTab;\n\t\t\tbutton.disabled = !this.hasSnapshot;\n\t\t\tbutton.classList.toggle('active', active);\n\t\t\tbutton.setAttribute('aria-selected', active ? 'true' : 'false');\n\t\t\tconst view = this.views.get(tab)!;\n\t\t\tview.hidden = !this.hasSnapshot || !active;\n\t\t\tview.setAttribute('aria-labelledby', button.id);\n\t\t}\n\t}\n\n\tprivate renderGraph(): void {\n\t\tif (!this.snapshot) return;\n\t\trenderGraphView(\n\t\t\tthis.graphView,\n\t\t\tthis.snapshot,\n\t\t\tthis.selected,\n\t\t\tthis.hovered,\n\t\t\tthis.callbacks.onSelect,\n\t\t\tthis.callbacks.onHover,\n\t\t\tthis.callbacks.onGroupToggle,\n\t\t);\n\t}\n\n\tprivate renderSummary(snapshot: FrameGraphDebugViewModel): void {\n\t\tconst frameGraphSegments = snapshot.executionSegments.filter((segment) => segment.kind === 'frame-graph').length;\n\t\tconst opaqueIntervals = snapshot.executionSegments.length - frameGraphSegments;\n\t\tconst metrics = snapshot.metrics;\n\t\tconst coverage = metrics.timingEligibleNodeCount === 0\n\t\t\t? 'No eligible passes'\n\t\t\t: `${metrics.timedNodeCount}/${metrics.timingEligibleNodeCount} timed`;\n\t\tconst slowest = metrics.slowestNode\n\t\t\t? `${labelNode(metrics.slowestNode)} · ${(metrics.slowestNode.gpuDurationMicros! / 1000).toFixed(3)} ms`\n\t\t\t: 'Unknown';\n\t\tconst protocol = snapshot.protocol;\n\t\tconst runtime = protocol.producer.runtime;\n\t\tconst producer = [\n\t\t\tprotocol.producer.name,\n\t\t\tprotocol.producer.version,\n\t\t\tprotocol.producer.language,\n\t\t].filter(Boolean).join(' · ');\n\t\tconst runtimeLabel = runtime\n\t\t\t? [runtime.implementation, runtime.graphicsApi, runtime.backend].filter(Boolean).join(' · ') || 'Unknown'\n\t\t\t: 'Unknown';\n\t\tconst poolRetained = snapshot.resourcePool.status === 'available'\n\t\t\t? `${snapshot.resourcePool.estimatedRetainedBytes === undefined ? 'Unknown' : formatBytes(snapshot.resourcePool.estimatedRetainedBytes)} · ${snapshot.resourcePool.retainedCount} allocations`\n\t\t\t: 'Unavailable';\n\t\tthis.summary.replaceChildren(\n\t\t\tthis.createSummaryGroup('Capture', [\n\t\t\t\t['Source', snapshot.source.label],\n\t\t\t\t['Schema', `${protocol.format} v${protocol.version.major}.${protocol.version.minor}`],\n\t\t\t\t['Producer', producer],\n\t\t\t\t['Runtime', runtimeLabel],\n\t\t\t\t['Frame', String(snapshot.frameIndex)],\n\t\t\t\t...(snapshot.source.migratedFromLegacy ? [['Migration', 'Legacy V0 → V1'] as const] : []),\n\t\t\t\t['Timing', snapshot.profiling.status === 'available' ? 'Available' : snapshot.profiling.reason],\n\t\t\t]),\n\t\t\tthis.createSummaryGroup('GPU', [\n\t\t\t\t['GPU Span', snapshot.profiling.status === 'available' ? `${formatGpuFrameDuration(snapshot)} ms` : 'Unknown'],\n\t\t\t\t['Coverage', coverage],\n\t\t\t\t['Slowest', slowest],\n\t\t\t]),\n\t\t\tthis.createSummaryGroup('Work', [\n\t\t\t\t['Nodes', `${snapshot.nodes.length} retained · ${snapshot.culledNodes.length} culled`],\n\t\t\t\t['Segments', `${frameGraphSegments} FG · ${opaqueIntervals} opaque`],\n\t\t\t\t['Groups', snapshot.availability.groups ? String(snapshot.debugGroups.length) : 'Unknown'],\n\t\t\t\t['Recording order', snapshot.availability.recordingOrder ? 'Available' : 'Unknown'],\n\t\t\t]),\n\t\t\tthis.createSummaryGroup('Resources', [\n\t\t\t\t['Logical / physical', `${snapshot.resources.length} / ${snapshot.physicalAllocations.length}`],\n\t\t\t\t['Texture views', snapshot.availability.textureViews ? String(snapshot.textureViewById.size) : 'Unknown'],\n\t\t\t\t['Access regions', snapshot.availability.accessRegions ? 'Available' : 'Unknown'],\n\t\t\t\t['Transient estimate', formatEstimatedBytes(metrics.transientEstimatedByteSize)],\n\t\t\t]),\n\t\t\tthis.createSummaryGroup('Pool', [\n\t\t\t\t['Retained', poolRetained],\n\t\t\t\t['Reuse', formatPoolHitRate(snapshot)],\n\t\t\t]),\n\t\t);\n\t}\n\n\tprivate createSummaryGroup(title: string, rows: readonly (readonly [string, string])[]): HTMLElement {\n\t\tconst group = document.createElement('section');\n\t\tconst heading = document.createElement('h2');\n\t\theading.textContent = title;\n\t\tgroup.appendChild(heading);\n\t\tfor (const [label, value] of rows) {\n\t\t\tconst row = document.createElement('div');\n\t\t\tconst term = document.createElement('span');\n\t\t\tterm.textContent = label;\n\t\t\tconst description = document.createElement('strong');\n\t\t\tdescription.textContent = value;\n\t\t\tdescription.title = value;\n\t\t\trow.append(term, description);\n\t\t\tgroup.appendChild(row);\n\t\t}\n\t\treturn group;\n\t}\n\n\tprivate setExportMenuOpen(open: boolean): void {\n\t\tthis.exportMenu.hidden = !open;\n\t\tthis.exportButton.setAttribute('aria-expanded', open ? 'true' : 'false');\n\t}\n\n\tprivate handleInspectorOpenChange(_open: boolean): void {\n\t\tthis.updateWorkspaceState();\n\t\tif (this.activeTab === 'graph') this.resizeGraph(false);\n\t}\n\n\tprivate updateWorkspaceState(): void {\n\t\tconst inspectorOpen = this.hasSnapshot && this.inspector.isOpen;\n\t\tthis.workspace.classList.toggle('has-capture', this.hasSnapshot);\n\t\tthis.workspace.classList.toggle('inspector-open', inspectorOpen);\n\t\tthis.inspector.root.classList.toggle('unavailable', !this.hasSnapshot);\n\t\tthis.inspectorOpenButton.hidden = !this.hasSnapshot || inspectorOpen;\n\t}\n}\n"]}
|
package/dist/styles.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"styles.d.ts","sourceRoot":"","sources":["../src/styles.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"styles.d.ts","sourceRoot":"","sources":["../src/styles.ts"],"names":[],"mappings":"AA4iCA;;;;;GAKG;AACH,wBAAgB,+BAA+B,IAAI,IAAI,CAStD"}
|
package/dist/styles.js
CHANGED
|
@@ -279,6 +279,9 @@ const FRAME_GRAPH_DEBUG_PANEL_CSS = `
|
|
|
279
279
|
}
|
|
280
280
|
.zenfg-inspector-export-menu[hidden] { display: none; }
|
|
281
281
|
.zenfg-inspector-export-menu > button {
|
|
282
|
+
display: flex;
|
|
283
|
+
align-items: center;
|
|
284
|
+
gap: 7px;
|
|
282
285
|
padding: 7px 9px;
|
|
283
286
|
border: 0;
|
|
284
287
|
border-radius: 4px;
|
|
@@ -286,6 +289,7 @@ const FRAME_GRAPH_DEBUG_PANEL_CSS = `
|
|
|
286
289
|
background: transparent;
|
|
287
290
|
font: 600 11px/1.2 var(--fgd-font-ui);
|
|
288
291
|
text-align: left;
|
|
292
|
+
white-space: nowrap;
|
|
289
293
|
cursor: pointer;
|
|
290
294
|
}
|
|
291
295
|
.zenfg-inspector-export-menu > button:hover:not(:disabled) {
|
|
@@ -591,7 +595,7 @@ button[aria-busy='true'] > .zenfg-inspector-control-icon {
|
|
|
591
595
|
.zenfg-inspector-graph-view { display: flex; flex-direction: column; }
|
|
592
596
|
.zenfg-inspector-graph-toolbar {
|
|
593
597
|
display: grid;
|
|
594
|
-
grid-template-columns:
|
|
598
|
+
grid-template-columns: minmax(0, 1fr) auto;
|
|
595
599
|
align-items: center;
|
|
596
600
|
gap: 10px;
|
|
597
601
|
min-width: 0;
|
|
@@ -600,18 +604,8 @@ button[aria-busy='true'] > .zenfg-inspector-control-icon {
|
|
|
600
604
|
border-bottom: 1px solid var(--fgd-border-subtle);
|
|
601
605
|
background: var(--fgd-surface);
|
|
602
606
|
}
|
|
603
|
-
.zenfg-inspector-graph-mode-controls,
|
|
604
607
|
.zenfg-inspector-graph-action-controls { display: flex; align-items: center; min-width: 0; }
|
|
605
608
|
.zenfg-inspector-graph-action-controls { gap: 4px; }
|
|
606
|
-
.zenfg-inspector-graph-toolbar .zenfg-inspector-mode-button {
|
|
607
|
-
margin-right: -1px;
|
|
608
|
-
border-radius: 0;
|
|
609
|
-
}
|
|
610
|
-
.zenfg-inspector-graph-toolbar .zenfg-inspector-mode-button:first-child { border-radius: 5px 0 0 5px; }
|
|
611
|
-
.zenfg-inspector-graph-toolbar .zenfg-inspector-mode-button:last-child {
|
|
612
|
-
margin-right: 0;
|
|
613
|
-
border-radius: 0 5px 5px 0;
|
|
614
|
-
}
|
|
615
609
|
.zenfg-inspector-graph-toolbar button.active,
|
|
616
610
|
.zenfg-inspector-graph-toolbar button[aria-pressed='true'] {
|
|
617
611
|
z-index: 1;
|
|
@@ -634,6 +628,9 @@ button[aria-busy='true'] > .zenfg-inspector-control-icon {
|
|
|
634
628
|
white-space: nowrap;
|
|
635
629
|
}
|
|
636
630
|
.zenfg-inspector-legend-item { display: inline-flex; align-items: center; gap: 4px; flex: 0 0 auto; }
|
|
631
|
+
.zenfg-inspector-legend-group { display: inline-flex; align-items: center; gap: 10px; flex: 0 0 auto; }
|
|
632
|
+
.zenfg-inspector-legend-group + .zenfg-inspector-legend-group { border-left: 1px solid var(--fgd-border-subtle); padding-left: 10px; }
|
|
633
|
+
.zenfg-inspector-legend-heading { color: var(--fgd-text-secondary); font-weight: 600; }
|
|
637
634
|
.zenfg-inspector-legend-swatch {
|
|
638
635
|
position: relative;
|
|
639
636
|
display: inline-block;
|
|
@@ -644,7 +641,15 @@ button[aria-busy='true'] > .zenfg-inspector-control-icon {
|
|
|
644
641
|
background: color-mix(in srgb, var(--zenfg-inspector-legend-color) 20%, var(--fgd-canvas));
|
|
645
642
|
}
|
|
646
643
|
.zenfg-inspector-legend-swatch[data-shape='ellipse'] { border-radius: 50%; }
|
|
647
|
-
.zenfg-inspector-legend-swatch[data-shape='group'] {
|
|
644
|
+
.zenfg-inspector-legend-swatch[data-shape='group'] { background: transparent; }
|
|
645
|
+
.zenfg-inspector-legend-swatch[data-shape='cut-rectangle'],
|
|
646
|
+
.zenfg-inspector-legend-swatch[data-shape='tag'] { width: 14px; height: 10px; border: 0; background: transparent; }
|
|
647
|
+
.zenfg-inspector-legend-swatch > svg { display: block; width: 100%; height: 100%; overflow: visible; }
|
|
648
|
+
.zenfg-inspector-legend-swatch > svg polygon {
|
|
649
|
+
fill: color-mix(in srgb, var(--zenfg-inspector-legend-color) 20%, var(--fgd-canvas));
|
|
650
|
+
stroke: var(--zenfg-inspector-legend-color);
|
|
651
|
+
stroke-width: 1.4;
|
|
652
|
+
}
|
|
648
653
|
.zenfg-inspector-legend-swatch[data-shape='line'] {
|
|
649
654
|
width: 16px;
|
|
650
655
|
height: 0;
|
|
@@ -737,6 +742,7 @@ button[aria-busy='true'] > .zenfg-inspector-control-icon {
|
|
|
737
742
|
.zenfg-inspector-graph-tooltip {
|
|
738
743
|
position: absolute;
|
|
739
744
|
z-index: 3;
|
|
745
|
+
width: max-content;
|
|
740
746
|
max-width: min(380px, calc(100% - 16px));
|
|
741
747
|
padding: 8px 10px;
|
|
742
748
|
border: 1px solid var(--fgd-border-strong);
|
|
@@ -828,6 +834,8 @@ button[aria-busy='true'] > .zenfg-inspector-control-icon {
|
|
|
828
834
|
overflow-wrap: anywhere;
|
|
829
835
|
white-space: normal;
|
|
830
836
|
}
|
|
837
|
+
.zenfg-inspector-relation-entry { display: grid; justify-items: start; gap: 2px; }
|
|
838
|
+
.zenfg-inspector-relation-entry > span { font: 11px/1.5 var(--fgd-font-mono); overflow-wrap: anywhere; }
|
|
831
839
|
.zenfg-inspector-inspector .zenfg-inspector-raw-detail {
|
|
832
840
|
min-width: 100%;
|
|
833
841
|
margin: 0;
|