@flowdrop/flowdrop 1.5.0 → 1.6.0
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/README.md +46 -47
- package/dist/adapters/WorkflowAdapter.d.ts +1 -1
- package/dist/adapters/WorkflowAdapter.js +26 -26
- package/dist/adapters/agentspec/AgentSpecAdapter.d.ts +2 -2
- package/dist/adapters/agentspec/AgentSpecAdapter.js +122 -133
- package/dist/adapters/agentspec/agentAdapter.d.ts +2 -2
- package/dist/adapters/agentspec/agentAdapter.js +10 -10
- package/dist/adapters/agentspec/autoLayout.d.ts +1 -1
- package/dist/adapters/agentspec/autoLayout.js +7 -9
- package/dist/adapters/agentspec/componentTypeDefaults.d.ts +1 -1
- package/dist/adapters/agentspec/componentTypeDefaults.js +120 -120
- package/dist/adapters/agentspec/defaultNodeTypes.d.ts +2 -2
- package/dist/adapters/agentspec/defaultNodeTypes.js +307 -307
- package/dist/adapters/agentspec/index.d.ts +10 -10
- package/dist/adapters/agentspec/index.js +6 -6
- package/dist/adapters/agentspec/validator.d.ts +2 -2
- package/dist/adapters/agentspec/validator.js +20 -22
- package/dist/api/enhanced-client.d.ts +3 -3
- package/dist/api/enhanced-client.js +72 -73
- package/dist/chat/commandClassifier.js +6 -6
- package/dist/chat/index.d.ts +5 -5
- package/dist/chat/index.js +4 -4
- package/dist/chat/responseParser.d.ts +6 -6
- package/dist/chat/responseParser.js +28 -24
- package/dist/commands/batch.d.ts +1 -1
- package/dist/commands/batch.js +5 -7
- package/dist/commands/executor.d.ts +2 -2
- package/dist/commands/executor.js +320 -231
- package/dist/commands/index.d.ts +6 -6
- package/dist/commands/index.js +5 -5
- package/dist/commands/parser.d.ts +1 -1
- package/dist/commands/parser.js +91 -74
- package/dist/commands/positioner.d.ts +2 -2
- package/dist/commands/positioner.js +1 -1
- package/dist/commands/storeIntegration.svelte.d.ts +2 -2
- package/dist/commands/storeIntegration.svelte.js +5 -5
- package/dist/commands/types.d.ts +42 -42
- package/dist/commands/types.js +2 -2
- package/dist/components/App.svelte +240 -294
- package/dist/components/App.svelte.d.ts +9 -9
- package/dist/components/CanvasBanner.stories.svelte +10 -16
- package/dist/components/CanvasBanner.stories.svelte.d.ts +1 -1
- package/dist/components/CanvasBanner.svelte +2 -2
- package/dist/components/CanvasBanner.svelte.d.ts +1 -1
- package/dist/components/CanvasController.svelte +3 -4
- package/dist/components/ConfigForm.svelte +118 -256
- package/dist/components/ConfigForm.svelte.d.ts +2 -2
- package/dist/components/ConfigMappingRow.svelte +7 -9
- package/dist/components/ConfigMappingRow.svelte.d.ts +1 -1
- package/dist/components/ConfigModal.svelte +3 -3
- package/dist/components/ConfigModal.svelte.d.ts +1 -1
- package/dist/components/ConfigPanel.stories.svelte +19 -19
- package/dist/components/ConfigPanel.stories.svelte.d.ts +1 -1
- package/dist/components/ConfigPanel.svelte +9 -20
- package/dist/components/ConfigPanel.svelte.d.ts +1 -1
- package/dist/components/ConnectionLine.svelte +4 -4
- package/dist/components/EdgeRefresher.svelte +1 -1
- package/dist/components/FlowDropEdge.stories.svelte +110 -110
- package/dist/components/FlowDropEdge.svelte +9 -9
- package/dist/components/FlowDropEdge.svelte.d.ts +1 -1
- package/dist/components/FlowDropZone.svelte +6 -9
- package/dist/components/FlowDropZone.svelte.d.ts +1 -1
- package/dist/components/LoadingSpinner.stories.svelte +13 -13
- package/dist/components/LoadingSpinner.stories.svelte.d.ts +1 -1
- package/dist/components/LoadingSpinner.svelte +3 -3
- package/dist/components/LoadingSpinner.svelte.d.ts +1 -1
- package/dist/components/Logo.stories.svelte +4 -4
- package/dist/components/Logo.stories.svelte.d.ts +1 -1
- package/dist/components/Logo.svelte +3 -9
- package/dist/components/LogsSidebar.svelte +41 -48
- package/dist/components/LogsSidebar.svelte.d.ts +1 -1
- package/dist/components/MarkdownDisplay.stories.svelte +10 -14
- package/dist/components/MarkdownDisplay.stories.svelte.d.ts +1 -1
- package/dist/components/MarkdownDisplay.svelte +4 -6
- package/dist/components/Navbar.stories.svelte +19 -19
- package/dist/components/Navbar.stories.svelte.d.ts +1 -1
- package/dist/components/Navbar.svelte +28 -49
- package/dist/components/Navbar.svelte.d.ts +2 -2
- package/dist/components/NodeSidebar.svelte +42 -88
- package/dist/components/NodeSidebar.svelte.d.ts +1 -1
- package/dist/components/NodeStatusOverlay.stories.svelte +19 -31
- package/dist/components/NodeStatusOverlay.stories.svelte.d.ts +1 -1
- package/dist/components/NodeStatusOverlay.svelte +40 -55
- package/dist/components/NodeStatusOverlay.svelte.d.ts +3 -3
- package/dist/components/NodeSwapPicker.svelte +20 -64
- package/dist/components/NodeSwapPicker.svelte.d.ts +1 -1
- package/dist/components/PipelineStatus.svelte +63 -89
- package/dist/components/PipelineStatus.svelte.d.ts +4 -4
- package/dist/components/PortCoordinateTracker.svelte +5 -7
- package/dist/components/PortCoordinateTracker.svelte.d.ts +1 -1
- package/dist/components/PortMappingRow.svelte +20 -24
- package/dist/components/PortMappingRow.svelte.d.ts +2 -2
- package/dist/components/ReadOnlyDetails.svelte +1 -1
- package/dist/components/SchemaForm.stories.svelte +53 -53
- package/dist/components/SchemaForm.stories.svelte.d.ts +1 -1
- package/dist/components/SchemaForm.svelte +24 -51
- package/dist/components/SchemaForm.svelte.d.ts +2 -2
- package/dist/components/SettingsModal.svelte +6 -9
- package/dist/components/SettingsModal.svelte.d.ts +1 -1
- package/dist/components/SettingsPanel.svelte +138 -158
- package/dist/components/SettingsPanel.svelte.d.ts +1 -1
- package/dist/components/StatusIcon.stories.svelte +16 -29
- package/dist/components/StatusIcon.stories.svelte.d.ts +1 -1
- package/dist/components/StatusIcon.svelte +19 -19
- package/dist/components/StatusIcon.svelte.d.ts +2 -2
- package/dist/components/StatusLabel.stories.svelte +8 -8
- package/dist/components/StatusLabel.stories.svelte.d.ts +1 -1
- package/dist/components/SwapMappingEditor.svelte +35 -56
- package/dist/components/SwapMappingEditor.svelte.d.ts +2 -2
- package/dist/components/ThemeToggle.stories.svelte +10 -10
- package/dist/components/ThemeToggle.stories.svelte.d.ts +1 -1
- package/dist/components/ThemeToggle.svelte +22 -33
- package/dist/components/ThemeToggle.svelte.d.ts +1 -1
- package/dist/components/UniversalNode.svelte +29 -41
- package/dist/components/UniversalNode.svelte.d.ts +3 -3
- package/dist/components/WorkflowEditor.svelte +113 -168
- package/dist/components/WorkflowEditor.svelte.d.ts +4 -4
- package/dist/components/chat/AIChatPanel.svelte +272 -133
- package/dist/components/chat/AIChatPanel.svelte.d.ts +3 -3
- package/dist/components/chat/CommandPreview.svelte +74 -24
- package/dist/components/chat/CommandPreview.svelte.d.ts +1 -1
- package/dist/components/console/CommandConsole.stories.svelte +71 -53
- package/dist/components/console/CommandConsole.stories.svelte.d.ts +1 -1
- package/dist/components/console/CommandConsole.svelte +39 -35
- package/dist/components/console/CommandConsole.svelte.d.ts +2 -2
- package/dist/components/console/ConsoleAutocomplete.svelte +6 -3
- package/dist/components/console/ConsoleInput.svelte +148 -89
- package/dist/components/console/ConsoleInput.svelte.d.ts +1 -1
- package/dist/components/console/ConsoleOutput.svelte +5 -10
- package/dist/components/console/ConsoleOutput.svelte.d.ts +1 -1
- package/dist/components/console/formatters.d.ts +1 -1
- package/dist/components/console/formatters.js +27 -29
- package/dist/components/form/FormArray.svelte +75 -132
- package/dist/components/form/FormArray.svelte.d.ts +1 -1
- package/dist/components/form/FormAutocomplete.svelte +65 -108
- package/dist/components/form/FormAutocomplete.svelte.d.ts +1 -1
- package/dist/components/form/FormCheckboxGroup.stories.svelte +13 -16
- package/dist/components/form/FormCheckboxGroup.stories.svelte.d.ts +1 -1
- package/dist/components/form/FormCheckboxGroup.svelte +2 -2
- package/dist/components/form/FormCodeEditor.svelte +42 -56
- package/dist/components/form/FormField.svelte +79 -90
- package/dist/components/form/FormField.svelte.d.ts +2 -2
- package/dist/components/form/FormFieldLight.svelte +72 -88
- package/dist/components/form/FormFieldLight.svelte.d.ts +1 -1
- package/dist/components/form/FormFieldWrapper.stories.svelte +14 -14
- package/dist/components/form/FormFieldWrapper.stories.svelte.d.ts +1 -1
- package/dist/components/form/FormFieldWrapper.svelte +2 -9
- package/dist/components/form/FormFieldWrapper.svelte.d.ts +1 -1
- package/dist/components/form/FormFieldset.svelte +3 -3
- package/dist/components/form/FormFieldset.svelte.d.ts +2 -2
- package/dist/components/form/FormMarkdownEditor.svelte +123 -156
- package/dist/components/form/FormNumberField.stories.svelte +18 -18
- package/dist/components/form/FormNumberField.stories.svelte.d.ts +1 -1
- package/dist/components/form/FormNumberField.svelte +6 -6
- package/dist/components/form/FormRangeField.stories.svelte +13 -13
- package/dist/components/form/FormRangeField.stories.svelte.d.ts +1 -1
- package/dist/components/form/FormRangeField.svelte +4 -12
- package/dist/components/form/FormSelect.stories.svelte +21 -21
- package/dist/components/form/FormSelect.stories.svelte.d.ts +1 -1
- package/dist/components/form/FormSelect.svelte +5 -5
- package/dist/components/form/FormSelect.svelte.d.ts +1 -1
- package/dist/components/form/FormTemplateEditor.svelte +126 -175
- package/dist/components/form/FormTemplateEditor.svelte.d.ts +1 -1
- package/dist/components/form/FormTextField.stories.svelte +17 -23
- package/dist/components/form/FormTextField.stories.svelte.d.ts +1 -1
- package/dist/components/form/FormTextField.svelte +4 -4
- package/dist/components/form/FormTextarea.stories.svelte +18 -21
- package/dist/components/form/FormTextarea.stories.svelte.d.ts +1 -1
- package/dist/components/form/FormTextarea.svelte +4 -4
- package/dist/components/form/FormToggle.stories.svelte +13 -16
- package/dist/components/form/FormToggle.stories.svelte.d.ts +1 -1
- package/dist/components/form/FormToggle.svelte +3 -3
- package/dist/components/form/FormUISchemaRenderer.svelte +12 -19
- package/dist/components/form/FormUISchemaRenderer.svelte.d.ts +3 -3
- package/dist/components/form/index.d.ts +19 -19
- package/dist/components/form/index.js +18 -18
- package/dist/components/form/templateAutocomplete.d.ts +2 -2
- package/dist/components/form/templateAutocomplete.js +55 -64
- package/dist/components/form/types.d.ts +6 -6
- package/dist/components/form/types.js +4 -9
- package/dist/components/icons/AlertCircleIcon.svelte +1 -6
- package/dist/components/icons/CogIcon.svelte +1 -6
- package/dist/components/interrupt/ChoicePrompt.stories.svelte +27 -27
- package/dist/components/interrupt/ChoicePrompt.stories.svelte.d.ts +1 -1
- package/dist/components/interrupt/ChoicePrompt.svelte +17 -41
- package/dist/components/interrupt/ChoicePrompt.svelte.d.ts +1 -1
- package/dist/components/interrupt/ConfirmationPrompt.stories.svelte +17 -17
- package/dist/components/interrupt/ConfirmationPrompt.stories.svelte.d.ts +1 -1
- package/dist/components/interrupt/ConfirmationPrompt.svelte +10 -16
- package/dist/components/interrupt/ConfirmationPrompt.svelte.d.ts +1 -1
- package/dist/components/interrupt/FormPrompt.svelte +10 -15
- package/dist/components/interrupt/FormPrompt.svelte.d.ts +1 -1
- package/dist/components/interrupt/InterruptBubble.svelte +87 -121
- package/dist/components/interrupt/InterruptBubble.svelte.d.ts +2 -2
- package/dist/components/interrupt/ReviewPrompt.stories.svelte +37 -37
- package/dist/components/interrupt/ReviewPrompt.stories.svelte.d.ts +1 -1
- package/dist/components/interrupt/ReviewPrompt.svelte +55 -75
- package/dist/components/interrupt/ReviewPrompt.svelte.d.ts +1 -1
- package/dist/components/interrupt/TextInputPrompt.stories.svelte +16 -17
- package/dist/components/interrupt/TextInputPrompt.stories.svelte.d.ts +1 -1
- package/dist/components/interrupt/TextInputPrompt.svelte +13 -18
- package/dist/components/interrupt/TextInputPrompt.svelte.d.ts +1 -1
- package/dist/components/interrupt/index.d.ts +6 -6
- package/dist/components/interrupt/index.js +6 -6
- package/dist/components/layouts/MainLayout.svelte +46 -84
- package/dist/components/layouts/MainLayout.svelte.d.ts +6 -6
- package/dist/components/nodes/GatewayNode.stories.svelte +64 -65
- package/dist/components/nodes/GatewayNode.svelte +37 -70
- package/dist/components/nodes/GatewayNode.svelte.d.ts +3 -3
- package/dist/components/nodes/IdeaNode.stories.svelte +25 -26
- package/dist/components/nodes/IdeaNode.svelte +22 -36
- package/dist/components/nodes/IdeaNode.svelte.d.ts +1 -1
- package/dist/components/nodes/NotesNode.stories.svelte +37 -38
- package/dist/components/nodes/NotesNode.svelte +28 -39
- package/dist/components/nodes/NotesNode.svelte.d.ts +1 -1
- package/dist/components/nodes/SimpleNode.stories.svelte +137 -138
- package/dist/components/nodes/SimpleNode.svelte +44 -74
- package/dist/components/nodes/SimpleNode.svelte.d.ts +1 -1
- package/dist/components/nodes/SquareNode.stories.svelte +75 -75
- package/dist/components/nodes/SquareNode.svelte +42 -68
- package/dist/components/nodes/SquareNode.svelte.d.ts +1 -1
- package/dist/components/nodes/TerminalNode.stories.svelte +10 -10
- package/dist/components/nodes/TerminalNode.svelte +74 -112
- package/dist/components/nodes/TerminalNode.svelte.d.ts +1 -1
- package/dist/components/nodes/ToolNode.stories.svelte +115 -116
- package/dist/components/nodes/ToolNode.svelte +31 -64
- package/dist/components/nodes/ToolNode.svelte.d.ts +1 -1
- package/dist/components/nodes/WorkflowNode.stories.svelte +84 -89
- package/dist/components/nodes/WorkflowNode.svelte +50 -103
- package/dist/components/nodes/WorkflowNode.svelte.d.ts +3 -3
- package/dist/components/playground/ChatPanel.svelte +47 -103
- package/dist/components/playground/ExecutionLogs.svelte +45 -68
- package/dist/components/playground/InputCollector.svelte +32 -51
- package/dist/components/playground/MessageBubble.stories.svelte +25 -25
- package/dist/components/playground/MessageBubble.stories.svelte.d.ts +1 -1
- package/dist/components/playground/MessageBubble.svelte +54 -70
- package/dist/components/playground/MessageBubble.svelte.d.ts +1 -1
- package/dist/components/playground/Playground.svelte +60 -91
- package/dist/components/playground/Playground.svelte.d.ts +3 -3
- package/dist/components/playground/PlaygroundModal.svelte +8 -12
- package/dist/components/playground/PlaygroundModal.svelte.d.ts +3 -3
- package/dist/components/playground/SessionManager.svelte +34 -40
- package/dist/components/playground/SessionManager.svelte.d.ts +1 -1
- package/dist/config/agentSpecEndpoints.d.ts +1 -1
- package/dist/config/agentSpecEndpoints.js +20 -20
- package/dist/config/constants.js +2 -2
- package/dist/config/defaultCategories.d.ts +1 -1
- package/dist/config/defaultCategories.js +86 -86
- package/dist/config/defaultPortConfig.d.ts +1 -1
- package/dist/config/defaultPortConfig.js +144 -144
- package/dist/config/endpoints.d.ts +4 -4
- package/dist/config/endpoints.js +68 -68
- package/dist/config/runtimeConfig.d.ts +2 -2
- package/dist/config/runtimeConfig.js +8 -8
- package/dist/core/index.d.ts +68 -68
- package/dist/core/index.js +38 -38
- package/dist/display/index.d.ts +2 -2
- package/dist/display/index.js +2 -2
- package/dist/editor/index.d.ts +64 -64
- package/dist/editor/index.js +54 -54
- package/dist/form/code.d.ts +5 -5
- package/dist/form/code.js +14 -14
- package/dist/form/fieldRegistry.d.ts +3 -3
- package/dist/form/fieldRegistry.js +9 -11
- package/dist/form/full.d.ts +8 -8
- package/dist/form/full.js +9 -9
- package/dist/form/index.d.ts +18 -18
- package/dist/form/index.js +16 -16
- package/dist/form/markdown.d.ts +4 -4
- package/dist/form/markdown.js +8 -8
- package/dist/helpers/proximityConnect.d.ts +3 -3
- package/dist/helpers/proximityConnect.js +32 -34
- package/dist/helpers/workflowEditorHelper.d.ts +6 -6
- package/dist/helpers/workflowEditorHelper.js +64 -68
- package/dist/index.d.ts +6 -6
- package/dist/index.js +6 -6
- package/dist/mocks/app-environment.js +2 -2
- package/dist/mocks/app-forms.js +1 -1
- package/dist/mocks/app-navigation.js +2 -2
- package/dist/mocks/app-stores.js +3 -3
- package/dist/playground/index.d.ts +19 -19
- package/dist/playground/index.js +16 -16
- package/dist/playground/mount.d.ts +3 -3
- package/dist/playground/mount.js +24 -24
- package/dist/registry/builtinFormats.js +13 -13
- package/dist/registry/builtinNodes.d.ts +2 -2
- package/dist/registry/builtinNodes.js +77 -77
- package/dist/registry/index.d.ts +4 -4
- package/dist/registry/index.js +4 -4
- package/dist/registry/nodeComponentRegistry.d.ts +8 -8
- package/dist/registry/nodeComponentRegistry.js +9 -11
- package/dist/registry/plugin.d.ts +2 -2
- package/dist/registry/plugin.js +11 -11
- package/dist/registry/workflowFormatRegistry.d.ts +3 -3
- package/dist/registry/workflowFormatRegistry.js +2 -2
- package/dist/schema/index.d.ts +1 -1
- package/dist/schema/index.js +2 -2
- package/dist/services/agentSpecExecutionService.d.ts +3 -3
- package/dist/services/agentSpecExecutionService.js +55 -56
- package/dist/services/api.d.ts +2 -2
- package/dist/services/api.js +37 -37
- package/dist/services/apiVariableService.d.ts +1 -1
- package/dist/services/apiVariableService.js +34 -41
- package/dist/services/autoSaveService.js +8 -8
- package/dist/services/categoriesApi.d.ts +2 -2
- package/dist/services/categoriesApi.js +8 -8
- package/dist/services/chatService.d.ts +1 -1
- package/dist/services/chatService.js +18 -18
- package/dist/services/draftStorage.d.ts +1 -1
- package/dist/services/draftStorage.js +11 -11
- package/dist/services/dynamicSchemaService.d.ts +1 -1
- package/dist/services/dynamicSchemaService.js +39 -41
- package/dist/services/globalSave.d.ts +2 -2
- package/dist/services/globalSave.js +38 -41
- package/dist/services/historyService.d.ts +1 -1
- package/dist/services/historyService.js +10 -10
- package/dist/services/interruptService.d.ts +1 -1
- package/dist/services/interruptService.js +29 -35
- package/dist/services/nodeExecutionService.d.ts +1 -1
- package/dist/services/nodeExecutionService.js +44 -45
- package/dist/services/playgroundService.d.ts +1 -1
- package/dist/services/playgroundService.js +29 -29
- package/dist/services/portConfigApi.d.ts +2 -2
- package/dist/services/portConfigApi.js +8 -8
- package/dist/services/settingsService.d.ts +2 -2
- package/dist/services/settingsService.js +19 -25
- package/dist/services/toastService.d.ts +4 -4
- package/dist/services/toastService.js +33 -33
- package/dist/services/variableService.d.ts +1 -1
- package/dist/services/variableService.js +36 -36
- package/dist/services/workflowStorage.d.ts +2 -2
- package/dist/services/workflowStorage.js +13 -13
- package/dist/settings/index.d.ts +7 -7
- package/dist/settings/index.js +6 -6
- package/dist/skins/default.d.ts +1 -1
- package/dist/skins/default.js +1 -1
- package/dist/skins/index.d.ts +3 -3
- package/dist/skins/index.js +7 -7
- package/dist/skins/slate.d.ts +1 -1
- package/dist/skins/slate.js +69 -69
- package/dist/stores/categoriesStore.svelte.d.ts +1 -1
- package/dist/stores/categoriesStore.svelte.js +5 -5
- package/dist/stores/editorStateMachine.svelte.d.ts +2 -2
- package/dist/stores/editorStateMachine.svelte.js +34 -34
- package/dist/stores/historyStore.svelte.d.ts +4 -4
- package/dist/stores/historyStore.svelte.js +4 -4
- package/dist/stores/interruptStore.svelte.d.ts +3 -3
- package/dist/stores/interruptStore.svelte.js +21 -21
- package/dist/stores/playgroundStore.svelte.d.ts +2 -2
- package/dist/stores/playgroundStore.svelte.js +18 -21
- package/dist/stores/portCoordinateStore.svelte.d.ts +2 -2
- package/dist/stores/portCoordinateStore.svelte.js +10 -13
- package/dist/stores/settingsStore.svelte.d.ts +2 -2
- package/dist/stores/settingsStore.svelte.js +57 -62
- package/dist/stores/workflowStore.svelte.d.ts +3 -3
- package/dist/stores/workflowStore.svelte.js +46 -47
- package/dist/stories/CanvasDecorator.svelte +7 -10
- package/dist/stories/CanvasDecorator.svelte.d.ts +2 -2
- package/dist/stories/EdgeDecorator.svelte +28 -31
- package/dist/stories/EdgeDecorator.svelte.d.ts +1 -1
- package/dist/stories/NodeDecorator.svelte +14 -20
- package/dist/stories/NodeDecorator.svelte.d.ts +1 -1
- package/dist/stories/utils.d.ts +2 -2
- package/dist/stories/utils.js +89 -93
- package/dist/styles/base.css +16 -50
- package/dist/styles/tokens.css +10 -28
- package/dist/svelte-app.d.ts +10 -10
- package/dist/svelte-app.js +39 -39
- package/dist/themes/default.d.ts +1 -1
- package/dist/themes/default.js +4 -4
- package/dist/themes/index.d.ts +3 -3
- package/dist/themes/index.js +11 -11
- package/dist/themes/minimal.d.ts +1 -1
- package/dist/themes/minimal.js +5 -5
- package/dist/types/agentspec.d.ts +18 -18
- package/dist/types/agentspec.js +2 -2
- package/dist/types/auth.d.ts +1 -1
- package/dist/types/auth.js +6 -6
- package/dist/types/chat.d.ts +2 -2
- package/dist/types/config.d.ts +6 -6
- package/dist/types/events.d.ts +3 -3
- package/dist/types/events.js +2 -2
- package/dist/types/index.d.ts +32 -32
- package/dist/types/index.js +6 -6
- package/dist/types/interrupt.d.ts +6 -6
- package/dist/types/interrupt.js +21 -21
- package/dist/types/interruptState.d.ts +12 -12
- package/dist/types/interruptState.js +66 -66
- package/dist/types/playground.d.ts +7 -7
- package/dist/types/playground.js +14 -14
- package/dist/types/settings.d.ts +7 -5
- package/dist/types/settings.js +19 -24
- package/dist/types/skin.d.ts +1 -1
- package/dist/types/theme.d.ts +2 -2
- package/dist/types/uischema.d.ts +4 -4
- package/dist/types/uischema.js +3 -3
- package/dist/utils/colors.d.ts +1 -1
- package/dist/utils/colors.js +95 -97
- package/dist/utils/config.d.ts +2 -2
- package/dist/utils/config.js +48 -48
- package/dist/utils/connections.d.ts +2 -2
- package/dist/utils/connections.js +15 -15
- package/dist/utils/edgeStyling.d.ts +2 -2
- package/dist/utils/edgeStyling.js +36 -39
- package/dist/utils/errors.js +3 -3
- package/dist/utils/fetchWithAuth.d.ts +1 -1
- package/dist/utils/fetchWithAuth.js +2 -2
- package/dist/utils/handleIds.d.ts +2 -2
- package/dist/utils/handleIds.js +8 -8
- package/dist/utils/handlePositioning.d.ts +1 -1
- package/dist/utils/handlePositioning.js +2 -2
- package/dist/utils/icons.d.ts +1 -1
- package/dist/utils/icons.js +74 -74
- package/dist/utils/logger.d.ts +1 -1
- package/dist/utils/logger.js +7 -7
- package/dist/utils/nodeIds.d.ts +1 -1
- package/dist/utils/nodeIds.js +1 -1
- package/dist/utils/nodeStatus.d.ts +1 -1
- package/dist/utils/nodeStatus.js +48 -48
- package/dist/utils/nodeSwap.d.ts +9 -9
- package/dist/utils/nodeSwap.js +52 -58
- package/dist/utils/nodeTypes.d.ts +1 -1
- package/dist/utils/nodeTypes.js +20 -21
- package/dist/utils/nodeWrapper.d.ts +7 -7
- package/dist/utils/nodeWrapper.js +19 -21
- package/dist/utils/performanceUtils.d.ts +1 -1
- package/dist/utils/performanceUtils.js +1 -2
- package/dist/utils/portUtils.d.ts +2 -2
- package/dist/utils/portUtils.js +1 -1
- package/dist/utils/sanitize.js +1 -1
- package/dist/utils/uischema.d.ts +2 -2
- package/dist/utils/uischema.js +8 -8
- package/dist/utils/validation.js +8 -8
- package/package.json +7 -11
|
@@ -13,60 +13,54 @@
|
|
|
13
13
|
BackgroundVariant,
|
|
14
14
|
MiniMap,
|
|
15
15
|
SvelteFlowProvider,
|
|
16
|
-
type ColorMode
|
|
17
|
-
} from
|
|
18
|
-
import
|
|
16
|
+
type ColorMode
|
|
17
|
+
} from '@xyflow/svelte';
|
|
18
|
+
import '@xyflow/svelte/dist/style.css';
|
|
19
19
|
import {
|
|
20
20
|
getResolvedTheme,
|
|
21
21
|
getEditorSettings,
|
|
22
|
-
getBehaviorSettings
|
|
23
|
-
} from
|
|
22
|
+
getBehaviorSettings
|
|
23
|
+
} from '../stores/settingsStore.svelte.js';
|
|
24
24
|
import type {
|
|
25
25
|
WorkflowNode as WorkflowNodeType,
|
|
26
26
|
NodeMetadata,
|
|
27
27
|
Workflow,
|
|
28
|
-
WorkflowEdge
|
|
29
|
-
} from
|
|
30
|
-
import CanvasBanner from
|
|
31
|
-
import CanvasController from
|
|
32
|
-
import FlowDropZone from
|
|
33
|
-
import EdgeRefresher from
|
|
34
|
-
import { tick, untrack } from
|
|
35
|
-
import type { EndpointConfig } from
|
|
36
|
-
import ConnectionLine from
|
|
37
|
-
import FlowDropEdge from
|
|
38
|
-
import {
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
} from "../stores/workflowStore.svelte.js";
|
|
42
|
-
import {
|
|
43
|
-
historyActions,
|
|
44
|
-
setOnRestoreCallback,
|
|
45
|
-
} from "../stores/historyStore.svelte.js";
|
|
46
|
-
import UniversalNode from "./UniversalNode.svelte";
|
|
28
|
+
WorkflowEdge
|
|
29
|
+
} from '../types/index.js';
|
|
30
|
+
import CanvasBanner from './CanvasBanner.svelte';
|
|
31
|
+
import CanvasController from './CanvasController.svelte';
|
|
32
|
+
import FlowDropZone from './FlowDropZone.svelte';
|
|
33
|
+
import EdgeRefresher from './EdgeRefresher.svelte';
|
|
34
|
+
import { tick, untrack } from 'svelte';
|
|
35
|
+
import type { EndpointConfig } from '../config/endpoints.js';
|
|
36
|
+
import ConnectionLine from './ConnectionLine.svelte';
|
|
37
|
+
import FlowDropEdge from './FlowDropEdge.svelte';
|
|
38
|
+
import { getWorkflowStore, workflowActions } from '../stores/workflowStore.svelte.js';
|
|
39
|
+
import { historyActions, setOnRestoreCallback } from '../stores/historyStore.svelte.js';
|
|
40
|
+
import UniversalNode from './UniversalNode.svelte';
|
|
47
41
|
import {
|
|
48
42
|
EdgeStylingHelper,
|
|
49
43
|
NodeOperationsHelper,
|
|
50
44
|
WorkflowOperationsHelper,
|
|
51
|
-
ConfigurationHelper
|
|
52
|
-
} from
|
|
53
|
-
import type { NodeExecutionInfo } from
|
|
54
|
-
import { Toaster } from
|
|
45
|
+
ConfigurationHelper
|
|
46
|
+
} from '../helpers/workflowEditorHelper.js';
|
|
47
|
+
import type { NodeExecutionInfo } from '../types/index.js';
|
|
48
|
+
import { Toaster } from 'svelte-5-french-toast';
|
|
55
49
|
import {
|
|
56
50
|
flowdropToastOptions,
|
|
57
51
|
FLOWDROP_TOASTER_CLASS,
|
|
58
|
-
apiToasts
|
|
59
|
-
} from
|
|
52
|
+
apiToasts
|
|
53
|
+
} from '../services/toastService.js';
|
|
60
54
|
import {
|
|
61
55
|
ProximityConnectHelper,
|
|
62
|
-
type ProximityEdgeCandidate
|
|
63
|
-
} from
|
|
64
|
-
import PortCoordinateTracker from
|
|
65
|
-
import { getPortCoordinateSnapshot } from
|
|
66
|
-
import { logger } from
|
|
67
|
-
import { validateWorkflowData } from
|
|
68
|
-
import { createEditorStateMachine } from
|
|
69
|
-
import Icon from
|
|
56
|
+
type ProximityEdgeCandidate
|
|
57
|
+
} from '../helpers/proximityConnect.js';
|
|
58
|
+
import PortCoordinateTracker from './PortCoordinateTracker.svelte';
|
|
59
|
+
import { getPortCoordinateSnapshot } from '../stores/portCoordinateStore.svelte.js';
|
|
60
|
+
import { logger } from '../utils/logger.js';
|
|
61
|
+
import { validateWorkflowData } from '../utils/validation.js';
|
|
62
|
+
import { createEditorStateMachine } from '../stores/editorStateMachine.svelte.js';
|
|
63
|
+
import Icon from '@iconify/svelte';
|
|
70
64
|
|
|
71
65
|
interface Props {
|
|
72
66
|
nodes?: NodeMetadata[];
|
|
@@ -80,10 +74,7 @@
|
|
|
80
74
|
// New configuration options for pipeline status mode
|
|
81
75
|
lockWorkflow?: boolean;
|
|
82
76
|
readOnly?: boolean;
|
|
83
|
-
nodeStatuses?: Record<
|
|
84
|
-
string,
|
|
85
|
-
"pending" | "running" | "completed" | "error"
|
|
86
|
-
>;
|
|
77
|
+
nodeStatuses?: Record<string, 'pending' | 'running' | 'completed' | 'error'>;
|
|
87
78
|
// Pipeline ID for fetching node execution info from jobs
|
|
88
79
|
pipelineId?: string;
|
|
89
80
|
// Console toggle
|
|
@@ -130,18 +121,15 @@
|
|
|
130
121
|
* Key for SvelteFlow component — changes when workflow ID changes.
|
|
131
122
|
* Forces SvelteFlow to remount with fresh state, allowing fitView to work correctly.
|
|
132
123
|
*/
|
|
133
|
-
let svelteFlowKey = $derived(getWorkflowStore()?.id ??
|
|
124
|
+
let svelteFlowKey = $derived(getWorkflowStore()?.id ?? 'default');
|
|
134
125
|
|
|
135
126
|
/**
|
|
136
127
|
* Derive snap grid configuration from editor settings
|
|
137
128
|
*/
|
|
138
129
|
let snapGrid = $derived(
|
|
139
130
|
getEditorSettings().snapToGrid
|
|
140
|
-
? ([getEditorSettings().gridSize, getEditorSettings().gridSize] as [
|
|
141
|
-
|
|
142
|
-
number,
|
|
143
|
-
])
|
|
144
|
-
: undefined,
|
|
131
|
+
? ([getEditorSettings().gridSize, getEditorSettings().gridSize] as [number, number])
|
|
132
|
+
: undefined
|
|
145
133
|
);
|
|
146
134
|
|
|
147
135
|
/**
|
|
@@ -150,7 +138,7 @@
|
|
|
150
138
|
let initialViewport = $derived({
|
|
151
139
|
zoom: getEditorSettings().defaultZoom,
|
|
152
140
|
x: 0,
|
|
153
|
-
y: 0
|
|
141
|
+
y: 0
|
|
154
142
|
});
|
|
155
143
|
|
|
156
144
|
// ---------------------------------------------------------------------------
|
|
@@ -164,13 +152,10 @@
|
|
|
164
152
|
...node,
|
|
165
153
|
data: {
|
|
166
154
|
...node.data,
|
|
167
|
-
onConfigOpen: props.openConfigSidebar
|
|
168
|
-
}
|
|
155
|
+
onConfigOpen: props.openConfigSidebar
|
|
156
|
+
}
|
|
169
157
|
}));
|
|
170
|
-
const styledEdges = EdgeStylingHelper.updateEdgeStyles(
|
|
171
|
-
workflow.edges,
|
|
172
|
-
nodesWithCallbacks,
|
|
173
|
-
);
|
|
158
|
+
const styledEdges = EdgeStylingHelper.updateEdgeStyles(workflow.edges, nodesWithCallbacks);
|
|
174
159
|
return { nodes: nodesWithCallbacks, edges: styledEdges };
|
|
175
160
|
}
|
|
176
161
|
|
|
@@ -183,7 +168,7 @@
|
|
|
183
168
|
const updatedWorkflow = WorkflowOperationsHelper.updateWorkflow(
|
|
184
169
|
storeValue,
|
|
185
170
|
flowNodes,
|
|
186
|
-
flowEdges
|
|
171
|
+
flowEdges
|
|
187
172
|
);
|
|
188
173
|
workflowActions.updateWorkflow(updatedWorkflow);
|
|
189
174
|
}
|
|
@@ -206,7 +191,7 @@
|
|
|
206
191
|
flowNodes = [];
|
|
207
192
|
flowEdges = [];
|
|
208
193
|
previousSyncedWorkflowId = null;
|
|
209
|
-
untrack(() => machine.send(
|
|
194
|
+
untrack(() => machine.send('WORKFLOW_CLEARED'));
|
|
210
195
|
}
|
|
211
196
|
return;
|
|
212
197
|
}
|
|
@@ -215,9 +200,7 @@
|
|
|
215
200
|
|
|
216
201
|
if (isNewWorkflow) {
|
|
217
202
|
untrack(() =>
|
|
218
|
-
machine.send(
|
|
219
|
-
previousSyncedWorkflowId ? "WORKFLOW_SWITCHED" : "WORKFLOW_LOADED",
|
|
220
|
-
),
|
|
203
|
+
machine.send(previousSyncedWorkflowId ? 'WORKFLOW_SWITCHED' : 'WORKFLOW_LOADED')
|
|
221
204
|
);
|
|
222
205
|
}
|
|
223
206
|
|
|
@@ -233,7 +216,7 @@
|
|
|
233
216
|
}
|
|
234
217
|
|
|
235
218
|
if (isNewWorkflow) {
|
|
236
|
-
untrack(() => machine.send(
|
|
219
|
+
untrack(() => machine.send('LOAD_COMPLETE'));
|
|
237
220
|
}
|
|
238
221
|
});
|
|
239
222
|
|
|
@@ -268,12 +251,12 @@
|
|
|
268
251
|
}
|
|
269
252
|
|
|
270
253
|
// Schedule loading with requestIdleCallback (falls back to setTimeout)
|
|
271
|
-
if (typeof requestIdleCallback !==
|
|
254
|
+
if (typeof requestIdleCallback !== 'undefined') {
|
|
272
255
|
loadExecutionInfoTimeout = requestIdleCallback(
|
|
273
256
|
() => {
|
|
274
257
|
loadNodeExecutionInfo();
|
|
275
258
|
},
|
|
276
|
-
{ timeout: 500 }
|
|
259
|
+
{ timeout: 500 }
|
|
277
260
|
) as unknown as number;
|
|
278
261
|
} else {
|
|
279
262
|
loadExecutionInfoTimeout = setTimeout(() => {
|
|
@@ -287,14 +270,14 @@
|
|
|
287
270
|
// ---------------------------------------------------------------------------
|
|
288
271
|
$effect(() => {
|
|
289
272
|
setOnRestoreCallback((restoredWorkflow: Workflow) => {
|
|
290
|
-
machine.send(
|
|
273
|
+
machine.send('START_RESTORE');
|
|
291
274
|
// Update the store (effect is suppressed during 'restoring')
|
|
292
275
|
workflowActions.restoreFromHistory(restoredWorkflow);
|
|
293
276
|
// Derive flowNodes/flowEdges directly for immediate visual update
|
|
294
277
|
const derived = buildFlowNodesFromStore(restoredWorkflow);
|
|
295
278
|
flowNodes = derived.nodes;
|
|
296
279
|
flowEdges = derived.edges;
|
|
297
|
-
machine.send(
|
|
280
|
+
machine.send('RESTORE_COMPLETE');
|
|
298
281
|
// After RESTORE_COMPLETE → idle, the sync effect runs but produces
|
|
299
282
|
// the same data (no-op re-derive).
|
|
300
283
|
});
|
|
@@ -316,15 +299,15 @@
|
|
|
316
299
|
|
|
317
300
|
const executionInfo = await NodeOperationsHelper.loadNodeExecutionInfo(
|
|
318
301
|
workflow,
|
|
319
|
-
props.pipelineId
|
|
302
|
+
props.pipelineId
|
|
320
303
|
);
|
|
321
304
|
|
|
322
305
|
if (executionInfoAbortController?.signal.aborted) return;
|
|
323
306
|
|
|
324
307
|
const defaultExecutionInfo: NodeExecutionInfo = {
|
|
325
|
-
status:
|
|
308
|
+
status: 'idle' as const,
|
|
326
309
|
executionCount: 0,
|
|
327
|
-
isExecuting: false
|
|
310
|
+
isExecuting: false
|
|
328
311
|
};
|
|
329
312
|
|
|
330
313
|
// Update flowNodes with execution info (visual-only, no store sync needed)
|
|
@@ -332,14 +315,14 @@
|
|
|
332
315
|
...node,
|
|
333
316
|
data: {
|
|
334
317
|
...node.data,
|
|
335
|
-
executionInfo: executionInfo[node.id] || defaultExecutionInfo
|
|
336
|
-
}
|
|
318
|
+
executionInfo: executionInfo[node.id] || defaultExecutionInfo
|
|
319
|
+
}
|
|
337
320
|
}));
|
|
338
321
|
|
|
339
322
|
executionInfoAbortController = null;
|
|
340
323
|
} catch (error) {
|
|
341
|
-
if (error instanceof Error && error.name !==
|
|
342
|
-
logger.error(
|
|
324
|
+
if (error instanceof Error && error.name !== 'AbortError') {
|
|
325
|
+
logger.error('Failed to load node execution info:', error);
|
|
343
326
|
}
|
|
344
327
|
}
|
|
345
328
|
}
|
|
@@ -351,12 +334,12 @@
|
|
|
351
334
|
// Node types for Svelte Flow - using UniversalNode for all node types
|
|
352
335
|
// All nodes use 'universalNode' type, and UniversalNode handles internal switching
|
|
353
336
|
const nodeTypes = {
|
|
354
|
-
universalNode: UniversalNode
|
|
337
|
+
universalNode: UniversalNode
|
|
355
338
|
};
|
|
356
339
|
|
|
357
340
|
// Use custom edge that shortens the path so the stroke ends at the arrow base
|
|
358
341
|
const edgeTypes = {
|
|
359
|
-
default: FlowDropEdge
|
|
342
|
+
default: FlowDropEdge
|
|
360
343
|
};
|
|
361
344
|
|
|
362
345
|
// Handle arrows in our custom connection handler
|
|
@@ -370,7 +353,7 @@
|
|
|
370
353
|
* position updates. SvelteFlow mutates flowNodes directly via bind:nodes.
|
|
371
354
|
*/
|
|
372
355
|
function handleNodeDragStart(): void {
|
|
373
|
-
machine.send(
|
|
356
|
+
machine.send('START_DRAG');
|
|
374
357
|
// Clear any leftover proximity previews
|
|
375
358
|
currentProximityCandidates = [];
|
|
376
359
|
}
|
|
@@ -381,7 +364,7 @@
|
|
|
381
364
|
* Uses port-to-port distance via the port coordinate store.
|
|
382
365
|
*/
|
|
383
366
|
function handleNodeDrag({
|
|
384
|
-
targetNode
|
|
367
|
+
targetNode
|
|
385
368
|
}: {
|
|
386
369
|
targetNode: WorkflowNodeType | null;
|
|
387
370
|
nodes: WorkflowNodeType[];
|
|
@@ -415,13 +398,13 @@
|
|
|
415
398
|
targetNode.id,
|
|
416
399
|
portCoordinates,
|
|
417
400
|
baseEdges,
|
|
418
|
-
getEditorSettings().proximityConnectDistance
|
|
401
|
+
getEditorSettings().proximityConnectDistance
|
|
419
402
|
)
|
|
420
403
|
: ProximityConnectHelper.findCompatibleEdges(
|
|
421
404
|
targetNode,
|
|
422
405
|
flowNodes,
|
|
423
406
|
baseEdges,
|
|
424
|
-
getEditorSettings().proximityConnectDistance
|
|
407
|
+
getEditorSettings().proximityConnectDistance
|
|
425
408
|
);
|
|
426
409
|
|
|
427
410
|
// Create preview edges
|
|
@@ -442,24 +425,17 @@
|
|
|
442
425
|
portCoordNodeToUpdate = null;
|
|
443
426
|
|
|
444
427
|
// Finalize proximity connect if there are candidates
|
|
445
|
-
if (
|
|
446
|
-
getEditorSettings().proximityConnect &&
|
|
447
|
-
currentProximityCandidates.length > 0
|
|
448
|
-
) {
|
|
428
|
+
if (getEditorSettings().proximityConnect && currentProximityCandidates.length > 0) {
|
|
449
429
|
const baseEdges = ProximityConnectHelper.removePreviewEdges(flowEdges);
|
|
450
430
|
const permanentEdges = ProximityConnectHelper.createPermanentEdges(
|
|
451
|
-
currentProximityCandidates
|
|
431
|
+
currentProximityCandidates
|
|
452
432
|
);
|
|
453
433
|
|
|
454
434
|
for (const edge of permanentEdges) {
|
|
455
435
|
const sourceNode = flowNodes.find((n) => n.id === edge.source);
|
|
456
436
|
const targetNode = flowNodes.find((n) => n.id === edge.target);
|
|
457
437
|
if (sourceNode && targetNode) {
|
|
458
|
-
EdgeStylingHelper.applyConnectionStyling(
|
|
459
|
-
edge,
|
|
460
|
-
sourceNode,
|
|
461
|
-
targetNode,
|
|
462
|
-
);
|
|
438
|
+
EdgeStylingHelper.applyConnectionStyling(edge, sourceNode, targetNode);
|
|
463
439
|
}
|
|
464
440
|
}
|
|
465
441
|
|
|
@@ -473,11 +449,11 @@
|
|
|
473
449
|
// Push history AFTER the drag completed
|
|
474
450
|
const storeValue = getWorkflowStore();
|
|
475
451
|
if (storeValue) {
|
|
476
|
-
workflowActions.pushHistory(
|
|
452
|
+
workflowActions.pushHistory('Move node', storeValue);
|
|
477
453
|
}
|
|
478
454
|
|
|
479
455
|
// Transition to idle — sync effect is now unblocked
|
|
480
|
-
machine.send(
|
|
456
|
+
machine.send('STOP_DRAG');
|
|
481
457
|
}
|
|
482
458
|
|
|
483
459
|
/**
|
|
@@ -489,7 +465,7 @@
|
|
|
489
465
|
sourceHandle?: string;
|
|
490
466
|
targetHandle?: string;
|
|
491
467
|
}): Promise<void> {
|
|
492
|
-
machine.send(
|
|
468
|
+
machine.send('START_CONNECT');
|
|
493
469
|
|
|
494
470
|
// SvelteFlow auto-creates the edge via bind:edges — wait for DOM update
|
|
495
471
|
await tick();
|
|
@@ -502,10 +478,10 @@
|
|
|
502
478
|
|
|
503
479
|
const storeValue = getWorkflowStore();
|
|
504
480
|
if (storeValue) {
|
|
505
|
-
workflowActions.pushHistory(
|
|
481
|
+
workflowActions.pushHistory('Add connection', storeValue);
|
|
506
482
|
}
|
|
507
483
|
|
|
508
|
-
machine.send(
|
|
484
|
+
machine.send('CONNECTION_MADE');
|
|
509
485
|
}
|
|
510
486
|
|
|
511
487
|
/**
|
|
@@ -527,17 +503,17 @@
|
|
|
527
503
|
const edgeCount = params.edges.length;
|
|
528
504
|
|
|
529
505
|
// Build a descriptive message
|
|
530
|
-
let message =
|
|
506
|
+
let message = 'Are you sure you want to delete ';
|
|
531
507
|
const parts: string[] = [];
|
|
532
508
|
|
|
533
509
|
if (nodeCount > 0) {
|
|
534
|
-
parts.push(`${nodeCount} node${nodeCount > 1 ?
|
|
510
|
+
parts.push(`${nodeCount} node${nodeCount > 1 ? 's' : ''}`);
|
|
535
511
|
}
|
|
536
512
|
if (edgeCount > 0) {
|
|
537
|
-
parts.push(`${edgeCount} connection${edgeCount > 1 ?
|
|
513
|
+
parts.push(`${edgeCount} connection${edgeCount > 1 ? 's' : ''}`);
|
|
538
514
|
}
|
|
539
515
|
|
|
540
|
-
message += parts.join(
|
|
516
|
+
message += parts.join(' and ') + '?';
|
|
541
517
|
|
|
542
518
|
// Show native confirmation dialog
|
|
543
519
|
const confirmed = window.confirm(message);
|
|
@@ -554,18 +530,14 @@
|
|
|
554
530
|
/**
|
|
555
531
|
* Handle node deletion - automatically remove connected edges and push to history
|
|
556
532
|
*/
|
|
557
|
-
function handleNodesDelete(params: {
|
|
558
|
-
|
|
559
|
-
edges: WorkflowEdge[];
|
|
560
|
-
}): void {
|
|
561
|
-
machine.send("START_DELETE");
|
|
533
|
+
function handleNodesDelete(params: { nodes: WorkflowNodeType[]; edges: WorkflowEdge[] }): void {
|
|
534
|
+
machine.send('START_DELETE');
|
|
562
535
|
|
|
563
536
|
const deletedNodeIds = new Set(params.nodes.map((node) => node.id));
|
|
564
537
|
|
|
565
538
|
// Filter out edges connected to deleted nodes
|
|
566
539
|
flowEdges = flowEdges.filter(
|
|
567
|
-
(edge) =>
|
|
568
|
-
!deletedNodeIds.has(edge.source) && !deletedNodeIds.has(edge.target),
|
|
540
|
+
(edge) => !deletedNodeIds.has(edge.source) && !deletedNodeIds.has(edge.target)
|
|
569
541
|
);
|
|
570
542
|
|
|
571
543
|
// Sync to store
|
|
@@ -574,20 +546,20 @@
|
|
|
574
546
|
// Push to history AFTER the deletion so undo restores the previous state
|
|
575
547
|
const nodeCount = params.nodes.length;
|
|
576
548
|
const edgeCount = params.edges.length;
|
|
577
|
-
let description =
|
|
549
|
+
let description = 'Delete';
|
|
578
550
|
if (nodeCount > 0 && edgeCount > 0) {
|
|
579
|
-
description = `Delete ${nodeCount} node${nodeCount > 1 ?
|
|
551
|
+
description = `Delete ${nodeCount} node${nodeCount > 1 ? 's' : ''} and ${edgeCount} connection${edgeCount > 1 ? 's' : ''}`;
|
|
580
552
|
} else if (nodeCount > 0) {
|
|
581
|
-
description = `Delete ${nodeCount} node${nodeCount > 1 ?
|
|
553
|
+
description = `Delete ${nodeCount} node${nodeCount > 1 ? 's' : ''}`;
|
|
582
554
|
} else if (edgeCount > 0) {
|
|
583
|
-
description = `Delete ${edgeCount} connection${edgeCount > 1 ?
|
|
555
|
+
description = `Delete ${edgeCount} connection${edgeCount > 1 ? 's' : ''}`;
|
|
584
556
|
}
|
|
585
557
|
const storeValue = getWorkflowStore();
|
|
586
558
|
if (storeValue) {
|
|
587
559
|
workflowActions.pushHistory(description, storeValue);
|
|
588
560
|
}
|
|
589
561
|
|
|
590
|
-
machine.send(
|
|
562
|
+
machine.send('DELETE_COMPLETE');
|
|
591
563
|
}
|
|
592
564
|
|
|
593
565
|
// Edge styling will be handled when edges are first created or manually updated
|
|
@@ -613,21 +585,17 @@
|
|
|
613
585
|
*/
|
|
614
586
|
async function handleNodeDrop(
|
|
615
587
|
nodeTypeData: string,
|
|
616
|
-
position: { x: number; y: number }
|
|
588
|
+
position: { x: number; y: number }
|
|
617
589
|
): Promise<void> {
|
|
618
|
-
machine.send(
|
|
590
|
+
machine.send('START_DROP');
|
|
619
591
|
|
|
620
|
-
const newNode = NodeOperationsHelper.createNodeFromDrop(
|
|
621
|
-
nodeTypeData,
|
|
622
|
-
position,
|
|
623
|
-
flowNodes,
|
|
624
|
-
);
|
|
592
|
+
const newNode = NodeOperationsHelper.createNodeFromDrop(nodeTypeData, position, flowNodes);
|
|
625
593
|
|
|
626
594
|
if (newNode) {
|
|
627
595
|
// Add onConfigOpen callback and append to flowNodes for immediate visual feedback
|
|
628
596
|
const nodeWithCallback = {
|
|
629
597
|
...newNode,
|
|
630
|
-
data: { ...newNode.data, onConfigOpen: props.openConfigSidebar }
|
|
598
|
+
data: { ...newNode.data, onConfigOpen: props.openConfigSidebar }
|
|
631
599
|
};
|
|
632
600
|
flowNodes = [...flowNodes, nodeWithCallback];
|
|
633
601
|
|
|
@@ -638,13 +606,13 @@
|
|
|
638
606
|
|
|
639
607
|
const storeValue = getWorkflowStore();
|
|
640
608
|
if (storeValue) {
|
|
641
|
-
workflowActions.pushHistory(
|
|
609
|
+
workflowActions.pushHistory('Add node', storeValue);
|
|
642
610
|
}
|
|
643
611
|
} else {
|
|
644
|
-
logger.warn(
|
|
612
|
+
logger.warn('Failed to create node from drop data');
|
|
645
613
|
}
|
|
646
614
|
|
|
647
|
-
machine.send(
|
|
615
|
+
machine.send('DROP_COMPLETE');
|
|
648
616
|
}
|
|
649
617
|
|
|
650
618
|
/**
|
|
@@ -658,34 +626,27 @@
|
|
|
658
626
|
reader.onload = (event) => {
|
|
659
627
|
try {
|
|
660
628
|
const text = event.target?.result;
|
|
661
|
-
if (typeof text !==
|
|
662
|
-
throw new Error(
|
|
629
|
+
if (typeof text !== 'string') {
|
|
630
|
+
throw new Error('Could not read file contents.');
|
|
663
631
|
}
|
|
664
632
|
const data = JSON.parse(text);
|
|
665
633
|
const validation = validateWorkflowData(data);
|
|
666
634
|
if (!validation.valid) {
|
|
667
|
-
apiToasts.error(
|
|
668
|
-
|
|
669
|
-
validation.error ?? "Invalid workflow JSON",
|
|
670
|
-
);
|
|
671
|
-
logger.warn(
|
|
672
|
-
"Workflow file drop validation failed:",
|
|
673
|
-
validation.error,
|
|
674
|
-
);
|
|
635
|
+
apiToasts.error('Import workflow', validation.error ?? 'Invalid workflow JSON');
|
|
636
|
+
logger.warn('Workflow file drop validation failed:', validation.error);
|
|
675
637
|
return;
|
|
676
638
|
}
|
|
677
639
|
workflowActions.initialize(data as Workflow);
|
|
678
640
|
} catch (error) {
|
|
679
|
-
const errorObj =
|
|
680
|
-
|
|
681
|
-
|
|
682
|
-
apiToasts.error("Import workflow", errorObj.message);
|
|
641
|
+
const errorObj = error instanceof Error ? error : new Error('Unknown error occurred');
|
|
642
|
+
logger.error('Workflow file drop import failed:', errorObj);
|
|
643
|
+
apiToasts.error('Import workflow', errorObj.message);
|
|
683
644
|
}
|
|
684
645
|
};
|
|
685
646
|
reader.onerror = () => {
|
|
686
|
-
const message =
|
|
647
|
+
const message = 'Failed to read the dropped file.';
|
|
687
648
|
logger.error(message);
|
|
688
|
-
apiToasts.error(
|
|
649
|
+
apiToasts.error('Import workflow', message);
|
|
689
650
|
};
|
|
690
651
|
reader.readAsText(file);
|
|
691
652
|
}
|
|
@@ -709,9 +670,9 @@
|
|
|
709
670
|
*/
|
|
710
671
|
export function updateNodeData(
|
|
711
672
|
nodeId: string,
|
|
712
|
-
dataUpdates: Partial<WorkflowNodeType[
|
|
673
|
+
dataUpdates: Partial<WorkflowNodeType['data']>
|
|
713
674
|
): void {
|
|
714
|
-
machine.send(
|
|
675
|
+
machine.send('START_NODE_UPDATE');
|
|
715
676
|
|
|
716
677
|
flowNodes = flowNodes.map((node) => {
|
|
717
678
|
if (node.id === nodeId) {
|
|
@@ -719,14 +680,14 @@
|
|
|
719
680
|
...node,
|
|
720
681
|
data: {
|
|
721
682
|
...node.data,
|
|
722
|
-
...dataUpdates
|
|
723
|
-
}
|
|
683
|
+
...dataUpdates
|
|
684
|
+
}
|
|
724
685
|
};
|
|
725
686
|
}
|
|
726
687
|
return node;
|
|
727
688
|
});
|
|
728
689
|
|
|
729
|
-
machine.send(
|
|
690
|
+
machine.send('UPDATE_COMPLETE');
|
|
730
691
|
}
|
|
731
692
|
|
|
732
693
|
/**
|
|
@@ -794,23 +755,21 @@
|
|
|
794
755
|
// Don't handle shortcuts if user is typing in an input, textarea, or contenteditable
|
|
795
756
|
const target = event.target as HTMLElement;
|
|
796
757
|
const isInputElement =
|
|
797
|
-
target.tagName ===
|
|
798
|
-
target.tagName === "TEXTAREA" ||
|
|
799
|
-
target.isContentEditable;
|
|
758
|
+
target.tagName === 'INPUT' || target.tagName === 'TEXTAREA' || target.isContentEditable;
|
|
800
759
|
|
|
801
760
|
if (isInputElement) {
|
|
802
761
|
return;
|
|
803
762
|
}
|
|
804
763
|
|
|
805
764
|
// Undo: Ctrl+Z (without Shift)
|
|
806
|
-
if (event.key ===
|
|
765
|
+
if (event.key === 'z' && !event.shiftKey) {
|
|
807
766
|
event.preventDefault();
|
|
808
767
|
historyActions.undo();
|
|
809
768
|
return;
|
|
810
769
|
}
|
|
811
770
|
|
|
812
771
|
// Redo: Ctrl+Shift+Z or Ctrl+Y
|
|
813
|
-
if ((event.key ===
|
|
772
|
+
if ((event.key === 'z' && event.shiftKey) || event.key === 'y') {
|
|
814
773
|
event.preventDefault();
|
|
815
774
|
historyActions.redo();
|
|
816
775
|
return;
|
|
@@ -825,10 +784,7 @@
|
|
|
825
784
|
<CanvasController bind:this={canvasControllerRef} />
|
|
826
785
|
|
|
827
786
|
<!-- EdgeRefresher component - handles updateNodeInternals calls -->
|
|
828
|
-
<EdgeRefresher
|
|
829
|
-
{nodeIdToRefresh}
|
|
830
|
-
onRefreshComplete={handleEdgeRefreshComplete}
|
|
831
|
-
/>
|
|
787
|
+
<EdgeRefresher {nodeIdToRefresh} onRefreshComplete={handleEdgeRefreshComplete} />
|
|
832
788
|
|
|
833
789
|
<!-- Port Coordinate Tracker - maintains port positions for proximity connect -->
|
|
834
790
|
<PortCoordinateTracker
|
|
@@ -842,10 +798,7 @@
|
|
|
842
798
|
<div class="flowdrop-workflow-editor__main">
|
|
843
799
|
<!-- Flow Canvas -->
|
|
844
800
|
<div class="flowdrop-canvas">
|
|
845
|
-
<FlowDropZone
|
|
846
|
-
ondrop={handleNodeDrop}
|
|
847
|
-
onfiledrop={handleWorkflowFileDrop}
|
|
848
|
-
>
|
|
801
|
+
<FlowDropZone ondrop={handleNodeDrop} onfiledrop={handleWorkflowFileDrop}>
|
|
849
802
|
{#key svelteFlowKey}
|
|
850
803
|
<SvelteFlow
|
|
851
804
|
bind:nodes={flowNodes}
|
|
@@ -858,7 +811,7 @@
|
|
|
858
811
|
source: connection.source,
|
|
859
812
|
target: connection.target,
|
|
860
813
|
sourceHandle: connection.sourceHandle ?? undefined,
|
|
861
|
-
targetHandle: connection.targetHandle ?? undefined
|
|
814
|
+
targetHandle: connection.targetHandle ?? undefined
|
|
862
815
|
})}
|
|
863
816
|
onbeforedelete={handleBeforeDelete}
|
|
864
817
|
ondelete={handleNodesDelete}
|
|
@@ -894,9 +847,7 @@
|
|
|
894
847
|
gap={getEditorSettings().gridSize}
|
|
895
848
|
bgColor="var(--fd-background)"
|
|
896
849
|
variant={BackgroundVariant.Dots}
|
|
897
|
-
patternColor={getEditorSettings().showGrid
|
|
898
|
-
? undefined
|
|
899
|
-
: "transparent"}
|
|
850
|
+
patternColor={getEditorSettings().showGrid ? undefined : 'transparent'}
|
|
900
851
|
/>
|
|
901
852
|
{#if getEditorSettings().showMinimap}
|
|
902
853
|
<MiniMap />
|
|
@@ -937,18 +888,14 @@
|
|
|
937
888
|
<div class="flowdrop-status-bar" aria-live="polite" aria-atomic="true">
|
|
938
889
|
<div class="flowdrop-status-bar__content">
|
|
939
890
|
<div class="flowdrop-flex flowdrop-gap--4">
|
|
940
|
-
<span class="flowdrop-text--xs flowdrop-text--gray"
|
|
941
|
-
>{flowNodes.length} nodes</span
|
|
942
|
-
>
|
|
891
|
+
<span class="flowdrop-text--xs flowdrop-text--gray">{flowNodes.length} nodes</span>
|
|
943
892
|
<span class="flowdrop-text--xs flowdrop-text--gray">•</span>
|
|
944
|
-
<span class="flowdrop-text--xs flowdrop-text--gray"
|
|
945
|
-
>{flowEdges.length} connections</span
|
|
893
|
+
<span class="flowdrop-text--xs flowdrop-text--gray">{flowEdges.length} connections</span
|
|
946
894
|
>
|
|
947
895
|
|
|
948
896
|
{#if hasCycles}
|
|
949
897
|
<span class="flowdrop-text--xs flowdrop-text--gray">•</span>
|
|
950
|
-
<span
|
|
951
|
-
class="flowdrop-text--xs flowdrop-font--medium flowdrop-text--error"
|
|
898
|
+
<span class="flowdrop-text--xs flowdrop-font--medium flowdrop-text--error"
|
|
952
899
|
>⚠️ Cycles detected</span
|
|
953
900
|
>
|
|
954
901
|
{/if}
|
|
@@ -1085,9 +1032,7 @@
|
|
|
1085
1032
|
:global(.flowdrop-workflow-editor .svelte-flow__edge.selected) {
|
|
1086
1033
|
stroke: var(--fd-primary) !important;
|
|
1087
1034
|
stroke-width: 3 !important;
|
|
1088
|
-
filter: drop-shadow(
|
|
1089
|
-
0 0 4px color-mix(in srgb, var(--fd-primary) 50%, transparent)
|
|
1090
|
-
);
|
|
1035
|
+
filter: drop-shadow(0 0 4px color-mix(in srgb, var(--fd-primary) 50%, transparent));
|
|
1091
1036
|
}
|
|
1092
1037
|
|
|
1093
1038
|
:global(.flowdrop-workflow-editor .svelte-flow__edge.selected path) {
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import
|
|
2
|
-
import type { WorkflowNode as WorkflowNodeType, NodeMetadata } from
|
|
3
|
-
import type { EndpointConfig } from
|
|
1
|
+
import '@xyflow/svelte/dist/style.css';
|
|
2
|
+
import type { WorkflowNode as WorkflowNodeType, NodeMetadata } from '../types/index.js';
|
|
3
|
+
import type { EndpointConfig } from '../config/endpoints.js';
|
|
4
4
|
interface Props {
|
|
5
5
|
nodes?: NodeMetadata[];
|
|
6
6
|
endpointConfig?: EndpointConfig;
|
|
@@ -12,7 +12,7 @@ interface Props {
|
|
|
12
12
|
closeConfigSidebar?: () => void;
|
|
13
13
|
lockWorkflow?: boolean;
|
|
14
14
|
readOnly?: boolean;
|
|
15
|
-
nodeStatuses?: Record<string,
|
|
15
|
+
nodeStatuses?: Record<string, 'pending' | 'running' | 'completed' | 'error'>;
|
|
16
16
|
pipelineId?: string;
|
|
17
17
|
consoleOpen?: boolean;
|
|
18
18
|
onToggleConsole?: () => void;
|