@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
@@ -8,394 +8,418 @@
8
8
  -->
9
9
 
10
10
  <script lang="ts">
11
- import Icon from '@iconify/svelte';
12
- import type { ChoiceConfig, InterruptChoice } from '../../types/interrupt.js';
13
-
14
- /**
15
- * Component props
16
- */
17
- interface Props {
18
- /** Choice configuration from the interrupt */
19
- config: ChoiceConfig;
20
- /** Whether this interrupt has been resolved */
21
- isResolved: boolean;
22
- /** The resolved value(s) if resolved */
23
- resolvedValue?: string | string[];
24
- /** Whether the form is currently submitting */
25
- isSubmitting: boolean;
26
- /** Error message if submission failed */
27
- error?: string;
28
- /** Username of the person who resolved the interrupt */
29
- resolvedByUserName?: string;
30
- /** Callback when user submits selection */
31
- onSubmit: (value: string | string[]) => void;
32
- }
33
-
34
- let {
35
- config,
36
- isResolved,
37
- resolvedValue,
38
- isSubmitting,
39
- error,
40
- resolvedByUserName,
41
- onSubmit
42
- }: Props = $props();
43
-
44
- /** Local state for selected values */
45
- let selectedValues = $state<Set<string>>(new Set());
46
-
47
- /** Whether multiple selection is enabled */
48
- const isMultiple = $derived(config.multiple ?? false);
49
-
50
- /** Minimum selections required */
51
- const minSelections = $derived(config.minSelections ?? (isMultiple ? 0 : 1));
52
-
53
- /** Maximum selections allowed */
54
- const maxSelections = $derived(config.maxSelections ?? (isMultiple ? config.options.length : 1));
55
-
56
- /** Check if submit is valid */
57
- const isValidSelection = $derived(
58
- selectedValues.size >= minSelections && selectedValues.size <= maxSelections
59
- );
60
-
61
- /** Check if an option was selected in resolved state */
62
- function isOptionResolved(option: InterruptChoice): boolean {
63
- if (!isResolved || resolvedValue === undefined) return false;
64
- if (Array.isArray(resolvedValue)) {
65
- return resolvedValue.includes(option.value);
66
- }
67
- return resolvedValue === option.value;
68
- }
69
-
70
- /**
71
- * Handle option selection/deselection
72
- */
73
- function handleOptionChange(option: InterruptChoice, checked: boolean): void {
74
- if (isResolved || isSubmitting) return;
75
-
76
- const newSelected = new Set(selectedValues);
77
-
78
- if (isMultiple) {
79
- if (checked) {
80
- // Check max selections
81
- if (newSelected.size < maxSelections) {
82
- newSelected.add(option.value);
83
- }
84
- } else {
85
- newSelected.delete(option.value);
86
- }
87
- } else {
88
- // Single selection - clear and set
89
- newSelected.clear();
90
- if (checked) {
91
- newSelected.add(option.value);
92
- }
93
- }
94
-
95
- selectedValues = newSelected;
96
- }
97
-
98
- /**
99
- * Handle form submission
100
- */
101
- function handleSubmit(): void {
102
- if (!isValidSelection || isResolved || isSubmitting) return;
103
-
104
- const values = Array.from(selectedValues);
105
- if (isMultiple) {
106
- onSubmit(values);
107
- } else {
108
- onSubmit(values[0] ?? '');
109
- }
110
- }
11
+ import Icon from "@iconify/svelte";
12
+ import type { ChoiceConfig, InterruptChoice } from "../../types/interrupt.js";
13
+
14
+ /**
15
+ * Component props
16
+ */
17
+ interface Props {
18
+ /** Choice configuration from the interrupt */
19
+ config: ChoiceConfig;
20
+ /** Whether this interrupt has been resolved */
21
+ isResolved: boolean;
22
+ /** The resolved value(s) if resolved */
23
+ resolvedValue?: string | string[];
24
+ /** Whether the form is currently submitting */
25
+ isSubmitting: boolean;
26
+ /** Error message if submission failed */
27
+ error?: string;
28
+ /** Username of the person who resolved the interrupt */
29
+ resolvedByUserName?: string;
30
+ /** Callback when user submits selection */
31
+ onSubmit: (value: string | string[]) => void;
32
+ }
33
+
34
+ let {
35
+ config,
36
+ isResolved,
37
+ resolvedValue,
38
+ isSubmitting,
39
+ error,
40
+ resolvedByUserName,
41
+ onSubmit,
42
+ }: Props = $props();
43
+
44
+ /** Local state for selected values */
45
+ let selectedValues = $state<Set<string>>(new Set());
46
+
47
+ /** Whether multiple selection is enabled */
48
+ const isMultiple = $derived(config.multiple ?? false);
49
+
50
+ /** Minimum selections required */
51
+ const minSelections = $derived(config.minSelections ?? (isMultiple ? 0 : 1));
52
+
53
+ /** Maximum selections allowed */
54
+ const maxSelections = $derived(
55
+ config.maxSelections ?? (isMultiple ? config.options.length : 1),
56
+ );
57
+
58
+ /** Check if submit is valid */
59
+ const isValidSelection = $derived(
60
+ selectedValues.size >= minSelections &&
61
+ selectedValues.size <= maxSelections,
62
+ );
63
+
64
+ /** Check if an option was selected in resolved state */
65
+ function isOptionResolved(option: InterruptChoice): boolean {
66
+ if (!isResolved || resolvedValue === undefined) return false;
67
+ if (Array.isArray(resolvedValue)) {
68
+ return resolvedValue.includes(option.value);
69
+ }
70
+ return resolvedValue === option.value;
71
+ }
72
+
73
+ /**
74
+ * Handle option selection/deselection
75
+ */
76
+ function handleOptionChange(option: InterruptChoice, checked: boolean): void {
77
+ if (isResolved || isSubmitting) return;
78
+
79
+ const newSelected = new Set(selectedValues);
80
+
81
+ if (isMultiple) {
82
+ if (checked) {
83
+ // Check max selections
84
+ if (newSelected.size < maxSelections) {
85
+ newSelected.add(option.value);
86
+ }
87
+ } else {
88
+ newSelected.delete(option.value);
89
+ }
90
+ } else {
91
+ // Single selection - clear and set
92
+ newSelected.clear();
93
+ if (checked) {
94
+ newSelected.add(option.value);
95
+ }
96
+ }
97
+
98
+ selectedValues = newSelected;
99
+ }
100
+
101
+ /**
102
+ * Handle form submission
103
+ */
104
+ function handleSubmit(): void {
105
+ if (!isValidSelection || isResolved || isSubmitting) return;
106
+
107
+ const values = Array.from(selectedValues);
108
+ if (isMultiple) {
109
+ onSubmit(values);
110
+ } else {
111
+ onSubmit(values[0] ?? "");
112
+ }
113
+ }
111
114
  </script>
