@uipath/apollo-react 4.11.0 → 4.12.1-pr556.9394355

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 (170) hide show
  1. package/dist/canvas/components/AddNodePanel/AddNodeManager.cjs +26 -7
  2. package/dist/canvas/components/AddNodePanel/AddNodeManager.d.ts.map +1 -1
  3. package/dist/canvas/components/AddNodePanel/AddNodeManager.js +26 -7
  4. package/dist/canvas/components/AddNodePanel/createAddNodePreview.cjs +2 -2
  5. package/dist/canvas/components/AddNodePanel/createAddNodePreview.d.ts +8 -1
  6. package/dist/canvas/components/AddNodePanel/createAddNodePreview.d.ts.map +1 -1
  7. package/dist/canvas/components/AddNodePanel/createAddNodePreview.js +2 -2
  8. package/dist/canvas/components/AgentCanvas/agent-flow.manifest.d.ts +1 -0
  9. package/dist/canvas/components/AgentCanvas/agent-flow.manifest.d.ts.map +1 -1
  10. package/dist/canvas/components/BaseNode/BaseNode.cjs +8 -3
  11. package/dist/canvas/components/BaseNode/BaseNode.d.ts +2 -1
  12. package/dist/canvas/components/BaseNode/BaseNode.d.ts.map +1 -1
  13. package/dist/canvas/components/BaseNode/BaseNode.js +5 -3
  14. package/dist/canvas/components/ButtonHandle/ButtonHandle.cjs +115 -34
  15. package/dist/canvas/components/ButtonHandle/ButtonHandle.d.ts +4 -2
  16. package/dist/canvas/components/ButtonHandle/ButtonHandle.d.ts.map +1 -1
  17. package/dist/canvas/components/ButtonHandle/ButtonHandle.js +117 -36
  18. package/dist/canvas/components/ButtonHandle/ButtonHandleStyleUtils.cjs +48 -1
  19. package/dist/canvas/components/ButtonHandle/ButtonHandleStyleUtils.d.ts +4 -0
  20. package/dist/canvas/components/ButtonHandle/ButtonHandleStyleUtils.d.ts.map +1 -1
  21. package/dist/canvas/components/ButtonHandle/ButtonHandleStyleUtils.js +36 -1
  22. package/dist/canvas/components/ButtonHandle/SmartHandle.cjs +1 -1
  23. package/dist/canvas/components/ButtonHandle/SmartHandle.js +1 -1
  24. package/dist/canvas/components/Edges/SequenceEdge.cjs +3 -2
  25. package/dist/canvas/components/Edges/SequenceEdge.d.ts +11 -2
  26. package/dist/canvas/components/Edges/SequenceEdge.d.ts.map +1 -1
  27. package/dist/canvas/components/Edges/SequenceEdge.js +4 -3
  28. package/dist/canvas/components/HierarchicalCanvas/HierarchicalCanvas.cjs +20 -10
  29. package/dist/canvas/components/HierarchicalCanvas/HierarchicalCanvas.d.ts +2 -0
  30. package/dist/canvas/components/HierarchicalCanvas/HierarchicalCanvas.d.ts.map +1 -1
  31. package/dist/canvas/components/HierarchicalCanvas/HierarchicalCanvas.js +21 -11
  32. package/dist/canvas/components/HierarchicalCanvas/HierarchicalCanvasWithControls.cjs +5 -8
  33. package/dist/canvas/components/HierarchicalCanvas/HierarchicalCanvasWithControls.d.ts.map +1 -1
  34. package/dist/canvas/components/HierarchicalCanvas/HierarchicalCanvasWithControls.js +5 -8
  35. package/dist/canvas/components/LoopNode/LoopCanvasNode.cjs +80 -0
  36. package/dist/canvas/components/LoopNode/LoopCanvasNode.d.ts +6 -0
  37. package/dist/canvas/components/LoopNode/LoopCanvasNode.d.ts.map +1 -0
  38. package/dist/canvas/components/LoopNode/LoopCanvasNode.js +46 -0
  39. package/dist/canvas/components/LoopNode/LoopNode.cjs +440 -0
  40. package/dist/canvas/components/LoopNode/LoopNode.constants.cjs +77 -0
  41. package/dist/canvas/components/LoopNode/LoopNode.constants.d.ts +12 -0
  42. package/dist/canvas/components/LoopNode/LoopNode.constants.d.ts.map +1 -0
  43. package/dist/canvas/components/LoopNode/LoopNode.constants.js +13 -0
  44. package/dist/canvas/components/LoopNode/LoopNode.d.ts +5 -0
  45. package/dist/canvas/components/LoopNode/LoopNode.d.ts.map +1 -0
  46. package/dist/canvas/components/LoopNode/LoopNode.helpers.cjs +110 -0
  47. package/dist/canvas/components/LoopNode/LoopNode.helpers.d.ts +19 -0
  48. package/dist/canvas/components/LoopNode/LoopNode.helpers.d.ts.map +1 -0
  49. package/dist/canvas/components/LoopNode/LoopNode.helpers.js +70 -0
  50. package/dist/canvas/components/LoopNode/LoopNode.js +406 -0
  51. package/dist/canvas/components/LoopNode/LoopNode.types.cjs +18 -0
  52. package/dist/canvas/components/LoopNode/LoopNode.types.d.ts +16 -0
  53. package/dist/canvas/components/LoopNode/LoopNode.types.d.ts.map +1 -0
  54. package/dist/canvas/components/LoopNode/LoopNode.types.js +0 -0
  55. package/dist/canvas/components/LoopNode/LoopNodePreview.cjs +81 -0
  56. package/dist/canvas/components/LoopNode/LoopNodePreview.d.ts +8 -0
  57. package/dist/canvas/components/LoopNode/LoopNodePreview.d.ts.map +1 -0
  58. package/dist/canvas/components/LoopNode/LoopNodePreview.js +44 -0
  59. package/dist/canvas/components/LoopNode/index.cjs +72 -0
  60. package/dist/canvas/components/LoopNode/index.d.ts +4 -0
  61. package/dist/canvas/components/LoopNode/index.d.ts.map +1 -0
  62. package/dist/canvas/components/LoopNode/index.js +3 -0
  63. package/dist/canvas/components/StageNode/DraggableTask.cjs +3 -17
  64. package/dist/canvas/components/StageNode/DraggableTask.d.ts.map +1 -1
  65. package/dist/canvas/components/StageNode/DraggableTask.js +3 -17
  66. package/dist/canvas/components/StageNode/EventDrivenTask.cjs +80 -0
  67. package/dist/canvas/components/StageNode/EventDrivenTask.d.ts +13 -0
  68. package/dist/canvas/components/StageNode/EventDrivenTask.d.ts.map +1 -0
  69. package/dist/canvas/components/StageNode/EventDrivenTask.js +46 -0
  70. package/dist/canvas/components/StageNode/StageNode.cjs +29 -581
  71. package/dist/canvas/components/StageNode/StageNode.d.ts.map +1 -1
  72. package/dist/canvas/components/StageNode/StageNode.js +28 -580
  73. package/dist/canvas/components/StageNode/StageNode.styles.cjs +12 -12
  74. package/dist/canvas/components/StageNode/StageNode.styles.d.ts +3 -3
  75. package/dist/canvas/components/StageNode/StageNode.styles.d.ts.map +1 -1
  76. package/dist/canvas/components/StageNode/StageNode.styles.js +4 -4
  77. package/dist/canvas/components/StageNode/StageNode.types.d.ts +11 -0
  78. package/dist/canvas/components/StageNode/StageNode.types.d.ts.map +1 -1
  79. package/dist/canvas/components/StageNode/StageNodeAdhocTaskGroups.cjs +98 -0
  80. package/dist/canvas/components/StageNode/StageNodeAdhocTaskGroups.d.ts +13 -0
  81. package/dist/canvas/components/StageNode/StageNodeAdhocTaskGroups.d.ts.map +1 -0
  82. package/dist/canvas/components/StageNode/StageNodeAdhocTaskGroups.js +64 -0
  83. package/dist/canvas/components/StageNode/StageNodeAllTaskGroups.cjs +129 -0
  84. package/dist/canvas/components/StageNode/StageNodeAllTaskGroups.d.ts +12 -0
  85. package/dist/canvas/components/StageNode/StageNodeAllTaskGroups.d.ts.map +1 -0
  86. package/dist/canvas/components/StageNode/StageNodeAllTaskGroups.js +95 -0
  87. package/dist/canvas/components/StageNode/StageNodeEventDrivenTaskGroups.cjs +97 -0
  88. package/dist/canvas/components/StageNode/StageNodeEventDrivenTaskGroups.d.ts +13 -0
  89. package/dist/canvas/components/StageNode/StageNodeEventDrivenTaskGroups.d.ts.map +1 -0
  90. package/dist/canvas/components/StageNode/StageNodeEventDrivenTaskGroups.js +63 -0
  91. package/dist/canvas/components/StageNode/StageNodeHandles.cjs +119 -0
  92. package/dist/canvas/components/StageNode/StageNodeHandles.d.ts +8 -0
  93. package/dist/canvas/components/StageNode/StageNodeHandles.d.ts.map +1 -0
  94. package/dist/canvas/components/StageNode/StageNodeHandles.js +85 -0
  95. package/dist/canvas/components/StageNode/StageNodeHeader.cjs +245 -0
  96. package/dist/canvas/components/StageNode/StageNodeHeader.d.ts +9 -0
  97. package/dist/canvas/components/StageNode/StageNodeHeader.d.ts.map +1 -0
  98. package/dist/canvas/components/StageNode/StageNodeHeader.js +211 -0
  99. package/dist/canvas/components/StageNode/StageNodeSequentialTaskGroups.cjs +176 -0
  100. package/dist/canvas/components/StageNode/StageNodeSequentialTaskGroups.d.ts +16 -0
  101. package/dist/canvas/components/StageNode/StageNodeSequentialTaskGroups.d.ts.map +1 -0
  102. package/dist/canvas/components/StageNode/StageNodeSequentialTaskGroups.js +142 -0
  103. package/dist/canvas/components/StageNode/StageTaskEntryConditionIcon.cjs +57 -0
  104. package/dist/canvas/components/StageNode/StageTaskEntryConditionIcon.d.ts +5 -0
  105. package/dist/canvas/components/StageNode/StageTaskEntryConditionIcon.d.ts.map +1 -0
  106. package/dist/canvas/components/StageNode/StageTaskEntryConditionIcon.js +23 -0
  107. package/dist/canvas/components/StageNode/hooks/useStageTaskDragHandler.cjs +117 -0
  108. package/dist/canvas/components/StageNode/hooks/useStageTaskDragHandler.d.ts +18 -0
  109. package/dist/canvas/components/StageNode/hooks/useStageTaskDragHandler.d.ts.map +1 -0
  110. package/dist/canvas/components/StageNode/hooks/useStageTaskDragHandler.js +83 -0
  111. package/dist/canvas/components/StageNode/hooks/useStageTasksByGroups.cjs +87 -0
  112. package/dist/canvas/components/StageNode/hooks/useStageTasksByGroups.d.ts +22 -0
  113. package/dist/canvas/components/StageNode/hooks/useStageTasksByGroups.d.ts.map +1 -0
  114. package/dist/canvas/components/StageNode/hooks/useStageTasksByGroups.js +53 -0
  115. package/dist/canvas/components/Toolbar/EdgeToolbar/useEdgeToolbarState.cjs +20 -18
  116. package/dist/canvas/components/Toolbar/EdgeToolbar/useEdgeToolbarState.d.ts +2 -1
  117. package/dist/canvas/components/Toolbar/EdgeToolbar/useEdgeToolbarState.d.ts.map +1 -1
  118. package/dist/canvas/components/Toolbar/EdgeToolbar/useEdgeToolbarState.js +21 -19
  119. package/dist/canvas/components/Toolbox/ListView.cjs +3 -2
  120. package/dist/canvas/components/Toolbox/ListView.d.ts +1 -0
  121. package/dist/canvas/components/Toolbox/ListView.d.ts.map +1 -1
  122. package/dist/canvas/components/Toolbox/ListView.js +3 -2
  123. package/dist/canvas/components/Toolbox/Toolbox.cjs +38 -9
  124. package/dist/canvas/components/Toolbox/Toolbox.d.ts.map +1 -1
  125. package/dist/canvas/components/Toolbox/Toolbox.js +38 -9
  126. package/dist/canvas/components/index.cjs +27 -20
  127. package/dist/canvas/components/index.d.ts +1 -0
  128. package/dist/canvas/components/index.d.ts.map +1 -1
  129. package/dist/canvas/components/index.js +1 -0
  130. package/dist/canvas/core/NodeTypeRegistry.cjs +41 -23
  131. package/dist/canvas/core/NodeTypeRegistry.d.ts +8 -4
  132. package/dist/canvas/core/NodeTypeRegistry.d.ts.map +1 -1
  133. package/dist/canvas/core/NodeTypeRegistry.js +41 -23
  134. package/dist/canvas/core/useNodeTypeRegistry.cjs +4 -3
  135. package/dist/canvas/core/useNodeTypeRegistry.d.ts +1 -1
  136. package/dist/canvas/core/useNodeTypeRegistry.d.ts.map +1 -1
  137. package/dist/canvas/core/useNodeTypeRegistry.js +4 -3
  138. package/dist/canvas/hooks/useAddNodeOnConnectEnd.cjs +4 -3
  139. package/dist/canvas/hooks/useAddNodeOnConnectEnd.d.ts.map +1 -1
  140. package/dist/canvas/hooks/useAddNodeOnConnectEnd.js +4 -3
  141. package/dist/canvas/hooks/usePreviewNode.cjs +4 -2
  142. package/dist/canvas/hooks/usePreviewNode.d.ts.map +1 -1
  143. package/dist/canvas/hooks/usePreviewNode.js +4 -2
  144. package/dist/canvas/schema/node-definition/handle.cjs +10 -2
  145. package/dist/canvas/schema/node-definition/handle.d.ts +9 -0
  146. package/dist/canvas/schema/node-definition/handle.d.ts.map +1 -1
  147. package/dist/canvas/schema/node-definition/handle.js +6 -1
  148. package/dist/canvas/schema/node-definition/index.cjs +4 -1
  149. package/dist/canvas/schema/node-definition/index.d.ts +3 -3
  150. package/dist/canvas/schema/node-definition/index.d.ts.map +1 -1
  151. package/dist/canvas/schema/node-definition/index.js +2 -2
  152. package/dist/canvas/schema/node-definition/node-manifest.d.ts +4 -0
  153. package/dist/canvas/schema/node-definition/node-manifest.d.ts.map +1 -1
  154. package/dist/canvas/storybook-utils/manifests/index.d.ts +1 -0
  155. package/dist/canvas/storybook-utils/manifests/index.d.ts.map +1 -1
  156. package/dist/canvas/storybook-utils/manifests/node-definitions.d.ts.map +1 -1
  157. package/dist/canvas/styles/tailwind.canvas.css +1 -1
  158. package/dist/canvas/utils/createPreviewGraph.cjs +94 -0
  159. package/dist/canvas/utils/createPreviewGraph.d.ts +24 -0
  160. package/dist/canvas/utils/createPreviewGraph.d.ts.map +1 -0
  161. package/dist/canvas/utils/createPreviewGraph.js +51 -0
  162. package/dist/canvas/utils/createPreviewNode.cjs +29 -13
  163. package/dist/canvas/utils/createPreviewNode.d.ts +5 -1
  164. package/dist/canvas/utils/createPreviewNode.d.ts.map +1 -1
  165. package/dist/canvas/utils/createPreviewNode.js +23 -13
  166. package/dist/canvas/utils/index.cjs +33 -26
  167. package/dist/canvas/utils/index.d.ts +2 -1
  168. package/dist/canvas/utils/index.d.ts.map +1 -1
  169. package/dist/canvas/utils/index.js +2 -1
  170. package/package.json +2 -2
