@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.
Files changed (204) hide show
  1. package/README.md +6 -0
  2. package/dist/adapters/WorkflowAdapter.d.ts +1 -1
  3. package/dist/adapters/agentspec/AgentSpecAdapter.js +3 -1
  4. package/dist/api/client.d.ts +4 -0
  5. package/dist/api/client.js +6 -1
  6. package/dist/api/enhanced-client.js +7 -6
  7. package/dist/components/App.svelte +143 -219
  8. package/dist/components/CanvasBanner.stories.svelte +25 -0
  9. package/dist/components/CanvasBanner.stories.svelte.d.ts +27 -0
  10. package/dist/components/CanvasBanner.svelte +2 -2
  11. package/dist/components/ConfigForm.svelte +37 -36
  12. package/dist/components/ConfigPanel.stories.svelte +38 -0
  13. package/dist/components/ConfigPanel.stories.svelte.d.ts +27 -0
  14. package/dist/components/ConfigPanel.svelte +2 -2
  15. package/dist/components/ConnectionLine.svelte +2 -2
  16. package/dist/components/FlowDropZone.svelte +18 -2
  17. package/dist/components/FlowDropZone.svelte.d.ts +2 -0
  18. package/dist/components/LoadingSpinner.stories.svelte +30 -0
  19. package/dist/components/LoadingSpinner.stories.svelte.d.ts +27 -0
  20. package/dist/components/Logo.stories.svelte +22 -0
  21. package/dist/components/Logo.stories.svelte.d.ts +27 -0
  22. package/dist/components/Logo.svelte +33 -13
  23. package/dist/components/Logo.svelte.d.ts +1 -1
  24. package/dist/components/MarkdownDisplay.stories.svelte +21 -0
  25. package/dist/components/MarkdownDisplay.stories.svelte.d.ts +27 -0
  26. package/dist/components/MarkdownDisplay.svelte +4 -3
  27. package/dist/components/Navbar.stories.svelte +41 -0
  28. package/dist/components/Navbar.stories.svelte.d.ts +27 -0
  29. package/dist/components/Navbar.svelte +4 -4
  30. package/dist/components/NodeSidebar.svelte +12 -12
  31. package/dist/components/NodeStatusOverlay.stories.svelte +74 -0
  32. package/dist/components/NodeStatusOverlay.stories.svelte.d.ts +27 -0
  33. package/dist/components/PipelineStatus.svelte +11 -4
  34. package/dist/components/PortCoordinateTracker.svelte +1 -1
  35. package/dist/components/SchemaForm.stories.svelte +101 -0
  36. package/dist/components/SchemaForm.stories.svelte.d.ts +27 -0
  37. package/dist/components/SchemaForm.svelte +17 -12
  38. package/dist/components/SettingsModal.svelte +3 -3
  39. package/dist/components/SettingsPanel.svelte +23 -22
  40. package/dist/components/StatusIcon.stories.svelte +60 -0
  41. package/dist/components/StatusIcon.stories.svelte.d.ts +27 -0
  42. package/dist/components/StatusIcon.svelte +7 -0
  43. package/dist/components/StatusLabel.stories.svelte +17 -0
  44. package/dist/components/StatusLabel.stories.svelte.d.ts +27 -0
  45. package/dist/components/ThemeToggle.stories.svelte +25 -0
  46. package/dist/components/ThemeToggle.stories.svelte.d.ts +27 -0
  47. package/dist/components/ThemeToggle.svelte +8 -8
  48. package/dist/components/UniversalNode.svelte +1 -1
  49. package/dist/components/WorkflowEditor.svelte +298 -298
  50. package/dist/components/form/FormAutocomplete.svelte +20 -19
  51. package/dist/components/form/FormCheckboxGroup.stories.svelte +28 -0
  52. package/dist/components/form/FormCheckboxGroup.stories.svelte.d.ts +27 -0
  53. package/dist/components/form/FormField.svelte +3 -3
  54. package/dist/components/form/FormFieldLight.svelte +2 -2
  55. package/dist/components/form/FormFieldWrapper.stories.svelte +31 -0
  56. package/dist/components/form/FormFieldWrapper.stories.svelte.d.ts +27 -0
  57. package/dist/components/form/FormFieldset.svelte +7 -7
  58. package/dist/components/form/FormNumberField.stories.svelte +33 -0
  59. package/dist/components/form/FormNumberField.stories.svelte.d.ts +27 -0
  60. package/dist/components/form/FormRangeField.stories.svelte +31 -0
  61. package/dist/components/form/FormRangeField.stories.svelte.d.ts +27 -0
  62. package/dist/components/form/FormSelect.stories.svelte +50 -0
  63. package/dist/components/form/FormSelect.stories.svelte.d.ts +27 -0
  64. package/dist/components/form/FormTemplateEditor.svelte +2 -1
  65. package/dist/components/form/FormTextField.stories.svelte +30 -0
  66. package/dist/components/form/FormTextField.stories.svelte.d.ts +27 -0
  67. package/dist/components/form/FormTextarea.stories.svelte +31 -0
  68. package/dist/components/form/FormTextarea.stories.svelte.d.ts +27 -0
  69. package/dist/components/form/FormToggle.stories.svelte +30 -0
  70. package/dist/components/form/FormToggle.stories.svelte.d.ts +27 -0
  71. package/dist/components/form/FormUISchemaRenderer.svelte +1 -1
  72. package/dist/components/form/types.d.ts +15 -47
  73. package/dist/components/interrupt/ChoicePrompt.stories.svelte +43 -0
  74. package/dist/components/interrupt/ChoicePrompt.stories.svelte.d.ts +27 -0
  75. package/dist/components/interrupt/ChoicePrompt.svelte +24 -24
  76. package/dist/components/interrupt/ConfirmationPrompt.stories.svelte +49 -0
  77. package/dist/components/interrupt/ConfirmationPrompt.stories.svelte.d.ts +27 -0
  78. package/dist/components/interrupt/ConfirmationPrompt.svelte +19 -19
  79. package/dist/components/interrupt/FormPrompt.svelte +15 -15
  80. package/dist/components/interrupt/InterruptBubble.svelte +202 -236
  81. package/dist/components/interrupt/InterruptBubble.svelte.d.ts +1 -1
  82. package/dist/components/interrupt/ReviewPrompt.stories.svelte +46 -0
  83. package/dist/components/interrupt/ReviewPrompt.stories.svelte.d.ts +27 -0
  84. package/dist/components/interrupt/ReviewPrompt.svelte +842 -0
  85. package/dist/components/interrupt/ReviewPrompt.svelte.d.ts +23 -0
  86. package/dist/components/interrupt/TextInputPrompt.stories.svelte +34 -0
  87. package/dist/components/interrupt/TextInputPrompt.stories.svelte.d.ts +27 -0
  88. package/dist/components/interrupt/TextInputPrompt.svelte +21 -21
  89. package/dist/components/nodes/GatewayNode.stories.svelte +76 -0
  90. package/dist/components/nodes/GatewayNode.stories.svelte.d.ts +26 -0
  91. package/dist/components/nodes/GatewayNode.svelte +19 -17
  92. package/dist/components/nodes/IdeaNode.stories.svelte +48 -0
  93. package/dist/components/nodes/IdeaNode.stories.svelte.d.ts +26 -0
  94. package/dist/components/nodes/IdeaNode.svelte +10 -26
  95. package/dist/components/nodes/NotesNode.stories.svelte +69 -0
  96. package/dist/components/nodes/NotesNode.stories.svelte.d.ts +26 -0
  97. package/dist/components/nodes/NotesNode.svelte +8 -8
  98. package/dist/components/nodes/SimpleNode.stories.svelte +101 -0
  99. package/dist/components/nodes/SimpleNode.stories.svelte.d.ts +26 -0
  100. package/dist/components/nodes/SimpleNode.svelte +16 -24
  101. package/dist/components/nodes/SquareNode.stories.svelte +56 -0
  102. package/dist/components/nodes/SquareNode.stories.svelte.d.ts +26 -0
  103. package/dist/components/nodes/SquareNode.svelte +13 -21
  104. package/dist/components/nodes/TerminalNode.stories.svelte +25 -0
  105. package/dist/components/nodes/TerminalNode.stories.svelte.d.ts +26 -0
  106. package/dist/components/nodes/TerminalNode.svelte +7 -7
  107. package/dist/components/nodes/ToolNode.stories.svelte +71 -0
  108. package/dist/components/nodes/ToolNode.stories.svelte.d.ts +26 -0
  109. package/dist/components/nodes/ToolNode.svelte +7 -15
  110. package/dist/components/nodes/WorkflowNode.stories.svelte +50 -0
  111. package/dist/components/nodes/WorkflowNode.stories.svelte.d.ts +26 -0
  112. package/dist/components/nodes/WorkflowNode.svelte +13 -13
  113. package/dist/components/playground/ChatPanel.svelte +48 -48
  114. package/dist/components/playground/ExecutionLogs.svelte +23 -23
  115. package/dist/components/playground/InputCollector.svelte +24 -24
  116. package/dist/components/playground/MessageBubble.stories.svelte +49 -0
  117. package/dist/components/playground/MessageBubble.stories.svelte.d.ts +27 -0
  118. package/dist/components/playground/MessageBubble.svelte +49 -46
  119. package/dist/components/playground/Playground.svelte +194 -129
  120. package/dist/components/playground/PlaygroundModal.svelte +5 -5
  121. package/dist/components/playground/SessionManager.svelte +26 -26
  122. package/dist/config/constants.d.ts +22 -0
  123. package/dist/config/constants.js +22 -0
  124. package/dist/config/endpoints.d.ts +19 -0
  125. package/dist/config/runtimeConfig.js +2 -1
  126. package/dist/core/index.d.ts +5 -2
  127. package/dist/core/index.js +9 -1
  128. package/dist/editor/index.d.ts +13 -9
  129. package/dist/editor/index.js +15 -11
  130. package/dist/form/code.d.ts +2 -1
  131. package/dist/form/code.js +1 -3
  132. package/dist/form/markdown.d.ts +2 -1
  133. package/dist/form/markdown.js +1 -3
  134. package/dist/helpers/workflowEditorHelper.js +18 -33
  135. package/dist/mocks/app-forms.js +1 -0
  136. package/dist/mocks/app-navigation.js +3 -1
  137. package/dist/mocks/app-stores.d.ts +4 -4
  138. package/dist/playground/index.d.ts +4 -3
  139. package/dist/playground/index.js +12 -10
  140. package/dist/playground/mount.js +6 -13
  141. package/dist/services/agentSpecExecutionService.js +2 -1
  142. package/dist/services/api.js +10 -18
  143. package/dist/services/apiVariableService.js +2 -1
  144. package/dist/services/autoSaveService.d.ts +3 -3
  145. package/dist/services/autoSaveService.js +21 -17
  146. package/dist/services/categoriesApi.js +13 -5
  147. package/dist/services/draftStorage.js +5 -4
  148. package/dist/services/dynamicSchemaService.js +4 -4
  149. package/dist/services/globalSave.d.ts +60 -11
  150. package/dist/services/globalSave.js +160 -83
  151. package/dist/services/historyService.d.ts +2 -1
  152. package/dist/services/historyService.js +7 -3
  153. package/dist/services/interruptService.js +9 -8
  154. package/dist/services/nodeExecutionService.js +14 -6
  155. package/dist/services/playgroundService.js +2 -1
  156. package/dist/services/portConfigApi.js +11 -7
  157. package/dist/services/toastService.d.ts +1 -1
  158. package/dist/services/toastService.js +6 -5
  159. package/dist/services/variableService.js +3 -2
  160. package/dist/settings/index.d.ts +1 -1
  161. package/dist/settings/index.js +1 -1
  162. package/dist/stores/{categoriesStore.d.ts → categoriesStore.svelte.d.ts} +3 -3
  163. package/dist/stores/{categoriesStore.js → categoriesStore.svelte.js} +15 -18
  164. package/dist/stores/editorStateMachine.svelte.d.ts +42 -0
  165. package/dist/stores/editorStateMachine.svelte.js +132 -0
  166. package/dist/stores/{historyStore.d.ts → historyStore.svelte.d.ts} +18 -15
  167. package/dist/stores/{historyStore.js → historyStore.svelte.js} +40 -21
  168. package/dist/stores/{interruptStore.d.ts → interruptStore.svelte.d.ts} +16 -15
  169. package/dist/stores/{interruptStore.js → interruptStore.svelte.js} +85 -94
  170. package/dist/stores/{playgroundStore.d.ts → playgroundStore.svelte.d.ts} +41 -33
  171. package/dist/stores/{playgroundStore.js → playgroundStore.svelte.js} +164 -84
  172. package/dist/stores/{portCoordinateStore.d.ts → portCoordinateStore.svelte.d.ts} +10 -4
  173. package/dist/stores/{portCoordinateStore.js → portCoordinateStore.svelte.js} +38 -35
  174. package/dist/stores/{settingsStore.d.ts → settingsStore.svelte.d.ts} +45 -28
  175. package/dist/stores/{settingsStore.js → settingsStore.svelte.js} +169 -128
  176. package/dist/stores/{workflowStore.d.ts → workflowStore.svelte.d.ts} +101 -65
  177. package/dist/stores/{workflowStore.js → workflowStore.svelte.js} +285 -239
  178. package/dist/stories/CanvasDecorator.svelte +50 -0
  179. package/dist/stories/CanvasDecorator.svelte.d.ts +8 -0
  180. package/dist/stories/NodeDecorator.svelte +74 -0
  181. package/dist/stories/NodeDecorator.svelte.d.ts +8 -0
  182. package/dist/stories/utils.d.ts +93 -0
  183. package/dist/stories/utils.js +122 -0
  184. package/dist/styles/base.css +114 -61
  185. package/dist/styles/toast.css +2 -2
  186. package/dist/styles/tokens.css +250 -185
  187. package/dist/svelte-app.d.ts +0 -6
  188. package/dist/svelte-app.js +13 -31
  189. package/dist/types/index.d.ts +2 -0
  190. package/dist/types/interrupt.d.ts +89 -5
  191. package/dist/types/interrupt.js +13 -1
  192. package/dist/types/playground.d.ts +5 -0
  193. package/dist/types/settings.js +1 -1
  194. package/dist/utils/colors.js +4 -4
  195. package/dist/utils/connections.js +33 -8
  196. package/dist/utils/icons.js +1 -1
  197. package/dist/utils/logger.d.ts +47 -0
  198. package/dist/utils/logger.js +72 -0
  199. package/dist/utils/nodeWrapper.js +1 -1
  200. package/dist/utils/sanitize.d.ts +19 -0
  201. package/dist/utils/sanitize.js +31 -0
  202. package/dist/utils/validation.d.ts +29 -0
  203. package/dist/utils/validation.js +39 -0
  204. package/package.json +243 -232
