@flowdrop/flowdrop 1.0.0 → 1.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (388) hide show
  1. package/README.md +50 -50
  2. package/dist/adapters/WorkflowAdapter.d.ts +1 -1
  3. package/dist/adapters/WorkflowAdapter.js +25 -25
  4. package/dist/adapters/agentspec/AgentSpecAdapter.d.ts +2 -2
  5. package/dist/adapters/agentspec/AgentSpecAdapter.js +133 -122
  6. package/dist/adapters/agentspec/agentAdapter.d.ts +2 -2
  7. package/dist/adapters/agentspec/agentAdapter.js +10 -10
  8. package/dist/adapters/agentspec/autoLayout.d.ts +1 -1
  9. package/dist/adapters/agentspec/autoLayout.js +2 -2
  10. package/dist/adapters/agentspec/componentTypeDefaults.d.ts +1 -1
  11. package/dist/adapters/agentspec/componentTypeDefaults.js +120 -120
  12. package/dist/adapters/agentspec/defaultNodeTypes.d.ts +2 -2
  13. package/dist/adapters/agentspec/defaultNodeTypes.js +307 -307
  14. package/dist/adapters/agentspec/index.d.ts +10 -10
  15. package/dist/adapters/agentspec/index.js +6 -6
  16. package/dist/adapters/agentspec/validator.d.ts +2 -2
  17. package/dist/adapters/agentspec/validator.js +22 -20
  18. package/dist/api/enhanced-client.d.ts +3 -3
  19. package/dist/api/enhanced-client.js +73 -72
  20. package/dist/components/App.svelte +1081 -961
  21. package/dist/components/App.svelte.d.ts +9 -6
  22. package/dist/components/CanvasBanner.stories.svelte +23 -20
  23. package/dist/components/CanvasBanner.stories.svelte.d.ts +1 -1
  24. package/dist/components/CanvasBanner.svelte +46 -46
  25. package/dist/components/ConfigForm.svelte +1164 -1065
  26. package/dist/components/ConfigForm.svelte.d.ts +2 -2
  27. package/dist/components/ConfigModal.svelte +180 -180
  28. package/dist/components/ConfigModal.svelte.d.ts +1 -1
  29. package/dist/components/ConfigPanel.stories.svelte +35 -35
  30. package/dist/components/ConfigPanel.stories.svelte.d.ts +1 -1
  31. package/dist/components/ConfigPanel.svelte +178 -167
  32. package/dist/components/ConfigPanel.svelte.d.ts +1 -1
  33. package/dist/components/ConnectionLine.svelte +25 -25
  34. package/dist/components/EdgeRefresher.svelte +26 -26
  35. package/dist/components/FlowDropEdge.stories.svelte +197 -0
  36. package/dist/components/FlowDropEdge.stories.svelte.d.ts +26 -0
  37. package/dist/components/FlowDropEdge.svelte +168 -0
  38. package/dist/components/FlowDropEdge.svelte.d.ts +4 -0
  39. package/dist/components/FlowDropZone.svelte +63 -60
  40. package/dist/components/FlowDropZone.svelte.d.ts +1 -1
  41. package/dist/components/LoadingSpinner.stories.svelte +19 -19
  42. package/dist/components/LoadingSpinner.stories.svelte.d.ts +1 -1
  43. package/dist/components/LoadingSpinner.svelte +21 -21
  44. package/dist/components/LoadingSpinner.svelte.d.ts +1 -1
  45. package/dist/components/Logo.stories.svelte +13 -13
  46. package/dist/components/Logo.stories.svelte.d.ts +1 -1
  47. package/dist/components/Logo.svelte +101 -95
  48. package/dist/components/LogsSidebar.svelte +553 -546
  49. package/dist/components/LogsSidebar.svelte.d.ts +1 -1
  50. package/dist/components/MarkdownDisplay.stories.svelte +29 -23
  51. package/dist/components/MarkdownDisplay.stories.svelte.d.ts +1 -1
  52. package/dist/components/MarkdownDisplay.svelte +16 -14
  53. package/dist/components/Navbar.stories.svelte +43 -38
  54. package/dist/components/Navbar.stories.svelte.d.ts +1 -1
  55. package/dist/components/Navbar.svelte +760 -706
  56. package/dist/components/Navbar.svelte.d.ts +1 -1
  57. package/dist/components/NodeSidebar.svelte +900 -746
  58. package/dist/components/NodeSidebar.svelte.d.ts +3 -1
  59. package/dist/components/NodeStatusOverlay.stories.svelte +82 -70
  60. package/dist/components/NodeStatusOverlay.stories.svelte.d.ts +1 -1
  61. package/dist/components/NodeStatusOverlay.svelte +295 -280
  62. package/dist/components/NodeStatusOverlay.svelte.d.ts +3 -3
  63. package/dist/components/PipelineStatus.svelte +326 -300
  64. package/dist/components/PipelineStatus.svelte.d.ts +4 -4
  65. package/dist/components/PortCoordinateTracker.svelte +49 -47
  66. package/dist/components/PortCoordinateTracker.svelte.d.ts +1 -1
  67. package/dist/components/ReadOnlyDetails.svelte +156 -156
  68. package/dist/components/SchemaForm.stories.svelte +106 -98
  69. package/dist/components/SchemaForm.stories.svelte.d.ts +1 -1
  70. package/dist/components/SchemaForm.svelte +490 -463
  71. package/dist/components/SchemaForm.svelte.d.ts +2 -2
  72. package/dist/components/SettingsModal.svelte +226 -223
  73. package/dist/components/SettingsModal.svelte.d.ts +1 -1
  74. package/dist/components/SettingsPanel.svelte +637 -601
  75. package/dist/components/SettingsPanel.svelte.d.ts +1 -1
  76. package/dist/components/StatusIcon.stories.svelte +62 -49
  77. package/dist/components/StatusIcon.stories.svelte.d.ts +1 -1
  78. package/dist/components/StatusIcon.svelte +87 -87
  79. package/dist/components/StatusIcon.svelte.d.ts +2 -2
  80. package/dist/components/StatusLabel.stories.svelte +12 -12
  81. package/dist/components/StatusLabel.stories.svelte.d.ts +1 -1
  82. package/dist/components/StatusLabel.svelte +19 -19
  83. package/dist/components/ThemeToggle.stories.svelte +16 -16
  84. package/dist/components/ThemeToggle.stories.svelte.d.ts +1 -1
  85. package/dist/components/ThemeToggle.svelte +180 -169
  86. package/dist/components/ThemeToggle.svelte.d.ts +1 -1
  87. package/dist/components/UniversalNode.svelte +150 -138
  88. package/dist/components/UniversalNode.svelte.d.ts +3 -3
  89. package/dist/components/WorkflowEditor.svelte +1069 -1007
  90. package/dist/components/WorkflowEditor.svelte.d.ts +4 -4
  91. package/dist/components/form/FormArray.svelte +1034 -973
  92. package/dist/components/form/FormArray.svelte.d.ts +1 -1
  93. package/dist/components/form/FormAutocomplete.svelte +1021 -978
  94. package/dist/components/form/FormAutocomplete.svelte.d.ts +1 -1
  95. package/dist/components/form/FormCheckboxGroup.stories.svelte +23 -20
  96. package/dist/components/form/FormCheckboxGroup.stories.svelte.d.ts +1 -1
  97. package/dist/components/form/FormCheckboxGroup.svelte +136 -136
  98. package/dist/components/form/FormCodeEditor.svelte +452 -434
  99. package/dist/components/form/FormField.svelte +366 -355
  100. package/dist/components/form/FormField.svelte.d.ts +2 -2
  101. package/dist/components/form/FormFieldLight.svelte +400 -384
  102. package/dist/components/form/FormFieldLight.svelte.d.ts +1 -1
  103. package/dist/components/form/FormFieldWrapper.stories.svelte +42 -42
  104. package/dist/components/form/FormFieldWrapper.stories.svelte.d.ts +1 -1
  105. package/dist/components/form/FormFieldWrapper.svelte +100 -93
  106. package/dist/components/form/FormFieldWrapper.svelte.d.ts +1 -1
  107. package/dist/components/form/FormFieldset.svelte +108 -108
  108. package/dist/components/form/FormFieldset.svelte.d.ts +2 -2
  109. package/dist/components/form/FormMarkdownEditor.svelte +758 -725
  110. package/dist/components/form/FormNumberField.stories.svelte +25 -25
  111. package/dist/components/form/FormNumberField.stories.svelte.d.ts +1 -1
  112. package/dist/components/form/FormNumberField.svelte +88 -88
  113. package/dist/components/form/FormRangeField.stories.svelte +20 -20
  114. package/dist/components/form/FormRangeField.stories.svelte.d.ts +1 -1
  115. package/dist/components/form/FormRangeField.svelte +234 -226
  116. package/dist/components/form/FormSelect.stories.svelte +38 -38
  117. package/dist/components/form/FormSelect.stories.svelte.d.ts +1 -1
  118. package/dist/components/form/FormSelect.svelte +101 -101
  119. package/dist/components/form/FormSelect.svelte.d.ts +1 -1
  120. package/dist/components/form/FormTemplateEditor.svelte +847 -798
  121. package/dist/components/form/FormTemplateEditor.svelte.d.ts +1 -1
  122. package/dist/components/form/FormTextField.stories.svelte +29 -23
  123. package/dist/components/form/FormTextField.stories.svelte.d.ts +1 -1
  124. package/dist/components/form/FormTextField.svelte +68 -68
  125. package/dist/components/form/FormTextarea.stories.svelte +28 -25
  126. package/dist/components/form/FormTextarea.stories.svelte.d.ts +1 -1
  127. package/dist/components/form/FormTextarea.svelte +74 -74
  128. package/dist/components/form/FormToggle.stories.svelte +23 -20
  129. package/dist/components/form/FormToggle.stories.svelte.d.ts +1 -1
  130. package/dist/components/form/FormToggle.svelte +98 -98
  131. package/dist/components/form/FormUISchemaRenderer.svelte +120 -113
  132. package/dist/components/form/FormUISchemaRenderer.svelte.d.ts +3 -3
  133. package/dist/components/form/index.d.ts +19 -19
  134. package/dist/components/form/index.js +18 -18
  135. package/dist/components/form/templateAutocomplete.d.ts +2 -2
  136. package/dist/components/form/templateAutocomplete.js +64 -55
  137. package/dist/components/form/types.d.ts +6 -6
  138. package/dist/components/form/types.js +9 -4
  139. package/dist/components/icons/AlertCircleIcon.svelte +11 -0
  140. package/dist/components/icons/AlertCircleIcon.svelte.d.ts +26 -0
  141. package/dist/components/icons/CogIcon.svelte +11 -0
  142. package/dist/components/icons/CogIcon.svelte.d.ts +26 -0
  143. package/dist/components/interrupt/ChoicePrompt.stories.svelte +54 -38
  144. package/dist/components/interrupt/ChoicePrompt.stories.svelte.d.ts +1 -1
  145. package/dist/components/interrupt/ChoicePrompt.svelte +407 -383
  146. package/dist/components/interrupt/ChoicePrompt.svelte.d.ts +1 -1
  147. package/dist/components/interrupt/ConfirmationPrompt.stories.svelte +48 -48
  148. package/dist/components/interrupt/ConfirmationPrompt.stories.svelte.d.ts +1 -1
  149. package/dist/components/interrupt/ConfirmationPrompt.svelte +280 -274
  150. package/dist/components/interrupt/ConfirmationPrompt.svelte.d.ts +1 -1
  151. package/dist/components/interrupt/FormPrompt.svelte +223 -218
  152. package/dist/components/interrupt/FormPrompt.svelte.d.ts +1 -1
  153. package/dist/components/interrupt/InterruptBubble.svelte +617 -583
  154. package/dist/components/interrupt/InterruptBubble.svelte.d.ts +2 -2
  155. package/dist/components/interrupt/ReviewPrompt.stories.svelte +66 -56
  156. package/dist/components/interrupt/ReviewPrompt.stories.svelte.d.ts +1 -1
  157. package/dist/components/interrupt/ReviewPrompt.svelte +861 -841
  158. package/dist/components/interrupt/ReviewPrompt.svelte.d.ts +1 -1
  159. package/dist/components/interrupt/TextInputPrompt.stories.svelte +38 -33
  160. package/dist/components/interrupt/TextInputPrompt.stories.svelte.d.ts +1 -1
  161. package/dist/components/interrupt/TextInputPrompt.svelte +333 -328
  162. package/dist/components/interrupt/TextInputPrompt.svelte.d.ts +1 -1
  163. package/dist/components/interrupt/index.d.ts +5 -5
  164. package/dist/components/interrupt/index.js +5 -5
  165. package/dist/components/layouts/MainLayout.svelte +724 -691
  166. package/dist/components/layouts/MainLayout.svelte.d.ts +6 -6
  167. package/dist/components/nodes/GatewayNode.stories.svelte +100 -99
  168. package/dist/components/nodes/GatewayNode.svelte +605 -571
  169. package/dist/components/nodes/GatewayNode.svelte.d.ts +3 -3
  170. package/dist/components/nodes/IdeaNode.stories.svelte +44 -43
  171. package/dist/components/nodes/IdeaNode.svelte +451 -437
  172. package/dist/components/nodes/IdeaNode.svelte.d.ts +1 -1
  173. package/dist/components/nodes/NotesNode.stories.svelte +65 -64
  174. package/dist/components/nodes/NotesNode.svelte +380 -369
  175. package/dist/components/nodes/NotesNode.svelte.d.ts +1 -1
  176. package/dist/components/nodes/SimpleNode.stories.svelte +145 -144
  177. package/dist/components/nodes/SimpleNode.svelte +486 -424
  178. package/dist/components/nodes/SimpleNode.svelte.d.ts +1 -1
  179. package/dist/components/nodes/SquareNode.stories.svelte +73 -73
  180. package/dist/components/nodes/SquareNode.svelte +439 -380
  181. package/dist/components/nodes/SquareNode.svelte.d.ts +1 -1
  182. package/dist/components/nodes/TerminalNode.stories.svelte +13 -13
  183. package/dist/components/nodes/TerminalNode.svelte +709 -670
  184. package/dist/components/nodes/TerminalNode.svelte.d.ts +1 -1
  185. package/dist/components/nodes/ToolNode.stories.svelte +181 -180
  186. package/dist/components/nodes/ToolNode.svelte +505 -447
  187. package/dist/components/nodes/ToolNode.svelte.d.ts +1 -1
  188. package/dist/components/nodes/WorkflowNode.stories.svelte +70 -46
  189. package/dist/components/nodes/WorkflowNode.svelte +621 -551
  190. package/dist/components/nodes/WorkflowNode.svelte.d.ts +3 -3
  191. package/dist/components/playground/ChatPanel.svelte +945 -889
  192. package/dist/components/playground/ExecutionLogs.svelte +495 -472
  193. package/dist/components/playground/InputCollector.svelte +449 -428
  194. package/dist/components/playground/MessageBubble.stories.svelte +47 -47
  195. package/dist/components/playground/MessageBubble.stories.svelte.d.ts +1 -1
  196. package/dist/components/playground/MessageBubble.svelte +626 -610
  197. package/dist/components/playground/MessageBubble.svelte.d.ts +1 -1
  198. package/dist/components/playground/Playground.svelte +1088 -1057
  199. package/dist/components/playground/Playground.svelte.d.ts +3 -3
  200. package/dist/components/playground/PlaygroundModal.svelte +208 -204
  201. package/dist/components/playground/PlaygroundModal.svelte.d.ts +3 -3
  202. package/dist/components/playground/SessionManager.svelte +527 -521
  203. package/dist/components/playground/SessionManager.svelte.d.ts +1 -1
  204. package/dist/config/agentSpecEndpoints.d.ts +1 -1
  205. package/dist/config/agentSpecEndpoints.js +20 -20
  206. package/dist/config/constants.d.ts +8 -0
  207. package/dist/config/constants.js +10 -2
  208. package/dist/config/defaultCategories.d.ts +1 -1
  209. package/dist/config/defaultCategories.js +86 -86
  210. package/dist/config/defaultPortConfig.d.ts +1 -1
  211. package/dist/config/defaultPortConfig.js +144 -144
  212. package/dist/config/endpoints.d.ts +4 -4
  213. package/dist/config/endpoints.js +65 -65
  214. package/dist/config/runtimeConfig.d.ts +2 -2
  215. package/dist/config/runtimeConfig.js +8 -8
  216. package/dist/core/index.d.ts +63 -59
  217. package/dist/core/index.js +35 -33
  218. package/dist/display/index.d.ts +2 -2
  219. package/dist/display/index.js +2 -2
  220. package/dist/editor/index.d.ts +62 -62
  221. package/dist/editor/index.js +53 -53
  222. package/dist/form/code.d.ts +5 -5
  223. package/dist/form/code.js +14 -14
  224. package/dist/form/fieldRegistry.d.ts +3 -3
  225. package/dist/form/fieldRegistry.js +11 -9
  226. package/dist/form/full.d.ts +8 -8
  227. package/dist/form/full.js +9 -9
  228. package/dist/form/index.d.ts +18 -18
  229. package/dist/form/index.js +16 -16
  230. package/dist/form/markdown.d.ts +4 -4
  231. package/dist/form/markdown.js +8 -8
  232. package/dist/helpers/proximityConnect.d.ts +3 -3
  233. package/dist/helpers/proximityConnect.js +34 -32
  234. package/dist/helpers/workflowEditorHelper.d.ts +5 -5
  235. package/dist/helpers/workflowEditorHelper.js +108 -96
  236. package/dist/index.d.ts +6 -6
  237. package/dist/index.js +6 -6
  238. package/dist/mocks/app-environment.js +2 -2
  239. package/dist/mocks/app-forms.js +9 -9
  240. package/dist/mocks/app-navigation.js +11 -11
  241. package/dist/mocks/app-stores.js +8 -8
  242. package/dist/playground/index.d.ts +19 -19
  243. package/dist/playground/index.js +16 -16
  244. package/dist/playground/mount.d.ts +3 -3
  245. package/dist/playground/mount.js +24 -24
  246. package/dist/registry/builtinFormats.js +13 -13
  247. package/dist/registry/builtinNodes.d.ts +2 -2
  248. package/dist/registry/builtinNodes.js +77 -77
  249. package/dist/registry/index.d.ts +4 -4
  250. package/dist/registry/index.js +4 -4
  251. package/dist/registry/nodeComponentRegistry.d.ts +8 -8
  252. package/dist/registry/nodeComponentRegistry.js +11 -9
  253. package/dist/registry/plugin.d.ts +2 -2
  254. package/dist/registry/plugin.js +11 -11
  255. package/dist/registry/workflowFormatRegistry.d.ts +3 -3
  256. package/dist/registry/workflowFormatRegistry.js +2 -2
  257. package/dist/schema/index.d.ts +1 -1
  258. package/dist/schema/index.js +2 -2
  259. package/dist/schemas/v1/workflow.schema.json +22 -107
  260. package/dist/services/agentSpecExecutionService.d.ts +3 -3
  261. package/dist/services/agentSpecExecutionService.js +59 -55
  262. package/dist/services/api.d.ts +18 -4
  263. package/dist/services/api.js +46 -43
  264. package/dist/services/apiVariableService.d.ts +1 -1
  265. package/dist/services/apiVariableService.js +41 -34
  266. package/dist/services/autoSaveService.js +8 -8
  267. package/dist/services/categoriesApi.d.ts +2 -2
  268. package/dist/services/categoriesApi.js +8 -8
  269. package/dist/services/draftStorage.d.ts +1 -1
  270. package/dist/services/draftStorage.js +11 -11
  271. package/dist/services/dynamicSchemaService.d.ts +1 -1
  272. package/dist/services/dynamicSchemaService.js +41 -39
  273. package/dist/services/globalSave.d.ts +2 -2
  274. package/dist/services/globalSave.js +53 -42
  275. package/dist/services/historyService.d.ts +1 -1
  276. package/dist/services/historyService.js +8 -8
  277. package/dist/services/interruptService.d.ts +1 -1
  278. package/dist/services/interruptService.js +35 -29
  279. package/dist/services/nodeExecutionService.d.ts +1 -1
  280. package/dist/services/nodeExecutionService.js +45 -44
  281. package/dist/services/playgroundService.d.ts +1 -1
  282. package/dist/services/playgroundService.js +29 -29
  283. package/dist/services/portConfigApi.d.ts +2 -2
  284. package/dist/services/portConfigApi.js +8 -8
  285. package/dist/services/settingsService.d.ts +2 -2
  286. package/dist/services/settingsService.js +25 -19
  287. package/dist/services/toastService.d.ts +4 -4
  288. package/dist/services/toastService.js +33 -33
  289. package/dist/services/variableService.d.ts +1 -1
  290. package/dist/services/variableService.js +36 -36
  291. package/dist/services/workflowStorage.d.ts +2 -2
  292. package/dist/services/workflowStorage.js +13 -13
  293. package/dist/settings/index.d.ts +7 -7
  294. package/dist/settings/index.js +6 -6
  295. package/dist/skins/default.d.ts +2 -0
  296. package/dist/skins/default.js +1 -0
  297. package/dist/skins/index.d.ts +13 -0
  298. package/dist/skins/index.js +30 -0
  299. package/dist/skins/slate.d.ts +2 -0
  300. package/dist/skins/slate.js +78 -0
  301. package/dist/stores/categoriesStore.svelte.d.ts +1 -1
  302. package/dist/stores/categoriesStore.svelte.js +5 -5
  303. package/dist/stores/editorStateMachine.svelte.d.ts +2 -2
  304. package/dist/stores/editorStateMachine.svelte.js +65 -33
  305. package/dist/stores/historyStore.svelte.d.ts +4 -4
  306. package/dist/stores/historyStore.svelte.js +4 -4
  307. package/dist/stores/interruptStore.svelte.d.ts +3 -3
  308. package/dist/stores/interruptStore.svelte.js +21 -21
  309. package/dist/stores/playgroundStore.svelte.d.ts +2 -2
  310. package/dist/stores/playgroundStore.svelte.js +25 -18
  311. package/dist/stores/portCoordinateStore.svelte.d.ts +2 -2
  312. package/dist/stores/portCoordinateStore.svelte.js +15 -8
  313. package/dist/stores/settingsStore.svelte.d.ts +2 -2
  314. package/dist/stores/settingsStore.svelte.js +62 -57
  315. package/dist/stores/workflowStore.svelte.d.ts +3 -3
  316. package/dist/stores/workflowStore.svelte.js +50 -47
  317. package/dist/stories/CanvasDecorator.svelte +35 -32
  318. package/dist/stories/CanvasDecorator.svelte.d.ts +2 -2
  319. package/dist/stories/EdgeDecorator.svelte +125 -0
  320. package/dist/stories/EdgeDecorator.svelte.d.ts +17 -0
  321. package/dist/stories/NodeDecorator.svelte +59 -53
  322. package/dist/stories/NodeDecorator.svelte.d.ts +1 -1
  323. package/dist/stories/utils.d.ts +2 -2
  324. package/dist/stories/utils.js +105 -67
  325. package/dist/styles/base.css +599 -595
  326. package/dist/styles/toast.css +14 -14
  327. package/dist/styles/tokens.css +409 -378
  328. package/dist/svelte-app.d.ts +9 -9
  329. package/dist/svelte-app.js +39 -39
  330. package/dist/themes/default.d.ts +2 -0
  331. package/dist/themes/default.js +9 -0
  332. package/dist/themes/index.d.ts +13 -0
  333. package/dist/themes/index.js +44 -0
  334. package/dist/themes/minimal.d.ts +2 -0
  335. package/dist/themes/minimal.js +11 -0
  336. package/dist/types/agentspec.d.ts +18 -18
  337. package/dist/types/agentspec.js +2 -2
  338. package/dist/types/auth.d.ts +1 -1
  339. package/dist/types/auth.js +6 -6
  340. package/dist/types/config.d.ts +6 -6
  341. package/dist/types/events.d.ts +2 -2
  342. package/dist/types/events.js +2 -2
  343. package/dist/types/index.d.ts +32 -32
  344. package/dist/types/index.js +6 -6
  345. package/dist/types/interrupt.d.ts +6 -6
  346. package/dist/types/interrupt.js +21 -21
  347. package/dist/types/interruptState.d.ts +12 -12
  348. package/dist/types/interruptState.js +66 -66
  349. package/dist/types/playground.d.ts +7 -7
  350. package/dist/types/playground.js +14 -14
  351. package/dist/types/settings.d.ts +5 -3
  352. package/dist/types/settings.js +25 -18
  353. package/dist/types/skin.d.ts +31 -0
  354. package/dist/types/skin.js +1 -0
  355. package/dist/types/theme.d.ts +35 -0
  356. package/dist/types/theme.js +1 -0
  357. package/dist/types/uischema.d.ts +4 -4
  358. package/dist/types/uischema.js +3 -3
  359. package/dist/utils/colors.d.ts +1 -1
  360. package/dist/utils/colors.js +97 -95
  361. package/dist/utils/config.d.ts +2 -2
  362. package/dist/utils/config.js +48 -48
  363. package/dist/utils/connections.d.ts +2 -2
  364. package/dist/utils/connections.js +15 -15
  365. package/dist/utils/errors.js +3 -3
  366. package/dist/utils/fetchWithAuth.d.ts +1 -1
  367. package/dist/utils/fetchWithAuth.js +2 -2
  368. package/dist/utils/handleIds.d.ts +2 -2
  369. package/dist/utils/handleIds.js +8 -8
  370. package/dist/utils/handlePositioning.d.ts +1 -1
  371. package/dist/utils/handlePositioning.js +2 -2
  372. package/dist/utils/icons.d.ts +1 -1
  373. package/dist/utils/icons.js +74 -74
  374. package/dist/utils/logger.d.ts +1 -1
  375. package/dist/utils/logger.js +7 -7
  376. package/dist/utils/nodeStatus.d.ts +1 -1
  377. package/dist/utils/nodeStatus.js +48 -48
  378. package/dist/utils/nodeTypes.d.ts +1 -1
  379. package/dist/utils/nodeTypes.js +21 -20
  380. package/dist/utils/nodeWrapper.d.ts +7 -7
  381. package/dist/utils/nodeWrapper.js +21 -19
  382. package/dist/utils/performanceUtils.d.ts +1 -1
  383. package/dist/utils/performanceUtils.js +2 -1
  384. package/dist/utils/sanitize.js +1 -1
  385. package/dist/utils/uischema.d.ts +2 -2
  386. package/dist/utils/uischema.js +8 -8
  387. package/dist/utils/validation.js +20 -8
  388. package/package.json +296 -291
