@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,14 +5,14 @@
5
5
  -->
6
6
 
7
7
  <script lang="ts">
8
- import { onMount } from "svelte";
9
- import App from "./App.svelte";
10
- import LogsSidebar from "./LogsSidebar.svelte";
11
- import { EnhancedFlowDropApiClient } from "../api/enhanced-client.js";
12
- import { createEndpointConfig } from "../config/endpoints.js";
13
- import type { Workflow } from "../types/index.js";
14
- import type { EndpointConfig } from "../config/endpoints.js";
15
- import { logger } from "../utils/logger.js";
8
+ import { onMount } from 'svelte';
9
+ import App from './App.svelte';
10
+ import LogsSidebar from './LogsSidebar.svelte';
11
+ import { EnhancedFlowDropApiClient } from '../api/enhanced-client.js';
12
+ import { createEndpointConfig } from '../config/endpoints.js';
13
+ import type { Workflow } from '../types/index.js';
14
+ import type { EndpointConfig } from '../config/endpoints.js';
15
+ import { logger } from '../utils/logger.js';
16
16
 
17
17
  interface Props {
18
18
  pipelineId: string;
@@ -25,31 +25,25 @@
25
25
  label: string;
26
26
  href: string;
27
27
  icon?: string;
28
- variant?: "primary" | "secondary" | "outline";
28
+ variant?: 'primary' | 'secondary' | 'outline';
29
29
  onclick?: (event: Event) => void;
30
- }>,
30
+ }>
31
31
  ) => void;
32
32
  }
33
33
 
34
- let {
35
- pipelineId,
36
- workflow,
37
- apiClient,
38
- baseUrl,
39
- endpointConfig,
40
- onActionsReady,
41
- }: Props = $props();
34
+ let { pipelineId, workflow, apiClient, baseUrl, endpointConfig, onActionsReady }: Props =
35
+ $props();
42
36
 
43
37
  // Initialize API client if not provided
44
38
  // svelte-ignore state_referenced_locally — client created once from props
45
39
  const client =
46
40
  apiClient ||
47
41
  new EnhancedFlowDropApiClient(
48
- endpointConfig ?? createEndpointConfig(baseUrl || "/api/flowdrop"),
42
+ endpointConfig ?? createEndpointConfig(baseUrl || '/api/flowdrop')
49
43
  );
50
44
 
51
45
  // Pipeline status and job data
52
- let pipelineStatus = $state<string>("unknown");
46
+ let pipelineStatus = $state<string>('unknown');
53
47
  interface PipelineNodeStatus {
54
48
  status: string;
55
49
  [key: string]: unknown;
@@ -75,23 +69,19 @@
75
69
  running: 0,
76
70
  completed: 0,
77
71
  failed: 0,
78
- cancelled: 0,
79
- },
72
+ cancelled: 0
73
+ }
80
74
  });
81
75
 
82
76
  // Node statuses for visual indicators
83
- let nodeStatuses = $state<
84
- Record<string, "pending" | "running" | "completed" | "error">
85
- >({});
77
+ let nodeStatuses = $state<Record<string, 'pending' | 'running' | 'completed' | 'error'>>({});
86
78
 
87
79
  // Loading and error states
88
80
  let isLoadingJobStatus = $state(false);
89
81
 
90
82
  // Logs sidebar state
91
83
  let isLogsSidebarOpen = $state(false);
92
- let logs = $state<
93
- Array<{ level: string; message: string; timestamp: string }>
94
- >([]);
84
+ let logs = $state<Array<{ level: string; message: string; timestamp: string }>>([]);
95
85
 
