@flowdrop/flowdrop 1.0.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 (403) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +252 -0
  3. package/dist/adapters/WorkflowAdapter.d.ts +167 -0
  4. package/dist/adapters/WorkflowAdapter.js +368 -0
  5. package/dist/adapters/agentspec/AgentSpecAdapter.d.ts +96 -0
  6. package/dist/adapters/agentspec/AgentSpecAdapter.js +626 -0
  7. package/dist/adapters/agentspec/agentAdapter.d.ts +59 -0
  8. package/dist/adapters/agentspec/agentAdapter.js +91 -0
  9. package/dist/adapters/agentspec/autoLayout.d.ts +34 -0
  10. package/dist/adapters/agentspec/autoLayout.js +127 -0
  11. package/dist/adapters/agentspec/componentTypeDefaults.d.ts +73 -0
  12. package/dist/adapters/agentspec/componentTypeDefaults.js +238 -0
  13. package/dist/adapters/agentspec/defaultNodeTypes.d.ts +53 -0
  14. package/dist/adapters/agentspec/defaultNodeTypes.js +561 -0
  15. package/dist/adapters/agentspec/index.d.ts +37 -0
  16. package/dist/adapters/agentspec/index.js +39 -0
  17. package/dist/adapters/agentspec/validator.d.ts +34 -0
  18. package/dist/adapters/agentspec/validator.js +169 -0
  19. package/dist/api/enhanced-client.d.ts +183 -0
  20. package/dist/api/enhanced-client.js +430 -0
  21. package/dist/components/App.svelte +981 -0
  22. package/dist/components/App.svelte.d.ts +54 -0
  23. package/dist/components/CanvasBanner.stories.svelte +29 -0
  24. package/dist/components/CanvasBanner.stories.svelte.d.ts +27 -0
  25. package/dist/components/CanvasBanner.svelte +57 -0
  26. package/dist/components/CanvasBanner.svelte.d.ts +8 -0
  27. package/dist/components/ConfigForm.svelte +1138 -0
  28. package/dist/components/ConfigForm.svelte.d.ts +44 -0
  29. package/dist/components/ConfigModal.svelte +188 -0
  30. package/dist/components/ConfigModal.svelte.d.ts +13 -0
  31. package/dist/components/ConfigPanel.stories.svelte +47 -0
  32. package/dist/components/ConfigPanel.stories.svelte.d.ts +27 -0
  33. package/dist/components/ConfigPanel.svelte +182 -0
  34. package/dist/components/ConfigPanel.svelte.d.ts +32 -0
  35. package/dist/components/ConnectionLine.svelte +32 -0
  36. package/dist/components/ConnectionLine.svelte.d.ts +3 -0
  37. package/dist/components/EdgeRefresher.svelte +41 -0
  38. package/dist/components/EdgeRefresher.svelte.d.ts +9 -0
  39. package/dist/components/FlowDropZone.svelte +83 -0
  40. package/dist/components/FlowDropZone.svelte.d.ts +13 -0
  41. package/dist/components/LoadingSpinner.stories.svelte +30 -0
  42. package/dist/components/LoadingSpinner.stories.svelte.d.ts +27 -0
  43. package/dist/components/LoadingSpinner.svelte +36 -0
  44. package/dist/components/LoadingSpinner.svelte.d.ts +8 -0
  45. package/dist/components/Logo.stories.svelte +22 -0
  46. package/dist/components/Logo.stories.svelte.d.ts +27 -0
  47. package/dist/components/Logo.svelte +102 -0
  48. package/dist/components/Logo.svelte.d.ts +26 -0
  49. package/dist/components/LogsSidebar.svelte +563 -0
  50. package/dist/components/LogsSidebar.svelte.d.ts +17 -0
  51. package/dist/components/MarkdownDisplay.stories.svelte +36 -0
  52. package/dist/components/MarkdownDisplay.stories.svelte.d.ts +27 -0
  53. package/dist/components/MarkdownDisplay.svelte +29 -0
  54. package/dist/components/MarkdownDisplay.svelte.d.ts +7 -0
  55. package/dist/components/Navbar.stories.svelte +53 -0
  56. package/dist/components/Navbar.stories.svelte.d.ts +27 -0
  57. package/dist/components/Navbar.svelte +726 -0
  58. package/dist/components/Navbar.svelte.d.ts +29 -0
  59. package/dist/components/NodeSidebar.svelte +762 -0
  60. package/dist/components/NodeSidebar.svelte.d.ts +9 -0
  61. package/dist/components/NodeStatusOverlay.stories.svelte +85 -0
  62. package/dist/components/NodeStatusOverlay.stories.svelte.d.ts +27 -0
  63. package/dist/components/NodeStatusOverlay.svelte +327 -0
  64. package/dist/components/NodeStatusOverlay.svelte.d.ts +11 -0
  65. package/dist/components/PipelineStatus.svelte +314 -0
  66. package/dist/components/PipelineStatus.svelte.d.ts +20 -0
  67. package/dist/components/PortCoordinateTracker.svelte +58 -0
  68. package/dist/components/PortCoordinateTracker.svelte.d.ts +12 -0
  69. package/dist/components/ReadOnlyDetails.svelte +170 -0
  70. package/dist/components/ReadOnlyDetails.svelte.d.ts +25 -0
  71. package/dist/components/SchemaForm.stories.svelte +116 -0
  72. package/dist/components/SchemaForm.stories.svelte.d.ts +27 -0
  73. package/dist/components/SchemaForm.svelte +536 -0
  74. package/dist/components/SchemaForm.svelte.d.ts +83 -0
  75. package/dist/components/SettingsModal.svelte +279 -0
  76. package/dist/components/SettingsModal.svelte.d.ts +23 -0
  77. package/dist/components/SettingsPanel.svelte +638 -0
  78. package/dist/components/SettingsPanel.svelte.d.ts +21 -0
  79. package/dist/components/StatusIcon.stories.svelte +60 -0
  80. package/dist/components/StatusIcon.stories.svelte.d.ts +27 -0
  81. package/dist/components/StatusIcon.svelte +119 -0
  82. package/dist/components/StatusIcon.svelte.d.ts +10 -0
  83. package/dist/components/StatusLabel.stories.svelte +17 -0
  84. package/dist/components/StatusLabel.stories.svelte.d.ts +27 -0
  85. package/dist/components/StatusLabel.svelte +33 -0
  86. package/dist/components/StatusLabel.svelte.d.ts +7 -0
  87. package/dist/components/ThemeToggle.stories.svelte +25 -0
  88. package/dist/components/ThemeToggle.stories.svelte.d.ts +27 -0
  89. package/dist/components/ThemeToggle.svelte +185 -0
  90. package/dist/components/ThemeToggle.svelte.d.ts +14 -0
  91. package/dist/components/UniversalNode.svelte +155 -0
  92. package/dist/components/UniversalNode.svelte.d.ts +15 -0
  93. package/dist/components/WorkflowEditor.svelte +1035 -0
  94. package/dist/components/WorkflowEditor.svelte.d.ts +23 -0
  95. package/dist/components/form/FormArray.svelte +1049 -0
  96. package/dist/components/form/FormArray.svelte.d.ts +22 -0
  97. package/dist/components/form/FormAutocomplete.svelte +1009 -0
  98. package/dist/components/form/FormAutocomplete.svelte.d.ts +25 -0
  99. package/dist/components/form/FormCheckboxGroup.stories.svelte +28 -0
  100. package/dist/components/form/FormCheckboxGroup.stories.svelte.d.ts +27 -0
  101. package/dist/components/form/FormCheckboxGroup.svelte +155 -0
  102. package/dist/components/form/FormCheckboxGroup.svelte.d.ts +17 -0
  103. package/dist/components/form/FormCodeEditor.svelte +458 -0
  104. package/dist/components/form/FormCodeEditor.svelte.d.ts +25 -0
  105. package/dist/components/form/FormField.svelte +417 -0
  106. package/dist/components/form/FormField.svelte.d.ts +29 -0
  107. package/dist/components/form/FormFieldLight.svelte +425 -0
  108. package/dist/components/form/FormFieldLight.svelte.d.ts +18 -0
  109. package/dist/components/form/FormFieldWrapper.stories.svelte +53 -0
  110. package/dist/components/form/FormFieldWrapper.stories.svelte.d.ts +27 -0
  111. package/dist/components/form/FormFieldWrapper.svelte +125 -0
  112. package/dist/components/form/FormFieldWrapper.svelte.d.ts +18 -0
  113. package/dist/components/form/FormFieldset.svelte +142 -0
  114. package/dist/components/form/FormFieldset.svelte.d.ts +11 -0
  115. package/dist/components/form/FormMarkdownEditor.svelte +752 -0
  116. package/dist/components/form/FormMarkdownEditor.svelte.d.ts +33 -0
  117. package/dist/components/form/FormNumberField.stories.svelte +36 -0
  118. package/dist/components/form/FormNumberField.stories.svelte.d.ts +27 -0
  119. package/dist/components/form/FormNumberField.svelte +112 -0
  120. package/dist/components/form/FormNumberField.svelte.d.ts +25 -0
  121. package/dist/components/form/FormRangeField.stories.svelte +31 -0
  122. package/dist/components/form/FormRangeField.stories.svelte.d.ts +27 -0
  123. package/dist/components/form/FormRangeField.svelte +246 -0
  124. package/dist/components/form/FormRangeField.svelte.d.ts +23 -0
  125. package/dist/components/form/FormSelect.stories.svelte +50 -0
  126. package/dist/components/form/FormSelect.stories.svelte.d.ts +27 -0
  127. package/dist/components/form/FormSelect.svelte +129 -0
  128. package/dist/components/form/FormSelect.svelte.d.ts +20 -0
  129. package/dist/components/form/FormTemplateEditor.svelte +825 -0
  130. package/dist/components/form/FormTemplateEditor.svelte.d.ts +41 -0
  131. package/dist/components/form/FormTextField.stories.svelte +30 -0
  132. package/dist/components/form/FormTextField.stories.svelte.d.ts +27 -0
  133. package/dist/components/form/FormTextField.svelte +91 -0
  134. package/dist/components/form/FormTextField.svelte.d.ts +19 -0
  135. package/dist/components/form/FormTextarea.stories.svelte +34 -0
  136. package/dist/components/form/FormTextarea.stories.svelte.d.ts +27 -0
  137. package/dist/components/form/FormTextarea.svelte +97 -0
  138. package/dist/components/form/FormTextarea.svelte.d.ts +21 -0
  139. package/dist/components/form/FormToggle.stories.svelte +30 -0
  140. package/dist/components/form/FormToggle.stories.svelte.d.ts +27 -0
  141. package/dist/components/form/FormToggle.svelte +126 -0
  142. package/dist/components/form/FormToggle.svelte.d.ts +19 -0
  143. package/dist/components/form/FormUISchemaRenderer.svelte +136 -0
  144. package/dist/components/form/FormUISchemaRenderer.svelte.d.ts +32 -0
  145. package/dist/components/form/index.d.ts +50 -0
  146. package/dist/components/form/index.js +54 -0
  147. package/dist/components/form/templateAutocomplete.d.ts +29 -0
  148. package/dist/components/form/templateAutocomplete.js +254 -0
  149. package/dist/components/form/types.d.ts +485 -0
  150. package/dist/components/form/types.js +73 -0
  151. package/dist/components/interrupt/ChoicePrompt.stories.svelte +52 -0
  152. package/dist/components/interrupt/ChoicePrompt.stories.svelte.d.ts +27 -0
  153. package/dist/components/interrupt/ChoicePrompt.svelte +401 -0
  154. package/dist/components/interrupt/ChoicePrompt.svelte.d.ts +23 -0
  155. package/dist/components/interrupt/ConfirmationPrompt.stories.svelte +71 -0
  156. package/dist/components/interrupt/ConfirmationPrompt.stories.svelte.d.ts +27 -0
  157. package/dist/components/interrupt/ConfirmationPrompt.svelte +292 -0
  158. package/dist/components/interrupt/ConfirmationPrompt.svelte.d.ts +25 -0
  159. package/dist/components/interrupt/FormPrompt.svelte +236 -0
  160. package/dist/components/interrupt/FormPrompt.svelte.d.ts +23 -0
  161. package/dist/components/interrupt/InterruptBubble.svelte +601 -0
  162. package/dist/components/interrupt/InterruptBubble.svelte.d.ts +16 -0
  163. package/dist/components/interrupt/ReviewPrompt.stories.svelte +67 -0
  164. package/dist/components/interrupt/ReviewPrompt.stories.svelte.d.ts +27 -0
  165. package/dist/components/interrupt/ReviewPrompt.svelte +861 -0
  166. package/dist/components/interrupt/ReviewPrompt.svelte.d.ts +23 -0
  167. package/dist/components/interrupt/TextInputPrompt.stories.svelte +47 -0
  168. package/dist/components/interrupt/TextInputPrompt.stories.svelte.d.ts +27 -0
  169. package/dist/components/interrupt/TextInputPrompt.svelte +346 -0
  170. package/dist/components/interrupt/TextInputPrompt.svelte.d.ts +23 -0
  171. package/dist/components/interrupt/index.d.ts +13 -0
  172. package/dist/components/interrupt/index.js +15 -0
  173. package/dist/components/layouts/MainLayout.svelte +718 -0
  174. package/dist/components/layouts/MainLayout.svelte.d.ts +62 -0
  175. package/dist/components/nodes/GatewayNode.stories.svelte +108 -0
  176. package/dist/components/nodes/GatewayNode.stories.svelte.d.ts +26 -0
  177. package/dist/components/nodes/GatewayNode.svelte +591 -0
  178. package/dist/components/nodes/GatewayNode.svelte.d.ts +15 -0
  179. package/dist/components/nodes/IdeaNode.stories.svelte +52 -0
  180. package/dist/components/nodes/IdeaNode.stories.svelte.d.ts +26 -0
  181. package/dist/components/nodes/IdeaNode.svelte +455 -0
  182. package/dist/components/nodes/IdeaNode.svelte.d.ts +24 -0
  183. package/dist/components/nodes/NotesNode.stories.svelte +76 -0
  184. package/dist/components/nodes/NotesNode.stories.svelte.d.ts +26 -0
  185. package/dist/components/nodes/NotesNode.svelte +378 -0
  186. package/dist/components/nodes/NotesNode.svelte.d.ts +24 -0
  187. package/dist/components/nodes/SimpleNode.stories.svelte +159 -0
  188. package/dist/components/nodes/SimpleNode.stories.svelte.d.ts +26 -0
  189. package/dist/components/nodes/SimpleNode.svelte +451 -0
  190. package/dist/components/nodes/SimpleNode.svelte.d.ts +25 -0
  191. package/dist/components/nodes/SquareNode.stories.svelte +82 -0
  192. package/dist/components/nodes/SquareNode.stories.svelte.d.ts +26 -0
  193. package/dist/components/nodes/SquareNode.svelte +407 -0
  194. package/dist/components/nodes/SquareNode.svelte.d.ts +25 -0
  195. package/dist/components/nodes/TerminalNode.stories.svelte +25 -0
  196. package/dist/components/nodes/TerminalNode.stories.svelte.d.ts +26 -0
  197. package/dist/components/nodes/TerminalNode.svelte +690 -0
  198. package/dist/components/nodes/TerminalNode.svelte.d.ts +25 -0
  199. package/dist/components/nodes/ToolNode.stories.svelte +189 -0
  200. package/dist/components/nodes/ToolNode.stories.svelte.d.ts +26 -0
  201. package/dist/components/nodes/ToolNode.svelte +471 -0
  202. package/dist/components/nodes/ToolNode.svelte.d.ts +36 -0
  203. package/dist/components/nodes/WorkflowNode.stories.svelte +55 -0
  204. package/dist/components/nodes/WorkflowNode.stories.svelte.d.ts +26 -0
  205. package/dist/components/nodes/WorkflowNode.svelte +571 -0
  206. package/dist/components/nodes/WorkflowNode.svelte.d.ts +15 -0
  207. package/dist/components/playground/ChatPanel.svelte +905 -0
  208. package/dist/components/playground/ChatPanel.svelte.d.ts +46 -0
  209. package/dist/components/playground/ExecutionLogs.svelte +488 -0
  210. package/dist/components/playground/ExecutionLogs.svelte.d.ts +14 -0
  211. package/dist/components/playground/InputCollector.svelte +444 -0
  212. package/dist/components/playground/InputCollector.svelte.d.ts +16 -0
  213. package/dist/components/playground/MessageBubble.stories.svelte +62 -0
  214. package/dist/components/playground/MessageBubble.stories.svelte.d.ts +27 -0
  215. package/dist/components/playground/MessageBubble.svelte +633 -0
  216. package/dist/components/playground/MessageBubble.svelte.d.ts +24 -0
  217. package/dist/components/playground/Playground.svelte +1075 -0
  218. package/dist/components/playground/Playground.svelte.d.ts +25 -0
  219. package/dist/components/playground/PlaygroundModal.svelte +220 -0
  220. package/dist/components/playground/PlaygroundModal.svelte.d.ts +25 -0
  221. package/dist/components/playground/SessionManager.svelte +538 -0
  222. package/dist/components/playground/SessionManager.svelte.d.ts +20 -0
  223. package/dist/config/agentSpecEndpoints.d.ts +70 -0
  224. package/dist/config/agentSpecEndpoints.js +65 -0
  225. package/dist/config/constants.d.ts +43 -0
  226. package/dist/config/constants.js +31 -0
  227. package/dist/config/defaultCategories.d.ts +7 -0
  228. package/dist/config/defaultCategories.js +126 -0
  229. package/dist/config/defaultPortConfig.d.ts +6 -0
  230. package/dist/config/defaultPortConfig.js +201 -0
  231. package/dist/config/endpoints.d.ts +160 -0
  232. package/dist/config/endpoints.js +146 -0
  233. package/dist/config/runtimeConfig.d.ts +47 -0
  234. package/dist/config/runtimeConfig.js +80 -0
  235. package/dist/core/index.d.ts +75 -0
  236. package/dist/core/index.js +92 -0
  237. package/dist/display/index.d.ts +29 -0
  238. package/dist/display/index.js +36 -0
  239. package/dist/editor/index.d.ts +95 -0
  240. package/dist/editor/index.js +138 -0
  241. package/dist/form/code.d.ts +101 -0
  242. package/dist/form/code.js +168 -0
  243. package/dist/form/fieldRegistry.d.ts +169 -0
  244. package/dist/form/fieldRegistry.js +152 -0
  245. package/dist/form/full.d.ts +56 -0
  246. package/dist/form/full.js +80 -0
  247. package/dist/form/index.d.ts +77 -0
  248. package/dist/form/index.js +91 -0
  249. package/dist/form/markdown.d.ts +69 -0
  250. package/dist/form/markdown.js +103 -0
  251. package/dist/helpers/nodeLayoutHelper.d.ts +14 -0
  252. package/dist/helpers/nodeLayoutHelper.js +19 -0
  253. package/dist/helpers/proximityConnect.d.ts +94 -0
  254. package/dist/helpers/proximityConnect.js +314 -0
  255. package/dist/helpers/workflowEditorHelper.d.ts +183 -0
  256. package/dist/helpers/workflowEditorHelper.js +595 -0
  257. package/dist/index.d.ts +37 -0
  258. package/dist/index.js +64 -0
  259. package/dist/mocks/app-environment.d.ts +8 -0
  260. package/dist/mocks/app-environment.js +16 -0
  261. package/dist/mocks/app-forms.d.ts +2 -0
  262. package/dist/mocks/app-forms.js +22 -0
  263. package/dist/mocks/app-navigation.d.ts +5 -0
  264. package/dist/mocks/app-navigation.js +36 -0
  265. package/dist/mocks/app-stores.d.ts +14 -0
  266. package/dist/mocks/app-stores.js +26 -0
  267. package/dist/playground/index.d.ts +131 -0
  268. package/dist/playground/index.js +172 -0
  269. package/dist/playground/mount.d.ts +203 -0
  270. package/dist/playground/mount.js +235 -0
  271. package/dist/registry/BaseRegistry.d.ts +92 -0
  272. package/dist/registry/BaseRegistry.js +124 -0
  273. package/dist/registry/builtinFormats.d.ts +23 -0
  274. package/dist/registry/builtinFormats.js +70 -0
  275. package/dist/registry/builtinNodes.d.ts +77 -0
  276. package/dist/registry/builtinNodes.js +211 -0
  277. package/dist/registry/index.d.ts +8 -0
  278. package/dist/registry/index.js +12 -0
  279. package/dist/registry/nodeComponentRegistry.d.ts +276 -0
  280. package/dist/registry/nodeComponentRegistry.js +262 -0
  281. package/dist/registry/plugin.d.ts +215 -0
  282. package/dist/registry/plugin.js +249 -0
  283. package/dist/registry/workflowFormatRegistry.d.ts +122 -0
  284. package/dist/registry/workflowFormatRegistry.js +96 -0
  285. package/dist/schema/index.d.ts +23 -0
  286. package/dist/schema/index.js +23 -0
  287. package/dist/schemas/v1/workflow.schema.json +1078 -0
  288. package/dist/services/agentSpecExecutionService.d.ts +106 -0
  289. package/dist/services/agentSpecExecutionService.js +334 -0
  290. package/dist/services/api.d.ts +115 -0
  291. package/dist/services/api.js +214 -0
  292. package/dist/services/apiVariableService.d.ts +114 -0
  293. package/dist/services/apiVariableService.js +338 -0
  294. package/dist/services/autoSaveService.d.ts +112 -0
  295. package/dist/services/autoSaveService.js +227 -0
  296. package/dist/services/categoriesApi.d.ts +14 -0
  297. package/dist/services/categoriesApi.js +49 -0
  298. package/dist/services/draftStorage.d.ts +171 -0
  299. package/dist/services/draftStorage.js +299 -0
  300. package/dist/services/dynamicSchemaService.d.ts +108 -0
  301. package/dist/services/dynamicSchemaService.js +444 -0
  302. package/dist/services/globalSave.d.ts +69 -0
  303. package/dist/services/globalSave.js +248 -0
  304. package/dist/services/historyService.d.ts +208 -0
  305. package/dist/services/historyService.js +321 -0
  306. package/dist/services/interruptService.d.ts +133 -0
  307. package/dist/services/interruptService.js +280 -0
  308. package/dist/services/nodeExecutionService.d.ts +63 -0
  309. package/dist/services/nodeExecutionService.js +266 -0
  310. package/dist/services/playgroundService.d.ts +130 -0
  311. package/dist/services/playgroundService.js +321 -0
  312. package/dist/services/portConfigApi.d.ts +14 -0
  313. package/dist/services/portConfigApi.js +54 -0
  314. package/dist/services/settingsService.d.ts +92 -0
  315. package/dist/services/settingsService.js +196 -0
  316. package/dist/services/toastService.d.ts +156 -0
  317. package/dist/services/toastService.js +265 -0
  318. package/dist/services/variableService.d.ts +141 -0
  319. package/dist/services/variableService.js +463 -0
  320. package/dist/services/workflowStorage.d.ts +37 -0
  321. package/dist/services/workflowStorage.js +116 -0
  322. package/dist/settings/index.d.ts +25 -0
  323. package/dist/settings/index.js +33 -0
  324. package/dist/stores/categoriesStore.svelte.d.ts +32 -0
  325. package/dist/stores/categoriesStore.svelte.js +77 -0
  326. package/dist/stores/editorStateMachine.svelte.d.ts +42 -0
  327. package/dist/stores/editorStateMachine.svelte.js +132 -0
  328. package/dist/stores/historyStore.svelte.d.ts +136 -0
  329. package/dist/stores/historyStore.svelte.js +207 -0
  330. package/dist/stores/interruptStore.svelte.d.ts +179 -0
  331. package/dist/stores/interruptStore.svelte.js +346 -0
  332. package/dist/stores/playgroundStore.svelte.d.ts +230 -0
  333. package/dist/stores/playgroundStore.svelte.js +515 -0
  334. package/dist/stores/portCoordinateStore.svelte.d.ts +66 -0
  335. package/dist/stores/portCoordinateStore.svelte.js +186 -0
  336. package/dist/stores/settingsStore.svelte.d.ts +158 -0
  337. package/dist/stores/settingsStore.svelte.js +544 -0
  338. package/dist/stores/workflowStore.svelte.d.ts +260 -0
  339. package/dist/stores/workflowStore.svelte.js +649 -0
  340. package/dist/stories/CanvasDecorator.svelte +49 -0
  341. package/dist/stories/CanvasDecorator.svelte.d.ts +8 -0
  342. package/dist/stories/NodeDecorator.svelte +73 -0
  343. package/dist/stories/NodeDecorator.svelte.d.ts +8 -0
  344. package/dist/stories/utils.d.ts +93 -0
  345. package/dist/stories/utils.js +122 -0
  346. package/dist/styles/base.css +1300 -0
  347. package/dist/styles/toast.css +35 -0
  348. package/dist/styles/tokens.css +475 -0
  349. package/dist/svelte-app.d.ts +150 -0
  350. package/dist/svelte-app.js +295 -0
  351. package/dist/types/agentspec.d.ts +318 -0
  352. package/dist/types/agentspec.js +48 -0
  353. package/dist/types/auth.d.ts +263 -0
  354. package/dist/types/auth.js +229 -0
  355. package/dist/types/config.d.ts +151 -0
  356. package/dist/types/config.js +7 -0
  357. package/dist/types/events.d.ts +190 -0
  358. package/dist/types/events.js +30 -0
  359. package/dist/types/index.d.ts +1234 -0
  360. package/dist/types/index.js +27 -0
  361. package/dist/types/interrupt.d.ts +390 -0
  362. package/dist/types/interrupt.js +145 -0
  363. package/dist/types/interruptState.d.ts +211 -0
  364. package/dist/types/interruptState.js +308 -0
  365. package/dist/types/playground.d.ts +351 -0
  366. package/dist/types/playground.js +95 -0
  367. package/dist/types/settings.d.ts +189 -0
  368. package/dist/types/settings.js +97 -0
  369. package/dist/types/uischema.d.ts +144 -0
  370. package/dist/types/uischema.js +51 -0
  371. package/dist/utils/colors.d.ts +288 -0
  372. package/dist/utils/colors.js +548 -0
  373. package/dist/utils/config.d.ts +37 -0
  374. package/dist/utils/config.js +226 -0
  375. package/dist/utils/connections.d.ts +125 -0
  376. package/dist/utils/connections.js +414 -0
  377. package/dist/utils/errors.d.ts +28 -0
  378. package/dist/utils/errors.js +44 -0
  379. package/dist/utils/fetchWithAuth.d.ts +25 -0
  380. package/dist/utils/fetchWithAuth.js +34 -0
  381. package/dist/utils/handleIds.d.ts +35 -0
  382. package/dist/utils/handleIds.js +58 -0
  383. package/dist/utils/handlePositioning.d.ts +31 -0
  384. package/dist/utils/handlePositioning.js +35 -0
  385. package/dist/utils/icons.d.ts +106 -0
  386. package/dist/utils/icons.js +157 -0
  387. package/dist/utils/logger.d.ts +47 -0
  388. package/dist/utils/logger.js +72 -0
  389. package/dist/utils/nodeStatus.d.ts +53 -0
  390. package/dist/utils/nodeStatus.js +183 -0
  391. package/dist/utils/nodeTypes.d.ts +117 -0
  392. package/dist/utils/nodeTypes.js +244 -0
  393. package/dist/utils/nodeWrapper.d.ts +39 -0
  394. package/dist/utils/nodeWrapper.js +62 -0
  395. package/dist/utils/performanceUtils.d.ts +30 -0
  396. package/dist/utils/performanceUtils.js +108 -0
  397. package/dist/utils/sanitize.d.ts +19 -0
  398. package/dist/utils/sanitize.js +31 -0
  399. package/dist/utils/uischema.d.ts +52 -0
  400. package/dist/utils/uischema.js +88 -0
  401. package/dist/utils/validation.d.ts +29 -0
  402. package/dist/utils/validation.js +39 -0
  403. package/package.json +292 -0