112
115
 
113
116
  <div
114
- class="choice-prompt"
115
- class:choice-prompt--resolved={isResolved}
116
- class:choice-prompt--submitting={isSubmitting}
117
+ class="choice-prompt"
118
+ class:choice-prompt--resolved={isResolved}
119
+ class:choice-prompt--submitting={isSubmitting}
117
120
  >
118
- <!-- Message -->
119
- <p class="choice-prompt__message">{config.message}</p>
120
-
121
- <!-- Error message -->
122
- {#if error}
123
- <div class="choice-prompt__error">
124
- <Icon icon="mdi:alert-circle" />
125
- <span>{error}</span>
126
- </div>
127
- {/if}
128
-
129
- <!-- Options -->
130
- <div class="choice-prompt__options" role={isMultiple ? 'group' : 'radiogroup'}>
131
- {#each config.options as option (option.value)}
132
- {@const isChecked = isResolved ? isOptionResolved(option) : selectedValues.has(option.value)}
133
- <label
134
- class="choice-prompt__option"
135
- class:choice-prompt__option--selected={isChecked}
136
- class:choice-prompt__option--resolved={isResolved && isChecked}
137
- >
138
- <input
139
- type={isMultiple ? 'checkbox' : 'radio'}
140
- name="choice-option"
141
- value={option.value}
142
- checked={isChecked}
143
- disabled={isResolved || isSubmitting}
144
- onchange={(e) => handleOptionChange(option, (e.target as HTMLInputElement).checked)}
145
- class="choice-prompt__input"
146
- />
147
- <span class="choice-prompt__checkmark">
148
- {#if isChecked}
149
- <Icon icon={isMultiple ? 'mdi:checkbox-marked' : 'mdi:radiobox-marked'} />
150
- {:else}
151
- <Icon icon={isMultiple ? 'mdi:checkbox-blank-outline' : 'mdi:radiobox-blank'} />
152
- {/if}
153
- </span>
154
- <span class="choice-prompt__option-content">
155
- <span class="choice-prompt__option-label">{option.label}</span>
156
- {#if option.description}
157
- <span class="choice-prompt__option-description">{option.description}</span>
158
- {/if}
159
- </span>
160
- </label>
161
- {/each}
162
- </div>
163
-
164
- <!-- Selection info for multiple -->
165
- {#if isMultiple && !isResolved}
166
- <div class="choice-prompt__info">
167
- <span>
168
- {selectedValues.size} of {config.options.length} selected
169
- {#if minSelections > 0}
170
- (min: {minSelections})
171
- {/if}
172
- {#if maxSelections < config.options.length}
173
- (max: {maxSelections})
174
- {/if}
175
- </span>
176
- </div>
177
- {/if}
178
-
179
- <!-- Submit button (only for explicit submission) -->
180
- {#if !isResolved}
181
- <div class="choice-prompt__actions">
182
- <button
183
- type="button"
184
- class="choice-prompt__submit"
185
- onclick={handleSubmit}
186
- disabled={!isValidSelection || isSubmitting}
187
- >
188
- {#if isSubmitting}
189
- <span class="choice-prompt__spinner"></span>
190
- {:else}
191
- <Icon icon="mdi:check" />
192
- {/if}
193
- <span>Submit</span>
194
- </button>
195
- </div>
196
- {/if}
197
-
198
- <!-- Resolved indicator -->
199
- {#if isResolved}
200
- <div class="choice-prompt__resolved-badge">
201
- <Icon icon="mdi:check-circle" />
202
- <span>
203
- {resolvedByUserName ? `Response submitted by ${resolvedByUserName}` : 'Response submitted'}
204
- </span>
205
- </div>
206
- {/if}
121
+ <!-- Message -->
122
+ <p class="choice-prompt__message">{config.message}</p>
123
+
124
+ <!-- Error message -->
125
+ {#if error}
126
+ <div class="choice-prompt__error">
127
+ <Icon icon="mdi:alert-circle" />
128
+ <span>{error}</span>
129
+ </div>
130
+ {/if}
131
+
132
+ <!-- Options -->
133
+ <div
134
+ class="choice-prompt__options"
135
+ role={isMultiple ? "group" : "radiogroup"}
136
+ >
137
+ {#each config.options as option (option.value)}
138
+ {@const isChecked = isResolved
139
+ ? isOptionResolved(option)
140
+ : selectedValues.has(option.value)}
141
+ <label
142
+ class="choice-prompt__option"
143
+ class:choice-prompt__option--selected={isChecked}
144
+ class:choice-prompt__option--resolved={isResolved && isChecked}
145
+ >
146
+ <input
147
+ type={isMultiple ? "checkbox" : "radio"}
148
+ name="choice-option"
149
+ value={option.value}
150
+ checked={isChecked}
151
+ disabled={isResolved || isSubmitting}
152
+ onchange={(e) =>
153
+ handleOptionChange(option, (e.target as HTMLInputElement).checked)}
154
+ class="choice-prompt__input"
155
+ />
156
+ <span class="choice-prompt__checkmark">
157
+ {#if isChecked}
158
+ <Icon
159
+ icon={isMultiple ? "mdi:checkbox-marked" : "mdi:radiobox-marked"}
160
+ />
161
+ {:else}
162
+ <Icon
163
+ icon={isMultiple
164
+ ? "mdi:checkbox-blank-outline"
165
+ : "mdi:radiobox-blank"}
166
+ />
167
+ {/if}
168
+ </span>
169
+ <span class="choice-prompt__option-content">
170
+ <span class="choice-prompt__option-label">{option.label}</span>
171
+ {#if option.description}
172
+ <span class="choice-prompt__option-description"
173
+ >{option.description}</span
174
+ >
175
+ {/if}
176
+ </span>
177
+ </label>
178
+ {/each}
179
+ </div>
180
+
181
+ <!-- Selection info for multiple -->
182
+ {#if isMultiple && !isResolved}
183
+ <div class="choice-prompt__info">
184
+ <span>
185
+ {selectedValues.size} of {config.options.length} selected
186
+ {#if minSelections > 0}
187
+ (min: {minSelections})
188
+ {/if}
189
+ {#if maxSelections < config.options.length}
190
+ (max: {maxSelections})
191
+ {/if}
192
+ </span>
193
+ </div>
194
+ {/if}
195
+
196
+ <!-- Submit button (only for explicit submission) -->
197
+ {#if !isResolved}
198
+ <div class="choice-prompt__actions">
199
+ <button
200
+ type="button"
201
+ class="choice-prompt__submit"
202
+ onclick={handleSubmit}
203
+ disabled={!isValidSelection || isSubmitting}
204
+ >
205
+ {#if isSubmitting}
206
+ <span class="choice-prompt__spinner"></span>
207
+ {:else}
208
+ <Icon icon="mdi:check" />
209
+ {/if}
210
+ <span>Submit</span>
211
+ </button>
212
+ </div>
213
+ {/if}
214
+
215
+ <!-- Resolved indicator -->
216
+ {#if isResolved}
217
+ <div class="choice-prompt__resolved-badge">
218
+ <Icon icon="mdi:check-circle" />
219
+ <span>
220
+ {resolvedByUserName
221
+ ? `Response submitted by ${resolvedByUserName}`
222
+ : "Response submitted"}
223
+ </span>
224
+ </div>
225
+ {/if}
207
226
  </div>
208
227
 
209
228
  <style>
210
- /* Uses design tokens from base.css/tokens.css */
211
- .choice-prompt {
212
- display: flex;
213
- flex-direction: column;
214
- gap: var(--fd-space-md);
215
- }
216
-
217
- .choice-prompt--resolved {
218
- opacity: 0.85;
219
- }
220
-
221
- .choice-prompt--submitting {
222
- pointer-events: none;
223
- }
224
-
225
- .choice-prompt__message {
226
- margin: 0;
227
- font-size: var(--fd-interrupt-font-message);
228
- line-height: var(--fd-interrupt-line-height);
229
- color: var(--fd-foreground);
230
- }
231
-
232
- .choice-prompt__error {
233
- display: flex;
234
- align-items: center;
235
- gap: var(--fd-space-2xs);
236
- padding: var(--fd-space-xs) var(--fd-space-md);
237
- background-color: var(--fd-error-muted);
238
- border-radius: var(--fd-radius-md);
239
- color: var(--fd-error);
240
- font-size: var(--fd-interrupt-font-error);
241
- }
242
-
243
- .choice-prompt__options {
244
- display: flex;
245
- flex-direction: column;
246
- gap: var(--fd-space-xs);
247
- }
248
-
249
- .choice-prompt__option {
250
- display: flex;
251
- align-items: flex-start;
252
- gap: var(--fd-space-md);
253
- padding: var(--fd-space-md) var(--fd-space-xl);
254
- background-color: var(--fd-muted);
255
- border: 1px solid var(--fd-border);
256
- border-radius: var(--fd-radius-lg);
257
- cursor: pointer;
258
- transition: all var(--fd-transition-fast);
259
- }
260
-
261
- .choice-prompt__option:hover:not(.choice-prompt--resolved .choice-prompt__option) {
262
- background-color: var(--fd-subtle);
263
- border-color: var(--fd-border-strong);
264
- }
265
-
266
- .choice-prompt__option--selected {
267
- background-color: var(--fd-primary-muted);
268
- border-color: var(--fd-interrupt-completed-border);
269
- }
270
-
271
- .choice-prompt__option--selected:hover:not(.choice-prompt--resolved .choice-prompt__option) {
272
- background-color: var(--fd-primary-muted);
273
- }
274
-
275
- /* Resolved option - neutral blue theme */
276
- .choice-prompt__option--resolved {
277
- background-color: var(--fd-primary-muted);
278
- border-color: var(--fd-interrupt-completed-border);
279
- cursor: default;
280
- }
281
-
282
- .choice-prompt--resolved .choice-prompt__option:not(.choice-prompt__option--resolved) {
283
- opacity: var(--fd-interrupt-not-selected-opacity);
284
- cursor: default;
285
- }
286
-
287
- .choice-prompt__input {
288
- position: absolute;
289
- opacity: 0;
290
- width: 0;
291
- height: 0;
292
- }
293
-
294
- .choice-prompt__checkmark {
295
- flex-shrink: 0;
296
- font-size: 1.25rem;
297
- color: var(--fd-muted-foreground);
298
- display: flex;
299
- align-items: center;
300
- justify-content: center;
301
- }
302
-
303
- .choice-prompt__option--selected .choice-prompt__checkmark {
304
- color: var(--fd-interrupt-completed-border);
305
- }
306
-
307
- .choice-prompt__option--resolved .choice-prompt__checkmark {
308
- color: var(--fd-interrupt-completed-border);
309
- }
310
-
311
- .choice-prompt__option-content {
312
- display: flex;
313
- flex-direction: column;
314
- gap: 0.125rem;
315
- }
316
-
317
- .choice-prompt__option-label {
318
- font-size: var(--fd-text-sm);
319
- font-weight: 500;
320
- color: var(--fd-foreground);
321
- }
322
-
323
- .choice-prompt__option-description {
324
- font-size: var(--fd-interrupt-font-error);
325
- color: var(--fd-muted-foreground);
326
- line-height: var(--fd-leading-tight);
327
- }
328
-
329
- .choice-prompt__info {
330
- font-size: var(--fd-text-xs);
331
- color: var(--fd-muted-foreground);
332
- padding-left: var(--fd-space-3xs);
333
- }
334
-
335
- .choice-prompt__actions {
336
- display: flex;
337
- gap: var(--fd-space-md);
338
- margin-top: var(--fd-space-3xs);
339
- }
340
-
341
- .choice-prompt__submit {
342
- display: inline-flex;
343
- align-items: center;
344
- justify-content: center;
345
- gap: var(--fd-space-xs);
346
- padding: var(--fd-space-sm) var(--fd-space-2xl);
347
- border-radius: var(--fd-radius-lg);
348
- font-size: var(--fd-text-sm);
349
- font-weight: 600;
350
- font-family: inherit;
351
- cursor: pointer;
352
- transition: all var(--fd-transition-normal);
353
- border: none;
354
- min-height: var(--fd-interrupt-btn-min-height);
355
- background: var(--fd-interrupt-btn-primary-bg);
356
- color: var(--fd-primary-foreground);
357
- box-shadow: 0 1px 3px var(--fd-interrupt-btn-primary-shadow);
358
- }
359
-
360
- .choice-prompt__submit:hover:not(:disabled) {
361
- background: var(--fd-interrupt-btn-primary-bg-hover);
362
- box-shadow: 0 4px 12px var(--fd-interrupt-btn-primary-shadow);
363
- transform: translateY(-1px);
364
- }
365
-
366
- .choice-prompt__submit:disabled {
367
- opacity: 0.5;
368
- cursor: not-allowed;
369
- transform: none;
370
- box-shadow: none;
371
- }
372
-
373
- .choice-prompt__spinner {
374
- width: var(--fd-interrupt-spinner-size);
375
- height: var(--fd-interrupt-spinner-size);
376
- border: 2px solid var(--fd-border);
377
- border-top-color: currentColor;
378
- border-radius: 50%;
379
- animation: choice-spin 0.6s linear infinite;
380
- }
381
-
382
- @keyframes choice-spin {
383
- to {
384
- transform: rotate(360deg);
385
- }
386
- }
387
-
388
- /* Resolved badge - neutral blue theme */
389
- .choice-prompt__resolved-badge {
390
- display: inline-flex;
391
- align-items: center;
392
- gap: var(--fd-space-2xs);
393
- padding: var(--fd-space-2xs) var(--fd-space-md);
394
- background-color: var(--fd-interrupt-badge-completed-bg);
395
- border-radius: var(--fd-radius-full);
396
- color: var(--fd-interrupt-badge-completed-text);
397
- font-size: var(--fd-text-xs);
398
- font-weight: 500;
399
- align-self: flex-start;
400
- }
229
+ /* Uses design tokens from base.css/tokens.css */
230
+ .choice-prompt {
231
+ display: flex;
232
+ flex-direction: column;
233
+ gap: var(--fd-space-md);
234
+ }
235
+
236
+ .choice-prompt--resolved {
237
+ opacity: 0.85;
238
+ }
239
+
240
+ .choice-prompt--submitting {
241
+ pointer-events: none;
242
+ }
243
+
244
+ .choice-prompt__message {
245
+ margin: 0;
246
+ font-size: var(--fd-interrupt-font-message);
247
+ line-height: var(--fd-interrupt-line-height);
248
+ color: var(--fd-foreground);
249
+ }
250
+
251
+ .choice-prompt__error {
252
+ display: flex;
253
+ align-items: center;
254
+ gap: var(--fd-space-2xs);
255
+ padding: var(--fd-space-xs) var(--fd-space-md);
256
+ background-color: var(--fd-error-muted);
257
+ border-radius: var(--fd-radius-md);
258
+ color: var(--fd-error);
259
+ font-size: var(--fd-interrupt-font-error);
260
+ }
261
+
262
+ .choice-prompt__options {
263
+ display: flex;
264
+ flex-direction: column;
265
+ gap: var(--fd-space-xs);
266
+ }
267
+
268
+ .choice-prompt__option {
269
+ display: flex;
270
+ align-items: flex-start;
271
+ gap: var(--fd-space-md);
272
+ padding: var(--fd-space-md) var(--fd-space-xl);
273
+ background-color: var(--fd-muted);
274
+ border: 1px solid var(--fd-border);
275
+ border-radius: var(--fd-radius-lg);
276
+ cursor: pointer;
277
+ transition: all var(--fd-transition-fast);
278
+ }
279
+
280
+ .choice-prompt__option:hover:not(
281
+ .choice-prompt--resolved .choice-prompt__option
282
+ ) {
283
+ background-color: var(--fd-subtle);
284
+ border-color: var(--fd-border-strong);
285
+ }
286
+
287
+ .choice-prompt__option--selected {
288
+ background-color: var(--fd-primary-muted);
289
+ border-color: var(--fd-interrupt-completed-border);
290
+ }
291
+
292
+ .choice-prompt__option--selected:hover:not(
293
+ .choice-prompt--resolved .choice-prompt__option
294
+ ) {
295
+ background-color: var(--fd-primary-muted);
296
+ }
297
+
298
+ /* Resolved option - neutral blue theme */
299
+ .choice-prompt__option--resolved {
300
+ background-color: var(--fd-primary-muted);
301
+ border-color: var(--fd-interrupt-completed-border);
302
+ cursor: default;
303
+ }
304
+
305
+ .choice-prompt--resolved
306
+ .choice-prompt__option:not(.choice-prompt__option--resolved) {
307
+ opacity: var(--fd-interrupt-not-selected-opacity);
308
+ cursor: default;
309
+ }
310
+
311
+ .choice-prompt__input {
312
+ position: absolute;
313
+ opacity: 0;
314
+ width: 0;
315
+ height: 0;
316
+ }
317
+
318
+ .choice-prompt__checkmark {
319
+ flex-shrink: 0;
320
+ font-size: 1.25rem;
321
+ color: var(--fd-muted-foreground);
322
+ display: flex;
323
+ align-items: center;
324
+ justify-content: center;
325
+ }
326
+
327
+ .choice-prompt__option--selected .choice-prompt__checkmark {
328
+ color: var(--fd-interrupt-completed-border);
329
+ }
330
+
331
+ .choice-prompt__option--resolved .choice-prompt__checkmark {
332
+ color: var(--fd-interrupt-completed-border);
333
+ }
334
+
335
+ .choice-prompt__option-content {
336
+ display: flex;
337
+ flex-direction: column;
338
+ gap: 0.125rem;
339
+ }
340
+
341
+ .choice-prompt__option-label {
342
+ font-size: var(--fd-text-sm);
343
+ font-weight: 500;
344
+ color: var(--fd-foreground);
345
+ }
346
+
347
+ .choice-prompt__option-description {
348
+ font-size: var(--fd-interrupt-font-error);
349
+ color: var(--fd-muted-foreground);
350
+ line-height: var(--fd-leading-tight);
351
+ }
352
+
353
+ .choice-prompt__info {
354
+ font-size: var(--fd-text-xs);
355
+ color: var(--fd-muted-foreground);
356
+ padding-left: var(--fd-space-3xs);
357
+ }
358
+
359
+ .choice-prompt__actions {
360
+ display: flex;
361
+ gap: var(--fd-space-md);
362
+ margin-top: var(--fd-space-3xs);
363
+ }
364
+
365
+ .choice-prompt__submit {
366
+ display: inline-flex;
367
+ align-items: center;
368
+ justify-content: center;
369
+ gap: var(--fd-space-xs);
370
+ padding: var(--fd-space-sm) var(--fd-space-2xl);
371
+ border-radius: var(--fd-radius-lg);
372
+ font-size: var(--fd-text-sm);
373
+ font-weight: 600;
374
+ font-family: inherit;
375
+ cursor: pointer;
376
+ transition: all var(--fd-transition-normal);
377
+ border: none;
378
+ min-height: var(--fd-interrupt-btn-min-height);
379
+ background: var(--fd-interrupt-btn-primary-bg);
380
+ color: var(--fd-primary-foreground);
381
+ box-shadow: 0 1px 3px var(--fd-interrupt-btn-primary-shadow);
382
+ }
383
+
384
+ .choice-prompt__submit:hover:not(:disabled) {
385
+ background: var(--fd-interrupt-btn-primary-bg-hover);
386
+ box-shadow: 0 4px 12px var(--fd-interrupt-btn-primary-shadow);
387
+ transform: translateY(-1px);
388
+ }
389
+
390
+ .choice-prompt__submit:disabled {
391
+ opacity: 0.5;
392
+ cursor: not-allowed;
393
+ transform: none;
394
+ box-shadow: none;
395
+ }
396
+
397
+ .choice-prompt__spinner {
398
+ width: var(--fd-interrupt-spinner-size);
399
+ height: var(--fd-interrupt-spinner-size);
400
+ border: 2px solid var(--fd-border);
401
+ border-top-color: currentColor;
402
+ border-radius: 50%;
403
+ animation: choice-spin 0.6s linear infinite;
404
+ }
405
+
406
+ @keyframes choice-spin {
407
+ to {
408
+ transform: rotate(360deg);
409
+ }
410
+ }
411
+
412
+ /* Resolved badge - neutral blue theme */
413
+ .choice-prompt__resolved-badge {
414
+ display: inline-flex;
415
+ align-items: center;
416
+ gap: var(--fd-space-2xs);
417
+ padding: var(--fd-space-2xs) var(--fd-space-md);
418
+ background-color: var(--fd-interrupt-badge-completed-bg);
419
+ border-radius: var(--fd-radius-full);
420
+ color: var(--fd-interrupt-badge-completed-text);
421
+ font-size: var(--fd-text-xs);
422
+ font-weight: 500;
423
+ align-self: flex-start;
424
+ }
401
425
  </style>