@@ -0,0 +1,31 @@
1
+ <script module>
2
+ import { defineMeta } from "@storybook/addon-svelte-csf";
3
+ import FormTextarea from "./FormTextarea.svelte";
4
+ import { fn } from "storybook/test";
5
+
6
+ const { Story } = defineMeta({
7
+ title: "Form/FormTextarea",
8
+ component: FormTextarea,
9
+ tags: ["autodocs"],
10
+ argTypes: {
11
+ value: { control: "text" },
12
+ placeholder: { control: "text" },
13
+ rows: { control: { type: "number", min: 1, max: 20 } },
14
+ required: { control: "boolean" },
15
+ disabled: { control: "boolean" },
16
+ },
17
+ args: {
18
+ id: "demo-textarea",
19
+ value: "",
20
+ onChange: fn(),
21
+ },
22
+ });
23
+ </script>
24
+
25
+ <Story name="Default" args={{ placeholder: "Enter your message..." }} />
26
+
27
+ <Story name="Custom Rows" args={{ rows: 8, placeholder: "Larger text area..." }} />
28
+
29
+ <Story name="With Value" args={{ value: "This is a multiline\ntext content\nwith several lines." }} />
30
+
31
+ <Story name="Disabled" args={{ value: "Read-only content", disabled: true }} />
@@ -0,0 +1,27 @@
1
+ export default FormTextarea;
2
+ type FormTextarea = SvelteComponent<{
3
+ [x: string]: never;
4
+ }, {
5
+ [evt: string]: CustomEvent<any>;
6
+ }, {}> & {
7
+ $$bindings?: string | undefined;
8
+ };
9
+ declare const FormTextarea: $$__sveltets_2_IsomorphicComponent<{
10
+ [x: string]: never;
11
+ }, {
12
+ [evt: string]: CustomEvent<any>;
13
+ }, {}, {}, string>;
14
+ import FormTextarea from "./FormTextarea.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
+ }
@@ -0,0 +1,30 @@
1
+ <script module>
2
+ import { defineMeta } from "@storybook/addon-svelte-csf";
3
+ import FormToggle from "./FormToggle.svelte";
4
+ import { fn } from "storybook/test";
5
+
6
+ const { Story } = defineMeta({
7
+ title: "Form/FormToggle",
8
+ component: FormToggle,
9
+ tags: ["autodocs"],
10
+ argTypes: {
11
+ value: { control: "boolean" },
12
+ onLabel: { control: "text" },
13
+ offLabel: { control: "text" },
14
+ disabled: { control: "boolean" },
15
+ },
16
+ args: {
17
+ id: "demo-toggle",
18
+ value: false,
19
+ onChange: fn(),
20
+ },
21
+ });
22
+ </script>
23
+
24
+ <Story name="Off" args={{ value: false }} />
25
+
26
+ <Story name="On" args={{ value: true }} />
27
+
28
+ <Story name="Custom Labels" args={{ value: true, onLabel: "Yes", offLabel: "No" }} />
29
+
30
+ <Story name="Disabled" args={{ value: true, disabled: true }} />
@@ -0,0 +1,27 @@
1
+ export default FormToggle;
2
+ type FormToggle = SvelteComponent<{
3
+ [x: string]: never;
4
+ }, {
5
+ [evt: string]: CustomEvent<any>;
6
+ }, {}> & {
7
+ $$bindings?: string | undefined;
8
+ };
9
+ declare const FormToggle: $$__sveltets_2_IsomorphicComponent<{
10
+ [x: string]: never;
11
+ }, {
12
+ [evt: string]: CustomEvent<any>;
13
+ }, {}, {}, string>;
14
+ import FormToggle from "./FormToggle.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
+ }
@@ -131,6 +131,6 @@
131
131
  .form-uischema-layout--vertical {
132
132
  display: flex;
133
133
  flex-direction: column;
134
- gap: var(--fd-space-5);
134
+ gap: var(--fd-space-2xl);
135
135
  }
