@principal-ai/principal-view-react 0.14.15 → 0.14.16
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/dist/components/SequenceDiagramRenderer.d.ts +61 -0
- package/dist/components/SequenceDiagramRenderer.d.ts.map +1 -0
- package/dist/components/SequenceDiagramRenderer.js +184 -0
- package/dist/components/SequenceDiagramRenderer.js.map +1 -0
- package/dist/components/dashboard/MetricPanel.d.ts.map +1 -1
- package/dist/components/dashboard/MetricPanel.js +12 -12
- package/dist/components/dashboard/MetricPanel.js.map +1 -1
- package/dist/hooks/useSequenceLayout.d.ts +148 -0
- package/dist/hooks/useSequenceLayout.d.ts.map +1 -0
- package/dist/hooks/useSequenceLayout.js +225 -0
- package/dist/hooks/useSequenceLayout.js.map +1 -0
- package/dist/index.d.ts +4 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -0
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
- package/src/components/SequenceDiagramRenderer.tsx +459 -0
- package/src/components/dashboard/MetricPanel.tsx +28 -17
- package/src/hooks/useSequenceLayout.ts +413 -0
- package/src/index.ts +13 -0
- package/src/stories/SequenceDiagram.stories.tsx +306 -0
- package/src/stories/data/graph-converter-test-execution.json +50 -50
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Sequence Diagram Renderer
|
|
3
|
+
*
|
|
4
|
+
* Renders events in swimlane-based sequence diagram layout.
|
|
5
|
+
* Uses namespaces to determine swimlanes and event order for vertical positioning.
|
|
6
|
+
*/
|
|
7
|
+
import React from 'react';
|
|
8
|
+
import { type NodeTypes, type EdgeTypes } from '@xyflow/react';
|
|
9
|
+
import '@xyflow/react/dist/style.css';
|
|
10
|
+
import { type SequenceEvent, type SequenceEdge, type UseSequenceLayoutOptions } from '../hooks/useSequenceLayout';
|
|
11
|
+
/**
|
|
12
|
+
* Props for SequenceDiagramRenderer
|
|
13
|
+
*/
|
|
14
|
+
export interface SequenceDiagramRendererProps {
|
|
15
|
+
/** Events to display in the diagram */
|
|
16
|
+
events: SequenceEvent[];
|
|
17
|
+
/** Edges connecting events */
|
|
18
|
+
edges: SequenceEdge[];
|
|
19
|
+
/** Layout options */
|
|
20
|
+
layoutOptions?: UseSequenceLayoutOptions;
|
|
21
|
+
/** Optional custom node types */
|
|
22
|
+
nodeTypes?: NodeTypes;
|
|
23
|
+
/** Optional custom edge types */
|
|
24
|
+
edgeTypes?: EdgeTypes;
|
|
25
|
+
/** Callback when a namespace collapse state is toggled */
|
|
26
|
+
onToggleCollapse?: (namespace: string) => void;
|
|
27
|
+
/** Callback when a node is clicked */
|
|
28
|
+
onNodeClick?: (nodeId: string, event: React.MouseEvent) => void;
|
|
29
|
+
/** Optional class name */
|
|
30
|
+
className?: string;
|
|
31
|
+
/** Optional width */
|
|
32
|
+
width?: number | string;
|
|
33
|
+
/** Optional height */
|
|
34
|
+
height?: number | string;
|
|
35
|
+
/** Whether to show controls */
|
|
36
|
+
showControls?: boolean;
|
|
37
|
+
/** Whether to show background grid */
|
|
38
|
+
showBackground?: boolean;
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* Sequence Diagram Renderer
|
|
42
|
+
*
|
|
43
|
+
* Renders events as a sequence diagram with swimlanes based on namespaces.
|
|
44
|
+
*
|
|
45
|
+
* @example
|
|
46
|
+
* ```tsx
|
|
47
|
+
* <SequenceDiagramRenderer
|
|
48
|
+
* events={[
|
|
49
|
+
* { id: '1', name: 'auth.validation.started' },
|
|
50
|
+
* { id: '2', name: 'auth.validation.completed' },
|
|
51
|
+
* { id: '3', name: 'database.query.executed' },
|
|
52
|
+
* ]}
|
|
53
|
+
* edges={[
|
|
54
|
+
* { id: 'e1', fromEvent: '1', toEvent: '2' },
|
|
55
|
+
* { id: 'e2', fromEvent: '2', toEvent: '3' },
|
|
56
|
+
* ]}
|
|
57
|
+
* />
|
|
58
|
+
* ```
|
|
59
|
+
*/
|
|
60
|
+
export declare function SequenceDiagramRenderer(props: SequenceDiagramRendererProps): import("react/jsx-runtime").JSX.Element;
|
|
61
|
+
//# sourceMappingURL=SequenceDiagramRenderer.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SequenceDiagramRenderer.d.ts","sourceRoot":"","sources":["../../src/components/SequenceDiagramRenderer.tsx"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAA+B,MAAM,OAAO,CAAC;AACpD,OAAO,EAaL,KAAK,SAAS,EACd,KAAK,SAAS,EAGf,MAAM,eAAe,CAAC;AACvB,OAAO,8BAA8B,CAAC;AACtC,OAAO,EAEL,KAAK,aAAa,EAClB,KAAK,YAAY,EACjB,KAAK,wBAAwB,EAE9B,MAAM,4BAA4B,CAAC;AAqOpC;;GAEG;AACH,MAAM,WAAW,4BAA4B;IAC3C,uCAAuC;IACvC,MAAM,EAAE,aAAa,EAAE,CAAC;IAExB,8BAA8B;IAC9B,KAAK,EAAE,YAAY,EAAE,CAAC;IAEtB,qBAAqB;IACrB,aAAa,CAAC,EAAE,wBAAwB,CAAC;IAEzC,iCAAiC;IACjC,SAAS,CAAC,EAAE,SAAS,CAAC;IAEtB,iCAAiC;IACjC,SAAS,CAAC,EAAE,SAAS,CAAC;IAEtB,0DAA0D;IAC1D,gBAAgB,CAAC,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,IAAI,CAAC;IAE/C,sCAAsC;IACtC,WAAW,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,CAAC,UAAU,KAAK,IAAI,CAAC;IAEhE,0BAA0B;IAC1B,SAAS,CAAC,EAAE,MAAM,CAAC;IAEnB,qBAAqB;IACrB,KAAK,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IAExB,sBAAsB;IACtB,MAAM,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IAEzB,+BAA+B;IAC/B,YAAY,CAAC,EAAE,OAAO,CAAC;IAEvB,sCAAsC;IACtC,cAAc,CAAC,EAAE,OAAO,CAAC;CAC1B;AAwHD;;;;;;;;;;;;;;;;;;;GAmBG;AACH,wBAAgB,uBAAuB,CAAC,KAAK,EAAE,4BAA4B,2CAiB1E"}
|
|
@@ -0,0 +1,184 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
|
|
2
|
+
/**
|
|
3
|
+
* Sequence Diagram Renderer
|
|
4
|
+
*
|
|
5
|
+
* Renders events in swimlane-based sequence diagram layout.
|
|
6
|
+
* Uses namespaces to determine swimlanes and event order for vertical positioning.
|
|
7
|
+
*/
|
|
8
|
+
import { useCallback, useMemo } from 'react';
|
|
9
|
+
import { ReactFlow, Background, BackgroundVariant, Controls, ReactFlowProvider, Panel, useViewport, Handle, Position, BaseEdge, EdgeLabelRenderer, getBezierPath, } from '@xyflow/react';
|
|
10
|
+
import '@xyflow/react/dist/style.css';
|
|
11
|
+
import { useSequenceLayout, } from '../hooks/useSequenceLayout';
|
|
12
|
+
/**
|
|
13
|
+
* Minimal marker node for arrow-centric sequence diagrams
|
|
14
|
+
*/
|
|
15
|
+
function SequenceMarkerNode({ data }) {
|
|
16
|
+
return (_jsxs("div", { style: {
|
|
17
|
+
width: '100%',
|
|
18
|
+
height: '100%',
|
|
19
|
+
backgroundColor: 'var(--sequence-marker-bg, #6495ED)',
|
|
20
|
+
borderRadius: '50%',
|
|
21
|
+
border: '2px solid var(--sequence-marker-border, #4169E1)',
|
|
22
|
+
boxShadow: '0 1px 3px rgba(0,0,0,0.2)',
|
|
23
|
+
}, title: data.fullName, children: [_jsx(Handle, { type: "target", position: Position.Top, style: { visibility: 'hidden' } }), _jsx(Handle, { type: "source", position: Position.Bottom, style: { visibility: 'hidden' } })] }));
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* Sequence arrow edge with label
|
|
27
|
+
*/
|
|
28
|
+
function SequenceArrowEdge({ id, sourceX, sourceY, targetX, targetY, sourcePosition, targetPosition, label, data, }) {
|
|
29
|
+
// Use a straight line for same-lane, bezier for cross-lane
|
|
30
|
+
const isSameLane = !data?.crossesLanes;
|
|
31
|
+
const [edgePath, labelX, labelY] = getBezierPath({
|
|
32
|
+
sourceX,
|
|
33
|
+
sourceY,
|
|
34
|
+
sourcePosition,
|
|
35
|
+
targetX,
|
|
36
|
+
targetY,
|
|
37
|
+
targetPosition,
|
|
38
|
+
curvature: isSameLane ? 0.5 : 0.25,
|
|
39
|
+
});
|
|
40
|
+
return (_jsxs(_Fragment, { children: [_jsx(BaseEdge, { id: id, path: edgePath, style: {
|
|
41
|
+
stroke: 'var(--sequence-arrow-color, #4169E1)',
|
|
42
|
+
strokeWidth: 2,
|
|
43
|
+
}, markerEnd: "url(#sequence-arrow)" }), label && (_jsx(EdgeLabelRenderer, { children: _jsx("div", { style: {
|
|
44
|
+
position: 'absolute',
|
|
45
|
+
transform: `translate(-50%, -50%) translate(${labelX}px,${labelY}px)`,
|
|
46
|
+
background: 'var(--sequence-label-bg, rgba(255, 255, 255, 0.95))',
|
|
47
|
+
padding: '2px 8px',
|
|
48
|
+
borderRadius: 4,
|
|
49
|
+
fontSize: 12,
|
|
50
|
+
fontWeight: 500,
|
|
51
|
+
color: 'var(--sequence-label-text, #333)',
|
|
52
|
+
border: '1px solid var(--sequence-label-border, #ddd)',
|
|
53
|
+
pointerEvents: 'all',
|
|
54
|
+
whiteSpace: 'nowrap',
|
|
55
|
+
}, className: "nodrag nopan", children: label }) }))] }));
|
|
56
|
+
}
|
|
57
|
+
/**
|
|
58
|
+
* Default node types including sequence marker
|
|
59
|
+
*/
|
|
60
|
+
const defaultSequenceNodeTypes = {
|
|
61
|
+
sequenceMarker: SequenceMarkerNode,
|
|
62
|
+
};
|
|
63
|
+
/**
|
|
64
|
+
* Default edge types including sequence arrow
|
|
65
|
+
*/
|
|
66
|
+
const defaultSequenceEdgeTypes = {
|
|
67
|
+
sequenceArrow: SequenceArrowEdge,
|
|
68
|
+
};
|
|
69
|
+
/**
|
|
70
|
+
* Swimlane layer that renders behind nodes and transforms with viewport
|
|
71
|
+
*/
|
|
72
|
+
function SwimlaneLayer({ swimlanes, laneWidth, headerHeight, totalHeight, onToggleCollapse, }) {
|
|
73
|
+
const { x, y, zoom } = useViewport();
|
|
74
|
+
// Calculate the visible area height (use a large value to ensure lanes extend)
|
|
75
|
+
const extendedHeight = Math.max(totalHeight, 2000);
|
|
76
|
+
return (_jsxs("div", { style: {
|
|
77
|
+
position: 'absolute',
|
|
78
|
+
top: 0,
|
|
79
|
+
left: 0,
|
|
80
|
+
transformOrigin: '0 0',
|
|
81
|
+
transform: `translate(${x}px, ${y}px) scale(${zoom})`,
|
|
82
|
+
pointerEvents: 'none',
|
|
83
|
+
zIndex: -1,
|
|
84
|
+
}, children: [swimlanes.map((lane, index) => {
|
|
85
|
+
const isEven = index % 2 === 0;
|
|
86
|
+
return (_jsx("div", { style: {
|
|
87
|
+
position: 'absolute',
|
|
88
|
+
left: lane.x - laneWidth / 2,
|
|
89
|
+
top: 0,
|
|
90
|
+
width: laneWidth,
|
|
91
|
+
height: extendedHeight,
|
|
92
|
+
backgroundColor: isEven
|
|
93
|
+
? 'var(--sequence-lane-even, rgba(100, 149, 237, 0.08))'
|
|
94
|
+
: 'var(--sequence-lane-odd, rgba(100, 149, 237, 0.03))',
|
|
95
|
+
borderRight: '1px solid var(--sequence-lane-border, rgba(100, 149, 237, 0.2))',
|
|
96
|
+
} }, `bg-${lane.namespace}`));
|
|
97
|
+
}), swimlanes.map((lane) => {
|
|
98
|
+
const hasChildren = lane.children.length > 0;
|
|
99
|
+
return (_jsxs("div", { style: {
|
|
100
|
+
position: 'absolute',
|
|
101
|
+
left: lane.x - laneWidth / 2,
|
|
102
|
+
top: 0,
|
|
103
|
+
width: laneWidth,
|
|
104
|
+
height: headerHeight,
|
|
105
|
+
display: 'flex',
|
|
106
|
+
alignItems: 'center',
|
|
107
|
+
justifyContent: 'center',
|
|
108
|
+
backgroundColor: 'var(--sequence-header-bg, rgba(100, 149, 237, 0.15))',
|
|
109
|
+
borderBottom: '2px solid var(--sequence-header-border, rgba(100, 149, 237, 0.4))',
|
|
110
|
+
fontWeight: 600,
|
|
111
|
+
fontSize: 13,
|
|
112
|
+
color: 'var(--sequence-header-text, #333)',
|
|
113
|
+
pointerEvents: 'auto',
|
|
114
|
+
cursor: hasChildren ? 'pointer' : 'default',
|
|
115
|
+
userSelect: 'none',
|
|
116
|
+
}, onClick: () => hasChildren && onToggleCollapse?.(lane.namespace), children: [hasChildren && (_jsx("span", { style: { marginRight: 6, fontSize: 10 }, children: lane.isCollapsed ? '▶' : '▼' })), _jsx("span", { children: lane.label }), lane.eventIds.length > 1 && (_jsxs("span", { style: { marginLeft: 6, fontSize: 11, opacity: 0.6 }, children: ["(", lane.eventIds.length, ")"] }))] }, `header-${lane.namespace}`));
|
|
117
|
+
}), swimlanes.map((lane) => (_jsx("div", { style: {
|
|
118
|
+
position: 'absolute',
|
|
119
|
+
left: lane.x,
|
|
120
|
+
top: headerHeight,
|
|
121
|
+
width: 2,
|
|
122
|
+
height: extendedHeight - headerHeight,
|
|
123
|
+
backgroundColor: 'var(--sequence-lifeline, rgba(100, 149, 237, 0.3))',
|
|
124
|
+
transform: 'translateX(-1px)',
|
|
125
|
+
} }, `lifeline-${lane.namespace}`)))] }));
|
|
126
|
+
}
|
|
127
|
+
/**
|
|
128
|
+
* Inner component that uses React Flow hooks
|
|
129
|
+
*/
|
|
130
|
+
function SequenceDiagramInner({ events, edges: sequenceEdges, layoutOptions = {}, nodeTypes: customNodeTypes, edgeTypes: customEdgeTypes, onToggleCollapse, onNodeClick, showControls = true, showBackground = false, // Default to false since swimlanes provide visual structure
|
|
131
|
+
}) {
|
|
132
|
+
// Extract layout params
|
|
133
|
+
const { laneWidth = 200, headerHeight = 60, arrowCentric = false } = layoutOptions;
|
|
134
|
+
// Merge custom node/edge types with sequence defaults
|
|
135
|
+
const nodeTypes = useMemo(() => ({ ...defaultSequenceNodeTypes, ...customNodeTypes }), [customNodeTypes]);
|
|
136
|
+
const edgeTypes = useMemo(() => ({ ...defaultSequenceEdgeTypes, ...customEdgeTypes }), [customEdgeTypes]);
|
|
137
|
+
// Compute layout (pass arrowCentric through layoutOptions)
|
|
138
|
+
const { nodes, edges, swimlanes, totalHeight } = useSequenceLayout(events, sequenceEdges, { ...layoutOptions, arrowCentric });
|
|
139
|
+
// Handle node click
|
|
140
|
+
const handleNodeClick = useCallback((_event, node) => {
|
|
141
|
+
onNodeClick?.(node.id, _event);
|
|
142
|
+
}, [onNodeClick]);
|
|
143
|
+
return (_jsxs(ReactFlow, { nodes: nodes, edges: edges, nodeTypes: nodeTypes, edgeTypes: edgeTypes, onNodeClick: handleNodeClick, fitView: true, fitViewOptions: {
|
|
144
|
+
padding: 0.2,
|
|
145
|
+
minZoom: 0.5,
|
|
146
|
+
maxZoom: 1.5,
|
|
147
|
+
}, minZoom: 0.1, maxZoom: 2, nodesDraggable: false, nodesConnectable: false, elementsSelectable: true, panOnScroll: true, zoomOnScroll: true, children: [_jsx("svg", { style: { position: 'absolute', width: 0, height: 0 }, children: _jsx("defs", { children: _jsx("marker", { id: "sequence-arrow", viewBox: "0 0 10 10", refX: "8", refY: "5", markerWidth: "6", markerHeight: "6", orient: "auto-start-reverse", children: _jsx("path", { d: "M 0 0 L 10 5 L 0 10 z", fill: "var(--sequence-arrow-color, #4169E1)" }) }) }) }), showBackground && (_jsx(Background, { variant: BackgroundVariant.Dots, gap: 16, size: 1 })), showControls && _jsx(Controls, {}), _jsx(SwimlaneLayer, { swimlanes: swimlanes, laneWidth: laneWidth, headerHeight: headerHeight, totalHeight: totalHeight, onToggleCollapse: onToggleCollapse }), swimlanes.some((s) => s.children.length > 0) && (_jsx(Panel, { position: "top-right", children: _jsx("div", { style: {
|
|
148
|
+
background: 'var(--sequence-panel-bg, rgba(255, 255, 255, 0.95))',
|
|
149
|
+
border: '1px solid var(--sequence-panel-border, #ddd)',
|
|
150
|
+
borderRadius: 4,
|
|
151
|
+
padding: '6px 10px',
|
|
152
|
+
fontSize: 11,
|
|
153
|
+
color: '#666',
|
|
154
|
+
}, children: "Click lane headers to expand/collapse" }) }))] }));
|
|
155
|
+
}
|
|
156
|
+
/**
|
|
157
|
+
* Sequence Diagram Renderer
|
|
158
|
+
*
|
|
159
|
+
* Renders events as a sequence diagram with swimlanes based on namespaces.
|
|
160
|
+
*
|
|
161
|
+
* @example
|
|
162
|
+
* ```tsx
|
|
163
|
+
* <SequenceDiagramRenderer
|
|
164
|
+
* events={[
|
|
165
|
+
* { id: '1', name: 'auth.validation.started' },
|
|
166
|
+
* { id: '2', name: 'auth.validation.completed' },
|
|
167
|
+
* { id: '3', name: 'database.query.executed' },
|
|
168
|
+
* ]}
|
|
169
|
+
* edges={[
|
|
170
|
+
* { id: 'e1', fromEvent: '1', toEvent: '2' },
|
|
171
|
+
* { id: 'e2', fromEvent: '2', toEvent: '3' },
|
|
172
|
+
* ]}
|
|
173
|
+
* />
|
|
174
|
+
* ```
|
|
175
|
+
*/
|
|
176
|
+
export function SequenceDiagramRenderer(props) {
|
|
177
|
+
const { className, width = '100%', height = 600 } = props;
|
|
178
|
+
return (_jsx("div", { className: className, style: {
|
|
179
|
+
width,
|
|
180
|
+
height,
|
|
181
|
+
position: 'relative',
|
|
182
|
+
}, children: _jsx(ReactFlowProvider, { children: _jsx(SequenceDiagramInner, { ...props }) }) }));
|
|
183
|
+
}
|
|
184
|
+
//# sourceMappingURL=SequenceDiagramRenderer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SequenceDiagramRenderer.js","sourceRoot":"","sources":["../../src/components/SequenceDiagramRenderer.tsx"],"names":[],"mappings":";AAAA;;;;;GAKG;AAEH,OAAc,EAAE,WAAW,EAAE,OAAO,EAAE,MAAM,OAAO,CAAC;AACpD,OAAO,EACL,SAAS,EACT,UAAU,EACV,iBAAiB,EACjB,QAAQ,EACR,iBAAiB,EACjB,KAAK,EACL,WAAW,EACX,MAAM,EACN,QAAQ,EACR,QAAQ,EACR,iBAAiB,EACjB,aAAa,GAKd,MAAM,eAAe,CAAC;AACvB,OAAO,8BAA8B,CAAC;AACtC,OAAO,EACL,iBAAiB,GAKlB,MAAM,4BAA4B,CAAC;AAEpC;;GAEG;AACH,SAAS,kBAAkB,CAAC,EAAE,IAAI,EAAa;IAC7C,OAAO,CACL,eACE,KAAK,EAAE;YACL,KAAK,EAAE,MAAM;YACb,MAAM,EAAE,MAAM;YACd,eAAe,EAAE,oCAAoC;YACrD,YAAY,EAAE,KAAK;YACnB,MAAM,EAAE,kDAAkD;YAC1D,SAAS,EAAE,2BAA2B;SACvC,EACD,KAAK,EAAE,IAAI,CAAC,QAAkB,aAE9B,KAAC,MAAM,IACL,IAAI,EAAC,QAAQ,EACb,QAAQ,EAAE,QAAQ,CAAC,GAAG,EACtB,KAAK,EAAE,EAAE,UAAU,EAAE,QAAQ,EAAE,GAC/B,EACF,KAAC,MAAM,IACL,IAAI,EAAC,QAAQ,EACb,QAAQ,EAAE,QAAQ,CAAC,MAAM,EACzB,KAAK,EAAE,EAAE,UAAU,EAAE,QAAQ,EAAE,GAC/B,IACE,CACP,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,SAAS,iBAAiB,CAAC,EACzB,EAAE,EACF,OAAO,EACP,OAAO,EACP,OAAO,EACP,OAAO,EACP,cAAc,EACd,cAAc,EACd,KAAK,EACL,IAAI,GACM;IACV,2DAA2D;IAC3D,MAAM,UAAU,GAAG,CAAC,IAAI,EAAE,YAAY,CAAC;IAEvC,MAAM,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,CAAC,GAAG,aAAa,CAAC;QAC/C,OAAO;QACP,OAAO;QACP,cAAc;QACd,OAAO;QACP,OAAO;QACP,cAAc;QACd,SAAS,EAAE,UAAU,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI;KACnC,CAAC,CAAC;IAEH,OAAO,CACL,8BACE,KAAC,QAAQ,IACP,EAAE,EAAE,EAAE,EACN,IAAI,EAAE,QAAQ,EACd,KAAK,EAAE;oBACL,MAAM,EAAE,sCAAsC;oBAC9C,WAAW,EAAE,CAAC;iBACf,EACD,SAAS,EAAC,sBAAsB,GAChC,EACD,KAAK,IAAI,CACR,KAAC,iBAAiB,cAChB,cACE,KAAK,EAAE;wBACL,QAAQ,EAAE,UAAU;wBACpB,SAAS,EAAE,mCAAmC,MAAM,MAAM,MAAM,KAAK;wBACrE,UAAU,EAAE,qDAAqD;wBACjE,OAAO,EAAE,SAAS;wBAClB,YAAY,EAAE,CAAC;wBACf,QAAQ,EAAE,EAAE;wBACZ,UAAU,EAAE,GAAG;wBACf,KAAK,EAAE,kCAAkC;wBACzC,MAAM,EAAE,8CAA8C;wBACtD,aAAa,EAAE,KAAK;wBACpB,UAAU,EAAE,QAAQ;qBACrB,EACD,SAAS,EAAC,cAAc,YAEvB,KAAK,GACF,GACY,CACrB,IACA,CACJ,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,MAAM,wBAAwB,GAAc;IAC1C,cAAc,EAAE,kBAAkB;CACnC,CAAC;AAEF;;GAEG;AACH,MAAM,wBAAwB,GAAc;IAC1C,aAAa,EAAE,iBAAiB;CACjC,CAAC;AAaF;;GAEG;AACH,SAAS,aAAa,CAAC,EACrB,SAAS,EACT,SAAS,EACT,YAAY,EACZ,WAAW,EACX,gBAAgB,GACG;IACnB,MAAM,EAAE,CAAC,EAAE,CAAC,EAAE,IAAI,EAAE,GAAG,WAAW,EAAE,CAAC;IAErC,+EAA+E;IAC/E,MAAM,cAAc,GAAG,IAAI,CAAC,GAAG,CAAC,WAAW,EAAE,IAAI,CAAC,CAAC;IAEnD,OAAO,CACL,eACE,KAAK,EAAE;YACL,QAAQ,EAAE,UAAU;YACpB,GAAG,EAAE,CAAC;YACN,IAAI,EAAE,CAAC;YACP,eAAe,EAAE,KAAK;YACtB,SAAS,EAAE,aAAa,CAAC,OAAO,CAAC,aAAa,IAAI,GAAG;YACrD,aAAa,EAAE,MAAM;YACrB,MAAM,EAAE,CAAC,CAAC;SACX,aAGA,SAAS,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE;gBAC7B,MAAM,MAAM,GAAG,KAAK,GAAG,CAAC,KAAK,CAAC,CAAC;gBAC/B,OAAO,CACL,cAEE,KAAK,EAAE;wBACL,QAAQ,EAAE,UAAU;wBACpB,IAAI,EAAE,IAAI,CAAC,CAAC,GAAG,SAAS,GAAG,CAAC;wBAC5B,GAAG,EAAE,CAAC;wBACN,KAAK,EAAE,SAAS;wBAChB,MAAM,EAAE,cAAc;wBACtB,eAAe,EAAE,MAAM;4BACrB,CAAC,CAAC,sDAAsD;4BACxD,CAAC,CAAC,qDAAqD;wBACzD,WAAW,EAAE,iEAAiE;qBAC/E,IAXI,MAAM,IAAI,CAAC,SAAS,EAAE,CAY3B,CACH,CAAC;YACJ,CAAC,CAAC,EAGD,SAAS,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE;gBACtB,MAAM,WAAW,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC;gBAC7C,OAAO,CACL,eAEE,KAAK,EAAE;wBACL,QAAQ,EAAE,UAAU;wBACpB,IAAI,EAAE,IAAI,CAAC,CAAC,GAAG,SAAS,GAAG,CAAC;wBAC5B,GAAG,EAAE,CAAC;wBACN,KAAK,EAAE,SAAS;wBAChB,MAAM,EAAE,YAAY;wBACpB,OAAO,EAAE,MAAM;wBACf,UAAU,EAAE,QAAQ;wBACpB,cAAc,EAAE,QAAQ;wBACxB,eAAe,EAAE,sDAAsD;wBACvE,YAAY,EAAE,mEAAmE;wBACjF,UAAU,EAAE,GAAG;wBACf,QAAQ,EAAE,EAAE;wBACZ,KAAK,EAAE,mCAAmC;wBAC1C,aAAa,EAAE,MAAM;wBACrB,MAAM,EAAE,WAAW,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS;wBAC3C,UAAU,EAAE,MAAM;qBACnB,EACD,OAAO,EAAE,GAAG,EAAE,CAAC,WAAW,IAAI,gBAAgB,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,aAE/D,WAAW,IAAI,CACd,eAAM,KAAK,EAAE,EAAE,WAAW,EAAE,CAAC,EAAE,QAAQ,EAAE,EAAE,EAAE,YAC1C,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,GACxB,CACR,EACD,yBAAO,IAAI,CAAC,KAAK,GAAQ,EACxB,IAAI,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,IAAI,CAC3B,gBAAM,KAAK,EAAE,EAAE,UAAU,EAAE,CAAC,EAAE,QAAQ,EAAE,EAAE,EAAE,OAAO,EAAE,GAAG,EAAE,kBACtD,IAAI,CAAC,QAAQ,CAAC,MAAM,SACjB,CACR,KA/BI,UAAU,IAAI,CAAC,SAAS,EAAE,CAgC3B,CACP,CAAC;YACJ,CAAC,CAAC,EAGD,SAAS,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CACvB,cAEE,KAAK,EAAE;oBACL,QAAQ,EAAE,UAAU;oBACpB,IAAI,EAAE,IAAI,CAAC,CAAC;oBACZ,GAAG,EAAE,YAAY;oBACjB,KAAK,EAAE,CAAC;oBACR,MAAM,EAAE,cAAc,GAAG,YAAY;oBACrC,eAAe,EAAE,oDAAoD;oBACrE,SAAS,EAAE,kBAAkB;iBAC9B,IATI,YAAY,IAAI,CAAC,SAAS,EAAE,CAUjC,CACH,CAAC,IACE,CACP,CAAC;AACJ,CAAC;AA2CD;;GAEG;AACH,SAAS,oBAAoB,CAAC,EAC5B,MAAM,EACN,KAAK,EAAE,aAAa,EACpB,aAAa,GAAG,EAAE,EAClB,SAAS,EAAE,eAAe,EAC1B,SAAS,EAAE,eAAe,EAC1B,gBAAgB,EAChB,WAAW,EACX,YAAY,GAAG,IAAI,EACnB,cAAc,GAAG,KAAK,EAAE,4DAA4D;EACvD;IAC7B,wBAAwB;IACxB,MAAM,EAAE,SAAS,GAAG,GAAG,EAAE,YAAY,GAAG,EAAE,EAAE,YAAY,GAAG,KAAK,EAAE,GAAG,aAAa,CAAC;IAEnF,sDAAsD;IACtD,MAAM,SAAS,GAAG,OAAO,CACvB,GAAG,EAAE,CAAC,CAAC,EAAE,GAAG,wBAAwB,EAAE,GAAG,eAAe,EAAE,CAAC,EAC3D,CAAC,eAAe,CAAC,CAClB,CAAC;IACF,MAAM,SAAS,GAAG,OAAO,CACvB,GAAG,EAAE,CAAC,CAAC,EAAE,GAAG,wBAAwB,EAAE,GAAG,eAAe,EAAE,CAAC,EAC3D,CAAC,eAAe,CAAC,CAClB,CAAC;IAEF,2DAA2D;IAC3D,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,SAAS,EAAE,WAAW,EAAE,GAAG,iBAAiB,CAChE,MAAM,EACN,aAAa,EACb,EAAE,GAAG,aAAa,EAAE,YAAY,EAAE,CACnC,CAAC;IAEF,oBAAoB;IACpB,MAAM,eAAe,GAAG,WAAW,CACjC,CAAC,MAAwB,EAAE,IAAoB,EAAE,EAAE;QACjD,WAAW,EAAE,CAAC,IAAI,CAAC,EAAE,EAAE,MAAM,CAAC,CAAC;IACjC,CAAC,EACD,CAAC,WAAW,CAAC,CACd,CAAC;IAEF,OAAO,CACL,MAAC,SAAS,IACR,KAAK,EAAE,KAAK,EACZ,KAAK,EAAE,KAAK,EACZ,SAAS,EAAE,SAAS,EACpB,SAAS,EAAE,SAAS,EACpB,WAAW,EAAE,eAAe,EAC5B,OAAO,QACP,cAAc,EAAE;YACd,OAAO,EAAE,GAAG;YACZ,OAAO,EAAE,GAAG;YACZ,OAAO,EAAE,GAAG;SACb,EACD,OAAO,EAAE,GAAG,EACZ,OAAO,EAAE,CAAC,EACV,cAAc,EAAE,KAAK,EACrB,gBAAgB,EAAE,KAAK,EACvB,kBAAkB,EAAE,IAAI,EACxB,WAAW,QACX,YAAY,mBAGZ,cAAK,KAAK,EAAE,EAAE,QAAQ,EAAE,UAAU,EAAE,KAAK,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,YACvD,yBACE,iBACE,EAAE,EAAC,gBAAgB,EACnB,OAAO,EAAC,WAAW,EACnB,IAAI,EAAC,GAAG,EACR,IAAI,EAAC,GAAG,EACR,WAAW,EAAC,GAAG,EACf,YAAY,EAAC,GAAG,EAChB,MAAM,EAAC,oBAAoB,YAE3B,eACE,CAAC,EAAC,uBAAuB,EACzB,IAAI,EAAC,sCAAsC,GAC3C,GACK,GACJ,GACH,EAEL,cAAc,IAAI,CACjB,KAAC,UAAU,IAAC,OAAO,EAAE,iBAAiB,CAAC,IAAI,EAAE,GAAG,EAAE,EAAE,EAAE,IAAI,EAAE,CAAC,GAAI,CAClE,EACA,YAAY,IAAI,KAAC,QAAQ,KAAG,EAG7B,KAAC,aAAa,IACZ,SAAS,EAAE,SAAS,EACpB,SAAS,EAAE,SAAS,EACpB,YAAY,EAAE,YAAY,EAC1B,WAAW,EAAE,WAAW,EACxB,gBAAgB,EAAE,gBAAgB,GAClC,EAGD,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC,IAAI,CAC/C,KAAC,KAAK,IAAC,QAAQ,EAAC,WAAW,YACzB,cACE,KAAK,EAAE;wBACL,UAAU,EAAE,qDAAqD;wBACjE,MAAM,EAAE,8CAA8C;wBACtD,YAAY,EAAE,CAAC;wBACf,OAAO,EAAE,UAAU;wBACnB,QAAQ,EAAE,EAAE;wBACZ,KAAK,EAAE,MAAM;qBACd,sDAGG,GACA,CACT,IACS,CACb,CAAC;AACJ,CAAC;AAED;;;;;;;;;;;;;;;;;;;GAmBG;AACH,MAAM,UAAU,uBAAuB,CAAC,KAAmC;IACzE,MAAM,EAAE,SAAS,EAAE,KAAK,GAAG,MAAM,EAAE,MAAM,GAAG,GAAG,EAAE,GAAG,KAAK,CAAC;IAE1D,OAAO,CACL,cACE,SAAS,EAAE,SAAS,EACpB,KAAK,EAAE;YACL,KAAK;YACL,MAAM;YACN,QAAQ,EAAE,UAAU;SACrB,YAED,KAAC,iBAAiB,cAChB,KAAC,oBAAoB,OAAK,KAAK,GAAI,GACjB,GAChB,CACP,CAAC;AACJ,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MetricPanel.d.ts","sourceRoot":"","sources":["../../../src/components/dashboard/MetricPanel.tsx"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH,OAAO,KAAK,EACV,gBAAgB,EAIjB,MAAM,SAAS,CAAC;AAGjB,wBAAgB,WAAW,CAAC,EAC1B,MAAM,EACN,IAAI,EACJ,aAAa,EACb,aAAa,GACd,EAAE,gBAAgB,
|
|
1
|
+
{"version":3,"file":"MetricPanel.d.ts","sourceRoot":"","sources":["../../../src/components/dashboard/MetricPanel.tsx"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH,OAAO,KAAK,EACV,gBAAgB,EAIjB,MAAM,SAAS,CAAC;AAGjB,wBAAgB,WAAW,CAAC,EAC1B,MAAM,EACN,IAAI,EACJ,aAAa,EACb,aAAa,GACd,EAAE,gBAAgB,2CAwFlB"}
|
|
@@ -21,18 +21,18 @@ export function MetricPanel({ metric, data, onMetricClick, onSourceClick, }) {
|
|
|
21
21
|
}
|
|
22
22
|
// Render error state
|
|
23
23
|
if (data.error) {
|
|
24
|
-
return (_jsxs("div", { style: {
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
24
|
+
return (_jsxs("div", { style: { display: 'flex', flexDirection: 'column', gap: 8 }, children: [_jsxs("div", { style: {
|
|
25
|
+
backgroundColor: theme.colors.surface || theme.colors.background,
|
|
26
|
+
border: `1px solid ${theme.colors.error}`,
|
|
27
|
+
borderRadius: theme.radii?.[2] || 8,
|
|
28
|
+
padding: theme.space?.[3] || 16,
|
|
29
|
+
fontFamily: theme.fonts.body,
|
|
30
|
+
}, children: [_jsx("div", { style: {
|
|
31
|
+
color: theme.colors.error,
|
|
32
|
+
marginBottom: theme.space?.[2] || 8,
|
|
33
|
+
fontSize: theme.fontSizes[1],
|
|
34
|
+
fontWeight: theme.fontWeights.medium,
|
|
35
|
+
}, children: metric.name }), _jsx("div", { style: { color: theme.colors.textSecondary, fontSize: theme.fontSizes[0] }, children: data.error })] }), metric.sources && metric.sources.length > 0 && onSourceClick && (_jsx("div", { style: { display: 'flex', gap: 8, flexWrap: 'wrap' }, children: metric.sources.map((source, i) => (_jsx(SourceLink, { source: source, onClick: onSourceClick }, i))) }))] }));
|
|
36
36
|
}
|
|
37
37
|
const handleClick = () => {
|
|
38
38
|
onMetricClick?.(metric.id);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MetricPanel.js","sourceRoot":"","sources":["../../../src/components/dashboard/MetricPanel.tsx"],"names":[],"mappings":";AAQA,OAAO,EAAE,QAAQ,EAAE,MAAM,+BAA+B,CAAC;AAOzD,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAE3E,MAAM,UAAU,WAAW,CAAC,EAC1B,MAAM,EACN,IAAI,EACJ,aAAa,EACb,aAAa,GACI;IACjB,MAAM,EAAE,KAAK,EAAE,GAAG,QAAQ,EAAE,CAAC;IAE7B,mCAAmC;IACnC,MAAM,aAAa,GAAG,gBAAgB,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;IAErD,uBAAuB;IACvB,IAAI,IAAI,CAAC,OAAO,EAAE;QAChB,OAAO,CACL,cACE,KAAK,EAAE;gBACL,eAAe,EAAE,KAAK,CAAC,MAAM,CAAC,OAAO,IAAI,KAAK,CAAC,MAAM,CAAC,UAAU;gBAChE,MAAM,EAAE,aAAa,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE;gBAC1C,YAAY,EAAE,KAAK,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;gBACnC,OAAO,EAAE,KAAK,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE;gBAC/B,SAAS,EAAE,GAAG;gBACd,OAAO,EAAE,MAAM;gBACf,UAAU,EAAE,QAAQ;gBACpB,cAAc,EAAE,QAAQ;gBACxB,UAAU,EAAE,KAAK,CAAC,KAAK,CAAC,IAAI;aAC7B,YAED,eAAM,KAAK,EAAE,EAAE,KAAK,EAAE,KAAK,CAAC,MAAM,CAAC,aAAa,EAAE,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,2BAEzE,GACH,CACP,CAAC;KACH;IAED,qBAAqB;IACrB,IAAI,IAAI,CAAC,KAAK,EAAE;QACd,OAAO,CACL,eACE,KAAK,EAAE;
|
|
1
|
+
{"version":3,"file":"MetricPanel.js","sourceRoot":"","sources":["../../../src/components/dashboard/MetricPanel.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,148 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* React hook for sequence diagram layout
|
|
3
|
+
*
|
|
4
|
+
* Computes swimlane-based positioning for events based on their namespaces.
|
|
5
|
+
*/
|
|
6
|
+
import type { Node, Edge } from '@xyflow/react';
|
|
7
|
+
/**
|
|
8
|
+
* Input event for sequence layout
|
|
9
|
+
*/
|
|
10
|
+
export interface SequenceEvent {
|
|
11
|
+
/** Unique event identifier */
|
|
12
|
+
id: string;
|
|
13
|
+
/** Event name with namespace (e.g., "auth.validation.started") */
|
|
14
|
+
name: string;
|
|
15
|
+
/** Optional display label (defaults to name) */
|
|
16
|
+
label?: string;
|
|
17
|
+
/** Optional event type for styling */
|
|
18
|
+
type?: string;
|
|
19
|
+
/** Additional data to pass through to the node */
|
|
20
|
+
data?: Record<string, unknown>;
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* Input edge for sequence layout
|
|
24
|
+
*/
|
|
25
|
+
export interface SequenceEdge {
|
|
26
|
+
/** Unique edge identifier */
|
|
27
|
+
id: string;
|
|
28
|
+
/** Source event ID */
|
|
29
|
+
fromEvent: string;
|
|
30
|
+
/** Target event ID */
|
|
31
|
+
toEvent: string;
|
|
32
|
+
/** Optional edge label */
|
|
33
|
+
label?: string;
|
|
34
|
+
/** Optional edge type for styling */
|
|
35
|
+
type?: string;
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* Swimlane information computed from events
|
|
39
|
+
*/
|
|
40
|
+
export interface Swimlane {
|
|
41
|
+
/** Namespace identifier */
|
|
42
|
+
namespace: string;
|
|
43
|
+
/** Display label for the lane header */
|
|
44
|
+
label: string;
|
|
45
|
+
/** X position of the lane center */
|
|
46
|
+
x: number;
|
|
47
|
+
/** Parent namespace (for hierarchical lanes) */
|
|
48
|
+
parentNamespace?: string;
|
|
49
|
+
/** Whether this lane is collapsed */
|
|
50
|
+
isCollapsed: boolean;
|
|
51
|
+
/** Child namespaces */
|
|
52
|
+
children: string[];
|
|
53
|
+
/** Events in this lane */
|
|
54
|
+
eventIds: string[];
|
|
55
|
+
}
|
|
56
|
+
/**
|
|
57
|
+
* Namespace extraction strategy
|
|
58
|
+
*/
|
|
59
|
+
export type NamespaceStrategy = 'first' | 'all-but-last' | number | ((name: string) => string);
|
|
60
|
+
/**
|
|
61
|
+
* Options for sequence layout
|
|
62
|
+
*/
|
|
63
|
+
export interface UseSequenceLayoutOptions {
|
|
64
|
+
/**
|
|
65
|
+
* How to extract namespace from event name
|
|
66
|
+
* @default 'all-but-last'
|
|
67
|
+
*/
|
|
68
|
+
namespaceStrategy?: NamespaceStrategy;
|
|
69
|
+
/**
|
|
70
|
+
* Width of each swimlane
|
|
71
|
+
* @default 200
|
|
72
|
+
*/
|
|
73
|
+
laneWidth?: number;
|
|
74
|
+
/**
|
|
75
|
+
* Gap between swimlanes
|
|
76
|
+
* @default 50
|
|
77
|
+
*/
|
|
78
|
+
laneGap?: number;
|
|
79
|
+
/**
|
|
80
|
+
* Vertical spacing between events
|
|
81
|
+
* @default 80
|
|
82
|
+
*/
|
|
83
|
+
eventSpacing?: number;
|
|
84
|
+
/**
|
|
85
|
+
* Height reserved for lane headers
|
|
86
|
+
* @default 60
|
|
87
|
+
*/
|
|
88
|
+
headerHeight?: number;
|
|
89
|
+
/**
|
|
90
|
+
* Node width (marker width in arrow-centric mode)
|
|
91
|
+
* @default 180 (or 12 in arrow-centric mode)
|
|
92
|
+
*/
|
|
93
|
+
nodeWidth?: number;
|
|
94
|
+
/**
|
|
95
|
+
* Node height (marker height in arrow-centric mode)
|
|
96
|
+
* @default 50 (or 12 in arrow-centric mode)
|
|
97
|
+
*/
|
|
98
|
+
nodeHeight?: number;
|
|
99
|
+
/**
|
|
100
|
+
* Arrow-centric mode: minimal node markers with labels on edges
|
|
101
|
+
* @default false
|
|
102
|
+
*/
|
|
103
|
+
arrowCentric?: boolean;
|
|
104
|
+
/**
|
|
105
|
+
* Namespaces to collapse (show as single lane)
|
|
106
|
+
*/
|
|
107
|
+
collapsedNamespaces?: string[];
|
|
108
|
+
}
|
|
109
|
+
/**
|
|
110
|
+
* Result from sequence layout computation
|
|
111
|
+
*/
|
|
112
|
+
export interface UseSequenceLayoutResult {
|
|
113
|
+
/** Positioned nodes for React Flow */
|
|
114
|
+
nodes: Node[];
|
|
115
|
+
/** Edges for React Flow */
|
|
116
|
+
edges: Edge[];
|
|
117
|
+
/** Computed swimlane information */
|
|
118
|
+
swimlanes: Swimlane[];
|
|
119
|
+
/** Total width of the diagram */
|
|
120
|
+
totalWidth: number;
|
|
121
|
+
/** Total height of the diagram */
|
|
122
|
+
totalHeight: number;
|
|
123
|
+
}
|
|
124
|
+
/**
|
|
125
|
+
* Hook for computing sequence diagram layout
|
|
126
|
+
*
|
|
127
|
+
* @param events - Events to layout
|
|
128
|
+
* @param edges - Edges between events
|
|
129
|
+
* @param options - Layout options
|
|
130
|
+
* @returns Layout result with positioned nodes, edges, and swimlane info
|
|
131
|
+
*
|
|
132
|
+
* @example
|
|
133
|
+
* ```tsx
|
|
134
|
+
* const { nodes, edges, swimlanes } = useSequenceLayout(
|
|
135
|
+
* [
|
|
136
|
+
* { id: '1', name: 'auth.validation.started' },
|
|
137
|
+
* { id: '2', name: 'auth.validation.completed' },
|
|
138
|
+
* { id: '3', name: 'database.query.executed' },
|
|
139
|
+
* ],
|
|
140
|
+
* [
|
|
141
|
+
* { id: 'e1', fromEvent: '1', toEvent: '2' },
|
|
142
|
+
* { id: 'e2', fromEvent: '2', toEvent: '3' },
|
|
143
|
+
* ]
|
|
144
|
+
* );
|
|
145
|
+
* ```
|
|
146
|
+
*/
|
|
147
|
+
export declare function useSequenceLayout(events: SequenceEvent[], sequenceEdges: SequenceEdge[], options?: UseSequenceLayoutOptions): UseSequenceLayoutResult;
|
|
148
|
+
//# sourceMappingURL=useSequenceLayout.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useSequenceLayout.d.ts","sourceRoot":"","sources":["../../src/hooks/useSequenceLayout.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,eAAe,CAAC;AAEhD;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,8BAA8B;IAC9B,EAAE,EAAE,MAAM,CAAC;IACX,kEAAkE;IAClE,IAAI,EAAE,MAAM,CAAC;IACb,gDAAgD;IAChD,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,sCAAsC;IACtC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,kDAAkD;IAClD,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAChC;AAED;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,6BAA6B;IAC7B,EAAE,EAAE,MAAM,CAAC;IACX,sBAAsB;IACtB,SAAS,EAAE,MAAM,CAAC;IAClB,sBAAsB;IACtB,OAAO,EAAE,MAAM,CAAC;IAChB,0BAA0B;IAC1B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,qCAAqC;IACrC,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED;;GAEG;AACH,MAAM,WAAW,QAAQ;IACvB,2BAA2B;IAC3B,SAAS,EAAE,MAAM,CAAC;IAClB,wCAAwC;IACxC,KAAK,EAAE,MAAM,CAAC;IACd,oCAAoC;IACpC,CAAC,EAAE,MAAM,CAAC;IACV,gDAAgD;IAChD,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,qCAAqC;IACrC,WAAW,EAAE,OAAO,CAAC;IACrB,uBAAuB;IACvB,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,0BAA0B;IAC1B,QAAQ,EAAE,MAAM,EAAE,CAAC;CACpB;AAED;;GAEG;AACH,MAAM,MAAM,iBAAiB,GACzB,OAAO,GACP,cAAc,GACd,MAAM,GACN,CAAC,CAAC,IAAI,EAAE,MAAM,KAAK,MAAM,CAAC,CAAC;AAE/B;;GAEG;AACH,MAAM,WAAW,wBAAwB;IACvC;;;OAGG;IACH,iBAAiB,CAAC,EAAE,iBAAiB,CAAC;IAEtC;;;OAGG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;IAEnB;;;OAGG;IACH,OAAO,CAAC,EAAE,MAAM,CAAC;IAEjB;;;OAGG;IACH,YAAY,CAAC,EAAE,MAAM,CAAC;IAEtB;;;OAGG;IACH,YAAY,CAAC,EAAE,MAAM,CAAC;IAEtB;;;OAGG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;IAEnB;;;OAGG;IACH,UAAU,CAAC,EAAE,MAAM,CAAC;IAEpB;;;OAGG;IACH,YAAY,CAAC,EAAE,OAAO,CAAC;IAEvB;;OAEG;IACH,mBAAmB,CAAC,EAAE,MAAM,EAAE,CAAC;CAChC;AAED;;GAEG;AACH,MAAM,WAAW,uBAAuB;IACtC,sCAAsC;IACtC,KAAK,EAAE,IAAI,EAAE,CAAC;IACd,2BAA2B;IAC3B,KAAK,EAAE,IAAI,EAAE,CAAC;IACd,oCAAoC;IACpC,SAAS,EAAE,QAAQ,EAAE,CAAC;IACtB,iCAAiC;IACjC,UAAU,EAAE,MAAM,CAAC;IACnB,kCAAkC;IAClC,WAAW,EAAE,MAAM,CAAC;CACrB;AA0CD;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,wBAAgB,iBAAiB,CAC/B,MAAM,EAAE,aAAa,EAAE,EACvB,aAAa,EAAE,YAAY,EAAE,EAC7B,OAAO,GAAE,wBAA6B,GACrC,uBAAuB,CAyMzB"}
|