@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
@@ -28,390 +28,401 @@
28
28
  -->
29
29
 
30
30
  <script lang="ts">
31
- import FormFieldWrapper from './FormFieldWrapper.svelte';
32
- import FormTextField from './FormTextField.svelte';
33
- import FormTextarea from './FormTextarea.svelte';
34
- import FormNumberField from './FormNumberField.svelte';
35
- import FormRangeField from './FormRangeField.svelte';
36
- import FormToggle from './FormToggle.svelte';
37
- import FormSelect from './FormSelect.svelte';
38
- import FormCheckboxGroup from './FormCheckboxGroup.svelte';
39
- import FormArray from './FormArray.svelte';
40
- import FormCodeEditor from './FormCodeEditor.svelte';
41
- import FormMarkdownEditor from './FormMarkdownEditor.svelte';
42
- import FormTemplateEditor from './FormTemplateEditor.svelte';
43
- import FormAutocomplete from './FormAutocomplete.svelte';
44
- import type { FieldSchema } from './types.js';
45
- import { getSchemaOptions } from './types.js';
46
- import type { WorkflowNode, WorkflowEdge, AuthProvider } from '../../types/index.js';
47
- import { getResolvedTheme } from '../../stores/settingsStore.svelte.js';
31
+ import FormFieldWrapper from "./FormFieldWrapper.svelte";
32
+ import FormTextField from "./FormTextField.svelte";
33
+ import FormTextarea from "./FormTextarea.svelte";
34
+ import FormNumberField from "./FormNumberField.svelte";
35
+ import FormRangeField from "./FormRangeField.svelte";
36
+ import FormToggle from "./FormToggle.svelte";
37
+ import FormSelect from "./FormSelect.svelte";
38
+ import FormCheckboxGroup from "./FormCheckboxGroup.svelte";
39
+ import FormArray from "./FormArray.svelte";
40
+ import FormCodeEditor from "./FormCodeEditor.svelte";
41
+ import FormMarkdownEditor from "./FormMarkdownEditor.svelte";
42
+ import FormTemplateEditor from "./FormTemplateEditor.svelte";
43
+ import FormAutocomplete from "./FormAutocomplete.svelte";
44
+ import type { FieldSchema } from "./types.js";
45
+ import { getSchemaOptions } from "./types.js";
46
+ import type {
47
+ WorkflowNode,
48
+ WorkflowEdge,
49
+ AuthProvider,
50
+ } from "../../types/index.js";
51
+ import { getResolvedTheme } from "../../stores/settingsStore.svelte.js";
48
52
 
49
- interface Props {
50
- /** Unique key/id for the field */
51
- fieldKey: string;
52
- /** Field schema definition */
53
- schema: FieldSchema;
54
- /** Current field value */
55
- value: unknown;
56
- /** Whether the field is required */
57
- required?: boolean;
58
- /** Animation delay index for staggered animations */
59
- animationIndex?: number;
60
- /** Callback when the field value changes */
61
- onChange: (value: unknown) => void;
62
- /** Current workflow node (optional, used for template variable API mode) */
63
- node?: WorkflowNode;
64
- /** All workflow nodes (optional, used for port-derived variables) */
65
- nodes?: WorkflowNode[];
66
- /** All workflow edges (optional, used for port-derived variables) */
67
- edges?: WorkflowEdge[];
68
- /** Workflow ID (optional, used for template variable API mode) */
69
- workflowId?: string;
70
- /** Auth provider (optional, used for API requests) */
71
- authProvider?: AuthProvider;
72
- }
53
+ interface Props {
54
+ /** Unique key/id for the field */
55
+ fieldKey: string;
56
+ /** Field schema definition */
57
+ schema: FieldSchema;
58
+ /** Current field value */
59
+ value: unknown;
60
+ /** Whether the field is required */
61
+ required?: boolean;
62
+ /** Animation delay index for staggered animations */
63
+ animationIndex?: number;
64
+ /** Callback when the field value changes */
65
+ onChange: (value: unknown) => void;
66
+ /** Current workflow node (optional, used for template variable API mode) */
67
+ node?: WorkflowNode;
68
+ /** All workflow nodes (optional, used for port-derived variables) */
69
+ nodes?: WorkflowNode[];
70
+ /** All workflow edges (optional, used for port-derived variables) */
71
+ edges?: WorkflowEdge[];
72
+ /** Workflow ID (optional, used for template variable API mode) */
73
+ workflowId?: string;
74
+ /** Auth provider (optional, used for API requests) */
75
+ authProvider?: AuthProvider;
76
+ }
73
77
 
