@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,184 +1,188 @@
1
- import { useState } from "react";
2
- import { useTranslation } from "react-i18next";
3
- import { AlertCircle, AlertTriangle, ChevronDown } from "lucide-react";
4
- import { Badge } from "../components/ui/badge";
5
- import { Button } from "../components/ui/button";
6
- import {
7
- Dialog,
8
- DialogContent,
9
- DialogDescription,
10
- DialogFooter,
11
- DialogHeader,
12
- DialogTitle,
13
- } from "../components/ui/dialog";
14
- import { cn } from "../cn";
15
- import type { Diagnostic, ValidationResult } from "@foresthubai/workflow-core/diagnostics";
16
-
17
- interface ValidationDialogProps {
18
- open: boolean;
19
- onOpenChange: (open: boolean) => void;
20
- validation: ValidationResult;
21
- /**
22
- * Export-gating flow only: when provided and there are no errors, the footer
23
- * offers "Continue with Warnings". Omit for a plain informational dialog (just
24
- * a Close button) — e.g. the standalone Validate action.
25
- */
26
- onContinue?: () => void;
27
- /** Clicking a diagnostic navigates to its target (canvas/node/edge/resource). */
28
- onSelectDiagnostic?: (diagnostic: Diagnostic) => void;
29
- }
30
-
31
- export default function ValidationDialog({
32
- open,
33
- onOpenChange,
34
- validation,
35
- onContinue,
36
- onSelectDiagnostic,
37
- }: ValidationDialogProps) {
38
- const { t } = useTranslation();
39
- const hasErrors = validation.totalErrors > 0;
40
-
41
- return (
42
- <Dialog open={open} onOpenChange={onOpenChange}>
43
- <DialogContent className="max-w-lg max-h-[80vh] flex flex-col">
44
- <DialogHeader>
45
- <DialogTitle className="flex items-center gap-2">
46
- {hasErrors ? (
47
- <AlertTriangle className="w-5 h-5 text-destructive" />
48
- ) : (
49
- <AlertCircle className="w-5 h-5 text-warning" />
50
- )}
51
- {t("validationIssues")}
52
- </DialogTitle>
53
- <DialogDescription>
54
- {hasErrors
55
- ? t("validationErrorsDesc", {
56
- errorCount: validation.totalErrors,
57
- warningCount: validation.totalWarnings,
58
- })
59
- : t("validationWarningsDesc", {
60
- warningCount: validation.totalWarnings,
61
- })}
62
- </DialogDescription>
63
- </DialogHeader>
64
-
65
- <div className="flex-1 overflow-y-auto -mx-6 px-6">
66
- <div className="flex flex-col gap-2">
67
- {validation.canvases.map((canvas) => (
68
- <Section
69
- key={canvas.canvasId}
70
- label={canvas.canvasLabel}
71
- diagnostics={canvas.diagnostics}
72
- onSelectDiagnostic={onSelectDiagnostic}
73
- />
74
- ))}
75
- {/* Project-scoped diagnostics (no canvasId) live in their own buckets. */}
76
- {validation.channelDiagnostics.length > 0 && (
77
- <Section
78
- label={t("channels")}
79
- diagnostics={validation.channelDiagnostics}
80
- onSelectDiagnostic={onSelectDiagnostic}
81
- />
82
- )}
83
- {validation.memoryDiagnostics.length > 0 && (
84
- <Section
85
- label={t("memoryFiles")}
86
- diagnostics={validation.memoryDiagnostics}
87
- onSelectDiagnostic={onSelectDiagnostic}
88
- />
89
- )}
90
- {validation.modelDiagnostics.length > 0 && (
91
- <Section
92
- label={t("models")}
93
- diagnostics={validation.modelDiagnostics}
94
- onSelectDiagnostic={onSelectDiagnostic}
95
- />
96
- )}
97
- </div>
98
- </div>
99
-
100
- <DialogFooter>
101
- {hasErrors || !onContinue ? (
102
- <Button variant="outline" onClick={() => onOpenChange(false)}>
103
- {t("close")}
104
- </Button>
105
- ) : (
106
- <>
107
- <Button variant="outline" onClick={() => onOpenChange(false)}>
108
- {t("cancel")}
109
- </Button>
110
- <Button onClick={onContinue}>{t("continueWithWarnings")}</Button>
111
- </>
112
- )}
113
- </DialogFooter>
114
- </DialogContent>
115
- </Dialog>
116
- );
117
- }
118
-
119
- // One collapsible group of diagnostics — used for both canvases and the
120
- // project-scoped buckets (channels/memory/models). Counts are derived here.
121
- function Section({
122
- label,
123
- diagnostics,
124
- onSelectDiagnostic,
125
- }: {
126
- label: string;
127
- diagnostics: Diagnostic[];
128
- onSelectDiagnostic?: (diagnostic: Diagnostic) => void;
129
- }) {
130
- const [open, setOpen] = useState(true);
131
- const errorCount = diagnostics.filter((d) => d.severity === "error").length;
132
- const warningCount = diagnostics.length - errorCount;
133
-
134
- return (
135
- <div className="rounded-md border border-border/60">
136
- <button
137
- type="button"
138
- onClick={() => setOpen((v) => !v)}
139
- className="flex items-center gap-2 w-full px-3 py-2 text-left text-sm hover:bg-accent/50 rounded-t-md"
140
- >
141
- <ChevronDown className={cn("w-3.5 h-3.5 shrink-0 transition-transform", !open && "-rotate-90")} />
142
- <span className="truncate flex-1 font-medium">{label}</span>
143
- <div className="flex items-center gap-1">
144
- {errorCount > 0 && (
145
- <Badge
146
- variant="outline"
147
- className="text-[10px] px-1.5 py-0 h-4 leading-4 border-destructive/40 text-destructive bg-card"
148
- >
149
- {errorCount}
150
- </Badge>
151
- )}
152
- {warningCount > 0 && (
153
- <Badge
154
- variant="outline"
155
- className="text-[10px] px-1.5 py-0 h-4 leading-4 border-warning/40 text-warning bg-card"
156
- >
157
- {warningCount}
158
- </Badge>
159
- )}
160
- </div>
161
- </button>
162
- {open && (
163
- <div className="border-t border-border/40 px-3 py-1.5 flex flex-col gap-0.5">
164
- {diagnostics.map((diag, i) => (
165
- <button
166
- key={i}
167
- type="button"
168
- onClick={() => onSelectDiagnostic?.(diag)}
169
- disabled={!onSelectDiagnostic}
170
- className="flex items-start gap-1.5 px-1 py-1 text-xs text-left rounded transition-colors enabled:hover:bg-accent/50 enabled:cursor-pointer disabled:cursor-default"
171
- >
172
- {diag.severity === "error" ? (
173
- <AlertTriangle className="w-3.5 h-3.5 text-destructive shrink-0 mt-0.5" />
174
- ) : (
175
- <AlertCircle className="w-3.5 h-3.5 text-warning shrink-0 mt-0.5" />
176
- )}
177
- <span className="text-muted-foreground">{diag.message}</span>
178
- </button>
179
- ))}
180
- </div>
181
- )}
182
- </div>
183
- );
184
- }
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 { useState } from "react";
6
+ import { useTranslation } from "react-i18next";
7
+ import { AlertCircle, AlertTriangle, ChevronDown } from "lucide-react";
8
+ import { Badge } from "../components/ui/badge";
9
+ import { Button } from "../components/ui/button";
10
+ import {
11
+ Dialog,
12
+ DialogContent,
13
+ DialogDescription,
14
+ DialogFooter,
15
+ DialogHeader,
16
+ DialogTitle,
17
+ } from "../components/ui/dialog";
18
+ import { cn } from "../cn";
19
+ import type { Diagnostic, ValidationResult } from "@foresthubai/workflow-core/diagnostics";
20
+
21
+ interface ValidationDialogProps {
22
+ open: boolean;
23
+ onOpenChange: (open: boolean) => void;
24
+ validation: ValidationResult;
25
+ /**
26
+ * Export-gating flow only: when provided and there are no errors, the footer
27
+ * offers "Continue with Warnings". Omit for a plain informational dialog (just
28
+ * a Close button) e.g. the standalone Validate action.
29
+ */
30
+ onContinue?: () => void;
31
+ /** Clicking a diagnostic navigates to its target (canvas/node/edge/resource). */
32
+ onSelectDiagnostic?: (diagnostic: Diagnostic) => void;
33
+ }
34
+
35
+ export default function ValidationDialog({
36
+ open,
37
+ onOpenChange,
38
+ validation,
39
+ onContinue,
40
+ onSelectDiagnostic,
41
+ }: ValidationDialogProps) {
42
+ const { t } = useTranslation();
43
+ const hasErrors = validation.totalErrors > 0;
44
+
45
+ return (
46
+ <Dialog open={open} onOpenChange={onOpenChange}>
47
+ <DialogContent className="max-w-lg max-h-[80vh] flex flex-col">
48
+ <DialogHeader>
49
+ <DialogTitle className="flex items-center gap-2">
50
+ {hasErrors ? (
51
+ <AlertTriangle className="w-5 h-5 text-destructive" />
52
+ ) : (
53
+ <AlertCircle className="w-5 h-5 text-warning" />
54
+ )}
55
+ {t("validationIssues")}
56
+ </DialogTitle>
57
+ <DialogDescription>
58
+ {hasErrors
59
+ ? t("validationErrorsDesc", {
60
+ errorCount: validation.totalErrors,
61
+ warningCount: validation.totalWarnings,
62
+ })
63
+ : t("validationWarningsDesc", {
64
+ warningCount: validation.totalWarnings,
65
+ })}
66
+ </DialogDescription>
67
+ </DialogHeader>
68
+
69
+ <div className="flex-1 overflow-y-auto -mx-6 px-6">
70
+ <div className="flex flex-col gap-2">
71
+ {validation.canvases.map((canvas) => (
72
+ <Section
73
+ key={canvas.canvasId}
74
+ label={canvas.canvasLabel}
75
+ diagnostics={canvas.diagnostics}
76
+ onSelectDiagnostic={onSelectDiagnostic}
77
+ />
78
+ ))}
79
+ {/* Project-scoped diagnostics (no canvasId) live in their own buckets. */}
80
+ {validation.channelDiagnostics.length > 0 && (
81
+ <Section
82
+ label={t("channels")}
83
+ diagnostics={validation.channelDiagnostics}
84
+ onSelectDiagnostic={onSelectDiagnostic}
85
+ />
86
+ )}
87
+ {validation.memoryDiagnostics.length > 0 && (
88
+ <Section
89
+ label={t("memoryFiles")}
90
+ diagnostics={validation.memoryDiagnostics}
91
+ onSelectDiagnostic={onSelectDiagnostic}
92
+ />
93
+ )}
94
+ {validation.modelDiagnostics.length > 0 && (
95
+ <Section
96
+ label={t("models")}
97
+ diagnostics={validation.modelDiagnostics}
98
+ onSelectDiagnostic={onSelectDiagnostic}
99
+ />
100
+ )}
101
+ </div>
102
+ </div>
103
+
104
+ <DialogFooter>
105
+ {hasErrors || !onContinue ? (
106
+ <Button variant="outline" onClick={() => onOpenChange(false)}>
107
+ {t("close")}
108
+ </Button>
109
+ ) : (
110
+ <>
111
+ <Button variant="outline" onClick={() => onOpenChange(false)}>
112
+ {t("cancel")}
113
+ </Button>
114
+ <Button onClick={onContinue}>{t("continueWithWarnings")}</Button>
115
+ </>
116
+ )}
117
+ </DialogFooter>
118
+ </DialogContent>
119
+ </Dialog>
120
+ );
121
+ }
122
+
123
+ // One collapsible group of diagnostics — used for both canvases and the
124
+ // project-scoped buckets (channels/memory/models). Counts are derived here.
125
+ function Section({
126
+ label,
127
+ diagnostics,
128
+ onSelectDiagnostic,
129
+ }: {
130
+ label: string;
131
+ diagnostics: Diagnostic[];
132
+ onSelectDiagnostic?: (diagnostic: Diagnostic) => void;
133
+ }) {
134
+ const [open, setOpen] = useState(true);
135
+ const errorCount = diagnostics.filter((d) => d.severity === "error").length;
136
+ const warningCount = diagnostics.length - errorCount;
137
+
138
+ return (
139
+ <div className="rounded-md border border-border/60">
140
+ <button
141
+ type="button"
142
+ onClick={() => setOpen((v) => !v)}
143
+ className="flex items-center gap-2 w-full px-3 py-2 text-left text-sm hover:bg-accent/50 rounded-t-md"
144
+ >
145
+ <ChevronDown className={cn("w-3.5 h-3.5 shrink-0 transition-transform", !open && "-rotate-90")} />
146
+ <span className="truncate flex-1 font-medium">{label}</span>
147
+ <div className="flex items-center gap-1">
148
+ {errorCount > 0 && (
149
+ <Badge
150
+ variant="outline"
151
+ className="text-[10px] px-1.5 py-0 h-4 leading-4 border-destructive/40 text-destructive bg-card"
152
+ >
153
+ {errorCount}
154
+ </Badge>
155
+ )}
156
+ {warningCount > 0 && (
157
+ <Badge
158
+ variant="outline"
159
+ className="text-[10px] px-1.5 py-0 h-4 leading-4 border-warning/40 text-warning bg-card"
160
+ >
161
+ {warningCount}
162
+ </Badge>
163
+ )}
164
+ </div>
165
+ </button>
166
+ {open && (
167
+ <div className="border-t border-border/40 px-3 py-1.5 flex flex-col gap-0.5">
168
+ {diagnostics.map((diag, i) => (
169
+ <button
170
+ key={i}
171
+ type="button"
172
+ onClick={() => onSelectDiagnostic?.(diag)}
173
+ disabled={!onSelectDiagnostic}
174
+ className="flex items-start gap-1.5 px-1 py-1 text-xs text-left rounded transition-colors enabled:hover:bg-accent/50 enabled:cursor-pointer disabled:cursor-default"
175
+ >
176
+ {diag.severity === "error" ? (
177
+ <AlertTriangle className="w-3.5 h-3.5 text-destructive shrink-0 mt-0.5" />
178
+ ) : (
179
+ <AlertCircle className="w-3.5 h-3.5 text-warning shrink-0 mt-0.5" />
180
+ )}
181
+ <span className="text-muted-foreground">{diag.message}</span>
182
+ </button>
183
+ ))}
184
+ </div>
185
+ )}
186
+ </div>
187
+ );
188
+ }