96
86
  /**
97
87
  * Fetch pipeline data including job information
@@ -113,50 +103,38 @@
113
103
  running: 0,
114
104
  completed: 0,
115
105
  failed: 0,
116
- cancelled: 0,
117
- },
106
+ cancelled: 0
107
+ }
118
108
  };
119
109
 
120
110
  // Update node statuses based on job data
121
111
  if (jobStatusData.node_statuses) {
122
- const newNodeStatuses: Record<
123
- string,
124
- "pending" | "running" | "completed" | "error"
125
- > = {};
112
+ const newNodeStatuses: Record<string, 'pending' | 'running' | 'completed' | 'error'> = {};
126
113
 
127
114
  // Initialize all nodes as pending
128
115
  if (workflow && workflow.nodes) {
129
116
  workflow.nodes.forEach((node) => {
130
- newNodeStatuses[node.id] = "pending";
117
+ newNodeStatuses[node.id] = 'pending';
131
118
  });
132
119
  }
133
120
 
134
121
  // Override with actual job statuses
135
122
  for (const nodeId in jobStatusData.node_statuses) {
136
123
  const status = jobStatusData.node_statuses[nodeId].status;
137
- if (
138
- ["pending", "running", "completed", "failed", "cancelled"].includes(
139
- status,
140
- )
141
- ) {
124
+ if (['pending', 'running', 'completed', 'failed', 'cancelled'].includes(status)) {
142
125
  newNodeStatuses[nodeId] =
143
- status === "failed"
144
- ? "error"
145
- : (status as "pending" | "running" | "completed");
126
+ status === 'failed' ? 'error' : (status as 'pending' | 'running' | 'completed');
146
127
  }
147
128
  }
148
129
  nodeStatuses = newNodeStatuses;
149
130
  }
150
131
 
151
- addLog(
152
- "info",
153
- `Job status updated: ${jobStatusData.status_summary.total} total jobs`,
154
- );
132
+ addLog('info', `Job status updated: ${jobStatusData.status_summary.total} total jobs`);
155
133
  } catch (error) {
156
- logger.error("Failed to fetch pipeline data:", error);
134
+ logger.error('Failed to fetch pipeline data:', error);
157
135
  addLog(
158
- "error",
159
- `Failed to fetch pipeline data: ${error instanceof Error ? error.message : "Unknown error"}`,
136
+ 'error',
137
+ `Failed to fetch pipeline data: ${error instanceof Error ? error.message : 'Unknown error'}`
160
138
  );
161
139
  } finally {
162
140
  isLoadingJobStatus = false;
@@ -172,8 +150,8 @@
172
150
  {
173
151
  level,
174
152
  message,
175
- timestamp: new Date().toISOString(),
176
- },
153
+ timestamp: new Date().toISOString()
154
+ }
177
155
  ];
178
156
  }
179
157
 
@@ -190,25 +168,25 @@
190
168
  function getPipelineActions() {
191
169
  return [
192
170
  {
193
- label: isLoadingJobStatus ? "Refreshing..." : "Refresh Status",
194
- href: "#refresh",
195
- icon: isLoadingJobStatus ? "mdi:loading" : "mdi:refresh",
196
- variant: "outline" as const,
171
+ label: isLoadingJobStatus ? 'Refreshing...' : 'Refresh Status',
172
+ href: '#refresh',
173
+ icon: isLoadingJobStatus ? 'mdi:loading' : 'mdi:refresh',
174
+ variant: 'outline' as const,
197
175
  onclick: (e: Event) => {
198
176
  e.preventDefault();
199
177
  fetchPipelineData();
200
- },
178
+ }
201
179
  },
202
180
  {
203
- label: "View Logs",
204
- href: "#logs",
205
- icon: "mdi:file-document-outline",
206
- variant: "outline" as const,
181
+ label: 'View Logs',
182
+ href: '#logs',
183
+ icon: 'mdi:file-document-outline',
184
+ variant: 'outline' as const,
207
185
  onclick: (e: Event) => {
208
186
  e.preventDefault();
209
187
  toggleLogsSidebar();
210
- },
211
- },
188
+ }
189
+ }
212
190
  ];
213
191
  }
214
192
 
@@ -224,12 +202,12 @@
224
202
  const handleRefresh = () => fetchPipelineData();
225
203
  const handleViewLogs = () => toggleLogsSidebar();
226
204
 
227
- window.addEventListener("pipeline-refresh", handleRefresh);
228
- window.addEventListener("pipeline-view-logs", handleViewLogs);
205
+ window.addEventListener('pipeline-refresh', handleRefresh);
206
+ window.addEventListener('pipeline-view-logs', handleViewLogs);
229
207
 
230
208
  return () => {
231
- window.removeEventListener("pipeline-refresh", handleRefresh);
232
- window.removeEventListener("pipeline-view-logs", handleViewLogs);
209
+ window.removeEventListener('pipeline-refresh', handleRefresh);
210
+ window.removeEventListener('pipeline-view-logs', handleViewLogs);
233
211
  };
234
212
  });
235
213
 
@@ -238,35 +216,35 @@
238
216
  if (pipelineStatus && pipelineId && workflow) {
239
217
  const breadcrumbs = [
240
218
  {
241
- label: "Home",
242
- href: "/",
243
- icon: "mdi:home",
219
+ label: 'Home',
220
+ href: '/',
221
+ icon: 'mdi:home'
244
222
  },
245
223
  {
246
- label: "Workflows",
247
- href: "/",
248
- icon: "mdi:view-list",
224
+ label: 'Workflows',
225
+ href: '/',
226
+ icon: 'mdi:view-list'
249
227
  },
250
228
  {
251
- label: workflow.name || "Workflow",
229
+ label: workflow.name || 'Workflow',
252
230
  href: `/workflow/${workflow.id}/edit`,
253
- icon: "mdi:workflow",
231
+ icon: 'mdi:workflow'
254
232
  },
255
233
  {
256
- label: "Pipelines",
234
+ label: 'Pipelines',
257
235
  href: `/workflow/${workflow.id}/pipelines`,
258
- icon: "mdi:source-branch",
236
+ icon: 'mdi:source-branch'
259
237
  },
260
238
  {
261
239
  label: `Pipeline ${pipelineId} - ${pipelineStatus}`,
262
- icon: "mdi:play-circle",
263
- },
240
+ icon: 'mdi:play-circle'
241
+ }
264
242
  ];
265
243
 
266
244
  window.dispatchEvent(
267
- new CustomEvent("page-breadcrumbs-update", {
268
- detail: { breadcrumbs },
269
- }),
245
+ new CustomEvent('page-breadcrumbs-update', {
246
+ detail: { breadcrumbs }
247
+ })
270
248
  );
271
249
  }
272
250
  });
@@ -289,7 +267,7 @@
289
267
  }
290
268
 
291
269
  // Only start polling if pipeline is running
292
- if (pipelineStatus === "running" && pipelineId) {
270
+ if (pipelineStatus === 'running' && pipelineId) {
293
271
  refreshInterval = setInterval(() => {
294
272
  fetchPipelineData();
295
273
  }, 5000);
@@ -317,11 +295,7 @@
317
295
 
318
296
  <!-- Logs Sidebar -->
319
297
  {#if isLogsSidebarOpen}
320
- <LogsSidebar
321
- {logs}
322
- isOpen={isLogsSidebarOpen}
323
- onClose={() => (isLogsSidebarOpen = false)}
324
- />
298
+ <LogsSidebar {logs} isOpen={isLogsSidebarOpen} onClose={() => (isLogsSidebarOpen = false)} />
325
299
  {/if}
326
300
  </div>
327
301
 
@@ -334,7 +308,7 @@
334
308
  }
335
309
 
336
310
  /* Dark mode override */
