@flowdrop/flowdrop 1.4.0 → 1.6.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 (441) hide show
  1. package/README.md +94 -51
  2. package/dist/adapters/WorkflowAdapter.d.ts +1 -1
  3. package/dist/adapters/WorkflowAdapter.js +27 -47
  4. package/dist/adapters/agentspec/AgentSpecAdapter.d.ts +2 -2
  5. package/dist/adapters/agentspec/AgentSpecAdapter.js +122 -133
  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 +52 -6
  9. package/dist/adapters/agentspec/autoLayout.js +118 -23
  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 +20 -22
  18. package/dist/api/enhanced-client.d.ts +3 -3
  19. package/dist/api/enhanced-client.js +72 -73
  20. package/dist/chat/commandClassifier.d.ts +19 -0
  21. package/dist/chat/commandClassifier.js +30 -0
  22. package/dist/chat/index.d.ts +27 -0
  23. package/dist/chat/index.js +32 -0
  24. package/dist/chat/responseParser.d.ts +21 -0
  25. package/dist/chat/responseParser.js +91 -0
  26. package/dist/commands/batch.d.ts +18 -0
  27. package/dist/commands/batch.js +54 -0
  28. package/dist/commands/executor.d.ts +37 -0
  29. package/dist/commands/executor.js +1133 -0
  30. package/dist/commands/index.d.ts +14 -0
  31. package/dist/commands/index.js +17 -0
  32. package/dist/commands/parser.d.ts +16 -0
  33. package/dist/commands/parser.js +295 -0
  34. package/dist/commands/positioner.d.ts +19 -0
  35. package/dist/commands/positioner.js +33 -0
  36. package/dist/commands/storeIntegration.svelte.d.ts +16 -0
  37. package/dist/commands/storeIntegration.svelte.js +67 -0
  38. package/dist/commands/types.d.ts +343 -0
  39. package/dist/commands/types.js +45 -0
  40. package/dist/components/App.svelte +522 -237
  41. package/dist/components/App.svelte.d.ts +11 -8
  42. package/dist/components/CanvasBanner.stories.svelte +10 -16
  43. package/dist/components/CanvasBanner.stories.svelte.d.ts +1 -1
  44. package/dist/components/CanvasBanner.svelte +2 -2
  45. package/dist/components/CanvasBanner.svelte.d.ts +1 -1
  46. package/dist/components/CanvasController.svelte +37 -0
  47. package/dist/components/CanvasController.svelte.d.ts +32 -0
  48. package/dist/components/ConfigForm.svelte +118 -256
  49. package/dist/components/ConfigForm.svelte.d.ts +2 -2
  50. package/dist/components/ConfigMappingRow.svelte +128 -0
  51. package/dist/components/ConfigMappingRow.svelte.d.ts +8 -0
  52. package/dist/components/ConfigModal.svelte +3 -3
  53. package/dist/components/ConfigModal.svelte.d.ts +1 -1
  54. package/dist/components/ConfigPanel.stories.svelte +19 -19
  55. package/dist/components/ConfigPanel.stories.svelte.d.ts +1 -1
  56. package/dist/components/ConfigPanel.svelte +57 -19
  57. package/dist/components/ConfigPanel.svelte.d.ts +3 -1
  58. package/dist/components/ConnectionLine.svelte +4 -4
  59. package/dist/components/EdgeRefresher.svelte +1 -1
  60. package/dist/components/FlowDropEdge.stories.svelte +110 -110
  61. package/dist/components/FlowDropEdge.svelte +11 -19
  62. package/dist/components/FlowDropEdge.svelte.d.ts +1 -1
  63. package/dist/components/FlowDropZone.svelte +6 -9
  64. package/dist/components/FlowDropZone.svelte.d.ts +1 -1
  65. package/dist/components/LoadingSpinner.stories.svelte +13 -13
  66. package/dist/components/LoadingSpinner.stories.svelte.d.ts +1 -1
  67. package/dist/components/LoadingSpinner.svelte +3 -3
  68. package/dist/components/LoadingSpinner.svelte.d.ts +1 -1
  69. package/dist/components/Logo.stories.svelte +4 -4
  70. package/dist/components/Logo.stories.svelte.d.ts +1 -1
  71. package/dist/components/Logo.svelte +3 -9
  72. package/dist/components/LogsSidebar.svelte +46 -53
  73. package/dist/components/LogsSidebar.svelte.d.ts +1 -1
  74. package/dist/components/MarkdownDisplay.stories.svelte +10 -14
  75. package/dist/components/MarkdownDisplay.stories.svelte.d.ts +1 -1
  76. package/dist/components/MarkdownDisplay.svelte +4 -6
  77. package/dist/components/Navbar.stories.svelte +19 -19
  78. package/dist/components/Navbar.stories.svelte.d.ts +1 -1
  79. package/dist/components/Navbar.svelte +28 -49
  80. package/dist/components/Navbar.svelte.d.ts +2 -2
  81. package/dist/components/NodeSidebar.svelte +55 -135
  82. package/dist/components/NodeSidebar.svelte.d.ts +1 -1
  83. package/dist/components/NodeStatusOverlay.stories.svelte +19 -31
  84. package/dist/components/NodeStatusOverlay.stories.svelte.d.ts +1 -1
  85. package/dist/components/NodeStatusOverlay.svelte +40 -55
  86. package/dist/components/NodeStatusOverlay.svelte.d.ts +3 -3
  87. package/dist/components/NodeSwapPicker.svelte +493 -0
  88. package/dist/components/NodeSwapPicker.svelte.d.ts +16 -0
  89. package/dist/components/PipelineStatus.svelte +63 -89
  90. package/dist/components/PipelineStatus.svelte.d.ts +4 -4
  91. package/dist/components/PortCoordinateTracker.svelte +5 -7
  92. package/dist/components/PortCoordinateTracker.svelte.d.ts +1 -1
  93. package/dist/components/PortMappingRow.svelte +205 -0
  94. package/dist/components/PortMappingRow.svelte.d.ts +12 -0
  95. package/dist/components/ReadOnlyDetails.svelte +1 -1
  96. package/dist/components/SchemaForm.stories.svelte +53 -53
  97. package/dist/components/SchemaForm.stories.svelte.d.ts +1 -1
  98. package/dist/components/SchemaForm.svelte +24 -51
  99. package/dist/components/SchemaForm.svelte.d.ts +2 -2
  100. package/dist/components/SettingsModal.svelte +6 -9
  101. package/dist/components/SettingsModal.svelte.d.ts +1 -1
  102. package/dist/components/SettingsPanel.svelte +138 -158
  103. package/dist/components/SettingsPanel.svelte.d.ts +1 -1
  104. package/dist/components/StatusIcon.stories.svelte +16 -29
  105. package/dist/components/StatusIcon.stories.svelte.d.ts +1 -1
  106. package/dist/components/StatusIcon.svelte +19 -19
  107. package/dist/components/StatusIcon.svelte.d.ts +2 -2
  108. package/dist/components/StatusLabel.stories.svelte +8 -8
  109. package/dist/components/StatusLabel.stories.svelte.d.ts +1 -1
  110. package/dist/components/SwapMappingEditor.svelte +529 -0
  111. package/dist/components/SwapMappingEditor.svelte.d.ts +12 -0
  112. package/dist/components/ThemeToggle.stories.svelte +10 -10
  113. package/dist/components/ThemeToggle.stories.svelte.d.ts +1 -1
  114. package/dist/components/ThemeToggle.svelte +22 -33
  115. package/dist/components/ThemeToggle.svelte.d.ts +1 -1
  116. package/dist/components/UniversalNode.svelte +29 -41
  117. package/dist/components/UniversalNode.svelte.d.ts +3 -3
  118. package/dist/components/WorkflowEditor.svelte +210 -170
  119. package/dist/components/WorkflowEditor.svelte.d.ts +12 -4
  120. package/dist/components/chat/AIChatPanel.svelte +797 -0
  121. package/dist/components/chat/AIChatPanel.svelte.d.ts +13 -0
  122. package/dist/components/chat/CommandPreview.svelte +234 -0
  123. package/dist/components/chat/CommandPreview.svelte.d.ts +9 -0
  124. package/dist/components/console/CommandConsole.stories.svelte +111 -0
  125. package/dist/components/console/CommandConsole.stories.svelte.d.ts +27 -0
  126. package/dist/components/console/CommandConsole.svelte +263 -0
  127. package/dist/components/console/CommandConsole.svelte.d.ts +11 -0
  128. package/dist/components/console/ConsoleAutocomplete.svelte +142 -0
  129. package/dist/components/console/ConsoleAutocomplete.svelte.d.ts +21 -0
  130. package/dist/components/console/ConsoleInput.svelte +771 -0
  131. package/dist/components/console/ConsoleInput.svelte.d.ts +16 -0
  132. package/dist/components/console/ConsoleOutput.svelte +116 -0
  133. package/dist/components/console/ConsoleOutput.svelte.d.ts +11 -0
  134. package/dist/components/console/formatters.d.ts +26 -0
  135. package/dist/components/console/formatters.js +116 -0
  136. package/dist/components/form/FormArray.svelte +75 -132
  137. package/dist/components/form/FormArray.svelte.d.ts +1 -1
  138. package/dist/components/form/FormAutocomplete.svelte +65 -108
  139. package/dist/components/form/FormAutocomplete.svelte.d.ts +1 -1
  140. package/dist/components/form/FormCheckboxGroup.stories.svelte +13 -16
  141. package/dist/components/form/FormCheckboxGroup.stories.svelte.d.ts +1 -1
  142. package/dist/components/form/FormCheckboxGroup.svelte +2 -2
  143. package/dist/components/form/FormCodeEditor.svelte +42 -56
  144. package/dist/components/form/FormField.svelte +79 -90
  145. package/dist/components/form/FormField.svelte.d.ts +2 -2
  146. package/dist/components/form/FormFieldLight.svelte +72 -88
  147. package/dist/components/form/FormFieldLight.svelte.d.ts +1 -1
  148. package/dist/components/form/FormFieldWrapper.stories.svelte +14 -14
  149. package/dist/components/form/FormFieldWrapper.stories.svelte.d.ts +1 -1
  150. package/dist/components/form/FormFieldWrapper.svelte +2 -9
  151. package/dist/components/form/FormFieldWrapper.svelte.d.ts +1 -1
  152. package/dist/components/form/FormFieldset.svelte +3 -3
  153. package/dist/components/form/FormFieldset.svelte.d.ts +2 -2
  154. package/dist/components/form/FormMarkdownEditor.svelte +123 -156
  155. package/dist/components/form/FormNumberField.stories.svelte +18 -18
  156. package/dist/components/form/FormNumberField.stories.svelte.d.ts +1 -1
  157. package/dist/components/form/FormNumberField.svelte +6 -6
  158. package/dist/components/form/FormRangeField.stories.svelte +13 -13
  159. package/dist/components/form/FormRangeField.stories.svelte.d.ts +1 -1
  160. package/dist/components/form/FormRangeField.svelte +4 -12
  161. package/dist/components/form/FormSelect.stories.svelte +21 -21
  162. package/dist/components/form/FormSelect.stories.svelte.d.ts +1 -1
  163. package/dist/components/form/FormSelect.svelte +5 -5
  164. package/dist/components/form/FormSelect.svelte.d.ts +1 -1
  165. package/dist/components/form/FormTemplateEditor.svelte +126 -175
  166. package/dist/components/form/FormTemplateEditor.svelte.d.ts +1 -1
  167. package/dist/components/form/FormTextField.stories.svelte +17 -23
  168. package/dist/components/form/FormTextField.stories.svelte.d.ts +1 -1
  169. package/dist/components/form/FormTextField.svelte +4 -4
  170. package/dist/components/form/FormTextarea.stories.svelte +18 -21
  171. package/dist/components/form/FormTextarea.stories.svelte.d.ts +1 -1
  172. package/dist/components/form/FormTextarea.svelte +4 -4
  173. package/dist/components/form/FormToggle.stories.svelte +13 -16
  174. package/dist/components/form/FormToggle.stories.svelte.d.ts +1 -1
  175. package/dist/components/form/FormToggle.svelte +3 -3
  176. package/dist/components/form/FormUISchemaRenderer.svelte +12 -19
  177. package/dist/components/form/FormUISchemaRenderer.svelte.d.ts +3 -3
  178. package/dist/components/form/index.d.ts +19 -19
  179. package/dist/components/form/index.js +18 -18
  180. package/dist/components/form/templateAutocomplete.d.ts +2 -2
  181. package/dist/components/form/templateAutocomplete.js +55 -64
  182. package/dist/components/form/types.d.ts +6 -6
  183. package/dist/components/form/types.js +4 -9
  184. package/dist/components/icons/AlertCircleIcon.svelte +1 -6
  185. package/dist/components/icons/CogIcon.svelte +1 -6
  186. package/dist/components/interrupt/ChoicePrompt.stories.svelte +27 -27
  187. package/dist/components/interrupt/ChoicePrompt.stories.svelte.d.ts +1 -1
  188. package/dist/components/interrupt/ChoicePrompt.svelte +17 -41
  189. package/dist/components/interrupt/ChoicePrompt.svelte.d.ts +1 -1
  190. package/dist/components/interrupt/ConfirmationPrompt.stories.svelte +17 -17
  191. package/dist/components/interrupt/ConfirmationPrompt.stories.svelte.d.ts +1 -1
  192. package/dist/components/interrupt/ConfirmationPrompt.svelte +10 -16
  193. package/dist/components/interrupt/ConfirmationPrompt.svelte.d.ts +1 -1
  194. package/dist/components/interrupt/FormPrompt.svelte +10 -15
  195. package/dist/components/interrupt/FormPrompt.svelte.d.ts +1 -1
  196. package/dist/components/interrupt/InterruptBubble.svelte +87 -121
  197. package/dist/components/interrupt/InterruptBubble.svelte.d.ts +2 -2
  198. package/dist/components/interrupt/ReviewPrompt.stories.svelte +37 -37
  199. package/dist/components/interrupt/ReviewPrompt.stories.svelte.d.ts +1 -1
  200. package/dist/components/interrupt/ReviewPrompt.svelte +55 -75
  201. package/dist/components/interrupt/ReviewPrompt.svelte.d.ts +1 -1
  202. package/dist/components/interrupt/TextInputPrompt.stories.svelte +16 -17
  203. package/dist/components/interrupt/TextInputPrompt.stories.svelte.d.ts +1 -1
  204. package/dist/components/interrupt/TextInputPrompt.svelte +13 -18
  205. package/dist/components/interrupt/TextInputPrompt.svelte.d.ts +1 -1
  206. package/dist/components/interrupt/index.d.ts +6 -5
  207. package/dist/components/interrupt/index.js +6 -5
  208. package/dist/components/layouts/MainLayout.svelte +46 -84
  209. package/dist/components/layouts/MainLayout.svelte.d.ts +6 -6
  210. package/dist/components/nodes/GatewayNode.stories.svelte +64 -65
  211. package/dist/components/nodes/GatewayNode.svelte +37 -70
  212. package/dist/components/nodes/GatewayNode.svelte.d.ts +3 -3
  213. package/dist/components/nodes/IdeaNode.stories.svelte +25 -26
  214. package/dist/components/nodes/IdeaNode.svelte +22 -36
  215. package/dist/components/nodes/IdeaNode.svelte.d.ts +1 -1
  216. package/dist/components/nodes/NotesNode.stories.svelte +37 -38
  217. package/dist/components/nodes/NotesNode.svelte +28 -39
  218. package/dist/components/nodes/NotesNode.svelte.d.ts +1 -1
  219. package/dist/components/nodes/SimpleNode.stories.svelte +137 -138
  220. package/dist/components/nodes/SimpleNode.svelte +44 -74
  221. package/dist/components/nodes/SimpleNode.svelte.d.ts +1 -1
  222. package/dist/components/nodes/SquareNode.stories.svelte +75 -75
  223. package/dist/components/nodes/SquareNode.svelte +42 -68
  224. package/dist/components/nodes/SquareNode.svelte.d.ts +1 -1
  225. package/dist/components/nodes/TerminalNode.stories.svelte +10 -10
  226. package/dist/components/nodes/TerminalNode.svelte +74 -112
  227. package/dist/components/nodes/TerminalNode.svelte.d.ts +1 -1
  228. package/dist/components/nodes/ToolNode.stories.svelte +115 -116
  229. package/dist/components/nodes/ToolNode.svelte +31 -64
  230. package/dist/components/nodes/ToolNode.svelte.d.ts +1 -1
  231. package/dist/components/nodes/WorkflowNode.stories.svelte +84 -89
  232. package/dist/components/nodes/WorkflowNode.svelte +50 -103
  233. package/dist/components/nodes/WorkflowNode.svelte.d.ts +3 -3
  234. package/dist/components/playground/ChatPanel.svelte +47 -103
  235. package/dist/components/playground/ExecutionLogs.svelte +45 -68
  236. package/dist/components/playground/InputCollector.svelte +32 -51
  237. package/dist/components/playground/MessageBubble.stories.svelte +25 -25
  238. package/dist/components/playground/MessageBubble.stories.svelte.d.ts +1 -1
  239. package/dist/components/playground/MessageBubble.svelte +54 -70
  240. package/dist/components/playground/MessageBubble.svelte.d.ts +1 -1
  241. package/dist/components/playground/Playground.svelte +60 -91
  242. package/dist/components/playground/Playground.svelte.d.ts +3 -3
  243. package/dist/components/playground/PlaygroundModal.svelte +8 -12
  244. package/dist/components/playground/PlaygroundModal.svelte.d.ts +3 -3
  245. package/dist/components/playground/SessionManager.svelte +34 -40
  246. package/dist/components/playground/SessionManager.svelte.d.ts +1 -1
  247. package/dist/config/agentSpecEndpoints.d.ts +1 -1
  248. package/dist/config/agentSpecEndpoints.js +20 -20
  249. package/dist/config/constants.js +2 -2
  250. package/dist/config/defaultCategories.d.ts +1 -1
  251. package/dist/config/defaultCategories.js +86 -86
  252. package/dist/config/defaultPortConfig.d.ts +1 -1
  253. package/dist/config/defaultPortConfig.js +144 -144
  254. package/dist/config/endpoints.d.ts +12 -4
  255. package/dist/config/endpoints.js +70 -65
  256. package/dist/config/runtimeConfig.d.ts +2 -2
  257. package/dist/config/runtimeConfig.js +8 -8
  258. package/dist/core/index.d.ts +68 -63
  259. package/dist/core/index.js +44 -35
  260. package/dist/display/index.d.ts +2 -2
  261. package/dist/display/index.js +2 -2
  262. package/dist/editor/index.d.ts +64 -62
  263. package/dist/editor/index.js +57 -55
  264. package/dist/form/code.d.ts +5 -5
  265. package/dist/form/code.js +14 -14
  266. package/dist/form/fieldRegistry.d.ts +3 -3
  267. package/dist/form/fieldRegistry.js +9 -11
  268. package/dist/form/full.d.ts +8 -8
  269. package/dist/form/full.js +9 -9
  270. package/dist/form/index.d.ts +18 -18
  271. package/dist/form/index.js +16 -16
  272. package/dist/form/markdown.d.ts +4 -4
  273. package/dist/form/markdown.js +8 -8
  274. package/dist/helpers/proximityConnect.d.ts +3 -3
  275. package/dist/helpers/proximityConnect.js +40 -35
  276. package/dist/helpers/workflowEditorHelper.d.ts +8 -58
  277. package/dist/helpers/workflowEditorHelper.js +73 -292
  278. package/dist/index.d.ts +6 -6
  279. package/dist/index.js +6 -6
  280. package/dist/mocks/app-environment.js +2 -2
  281. package/dist/mocks/app-forms.js +1 -1
  282. package/dist/mocks/app-navigation.js +2 -2
  283. package/dist/mocks/app-stores.js +3 -3
  284. package/dist/playground/index.d.ts +19 -19
  285. package/dist/playground/index.js +16 -16
  286. package/dist/playground/mount.d.ts +3 -3
  287. package/dist/playground/mount.js +24 -24
  288. package/dist/registry/builtinFormats.js +13 -13
  289. package/dist/registry/builtinNodes.d.ts +2 -2
  290. package/dist/registry/builtinNodes.js +77 -77
  291. package/dist/registry/index.d.ts +4 -4
  292. package/dist/registry/index.js +4 -4
  293. package/dist/registry/nodeComponentRegistry.d.ts +8 -8
  294. package/dist/registry/nodeComponentRegistry.js +9 -11
  295. package/dist/registry/plugin.d.ts +2 -2
  296. package/dist/registry/plugin.js +11 -11
  297. package/dist/registry/workflowFormatRegistry.d.ts +3 -3
  298. package/dist/registry/workflowFormatRegistry.js +2 -2
  299. package/dist/schema/index.d.ts +1 -1
  300. package/dist/schema/index.js +2 -2
  301. package/dist/schemas/v1/workflow.schema.json +107 -22
  302. package/dist/services/agentSpecExecutionService.d.ts +3 -3
  303. package/dist/services/agentSpecExecutionService.js +55 -56
  304. package/dist/services/api.d.ts +2 -2
  305. package/dist/services/api.js +37 -37
  306. package/dist/services/apiVariableService.d.ts +1 -1
  307. package/dist/services/apiVariableService.js +34 -41
  308. package/dist/services/autoSaveService.js +8 -8
  309. package/dist/services/categoriesApi.d.ts +2 -2
  310. package/dist/services/categoriesApi.js +8 -8
  311. package/dist/services/chatService.d.ts +65 -0
  312. package/dist/services/chatService.js +131 -0
  313. package/dist/services/draftStorage.d.ts +1 -1
  314. package/dist/services/draftStorage.js +11 -11
  315. package/dist/services/dynamicSchemaService.d.ts +1 -1
  316. package/dist/services/dynamicSchemaService.js +39 -41
  317. package/dist/services/globalSave.d.ts +2 -2
  318. package/dist/services/globalSave.js +38 -41
  319. package/dist/services/historyService.d.ts +7 -5
  320. package/dist/services/historyService.js +29 -14
  321. package/dist/services/interruptService.d.ts +1 -1
  322. package/dist/services/interruptService.js +29 -35
  323. package/dist/services/nodeExecutionService.d.ts +1 -1
  324. package/dist/services/nodeExecutionService.js +44 -45
  325. package/dist/services/playgroundService.d.ts +1 -1
  326. package/dist/services/playgroundService.js +29 -29
  327. package/dist/services/portConfigApi.d.ts +2 -2
  328. package/dist/services/portConfigApi.js +8 -8
  329. package/dist/services/settingsService.d.ts +2 -2
  330. package/dist/services/settingsService.js +19 -25
  331. package/dist/services/toastService.d.ts +4 -4
  332. package/dist/services/toastService.js +33 -33
  333. package/dist/services/variableService.d.ts +1 -1
  334. package/dist/services/variableService.js +36 -36
  335. package/dist/services/workflowStorage.d.ts +2 -2
  336. package/dist/services/workflowStorage.js +13 -13
  337. package/dist/settings/index.d.ts +7 -7
  338. package/dist/settings/index.js +6 -6
  339. package/dist/skins/default.d.ts +1 -1
  340. package/dist/skins/default.js +1 -1
  341. package/dist/skins/index.d.ts +3 -3
  342. package/dist/skins/index.js +7 -7
  343. package/dist/skins/slate.d.ts +1 -1
  344. package/dist/skins/slate.js +69 -69
  345. package/dist/stores/categoriesStore.svelte.d.ts +1 -1
  346. package/dist/stores/categoriesStore.svelte.js +5 -5
  347. package/dist/stores/editorStateMachine.svelte.d.ts +2 -2
  348. package/dist/stores/editorStateMachine.svelte.js +34 -34
  349. package/dist/stores/historyStore.svelte.d.ts +4 -4
  350. package/dist/stores/historyStore.svelte.js +4 -4
  351. package/dist/stores/interruptStore.svelte.d.ts +3 -3
  352. package/dist/stores/interruptStore.svelte.js +27 -22
  353. package/dist/stores/playgroundStore.svelte.d.ts +3 -3
  354. package/dist/stores/playgroundStore.svelte.js +29 -23
  355. package/dist/stores/portCoordinateStore.svelte.d.ts +6 -2
  356. package/dist/stores/portCoordinateStore.svelte.js +30 -39
  357. package/dist/stores/settingsStore.svelte.d.ts +2 -2
  358. package/dist/stores/settingsStore.svelte.js +57 -62
  359. package/dist/stores/workflowStore.svelte.d.ts +34 -5
  360. package/dist/stores/workflowStore.svelte.js +127 -108
  361. package/dist/stories/CanvasDecorator.svelte +7 -10
  362. package/dist/stories/CanvasDecorator.svelte.d.ts +2 -2
  363. package/dist/stories/EdgeDecorator.svelte +28 -31
  364. package/dist/stories/EdgeDecorator.svelte.d.ts +1 -1
  365. package/dist/stories/NodeDecorator.svelte +14 -20
  366. package/dist/stories/NodeDecorator.svelte.d.ts +1 -1
  367. package/dist/stories/utils.d.ts +2 -2
  368. package/dist/stories/utils.js +89 -93
  369. package/dist/styles/base.css +16 -50
  370. package/dist/styles/tokens.css +10 -28
  371. package/dist/svelte-app.d.ts +10 -10
  372. package/dist/svelte-app.js +39 -39
  373. package/dist/themes/default.d.ts +1 -1
  374. package/dist/themes/default.js +4 -4
  375. package/dist/themes/index.d.ts +3 -3
  376. package/dist/themes/index.js +11 -11
  377. package/dist/themes/minimal.d.ts +1 -1
  378. package/dist/themes/minimal.js +5 -5
  379. package/dist/types/agentspec.d.ts +18 -18
  380. package/dist/types/agentspec.js +2 -2
  381. package/dist/types/auth.d.ts +1 -1
  382. package/dist/types/auth.js +6 -6
  383. package/dist/types/chat.d.ts +63 -0
  384. package/dist/types/chat.js +9 -0
  385. package/dist/types/config.d.ts +6 -6
  386. package/dist/types/events.d.ts +28 -2
  387. package/dist/types/events.js +2 -1
  388. package/dist/types/index.d.ts +40 -32
  389. package/dist/types/index.js +6 -6
  390. package/dist/types/interrupt.d.ts +6 -6
  391. package/dist/types/interrupt.js +21 -21
  392. package/dist/types/interruptState.d.ts +12 -12
  393. package/dist/types/interruptState.js +66 -66
  394. package/dist/types/playground.d.ts +7 -7
  395. package/dist/types/playground.js +14 -14
  396. package/dist/types/settings.d.ts +12 -4
  397. package/dist/types/settings.js +21 -23
  398. package/dist/types/skin.d.ts +1 -1
  399. package/dist/types/theme.d.ts +2 -2
  400. package/dist/types/uischema.d.ts +4 -4
  401. package/dist/types/uischema.js +3 -3
  402. package/dist/utils/colors.d.ts +1 -1
  403. package/dist/utils/colors.js +95 -97
  404. package/dist/utils/config.d.ts +2 -2
  405. package/dist/utils/config.js +48 -48
  406. package/dist/utils/connections.d.ts +2 -2
  407. package/dist/utils/connections.js +15 -15
  408. package/dist/utils/edgeStyling.d.ts +42 -0
  409. package/dist/utils/edgeStyling.js +173 -0
  410. package/dist/utils/errors.js +3 -3
  411. package/dist/utils/fetchWithAuth.d.ts +1 -1
  412. package/dist/utils/fetchWithAuth.js +2 -2
  413. package/dist/utils/handleIds.d.ts +2 -2
  414. package/dist/utils/handleIds.js +8 -8
  415. package/dist/utils/handlePositioning.d.ts +1 -1
  416. package/dist/utils/handlePositioning.js +2 -2
  417. package/dist/utils/icons.d.ts +1 -1
  418. package/dist/utils/icons.js +74 -74
  419. package/dist/utils/logger.d.ts +1 -1
  420. package/dist/utils/logger.js +7 -7
  421. package/dist/utils/nodeIds.d.ts +31 -0
  422. package/dist/utils/nodeIds.js +42 -0
  423. package/dist/utils/nodeStatus.d.ts +1 -1
  424. package/dist/utils/nodeStatus.js +48 -48
  425. package/dist/utils/nodeSwap.d.ts +221 -0
  426. package/dist/utils/nodeSwap.js +680 -0
  427. package/dist/utils/nodeTypes.d.ts +1 -1
  428. package/dist/utils/nodeTypes.js +20 -21
  429. package/dist/utils/nodeWrapper.d.ts +7 -7
  430. package/dist/utils/nodeWrapper.js +19 -21
  431. package/dist/utils/performanceUtils.d.ts +1 -1
  432. package/dist/utils/performanceUtils.js +1 -2
  433. package/dist/utils/portUtils.d.ts +2 -2
  434. package/dist/utils/portUtils.js +1 -1
  435. package/dist/utils/sanitize.js +1 -1
  436. package/dist/utils/uischema.d.ts +2 -2
  437. package/dist/utils/uischema.js +8 -8
  438. package/dist/utils/validation.js +8 -8
  439. package/package.json +12 -11
  440. package/dist/helpers/nodeLayoutHelper.d.ts +0 -14
  441. package/dist/helpers/nodeLayoutHelper.js +0 -19
