@flowdrop/flowdrop 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (403) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +252 -0
  3. package/dist/adapters/WorkflowAdapter.d.ts +167 -0
  4. package/dist/adapters/WorkflowAdapter.js +368 -0
  5. package/dist/adapters/agentspec/AgentSpecAdapter.d.ts +96 -0
  6. package/dist/adapters/agentspec/AgentSpecAdapter.js +626 -0
  7. package/dist/adapters/agentspec/agentAdapter.d.ts +59 -0
  8. package/dist/adapters/agentspec/agentAdapter.js +91 -0
  9. package/dist/adapters/agentspec/autoLayout.d.ts +34 -0
  10. package/dist/adapters/agentspec/autoLayout.js +127 -0
  11. package/dist/adapters/agentspec/componentTypeDefaults.d.ts +73 -0
  12. package/dist/adapters/agentspec/componentTypeDefaults.js +238 -0
  13. package/dist/adapters/agentspec/defaultNodeTypes.d.ts +53 -0
  14. package/dist/adapters/agentspec/defaultNodeTypes.js +561 -0
  15. package/dist/adapters/agentspec/index.d.ts +37 -0
  16. package/dist/adapters/agentspec/index.js +39 -0
  17. package/dist/adapters/agentspec/validator.d.ts +34 -0
  18. package/dist/adapters/agentspec/validator.js +169 -0
  19. package/dist/api/enhanced-client.d.ts +183 -0
  20. package/dist/api/enhanced-client.js +430 -0
  21. package/dist/components/App.svelte +981 -0
  22. package/dist/components/App.svelte.d.ts +54 -0
  23. package/dist/components/CanvasBanner.stories.svelte +29 -0
  24. package/dist/components/CanvasBanner.stories.svelte.d.ts +27 -0
  25. package/dist/components/CanvasBanner.svelte +57 -0
  26. package/dist/components/CanvasBanner.svelte.d.ts +8 -0
  27. package/dist/components/ConfigForm.svelte +1138 -0
  28. package/dist/components/ConfigForm.svelte.d.ts +44 -0
  29. package/dist/components/ConfigModal.svelte +188 -0
  30. package/dist/components/ConfigModal.svelte.d.ts +13 -0
  31. package/dist/components/ConfigPanel.stories.svelte +47 -0
  32. package/dist/components/ConfigPanel.stories.svelte.d.ts +27 -0
  33. package/dist/components/ConfigPanel.svelte +182 -0
  34. package/dist/components/ConfigPanel.svelte.d.ts +32 -0
  35. package/dist/components/ConnectionLine.svelte +32 -0
  36. package/dist/components/ConnectionLine.svelte.d.ts +3 -0
  37. package/dist/components/EdgeRefresher.svelte +41 -0
  38. package/dist/components/EdgeRefresher.svelte.d.ts +9 -0
  39. package/dist/components/FlowDropZone.svelte +83 -0
  40. package/dist/components/FlowDropZone.svelte.d.ts +13 -0
  41. package/dist/components/LoadingSpinner.stories.svelte +30 -0
  42. package/dist/components/LoadingSpinner.stories.svelte.d.ts +27 -0
  43. package/dist/components/LoadingSpinner.svelte +36 -0
  44. package/dist/components/LoadingSpinner.svelte.d.ts +8 -0
  45. package/dist/components/Logo.stories.svelte +22 -0
  46. package/dist/components/Logo.stories.svelte.d.ts +27 -0
  47. package/dist/components/Logo.svelte +102 -0
  48. package/dist/components/Logo.svelte.d.ts +26 -0
  49. package/dist/components/LogsSidebar.svelte +563 -0
  50. package/dist/components/LogsSidebar.svelte.d.ts +17 -0
  51. package/dist/components/MarkdownDisplay.stories.svelte +36 -0
  52. package/dist/components/MarkdownDisplay.stories.svelte.d.ts +27 -0
  53. package/dist/components/MarkdownDisplay.svelte +29 -0
  54. package/dist/components/MarkdownDisplay.svelte.d.ts +7 -0
  55. package/dist/components/Navbar.stories.svelte +53 -0
  56. package/dist/components/Navbar.stories.svelte.d.ts +27 -0
  57. package/dist/components/Navbar.svelte +726 -0
  58. package/dist/components/Navbar.svelte.d.ts +29 -0
  59. package/dist/components/NodeSidebar.svelte +762 -0
  60. package/dist/components/NodeSidebar.svelte.d.ts +9 -0
  61. package/dist/components/NodeStatusOverlay.stories.svelte +85 -0
  62. package/dist/components/NodeStatusOverlay.stories.svelte.d.ts +27 -0
  63. package/dist/components/NodeStatusOverlay.svelte +327 -0
  64. package/dist/components/NodeStatusOverlay.svelte.d.ts +11 -0
  65. package/dist/components/PipelineStatus.svelte +314 -0
  66. package/dist/components/PipelineStatus.svelte.d.ts +20 -0
  67. package/dist/components/PortCoordinateTracker.svelte +58 -0
  68. package/dist/components/PortCoordinateTracker.svelte.d.ts +12 -0
  69. package/dist/components/ReadOnlyDetails.svelte +170 -0
  70. package/dist/components/ReadOnlyDetails.svelte.d.ts +25 -0
  71. package/dist/components/SchemaForm.stories.svelte +116 -0
  72. package/dist/components/SchemaForm.stories.svelte.d.ts +27 -0
  73. package/dist/components/SchemaForm.svelte +536 -0
  74. package/dist/components/SchemaForm.svelte.d.ts +83 -0
  75. package/dist/components/SettingsModal.svelte +279 -0
  76. package/dist/components/SettingsModal.svelte.d.ts +23 -0
  77. package/dist/components/SettingsPanel.svelte +638 -0
  78. package/dist/components/SettingsPanel.svelte.d.ts +21 -0
  79. package/dist/components/StatusIcon.stories.svelte +60 -0
  80. package/dist/components/StatusIcon.stories.svelte.d.ts +27 -0
  81. package/dist/components/StatusIcon.svelte +119 -0
  82. package/dist/components/StatusIcon.svelte.d.ts +10 -0
  83. package/dist/components/StatusLabel.stories.svelte +17 -0
  84. package/dist/components/StatusLabel.stories.svelte.d.ts +27 -0
  85. package/dist/components/StatusLabel.svelte +33 -0
  86. package/dist/components/StatusLabel.svelte.d.ts +7 -0
  87. package/dist/components/ThemeToggle.stories.svelte +25 -0
  88. package/dist/components/ThemeToggle.stories.svelte.d.ts +27 -0
  89. package/dist/components/ThemeToggle.svelte +185 -0
  90. package/dist/components/ThemeToggle.svelte.d.ts +14 -0
  91. package/dist/components/UniversalNode.svelte +155 -0
  92. package/dist/components/UniversalNode.svelte.d.ts +15 -0
  93. package/dist/components/WorkflowEditor.svelte +1035 -0
  94. package/dist/components/WorkflowEditor.svelte.d.ts +23 -0
  95. package/dist/components/form/FormArray.svelte +1049 -0
  96. package/dist/components/form/FormArray.svelte.d.ts +22 -0
  97. package/dist/components/form/FormAutocomplete.svelte +1009 -0
  98. package/dist/components/form/FormAutocomplete.svelte.d.ts +25 -0
  99. package/dist/components/form/FormCheckboxGroup.stories.svelte +28 -0
  100. package/dist/components/form/FormCheckboxGroup.stories.svelte.d.ts +27 -0
  101. package/dist/components/form/FormCheckboxGroup.svelte +155 -0
  102. package/dist/components/form/FormCheckboxGroup.svelte.d.ts +17 -0
  103. package/dist/components/form/FormCodeEditor.svelte +458 -0
  104. package/dist/components/form/FormCodeEditor.svelte.d.ts +25 -0
  105. package/dist/components/form/FormField.svelte +417 -0
  106. package/dist/components/form/FormField.svelte.d.ts +29 -0
  107. package/dist/components/form/FormFieldLight.svelte +425 -0
  108. package/dist/components/form/FormFieldLight.svelte.d.ts +18 -0
  109. package/dist/components/form/FormFieldWrapper.stories.svelte +53 -0
  110. package/dist/components/form/FormFieldWrapper.stories.svelte.d.ts +27 -0
  111. package/dist/components/form/FormFieldWrapper.svelte +125 -0
  112. package/dist/components/form/FormFieldWrapper.svelte.d.ts +18 -0
  113. package/dist/components/form/FormFieldset.svelte +142 -0
  114. package/dist/components/form/FormFieldset.svelte.d.ts +11 -0
  115. package/dist/components/form/FormMarkdownEditor.svelte +752 -0
  116. package/dist/components/form/FormMarkdownEditor.svelte.d.ts +33 -0
  117. package/dist/components/form/FormNumberField.stories.svelte +36 -0
  118. package/dist/components/form/FormNumberField.stories.svelte.d.ts +27 -0
  119. package/dist/components/form/FormNumberField.svelte +112 -0
  120. package/dist/components/form/FormNumberField.svelte.d.ts +25 -0
  121. package/dist/components/form/FormRangeField.stories.svelte +31 -0
  122. package/dist/components/form/FormRangeField.stories.svelte.d.ts +27 -0
  123. package/dist/components/form/FormRangeField.svelte +246 -0
  124. package/dist/components/form/FormRangeField.svelte.d.ts +23 -0
  125. package/dist/components/form/FormSelect.stories.svelte +50 -0
  126. package/dist/components/form/FormSelect.stories.svelte.d.ts +27 -0
  127. package/dist/components/form/FormSelect.svelte +129 -0
  128. package/dist/components/form/FormSelect.svelte.d.ts +20 -0
  129. package/dist/components/form/FormTemplateEditor.svelte +825 -0
  130. package/dist/components/form/FormTemplateEditor.svelte.d.ts +41 -0
  131. package/dist/components/form/FormTextField.stories.svelte +30 -0
  132. package/dist/components/form/FormTextField.stories.svelte.d.ts +27 -0
  133. package/dist/components/form/FormTextField.svelte +91 -0
  134. package/dist/components/form/FormTextField.svelte.d.ts +19 -0
  135. package/dist/components/form/FormTextarea.stories.svelte +34 -0
  136. package/dist/components/form/FormTextarea.stories.svelte.d.ts +27 -0
  137. package/dist/components/form/FormTextarea.svelte +97 -0
  138. package/dist/components/form/FormTextarea.svelte.d.ts +21 -0
  139. package/dist/components/form/FormToggle.stories.svelte +30 -0
  140. package/dist/components/form/FormToggle.stories.svelte.d.ts +27 -0
  141. package/dist/components/form/FormToggle.svelte +126 -0
  142. package/dist/components/form/FormToggle.svelte.d.ts +19 -0
  143. package/dist/components/form/FormUISchemaRenderer.svelte +136 -0
  144. package/dist/components/form/FormUISchemaRenderer.svelte.d.ts +32 -0
  145. package/dist/components/form/index.d.ts +50 -0
  146. package/dist/components/form/index.js +54 -0
  147. package/dist/components/form/templateAutocomplete.d.ts +29 -0
  148. package/dist/components/form/templateAutocomplete.js +254 -0
  149. package/dist/components/form/types.d.ts +485 -0
  150. package/dist/components/form/types.js +73 -0
  151. package/dist/components/interrupt/ChoicePrompt.stories.svelte +52 -0
  152. package/dist/components/interrupt/ChoicePrompt.stories.svelte.d.ts +27 -0
  153. package/dist/components/interrupt/ChoicePrompt.svelte +401 -0
  154. package/dist/components/interrupt/ChoicePrompt.svelte.d.ts +23 -0
  155. package/dist/components/interrupt/ConfirmationPrompt.stories.svelte +71 -0
  156. package/dist/components/interrupt/ConfirmationPrompt.stories.svelte.d.ts +27 -0
  157. package/dist/components/interrupt/ConfirmationPrompt.svelte +292 -0
  158. package/dist/components/interrupt/ConfirmationPrompt.svelte.d.ts +25 -0
  159. package/dist/components/interrupt/FormPrompt.svelte +236 -0
  160. package/dist/components/interrupt/FormPrompt.svelte.d.ts +23 -0
  161. package/dist/components/interrupt/InterruptBubble.svelte +601 -0
  162. package/dist/components/interrupt/InterruptBubble.svelte.d.ts +16 -0
  163. package/dist/components/interrupt/ReviewPrompt.stories.svelte +67 -0
  164. package/dist/components/interrupt/ReviewPrompt.stories.svelte.d.ts +27 -0
  165. package/dist/components/interrupt/ReviewPrompt.svelte +861 -0
  166. package/dist/components/interrupt/ReviewPrompt.svelte.d.ts +23 -0
  167. package/dist/components/interrupt/TextInputPrompt.stories.svelte +47 -0
  168. package/dist/components/interrupt/TextInputPrompt.stories.svelte.d.ts +27 -0
  169. package/dist/components/interrupt/TextInputPrompt.svelte +346 -0
  170. package/dist/components/interrupt/TextInputPrompt.svelte.d.ts +23 -0
  171. package/dist/components/interrupt/index.d.ts +13 -0
  172. package/dist/components/interrupt/index.js +15 -0
  173. package/dist/components/layouts/MainLayout.svelte +718 -0
  174. package/dist/components/layouts/MainLayout.svelte.d.ts +62 -0
  175. package/dist/components/nodes/GatewayNode.stories.svelte +108 -0
  176. package/dist/components/nodes/GatewayNode.stories.svelte.d.ts +26 -0
  177. package/dist/components/nodes/GatewayNode.svelte +591 -0
  178. package/dist/components/nodes/GatewayNode.svelte.d.ts +15 -0
  179. package/dist/components/nodes/IdeaNode.stories.svelte +52 -0
  180. package/dist/components/nodes/IdeaNode.stories.svelte.d.ts +26 -0
  181. package/dist/components/nodes/IdeaNode.svelte +455 -0
  182. package/dist/components/nodes/IdeaNode.svelte.d.ts +24 -0
  183. package/dist/components/nodes/NotesNode.stories.svelte +76 -0
  184. package/dist/components/nodes/NotesNode.stories.svelte.d.ts +26 -0
  185. package/dist/components/nodes/NotesNode.svelte +378 -0
  186. package/dist/components/nodes/NotesNode.svelte.d.ts +24 -0
  187. package/dist/components/nodes/SimpleNode.stories.svelte +159 -0
  188. package/dist/components/nodes/SimpleNode.stories.svelte.d.ts +26 -0
  189. package/dist/components/nodes/SimpleNode.svelte +451 -0
  190. package/dist/components/nodes/SimpleNode.svelte.d.ts +25 -0
  191. package/dist/components/nodes/SquareNode.stories.svelte +82 -0
  192. package/dist/components/nodes/SquareNode.stories.svelte.d.ts +26 -0
  193. package/dist/components/nodes/SquareNode.svelte +407 -0
  194. package/dist/components/nodes/SquareNode.svelte.d.ts +25 -0
  195. package/dist/components/nodes/TerminalNode.stories.svelte +25 -0
  196. package/dist/components/nodes/TerminalNode.stories.svelte.d.ts +26 -0
  197. package/dist/components/nodes/TerminalNode.svelte +690 -0
  198. package/dist/components/nodes/TerminalNode.svelte.d.ts +25 -0
  199. package/dist/components/nodes/ToolNode.stories.svelte +189 -0
  200. package/dist/components/nodes/ToolNode.stories.svelte.d.ts +26 -0
  201. package/dist/components/nodes/ToolNode.svelte +471 -0
  202. package/dist/components/nodes/ToolNode.svelte.d.ts +36 -0
  203. package/dist/components/nodes/WorkflowNode.stories.svelte +55 -0
  204. package/dist/components/nodes/WorkflowNode.stories.svelte.d.ts +26 -0
  205. package/dist/components/nodes/WorkflowNode.svelte +571 -0
  206. package/dist/components/nodes/WorkflowNode.svelte.d.ts +15 -0
  207. package/dist/components/playground/ChatPanel.svelte +905 -0
  208. package/dist/components/playground/ChatPanel.svelte.d.ts +46 -0
  209. package/dist/components/playground/ExecutionLogs.svelte +488 -0
  210. package/dist/components/playground/ExecutionLogs.svelte.d.ts +14 -0
  211. package/dist/components/playground/InputCollector.svelte +444 -0
  212. package/dist/components/playground/InputCollector.svelte.d.ts +16 -0
  213. package/dist/components/playground/MessageBubble.stories.svelte +62 -0
  214. package/dist/components/playground/MessageBubble.stories.svelte.d.ts +27 -0
  215. package/dist/components/playground/MessageBubble.svelte +633 -0
  216. package/dist/components/playground/MessageBubble.svelte.d.ts +24 -0
  217. package/dist/components/playground/Playground.svelte +1075 -0
  218. package/dist/components/playground/Playground.svelte.d.ts +25 -0
  219. package/dist/components/playground/PlaygroundModal.svelte +220 -0
  220. package/dist/components/playground/PlaygroundModal.svelte.d.ts +25 -0
  221. package/dist/components/playground/SessionManager.svelte +538 -0
  222. package/dist/components/playground/SessionManager.svelte.d.ts +20 -0
  223. package/dist/config/agentSpecEndpoints.d.ts +70 -0
  224. package/dist/config/agentSpecEndpoints.js +65 -0
  225. package/dist/config/constants.d.ts +43 -0
  226. package/dist/config/constants.js +31 -0
  227. package/dist/config/defaultCategories.d.ts +7 -0
  228. package/dist/config/defaultCategories.js +126 -0
  229. package/dist/config/defaultPortConfig.d.ts +6 -0
  230. package/dist/config/defaultPortConfig.js +201 -0
  231. package/dist/config/endpoints.d.ts +160 -0
  232. package/dist/config/endpoints.js +146 -0
  233. package/dist/config/runtimeConfig.d.ts +47 -0
  234. package/dist/config/runtimeConfig.js +80 -0
  235. package/dist/core/index.d.ts +75 -0
  236. package/dist/core/index.js +92 -0
  237. package/dist/display/index.d.ts +29 -0
  238. package/dist/display/index.js +36 -0
  239. package/dist/editor/index.d.ts +95 -0
  240. package/dist/editor/index.js +138 -0
  241. package/dist/form/code.d.ts +101 -0
  242. package/dist/form/code.js +168 -0
  243. package/dist/form/fieldRegistry.d.ts +169 -0
  244. package/dist/form/fieldRegistry.js +152 -0
  245. package/dist/form/full.d.ts +56 -0
  246. package/dist/form/full.js +80 -0
  247. package/dist/form/index.d.ts +77 -0
  248. package/dist/form/index.js +91 -0
  249. package/dist/form/markdown.d.ts +69 -0
  250. package/dist/form/markdown.js +103 -0
  251. package/dist/helpers/nodeLayoutHelper.d.ts +14 -0
  252. package/dist/helpers/nodeLayoutHelper.js +19 -0
  253. package/dist/helpers/proximityConnect.d.ts +94 -0
  254. package/dist/helpers/proximityConnect.js +314 -0
  255. package/dist/helpers/workflowEditorHelper.d.ts +183 -0
  256. package/dist/helpers/workflowEditorHelper.js +595 -0
  257. package/dist/index.d.ts +37 -0
  258. package/dist/index.js +64 -0
  259. package/dist/mocks/app-environment.d.ts +8 -0
  260. package/dist/mocks/app-environment.js +16 -0
  261. package/dist/mocks/app-forms.d.ts +2 -0
  262. package/dist/mocks/app-forms.js +22 -0
  263. package/dist/mocks/app-navigation.d.ts +5 -0
  264. package/dist/mocks/app-navigation.js +36 -0
  265. package/dist/mocks/app-stores.d.ts +14 -0
  266. package/dist/mocks/app-stores.js +26 -0
  267. package/dist/playground/index.d.ts +131 -0
  268. package/dist/playground/index.js +172 -0
  269. package/dist/playground/mount.d.ts +203 -0
  270. package/dist/playground/mount.js +235 -0
  271. package/dist/registry/BaseRegistry.d.ts +92 -0
  272. package/dist/registry/BaseRegistry.js +124 -0
  273. package/dist/registry/builtinFormats.d.ts +23 -0
  274. package/dist/registry/builtinFormats.js +70 -0
  275. package/dist/registry/builtinNodes.d.ts +77 -0
  276. package/dist/registry/builtinNodes.js +211 -0
  277. package/dist/registry/index.d.ts +8 -0
  278. package/dist/registry/index.js +12 -0
  279. package/dist/registry/nodeComponentRegistry.d.ts +276 -0
  280. package/dist/registry/nodeComponentRegistry.js +262 -0
  281. package/dist/registry/plugin.d.ts +215 -0
  282. package/dist/registry/plugin.js +249 -0
  283. package/dist/registry/workflowFormatRegistry.d.ts +122 -0
  284. package/dist/registry/workflowFormatRegistry.js +96 -0
  285. package/dist/schema/index.d.ts +23 -0
  286. package/dist/schema/index.js +23 -0
  287. package/dist/schemas/v1/workflow.schema.json +1078 -0
  288. package/dist/services/agentSpecExecutionService.d.ts +106 -0
  289. package/dist/services/agentSpecExecutionService.js +334 -0
  290. package/dist/services/api.d.ts +115 -0
  291. package/dist/services/api.js +214 -0
  292. package/dist/services/apiVariableService.d.ts +114 -0
  293. package/dist/services/apiVariableService.js +338 -0
  294. package/dist/services/autoSaveService.d.ts +112 -0
  295. package/dist/services/autoSaveService.js +227 -0
  296. package/dist/services/categoriesApi.d.ts +14 -0
  297. package/dist/services/categoriesApi.js +49 -0
  298. package/dist/services/draftStorage.d.ts +171 -0
  299. package/dist/services/draftStorage.js +299 -0
  300. package/dist/services/dynamicSchemaService.d.ts +108 -0
  301. package/dist/services/dynamicSchemaService.js +444 -0
  302. package/dist/services/globalSave.d.ts +69 -0
  303. package/dist/services/globalSave.js +248 -0
  304. package/dist/services/historyService.d.ts +208 -0
  305. package/dist/services/historyService.js +321 -0
  306. package/dist/services/interruptService.d.ts +133 -0
  307. package/dist/services/interruptService.js +280 -0
  308. package/dist/services/nodeExecutionService.d.ts +63 -0
  309. package/dist/services/nodeExecutionService.js +266 -0
  310. package/dist/services/playgroundService.d.ts +130 -0
  311. package/dist/services/playgroundService.js +321 -0
  312. package/dist/services/portConfigApi.d.ts +14 -0
  313. package/dist/services/portConfigApi.js +54 -0
  314. package/dist/services/settingsService.d.ts +92 -0
  315. package/dist/services/settingsService.js +196 -0
  316. package/dist/services/toastService.d.ts +156 -0
  317. package/dist/services/toastService.js +265 -0
  318. package/dist/services/variableService.d.ts +141 -0
  319. package/dist/services/variableService.js +463 -0
  320. package/dist/services/workflowStorage.d.ts +37 -0
  321. package/dist/services/workflowStorage.js +116 -0
  322. package/dist/settings/index.d.ts +25 -0
  323. package/dist/settings/index.js +33 -0
  324. package/dist/stores/categoriesStore.svelte.d.ts +32 -0
  325. package/dist/stores/categoriesStore.svelte.js +77 -0
  326. package/dist/stores/editorStateMachine.svelte.d.ts +42 -0
  327. package/dist/stores/editorStateMachine.svelte.js +132 -0
  328. package/dist/stores/historyStore.svelte.d.ts +136 -0
  329. package/dist/stores/historyStore.svelte.js +207 -0
  330. package/dist/stores/interruptStore.svelte.d.ts +179 -0
  331. package/dist/stores/interruptStore.svelte.js +346 -0
  332. package/dist/stores/playgroundStore.svelte.d.ts +230 -0
  333. package/dist/stores/playgroundStore.svelte.js +515 -0
  334. package/dist/stores/portCoordinateStore.svelte.d.ts +66 -0
  335. package/dist/stores/portCoordinateStore.svelte.js +186 -0
  336. package/dist/stores/settingsStore.svelte.d.ts +158 -0
  337. package/dist/stores/settingsStore.svelte.js +544 -0
  338. package/dist/stores/workflowStore.svelte.d.ts +260 -0
  339. package/dist/stores/workflowStore.svelte.js +649 -0
  340. package/dist/stories/CanvasDecorator.svelte +49 -0
  341. package/dist/stories/CanvasDecorator.svelte.d.ts +8 -0
  342. package/dist/stories/NodeDecorator.svelte +73 -0
  343. package/dist/stories/NodeDecorator.svelte.d.ts +8 -0
  344. package/dist/stories/utils.d.ts +93 -0
  345. package/dist/stories/utils.js +122 -0
  346. package/dist/styles/base.css +1300 -0
  347. package/dist/styles/toast.css +35 -0
  348. package/dist/styles/tokens.css +475 -0
  349. package/dist/svelte-app.d.ts +150 -0
  350. package/dist/svelte-app.js +295 -0
  351. package/dist/types/agentspec.d.ts +318 -0
  352. package/dist/types/agentspec.js +48 -0
  353. package/dist/types/auth.d.ts +263 -0
  354. package/dist/types/auth.js +229 -0
  355. package/dist/types/config.d.ts +151 -0
  356. package/dist/types/config.js +7 -0
  357. package/dist/types/events.d.ts +190 -0
  358. package/dist/types/events.js +30 -0
  359. package/dist/types/index.d.ts +1234 -0
  360. package/dist/types/index.js +27 -0
  361. package/dist/types/interrupt.d.ts +390 -0
  362. package/dist/types/interrupt.js +145 -0
  363. package/dist/types/interruptState.d.ts +211 -0
  364. package/dist/types/interruptState.js +308 -0
  365. package/dist/types/playground.d.ts +351 -0
  366. package/dist/types/playground.js +95 -0
  367. package/dist/types/settings.d.ts +189 -0
  368. package/dist/types/settings.js +97 -0
  369. package/dist/types/uischema.d.ts +144 -0
  370. package/dist/types/uischema.js +51 -0
  371. package/dist/utils/colors.d.ts +288 -0
  372. package/dist/utils/colors.js +548 -0
  373. package/dist/utils/config.d.ts +37 -0
  374. package/dist/utils/config.js +226 -0
  375. package/dist/utils/connections.d.ts +125 -0
  376. package/dist/utils/connections.js +414 -0
  377. package/dist/utils/errors.d.ts +28 -0
  378. package/dist/utils/errors.js +44 -0
  379. package/dist/utils/fetchWithAuth.d.ts +25 -0
  380. package/dist/utils/fetchWithAuth.js +34 -0
  381. package/dist/utils/handleIds.d.ts +35 -0
  382. package/dist/utils/handleIds.js +58 -0
  383. package/dist/utils/handlePositioning.d.ts +31 -0
  384. package/dist/utils/handlePositioning.js +35 -0
  385. package/dist/utils/icons.d.ts +106 -0
  386. package/dist/utils/icons.js +157 -0
  387. package/dist/utils/logger.d.ts +47 -0
  388. package/dist/utils/logger.js +72 -0
  389. package/dist/utils/nodeStatus.d.ts +53 -0
  390. package/dist/utils/nodeStatus.js +183 -0
  391. package/dist/utils/nodeTypes.d.ts +117 -0
  392. package/dist/utils/nodeTypes.js +244 -0
  393. package/dist/utils/nodeWrapper.d.ts +39 -0
  394. package/dist/utils/nodeWrapper.js +62 -0
  395. package/dist/utils/performanceUtils.d.ts +30 -0
  396. package/dist/utils/performanceUtils.js +108 -0
  397. package/dist/utils/sanitize.d.ts +19 -0
  398. package/dist/utils/sanitize.js +31 -0
  399. package/dist/utils/uischema.d.ts +52 -0
  400. package/dist/utils/uischema.js +88 -0
  401. package/dist/utils/validation.d.ts +29 -0
  402. package/dist/utils/validation.js +39 -0
  403. package/package.json +292 -0
