@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.
- package/LICENSE +661 -661
- package/NOTICE +16 -16
- package/README.md +110 -110
- package/dist/BuilderLayout.d.ts.map +1 -1
- package/dist/BuilderLayout.js +52 -61
- package/dist/BuilderLayout.js.map +1 -1
- package/dist/Canvas.d.ts.map +1 -1
- package/dist/Canvas.js +10 -3
- package/dist/Canvas.js.map +1 -1
- package/dist/CanvasEditor.d.ts.map +1 -1
- package/dist/CanvasEditor.js.map +1 -1
- package/dist/CanvasTabsToolbar.d.ts.map +1 -1
- package/dist/CanvasTabsToolbar.js +3 -0
- package/dist/CanvasTabsToolbar.js.map +1 -1
- package/dist/RightConfigPanel.d.ts.map +1 -1
- package/dist/RightConfigPanel.js +3 -0
- package/dist/RightConfigPanel.js.map +1 -1
- package/dist/WorkflowBuilder.d.ts +7 -13
- package/dist/WorkflowBuilder.d.ts.map +1 -1
- package/dist/WorkflowBuilder.js +25 -13
- package/dist/WorkflowBuilder.js.map +1 -1
- package/dist/cn.d.ts.map +1 -1
- package/dist/cn.js +3 -0
- package/dist/cn.js.map +1 -1
- package/dist/components/ui/add-button.d.ts.map +1 -1
- package/dist/components/ui/add-button.js +3 -0
- package/dist/components/ui/add-button.js.map +1 -1
- package/dist/components/ui/alert-dialog.d.ts.map +1 -1
- package/dist/components/ui/alert-dialog.js +3 -0
- package/dist/components/ui/alert-dialog.js.map +1 -1
- package/dist/components/ui/alert.d.ts.map +1 -1
- package/dist/components/ui/alert.js +3 -0
- package/dist/components/ui/alert.js.map +1 -1
- package/dist/components/ui/badge.d.ts.map +1 -1
- package/dist/components/ui/badge.js.map +1 -1
- package/dist/components/ui/button.d.ts.map +1 -1
- package/dist/components/ui/button.js +3 -0
- package/dist/components/ui/button.js.map +1 -1
- package/dist/components/ui/card.d.ts.map +1 -1
- package/dist/components/ui/card.js +3 -0
- package/dist/components/ui/card.js.map +1 -1
- package/dist/components/ui/checkbox.d.ts.map +1 -1
- package/dist/components/ui/checkbox.js +3 -0
- package/dist/components/ui/checkbox.js.map +1 -1
- package/dist/components/ui/collapsible.d.ts.map +1 -1
- package/dist/components/ui/collapsible.js +3 -0
- package/dist/components/ui/collapsible.js.map +1 -1
- package/dist/components/ui/command.d.ts +2 -2
- package/dist/components/ui/command.d.ts.map +1 -1
- package/dist/components/ui/command.js +3 -0
- package/dist/components/ui/command.js.map +1 -1
- package/dist/components/ui/delete-button.d.ts.map +1 -1
- package/dist/components/ui/delete-button.js +3 -0
- package/dist/components/ui/delete-button.js.map +1 -1
- package/dist/components/ui/dialog.d.ts.map +1 -1
- package/dist/components/ui/dialog.js +3 -0
- package/dist/components/ui/dialog.js.map +1 -1
- package/dist/components/ui/dropdown-menu.d.ts.map +1 -1
- package/dist/components/ui/dropdown-menu.js +3 -0
- package/dist/components/ui/dropdown-menu.js.map +1 -1
- package/dist/components/ui/input.d.ts +1 -1
- package/dist/components/ui/input.d.ts.map +1 -1
- package/dist/components/ui/input.js +3 -0
- package/dist/components/ui/input.js.map +1 -1
- package/dist/components/ui/label.d.ts.map +1 -1
- package/dist/components/ui/label.js +3 -0
- package/dist/components/ui/label.js.map +1 -1
- package/dist/components/ui/readonly-banner.d.ts.map +1 -1
- package/dist/components/ui/readonly-banner.js +3 -0
- package/dist/components/ui/readonly-banner.js.map +1 -1
- package/dist/components/ui/resizable.d.ts +1 -1
- package/dist/components/ui/resizable.d.ts.map +1 -1
- package/dist/components/ui/resizable.js +3 -0
- package/dist/components/ui/resizable.js.map +1 -1
- package/dist/components/ui/scroll-area.d.ts.map +1 -1
- package/dist/components/ui/scroll-area.js +3 -0
- package/dist/components/ui/scroll-area.js.map +1 -1
- package/dist/components/ui/select.d.ts.map +1 -1
- package/dist/components/ui/select.js +3 -0
- package/dist/components/ui/select.js.map +1 -1
- package/dist/components/ui/separator.d.ts.map +1 -1
- package/dist/components/ui/separator.js +3 -0
- package/dist/components/ui/separator.js.map +1 -1
- package/dist/components/ui/switch.d.ts.map +1 -1
- package/dist/components/ui/switch.js +3 -0
- package/dist/components/ui/switch.js.map +1 -1
- package/dist/components/ui/textarea.d.ts +1 -1
- package/dist/components/ui/textarea.d.ts.map +1 -1
- package/dist/components/ui/textarea.js +3 -0
- package/dist/components/ui/textarea.js.map +1 -1
- package/dist/components/ui/toast.d.ts.map +1 -1
- package/dist/components/ui/toast.js +3 -0
- package/dist/components/ui/toast.js.map +1 -1
- package/dist/components/ui/toaster.d.ts.map +1 -1
- package/dist/components/ui/toaster.js +3 -0
- package/dist/components/ui/toaster.js.map +1 -1
- package/dist/components/ui/toggle-group.d.ts.map +1 -1
- package/dist/components/ui/toggle-group.js +3 -0
- package/dist/components/ui/toggle-group.js.map +1 -1
- package/dist/components/ui/toggle.d.ts.map +1 -1
- package/dist/components/ui/toggle.js +3 -0
- package/dist/components/ui/toggle.js.map +1 -1
- package/dist/components/ui/tooltip.d.ts.map +1 -1
- package/dist/components/ui/tooltip.js +3 -0
- package/dist/components/ui/tooltip.js.map +1 -1
- package/dist/dialogs/NodePickerDialog.d.ts.map +1 -1
- package/dist/dialogs/NodePickerDialog.js +3 -0
- package/dist/dialogs/NodePickerDialog.js.map +1 -1
- package/dist/dialogs/ValidationDialog.d.ts.map +1 -1
- package/dist/dialogs/ValidationDialog.js +3 -0
- package/dist/dialogs/ValidationDialog.js.map +1 -1
- package/dist/graph/BaseNode.d.ts.map +1 -1
- package/dist/graph/BaseNode.js +21 -16
- package/dist/graph/BaseNode.js.map +1 -1
- package/dist/graph/CustomEdge.d.ts.map +1 -1
- package/dist/graph/CustomEdge.js +4 -1
- package/dist/graph/CustomEdge.js.map +1 -1
- package/dist/graph/CustomNode.d.ts.map +1 -1
- package/dist/graph/CustomNode.js +3 -0
- package/dist/graph/CustomNode.js.map +1 -1
- package/dist/graph/FunctionCallNode.d.ts.map +1 -1
- package/dist/graph/FunctionCallNode.js.map +1 -1
- package/dist/graph/PortHandle.d.ts.map +1 -1
- package/dist/graph/PortHandle.js.map +1 -1
- package/dist/graph/reactFlowRegistry.d.ts.map +1 -1
- package/dist/graph/reactFlowRegistry.js +3 -0
- package/dist/graph/reactFlowRegistry.js.map +1 -1
- package/dist/hooks/use-toast.d.ts.map +1 -1
- package/dist/hooks/use-toast.js +3 -0
- package/dist/hooks/use-toast.js.map +1 -1
- package/dist/hooks/useAvailableVariables.d.ts.map +1 -1
- package/dist/hooks/useAvailableVariables.js +3 -0
- package/dist/hooks/useAvailableVariables.js.map +1 -1
- package/dist/hooks/useCanvasHistory.d.ts.map +1 -1
- package/dist/hooks/useCanvasHistory.js +3 -0
- package/dist/hooks/useCanvasHistory.js.map +1 -1
- package/dist/hooks/useCanvasTabs.d.ts.map +1 -1
- package/dist/hooks/useCanvasTabs.js +3 -0
- package/dist/hooks/useCanvasTabs.js.map +1 -1
- package/dist/hooks/useFunctionDiagnosticsSync.d.ts.map +1 -1
- package/dist/hooks/useFunctionDiagnosticsSync.js +3 -0
- package/dist/hooks/useFunctionDiagnosticsSync.js.map +1 -1
- package/dist/hooks/useFunctionRegistry.d.ts.map +1 -1
- package/dist/hooks/useFunctionRegistry.js +3 -0
- package/dist/hooks/useFunctionRegistry.js.map +1 -1
- package/dist/hooks/useFunctions.d.ts.map +1 -1
- package/dist/hooks/useFunctions.js +3 -0
- package/dist/hooks/useFunctions.js.map +1 -1
- package/dist/hooks/useGraph.d.ts.map +1 -1
- package/dist/hooks/useGraph.js +3 -0
- package/dist/hooks/useGraph.js.map +1 -1
- package/dist/hooks/useNodeDefinitions.d.ts.map +1 -1
- package/dist/hooks/useNodeDefinitions.js +3 -0
- package/dist/hooks/useNodeDefinitions.js.map +1 -1
- package/dist/hooks/useParamErrors.d.ts.map +1 -1
- package/dist/hooks/useParamErrors.js +3 -0
- package/dist/hooks/useParamErrors.js.map +1 -1
- package/dist/hooks/useResolvedTheme.d.ts.map +1 -1
- package/dist/hooks/useResolvedTheme.js +3 -0
- package/dist/hooks/useResolvedTheme.js.map +1 -1
- package/dist/hooks/useResourceDiagnosticsSync.d.ts.map +1 -1
- package/dist/hooks/useResourceDiagnosticsSync.js +3 -0
- package/dist/hooks/useResourceDiagnosticsSync.js.map +1 -1
- package/dist/hooks/useSuppressThemeTransition.d.ts.map +1 -1
- package/dist/hooks/useSuppressThemeTransition.js +3 -0
- package/dist/hooks/useSuppressThemeTransition.js.map +1 -1
- package/dist/hooks/useWorkflowSerialization.d.ts.map +1 -1
- package/dist/hooks/useWorkflowSerialization.js +3 -0
- package/dist/hooks/useWorkflowSerialization.js.map +1 -1
- package/dist/i18n/index.d.ts.map +1 -1
- package/dist/i18n/index.js +3 -0
- package/dist/i18n/index.js.map +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +3 -0
- package/dist/index.js.map +1 -1
- package/dist/inputs/ExpressionInput.d.ts.map +1 -1
- package/dist/inputs/ExpressionInput.js +3 -0
- package/dist/inputs/ExpressionInput.js.map +1 -1
- package/dist/inputs/ParameterEditor.d.ts.map +1 -1
- package/dist/inputs/ParameterEditor.js +3 -0
- package/dist/inputs/ParameterEditor.js.map +1 -1
- package/dist/inputs/PortSection.d.ts.map +1 -1
- package/dist/inputs/PortSection.js.map +1 -1
- package/dist/mode.d.ts +11 -0
- package/dist/mode.d.ts.map +1 -0
- package/dist/mode.js +8 -0
- package/dist/mode.js.map +1 -0
- package/dist/panels/BuilderSidebar.d.ts.map +1 -1
- package/dist/panels/BuilderSidebar.js +3 -0
- package/dist/panels/BuilderSidebar.js.map +1 -1
- package/dist/panels/ChannelConfigPanel.d.ts.map +1 -1
- package/dist/panels/ChannelConfigPanel.js +3 -0
- package/dist/panels/ChannelConfigPanel.js.map +1 -1
- package/dist/panels/ChannelsPanel.d.ts.map +1 -1
- package/dist/panels/ChannelsPanel.js +3 -0
- package/dist/panels/ChannelsPanel.js.map +1 -1
- package/dist/panels/DebugConsolePanel.d.ts.map +1 -1
- package/dist/panels/DebugConsolePanel.js +3 -0
- package/dist/panels/DebugConsolePanel.js.map +1 -1
- package/dist/panels/DebugContextPanel.d.ts.map +1 -1
- package/dist/panels/DebugContextPanel.js +3 -0
- package/dist/panels/DebugContextPanel.js.map +1 -1
- package/dist/panels/DebugExternalIOPanel.d.ts.map +1 -1
- package/dist/panels/DebugExternalIOPanel.js +3 -0
- package/dist/panels/DebugExternalIOPanel.js.map +1 -1
- package/dist/panels/DiagnosticsPanel.d.ts.map +1 -1
- package/dist/panels/DiagnosticsPanel.js +3 -0
- package/dist/panels/DiagnosticsPanel.js.map +1 -1
- package/dist/panels/EdgeConfigPanel.d.ts.map +1 -1
- package/dist/panels/EdgeConfigPanel.js +4 -1
- package/dist/panels/EdgeConfigPanel.js.map +1 -1
- package/dist/panels/FunctionConfigPanel.d.ts.map +1 -1
- package/dist/panels/FunctionConfigPanel.js +4 -1
- package/dist/panels/FunctionConfigPanel.js.map +1 -1
- package/dist/panels/FunctionListPanel.d.ts.map +1 -1
- package/dist/panels/FunctionListPanel.js +3 -0
- package/dist/panels/FunctionListPanel.js.map +1 -1
- package/dist/panels/MemoryConfigPanel.d.ts.map +1 -1
- package/dist/panels/MemoryConfigPanel.js +3 -0
- package/dist/panels/MemoryConfigPanel.js.map +1 -1
- package/dist/panels/MemoryPanel.d.ts.map +1 -1
- package/dist/panels/MemoryPanel.js +3 -0
- package/dist/panels/MemoryPanel.js.map +1 -1
- package/dist/panels/ModelConfigPanel.d.ts.map +1 -1
- package/dist/panels/ModelConfigPanel.js +3 -0
- package/dist/panels/ModelConfigPanel.js.map +1 -1
- package/dist/panels/ModelsPanel.d.ts.map +1 -1
- package/dist/panels/ModelsPanel.js +3 -0
- package/dist/panels/ModelsPanel.js.map +1 -1
- package/dist/panels/NodeConfigPanel.d.ts.map +1 -1
- package/dist/panels/NodeConfigPanel.js +4 -1
- package/dist/panels/NodeConfigPanel.js.map +1 -1
- package/dist/panels/NodeLibrary.d.ts.map +1 -1
- package/dist/panels/NodeLibrary.js +4 -1
- package/dist/panels/NodeLibrary.js.map +1 -1
- package/dist/panels/ResourceConfigPanel.d.ts.map +1 -1
- package/dist/panels/ResourceConfigPanel.js +4 -1
- package/dist/panels/ResourceConfigPanel.js.map +1 -1
- package/dist/panels/ResourceListPanel.d.ts.map +1 -1
- package/dist/panels/ResourceListPanel.js +4 -1
- package/dist/panels/ResourceListPanel.js.map +1 -1
- package/dist/panels/VariableConfigPanel.d.ts.map +1 -1
- package/dist/panels/VariableConfigPanel.js +4 -1
- package/dist/panels/VariableConfigPanel.js.map +1 -1
- package/dist/panels/VariablesPanel.d.ts.map +1 -1
- package/dist/panels/VariablesPanel.js +4 -1
- package/dist/panels/VariablesPanel.js.map +1 -1
- package/dist/stores/canvasStore.d.ts.map +1 -1
- package/dist/stores/canvasStore.js +3 -0
- package/dist/stores/canvasStore.js.map +1 -1
- package/dist/stores/debugStore.d.ts.map +1 -1
- package/dist/stores/debugStore.js +3 -0
- package/dist/stores/debugStore.js.map +1 -1
- package/dist/stores/diagnosticsStore.d.ts.map +1 -1
- package/dist/stores/diagnosticsStore.js +3 -0
- package/dist/stores/diagnosticsStore.js.map +1 -1
- package/dist/stores/editorStore.d.ts +1 -1
- package/dist/stores/editorStore.d.ts.map +1 -1
- package/dist/stores/editorStore.js +3 -0
- package/dist/stores/editorStore.js.map +1 -1
- package/dist/utils/categoryConstants.d.ts.map +1 -1
- package/dist/utils/categoryConstants.js +3 -0
- package/dist/utils/categoryConstants.js.map +1 -1
- package/dist/utils/channelOperations.d.ts.map +1 -1
- package/dist/utils/channelOperations.js +3 -0
- package/dist/utils/channelOperations.js.map +1 -1
- package/dist/utils/connectionRules.d.ts +3 -1
- package/dist/utils/connectionRules.d.ts.map +1 -1
- package/dist/utils/connectionRules.js +11 -16
- package/dist/utils/connectionRules.js.map +1 -1
- package/dist/utils/functionOperations.d.ts.map +1 -1
- package/dist/utils/functionOperations.js +3 -0
- package/dist/utils/functionOperations.js.map +1 -1
- package/dist/utils/graphOperations.d.ts.map +1 -1
- package/dist/utils/graphOperations.js +3 -0
- package/dist/utils/graphOperations.js.map +1 -1
- package/dist/utils/history.d.ts.map +1 -1
- package/dist/utils/history.js +4 -1
- package/dist/utils/history.js.map +1 -1
- package/dist/utils/memoryOperations.d.ts.map +1 -1
- package/dist/utils/memoryOperations.js +3 -0
- package/dist/utils/memoryOperations.js.map +1 -1
- package/dist/utils/migrateFunctionNodes.d.ts.map +1 -1
- package/dist/utils/migrateFunctionNodes.js +3 -0
- package/dist/utils/migrateFunctionNodes.js.map +1 -1
- package/dist/utils/modelOperations.d.ts.map +1 -1
- package/dist/utils/modelOperations.js +3 -0
- package/dist/utils/modelOperations.js.map +1 -1
- package/dist/utils/paramDisplay.d.ts.map +1 -1
- package/dist/utils/paramDisplay.js +3 -0
- package/dist/utils/paramDisplay.js.map +1 -1
- package/dist/utils/resourceHelpers.d.ts.map +1 -1
- package/dist/utils/resourceHelpers.js +3 -0
- package/dist/utils/resourceHelpers.js.map +1 -1
- package/dist/utils/translation.d.ts.map +1 -1
- package/dist/utils/translation.js +3 -0
- package/dist/utils/translation.js.map +1 -1
- package/dist/utils/variableOperations.d.ts.map +1 -1
- package/dist/utils/variableOperations.js +3 -0
- package/dist/utils/variableOperations.js.map +1 -1
- package/package.json +2 -2
- package/src/BuilderLayout.tsx +338 -345
- package/src/Canvas.tsx +270 -261
- package/src/CanvasEditor.tsx +146 -142
- package/src/CanvasTabsToolbar.tsx +180 -176
- package/src/RightConfigPanel.tsx +270 -266
- package/src/WorkflowBuilder.tsx +423 -408
- package/src/cn.ts +10 -6
- package/src/components/ui/add-button.tsx +43 -39
- package/src/components/ui/alert-dialog.tsx +145 -141
- package/src/components/ui/alert.tsx +63 -59
- package/src/components/ui/badge.tsx +40 -36
- package/src/components/ui/button.tsx +89 -85
- package/src/components/ui/card.tsx +83 -79
- package/src/components/ui/checkbox.tsx +32 -28
- package/src/components/ui/collapsible.tsx +13 -9
- package/src/components/ui/command.tsx +157 -153
- package/src/components/ui/delete-button.tsx +27 -23
- package/src/components/ui/dialog.tsx +129 -125
- package/src/components/ui/dropdown-menu.tsx +202 -198
- package/src/components/ui/input.tsx +59 -55
- package/src/components/ui/label.tsx +28 -24
- package/src/components/ui/readonly-banner.tsx +19 -15
- package/src/components/ui/resizable.tsx +47 -43
- package/src/components/ui/scroll-area.tsx +106 -102
- package/src/components/ui/select.tsx +164 -160
- package/src/components/ui/separator.tsx +33 -29
- package/src/components/ui/switch.tsx +31 -27
- package/src/components/ui/textarea.tsx +55 -51
- package/src/components/ui/toast.tsx +131 -127
- package/src/components/ui/toaster.tsx +37 -33
- package/src/components/ui/toggle-group.tsx +63 -59
- package/src/components/ui/toggle.tsx +47 -43
- package/src/components/ui/tooltip.tsx +36 -32
- package/src/dialogs/NodePickerDialog.tsx +88 -84
- package/src/dialogs/ValidationDialog.tsx +188 -184
- package/src/graph/BaseNode.tsx +563 -557
- package/src/graph/CustomEdge.tsx +189 -185
- package/src/graph/CustomNode.tsx +20 -16
- package/src/graph/FunctionCallNode.tsx +34 -30
- package/src/graph/PortHandle.tsx +193 -189
- package/src/graph/reactFlowRegistry.ts +30 -26
- package/src/hooks/use-toast.ts +129 -125
- package/src/hooks/useAvailableVariables.ts +24 -20
- package/src/hooks/useCanvasHistory.ts +26 -22
- package/src/hooks/useCanvasTabs.ts +172 -168
- package/src/hooks/useFunctionDiagnosticsSync.ts +44 -40
- package/src/hooks/useFunctionRegistry.ts +30 -26
- package/src/hooks/useFunctions.ts +48 -44
- package/src/hooks/useGraph.ts +165 -161
- package/src/hooks/useNodeDefinitions.ts +86 -82
- package/src/hooks/useParamErrors.ts +30 -26
- package/src/hooks/useResolvedTheme.ts +34 -30
- package/src/hooks/useResourceDiagnosticsSync.ts +62 -58
- package/src/hooks/useSuppressThemeTransition.ts +83 -79
- package/src/hooks/useWorkflowSerialization.ts +145 -141
- package/src/i18n/index.ts +57 -53
- package/src/i18n/locales/de.json +501 -501
- package/src/i18n/locales/en.json +557 -557
- package/src/index.ts +31 -27
- package/src/inputs/ExpressionInput.tsx +301 -297
- package/src/inputs/ParameterEditor.tsx +519 -515
- package/src/inputs/PortSection.tsx +148 -144
- package/src/mode.ts +15 -0
- package/src/panels/BuilderSidebar.tsx +305 -301
- package/src/panels/ChannelConfigPanel.tsx +53 -49
- package/src/panels/ChannelsPanel.tsx +32 -28
- package/src/panels/DebugConsolePanel.tsx +77 -73
- package/src/panels/DebugContextPanel.tsx +81 -77
- package/src/panels/DebugExternalIOPanel.tsx +184 -180
- package/src/panels/DiagnosticsPanel.tsx +174 -170
- package/src/panels/EdgeConfigPanel.tsx +108 -104
- package/src/panels/FunctionConfigPanel.tsx +183 -179
- package/src/panels/FunctionListPanel.tsx +49 -45
- package/src/panels/MemoryConfigPanel.tsx +59 -55
- package/src/panels/MemoryPanel.tsx +44 -40
- package/src/panels/ModelConfigPanel.tsx +45 -41
- package/src/panels/ModelsPanel.tsx +40 -36
- package/src/panels/NodeConfigPanel.tsx +634 -630
- package/src/panels/NodeLibrary.tsx +292 -288
- package/src/panels/ResourceConfigPanel.tsx +136 -132
- package/src/panels/ResourceListPanel.tsx +117 -113
- package/src/panels/VariableConfigPanel.tsx +165 -161
- package/src/panels/VariablesPanel.tsx +149 -145
- package/src/stores/canvasStore.test.ts +48 -44
- package/src/stores/canvasStore.ts +249 -245
- package/src/stores/debugStore.ts +78 -74
- package/src/stores/diagnosticsStore.ts +134 -130
- package/src/stores/editorStore.ts +194 -190
- package/src/styles/index.css +526 -526
- package/src/utils/categoryConstants.ts +30 -26
- package/src/utils/channelOperations.ts +90 -86
- package/src/utils/connectionRules.ts +140 -137
- package/src/utils/functionOperations.ts +183 -179
- package/src/utils/graphOperations.ts +554 -550
- package/src/utils/history.test.ts +92 -0
- package/src/utils/history.ts +211 -207
- package/src/utils/memoryOperations.ts +61 -57
- package/src/utils/migrateFunctionNodes.ts +111 -107
- package/src/utils/modelOperations.ts +59 -55
- package/src/utils/paramDisplay.ts +75 -71
- package/src/utils/resourceHelpers.ts +36 -32
- package/src/utils/translation.ts +32 -28
- package/src/utils/variableOperations.ts +79 -75
- package/tailwind-preset.ts +170 -166
- package/dist/lib/utils.d.ts +0 -3
- package/dist/lib/utils.d.ts.map +0 -1
- package/dist/lib/utils.js +0 -6
- package/dist/lib/utils.js.map +0 -1
- package/dist/toolbars/CanvasTabsToolbar.d.ts +0 -11
- package/dist/toolbars/CanvasTabsToolbar.d.ts.map +0 -1
- package/dist/toolbars/CanvasTabsToolbar.js +0 -101
- package/dist/toolbars/CanvasTabsToolbar.js.map +0 -1
|
@@ -1,168 +1,172 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
const
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
if (fn
|
|
39
|
-
changed = true;
|
|
40
|
-
return [
|
|
41
|
-
}
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
const
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
[
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
tabs,
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
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, useCallback, useEffect } from "react";
|
|
6
|
+
import { MAIN_CANVAS_ID } from "../stores/canvasStore";
|
|
7
|
+
import { useEditorStore } from "../stores/editorStore";
|
|
8
|
+
|
|
9
|
+
// Holds info for a canvas tab. id is identical to canvasId.
|
|
10
|
+
export interface CanvasTab {
|
|
11
|
+
id: string;
|
|
12
|
+
label: string;
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
/**
|
|
16
|
+
* Hook for managing canvas tabs UI.
|
|
17
|
+
* Tab switching directly updates the UI store's activeCanvasId.
|
|
18
|
+
*/
|
|
19
|
+
export const useCanvasTabs = () => {
|
|
20
|
+
const [tabs, setTabs] = useState<CanvasTab[]>([{ id: MAIN_CANVAS_ID, label: "Main" }]);
|
|
21
|
+
|
|
22
|
+
// Get active canvas ID and setter from editor store
|
|
23
|
+
const activeCanvasId = useEditorStore((state) => state.activeCanvasId);
|
|
24
|
+
const setActiveCanvas = useEditorStore((state) => state.setActiveCanvas);
|
|
25
|
+
const selectFunction = useEditorStore((state) => state.selectFunction);
|
|
26
|
+
|
|
27
|
+
// Tabs are a projection of the function declarations: a deleted function drops its
|
|
28
|
+
// tab (falling back to Main if it was active), a renamed one relabels. Open/close
|
|
29
|
+
// of an existing function's tab is still explicit (openTab/closeTab) — this only
|
|
30
|
+
// reconciles against the source of truth so the strip can't show a stale function.
|
|
31
|
+
const functions = useEditorStore((state) => state.functions);
|
|
32
|
+
useEffect(() => {
|
|
33
|
+
setTabs((prev) => {
|
|
34
|
+
let changed = false;
|
|
35
|
+
const next = prev.flatMap<CanvasTab>((t) => {
|
|
36
|
+
if (t.id === MAIN_CANVAS_ID) return [t];
|
|
37
|
+
const fn = functions[t.id];
|
|
38
|
+
if (!fn) {
|
|
39
|
+
changed = true;
|
|
40
|
+
return [];
|
|
41
|
+
}
|
|
42
|
+
if (fn.name !== t.label) {
|
|
43
|
+
changed = true;
|
|
44
|
+
return [{ ...t, label: fn.name }];
|
|
45
|
+
}
|
|
46
|
+
return [t];
|
|
47
|
+
});
|
|
48
|
+
return changed ? next : prev;
|
|
49
|
+
});
|
|
50
|
+
if (activeCanvasId !== MAIN_CANVAS_ID && !functions[activeCanvasId]) {
|
|
51
|
+
setActiveCanvas(MAIN_CANVAS_ID);
|
|
52
|
+
}
|
|
53
|
+
}, [functions, activeCanvasId, setActiveCanvas]);
|
|
54
|
+
|
|
55
|
+
// Switch to a tab's canvas. A function tab focuses its declaration (selectFunction
|
|
56
|
+
// switches the canvas AND selects the function so its config panel opens) — matching
|
|
57
|
+
// the dropdown/sidebar open path; any other tab just switches the canvas.
|
|
58
|
+
const setActiveTabId = useCallback(
|
|
59
|
+
(tabId: string) => {
|
|
60
|
+
if (tabId !== MAIN_CANVAS_ID && functions[tabId]) {
|
|
61
|
+
selectFunction(tabId);
|
|
62
|
+
} else {
|
|
63
|
+
setActiveCanvas(tabId);
|
|
64
|
+
}
|
|
65
|
+
},
|
|
66
|
+
[functions, selectFunction, setActiveCanvas],
|
|
67
|
+
);
|
|
68
|
+
|
|
69
|
+
// Open a tab for a function (add if not exists, switch to it)
|
|
70
|
+
const openTab = useCallback(
|
|
71
|
+
(id: string, label: string) => {
|
|
72
|
+
setTabs((prev) => {
|
|
73
|
+
const existing = prev.find((t) => t.id === id);
|
|
74
|
+
if (existing) {
|
|
75
|
+
return prev; // Already exists
|
|
76
|
+
}
|
|
77
|
+
return [...prev, { id, label }];
|
|
78
|
+
});
|
|
79
|
+
setActiveCanvas(id);
|
|
80
|
+
return id;
|
|
81
|
+
},
|
|
82
|
+
[setActiveCanvas],
|
|
83
|
+
);
|
|
84
|
+
|
|
85
|
+
// Close a tab (just removes from visible tabs, does NOT delete canvas data)
|
|
86
|
+
const closeTab = useCallback(
|
|
87
|
+
(tabId: string) => {
|
|
88
|
+
// Cannot close main tab
|
|
89
|
+
if (tabId === MAIN_CANVAS_ID) return;
|
|
90
|
+
|
|
91
|
+
setTabs((prev) => {
|
|
92
|
+
const filtered = prev.filter((t) => t.id !== tabId);
|
|
93
|
+
// If closing active tab, switch to main
|
|
94
|
+
if (tabId === activeCanvasId) {
|
|
95
|
+
setActiveCanvas(MAIN_CANVAS_ID);
|
|
96
|
+
}
|
|
97
|
+
return filtered;
|
|
98
|
+
});
|
|
99
|
+
},
|
|
100
|
+
[activeCanvasId, setActiveCanvas],
|
|
101
|
+
);
|
|
102
|
+
|
|
103
|
+
// Remove a tab completely (called when function is deleted)
|
|
104
|
+
const removeTab = useCallback(
|
|
105
|
+
(tabId: string) => {
|
|
106
|
+
if (tabId === MAIN_CANVAS_ID) return;
|
|
107
|
+
|
|
108
|
+
setTabs((prev) => {
|
|
109
|
+
const filtered = prev.filter((t) => t.id !== tabId);
|
|
110
|
+
// Switch to main canvas if removing active tab
|
|
111
|
+
if (tabId === activeCanvasId) {
|
|
112
|
+
setActiveCanvas(MAIN_CANVAS_ID);
|
|
113
|
+
}
|
|
114
|
+
return filtered;
|
|
115
|
+
});
|
|
116
|
+
},
|
|
117
|
+
[activeCanvasId, setActiveCanvas],
|
|
118
|
+
);
|
|
119
|
+
|
|
120
|
+
const renameTab = useCallback((tabId: string, newLabel: string) => {
|
|
121
|
+
setTabs((prev) => prev.map((t) => (t.id === tabId ? { ...t, label: newLabel } : t)));
|
|
122
|
+
}, []);
|
|
123
|
+
|
|
124
|
+
const reorderTabs = useCallback((fromIndex: number, toIndex: number) => {
|
|
125
|
+
if (fromIndex === 0 || toIndex === 0) return;
|
|
126
|
+
setTabs((prev) => {
|
|
127
|
+
const updated = [...prev];
|
|
128
|
+
const [moved] = updated.splice(fromIndex, 1);
|
|
129
|
+
if (!moved) return prev;
|
|
130
|
+
updated.splice(toIndex, 0, moved);
|
|
131
|
+
return updated;
|
|
132
|
+
});
|
|
133
|
+
}, []);
|
|
134
|
+
|
|
135
|
+
// Reset to main canvas only (closes all function tabs)
|
|
136
|
+
const resetToMain = useCallback(() => {
|
|
137
|
+
setTabs([{ id: MAIN_CANVAS_ID, label: "Main" }]);
|
|
138
|
+
setActiveCanvas(MAIN_CANVAS_ID);
|
|
139
|
+
}, [setActiveCanvas]);
|
|
140
|
+
|
|
141
|
+
// Restore a previously saved tab state
|
|
142
|
+
const restoreTabState = useCallback(
|
|
143
|
+
(savedTabs: CanvasTab[], savedActiveId: string) => {
|
|
144
|
+
setTabs(savedTabs);
|
|
145
|
+
setActiveCanvas(savedActiveId);
|
|
146
|
+
},
|
|
147
|
+
[setActiveCanvas],
|
|
148
|
+
);
|
|
149
|
+
|
|
150
|
+
// Get label for a tab
|
|
151
|
+
const getTabLabel = useCallback(
|
|
152
|
+
(tabId: string) => {
|
|
153
|
+
return tabs.find((t) => t.id === tabId)?.label || "Unknown";
|
|
154
|
+
},
|
|
155
|
+
[tabs],
|
|
156
|
+
);
|
|
157
|
+
|
|
158
|
+
return {
|
|
159
|
+
tabs,
|
|
160
|
+
activeTabId: activeCanvasId,
|
|
161
|
+
setActiveTabId,
|
|
162
|
+
openTab,
|
|
163
|
+
closeTab,
|
|
164
|
+
removeTab,
|
|
165
|
+
renameTab,
|
|
166
|
+
reorderTabs,
|
|
167
|
+
resetToMain,
|
|
168
|
+
restoreTabState,
|
|
169
|
+
getTabLabel,
|
|
170
|
+
isMainCanvas: activeCanvasId === MAIN_CANVAS_ID,
|
|
171
|
+
};
|
|
172
|
+
};
|
|
@@ -1,40 +1,44 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
import {
|
|
6
|
-
import {
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
*
|
|
14
|
-
*
|
|
15
|
-
*
|
|
16
|
-
*
|
|
17
|
-
*
|
|
18
|
-
*
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
}
|
|
39
|
-
|
|
40
|
-
|
|
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 { useEffect } from "react";
|
|
6
|
+
import { validateFunction } from "@foresthubai/workflow-core/diagnostics";
|
|
7
|
+
import { computeAvailableVariables } from "@foresthubai/workflow-core/variable";
|
|
8
|
+
import { useEditorStore } from "../stores/editorStore";
|
|
9
|
+
import { useDiagnosticsStore } from "../stores/diagnosticsStore";
|
|
10
|
+
import { getCanvasStore } from "../stores/canvasStore";
|
|
11
|
+
|
|
12
|
+
/**
|
|
13
|
+
* Keeps the `byFunctionId` diagnostics slot in sync with the function declarations —
|
|
14
|
+
* the single source for the sidebar tab badge, the function list ring, AND the config
|
|
15
|
+
* panel's per-output rings (they all read this slot). Mounted once at the
|
|
16
|
+
* workflow-builder root so it survives tab open/close.
|
|
17
|
+
*
|
|
18
|
+
* Scope-aware: each function is validated against its own body canvas's variables, so
|
|
19
|
+
* invalid/typed return expressions surface here too — not just missing ones. (Reacts
|
|
20
|
+
* to declaration/expression edits via `functions`; a body-only edit that changes the
|
|
21
|
+
* available variables without touching a declaration refreshes on the next
|
|
22
|
+
* declaration change or a full `validate`.)
|
|
23
|
+
*/
|
|
24
|
+
export function useFunctionDiagnosticsSync(): void {
|
|
25
|
+
const functions = useEditorStore((s) => s.functions);
|
|
26
|
+
|
|
27
|
+
useEffect(() => {
|
|
28
|
+
const ds = useDiagnosticsStore.getState();
|
|
29
|
+
|
|
30
|
+
const seen = new Set<string>();
|
|
31
|
+
for (const [id, def] of Object.entries(functions)) {
|
|
32
|
+
seen.add(id);
|
|
33
|
+
const store = getCanvasStore(id);
|
|
34
|
+
const lookup = store
|
|
35
|
+
? computeAvailableVariables(store.getState().variables, store.getState().edges).lookup
|
|
36
|
+
: undefined;
|
|
37
|
+
ds.setFunctionDiagnostics(id, validateFunction(def, lookup));
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
for (const id of Object.keys(ds.byFunctionId)) {
|
|
41
|
+
if (!seen.has(id)) ds.clearFunctionDiagnostics(id);
|
|
42
|
+
}
|
|
43
|
+
}, [functions]);
|
|
44
|
+
}
|
|
@@ -1,26 +1,30 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
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 { useCallback, useMemo } from "react";
|
|
6
|
+
import { useEditorStore } from "../stores/editorStore";
|
|
7
|
+
import type { FunctionDeclaration } from "@foresthubai/workflow-core/function";
|
|
8
|
+
|
|
9
|
+
// Functions are a project-scoped resource: the registry IS editorStore.functions —
|
|
10
|
+
// the domain FunctionDeclaration, no conversion. (Crossing to the flat api FunctionInfo
|
|
11
|
+
// is done only when stamping a call-site snapshot; see useNodeDefinitions/migration.)
|
|
12
|
+
|
|
13
|
+
/**
|
|
14
|
+
* Access to all function declarations by id. Reactive over editorStore.functions.
|
|
15
|
+
* - functions: Record of FunctionDeclaration by id
|
|
16
|
+
* - functionsList: array of FunctionDeclaration
|
|
17
|
+
* - getFunction(id): one declaration by id
|
|
18
|
+
*/
|
|
19
|
+
export function useFunctionRegistry() {
|
|
20
|
+
const functions = useEditorStore((s) => s.functions);
|
|
21
|
+
const functionsList = useMemo(() => Object.values(functions), [functions]);
|
|
22
|
+
const getFunction = useCallback((id: string): FunctionDeclaration | undefined => functions[id], [functions]);
|
|
23
|
+
|
|
24
|
+
return { functions, functionsList, getFunction };
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
/** All function declarations without React subscription (for non-component code). */
|
|
28
|
+
export function getAllFunctions(): Record<string, FunctionDeclaration> {
|
|
29
|
+
return useEditorStore.getState().functions;
|
|
30
|
+
}
|
|
@@ -1,44 +1,48 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
import {
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
/**
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
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 { useCallback } from "react";
|
|
6
|
+
import { useEditorStore } from "../stores/editorStore";
|
|
7
|
+
import { getOrCreateCanvasStore } from "../stores/canvasStore";
|
|
8
|
+
import { useFunctionRegistry } from "./useFunctionRegistry";
|
|
9
|
+
import { addFunction } from "../utils/functionOperations";
|
|
10
|
+
|
|
11
|
+
export interface UseFunctionsOptions {
|
|
12
|
+
/** Open (or focus) a tab for a function canvas. */
|
|
13
|
+
onOpenTab: (id: string, label: string) => void;
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
/**
|
|
17
|
+
* Coordinates the canvas-tab UI with function declarations (editorStore). The
|
|
18
|
+
* declarations themselves are CRUD'd in utils/functionOperations; this hook only
|
|
19
|
+
* handles the open/create flows that must also touch the tab strip and selection.
|
|
20
|
+
*/
|
|
21
|
+
export const useFunctions = ({ onOpenTab }: UseFunctionsOptions) => {
|
|
22
|
+
const { functionsList: functions, getFunction } = useFunctionRegistry();
|
|
23
|
+
const selectFunction = useEditorStore((s) => s.selectFunction);
|
|
24
|
+
|
|
25
|
+
// Open an existing function: ensure its body canvas exists, open its tab, and
|
|
26
|
+
// select it so the right panel shows its definition. onOpenTab switches the active
|
|
27
|
+
// canvas first; selectFunction sets the selection last so it isn't cleared.
|
|
28
|
+
const openFunction = useCallback(
|
|
29
|
+
(functionId: string) => {
|
|
30
|
+
const fn = getFunction(functionId);
|
|
31
|
+
if (!fn) return;
|
|
32
|
+
getOrCreateCanvasStore(functionId);
|
|
33
|
+
onOpenTab(functionId, fn.name);
|
|
34
|
+
selectFunction(functionId);
|
|
35
|
+
},
|
|
36
|
+
[getFunction, onOpenTab, selectFunction],
|
|
37
|
+
);
|
|
38
|
+
|
|
39
|
+
// Create a new function and open it (the canvas body is created by addFunction).
|
|
40
|
+
const createFunction = useCallback(() => {
|
|
41
|
+
const fn = addFunction();
|
|
42
|
+
onOpenTab(fn.id, fn.name);
|
|
43
|
+
selectFunction(fn.id);
|
|
44
|
+
return fn.id;
|
|
45
|
+
}, [onOpenTab, selectFunction]);
|
|
46
|
+
|
|
47
|
+
return { functions, openFunction, createFunction };
|
|
48
|
+
};
|