@principal-ai/principal-view-react 0.14.4 → 0.14.6
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/GraphRenderer.d.ts +30 -7
- package/dist/components/GraphRenderer.d.ts.map +1 -1
- package/dist/components/GraphRenderer.js +29 -16
- package/dist/components/GraphRenderer.js.map +1 -1
- package/dist/components/NodeTooltip.js +1 -1
- package/dist/components/NodeTooltip.js.map +1 -1
- package/dist/contexts/TooltipPortalContext.d.ts +8 -0
- package/dist/contexts/TooltipPortalContext.d.ts.map +1 -0
- package/dist/contexts/TooltipPortalContext.js +8 -0
- package/dist/contexts/TooltipPortalContext.js.map +1 -0
- package/dist/edges/CustomEdge.d.ts +5 -0
- package/dist/edges/CustomEdge.d.ts.map +1 -1
- package/dist/edges/CustomEdge.js +7 -3
- package/dist/edges/CustomEdge.js.map +1 -1
- package/dist/hooks/useElkLayout.d.ts +66 -0
- package/dist/hooks/useElkLayout.d.ts.map +1 -0
- package/dist/hooks/useElkLayout.js +136 -0
- package/dist/hooks/useElkLayout.js.map +1 -0
- package/dist/index.d.ts +4 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +3 -0
- package/dist/index.js.map +1 -1
- package/dist/nodes/otel/OtelSpanConventionNode.js +3 -3
- package/dist/nodes/otel/OtelSpanConventionNode.js.map +1 -1
- package/dist/utils/elkLayout.d.ts +92 -0
- package/dist/utils/elkLayout.d.ts.map +1 -0
- package/dist/utils/elkLayout.js +281 -0
- package/dist/utils/elkLayout.js.map +1 -0
- package/package.json +4 -3
- package/src/components/GraphRenderer.tsx +70 -13
- package/src/components/NodeTooltip.tsx +1 -1
- package/src/contexts/TooltipPortalContext.ts +8 -0
- package/src/edges/CustomEdge.tsx +13 -2
- package/src/hooks/useElkLayout.test.ts +134 -0
- package/src/hooks/useElkLayout.ts +191 -0
- package/src/index.ts +6 -0
- package/src/nodes/otel/OtelSpanConventionNode.tsx +3 -3
- package/src/stories/ElkEdgeRouting.stories.tsx +415 -0
- package/src/stories/SpanBadges.stories.tsx +840 -0
- package/src/utils/elkLayout.test.ts +240 -0
- package/src/utils/elkLayout.ts +412 -0
package/dist/edges/CustomEdge.js
CHANGED
|
@@ -8,7 +8,7 @@ import { useTheme } from '@principal-ade/industry-theme';
|
|
|
8
8
|
export const CustomEdge = ({ id, sourceX, sourceY, targetX, targetY, sourcePosition, targetPosition, data, markerEnd, selected, }) => {
|
|
9
9
|
const { theme } = useTheme();
|
|
10
10
|
const edgeProps = data;
|
|
11
|
-
const { typeDefinition, hasViolations, data: edgeData, edgeType, animationType, animationDuration = 1000, animationDirection = 'forward', tooltipsEnabled = true, shiftKeyPressed = false, } = edgeProps || {};
|
|
11
|
+
const { typeDefinition, hasViolations, data: edgeData, edgeType, animationType, animationDuration = 1000, animationDirection = 'forward', tooltipsEnabled = true, shiftKeyPressed = false, elkPath, elkLabelPosition, } = edgeProps || {};
|
|
12
12
|
const [particlePosition, setParticlePosition] = useState(0);
|
|
13
13
|
const [isHovered, setIsHovered] = useState(false);
|
|
14
14
|
const pathRef = useRef(null);
|
|
@@ -33,8 +33,8 @@ export const CustomEdge = ({ id, sourceX, sourceY, targetX, targetY, sourcePosit
|
|
|
33
33
|
const edgeColor = edgeData?.color;
|
|
34
34
|
const color = hasViolations ? '#D0021B' : edgeColor || typeDefinition.color || '#888';
|
|
35
35
|
const width = typeDefinition.width || 2;
|
|
36
|
-
// Get
|
|
37
|
-
const [
|
|
36
|
+
// Get edge path - use ELK path if available, otherwise fall back to SmoothStep
|
|
37
|
+
const [defaultPath, defaultLabelX, defaultLabelY] = getSmoothStepPath({
|
|
38
38
|
sourceX,
|
|
39
39
|
sourceY,
|
|
40
40
|
sourcePosition,
|
|
@@ -44,6 +44,10 @@ export const CustomEdge = ({ id, sourceX, sourceY, targetX, targetY, sourcePosit
|
|
|
44
44
|
borderRadius: 0,
|
|
45
45
|
offset: 20,
|
|
46
46
|
});
|
|
47
|
+
// Use ELK-computed path for circuit-board style routing when available
|
|
48
|
+
const edgePath = elkPath || defaultPath;
|
|
49
|
+
const labelX = elkLabelPosition?.x ?? defaultLabelX;
|
|
50
|
+
const labelY = elkLabelPosition?.y ?? defaultLabelY;
|
|
47
51
|
// Style based on edge type
|
|
48
52
|
const getStrokeStyle = () => {
|
|
49
53
|
switch (typeDefinition.style) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CustomEdge.js","sourceRoot":"","sources":["../../src/edges/CustomEdge.tsx"],"names":[],"mappings":";AAAA,OAAc,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,OAAO,CAAC;AAC3D,OAAO,EAAE,QAAQ,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;AAG/E,OAAO,EAAE,QAAQ,EAAE,MAAM,+BAA+B,CAAC;
|
|
1
|
+
{"version":3,"file":"CustomEdge.js","sourceRoot":"","sources":["../../src/edges/CustomEdge.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* React hook for ELK layout integration
|
|
3
|
+
*
|
|
4
|
+
* Provides automatic edge routing with circuit-board style paths.
|
|
5
|
+
*/
|
|
6
|
+
import type { Node, Edge } from '@xyflow/react';
|
|
7
|
+
import { type ElkLayoutOptions } from '../utils/elkLayout';
|
|
8
|
+
export interface UseElkLayoutOptions extends ElkLayoutOptions {
|
|
9
|
+
/**
|
|
10
|
+
* Whether ELK layout is enabled
|
|
11
|
+
* @default true
|
|
12
|
+
*/
|
|
13
|
+
enabled?: boolean;
|
|
14
|
+
/**
|
|
15
|
+
* Debounce delay in ms before recomputing layout
|
|
16
|
+
* @default 100
|
|
17
|
+
*/
|
|
18
|
+
debounceMs?: number;
|
|
19
|
+
}
|
|
20
|
+
export interface UseElkLayoutResult {
|
|
21
|
+
/** Edge paths computed by ELK, keyed by edge ID */
|
|
22
|
+
edgePaths: Map<string, string>;
|
|
23
|
+
/** Edge label positions computed by ELK, keyed by edge ID */
|
|
24
|
+
edgeLabelPositions: Map<string, {
|
|
25
|
+
x: number;
|
|
26
|
+
y: number;
|
|
27
|
+
}>;
|
|
28
|
+
/** Whether layout is currently being computed */
|
|
29
|
+
isLayouting: boolean;
|
|
30
|
+
/** Any error that occurred during layout */
|
|
31
|
+
error: Error | null;
|
|
32
|
+
/** Manually trigger a layout recomputation */
|
|
33
|
+
recomputeLayout: () => void;
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* Hook for computing ELK layout for edges
|
|
37
|
+
*
|
|
38
|
+
* @param nodes - xyflow nodes
|
|
39
|
+
* @param edges - xyflow edges
|
|
40
|
+
* @param options - Layout options
|
|
41
|
+
* @returns Layout result with edge paths
|
|
42
|
+
*
|
|
43
|
+
* @example
|
|
44
|
+
* ```tsx
|
|
45
|
+
* const { edgePaths, isLayouting } = useElkLayout(nodes, edges, {
|
|
46
|
+
* routingStyle: 'orthogonal',
|
|
47
|
+
* edgeSpacing: 15,
|
|
48
|
+
* });
|
|
49
|
+
* ```
|
|
50
|
+
*/
|
|
51
|
+
export declare function useElkLayout(nodes: Node[], edges: Edge[], options?: UseElkLayoutOptions): UseElkLayoutResult;
|
|
52
|
+
/**
|
|
53
|
+
* Apply ELK-computed paths to edges
|
|
54
|
+
*
|
|
55
|
+
* This utility injects the ELK path data into edge data so CustomEdge can use it.
|
|
56
|
+
*
|
|
57
|
+
* @param edges - Original edges
|
|
58
|
+
* @param edgePaths - ELK-computed paths
|
|
59
|
+
* @param edgeLabelPositions - ELK-computed label positions
|
|
60
|
+
* @returns Edges with ELK path data injected
|
|
61
|
+
*/
|
|
62
|
+
export declare function applyElkPathsToEdges<T extends Edge>(edges: T[], edgePaths: Map<string, string>, edgeLabelPositions: Map<string, {
|
|
63
|
+
x: number;
|
|
64
|
+
y: number;
|
|
65
|
+
}>): T[];
|
|
66
|
+
//# sourceMappingURL=useElkLayout.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useElkLayout.d.ts","sourceRoot":"","sources":["../../src/hooks/useElkLayout.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,eAAe,CAAC;AAChD,OAAO,EAAoB,KAAK,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAE7E,MAAM,WAAW,mBAAoB,SAAQ,gBAAgB;IAC3D;;;OAGG;IACH,OAAO,CAAC,EAAE,OAAO,CAAC;IAElB;;;OAGG;IACH,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,kBAAkB;IACjC,mDAAmD;IACnD,SAAS,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC/B,6DAA6D;IAC7D,kBAAkB,EAAE,GAAG,CAAC,MAAM,EAAE;QAAE,CAAC,EAAE,MAAM,CAAC;QAAC,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAC1D,iDAAiD;IACjD,WAAW,EAAE,OAAO,CAAC;IACrB,4CAA4C;IAC5C,KAAK,EAAE,KAAK,GAAG,IAAI,CAAC;IACpB,8CAA8C;IAC9C,eAAe,EAAE,MAAM,IAAI,CAAC;CAC7B;AAED;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,YAAY,CAC1B,KAAK,EAAE,IAAI,EAAE,EACb,KAAK,EAAE,IAAI,EAAE,EACb,OAAO,GAAE,mBAAwB,GAChC,kBAAkB,CAmGpB;AAED;;;;;;;;;GASG;AACH,wBAAgB,oBAAoB,CAAC,CAAC,SAAS,IAAI,EACjD,KAAK,EAAE,CAAC,EAAE,EACV,SAAS,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,EAC9B,kBAAkB,EAAE,GAAG,CAAC,MAAM,EAAE;IAAE,CAAC,EAAE,MAAM,CAAC;IAAC,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC,GACxD,CAAC,EAAE,CAkBL"}
|
|
@@ -0,0 +1,136 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* React hook for ELK layout integration
|
|
3
|
+
*
|
|
4
|
+
* Provides automatic edge routing with circuit-board style paths.
|
|
5
|
+
*/
|
|
6
|
+
import { useState, useEffect, useCallback, useRef, useMemo } from 'react';
|
|
7
|
+
import { computeElkLayout } from '../utils/elkLayout';
|
|
8
|
+
/**
|
|
9
|
+
* Hook for computing ELK layout for edges
|
|
10
|
+
*
|
|
11
|
+
* @param nodes - xyflow nodes
|
|
12
|
+
* @param edges - xyflow edges
|
|
13
|
+
* @param options - Layout options
|
|
14
|
+
* @returns Layout result with edge paths
|
|
15
|
+
*
|
|
16
|
+
* @example
|
|
17
|
+
* ```tsx
|
|
18
|
+
* const { edgePaths, isLayouting } = useElkLayout(nodes, edges, {
|
|
19
|
+
* routingStyle: 'orthogonal',
|
|
20
|
+
* edgeSpacing: 15,
|
|
21
|
+
* });
|
|
22
|
+
* ```
|
|
23
|
+
*/
|
|
24
|
+
export function useElkLayout(nodes, edges, options = {}) {
|
|
25
|
+
const { enabled = true, debounceMs = 100, ...layoutOptions } = options;
|
|
26
|
+
const [edgePaths, setEdgePaths] = useState(new Map());
|
|
27
|
+
const [edgeLabelPositions, setEdgeLabelPositions] = useState(new Map());
|
|
28
|
+
const [isLayouting, setIsLayouting] = useState(false);
|
|
29
|
+
const [error, setError] = useState(null);
|
|
30
|
+
const timeoutRef = useRef(null);
|
|
31
|
+
const abortRef = useRef(false);
|
|
32
|
+
const hasComputedRef = useRef(null);
|
|
33
|
+
// Create stable refs for nodes and edges
|
|
34
|
+
const nodesRef = useRef(nodes);
|
|
35
|
+
nodesRef.current = nodes;
|
|
36
|
+
const edgesRef = useRef(edges);
|
|
37
|
+
edgesRef.current = edges;
|
|
38
|
+
// Create a stable reference to layout options
|
|
39
|
+
const optionsRef = useRef(layoutOptions);
|
|
40
|
+
optionsRef.current = layoutOptions;
|
|
41
|
+
// Create a stable key based on node/edge structure
|
|
42
|
+
const layoutKey = useMemo(() => {
|
|
43
|
+
const nodeKey = nodes.map(n => `${n.id}:${n.position.x}:${n.position.y}:${n.width ?? 0}:${n.height ?? 0}`).join('|');
|
|
44
|
+
const edgeKey = edges.map(e => `${e.id}:${e.source}:${e.target}`).join('|');
|
|
45
|
+
return `${enabled}:${nodeKey}:${edgeKey}`;
|
|
46
|
+
}, [enabled, nodes, edges]);
|
|
47
|
+
// Compute layout when key changes
|
|
48
|
+
useEffect(() => {
|
|
49
|
+
// Skip if already computed for this key
|
|
50
|
+
if (hasComputedRef.current === layoutKey) {
|
|
51
|
+
return;
|
|
52
|
+
}
|
|
53
|
+
if (!enabled || nodesRef.current.length === 0) {
|
|
54
|
+
setEdgePaths(new Map());
|
|
55
|
+
setEdgeLabelPositions(new Map());
|
|
56
|
+
hasComputedRef.current = layoutKey;
|
|
57
|
+
return;
|
|
58
|
+
}
|
|
59
|
+
if (timeoutRef.current) {
|
|
60
|
+
clearTimeout(timeoutRef.current);
|
|
61
|
+
}
|
|
62
|
+
abortRef.current = false;
|
|
63
|
+
timeoutRef.current = setTimeout(async () => {
|
|
64
|
+
setIsLayouting(true);
|
|
65
|
+
setError(null);
|
|
66
|
+
try {
|
|
67
|
+
const result = await computeElkLayout(nodesRef.current, edgesRef.current, optionsRef.current);
|
|
68
|
+
if (abortRef.current)
|
|
69
|
+
return;
|
|
70
|
+
setEdgePaths(result.edgePaths);
|
|
71
|
+
setEdgeLabelPositions(result.edgeLabelPositions);
|
|
72
|
+
hasComputedRef.current = layoutKey;
|
|
73
|
+
}
|
|
74
|
+
catch (err) {
|
|
75
|
+
if (!abortRef.current) {
|
|
76
|
+
setError(err instanceof Error ? err : new Error(String(err)));
|
|
77
|
+
console.error('ELK layout error:', err);
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
finally {
|
|
81
|
+
if (!abortRef.current) {
|
|
82
|
+
setIsLayouting(false);
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
}, debounceMs);
|
|
86
|
+
return () => {
|
|
87
|
+
if (timeoutRef.current) {
|
|
88
|
+
clearTimeout(timeoutRef.current);
|
|
89
|
+
}
|
|
90
|
+
abortRef.current = true;
|
|
91
|
+
};
|
|
92
|
+
}, [layoutKey, enabled, debounceMs]);
|
|
93
|
+
const recomputeLayout = useCallback(() => {
|
|
94
|
+
hasComputedRef.current = null; // Force recompute
|
|
95
|
+
if (timeoutRef.current) {
|
|
96
|
+
clearTimeout(timeoutRef.current);
|
|
97
|
+
}
|
|
98
|
+
// Trigger effect by invalidating the key check
|
|
99
|
+
setIsLayouting(true);
|
|
100
|
+
}, []);
|
|
101
|
+
return {
|
|
102
|
+
edgePaths,
|
|
103
|
+
edgeLabelPositions,
|
|
104
|
+
isLayouting,
|
|
105
|
+
error,
|
|
106
|
+
recomputeLayout,
|
|
107
|
+
};
|
|
108
|
+
}
|
|
109
|
+
/**
|
|
110
|
+
* Apply ELK-computed paths to edges
|
|
111
|
+
*
|
|
112
|
+
* This utility injects the ELK path data into edge data so CustomEdge can use it.
|
|
113
|
+
*
|
|
114
|
+
* @param edges - Original edges
|
|
115
|
+
* @param edgePaths - ELK-computed paths
|
|
116
|
+
* @param edgeLabelPositions - ELK-computed label positions
|
|
117
|
+
* @returns Edges with ELK path data injected
|
|
118
|
+
*/
|
|
119
|
+
export function applyElkPathsToEdges(edges, edgePaths, edgeLabelPositions) {
|
|
120
|
+
return edges.map((edge) => {
|
|
121
|
+
const elkPath = edgePaths.get(edge.id);
|
|
122
|
+
const elkLabelPosition = edgeLabelPositions.get(edge.id);
|
|
123
|
+
if (elkPath) {
|
|
124
|
+
return {
|
|
125
|
+
...edge,
|
|
126
|
+
data: {
|
|
127
|
+
...edge.data,
|
|
128
|
+
elkPath,
|
|
129
|
+
elkLabelPosition,
|
|
130
|
+
},
|
|
131
|
+
};
|
|
132
|
+
}
|
|
133
|
+
return edge;
|
|
134
|
+
});
|
|
135
|
+
}
|
|
136
|
+
//# sourceMappingURL=useElkLayout.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useElkLayout.js","sourceRoot":"","sources":["../../src/hooks/useElkLayout.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
CHANGED
|
@@ -31,4 +31,8 @@ export type { IconProps } from './utils/iconResolver';
|
|
|
31
31
|
export { swapGraphOrientation, swapNodePositions, swapEdgeSides, } from './utils/orientationUtils';
|
|
32
32
|
export { getCanvasBounds, getCanvasDisplaySize, calculateInitialViewport } from './utils/canvasBounds';
|
|
33
33
|
export type { CanvasBounds, Viewport } from './utils/canvasBounds';
|
|
34
|
+
export { computeElkLayout, createElkLayouter } from './utils/elkLayout';
|
|
35
|
+
export type { ElkLayoutOptions, ElkLayoutResult, ElkRoutingStyle } from './utils/elkLayout';
|
|
36
|
+
export { useElkLayout, applyElkPathsToEdges } from './hooks/useElkLayout';
|
|
37
|
+
export type { UseElkLayoutOptions, UseElkLayoutResult } from './hooks/useElkLayout';
|
|
34
38
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAGH,YAAY,EACV,kBAAkB,EAClB,UAAU,EACV,YAAY,EACZ,SAAS,EACT,OAAO,EACP,gBAAgB,EAChB,WAAW,EACX,kBAAkB,EAClB,kBAAkB,EAClB,cAAc,EACd,SAAS,EACT,SAAS,EACT,iBAAiB,EACjB,uBAAuB,EAEvB,gBAAgB,EAChB,oBAAoB,EACpB,oBAAoB,GACrB,MAAM,mCAAmC,CAAC;AAG3C,OAAO,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAC;AAC3D,YAAY,EACV,kBAAkB,EAClB,mBAAmB,EACnB,kBAAkB,EAClB,cAAc,GACf,MAAM,4BAA4B,CAAC;AAEpC,OAAO,EAAE,mBAAmB,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,kCAAkC,CAAC;AACnG,YAAY,EACV,wBAAwB,EACxB,iBAAiB,EACjB,eAAe,GAChB,MAAM,kCAAkC,CAAC;AAE1C,OAAO,EAAE,qBAAqB,EAAE,MAAM,oCAAoC,CAAC;AAC3E,YAAY,EAAE,0BAA0B,EAAE,MAAM,oCAAoC,CAAC;AAGrF,OAAO,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAClD,YAAY,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AAE5D,OAAO,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAChD,YAAY,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AAGzD,OAAO,EACL,sBAAsB,EACtB,aAAa,EACb,aAAa,EACb,gBAAgB,EAChB,gBAAgB,GACjB,MAAM,cAAc,CAAC;AACtB,YAAY,EACV,0BAA0B,EAC1B,iBAAiB,EACjB,iBAAiB,EACjB,oBAAoB,EACpB,oBAAoB,EACpB,YAAY,GACb,MAAM,cAAc,CAAC;AAEtB,OAAO,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAClD,YAAY,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AAE5D,OAAO,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAChD,YAAY,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AAGzD,OAAO,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AACvD,YAAY,EAAE,gBAAgB,EAAE,QAAQ,EAAE,MAAM,0BAA0B,CAAC;AAG3E,OAAO,EACL,oBAAoB,EACpB,oBAAoB,GACrB,MAAM,wBAAwB,CAAC;AAChC,YAAY,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AACnE,OAAO,EAAE,IAAI,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AACzD,YAAY,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,EACL,oBAAoB,EACpB,iBAAiB,EACjB,aAAa,GACd,MAAM,0BAA0B,CAAC;AAClC,OAAO,EAAE,eAAe,EAAE,oBAAoB,EAAE,wBAAwB,EAAE,MAAM,sBAAsB,CAAC;AACvG,YAAY,EAAE,YAAY,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAGH,YAAY,EACV,kBAAkB,EAClB,UAAU,EACV,YAAY,EACZ,SAAS,EACT,OAAO,EACP,gBAAgB,EAChB,WAAW,EACX,kBAAkB,EAClB,kBAAkB,EAClB,cAAc,EACd,SAAS,EACT,SAAS,EACT,iBAAiB,EACjB,uBAAuB,EAEvB,gBAAgB,EAChB,oBAAoB,EACpB,oBAAoB,GACrB,MAAM,mCAAmC,CAAC;AAG3C,OAAO,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAC;AAC3D,YAAY,EACV,kBAAkB,EAClB,mBAAmB,EACnB,kBAAkB,EAClB,cAAc,GACf,MAAM,4BAA4B,CAAC;AAEpC,OAAO,EAAE,mBAAmB,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,kCAAkC,CAAC;AACnG,YAAY,EACV,wBAAwB,EACxB,iBAAiB,EACjB,eAAe,GAChB,MAAM,kCAAkC,CAAC;AAE1C,OAAO,EAAE,qBAAqB,EAAE,MAAM,oCAAoC,CAAC;AAC3E,YAAY,EAAE,0BAA0B,EAAE,MAAM,oCAAoC,CAAC;AAGrF,OAAO,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAClD,YAAY,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AAE5D,OAAO,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAChD,YAAY,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AAGzD,OAAO,EACL,sBAAsB,EACtB,aAAa,EACb,aAAa,EACb,gBAAgB,EAChB,gBAAgB,GACjB,MAAM,cAAc,CAAC;AACtB,YAAY,EACV,0BAA0B,EAC1B,iBAAiB,EACjB,iBAAiB,EACjB,oBAAoB,EACpB,oBAAoB,EACpB,YAAY,GACb,MAAM,cAAc,CAAC;AAEtB,OAAO,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAClD,YAAY,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AAE5D,OAAO,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAChD,YAAY,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AAGzD,OAAO,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AACvD,YAAY,EAAE,gBAAgB,EAAE,QAAQ,EAAE,MAAM,0BAA0B,CAAC;AAG3E,OAAO,EACL,oBAAoB,EACpB,oBAAoB,GACrB,MAAM,wBAAwB,CAAC;AAChC,YAAY,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AACnE,OAAO,EAAE,IAAI,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AACzD,YAAY,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,EACL,oBAAoB,EACpB,iBAAiB,EACjB,aAAa,GACd,MAAM,0BAA0B,CAAC;AAClC,OAAO,EAAE,eAAe,EAAE,oBAAoB,EAAE,wBAAwB,EAAE,MAAM,sBAAsB,CAAC;AACvG,YAAY,EAAE,YAAY,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAGnE,OAAO,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AACxE,YAAY,EAAE,gBAAgB,EAAE,eAAe,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAC5F,OAAO,EAAE,YAAY,EAAE,oBAAoB,EAAE,MAAM,sBAAsB,CAAC;AAC1E,YAAY,EAAE,mBAAmB,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -23,4 +23,7 @@ export { convertToXYFlowNodes, convertToXYFlowEdges, } from './utils/graphConver
|
|
|
23
23
|
export { Icon, resolveIcon } from './utils/iconResolver';
|
|
24
24
|
export { swapGraphOrientation, swapNodePositions, swapEdgeSides, } from './utils/orientationUtils';
|
|
25
25
|
export { getCanvasBounds, getCanvasDisplaySize, calculateInitialViewport } from './utils/canvasBounds';
|
|
26
|
+
// ELK layout utilities for circuit-board style edge routing
|
|
27
|
+
export { computeElkLayout, createElkLayouter } from './utils/elkLayout';
|
|
28
|
+
export { useElkLayout, applyElkPathsToEdges } from './hooks/useElkLayout';
|
|
26
29
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAwBH,oBAAoB;AACpB,OAAO,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAC;AAQ3D,OAAO,EAAE,mBAAmB,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,kCAAkC,CAAC;AAOnG,OAAO,EAAE,qBAAqB,EAAE,MAAM,oCAAoC,CAAC;AAG3E,6BAA6B;AAC7B,OAAO,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAGlD,OAAO,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAGhD,8BAA8B;AAC9B,OAAO,EACL,sBAAsB,EACtB,aAAa,EACb,aAAa,EACb,gBAAgB,EAChB,gBAAgB,GACjB,MAAM,cAAc,CAAC;AAUtB,OAAO,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAGlD,OAAO,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAGhD,2BAA2B;AAC3B,OAAO,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AAGvD,mBAAmB;AACnB,OAAO,EACL,oBAAoB,EACpB,oBAAoB,GACrB,MAAM,wBAAwB,CAAC;AAEhC,OAAO,EAAE,IAAI,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AAEzD,OAAO,EACL,oBAAoB,EACpB,iBAAiB,EACjB,aAAa,GACd,MAAM,0BAA0B,CAAC;AAClC,OAAO,EAAE,eAAe,EAAE,oBAAoB,EAAE,wBAAwB,EAAE,MAAM,sBAAsB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAwBH,oBAAoB;AACpB,OAAO,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAC;AAQ3D,OAAO,EAAE,mBAAmB,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,kCAAkC,CAAC;AAOnG,OAAO,EAAE,qBAAqB,EAAE,MAAM,oCAAoC,CAAC;AAG3E,6BAA6B;AAC7B,OAAO,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAGlD,OAAO,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAGhD,8BAA8B;AAC9B,OAAO,EACL,sBAAsB,EACtB,aAAa,EACb,aAAa,EACb,gBAAgB,EAChB,gBAAgB,GACjB,MAAM,cAAc,CAAC;AAUtB,OAAO,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAGlD,OAAO,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAGhD,2BAA2B;AAC3B,OAAO,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AAGvD,mBAAmB;AACnB,OAAO,EACL,oBAAoB,EACpB,oBAAoB,GACrB,MAAM,wBAAwB,CAAC;AAEhC,OAAO,EAAE,IAAI,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AAEzD,OAAO,EACL,oBAAoB,EACpB,iBAAiB,EACjB,aAAa,GACd,MAAM,0BAA0B,CAAC;AAClC,OAAO,EAAE,eAAe,EAAE,oBAAoB,EAAE,wBAAwB,EAAE,MAAM,sBAAsB,CAAC;AAGvG,4DAA4D;AAC5D,OAAO,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AAExE,OAAO,EAAE,YAAY,EAAE,oBAAoB,EAAE,MAAM,sBAAsB,CAAC"}
|
|
@@ -57,9 +57,9 @@ export const OtelSpanConventionNode = ({ data, selected, dragging }) => {
|
|
|
57
57
|
// State definitions for label lookup
|
|
58
58
|
const stateDefinitions = nodeData.states || typeDefinition.states;
|
|
59
59
|
// Workflow chips
|
|
60
|
-
const workflowChips = nodeData
|
|
61
|
-
const onWorkflowChipClick = nodeData
|
|
62
|
-
const selectedWorkflowId = nodeData
|
|
60
|
+
const workflowChips = nodeData?.workflowChips;
|
|
61
|
+
const onWorkflowChipClick = nodeData?.onWorkflowChipClick;
|
|
62
|
+
const selectedWorkflowId = nodeData?.selectedWorkflowId;
|
|
63
63
|
// Animation class
|
|
64
64
|
const getAnimationClass = () => {
|
|
65
65
|
switch (animationType) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"OtelSpanConventionNode.js","sourceRoot":"","sources":["../../../src/nodes/otel/OtelSpanConventionNode.tsx"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"OtelSpanConventionNode.js","sourceRoot":"","sources":["../../../src/nodes/otel/OtelSpanConventionNode.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* ELK (Eclipse Layout Kernel) Layout Utility
|
|
3
|
+
*
|
|
4
|
+
* Provides sophisticated edge routing with orthogonal (circuit-board style) paths
|
|
5
|
+
* that don't overlap and run parallel to each other.
|
|
6
|
+
*/
|
|
7
|
+
import type { Node, Edge } from '@xyflow/react';
|
|
8
|
+
/** ELK layout options for different routing styles */
|
|
9
|
+
export type ElkRoutingStyle = 'orthogonal' | 'splines' | 'polyline';
|
|
10
|
+
/** Options for ELK layout */
|
|
11
|
+
export interface ElkLayoutOptions {
|
|
12
|
+
/**
|
|
13
|
+
* Edge routing style
|
|
14
|
+
* - 'orthogonal': Circuit-board style with 90-degree angles (default)
|
|
15
|
+
* - 'splines': Smooth curved edges
|
|
16
|
+
* - 'polyline': Straight line segments
|
|
17
|
+
*/
|
|
18
|
+
routingStyle?: ElkRoutingStyle;
|
|
19
|
+
/**
|
|
20
|
+
* Whether to preserve manual node positions
|
|
21
|
+
* If true, only edge routing is computed
|
|
22
|
+
* If false, ELK will also position nodes
|
|
23
|
+
* @default true
|
|
24
|
+
*/
|
|
25
|
+
preserveNodePositions?: boolean;
|
|
26
|
+
/**
|
|
27
|
+
* Minimum spacing between nodes
|
|
28
|
+
* @default 50
|
|
29
|
+
*/
|
|
30
|
+
nodeSpacing?: number;
|
|
31
|
+
/**
|
|
32
|
+
* Minimum spacing between edges
|
|
33
|
+
* @default 8
|
|
34
|
+
*/
|
|
35
|
+
edgeSpacing?: number;
|
|
36
|
+
/**
|
|
37
|
+
* Spacing between edge and node
|
|
38
|
+
* @default 10
|
|
39
|
+
*/
|
|
40
|
+
edgeNodeSpacing?: number;
|
|
41
|
+
/**
|
|
42
|
+
* Layout direction
|
|
43
|
+
* @default 'RIGHT'
|
|
44
|
+
*/
|
|
45
|
+
direction?: 'RIGHT' | 'LEFT' | 'DOWN' | 'UP';
|
|
46
|
+
}
|
|
47
|
+
/** Result of ELK layout computation */
|
|
48
|
+
export interface ElkLayoutResult {
|
|
49
|
+
/** Nodes with updated positions (if preserveNodePositions is false) */
|
|
50
|
+
nodes: Node[];
|
|
51
|
+
/** Edge paths as SVG path strings, keyed by edge ID */
|
|
52
|
+
edgePaths: Map<string, string>;
|
|
53
|
+
/** Edge label positions, keyed by edge ID */
|
|
54
|
+
edgeLabelPositions: Map<string, {
|
|
55
|
+
x: number;
|
|
56
|
+
y: number;
|
|
57
|
+
}>;
|
|
58
|
+
}
|
|
59
|
+
/** Point in 2D space */
|
|
60
|
+
export interface Point {
|
|
61
|
+
x: number;
|
|
62
|
+
y: number;
|
|
63
|
+
}
|
|
64
|
+
/**
|
|
65
|
+
* Convert bend points to SVG path string
|
|
66
|
+
* @public Exported for testing
|
|
67
|
+
*/
|
|
68
|
+
export declare function pointsToPath(points: Point[]): string;
|
|
69
|
+
/**
|
|
70
|
+
* Convert bend points to smooth orthogonal path with rounded corners
|
|
71
|
+
* @public Exported for testing
|
|
72
|
+
*/
|
|
73
|
+
export declare function pointsToSmoothPath(points: Point[], cornerRadius?: number): string;
|
|
74
|
+
/**
|
|
75
|
+
* Calculate the midpoint of a path for label positioning
|
|
76
|
+
* @public Exported for testing
|
|
77
|
+
*/
|
|
78
|
+
export declare function calculatePathMidpoint(points: Point[]): Point;
|
|
79
|
+
/**
|
|
80
|
+
* Compute ELK layout for nodes and edges
|
|
81
|
+
*
|
|
82
|
+
* @param nodes - xyflow nodes
|
|
83
|
+
* @param edges - xyflow edges
|
|
84
|
+
* @param options - Layout options
|
|
85
|
+
* @returns Layout result with edge paths
|
|
86
|
+
*/
|
|
87
|
+
export declare function computeElkLayout(nodes: Node[], edges: Edge[], options?: ElkLayoutOptions): Promise<ElkLayoutResult>;
|
|
88
|
+
/**
|
|
89
|
+
* Hook-friendly version that returns a layout function
|
|
90
|
+
*/
|
|
91
|
+
export declare function createElkLayouter(options?: ElkLayoutOptions): (nodes: Node[], edges: Edge[]) => Promise<ElkLayoutResult>;
|
|
92
|
+
//# sourceMappingURL=elkLayout.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"elkLayout.d.ts","sourceRoot":"","sources":["../../src/utils/elkLayout.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,eAAe,CAAC;AAEhD,sDAAsD;AACtD,MAAM,MAAM,eAAe,GAAG,YAAY,GAAG,SAAS,GAAG,UAAU,CAAC;AAEpE,6BAA6B;AAC7B,MAAM,WAAW,gBAAgB;IAC/B;;;;;OAKG;IACH,YAAY,CAAC,EAAE,eAAe,CAAC;IAE/B;;;;;OAKG;IACH,qBAAqB,CAAC,EAAE,OAAO,CAAC;IAEhC;;;OAGG;IACH,WAAW,CAAC,EAAE,MAAM,CAAC;IAErB;;;OAGG;IACH,WAAW,CAAC,EAAE,MAAM,CAAC;IAErB;;;OAGG;IACH,eAAe,CAAC,EAAE,MAAM,CAAC;IAEzB;;;OAGG;IACH,SAAS,CAAC,EAAE,OAAO,GAAG,MAAM,GAAG,MAAM,GAAG,IAAI,CAAC;CAC9C;AAED,uCAAuC;AACvC,MAAM,WAAW,eAAe;IAC9B,uEAAuE;IACvE,KAAK,EAAE,IAAI,EAAE,CAAC;IACd,uDAAuD;IACvD,SAAS,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC/B,6CAA6C;IAC7C,kBAAkB,EAAE,GAAG,CAAC,MAAM,EAAE;QAAE,CAAC,EAAE,MAAM,CAAC;QAAC,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CAC3D;AAED,wBAAwB;AACxB,MAAM,WAAW,KAAK;IACpB,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;CACX;AAyBD;;;GAGG;AACH,wBAAgB,YAAY,CAAC,MAAM,EAAE,KAAK,EAAE,GAAG,MAAM,CASpD;AAED;;;GAGG;AACH,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE,YAAY,GAAE,MAAU,GAAG,MAAM,CAoDpF;AAED;;;GAGG;AACH,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,KAAK,EAAE,GAAG,KAAK,CAmC5D;AAwCD;;;;;;;GAOG;AACH,wBAAsB,gBAAgB,CACpC,KAAK,EAAE,IAAI,EAAE,EACb,KAAK,EAAE,IAAI,EAAE,EACb,OAAO,GAAE,gBAAqB,GAC7B,OAAO,CAAC,eAAe,CAAC,CAiJ1B;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,OAAO,GAAE,gBAAqB,WAC/C,IAAI,EAAE,SAAS,IAAI,EAAE,8BACrC"}
|