@@ -0,0 +1,55 @@
1
+ <script module>
2
+ import { defineMeta } from '@storybook/addon-svelte-csf';
3
+ import NodeDecorator from '../../stories/NodeDecorator.svelte';
4
+ import { createSampleNodeData } from '../../stories/utils.js';
5
+
6
+ const { Story } = defineMeta({
7
+ title: 'Nodes/WorkflowNode',
8
+ tags: ['autodocs'],
9
+ parameters: {
10
+ layout: 'centered'
11
+ }
12
+ });
13
+ </script>
14
+
15
+ <Story name="Default">
16
+ <NodeDecorator
17
+ data={createSampleNodeData({
18
+ label: 'Sub Workflow',
19
+ metadata: {
20
+ id: 'sub-workflow',
21
+ name: 'Sub Workflow',
22
+ description: 'Execute a nested workflow',
23
+ category: 'bundles',
24
+ version: '1.0.0',
25
+ type: 'workflow',
26
+ icon: 'mdi:sitemap',
27
+ inputs: [{ id: 'input', name: 'Input', type: 'input', dataType: 'any', required: false }],
28
+ outputs: [{ id: 'output', name: 'Output', type: 'output', dataType: 'any' }]
29
+ }
30
+ })}
31
+ />
32
+ </Story>
33
+
34
+ <Story name="Selected">
35
+ <NodeDecorator
36
+ data={createSampleNodeData({
37
+ label: 'Data Pipeline',
38
+ metadata: {
39
+ id: 'data-pipeline',
40
+ name: 'Data Pipeline',
41
+ description: 'Process data through a pipeline workflow',
42
+ category: 'bundles',
43
+ version: '1.0.0',
44
+ type: 'workflow',
45
+ icon: 'mdi:pipe',
46
+ inputs: [
47
+ { id: 'data', name: 'Data', type: 'input', dataType: 'any', required: true },
48
+ { id: 'config', name: 'Config', type: 'input', dataType: 'object', required: false }
49
+ ],
50
+ outputs: [{ id: 'result', name: 'Result', type: 'output', dataType: 'any' }]
51
+ }
52
+ })}
53
+ selected={true}
54
+ />
55
+ </Story>
@@ -0,0 +1,26 @@
1
+ export default WorkflowNode;
2
+ type WorkflowNode = SvelteComponent<{
3
+ [x: string]: never;
4
+ }, {
5
+ [evt: string]: CustomEvent<any>;
6
+ }, {}> & {
7
+ $$bindings?: string | undefined;
8
+ };
9
+ declare const WorkflowNode: $$__sveltets_2_IsomorphicComponent<{
10
+ [x: string]: never;
11
+ }, {
12
+ [evt: string]: CustomEvent<any>;
13
+ }, {}, {}, string>;
14
+ interface $$__sveltets_2_IsomorphicComponent<Props extends Record<string, any> = any, Events extends Record<string, any> = any, Slots extends Record<string, any> = any, Exports = {}, Bindings = string> {
15
+ new (options: import("svelte").ComponentConstructorOptions<Props>): import("svelte").SvelteComponent<Props, Events, Slots> & {
16
+ $$bindings?: Bindings;
17
+ } & Exports;
18
+ (internal: unknown, props: {
19
+ $$events?: Events;
20
+ $$slots?: Slots;
21
+ }): Exports & {
22
+ $set?: any;
23
+ $on?: any;
24
+ };
25
+ z_$$bindings?: Bindings;
26
+ }
@@ -0,0 +1,571 @@
1
+ <!--
2
+ Workflow Node Component
3
+ Renders individual nodes in the workflow editor with full functionality
4
+ Uses SvelteFlow's Handle for connection ports
5
+ Styled with BEM syntax
6
+
7
+ UI Extensions Support:
8
+ - hideUnconnectedHandles: Hides ports that are not connected to reduce visual clutter
9
+ -->
10
+
11
+ <script lang="ts">
12
+ import { Position, Handle } from '@xyflow/svelte';
13
+ import type { WorkflowNode, NodePort, DynamicPort } from '../../types/index.js';
14
+ import { dynamicPortToNodePort } from '../../types/index.js';
15
+ import Icon from '@iconify/svelte';
16
+ import { getNodeIcon } from '../../utils/icons.js';
17
+ import {
18
+ getDataTypeColorToken,
19
+ getCategoryColorToken,
20
+ getPortBackgroundColor
21
+ } from '../../utils/colors.js';
22
+ import { getConnectedHandles } from '../../stores/workflowStore.svelte.js';
23
+
24
+ interface Props {
25
+ data: WorkflowNode['data'] & {
26
+ nodeId?: string;
27
+ onConfigOpen?: (node: { id: string; type: string; data: WorkflowNode['data'] }) => void;
28
+ };
29
+ selected?: boolean;
30
+ }
31
+
32
+ let props: Props = $props();
33
+ let isHandleInteraction = $state(false);
34
+
35
+ /**
36
+ * Instance-specific title override from config.
37
+ * Falls back to the original label if not set.
38
+ * This allows users to customize the node title per-instance via config.
39
+ */
40
+ const displayTitle = $derived((props.data.config?.instanceTitle as string) || props.data.label);
41
+
42
+ /**
43
+ * Instance-specific description override from config.
44
+ * Falls back to the metadata description if not set.
45
+ * This allows users to customize the node description per-instance via config.
46
+ */
47
+ const displayDescription = $derived(
48
+ (props.data.config?.instanceDescription as string) || props.data.metadata.description
49
+ );
50
+
51
+ /**
52
+ * Get the hideUnconnectedHandles setting from extensions
53
+ * Merges node type defaults with instance overrides
54
+ */
55
+ const hideUnconnectedHandles = $derived(() => {
56
+ const typeDefault = props.data.metadata?.extensions?.ui?.hideUnconnectedHandles ?? false;
57
+ const instanceOverride = props.data.extensions?.ui?.hideUnconnectedHandles;
58
+ return instanceOverride ?? typeDefault;
59
+ });
60
+
61
+ /**
62
+ * Dynamic inputs from config - user-defined input ports
63
+ * Similar to how branches work in GatewayNode
64
+ */
65
+ const dynamicInputs = $derived(
66
+ ((props.data.config?.dynamicInputs as DynamicPort[]) || []).map((port) =>
67
+ dynamicPortToNodePort(port, 'input')
68
+ )
69
+ );
70
+
71
+ /**
72
+ * Dynamic outputs from config - user-defined output ports
73
+ * Similar to how branches work in GatewayNode
74
+ */
75
+ const dynamicOutputs = $derived(
76
+ ((props.data.config?.dynamicOutputs as DynamicPort[]) || []).map((port) =>
77
+ dynamicPortToNodePort(port, 'output')
78
+ )
79
+ );
80
+
81
+ /**
82
+ * Combined input ports: static metadata inputs + dynamic config inputs
83
+ */
84
+ const allInputPorts = $derived([...props.data.metadata.inputs, ...dynamicInputs]);
85
+
86
+ /**
87
+ * Combined output ports: static metadata outputs + dynamic config outputs
88
+ */
89
+ const allOutputPorts = $derived([...props.data.metadata.outputs, ...dynamicOutputs]);
90
+
91
+ /**
92
+ * Check if a port should be visible based on connection state and settings
93
+ * @param port - The port to check
94
+ * @param type - Whether this is an 'input' or 'output' port
95
+ * @returns true if the port should be visible
96
+ */
97
+ function isPortVisible(port: NodePort, type: 'input' | 'output'): boolean {
98
+ // Always show if hideUnconnectedHandles is disabled
99
+ if (!hideUnconnectedHandles()) {
100
+ return true;
101
+ }
102
+
103
+ // Always show required ports
104
+ if (port.required) {
105
+ return true;
106
+ }
107
+
108
+ // Check if port is connected
109
+ const handleId = `${props.data.nodeId}-${type}-${port.id}`;
110
+ return getConnectedHandles().has(handleId);
111
+ }
112
+
113
+ /**
114
+ * Derived list of visible input ports based on hideUnconnectedHandles setting
115
+ * Now includes both static and dynamic inputs
116
+ */
117
+ const visibleInputPorts = $derived(allInputPorts.filter((port) => isPortVisible(port, 'input')));
118
+
119
+ /**
120
+ * Derived list of visible output ports based on hideUnconnectedHandles setting
121
+ * Now includes both static and dynamic outputs
122
+ */
123
+ const visibleOutputPorts = $derived(
124
+ allOutputPorts.filter((port) => isPortVisible(port, 'output'))
125
+ );
126
+
127
+ /**
128
+ * Handle node click - only handle selection, no config opening
129
+ */
130
+ function handleNodeClick(): void {
131
+ // Node selection is handled by Svelte Flow
132
+ }
133
+
134
+ /**
135
+ * Handle double-click to open config
136
+ */
137
+ function handleDoubleClick(): void {
138
+ openConfigSidebar();
139
+ }
140
+
141
+ /**
142
+ * Handle configuration sidebar - now using global ConfigSidebar
143
+ */
144
+ function openConfigSidebar(): void {
145
+ if (props.data.onConfigOpen) {
146
+ // Create a WorkflowNodeType-like object for the global ConfigSidebar
147
+ const nodeForConfig = {
148
+ id: props.data.nodeId || 'unknown',
149
+ type: 'workflowNode',
150
+ data: props.data
151
+ };
152
+ props.data.onConfigOpen(nodeForConfig);
153
+ }
154
+ }
155
+ </script>
156
+
157
+ <!-- Node Container -->
158
+ <div
159
+ class="flowdrop-workflow-node"
160
+ class:flowdrop-workflow-node--selected={props.selected}
161
+ onclick={handleNodeClick}
162
+ ondblclick={handleDoubleClick}
163
+ onmouseup={() => {
164
+ isHandleInteraction = false;
165
+ }}
166
+ data-handle-interaction={isHandleInteraction}
167
+ role="button"
168
+ tabindex="0"
169
+ onkeydown={(e) => {
170
+ if (e.key === 'Enter' || e.key === ' ') {
171
+ e.preventDefault();
172
+ handleDoubleClick();
173
+ }
174
+ }}
175
+ aria-label="Workflow node: {props.data.metadata.name}"
176
+ aria-describedby="node-description-{props.data.nodeId || 'unknown'}"
177
+ >
178
+ <!-- Default Node Header: expands in multiples of 10 (title row 40px + gap 10px + description 20px per line) -->
179
+ <div class="flowdrop-workflow-node__header">
180
+ <div class="flowdrop-workflow-node__header-title">
181
+ <!-- Node Icon with Squircle Background -->
182
+ <div
183
+ class="flowdrop-workflow-node__icon-wrapper"
184
+ style="--_icon-color: {getCategoryColorToken(props.data.metadata.category)}"
185
+ >
186
+ <Icon
187
+ icon={getNodeIcon(props.data.metadata.icon, props.data.metadata.category)}
188
+ class="flowdrop-workflow-node__icon"
189
+ />
190
+ </div>
191
+
192
+ <!-- Node Title - Icon and Title on same line -->
193
+ <h3 class="flowdrop-text--sm flowdrop-font--medium flowdrop-truncate flowdrop-flex--1">
194
+ {displayTitle}
195
+ </h3>
196
+
197
+ <!-- Status Indicators -->
198
+ <div class="flowdrop-flex flowdrop-gap--2 flowdrop-items--center"></div>
199
+ </div>
200
+ <!-- Node Description - line-height 20px so header grows in steps of 10 -->
201
+ <p
202
+ class="flowdrop-workflow-node__header-desc"
203
+ id="node-description-{props.data.nodeId || 'unknown'}"
204
+ >
205
+ {displayDescription}
206
+ </p>
207
+ </div>
208
+
209
+ <!-- Input Ports Container -->
210
+ {#if visibleInputPorts.length > 0}
211
+ <div class="flowdrop-workflow-node__ports">
212
+ <div class="flowdrop-workflow-node__ports-list">
213
+ {#each visibleInputPorts as port, inputIndex (port.id)}
214
+ <div class="flowdrop-workflow-node__port">
215
+ <!-- Input Handle: centered in row, at node edge (ports have no padding) -->
216
+ <Handle
217
+ type="target"
218
+ position={Position.Left}
219
+ id={`${props.data.nodeId}-input-${port.id}`}
220
+ class="flowdrop-workflow-node__handle"
221
+ style="top: 50%; transform: translateY(-50%); --fd-handle-fill: {getDataTypeColorToken(
222
+ port.dataType
223
+ )}; --fd-handle-border-color: var(--fd-handle-border);"
224
+ role="button"
225
+ tabindex={0}
226
+ aria-label="Connect to {port.name} input port"
227
+ />
228
+
229
+ <!-- Port Info: padding lives here so handle position is simple -->
230
+ <div class="flowdrop-workflow-node__port-content flowdrop-flex--1 flowdrop-min-w--0">
231
+ <div class="flowdrop-flex flowdrop-gap--2">
232
+ <span class="flowdrop-text--xs flowdrop-font--medium">{port.name}</span>
233
+ <span
234
+ class="flowdrop-badge flowdrop-badge--sm"
235
+ style="background-color: {getPortBackgroundColor(
236
+ port.dataType,
237
+ 15
238
+ )}; color: {getDataTypeColorToken(
239
+ port.dataType
240
+ )}; border: 1px solid {getPortBackgroundColor(port.dataType, 30)};"
241
+ >
242
+ {port.dataType}
243
+ </span>
244
+ {#if port.required}
245
+ <span class="flowdrop-badge flowdrop-badge--error flowdrop-badge--sm"
246
+ >Required</span
247
+ >
248
+ {/if}
249
+ </div>
250
+ {#if port.description}
251
+ <p class="flowdrop-text--xs flowdrop-text--gray flowdrop-truncate">
252
+ {port.description}
253
+ </p>
254
+ {/if}
255
+ </div>
256
+ </div>
257
+ {/each}
258
+ </div>
259
+ </div>
260
+ {/if}
261
+
262
+ <!-- Output Ports Container -->
263
+ {#if visibleOutputPorts.length > 0}
264
+ <div class="flowdrop-workflow-node__ports">
265
+ <div class="flowdrop-workflow-node__ports-list">
266
+ {#each visibleOutputPorts as port, outputIndex (port.id)}
267
+ <div class="flowdrop-workflow-node__port">
268
+ <!-- Port Info: padding lives here so handle position is simple -->
269
+ <div
270
+ class="flowdrop-workflow-node__port-content flowdrop-flex--1 flowdrop-min-w--0 flowdrop-text--right"
271
+ >
272
+ <div class="flowdrop-flex flowdrop-gap--2 flowdrop-justify--end">
273
+ <span class="flowdrop-text--xs flowdrop-font--medium">{port.name}</span>
274
+ <span
275
+ class="flowdrop-badge flowdrop-badge--sm"
276
+ style="background-color: {getPortBackgroundColor(
277
+ port.dataType,
278
+ 15
279
+ )}; color: {getDataTypeColorToken(
280
+ port.dataType
281
+ )}; border: 1px solid {getPortBackgroundColor(port.dataType, 30)};"
282
+ >
283
+ {port.dataType}
284
+ </span>
285
+ </div>
286
+ {#if port.description}
287
+ <p class="flowdrop-text--xs flowdrop-text--gray flowdrop-truncate">
288
+ {port.description}
289
+ </p>
290
+ {/if}
291
+ </div>
292
+
293
+ <!-- Output Handle: centered in row, at node edge (ports have no padding) -->
294
+ <Handle
295
+ type="source"
296
+ position={Position.Right}
297
+ id={`${props.data.nodeId}-output-${port.id}`}
298
+ class="flowdrop-workflow-node__handle"
299
+ style="top: 50%; transform: translateY(-50%); --fd-handle-fill: {getDataTypeColorToken(
300
+ port.dataType
301
+ )}; --fd-handle-border-color: var(--fd-handle-border);"
302
+ role="button"
303
+ tabindex={0}
304
+ aria-label="Connect from {port.name} output port"
305
+ />
306
+ </div>
307
+ {/each}
308
+ </div>
309
+ </div>
310
+ {/if}
311
+
312
+ <!-- Config button -->
313
+ <button
314
+ class="flowdrop-workflow-node__config-btn"
315
+ onclick={openConfigSidebar}
316
+ title="Configure node"
317
+ >
318
+ <Icon icon="mdi:cog" />
319
+ </button>
320
+ </div>
321
+
322
+ <style>
323
+ .flowdrop-workflow-node {
324
+ position: relative;
325
+ background-color: var(--fd-card);
326
+ border: 1.5px solid var(--fd-node-border);
327
+ border-radius: var(--fd-radius-xl);
328
+ box-shadow: var(--fd-shadow-md);
329
+ width: var(--fd-node-default-width);
330
+ z-index: 10;
331
+ color: var(--fd-foreground);
332
+ transition: all var(--fd-transition-fast);
333
+ }
334
+
335
+ .flowdrop-workflow-node:hover {
336
+ box-shadow: var(--fd-shadow-lg);
337
+ border-color: var(--fd-node-border-hover);
338
+ }
339
+
340
+ .flowdrop-workflow-node--selected {
341
+ box-shadow:
342
+ 0 0 0 2px var(--fd-primary-muted),
343
+ var(--fd-shadow-lg);
344
+ border-color: var(--fd-primary);
345
+ }
346
+
347
+ .flowdrop-workflow-node--selected:hover {
348
+ box-shadow:
349
+ 0 0 0 2px var(--fd-primary-muted),
350
+ var(--fd-shadow-lg);
351
+ border-color: var(--fd-primary);
352
+ }
353
+
354
+ .flowdrop-workflow-node:focus-visible {
355
+ outline: 2px solid var(--fd-ring);
356
+ outline-offset: 2px;
357
+ }
358
+
359
+ .flowdrop-workflow-node__header {
360
+ box-sizing: border-box;
361
+ padding: var(--fd-node-header-gap) var(--fd-space-xl);
362
+ border-bottom: 1px solid var(--fd-border-muted);
363
+ background: var(--fd-header);
364
+ border-top-left-radius: var(--fd-radius-xl);
365
+ border-top-right-radius: var(--fd-radius-xl);
366
+ display: flex;
367
+ flex-direction: column;
368
+ gap: var(--fd-node-header-gap);
369
+ min-height: calc(
370
+ var(--fd-node-header-gap) * 2 + var(--fd-node-header-title-height) +
371
+ var(--fd-node-header-desc-line)
372
+ );
373
+ }
374
+
375
+ .flowdrop-workflow-node__header-title {
376
+ display: flex;
377
+ align-items: center;
378
+ gap: var(--fd-space-md);
379
+ min-height: var(--fd-node-header-title-height);
380
+ flex-shrink: 0;
381
+ }
382
+
383
+ .flowdrop-workflow-node__header-desc {
384
+ margin: 0;
385
+ font-size: var(--fd-text-xs);
386
+ color: var(--fd-muted-foreground);
387
+ line-height: var(--fd-node-header-desc-line);
388
+ min-height: var(--fd-node-header-desc-line);
389
+ overflow: hidden;
390
+ text-overflow: ellipsis;
391
+ display: -webkit-box;
392
+ -webkit-line-clamp: 3;
393
+ line-clamp: 3;
394
+ -webkit-box-orient: vertical;
395
+ }
396
+
397
+ /* Squircle icon wrapper - Apple-style rounded square background */
398
+ .flowdrop-workflow-node__icon-wrapper {
399
+ display: flex;
400
+ align-items: center;
401
+ justify-content: center;
402
+ width: 2.25rem;
403
+ height: 2.25rem;
404
+ border-radius: 0.5rem;
405
+ background: color-mix(in srgb, var(--_icon-color) var(--fd-node-icon-bg-opacity), transparent);
406
+ flex-shrink: 0;
407
+ transition: all var(--fd-transition-normal);
408
+ }
409
+
410
+ .flowdrop-workflow-node:hover .flowdrop-workflow-node__icon-wrapper {
411
+ background: color-mix(
412
+ in srgb,
413
+ var(--_icon-color) var(--fd-node-icon-bg-opacity-hover),
414
+ transparent
415
+ );
416
+ transform: scale(1.05);
417
+ }
418
+
419
+ .flowdrop-workflow-node__icon-wrapper :global(.flowdrop-workflow-node__icon) {
420
+ width: 1.25rem;
421
+ height: 1.25rem;
422
+ color: var(--fd-node-icon);
423
+ }
424
+
425
+ .flowdrop-workflow-node__header-title h3 {
426
+ margin: 0;
427
+ line-height: 1;
428
+ }
429
+
430
+ @keyframes pulse {
431
+ 0%,
432
+ 100% {
433
+ opacity: 1;
434
+ }
435
+ 50% {
436
+ opacity: 0.5;
437
+ }
438
+ }
439
+
440
+ .flowdrop-workflow-node__ports {
441
+ padding: 0;
442
+ }
443
+
444
+ .flowdrop-workflow-node__ports-list {
445
+ display: flex;
446
+ flex-direction: column;
447
+ gap: var(--fd-node-header-gap);
448
+ padding: var(--fd-node-header-gap) 0;
449
+ }
450
+
451
+ .flowdrop-workflow-node__port {
452
+ display: flex;
453
+ align-items: center;
454
+ gap: 0;
455
+ min-height: var(--fd-node-port-row-height);
456
+ padding: var(--fd-space-3xs) 0;
457
+ position: relative;
458
+ }
459
+
460
+ .flowdrop-workflow-node__port-content {
461
+ padding: 0 var(--fd-space-xl);
462
+ }
463
+
464
+ .flowdrop-badge {
465
+ padding: 0.125rem var(--fd-space-3xs);
466
+ border-radius: var(--fd-radius-sm);
467
+ font-size: 0.625rem;
468
+ font-weight: 500;
469
+ text-transform: uppercase;
470
+ letter-spacing: 0.05em;
471
+ }
472
+
473
+ .flowdrop-badge--error {
474
+ background-color: var(--fd-error);
475
+ color: var(--fd-error-foreground);
476
+ }
477
+
478
+ .flowdrop-badge--sm {
479
+ font-size: 0.625rem;
480
+ padding: 0.125rem var(--fd-space-3xs);
481
+ }
482
+
483
+ /* Handle overrides: hover scale (base 20px/12px from base.css) */
484
+ :global(.flowdrop-workflow-node__handle:hover) {
485
+ transform: translateY(-50%) scale(1.2);
486
+ }
487
+
488
+ /* Utility classes */
489
+ .flowdrop-flex {
490
+ display: flex;
491
+ }
492
+
493
+ .flowdrop-flex--1 {
494
+ flex: 1;
495
+ }
496
+
497
+ .flowdrop-gap--2 {
498
+ gap: var(--fd-space-xs);
499
+ }
500
+
501
+ .flowdrop-items--center {
502
+ align-items: center;
503
+ }
504
+
505
+ .flowdrop-justify--end {
506
+ justify-content: flex-end;
507
+ }
508
+
509
+ .flowdrop-min-w--0 {
510
+ min-width: 0;
511
+ }
512
+
513
+ .flowdrop-text--xs {
514
+ font-size: var(--fd-text-xs);
515
+ line-height: 1rem;
516
+ }
517
+
518
+ .flowdrop-text--sm {
519
+ font-size: var(--fd-text-sm);
520
+ line-height: 1.25rem;
521
+ }
522
+
523
+ .flowdrop-text--gray {
524
+ color: var(--fd-muted-foreground);
525
+ }
526
+
527
+ .flowdrop-font--medium {
528
+ font-weight: 500;
529
+ }
530
+
531
+ .flowdrop-truncate {
532
+ overflow: hidden;
533
+ text-overflow: ellipsis;
534
+ white-space: nowrap;
535
+ }
536
+
537
+ .flowdrop-text--right {
538
+ text-align: right;
539
+ }
540
+
541
+ .flowdrop-workflow-node__config-btn {
542
+ position: absolute;
543
+ top: var(--fd-space-xs);
544
+ right: var(--fd-space-xs);
545
+ width: 1.5rem;
546
+ height: 1.5rem;
547
+ background-color: var(--fd-backdrop);
548
+ border: 1px solid var(--fd-border);
549
+ border-radius: var(--fd-radius-sm);
550
+ color: var(--fd-muted-foreground);
551
+ cursor: pointer;
552
+ display: flex;
553
+ align-items: center;
554
+ justify-content: center;
555
+ opacity: 0;
556
+ transition: all var(--fd-transition-normal);
557
+ backdrop-filter: var(--fd-backdrop-blur);
558
+ z-index: 15;
559
+ font-size: var(--fd-text-sm);
560
+ }
561
+
562
+ .flowdrop-workflow-node:hover .flowdrop-workflow-node__config-btn {
563
+ opacity: 1;
564
+ }
565
+
566
+ .flowdrop-workflow-node__config-btn:hover {
567
+ background-color: var(--fd-muted);
568
+ border-color: var(--fd-border-strong);
569
+ color: var(--fd-foreground);
570
+ }
571
+ </style>
@@ -0,0 +1,15 @@
1
+ import type { WorkflowNode } from '../../types/index.js';
2
+ interface Props {
3
+ data: WorkflowNode['data'] & {
4
+ nodeId?: string;
5
+ onConfigOpen?: (node: {
6
+ id: string;
7
+ type: string;
8
+ data: WorkflowNode['data'];
9
+ }) => void;
10
+ };
11
+ selected?: boolean;
12
+ }
13
+ declare const WorkflowNode: import("svelte").Component<Props, {}, "">;
14
+ type WorkflowNode = ReturnType<typeof WorkflowNode>;
15
+ export default WorkflowNode;