@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,136 @@
1
+ <!--
2
+ FormUISchemaRenderer Component
3
+ Recursively renders UISchema elements: VerticalLayout, Group, and Control.
4
+
5
+ This component bridges the UISchema tree and the existing FormField components.
6
+ It resolves Control scopes to property keys and delegates field rendering to FormField.
7
+
8
+ Rendering logic:
9
+ - Control -> resolve scope to key, render FormField
10
+ - VerticalLayout -> vertical flex container with recursive children
11
+ - Group -> FormFieldset wrapping recursive children
12
+ -->
13
+
14
+ <script lang="ts">
15
+ import type { UISchemaElement } from '../../types/uischema.js';
16
+ import type { ConfigSchema, WorkflowNode, WorkflowEdge, AuthProvider } from '../../types/index.js';
17
+ import type { FieldSchema } from './types.js';
18
+ import { resolveScopeToKey } from '../../utils/uischema.js';
19
+ import FormField from './FormField.svelte';
20
+ import FormFieldset from './FormFieldset.svelte';
21
+ import Self from './FormUISchemaRenderer.svelte';
22
+
23
+ interface Props {
24
+ /** The UISchema element to render */
25
+ element: UISchemaElement;
26
+ /** The data schema (for resolving field definitions) */
27
+ schema: ConfigSchema;
28
+ /** Current form values */
29
+ values: Record<string, unknown>;
30
+ /** Required field keys from the schema */
31
+ requiredFields?: string[];
32
+ /** Base animation index for staggered animations */
33
+ animationIndexBase?: number;
34
+ /** Callback when a field value changes */
35
+ onFieldChange: (key: string, value: unknown) => void;
36
+ /** Convert a property to FieldSchema (handles template variable injection etc.) */
37
+ toFieldSchema: (property: Record<string, unknown>) => FieldSchema;
38
+ /** Current workflow node (optional, passed through to FormField) */
39
+ node?: WorkflowNode;
40
+ /** All workflow nodes (optional, passed through to FormField) */
41
+ nodes?: WorkflowNode[];
42
+ /** All workflow edges (optional, passed through to FormField) */
43
+ edges?: WorkflowEdge[];
44
+ /** Workflow ID (optional, passed through to FormField) */
45
+ workflowId?: string;
46
+ /** Auth provider (optional, passed through to FormField) */
47
+ authProvider?: AuthProvider;
48
+ }
49
+
50
+ let {
51
+ element,
52
+ schema,
53
+ values,
54
+ requiredFields = [],
55
+ animationIndexBase = 0,
56
+ onFieldChange,
57
+ toFieldSchema,
58
+ node,
59
+ nodes,
60
+ edges,
61
+ workflowId,
62
+ authProvider
63
+ }: Props = $props();
64
+
65
+ function isRequired(key: string): boolean {
66
+ return requiredFields.includes(key);
67
+ }
68
+ </script>
69
+
70
+ {#if element.type === 'Control'}
71
+ {@const key = resolveScopeToKey(element.scope)}
72
+ {#if key && schema.properties[key]}
73
+ {@const fieldSchema = toFieldSchema(schema.properties[key] as Record<string, unknown>)}
74
+ <FormField
75
+ fieldKey={key}
76
+ schema={fieldSchema}
77
+ value={values[key]}
78
+ required={isRequired(key)}
79
+ animationIndex={animationIndexBase}
80
+ {node}
81
+ {nodes}
82
+ {edges}
83
+ {workflowId}
84
+ {authProvider}
85
+ onChange={(val) => onFieldChange(key, val)}
86
+ />
87
+ {/if}
88
+ {:else if element.type === 'VerticalLayout'}
89
+ <div class="form-uischema-layout form-uischema-layout--vertical">
90
+ {#each element.elements as child, idx (idx)}
91
+ <Self
92
+ element={child}
93
+ {schema}
94
+ {values}
95
+ {requiredFields}
96
+ animationIndexBase={animationIndexBase + idx}
97
+ {onFieldChange}
98
+ {toFieldSchema}
99
+ {node}
100
+ {nodes}
101
+ {edges}
102
+ {workflowId}
103
+ {authProvider}
104
+ />
105
+ {/each}
106
+ </div>
107
+ {:else if element.type === 'Group'}
108
+ <FormFieldset group={element}>
109
+ <div class="form-uischema-layout form-uischema-layout--vertical">
110
+ {#each element.elements as child, idx (idx)}
111
+ <Self
112
+ element={child}
113
+ {schema}
114
+ {values}
115
+ {requiredFields}
116
+ animationIndexBase={animationIndexBase + idx}
117
+ {onFieldChange}
118
+ {toFieldSchema}
119
+ {node}
120
+ {nodes}
121
+ {edges}
122
+ {workflowId}
123
+ {authProvider}
124
+ />
125
+ {/each}
126
+ </div>
127
+ </FormFieldset>
128
+ {/if}
129
+
130
+ <style>
131
+ .form-uischema-layout--vertical {
132
+ display: flex;
133
+ flex-direction: column;
134
+ gap: var(--fd-space-2xl);
135
+ }
136
+ </style>
@@ -0,0 +1,32 @@
1
+ import type { UISchemaElement } from '../../types/uischema.js';
2
+ import type { ConfigSchema, WorkflowNode, WorkflowEdge, AuthProvider } from '../../types/index.js';
3
+ import type { FieldSchema } from './types.js';
4
+ interface Props {
5
+ /** The UISchema element to render */
6
+ element: UISchemaElement;
7
+ /** The data schema (for resolving field definitions) */
8
+ schema: ConfigSchema;
9
+ /** Current form values */
10
+ values: Record<string, unknown>;
11
+ /** Required field keys from the schema */
12
+ requiredFields?: string[];
13
+ /** Base animation index for staggered animations */
14
+ animationIndexBase?: number;
15
+ /** Callback when a field value changes */
16
+ onFieldChange: (key: string, value: unknown) => void;
17
+ /** Convert a property to FieldSchema (handles template variable injection etc.) */
18
+ toFieldSchema: (property: Record<string, unknown>) => FieldSchema;
19
+ /** Current workflow node (optional, passed through to FormField) */
20
+ node?: WorkflowNode;
21
+ /** All workflow nodes (optional, passed through to FormField) */
22
+ nodes?: WorkflowNode[];
23
+ /** All workflow edges (optional, passed through to FormField) */
24
+ edges?: WorkflowEdge[];
25
+ /** Workflow ID (optional, passed through to FormField) */
26
+ workflowId?: string;
27
+ /** Auth provider (optional, passed through to FormField) */
28
+ authProvider?: AuthProvider;
29
+ }
30
+ declare const FormUISchemaRenderer: import("svelte").Component<Props, {}, "">;
31
+ type FormUISchemaRenderer = ReturnType<typeof FormUISchemaRenderer>;
32
+ export default FormUISchemaRenderer;
@@ -0,0 +1,50 @@
1
+ /**
2
+ * Form Components Module
3
+ *
4
+ * Modular form components for dynamic form rendering based on JSON Schema.
5
+ * Designed for extensibility to support complex types like arrays and objects.
6
+ *
7
+ * @module form
8
+ *
9
+ * @example
10
+ * ```svelte
11
+ * <script>
12
+ * import { FormField } from "./";
13
+ * import type { FieldSchema } from "./";
14
+ *
15
+ * const schema: FieldSchema = {
16
+ * type: "string",
17
+ * title: "Name",
18
+ * description: "Enter your name"
19
+ * };
20
+ *
21
+ * let value = $state("");
22
+ * </script>
23
+ *
24
+ * <FormField
25
+ * fieldKey="name"
26
+ * {schema}
27
+ * {value}
28
+ * onChange={(v) => value = v}
29
+ * />
30
+ * ```
31
+ */
32
+ export type { FieldType, FieldFormat, FieldOption, OneOfItem, BaseFieldProps, TextFieldProps, TextareaFieldProps, NumberFieldProps, ToggleFieldProps, RangeFieldProps, SelectFieldProps, CheckboxGroupFieldProps, ArrayFieldProps, CodeEditorFieldProps, MarkdownEditorFieldProps, TemplateEditorFieldProps, AutocompleteFieldProps, FieldSchema, FormFieldFactoryProps, FormFieldWrapperProps, SchemaFormProps, AutocompleteConfig } from './types.js';
33
+ export { isFieldOptionArray, isOneOfArray, oneOfToOptions, normalizeOptions, getSchemaOptions } from './types.js';
34
+ export { default as FormField } from './FormField.svelte';
35
+ export { default as FormFieldWrapper } from './FormFieldWrapper.svelte';
36
+ export { default as FormTextField } from './FormTextField.svelte';
37
+ export { default as FormTextarea } from './FormTextarea.svelte';
38
+ export { default as FormNumberField } from './FormNumberField.svelte';
39
+ export { default as FormRangeField } from './FormRangeField.svelte';
40
+ export { default as FormToggle } from './FormToggle.svelte';
41
+ export { default as FormSelect } from './FormSelect.svelte';
42
+ export { default as FormCheckboxGroup } from './FormCheckboxGroup.svelte';
43
+ export { default as FormArray } from './FormArray.svelte';
44
+ export { default as FormCodeEditor } from './FormCodeEditor.svelte';
45
+ export { default as FormMarkdownEditor } from './FormMarkdownEditor.svelte';
46
+ export { default as FormTemplateEditor } from './FormTemplateEditor.svelte';
47
+ export { default as FormAutocomplete } from './FormAutocomplete.svelte';
48
+ export { default as FormFieldset } from './FormFieldset.svelte';
49
+ export { default as FormUISchemaRenderer } from './FormUISchemaRenderer.svelte';
50
+ export { createTemplateAutocomplete } from './templateAutocomplete.js';
@@ -0,0 +1,54 @@
1
+ /**
2
+ * Form Components Module
3
+ *
4
+ * Modular form components for dynamic form rendering based on JSON Schema.
5
+ * Designed for extensibility to support complex types like arrays and objects.
6
+ *
7
+ * @module form
8
+ *
9
+ * @example
10
+ * ```svelte
11
+ * <script>
12
+ * import { FormField } from "./";
13
+ * import type { FieldSchema } from "./";
14
+ *
15
+ * const schema: FieldSchema = {
16
+ * type: "string",
17
+ * title: "Name",
18
+ * description: "Enter your name"
19
+ * };
20
+ *
21
+ * let value = $state("");
22
+ * </script>
23
+ *
24
+ * <FormField
25
+ * fieldKey="name"
26
+ * {schema}
27
+ * {value}
28
+ * onChange={(v) => value = v}
29
+ * />
30
+ * ```
31
+ */
32
+ export { isFieldOptionArray, isOneOfArray, oneOfToOptions, normalizeOptions, getSchemaOptions } from './types.js';
33
+ // Main factory component
34
+ export { default as FormField } from './FormField.svelte';
35
+ // Wrapper component
36
+ export { default as FormFieldWrapper } from './FormFieldWrapper.svelte';
37
+ // Individual field components
38
+ export { default as FormTextField } from './FormTextField.svelte';
39
+ export { default as FormTextarea } from './FormTextarea.svelte';
40
+ export { default as FormNumberField } from './FormNumberField.svelte';
41
+ export { default as FormRangeField } from './FormRangeField.svelte';
42
+ export { default as FormToggle } from './FormToggle.svelte';
43
+ export { default as FormSelect } from './FormSelect.svelte';
44
+ export { default as FormCheckboxGroup } from './FormCheckboxGroup.svelte';
45
+ export { default as FormArray } from './FormArray.svelte';
46
+ export { default as FormCodeEditor } from './FormCodeEditor.svelte';
47
+ export { default as FormMarkdownEditor } from './FormMarkdownEditor.svelte';
48
+ export { default as FormTemplateEditor } from './FormTemplateEditor.svelte';
49
+ export { default as FormAutocomplete } from './FormAutocomplete.svelte';
50
+ // UISchema rendering components
51
+ export { default as FormFieldset } from './FormFieldset.svelte';
52
+ export { default as FormUISchemaRenderer } from './FormUISchemaRenderer.svelte';
53
+ // Template autocomplete utilities
54
+ export { createTemplateAutocomplete } from './templateAutocomplete.js';
@@ -0,0 +1,29 @@
1
+ /**
2
+ * Template Variable Autocomplete Extension for CodeMirror
3
+ * Provides autocomplete suggestions for {{ variable }} syntax in template editors.
4
+ *
5
+ * Features:
6
+ * - Triggers on `{{` to show top-level variables
7
+ * - Triggers on `.` to show child properties for objects
8
+ * - Triggers on `[` to show array index options
9
+ * - Supports deep nesting (e.g., `user.address.city`)
10
+ *
11
+ * @module components/form/templateAutocomplete
12
+ */
13
+ import type { Extension } from '@codemirror/state';
14
+ import type { VariableSchema } from '../../types/index.js';
15
+ /**
16
+ * Creates a CodeMirror extension for template variable autocomplete.
17
+ *
18
+ * @param schema - The variable schema containing available variables
19
+ * @returns A CodeMirror extension that provides autocomplete
20
+ *
21
+ * @example
22
+ * ```typescript
23
+ * const extensions = [
24
+ * // ... other extensions
25
+ * createTemplateAutocomplete(variableSchema)
26
+ * ];
27
+ * ```
28
+ */
29
+ export declare function createTemplateAutocomplete(schema: VariableSchema): Extension;
@@ -0,0 +1,254 @@
1
+ /**
2
+ * Template Variable Autocomplete Extension for CodeMirror
3
+ * Provides autocomplete suggestions for {{ variable }} syntax in template editors.
4
+ *
5
+ * Features:
6
+ * - Triggers on `{{` to show top-level variables
7
+ * - Triggers on `.` to show child properties for objects
8
+ * - Triggers on `[` to show array index options
9
+ * - Supports deep nesting (e.g., `user.address.city`)
10
+ *
11
+ * @module components/form/templateAutocomplete
12
+ */
13
+ import { autocompletion } from '@codemirror/autocomplete';
14
+ import { getChildVariables, getArrayIndexSuggestions, isArrayVariable, hasChildren } from '../../services/variableService.js';
15
+ /**
16
+ * Icon type hints for different variable types in autocomplete dropdown.
17
+ */
18
+ const TYPE_ICONS = {
19
+ string: '𝑆',
20
+ number: '#',
21
+ integer: '#',
22
+ float: '#',
23
+ boolean: '☑',
24
+ array: '[]',
25
+ object: '{}',
26
+ mixed: '⋯'
27
+ };
28
+ /**
29
+ * Extracts the current variable path being typed inside {{ }}.
30
+ * Returns null if cursor is not inside a template expression.
31
+ *
32
+ * @param text - The full document text
33
+ * @param pos - Current cursor position
34
+ * @returns Object with the path and start position, or null
35
+ *
36
+ * @example
37
+ * For text "Hello {{ user.name }}" with cursor after "user."
38
+ * Returns { path: "user.", startPos: 9 }
39
+ */
40
+ function extractVariablePath(text, pos) {
41
+ // Look backwards from cursor to find the opening {{
42
+ let openBracePos = -1;
43
+ let searchPos = pos - 1;
44
+ while (searchPos >= 0) {
45
+ // Check for opening {{
46
+ if (text[searchPos] === '{' && searchPos > 0 && text[searchPos - 1] === '{') {
47
+ openBracePos = searchPos - 1;
48
+ break;
49
+ }
50
+ // Check for closing }} - means we're outside an expression
51
+ if (text[searchPos] === '}' && searchPos > 0 && text[searchPos - 1] === '}') {
52
+ return null;
53
+ }
54
+ searchPos--;
55
+ }
56
+ if (openBracePos === -1) {
57
+ return null;
58
+ }
59
+ // Check if there's a closing }} after cursor (still inside expression)
60
+ const afterCursor = text.slice(pos);
61
+ const closingMatch = afterCursor.match(/^\s*\}\}/);
62
+ const hasClosing = closingMatch !== null;
63
+ // Extract the content between {{ and cursor
64
+ const contentStart = openBracePos + 2;
65
+ const content = text.slice(contentStart, pos).trimStart();
66
+ return {
67
+ path: content,
68
+ startPos: contentStart +
69
+ (text.slice(contentStart, pos).length - text.slice(contentStart, pos).trimStart().length),
70
+ isInsideExpression: true
71
+ };
72
+ }
73
+ /**
74
+ * Determines the completion type based on the current input.
75
+ *
76
+ * @param path - The current variable path being typed
77
+ * @returns The type of completion to provide
78
+ */
79
+ function getCompletionType(path) {
80
+ // Empty or only whitespace - show top-level variables
81
+ if (path.trim() === '') {
82
+ return { type: 'top-level' };
83
+ }
84
+ // Ends with [ - show array indices
85
+ if (path.endsWith('[')) {
86
+ const parentPath = path.slice(0, -1);
87
+ return { type: 'array-index', parentPath };
88
+ }
89
+ // Ends with . - show child properties
90
+ if (path.endsWith('.')) {
91
+ const parentPath = path.slice(0, -1);
92
+ return { type: 'property', parentPath };
93
+ }
94
+ // Otherwise, we're typing a variable name - show matching options
95
+ const lastDotIndex = path.lastIndexOf('.');
96
+ const lastBracketIndex = path.lastIndexOf('[');
97
+ const lastSeparator = Math.max(lastDotIndex, lastBracketIndex);
98
+ if (lastSeparator === -1) {
99
+ // Typing at top level
100
+ return { type: 'top-level' };
101
+ }
102
+ // Extract parent path based on separator
103
+ if (lastDotIndex > lastBracketIndex) {
104
+ // Last separator was a dot
105
+ return { type: 'property', parentPath: path.slice(0, lastDotIndex) };
106
+ }
107
+ else {
108
+ // Last separator was a bracket
109
+ return { type: 'array-index', parentPath: path.slice(0, lastBracketIndex) };
110
+ }
111
+ }
112
+ /**
113
+ * Converts a TemplateVariable to a CodeMirror Completion object.
114
+ *
115
+ * @param variable - The template variable
116
+ * @param prefix - Prefix to add to the completion label
117
+ * @returns A CodeMirror Completion object
118
+ */
119
+ function variableToCompletion(variable, prefix = '') {
120
+ const icon = TYPE_ICONS[variable.type] ?? TYPE_ICONS.mixed;
121
+ const hasChildProps = variable.properties && Object.keys(variable.properties).length > 0;
122
+ const isArray = variable.type === 'array';
123
+ // Add indicator if variable can be drilled into
124
+ let suffix = '';
125
+ if (hasChildProps)
126
+ suffix = '.';
127
+ else if (isArray)
128
+ suffix = '[';
129
+ return {
130
+ label: `${prefix}${variable.name}`,
131
+ displayLabel: `${icon} ${variable.label ?? variable.name}${suffix ? ' ' + suffix : ''}`,
132
+ detail: variable.type,
133
+ info: variable.description,
134
+ type: 'variable',
135
+ boost: hasChildProps || isArray ? 1 : 0 // Boost drillable variables
136
+ };
137
+ }
138
+ /**
139
+ * Creates the completion source function for template variables.
140
+ *
141
+ * @param schema - The variable schema containing available variables
142
+ * @returns A completion source function for CodeMirror
143
+ */
144
+ function createTemplateCompletionSource(schema) {
145
+ return (context) => {
146
+ const { state, pos } = context;
147
+ const text = state.doc.toString();
148
+ // Check if we're inside a {{ }} expression
149
+ const pathInfo = extractVariablePath(text, pos);
150
+ if (!pathInfo) {
151
+ // Check if user just typed {{
152
+ const beforeCursor = text.slice(Math.max(0, pos - 2), pos);
153
+ if (beforeCursor === '{{') {
154
+ // Show top-level variables
155
+ const options = Object.values(schema.variables).map((v) => variableToCompletion(v));
156
+ return {
157
+ from: pos,
158
+ options,
159
+ validFor: /^[\w.[\]]*$/
160
+ };
161
+ }
162
+ return null;
163
+ }
164
+ const { path, startPos } = pathInfo;
165
+ const completionType = getCompletionType(path);
166
+ let options = [];
167
+ let from = pos;
168
+ switch (completionType.type) {
169
+ case 'top-level': {
170
+ // Show all top-level variables
171
+ const currentWord = path.trim();
172
+ options = Object.values(schema.variables)
173
+ .filter((v) => currentWord === '' || v.name.toLowerCase().startsWith(currentWord.toLowerCase()))
174
+ .map((v) => variableToCompletion(v));
175
+ // Calculate from position for replacement
176
+ from = startPos + (path.length - path.trimStart().length);
177
+ break;
178
+ }
179
+ case 'property': {
180
+ // Show child properties of the parent
181
+ const children = getChildVariables(schema, completionType.parentPath);
182
+ const currentWord = path.slice(path.lastIndexOf('.') + 1);
183
+ options = children
184
+ .filter((v) => currentWord === '' || v.name.toLowerCase().startsWith(currentWord.toLowerCase()))
185
+ .map((v) => variableToCompletion(v));
186
+ // From should be right after the last dot
187
+ from = startPos + path.lastIndexOf('.') + 1;
188
+ break;
189
+ }
190
+ case 'array-index': {
191
+ // Check if the parent is actually an array
192
+ if (isArrayVariable(schema, completionType.parentPath)) {
193
+ const indices = getArrayIndexSuggestions(5);
194
+ const currentIndex = path.slice(path.lastIndexOf('[') + 1);
195
+ options = indices
196
+ .filter((idx) => currentIndex === '' || idx.startsWith(currentIndex))
197
+ .map((idx) => ({
198
+ label: idx,
199
+ displayLabel: idx === '*]' ? '* (all items)' : `[${idx}`,
200
+ detail: idx === '*]' ? 'Iterate all items' : `Index ${idx.slice(0, -1)}`,
201
+ type: 'keyword'
202
+ }));
203
+ // From should be right after the [
204
+ from = startPos + path.lastIndexOf('[') + 1;
205
+ }
206
+ break;
207
+ }
208
+ }
209
+ if (options.length === 0) {
210
+ return null;
211
+ }
212
+ return {
213
+ from,
214
+ options,
215
+ validFor: /^[\w\]*]*$/
216
+ };
217
+ };
218
+ }
219
+ /**
220
+ * Creates a CodeMirror extension for template variable autocomplete.
221
+ *
222
+ * @param schema - The variable schema containing available variables
223
+ * @returns A CodeMirror extension that provides autocomplete
224
+ *
225
+ * @example
226
+ * ```typescript
227
+ * const extensions = [
228
+ * // ... other extensions
229
+ * createTemplateAutocomplete(variableSchema)
230
+ * ];
231
+ * ```
232
+ */
233
+ export function createTemplateAutocomplete(schema) {
234
+ return autocompletion({
235
+ override: [createTemplateCompletionSource(schema)],
236
+ activateOnTyping: true,
237
+ defaultKeymap: true,
238
+ optionClass: () => 'cm-template-autocomplete-option',
239
+ icons: false, // We use our own icons in displayLabel
240
+ addToOptions: [
241
+ {
242
+ render: (completion) => {
243
+ const el = document.createElement('span');
244
+ el.className = 'cm-template-autocomplete-info';
245
+ if (completion.info) {
246
+ el.textContent = String(completion.info);
247
+ }
248
+ return el;
249
+ },
250
+ position: 100
251
+ }
252
+ ]
253
+ });
254
+ }