@principal-ai/subsystems-react 0.21.0 → 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.
Files changed (201) hide show
  1. package/package.json +1 -1
  2. package/dist/components/ConfigurationSelector.d.ts +0 -35
  3. package/dist/components/ConfigurationSelector.d.ts.map +0 -1
  4. package/dist/components/ConfigurationSelector.js +0 -63
  5. package/dist/components/ConfigurationSelector.js.map +0 -1
  6. package/dist/components/GraphRenderer.d.ts +0 -295
  7. package/dist/components/GraphRenderer.d.ts.map +0 -1
  8. package/dist/components/GraphRenderer.js +0 -2008
  9. package/dist/components/GraphRenderer.js.map +0 -1
  10. package/dist/components/MultiCanvasRenderer.d.ts +0 -75
  11. package/dist/components/MultiCanvasRenderer.d.ts.map +0 -1
  12. package/dist/components/MultiCanvasRenderer.js +0 -203
  13. package/dist/components/MultiCanvasRenderer.js.map +0 -1
  14. package/dist/components/NodeTooltip.d.ts +0 -24
  15. package/dist/components/NodeTooltip.d.ts.map +0 -1
  16. package/dist/components/NodeTooltip.js +0 -160
  17. package/dist/components/NodeTooltip.js.map +0 -1
  18. package/dist/components/SelectionSidebar.d.ts +0 -18
  19. package/dist/components/SelectionSidebar.d.ts.map +0 -1
  20. package/dist/components/SelectionSidebar.js +0 -190
  21. package/dist/components/SelectionSidebar.js.map +0 -1
  22. package/dist/components/SequenceDiagramRenderer.d.ts +0 -77
  23. package/dist/components/SequenceDiagramRenderer.d.ts.map +0 -1
  24. package/dist/components/SequenceDiagramRenderer.js +0 -604
  25. package/dist/components/SequenceDiagramRenderer.js.map +0 -1
  26. package/dist/components/WorkflowSequenceDiagram.d.ts +0 -63
  27. package/dist/components/WorkflowSequenceDiagram.d.ts.map +0 -1
  28. package/dist/components/WorkflowSequenceDiagram.js +0 -147
  29. package/dist/components/WorkflowSequenceDiagram.js.map +0 -1
  30. package/dist/components/dashboard/DashboardRenderer.d.ts +0 -10
  31. package/dist/components/dashboard/DashboardRenderer.d.ts.map +0 -1
  32. package/dist/components/dashboard/DashboardRenderer.js +0 -179
  33. package/dist/components/dashboard/DashboardRenderer.js.map +0 -1
  34. package/dist/components/dashboard/MetricPanel.d.ts +0 -10
  35. package/dist/components/dashboard/MetricPanel.d.ts.map +0 -1
  36. package/dist/components/dashboard/MetricPanel.js +0 -103
  37. package/dist/components/dashboard/MetricPanel.js.map +0 -1
  38. package/dist/components/dashboard/MockDataProvider.d.ts +0 -30
  39. package/dist/components/dashboard/MockDataProvider.d.ts.map +0 -1
  40. package/dist/components/dashboard/MockDataProvider.js +0 -270
  41. package/dist/components/dashboard/MockDataProvider.js.map +0 -1
  42. package/dist/components/dashboard/components/BarChart.d.ts +0 -10
  43. package/dist/components/dashboard/components/BarChart.d.ts.map +0 -1
  44. package/dist/components/dashboard/components/BarChart.js +0 -167
  45. package/dist/components/dashboard/components/BarChart.js.map +0 -1
  46. package/dist/components/dashboard/components/LineChart.d.ts +0 -10
  47. package/dist/components/dashboard/components/LineChart.d.ts.map +0 -1
  48. package/dist/components/dashboard/components/LineChart.js +0 -141
  49. package/dist/components/dashboard/components/LineChart.js.map +0 -1
  50. package/dist/components/dashboard/components/MetricCard.d.ts +0 -9
  51. package/dist/components/dashboard/components/MetricCard.d.ts.map +0 -1
  52. package/dist/components/dashboard/components/MetricCard.js +0 -163
  53. package/dist/components/dashboard/components/MetricCard.js.map +0 -1
  54. package/dist/components/dashboard/components/SourceLink.d.ts +0 -9
  55. package/dist/components/dashboard/components/SourceLink.d.ts.map +0 -1
  56. package/dist/components/dashboard/components/SourceLink.js +0 -39
  57. package/dist/components/dashboard/components/SourceLink.js.map +0 -1
  58. package/dist/components/dashboard/components/TimeRangeSelector.d.ts +0 -9
  59. package/dist/components/dashboard/components/TimeRangeSelector.d.ts.map +0 -1
  60. package/dist/components/dashboard/components/TimeRangeSelector.js +0 -167
  61. package/dist/components/dashboard/components/TimeRangeSelector.js.map +0 -1
  62. package/dist/components/dashboard/components/index.d.ts +0 -6
  63. package/dist/components/dashboard/components/index.d.ts.map +0 -1
  64. package/dist/components/dashboard/components/index.js +0 -6
  65. package/dist/components/dashboard/components/index.js.map +0 -1
  66. package/dist/components/dashboard/index.d.ts +0 -6
  67. package/dist/components/dashboard/index.d.ts.map +0 -1
  68. package/dist/components/dashboard/index.js +0 -8
  69. package/dist/components/dashboard/index.js.map +0 -1
  70. package/dist/components/dashboard/types.d.ts +0 -74
  71. package/dist/components/dashboard/types.d.ts.map +0 -1
  72. package/dist/components/dashboard/types.js +0 -8
  73. package/dist/components/dashboard/types.js.map +0 -1
  74. package/dist/components/state-view/PipelineView.d.ts +0 -14
  75. package/dist/components/state-view/PipelineView.d.ts.map +0 -1
  76. package/dist/components/state-view/PipelineView.js +0 -195
  77. package/dist/components/state-view/PipelineView.js.map +0 -1
  78. package/dist/components/state-view/index.d.ts +0 -14
  79. package/dist/components/state-view/index.d.ts.map +0 -1
  80. package/dist/components/state-view/index.js +0 -12
  81. package/dist/components/state-view/index.js.map +0 -1
  82. package/dist/components/state-view/types.d.ts +0 -188
  83. package/dist/components/state-view/types.d.ts.map +0 -1
  84. package/dist/components/state-view/types.js +0 -10
  85. package/dist/components/state-view/types.js.map +0 -1
  86. package/dist/components/state-view/useStateView.d.ts +0 -32
  87. package/dist/components/state-view/useStateView.d.ts.map +0 -1
  88. package/dist/components/state-view/useStateView.js +0 -129
  89. package/dist/components/state-view/useStateView.js.map +0 -1
  90. package/dist/contexts/GraphEditContext.d.ts +0 -20
  91. package/dist/contexts/GraphEditContext.d.ts.map +0 -1
  92. package/dist/contexts/GraphEditContext.js +0 -8
  93. package/dist/contexts/GraphEditContext.js.map +0 -1
  94. package/dist/contexts/TooltipPortalContext.d.ts +0 -8
  95. package/dist/contexts/TooltipPortalContext.d.ts.map +0 -1
  96. package/dist/contexts/TooltipPortalContext.js +0 -8
  97. package/dist/contexts/TooltipPortalContext.js.map +0 -1
  98. package/dist/edges/CustomEdge.d.ts +0 -24
  99. package/dist/edges/CustomEdge.d.ts.map +0 -1
  100. package/dist/edges/CustomEdge.js +0 -222
  101. package/dist/edges/CustomEdge.js.map +0 -1
  102. package/dist/edges/GenericEdge.d.ts +0 -18
  103. package/dist/edges/GenericEdge.d.ts.map +0 -1
  104. package/dist/edges/GenericEdge.js +0 -10
  105. package/dist/edges/GenericEdge.js.map +0 -1
  106. package/dist/graphify/kind.d.ts +0 -23
  107. package/dist/graphify/kind.d.ts.map +0 -1
  108. package/dist/graphify/kind.js +0 -77
  109. package/dist/graphify/kind.js.map +0 -1
  110. package/dist/hooks/usePathBasedEvents.d.ts +0 -42
  111. package/dist/hooks/usePathBasedEvents.d.ts.map +0 -1
  112. package/dist/hooks/usePathBasedEvents.js +0 -119
  113. package/dist/hooks/usePathBasedEvents.js.map +0 -1
  114. package/dist/hooks/useSequenceLayout.d.ts +0 -186
  115. package/dist/hooks/useSequenceLayout.d.ts.map +0 -1
  116. package/dist/hooks/useSequenceLayout.js +0 -327
  117. package/dist/hooks/useSequenceLayout.js.map +0 -1
  118. package/dist/hooks/useUndoRedo.d.ts +0 -80
  119. package/dist/hooks/useUndoRedo.d.ts.map +0 -1
  120. package/dist/hooks/useUndoRedo.js +0 -70
  121. package/dist/hooks/useUndoRedo.js.map +0 -1
  122. package/dist/nodes/CustomNode.d.ts +0 -28
  123. package/dist/nodes/CustomNode.d.ts.map +0 -1
  124. package/dist/nodes/CustomNode.js +0 -820
  125. package/dist/nodes/CustomNode.js.map +0 -1
  126. package/dist/nodes/GenericNode.d.ts +0 -20
  127. package/dist/nodes/GenericNode.d.ts.map +0 -1
  128. package/dist/nodes/GenericNode.js +0 -20
  129. package/dist/nodes/GenericNode.js.map +0 -1
  130. package/dist/nodes/otel/OtelBoundaryNode.d.ts +0 -55
  131. package/dist/nodes/otel/OtelBoundaryNode.d.ts.map +0 -1
  132. package/dist/nodes/otel/OtelBoundaryNode.js +0 -81
  133. package/dist/nodes/otel/OtelBoundaryNode.js.map +0 -1
  134. package/dist/nodes/otel/OtelEventNode.d.ts +0 -59
  135. package/dist/nodes/otel/OtelEventNode.d.ts.map +0 -1
  136. package/dist/nodes/otel/OtelEventNode.js +0 -82
  137. package/dist/nodes/otel/OtelEventNode.js.map +0 -1
  138. package/dist/nodes/otel/OtelResourceNode.d.ts +0 -53
  139. package/dist/nodes/otel/OtelResourceNode.d.ts.map +0 -1
  140. package/dist/nodes/otel/OtelResourceNode.js +0 -105
  141. package/dist/nodes/otel/OtelResourceNode.js.map +0 -1
  142. package/dist/nodes/otel/OtelScopeNode.d.ts +0 -53
  143. package/dist/nodes/otel/OtelScopeNode.d.ts.map +0 -1
  144. package/dist/nodes/otel/OtelScopeNode.js +0 -81
  145. package/dist/nodes/otel/OtelScopeNode.js.map +0 -1
  146. package/dist/nodes/otel/OtelSpanConventionNode.d.ts +0 -61
  147. package/dist/nodes/otel/OtelSpanConventionNode.d.ts.map +0 -1
  148. package/dist/nodes/otel/OtelSpanConventionNode.js +0 -131
  149. package/dist/nodes/otel/OtelSpanConventionNode.js.map +0 -1
  150. package/dist/nodes/otel/index.d.ts +0 -17
  151. package/dist/nodes/otel/index.d.ts.map +0 -1
  152. package/dist/nodes/otel/index.js +0 -13
  153. package/dist/nodes/otel/index.js.map +0 -1
  154. package/dist/nodes/otel/shared/NodeBadges.d.ts +0 -10
  155. package/dist/nodes/otel/shared/NodeBadges.d.ts.map +0 -1
  156. package/dist/nodes/otel/shared/NodeBadges.js +0 -178
  157. package/dist/nodes/otel/shared/NodeBadges.js.map +0 -1
  158. package/dist/nodes/otel/shared/NodeContent.d.ts +0 -10
  159. package/dist/nodes/otel/shared/NodeContent.d.ts.map +0 -1
  160. package/dist/nodes/otel/shared/NodeContent.js +0 -96
  161. package/dist/nodes/otel/shared/NodeContent.js.map +0 -1
  162. package/dist/nodes/otel/shared/index.d.ts +0 -8
  163. package/dist/nodes/otel/shared/index.d.ts.map +0 -1
  164. package/dist/nodes/otel/shared/index.js +0 -8
  165. package/dist/nodes/otel/shared/index.js.map +0 -1
  166. package/dist/nodes/otel/shared/types.d.ts +0 -129
  167. package/dist/nodes/otel/shared/types.d.ts.map +0 -1
  168. package/dist/nodes/otel/shared/types.js +0 -5
  169. package/dist/nodes/otel/shared/types.js.map +0 -1
  170. package/dist/nodes/otel/shared/useNodeBehavior.d.ts +0 -42
  171. package/dist/nodes/otel/shared/useNodeBehavior.d.ts.map +0 -1
  172. package/dist/nodes/otel/shared/useNodeBehavior.js +0 -61
  173. package/dist/nodes/otel/shared/useNodeBehavior.js.map +0 -1
  174. package/dist/pierre/PierreThroughlineCodeView.d.ts +0 -22
  175. package/dist/pierre/PierreThroughlineCodeView.d.ts.map +0 -1
  176. package/dist/pierre/PierreThroughlineCodeView.js +0 -206
  177. package/dist/pierre/PierreThroughlineCodeView.js.map +0 -1
  178. package/dist/subsystem/SubsystemCarousel.d.ts +0 -36
  179. package/dist/subsystem/SubsystemCarousel.d.ts.map +0 -1
  180. package/dist/subsystem/SubsystemCarousel.js +0 -163
  181. package/dist/subsystem/SubsystemCarousel.js.map +0 -1
  182. package/dist/utils/animationMapping.d.ts +0 -53
  183. package/dist/utils/animationMapping.d.ts.map +0 -1
  184. package/dist/utils/animationMapping.js +0 -126
  185. package/dist/utils/animationMapping.js.map +0 -1
  186. package/dist/utils/canvasBounds.d.ts +0 -50
  187. package/dist/utils/canvasBounds.d.ts.map +0 -1
  188. package/dist/utils/canvasBounds.js +0 -88
  189. package/dist/utils/canvasBounds.js.map +0 -1
  190. package/dist/utils/graphConverter.d.ts +0 -18
  191. package/dist/utils/graphConverter.d.ts.map +0 -1
  192. package/dist/utils/graphConverter.js +0 -114
  193. package/dist/utils/graphConverter.js.map +0 -1
  194. package/dist/utils/iconResolver.d.ts +0 -29
  195. package/dist/utils/iconResolver.d.ts.map +0 -1
  196. package/dist/utils/iconResolver.js +0 -30
  197. package/dist/utils/iconResolver.js.map +0 -1
  198. package/dist/utils/orientationUtils.d.ts +0 -19
  199. package/dist/utils/orientationUtils.d.ts.map +0 -1
  200. package/dist/utils/orientationUtils.js +0 -62
  201. 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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"}