@flowdrop/flowdrop 1.0.1 → 1.2.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 (385) 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 +1090 -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 +52 -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 +905 -746
  57. package/dist/components/NodeSidebar.svelte.d.ts +5 -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/services/agentSpecExecutionService.d.ts +3 -3
  258. package/dist/services/agentSpecExecutionService.js +59 -55
  259. package/dist/services/api.d.ts +2 -2
  260. package/dist/services/api.js +37 -37
  261. package/dist/services/apiVariableService.d.ts +1 -1
  262. package/dist/services/apiVariableService.js +41 -34
  263. package/dist/services/autoSaveService.js +8 -8
  264. package/dist/services/categoriesApi.d.ts +2 -2
  265. package/dist/services/categoriesApi.js +8 -8
  266. package/dist/services/draftStorage.d.ts +1 -1
  267. package/dist/services/draftStorage.js +11 -11
  268. package/dist/services/dynamicSchemaService.d.ts +1 -1
  269. package/dist/services/dynamicSchemaService.js +41 -39
  270. package/dist/services/globalSave.d.ts +2 -2
  271. package/dist/services/globalSave.js +41 -38
  272. package/dist/services/historyService.d.ts +1 -1
  273. package/dist/services/historyService.js +8 -8
  274. package/dist/services/interruptService.d.ts +1 -1
  275. package/dist/services/interruptService.js +35 -29
  276. package/dist/services/nodeExecutionService.d.ts +1 -1
  277. package/dist/services/nodeExecutionService.js +45 -44
  278. package/dist/services/playgroundService.d.ts +1 -1
  279. package/dist/services/playgroundService.js +29 -29
  280. package/dist/services/portConfigApi.d.ts +2 -2
  281. package/dist/services/portConfigApi.js +8 -8
  282. package/dist/services/settingsService.d.ts +2 -2
  283. package/dist/services/settingsService.js +25 -19
  284. package/dist/services/toastService.d.ts +4 -4
  285. package/dist/services/toastService.js +33 -33
  286. package/dist/services/variableService.d.ts +1 -1
  287. package/dist/services/variableService.js +36 -36
  288. package/dist/services/workflowStorage.d.ts +2 -2
  289. package/dist/services/workflowStorage.js +13 -13
  290. package/dist/settings/index.d.ts +7 -7
  291. package/dist/settings/index.js +6 -6
  292. package/dist/skins/default.d.ts +2 -0
  293. package/dist/skins/default.js +1 -0
  294. package/dist/skins/index.d.ts +13 -0
  295. package/dist/skins/index.js +30 -0
  296. package/dist/skins/slate.d.ts +2 -0
  297. package/dist/skins/slate.js +78 -0
  298. package/dist/stores/categoriesStore.svelte.d.ts +1 -1
  299. package/dist/stores/categoriesStore.svelte.js +5 -5
  300. package/dist/stores/editorStateMachine.svelte.d.ts +2 -2
  301. package/dist/stores/editorStateMachine.svelte.js +65 -33
  302. package/dist/stores/historyStore.svelte.d.ts +4 -4
  303. package/dist/stores/historyStore.svelte.js +4 -4
  304. package/dist/stores/interruptStore.svelte.d.ts +3 -3
  305. package/dist/stores/interruptStore.svelte.js +21 -21
  306. package/dist/stores/playgroundStore.svelte.d.ts +2 -2
  307. package/dist/stores/playgroundStore.svelte.js +25 -18
  308. package/dist/stores/portCoordinateStore.svelte.d.ts +2 -2
  309. package/dist/stores/portCoordinateStore.svelte.js +15 -8
  310. package/dist/stores/settingsStore.svelte.d.ts +2 -2
  311. package/dist/stores/settingsStore.svelte.js +62 -57
  312. package/dist/stores/workflowStore.svelte.d.ts +3 -3
  313. package/dist/stores/workflowStore.svelte.js +50 -47
  314. package/dist/stories/CanvasDecorator.svelte +35 -32
  315. package/dist/stories/CanvasDecorator.svelte.d.ts +2 -2
  316. package/dist/stories/EdgeDecorator.svelte +102 -99
  317. package/dist/stories/EdgeDecorator.svelte.d.ts +1 -1
  318. package/dist/stories/NodeDecorator.svelte +59 -53
  319. package/dist/stories/NodeDecorator.svelte.d.ts +1 -1
  320. package/dist/stories/utils.d.ts +2 -2
  321. package/dist/stories/utils.js +105 -67
  322. package/dist/styles/base.css +599 -595
  323. package/dist/styles/toast.css +14 -14
  324. package/dist/styles/tokens.css +409 -378
  325. package/dist/svelte-app.d.ts +12 -9
  326. package/dist/svelte-app.js +40 -39
  327. package/dist/themes/default.d.ts +2 -0
  328. package/dist/themes/default.js +9 -0
  329. package/dist/themes/index.d.ts +13 -0
  330. package/dist/themes/index.js +44 -0
  331. package/dist/themes/minimal.d.ts +2 -0
  332. package/dist/themes/minimal.js +11 -0
  333. package/dist/types/agentspec.d.ts +18 -18
  334. package/dist/types/agentspec.js +2 -2
  335. package/dist/types/auth.d.ts +1 -1
  336. package/dist/types/auth.js +6 -6
  337. package/dist/types/config.d.ts +6 -6
  338. package/dist/types/events.d.ts +2 -2
  339. package/dist/types/events.js +2 -2
  340. package/dist/types/index.d.ts +32 -32
  341. package/dist/types/index.js +6 -6
  342. package/dist/types/interrupt.d.ts +6 -6
  343. package/dist/types/interrupt.js +21 -21
  344. package/dist/types/interruptState.d.ts +12 -12
  345. package/dist/types/interruptState.js +66 -66
  346. package/dist/types/playground.d.ts +7 -7
  347. package/dist/types/playground.js +14 -14
  348. package/dist/types/settings.d.ts +5 -3
  349. package/dist/types/settings.js +25 -18
  350. package/dist/types/skin.d.ts +31 -0
  351. package/dist/types/skin.js +1 -0
  352. package/dist/types/theme.d.ts +35 -0
  353. package/dist/types/theme.js +1 -0
  354. package/dist/types/uischema.d.ts +4 -4
  355. package/dist/types/uischema.js +3 -3
  356. package/dist/utils/colors.d.ts +1 -1
  357. package/dist/utils/colors.js +97 -95
  358. package/dist/utils/config.d.ts +2 -2
  359. package/dist/utils/config.js +48 -48
  360. package/dist/utils/connections.d.ts +2 -2
  361. package/dist/utils/connections.js +15 -15
  362. package/dist/utils/errors.js +3 -3
  363. package/dist/utils/fetchWithAuth.d.ts +1 -1
  364. package/dist/utils/fetchWithAuth.js +2 -2
  365. package/dist/utils/handleIds.d.ts +2 -2
  366. package/dist/utils/handleIds.js +8 -8
  367. package/dist/utils/handlePositioning.d.ts +1 -1
  368. package/dist/utils/handlePositioning.js +2 -2
  369. package/dist/utils/icons.d.ts +1 -1
  370. package/dist/utils/icons.js +74 -74
  371. package/dist/utils/logger.d.ts +1 -1
  372. package/dist/utils/logger.js +7 -7
  373. package/dist/utils/nodeStatus.d.ts +1 -1
  374. package/dist/utils/nodeStatus.js +48 -48
  375. package/dist/utils/nodeTypes.d.ts +1 -1
  376. package/dist/utils/nodeTypes.js +21 -20
  377. package/dist/utils/nodeWrapper.d.ts +7 -7
  378. package/dist/utils/nodeWrapper.js +21 -19
  379. package/dist/utils/performanceUtils.d.ts +1 -1
  380. package/dist/utils/performanceUtils.js +2 -1
  381. package/dist/utils/sanitize.js +1 -1
  382. package/dist/utils/uischema.d.ts +2 -2
  383. package/dist/utils/uischema.js +8 -8
  384. package/dist/utils/validation.js +20 -8
  385. package/package.json +1 -1
