@principal-ai/subsystems-react 0.20.6 → 0.21.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -1
- package/dist/graphify/anchor.d.ts +17 -0
- package/dist/graphify/anchor.d.ts.map +1 -1
- package/dist/graphify/anchor.js +41 -0
- package/dist/graphify/anchor.js.map +1 -1
- package/dist/graphify/consolidated.d.ts +40 -1
- package/dist/graphify/consolidated.d.ts.map +1 -1
- package/dist/index.d.ts +5 -5
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -2
- package/dist/index.js.map +1 -1
- package/dist/pierre/{PierreThroughlineCodeView.d.ts → PierreWalkthroughCodeView.d.ts} +7 -7
- package/dist/pierre/{PierreThroughlineCodeView.d.ts.map → PierreWalkthroughCodeView.d.ts.map} +1 -1
- package/dist/pierre/{PierreThroughlineCodeView.js → PierreWalkthroughCodeView.js} +28 -36
- package/dist/pierre/PierreWalkthroughCodeView.js.map +1 -0
- package/dist/pierre/index.d.ts +2 -2
- package/dist/pierre/index.js +1 -1
- package/dist/pierre/pierreFileLang.d.ts +1 -1
- package/dist/pierre/pierreFileLang.js +1 -1
- package/dist/stories/Subsystem/ComponentGraph/fixtures.d.ts +14 -2
- package/dist/stories/Subsystem/ComponentGraph/fixtures.d.ts.map +1 -1
- package/dist/stories/Subsystem/ComponentGraph/fixtures.js +86 -20
- package/dist/stories/Subsystem/ComponentGraph/fixtures.js.map +1 -1
- package/dist/subsystem/FileDrawer.d.ts +2 -2
- package/dist/subsystem/FileDrawer.js +2 -2
- package/dist/subsystem/SubsystemComponentGraph.d.ts +25 -24
- package/dist/subsystem/SubsystemComponentGraph.d.ts.map +1 -1
- package/dist/subsystem/SubsystemComponentGraph.js +204 -199
- package/dist/subsystem/SubsystemComponentGraph.js.map +1 -1
- package/dist/subsystem/formatDeclaration.d.ts +2 -1
- package/dist/subsystem/formatDeclaration.d.ts.map +1 -1
- package/dist/subsystem/formatDeclaration.js +57 -33
- package/dist/subsystem/formatDeclaration.js.map +1 -1
- package/dist/subsystem/model.d.ts +85 -35
- package/dist/subsystem/model.d.ts.map +1 -1
- package/dist/subsystem/model.js +85 -6
- package/dist/subsystem/model.js.map +1 -1
- package/dist/subsystem/nodes.d.ts.map +1 -1
- package/dist/subsystem/nodes.js +30 -13
- package/dist/subsystem/nodes.js.map +1 -1
- package/dist/subsystem/tokenizeComponent.js +2 -2
- package/dist/subsystem/tokenizeComponent.js.map +1 -1
- package/package.json +3 -3
- package/src/graphify/anchor.test.ts +31 -2
- package/src/graphify/anchor.ts +46 -0
- package/src/graphify/consolidated.ts +43 -1
- package/src/index.ts +13 -5
- package/src/pierre/{PierreThroughlineCodeView.tsx → PierreWalkthroughCodeView.tsx} +39 -47
- package/src/pierre/index.ts +2 -2
- package/src/pierre/pierreFileLang.ts +1 -1
- package/src/stories/Pierre/CodeView.stories.tsx +3 -3
- package/src/stories/Subsystem/ComponentDeclarationAudit.stories.tsx +14 -14
- package/src/stories/Subsystem/ComponentGraph/Appearance.stories.tsx +13 -15
- package/src/stories/Subsystem/ComponentGraph/Basics.stories.tsx +8 -8
- package/src/stories/Subsystem/ComponentGraph/Captures.stories.tsx +14 -14
- package/src/stories/Subsystem/ComponentGraph/CustomEntities.stories.tsx +11 -10
- package/src/stories/Subsystem/ComponentGraph/DetailPanel.stories.tsx +13 -14
- package/src/stories/Subsystem/ComponentGraph/Flows.stories.tsx +31 -66
- package/src/stories/Subsystem/ComponentGraph/FrameworkStereotype.stories.tsx +2 -2
- package/src/stories/Subsystem/ComponentGraph/GraphTitle.stories.tsx +4 -4
- package/src/stories/Subsystem/ComponentGraph/Processes.stories.tsx +3 -3
- package/src/stories/Subsystem/ComponentGraph/Proposed.stories.tsx +1 -1
- package/src/stories/Subsystem/ComponentGraph/Scenarios.stories.tsx +518 -33
- package/src/stories/Subsystem/ComponentGraph/Spotlights.stories.tsx +13 -13
- package/src/stories/Subsystem/ComponentGraph/fixtures.ts +105 -21
- package/src/subsystem/FileDrawer.tsx +2 -2
- package/src/subsystem/SubsystemComponentGraph.tsx +268 -259
- package/src/subsystem/formatDeclaration.test.ts +76 -1
- package/src/subsystem/formatDeclaration.ts +57 -33
- package/src/subsystem/model.test.ts +27 -15
- package/src/subsystem/model.ts +175 -45
- package/src/subsystem/nodes.tsx +47 -13
- package/src/subsystem/tokenizeComponent.ts +2 -2
- package/dist/components/ConfigurationSelector.d.ts +0 -35
- package/dist/components/ConfigurationSelector.d.ts.map +0 -1
- package/dist/components/ConfigurationSelector.js +0 -63
- package/dist/components/ConfigurationSelector.js.map +0 -1
- package/dist/components/GraphRenderer.d.ts +0 -295
- package/dist/components/GraphRenderer.d.ts.map +0 -1
- package/dist/components/GraphRenderer.js +0 -2008
- package/dist/components/GraphRenderer.js.map +0 -1
- package/dist/components/MultiCanvasRenderer.d.ts +0 -75
- package/dist/components/MultiCanvasRenderer.d.ts.map +0 -1
- package/dist/components/MultiCanvasRenderer.js +0 -203
- package/dist/components/MultiCanvasRenderer.js.map +0 -1
- package/dist/components/NodeTooltip.d.ts +0 -24
- package/dist/components/NodeTooltip.d.ts.map +0 -1
- package/dist/components/NodeTooltip.js +0 -160
- package/dist/components/NodeTooltip.js.map +0 -1
- package/dist/components/SelectionSidebar.d.ts +0 -18
- package/dist/components/SelectionSidebar.d.ts.map +0 -1
- package/dist/components/SelectionSidebar.js +0 -190
- package/dist/components/SelectionSidebar.js.map +0 -1
- package/dist/components/SequenceDiagramRenderer.d.ts +0 -77
- package/dist/components/SequenceDiagramRenderer.d.ts.map +0 -1
- package/dist/components/SequenceDiagramRenderer.js +0 -604
- package/dist/components/SequenceDiagramRenderer.js.map +0 -1
- package/dist/components/WorkflowSequenceDiagram.d.ts +0 -63
- package/dist/components/WorkflowSequenceDiagram.d.ts.map +0 -1
- package/dist/components/WorkflowSequenceDiagram.js +0 -147
- package/dist/components/WorkflowSequenceDiagram.js.map +0 -1
- package/dist/components/dashboard/DashboardRenderer.d.ts +0 -10
- package/dist/components/dashboard/DashboardRenderer.d.ts.map +0 -1
- package/dist/components/dashboard/DashboardRenderer.js +0 -179
- package/dist/components/dashboard/DashboardRenderer.js.map +0 -1
- package/dist/components/dashboard/MetricPanel.d.ts +0 -10
- package/dist/components/dashboard/MetricPanel.d.ts.map +0 -1
- package/dist/components/dashboard/MetricPanel.js +0 -103
- package/dist/components/dashboard/MetricPanel.js.map +0 -1
- package/dist/components/dashboard/MockDataProvider.d.ts +0 -30
- package/dist/components/dashboard/MockDataProvider.d.ts.map +0 -1
- package/dist/components/dashboard/MockDataProvider.js +0 -270
- package/dist/components/dashboard/MockDataProvider.js.map +0 -1
- package/dist/components/dashboard/components/BarChart.d.ts +0 -10
- package/dist/components/dashboard/components/BarChart.d.ts.map +0 -1
- package/dist/components/dashboard/components/BarChart.js +0 -167
- package/dist/components/dashboard/components/BarChart.js.map +0 -1
- package/dist/components/dashboard/components/LineChart.d.ts +0 -10
- package/dist/components/dashboard/components/LineChart.d.ts.map +0 -1
- package/dist/components/dashboard/components/LineChart.js +0 -141
- package/dist/components/dashboard/components/LineChart.js.map +0 -1
- package/dist/components/dashboard/components/MetricCard.d.ts +0 -9
- package/dist/components/dashboard/components/MetricCard.d.ts.map +0 -1
- package/dist/components/dashboard/components/MetricCard.js +0 -163
- package/dist/components/dashboard/components/MetricCard.js.map +0 -1
- package/dist/components/dashboard/components/SourceLink.d.ts +0 -9
- package/dist/components/dashboard/components/SourceLink.d.ts.map +0 -1
- package/dist/components/dashboard/components/SourceLink.js +0 -39
- package/dist/components/dashboard/components/SourceLink.js.map +0 -1
- package/dist/components/dashboard/components/TimeRangeSelector.d.ts +0 -9
- package/dist/components/dashboard/components/TimeRangeSelector.d.ts.map +0 -1
- package/dist/components/dashboard/components/TimeRangeSelector.js +0 -167
- package/dist/components/dashboard/components/TimeRangeSelector.js.map +0 -1
- package/dist/components/dashboard/components/index.d.ts +0 -6
- package/dist/components/dashboard/components/index.d.ts.map +0 -1
- package/dist/components/dashboard/components/index.js +0 -6
- package/dist/components/dashboard/components/index.js.map +0 -1
- package/dist/components/dashboard/index.d.ts +0 -6
- package/dist/components/dashboard/index.d.ts.map +0 -1
- package/dist/components/dashboard/index.js +0 -8
- package/dist/components/dashboard/index.js.map +0 -1
- package/dist/components/dashboard/types.d.ts +0 -74
- package/dist/components/dashboard/types.d.ts.map +0 -1
- package/dist/components/dashboard/types.js +0 -8
- package/dist/components/dashboard/types.js.map +0 -1
- package/dist/components/state-view/PipelineView.d.ts +0 -14
- package/dist/components/state-view/PipelineView.d.ts.map +0 -1
- package/dist/components/state-view/PipelineView.js +0 -195
- package/dist/components/state-view/PipelineView.js.map +0 -1
- package/dist/components/state-view/index.d.ts +0 -14
- package/dist/components/state-view/index.d.ts.map +0 -1
- package/dist/components/state-view/index.js +0 -12
- package/dist/components/state-view/index.js.map +0 -1
- package/dist/components/state-view/types.d.ts +0 -188
- package/dist/components/state-view/types.d.ts.map +0 -1
- package/dist/components/state-view/types.js +0 -10
- package/dist/components/state-view/types.js.map +0 -1
- package/dist/components/state-view/useStateView.d.ts +0 -32
- package/dist/components/state-view/useStateView.d.ts.map +0 -1
- package/dist/components/state-view/useStateView.js +0 -129
- package/dist/components/state-view/useStateView.js.map +0 -1
- package/dist/contexts/GraphEditContext.d.ts +0 -20
- package/dist/contexts/GraphEditContext.d.ts.map +0 -1
- package/dist/contexts/GraphEditContext.js +0 -8
- package/dist/contexts/GraphEditContext.js.map +0 -1
- package/dist/contexts/TooltipPortalContext.d.ts +0 -8
- package/dist/contexts/TooltipPortalContext.d.ts.map +0 -1
- package/dist/contexts/TooltipPortalContext.js +0 -8
- package/dist/contexts/TooltipPortalContext.js.map +0 -1
- package/dist/edges/CustomEdge.d.ts +0 -24
- package/dist/edges/CustomEdge.d.ts.map +0 -1
- package/dist/edges/CustomEdge.js +0 -222
- package/dist/edges/CustomEdge.js.map +0 -1
- package/dist/edges/GenericEdge.d.ts +0 -18
- package/dist/edges/GenericEdge.d.ts.map +0 -1
- package/dist/edges/GenericEdge.js +0 -10
- package/dist/edges/GenericEdge.js.map +0 -1
- package/dist/graphify/kind.d.ts +0 -23
- package/dist/graphify/kind.d.ts.map +0 -1
- package/dist/graphify/kind.js +0 -77
- package/dist/graphify/kind.js.map +0 -1
- package/dist/hooks/usePathBasedEvents.d.ts +0 -42
- package/dist/hooks/usePathBasedEvents.d.ts.map +0 -1
- package/dist/hooks/usePathBasedEvents.js +0 -119
- package/dist/hooks/usePathBasedEvents.js.map +0 -1
- package/dist/hooks/useSequenceLayout.d.ts +0 -186
- package/dist/hooks/useSequenceLayout.d.ts.map +0 -1
- package/dist/hooks/useSequenceLayout.js +0 -327
- package/dist/hooks/useSequenceLayout.js.map +0 -1
- package/dist/hooks/useUndoRedo.d.ts +0 -80
- package/dist/hooks/useUndoRedo.d.ts.map +0 -1
- package/dist/hooks/useUndoRedo.js +0 -70
- package/dist/hooks/useUndoRedo.js.map +0 -1
- package/dist/nodes/CustomNode.d.ts +0 -28
- package/dist/nodes/CustomNode.d.ts.map +0 -1
- package/dist/nodes/CustomNode.js +0 -820
- package/dist/nodes/CustomNode.js.map +0 -1
- package/dist/nodes/GenericNode.d.ts +0 -20
- package/dist/nodes/GenericNode.d.ts.map +0 -1
- package/dist/nodes/GenericNode.js +0 -20
- package/dist/nodes/GenericNode.js.map +0 -1
- package/dist/nodes/otel/OtelBoundaryNode.d.ts +0 -55
- package/dist/nodes/otel/OtelBoundaryNode.d.ts.map +0 -1
- package/dist/nodes/otel/OtelBoundaryNode.js +0 -81
- package/dist/nodes/otel/OtelBoundaryNode.js.map +0 -1
- package/dist/nodes/otel/OtelEventNode.d.ts +0 -59
- package/dist/nodes/otel/OtelEventNode.d.ts.map +0 -1
- package/dist/nodes/otel/OtelEventNode.js +0 -82
- package/dist/nodes/otel/OtelEventNode.js.map +0 -1
- package/dist/nodes/otel/OtelResourceNode.d.ts +0 -53
- package/dist/nodes/otel/OtelResourceNode.d.ts.map +0 -1
- package/dist/nodes/otel/OtelResourceNode.js +0 -105
- package/dist/nodes/otel/OtelResourceNode.js.map +0 -1
- package/dist/nodes/otel/OtelScopeNode.d.ts +0 -53
- package/dist/nodes/otel/OtelScopeNode.d.ts.map +0 -1
- package/dist/nodes/otel/OtelScopeNode.js +0 -81
- package/dist/nodes/otel/OtelScopeNode.js.map +0 -1
- package/dist/nodes/otel/OtelSpanConventionNode.d.ts +0 -61
- package/dist/nodes/otel/OtelSpanConventionNode.d.ts.map +0 -1
- package/dist/nodes/otel/OtelSpanConventionNode.js +0 -131
- package/dist/nodes/otel/OtelSpanConventionNode.js.map +0 -1
- package/dist/nodes/otel/index.d.ts +0 -17
- package/dist/nodes/otel/index.d.ts.map +0 -1
- package/dist/nodes/otel/index.js +0 -13
- package/dist/nodes/otel/index.js.map +0 -1
- package/dist/nodes/otel/shared/NodeBadges.d.ts +0 -10
- package/dist/nodes/otel/shared/NodeBadges.d.ts.map +0 -1
- package/dist/nodes/otel/shared/NodeBadges.js +0 -178
- package/dist/nodes/otel/shared/NodeBadges.js.map +0 -1
- package/dist/nodes/otel/shared/NodeContent.d.ts +0 -10
- package/dist/nodes/otel/shared/NodeContent.d.ts.map +0 -1
- package/dist/nodes/otel/shared/NodeContent.js +0 -96
- package/dist/nodes/otel/shared/NodeContent.js.map +0 -1
- package/dist/nodes/otel/shared/index.d.ts +0 -8
- package/dist/nodes/otel/shared/index.d.ts.map +0 -1
- package/dist/nodes/otel/shared/index.js +0 -8
- package/dist/nodes/otel/shared/index.js.map +0 -1
- package/dist/nodes/otel/shared/types.d.ts +0 -129
- package/dist/nodes/otel/shared/types.d.ts.map +0 -1
- package/dist/nodes/otel/shared/types.js +0 -5
- package/dist/nodes/otel/shared/types.js.map +0 -1
- package/dist/nodes/otel/shared/useNodeBehavior.d.ts +0 -42
- package/dist/nodes/otel/shared/useNodeBehavior.d.ts.map +0 -1
- package/dist/nodes/otel/shared/useNodeBehavior.js +0 -61
- package/dist/nodes/otel/shared/useNodeBehavior.js.map +0 -1
- package/dist/pierre/PierreThroughlineCodeView.js.map +0 -1
- package/dist/subsystem/SubsystemCarousel.d.ts +0 -36
- package/dist/subsystem/SubsystemCarousel.d.ts.map +0 -1
- package/dist/subsystem/SubsystemCarousel.js +0 -163
- package/dist/subsystem/SubsystemCarousel.js.map +0 -1
- package/dist/utils/animationMapping.d.ts +0 -53
- package/dist/utils/animationMapping.d.ts.map +0 -1
- package/dist/utils/animationMapping.js +0 -126
- package/dist/utils/animationMapping.js.map +0 -1
- package/dist/utils/canvasBounds.d.ts +0 -50
- package/dist/utils/canvasBounds.d.ts.map +0 -1
- package/dist/utils/canvasBounds.js +0 -88
- package/dist/utils/canvasBounds.js.map +0 -1
- package/dist/utils/graphConverter.d.ts +0 -18
- package/dist/utils/graphConverter.d.ts.map +0 -1
- package/dist/utils/graphConverter.js +0 -114
- package/dist/utils/graphConverter.js.map +0 -1
- package/dist/utils/iconResolver.d.ts +0 -29
- package/dist/utils/iconResolver.d.ts.map +0 -1
- package/dist/utils/iconResolver.js +0 -30
- package/dist/utils/iconResolver.js.map +0 -1
- package/dist/utils/orientationUtils.d.ts +0 -19
- package/dist/utils/orientationUtils.d.ts.map +0 -1
- package/dist/utils/orientationUtils.js +0 -62
- package/dist/utils/orientationUtils.js.map +0 -1
|
@@ -1,119 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Hook for processing path-based events and mapping them to animations
|
|
3
|
-
*
|
|
4
|
-
* Handles ComponentActivityEvent and ComponentActionEvent from
|
|
5
|
-
* PathBasedEventProcessor (Milestone 1 & 2)
|
|
6
|
-
*/
|
|
7
|
-
import { useEffect, useCallback } from 'react';
|
|
8
|
-
import { logLevelToNodeAnimation, actionToNodeAnimation, actionToEdgeAnimation, } from '../utils/animationMapping';
|
|
9
|
-
/**
|
|
10
|
-
* Process path-based events and trigger appropriate animations
|
|
11
|
-
*/
|
|
12
|
-
export function usePathBasedEvents({ events, callbacks, onEventProcessed, minLogLevel = 'info', }) {
|
|
13
|
-
const { onNodeAnimation, onEdgeAnimation } = callbacks;
|
|
14
|
-
// Process component activity events (Milestone 1)
|
|
15
|
-
const processActivityEvent = useCallback((event) => {
|
|
16
|
-
// Map log level to animation
|
|
17
|
-
const animation = logLevelToNodeAnimation(event.level);
|
|
18
|
-
// Trigger node animation
|
|
19
|
-
onNodeAnimation(event.componentId, {
|
|
20
|
-
...animation,
|
|
21
|
-
timestamp: event.timestamp,
|
|
22
|
-
});
|
|
23
|
-
onEventProcessed?.(event);
|
|
24
|
-
}, [onNodeAnimation, onEventProcessed]);
|
|
25
|
-
// Process component action events (Milestone 2)
|
|
26
|
-
const processActionEvent = useCallback((event) => {
|
|
27
|
-
// Map action/state to animation
|
|
28
|
-
const animation = actionToNodeAnimation(event.action, event.state);
|
|
29
|
-
// Trigger node animation
|
|
30
|
-
onNodeAnimation(event.componentId, {
|
|
31
|
-
...animation,
|
|
32
|
-
timestamp: event.timestamp,
|
|
33
|
-
});
|
|
34
|
-
onEventProcessed?.(event);
|
|
35
|
-
}, [onNodeAnimation, onEventProcessed]);
|
|
36
|
-
// Process edge animation events (Milestone 2)
|
|
37
|
-
const processEdgeAnimationEvent = useCallback((event) => {
|
|
38
|
-
const animation = actionToEdgeAnimation(event.triggeredBy?.action || 'unknown', {
|
|
39
|
-
type: event.animation,
|
|
40
|
-
duration: event.duration,
|
|
41
|
-
direction: event.direction,
|
|
42
|
-
});
|
|
43
|
-
onEdgeAnimation(event.edgeId, {
|
|
44
|
-
...animation,
|
|
45
|
-
timestamp: event.timestamp,
|
|
46
|
-
});
|
|
47
|
-
onEventProcessed?.(event);
|
|
48
|
-
}, [onEdgeAnimation, onEventProcessed]);
|
|
49
|
-
// Process events when they change
|
|
50
|
-
useEffect(() => {
|
|
51
|
-
if (events.length === 0)
|
|
52
|
-
return;
|
|
53
|
-
// Process the latest event
|
|
54
|
-
const latestEvent = events[events.length - 1];
|
|
55
|
-
switch (latestEvent.type) {
|
|
56
|
-
case 'component-activity': {
|
|
57
|
-
// Milestone 1: Component activity from log
|
|
58
|
-
// Check if log level is high enough to trigger animation
|
|
59
|
-
const levels = ['debug', 'info', 'warn', 'error'];
|
|
60
|
-
if (levels.indexOf(latestEvent.level) >= levels.indexOf(minLogLevel)) {
|
|
61
|
-
processActivityEvent(latestEvent);
|
|
62
|
-
}
|
|
63
|
-
break;
|
|
64
|
-
}
|
|
65
|
-
case 'component-action':
|
|
66
|
-
// Milestone 2: Specific action from pattern match
|
|
67
|
-
processActionEvent(latestEvent);
|
|
68
|
-
break;
|
|
69
|
-
case 'edge-animation':
|
|
70
|
-
// Milestone 2: Edge activation from action trigger
|
|
71
|
-
processEdgeAnimationEvent(latestEvent);
|
|
72
|
-
break;
|
|
73
|
-
}
|
|
74
|
-
}, [events, processActivityEvent, processActionEvent, processEdgeAnimationEvent, minLogLevel]);
|
|
75
|
-
}
|
|
76
|
-
/**
|
|
77
|
-
* Process a batch of path-based events
|
|
78
|
-
* Useful for processing historical logs or bulk updates
|
|
79
|
-
*/
|
|
80
|
-
export function processBatchEvents(events, callbacks, minLogLevel = 'info') {
|
|
81
|
-
const levels = ['debug', 'info', 'warn', 'error'];
|
|
82
|
-
const minLevelIndex = levels.indexOf(minLogLevel);
|
|
83
|
-
for (const event of events) {
|
|
84
|
-
switch (event.type) {
|
|
85
|
-
case 'component-activity':
|
|
86
|
-
if (levels.indexOf(event.level) >= minLevelIndex) {
|
|
87
|
-
const animation = logLevelToNodeAnimation(event.level);
|
|
88
|
-
callbacks.onNodeAnimation(event.componentId, {
|
|
89
|
-
...animation,
|
|
90
|
-
timestamp: event.timestamp,
|
|
91
|
-
});
|
|
92
|
-
}
|
|
93
|
-
break;
|
|
94
|
-
case 'component-action':
|
|
95
|
-
{
|
|
96
|
-
const animation = actionToNodeAnimation(event.action, event.state);
|
|
97
|
-
callbacks.onNodeAnimation(event.componentId, {
|
|
98
|
-
...animation,
|
|
99
|
-
timestamp: event.timestamp,
|
|
100
|
-
});
|
|
101
|
-
}
|
|
102
|
-
break;
|
|
103
|
-
case 'edge-animation':
|
|
104
|
-
{
|
|
105
|
-
const animation = actionToEdgeAnimation(event.triggeredBy?.action || 'unknown', {
|
|
106
|
-
type: event.animation,
|
|
107
|
-
duration: event.duration,
|
|
108
|
-
direction: event.direction,
|
|
109
|
-
});
|
|
110
|
-
callbacks.onEdgeAnimation(event.edgeId, {
|
|
111
|
-
...animation,
|
|
112
|
-
timestamp: event.timestamp,
|
|
113
|
-
});
|
|
114
|
-
}
|
|
115
|
-
break;
|
|
116
|
-
}
|
|
117
|
-
}
|
|
118
|
-
}
|
|
119
|
-
//# sourceMappingURL=usePathBasedEvents.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"usePathBasedEvents.js","sourceRoot":"","sources":["../../src/hooks/usePathBasedEvents.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,186 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* React hook for sequence diagram layout
|
|
3
|
-
*
|
|
4
|
-
* Computes swimlane-based positioning for events. Lanes default to the first
|
|
5
|
-
* dotted segment of each event name. Callers can drill deeper by passing
|
|
6
|
-
* `openedNamespaces`: any prefix listed there has its events pushed one level
|
|
7
|
-
* deeper, so its children appear as their own lanes instead of being grouped
|
|
8
|
-
* under the parent.
|
|
9
|
-
*/
|
|
10
|
-
import type { Node, Edge } from '@xyflow/react';
|
|
11
|
-
/**
|
|
12
|
-
* Input event for sequence layout
|
|
13
|
-
*/
|
|
14
|
-
export interface SequenceEvent {
|
|
15
|
-
/** Unique event identifier */
|
|
16
|
-
id: string;
|
|
17
|
-
/** Event name with namespace (e.g., "auth.validation.started") */
|
|
18
|
-
name: string;
|
|
19
|
-
/** Optional display label (defaults to name) */
|
|
20
|
-
label?: string;
|
|
21
|
-
/** Optional event type for styling */
|
|
22
|
-
type?: string;
|
|
23
|
-
/** Whether this is a move event (crosses participant boundaries) */
|
|
24
|
-
moveEvent?: boolean;
|
|
25
|
-
/** Participant this event belongs to (for move events, this is the target) */
|
|
26
|
-
participant?: string;
|
|
27
|
-
/**
|
|
28
|
-
* Optional source-file path this event originated from, expressed
|
|
29
|
-
* relative to the repository root (e.g.
|
|
30
|
-
* `auth-server/src/lib/auth-provider.ts`). Surfaced on the React Flow
|
|
31
|
-
* node `data` so downstream renderers (file-city overlays, jump-to-source,
|
|
32
|
-
* IDE bridges) can react to selection without reaching into `data`.
|
|
33
|
-
*/
|
|
34
|
-
sourcePath?: string;
|
|
35
|
-
/** Additional data to pass through to the node */
|
|
36
|
-
data?: Record<string, unknown>;
|
|
37
|
-
}
|
|
38
|
-
/**
|
|
39
|
-
* Input edge for sequence layout
|
|
40
|
-
*/
|
|
41
|
-
export interface SequenceEdge {
|
|
42
|
-
/** Unique edge identifier */
|
|
43
|
-
id: string;
|
|
44
|
-
/** Source event ID */
|
|
45
|
-
fromEvent: string;
|
|
46
|
-
/** Target event ID */
|
|
47
|
-
toEvent: string;
|
|
48
|
-
/** Optional edge label */
|
|
49
|
-
label?: string;
|
|
50
|
-
/** Optional edge type for styling */
|
|
51
|
-
type?: string;
|
|
52
|
-
}
|
|
53
|
-
/**
|
|
54
|
-
* Swimlane information computed from events
|
|
55
|
-
*/
|
|
56
|
-
export interface Swimlane {
|
|
57
|
-
/** Namespace identifier for this lane */
|
|
58
|
-
namespace: string;
|
|
59
|
-
/** Display label for the lane header (last segment of the namespace) */
|
|
60
|
-
label: string;
|
|
61
|
-
/** X position of the lane center */
|
|
62
|
-
x: number;
|
|
63
|
-
/** Parent namespace (one segment shallower), if any */
|
|
64
|
-
parentNamespace?: string;
|
|
65
|
-
/** Whether this lane's namespace is in `openedNamespaces` (its events have been drilled deeper) */
|
|
66
|
-
isOpened: boolean;
|
|
67
|
-
/** Whether the immediate parent namespace is opened (this lane only exists because its parent was drilled into) */
|
|
68
|
-
isParentOpened: boolean;
|
|
69
|
-
/** Whether any event extends strictly past this lane's namespace (so opening would split it further) */
|
|
70
|
-
canExpand: boolean;
|
|
71
|
-
/** Events directly assigned to this lane */
|
|
72
|
-
eventIds: string[];
|
|
73
|
-
}
|
|
74
|
-
/**
|
|
75
|
-
* Options for sequence layout
|
|
76
|
-
*/
|
|
77
|
-
export interface UseSequenceLayoutOptions {
|
|
78
|
-
/**
|
|
79
|
-
* Namespace prefixes whose events should be drilled one segment deeper.
|
|
80
|
-
* Pass an array or a Set. Each entry is a dotted prefix (e.g. `auth` or
|
|
81
|
-
* `auth.user`). When listed, events under that prefix land in lanes one
|
|
82
|
-
* level deeper than the prefix, instead of all sharing the prefix lane.
|
|
83
|
-
* Drilling is recursive: list both `auth` and `auth.user` to drill twice.
|
|
84
|
-
*/
|
|
85
|
-
openedNamespaces?: string[] | Set<string>;
|
|
86
|
-
/**
|
|
87
|
-
* Explicit left-to-right order for lanes, by resolved namespace. Listed
|
|
88
|
-
* namespaces are placed first in the given order; any lanes not present in
|
|
89
|
-
* the list fall back to first-event order (the order in which their first
|
|
90
|
-
* event appears in `events`). Unknown entries are ignored.
|
|
91
|
-
*/
|
|
92
|
-
laneOrder?: string[];
|
|
93
|
-
/**
|
|
94
|
-
* Width of each swimlane
|
|
95
|
-
* @default 250
|
|
96
|
-
*/
|
|
97
|
-
laneWidth?: number;
|
|
98
|
-
/**
|
|
99
|
-
* Gap between swimlanes
|
|
100
|
-
* @default 10
|
|
101
|
-
*/
|
|
102
|
-
laneGap?: number;
|
|
103
|
-
/**
|
|
104
|
-
* Vertical spacing between events
|
|
105
|
-
* @default 80
|
|
106
|
-
*/
|
|
107
|
-
eventSpacing?: number;
|
|
108
|
-
/**
|
|
109
|
-
* Height reserved for lane headers
|
|
110
|
-
* @default 60
|
|
111
|
-
*/
|
|
112
|
-
headerHeight?: number;
|
|
113
|
-
/**
|
|
114
|
-
* Node marker width
|
|
115
|
-
* @default 14
|
|
116
|
-
*/
|
|
117
|
-
nodeWidth?: number;
|
|
118
|
-
/**
|
|
119
|
-
* Node marker height
|
|
120
|
-
* @default 14
|
|
121
|
-
*/
|
|
122
|
-
nodeHeight?: number;
|
|
123
|
-
}
|
|
124
|
-
/**
|
|
125
|
-
* A header cell for an opened ancestor namespace, sitting above the leaf
|
|
126
|
-
* lanes it groups. Rendered as a row in the header strip.
|
|
127
|
-
*/
|
|
128
|
-
export interface ParentHeader {
|
|
129
|
-
/** Full ancestor namespace (always in `openedNamespaces`) */
|
|
130
|
-
namespace: string;
|
|
131
|
-
/** Last segment, for display */
|
|
132
|
-
label: string;
|
|
133
|
-
/** Center x of the cell */
|
|
134
|
-
x: number;
|
|
135
|
-
/** Total span width across the leaf lanes underneath */
|
|
136
|
-
width: number;
|
|
137
|
-
/** 1-based depth in the header strip (1 = topmost row) */
|
|
138
|
-
depth: number;
|
|
139
|
-
}
|
|
140
|
-
/**
|
|
141
|
-
* Result from sequence layout computation
|
|
142
|
-
*/
|
|
143
|
-
export interface UseSequenceLayoutResult {
|
|
144
|
-
/** Positioned nodes for React Flow */
|
|
145
|
-
nodes: Node[];
|
|
146
|
-
/** Edges for React Flow */
|
|
147
|
-
edges: Edge[];
|
|
148
|
-
/** Leaf swimlanes — each gets a lifeline and a leaf header row */
|
|
149
|
-
swimlanes: Swimlane[];
|
|
150
|
-
/**
|
|
151
|
-
* Header cells for opened ancestor namespaces. Stack above the leaf
|
|
152
|
-
* headers; depth 1 sits at the top of the header strip.
|
|
153
|
-
*/
|
|
154
|
-
parentHeaders: ParentHeader[];
|
|
155
|
-
/** Number of header rows (= max leaf depth). At least 1. */
|
|
156
|
-
headerRows: number;
|
|
157
|
-
/** Total width of the diagram */
|
|
158
|
-
totalWidth: number;
|
|
159
|
-
/** Total height of the diagram */
|
|
160
|
-
totalHeight: number;
|
|
161
|
-
}
|
|
162
|
-
/**
|
|
163
|
-
* useSequenceLayout
|
|
164
|
-
*
|
|
165
|
-
* @param events - Events to lay out
|
|
166
|
-
* @param sequenceEdges - Edges connecting events
|
|
167
|
-
* @param options - Layout options (lane sizing, openedNamespaces)
|
|
168
|
-
*
|
|
169
|
-
* @example
|
|
170
|
-
* ```tsx
|
|
171
|
-
* const { nodes, edges, swimlanes } = useSequenceLayout(
|
|
172
|
-
* [
|
|
173
|
-
* { id: '1', name: 'auth.validation.started' },
|
|
174
|
-
* { id: '2', name: 'auth.validation.completed' },
|
|
175
|
-
* { id: '3', name: 'database.query.executed' },
|
|
176
|
-
* ],
|
|
177
|
-
* [
|
|
178
|
-
* { id: 'e1', fromEvent: '1', toEvent: '2' },
|
|
179
|
-
* { id: 'e2', fromEvent: '2', toEvent: '3' },
|
|
180
|
-
* ],
|
|
181
|
-
* { openedNamespaces: ['auth'] }, // drill `auth` to show validation/token as separate lanes
|
|
182
|
-
* );
|
|
183
|
-
* ```
|
|
184
|
-
*/
|
|
185
|
-
export declare function useSequenceLayout(events: SequenceEvent[], sequenceEdges: SequenceEdge[], options?: UseSequenceLayoutOptions): UseSequenceLayoutResult;
|
|
186
|
-
//# sourceMappingURL=useSequenceLayout.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"useSequenceLayout.d.ts","sourceRoot":"","sources":["../../src/hooks/useSequenceLayout.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,327 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* React hook for sequence diagram layout
|
|
3
|
-
*
|
|
4
|
-
* Computes swimlane-based positioning for events. Lanes default to the first
|
|
5
|
-
* dotted segment of each event name. Callers can drill deeper by passing
|
|
6
|
-
* `openedNamespaces`: any prefix listed there has its events pushed one level
|
|
7
|
-
* deeper, so its children appear as their own lanes instead of being grouped
|
|
8
|
-
* under the parent.
|
|
9
|
-
*/
|
|
10
|
-
import { useMemo } from 'react';
|
|
11
|
-
/**
|
|
12
|
-
* Resolve the lane (namespace prefix) for a given event name, given the set
|
|
13
|
-
* of opened namespaces. Walks segments from depth 1 outward, descending while
|
|
14
|
-
* the current prefix is opened, and stopping at the first prefix that isn't.
|
|
15
|
-
*/
|
|
16
|
-
function resolveLane(name, opened) {
|
|
17
|
-
const segs = name.split('.');
|
|
18
|
-
let depth = 1;
|
|
19
|
-
while (depth < segs.length) {
|
|
20
|
-
const prefix = segs.slice(0, depth).join('.');
|
|
21
|
-
if (opened.has(prefix)) {
|
|
22
|
-
depth++;
|
|
23
|
-
}
|
|
24
|
-
else {
|
|
25
|
-
break;
|
|
26
|
-
}
|
|
27
|
-
}
|
|
28
|
-
return segs.slice(0, depth).join('.');
|
|
29
|
-
}
|
|
30
|
-
/**
|
|
31
|
-
* useSequenceLayout
|
|
32
|
-
*
|
|
33
|
-
* @param events - Events to lay out
|
|
34
|
-
* @param sequenceEdges - Edges connecting events
|
|
35
|
-
* @param options - Layout options (lane sizing, openedNamespaces)
|
|
36
|
-
*
|
|
37
|
-
* @example
|
|
38
|
-
* ```tsx
|
|
39
|
-
* const { nodes, edges, swimlanes } = useSequenceLayout(
|
|
40
|
-
* [
|
|
41
|
-
* { id: '1', name: 'auth.validation.started' },
|
|
42
|
-
* { id: '2', name: 'auth.validation.completed' },
|
|
43
|
-
* { id: '3', name: 'database.query.executed' },
|
|
44
|
-
* ],
|
|
45
|
-
* [
|
|
46
|
-
* { id: 'e1', fromEvent: '1', toEvent: '2' },
|
|
47
|
-
* { id: 'e2', fromEvent: '2', toEvent: '3' },
|
|
48
|
-
* ],
|
|
49
|
-
* { openedNamespaces: ['auth'] }, // drill `auth` to show validation/token as separate lanes
|
|
50
|
-
* );
|
|
51
|
-
* ```
|
|
52
|
-
*/
|
|
53
|
-
export function useSequenceLayout(events, sequenceEdges, options = {}) {
|
|
54
|
-
const { openedNamespaces, laneOrder, laneWidth = 250, laneGap = 0, eventSpacing = 80, headerHeight = 60, nodeWidth = 14, nodeHeight = 14, } = options;
|
|
55
|
-
const laneOrderKey = useMemo(() => (laneOrder ? laneOrder.join('|') : ''), [laneOrder]);
|
|
56
|
-
// Normalize openedNamespaces into a stable string for memo dependency
|
|
57
|
-
const openedKey = useMemo(() => {
|
|
58
|
-
if (!openedNamespaces)
|
|
59
|
-
return '';
|
|
60
|
-
const arr = Array.from(openedNamespaces);
|
|
61
|
-
arr.sort();
|
|
62
|
-
return arr.join('|');
|
|
63
|
-
}, [openedNamespaces]);
|
|
64
|
-
return useMemo(() => {
|
|
65
|
-
if (events.length === 0) {
|
|
66
|
-
return {
|
|
67
|
-
nodes: [],
|
|
68
|
-
edges: [],
|
|
69
|
-
swimlanes: [],
|
|
70
|
-
parentHeaders: [],
|
|
71
|
-
headerRows: 1,
|
|
72
|
-
totalWidth: 0,
|
|
73
|
-
totalHeight: 0,
|
|
74
|
-
};
|
|
75
|
-
}
|
|
76
|
-
const opened = new Set(openedKey ? openedKey.split('|') : []);
|
|
77
|
-
// Step 1: Resolve each event to a lane prefix
|
|
78
|
-
const eventLane = new Map();
|
|
79
|
-
const laneEvents = new Map();
|
|
80
|
-
for (const event of events) {
|
|
81
|
-
const lane = resolveLane(event.name, opened);
|
|
82
|
-
eventLane.set(event.id, lane);
|
|
83
|
-
if (!laneEvents.has(lane)) {
|
|
84
|
-
laneEvents.set(lane, []);
|
|
85
|
-
}
|
|
86
|
-
laneEvents.get(lane).push(event.id);
|
|
87
|
-
}
|
|
88
|
-
// Step 2: Order lanes by first-event appearance (Map preserves insertion
|
|
89
|
-
// order from Step 1). If `laneOrder` is provided, listed namespaces are
|
|
90
|
-
// placed first in the given order; unlisted lanes follow in first-event
|
|
91
|
-
// order. Unknown entries in `laneOrder` are ignored.
|
|
92
|
-
const firstEventOrder = Array.from(laneEvents.keys());
|
|
93
|
-
let laneNames;
|
|
94
|
-
if (laneOrder && laneOrder.length > 0) {
|
|
95
|
-
const seen = new Set();
|
|
96
|
-
const ordered = [];
|
|
97
|
-
for (const ns of laneOrder) {
|
|
98
|
-
if (laneEvents.has(ns) && !seen.has(ns)) {
|
|
99
|
-
ordered.push(ns);
|
|
100
|
-
seen.add(ns);
|
|
101
|
-
}
|
|
102
|
-
}
|
|
103
|
-
for (const ns of firstEventOrder) {
|
|
104
|
-
if (!seen.has(ns))
|
|
105
|
-
ordered.push(ns);
|
|
106
|
-
}
|
|
107
|
-
laneNames = ordered;
|
|
108
|
-
}
|
|
109
|
-
else {
|
|
110
|
-
laneNames = firstEventOrder;
|
|
111
|
-
}
|
|
112
|
-
// canExpand is meaningful only when opening would actually fork the lane
|
|
113
|
-
// into multiple child lanes. If every event in the lane would drill into
|
|
114
|
-
// the same child, drilling is a relabel — hide the chevron.
|
|
115
|
-
const eventsById = new Map();
|
|
116
|
-
for (const event of events)
|
|
117
|
-
eventsById.set(event.id, event);
|
|
118
|
-
const canExpandLane = (laneNs, eventIds) => {
|
|
119
|
-
const augmented = new Set(opened);
|
|
120
|
-
augmented.add(laneNs);
|
|
121
|
-
const seen = new Set();
|
|
122
|
-
for (const eid of eventIds) {
|
|
123
|
-
const event = eventsById.get(eid);
|
|
124
|
-
if (!event)
|
|
125
|
-
continue;
|
|
126
|
-
seen.add(resolveLane(event.name, augmented));
|
|
127
|
-
if (seen.size > 1)
|
|
128
|
-
return true;
|
|
129
|
-
}
|
|
130
|
-
return false;
|
|
131
|
-
};
|
|
132
|
-
// Step 3: Build Swimlane records
|
|
133
|
-
const swimlanes = laneNames.map((namespace, index) => {
|
|
134
|
-
const x = index * (laneWidth + laneGap) + laneWidth / 2;
|
|
135
|
-
const segs = namespace.split('.');
|
|
136
|
-
const parentNamespace = segs.length > 1 ? segs.slice(0, -1).join('.') : undefined;
|
|
137
|
-
const eventIds = laneEvents.get(namespace);
|
|
138
|
-
return {
|
|
139
|
-
namespace,
|
|
140
|
-
label: segs[segs.length - 1] || namespace,
|
|
141
|
-
x,
|
|
142
|
-
parentNamespace,
|
|
143
|
-
isOpened: opened.has(namespace),
|
|
144
|
-
isParentOpened: parentNamespace ? opened.has(parentNamespace) : false,
|
|
145
|
-
canExpand: canExpandLane(namespace, eventIds),
|
|
146
|
-
eventIds,
|
|
147
|
-
};
|
|
148
|
-
});
|
|
149
|
-
const laneByNamespace = new Map();
|
|
150
|
-
for (const lane of swimlanes) {
|
|
151
|
-
laneByNamespace.set(lane.namespace, lane);
|
|
152
|
-
}
|
|
153
|
-
// Step 3b: Build parent header cells for opened ancestors. For every leaf
|
|
154
|
-
// lane at depth > 1, walk depths 1..d-1 and aggregate the leaf x-extent
|
|
155
|
-
// under each ancestor.
|
|
156
|
-
const ancestorBounds = new Map();
|
|
157
|
-
for (const lane of swimlanes) {
|
|
158
|
-
const segs = lane.namespace.split('.');
|
|
159
|
-
const left = lane.x - laneWidth / 2;
|
|
160
|
-
const right = lane.x + laneWidth / 2;
|
|
161
|
-
for (let d = 1; d < segs.length; d++) {
|
|
162
|
-
const ancestorNs = segs.slice(0, d).join('.');
|
|
163
|
-
const existing = ancestorBounds.get(ancestorNs);
|
|
164
|
-
if (existing) {
|
|
165
|
-
existing.xMin = Math.min(existing.xMin, left);
|
|
166
|
-
existing.xMax = Math.max(existing.xMax, right);
|
|
167
|
-
}
|
|
168
|
-
else {
|
|
169
|
-
ancestorBounds.set(ancestorNs, { xMin: left, xMax: right, depth: d });
|
|
170
|
-
}
|
|
171
|
-
}
|
|
172
|
-
}
|
|
173
|
-
const parentHeaders = Array.from(ancestorBounds.entries())
|
|
174
|
-
.map(([namespace, { xMin, xMax, depth }]) => {
|
|
175
|
-
const segs = namespace.split('.');
|
|
176
|
-
return {
|
|
177
|
-
namespace,
|
|
178
|
-
label: segs[segs.length - 1] || namespace,
|
|
179
|
-
x: (xMin + xMax) / 2,
|
|
180
|
-
width: xMax - xMin,
|
|
181
|
-
depth,
|
|
182
|
-
};
|
|
183
|
-
})
|
|
184
|
-
.sort((a, b) => a.depth - b.depth || a.x - b.x);
|
|
185
|
-
const headerRows = swimlanes.reduce((max, lane) => Math.max(max, lane.namespace.split('.').length), 1);
|
|
186
|
-
const totalHeaderHeight = headerHeight * headerRows;
|
|
187
|
-
// Step 4: Position events on global time layers, below the full header strip
|
|
188
|
-
const nodes = [];
|
|
189
|
-
for (let i = 0; i < events.length; i++) {
|
|
190
|
-
const event = events[i];
|
|
191
|
-
const laneNs = eventLane.get(event.id);
|
|
192
|
-
const lane = laneByNamespace.get(laneNs);
|
|
193
|
-
const y = totalHeaderHeight + 40 + i * eventSpacing;
|
|
194
|
-
nodes.push({
|
|
195
|
-
id: event.id,
|
|
196
|
-
type: 'sequenceMarker',
|
|
197
|
-
position: {
|
|
198
|
-
x: lane.x - nodeWidth / 2,
|
|
199
|
-
y: y - nodeHeight / 2,
|
|
200
|
-
},
|
|
201
|
-
data: {
|
|
202
|
-
label: event.label || event.name.split('.').pop() || event.name,
|
|
203
|
-
fullName: event.name,
|
|
204
|
-
namespace: laneNs,
|
|
205
|
-
timeLayer: i,
|
|
206
|
-
isMoveEvent: event.moveEvent === true,
|
|
207
|
-
sourcePath: event.sourcePath,
|
|
208
|
-
...event.data,
|
|
209
|
-
},
|
|
210
|
-
style: {
|
|
211
|
-
width: nodeWidth,
|
|
212
|
-
height: nodeHeight,
|
|
213
|
-
},
|
|
214
|
-
});
|
|
215
|
-
}
|
|
216
|
-
// Step 5: Edges — one per event, looking ahead to the next
|
|
217
|
-
const edges = [];
|
|
218
|
-
for (let i = 0; i < events.length; i++) {
|
|
219
|
-
const currentEvent = events[i];
|
|
220
|
-
const currentLaneNs = eventLane.get(currentEvent.id);
|
|
221
|
-
const currentLane = laneByNamespace.get(currentLaneNs);
|
|
222
|
-
if (i < events.length - 1) {
|
|
223
|
-
const nextEvent = events[i + 1];
|
|
224
|
-
const nextLaneNs = eventLane.get(nextEvent.id);
|
|
225
|
-
const nextLane = laneByNamespace.get(nextLaneNs);
|
|
226
|
-
const nextIsMoveEvent = nextEvent.moveEvent === true;
|
|
227
|
-
const crossesLanes = currentLaneNs !== nextLaneNs;
|
|
228
|
-
const edgeLabel = currentEvent.label ||
|
|
229
|
-
currentEvent.name.split('.').pop() ||
|
|
230
|
-
currentEvent.name;
|
|
231
|
-
edges.push({
|
|
232
|
-
id: `edge-${currentEvent.id}-to-${nextEvent.id}`,
|
|
233
|
-
source: currentEvent.id,
|
|
234
|
-
target: nextEvent.id,
|
|
235
|
-
type: 'sequenceArrowParticipant',
|
|
236
|
-
label: edgeLabel,
|
|
237
|
-
labelStyle: { fontSize: 12, fontWeight: 500 },
|
|
238
|
-
labelBgStyle: { fill: 'white', fillOpacity: 0.8 },
|
|
239
|
-
data: {
|
|
240
|
-
crossesLanes,
|
|
241
|
-
sourceNamespace: currentLaneNs,
|
|
242
|
-
targetNamespace: nextLaneNs,
|
|
243
|
-
isMoveEvent: nextIsMoveEvent,
|
|
244
|
-
sourceEvent: currentEvent,
|
|
245
|
-
targetEvent: nextEvent,
|
|
246
|
-
sourceParticipantX: currentLane.x,
|
|
247
|
-
targetParticipantX: nextLane.x,
|
|
248
|
-
},
|
|
249
|
-
});
|
|
250
|
-
}
|
|
251
|
-
else {
|
|
252
|
-
const currentIsMoveEvent = currentEvent.moveEvent === true;
|
|
253
|
-
const edgeLabel = currentEvent.label ||
|
|
254
|
-
currentEvent.name.split('.').pop() ||
|
|
255
|
-
currentEvent.name;
|
|
256
|
-
edges.push({
|
|
257
|
-
id: `edge-${currentEvent.id}-end`,
|
|
258
|
-
source: currentEvent.id,
|
|
259
|
-
target: currentEvent.id,
|
|
260
|
-
type: 'sequenceArrowParticipant',
|
|
261
|
-
label: edgeLabel,
|
|
262
|
-
labelStyle: { fontSize: 12, fontWeight: 500 },
|
|
263
|
-
labelBgStyle: { fill: 'white', fillOpacity: 0.8 },
|
|
264
|
-
data: {
|
|
265
|
-
crossesLanes: false,
|
|
266
|
-
sourceNamespace: currentLaneNs,
|
|
267
|
-
targetNamespace: currentLaneNs,
|
|
268
|
-
isMoveEvent: currentIsMoveEvent,
|
|
269
|
-
sourceEvent: currentEvent,
|
|
270
|
-
targetEvent: currentEvent,
|
|
271
|
-
sourceParticipantX: currentLane.x,
|
|
272
|
-
targetParticipantX: currentLane.x,
|
|
273
|
-
isLastEvent: true,
|
|
274
|
-
eventSpacing,
|
|
275
|
-
},
|
|
276
|
-
});
|
|
277
|
-
}
|
|
278
|
-
}
|
|
279
|
-
// Step 6: Compute total dimensions
|
|
280
|
-
const totalWidth = swimlanes.length * laneWidth + (swimlanes.length - 1) * laneGap;
|
|
281
|
-
const totalHeight = totalHeaderHeight + 40 + events.length * eventSpacing;
|
|
282
|
-
// Step 7: Boundary nodes so React Flow's fitView covers full width
|
|
283
|
-
if (swimlanes.length > 0) {
|
|
284
|
-
const leftmostLane = swimlanes[0];
|
|
285
|
-
const rightmostLane = swimlanes[swimlanes.length - 1];
|
|
286
|
-
nodes.push({
|
|
287
|
-
id: '__boundary_left__',
|
|
288
|
-
type: 'default',
|
|
289
|
-
position: { x: leftmostLane.x - laneWidth / 2, y: 0 },
|
|
290
|
-
data: {},
|
|
291
|
-
style: { width: 1, height: 1, opacity: 0 },
|
|
292
|
-
draggable: false,
|
|
293
|
-
selectable: false,
|
|
294
|
-
}, {
|
|
295
|
-
id: '__boundary_right__',
|
|
296
|
-
type: 'default',
|
|
297
|
-
position: { x: rightmostLane.x + laneWidth / 2, y: totalHeight },
|
|
298
|
-
data: {},
|
|
299
|
-
style: { width: 1, height: 1, opacity: 0 },
|
|
300
|
-
draggable: false,
|
|
301
|
-
selectable: false,
|
|
302
|
-
});
|
|
303
|
-
}
|
|
304
|
-
return {
|
|
305
|
-
nodes,
|
|
306
|
-
edges,
|
|
307
|
-
swimlanes,
|
|
308
|
-
parentHeaders,
|
|
309
|
-
headerRows,
|
|
310
|
-
totalWidth,
|
|
311
|
-
totalHeight,
|
|
312
|
-
};
|
|
313
|
-
}, [
|
|
314
|
-
events,
|
|
315
|
-
sequenceEdges,
|
|
316
|
-
openedKey,
|
|
317
|
-
laneOrderKey,
|
|
318
|
-
laneOrder,
|
|
319
|
-
laneWidth,
|
|
320
|
-
laneGap,
|
|
321
|
-
eventSpacing,
|
|
322
|
-
headerHeight,
|
|
323
|
-
nodeWidth,
|
|
324
|
-
nodeHeight,
|
|
325
|
-
]);
|
|
326
|
-
}
|
|
327
|
-
//# sourceMappingURL=useSequenceLayout.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"useSequenceLayout.js","sourceRoot":"","sources":["../../src/hooks/useSequenceLayout.ts"],"names":[],"mappings":"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"}
|