@bian-womp/spark-workbench 0.3.89 → 0.3.91

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 (181) hide show
  1. package/lib/cjs/index.cjs +19 -6
  2. package/lib/cjs/index.cjs.map +1 -1
  3. package/lib/cjs/src/misc/layout.d.ts.map +1 -1
  4. package/lib/cjs/src/misc/mapping.d.ts.map +1 -1
  5. package/lib/cjs/src/misc/value.d.ts +2 -1
  6. package/lib/cjs/src/misc/value.d.ts.map +1 -1
  7. package/lib/esm/index.js +19 -6
  8. package/lib/esm/index.js.map +1 -1
  9. package/lib/esm/src/misc/layout.d.ts.map +1 -1
  10. package/lib/esm/src/misc/mapping.d.ts.map +1 -1
  11. package/lib/esm/src/misc/value.d.ts +2 -1
  12. package/lib/esm/src/misc/value.d.ts.map +1 -1
  13. package/package.json +4 -4
  14. package/lib/src/adapters/cli/index.d.ts +0 -22
  15. package/lib/src/adapters/cli/index.d.ts.map +0 -1
  16. package/lib/src/adapters/cli/index.js +0 -50
  17. package/lib/src/adapters/cli/index.js.map +0 -1
  18. package/lib/src/core/AbstractWorkbench.d.ts +0 -40
  19. package/lib/src/core/AbstractWorkbench.d.ts.map +0 -1
  20. package/lib/src/core/AbstractWorkbench.js +0 -15
  21. package/lib/src/core/AbstractWorkbench.js.map +0 -1
  22. package/lib/src/core/InMemoryWorkbench.d.ts +0 -304
  23. package/lib/src/core/InMemoryWorkbench.d.ts.map +0 -1
  24. package/lib/src/core/InMemoryWorkbench.js +0 -1016
  25. package/lib/src/core/InMemoryWorkbench.js.map +0 -1
  26. package/lib/src/core/contracts.d.ts +0 -172
  27. package/lib/src/core/contracts.d.ts.map +0 -1
  28. package/lib/src/core/contracts.js +0 -2
  29. package/lib/src/core/contracts.js.map +0 -1
  30. package/lib/src/core/ui-extensions.d.ts +0 -85
  31. package/lib/src/core/ui-extensions.d.ts.map +0 -1
  32. package/lib/src/core/ui-extensions.js +0 -111
  33. package/lib/src/core/ui-extensions.js.map +0 -1
  34. package/lib/src/examples/cli.d.ts +0 -2
  35. package/lib/src/examples/cli.d.ts.map +0 -1
  36. package/lib/src/examples/cli.js +0 -244
  37. package/lib/src/examples/cli.js.map +0 -1
  38. package/lib/src/examples/reactflow/App.d.ts +0 -2
  39. package/lib/src/examples/reactflow/App.d.ts.map +0 -1
  40. package/lib/src/examples/reactflow/App.js +0 -20
  41. package/lib/src/examples/reactflow/App.js.map +0 -1
  42. package/lib/src/index.d.ts +0 -30
  43. package/lib/src/index.d.ts.map +0 -1
  44. package/lib/src/index.js +0 -30
  45. package/lib/src/index.js.map +0 -1
  46. package/lib/src/misc/DebugEvents.d.ts +0 -7
  47. package/lib/src/misc/DebugEvents.d.ts.map +0 -1
  48. package/lib/src/misc/DebugEvents.js +0 -51
  49. package/lib/src/misc/DebugEvents.js.map +0 -1
  50. package/lib/src/misc/DefaultEdge.d.ts +0 -5
  51. package/lib/src/misc/DefaultEdge.d.ts.map +0 -1
  52. package/lib/src/misc/DefaultEdge.js +0 -15
  53. package/lib/src/misc/DefaultEdge.js.map +0 -1
  54. package/lib/src/misc/DefaultNode.d.ts +0 -5
  55. package/lib/src/misc/DefaultNode.d.ts.map +0 -1
  56. package/lib/src/misc/DefaultNode.js +0 -25
  57. package/lib/src/misc/DefaultNode.js.map +0 -1
  58. package/lib/src/misc/DefaultNodeContent.d.ts +0 -4
  59. package/lib/src/misc/DefaultNodeContent.d.ts.map +0 -1
  60. package/lib/src/misc/DefaultNodeContent.js +0 -58
  61. package/lib/src/misc/DefaultNodeContent.js.map +0 -1
  62. package/lib/src/misc/DefaultNodeHeader.d.ts +0 -13
  63. package/lib/src/misc/DefaultNodeHeader.d.ts.map +0 -1
  64. package/lib/src/misc/DefaultNodeHeader.js +0 -78
  65. package/lib/src/misc/DefaultNodeHeader.js.map +0 -1
  66. package/lib/src/misc/Inspector.d.ts +0 -12
  67. package/lib/src/misc/Inspector.d.ts.map +0 -1
  68. package/lib/src/misc/Inspector.js +0 -253
  69. package/lib/src/misc/Inspector.js.map +0 -1
  70. package/lib/src/misc/IssueBadge.d.ts +0 -7
  71. package/lib/src/misc/IssueBadge.d.ts.map +0 -1
  72. package/lib/src/misc/IssueBadge.js +0 -7
  73. package/lib/src/misc/IssueBadge.js.map +0 -1
  74. package/lib/src/misc/KeyboardShortcutToast.d.ts +0 -16
  75. package/lib/src/misc/KeyboardShortcutToast.d.ts.map +0 -1
  76. package/lib/src/misc/KeyboardShortcutToast.js +0 -40
  77. package/lib/src/misc/KeyboardShortcutToast.js.map +0 -1
  78. package/lib/src/misc/NodeHandles.d.ts +0 -18
  79. package/lib/src/misc/NodeHandles.d.ts.map +0 -1
  80. package/lib/src/misc/NodeHandles.js +0 -67
  81. package/lib/src/misc/NodeHandles.js.map +0 -1
  82. package/lib/src/misc/SelectionActiveSync.d.ts +0 -10
  83. package/lib/src/misc/SelectionActiveSync.d.ts.map +0 -1
  84. package/lib/src/misc/SelectionActiveSync.js +0 -21
  85. package/lib/src/misc/SelectionActiveSync.js.map +0 -1
  86. package/lib/src/misc/WorkbenchCanvas.d.ts +0 -23
  87. package/lib/src/misc/WorkbenchCanvas.d.ts.map +0 -1
  88. package/lib/src/misc/WorkbenchCanvas.js +0 -669
  89. package/lib/src/misc/WorkbenchCanvas.js.map +0 -1
  90. package/lib/src/misc/WorkbenchStudio.d.ts +0 -43
  91. package/lib/src/misc/WorkbenchStudio.d.ts.map +0 -1
  92. package/lib/src/misc/WorkbenchStudio.js +0 -463
  93. package/lib/src/misc/WorkbenchStudio.js.map +0 -1
  94. package/lib/src/misc/constants.d.ts +0 -4
  95. package/lib/src/misc/constants.d.ts.map +0 -1
  96. package/lib/src/misc/constants.js +0 -5
  97. package/lib/src/misc/constants.js.map +0 -1
  98. package/lib/src/misc/context/WorkbenchContext.d.ts +0 -133
  99. package/lib/src/misc/context/WorkbenchContext.d.ts.map +0 -1
  100. package/lib/src/misc/context/WorkbenchContext.js +0 -9
  101. package/lib/src/misc/context/WorkbenchContext.js.map +0 -1
  102. package/lib/src/misc/context/WorkbenchContext.provider.d.ts +0 -12
  103. package/lib/src/misc/context/WorkbenchContext.provider.d.ts.map +0 -1
  104. package/lib/src/misc/context/WorkbenchContext.provider.js +0 -995
  105. package/lib/src/misc/context/WorkbenchContext.provider.js.map +0 -1
  106. package/lib/src/misc/context-menu/ContextMenuButton.d.ts +0 -8
  107. package/lib/src/misc/context-menu/ContextMenuButton.d.ts.map +0 -1
  108. package/lib/src/misc/context-menu/ContextMenuButton.js +0 -10
  109. package/lib/src/misc/context-menu/ContextMenuButton.js.map +0 -1
  110. package/lib/src/misc/context-menu/ContextMenuHandlers.d.ts +0 -85
  111. package/lib/src/misc/context-menu/ContextMenuHandlers.d.ts.map +0 -1
  112. package/lib/src/misc/context-menu/ContextMenuHandlers.js +0 -2
  113. package/lib/src/misc/context-menu/ContextMenuHandlers.js.map +0 -1
  114. package/lib/src/misc/context-menu/ContextMenuHelpers.d.ts +0 -45
  115. package/lib/src/misc/context-menu/ContextMenuHelpers.d.ts.map +0 -1
  116. package/lib/src/misc/context-menu/ContextMenuHelpers.js +0 -182
  117. package/lib/src/misc/context-menu/ContextMenuHelpers.js.map +0 -1
  118. package/lib/src/misc/context-menu/DefaultContextMenu.d.ts +0 -3
  119. package/lib/src/misc/context-menu/DefaultContextMenu.d.ts.map +0 -1
  120. package/lib/src/misc/context-menu/DefaultContextMenu.js +0 -111
  121. package/lib/src/misc/context-menu/DefaultContextMenu.js.map +0 -1
  122. package/lib/src/misc/context-menu/NodeContextMenu.d.ts +0 -3
  123. package/lib/src/misc/context-menu/NodeContextMenu.d.ts.map +0 -1
  124. package/lib/src/misc/context-menu/NodeContextMenu.js +0 -51
  125. package/lib/src/misc/context-menu/NodeContextMenu.js.map +0 -1
  126. package/lib/src/misc/context-menu/SelectionContextMenu.d.ts +0 -3
  127. package/lib/src/misc/context-menu/SelectionContextMenu.d.ts.map +0 -1
  128. package/lib/src/misc/context-menu/SelectionContextMenu.js +0 -47
  129. package/lib/src/misc/context-menu/SelectionContextMenu.js.map +0 -1
  130. package/lib/src/misc/hooks.d.ts +0 -18
  131. package/lib/src/misc/hooks.d.ts.map +0 -1
  132. package/lib/src/misc/hooks.js +0 -275
  133. package/lib/src/misc/hooks.js.map +0 -1
  134. package/lib/src/misc/layout.d.ts +0 -117
  135. package/lib/src/misc/layout.d.ts.map +0 -1
  136. package/lib/src/misc/layout.js +0 -205
  137. package/lib/src/misc/layout.js.map +0 -1
  138. package/lib/src/misc/load.d.ts +0 -5
  139. package/lib/src/misc/load.d.ts.map +0 -1
  140. package/lib/src/misc/load.js +0 -106
  141. package/lib/src/misc/load.js.map +0 -1
  142. package/lib/src/misc/mapping.d.ts +0 -128
  143. package/lib/src/misc/mapping.d.ts.map +0 -1
  144. package/lib/src/misc/mapping.js +0 -270
  145. package/lib/src/misc/mapping.js.map +0 -1
  146. package/lib/src/misc/merge-utils.d.ts +0 -12
  147. package/lib/src/misc/merge-utils.d.ts.map +0 -1
  148. package/lib/src/misc/merge-utils.js +0 -51
  149. package/lib/src/misc/merge-utils.js.map +0 -1
  150. package/lib/src/misc/thumbnail-utils.d.ts +0 -53
  151. package/lib/src/misc/thumbnail-utils.d.ts.map +0 -1
  152. package/lib/src/misc/thumbnail-utils.js +0 -629
  153. package/lib/src/misc/thumbnail-utils.js.map +0 -1
  154. package/lib/src/misc/types.d.ts +0 -18
  155. package/lib/src/misc/types.d.ts.map +0 -1
  156. package/lib/src/misc/types.js +0 -2
  157. package/lib/src/misc/types.js.map +0 -1
  158. package/lib/src/misc/value.d.ts +0 -16
  159. package/lib/src/misc/value.d.ts.map +0 -1
  160. package/lib/src/misc/value.js +0 -114
  161. package/lib/src/misc/value.js.map +0 -1
  162. package/lib/src/misc/viewport-utils.d.ts +0 -6
  163. package/lib/src/misc/viewport-utils.d.ts.map +0 -1
  164. package/lib/src/misc/viewport-utils.js +0 -18
  165. package/lib/src/misc/viewport-utils.js.map +0 -1
  166. package/lib/src/runtime/AbstractGraphRunner.d.ts +0 -61
  167. package/lib/src/runtime/AbstractGraphRunner.d.ts.map +0 -1
  168. package/lib/src/runtime/AbstractGraphRunner.js +0 -63
  169. package/lib/src/runtime/AbstractGraphRunner.js.map +0 -1
  170. package/lib/src/runtime/IGraphRunner.d.ts +0 -100
  171. package/lib/src/runtime/IGraphRunner.d.ts.map +0 -1
  172. package/lib/src/runtime/IGraphRunner.js +0 -2
  173. package/lib/src/runtime/IGraphRunner.js.map +0 -1
  174. package/lib/src/runtime/LocalGraphRunner.d.ts +0 -60
  175. package/lib/src/runtime/LocalGraphRunner.d.ts.map +0 -1
  176. package/lib/src/runtime/LocalGraphRunner.js +0 -294
  177. package/lib/src/runtime/LocalGraphRunner.js.map +0 -1
  178. package/lib/src/runtime/RemoteGraphRunner.d.ts +0 -109
  179. package/lib/src/runtime/RemoteGraphRunner.d.ts.map +0 -1
  180. package/lib/src/runtime/RemoteGraphRunner.js +0 -696
  181. package/lib/src/runtime/RemoteGraphRunner.js.map +0 -1