74
- let {
75
- fieldKey,
76
- schema,
77
- value,
78
- required = false,
79
- animationIndex = 0,
80
- onChange,
81
- node,
82
- nodes,
83
- edges,
84
- workflowId,
85
- authProvider
86
- }: Props = $props();
78
+ let {
79
+ fieldKey,
80
+ schema,
81
+ value,
82
+ required = false,
83
+ animationIndex = 0,
84
+ onChange,
85
+ node,
86
+ nodes,
87
+ edges,
88
+ workflowId,
89
+ authProvider,
90
+ }: Props = $props();
87
91
 
88
- /**
89
- * When schema.readOnly is true, disable all inputs (no editing).
90
- */
91
- const isReadOnly = $derived(schema.readOnly === true);
92
+ /**
93
+ * When schema.readOnly is true, disable all inputs (no editing).
94
+ */
95
+ const isReadOnly = $derived(schema.readOnly === true);
92
96
 
93
- /**
94
- * Computed description ID for ARIA association
95
- */
96
- const descriptionId = $derived(
97
- schema.description && schema.title ? `${fieldKey}-description` : undefined
98
- );
97
+ /**
98
+ * Computed description ID for ARIA association
99
+ */
100
+ const descriptionId = $derived(
101
+ schema.description && schema.title ? `${fieldKey}-description` : undefined,
102
+ );
99
103
 
100
- /**
101
- * Animation delay based on index
102
- */
103
- const animationDelay = $derived(animationIndex * 30);
104
+ /**
105
+ * Animation delay based on index
106
+ */
107
+ const animationDelay = $derived(animationIndex * 30);
104
108
 
105
- /**
106
- * Field label - prefer title, fall back to description, then key
107
- */
108
- const fieldLabel = $derived(String(schema.title ?? schema.description ?? fieldKey));
109
+ /**
110
+ * Field label - prefer title, fall back to description, then key
111
+ */
112
+ const fieldLabel = $derived(
113
+ String(schema.title ?? schema.description ?? fieldKey),
114
+ );
109
115
 