@@ -7,449 +7,463 @@
7
7
  -->
8
8
 
9
9
  <script lang="ts">
10
- import { Position, Handle } from '@xyflow/svelte';
11
- import type { ConfigValues, NodeMetadata } from '../../types/index.js';
12
- import Icon from '@iconify/svelte';
13
- import { getDataTypeColor } from '../../utils/colors.js';
14
-
15
- /**
16
- * IdeaNode component props
17
- * Displays a card-style node for conceptual flow diagrams
18
- */
19
- const props = $props<{
20
- data: {
21
- label: string;
22
- config: ConfigValues;
23
- metadata: NodeMetadata;
24
- nodeId?: string;
25
- onConfigOpen?: (node: {
26
- id: string;
27
- type: string;
28
- data: { label: string; config: ConfigValues; metadata: NodeMetadata };
29
- }) => void;
30
- };
31
- selected?: boolean;
32
- isProcessing?: boolean;
33
- isError?: boolean;
34
- }>();
35
-
36
- /**
37
- * Instance-specific title override from config.
38
- * Falls back to the original label if not set.
39
- * This allows users to customize the node title per-instance via config.
40
- * Note: Also supports legacy 'title' property for backward compatibility.
41
- */
42
- const displayTitle = $derived(
43
- (props.data.config?.instanceTitle as string) ||
44
- (props.data.config?.title as string) ||
45
- props.data.label ||
46
- props.data.metadata?.name ||
47
- 'New Idea'
48
- );
49
-
50
- /**
51
- * Instance-specific description override from config.
52
- * Falls back to the metadata description if not set.
53
- * This allows users to customize the node description per-instance via config.
54
- * Note: Also supports legacy 'description' property for backward compatibility.
55
- */
56
- const displayDescription = $derived(
57
- (props.data.config?.instanceDescription as string) ||
58
- (props.data.config?.description as string) ||
59
- props.data.metadata?.description ||
60
- 'Click to add description...'
61
- );
62
-
63
- /**
64
- * Get custom icon from config or metadata, with fallback
65
- */
66
- const ideaIcon = $derived(
67
- (props.data.config?.icon as string) ||
68
- (props.data.metadata?.icon as string) ||
69
- 'mdi:lightbulb-outline'
70
- );
71
-
72
- /**
73
- * Get accent color from config or metadata, with fallback
74
- */
75
- const ideaColor = $derived(
76
- (props.data.config?.color as string) || (props.data.metadata?.color as string) || '#6366f1'
77
- );
78
-
79
- /**
80
- * Port visibility configuration from config
81
- * Left and Right are enabled by default, Top and Bottom are disabled by default
82
- */
83
- const enableLeftPort = $derived((props.data.config?.enableLeftPort as boolean) ?? true);
84
- const enableRightPort = $derived((props.data.config?.enableRightPort as boolean) ?? true);
85
- const enableTopPort = $derived((props.data.config?.enableTopPort as boolean) ?? false);
86
- const enableBottomPort = $derived((props.data.config?.enableBottomPort as boolean) ?? false);
87
-
88
- /**
89
- * Data type for idea flow connections
90
- */
91
- const IDEA_DATA_TYPE = 'idea';
92
-
93
- /**
94
- * Opens the configuration sidebar for editing idea properties
95
- */
96
- function openConfigSidebar(): void {
97
- if (props.data.onConfigOpen) {
98
- const nodeForConfig = {
99
- id: props.data.nodeId || 'unknown',
100
- type: 'idea',
101
- data: props.data
102
- };
103
- props.data.onConfigOpen(nodeForConfig);
104
- }
105
- }
106
-
107
- /**
108
- * Handles double-click to open config sidebar
109
- */
110
- function handleDoubleClick(): void {
111
- openConfigSidebar();
112
- }
113
-
114
- /**
115
- * Handle single click - selection handled by SvelteFlow
116
- */
117
- function handleClick(): void {
118
- // Node selection is handled by Svelte Flow
119
- }
120
-
121
- /**
122
- * Handles keyboard events for accessibility
123
- * @param event - The keyboard event
124
- */
125
- function handleKeydown(event: KeyboardEvent): void {
126
- if (event.key === 'Enter' || event.key === ' ') {
127
- event.preventDefault();
128
- handleDoubleClick();
129
- }
130
- }
10
+ import { Position, Handle } from "@xyflow/svelte";
11
+ import type { ConfigValues, NodeMetadata } from "../../types/index.js";
12
+ import Icon from "@iconify/svelte";
13
+ import { getDataTypeColor } from "../../utils/colors.js";
14
+
15
+ /**
16
+ * IdeaNode component props
17
+ * Displays a card-style node for conceptual flow diagrams
18
+ */
19
+ const props = $props<{
20
+ data: {
21
+ label: string;
22
+ config: ConfigValues;
23
+ metadata: NodeMetadata;
24
+ nodeId?: string;
25
+ onConfigOpen?: (node: {
26
+ id: string;
27
+ type: string;
28
+ data: { label: string; config: ConfigValues; metadata: NodeMetadata };
29
+ }) => void;
30
+ };
31
+ selected?: boolean;
32
+ isProcessing?: boolean;
33
+ isError?: boolean;
34
+ }>();
35
+
36
+ /**
37
+ * Instance-specific title override from config.
38
+ * Falls back to the original label if not set.
39
+ * This allows users to customize the node title per-instance via config.
40
+ * Note: Also supports legacy 'title' property for backward compatibility.
41
+ */
42
+ const displayTitle = $derived(
43
+ (props.data.config?.instanceTitle as string) ||
44
+ (props.data.config?.title as string) ||
45
+ props.data.label ||
46
+ props.data.metadata?.name ||
47
+ "New Idea",
48
+ );
49
+
50
+ /**
51
+ * Instance-specific description override from config.
52
+ * Falls back to the metadata description if not set.
53
+ * This allows users to customize the node description per-instance via config.
54
+ * Note: Also supports legacy 'description' property for backward compatibility.
55
+ */
56
+ const displayDescription = $derived(
57
+ (props.data.config?.instanceDescription as string) ||
58
+ (props.data.config?.description as string) ||
59
+ props.data.metadata?.description ||
60
+ "Click to add description...",
61
+ );
62
+
63
+ /**
64
+ * Get custom icon from config or metadata, with fallback
65
+ */
66
+ const ideaIcon = $derived(
67
+ (props.data.config?.icon as string) ||
68
+ (props.data.metadata?.icon as string) ||
69
+ "mdi:lightbulb-outline",
70
+ );
71
+
72
+ /**
73
+ * Get accent color from config or metadata, with fallback
74
+ */
75
+ const ideaColor = $derived(
76
+ (props.data.config?.color as string) ||
77
+ (props.data.metadata?.color as string) ||
78
+ "#6366f1",
79
+ );
80
+
81
+ /**
82
+ * Port visibility configuration from config
83
+ * Left and Right are enabled by default, Top and Bottom are disabled by default
84
+ */
85
+ const enableLeftPort = $derived(
86
+ (props.data.config?.enableLeftPort as boolean) ?? true,
87
+ );
88
+ const enableRightPort = $derived(
89
+ (props.data.config?.enableRightPort as boolean) ?? true,
90
+ );
91
+ const enableTopPort = $derived(
92
+ (props.data.config?.enableTopPort as boolean) ?? false,
93
+ );
94
+ const enableBottomPort = $derived(
95
+ (props.data.config?.enableBottomPort as boolean) ?? false,
96
+ );
97
+
98
+ /**
99
+ * Data type for idea flow connections
100
+ */
101
+ const IDEA_DATA_TYPE = "idea";
102
+
103
+ /**
104
+ * Opens the configuration sidebar for editing idea properties
105
+ */
106
+ function openConfigSidebar(): void {
107
+ if (props.data.onConfigOpen) {
108
+ const nodeForConfig = {
109
+ id: props.data.nodeId || "unknown",
110
+ type: "idea",
111
+ data: props.data,
112
+ };
113
+ props.data.onConfigOpen(nodeForConfig);
114
+ }
115
+ }
116
+
117
+ /**
118
+ * Handles double-click to open config sidebar
119
+ */
120
+ function handleDoubleClick(): void {
121
+ openConfigSidebar();
122
+ }
123
+
124
+ /**
125
+ * Handle single click - selection handled by SvelteFlow
126
+ */
127
+ function handleClick(): void {
128
+ // Node selection is handled by Svelte Flow
129
+ }
130
+
131
+ /**
132
+ * Handles keyboard events for accessibility
133
+ * @param event - The keyboard event
134
+ */
135
+ function handleKeydown(event: KeyboardEvent): void {
136
+ if (event.key === "Enter" || event.key === " ") {
137
+ event.preventDefault();
138
+ handleDoubleClick();
139
+ }
140
+ }
131
141
  </script>
