@zenfg/inspector 0.1.0-beta.3 → 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/GUIDE.md +182 -0
- package/README.md +61 -89
- package/THEMING.md +124 -0
- package/dist/FrameGraphInspector.d.ts +23 -4
- package/dist/FrameGraphInspector.d.ts.map +1 -1
- package/dist/FrameGraphInspector.js +137 -29
- package/dist/FrameGraphInspector.js.map +1 -1
- package/dist/capture.d.ts +5 -0
- package/dist/capture.d.ts.map +1 -0
- package/dist/capture.js +2 -0
- package/dist/capture.js.map +1 -0
- package/dist/debugCaptureModel.d.ts +19 -0
- package/dist/debugCaptureModel.d.ts.map +1 -1
- package/dist/debugCaptureModel.js +36 -2
- package/dist/debugCaptureModel.js.map +1 -1
- package/dist/index.d.ts +2 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js.map +1 -1
- package/dist/panelAliasAnalysis.d.ts +1 -0
- package/dist/panelAliasAnalysis.d.ts.map +1 -1
- package/dist/panelAliasAnalysis.js +23 -54
- package/dist/panelAliasAnalysis.js.map +1 -1
- package/dist/panelCytoscapeGraphRenderer.d.ts +15 -2
- package/dist/panelCytoscapeGraphRenderer.d.ts.map +1 -1
- package/dist/panelCytoscapeGraphRenderer.js +145 -23
- package/dist/panelCytoscapeGraphRenderer.js.map +1 -1
- package/dist/panelDetailLayout.d.ts +27 -0
- package/dist/panelDetailLayout.d.ts.map +1 -0
- package/dist/panelDetailLayout.js +174 -0
- package/dist/panelDetailLayout.js.map +1 -0
- package/dist/panelDetailStyles.d.ts +2 -0
- package/dist/panelDetailStyles.d.ts.map +1 -0
- package/dist/panelDetailStyles.js +57 -0
- package/dist/panelDetailStyles.js.map +1 -0
- package/dist/panelDiagnosticsView.d.ts +10 -1
- package/dist/panelDiagnosticsView.d.ts.map +1 -1
- package/dist/panelDiagnosticsView.js +166 -57
- package/dist/panelDiagnosticsView.js.map +1 -1
- package/dist/panelDomHelpers.d.ts.map +1 -1
- package/dist/panelDomHelpers.js +6 -5
- package/dist/panelDomHelpers.js.map +1 -1
- package/dist/panelGraphLayout.d.ts +3 -2
- package/dist/panelGraphLayout.d.ts.map +1 -1
- package/dist/panelGraphLayout.js +6 -5
- package/dist/panelGraphLayout.js.map +1 -1
- package/dist/panelGraphRenderer.d.ts +10 -0
- package/dist/panelGraphRenderer.d.ts.map +1 -1
- package/dist/panelGraphRenderer.js.map +1 -1
- package/dist/panelGraphScene.d.ts +1 -0
- package/dist/panelGraphScene.d.ts.map +1 -1
- package/dist/panelGraphScene.js +69 -32
- package/dist/panelGraphScene.js.map +1 -1
- package/dist/panelGraphSearch.d.ts +16 -0
- package/dist/panelGraphSearch.d.ts.map +1 -0
- package/dist/panelGraphSearch.js +93 -0
- package/dist/panelGraphSearch.js.map +1 -0
- package/dist/panelGraphView.d.ts +82 -0
- package/dist/panelGraphView.d.ts.map +1 -1
- package/dist/panelGraphView.js +15 -4
- package/dist/panelGraphView.js.map +1 -1
- package/dist/panelGraphVisuals.d.ts +14 -6
- package/dist/panelGraphVisuals.d.ts.map +1 -1
- package/dist/panelGraphVisuals.js +126 -51
- package/dist/panelGraphVisuals.js.map +1 -1
- package/dist/panelInspectorView.d.ts +8 -0
- package/dist/panelInspectorView.d.ts.map +1 -1
- package/dist/panelInspectorView.js +242 -48
- package/dist/panelInspectorView.js.map +1 -1
- package/dist/panelListStyles.d.ts +3 -0
- package/dist/panelListStyles.d.ts.map +1 -0
- package/dist/panelListStyles.js +155 -0
- package/dist/panelListStyles.js.map +1 -0
- package/dist/panelMemoryStyles.d.ts +3 -0
- package/dist/panelMemoryStyles.d.ts.map +1 -0
- package/dist/panelMemoryStyles.js +42 -0
- package/dist/panelMemoryStyles.js.map +1 -0
- package/dist/panelMemoryView.d.ts +13 -1
- package/dist/panelMemoryView.d.ts.map +1 -1
- package/dist/panelMemoryView.js +161 -41
- package/dist/panelMemoryView.js.map +1 -1
- package/dist/panelPassesView.d.ts +15 -0
- package/dist/panelPassesView.d.ts.map +1 -1
- package/dist/panelPassesView.js +202 -72
- package/dist/panelPassesView.js.map +1 -1
- package/dist/panelRawView.d.ts +15 -0
- package/dist/panelRawView.d.ts.map +1 -0
- package/dist/panelRawView.js +105 -0
- package/dist/panelRawView.js.map +1 -0
- package/dist/panelResourcesView.d.ts +8 -0
- package/dist/panelResourcesView.d.ts.map +1 -1
- package/dist/panelResourcesView.js +62 -31
- package/dist/panelResourcesView.js.map +1 -1
- package/dist/panelSelection.d.ts +9 -1
- package/dist/panelSelection.d.ts.map +1 -1
- package/dist/panelSelection.js +34 -4
- package/dist/panelSelection.js.map +1 -1
- package/dist/panelTheme.d.ts +13 -0
- package/dist/panelTheme.d.ts.map +1 -0
- package/dist/panelTheme.js +104 -0
- package/dist/panelTheme.js.map +1 -0
- package/dist/panelTypes.d.ts +10 -1
- package/dist/panelTypes.d.ts.map +1 -1
- package/dist/panelTypes.js.map +1 -1
- package/dist/panelVisualTheme.d.ts +147 -50
- package/dist/panelVisualTheme.d.ts.map +1 -1
- package/dist/panelVisualTheme.js +34 -44
- package/dist/panelVisualTheme.js.map +1 -1
- package/dist/panelWorkbenchHelpers.d.ts +12 -1
- package/dist/panelWorkbenchHelpers.d.ts.map +1 -1
- package/dist/panelWorkbenchHelpers.js +62 -1
- package/dist/panelWorkbenchHelpers.js.map +1 -1
- package/dist/panelWorkbenchStyles.d.ts +2 -0
- package/dist/panelWorkbenchStyles.d.ts.map +1 -0
- package/dist/panelWorkbenchStyles.js +101 -0
- package/dist/panelWorkbenchStyles.js.map +1 -0
- package/dist/panelWorkbenchView.d.ts +16 -0
- package/dist/panelWorkbenchView.d.ts.map +1 -1
- package/dist/panelWorkbenchView.js +228 -50
- package/dist/panelWorkbenchView.js.map +1 -1
- package/dist/query.js.map +1 -1
- package/dist/styles.d.ts.map +1 -1
- package/dist/styles.js +147 -195
- package/dist/styles.js.map +1 -1
- package/dist/theme.d.ts +22 -0
- package/dist/theme.d.ts.map +1 -0
- package/dist/theme.js +10 -0
- package/dist/theme.js.map +1 -0
- package/dist/themeDefinitions.d.ts +251 -0
- package/dist/themeDefinitions.d.ts.map +1 -0
- package/dist/themeDefinitions.js +96 -0
- package/dist/themeDefinitions.js.map +1 -0
- package/dist/themePalette.d.ts +66 -0
- package/dist/themePalette.d.ts.map +1 -0
- package/dist/themePalette.js +37 -0
- package/dist/themePalette.js.map +1 -0
- package/dist/themes.css +165 -0
- package/package.json +44 -10
- package/src/FrameGraphInspector.ts +130 -31
- package/src/capture.ts +4 -0
- package/src/debugCaptureModel.ts +53 -2
- package/src/index.ts +6 -2
- package/src/panelAliasAnalysis.ts +24 -70
- package/src/panelCytoscapeGraphRenderer.ts +140 -23
- package/src/panelDetailLayout.ts +155 -0
- package/src/panelDetailStyles.ts +56 -0
- package/src/panelDiagnosticsView.ts +166 -85
- package/src/panelDomHelpers.ts +4 -5
- package/src/panelGraphLayout.ts +6 -5
- package/src/panelGraphRenderer.ts +7 -0
- package/src/panelGraphScene.ts +68 -30
- package/src/panelGraphSearch.ts +96 -0
- package/src/panelGraphView.ts +14 -4
- package/src/panelGraphVisuals.ts +122 -52
- package/src/panelInspectorView.ts +227 -48
- package/src/panelListStyles.ts +154 -0
- package/src/panelMemoryStyles.ts +41 -0
- package/src/panelMemoryView.ts +178 -53
- package/src/panelPassesView.ts +190 -137
- package/src/panelRawView.ts +99 -0
- package/src/panelResourcesView.ts +69 -56
- package/src/panelSelection.ts +37 -5
- package/src/panelTheme.ts +85 -0
- package/src/panelTypes.ts +7 -1
- package/src/panelVisualTheme.ts +38 -49
- package/src/panelWorkbenchHelpers.ts +60 -2
- package/src/panelWorkbenchStyles.ts +100 -0
- package/src/panelWorkbenchView.ts +201 -52
- package/src/query.ts +11 -11
- package/src/styles.ts +148 -195
- package/src/theme.ts +24 -0
- package/src/themeDefinitions.ts +103 -0
- package/src/themePalette.ts +44 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"panelInspectorView.js","sourceRoot":"","sources":["../src/panelInspectorView.ts"],"names":[],"mappings":"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","sourcesContent":["import type {\n\tFrameGraphDebugAccess,\n\tFrameGraphDebugRoot,\n\tFrameGraphDebugResourceRef,\n\tFrameGraphDebugViewModel,\n} from './debugCaptureModel.ts';\nimport { labelNode, labelResource } from './panelDomHelpers.ts';\nimport { createPanelIcon } from './panelIcons.ts';\nimport { resolveSelectedDetail } from './panelSelection.ts';\nimport type { InspectorTab, Selection } from './panelTypes.ts';\nimport {\n\tcreateRelationButton,\n\tformatEstimatedBytes,\n\tformatResourceDescriptor,\n\tgroupPath,\n\tresourceLabel,\n\ttype WorkbenchCallbacks,\n} from './panelWorkbenchHelpers.ts';\n\ntype DetailRelation = readonly [label: string, selection: Selection, description?: string];\n\nfunction formatAccessFacts(access: FrameGraphDebugAccess): string {\n\treturn [\n\t\taccess.mode, access.access,\n\t\t...(access.mode === 'write' ? [access.contents, `producesValue: ${access.producesValue}`] : []),\n\t\t...(access.bufferRange ? [`bytes ${access.bufferRange.offset}–${access.bufferRange.size === undefined ? 'end' : access.bufferRange.offset + access.bufferRange.size}`] : []),\n\t\t...(access.textureRegion ? [JSON.stringify(access.textureRegion)] : []),\n\t\t...(access.textureViewId ? [`view ${access.textureViewId}`] : []),\n\t].join(' · ');\n}\n\nfunction formatRootRange(root: FrameGraphDebugRoot): string {\n\tif (!root.range) return 'Range unavailable';\n\tif (root.range.kind === 'buffer') return `bytes ${root.range.offset}–${root.range.offset + root.range.size}`;\n\treturn root.range.regions.map((region) =>\n\t\t`mip ${region.baseMipLevel}+${region.mipLevelCount} · ${region.baseDepthSlice === undefined\n\t\t\t? `layers ${region.baseArrayLayer}+${region.arrayLayerCount}`\n\t\t\t: `depth ${region.baseDepthSlice}+${region.depthSliceCount}`} · ${region.aspect}`,\n\t).join('; ');\n}\n\nexport class InspectorView {\n\treadonly root = document.createElement('aside');\n\tprivate readonly title = document.createElement('strong');\n\tprivate readonly tabList = document.createElement('div');\n\tprivate readonly content = document.createElement('div');\n\tprivate readonly tabs = new Map<InspectorTab, HTMLButtonElement>();\n\tprivate snapshot: FrameGraphDebugViewModel | undefined;\n\tprivate selected: Selection | undefined;\n\tprivate activeTab: InspectorTab = 'summary';\n\tprivate open = true;\n\tprivate hoveredLink: HTMLButtonElement | undefined;\n\n\tconstructor(\n\t\tprivate readonly callbacks: WorkbenchCallbacks,\n\t\tprivate readonly onOpenChange: (open: boolean) => void,\n\t\tidPrefix: string,\n\t) {\n\t\tthis.root.className = 'zenfg-inspector-inspector';\n\t\tthis.root.setAttribute('aria-label', 'Selection inspector');\n\t\tconst header = document.createElement('header');\n\t\tthis.title.textContent = 'Inspector';\n\t\tconst close = document.createElement('button');\n\t\tclose.type = 'button';\n\t\tclose.className = 'zenfg-inspector-inspector-close';\n\t\tclose.appendChild(createPanelIcon('close'));\n\t\tclose.title = 'Close inspector';\n\t\tclose.setAttribute('aria-label', 'Close inspector');\n\t\tclose.addEventListener('click', () => this.setOpen(false));\n\t\theader.append(this.title, close);\n\n\t\tthis.tabList.className = 'zenfg-inspector-inspector-tabs';\n\t\tthis.tabList.setAttribute('role', 'tablist');\n\t\tthis.tabList.setAttribute('aria-label', 'Inspector views');\n\t\tfor (const [tab, label] of [['summary', 'Summary'], ['relations', 'Relations'], ['raw', 'Raw']] as const) {\n\t\t\tconst button = document.createElement('button');\n\t\t\tbutton.type = 'button';\n\t\t\tbutton.id = `${idPrefix}-inspector-${tab}-tab`;\n\t\t\tbutton.textContent = label;\n\t\t\tbutton.setAttribute('role', 'tab');\n\t\t\tbutton.setAttribute('aria-controls', `${idPrefix}-inspector-panel`);\n\t\t\tbutton.addEventListener('click', () => {\n\t\t\t\tthis.activeTab = tab;\n\t\t\t\tthis.render();\n\t\t\t});\n\t\t\tthis.tabs.set(tab, button);\n\t\t\tthis.tabList.appendChild(button);\n\t\t}\n\t\tthis.content.id = `${idPrefix}-inspector-panel`;\n\t\tthis.content.className = 'zenfg-inspector-inspector-content';\n\t\tthis.content.setAttribute('role', 'tabpanel');\n\t\tthis.root.append(header, this.tabList, this.content);\n\t\tthis.updateOpenState();\n\t\tthis.render();\n\t}\n\n\tsetSnapshot(snapshot: FrameGraphDebugViewModel): void {\n\t\tthis.snapshot = snapshot;\n\t\tthis.render();\n\t}\n\n\tsetSelection(selected: Selection | undefined, reveal = true): void {\n\t\tif (selected?.kind === 'resource'\n\t\t\t&& (this.selected?.kind !== 'resource' || this.selected.id !== selected.id)) this.activeTab = 'summary';\n\t\tthis.selected = selected;\n\t\tif (selected && reveal) this.setOpen(true);\n\t\tthis.render();\n\t}\n\n\tsetOpen(open: boolean): void {\n\t\tif (this.open === open) return;\n\t\tif (!open) this.clearLinkHover();\n\t\tthis.open = open;\n\t\tthis.updateOpenState();\n\t\tthis.onOpenChange(open);\n\t}\n\n\tget isOpen(): boolean {\n\t\treturn this.open;\n\t}\n\n\tprivate updateOpenState(): void {\n\t\tthis.root.hidden = !this.open;\n\t\tthis.root.classList.toggle('open', this.open);\n\t}\n\n\tprivate render(): void {\n\t\tthis.clearLinkHover();\n\t\tfor (const [tab, button] of this.tabs) {\n\t\t\tconst active = tab === this.activeTab;\n\t\t\tbutton.classList.toggle('active', active);\n\t\t\tbutton.setAttribute('aria-selected', active ? 'true' : 'false');\n\t\t\tif (active) this.content.setAttribute('aria-labelledby', button.id);\n\t\t}\n\t\tconst snapshot = this.snapshot;\n\t\tconst selected = this.selected;\n\t\tthis.content.replaceChildren();\n\t\tif (!snapshot || !selected) {\n\t\t\tthis.title.textContent = 'Inspector';\n\t\t\tconst empty = document.createElement('p');\n\t\t\tempty.className = 'zenfg-inspector-muted';\n\t\t\tempty.textContent = 'Select a pass, group, resource, allocation, root, culled node, or segment.';\n\t\t\tthis.content.appendChild(empty);\n\t\t\treturn;\n\t\t}\n\t\tthis.title.textContent = this.selectionTitle(snapshot, selected);\n\t\tif (this.activeTab === 'raw') {\n\t\t\tconst raw = document.createElement('pre');\n\t\t\traw.className = 'zenfg-inspector-raw-detail';\n\t\t\traw.textContent = JSON.stringify(resolveSelectedDetail(snapshot, selected), null, 2);\n\t\t\tthis.content.appendChild(raw);\n\t\t} else if (this.activeTab === 'relations') {\n\t\t\tthis.content.appendChild(this.createRelations(snapshot, selected));\n\t\t} else {\n\t\t\tthis.content.appendChild(this.createSummary(snapshot, selected));\n\t\t}\n\t}\n\n\tprivate selectionTitle(snapshot: FrameGraphDebugViewModel, selection: Selection): string {\n\t\tswitch (selection.kind) {\n\t\t\tcase 'node': {\n\t\t\t\tconst node = snapshot.nodeById.get(selection.id);\n\t\t\t\treturn node ? labelNode(node) : `Pass #${selection.id}`;\n\t\t\t}\n\t\t\tcase 'group': return snapshot.groupByPathKey.get(selection.pathKey)?.label ?? 'Group';\n\t\t\tcase 'resource': {\n\t\t\t\tconst resource = snapshot.resourceById.get(selection.id);\n\t\t\t\treturn resource ? labelResource(resource) : `Resource #${selection.id}`;\n\t\t\t}\n\t\t\tcase 'allocation': return `Allocation #${selection.id}`;\n\t\t\tcase 'root': return 'Output root';\n\t\t\tcase 'culled': return `Culled node #${selection.index}`;\n\t\t\tcase 'segment': return `Segment #${selection.index}`;\n\t\t}\n\t}\n\n\tprivate createSummary(snapshot: FrameGraphDebugViewModel, selection: Selection): HTMLElement {\n\t\tswitch (selection.kind) {\n\t\t\tcase 'node': {\n\t\t\t\tconst node = snapshot.nodeById.get(selection.id);\n\t\t\t\tif (!node) return this.summary([]);\n\t\t\t\tconst segment = snapshot.segmentByNodeId.get(node.id);\n\t\t\t\treturn this.summary([\n\t\t\t\t\t['Kind', node.kind],\n\t\t\t\t\t['Order', String(node.order)],\n\t\t\t\t\t['Group', groupPath(snapshot, node.debugGroupId)],\n\t\t\t\t\t['Segment', segment ? `#${segment.index} ${segment.kind}` : '-'],\n\t\t\t\t\t['GPU', node.kind === 'external-submission' ? 'Opaque' : node.gpuDurationMicros === undefined ? 'Not timed' : `${(node.gpuDurationMicros / 1000).toFixed(3)} ms`],\n\t\t\t\t\t['Accesses', `${node.reads.length} reads · ${node.writes.length} writes`],\n\t\t\t\t\t['Side effect', node.sideEffect ? 'yes' : 'no'],\n\t\t\t\t]);\n\t\t\t}\n\t\t\tcase 'group': {\n\t\t\t\tconst group = snapshot.groupByPathKey.get(selection.pathKey);\n\t\t\t\tif (!group) return this.summary([]);\n\t\t\t\treturn this.summary([\n\t\t\t\t\t['Path', group.path.join(' / ')],\n\t\t\t\t\t['Retained', String(group.summary.retainedNodeCount)],\n\t\t\t\t\t['Culled', String(group.summary.culledNodeCount)],\n\t\t\t\t\t['GPU coverage', `${group.summary.timedNodeCount}/${group.summary.timingEligibleNodeCount}`],\n\t\t\t\t\t['GPU work', `${(group.summary.gpuWorkDurationMicros / 1000).toFixed(3)} ms`],\n\t\t\t\t\t['Allocations', String(group.summary.physicalAllocationCount)],\n\t\t\t\t\t['Segments', String(group.summary.executionSegmentCount)],\n\t\t\t\t]);\n\t\t\t}\n\t\t\tcase 'resource': {\n\t\t\t\tconst resource = snapshot.resourceById.get(selection.id);\n\t\t\t\tif (!resource) return this.summary([]);\n\t\t\t\treturn this.summary([\n\t\t\t\t\t['Kind / origin', `${resource.kind} · ${resource.origin}`],\n\t\t\t\t\t['Group', groupPath(snapshot, resource.debugGroupId)],\n\t\t\t\t\t['Descriptor', formatResourceDescriptor(resource)],\n\t\t\t\t\t['Estimated', formatEstimatedBytes(resource.estimatedByteSize)],\n\t\t\t\t\t['Lifetime', resource.lifetime ? `${resource.lifetime.firstUse}–${resource.lifetime.lastUse}` : '-'],\n\t\t\t\t\t['Allocation', resource.physicalResourceId === undefined ? '-' : `#${resource.physicalResourceId}`],\n\t\t\t\t\t['Usage', resource.usageFlags.join(', ') || '-'],\n\t\t\t\t]);\n\t\t\t}\n\t\t\tcase 'allocation': {\n\t\t\t\tconst allocation = snapshot.allocationById.get(selection.id);\n\t\t\t\tif (!allocation) return this.summary([]);\n\t\t\t\treturn this.summary([\n\t\t\t\t\t['Kind', allocation.kind],\n\t\t\t\t\t['Compatibility class', String(allocation.compatibilityClassId)],\n\t\t\t\t\t['Estimated', formatEstimatedBytes(allocation.estimatedByteSize)],\n\t\t\t\t\t['Logical resources', String(allocation.resourceIds.length)],\n\t\t\t\t\t['Alias', allocation.resourceIds.length > 1 ? `yes · ×${allocation.resourceIds.length}` : 'single'],\n\t\t\t\t]);\n\t\t\t}\n\t\t\tcase 'root': {\n\t\t\t\tconst root = snapshot.roots.find((root) => root.key === selection.key);\n\t\t\t\treturn this.summary(root ? [\n\t\t\t\t\t['Reason', root.reason],\n\t\t\t\t\t['Node', root.nodeId === undefined ? '-' : `#${root.nodeId}`],\n\t\t\t\t\t['Resource', root.resource ? this.viewResourceButton(snapshot, root.resource.id) : '-'],\n\t\t\t\t\t...(root.reason === 'side-effect' ? [] : [\n\t\t\t\t\t\t['Range', root.range ? JSON.stringify(root.range) : 'Unavailable in Legacy capture'],\n\t\t\t\t\t\t['Initial contents', root.resolution ? String(root.resolution.usesInitialContents) : 'Unavailable in Legacy capture'],\n\t\t\t\t\t\t['Producers', root.resolution ? root.resolution.producerNodeIds.join(', ') || 'None' : 'Unavailable in Legacy capture'],\n\t\t\t\t\t] as [string, string][]),\n\t\t\t\t] : []);\n\t\t\t}\n\t\t\tcase 'culled': {\n\t\t\t\tconst culled = snapshot.culledNodes[selection.index];\n\t\t\t\treturn this.summary(culled ? [\n\t\t\t\t\t['Node', labelNode(culled.node)],\n\t\t\t\t\t['Kind', culled.node.kind],\n\t\t\t\t\t['Group', groupPath(snapshot, culled.node.debugGroupId)],\n\t\t\t\t\t['Reason', culled.reason],\n\t\t\t\t\t['Accesses', `${culled.node.reads.length} reads · ${culled.node.writes.length} writes`],\n\t\t\t\t] : []);\n\t\t\t}\n\t\t\tcase 'segment': {\n\t\t\t\tconst segment = snapshot.segmentByIndex.get(selection.index);\n\t\t\t\treturn this.summary(segment ? [\n\t\t\t\t\t['Kind', segment.kind === 'frame-graph' ? 'FrameGraph command segment' : 'Opaque interval'],\n\t\t\t\t\t['Nodes', String(segment.nodeIds.length)],\n\t\t\t\t\t['Meaning', segment.kind === 'external-submission'\n\t\t\t\t\t\t? 'Boundary around external work; not an actual third-party submission count.'\n\t\t\t\t\t\t: 'Contiguous FrameGraph-encoded command work.'],\n\t\t\t\t] : []);\n\t\t\t}\n\t\t}\n\t}\n\n\tprivate createRelations(snapshot: FrameGraphDebugViewModel, selection: Selection): HTMLElement {\n\t\tconst host = document.createElement('div');\n\t\thost.className = 'zenfg-inspector-inspector-relations';\n\t\tswitch (selection.kind) {\n\t\t\tcase 'node': {\n\t\t\t\tconst node = snapshot.nodeById.get(selection.id);\n\t\t\t\tif (node) {\n\t\t\t\t\thost.append(\n\t\t\t\t\t\tthis.accessRelations('Reads', node.reads),\n\t\t\t\t\t\tthis.accessRelations('Writes', node.writes),\n\t\t\t\t\t);\n\t\t\t\t\tconst segment = snapshot.segmentByNodeId.get(node.id);\n\t\t\t\t\tif (segment) host.appendChild(this.relationGroup('Segment', [\n\t\t\t\t\t\t[`#${segment.index} ${segment.kind}`, { kind: 'segment', index: segment.index }],\n\t\t\t\t\t]));\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase 'group': {\n\t\t\t\tconst group = snapshot.groupByPathKey.get(selection.pathKey);\n\t\t\t\tif (group) {\n\t\t\t\t\thost.append(\n\t\t\t\t\t\tthis.resourceRelations('Inputs', group.summary.inputResources),\n\t\t\t\t\t\tthis.resourceRelations('Outputs', group.summary.outputResources),\n\t\t\t\t\t\tthis.relationGroup('Output roots', group.summary.outputRoots.map((root) => [\n\t\t\t\t\t\t\t`${root.resource ? labelResource(root.resource) : '-'} · ${root.reason} · ${root.range ? JSON.stringify(root.range) : 'Range unavailable'}`,\n\t\t\t\t\t\t\t{ kind: 'root', key: root.key },\n\t\t\t\t\t\t])),\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase 'resource': {\n\t\t\t\tconst resource = snapshot.resourceById.get(selection.id);\n\t\t\t\tconst accesses = snapshot.accessesByResourceId.get(selection.id) ?? [];\n\t\t\t\tconst passRelations: DetailRelation[] = [];\n\t\t\t\tfor (const access of accesses) {\n\t\t\t\t\tconst nodeSelection = this.accessNodeSelection(snapshot, access.nodeId);\n\t\t\t\t\tif (nodeSelection) passRelations.push([\n\t\t\t\t\t\tthis.accessNodeLabel(snapshot, access.nodeId),\n\t\t\t\t\t\tnodeSelection,\n\t\t\t\t\t\tformatAccessFacts(access),\n\t\t\t\t\t]);\n\t\t\t\t}\n\t\t\t\thost.appendChild(this.relationGroup('Pass accesses', passRelations));\n\t\t\t\tconst roots = snapshot.roots.filter((root) => root.resource?.id === selection.id);\n\t\t\t\tif (roots.length) host.appendChild(this.relationGroup('Output roots', roots.map((root) => [\n\t\t\t\t\t`${root.reason} · ${formatRootRange(root)}`, { kind: 'root', key: root.key },\n\t\t\t\t])));\n\t\t\t\tif (resource?.physicalResourceId !== undefined) host.appendChild(this.relationGroup('Allocation', [\n\t\t\t\t\t[`#${resource.physicalResourceId}`, { kind: 'allocation', id: resource.physicalResourceId }],\n\t\t\t\t]));\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase 'allocation': {\n\t\t\t\tconst allocation = snapshot.allocationById.get(selection.id);\n\t\t\t\tif (allocation) host.appendChild(this.relationGroup('Logical resources', allocation.resourceIds.map((id) => [\n\t\t\t\t\tresourceLabel(snapshot, id), { kind: 'resource', id },\n\t\t\t\t])));\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase 'root': {\n\t\t\t\tconst root = snapshot.roots.find((root) => root.key === selection.key);\n\t\t\t\tconst relations: Array<readonly [string, Selection]> = [];\n\t\t\t\tif (root?.nodeId !== undefined && snapshot.nodeById.has(root.nodeId)) relations.push([\n\t\t\t\t\tthis.accessNodeLabel(snapshot, root.nodeId), { kind: 'node', id: root.nodeId },\n\t\t\t\t]);\n\t\t\t\tif (root?.resource) host.appendChild(this.relationGroup('Resource', [[labelResource(root.resource), { kind: 'resource', id: root.resource.id }]]));\n\t\t\t\tif (root?.resource && root.resolution?.usesInitialContents) relations.push([`Initial contents · ${labelResource(root.resource)}`, { kind: 'resource', id: root.resource.id }]);\n\t\t\t\tfor (const id of root?.resolution?.producerNodeIds ?? []) relations.push([this.accessNodeLabel(snapshot, id), { kind: 'node', id }]);\n\t\t\t\thost.appendChild(this.relationGroup('Output sources', relations));\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase 'culled': {\n\t\t\t\tconst culled = snapshot.culledNodes[selection.index];\n\t\t\t\tif (culled) host.append(\n\t\t\t\t\tthis.accessRelations('Reads', culled.node.reads),\n\t\t\t\t\tthis.accessRelations('Writes', culled.node.writes),\n\t\t\t\t);\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase 'segment': {\n\t\t\t\tconst segment = snapshot.segmentByIndex.get(selection.index);\n\t\t\t\tif (segment) host.appendChild(this.relationGroup('Passes', segment.nodeIds.flatMap((id) => {\n\t\t\t\t\tconst node = snapshot.nodeById.get(id);\n\t\t\t\t\treturn node ? [[labelNode(node), { kind: 'node', id }] as const] : [];\n\t\t\t\t})));\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t\tif (host.childElementCount === 0) {\n\t\t\tconst empty = document.createElement('p');\n\t\t\tempty.className = 'zenfg-inspector-muted';\n\t\t\tempty.textContent = 'No related objects.';\n\t\t\thost.appendChild(empty);\n\t\t}\n\t\treturn host;\n\t}\n\n\tprivate accessRelations(title: string, accesses: readonly FrameGraphDebugAccess[]): HTMLElement {\n\t\treturn this.relationGroup(title, accesses.map((access) => [\n\t\t\tlabelResource(access.resource),\n\t\t\t{ kind: 'resource', id: access.resource.id },\n\t\t\tformatAccessFacts(access),\n\t\t]));\n\t}\n\n\tprivate resourceRelations(title: string, resources: readonly FrameGraphDebugResourceRef[]): HTMLElement {\n\t\treturn this.relationGroup(title, resources.map((resource) => [\n\t\t\tlabelResource(resource), { kind: 'resource', id: resource.id },\n\t\t]));\n\t}\n\n\tprivate relationGroup(title: string, relations: readonly DetailRelation[]): HTMLElement {\n\t\tconst section = document.createElement('section');\n\t\tconst heading = document.createElement('h3');\n\t\theading.textContent = `${title} ${relations.length}`;\n\t\tsection.appendChild(heading);\n\t\tfor (const [label, selection, description] of relations) {\n\t\t\tconst link = this.createDetailLink(label, selection);\n\t\t\tif (description === undefined) {\n\t\t\t\tsection.appendChild(link);\n\t\t\t} else {\n\t\t\t\tconst entry = document.createElement('div');\n\t\t\t\tentry.className = 'zenfg-inspector-relation-entry';\n\t\t\t\tconst metadata = document.createElement('span');\n\t\t\t\tmetadata.className = 'zenfg-inspector-muted';\n\t\t\t\tmetadata.textContent = description;\n\t\t\t\tentry.append(link, metadata);\n\t\t\t\tsection.appendChild(entry);\n\t\t\t}\n\t\t}\n\t\tif (relations.length === 0) {\n\t\t\tconst empty = document.createElement('span');\n\t\t\tempty.className = 'zenfg-inspector-muted';\n\t\t\tempty.textContent = 'None';\n\t\t\tsection.appendChild(empty);\n\t\t}\n\t\treturn section;\n\t}\n\n\tprivate selectRelated(selection: Selection): void {\n\t\tthis.clearLinkHover();\n\t\tthis.callbacks.onSelect(selection);\n\t}\n\n\tprivate viewResourceButton(snapshot: FrameGraphDebugViewModel, resourceId: string): HTMLButtonElement {\n\t\treturn this.createDetailLink(`View resource · ${resourceLabel(snapshot, resourceId)}`,\n\t\t\t{ kind: 'resource', id: resourceId });\n\t}\n\n\tprivate createDetailLink(label: string, selection: Selection): HTMLButtonElement {\n\t\tconst link = createRelationButton(label, selection, (target) => this.selectRelated(target));\n\t\tlink.addEventListener('mouseenter', () => {\n\t\t\tthis.hoveredLink = link;\n\t\t\tthis.callbacks.onHover(selection);\n\t\t});\n\t\tlink.addEventListener('mouseleave', () => {\n\t\t\tif (this.hoveredLink === link) this.clearLinkHover();\n\t\t});\n\t\treturn link;\n\t}\n\n\tprivate clearLinkHover(): void {\n\t\tif (!this.hoveredLink) return;\n\t\tthis.hoveredLink = undefined;\n\t\tthis.callbacks.onHover(undefined);\n\t}\n\n\tprivate summary(rows: readonly (readonly [string, string | HTMLElement])[]): HTMLElement {\n\t\tconst summary = document.createElement('dl');\n\t\tsummary.className = 'zenfg-inspector-inspector-summary';\n\t\tfor (const [label, value] of rows) {\n\t\t\tconst term = document.createElement('dt');\n\t\t\tterm.textContent = label;\n\t\t\tconst description = document.createElement('dd');\n\t\t\tif (typeof value === 'string') {\n\t\t\t\tdescription.textContent = value;\n\t\t\t\tdescription.title = value;\n\t\t\t} else {\n\t\t\t\tdescription.appendChild(value);\n\t\t\t}\n\t\t\tsummary.append(term, description);\n\t\t}\n\t\treturn summary;\n\t}\n\n\tprivate accessNodeLabel(snapshot: FrameGraphDebugViewModel, nodeId: string): string {\n\t\tconst node = snapshot.nodeById.get(nodeId);\n\t\tif (node) return labelNode(node);\n\t\tconst culled = snapshot.culledNodes.find((candidate) => candidate.node.id === nodeId);\n\t\treturn culled ? `${labelNode(culled.node)} (culled)` : `node-${nodeId}`;\n\t}\n\n\tprivate accessNodeSelection(snapshot: FrameGraphDebugViewModel, nodeId: string): Selection | undefined {\n\t\tif (snapshot.nodeById.has(nodeId)) return { kind: 'node', id: nodeId };\n\t\tconst index = snapshot.culledNodes.findIndex((candidate) => candidate.node.id === nodeId);\n\t\treturn index < 0 ? undefined : { kind: 'culled', index };\n\t}\n}\n"]}
|
|
1
|
+
{"version":3,"file":"panelInspectorView.js","sourceRoot":"","sources":["../src/panelInspectorView.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,SAAS,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAChE,OAAO,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAClD,OAAO,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAClD,OAAO,EAAE,oBAAoB,EAAE,8BAA8B,EAAE,MAAM,qBAAqB,CAAC;AAE3F,OAAO,EACN,oBAAoB,EACpB,oBAAoB,EACpB,wBAAwB,EACxB,oBAAoB,EACpB,iBAAiB,EACjB,kBAAkB,EAClB,YAAY,EACZ,SAAS,EACT,aAAa,GAEb,MAAM,4BAA4B,CAAC;AAIpC,SAAS,iBAAiB,CAAC,MAA6B;IACvD,OAAO;QACN,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM;QAC1B,GAAG,CAAC,MAAM,CAAC,IAAI,KAAK,OAAO,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,QAAQ,EAAE,MAAM,CAAC,aAAa,CAAC,CAAC,CAAC,kBAAkB,CAAC,CAAC,CAAC,0BAA0B,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QAC7H,GAAG,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,SAAS,MAAM,CAAC,WAAW,CAAC,MAAM,IAAI,MAAM,CAAC,WAAW,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,WAAW,CAAC,MAAM,GAAG,MAAM,CAAC,WAAW,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QAC5K,GAAG,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,mBAAmB,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QAC5E,GAAG,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,QAAQ,MAAM,CAAC,aAAa,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;KACjE,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AACf,CAAC;AAED,SAAS,mBAAmB,CAAC,MAA2D;IACvF,MAAM,GAAG,GAAG,CAAC,KAAyB,EAAE,KAAyB,EAAE,EAAE,CAAC,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,GAAG,KAAK,MAAM,CAAC,CAAC,CAAC,GAAG,KAAK,IAAI,KAAK,GAAG,KAAK,GAAG,CAAC,EAAE,CAAC;IAC/K,OAAO,OAAO,GAAG,CAAC,MAAM,CAAC,YAAY,EAAE,MAAM,CAAC,aAAa,CAAC,MAAM,MAAM,CAAC,cAAc,KAAK,SAAS;QACpG,CAAC,CAAC,UAAU,GAAG,CAAC,MAAM,CAAC,cAAc,EAAE,MAAM,CAAC,eAAe,CAAC,EAAE;QAChE,CAAC,CAAC,SAAS,GAAG,CAAC,MAAM,CAAC,cAAc,EAAE,MAAM,CAAC,eAAe,CAAC,EAAE,aAAa,MAAM,CAAC,MAAM,EAAE,CAAC;AAC9F,CAAC;AAED,SAAS,eAAe,CAAC,IAAyB;IACjD,IAAI,CAAC,IAAI,CAAC,KAAK;QAAE,OAAO,mBAAmB,CAAC;IAC5C,IAAI,IAAI,CAAC,KAAK,CAAC,IAAI,KAAK,QAAQ;QAAE,OAAO,SAAS,IAAI,CAAC,KAAK,CAAC,MAAM,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC;IAC7G,OAAO,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,mBAAmB,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC/D,CAAC;AAED,MAAM,OAAO,aAAa;IAcP;IACA;IAdT,IAAI,GAAG,QAAQ,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC;IAC/B,KAAK,GAAG,QAAQ,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC;IACzC,OAAO,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;IACxC,OAAO,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;IACxC,IAAI,GAAG,IAAI,GAAG,EAAmC,CAAC;IAC3D,QAAQ,CAAuC;IAC/C,QAAQ,CAAwB;IAChC,SAAS,GAAiB,SAAS,CAAC;IACpC,IAAI,GAAG,KAAK,CAAC;IACb,WAAW,CAAgC;IAC3C,QAAQ,CAAkH;IAElI,YACkB,SAA6B,EAC7B,YAAqC,EACtD,QAAgB;QAFC,cAAS,GAAT,SAAS,CAAoB;QAC7B,iBAAY,GAAZ,YAAY,CAAyB;QAGtD,IAAI,CAAC,IAAI,CAAC,SAAS,GAAG,2BAA2B,CAAC;QAClD,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,YAAY,EAAE,qBAAqB,CAAC,CAAC;QAC5D,MAAM,MAAM,GAAG,QAAQ,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC;QAChD,IAAI,CAAC,KAAK,CAAC,WAAW,GAAG,WAAW,CAAC;QACrC,MAAM,KAAK,GAAG,QAAQ,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC;QAC/C,KAAK,CAAC,IAAI,GAAG,QAAQ,CAAC;QACtB,KAAK,CAAC,SAAS,GAAG,iCAAiC,CAAC;QACpD,KAAK,CAAC,WAAW,CAAC,eAAe,CAAC,OAAO,CAAC,CAAC,CAAC;QAC5C,KAAK,CAAC,KAAK,GAAG,iBAAiB,CAAC;QAChC,KAAK,CAAC,YAAY,CAAC,YAAY,EAAE,iBAAiB,CAAC,CAAC;QACpD,KAAK,CAAC,gBAAgB,CAAC,OAAO,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC;QAC3D,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;QAEjC,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,iBAAiB,CAAC,CAAC;QAC3D,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC,SAAS,EAAE,SAAS,CAAC,EAAE,CAAC,WAAW,EAAE,WAAW,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,CAAC,CAAU,EAAE,CAAC;YAC1G,MAAM,MAAM,GAAG,QAAQ,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC;YAChD,MAAM,CAAC,IAAI,GAAG,QAAQ,CAAC;YACvB,MAAM,CAAC,EAAE,GAAG,GAAG,QAAQ,cAAc,GAAG,MAAM,CAAC;YAC/C,MAAM,CAAC,WAAW,GAAG,KAAK,CAAC;YAC3B,MAAM,CAAC,YAAY,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;YACnC,MAAM,CAAC,YAAY,CAAC,eAAe,EAAE,GAAG,QAAQ,kBAAkB,CAAC,CAAC;YACpE,MAAM,CAAC,gBAAgB,CAAC,OAAO,EAAE,GAAG,EAAE;gBACrC,IAAI,CAAC,SAAS,GAAG,GAAG,CAAC;gBACrB,IAAI,CAAC,MAAM,EAAE,CAAC;YACf,CAAC,CAAC,CAAC;YACH,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;YAC3B,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;QAClC,CAAC;QACD,iBAAiB,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAChC,IAAI,CAAC,OAAO,CAAC,EAAE,GAAG,GAAG,QAAQ,kBAAkB,CAAC;QAChD,IAAI,CAAC,OAAO,CAAC,SAAS,GAAG,mCAAmC,CAAC;QAC7D,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;QAC9C,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC;QACrD,IAAI,CAAC,eAAe,EAAE,CAAC;QACvB,IAAI,CAAC,MAAM,EAAE,CAAC;IACf,CAAC;IAED,WAAW,CAAC,QAAkC;QAC7C,IAAI,IAAI,CAAC,QAAQ,KAAK,QAAQ;YAAE,IAAI,CAAC,QAAQ,GAAG,SAAS,CAAC;QAC1D,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;QACzB,IAAI,CAAC,MAAM,EAAE,CAAC;IACf,CAAC;IAED,YAAY,CAAC,QAA+B,EAAE,MAAM,GAAG,IAAI;QAC1D,IAAI,CAAC,QAAQ,IAAI,CAAC,IAAI,CAAC,QAAQ,IAAI,YAAY,CAAC,QAAQ,CAAC,KAAK,YAAY,CAAC,IAAI,CAAC,QAAQ,CAAC;YAAE,IAAI,CAAC,QAAQ,GAAG,SAAS,CAAC;QACrH,IAAI,QAAQ,EAAE,IAAI,KAAK,UAAU;eAC7B,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,KAAK,UAAU,IAAI,IAAI,CAAC,QAAQ,CAAC,EAAE,KAAK,QAAQ,CAAC,EAAE,CAAC;YAAE,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;QACzG,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;QACzB,IAAI,CAAC,QAAQ;YAAE,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;aAC9B,IAAI,MAAM,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;YAC/B,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;YACnB,OAAO;QACR,CAAC;QACD,IAAI,CAAC,MAAM,EAAE,CAAC;IACf,CAAC;IAED,OAAO,CAAC,IAAa;QACpB,IAAI,IAAI,CAAC,IAAI,KAAK,IAAI;YAAE,OAAO;QAC/B,IAAI,CAAC,IAAI;YAAE,IAAI,CAAC,cAAc,EAAE,CAAC;QACjC,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,IAAI,CAAC,eAAe,EAAE,CAAC;QACvB,IAAI,IAAI;YAAE,IAAI,CAAC,MAAM,EAAE,CAAC;QACxB,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC;IACzB,CAAC;IAED,IAAI,MAAM;QACT,OAAO,IAAI,CAAC,IAAI,CAAC;IAClB,CAAC;IAEO,eAAe;QACtB,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC;QAC9B,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC;IAC/C,CAAC;IAEO,MAAM;QACb,MAAM,YAAY,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAC;QACnE,IAAI,CAAC,cAAc,EAAE,CAAC;QACtB,KAAK,MAAM,CAAC,GAAG,EAAE,MAAM,CAAC,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;YACvC,MAAM,MAAM,GAAG,GAAG,KAAK,IAAI,CAAC,SAAS,CAAC;YACtC,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,CAAC,QAAQ,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YAClC,IAAI,MAAM;gBAAE,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,iBAAiB,EAAE,MAAM,CAAC,EAAE,CAAC,CAAC;QACrE,CAAC;QACD,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC;QAC/B,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC;QAC/B,IAAI,CAAC,OAAO,CAAC,eAAe,EAAE,CAAC;QAC/B,IAAI,CAAC,QAAQ,IAAI,CAAC,QAAQ,EAAE,CAAC;YAC5B,IAAI,CAAC,KAAK,CAAC,WAAW,GAAG,WAAW,CAAC;YACrC,MAAM,KAAK,GAAG,QAAQ,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC;YAC1C,KAAK,CAAC,SAAS,GAAG,uBAAuB,CAAC;YAC1C,KAAK,CAAC,WAAW,GAAG,4EAA4E,CAAC;YACjG,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;YAChC,OAAO;QACR,CAAC;QACD,IAAI,CAAC,KAAK,CAAC,WAAW,GAAG,IAAI,CAAC,cAAc,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;QACjE,IAAI,CAAC,IAAI,CAAC,IAAI;YAAE,OAAO;QACvB,IAAI,IAAI,CAAC,SAAS,KAAK,KAAK,EAAE,CAAC;YAC9B,MAAM,GAAG,GAAG,YAAY,CAAC,QAAQ,CAAC,CAAC;YACnC,IAAI,IAAI,CAAC,QAAQ,EAAE,QAAQ,KAAK,QAAQ,IAAI,IAAI,CAAC,QAAQ,CAAC,GAAG,KAAK,GAAG,EAAE,CAAC;gBACvE,MAAM,MAAM,GAAG,8BAA8B,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;gBAClE,IAAI,CAAC,QAAQ,GAAG,MAAM,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,GAAG,EAAE,IAAI,EAAE,IAAI,aAAa,CAAC,MAAM,EAAE,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC;YACvI,CAAC;YACD,IAAI,IAAI,CAAC,QAAQ;gBAAE,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;;gBAChE,IAAI,CAAC,OAAO,CAAC,WAAW,GAAG,+CAA+C,CAAC;QACjF,CAAC;aAAM,IAAI,IAAI,CAAC,SAAS,KAAK,WAAW,EAAE,CAAC;YAC3C,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,IAAI,CAAC,eAAe,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC,CAAC;QACpE,CAAC;aAAM,CAAC;YACP,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,qBAAqB,CAAC,QAAQ,EAAE,QAAQ,CAAC,EAAE,IAAI,CAAC,aAAa,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC,CAAC;YAC5G,MAAM,QAAQ,GAAG,IAAI,CAAC,WAAW,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;YACtD,IAAI,QAAQ;gBAAE,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YACtF,MAAM,WAAW,GAAG,IAAI,CAAC,iBAAiB,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;YAC/D,IAAI,WAAW;gBAAE,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,WAAW,CAAC,CAAC;YACvD,IAAI,QAAQ,CAAC,IAAI,KAAK,MAAM,IAAI,QAAQ,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;gBAC5D,MAAM,IAAI,GAAG,QAAQ,CAAC,QAAQ,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC,IAAI,QAAQ,CAAC,UAAU,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC;gBAC9F,IAAI,IAAI,EAAE,CAAC;oBACV,MAAM,QAAQ,GAAG,QAAQ,CAAC,aAAa,CAAC,SAAS,CAAC,CAAC;oBACnD,MAAM,OAAO,GAAG,QAAQ,CAAC,aAAa,CAAC,SAAS,CAAC,CAAC;oBAClD,OAAO,CAAC,WAAW,GAAG,kBAAkB,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC;oBACjF,QAAQ,CAAC,MAAM,CAAC,OAAO,EAAE,IAAI,CAAC,eAAe,CAAC,OAAO,EAAE,IAAI,CAAC,KAAK,CAAC,EAAE,IAAI,CAAC,eAAe,CAAC,QAAQ,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC;oBACjH,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC;gBACpC,CAAC;YACF,CAAC;QACF,CAAC;QACD,6EAA6E;QAC7E,IAAI,YAAY;YAAE,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,KAAK,EAAE,CAAC;IAC1D,CAAC;IAEO,cAAc,CAAC,QAAkC,EAAE,SAAoB;QAC9E,QAAQ,SAAS,CAAC,IAAI,EAAE,CAAC;YACxB,KAAK,MAAM,CAAC,CAAC,CAAC;gBACb,MAAM,IAAI,GAAG,QAAQ,CAAC,QAAQ,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC;gBACjD,OAAO,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,EAAE,CAAC;YAC9C,CAAC;YACD,KAAK,OAAO,CAAC,CAAC,OAAO,QAAQ,CAAC,cAAc,CAAC,GAAG,CAAC,SAAS,CAAC,OAAO,CAAC,EAAE,KAAK,IAAI,OAAO,CAAC;YACtF,KAAK,UAAU,CAAC,CAAC,CAAC;gBACjB,MAAM,QAAQ,GAAG,QAAQ,CAAC,YAAY,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC;gBACzD,OAAO,QAAQ,CAAC,CAAC,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,EAAE,CAAC;YAC1D,CAAC;YACD,KAAK,YAAY,CAAC,CAAC,OAAO,mBAAmB,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC,CAAC,cAAc,SAAS,CAAC,EAAE,EAAE,CAAC;YAC/G,KAAK,MAAM,CAAC,CAAC,OAAO,aAAa,CAAC;YAClC,KAAK,QAAQ,CAAC,CAAC,OAAO,GAAG,QAAQ,CAAC,UAAU,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,KAAK,IAAI,SAAS,CAAC,EAAE,WAAW,CAAC;YACtG,KAAK,SAAS,CAAC,CAAC,OAAO,YAAY,SAAS,CAAC,KAAK,EAAE,CAAC;QACtD,CAAC;IACF,CAAC;IAEO,aAAa,CAAC,QAAkC,EAAE,SAAoB;QAC7E,QAAQ,SAAS,CAAC,IAAI,EAAE,CAAC;YACxB,KAAK,MAAM,CAAC,CAAC,CAAC;gBACb,MAAM,IAAI,GAAG,QAAQ,CAAC,QAAQ,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC;gBACjD,IAAI,CAAC,IAAI;oBAAE,OAAO,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;gBACnC,MAAM,OAAO,GAAG,QAAQ,CAAC,eAAe,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;gBACtD,MAAM,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,MAAM,KAAK,IAAI,CAAC,EAAE,IAAI,IAAI,CAAC,UAAU,EAAE,eAAe,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;gBAC7H,OAAO,IAAI,CAAC,OAAO,CAAC;oBACnB,CAAC,eAAe,EAAE,0EAA0E,CAAC;oBAC7F,CAAC,WAAW,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,mEAAmE,CAAC;oBAC/I,CAAC,MAAM,EAAE,IAAI,CAAC,IAAI,CAAC;oBACnB,CAAC,gBAAgB,EAAE,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;oBACtC,CAAC,OAAO,EAAE,SAAS,CAAC,QAAQ,EAAE,IAAI,CAAC,YAAY,CAAC,CAAC;oBACjD,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC,CAAC,IAAI,OAAO,CAAC,KAAK,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC;oBAChE,CAAC,cAAc,EAAE,IAAI,CAAC,iBAAiB,KAAK,SAAS,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC;oBAC7H,CAAC,WAAW,EAAE,6DAA6D,GAAG,CAAC,IAAI,CAAC,IAAI,KAAK,qBAAqB,CAAC,CAAC,CAAC,4CAA4C,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;oBACxK,CAAC,cAAc,EAAE,IAAI,CAAC,IAAI,KAAK,qBAAqB,CAAC,CAAC,CAAC,wCAAwC;4BAC9F,CAAC,CAAC,IAAI,CAAC,IAAI,KAAK,QAAQ,IAAI,IAAI,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,wDAAwD;gCAC9G,CAAC,CAAC,IAAI,CAAC,iBAAiB,KAAK,SAAS,CAAC,CAAC,CAAC,gBAAgB,QAAQ,CAAC,SAAS,CAAC,MAAM,KAAK,aAAa,CAAC,CAAC,CAAC,MAAM,QAAQ,CAAC,SAAS,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE;oCAC/I,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC;oBACtD,CAAC,WAAW,EAAE,iHAAiH,CAAC;oBAChI,CAAC,UAAU,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,YAAY,IAAI,CAAC,MAAM,CAAC,MAAM,SAAS,CAAC;oBACzE,CAAC,aAAa,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC;iBAC/C,CAAC,CAAC;YACJ,CAAC;YACD,KAAK,OAAO,CAAC,CAAC,CAAC;gBACd,MAAM,KAAK,GAAG,QAAQ,CAAC,cAAc,CAAC,GAAG,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;gBAC7D,IAAI,CAAC,KAAK;oBAAE,OAAO,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;gBACpC,OAAO,IAAI,CAAC,OAAO,CAAC;oBACnB,CAAC,MAAM,EAAE,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;oBAChC,CAAC,UAAU,EAAE,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,iBAAiB,CAAC,CAAC;oBACrD,CAAC,QAAQ,EAAE,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,eAAe,CAAC,CAAC;oBACjD,CAAC,cAAc,EAAE,oBAAoB,CAAC,KAAK,CAAC,OAAO,CAAC,iBAAiB,EAAE,KAAK,CAAC,OAAO,CAAC,iBAAiB,CAAC,CAAC;oBACxG,CAAC,cAAc,EAAE,KAAK,CAAC,OAAO,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,qBAAqB,GAAG,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,eAAe,CAAC;oBACrI,CAAC,cAAc,EAAE,oBAAoB,CAAC,KAAK,CAAC,OAAO,CAAC,cAAc,EAAE,KAAK,CAAC,OAAO,CAAC,uBAAuB,CAAC,CAAC;oBAC3G,CAAC,cAAc,EAAE,KAAK,CAAC,OAAO,CAAC,uBAAuB,KAAK,CAAC,CAAC,CAAC,CAAC,gBAAgB,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,cAAc,KAAK,CAAC,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,qBAAqB,GAAG,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC;oBACzM,CAAC,eAAe,EAAE,GAAG,KAAK,CAAC,OAAO,CAAC,uBAAuB,+BAA+B,CAAC;oBAC1F,CAAC,aAAa,EAAE,QAAQ,CAAC,QAAQ,CAAC,MAAM,CAAC,gBAAgB,CAAC,MAAM,KAAK,WAAW,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,uBAAuB,CAAC,CAAC,CAAC,CAAC,yCAAyC,CAAC;oBAC7K,CAAC,UAAU,EAAE,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,qBAAqB,CAAC,CAAC;iBACzD,CAAC,CAAC;YACJ,CAAC;YACD,KAAK,UAAU,CAAC,CAAC,CAAC;gBACjB,MAAM,QAAQ,GAAG,QAAQ,CAAC,YAAY,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC;gBACzD,IAAI,CAAC,QAAQ;oBAAE,OAAO,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;gBACvC,OAAO,IAAI,CAAC,OAAO,CAAC;oBACnB,CAAC,eAAe,EAAE,GAAG,QAAQ,CAAC,IAAI,MAAM,QAAQ,CAAC,MAAM,EAAE,CAAC;oBAC1D,CAAC,OAAO,EAAE,SAAS,CAAC,QAAQ,EAAE,QAAQ,CAAC,YAAY,CAAC,CAAC;oBACrD,CAAC,YAAY,EAAE,wBAAwB,CAAC,QAAQ,CAAC,CAAC;oBAClD,CAAC,mBAAmB,EAAE,GAAG,oBAAoB,CAAC,QAAQ,CAAC,iBAAiB,CAAC,gCAAgC,CAAC;oBAC1G,CAAC,UAAU,EAAE,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,mBAAmB,QAAQ,CAAC,QAAQ,CAAC,QAAQ,IAAI,QAAQ,CAAC,QAAQ,CAAC,OAAO,cAAc,CAAC,CAAC,CAAC,aAAa,CAAC;oBAC1I,CAAC,YAAY,EAAE,QAAQ,CAAC,kBAAkB,KAAK,SAAS;4BACvD,CAAC,CAAC,IAAI,CAAC,gBAAgB,CAAC,QAAQ,CAAC,kBAAkB,EAAE,EAAE,IAAI,EAAE,YAAY,EAAE,EAAE,EAAE,QAAQ,CAAC,kBAAkB,EAAE,CAAC;4BAC7G,CAAC,CAAC,QAAQ,CAAC,MAAM,KAAK,WAAW,CAAC,CAAC,CAAC,4CAA4C;gCAChF,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,MAAM,CAAC,gBAAgB,CAAC,MAAM,KAAK,aAAa,CAAC,CAAC,CAAC,8CAA8C;oCACrH,CAAC,CAAC,aAAa,CAAC;oBACjB,CAAC,kBAAkB,EAAE,QAAQ,CAAC,eAAe,IAAI,SAAS,CAAC;oBAC3D,CAAC,OAAO,EAAE,QAAQ,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,GAAG,CAAC;iBAChD,CAAC,CAAC;YACJ,CAAC;YACD,KAAK,YAAY,CAAC,CAAC,CAAC;gBACnB,MAAM,UAAU,GAAG,QAAQ,CAAC,cAAc,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC;gBAC7D,IAAI,CAAC,UAAU;oBAAE,OAAO,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;gBACzC,OAAO,IAAI,CAAC,OAAO,CAAC;oBACnB,CAAC,MAAM,EAAE,UAAU,CAAC,IAAI,CAAC;oBACzB,CAAC,qBAAqB,EAAE,MAAM,CAAC,UAAU,CAAC,oBAAoB,CAAC,CAAC;oBAChE,CAAC,mBAAmB,EAAE,GAAG,oBAAoB,CAAC,UAAU,CAAC,iBAAiB,CAAC,iCAAiC,CAAC;oBAC7G,CAAC,mBAAmB,EAAE,MAAM,CAAC,UAAU,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;oBAC5D,CAAC,OAAO,EAAE,UAAU,CAAC,WAAW,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,UAAU,UAAU,CAAC,WAAW,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC;iBACnG,CAAC,CAAC;YACJ,CAAC;YACD,KAAK,MAAM,CAAC,CAAC,CAAC;gBACb,MAAM,IAAI,GAAG,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,GAAG,KAAK,SAAS,CAAC,GAAG,CAAC,CAAC;gBACvE,OAAO,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC;oBAC1B,CAAC,QAAQ,EAAE,IAAI,CAAC,MAAM,CAAC;oBACvB,CAAC,MAAM,EAAE,IAAI,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,gBAAgB,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,QAAQ,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;oBAC7F,CAAC,UAAU,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,kBAAkB,CAAC,QAAQ,EAAE,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC;oBACvF,GAAG,CAAC,IAAI,CAAC,MAAM,KAAK,aAAa,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;wBACxC,CAAC,OAAO,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,+BAA+B,CAAC;wBAC/E,CAAC,kBAAkB,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,mBAAmB,CAAC,CAAC,CAAC,CAAC,+BAA+B,CAAC;wBACrH,CAAC,WAAW,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,MAAM,CAAC,CAAC,CAAC,+BAA+B,CAAC;qBACjG,CAAC;iBACxB,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;YACT,CAAC;YACD,KAAK,QAAQ,CAAC,CAAC,CAAC;gBACf,MAAM,MAAM,GAAG,QAAQ,CAAC,UAAU,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC;gBACrD,OAAO,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC;oBAC5B,CAAC,eAAe,EAAE,mCAAmC,CAAC;oBACtD,CAAC,MAAM,EAAE,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;oBAChC,CAAC,MAAM,EAAE,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC;oBAC1B,CAAC,OAAO,EAAE,SAAS,CAAC,QAAQ,EAAE,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;oBACxD,CAAC,QAAQ,EAAE,MAAM,CAAC,MAAM,CAAC;oBACzB,CAAC,iCAAiC,EAAE,+CAA+C,CAAC;oBACpF,CAAC,UAAU,EAAE,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,YAAY,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,SAAS,CAAC;iBACvF,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;YACT,CAAC;YACD,KAAK,SAAS,CAAC,CAAC,CAAC;gBAChB,MAAM,OAAO,GAAG,QAAQ,CAAC,cAAc,CAAC,GAAG,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;gBAC7D,OAAO,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC;oBAC7B,CAAC,MAAM,EAAE,OAAO,CAAC,IAAI,KAAK,aAAa,CAAC,CAAC,CAAC,4BAA4B,CAAC,CAAC,CAAC,iBAAiB,CAAC;oBAC3F,CAAC,OAAO,EAAE,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;oBACzC,CAAC,SAAS,EAAE,OAAO,CAAC,IAAI,KAAK,qBAAqB;4BACjD,CAAC,CAAC,4EAA4E;4BAC9E,CAAC,CAAC,6CAA6C,CAAC;iBACjD,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;YACT,CAAC;QACF,CAAC;IACF,CAAC;IAEO,eAAe,CAAC,QAAkC,EAAE,SAAoB;QAC/E,MAAM,IAAI,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;QAC3C,IAAI,CAAC,SAAS,GAAG,qCAAqC,CAAC;QACvD,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,qBAAqB,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC,CAAC;QAClE,QAAQ,SAAS,CAAC,IAAI,EAAE,CAAC;YACxB,KAAK,MAAM,CAAC,CAAC,CAAC;gBACb,MAAM,IAAI,GAAG,QAAQ,CAAC,QAAQ,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC;gBACjD,IAAI,IAAI,EAAE,CAAC;oBACV,IAAI,CAAC,MAAM,CACV,IAAI,CAAC,eAAe,CAAC,OAAO,EAAE,IAAI,CAAC,KAAK,CAAC,EACzC,IAAI,CAAC,eAAe,CAAC,QAAQ,EAAE,IAAI,CAAC,MAAM,CAAC,CAC3C,CAAC;oBACF,MAAM,OAAO,GAAG,QAAQ,CAAC,eAAe,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;oBACtD,IAAI,OAAO;wBAAE,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,aAAa,CAAC,SAAS,EAAE;4BAC3D,CAAC,IAAI,OAAO,CAAC,KAAK,IAAI,OAAO,CAAC,IAAI,EAAE,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,OAAO,CAAC,KAAK,EAAE,CAAC;yBAChF,CAAC,CAAC,CAAC;oBACJ,KAAK,MAAM,IAAI,IAAI,CAAC,OAAO,EAAE,UAAU,CAAU,EAAE,CAAC;wBACnD,MAAM,SAAS,GAAqB,EAAE,CAAC;wBACvC,KAAK,MAAM,IAAI,IAAI,QAAQ,CAAC,KAAK,EAAE,CAAC;4BACnC,IAAI,IAAI,CAAC,IAAI,KAAK,IAAI,IAAI,CAAC,IAAI,CAAC,UAAU,KAAK,IAAI,CAAC,EAAE,IAAI,IAAI,CAAC,QAAQ,KAAK,IAAI,CAAC,EAAE,CAAC;gCAAE,SAAS;4BAC/F,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,KAAK,IAAI,CAAC,EAAE,CAAC;4BAC3C,MAAM,OAAO,GAAG,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC;4BAC3D,MAAM,KAAK,GAAG,oBAAoB,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;4BACtD,IAAI,KAAK;gCAAE,SAAS,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,eAAe,CAAC,QAAQ,EAAE,OAAO,CAAC,EAAE,KAAK;oCACxE,GAAG,QAAQ,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,YAAY,MAAM,aAAa,CAAC,QAAQ,EAAE,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,MAAM,IAAI,aAAa,CAAC,CAAC,CAAC;wBAClH,CAAC;wBACD,IAAI,SAAS,CAAC,MAAM;4BAAE,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,aAAa,CAAC,IAAI,KAAK,OAAO,CAAC,CAAC,CAAC,oBAAoB,CAAC,CAAC,CAAC,uBAAuB,EAAE,SAAS,CAAC,CAAC,CAAC;oBAC1I,CAAC;gBACF,CAAC;gBACD,MAAM;YACP,CAAC;YACD,KAAK,OAAO,CAAC,CAAC,CAAC;gBACd,MAAM,KAAK,GAAG,QAAQ,CAAC,cAAc,CAAC,GAAG,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;gBAC7D,IAAI,KAAK,EAAE,CAAC;oBACX,IAAI,CAAC,MAAM,CACV,IAAI,CAAC,iBAAiB,CAAC,QAAQ,EAAE,KAAK,CAAC,OAAO,CAAC,cAAc,CAAC,EAC9D,IAAI,CAAC,iBAAiB,CAAC,SAAS,EAAE,KAAK,CAAC,OAAO,CAAC,eAAe,CAAC,EAChE,IAAI,CAAC,aAAa,CAAC,cAAc,EAAE,KAAK,CAAC,OAAO,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC;wBAC1E,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,aAAa,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,GAAG,MAAM,IAAI,CAAC,MAAM,MAAM,eAAe,CAAC,IAAI,CAAC,EAAE;wBACnG,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,IAAI,CAAC,GAAG,EAAE;qBAC/B,CAAC,CAAC,CACH,CAAC;gBACH,CAAC;gBACD,MAAM;YACP,CAAC;YACD,KAAK,UAAU,CAAC,CAAC,CAAC;gBACjB,MAAM,QAAQ,GAAG,QAAQ,CAAC,YAAY,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC;gBACzD,MAAM,QAAQ,GAAG,QAAQ,CAAC,oBAAoB,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC;gBACvE,MAAM,aAAa,GAAqB,EAAE,CAAC;gBAC3C,KAAK,MAAM,MAAM,IAAI,QAAQ,EAAE,CAAC;oBAC/B,MAAM,aAAa,GAAG,IAAI,CAAC,mBAAmB,CAAC,QAAQ,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC;oBACxE,IAAI,aAAa;wBAAE,aAAa,CAAC,IAAI,CAAC;4BACrC,IAAI,CAAC,eAAe,CAAC,QAAQ,EAAE,MAAM,CAAC,MAAM,CAAC;4BAC7C,aAAa;4BACb,iBAAiB,CAAC,MAAM,CAAC;yBACzB,CAAC,CAAC;gBACJ,CAAC;gBACD,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,aAAa,CAAC,eAAe,EAAE,aAAa,CAAC,CAAC,CAAC;gBACrE,MAAM,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,QAAQ,EAAE,EAAE,KAAK,SAAS,CAAC,EAAE,CAAC,CAAC;gBAClF,IAAI,KAAK,CAAC,MAAM;oBAAE,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,aAAa,CAAC,cAAc,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC;wBACzF,GAAG,IAAI,CAAC,MAAM,MAAM,eAAe,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,IAAI,CAAC,GAAG,EAAE;qBAC5E,CAAC,CAAC,CAAC,CAAC;gBACL,IAAI,QAAQ,EAAE,kBAAkB,KAAK,SAAS;oBAAE,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,aAAa,CAAC,YAAY,EAAE;wBACjG,CAAC,QAAQ,CAAC,kBAAkB,EAAE,EAAE,IAAI,EAAE,YAAY,EAAE,EAAE,EAAE,QAAQ,CAAC,kBAAkB,EAAE,CAAC;qBACtF,CAAC,CAAC,CAAC;gBACJ,MAAM;YACP,CAAC;YACD,KAAK,YAAY,CAAC,CAAC,CAAC;gBACnB,MAAM,UAAU,GAAG,QAAQ,CAAC,cAAc,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC;gBAC7D,IAAI,UAAU;oBAAE,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,aAAa,CAAC,mBAAmB,EAAE,UAAU,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC;wBAC3G,aAAa,CAAC,QAAQ,EAAE,EAAE,CAAC,EAAE,EAAE,IAAI,EAAE,UAAU,EAAE,EAAE,EAAE;qBACrD,CAAC,CAAC,CAAC,CAAC;gBACL,MAAM;YACP,CAAC;YACD,KAAK,MAAM,CAAC,CAAC,CAAC;gBACb,MAAM,IAAI,GAAG,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,GAAG,KAAK,SAAS,CAAC,GAAG,CAAC,CAAC;gBACvE,MAAM,SAAS,GAAwC,EAAE,CAAC;gBAC1D,IAAI,IAAI,EAAE,MAAM,KAAK,SAAS,IAAI,QAAQ,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC;oBAAE,SAAS,CAAC,IAAI,CAAC;wBACpF,IAAI,CAAC,eAAe,CAAC,QAAQ,EAAE,IAAI,CAAC,MAAM,CAAC,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,IAAI,CAAC,MAAM,EAAE;qBAC9E,CAAC,CAAC;gBACH,IAAI,IAAI,EAAE,QAAQ;oBAAE,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,aAAa,CAAC,UAAU,EAAE,CAAC,CAAC,aAAa,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,IAAI,EAAE,UAAU,EAAE,EAAE,EAAE,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;gBACnJ,IAAI,IAAI,EAAE,QAAQ,IAAI,IAAI,CAAC,UAAU,EAAE,mBAAmB;oBAAE,SAAS,CAAC,IAAI,CAAC,CAAC,sBAAsB,aAAa,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,UAAU,EAAE,EAAE,EAAE,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;gBAC/K,KAAK,MAAM,EAAE,IAAI,IAAI,EAAE,UAAU,EAAE,eAAe,IAAI,EAAE;oBAAE,SAAS,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,eAAe,CAAC,QAAQ,EAAE,EAAE,CAAC,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC;gBACrI,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,aAAa,CAAC,gBAAgB,EAAE,SAAS,CAAC,CAAC,CAAC;gBAClE,MAAM;YACP,CAAC;YACD,KAAK,QAAQ,CAAC,CAAC,CAAC;gBACf,MAAM,MAAM,GAAG,QAAQ,CAAC,UAAU,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC;gBACrD,IAAI,MAAM;oBAAE,IAAI,CAAC,MAAM,CACtB,IAAI,CAAC,eAAe,CAAC,OAAO,EAAE,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,EAChD,IAAI,CAAC,eAAe,CAAC,QAAQ,EAAE,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAClD,CAAC;gBACF,MAAM;YACP,CAAC;YACD,KAAK,SAAS,CAAC,CAAC,CAAC;gBAChB,MAAM,OAAO,GAAG,QAAQ,CAAC,cAAc,CAAC,GAAG,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;gBAC7D,IAAI,OAAO;oBAAE,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,aAAa,CAAC,QAAQ,EAAE,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,EAAE,EAAE,EAAE;wBACzF,MAAM,IAAI,GAAG,QAAQ,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;wBACvC,OAAO,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,CAAU,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;oBACvE,CAAC,CAAC,CAAC,CAAC,CAAC;gBACL,MAAM;YACP,CAAC;QACF,CAAC;QACD,IAAI,IAAI,CAAC,iBAAiB,KAAK,CAAC,EAAE,CAAC;YAClC,MAAM,KAAK,GAAG,QAAQ,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC;YAC1C,KAAK,CAAC,SAAS,GAAG,uBAAuB,CAAC;YAC1C,KAAK,CAAC,WAAW,GAAG,qBAAqB,CAAC;YAC1C,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;QACzB,CAAC;QACD,OAAO,IAAI,CAAC;IACb,CAAC;IAEO,eAAe,CAAC,KAAa,EAAE,QAA0C;QAChF,OAAO,IAAI,CAAC,aAAa,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC;YACzD,aAAa,CAAC,MAAM,CAAC,QAAQ,CAAC;YAC9B,EAAE,IAAI,EAAE,UAAU,EAAE,EAAE,EAAE,MAAM,CAAC,QAAQ,CAAC,EAAE,EAAE;YAC5C,iBAAiB,CAAC,MAAM,CAAC;SACzB,CAAC,CAAC,CAAC;IACL,CAAC;IAEO,iBAAiB,CAAC,KAAa,EAAE,SAAgD;QACxF,OAAO,IAAI,CAAC,aAAa,CAAC,KAAK,EAAE,SAAS,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC;YAC5D,aAAa,CAAC,QAAQ,CAAC,EAAE,EAAE,IAAI,EAAE,UAAU,EAAE,EAAE,EAAE,QAAQ,CAAC,EAAE,EAAE;SAC9D,CAAC,CAAC,CAAC;IACL,CAAC;IAEO,aAAa,CAAC,KAAa,EAAE,SAAoC;QACxE,MAAM,OAAO,GAAG,QAAQ,CAAC,aAAa,CAAC,SAAS,CAAC,CAAC;QAClD,MAAM,OAAO,GAAG,QAAQ,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC;QAC7C,OAAO,CAAC,WAAW,GAAG,GAAG,KAAK,IAAI,SAAS,CAAC,MAAM,EAAE,CAAC;QACrD,OAAO,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;QAC7B,KAAK,MAAM,CAAC,KAAK,EAAE,SAAS,EAAE,WAAW,CAAC,IAAI,SAAS,EAAE,CAAC;YACzD,MAAM,IAAI,GAAG,IAAI,CAAC,gBAAgB,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC;YACrD,MAAM,KAAK,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;YAC5C,KAAK,CAAC,SAAS,GAAG,gCAAgC,CAAC;YACnD,MAAM,KAAK,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;YAC5C,KAAK,CAAC,SAAS,GAAG,gCAAgC,CAAC;YACnD,KAAK,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;YACxB,IAAI,IAAI,CAAC,SAAS,CAAC,QAAQ;gBAAE,KAAK,CAAC,WAAW,CAAC,IAAI,CAAC,YAAY,CAAC,SAAS,EAAE,IAAI,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;YAC1G,KAAK,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;YACzB,IAAI,WAAW,KAAK,SAAS,EAAE,CAAC;gBAC/B,MAAM,QAAQ,GAAG,QAAQ,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC;gBAChD,QAAQ,CAAC,SAAS,GAAG,uBAAuB,CAAC;gBAC7C,QAAQ,CAAC,WAAW,GAAG,WAAW,CAAC;gBACnC,KAAK,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC;YAC7B,CAAC;YACD,OAAO,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;QAC5B,CAAC;QACD,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC5B,MAAM,KAAK,GAAG,QAAQ,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC;YAC7C,KAAK,CAAC,SAAS,GAAG,uBAAuB,CAAC;YAC1C,KAAK,CAAC,WAAW,GAAG,MAAM,CAAC;YAC3B,OAAO,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;QAC5B,CAAC;QACD,OAAO,OAAO,CAAC;IAChB,CAAC;IAEO,aAAa,CAAC,SAAoB;QACzC,IAAI,CAAC,cAAc,EAAE,CAAC;QACtB,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC;IACpC,CAAC;IAEO,kBAAkB,CAAC,QAAkC,EAAE,UAAkB;QAChF,OAAO,IAAI,CAAC,gBAAgB,CAAC,mBAAmB,aAAa,CAAC,QAAQ,EAAE,UAAU,CAAC,EAAE,EACpF,EAAE,IAAI,EAAE,UAAU,EAAE,EAAE,EAAE,UAAU,EAAE,CAAC,CAAC;IACxC,CAAC;IAEO,gBAAgB,CAAC,KAAa,EAAE,SAAoB;QAC3D,MAAM,IAAI,GAAG,oBAAoB,CAAC,KAAK,EAAE,SAAS,EAAE,CAAC,MAAM,EAAE,EAAE,CAAC,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC,CAAC;QAC5F,IAAI,CAAC,gBAAgB,CAAC,YAAY,EAAE,GAAG,EAAE;YACxC,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC;YACxB,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;QACnC,CAAC,CAAC,CAAC;QACH,IAAI,CAAC,gBAAgB,CAAC,YAAY,EAAE,GAAG,EAAE;YACxC,IAAI,IAAI,CAAC,WAAW,KAAK,IAAI;gBAAE,IAAI,CAAC,cAAc,EAAE,CAAC;QACtD,CAAC,CAAC,CAAC;QACH,OAAO,IAAI,CAAC;IACb,CAAC;IAEO,cAAc;QACrB,IAAI,CAAC,IAAI,CAAC,WAAW;YAAE,OAAO;QAC9B,IAAI,CAAC,WAAW,GAAG,SAAS,CAAC;QAC7B,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;IACnC,CAAC;IAEO,OAAO,CAAC,IAA0D;QACzE,MAAM,OAAO,GAAG,QAAQ,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC;QAC7C,OAAO,CAAC,SAAS,GAAG,mCAAmC,CAAC;QACxD,KAAK,MAAM,CAAC,KAAK,EAAE,KAAK,CAAC,IAAI,IAAI,EAAE,CAAC;YACnC,MAAM,IAAI,GAAG,QAAQ,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC;YAC1C,IAAI,CAAC,WAAW,GAAG,KAAK,CAAC;YACzB,MAAM,WAAW,GAAG,QAAQ,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC;YACjD,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;gBAC/B,WAAW,CAAC,WAAW,GAAG,KAAK,CAAC;gBAChC,WAAW,CAAC,KAAK,GAAG,KAAK,CAAC;YAC3B,CAAC;iBAAM,CAAC;gBACP,WAAW,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;YAChC,CAAC;YACD,OAAO,CAAC,MAAM,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC;QACnC,CAAC;QACD,OAAO,OAAO,CAAC;IAChB,CAAC;IAEO,eAAe,CAAC,QAAkC,EAAE,MAAc;QACzE,MAAM,IAAI,GAAG,QAAQ,CAAC,QAAQ,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QAC3C,IAAI,IAAI;YAAE,OAAO,SAAS,CAAC,IAAI,CAAC,CAAC;QACjC,MAAM,MAAM,GAAG,QAAQ,CAAC,UAAU,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QAC/C,OAAO,MAAM,CAAC,CAAC,CAAC,GAAG,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,MAAM,CAAC;IAC/D,CAAC;IAEO,mBAAmB,CAAC,QAAkC,EAAE,MAAc;QAC7E,OAAO,oBAAoB,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;IAC/C,CAAC;IAEO,QAAQ,CAAC,QAAkC,EAAE,EAAU;QAC9D,MAAM,QAAQ,GAAG,oBAAoB,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC;QACpD,OAAO,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,eAAe,CAAC,QAAQ,EAAE,EAAE,CAAC,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;IAC5F,CAAC;IAEO,WAAW,CAAC,SAAoB;QACvC,QAAQ,SAAS,CAAC,IAAI,EAAE,CAAC;YACxB,KAAK,MAAM,CAAC;YAAC,KAAK,QAAQ,CAAC;YAAC,KAAK,OAAO,CAAC,CAAC,OAAO,QAAQ,CAAC;YAC1D,KAAK,UAAU,CAAC,CAAC,OAAO,WAAW,CAAC;YACpC,KAAK,YAAY,CAAC,CAAC,OAAO,QAAQ,CAAC;YACnC,KAAK,MAAM,CAAC;YAAC,KAAK,SAAS,CAAC,CAAC,OAAO,aAAa,CAAC;QACnD,CAAC;IACF,CAAC;IAEO,YAAY,CAAC,SAAoB,EAAE,IAAkB;QAC5D,MAAM,MAAM,GAAG,QAAQ,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC;QAChD,MAAM,CAAC,IAAI,GAAG,QAAQ,CAAC;QACvB,MAAM,CAAC,SAAS,GAAG,+BAA+B,CAAC;QACnD,MAAM,CAAC,WAAW,GAAG,aAAa,IAAI,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC;QAC1E,MAAM,CAAC,gBAAgB,CAAC,OAAO,EAAE,GAAG,EAAE;YACrC,IAAI,CAAC,cAAc,EAAE,CAAC;YACtB,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;QAC5C,CAAC,CAAC,CAAC;QACH,OAAO,MAAM,CAAC;IACf,CAAC;IAEO,qBAAqB,CAAC,QAAkC,EAAE,SAAoB;QACrF,MAAM,OAAO,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;QAC9C,OAAO,CAAC,SAAS,GAAG,gCAAgC,CAAC;QACrD,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,QAAQ;YAAE,OAAO,OAAO,CAAC;QAC7C,OAAO,CAAC,WAAW,CAAC,IAAI,CAAC,YAAY,CAAC,SAAS,EAAE,IAAI,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;QAC/E,IAAI,SAAS,CAAC,IAAI,KAAK,MAAM,IAAI,SAAS,CAAC,IAAI,KAAK,OAAO,IAAI,SAAS,CAAC,IAAI,KAAK,UAAU,IAAI,SAAS,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;YAC3H,OAAO,CAAC,WAAW,CAAC,IAAI,CAAC,YAAY,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC,CAAC;QAC5D,CAAC;QACD,IAAI,SAAS,CAAC,IAAI,KAAK,UAAU,IAAI,QAAQ,CAAC,YAAY,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE,CAAC,EAAE,MAAM,KAAK,WAAW;YAAE,OAAO,CAAC,WAAW,CAAC,IAAI,CAAC,YAAY,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC,CAAC;QAClK,IAAI,SAAS,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;YACjC,MAAM,IAAI,GAAG,QAAQ,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC;YAC5C,IAAI,CAAC,SAAS,GAAG,uBAAuB,CAAC;YACzC,IAAI,CAAC,WAAW,GAAG,6DAA6D,CAAC;YACjF,OAAO,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;QAC3B,CAAC;QACD,OAAO,OAAO,CAAC;IAChB,CAAC;IAEO,WAAW,CAAC,QAAkC,EAAE,SAAoB;QAC3E,IAAI,IAAI,IAAI,SAAS;YAAE,OAAO,SAAS,CAAC,EAAE,CAAC;QAC3C,IAAI,SAAS,CAAC,IAAI,KAAK,OAAO;YAAE,OAAO,QAAQ,CAAC,cAAc,CAAC,GAAG,CAAC,SAAS,CAAC,OAAO,CAAC,EAAE,EAAE,CAAC;QAC1F,IAAI,SAAS,CAAC,IAAI,KAAK,SAAS;YAAE,OAAO,QAAQ,CAAC,cAAc,CAAC,GAAG,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE,EAAE,CAAC;QAC1F,OAAO,SAAS,CAAC;IAClB,CAAC;IAEO,MAAM,CAAC,EAAU;QACxB,MAAM,IAAI,GAAG,QAAQ,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC;QAC5C,IAAI,CAAC,SAAS,GAAG,yBAAyB,CAAC;QAC3C,MAAM,IAAI,GAAG,QAAQ,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC;QAC5C,IAAI,CAAC,WAAW,GAAG,EAAE,CAAC;QACtB,MAAM,MAAM,GAAG,QAAQ,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC;QAChD,MAAM,CAAC,IAAI,GAAG,QAAQ,CAAC;QACvB,MAAM,CAAC,WAAW,GAAG,SAAS,CAAC;QAC/B,MAAM,CAAC,YAAY,CAAC,YAAY,EAAE,qBAAqB,CAAC,CAAC;QACzD,MAAM,CAAC,gBAAgB,CAAC,OAAO,EAAE,GAAG,EAAE;YACrC,KAAK,kBAAkB,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,MAAM,CAAC,WAAW,GAAG,QAAQ,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,GAAG,MAAM,CAAC,WAAW,GAAG,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC;QAC3H,CAAC,CAAC,CAAC;QACH,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;QAC1B,OAAO,IAAI,CAAC;IACb,CAAC;IAEO,iBAAiB,CAAC,QAAkC,EAAE,SAAoB;QACjF,IAAI,WAAW,GAAwD,EAAE,CAAC;QAC1E,IAAI,SAAS,CAAC,IAAI,KAAK,MAAM,IAAI,SAAS,CAAC,IAAI,KAAK,QAAQ;YAAE,WAAW,GAAG,QAAQ,CAAC,mBAAmB,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC;aAC5H,IAAI,SAAS,CAAC,IAAI,KAAK,UAAU;YAAE,WAAW,GAAG,QAAQ,CAAC,uBAAuB,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC;aAC1G,IAAI,SAAS,CAAC,IAAI,KAAK,YAAY,EAAE,CAAC;YAC1C,MAAM,WAAW,GAAG,IAAI,GAAG,CAAC,QAAQ,CAAC,cAAc,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE,CAAC,EAAE,WAAW,CAAC,CAAC;YACpF,WAAW,GAAG,QAAQ,CAAC,QAAQ,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,UAAU,EAAE,EAAE,CAAC,UAAU,CAAC,UAAU,KAAK,SAAS,IAAI,WAAW,CAAC,GAAG,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC,CAAC;QACnJ,CAAC;aAAM,IAAI,SAAS,CAAC,IAAI,KAAK,OAAO,EAAE,CAAC;YACvC,MAAM,OAAO,GAAG,QAAQ,CAAC,cAAc,CAAC,GAAG,CAAC,SAAS,CAAC,OAAO,CAAC,EAAE,EAAE,CAAC;YACnE,MAAM,MAAM,GAAG,IAAI,GAAG,CAAC,QAAQ,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,OAAO,KAAK,SAAS,IAAI,KAAK,CAAC,WAAW,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC;YACtJ,WAAW,GAAG,QAAQ,CAAC,QAAQ,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,UAAU,EAAE,EAAE;gBACjE,MAAM,SAAS,GAAG,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC,iBAAiB,CAAC,GAAG,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC;gBAC7G,MAAM,aAAa,GAAG,UAAU,CAAC,UAAU,CAAC,CAAC,CAAC,QAAQ,CAAC,YAAY,CAAC,GAAG,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,YAAY,CAAC,CAAC,CAAC,SAAS,CAAC;gBACzH,OAAO,CAAC,SAAS,KAAK,SAAS,IAAI,MAAM,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,aAAa,KAAK,SAAS,IAAI,MAAM,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC,CAAC;YACzH,CAAC,CAAC,CAAC;QACJ,CAAC;QACD,IAAI,CAAC,WAAW,CAAC,MAAM;YAAE,OAAO,SAAS,CAAC;QAC1C,MAAM,OAAO,GAAG,QAAQ,CAAC,aAAa,CAAC,SAAS,CAAC,CAAC;QAClD,OAAO,CAAC,SAAS,GAAG,oCAAoC,CAAC;QACzD,MAAM,OAAO,GAAG,QAAQ,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC;QAC7C,OAAO,CAAC,WAAW,GAAG,uBAAuB,WAAW,CAAC,MAAM,EAAE,CAAC;QAClE,OAAO,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;QAC7B,KAAK,MAAM,UAAU,IAAI,WAAW,EAAE,CAAC;YACtC,MAAM,KAAK,GAAG,QAAQ,CAAC,aAAa,CAAC,SAAS,CAAC,CAAC;YAChD,KAAK,CAAC,OAAO,CAAC,QAAQ,GAAG,UAAU,CAAC,QAAQ,CAAC;YAC7C,MAAM,KAAK,GAAG,QAAQ,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC;YAC/C,KAAK,CAAC,WAAW,GAAG,GAAG,UAAU,CAAC,QAAQ,MAAM,UAAU,CAAC,IAAI,EAAE,CAAC;YAClE,MAAM,OAAO,GAAG,QAAQ,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC;YAC5C,OAAO,CAAC,WAAW,GAAG,UAAU,CAAC,OAAO,CAAC;YACzC,KAAK,CAAC,MAAM,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;YAC7B,IAAI,UAAU,CAAC,MAAM,EAAE,CAAC;gBACvB,MAAM,IAAI,GAAG,oBAAoB,CAAC,QAAQ,EAAE,UAAU,CAAC,MAAM,CAAC,CAAC;gBAC/D,IAAI,IAAI;oBAAE,KAAK,CAAC,WAAW,CAAC,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,eAAe,CAAC,QAAQ,EAAE,UAAU,CAAC,MAAM,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC;YAC7G,CAAC;YACD,IAAI,UAAU,CAAC,UAAU;gBAAE,KAAK,CAAC,WAAW,CAAC,IAAI,CAAC,kBAAkB,CAAC,QAAQ,EAAE,UAAU,CAAC,UAAU,CAAC,CAAC,CAAC;YACvG,OAAO,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;QAC5B,CAAC;QACD,OAAO,OAAO,CAAC;IAChB,CAAC;CACD","sourcesContent":["import type {\n\tFrameGraphDebugAccess,\n\tFrameGraphDebugRoot,\n\tFrameGraphDebugResourceRef,\n\tFrameGraphDebugViewModel,\n} from './debugCaptureModel.ts';\nimport { labelNode, labelResource } from './panelDomHelpers.ts';\nimport { createPanelIcon } from './panelIcons.ts';\nimport { RawDetailView } from './panelRawView.ts';\nimport { resolveNodeSelection, resolveSelectedCanonicalDetail } from './panelSelection.ts';\nimport type { InspectorTab, Selection, WorkbenchTab } from './panelTypes.ts';\nimport {\n\tcreateRelationButton,\n\tformatEstimatedBytes,\n\tformatResourceDescriptor,\n\tformatTimingCoverage,\n\tenableTabKeyboard,\n\twriteClipboardText,\n\tselectionKey,\n\tgroupPath,\n\tresourceLabel,\n\ttype WorkbenchCallbacks,\n} from './panelWorkbenchHelpers.ts';\n\ntype DetailRelation = readonly [label: string, selection: Selection, description?: string];\n\nfunction formatAccessFacts(access: FrameGraphDebugAccess): string {\n\treturn [\n\t\taccess.mode, access.access,\n\t\t...(access.mode === 'write' ? [access.contents, access.producesValue ? 'produces a value' : 'does not produce a value'] : []),\n\t\t...(access.bufferRange ? [`bytes ${access.bufferRange.offset}–${access.bufferRange.size === undefined ? 'end' : access.bufferRange.offset + access.bufferRange.size}`] : []),\n\t\t...(access.textureRegion ? [formatTextureRegion(access.textureRegion)] : []),\n\t\t...(access.textureViewId ? [`view ${access.textureViewId}`] : []),\n\t].join(' · ');\n}\n\nfunction formatTextureRegion(region: NonNullable<FrameGraphDebugAccess['textureRegion']>): string {\n\tconst end = (start: number | undefined, count: number | undefined) => start === undefined ? 'unknown' : count === undefined ? `${start}–end` : `${start}–${start + count - 1}`;\n\treturn `mip ${end(region.baseMipLevel, region.mipLevelCount)} · ${region.baseDepthSlice === undefined\n\t\t? `layers ${end(region.baseArrayLayer, region.arrayLayerCount)}`\n\t\t: `depth ${end(region.baseDepthSlice, region.depthSliceCount)}`} · aspect ${region.aspect}`;\n}\n\nfunction formatRootRange(root: FrameGraphDebugRoot): string {\n\tif (!root.range) return 'Range unavailable';\n\tif (root.range.kind === 'buffer') return `bytes ${root.range.offset}–${root.range.offset + root.range.size}`;\n\treturn root.range.regions.map(formatTextureRegion).join('; ');\n}\n\nexport class InspectorView {\n\treadonly root = document.createElement('aside');\n\tprivate readonly title = document.createElement('strong');\n\tprivate readonly tabList = document.createElement('div');\n\tprivate readonly content = document.createElement('div');\n\tprivate readonly tabs = new Map<InspectorTab, HTMLButtonElement>();\n\tprivate snapshot: FrameGraphDebugViewModel | undefined;\n\tprivate selected: Selection | undefined;\n\tprivate activeTab: InspectorTab = 'summary';\n\tprivate open = false;\n\tprivate hoveredLink: HTMLButtonElement | undefined;\n\tprivate rawCache: { readonly snapshot: FrameGraphDebugViewModel; readonly key: string; readonly view: RawDetailView } | undefined;\n\n\tconstructor(\n\t\tprivate readonly callbacks: WorkbenchCallbacks,\n\t\tprivate readonly onOpenChange: (open: boolean) => void,\n\t\tidPrefix: string,\n\t) {\n\t\tthis.root.className = 'zenfg-inspector-inspector';\n\t\tthis.root.setAttribute('aria-label', 'Selection inspector');\n\t\tconst header = document.createElement('header');\n\t\tthis.title.textContent = 'Inspector';\n\t\tconst close = document.createElement('button');\n\t\tclose.type = 'button';\n\t\tclose.className = 'zenfg-inspector-inspector-close';\n\t\tclose.appendChild(createPanelIcon('close'));\n\t\tclose.title = 'Close inspector';\n\t\tclose.setAttribute('aria-label', 'Close inspector');\n\t\tclose.addEventListener('click', () => this.setOpen(false));\n\t\theader.append(this.title, close);\n\n\t\tthis.tabList.className = 'zenfg-inspector-inspector-tabs';\n\t\tthis.tabList.setAttribute('role', 'tablist');\n\t\tthis.tabList.setAttribute('aria-label', 'Inspector views');\n\t\tfor (const [tab, label] of [['summary', 'Summary'], ['relations', 'Relations'], ['raw', 'Raw']] as const) {\n\t\t\tconst button = document.createElement('button');\n\t\t\tbutton.type = 'button';\n\t\t\tbutton.id = `${idPrefix}-inspector-${tab}-tab`;\n\t\t\tbutton.textContent = label;\n\t\t\tbutton.setAttribute('role', 'tab');\n\t\t\tbutton.setAttribute('aria-controls', `${idPrefix}-inspector-panel`);\n\t\t\tbutton.addEventListener('click', () => {\n\t\t\t\tthis.activeTab = tab;\n\t\t\t\tthis.render();\n\t\t\t});\n\t\t\tthis.tabs.set(tab, button);\n\t\t\tthis.tabList.appendChild(button);\n\t\t}\n\t\tenableTabKeyboard(this.tabList);\n\t\tthis.content.id = `${idPrefix}-inspector-panel`;\n\t\tthis.content.className = 'zenfg-inspector-inspector-content';\n\t\tthis.content.setAttribute('role', 'tabpanel');\n\t\tthis.root.append(header, this.tabList, this.content);\n\t\tthis.updateOpenState();\n\t\tthis.render();\n\t}\n\n\tsetSnapshot(snapshot: FrameGraphDebugViewModel): void {\n\t\tif (this.snapshot !== snapshot) this.rawCache = undefined;\n\t\tthis.snapshot = snapshot;\n\t\tthis.render();\n\t}\n\n\tsetSelection(selected: Selection | undefined, reveal = true): void {\n\t\tif (!selected || !this.selected || selectionKey(selected) !== selectionKey(this.selected)) this.rawCache = undefined;\n\t\tif (selected?.kind === 'resource'\n\t\t\t&& (this.selected?.kind !== 'resource' || this.selected.id !== selected.id)) this.activeTab = 'summary';\n\t\tthis.selected = selected;\n\t\tif (!selected) this.setOpen(false);\n\t\telse if (reveal && !this.open) {\n\t\t\tthis.setOpen(true);\n\t\t\treturn;\n\t\t}\n\t\tthis.render();\n\t}\n\n\tsetOpen(open: boolean): void {\n\t\tif (this.open === open) return;\n\t\tif (!open) this.clearLinkHover();\n\t\tthis.open = open;\n\t\tthis.updateOpenState();\n\t\tif (open) this.render();\n\t\tthis.onOpenChange(open);\n\t}\n\n\tget isOpen(): boolean {\n\t\treturn this.open;\n\t}\n\n\tprivate updateOpenState(): void {\n\t\tthis.root.hidden = !this.open;\n\t\tthis.root.classList.toggle('open', this.open);\n\t}\n\n\tprivate render(): void {\n\t\tconst restoreFocus = this.content.contains(document.activeElement);\n\t\tthis.clearLinkHover();\n\t\tfor (const [tab, button] of this.tabs) {\n\t\t\tconst active = tab === this.activeTab;\n\t\t\tbutton.classList.toggle('active', active);\n\t\t\tbutton.setAttribute('aria-selected', active ? 'true' : 'false');\n\t\t\tbutton.tabIndex = active ? 0 : -1;\n\t\t\tif (active) this.content.setAttribute('aria-labelledby', button.id);\n\t\t}\n\t\tconst snapshot = this.snapshot;\n\t\tconst selected = this.selected;\n\t\tthis.content.replaceChildren();\n\t\tif (!snapshot || !selected) {\n\t\t\tthis.title.textContent = 'Inspector';\n\t\t\tconst empty = document.createElement('p');\n\t\t\tempty.className = 'zenfg-inspector-muted';\n\t\t\tempty.textContent = 'Select a pass, group, resource, allocation, root, culled node, or segment.';\n\t\t\tthis.content.appendChild(empty);\n\t\t\treturn;\n\t\t}\n\t\tthis.title.textContent = this.selectionTitle(snapshot, selected);\n\t\tif (!this.open) return;\n\t\tif (this.activeTab === 'raw') {\n\t\t\tconst key = selectionKey(selected);\n\t\t\tif (this.rawCache?.snapshot !== snapshot || this.rawCache.key !== key) {\n\t\t\t\tconst detail = resolveSelectedCanonicalDetail(snapshot, selected);\n\t\t\t\tthis.rawCache = detail ? { snapshot, key, view: new RawDetailView(detail, Boolean(snapshot.protocol.capture.migration)) } : undefined;\n\t\t\t}\n\t\t\tif (this.rawCache) this.content.appendChild(this.rawCache.view.root);\n\t\t\telse this.content.textContent = 'Canonical object unavailable in this capture.';\n\t\t} else if (this.activeTab === 'relations') {\n\t\t\tthis.content.appendChild(this.createRelations(snapshot, selected));\n\t\t} else {\n\t\t\tthis.content.append(this.createLocationActions(snapshot, selected), this.createSummary(snapshot, selected));\n\t\t\tconst identity = this.selectionId(snapshot, selected);\n\t\t\tif (identity) this.content.appendChild(this.summary([['ID', this.copyId(identity)]]));\n\t\t\tconst diagnostics = this.createDiagnostics(snapshot, selected);\n\t\t\tif (diagnostics) this.content.appendChild(diagnostics);\n\t\t\tif (selected.kind === 'node' || selected.kind === 'culled') {\n\t\t\t\tconst node = snapshot.nodeById.get(selected.id) ?? snapshot.culledById.get(selected.id)?.node;\n\t\t\t\tif (node) {\n\t\t\t\t\tconst accesses = document.createElement('details');\n\t\t\t\t\tconst heading = document.createElement('summary');\n\t\t\t\t\theading.textContent = `Access facts · ${node.reads.length + node.writes.length}`;\n\t\t\t\t\taccesses.append(heading, this.accessRelations('Reads', node.reads), this.accessRelations('Writes', node.writes));\n\t\t\t\t\tthis.content.appendChild(accesses);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\t// Selecting a relation replaces its button. Keep keyboard focus in the pane.\n\t\tif (restoreFocus) this.tabs.get(this.activeTab)?.focus();\n\t}\n\n\tprivate selectionTitle(snapshot: FrameGraphDebugViewModel, selection: Selection): string {\n\t\tswitch (selection.kind) {\n\t\t\tcase 'node': {\n\t\t\t\tconst node = snapshot.nodeById.get(selection.id);\n\t\t\t\treturn node ? labelNode(node) : selection.id;\n\t\t\t}\n\t\t\tcase 'group': return snapshot.groupByPathKey.get(selection.pathKey)?.label ?? 'Group';\n\t\t\tcase 'resource': {\n\t\t\t\tconst resource = snapshot.resourceById.get(selection.id);\n\t\t\t\treturn resource ? labelResource(resource) : selection.id;\n\t\t\t}\n\t\t\tcase 'allocation': return /^allocation[:#-]/i.test(selection.id) ? selection.id : `Allocation ${selection.id}`;\n\t\t\tcase 'root': return 'Output root';\n\t\t\tcase 'culled': return `${snapshot.culledById.get(selection.id)?.node.label ?? selection.id} (culled)`;\n\t\t\tcase 'segment': return `Segment #${selection.index}`;\n\t\t}\n\t}\n\n\tprivate createSummary(snapshot: FrameGraphDebugViewModel, selection: Selection): HTMLElement {\n\t\tswitch (selection.kind) {\n\t\t\tcase 'node': {\n\t\t\t\tconst node = snapshot.nodeById.get(selection.id);\n\t\t\t\tif (!node) return this.summary([]);\n\t\t\t\tconst segment = snapshot.segmentByNodeId.get(node.id);\n\t\t\t\tconst roots = snapshot.roots.filter((root) => root.nodeId === node.id || root.resolution?.producerNodeIds.includes(node.id));\n\t\t\t\treturn this.summary([\n\t\t\t\t\t['Compile state', 'Retained · compiler included this pass; execution success is not implied'],\n\t\t\t\t\t['Retention', roots.length ? roots.map((root) => root.reason).join(', ') : 'No direct output root recorded; inspect dependencies in Relations'],\n\t\t\t\t\t['Kind', node.kind],\n\t\t\t\t\t['Execution slot', String(node.order)],\n\t\t\t\t\t['Group', groupPath(snapshot, node.debugGroupId)],\n\t\t\t\t\t['Segment', segment ? `#${segment.index} ${segment.kind}` : '-'],\n\t\t\t\t\t['CPU duration', node.cpuDurationMicros === undefined ? 'Not collected' : (node.cpuDurationMicros / 1000).toFixed(3) + ' ms'],\n\t\t\t\t\t['CPU scope', 'Synchronous elapsed time; zero may reflect clock precision.' + (node.kind === 'external-submission' ? ' Includes synchronous external submission.' : '')],\n\t\t\t\t\t['GPU duration', node.kind === 'external-submission' ? 'Opaque · external work is not measured'\n\t\t\t\t\t\t: node.kind !== 'render' && node.kind !== 'compute' ? 'Not applicable · this pass kind is not timing eligible'\n\t\t\t\t\t\t: node.gpuDurationMicros === undefined ? `Not collected${snapshot.profiling.status === 'unavailable' ? ` · ${snapshot.profiling.reason}` : ''}`\n\t\t\t\t\t\t: `${(node.gpuDurationMicros / 1000).toFixed(3)} ms`],\n\t\t\t\t\t['GPU scope', 'GPU timestamp interval for render/compute passes; excludes external work. Zero may reflect timestamp precision.'],\n\t\t\t\t\t['Accesses', `${node.reads.length} reads · ${node.writes.length} writes`],\n\t\t\t\t\t['Side effect', node.sideEffect ? 'yes' : 'no'],\n\t\t\t\t]);\n\t\t\t}\n\t\t\tcase 'group': {\n\t\t\t\tconst group = snapshot.groupByPathKey.get(selection.pathKey);\n\t\t\t\tif (!group) return this.summary([]);\n\t\t\t\treturn this.summary([\n\t\t\t\t\t['Path', group.path.join(' / ')],\n\t\t\t\t\t['Retained', String(group.summary.retainedNodeCount)],\n\t\t\t\t\t['Culled', String(group.summary.culledNodeCount)],\n\t\t\t\t\t['CPU coverage', formatTimingCoverage(group.summary.cpuTimedNodeCount, group.summary.retainedNodeCount)],\n\t\t\t\t\t['CPU pass sum', group.summary.cpuTimedNodeCount ? (group.summary.cpuWorkDurationMicros / 1000).toFixed(3) + ' ms' : 'Not collected'],\n\t\t\t\t\t['GPU coverage', formatTimingCoverage(group.summary.timedNodeCount, group.summary.timingEligibleNodeCount)],\n\t\t\t\t\t['GPU pass sum', group.summary.timingEligibleNodeCount === 0 ? 'Not applicable' : group.summary.timedNodeCount === 0 ? 'Not collected' : (group.summary.gpuWorkDurationMicros / 1000).toFixed(3) + ' ms'],\n\t\t\t\t\t['Opaque passes', `${group.summary.externalSubmissionCount} · excluded from GPU pass sum`],\n\t\t\t\t\t['Allocations', snapshot.protocol.memory.allocationReport.status === 'available' ? String(group.summary.physicalAllocationCount) : 'Unknown · allocation report unavailable'],\n\t\t\t\t\t['Segments', String(group.summary.executionSegmentCount)],\n\t\t\t\t]);\n\t\t\t}\n\t\t\tcase 'resource': {\n\t\t\t\tconst resource = snapshot.resourceById.get(selection.id);\n\t\t\t\tif (!resource) return this.summary([]);\n\t\t\t\treturn this.summary([\n\t\t\t\t\t['Kind / origin', `${resource.kind} · ${resource.origin}`],\n\t\t\t\t\t['Group', groupPath(snapshot, resource.debugGroupId)],\n\t\t\t\t\t['Descriptor', formatResourceDescriptor(resource)],\n\t\t\t\t\t['Resource estimate', `${formatEstimatedBytes(resource.estimatedByteSize)} · logical descriptor estimate`],\n\t\t\t\t\t['Lifetime', resource.lifetime ? `execution slots ${resource.lifetime.firstUse}–${resource.lifetime.lastUse} (inclusive)` : 'Unavailable'],\n\t\t\t\t\t['Allocation', resource.physicalResourceId !== undefined\n\t\t\t\t\t\t? this.createDetailLink(resource.physicalResourceId, { kind: 'allocation', id: resource.physicalResourceId })\n\t\t\t\t\t\t: resource.origin !== 'transient' ? 'Not applicable · externally owned resource'\n\t\t\t\t\t\t: snapshot.protocol.memory.allocationReport.status === 'unavailable' ? 'Unavailable · allocation report not captured'\n\t\t\t\t\t\t: 'Unallocated'],\n\t\t\t\t\t['Initial contents', resource.initialContents ?? 'Unknown'],\n\t\t\t\t\t['Usage', resource.usageFlags.join(', ') || '-'],\n\t\t\t\t]);\n\t\t\t}\n\t\t\tcase 'allocation': {\n\t\t\t\tconst allocation = snapshot.allocationById.get(selection.id);\n\t\t\t\tif (!allocation) return this.summary([]);\n\t\t\t\treturn this.summary([\n\t\t\t\t\t['Kind', allocation.kind],\n\t\t\t\t\t['Compatibility class', String(allocation.compatibilityClassId)],\n\t\t\t\t\t['Physical estimate', `${formatEstimatedBytes(allocation.estimatedByteSize)} · allocation capacity estimate`],\n\t\t\t\t\t['Logical resources', String(allocation.resourceIds.length)],\n\t\t\t\t\t['Alias', allocation.resourceIds.length > 1 ? `yes · ×${allocation.resourceIds.length}` : 'single'],\n\t\t\t\t]);\n\t\t\t}\n\t\t\tcase 'root': {\n\t\t\t\tconst root = snapshot.roots.find((root) => root.key === selection.key);\n\t\t\t\treturn this.summary(root ? [\n\t\t\t\t\t['Reason', root.reason],\n\t\t\t\t\t['Node', root.nodeId === undefined ? 'Not applicable' : this.nodeLink(snapshot, root.nodeId)],\n\t\t\t\t\t['Resource', root.resource ? this.viewResourceButton(snapshot, root.resource.id) : '-'],\n\t\t\t\t\t...(root.reason === 'side-effect' ? [] : [\n\t\t\t\t\t\t['Range', root.range ? formatRootRange(root) : 'Unavailable in Legacy capture'],\n\t\t\t\t\t\t['Initial contents', root.resolution ? String(root.resolution.usesInitialContents) : 'Unavailable in Legacy capture'],\n\t\t\t\t\t\t['Producers', root.resolution ? root.resolution.producerNodeIds.join(', ') || 'None' : 'Unavailable in Legacy capture'],\n\t\t\t\t\t] as [string, string][]),\n\t\t\t\t] : []);\n\t\t\t}\n\t\t\tcase 'culled': {\n\t\t\t\tconst culled = snapshot.culledById.get(selection.id);\n\t\t\t\treturn this.summary(culled ? [\n\t\t\t\t\t['Compile state', 'Culled · excluded by the compiler'],\n\t\t\t\t\t['Node', labelNode(culled.node)],\n\t\t\t\t\t['Kind', culled.node.kind],\n\t\t\t\t\t['Group', groupPath(snapshot, culled.node.debugGroupId)],\n\t\t\t\t\t['Reason', culled.reason],\n\t\t\t\t\t['Execution / segment / CPU / GPU', 'Not applicable · culled passes do not execute'],\n\t\t\t\t\t['Accesses', `${culled.node.reads.length} reads · ${culled.node.writes.length} writes`],\n\t\t\t\t] : []);\n\t\t\t}\n\t\t\tcase 'segment': {\n\t\t\t\tconst segment = snapshot.segmentByIndex.get(selection.index);\n\t\t\t\treturn this.summary(segment ? [\n\t\t\t\t\t['Kind', segment.kind === 'frame-graph' ? 'FrameGraph command segment' : 'Opaque interval'],\n\t\t\t\t\t['Nodes', String(segment.nodeIds.length)],\n\t\t\t\t\t['Meaning', segment.kind === 'external-submission'\n\t\t\t\t\t\t? 'Boundary around external work; not an actual third-party submission count.'\n\t\t\t\t\t\t: 'Contiguous FrameGraph-encoded command work.'],\n\t\t\t\t] : []);\n\t\t\t}\n\t\t}\n\t}\n\n\tprivate createRelations(snapshot: FrameGraphDebugViewModel, selection: Selection): HTMLElement {\n\t\tconst host = document.createElement('div');\n\t\thost.className = 'zenfg-inspector-inspector-relations';\n\t\thost.appendChild(this.createLocationActions(snapshot, selection));\n\t\tswitch (selection.kind) {\n\t\t\tcase 'node': {\n\t\t\t\tconst node = snapshot.nodeById.get(selection.id);\n\t\t\t\tif (node) {\n\t\t\t\t\thost.append(\n\t\t\t\t\t\tthis.accessRelations('Reads', node.reads),\n\t\t\t\t\t\tthis.accessRelations('Writes', node.writes),\n\t\t\t\t\t);\n\t\t\t\t\tconst segment = snapshot.segmentByNodeId.get(node.id);\n\t\t\t\t\tif (segment) host.appendChild(this.relationGroup('Segment', [\n\t\t\t\t\t\t[`#${segment.index} ${segment.kind}`, { kind: 'segment', index: segment.index }],\n\t\t\t\t\t]));\n\t\t\t\t\tfor (const kind of ['value', 'ordering'] as const) {\n\t\t\t\t\t\tconst relations: DetailRelation[] = [];\n\t\t\t\t\t\tfor (const edge of snapshot.edges) {\n\t\t\t\t\t\t\tif (edge.kind !== kind || (edge.fromNodeId !== node.id && edge.toNodeId !== node.id)) continue;\n\t\t\t\t\t\t\tconst upstream = edge.toNodeId === node.id;\n\t\t\t\t\t\t\tconst otherId = upstream ? edge.fromNodeId : edge.toNodeId;\n\t\t\t\t\t\t\tconst other = resolveNodeSelection(snapshot, otherId);\n\t\t\t\t\t\t\tif (other) relations.push([this.accessNodeLabel(snapshot, otherId), other,\n\t\t\t\t\t\t\t\t`${upstream ? 'Upstream' : 'Downstream'} · ${resourceLabel(snapshot, edge.resource.id)} · ${kind} dependency`]);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (relations.length) host.appendChild(this.relationGroup(kind === 'value' ? 'Value dependencies' : 'Ordering dependencies', relations));\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase 'group': {\n\t\t\t\tconst group = snapshot.groupByPathKey.get(selection.pathKey);\n\t\t\t\tif (group) {\n\t\t\t\t\thost.append(\n\t\t\t\t\t\tthis.resourceRelations('Inputs', group.summary.inputResources),\n\t\t\t\t\t\tthis.resourceRelations('Outputs', group.summary.outputResources),\n\t\t\t\t\t\tthis.relationGroup('Output roots', group.summary.outputRoots.map((root) => [\n\t\t\t\t\t\t\t`${root.resource ? labelResource(root.resource) : '-'} · ${root.reason} · ${formatRootRange(root)}`,\n\t\t\t\t\t\t\t{ kind: 'root', key: root.key },\n\t\t\t\t\t\t])),\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase 'resource': {\n\t\t\t\tconst resource = snapshot.resourceById.get(selection.id);\n\t\t\t\tconst accesses = snapshot.accessesByResourceId.get(selection.id) ?? [];\n\t\t\t\tconst passRelations: DetailRelation[] = [];\n\t\t\t\tfor (const access of accesses) {\n\t\t\t\t\tconst nodeSelection = this.accessNodeSelection(snapshot, access.nodeId);\n\t\t\t\t\tif (nodeSelection) passRelations.push([\n\t\t\t\t\t\tthis.accessNodeLabel(snapshot, access.nodeId),\n\t\t\t\t\t\tnodeSelection,\n\t\t\t\t\t\tformatAccessFacts(access),\n\t\t\t\t\t]);\n\t\t\t\t}\n\t\t\t\thost.appendChild(this.relationGroup('Pass accesses', passRelations));\n\t\t\t\tconst roots = snapshot.roots.filter((root) => root.resource?.id === selection.id);\n\t\t\t\tif (roots.length) host.appendChild(this.relationGroup('Output roots', roots.map((root) => [\n\t\t\t\t\t`${root.reason} · ${formatRootRange(root)}`, { kind: 'root', key: root.key },\n\t\t\t\t])));\n\t\t\t\tif (resource?.physicalResourceId !== undefined) host.appendChild(this.relationGroup('Allocation', [\n\t\t\t\t\t[resource.physicalResourceId, { kind: 'allocation', id: resource.physicalResourceId }],\n\t\t\t\t]));\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase 'allocation': {\n\t\t\t\tconst allocation = snapshot.allocationById.get(selection.id);\n\t\t\t\tif (allocation) host.appendChild(this.relationGroup('Logical resources', allocation.resourceIds.map((id) => [\n\t\t\t\t\tresourceLabel(snapshot, id), { kind: 'resource', id },\n\t\t\t\t])));\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase 'root': {\n\t\t\t\tconst root = snapshot.roots.find((root) => root.key === selection.key);\n\t\t\t\tconst relations: Array<readonly [string, Selection]> = [];\n\t\t\t\tif (root?.nodeId !== undefined && snapshot.nodeById.has(root.nodeId)) relations.push([\n\t\t\t\t\tthis.accessNodeLabel(snapshot, root.nodeId), { kind: 'node', id: root.nodeId },\n\t\t\t\t]);\n\t\t\t\tif (root?.resource) host.appendChild(this.relationGroup('Resource', [[labelResource(root.resource), { kind: 'resource', id: root.resource.id }]]));\n\t\t\t\tif (root?.resource && root.resolution?.usesInitialContents) relations.push([`Initial contents · ${labelResource(root.resource)}`, { kind: 'resource', id: root.resource.id }]);\n\t\t\t\tfor (const id of root?.resolution?.producerNodeIds ?? []) relations.push([this.accessNodeLabel(snapshot, id), { kind: 'node', id }]);\n\t\t\t\thost.appendChild(this.relationGroup('Output sources', relations));\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase 'culled': {\n\t\t\t\tconst culled = snapshot.culledById.get(selection.id);\n\t\t\t\tif (culled) host.append(\n\t\t\t\t\tthis.accessRelations('Reads', culled.node.reads),\n\t\t\t\t\tthis.accessRelations('Writes', culled.node.writes),\n\t\t\t\t);\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase 'segment': {\n\t\t\t\tconst segment = snapshot.segmentByIndex.get(selection.index);\n\t\t\t\tif (segment) host.appendChild(this.relationGroup('Passes', segment.nodeIds.flatMap((id) => {\n\t\t\t\t\tconst node = snapshot.nodeById.get(id);\n\t\t\t\t\treturn node ? [[labelNode(node), { kind: 'node', id }] as const] : [];\n\t\t\t\t})));\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t\tif (host.childElementCount === 1) {\n\t\t\tconst empty = document.createElement('p');\n\t\t\tempty.className = 'zenfg-inspector-muted';\n\t\t\tempty.textContent = 'No related objects.';\n\t\t\thost.appendChild(empty);\n\t\t}\n\t\treturn host;\n\t}\n\n\tprivate accessRelations(title: string, accesses: readonly FrameGraphDebugAccess[]): HTMLElement {\n\t\treturn this.relationGroup(title, accesses.map((access) => [\n\t\t\tlabelResource(access.resource),\n\t\t\t{ kind: 'resource', id: access.resource.id },\n\t\t\tformatAccessFacts(access),\n\t\t]));\n\t}\n\n\tprivate resourceRelations(title: string, resources: readonly FrameGraphDebugResourceRef[]): HTMLElement {\n\t\treturn this.relationGroup(title, resources.map((resource) => [\n\t\t\tlabelResource(resource), { kind: 'resource', id: resource.id },\n\t\t]));\n\t}\n\n\tprivate relationGroup(title: string, relations: readonly DetailRelation[]): HTMLElement {\n\t\tconst section = document.createElement('section');\n\t\tconst heading = document.createElement('h3');\n\t\theading.textContent = `${title} ${relations.length}`;\n\t\tsection.appendChild(heading);\n\t\tfor (const [label, selection, description] of relations) {\n\t\t\tconst link = this.createDetailLink(label, selection);\n\t\t\tconst entry = document.createElement('div');\n\t\t\tentry.className = 'zenfg-inspector-relation-entry';\n\t\t\tconst links = document.createElement('div');\n\t\t\tlinks.className = 'zenfg-inspector-relation-links';\n\t\t\tlinks.appendChild(link);\n\t\t\tif (this.callbacks.onReveal) links.appendChild(this.revealButton(selection, this.primaryPage(selection)));\n\t\t\tentry.appendChild(links);\n\t\t\tif (description !== undefined) {\n\t\t\t\tconst metadata = document.createElement('span');\n\t\t\t\tmetadata.className = 'zenfg-inspector-muted';\n\t\t\t\tmetadata.textContent = description;\n\t\t\t\tentry.appendChild(metadata);\n\t\t\t}\n\t\t\tsection.appendChild(entry);\n\t\t}\n\t\tif (relations.length === 0) {\n\t\t\tconst empty = document.createElement('span');\n\t\t\tempty.className = 'zenfg-inspector-muted';\n\t\t\tempty.textContent = 'None';\n\t\t\tsection.appendChild(empty);\n\t\t}\n\t\treturn section;\n\t}\n\n\tprivate selectRelated(selection: Selection): void {\n\t\tthis.clearLinkHover();\n\t\tthis.callbacks.onSelect(selection);\n\t}\n\n\tprivate viewResourceButton(snapshot: FrameGraphDebugViewModel, resourceId: string): HTMLButtonElement {\n\t\treturn this.createDetailLink(`View resource · ${resourceLabel(snapshot, resourceId)}`,\n\t\t\t{ kind: 'resource', id: resourceId });\n\t}\n\n\tprivate createDetailLink(label: string, selection: Selection): HTMLButtonElement {\n\t\tconst link = createRelationButton(label, selection, (target) => this.selectRelated(target));\n\t\tlink.addEventListener('mouseenter', () => {\n\t\t\tthis.hoveredLink = link;\n\t\t\tthis.callbacks.onHover(selection);\n\t\t});\n\t\tlink.addEventListener('mouseleave', () => {\n\t\t\tif (this.hoveredLink === link) this.clearLinkHover();\n\t\t});\n\t\treturn link;\n\t}\n\n\tprivate clearLinkHover(): void {\n\t\tif (!this.hoveredLink) return;\n\t\tthis.hoveredLink = undefined;\n\t\tthis.callbacks.onHover(undefined);\n\t}\n\n\tprivate summary(rows: readonly (readonly [string, string | HTMLElement])[]): HTMLElement {\n\t\tconst summary = document.createElement('dl');\n\t\tsummary.className = 'zenfg-inspector-inspector-summary';\n\t\tfor (const [label, value] of rows) {\n\t\t\tconst term = document.createElement('dt');\n\t\t\tterm.textContent = label;\n\t\t\tconst description = document.createElement('dd');\n\t\t\tif (typeof value === 'string') {\n\t\t\t\tdescription.textContent = value;\n\t\t\t\tdescription.title = value;\n\t\t\t} else {\n\t\t\t\tdescription.appendChild(value);\n\t\t\t}\n\t\t\tsummary.append(term, description);\n\t\t}\n\t\treturn summary;\n\t}\n\n\tprivate accessNodeLabel(snapshot: FrameGraphDebugViewModel, nodeId: string): string {\n\t\tconst node = snapshot.nodeById.get(nodeId);\n\t\tif (node) return labelNode(node);\n\t\tconst culled = snapshot.culledById.get(nodeId);\n\t\treturn culled ? `${labelNode(culled.node)} (culled)` : nodeId;\n\t}\n\n\tprivate accessNodeSelection(snapshot: FrameGraphDebugViewModel, nodeId: string): Selection | undefined {\n\t\treturn resolveNodeSelection(snapshot, nodeId);\n\t}\n\n\tprivate nodeLink(snapshot: FrameGraphDebugViewModel, id: string): string | HTMLButtonElement {\n\t\tconst selected = resolveNodeSelection(snapshot, id);\n\t\treturn selected ? this.createDetailLink(this.accessNodeLabel(snapshot, id), selected) : id;\n\t}\n\n\tprivate primaryPage(selection: Selection): WorkbenchTab {\n\t\tswitch (selection.kind) {\n\t\t\tcase 'node': case 'culled': case 'group': return 'passes';\n\t\t\tcase 'resource': return 'resources';\n\t\t\tcase 'allocation': return 'memory';\n\t\t\tcase 'root': case 'segment': return 'diagnostics';\n\t\t}\n\t}\n\n\tprivate revealButton(selection: Selection, page: WorkbenchTab): HTMLButtonElement {\n\t\tconst button = document.createElement('button');\n\t\tbutton.type = 'button';\n\t\tbutton.className = 'zenfg-inspector-inline-action';\n\t\tbutton.textContent = `Locate in ${page[0].toUpperCase()}${page.slice(1)}`;\n\t\tbutton.addEventListener('click', () => {\n\t\t\tthis.clearLinkHover();\n\t\t\tthis.callbacks.onReveal?.(selection, page);\n\t\t});\n\t\treturn button;\n\t}\n\n\tprivate createLocationActions(snapshot: FrameGraphDebugViewModel, selection: Selection): HTMLElement {\n\t\tconst actions = document.createElement('div');\n\t\tactions.className = 'zenfg-inspector-detail-actions';\n\t\tif (!this.callbacks.onReveal) return actions;\n\t\tactions.appendChild(this.revealButton(selection, this.primaryPage(selection)));\n\t\tif (selection.kind === 'node' || selection.kind === 'group' || selection.kind === 'resource' || selection.kind === 'root') {\n\t\t\tactions.appendChild(this.revealButton(selection, 'graph'));\n\t\t}\n\t\tif (selection.kind === 'resource' && snapshot.resourceById.get(selection.id)?.origin === 'transient') actions.appendChild(this.revealButton(selection, 'memory'));\n\t\tif (selection.kind === 'culled') {\n\t\t\tconst note = document.createElement('span');\n\t\t\tnote.className = 'zenfg-inspector-muted';\n\t\t\tnote.textContent = 'Culled passes are absent from Graph. Locate them in Passes.';\n\t\t\tactions.appendChild(note);\n\t\t}\n\t\treturn actions;\n\t}\n\n\tprivate selectionId(snapshot: FrameGraphDebugViewModel, selection: Selection): string | undefined {\n\t\tif ('id' in selection) return selection.id;\n\t\tif (selection.kind === 'group') return snapshot.groupByPathKey.get(selection.pathKey)?.id;\n\t\tif (selection.kind === 'segment') return snapshot.segmentByIndex.get(selection.index)?.id;\n\t\treturn undefined;\n\t}\n\n\tprivate copyId(id: string): HTMLElement {\n\t\tconst host = document.createElement('span');\n\t\thost.className = 'zenfg-inspector-copy-id';\n\t\tconst code = document.createElement('code');\n\t\tcode.textContent = id;\n\t\tconst button = document.createElement('button');\n\t\tbutton.type = 'button';\n\t\tbutton.textContent = 'Copy ID';\n\t\tbutton.setAttribute('aria-label', 'Copy full object ID');\n\t\tbutton.addEventListener('click', () => {\n\t\t\tvoid writeClipboardText(id).then(() => { button.textContent = 'Copied'; }, () => { button.textContent = 'Copy failed'; });\n\t\t});\n\t\thost.append(code, button);\n\t\treturn host;\n\t}\n\n\tprivate createDiagnostics(snapshot: FrameGraphDebugViewModel, selection: Selection): HTMLElement | undefined {\n\t\tlet diagnostics: FrameGraphDebugViewModel['protocol']['diagnostics'] = [];\n\t\tif (selection.kind === 'node' || selection.kind === 'culled') diagnostics = snapshot.diagnosticsByNodeId.get(selection.id) ?? [];\n\t\telse if (selection.kind === 'resource') diagnostics = snapshot.diagnosticsByResourceId.get(selection.id) ?? [];\n\t\telse if (selection.kind === 'allocation') {\n\t\t\tconst resourceIds = new Set(snapshot.allocationById.get(selection.id)?.resourceIds);\n\t\t\tdiagnostics = snapshot.protocol.diagnostics.filter((diagnostic) => diagnostic.resourceId !== undefined && resourceIds.has(diagnostic.resourceId));\n\t\t} else if (selection.kind === 'group') {\n\t\t\tconst groupId = snapshot.groupByPathKey.get(selection.pathKey)?.id;\n\t\t\tconst groups = new Set(snapshot.debugGroups.filter((group) => groupId !== undefined && group.ancestorIds.includes(groupId)).map((group) => group.id));\n\t\t\tdiagnostics = snapshot.protocol.diagnostics.filter((diagnostic) => {\n\t\t\t\tconst nodeGroup = diagnostic.nodeId ? snapshot.canonicalNodeById.get(diagnostic.nodeId)?.groupId : undefined;\n\t\t\t\tconst resourceGroup = diagnostic.resourceId ? snapshot.resourceById.get(diagnostic.resourceId)?.debugGroupId : undefined;\n\t\t\t\treturn (nodeGroup !== undefined && groups.has(nodeGroup)) || (resourceGroup !== undefined && groups.has(resourceGroup));\n\t\t\t});\n\t\t}\n\t\tif (!diagnostics.length) return undefined;\n\t\tconst section = document.createElement('section');\n\t\tsection.className = 'zenfg-inspector-detail-diagnostics';\n\t\tconst heading = document.createElement('h3');\n\t\theading.textContent = `Related diagnostics ${diagnostics.length}`;\n\t\tsection.appendChild(heading);\n\t\tfor (const diagnostic of diagnostics) {\n\t\t\tconst entry = document.createElement('article');\n\t\t\tentry.dataset.severity = diagnostic.severity;\n\t\t\tconst label = document.createElement('strong');\n\t\t\tlabel.textContent = `${diagnostic.severity} · ${diagnostic.code}`;\n\t\t\tconst message = document.createElement('p');\n\t\t\tmessage.textContent = diagnostic.message;\n\t\t\tentry.append(label, message);\n\t\t\tif (diagnostic.nodeId) {\n\t\t\t\tconst node = resolveNodeSelection(snapshot, diagnostic.nodeId);\n\t\t\t\tif (node) entry.appendChild(this.createDetailLink(this.accessNodeLabel(snapshot, diagnostic.nodeId), node));\n\t\t\t}\n\t\t\tif (diagnostic.resourceId) entry.appendChild(this.viewResourceButton(snapshot, diagnostic.resourceId));\n\t\t\tsection.appendChild(entry);\n\t\t}\n\t\treturn section;\n\t}\n}\n"]}
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
/** Content-width layout and message styles for the diagnostic workbench lists. */
|
|
2
|
+
export declare const PANEL_LIST_CSS = "\n.zenfg-inspector-view-toolbar[hidden],\n.zenfg-inspector-subview[hidden],\n.zenfg-inspector-list-context[hidden] { display: none; }\n.zenfg-inspector-result-count {\n\tcolor: var(--fgd-muted);\n\twhite-space: nowrap;\n\tfont: var(--fgd-font-size-small)/1.4 var(--fgd-font-ui);\n}\n.zenfg-inspector-list-context {\n\tflex: 0 0 auto;\n\tmargin: 0;\n\tpadding: 7px 10px;\n\tborder-bottom: 1px solid var(--fgd-border-subtle);\n\tcolor: var(--fgd-muted);\n\tfont: var(--fgd-font-size-small)/1.5 var(--fgd-font-ui);\n}\n.zenfg-inspector-view-toolbar button {\n\tmin-height: var(--fgd-control-height);\n\tpadding: var(--fgd-space-1) var(--fgd-space-2);\n\tborder: 1px solid var(--fgd-border);\n\tborder-radius: var(--fgd-radius-sm);\n\tbackground: var(--fgd-panel);\n\tcolor: var(--fgd-text-secondary);\n\tfont: var(--fgd-font-size)/1.3 var(--fgd-font-ui);\n\tcursor: pointer;\n}\n.zenfg-inspector-view-toolbar button:hover { background: var(--fgd-surface-hover); }\n.zenfg-inspector-view-toolbar input,\n.zenfg-inspector-view-toolbar select { font-size: var(--fgd-font-size); }\n.zenfg-inspector-passes-view .zenfg-inspector-workbench-table,\n.zenfg-inspector-resources-view .zenfg-inspector-workbench-table {\n\tmin-width: 580px;\n\tborder-collapse: separate;\n\tborder-spacing: 0;\n\tfont: var(--fgd-font-size-small)/1.5 var(--fgd-font-ui);\n}\n.zenfg-inspector-passes-view .zenfg-inspector-workbench-table [data-column='numeric'],\n.zenfg-inspector-resources-view .zenfg-inspector-workbench-table [data-column='numeric'] {\n\tfont-family: var(--fgd-font-mono);\n}\n.zenfg-inspector-passes-view .zenfg-inspector-workbench-table th:first-child,\n.zenfg-inspector-resources-view .zenfg-inspector-workbench-table th:first-child,\n.zenfg-inspector-passes-view .zenfg-inspector-workbench-table td:first-child,\n.zenfg-inspector-resources-view .zenfg-inspector-workbench-table td:first-child {\n\tposition: sticky;\n\tleft: 0;\n\tmax-width: 290px;\n\tbackground: var(--fgd-canvas);\n\tz-index: 1;\n}\n.zenfg-inspector-passes-view .zenfg-inspector-workbench-table th:first-child,\n.zenfg-inspector-resources-view .zenfg-inspector-workbench-table th:first-child {\n\tz-index: 3;\n\tbackground: var(--fgd-panel);\n}\n.zenfg-inspector-passes-view .zenfg-inspector-workbench-table tr.selected td:first-child,\n.zenfg-inspector-resources-view .zenfg-inspector-workbench-table tr.selected td:first-child {\n\tbackground: color-mix(in srgb, var(--fgd-accent) 12%, var(--fgd-canvas));\n}\n.zenfg-inspector-passes-view .zenfg-inspector-workbench-table tbody tr:hover td:first-child,\n.zenfg-inspector-resources-view .zenfg-inspector-workbench-table tbody tr:hover td:first-child {\n\tbackground: var(--fgd-surface-hover);\n}\n.zenfg-inspector-passes-view .zenfg-inspector-group-toggle { margin-right: 5px; }\n.zenfg-inspector-diagnostics-view { display: flex; flex-direction: column; }\n.zenfg-inspector-diagnostics-view .zenfg-inspector-diagnostics-scroller {\n\tflex: 1 1 auto;\n\tmin-height: 0;\n\theight: auto;\n}\n.zenfg-inspector-diagnostics-sections {\n\tdisplay: flex;\n\tflex-direction: column;\n\tgap: 14px;\n\tpadding: 14px;\n\tmin-width: 0;\n}\n.zenfg-inspector-diagnostic-messages > h2 { margin: 0; font: 600 14px/1.5 var(--fgd-font-ui); }\n.zenfg-inspector-diagnostic-messages > p,\n.zenfg-inspector-diagnostic-section > p {\n\tmargin: 5px 0 10px;\n\tcolor: var(--fgd-muted);\n\tfont: var(--fgd-font-size-small)/1.5 var(--fgd-font-ui);\n}\n.zenfg-inspector-diagnostic-message {\n\t--diagnostic-color: var(--fgd-accent);\n\tmargin-top: 9px;\n\tpadding: 10px var(--fgd-space-3);\n\tborder-left: 3px solid var(--diagnostic-color);\n\tbackground: var(--fgd-surface);\n\toverflow-wrap: anywhere;\n}\n.zenfg-inspector-diagnostic-message[data-severity='error'] { --diagnostic-color: var(--fgd-danger); }\n.zenfg-inspector-diagnostic-message[data-severity='warning'] { --diagnostic-color: var(--fgd-warning); }\n.zenfg-inspector-diagnostic-message h3 {\n\tdisplay: flex;\n\tflex-wrap: wrap;\n\tgap: var(--fgd-space-2);\n\tmargin: 0;\n\tfont: 600 var(--fgd-font-size-small)/1.5 var(--fgd-font-ui);\n}\n.zenfg-inspector-diagnostic-severity { color: var(--diagnostic-color); text-transform: capitalize; }\n.zenfg-inspector-diagnostic-message code { font: var(--fgd-font-size-small)/1.5 var(--fgd-font-mono); }\n.zenfg-inspector-diagnostic-message p { margin: 6px 0; white-space: pre-wrap; font: var(--fgd-font-size)/1.55 var(--fgd-font-ui); }\n.zenfg-inspector-diagnostic-links {\n\tdisplay: flex;\n\talign-items: baseline;\n\tflex-wrap: wrap;\n\tgap: 5px var(--fgd-space-3);\n\tmin-width: 0;\n\tmargin-top: var(--fgd-space-1);\n}\n.zenfg-inspector-diagnostic-links .zenfg-inspector-relation-button {\n\tmin-width: 0;\n\tmax-width: 100%;\n\twhite-space: normal;\n\toverflow-wrap: anywhere;\n\ttext-align: left;\n\tfont: var(--fgd-font-size)/1.5 var(--fgd-font-ui);\n}\n.zenfg-inspector-diagnostic-reveal { color: var(--fgd-muted); }\n.zenfg-inspector-diagnostic-section {\n\tmin-width: 0;\n\tpadding: 10px 0 0;\n\tborder-top: 1px solid var(--fgd-border-subtle);\n\toverflow-wrap: anywhere;\n}\n.zenfg-inspector-diagnostic-section > summary {\n\tpadding: 3px 0;\n\tfont: 600 var(--fgd-font-size)/1.5 var(--fgd-font-ui);\n\tcursor: pointer;\n}\n.zenfg-inspector-diagnostic-section > .zenfg-inspector-diagnostic-section { margin: var(--fgd-space-2) 0 0 var(--fgd-space-3); }\n.zenfg-inspector-diagnostic-section .zenfg-inspector-diagnostic-list { overflow: visible; padding: var(--fgd-space-1) 0; }\n.zenfg-inspector-diagnostic-section ul { padding-left: 20px; }\n.zenfg-inspector-diagnostic-section > .zenfg-inspector-relation-button { margin: 5px 0; }\n.zenfg-inspector-diagnostic-links .selected { background: var(--fgd-accent-soft); }\n.zenfg-inspector-diagnostic-section summary:focus-visible,\n.zenfg-inspector-view-toolbar button:focus-visible { outline: 2px solid var(--fgd-accent); outline-offset: 2px; }\n@container zenfg-inspector-main (max-width: 640px) {\n\t.zenfg-inspector-passes-view .zenfg-inspector-workbench-table,\n\t.zenfg-inspector-resources-view .zenfg-inspector-workbench-table { min-width: 420px; }\n\t.zenfg-inspector-passes-view [id$='pass-list-panel'] tr > :nth-child(3),\n\t.zenfg-inspector-passes-view [id$='pass-list-panel'] tr > :nth-child(6),\n\t.zenfg-inspector-passes-view [id$='group-list-panel'] tr > :nth-child(5),\n\t.zenfg-inspector-passes-view [id$='group-list-panel'] tr > :nth-child(6),\n\t.zenfg-inspector-resources-view tr > :nth-child(4),\n\t.zenfg-inspector-resources-view tr > :nth-child(5) { display: none; }\n\t.zenfg-inspector-passes-view .zenfg-inspector-workbench-table td:first-child,\n\t.zenfg-inspector-resources-view .zenfg-inspector-workbench-table td:first-child { max-width: 190px; }\n}\n";
|
|
3
|
+
//# sourceMappingURL=panelListStyles.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"panelListStyles.d.ts","sourceRoot":"","sources":["../src/panelListStyles.ts"],"names":[],"mappings":"AAAA,kFAAkF;AAClF,eAAO,MAAM,cAAc,+kNAwJ1B,CAAC"}
|
|
@@ -0,0 +1,155 @@
|
|
|
1
|
+
/** Content-width layout and message styles for the diagnostic workbench lists. */
|
|
2
|
+
export const PANEL_LIST_CSS = `
|
|
3
|
+
.zenfg-inspector-view-toolbar[hidden],
|
|
4
|
+
.zenfg-inspector-subview[hidden],
|
|
5
|
+
.zenfg-inspector-list-context[hidden] { display: none; }
|
|
6
|
+
.zenfg-inspector-result-count {
|
|
7
|
+
color: var(--fgd-muted);
|
|
8
|
+
white-space: nowrap;
|
|
9
|
+
font: var(--fgd-font-size-small)/1.4 var(--fgd-font-ui);
|
|
10
|
+
}
|
|
11
|
+
.zenfg-inspector-list-context {
|
|
12
|
+
flex: 0 0 auto;
|
|
13
|
+
margin: 0;
|
|
14
|
+
padding: 7px 10px;
|
|
15
|
+
border-bottom: 1px solid var(--fgd-border-subtle);
|
|
16
|
+
color: var(--fgd-muted);
|
|
17
|
+
font: var(--fgd-font-size-small)/1.5 var(--fgd-font-ui);
|
|
18
|
+
}
|
|
19
|
+
.zenfg-inspector-view-toolbar button {
|
|
20
|
+
min-height: var(--fgd-control-height);
|
|
21
|
+
padding: var(--fgd-space-1) var(--fgd-space-2);
|
|
22
|
+
border: 1px solid var(--fgd-border);
|
|
23
|
+
border-radius: var(--fgd-radius-sm);
|
|
24
|
+
background: var(--fgd-panel);
|
|
25
|
+
color: var(--fgd-text-secondary);
|
|
26
|
+
font: var(--fgd-font-size)/1.3 var(--fgd-font-ui);
|
|
27
|
+
cursor: pointer;
|
|
28
|
+
}
|
|
29
|
+
.zenfg-inspector-view-toolbar button:hover { background: var(--fgd-surface-hover); }
|
|
30
|
+
.zenfg-inspector-view-toolbar input,
|
|
31
|
+
.zenfg-inspector-view-toolbar select { font-size: var(--fgd-font-size); }
|
|
32
|
+
.zenfg-inspector-passes-view .zenfg-inspector-workbench-table,
|
|
33
|
+
.zenfg-inspector-resources-view .zenfg-inspector-workbench-table {
|
|
34
|
+
min-width: 580px;
|
|
35
|
+
border-collapse: separate;
|
|
36
|
+
border-spacing: 0;
|
|
37
|
+
font: var(--fgd-font-size-small)/1.5 var(--fgd-font-ui);
|
|
38
|
+
}
|
|
39
|
+
.zenfg-inspector-passes-view .zenfg-inspector-workbench-table [data-column='numeric'],
|
|
40
|
+
.zenfg-inspector-resources-view .zenfg-inspector-workbench-table [data-column='numeric'] {
|
|
41
|
+
font-family: var(--fgd-font-mono);
|
|
42
|
+
}
|
|
43
|
+
.zenfg-inspector-passes-view .zenfg-inspector-workbench-table th:first-child,
|
|
44
|
+
.zenfg-inspector-resources-view .zenfg-inspector-workbench-table th:first-child,
|
|
45
|
+
.zenfg-inspector-passes-view .zenfg-inspector-workbench-table td:first-child,
|
|
46
|
+
.zenfg-inspector-resources-view .zenfg-inspector-workbench-table td:first-child {
|
|
47
|
+
position: sticky;
|
|
48
|
+
left: 0;
|
|
49
|
+
max-width: 290px;
|
|
50
|
+
background: var(--fgd-canvas);
|
|
51
|
+
z-index: 1;
|
|
52
|
+
}
|
|
53
|
+
.zenfg-inspector-passes-view .zenfg-inspector-workbench-table th:first-child,
|
|
54
|
+
.zenfg-inspector-resources-view .zenfg-inspector-workbench-table th:first-child {
|
|
55
|
+
z-index: 3;
|
|
56
|
+
background: var(--fgd-panel);
|
|
57
|
+
}
|
|
58
|
+
.zenfg-inspector-passes-view .zenfg-inspector-workbench-table tr.selected td:first-child,
|
|
59
|
+
.zenfg-inspector-resources-view .zenfg-inspector-workbench-table tr.selected td:first-child {
|
|
60
|
+
background: color-mix(in srgb, var(--fgd-accent) 12%, var(--fgd-canvas));
|
|
61
|
+
}
|
|
62
|
+
.zenfg-inspector-passes-view .zenfg-inspector-workbench-table tbody tr:hover td:first-child,
|
|
63
|
+
.zenfg-inspector-resources-view .zenfg-inspector-workbench-table tbody tr:hover td:first-child {
|
|
64
|
+
background: var(--fgd-surface-hover);
|
|
65
|
+
}
|
|
66
|
+
.zenfg-inspector-passes-view .zenfg-inspector-group-toggle { margin-right: 5px; }
|
|
67
|
+
.zenfg-inspector-diagnostics-view { display: flex; flex-direction: column; }
|
|
68
|
+
.zenfg-inspector-diagnostics-view .zenfg-inspector-diagnostics-scroller {
|
|
69
|
+
flex: 1 1 auto;
|
|
70
|
+
min-height: 0;
|
|
71
|
+
height: auto;
|
|
72
|
+
}
|
|
73
|
+
.zenfg-inspector-diagnostics-sections {
|
|
74
|
+
display: flex;
|
|
75
|
+
flex-direction: column;
|
|
76
|
+
gap: 14px;
|
|
77
|
+
padding: 14px;
|
|
78
|
+
min-width: 0;
|
|
79
|
+
}
|
|
80
|
+
.zenfg-inspector-diagnostic-messages > h2 { margin: 0; font: 600 14px/1.5 var(--fgd-font-ui); }
|
|
81
|
+
.zenfg-inspector-diagnostic-messages > p,
|
|
82
|
+
.zenfg-inspector-diagnostic-section > p {
|
|
83
|
+
margin: 5px 0 10px;
|
|
84
|
+
color: var(--fgd-muted);
|
|
85
|
+
font: var(--fgd-font-size-small)/1.5 var(--fgd-font-ui);
|
|
86
|
+
}
|
|
87
|
+
.zenfg-inspector-diagnostic-message {
|
|
88
|
+
--diagnostic-color: var(--fgd-accent);
|
|
89
|
+
margin-top: 9px;
|
|
90
|
+
padding: 10px var(--fgd-space-3);
|
|
91
|
+
border-left: 3px solid var(--diagnostic-color);
|
|
92
|
+
background: var(--fgd-surface);
|
|
93
|
+
overflow-wrap: anywhere;
|
|
94
|
+
}
|
|
95
|
+
.zenfg-inspector-diagnostic-message[data-severity='error'] { --diagnostic-color: var(--fgd-danger); }
|
|
96
|
+
.zenfg-inspector-diagnostic-message[data-severity='warning'] { --diagnostic-color: var(--fgd-warning); }
|
|
97
|
+
.zenfg-inspector-diagnostic-message h3 {
|
|
98
|
+
display: flex;
|
|
99
|
+
flex-wrap: wrap;
|
|
100
|
+
gap: var(--fgd-space-2);
|
|
101
|
+
margin: 0;
|
|
102
|
+
font: 600 var(--fgd-font-size-small)/1.5 var(--fgd-font-ui);
|
|
103
|
+
}
|
|
104
|
+
.zenfg-inspector-diagnostic-severity { color: var(--diagnostic-color); text-transform: capitalize; }
|
|
105
|
+
.zenfg-inspector-diagnostic-message code { font: var(--fgd-font-size-small)/1.5 var(--fgd-font-mono); }
|
|
106
|
+
.zenfg-inspector-diagnostic-message p { margin: 6px 0; white-space: pre-wrap; font: var(--fgd-font-size)/1.55 var(--fgd-font-ui); }
|
|
107
|
+
.zenfg-inspector-diagnostic-links {
|
|
108
|
+
display: flex;
|
|
109
|
+
align-items: baseline;
|
|
110
|
+
flex-wrap: wrap;
|
|
111
|
+
gap: 5px var(--fgd-space-3);
|
|
112
|
+
min-width: 0;
|
|
113
|
+
margin-top: var(--fgd-space-1);
|
|
114
|
+
}
|
|
115
|
+
.zenfg-inspector-diagnostic-links .zenfg-inspector-relation-button {
|
|
116
|
+
min-width: 0;
|
|
117
|
+
max-width: 100%;
|
|
118
|
+
white-space: normal;
|
|
119
|
+
overflow-wrap: anywhere;
|
|
120
|
+
text-align: left;
|
|
121
|
+
font: var(--fgd-font-size)/1.5 var(--fgd-font-ui);
|
|
122
|
+
}
|
|
123
|
+
.zenfg-inspector-diagnostic-reveal { color: var(--fgd-muted); }
|
|
124
|
+
.zenfg-inspector-diagnostic-section {
|
|
125
|
+
min-width: 0;
|
|
126
|
+
padding: 10px 0 0;
|
|
127
|
+
border-top: 1px solid var(--fgd-border-subtle);
|
|
128
|
+
overflow-wrap: anywhere;
|
|
129
|
+
}
|
|
130
|
+
.zenfg-inspector-diagnostic-section > summary {
|
|
131
|
+
padding: 3px 0;
|
|
132
|
+
font: 600 var(--fgd-font-size)/1.5 var(--fgd-font-ui);
|
|
133
|
+
cursor: pointer;
|
|
134
|
+
}
|
|
135
|
+
.zenfg-inspector-diagnostic-section > .zenfg-inspector-diagnostic-section { margin: var(--fgd-space-2) 0 0 var(--fgd-space-3); }
|
|
136
|
+
.zenfg-inspector-diagnostic-section .zenfg-inspector-diagnostic-list { overflow: visible; padding: var(--fgd-space-1) 0; }
|
|
137
|
+
.zenfg-inspector-diagnostic-section ul { padding-left: 20px; }
|
|
138
|
+
.zenfg-inspector-diagnostic-section > .zenfg-inspector-relation-button { margin: 5px 0; }
|
|
139
|
+
.zenfg-inspector-diagnostic-links .selected { background: var(--fgd-accent-soft); }
|
|
140
|
+
.zenfg-inspector-diagnostic-section summary:focus-visible,
|
|
141
|
+
.zenfg-inspector-view-toolbar button:focus-visible { outline: 2px solid var(--fgd-accent); outline-offset: 2px; }
|
|
142
|
+
@container zenfg-inspector-main (max-width: 640px) {
|
|
143
|
+
.zenfg-inspector-passes-view .zenfg-inspector-workbench-table,
|
|
144
|
+
.zenfg-inspector-resources-view .zenfg-inspector-workbench-table { min-width: 420px; }
|
|
145
|
+
.zenfg-inspector-passes-view [id$='pass-list-panel'] tr > :nth-child(3),
|
|
146
|
+
.zenfg-inspector-passes-view [id$='pass-list-panel'] tr > :nth-child(6),
|
|
147
|
+
.zenfg-inspector-passes-view [id$='group-list-panel'] tr > :nth-child(5),
|
|
148
|
+
.zenfg-inspector-passes-view [id$='group-list-panel'] tr > :nth-child(6),
|
|
149
|
+
.zenfg-inspector-resources-view tr > :nth-child(4),
|
|
150
|
+
.zenfg-inspector-resources-view tr > :nth-child(5) { display: none; }
|
|
151
|
+
.zenfg-inspector-passes-view .zenfg-inspector-workbench-table td:first-child,
|
|
152
|
+
.zenfg-inspector-resources-view .zenfg-inspector-workbench-table td:first-child { max-width: 190px; }
|
|
153
|
+
}
|
|
154
|
+
`;
|
|
155
|
+
//# sourceMappingURL=panelListStyles.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"panelListStyles.js","sourceRoot":"","sources":["../src/panelListStyles.ts"],"names":[],"mappings":"AAAA,kFAAkF;AAClF,MAAM,CAAC,MAAM,cAAc,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAwJ7B,CAAC","sourcesContent":["/** Content-width layout and message styles for the diagnostic workbench lists. */\nexport const PANEL_LIST_CSS = `\n.zenfg-inspector-view-toolbar[hidden],\n.zenfg-inspector-subview[hidden],\n.zenfg-inspector-list-context[hidden] { display: none; }\n.zenfg-inspector-result-count {\n\tcolor: var(--fgd-muted);\n\twhite-space: nowrap;\n\tfont: var(--fgd-font-size-small)/1.4 var(--fgd-font-ui);\n}\n.zenfg-inspector-list-context {\n\tflex: 0 0 auto;\n\tmargin: 0;\n\tpadding: 7px 10px;\n\tborder-bottom: 1px solid var(--fgd-border-subtle);\n\tcolor: var(--fgd-muted);\n\tfont: var(--fgd-font-size-small)/1.5 var(--fgd-font-ui);\n}\n.zenfg-inspector-view-toolbar button {\n\tmin-height: var(--fgd-control-height);\n\tpadding: var(--fgd-space-1) var(--fgd-space-2);\n\tborder: 1px solid var(--fgd-border);\n\tborder-radius: var(--fgd-radius-sm);\n\tbackground: var(--fgd-panel);\n\tcolor: var(--fgd-text-secondary);\n\tfont: var(--fgd-font-size)/1.3 var(--fgd-font-ui);\n\tcursor: pointer;\n}\n.zenfg-inspector-view-toolbar button:hover { background: var(--fgd-surface-hover); }\n.zenfg-inspector-view-toolbar input,\n.zenfg-inspector-view-toolbar select { font-size: var(--fgd-font-size); }\n.zenfg-inspector-passes-view .zenfg-inspector-workbench-table,\n.zenfg-inspector-resources-view .zenfg-inspector-workbench-table {\n\tmin-width: 580px;\n\tborder-collapse: separate;\n\tborder-spacing: 0;\n\tfont: var(--fgd-font-size-small)/1.5 var(--fgd-font-ui);\n}\n.zenfg-inspector-passes-view .zenfg-inspector-workbench-table [data-column='numeric'],\n.zenfg-inspector-resources-view .zenfg-inspector-workbench-table [data-column='numeric'] {\n\tfont-family: var(--fgd-font-mono);\n}\n.zenfg-inspector-passes-view .zenfg-inspector-workbench-table th:first-child,\n.zenfg-inspector-resources-view .zenfg-inspector-workbench-table th:first-child,\n.zenfg-inspector-passes-view .zenfg-inspector-workbench-table td:first-child,\n.zenfg-inspector-resources-view .zenfg-inspector-workbench-table td:first-child {\n\tposition: sticky;\n\tleft: 0;\n\tmax-width: 290px;\n\tbackground: var(--fgd-canvas);\n\tz-index: 1;\n}\n.zenfg-inspector-passes-view .zenfg-inspector-workbench-table th:first-child,\n.zenfg-inspector-resources-view .zenfg-inspector-workbench-table th:first-child {\n\tz-index: 3;\n\tbackground: var(--fgd-panel);\n}\n.zenfg-inspector-passes-view .zenfg-inspector-workbench-table tr.selected td:first-child,\n.zenfg-inspector-resources-view .zenfg-inspector-workbench-table tr.selected td:first-child {\n\tbackground: color-mix(in srgb, var(--fgd-accent) 12%, var(--fgd-canvas));\n}\n.zenfg-inspector-passes-view .zenfg-inspector-workbench-table tbody tr:hover td:first-child,\n.zenfg-inspector-resources-view .zenfg-inspector-workbench-table tbody tr:hover td:first-child {\n\tbackground: var(--fgd-surface-hover);\n}\n.zenfg-inspector-passes-view .zenfg-inspector-group-toggle { margin-right: 5px; }\n.zenfg-inspector-diagnostics-view { display: flex; flex-direction: column; }\n.zenfg-inspector-diagnostics-view .zenfg-inspector-diagnostics-scroller {\n\tflex: 1 1 auto;\n\tmin-height: 0;\n\theight: auto;\n}\n.zenfg-inspector-diagnostics-sections {\n\tdisplay: flex;\n\tflex-direction: column;\n\tgap: 14px;\n\tpadding: 14px;\n\tmin-width: 0;\n}\n.zenfg-inspector-diagnostic-messages > h2 { margin: 0; font: 600 14px/1.5 var(--fgd-font-ui); }\n.zenfg-inspector-diagnostic-messages > p,\n.zenfg-inspector-diagnostic-section > p {\n\tmargin: 5px 0 10px;\n\tcolor: var(--fgd-muted);\n\tfont: var(--fgd-font-size-small)/1.5 var(--fgd-font-ui);\n}\n.zenfg-inspector-diagnostic-message {\n\t--diagnostic-color: var(--fgd-accent);\n\tmargin-top: 9px;\n\tpadding: 10px var(--fgd-space-3);\n\tborder-left: 3px solid var(--diagnostic-color);\n\tbackground: var(--fgd-surface);\n\toverflow-wrap: anywhere;\n}\n.zenfg-inspector-diagnostic-message[data-severity='error'] { --diagnostic-color: var(--fgd-danger); }\n.zenfg-inspector-diagnostic-message[data-severity='warning'] { --diagnostic-color: var(--fgd-warning); }\n.zenfg-inspector-diagnostic-message h3 {\n\tdisplay: flex;\n\tflex-wrap: wrap;\n\tgap: var(--fgd-space-2);\n\tmargin: 0;\n\tfont: 600 var(--fgd-font-size-small)/1.5 var(--fgd-font-ui);\n}\n.zenfg-inspector-diagnostic-severity { color: var(--diagnostic-color); text-transform: capitalize; }\n.zenfg-inspector-diagnostic-message code { font: var(--fgd-font-size-small)/1.5 var(--fgd-font-mono); }\n.zenfg-inspector-diagnostic-message p { margin: 6px 0; white-space: pre-wrap; font: var(--fgd-font-size)/1.55 var(--fgd-font-ui); }\n.zenfg-inspector-diagnostic-links {\n\tdisplay: flex;\n\talign-items: baseline;\n\tflex-wrap: wrap;\n\tgap: 5px var(--fgd-space-3);\n\tmin-width: 0;\n\tmargin-top: var(--fgd-space-1);\n}\n.zenfg-inspector-diagnostic-links .zenfg-inspector-relation-button {\n\tmin-width: 0;\n\tmax-width: 100%;\n\twhite-space: normal;\n\toverflow-wrap: anywhere;\n\ttext-align: left;\n\tfont: var(--fgd-font-size)/1.5 var(--fgd-font-ui);\n}\n.zenfg-inspector-diagnostic-reveal { color: var(--fgd-muted); }\n.zenfg-inspector-diagnostic-section {\n\tmin-width: 0;\n\tpadding: 10px 0 0;\n\tborder-top: 1px solid var(--fgd-border-subtle);\n\toverflow-wrap: anywhere;\n}\n.zenfg-inspector-diagnostic-section > summary {\n\tpadding: 3px 0;\n\tfont: 600 var(--fgd-font-size)/1.5 var(--fgd-font-ui);\n\tcursor: pointer;\n}\n.zenfg-inspector-diagnostic-section > .zenfg-inspector-diagnostic-section { margin: var(--fgd-space-2) 0 0 var(--fgd-space-3); }\n.zenfg-inspector-diagnostic-section .zenfg-inspector-diagnostic-list { overflow: visible; padding: var(--fgd-space-1) 0; }\n.zenfg-inspector-diagnostic-section ul { padding-left: 20px; }\n.zenfg-inspector-diagnostic-section > .zenfg-inspector-relation-button { margin: 5px 0; }\n.zenfg-inspector-diagnostic-links .selected { background: var(--fgd-accent-soft); }\n.zenfg-inspector-diagnostic-section summary:focus-visible,\n.zenfg-inspector-view-toolbar button:focus-visible { outline: 2px solid var(--fgd-accent); outline-offset: 2px; }\n@container zenfg-inspector-main (max-width: 640px) {\n\t.zenfg-inspector-passes-view .zenfg-inspector-workbench-table,\n\t.zenfg-inspector-resources-view .zenfg-inspector-workbench-table { min-width: 420px; }\n\t.zenfg-inspector-passes-view [id$='pass-list-panel'] tr > :nth-child(3),\n\t.zenfg-inspector-passes-view [id$='pass-list-panel'] tr > :nth-child(6),\n\t.zenfg-inspector-passes-view [id$='group-list-panel'] tr > :nth-child(5),\n\t.zenfg-inspector-passes-view [id$='group-list-panel'] tr > :nth-child(6),\n\t.zenfg-inspector-resources-view tr > :nth-child(4),\n\t.zenfg-inspector-resources-view tr > :nth-child(5) { display: none; }\n\t.zenfg-inspector-passes-view .zenfg-inspector-workbench-table td:first-child,\n\t.zenfg-inspector-resources-view .zenfg-inspector-workbench-table td:first-child { max-width: 190px; }\n}\n`;\n"]}
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
/** Appended after the base styles so the axis and every resource share one grid. */
|
|
2
|
+
export declare const PANEL_MEMORY_CSS = "\n.zenfg-inspector-memory-view {\n\tgrid-template-rows: auto auto auto minmax(0, 1fr);\n\tcontainer-type: inline-size;\n\tcontainer-name: zenfg-memory;\n}\n.zenfg-inspector-memory-summary { grid-template-columns: repeat(3, minmax(0, 1fr)); }\n.zenfg-inspector-memory-summary > div { border: 0; background: transparent; }\n.zenfg-inspector-memory-summary span { color: var(--fgd-muted); font: var(--fgd-font-size-small)/1.4 var(--fgd-font-ui); }\n.zenfg-inspector-memory-summary strong { font-size: var(--fgd-font-size); white-space: normal; overflow-wrap: anywhere; }\n.zenfg-inspector-memory-note { margin: 0; padding: 6px var(--fgd-space-3); font: var(--fgd-font-size-small)/1.45 var(--fgd-font-ui); }\n.zenfg-inspector-memory-timeline { align-content: start; grid-template-columns: minmax(0, 1fr); min-width: 720px; font-size: var(--fgd-font-size-small); }\n.zenfg-inspector-memory-axis,\n.zenfg-inspector-memory-resource {\n\tgrid-template-columns: minmax(165px, 0.9fr) 86px minmax(300px, 2.4fr) 82px;\n\tcolumn-gap: 10px;\n\tpadding-left: var(--fgd-space-2);\n\tpadding-right: var(--fgd-space-2);\n}\n.zenfg-inspector-memory-axis { min-height: var(--fgd-row-height); z-index: 4; font-size: var(--fgd-font-size-small); }\n.zenfg-inspector-memory-axis > :first-child,\n.zenfg-inspector-memory-name { position: sticky; left: 0; z-index: 2; background: var(--fgd-canvas); }\n.zenfg-inspector-memory-axis-track,\n.zenfg-inspector-memory-track { grid-column: 3; }\n.zenfg-inspector-memory-axis-track > span { transform: translateX(-50%); border-left: 0; font-size: var(--fgd-font-size-small); }\n.zenfg-inspector-memory-gridline { position: absolute; height: 100%; top: 0; border-left: 1px dotted var(--fgd-border-strong); }\n.zenfg-inspector-memory-resource { min-height: var(--fgd-row-height); }\n.zenfg-inspector-memory-name { display: flex; align-items: center; min-height: var(--fgd-row-height); gap: 6px; min-width: 0; }\n.zenfg-inspector-memory-name > .zenfg-inspector-relation-button { min-width: 0; overflow: hidden; text-overflow: ellipsis; font-family: var(--fgd-font-ui); }\n.zenfg-inspector-memory-reveal { flex: 0 0 auto; padding: 2px var(--fgd-space-1); border: 1px solid var(--fgd-border); border-radius: var(--fgd-radius-sm); color: var(--fgd-text-secondary); background: var(--fgd-panel); font: var(--fgd-font-size-small)/1.4 var(--fgd-font-ui); cursor: pointer; }\n.zenfg-inspector-memory-reveal:focus-visible { outline: 2px solid var(--fgd-accent); outline-offset: 1px; }\n.zenfg-inspector-memory-resource.selected .zenfg-inspector-memory-name { background: var(--fgd-panel); box-shadow: inset 2px 0 var(--fgd-accent); }\n.zenfg-inspector-memory-allocation { min-width: 0; align-items: flex-start; font-family: var(--fgd-font-ui); }\n.zenfg-inspector-memory-allocation > button { min-width: 0; overflow: hidden; }\n.zenfg-inspector-memory-allocation > span { min-width: 0; overflow-wrap: anywhere; font-size: var(--fgd-font-size-small); }\n.zenfg-inspector-memory-bar { min-width: 0; }\n@container zenfg-memory (max-width: 660px) {\n\t.zenfg-inspector-memory-summary { grid-template-columns: repeat(2, minmax(0, 1fr)); }\n}\n";
|
|
3
|
+
//# sourceMappingURL=panelMemoryStyles.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"panelMemoryStyles.d.ts","sourceRoot":"","sources":["../src/panelMemoryStyles.ts"],"names":[],"mappings":"AAAA,oFAAoF;AACpF,eAAO,MAAM,gBAAgB,6kGAuC5B,CAAC"}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
/** Appended after the base styles so the axis and every resource share one grid. */
|
|
2
|
+
export const PANEL_MEMORY_CSS = `
|
|
3
|
+
.zenfg-inspector-memory-view {
|
|
4
|
+
grid-template-rows: auto auto auto minmax(0, 1fr);
|
|
5
|
+
container-type: inline-size;
|
|
6
|
+
container-name: zenfg-memory;
|
|
7
|
+
}
|
|
8
|
+
.zenfg-inspector-memory-summary { grid-template-columns: repeat(3, minmax(0, 1fr)); }
|
|
9
|
+
.zenfg-inspector-memory-summary > div { border: 0; background: transparent; }
|
|
10
|
+
.zenfg-inspector-memory-summary span { color: var(--fgd-muted); font: var(--fgd-font-size-small)/1.4 var(--fgd-font-ui); }
|
|
11
|
+
.zenfg-inspector-memory-summary strong { font-size: var(--fgd-font-size); white-space: normal; overflow-wrap: anywhere; }
|
|
12
|
+
.zenfg-inspector-memory-note { margin: 0; padding: 6px var(--fgd-space-3); font: var(--fgd-font-size-small)/1.45 var(--fgd-font-ui); }
|
|
13
|
+
.zenfg-inspector-memory-timeline { align-content: start; grid-template-columns: minmax(0, 1fr); min-width: 720px; font-size: var(--fgd-font-size-small); }
|
|
14
|
+
.zenfg-inspector-memory-axis,
|
|
15
|
+
.zenfg-inspector-memory-resource {
|
|
16
|
+
grid-template-columns: minmax(165px, 0.9fr) 86px minmax(300px, 2.4fr) 82px;
|
|
17
|
+
column-gap: 10px;
|
|
18
|
+
padding-left: var(--fgd-space-2);
|
|
19
|
+
padding-right: var(--fgd-space-2);
|
|
20
|
+
}
|
|
21
|
+
.zenfg-inspector-memory-axis { min-height: var(--fgd-row-height); z-index: 4; font-size: var(--fgd-font-size-small); }
|
|
22
|
+
.zenfg-inspector-memory-axis > :first-child,
|
|
23
|
+
.zenfg-inspector-memory-name { position: sticky; left: 0; z-index: 2; background: var(--fgd-canvas); }
|
|
24
|
+
.zenfg-inspector-memory-axis-track,
|
|
25
|
+
.zenfg-inspector-memory-track { grid-column: 3; }
|
|
26
|
+
.zenfg-inspector-memory-axis-track > span { transform: translateX(-50%); border-left: 0; font-size: var(--fgd-font-size-small); }
|
|
27
|
+
.zenfg-inspector-memory-gridline { position: absolute; height: 100%; top: 0; border-left: 1px dotted var(--fgd-border-strong); }
|
|
28
|
+
.zenfg-inspector-memory-resource { min-height: var(--fgd-row-height); }
|
|
29
|
+
.zenfg-inspector-memory-name { display: flex; align-items: center; min-height: var(--fgd-row-height); gap: 6px; min-width: 0; }
|
|
30
|
+
.zenfg-inspector-memory-name > .zenfg-inspector-relation-button { min-width: 0; overflow: hidden; text-overflow: ellipsis; font-family: var(--fgd-font-ui); }
|
|
31
|
+
.zenfg-inspector-memory-reveal { flex: 0 0 auto; padding: 2px var(--fgd-space-1); border: 1px solid var(--fgd-border); border-radius: var(--fgd-radius-sm); color: var(--fgd-text-secondary); background: var(--fgd-panel); font: var(--fgd-font-size-small)/1.4 var(--fgd-font-ui); cursor: pointer; }
|
|
32
|
+
.zenfg-inspector-memory-reveal:focus-visible { outline: 2px solid var(--fgd-accent); outline-offset: 1px; }
|
|
33
|
+
.zenfg-inspector-memory-resource.selected .zenfg-inspector-memory-name { background: var(--fgd-panel); box-shadow: inset 2px 0 var(--fgd-accent); }
|
|
34
|
+
.zenfg-inspector-memory-allocation { min-width: 0; align-items: flex-start; font-family: var(--fgd-font-ui); }
|
|
35
|
+
.zenfg-inspector-memory-allocation > button { min-width: 0; overflow: hidden; }
|
|
36
|
+
.zenfg-inspector-memory-allocation > span { min-width: 0; overflow-wrap: anywhere; font-size: var(--fgd-font-size-small); }
|
|
37
|
+
.zenfg-inspector-memory-bar { min-width: 0; }
|
|
38
|
+
@container zenfg-memory (max-width: 660px) {
|
|
39
|
+
.zenfg-inspector-memory-summary { grid-template-columns: repeat(2, minmax(0, 1fr)); }
|
|
40
|
+
}
|
|
41
|
+
`;
|
|
42
|
+
//# sourceMappingURL=panelMemoryStyles.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"panelMemoryStyles.js","sourceRoot":"","sources":["../src/panelMemoryStyles.ts"],"names":[],"mappings":"AAAA,oFAAoF;AACpF,MAAM,CAAC,MAAM,gBAAgB,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAuC/B,CAAC","sourcesContent":["/** Appended after the base styles so the axis and every resource share one grid. */\nexport const PANEL_MEMORY_CSS = `\n.zenfg-inspector-memory-view {\n\tgrid-template-rows: auto auto auto minmax(0, 1fr);\n\tcontainer-type: inline-size;\n\tcontainer-name: zenfg-memory;\n}\n.zenfg-inspector-memory-summary { grid-template-columns: repeat(3, minmax(0, 1fr)); }\n.zenfg-inspector-memory-summary > div { border: 0; background: transparent; }\n.zenfg-inspector-memory-summary span { color: var(--fgd-muted); font: var(--fgd-font-size-small)/1.4 var(--fgd-font-ui); }\n.zenfg-inspector-memory-summary strong { font-size: var(--fgd-font-size); white-space: normal; overflow-wrap: anywhere; }\n.zenfg-inspector-memory-note { margin: 0; padding: 6px var(--fgd-space-3); font: var(--fgd-font-size-small)/1.45 var(--fgd-font-ui); }\n.zenfg-inspector-memory-timeline { align-content: start; grid-template-columns: minmax(0, 1fr); min-width: 720px; font-size: var(--fgd-font-size-small); }\n.zenfg-inspector-memory-axis,\n.zenfg-inspector-memory-resource {\n\tgrid-template-columns: minmax(165px, 0.9fr) 86px minmax(300px, 2.4fr) 82px;\n\tcolumn-gap: 10px;\n\tpadding-left: var(--fgd-space-2);\n\tpadding-right: var(--fgd-space-2);\n}\n.zenfg-inspector-memory-axis { min-height: var(--fgd-row-height); z-index: 4; font-size: var(--fgd-font-size-small); }\n.zenfg-inspector-memory-axis > :first-child,\n.zenfg-inspector-memory-name { position: sticky; left: 0; z-index: 2; background: var(--fgd-canvas); }\n.zenfg-inspector-memory-axis-track,\n.zenfg-inspector-memory-track { grid-column: 3; }\n.zenfg-inspector-memory-axis-track > span { transform: translateX(-50%); border-left: 0; font-size: var(--fgd-font-size-small); }\n.zenfg-inspector-memory-gridline { position: absolute; height: 100%; top: 0; border-left: 1px dotted var(--fgd-border-strong); }\n.zenfg-inspector-memory-resource { min-height: var(--fgd-row-height); }\n.zenfg-inspector-memory-name { display: flex; align-items: center; min-height: var(--fgd-row-height); gap: 6px; min-width: 0; }\n.zenfg-inspector-memory-name > .zenfg-inspector-relation-button { min-width: 0; overflow: hidden; text-overflow: ellipsis; font-family: var(--fgd-font-ui); }\n.zenfg-inspector-memory-reveal { flex: 0 0 auto; padding: 2px var(--fgd-space-1); border: 1px solid var(--fgd-border); border-radius: var(--fgd-radius-sm); color: var(--fgd-text-secondary); background: var(--fgd-panel); font: var(--fgd-font-size-small)/1.4 var(--fgd-font-ui); cursor: pointer; }\n.zenfg-inspector-memory-reveal:focus-visible { outline: 2px solid var(--fgd-accent); outline-offset: 1px; }\n.zenfg-inspector-memory-resource.selected .zenfg-inspector-memory-name { background: var(--fgd-panel); box-shadow: inset 2px 0 var(--fgd-accent); }\n.zenfg-inspector-memory-allocation { min-width: 0; align-items: flex-start; font-family: var(--fgd-font-ui); }\n.zenfg-inspector-memory-allocation > button { min-width: 0; overflow: hidden; }\n.zenfg-inspector-memory-allocation > span { min-width: 0; overflow-wrap: anywhere; font-size: var(--fgd-font-size-small); }\n.zenfg-inspector-memory-bar { min-width: 0; }\n@container zenfg-memory (max-width: 660px) {\n\t.zenfg-inspector-memory-summary { grid-template-columns: repeat(2, minmax(0, 1fr)); }\n}\n`;\n"]}
|
|
@@ -7,14 +7,26 @@ export declare class MemoryView {
|
|
|
7
7
|
private readonly metrics;
|
|
8
8
|
private readonly scroller;
|
|
9
9
|
private readonly timeline;
|
|
10
|
+
private readonly count;
|
|
11
|
+
private readonly search;
|
|
12
|
+
private readonly filterSelect;
|
|
10
13
|
private readonly rows;
|
|
11
14
|
private snapshot;
|
|
12
15
|
private selected;
|
|
16
|
+
private query;
|
|
17
|
+
private filter;
|
|
18
|
+
private sort;
|
|
13
19
|
constructor(callbacks: WorkbenchCallbacks, idPrefix: string);
|
|
14
20
|
setSnapshot(snapshot: FrameGraphDebugViewModel): void;
|
|
15
21
|
setSelection(selected: Selection | undefined): void;
|
|
16
|
-
|
|
22
|
+
/** Explicit navigation can remove filters; ordinary selection never does. */
|
|
23
|
+
reveal(selection: Selection): void;
|
|
24
|
+
private clearFilters;
|
|
25
|
+
private renderMetrics;
|
|
26
|
+
private renderTimeline;
|
|
27
|
+
private createAllocationHeader;
|
|
17
28
|
private createMetric;
|
|
29
|
+
private executionTicks;
|
|
18
30
|
private createAxis;
|
|
19
31
|
private createResourceRow;
|
|
20
32
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"panelMemoryView.d.ts","sourceRoot":"","sources":["../src/panelMemoryView.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAA2B,wBAAwB,EAAE,MAAM,wBAAwB,CAAC;AAGhG,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AACjD,OAAO,
|
|
1
|
+
{"version":3,"file":"panelMemoryView.d.ts","sourceRoot":"","sources":["../src/panelMemoryView.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAA2B,wBAAwB,EAAE,MAAM,wBAAwB,CAAC;AAGhG,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AACjD,OAAO,EAGQ,KAAK,kBAAkB,EACrC,MAAM,4BAA4B,CAAC;AAKpC,qBAAa,UAAU;IAeV,OAAO,CAAC,QAAQ,CAAC,SAAS;IAdtC,QAAQ,CAAC,IAAI,cAAqC;IAClD,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAiC;IACzD,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAiC;IAC1D,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAiC;IAC1D,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAkC;IACxD,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAmB;IAC1C,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAoB;IACjD,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAoC;IACzD,OAAO,CAAC,QAAQ,CAAuC;IACvD,OAAO,CAAC,QAAQ,CAAwB;IACxC,OAAO,CAAC,KAAK,CAAM;IACnB,OAAO,CAAC,MAAM,CAAuB;IACrC,OAAO,CAAC,IAAI,CAA4B;gBAEX,SAAS,EAAE,kBAAkB,EAAE,QAAQ,EAAE,MAAM;IAsC5E,WAAW,CAAC,QAAQ,EAAE,wBAAwB,GAAG,IAAI;IAMrD,YAAY,CAAC,QAAQ,EAAE,SAAS,GAAG,SAAS,GAAG,IAAI;IAKnD,6EAA6E;IAC7E,MAAM,CAAC,SAAS,EAAE,SAAS,GAAG,IAAI;IAQlC,OAAO,CAAC,YAAY;IAQpB,OAAO,CAAC,aAAa;IAuBrB,OAAO,CAAC,cAAc;IAqDtB,OAAO,CAAC,sBAAsB;IAc9B,OAAO,CAAC,YAAY;IAWpB,OAAO,CAAC,cAAc;IAKtB,OAAO,CAAC,UAAU;IAwBlB,OAAO,CAAC,iBAAiB;CAgDzB"}
|