@flowdrop/flowdrop 1.0.1 → 1.1.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 +50 -50
- package/dist/adapters/WorkflowAdapter.d.ts +1 -1
- package/dist/adapters/WorkflowAdapter.js +25 -25
- package/dist/adapters/agentspec/AgentSpecAdapter.d.ts +2 -2
- package/dist/adapters/agentspec/AgentSpecAdapter.js +133 -122
- 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 +2 -2
- 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 +22 -20
- package/dist/api/enhanced-client.d.ts +3 -3
- package/dist/api/enhanced-client.js +73 -72
- package/dist/components/App.svelte +1081 -961
- package/dist/components/App.svelte.d.ts +9 -6
- package/dist/components/CanvasBanner.stories.svelte +23 -20
- package/dist/components/CanvasBanner.stories.svelte.d.ts +1 -1
- package/dist/components/CanvasBanner.svelte +46 -46
- package/dist/components/ConfigForm.svelte +1164 -1065
- package/dist/components/ConfigForm.svelte.d.ts +2 -2
- package/dist/components/ConfigModal.svelte +180 -180
- package/dist/components/ConfigModal.svelte.d.ts +1 -1
- package/dist/components/ConfigPanel.stories.svelte +35 -35
- package/dist/components/ConfigPanel.stories.svelte.d.ts +1 -1
- package/dist/components/ConfigPanel.svelte +178 -167
- package/dist/components/ConfigPanel.svelte.d.ts +1 -1
- package/dist/components/ConnectionLine.svelte +25 -25
- package/dist/components/EdgeRefresher.svelte +26 -26
- package/dist/components/FlowDropEdge.stories.svelte +179 -143
- package/dist/components/FlowDropEdge.svelte +147 -147
- package/dist/components/FlowDropEdge.svelte.d.ts +1 -1
- package/dist/components/FlowDropZone.svelte +63 -60
- package/dist/components/FlowDropZone.svelte.d.ts +1 -1
- package/dist/components/LoadingSpinner.stories.svelte +19 -19
- package/dist/components/LoadingSpinner.stories.svelte.d.ts +1 -1
- package/dist/components/LoadingSpinner.svelte +21 -21
- package/dist/components/LoadingSpinner.svelte.d.ts +1 -1
- package/dist/components/Logo.stories.svelte +13 -13
- package/dist/components/Logo.stories.svelte.d.ts +1 -1
- package/dist/components/Logo.svelte +101 -95
- package/dist/components/LogsSidebar.svelte +553 -546
- package/dist/components/LogsSidebar.svelte.d.ts +1 -1
- package/dist/components/MarkdownDisplay.stories.svelte +29 -23
- package/dist/components/MarkdownDisplay.stories.svelte.d.ts +1 -1
- package/dist/components/MarkdownDisplay.svelte +16 -14
- package/dist/components/Navbar.stories.svelte +43 -38
- package/dist/components/Navbar.stories.svelte.d.ts +1 -1
- package/dist/components/Navbar.svelte +760 -706
- package/dist/components/Navbar.svelte.d.ts +1 -1
- package/dist/components/NodeSidebar.svelte +900 -746
- package/dist/components/NodeSidebar.svelte.d.ts +3 -1
- package/dist/components/NodeStatusOverlay.stories.svelte +82 -70
- package/dist/components/NodeStatusOverlay.stories.svelte.d.ts +1 -1
- package/dist/components/NodeStatusOverlay.svelte +295 -280
- package/dist/components/NodeStatusOverlay.svelte.d.ts +3 -3
- package/dist/components/PipelineStatus.svelte +326 -300
- package/dist/components/PipelineStatus.svelte.d.ts +4 -4
- package/dist/components/PortCoordinateTracker.svelte +49 -47
- package/dist/components/PortCoordinateTracker.svelte.d.ts +1 -1
- package/dist/components/ReadOnlyDetails.svelte +156 -156
- package/dist/components/SchemaForm.stories.svelte +106 -98
- package/dist/components/SchemaForm.stories.svelte.d.ts +1 -1
- package/dist/components/SchemaForm.svelte +490 -463
- package/dist/components/SchemaForm.svelte.d.ts +2 -2
- package/dist/components/SettingsModal.svelte +226 -223
- package/dist/components/SettingsModal.svelte.d.ts +1 -1
- package/dist/components/SettingsPanel.svelte +637 -601
- package/dist/components/SettingsPanel.svelte.d.ts +1 -1
- package/dist/components/StatusIcon.stories.svelte +62 -49
- package/dist/components/StatusIcon.stories.svelte.d.ts +1 -1
- package/dist/components/StatusIcon.svelte +87 -87
- package/dist/components/StatusIcon.svelte.d.ts +2 -2
- package/dist/components/StatusLabel.stories.svelte +12 -12
- package/dist/components/StatusLabel.stories.svelte.d.ts +1 -1
- package/dist/components/StatusLabel.svelte +19 -19
- package/dist/components/ThemeToggle.stories.svelte +16 -16
- package/dist/components/ThemeToggle.stories.svelte.d.ts +1 -1
- package/dist/components/ThemeToggle.svelte +180 -169
- package/dist/components/ThemeToggle.svelte.d.ts +1 -1
- package/dist/components/UniversalNode.svelte +150 -138
- package/dist/components/UniversalNode.svelte.d.ts +3 -3
- package/dist/components/WorkflowEditor.svelte +1069 -1014
- package/dist/components/WorkflowEditor.svelte.d.ts +4 -4
- package/dist/components/form/FormArray.svelte +1034 -973
- package/dist/components/form/FormArray.svelte.d.ts +1 -1
- package/dist/components/form/FormAutocomplete.svelte +1021 -978
- package/dist/components/form/FormAutocomplete.svelte.d.ts +1 -1
- package/dist/components/form/FormCheckboxGroup.stories.svelte +23 -20
- package/dist/components/form/FormCheckboxGroup.stories.svelte.d.ts +1 -1
- package/dist/components/form/FormCheckboxGroup.svelte +136 -136
- package/dist/components/form/FormCodeEditor.svelte +452 -434
- package/dist/components/form/FormField.svelte +366 -355
- package/dist/components/form/FormField.svelte.d.ts +2 -2
- package/dist/components/form/FormFieldLight.svelte +400 -384
- package/dist/components/form/FormFieldLight.svelte.d.ts +1 -1
- package/dist/components/form/FormFieldWrapper.stories.svelte +42 -42
- package/dist/components/form/FormFieldWrapper.stories.svelte.d.ts +1 -1
- package/dist/components/form/FormFieldWrapper.svelte +100 -93
- package/dist/components/form/FormFieldWrapper.svelte.d.ts +1 -1
- package/dist/components/form/FormFieldset.svelte +108 -108
- package/dist/components/form/FormFieldset.svelte.d.ts +2 -2
- package/dist/components/form/FormMarkdownEditor.svelte +758 -725
- package/dist/components/form/FormNumberField.stories.svelte +25 -25
- package/dist/components/form/FormNumberField.stories.svelte.d.ts +1 -1
- package/dist/components/form/FormNumberField.svelte +88 -88
- package/dist/components/form/FormRangeField.stories.svelte +20 -20
- package/dist/components/form/FormRangeField.stories.svelte.d.ts +1 -1
- package/dist/components/form/FormRangeField.svelte +234 -226
- package/dist/components/form/FormSelect.stories.svelte +38 -38
- package/dist/components/form/FormSelect.stories.svelte.d.ts +1 -1
- package/dist/components/form/FormSelect.svelte +101 -101
- package/dist/components/form/FormSelect.svelte.d.ts +1 -1
- package/dist/components/form/FormTemplateEditor.svelte +847 -798
- package/dist/components/form/FormTemplateEditor.svelte.d.ts +1 -1
- package/dist/components/form/FormTextField.stories.svelte +29 -23
- package/dist/components/form/FormTextField.stories.svelte.d.ts +1 -1
- package/dist/components/form/FormTextField.svelte +68 -68
- package/dist/components/form/FormTextarea.stories.svelte +28 -25
- package/dist/components/form/FormTextarea.stories.svelte.d.ts +1 -1
- package/dist/components/form/FormTextarea.svelte +74 -74
- package/dist/components/form/FormToggle.stories.svelte +23 -20
- package/dist/components/form/FormToggle.stories.svelte.d.ts +1 -1
- package/dist/components/form/FormToggle.svelte +98 -98
- package/dist/components/form/FormUISchemaRenderer.svelte +120 -113
- 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 +64 -55
- package/dist/components/form/types.d.ts +6 -6
- package/dist/components/form/types.js +9 -4
- package/dist/components/icons/AlertCircleIcon.svelte +11 -0
- package/dist/components/icons/AlertCircleIcon.svelte.d.ts +26 -0
- package/dist/components/icons/CogIcon.svelte +11 -0
- package/dist/components/icons/CogIcon.svelte.d.ts +26 -0
- package/dist/components/interrupt/ChoicePrompt.stories.svelte +54 -38
- package/dist/components/interrupt/ChoicePrompt.stories.svelte.d.ts +1 -1
- package/dist/components/interrupt/ChoicePrompt.svelte +407 -383
- package/dist/components/interrupt/ChoicePrompt.svelte.d.ts +1 -1
- package/dist/components/interrupt/ConfirmationPrompt.stories.svelte +48 -48
- package/dist/components/interrupt/ConfirmationPrompt.stories.svelte.d.ts +1 -1
- package/dist/components/interrupt/ConfirmationPrompt.svelte +280 -274
- package/dist/components/interrupt/ConfirmationPrompt.svelte.d.ts +1 -1
- package/dist/components/interrupt/FormPrompt.svelte +223 -218
- package/dist/components/interrupt/FormPrompt.svelte.d.ts +1 -1
- package/dist/components/interrupt/InterruptBubble.svelte +617 -583
- package/dist/components/interrupt/InterruptBubble.svelte.d.ts +2 -2
- package/dist/components/interrupt/ReviewPrompt.stories.svelte +66 -56
- package/dist/components/interrupt/ReviewPrompt.stories.svelte.d.ts +1 -1
- package/dist/components/interrupt/ReviewPrompt.svelte +861 -841
- package/dist/components/interrupt/ReviewPrompt.svelte.d.ts +1 -1
- package/dist/components/interrupt/TextInputPrompt.stories.svelte +38 -33
- package/dist/components/interrupt/TextInputPrompt.stories.svelte.d.ts +1 -1
- package/dist/components/interrupt/TextInputPrompt.svelte +333 -328
- package/dist/components/interrupt/TextInputPrompt.svelte.d.ts +1 -1
- package/dist/components/interrupt/index.d.ts +5 -5
- package/dist/components/interrupt/index.js +5 -5
- package/dist/components/layouts/MainLayout.svelte +724 -691
- package/dist/components/layouts/MainLayout.svelte.d.ts +6 -6
- package/dist/components/nodes/GatewayNode.stories.svelte +100 -99
- package/dist/components/nodes/GatewayNode.svelte +605 -571
- package/dist/components/nodes/GatewayNode.svelte.d.ts +3 -3
- package/dist/components/nodes/IdeaNode.stories.svelte +44 -43
- package/dist/components/nodes/IdeaNode.svelte +451 -437
- package/dist/components/nodes/IdeaNode.svelte.d.ts +1 -1
- package/dist/components/nodes/NotesNode.stories.svelte +65 -64
- package/dist/components/nodes/NotesNode.svelte +380 -369
- package/dist/components/nodes/NotesNode.svelte.d.ts +1 -1
- package/dist/components/nodes/SimpleNode.stories.svelte +145 -144
- package/dist/components/nodes/SimpleNode.svelte +486 -424
- package/dist/components/nodes/SimpleNode.svelte.d.ts +1 -1
- package/dist/components/nodes/SquareNode.stories.svelte +73 -73
- package/dist/components/nodes/SquareNode.svelte +439 -380
- package/dist/components/nodes/SquareNode.svelte.d.ts +1 -1
- package/dist/components/nodes/TerminalNode.stories.svelte +13 -13
- package/dist/components/nodes/TerminalNode.svelte +709 -670
- package/dist/components/nodes/TerminalNode.svelte.d.ts +1 -1
- package/dist/components/nodes/ToolNode.stories.svelte +181 -180
- package/dist/components/nodes/ToolNode.svelte +505 -447
- package/dist/components/nodes/ToolNode.svelte.d.ts +1 -1
- package/dist/components/nodes/WorkflowNode.stories.svelte +70 -46
- package/dist/components/nodes/WorkflowNode.svelte +621 -551
- package/dist/components/nodes/WorkflowNode.svelte.d.ts +3 -3
- package/dist/components/playground/ChatPanel.svelte +945 -889
- package/dist/components/playground/ExecutionLogs.svelte +495 -472
- package/dist/components/playground/InputCollector.svelte +449 -428
- package/dist/components/playground/MessageBubble.stories.svelte +47 -47
- package/dist/components/playground/MessageBubble.stories.svelte.d.ts +1 -1
- package/dist/components/playground/MessageBubble.svelte +626 -610
- package/dist/components/playground/MessageBubble.svelte.d.ts +1 -1
- package/dist/components/playground/Playground.svelte +1088 -1057
- package/dist/components/playground/Playground.svelte.d.ts +3 -3
- package/dist/components/playground/PlaygroundModal.svelte +208 -204
- package/dist/components/playground/PlaygroundModal.svelte.d.ts +3 -3
- package/dist/components/playground/SessionManager.svelte +527 -521
- 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 +65 -65
- package/dist/config/runtimeConfig.d.ts +2 -2
- package/dist/config/runtimeConfig.js +8 -8
- package/dist/core/index.d.ts +63 -59
- package/dist/core/index.js +35 -33
- package/dist/display/index.d.ts +2 -2
- package/dist/display/index.js +2 -2
- package/dist/editor/index.d.ts +62 -62
- package/dist/editor/index.js +53 -53
- 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 +11 -9
- 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 +34 -32
- package/dist/helpers/workflowEditorHelper.d.ts +5 -5
- package/dist/helpers/workflowEditorHelper.js +108 -96
- 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 +9 -9
- package/dist/mocks/app-navigation.js +11 -11
- package/dist/mocks/app-stores.js +8 -8
- 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 +11 -9
- 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/schemas/v1/workflow.schema.json +22 -107
- package/dist/services/agentSpecExecutionService.d.ts +3 -3
- package/dist/services/agentSpecExecutionService.js +59 -55
- 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 +41 -34
- 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/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 +41 -39
- package/dist/services/globalSave.d.ts +2 -2
- package/dist/services/globalSave.js +41 -38
- package/dist/services/historyService.d.ts +1 -1
- package/dist/services/historyService.js +8 -8
- package/dist/services/interruptService.d.ts +1 -1
- package/dist/services/interruptService.js +35 -29
- package/dist/services/nodeExecutionService.d.ts +1 -1
- package/dist/services/nodeExecutionService.js +45 -44
- 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 +25 -19
- 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 +2 -0
- package/dist/skins/default.js +1 -0
- package/dist/skins/index.d.ts +13 -0
- package/dist/skins/index.js +30 -0
- package/dist/skins/slate.d.ts +2 -0
- package/dist/skins/slate.js +78 -0
- 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 +65 -33
- 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 +25 -18
- package/dist/stores/portCoordinateStore.svelte.d.ts +2 -2
- package/dist/stores/portCoordinateStore.svelte.js +15 -8
- package/dist/stores/settingsStore.svelte.d.ts +2 -2
- package/dist/stores/settingsStore.svelte.js +62 -57
- package/dist/stores/workflowStore.svelte.d.ts +3 -3
- package/dist/stores/workflowStore.svelte.js +50 -47
- package/dist/stories/CanvasDecorator.svelte +35 -32
- package/dist/stories/CanvasDecorator.svelte.d.ts +2 -2
- package/dist/stories/EdgeDecorator.svelte +102 -99
- package/dist/stories/EdgeDecorator.svelte.d.ts +1 -1
- package/dist/stories/NodeDecorator.svelte +59 -53
- package/dist/stories/NodeDecorator.svelte.d.ts +1 -1
- package/dist/stories/utils.d.ts +2 -2
- package/dist/stories/utils.js +105 -67
- package/dist/styles/base.css +599 -595
- package/dist/styles/toast.css +14 -14
- package/dist/styles/tokens.css +409 -378
- package/dist/svelte-app.d.ts +9 -9
- package/dist/svelte-app.js +39 -39
- package/dist/themes/default.d.ts +2 -0
- package/dist/themes/default.js +9 -0
- package/dist/themes/index.d.ts +13 -0
- package/dist/themes/index.js +44 -0
- package/dist/themes/minimal.d.ts +2 -0
- package/dist/themes/minimal.js +11 -0
- 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/config.d.ts +6 -6
- package/dist/types/events.d.ts +2 -2
- 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 +5 -3
- package/dist/types/settings.js +25 -18
- package/dist/types/skin.d.ts +31 -0
- package/dist/types/skin.js +1 -0
- package/dist/types/theme.d.ts +35 -0
- package/dist/types/theme.js +1 -0
- 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 +97 -95
- 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/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/nodeStatus.d.ts +1 -1
- package/dist/utils/nodeStatus.js +48 -48
- package/dist/utils/nodeTypes.d.ts +1 -1
- package/dist/utils/nodeTypes.js +21 -20
- package/dist/utils/nodeWrapper.d.ts +7 -7
- package/dist/utils/nodeWrapper.js +21 -19
- package/dist/utils/performanceUtils.d.ts +1 -1
- package/dist/utils/performanceUtils.js +2 -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 +20 -8
- package/package.json +1 -1
|
@@ -9,8 +9,8 @@
|
|
|
9
9
|
*
|
|
10
10
|
* @module stores/settingsStore
|
|
11
11
|
*/
|
|
12
|
-
import { DEFAULT_SETTINGS, SETTINGS_STORAGE_KEY } from
|
|
13
|
-
import { logger } from
|
|
12
|
+
import { DEFAULT_SETTINGS, SETTINGS_STORAGE_KEY } from "../types/settings.js";
|
|
13
|
+
import { logger } from "../utils/logger.js";
|
|
14
14
|
// =========================================================================
|
|
15
15
|
// Internal State
|
|
16
16
|
// =========================================================================
|
|
@@ -32,7 +32,7 @@ const changeListeners = new Set();
|
|
|
32
32
|
* @returns Saved settings or null if not found/invalid
|
|
33
33
|
*/
|
|
34
34
|
function loadFromStorage() {
|
|
35
|
-
if (typeof window ===
|
|
35
|
+
if (typeof window === "undefined") {
|
|
36
36
|
return null;
|
|
37
37
|
}
|
|
38
38
|
try {
|
|
@@ -44,7 +44,7 @@ function loadFromStorage() {
|
|
|
44
44
|
}
|
|
45
45
|
}
|
|
46
46
|
catch (error) {
|
|
47
|
-
logger.warn(
|
|
47
|
+
logger.warn("Failed to load settings from localStorage:", error);
|
|
48
48
|
}
|
|
49
49
|
return null;
|
|
50
50
|
}
|
|
@@ -54,14 +54,14 @@ function loadFromStorage() {
|
|
|
54
54
|
* @param settings - Settings to persist
|
|
55
55
|
*/
|
|
56
56
|
function saveToStorage(settings) {
|
|
57
|
-
if (typeof window ===
|
|
57
|
+
if (typeof window === "undefined") {
|
|
58
58
|
return;
|
|
59
59
|
}
|
|
60
60
|
try {
|
|
61
61
|
localStorage.setItem(SETTINGS_STORAGE_KEY, JSON.stringify(settings));
|
|
62
62
|
}
|
|
63
63
|
catch (error) {
|
|
64
|
-
logger.warn(
|
|
64
|
+
logger.warn("Failed to save settings to localStorage:", error);
|
|
65
65
|
}
|
|
66
66
|
}
|
|
67
67
|
// =========================================================================
|
|
@@ -80,7 +80,7 @@ function deepMergeSettings(target, source) {
|
|
|
80
80
|
editor: { ...target.editor },
|
|
81
81
|
ui: { ...target.ui },
|
|
82
82
|
behavior: { ...target.behavior },
|
|
83
|
-
api: { ...target.api }
|
|
83
|
+
api: { ...target.api },
|
|
84
84
|
};
|
|
85
85
|
// Merge theme settings
|
|
86
86
|
if (source.theme) {
|
|
@@ -117,15 +117,15 @@ const initialSettings = loadFromStorage() ?? DEFAULT_SETTINGS;
|
|
|
117
117
|
let storeState = $state({
|
|
118
118
|
settings: initialSettings,
|
|
119
119
|
initialized: true,
|
|
120
|
-
syncStatus:
|
|
120
|
+
syncStatus: "idle",
|
|
121
121
|
lastSyncedAt: null,
|
|
122
|
-
syncError: null
|
|
122
|
+
syncError: null,
|
|
123
123
|
});
|
|
124
124
|
/**
|
|
125
125
|
* System theme preference using $state rune
|
|
126
126
|
* Updates when system preference changes
|
|
127
127
|
*/
|
|
128
|
-
let systemThemeState = $state(typeof window !==
|
|
128
|
+
let systemThemeState = $state(typeof window !== "undefined" ? getSystemTheme() : "light");
|
|
129
129
|
// =========================================================================
|
|
130
130
|
// Getter Functions (replacing derived stores)
|
|
131
131
|
// =========================================================================
|
|
@@ -142,7 +142,7 @@ export function getSyncStatus() {
|
|
|
142
142
|
return {
|
|
143
143
|
status: storeState.syncStatus,
|
|
144
144
|
lastSyncedAt: storeState.lastSyncedAt,
|
|
145
|
-
error: storeState.syncError
|
|
145
|
+
error: storeState.syncError,
|
|
146
146
|
};
|
|
147
147
|
}
|
|
148
148
|
/**
|
|
@@ -187,7 +187,7 @@ export function getTheme() {
|
|
|
187
187
|
* (replaces resolvedTheme derived store)
|
|
188
188
|
*/
|
|
189
189
|
export function getResolvedTheme() {
|
|
190
|
-
if (storeState.settings.theme.preference ===
|
|
190
|
+
if (storeState.settings.theme.preference === "auto") {
|
|
191
191
|
return systemThemeState;
|
|
192
192
|
}
|
|
193
193
|
return storeState.settings.theme.preference;
|
|
@@ -205,10 +205,12 @@ export function getSystemThemeState() {
|
|
|
205
205
|
* Get the system's color scheme preference
|
|
206
206
|
*/
|
|
207
207
|
function getSystemTheme() {
|
|
208
|
-
if (typeof window ===
|
|
209
|
-
return
|
|
208
|
+
if (typeof window === "undefined") {
|
|
209
|
+
return "light";
|
|
210
210
|
}
|
|
211
|
-
return window.matchMedia(
|
|
211
|
+
return window.matchMedia("(prefers-color-scheme: dark)").matches
|
|
212
|
+
? "dark"
|
|
213
|
+
: "light";
|
|
212
214
|
}
|
|
213
215
|
/**
|
|
214
216
|
* Initialize the system theme change listener.
|
|
@@ -217,16 +219,16 @@ function getSystemTheme() {
|
|
|
217
219
|
* @returns Cleanup function that removes the listener
|
|
218
220
|
*/
|
|
219
221
|
export function initThemeListener() {
|
|
220
|
-
if (typeof window ===
|
|
222
|
+
if (typeof window === "undefined") {
|
|
221
223
|
return () => { };
|
|
222
224
|
}
|
|
223
|
-
const mediaQuery = window.matchMedia(
|
|
225
|
+
const mediaQuery = window.matchMedia("(prefers-color-scheme: dark)");
|
|
224
226
|
const handleSystemThemeChange = (event) => {
|
|
225
|
-
systemThemeState = event.matches ?
|
|
227
|
+
systemThemeState = event.matches ? "dark" : "light";
|
|
226
228
|
};
|
|
227
|
-
mediaQuery.addEventListener(
|
|
229
|
+
mediaQuery.addEventListener("change", handleSystemThemeChange);
|
|
228
230
|
return () => {
|
|
229
|
-
mediaQuery.removeEventListener(
|
|
231
|
+
mediaQuery.removeEventListener("change", handleSystemThemeChange);
|
|
230
232
|
};
|
|
231
233
|
}
|
|
232
234
|
// =========================================================================
|
|
@@ -240,14 +242,14 @@ function notifyChange(category, key, previousValue, newValue) {
|
|
|
240
242
|
category,
|
|
241
243
|
key,
|
|
242
244
|
previousValue,
|
|
243
|
-
newValue
|
|
245
|
+
newValue,
|
|
244
246
|
};
|
|
245
247
|
changeListeners.forEach((listener) => {
|
|
246
248
|
try {
|
|
247
249
|
listener(event);
|
|
248
250
|
}
|
|
249
251
|
catch (error) {
|
|
250
|
-
logger.error(
|
|
252
|
+
logger.error("Settings change listener error:", error);
|
|
251
253
|
}
|
|
252
254
|
});
|
|
253
255
|
}
|
|
@@ -270,7 +272,7 @@ export function updateSettings(partial) {
|
|
|
270
272
|
// Notify listeners for each changed category
|
|
271
273
|
for (const category of Object.keys(partial)) {
|
|
272
274
|
const partialCategory = partial[category];
|
|
273
|
-
if (partialCategory && typeof partialCategory ===
|
|
275
|
+
if (partialCategory && typeof partialCategory === "object") {
|
|
274
276
|
for (const key of Object.keys(partialCategory)) {
|
|
275
277
|
const prevCat = getCategoryAsRecord(previousSettings, category);
|
|
276
278
|
const newCat = getCategoryAsRecord(newSettings, category);
|
|
@@ -282,7 +284,7 @@ export function updateSettings(partial) {
|
|
|
282
284
|
}
|
|
283
285
|
storeState = {
|
|
284
286
|
...storeState,
|
|
285
|
-
settings: newSettings
|
|
287
|
+
settings: newSettings,
|
|
286
288
|
};
|
|
287
289
|
}
|
|
288
290
|
/**
|
|
@@ -294,7 +296,8 @@ export function resetSettings(categories) {
|
|
|
294
296
|
if (categories && categories.length > 0) {
|
|
295
297
|
const partial = {};
|
|
296
298
|
for (const category of categories) {
|
|
297
|
-
partial[category] =
|
|
299
|
+
partial[category] =
|
|
300
|
+
DEFAULT_SETTINGS[category];
|
|
298
301
|
}
|
|
299
302
|
updateSettings(partial);
|
|
300
303
|
}
|
|
@@ -302,7 +305,7 @@ export function resetSettings(categories) {
|
|
|
302
305
|
saveToStorage(DEFAULT_SETTINGS);
|
|
303
306
|
storeState = {
|
|
304
307
|
...storeState,
|
|
305
|
-
settings: DEFAULT_SETTINGS
|
|
308
|
+
settings: DEFAULT_SETTINGS,
|
|
306
309
|
};
|
|
307
310
|
}
|
|
308
311
|
}
|
|
@@ -324,11 +327,11 @@ export function setTheme(newTheme) {
|
|
|
324
327
|
export function toggleTheme() {
|
|
325
328
|
const currentTheme = getTheme();
|
|
326
329
|
const currentResolved = getResolvedTheme();
|
|
327
|
-
if (currentTheme ===
|
|
328
|
-
setTheme(currentResolved ===
|
|
330
|
+
if (currentTheme === "auto") {
|
|
331
|
+
setTheme(currentResolved === "dark" ? "light" : "dark");
|
|
329
332
|
}
|
|
330
333
|
else {
|
|
331
|
-
setTheme(currentTheme ===
|
|
334
|
+
setTheme(currentTheme === "dark" ? "light" : "dark");
|
|
332
335
|
}
|
|
333
336
|
}
|
|
334
337
|
/**
|
|
@@ -337,14 +340,14 @@ export function toggleTheme() {
|
|
|
337
340
|
export function cycleTheme() {
|
|
338
341
|
const currentTheme = getTheme();
|
|
339
342
|
switch (currentTheme) {
|
|
340
|
-
case
|
|
341
|
-
setTheme(
|
|
343
|
+
case "light":
|
|
344
|
+
setTheme("dark");
|
|
342
345
|
break;
|
|
343
|
-
case
|
|
344
|
-
setTheme(
|
|
346
|
+
case "dark":
|
|
347
|
+
setTheme("auto");
|
|
345
348
|
break;
|
|
346
|
-
case
|
|
347
|
-
setTheme(
|
|
349
|
+
case "auto":
|
|
350
|
+
setTheme("light");
|
|
348
351
|
break;
|
|
349
352
|
}
|
|
350
353
|
}
|
|
@@ -354,10 +357,10 @@ export function cycleTheme() {
|
|
|
354
357
|
* @param resolved - The resolved theme to apply
|
|
355
358
|
*/
|
|
356
359
|
function applyTheme(resolved) {
|
|
357
|
-
if (typeof document ===
|
|
360
|
+
if (typeof document === "undefined") {
|
|
358
361
|
return;
|
|
359
362
|
}
|
|
360
|
-
document.documentElement.setAttribute(
|
|
363
|
+
document.documentElement.setAttribute("data-theme", resolved);
|
|
361
364
|
}
|
|
362
365
|
/**
|
|
363
366
|
* Stored cleanup function for the theme effect.
|
|
@@ -406,10 +409,10 @@ export function initializeTheme() {
|
|
|
406
409
|
* @returns true if running in browser and theme is applied
|
|
407
410
|
*/
|
|
408
411
|
export function isThemeInitialized() {
|
|
409
|
-
if (typeof document ===
|
|
412
|
+
if (typeof document === "undefined") {
|
|
410
413
|
return false;
|
|
411
414
|
}
|
|
412
|
-
return document.documentElement.hasAttribute(
|
|
415
|
+
return document.documentElement.hasAttribute("data-theme");
|
|
413
416
|
}
|
|
414
417
|
// =========================================================================
|
|
415
418
|
// API Sync Functions
|
|
@@ -429,30 +432,30 @@ export function setSettingsService(service) {
|
|
|
429
432
|
*/
|
|
430
433
|
export async function syncSettingsToApi() {
|
|
431
434
|
if (!settingsService) {
|
|
432
|
-
logger.warn(
|
|
435
|
+
logger.warn("Settings service not configured for API sync");
|
|
433
436
|
return;
|
|
434
437
|
}
|
|
435
438
|
storeState = {
|
|
436
439
|
...storeState,
|
|
437
|
-
syncStatus:
|
|
438
|
-
syncError: null
|
|
440
|
+
syncStatus: "syncing",
|
|
441
|
+
syncError: null,
|
|
439
442
|
};
|
|
440
443
|
try {
|
|
441
444
|
const currentSettings = getSettings();
|
|
442
445
|
await settingsService.savePreferences(currentSettings);
|
|
443
446
|
storeState = {
|
|
444
447
|
...storeState,
|
|
445
|
-
syncStatus:
|
|
448
|
+
syncStatus: "synced",
|
|
446
449
|
lastSyncedAt: Date.now(),
|
|
447
|
-
syncError: null
|
|
450
|
+
syncError: null,
|
|
448
451
|
};
|
|
449
452
|
}
|
|
450
453
|
catch (error) {
|
|
451
|
-
const errorMessage = error instanceof Error ? error.message :
|
|
454
|
+
const errorMessage = error instanceof Error ? error.message : "Failed to sync settings";
|
|
452
455
|
storeState = {
|
|
453
456
|
...storeState,
|
|
454
|
-
syncStatus:
|
|
455
|
-
syncError: errorMessage
|
|
457
|
+
syncStatus: "error",
|
|
458
|
+
syncError: errorMessage,
|
|
456
459
|
};
|
|
457
460
|
throw error;
|
|
458
461
|
}
|
|
@@ -464,13 +467,13 @@ export async function syncSettingsToApi() {
|
|
|
464
467
|
*/
|
|
465
468
|
export async function loadSettingsFromApi() {
|
|
466
469
|
if (!settingsService) {
|
|
467
|
-
logger.warn(
|
|
470
|
+
logger.warn("Settings service not configured for API sync");
|
|
468
471
|
return;
|
|
469
472
|
}
|
|
470
473
|
storeState = {
|
|
471
474
|
...storeState,
|
|
472
|
-
syncStatus:
|
|
473
|
-
syncError: null
|
|
475
|
+
syncStatus: "syncing",
|
|
476
|
+
syncError: null,
|
|
474
477
|
};
|
|
475
478
|
try {
|
|
476
479
|
const apiSettingsData = await settingsService.getPreferences();
|
|
@@ -478,19 +481,21 @@ export async function loadSettingsFromApi() {
|
|
|
478
481
|
storeState = {
|
|
479
482
|
...storeState,
|
|
480
483
|
settings: mergedSettings,
|
|
481
|
-
syncStatus:
|
|
484
|
+
syncStatus: "synced",
|
|
482
485
|
lastSyncedAt: Date.now(),
|
|
483
|
-
syncError: null
|
|
486
|
+
syncError: null,
|
|
484
487
|
};
|
|
485
488
|
// Also persist to localStorage
|
|
486
489
|
saveToStorage(mergedSettings);
|
|
487
490
|
}
|
|
488
491
|
catch (error) {
|
|
489
|
-
const errorMessage = error instanceof Error
|
|
492
|
+
const errorMessage = error instanceof Error
|
|
493
|
+
? error.message
|
|
494
|
+
: "Failed to load settings from API";
|
|
490
495
|
storeState = {
|
|
491
496
|
...storeState,
|
|
492
|
-
syncStatus:
|
|
493
|
-
syncError: errorMessage
|
|
497
|
+
syncStatus: "error",
|
|
498
|
+
syncError: errorMessage,
|
|
494
499
|
};
|
|
495
500
|
throw error;
|
|
496
501
|
}
|
|
@@ -525,7 +530,7 @@ export async function initializeSettings(options) {
|
|
|
525
530
|
const withDefaults = deepMergeSettings(currentSettings, options.defaults);
|
|
526
531
|
storeState = {
|
|
527
532
|
...storeState,
|
|
528
|
-
settings: withDefaults
|
|
533
|
+
settings: withDefaults,
|
|
529
534
|
};
|
|
530
535
|
saveToStorage(withDefaults);
|
|
531
536
|
}
|
|
@@ -538,7 +543,7 @@ export async function initializeSettings(options) {
|
|
|
538
543
|
}
|
|
539
544
|
catch {
|
|
540
545
|
// Silently fail - local settings are still available
|
|
541
|
-
logger.warn(
|
|
546
|
+
logger.warn("Failed to sync settings from API on initialization");
|
|
542
547
|
}
|
|
543
548
|
}
|
|
544
549
|
}
|
|
@@ -10,9 +10,9 @@
|
|
|
10
10
|
*
|
|
11
11
|
* @module stores/workflowStore
|
|
12
12
|
*/
|
|
13
|
-
import type { Workflow, WorkflowNode, WorkflowEdge } from
|
|
14
|
-
import type { WorkflowChangeType } from
|
|
15
|
-
type WorkflowMetadata = NonNullable<Workflow[
|
|
13
|
+
import type { Workflow, WorkflowNode, WorkflowEdge } from "../types";
|
|
14
|
+
import type { WorkflowChangeType } from "../types/events.js";
|
|
15
|
+
type WorkflowMetadata = NonNullable<Workflow["metadata"]>;
|
|
16
16
|
/**
|
|
17
17
|
* Get the current workflow store value reactively
|
|
18
18
|
*
|
|
@@ -10,14 +10,14 @@
|
|
|
10
10
|
*
|
|
11
11
|
* @module stores/workflowStore
|
|
12
12
|
*/
|
|
13
|
-
import { DEFAULT_WORKFLOW_FORMAT } from
|
|
14
|
-
import { historyService } from
|
|
13
|
+
import { DEFAULT_WORKFLOW_FORMAT } from "../types/index.js";
|
|
14
|
+
import { historyService } from "../services/historyService.js";
|
|
15
15
|
/**
|
|
16
16
|
* Safely build updated workflow metadata, providing defaults for required fields.
|
|
17
17
|
*/
|
|
18
18
|
function buildMetadata(existing, updates) {
|
|
19
19
|
return {
|
|
20
|
-
version: existing?.version ??
|
|
20
|
+
version: existing?.version ?? "1.0",
|
|
21
21
|
createdAt: existing?.createdAt ?? new Date().toISOString(),
|
|
22
22
|
updatedAt: new Date().toISOString(),
|
|
23
23
|
author: existing?.author,
|
|
@@ -25,7 +25,7 @@ function buildMetadata(existing, updates) {
|
|
|
25
25
|
versionId: existing?.versionId,
|
|
26
26
|
updateNumber: existing?.updateNumber,
|
|
27
27
|
format: existing?.format,
|
|
28
|
-
...updates
|
|
28
|
+
...updates,
|
|
29
29
|
};
|
|
30
30
|
}
|
|
31
31
|
// =========================================================================
|
|
@@ -106,7 +106,7 @@ export function getWorkflowId() {
|
|
|
106
106
|
* @returns The workflow name or 'Untitled Workflow'
|
|
107
107
|
*/
|
|
108
108
|
export function getWorkflowName() {
|
|
109
|
-
return workflowState?.name ??
|
|
109
|
+
return workflowState?.name ?? "Untitled Workflow";
|
|
110
110
|
}
|
|
111
111
|
/**
|
|
112
112
|
* Get the workflow nodes reactively
|
|
@@ -131,11 +131,11 @@ export function getWorkflowEdges() {
|
|
|
131
131
|
*/
|
|
132
132
|
export function getWorkflowMetadata() {
|
|
133
133
|
return (workflowState?.metadata ?? {
|
|
134
|
-
version:
|
|
134
|
+
version: "1.0.0",
|
|
135
135
|
createdAt: new Date().toISOString(),
|
|
136
136
|
updatedAt: new Date().toISOString(),
|
|
137
137
|
versionId: `${Date.now()}-${Math.random().toString(36).substr(2, 9)}`,
|
|
138
|
-
updateNumber: 0
|
|
138
|
+
updateNumber: 0,
|
|
139
139
|
});
|
|
140
140
|
}
|
|
141
141
|
/**
|
|
@@ -155,7 +155,7 @@ export function getWorkflowChanged() {
|
|
|
155
155
|
return {
|
|
156
156
|
nodes: getWorkflowNodes(),
|
|
157
157
|
edges: getWorkflowEdges(),
|
|
158
|
-
name: getWorkflowName()
|
|
158
|
+
name: getWorkflowName(),
|
|
159
159
|
};
|
|
160
160
|
}
|
|
161
161
|
/**
|
|
@@ -171,7 +171,7 @@ export function getWorkflowValidation() {
|
|
|
171
171
|
hasEdges: edges.length > 0,
|
|
172
172
|
nodeCount: nodes.length,
|
|
173
173
|
edgeCount: edges.length,
|
|
174
|
-
isValid: nodes.length > 0 && edges.length >= 0
|
|
174
|
+
isValid: nodes.length > 0 && edges.length >= 0,
|
|
175
175
|
};
|
|
176
176
|
}
|
|
177
177
|
/**
|
|
@@ -184,7 +184,7 @@ export function getWorkflowMetadataChanged() {
|
|
|
184
184
|
return {
|
|
185
185
|
createdAt: metadata.createdAt,
|
|
186
186
|
updatedAt: metadata.updatedAt,
|
|
187
|
-
version: metadata.version ??
|
|
187
|
+
version: metadata.version ?? "1.0.0",
|
|
188
188
|
};
|
|
189
189
|
}
|
|
190
190
|
/**
|
|
@@ -256,16 +256,16 @@ function createSnapshot(workflow) {
|
|
|
256
256
|
position: n.position,
|
|
257
257
|
data: {
|
|
258
258
|
label: n.data.label,
|
|
259
|
-
config: n.data.config
|
|
260
|
-
}
|
|
259
|
+
config: n.data.config,
|
|
260
|
+
},
|
|
261
261
|
})),
|
|
262
262
|
edges: workflow.edges.map((e) => ({
|
|
263
263
|
id: e.id,
|
|
264
264
|
source: e.source,
|
|
265
265
|
target: e.target,
|
|
266
266
|
sourceHandle: e.sourceHandle,
|
|
267
|
-
targetHandle: e.targetHandle
|
|
268
|
-
}))
|
|
267
|
+
targetHandle: e.targetHandle,
|
|
268
|
+
})),
|
|
269
269
|
};
|
|
270
270
|
return JSON.stringify(toSnapshot);
|
|
271
271
|
}
|
|
@@ -403,7 +403,8 @@ function hasWorkflowDataChanged(currentWorkflow, newNodes, newEdges) {
|
|
|
403
403
|
return true;
|
|
404
404
|
if (currentEdge.id !== newEdge.id)
|
|
405
405
|
return true;
|
|
406
|
-
if (currentEdge.source !== newEdge.source ||
|
|
406
|
+
if (currentEdge.source !== newEdge.source ||
|
|
407
|
+
currentEdge.target !== newEdge.target)
|
|
407
408
|
return true;
|
|
408
409
|
}
|
|
409
410
|
return false;
|
|
@@ -442,7 +443,7 @@ export const workflowActions = {
|
|
|
442
443
|
*/
|
|
443
444
|
updateWorkflow: (workflow) => {
|
|
444
445
|
workflowState = workflow;
|
|
445
|
-
notifyWorkflowChange(
|
|
446
|
+
notifyWorkflowChange("metadata");
|
|
446
447
|
},
|
|
447
448
|
/**
|
|
448
449
|
* Restore workflow from history (undo/redo)
|
|
@@ -452,7 +453,7 @@ export const workflowActions = {
|
|
|
452
453
|
restoreFromHistory: (workflow) => {
|
|
453
454
|
isRestoringFromHistory = true;
|
|
454
455
|
workflowState = workflow;
|
|
455
|
-
notifyWorkflowChange(
|
|
456
|
+
notifyWorkflowChange("metadata");
|
|
456
457
|
isRestoringFromHistory = false;
|
|
457
458
|
},
|
|
458
459
|
/**
|
|
@@ -472,10 +473,10 @@ export const workflowActions = {
|
|
|
472
473
|
nodes,
|
|
473
474
|
metadata: buildMetadata(workflowState.metadata, {
|
|
474
475
|
versionId,
|
|
475
|
-
updateNumber: (workflowState.metadata?.updateNumber ?? 0) + 1
|
|
476
|
-
})
|
|
476
|
+
updateNumber: (workflowState.metadata?.updateNumber ?? 0) + 1,
|
|
477
|
+
}),
|
|
477
478
|
};
|
|
478
|
-
notifyWorkflowChange(
|
|
479
|
+
notifyWorkflowChange("node_move");
|
|
479
480
|
},
|
|
480
481
|
/**
|
|
481
482
|
* Update edges
|
|
@@ -494,10 +495,10 @@ export const workflowActions = {
|
|
|
494
495
|
edges,
|
|
495
496
|
metadata: buildMetadata(workflowState.metadata, {
|
|
496
497
|
versionId,
|
|
497
|
-
updateNumber: (workflowState.metadata?.updateNumber ?? 0) + 1
|
|
498
|
-
})
|
|
498
|
+
updateNumber: (workflowState.metadata?.updateNumber ?? 0) + 1,
|
|
499
|
+
}),
|
|
499
500
|
};
|
|
500
|
-
notifyWorkflowChange(
|
|
501
|
+
notifyWorkflowChange("edge_add");
|
|
501
502
|
},
|
|
502
503
|
/**
|
|
503
504
|
* Update workflow name
|
|
@@ -508,23 +509,23 @@ export const workflowActions = {
|
|
|
508
509
|
workflowState = {
|
|
509
510
|
...workflowState,
|
|
510
511
|
name,
|
|
511
|
-
metadata: buildMetadata(workflowState.metadata)
|
|
512
|
+
metadata: buildMetadata(workflowState.metadata),
|
|
512
513
|
};
|
|
513
|
-
notifyWorkflowChange(
|
|
514
|
+
notifyWorkflowChange("name");
|
|
514
515
|
},
|
|
515
516
|
/**
|
|
516
517
|
* Add a node
|
|
517
518
|
*/
|
|
518
519
|
addNode: (node) => {
|
|
519
|
-
pushToHistory(
|
|
520
|
+
pushToHistory("Add node");
|
|
520
521
|
if (!workflowState)
|
|
521
522
|
return;
|
|
522
523
|
workflowState = {
|
|
523
524
|
...workflowState,
|
|
524
525
|
nodes: [...workflowState.nodes, node],
|
|
525
|
-
metadata: buildMetadata(workflowState.metadata)
|
|
526
|
+
metadata: buildMetadata(workflowState.metadata),
|
|
526
527
|
};
|
|
527
|
-
notifyWorkflowChange(
|
|
528
|
+
notifyWorkflowChange("node_add");
|
|
528
529
|
},
|
|
529
530
|
/**
|
|
530
531
|
* Remove a node
|
|
@@ -533,44 +534,44 @@ export const workflowActions = {
|
|
|
533
534
|
* A single undo will restore both the node and its edges.
|
|
534
535
|
*/
|
|
535
536
|
removeNode: (nodeId) => {
|
|
536
|
-
pushToHistory(
|
|
537
|
+
pushToHistory("Delete node");
|
|
537
538
|
if (!workflowState)
|
|
538
539
|
return;
|
|
539
540
|
workflowState = {
|
|
540
541
|
...workflowState,
|
|
541
542
|
nodes: workflowState.nodes.filter((node) => node.id !== nodeId),
|
|
542
543
|
edges: workflowState.edges.filter((edge) => edge.source !== nodeId && edge.target !== nodeId),
|
|
543
|
-
metadata: buildMetadata(workflowState.metadata)
|
|
544
|
+
metadata: buildMetadata(workflowState.metadata),
|
|
544
545
|
};
|
|
545
|
-
notifyWorkflowChange(
|
|
546
|
+
notifyWorkflowChange("node_remove");
|
|
546
547
|
},
|
|
547
548
|
/**
|
|
548
549
|
* Add an edge
|
|
549
550
|
*/
|
|
550
551
|
addEdge: (edge) => {
|
|
551
|
-
pushToHistory(
|
|
552
|
+
pushToHistory("Add connection");
|
|
552
553
|
if (!workflowState)
|
|
553
554
|
return;
|
|
554
555
|
workflowState = {
|
|
555
556
|
...workflowState,
|
|
556
557
|
edges: [...workflowState.edges, edge],
|
|
557
|
-
metadata: buildMetadata(workflowState.metadata)
|
|
558
|
+
metadata: buildMetadata(workflowState.metadata),
|
|
558
559
|
};
|
|
559
|
-
notifyWorkflowChange(
|
|
560
|
+
notifyWorkflowChange("edge_add");
|
|
560
561
|
},
|
|
561
562
|
/**
|
|
562
563
|
* Remove an edge
|
|
563
564
|
*/
|
|
564
565
|
removeEdge: (edgeId) => {
|
|
565
|
-
pushToHistory(
|
|
566
|
+
pushToHistory("Delete connection");
|
|
566
567
|
if (!workflowState)
|
|
567
568
|
return;
|
|
568
569
|
workflowState = {
|
|
569
570
|
...workflowState,
|
|
570
571
|
edges: workflowState.edges.filter((edge) => edge.id !== edgeId),
|
|
571
|
-
metadata: buildMetadata(workflowState.metadata)
|
|
572
|
+
metadata: buildMetadata(workflowState.metadata),
|
|
572
573
|
};
|
|
573
|
-
notifyWorkflowChange(
|
|
574
|
+
notifyWorkflowChange("edge_remove");
|
|
574
575
|
},
|
|
575
576
|
/**
|
|
576
577
|
* Update a specific node
|
|
@@ -578,15 +579,15 @@ export const workflowActions = {
|
|
|
578
579
|
* Used for config changes. Pushes to history for undo support.
|
|
579
580
|
*/
|
|
580
581
|
updateNode: (nodeId, updates) => {
|
|
581
|
-
pushToHistory(
|
|
582
|
+
pushToHistory("Update node config");
|
|
582
583
|
if (!workflowState)
|
|
583
584
|
return;
|
|
584
585
|
workflowState = {
|
|
585
586
|
...workflowState,
|
|
586
587
|
nodes: workflowState.nodes.map((node) => node.id === nodeId ? { ...node, ...updates } : node),
|
|
587
|
-
metadata: buildMetadata(workflowState.metadata)
|
|
588
|
+
metadata: buildMetadata(workflowState.metadata),
|
|
588
589
|
};
|
|
589
|
-
notifyWorkflowChange(
|
|
590
|
+
notifyWorkflowChange("node_config");
|
|
590
591
|
},
|
|
591
592
|
/**
|
|
592
593
|
* Clear the workflow
|
|
@@ -610,9 +611,9 @@ export const workflowActions = {
|
|
|
610
611
|
return;
|
|
611
612
|
workflowState = {
|
|
612
613
|
...workflowState,
|
|
613
|
-
metadata: buildMetadata(workflowState.metadata, metadata)
|
|
614
|
+
metadata: buildMetadata(workflowState.metadata, metadata),
|
|
614
615
|
};
|
|
615
|
-
notifyWorkflowChange(
|
|
616
|
+
notifyWorkflowChange("metadata");
|
|
616
617
|
},
|
|
617
618
|
/**
|
|
618
619
|
* Batch update nodes and edges
|
|
@@ -621,7 +622,7 @@ export const workflowActions = {
|
|
|
621
622
|
* Creates a single history entry for the entire batch.
|
|
622
623
|
*/
|
|
623
624
|
batchUpdate: (updates) => {
|
|
624
|
-
pushToHistory(
|
|
625
|
+
pushToHistory("Batch update");
|
|
625
626
|
if (!workflowState)
|
|
626
627
|
return;
|
|
627
628
|
workflowState = {
|
|
@@ -629,10 +630,12 @@ export const workflowActions = {
|
|
|
629
630
|
...(updates.nodes && { nodes: updates.nodes }),
|
|
630
631
|
...(updates.edges && { edges: updates.edges }),
|
|
631
632
|
...(updates.name && { name: updates.name }),
|
|
632
|
-
...(updates.description !== undefined && {
|
|
633
|
-
|
|
633
|
+
...(updates.description !== undefined && {
|
|
634
|
+
description: updates.description,
|
|
635
|
+
}),
|
|
636
|
+
metadata: buildMetadata(workflowState.metadata, updates.metadata ?? undefined),
|
|
634
637
|
};
|
|
635
|
-
notifyWorkflowChange(
|
|
638
|
+
notifyWorkflowChange("metadata");
|
|
636
639
|
},
|
|
637
640
|
/**
|
|
638
641
|
* Push current state to history manually
|
|
@@ -645,5 +648,5 @@ export const workflowActions = {
|
|
|
645
648
|
*/
|
|
646
649
|
pushHistory: (description, workflow) => {
|
|
647
650
|
pushToHistory(description, workflow);
|
|
648
|
-
}
|
|
651
|
+
},
|
|
649
652
|
};
|