132
142
 
133
143
  <!-- Idea Node -->
134
144
  <div
135
- class="flowdrop-idea-node"
136
- class:flowdrop-idea-node--selected={props.selected}
137
- class:flowdrop-idea-node--processing={props.isProcessing}
138
- class:flowdrop-idea-node--error={props.isError}
139
- style="--idea-accent-color: {ideaColor};"
140
- onclick={handleClick}
141
- ondblclick={handleDoubleClick}
142
- onkeydown={handleKeydown}
143
- role="button"
144
- tabindex="0"
145
- aria-label="Idea node: {displayTitle}"
145
+ class="flowdrop-idea-node"
146
+ class:flowdrop-idea-node--selected={props.selected}
147
+ class:flowdrop-idea-node--processing={props.isProcessing}
148
+ class:flowdrop-idea-node--error={props.isError}
149
+ style="--idea-accent-color: {ideaColor};"
150
+ onclick={handleClick}
151
+ ondblclick={handleDoubleClick}
152
+ onkeydown={handleKeydown}
153
+ role="button"
154
+ tabindex="0"
155
+ aria-label="Idea node: {displayTitle}"
146
156
  >
147
- <!-- Left Port (Target/Input): center at top 40px (multiple of 10), 20px connection area -->
148
- {#if enableLeftPort}
149
- <Handle
150
- type="target"
151
- position={Position.Left}
152
- style="--fd-handle-fill: {getDataTypeColor(
153
- IDEA_DATA_TYPE
154
- )}; --fd-handle-border-color: var(--fd-handle-border); top: 40px; transform: translateY(-50%); z-index: 30;"
155
- id={`${props.data.nodeId}-input-left`}
156
- />
157
- {/if}
158
-
159
- <!-- Top Port (Target/Input): center at left 150px (multiple of 10), 20px connection area -->
160
- {#if enableTopPort}
161
- <Handle
162
- type="target"
163
- position={Position.Top}
164
- style="--fd-handle-fill: {getDataTypeColor(
165
- IDEA_DATA_TYPE
166
- )}; --fd-handle-border-color: var(--fd-handle-border); left: 150px; transform: translateX(-50%); z-index: 30;"
167
- id={`${props.data.nodeId}-input-top`}
168
- />
169
- {/if}
170
-
171
- <!-- Card Content -->
172
- <div class="flowdrop-idea-node__card">
173
- <!-- Accent Bar -->
174
- <div class="flowdrop-idea-node__accent-bar"></div>
175
-
176
- <!-- Header with icon and title -->
177
- <div class="flowdrop-idea-node__header">
178
- <div class="flowdrop-idea-node__icon-wrapper">
179
- <Icon icon={ideaIcon} class="flowdrop-idea-node__icon" />
180
- </div>
181
- <h3 class="flowdrop-idea-node__title">{displayTitle}</h3>
182
- </div>
183
-
184
- <!-- Description Body -->
185
- <div class="flowdrop-idea-node__body">
186
- <p class="flowdrop-idea-node__description">{displayDescription}</p>
187
- </div>
188
-
189
- <!-- Processing indicator -->
190
- {#if props.isProcessing}
191
- <div class="flowdrop-idea-node__processing">
192
- <div class="flowdrop-idea-node__spinner"></div>
193
- <span>Processing...</span>
194
- </div>
195
- {/if}
196
-
197
- <!-- Error indicator -->
198
- {#if props.isError}
199
- <div class="flowdrop-idea-node__error">
200
- <Icon icon="mdi:alert-circle" class="flowdrop-idea-node__error-icon" />
201
- <span>Error</span>
202
- </div>
203
- {/if}
204
- </div>
205
-
206
- <!-- Config button -->
207
- <button class="flowdrop-idea-node__config-btn" onclick={openConfigSidebar} title="Configure idea">
208
- <Icon icon="mdi:cog" />
209
- </button>
210
-
211
- <!-- Right Port (Source/Output): center at top 40px (multiple of 10), 20px connection area -->
212
- {#if enableRightPort}
213
- <Handle
214
- type="source"
215
- position={Position.Right}
216
- style="--fd-handle-fill: {getDataTypeColor(
217
- IDEA_DATA_TYPE
218
- )}; --fd-handle-border-color: var(--fd-handle-border); top: 40px; transform: translateY(-50%); z-index: 30;"
219
- id={`${props.data.nodeId}-output-right`}
220
- />
221
- {/if}
222
-
223
- <!-- Bottom Port (Source/Output): center at left 150px (multiple of 10), 20px connection area -->
224
- {#if enableBottomPort}
225
- <Handle
226
- type="source"
227
- position={Position.Bottom}
228
- style="--fd-handle-fill: {getDataTypeColor(
229
- IDEA_DATA_TYPE
230
- )}; --fd-handle-border-color: var(--fd-handle-border); left: 150px; transform: translateX(-50%); z-index: 30;"
231
- id={`${props.data.nodeId}-output-bottom`}
232
- />
233
- {/if}
157
+ <!-- Left Port (Target/Input): center at top 40px (multiple of 10), 20px connection area -->
158
+ {#if enableLeftPort}
159
+ <Handle
160
+ type="target"
161
+ position={Position.Left}
162
+ style="--fd-handle-fill: {getDataTypeColor(
163
+ IDEA_DATA_TYPE,
164
+ )}; --fd-handle-border-color: var(--fd-handle-border); top: 40px; transform: translateY(-50%); z-index: 30;"
165
+ id={`${props.data.nodeId}-input-left`}
166
+ />
167
+ {/if}
168
+
169
+ <!-- Top Port (Target/Input): center at left 150px (multiple of 10), 20px connection area -->
170
+ {#if enableTopPort}
171
+ <Handle
172
+ type="target"
173
+ position={Position.Top}
174
+ style="--fd-handle-fill: {getDataTypeColor(
175
+ IDEA_DATA_TYPE,
176
+ )}; --fd-handle-border-color: var(--fd-handle-border); left: 150px; transform: translateX(-50%); z-index: 30;"
177
+ id={`${props.data.nodeId}-input-top`}
178
+ />
179
+ {/if}
180
+
181
+ <!-- Card Content -->
182
+ <div class="flowdrop-idea-node__card">
183
+ <!-- Accent Bar -->
184
+ <div class="flowdrop-idea-node__accent-bar"></div>
185
+
186
+ <!-- Header with icon and title -->
187
+ <div class="flowdrop-idea-node__header">
188
+ <div class="flowdrop-idea-node__icon-wrapper">
189
+ <Icon icon={ideaIcon} class="flowdrop-idea-node__icon" />
190
+ </div>
191
+ <h3 class="flowdrop-idea-node__title">{displayTitle}</h3>
192
+ </div>
193
+
194
+ <!-- Description Body -->
195
+ <div class="flowdrop-idea-node__body">
196
+ <p class="flowdrop-idea-node__description">{displayDescription}</p>
197
+ </div>
198
+
199
+ <!-- Processing indicator -->
200
+ {#if props.isProcessing}
201
+ <div class="flowdrop-idea-node__processing">
202
+ <div class="flowdrop-idea-node__spinner"></div>
203
+ <span>Processing...</span>
204
+ </div>
205
+ {/if}
206
+
207
+ <!-- Error indicator -->
208
+ {#if props.isError}
209
+ <div class="flowdrop-idea-node__error">
210
+ <Icon icon="mdi:alert-circle" class="flowdrop-idea-node__error-icon" />
211
+ <span>Error</span>
212
+ </div>
213
+ {/if}
214
+ </div>
215
+
216
+ <!-- Config button -->
217
+ <button
218
+ class="flowdrop-idea-node__config-btn"
219
+ onclick={openConfigSidebar}
220
+ title="Configure idea"
221
+ >
222
+ <Icon icon="mdi:cog" />
223
+ </button>
224
+
225
+ <!-- Right Port (Source/Output): center at top 40px (multiple of 10), 20px connection area -->
226
+ {#if enableRightPort}
227
+ <Handle
228
+ type="source"
229
+ position={Position.Right}
230
+ style="--fd-handle-fill: {getDataTypeColor(
231
+ IDEA_DATA_TYPE,
232
+ )}; --fd-handle-border-color: var(--fd-handle-border); top: 40px; transform: translateY(-50%); z-index: 30;"
233
+ id={`${props.data.nodeId}-output-right`}
234
+ />
235
+ {/if}
236
+
237
+ <!-- Bottom Port (Source/Output): center at left 150px (multiple of 10), 20px connection area -->
238
+ {#if enableBottomPort}
239
+ <Handle
240
+ type="source"
241
+ position={Position.Bottom}
242
+ style="--fd-handle-fill: {getDataTypeColor(
243
+ IDEA_DATA_TYPE,
244
+ )}; --fd-handle-border-color: var(--fd-handle-border); left: 150px; transform: translateX(-50%); z-index: 30;"
245
+ id={`${props.data.nodeId}-output-bottom`}
246
+ />
247
+ {/if}
234
248
  </div>
