@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,314 @@
1
+ <!--
2
+ Pipeline Status Component
3
+ Displays workflow execution status using the App component in read-only mode
4
+ Styled with BEM syntax
5
+ -->
6
+
7
+ <script lang="ts">
8
+ import { onMount } from 'svelte';
9
+ import App from './App.svelte';
10
+ import LogsSidebar from './LogsSidebar.svelte';
11
+ import { EnhancedFlowDropApiClient } from '../api/enhanced-client.js';
12
+ import { createEndpointConfig } from '../config/endpoints.js';
13
+ import type { Workflow } from '../types/index.js';
14
+ import type { EndpointConfig } from '../config/endpoints.js';
15
+ import { logger } from '../utils/logger.js';
16
+
17
+ interface Props {
18
+ pipelineId: string;
19
+ workflow: Workflow;
20
+ apiClient?: EnhancedFlowDropApiClient;
21
+ baseUrl?: string;
22
+ endpointConfig?: EndpointConfig;
23
+ onActionsReady?: (
24
+ actions: Array<{
25
+ label: string;
26
+ href: string;
27
+ icon?: string;
28
+ variant?: 'primary' | 'secondary' | 'outline';
29
+ onclick?: (event: Event) => void;
30
+ }>
31
+ ) => void;
32
+ }
33
+
34
+ let { pipelineId, workflow, apiClient, baseUrl, endpointConfig, onActionsReady }: Props =
35
+ $props();
36
+
37
+ // Initialize API client if not provided
38
+ // svelte-ignore state_referenced_locally — client created once from props
39
+ const client =
40
+ apiClient ||
41
+ new EnhancedFlowDropApiClient(
42
+ endpointConfig ?? createEndpointConfig(baseUrl || '/api/flowdrop')
43
+ );
44
+
45
+ // Pipeline status and job data
46
+ let pipelineStatus = $state<string>('unknown');
47
+ interface PipelineNodeStatus {
48
+ status: string;
49
+ [key: string]: unknown;
50
+ }
51
+
52
+ let jobStatusData = $state<{
53
+ jobs: Record<string, unknown>[];
54
+ node_statuses: Record<string, PipelineNodeStatus>;
55
+ status_summary: {
56
+ total: number;
57
+ pending: number;
58
+ running: number;
59
+ completed: number;
60
+ failed: number;
61
+ cancelled: number;
62
+ };
63
+ }>({
64
+ jobs: [],
65
+ node_statuses: {},
66
+ status_summary: {
67
+ total: 0,
68
+ pending: 0,
69
+ running: 0,
70
+ completed: 0,
71
+ failed: 0,
72
+ cancelled: 0
73
+ }
74
+ });
75
+
76
+ // Node statuses for visual indicators
77
+ let nodeStatuses = $state<Record<string, 'pending' | 'running' | 'completed' | 'error'>>({});
78
+
79
+ // Loading and error states
80
+ let isLoadingJobStatus = $state(false);
81
+
82
+ // Logs sidebar state
83
+ let isLogsSidebarOpen = $state(false);
84
+ let logs = $state<Array<{ level: string; message: string; timestamp: string }>>([]);
85
+
86
+ /**
87
+ * Fetch pipeline data including job information
88
+ */
89
+ async function fetchPipelineData(): Promise<void> {
90
+ if (!pipelineId) return;
91
+
92
+ try {
93
+ isLoadingJobStatus = true;
94
+ const pipelineData = await client.getPipelineData(pipelineId);
95
+
96
+ pipelineStatus = pipelineData.status;
97
+ jobStatusData = {
98
+ jobs: pipelineData.jobs || [],
99
+ node_statuses: pipelineData.node_statuses || {},
100
+ status_summary: pipelineData.job_status_summary || {
101
+ total: 0,
102
+ pending: 0,
103
+ running: 0,
104
+ completed: 0,
105
+ failed: 0,
106
+ cancelled: 0
107
+ }
108
+ };
109
+
110
+ // Update node statuses based on job data
111
+ if (jobStatusData.node_statuses) {
112
+ const newNodeStatuses: Record<string, 'pending' | 'running' | 'completed' | 'error'> = {};
113
+
114
+ // Initialize all nodes as pending
115
+ if (workflow && workflow.nodes) {
116
+ workflow.nodes.forEach((node) => {
117
+ newNodeStatuses[node.id] = 'pending';
118
+ });
119
+ }
120
+
121
+ // Override with actual job statuses
122
+ for (const nodeId in jobStatusData.node_statuses) {
123
+ const status = jobStatusData.node_statuses[nodeId].status;
124
+ if (['pending', 'running', 'completed', 'failed', 'cancelled'].includes(status)) {
125
+ newNodeStatuses[nodeId] =
126
+ status === 'failed' ? 'error' : (status as 'pending' | 'running' | 'completed');
127
+ }
128
+ }
129
+ nodeStatuses = newNodeStatuses;
130
+ }
131
+
132
+ addLog('info', `Job status updated: ${jobStatusData.status_summary.total} total jobs`);
133
+ } catch (error) {
134
+ logger.error('Failed to fetch pipeline data:', error);
135
+ addLog(
136
+ 'error',
137
+ `Failed to fetch pipeline data: ${error instanceof Error ? error.message : 'Unknown error'}`
138
+ );
139
+ } finally {
140
+ isLoadingJobStatus = false;
141
+ }
142
+ }
143
+
144
+ /**
145
+ * Add a log entry
146
+ */
147
+ function addLog(level: string, message: string): void {
148
+ logs = [
149
+ ...logs,
150
+ {
151
+ level,
152
+ message,
153
+ timestamp: new Date().toISOString()
154
+ }
155
+ ];
156
+ }
157
+
158
+ /**
159
+ * Toggle logs sidebar
160
+ */
161
+ function toggleLogsSidebar(): void {
162
+ isLogsSidebarOpen = !isLogsSidebarOpen;
163
+ }
164
+
165
+ /**
166
+ * Get pipeline actions for the parent navbar
167
+ */
168
+ function getPipelineActions() {
169
+ return [
170
+ {
171
+ label: isLoadingJobStatus ? 'Refreshing...' : 'Refresh Status',
172
+ href: '#refresh',
173
+ icon: isLoadingJobStatus ? 'mdi:loading' : 'mdi:refresh',
174
+ variant: 'outline' as const,
175
+ onclick: (e: Event) => {
176
+ e.preventDefault();
177
+ fetchPipelineData();
178
+ }
179
+ },
180
+ {
181
+ label: 'View Logs',
182
+ href: '#logs',
183
+ icon: 'mdi:file-document-outline',
184
+ variant: 'outline' as const,
185
+ onclick: (e: Event) => {
186
+ e.preventDefault();
187
+ toggleLogsSidebar();
188
+ }
189
+ }
190
+ ];
191
+ }
192
+
193
+ // Fetch pipeline data on mount
194
+ onMount(() => {
195
+ fetchPipelineData();
196
+ // Expose actions to parent
197
+ if (onActionsReady) {
198
+ onActionsReady(getPipelineActions());
199
+ }
200
+
201
+ // Listen for custom events from the layout navbar
202
+ const handleRefresh = () => fetchPipelineData();
203
+ const handleViewLogs = () => toggleLogsSidebar();
204
+
205
+ window.addEventListener('pipeline-refresh', handleRefresh);
206
+ window.addEventListener('pipeline-view-logs', handleViewLogs);
207
+
208
+ return () => {
209
+ window.removeEventListener('pipeline-refresh', handleRefresh);
210
+ window.removeEventListener('pipeline-view-logs', handleViewLogs);
211
+ };
212
+ });
213
+
214
+ // Send pipeline breadcrumbs to layout when they change
215
+ $effect(() => {
216
+ if (pipelineStatus && pipelineId && workflow) {
217
+ const breadcrumbs = [
218
+ {
219
+ label: 'Home',
220
+ href: '/',
221
+ icon: 'mdi:home'
222
+ },
223
+ {
224
+ label: 'Workflows',
225
+ href: '/',
226
+ icon: 'mdi:view-list'
227
+ },
228
+ {
229
+ label: workflow.name || 'Workflow',
230
+ href: `/workflow/${workflow.id}/edit`,
231
+ icon: 'mdi:workflow'
232
+ },
233
+ {
234
+ label: 'Pipelines',
235
+ href: `/workflow/${workflow.id}/pipelines`,
236
+ icon: 'mdi:source-branch'
237
+ },
238
+ {
239
+ label: `Pipeline ${pipelineId} - ${pipelineStatus}`,
240
+ icon: 'mdi:play-circle'
241
+ }
242
+ ];
243
+
244
+ window.dispatchEvent(
245
+ new CustomEvent('page-breadcrumbs-update', {
246
+ detail: { breadcrumbs }
247
+ })
248
+ );
249
+ }
250
+ });
251
+
252
+ // Update actions when loading state changes
253
+ $effect(() => {
254
+ if (onActionsReady) {
255
+ onActionsReady(getPipelineActions());
256
+ }
257
+ });
258
+
259
+ // Auto-refresh pipeline data every 5 seconds when pipeline is running
260
+ let refreshInterval: NodeJS.Timeout | null = null;
261
+
262
+ $effect(() => {
263
+ // Clear existing interval
264
+ if (refreshInterval) {
265
+ clearInterval(refreshInterval);
266
+ refreshInterval = null;
267
+ }
268
+
269
+ // Only start polling if pipeline is running
270
+ if (pipelineStatus === 'running' && pipelineId) {
271
+ refreshInterval = setInterval(() => {
272
+ fetchPipelineData();
273
+ }, 5000);
274
+ }
275
+ });
276
+
277
+ // Note: Interval cleanup is handled by the $effect above.
278
+ // In Svelte 5, $effect cleanup runs both on re-execution and component destroy.
279
+ </script>
280
+
281
+ <div class="pipeline-status-container">
282
+ <!-- Workflow Visualization using App component -->
283
+ <App
284
+ {workflow}
285
+ height="100vh"
286
+ width="100%"
287
+ showNavbar={false}
288
+ disableSidebar={true}
289
+ lockWorkflow={true}
290
+ readOnly={true}
291
+ {nodeStatuses}
292
+ {pipelineId}
293
+ {endpointConfig}
294
+ />
295
+
296
+ <!-- Logs Sidebar -->
297
+ {#if isLogsSidebarOpen}
298
+ <LogsSidebar {logs} isOpen={isLogsSidebarOpen} onClose={() => (isLogsSidebarOpen = false)} />
299
+ {/if}
300
+ </div>
301
+
302
+ <style>
303
+ .pipeline-status-container {
304
+ display: flex;
305
+ flex-direction: column;
306
+ height: 100vh;
307
+ background: var(--fd-layout-background, var(--fd-muted));
308
+ }
309
+
310
+ /* Dark mode override */
311
+ :global([data-theme='dark']) .pipeline-status-container {
312
+ background: linear-gradient(135deg, #141418 0%, #1a1a2e 50%, #16162a 100%);
313
+ }
314
+ </style>
@@ -0,0 +1,20 @@
1
+ import { EnhancedFlowDropApiClient } from '../api/enhanced-client.js';
2
+ import type { Workflow } from '../types/index.js';
3
+ import type { EndpointConfig } from '../config/endpoints.js';
4
+ interface Props {
5
+ pipelineId: string;
6
+ workflow: Workflow;
7
+ apiClient?: EnhancedFlowDropApiClient;
8
+ baseUrl?: string;
9
+ endpointConfig?: EndpointConfig;
10
+ onActionsReady?: (actions: Array<{
11
+ label: string;
12
+ href: string;
13
+ icon?: string;
14
+ variant?: 'primary' | 'secondary' | 'outline';
15
+ onclick?: (event: Event) => void;
16
+ }>) => void;
17
+ }
18
+ declare const PipelineStatus: import("svelte").Component<Props, {}, "">;
19
+ type PipelineStatus = ReturnType<typeof PipelineStatus>;
20
+ export default PipelineStatus;
@@ -0,0 +1,58 @@
1
+ <!--
2
+ Port Coordinate Tracker Component
3
+ Bridge component that exposes SvelteFlow's getInternalNode to the parent.
4
+ Must be rendered inside SvelteFlowProvider context.
5
+
6
+ Uses the same pattern as EdgeRefresher - a renderless component that hooks
7
+ into the SvelteFlow context.
8
+ -->
9
+
10
+ <script lang="ts">
11
+ import { useSvelteFlow, type InternalNode } from '@xyflow/svelte';
12
+ import type { WorkflowNode as WorkflowNodeType } from '../types/index.js';
13
+ import {
14
+ rebuildAllPortCoordinates,
15
+ updateNodePortCoordinates
16
+ } from '../stores/portCoordinateStore.svelte.js';
17
+
18
+ interface Props {
19
+ /** Node to update coordinates for (e.g., during drag). Set to null when not dragging. */
20
+ nodeToUpdate: WorkflowNodeType | null;
21
+ /** Set to trigger a full rebuild of all port coordinates */
22
+ rebuildTrigger: number;
23
+ /** All workflow nodes - used for full rebuild */
24
+ nodes: WorkflowNodeType[];
25
+ }
26
+
27
+ let { nodeToUpdate, rebuildTrigger, nodes }: Props = $props();
28
+
29
+ const { getInternalNode } = useSvelteFlow();
30
+
31
+ // Cast the getInternalNode function for our use
32
+ const getInternal = getInternalNode as (id: string) => InternalNode | undefined;
33
+
34
+ /**
35
+ * Rebuild all port coordinates when rebuildTrigger changes.
36
+ * Debounced to batch rapid position updates (e.g., animated auto-layout,
37
+ * magnetic child nodes following a parent drag).
38
+ */
39
+ $effect(() => {
40
+ const _trigger = rebuildTrigger;
41
+ if (_trigger > 0) {
42
+ const timeout = setTimeout(() => {
43
+ rebuildAllPortCoordinates(nodes, getInternal);
44
+ }, 150);
45
+ return () => clearTimeout(timeout);
46
+ }
47
+ });
48
+
49
+ /**
50
+ * Update a single node's coordinates when nodeToUpdate changes.
51
+ * This is used during drag for efficient per-node updates.
52
+ */
53
+ $effect(() => {
54
+ if (nodeToUpdate) {
55
+ updateNodePortCoordinates(nodeToUpdate, getInternal);
56
+ }
57
+ });
58
+ </script>
@@ -0,0 +1,12 @@
1
+ import type { WorkflowNode as WorkflowNodeType } from '../types/index.js';
2
+ interface Props {
3
+ /** Node to update coordinates for (e.g., during drag). Set to null when not dragging. */
4
+ nodeToUpdate: WorkflowNodeType | null;
5
+ /** Set to trigger a full rebuild of all port coordinates */
6
+ rebuildTrigger: number;
7
+ /** All workflow nodes - used for full rebuild */
8
+ nodes: WorkflowNodeType[];
9
+ }
10
+ declare const PortCoordinateTracker: import("svelte").Component<Props, {}, "">;
11
+ type PortCoordinateTracker = ReturnType<typeof PortCoordinateTracker>;
12
+ export default PortCoordinateTracker;
@@ -0,0 +1,170 @@
1
+ <!--
2
+ ReadOnlyDetails Component
3
+ Displays readonly information with an ID (with copy button), title, description, and label-value pairs
4
+ Compact inline layout with BEM syntax
5
+ -->
6
+
7
+ <script lang="ts">
8
+ /**
9
+ * A single detail item with label and value
10
+ */
11
+ interface DetailItem {
12
+ /** The label to display */
13
+ label: string;
14
+ /** The value to display */
15
+ value: string;
16
+ }
17
+
18
+ /**
19
+ * Props interface for ReadOnlyDetails component
20
+ */
21
+ interface Props {
22
+ /** The unique identifier to display with a copy button */
23
+ id: string;
24
+ /** Optional section title */
25
+ title?: string;
26
+ /** Optional description text */
27
+ description?: string;
28
+ /** Array of label-value pairs to display */
29
+ details: DetailItem[];
30
+ }
31
+
32
+ const { id, title, description, details }: Props = $props();
33
+
34
+ /**
35
+ * Copy the ID to clipboard
36
+ */
37
+ function copyId(): void {
38
+ navigator.clipboard.writeText(id);
39
+ }
40
+ </script>
41
+
42
+ <div class="readonly-details">
43
+ {#if title}
44
+ <h3 class="readonly-details__title">{title}</h3>
45
+ {/if}
46
+
47
+ <div class="readonly-details__grid">
48
+ <!-- ID row -->
49
+ <span class="readonly-details__label">ID</span>
50
+ <div class="readonly-details__id-row">
51
+ <code class="readonly-details__id">{id}</code>
52
+ <button
53
+ class="readonly-details__copy-btn"
54
+ onclick={copyId}
55
+ title="Copy ID"
56
+ aria-label="Copy ID to clipboard"
57
+ >
58
+ <svg
59
+ xmlns="http://www.w3.org/2000/svg"
60
+ fill="none"
61
+ width="12"
62
+ height="12"
63
+ viewBox="0 0 24 24"
64
+ stroke-width="2"
65
+ stroke="currentColor"
66
+ >
67
+ <path
68
+ stroke-linecap="round"
69
+ stroke-linejoin="round"
70
+ d="M15.75 17.25v3.375c0 .621-.504 1.125-1.125 1.125h-9.75a1.125 1.125 0 0 1-1.125-1.125V7.875c0-.621.504-1.125 1.125-1.125H6.75a9.06 9.06 0 0 1 1.5.124m7.5 10.376h3.375c.621 0 1.125-.504 1.125-1.125V11.25c0-4.46-3.243-8.161-7.5-8.876a9.06 9.06 0 0 0-1.5-.124H9.375c-.621 0-1.125.504-1.125 1.125v3.5m7.5 10.375H9.375a1.125 1.125 0 0 1-1.125-1.125v-9.25m12 6.625v-1.875a3.375 3.375 0 0 0-3.375-3.375h-1.5a1.125 1.125 0 0 1-1.125-1.125v-1.5a3.375 3.375 0 0 0-3.375-3.375H9.75"
71
+ />
72
+ </svg>
73
+ </button>
74
+ </div>
75
+
76
+ <!-- Dynamic label-value pairs -->
77
+ {#each details as detail (detail.label)}
78
+ <span class="readonly-details__label">{detail.label}</span>
79
+ <span class="readonly-details__value">{detail.value}</span>
80
+ {/each}
81
+ </div>
82
+
83
+ <!-- Description (if provided) -->
84
+ {#if description}
85
+ <p class="readonly-details__description">{description}</p>
86
+ {/if}
87
+ </div>
88
+
89
+ <style>
90
+ .readonly-details {
91
+ display: flex;
92
+ flex-direction: column;
93
+ gap: 0.5rem;
94
+ }
95
+
96
+ .readonly-details__title {
97
+ margin: 0;
98
+ font-size: 0.75rem;
99
+ font-weight: 600;
100
+ color: var(--fd-muted-foreground);
101
+ text-transform: uppercase;
102
+ letter-spacing: 0.05em;
103
+ }
104
+
105
+ .readonly-details__grid {
106
+ display: grid;
107
+ grid-template-columns: auto 1fr;
108
+ gap: 0.25rem 0.75rem;
109
+ align-items: center;
110
+ }
111
+
112
+ .readonly-details__label {
113
+ font-size: 0.75rem;
114
+ font-weight: 500;
115
+ color: var(--fd-muted-foreground);
116
+ }
117
+
118
+ .readonly-details__value {
119
+ font-size: 0.8125rem;
120
+ color: var(--fd-foreground);
121
+ font-weight: 500;
122
+ }
123
+
124
+ .readonly-details__id-row {
125
+ display: flex;
126
+ align-items: center;
127
+ gap: 0.375rem;
128
+ }
129
+
130
+ .readonly-details__id {
131
+ font-size: 0.75rem;
132
+ font-family: ui-monospace, SFMono-Regular, 'SF Mono', Menlo, monospace;
133
+ color: var(--fd-muted-foreground);
134
+ background-color: var(--fd-subtle);
135
+ padding: 0.125rem 0.375rem;
136
+ border-radius: var(--fd-radius-sm);
137
+ word-break: break-all;
138
+ }
139
+
140
+ .readonly-details__copy-btn {
141
+ background: transparent;
142
+ border: none;
143
+ padding: 0.25rem;
144
+ cursor: pointer;
145
+ color: var(--fd-muted-foreground);
146
+ border-radius: var(--fd-radius-sm);
147
+ display: flex;
148
+ align-items: center;
149
+ justify-content: center;
150
+ transition:
151
+ color var(--fd-transition-fast),
152
+ background-color var(--fd-transition-fast);
153
+ }
154
+
155
+ .readonly-details__copy-btn:hover {
156
+ color: var(--fd-foreground);
157
+ background-color: var(--fd-subtle);
158
+ }
159
+
160
+ .readonly-details__copy-btn:active {
161
+ color: var(--fd-foreground);
162
+ }
163
+
164
+ .readonly-details__description {
165
+ margin: 0;
166
+ font-size: 0.8125rem;
167
+ color: var(--fd-muted-foreground);
168
+ line-height: 1.5;
169
+ }
170
+ </style>
@@ -0,0 +1,25 @@
1
+ /**
2
+ * A single detail item with label and value
3
+ */
4
+ interface DetailItem {
5
+ /** The label to display */
6
+ label: string;
7
+ /** The value to display */
8
+ value: string;
9
+ }
10
+ /**
11
+ * Props interface for ReadOnlyDetails component
12
+ */
13
+ interface Props {
14
+ /** The unique identifier to display with a copy button */
15
+ id: string;
16
+ /** Optional section title */
17
+ title?: string;
18
+ /** Optional description text */
19
+ description?: string;
20
+ /** Array of label-value pairs to display */
21
+ details: DetailItem[];
22
+ }
23
+ declare const ReadOnlyDetails: import("svelte").Component<Props, {}, "">;
24
+ type ReadOnlyDetails = ReturnType<typeof ReadOnlyDetails>;
25
+ export default ReadOnlyDetails;