110
- /**
111
- * Determine the field type to render
112
- */
113
- const fieldType = $derived.by(() => {
114
- // Hidden fields should not be rendered
115
- if (schema.format === 'hidden') {
116
- return 'hidden';
117
- }
116
+ /**
117
+ * Determine the field type to render
118
+ */
119
+ const fieldType = $derived.by(() => {
120
+ // Hidden fields should not be rendered
121
+ if (schema.format === "hidden") {
122
+ return "hidden";
123
+ }
118
124
 
119
- // Autocomplete field for format: "autocomplete" with autocomplete.url
120
- if (schema.format === 'autocomplete' && schema.autocomplete?.url) {
121
- return 'autocomplete';
122
- }
125
+ // Autocomplete field for format: "autocomplete" with autocomplete.url
126
+ if (schema.format === "autocomplete" && schema.autocomplete?.url) {
127
+ return "autocomplete";
128
+ }
123
129
 
124
- // JSON/code editor for format: "json" or "code"
125
- if (schema.format === 'json' || schema.format === 'code') {
126
- return 'code-editor';
127
- }
130
+ // JSON/code editor for format: "json" or "code"
131
+ if (schema.format === "json" || schema.format === "code") {
132
+ return "code-editor";
133
+ }
128
134
 
129
- // Markdown editor for format: "markdown"
130
- if (schema.format === 'markdown') {
131
- return 'markdown-editor';
132
- }
135
+ // Markdown editor for format: "markdown"
136
+ if (schema.format === "markdown") {
137
+ return "markdown-editor";
138
+ }
133
139
 
134
- // Template editor for format: "template" (Twig/Liquid syntax)
135
- if (schema.format === 'template') {
136
- return 'template-editor';
137
- }
140
+ // Template editor for format: "template" (Twig/Liquid syntax)
141
+ if (schema.format === "template") {
142
+ return "template-editor";
143
+ }
138
144
 
139
- // Enum with multiple selection -> checkbox group
140
- if (schema.enum && schema.multiple) {
141
- return 'checkbox-group';
142
- }
145
+ // Enum with multiple selection -> checkbox group
146
+ if (schema.enum && schema.multiple) {
147
+ return "checkbox-group";
148
+ }
143
149
 
144
- // Enum with single selection -> select
145
- if (schema.enum) {
146
- return 'select-enum';
147
- }
150
+ // Enum with single selection -> select
151
+ if (schema.enum) {
152
+ return "select-enum";
153
+ }
148
154
 
149
- // oneOf with labeled options (standard JSON Schema) -> select
150
- // Must be checked before basic type checks since oneOf schemas often have type: 'string'
151
- if (schema.oneOf && schema.oneOf.length > 0) {
152
- return 'select-options';
153
- }
155
+ // oneOf with labeled options (standard JSON Schema) -> select
156
+ // Must be checked before basic type checks since oneOf schemas often have type: 'string'
157
+ if (schema.oneOf && schema.oneOf.length > 0) {
158
+ return "select-options";
159
+ }
154
160
 
155
- // Multiline string -> textarea
156
- if (schema.type === 'string' && schema.format === 'multiline') {
157
- return 'textarea';
158
- }
161
+ // Multiline string -> textarea
162
+ if (schema.type === "string" && schema.format === "multiline") {
163
+ return "textarea";
164
+ }
159
165
 
160
- // Range slider for number/integer with format: "range"
161
- if ((schema.type === 'number' || schema.type === 'integer') && schema.format === 'range') {
162
- return 'range';
163
- }
166
+ // Range slider for number/integer with format: "range"
167
+ if (
168
+ (schema.type === "number" || schema.type === "integer") &&
169
+ schema.format === "range"
170
+ ) {
171
+ return "range";
172
+ }
164
173
 
165
- // String -> text field
166
- if (schema.type === 'string') {
167
- return 'text';
168
- }
174
+ // String -> text field
175
+ if (schema.type === "string") {
176
+ return "text";
177
+ }
169
178
 
170
- // Number or integer -> number field
171
- if (schema.type === 'number' || schema.type === 'integer') {
172
- return 'number';
173
- }
179
+ // Number or integer -> number field
180
+ if (schema.type === "number" || schema.type === "integer") {
181
+ return "number";
182
+ }
174
183
 
175
- // Boolean -> toggle
176
- if (schema.type === 'boolean') {
177
- return 'toggle';
178
- }
184
+ // Boolean -> toggle
185
+ if (schema.type === "boolean") {
186
+ return "toggle";
187
+ }
179
188
 
180
- // Future: Array type support
181
- if (schema.type === 'array') {
182
- return 'array';
183
- }
189
+ // Future: Array type support
190
+ if (schema.type === "array") {
191
+ return "array";
192
+ }
184
193
 
185
- // Object type without specific format -> CodeMirror JSON editor
186
- if (schema.type === 'object') {
187
- return 'code-editor';
188
- }
194
+ // Object type without specific format -> CodeMirror JSON editor
195
+ if (schema.type === "object") {
196
+ return "code-editor";
197
+ }
189
198
 
190
- // Fallback to text
191
- return 'text';
192
- });
199
+ // Fallback to text
200
+ return "text";
201
+ });
193
202
 
194
- /**
195
- * Get enum options as string array for select/checkbox components
196
- */
197
- const enumOptions = $derived.by((): string[] => {
198
- if (!schema.enum) return [];
199
- return schema.enum.map((opt) => String(opt));
200
- });
203
+ /**
204
+ * Get enum options as string array for select/checkbox components
205
+ */
206
+ const enumOptions = $derived.by((): string[] => {
207
+ if (!schema.enum) return [];
208
+ return schema.enum.map((opt) => String(opt));
209
+ });
201
210
 
