@flowdrop/flowdrop 1.0.0 → 1.1.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 (388) hide show
  1. package/README.md +50 -50
  2. package/dist/adapters/WorkflowAdapter.d.ts +1 -1
  3. package/dist/adapters/WorkflowAdapter.js +25 -25
  4. package/dist/adapters/agentspec/AgentSpecAdapter.d.ts +2 -2
  5. package/dist/adapters/agentspec/AgentSpecAdapter.js +133 -122
  6. package/dist/adapters/agentspec/agentAdapter.d.ts +2 -2
  7. package/dist/adapters/agentspec/agentAdapter.js +10 -10
  8. package/dist/adapters/agentspec/autoLayout.d.ts +1 -1
  9. package/dist/adapters/agentspec/autoLayout.js +2 -2
  10. package/dist/adapters/agentspec/componentTypeDefaults.d.ts +1 -1
  11. package/dist/adapters/agentspec/componentTypeDefaults.js +120 -120
  12. package/dist/adapters/agentspec/defaultNodeTypes.d.ts +2 -2
  13. package/dist/adapters/agentspec/defaultNodeTypes.js +307 -307
  14. package/dist/adapters/agentspec/index.d.ts +10 -10
  15. package/dist/adapters/agentspec/index.js +6 -6
  16. package/dist/adapters/agentspec/validator.d.ts +2 -2
  17. package/dist/adapters/agentspec/validator.js +22 -20
  18. package/dist/api/enhanced-client.d.ts +3 -3
  19. package/dist/api/enhanced-client.js +73 -72
  20. package/dist/components/App.svelte +1081 -961
  21. package/dist/components/App.svelte.d.ts +9 -6
  22. package/dist/components/CanvasBanner.stories.svelte +23 -20
  23. package/dist/components/CanvasBanner.stories.svelte.d.ts +1 -1
  24. package/dist/components/CanvasBanner.svelte +46 -46
  25. package/dist/components/ConfigForm.svelte +1164 -1065
  26. package/dist/components/ConfigForm.svelte.d.ts +2 -2
  27. package/dist/components/ConfigModal.svelte +180 -180
  28. package/dist/components/ConfigModal.svelte.d.ts +1 -1
  29. package/dist/components/ConfigPanel.stories.svelte +35 -35
  30. package/dist/components/ConfigPanel.stories.svelte.d.ts +1 -1
  31. package/dist/components/ConfigPanel.svelte +178 -167
  32. package/dist/components/ConfigPanel.svelte.d.ts +1 -1
  33. package/dist/components/ConnectionLine.svelte +25 -25
  34. package/dist/components/EdgeRefresher.svelte +26 -26
  35. package/dist/components/FlowDropEdge.stories.svelte +197 -0
  36. package/dist/components/FlowDropEdge.stories.svelte.d.ts +26 -0
  37. package/dist/components/FlowDropEdge.svelte +168 -0
  38. package/dist/components/FlowDropEdge.svelte.d.ts +4 -0
  39. package/dist/components/FlowDropZone.svelte +63 -60
  40. package/dist/components/FlowDropZone.svelte.d.ts +1 -1
  41. package/dist/components/LoadingSpinner.stories.svelte +19 -19
  42. package/dist/components/LoadingSpinner.stories.svelte.d.ts +1 -1
  43. package/dist/components/LoadingSpinner.svelte +21 -21
  44. package/dist/components/LoadingSpinner.svelte.d.ts +1 -1
  45. package/dist/components/Logo.stories.svelte +13 -13
  46. package/dist/components/Logo.stories.svelte.d.ts +1 -1
  47. package/dist/components/Logo.svelte +101 -95
  48. package/dist/components/LogsSidebar.svelte +553 -546
  49. package/dist/components/LogsSidebar.svelte.d.ts +1 -1
  50. package/dist/components/MarkdownDisplay.stories.svelte +29 -23
  51. package/dist/components/MarkdownDisplay.stories.svelte.d.ts +1 -1
  52. package/dist/components/MarkdownDisplay.svelte +16 -14
  53. package/dist/components/Navbar.stories.svelte +43 -38
  54. package/dist/components/Navbar.stories.svelte.d.ts +1 -1
  55. package/dist/components/Navbar.svelte +760 -706
  56. package/dist/components/Navbar.svelte.d.ts +1 -1
  57. package/dist/components/NodeSidebar.svelte +900 -746
  58. package/dist/components/NodeSidebar.svelte.d.ts +3 -1
  59. package/dist/components/NodeStatusOverlay.stories.svelte +82 -70
  60. package/dist/components/NodeStatusOverlay.stories.svelte.d.ts +1 -1
  61. package/dist/components/NodeStatusOverlay.svelte +295 -280
  62. package/dist/components/NodeStatusOverlay.svelte.d.ts +3 -3
  63. package/dist/components/PipelineStatus.svelte +326 -300
  64. package/dist/components/PipelineStatus.svelte.d.ts +4 -4
  65. package/dist/components/PortCoordinateTracker.svelte +49 -47
  66. package/dist/components/PortCoordinateTracker.svelte.d.ts +1 -1
  67. package/dist/components/ReadOnlyDetails.svelte +156 -156
  68. package/dist/components/SchemaForm.stories.svelte +106 -98
  69. package/dist/components/SchemaForm.stories.svelte.d.ts +1 -1
  70. package/dist/components/SchemaForm.svelte +490 -463
  71. package/dist/components/SchemaForm.svelte.d.ts +2 -2
  72. package/dist/components/SettingsModal.svelte +226 -223
  73. package/dist/components/SettingsModal.svelte.d.ts +1 -1
  74. package/dist/components/SettingsPanel.svelte +637 -601
  75. package/dist/components/SettingsPanel.svelte.d.ts +1 -1
  76. package/dist/components/StatusIcon.stories.svelte +62 -49
  77. package/dist/components/StatusIcon.stories.svelte.d.ts +1 -1
  78. package/dist/components/StatusIcon.svelte +87 -87
  79. package/dist/components/StatusIcon.svelte.d.ts +2 -2
  80. package/dist/components/StatusLabel.stories.svelte +12 -12
  81. package/dist/components/StatusLabel.stories.svelte.d.ts +1 -1
  82. package/dist/components/StatusLabel.svelte +19 -19
  83. package/dist/components/ThemeToggle.stories.svelte +16 -16
  84. package/dist/components/ThemeToggle.stories.svelte.d.ts +1 -1
  85. package/dist/components/ThemeToggle.svelte +180 -169
  86. package/dist/components/ThemeToggle.svelte.d.ts +1 -1
  87. package/dist/components/UniversalNode.svelte +150 -138
  88. package/dist/components/UniversalNode.svelte.d.ts +3 -3
  89. package/dist/components/WorkflowEditor.svelte +1069 -1007
  90. package/dist/components/WorkflowEditor.svelte.d.ts +4 -4
  91. package/dist/components/form/FormArray.svelte +1034 -973
  92. package/dist/components/form/FormArray.svelte.d.ts +1 -1
  93. package/dist/components/form/FormAutocomplete.svelte +1021 -978
  94. package/dist/components/form/FormAutocomplete.svelte.d.ts +1 -1
  95. package/dist/components/form/FormCheckboxGroup.stories.svelte +23 -20
  96. package/dist/components/form/FormCheckboxGroup.stories.svelte.d.ts +1 -1
  97. package/dist/components/form/FormCheckboxGroup.svelte +136 -136
  98. package/dist/components/form/FormCodeEditor.svelte +452 -434
  99. package/dist/components/form/FormField.svelte +366 -355
  100. package/dist/components/form/FormField.svelte.d.ts +2 -2
  101. package/dist/components/form/FormFieldLight.svelte +400 -384
  102. package/dist/components/form/FormFieldLight.svelte.d.ts +1 -1
  103. package/dist/components/form/FormFieldWrapper.stories.svelte +42 -42
  104. package/dist/components/form/FormFieldWrapper.stories.svelte.d.ts +1 -1
  105. package/dist/components/form/FormFieldWrapper.svelte +100 -93
  106. package/dist/components/form/FormFieldWrapper.svelte.d.ts +1 -1
  107. package/dist/components/form/FormFieldset.svelte +108 -108
  108. package/dist/components/form/FormFieldset.svelte.d.ts +2 -2
  109. package/dist/components/form/FormMarkdownEditor.svelte +758 -725
  110. package/dist/components/form/FormNumberField.stories.svelte +25 -25
  111. package/dist/components/form/FormNumberField.stories.svelte.d.ts +1 -1
  112. package/dist/components/form/FormNumberField.svelte +88 -88
  113. package/dist/components/form/FormRangeField.stories.svelte +20 -20
  114. package/dist/components/form/FormRangeField.stories.svelte.d.ts +1 -1
  115. package/dist/components/form/FormRangeField.svelte +234 -226
  116. package/dist/components/form/FormSelect.stories.svelte +38 -38
  117. package/dist/components/form/FormSelect.stories.svelte.d.ts +1 -1
  118. package/dist/components/form/FormSelect.svelte +101 -101
  119. package/dist/components/form/FormSelect.svelte.d.ts +1 -1
  120. package/dist/components/form/FormTemplateEditor.svelte +847 -798
  121. package/dist/components/form/FormTemplateEditor.svelte.d.ts +1 -1
  122. package/dist/components/form/FormTextField.stories.svelte +29 -23
  123. package/dist/components/form/FormTextField.stories.svelte.d.ts +1 -1
  124. package/dist/components/form/FormTextField.svelte +68 -68
  125. package/dist/components/form/FormTextarea.stories.svelte +28 -25
  126. package/dist/components/form/FormTextarea.stories.svelte.d.ts +1 -1
  127. package/dist/components/form/FormTextarea.svelte +74 -74
  128. package/dist/components/form/FormToggle.stories.svelte +23 -20
  129. package/dist/components/form/FormToggle.stories.svelte.d.ts +1 -1
  130. package/dist/components/form/FormToggle.svelte +98 -98
  131. package/dist/components/form/FormUISchemaRenderer.svelte +120 -113
  132. package/dist/components/form/FormUISchemaRenderer.svelte.d.ts +3 -3
  133. package/dist/components/form/index.d.ts +19 -19
  134. package/dist/components/form/index.js +18 -18
  135. package/dist/components/form/templateAutocomplete.d.ts +2 -2
  136. package/dist/components/form/templateAutocomplete.js +64 -55
  137. package/dist/components/form/types.d.ts +6 -6
  138. package/dist/components/form/types.js +9 -4
  139. package/dist/components/icons/AlertCircleIcon.svelte +11 -0
  140. package/dist/components/icons/AlertCircleIcon.svelte.d.ts +26 -0
  141. package/dist/components/icons/CogIcon.svelte +11 -0
  142. package/dist/components/icons/CogIcon.svelte.d.ts +26 -0
  143. package/dist/components/interrupt/ChoicePrompt.stories.svelte +54 -38
  144. package/dist/components/interrupt/ChoicePrompt.stories.svelte.d.ts +1 -1
  145. package/dist/components/interrupt/ChoicePrompt.svelte +407 -383
  146. package/dist/components/interrupt/ChoicePrompt.svelte.d.ts +1 -1
  147. package/dist/components/interrupt/ConfirmationPrompt.stories.svelte +48 -48
  148. package/dist/components/interrupt/ConfirmationPrompt.stories.svelte.d.ts +1 -1
  149. package/dist/components/interrupt/ConfirmationPrompt.svelte +280 -274
  150. package/dist/components/interrupt/ConfirmationPrompt.svelte.d.ts +1 -1
  151. package/dist/components/interrupt/FormPrompt.svelte +223 -218
  152. package/dist/components/interrupt/FormPrompt.svelte.d.ts +1 -1
  153. package/dist/components/interrupt/InterruptBubble.svelte +617 -583
  154. package/dist/components/interrupt/InterruptBubble.svelte.d.ts +2 -2
  155. package/dist/components/interrupt/ReviewPrompt.stories.svelte +66 -56
  156. package/dist/components/interrupt/ReviewPrompt.stories.svelte.d.ts +1 -1
  157. package/dist/components/interrupt/ReviewPrompt.svelte +861 -841
  158. package/dist/components/interrupt/ReviewPrompt.svelte.d.ts +1 -1
  159. package/dist/components/interrupt/TextInputPrompt.stories.svelte +38 -33
  160. package/dist/components/interrupt/TextInputPrompt.stories.svelte.d.ts +1 -1
  161. package/dist/components/interrupt/TextInputPrompt.svelte +333 -328
  162. package/dist/components/interrupt/TextInputPrompt.svelte.d.ts +1 -1
  163. package/dist/components/interrupt/index.d.ts +5 -5
  164. package/dist/components/interrupt/index.js +5 -5
  165. package/dist/components/layouts/MainLayout.svelte +724 -691
  166. package/dist/components/layouts/MainLayout.svelte.d.ts +6 -6
  167. package/dist/components/nodes/GatewayNode.stories.svelte +100 -99
  168. package/dist/components/nodes/GatewayNode.svelte +605 -571
  169. package/dist/components/nodes/GatewayNode.svelte.d.ts +3 -3
  170. package/dist/components/nodes/IdeaNode.stories.svelte +44 -43
  171. package/dist/components/nodes/IdeaNode.svelte +451 -437
  172. package/dist/components/nodes/IdeaNode.svelte.d.ts +1 -1
  173. package/dist/components/nodes/NotesNode.stories.svelte +65 -64
  174. package/dist/components/nodes/NotesNode.svelte +380 -369
  175. package/dist/components/nodes/NotesNode.svelte.d.ts +1 -1
  176. package/dist/components/nodes/SimpleNode.stories.svelte +145 -144
  177. package/dist/components/nodes/SimpleNode.svelte +486 -424
  178. package/dist/components/nodes/SimpleNode.svelte.d.ts +1 -1
  179. package/dist/components/nodes/SquareNode.stories.svelte +73 -73
  180. package/dist/components/nodes/SquareNode.svelte +439 -380
  181. package/dist/components/nodes/SquareNode.svelte.d.ts +1 -1
  182. package/dist/components/nodes/TerminalNode.stories.svelte +13 -13
  183. package/dist/components/nodes/TerminalNode.svelte +709 -670
  184. package/dist/components/nodes/TerminalNode.svelte.d.ts +1 -1
  185. package/dist/components/nodes/ToolNode.stories.svelte +181 -180
  186. package/dist/components/nodes/ToolNode.svelte +505 -447
  187. package/dist/components/nodes/ToolNode.svelte.d.ts +1 -1
  188. package/dist/components/nodes/WorkflowNode.stories.svelte +70 -46
  189. package/dist/components/nodes/WorkflowNode.svelte +621 -551
  190. package/dist/components/nodes/WorkflowNode.svelte.d.ts +3 -3
  191. package/dist/components/playground/ChatPanel.svelte +945 -889
  192. package/dist/components/playground/ExecutionLogs.svelte +495 -472
  193. package/dist/components/playground/InputCollector.svelte +449 -428
  194. package/dist/components/playground/MessageBubble.stories.svelte +47 -47
  195. package/dist/components/playground/MessageBubble.stories.svelte.d.ts +1 -1
  196. package/dist/components/playground/MessageBubble.svelte +626 -610
  197. package/dist/components/playground/MessageBubble.svelte.d.ts +1 -1
  198. package/dist/components/playground/Playground.svelte +1088 -1057
  199. package/dist/components/playground/Playground.svelte.d.ts +3 -3
  200. package/dist/components/playground/PlaygroundModal.svelte +208 -204
  201. package/dist/components/playground/PlaygroundModal.svelte.d.ts +3 -3
  202. package/dist/components/playground/SessionManager.svelte +527 -521
  203. package/dist/components/playground/SessionManager.svelte.d.ts +1 -1
  204. package/dist/config/agentSpecEndpoints.d.ts +1 -1
  205. package/dist/config/agentSpecEndpoints.js +20 -20
  206. package/dist/config/constants.d.ts +8 -0
  207. package/dist/config/constants.js +10 -2
  208. package/dist/config/defaultCategories.d.ts +1 -1
  209. package/dist/config/defaultCategories.js +86 -86
  210. package/dist/config/defaultPortConfig.d.ts +1 -1
  211. package/dist/config/defaultPortConfig.js +144 -144
  212. package/dist/config/endpoints.d.ts +4 -4
  213. package/dist/config/endpoints.js +65 -65
  214. package/dist/config/runtimeConfig.d.ts +2 -2
  215. package/dist/config/runtimeConfig.js +8 -8
  216. package/dist/core/index.d.ts +63 -59
  217. package/dist/core/index.js +35 -33
  218. package/dist/display/index.d.ts +2 -2
  219. package/dist/display/index.js +2 -2
  220. package/dist/editor/index.d.ts +62 -62
  221. package/dist/editor/index.js +53 -53
  222. package/dist/form/code.d.ts +5 -5
  223. package/dist/form/code.js +14 -14
  224. package/dist/form/fieldRegistry.d.ts +3 -3
  225. package/dist/form/fieldRegistry.js +11 -9
  226. package/dist/form/full.d.ts +8 -8
  227. package/dist/form/full.js +9 -9
  228. package/dist/form/index.d.ts +18 -18
  229. package/dist/form/index.js +16 -16
  230. package/dist/form/markdown.d.ts +4 -4
  231. package/dist/form/markdown.js +8 -8
  232. package/dist/helpers/proximityConnect.d.ts +3 -3
  233. package/dist/helpers/proximityConnect.js +34 -32
  234. package/dist/helpers/workflowEditorHelper.d.ts +5 -5
  235. package/dist/helpers/workflowEditorHelper.js +108 -96
  236. package/dist/index.d.ts +6 -6
  237. package/dist/index.js +6 -6
  238. package/dist/mocks/app-environment.js +2 -2
  239. package/dist/mocks/app-forms.js +9 -9
  240. package/dist/mocks/app-navigation.js +11 -11
  241. package/dist/mocks/app-stores.js +8 -8
  242. package/dist/playground/index.d.ts +19 -19
  243. package/dist/playground/index.js +16 -16
  244. package/dist/playground/mount.d.ts +3 -3
  245. package/dist/playground/mount.js +24 -24
  246. package/dist/registry/builtinFormats.js +13 -13
  247. package/dist/registry/builtinNodes.d.ts +2 -2
  248. package/dist/registry/builtinNodes.js +77 -77
  249. package/dist/registry/index.d.ts +4 -4
  250. package/dist/registry/index.js +4 -4
  251. package/dist/registry/nodeComponentRegistry.d.ts +8 -8
  252. package/dist/registry/nodeComponentRegistry.js +11 -9
  253. package/dist/registry/plugin.d.ts +2 -2
  254. package/dist/registry/plugin.js +11 -11
  255. package/dist/registry/workflowFormatRegistry.d.ts +3 -3
  256. package/dist/registry/workflowFormatRegistry.js +2 -2
  257. package/dist/schema/index.d.ts +1 -1
  258. package/dist/schema/index.js +2 -2
  259. package/dist/schemas/v1/workflow.schema.json +22 -107
  260. package/dist/services/agentSpecExecutionService.d.ts +3 -3
  261. package/dist/services/agentSpecExecutionService.js +59 -55
  262. package/dist/services/api.d.ts +18 -4
  263. package/dist/services/api.js +46 -43
  264. package/dist/services/apiVariableService.d.ts +1 -1
  265. package/dist/services/apiVariableService.js +41 -34
  266. package/dist/services/autoSaveService.js +8 -8
  267. package/dist/services/categoriesApi.d.ts +2 -2
  268. package/dist/services/categoriesApi.js +8 -8
  269. package/dist/services/draftStorage.d.ts +1 -1
  270. package/dist/services/draftStorage.js +11 -11
  271. package/dist/services/dynamicSchemaService.d.ts +1 -1
  272. package/dist/services/dynamicSchemaService.js +41 -39
  273. package/dist/services/globalSave.d.ts +2 -2
  274. package/dist/services/globalSave.js +53 -42
  275. package/dist/services/historyService.d.ts +1 -1
  276. package/dist/services/historyService.js +8 -8
  277. package/dist/services/interruptService.d.ts +1 -1
  278. package/dist/services/interruptService.js +35 -29
  279. package/dist/services/nodeExecutionService.d.ts +1 -1
  280. package/dist/services/nodeExecutionService.js +45 -44
  281. package/dist/services/playgroundService.d.ts +1 -1
  282. package/dist/services/playgroundService.js +29 -29
  283. package/dist/services/portConfigApi.d.ts +2 -2
  284. package/dist/services/portConfigApi.js +8 -8
  285. package/dist/services/settingsService.d.ts +2 -2
  286. package/dist/services/settingsService.js +25 -19
  287. package/dist/services/toastService.d.ts +4 -4
  288. package/dist/services/toastService.js +33 -33
  289. package/dist/services/variableService.d.ts +1 -1
  290. package/dist/services/variableService.js +36 -36
  291. package/dist/services/workflowStorage.d.ts +2 -2
  292. package/dist/services/workflowStorage.js +13 -13
  293. package/dist/settings/index.d.ts +7 -7
  294. package/dist/settings/index.js +6 -6
  295. package/dist/skins/default.d.ts +2 -0
  296. package/dist/skins/default.js +1 -0
  297. package/dist/skins/index.d.ts +13 -0
  298. package/dist/skins/index.js +30 -0
  299. package/dist/skins/slate.d.ts +2 -0
  300. package/dist/skins/slate.js +78 -0
  301. package/dist/stores/categoriesStore.svelte.d.ts +1 -1
  302. package/dist/stores/categoriesStore.svelte.js +5 -5
  303. package/dist/stores/editorStateMachine.svelte.d.ts +2 -2
  304. package/dist/stores/editorStateMachine.svelte.js +65 -33
  305. package/dist/stores/historyStore.svelte.d.ts +4 -4
  306. package/dist/stores/historyStore.svelte.js +4 -4
  307. package/dist/stores/interruptStore.svelte.d.ts +3 -3
  308. package/dist/stores/interruptStore.svelte.js +21 -21
  309. package/dist/stores/playgroundStore.svelte.d.ts +2 -2
  310. package/dist/stores/playgroundStore.svelte.js +25 -18
  311. package/dist/stores/portCoordinateStore.svelte.d.ts +2 -2
  312. package/dist/stores/portCoordinateStore.svelte.js +15 -8
  313. package/dist/stores/settingsStore.svelte.d.ts +2 -2
  314. package/dist/stores/settingsStore.svelte.js +62 -57
  315. package/dist/stores/workflowStore.svelte.d.ts +3 -3
  316. package/dist/stores/workflowStore.svelte.js +50 -47
  317. package/dist/stories/CanvasDecorator.svelte +35 -32
  318. package/dist/stories/CanvasDecorator.svelte.d.ts +2 -2
  319. package/dist/stories/EdgeDecorator.svelte +125 -0
  320. package/dist/stories/EdgeDecorator.svelte.d.ts +17 -0
  321. package/dist/stories/NodeDecorator.svelte +59 -53
  322. package/dist/stories/NodeDecorator.svelte.d.ts +1 -1
  323. package/dist/stories/utils.d.ts +2 -2
  324. package/dist/stories/utils.js +105 -67
  325. package/dist/styles/base.css +599 -595
  326. package/dist/styles/toast.css +14 -14
  327. package/dist/styles/tokens.css +409 -378
  328. package/dist/svelte-app.d.ts +9 -9
  329. package/dist/svelte-app.js +39 -39
  330. package/dist/themes/default.d.ts +2 -0
  331. package/dist/themes/default.js +9 -0
  332. package/dist/themes/index.d.ts +13 -0
  333. package/dist/themes/index.js +44 -0
  334. package/dist/themes/minimal.d.ts +2 -0
  335. package/dist/themes/minimal.js +11 -0
  336. package/dist/types/agentspec.d.ts +18 -18
  337. package/dist/types/agentspec.js +2 -2
  338. package/dist/types/auth.d.ts +1 -1
  339. package/dist/types/auth.js +6 -6
  340. package/dist/types/config.d.ts +6 -6
  341. package/dist/types/events.d.ts +2 -2
  342. package/dist/types/events.js +2 -2
  343. package/dist/types/index.d.ts +32 -32
  344. package/dist/types/index.js +6 -6
  345. package/dist/types/interrupt.d.ts +6 -6
  346. package/dist/types/interrupt.js +21 -21
  347. package/dist/types/interruptState.d.ts +12 -12
  348. package/dist/types/interruptState.js +66 -66
  349. package/dist/types/playground.d.ts +7 -7
  350. package/dist/types/playground.js +14 -14
  351. package/dist/types/settings.d.ts +5 -3
  352. package/dist/types/settings.js +25 -18
  353. package/dist/types/skin.d.ts +31 -0
  354. package/dist/types/skin.js +1 -0
  355. package/dist/types/theme.d.ts +35 -0
  356. package/dist/types/theme.js +1 -0
  357. package/dist/types/uischema.d.ts +4 -4
  358. package/dist/types/uischema.js +3 -3
  359. package/dist/utils/colors.d.ts +1 -1
  360. package/dist/utils/colors.js +97 -95
  361. package/dist/utils/config.d.ts +2 -2
  362. package/dist/utils/config.js +48 -48
  363. package/dist/utils/connections.d.ts +2 -2
  364. package/dist/utils/connections.js +15 -15
  365. package/dist/utils/errors.js +3 -3
  366. package/dist/utils/fetchWithAuth.d.ts +1 -1
  367. package/dist/utils/fetchWithAuth.js +2 -2
  368. package/dist/utils/handleIds.d.ts +2 -2
  369. package/dist/utils/handleIds.js +8 -8
  370. package/dist/utils/handlePositioning.d.ts +1 -1
  371. package/dist/utils/handlePositioning.js +2 -2
  372. package/dist/utils/icons.d.ts +1 -1
  373. package/dist/utils/icons.js +74 -74
  374. package/dist/utils/logger.d.ts +1 -1
  375. package/dist/utils/logger.js +7 -7
  376. package/dist/utils/nodeStatus.d.ts +1 -1
  377. package/dist/utils/nodeStatus.js +48 -48
  378. package/dist/utils/nodeTypes.d.ts +1 -1
  379. package/dist/utils/nodeTypes.js +21 -20
  380. package/dist/utils/nodeWrapper.d.ts +7 -7
  381. package/dist/utils/nodeWrapper.js +21 -19
  382. package/dist/utils/performanceUtils.d.ts +1 -1
  383. package/dist/utils/performanceUtils.js +2 -1
  384. package/dist/utils/sanitize.js +1 -1
  385. package/dist/utils/uischema.d.ts +2 -2
  386. package/dist/utils/uischema.js +8 -8
  387. package/dist/utils/validation.js +20 -8
  388. package/package.json +296 -291
