@flowdrop/flowdrop 1.0.1 → 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 (386) 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 +179 -143
  36. package/dist/components/FlowDropEdge.svelte +147 -147
  37. package/dist/components/FlowDropEdge.svelte.d.ts +1 -1
  38. package/dist/components/FlowDropZone.svelte +63 -60
  39. package/dist/components/FlowDropZone.svelte.d.ts +1 -1
  40. package/dist/components/LoadingSpinner.stories.svelte +19 -19
  41. package/dist/components/LoadingSpinner.stories.svelte.d.ts +1 -1
  42. package/dist/components/LoadingSpinner.svelte +21 -21
  43. package/dist/components/LoadingSpinner.svelte.d.ts +1 -1
  44. package/dist/components/Logo.stories.svelte +13 -13
  45. package/dist/components/Logo.stories.svelte.d.ts +1 -1
  46. package/dist/components/Logo.svelte +101 -95
  47. package/dist/components/LogsSidebar.svelte +553 -546
  48. package/dist/components/LogsSidebar.svelte.d.ts +1 -1
  49. package/dist/components/MarkdownDisplay.stories.svelte +29 -23
  50. package/dist/components/MarkdownDisplay.stories.svelte.d.ts +1 -1
  51. package/dist/components/MarkdownDisplay.svelte +16 -14
  52. package/dist/components/Navbar.stories.svelte +43 -38
  53. package/dist/components/Navbar.stories.svelte.d.ts +1 -1
  54. package/dist/components/Navbar.svelte +760 -706
  55. package/dist/components/Navbar.svelte.d.ts +1 -1
  56. package/dist/components/NodeSidebar.svelte +900 -746
  57. package/dist/components/NodeSidebar.svelte.d.ts +3 -1
  58. package/dist/components/NodeStatusOverlay.stories.svelte +82 -70
  59. package/dist/components/NodeStatusOverlay.stories.svelte.d.ts +1 -1
  60. package/dist/components/NodeStatusOverlay.svelte +295 -280
  61. package/dist/components/NodeStatusOverlay.svelte.d.ts +3 -3
  62. package/dist/components/PipelineStatus.svelte +326 -300
  63. package/dist/components/PipelineStatus.svelte.d.ts +4 -4
  64. package/dist/components/PortCoordinateTracker.svelte +49 -47
  65. package/dist/components/PortCoordinateTracker.svelte.d.ts +1 -1
  66. package/dist/components/ReadOnlyDetails.svelte +156 -156
  67. package/dist/components/SchemaForm.stories.svelte +106 -98
  68. package/dist/components/SchemaForm.stories.svelte.d.ts +1 -1
  69. package/dist/components/SchemaForm.svelte +490 -463
  70. package/dist/components/SchemaForm.svelte.d.ts +2 -2
  71. package/dist/components/SettingsModal.svelte +226 -223
  72. package/dist/components/SettingsModal.svelte.d.ts +1 -1
  73. package/dist/components/SettingsPanel.svelte +637 -601
  74. package/dist/components/SettingsPanel.svelte.d.ts +1 -1
  75. package/dist/components/StatusIcon.stories.svelte +62 -49
  76. package/dist/components/StatusIcon.stories.svelte.d.ts +1 -1
  77. package/dist/components/StatusIcon.svelte +87 -87
  78. package/dist/components/StatusIcon.svelte.d.ts +2 -2
  79. package/dist/components/StatusLabel.stories.svelte +12 -12
  80. package/dist/components/StatusLabel.stories.svelte.d.ts +1 -1
  81. package/dist/components/StatusLabel.svelte +19 -19
  82. package/dist/components/ThemeToggle.stories.svelte +16 -16
  83. package/dist/components/ThemeToggle.stories.svelte.d.ts +1 -1
  84. package/dist/components/ThemeToggle.svelte +180 -169
  85. package/dist/components/ThemeToggle.svelte.d.ts +1 -1
  86. package/dist/components/UniversalNode.svelte +150 -138
  87. package/dist/components/UniversalNode.svelte.d.ts +3 -3
  88. package/dist/components/WorkflowEditor.svelte +1069 -1014
  89. package/dist/components/WorkflowEditor.svelte.d.ts +4 -4
  90. package/dist/components/form/FormArray.svelte +1034 -973
  91. package/dist/components/form/FormArray.svelte.d.ts +1 -1
  92. package/dist/components/form/FormAutocomplete.svelte +1021 -978
  93. package/dist/components/form/FormAutocomplete.svelte.d.ts +1 -1
  94. package/dist/components/form/FormCheckboxGroup.stories.svelte +23 -20
  95. package/dist/components/form/FormCheckboxGroup.stories.svelte.d.ts +1 -1
  96. package/dist/components/form/FormCheckboxGroup.svelte +136 -136
  97. package/dist/components/form/FormCodeEditor.svelte +452 -434
  98. package/dist/components/form/FormField.svelte +366 -355
  99. package/dist/components/form/FormField.svelte.d.ts +2 -2
  100. package/dist/components/form/FormFieldLight.svelte +400 -384
  101. package/dist/components/form/FormFieldLight.svelte.d.ts +1 -1
  102. package/dist/components/form/FormFieldWrapper.stories.svelte +42 -42
  103. package/dist/components/form/FormFieldWrapper.stories.svelte.d.ts +1 -1
  104. package/dist/components/form/FormFieldWrapper.svelte +100 -93
  105. package/dist/components/form/FormFieldWrapper.svelte.d.ts +1 -1
  106. package/dist/components/form/FormFieldset.svelte +108 -108
  107. package/dist/components/form/FormFieldset.svelte.d.ts +2 -2
  108. package/dist/components/form/FormMarkdownEditor.svelte +758 -725
  109. package/dist/components/form/FormNumberField.stories.svelte +25 -25
  110. package/dist/components/form/FormNumberField.stories.svelte.d.ts +1 -1
  111. package/dist/components/form/FormNumberField.svelte +88 -88
  112. package/dist/components/form/FormRangeField.stories.svelte +20 -20
  113. package/dist/components/form/FormRangeField.stories.svelte.d.ts +1 -1
  114. package/dist/components/form/FormRangeField.svelte +234 -226
  115. package/dist/components/form/FormSelect.stories.svelte +38 -38
  116. package/dist/components/form/FormSelect.stories.svelte.d.ts +1 -1
  117. package/dist/components/form/FormSelect.svelte +101 -101
  118. package/dist/components/form/FormSelect.svelte.d.ts +1 -1
  119. package/dist/components/form/FormTemplateEditor.svelte +847 -798
  120. package/dist/components/form/FormTemplateEditor.svelte.d.ts +1 -1
  121. package/dist/components/form/FormTextField.stories.svelte +29 -23
  122. package/dist/components/form/FormTextField.stories.svelte.d.ts +1 -1
  123. package/dist/components/form/FormTextField.svelte +68 -68
  124. package/dist/components/form/FormTextarea.stories.svelte +28 -25
  125. package/dist/components/form/FormTextarea.stories.svelte.d.ts +1 -1
  126. package/dist/components/form/FormTextarea.svelte +74 -74
  127. package/dist/components/form/FormToggle.stories.svelte +23 -20
  128. package/dist/components/form/FormToggle.stories.svelte.d.ts +1 -1
  129. package/dist/components/form/FormToggle.svelte +98 -98
  130. package/dist/components/form/FormUISchemaRenderer.svelte +120 -113
  131. package/dist/components/form/FormUISchemaRenderer.svelte.d.ts +3 -3
  132. package/dist/components/form/index.d.ts +19 -19
  133. package/dist/components/form/index.js +18 -18
  134. package/dist/components/form/templateAutocomplete.d.ts +2 -2
  135. package/dist/components/form/templateAutocomplete.js +64 -55
  136. package/dist/components/form/types.d.ts +6 -6
  137. package/dist/components/form/types.js +9 -4
  138. package/dist/components/icons/AlertCircleIcon.svelte +11 -0
  139. package/dist/components/icons/AlertCircleIcon.svelte.d.ts +26 -0
  140. package/dist/components/icons/CogIcon.svelte +11 -0
  141. package/dist/components/icons/CogIcon.svelte.d.ts +26 -0
  142. package/dist/components/interrupt/ChoicePrompt.stories.svelte +54 -38
  143. package/dist/components/interrupt/ChoicePrompt.stories.svelte.d.ts +1 -1
  144. package/dist/components/interrupt/ChoicePrompt.svelte +407 -383
  145. package/dist/components/interrupt/ChoicePrompt.svelte.d.ts +1 -1
  146. package/dist/components/interrupt/ConfirmationPrompt.stories.svelte +48 -48
  147. package/dist/components/interrupt/ConfirmationPrompt.stories.svelte.d.ts +1 -1
  148. package/dist/components/interrupt/ConfirmationPrompt.svelte +280 -274
  149. package/dist/components/interrupt/ConfirmationPrompt.svelte.d.ts +1 -1
  150. package/dist/components/interrupt/FormPrompt.svelte +223 -218
  151. package/dist/components/interrupt/FormPrompt.svelte.d.ts +1 -1
  152. package/dist/components/interrupt/InterruptBubble.svelte +617 -583
  153. package/dist/components/interrupt/InterruptBubble.svelte.d.ts +2 -2
  154. package/dist/components/interrupt/ReviewPrompt.stories.svelte +66 -56
  155. package/dist/components/interrupt/ReviewPrompt.stories.svelte.d.ts +1 -1
  156. package/dist/components/interrupt/ReviewPrompt.svelte +861 -841
  157. package/dist/components/interrupt/ReviewPrompt.svelte.d.ts +1 -1
  158. package/dist/components/interrupt/TextInputPrompt.stories.svelte +38 -33
  159. package/dist/components/interrupt/TextInputPrompt.stories.svelte.d.ts +1 -1
  160. package/dist/components/interrupt/TextInputPrompt.svelte +333 -328
  161. package/dist/components/interrupt/TextInputPrompt.svelte.d.ts +1 -1
  162. package/dist/components/interrupt/index.d.ts +5 -5
  163. package/dist/components/interrupt/index.js +5 -5
  164. package/dist/components/layouts/MainLayout.svelte +724 -691
  165. package/dist/components/layouts/MainLayout.svelte.d.ts +6 -6
  166. package/dist/components/nodes/GatewayNode.stories.svelte +100 -99
  167. package/dist/components/nodes/GatewayNode.svelte +605 -571
  168. package/dist/components/nodes/GatewayNode.svelte.d.ts +3 -3
  169. package/dist/components/nodes/IdeaNode.stories.svelte +44 -43
  170. package/dist/components/nodes/IdeaNode.svelte +451 -437
  171. package/dist/components/nodes/IdeaNode.svelte.d.ts +1 -1
  172. package/dist/components/nodes/NotesNode.stories.svelte +65 -64
  173. package/dist/components/nodes/NotesNode.svelte +380 -369
  174. package/dist/components/nodes/NotesNode.svelte.d.ts +1 -1
  175. package/dist/components/nodes/SimpleNode.stories.svelte +145 -144
  176. package/dist/components/nodes/SimpleNode.svelte +486 -424
  177. package/dist/components/nodes/SimpleNode.svelte.d.ts +1 -1
  178. package/dist/components/nodes/SquareNode.stories.svelte +73 -73
  179. package/dist/components/nodes/SquareNode.svelte +439 -380
  180. package/dist/components/nodes/SquareNode.svelte.d.ts +1 -1
  181. package/dist/components/nodes/TerminalNode.stories.svelte +13 -13
  182. package/dist/components/nodes/TerminalNode.svelte +709 -670
  183. package/dist/components/nodes/TerminalNode.svelte.d.ts +1 -1
  184. package/dist/components/nodes/ToolNode.stories.svelte +181 -180
  185. package/dist/components/nodes/ToolNode.svelte +505 -447
  186. package/dist/components/nodes/ToolNode.svelte.d.ts +1 -1
  187. package/dist/components/nodes/WorkflowNode.stories.svelte +70 -46
  188. package/dist/components/nodes/WorkflowNode.svelte +621 -551
  189. package/dist/components/nodes/WorkflowNode.svelte.d.ts +3 -3
  190. package/dist/components/playground/ChatPanel.svelte +945 -889
  191. package/dist/components/playground/ExecutionLogs.svelte +495 -472
  192. package/dist/components/playground/InputCollector.svelte +449 -428
  193. package/dist/components/playground/MessageBubble.stories.svelte +47 -47
  194. package/dist/components/playground/MessageBubble.stories.svelte.d.ts +1 -1
  195. package/dist/components/playground/MessageBubble.svelte +626 -610
  196. package/dist/components/playground/MessageBubble.svelte.d.ts +1 -1
  197. package/dist/components/playground/Playground.svelte +1088 -1057
  198. package/dist/components/playground/Playground.svelte.d.ts +3 -3
  199. package/dist/components/playground/PlaygroundModal.svelte +208 -204
  200. package/dist/components/playground/PlaygroundModal.svelte.d.ts +3 -3
  201. package/dist/components/playground/SessionManager.svelte +527 -521
  202. package/dist/components/playground/SessionManager.svelte.d.ts +1 -1
  203. package/dist/config/agentSpecEndpoints.d.ts +1 -1
  204. package/dist/config/agentSpecEndpoints.js +20 -20
  205. package/dist/config/constants.js +2 -2
  206. package/dist/config/defaultCategories.d.ts +1 -1
  207. package/dist/config/defaultCategories.js +86 -86
  208. package/dist/config/defaultPortConfig.d.ts +1 -1
  209. package/dist/config/defaultPortConfig.js +144 -144
  210. package/dist/config/endpoints.d.ts +4 -4
  211. package/dist/config/endpoints.js +65 -65
  212. package/dist/config/runtimeConfig.d.ts +2 -2
  213. package/dist/config/runtimeConfig.js +8 -8
  214. package/dist/core/index.d.ts +63 -59
  215. package/dist/core/index.js +35 -33
  216. package/dist/display/index.d.ts +2 -2
  217. package/dist/display/index.js +2 -2
  218. package/dist/editor/index.d.ts +62 -62
  219. package/dist/editor/index.js +53 -53
  220. package/dist/form/code.d.ts +5 -5
  221. package/dist/form/code.js +14 -14
  222. package/dist/form/fieldRegistry.d.ts +3 -3
  223. package/dist/form/fieldRegistry.js +11 -9
  224. package/dist/form/full.d.ts +8 -8
  225. package/dist/form/full.js +9 -9
  226. package/dist/form/index.d.ts +18 -18
  227. package/dist/form/index.js +16 -16
  228. package/dist/form/markdown.d.ts +4 -4
  229. package/dist/form/markdown.js +8 -8
  230. package/dist/helpers/proximityConnect.d.ts +3 -3
  231. package/dist/helpers/proximityConnect.js +34 -32
  232. package/dist/helpers/workflowEditorHelper.d.ts +5 -5
  233. package/dist/helpers/workflowEditorHelper.js +108 -96
  234. package/dist/index.d.ts +6 -6
  235. package/dist/index.js +6 -6
  236. package/dist/mocks/app-environment.js +2 -2
  237. package/dist/mocks/app-forms.js +9 -9
  238. package/dist/mocks/app-navigation.js +11 -11
  239. package/dist/mocks/app-stores.js +8 -8
  240. package/dist/playground/index.d.ts +19 -19
  241. package/dist/playground/index.js +16 -16
  242. package/dist/playground/mount.d.ts +3 -3
  243. package/dist/playground/mount.js +24 -24
  244. package/dist/registry/builtinFormats.js +13 -13
  245. package/dist/registry/builtinNodes.d.ts +2 -2
  246. package/dist/registry/builtinNodes.js +77 -77
  247. package/dist/registry/index.d.ts +4 -4
  248. package/dist/registry/index.js +4 -4
  249. package/dist/registry/nodeComponentRegistry.d.ts +8 -8
  250. package/dist/registry/nodeComponentRegistry.js +11 -9
  251. package/dist/registry/plugin.d.ts +2 -2
  252. package/dist/registry/plugin.js +11 -11
  253. package/dist/registry/workflowFormatRegistry.d.ts +3 -3
  254. package/dist/registry/workflowFormatRegistry.js +2 -2
  255. package/dist/schema/index.d.ts +1 -1
  256. package/dist/schema/index.js +2 -2
  257. package/dist/schemas/v1/workflow.schema.json +22 -107
  258. package/dist/services/agentSpecExecutionService.d.ts +3 -3
  259. package/dist/services/agentSpecExecutionService.js +59 -55
  260. package/dist/services/api.d.ts +2 -2
  261. package/dist/services/api.js +37 -37
  262. package/dist/services/apiVariableService.d.ts +1 -1
  263. package/dist/services/apiVariableService.js +41 -34
  264. package/dist/services/autoSaveService.js +8 -8
  265. package/dist/services/categoriesApi.d.ts +2 -2
  266. package/dist/services/categoriesApi.js +8 -8
  267. package/dist/services/draftStorage.d.ts +1 -1
  268. package/dist/services/draftStorage.js +11 -11
  269. package/dist/services/dynamicSchemaService.d.ts +1 -1
  270. package/dist/services/dynamicSchemaService.js +41 -39
  271. package/dist/services/globalSave.d.ts +2 -2
  272. package/dist/services/globalSave.js +41 -38
  273. package/dist/services/historyService.d.ts +1 -1
  274. package/dist/services/historyService.js +8 -8
  275. package/dist/services/interruptService.d.ts +1 -1
  276. package/dist/services/interruptService.js +35 -29
  277. package/dist/services/nodeExecutionService.d.ts +1 -1
  278. package/dist/services/nodeExecutionService.js +45 -44
  279. package/dist/services/playgroundService.d.ts +1 -1
  280. package/dist/services/playgroundService.js +29 -29
  281. package/dist/services/portConfigApi.d.ts +2 -2
  282. package/dist/services/portConfigApi.js +8 -8
  283. package/dist/services/settingsService.d.ts +2 -2
  284. package/dist/services/settingsService.js +25 -19
  285. package/dist/services/toastService.d.ts +4 -4
  286. package/dist/services/toastService.js +33 -33
  287. package/dist/services/variableService.d.ts +1 -1
  288. package/dist/services/variableService.js +36 -36
  289. package/dist/services/workflowStorage.d.ts +2 -2
  290. package/dist/services/workflowStorage.js +13 -13
  291. package/dist/settings/index.d.ts +7 -7
  292. package/dist/settings/index.js +6 -6
  293. package/dist/skins/default.d.ts +2 -0
  294. package/dist/skins/default.js +1 -0
  295. package/dist/skins/index.d.ts +13 -0
  296. package/dist/skins/index.js +30 -0
  297. package/dist/skins/slate.d.ts +2 -0
  298. package/dist/skins/slate.js +78 -0
  299. package/dist/stores/categoriesStore.svelte.d.ts +1 -1
  300. package/dist/stores/categoriesStore.svelte.js +5 -5
  301. package/dist/stores/editorStateMachine.svelte.d.ts +2 -2
  302. package/dist/stores/editorStateMachine.svelte.js +65 -33
  303. package/dist/stores/historyStore.svelte.d.ts +4 -4
  304. package/dist/stores/historyStore.svelte.js +4 -4
  305. package/dist/stores/interruptStore.svelte.d.ts +3 -3
  306. package/dist/stores/interruptStore.svelte.js +21 -21
  307. package/dist/stores/playgroundStore.svelte.d.ts +2 -2
  308. package/dist/stores/playgroundStore.svelte.js +25 -18
  309. package/dist/stores/portCoordinateStore.svelte.d.ts +2 -2
  310. package/dist/stores/portCoordinateStore.svelte.js +15 -8
  311. package/dist/stores/settingsStore.svelte.d.ts +2 -2
  312. package/dist/stores/settingsStore.svelte.js +62 -57
  313. package/dist/stores/workflowStore.svelte.d.ts +3 -3
  314. package/dist/stores/workflowStore.svelte.js +50 -47
  315. package/dist/stories/CanvasDecorator.svelte +35 -32
  316. package/dist/stories/CanvasDecorator.svelte.d.ts +2 -2
  317. package/dist/stories/EdgeDecorator.svelte +102 -99
  318. package/dist/stories/EdgeDecorator.svelte.d.ts +1 -1
  319. package/dist/stories/NodeDecorator.svelte +59 -53
  320. package/dist/stories/NodeDecorator.svelte.d.ts +1 -1
  321. package/dist/stories/utils.d.ts +2 -2
  322. package/dist/stories/utils.js +105 -67
  323. package/dist/styles/base.css +599 -595
  324. package/dist/styles/toast.css +14 -14
  325. package/dist/styles/tokens.css +409 -378
  326. package/dist/svelte-app.d.ts +9 -9
  327. package/dist/svelte-app.js +39 -39
  328. package/dist/themes/default.d.ts +2 -0
  329. package/dist/themes/default.js +9 -0
  330. package/dist/themes/index.d.ts +13 -0
  331. package/dist/themes/index.js +44 -0
  332. package/dist/themes/minimal.d.ts +2 -0
  333. package/dist/themes/minimal.js +11 -0
  334. package/dist/types/agentspec.d.ts +18 -18
  335. package/dist/types/agentspec.js +2 -2
  336. package/dist/types/auth.d.ts +1 -1
  337. package/dist/types/auth.js +6 -6
  338. package/dist/types/config.d.ts +6 -6
  339. package/dist/types/events.d.ts +2 -2
  340. package/dist/types/events.js +2 -2
  341. package/dist/types/index.d.ts +32 -32
  342. package/dist/types/index.js +6 -6
  343. package/dist/types/interrupt.d.ts +6 -6
  344. package/dist/types/interrupt.js +21 -21
  345. package/dist/types/interruptState.d.ts +12 -12
  346. package/dist/types/interruptState.js +66 -66
  347. package/dist/types/playground.d.ts +7 -7
  348. package/dist/types/playground.js +14 -14
  349. package/dist/types/settings.d.ts +5 -3
  350. package/dist/types/settings.js +25 -18
  351. package/dist/types/skin.d.ts +31 -0
  352. package/dist/types/skin.js +1 -0
  353. package/dist/types/theme.d.ts +35 -0
  354. package/dist/types/theme.js +1 -0
  355. package/dist/types/uischema.d.ts +4 -4
  356. package/dist/types/uischema.js +3 -3
  357. package/dist/utils/colors.d.ts +1 -1
  358. package/dist/utils/colors.js +97 -95
  359. package/dist/utils/config.d.ts +2 -2
  360. package/dist/utils/config.js +48 -48
  361. package/dist/utils/connections.d.ts +2 -2
  362. package/dist/utils/connections.js +15 -15
  363. package/dist/utils/errors.js +3 -3
  364. package/dist/utils/fetchWithAuth.d.ts +1 -1
  365. package/dist/utils/fetchWithAuth.js +2 -2
  366. package/dist/utils/handleIds.d.ts +2 -2
  367. package/dist/utils/handleIds.js +8 -8
  368. package/dist/utils/handlePositioning.d.ts +1 -1
  369. package/dist/utils/handlePositioning.js +2 -2
  370. package/dist/utils/icons.d.ts +1 -1
  371. package/dist/utils/icons.js +74 -74
  372. package/dist/utils/logger.d.ts +1 -1
  373. package/dist/utils/logger.js +7 -7
  374. package/dist/utils/nodeStatus.d.ts +1 -1
  375. package/dist/utils/nodeStatus.js +48 -48
  376. package/dist/utils/nodeTypes.d.ts +1 -1
  377. package/dist/utils/nodeTypes.js +21 -20
  378. package/dist/utils/nodeWrapper.d.ts +7 -7
  379. package/dist/utils/nodeWrapper.js +21 -19
  380. package/dist/utils/performanceUtils.d.ts +1 -1
  381. package/dist/utils/performanceUtils.js +2 -1
  382. package/dist/utils/sanitize.js +1 -1
  383. package/dist/utils/uischema.d.ts +2 -2
  384. package/dist/utils/uischema.js +8 -8
  385. package/dist/utils/validation.js +20 -8
  386. package/package.json +1 -1
@@ -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>