@@ -0,0 +1,116 @@
1
+ <script module>
2
+ import { defineMeta } from '@storybook/addon-svelte-csf';
3
+ import SchemaForm from './SchemaForm.svelte';
4
+ import { fn } from 'storybook/test';
5
+
6
+ const { Story } = defineMeta({
7
+ title: 'Form/SchemaForm',
8
+ component: SchemaForm,
9
+ tags: ['autodocs'],
10
+ args: {
11
+ onChange: fn(),
12
+ onSave: fn(),
13
+ onCancel: fn()
14
+ }
15
+ });
16
+ </script>
17
+
18
+ <Story
19
+ name="Simple Form"
20
+ args={{
21
+ schema: {
22
+ type: 'object',
23
+ properties: {
24
+ name: { type: 'string', title: 'Name', description: 'Enter your full name' },
25
+ age: { type: 'number', title: 'Age', minimum: 0, maximum: 120 },
26
+ active: { type: 'boolean', title: 'Active', default: true }
27
+ },
28
+ required: ['name']
29
+ },
30
+ values: { name: 'Alice', age: 30, active: true }
31
+ }}
32
+ />
33
+
34
+ <Story
35
+ name="Select Fields"
36
+ args={{
37
+ schema: {
38
+ type: 'object',
39
+ properties: {
40
+ model: {
41
+ type: 'string',
42
+ title: 'AI Model',
43
+ oneOf: [
44
+ { const: 'gpt-4', title: 'GPT-4' },
45
+ { const: 'gpt-3.5', title: 'GPT-3.5 Turbo' },
46
+ { const: 'claude-3', title: 'Claude 3' }
47
+ ]
48
+ },
49
+ temperature: {
50
+ type: 'number',
51
+ title: 'Temperature',
52
+ format: 'range',
53
+ minimum: 0,
54
+ maximum: 2,
55
+ step: 0.1,
56
+ default: 0.7
57
+ },
58
+ prompt: {
59
+ type: 'string',
60
+ title: 'System Prompt',
61
+ format: 'multiline',
62
+ description: 'The system prompt for the AI model'
63
+ }
64
+ }
65
+ },
66
+ values: { model: 'gpt-4', temperature: 0.7, prompt: 'You are a helpful assistant.' }
67
+ }}
68
+ />
69
+
70
+ <Story
71
+ name="With Actions"
72
+ args={{
73
+ schema: {
74
+ type: 'object',
75
+ properties: {
76
+ email: { type: 'string', title: 'Email' },
77
+ notifications: { type: 'boolean', title: 'Enable Notifications' }
78
+ },
79
+ required: ['email']
80
+ },
81
+ values: { email: '', notifications: true },
82
+ showActions: true,
83
+ saveLabel: 'Save Settings',
84
+ cancelLabel: 'Reset'
85
+ }}
86
+ />
87
+
88
+ <Story
89
+ name="Loading"
90
+ args={{
91
+ schema: {
92
+ type: 'object',
93
+ properties: {
94
+ name: { type: 'string', title: 'Name' }
95
+ }
96
+ },
97
+ values: { name: 'Test' },
98
+ showActions: true,
99
+ loading: true
100
+ }}
101
+ />
102
+
103
+ <Story
104
+ name="Disabled"
105
+ args={{
106
+ schema: {
107
+ type: 'object',
108
+ properties: {
109
+ name: { type: 'string', title: 'Name' },
110
+ role: { type: 'string', title: 'Role' }
111
+ }
112
+ },
113
+ values: { name: 'Admin', role: 'Super User' },
114
+ disabled: true
115
+ }}
116
+ />
@@ -0,0 +1,27 @@
1
+ export default SchemaForm;
2
+ type SchemaForm = SvelteComponent<{
3
+ [x: string]: never;
4
+ }, {
5
+ [evt: string]: CustomEvent<any>;
6
+ }, {}> & {
7
+ $$bindings?: string | undefined;
8
+ };
9
+ declare const SchemaForm: $$__sveltets_2_IsomorphicComponent<{
10
+ [x: string]: never;
11
+ }, {
12
+ [evt: string]: CustomEvent<any>;
13
+ }, {}, {}, string>;
14
+ import SchemaForm from './SchemaForm.svelte';
15
+ interface $$__sveltets_2_IsomorphicComponent<Props extends Record<string, any> = any, Events extends Record<string, any> = any, Slots extends Record<string, any> = any, Exports = {}, Bindings = string> {
16
+ new (options: import("svelte").ComponentConstructorOptions<Props>): import("svelte").SvelteComponent<Props, Events, Slots> & {
17
+ $$bindings?: Bindings;
18
+ } & Exports;
19
+ (internal: unknown, props: {
20
+ $$events?: Events;
21
+ $$slots?: Slots;
22
+ }): Exports & {
23
+ $set?: any;
24
+ $on?: any;
25
+ };
26
+ z_$$bindings?: Bindings;
27
+ }
@@ -0,0 +1,536 @@
1
+ <!--
2
+ SchemaForm Component
3
+
4
+ A standalone form generator that creates dynamic forms from JSON Schema definitions.
5
+ Designed for external use without coupling to FlowDrop workflow nodes.
6
+
7
+ Features:
8
+ - Dynamic form generation from JSON Schema
9
+ - Two-way binding with value updates via onChange callback
10
+ - Optional save/cancel action buttons
11
+ - Support for all standard JSON Schema field types
12
+ - Accessible form controls with ARIA attributes
13
+
14
+ @example
15
+ ```svelte
16
+ <script lang="ts">
17
+ import { SchemaForm } from "flowdrop";
18
+ import type { ConfigSchema } from "flowdrop";
19
+
20
+ const schema: ConfigSchema = {
21
+ type: "object",
22
+ properties: {
23
+ name: { type: "string", title: "Name", description: "Enter your name" },
24
+ age: { type: "number", title: "Age", minimum: 0, maximum: 120 },
25
+ active: { type: "boolean", title: "Active", default: true }
26
+ },
27
+ required: ["name"]
28
+ };
29
+
30
+ let values = $state({ name: "", age: 25, active: true });
31
+
32
+ function handleChange(newValues: Record<string, unknown>) {
33
+ values = newValues;
34
+ }
35
+
36
+ function handleSave(finalValues: Record<string, unknown>) {
37
+ // Process saved form values
38
+ }
39
+
40
+ function handleCancel() {
41
+ // Handle form cancellation
42
+ }
43
+ </script>
44
+
45
+ <SchemaForm
46
+ {schema}
47
+ {values}
48
+ onChange={handleChange}
49
+ showActions={true}
50
+ onSave={handleSave}
51
+ onCancel={handleCancel}
52
+ />
53
+ ```
54
+ -->
55
+
56
+ <script lang="ts">
57
+ import { setContext } from 'svelte';
58
+ import Icon from '@iconify/svelte';
59
+ import type { ConfigSchema, AuthProvider } from '../types/index.js';
60
+ import type { UISchemaElement } from '../types/uischema.js';
61
+ import { FormField } from './form/index.js';
62
+ import FormUISchemaRenderer from './form/FormUISchemaRenderer.svelte';
63
+ import type { FieldSchema } from './form/index.js';
64
+
65
+ /**
66
+ * Props interface for SchemaForm component
67
+ */
68
+ interface Props {
69
+ /**
70
+ * JSON Schema definition for the form.
71
+ * Should follow JSON Schema draft-07 format with type: "object".
72
+ */
73
+ schema: ConfigSchema;
74
+
75
+ /**
76
+ * Optional UI Schema that controls field layout and grouping.
77
+ * When provided, fields render according to the UISchema tree structure.
78
+ * When absent, fields render in flat order from schema.properties.
79
+ * @see https://jsonforms.io/docs/uischema
80
+ */
81
+ uiSchema?: UISchemaElement;
82
+
83
+ /**
84
+ * Current form values as key-value pairs.
85
+ * Keys should correspond to properties defined in the schema.
86
+ */
87
+ values?: Record<string, unknown>;
88
+
89
+ /**
90
+ * Callback fired whenever any field value changes.
91
+ * Receives the complete updated values object.
92
+ * @param values - Updated form values
93
+ */
94
+ onChange?: (values: Record<string, unknown>) => void;
95
+
96
+ /**
97
+ * Whether to display Save and Cancel action buttons.
98
+ * @default false
99
+ */
100
+ showActions?: boolean;
101
+
102
+ /**
103
+ * Label for the save button.
104
+ * @default "Save"
105
+ */
106
+ saveLabel?: string;
107
+
108
+ /**
109
+ * Label for the cancel button.
110
+ * @default "Cancel"
111
+ */
112
+ cancelLabel?: string;
113
+
114
+ /**
115
+ * Callback fired when the Save button is clicked.
116
+ * Receives the final form values.
117
+ * @param values - Final form values
118
+ */
119
+ onSave?: (values: Record<string, unknown>) => void;
120
+
121
+ /**
122
+ * Callback fired when the Cancel button is clicked.
123
+ */
124
+ onCancel?: () => void;
125
+
126
+ /**
127
+ * Whether the form is in a loading state.
128
+ * Disables all inputs when true.
129
+ * @default false
130
+ */
131
+ loading?: boolean;
132
+
133
+ /**
134
+ * Whether the form is disabled.
135
+ * @default false
136
+ */
137
+ disabled?: boolean;
138
+
139
+ /**
140
+ * Custom CSS class for the form container.
141
+ */
142
+ class?: string;
143
+
144
+ /**
145
+ * Authentication provider for autocomplete fields.
146
+ * Used to add authentication headers when fetching suggestions from callback URLs.
147
+ */
148
+ authProvider?: AuthProvider;
149
+
150
+ /**
151
+ * Base URL for resolving relative autocomplete callback URLs.
152
+ * @default ""
153
+ */
154
+ baseUrl?: string;
155
+ }
156
+
157
+ let {
158
+ schema,
159
+ uiSchema,
160
+ values = {},
161
+ onChange,
162
+ showActions = false,
163
+ saveLabel = 'Save',
164
+ cancelLabel = 'Cancel',
165
+ onSave,
166
+ onCancel,
167
+ loading = false,
168
+ disabled = false,
169
+ class: className = '',
170
+ authProvider,
171
+ baseUrl = ''
172
+ }: Props = $props();
173
+
174
+ // Set context for child components (e.g., FormAutocomplete)
175
+ // Use getter functions to ensure child components always get the current prop value,
176
+ // even if the prop changes after initial mount
177
+ setContext<() => AuthProvider | undefined>('flowdrop:getAuthProvider', () => authProvider);
178
+ setContext<() => string>('flowdrop:getBaseUrl', () => baseUrl);
179
+
180
+ /**
181
+ * Reference to this component's form element
182
+ */
183
+ let formRef: HTMLFormElement | undefined = $state();
184
+
185
+ /**
186
+ * Internal reactive state for form values
187
+ */
188
+ let formValues = $state<Record<string, unknown>>({});
189
+
190
+ /**
191
+ * Initialize form values when schema or values change
192
+ * Merges default values from schema with provided values
193
+ */
194
+ $effect(() => {
195
+ if (schema?.properties) {
196
+ const mergedValues: Record<string, unknown> = {};
197
+ Object.entries(schema.properties).forEach(([key, field]) => {
198
+ const fieldConfig = field as Record<string, unknown>;
199
+ // Use provided value if available, otherwise use schema default
200
+ mergedValues[key] = values[key] !== undefined ? values[key] : fieldConfig.default;
201
+ });
202
+ formValues = mergedValues;
203
+ }
204
+ });
205
+
206
+ /**
207
+ * Check if a field is required based on schema
208
+ * @param key - Field key to check
209
+ * @returns Whether the field is required
210
+ */
211
+ function isFieldRequired(key: string): boolean {
212
+ if (!schema?.required) {
213
+ return false;
214
+ }
215
+ return schema.required.includes(key);
216
+ }
217
+
218
+ /**
219
+ * Handle field value changes from FormField components
220
+ * Updates internal state and fires onChange callback
221
+ * @param key - Field key that changed
222
+ * @param value - New field value
223
+ */
224
+ function handleFieldChange(key: string, value: unknown): void {
225
+ formValues[key] = value;
226
+
227
+ // Notify parent of the change
228
+ if (onChange) {
229
+ onChange({ ...formValues });
230
+ }
231
+ }
232
+
233
+ /**
234
+ * Handle form submission
235
+ * Collects all form values and fires onSave callback
236
+ */
237
+ function handleSave(): void {
238
+ if (loading || disabled) {
239
+ return;
240
+ }
241
+
242
+ // Collect all form values including hidden fields
243
+ const updatedValues: Record<string, unknown> = { ...formValues };
244
+
245
+ if (formRef) {
246
+ const inputs = formRef.querySelectorAll('input, select, textarea');
247
+ inputs.forEach((input: Element) => {
248
+ const inputEl = input as HTMLInputElement | HTMLSelectElement | HTMLTextAreaElement;
249
+ if (inputEl.id) {
250
+ if (inputEl instanceof HTMLInputElement && inputEl.type === 'checkbox') {
251
+ updatedValues[inputEl.id] = inputEl.checked;
252
+ } else if (
253
+ inputEl instanceof HTMLInputElement &&
254
+ (inputEl.type === 'number' || inputEl.type === 'range')
255
+ ) {
256
+ updatedValues[inputEl.id] = inputEl.value ? Number(inputEl.value) : inputEl.value;
257
+ } else if (inputEl instanceof HTMLInputElement && inputEl.type === 'hidden') {
258
+ // Parse hidden field values that might be JSON
259
+ try {
260
+ const parsed = JSON.parse(inputEl.value);
261
+ updatedValues[inputEl.id] = parsed;
262
+ } catch {
263
+ // If not JSON, use raw value
264
+ updatedValues[inputEl.id] = inputEl.value;
265
+ }
266
+ } else {
267
+ updatedValues[inputEl.id] = inputEl.value;
268
+ }
269
+ }
270
+ });
271
+ }
272
+
273
+ // Preserve hidden field values from original values if not collected from form
274
+ if (values && schema?.properties) {
275
+ Object.entries(schema.properties).forEach(
276
+ ([key, property]: [string, Record<string, unknown>]) => {
277
+ if (property.format === 'hidden' && !(key in updatedValues) && key in values) {
278
+ updatedValues[key] = values[key];
279
+ }
280
+ }
281
+ );
282
+ }
283
+
284
+ if (onSave) {
285
+ onSave(updatedValues);
286
+ }
287
+ }
288
+
289
+ /**
290
+ * Handle cancel action
291
+ */
292
+ function handleCancel(): void {
293
+ if (onCancel) {
294
+ onCancel();
295
+ }
296
+ }
297
+
298
+ /**
299
+ * Convert ConfigProperty to FieldSchema for FormField component
300
+ * @param property - Schema property definition
301
+ * @returns FieldSchema compatible with FormField
302
+ */
303
+ function toFieldSchema(property: Record<string, unknown>): FieldSchema {
304
+ return property as FieldSchema;
305
+ }
306
+ </script>
307
+
308
+ {#if schema?.properties}
309
+ <form
310
+ bind:this={formRef}
311
+ class="schema-form {className}"
312
+ class:schema-form--loading={loading}
313
+ class:schema-form--disabled={disabled}
314
+ onsubmit={(e) => {
315
+ e.preventDefault();
316
+ handleSave();
317
+ }}
318
+ >
319
+ <div class="schema-form__fields">
320
+ {#if uiSchema}
321
+ <FormUISchemaRenderer
322
+ element={uiSchema}
323
+ {schema}
324
+ values={formValues}
325
+ requiredFields={schema.required ?? []}
326
+ onFieldChange={handleFieldChange}
327
+ {toFieldSchema}
328
+ />
329
+ {:else}
330
+ {#each Object.entries(schema.properties) as [key, field], index (key)}
331
+ {@const fieldSchema = toFieldSchema(field as Record<string, unknown>)}
332
+ {@const required = isFieldRequired(key)}
333
+
334
+ <FormField
335
+ fieldKey={key}
336
+ schema={fieldSchema}
337
+ value={formValues[key]}
338
+ {required}
339
+ animationIndex={index}
340
+ onChange={(val) => handleFieldChange(key, val)}
341
+ />
342
+ {/each}
343
+ {/if}
344
+ </div>
345
+
346
+ {#if showActions}
347
+ <div class="schema-form__footer">
348
+ <button
349
+ type="button"
350
+ class="schema-form__button schema-form__button--secondary"
351
+ onclick={handleCancel}
352
+ disabled={loading}
353
+ >
354
+ <Icon icon="heroicons:x-mark" class="schema-form__button-icon" />
355
+ <span>{cancelLabel}</span>
356
+ </button>
357
+ <button
358
+ type="submit"
359
+ class="schema-form__button schema-form__button--primary"
360
+ disabled={loading || disabled}
361
+ >
362
+ {#if loading}
363
+ <span class="schema-form__button-spinner"></span>
364
+ {:else}
365
+ <Icon icon="heroicons:check" class="schema-form__button-icon" />
366
+ {/if}
367
+ <span>{saveLabel}</span>
368
+ </button>
369
+ </div>
370
+ {/if}
371
+ </form>
372
+ {:else}
373
+ <div class="schema-form__empty">
374
+ <div class="schema-form__empty-icon">
375
+ <Icon icon="heroicons:document-text" />
376
+ </div>
377
+ <p class="schema-form__empty-text">No schema properties defined.</p>
378
+ </div>
379
+ {/if}
380
+
381
+ <style>
382
+ /* ============================================
383
+ SCHEMA FORM - Container Styles
384
+ ============================================ */
385
+
386
+ .schema-form {
387
+ display: flex;
388
+ flex-direction: column;
389
+ gap: var(--fd-space-3xl);
390
+ }
391
+
392
+ .schema-form--loading,
393
+ .schema-form--disabled {
394
+ opacity: 0.7;
395
+ pointer-events: none;
396
+ }
397
+
398
+ .schema-form__fields {
399
+ display: flex;
400
+ flex-direction: column;
401
+ gap: var(--fd-space-2xl);
402
+ }
403
+
404
+ /* ============================================
405
+ FOOTER ACTIONS
406
+ ============================================ */
407
+
408
+ .schema-form__footer {
409
+ display: flex;
410
+ gap: var(--fd-space-md);
411
+ justify-content: flex-end;
412
+ padding-top: var(--fd-space-xl);
413
+ border-top: 1px solid var(--fd-border-muted);
414
+ margin-top: var(--fd-space-xs);
415
+ }
416
+
417
+ .schema-form__button {
418
+ display: inline-flex;
419
+ align-items: center;
420
+ justify-content: center;
421
+ gap: var(--fd-space-xs);
422
+ padding: 0.625rem var(--fd-space-xl);
423
+ border-radius: var(--fd-radius-lg);
424
+ font-size: var(--fd-text-sm);
425
+ font-weight: 600;
426
+ font-family: inherit;
427
+ cursor: pointer;
428
+ transition: all var(--fd-transition-normal);
429
+ border: 1px solid transparent;
430
+ min-height: 2.5rem;
431
+ }
432
+
433
+ .schema-form__button:disabled {
434
+ opacity: 0.5;
435
+ cursor: not-allowed;
436
+ }
437
+
438
+ .schema-form__button :global(svg) {
439
+ width: 1rem;
440
+ height: 1rem;
441
+ flex-shrink: 0;
442
+ }
443
+
444
+ .schema-form__button--secondary {
445
+ background-color: var(--fd-background);
446
+ border-color: var(--fd-border);
447
+ color: var(--fd-foreground);
448
+ box-shadow: var(--fd-shadow-sm);
449
+ }
450
+
451
+ .schema-form__button--secondary:hover:not(:disabled) {
452
+ background-color: var(--fd-muted);
453
+ border-color: var(--fd-border-strong);
454
+ color: var(--fd-foreground);
455
+ }
456
+
457
+ .schema-form__button--secondary:focus-visible {
458
+ outline: none;
459
+ box-shadow: 0 0 0 3px rgba(59, 130, 246, 0.2);
460
+ }
461
+
462
+ .schema-form__button--primary {
463
+ background: linear-gradient(135deg, var(--fd-primary) 0%, var(--fd-primary-hover) 100%);
464
+ color: var(--fd-primary-foreground);
465
+ box-shadow:
466
+ 0 1px 3px rgba(59, 130, 246, 0.3),
467
+ inset 0 1px 0 rgba(255, 255, 255, 0.1);
468
+ }
469
+
470
+ .schema-form__button--primary:hover:not(:disabled) {
471
+ background: linear-gradient(135deg, var(--fd-primary-hover) 0%, var(--fd-primary-hover) 100%);
472
+ box-shadow:
473
+ 0 4px 12px rgba(59, 130, 246, 0.35),
474
+ inset 0 1px 0 rgba(255, 255, 255, 0.1);
475
+ transform: translateY(-1px);
476
+ }
477
+
478
+ .schema-form__button--primary:active:not(:disabled) {
479
+ transform: translateY(0);
480
+ }
481
+
482
+ .schema-form__button--primary:focus-visible {
483
+ outline: none;
484
+ box-shadow:
485
+ 0 0 0 3px rgba(59, 130, 246, 0.4),
486
+ 0 4px 12px rgba(59, 130, 246, 0.35);
487
+ }
488
+
489
+ .schema-form__button-spinner {
490
+ width: 1rem;
491
+ height: 1rem;
492
+ border: 2px solid rgba(255, 255, 255, 0.3);
493
+ border-top-color: white;
494
+ border-radius: 50%;
495
+ animation: schema-form-spin 0.6s linear infinite;
496
+ }
497
+
498
+ @keyframes schema-form-spin {
499
+ to {
500
+ transform: rotate(360deg);
501
+ }
502
+ }
503
+
504
+ /* ============================================
505
+ EMPTY STATE
506
+ ============================================ */
507
+
508
+ .schema-form__empty {
509
+ display: flex;
510
+ flex-direction: column;
511
+ align-items: center;
512
+ justify-content: center;
513
+ padding: var(--fd-space-6xl) var(--fd-space-3xl);
514
+ text-align: center;
515
+ }
516
+
517
+ .schema-form__empty-icon {
518
+ width: 3rem;
519
+ height: 3rem;
520
+ margin-bottom: var(--fd-space-xl);
521
+ color: var(--fd-border);
522
+ }
523
+
524
+ .schema-form__empty-icon :global(svg) {
525
+ width: 100%;
526
+ height: 100%;
527
+ }
528
+
529
+ .schema-form__empty-text {
530
+ margin: 0;
531
+ font-size: var(--fd-text-sm);
532
+ color: var(--fd-muted-foreground);
533
+ font-style: italic;
534
+ line-height: 1.5;
535
+ }
536
+ </style>