202
- /**
203
- * Get select options for select-options type
204
- * Handles both oneOf (standard) and options (legacy) patterns
205
- */
206
- const selectOptions = $derived(getSchemaOptions(schema));
211
+ /**
212
+ * Get select options for select-options type
213
+ * Handles both oneOf (standard) and options (legacy) patterns
214
+ */
215
+ const selectOptions = $derived(getSchemaOptions(schema));
207
216
 
208
- /**
209
- * Get current value as the appropriate type
210
- */
211
- const stringValue = $derived(String(value ?? ''));
212
- const numberValue = $derived(value as number | string);
213
- const booleanValue = $derived(Boolean(value ?? schema.default ?? false));
214
- const arrayValue = $derived.by((): string[] => {
215
- if (Array.isArray(value)) {
216
- return value.map((v) => String(v));
217
- }
218
- return [];
219
- });
220
- const arrayItems = $derived.by((): unknown[] => {
221
- if (Array.isArray(value)) {
222
- return value;
223
- }
224
- return [];
225
- });
217
+ /**
218
+ * Get current value as the appropriate type
219
+ */
220
+ const stringValue = $derived(String(value ?? ""));
221
+ const numberValue = $derived(value as number | string);
222
+ const booleanValue = $derived(Boolean(value ?? schema.default ?? false));
223
+ const arrayValue = $derived.by((): string[] => {
224
+ if (Array.isArray(value)) {
225
+ return value.map((v) => String(v));
226
+ }
227
+ return [];
228
+ });
229
+ const arrayItems = $derived.by((): unknown[] => {
230
+ if (Array.isArray(value)) {
231
+ return value;
232
+ }
233
+ return [];
234
+ });
226
235
 
227
- /**
228
- * Get autocomplete value - can be string or string[] based on multiple setting
229
- */
230
- const autocompleteValue = $derived.by((): string | string[] => {
231
- if (schema.autocomplete?.multiple) {
232
- if (Array.isArray(value)) {
233
- return value.map((v) => String(v));
234
- }
235
- return value ? [String(value)] : [];
236
- }
237
- return String(value ?? '');
238
- });
236
+ /**
237
+ * Get autocomplete value - can be string or string[] based on multiple setting
238
+ */
239
+ const autocompleteValue = $derived.by((): string | string[] => {
240
+ if (schema.autocomplete?.multiple) {
241
+ if (Array.isArray(value)) {
242
+ return value.map((v) => String(v));
243
+ }
244
+ return value ? [String(value)] : [];
245
+ }
246
+ return String(value ?? "");
247
+ });
239
248
  </script>
240
249
 