136
136
  </style>
@@ -76,11 +76,11 @@ export interface OneOfItem {
76
76
  /**
77
77
  * Base properties shared by all form fields
78
78
  */
79
- export interface BaseFieldProps {
79
+ export interface BaseFieldProps<T = unknown> {
80
80
  /** Unique identifier for the field (used for id and name attributes) */
81
81
  id: string;
82
82
  /** Current value of the field */
83
- value: unknown;
83
+ value: T;
84
84
  /** Whether the field is required */
85
85
  required?: boolean;
86
86
  /** Whether the field is disabled */
@@ -90,84 +90,69 @@ export interface BaseFieldProps {
90
90
  /** ARIA description ID for accessibility */
91
91
  ariaDescribedBy?: string;
92
92
  /** Callback when the field value changes */
93
- onChange: (value: unknown) => void;
93
+ onChange: (value: T) => void;
94
94
  }
95
95
  /**
96
96
  * Properties for text input fields
97
97
  */
98
- export interface TextFieldProps extends BaseFieldProps {
99
- value: string;
100
- onChange: (value: string) => void;
98
+ export interface TextFieldProps extends BaseFieldProps<string> {
101
99
  }
102
100
  /**
103
101
  * Properties for multiline text fields (textarea)
104
102
  */
105
- export interface TextareaFieldProps extends BaseFieldProps {
106
- value: string;
103
+ export interface TextareaFieldProps extends BaseFieldProps<string> {
107
104
  /** Number of visible rows */
108
105
  rows?: number;
109
- onChange: (value: string) => void;
110
106
  }
111
107
  /**
112
108
  * Properties for number input fields
113
109
  */
114
- export interface NumberFieldProps extends BaseFieldProps {
115
- value: number | string;
110
+ export interface NumberFieldProps extends BaseFieldProps<number | string> {
116
111
  /** Minimum allowed value */
117
112
  min?: number;
118
113
  /** Maximum allowed value */
119
114
  max?: number;
120
115
  /** Step increment for the input */
121
116
  step?: number;
122
- onChange: (value: number | string) => void;
123
117
  }
124
118
  /**
125
119
  * Properties for boolean toggle fields
126
120
  */
127
- export interface ToggleFieldProps extends BaseFieldProps {
128
- value: boolean;
121
+ export interface ToggleFieldProps extends BaseFieldProps<boolean> {
129
122
  /** Label shown when toggle is on */
130
123
  onLabel?: string;
131
124
  /** Label shown when toggle is off */
132
125
  offLabel?: string;
133
- onChange: (value: boolean) => void;
134
126
  }
135
127
  /**
136
128
  * Properties for range slider fields
137
129
  */
138
- export interface RangeFieldProps extends BaseFieldProps {
139
- value: number | string;
130
+ export interface RangeFieldProps extends BaseFieldProps<number | string> {
140
131
  /** Minimum allowed value */
141
132
  min?: number;
142
133
  /** Maximum allowed value */
143
134
  max?: number;
144
135
  /** Step increment for the slider */
145
136
  step?: number;
146
- onChange: (value: number) => void;
147
137
  }
148
138
  /**
149
139
  * Properties for select dropdown fields
150
140
  */
151
- export interface SelectFieldProps extends BaseFieldProps {
152
- value: string;
141
+ export interface SelectFieldProps extends BaseFieldProps<string> {
153
142
  /** Available options for selection */
154
143
  options: FieldOption[] | string[];
155
- onChange: (value: string) => void;
156
144
  }
157
145
  /**
158
146
  * Properties for checkbox group fields (multiple selection)
159
147
  */
160
- export interface CheckboxGroupFieldProps extends BaseFieldProps {
161
- value: string[];
148
+ export interface CheckboxGroupFieldProps extends BaseFieldProps<string[]> {
162
149
  /** Available options for selection */
163
150
  options: string[];
164
- onChange: (value: string[]) => void;
165
151
  }
166
152
  /**
167
153
  * Properties for array fields (dynamic lists)
168
154
  */
169
- export interface ArrayFieldProps extends BaseFieldProps {
170
- value: unknown[];
155
+ export interface ArrayFieldProps extends BaseFieldProps<unknown[]> {
171
156
  /** Schema for array items */
172
157
  itemSchema: FieldSchema;
173
158
  /** Minimum number of items required */
@@ -176,29 +161,22 @@ export interface ArrayFieldProps extends BaseFieldProps {
176
161
  maxItems?: number;
177
162
  /** Label for the add button */
178
163
  addLabel?: string;
179
- onChange: (value: unknown[]) => void;
180
164
  }
181
165
  /**
182
166
  * Properties for code editor fields (CodeMirror-based)
183
167
  */
184
- export interface CodeEditorFieldProps extends BaseFieldProps {
185
- /** Current value - can be string (raw JSON) or object */
186
- value: unknown;
168
+ export interface CodeEditorFieldProps extends BaseFieldProps<unknown> {
187
169
  /** Whether to use dark theme */
188
170
  darkTheme?: boolean;
189
171
  /** Editor height in pixels or CSS value */
190
172
  height?: string;
191
173
  /** Whether to auto-format JSON on blur */
192
174
  autoFormat?: boolean;
193
- /** Callback when value changes */
194
- onChange: (value: unknown) => void;
195
175
  }
196
176
  /**
197
177
  * Properties for markdown editor fields (CodeMirror 6-based)
198
178
  */
199
- export interface MarkdownEditorFieldProps extends BaseFieldProps {
200
- /** Current value (markdown string) */
201
- value: string;
179
+ export interface MarkdownEditorFieldProps extends BaseFieldProps<string> {
202
180
  /** Editor height in pixels or CSS value */
203
181
  height?: string;
204
182
  /** Whether to show the toolbar */
@@ -207,15 +185,11 @@ export interface MarkdownEditorFieldProps extends BaseFieldProps {
207
185
  showStatusBar?: boolean;
208
186
  /** Whether to enable spell checking */
209
187
  spellChecker?: boolean;
210
- /** Callback when value changes */
211
- onChange: (value: string) => void;
212
188
  }
213
189
  /**
214
190
  * Properties for template editor fields (CodeMirror with Twig/Liquid syntax)
215
191
  */
216
- export interface TemplateEditorFieldProps extends BaseFieldProps {
217
- /** Current template value */
218
- value: string;
192
+ export interface TemplateEditorFieldProps extends BaseFieldProps<string> {
219
193
  /** Whether to use dark theme */
220
194
  darkTheme?: boolean;
221
195
  /** Editor height in pixels or CSS value */
@@ -233,22 +207,16 @@ export interface TemplateEditorFieldProps extends BaseFieldProps {
233
207
  variableSchema?: VariableSchema;
234
208
  /** Placeholder variable example for the hint */
235
209
  placeholderExample?: string;
236
- /** Callback when value changes */
237
- onChange: (value: string) => void;
238
210
  }
239
211
  /**
240
212
  * Properties for autocomplete fields
241
213
  * Fetches suggestions from a callback URL with support for debouncing and keyboard navigation
242
214
  */
243
- export interface AutocompleteFieldProps extends BaseFieldProps {
244
- /** Current value (single string or array of strings for multiple selection) */
245
- value: string | string[];
215
+ export interface AutocompleteFieldProps extends BaseFieldProps<string | string[]> {
246
216
  /** Autocomplete configuration from schema */
247
217
  autocomplete: AutocompleteConfig;
248
218
  /** Base URL for resolving relative callback URLs */
249
219
  baseUrl?: string;
250
- /** Callback when value changes */
251
- onChange: (value: string | string[]) => void;
252
220
  }
253
221
  /**
254
222
  * Autocomplete configuration imported from main types
@@ -0,0 +1,43 @@
1
+ <script module>
2
+ import { defineMeta } from "@storybook/addon-svelte-csf";
3
+ import ChoicePrompt from "./ChoicePrompt.svelte";
4
+ import { fn } from "storybook/test";
5
+ import { createChoiceConfig } from "../../stories/utils.js";
6
+
7
+ const { Story } = defineMeta({
8
+ title: "Interrupt/ChoicePrompt",
9
+ component: ChoicePrompt,
10
+ tags: ["autodocs"],
11
+ args: {
12
+ config: createChoiceConfig(),
13
+ isResolved: false,
14
+ isSubmitting: false,
15
+ onSubmit: fn(),
16
+ },
17
+ });
18
+ </script>
19
+
20
+ <Story name="Single Select" />
21
+
22
+ <Story name="Multi Select" args={{
23
+ config: createChoiceConfig({
24
+ message: "Select the features to enable:",
25
+ multiple: true,
26
+ options: [
27
+ { value: "auth", label: "Authentication", description: "User login and signup" },
28
+ { value: "analytics", label: "Analytics", description: "Usage tracking and metrics" },
29
+ { value: "notifications", label: "Notifications", description: "Email and push alerts" },
30
+ { value: "export", label: "Data Export", description: "CSV and JSON export" },
31
+ ],
32
+ }),
33
+ }} />
34
+
35
+ <Story name="Resolved" args={{
36
+ isResolved: true,
37
+ resolvedValue: "high",
38
+ resolvedByUserName: "Bob",
39
+ }} />
40
+
41
+ <Story name="Submitting" args={{
42
+ isSubmitting: true,
43
+ }} />
@@ -0,0 +1,27 @@
1
+ export default ChoicePrompt;
2
+ type ChoicePrompt = SvelteComponent<{
3
+ [x: string]: never;
4
+ }, {
5
+ [evt: string]: CustomEvent<any>;
6
+ }, {}> & {
7
+ $$bindings?: string | undefined;
8
+ };
9
+ declare const ChoicePrompt: $$__sveltets_2_IsomorphicComponent<{
10
+ [x: string]: never;
11
+ }, {
12
+ [evt: string]: CustomEvent<any>;
13
+ }, {}, {}, string>;
14
+ import ChoicePrompt from "./ChoicePrompt.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
+ }
@@ -211,7 +211,7 @@
211
211
  .choice-prompt {
212
212
  display: flex;
213
213
  flex-direction: column;
214
- gap: 0.75rem;
214
+ gap: var(--fd-space-md);
215
215
  }
216
216
 
217
217
  .choice-prompt--resolved {
@@ -224,33 +224,33 @@
224
224
 
225
225
  .choice-prompt__message {
226
226
  margin: 0;
227
- font-size: 0.9375rem;
228
- line-height: 1.5;
227
+ font-size: var(--fd-interrupt-font-message);
228
+ line-height: var(--fd-interrupt-line-height);
229
229
  color: var(--fd-foreground);
230
230
  }
231
231
 
232
232
  .choice-prompt__error {
233
233
  display: flex;
234
234
  align-items: center;
235
- gap: 0.375rem;
236
- padding: 0.5rem 0.75rem;
235
+ gap: var(--fd-space-2xs);
236
+ padding: var(--fd-space-xs) var(--fd-space-md);
237
237
  background-color: var(--fd-error-muted);
238
238
  border-radius: var(--fd-radius-md);
239
239
  color: var(--fd-error);
240
- font-size: 0.8125rem;
240
+ font-size: var(--fd-interrupt-font-error);
241
241
  }
242
242
 
243
243
  .choice-prompt__options {
244
244
  display: flex;
245
245
  flex-direction: column;
246
- gap: 0.5rem;
246
+ gap: var(--fd-space-xs);
247
247
  }
248
248
 
249
249
  .choice-prompt__option {
250
250
  display: flex;
251
251
  align-items: flex-start;
252
- gap: 0.75rem;
253
- padding: 0.75rem 1rem;
252
+ gap: var(--fd-space-md);
253
+ padding: var(--fd-space-md) var(--fd-space-xl);
254
254
  background-color: var(--fd-muted);
255
255
  border: 1px solid var(--fd-border);
256
256
  border-radius: var(--fd-radius-lg);
@@ -321,37 +321,37 @@
321
321
  }
322
322
 
323
323
  .choice-prompt__option-description {
324
- font-size: 0.8125rem;
324
+ font-size: var(--fd-interrupt-font-error);
325
325
  color: var(--fd-muted-foreground);
326
- line-height: 1.4;
326
+ line-height: var(--fd-leading-tight);
327
327
  }
328
328
 
329
329
  .choice-prompt__info {
330
330
  font-size: var(--fd-text-xs);
331
331
  color: var(--fd-muted-foreground);
332
- padding-left: 0.25rem;
332
+ padding-left: var(--fd-space-3xs);
333
333
  }
334
334
 
335
335
  .choice-prompt__actions {
336
336
  display: flex;
337
- gap: 0.75rem;
338
- margin-top: 0.25rem;
337
+ gap: var(--fd-space-md);
338
+ margin-top: var(--fd-space-3xs);
339
339
  }
340
340
 
341
341
  .choice-prompt__submit {
342
342
  display: inline-flex;
343
343
  align-items: center;
344
344
  justify-content: center;
345
- gap: 0.5rem;
346
- padding: 0.625rem 1.25rem;
345
+ gap: var(--fd-space-xs);
346
+ padding: var(--fd-space-sm) var(--fd-space-2xl);
347
347
  border-radius: var(--fd-radius-lg);
348
348
  font-size: var(--fd-text-sm);
349
349
  font-weight: 600;
350
350
  font-family: inherit;
351
351
  cursor: pointer;
352
- transition: all 0.2s cubic-bezier(0.4, 0, 0.2, 1);
352
+ transition: all var(--fd-transition-normal);
353
353
  border: none;
354
- min-height: 2.5rem;
354
+ min-height: var(--fd-interrupt-btn-min-height);
355
355
  background: var(--fd-interrupt-btn-primary-bg);
356
356
  color: var(--fd-primary-foreground);
357
357
  box-shadow: 0 1px 3px var(--fd-interrupt-btn-primary-shadow);
@@ -371,8 +371,8 @@
371
371
  }
372
372
 
373
373
  .choice-prompt__spinner {
374
- width: 1rem;
375
- height: 1rem;
374
+ width: var(--fd-interrupt-spinner-size);
375
+ height: var(--fd-interrupt-spinner-size);
376
376
  border: 2px solid var(--fd-border);
377
377
  border-top-color: currentColor;
378
378
  border-radius: 50%;
@@ -389,12 +389,12 @@
389
389
  .choice-prompt__resolved-badge {
390
390
  display: inline-flex;
391
391
  align-items: center;
392
- gap: 0.375rem;
393
- padding: 0.375rem 0.75rem;
392
+ gap: var(--fd-space-2xs);
393
+ padding: var(--fd-space-2xs) var(--fd-space-md);
394
394
  background-color: var(--fd-interrupt-badge-completed-bg);
395
- border-radius: 9999px;
395
+ border-radius: var(--fd-radius-full);
396
396
  color: var(--fd-interrupt-badge-completed-text);
397
- font-size: 0.75rem;
397
+ font-size: var(--fd-text-xs);
398
398
  font-weight: 500;
399
399
  align-self: flex-start;
400
400
  }
@@ -0,0 +1,49 @@
1
+ <script module>
2
+ import { defineMeta } from "@storybook/addon-svelte-csf";
3
+ import ConfirmationPrompt from "./ConfirmationPrompt.svelte";
4
+ import { fn } from "storybook/test";
5
+ import { createConfirmationConfig } from "../../stories/utils.js";
6
+
7
+ const { Story } = defineMeta({
8
+ title: "Interrupt/ConfirmationPrompt",
9
+ component: ConfirmationPrompt,
10
+ tags: ["autodocs"],
11
+ args: {
12
+ config: createConfirmationConfig(),
13
+ isResolved: false,
14
+ isSubmitting: false,
15
+ onConfirm: fn(),
16
+ onDecline: fn(),
17
+ },
18
+ });
19
+ </script>
20
+
21
+ <Story name="Pending" />
22
+
23
+ <Story name="Custom Labels" args={{
24
+ config: createConfirmationConfig({ message: "Deploy to production?", confirmLabel: "Deploy", cancelLabel: "Abort" }),
25
+ }} />
26
+
27
+ <Story name="Confirmed" args={{
28
+ isResolved: true,
29
+ resolvedValue: true,
30
+ }} />
31
+
32
+ <Story name="Declined" args={{
33
+ isResolved: true,
34
+ resolvedValue: false,
35
+ }} />
36
+
37
+ <Story name="Submitting" args={{
38
+ isSubmitting: true,
39
+ }} />
40
+
41
+ <Story name="With Error" args={{
42
+ error: "Network error: Failed to submit response",
43
+ }} />
44
+
45
+ <Story name="Resolved By User" args={{
46
+ isResolved: true,
47
+ resolvedValue: true,
48
+ resolvedByUserName: "Alice",
49
+ }} />
@@ -0,0 +1,27 @@
1
+ export default ConfirmationPrompt;
2
+ type ConfirmationPrompt = SvelteComponent<{
3
+ [x: string]: never;
4
+ }, {
5
+ [evt: string]: CustomEvent<any>;
6
+ }, {}> & {
7
+ $$bindings?: string | undefined;
8
+ };
9
+ declare const ConfirmationPrompt: $$__sveltets_2_IsomorphicComponent<{
10
+ [x: string]: never;
11
+ }, {
12
+ [evt: string]: CustomEvent<any>;
13
+ }, {}, {}, string>;
14
+ import ConfirmationPrompt from "./ConfirmationPrompt.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
+ }
@@ -129,7 +129,7 @@
129
129
  .confirmation-prompt {
130
130
  display: flex;
131
131
  flex-direction: column;
132
- gap: 0.75rem;
132
+ gap: var(--fd-space-md);
133
133
  }
134
134
 
135
135
  .confirmation-prompt--resolved {
@@ -142,25 +142,25 @@
142
142
 
143
143
  .confirmation-prompt__message {
144
144
  margin: 0;
145
- font-size: 0.9375rem;
146
- line-height: 1.5;
145
+ font-size: var(--fd-interrupt-font-message);
146
+ line-height: var(--fd-interrupt-line-height);
147
147
  color: var(--fd-foreground);
148
148
  }
149
149
 
150
150
  .confirmation-prompt__error {
151
151
  display: flex;
152
152
  align-items: center;
153
- gap: 0.375rem;
154
- padding: 0.5rem 0.75rem;
153
+ gap: var(--fd-space-2xs);
154
+ padding: var(--fd-space-xs) var(--fd-space-md);
155
155
  background-color: var(--fd-error-muted);
156
156
  border-radius: var(--fd-radius-md);
157
157
  color: var(--fd-error);
158
- font-size: 0.8125rem;
158
+ font-size: var(--fd-interrupt-font-error);
159
159
  }
160
160
 
161
161
  .confirmation-prompt__actions {
162
162
  display: flex;
163
- gap: 0.75rem;
163
+ gap: var(--fd-space-md);
164
164
  flex-wrap: wrap;
165
165
  }
166
166
 
@@ -168,16 +168,16 @@
168
168
  display: inline-flex;
169
169
  align-items: center;
170
170
  justify-content: center;
171
- gap: 0.5rem;
172
- padding: 0.625rem 1.25rem;
173
- border-radius: 0.5rem;
174
- font-size: 0.875rem;
171
+ gap: var(--fd-space-xs);
172
+ padding: var(--fd-space-sm) var(--fd-space-2xl);
173
+ border-radius: var(--fd-radius-lg);
174
+ font-size: var(--fd-text-sm);
175
175
  font-weight: 600;
176
176
  font-family: inherit;
177
177
  cursor: pointer;
178
- transition: all 0.2s cubic-bezier(0.4, 0, 0.2, 1);
178
+ transition: all var(--fd-transition-normal);
179
179
  border: 1px solid transparent;
180
- min-height: 2.5rem;
180
+ min-height: var(--fd-interrupt-btn-min-height);
181
181
  min-width: 100px;
182
182
  }
183
183
 
@@ -257,8 +257,8 @@
257
257
  }
258
258
 
259
259
  .confirmation-prompt__spinner {
260
- width: 1rem;
261
- height: 1rem;
260
+ width: var(--fd-interrupt-spinner-size);
261
+ height: var(--fd-interrupt-spinner-size);
262
262
  border: 2px solid var(--fd-border);
263
263
  border-top-color: currentColor;
264
264
  border-radius: 50%;
@@ -280,12 +280,12 @@
280
280
  .confirmation-prompt__resolved-badge {
281
281
  display: inline-flex;
282
282
  align-items: center;
283
- gap: 0.375rem;
284
- padding: 0.375rem 0.75rem;
283
+ gap: var(--fd-space-2xs);
284
+ padding: var(--fd-space-2xs) var(--fd-space-md);
285
285
  background-color: var(--fd-interrupt-badge-completed-bg);
286
- border-radius: 9999px;
286
+ border-radius: var(--fd-radius-full);
287
287
  color: var(--fd-interrupt-badge-completed-text);
288
- font-size: 0.75rem;
288
+ font-size: var(--fd-text-xs);
289
289
  font-weight: 500;
290
290
  align-self: flex-start;
291
291
  }