@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
@@ -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>