@zenfg/inspector 0.1.0-beta.2 → 0.1.0-beta.4
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 +60 -26
- package/THEMING.md +124 -0
- package/dist/FrameGraphInspector.d.ts +24 -8
- package/dist/FrameGraphInspector.d.ts.map +1 -1
- package/dist/FrameGraphInspector.js +151 -65
- 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 +28 -4
- package/dist/debugCaptureModel.d.ts.map +1 -1
- package/dist/debugCaptureModel.js +72 -16
- 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 +18 -3
- package/dist/panelCytoscapeGraphRenderer.d.ts.map +1 -1
- package/dist/panelCytoscapeGraphRenderer.js +183 -41
- 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 +167 -58
- 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 +20 -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 +15 -26
- package/dist/panelGraphScene.d.ts.map +1 -1
- package/dist/panelGraphScene.js +191 -208
- 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 +42 -9
- package/dist/panelGraphView.js.map +1 -1
- package/dist/panelGraphVisuals.d.ts +18 -6
- package/dist/panelGraphVisuals.d.ts.map +1 -1
- package/dist/panelGraphVisuals.js +156 -116
- package/dist/panelGraphVisuals.js.map +1 -1
- package/dist/panelInspectorView.d.ts +13 -0
- package/dist/panelInspectorView.d.ts.map +1 -1
- package/dist/panelInspectorView.js +326 -46
- 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 +36 -6
- 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 +18 -4
- package/dist/panelTypes.d.ts.map +1 -1
- package/dist/panelTypes.js.map +1 -1
- package/dist/panelVisualTheme.d.ts +176 -71
- package/dist/panelVisualTheme.d.ts.map +1 -1
- package/dist/panelVisualTheme.js +34 -36
- 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 +63 -2
- 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 +161 -205
- 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 +145 -68
- package/src/capture.ts +4 -0
- package/src/debugCaptureModel.ts +97 -21
- package/src/index.ts +6 -2
- package/src/panelAliasAnalysis.ts +24 -70
- package/src/panelCytoscapeGraphRenderer.ts +177 -40
- package/src/panelDetailLayout.ts +155 -0
- package/src/panelDetailStyles.ts +56 -0
- package/src/panelDiagnosticsView.ts +167 -86
- package/src/panelDomHelpers.ts +4 -5
- package/src/panelGraphLayout.ts +20 -5
- package/src/panelGraphRenderer.ts +7 -0
- package/src/panelGraphScene.ts +204 -292
- package/src/panelGraphSearch.ts +96 -0
- package/src/panelGraphView.ts +41 -9
- package/src/panelGraphVisuals.ts +152 -118
- package/src/panelInspectorView.ts +315 -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 +39 -7
- package/src/panelTheme.ts +85 -0
- package/src/panelTypes.ts +16 -4
- package/src/panelVisualTheme.ts +38 -38
- package/src/panelWorkbenchHelpers.ts +62 -4
- package/src/panelWorkbenchStyles.ts +100 -0
- package/src/panelWorkbenchView.ts +201 -52
- package/src/query.ts +11 -11
- package/src/styles.ts +162 -205
- package/src/theme.ts +24 -0
- package/src/themeDefinitions.ts +103 -0
- package/src/themePalette.ts +44 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"panelGraphLayout.js","sourceRoot":"","sources":["../src/panelGraphLayout.ts"],"names":[],"mappings":"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","sourcesContent":["import type cytoscape from 'cytoscape';\nimport type { ELK, ElkExtendedEdge, ElkNode, ElkPort } from 'elkjs/lib/elk-api';\n\nimport type { GraphScene, GraphSceneElementId, GraphSceneNode } from './panelGraphScene.ts';\nimport { expandedGroupLabelMaxWidth, GRAPH_GEOMETRY, nodeDimensions } from './panelGraphVisuals.ts';\n\nexport type GraphPosition = { readonly x: number; readonly y: number };\nexport type GraphEdgeRoute = {\n readonly startPoint: GraphPosition;\n readonly bendPoints: readonly GraphPosition[];\n readonly endPoint: GraphPosition;\n};\nexport type GraphLayoutResult = {\n readonly positions: ReadonlyMap<GraphSceneElementId, GraphPosition>;\n readonly routes: ReadonlyMap<GraphSceneElementId, GraphEdgeRoute>;\n};\n\nexport type CytoscapeEdgeRouteData = {\n readonly sourceEndpoint: string;\n readonly targetEndpoint: string;\n readonly segmentWeights: string;\n readonly segmentDistances: string;\n};\n\nexport async function layoutGraphScene(elk: ELK, scene: GraphScene): Promise<GraphLayoutResult> {\n const graph = createElkLayoutGraph(scene);\n const layout = await elk.layout(graph);\n const positions = new Map<GraphSceneElementId, GraphPosition>();\n collectLayoutPositions(layout, 0, 0, positions);\n const nodeOffsets = new Map<GraphSceneElementId, GraphPosition>();\n collectLayoutOffsets(layout, 0, 0, nodeOffsets);\n const routes = new Map<GraphSceneElementId, GraphEdgeRoute>();\n collectEdgeRoutes(layout, 0, 0, nodeOffsets, routes);\n return { positions, routes };\n}\n\nexport function createElkLayoutGraph(scene: GraphScene): ElkNode {\n const childrenByParent = new Map<GraphSceneElementId | undefined, GraphSceneNode[]>();\n const portsByNode = new Map<GraphSceneElementId, ElkPort[]>();\n const elkEdges = scene.edges.map((edge): ElkExtendedEdge => {\n const sourcePortId = `${edge.id}:source`;\n const targetPortId = `${edge.id}:target`;\n appendPort(portsByNode, edge.from, {\n id: sourcePortId,\n width: 1,\n height: 1,\n layoutOptions: { 'elk.port.side': 'EAST' },\n });\n appendPort(portsByNode, edge.to, {\n id: targetPortId,\n width: 1,\n height: 1,\n layoutOptions: { 'elk.port.side': 'WEST' },\n });\n return {\n id: edge.id,\n sources: [sourcePortId],\n targets: [targetPortId],\n };\n });\n for (const node of scene.nodes) {\n const children = childrenByParent.get(node.parentId) ?? [];\n children.push(node);\n childrenByParent.set(node.parentId, children);\n }\n const createNode = (node: GraphSceneNode): ElkNode => {\n const children = childrenByParent.get(node.id)?.map(createNode);\n const dimensions = nodeDimensions(node);\n return {\n id: node.id,\n width: dimensions.width,\n height: dimensions.height,\n children,\n ports: portsByNode.get(node.id),\n layoutOptions: children?.length ? {\n 'elk.algorithm': 'layered',\n 'elk.direction': 'RIGHT',\n 'elk.edgeRouting': 'ORTHOGONAL',\n 'elk.hierarchyHandling': 'INCLUDE_CHILDREN',\n 'elk.portConstraints': 'FIXED_SIDE',\n 'elk.layered.mergeEdges': 'false',\n 'elk.layered.mergeHierarchyEdges': 'false',\n 'elk.padding': elkPadding(),\n 'elk.spacing.nodeNode': '36',\n 'elk.layered.spacing.nodeNodeBetweenLayers': '72',\n 'elk.spacing.edgeEdge': '10',\n 'elk.layered.spacing.edgeEdgeBetweenLayers': '10',\n } : {\n 'elk.portConstraints': 'FIXED_SIDE',\n },\n };\n };\n return {\n id: 'root',\n children: (childrenByParent.get(undefined) ?? []).map(createNode),\n edges: elkEdges,\n layoutOptions: {\n 'elk.algorithm': 'layered',\n 'elk.direction': 'RIGHT',\n 'elk.edgeRouting': 'ORTHOGONAL',\n 'elk.hierarchyHandling': 'INCLUDE_CHILDREN',\n 'elk.layered.mergeEdges': 'false',\n 'elk.layered.mergeHierarchyEdges': 'false',\n 'elk.spacing.nodeNode': '42',\n 'elk.layered.spacing.nodeNodeBetweenLayers': '88',\n 'elk.spacing.edgeNode': '20',\n 'elk.spacing.edgeEdge': '10',\n 'elk.layered.spacing.edgeEdgeBetweenLayers': '10',\n 'elk.layered.considerModelOrder.strategy': 'NODES_AND_EDGES',\n },\n };\n}\n\nexport function applyGraphLayout(core: cytoscape.Core, scene: GraphScene, layout: GraphLayoutResult): void {\n applyPositions(core, layout.positions);\n core.batch(() => {\n for (const edge of scene.edges) {\n const route = layout.routes.get(edge.id);\n const cytoscapeEdge = core.getElementById(edge.id);\n if (cytoscapeEdge.empty()) continue;\n const sourceNode = core.getElementById(edge.from);\n const targetNode = core.getElementById(edge.to);\n const routeData = sourceNode.nonempty() && targetNode.nonempty()\n ? createCytoscapeEdgeRouteData(route, sourceNode.position(), targetNode.position())\n : undefined;\n cytoscapeEdge\n .removeClass('elk-route elk-segments')\n .removeData('sourceEndpoint', 'targetEndpoint', 'segmentWeights', 'segmentDistances');\n if (!routeData) continue;\n cytoscapeEdge.data(routeData).addClass('elk-route');\n if (route!.bendPoints.length > 0) cytoscapeEdge.addClass('elk-segments');\n }\n });\n}\n\nexport function syncExpandedGroupLabelGeometry(core: cytoscape.Core): void {\n const groups = core.nodes('node[kind = \"group\"][collapsed = 0]');\n for (let iteration = 0; iteration < 2; iteration++) {\n const updates = groups.map((node) => ({\n node,\n labelMaxWidth: expandedGroupLabelMaxWidth(node.outerWidth()),\n }));\n core.batch(() => {\n for (const update of updates) update.node.data('labelMaxWidth', update.labelMaxWidth);\n });\n }\n}\n\nexport function createCytoscapeEdgeRouteData(\n route: GraphEdgeRoute | undefined,\n sourceCenter: GraphPosition,\n targetCenter: GraphPosition,\n): CytoscapeEdgeRouteData | undefined {\n if (!route || !isValidRoute(route)) return undefined;\n const segments = route.bendPoints.map((point) => segmentFromPoint(route.startPoint, route.endPoint, point));\n return {\n sourceEndpoint: endpointOffset(route.startPoint, sourceCenter),\n targetEndpoint: endpointOffset(route.endPoint, targetCenter),\n segmentWeights: segments.map((segment) => segment.weight).join(' '),\n segmentDistances: segments.map((segment) => segment.distance).join(' '),\n };\n}\n\nfunction elkPadding(): string {\n const padding = GRAPH_GEOMETRY.elkGroupPadding;\n return `[top=${padding.top},left=${padding.left},bottom=${padding.bottom},right=${padding.right}]`;\n}\n\nfunction appendPort(\n portsByNode: Map<GraphSceneElementId, ElkPort[]>,\n nodeId: GraphSceneElementId,\n port: ElkPort,\n): void {\n const ports = portsByNode.get(nodeId) ?? [];\n ports.push(port);\n portsByNode.set(nodeId, ports);\n}\n\nfunction collectLayoutPositions(\n node: ElkNode,\n offsetX: number,\n offsetY: number,\n positions: Map<GraphSceneElementId, GraphPosition>,\n): void {\n for (const child of node.children ?? []) {\n const x = offsetX + (child.x ?? 0);\n const y = offsetY + (child.y ?? 0);\n positions.set(child.id, {\n x: x + (child.width ?? 0) / 2,\n y: y + (child.height ?? 0) / 2,\n });\n collectLayoutPositions(child, x, y, positions);\n }\n}\n\nfunction collectLayoutOffsets(\n node: ElkNode,\n offsetX: number,\n offsetY: number,\n offsets: Map<GraphSceneElementId, GraphPosition>,\n): void {\n offsets.set(node.id, { x: offsetX, y: offsetY });\n for (const child of node.children ?? []) {\n collectLayoutOffsets(child, offsetX + (child.x ?? 0), offsetY + (child.y ?? 0), offsets);\n }\n}\n\nfunction collectEdgeRoutes(\n node: ElkNode,\n offsetX: number,\n offsetY: number,\n nodeOffsets: ReadonlyMap<GraphSceneElementId, GraphPosition>,\n routes: Map<GraphSceneElementId, GraphEdgeRoute>,\n): void {\n for (const edge of node.edges ?? []) {\n if (edge.sections?.length !== 1) continue;\n const section = edge.sections[0];\n if (!section) continue;\n // ELK may keep hierarchy edges on an ancestor while expressing their sections in container-local coordinates.\n const containerOffset = edge.container === undefined ? undefined : nodeOffsets.get(edge.container);\n const routeOffsetX = containerOffset?.x ?? offsetX;\n const routeOffsetY = containerOffset?.y ?? offsetY;\n routes.set(edge.id, {\n startPoint: offsetPoint(section.startPoint, routeOffsetX, routeOffsetY),\n bendPoints: (section.bendPoints ?? []).map((point) => offsetPoint(point, routeOffsetX, routeOffsetY)),\n endPoint: offsetPoint(section.endPoint, routeOffsetX, routeOffsetY),\n });\n }\n for (const child of node.children ?? []) {\n collectEdgeRoutes(\n child,\n offsetX + (child.x ?? 0),\n offsetY + (child.y ?? 0),\n nodeOffsets,\n routes,\n );\n }\n}\n\nfunction offsetPoint(point: GraphPosition, offsetX: number, offsetY: number): GraphPosition {\n return { x: point.x + offsetX, y: point.y + offsetY };\n}\n\nfunction isValidRoute(route: GraphEdgeRoute): boolean {\n const dx = route.endPoint.x - route.startPoint.x;\n const dy = route.endPoint.y - route.startPoint.y;\n return isFinitePoint(route.startPoint)\n && isFinitePoint(route.endPoint)\n && dx * dx + dy * dy > Number.EPSILON\n && route.bendPoints.every(isFinitePoint);\n}\n\nfunction isFinitePoint(point: GraphPosition): boolean {\n return Number.isFinite(point.x) && Number.isFinite(point.y);\n}\n\nfunction endpointOffset(point: GraphPosition, center: GraphPosition): string {\n return `${point.x - center.x}px ${point.y - center.y}px`;\n}\n\nfunction applyPositions(core: cytoscape.Core, positions: ReadonlyMap<GraphSceneElementId, GraphPosition>): void {\n core.batch(() => {\n for (const [id, position] of positions) {\n const node = core.getElementById(id);\n if (node.nonempty() && node.isNode() && !node.isParent()) node.position(position);\n }\n });\n}\n\nfunction segmentFromPoint(source: GraphPosition, target: GraphPosition, point: GraphPosition) {\n const dx = target.x - source.x;\n const dy = target.y - source.y;\n const lengthSquared = dx * dx + dy * dy;\n if (lengthSquared === 0) return { weight: 0.5, distance: 0 };\n const weight = ((point.x - source.x) * dx + (point.y - source.y) * dy) / lengthSquared;\n const projectedX = source.x + weight * dx;\n const projectedY = source.y + weight * dy;\n const length = Math.sqrt(lengthSquared);\n const distance = ((point.x - projectedX) * -dy + (point.y - projectedY) * dx) / length;\n return { weight, distance };\n}\n"]}
|
|
1
|
+
{"version":3,"file":"panelGraphLayout.js","sourceRoot":"","sources":["../src/panelGraphLayout.ts"],"names":[],"mappings":"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","sourcesContent":["import { GRAPH_VISUAL_THEME, type GraphVisualTheme } from './panelVisualTheme.ts';\nimport type cytoscape from 'cytoscape';\nimport type { ELK, ElkExtendedEdge, ElkNode, ElkPort } from 'elkjs/lib/elk-api';\n\nimport type { GraphScene, GraphSceneElementId, GraphSceneNode } from './panelGraphScene.ts';\nimport { expandedGroupLabelMaxWidth, GRAPH_GEOMETRY, nodeDimensions } from './panelGraphVisuals.ts';\n\nexport type GraphPosition = { readonly x: number; readonly y: number };\nexport type GraphEdgeRoute = {\n readonly startPoint: GraphPosition;\n readonly bendPoints: readonly GraphPosition[];\n readonly endPoint: GraphPosition;\n};\nexport type GraphLayoutResult = {\n readonly positions: ReadonlyMap<GraphSceneElementId, GraphPosition>;\n readonly routes: ReadonlyMap<GraphSceneElementId, GraphEdgeRoute>;\n};\n\nexport type CytoscapeEdgeRouteData = {\n readonly sourceEndpoint: string;\n readonly targetEndpoint: string;\n readonly segmentWeights: string;\n readonly segmentDistances: string;\n};\n\nexport async function layoutGraphScene(elk: ELK, scene: GraphScene, theme: GraphVisualTheme = GRAPH_VISUAL_THEME): Promise<GraphLayoutResult> {\n const graph = createElkLayoutGraph(scene, theme);\n const layout = await elk.layout(graph);\n const positions = new Map<GraphSceneElementId, GraphPosition>();\n collectLayoutPositions(layout, 0, 0, positions);\n const nodeOffsets = new Map<GraphSceneElementId, GraphPosition>();\n collectLayoutOffsets(layout, 0, 0, nodeOffsets);\n const routes = new Map<GraphSceneElementId, GraphEdgeRoute>();\n collectEdgeRoutes(layout, 0, 0, nodeOffsets, routes);\n return { positions, routes };\n}\n\nfunction usesCenterPorts(node: GraphSceneNode): boolean {\n return node.kind === 'resource' || node.kind === 'root'\n || (node.kind === 'pass' && node.passKind === 'external-submission');\n}\n\nexport function createElkLayoutGraph(scene: GraphScene, theme: GraphVisualTheme = GRAPH_VISUAL_THEME): ElkNode {\n const childrenByParent = new Map<GraphSceneElementId | undefined, GraphSceneNode[]>();\n const portsByNode = new Map<GraphSceneElementId, ElkPort[]>();\n const nodesById = new Map(scene.nodes.map((node) => [node.id, node]));\n const boundaryPort = (id: string, source: boolean) => {\n const node = nodesById.get(id)!;\n if (!usesCenterPorts(node)) return {};\n const dimensions = nodeDimensions(node, theme);\n return { x: source ? dimensions.width : 0, y: dimensions.height / 2 };\n };\n const elkEdges = scene.edges.map((edge): ElkExtendedEdge => {\n const sourcePortId = `${edge.id}:source`;\n const targetPortId = `${edge.id}:target`;\n appendPort(portsByNode, edge.from, {\n id: sourcePortId,\n ...boundaryPort(edge.from, true),\n width: 1,\n height: 1,\n layoutOptions: { 'elk.port.side': 'EAST' },\n });\n appendPort(portsByNode, edge.to, {\n id: targetPortId,\n ...boundaryPort(edge.to, false),\n width: 1,\n height: 1,\n layoutOptions: { 'elk.port.side': 'WEST' },\n });\n return {\n id: edge.id,\n sources: [sourcePortId],\n targets: [targetPortId],\n };\n });\n for (const node of scene.nodes) {\n const children = childrenByParent.get(node.parentId) ?? [];\n children.push(node);\n childrenByParent.set(node.parentId, children);\n }\n const createNode = (node: GraphSceneNode): ElkNode => {\n const children = childrenByParent.get(node.id)?.map(createNode);\n const dimensions = nodeDimensions(node, theme);\n return {\n id: node.id,\n width: dimensions.width,\n height: dimensions.height,\n children,\n ports: portsByNode.get(node.id),\n layoutOptions: children?.length ? {\n 'elk.algorithm': 'layered',\n 'elk.direction': 'RIGHT',\n 'elk.edgeRouting': 'ORTHOGONAL',\n 'elk.hierarchyHandling': 'INCLUDE_CHILDREN',\n 'elk.portConstraints': 'FIXED_SIDE',\n 'elk.layered.mergeEdges': 'false',\n 'elk.layered.mergeHierarchyEdges': 'false',\n 'elk.padding': elkPadding(),\n 'elk.spacing.nodeNode': '36',\n 'elk.layered.spacing.nodeNodeBetweenLayers': '72',\n 'elk.spacing.edgeEdge': '10',\n 'elk.layered.spacing.edgeEdgeBetweenLayers': '10',\n } : {\n 'elk.portConstraints': usesCenterPorts(node) ? 'FIXED_POS' : 'FIXED_SIDE',\n },\n };\n };\n return {\n id: 'root',\n children: (childrenByParent.get(undefined) ?? []).map(createNode),\n edges: elkEdges,\n layoutOptions: {\n 'elk.algorithm': 'layered',\n 'elk.direction': 'RIGHT',\n 'elk.edgeRouting': 'ORTHOGONAL',\n 'elk.hierarchyHandling': 'INCLUDE_CHILDREN',\n 'elk.layered.mergeEdges': 'false',\n 'elk.layered.mergeHierarchyEdges': 'false',\n 'elk.spacing.nodeNode': '42',\n 'elk.layered.spacing.nodeNodeBetweenLayers': '88',\n 'elk.spacing.edgeNode': '20',\n 'elk.spacing.edgeEdge': '10',\n 'elk.layered.spacing.edgeEdgeBetweenLayers': '10',\n 'elk.layered.considerModelOrder.strategy': 'NODES_AND_EDGES',\n },\n };\n}\n\nexport function applyGraphLayout(core: cytoscape.Core, scene: GraphScene, layout: GraphLayoutResult): void {\n applyPositions(core, layout.positions);\n core.batch(() => {\n for (const edge of scene.edges) {\n const route = layout.routes.get(edge.id);\n const cytoscapeEdge = core.getElementById(edge.id);\n if (cytoscapeEdge.empty()) continue;\n const sourceNode = core.getElementById(edge.from);\n const targetNode = core.getElementById(edge.to);\n const routeData = sourceNode.nonempty() && targetNode.nonempty()\n ? createCytoscapeEdgeRouteData(route, sourceNode.position(), targetNode.position())\n : undefined;\n cytoscapeEdge\n .removeClass('elk-route elk-segments')\n .removeData('sourceEndpoint', 'targetEndpoint', 'segmentWeights', 'segmentDistances');\n if (!routeData) continue;\n cytoscapeEdge.data(routeData).addClass('elk-route');\n if (route!.bendPoints.length > 0) cytoscapeEdge.addClass('elk-segments');\n }\n });\n}\n\nexport function syncExpandedGroupLabelGeometry(core: cytoscape.Core): void {\n const groups = core.nodes('node[kind = \"group\"][collapsed = 0]');\n for (let iteration = 0; iteration < 2; iteration++) {\n const updates = groups.map((node) => ({\n node,\n labelMaxWidth: expandedGroupLabelMaxWidth(node.outerWidth()),\n }));\n core.batch(() => {\n for (const update of updates) update.node.data('labelMaxWidth', update.labelMaxWidth);\n });\n }\n}\n\nexport function createCytoscapeEdgeRouteData(\n route: GraphEdgeRoute | undefined,\n sourceCenter: GraphPosition,\n targetCenter: GraphPosition,\n): CytoscapeEdgeRouteData | undefined {\n if (!route || !isValidRoute(route)) return undefined;\n const segments = route.bendPoints.map((point) => segmentFromPoint(route.startPoint, route.endPoint, point));\n return {\n sourceEndpoint: endpointOffset(route.startPoint, sourceCenter),\n targetEndpoint: endpointOffset(route.endPoint, targetCenter),\n segmentWeights: segments.map((segment) => segment.weight).join(' '),\n segmentDistances: segments.map((segment) => segment.distance).join(' '),\n };\n}\n\nfunction elkPadding(): string {\n const padding = GRAPH_GEOMETRY.elkGroupPadding;\n return `[top=${padding.top},left=${padding.left},bottom=${padding.bottom},right=${padding.right}]`;\n}\n\nfunction appendPort(\n portsByNode: Map<GraphSceneElementId, ElkPort[]>,\n nodeId: GraphSceneElementId,\n port: ElkPort,\n): void {\n const ports = portsByNode.get(nodeId) ?? [];\n ports.push(port);\n portsByNode.set(nodeId, ports);\n}\n\nfunction collectLayoutPositions(\n node: ElkNode,\n offsetX: number,\n offsetY: number,\n positions: Map<GraphSceneElementId, GraphPosition>,\n): void {\n for (const child of node.children ?? []) {\n const x = offsetX + (child.x ?? 0);\n const y = offsetY + (child.y ?? 0);\n positions.set(child.id, {\n x: x + (child.width ?? 0) / 2,\n y: y + (child.height ?? 0) / 2,\n });\n collectLayoutPositions(child, x, y, positions);\n }\n}\n\nfunction collectLayoutOffsets(\n node: ElkNode,\n offsetX: number,\n offsetY: number,\n offsets: Map<GraphSceneElementId, GraphPosition>,\n): void {\n offsets.set(node.id, { x: offsetX, y: offsetY });\n for (const child of node.children ?? []) {\n collectLayoutOffsets(child, offsetX + (child.x ?? 0), offsetY + (child.y ?? 0), offsets);\n }\n}\n\nfunction collectEdgeRoutes(\n node: ElkNode,\n offsetX: number,\n offsetY: number,\n nodeOffsets: ReadonlyMap<GraphSceneElementId, GraphPosition>,\n routes: Map<GraphSceneElementId, GraphEdgeRoute>,\n): void {\n for (const edge of node.edges ?? []) {\n if (edge.sections?.length !== 1) continue;\n const section = edge.sections[0];\n if (!section) continue;\n // ELK may keep hierarchy edges on an ancestor while expressing their sections in container-local coordinates.\n const containerOffset = edge.container === undefined ? undefined : nodeOffsets.get(edge.container);\n const routeOffsetX = containerOffset?.x ?? offsetX;\n const routeOffsetY = containerOffset?.y ?? offsetY;\n routes.set(edge.id, {\n startPoint: offsetPoint(section.startPoint, routeOffsetX, routeOffsetY),\n bendPoints: (section.bendPoints ?? []).map((point) => offsetPoint(point, routeOffsetX, routeOffsetY)),\n endPoint: offsetPoint(section.endPoint, routeOffsetX, routeOffsetY),\n });\n }\n for (const child of node.children ?? []) {\n collectEdgeRoutes(\n child,\n offsetX + (child.x ?? 0),\n offsetY + (child.y ?? 0),\n nodeOffsets,\n routes,\n );\n }\n}\n\nfunction offsetPoint(point: GraphPosition, offsetX: number, offsetY: number): GraphPosition {\n return { x: point.x + offsetX, y: point.y + offsetY };\n}\n\nfunction isValidRoute(route: GraphEdgeRoute): boolean {\n const dx = route.endPoint.x - route.startPoint.x;\n const dy = route.endPoint.y - route.startPoint.y;\n return isFinitePoint(route.startPoint)\n && isFinitePoint(route.endPoint)\n && dx * dx + dy * dy > Number.EPSILON\n && route.bendPoints.every(isFinitePoint);\n}\n\nfunction isFinitePoint(point: GraphPosition): boolean {\n return Number.isFinite(point.x) && Number.isFinite(point.y);\n}\n\nfunction endpointOffset(point: GraphPosition, center: GraphPosition): string {\n return `${point.x - center.x}px ${point.y - center.y}px`;\n}\n\nfunction applyPositions(core: cytoscape.Core, positions: ReadonlyMap<GraphSceneElementId, GraphPosition>): void {\n core.batch(() => {\n for (const [id, position] of positions) {\n const node = core.getElementById(id);\n if (node.nonempty() && node.isNode() && !node.isParent()) node.position(position);\n }\n });\n}\n\nfunction segmentFromPoint(source: GraphPosition, target: GraphPosition, point: GraphPosition) {\n const dx = target.x - source.x;\n const dy = target.y - source.y;\n const lengthSquared = dx * dx + dy * dy;\n if (lengthSquared === 0) return { weight: 0.5, distance: 0 };\n const weight = ((point.x - source.x) * dx + (point.y - source.y) * dy) / lengthSquared;\n const projectedX = source.x + weight * dx;\n const projectedY = source.y + weight * dy;\n const length = Math.sqrt(lengthSquared);\n const distance = ((point.x - projectedX) * -dy + (point.y - projectedY) * dx) / length;\n return { weight, distance };\n}\n"]}
|
|
@@ -1,20 +1,30 @@
|
|
|
1
|
+
import type { GraphVisualTheme } from './panelVisualTheme.ts';
|
|
1
2
|
import type { GraphScene, GraphSceneElementId } from './panelGraphScene.ts';
|
|
2
3
|
import type { Selection } from './panelTypes.ts';
|
|
3
4
|
export type GraphRenderRequest = {
|
|
5
|
+
readonly theme?: GraphVisualTheme;
|
|
6
|
+
readonly onVisible?: () => void;
|
|
4
7
|
readonly scene: GraphScene;
|
|
5
8
|
readonly selected: Selection | undefined;
|
|
6
9
|
readonly hovered: Selection | undefined;
|
|
7
10
|
readonly fit: boolean;
|
|
8
11
|
readonly anchorElementId?: GraphSceneElementId;
|
|
12
|
+
readonly reveal?: {
|
|
13
|
+
readonly selection: Selection;
|
|
14
|
+
readonly revision: number;
|
|
15
|
+
};
|
|
16
|
+
readonly captureRevision?: number;
|
|
9
17
|
readonly onSelect: (selection: Selection) => void;
|
|
10
18
|
readonly onHover: (selection: Selection | undefined) => void;
|
|
11
19
|
readonly onToggleGroup: (pathKey: string) => void;
|
|
12
20
|
};
|
|
13
21
|
export interface GraphRenderer {
|
|
14
22
|
render(request: GraphRenderRequest): void;
|
|
23
|
+
setTheme?(theme: GraphVisualTheme): void;
|
|
15
24
|
resize(): void;
|
|
16
25
|
fit(): void;
|
|
17
26
|
relayout(): void;
|
|
27
|
+
cancelReveal?(): void;
|
|
18
28
|
destroy(): void;
|
|
19
29
|
}
|
|
20
30
|
//# sourceMappingURL=panelGraphRenderer.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"panelGraphRenderer.d.ts","sourceRoot":"","sources":["../src/panelGraphRenderer.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAC;AAC5E,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAEjD,MAAM,MAAM,kBAAkB,GAAG;IAC7B,QAAQ,CAAC,KAAK,EAAE,UAAU,CAAC;IAC3B,QAAQ,CAAC,QAAQ,EAAE,SAAS,GAAG,SAAS,CAAC;IACzC,QAAQ,CAAC,OAAO,EAAE,SAAS,GAAG,SAAS,CAAC;IACxC,QAAQ,CAAC,GAAG,EAAE,OAAO,CAAC;IACtB,QAAQ,CAAC,eAAe,CAAC,EAAE,mBAAmB,CAAC;IAC/C,QAAQ,CAAC,QAAQ,EAAE,CAAC,SAAS,EAAE,SAAS,KAAK,IAAI,CAAC;IAClD,QAAQ,CAAC,OAAO,EAAE,CAAC,SAAS,EAAE,SAAS,GAAG,SAAS,KAAK,IAAI,CAAC;IAC7D,QAAQ,CAAC,aAAa,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;CACrD,CAAC;AAEF,MAAM,WAAW,aAAa;IAC1B,MAAM,CAAC,OAAO,EAAE,kBAAkB,GAAG,IAAI,CAAC;IAC1C,MAAM,IAAI,IAAI,CAAC;IACf,GAAG,IAAI,IAAI,CAAC;IACZ,QAAQ,IAAI,IAAI,CAAC;IACjB,OAAO,IAAI,IAAI,CAAC;CACnB"}
|
|
1
|
+
{"version":3,"file":"panelGraphRenderer.d.ts","sourceRoot":"","sources":["../src/panelGraphRenderer.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAC9D,OAAO,KAAK,EAAE,UAAU,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAC;AAC5E,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAEjD,MAAM,MAAM,kBAAkB,GAAG;IAC7B,QAAQ,CAAC,KAAK,CAAC,EAAE,gBAAgB,CAAC;IAClC,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,IAAI,CAAC;IAChC,QAAQ,CAAC,KAAK,EAAE,UAAU,CAAC;IAC3B,QAAQ,CAAC,QAAQ,EAAE,SAAS,GAAG,SAAS,CAAC;IACzC,QAAQ,CAAC,OAAO,EAAE,SAAS,GAAG,SAAS,CAAC;IACxC,QAAQ,CAAC,GAAG,EAAE,OAAO,CAAC;IACtB,QAAQ,CAAC,eAAe,CAAC,EAAE,mBAAmB,CAAC;IAC/C,QAAQ,CAAC,MAAM,CAAC,EAAE;QAAE,QAAQ,CAAC,SAAS,EAAE,SAAS,CAAC;QAAC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAA;KAAE,CAAC;IAC/E,QAAQ,CAAC,eAAe,CAAC,EAAE,MAAM,CAAC;IAClC,QAAQ,CAAC,QAAQ,EAAE,CAAC,SAAS,EAAE,SAAS,KAAK,IAAI,CAAC;IAClD,QAAQ,CAAC,OAAO,EAAE,CAAC,SAAS,EAAE,SAAS,GAAG,SAAS,KAAK,IAAI,CAAC;IAC7D,QAAQ,CAAC,aAAa,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;CACrD,CAAC;AAEF,MAAM,WAAW,aAAa;IAC1B,MAAM,CAAC,OAAO,EAAE,kBAAkB,GAAG,IAAI,CAAC;IAC1C,QAAQ,CAAC,CAAC,KAAK,EAAE,gBAAgB,GAAG,IAAI,CAAC;IACzC,MAAM,IAAI,IAAI,CAAC;IACf,GAAG,IAAI,IAAI,CAAC;IACZ,QAAQ,IAAI,IAAI,CAAC;IACjB,YAAY,CAAC,IAAI,IAAI,CAAC;IACtB,OAAO,IAAI,IAAI,CAAC;CACnB"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"panelGraphRenderer.js","sourceRoot":"","sources":["../src/panelGraphRenderer.ts"],"names":[],"mappings":"","sourcesContent":["import type { GraphScene, GraphSceneElementId } from './panelGraphScene.ts';\nimport type { Selection } from './panelTypes.ts';\n\nexport type GraphRenderRequest = {\n readonly scene: GraphScene;\n readonly selected: Selection | undefined;\n readonly hovered: Selection | undefined;\n readonly fit: boolean;\n readonly anchorElementId?: GraphSceneElementId;\n readonly onSelect: (selection: Selection) => void;\n readonly onHover: (selection: Selection | undefined) => void;\n readonly onToggleGroup: (pathKey: string) => void;\n};\n\nexport interface GraphRenderer {\n render(request: GraphRenderRequest): void;\n resize(): void;\n fit(): void;\n relayout(): void;\n destroy(): void;\n}\n"]}
|
|
1
|
+
{"version":3,"file":"panelGraphRenderer.js","sourceRoot":"","sources":["../src/panelGraphRenderer.ts"],"names":[],"mappings":"","sourcesContent":["import type { GraphVisualTheme } from './panelVisualTheme.ts';\nimport type { GraphScene, GraphSceneElementId } from './panelGraphScene.ts';\nimport type { Selection } from './panelTypes.ts';\n\nexport type GraphRenderRequest = {\n readonly theme?: GraphVisualTheme;\n readonly onVisible?: () => void;\n readonly scene: GraphScene;\n readonly selected: Selection | undefined;\n readonly hovered: Selection | undefined;\n readonly fit: boolean;\n readonly anchorElementId?: GraphSceneElementId;\n readonly reveal?: { readonly selection: Selection; readonly revision: number };\n readonly captureRevision?: number;\n readonly onSelect: (selection: Selection) => void;\n readonly onHover: (selection: Selection | undefined) => void;\n readonly onToggleGroup: (pathKey: string) => void;\n};\n\nexport interface GraphRenderer {\n render(request: GraphRenderRequest): void;\n setTheme?(theme: GraphVisualTheme): void;\n resize(): void;\n fit(): void;\n relayout(): void;\n cancelReveal?(): void;\n destroy(): void;\n}\n"]}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import type {
|
|
2
|
-
import type {
|
|
1
|
+
import type { FrameGraphDebugEdge, FrameGraphDebugNode, FrameGraphDebugResource, FrameGraphDebugViewModel } from './debugCaptureModel.ts';
|
|
2
|
+
import type { GraphFlowRelation, Selection } from './panelTypes.ts';
|
|
3
3
|
export type GraphSceneElementId = string;
|
|
4
4
|
type GraphSceneNodeBase = {
|
|
5
5
|
readonly id: GraphSceneElementId;
|
|
@@ -15,13 +15,6 @@ export type PassSceneNode = GraphSceneNodeBase & {
|
|
|
15
15
|
readonly executionSegmentIndex?: number;
|
|
16
16
|
readonly gpuDurationMicros?: number;
|
|
17
17
|
};
|
|
18
|
-
export type CulledPassSceneNode = GraphSceneNodeBase & {
|
|
19
|
-
readonly kind: 'culled-pass';
|
|
20
|
-
readonly culledIndex: number;
|
|
21
|
-
readonly nodeId: string;
|
|
22
|
-
readonly passKind: FrameGraphDebugNode['kind'];
|
|
23
|
-
readonly reason: string;
|
|
24
|
-
};
|
|
25
18
|
export type GroupSceneNode = GraphSceneNodeBase & {
|
|
26
19
|
readonly kind: 'group';
|
|
27
20
|
readonly groupId: string;
|
|
@@ -41,29 +34,26 @@ export type ResourceSceneNode = GraphSceneNodeBase & {
|
|
|
41
34
|
readonly resourceId: string;
|
|
42
35
|
readonly resourceKind: FrameGraphDebugResource['kind'];
|
|
43
36
|
};
|
|
44
|
-
export type
|
|
37
|
+
export type RootSceneNode = GraphSceneNodeBase & {
|
|
38
|
+
readonly kind: 'root';
|
|
39
|
+
readonly rootKey: string;
|
|
40
|
+
readonly resourceId: string;
|
|
41
|
+
readonly resourceKind: FrameGraphDebugResource['kind'];
|
|
42
|
+
};
|
|
43
|
+
export type GraphSceneNode = PassSceneNode | GroupSceneNode | ResourceSceneNode | RootSceneNode;
|
|
45
44
|
type GraphSceneEdgeBase = {
|
|
46
45
|
readonly id: GraphSceneElementId;
|
|
47
46
|
readonly from: GraphSceneElementId;
|
|
48
47
|
readonly to: GraphSceneElementId;
|
|
49
|
-
readonly label?: string;
|
|
50
48
|
readonly title: string;
|
|
51
49
|
readonly resourceId: string;
|
|
52
50
|
};
|
|
53
|
-
export type
|
|
54
|
-
readonly kind: '
|
|
55
|
-
readonly
|
|
51
|
+
export type GraphSceneEdge = GraphSceneEdgeBase & {
|
|
52
|
+
readonly kind: 'flow' | 'ordering';
|
|
53
|
+
readonly relations: readonly GraphFlowRelation[];
|
|
56
54
|
readonly underlyingDependencies: readonly FrameGraphDebugEdge[];
|
|
57
55
|
readonly underlyingDependencyCount: number;
|
|
58
56
|
};
|
|
59
|
-
export type AccessSceneEdge = GraphSceneEdgeBase & {
|
|
60
|
-
readonly kind: 'access';
|
|
61
|
-
readonly accessId: string;
|
|
62
|
-
readonly accessMode: FrameGraphDebugAccessEdge['mode'];
|
|
63
|
-
readonly access: FrameGraphDebugAccessEdge['access'];
|
|
64
|
-
readonly dashed: boolean;
|
|
65
|
-
};
|
|
66
|
-
export type GraphSceneEdge = DependencySceneEdge | AccessSceneEdge;
|
|
67
57
|
export type GraphSemanticReferences = {
|
|
68
58
|
readonly nodeIds: readonly string[];
|
|
69
59
|
readonly groupPathKeys: readonly string[];
|
|
@@ -74,11 +64,11 @@ export type GraphSemanticReferences = {
|
|
|
74
64
|
export type GraphSceneInteractionIndex = {
|
|
75
65
|
readonly selectionByElementId: ReadonlyMap<GraphSceneElementId, Selection>;
|
|
76
66
|
readonly primaryElementIdsBySelection: ReadonlyMap<string, readonly GraphSceneElementId[]>;
|
|
77
|
-
readonly
|
|
67
|
+
readonly hoverElementIdsBySelection: ReadonlyMap<string, readonly GraphSceneElementId[]>;
|
|
68
|
+
readonly resourceElementIdsByResourceId: ReadonlyMap<string, readonly GraphSceneElementId[]>;
|
|
78
69
|
readonly semanticReferencesByElementId: ReadonlyMap<GraphSceneElementId, GraphSemanticReferences>;
|
|
79
70
|
};
|
|
80
71
|
export type GraphScene = {
|
|
81
|
-
readonly mode: GraphViewMode;
|
|
82
72
|
readonly nodes: readonly GraphSceneNode[];
|
|
83
73
|
readonly edges: readonly GraphSceneEdge[];
|
|
84
74
|
readonly topologyKey: string;
|
|
@@ -86,13 +76,12 @@ export type GraphScene = {
|
|
|
86
76
|
readonly interaction: GraphSceneInteractionIndex;
|
|
87
77
|
};
|
|
88
78
|
export type CreateGraphSceneOptions = {
|
|
89
|
-
readonly mode: GraphViewMode;
|
|
90
79
|
readonly groupsEnabled: boolean;
|
|
80
|
+
readonly showResourceDeclarations?: boolean;
|
|
91
81
|
readonly expandedGroupPaths: ReadonlySet<string>;
|
|
92
82
|
};
|
|
93
83
|
export declare function createGraphScene(snapshot: FrameGraphDebugViewModel, options: CreateGraphSceneOptions): GraphScene;
|
|
94
84
|
export declare function graphGroupElementId(pathKey: string): GraphSceneElementId;
|
|
95
85
|
export declare function selectionKey(selection: Selection): string;
|
|
96
|
-
export declare function indexAccessesByResourceId(accesses: readonly FrameGraphDebugAccessEdge[]): ReadonlyMap<string, readonly FrameGraphDebugAccessEdge[]>;
|
|
97
86
|
export {};
|
|
98
87
|
//# sourceMappingURL=panelGraphScene.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"panelGraphScene.d.ts","sourceRoot":"","sources":["../src/panelGraphScene.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"panelGraphScene.d.ts","sourceRoot":"","sources":["../src/panelGraphScene.ts"],"names":[],"mappings":"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"}
|