@@ -7,532 +7,538 @@
7
7
  -->
8
8
 
9
9
  <script lang="ts">
10
- import Icon from '@iconify/svelte';
11
- import { slide } from 'svelte/transition';
12
- import type { PlaygroundSession } from '../../types/playground.js';
13
- import {
14
- getSessions,
15
- getCurrentSession,
16
- getIsLoading,
17
- getSessionCount
18
- } from '../../stores/playgroundStore.svelte.js';
19
-
20
- /**
21
- * Component props
22
- */
23
- interface Props {
24
- /** Whether the session list is expanded */
25
- isExpanded?: boolean;
26
- /** Callback when expansion state changes */
27
- onToggle?: (expanded: boolean) => void;
28
- /** Callback when user wants to create a new session */
29
- onCreateSession?: () => void;
30
- /** Callback when user selects a session */
31
- onSelectSession?: (sessionId: string) => void;
32
- /** Callback when user wants to delete a session */
33
- onDeleteSession?: (sessionId: string) => void;
34
- /** Display mode: sidebar or dropdown */
35
- mode?: 'sidebar' | 'dropdown';
36
- }
37
-
38
- let {
39
- isExpanded = $bindable(false),
40
- onToggle,
41
- onCreateSession,
42
- onSelectSession,
43
- onDeleteSession,
44
- mode = 'sidebar'
45
- }: Props = $props();
46
-
47
- /** Session pending deletion (for confirmation) */
48
- let pendingDeleteId = $state<string | null>(null);
49
-
50
- /**
51
- * Toggle expansion
52
- */
53
- function toggleExpanded(): void {
54
- isExpanded = !isExpanded;
55
- onToggle?.(isExpanded);
56
- }
57
-
58
- /**
59
- * Handle session selection
60
- */
61
- function handleSelectSession(sessionId: string): void {
62
- onSelectSession?.(sessionId);
63
- if (mode === 'dropdown') {
64
- isExpanded = false;
65
- }
66
- }
67
-
68
- /**
69
- * Handle delete click - show confirmation
70
- */
71
- function handleDeleteClick(event: Event, sessionId: string): void {
72
- event.stopPropagation();
73
- if (pendingDeleteId === sessionId) {
74
- // Confirm deletion
75
- onDeleteSession?.(sessionId);
76
- pendingDeleteId = null;
77
- } else {
78
- pendingDeleteId = sessionId;
79
- // Auto-reset after 3 seconds
80
- setTimeout(() => {
81
- if (pendingDeleteId === sessionId) {
82
- pendingDeleteId = null;
83
- }
84
- }, 3000);
85
- }
86
- }
87
-
88
- /**
89
- * Cancel delete confirmation
90
- */
91
- function cancelDelete(event: Event): void {
92
- event.stopPropagation();
93
- pendingDeleteId = null;
94
- }
95
-
96
- /**
97
- * Format date for display
98
- */
99
- function formatDate(dateString: string): string {
100
- const date = new Date(dateString);
101
- const now = new Date();
102
- const diffMs = now.getTime() - date.getTime();
103
- const diffMins = Math.floor(diffMs / 60000);
104
- const diffHours = Math.floor(diffMs / 3600000);
105
- const diffDays = Math.floor(diffMs / 86400000);
106
-
107
- if (diffMins < 1) {
108
- return 'Just now';
109
- }
110
- if (diffMins < 60) {
111
- return `${diffMins}m ago`;
112
- }
113
- if (diffHours < 24) {
114
- return `${diffHours}h ago`;
115
- }
116
- if (diffDays < 7) {
117
- return `${diffDays}d ago`;
118
- }
119
- return date.toLocaleDateString('en-US', {
120
- month: 'short',
121
- day: 'numeric'
122
- });
123
- }
124
-
125
- /**
126
- * Get status icon
127
- */
128
- function getStatusIcon(status: PlaygroundSession['status']): string {
129
- switch (status) {
130
- case 'running':
131
- return 'mdi:loading';
132
- case 'completed':
133
- return 'mdi:check-circle';
134
- case 'failed':
135
- return 'mdi:alert-circle';
136
- default:
137
- return 'mdi:circle-outline';
138
- }
139
- }
140
-
141
- /**
142
- * Get status color class
143
- */
144
- function getStatusClass(status: PlaygroundSession['status']): string {
145
- switch (status) {
146
- case 'running':
147
- return 'session-manager__status--running';
148
- case 'completed':
149
- return 'session-manager__status--completed';
150
- case 'failed':
151
- return 'session-manager__status--failed';
152
- default:
153
- return 'session-manager__status--idle';
154
- }
155
- }
10
+ import Icon from "@iconify/svelte";
11
+ import { slide } from "svelte/transition";
12
+ import type { PlaygroundSession } from "../../types/playground.js";
13
+ import {
14
+ getSessions,
15
+ getCurrentSession,
16
+ getIsLoading,
17
+ getSessionCount,
18
+ } from "../../stores/playgroundStore.svelte.js";
19
+
20
+ /**
21
+ * Component props
22
+ */
23
+ interface Props {
24
+ /** Whether the session list is expanded */
25
+ isExpanded?: boolean;
26
+ /** Callback when expansion state changes */
27
+ onToggle?: (expanded: boolean) => void;
28
+ /** Callback when user wants to create a new session */
29
+ onCreateSession?: () => void;
30
+ /** Callback when user selects a session */
31
+ onSelectSession?: (sessionId: string) => void;
32
+ /** Callback when user wants to delete a session */
33
+ onDeleteSession?: (sessionId: string) => void;
34
+ /** Display mode: sidebar or dropdown */
35
+ mode?: "sidebar" | "dropdown";
36
+ }
37
+
38
+ let {
39
+ isExpanded = $bindable(false),
40
+ onToggle,
41
+ onCreateSession,
42
+ onSelectSession,
43
+ onDeleteSession,
44
+ mode = "sidebar",
45
+ }: Props = $props();
46
+
47
+ /** Session pending deletion (for confirmation) */
48
+ let pendingDeleteId = $state<string | null>(null);
49
+
50
+ /**
51
+ * Toggle expansion
52
+ */
53
+ function toggleExpanded(): void {
54
+ isExpanded = !isExpanded;
55
+ onToggle?.(isExpanded);
56
+ }
57
+
58
+ /**
59
+ * Handle session selection
60
+ */
61
+ function handleSelectSession(sessionId: string): void {
62
+ onSelectSession?.(sessionId);
63
+ if (mode === "dropdown") {
64
+ isExpanded = false;
65
+ }
66
+ }
67
+
68
+ /**
69
+ * Handle delete click - show confirmation
70
+ */
71
+ function handleDeleteClick(event: Event, sessionId: string): void {
72
+ event.stopPropagation();
73
+ if (pendingDeleteId === sessionId) {
74
+ // Confirm deletion
75
+ onDeleteSession?.(sessionId);
76
+ pendingDeleteId = null;
77
+ } else {
78
+ pendingDeleteId = sessionId;
79
+ // Auto-reset after 3 seconds
80
+ setTimeout(() => {
81
+ if (pendingDeleteId === sessionId) {
82
+ pendingDeleteId = null;
83
+ }
84
+ }, 3000);
85
+ }
86
+ }
87
+
88
+ /**
89
+ * Cancel delete confirmation
90
+ */
91
+ function cancelDelete(event: Event): void {
92
+ event.stopPropagation();
93
+ pendingDeleteId = null;
94
+ }
95
+
96
+ /**
97
+ * Format date for display
98
+ */
99
+ function formatDate(dateString: string): string {
100
+ const date = new Date(dateString);
101
+ const now = new Date();
102
+ const diffMs = now.getTime() - date.getTime();
103
+ const diffMins = Math.floor(diffMs / 60000);
104
+ const diffHours = Math.floor(diffMs / 3600000);
105
+ const diffDays = Math.floor(diffMs / 86400000);
106
+
107
+ if (diffMins < 1) {
108
+ return "Just now";
109
+ }
110
+ if (diffMins < 60) {
111
+ return `${diffMins}m ago`;
112
+ }
113
+ if (diffHours < 24) {
114
+ return `${diffHours}h ago`;
115
+ }
116
+ if (diffDays < 7) {
117
+ return `${diffDays}d ago`;
118
+ }
119
+ return date.toLocaleDateString("en-US", {
120
+ month: "short",
121
+ day: "numeric",
122
+ });
123
+ }
124
+
125
+ /**
126
+ * Get status icon
127
+ */
128
+ function getStatusIcon(status: PlaygroundSession["status"]): string {
129
+ switch (status) {
130
+ case "running":
131
+ return "mdi:loading";
132
+ case "completed":
133
+ return "mdi:check-circle";
134
+ case "failed":
135
+ return "mdi:alert-circle";
136
+ default:
137
+ return "mdi:circle-outline";
138
+ }
139
+ }
140
+
141
+ /**
142
+ * Get status color class
143
+ */
144
+ function getStatusClass(status: PlaygroundSession["status"]): string {
145
+ switch (status) {
146
+ case "running":
147
+ return "session-manager__status--running";
148
+ case "completed":
149
+ return "session-manager__status--completed";
150
+ case "failed":
151
+ return "session-manager__status--failed";
152
+ default:
153
+ return "session-manager__status--idle";
154
+ }
155
+ }
156
156
  </script>
