@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
@@ -15,444 +15,462 @@
15
15
  -->
16
16
 
17
17
  <script lang="ts">
18
- import { onMount, onDestroy } from 'svelte';
19
- import {
20
- EditorView,
21
- lineNumbers,
22
- highlightActiveLineGutter,
23
- drawSelection
24
- } from '@codemirror/view';
25
- import { EditorState } from '@codemirror/state';
26
- import { history, historyKeymap } from '@codemirror/commands';
27
- import { highlightSpecialChars, highlightActiveLine } from '@codemirror/view';
28
- import { syntaxHighlighting, defaultHighlightStyle } from '@codemirror/language';
29
- import { keymap } from '@codemirror/view';
30
- import { defaultKeymap, indentWithTab } from '@codemirror/commands';
31
- import { json, jsonParseLinter } from '@codemirror/lang-json';
32
- import { oneDark } from '@codemirror/theme-one-dark';
33
- import { linter } from '@codemirror/lint';
34
-
35
- interface Props {
36
- /** Field identifier */
37
- id: string;
38
- /** Current value - can be string (raw JSON) or object */
39
- value: unknown;
40
- /** Placeholder text shown when empty */
41
- placeholder?: string;
42
- /** Whether the field is required */
43
- required?: boolean;
44
- /** Whether to use dark theme */
45
- darkTheme?: boolean;
46
- /** Editor height in pixels or CSS value */
47
- height?: string;
48
- /** Whether to auto-format JSON on blur */
49
- autoFormat?: boolean;
50
- /** Whether the field is disabled (read-only) */
51
- disabled?: boolean;
52
- /** ARIA description ID */
53
- ariaDescribedBy?: string;
54
- /** Callback when value changes */
55
- onChange: (value: unknown) => void;
56
- }
57
-
58
- let {
59
- id,
60
- value = '',
61
- placeholder = '{}',
62
- required = false,
63
- darkTheme = false,
64
- height = '200px',
65
- autoFormat = true,
66
- disabled = false,
67
- ariaDescribedBy,
68
- onChange
69
- }: Props = $props();
70
-
71
- /** Reference to the container element */
72
- let containerRef: HTMLDivElement | undefined = $state(undefined);
73
-
74
- /** CodeMirror editor instance */
75
- let editorView: EditorView | undefined = $state(undefined);
76
-
77
- /** Current validation error message */
78
- let validationError: string | undefined = $state(undefined);
79
-
80
- /** Flag to prevent update loops */
81
- let isInternalUpdate = false;
82
-
83
- /** Flag to skip $effect when change originated from the editor */
84
- let isEditorUpdate = false;
85
-
86
- /**
87
- * Convert value to JSON string for editor display
88
- */
89
- function valueToString(val: unknown): string {
90
- if (val === undefined || val === null) {
91
- return '';
92
- }
93
- if (typeof val === 'string') {
94
- // Check if it's already a valid JSON string
95
- try {
96
- JSON.parse(val);
97
- return val;
98
- } catch {
99
- // Not valid JSON, return as-is
100
- return val;
101
- }
102
- }
103
- // Convert object to formatted JSON string
104
- return JSON.stringify(val, null, 2);
105
- }
106
-
107
- /**
108
- * Validate JSON and return parsed value or undefined if invalid
109
- */
110
- function validateAndParse(content: string): { valid: boolean; value?: unknown; error?: string } {
111
- if (!content.trim()) {
112
- return { valid: true, value: undefined };
113
- }
114
-
115
- try {
116
- const parsed = JSON.parse(content);
117
- return { valid: true, value: parsed };
118
- } catch (e) {
119
- const error = e instanceof Error ? e.message : 'Invalid JSON';
120
- return { valid: false, error };
121
- }
122
- }
123
-
124
- /**
125
- * Handle editor content changes
126
- */
127
- function handleUpdate(update: { docChanged: boolean; state: EditorState }): void {
128
- if (!update.docChanged || isInternalUpdate) {
129
- return;
130
- }
131
-
132
- const content = update.state.doc.toString();
133
- const result = validateAndParse(content);
134
-
135
- isEditorUpdate = true;
136
- if (result.valid) {
137
- validationError = undefined;
138
- // Emit the parsed value (object) not the string
139
- onChange(result.value);
140
- } else {
141
- validationError = result.error;
142
- // Still emit the raw string so user can continue editing
143
- onChange(content);
144
- }
145
- }
146
-
147
- /**
148
- * Format JSON content (used on blur if autoFormat is enabled)
149
- */
150
- function formatContent(): void {
151
- if (!editorView || !autoFormat) {
152
- return;
153
- }
154
-
155
- const content = editorView.state.doc.toString();
156
- const result = validateAndParse(content);
157
-
158
- if (result.valid && result.value !== undefined) {
159
- const formatted = JSON.stringify(result.value, null, 2);
160
- if (formatted !== content) {
161
- isInternalUpdate = true;
162
- editorView.dispatch({
163
- changes: {
164
- from: 0,
165
- to: editorView.state.doc.length,
166
- insert: formatted
167
- }
168
- });
169
- isInternalUpdate = false;
170
- }
171
- }
172
- }
173
-
174
- /**
175
- * Create editor extensions array
176
- * Uses minimal setup for better performance (no auto-closing brackets, no autocompletion)
177
- * When disabled is true, adds readOnly/editable so the editor cannot be modified
178
- */
179
- function createExtensions() {
180
- const extensions = [
181
- // Essential visual features
182
- lineNumbers(),
183
- highlightActiveLineGutter(),
184
- highlightSpecialChars(),
185
- highlightActiveLine(),
186
- drawSelection(),
187
-
188
- // Editing features (skip when read-only)
189
- ...(disabled
190
- ? []
191
- : [history(), keymap.of([...defaultKeymap, ...historyKeymap, indentWithTab])]),
192
-
193
- // Read-only: prevent document changes and mark content as non-editable
194
- ...(disabled ? [EditorState.readOnly.of(true), EditorView.editable.of(false)] : []),
195
-
196
- // Syntax highlighting - use default for light mode, oneDark handles dark mode
197
- ...(darkTheme ? [oneDark] : [syntaxHighlighting(defaultHighlightStyle, { fallback: true })]),
198
-
199
- // JSON-specific features
200
- json(),
201
- linter(jsonParseLinter(), { delay: 1000 }),
202
-
203
- // Update listener (only fires on user edit when not disabled)
204
- EditorView.updateListener.of(handleUpdate),
205
-
206
- // Custom theme
207
- EditorView.theme({
208
- '&': {
209
- height: height,
210
- fontSize: '0.8125rem',
211
- fontFamily: "'JetBrains Mono', 'Fira Code', 'Monaco', 'Menlo', monospace"
212
- },
213
- '.cm-scroller': {
214
- overflow: 'auto'
215
- },
216
- '.cm-content': {
217
- minHeight: '100px'
218
- },
219
- '&.cm-focused': {
220
- outline: 'none'
221
- }
222
- }),
223
- EditorView.lineWrapping
224
- ];
225
-
226
- return extensions;
227
- }
228
-
229
- /**
230
- * Initialize CodeMirror editor on mount
231
- */
232
- onMount(() => {
233
- if (!containerRef) {
234
- return;
235
- }
236
-
237
- const initialContent = valueToString(value);
238
-
239
- editorView = new EditorView({
240
- state: EditorState.create({
241
- doc: initialContent,
242
- extensions: createExtensions()
243
- }),
244
- parent: containerRef
245
- });
246
-
247
- // Validate initial content
248
- if (initialContent) {
249
- const result = validateAndParse(initialContent);
250
- if (!result.valid) {
251
- validationError = result.error;
252
- }
253
- }
254
- });
255
-
256
- /**
257
- * Clean up editor on destroy
258
- */
259
- onDestroy(() => {
260
- if (editorView) {
261
- editorView.destroy();
262
- }
263
- });
264
-
265
- /**
266
- * Update editor content when value prop changes externally
267
- */
268
- $effect(() => {
269
- if (!editorView) {
270
- return;
271
- }
272
-
273
- const newContent = valueToString(value);
274
-
275
- // Skip if the change originated from the editor itself
276
- if (isEditorUpdate) {
277
- isEditorUpdate = false;
278
- return;
279
- }
280
-
281
- const currentContent = editorView.state.doc.toString();
282
-
283
- // Only update if content actually changed and wasn't from internal edit
284
- if (newContent !== currentContent && !isInternalUpdate) {
285
- isInternalUpdate = true;
286
- editorView.dispatch({
287
- changes: {
288
- from: 0,
289
- to: editorView.state.doc.length,
290
- insert: newContent
291
- }
292
- });
293
- isInternalUpdate = false;
294
-
295
- // Validate new content
296
- const result = validateAndParse(newContent);
297
- validationError = result.valid ? undefined : result.error;
298
- }
299
- });
18
+ import { onMount, onDestroy } from "svelte";
19
+ import {
20
+ EditorView,
21
+ lineNumbers,
22
+ highlightActiveLineGutter,
23
+ drawSelection,
24
+ } from "@codemirror/view";
25
+ import { EditorState } from "@codemirror/state";
26
+ import { history, historyKeymap } from "@codemirror/commands";
27
+ import { highlightSpecialChars, highlightActiveLine } from "@codemirror/view";
28
+ import {
29
+ syntaxHighlighting,
30
+ defaultHighlightStyle,
31
+ } from "@codemirror/language";
32
+ import { keymap } from "@codemirror/view";
33
+ import { defaultKeymap, indentWithTab } from "@codemirror/commands";
34
+ import { json, jsonParseLinter } from "@codemirror/lang-json";
35
+ import { oneDark } from "@codemirror/theme-one-dark";
36
+ import { linter } from "@codemirror/lint";
37
+
38
+ interface Props {
39
+ /** Field identifier */
40
+ id: string;
41
+ /** Current value - can be string (raw JSON) or object */
42
+ value: unknown;
43
+ /** Placeholder text shown when empty */
44
+ placeholder?: string;
45
+ /** Whether the field is required */
46
+ required?: boolean;
47
+ /** Whether to use dark theme */
48
+ darkTheme?: boolean;
49
+ /** Editor height in pixels or CSS value */
50
+ height?: string;
51
+ /** Whether to auto-format JSON on blur */
52
+ autoFormat?: boolean;
53
+ /** Whether the field is disabled (read-only) */
54
+ disabled?: boolean;
55
+ /** ARIA description ID */
56
+ ariaDescribedBy?: string;
57
+ /** Callback when value changes */
58
+ onChange: (value: unknown) => void;
59
+ }
60
+
61
+ let {
62
+ id,
63
+ value = "",
64
+ placeholder = "{}",
65
+ required = false,
66
+ darkTheme = false,
67
+ height = "200px",
68
+ autoFormat = true,
69
+ disabled = false,
70
+ ariaDescribedBy,
71
+ onChange,
72
+ }: Props = $props();
73
+
74
+ /** Reference to the container element */
75
+ let containerRef: HTMLDivElement | undefined = $state(undefined);
76
+
77
+ /** CodeMirror editor instance */
78
+ let editorView: EditorView | undefined = $state(undefined);
79
+
80
+ /** Current validation error message */
81
+ let validationError: string | undefined = $state(undefined);
82
+
83
+ /** Flag to prevent update loops */
84
+ let isInternalUpdate = false;
85
+
86
+ /** Flag to skip $effect when change originated from the editor */
87
+ let isEditorUpdate = false;
88
+
89
+ /**
90
+ * Convert value to JSON string for editor display
91
+ */
92
+ function valueToString(val: unknown): string {
93
+ if (val === undefined || val === null) {
94
+ return "";
95
+ }
96
+ if (typeof val === "string") {
97
+ // Check if it's already a valid JSON string
98
+ try {
99
+ JSON.parse(val);
100
+ return val;
101
+ } catch {
102
+ // Not valid JSON, return as-is
103
+ return val;
104
+ }
105
+ }
106
+ // Convert object to formatted JSON string
107
+ return JSON.stringify(val, null, 2);
108
+ }
109
+
110
+ /**
111
+ * Validate JSON and return parsed value or undefined if invalid
112
+ */
113
+ function validateAndParse(content: string): {
114
+ valid: boolean;
115
+ value?: unknown;
116
+ error?: string;
117
+ } {
118
+ if (!content.trim()) {
119
+ return { valid: true, value: undefined };
120
+ }
121
+
122
+ try {
123
+ const parsed = JSON.parse(content);
124
+ return { valid: true, value: parsed };
125
+ } catch (e) {
126
+ const error = e instanceof Error ? e.message : "Invalid JSON";
127
+ return { valid: false, error };
128
+ }
129
+ }
130
+
131
+ /**
132
+ * Handle editor content changes
133
+ */
134
+ function handleUpdate(update: {
135
+ docChanged: boolean;
136
+ state: EditorState;
137
+ }): void {
138
+ if (!update.docChanged || isInternalUpdate) {
139
+ return;
140
+ }
141
+
142
+ const content = update.state.doc.toString();
143
+ const result = validateAndParse(content);
144
+
145
+ isEditorUpdate = true;
146
+ if (result.valid) {
147
+ validationError = undefined;
148
+ // Emit the parsed value (object) not the string
149
+ onChange(result.value);
150
+ } else {
151
+ validationError = result.error;
152
+ // Still emit the raw string so user can continue editing
153
+ onChange(content);
154
+ }
155
+ }
156
+
157
+ /**
158
+ * Format JSON content (used on blur if autoFormat is enabled)
159
+ */
160
+ function formatContent(): void {
161
+ if (!editorView || !autoFormat) {
162
+ return;
163
+ }
164
+
165
+ const content = editorView.state.doc.toString();
166
+ const result = validateAndParse(content);
167
+
168
+ if (result.valid && result.value !== undefined) {
169
+ const formatted = JSON.stringify(result.value, null, 2);
170
+ if (formatted !== content) {
171
+ isInternalUpdate = true;
172
+ editorView.dispatch({
173
+ changes: {
174
+ from: 0,
175
+ to: editorView.state.doc.length,
176
+ insert: formatted,
177
+ },
178
+ });
179
+ isInternalUpdate = false;
180
+ }
181
+ }
182
+ }
183
+
184
+ /**
185
+ * Create editor extensions array
186
+ * Uses minimal setup for better performance (no auto-closing brackets, no autocompletion)
187
+ * When disabled is true, adds readOnly/editable so the editor cannot be modified
188
+ */
189
+ function createExtensions() {
190
+ const extensions = [
191
+ // Essential visual features
192
+ lineNumbers(),
193
+ highlightActiveLineGutter(),
194
+ highlightSpecialChars(),
195
+ highlightActiveLine(),
196
+ drawSelection(),
197
+
198
+ // Editing features (skip when read-only)
199
+ ...(disabled
200
+ ? []
201
+ : [
202
+ history(),
203
+ keymap.of([...defaultKeymap, ...historyKeymap, indentWithTab]),
204
+ ]),
205
+
206
+ // Read-only: prevent document changes and mark content as non-editable
207
+ ...(disabled
208
+ ? [EditorState.readOnly.of(true), EditorView.editable.of(false)]
209
+ : []),
210
+
211
+ // Syntax highlighting - use default for light mode, oneDark handles dark mode
212
+ ...(darkTheme
213
+ ? [oneDark]
214
+ : [syntaxHighlighting(defaultHighlightStyle, { fallback: true })]),
215
+
216
+ // JSON-specific features
217
+ json(),
218
+ linter(jsonParseLinter(), { delay: 1000 }),
219
+
220
+ // Update listener (only fires on user edit when not disabled)
221
+ EditorView.updateListener.of(handleUpdate),
222
+
223
+ // Custom theme
224
+ EditorView.theme({
225
+ "&": {
226
+ height: height,
227
+ fontSize: "0.8125rem",
228
+ fontFamily:
229
+ "'JetBrains Mono', 'Fira Code', 'Monaco', 'Menlo', monospace",
230
+ },
231
+ ".cm-scroller": {
232
+ overflow: "auto",
233
+ },
234
+ ".cm-content": {
235
+ minHeight: "100px",
236
+ },
237
+ "&.cm-focused": {
238
+ outline: "none",
239
+ },
240
+ }),
241
+ EditorView.lineWrapping,
242
+ ];
243
+
244
+ return extensions;
245
+ }
246
+
247
+ /**
248
+ * Initialize CodeMirror editor on mount
249
+ */
250
+ onMount(() => {
251
+ if (!containerRef) {
252
+ return;
253
+ }
254
+
255
+ const initialContent = valueToString(value);
256
+
257
+ editorView = new EditorView({
258
+ state: EditorState.create({
259
+ doc: initialContent,
260
+ extensions: createExtensions(),
261
+ }),
262
+ parent: containerRef,
263
+ });
264
+
265
+ // Validate initial content
266
+ if (initialContent) {
267
+ const result = validateAndParse(initialContent);
268
+ if (!result.valid) {
269
+ validationError = result.error;
270
+ }
271
+ }
272
+ });
273
+
274
+ /**
275
+ * Clean up editor on destroy
276
+ */
277
+ onDestroy(() => {
278
+ if (editorView) {
279
+ editorView.destroy();
280
+ }
281
+ });
282
+
283
+ /**
284
+ * Update editor content when value prop changes externally
285
+ */
286
+ $effect(() => {
287
+ if (!editorView) {
288
+ return;
289
+ }
290
+
291
+ const newContent = valueToString(value);
292
+
293
+ // Skip if the change originated from the editor itself
294
+ if (isEditorUpdate) {
295
+ isEditorUpdate = false;
296
+ return;
297
+ }
298
+
299
+ const currentContent = editorView.state.doc.toString();
300
+
301
+ // Only update if content actually changed and wasn't from internal edit
302
+ if (newContent !== currentContent && !isInternalUpdate) {
303
+ isInternalUpdate = true;
304
+ editorView.dispatch({
305
+ changes: {
306
+ from: 0,
307
+ to: editorView.state.doc.length,
308
+ insert: newContent,
309
+ },
310
+ });
311
+ isInternalUpdate = false;
312
+
313
+ // Validate new content
314
+ const result = validateAndParse(newContent);
315
+ validationError = result.valid ? undefined : result.error;
316
+ }
317
+ });
300
318
  </script>
