@d34dman/flowdrop 0.0.61 → 0.0.63
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 +6 -0
- package/dist/adapters/WorkflowAdapter.d.ts +1 -1
- package/dist/adapters/agentspec/AgentSpecAdapter.js +3 -1
- package/dist/api/client.d.ts +4 -0
- package/dist/api/client.js +6 -1
- package/dist/api/enhanced-client.js +7 -6
- package/dist/components/App.svelte +143 -219
- package/dist/components/CanvasBanner.stories.svelte +25 -0
- package/dist/components/CanvasBanner.stories.svelte.d.ts +27 -0
- package/dist/components/CanvasBanner.svelte +2 -2
- package/dist/components/ConfigForm.svelte +37 -36
- package/dist/components/ConfigPanel.stories.svelte +38 -0
- package/dist/components/ConfigPanel.stories.svelte.d.ts +27 -0
- package/dist/components/ConfigPanel.svelte +2 -2
- package/dist/components/ConnectionLine.svelte +2 -2
- package/dist/components/FlowDropZone.svelte +18 -2
- package/dist/components/FlowDropZone.svelte.d.ts +2 -0
- package/dist/components/LoadingSpinner.stories.svelte +30 -0
- package/dist/components/LoadingSpinner.stories.svelte.d.ts +27 -0
- package/dist/components/Logo.stories.svelte +22 -0
- package/dist/components/Logo.stories.svelte.d.ts +27 -0
- package/dist/components/Logo.svelte +33 -13
- package/dist/components/Logo.svelte.d.ts +1 -1
- package/dist/components/MarkdownDisplay.stories.svelte +21 -0
- package/dist/components/MarkdownDisplay.stories.svelte.d.ts +27 -0
- package/dist/components/MarkdownDisplay.svelte +4 -3
- package/dist/components/Navbar.stories.svelte +41 -0
- package/dist/components/Navbar.stories.svelte.d.ts +27 -0
- package/dist/components/Navbar.svelte +4 -4
- package/dist/components/NodeSidebar.svelte +12 -12
- package/dist/components/NodeStatusOverlay.stories.svelte +74 -0
- package/dist/components/NodeStatusOverlay.stories.svelte.d.ts +27 -0
- package/dist/components/PipelineStatus.svelte +11 -4
- package/dist/components/PortCoordinateTracker.svelte +1 -1
- package/dist/components/SchemaForm.stories.svelte +101 -0
- package/dist/components/SchemaForm.stories.svelte.d.ts +27 -0
- package/dist/components/SchemaForm.svelte +17 -12
- package/dist/components/SettingsModal.svelte +3 -3
- package/dist/components/SettingsPanel.svelte +23 -22
- package/dist/components/StatusIcon.stories.svelte +60 -0
- package/dist/components/StatusIcon.stories.svelte.d.ts +27 -0
- package/dist/components/StatusIcon.svelte +7 -0
- package/dist/components/StatusLabel.stories.svelte +17 -0
- package/dist/components/StatusLabel.stories.svelte.d.ts +27 -0
- package/dist/components/ThemeToggle.stories.svelte +25 -0
- package/dist/components/ThemeToggle.stories.svelte.d.ts +27 -0
- package/dist/components/ThemeToggle.svelte +8 -8
- package/dist/components/UniversalNode.svelte +1 -1
- package/dist/components/WorkflowEditor.svelte +298 -298
- package/dist/components/form/FormAutocomplete.svelte +20 -19
- package/dist/components/form/FormCheckboxGroup.stories.svelte +28 -0
- package/dist/components/form/FormCheckboxGroup.stories.svelte.d.ts +27 -0
- package/dist/components/form/FormField.svelte +3 -3
- package/dist/components/form/FormFieldLight.svelte +2 -2
- package/dist/components/form/FormFieldWrapper.stories.svelte +31 -0
- package/dist/components/form/FormFieldWrapper.stories.svelte.d.ts +27 -0
- package/dist/components/form/FormFieldset.svelte +7 -7
- package/dist/components/form/FormNumberField.stories.svelte +33 -0
- package/dist/components/form/FormNumberField.stories.svelte.d.ts +27 -0
- package/dist/components/form/FormRangeField.stories.svelte +31 -0
- package/dist/components/form/FormRangeField.stories.svelte.d.ts +27 -0
- package/dist/components/form/FormSelect.stories.svelte +50 -0
- package/dist/components/form/FormSelect.stories.svelte.d.ts +27 -0
- package/dist/components/form/FormTemplateEditor.svelte +2 -1
- package/dist/components/form/FormTextField.stories.svelte +30 -0
- package/dist/components/form/FormTextField.stories.svelte.d.ts +27 -0
- package/dist/components/form/FormTextarea.stories.svelte +31 -0
- package/dist/components/form/FormTextarea.stories.svelte.d.ts +27 -0
- package/dist/components/form/FormToggle.stories.svelte +30 -0
- package/dist/components/form/FormToggle.stories.svelte.d.ts +27 -0
- package/dist/components/form/FormUISchemaRenderer.svelte +1 -1
- package/dist/components/form/types.d.ts +15 -47
- package/dist/components/interrupt/ChoicePrompt.stories.svelte +43 -0
- package/dist/components/interrupt/ChoicePrompt.stories.svelte.d.ts +27 -0
- package/dist/components/interrupt/ChoicePrompt.svelte +24 -24
- package/dist/components/interrupt/ConfirmationPrompt.stories.svelte +49 -0
- package/dist/components/interrupt/ConfirmationPrompt.stories.svelte.d.ts +27 -0
- package/dist/components/interrupt/ConfirmationPrompt.svelte +19 -19
- package/dist/components/interrupt/FormPrompt.svelte +15 -15
- package/dist/components/interrupt/InterruptBubble.svelte +202 -236
- package/dist/components/interrupt/InterruptBubble.svelte.d.ts +1 -1
- package/dist/components/interrupt/ReviewPrompt.stories.svelte +46 -0
- package/dist/components/interrupt/ReviewPrompt.stories.svelte.d.ts +27 -0
- package/dist/components/interrupt/ReviewPrompt.svelte +842 -0
- package/dist/components/interrupt/ReviewPrompt.svelte.d.ts +23 -0
- package/dist/components/interrupt/TextInputPrompt.stories.svelte +34 -0
- package/dist/components/interrupt/TextInputPrompt.stories.svelte.d.ts +27 -0
- package/dist/components/interrupt/TextInputPrompt.svelte +21 -21
- package/dist/components/nodes/GatewayNode.stories.svelte +76 -0
- package/dist/components/nodes/GatewayNode.stories.svelte.d.ts +26 -0
- package/dist/components/nodes/GatewayNode.svelte +19 -17
- package/dist/components/nodes/IdeaNode.stories.svelte +48 -0
- package/dist/components/nodes/IdeaNode.stories.svelte.d.ts +26 -0
- package/dist/components/nodes/IdeaNode.svelte +10 -26
- package/dist/components/nodes/NotesNode.stories.svelte +69 -0
- package/dist/components/nodes/NotesNode.stories.svelte.d.ts +26 -0
- package/dist/components/nodes/NotesNode.svelte +8 -8
- package/dist/components/nodes/SimpleNode.stories.svelte +101 -0
- package/dist/components/nodes/SimpleNode.stories.svelte.d.ts +26 -0
- package/dist/components/nodes/SimpleNode.svelte +16 -24
- package/dist/components/nodes/SquareNode.stories.svelte +56 -0
- package/dist/components/nodes/SquareNode.stories.svelte.d.ts +26 -0
- package/dist/components/nodes/SquareNode.svelte +13 -21
- package/dist/components/nodes/TerminalNode.stories.svelte +25 -0
- package/dist/components/nodes/TerminalNode.stories.svelte.d.ts +26 -0
- package/dist/components/nodes/TerminalNode.svelte +7 -7
- package/dist/components/nodes/ToolNode.stories.svelte +71 -0
- package/dist/components/nodes/ToolNode.stories.svelte.d.ts +26 -0
- package/dist/components/nodes/ToolNode.svelte +7 -15
- package/dist/components/nodes/WorkflowNode.stories.svelte +50 -0
- package/dist/components/nodes/WorkflowNode.stories.svelte.d.ts +26 -0
- package/dist/components/nodes/WorkflowNode.svelte +13 -13
- package/dist/components/playground/ChatPanel.svelte +48 -48
- package/dist/components/playground/ExecutionLogs.svelte +23 -23
- package/dist/components/playground/InputCollector.svelte +24 -24
- package/dist/components/playground/MessageBubble.stories.svelte +49 -0
- package/dist/components/playground/MessageBubble.stories.svelte.d.ts +27 -0
- package/dist/components/playground/MessageBubble.svelte +49 -46
- package/dist/components/playground/Playground.svelte +194 -129
- package/dist/components/playground/PlaygroundModal.svelte +5 -5
- package/dist/components/playground/SessionManager.svelte +26 -26
- package/dist/config/constants.d.ts +22 -0
- package/dist/config/constants.js +22 -0
- package/dist/config/endpoints.d.ts +19 -0
- package/dist/config/runtimeConfig.js +2 -1
- package/dist/core/index.d.ts +5 -2
- package/dist/core/index.js +9 -1
- package/dist/editor/index.d.ts +13 -9
- package/dist/editor/index.js +15 -11
- package/dist/form/code.d.ts +2 -1
- package/dist/form/code.js +1 -3
- package/dist/form/markdown.d.ts +2 -1
- package/dist/form/markdown.js +1 -3
- package/dist/helpers/workflowEditorHelper.js +18 -33
- package/dist/mocks/app-forms.js +1 -0
- package/dist/mocks/app-navigation.js +3 -1
- package/dist/mocks/app-stores.d.ts +4 -4
- package/dist/playground/index.d.ts +4 -3
- package/dist/playground/index.js +12 -10
- package/dist/playground/mount.js +6 -13
- package/dist/services/agentSpecExecutionService.js +2 -1
- package/dist/services/api.js +10 -18
- package/dist/services/apiVariableService.js +2 -1
- package/dist/services/autoSaveService.d.ts +3 -3
- package/dist/services/autoSaveService.js +21 -17
- package/dist/services/categoriesApi.js +13 -5
- package/dist/services/draftStorage.js +5 -4
- package/dist/services/dynamicSchemaService.js +4 -4
- package/dist/services/globalSave.d.ts +60 -11
- package/dist/services/globalSave.js +160 -83
- package/dist/services/historyService.d.ts +2 -1
- package/dist/services/historyService.js +7 -3
- package/dist/services/interruptService.js +9 -8
- package/dist/services/nodeExecutionService.js +14 -6
- package/dist/services/playgroundService.js +2 -1
- package/dist/services/portConfigApi.js +11 -7
- package/dist/services/toastService.d.ts +1 -1
- package/dist/services/toastService.js +6 -5
- package/dist/services/variableService.js +3 -2
- package/dist/settings/index.d.ts +1 -1
- package/dist/settings/index.js +1 -1
- package/dist/stores/{categoriesStore.d.ts → categoriesStore.svelte.d.ts} +3 -3
- package/dist/stores/{categoriesStore.js → categoriesStore.svelte.js} +15 -18
- package/dist/stores/editorStateMachine.svelte.d.ts +42 -0
- package/dist/stores/editorStateMachine.svelte.js +132 -0
- package/dist/stores/{historyStore.d.ts → historyStore.svelte.d.ts} +18 -15
- package/dist/stores/{historyStore.js → historyStore.svelte.js} +40 -21
- package/dist/stores/{interruptStore.d.ts → interruptStore.svelte.d.ts} +16 -15
- package/dist/stores/{interruptStore.js → interruptStore.svelte.js} +85 -94
- package/dist/stores/{playgroundStore.d.ts → playgroundStore.svelte.d.ts} +41 -33
- package/dist/stores/{playgroundStore.js → playgroundStore.svelte.js} +164 -84
- package/dist/stores/{portCoordinateStore.d.ts → portCoordinateStore.svelte.d.ts} +10 -4
- package/dist/stores/{portCoordinateStore.js → portCoordinateStore.svelte.js} +38 -35
- package/dist/stores/{settingsStore.d.ts → settingsStore.svelte.d.ts} +45 -28
- package/dist/stores/{settingsStore.js → settingsStore.svelte.js} +169 -128
- package/dist/stores/{workflowStore.d.ts → workflowStore.svelte.d.ts} +101 -65
- package/dist/stores/{workflowStore.js → workflowStore.svelte.js} +285 -239
- package/dist/stories/CanvasDecorator.svelte +50 -0
- package/dist/stories/CanvasDecorator.svelte.d.ts +8 -0
- package/dist/stories/NodeDecorator.svelte +74 -0
- package/dist/stories/NodeDecorator.svelte.d.ts +8 -0
- package/dist/stories/utils.d.ts +93 -0
- package/dist/stories/utils.js +122 -0
- package/dist/styles/base.css +114 -61
- package/dist/styles/toast.css +2 -2
- package/dist/styles/tokens.css +250 -185
- package/dist/svelte-app.d.ts +0 -6
- package/dist/svelte-app.js +13 -31
- package/dist/types/index.d.ts +2 -0
- package/dist/types/interrupt.d.ts +89 -5
- package/dist/types/interrupt.js +13 -1
- package/dist/types/playground.d.ts +5 -0
- package/dist/types/settings.js +1 -1
- package/dist/utils/colors.js +4 -4
- package/dist/utils/connections.js +33 -8
- package/dist/utils/icons.js +1 -1
- package/dist/utils/logger.d.ts +47 -0
- package/dist/utils/logger.js +72 -0
- package/dist/utils/nodeWrapper.js +1 -1
- package/dist/utils/sanitize.d.ts +19 -0
- package/dist/utils/sanitize.js +31 -0
- package/dist/utils/validation.d.ts +29 -0
- package/dist/utils/validation.js +39 -0
- package/package.json +243 -232
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import type { ReviewConfig, ReviewResolution } from '../../types/interrupt.js';
|
|
2
|
+
/**
|
|
3
|
+
* Component props
|
|
4
|
+
*/
|
|
5
|
+
interface Props {
|
|
6
|
+
/** Review configuration from the interrupt */
|
|
7
|
+
config: ReviewConfig;
|
|
8
|
+
/** Whether this interrupt has been resolved */
|
|
9
|
+
isResolved: boolean;
|
|
10
|
+
/** The resolved value if resolved */
|
|
11
|
+
resolvedValue?: ReviewResolution;
|
|
12
|
+
/** Whether the form is currently submitting */
|
|
13
|
+
isSubmitting: boolean;
|
|
14
|
+
/** Error message if submission failed */
|
|
15
|
+
error?: string;
|
|
16
|
+
/** Username of the person who resolved the interrupt */
|
|
17
|
+
resolvedByUserName?: string;
|
|
18
|
+
/** Callback when user submits review */
|
|
19
|
+
onSubmit: (value: ReviewResolution) => void;
|
|
20
|
+
}
|
|
21
|
+
declare const ReviewPrompt: import("svelte").Component<Props, {}, "">;
|
|
22
|
+
type ReviewPrompt = ReturnType<typeof ReviewPrompt>;
|
|
23
|
+
export default ReviewPrompt;
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
<script module>
|
|
2
|
+
import { defineMeta } from "@storybook/addon-svelte-csf";
|
|
3
|
+
import TextInputPrompt from "./TextInputPrompt.svelte";
|
|
4
|
+
import { fn } from "storybook/test";
|
|
5
|
+
import { createTextConfig } from "../../stories/utils.js";
|
|
6
|
+
|
|
7
|
+
const { Story } = defineMeta({
|
|
8
|
+
title: "Interrupt/TextInputPrompt",
|
|
9
|
+
component: TextInputPrompt,
|
|
10
|
+
tags: ["autodocs"],
|
|
11
|
+
args: {
|
|
12
|
+
config: createTextConfig(),
|
|
13
|
+
isResolved: false,
|
|
14
|
+
isSubmitting: false,
|
|
15
|
+
onSubmit: fn(),
|
|
16
|
+
},
|
|
17
|
+
});
|
|
18
|
+
</script>
|
|
19
|
+
|
|
20
|
+
<Story name="Default" />
|
|
21
|
+
|
|
22
|
+
<Story name="Multiline" args={{
|
|
23
|
+
config: createTextConfig({ message: "Describe the issue in detail:", multiline: true, placeholder: "Type your description..." }),
|
|
24
|
+
}} />
|
|
25
|
+
|
|
26
|
+
<Story name="With Constraints" args={{
|
|
27
|
+
config: createTextConfig({ message: "Enter a short summary:", minLength: 10, maxLength: 100 }),
|
|
28
|
+
}} />
|
|
29
|
+
|
|
30
|
+
<Story name="Resolved" args={{
|
|
31
|
+
isResolved: true,
|
|
32
|
+
resolvedValue: "The workflow completed successfully with all checks passed.",
|
|
33
|
+
resolvedByUserName: "Charlie",
|
|
34
|
+
}} />
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
export default TextInputPrompt;
|
|
2
|
+
type TextInputPrompt = SvelteComponent<{
|
|
3
|
+
[x: string]: never;
|
|
4
|
+
}, {
|
|
5
|
+
[evt: string]: CustomEvent<any>;
|
|
6
|
+
}, {}> & {
|
|
7
|
+
$$bindings?: string | undefined;
|
|
8
|
+
};
|
|
9
|
+
declare const TextInputPrompt: $$__sveltets_2_IsomorphicComponent<{
|
|
10
|
+
[x: string]: never;
|
|
11
|
+
}, {
|
|
12
|
+
[evt: string]: CustomEvent<any>;
|
|
13
|
+
}, {}, {}, string>;
|
|
14
|
+
import TextInputPrompt from "./TextInputPrompt.svelte";
|
|
15
|
+
interface $$__sveltets_2_IsomorphicComponent<Props extends Record<string, any> = any, Events extends Record<string, any> = any, Slots extends Record<string, any> = any, Exports = {}, Bindings = string> {
|
|
16
|
+
new (options: import("svelte").ComponentConstructorOptions<Props>): import("svelte").SvelteComponent<Props, Events, Slots> & {
|
|
17
|
+
$$bindings?: Bindings;
|
|
18
|
+
} & Exports;
|
|
19
|
+
(internal: unknown, props: {
|
|
20
|
+
$$events?: Events;
|
|
21
|
+
$$slots?: Slots;
|
|
22
|
+
}): Exports & {
|
|
23
|
+
$set?: any;
|
|
24
|
+
$on?: any;
|
|
25
|
+
};
|
|
26
|
+
z_$$bindings?: Bindings;
|
|
27
|
+
}
|
|
@@ -188,7 +188,7 @@
|
|
|
188
188
|
.text-prompt {
|
|
189
189
|
display: flex;
|
|
190
190
|
flex-direction: column;
|
|
191
|
-
gap:
|
|
191
|
+
gap: var(--fd-space-md);
|
|
192
192
|
}
|
|
193
193
|
|
|
194
194
|
.text-prompt--resolved {
|
|
@@ -201,20 +201,20 @@
|
|
|
201
201
|
|
|
202
202
|
.text-prompt__message {
|
|
203
203
|
margin: 0;
|
|
204
|
-
font-size:
|
|
205
|
-
line-height:
|
|
204
|
+
font-size: var(--fd-interrupt-font-message);
|
|
205
|
+
line-height: var(--fd-interrupt-line-height);
|
|
206
206
|
color: var(--fd-foreground);
|
|
207
207
|
}
|
|
208
208
|
|
|
209
209
|
.text-prompt__error {
|
|
210
210
|
display: flex;
|
|
211
211
|
align-items: center;
|
|
212
|
-
gap:
|
|
213
|
-
padding:
|
|
212
|
+
gap: var(--fd-space-2xs);
|
|
213
|
+
padding: var(--fd-space-xs) var(--fd-space-md);
|
|
214
214
|
background-color: var(--fd-error-muted);
|
|
215
215
|
border-radius: var(--fd-radius-md);
|
|
216
216
|
color: var(--fd-error);
|
|
217
|
-
font-size:
|
|
217
|
+
font-size: var(--fd-interrupt-font-error);
|
|
218
218
|
}
|
|
219
219
|
|
|
220
220
|
.text-prompt__input-wrapper {
|
|
@@ -225,10 +225,10 @@
|
|
|
225
225
|
.text-prompt__input,
|
|
226
226
|
.text-prompt__textarea {
|
|
227
227
|
width: 100%;
|
|
228
|
-
padding:
|
|
229
|
-
font-size:
|
|
228
|
+
padding: var(--fd-space-md) var(--fd-space-xl);
|
|
229
|
+
font-size: var(--fd-interrupt-font-message);
|
|
230
230
|
font-family: inherit;
|
|
231
|
-
line-height:
|
|
231
|
+
line-height: var(--fd-interrupt-line-height);
|
|
232
232
|
color: var(--fd-foreground);
|
|
233
233
|
background-color: var(--fd-background);
|
|
234
234
|
border: 1px solid var(--fd-border-strong);
|
|
@@ -270,7 +270,7 @@
|
|
|
270
270
|
font-size: var(--fd-text-xs);
|
|
271
271
|
color: var(--fd-muted-foreground);
|
|
272
272
|
text-align: right;
|
|
273
|
-
padding-right:
|
|
273
|
+
padding-right: var(--fd-space-3xs);
|
|
274
274
|
}
|
|
275
275
|
|
|
276
276
|
.text-prompt__char-count--warning {
|
|
@@ -279,23 +279,23 @@
|
|
|
279
279
|
|
|
280
280
|
.text-prompt__actions {
|
|
281
281
|
display: flex;
|
|
282
|
-
gap:
|
|
282
|
+
gap: var(--fd-space-md);
|
|
283
283
|
}
|
|
284
284
|
|
|
285
285
|
.text-prompt__submit {
|
|
286
286
|
display: inline-flex;
|
|
287
287
|
align-items: center;
|
|
288
288
|
justify-content: center;
|
|
289
|
-
gap:
|
|
290
|
-
padding:
|
|
289
|
+
gap: var(--fd-space-xs);
|
|
290
|
+
padding: var(--fd-space-sm) var(--fd-space-2xl);
|
|
291
291
|
border-radius: var(--fd-radius-lg);
|
|
292
292
|
font-size: var(--fd-text-sm);
|
|
293
293
|
font-weight: 600;
|
|
294
294
|
font-family: inherit;
|
|
295
295
|
cursor: pointer;
|
|
296
|
-
transition: all
|
|
296
|
+
transition: all var(--fd-transition-normal);
|
|
297
297
|
border: none;
|
|
298
|
-
min-height:
|
|
298
|
+
min-height: var(--fd-interrupt-btn-min-height);
|
|
299
299
|
background: var(--fd-interrupt-btn-primary-bg);
|
|
300
300
|
color: var(--fd-primary-foreground);
|
|
301
301
|
box-shadow: 0 1px 3px var(--fd-interrupt-btn-primary-shadow);
|
|
@@ -315,8 +315,8 @@
|
|
|
315
315
|
}
|
|
316
316
|
|
|
317
317
|
.text-prompt__spinner {
|
|
318
|
-
width:
|
|
319
|
-
height:
|
|
318
|
+
width: var(--fd-interrupt-spinner-size);
|
|
319
|
+
height: var(--fd-interrupt-spinner-size);
|
|
320
320
|
border: 2px solid var(--fd-border);
|
|
321
321
|
border-top-color: currentColor;
|
|
322
322
|
border-radius: 50%;
|
|
@@ -333,12 +333,12 @@
|
|
|
333
333
|
.text-prompt__resolved-badge {
|
|
334
334
|
display: inline-flex;
|
|
335
335
|
align-items: center;
|
|
336
|
-
gap:
|
|
337
|
-
padding:
|
|
336
|
+
gap: var(--fd-space-2xs);
|
|
337
|
+
padding: var(--fd-space-2xs) var(--fd-space-md);
|
|
338
338
|
background-color: var(--fd-interrupt-badge-completed-bg);
|
|
339
|
-
border-radius:
|
|
339
|
+
border-radius: var(--fd-radius-full);
|
|
340
340
|
color: var(--fd-interrupt-badge-completed-text);
|
|
341
|
-
font-size:
|
|
341
|
+
font-size: var(--fd-text-xs);
|
|
342
342
|
font-weight: 500;
|
|
343
343
|
align-self: flex-start;
|
|
344
344
|
}
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
<script module>
|
|
2
|
+
import { defineMeta } from "@storybook/addon-svelte-csf";
|
|
3
|
+
import NodeDecorator from "../../stories/NodeDecorator.svelte";
|
|
4
|
+
import { createSampleNodeData } from "../../stories/utils.js";
|
|
5
|
+
|
|
6
|
+
const { Story } = defineMeta({
|
|
7
|
+
title: "Nodes/GatewayNode",
|
|
8
|
+
tags: ["autodocs"],
|
|
9
|
+
parameters: {
|
|
10
|
+
layout: "centered",
|
|
11
|
+
},
|
|
12
|
+
});
|
|
13
|
+
</script>
|
|
14
|
+
|
|
15
|
+
<Story name="Default">
|
|
16
|
+
<NodeDecorator data={createSampleNodeData({
|
|
17
|
+
label: "If/Else",
|
|
18
|
+
config: {
|
|
19
|
+
textInput: "",
|
|
20
|
+
matchText: "",
|
|
21
|
+
operator: "equals",
|
|
22
|
+
caseSensitive: false,
|
|
23
|
+
branches: [
|
|
24
|
+
{ name: "True", value: true },
|
|
25
|
+
{ name: "False", value: false },
|
|
26
|
+
],
|
|
27
|
+
},
|
|
28
|
+
metadata: {
|
|
29
|
+
id: "if_else",
|
|
30
|
+
name: "If/Else",
|
|
31
|
+
description: "Simple conditional logic with text input, match text, and operator",
|
|
32
|
+
category: "logic",
|
|
33
|
+
version: "1.0.0",
|
|
34
|
+
type: "gateway",
|
|
35
|
+
supportedTypes: ["gateway"],
|
|
36
|
+
icon: "mdi:code-braces",
|
|
37
|
+
color: "#8b5cf6",
|
|
38
|
+
inputs: [
|
|
39
|
+
{ id: "data", name: "Input Data", type: "input", dataType: "mixed", required: false, description: "Optional input data (if not using textInput config)" },
|
|
40
|
+
{ id: "trigger", name: "Trigger", type: "input", dataType: "trigger", required: false, description: "" },
|
|
41
|
+
],
|
|
42
|
+
outputs: [],
|
|
43
|
+
},
|
|
44
|
+
})} />
|
|
45
|
+
</Story>
|
|
46
|
+
|
|
47
|
+
<Story name="Multiple Branches">
|
|
48
|
+
<NodeDecorator data={createSampleNodeData({
|
|
49
|
+
label: "Switch",
|
|
50
|
+
config: {
|
|
51
|
+
defaultBranch: "default",
|
|
52
|
+
caseSensitive: false,
|
|
53
|
+
branches: [
|
|
54
|
+
{ name: "case_1", label: "Case 1", value: "option1" },
|
|
55
|
+
{ name: "case_2", label: "Case 2", value: "option2" },
|
|
56
|
+
{ name: "default", label: "Default", value: "" },
|
|
57
|
+
],
|
|
58
|
+
},
|
|
59
|
+
metadata: {
|
|
60
|
+
id: "switch",
|
|
61
|
+
name: "Switch",
|
|
62
|
+
description: "Multi-branch routing based on configurable case values",
|
|
63
|
+
category: "logic",
|
|
64
|
+
version: "1.0.0",
|
|
65
|
+
type: "gateway",
|
|
66
|
+
supportedTypes: ["gateway"],
|
|
67
|
+
icon: "mdi:source-branch-sync",
|
|
68
|
+
color: "#8b5cf6",
|
|
69
|
+
inputs: [
|
|
70
|
+
{ id: "value", name: "Value", type: "input", dataType: "string", required: true, description: "The value to match against branch cases" },
|
|
71
|
+
{ id: "trigger", name: "Trigger", type: "input", dataType: "trigger", required: false, description: "" },
|
|
72
|
+
],
|
|
73
|
+
outputs: [],
|
|
74
|
+
},
|
|
75
|
+
})} />
|
|
76
|
+
</Story>
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
export default GatewayNode;
|
|
2
|
+
type GatewayNode = SvelteComponent<{
|
|
3
|
+
[x: string]: never;
|
|
4
|
+
}, {
|
|
5
|
+
[evt: string]: CustomEvent<any>;
|
|
6
|
+
}, {}> & {
|
|
7
|
+
$$bindings?: string | undefined;
|
|
8
|
+
};
|
|
9
|
+
declare const GatewayNode: $$__sveltets_2_IsomorphicComponent<{
|
|
10
|
+
[x: string]: never;
|
|
11
|
+
}, {
|
|
12
|
+
[evt: string]: CustomEvent<any>;
|
|
13
|
+
}, {}, {}, string>;
|
|
14
|
+
interface $$__sveltets_2_IsomorphicComponent<Props extends Record<string, any> = any, Events extends Record<string, any> = any, Slots extends Record<string, any> = any, Exports = {}, Bindings = string> {
|
|
15
|
+
new (options: import("svelte").ComponentConstructorOptions<Props>): import("svelte").SvelteComponent<Props, Events, Slots> & {
|
|
16
|
+
$$bindings?: Bindings;
|
|
17
|
+
} & Exports;
|
|
18
|
+
(internal: unknown, props: {
|
|
19
|
+
$$events?: Events;
|
|
20
|
+
$$slots?: Slots;
|
|
21
|
+
}): Exports & {
|
|
22
|
+
$set?: any;
|
|
23
|
+
$on?: any;
|
|
24
|
+
};
|
|
25
|
+
z_$$bindings?: Bindings;
|
|
26
|
+
}
|
|
@@ -18,7 +18,7 @@
|
|
|
18
18
|
getCategoryColorToken,
|
|
19
19
|
getPortBackgroundColor
|
|
20
20
|
} from '../../utils/colors.js';
|
|
21
|
-
import {
|
|
21
|
+
import { getConnectedHandles } from '../../stores/workflowStore.svelte.js';
|
|
22
22
|
|
|
23
23
|
interface Props {
|
|
24
24
|
data: WorkflowNode['data'] & {
|
|
@@ -75,7 +75,7 @@
|
|
|
75
75
|
|
|
76
76
|
// Check if port is connected
|
|
77
77
|
const handleId = `${props.data.nodeId}-${type}-${port.id}`;
|
|
78
|
-
return
|
|
78
|
+
return getConnectedHandles().has(handleId);
|
|
79
79
|
}
|
|
80
80
|
|
|
81
81
|
/**
|
|
@@ -98,12 +98,14 @@
|
|
|
98
98
|
|
|
99
99
|
// Check if branch output is connected
|
|
100
100
|
const handleId = `${props.data.nodeId}-output-${branchName}`;
|
|
101
|
-
return
|
|
101
|
+
return getConnectedHandles().has(handleId);
|
|
102
102
|
}
|
|
103
103
|
|
|
104
104
|
// Gateway-specific data - branches are calculated at runtime from config
|
|
105
105
|
let branches = $derived((props.data.config?.branches as Branch[]) || []);
|
|
106
|
-
let activeBranches = $derived(
|
|
106
|
+
let activeBranches = $derived(
|
|
107
|
+
(props.data.executionInfo?.output?.active_branches as string[]) || []
|
|
108
|
+
);
|
|
107
109
|
|
|
108
110
|
/**
|
|
109
111
|
* Derived list of visible branches based on hideUnconnectedHandles setting
|
|
@@ -200,7 +202,7 @@
|
|
|
200
202
|
position={Position.Left}
|
|
201
203
|
id={`${props.data.nodeId}-input-${port.id}`}
|
|
202
204
|
class="flowdrop-workflow-node__handle"
|
|
203
|
-
style="top: 50%; transform: translateY(-50%);
|
|
205
|
+
style="top: 50%; transform: translateY(-50%); --fd-handle-fill: {getDataTypeColorToken(
|
|
204
206
|
port.dataType
|
|
205
207
|
)}; --fd-handle-border-color: var(--fd-handle-border);"
|
|
206
208
|
role="button"
|
|
@@ -286,7 +288,7 @@
|
|
|
286
288
|
position={Position.Right}
|
|
287
289
|
id={`${props.data.nodeId}-output-${branch.name}`}
|
|
288
290
|
class={`flowdrop-workflow-node__handle ${isActive ? 'flowdrop-workflow-node__handle--active' : ''}`}
|
|
289
|
-
style="top: 50%; transform: translateY(-50%);
|
|
291
|
+
style="top: 50%; transform: translateY(-50%); --fd-handle-fill: {isActive
|
|
290
292
|
? getDataTypeColorToken('trigger')
|
|
291
293
|
: getDataTypeColorToken(
|
|
292
294
|
'trigger'
|
|
@@ -363,7 +365,7 @@
|
|
|
363
365
|
|
|
364
366
|
.flowdrop-workflow-node__header {
|
|
365
367
|
box-sizing: border-box;
|
|
366
|
-
padding: var(--fd-node-header-gap) var(--fd-space-
|
|
368
|
+
padding: var(--fd-node-header-gap) var(--fd-space-xl);
|
|
367
369
|
border-bottom: 1px solid var(--fd-border-muted);
|
|
368
370
|
background: var(--fd-header);
|
|
369
371
|
border-top-left-radius: var(--fd-radius-xl);
|
|
@@ -380,7 +382,7 @@
|
|
|
380
382
|
.flowdrop-workflow-node__header-title {
|
|
381
383
|
display: flex;
|
|
382
384
|
align-items: center;
|
|
383
|
-
gap: var(--fd-space-
|
|
385
|
+
gap: var(--fd-space-md);
|
|
384
386
|
min-height: var(--fd-node-header-title-height);
|
|
385
387
|
flex-shrink: 0;
|
|
386
388
|
}
|
|
@@ -449,16 +451,16 @@
|
|
|
449
451
|
align-items: center;
|
|
450
452
|
gap: 0;
|
|
451
453
|
min-height: var(--fd-node-port-row-height);
|
|
452
|
-
padding: var(--fd-space-
|
|
454
|
+
padding: var(--fd-space-3xs) 0;
|
|
453
455
|
position: relative;
|
|
454
456
|
}
|
|
455
457
|
|
|
456
458
|
.flowdrop-workflow-node__port-content {
|
|
457
|
-
padding: 0 var(--fd-space-
|
|
459
|
+
padding: 0 var(--fd-space-xl);
|
|
458
460
|
}
|
|
459
461
|
|
|
460
462
|
.flowdrop-badge {
|
|
461
|
-
padding: 0.125rem var(--fd-space-
|
|
463
|
+
padding: 0.125rem var(--fd-space-3xs);
|
|
462
464
|
border-radius: var(--fd-radius-sm);
|
|
463
465
|
font-size: 0.625rem;
|
|
464
466
|
font-weight: 500;
|
|
@@ -473,14 +475,14 @@
|
|
|
473
475
|
|
|
474
476
|
.flowdrop-badge--sm {
|
|
475
477
|
font-size: 0.625rem;
|
|
476
|
-
padding: 0.125rem var(--fd-space-
|
|
478
|
+
padding: 0.125rem var(--fd-space-3xs);
|
|
477
479
|
}
|
|
478
480
|
|
|
479
481
|
.workflow-node__no-branches {
|
|
480
482
|
display: flex;
|
|
481
483
|
align-items: center;
|
|
482
|
-
gap: var(--fd-space-
|
|
483
|
-
padding: var(--fd-space-
|
|
484
|
+
gap: var(--fd-space-xs);
|
|
485
|
+
padding: var(--fd-space-md);
|
|
484
486
|
background: var(--fd-warning-muted);
|
|
485
487
|
border: 1px solid var(--fd-warning);
|
|
486
488
|
border-radius: var(--fd-radius-lg);
|
|
@@ -508,7 +510,7 @@
|
|
|
508
510
|
}
|
|
509
511
|
|
|
510
512
|
.flowdrop-gap--2 {
|
|
511
|
-
gap: var(--fd-space-
|
|
513
|
+
gap: var(--fd-space-xs);
|
|
512
514
|
}
|
|
513
515
|
|
|
514
516
|
.flowdrop-items--center {
|
|
@@ -558,8 +560,8 @@
|
|
|
558
560
|
|
|
559
561
|
.flowdrop-workflow-node__config-btn {
|
|
560
562
|
position: absolute;
|
|
561
|
-
top: var(--fd-space-
|
|
562
|
-
right: var(--fd-space-
|
|
563
|
+
top: var(--fd-space-xs);
|
|
564
|
+
right: var(--fd-space-xs);
|
|
563
565
|
width: 1.5rem;
|
|
564
566
|
height: 1.5rem;
|
|
565
567
|
background-color: var(--fd-backdrop);
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
<script module>
|
|
2
|
+
import { defineMeta } from "@storybook/addon-svelte-csf";
|
|
3
|
+
import NodeDecorator from "../../stories/NodeDecorator.svelte";
|
|
4
|
+
|
|
5
|
+
const { Story } = defineMeta({
|
|
6
|
+
title: "Nodes/IdeaNode",
|
|
7
|
+
tags: ["autodocs"],
|
|
8
|
+
parameters: {
|
|
9
|
+
layout: "centered",
|
|
10
|
+
},
|
|
11
|
+
});
|
|
12
|
+
</script>
|
|
13
|
+
|
|
14
|
+
<Story name="Default">
|
|
15
|
+
<NodeDecorator data={{
|
|
16
|
+
label: "Idea",
|
|
17
|
+
config: {},
|
|
18
|
+
metadata: {
|
|
19
|
+
id: "idea",
|
|
20
|
+
name: "Idea",
|
|
21
|
+
description: "Planning node",
|
|
22
|
+
category: "helpers",
|
|
23
|
+
version: "1.0.0",
|
|
24
|
+
type: "idea",
|
|
25
|
+
inputs: [],
|
|
26
|
+
outputs: [],
|
|
27
|
+
},
|
|
28
|
+
}} />
|
|
29
|
+
</Story>
|
|
30
|
+
|
|
31
|
+
<Story name="With Content">
|
|
32
|
+
<NodeDecorator data={{
|
|
33
|
+
label: "Feature Idea",
|
|
34
|
+
config: {
|
|
35
|
+
content: "Add batch processing support to handle multiple items in parallel.",
|
|
36
|
+
},
|
|
37
|
+
metadata: {
|
|
38
|
+
id: "idea",
|
|
39
|
+
name: "Idea",
|
|
40
|
+
description: "Planning node",
|
|
41
|
+
category: "helpers",
|
|
42
|
+
version: "1.0.0",
|
|
43
|
+
type: "idea",
|
|
44
|
+
inputs: [],
|
|
45
|
+
outputs: [],
|
|
46
|
+
},
|
|
47
|
+
}} />
|
|
48
|
+
</Story>
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
export default IdeaNode;
|
|
2
|
+
type IdeaNode = SvelteComponent<{
|
|
3
|
+
[x: string]: never;
|
|
4
|
+
}, {
|
|
5
|
+
[evt: string]: CustomEvent<any>;
|
|
6
|
+
}, {}> & {
|
|
7
|
+
$$bindings?: string | undefined;
|
|
8
|
+
};
|
|
9
|
+
declare const IdeaNode: $$__sveltets_2_IsomorphicComponent<{
|
|
10
|
+
[x: string]: never;
|
|
11
|
+
}, {
|
|
12
|
+
[evt: string]: CustomEvent<any>;
|
|
13
|
+
}, {}, {}, string>;
|
|
14
|
+
interface $$__sveltets_2_IsomorphicComponent<Props extends Record<string, any> = any, Events extends Record<string, any> = any, Slots extends Record<string, any> = any, Exports = {}, Bindings = string> {
|
|
15
|
+
new (options: import("svelte").ComponentConstructorOptions<Props>): import("svelte").SvelteComponent<Props, Events, Slots> & {
|
|
16
|
+
$$bindings?: Bindings;
|
|
17
|
+
} & Exports;
|
|
18
|
+
(internal: unknown, props: {
|
|
19
|
+
$$events?: Events;
|
|
20
|
+
$$slots?: Slots;
|
|
21
|
+
}): Exports & {
|
|
22
|
+
$set?: any;
|
|
23
|
+
$on?: any;
|
|
24
|
+
};
|
|
25
|
+
z_$$bindings?: Bindings;
|
|
26
|
+
}
|
|
@@ -151,7 +151,7 @@
|
|
|
151
151
|
position={Position.Left}
|
|
152
152
|
style="--fd-handle-fill: {getDataTypeColor(
|
|
153
153
|
IDEA_DATA_TYPE
|
|
154
|
-
)}; --fd-handle-border-color: var(--fd-handle-border); top: 40px; transform: translateY(-50%);
|
|
154
|
+
)}; --fd-handle-border-color: var(--fd-handle-border); top: 40px; transform: translateY(-50%); z-index: 30;"
|
|
155
155
|
id={`${props.data.nodeId}-input-left`}
|
|
156
156
|
/>
|
|
157
157
|
{/if}
|
|
@@ -163,7 +163,7 @@
|
|
|
163
163
|
position={Position.Top}
|
|
164
164
|
style="--fd-handle-fill: {getDataTypeColor(
|
|
165
165
|
IDEA_DATA_TYPE
|
|
166
|
-
)}; --fd-handle-border-color: var(--fd-handle-border); left: 150px; transform: translateX(-50%);
|
|
166
|
+
)}; --fd-handle-border-color: var(--fd-handle-border); left: 150px; transform: translateX(-50%); z-index: 30;"
|
|
167
167
|
id={`${props.data.nodeId}-input-top`}
|
|
168
168
|
/>
|
|
169
169
|
{/if}
|
|
@@ -215,7 +215,7 @@
|
|
|
215
215
|
position={Position.Right}
|
|
216
216
|
style="--fd-handle-fill: {getDataTypeColor(
|
|
217
217
|
IDEA_DATA_TYPE
|
|
218
|
-
)}; --fd-handle-border-color: var(--fd-handle-border); top: 40px; transform: translateY(-50%);
|
|
218
|
+
)}; --fd-handle-border-color: var(--fd-handle-border); top: 40px; transform: translateY(-50%); z-index: 30;"
|
|
219
219
|
id={`${props.data.nodeId}-output-right`}
|
|
220
220
|
/>
|
|
221
221
|
{/if}
|
|
@@ -227,7 +227,7 @@
|
|
|
227
227
|
position={Position.Bottom}
|
|
228
228
|
style="--fd-handle-fill: {getDataTypeColor(
|
|
229
229
|
IDEA_DATA_TYPE
|
|
230
|
-
)}; --fd-handle-border-color: var(--fd-handle-border); left: 150px; transform: translateX(-50%);
|
|
230
|
+
)}; --fd-handle-border-color: var(--fd-handle-border); left: 150px; transform: translateX(-50%); z-index: 30;"
|
|
231
231
|
id={`${props.data.nodeId}-output-bottom`}
|
|
232
232
|
/>
|
|
233
233
|
{/if}
|
|
@@ -286,7 +286,7 @@
|
|
|
286
286
|
display: flex;
|
|
287
287
|
align-items: center;
|
|
288
288
|
gap: 0.625rem;
|
|
289
|
-
padding: var(--fd-space-
|
|
289
|
+
padding: var(--fd-space-md) var(--fd-space-xl) var(--fd-space-xs);
|
|
290
290
|
}
|
|
291
291
|
|
|
292
292
|
.flowdrop-idea-node__icon-wrapper {
|
|
@@ -323,7 +323,7 @@
|
|
|
323
323
|
|
|
324
324
|
/* Body section */
|
|
325
325
|
.flowdrop-idea-node__body {
|
|
326
|
-
padding: 0 var(--fd-space-
|
|
326
|
+
padding: 0 var(--fd-space-xl) var(--fd-space-md);
|
|
327
327
|
}
|
|
328
328
|
|
|
329
329
|
.flowdrop-idea-node__description {
|
|
@@ -342,8 +342,8 @@
|
|
|
342
342
|
.flowdrop-idea-node__processing {
|
|
343
343
|
display: flex;
|
|
344
344
|
align-items: center;
|
|
345
|
-
gap: var(--fd-space-
|
|
346
|
-
padding: var(--fd-space-
|
|
345
|
+
gap: var(--fd-space-xs);
|
|
346
|
+
padding: var(--fd-space-xs) var(--fd-space-xl);
|
|
347
347
|
font-size: var(--fd-text-xs);
|
|
348
348
|
color: var(--fd-muted-foreground);
|
|
349
349
|
border-top: 1px solid var(--fd-border-muted);
|
|
@@ -362,8 +362,8 @@
|
|
|
362
362
|
.flowdrop-idea-node__error {
|
|
363
363
|
display: flex;
|
|
364
364
|
align-items: center;
|
|
365
|
-
gap: var(--fd-space-
|
|
366
|
-
padding: var(--fd-space-
|
|
365
|
+
gap: var(--fd-space-xs);
|
|
366
|
+
padding: var(--fd-space-xs) var(--fd-space-xl);
|
|
367
367
|
font-size: var(--fd-text-xs);
|
|
368
368
|
color: var(--fd-error);
|
|
369
369
|
border-top: 1px solid color-mix(in srgb, var(--fd-error) 30%, transparent);
|
|
@@ -420,22 +420,6 @@
|
|
|
420
420
|
pointer-events: auto !important;
|
|
421
421
|
}
|
|
422
422
|
|
|
423
|
-
:global(.flowdrop-idea-node .svelte-flow__handle-left) {
|
|
424
|
-
left: -10px !important;
|
|
425
|
-
}
|
|
426
|
-
|
|
427
|
-
:global(.flowdrop-idea-node .svelte-flow__handle-right) {
|
|
428
|
-
right: -10px !important;
|
|
429
|
-
}
|
|
430
|
-
|
|
431
|
-
:global(.flowdrop-idea-node .svelte-flow__handle-top) {
|
|
432
|
-
top: -10px !important;
|
|
433
|
-
}
|
|
434
|
-
|
|
435
|
-
:global(.flowdrop-idea-node .svelte-flow__handle-bottom) {
|
|
436
|
-
bottom: -10px !important;
|
|
437
|
-
}
|
|
438
|
-
|
|
439
423
|
:global(.flowdrop-idea-node .svelte-flow__handle-left:hover),
|
|
440
424
|
:global(.flowdrop-idea-node .svelte-flow__handle-right:hover) {
|
|
441
425
|
transform: translateY(-50%) scale(1.2) !important;
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
<script module>
|
|
2
|
+
import { defineMeta } from "@storybook/addon-svelte-csf";
|
|
3
|
+
import NodeDecorator from "../../stories/NodeDecorator.svelte";
|
|
4
|
+
|
|
5
|
+
const { Story } = defineMeta({
|
|
6
|
+
title: "Nodes/NotesNode",
|
|
7
|
+
tags: ["autodocs"],
|
|
8
|
+
parameters: {
|
|
9
|
+
layout: "centered",
|
|
10
|
+
},
|
|
11
|
+
});
|
|
12
|
+
</script>
|
|
13
|
+
|
|
14
|
+
<Story name="Default">
|
|
15
|
+
<NodeDecorator data={{
|
|
16
|
+
label: "Notes",
|
|
17
|
+
config: {},
|
|
18
|
+
metadata: {
|
|
19
|
+
id: "notes",
|
|
20
|
+
name: "Notes",
|
|
21
|
+
description: "Documentation node",
|
|
22
|
+
category: "helpers",
|
|
23
|
+
version: "1.0.0",
|
|
24
|
+
type: "note",
|
|
25
|
+
inputs: [],
|
|
26
|
+
outputs: [],
|
|
27
|
+
},
|
|
28
|
+
}} />
|
|
29
|
+
</Story>
|
|
30
|
+
|
|
31
|
+
<Story name="With Content">
|
|
32
|
+
<NodeDecorator data={{
|
|
33
|
+
label: "Notes",
|
|
34
|
+
config: {
|
|
35
|
+
content: "## Important\n\nThis workflow handles **user onboarding**.\n\n- Step 1: Validate email\n- Step 2: Create account\n- Step 3: Send welcome email",
|
|
36
|
+
noteType: "info",
|
|
37
|
+
},
|
|
38
|
+
metadata: {
|
|
39
|
+
id: "notes",
|
|
40
|
+
name: "Notes",
|
|
41
|
+
description: "Documentation node",
|
|
42
|
+
category: "helpers",
|
|
43
|
+
version: "1.0.0",
|
|
44
|
+
type: "note",
|
|
45
|
+
inputs: [],
|
|
46
|
+
outputs: [],
|
|
47
|
+
},
|
|
48
|
+
}} />
|
|
49
|
+
</Story>
|
|
50
|
+
|
|
51
|
+
<Story name="Warning">
|
|
52
|
+
<NodeDecorator data={{
|
|
53
|
+
label: "Warning",
|
|
54
|
+
config: {
|
|
55
|
+
content: "Rate limiting is applied to this API call. Max 100 requests/minute.",
|
|
56
|
+
noteType: "warning",
|
|
57
|
+
},
|
|
58
|
+
metadata: {
|
|
59
|
+
id: "notes",
|
|
60
|
+
name: "Notes",
|
|
61
|
+
description: "Documentation node",
|
|
62
|
+
category: "helpers",
|
|
63
|
+
version: "1.0.0",
|
|
64
|
+
type: "note",
|
|
65
|
+
inputs: [],
|
|
66
|
+
outputs: [],
|
|
67
|
+
},
|
|
68
|
+
}} />
|
|
69
|
+
</Story>
|