@d34dman/flowdrop 0.0.63 → 0.0.65

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.
Files changed (125) hide show
  1. package/README.md +2 -0
  2. package/dist/adapters/agentspec/AgentSpecAdapter.js +1 -40
  3. package/dist/api/enhanced-client.d.ts +19 -0
  4. package/dist/api/enhanced-client.js +9 -0
  5. package/dist/components/App.svelte +32 -36
  6. package/dist/components/CanvasBanner.stories.svelte +12 -8
  7. package/dist/components/CanvasBanner.stories.svelte.d.ts +1 -1
  8. package/dist/components/ConfigModal.svelte +7 -11
  9. package/dist/components/ConfigModal.svelte.d.ts +5 -23
  10. package/dist/components/ConfigPanel.stories.svelte +35 -26
  11. package/dist/components/ConfigPanel.stories.svelte.d.ts +1 -1
  12. package/dist/components/LoadingSpinner.stories.svelte +13 -13
  13. package/dist/components/LoadingSpinner.stories.svelte.d.ts +1 -1
  14. package/dist/components/Logo.stories.svelte +4 -4
  15. package/dist/components/Logo.stories.svelte.d.ts +1 -1
  16. package/dist/components/LogsSidebar.svelte +6 -9
  17. package/dist/components/LogsSidebar.svelte.d.ts +3 -20
  18. package/dist/components/MarkdownDisplay.stories.svelte +25 -10
  19. package/dist/components/MarkdownDisplay.stories.svelte.d.ts +1 -1
  20. package/dist/components/Navbar.stories.svelte +42 -30
  21. package/dist/components/Navbar.stories.svelte.d.ts +1 -1
  22. package/dist/components/Navbar.svelte +6 -3
  23. package/dist/components/NodeSidebar.svelte +1 -0
  24. package/dist/components/NodeStatusOverlay.stories.svelte +61 -50
  25. package/dist/components/NodeStatusOverlay.stories.svelte.d.ts +1 -1
  26. package/dist/components/NodeStatusOverlay.svelte +4 -4
  27. package/dist/components/PipelineStatus.svelte +10 -12
  28. package/dist/components/PipelineStatus.svelte.d.ts +2 -2
  29. package/dist/components/SchemaForm.stories.svelte +97 -82
  30. package/dist/components/SchemaForm.stories.svelte.d.ts +1 -1
  31. package/dist/components/SchemaForm.svelte +6 -2
  32. package/dist/components/SettingsPanel.svelte +6 -1
  33. package/dist/components/StatusIcon.stories.svelte +15 -15
  34. package/dist/components/StatusIcon.stories.svelte.d.ts +1 -1
  35. package/dist/components/StatusIcon.svelte +1 -1
  36. package/dist/components/StatusLabel.stories.svelte +8 -8
  37. package/dist/components/StatusLabel.stories.svelte.d.ts +1 -1
  38. package/dist/components/ThemeToggle.stories.svelte +10 -10
  39. package/dist/components/ThemeToggle.stories.svelte.d.ts +1 -1
  40. package/dist/components/WorkflowEditor.svelte +23 -5
  41. package/dist/components/form/FormAutocomplete.svelte +2 -0
  42. package/dist/components/form/FormCheckboxGroup.stories.svelte +13 -13
  43. package/dist/components/form/FormCheckboxGroup.stories.svelte.d.ts +1 -1
  44. package/dist/components/form/FormField.svelte +2 -2
  45. package/dist/components/form/FormFieldLight.svelte +4 -4
  46. package/dist/components/form/FormFieldWrapper.stories.svelte +38 -16
  47. package/dist/components/form/FormFieldWrapper.stories.svelte.d.ts +1 -1
  48. package/dist/components/form/FormNumberField.stories.svelte +21 -18
  49. package/dist/components/form/FormNumberField.stories.svelte.d.ts +1 -1
  50. package/dist/components/form/FormRangeField.stories.svelte +13 -13
  51. package/dist/components/form/FormRangeField.stories.svelte.d.ts +1 -1
  52. package/dist/components/form/FormSelect.stories.svelte +21 -21
  53. package/dist/components/form/FormSelect.stories.svelte.d.ts +1 -1
  54. package/dist/components/form/FormTemplateEditor.svelte +0 -13
  55. package/dist/components/form/FormTemplateEditor.svelte.d.ts +1 -7
  56. package/dist/components/form/FormTextField.stories.svelte +17 -17
  57. package/dist/components/form/FormTextField.stories.svelte.d.ts +1 -1
  58. package/dist/components/form/FormTextarea.stories.svelte +21 -18
  59. package/dist/components/form/FormTextarea.stories.svelte.d.ts +1 -1
  60. package/dist/components/form/FormToggle.stories.svelte +13 -13
  61. package/dist/components/form/FormToggle.stories.svelte.d.ts +1 -1
  62. package/dist/components/form/index.d.ts +2 -1
  63. package/dist/components/form/index.js +1 -2
  64. package/dist/components/form/types.d.ts +8 -20
  65. package/dist/components/form/types.js +3 -8
  66. package/dist/components/interrupt/ChoicePrompt.stories.svelte +37 -28
  67. package/dist/components/interrupt/ChoicePrompt.stories.svelte.d.ts +1 -1
  68. package/dist/components/interrupt/ConfirmationPrompt.stories.svelte +57 -35
  69. package/dist/components/interrupt/ConfirmationPrompt.stories.svelte.d.ts +1 -1
  70. package/dist/components/interrupt/FormPrompt.svelte +1 -0
  71. package/dist/components/interrupt/ReviewPrompt.stories.svelte +52 -31
  72. package/dist/components/interrupt/ReviewPrompt.stories.svelte.d.ts +1 -1
  73. package/dist/components/interrupt/ReviewPrompt.svelte +44 -25
  74. package/dist/components/interrupt/TextInputPrompt.stories.svelte +32 -19
  75. package/dist/components/interrupt/TextInputPrompt.stories.svelte.d.ts +1 -1
  76. package/dist/components/interrupt/TextInputPrompt.svelte +1 -0
  77. package/dist/components/layouts/MainLayout.svelte +3 -0
  78. package/dist/components/nodes/GatewayNode.stories.svelte +96 -64
  79. package/dist/components/nodes/IdeaNode.stories.svelte +40 -36
  80. package/dist/components/nodes/NotesNode.stories.svelte +61 -54
  81. package/dist/components/nodes/SimpleNode.stories.svelte +141 -83
  82. package/dist/components/nodes/SquareNode.stories.svelte +70 -44
  83. package/dist/components/nodes/TerminalNode.stories.svelte +10 -10
  84. package/dist/components/nodes/TerminalNode.svelte +6 -2
  85. package/dist/components/nodes/ToolNode.stories.svelte +177 -59
  86. package/dist/components/nodes/WorkflowNode.stories.svelte +43 -38
  87. package/dist/components/playground/MessageBubble.stories.svelte +51 -38
  88. package/dist/components/playground/MessageBubble.stories.svelte.d.ts +1 -1
  89. package/dist/components/playground/Playground.svelte +2 -4
  90. package/dist/config/constants.d.ts +21 -0
  91. package/dist/config/constants.js +9 -0
  92. package/dist/core/index.d.ts +7 -5
  93. package/dist/core/index.js +5 -5
  94. package/dist/editor/index.d.ts +4 -4
  95. package/dist/editor/index.js +3 -4
  96. package/dist/form/code.js +16 -4
  97. package/dist/form/fieldRegistry.d.ts +8 -82
  98. package/dist/form/fieldRegistry.js +9 -101
  99. package/dist/form/full.d.ts +4 -1
  100. package/dist/form/full.js +6 -1
  101. package/dist/form/index.d.ts +1 -1
  102. package/dist/form/index.js +0 -2
  103. package/dist/form/markdown.js +11 -3
  104. package/dist/helpers/workflowEditorHelper.d.ts +0 -3
  105. package/dist/helpers/workflowEditorHelper.js +7 -26
  106. package/dist/index.js +3 -0
  107. package/dist/services/apiVariableService.d.ts +1 -3
  108. package/dist/services/apiVariableService.js +3 -4
  109. package/dist/services/dynamicSchemaService.js +3 -4
  110. package/dist/stories/CanvasDecorator.svelte +7 -8
  111. package/dist/stories/CanvasDecorator.svelte.d.ts +2 -2
  112. package/dist/stories/NodeDecorator.svelte +13 -14
  113. package/dist/stories/NodeDecorator.svelte.d.ts +1 -1
  114. package/dist/stories/utils.d.ts +2 -2
  115. package/dist/stories/utils.js +55 -55
  116. package/dist/styles/base.css +12 -4
  117. package/dist/styles/tokens.css +138 -130
  118. package/dist/types/interrupt.d.ts +1 -4
  119. package/dist/utils/errors.d.ts +28 -0
  120. package/dist/utils/errors.js +44 -0
  121. package/dist/utils/handleIds.d.ts +35 -0
  122. package/dist/utils/handleIds.js +58 -0
  123. package/package.json +53 -12
  124. package/dist/api/client.d.ts +0 -110
  125. package/dist/api/client.js +0 -240
