@principal-ai/principal-view-react 0.14.5 → 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.
Files changed (38) hide show
  1. package/dist/components/GraphRenderer.d.ts +30 -7
  2. package/dist/components/GraphRenderer.d.ts.map +1 -1
  3. package/dist/components/GraphRenderer.js +29 -16
  4. package/dist/components/GraphRenderer.js.map +1 -1
  5. package/dist/components/NodeTooltip.js +1 -1
  6. package/dist/components/NodeTooltip.js.map +1 -1
  7. package/dist/contexts/TooltipPortalContext.d.ts +8 -0
  8. package/dist/contexts/TooltipPortalContext.d.ts.map +1 -0
  9. package/dist/contexts/TooltipPortalContext.js +8 -0
  10. package/dist/contexts/TooltipPortalContext.js.map +1 -0
  11. package/dist/edges/CustomEdge.d.ts +5 -0
  12. package/dist/edges/CustomEdge.d.ts.map +1 -1
  13. package/dist/edges/CustomEdge.js +7 -3
  14. package/dist/edges/CustomEdge.js.map +1 -1
  15. package/dist/hooks/useElkLayout.d.ts +66 -0
  16. package/dist/hooks/useElkLayout.d.ts.map +1 -0
  17. package/dist/hooks/useElkLayout.js +136 -0
  18. package/dist/hooks/useElkLayout.js.map +1 -0
  19. package/dist/index.d.ts +4 -0
  20. package/dist/index.d.ts.map +1 -1
  21. package/dist/index.js +3 -0
  22. package/dist/index.js.map +1 -1
  23. package/dist/utils/elkLayout.d.ts +92 -0
  24. package/dist/utils/elkLayout.d.ts.map +1 -0
  25. package/dist/utils/elkLayout.js +281 -0
  26. package/dist/utils/elkLayout.js.map +1 -0
  27. package/package.json +4 -3
  28. package/src/components/GraphRenderer.tsx +70 -13
  29. package/src/components/NodeTooltip.tsx +1 -1
  30. package/src/contexts/TooltipPortalContext.ts +8 -0
  31. package/src/edges/CustomEdge.tsx +13 -2
  32. package/src/hooks/useElkLayout.test.ts +134 -0
  33. package/src/hooks/useElkLayout.ts +191 -0
  34. package/src/index.ts +6 -0
  35. package/src/stories/ElkEdgeRouting.stories.tsx +415 -0
  36. package/src/stories/SpanBadges.stories.tsx +840 -0
  37. package/src/utils/elkLayout.test.ts +240 -0
  38. package/src/utils/elkLayout.ts +412 -0
@@ -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 SmoothStep path (orthogonal routing with rounded corners)
37
- const [edgePath, labelX, labelY] = getSmoothStepPath({
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":"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"}
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
@@ -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"}
@@ -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"}