@flowdrop/flowdrop 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (403) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +252 -0
  3. package/dist/adapters/WorkflowAdapter.d.ts +167 -0
  4. package/dist/adapters/WorkflowAdapter.js +368 -0
  5. package/dist/adapters/agentspec/AgentSpecAdapter.d.ts +96 -0
  6. package/dist/adapters/agentspec/AgentSpecAdapter.js +626 -0
  7. package/dist/adapters/agentspec/agentAdapter.d.ts +59 -0
  8. package/dist/adapters/agentspec/agentAdapter.js +91 -0
  9. package/dist/adapters/agentspec/autoLayout.d.ts +34 -0
  10. package/dist/adapters/agentspec/autoLayout.js +127 -0
  11. package/dist/adapters/agentspec/componentTypeDefaults.d.ts +73 -0
  12. package/dist/adapters/agentspec/componentTypeDefaults.js +238 -0
  13. package/dist/adapters/agentspec/defaultNodeTypes.d.ts +53 -0
  14. package/dist/adapters/agentspec/defaultNodeTypes.js +561 -0
  15. package/dist/adapters/agentspec/index.d.ts +37 -0
  16. package/dist/adapters/agentspec/index.js +39 -0
  17. package/dist/adapters/agentspec/validator.d.ts +34 -0
  18. package/dist/adapters/agentspec/validator.js +169 -0
  19. package/dist/api/enhanced-client.d.ts +183 -0
  20. package/dist/api/enhanced-client.js +430 -0
  21. package/dist/components/App.svelte +981 -0
  22. package/dist/components/App.svelte.d.ts +54 -0
  23. package/dist/components/CanvasBanner.stories.svelte +29 -0
  24. package/dist/components/CanvasBanner.stories.svelte.d.ts +27 -0
  25. package/dist/components/CanvasBanner.svelte +57 -0
  26. package/dist/components/CanvasBanner.svelte.d.ts +8 -0
  27. package/dist/components/ConfigForm.svelte +1138 -0
  28. package/dist/components/ConfigForm.svelte.d.ts +44 -0
  29. package/dist/components/ConfigModal.svelte +188 -0
  30. package/dist/components/ConfigModal.svelte.d.ts +13 -0
  31. package/dist/components/ConfigPanel.stories.svelte +47 -0
  32. package/dist/components/ConfigPanel.stories.svelte.d.ts +27 -0
  33. package/dist/components/ConfigPanel.svelte +182 -0
  34. package/dist/components/ConfigPanel.svelte.d.ts +32 -0
  35. package/dist/components/ConnectionLine.svelte +32 -0
  36. package/dist/components/ConnectionLine.svelte.d.ts +3 -0
  37. package/dist/components/EdgeRefresher.svelte +41 -0
  38. package/dist/components/EdgeRefresher.svelte.d.ts +9 -0
  39. package/dist/components/FlowDropZone.svelte +83 -0
  40. package/dist/components/FlowDropZone.svelte.d.ts +13 -0
  41. package/dist/components/LoadingSpinner.stories.svelte +30 -0
  42. package/dist/components/LoadingSpinner.stories.svelte.d.ts +27 -0
  43. package/dist/components/LoadingSpinner.svelte +36 -0
  44. package/dist/components/LoadingSpinner.svelte.d.ts +8 -0
  45. package/dist/components/Logo.stories.svelte +22 -0
  46. package/dist/components/Logo.stories.svelte.d.ts +27 -0
  47. package/dist/components/Logo.svelte +102 -0
  48. package/dist/components/Logo.svelte.d.ts +26 -0
  49. package/dist/components/LogsSidebar.svelte +563 -0
  50. package/dist/components/LogsSidebar.svelte.d.ts +17 -0
  51. package/dist/components/MarkdownDisplay.stories.svelte +36 -0
  52. package/dist/components/MarkdownDisplay.stories.svelte.d.ts +27 -0
  53. package/dist/components/MarkdownDisplay.svelte +29 -0
  54. package/dist/components/MarkdownDisplay.svelte.d.ts +7 -0
  55. package/dist/components/Navbar.stories.svelte +53 -0
  56. package/dist/components/Navbar.stories.svelte.d.ts +27 -0
  57. package/dist/components/Navbar.svelte +726 -0
  58. package/dist/components/Navbar.svelte.d.ts +29 -0
  59. package/dist/components/NodeSidebar.svelte +762 -0
  60. package/dist/components/NodeSidebar.svelte.d.ts +9 -0
  61. package/dist/components/NodeStatusOverlay.stories.svelte +85 -0
  62. package/dist/components/NodeStatusOverlay.stories.svelte.d.ts +27 -0
  63. package/dist/components/NodeStatusOverlay.svelte +327 -0
  64. package/dist/components/NodeStatusOverlay.svelte.d.ts +11 -0
  65. package/dist/components/PipelineStatus.svelte +314 -0
  66. package/dist/components/PipelineStatus.svelte.d.ts +20 -0
  67. package/dist/components/PortCoordinateTracker.svelte +58 -0
  68. package/dist/components/PortCoordinateTracker.svelte.d.ts +12 -0
  69. package/dist/components/ReadOnlyDetails.svelte +170 -0
  70. package/dist/components/ReadOnlyDetails.svelte.d.ts +25 -0
  71. package/dist/components/SchemaForm.stories.svelte +116 -0
  72. package/dist/components/SchemaForm.stories.svelte.d.ts +27 -0
  73. package/dist/components/SchemaForm.svelte +536 -0
  74. package/dist/components/SchemaForm.svelte.d.ts +83 -0
  75. package/dist/components/SettingsModal.svelte +279 -0
  76. package/dist/components/SettingsModal.svelte.d.ts +23 -0
  77. package/dist/components/SettingsPanel.svelte +638 -0
  78. package/dist/components/SettingsPanel.svelte.d.ts +21 -0
  79. package/dist/components/StatusIcon.stories.svelte +60 -0
  80. package/dist/components/StatusIcon.stories.svelte.d.ts +27 -0
  81. package/dist/components/StatusIcon.svelte +119 -0
  82. package/dist/components/StatusIcon.svelte.d.ts +10 -0
  83. package/dist/components/StatusLabel.stories.svelte +17 -0
  84. package/dist/components/StatusLabel.stories.svelte.d.ts +27 -0
  85. package/dist/components/StatusLabel.svelte +33 -0
  86. package/dist/components/StatusLabel.svelte.d.ts +7 -0
  87. package/dist/components/ThemeToggle.stories.svelte +25 -0
  88. package/dist/components/ThemeToggle.stories.svelte.d.ts +27 -0
  89. package/dist/components/ThemeToggle.svelte +185 -0
  90. package/dist/components/ThemeToggle.svelte.d.ts +14 -0
  91. package/dist/components/UniversalNode.svelte +155 -0
  92. package/dist/components/UniversalNode.svelte.d.ts +15 -0
  93. package/dist/components/WorkflowEditor.svelte +1035 -0
  94. package/dist/components/WorkflowEditor.svelte.d.ts +23 -0
  95. package/dist/components/form/FormArray.svelte +1049 -0
  96. package/dist/components/form/FormArray.svelte.d.ts +22 -0
  97. package/dist/components/form/FormAutocomplete.svelte +1009 -0
  98. package/dist/components/form/FormAutocomplete.svelte.d.ts +25 -0
  99. package/dist/components/form/FormCheckboxGroup.stories.svelte +28 -0
  100. package/dist/components/form/FormCheckboxGroup.stories.svelte.d.ts +27 -0
  101. package/dist/components/form/FormCheckboxGroup.svelte +155 -0
  102. package/dist/components/form/FormCheckboxGroup.svelte.d.ts +17 -0
  103. package/dist/components/form/FormCodeEditor.svelte +458 -0
  104. package/dist/components/form/FormCodeEditor.svelte.d.ts +25 -0
  105. package/dist/components/form/FormField.svelte +417 -0
  106. package/dist/components/form/FormField.svelte.d.ts +29 -0
  107. package/dist/components/form/FormFieldLight.svelte +425 -0
  108. package/dist/components/form/FormFieldLight.svelte.d.ts +18 -0
  109. package/dist/components/form/FormFieldWrapper.stories.svelte +53 -0
  110. package/dist/components/form/FormFieldWrapper.stories.svelte.d.ts +27 -0
  111. package/dist/components/form/FormFieldWrapper.svelte +125 -0
  112. package/dist/components/form/FormFieldWrapper.svelte.d.ts +18 -0
  113. package/dist/components/form/FormFieldset.svelte +142 -0
  114. package/dist/components/form/FormFieldset.svelte.d.ts +11 -0
  115. package/dist/components/form/FormMarkdownEditor.svelte +752 -0
  116. package/dist/components/form/FormMarkdownEditor.svelte.d.ts +33 -0
  117. package/dist/components/form/FormNumberField.stories.svelte +36 -0
  118. package/dist/components/form/FormNumberField.stories.svelte.d.ts +27 -0
  119. package/dist/components/form/FormNumberField.svelte +112 -0
  120. package/dist/components/form/FormNumberField.svelte.d.ts +25 -0
  121. package/dist/components/form/FormRangeField.stories.svelte +31 -0
  122. package/dist/components/form/FormRangeField.stories.svelte.d.ts +27 -0
  123. package/dist/components/form/FormRangeField.svelte +246 -0
  124. package/dist/components/form/FormRangeField.svelte.d.ts +23 -0
  125. package/dist/components/form/FormSelect.stories.svelte +50 -0
  126. package/dist/components/form/FormSelect.stories.svelte.d.ts +27 -0
  127. package/dist/components/form/FormSelect.svelte +129 -0
  128. package/dist/components/form/FormSelect.svelte.d.ts +20 -0
  129. package/dist/components/form/FormTemplateEditor.svelte +825 -0
  130. package/dist/components/form/FormTemplateEditor.svelte.d.ts +41 -0
  131. package/dist/components/form/FormTextField.stories.svelte +30 -0
  132. package/dist/components/form/FormTextField.stories.svelte.d.ts +27 -0
  133. package/dist/components/form/FormTextField.svelte +91 -0
  134. package/dist/components/form/FormTextField.svelte.d.ts +19 -0
  135. package/dist/components/form/FormTextarea.stories.svelte +34 -0
  136. package/dist/components/form/FormTextarea.stories.svelte.d.ts +27 -0
  137. package/dist/components/form/FormTextarea.svelte +97 -0
  138. package/dist/components/form/FormTextarea.svelte.d.ts +21 -0
  139. package/dist/components/form/FormToggle.stories.svelte +30 -0
  140. package/dist/components/form/FormToggle.stories.svelte.d.ts +27 -0
  141. package/dist/components/form/FormToggle.svelte +126 -0
  142. package/dist/components/form/FormToggle.svelte.d.ts +19 -0
  143. package/dist/components/form/FormUISchemaRenderer.svelte +136 -0
  144. package/dist/components/form/FormUISchemaRenderer.svelte.d.ts +32 -0
  145. package/dist/components/form/index.d.ts +50 -0
  146. package/dist/components/form/index.js +54 -0
  147. package/dist/components/form/templateAutocomplete.d.ts +29 -0
  148. package/dist/components/form/templateAutocomplete.js +254 -0
  149. package/dist/components/form/types.d.ts +485 -0
  150. package/dist/components/form/types.js +73 -0
  151. package/dist/components/interrupt/ChoicePrompt.stories.svelte +52 -0
  152. package/dist/components/interrupt/ChoicePrompt.stories.svelte.d.ts +27 -0
  153. package/dist/components/interrupt/ChoicePrompt.svelte +401 -0
  154. package/dist/components/interrupt/ChoicePrompt.svelte.d.ts +23 -0
  155. package/dist/components/interrupt/ConfirmationPrompt.stories.svelte +71 -0
  156. package/dist/components/interrupt/ConfirmationPrompt.stories.svelte.d.ts +27 -0
  157. package/dist/components/interrupt/ConfirmationPrompt.svelte +292 -0
  158. package/dist/components/interrupt/ConfirmationPrompt.svelte.d.ts +25 -0
  159. package/dist/components/interrupt/FormPrompt.svelte +236 -0
  160. package/dist/components/interrupt/FormPrompt.svelte.d.ts +23 -0
  161. package/dist/components/interrupt/InterruptBubble.svelte +601 -0
  162. package/dist/components/interrupt/InterruptBubble.svelte.d.ts +16 -0
  163. package/dist/components/interrupt/ReviewPrompt.stories.svelte +67 -0
  164. package/dist/components/interrupt/ReviewPrompt.stories.svelte.d.ts +27 -0
  165. package/dist/components/interrupt/ReviewPrompt.svelte +861 -0
  166. package/dist/components/interrupt/ReviewPrompt.svelte.d.ts +23 -0
  167. package/dist/components/interrupt/TextInputPrompt.stories.svelte +47 -0
  168. package/dist/components/interrupt/TextInputPrompt.stories.svelte.d.ts +27 -0
  169. package/dist/components/interrupt/TextInputPrompt.svelte +346 -0
  170. package/dist/components/interrupt/TextInputPrompt.svelte.d.ts +23 -0
  171. package/dist/components/interrupt/index.d.ts +13 -0
  172. package/dist/components/interrupt/index.js +15 -0
  173. package/dist/components/layouts/MainLayout.svelte +718 -0
  174. package/dist/components/layouts/MainLayout.svelte.d.ts +62 -0
  175. package/dist/components/nodes/GatewayNode.stories.svelte +108 -0
  176. package/dist/components/nodes/GatewayNode.stories.svelte.d.ts +26 -0
  177. package/dist/components/nodes/GatewayNode.svelte +591 -0
  178. package/dist/components/nodes/GatewayNode.svelte.d.ts +15 -0
  179. package/dist/components/nodes/IdeaNode.stories.svelte +52 -0
  180. package/dist/components/nodes/IdeaNode.stories.svelte.d.ts +26 -0
  181. package/dist/components/nodes/IdeaNode.svelte +455 -0
  182. package/dist/components/nodes/IdeaNode.svelte.d.ts +24 -0
  183. package/dist/components/nodes/NotesNode.stories.svelte +76 -0
  184. package/dist/components/nodes/NotesNode.stories.svelte.d.ts +26 -0
  185. package/dist/components/nodes/NotesNode.svelte +378 -0
  186. package/dist/components/nodes/NotesNode.svelte.d.ts +24 -0
  187. package/dist/components/nodes/SimpleNode.stories.svelte +159 -0
  188. package/dist/components/nodes/SimpleNode.stories.svelte.d.ts +26 -0
  189. package/dist/components/nodes/SimpleNode.svelte +451 -0
  190. package/dist/components/nodes/SimpleNode.svelte.d.ts +25 -0
  191. package/dist/components/nodes/SquareNode.stories.svelte +82 -0
  192. package/dist/components/nodes/SquareNode.stories.svelte.d.ts +26 -0
  193. package/dist/components/nodes/SquareNode.svelte +407 -0
  194. package/dist/components/nodes/SquareNode.svelte.d.ts +25 -0
  195. package/dist/components/nodes/TerminalNode.stories.svelte +25 -0
  196. package/dist/components/nodes/TerminalNode.stories.svelte.d.ts +26 -0
  197. package/dist/components/nodes/TerminalNode.svelte +690 -0
  198. package/dist/components/nodes/TerminalNode.svelte.d.ts +25 -0
  199. package/dist/components/nodes/ToolNode.stories.svelte +189 -0
  200. package/dist/components/nodes/ToolNode.stories.svelte.d.ts +26 -0
  201. package/dist/components/nodes/ToolNode.svelte +471 -0
  202. package/dist/components/nodes/ToolNode.svelte.d.ts +36 -0
  203. package/dist/components/nodes/WorkflowNode.stories.svelte +55 -0
  204. package/dist/components/nodes/WorkflowNode.stories.svelte.d.ts +26 -0
  205. package/dist/components/nodes/WorkflowNode.svelte +571 -0
  206. package/dist/components/nodes/WorkflowNode.svelte.d.ts +15 -0
  207. package/dist/components/playground/ChatPanel.svelte +905 -0
  208. package/dist/components/playground/ChatPanel.svelte.d.ts +46 -0
  209. package/dist/components/playground/ExecutionLogs.svelte +488 -0
  210. package/dist/components/playground/ExecutionLogs.svelte.d.ts +14 -0
  211. package/dist/components/playground/InputCollector.svelte +444 -0
  212. package/dist/components/playground/InputCollector.svelte.d.ts +16 -0
  213. package/dist/components/playground/MessageBubble.stories.svelte +62 -0
  214. package/dist/components/playground/MessageBubble.stories.svelte.d.ts +27 -0
  215. package/dist/components/playground/MessageBubble.svelte +633 -0
  216. package/dist/components/playground/MessageBubble.svelte.d.ts +24 -0
  217. package/dist/components/playground/Playground.svelte +1075 -0
  218. package/dist/components/playground/Playground.svelte.d.ts +25 -0
  219. package/dist/components/playground/PlaygroundModal.svelte +220 -0
  220. package/dist/components/playground/PlaygroundModal.svelte.d.ts +25 -0
  221. package/dist/components/playground/SessionManager.svelte +538 -0
  222. package/dist/components/playground/SessionManager.svelte.d.ts +20 -0
  223. package/dist/config/agentSpecEndpoints.d.ts +70 -0
  224. package/dist/config/agentSpecEndpoints.js +65 -0
  225. package/dist/config/constants.d.ts +43 -0
  226. package/dist/config/constants.js +31 -0
  227. package/dist/config/defaultCategories.d.ts +7 -0
  228. package/dist/config/defaultCategories.js +126 -0
  229. package/dist/config/defaultPortConfig.d.ts +6 -0
  230. package/dist/config/defaultPortConfig.js +201 -0
  231. package/dist/config/endpoints.d.ts +160 -0
  232. package/dist/config/endpoints.js +146 -0
  233. package/dist/config/runtimeConfig.d.ts +47 -0
  234. package/dist/config/runtimeConfig.js +80 -0
  235. package/dist/core/index.d.ts +75 -0
  236. package/dist/core/index.js +92 -0
  237. package/dist/display/index.d.ts +29 -0
  238. package/dist/display/index.js +36 -0
  239. package/dist/editor/index.d.ts +95 -0
  240. package/dist/editor/index.js +138 -0
  241. package/dist/form/code.d.ts +101 -0
  242. package/dist/form/code.js +168 -0
  243. package/dist/form/fieldRegistry.d.ts +169 -0
  244. package/dist/form/fieldRegistry.js +152 -0
  245. package/dist/form/full.d.ts +56 -0
  246. package/dist/form/full.js +80 -0
  247. package/dist/form/index.d.ts +77 -0
  248. package/dist/form/index.js +91 -0
  249. package/dist/form/markdown.d.ts +69 -0
  250. package/dist/form/markdown.js +103 -0
  251. package/dist/helpers/nodeLayoutHelper.d.ts +14 -0
  252. package/dist/helpers/nodeLayoutHelper.js +19 -0
  253. package/dist/helpers/proximityConnect.d.ts +94 -0
  254. package/dist/helpers/proximityConnect.js +314 -0
  255. package/dist/helpers/workflowEditorHelper.d.ts +183 -0
  256. package/dist/helpers/workflowEditorHelper.js +595 -0
  257. package/dist/index.d.ts +37 -0
  258. package/dist/index.js +64 -0
  259. package/dist/mocks/app-environment.d.ts +8 -0
  260. package/dist/mocks/app-environment.js +16 -0
  261. package/dist/mocks/app-forms.d.ts +2 -0
  262. package/dist/mocks/app-forms.js +22 -0
  263. package/dist/mocks/app-navigation.d.ts +5 -0
  264. package/dist/mocks/app-navigation.js +36 -0
  265. package/dist/mocks/app-stores.d.ts +14 -0
  266. package/dist/mocks/app-stores.js +26 -0
  267. package/dist/playground/index.d.ts +131 -0
  268. package/dist/playground/index.js +172 -0
  269. package/dist/playground/mount.d.ts +203 -0
  270. package/dist/playground/mount.js +235 -0
  271. package/dist/registry/BaseRegistry.d.ts +92 -0
  272. package/dist/registry/BaseRegistry.js +124 -0
  273. package/dist/registry/builtinFormats.d.ts +23 -0
  274. package/dist/registry/builtinFormats.js +70 -0
  275. package/dist/registry/builtinNodes.d.ts +77 -0
  276. package/dist/registry/builtinNodes.js +211 -0
  277. package/dist/registry/index.d.ts +8 -0
  278. package/dist/registry/index.js +12 -0
  279. package/dist/registry/nodeComponentRegistry.d.ts +276 -0
  280. package/dist/registry/nodeComponentRegistry.js +262 -0
  281. package/dist/registry/plugin.d.ts +215 -0
  282. package/dist/registry/plugin.js +249 -0
  283. package/dist/registry/workflowFormatRegistry.d.ts +122 -0
  284. package/dist/registry/workflowFormatRegistry.js +96 -0
  285. package/dist/schema/index.d.ts +23 -0
  286. package/dist/schema/index.js +23 -0
  287. package/dist/schemas/v1/workflow.schema.json +1078 -0
  288. package/dist/services/agentSpecExecutionService.d.ts +106 -0
  289. package/dist/services/agentSpecExecutionService.js +334 -0
  290. package/dist/services/api.d.ts +115 -0
  291. package/dist/services/api.js +214 -0
  292. package/dist/services/apiVariableService.d.ts +114 -0
  293. package/dist/services/apiVariableService.js +338 -0
  294. package/dist/services/autoSaveService.d.ts +112 -0
  295. package/dist/services/autoSaveService.js +227 -0
  296. package/dist/services/categoriesApi.d.ts +14 -0
  297. package/dist/services/categoriesApi.js +49 -0
  298. package/dist/services/draftStorage.d.ts +171 -0
  299. package/dist/services/draftStorage.js +299 -0
  300. package/dist/services/dynamicSchemaService.d.ts +108 -0
  301. package/dist/services/dynamicSchemaService.js +444 -0
  302. package/dist/services/globalSave.d.ts +69 -0
  303. package/dist/services/globalSave.js +248 -0
  304. package/dist/services/historyService.d.ts +208 -0
  305. package/dist/services/historyService.js +321 -0
  306. package/dist/services/interruptService.d.ts +133 -0
  307. package/dist/services/interruptService.js +280 -0
  308. package/dist/services/nodeExecutionService.d.ts +63 -0
  309. package/dist/services/nodeExecutionService.js +266 -0
  310. package/dist/services/playgroundService.d.ts +130 -0
  311. package/dist/services/playgroundService.js +321 -0
  312. package/dist/services/portConfigApi.d.ts +14 -0
  313. package/dist/services/portConfigApi.js +54 -0
  314. package/dist/services/settingsService.d.ts +92 -0
  315. package/dist/services/settingsService.js +196 -0
  316. package/dist/services/toastService.d.ts +156 -0
  317. package/dist/services/toastService.js +265 -0
  318. package/dist/services/variableService.d.ts +141 -0
  319. package/dist/services/variableService.js +463 -0
  320. package/dist/services/workflowStorage.d.ts +37 -0
  321. package/dist/services/workflowStorage.js +116 -0
  322. package/dist/settings/index.d.ts +25 -0
  323. package/dist/settings/index.js +33 -0
  324. package/dist/stores/categoriesStore.svelte.d.ts +32 -0
  325. package/dist/stores/categoriesStore.svelte.js +77 -0
  326. package/dist/stores/editorStateMachine.svelte.d.ts +42 -0
  327. package/dist/stores/editorStateMachine.svelte.js +132 -0
  328. package/dist/stores/historyStore.svelte.d.ts +136 -0
  329. package/dist/stores/historyStore.svelte.js +207 -0
  330. package/dist/stores/interruptStore.svelte.d.ts +179 -0
  331. package/dist/stores/interruptStore.svelte.js +346 -0
  332. package/dist/stores/playgroundStore.svelte.d.ts +230 -0
  333. package/dist/stores/playgroundStore.svelte.js +515 -0
  334. package/dist/stores/portCoordinateStore.svelte.d.ts +66 -0
  335. package/dist/stores/portCoordinateStore.svelte.js +186 -0
  336. package/dist/stores/settingsStore.svelte.d.ts +158 -0
  337. package/dist/stores/settingsStore.svelte.js +544 -0
  338. package/dist/stores/workflowStore.svelte.d.ts +260 -0
  339. package/dist/stores/workflowStore.svelte.js +649 -0
  340. package/dist/stories/CanvasDecorator.svelte +49 -0
  341. package/dist/stories/CanvasDecorator.svelte.d.ts +8 -0
  342. package/dist/stories/NodeDecorator.svelte +73 -0
  343. package/dist/stories/NodeDecorator.svelte.d.ts +8 -0
  344. package/dist/stories/utils.d.ts +93 -0
  345. package/dist/stories/utils.js +122 -0
  346. package/dist/styles/base.css +1300 -0
  347. package/dist/styles/toast.css +35 -0
  348. package/dist/styles/tokens.css +475 -0
  349. package/dist/svelte-app.d.ts +150 -0
  350. package/dist/svelte-app.js +295 -0
  351. package/dist/types/agentspec.d.ts +318 -0
  352. package/dist/types/agentspec.js +48 -0
  353. package/dist/types/auth.d.ts +263 -0
  354. package/dist/types/auth.js +229 -0
  355. package/dist/types/config.d.ts +151 -0
  356. package/dist/types/config.js +7 -0
  357. package/dist/types/events.d.ts +190 -0
  358. package/dist/types/events.js +30 -0
  359. package/dist/types/index.d.ts +1234 -0
  360. package/dist/types/index.js +27 -0
  361. package/dist/types/interrupt.d.ts +390 -0
  362. package/dist/types/interrupt.js +145 -0
  363. package/dist/types/interruptState.d.ts +211 -0
  364. package/dist/types/interruptState.js +308 -0
  365. package/dist/types/playground.d.ts +351 -0
  366. package/dist/types/playground.js +95 -0
  367. package/dist/types/settings.d.ts +189 -0
  368. package/dist/types/settings.js +97 -0
  369. package/dist/types/uischema.d.ts +144 -0
  370. package/dist/types/uischema.js +51 -0
  371. package/dist/utils/colors.d.ts +288 -0
  372. package/dist/utils/colors.js +548 -0
  373. package/dist/utils/config.d.ts +37 -0
  374. package/dist/utils/config.js +226 -0
  375. package/dist/utils/connections.d.ts +125 -0
  376. package/dist/utils/connections.js +414 -0
  377. package/dist/utils/errors.d.ts +28 -0
  378. package/dist/utils/errors.js +44 -0
  379. package/dist/utils/fetchWithAuth.d.ts +25 -0
  380. package/dist/utils/fetchWithAuth.js +34 -0
  381. package/dist/utils/handleIds.d.ts +35 -0
  382. package/dist/utils/handleIds.js +58 -0
  383. package/dist/utils/handlePositioning.d.ts +31 -0
  384. package/dist/utils/handlePositioning.js +35 -0
  385. package/dist/utils/icons.d.ts +106 -0
  386. package/dist/utils/icons.js +157 -0
  387. package/dist/utils/logger.d.ts +47 -0
  388. package/dist/utils/logger.js +72 -0
  389. package/dist/utils/nodeStatus.d.ts +53 -0
  390. package/dist/utils/nodeStatus.js +183 -0
  391. package/dist/utils/nodeTypes.d.ts +117 -0
  392. package/dist/utils/nodeTypes.js +244 -0
  393. package/dist/utils/nodeWrapper.d.ts +39 -0
  394. package/dist/utils/nodeWrapper.js +62 -0
  395. package/dist/utils/performanceUtils.d.ts +30 -0
  396. package/dist/utils/performanceUtils.js +108 -0
  397. package/dist/utils/sanitize.d.ts +19 -0
  398. package/dist/utils/sanitize.js +31 -0
  399. package/dist/utils/uischema.d.ts +52 -0
  400. package/dist/utils/uischema.js +88 -0
  401. package/dist/utils/validation.d.ts +29 -0
  402. package/dist/utils/validation.js +39 -0
  403. package/package.json +292 -0
