@flowdrop/flowdrop 1.0.0 → 1.1.0

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