157
157
 
158
158
  <div
159
- class="session-manager"
160
- class:session-manager--expanded={isExpanded}
161
- class:session-manager--sidebar={mode === 'sidebar'}
162
- class:session-manager--dropdown={mode === 'dropdown'}
159
+ class="session-manager"
160
+ class:session-manager--expanded={isExpanded}
161
+ class:session-manager--sidebar={mode === "sidebar"}
162
+ class:session-manager--dropdown={mode === "dropdown"}
163
163
  >
164
- <!-- Header / Toggle -->
165
- <button
166
- type="button"
167
- class="session-manager__header"
168
- onclick={toggleExpanded}
169
- aria-expanded={isExpanded}
170
- >
171
- <div class="session-manager__title">
172
- <Icon icon="mdi:history" />
173
- <span>Sessions</span>
174
- {#if getSessionCount() > 0}
175
- <span class="session-manager__count">{getSessionCount()}</span>
176
- {/if}
177
- </div>
178
- <Icon
179
- icon="mdi:chevron-down"
180
- class="session-manager__chevron {isExpanded ? 'session-manager__chevron--expanded' : ''}"
181
- />
182
- </button>
183
-
184
- <!-- Content -->
185
- {#if isExpanded}
186
- <div class="session-manager__content" transition:slide={{ duration: 200 }}>
187
- <!-- New Session Button -->
188
- <button
189
- type="button"
190
- class="session-manager__new-btn"
191
- onclick={onCreateSession}
192
- disabled={getIsLoading()}
193
- >
194
- <Icon icon="mdi:plus" />
195
- New Session
196
- </button>
197
-
198
- <!-- Sessions List -->
199
- <div class="session-manager__list">
200
- {#if getSessions().length === 0}
201
- <div class="session-manager__empty">
202
- <Icon icon="mdi:chat-outline" />
203
- <span>No sessions yet</span>
204
- </div>
205
- {:else}
206
- {#each getSessions() as session (session.id)}
207
- <div
208
- class="session-manager__item"
209
- class:session-manager__item--active={getCurrentSession()?.id === session.id}
210
- role="button"
211
- tabindex="0"
212
- onclick={() => handleSelectSession(session.id)}
213
- onkeydown={(e) => e.key === 'Enter' && handleSelectSession(session.id)}
214
- >
215
- <div class="session-manager__item-info">
216
- <div class="session-manager__item-header">
217
- <span class="session-manager__item-name" title={session.name}>
218
- {session.name}
219
- </span>
220
- <span
221
- class="session-manager__status {getStatusClass(session.status)}"
222
- title={session.status}
223
- >
224
- <Icon icon={getStatusIcon(session.status)} />
225
- </span>
226
- </div>
227
- <span class="session-manager__item-time">
228
- {formatDate(session.updatedAt)}
229
- </span>
230
- </div>
231
-
232
- <!-- Delete Actions -->
233
- <div class="session-manager__item-actions">
234
- {#if pendingDeleteId === session.id}
235
- <button
236
- type="button"
237
- class="session-manager__delete-btn session-manager__delete-btn--confirm"
238
- onclick={(e) => handleDeleteClick(e, session.id)}
239
- title="Click again to confirm"
240
- >
241
- <Icon icon="mdi:check" />
242
- </button>
243
- <button
244
- type="button"
245
- class="session-manager__delete-btn session-manager__delete-btn--cancel"
246
- onclick={cancelDelete}
247
- title="Cancel"
248
- >
249
- <Icon icon="mdi:close" />
250
- </button>
251
- {:else}
252
- <button
253
- type="button"
254
- class="session-manager__delete-btn"
255
- onclick={(e) => handleDeleteClick(e, session.id)}
256
- title="Delete session"
257
- >
258
- <Icon icon="mdi:delete-outline" />
259
- </button>
260
- {/if}
261
- </div>
262
- </div>
263
- {/each}
264
- {/if}
265
- </div>
266
- </div>
267
- {/if}
164
+ <!-- Header / Toggle -->
165
+ <button
166
+ type="button"
167
+ class="session-manager__header"
168
+ onclick={toggleExpanded}
169
+ aria-expanded={isExpanded}
170
+ >
171
+ <div class="session-manager__title">
172
+ <Icon icon="mdi:history" />
173
+ <span>Sessions</span>
174
+ {#if getSessionCount() > 0}
175
+ <span class="session-manager__count">{getSessionCount()}</span>
176
+ {/if}
177
+ </div>
178
+ <Icon
179
+ icon="mdi:chevron-down"
180
+ class="session-manager__chevron {isExpanded
181
+ ? 'session-manager__chevron--expanded'
182
+ : ''}"
183
+ />
184
+ </button>
185
+
186
+ <!-- Content -->
187
+ {#if isExpanded}
188
+ <div class="session-manager__content" transition:slide={{ duration: 200 }}>
189
+ <!-- New Session Button -->
190
+ <button
191
+ type="button"
192
+ class="session-manager__new-btn"
193
+ onclick={onCreateSession}
194
+ disabled={getIsLoading()}
195
+ >
196
+ <Icon icon="mdi:plus" />
197
+ New Session
198
+ </button>
199
+
200
+ <!-- Sessions List -->
201
+ <div class="session-manager__list">
202
+ {#if getSessions().length === 0}
203
+ <div class="session-manager__empty">
204
+ <Icon icon="mdi:chat-outline" />
205
+ <span>No sessions yet</span>
206
+ </div>
207
+ {:else}
208
+ {#each getSessions() as session (session.id)}
209
+ <div
210
+ class="session-manager__item"
211
+ class:session-manager__item--active={getCurrentSession()?.id ===
212
+ session.id}
213
+ role="button"
214
+ tabindex="0"
215
+ onclick={() => handleSelectSession(session.id)}
216
+ onkeydown={(e) =>
217
+ e.key === "Enter" && handleSelectSession(session.id)}
218
+ >
219
+ <div class="session-manager__item-info">
220
+ <div class="session-manager__item-header">
221
+ <span class="session-manager__item-name" title={session.name}>
222
+ {session.name}
223
+ </span>
224
+ <span
225
+ class="session-manager__status {getStatusClass(
226
+ session.status,
227
+ )}"
228
+ title={session.status}
229
+ >
230
+ <Icon icon={getStatusIcon(session.status)} />
231
+ </span>
232
+ </div>
233
+ <span class="session-manager__item-time">
234
+ {formatDate(session.updatedAt)}
235
+ </span>
236
+ </div>
237
+
238
+ <!-- Delete Actions -->
239
+ <div class="session-manager__item-actions">
240
+ {#if pendingDeleteId === session.id}
241
+ <button
242
+ type="button"
243
+ class="session-manager__delete-btn session-manager__delete-btn--confirm"
244
+ onclick={(e) => handleDeleteClick(e, session.id)}
245
+ title="Click again to confirm"
246
+ >
247
+ <Icon icon="mdi:check" />
248
+ </button>
249
+ <button
250
+ type="button"
251
+ class="session-manager__delete-btn session-manager__delete-btn--cancel"
252
+ onclick={cancelDelete}
253
+ title="Cancel"
254
+ >
255
+ <Icon icon="mdi:close" />
256
+ </button>
257
+ {:else}
258
+ <button
259
+ type="button"
260
+ class="session-manager__delete-btn"
261
+ onclick={(e) => handleDeleteClick(e, session.id)}
262
+ title="Delete session"
263
+ >
264
+ <Icon icon="mdi:delete-outline" />
265
+ </button>
266
+ {/if}
267
+ </div>
268
+ </div>
269
+ {/each}
270
+ {/if}
271
+ </div>
272
+ </div>
273
+ {/if}
268
274
  </div>
269
275
 
270
276
  <style>
271
- .session-manager {
272
- background-color: var(--fd-background);
273
- border-bottom: 1px solid var(--fd-border);
274
- }
275
-
276
- .session-manager--dropdown {
277
- position: relative;
278
- }
279
-
280
- .session-manager--dropdown .session-manager__content {
281
- position: absolute;
282
- top: 100%;
283
- left: 0;
284
- right: 0;
285
- z-index: 50;
286
- background-color: var(--fd-background);
287
- border: 1px solid var(--fd-border);
288
- border-radius: 0 0 var(--fd-radius-lg) var(--fd-radius-lg);
289
- box-shadow: var(--fd-shadow-lg);
290
- }
291
-
292
- /* Header */
293
- .session-manager__header {
294
- display: flex;
295
- align-items: center;
296
- justify-content: space-between;
297
- width: 100%;
298
- padding: var(--fd-space-md) var(--fd-space-xl);
299
- border: none;
300
- background: transparent;
301
- cursor: pointer;
302
- transition: background-color var(--fd-transition-normal);
303
- }
304
-
305
- .session-manager__header:hover {
306
- background-color: var(--fd-muted);
307
- }
308
-
309
- .session-manager__title {
310
- display: flex;
311
- align-items: center;
312
- gap: var(--fd-space-xs);
313
- font-size: var(--fd-text-sm);
314
- font-weight: 500;
315
- color: var(--fd-foreground);
316
- }
317
-
318
- .session-manager__count {
319
- display: inline-flex;
320
- align-items: center;
321
- justify-content: center;
322
- min-width: 1.25rem;
323
- height: 1.25rem;
324
- padding: 0 var(--fd-space-3xs);
325
- border-radius: var(--fd-radius-full);
326
- font-size: var(--fd-text-xs);
327
- font-weight: 600;
328
- background-color: var(--fd-secondary);
329
- color: var(--fd-secondary-foreground);
330
- }
331
-
332
- :global(.session-manager__chevron) {
333
- transition: transform var(--fd-transition-normal);
334
- color: var(--fd-muted-foreground);
335
- }
336
-
337
- :global(.session-manager__chevron--expanded) {
338
- transform: rotate(180deg);
339
- }
340
-
341
- /* Content */
342
- .session-manager__content {
343
- padding: var(--fd-space-xs);
344
- }
345
-
346
- /* New Session Button */
347
- .session-manager__new-btn {
348
- display: flex;
349
- align-items: center;
350
- justify-content: center;
351
- gap: var(--fd-space-3xs);
352
- width: 100%;
353
- padding: var(--fd-space-sm) var(--fd-space-xl);
354
- margin-bottom: var(--fd-space-xs);
355
- border: 1px dashed var(--fd-border-strong);
356
- border-radius: var(--fd-radius-lg);
357
- background: transparent;
358
- font-size: var(--fd-text-sm);
359
- font-weight: 500;
360
- color: var(--fd-muted-foreground);
361
- cursor: pointer;
362
- transition: all var(--fd-transition-normal);
363
- }
364
-
365
- .session-manager__new-btn:hover:not(:disabled) {
366
- background-color: var(--fd-muted);
367
- border-color: var(--fd-primary);
368
- color: var(--fd-primary);
369
- }
370
-
371
- .session-manager__new-btn:disabled {
372
- opacity: 0.5;
373
- cursor: not-allowed;
374
- }
375
-
376
- /* Sessions List */
377
- .session-manager__list {
378
- max-height: 300px;
379
- overflow-y: auto;
380
- }
381
-
382
- .session-manager__empty {
383
- display: flex;
384
- flex-direction: column;
385
- align-items: center;
386
- gap: var(--fd-space-xs);
387
- padding: var(--fd-space-4xl) var(--fd-space-xl);
388
- color: var(--fd-muted-foreground);
389
- font-size: var(--fd-text-sm);
390
- }
391
-
392
- /* Session Item */
393
- .session-manager__item {
394
- display: flex;
395
- align-items: center;
396
- justify-content: space-between;
397
- width: 100%;
398
- padding: var(--fd-space-sm) var(--fd-space-md);
399
- margin-bottom: var(--fd-space-3xs);
400
- border: 1px solid transparent;
401
- border-radius: var(--fd-radius-lg);
402
- background: transparent;
403
- cursor: pointer;
404
- transition: all var(--fd-transition-normal);
405
- text-align: left;
406
- }
407
-
408
- .session-manager__item:hover {
409
- background-color: var(--fd-muted);
410
- }
411
-
412
- .session-manager__item--active {
413
- background-color: var(--fd-primary-muted);
414
- border-color: var(--fd-primary);
415
- }
416
-
417
- .session-manager__item-info {
418
- flex: 1;
419
- min-width: 0;
420
- }
421
-
422
- .session-manager__item-header {
423
- display: flex;
424
- align-items: center;
425
- gap: var(--fd-space-xs);
426
- margin-bottom: 0.125rem;
427
- }
428
-
429
- .session-manager__item-name {
430
- font-size: var(--fd-text-sm);
431
- font-weight: 500;
432
- color: var(--fd-foreground);
433
- white-space: nowrap;
434
- overflow: hidden;
435
- text-overflow: ellipsis;
436
- }
437
-
438
- .session-manager__status {
439
- display: flex;
440
- align-items: center;
441
- font-size: var(--fd-text-xs);
442
- }
443
-
444
- .session-manager__status--idle {
445
- color: var(--fd-muted-foreground);
446
- }
447
-
448
- .session-manager__status--running {
449
- color: var(--fd-primary);
450
- }
451
-
452
- :global(.session-manager__status--running svg) {
453
- animation: spin 1s linear infinite;
454
- }
455
-
456
- .session-manager__status--completed {
457
- color: var(--fd-success);
458
- }
459
-
460
- .session-manager__status--failed {
461
- color: var(--fd-error);
462
- }
463
-
464
- @keyframes spin {
465
- from {
466
- transform: rotate(0deg);
467
- }
468
- to {
469
- transform: rotate(360deg);
470
- }
471
- }
472
-
473
- .session-manager__item-time {
474
- font-size: var(--fd-text-xs);
475
- color: var(--fd-muted-foreground);
476
- }
477
-
478
- /* Delete Button */
479
- .session-manager__item-actions {
480
- display: flex;
481
- gap: var(--fd-space-3xs);
482
- opacity: 0;
483
- transition: opacity var(--fd-transition-normal);
484
- }
485
-
486
- .session-manager__item:hover .session-manager__item-actions {
487
- opacity: 1;
488
- }
489
-
490
- .session-manager__delete-btn {
491
- display: flex;
492
- align-items: center;
493
- justify-content: center;
494
- width: 1.5rem;
495
- height: 1.5rem;
496
- border: none;
497
- border-radius: var(--fd-radius-sm);
498
- background: transparent;
499
- color: var(--fd-muted-foreground);
500
- cursor: pointer;
501
- transition: all var(--fd-transition-normal);
502
- }
503
-
504
- .session-manager__delete-btn:hover {
505
- background-color: var(--fd-error-muted);
506
- color: var(--fd-error);
507
- }
508
-
509
- .session-manager__delete-btn--confirm {
510
- background-color: var(--fd-success-muted);
511
- color: var(--fd-success);
512
- }
513
-
514
- .session-manager__delete-btn--confirm:hover {
515
- background-color: var(--fd-success-muted);
516
- opacity: 0.8;
517
- }
518
-
519
- .session-manager__delete-btn--cancel {
520
- background-color: var(--fd-muted);
521
- color: var(--fd-muted-foreground);
522
- }
523
-
524
- .session-manager__delete-btn--cancel:hover {
525
- background-color: var(--fd-secondary);
526
- }
527
-
528
- /* Responsive */
529
- @media (max-width: 640px) {
530
- .session-manager__content {
531
- padding: var(--fd-space-3xs);
532
- }
533
-
534
- .session-manager__item {
535
- padding: var(--fd-space-xs);
536
- }
537
- }
277
+ .session-manager {
278
+ background-color: var(--fd-background);
279
+ border-bottom: 1px solid var(--fd-border);
280
+ }
281
+
282
+ .session-manager--dropdown {
283
+ position: relative;
284
+ }
285
+
286
+ .session-manager--dropdown .session-manager__content {
287
+ position: absolute;
288
+ top: 100%;
289
+ left: 0;
290
+ right: 0;
291
+ z-index: 50;
292
+ background-color: var(--fd-background);
293
+ border: 1px solid var(--fd-border);
294
+ border-radius: 0 0 var(--fd-radius-lg) var(--fd-radius-lg);
295
+ box-shadow: var(--fd-shadow-lg);
296
+ }
297
+
298
+ /* Header */
299
+ .session-manager__header {
300
+ display: flex;
301
+ align-items: center;
302
+ justify-content: space-between;
303
+ width: 100%;
304
+ padding: var(--fd-space-md) var(--fd-space-xl);
305
+ border: none;
306
+ background: transparent;
307
+ cursor: pointer;
308
+ transition: background-color var(--fd-transition-normal);
309
+ }
310
+
311
+ .session-manager__header:hover {
312
+ background-color: var(--fd-muted);
313
+ }
314
+
315
+ .session-manager__title {
316
+ display: flex;
317
+ align-items: center;
318
+ gap: var(--fd-space-xs);
319
+ font-size: var(--fd-text-sm);
320
+ font-weight: 500;
321
+ color: var(--fd-foreground);
322
+ }
323
+
324
+ .session-manager__count {
325
+ display: inline-flex;
326
+ align-items: center;
327
+ justify-content: center;
328
+ min-width: 1.25rem;
329
+ height: 1.25rem;
330
+ padding: 0 var(--fd-space-3xs);
331
+ border-radius: var(--fd-radius-full);
332
+ font-size: var(--fd-text-xs);
333
+ font-weight: 600;
334
+ background-color: var(--fd-secondary);
335
+ color: var(--fd-secondary-foreground);
336
+ }
337
+
338
+ :global(.session-manager__chevron) {
339
+ transition: transform var(--fd-transition-normal);
340
+ color: var(--fd-muted-foreground);
341
+ }
342
+
343
+ :global(.session-manager__chevron--expanded) {
344
+ transform: rotate(180deg);
345
+ }
346
+
347
+ /* Content */
348
+ .session-manager__content {
349
+ padding: var(--fd-space-xs);
350
+ }
351
+
352
+ /* New Session Button */
353
+ .session-manager__new-btn {
354
+ display: flex;
355
+ align-items: center;
356
+ justify-content: center;
357
+ gap: var(--fd-space-3xs);
358
+ width: 100%;
359
+ padding: var(--fd-space-sm) var(--fd-space-xl);
360
+ margin-bottom: var(--fd-space-xs);
361
+ border: 1px dashed var(--fd-border-strong);
362
+ border-radius: var(--fd-radius-lg);
363
+ background: transparent;
364
+ font-size: var(--fd-text-sm);
365
+ font-weight: 500;
366
+ color: var(--fd-muted-foreground);
367
+ cursor: pointer;
368
+ transition: all var(--fd-transition-normal);
369
+ }
370
+
371
+ .session-manager__new-btn:hover:not(:disabled) {
372
+ background-color: var(--fd-muted);
373
+ border-color: var(--fd-primary);
374
+ color: var(--fd-primary);
375
+ }
376
+
377
+ .session-manager__new-btn:disabled {
378
+ opacity: 0.5;
379
+ cursor: not-allowed;
380
+ }
381
+
382
+ /* Sessions List */
383
+ .session-manager__list {
384
+ max-height: 300px;
385
+ overflow-y: auto;
386
+ }
387
+
388
+ .session-manager__empty {
389
+ display: flex;
390
+ flex-direction: column;
391
+ align-items: center;
392
+ gap: var(--fd-space-xs);
393
+ padding: var(--fd-space-4xl) var(--fd-space-xl);
394
+ color: var(--fd-muted-foreground);
395
+ font-size: var(--fd-text-sm);
396
+ }
397
+
398
+ /* Session Item */
399
+ .session-manager__item {
400
+ display: flex;
401
+ align-items: center;
402
+ justify-content: space-between;
403
+ width: 100%;
404
+ padding: var(--fd-space-sm) var(--fd-space-md);
405
+ margin-bottom: var(--fd-space-3xs);
406
+ border: 1px solid transparent;
407
+ border-radius: var(--fd-radius-lg);
408
+ background: transparent;
409
+ cursor: pointer;
410
+ transition: all var(--fd-transition-normal);
411
+ text-align: left;
412
+ }
413
+
414
+ .session-manager__item:hover {
415
+ background-color: var(--fd-muted);
416
+ }
417
+
418
+ .session-manager__item--active {
419
+ background-color: var(--fd-primary-muted);
420
+ border-color: var(--fd-primary);
421
+ }
422
+
423
+ .session-manager__item-info {
424
+ flex: 1;
425
+ min-width: 0;
426
+ }
427
+
428
+ .session-manager__item-header {
429
+ display: flex;
430
+ align-items: center;
431
+ gap: var(--fd-space-xs);
432
+ margin-bottom: 0.125rem;
433
+ }
434
+
435
+ .session-manager__item-name {
436
+ font-size: var(--fd-text-sm);
437
+ font-weight: 500;
438
+ color: var(--fd-foreground);
439
+ white-space: nowrap;
440
+ overflow: hidden;
441
+ text-overflow: ellipsis;
442
+ }
443
+
444
+ .session-manager__status {
445
+ display: flex;
446
+ align-items: center;
447
+ font-size: var(--fd-text-xs);
448
+ }
449
+
450
+ .session-manager__status--idle {
451
+ color: var(--fd-muted-foreground);
452
+ }
453
+
454
+ .session-manager__status--running {
455
+ color: var(--fd-primary);
456
+ }
457
+
458
+ :global(.session-manager__status--running svg) {
459
+ animation: spin 1s linear infinite;
460
+ }
461
+
462
+ .session-manager__status--completed {
463
+ color: var(--fd-success);
464
+ }
465
+
466
+ .session-manager__status--failed {
467
+ color: var(--fd-error);
468
+ }
469
+
470
+ @keyframes spin {
471
+ from {
472
+ transform: rotate(0deg);
473
+ }
474
+ to {
475
+ transform: rotate(360deg);
476
+ }
477
+ }
478
+
479
+ .session-manager__item-time {
480
+ font-size: var(--fd-text-xs);
481
+ color: var(--fd-muted-foreground);
482
+ }
483
+
484
+ /* Delete Button */
485
+ .session-manager__item-actions {
486
+ display: flex;
487
+ gap: var(--fd-space-3xs);
488
+ opacity: 0;
489
+ transition: opacity var(--fd-transition-normal);
490
+ }
491
+
492
+ .session-manager__item:hover .session-manager__item-actions {
493
+ opacity: 1;
494
+ }
495
+
496
+ .session-manager__delete-btn {
497
+ display: flex;
498
+ align-items: center;
499
+ justify-content: center;
500
+ width: 1.5rem;
501
+ height: 1.5rem;
502
+ border: none;
503
+ border-radius: var(--fd-radius-sm);
504
+ background: transparent;
505
+ color: var(--fd-muted-foreground);
506
+ cursor: pointer;
507
+ transition: all var(--fd-transition-normal);
508
+ }
509
+
510
+ .session-manager__delete-btn:hover {
511
+ background-color: var(--fd-error-muted);
512
+ color: var(--fd-error);
513
+ }
514
+
515
+ .session-manager__delete-btn--confirm {
516
+ background-color: var(--fd-success-muted);
517
+ color: var(--fd-success);
518
+ }
519
+
520
+ .session-manager__delete-btn--confirm:hover {
521
+ background-color: var(--fd-success-muted);
522
+ opacity: 0.8;
523
+ }
524
+
525
+ .session-manager__delete-btn--cancel {
526
+ background-color: var(--fd-muted);
527
+ color: var(--fd-muted-foreground);
528
+ }
529
+
530
+ .session-manager__delete-btn--cancel:hover {
531
+ background-color: var(--fd-secondary);
532
+ }
533
+
534
+ /* Responsive */
535
+ @media (max-width: 640px) {
536
+ .session-manager__content {
537
+ padding: var(--fd-space-3xs);
538
+ }
539
+
540
+ .session-manager__item {
541
+ padding: var(--fd-space-xs);
542
+ }
543
+ }
538
544
  </style>