@@ -11,7 +11,7 @@ declare const ReviewPrompt: $$__sveltets_2_IsomorphicComponent<{
11
11
  }, {
12
12
  [evt: string]: CustomEvent<any>;
13
13
  }, {}, {}, string>;
14
- import ReviewPrompt from "./ReviewPrompt.svelte";
14
+ import ReviewPrompt from './ReviewPrompt.svelte';
15
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
16
  new (options: import("svelte").ComponentConstructorOptions<Props>): import("svelte").SvelteComponent<Props, Events, Slots> & {
17
17
  $$bindings?: Bindings;
@@ -50,11 +50,13 @@
50
50
  }: Props = $props();
51
51
 
52
52
  /** Local state: map of field -> accepted boolean. Default all to true (accept). */
53
+ // svelte-ignore state_referenced_locally — initial default, user toggles during review
53
54
  let decisions = $state<Record<string, boolean>>(
54
55
  Object.fromEntries(config.changes.map((c) => [c.field, true]))
55
56
  );
56
57
 
57
58
  /** Local state: map of field -> HTML view mode ('rendered' or 'raw'). Default to 'rendered'. */
59
+ // svelte-ignore state_referenced_locally
58
60
  let htmlViewMode = $state<Record<string, 'rendered' | 'raw'>>(
59
61
  Object.fromEntries(config.changes.map((c) => [c.field, 'rendered']))
60
62
  );