@@ -5,7 +5,7 @@
5
5
  * Loopback port name constant
6
6
  * This is the standard input port name used for loop iteration triggers
7
7
  */
8
- const LOOPBACK_PORT_NAME = "loop_back";
8
+ const LOOPBACK_PORT_NAME = 'loop_back';
9
9
  /**
10
10
  * Determines if an edge is a loopback edge.
11
11
  * Loopback edges target the special `loop_back` input port on ForEach nodes.
@@ -21,7 +21,7 @@ const LOOPBACK_PORT_NAME = "loop_back";
21
21
  * ```
22
22
  */
23
23
  export function isLoopbackEdge(edge) {
24
- const targetHandle = edge.targetHandle ?? "";
24
+ const targetHandle = edge.targetHandle ?? '';
25
25
  return targetHandle.includes(`-input-${LOOPBACK_PORT_NAME}`);
26
26
  }
27
27
  /**
@@ -119,7 +119,7 @@ export function initializePortCompatibility(portConfig) {
119
119
  */
120
120
  export function getPortCompatibilityChecker() {
121
121
  if (!globalCompatibilityChecker) {
122
- throw new Error("Port compatibility checker not initialized. Call initializePortCompatibility() first.");
122
+ throw new Error('Port compatibility checker not initialized. Call initializePortCompatibility() first.');
123
123
  }
124
124
  return globalCompatibilityChecker;
125
125
  }