@@ -0,0 +1,638 @@
1
+ <!--
2
+ Settings Panel Component
3
+
4
+ A comprehensive settings panel with tabbed categories for configuring
5
+ FlowDrop preferences. Uses SchemaForm for dynamic form generation.
6
+
7
+ Features:
8
+ - Tabbed interface for settings categories (Theme, Editor, UI, Behavior, API)
9
+ - Real-time settings updates via settingsStore
10
+ - Optional API sync with "Sync to Cloud" button
11
+ - Reset to defaults functionality
12
+
13
+ @example
14
+ ```svelte
15
+ <script>
16
+ import { SettingsPanel } from "@flowdrop/flowdrop";
17
+
18
+ function handleClose() {
19
+ // Handle settings panel close
20
+ }
21
+ </script>
22
+
23
+ <SettingsPanel
24
+ showSyncButton={true}
25
+ onClose={handleClose}
26
+ />
27
+ ```
28
+ -->
29
+
30
+ <script lang="ts">
31
+ import Icon from '@iconify/svelte';
32
+ import { SchemaForm } from '../form/index.js';
33
+ import type { ConfigSchema } from '../types/index.js';
34
+ import type { SettingsCategory } from '../types/settings.js';
35
+ import {
36
+ SETTINGS_CATEGORIES,
37
+ SETTINGS_CATEGORY_LABELS,
38
+ SETTINGS_CATEGORY_ICONS
39
+ } from '../types/settings.js';
40
+ import {
41
+ getSettings,
42
+ updateSettings,
43
+ resetSettings,
44
+ syncSettingsToApi,
45
+ getSyncStatus
46
+ } from '../stores/settingsStore.svelte.js';
47
+ import { logger } from '../utils/logger.js';
48
+
49
+ /**
50
+ * Props interface for SettingsPanel component
51
+ */
52
+ interface Props {
53
+ /** Categories to display (defaults to all) */
54
+ categories?: SettingsCategory[];
55
+ /** Show the "Sync to Cloud" button */
56
+ showSyncButton?: boolean;
57
+ /** Show the reset button */
58
+ showResetButton?: boolean;
59
+ /** Callback when settings change */
60
+ onSettingsChange?: (category: SettingsCategory, values: Record<string, unknown>) => void;
61
+ /** Callback when close is requested */
62
+ onClose?: () => void;
63
+ /** Custom CSS class */
64
+ class?: string;
65
+ }
66
+
67
+ const {
68
+ categories = SETTINGS_CATEGORIES,
69
+ showSyncButton = true,
70
+ showResetButton = true,
71
+ onSettingsChange,
72
+ onClose,
73
+ class: className = ''
74
+ }: Props = $props();
75
+
76
+ /**
77
+ * Currently active tab
78
+ */
79
+ // svelte-ignore state_referenced_locally — initial default, user switches tabs
80
+ let activeTab = $state<SettingsCategory>(categories[0] ?? 'theme');
81
+
82
+ /**
83
+ * Whether sync is in progress
84
+ */
85
+ let isSyncing = $derived(getSyncStatus().status === 'syncing');
86
+
87
+ /**
88
+ * JSON Schema definitions for each settings category
89
+ */
90
+ const schemas: Record<SettingsCategory, ConfigSchema> = {
91
+ theme: {
92
+ type: 'object',
93
+ properties: {
94
+ preference: {
95
+ type: 'string',
96
+ title: 'Theme Preference',
97
+ description: 'Choose your preferred color scheme',
98
+ oneOf: [
99
+ { const: 'light', title: 'Light' },
100
+ { const: 'dark', title: 'Dark' },
101
+ { const: 'auto', title: 'Auto (System)' }
102
+ ],
103
+ default: 'auto'
104
+ }
105
+ }
106
+ },
107
+ editor: {
108
+ type: 'object',
109
+ properties: {
110
+ showGrid: {
111
+ type: 'boolean',
112
+ title: 'Show Grid',
113
+ description: 'Display grid lines on the canvas',
114
+ default: true
115
+ },
116
+ snapToGrid: {
117
+ type: 'boolean',
118
+ title: 'Snap to Grid',
119
+ description: 'Snap nodes to grid when dragging',
120
+ default: true
121
+ },
122
+ gridSize: {
123
+ type: 'number',
124
+ title: 'Grid Size',
125
+ description: 'Grid cell size in pixels',
126
+ minimum: 5,
127
+ maximum: 50,
128
+ default: 20
129
+ },
130
+ showMinimap: {
131
+ type: 'boolean',
132
+ title: 'Show Minimap',
133
+ description: 'Display navigation minimap',
134
+ default: true
135
+ },
136
+ defaultZoom: {
137
+ type: 'number',
138
+ title: 'Default Zoom',
139
+ description: 'Initial zoom level (1 = 100%)',
140
+ minimum: 0.25,
141
+ maximum: 2,
142
+ default: 1
143
+ },
144
+ fitViewOnLoad: {
145
+ type: 'boolean',
146
+ title: 'Fit View on Load',
147
+ description: 'Automatically fit workflow to view when loading',
148
+ default: true
149
+ },
150
+ proximityConnect: {
151
+ type: 'boolean',
152
+ title: 'Proximity Connect',
153
+ description: 'Auto-connect compatible ports when dragging nodes near each other',
154
+ default: false
155
+ },
156
+ proximityConnectDistance: {
157
+ type: 'number',
158
+ title: 'Proximity Distance',
159
+ description: 'Distance threshold in pixels for proximity connect',
160
+ minimum: 50,
161
+ maximum: 500,
162
+ default: 150
163
+ }
164
+ }
165
+ },
166
+ ui: {
167
+ type: 'object',
168
+ properties: {
169
+ sidebarWidth: {
170
+ type: 'number',
171
+ title: 'Sidebar Width',
172
+ description: 'Width of the node sidebar in pixels',
173
+ minimum: 200,
174
+ maximum: 500,
175
+ default: 280
176
+ },
177
+ sidebarCollapsed: {
178
+ type: 'boolean',
179
+ title: 'Sidebar Collapsed',
180
+ description: 'Start with sidebar collapsed',
181
+ default: false
182
+ },
183
+ compactMode: {
184
+ type: 'boolean',
185
+ title: 'Compact Mode',
186
+ description: 'Use compact UI with smaller spacing',
187
+ default: false
188
+ }
189
+ }
190
+ },
191
+ behavior: {
192
+ type: 'object',
193
+ properties: {
194
+ autoSave: {
195
+ type: 'boolean',
196
+ title: 'Auto Save',
197
+ description: 'Automatically save changes',
198
+ default: false
199
+ },
200
+ autoSaveInterval: {
201
+ type: 'number',
202
+ title: 'Auto Save Interval',
203
+ description: 'Time between auto-saves in milliseconds',
204
+ minimum: 5000,
205
+ maximum: 300000,
206
+ default: 30000
207
+ },
208
+ undoHistoryLimit: {
209
+ type: 'number',
210
+ title: 'Undo History Limit',
211
+ description: 'Maximum number of undo steps (0 to disable)',
212
+ minimum: 0,
213
+ maximum: 200,
214
+ default: 0
215
+ },
216
+ confirmDelete: {
217
+ type: 'boolean',
218
+ title: 'Confirm Delete',
219
+ description: 'Show confirmation before deleting nodes',
220
+ default: true
221
+ }
222
+ }
223
+ },
224
+ api: {
225
+ type: 'object',
226
+ properties: {
227
+ timeout: {
228
+ type: 'number',
229
+ title: 'Request Timeout',
230
+ description: 'API request timeout in milliseconds',
231
+ minimum: 5000,
232
+ maximum: 120000,
233
+ default: 30000
234
+ },
235
+ retryEnabled: {
236
+ type: 'boolean',
237
+ title: 'Enable Retry',
238
+ description: 'Automatically retry failed requests',
239
+ default: true
240
+ },
241
+ retryAttempts: {
242
+ type: 'number',
243
+ title: 'Retry Attempts',
244
+ description: 'Maximum number of retry attempts',
245
+ minimum: 1,
246
+ maximum: 10,
247
+ default: 3
248
+ },
249
+ cacheEnabled: {
250
+ type: 'boolean',
251
+ title: 'Enable Caching',
252
+ description: 'Cache API responses for better performance',
253
+ default: true
254
+ }
255
+ }
256
+ }
257
+ };
258
+
259
+ /**
260
+ * Get current values for a category from the store
261
+ */
262
+ function getCategoryValues(category: SettingsCategory): Record<string, unknown> {
263
+ const settings = getSettings();
264
+ const categorySettings = settings[category];
265
+ // Convert to Record<string, unknown> for SchemaForm compatibility
266
+ return Object.fromEntries(Object.entries(categorySettings));
267
+ }
268
+
269
+ /**
270
+ * Handle form value changes
271
+ */
272
+ function handleChange(category: SettingsCategory, values: Record<string, unknown>): void {
273
+ // Update the store
274
+ updateSettings({ [category]: values });
275
+
276
+ // Notify parent if callback provided
277
+ if (onSettingsChange) {
278
+ onSettingsChange(category, values);
279
+ }
280
+ }
281
+
282
+ /**
283
+ * Handle sync to cloud button click
284
+ */
285
+ async function handleSync(): Promise<void> {
286
+ try {
287
+ await syncSettingsToApi();
288
+ } catch (error) {
289
+ logger.error('Failed to sync settings:', error);
290
+ }
291
+ }
292
+
293
+ /**
294
+ * Handle reset button click
295
+ */
296
+ function handleReset(): void {
297
+ if (confirm(`Reset ${SETTINGS_CATEGORY_LABELS[activeTab]} settings to defaults?`)) {
298
+ resetSettings([activeTab]);
299
+ }
300
+ }
301
+
302
+ /**
303
+ * Handle reset all button click
304
+ */
305
+ function handleResetAll(): void {
306
+ if (confirm('Reset all settings to defaults?')) {
307
+ resetSettings();
308
+ }
309
+ }
310
+
311
+ /**
312
+ * Handle tab keyboard navigation
313
+ */
314
+ function handleTabKeydown(event: KeyboardEvent, index: number): void {
315
+ const tabs = categories;
316
+ let newIndex = index;
317
+
318
+ switch (event.key) {
319
+ case 'ArrowLeft':
320
+ newIndex = index > 0 ? index - 1 : tabs.length - 1;
321
+ break;
322
+ case 'ArrowRight':
323
+ newIndex = index < tabs.length - 1 ? index + 1 : 0;
324
+ break;
325
+ case 'Home':
326
+ newIndex = 0;
327
+ break;
328
+ case 'End':
329
+ newIndex = tabs.length - 1;
330
+ break;
331
+ default:
332
+ return;
333
+ }
334
+
335
+ event.preventDefault();
336
+ activeTab = tabs[newIndex];
337
+
338
+ // Focus the new tab
339
+ const tabElement = document.querySelector(
340
+ `[data-tab="${tabs[newIndex]}"]`
341
+ ) as HTMLElement | null;
342
+ tabElement?.focus();
343
+ }
344
+ </script>
345
+
346
+ <div class="flowdrop-settings-panel {className}">
347
+ <!-- Tab Navigation -->
348
+ <div class="flowdrop-settings-panel__tabs" role="tablist" aria-label="Settings categories">
349
+ {#each categories as category, index (category)}
350
+ <button
351
+ class="flowdrop-settings-panel__tab"
352
+ class:flowdrop-settings-panel__tab--active={activeTab === category}
353
+ role="tab"
354
+ aria-selected={activeTab === category}
355
+ aria-controls="panel-{category}"
356
+ data-tab={category}
357
+ tabindex={activeTab === category ? 0 : -1}
358
+ onclick={() => (activeTab = category)}
359
+ onkeydown={(e) => handleTabKeydown(e, index)}
360
+ >
361
+ <Icon icon={SETTINGS_CATEGORY_ICONS[category]} class="flowdrop-settings-panel__tab-icon" />
362
+ <span class="flowdrop-settings-panel__tab-label">{SETTINGS_CATEGORY_LABELS[category]}</span>
363
+ </button>
364
+ {/each}
365
+ </div>
366
+
367
+ <!-- Tab Panels -->
368
+ <div class="flowdrop-settings-panel__content">
369
+ {#each categories as category (category)}
370
+ <div
371
+ id="panel-{category}"
372
+ class="flowdrop-settings-panel__panel"
373
+ class:flowdrop-settings-panel__panel--active={activeTab === category}
374
+ role="tabpanel"
375
+ aria-labelledby="tab-{category}"
376
+ hidden={activeTab !== category}
377
+ >
378
+ {#if activeTab === category}
379
+ <SchemaForm
380
+ schema={schemas[category]}
381
+ values={getCategoryValues(category)}
382
+ onChange={(values) => handleChange(category, values)}
383
+ showActions={false}
384
+ />
385
+ {/if}
386
+ </div>
387
+ {/each}
388
+ </div>
389
+
390
+ <!-- Footer Actions -->
391
+ <div class="flowdrop-settings-panel__footer">
392
+ <div class="flowdrop-settings-panel__footer-start">
393
+ {#if showResetButton}
394
+ <button
395
+ class="flowdrop-settings-panel__btn flowdrop-settings-panel__btn--outline"
396
+ onclick={handleReset}
397
+ title="Reset current category to defaults"
398
+ >
399
+ <Icon icon="mdi:refresh" />
400
+ <span>Reset</span>
401
+ </button>
402
+ <button
403
+ class="flowdrop-settings-panel__btn flowdrop-settings-panel__btn--ghost"
404
+ onclick={handleResetAll}
405
+ title="Reset all settings to defaults"
406
+ >
407
+ Reset All
408
+ </button>
409
+ {/if}
410
+ </div>
411
+
412
+ <div class="flowdrop-settings-panel__footer-end">
413
+ {#if showSyncButton}
414
+ <button
415
+ class="flowdrop-settings-panel__btn flowdrop-settings-panel__btn--secondary"
416
+ onclick={handleSync}
417
+ disabled={isSyncing}
418
+ title="Sync settings to cloud"
419
+ >
420
+ {#if isSyncing}
421
+ <Icon icon="mdi:loading" class="flowdrop-settings-panel__spin" />
422
+ <span>Syncing...</span>
423
+ {:else}
424
+ <Icon icon="mdi:cloud-upload" />
425
+ <span>Sync to Cloud</span>
426
+ {/if}
427
+ </button>
428
+ {/if}
429
+
430
+ {#if onClose}
431
+ <button
432
+ class="flowdrop-settings-panel__btn flowdrop-settings-panel__btn--primary"
433
+ onclick={onClose}
434
+ >
435
+ <span>Close</span>
436
+ </button>
437
+ {/if}
438
+ </div>
439
+ </div>
440
+
441
+ <!-- Sync Status Indicator -->
442
+ {#if getSyncStatus().error}
443
+ <div class="flowdrop-settings-panel__error">
444
+ <Icon icon="mdi:alert-circle" />
445
+ <span>{getSyncStatus().error}</span>
446
+ </div>
447
+ {:else if getSyncStatus().status === 'synced' && getSyncStatus().lastSyncedAt}
448
+ <div class="flowdrop-settings-panel__synced">
449
+ <Icon icon="mdi:check-circle" />
450
+ <span>Synced {new Date(getSyncStatus().lastSyncedAt!).toLocaleTimeString()}</span>
451
+ </div>
452
+ {/if}
453
+ </div>
454
+
455
+ <style>
456
+ .flowdrop-settings-panel {
457
+ display: flex;
458
+ flex-direction: column;
459
+ height: 100%;
460
+ background-color: var(--fd-background);
461
+ color: var(--fd-foreground);
462
+ }
463
+
464
+ /* Tabs */
465
+ .flowdrop-settings-panel__tabs {
466
+ display: flex;
467
+ gap: var(--fd-space-3xs);
468
+ padding: var(--fd-space-md);
469
+ border-bottom: 1px solid var(--fd-border);
470
+ overflow-x: auto;
471
+ }
472
+
473
+ .flowdrop-settings-panel__tab {
474
+ display: flex;
475
+ align-items: center;
476
+ gap: var(--fd-space-xs);
477
+ padding: var(--fd-space-xs) var(--fd-space-md);
478
+ border: none;
479
+ border-radius: var(--fd-radius-md);
480
+ background-color: transparent;
481
+ color: var(--fd-muted-foreground);
482
+ font-size: var(--fd-text-sm);
483
+ font-weight: 500;
484
+ cursor: pointer;
485
+ transition: all var(--fd-transition-fast);
486
+ white-space: nowrap;
487
+ }
488
+
489
+ .flowdrop-settings-panel__tab:hover {
490
+ background-color: var(--fd-muted);
491
+ color: var(--fd-foreground);
492
+ }
493
+
494
+ .flowdrop-settings-panel__tab--active {
495
+ background-color: var(--fd-primary);
496
+ color: var(--fd-primary-foreground);
497
+ }
498
+
499
+ .flowdrop-settings-panel__tab--active:hover {
500
+ background-color: var(--fd-primary);
501
+ color: var(--fd-primary-foreground);
502
+ }
503
+
504
+ .flowdrop-settings-panel__tab:focus {
505
+ outline: none;
506
+ box-shadow: 0 0 0 2px var(--fd-ring);
507
+ }
508
+
509
+ :global(.flowdrop-settings-panel__tab-icon) {
510
+ font-size: var(--fd-text-base);
511
+ }
512
+
513
+ /* Content */
514
+ .flowdrop-settings-panel__content {
515
+ flex: 1;
516
+ overflow-y: auto;
517
+ padding: var(--fd-space-xl);
518
+ }
519
+
520
+ .flowdrop-settings-panel__panel {
521
+ display: none;
522
+ }
523
+
524
+ .flowdrop-settings-panel__panel--active {
525
+ display: block;
526
+ }
527
+
528
+ /* Footer */
529
+ .flowdrop-settings-panel__footer {
530
+ display: flex;
531
+ justify-content: space-between;
532
+ align-items: center;
533
+ padding: var(--fd-space-md) var(--fd-space-xl);
534
+ border-top: 1px solid var(--fd-border);
535
+ gap: var(--fd-space-md);
536
+ }
537
+
538
+ .flowdrop-settings-panel__footer-start,
539
+ .flowdrop-settings-panel__footer-end {
540
+ display: flex;
541
+ gap: var(--fd-space-xs);
542
+ align-items: center;
543
+ }
544
+
545
+ /* Buttons */
546
+ .flowdrop-settings-panel__btn {
547
+ display: inline-flex;
548
+ align-items: center;
549
+ gap: var(--fd-space-xs);
550
+ padding: var(--fd-space-xs) var(--fd-space-md);
551
+ border-radius: var(--fd-radius-md);
552
+ font-size: var(--fd-text-sm);
553
+ font-weight: 500;
554
+ cursor: pointer;
555
+ transition: all var(--fd-transition-fast);
556
+ border: 1px solid transparent;
557
+ }
558
+
559
+ .flowdrop-settings-panel__btn:disabled {
560
+ opacity: 0.5;
561
+ cursor: not-allowed;
562
+ }
563
+
564
+ .flowdrop-settings-panel__btn--primary {
565
+ background-color: var(--fd-primary);
566
+ color: var(--fd-primary-foreground);
567
+ border-color: var(--fd-primary);
568
+ }
569
+
570
+ .flowdrop-settings-panel__btn--primary:hover:not(:disabled) {
571
+ opacity: 0.9;
572
+ }
573
+
574
+ .flowdrop-settings-panel__btn--secondary {
575
+ background-color: var(--fd-secondary);
576
+ color: var(--fd-secondary-foreground);
577
+ border-color: var(--fd-border);
578
+ }
579
+
580
+ .flowdrop-settings-panel__btn--secondary:hover:not(:disabled) {
581
+ background-color: var(--fd-muted);
582
+ }
583
+
584
+ .flowdrop-settings-panel__btn--outline {
585
+ background-color: transparent;
586
+ color: var(--fd-foreground);
587
+ border-color: var(--fd-border);
588
+ }
589
+
590
+ .flowdrop-settings-panel__btn--outline:hover:not(:disabled) {
591
+ background-color: var(--fd-muted);
592
+ }
593
+
594
+ .flowdrop-settings-panel__btn--ghost {
595
+ background-color: transparent;
596
+ color: var(--fd-muted-foreground);
597
+ border-color: transparent;
598
+ }
599
+
600
+ .flowdrop-settings-panel__btn--ghost:hover:not(:disabled) {
601
+ background-color: var(--fd-muted);
602
+ color: var(--fd-foreground);
603
+ }
604
+
605
+ /* Status Indicators */
606
+ .flowdrop-settings-panel__error,
607
+ .flowdrop-settings-panel__synced {
608
+ display: flex;
609
+ align-items: center;
610
+ gap: var(--fd-space-xs);
611
+ padding: var(--fd-space-xs) var(--fd-space-xl);
612
+ font-size: var(--fd-text-xs);
613
+ }
614
+
615
+ .flowdrop-settings-panel__error {
616
+ background-color: var(--fd-destructive);
617
+ color: var(--fd-destructive-foreground);
618
+ }
619
+
620
+ .flowdrop-settings-panel__synced {
621
+ background-color: var(--fd-success, #22c55e);
622
+ color: white;
623
+ }
624
+
625
+ /* Spin Animation */
626
+ :global(.flowdrop-settings-panel__spin) {
627
+ animation: flowdrop-spin 1s linear infinite;
628
+ }
629
+
630
+ @keyframes flowdrop-spin {
631
+ from {
632
+ transform: rotate(0deg);
633
+ }
634
+ to {
635
+ transform: rotate(360deg);
636
+ }
637
+ }
638
+ </style>
@@ -0,0 +1,21 @@
1
+ import type { SettingsCategory } from '../types/settings.js';
2
+ /**
3
+ * Props interface for SettingsPanel component
4
+ */
5
+ interface Props {
6
+ /** Categories to display (defaults to all) */
7
+ categories?: SettingsCategory[];
8
+ /** Show the "Sync to Cloud" button */
9
+ showSyncButton?: boolean;
10
+ /** Show the reset button */
11
+ showResetButton?: boolean;
12
+ /** Callback when settings change */
13
+ onSettingsChange?: (category: SettingsCategory, values: Record<string, unknown>) => void;
14
+ /** Callback when close is requested */
15
+ onClose?: () => void;
16
+ /** Custom CSS class */
17
+ class?: string;
18
+ }
19
+ declare const SettingsPanel: import("svelte").Component<Props, {}, "">;
20
+ type SettingsPanel = ReturnType<typeof SettingsPanel>;
21
+ export default SettingsPanel;
@@ -0,0 +1,60 @@
1
+ <script module>
2
+ import { defineMeta } from '@storybook/addon-svelte-csf';
3
+ import StatusIcon from './StatusIcon.svelte';
4
+
5
+ const { Story } = defineMeta({
6
+ title: 'Display/StatusIcon',
7
+ component: StatusIcon,
8
+ tags: ['autodocs'],
9
+ argTypes: {
10
+ status: {
11
+ control: { type: 'select' },
12
+ options: ['idle', 'pending', 'running', 'completed', 'failed', 'cancelled', 'skipped']
13
+ },
14
+ size: {
15
+ control: { type: 'select' },
16
+ options: ['sm', 'md', 'lg', 'xl']
17
+ },
18
+ showBackground: { control: 'boolean' }
19
+ }
20
+ });
21
+ </script>
22
+
23
+ <Story name="Idle" args={{ status: 'idle' }} />
24
+
25
+ <Story name="Running" args={{ status: 'running' }} />
26
+
27
+ <Story name="Completed" args={{ status: 'completed' }} />
28
+
29
+ <Story name="Failed" args={{ status: 'failed' }} />
30
+
31
+ <Story name="With Background" args={{ status: 'completed', showBackground: true }} />
32
+
33
+ <Story name="All Statuses">
34
+ <div style="display: flex; flex-direction: column; gap: 1.5rem;">
35
+ <div>
36
+ <div style="margin-bottom: 0.5rem; font-weight: 600;">Icon Only</div>
37
+ <div style="display: flex; gap: 1rem; align-items: center;">
38
+ <StatusIcon status="idle" />
39
+ <StatusIcon status="pending" />
40
+ <StatusIcon status="running" />
41
+ <StatusIcon status="completed" />
42
+ <StatusIcon status="failed" />
43
+ <StatusIcon status="cancelled" />
44
+ <StatusIcon status="skipped" />
45
+ </div>
46
+ </div>
47
+ <div>
48
+ <div style="margin-bottom: 0.5rem; font-weight: 600;">With Background</div>
49
+ <div style="display: flex; gap: 1rem; align-items: center;">
50
+ <StatusIcon status="idle" showBackground />
51
+ <StatusIcon status="pending" showBackground />
52
+ <StatusIcon status="running" showBackground />
53
+ <StatusIcon status="completed" showBackground />
54
+ <StatusIcon status="failed" showBackground />
55
+ <StatusIcon status="cancelled" showBackground />
56
+ <StatusIcon status="skipped" showBackground />
57
+ </div>
58
+ </div>
59
+ </div>
60
+ </Story>