337
- :global([data-theme="dark"]) .pipeline-status-container {
311
+ :global([data-theme='dark']) .pipeline-status-container {
338
312
  background: linear-gradient(135deg, #141418 0%, #1a1a2e 50%, #16162a 100%);
339
313
  }
340
314
  </style>
@@ -1,6 +1,6 @@
1
- import { EnhancedFlowDropApiClient } from "../api/enhanced-client.js";
2
- import type { Workflow } from "../types/index.js";
3
- import type { EndpointConfig } from "../config/endpoints.js";
1
+ import { EnhancedFlowDropApiClient } from '../api/enhanced-client.js';
2
+ import type { Workflow } from '../types/index.js';
3
+ import type { EndpointConfig } from '../config/endpoints.js';
4
4
  interface Props {
5
5
  pipelineId: string;
6
6
  workflow: Workflow;
@@ -11,7 +11,7 @@ interface Props {
11
11
  label: string;
12
12
  href: string;
13
13
  icon?: string;
14
- variant?: "primary" | "secondary" | "outline";
14
+ variant?: 'primary' | 'secondary' | 'outline';
15
15
  onclick?: (event: Event) => void;
16
16
  }>) => void;
17
17
  }
@@ -8,12 +8,12 @@
8
8
  -->
9
9
 
10
10
  <script lang="ts">
11
- import { useSvelteFlow, type InternalNode } from "@xyflow/svelte";
12
- import type { WorkflowNode as WorkflowNodeType } from "../types/index.js";
11
+ import { useSvelteFlow, type InternalNode } from '@xyflow/svelte';
12
+ import type { WorkflowNode as WorkflowNodeType } from '../types/index.js';
13
13
  import {
14
14
  rebuildAllPortCoordinates,
15
- updateNodePortCoordinates,
16
- } from "../stores/portCoordinateStore.svelte.js";
15
+ updateNodePortCoordinates
16
+ } from '../stores/portCoordinateStore.svelte.js';
17
17
 