@@ -155,7 +155,7 @@ export function getPossibleConnections(sourceNode, targetNodes, nodeTypes) {
155
155
  targetNodeId: targetNode.id,
156
156
  targetPortId: targetPort.id,
157
157
  targetPort,
158
- compatible,
158
+ compatible
159
159
  });
160
160
  }
161
161
  }
@@ -170,36 +170,36 @@ export function validateConnection(sourceNodeId, sourcePortId, targetNodeId, tar
170
170
  const sourceNode = nodes.find((n) => n.id === sourceNodeId);
171
171
  const targetNode = nodes.find((n) => n.id === targetNodeId);
172
172
  if (!sourceNode) {
173
- return { valid: false, error: "Source node not found" };
173
+ return { valid: false, error: 'Source node not found' };
174
174
  }
175
175
  if (!targetNode) {
176
- return { valid: false, error: "Target node not found" };
176
+ return { valid: false, error: 'Target node not found' };
177
177
  }
178
178
  // Check for self-connection
179
179
  if (sourceNodeId === targetNodeId) {
180
- return { valid: false, error: "Cannot connect node to itself" };
180
+ return { valid: false, error: 'Cannot connect node to itself' };
181
181
  }
182
182
  // Get node metadata
183
183
  const sourceMetadata = nodeTypes.find((nt) => nt.id === sourceNode.data.metadata.id);
184
184
  const targetMetadata = nodeTypes.find((nt) => nt.id === targetNode.data.metadata.id);
185
185
  if (!sourceMetadata || !targetMetadata) {
186
- return { valid: false, error: "Node metadata not found" };
186
+ return { valid: false, error: 'Node metadata not found' };
187
187
  }
188
188
  // Find ports
189
189
  const sourcePort = sourceMetadata.outputs.find((p) => p.id === sourcePortId);
190
190
  const targetPort = targetMetadata.inputs.find((p) => p.id === targetPortId);
191
191
  if (!sourcePort) {
192
- return { valid: false, error: "Source port not found" };
192
+ return { valid: false, error: 'Source port not found' };
193
193
  }
194
194
  if (!targetPort) {
195
- return { valid: false, error: "Target port not found" };
195
+ return { valid: false, error: 'Target port not found' };
196
196
  }
197
197
  // Check data type compatibility using the global checker
198
198
  const checker = getPortCompatibilityChecker();
199
199
  if (!checker.areDataTypesCompatible(sourcePort.dataType, targetPort.dataType)) {
200
200
  return {
201
201
  valid: false,
202
- error: `Incompatible data types: ${sourcePort.dataType} cannot connect to ${targetPort.dataType}`,
202
+ error: `Incompatible data types: ${sourcePort.dataType} cannot connect to ${targetPort.dataType}`
203
203
  };
204
204
  }
205
205
  return { valid: true };
@@ -232,9 +232,9 @@ export function getConnectionSuggestions(nodeId, nodes, nodeTypes) {
232
232
  nodeName: otherNode.data.label,
233
233
  portId: output.id,
234
234
  portName: output.name,
235
- portType: "output",
235
+ portType: 'output',
236
236
  dataType: output.dataType,
237
- compatible,
237
+ compatible
238
238
  });