@@ -176,7 +178,11 @@
176
178
  * Supports strings (word-level), arrays (element-level), and objects (JSON line-level).
177
179
  * For HTML strings, strips tags and diffs the plain text content.
178
180
  */
179
- function computeDiff(original: unknown, proposed: unknown, rawMode: boolean = false): Change[] | null {
181
+ function computeDiff(
182
+ original: unknown,
183
+ proposed: unknown,
184
+ rawMode: boolean = false
185
+ ): Change[] | null {
180
186
  if (typeof original === 'string' && typeof proposed === 'string') {
181
187
  const origText = !rawMode && containsHtml(original) ? stripHtmlTags(original) : original;
182
188
  const propText = !rawMode && containsHtml(proposed) ? stripHtmlTags(proposed) : proposed;
@@ -335,9 +341,13 @@
335
341
  <div class="review-prompt__diff-row">
336
342
  <span class="review-prompt__diff-label">Original:</span>
337
343
  {#if isHtml && !isRawView}
338
- <span class="review-prompt__diff-value review-prompt__html-content">{@html sanitizeHtml(String(change.original))}</span>
344
+ <span class="review-prompt__diff-value review-prompt__html-content"
345
+ >{@html sanitizeHtml(String(change.original))}</span
346
+ >
339
347
  {:else if isHtml && isRawView}
340
- <code class="review-prompt__diff-value review-prompt__raw-html">{change.original}</code>
348
+ <code class="review-prompt__diff-value review-prompt__raw-html"
349
+ >{change.original}</code
350
+ >
341
351
  {:else}
342
352
  <span class="review-prompt__diff-value">
343
353
  {formatValue(change.original)}
@@ -347,9 +357,15 @@
347
357
  <div class="review-prompt__diff-row">
348
358
  <span class="review-prompt__diff-label">Proposed:</span>
349
359
  {#if isHtml && !isRawView}
350
- <span class="review-prompt__diff-value review-prompt__diff-value--proposed review-prompt__html-content">{@html sanitizeHtml(String(change.proposed))}</span>
360
+ <span
361
+ class="review-prompt__diff-value review-prompt__diff-value--proposed review-prompt__html-content"
362
+ >{@html sanitizeHtml(String(change.proposed))}</span
363
+ >
351
364
  {:else if isHtml && isRawView}
352
- <code class="review-prompt__diff-value review-prompt__diff-value--proposed review-prompt__raw-html">{change.proposed}</code>
365
+ <code
366
+ class="review-prompt__diff-value review-prompt__diff-value--proposed review-prompt__raw-html"
367
+ >{change.proposed}</code
368
+ >
353
369
  {:else}
354
370
  <span class="review-prompt__diff-value review-prompt__diff-value--proposed">
355
371
  {formatValue(change.proposed)}
@@ -359,21 +375,26 @@
359
375
  {#if diff}
360
376
  <div class="review-prompt__diff-row">
361
377
  <span class="review-prompt__diff-label">Diff:</span>
362
- {#if isMultiLineDiff(diff)}
363
- <pre class="review-prompt__diff-value review-prompt__diff-block">{#each diff as part}{#if part.added}<span class="review-prompt__diff-token--added">{part.value}</span>{:else if part.removed}<span class="review-prompt__diff-token--removed">{part.value}</span>{:else}<span>{part.value}</span>{/if}{/each}</pre>
364
- {:else}
365
- <span class="review-prompt__diff-value review-prompt__diff-inline">
366
- {#each diff as part}
367
- {#if part.added}
368
- <span class="review-prompt__diff-token--added">{part.value}</span>
369
- {:else if part.removed}
370
- <span class="review-prompt__diff-token--removed">{part.value}</span>
371
- {:else}
372
- <span>{part.value}</span>
373
- {/if}
374
- {/each}
375
- </span>
376
- {/if}
378
+ {#if isMultiLineDiff(diff)}
379
+ <pre
380
+ class="review-prompt__diff-value review-prompt__diff-block">{#each diff as part}{#if part.added}<span
381
+ class="review-prompt__diff-token--added">{part.value}</span
382
+ >{:else if part.removed}<span class="review-prompt__diff-token--removed"
383
+ >{part.value}</span
384
+ >{:else}<span>{part.value}</span>{/if}{/each}</pre>
385
+ {:else}
386
+ <span class="review-prompt__diff-value review-prompt__diff-inline">
387
+ {#each diff as part}
388
+ {#if part.added}
389
+ <span class="review-prompt__diff-token--added">{part.value}</span>
390
+ {:else if part.removed}
391
+ <span class="review-prompt__diff-token--removed">{part.value}</span>
392
+ {:else}
393
+ <span>{part.value}</span>
394
+ {/if}
395
+ {/each}
396
+ </span>
397
+ {/if}
377
398
  </div>
378
399
  {/if}
379
400
  </div>
@@ -404,8 +425,8 @@
404
425
  {#if isResolved && resolvedValue}
405
426
  <div class="review-prompt__summary">
406
427
  <span class="review-prompt__summary-text">
407
- {resolvedValue.summary.accepted} accepted, {resolvedValue.summary.rejected} rejected
408
- out of {resolvedValue.summary.total} changes
428
+ {resolvedValue.summary.accepted} accepted, {resolvedValue.summary.rejected} rejected out of {resolvedValue
429
+ .summary.total} changes
409
430
  </span>
410
431
  </div>
411
432
  {/if}
@@ -415,9 +436,7 @@
415
436
  <div class="review-prompt__resolved-badge">
416
437
  <Icon icon="mdi:check-circle" />
417
438
  <span>
418
- {resolvedByUserName
419
- ? `Response submitted by ${resolvedByUserName}`
420
- : 'Response submitted'}
439
+ {resolvedByUserName ? `Response submitted by ${resolvedByUserName}` : 'Response submitted'}
421
440
  </span>
422
441
  </div>
423
442
  {/if}
@@ -1,34 +1,47 @@
1
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";
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
6
 
7
7
  const { Story } = defineMeta({
8
- title: "Interrupt/TextInputPrompt",
8
+ title: 'Interrupt/TextInputPrompt',
9
9
  component: TextInputPrompt,
10
- tags: ["autodocs"],
10
+ tags: ['autodocs'],
11
11
  args: {
12
12
  config: createTextConfig(),
13
13
  isResolved: false,
14
14
  isSubmitting: false,
15
- onSubmit: fn(),
16
- },
15
+ onSubmit: fn()
16
+ }
17
17
  });
18
18
  </script>
19
19
 
20
20
  <Story name="Default" />
21
21
 
22
- <Story name="Multiline" args={{
23
- config: createTextConfig({ message: "Describe the issue in detail:", multiline: true, placeholder: "Type your description..." }),
24
- }} />
22
+ <Story
23
+ name="Multiline"
24
+ args={{
25
+ config: createTextConfig({
26
+ message: 'Describe the issue in detail:',
27
+ multiline: true,
28
+ placeholder: 'Type your description...'
29
+ })
30
+ }}
31
+ />
25
32
 
26
- <Story name="With Constraints" args={{
27
- config: createTextConfig({ message: "Enter a short summary:", minLength: 10, maxLength: 100 }),
28
- }} />
33
+ <Story
34
+ name="With Constraints"
35
+ args={{
36
+ config: createTextConfig({ message: 'Enter a short summary:', minLength: 10, maxLength: 100 })
37
+ }}
38
+ />
29
39
 
30
- <Story name="Resolved" args={{
31
- isResolved: true,
32
- resolvedValue: "The workflow completed successfully with all checks passed.",
33
- resolvedByUserName: "Charlie",
34
- }} />
40
+ <Story
41
+ name="Resolved"
42
+ args={{
43
+ isResolved: true,
44
+ resolvedValue: 'The workflow completed successfully with all checks passed.',
45
+ resolvedByUserName: 'Charlie'
46
+ }}
47
+ />
@@ -11,7 +11,7 @@ declare const TextInputPrompt: $$__sveltets_2_IsomorphicComponent<{
11
11
  }, {
12
12
  [evt: string]: CustomEvent<any>;
13
13
  }, {}, {}, string>;
14
- import TextInputPrompt from "./TextInputPrompt.svelte";
14
+ import TextInputPrompt from './TextInputPrompt.svelte';
15
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
16
  new (options: import("svelte").ComponentConstructorOptions<Props>): import("svelte").SvelteComponent<Props, Events, Slots> & {
17
17
  $$bindings?: Bindings;
@@ -42,6 +42,7 @@
42
42
  }: Props = $props();
43
43
 
44
44
  /** Local state for input value */
45
+ // svelte-ignore state_referenced_locally — initial default, user edits the input
45
46
  let inputValue = $state(config.defaultValue ?? '');
46
47
 
47
48
  /** Display value - either resolved or current input */
@@ -103,12 +103,15 @@
103
103
  }: Props = $props();
104
104
 
105
105
  /** Current width of the left sidebar */
106
+ // svelte-ignore state_referenced_locally — initial default, component owns draggable state
106
107
  let leftSidebarWidth = $state(initialLeftWidth);
107
108
 
108
109
  /** Current width of the right sidebar */
110
+ // svelte-ignore state_referenced_locally
109
111
  let rightSidebarWidth = $state(initialRightWidth);
110
112
 
111
113
  /** Current height of the bottom panel */
114
+ // svelte-ignore state_referenced_locally
112
115
  let bottomPanelHeightState = $state(initialBottomHeight);
113
116
 
114
117
  /**
@@ -1,76 +1,108 @@
1
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";
2
+ import { defineMeta } from '@storybook/addon-svelte-csf';
3
+ import NodeDecorator from '../../stories/NodeDecorator.svelte';
4
+ import { createSampleNodeData } from '../../stories/utils.js';
5
5
 
6
6
  const { Story } = defineMeta({
7
- title: "Nodes/GatewayNode",
8
- tags: ["autodocs"],
7
+ title: 'Nodes/GatewayNode',
8
+ tags: ['autodocs'],
9
9
  parameters: {
10
- layout: "centered",
11
- },
10
+ layout: 'centered'
11
+ }
12
12
  });
13
13
  </script>
14
14
 
15
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
- })} />
16
+ <NodeDecorator
17
+ data={createSampleNodeData({
18
+ label: 'If/Else',
19
+ config: {
20
+ textInput: '',
21
+ matchText: '',
22
+ operator: 'equals',
23
+ caseSensitive: false,
24
+ branches: [
25
+ { name: 'True', value: true },
26
+ { name: 'False', value: false }
27
+ ]
28
+ },
29
+ metadata: {
30
+ id: 'if_else',
31
+ name: 'If/Else',
32
+ description: 'Simple conditional logic with text input, match text, and operator',
33
+ category: 'logic',
34
+ version: '1.0.0',
35
+ type: 'gateway',
36
+ supportedTypes: ['gateway'],
37
+ icon: 'mdi:code-braces',
38
+ color: '#8b5cf6',
39
+ inputs: [
40
+ {
41
+ id: 'data',
42
+ name: 'Input Data',
43
+ type: 'input',
44
+ dataType: 'mixed',
45
+ required: false,
46
+ description: 'Optional input data (if not using textInput config)'
47
+ },
48
+ {
49
+ id: 'trigger',
50
+ name: 'Trigger',
51
+ type: 'input',
52
+ dataType: 'trigger',
53
+ required: false,
54
+ description: ''
55
+ }
56
+ ],
57
+ outputs: []
58
+ }
59
+ })}
60
+ />
45
61
  </Story>
46
62
 
47
63
  <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
- })} />
64
+ <NodeDecorator
65
+ data={createSampleNodeData({
66
+ label: 'Switch',
67
+ config: {
68
+ defaultBranch: 'default',
69
+ caseSensitive: false,
70
+ branches: [
71
+ { name: 'case_1', label: 'Case 1', value: 'option1' },
72
+ { name: 'case_2', label: 'Case 2', value: 'option2' },
73
+ { name: 'default', label: 'Default', value: '' }
74
+ ]
75
+ },
76
+ metadata: {
77
+ id: 'switch',
78
+ name: 'Switch',
79
+ description: 'Multi-branch routing based on configurable case values',
80
+ category: 'logic',
81
+ version: '1.0.0',
82
+ type: 'gateway',
83
+ supportedTypes: ['gateway'],
84
+ icon: 'mdi:source-branch-sync',
85
+ color: '#8b5cf6',
86
+ inputs: [
87
+ {
88
+ id: 'value',
89
+ name: 'Value',
90
+ type: 'input',
91
+ dataType: 'string',
92
+ required: true,
93
+ description: 'The value to match against branch cases'
94
+ },
95
+ {
96
+ id: 'trigger',
97
+ name: 'Trigger',
98
+ type: 'input',
99
+ dataType: 'trigger',
100
+ required: false,
101
+ description: ''
102
+ }
103
+ ],
104
+ outputs: []
105
+ }
106
+ })}
107
+ />
76
108
  </Story>
@@ -1,48 +1,52 @@
1
1
  <script module>
2
- import { defineMeta } from "@storybook/addon-svelte-csf";
3
- import NodeDecorator from "../../stories/NodeDecorator.svelte";
2
+ import { defineMeta } from '@storybook/addon-svelte-csf';
3
+ import NodeDecorator from '../../stories/NodeDecorator.svelte';
4
4
 
5
5
  const { Story } = defineMeta({
6
- title: "Nodes/IdeaNode",
7
- tags: ["autodocs"],
6
+ title: 'Nodes/IdeaNode',
7
+ tags: ['autodocs'],
8
8
  parameters: {
9
- layout: "centered",
10
- },
9
+ layout: 'centered'
10
+ }
11
11
  });
12
12
  </script>
13
13
 
14
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
- }} />
15
+ <NodeDecorator
16
+ data={{
17
+ label: 'Idea',
18
+ config: {},
19
+ metadata: {
20
+ id: 'idea',
21
+ name: 'Idea',
22
+ description: 'Planning node',
23
+ category: 'helpers',
24
+ version: '1.0.0',
25
+ type: 'idea',
26
+ inputs: [],
27
+ outputs: []
28
+ }
29
+ }}
30
+ />
29
31
  </Story>
30
32
 
31
33
  <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
- }} />
34
+ <NodeDecorator
35
+ data={{
36
+ label: 'Feature Idea',
37
+ config: {
38
+ content: 'Add batch processing support to handle multiple items in parallel.'
39
+ },
40
+ metadata: {
41
+ id: 'idea',
42
+ name: 'Idea',
43
+ description: 'Planning node',
44
+ category: 'helpers',
45
+ version: '1.0.0',
46
+ type: 'idea',
47
+ inputs: [],
48
+ outputs: []
49
+ }
50
+ }}
51
+ />
48
52
  </Story>
@@ -1,69 +1,76 @@
1
1
  <script module>
2
- import { defineMeta } from "@storybook/addon-svelte-csf";
3
- import NodeDecorator from "../../stories/NodeDecorator.svelte";
2
+ import { defineMeta } from '@storybook/addon-svelte-csf';
3
+ import NodeDecorator from '../../stories/NodeDecorator.svelte';
4
4
 
5
5
  const { Story } = defineMeta({
6
- title: "Nodes/NotesNode",
7
- tags: ["autodocs"],
6
+ title: 'Nodes/NotesNode',
7
+ tags: ['autodocs'],
8
8
  parameters: {
9
- layout: "centered",
10
- },
9
+ layout: 'centered'
10
+ }
11
11
  });
12
12
  </script>
13
13
 
14
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
- }} />
15
+ <NodeDecorator
16
+ data={{
17
+ label: 'Notes',
18
+ config: {},
19
+ metadata: {
20
+ id: 'notes',
21
+ name: 'Notes',
22
+ description: 'Documentation node',
23
+ category: 'helpers',
24
+ version: '1.0.0',
25
+ type: 'note',
26
+ inputs: [],
27
+ outputs: []
28
+ }
29
+ }}
30
+ />
29
31
  </Story>
30
32
 
31
33
  <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
- }} />
34
+ <NodeDecorator
35
+ data={{
36
+ label: 'Notes',
37
+ config: {
38
+ content:
39
+ '## Important\n\nThis workflow handles **user onboarding**.\n\n- Step 1: Validate email\n- Step 2: Create account\n- Step 3: Send welcome email',
40
+ noteType: 'info'
41
+ },
42
+ metadata: {
43
+ id: 'notes',
44
+ name: 'Notes',
45
+ description: 'Documentation node',
46
+ category: 'helpers',
47
+ version: '1.0.0',
48
+ type: 'note',
49
+ inputs: [],
50
+ outputs: []
51
+ }
52
+ }}
53
+ />
49
54
  </Story>
50
55
 
51
56
  <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
- }} />
57
+ <NodeDecorator
58
+ data={{
59
+ label: 'Warning',
60
+ config: {
61
+ content: 'Rate limiting is applied to this API call. Max 100 requests/minute.',
62
+ noteType: 'warning'
63
+ },
64
+ metadata: {
65
+ id: 'notes',
66
+ name: 'Notes',
67
+ description: 'Documentation node',
68
+ category: 'helpers',
69
+ version: '1.0.0',
70
+ type: 'note',
71
+ inputs: [],
72
+ outputs: []
73
+ }
74
+ }}
75
+ />
69
76
  </Story>