18
18
  interface Props {
19
19
  /** Node to update coordinates for (e.g., during drag). Set to null when not dragging. */
@@ -29,9 +29,7 @@
29
29
  const { getInternalNode } = useSvelteFlow();
30
30
 
31
31
  // Cast the getInternalNode function for our use
32
- const getInternal = getInternalNode as (
33
- id: string,
34
- ) => InternalNode | undefined;
32
+ const getInternal = getInternalNode as (id: string) => InternalNode | undefined;
35
33
 
36
34
  /**
37
35
  * Rebuild all port coordinates when rebuildTrigger changes.
@@ -1,4 +1,4 @@
1
- import type { WorkflowNode as WorkflowNodeType } from "../types/index.js";
1
+ import type { WorkflowNode as WorkflowNodeType } from '../types/index.js';
2
2
  interface Props {
3
3
  /** Node to update coordinates for (e.g., during drag). Set to null when not dragging. */
4
4
  nodeToUpdate: WorkflowNodeType | null;
@@ -0,0 +1,205 @@
1
+ <!--
2
+ PortMappingRow Component
3
+ A single row in the port mapping editor showing an old port → new port dropdown.
4
+ Styled with BEM syntax.
5
+ -->
6
+
7
+ <script lang="ts">
8
+ import type { NodePort } from '../types/index.js';
9
+ import type { EditablePortMapping, MatchQuality } from '../utils/nodeSwap.js';
10
+
11
+ interface Props {
12
+ mapping: EditablePortMapping;
13
+ availablePorts: NodePort[];
14
+ usedPortIds: Set<string>;
15
+ onUpdate: (newPortId: string | null) => void;
16
+ onReset: () => void;
17
+ }
18
+
19
+ const { mapping, availablePorts, usedPortIds, onUpdate, onReset }: Props = $props();
20
+
21
+ const QUALITY_LABELS: Record<MatchQuality, string> = {
22
+ id: 'ID match',
23
+ name: 'Name match',
24
+ type: 'Type match',
25
+ manual: 'Manual',
26
+ unmapped: 'No match'
27
+ };
28
+
29
+ const QUALITY_CLASSES: Record<MatchQuality, string> = {
30
+ id: 'port-mapping-row__badge--id',
31
+ name: 'port-mapping-row__badge--name',
32
+ type: 'port-mapping-row__badge--type',
33
+ manual: 'port-mapping-row__badge--manual',
34
+ unmapped: 'port-mapping-row__badge--unmapped'
35
+ };
36
+
37
+ function handleChange(event: Event): void {
38
+ const select = event.target as HTMLSelectElement;
39
+ const value = select.value;
40
+ onUpdate(value === '__drop__' ? null : value);
41
+ }
42
+ </script>
43
+
44
+ <div class="port-mapping-row">
45
+ <div class="port-mapping-row__info">
46
+ <span class="port-mapping-row__port-name">{mapping.oldPort.name}</span>
47
+ <span class="port-mapping-row__port-type">({mapping.oldPort.dataType})</span>
48
+ </div>
49
+
50
+ <div class="port-mapping-row__arrow">&rarr;</div>
51
+
52
+ <div class="port-mapping-row__select-wrapper">
53
+ <select
54
+ class="port-mapping-row__select"
55
+ class:port-mapping-row__select--dropped={!mapping.selectedNewPortId}
56
+ value={mapping.selectedNewPortId ?? '__drop__'}
57
+ onchange={handleChange}
58
+ >
59
+ <option value="__drop__">(Drop connection)</option>
60
+ {#each availablePorts as port (port.id)}
61
+ <option
62
+ value={port.id}
63
+ disabled={usedPortIds.has(port.id) && port.id !== mapping.selectedNewPortId}
64
+ >
65
+ {port.name} ({port.dataType}){usedPortIds.has(port.id) &&
66
+ port.id !== mapping.selectedNewPortId
67
+ ? ' (in use)'
68
+ : ''}
69
+ </option>
70
+ {/each}
71
+ </select>
72
+ </div>
73
+
74
+ <div class="port-mapping-row__meta">
75
+ <span class="port-mapping-row__badge {QUALITY_CLASSES[mapping.matchQuality]}">
76
+ {QUALITY_LABELS[mapping.matchQuality]}
77
+ </span>
78
+ {#if mapping.isOverridden}
79
+ <button class="port-mapping-row__reset" onclick={onReset} type="button"> reset </button>
80
+ {/if}
81
+ </div>
82
+ </div>
83
+
84
+ <style>
85
+ .port-mapping-row {
86
+ display: flex;
87
+ align-items: center;
88
+ gap: var(--fd-space-xs);
89
+ padding: var(--fd-space-xs) 0;
90
+ font-size: var(--fd-text-xs);
91
+ }
92
+
93
+ .port-mapping-row__info {
94
+ flex: 0 0 auto;
95
+ min-width: 0;
96
+ display: flex;
97
+ align-items: baseline;
98
+ gap: var(--fd-space-3xs);
99
+ }
100
+
101
+ .port-mapping-row__port-name {
102
+ font-weight: 500;
103
+ color: var(--fd-foreground);
104
+ white-space: nowrap;
105
+ overflow: hidden;
106
+ text-overflow: ellipsis;
107
+ }
108
+
109
+ .port-mapping-row__port-type {
110
+ color: var(--fd-muted-foreground);
111
+ font-size: var(--fd-text-xs);
112
+ }
113
+
114
+ .port-mapping-row__arrow {
115
+ flex-shrink: 0;
116
+ color: var(--fd-muted-foreground);
117
+ }
118
+
119
+ .port-mapping-row__select-wrapper {
120
+ flex: 1;
121
+ min-width: 0;
122
+ }
123
+
124
+ .port-mapping-row__select {
125
+ width: 100%;
126
+ padding: 0.25rem 0.375rem;
127
+ border: 1px solid var(--fd-border);
128
+ border-radius: var(--fd-radius-sm);
129
+ background-color: var(--fd-background);
130
+ color: var(--fd-foreground);
131
+ font-size: var(--fd-text-xs);
132
+ cursor: pointer;
133
+ transition:
134
+ border-color var(--fd-transition-normal),
135
+ box-shadow var(--fd-transition-normal);
136
+ }
137
+
138
+ .port-mapping-row__select:focus {
139
+ outline: none;
140
+ border-color: var(--fd-ring);
141
+ box-shadow: 0 0 0 3px color-mix(in srgb, var(--fd-ring) 20%, transparent);
142
+ }
143
+
144
+ .port-mapping-row__select--dropped {
145
+ border-color: var(--fd-warning);
146
+ color: var(--fd-warning);
147
+ }
148
+
149
+ .port-mapping-row__meta {
150
+ flex-shrink: 0;
151
+ display: flex;
152
+ align-items: center;
153
+ gap: var(--fd-space-3xs);
154
+ }
155
+
156
+ .port-mapping-row__badge {
157
+ font-size: var(--fd-text-xs);
158
+ padding: 0.0625rem 0.375rem;
159
+ border-radius: var(--fd-radius-sm);
160
+ font-weight: 600;
161
+ text-transform: uppercase;
162
+ letter-spacing: 0.03em;
163
+ white-space: nowrap;
164
+ }
165
+
166
+ .port-mapping-row__badge--id {
167
+ background-color: color-mix(in srgb, var(--fd-success) 15%, transparent);
168
+ color: var(--fd-success);
169
+ }
170
+
171
+ .port-mapping-row__badge--name {
172
+ background-color: color-mix(in srgb, var(--fd-primary) 15%, transparent);
173
+ color: var(--fd-primary);
174
+ }
175
+
176
+ .port-mapping-row__badge--type {
177
+ background-color: color-mix(in srgb, var(--fd-warning) 15%, transparent);
178
+ color: var(--fd-warning);
179
+ }
180
+
181
+ .port-mapping-row__badge--manual {
182
+ background-color: color-mix(in srgb, #a855f7 15%, transparent);
183
+ color: #a855f7;
184
+ }
185
+
186
+ .port-mapping-row__badge--unmapped {
187
+ background-color: color-mix(in srgb, var(--fd-error) 15%, transparent);
188
+ color: var(--fd-error);
189
+ }
190
+
191
+ .port-mapping-row__reset {
192
+ background: none;
193
+ border: none;
194
+ cursor: pointer;
195
+ color: var(--fd-muted-foreground);
196
+ font-size: var(--fd-text-xs);
197
+ text-decoration: underline;
198
+ padding: 0;
199
+ transition: color var(--fd-transition-fast);
200
+ }
201
+
202
+ .port-mapping-row__reset:hover {
203
+ color: var(--fd-primary);
204
+ }
205
+ </style>
@@ -0,0 +1,12 @@
1
+ import type { NodePort } from '../types/index.js';
2
+ import type { EditablePortMapping } from '../utils/nodeSwap.js';
3
+ interface Props {
4
+ mapping: EditablePortMapping;
5
+ availablePorts: NodePort[];
6
+ usedPortIds: Set<string>;
7
+ onUpdate: (newPortId: string | null) => void;
8
+ onReset: () => void;
9
+ }
10
+ declare const PortMappingRow: import("svelte").Component<Props, {}, "">;
11
+ type PortMappingRow = ReturnType<typeof PortMappingRow>;
12
+ export default PortMappingRow;
@@ -129,7 +129,7 @@
129
129
 
130
130
  .readonly-details__id {
131
131
  font-size: 0.75rem;
132
- font-family: ui-monospace, SFMono-Regular, "SF Mono", Menlo, monospace;
132
+ font-family: ui-monospace, SFMono-Regular, 'SF Mono', Menlo, monospace;
133
133
  color: var(--fd-muted-foreground);
134
134
  background-color: var(--fd-subtle);
135
135
  padding: 0.125rem 0.375rem;