@foresthubai/workflow-builder 0.4.3 → 0.4.5

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 (414) hide show
  1. package/LICENSE +661 -661
  2. package/NOTICE +16 -16
  3. package/README.md +110 -110
  4. package/dist/BuilderLayout.d.ts.map +1 -1
  5. package/dist/BuilderLayout.js +52 -61
  6. package/dist/BuilderLayout.js.map +1 -1
  7. package/dist/Canvas.d.ts.map +1 -1
  8. package/dist/Canvas.js +10 -3
  9. package/dist/Canvas.js.map +1 -1
  10. package/dist/CanvasEditor.d.ts.map +1 -1
  11. package/dist/CanvasEditor.js.map +1 -1
  12. package/dist/CanvasTabsToolbar.d.ts.map +1 -1
  13. package/dist/CanvasTabsToolbar.js +3 -0
  14. package/dist/CanvasTabsToolbar.js.map +1 -1
  15. package/dist/RightConfigPanel.d.ts.map +1 -1
  16. package/dist/RightConfigPanel.js +3 -0
  17. package/dist/RightConfigPanel.js.map +1 -1
  18. package/dist/WorkflowBuilder.d.ts +7 -13
  19. package/dist/WorkflowBuilder.d.ts.map +1 -1
  20. package/dist/WorkflowBuilder.js +25 -13
  21. package/dist/WorkflowBuilder.js.map +1 -1
  22. package/dist/cn.d.ts.map +1 -1
  23. package/dist/cn.js +3 -0
  24. package/dist/cn.js.map +1 -1
  25. package/dist/components/ui/add-button.d.ts.map +1 -1
  26. package/dist/components/ui/add-button.js +3 -0
  27. package/dist/components/ui/add-button.js.map +1 -1
  28. package/dist/components/ui/alert-dialog.d.ts.map +1 -1
  29. package/dist/components/ui/alert-dialog.js +3 -0
  30. package/dist/components/ui/alert-dialog.js.map +1 -1
  31. package/dist/components/ui/alert.d.ts.map +1 -1
  32. package/dist/components/ui/alert.js +3 -0
  33. package/dist/components/ui/alert.js.map +1 -1
  34. package/dist/components/ui/badge.d.ts.map +1 -1
  35. package/dist/components/ui/badge.js.map +1 -1
  36. package/dist/components/ui/button.d.ts.map +1 -1
  37. package/dist/components/ui/button.js +3 -0
  38. package/dist/components/ui/button.js.map +1 -1
  39. package/dist/components/ui/card.d.ts.map +1 -1
  40. package/dist/components/ui/card.js +3 -0
  41. package/dist/components/ui/card.js.map +1 -1
  42. package/dist/components/ui/checkbox.d.ts.map +1 -1
  43. package/dist/components/ui/checkbox.js +3 -0
  44. package/dist/components/ui/checkbox.js.map +1 -1
  45. package/dist/components/ui/collapsible.d.ts.map +1 -1
  46. package/dist/components/ui/collapsible.js +3 -0
  47. package/dist/components/ui/collapsible.js.map +1 -1
  48. package/dist/components/ui/command.d.ts +2 -2
  49. package/dist/components/ui/command.d.ts.map +1 -1
  50. package/dist/components/ui/command.js +3 -0
  51. package/dist/components/ui/command.js.map +1 -1
  52. package/dist/components/ui/delete-button.d.ts.map +1 -1
  53. package/dist/components/ui/delete-button.js +3 -0
  54. package/dist/components/ui/delete-button.js.map +1 -1
  55. package/dist/components/ui/dialog.d.ts.map +1 -1
  56. package/dist/components/ui/dialog.js +3 -0
  57. package/dist/components/ui/dialog.js.map +1 -1
  58. package/dist/components/ui/dropdown-menu.d.ts.map +1 -1
  59. package/dist/components/ui/dropdown-menu.js +3 -0
  60. package/dist/components/ui/dropdown-menu.js.map +1 -1
  61. package/dist/components/ui/input.d.ts +1 -1
  62. package/dist/components/ui/input.d.ts.map +1 -1
  63. package/dist/components/ui/input.js +3 -0
  64. package/dist/components/ui/input.js.map +1 -1
  65. package/dist/components/ui/label.d.ts.map +1 -1
  66. package/dist/components/ui/label.js +3 -0
  67. package/dist/components/ui/label.js.map +1 -1
  68. package/dist/components/ui/readonly-banner.d.ts.map +1 -1
  69. package/dist/components/ui/readonly-banner.js +3 -0
  70. package/dist/components/ui/readonly-banner.js.map +1 -1
  71. package/dist/components/ui/resizable.d.ts +1 -1
  72. package/dist/components/ui/resizable.d.ts.map +1 -1
  73. package/dist/components/ui/resizable.js +3 -0
  74. package/dist/components/ui/resizable.js.map +1 -1
  75. package/dist/components/ui/scroll-area.d.ts.map +1 -1
  76. package/dist/components/ui/scroll-area.js +3 -0
  77. package/dist/components/ui/scroll-area.js.map +1 -1
  78. package/dist/components/ui/select.d.ts.map +1 -1
  79. package/dist/components/ui/select.js +3 -0
  80. package/dist/components/ui/select.js.map +1 -1
  81. package/dist/components/ui/separator.d.ts.map +1 -1
  82. package/dist/components/ui/separator.js +3 -0
  83. package/dist/components/ui/separator.js.map +1 -1
  84. package/dist/components/ui/switch.d.ts.map +1 -1
  85. package/dist/components/ui/switch.js +3 -0
  86. package/dist/components/ui/switch.js.map +1 -1
  87. package/dist/components/ui/textarea.d.ts +1 -1
  88. package/dist/components/ui/textarea.d.ts.map +1 -1
  89. package/dist/components/ui/textarea.js +3 -0
  90. package/dist/components/ui/textarea.js.map +1 -1
  91. package/dist/components/ui/toast.d.ts.map +1 -1
  92. package/dist/components/ui/toast.js +3 -0
  93. package/dist/components/ui/toast.js.map +1 -1
  94. package/dist/components/ui/toaster.d.ts.map +1 -1
  95. package/dist/components/ui/toaster.js +3 -0
  96. package/dist/components/ui/toaster.js.map +1 -1
  97. package/dist/components/ui/toggle-group.d.ts.map +1 -1
  98. package/dist/components/ui/toggle-group.js +3 -0
  99. package/dist/components/ui/toggle-group.js.map +1 -1
  100. package/dist/components/ui/toggle.d.ts.map +1 -1
  101. package/dist/components/ui/toggle.js +3 -0
  102. package/dist/components/ui/toggle.js.map +1 -1
  103. package/dist/components/ui/tooltip.d.ts.map +1 -1
  104. package/dist/components/ui/tooltip.js +3 -0
  105. package/dist/components/ui/tooltip.js.map +1 -1
  106. package/dist/dialogs/NodePickerDialog.d.ts.map +1 -1
  107. package/dist/dialogs/NodePickerDialog.js +3 -0
  108. package/dist/dialogs/NodePickerDialog.js.map +1 -1
  109. package/dist/dialogs/ValidationDialog.d.ts.map +1 -1
  110. package/dist/dialogs/ValidationDialog.js +3 -0
  111. package/dist/dialogs/ValidationDialog.js.map +1 -1
  112. package/dist/graph/BaseNode.d.ts.map +1 -1
  113. package/dist/graph/BaseNode.js +21 -16
  114. package/dist/graph/BaseNode.js.map +1 -1
  115. package/dist/graph/CustomEdge.d.ts.map +1 -1
  116. package/dist/graph/CustomEdge.js +4 -1
  117. package/dist/graph/CustomEdge.js.map +1 -1
  118. package/dist/graph/CustomNode.d.ts.map +1 -1
  119. package/dist/graph/CustomNode.js +3 -0
  120. package/dist/graph/CustomNode.js.map +1 -1
  121. package/dist/graph/FunctionCallNode.d.ts.map +1 -1
  122. package/dist/graph/FunctionCallNode.js.map +1 -1
  123. package/dist/graph/PortHandle.d.ts.map +1 -1
  124. package/dist/graph/PortHandle.js.map +1 -1
  125. package/dist/graph/reactFlowRegistry.d.ts.map +1 -1
  126. package/dist/graph/reactFlowRegistry.js +3 -0
  127. package/dist/graph/reactFlowRegistry.js.map +1 -1
  128. package/dist/hooks/use-toast.d.ts.map +1 -1
  129. package/dist/hooks/use-toast.js +3 -0
  130. package/dist/hooks/use-toast.js.map +1 -1
  131. package/dist/hooks/useAvailableVariables.d.ts.map +1 -1
  132. package/dist/hooks/useAvailableVariables.js +3 -0
  133. package/dist/hooks/useAvailableVariables.js.map +1 -1
  134. package/dist/hooks/useCanvasHistory.d.ts.map +1 -1
  135. package/dist/hooks/useCanvasHistory.js +3 -0
  136. package/dist/hooks/useCanvasHistory.js.map +1 -1
  137. package/dist/hooks/useCanvasTabs.d.ts.map +1 -1
  138. package/dist/hooks/useCanvasTabs.js +3 -0
  139. package/dist/hooks/useCanvasTabs.js.map +1 -1
  140. package/dist/hooks/useFunctionDiagnosticsSync.d.ts.map +1 -1
  141. package/dist/hooks/useFunctionDiagnosticsSync.js +3 -0
  142. package/dist/hooks/useFunctionDiagnosticsSync.js.map +1 -1
  143. package/dist/hooks/useFunctionRegistry.d.ts.map +1 -1
  144. package/dist/hooks/useFunctionRegistry.js +3 -0
  145. package/dist/hooks/useFunctionRegistry.js.map +1 -1
  146. package/dist/hooks/useFunctions.d.ts.map +1 -1
  147. package/dist/hooks/useFunctions.js +3 -0
  148. package/dist/hooks/useFunctions.js.map +1 -1
  149. package/dist/hooks/useGraph.d.ts.map +1 -1
  150. package/dist/hooks/useGraph.js +3 -0
  151. package/dist/hooks/useGraph.js.map +1 -1
  152. package/dist/hooks/useNodeDefinitions.d.ts.map +1 -1
  153. package/dist/hooks/useNodeDefinitions.js +3 -0
  154. package/dist/hooks/useNodeDefinitions.js.map +1 -1
  155. package/dist/hooks/useParamErrors.d.ts.map +1 -1
  156. package/dist/hooks/useParamErrors.js +3 -0
  157. package/dist/hooks/useParamErrors.js.map +1 -1
  158. package/dist/hooks/useResolvedTheme.d.ts.map +1 -1
  159. package/dist/hooks/useResolvedTheme.js +3 -0
  160. package/dist/hooks/useResolvedTheme.js.map +1 -1
  161. package/dist/hooks/useResourceDiagnosticsSync.d.ts.map +1 -1
  162. package/dist/hooks/useResourceDiagnosticsSync.js +3 -0
  163. package/dist/hooks/useResourceDiagnosticsSync.js.map +1 -1
  164. package/dist/hooks/useSuppressThemeTransition.d.ts.map +1 -1
  165. package/dist/hooks/useSuppressThemeTransition.js +3 -0
  166. package/dist/hooks/useSuppressThemeTransition.js.map +1 -1
  167. package/dist/hooks/useWorkflowSerialization.d.ts.map +1 -1
  168. package/dist/hooks/useWorkflowSerialization.js +3 -0
  169. package/dist/hooks/useWorkflowSerialization.js.map +1 -1
  170. package/dist/i18n/index.d.ts.map +1 -1
  171. package/dist/i18n/index.js +3 -0
  172. package/dist/i18n/index.js.map +1 -1
  173. package/dist/index.d.ts +1 -1
  174. package/dist/index.d.ts.map +1 -1
  175. package/dist/index.js +3 -0
  176. package/dist/index.js.map +1 -1
  177. package/dist/inputs/ExpressionInput.d.ts.map +1 -1
  178. package/dist/inputs/ExpressionInput.js +3 -0
  179. package/dist/inputs/ExpressionInput.js.map +1 -1
  180. package/dist/inputs/ParameterEditor.d.ts.map +1 -1
  181. package/dist/inputs/ParameterEditor.js +3 -0
  182. package/dist/inputs/ParameterEditor.js.map +1 -1
  183. package/dist/inputs/PortSection.d.ts.map +1 -1
  184. package/dist/inputs/PortSection.js.map +1 -1
  185. package/dist/mode.d.ts +11 -0
  186. package/dist/mode.d.ts.map +1 -0
  187. package/dist/mode.js +8 -0
  188. package/dist/mode.js.map +1 -0
  189. package/dist/panels/BuilderSidebar.d.ts.map +1 -1
  190. package/dist/panels/BuilderSidebar.js +3 -0
  191. package/dist/panels/BuilderSidebar.js.map +1 -1
  192. package/dist/panels/ChannelConfigPanel.d.ts.map +1 -1
  193. package/dist/panels/ChannelConfigPanel.js +3 -0
  194. package/dist/panels/ChannelConfigPanel.js.map +1 -1
  195. package/dist/panels/ChannelsPanel.d.ts.map +1 -1
  196. package/dist/panels/ChannelsPanel.js +3 -0
  197. package/dist/panels/ChannelsPanel.js.map +1 -1
  198. package/dist/panels/DebugConsolePanel.d.ts.map +1 -1
  199. package/dist/panels/DebugConsolePanel.js +3 -0
  200. package/dist/panels/DebugConsolePanel.js.map +1 -1
  201. package/dist/panels/DebugContextPanel.d.ts.map +1 -1
  202. package/dist/panels/DebugContextPanel.js +3 -0
  203. package/dist/panels/DebugContextPanel.js.map +1 -1
  204. package/dist/panels/DebugExternalIOPanel.d.ts.map +1 -1
  205. package/dist/panels/DebugExternalIOPanel.js +3 -0
  206. package/dist/panels/DebugExternalIOPanel.js.map +1 -1
  207. package/dist/panels/DiagnosticsPanel.d.ts.map +1 -1
  208. package/dist/panels/DiagnosticsPanel.js +3 -0
  209. package/dist/panels/DiagnosticsPanel.js.map +1 -1
  210. package/dist/panels/EdgeConfigPanel.d.ts.map +1 -1
  211. package/dist/panels/EdgeConfigPanel.js +4 -1
  212. package/dist/panels/EdgeConfigPanel.js.map +1 -1
  213. package/dist/panels/FunctionConfigPanel.d.ts.map +1 -1
  214. package/dist/panels/FunctionConfigPanel.js +4 -1
  215. package/dist/panels/FunctionConfigPanel.js.map +1 -1
  216. package/dist/panels/FunctionListPanel.d.ts.map +1 -1
  217. package/dist/panels/FunctionListPanel.js +3 -0
  218. package/dist/panels/FunctionListPanel.js.map +1 -1
  219. package/dist/panels/MemoryConfigPanel.d.ts.map +1 -1
  220. package/dist/panels/MemoryConfigPanel.js +3 -0
  221. package/dist/panels/MemoryConfigPanel.js.map +1 -1
  222. package/dist/panels/MemoryPanel.d.ts.map +1 -1
  223. package/dist/panels/MemoryPanel.js +3 -0
  224. package/dist/panels/MemoryPanel.js.map +1 -1
  225. package/dist/panels/ModelConfigPanel.d.ts.map +1 -1
  226. package/dist/panels/ModelConfigPanel.js +3 -0
  227. package/dist/panels/ModelConfigPanel.js.map +1 -1
  228. package/dist/panels/ModelsPanel.d.ts.map +1 -1
  229. package/dist/panels/ModelsPanel.js +3 -0
  230. package/dist/panels/ModelsPanel.js.map +1 -1
  231. package/dist/panels/NodeConfigPanel.d.ts.map +1 -1
  232. package/dist/panels/NodeConfigPanel.js +4 -1
  233. package/dist/panels/NodeConfigPanel.js.map +1 -1
  234. package/dist/panels/NodeLibrary.d.ts.map +1 -1
  235. package/dist/panels/NodeLibrary.js +4 -1
  236. package/dist/panels/NodeLibrary.js.map +1 -1
  237. package/dist/panels/ResourceConfigPanel.d.ts.map +1 -1
  238. package/dist/panels/ResourceConfigPanel.js +4 -1
  239. package/dist/panels/ResourceConfigPanel.js.map +1 -1
  240. package/dist/panels/ResourceListPanel.d.ts.map +1 -1
  241. package/dist/panels/ResourceListPanel.js +4 -1
  242. package/dist/panels/ResourceListPanel.js.map +1 -1
  243. package/dist/panels/VariableConfigPanel.d.ts.map +1 -1
  244. package/dist/panels/VariableConfigPanel.js +4 -1
  245. package/dist/panels/VariableConfigPanel.js.map +1 -1
  246. package/dist/panels/VariablesPanel.d.ts.map +1 -1
  247. package/dist/panels/VariablesPanel.js +4 -1
  248. package/dist/panels/VariablesPanel.js.map +1 -1
  249. package/dist/stores/canvasStore.d.ts.map +1 -1
  250. package/dist/stores/canvasStore.js +3 -0
  251. package/dist/stores/canvasStore.js.map +1 -1
  252. package/dist/stores/debugStore.d.ts.map +1 -1
  253. package/dist/stores/debugStore.js +3 -0
  254. package/dist/stores/debugStore.js.map +1 -1
  255. package/dist/stores/diagnosticsStore.d.ts.map +1 -1
  256. package/dist/stores/diagnosticsStore.js +3 -0
  257. package/dist/stores/diagnosticsStore.js.map +1 -1
  258. package/dist/stores/editorStore.d.ts +1 -1
  259. package/dist/stores/editorStore.d.ts.map +1 -1
  260. package/dist/stores/editorStore.js +3 -0
  261. package/dist/stores/editorStore.js.map +1 -1
  262. package/dist/utils/categoryConstants.d.ts.map +1 -1
  263. package/dist/utils/categoryConstants.js +3 -0
  264. package/dist/utils/categoryConstants.js.map +1 -1
  265. package/dist/utils/channelOperations.d.ts.map +1 -1
  266. package/dist/utils/channelOperations.js +3 -0
  267. package/dist/utils/channelOperations.js.map +1 -1
  268. package/dist/utils/connectionRules.d.ts +3 -1
  269. package/dist/utils/connectionRules.d.ts.map +1 -1
  270. package/dist/utils/connectionRules.js +11 -16
  271. package/dist/utils/connectionRules.js.map +1 -1
  272. package/dist/utils/functionOperations.d.ts.map +1 -1
  273. package/dist/utils/functionOperations.js +3 -0
  274. package/dist/utils/functionOperations.js.map +1 -1
  275. package/dist/utils/graphOperations.d.ts.map +1 -1
  276. package/dist/utils/graphOperations.js +3 -0
  277. package/dist/utils/graphOperations.js.map +1 -1
  278. package/dist/utils/history.d.ts.map +1 -1
  279. package/dist/utils/history.js +4 -1
  280. package/dist/utils/history.js.map +1 -1
  281. package/dist/utils/memoryOperations.d.ts.map +1 -1
  282. package/dist/utils/memoryOperations.js +3 -0
  283. package/dist/utils/memoryOperations.js.map +1 -1
  284. package/dist/utils/migrateFunctionNodes.d.ts.map +1 -1
  285. package/dist/utils/migrateFunctionNodes.js +3 -0
  286. package/dist/utils/migrateFunctionNodes.js.map +1 -1
  287. package/dist/utils/modelOperations.d.ts.map +1 -1
  288. package/dist/utils/modelOperations.js +3 -0
  289. package/dist/utils/modelOperations.js.map +1 -1
  290. package/dist/utils/paramDisplay.d.ts.map +1 -1
  291. package/dist/utils/paramDisplay.js +3 -0
  292. package/dist/utils/paramDisplay.js.map +1 -1
  293. package/dist/utils/resourceHelpers.d.ts.map +1 -1
  294. package/dist/utils/resourceHelpers.js +3 -0
  295. package/dist/utils/resourceHelpers.js.map +1 -1
  296. package/dist/utils/translation.d.ts.map +1 -1
  297. package/dist/utils/translation.js +3 -0
  298. package/dist/utils/translation.js.map +1 -1
  299. package/dist/utils/variableOperations.d.ts.map +1 -1
  300. package/dist/utils/variableOperations.js +3 -0
  301. package/dist/utils/variableOperations.js.map +1 -1
  302. package/package.json +2 -2
  303. package/src/BuilderLayout.tsx +338 -345
  304. package/src/Canvas.tsx +270 -261
  305. package/src/CanvasEditor.tsx +146 -142
  306. package/src/CanvasTabsToolbar.tsx +180 -176
  307. package/src/RightConfigPanel.tsx +270 -266
  308. package/src/WorkflowBuilder.tsx +423 -408
  309. package/src/cn.ts +10 -6
  310. package/src/components/ui/add-button.tsx +43 -39
  311. package/src/components/ui/alert-dialog.tsx +145 -141
  312. package/src/components/ui/alert.tsx +63 -59
  313. package/src/components/ui/badge.tsx +40 -36
  314. package/src/components/ui/button.tsx +89 -85
  315. package/src/components/ui/card.tsx +83 -79
  316. package/src/components/ui/checkbox.tsx +32 -28
  317. package/src/components/ui/collapsible.tsx +13 -9
  318. package/src/components/ui/command.tsx +157 -153
  319. package/src/components/ui/delete-button.tsx +27 -23
  320. package/src/components/ui/dialog.tsx +129 -125
  321. package/src/components/ui/dropdown-menu.tsx +202 -198
  322. package/src/components/ui/input.tsx +59 -55
  323. package/src/components/ui/label.tsx +28 -24
  324. package/src/components/ui/readonly-banner.tsx +19 -15
  325. package/src/components/ui/resizable.tsx +47 -43
  326. package/src/components/ui/scroll-area.tsx +106 -102
  327. package/src/components/ui/select.tsx +164 -160
  328. package/src/components/ui/separator.tsx +33 -29
  329. package/src/components/ui/switch.tsx +31 -27
  330. package/src/components/ui/textarea.tsx +55 -51
  331. package/src/components/ui/toast.tsx +131 -127
  332. package/src/components/ui/toaster.tsx +37 -33
  333. package/src/components/ui/toggle-group.tsx +63 -59
  334. package/src/components/ui/toggle.tsx +47 -43
  335. package/src/components/ui/tooltip.tsx +36 -32
  336. package/src/dialogs/NodePickerDialog.tsx +88 -84
  337. package/src/dialogs/ValidationDialog.tsx +188 -184
  338. package/src/graph/BaseNode.tsx +563 -557
  339. package/src/graph/CustomEdge.tsx +189 -185
  340. package/src/graph/CustomNode.tsx +20 -16
  341. package/src/graph/FunctionCallNode.tsx +34 -30
  342. package/src/graph/PortHandle.tsx +193 -189
  343. package/src/graph/reactFlowRegistry.ts +30 -26
  344. package/src/hooks/use-toast.ts +129 -125
  345. package/src/hooks/useAvailableVariables.ts +24 -20
  346. package/src/hooks/useCanvasHistory.ts +26 -22
  347. package/src/hooks/useCanvasTabs.ts +172 -168
  348. package/src/hooks/useFunctionDiagnosticsSync.ts +44 -40
  349. package/src/hooks/useFunctionRegistry.ts +30 -26
  350. package/src/hooks/useFunctions.ts +48 -44
  351. package/src/hooks/useGraph.ts +165 -161
  352. package/src/hooks/useNodeDefinitions.ts +86 -82
  353. package/src/hooks/useParamErrors.ts +30 -26
  354. package/src/hooks/useResolvedTheme.ts +34 -30
  355. package/src/hooks/useResourceDiagnosticsSync.ts +62 -58
  356. package/src/hooks/useSuppressThemeTransition.ts +83 -79
  357. package/src/hooks/useWorkflowSerialization.ts +145 -141
  358. package/src/i18n/index.ts +57 -53
  359. package/src/i18n/locales/de.json +501 -501
  360. package/src/i18n/locales/en.json +557 -557
  361. package/src/index.ts +31 -27
  362. package/src/inputs/ExpressionInput.tsx +301 -297
  363. package/src/inputs/ParameterEditor.tsx +519 -515
  364. package/src/inputs/PortSection.tsx +148 -144
  365. package/src/mode.ts +15 -0
  366. package/src/panels/BuilderSidebar.tsx +305 -301
  367. package/src/panels/ChannelConfigPanel.tsx +53 -49
  368. package/src/panels/ChannelsPanel.tsx +32 -28
  369. package/src/panels/DebugConsolePanel.tsx +77 -73
  370. package/src/panels/DebugContextPanel.tsx +81 -77
  371. package/src/panels/DebugExternalIOPanel.tsx +184 -180
  372. package/src/panels/DiagnosticsPanel.tsx +174 -170
  373. package/src/panels/EdgeConfigPanel.tsx +108 -104
  374. package/src/panels/FunctionConfigPanel.tsx +183 -179
  375. package/src/panels/FunctionListPanel.tsx +49 -45
  376. package/src/panels/MemoryConfigPanel.tsx +59 -55
  377. package/src/panels/MemoryPanel.tsx +44 -40
  378. package/src/panels/ModelConfigPanel.tsx +45 -41
  379. package/src/panels/ModelsPanel.tsx +40 -36
  380. package/src/panels/NodeConfigPanel.tsx +634 -630
  381. package/src/panels/NodeLibrary.tsx +292 -288
  382. package/src/panels/ResourceConfigPanel.tsx +136 -132
  383. package/src/panels/ResourceListPanel.tsx +117 -113
  384. package/src/panels/VariableConfigPanel.tsx +165 -161
  385. package/src/panels/VariablesPanel.tsx +149 -145
  386. package/src/stores/canvasStore.test.ts +48 -44
  387. package/src/stores/canvasStore.ts +249 -245
  388. package/src/stores/debugStore.ts +78 -74
  389. package/src/stores/diagnosticsStore.ts +134 -130
  390. package/src/stores/editorStore.ts +194 -190
  391. package/src/styles/index.css +526 -526
  392. package/src/utils/categoryConstants.ts +30 -26
  393. package/src/utils/channelOperations.ts +90 -86
  394. package/src/utils/connectionRules.ts +140 -137
  395. package/src/utils/functionOperations.ts +183 -179
  396. package/src/utils/graphOperations.ts +554 -550
  397. package/src/utils/history.test.ts +92 -0
  398. package/src/utils/history.ts +211 -207
  399. package/src/utils/memoryOperations.ts +61 -57
  400. package/src/utils/migrateFunctionNodes.ts +111 -107
  401. package/src/utils/modelOperations.ts +59 -55
  402. package/src/utils/paramDisplay.ts +75 -71
  403. package/src/utils/resourceHelpers.ts +36 -32
  404. package/src/utils/translation.ts +32 -28
  405. package/src/utils/variableOperations.ts +79 -75
  406. package/tailwind-preset.ts +170 -166
  407. package/dist/lib/utils.d.ts +0 -3
  408. package/dist/lib/utils.d.ts.map +0 -1
  409. package/dist/lib/utils.js +0 -6
  410. package/dist/lib/utils.js.map +0 -1
  411. package/dist/toolbars/CanvasTabsToolbar.d.ts +0 -11
  412. package/dist/toolbars/CanvasTabsToolbar.d.ts.map +0 -1
  413. package/dist/toolbars/CanvasTabsToolbar.js +0 -101
  414. package/dist/toolbars/CanvasTabsToolbar.js.map +0 -1