241
- {#if fieldType !== 'hidden'}
242
- <FormFieldWrapper
243
- id={fieldKey}
244
- label={fieldLabel}
245
- {required}
246
- description={schema.title ? schema.description : undefined}
247
- {animationDelay}
248
- >
249
- {#if fieldType === 'checkbox-group'}
250
- <FormCheckboxGroup
251
- id={fieldKey}
252
- value={arrayValue}
253
- options={enumOptions}
254
- ariaDescribedBy={descriptionId}
255
- disabled={isReadOnly}
256
- onChange={(val) => onChange(val)}
257
- />
258
- {:else if fieldType === 'select-enum'}
259
- <FormSelect
260
- id={fieldKey}
261
- value={stringValue}
262
- options={enumOptions}
263
- {required}
264
- ariaDescribedBy={descriptionId}
265
- disabled={isReadOnly}
266
- onChange={(val) => onChange(val)}
267
- />
268
- {:else if fieldType === 'textarea'}
269
- <FormTextarea
270
- id={fieldKey}
271
- value={stringValue}
272
- placeholder={schema.placeholder ?? ''}
273
- {required}
274
- ariaDescribedBy={descriptionId}
275
- disabled={isReadOnly}
276
- onChange={(val) => onChange(val)}
277
- />
278
- {:else if fieldType === 'text'}
279
- <FormTextField
280
- id={fieldKey}
281
- value={stringValue}
282
- placeholder={schema.placeholder ?? ''}
283
- {required}
284
- ariaDescribedBy={descriptionId}
285
- disabled={isReadOnly}
286
- onChange={(val) => onChange(val)}
287
- />
288
- {:else if fieldType === 'number'}
289
- <FormNumberField
290
- id={fieldKey}
291
- value={numberValue}
292
- placeholder={schema.placeholder ?? ''}
293
- min={schema.minimum}
294
- max={schema.maximum}
295
- step={schema.step}
296
- {required}
297
- ariaDescribedBy={descriptionId}
298
- disabled={isReadOnly}
299
- onChange={(val) => onChange(val)}
300
- />
301
- {:else if fieldType === 'range'}
302
- <FormRangeField
303
- id={fieldKey}
304
- value={numberValue}
305
- min={schema.minimum}
306
- max={schema.maximum}
307
- step={schema.step}
308
- {required}
309
- ariaDescribedBy={descriptionId}
310
- disabled={isReadOnly}
311
- onChange={(val) => onChange(val)}
312
- />
313
- {:else if fieldType === 'toggle'}
314
- <FormToggle
315
- id={fieldKey}
316
- value={booleanValue}
317
- ariaDescribedBy={descriptionId}
318
- disabled={isReadOnly}
319
- onChange={(val) => onChange(val)}
320
- />
321
- {:else if fieldType === 'select-options'}
322
- <FormSelect
323
- id={fieldKey}
324
- value={stringValue}
325
- options={selectOptions}
326
- {required}
327
- ariaDescribedBy={descriptionId}
328
- disabled={isReadOnly}
329
- onChange={(val) => onChange(val)}
330
- />
331
- {:else if fieldType === 'array' && schema.items}
332
- <FormArray
333
- id={fieldKey}
334
- value={arrayItems}
335
- itemSchema={schema.items}
336
- minItems={schema.minItems}
337
- maxItems={schema.maxItems}
338
- addLabel={`Add ${schema.items.title ?? 'Item'}`}
339
- disabled={isReadOnly}
340
- onChange={(val) => onChange(val)}
341
- />
342
- {:else if fieldType === 'code-editor'}
343
- <FormCodeEditor
344
- id={fieldKey}
345
- {value}
346
- placeholder={schema.placeholder ?? '{}'}
347
- {required}
348
- height={(schema.height as string | undefined) ?? '200px'}
349
- darkTheme={(schema.darkTheme as boolean | undefined) ?? getResolvedTheme() === 'dark'}
350
- autoFormat={(schema.autoFormat as boolean | undefined) ?? true}
351
- ariaDescribedBy={descriptionId}
352
- disabled={isReadOnly}
353
- onChange={(val) => onChange(val)}
354
- />
355
- {:else if fieldType === 'markdown-editor'}
356
- <FormMarkdownEditor
357
- id={fieldKey}
358
- value={stringValue}
359
- placeholder={schema.placeholder ?? 'Write your markdown here...'}
360
- {required}
361
- height={(schema.height as string | undefined) ?? '300px'}
362
- showToolbar={(schema.showToolbar as boolean | undefined) ?? true}
363
- showStatusBar={(schema.showStatusBar as boolean | undefined) ?? true}
364
- spellChecker={(schema.spellChecker as boolean | undefined) ?? false}
365
- ariaDescribedBy={descriptionId}
366
- disabled={isReadOnly}
367
- onChange={(val) => onChange(val)}
368
- />
369
- {:else if fieldType === 'template-editor'}
370
- <FormTemplateEditor
371
- id={fieldKey}
372
- value={stringValue}
373
- placeholder={schema.placeholder ??
374
- 'Enter your template here...\nUse {{ variable }} for dynamic values.'}
375
- {required}
376
- height={(schema.height as string | undefined) ?? '250px'}
377
- darkTheme={(schema.darkTheme as boolean | undefined) ?? getResolvedTheme() === 'dark'}
378
- variables={schema.variables}
379
- placeholderExample={(schema.placeholderExample as string | undefined) ??
380
- 'Hello {{ name }}, your order #{{ order_id }} is ready!'}
381
- ariaDescribedBy={descriptionId}
382
- disabled={isReadOnly}
383
- {node}
384
- {nodes}
385
- {edges}
386
- {workflowId}
387
- {authProvider}
388
- onChange={(val) => onChange(val)}
389
- />
390
- {:else if fieldType === 'autocomplete' && schema.autocomplete}
391
- <FormAutocomplete
392
- id={fieldKey}
393
- value={autocompleteValue}
394
- autocomplete={schema.autocomplete}
395
- placeholder={schema.placeholder ?? ''}
396
- {required}
397
- ariaDescribedBy={descriptionId}
398
- disabled={isReadOnly}
399
- onChange={(val) => onChange(val)}
400
- />
401
- {:else}
402
- <!-- Fallback to text input -->
403
- <FormTextField
404
- id={fieldKey}
405
- value={stringValue}
406
- placeholder={schema.placeholder ?? ''}
407
- ariaDescribedBy={descriptionId}
408
- disabled={isReadOnly}
409
- onChange={(val) => onChange(val)}
410
- />
411
- {/if}
412
- </FormFieldWrapper>
250
+ {#if fieldType !== "hidden"}
251
+ <FormFieldWrapper
252
+ id={fieldKey}
253
+ label={fieldLabel}
254
+ {required}
255
+ description={schema.title ? schema.description : undefined}
256
+ {animationDelay}
257
+ >
258
+ {#if fieldType === "checkbox-group"}
259
+ <FormCheckboxGroup
260
+ id={fieldKey}
261
+ value={arrayValue}
262
+ options={enumOptions}
263
+ ariaDescribedBy={descriptionId}
264
+ disabled={isReadOnly}
265
+ onChange={(val) => onChange(val)}
266
+ />
267
+ {:else if fieldType === "select-enum"}
268
+ <FormSelect
269
+ id={fieldKey}
270
+ value={stringValue}
271
+ options={enumOptions}
272
+ {required}
273
+ ariaDescribedBy={descriptionId}
274
+ disabled={isReadOnly}
275
+ onChange={(val) => onChange(val)}
276
+ />
277
+ {:else if fieldType === "textarea"}
278
+ <FormTextarea
279
+ id={fieldKey}
280
+ value={stringValue}
281
+ placeholder={schema.placeholder ?? ""}
282
+ {required}
283
+ ariaDescribedBy={descriptionId}
284
+ disabled={isReadOnly}
285
+ onChange={(val) => onChange(val)}
286
+ />
287
+ {:else if fieldType === "text"}
288
+ <FormTextField
289
+ id={fieldKey}
290
+ value={stringValue}
291
+ placeholder={schema.placeholder ?? ""}
292
+ {required}
293
+ ariaDescribedBy={descriptionId}
294
+ disabled={isReadOnly}
295
+ onChange={(val) => onChange(val)}
296
+ />
297
+ {:else if fieldType === "number"}
298
+ <FormNumberField
299
+ id={fieldKey}
300
+ value={numberValue}
301
+ placeholder={schema.placeholder ?? ""}
302
+ min={schema.minimum}
303
+ max={schema.maximum}
304
+ step={schema.step}
305
+ {required}
306
+ ariaDescribedBy={descriptionId}
307
+ disabled={isReadOnly}
308
+ onChange={(val) => onChange(val)}
309
+ />
310
+ {:else if fieldType === "range"}
311
+ <FormRangeField
312
+ id={fieldKey}
313
+ value={numberValue}
314
+ min={schema.minimum}
315
+ max={schema.maximum}
316
+ step={schema.step}
317
+ {required}
318
+ ariaDescribedBy={descriptionId}
319
+ disabled={isReadOnly}
320
+ onChange={(val) => onChange(val)}
321
+ />
322
+ {:else if fieldType === "toggle"}
323
+ <FormToggle
324
+ id={fieldKey}
325
+ value={booleanValue}
326
+ ariaDescribedBy={descriptionId}
327
+ disabled={isReadOnly}
328
+ onChange={(val) => onChange(val)}
329
+ />
330
+ {:else if fieldType === "select-options"}
331
+ <FormSelect
332
+ id={fieldKey}
333
+ value={stringValue}
334
+ options={selectOptions}
335
+ {required}
336
+ ariaDescribedBy={descriptionId}
337
+ disabled={isReadOnly}
338
+ onChange={(val) => onChange(val)}
339
+ />
340
+ {:else if fieldType === "array" && schema.items}
341
+ <FormArray
342
+ id={fieldKey}
343
+ value={arrayItems}
344
+ itemSchema={schema.items}
345
+ minItems={schema.minItems}
346
+ maxItems={schema.maxItems}
347
+ addLabel={`Add ${schema.items.title ?? "Item"}`}
348
+ disabled={isReadOnly}
349
+ onChange={(val) => onChange(val)}
350
+ />
351
+ {:else if fieldType === "code-editor"}
352
+ <FormCodeEditor
353
+ id={fieldKey}
354
+ {value}
355
+ placeholder={schema.placeholder ?? "{}"}
356
+ {required}
357
+ height={(schema.height as string | undefined) ?? "200px"}
358
+ darkTheme={(schema.darkTheme as boolean | undefined) ??
359
+ getResolvedTheme() === "dark"}
360
+ autoFormat={(schema.autoFormat as boolean | undefined) ?? true}
361
+ ariaDescribedBy={descriptionId}
362
+ disabled={isReadOnly}
363
+ onChange={(val) => onChange(val)}
364
+ />
365
+ {:else if fieldType === "markdown-editor"}
366
+ <FormMarkdownEditor
367
+ id={fieldKey}
368
+ value={stringValue}
369
+ placeholder={schema.placeholder ?? "Write your markdown here..."}
370
+ {required}
371
+ height={(schema.height as string | undefined) ?? "300px"}
372
+ showToolbar={(schema.showToolbar as boolean | undefined) ?? true}
373
+ showStatusBar={(schema.showStatusBar as boolean | undefined) ?? true}
374
+ spellChecker={(schema.spellChecker as boolean | undefined) ?? false}
375
+ ariaDescribedBy={descriptionId}
376
+ disabled={isReadOnly}
377
+ onChange={(val) => onChange(val)}
378
+ />
379
+ {:else if fieldType === "template-editor"}
380
+ <FormTemplateEditor
381
+ id={fieldKey}
382
+ value={stringValue}
383
+ placeholder={schema.placeholder ??
384
+ "Enter your template here...\nUse {{ variable }} for dynamic values."}
385
+ {required}
386
+ height={(schema.height as string | undefined) ?? "250px"}
387
+ darkTheme={(schema.darkTheme as boolean | undefined) ??
388
+ getResolvedTheme() === "dark"}
389
+ variables={schema.variables}
390
+ placeholderExample={(schema.placeholderExample as string | undefined) ??
391
+ "Hello {{ name }}, your order #{{ order_id }} is ready!"}
392
+ ariaDescribedBy={descriptionId}
393
+ disabled={isReadOnly}
394
+ {node}
395
+ {nodes}
396
+ {edges}
397
+ {workflowId}
398
+ {authProvider}
399
+ onChange={(val) => onChange(val)}
400
+ />
401
+ {:else if fieldType === "autocomplete" && schema.autocomplete}
402
+ <FormAutocomplete
403
+ id={fieldKey}
404
+ value={autocompleteValue}
405
+ autocomplete={schema.autocomplete}
406
+ placeholder={schema.placeholder ?? ""}
407
+ {required}
408
+ ariaDescribedBy={descriptionId}
409
+ disabled={isReadOnly}
410
+ onChange={(val) => onChange(val)}
411
+ />
412
+ {:else}
413
+ <!-- Fallback to text input -->
414
+ <FormTextField
415
+ id={fieldKey}
416
+ value={stringValue}
417
+ placeholder={schema.placeholder ?? ""}
418
+ ariaDescribedBy={descriptionId}
419
+ disabled={isReadOnly}
420
+ onChange={(val) => onChange(val)}
421
+ />
422
+ {/if}
423
+ </FormFieldWrapper>
413
424
  {/if}
414
425
 
415
426
  <style>
416
- /* Styles moved to individual form components */
427
+ /* Styles moved to individual form components */
417
428
  </style>