@@ -1,629 +0,0 @@
1
- /**
2
- * Flow thumbnail capture utility
3
- * Captures React Flow canvas as SVG image
4
- */
5
- // ============================================================================
6
- // Utility Functions
7
- // ============================================================================
8
- /**
9
- * Parses CSS transform string to extract translate and scale values
10
- */
11
- function parseViewportTransform(transform) {
12
- let translateX = 0;
13
- let translateY = 0;
14
- let scale = 1;
15
- if (transform && transform !== "none") {
16
- // Try translate() scale() format first
17
- const translateMatch = transform.match(/translate\(([^,]+)px,\s*([^)]+)px\)/);
18
- const scaleMatch = transform.match(/scale\(([^)]+)\)/);
19
- if (translateMatch) {
20
- translateX = parseFloat(translateMatch[1]);
21
- translateY = parseFloat(translateMatch[2]);
22
- }
23
- if (scaleMatch) {
24
- scale = parseFloat(scaleMatch[1]);
25
- }
26
- // Fallback to matrix format
27
- if (!translateMatch) {
28
- const matrixMatch = transform.match(/matrix\(([^)]+)\)/);
29
- if (matrixMatch) {
30
- const values = matrixMatch[1].split(",").map((v) => parseFloat(v.trim()));
31
- if (values.length >= 6) {
32
- scale = Math.sqrt(values[0] * values[0] + values[1] * values[1]);
33
- translateX = values[4];
34
- translateY = values[5];
35
- }
36
- }
37
- }
38
- }
39
- return { translateX, translateY, scale };
40
- }
41
- /**
42
- * Calculates visible viewport bounds in flow coordinates
43
- */
44
- function calculateVisibleBounds(viewportRect, transform) {
45
- const { translateX, translateY, scale } = transform;
46
- // Guard against division by zero
47
- if (scale === 0) {
48
- console.warn("[flowThumbnail] Viewport scale is 0, using default bounds");
49
- return {
50
- minX: -translateX,
51
- minY: -translateY,
52
- maxX: viewportRect.width - translateX,
53
- maxY: viewportRect.height - translateY,
54
- };
55
- }
56
- // Screen to flow: (screenX - translateX) / scale
57
- return {
58
- minX: (0 - translateX) / scale,
59
- minY: (0 - translateY) / scale,
60
- maxX: (viewportRect.width - translateX) / scale,
61
- maxY: (viewportRect.height - translateY) / scale,
62
- };
63
- }
64
- /**
65
- * Parses border radius string (px or rem) to pixels
66
- */
67
- function parseBorderRadius(borderRadiusStr) {
68
- if (!borderRadiusStr || borderRadiusStr === "0px") {
69
- return 8; // default
70
- }
71
- const match = borderRadiusStr.match(/([\d.]+)(px|rem)/);
72
- if (match) {
73
- const value = parseFloat(match[1]);
74
- const unit = match[2];
75
- // Convert rem to px (assuming 16px base) or use px directly
76
- return unit === "rem" ? value * 16 : value;
77
- }
78
- // Try direct parseFloat as fallback
79
- const parsed = parseFloat(borderRadiusStr);
80
- return isNaN(parsed) ? 8 : parsed;
81
- }
82
- /**
83
- * Extracts stroke color from element, with fallback
84
- */
85
- function extractStrokeColor(element) {
86
- if (element instanceof SVGPathElement) {
87
- return element.getAttribute("stroke") || window.getComputedStyle(element).stroke || "#b1b1b7";
88
- }
89
- const style = window.getComputedStyle(element);
90
- return (style.borderColor || style.borderTopColor || "#6b7280" // gray-500 default
91
- );
92
- }
93
- /**
94
- * Extracts stroke/border width from element, ensuring minimum value
95
- */
96
- function extractStrokeWidth(element, minWidth = 1) {
97
- if (element instanceof SVGPathElement) {
98
- const width = parseFloat(element.getAttribute("stroke-width") || "0") ||
99
- parseFloat(window.getComputedStyle(element).strokeWidth || "2");
100
- return width > 0 ? width : minWidth;
101
- }
102
- const style = window.getComputedStyle(element);
103
- const width = parseFloat(style.borderWidth || style.borderTopWidth || "0");
104
- return width > 0 ? width : minWidth;
105
- }
106
- /**
107
- * Checks if a rectangle intersects with visible bounds
108
- */
109
- function isRectVisible(x, y, width, height, bounds) {
110
- return x + width >= bounds.minX && x <= bounds.maxX && y + height >= bounds.minY && y <= bounds.maxY;
111
- }
112
- /**
113
- * Parses path data to get bounding box
114
- * Handles M (moveTo), L (lineTo), C (cubic Bezier), Q (quadratic Bezier), and H/V (horizontal/vertical) commands
115
- */
116
- function getPathBounds(pathData) {
117
- let minX = Infinity;
118
- let minY = Infinity;
119
- let maxX = -Infinity;
120
- let maxY = -Infinity;
121
- // Match coordinates from various path commands: M, L, C, Q, T, S, H, V
122
- // Pattern matches: command letter followed by coordinate pairs
123
- const coordPattern = /[MLCQTSHV](-?\d+\.?\d*),(-?\d+\.?\d*)/g;
124
- const coords = pathData.match(coordPattern);
125
- if (coords) {
126
- coords.forEach((coord) => {
127
- const match = coord.match(/(-?\d+\.?\d*),(-?\d+\.?\d*)/);
128
- if (match) {
129
- const x = parseFloat(match[1]);
130
- const y = parseFloat(match[2]);
131
- if (!isNaN(x) && !isNaN(y)) {
132
- minX = Math.min(minX, x);
133
- minY = Math.min(minY, y);
134
- maxX = Math.max(maxX, x);
135
- maxY = Math.max(maxY, y);
136
- }
137
- }
138
- });
139
- }
140
- return { minX, minY, maxX, maxY };
141
- }
142
- // ============================================================================
143
- // Edge Extraction
144
- // ============================================================================
145
- /**
146
- * Extracts visible edge paths from React Flow viewport
147
- */
148
- function extractEdgePaths(viewport, visibleBounds) {
149
- const edges = [];
150
- let minX = Infinity;
151
- let minY = Infinity;
152
- let maxX = -Infinity;
153
- let maxY = -Infinity;
154
- const edgePathElements = viewport.querySelectorAll(".react-flow__edge-path");
155
- edgePathElements.forEach((pathEl) => {
156
- const pathData = pathEl.getAttribute("d");
157
- if (!pathData)
158
- return;
159
- const pathBounds = getPathBounds(pathData);
160
- // Only include edge if it intersects with visible viewport (or if ignoring viewport)
161
- if (!visibleBounds ||
162
- (pathBounds.maxX >= visibleBounds.minX &&
163
- pathBounds.minX <= visibleBounds.maxX &&
164
- pathBounds.maxY >= visibleBounds.minY &&
165
- pathBounds.minY <= visibleBounds.maxY)) {
166
- edges.push({
167
- d: pathData,
168
- stroke: extractStrokeColor(pathEl),
169
- strokeWidth: extractStrokeWidth(pathEl, 2),
170
- });
171
- // Update bounding box
172
- minX = Math.min(minX, pathBounds.minX);
173
- minY = Math.min(minY, pathBounds.minY);
174
- maxX = Math.max(maxX, pathBounds.maxX);
175
- maxY = Math.max(maxY, pathBounds.maxY);
176
- }
177
- });
178
- return { edges, bounds: { minX, minY, maxX, maxY } };
179
- }
180
- // ============================================================================
181
- // Node Extraction
182
- // ============================================================================
183
- /**
184
- * Extracts node position from transform style
185
- */
186
- function extractNodePosition(nodeEl) {
187
- const transformStyle = nodeEl.style.transform || "";
188
- const translateMatch = transformStyle.match(/translate\(([^,]+)px,\s*([^)]+)px\)/);
189
- if (translateMatch) {
190
- return {
191
- x: parseFloat(translateMatch[1]),
192
- y: parseFloat(translateMatch[2]),
193
- };
194
- }
195
- return { x: 0, y: 0 };
196
- }
197
- /**
198
- * Extracts node dimensions from inline styles
199
- */
200
- function extractNodeDimensions(nodeEl) {
201
- const widthMatch = nodeEl.style.width?.match(/(\d+)px/);
202
- const heightMatch = nodeEl.style.height?.match(/(\d+)px/);
203
- return {
204
- width: widthMatch ? parseFloat(widthMatch[1]) : 150,
205
- height: heightMatch ? parseFloat(heightMatch[1]) : 40,
206
- };
207
- }
208
- /**
209
- * Extracts node styles (colors, border, radius) from computed styles
210
- */
211
- function extractNodeStyles(nodeContent, nodeBackgroundColor) {
212
- const computedStyle = window.getComputedStyle(nodeContent);
213
- // Use provided background color or default gray background for nodes in thumbnail
214
- const fill = nodeBackgroundColor || "#f3f4f6"; // gray-100 equivalent
215
- const stroke = extractStrokeColor(nodeContent);
216
- const strokeWidth = extractStrokeWidth(nodeContent, 1);
217
- const borderRadiusStr = computedStyle.borderRadius || "8px";
218
- const rx = parseBorderRadius(borderRadiusStr);
219
- const ry = rx; // Use same radius for both x and y
220
- return { fill, stroke, strokeWidth, rx, ry };
221
- }
222
- /**
223
- * Determines if a handle is a source (output) or target (input)
224
- */
225
- function isHandleSource(handleEl) {
226
- return (handleEl.classList.contains("react-flow__handle-right") || handleEl.classList.contains("react-flow__handle-source"));
227
- }
228
- /**
229
- * Extracts handle position and calculates absolute coordinates
230
- */
231
- function extractHandlePosition(handleEl, nodeX, nodeY, nodeWidth, isSource) {
232
- const handleStyle = window.getComputedStyle(handleEl);
233
- const handleTop = parseFloat(handleStyle.top || "0");
234
- const handleLeft = handleStyle.left;
235
- const handleRight = handleStyle.right;
236
- const handleY = nodeY + handleTop;
237
- let handleX;
238
- if (isSource) {
239
- // Source handles are on the right edge
240
- if (handleRight !== "auto" && handleRight !== "") {
241
- const rightValue = parseFloat(handleRight) || 0;
242
- handleX = nodeX + nodeWidth + rightValue;
243
- }
244
- else {
245
- handleX = nodeX + nodeWidth;
246
- }
247
- }
248
- else {
249
- // Target handles are on the left edge
250
- if (handleLeft !== "auto" && handleLeft !== "") {
251
- const leftValue = parseFloat(handleLeft) || 0;
252
- handleX = nodeX + leftValue;
253
- }
254
- else {
255
- handleX = nodeX;
256
- }
257
- }
258
- return { x: handleX, y: handleY };
259
- }
260
- /**
261
- * Extracts handles from a node element
262
- */
263
- function extractNodeHandles(nodeEl, nodeX, nodeY, nodeWidth) {
264
- const handles = [];
265
- const handleElements = nodeEl.querySelectorAll(".react-flow__handle");
266
- handleElements.forEach((handleEl) => {
267
- const handleStyle = window.getComputedStyle(handleEl);
268
- const handleWidth = parseFloat(handleStyle.width || "12");
269
- const handleHeight = parseFloat(handleStyle.height || "12");
270
- const isSource = isHandleSource(handleEl);
271
- const position = extractHandlePosition(handleEl, nodeX, nodeY, nodeWidth, isSource);
272
- handles.push({
273
- x: position.x,
274
- y: position.y,
275
- width: handleWidth,
276
- height: handleHeight,
277
- fill: handleStyle.backgroundColor || "rgba(255, 255, 255, 0.5)",
278
- stroke: extractStrokeColor(handleEl),
279
- strokeWidth: extractStrokeWidth(handleEl, 1),
280
- type: isSource ? "source" : "target",
281
- });
282
- });
283
- return handles;
284
- }
285
- /**
286
- * Extracts node title text and position
287
- */
288
- function extractNodeTitle(nodeEl, nodeX, nodeY) {
289
- const titleElement = nodeEl.querySelector(".react-flow__node-title");
290
- if (!titleElement)
291
- return undefined;
292
- const titleText = titleElement.textContent || titleElement.innerText || "";
293
- if (!titleText.trim())
294
- return undefined;
295
- const titleStyle = window.getComputedStyle(titleElement);
296
- const titleRect = titleElement.getBoundingClientRect();
297
- const nodeRect = nodeEl.getBoundingClientRect();
298
- // Calculate title position relative to node (in flow coordinates)
299
- const titleRelativeX = titleRect.left - nodeRect.left;
300
- const titleRelativeY = titleRect.top - nodeRect.top;
301
- // Get font properties
302
- const fontSize = parseFloat(titleStyle.fontSize || "14");
303
- const fill = titleStyle.color || "#374151"; // gray-700 default
304
- const fontWeight = titleStyle.fontWeight || "600"; // bold default
305
- // Calculate text position (SVG text uses baseline)
306
- const lineHeight = parseFloat(titleStyle.lineHeight || String(fontSize * 1.2));
307
- const textBaselineOffset = lineHeight * 0.8; // Approximate baseline offset
308
- return {
309
- text: titleText.trim(),
310
- x: nodeX + titleRelativeX,
311
- y: nodeY + titleRelativeY + textBaselineOffset,
312
- fontSize,
313
- fill,
314
- fontWeight,
315
- };
316
- }
317
- /**
318
- * Extracts visible nodes from React Flow viewport
319
- */
320
- function extractNodes(viewport, visibleBounds, options = {}) {
321
- const { exportHandles = true, exportNodeTitle = true, nodeBackgroundColor } = options;
322
- const nodes = [];
323
- let minX = Infinity;
324
- let minY = Infinity;
325
- let maxX = -Infinity;
326
- let maxY = -Infinity;
327
- const nodeElements = viewport.querySelectorAll(".react-flow__node");
328
- nodeElements.forEach((nodeEl) => {
329
- const position = extractNodePosition(nodeEl);
330
- const dimensions = extractNodeDimensions(nodeEl);
331
- // Get the actual node content div (first child)
332
- const nodeContent = nodeEl.firstElementChild;
333
- if (!nodeContent)
334
- return;
335
- const styles = extractNodeStyles(nodeContent, nodeBackgroundColor);
336
- const handles = exportHandles ? extractNodeHandles(nodeEl, position.x, position.y, dimensions.width) : [];
337
- const title = exportNodeTitle ? extractNodeTitle(nodeEl, position.x, position.y) : undefined;
338
- // Only include node if it's within visible viewport (or if ignoring viewport)
339
- if (!visibleBounds || isRectVisible(position.x, position.y, dimensions.width, dimensions.height, visibleBounds)) {
340
- nodes.push({
341
- x: position.x,
342
- y: position.y,
343
- width: dimensions.width,
344
- height: dimensions.height,
345
- ...styles,
346
- handles,
347
- title,
348
- });
349
- // Update bounding box
350
- minX = Math.min(minX, position.x);
351
- minY = Math.min(minY, position.y);
352
- maxX = Math.max(maxX, position.x + dimensions.width);
353
- maxY = Math.max(maxY, position.y + dimensions.height);
354
- // Update bounding box to include handles
355
- handles.forEach((handle) => {
356
- minX = Math.min(minX, handle.x);
357
- minY = Math.min(minY, handle.y);
358
- maxX = Math.max(maxX, handle.x + handle.width);
359
- maxY = Math.max(maxY, handle.y + handle.height);
360
- });
361
- }
362
- });
363
- return { nodes, bounds: { minX, minY, maxX, maxY } };
364
- }
365
- // ============================================================================
366
- // SVG Rendering
367
- // ============================================================================
368
- /**
369
- * Creates SVG element with dot pattern background (matching React Flow)
370
- */
371
- function createSVGElement(width, height, options = {}) {
372
- const { exportBackgroundPattern = true, backgroundPatternColor = "#f1f1f1", backgroundColor = "#ffffff" } = options;
373
- const svg = document.createElementNS("http://www.w3.org/2000/svg", "svg");
374
- svg.setAttribute("width", String(width));
375
- svg.setAttribute("height", String(height));
376
- svg.setAttribute("xmlns", "http://www.w3.org/2000/svg");
377
- // Create background rectangle with configurable background color
378
- const bgRect = document.createElementNS("http://www.w3.org/2000/svg", "rect");
379
- bgRect.setAttribute("width", String(width));
380
- bgRect.setAttribute("height", String(height));
381
- bgRect.setAttribute("fill", backgroundColor);
382
- svg.appendChild(bgRect);
383
- // Create dot pattern if enabled
384
- if (exportBackgroundPattern) {
385
- // Create defs section for patterns
386
- const defs = document.createElementNS("http://www.w3.org/2000/svg", "defs");
387
- // Create dot pattern (matching React Flow's BackgroundVariant.Dots)
388
- // React Flow uses gap={12} and size={1} by default
389
- const pattern = document.createElementNS("http://www.w3.org/2000/svg", "pattern");
390
- pattern.setAttribute("id", "dot-pattern");
391
- pattern.setAttribute("x", "0");
392
- pattern.setAttribute("y", "0");
393
- pattern.setAttribute("width", "24"); // gap between dots (matching React Flow default)
394
- pattern.setAttribute("height", "24");
395
- pattern.setAttribute("patternUnits", "userSpaceOnUse");
396
- // Create a circle for the dot (centered in the pattern cell)
397
- const circle = document.createElementNS("http://www.w3.org/2000/svg", "circle");
398
- circle.setAttribute("cx", "12"); // Center of 24x24 pattern cell
399
- circle.setAttribute("cy", "12");
400
- circle.setAttribute("r", "1"); // dot radius = 1 (matching React Flow size={1})
401
- circle.setAttribute("fill", backgroundPatternColor);
402
- pattern.appendChild(circle);
403
- defs.appendChild(pattern);
404
- svg.appendChild(defs);
405
- // Create pattern overlay rectangle
406
- const patternRect = document.createElementNS("http://www.w3.org/2000/svg", "rect");
407
- patternRect.setAttribute("width", String(width));
408
- patternRect.setAttribute("height", String(height));
409
- patternRect.setAttribute("fill", "url(#dot-pattern)");
410
- svg.appendChild(patternRect);
411
- }
412
- // Create group with transform
413
- const group = document.createElementNS("http://www.w3.org/2000/svg", "g");
414
- svg.appendChild(group);
415
- return { svg, group };
416
- }
417
- /**
418
- * Renders a node rectangle to SVG group
419
- */
420
- function renderNodeRect(group, node) {
421
- const rectEl = document.createElementNS("http://www.w3.org/2000/svg", "rect");
422
- rectEl.setAttribute("x", String(node.x));
423
- rectEl.setAttribute("y", String(node.y));
424
- rectEl.setAttribute("width", String(node.width));
425
- rectEl.setAttribute("height", String(node.height));
426
- rectEl.setAttribute("rx", String(node.rx));
427
- rectEl.setAttribute("ry", String(node.ry));
428
- rectEl.setAttribute("fill", node.fill);
429
- rectEl.setAttribute("stroke", node.stroke);
430
- rectEl.setAttribute("stroke-width", String(node.strokeWidth));
431
- group.appendChild(rectEl);
432
- }
433
- /**
434
- * Renders a handle to SVG group
435
- */
436
- function renderHandle(group, handle) {
437
- const handleEl = document.createElementNS("http://www.w3.org/2000/svg", "rect");
438
- // Handles are centered on edges
439
- handleEl.setAttribute("x", String(handle.x - handle.width / 2));
440
- handleEl.setAttribute("y", String(handle.y - handle.height / 2));
441
- handleEl.setAttribute("width", String(handle.width));
442
- handleEl.setAttribute("height", String(handle.height));
443
- handleEl.setAttribute("rx", String(handle.width / 2)); // Make handles circular/rounded
444
- handleEl.setAttribute("ry", String(handle.height / 2));
445
- handleEl.setAttribute("fill", handle.fill);
446
- handleEl.setAttribute("stroke", handle.stroke);
447
- handleEl.setAttribute("stroke-width", String(handle.strokeWidth));
448
- group.appendChild(handleEl);
449
- }
450
- /**
451
- * Renders node title text to SVG group
452
- */
453
- function renderNodeTitle(group, title) {
454
- const textEl = document.createElementNS("http://www.w3.org/2000/svg", "text");
455
- textEl.setAttribute("x", String(title.x));
456
- textEl.setAttribute("y", String(title.y));
457
- textEl.setAttribute("font-size", String(title.fontSize));
458
- textEl.setAttribute("fill", title.fill);
459
- textEl.setAttribute("font-weight", title.fontWeight);
460
- textEl.setAttribute("font-family", "system-ui, -apple-system, sans-serif");
461
- textEl.textContent = title.text;
462
- group.appendChild(textEl);
463
- }
464
- /**
465
- * Renders an edge path to SVG group
466
- */
467
- function renderEdgePath(group, edge) {
468
- const pathEl = document.createElementNS("http://www.w3.org/2000/svg", "path");
469
- pathEl.setAttribute("d", edge.d);
470
- pathEl.setAttribute("fill", "none");
471
- pathEl.setAttribute("stroke", edge.stroke);
472
- pathEl.setAttribute("stroke-width", String(edge.strokeWidth));
473
- group.appendChild(pathEl);
474
- }
475
- /**
476
- * Renders all nodes, handles, titles, and edges to SVG group
477
- */
478
- function renderContentToSVG(group, nodes, edges, transformX, transformY, options = {}) {
479
- const { exportHandles = true, exportNodeTitle = true } = options;
480
- group.setAttribute("transform", `translate(${transformX}, ${transformY})`);
481
- // Render nodes
482
- nodes.forEach((node) => {
483
- renderNodeRect(group, node);
484
- if (exportHandles) {
485
- node.handles.forEach((handle) => renderHandle(group, handle));
486
- }
487
- if (exportNodeTitle && node.title) {
488
- renderNodeTitle(group, node.title);
489
- }
490
- });
491
- // Render edges
492
- edges.forEach((edge) => renderEdgePath(group, edge));
493
- }
494
- // ============================================================================
495
- // Main Capture Function
496
- // ============================================================================
497
- /**
498
- * Captures a React Flow container element as an SVG image and returns data URL
499
- * @param containerElement - The React Flow container DOM element
500
- * @param options - Options for thumbnail capture
501
- * @returns Promise resolving to SVG data URL string, or null if capture fails
502
- */
503
- export async function captureCanvasThumbnail(containerElement, options = {}) {
504
- const { ignoreViewport = true, padding = 40, exportHandles = true, exportNodeTitle = true, exportBackgroundPattern = true, nodeBackgroundColor, backgroundPatternColor, backgroundColor, } = options;
505
- if (!containerElement) {
506
- console.warn("[flowThumbnail] Container element is null");
507
- return null;
508
- }
509
- try {
510
- // Find the React Flow viewport element
511
- const reactFlowViewport = containerElement.querySelector(".react-flow__viewport");
512
- if (!reactFlowViewport) {
513
- console.warn("[flowThumbnail] React Flow viewport not found");
514
- return null;
515
- }
516
- // Parse viewport transform
517
- const viewportStyle = window.getComputedStyle(reactFlowViewport);
518
- const viewportTransform = viewportStyle.transform || viewportStyle.getPropertyValue("transform");
519
- const transform = parseViewportTransform(viewportTransform);
520
- // Calculate visible bounds (null if ignoring viewport)
521
- const viewportRect = reactFlowViewport.getBoundingClientRect();
522
- const visibleBounds = ignoreViewport ? null : calculateVisibleBounds(viewportRect, transform);
523
- // Extract edges and nodes (pass null bounds if ignoring viewport to get all)
524
- const { edges, bounds: edgeBounds } = extractEdgePaths(reactFlowViewport, visibleBounds);
525
- const { nodes, bounds: nodeBounds } = extractNodes(reactFlowViewport, visibleBounds, {
526
- exportHandles,
527
- exportNodeTitle,
528
- nodeBackgroundColor,
529
- });
530
- // Calculate overall bounding box
531
- // Handle case where one or both bounds might be Infinity (no content)
532
- let minX = Infinity;
533
- let minY = Infinity;
534
- let maxX = -Infinity;
535
- let maxY = -Infinity;
536
- if (edgeBounds.minX !== Infinity) {
537
- minX = Math.min(minX, edgeBounds.minX);
538
- minY = Math.min(minY, edgeBounds.minY);
539
- maxX = Math.max(maxX, edgeBounds.maxX);
540
- maxY = Math.max(maxY, edgeBounds.maxY);
541
- }
542
- if (nodeBounds.minX !== Infinity) {
543
- minX = Math.min(minX, nodeBounds.minX);
544
- minY = Math.min(minY, nodeBounds.minY);
545
- maxX = Math.max(maxX, nodeBounds.maxX);
546
- maxY = Math.max(maxY, nodeBounds.maxY);
547
- }
548
- // If no content found, return null
549
- if (minX === Infinity || (nodes.length === 0 && edges.length === 0)) {
550
- if (ignoreViewport) {
551
- console.warn("[flowThumbnail] No content found in graph");
552
- return null;
553
- }
554
- // Fallback to visible viewport bounds if not ignoring viewport
555
- minX = visibleBounds.minX;
556
- minY = visibleBounds.minY;
557
- maxX = visibleBounds.maxX;
558
- maxY = visibleBounds.maxY;
559
- }
560
- // Calculate content bounds with padding if ignoring viewport
561
- let contentMinX;
562
- let contentMinY;
563
- let contentMaxX;
564
- let contentMaxY;
565
- if (ignoreViewport) {
566
- // Add padding when exporting whole graph
567
- contentMinX = minX - padding;
568
- contentMinY = minY - padding;
569
- contentMaxX = maxX + padding;
570
- contentMaxY = maxY + padding;
571
- }
572
- else {
573
- // Use the visible viewport bounds exactly (what the user sees)
574
- contentMinX = visibleBounds.minX;
575
- contentMinY = visibleBounds.minY;
576
- contentMaxX = visibleBounds.maxX;
577
- contentMaxY = visibleBounds.maxY;
578
- }
579
- const contentWidth = contentMaxX - contentMinX;
580
- const contentHeight = contentMaxY - contentMinY;
581
- // Create SVG with options
582
- const { svg, group } = createSVGElement(contentWidth, contentHeight, {
583
- exportBackgroundPattern,
584
- backgroundPatternColor,
585
- backgroundColor,
586
- });
587
- // Render content with options
588
- renderContentToSVG(group, nodes, edges, -contentMinX, -contentMinY, {
589
- exportHandles,
590
- exportNodeTitle,
591
- });
592
- // Serialize SVG to string
593
- const serializer = new XMLSerializer();
594
- const svgString = serializer.serializeToString(svg);
595
- // Return SVG data URL
596
- const svgDataUrl = `data:image/svg+xml;base64,${btoa(unescape(encodeURIComponent(svgString)))}`;
597
- return svgDataUrl;
598
- }
599
- catch (error) {
600
- console.error("[flowThumbnail] Failed to capture thumbnail:", error);
601
- return null;
602
- }
603
- }
604
- /**
605
- * Captures a React Flow container element as an SVG image and downloads it
606
- * @param containerElement - The React Flow container DOM element
607
- * @param options - Options for thumbnail capture
608
- * @returns Promise resolving to true if successful, false otherwise
609
- */
610
- export async function downloadCanvasThumbnail(containerElement, options = {}) {
611
- const svgDataUrl = await captureCanvasThumbnail(containerElement, options);
612
- if (!svgDataUrl) {
613
- return false;
614
- }
615
- // Create blob and download
616
- const base64Data = svgDataUrl.split(",")[1];
617
- const svgString = atob(base64Data);
618
- const blob = new Blob([svgString], { type: "image/svg+xml" });
619
- const url = URL.createObjectURL(blob);
620
- const link = document.createElement("a");
621
- link.href = url;
622
- link.download = `flow-thumbnail-${Date.now()}.svg`;
623
- document.body.appendChild(link);
624
- link.click();
625
- document.body.removeChild(link);
626
- URL.revokeObjectURL(url);
627
- return true;
628
- }
629
- //# sourceMappingURL=thumbnail-utils.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"thumbnail-utils.js","sourceRoot":"","sources":["../../../src/misc/thumbnail-utils.ts"],"names":[],"mappings":"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"}