@principal-ai/subsystems-react 0.17.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/README.md +93 -0
- package/dist/components/ConfigurationSelector.d.ts +35 -0
- package/dist/components/ConfigurationSelector.d.ts.map +1 -0
- package/dist/components/ConfigurationSelector.js +63 -0
- package/dist/components/ConfigurationSelector.js.map +1 -0
- package/dist/components/GraphRenderer.d.ts +295 -0
- package/dist/components/GraphRenderer.d.ts.map +1 -0
- package/dist/components/GraphRenderer.js +2008 -0
- package/dist/components/GraphRenderer.js.map +1 -0
- package/dist/components/MultiCanvasRenderer.d.ts +75 -0
- package/dist/components/MultiCanvasRenderer.d.ts.map +1 -0
- package/dist/components/MultiCanvasRenderer.js +203 -0
- package/dist/components/MultiCanvasRenderer.js.map +1 -0
- package/dist/components/NodeTooltip.d.ts +24 -0
- package/dist/components/NodeTooltip.d.ts.map +1 -0
- package/dist/components/NodeTooltip.js +160 -0
- package/dist/components/NodeTooltip.js.map +1 -0
- package/dist/components/SelectionSidebar.d.ts +18 -0
- package/dist/components/SelectionSidebar.d.ts.map +1 -0
- package/dist/components/SelectionSidebar.js +190 -0
- package/dist/components/SelectionSidebar.js.map +1 -0
- package/dist/components/SequenceDiagramRenderer.d.ts +77 -0
- package/dist/components/SequenceDiagramRenderer.d.ts.map +1 -0
- package/dist/components/SequenceDiagramRenderer.js +604 -0
- package/dist/components/SequenceDiagramRenderer.js.map +1 -0
- package/dist/components/WorkflowSequenceDiagram.d.ts +63 -0
- package/dist/components/WorkflowSequenceDiagram.d.ts.map +1 -0
- package/dist/components/WorkflowSequenceDiagram.js +147 -0
- package/dist/components/WorkflowSequenceDiagram.js.map +1 -0
- package/dist/components/dashboard/DashboardRenderer.d.ts +10 -0
- package/dist/components/dashboard/DashboardRenderer.d.ts.map +1 -0
- package/dist/components/dashboard/DashboardRenderer.js +179 -0
- package/dist/components/dashboard/DashboardRenderer.js.map +1 -0
- package/dist/components/dashboard/MetricPanel.d.ts +10 -0
- package/dist/components/dashboard/MetricPanel.d.ts.map +1 -0
- package/dist/components/dashboard/MetricPanel.js +103 -0
- package/dist/components/dashboard/MetricPanel.js.map +1 -0
- package/dist/components/dashboard/MockDataProvider.d.ts +30 -0
- package/dist/components/dashboard/MockDataProvider.d.ts.map +1 -0
- package/dist/components/dashboard/MockDataProvider.js +270 -0
- package/dist/components/dashboard/MockDataProvider.js.map +1 -0
- package/dist/components/dashboard/components/BarChart.d.ts +10 -0
- package/dist/components/dashboard/components/BarChart.d.ts.map +1 -0
- package/dist/components/dashboard/components/BarChart.js +167 -0
- package/dist/components/dashboard/components/BarChart.js.map +1 -0
- package/dist/components/dashboard/components/LineChart.d.ts +10 -0
- package/dist/components/dashboard/components/LineChart.d.ts.map +1 -0
- package/dist/components/dashboard/components/LineChart.js +141 -0
- package/dist/components/dashboard/components/LineChart.js.map +1 -0
- package/dist/components/dashboard/components/MetricCard.d.ts +9 -0
- package/dist/components/dashboard/components/MetricCard.d.ts.map +1 -0
- package/dist/components/dashboard/components/MetricCard.js +163 -0
- package/dist/components/dashboard/components/MetricCard.js.map +1 -0
- package/dist/components/dashboard/components/SourceLink.d.ts +9 -0
- package/dist/components/dashboard/components/SourceLink.d.ts.map +1 -0
- package/dist/components/dashboard/components/SourceLink.js +39 -0
- package/dist/components/dashboard/components/SourceLink.js.map +1 -0
- package/dist/components/dashboard/components/TimeRangeSelector.d.ts +9 -0
- package/dist/components/dashboard/components/TimeRangeSelector.d.ts.map +1 -0
- package/dist/components/dashboard/components/TimeRangeSelector.js +167 -0
- package/dist/components/dashboard/components/TimeRangeSelector.js.map +1 -0
- package/dist/components/dashboard/components/index.d.ts +6 -0
- package/dist/components/dashboard/components/index.d.ts.map +1 -0
- package/dist/components/dashboard/components/index.js +6 -0
- package/dist/components/dashboard/components/index.js.map +1 -0
- package/dist/components/dashboard/index.d.ts +6 -0
- package/dist/components/dashboard/index.d.ts.map +1 -0
- package/dist/components/dashboard/index.js +8 -0
- package/dist/components/dashboard/index.js.map +1 -0
- package/dist/components/dashboard/types.d.ts +74 -0
- package/dist/components/dashboard/types.d.ts.map +1 -0
- package/dist/components/dashboard/types.js +8 -0
- package/dist/components/dashboard/types.js.map +1 -0
- package/dist/components/session-events/SessionEventFeed.d.ts +34 -0
- package/dist/components/session-events/SessionEventFeed.d.ts.map +1 -0
- package/dist/components/session-events/SessionEventFeed.js +1196 -0
- package/dist/components/session-events/SessionEventFeed.js.map +1 -0
- package/dist/components/session-events/index.d.ts +7 -0
- package/dist/components/session-events/index.d.ts.map +1 -0
- package/dist/components/session-events/index.js +6 -0
- package/dist/components/session-events/index.js.map +1 -0
- package/dist/components/state-view/PipelineView.d.ts +14 -0
- package/dist/components/state-view/PipelineView.d.ts.map +1 -0
- package/dist/components/state-view/PipelineView.js +195 -0
- package/dist/components/state-view/PipelineView.js.map +1 -0
- package/dist/components/state-view/index.d.ts +14 -0
- package/dist/components/state-view/index.d.ts.map +1 -0
- package/dist/components/state-view/index.js +12 -0
- package/dist/components/state-view/index.js.map +1 -0
- package/dist/components/state-view/types.d.ts +188 -0
- package/dist/components/state-view/types.d.ts.map +1 -0
- package/dist/components/state-view/types.js +10 -0
- package/dist/components/state-view/types.js.map +1 -0
- package/dist/components/state-view/useStateView.d.ts +32 -0
- package/dist/components/state-view/useStateView.d.ts.map +1 -0
- package/dist/components/state-view/useStateView.js +129 -0
- package/dist/components/state-view/useStateView.js.map +1 -0
- package/dist/contexts/GraphEditContext.d.ts +20 -0
- package/dist/contexts/GraphEditContext.d.ts.map +1 -0
- package/dist/contexts/GraphEditContext.js +8 -0
- package/dist/contexts/GraphEditContext.js.map +1 -0
- package/dist/contexts/TooltipPortalContext.d.ts +8 -0
- package/dist/contexts/TooltipPortalContext.d.ts.map +1 -0
- package/dist/contexts/TooltipPortalContext.js +8 -0
- package/dist/contexts/TooltipPortalContext.js.map +1 -0
- package/dist/edges/CustomEdge.d.ts +24 -0
- package/dist/edges/CustomEdge.d.ts.map +1 -0
- package/dist/edges/CustomEdge.js +222 -0
- package/dist/edges/CustomEdge.js.map +1 -0
- package/dist/edges/GenericEdge.d.ts +18 -0
- package/dist/edges/GenericEdge.d.ts.map +1 -0
- package/dist/edges/GenericEdge.js +10 -0
- package/dist/edges/GenericEdge.js.map +1 -0
- package/dist/graphify/anchor.d.ts +28 -0
- package/dist/graphify/anchor.d.ts.map +1 -0
- package/dist/graphify/anchor.js +132 -0
- package/dist/graphify/anchor.js.map +1 -0
- package/dist/graphify/consolidated.d.ts +210 -0
- package/dist/graphify/consolidated.d.ts.map +1 -0
- package/dist/graphify/consolidated.js +11 -0
- package/dist/graphify/consolidated.js.map +1 -0
- package/dist/graphify/ids.d.ts +19 -0
- package/dist/graphify/ids.d.ts.map +1 -0
- package/dist/graphify/ids.js +46 -0
- package/dist/graphify/ids.js.map +1 -0
- package/dist/graphify/index.d.ts +18 -0
- package/dist/graphify/index.d.ts.map +1 -0
- package/dist/graphify/index.js +12 -0
- package/dist/graphify/index.js.map +1 -0
- package/dist/graphify/kind.d.ts +23 -0
- package/dist/graphify/kind.d.ts.map +1 -0
- package/dist/graphify/kind.js +77 -0
- package/dist/graphify/kind.js.map +1 -0
- package/dist/graphify/resolve.d.ts +48 -0
- package/dist/graphify/resolve.d.ts.map +1 -0
- package/dist/graphify/resolve.js +83 -0
- package/dist/graphify/resolve.js.map +1 -0
- package/dist/graphify/signature.d.ts +87 -0
- package/dist/graphify/signature.d.ts.map +1 -0
- package/dist/graphify/signature.js +276 -0
- package/dist/graphify/signature.js.map +1 -0
- package/dist/graphify/types.d.ts +141 -0
- package/dist/graphify/types.d.ts.map +1 -0
- package/dist/graphify/types.js +8 -0
- package/dist/graphify/types.js.map +1 -0
- package/dist/hooks/useElkLayout.d.ts +66 -0
- package/dist/hooks/useElkLayout.d.ts.map +1 -0
- package/dist/hooks/useElkLayout.js +136 -0
- package/dist/hooks/useElkLayout.js.map +1 -0
- package/dist/hooks/usePathBasedEvents.d.ts +42 -0
- package/dist/hooks/usePathBasedEvents.d.ts.map +1 -0
- package/dist/hooks/usePathBasedEvents.js +119 -0
- package/dist/hooks/usePathBasedEvents.js.map +1 -0
- package/dist/hooks/useSequenceLayout.d.ts +186 -0
- package/dist/hooks/useSequenceLayout.d.ts.map +1 -0
- package/dist/hooks/useSequenceLayout.js +327 -0
- package/dist/hooks/useSequenceLayout.js.map +1 -0
- package/dist/hooks/useUndoRedo.d.ts +80 -0
- package/dist/hooks/useUndoRedo.d.ts.map +1 -0
- package/dist/hooks/useUndoRedo.js +70 -0
- package/dist/hooks/useUndoRedo.js.map +1 -0
- package/dist/index.d.ts +73 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +51 -0
- package/dist/index.js.map +1 -0
- package/dist/nodes/CustomNode.d.ts +28 -0
- package/dist/nodes/CustomNode.d.ts.map +1 -0
- package/dist/nodes/CustomNode.js +820 -0
- package/dist/nodes/CustomNode.js.map +1 -0
- package/dist/nodes/GenericNode.d.ts +20 -0
- package/dist/nodes/GenericNode.d.ts.map +1 -0
- package/dist/nodes/GenericNode.js +20 -0
- package/dist/nodes/GenericNode.js.map +1 -0
- package/dist/nodes/otel/OtelBoundaryNode.d.ts +55 -0
- package/dist/nodes/otel/OtelBoundaryNode.d.ts.map +1 -0
- package/dist/nodes/otel/OtelBoundaryNode.js +81 -0
- package/dist/nodes/otel/OtelBoundaryNode.js.map +1 -0
- package/dist/nodes/otel/OtelEventNode.d.ts +59 -0
- package/dist/nodes/otel/OtelEventNode.d.ts.map +1 -0
- package/dist/nodes/otel/OtelEventNode.js +82 -0
- package/dist/nodes/otel/OtelEventNode.js.map +1 -0
- package/dist/nodes/otel/OtelResourceNode.d.ts +53 -0
- package/dist/nodes/otel/OtelResourceNode.d.ts.map +1 -0
- package/dist/nodes/otel/OtelResourceNode.js +105 -0
- package/dist/nodes/otel/OtelResourceNode.js.map +1 -0
- package/dist/nodes/otel/OtelScopeNode.d.ts +53 -0
- package/dist/nodes/otel/OtelScopeNode.d.ts.map +1 -0
- package/dist/nodes/otel/OtelScopeNode.js +81 -0
- package/dist/nodes/otel/OtelScopeNode.js.map +1 -0
- package/dist/nodes/otel/OtelSpanConventionNode.d.ts +61 -0
- package/dist/nodes/otel/OtelSpanConventionNode.d.ts.map +1 -0
- package/dist/nodes/otel/OtelSpanConventionNode.js +131 -0
- package/dist/nodes/otel/OtelSpanConventionNode.js.map +1 -0
- package/dist/nodes/otel/index.d.ts +17 -0
- package/dist/nodes/otel/index.d.ts.map +1 -0
- package/dist/nodes/otel/index.js +13 -0
- package/dist/nodes/otel/index.js.map +1 -0
- package/dist/nodes/otel/shared/NodeBadges.d.ts +10 -0
- package/dist/nodes/otel/shared/NodeBadges.d.ts.map +1 -0
- package/dist/nodes/otel/shared/NodeBadges.js +178 -0
- package/dist/nodes/otel/shared/NodeBadges.js.map +1 -0
- package/dist/nodes/otel/shared/NodeContent.d.ts +10 -0
- package/dist/nodes/otel/shared/NodeContent.d.ts.map +1 -0
- package/dist/nodes/otel/shared/NodeContent.js +96 -0
- package/dist/nodes/otel/shared/NodeContent.js.map +1 -0
- package/dist/nodes/otel/shared/index.d.ts +8 -0
- package/dist/nodes/otel/shared/index.d.ts.map +1 -0
- package/dist/nodes/otel/shared/index.js +8 -0
- package/dist/nodes/otel/shared/index.js.map +1 -0
- package/dist/nodes/otel/shared/types.d.ts +129 -0
- package/dist/nodes/otel/shared/types.d.ts.map +1 -0
- package/dist/nodes/otel/shared/types.js +5 -0
- package/dist/nodes/otel/shared/types.js.map +1 -0
- package/dist/nodes/otel/shared/useNodeBehavior.d.ts +42 -0
- package/dist/nodes/otel/shared/useNodeBehavior.d.ts.map +1 -0
- package/dist/nodes/otel/shared/useNodeBehavior.js +61 -0
- package/dist/nodes/otel/shared/useNodeBehavior.js.map +1 -0
- package/dist/pierre/PierreFileView.d.ts +17 -0
- package/dist/pierre/PierreFileView.d.ts.map +1 -0
- package/dist/pierre/PierreFileView.js +46 -0
- package/dist/pierre/PierreFileView.js.map +1 -0
- package/dist/pierre/PierreSnippetView.d.ts +28 -0
- package/dist/pierre/PierreSnippetView.d.ts.map +1 -0
- package/dist/pierre/PierreSnippetView.js +105 -0
- package/dist/pierre/PierreSnippetView.js.map +1 -0
- package/dist/pierre/PierreThroughlineCodeView.d.ts +22 -0
- package/dist/pierre/PierreThroughlineCodeView.d.ts.map +1 -0
- package/dist/pierre/PierreThroughlineCodeView.js +206 -0
- package/dist/pierre/PierreThroughlineCodeView.js.map +1 -0
- package/dist/pierre/constructColors.d.ts +24 -0
- package/dist/pierre/constructColors.d.ts.map +1 -0
- package/dist/pierre/constructColors.js +91 -0
- package/dist/pierre/constructColors.js.map +1 -0
- package/dist/pierre/index.d.ts +12 -0
- package/dist/pierre/index.d.ts.map +1 -0
- package/dist/pierre/index.js +7 -0
- package/dist/pierre/index.js.map +1 -0
- package/dist/pierre/pierreBackground.d.ts +15 -0
- package/dist/pierre/pierreBackground.d.ts.map +1 -0
- package/dist/pierre/pierreBackground.js +31 -0
- package/dist/pierre/pierreBackground.js.map +1 -0
- package/dist/pierre/pierreFileLang.d.ts +27 -0
- package/dist/pierre/pierreFileLang.d.ts.map +1 -0
- package/dist/pierre/pierreFileLang.js +52 -0
- package/dist/pierre/pierreFileLang.js.map +1 -0
- package/dist/pierre/pierreSyntaxTheme.d.ts +11 -0
- package/dist/pierre/pierreSyntaxTheme.d.ts.map +1 -0
- package/dist/pierre/pierreSyntaxTheme.js +20 -0
- package/dist/pierre/pierreSyntaxTheme.js.map +1 -0
- package/dist/pierre/scrollAnchor.d.ts +5 -0
- package/dist/pierre/scrollAnchor.d.ts.map +1 -0
- package/dist/pierre/scrollAnchor.js +9 -0
- package/dist/pierre/scrollAnchor.js.map +1 -0
- package/dist/pierre/sliceSnippet.d.ts +10 -0
- package/dist/pierre/sliceSnippet.d.ts.map +1 -0
- package/dist/pierre/sliceSnippet.js +16 -0
- package/dist/pierre/sliceSnippet.js.map +1 -0
- package/dist/pierre/syntaxTokens.d.ts +11 -0
- package/dist/pierre/syntaxTokens.d.ts.map +1 -0
- package/dist/pierre/syntaxTokens.js +51 -0
- package/dist/pierre/syntaxTokens.js.map +1 -0
- package/dist/stories/Subsystem/ComponentGraph/fixtures.d.ts +8 -0
- package/dist/stories/Subsystem/ComponentGraph/fixtures.d.ts.map +1 -0
- package/dist/stories/Subsystem/ComponentGraph/fixtures.js +116 -0
- package/dist/stories/Subsystem/ComponentGraph/fixtures.js.map +1 -0
- package/dist/subsystem/ComponentDeclaration.d.ts +87 -0
- package/dist/subsystem/ComponentDeclaration.d.ts.map +1 -0
- package/dist/subsystem/ComponentDeclaration.js +374 -0
- package/dist/subsystem/ComponentDeclaration.js.map +1 -0
- package/dist/subsystem/FileDrawer.d.ts +17 -0
- package/dist/subsystem/FileDrawer.d.ts.map +1 -0
- package/dist/subsystem/FileDrawer.js +72 -0
- package/dist/subsystem/FileDrawer.js.map +1 -0
- package/dist/subsystem/GraphLayoutCover.d.ts +20 -0
- package/dist/subsystem/GraphLayoutCover.d.ts.map +1 -0
- package/dist/subsystem/GraphLayoutCover.js +42 -0
- package/dist/subsystem/GraphLayoutCover.js.map +1 -0
- package/dist/subsystem/SubsystemComponentGraph.d.ts +96 -0
- package/dist/subsystem/SubsystemComponentGraph.d.ts.map +1 -0
- package/dist/subsystem/SubsystemComponentGraph.js +1059 -0
- package/dist/subsystem/SubsystemComponentGraph.js.map +1 -0
- package/dist/subsystem/SubsystemFileTree.d.ts +24 -0
- package/dist/subsystem/SubsystemFileTree.d.ts.map +1 -0
- package/dist/subsystem/SubsystemFileTree.js +150 -0
- package/dist/subsystem/SubsystemFileTree.js.map +1 -0
- package/dist/subsystem/declarationRef.d.ts +39 -0
- package/dist/subsystem/declarationRef.d.ts.map +1 -0
- package/dist/subsystem/declarationRef.js +32 -0
- package/dist/subsystem/declarationRef.js.map +1 -0
- package/dist/subsystem/formatDeclaration.d.ts +11 -0
- package/dist/subsystem/formatDeclaration.d.ts.map +1 -0
- package/dist/subsystem/formatDeclaration.js +146 -0
- package/dist/subsystem/formatDeclaration.js.map +1 -0
- package/dist/subsystem/model.d.ts +353 -0
- package/dist/subsystem/model.d.ts.map +1 -0
- package/dist/subsystem/model.js +503 -0
- package/dist/subsystem/model.js.map +1 -0
- package/dist/subsystem/nodes.d.ts +69 -0
- package/dist/subsystem/nodes.d.ts.map +1 -0
- package/dist/subsystem/nodes.js +289 -0
- package/dist/subsystem/nodes.js.map +1 -0
- package/dist/subsystem/paths.d.ts +63 -0
- package/dist/subsystem/paths.d.ts.map +1 -0
- package/dist/subsystem/paths.js +86 -0
- package/dist/subsystem/paths.js.map +1 -0
- package/dist/subsystem/tokenizeComponent.d.ts +20 -0
- package/dist/subsystem/tokenizeComponent.d.ts.map +1 -0
- package/dist/subsystem/tokenizeComponent.js +56 -0
- package/dist/subsystem/tokenizeComponent.js.map +1 -0
- package/dist/subsystem/tokenizeFormatted.d.ts +12 -0
- package/dist/subsystem/tokenizeFormatted.d.ts.map +1 -0
- package/dist/subsystem/tokenizeFormatted.js +13 -0
- package/dist/subsystem/tokenizeFormatted.js.map +1 -0
- package/dist/utils/animationMapping.d.ts +53 -0
- package/dist/utils/animationMapping.d.ts.map +1 -0
- package/dist/utils/animationMapping.js +126 -0
- package/dist/utils/animationMapping.js.map +1 -0
- package/dist/utils/canvasBounds.d.ts +50 -0
- package/dist/utils/canvasBounds.d.ts.map +1 -0
- package/dist/utils/canvasBounds.js +88 -0
- package/dist/utils/canvasBounds.js.map +1 -0
- package/dist/utils/elkLayout.d.ts +137 -0
- package/dist/utils/elkLayout.d.ts.map +1 -0
- package/dist/utils/elkLayout.js +596 -0
- package/dist/utils/elkLayout.js.map +1 -0
- package/dist/utils/graphConverter.d.ts +18 -0
- package/dist/utils/graphConverter.d.ts.map +1 -0
- package/dist/utils/graphConverter.js +114 -0
- package/dist/utils/graphConverter.js.map +1 -0
- package/dist/utils/iconResolver.d.ts +29 -0
- package/dist/utils/iconResolver.d.ts.map +1 -0
- package/dist/utils/iconResolver.js +30 -0
- package/dist/utils/iconResolver.js.map +1 -0
- package/dist/utils/orientationUtils.d.ts +19 -0
- package/dist/utils/orientationUtils.d.ts.map +1 -0
- package/dist/utils/orientationUtils.js +62 -0
- package/dist/utils/orientationUtils.js.map +1 -0
- package/package.json +80 -0
- package/src/components/ConfigurationSelector.tsx +133 -0
- package/src/components/GraphRenderer.tsx +3195 -0
- package/src/components/MultiCanvasRenderer.tsx +295 -0
- package/src/components/NodeTooltip.tsx +279 -0
- package/src/components/PendingChanges.test.tsx +375 -0
- package/src/components/SelectionSidebar.tsx +352 -0
- package/src/components/SequenceDiagramRenderer.tsx +1156 -0
- package/src/components/WorkflowSequenceDiagram.tsx +270 -0
- package/src/components/dashboard/DashboardRenderer.tsx +317 -0
- package/src/components/dashboard/MetricPanel.tsx +254 -0
- package/src/components/dashboard/MockDataProvider.ts +330 -0
- package/src/components/dashboard/components/BarChart.tsx +299 -0
- package/src/components/dashboard/components/LineChart.tsx +279 -0
- package/src/components/dashboard/components/MetricCard.tsx +270 -0
- package/src/components/dashboard/components/SourceLink.tsx +63 -0
- package/src/components/dashboard/components/TimeRangeSelector.tsx +280 -0
- package/src/components/dashboard/components/index.ts +5 -0
- package/src/components/dashboard/index.ts +47 -0
- package/src/components/dashboard/types.ts +126 -0
- package/src/components/session-events/SessionEventFeed.tsx +1797 -0
- package/src/components/session-events/index.ts +13 -0
- package/src/components/state-view/PipelineView.tsx +347 -0
- package/src/components/state-view/index.ts +14 -0
- package/src/components/state-view/types.ts +261 -0
- package/src/components/state-view/useStateView.ts +205 -0
- package/src/contexts/GraphEditContext.tsx +27 -0
- package/src/contexts/TooltipPortalContext.ts +8 -0
- package/src/edges/CustomEdge.tsx +402 -0
- package/src/edges/GenericEdge.tsx +36 -0
- package/src/graphify/anchor.test.ts +124 -0
- package/src/graphify/anchor.ts +160 -0
- package/src/graphify/consolidated.ts +246 -0
- package/src/graphify/ids.ts +48 -0
- package/src/graphify/index.ts +72 -0
- package/src/graphify/kind.test.ts +108 -0
- package/src/graphify/kind.ts +120 -0
- package/src/graphify/resolve.test.ts +89 -0
- package/src/graphify/resolve.ts +115 -0
- package/src/graphify/signature.test.ts +278 -0
- package/src/graphify/signature.ts +354 -0
- package/src/graphify/types.ts +164 -0
- package/src/hooks/useElkLayout.test.ts +134 -0
- package/src/hooks/useElkLayout.ts +191 -0
- package/src/hooks/usePathBasedEvents.ts +192 -0
- package/src/hooks/useSequenceLayout.ts +543 -0
- package/src/hooks/useUndoRedo.ts +144 -0
- package/src/index.ts +341 -0
- package/src/nodes/CustomNode.tsx +1231 -0
- package/src/nodes/GenericNode.tsx +55 -0
- package/src/nodes/otel/OtelBoundaryNode.tsx +224 -0
- package/src/nodes/otel/OtelEventNode.tsx +225 -0
- package/src/nodes/otel/OtelResourceNode.tsx +251 -0
- package/src/nodes/otel/OtelScopeNode.tsx +221 -0
- package/src/nodes/otel/OtelSpanConventionNode.tsx +295 -0
- package/src/nodes/otel/index.ts +23 -0
- package/src/nodes/otel/shared/NodeBadges.tsx +295 -0
- package/src/nodes/otel/shared/NodeContent.tsx +204 -0
- package/src/nodes/otel/shared/index.ts +8 -0
- package/src/nodes/otel/shared/types.ts +138 -0
- package/src/nodes/otel/shared/useNodeBehavior.ts +114 -0
- package/src/pierre/PierreFileView.tsx +81 -0
- package/src/pierre/PierreSnippetView.tsx +184 -0
- package/src/pierre/PierreThroughlineCodeView.tsx +304 -0
- package/src/pierre/constructColors.test.ts +52 -0
- package/src/pierre/constructColors.ts +112 -0
- package/src/pierre/index.ts +18 -0
- package/src/pierre/pierreBackground.ts +33 -0
- package/src/pierre/pierreFileLang.test.ts +26 -0
- package/src/pierre/pierreFileLang.ts +55 -0
- package/src/pierre/pierreSyntaxTheme.ts +23 -0
- package/src/pierre/scrollAnchor.test.ts +13 -0
- package/src/pierre/scrollAnchor.ts +11 -0
- package/src/pierre/sliceSnippet.test.ts +21 -0
- package/src/pierre/sliceSnippet.ts +31 -0
- package/src/pierre/syntaxTokens.test.ts +35 -0
- package/src/pierre/syntaxTokens.ts +60 -0
- package/src/stories/Audit/BoundaryNodes.stories.tsx +385 -0
- package/src/stories/Audit/CanvasEdgeTypes.stories.tsx +1448 -0
- package/src/stories/Audit/CanvasNodeTypes.stories.tsx +1049 -0
- package/src/stories/Audit/ColorPriority.stories.tsx +895 -0
- package/src/stories/Audit/DiamondBadges.stories.tsx +629 -0
- package/src/stories/Audit/NodeDimensionsTesting.stories.tsx +724 -0
- package/src/stories/Audit/NodeFieldsAudit.stories.tsx +996 -0
- package/src/stories/Audit/NodeFontSizeTesting.stories.tsx +715 -0
- package/src/stories/Audit/NodeShapes.stories.tsx +1208 -0
- package/src/stories/Audit/WideNodesTesting.stories.tsx +1045 -0
- package/src/stories/Components/DashboardRenderer.stories.tsx +263 -0
- package/src/stories/Components/GraphRenderer.stories.tsx +3236 -0
- package/src/stories/Components/MultiCanvasRenderer.stories.tsx +370 -0
- package/src/stories/Components/SequenceDiagram.stories.tsx +255 -0
- package/src/stories/Components/StateView.stories.tsx +417 -0
- package/src/stories/Components/TraceViewer.stories.tsx +442 -0
- package/src/stories/Components/WorkflowSequenceDiagram.stories.tsx +802 -0
- package/src/stories/Features/AnimationWorkshop.stories.tsx +727 -0
- package/src/stories/Features/ChangeTypeVisual.stories.tsx +67 -0
- package/src/stories/Features/EventDrivenAnimations.stories.tsx +513 -0
- package/src/stories/Features/MultiConfig.stories.tsx +539 -0
- package/src/stories/Introduction.mdx +34 -0
- package/src/stories/Layout/ElkEdgeRouting.stories.tsx +539 -0
- package/src/stories/Layout/GraphOrientation.stories.tsx +500 -0
- package/src/stories/Layout/MultiDirectionalConnections.stories.tsx +352 -0
- package/src/stories/Nodes/NodeDefinitionComparison.stories.tsx +560 -0
- package/src/stories/Nodes/NodeNameFallbacks.stories.tsx +491 -0
- package/src/stories/Nodes/NumericColors.stories.tsx +440 -0
- package/src/stories/OTEL/EventNameDisplay.stories.tsx +694 -0
- package/src/stories/OTEL/EventNameFallback.stories.tsx +578 -0
- package/src/stories/OTEL/OtelComponents.stories.tsx +422 -0
- package/src/stories/OTEL/OtelNodeTypesPrototype.stories.tsx +806 -0
- package/src/stories/OTEL/RawEventCards.stories.tsx +57 -0
- package/src/stories/OTEL/SpanBadges.stories.tsx +840 -0
- package/src/stories/OTEL/ValidationEventsCanvas.stories.tsx +209 -0
- package/src/stories/Pierre/CodeView.stories.tsx +219 -0
- package/src/stories/RealWorld/BacklogMdCanvases.stories.tsx +721 -0
- package/src/stories/RealWorld/FileCitySequence.stories.tsx +516 -0
- package/src/stories/RealWorld/RealCanvasFiles.stories.tsx +336 -0
- package/src/stories/Subsystem/ComponentDeclarationAudit.stories.tsx +321 -0
- package/src/stories/Subsystem/ComponentGraph/Appearance.stories.tsx +365 -0
- package/src/stories/Subsystem/ComponentGraph/Basics.stories.tsx +137 -0
- package/src/stories/Subsystem/ComponentGraph/Captures.stories.tsx +238 -0
- package/src/stories/Subsystem/ComponentGraph/DetailPanel.stories.tsx +315 -0
- package/src/stories/Subsystem/ComponentGraph/Flows.stories.tsx +239 -0
- package/src/stories/Subsystem/ComponentGraph/FrameworkStereotype.stories.tsx +216 -0
- package/src/stories/Subsystem/ComponentGraph/GraphTitle.stories.tsx +70 -0
- package/src/stories/Subsystem/ComponentGraph/Processes.stories.tsx +68 -0
- package/src/stories/Subsystem/ComponentGraph/Scenarios.stories.tsx +959 -0
- package/src/stories/Subsystem/ComponentGraph/Spotlights.stories.tsx +681 -0
- package/src/stories/Subsystem/ComponentGraph/fixtures.ts +129 -0
- package/src/stories/__traces__/test-run.canvas.json +241 -0
- package/src/stories/data/activity-feed-analytics.dashboard.json +300 -0
- package/src/stories/data/file-city-images-transformed.otel.canvas.json +295 -0
- package/src/stories/data/file-city-workflows.json +269 -0
- package/src/stories/data/graph-converter-test-execution.json +443 -0
- package/src/stories/data/graph-converter-test.workflow.json +105 -0
- package/src/stories/data/graph-converter-validated-execution.json +58 -0
- package/src/stories/data/opencode-session-raw-events.json +273396 -0
- package/src/subsystem/ComponentDeclaration.tsx +643 -0
- package/src/subsystem/FileDrawer.tsx +106 -0
- package/src/subsystem/GraphLayoutCover.tsx +69 -0
- package/src/subsystem/SubsystemComponentGraph.tsx +1644 -0
- package/src/subsystem/SubsystemFileTree.tsx +190 -0
- package/src/subsystem/declarationRef.test.ts +33 -0
- package/src/subsystem/declarationRef.ts +63 -0
- package/src/subsystem/formatDeclaration.ts +174 -0
- package/src/subsystem/model.test.ts +244 -0
- package/src/subsystem/model.ts +850 -0
- package/src/subsystem/nodes.test.ts +56 -0
- package/src/subsystem/nodes.tsx +443 -0
- package/src/subsystem/paths.test.ts +123 -0
- package/src/subsystem/paths.ts +127 -0
- package/src/subsystem/tokenizeComponent.ts +70 -0
- package/src/subsystem/tokenizeFormatted.ts +19 -0
- package/src/utils/animationMapping.ts +166 -0
- package/src/utils/canvasBounds.ts +146 -0
- package/src/utils/elkLayout.test.ts +240 -0
- package/src/utils/elkLayout.ts +779 -0
- package/src/utils/graphConverter.ts +148 -0
- package/src/utils/iconResolver.tsx +53 -0
- package/src/utils/orientationUtils.ts +73 -0
|
@@ -0,0 +1,503 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Subsystem component-graph data model + converters.
|
|
3
|
+
*
|
|
4
|
+
* A subsystem snapshot (see the "Subsystem artifact: facets" topic) is captured
|
|
5
|
+
* as component nodes (construct-tagged source units), file refs, integration edges,
|
|
6
|
+
* and entry points. This module defines the minimal document shape for the
|
|
7
|
+
* *graph* facet and converts it to React Flow nodes/edges — packages render as
|
|
8
|
+
* subgraphs, only cross-package edges leave the box, and shared seams
|
|
9
|
+
* (registries/barrels/facades) are edge targets, never member nodes.
|
|
10
|
+
*
|
|
11
|
+
* Self-contained in this package (not yet promoted to `@principal-ai/core`), so
|
|
12
|
+
* we can iterate on the UI + story without publishing a dependency.
|
|
13
|
+
*/
|
|
14
|
+
import { MarkerType, } from '@xyflow/react';
|
|
15
|
+
import { computeElkLayout, calculatePathLength } from '../utils/elkLayout';
|
|
16
|
+
/**
|
|
17
|
+
* Derive a consistent display `name` from a code `symbol` + construct.
|
|
18
|
+
*
|
|
19
|
+
* `symbol` is the source of truth (fully-qualified code identity). The name
|
|
20
|
+
* is the symbol itself:
|
|
21
|
+
* - class/type/module/function/script/... symbol → symbol (e.g. `SessionReader`)
|
|
22
|
+
* - method `Owner.method` → last segment (e.g. `SessionReader.normalize` → `normalize`)
|
|
23
|
+
* - module, no symbol → basename of `file` (e.g. `transcript.ts` → `transcript`) —
|
|
24
|
+
* a common-sense convention for whole-file modules, not a real TS name
|
|
25
|
+
* - otherwise no symbol → fall back to an existing name
|
|
26
|
+
*/
|
|
27
|
+
export function deriveNameFromSymbol(symbol, construct, existingName, file, stereotype) {
|
|
28
|
+
let name;
|
|
29
|
+
if (symbol && symbol.trim()) {
|
|
30
|
+
name = symbol;
|
|
31
|
+
}
|
|
32
|
+
else if (construct === 'module' && file) {
|
|
33
|
+
const base = file.split('/').pop() ?? '';
|
|
34
|
+
const clean = base.replace(/\.[^.]+$/, ''); // strip extension
|
|
35
|
+
if (clean)
|
|
36
|
+
name = clean;
|
|
37
|
+
}
|
|
38
|
+
if (!name)
|
|
39
|
+
name = existingName ?? 'untitled';
|
|
40
|
+
// Decorations = what the drill-down shows. Framework stereotypes can override
|
|
41
|
+
// the language decoration (a React component wears `<>` instead of `()`).
|
|
42
|
+
// Executable constructs wear `()`; brace-bodied constructs (interface,
|
|
43
|
+
// type_alias, enum) wear ` {}`. Classes render bare — the construct badge
|
|
44
|
+
// already says "class".
|
|
45
|
+
// Everything else (class, store, module, external) renders bare.
|
|
46
|
+
if (stereotype === 'component' && !name.startsWith('<')) {
|
|
47
|
+
return `<${name}>`;
|
|
48
|
+
}
|
|
49
|
+
if ((construct === 'function' || construct === 'method') && !name.endsWith('()')) {
|
|
50
|
+
name = `${name}()`;
|
|
51
|
+
}
|
|
52
|
+
if ((construct === 'interface' ||
|
|
53
|
+
construct === 'type_alias' ||
|
|
54
|
+
construct === 'enum') &&
|
|
55
|
+
!name.endsWith('{}')) {
|
|
56
|
+
name = `${name} {}`;
|
|
57
|
+
}
|
|
58
|
+
return name;
|
|
59
|
+
}
|
|
60
|
+
/**
|
|
61
|
+
* Human-readable purl identity — drops the `pkg:<type>/` scheme wrapper and
|
|
62
|
+
* trailing version, keeping the package / owner-repo identity:
|
|
63
|
+
*
|
|
64
|
+
* pkg:npm/@principal-ai/core → `@principal-ai/core`
|
|
65
|
+
* pkg:github/principal-ai/my-repo → `principal-ai/my-repo`
|
|
66
|
+
* pkg:npm/left-pad@1.3.0 → `left-pad`
|
|
67
|
+
* pkg:generic/local--Users-me-my-app → `Users-me-my-app (local)`
|
|
68
|
+
*
|
|
69
|
+
* Local purls encode the absolute path with dashes for slashes, which is not
|
|
70
|
+
* losslessly decodable — shown as-is with a `(local)` marker.
|
|
71
|
+
*/
|
|
72
|
+
export function formatPurl(purl) {
|
|
73
|
+
const match = /^pkg:[^/#?]+\/(.+)$/.exec(purl);
|
|
74
|
+
if (!match)
|
|
75
|
+
return purl;
|
|
76
|
+
let identity = match[1].split(/[?#]/)[0];
|
|
77
|
+
const at = identity.indexOf('@');
|
|
78
|
+
if (at > 0)
|
|
79
|
+
identity = identity.slice(0, at); // trailing @version
|
|
80
|
+
if (identity.startsWith('local--')) {
|
|
81
|
+
return `${identity.slice('local--'.length)} (local)`;
|
|
82
|
+
}
|
|
83
|
+
return identity;
|
|
84
|
+
}
|
|
85
|
+
/** React Flow id for a process boundary group node. */
|
|
86
|
+
export function processGroupNodeId(processKey) {
|
|
87
|
+
return `process:${processKey}`;
|
|
88
|
+
}
|
|
89
|
+
/**
|
|
90
|
+
* Derive boundary regions from a document — one per distinct non-empty
|
|
91
|
+
* `process` value, in first-appearance order.
|
|
92
|
+
*/
|
|
93
|
+
export function getSubsystemRegions(doc) {
|
|
94
|
+
const byProcess = new Map();
|
|
95
|
+
for (const c of doc.components) {
|
|
96
|
+
const p = c.process?.trim();
|
|
97
|
+
if (!p)
|
|
98
|
+
continue;
|
|
99
|
+
const list = byProcess.get(p) ?? [];
|
|
100
|
+
list.push(c.id);
|
|
101
|
+
byProcess.set(p, list);
|
|
102
|
+
}
|
|
103
|
+
return [...byProcess.entries()].map(([key, memberIds]) => ({
|
|
104
|
+
key,
|
|
105
|
+
label: key,
|
|
106
|
+
memberIds,
|
|
107
|
+
}));
|
|
108
|
+
}
|
|
109
|
+
export const MECHANISM_COLOR = {
|
|
110
|
+
imports: '#0893d2',
|
|
111
|
+
imports_from: '#5aa9e6',
|
|
112
|
+
re_exports: '#3aa5c9',
|
|
113
|
+
defines: '#2e86ab',
|
|
114
|
+
calls: '#4ec9b0',
|
|
115
|
+
extends: '#b48ead',
|
|
116
|
+
inherits: '#9b6fd0',
|
|
117
|
+
implements: '#c586c0',
|
|
118
|
+
mixes_in: '#d474a8',
|
|
119
|
+
uses: '#e3b341',
|
|
120
|
+
method: '#c586c0',
|
|
121
|
+
references: '#e07a5f',
|
|
122
|
+
contains: '#6c5ce7',
|
|
123
|
+
feeds: '#22c55e',
|
|
124
|
+
produces: '#e07a5f',
|
|
125
|
+
writes: '#2f9e44',
|
|
126
|
+
reads: '#0ea5e9',
|
|
127
|
+
watches: '#9ca3af',
|
|
128
|
+
'registers-into': '#ff6b35', // orange
|
|
129
|
+
};
|
|
130
|
+
export const MECHANISM_STYLE = {
|
|
131
|
+
imports: 'solid',
|
|
132
|
+
imports_from: 'solid',
|
|
133
|
+
re_exports: 'solid',
|
|
134
|
+
defines: 'solid',
|
|
135
|
+
calls: 'solid',
|
|
136
|
+
extends: 'dashed',
|
|
137
|
+
inherits: 'dashed',
|
|
138
|
+
implements: 'dashed',
|
|
139
|
+
mixes_in: 'dashed',
|
|
140
|
+
uses: 'solid',
|
|
141
|
+
method: 'solid',
|
|
142
|
+
references: 'dotted',
|
|
143
|
+
contains: 'solid',
|
|
144
|
+
feeds: 'solid',
|
|
145
|
+
produces: 'solid',
|
|
146
|
+
writes: 'solid',
|
|
147
|
+
reads: 'solid',
|
|
148
|
+
watches: 'dashed',
|
|
149
|
+
'registers-into': 'dashed',
|
|
150
|
+
};
|
|
151
|
+
/** Mechanism → [description, verifiable-with-graphify]. Drives the "not
|
|
152
|
+
* directly verifiable" styling of edge labels. */
|
|
153
|
+
export const MECHANISM_DESCRIPTIONS = [
|
|
154
|
+
['imports', 'import statement (code-level dependency)', true],
|
|
155
|
+
['imports_from', 'imported by (reverse dependency)', true],
|
|
156
|
+
['re_exports', 're-exports symbols from', true],
|
|
157
|
+
['defines', 'defines / declares symbol', true],
|
|
158
|
+
['calls', 'function/method call (call graph edge)', true],
|
|
159
|
+
['extends', 'class inheritance', true],
|
|
160
|
+
['inherits', 'class inheritance', true],
|
|
161
|
+
['implements', 'implements interface / protocol', true],
|
|
162
|
+
['mixes_in', 'applies mixin', true],
|
|
163
|
+
['uses', 'general dependency (import, call, or reference)', false],
|
|
164
|
+
['method', 'structural: has method / member', true],
|
|
165
|
+
['references', 'type / symbol reference (not a call)', true],
|
|
166
|
+
['contains', 'structural: contains / encapsulates', true],
|
|
167
|
+
['feeds', 'data flow: output feeds into input', false],
|
|
168
|
+
['produces', 'data flow: produces / outputs', false],
|
|
169
|
+
['writes', 'state access: mutates retained state', true],
|
|
170
|
+
['reads', 'state access: reads retained state', true],
|
|
171
|
+
['watches', 'observes retained state without owning it', false],
|
|
172
|
+
['registers-into', 'registration pattern', false],
|
|
173
|
+
];
|
|
174
|
+
/** Package color palette (derived deterministically from the package name). */
|
|
175
|
+
export function packageColor(name) {
|
|
176
|
+
const palette = [
|
|
177
|
+
'#0893d2',
|
|
178
|
+
'#4ec9b0',
|
|
179
|
+
'#ff6b35',
|
|
180
|
+
'#b48ead',
|
|
181
|
+
'#e3b341',
|
|
182
|
+
'#5aa9e6',
|
|
183
|
+
];
|
|
184
|
+
let h = 0;
|
|
185
|
+
for (let i = 0; i < name.length; i++)
|
|
186
|
+
h = (h * 31 + name.charCodeAt(i)) >>> 0;
|
|
187
|
+
return palette[h % palette.length];
|
|
188
|
+
}
|
|
189
|
+
/** Color per semantic role — applied ONLY to the role badge (top-right tab on
|
|
190
|
+
* nodes that carry a role). The node border stays construct-colored. Note:
|
|
191
|
+
* `service` currently equals the old class hex; harmless while role badges
|
|
192
|
+
* are the only surface using it, but pick a distinct value if roles ever
|
|
193
|
+
* take over node borders. */
|
|
194
|
+
export const ROLE_COLOR = {
|
|
195
|
+
entry: '#ff6b35',
|
|
196
|
+
service: '#0893d2', // blue — external system
|
|
197
|
+
};
|
|
198
|
+
export const ROLE_LABEL = {
|
|
199
|
+
entry: 'entry',
|
|
200
|
+
service: 'service',
|
|
201
|
+
};
|
|
202
|
+
/**
|
|
203
|
+
* Primary badge text for a node: prefer framework stereotype over the
|
|
204
|
+
* language construct so a React UI unit reads as "component" / "hook"
|
|
205
|
+
* rather than "function". When both framework and stereotype are set,
|
|
206
|
+
* show `framework · stereotype` (e.g. `react · component`).
|
|
207
|
+
*/
|
|
208
|
+
export function constructBadgeLabel(component) {
|
|
209
|
+
const constructLabel = component.construct === 'type_alias' ? 'type alias' : component.construct;
|
|
210
|
+
if (component.stereotype && component.framework) {
|
|
211
|
+
return `${component.framework} · ${component.stereotype}`;
|
|
212
|
+
}
|
|
213
|
+
if (component.stereotype)
|
|
214
|
+
return component.stereotype;
|
|
215
|
+
return constructLabel ?? '';
|
|
216
|
+
}
|
|
217
|
+
/** Default CSS floor for component nodes (padding aside). */
|
|
218
|
+
export const NODE_CSS_MIN_WIDTH = 150;
|
|
219
|
+
/** Inset of each top badge from the node edge (`left` / `right` style). */
|
|
220
|
+
export const BADGE_EDGE_INSET = 5;
|
|
221
|
+
/** Minimum gap between left construct badge and right role badge. */
|
|
222
|
+
const BADGE_PAIR_GAP = 8;
|
|
223
|
+
/** Badge box chrome: padding 5+5 + border 1+1. */
|
|
224
|
+
const BADGE_BOX_CHROME = 12;
|
|
225
|
+
/** Approx monospace uppercase width incl. letter-spacing (~0.5px). */
|
|
226
|
+
const BADGE_CHAR_WIDTH = 8;
|
|
227
|
+
/** Estimated rendered width of a top tab badge label. */
|
|
228
|
+
export function estimateBadgeLabelWidth(label) {
|
|
229
|
+
return (label?.length ?? 0) * BADGE_CHAR_WIDTH + BADGE_BOX_CHROME;
|
|
230
|
+
}
|
|
231
|
+
/**
|
|
232
|
+
* Minimum node width so top badges stay on one line and (when both are
|
|
233
|
+
* present) don't overlap — badges are absolutely positioned, so they don't
|
|
234
|
+
* contribute to layout unless we widen the node explicitly.
|
|
235
|
+
*/
|
|
236
|
+
export function nodeMinWidthForBadges(component) {
|
|
237
|
+
const left = estimateBadgeLabelWidth(constructBadgeLabel(component));
|
|
238
|
+
if (component.role == null) {
|
|
239
|
+
return Math.max(NODE_CSS_MIN_WIDTH, BADGE_EDGE_INSET + left + BADGE_EDGE_INSET);
|
|
240
|
+
}
|
|
241
|
+
const right = estimateBadgeLabelWidth(ROLE_LABEL[component.role]);
|
|
242
|
+
return Math.max(NODE_CSS_MIN_WIDTH, BADGE_EDGE_INSET + left + BADGE_PAIR_GAP + right + BADGE_EDGE_INSET);
|
|
243
|
+
}
|
|
244
|
+
/**
|
|
245
|
+
* Convert a subsystem graph document into React Flow nodes. Components that
|
|
246
|
+
* carry a `process` get a `parentId` pointing at their boundary group node
|
|
247
|
+
* (`process:<process>`); nodes without one stay top-level (outside every
|
|
248
|
+
* boundary). The initial grid groups by `process ?? purl` so the pre-ELK
|
|
249
|
+
* positions are already clustered; ELK then refines with compound layout.
|
|
250
|
+
*/
|
|
251
|
+
export function convertSubsystemToNodes(doc, opts = {}) {
|
|
252
|
+
const { maxNodeWidth } = opts;
|
|
253
|
+
// Group components into boundary regions by process when authored, else by
|
|
254
|
+
// package. Process is runtime membership (drawn as one boundary region);
|
|
255
|
+
// purl is code identity — nodes without a process (external actors,
|
|
256
|
+
// services, libraries) fall back to purl and sit outside every boundary.
|
|
257
|
+
const byPkg = new Map();
|
|
258
|
+
for (const c of doc.components) {
|
|
259
|
+
const regionKey = c.process ?? c.purl;
|
|
260
|
+
const list = byPkg.get(regionKey) ?? [];
|
|
261
|
+
list.push(c);
|
|
262
|
+
byPkg.set(regionKey, list);
|
|
263
|
+
}
|
|
264
|
+
const nodes = [];
|
|
265
|
+
const COLS = 2;
|
|
266
|
+
const COL_W = 240;
|
|
267
|
+
const ROW_H = 150;
|
|
268
|
+
const PAD = 30;
|
|
269
|
+
const GROUP_GAP = 60;
|
|
270
|
+
let cursorY = PAD;
|
|
271
|
+
for (const comps of byPkg.values()) {
|
|
272
|
+
const rows = Math.ceil(comps.length / COLS);
|
|
273
|
+
const heightPx = ROW_H * rows;
|
|
274
|
+
comps.forEach((c, i) => {
|
|
275
|
+
const col = i % COLS;
|
|
276
|
+
const row = Math.floor(i / COLS);
|
|
277
|
+
// Estimate rendered node width from the longest text line so ELK reserves
|
|
278
|
+
// the right space (names can wrap, so we cap at the configurable max).
|
|
279
|
+
const text = [c.symbol, c.name, c.file?.split('/').pop() ?? '']
|
|
280
|
+
.filter((t) => !!t)
|
|
281
|
+
.sort((a, b) => b.length - a.length)[0];
|
|
282
|
+
const cap = maxNodeWidth ?? 300;
|
|
283
|
+
const textWidth = Math.min(cap, Math.max(60, (text?.length ?? 10) * 8));
|
|
284
|
+
// Account for CSS minWidth (incl. top badges) and padding/border so ELK's
|
|
285
|
+
// port positions match the actual rendered node boundaries.
|
|
286
|
+
const cssMinWidth = nodeMinWidthForBadges(c);
|
|
287
|
+
const cssPadding = 20; // horizontal padding (left + right)
|
|
288
|
+
const cssBorder = 4; // 2px border each side
|
|
289
|
+
const rawWidth = Math.max(cssMinWidth, textWidth + cssPadding + cssBorder);
|
|
290
|
+
const nodeWidth = Math.max(cssMinWidth, Math.min(cap, rawWidth));
|
|
291
|
+
const processKey = c.process?.trim();
|
|
292
|
+
nodes.push({
|
|
293
|
+
id: c.id,
|
|
294
|
+
type: 'subsystem-component',
|
|
295
|
+
...(processKey ? { parentId: processGroupNodeId(processKey) } : {}),
|
|
296
|
+
position: { x: PAD + col * COL_W, y: cursorY + row * ROW_H },
|
|
297
|
+
width: nodeWidth,
|
|
298
|
+
height: 84,
|
|
299
|
+
data: { component: c },
|
|
300
|
+
});
|
|
301
|
+
});
|
|
302
|
+
cursorY += heightPx + PAD * 2 + GROUP_GAP;
|
|
303
|
+
}
|
|
304
|
+
return nodes;
|
|
305
|
+
}
|
|
306
|
+
/**
|
|
307
|
+
* Convert boundary regions into React Flow parent (group) nodes. One per
|
|
308
|
+
* distinct `process` value; member components point at these via `parentId`.
|
|
309
|
+
* Positions/sizes are placeholders — ELK compound layout overwrites them.
|
|
310
|
+
*/
|
|
311
|
+
export function convertSubsystemToGroups(doc) {
|
|
312
|
+
return getSubsystemRegions(doc).map((region) => ({
|
|
313
|
+
id: processGroupNodeId(region.key),
|
|
314
|
+
type: 'subsystem-group',
|
|
315
|
+
position: { x: 0, y: 0 },
|
|
316
|
+
width: 400,
|
|
317
|
+
height: 300,
|
|
318
|
+
data: { region },
|
|
319
|
+
}));
|
|
320
|
+
}
|
|
321
|
+
/**
|
|
322
|
+
* Convert a subsystem graph document into React Flow edges. Edges whose target
|
|
323
|
+
* is an external label (not a component id) point at a synthetic stub so the
|
|
324
|
+
* relationship is visible without a member node.
|
|
325
|
+
*/
|
|
326
|
+
export function convertSubsystemToEdges(doc) {
|
|
327
|
+
const compIds = new Set(doc.components.map((c) => c.id));
|
|
328
|
+
const edges = [];
|
|
329
|
+
for (const e of doc.edges) {
|
|
330
|
+
const color = MECHANISM_COLOR[e.mechanism];
|
|
331
|
+
const style = MECHANISM_STYLE[e.mechanism];
|
|
332
|
+
// If `to` is a real component, connect directly; otherwise point at a stub node.
|
|
333
|
+
const isExternal = !compIds.has(e.to);
|
|
334
|
+
const targetId = isExternal ? `external:${e.to}` : e.to;
|
|
335
|
+
edges.push({
|
|
336
|
+
id: e.id,
|
|
337
|
+
source: e.from,
|
|
338
|
+
target: targetId,
|
|
339
|
+
data: { mechanism: e.mechanism, refs: e.refs },
|
|
340
|
+
type: 'subsystem-edge',
|
|
341
|
+
markerEnd: { type: MarkerType.ArrowClosed, color, width: 32, height: 32 },
|
|
342
|
+
style: { color, stroke: color, strokeDasharray: style === 'dashed' ? '6 4' : undefined },
|
|
343
|
+
// `label` feeds ELK's label-space reservation only; the visible label is
|
|
344
|
+
// rendered by the custom SubsystemEdge as an HTML overlay.
|
|
345
|
+
label: e.mechanism,
|
|
346
|
+
// Mechanism label rendered via the custom SubsystemEdge (an HTML overlay
|
|
347
|
+
// above the SVG edges, so it can't be hidden behind other edge lines).
|
|
348
|
+
});
|
|
349
|
+
}
|
|
350
|
+
return edges;
|
|
351
|
+
}
|
|
352
|
+
/** Stable key for layout-affecting graph fields (ignores declarationRef, etc.). */
|
|
353
|
+
export function subsystemGraphLayoutKey(doc) {
|
|
354
|
+
const components = doc.components
|
|
355
|
+
.map(({ id, purl, name, symbol, construct, file, purpose, process }) => [id, purl, name, symbol ?? '', construct, file, purpose ?? '', process ?? ''].join('\0'))
|
|
356
|
+
.sort()
|
|
357
|
+
.join('\n');
|
|
358
|
+
const edgeKey = doc.edges
|
|
359
|
+
.map(({ id, from, to, mechanism }) => [id, from, to, mechanism].join('\0'))
|
|
360
|
+
.sort()
|
|
361
|
+
.join('\n');
|
|
362
|
+
return `${components}|${edgeKey}`;
|
|
363
|
+
}
|
|
364
|
+
/**
|
|
365
|
+
* Build the full React Flow graph (nodes + edges) using **ELK auto-layout** to
|
|
366
|
+
* position every node (including external stub targets), so the graph is
|
|
367
|
+
* layered with minimized crossings.
|
|
368
|
+
*/
|
|
369
|
+
export async function buildSubsystemGraph(doc, opts = {}) {
|
|
370
|
+
const { maxNodeWidth, showEdgeLabels, measuredWidths, measuredHeights } = opts;
|
|
371
|
+
const nodes = convertSubsystemToNodes(doc, { maxNodeWidth });
|
|
372
|
+
const edges = convertSubsystemToEdges(doc);
|
|
373
|
+
// Boundary regions: one per multi-member process. Singletons get no frame —
|
|
374
|
+
// strip the parentId convertSubsystemToNodes stamped so React Flow never
|
|
375
|
+
// points at a non-existent parent.
|
|
376
|
+
const regions = getSubsystemRegions(doc).filter((r) => r.memberIds.length >= 2);
|
|
377
|
+
const regionKeys = new Set(regions.map((r) => r.key));
|
|
378
|
+
for (const n of nodes) {
|
|
379
|
+
if (n.type !== 'subsystem-component')
|
|
380
|
+
continue;
|
|
381
|
+
const proc = n.data.component?.process?.trim();
|
|
382
|
+
if (proc && !regionKeys.has(proc)) {
|
|
383
|
+
delete n.parentId;
|
|
384
|
+
}
|
|
385
|
+
}
|
|
386
|
+
// External edge targets that aren't real components → create stub nodes so
|
|
387
|
+
// cross-package edges have something to land on.
|
|
388
|
+
const realIds = new Set(doc.components.map((c) => c.id));
|
|
389
|
+
const externalIds = [];
|
|
390
|
+
for (const e of doc.edges) {
|
|
391
|
+
if (!realIds.has(e.to)) {
|
|
392
|
+
const extId = `external:${e.to}`;
|
|
393
|
+
if (!externalIds.includes(extId))
|
|
394
|
+
externalIds.push(extId);
|
|
395
|
+
}
|
|
396
|
+
}
|
|
397
|
+
for (const extId of externalIds) {
|
|
398
|
+
const label = extId.replace(/^external:/, '');
|
|
399
|
+
const extTextWidth = Math.min(300, Math.max(150, label.length * 8));
|
|
400
|
+
nodes.push({
|
|
401
|
+
id: extId,
|
|
402
|
+
type: 'subsystem-component',
|
|
403
|
+
position: { x: 0, y: 0 },
|
|
404
|
+
width: Math.max(150, extTextWidth + 24),
|
|
405
|
+
height: 60,
|
|
406
|
+
data: {
|
|
407
|
+
component: {
|
|
408
|
+
id: extId,
|
|
409
|
+
name: label,
|
|
410
|
+
construct: 'external',
|
|
411
|
+
purl: 'external',
|
|
412
|
+
file: '',
|
|
413
|
+
purpose: 'cross-package integration target (not a member node)',
|
|
414
|
+
},
|
|
415
|
+
},
|
|
416
|
+
draggable: false,
|
|
417
|
+
});
|
|
418
|
+
}
|
|
419
|
+
// Apply measured dimensions (second pass) so ELK gets the real node sizes.
|
|
420
|
+
if (measuredWidths && measuredWidths.size > 0) {
|
|
421
|
+
for (const n of nodes) {
|
|
422
|
+
const mw = measuredWidths.get(n.id);
|
|
423
|
+
if (mw)
|
|
424
|
+
n.width = mw;
|
|
425
|
+
}
|
|
426
|
+
}
|
|
427
|
+
if (measuredHeights && measuredHeights.size > 0) {
|
|
428
|
+
for (const n of nodes) {
|
|
429
|
+
const mh = measuredHeights.get(n.id);
|
|
430
|
+
if (mh)
|
|
431
|
+
n.height = mh;
|
|
432
|
+
}
|
|
433
|
+
}
|
|
434
|
+
// ELK auto-layout: position nodes (layered, minimized crossings) with
|
|
435
|
+
// process partitions as compound parents so boundaries shape the layout.
|
|
436
|
+
let placedNodes = nodes;
|
|
437
|
+
let labelPositions = new Map();
|
|
438
|
+
let elkPathStrings = new Map();
|
|
439
|
+
let elkPathPoints = new Map();
|
|
440
|
+
if (nodes.length > 0) {
|
|
441
|
+
try {
|
|
442
|
+
const result = await computeElkLayout(nodes, edges, {
|
|
443
|
+
routingStyle: 'orthogonal',
|
|
444
|
+
direction: 'RIGHT',
|
|
445
|
+
nodeSpacing: 60,
|
|
446
|
+
edgeSpacing: 30,
|
|
447
|
+
edgeNodeSpacing: 60,
|
|
448
|
+
interLayerSpacing: 120,
|
|
449
|
+
preserveNodePositions: false,
|
|
450
|
+
edgeLabels: showEdgeLabels === false ? { enabled: false } : { enabled: true, placement: 'CENTER' },
|
|
451
|
+
groups: regions.map((r) => ({
|
|
452
|
+
id: processGroupNodeId(r.key),
|
|
453
|
+
memberIds: r.memberIds,
|
|
454
|
+
})),
|
|
455
|
+
});
|
|
456
|
+
const groupNodes = regions.flatMap((region) => {
|
|
457
|
+
const bounds = result.groupBounds.get(processGroupNodeId(region.key));
|
|
458
|
+
if (!bounds)
|
|
459
|
+
return [];
|
|
460
|
+
const group = {
|
|
461
|
+
id: processGroupNodeId(region.key),
|
|
462
|
+
type: 'subsystem-group',
|
|
463
|
+
position: { x: bounds.x, y: bounds.y },
|
|
464
|
+
width: Math.max(200, bounds.width),
|
|
465
|
+
height: Math.max(160, bounds.height),
|
|
466
|
+
data: { region },
|
|
467
|
+
};
|
|
468
|
+
return [group];
|
|
469
|
+
});
|
|
470
|
+
// Parents first — React Flow resolves children via parentId.
|
|
471
|
+
placedNodes = [...groupNodes, ...result.nodes];
|
|
472
|
+
labelPositions = result.edgeLabelPositions;
|
|
473
|
+
elkPathStrings = result.edgePaths;
|
|
474
|
+
elkPathPoints = result.edgePathPoints;
|
|
475
|
+
}
|
|
476
|
+
catch (err) {
|
|
477
|
+
// Fall back to the (unpositioned) grid if ELK is unavailable.
|
|
478
|
+
console.warn('[subsystem-graph] ELK layout failed, using manual positions:', err);
|
|
479
|
+
}
|
|
480
|
+
}
|
|
481
|
+
// Stamp ELK-computed label midpoints onto edge data so the overlay can
|
|
482
|
+
// position labels at the actual path midpoint (not the node-center midpoint).
|
|
483
|
+
for (const e of edges) {
|
|
484
|
+
const pos = labelPositions.get(e.id);
|
|
485
|
+
if (pos) {
|
|
486
|
+
const d = e.data;
|
|
487
|
+
d.labelX = pos.x;
|
|
488
|
+
d.labelY = pos.y;
|
|
489
|
+
}
|
|
490
|
+
const elkP = elkPathStrings.get(e.id);
|
|
491
|
+
if (elkP) {
|
|
492
|
+
const d = e.data;
|
|
493
|
+
d.elkPath = elkP;
|
|
494
|
+
}
|
|
495
|
+
const pts = elkPathPoints.get(e.id);
|
|
496
|
+
if (pts && pts.length > 1) {
|
|
497
|
+
const d = e.data;
|
|
498
|
+
d.pathLength = calculatePathLength(pts);
|
|
499
|
+
}
|
|
500
|
+
}
|
|
501
|
+
return { nodes: placedNodes, edges, regions };
|
|
502
|
+
}
|
|
503
|
+
//# sourceMappingURL=model.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"model.js","sourceRoot":"","sources":["../../src/subsystem/model.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,OAAO,EACL,UAAU,GAGX,MAAM,eAAe,CAAC;AACvB,OAAO,EAAE,gBAAgB,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AAoO3E;;;;;;;;;;GAUG;AACH,MAAM,UAAU,oBAAoB,CAClC,MAA0B,EAC1B,SAAsC,EACtC,YAAqB,EACrB,IAAa,EACb,UAAmB;IAEnB,IAAI,IAAwB,CAAC;IAC7B,IAAI,MAAM,IAAI,MAAM,CAAC,IAAI,EAAE,EAAE;QAC3B,IAAI,GAAG,MAAM,CAAC;KACf;SAAM,IAAI,SAAS,KAAK,QAAQ,IAAI,IAAI,EAAE;QACzC,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC;QACzC,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC,CAAC,kBAAkB;QAC9D,IAAI,KAAK;YAAE,IAAI,GAAG,KAAK,CAAC;KACzB;IACD,IAAI,CAAC,IAAI;QAAE,IAAI,GAAG,YAAY,IAAI,UAAU,CAAC;IAE7C,8EAA8E;IAC9E,0EAA0E;IAC1E,uEAAuE;IACvE,0EAA0E;IAC1E,wBAAwB;IACxB,iEAAiE;IACjE,IAAI,UAAU,KAAK,WAAW,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE;QACvD,OAAO,IAAI,IAAI,GAAG,CAAC;KACpB;IACD,IAAI,CAAC,SAAS,KAAK,UAAU,IAAI,SAAS,KAAK,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE;QAChF,IAAI,GAAG,GAAG,IAAI,IAAI,CAAC;KACpB;IACD,IACE,CAAC,SAAS,KAAK,WAAW;QACxB,SAAS,KAAK,YAAY;QAC1B,SAAS,KAAK,MAAM,CAAC;QACvB,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,EACpB;QACA,IAAI,GAAG,GAAG,IAAI,KAAK,CAAC;KACrB;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED;;;;;;;;;;;GAWG;AACH,MAAM,UAAU,UAAU,CAAC,IAAY;IACrC,MAAM,KAAK,GAAG,qBAAqB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC/C,IAAI,CAAC,KAAK;QAAE,OAAO,IAAI,CAAC;IACxB,IAAI,QAAQ,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;IACzC,MAAM,EAAE,GAAG,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;IACjC,IAAI,EAAE,GAAG,CAAC;QAAE,QAAQ,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,oBAAoB;IAClE,IAAI,QAAQ,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE;QAClC,OAAO,GAAG,QAAQ,CAAC,KAAK,CAAC,SAAS,CAAC,MAAM,CAAC,UAAU,CAAC;KACtD;IACD,OAAO,QAAQ,CAAC;AAClB,CAAC;AA4BD,uDAAuD;AACvD,MAAM,UAAU,kBAAkB,CAAC,UAAkB;IACnD,OAAO,WAAW,UAAU,EAAE,CAAC;AACjC,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,mBAAmB,CACjC,GAA+C;IAE/C,MAAM,SAAS,GAAG,IAAI,GAAG,EAAoB,CAAC;IAC9C,KAAK,MAAM,CAAC,IAAI,GAAG,CAAC,UAAU,EAAE;QAC9B,MAAM,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,IAAI,EAAE,CAAC;QAC5B,IAAI,CAAC,CAAC;YAAE,SAAS;QACjB,MAAM,IAAI,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;QACpC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;QAChB,SAAS,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC;KACxB;IACD,OAAO,CAAC,GAAG,SAAS,CAAC,OAAO,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,SAAS,CAAC,EAAE,EAAE,CAAC,CAAC;QACzD,GAAG;QACH,KAAK,EAAE,GAAG;QACV,SAAS;KACV,CAAC,CAAC,CAAC;AACN,CAAC;AAuCD,MAAM,CAAC,MAAM,eAAe,GAA2C;IACrE,OAAO,EAAE,SAAS;IAClB,YAAY,EAAE,SAAS;IACvB,UAAU,EAAE,SAAS;IACrB,OAAO,EAAE,SAAS;IAClB,KAAK,EAAE,SAAS;IAChB,OAAO,EAAE,SAAS;IAClB,QAAQ,EAAE,SAAS;IACnB,UAAU,EAAE,SAAS;IACrB,QAAQ,EAAE,SAAS;IACnB,IAAI,EAAE,SAAS;IACf,MAAM,EAAE,SAAS;IACjB,UAAU,EAAE,SAAS;IACrB,QAAQ,EAAE,SAAS;IACnB,KAAK,EAAE,SAAS;IAChB,QAAQ,EAAE,SAAS;IACnB,MAAM,EAAE,SAAS;IACjB,KAAK,EAAE,SAAS;IAChB,OAAO,EAAE,SAAS;IAClB,gBAAgB,EAAE,SAAS,EAAE,SAAS;CACvC,CAAC;AAEF,MAAM,CAAC,MAAM,eAAe,GAAkE;IAC5F,OAAO,EAAE,OAAO;IAChB,YAAY,EAAE,OAAO;IACrB,UAAU,EAAE,OAAO;IACnB,OAAO,EAAE,OAAO;IAChB,KAAK,EAAE,OAAO;IACd,OAAO,EAAE,QAAQ;IACjB,QAAQ,EAAE,QAAQ;IAClB,UAAU,EAAE,QAAQ;IACpB,QAAQ,EAAE,QAAQ;IAClB,IAAI,EAAE,OAAO;IACb,MAAM,EAAE,OAAO;IACf,UAAU,EAAE,QAAQ;IACpB,QAAQ,EAAE,OAAO;IACjB,KAAK,EAAE,OAAO;IACd,QAAQ,EAAE,OAAO;IACjB,MAAM,EAAE,OAAO;IACf,KAAK,EAAE,OAAO;IACd,OAAO,EAAE,QAAQ;IACjB,gBAAgB,EAAE,QAAQ;CAC3B,CAAC;AAEF;mDACmD;AACnD,MAAM,CAAC,MAAM,sBAAsB,GAAgD;IACjF,CAAC,SAAS,EAAE,0CAA0C,EAAE,IAAI,CAAC;IAC7D,CAAC,cAAc,EAAE,kCAAkC,EAAE,IAAI,CAAC;IAC1D,CAAC,YAAY,EAAE,yBAAyB,EAAE,IAAI,CAAC;IAC/C,CAAC,SAAS,EAAE,2BAA2B,EAAE,IAAI,CAAC;IAC9C,CAAC,OAAO,EAAE,wCAAwC,EAAE,IAAI,CAAC;IACzD,CAAC,SAAS,EAAE,mBAAmB,EAAE,IAAI,CAAC;IACtC,CAAC,UAAU,EAAE,mBAAmB,EAAE,IAAI,CAAC;IACvC,CAAC,YAAY,EAAE,iCAAiC,EAAE,IAAI,CAAC;IACvD,CAAC,UAAU,EAAE,eAAe,EAAE,IAAI,CAAC;IACnC,CAAC,MAAM,EAAE,iDAAiD,EAAE,KAAK,CAAC;IAClE,CAAC,QAAQ,EAAE,iCAAiC,EAAE,IAAI,CAAC;IACnD,CAAC,YAAY,EAAE,sCAAsC,EAAE,IAAI,CAAC;IAC5D,CAAC,UAAU,EAAE,qCAAqC,EAAE,IAAI,CAAC;IACzD,CAAC,OAAO,EAAE,oCAAoC,EAAE,KAAK,CAAC;IACtD,CAAC,UAAU,EAAE,+BAA+B,EAAE,KAAK,CAAC;IACpD,CAAC,QAAQ,EAAE,sCAAsC,EAAE,IAAI,CAAC;IACxD,CAAC,OAAO,EAAE,oCAAoC,EAAE,IAAI,CAAC;IACrD,CAAC,SAAS,EAAE,2CAA2C,EAAE,KAAK,CAAC;IAC/D,CAAC,gBAAgB,EAAE,sBAAsB,EAAE,KAAK,CAAC;CAClD,CAAC;AAEF,+EAA+E;AAC/E,MAAM,UAAU,YAAY,CAAC,IAAY;IACvC,MAAM,OAAO,GAAG;QACd,SAAS;QACT,SAAS;QACT,SAAS;QACT,SAAS;QACT,SAAS;QACT,SAAS;KACV,CAAC;IACF,IAAI,CAAC,GAAG,CAAC,CAAC;IACV,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE;QAAE,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;IAC9E,OAAO,OAAO,CAAC,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;AACrC,CAAC;AAED;;;;8BAI8B;AAC9B,MAAM,CAAC,MAAM,UAAU,GAA2C;IAChE,KAAK,EAAE,SAAS;IAChB,OAAO,EAAE,SAAS,EAAE,yBAAyB;CAC9C,CAAC;AAEF,MAAM,CAAC,MAAM,UAAU,GAA2C;IAChE,KAAK,EAAE,OAAO;IACd,OAAO,EAAE,SAAS;CACnB,CAAC;AAEF;;;;;GAKG;AACH,MAAM,UAAU,mBAAmB,CAAC,SAInC;IACC,MAAM,cAAc,GAClB,SAAS,CAAC,SAAS,KAAK,YAAY,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,SAAS,CAAC,SAAS,CAAC;IAC5E,IAAI,SAAS,CAAC,UAAU,IAAI,SAAS,CAAC,SAAS,EAAE;QAC/C,OAAO,GAAG,SAAS,CAAC,SAAS,MAAM,SAAS,CAAC,UAAU,EAAE,CAAC;KAC3D;IACD,IAAI,SAAS,CAAC,UAAU;QAAE,OAAO,SAAS,CAAC,UAAU,CAAC;IACtD,OAAO,cAAc,IAAI,EAAE,CAAC;AAC9B,CAAC;AAED,6DAA6D;AAC7D,MAAM,CAAC,MAAM,kBAAkB,GAAG,GAAG,CAAC;AACtC,2EAA2E;AAC3E,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAAC,CAAC;AAClC,qEAAqE;AACrE,MAAM,cAAc,GAAG,CAAC,CAAC;AACzB,kDAAkD;AAClD,MAAM,gBAAgB,GAAG,EAAE,CAAC;AAC5B,sEAAsE;AACtE,MAAM,gBAAgB,GAAG,CAAC,CAAC;AAE3B,yDAAyD;AACzD,MAAM,UAAU,uBAAuB,CAAC,KAAa;IACnD,OAAO,CAAC,KAAK,EAAE,MAAM,IAAI,CAAC,CAAC,GAAG,gBAAgB,GAAG,gBAAgB,CAAC;AACpE,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,qBAAqB,CAAC,SAKrC;IACC,MAAM,IAAI,GAAG,uBAAuB,CAAC,mBAAmB,CAAC,SAAS,CAAC,CAAC,CAAC;IACrE,IAAI,SAAS,CAAC,IAAI,IAAI,IAAI,EAAE;QAC1B,OAAO,IAAI,CAAC,GAAG,CAAC,kBAAkB,EAAE,gBAAgB,GAAG,IAAI,GAAG,gBAAgB,CAAC,CAAC;KACjF;IACD,MAAM,KAAK,GAAG,uBAAuB,CAAC,UAAU,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC;IAClE,OAAO,IAAI,CAAC,GAAG,CACb,kBAAkB,EAClB,gBAAgB,GAAG,IAAI,GAAG,cAAc,GAAG,KAAK,GAAG,gBAAgB,CACpE,CAAC;AACJ,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,uBAAuB,CACrC,GAA2B,EAC3B,OAAkC,EAAE;IAEpC,MAAM,EAAE,YAAY,EAAE,GAAG,IAAI,CAAC;IAC9B,2EAA2E;IAC3E,yEAAyE;IACzE,oEAAoE;IACpE,yEAAyE;IACzE,MAAM,KAAK,GAAG,IAAI,GAAG,EAAgC,CAAC;IACtD,KAAK,MAAM,CAAC,IAAI,GAAG,CAAC,UAAU,EAAE;QAC9B,MAAM,SAAS,GAAG,CAAC,CAAC,OAAO,IAAI,CAAC,CAAC,IAAI,CAAC;QACtC,MAAM,IAAI,GAAG,KAAK,CAAC,GAAG,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC;QACxC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACb,KAAK,CAAC,GAAG,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;KAC5B;IAED,MAAM,KAAK,GAAyB,EAAE,CAAC;IACvC,MAAM,IAAI,GAAG,CAAC,CAAC;IACf,MAAM,KAAK,GAAG,GAAG,CAAC;IAClB,MAAM,KAAK,GAAG,GAAG,CAAC;IAClB,MAAM,GAAG,GAAG,EAAE,CAAC;IACf,MAAM,SAAS,GAAG,EAAE,CAAC;IAErB,IAAI,OAAO,GAAG,GAAG,CAAC;IAClB,KAAK,MAAM,KAAK,IAAI,KAAK,CAAC,MAAM,EAAE,EAAE;QAClC,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC;QAC5C,MAAM,QAAQ,GAAG,KAAK,GAAG,IAAI,CAAC;QAE9B,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE;YACrB,MAAM,GAAG,GAAG,CAAC,GAAG,IAAI,CAAC;YACrB,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC;YACjC,0EAA0E;YAC1E,uEAAuE;YACvE,MAAM,IAAI,GAAG,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC;iBAC5D,MAAM,CAAC,CAAC,CAAC,EAAe,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;iBAC/B,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;YAC1C,MAAM,GAAG,GAAG,YAAY,IAAI,GAAG,CAAC;YAChC,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC,IAAI,EAAE,MAAM,IAAI,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;YACxE,0EAA0E;YAC1E,4DAA4D;YAC5D,MAAM,WAAW,GAAG,qBAAqB,CAAC,CAAC,CAAC,CAAC;YAC7C,MAAM,UAAU,GAAG,EAAE,CAAC,CAAC,oCAAoC;YAC3D,MAAM,SAAS,GAAG,CAAC,CAAC,CAAC,uBAAuB;YAC5C,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,WAAW,EAAE,SAAS,GAAG,UAAU,GAAG,SAAS,CAAC,CAAC;YAC3E,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,WAAW,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC,CAAC;YACjE,MAAM,UAAU,GAAG,CAAC,CAAC,OAAO,EAAE,IAAI,EAAE,CAAC;YACrC,KAAK,CAAC,IAAI,CAAC;gBACT,EAAE,EAAE,CAAC,CAAC,EAAE;gBACR,IAAI,EAAE,qBAAqB;gBAC3B,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,kBAAkB,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gBACnE,QAAQ,EAAE,EAAE,CAAC,EAAE,GAAG,GAAG,GAAG,GAAG,KAAK,EAAE,CAAC,EAAE,OAAO,GAAG,GAAG,GAAG,KAAK,EAAE;gBAC5D,KAAK,EAAE,SAAS;gBAChB,MAAM,EAAE,EAAE;gBACV,IAAI,EAAE,EAAE,SAAS,EAAE,CAAC,EAAE;aACvB,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;QACH,OAAO,IAAI,QAAQ,GAAG,GAAG,GAAG,CAAC,GAAG,SAAS,CAAC;KAC3C;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,wBAAwB,CACtC,GAA+C;IAE/C,OAAO,mBAAmB,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;QAC/C,EAAE,EAAE,kBAAkB,CAAC,MAAM,CAAC,GAAG,CAAC;QAClC,IAAI,EAAE,iBAAiB;QACvB,QAAQ,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE;QACxB,KAAK,EAAE,GAAG;QACV,MAAM,EAAE,GAAG;QACX,IAAI,EAAE,EAAE,MAAM,EAAE;KACjB,CAAC,CAAC,CAAC;AACN,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,uBAAuB,CAAC,GAA2B;IACjE,MAAM,OAAO,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IACzD,MAAM,KAAK,GAAyB,EAAE,CAAC;IAEvC,KAAK,MAAM,CAAC,IAAI,GAAG,CAAC,KAAK,EAAE;QACzB,MAAM,KAAK,GAAG,eAAe,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;QAC3C,MAAM,KAAK,GAAG,eAAe,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;QAC3C,iFAAiF;QACjF,MAAM,UAAU,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;QACtC,MAAM,QAAQ,GAAG,UAAU,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QAExD,KAAK,CAAC,IAAI,CAAC;YACT,EAAE,EAAE,CAAC,CAAC,EAAE;YACR,MAAM,EAAE,CAAC,CAAC,IAAI;YACd,MAAM,EAAE,QAAQ;YAChB,IAAI,EAAE,EAAE,SAAS,EAAE,CAAC,CAAC,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE;YAC9C,IAAI,EAAE,gBAAgB;YACtB,SAAS,EAAE,EAAE,IAAI,EAAE,UAAU,CAAC,WAAW,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE;YACzE,KAAK,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,eAAe,EAAE,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,EAAE;YACxF,yEAAyE;YACzE,2DAA2D;YAC3D,KAAK,EAAE,CAAC,CAAC,SAAS;YAClB,yEAAyE;YACzE,uEAAuE;SACxE,CAAC,CAAC;KACJ;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED,mFAAmF;AACnF,MAAM,UAAU,uBAAuB,CACrC,GAAyD;IAEzD,MAAM,UAAU,GAAG,GAAG,CAAC,UAAU;SAC9B,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,EAAE,EAAE,CACrE,CAAC,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,IAAI,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,OAAO,IAAI,EAAE,EAAE,OAAO,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;SAC1F,IAAI,EAAE;SACN,IAAI,CAAC,IAAI,CAAC,CAAC;IACd,MAAM,OAAO,GAAG,GAAG,CAAC,KAAK;SACtB,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,SAAS,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,SAAS,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;SAC1E,IAAI,EAAE;SACN,IAAI,CAAC,IAAI,CAAC,CAAC;IACd,OAAO,GAAG,UAAU,IAAI,OAAO,EAAE,CAAC;AACpC,CAAC;AAED;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,mBAAmB,CACvC,GAA2B,EAC3B,OAAyI,EAAE;IAM3I,MAAM,EAAE,YAAY,EAAE,cAAc,EAAE,cAAc,EAAE,eAAe,EAAE,GAAG,IAAI,CAAC;IAC/E,MAAM,KAAK,GAAG,uBAAuB,CAAC,GAAG,EAAE,EAAE,YAAY,EAAE,CAAC,CAAC;IAC7D,MAAM,KAAK,GAAG,uBAAuB,CAAC,GAAG,CAAC,CAAC;IAC3C,4EAA4E;IAC5E,yEAAyE;IACzE,mCAAmC;IACnC,MAAM,OAAO,GAAG,mBAAmB,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,MAAM,IAAI,CAAC,CAAC,CAAC;IAChF,MAAM,UAAU,GAAG,IAAI,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;IACtD,KAAK,MAAM,CAAC,IAAI,KAAK,EAAE;QACrB,IAAI,CAAC,CAAC,IAAI,KAAK,qBAAqB;YAAE,SAAS;QAC/C,MAAM,IAAI,GAAI,CAAC,CAAC,IAA+B,CAAC,SAAS,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;QAC3E,IAAI,IAAI,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE;YACjC,OAAQ,CAA2B,CAAC,QAAQ,CAAC;SAC9C;KACF;IAED,2EAA2E;IAC3E,iDAAiD;IACjD,MAAM,OAAO,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IACzD,MAAM,WAAW,GAAa,EAAE,CAAC;IACjC,KAAK,MAAM,CAAC,IAAI,GAAG,CAAC,KAAK,EAAE;QACzB,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE;YACtB,MAAM,KAAK,GAAG,YAAY,CAAC,CAAC,EAAE,EAAE,CAAC;YACjC,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,KAAK,CAAC;gBAAE,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;SAC3D;KACF;IACD,KAAK,MAAM,KAAK,IAAI,WAAW,EAAE;QAC7B,MAAM,KAAK,GAAG,KAAK,CAAC,OAAO,CAAC,YAAY,EAAE,EAAE,CAAC,CAAC;QAC9C,MAAM,YAAY,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC;QACpE,KAAK,CAAC,IAAI,CAAC;YACT,EAAE,EAAE,KAAK;YACT,IAAI,EAAE,qBAAqB;YAC3B,QAAQ,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE;YACxB,KAAK,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,YAAY,GAAG,EAAE,CAAC;YACzC,MAAM,EAAE,EAAE;YACV,IAAI,EAAE;gBACJ,SAAS,EAAE;oBACT,EAAE,EAAE,KAAK;oBACT,IAAI,EAAE,KAAK;oBACX,SAAS,EAAE,UAAU;oBACrB,IAAI,EAAE,UAAU;oBAChB,IAAI,EAAE,EAAE;oBACR,OAAO,EAAE,sDAAsD;iBAChE;aACF;YACD,SAAS,EAAE,KAAK;SACjB,CAAC,CAAC;KACJ;IAED,2EAA2E;IAC3E,IAAI,cAAc,IAAI,cAAc,CAAC,IAAI,GAAG,CAAC,EAAE;QAC7C,KAAK,MAAM,CAAC,IAAI,KAAK,EAAE;YACrB,MAAM,EAAE,GAAG,cAAc,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;YACpC,IAAI,EAAE;gBAAE,CAAC,CAAC,KAAK,GAAG,EAAE,CAAC;SACtB;KACF;IACD,IAAI,eAAe,IAAI,eAAe,CAAC,IAAI,GAAG,CAAC,EAAE;QAC/C,KAAK,MAAM,CAAC,IAAI,KAAK,EAAE;YACrB,MAAM,EAAE,GAAG,eAAe,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;YACrC,IAAI,EAAE;gBAAE,CAAC,CAAC,MAAM,GAAG,EAAE,CAAC;SACvB;KACF;IAED,sEAAsE;IACtE,yEAAyE;IACzE,IAAI,WAAW,GAAG,KAAK,CAAC;IACxB,IAAI,cAAc,GAAG,IAAI,GAAG,EAAoC,CAAC;IACjE,IAAI,cAAc,GAAG,IAAI,GAAG,EAAkB,CAAC;IAC/C,IAAI,aAAa,GAAG,IAAI,GAAG,EAAsC,CAAC;IAClE,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE;QACpB,IAAI;YACF,MAAM,MAAM,GAAG,MAAM,gBAAgB,CAAC,KAAK,EAAE,KAAK,EAAE;gBAClD,YAAY,EAAE,YAAY;gBAC1B,SAAS,EAAE,OAAO;gBAClB,WAAW,EAAE,EAAE;gBACf,WAAW,EAAE,EAAE;gBACf,eAAe,EAAE,EAAE;gBACnB,iBAAiB,EAAE,GAAG;gBACtB,qBAAqB,EAAE,KAAK;gBAC5B,UAAU,EAAE,cAAc,KAAK,KAAK,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,QAAQ,EAAE;gBAClG,MAAM,EAAE,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;oBAC1B,EAAE,EAAE,kBAAkB,CAAC,CAAC,CAAC,GAAG,CAAC;oBAC7B,SAAS,EAAE,CAAC,CAAC,SAAS;iBACvB,CAAC,CAAC;aACJ,CAAC,CAAC;YACH,MAAM,UAAU,GAAyB,OAAO,CAAC,OAAO,CAAC,CAAC,MAAM,EAAE,EAAE;gBAClE,MAAM,MAAM,GAAG,MAAM,CAAC,WAAW,CAAC,GAAG,CAAC,kBAAkB,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC;gBACtE,IAAI,CAAC,MAAM;oBAAE,OAAO,EAAE,CAAC;gBACvB,MAAM,KAAK,GAAuB;oBAChC,EAAE,EAAE,kBAAkB,CAAC,MAAM,CAAC,GAAG,CAAC;oBAClC,IAAI,EAAE,iBAAiB;oBACvB,QAAQ,EAAE,EAAE,CAAC,EAAE,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,MAAM,CAAC,CAAC,EAAE;oBACtC,KAAK,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,MAAM,CAAC,KAAK,CAAC;oBAClC,MAAM,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,MAAM,CAAC,MAAM,CAAC;oBACpC,IAAI,EAAE,EAAE,MAAM,EAAE;iBACjB,CAAC;gBACF,OAAO,CAAC,KAAK,CAAC,CAAC;YACjB,CAAC,CAAC,CAAC;YACH,6DAA6D;YAC7D,WAAW,GAAG,CAAC,GAAG,UAAU,EAAE,GAAI,MAAM,CAAC,KAA8B,CAAC,CAAC;YACzE,cAAc,GAAG,MAAM,CAAC,kBAAkB,CAAC;YAC3C,cAAc,GAAG,MAAM,CAAC,SAAS,CAAC;YAClC,aAAa,GAAG,MAAM,CAAC,cAAc,CAAC;SACvC;QAAC,OAAO,GAAG,EAAE;YACZ,8DAA8D;YAC9D,OAAO,CAAC,IAAI,CAAC,8DAA8D,EAAE,GAAG,CAAC,CAAC;SACnF;KACF;IAED,uEAAuE;IACvE,8EAA8E;IAC9E,KAAK,MAAM,CAAC,IAAI,KAAK,EAAE;QACrB,MAAM,GAAG,GAAG,cAAc,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;QACrC,IAAI,GAAG,EAAE;YACP,MAAM,CAAC,GAAI,CAAwB,CAAC,IAA8B,CAAC;YACnE,CAAC,CAAC,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC;YACjB,CAAC,CAAC,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC;SAClB;QACD,MAAM,IAAI,GAAG,cAAc,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;QACtC,IAAI,IAAI,EAAE;YACR,MAAM,CAAC,GAAI,CAAwB,CAAC,IAA8B,CAAC;YACnE,CAAC,CAAC,OAAO,GAAG,IAAI,CAAC;SAClB;QACD,MAAM,GAAG,GAAG,aAAa,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;QACpC,IAAI,GAAG,IAAI,GAAG,CAAC,MAAM,GAAG,CAAC,EAAE;YACzB,MAAM,CAAC,GAAI,CAAwB,CAAC,IAA8B,CAAC;YACnE,CAAC,CAAC,UAAU,GAAG,mBAAmB,CAAC,GAAG,CAAC,CAAC;SACzC;KACF;IAED,OAAO,EAAE,KAAK,EAAE,WAAW,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC;AAChD,CAAC"}
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Subsystem component/group node + edge renderers.
|
|
3
|
+
*
|
|
4
|
+
* Lightweight, purpose-built for the subsystem component graph: a component
|
|
5
|
+
* renders its name (kind-tagged, colored by package) plus its symbol/purpose.
|
|
6
|
+
* Groups render as package containers. Clicking
|
|
7
|
+
* a component calls `onSelect` (to open the entry point / file).
|
|
8
|
+
*/
|
|
9
|
+
/// <reference types="react" />
|
|
10
|
+
import { type Node, type NodeProps, type EdgeProps } from '@xyflow/react';
|
|
11
|
+
import { type SubsystemGraphNodeData, type SubsystemGroupNodeData, type SubsystemGraphEdge } from './model';
|
|
12
|
+
export declare const CONSTRUCT_LABEL: Record<string, string>;
|
|
13
|
+
export interface SubsystemGraphCallbacks {
|
|
14
|
+
/** Click a component — open its file/entry point. */
|
|
15
|
+
onSelect?: (componentId: string) => void;
|
|
16
|
+
/** Click the filename badge — open that component's file in the drawer
|
|
17
|
+
* (same path as clicking the file link in the declaration panel). */
|
|
18
|
+
onOpenFile?: (componentId: string) => void;
|
|
19
|
+
/** Click an edge (or its label) — select the relationship. */
|
|
20
|
+
onEdgeSelect?: (edgeId: string) => void;
|
|
21
|
+
/** Hover a component (null on leave) — associates it with the file tree. */
|
|
22
|
+
onHover?: (componentId: string | null) => void;
|
|
23
|
+
/** Upper bound for node width; nodes grow with content up to this, then wrap. */
|
|
24
|
+
maxNodeWidth?: number;
|
|
25
|
+
}
|
|
26
|
+
/** Root callbacks carried through node data (injected by the graph component). */
|
|
27
|
+
export declare const SUBSYSTEM_CALLBACKS: SubsystemGraphCallbacks;
|
|
28
|
+
export declare function SubsystemComponentNode(props: NodeProps<Node<SubsystemGraphNodeData, 'subsystem-component'>>): import("react").JSX.Element;
|
|
29
|
+
/**
|
|
30
|
+
* Process boundary frame — a React Flow parent node. Members render inside
|
|
31
|
+
* via `parentId`; this draws the labeled container only (no handles, no
|
|
32
|
+
* selection). The border color derives deterministically from the process key
|
|
33
|
+
* so each deployment unit reads as its own region.
|
|
34
|
+
*/
|
|
35
|
+
export declare function SubsystemGroupNode(props: NodeProps<Node<SubsystemGroupNodeData, 'subsystem-group'>>): import("react").JSX.Element | null;
|
|
36
|
+
/** `#rrggbb` + alpha → `#rrggbbaa`. Used to dim a stroke/marker by color so
|
|
37
|
+
* each opacity gets its own SVG marker id — path `opacity` leaks across every
|
|
38
|
+
* edge that shares a `url(#marker)` (the focused edge's arrowhead dims). */
|
|
39
|
+
export declare function hexWithAlpha(hex: string, alpha: number): string;
|
|
40
|
+
/**
|
|
41
|
+
* File-open spotlight flag for a node. `true` = lives in the open file,
|
|
42
|
+
* `false` = dim, `undefined` = render neutrally.
|
|
43
|
+
*
|
|
44
|
+
* Focused-edge endpoints stay neutral when they don't live in the open file
|
|
45
|
+
* (the target of a focused edge must not dim with the rest).
|
|
46
|
+
*/
|
|
47
|
+
export declare function fileMatchForNode(nodeFile: string | undefined, openFile: string | null, isFocusEndpoint: boolean): boolean | undefined;
|
|
48
|
+
/**
|
|
49
|
+
* Hide / dim a node or edge while flows are open.
|
|
50
|
+
* - not in any opened flow → hidden
|
|
51
|
+
* - in an opened flow, but not the selected flow/step → dimmed
|
|
52
|
+
* - in the selected flow or step (or opened with nothing selected) → full
|
|
53
|
+
*/
|
|
54
|
+
export declare function flowElementVisibility(opts: {
|
|
55
|
+
inOpened: boolean;
|
|
56
|
+
inSelected: boolean;
|
|
57
|
+
anyOpened: boolean;
|
|
58
|
+
anySelected: boolean;
|
|
59
|
+
}): {
|
|
60
|
+
hidden: boolean;
|
|
61
|
+
dimmed: boolean;
|
|
62
|
+
};
|
|
63
|
+
export declare const EDGE_DIM_ALPHA = 0.15;
|
|
64
|
+
/** Subsystem edge — SVG path only. The mechanism label is rendered as an
|
|
65
|
+
* absolutely-positioned HTML overlay OUTSIDE the ReactFlow tree (by the
|
|
66
|
+
* parent Inner component) so it sits above the pane and receives pointer
|
|
67
|
+
* events. */
|
|
68
|
+
export declare function SubsystemEdge({ data, markerEnd, }: EdgeProps<SubsystemGraphEdge>): import("react").JSX.Element;
|
|
69
|
+
//# sourceMappingURL=nodes.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"nodes.d.ts","sourceRoot":"","sources":["../../src/subsystem/nodes.tsx"],"names":[],"mappings":"AAAA;;;;;;;GAOG;;AAGH,OAAO,EAGL,KAAK,IAAI,EACT,KAAK,SAAS,EACd,KAAK,SAAS,EACf,MAAM,eAAe,CAAC;AAEvB,OAAO,EAUL,KAAK,sBAAsB,EAC3B,KAAK,sBAAsB,EAC3B,KAAK,kBAAkB,EACxB,MAAM,SAAS,CAAC;AAIjB,eAAO,MAAM,eAAe,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAUlD,CAAC;AAgBF,MAAM,WAAW,uBAAuB;IACtC,qDAAqD;IACrD,QAAQ,CAAC,EAAE,CAAC,WAAW,EAAE,MAAM,KAAK,IAAI,CAAC;IACzC;0EACsE;IACtE,UAAU,CAAC,EAAE,CAAC,WAAW,EAAE,MAAM,KAAK,IAAI,CAAC;IAC3C,8DAA8D;IAC9D,YAAY,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,CAAC;IACxC,4EAA4E;IAC5E,OAAO,CAAC,EAAE,CAAC,WAAW,EAAE,MAAM,GAAG,IAAI,KAAK,IAAI,CAAC;IAC/C,iFAAiF;IACjF,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,kFAAkF;AAClF,eAAO,MAAM,mBAAmB,EAAE,uBAA4B,CAAC;AAE/D,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,SAAS,CAAC,IAAI,CAAC,sBAAsB,EAAE,qBAAqB,CAAC,CAAC,+BA6M3G;AAED;;;;;GAKG;AACH,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,SAAS,CAAC,IAAI,CAAC,sBAAsB,EAAE,iBAAiB,CAAC,CAAC,sCAmDnG;AAED;;6EAE6E;AAC7E,wBAAgB,YAAY,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,CAQ/D;AAED;;;;;;GAMG;AACH,wBAAgB,gBAAgB,CAC9B,QAAQ,EAAE,MAAM,GAAG,SAAS,EAC5B,QAAQ,EAAE,MAAM,GAAG,IAAI,EACvB,eAAe,EAAE,OAAO,GACvB,OAAO,GAAG,SAAS,CAKrB;AAED;;;;;GAKG;AACH,wBAAgB,qBAAqB,CAAC,IAAI,EAAE;IAC1C,QAAQ,EAAE,OAAO,CAAC;IAClB,UAAU,EAAE,OAAO,CAAC;IACpB,SAAS,EAAE,OAAO,CAAC;IACnB,WAAW,EAAE,OAAO,CAAC;CACtB,GAAG;IAAE,MAAM,EAAE,OAAO,CAAC;IAAC,MAAM,EAAE,OAAO,CAAA;CAAE,CAMvC;AAED,eAAO,MAAM,cAAc,OAAO,CAAC;AAEnC;;;cAGc;AACd,wBAAgB,aAAa,CAAC,EAC5B,IAAI,EACJ,SAAS,GACV,EAAE,SAAS,CAAC,kBAAkB,CAAC,+BAsC/B"}
|