@@ -1,179 +1,183 @@
1
- import type { Expression } from "@foresthubai/workflow-core";
2
- import type { DataType } from "@foresthubai/workflow-core/parameter";
3
- import type { FunctionDeclaration } from "@foresthubai/workflow-core/function";
4
- import { generateId } from "@foresthubai/workflow-core/id";
5
- import { ensureUid, type ApiVariable } from "@foresthubai/workflow-core/variable";
6
- import { useEditorStore } from "../stores/editorStore";
7
- import {
8
- getCanvasStore,
9
- getOrCreateCanvasStore,
10
- deleteCanvasStore,
11
- syncFunctionArgVariables,
12
- notifyCanvasRegistryChange,
13
- } from "../stores/canvasStore";
14
- import { uniqueName } from "./resourceHelpers";
15
-
16
- /**
17
- * Functions are a project-scoped resource: the declaration ({@link FunctionDeclaration}
18
- * signature + bundled output assignments) lives in editorStore, the body lives in
19
- * the matching canvas store (id === fn.id). These operations keep the two in sync.
20
- * Like channel/memory/model operations they write straight to the store (no undo
21
- * history). A declaration change (name/arguments/outputs) forward-reconciles call
22
- * sites via the migration subscription; an output *expression* edit does not (call
23
- * sites never see the callee's expressions), so it doesn't bump the version.
24
- */
25
-
26
- const emptyExpression = (dataType: DataType): Expression => ({ expression: "", references: [], dataType });
27
-
28
- /** Re-derive the body's fnarg variables from the declaration's current arguments. */
29
- function syncBody(fn: FunctionDeclaration): void {
30
- const store = getCanvasStore(fn.id);
31
- if (store) syncFunctionArgVariables(store, fn.arguments);
32
- }
33
-
34
- /**
35
- * Apply an update to one function. `bumpVersion` is true for signature changes
36
- * (name/arguments/outputs declaration) so call sites detect staleness, and false for
37
- * pure output-expression edits. Version-bumping changes re-sync the body's fnargs.
38
- */
39
- function mutate(id: string, updater: (fn: FunctionDeclaration) => FunctionDeclaration, bumpVersion: boolean): void {
40
- let next: FunctionDeclaration | undefined;
41
- useEditorStore.getState().setFunctions((fns) => {
42
- const fn = fns[id];
43
- if (!fn) return fns;
44
- const updated = updater(fn);
45
- next = bumpVersion ? { ...updated, version: fn.version + 1 } : updated;
46
- return { ...fns, [id]: next };
47
- });
48
- if (next && bumpVersion) syncBody(next);
49
- }
50
-
51
- /** Create a new (empty) function + its body canvas. Returns the new definition. */
52
- export function addFunction(): FunctionDeclaration {
53
- const id = generateId();
54
- const existing = Object.values(useEditorStore.getState().functions).map((f) => f.name);
55
- const fn: FunctionDeclaration = {
56
- id,
57
- version: 1,
58
- name: uniqueName("function", existing),
59
- arguments: [],
60
- outputs: [],
61
- };
62
- useEditorStore.getState().setFunctions((fns) => ({ ...fns, [id]: fn }));
63
- // Create the body canvas (seeds an OnFunctionCall node) and watch it.
64
- getOrCreateCanvasStore(id);
65
- notifyCanvasRegistryChange();
66
- return fn;
67
- }
68
-
69
- /** Delete a function: its declaration, its body canvas, and any selection of it. */
70
- export function deleteFunction(id: string): void {
71
- useEditorStore.getState().setFunctions((fns) => {
72
- const { [id]: _drop, ...rest } = fns;
73
- return rest;
74
- });
75
- deleteCanvasStore(id);
76
- const sel = useEditorStore.getState().selection;
77
- if (sel.kind === "function" && sel.id === id) {
78
- useEditorStore.getState().clearSelection();
79
- }
80
- }
81
-
82
- /** Rename a function. Call-site migration detects this via the name comparison, so
83
- * it needs no version bump. */
84
- export function renameFunction(id: string, name: string): void {
85
- mutate(id, (fn) => ({ ...fn, name }), false);
86
- }
87
-
88
- // ── Input arguments (declarations) ─────────────────────────────────────────────
89
-
90
- export function addArgument(id: string): void {
91
- mutate(
92
- id,
93
- (fn) => ({
94
- ...fn,
95
- arguments: [...fn.arguments, ensureUid({ name: `input${fn.arguments.length + 1}`, dataType: "string" })],
96
- }),
97
- true,
98
- );
99
- }
100
-
101
- export function updateArgument(id: string, index: number, patch: Partial<ApiVariable>): void {
102
- mutate(
103
- id,
104
- (fn) => {
105
- const existing = fn.arguments[index];
106
- if (!existing) return fn;
107
- const next = [...fn.arguments];
108
- next[index] = { ...existing, ...patch };
109
- return { ...fn, arguments: next };
110
- },
111
- true,
112
- );
113
- }
114
-
115
- export function removeArgument(id: string, index: number): void {
116
- mutate(id, (fn) => ({ ...fn, arguments: fn.arguments.filter((_, i) => i !== index) }), true);
117
- }
118
-
119
- // ── Outputs (declaration + assignment bundled) ─────────────────────────────────
120
-
121
- export function addOutput(id: string): void {
122
- mutate(
123
- id,
124
- (fn) => {
125
- const dataType: DataType = "string";
126
- return {
127
- ...fn,
128
- outputs: [...fn.outputs, { uid: generateId(), name: `output${fn.outputs.length + 1}`, dataType, expression: emptyExpression(dataType) }],
129
- };
130
- },
131
- true,
132
- );
133
- }
134
-
135
- /** Update an output's declaration (name/dataType). A dataType change retags the
136
- * bundled expression's dataType but keeps the entered text. */
137
- export function updateOutput(id: string, index: number, patch: { name?: string; dataType?: DataType }): void {
138
- mutate(
139
- id,
140
- (fn) => {
141
- const existing = fn.outputs[index];
142
- if (!existing) return fn;
143
- const dataType = patch.dataType ?? existing.dataType;
144
- const next = [...fn.outputs];
145
- next[index] = {
146
- ...existing,
147
- ...patch,
148
- dataType,
149
- expression: patch.dataType ? { ...existing.expression, dataType } : existing.expression,
150
- };
151
- return { ...fn, outputs: next };
152
- },
153
- true,
154
- );
155
- }
156
-
157
- export function removeOutput(id: string, index: number): void {
158
- mutate(id, (fn) => ({ ...fn, outputs: fn.outputs.filter((_, i) => i !== index) }), true);
159
- }
160
-
161
- /** Set one output's return-value expression. Not a signature change → no version bump. */
162
- export function setOutputExpression(id: string, index: number, expression: Expression): void {
163
- mutate(
164
- id,
165
- (fn) => {
166
- const existing = fn.outputs[index];
167
- if (!existing) return fn;
168
- const next = [...fn.outputs];
169
- next[index] = { ...existing, expression };
170
- return { ...fn, outputs: next };
171
- },
172
- false,
173
- );
174
- }
175
-
176
- /** Read a function declaration without subscribing (for non-component callers). */
177
- export function getFunction(id: string): FunctionDeclaration | undefined {
178
- return useEditorStore.getState().functions[id];
179
- }
1
+ // SPDX-License-Identifier: AGPL-3.0-only
2
+ // Copyright (c) 2026 ForestHub. All rights reserved.
3
+ // For commercial licensing, contact root@foresthub.ai
4
+
5
+ import type { Expression } from "@foresthubai/workflow-core";
6
+ import type { DataType } from "@foresthubai/workflow-core/parameter";
7
+ import type { FunctionDeclaration } from "@foresthubai/workflow-core/function";
8
+ import { generateId } from "@foresthubai/workflow-core/id";
9
+ import { ensureUid, type ApiVariable } from "@foresthubai/workflow-core/variable";
10
+ import { useEditorStore } from "../stores/editorStore";
11
+ import {
12
+ getCanvasStore,
13
+ getOrCreateCanvasStore,
14
+ deleteCanvasStore,
15
+ syncFunctionArgVariables,
16
+ notifyCanvasRegistryChange,
17
+ } from "../stores/canvasStore";
18
+ import { uniqueName } from "./resourceHelpers";
19
+
20
+ /**
21
+ * Functions are a project-scoped resource: the declaration ({@link FunctionDeclaration}
22
+ * signature + bundled output assignments) lives in editorStore, the body lives in
23
+ * the matching canvas store (id === fn.id). These operations keep the two in sync.
24
+ * Like channel/memory/model operations they write straight to the store (no undo
25
+ * history). A declaration change (name/arguments/outputs) forward-reconciles call
26
+ * sites via the migration subscription; an output *expression* edit does not (call
27
+ * sites never see the callee's expressions), so it doesn't bump the version.
28
+ */
29
+
30
+ const emptyExpression = (dataType: DataType): Expression => ({ expression: "", references: [], dataType });
31
+
32
+ /** Re-derive the body's fnarg variables from the declaration's current arguments. */
33
+ function syncBody(fn: FunctionDeclaration): void {
34
+ const store = getCanvasStore(fn.id);
35
+ if (store) syncFunctionArgVariables(store, fn.arguments);
36
+ }
37
+
38
+ /**
39
+ * Apply an update to one function. `bumpVersion` is true for signature changes
40
+ * (name/arguments/outputs declaration) so call sites detect staleness, and false for
41
+ * pure output-expression edits. Version-bumping changes re-sync the body's fnargs.
42
+ */
43
+ function mutate(id: string, updater: (fn: FunctionDeclaration) => FunctionDeclaration, bumpVersion: boolean): void {
44
+ let next: FunctionDeclaration | undefined;
45
+ useEditorStore.getState().setFunctions((fns) => {
46
+ const fn = fns[id];
47
+ if (!fn) return fns;
48
+ const updated = updater(fn);
49
+ next = bumpVersion ? { ...updated, version: fn.version + 1 } : updated;
50
+ return { ...fns, [id]: next };
51
+ });
52
+ if (next && bumpVersion) syncBody(next);
53
+ }
54
+
55
+ /** Create a new (empty) function + its body canvas. Returns the new definition. */
56
+ export function addFunction(): FunctionDeclaration {
57
+ const id = generateId();
58
+ const existing = Object.values(useEditorStore.getState().functions).map((f) => f.name);
59
+ const fn: FunctionDeclaration = {
60
+ id,
61
+ version: 1,
62
+ name: uniqueName("function", existing),
63
+ arguments: [],
64
+ outputs: [],
65
+ };
66
+ useEditorStore.getState().setFunctions((fns) => ({ ...fns, [id]: fn }));
67
+ // Create the body canvas (seeds an OnFunctionCall node) and watch it.
68
+ getOrCreateCanvasStore(id);
69
+ notifyCanvasRegistryChange();
70
+ return fn;
71
+ }
72
+
73
+ /** Delete a function: its declaration, its body canvas, and any selection of it. */
74
+ export function deleteFunction(id: string): void {
75
+ useEditorStore.getState().setFunctions((fns) => {
76
+ const { [id]: _drop, ...rest } = fns;
77
+ return rest;
78
+ });
79
+ deleteCanvasStore(id);
80
+ const sel = useEditorStore.getState().selection;
81
+ if (sel.kind === "function" && sel.id === id) {
82
+ useEditorStore.getState().clearSelection();
83
+ }
84
+ }
85
+
86
+ /** Rename a function. Call-site migration detects this via the name comparison, so
87
+ * it needs no version bump. */
88
+ export function renameFunction(id: string, name: string): void {
89
+ mutate(id, (fn) => ({ ...fn, name }), false);
90
+ }
91
+
92
+ // ── Input arguments (declarations) ─────────────────────────────────────────────
93
+
94
+ export function addArgument(id: string): void {
95
+ mutate(
96
+ id,
97
+ (fn) => ({
98
+ ...fn,
99
+ arguments: [...fn.arguments, ensureUid({ name: `input${fn.arguments.length + 1}`, dataType: "string" })],
100
+ }),
101
+ true,
102
+ );
103
+ }
104
+
105
+ export function updateArgument(id: string, index: number, patch: Partial<ApiVariable>): void {
106
+ mutate(
107
+ id,
108
+ (fn) => {
109
+ const existing = fn.arguments[index];
110
+ if (!existing) return fn;
111
+ const next = [...fn.arguments];
112
+ next[index] = { ...existing, ...patch };
113
+ return { ...fn, arguments: next };
114
+ },
115
+ true,
116
+ );
117
+ }
118
+
119
+ export function removeArgument(id: string, index: number): void {
120
+ mutate(id, (fn) => ({ ...fn, arguments: fn.arguments.filter((_, i) => i !== index) }), true);
121
+ }
122
+
123
+ // ── Outputs (declaration + assignment bundled) ─────────────────────────────────
124
+
125
+ export function addOutput(id: string): void {
126
+ mutate(
127
+ id,
128
+ (fn) => {
129
+ const dataType: DataType = "string";
130
+ return {
131
+ ...fn,
132
+ outputs: [...fn.outputs, { uid: generateId(), name: `output${fn.outputs.length + 1}`, dataType, expression: emptyExpression(dataType) }],
133
+ };
134
+ },
135
+ true,
136
+ );
137
+ }
138
+
139
+ /** Update an output's declaration (name/dataType). A dataType change retags the
140
+ * bundled expression's dataType but keeps the entered text. */
141
+ export function updateOutput(id: string, index: number, patch: { name?: string; dataType?: DataType }): void {
142
+ mutate(
143
+ id,
144
+ (fn) => {
145
+ const existing = fn.outputs[index];
146
+ if (!existing) return fn;
147
+ const dataType = patch.dataType ?? existing.dataType;
148
+ const next = [...fn.outputs];
149
+ next[index] = {
150
+ ...existing,
151
+ ...patch,
152
+ dataType,
153
+ expression: patch.dataType ? { ...existing.expression, dataType } : existing.expression,
154
+ };
155
+ return { ...fn, outputs: next };
156
+ },
157
+ true,
158
+ );
159
+ }
160
+
161
+ export function removeOutput(id: string, index: number): void {
162
+ mutate(id, (fn) => ({ ...fn, outputs: fn.outputs.filter((_, i) => i !== index) }), true);
163
+ }
164
+
165
+ /** Set one output's return-value expression. Not a signature change → no version bump. */
166
+ export function setOutputExpression(id: string, index: number, expression: Expression): void {
167
+ mutate(
168
+ id,
169
+ (fn) => {
170
+ const existing = fn.outputs[index];
171
+ if (!existing) return fn;
172
+ const next = [...fn.outputs];
173
+ next[index] = { ...existing, expression };
174
+ return { ...fn, outputs: next };
175
+ },
176
+ false,
177
+ );
178
+ }
179
+
180
+ /** Read a function declaration without subscribing (for non-component callers). */
181
+ export function getFunction(id: string): FunctionDeclaration | undefined {
182
+ return useEditorStore.getState().functions[id];
183
+ }