235
249
 
236
250
  <style>
237
- .flowdrop-idea-node {
238
- position: relative;
239
- width: var(--fd-node-default-width);
240
- min-height: var(--fd-node-simple-height);
241
- cursor: pointer;
242
- transition: all var(--fd-transition-normal);
243
- z-index: 10;
244
- color: var(--fd-foreground);
245
- }
246
-
247
- .flowdrop-idea-node__card {
248
- background-color: var(--fd-background);
249
- border-radius: var(--fd-radius-xl);
250
- border: 1px solid var(--fd-border);
251
- box-shadow: var(--fd-shadow-md);
252
- overflow: hidden;
253
- transition: all var(--fd-transition-normal);
254
- }
255
-
256
- .flowdrop-idea-node:hover .flowdrop-idea-node__card {
257
- box-shadow: var(--fd-shadow-lg);
258
- transform: translateY(-1px);
259
- }
260
-
261
- .flowdrop-idea-node--selected .flowdrop-idea-node__card {
262
- border-color: var(--fd-primary);
263
- box-shadow:
264
- var(--fd-shadow-lg),
265
- 0 0 0 3px color-mix(in srgb, var(--fd-primary) 30%, transparent);
266
- }
267
-
268
- .flowdrop-idea-node--processing .flowdrop-idea-node__card {
269
- opacity: 0.8;
270
- }
271
-
272
- .flowdrop-idea-node--error .flowdrop-idea-node__card {
273
- border-color: var(--fd-error) !important;
274
- background-color: var(--fd-error-muted) !important;
275
- }
276
-
277
- /* Accent bar at top of card */
278
- .flowdrop-idea-node__accent-bar {
279
- height: 4px;
280
- background-color: var(--idea-accent-color, var(--fd-accent));
281
- transition: background-color var(--fd-transition-normal);
282
- }
283
-
284
- /* Header section */
285
- .flowdrop-idea-node__header {
286
- display: flex;
287
- align-items: center;
288
- gap: 0.625rem;
289
- padding: var(--fd-space-md) var(--fd-space-xl) var(--fd-space-xs);
290
- }
291
-
292
- .flowdrop-idea-node__icon-wrapper {
293
- display: flex;
294
- align-items: center;
295
- justify-content: center;
296
- width: 2rem;
297
- height: 2rem;
298
- background-color: color-mix(
299
- in srgb,
300
- var(--idea-accent-color, var(--fd-accent)) var(--fd-node-icon-bg-opacity),
301
- transparent
302
- );
303
- border-radius: var(--fd-radius-lg);
304
- flex-shrink: 0;
305
- }
306
-
307
- :global(.flowdrop-idea-node__icon) {
308
- width: 1.25rem;
309
- height: 1.25rem;
310
- color: var(--fd-node-icon);
311
- }
312
-
313
- .flowdrop-idea-node__title {
314
- font-size: 0.9375rem;
315
- font-weight: 600;
316
- color: var(--fd-foreground);
317
- margin: 0;
318
- line-height: 1.3;
319
- overflow: hidden;
320
- text-overflow: ellipsis;
321
- white-space: nowrap;
322
- }
323
-
324
- /* Body section */
325
- .flowdrop-idea-node__body {
326
- padding: 0 var(--fd-space-xl) var(--fd-space-md);
327
- }
328
-
329
- .flowdrop-idea-node__description {
330
- font-size: 0.8125rem;
331
- color: var(--fd-muted-foreground);
332
- margin: 0;
333
- line-height: 1.5;
334
- display: -webkit-box;
335
- -webkit-line-clamp: 3;
336
- line-clamp: 3;
337
- -webkit-box-orient: vertical;
338
- overflow: hidden;
339
- }
340
-
341
- /* Processing indicator */
342
- .flowdrop-idea-node__processing {
343
- display: flex;
344
- align-items: center;
345
- gap: var(--fd-space-xs);
346
- padding: var(--fd-space-xs) var(--fd-space-xl);
347
- font-size: var(--fd-text-xs);
348
- color: var(--fd-muted-foreground);
349
- border-top: 1px solid var(--fd-border-muted);
350
- }
351
-
352
- .flowdrop-idea-node__spinner {
353
- width: 0.875rem;
354
- height: 0.875rem;
355
- border: 2px solid var(--fd-border);
356
- border-top-color: var(--idea-accent-color, var(--fd-accent));
357
- border-radius: 50%;
358
- animation: idea-spin 1s linear infinite;
359
- }
360
-
361
- /* Error indicator */
362
- .flowdrop-idea-node__error {
363
- display: flex;
364
- align-items: center;
365
- gap: var(--fd-space-xs);
366
- padding: var(--fd-space-xs) var(--fd-space-xl);
367
- font-size: var(--fd-text-xs);
368
- color: var(--fd-error);
369
- border-top: 1px solid color-mix(in srgb, var(--fd-error) 30%, transparent);
370
- background-color: var(--fd-error-muted);
371
- }
372
-
373
- :global(.flowdrop-idea-node__error-icon) {
374
- width: 0.875rem;
375
- height: 0.875rem;
376
- }
377
-
378
- @keyframes idea-spin {
379
- to {
380
- transform: rotate(360deg);
381
- }
382
- }
383
-
384
- /* Config button */
385
- .flowdrop-idea-node__config-btn {
386
- position: absolute;
387
- top: 0.625rem;
388
- right: 0.625rem;
389
- width: 1.5rem;
390
- height: 1.5rem;
391
- background-color: var(--fd-backdrop);
392
- border: 1px solid var(--fd-border);
393
- border-radius: var(--fd-radius-md);
394
- color: var(--fd-muted-foreground);
395
- cursor: pointer;
396
- display: flex;
397
- align-items: center;
398
- justify-content: center;
399
- opacity: 0;
400
- transition: all var(--fd-transition-normal);
401
- backdrop-filter: var(--fd-backdrop-blur);
402
- z-index: 15;
403
- font-size: var(--fd-text-sm);
404
- }
405
-
406
- .flowdrop-idea-node:hover .flowdrop-idea-node__config-btn {
407
- opacity: 1;
408
- }
409
-
410
- .flowdrop-idea-node__config-btn:hover {
411
- background-color: var(--fd-muted);
412
- border-color: var(--fd-border-strong);
413
- color: var(--fd-foreground);
414
- transform: scale(1.05);
415
- }
416
-
417
- /* Handle: 20px/12px from base.css; position offsets for 20px handle */
418
- :global(.flowdrop-idea-node .svelte-flow__handle) {
419
- z-index: 20 !important;
420
- pointer-events: auto !important;
421
- }
422
-
423
- :global(.flowdrop-idea-node .svelte-flow__handle-left:hover),
424
- :global(.flowdrop-idea-node .svelte-flow__handle-right:hover) {
425
- transform: translateY(-50%) scale(1.2) !important;
426
- }
427
-
428
- :global(.flowdrop-idea-node .svelte-flow__handle-top:hover),
429
- :global(.flowdrop-idea-node .svelte-flow__handle-bottom:hover) {
430
- transform: translateX(-50%) scale(1.2) !important;
431
- }
432
-
433
- /* Responsive design */
434
- @media (max-width: 640px) {
435
- .flowdrop-idea-node {
436
- width: 16rem;
437
- }
438
-
439
- .flowdrop-idea-node__header {
440
- padding: 0.625rem 0.75rem 0.375rem;
441
- }
442
-
443
- .flowdrop-idea-node__body {
444
- padding: 0 0.75rem 0.625rem;
445
- }
446
-
447
- .flowdrop-idea-node__title {
448
- font-size: var(--fd-text-sm);
449
- }
450
-
451
- .flowdrop-idea-node__description {
452
- font-size: var(--fd-text-xs);
453
- }
454
- }
251
+ .flowdrop-idea-node {
252
+ position: relative;
253
+ width: var(--fd-node-default-width);
254
+ min-height: var(--fd-node-simple-height);
255
+ cursor: pointer;
256
+ transition: all var(--fd-transition-normal);
257
+ z-index: 10;
258
+ color: var(--fd-foreground);
259
+ }
260
+
261
+ .flowdrop-idea-node__card {
262
+ background-color: var(--fd-background);
263
+ border-radius: var(--fd-radius-xl);
264
+ border: 1px solid var(--fd-border);
265
+ box-shadow: var(--fd-shadow-md);
266
+ overflow: hidden;
267
+ transition: all var(--fd-transition-normal);
268
+ }
269
+
270
+ .flowdrop-idea-node:hover .flowdrop-idea-node__card {
271
+ box-shadow: var(--fd-shadow-lg);
272
+ transform: translateY(-1px);
273
+ }
274
+
275
+ .flowdrop-idea-node--selected .flowdrop-idea-node__card {
276
+ border-color: var(--fd-primary);
277
+ box-shadow:
278
+ var(--fd-shadow-lg),
279
+ 0 0 0 3px color-mix(in srgb, var(--fd-primary) 30%, transparent);
280
+ }
281
+
282
+ .flowdrop-idea-node--processing .flowdrop-idea-node__card {
283
+ opacity: 0.8;
284
+ }
285
+
286
+ .flowdrop-idea-node--error .flowdrop-idea-node__card {
287
+ border-color: var(--fd-error) !important;
288
+ background-color: var(--fd-error-muted) !important;
289
+ }
290
+
291
+ /* Accent bar at top of card */
292
+ .flowdrop-idea-node__accent-bar {
293
+ height: 4px;
294
+ background-color: var(--idea-accent-color, var(--fd-accent));
295
+ transition: background-color var(--fd-transition-normal);
296
+ }
297
+
298
+ /* Header section */
299
+ .flowdrop-idea-node__header {
300
+ display: flex;
301
+ align-items: center;
302
+ gap: 0.625rem;
303
+ padding: var(--fd-space-md) var(--fd-space-xl) var(--fd-space-xs);
304
+ }
305
+
306
+ .flowdrop-idea-node__icon-wrapper {
307
+ display: flex;
308
+ align-items: center;
309
+ justify-content: center;
310
+ width: 2rem;
311
+ height: 2rem;
312
+ background-color: color-mix(
313
+ in srgb,
314
+ var(--idea-accent-color, var(--fd-accent)) var(--fd-node-icon-bg-opacity),
315
+ transparent
316
+ );
317
+ border-radius: var(--fd-radius-lg);
318
+ flex-shrink: 0;
319
+ }
320
+
321
+ :global(.flowdrop-idea-node__icon) {
322
+ width: 1.25rem;
323
+ height: 1.25rem;
324
+ color: var(--fd-node-icon);
325
+ }
326
+
327
+ .flowdrop-idea-node__title {
328
+ font-size: 0.9375rem;
329
+ font-weight: 600;
330
+ color: var(--fd-foreground);
331
+ margin: 0;
332
+ line-height: 1.3;
333
+ overflow: hidden;
334
+ text-overflow: ellipsis;
335
+ white-space: nowrap;
336
+ }
337
+
338
+ /* Body section */
339
+ .flowdrop-idea-node__body {
340
+ padding: 0 var(--fd-space-xl) var(--fd-space-md);
341
+ }
342
+
343
+ .flowdrop-idea-node__description {
344
+ font-size: 0.8125rem;
345
+ color: var(--fd-muted-foreground);
346
+ margin: 0;
347
+ line-height: 1.5;
348
+ display: -webkit-box;
349
+ -webkit-line-clamp: 3;
350
+ line-clamp: 3;
351
+ -webkit-box-orient: vertical;
352
+ overflow: hidden;
353
+ }
354
+
355
+ /* Processing indicator */
356
+ .flowdrop-idea-node__processing {
357
+ display: flex;
358
+ align-items: center;
359
+ gap: var(--fd-space-xs);
360
+ padding: var(--fd-space-xs) var(--fd-space-xl);
361
+ font-size: var(--fd-text-xs);
362
+ color: var(--fd-muted-foreground);
363
+ border-top: 1px solid var(--fd-border-muted);
364
+ }
365
+
366
+ .flowdrop-idea-node__spinner {
367
+ width: 0.875rem;
368
+ height: 0.875rem;
369
+ border: 2px solid var(--fd-border);
370
+ border-top-color: var(--idea-accent-color, var(--fd-accent));
371
+ border-radius: 50%;
372
+ animation: idea-spin 1s linear infinite;
373
+ }
374
+
375
+ /* Error indicator */
376
+ .flowdrop-idea-node__error {
377
+ display: flex;
378
+ align-items: center;
379
+ gap: var(--fd-space-xs);
380
+ padding: var(--fd-space-xs) var(--fd-space-xl);
381
+ font-size: var(--fd-text-xs);
382
+ color: var(--fd-error);
383
+ border-top: 1px solid color-mix(in srgb, var(--fd-error) 30%, transparent);
384
+ background-color: var(--fd-error-muted);
385
+ }
386
+
387
+ :global(.flowdrop-idea-node__error-icon) {
388
+ width: 0.875rem;
389
+ height: 0.875rem;
390
+ }
391
+
392
+ @keyframes idea-spin {
393
+ to {
394
+ transform: rotate(360deg);
395
+ }
396
+ }
397
+
398
+ /* Config button */
399
+ .flowdrop-idea-node__config-btn {
400
+ position: absolute;
401
+ top: 0.625rem;
402
+ right: 0.625rem;
403
+ width: 1.5rem;
404
+ height: 1.5rem;
405
+ background-color: var(--fd-backdrop);
406
+ border: 1px solid var(--fd-border);
407
+ border-radius: var(--fd-radius-md);
408
+ color: var(--fd-muted-foreground);
409
+ cursor: pointer;
410
+ display: flex;
411
+ align-items: center;
412
+ justify-content: center;
413
+ opacity: 0;
414
+ transition: all var(--fd-transition-normal);
415
+ backdrop-filter: var(--fd-backdrop-blur);
416
+ z-index: 15;
417
+ font-size: var(--fd-text-sm);
418
+ }
419
+
420
+ .flowdrop-idea-node:hover .flowdrop-idea-node__config-btn {
421
+ opacity: 1;
422
+ }
423
+
424
+ .flowdrop-idea-node__config-btn:hover {
425
+ background-color: var(--fd-muted);
426
+ border-color: var(--fd-border-strong);
427
+ color: var(--fd-foreground);
428
+ transform: scale(1.05);
429
+ }
430
+
431
+ /* Handle: 20px/12px from base.css; position offsets for 20px handle */
432
+ :global(.flowdrop-idea-node .svelte-flow__handle) {
433
+ z-index: 20 !important;
434
+ pointer-events: auto !important;
435
+ }
436
+
437
+ :global(.flowdrop-idea-node .svelte-flow__handle-left:hover),
438
+ :global(.flowdrop-idea-node .svelte-flow__handle-right:hover) {
439
+ transform: translateY(-50%) scale(1.2) !important;
440
+ }
441
+
442
+ :global(.flowdrop-idea-node .svelte-flow__handle-top:hover),
443
+ :global(.flowdrop-idea-node .svelte-flow__handle-bottom:hover) {
444
+ transform: translateX(-50%) scale(1.2) !important;
445
+ }
446
+
447
+ /* Responsive design */
448
+ @media (max-width: 640px) {
449
+ .flowdrop-idea-node {
450
+ width: 16rem;
451
+ }
452
+
453
+ .flowdrop-idea-node__header {
454
+ padding: 0.625rem 0.75rem 0.375rem;
455
+ }
456
+
457
+ .flowdrop-idea-node__body {
458
+ padding: 0 0.75rem 0.625rem;
459
+ }
460
+
461
+ .flowdrop-idea-node__title {
462
+ font-size: var(--fd-text-sm);
463
+ }
464
+
465
+ .flowdrop-idea-node__description {
466
+ font-size: var(--fd-text-xs);
467
+ }
468
+ }
455
469
  </style>