@flowdrop/flowdrop 1.14.0 → 2.0.0-beta.1
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/CHANGELOG.md +475 -0
- package/MIGRATION-2.0.md +472 -0
- package/README.md +23 -23
- package/dist/adapters/WorkflowAdapter.d.ts +1 -1
- package/dist/adapters/WorkflowAdapter.js +14 -8
- package/dist/adapters/agentspec/AgentSpecAdapter.js +7 -7
- package/dist/chat/batchFeedback.d.ts +39 -0
- package/dist/chat/batchFeedback.js +51 -0
- package/dist/commands/executor.js +15 -1
- package/dist/commands/storeIntegration.svelte.d.ts +4 -1
- package/dist/commands/storeIntegration.svelte.js +26 -21
- package/dist/commands/types.d.ts +2 -0
- package/dist/components/App.svelte +162 -192
- package/dist/components/App.svelte.d.ts +47 -8
- package/dist/components/ConfigForm.svelte +110 -66
- package/dist/components/ConfigModal.svelte +7 -2
- package/dist/components/ConnectionLine.svelte +4 -2
- package/dist/components/Navbar.svelte +61 -1
- package/dist/components/NodeSidebar.svelte +27 -45
- package/dist/components/NodeStatusOverlay.svelte +94 -6
- package/dist/components/NodeSwapPicker.svelte +10 -8
- package/dist/components/PipelineStatus.svelte +16 -67
- package/dist/components/PortCoordinateTracker.svelte +5 -6
- package/dist/components/SchemaForm.stories.svelte +1 -3
- package/dist/components/SchemaForm.svelte +45 -40
- package/dist/components/SchemaForm.svelte.d.ts +0 -8
- package/dist/components/SettingsModal.svelte +8 -3
- package/dist/components/SettingsPanel.svelte +20 -4
- package/dist/components/SwapMappingEditor.svelte +67 -49
- package/dist/components/SwapMappingEditor.svelte.d.ts +0 -2
- package/dist/components/UniversalNode.svelte +9 -7
- package/dist/components/WorkflowEditor.svelte +118 -111
- package/dist/components/WorkflowEditor.svelte.d.ts +18 -10
- package/dist/components/chat/AIChatPanel.svelte +93 -89
- package/dist/components/chat/AIChatPanel.svelte.d.ts +0 -4
- package/dist/components/chat/CommandPreview.svelte +2 -1
- package/dist/components/console/CommandConsole.svelte +7 -5
- package/dist/components/console/ConsoleAutocomplete.svelte +10 -11
- package/dist/components/console/ConsoleAutocomplete.svelte.d.ts +6 -0
- package/dist/components/console/ConsoleInput.svelte +15 -6
- package/dist/components/console/ConsoleOutput.svelte +2 -1
- package/dist/components/form/FormArray.svelte +5 -9
- package/dist/components/form/FormArray.svelte.d.ts +2 -1
- package/dist/components/form/FormAutocomplete.svelte +29 -13
- package/dist/components/form/FormField.svelte +4 -2
- package/dist/components/form/FormFieldLight.svelte +4 -2
- package/dist/components/form/FormMarkdownEditor.svelte +9 -4
- package/dist/components/form/FormRangeField.svelte +1 -0
- package/dist/components/form/FormTemplateEditor.svelte +11 -3
- package/dist/components/form/FormToggle.svelte +5 -12
- package/dist/components/form/FormToggle.svelte.d.ts +4 -2
- package/dist/components/form/templateAutocomplete.js +1 -5
- package/dist/components/form/types.d.ts +1 -14
- package/dist/components/interrupt/FormPrompt.svelte +3 -2
- package/dist/components/interrupt/InterruptBubble.svelte +16 -17
- package/dist/components/interrupt/ReviewPrompt.svelte +10 -3
- package/dist/components/interrupt/TextInputPrompt.svelte +2 -1
- package/dist/components/layouts/MainLayout.svelte +20 -13
- package/dist/components/layouts/MainLayout.svelte.d.ts +4 -0
- package/dist/components/nodes/AtomNode.svelte +292 -0
- package/dist/components/nodes/AtomNode.svelte.d.ts +26 -0
- package/dist/components/nodes/GatewayNode.svelte +19 -10
- package/dist/components/nodes/IdeaNode.svelte +7 -0
- package/dist/components/nodes/SimpleNode.svelte +11 -6
- package/dist/components/nodes/SquareNode.svelte +15 -8
- package/dist/components/nodes/TerminalNode.svelte +9 -4
- package/dist/components/nodes/ToolNode.svelte +7 -1
- package/dist/components/nodes/WorkflowNode.svelte +16 -7
- package/dist/components/playground/ChatInput.svelte +11 -14
- package/dist/components/playground/ChatPanel.svelte +6 -49
- package/dist/components/playground/ChatPanel.svelte.d.ts +0 -14
- package/dist/components/playground/ControlPanel.svelte +134 -123
- package/dist/components/playground/ControlPanel.svelte.d.ts +3 -0
- package/dist/components/playground/ExecutionLogs.svelte +11 -9
- package/dist/components/playground/InputCollector.svelte +11 -9
- package/dist/components/playground/MessageStream.svelte +17 -23
- package/dist/components/playground/PipelineKanbanView.svelte +65 -6
- package/dist/components/playground/PipelinePanel.svelte +11 -5
- package/dist/components/playground/PipelineTableView.svelte +186 -44
- package/dist/components/playground/Playground.svelte +95 -92
- package/dist/components/playground/Playground.svelte.d.ts +2 -0
- package/dist/components/playground/PlaygroundApp.svelte +6 -1
- package/dist/components/playground/PlaygroundApp.svelte.d.ts +3 -0
- package/dist/components/playground/PlaygroundModal.svelte +13 -3
- package/dist/components/playground/PlaygroundModal.svelte.d.ts +3 -0
- package/dist/components/playground/PlaygroundStudio.svelte +34 -32
- package/dist/components/playground/PlaygroundStudio.svelte.d.ts +3 -0
- package/dist/components/playground/SessionManager.svelte +9 -12
- package/dist/components/playground/pipelineViewUtils.svelte.d.ts +28 -0
- package/dist/components/playground/pipelineViewUtils.svelte.js +38 -1
- package/dist/config/endpoints.d.ts +0 -7
- package/dist/config/endpoints.js +2 -10
- package/dist/core/index.d.ts +4 -4
- package/dist/core/index.js +6 -6
- package/dist/display/index.d.ts +0 -2
- package/dist/display/index.js +0 -6
- package/dist/editor/index.d.ts +19 -20
- package/dist/editor/index.js +25 -35
- package/dist/form/code.d.ts +25 -15
- package/dist/form/code.js +44 -41
- package/dist/form/fieldRegistry.d.ts +17 -13
- package/dist/form/fieldRegistry.js +32 -12
- package/dist/form/full.d.ts +17 -13
- package/dist/form/full.js +22 -27
- package/dist/form/index.d.ts +3 -3
- package/dist/form/index.js +3 -3
- package/dist/form/markdown.d.ts +13 -8
- package/dist/form/markdown.js +22 -23
- package/dist/helpers/proximityConnect.d.ts +7 -3
- package/dist/helpers/proximityConnect.js +19 -6
- package/dist/helpers/workflowEditorHelper.d.ts +12 -5
- package/dist/helpers/workflowEditorHelper.js +27 -25
- package/dist/index.d.ts +28 -24
- package/dist/index.js +27 -50
- package/dist/messages/defaults.d.ts +2 -5
- package/dist/messages/defaults.js +3 -6
- package/dist/messages/index.d.ts +0 -1
- package/dist/messages/index.js +0 -1
- package/dist/mocks/app-forms.d.ts +6 -2
- package/dist/mocks/app-forms.js +11 -4
- package/dist/openapi/v1/openapi.yaml +227 -164
- package/dist/playground/index.d.ts +2 -3
- package/dist/playground/index.js +2 -30
- package/dist/playground/mount.d.ts +15 -0
- package/dist/playground/mount.js +46 -20
- package/dist/registry/{BaseRegistry.d.ts → BaseRegistry.svelte.d.ts} +22 -1
- package/dist/registry/{BaseRegistry.js → BaseRegistry.svelte.js} +37 -1
- package/dist/registry/builtinFormats.d.ts +9 -18
- package/dist/registry/builtinFormats.js +9 -39
- package/dist/registry/builtinNodes.d.ts +1 -26
- package/dist/registry/builtinNodes.js +14 -50
- package/dist/registry/index.d.ts +3 -4
- package/dist/registry/index.js +4 -6
- package/dist/registry/nodeComponentRegistry.d.ts +182 -15
- package/dist/registry/nodeComponentRegistry.js +235 -17
- package/dist/registry/workflowFormatRegistry.d.ts +14 -9
- package/dist/registry/workflowFormatRegistry.js +24 -8
- package/dist/{schema → schemas}/index.d.ts +2 -2
- package/dist/{schema → schemas}/index.js +2 -2
- package/dist/schemas/v1/workflow.schema.json +53 -6
- package/dist/services/agentSpecExecutionService.js +0 -1
- package/dist/services/apiVariableService.d.ts +2 -1
- package/dist/services/apiVariableService.js +5 -22
- package/dist/services/autoSaveService.d.ts +7 -0
- package/dist/services/autoSaveService.js +6 -4
- package/dist/services/chatService.d.ts +8 -4
- package/dist/services/chatService.js +15 -15
- package/dist/services/draftStorage.d.ts +129 -13
- package/dist/services/draftStorage.js +185 -37
- package/dist/services/dynamicSchemaService.d.ts +2 -1
- package/dist/services/dynamicSchemaService.js +5 -22
- package/dist/services/globalSave.d.ts +13 -12
- package/dist/services/globalSave.js +29 -51
- package/dist/services/historyService.d.ts +9 -3
- package/dist/services/historyService.js +9 -3
- package/dist/services/interruptService.d.ts +14 -9
- package/dist/services/interruptService.js +27 -27
- package/dist/services/nodeExecutionService.d.ts +18 -3
- package/dist/services/nodeExecutionService.js +71 -45
- package/dist/services/playgroundService.d.ts +14 -9
- package/dist/services/playgroundService.js +31 -30
- package/dist/services/variableService.d.ts +2 -1
- package/dist/services/variableService.js +2 -2
- package/dist/services/workflowStorage.js +6 -6
- package/dist/stores/apiContext.d.ts +45 -0
- package/dist/stores/apiContext.js +65 -0
- package/dist/stores/categoriesStore.svelte.d.ts +28 -23
- package/dist/stores/categoriesStore.svelte.js +70 -64
- package/dist/stores/getInstance.svelte.d.ts +39 -0
- package/dist/stores/getInstance.svelte.js +65 -0
- package/dist/stores/historyStore.svelte.d.ts +77 -93
- package/dist/stores/historyStore.svelte.js +134 -160
- package/dist/stores/instanceContainer.svelte.d.ts +111 -0
- package/dist/stores/instanceContainer.svelte.js +114 -0
- package/dist/stores/interruptStore.svelte.d.ts +112 -82
- package/dist/stores/interruptStore.svelte.js +253 -226
- package/dist/stores/pipelinePanelStore.svelte.d.ts +27 -3
- package/dist/stores/pipelinePanelStore.svelte.js +61 -14
- package/dist/stores/playgroundStore.svelte.d.ts +169 -216
- package/dist/stores/playgroundStore.svelte.js +515 -572
- package/dist/stores/portCoordinateStore.svelte.d.ts +57 -51
- package/dist/stores/portCoordinateStore.svelte.js +109 -98
- package/dist/stores/settingsStore.svelte.d.ts +4 -1
- package/dist/stores/settingsStore.svelte.js +47 -12
- package/dist/stores/workflowStore.svelte.d.ts +178 -213
- package/dist/stores/workflowStore.svelte.js +449 -501
- package/dist/stories/EdgeDecorator.svelte +5 -2
- package/dist/stories/NodeDecorator.svelte +5 -3
- package/dist/svelte-app.d.ts +60 -10
- package/dist/svelte-app.js +157 -53
- package/dist/types/events.d.ts +6 -3
- package/dist/types/index.d.ts +71 -6
- package/dist/types/navbar.d.ts +7 -0
- package/dist/types/playground.d.ts +18 -3
- package/dist/types/settings.d.ts +13 -0
- package/dist/types/settings.js +1 -0
- package/dist/utils/colors.d.ts +47 -21
- package/dist/utils/colors.js +69 -68
- package/dist/utils/connections.d.ts +9 -15
- package/dist/utils/connections.js +13 -32
- package/dist/utils/duration.d.ts +13 -0
- package/dist/utils/duration.js +45 -0
- package/dist/utils/formMerge.d.ts +36 -0
- package/dist/utils/formMerge.js +70 -0
- package/dist/utils/icons.d.ts +5 -2
- package/dist/utils/icons.js +6 -5
- package/dist/utils/nodeSwap.d.ts +6 -2
- package/dist/utils/nodeSwap.js +62 -126
- package/dist/utils/nodeTypes.d.ts +17 -8
- package/dist/utils/nodeTypes.js +27 -19
- package/dist/utils/performanceUtils.js +7 -0
- package/package.json +6 -5
- package/dist/messages/deprecation.d.ts +0 -20
- package/dist/messages/deprecation.js +0 -33
- package/dist/registry/plugin.d.ts +0 -215
- package/dist/registry/plugin.js +0 -249
- package/dist/services/api.d.ts +0 -129
- package/dist/services/api.js +0 -217
|
@@ -6,36 +6,32 @@
|
|
|
6
6
|
-->
|
|
7
7
|
|
|
8
8
|
<script lang="ts">
|
|
9
|
-
import { untrack } from 'svelte';
|
|
10
9
|
import type { InteractiveSwapState } from '../utils/nodeSwap.js';
|
|
11
|
-
import type { PortCompatibilityChecker } from '../utils/connections.js';
|
|
12
10
|
import Icon from '@iconify/svelte';
|
|
13
11
|
import { getNodeIcon } from '../utils/icons.js';
|
|
14
12
|
import { getCategoryColorToken } from '../utils/colors.js';
|
|
15
13
|
import PortMappingRow from './PortMappingRow.svelte';
|
|
16
14
|
import ConfigMappingRow from './ConfigMappingRow.svelte';
|
|
15
|
+
import { getInstance } from '../stores/getInstance.svelte.js';
|
|
17
16
|
import { m } from '../messages/index.js';
|
|
18
17
|
|
|
18
|
+
const fd = getInstance();
|
|
19
|
+
|
|
19
20
|
interface Props {
|
|
20
21
|
interactiveState: InteractiveSwapState;
|
|
21
|
-
checker: PortCompatibilityChecker | null;
|
|
22
22
|
onConfirm: (state: InteractiveSwapState) => void;
|
|
23
23
|
onCancel: () => void;
|
|
24
24
|
onBack: () => void;
|
|
25
25
|
}
|
|
26
26
|
|
|
27
|
-
const { interactiveState,
|
|
28
|
-
|
|
29
|
-
// Local mutable copy of the interactive state
|
|
30
|
-
// JSON round-trip is intentional: structuredClone fails on Svelte 5 proxies
|
|
31
|
-
let localState = $state<InteractiveSwapState>(
|
|
32
|
-
untrack(() => JSON.parse(JSON.stringify(interactiveState)))
|
|
33
|
-
);
|
|
27
|
+
const { interactiveState, onConfirm, onCancel, onBack }: Props = $props();
|
|
34
28
|
|
|
35
|
-
//
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
29
|
+
// Local editable copy of the interactive state.
|
|
30
|
+
// JSON round-trip is intentional: structuredClone fails on Svelte 5 proxies.
|
|
31
|
+
// Writable derived: reinitializes when interactiveState changes; local edits
|
|
32
|
+
// reassign the whole object below. NOTE: the derived value is not a deep
|
|
33
|
+
// $state proxy — update it only by reassignment, never by mutating in place.
|
|
34
|
+
let localState = $derived<InteractiveSwapState>(JSON.parse(JSON.stringify(interactiveState)));
|
|
39
35
|
|
|
40
36
|
// Derived counts
|
|
41
37
|
let inputMappings = $derived(localState.portMappings.filter((m) => m.direction === 'input'));
|
|
@@ -72,27 +68,33 @@
|
|
|
72
68
|
const mapping = localState.portMappings[index];
|
|
73
69
|
if (!mapping) return;
|
|
74
70
|
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
if (i === index)
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
71
|
+
localState = {
|
|
72
|
+
...localState,
|
|
73
|
+
portMappings: localState.portMappings.map((other, i) => {
|
|
74
|
+
if (i === index) {
|
|
75
|
+
return {
|
|
76
|
+
...other,
|
|
77
|
+
selectedNewPortId: newPortId,
|
|
78
|
+
matchQuality: newPortId ? ('manual' as const) : ('unmapped' as const),
|
|
79
|
+
isOverridden: true
|
|
80
|
+
};
|
|
81
|
+
}
|
|
82
|
+
// For input ports: if this port is already used by another mapping, unmap the other
|
|
83
|
+
if (
|
|
84
|
+
newPortId &&
|
|
85
|
+
mapping.direction === 'input' &&
|
|
86
|
+
other.direction === 'input' &&
|
|
87
|
+
other.selectedNewPortId === newPortId
|
|
88
|
+
) {
|
|
89
|
+
return {
|
|
82
90
|
...other,
|
|
83
91
|
selectedNewPortId: null,
|
|
84
|
-
matchQuality: 'unmapped',
|
|
92
|
+
matchQuality: 'unmapped' as const,
|
|
85
93
|
isOverridden: true
|
|
86
94
|
};
|
|
87
95
|
}
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
localState.portMappings[index] = {
|
|
92
|
-
...mapping,
|
|
93
|
-
selectedNewPortId: newPortId,
|
|
94
|
-
matchQuality: newPortId ? 'manual' : 'unmapped',
|
|
95
|
-
isOverridden: true
|
|
96
|
+
return other;
|
|
97
|
+
})
|
|
96
98
|
};
|
|
97
99
|
}
|
|
98
100
|
|
|
@@ -100,25 +102,32 @@
|
|
|
100
102
|
const mapping = localState.portMappings[index];
|
|
101
103
|
if (!mapping) return;
|
|
102
104
|
|
|
103
|
-
localState
|
|
104
|
-
...
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
105
|
+
localState = {
|
|
106
|
+
...localState,
|
|
107
|
+
portMappings: localState.portMappings.map((other, i) =>
|
|
108
|
+
i === index
|
|
109
|
+
? {
|
|
110
|
+
...other,
|
|
111
|
+
selectedNewPortId: other.autoSuggestedPortId,
|
|
112
|
+
matchQuality: other.autoSuggestedPortId
|
|
113
|
+
? (interactiveState.portMappings[index]?.matchQuality ?? 'type')
|
|
114
|
+
: 'unmapped',
|
|
115
|
+
isOverridden: false
|
|
116
|
+
}
|
|
117
|
+
: other
|
|
118
|
+
)
|
|
110
119
|
};
|
|
111
120
|
}
|
|
112
121
|
|
|
113
122
|
function handleConfigToggle(key: string): void {
|
|
114
|
-
const
|
|
115
|
-
if (
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
123
|
+
const mapping = localState.configMappings.find((m) => m.key === key);
|
|
124
|
+
if (!mapping || !mapping.isFlat) return;
|
|
125
|
+
|
|
126
|
+
localState = {
|
|
127
|
+
...localState,
|
|
128
|
+
configMappings: localState.configMappings.map((m) =>
|
|
129
|
+
m.key === key ? { ...m, carryOver: !m.carryOver } : m
|
|
130
|
+
)
|
|
122
131
|
};
|
|
123
132
|
}
|
|
124
133
|
|
|
@@ -148,9 +157,18 @@
|
|
|
148
157
|
<div class="swap-editor__node-target">
|
|
149
158
|
<span
|
|
150
159
|
class="swap-editor__node-icon"
|
|
151
|
-
style="--_icon-color: {getCategoryColorToken(
|
|
160
|
+
style="--_icon-color: {getCategoryColorToken(
|
|
161
|
+
fd.categories,
|
|
162
|
+
localState.newMetadata.category
|
|
163
|
+
)}"
|
|
152
164
|
>
|
|
153
|
-
<Icon
|
|
165
|
+
<Icon
|
|
166
|
+
icon={getNodeIcon(
|
|
167
|
+
fd.categories,
|
|
168
|
+
localState.newMetadata.icon,
|
|
169
|
+
localState.newMetadata.category
|
|
170
|
+
)}
|
|
171
|
+
/>
|
|
154
172
|
</span>
|
|
155
173
|
<span class="swap-editor__node-name">{localState.newMetadata.name}</span>
|
|
156
174
|
</div>
|
|
@@ -172,7 +190,7 @@
|
|
|
172
190
|
|
|
173
191
|
{#if inputMappings.length > 0}
|
|
174
192
|
<div class="swap-editor__section-label">Inputs</div>
|
|
175
|
-
{#each inputMappings as mapping
|
|
193
|
+
{#each inputMappings as mapping (mapping.edge.id)}
|
|
176
194
|
{@const globalIndex = localState.portMappings.indexOf(mapping)}
|
|
177
195
|
<PortMappingRow
|
|
178
196
|
{mapping}
|
|
@@ -186,7 +204,7 @@
|
|
|
186
204
|
|
|
187
205
|
{#if outputMappings.length > 0}
|
|
188
206
|
<div class="swap-editor__section-label">Outputs</div>
|
|
189
|
-
{#each outputMappings as mapping
|
|
207
|
+
{#each outputMappings as mapping (mapping.edge.id)}
|
|
190
208
|
{@const globalIndex = localState.portMappings.indexOf(mapping)}
|
|
191
209
|
<PortMappingRow
|
|
192
210
|
{mapping}
|
|
@@ -1,8 +1,6 @@
|
|
|
1
1
|
import type { InteractiveSwapState } from '../utils/nodeSwap.js';
|
|
2
|
-
import type { PortCompatibilityChecker } from '../utils/connections.js';
|
|
3
2
|
interface Props {
|
|
4
3
|
interactiveState: InteractiveSwapState;
|
|
5
|
-
checker: PortCompatibilityChecker | null;
|
|
6
4
|
onConfirm: (state: InteractiveSwapState) => void;
|
|
7
5
|
onCancel: () => void;
|
|
8
6
|
onBack: () => void;
|
|
@@ -9,11 +9,13 @@
|
|
|
9
9
|
|
|
10
10
|
<script lang="ts">
|
|
11
11
|
import type { WorkflowNode } from '../types/index.js';
|
|
12
|
-
import { nodeComponentRegistry } from '../registry/nodeComponentRegistry.js';
|
|
13
12
|
import { resolveBuiltinAlias } from '../registry/builtinNodes.js';
|
|
14
13
|
import NodeStatusOverlay from './NodeStatusOverlay.svelte';
|
|
15
14
|
import { shouldShowNodeStatus } from '../utils/nodeWrapper.js';
|
|
16
15
|
import { resolveComponentName } from '../utils/nodeTypes.js';
|
|
16
|
+
import { getInstance } from '../stores/getInstance.svelte.js';
|
|
17
|
+
|
|
18
|
+
const fd = getInstance();
|
|
17
19
|
|
|
18
20
|
let {
|
|
19
21
|
data,
|
|
@@ -38,7 +40,7 @@
|
|
|
38
40
|
* This handles the logic of choosing between config.nodeType and metadata.type.
|
|
39
41
|
*/
|
|
40
42
|
let resolvedComponentName = $derived(
|
|
41
|
-
data.metadata ? resolveComponentName(data.metadata, configNodeType) : 'workflowNode'
|
|
43
|
+
data.metadata ? resolveComponentName(fd.nodes, data.metadata, configNodeType) : 'workflowNode'
|
|
42
44
|
);
|
|
43
45
|
|
|
44
46
|
/**
|
|
@@ -70,13 +72,13 @@
|
|
|
70
72
|
const resolvedType = resolveBuiltinAlias(nodeType);
|
|
71
73
|
|
|
72
74
|
// Get component from registry (defaults to workflowNode if not found)
|
|
73
|
-
const component =
|
|
75
|
+
const component = fd.nodes.getComponent(resolvedType);
|
|
74
76
|
if (component) {
|
|
75
77
|
return component;
|
|
76
78
|
}
|
|
77
79
|
|
|
78
80
|
// Return the default component from registry
|
|
79
|
-
return
|
|
81
|
+
return fd.nodes.getComponent('workflowNode');
|
|
80
82
|
}
|
|
81
83
|
|
|
82
84
|
/**
|
|
@@ -85,7 +87,7 @@
|
|
|
85
87
|
*/
|
|
86
88
|
function getStatusPosition(): 'top-left' | 'top-right' | 'bottom-left' | 'bottom-right' {
|
|
87
89
|
// Try registry first
|
|
88
|
-
const position =
|
|
90
|
+
const position = fd.nodes.getStatusPosition(resolvedComponentName);
|
|
89
91
|
if (position) {
|
|
90
92
|
return position;
|
|
91
93
|
}
|
|
@@ -109,7 +111,7 @@
|
|
|
109
111
|
*/
|
|
110
112
|
function getStatusSize(): 'sm' | 'md' | 'lg' {
|
|
111
113
|
// Try registry first
|
|
112
|
-
const size =
|
|
114
|
+
const size = fd.nodes.getStatusSize(resolvedComponentName);
|
|
113
115
|
if (size) {
|
|
114
116
|
return size;
|
|
115
117
|
}
|
|
@@ -130,7 +132,7 @@
|
|
|
130
132
|
<div class="universal-node">
|
|
131
133
|
<!-- Render the node component dynamically (Svelte 5 dynamic component syntax) -->
|
|
132
134
|
{#if nodeComponent}
|
|
133
|
-
<!--
|
|
135
|
+
<!-- Svelte 5 dynamic component limitation; reactivity maintained via $derived -->
|
|
134
136
|
{@const NodeComponent = nodeComponent}
|
|
135
137
|
<NodeComponent {data} {selected} />
|
|
136
138
|
{/if}
|