239
239
  }
240
240
  }
@@ -247,9 +247,9 @@ export function getConnectionSuggestions(nodeId, nodes, nodeTypes) {
247
247
  nodeName: otherNode.data.label,
248
248
  portId: input.id,
249
249
  portName: input.name,
250
- portType: "input",
250
+ portType: 'input',
251
251
  dataType: input.dataType,
252
- compatible,
252
+ compatible
253
253
  });
254
254
  }
255
255
  }
@@ -0,0 +1,42 @@
1
+ /**
2
+ * Edge Styling Utility
3
+ *
4
+ * Standalone functions for determining edge categories and applying
5
+ * visual styling to workflow edges based on source port data types.
6
+ * Used by both the visual editor and the command DSL system.
7
+ */
8
+ import type { WorkflowNode as WorkflowNodeType, WorkflowEdge, EdgeCategory } from '../types/index.js';
9
+ /**
10
+ * Check if a port ID matches a dynamic branch in a Gateway node.
11
+ * Gateway nodes store branches in config.branches array.
12
+ */
13
+ export declare function isGatewayBranch(node: WorkflowNodeType, portId: string): boolean;
14
+ /**
15
+ * Get the data type of a port from a node's metadata.
16
+ * Also handles dynamic ports like Gateway branches.
17
+ */
18
+ export declare function getPortDataType(node: WorkflowNodeType, portId: string, portType: 'input' | 'output'): string | null;
19
+ /**
20
+ * Determine the edge category based on source port data type.
21
+ * Note: This does not check for loopback edges — use getEdgeCategoryWithLoopback() for that.
22
+ */
23
+ export declare function getEdgeCategory(sourcePortDataType: string | null): EdgeCategory;
24
+ /**
25
+ * Determine the full edge category including loopback detection.
26
+ * Loopback edges take precedence over source port data type.
27
+ */
28
+ export declare function getEdgeCategoryWithLoopback(edge: WorkflowEdge, sourcePortDataType: string | null): EdgeCategory;
29
+ /**
30
+ * Apply custom styling to a connection edge based on its source/target nodes.
31
+ *
32
+ * Sets:
33
+ * - edge.data.metadata.edgeType (trigger/tool/loopback/data)
34
+ * - edge.style, edge.class, edge.markerEnd based on category
35
+ * - edge.data.targetNodeType and edge.data.targetCategory
36
+ */
37
+ export declare function applyConnectionStyling(edge: WorkflowEdge, sourceNode: WorkflowNodeType, targetNode: WorkflowNodeType): void;
38
+ /**
39
+ * Update existing edges with custom styling rules.
40
+ * Batch operation that applies styling to all edges using a node map for O(1) lookup.
41
+ */
42
+ export declare function updateEdgeStyles(edges: WorkflowEdge[], nodes: WorkflowNodeType[]): WorkflowEdge[];
@@ -0,0 +1,173 @@
1
+ /**
2
+ * Edge Styling Utility
3
+ *
4
+ * Standalone functions for determining edge categories and applying
5
+ * visual styling to workflow edges based on source port data types.
6
+ * Used by both the visual editor and the command DSL system.
7
+ */
8
+ import { MarkerType } from '@xyflow/svelte';
9
+ import { extractPortId } from '../utils/handleIds.js';
10
+ import { isLoopbackEdge } from '../utils/connections.js';
11
+ import { EDGE_MARKER_SIZES } from '../config/constants.js';
12
+ /**
13
+ * Check if a port ID matches a dynamic branch in a Gateway node.
14
+ * Gateway nodes store branches in config.branches array.
15
+ */
16
+ export function isGatewayBranch(node, portId) {
17
+ const nodeType = node.data?.metadata?.type || node.type;
18
+ if (nodeType !== 'gateway') {
19
+ return false;
20
+ }
21
+ const branches = node.data?.config?.branches;
22
+ if (!branches || !Array.isArray(branches)) {
23
+ return false;
24
+ }
25
+ return branches.some((branch) => branch.name === portId);
26
+ }
27
+ /**
28
+ * Get the data type of a port from a node's metadata.
29
+ * Also handles dynamic ports like Gateway branches.
30
+ */
31
+ export function getPortDataType(node, portId, portType) {
32
+ // First, check static ports in metadata
33
+ const ports = portType === 'output' ? node.data?.metadata?.outputs : node.data?.metadata?.inputs;
34
+ if (ports && Array.isArray(ports)) {
35
+ const port = ports.find((p) => p.id === portId);
36
+ if (port?.dataType) {
37
+ return port.dataType;
38
+ }
39
+ }
40
+ // Check dynamic ports from config (dynamicInputs/dynamicOutputs)
41
+ const dynamicKey = portType === 'output' ? 'dynamicOutputs' : 'dynamicInputs';
42
+ const dynamicPorts = node.data?.config?.[dynamicKey];
43
+ if (dynamicPorts && Array.isArray(dynamicPorts)) {
44
+ const dynamicPort = dynamicPorts.find((p) => p.name === portId);
45
+ if (dynamicPort?.dataType) {
46
+ return dynamicPort.dataType;
47
+ }
48
+ }
49
+ // For output ports, also check dynamic Gateway branches
50
+ // Gateway branches are always trigger type (control flow)
51
+ if (portType === 'output' && isGatewayBranch(node, portId)) {
52
+ return 'trigger';
53
+ }
54
+ return null;
55
+ }
56
+ /**
57
+ * Determine the edge category based on source port data type.
58
+ * Note: This does not check for loopback edges — use getEdgeCategoryWithLoopback() for that.
59
+ */
60
+ export function getEdgeCategory(sourcePortDataType) {
61
+ if (sourcePortDataType === 'trigger') {
62
+ return 'trigger';
63
+ }
64
+ if (sourcePortDataType === 'tool') {
65
+ return 'tool';
66
+ }
67
+ return 'data';
68
+ }
69
+ /**
70
+ * Determine the full edge category including loopback detection.
71
+ * Loopback edges take precedence over source port data type.
72
+ */
73
+ export function getEdgeCategoryWithLoopback(edge, sourcePortDataType) {
74
+ if (isLoopbackEdge(edge)) {
75
+ return 'loopback';
76
+ }
77
+ return getEdgeCategory(sourcePortDataType);
78
+ }
79
+ /**
80
+ * Apply custom styling to a connection edge based on its source/target nodes.
81
+ *
82
+ * Sets:
83
+ * - edge.data.metadata.edgeType (trigger/tool/loopback/data)
84
+ * - edge.style, edge.class, edge.markerEnd based on category
85
+ * - edge.data.targetNodeType and edge.data.targetCategory
86
+ */
87
+ export function applyConnectionStyling(edge, sourceNode, targetNode) {
88
+ // Extract port ID from sourceHandle
89
+ const sourcePortId = extractPortId(edge.sourceHandle);
90
+ // Get the source port's data type
91
+ const sourcePortDataType = sourcePortId
92
+ ? getPortDataType(sourceNode, sourcePortId, 'output')
93
+ : null;
94
+ // Determine edge category (loopback takes precedence)
95
+ const edgeCategory = getEdgeCategoryWithLoopback(edge, sourcePortDataType);
96
+ // Apply styling based on edge category
97
+ // Marker colors use CSS custom properties so they respond to theme changes automatically
98
+ switch (edgeCategory) {
99
+ case 'loopback':
100
+ edge.style =
101
+ 'stroke: var(--fd-edge-loopback); stroke-dasharray: var(--fd-edge-loopback-dasharray); stroke-width: var(--fd-edge-loopback-width); opacity: var(--fd-edge-loopback-opacity);';
102
+ edge.class = 'flowdrop--edge--loopback';
103
+ edge.markerEnd = {
104
+ type: MarkerType.ArrowClosed,
105
+ ...EDGE_MARKER_SIZES.loopback,
106
+ color: 'var(--fd-edge-loopback)'
107
+ };
108
+ break;
109
+ case 'trigger':
110
+ edge.style = 'stroke: var(--fd-edge-trigger); stroke-width: var(--fd-edge-trigger-width);';
111
+ edge.class = 'flowdrop--edge--trigger';
112
+ edge.markerEnd = {
113
+ type: MarkerType.ArrowClosed,
114
+ ...EDGE_MARKER_SIZES.trigger,
115
+ color: 'var(--fd-edge-trigger)'
116
+ };
117
+ break;
118
+ case 'tool':
119
+ edge.style = 'stroke: var(--fd-edge-tool); stroke-dasharray: 5 3;';
120
+ edge.class = 'flowdrop--edge--tool';
121
+ edge.markerEnd = {
122
+ type: MarkerType.ArrowClosed,
123
+ ...EDGE_MARKER_SIZES.tool,
124
+ color: 'var(--fd-edge-tool)'
125
+ };
126
+ break;
127
+ case 'data':
128
+ default:
129
+ edge.style = 'stroke: var(--fd-edge-data);';
130
+ edge.class = 'flowdrop--edge--data';
131
+ edge.markerEnd = {
132
+ type: MarkerType.ArrowClosed,
133
+ ...EDGE_MARKER_SIZES.data,
134
+ color: 'var(--fd-edge-data)'
135
+ };
136
+ break;
137
+ }
138
+ // Store metadata in edge data for API and persistence
139
+ edge.data = {
140
+ ...edge.data,
141
+ metadata: {
142
+ ...(edge.data?.metadata || {}),
143
+ edgeType: edgeCategory,
144
+ sourcePortDataType: sourcePortDataType ?? undefined
145
+ },
146
+ targetNodeType: targetNode.type,
147
+ targetCategory: targetNode.data.metadata.category
148
+ };
149
+ }
150
+ /**
151
+ * Update existing edges with custom styling rules.
152
+ * Batch operation that applies styling to all edges using a node map for O(1) lookup.
153
+ */
154
+ export function updateEdgeStyles(edges, nodes) {
155
+ const nodeMap = new Map(nodes.map((n) => [n.id, n]));
156
+ return edges.map((edge) => {
157
+ const sourceNode = nodeMap.get(edge.source);
158
+ const targetNode = nodeMap.get(edge.target);
159
+ const updatedEdge = { ...edge };
160
+ if (!sourceNode || !targetNode) {
161
+ updatedEdge.data = {
162
+ ...updatedEdge.data,
163
+ metadata: {
164
+ ...(updatedEdge.data?.metadata || {}),
165
+ edgeType: 'data'
166
+ }
167
+ };
168
+ return updatedEdge;
169
+ }
170
+ applyConnectionStyling(updatedEdge, sourceNode, targetNode);
171
+ return updatedEdge;
172
+ });
173
+ }
@@ -21,7 +21,7 @@ export function normalizeError(error) {
21
21
  if (error instanceof Error) {
22
22
  return error;
23
23
  }
24
- if (typeof error === "string") {
24
+ if (typeof error === 'string') {
25
25
  return new Error(error);
26
26
  }
27
27
  return new Error(String(error));
@@ -33,11 +33,11 @@ export function normalizeError(error) {
33
33
  * @param fallback - Fallback message if error has no useful info
34
34
  * @returns A string message
35
35
  */
36
- export function getErrorMessage(error, fallback = "Unknown error") {
36
+ export function getErrorMessage(error, fallback = 'Unknown error') {
37
37
  if (error instanceof Error) {
38
38
  return error.message;
39
39
  }
40
- if (typeof error === "string") {
40
+ if (typeof error === 'string') {
41
41
  return error;
42
42
  }
43
43
  return fallback;
@@ -6,7 +6,7 @@
6
6
  *
7
7
  * @module utils/fetchWithAuth
8
8
  */
9
- import type { AuthProvider } from "../types/auth.js";
9
+ import type { AuthProvider } from '../types/auth.js';
10
10
  /**
11
11
  * Build fetch headers with optional authentication
12
12
  *
@@ -23,8 +23,8 @@
23
23
  */
24
24
  export async function buildFetchHeaders(authProvider) {
25
25
  const headers = {
26
- Accept: "application/json",
27
- "Content-Type": "application/json",
26
+ Accept: 'application/json',
27
+ 'Content-Type': 'application/json'
28
28
  };
29
29
  if (authProvider) {
30
30
  const authHeaders = await authProvider.getAuthHeaders();
@@ -14,7 +14,7 @@
14
14
  * @param portId - The port identifier
15
15
  * @returns A composite handle ID string
16
16
  */
17
- export declare function buildHandleId(nodeId: string, direction: "input" | "output", portId: string): string;
17
+ export declare function buildHandleId(nodeId: string, direction: 'input' | 'output', portId: string): string;
18
18
  /**
19
19
  * Extract the port ID from a composite handle ID.
20
20
  *
@@ -32,4 +32,4 @@ export declare function extractPortId(handleId: string | undefined): string | nu
32
32
  * @param handleId - The handle ID string
33
33
  * @returns 'input', 'output', or null if not found
34
34
  */
35
- export declare function extractDirection(handleId: string | undefined): "input" | "output" | null;
35
+ export declare function extractDirection(handleId: string | undefined): 'input' | 'output' | null;
@@ -30,13 +30,13 @@ export function buildHandleId(nodeId, direction, portId) {
30
30
  export function extractPortId(handleId) {
31
31
  if (!handleId)
32
32
  return null;
33
- const outputMatch = handleId.lastIndexOf("-output-");
33
+ const outputMatch = handleId.lastIndexOf('-output-');
34
34
  if (outputMatch !== -1) {
35
- return handleId.substring(outputMatch + "-output-".length);
35
+ return handleId.substring(outputMatch + '-output-'.length);
36
36
  }
37
- const inputMatch = handleId.lastIndexOf("-input-");
37
+ const inputMatch = handleId.lastIndexOf('-input-');
38
38
  if (inputMatch !== -1) {
39
- return handleId.substring(inputMatch + "-input-".length);
39
+ return handleId.substring(inputMatch + '-input-'.length);
40
40
  }
41
41
  // Short format: the handleId IS the port ID
42
42
  return handleId;
@@ -50,9 +50,9 @@ export function extractPortId(handleId) {
50
50
  export function extractDirection(handleId) {
51
51
  if (!handleId)
52
52
  return null;
53
- if (handleId.includes("-output-"))
54
- return "output";
55
- if (handleId.includes("-input-"))
56
- return "input";
53
+ if (handleId.includes('-output-'))
54
+ return 'output';
55
+ if (handleId.includes('-input-'))
56
+ return 'input';
57
57
  return null;
58
58
  }
@@ -28,4 +28,4 @@ export interface HandlePosition {
28
28
  * getCircleHandlePosition(0, 2, 'left') // { left: ~4.8, top: ~18 }
29
29
  * getCircleHandlePosition(1, 2, 'left') // { left: ~4.8, top: ~54 }
30
30
  */
31
- export declare function getCircleHandlePosition(index: number, count: number, side: "left" | "right", radius?: number, arcSpan?: number): HandlePosition;
31
+ export declare function getCircleHandlePosition(index: number, count: number, side: 'left' | 'right', radius?: number, arcSpan?: number): HandlePosition;
@@ -25,11 +25,11 @@
25
25
  * getCircleHandlePosition(1, 2, 'left') // { left: ~4.8, top: ~54 }
26
26
  */
27
27
  export function getCircleHandlePosition(index, count, side, radius = 40, arcSpan = (Math.PI * 5) / 6) {
28
- const centerAngle = side === "left" ? Math.PI : 0; // 180° for left, 0° for right
28
+ const centerAngle = side === 'left' ? Math.PI : 0; // 180° for left, 0° for right
29
29
  const angle = centerAngle - arcSpan / 2 + (arcSpan * (index + 1)) / (count + 1);
30
30
  const centerOffset = radius; // center of the circle (assuming square bounding box)
31
31
  return {
32
32
  left: centerOffset + radius * Math.cos(angle),
33
- top: centerOffset + radius * Math.sin(angle),
33
+ top: centerOffset + radius * Math.sin(angle)
34
34
  };
35
35
  }
@@ -2,7 +2,7 @@
2
2
  * Centralized icon management for FlowDrop
3
3
  * Ensures consistent icon usage across all components
4
4
  */
5
- import type { NodeCategory } from "../types/index.js";
5
+ import type { NodeCategory } from '../types/index.js';
6
6
  /**
7
7
  * Default icons for different contexts
8
8
  */
@@ -2,80 +2,80 @@
2
2
  * Centralized icon management for FlowDrop
3
3
  * Ensures consistent icon usage across all components
4
4
  */
5
- import { getCategoryIcon as getCategoryIconFromStore } from "../stores/categoriesStore.svelte.js";
5
+ import { getCategoryIcon as getCategoryIconFromStore } from '../stores/categoriesStore.svelte.js';
6
6
  /**
7
7
  * Default icons for different contexts
8
8
  */
9
9
  export const DEFAULT_ICONS = {
10
10
  // Node fallback icons
11
- NODE: "mdi:cube",
12
- CATEGORY: "mdi:folder",
11
+ NODE: 'mdi:cube',
12
+ CATEGORY: 'mdi:folder',
13
13
  // UI action icons
14
- ADD: "mdi:plus",
15
- REMOVE: "mdi:minus",
16
- EDIT: "mdi:pencil",
17
- SAVE: "mdi:content-save",
18
- LOAD: "mdi:folder-open",
19
- EXPORT: "mdi:download",
20
- IMPORT: "mdi:upload",
21
- SEARCH: "mdi:magnify",
22
- CLOSE: "mdi:close",
23
- SETTINGS: "mdi:cog",
24
- HELP: "mdi:help-circle",
14
+ ADD: 'mdi:plus',
15
+ REMOVE: 'mdi:minus',
16
+ EDIT: 'mdi:pencil',
17
+ SAVE: 'mdi:content-save',
18
+ LOAD: 'mdi:folder-open',
19
+ EXPORT: 'mdi:download',
20
+ IMPORT: 'mdi:upload',
21
+ SEARCH: 'mdi:magnify',
22
+ CLOSE: 'mdi:close',
23
+ SETTINGS: 'mdi:cog',
24
+ HELP: 'mdi:help-circle',
25
25
  // Status icons
26
- SUCCESS: "mdi:check-circle",
27
- ERROR: "mdi:alert-circle",
28
- WARNING: "mdi:alert",
29
- INFO: "mdi:information",
30
- LOADING: "mdi:loading",
26
+ SUCCESS: 'mdi:check-circle',
27
+ ERROR: 'mdi:alert-circle',
28
+ WARNING: 'mdi:alert',
29
+ INFO: 'mdi:information',
30
+ LOADING: 'mdi:loading',
31
31
  // Navigation icons
32
- HOME: "mdi:home",
33
- BACK: "mdi:arrow-left",
34
- FORWARD: "mdi:arrow-right",
35
- UP: "mdi:arrow-up",
36
- DOWN: "mdi:arrow-down",
32
+ HOME: 'mdi:home',
33
+ BACK: 'mdi:arrow-left',
34
+ FORWARD: 'mdi:arrow-right',
35
+ UP: 'mdi:arrow-up',
36
+ DOWN: 'mdi:arrow-down',
37
37
  // Workflow icons
38
- WORKFLOW: "mdi:graph",
39
- NODE_ADD: "mdi:plus-circle",
40
- NODE_DELETE: "mdi:minus-circle",
41
- CONNECTION: "mdi:connection",
38
+ WORKFLOW: 'mdi:graph',
39
+ NODE_ADD: 'mdi:plus-circle',
40
+ NODE_DELETE: 'mdi:minus-circle',
41
+ CONNECTION: 'mdi:connection',
42
42
  // Data icons
43
- DATA: "mdi:database",
44
- FILE: "mdi:file",
45
- TEXT: "mdi:text",
46
- JSON: "mdi:code-json",
43
+ DATA: 'mdi:database',
44
+ FILE: 'mdi:file',
45
+ TEXT: 'mdi:text',
46
+ JSON: 'mdi:code-json',
47
47
  // Model and processing icons
48
- MODEL: "mdi:chip",
49
- BRAIN: "mdi:brain",
50
- VECTOR: "mdi:vector-point",
51
- ROBOT: "mdi:robot",
48
+ MODEL: 'mdi:chip',
49
+ BRAIN: 'mdi:brain',
50
+ VECTOR: 'mdi:vector-point',
51
+ ROBOT: 'mdi:robot',
52
52
  // Tool icons
53
- TOOL: "mdi:wrench",
54
- CALCULATOR: "mdi:calculator",
55
- CLOCK: "mdi:clock",
53
+ TOOL: 'mdi:wrench',
54
+ CALCULATOR: 'mdi:calculator',
55
+ CLOCK: 'mdi:clock',
56
56
  // Communication icons
57
- CHAT: "mdi:chat",
58
- MESSAGE: "mdi:message",
59
- EMAIL: "mdi:email",
60
- WEBHOOK: "mdi:webhook",
57
+ CHAT: 'mdi:chat',
58
+ MESSAGE: 'mdi:message',
59
+ EMAIL: 'mdi:email',
60
+ WEBHOOK: 'mdi:webhook',
61
61
  // Storage icons
62
- STORAGE: "mdi:database",
63
- MEMORY: "mdi:memory",
64
- CACHE: "mdi:cached",
62
+ STORAGE: 'mdi:database',
63
+ MEMORY: 'mdi:memory',
64
+ CACHE: 'mdi:cached',
65
65
  // Processing icons
66
- PROCESS: "mdi:cog",
67
- FILTER: "mdi:filter",
68
- SORT: "mdi:sort",
69
- TRANSFORM: "mdi:transform",
66
+ PROCESS: 'mdi:cog',
67
+ FILTER: 'mdi:filter',
68
+ SORT: 'mdi:sort',
69
+ TRANSFORM: 'mdi:transform',
70
70
  // Logic icons
71
- LOGIC: "mdi:git-branch",
72
- CONDITION: "mdi:source-fork",
73
- LOOP: "mdi:loop",
71
+ LOGIC: 'mdi:git-branch',
72
+ CONDITION: 'mdi:source-fork',
73
+ LOOP: 'mdi:loop',
74
74
  // Integration icons
75
- API: "mdi:api",
76
- LINK: "mdi:link",
77
- PLUGIN: "mdi:puzzle",
78
- BUNDLE: "mdi:package-variant",
75
+ API: 'mdi:api',
76
+ LINK: 'mdi:link',
77
+ PLUGIN: 'mdi:puzzle',
78
+ BUNDLE: 'mdi:package-variant'
79
79
  };
80
80
  /**
81
81
  * Category-specific icons for built-in categories.
@@ -83,23 +83,23 @@ export const DEFAULT_ICONS = {
83
83
  * These serve as static defaults; the categories store provides dynamic overrides.
84
84
  */
85
85
  export const CATEGORY_ICONS = {
86
- triggers: "mdi:lightning-bolt",
87
- inputs: "mdi:arrow-down-circle",
88
- outputs: "mdi:arrow-up-circle",
89
- prompts: "mdi:message-text",
90
- models: "mdi:robot",
91
- processing: "mdi:cog",
92
- logic: "mdi:source-branch",
93
- data: "mdi:database",
94
- helpers: "mdi:help-circle",
95
- tools: "mdi:wrench",
96
- "vector stores": "mdi:vector-square",
97
- embeddings: "mdi:vector-polygon",
98
- memories: "mdi:brain",
99
- agents: "mdi:account-cog",
100
- ai: "mdi:shimmer",
101
- interrupts: "mdi:hand-back-left",
102
- bundles: "mdi:package-variant",
86
+ triggers: 'mdi:lightning-bolt',
87
+ inputs: 'mdi:arrow-down-circle',
88
+ outputs: 'mdi:arrow-up-circle',
89
+ prompts: 'mdi:message-text',
90
+ models: 'mdi:robot',
91
+ processing: 'mdi:cog',
92
+ logic: 'mdi:source-branch',
93
+ data: 'mdi:database',
94
+ helpers: 'mdi:help-circle',
95
+ tools: 'mdi:wrench',
96
+ 'vector stores': 'mdi:vector-square',
97
+ embeddings: 'mdi:vector-polygon',
98
+ memories: 'mdi:brain',
99
+ agents: 'mdi:account-cog',
100
+ ai: 'mdi:shimmer',
101
+ interrupts: 'mdi:hand-back-left',
102
+ bundles: 'mdi:package-variant'
103
103
  };
104
104
  /**
105
105
  * Get the appropriate icon for a node
@@ -21,7 +21,7 @@
21
21
  * ```
22
22
  */
23
23
  /** Log severity levels. `'none'` disables all output. */
24
- export type LogLevel = "debug" | "info" | "warn" | "error" | "none";
24
+ export type LogLevel = 'debug' | 'info' | 'warn' | 'error' | 'none';
25
25
  /**
26
26
  * Set the minimum log level for FlowDrop library output.
27
27
  * Messages below this level are silently discarded.