@@ -100,6 +100,10 @@ function Toolbox({ onClose, onBack, onItemSelect, onSearch, onItemHover, title,
100
100
  const listViewRef = (0, external_react_namespaceObject.useRef)(null);
101
101
  const searchInputRef = (0, external_react_namespaceObject.useRef)(null);
102
102
  const clearButtonRef = (0, external_react_namespaceObject.useRef)(null);
103
+ const lastScrollTopRef = (0, external_react_namespaceObject.useRef)(0);
104
+ const handleListScroll = (0, external_react_namespaceObject.useCallback)((e)=>{
105
+ lastScrollTopRef.current = e.currentTarget.scrollTop;
106
+ }, []);
103
107
  const isSearching = (0, external_react_namespaceObject.useMemo)(()=>search.length > 0, [
104
108
  search
105
109
  ]);
@@ -185,31 +189,45 @@ function Toolbox({ onClose, onBack, onItemSelect, onSearch, onItemHover, title,
185
189
  setSearchLoading(false);
186
190
  setIsSearchingInitialItems(true);
187
191
  const restoredIndex = previousState?.data.activeIndex ?? SEARCH_BAR_INDEX;
188
- navigateToIndex(restoredIndex);
192
+ const restoredScrollTop = previousState?.data.scrollTop ?? 0;
193
+ setActiveIndex(restoredIndex);
194
+ searchInputRef.current?.focus();
195
+ requestAnimationFrame(()=>{
196
+ const element = listRef.current?.element;
197
+ if (element) element.scrollTop = restoredScrollTop;
198
+ lastScrollTopRef.current = restoredScrollTop;
199
+ });
189
200
  onBack?.();
190
201
  }, [
191
202
  navigationStack,
192
203
  onBack,
193
204
  startTransition,
194
- navigateToIndex
205
+ listRef
195
206
  ]);
196
207
  const handleItemSelect = (0, external_react_namespaceObject.useCallback)(async (item, index)=>{
197
208
  if (!item.children) return void onItemSelect(item);
198
209
  setChildrenLoading(true);
199
210
  const nestedItems = 'function' == typeof item.children ? await item.children(item.id, item.name) : item.children;
200
211
  const savedIndex = isSearching ? SEARCH_BAR_INDEX : index ?? activeIndex;
212
+ const savedScrollTop = isSearching ? 0 : lastScrollTopRef.current;
201
213
  navigationStack.push({
202
214
  title: currentParentItem?.name || title,
203
215
  data: {
204
216
  items,
205
217
  parentItem: currentParentItem,
206
- activeIndex: savedIndex
218
+ activeIndex: savedIndex,
219
+ scrollTop: savedScrollTop
207
220
  }
208
221
  });
209
222
  setItems(nestedItems);
210
223
  setCurrentParentItem(item);
211
224
  clearSearch();
212
225
  setActiveIndex(SEARCH_BAR_INDEX);
226
+ requestAnimationFrame(()=>{
227
+ const element = listRef.current?.element;
228
+ if (element) element.scrollTop = 0;
229
+ lastScrollTopRef.current = 0;
230
+ });
213
231
  startTransition('forward');
214
232
  setChildrenLoading(false);
215
233
  }, [
@@ -221,7 +239,8 @@ function Toolbox({ onClose, onBack, onItemSelect, onSearch, onItemHover, title,
221
239
  isSearching,
222
240
  clearSearch,
223
241
  startTransition,
224
- onItemSelect
242
+ onItemSelect,
243
+ listRef
225
244
  ]);
226
245
  (0, external_react_namespaceObject.useEffect)(()=>()=>{
227
246
  if (transitionTimeoutRef.current) clearTimeout(transitionTimeoutRef.current);
@@ -242,7 +261,8 @@ function Toolbox({ onClose, onBack, onItemSelect, onSearch, onItemHover, title,
242
261
  data: {
243
262
  items: newInitialItems,
244
263
  parentItem: null,
245
- activeIndex: stackItem.data.activeIndex
264
+ activeIndex: stackItem.data.activeIndex,
265
+ scrollTop: stackItem.data.scrollTop
246
266
  }
247
267
  };
248
268
  const updatedParentItem = findItemById(newInitialItems, stackItem.data.parentItem.id);
@@ -253,7 +273,8 @@ function Toolbox({ onClose, onBack, onItemSelect, onSearch, onItemHover, title,
253
273
  data: {
254
274
  items: updatedItems,
255
275
  parentItem: updatedParentItem,
256
- activeIndex: stackItem.data.activeIndex
276
+ activeIndex: stackItem.data.activeIndex,
277
+ scrollTop: stackItem.data.scrollTop
257
278
  }
258
279
  };
259
280
  });
@@ -360,6 +381,13 @@ function Toolbox({ onClose, onBack, onItemSelect, onSearch, onItemHover, title,
360
381
  handleItemSelect,
361
382
  handleBackTransition
362
383
  ]);
384
+ const handleClose = (0, external_react_namespaceObject.useCallback)(()=>{
385
+ navigationStack.clear();
386
+ onClose();
387
+ }, [
388
+ navigationStack,
389
+ onClose
390
+ ]);
363
391
  (0, external_react_namespaceObject.useEffect)(()=>{
364
392
  const handleKeyDown = (e)=>{
365
393
  if ('Escape' === e.key) if (isSearching) {
@@ -367,10 +395,10 @@ function Toolbox({ onClose, onBack, onItemSelect, onSearch, onItemHover, title,
367
395
  startTransition('back');
368
396
  clearSearch();
369
397
  } else if (navigationStack.canGoBack) handleBackTransition();
370
- else onClose();
398
+ else handleClose();
371
399
  };
372
400
  const handleClickOutside = (e)=>{
373
- if (containerRef.current && !containerRef.current.contains(e.target)) onClose();
401
+ if (containerRef.current && !containerRef.current.contains(e.target)) handleClose();
374
402
  };
375
403
  document.addEventListener('keydown', handleKeyDown);
376
404
  document.addEventListener('mousedown', handleClickOutside);
@@ -381,7 +409,7 @@ function Toolbox({ onClose, onBack, onItemSelect, onSearch, onItemHover, title,
381
409
  }, [
382
410
  isSearching,
383
411
  navigationStack.canGoBack,
384
- onClose,
412
+ handleClose,
385
413
  clearSearch,
386
414
  startTransition,
387
415
  handleBackTransition
@@ -425,6 +453,7 @@ function Toolbox({ onClose, onBack, onItemSelect, onSearch, onItemHover, title,
425
453
  emptyStateMessage: isSearching ? 'No matching nodes found' : 'No nodes found',
426
454
  onItemClick: handleItemSelect,
427
455
  onItemHover: onItemHover,
456
+ onScroll: handleListScroll,
428
457
  enableSections: !isSearching
429
458
  })
430
459
  })
@@ -1 +1 @@
1
- {"version":3,"file":"Toolbox.d.ts","sourceRoot":"","sources":["../../../../src/canvas/components/Toolbox/Toolbox.tsx"],"names":[],"mappings":"AAYA,OAAO,EAAE,KAAK,QAAQ,EAAkD,MAAM,YAAY,CAAC;AAwC3F,MAAM,MAAM,oBAAoB,CAAC,CAAC,GAAG,GAAG,IAAI,CAC1C,KAAK,EAAE,MAAM,EACb,gBAAgB,EAAE,OAAO,EACzB,EAAE,YAAY,EAAE,QAAQ,EAAE,EAAE;IAAE,YAAY,CAAC,EAAE,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC;IAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;CAAE,KAC5E,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;AAE5B,MAAM,WAAW,YAAY,CAAC,CAAC;IAC7B,KAAK,EAAE,MAAM,CAAC;IACd,YAAY,EAAE,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC;IAC5B,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,YAAY,EAAE,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC,CAAC,KAAK,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;IAC1D,WAAW,CAAC,EAAE,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC;IAC1C,MAAM,CAAC,EAAE,MAAM,IAAI,CAAC;IACpB,QAAQ,CAAC,EAAE,oBAAoB,CAAC,CAAC,CAAC,CAAC;CACpC;AAgDD,wBAAgB,OAAO,CAAC,CAAC,EAAE,EACzB,OAAO,EACP,MAAM,EACN,YAAY,EACZ,QAAQ,EACR,WAAW,EACX,KAAK,EACL,YAAY,EACZ,OAAO,EACP,SAAiB,EACjB,UAAkB,GACnB,EAAE,YAAY,CAAC,CAAC,CAAC,2CA0cjB"}
1
+ {"version":3,"file":"Toolbox.d.ts","sourceRoot":"","sources":["../../../../src/canvas/components/Toolbox/Toolbox.tsx"],"names":[],"mappings":"AAYA,OAAO,EAAE,KAAK,QAAQ,EAAkD,MAAM,YAAY,CAAC;AAwC3F,MAAM,MAAM,oBAAoB,CAAC,CAAC,GAAG,GAAG,IAAI,CAC1C,KAAK,EAAE,MAAM,EACb,gBAAgB,EAAE,OAAO,EACzB,EAAE,YAAY,EAAE,QAAQ,EAAE,EAAE;IAAE,YAAY,CAAC,EAAE,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC;IAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;CAAE,KAC5E,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;AAE5B,MAAM,WAAW,YAAY,CAAC,CAAC;IAC7B,KAAK,EAAE,MAAM,CAAC;IACd,YAAY,EAAE,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC;IAC5B,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,YAAY,EAAE,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC,CAAC,KAAK,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;IAC1D,WAAW,CAAC,EAAE,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC;IAC1C,MAAM,CAAC,EAAE,MAAM,IAAI,CAAC;IACpB,QAAQ,CAAC,EAAE,oBAAoB,CAAC,CAAC,CAAC,CAAC;CACpC;AAgDD,wBAAgB,OAAO,CAAC,CAAC,EAAE,EACzB,OAAO,EACP,MAAM,EACN,YAAY,EACZ,QAAQ,EACR,WAAW,EACX,KAAK,EACL,YAAY,EACZ,OAAO,EACP,SAAiB,EACjB,UAAkB,GACnB,EAAE,YAAY,CAAC,CAAC,CAAC,2CAwfjB"}
@@ -72,6 +72,10 @@ function Toolbox({ onClose, onBack, onItemSelect, onSearch, onItemHover, title,
72
72
  const listViewRef = useRef(null);
73
73
  const searchInputRef = useRef(null);
74
74
  const clearButtonRef = useRef(null);
75
+ const lastScrollTopRef = useRef(0);
76
+ const handleListScroll = useCallback((e)=>{
77
+ lastScrollTopRef.current = e.currentTarget.scrollTop;
78
+ }, []);
75
79
  const isSearching = useMemo(()=>search.length > 0, [
76
80
  search
77
81
  ]);
@@ -157,31 +161,45 @@ function Toolbox({ onClose, onBack, onItemSelect, onSearch, onItemHover, title,
157
161
  setSearchLoading(false);
158
162
  setIsSearchingInitialItems(true);
159
163
  const restoredIndex = previousState?.data.activeIndex ?? SEARCH_BAR_INDEX;
160
- navigateToIndex(restoredIndex);
164
+ const restoredScrollTop = previousState?.data.scrollTop ?? 0;
165
+ setActiveIndex(restoredIndex);
166
+ searchInputRef.current?.focus();
167
+ requestAnimationFrame(()=>{
168
+ const element = listRef.current?.element;
169
+ if (element) element.scrollTop = restoredScrollTop;
170
+ lastScrollTopRef.current = restoredScrollTop;
171
+ });
161
172
  onBack?.();
162
173
  }, [
163
174
  navigationStack,
164
175
  onBack,
165
176
  startTransition,
166
- navigateToIndex
177
+ listRef
167
178
  ]);
168
179
  const handleItemSelect = useCallback(async (item, index)=>{
169
180
  if (!item.children) return void onItemSelect(item);
170
181
  setChildrenLoading(true);
171
182
  const nestedItems = 'function' == typeof item.children ? await item.children(item.id, item.name) : item.children;
172
183
  const savedIndex = isSearching ? SEARCH_BAR_INDEX : index ?? activeIndex;
184
+ const savedScrollTop = isSearching ? 0 : lastScrollTopRef.current;
173
185
  navigationStack.push({
174
186
  title: currentParentItem?.name || title,
175
187
  data: {
176
188
  items,
177
189
  parentItem: currentParentItem,
178
- activeIndex: savedIndex
190
+ activeIndex: savedIndex,
191
+ scrollTop: savedScrollTop
179
192
  }
180
193
  });
181
194
  setItems(nestedItems);
182
195
  setCurrentParentItem(item);
183
196
  clearSearch();
184
197
  setActiveIndex(SEARCH_BAR_INDEX);
198
+ requestAnimationFrame(()=>{
199
+ const element = listRef.current?.element;
200
+ if (element) element.scrollTop = 0;
201
+ lastScrollTopRef.current = 0;
202
+ });
185
203
  startTransition('forward');
186
204
  setChildrenLoading(false);
187
205
  }, [
@@ -193,7 +211,8 @@ function Toolbox({ onClose, onBack, onItemSelect, onSearch, onItemHover, title,
193
211
  isSearching,
194
212
  clearSearch,
195
213
  startTransition,
196
- onItemSelect
214
+ onItemSelect,
215
+ listRef
197
216
  ]);
198
217
  useEffect(()=>()=>{
199
218
  if (transitionTimeoutRef.current) clearTimeout(transitionTimeoutRef.current);
@@ -214,7 +233,8 @@ function Toolbox({ onClose, onBack, onItemSelect, onSearch, onItemHover, title,
214
233
  data: {
215
234
  items: newInitialItems,
216
235
  parentItem: null,
217
- activeIndex: stackItem.data.activeIndex
236
+ activeIndex: stackItem.data.activeIndex,
237
+ scrollTop: stackItem.data.scrollTop
218
238
  }
219
239
  };
220
240
  const updatedParentItem = findItemById(newInitialItems, stackItem.data.parentItem.id);
@@ -225,7 +245,8 @@ function Toolbox({ onClose, onBack, onItemSelect, onSearch, onItemHover, title,
225
245
  data: {
226
246
  items: updatedItems,
227
247
  parentItem: updatedParentItem,
228
- activeIndex: stackItem.data.activeIndex
248
+ activeIndex: stackItem.data.activeIndex,
249
+ scrollTop: stackItem.data.scrollTop
229
250
  }
230
251
  };
231
252
  });
@@ -332,6 +353,13 @@ function Toolbox({ onClose, onBack, onItemSelect, onSearch, onItemHover, title,
332
353
  handleItemSelect,
333
354
  handleBackTransition
334
355
  ]);
356
+ const handleClose = useCallback(()=>{
357
+ navigationStack.clear();
358
+ onClose();
359
+ }, [
360
+ navigationStack,
361
+ onClose
362
+ ]);
335
363
  useEffect(()=>{
336
364
  const handleKeyDown = (e)=>{
337
365
  if ('Escape' === e.key) if (isSearching) {
@@ -339,10 +367,10 @@ function Toolbox({ onClose, onBack, onItemSelect, onSearch, onItemHover, title,
339
367
  startTransition('back');
340
368
  clearSearch();
341
369
  } else if (navigationStack.canGoBack) handleBackTransition();
342
- else onClose();
370
+ else handleClose();
343
371
  };
344
372
  const handleClickOutside = (e)=>{
345
- if (containerRef.current && !containerRef.current.contains(e.target)) onClose();
373
+ if (containerRef.current && !containerRef.current.contains(e.target)) handleClose();
346
374
  };
347
375
  document.addEventListener('keydown', handleKeyDown);
348
376
  document.addEventListener('mousedown', handleClickOutside);
@@ -353,7 +381,7 @@ function Toolbox({ onClose, onBack, onItemSelect, onSearch, onItemHover, title,
353
381
  }, [
354
382
  isSearching,
355
383
  navigationStack.canGoBack,
356
- onClose,
384
+ handleClose,
357
385
  clearSearch,
358
386
  startTransition,
359
387
  handleBackTransition
@@ -397,6 +425,7 @@ function Toolbox({ onClose, onBack, onItemSelect, onSearch, onItemHover, title,
397
425
  emptyStateMessage: isSearching ? 'No matching nodes found' : 'No nodes found',
398
426
  onItemClick: handleItemSelect,
399
427
  onItemHover: onItemHover,
428
+ onScroll: handleListScroll,
400
429
  enableSections: !isSearching
401
430
  })
402
431
  })
@@ -36,6 +36,9 @@ var __webpack_modules__ = {
36
36
  "./HierarchicalCanvas" (module) {
37
37
  module.exports = require("./HierarchicalCanvas/index.cjs");
38
38
  },
39
+ "./LoopNode?4ffc" (module) {
40
+ module.exports = require("./LoopNode/index.cjs");
41
+ },
39
42
  "./MiniCanvasNavigator?564d" (module) {
40
43
  module.exports = require("./MiniCanvasNavigator/index.cjs");
41
44
  },
@@ -158,45 +161,49 @@ var __webpack_exports__ = {};
158
161
  var __rspack_reexport = {};
159
162
  for(const __rspack_import_key in _HierarchicalCanvas__rspack_import_11)if ("default" !== __rspack_import_key) __rspack_reexport[__rspack_import_key] = ()=>_HierarchicalCanvas__rspack_import_11[__rspack_import_key];
160
163
  __webpack_require__.d(__webpack_exports__, __rspack_reexport);
161
- var _MiniCanvasNavigator__rspack_import_12 = __webpack_require__("./MiniCanvasNavigator?564d");
164
+ var _LoopNode__rspack_import_12 = __webpack_require__("./LoopNode?4ffc");
165
+ var __rspack_reexport = {};
166
+ for(const __rspack_import_key in _LoopNode__rspack_import_12)if ("default" !== __rspack_import_key) __rspack_reexport[__rspack_import_key] = ()=>_LoopNode__rspack_import_12[__rspack_import_key];
167
+ __webpack_require__.d(__webpack_exports__, __rspack_reexport);
168
+ var _MiniCanvasNavigator__rspack_import_13 = __webpack_require__("./MiniCanvasNavigator?564d");
162
169
  var __rspack_reexport = {};
163
- for(const __rspack_import_key in _MiniCanvasNavigator__rspack_import_12)if ("default" !== __rspack_import_key) __rspack_reexport[__rspack_import_key] = ()=>_MiniCanvasNavigator__rspack_import_12[__rspack_import_key];
170
+ for(const __rspack_import_key in _MiniCanvasNavigator__rspack_import_13)if ("default" !== __rspack_import_key) __rspack_reexport[__rspack_import_key] = ()=>_MiniCanvasNavigator__rspack_import_13[__rspack_import_key];
164
171
  __webpack_require__.d(__webpack_exports__, __rspack_reexport);
165
- var _NodeContextMenu__rspack_import_13 = __webpack_require__("./NodeContextMenu");
172
+ var _NodeContextMenu__rspack_import_14 = __webpack_require__("./NodeContextMenu");
166
173
  var __rspack_reexport = {};
167
- for(const __rspack_import_key in _NodeContextMenu__rspack_import_13)if ("default" !== __rspack_import_key) __rspack_reexport[__rspack_import_key] = ()=>_NodeContextMenu__rspack_import_13[__rspack_import_key];
174
+ for(const __rspack_import_key in _NodeContextMenu__rspack_import_14)if ("default" !== __rspack_import_key) __rspack_reexport[__rspack_import_key] = ()=>_NodeContextMenu__rspack_import_14[__rspack_import_key];
168
175
  __webpack_require__.d(__webpack_exports__, __rspack_reexport);
169
- var _NodeInspector__rspack_import_14 = __webpack_require__("./NodeInspector");
176
+ var _NodeInspector__rspack_import_15 = __webpack_require__("./NodeInspector");
170
177
  var __rspack_reexport = {};
171
- for(const __rspack_import_key in _NodeInspector__rspack_import_14)if ("default" !== __rspack_import_key) __rspack_reexport[__rspack_import_key] = ()=>_NodeInspector__rspack_import_14[__rspack_import_key];
178
+ for(const __rspack_import_key in _NodeInspector__rspack_import_15)if ("default" !== __rspack_import_key) __rspack_reexport[__rspack_import_key] = ()=>_NodeInspector__rspack_import_15[__rspack_import_key];
172
179
  __webpack_require__.d(__webpack_exports__, __rspack_reexport);
173
- var _NodePropertiesPanel__rspack_import_15 = __webpack_require__("./NodePropertiesPanel?a3e8");
180
+ var _NodePropertiesPanel__rspack_import_16 = __webpack_require__("./NodePropertiesPanel?a3e8");
174
181
  var __rspack_reexport = {};
175
- for(const __rspack_import_key in _NodePropertiesPanel__rspack_import_15)if ("default" !== __rspack_import_key) __rspack_reexport[__rspack_import_key] = ()=>_NodePropertiesPanel__rspack_import_15[__rspack_import_key];
182
+ for(const __rspack_import_key in _NodePropertiesPanel__rspack_import_16)if ("default" !== __rspack_import_key) __rspack_reexport[__rspack_import_key] = ()=>_NodePropertiesPanel__rspack_import_16[__rspack_import_key];
176
183
  __webpack_require__.d(__webpack_exports__, __rspack_reexport);
177
- var _StageNode__rspack_import_16 = __webpack_require__("./StageNode");
184
+ var _StageNode__rspack_import_17 = __webpack_require__("./StageNode");
178
185
  var __rspack_reexport = {};
179
- for(const __rspack_import_key in _StageNode__rspack_import_16)if ("default" !== __rspack_import_key) __rspack_reexport[__rspack_import_key] = ()=>_StageNode__rspack_import_16[__rspack_import_key];
186
+ for(const __rspack_import_key in _StageNode__rspack_import_17)if ("default" !== __rspack_import_key) __rspack_reexport[__rspack_import_key] = ()=>_StageNode__rspack_import_17[__rspack_import_key];
180
187
  __webpack_require__.d(__webpack_exports__, __rspack_reexport);
181
- var _StickyNoteNode__rspack_import_17 = __webpack_require__("./StickyNoteNode?d2a3");
188
+ var _StickyNoteNode__rspack_import_18 = __webpack_require__("./StickyNoteNode?d2a3");
182
189
  var __rspack_reexport = {};
183
- for(const __rspack_import_key in _StickyNoteNode__rspack_import_17)if ("default" !== __rspack_import_key) __rspack_reexport[__rspack_import_key] = ()=>_StickyNoteNode__rspack_import_17[__rspack_import_key];
190
+ for(const __rspack_import_key in _StickyNoteNode__rspack_import_18)if ("default" !== __rspack_import_key) __rspack_reexport[__rspack_import_key] = ()=>_StickyNoteNode__rspack_import_18[__rspack_import_key];
184
191
  __webpack_require__.d(__webpack_exports__, __rspack_reexport);
185
- var _TaskIcon__rspack_import_18 = __webpack_require__("./TaskIcon");
192
+ var _TaskIcon__rspack_import_19 = __webpack_require__("./TaskIcon");
186
193
  var __rspack_reexport = {};
187
- for(const __rspack_import_key in _TaskIcon__rspack_import_18)if ("default" !== __rspack_import_key) __rspack_reexport[__rspack_import_key] = ()=>_TaskIcon__rspack_import_18[__rspack_import_key];
194
+ for(const __rspack_import_key in _TaskIcon__rspack_import_19)if ("default" !== __rspack_import_key) __rspack_reexport[__rspack_import_key] = ()=>_TaskIcon__rspack_import_19[__rspack_import_key];
188
195
  __webpack_require__.d(__webpack_exports__, __rspack_reexport);
189
- var _Toolbar__rspack_import_19 = __webpack_require__("./Toolbar");
196
+ var _Toolbar__rspack_import_20 = __webpack_require__("./Toolbar");
190
197
  var __rspack_reexport = {};
191
- for(const __rspack_import_key in _Toolbar__rspack_import_19)if ("default" !== __rspack_import_key) __rspack_reexport[__rspack_import_key] = ()=>_Toolbar__rspack_import_19[__rspack_import_key];
198
+ for(const __rspack_import_key in _Toolbar__rspack_import_20)if ("default" !== __rspack_import_key) __rspack_reexport[__rspack_import_key] = ()=>_Toolbar__rspack_import_20[__rspack_import_key];
192
199
  __webpack_require__.d(__webpack_exports__, __rspack_reexport);
193
- var _Toolbox__rspack_import_20 = __webpack_require__("./Toolbox?2740");
200
+ var _Toolbox__rspack_import_21 = __webpack_require__("./Toolbox?2740");
194
201
  var __rspack_reexport = {};
195
- for(const __rspack_import_key in _Toolbox__rspack_import_20)if ("default" !== __rspack_import_key) __rspack_reexport[__rspack_import_key] = ()=>_Toolbox__rspack_import_20[__rspack_import_key];
202
+ for(const __rspack_import_key in _Toolbox__rspack_import_21)if ("default" !== __rspack_import_key) __rspack_reexport[__rspack_import_key] = ()=>_Toolbox__rspack_import_21[__rspack_import_key];
196
203
  __webpack_require__.d(__webpack_exports__, __rspack_reexport);
197
- var _TriggerNode__rspack_import_21 = __webpack_require__("./TriggerNode");
204
+ var _TriggerNode__rspack_import_22 = __webpack_require__("./TriggerNode");
198
205
  var __rspack_reexport = {};
199
- for(const __rspack_import_key in _TriggerNode__rspack_import_21)if ("default" !== __rspack_import_key) __rspack_reexport[__rspack_import_key] = ()=>_TriggerNode__rspack_import_21[__rspack_import_key];
206
+ for(const __rspack_import_key in _TriggerNode__rspack_import_22)if ("default" !== __rspack_import_key) __rspack_reexport[__rspack_import_key] = ()=>_TriggerNode__rspack_import_22[__rspack_import_key];
200
207
  __webpack_require__.d(__webpack_exports__, __rspack_reexport);
201
208
  })();
202
209
  for(var __rspack_i in __webpack_exports__)exports[__rspack_i] = __webpack_exports__[__rspack_i];
@@ -10,6 +10,7 @@ export * from './ExecutionStatusIcon';
10
10
  export * from './FloatingCanvasPanel';
11
11
  export * from './GroupNode';
12
12
  export * from './HierarchicalCanvas';
13
+ export * from './LoopNode';
13
14
  export * from './MiniCanvasNavigator';
14
15
  export * from './NodeContextMenu';
15
16
  export * from './NodeInspector';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/canvas/components/index.ts"],"names":[],"mappings":"AAAA,cAAc,gBAAgB,CAAC;AAC/B,cAAc,eAAe,CAAC;AAC9B,cAAc,cAAc,CAAC;AAC7B,cAAc,YAAY,CAAC;AAC3B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,0BAA0B,CAAC;AACzC,cAAc,cAAc,CAAC;AAC7B,cAAc,SAAS,CAAC;AACxB,cAAc,uBAAuB,CAAC;AACtC,cAAc,uBAAuB,CAAC;AACtC,cAAc,aAAa,CAAC;AAC5B,cAAc,sBAAsB,CAAC;AACrC,cAAc,uBAAuB,CAAC;AACtC,cAAc,mBAAmB,CAAC;AAClC,cAAc,iBAAiB,CAAC;AAChC,cAAc,uBAAuB,CAAC;AACtC,cAAc,aAAa,CAAC;AAC5B,cAAc,kBAAkB,CAAC;AACjC,cAAc,YAAY,CAAC;AAC3B,cAAc,WAAW,CAAC;AAC1B,cAAc,WAAW,CAAC;AAC1B,cAAc,eAAe,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/canvas/components/index.ts"],"names":[],"mappings":"AAAA,cAAc,gBAAgB,CAAC;AAC/B,cAAc,eAAe,CAAC;AAC9B,cAAc,cAAc,CAAC;AAC7B,cAAc,YAAY,CAAC;AAC3B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,0BAA0B,CAAC;AACzC,cAAc,cAAc,CAAC;AAC7B,cAAc,SAAS,CAAC;AACxB,cAAc,uBAAuB,CAAC;AACtC,cAAc,uBAAuB,CAAC;AACtC,cAAc,aAAa,CAAC;AAC5B,cAAc,sBAAsB,CAAC;AACrC,cAAc,YAAY,CAAC;AAC3B,cAAc,uBAAuB,CAAC;AACtC,cAAc,mBAAmB,CAAC;AAClC,cAAc,iBAAiB,CAAC;AAChC,cAAc,uBAAuB,CAAC;AACtC,cAAc,aAAa,CAAC;AAC5B,cAAc,kBAAkB,CAAC;AACjC,cAAc,YAAY,CAAC;AAC3B,cAAc,WAAW,CAAC;AAC1B,cAAc,WAAW,CAAC;AAC1B,cAAc,eAAe,CAAC"}
@@ -10,6 +10,7 @@ export * from "./ExecutionStatusIcon/index.js";
10
10
  export * from "./FloatingCanvasPanel/index.js";
11
11
  export * from "./GroupNode/index.js";
12
12
  export * from "./HierarchicalCanvas/index.js";
13
+ export * from "./LoopNode/index.js";
13
14
  export * from "./MiniCanvasNavigator/index.js";
14
15
  export * from "./NodeContextMenu/index.js";
15
16
  export * from "./NodeInspector.js";
@@ -32,12 +32,24 @@ const external_CategoryTreeAdapter_cjs_namespaceObject = require("./CategoryTree
32
32
  class NodeTypeRegistry {
33
33
  categoryById = new Map();
34
34
  nodeByType = new Map();
35
+ nodeByTypeVersion = new Map();
35
36
  nodeHandles = new Map();
37
+ nodeHandlesByTypeVersion = new Map();
36
38
  categoriesByParent = new Map();
37
39
  nodesByCategory = new Map();
38
40
  categoryAncestors = new Map();
39
41
  categoryDescendants = new Map();
40
42
  categoryTree = null;
43
+ getNodeHandles(manifest) {
44
+ return manifest.handleConfiguration.flatMap((hc)=>hc.handles).reduce((acc, handle)=>{
45
+ if (!acc[handle.type]) acc[handle.type] = [];
46
+ acc[handle.type]?.push(handle);
47
+ return acc;
48
+ }, {});
49
+ }
50
+ getTypeVersionKey(nodeType, version) {
51
+ return `${nodeType}:${version}`;
52
+ }
41
53
  registerNodeManifests(nodes) {
42
54
  const categoryMap = new Map();
43
55
  for (const node of nodes){
@@ -59,18 +71,20 @@ class NodeTypeRegistry {
59
71
  c.id,
60
72
  c
61
73
  ]));
62
- this.nodeByType = new Map(nodeManifests.map((n)=>[
63
- n.nodeType,
64
- n
65
- ]));
66
- this.nodeHandles = new Map(nodeManifests.map((n)=>[
67
- n.nodeType,
68
- n.handleConfiguration.flatMap((hc)=>hc.handles).reduce((acc, handle)=>{
69
- if (!acc[handle.type]) acc[handle.type] = [];
70
- acc[handle.type]?.push(handle);
71
- return acc;
72
- }, {})
73
- ]));
74
+ this.nodeByType = new Map();
75
+ this.nodeByTypeVersion = new Map();
76
+ this.nodeHandles = new Map();
77
+ this.nodeHandlesByTypeVersion = new Map();
78
+ for (const nodeManifest of nodeManifests){
79
+ const manifestsForType = this.nodeByTypeVersion.get(nodeManifest.nodeType) ?? new Map();
80
+ manifestsForType.set(nodeManifest.version, nodeManifest);
81
+ this.nodeByTypeVersion.set(nodeManifest.nodeType, manifestsForType);
82
+ const nodeHandles = this.getNodeHandles(nodeManifest);
83
+ this.nodeByType.set(nodeManifest.nodeType, nodeManifest);
84
+ this.nodeHandles.set(nodeManifest.nodeType, nodeHandles);
85
+ this.nodeHandlesByTypeVersion.set(this.getTypeVersionKey(nodeManifest.nodeType, nodeManifest.version), nodeHandles);
86
+ }
87
+ const defaultNodeManifests = Array.from(this.nodeByType.values());
74
88
  this.categoriesByParent = new Map();
75
89
  for (const cat of categoryManifests){
76
90
  const siblings = this.categoriesByParent.get(cat.parentId) ?? [];
@@ -104,16 +118,17 @@ class NodeTypeRegistry {
104
118
  this.categoryDescendants.set(cat.id, descendants);
105
119
  }
106
120
  this.nodesByCategory = new Map();
107
- for (const node of nodeManifests){
121
+ for (const node of defaultNodeManifests){
108
122
  const categoryKey = node.category ?? void 0;
109
123
  const nodes = this.nodesByCategory.get(categoryKey) ?? [];
110
124
  nodes.push(node);
111
125
  this.nodesByCategory.set(categoryKey, nodes);
112
126
  }
113
- this.categoryTree = new external_CategoryTree_cjs_namespaceObject.CategoryTree(categoryManifests, nodeManifests);
127
+ this.categoryTree = new external_CategoryTree_cjs_namespaceObject.CategoryTree(categoryManifests, defaultNodeManifests);
114
128
  }
115
- getManifest(nodeType) {
116
- return this.nodeByType.get(nodeType);
129
+ getManifest(nodeType, version) {
130
+ if (!version) return this.nodeByType.get(nodeType);
131
+ return this.nodeByTypeVersion.get(nodeType)?.get(version);
117
132
  }
118
133
  getAllManifests() {
119
134
  return Array.from(this.nodeByType.values());
@@ -124,18 +139,19 @@ class NodeTypeRegistry {
124
139
  getAllNodeTypes() {
125
140
  return Array.from(this.nodeByType.keys());
126
141
  }
127
- getHandlesByNodeType(nodeType) {
128
- return this.nodeHandles.get(nodeType) ?? {};
142
+ getHandlesByNodeType(nodeType, version) {
143
+ if (!version) return this.nodeHandles.get(nodeType) ?? {};
144
+ return this.nodeHandlesByTypeVersion.get(this.getTypeVersionKey(nodeType, version)) ?? {};
129
145
  }
130
- getDefaultHandle(nodeType, handleType) {
131
- const handles = this.nodeHandles.get(nodeType)?.[handleType];
146
+ getDefaultHandle(nodeType, handleType, version) {
147
+ const handles = this.getHandlesByNodeType(nodeType, version)[handleType];
132
148
  return handles?.find((h)=>h.isDefaultForType) ?? handles?.[0];
133
149
  }
134
- createDefaultData(nodeType, label) {
135
- const manifest = this.getManifest(nodeType);
150
+ createDefaultData(nodeType, label, version) {
151
+ const manifest = this.getManifest(nodeType, version);
136
152
  if (!manifest) return {
137
153
  nodeType,
138
- version: '1.0.0',
154
+ version: version ?? '1.0.0',
139
155
  display: {
140
156
  label: label || nodeType
141
157
  }
@@ -162,7 +178,9 @@ class NodeTypeRegistry {
162
178
  clear() {
163
179
  this.nodesByCategory.clear();
164
180
  this.nodeHandles.clear();
181
+ this.nodeHandlesByTypeVersion.clear();
165
182
  this.nodeByType.clear();
183
+ this.nodeByTypeVersion.clear();
166
184
  this.categoryById.clear();
167
185
  this.categoryAncestors.clear();
168
186
  this.categoryDescendants.clear();
@@ -9,21 +9,25 @@ interface NodeHandles {
9
9
  export declare class NodeTypeRegistry {
10
10
  private categoryById;
11
11
  private nodeByType;
12
+ private nodeByTypeVersion;
12
13
  private nodeHandles;
14
+ private nodeHandlesByTypeVersion;
13
15
  private categoriesByParent;
14
16
  private nodesByCategory;
15
17
  private categoryAncestors;
16
18
  private categoryDescendants;
17
19
  private categoryTree;
20
+ private getNodeHandles;
21
+ private getTypeVersionKey;
18
22
  registerNodeManifests(nodes: NodeManifest[]): void;
19
23
  registerManifest(nodeManifests: NodeManifest[], categoryManifests: CategoryManifest[]): void;
20
- getManifest(nodeType: string): NodeManifest | undefined;
24
+ getManifest(nodeType: string, version?: string): NodeManifest | undefined;
21
25
  getAllManifests(): NodeManifest[];
22
26
  getAllCategories(): string[];
23
27
  getAllNodeTypes(): string[];
24
- getHandlesByNodeType(nodeType: string): NodeHandles;
25
- getDefaultHandle(nodeType: string, handleType: 'source' | 'target'): HandleManifest | undefined;
26
- createDefaultData(nodeType: string, label?: string): BaseNodeData;
28
+ getHandlesByNodeType(nodeType: string, version?: string): NodeHandles;
29
+ getDefaultHandle(nodeType: string, handleType: 'source' | 'target', version?: string): HandleManifest | undefined;
30
+ createDefaultData(nodeType: string, label?: string, version?: string): BaseNodeData;
27
31
  getCategoryTree(): CategoryTree | null;
28
32
  clear(): void;
29
33
  isValidCategoryForConnection(categoryId: string, previewNodeConnectionInfo: PreviewNodeConnectionInfo[] | null | undefined): boolean;
@@ -1 +1 @@
1
- {"version":3,"file":"NodeTypeRegistry.d.ts","sourceRoot":"","sources":["../../../src/canvas/core/NodeTypeRegistry.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAC5D,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,UAAU,CAAC;AAE1D,OAAO,KAAK,EAAE,gBAAgB,EAAE,cAAc,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AAMhG,OAAO,EAAE,YAAY,EAA4B,MAAM,gBAAgB,CAAC;AAGxE,UAAU,WAAW;IACnB,MAAM,CAAC,EAAE,cAAc,EAAE,CAAC;IAC1B,MAAM,CAAC,EAAE,cAAc,EAAE,CAAC;CAC3B;AAMD,qBAAa,gBAAgB;IAC3B,OAAO,CAAC,YAAY,CAAuC;IAC3D,OAAO,CAAC,UAAU,CAAmC;IACrD,OAAO,CAAC,WAAW,CAAkC;IACrD,OAAO,CAAC,kBAAkB,CAAqD;IAC/E,OAAO,CAAC,eAAe,CAAiD;IACxE,OAAO,CAAC,iBAAiB,CAA+B;IACxD,OAAO,CAAC,mBAAmB,CAA+B;IAC1D,OAAO,CAAC,YAAY,CAA6B;IAUjD,qBAAqB,CAAC,KAAK,EAAE,YAAY,EAAE;IA8B3C,gBAAgB,CAAC,aAAa,EAAE,YAAY,EAAE,EAAE,iBAAiB,EAAE,gBAAgB,EAAE;IA0ErF,WAAW,CAAC,QAAQ,EAAE,MAAM,GAAG,YAAY,GAAG,SAAS;IAQvD,eAAe,IAAI,YAAY,EAAE;IAQjC,gBAAgB,IAAI,MAAM,EAAE;IAQ5B,eAAe,IAAI,MAAM,EAAE;IAO3B,oBAAoB,CAAC,QAAQ,EAAE,MAAM,GAAG,WAAW;IAOnD,gBAAgB,CAAC,QAAQ,EAAE,MAAM,EAAE,UAAU,EAAE,QAAQ,GAAG,QAAQ,GAAG,cAAc,GAAG,SAAS;IAW/F,iBAAiB,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,YAAY;IAqCjE,eAAe,IAAI,YAAY,GAAG,IAAI;IAOtC,KAAK,IAAI,IAAI;IAwBb,4BAA4B,CAC1B,UAAU,EAAE,MAAM,EAClB,yBAAyB,EAAE,yBAAyB,EAAE,GAAG,IAAI,GAAG,SAAS,GACxE,OAAO;IA6CV,wBAAwB,CACtB,QAAQ,EAAE,MAAM,EAChB,yBAAyB,EAAE,yBAAyB,EAAE,GAAG,IAAI,GAAG,SAAS;IAgE3E,OAAO,CAAC,yBAAyB;IAqCjC,cAAc,CAAC,OAAO,EAAE;QACtB,WAAW,CAAC,EAAE,yBAAyB,EAAE,GAAG,IAAI,CAAC;QACjD,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,UAAU,CAAC,EAAE,OAAO,CAAC;QACrB,iBAAiB,CAAC,EAAE,OAAO,CAAC;KAC7B,GAAG,QAAQ,EAAE;CAyCf"}
1
+ {"version":3,"file":"NodeTypeRegistry.d.ts","sourceRoot":"","sources":["../../../src/canvas/core/NodeTypeRegistry.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAC5D,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,UAAU,CAAC;AAE1D,OAAO,KAAK,EAAE,gBAAgB,EAAE,cAAc,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AAMhG,OAAO,EAAE,YAAY,EAA4B,MAAM,gBAAgB,CAAC;AAGxE,UAAU,WAAW;IACnB,MAAM,CAAC,EAAE,cAAc,EAAE,CAAC;IAC1B,MAAM,CAAC,EAAE,cAAc,EAAE,CAAC;CAC3B;AAMD,qBAAa,gBAAgB;IAC3B,OAAO,CAAC,YAAY,CAAuC;IAC3D,OAAO,CAAC,UAAU,CAAmC;IACrD,OAAO,CAAC,iBAAiB,CAAgD;IACzE,OAAO,CAAC,WAAW,CAAkC;IACrD,OAAO,CAAC,wBAAwB,CAAkC;IAClE,OAAO,CAAC,kBAAkB,CAAqD;IAC/E,OAAO,CAAC,eAAe,CAAiD;IACxE,OAAO,CAAC,iBAAiB,CAA+B;IACxD,OAAO,CAAC,mBAAmB,CAA+B;IAC1D,OAAO,CAAC,YAAY,CAA6B;IAEjD,OAAO,CAAC,cAAc;IAYtB,OAAO,CAAC,iBAAiB;IAYzB,qBAAqB,CAAC,KAAK,EAAE,YAAY,EAAE;IA8B3C,gBAAgB,CAAC,aAAa,EAAE,YAAY,EAAE,EAAE,iBAAiB,EAAE,gBAAgB,EAAE;IA+ErF,WAAW,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,YAAY,GAAG,SAAS;IAYzE,eAAe,IAAI,YAAY,EAAE;IAQjC,gBAAgB,IAAI,MAAM,EAAE;IAQ5B,eAAe,IAAI,MAAM,EAAE;IAO3B,oBAAoB,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,WAAW;IAWrE,gBAAgB,CACd,QAAQ,EAAE,MAAM,EAChB,UAAU,EAAE,QAAQ,GAAG,QAAQ,EAC/B,OAAO,CAAC,EAAE,MAAM,GACf,cAAc,GAAG,SAAS;IAW7B,iBAAiB,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,YAAY;IAqCnF,eAAe,IAAI,YAAY,GAAG,IAAI;IAOtC,KAAK,IAAI,IAAI;IA0Bb,4BAA4B,CAC1B,UAAU,EAAE,MAAM,EAClB,yBAAyB,EAAE,yBAAyB,EAAE,GAAG,IAAI,GAAG,SAAS,GACxE,OAAO;IA6CV,wBAAwB,CACtB,QAAQ,EAAE,MAAM,EAChB,yBAAyB,EAAE,yBAAyB,EAAE,GAAG,IAAI,GAAG,SAAS;IAgE3E,OAAO,CAAC,yBAAyB;IAqCjC,cAAc,CAAC,OAAO,EAAE;QACtB,WAAW,CAAC,EAAE,yBAAyB,EAAE,GAAG,IAAI,CAAC;QACjD,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,UAAU,CAAC,EAAE,OAAO,CAAC;QACrB,iBAAiB,CAAC,EAAE,OAAO,CAAC;KAC7B,GAAG,QAAQ,EAAE;CAyCf"}