301
319
 
302
320
  <div class="form-code-editor" class:form-code-editor--error={validationError}>
303
- <!-- Hidden input for form submission compatibility -->
304
- <input
305
- type="hidden"
306
- {id}
307
- name={id}
308
- value={typeof value === 'string' ? value : JSON.stringify(value)}
309
- aria-describedby={ariaDescribedBy}
310
- aria-required={required}
311
- />
312
-
313
- <!-- CodeMirror container -->
314
- <div
315
- bind:this={containerRef}
316
- class="form-code-editor__container"
317
- class:form-code-editor__container--dark={darkTheme}
318
- role="textbox"
319
- aria-multiline="true"
320
- aria-label="JSON editor"
321
- onblur={formatContent}
322
- ></div>
323
-
324
- <!-- Validation error display -->
325
- {#if validationError}
326
- <div class="form-code-editor__error" role="alert">
327
- <svg
328
- xmlns="http://www.w3.org/2000/svg"
329
- viewBox="0 0 20 20"
330
- fill="currentColor"
331
- class="form-code-editor__error-icon"
332
- >
333
- <path
334
- fill-rule="evenodd"
335
- d="M18 10a8 8 0 11-16 0 8 8 0 0116 0zm-8-5a.75.75 0 01.75.75v4.5a.75.75 0 01-1.5 0v-4.5A.75.75 0 0110 5zm0 10a1 1 0 100-2 1 1 0 000 2z"
336
- clip-rule="evenodd"
337
- />
338
- </svg>
339
- <span>{validationError}</span>
340
- </div>
341
- {/if}
342
-
343
- <!-- Placeholder hint when empty -->
344
- {#if !value && placeholder}
345
- <div class="form-code-editor__placeholder">
346
- Start typing or paste JSON. Example: <code>{placeholder}</code>
347
- </div>
348
- {/if}
321
+ <!-- Hidden input for form submission compatibility -->
322
+ <input
323
+ type="hidden"
324
+ {id}
325
+ name={id}
326
+ value={typeof value === "string" ? value : JSON.stringify(value)}
327
+ aria-describedby={ariaDescribedBy}
328
+ aria-required={required}
329
+ />
330
+
331
+ <!-- CodeMirror container -->
332
+ <div
333
+ bind:this={containerRef}
334
+ class="form-code-editor__container"
335
+ class:form-code-editor__container--dark={darkTheme}
336
+ role="textbox"
337
+ aria-multiline="true"
338
+ aria-label="JSON editor"
339
+ onblur={formatContent}
340
+ ></div>
341
+
342
+ <!-- Validation error display -->
343
+ {#if validationError}
344
+ <div class="form-code-editor__error" role="alert">
345
+ <svg
346
+ xmlns="http://www.w3.org/2000/svg"
347
+ viewBox="0 0 20 20"
348
+ fill="currentColor"
349
+ class="form-code-editor__error-icon"
350
+ >
351
+ <path
352
+ fill-rule="evenodd"
353
+ d="M18 10a8 8 0 11-16 0 8 8 0 0116 0zm-8-5a.75.75 0 01.75.75v4.5a.75.75 0 01-1.5 0v-4.5A.75.75 0 0110 5zm0 10a1 1 0 100-2 1 1 0 000 2z"
354
+ clip-rule="evenodd"
355
+ />
356
+ </svg>
357
+ <span>{validationError}</span>
358
+ </div>
359
+ {/if}
360
+
361
+ <!-- Placeholder hint when empty -->
362
+ {#if !value && placeholder}
363
+ <div class="form-code-editor__placeholder">
364
+ Start typing or paste JSON. Example: <code>{placeholder}</code>
365
+ </div>
366
+ {/if}
349
367
  </div>
350
368
 
351
369
  <style>
352
- .form-code-editor {
353
- position: relative;
354
- width: 100%;
355
- }
356
-
357
- .form-code-editor__container {
358
- border: 1px solid var(--fd-border);
359
- border-radius: var(--fd-radius-lg);
360
- overflow: hidden;
361
- background-color: var(--fd-muted);
362
- transition: all var(--fd-transition-normal);
363
- box-shadow: var(--fd-shadow-sm);
364
- }
365
-
366
- .form-code-editor__container:hover {
367
- border-color: var(--fd-border-strong);
368
- background-color: var(--fd-background);
369
- }
370
-
371
- .form-code-editor__container:focus-within {
372
- border-color: var(--fd-primary);
373
- background-color: var(--fd-background);
374
- box-shadow:
375
- 0 0 0 3px rgba(59, 130, 246, 0.12),
376
- var(--fd-shadow-sm);
377
- }
378
-
379
- .form-code-editor--error .form-code-editor__container {
380
- border-color: var(--fd-error);
381
- }
382
-
383
- .form-code-editor--error .form-code-editor__container:focus-within {
384
- border-color: var(--fd-error);
385
- box-shadow:
386
- 0 0 0 3px rgba(239, 68, 68, 0.12),
387
- var(--fd-shadow-sm);
388
- }
389
-
390
- /* Dark theme overrides */
391
- .form-code-editor__container--dark {
392
- background-color: #282c34;
393
- }
394
-
395
- .form-code-editor__container--dark:hover,
396
- .form-code-editor__container--dark:focus-within {
397
- background-color: #282c34;
398
- }
399
-
400
- /* CodeMirror styling overrides */
401
- .form-code-editor__container :global(.cm-editor) {
402
- border-radius: var(--fd-radius-lg);
403
- }
404
-
405
- .form-code-editor__container :global(.cm-gutters) {
406
- background-color: var(--fd-subtle);
407
- border-right: 1px solid var(--fd-border);
408
- border-radius: var(--fd-radius-lg) 0 0 var(--fd-radius-lg);
409
- }
410
-
411
- .form-code-editor__container--dark :global(.cm-gutters) {
412
- background-color: #21252b;
413
- border-right-color: #3e4451;
414
- }
415
-
416
- /* Error message */
417
- .form-code-editor__error {
418
- display: flex;
419
- align-items: flex-start;
420
- gap: 0.375rem;
421
- margin-top: 0.5rem;
422
- padding: 0.5rem 0.75rem;
423
- background-color: var(--fd-error-muted);
424
- border: 1px solid var(--fd-error);
425
- border-radius: var(--fd-radius-md);
426
- color: var(--fd-error-hover);
427
- font-size: var(--fd-text-xs);
428
- line-height: 1.4;
429
- }
430
-
431
- .form-code-editor__error-icon {
432
- width: 1rem;
433
- height: 1rem;
434
- flex-shrink: 0;
435
- margin-top: 0.0625rem;
436
- }
437
-
438
- .form-code-editor__error span {
439
- word-break: break-word;
440
- }
441
-
442
- /* Placeholder hint */
443
- .form-code-editor__placeholder {
444
- margin-top: 0.5rem;
445
- font-size: var(--fd-text-xs);
446
- color: var(--fd-muted-foreground);
447
- font-style: italic;
448
- }
449
-
450
- .form-code-editor__placeholder code {
451
- padding: 0.125rem 0.375rem;
452
- background-color: var(--fd-subtle);
453
- border-radius: var(--fd-radius-sm);
454
- font-family: 'JetBrains Mono', 'Fira Code', 'Monaco', 'Menlo', monospace;
455
- font-size: 0.6875rem;
456
- font-style: normal;
457
- }
370
+ .form-code-editor {
371
+ position: relative;
372
+ width: 100%;
373
+ }
374
+
375
+ .form-code-editor__container {
376
+ border: 1px solid var(--fd-border);
377
+ border-radius: var(--fd-radius-lg);
378
+ overflow: hidden;
379
+ background-color: var(--fd-muted);
380
+ transition: all var(--fd-transition-normal);
381
+ box-shadow: var(--fd-shadow-sm);
382
+ }
383
+
384
+ .form-code-editor__container:hover {
385
+ border-color: var(--fd-border-strong);
386
+ background-color: var(--fd-background);
387
+ }
388
+
389
+ .form-code-editor__container:focus-within {
390
+ border-color: var(--fd-primary);
391
+ background-color: var(--fd-background);
392
+ box-shadow:
393
+ 0 0 0 3px rgba(59, 130, 246, 0.12),
394
+ var(--fd-shadow-sm);
395
+ }
396
+
397
+ .form-code-editor--error .form-code-editor__container {
398
+ border-color: var(--fd-error);
399
+ }
400
+
401
+ .form-code-editor--error .form-code-editor__container:focus-within {
402
+ border-color: var(--fd-error);
403
+ box-shadow:
404
+ 0 0 0 3px rgba(239, 68, 68, 0.12),
405
+ var(--fd-shadow-sm);
406
+ }
407
+
408
+ /* Dark theme overrides */
409
+ .form-code-editor__container--dark {
410
+ background-color: #282c34;
411
+ }
412
+
413
+ .form-code-editor__container--dark:hover,
414
+ .form-code-editor__container--dark:focus-within {
415
+ background-color: #282c34;
416
+ }
417
+
418
+ /* CodeMirror styling overrides */
419
+ .form-code-editor__container :global(.cm-editor) {
420
+ border-radius: var(--fd-radius-lg);
421
+ }
422
+
423
+ .form-code-editor__container :global(.cm-gutters) {
424
+ background-color: var(--fd-subtle);
425
+ border-right: 1px solid var(--fd-border);
426
+ border-radius: var(--fd-radius-lg) 0 0 var(--fd-radius-lg);
427
+ }
428
+
429
+ .form-code-editor__container--dark :global(.cm-gutters) {
430
+ background-color: #21252b;
431
+ border-right-color: #3e4451;
432
+ }
433
+
434
+ /* Error message */
435
+ .form-code-editor__error {
436
+ display: flex;
437
+ align-items: flex-start;
438
+ gap: 0.375rem;
439
+ margin-top: 0.5rem;
440
+ padding: 0.5rem 0.75rem;
441
+ background-color: var(--fd-error-muted);
442
+ border: 1px solid var(--fd-error);
443
+ border-radius: var(--fd-radius-md);
444
+ color: var(--fd-error-hover);
445
+ font-size: var(--fd-text-xs);
446
+ line-height: 1.4;
447
+ }
448
+
449
+ .form-code-editor__error-icon {
450
+ width: 1rem;
451
+ height: 1rem;
452
+ flex-shrink: 0;
453
+ margin-top: 0.0625rem;
454
+ }
455
+
456
+ .form-code-editor__error span {
457
+ word-break: break-word;
458
+ }
459
+
460
+ /* Placeholder hint */
461
+ .form-code-editor__placeholder {
462
+ margin-top: 0.5rem;
463
+ font-size: var(--fd-text-xs);
464
+ color: var(--fd-muted-foreground);
465
+ font-style: italic;
466
+ }
467
+
468
+ .form-code-editor__placeholder code {
469
+ padding: 0.125rem 0.375rem;
470
+ background-color: var(--fd-subtle);
471
+ border-radius: var(--fd-radius-sm);
472
+ font-family: "JetBrains Mono", "Fira Code", "Monaco", "Menlo", monospace;
473
+ font-size: 0.6875rem;
474
+ font-style: normal;
475
+ }
458
476
  </style>