@@ -10,14 +10,14 @@
10
10
  *
11
11
  * @module stores/workflowStore
12
12
  */
13
- import { DEFAULT_WORKFLOW_FORMAT } from '../types/index.js';
14
- import { historyService } from '../services/historyService.js';
13
+ import { DEFAULT_WORKFLOW_FORMAT } from "../types/index.js";
14
+ import { historyService } from "../services/historyService.js";
15
15
  /**
16
16
  * Safely build updated workflow metadata, providing defaults for required fields.
17
17
  */
18
18
  function buildMetadata(existing, updates) {
19
19
  return {
20
- version: existing?.version ?? '1.0',
20
+ version: existing?.version ?? "1.0",
21
21
  createdAt: existing?.createdAt ?? new Date().toISOString(),
22
22
  updatedAt: new Date().toISOString(),
23
23
  author: existing?.author,
@@ -25,7 +25,7 @@ function buildMetadata(existing, updates) {
25
25
  versionId: existing?.versionId,
26
26
  updateNumber: existing?.updateNumber,
27
27
  format: existing?.format,
28
- ...updates
28
+ ...updates,
29
29
  };
30
30
  }
31
31
  // =========================================================================
@@ -106,7 +106,7 @@ export function getWorkflowId() {
106
106
  * @returns The workflow name or 'Untitled Workflow'
107
107
  */
108
108
  export function getWorkflowName() {
109
- return workflowState?.name ?? 'Untitled Workflow';
109
+ return workflowState?.name ?? "Untitled Workflow";
110
110
  }
111
111
  /**
112
112
  * Get the workflow nodes reactively
@@ -131,11 +131,11 @@ export function getWorkflowEdges() {
131
131
  */
132
132
  export function getWorkflowMetadata() {
133
133
  return (workflowState?.metadata ?? {
134
- version: '1.0.0',
134
+ version: "1.0.0",
135
135
  createdAt: new Date().toISOString(),
136
136
  updatedAt: new Date().toISOString(),
137
137
  versionId: `${Date.now()}-${Math.random().toString(36).substr(2, 9)}`,
138
- updateNumber: 0
138
+ updateNumber: 0,
139
139
  });
140
140
  }
141
141
  /**
@@ -155,7 +155,7 @@ export function getWorkflowChanged() {
155
155
  return {
156
156
  nodes: getWorkflowNodes(),
157
157
  edges: getWorkflowEdges(),
158
- name: getWorkflowName()
158
+ name: getWorkflowName(),
159
159
  };
160
160
  }
161
161
  /**
@@ -171,7 +171,7 @@ export function getWorkflowValidation() {
171
171
  hasEdges: edges.length > 0,
172
172
  nodeCount: nodes.length,
173
173
  edgeCount: edges.length,
174
- isValid: nodes.length > 0 && edges.length >= 0
174
+ isValid: nodes.length > 0 && edges.length >= 0,
175
175
  };
176
176
  }
177
177
  /**
@@ -184,7 +184,7 @@ export function getWorkflowMetadataChanged() {
184
184
  return {
185
185
  createdAt: metadata.createdAt,
186
186
  updatedAt: metadata.updatedAt,
187
- version: metadata.version ?? '1.0.0'
187
+ version: metadata.version ?? "1.0.0",
188
188
  };
189
189
  }
190
190
  /**
@@ -256,16 +256,16 @@ function createSnapshot(workflow) {
256
256
  position: n.position,
257
257
  data: {
258
258
  label: n.data.label,
259
- config: n.data.config
260
- }
259
+ config: n.data.config,
260
+ },
261
261
  })),
262
262
  edges: workflow.edges.map((e) => ({
263
263
  id: e.id,
264
264
  source: e.source,
265
265
  target: e.target,
266
266
  sourceHandle: e.sourceHandle,
267
- targetHandle: e.targetHandle
268
- }))
267
+ targetHandle: e.targetHandle,
268
+ })),
269
269
  };
270
270
  return JSON.stringify(toSnapshot);
271
271
  }
@@ -403,7 +403,8 @@ function hasWorkflowDataChanged(currentWorkflow, newNodes, newEdges) {
403
403
  return true;
404
404
  if (currentEdge.id !== newEdge.id)
405
405
  return true;
406
- if (currentEdge.source !== newEdge.source || currentEdge.target !== newEdge.target)
406
+ if (currentEdge.source !== newEdge.source ||
407
+ currentEdge.target !== newEdge.target)
407
408
  return true;
408
409
  }
409
410
  return false;
@@ -442,7 +443,7 @@ export const workflowActions = {
442
443
  */
443
444
  updateWorkflow: (workflow) => {
444
445
  workflowState = workflow;
445
- notifyWorkflowChange('metadata');
446
+ notifyWorkflowChange("metadata");
446
447
  },
447
448
  /**
448
449
  * Restore workflow from history (undo/redo)
@@ -452,7 +453,7 @@ export const workflowActions = {
452
453
  restoreFromHistory: (workflow) => {
453
454
  isRestoringFromHistory = true;
454
455
  workflowState = workflow;
455
- notifyWorkflowChange('metadata');
456
+ notifyWorkflowChange("metadata");
456
457
  isRestoringFromHistory = false;
457
458
  },
458
459
  /**
@@ -472,10 +473,10 @@ export const workflowActions = {
472
473
  nodes,
473
474
  metadata: buildMetadata(workflowState.metadata, {
474
475
  versionId,
475
- updateNumber: (workflowState.metadata?.updateNumber ?? 0) + 1
476
- })
476
+ updateNumber: (workflowState.metadata?.updateNumber ?? 0) + 1,
477
+ }),
477
478
  };
478
- notifyWorkflowChange('node_move');
479
+ notifyWorkflowChange("node_move");
479
480
  },
480
481
  /**
481
482
  * Update edges
@@ -494,10 +495,10 @@ export const workflowActions = {
494
495
  edges,
495
496
  metadata: buildMetadata(workflowState.metadata, {
496
497
  versionId,
497
- updateNumber: (workflowState.metadata?.updateNumber ?? 0) + 1
498
- })
498
+ updateNumber: (workflowState.metadata?.updateNumber ?? 0) + 1,
499
+ }),
499
500
  };
500
- notifyWorkflowChange('edge_add');
501
+ notifyWorkflowChange("edge_add");
501
502
  },
502
503
  /**
503
504
  * Update workflow name
@@ -508,23 +509,23 @@ export const workflowActions = {
508
509
  workflowState = {
509
510
  ...workflowState,
510
511
  name,
511
- metadata: buildMetadata(workflowState.metadata)
512
+ metadata: buildMetadata(workflowState.metadata),
512
513
  };
513
- notifyWorkflowChange('name');
514
+ notifyWorkflowChange("name");
514
515
  },
515
516
  /**
516
517
  * Add a node
517
518
  */
518
519
  addNode: (node) => {
519
- pushToHistory('Add node');
520
+ pushToHistory("Add node");
520
521
  if (!workflowState)
521
522
  return;
522
523
  workflowState = {
523
524
  ...workflowState,
524
525
  nodes: [...workflowState.nodes, node],
525
- metadata: buildMetadata(workflowState.metadata)
526
+ metadata: buildMetadata(workflowState.metadata),
526
527
  };
527
- notifyWorkflowChange('node_add');
528
+ notifyWorkflowChange("node_add");
528
529
  },
529
530
  /**
530
531
  * Remove a node
@@ -533,44 +534,44 @@ export const workflowActions = {
533
534
  * A single undo will restore both the node and its edges.
534
535
  */
535
536
  removeNode: (nodeId) => {
536
- pushToHistory('Delete node');
537
+ pushToHistory("Delete node");
537
538
  if (!workflowState)
538
539
  return;
539
540
  workflowState = {
540
541
  ...workflowState,
541
542
  nodes: workflowState.nodes.filter((node) => node.id !== nodeId),
542
543
  edges: workflowState.edges.filter((edge) => edge.source !== nodeId && edge.target !== nodeId),
543
- metadata: buildMetadata(workflowState.metadata)
544
+ metadata: buildMetadata(workflowState.metadata),
544
545
  };
545
- notifyWorkflowChange('node_remove');
546
+ notifyWorkflowChange("node_remove");
546
547
  },
547
548
  /**
548
549
  * Add an edge
549
550
  */
550
551
  addEdge: (edge) => {
551
- pushToHistory('Add connection');
552
+ pushToHistory("Add connection");
552
553
  if (!workflowState)
553
554
  return;
554
555
  workflowState = {
555
556
  ...workflowState,
556
557
  edges: [...workflowState.edges, edge],
557
- metadata: buildMetadata(workflowState.metadata)
558
+ metadata: buildMetadata(workflowState.metadata),
558
559
  };
559
- notifyWorkflowChange('edge_add');
560
+ notifyWorkflowChange("edge_add");
560
561
  },
561
562
  /**
562
563
  * Remove an edge
563
564
  */
564
565
  removeEdge: (edgeId) => {
565
- pushToHistory('Delete connection');
566
+ pushToHistory("Delete connection");
566
567
  if (!workflowState)
567
568
  return;
568
569
  workflowState = {
569
570
  ...workflowState,
570
571
  edges: workflowState.edges.filter((edge) => edge.id !== edgeId),
571
- metadata: buildMetadata(workflowState.metadata)
572
+ metadata: buildMetadata(workflowState.metadata),
572
573
  };
573
- notifyWorkflowChange('edge_remove');
574
+ notifyWorkflowChange("edge_remove");
574
575
  },
575
576
  /**
576
577
  * Update a specific node
@@ -578,15 +579,15 @@ export const workflowActions = {
578
579
  * Used for config changes. Pushes to history for undo support.
579
580
  */
580
581
  updateNode: (nodeId, updates) => {
581
- pushToHistory('Update node config');
582
+ pushToHistory("Update node config");
582
583
  if (!workflowState)
583
584
  return;
584
585
  workflowState = {
585
586
  ...workflowState,
586
587
  nodes: workflowState.nodes.map((node) => node.id === nodeId ? { ...node, ...updates } : node),
587
- metadata: buildMetadata(workflowState.metadata)
588
+ metadata: buildMetadata(workflowState.metadata),
588
589
  };
589
- notifyWorkflowChange('node_config');
590
+ notifyWorkflowChange("node_config");
590
591
  },
591
592
  /**
592
593
  * Clear the workflow
@@ -610,9 +611,9 @@ export const workflowActions = {
610
611
  return;
611
612
  workflowState = {
612
613
  ...workflowState,
613
- metadata: buildMetadata(workflowState.metadata, metadata)
614
+ metadata: buildMetadata(workflowState.metadata, metadata),
614
615
  };
615
- notifyWorkflowChange('metadata');
616
+ notifyWorkflowChange("metadata");
616
617
  },
617
618
  /**
618
619
  * Batch update nodes and edges
@@ -621,7 +622,7 @@ export const workflowActions = {
621
622
  * Creates a single history entry for the entire batch.
622
623
  */
623
624
  batchUpdate: (updates) => {
624
- pushToHistory('Batch update');
625
+ pushToHistory("Batch update");
625
626
  if (!workflowState)
626
627
  return;
627
628
  workflowState = {
@@ -629,10 +630,12 @@ export const workflowActions = {
629
630
  ...(updates.nodes && { nodes: updates.nodes }),
630
631
  ...(updates.edges && { edges: updates.edges }),
631
632
  ...(updates.name && { name: updates.name }),
632
- ...(updates.description !== undefined && { description: updates.description }),
633
- metadata: buildMetadata(workflowState.metadata, updates.metadata ?? undefined)
633
+ ...(updates.description !== undefined && {
634
+ description: updates.description,
635
+ }),
636
+ metadata: buildMetadata(workflowState.metadata, updates.metadata ?? undefined),
634
637
  };
635
- notifyWorkflowChange('metadata');
638
+ notifyWorkflowChange("metadata");
636
639
  },
637
640
  /**
638
641
  * Push current state to history manually
@@ -645,5 +648,5 @@ export const workflowActions = {
645
648
  */
646
649
  pushHistory: (description, workflow) => {
647
650
  pushToHistory(description, workflow);
648
- }
651
+ },
649
652
  };
@@ -3,47 +3,50 @@
3
3
  matching how overlay components (e.g. CanvasBanner) appear in the workflow editor.
4
4
  -->
5
5
  <script lang="ts">
6
- import { SvelteFlow, Controls } from '@xyflow/svelte';
7
- import type { ColorMode } from '@xyflow/svelte';
8
- import '@xyflow/svelte/dist/style.css';
9
- import type { Snippet } from 'svelte';
6
+ import { SvelteFlow, Controls } from "@xyflow/svelte";
7
+ import type { ColorMode } from "@xyflow/svelte";
8
+ import "@xyflow/svelte/dist/style.css";
9
+ import type { Snippet } from "svelte";
10
10
 
11
- let { children }: { children: Snippet } = $props();
11
+ let { children }: { children: Snippet } = $props();
12
12
 
13
- // Watch the data-theme attribute set by Storybook's addon-themes
14
- let colorMode = $state<ColorMode>(
15
- (document.documentElement.getAttribute('data-theme') as ColorMode) || 'light'
16
- );
13
+ // Watch the data-theme attribute set by Storybook's addon-themes
14
+ let colorMode = $state<ColorMode>(
15
+ (document.documentElement.getAttribute("data-theme") as ColorMode) ||
16
+ "light",
17
+ );
17
18
 
18
- $effect(() => {
19
- const observer = new MutationObserver(() => {
20
- colorMode = (document.documentElement.getAttribute('data-theme') as ColorMode) || 'light';
21
- });
22
- observer.observe(document.documentElement, {
23
- attributes: true,
24
- attributeFilter: ['data-theme']
25
- });
26
- return () => observer.disconnect();
27
- });
19
+ $effect(() => {
20
+ const observer = new MutationObserver(() => {
21
+ colorMode =
22
+ (document.documentElement.getAttribute("data-theme") as ColorMode) ||
23
+ "light";
24
+ });
25
+ observer.observe(document.documentElement, {
26
+ attributes: true,
27
+ attributeFilter: ["data-theme"],
28
+ });
29
+ return () => observer.disconnect();
30
+ });
28
31
  </script>
29
32
 
30
33
  <div class="canvas-decorator-wrapper">
31
- <SvelteFlow nodes={[]} edges={[]} {colorMode}>
32
- <Controls />
33
- {@render children()}
34
- </SvelteFlow>
34
+ <SvelteFlow nodes={[]} edges={[]} {colorMode}>
35
+ <Controls />
36
+ {@render children()}
37
+ </SvelteFlow>
35
38
  </div>
36
39
 
37
40
  <style>
38
- .canvas-decorator-wrapper {
39
- width: 800px;
40
- height: 400px;
41
- position: relative;
42
- }
41
+ .canvas-decorator-wrapper {
42
+ width: 800px;
43
+ height: 400px;
44
+ position: relative;
45
+ }
43
46
 
44
- /* Fix: SvelteFlow's scoped styles use non-prefixed --background-color-default
47
+ /* Fix: SvelteFlow's scoped styles use non-prefixed --background-color-default
45
48
  which doesn't update with colorMode="dark". Map the --xy- themed value. */
46
- .canvas-decorator-wrapper :global(.svelte-flow.dark) {
47
- --background-color-default: var(--xy-background-color-default);
48
- }
49
+ .canvas-decorator-wrapper :global(.svelte-flow.dark) {
50
+ --background-color-default: var(--xy-background-color-default);
51
+ }
49
52
  </style>
@@ -1,5 +1,5 @@
1
- import '@xyflow/svelte/dist/style.css';
2
- import type { Snippet } from 'svelte';
1
+ import "@xyflow/svelte/dist/style.css";
2
+ import type { Snippet } from "svelte";
3
3
  type $$ComponentProps = {
4
4
  children: Snippet;
5
5
  };
@@ -0,0 +1,125 @@
1
+ <!--
2
+ EdgeDecorator: Renders two connected nodes inside a SvelteFlow canvas
3
+ to showcase edge rendering with arrowhead markers.
4
+ -->
5
+ <script lang="ts">
6
+ import { SvelteFlow, Controls, MarkerType } from "@xyflow/svelte";
7
+ import type { Node, Edge, ColorMode } from "@xyflow/svelte";
8
+ import "@xyflow/svelte/dist/style.css";
9
+ import UniversalNode from "../components/UniversalNode.svelte";
10
+ import FlowDropEdge from "../components/FlowDropEdge.svelte";
11
+ import { registerBuiltinNodes } from "../registry/builtinNodes.js";
12
+ import { EDGE_MARKER_SIZES } from "../config/constants.js";
13
+
14
+ interface Props {
15
+ sourceData: Record<string, unknown>;
16
+ targetData: Record<string, unknown>;
17
+ edgeStyle?: string;
18
+ edgeClass?: string;
19
+ edgeMarkerColor?: string;
20
+ edgeMarkerSize?: { width: number; height: number };
21
+ sourceHandleId?: string;
22
+ targetHandleId?: string;
23
+ }
24
+
25
+ let {
26
+ sourceData,
27
+ targetData,
28
+ edgeStyle = "stroke: #64748b;",
29
+ edgeClass = "flowdrop--edge--data",
30
+ edgeMarkerColor = "#64748b",
31
+ edgeMarkerSize = EDGE_MARKER_SIZES.data,
32
+ sourceHandleId = "output",
33
+ targetHandleId = "input",
34
+ }: Props = $props();
35
+
36
+ registerBuiltinNodes();
37
+
38
+ const nodeTypes = {
39
+ universalNode: UniversalNode,
40
+ };
41
+
42
+ const edgeTypes = {
43
+ default: FlowDropEdge,
44
+ };
45
+
46
+ const SOURCE_ID = "source-node";
47
+ const TARGET_ID = "target-node";
48
+
49
+ let nodes = $state<Node[]>([
50
+ {
51
+ id: SOURCE_ID,
52
+ type: "universalNode",
53
+ position: { x: 0, y: 0 },
54
+ data: { ...sourceData, nodeId: SOURCE_ID },
55
+ },
56
+ {
57
+ id: TARGET_ID,
58
+ type: "universalNode",
59
+ position: { x: 350, y: 0 },
60
+ data: { ...targetData, nodeId: TARGET_ID },
61
+ },
62
+ ]);
63
+
64
+ // Handle IDs follow the format: {nodeId}-{input|output}-{portId}
65
+ let edges = $state<Edge[]>([
66
+ {
67
+ id: "edge-1",
68
+ source: SOURCE_ID,
69
+ target: TARGET_ID,
70
+ sourceHandle: `${SOURCE_ID}-output-${sourceHandleId}`,
71
+ targetHandle: `${TARGET_ID}-input-${targetHandleId}`,
72
+ style: edgeStyle,
73
+ class: edgeClass,
74
+ markerEnd: {
75
+ type: MarkerType.ArrowClosed,
76
+ ...edgeMarkerSize,
77
+ color: edgeMarkerColor,
78
+ },
79
+ },
80
+ ]);
81
+
82
+ let colorMode = $state<ColorMode>(
83
+ (document.documentElement.getAttribute("data-theme") as ColorMode) ||
84
+ "light",
85
+ );
86
+
87
+ $effect(() => {
88
+ const observer = new MutationObserver(() => {
89
+ colorMode =
90
+ (document.documentElement.getAttribute("data-theme") as ColorMode) ||
91
+ "light";
92
+ });
93
+ observer.observe(document.documentElement, {
94
+ attributes: true,
95
+ attributeFilter: ["data-theme"],
96
+ });
97
+ return () => observer.disconnect();
98
+ });
99
+ </script>
100
+
101
+ <div class="edge-decorator-wrapper">
102
+ <SvelteFlow
103
+ bind:nodes
104
+ bind:edges
105
+ {nodeTypes}
106
+ {edgeTypes}
107
+ fitView
108
+ fitViewOptions={{ maxZoom: 0.85, padding: 0.3 }}
109
+ {colorMode}
110
+ >
111
+ <Controls />
112
+ </SvelteFlow>
113
+ </div>
114
+
115
+ <style>
116
+ .edge-decorator-wrapper {
117
+ width: 900px;
118
+ height: 400px;
119
+ position: relative;
120
+ }
121
+
122
+ .edge-decorator-wrapper :global(.svelte-flow.dark) {
123
+ --background-color-default: var(--xy-background-color-default);
124
+ }
125
+ </style>
@@ -0,0 +1,17 @@
1
+ import "@xyflow/svelte/dist/style.css";
2
+ interface Props {
3
+ sourceData: Record<string, unknown>;
4
+ targetData: Record<string, unknown>;
5
+ edgeStyle?: string;
6
+ edgeClass?: string;
7
+ edgeMarkerColor?: string;
8
+ edgeMarkerSize?: {
9
+ width: number;
10
+ height: number;
11
+ };
12
+ sourceHandleId?: string;
13
+ targetHandleId?: string;
14
+ }
15
+ declare const EdgeDecorator: import("svelte").Component<Props, {}, "">;
16
+ type EdgeDecorator = ReturnType<typeof EdgeDecorator>;
17
+ export default EdgeDecorator;
@@ -3,71 +3,77 @@
3
3
  inside a canvas, matching how they appear in the workflow editor.
4
4
  -->
5
5
  <script lang="ts">
6
- import { SvelteFlow, Controls } from '@xyflow/svelte';
7
- import type { Node, ColorMode } from '@xyflow/svelte';
8
- import '@xyflow/svelte/dist/style.css';
9
- import UniversalNode from '../components/UniversalNode.svelte';
10
- import { registerBuiltinNodes } from '../registry/builtinNodes.js';
6
+ import { SvelteFlow, Controls } from "@xyflow/svelte";
7
+ import type { Node, ColorMode } from "@xyflow/svelte";
8
+ import "@xyflow/svelte/dist/style.css";
9
+ import UniversalNode from "../components/UniversalNode.svelte";
10
+ import { registerBuiltinNodes } from "../registry/builtinNodes.js";
11
11
 
12
- let { data, selected = false }: { data: Record<string, unknown>; selected?: boolean } = $props();
12
+ let {
13
+ data,
14
+ selected = false,
15
+ }: { data: Record<string, unknown>; selected?: boolean } = $props();
13
16
 
14
- // Ensure built-in node components are registered
15
- registerBuiltinNodes();
17
+ // Ensure built-in node components are registered
18
+ registerBuiltinNodes();
16
19
 
17
- const nodeTypes = {
18
- universalNode: UniversalNode
19
- };
20
+ const nodeTypes = {
21
+ universalNode: UniversalNode,
22
+ };
20
23
 
21
- let nodes = $derived<Node[]>([
22
- {
23
- id: 'story-node',
24
- type: 'universalNode',
25
- position: { x: 0, y: 0 },
26
- selected,
27
- data
28
- }
29
- ]);
24
+ let nodes = $derived<Node[]>([
25
+ {
26
+ id: "story-node",
27
+ type: "universalNode",
28
+ position: { x: 0, y: 0 },
29
+ selected,
30
+ data,
31
+ },
32
+ ]);
30
33
 
31
- // Watch the data-theme attribute set by Storybook's addon-themes
32
- let colorMode = $state<ColorMode>(
33
- (document.documentElement.getAttribute('data-theme') as ColorMode) || 'light'
34
- );
34
+ // Watch the data-theme attribute set by Storybook's addon-themes
35
+ let colorMode = $state<ColorMode>(
36
+ (document.documentElement.getAttribute("data-theme") as ColorMode) ||
37
+ "light",
38
+ );
35
39
 
36
- $effect(() => {
37
- const observer = new MutationObserver(() => {
38
- colorMode = (document.documentElement.getAttribute('data-theme') as ColorMode) || 'light';
39
- });
40
- observer.observe(document.documentElement, {
41
- attributes: true,
42
- attributeFilter: ['data-theme']
43
- });
44
- return () => observer.disconnect();
45
- });
40
+ $effect(() => {
41
+ const observer = new MutationObserver(() => {
42
+ colorMode =
43
+ (document.documentElement.getAttribute("data-theme") as ColorMode) ||
44
+ "light";
45
+ });
46
+ observer.observe(document.documentElement, {
47
+ attributes: true,
48
+ attributeFilter: ["data-theme"],
49
+ });
50
+ return () => observer.disconnect();
51
+ });
46
52
  </script>
47
53
 
48
54
  <div class="node-decorator-wrapper">
49
- <SvelteFlow
50
- {nodes}
51
- edges={[]}
52
- {nodeTypes}
53
- fitView
54
- fitViewOptions={{ maxZoom: 0.85, padding: 0.2 }}
55
- {colorMode}
56
- >
57
- <Controls />
58
- </SvelteFlow>
55
+ <SvelteFlow
56
+ {nodes}
57
+ edges={[]}
58
+ {nodeTypes}
59
+ fitView
60
+ fitViewOptions={{ maxZoom: 0.85, padding: 0.2 }}
61
+ {colorMode}
62
+ >
63
+ <Controls />
64
+ </SvelteFlow>
59
65
  </div>
60
66
 
61
67
  <style>
62
- .node-decorator-wrapper {
63
- width: 800px;
64
- height: 400px;
65
- position: relative;
66
- }
68
+ .node-decorator-wrapper {
69
+ width: 800px;
70
+ height: 400px;
71
+ position: relative;
72
+ }
67
73
 
68
- /* Fix: SvelteFlow's scoped styles use non-prefixed --background-color-default
74
+ /* Fix: SvelteFlow's scoped styles use non-prefixed --background-color-default
69
75
  which doesn't update with colorMode="dark". Map the --xy- themed value. */
70
- .node-decorator-wrapper :global(.svelte-flow.dark) {
71
- --background-color-default: var(--xy-background-color-default);
72
- }
76
+ .node-decorator-wrapper :global(.svelte-flow.dark) {
77
+ --background-color-default: var(--xy-background-color-default);
78
+ }
73
79
  </style>
@@ -1,4 +1,4 @@
1
- import '@xyflow/svelte/dist/style.css';
1
+ import "@xyflow/svelte/dist/style.css";
2
2
  type $$ComponentProps = {
3
3
  data: Record<string, unknown>;
4
4
  selected?: boolean;