@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,563 @@
1
+ <!--
2
+ Logs Sidebar Component
3
+ Right-side sliding sidebar for real-time execution logs
4
+ Similar to ConfigSidebar but for logs display
5
+ Styled with BEM syntax
6
+ -->
7
+
8
+ <script lang="ts">
9
+ import Icon from '@iconify/svelte';
10
+ import type { WorkflowNode as WorkflowNodeType } from '../types/index.js';
11
+
12
+ interface LogEntry {
13
+ timestamp: string;
14
+ level: string;
15
+ message: string;
16
+ nodeId?: string;
17
+ }
18
+
19
+ interface Props {
20
+ isOpen: boolean;
21
+ logs: LogEntry[];
22
+ selectedNode?: WorkflowNodeType | null;
23
+ onClose?: () => void;
24
+ onClear?: () => void;
25
+ }
26
+
27
+ let props: Props = $props();
28
+
29
+ let sidebarRef: HTMLElement | undefined = $state();
30
+
31
+ // Focus management and body scroll control
32
+ $effect(() => {
33
+ if (props.isOpen) {
34
+ // Focus management - focus the sidebar when it opens
35
+ setTimeout(() => {
36
+ sidebarRef?.focus();
37
+ }, 100);
38
+
39
+ // Prevent body scroll
40
+ document.body.style.overflow = 'hidden';
41
+ } else {
42
+ // Restore body scroll
43
+ document.body.style.overflow = '';
44
+ }
45
+ });
46
+
47
+ /**
48
+ * Handle close action
49
+ */
50
+ function handleClose(): void {
51
+ props.onClose?.();
52
+ }
53
+
54
+ /**
55
+ * Handle keyboard shortcuts
56
+ */
57
+ function handleKeydown(event: KeyboardEvent): void {
58
+ if (event.key === 'Escape') {
59
+ handleClose();
60
+ }
61
+ }
62
+
63
+ /**
64
+ * Get log level color
65
+ * Returns CSS variable references for theme consistency
66
+ */
67
+ function getLogLevelColor(level: string): string {
68
+ switch (level) {
69
+ case 'error':
70
+ return 'var(--fd-error)';
71
+ case 'warning':
72
+ return 'var(--fd-warning)';
73
+ case 'success':
74
+ return 'var(--fd-success)';
75
+ case 'info':
76
+ return 'var(--fd-info)';
77
+ default:
78
+ return 'var(--fd-muted-foreground)';
79
+ }
80
+ }
81
+
82
+ /**
83
+ * Get log level icon
84
+ */
85
+ function getLogLevelIcon(level: string): string {
86
+ switch (level) {
87
+ case 'error':
88
+ return 'mdi:alert-circle';
89
+ case 'warning':
90
+ return 'mdi:alert';
91
+ case 'success':
92
+ return 'mdi:check-circle';
93
+ case 'info':
94
+ return 'mdi:information';
95
+ default:
96
+ return 'mdi:circle';
97
+ }
98
+ }
99
+
100
+ /**
101
+ * Format timestamp for display
102
+ */
103
+ function formatTimestamp(timestamp: string): string {
104
+ const date = new Date(timestamp);
105
+ return date.toLocaleTimeString('en-US', {
106
+ hour12: false,
107
+ hour: '2-digit',
108
+ minute: '2-digit',
109
+ second: '2-digit',
110
+ fractionalSecondDigits: 3
111
+ });
112
+ }
113
+
114
+ /**
115
+ * Filter logs by selected node
116
+ */
117
+ let filteredLogs = $derived(() => {
118
+ if (props.selectedNode) {
119
+ return props.logs.filter((log) => log.nodeId === props.selectedNode?.id);
120
+ }
121
+ return props.logs;
122
+ });
123
+
124
+ /**
125
+ * Clear logs
126
+ */
127
+ function clearLogs(): void {
128
+ props.onClear?.();
129
+ }
130
+
131
+ /**
132
+ * Export logs
133
+ */
134
+ function exportLogs(): void {
135
+ const logText = filteredLogs()
136
+ .map(
137
+ (log) =>
138
+ `[${formatTimestamp(log.timestamp)}] ${log.level.toUpperCase()}: ${log.message}${log.nodeId ? ` (Node: ${log.nodeId})` : ''}`
139
+ )
140
+ .join('\n');
141
+
142
+ const blob = new Blob([logText], { type: 'text/plain' });
143
+ const url = URL.createObjectURL(blob);
144
+ const link = document.createElement('a');
145
+ link.href = url;
146
+ link.download = `pipeline-logs-${new Date().toISOString().split('T')[0]}.txt`;
147
+ link.click();
148
+ URL.revokeObjectURL(url);
149
+ }
150
+
151
+ // Auto-scroll to bottom when new logs arrive
152
+ let logsContainer = $state<HTMLElement>();
153
+ $effect(() => {
154
+ if (logsContainer && props.logs.length > 0) {
155
+ logsContainer.scrollTop = logsContainer.scrollHeight;
156
+ }
157
+ });
158
+ </script>
159
+
160
+ <!-- Sidebar -->
161
+ <div
162
+ bind:this={sidebarRef}
163
+ class="logs-sidebar"
164
+ class:logs-sidebar--open={props.isOpen}
165
+ role="dialog"
166
+ aria-label="Execution logs sidebar"
167
+ aria-modal="true"
168
+ tabindex="-1"
169
+ onkeydown={handleKeydown}
170
+ >
171
+ <!-- Header -->
172
+ <div class="logs-sidebar__header">
173
+ <div class="logs-sidebar__title-section">
174
+ <h2 class="logs-sidebar__title">
175
+ {#if props.selectedNode}
176
+ Logs: {props.selectedNode.data.label}
177
+ {:else}
178
+ Execution Logs
179
+ {/if}
180
+ </h2>
181
+ {#if props.logs.length > 0}
182
+ <div class="logs-sidebar__count" title="Total log entries">
183
+ <Icon icon="mdi:file-document-outline" />
184
+ {props.logs.length}
185
+ </div>
186
+ {/if}
187
+ </div>
188
+ <button
189
+ class="logs-sidebar__close-btn"
190
+ onclick={handleClose}
191
+ title="Close logs sidebar (Esc)"
192
+ aria-label="Close logs sidebar"
193
+ >
194
+ <Icon icon="mdi:close" />
195
+ </button>
196
+ </div>
197
+
198
+ <!-- Content -->
199
+ <div class="logs-sidebar__content">
200
+ <!-- Logs List -->
201
+ {#if filteredLogs().length > 0}
202
+ <div class="logs-sidebar__logs" bind:this={logsContainer}>
203
+ {#each filteredLogs() as log, index (index)}
204
+ <div
205
+ class="logs-sidebar__log-entry"
206
+ class:logs-sidebar__log-entry--error={log.level === 'error'}
207
+ class:logs-sidebar__log-entry--warning={log.level === 'warning'}
208
+ class:logs-sidebar__log-entry--success={log.level === 'success'}
209
+ class:logs-sidebar__log-entry--info={log.level === 'info'}
210
+ >
211
+ <div class="logs-sidebar__log-header">
212
+ <div class="logs-sidebar__log-level">
213
+ <Icon
214
+ icon={getLogLevelIcon(log.level)}
215
+ style="color: {getLogLevelColor(log.level)}"
216
+ />
217
+ <span class="logs-sidebar__log-level-text">{log.level.toUpperCase()}</span>
218
+ </div>
219
+ <div class="logs-sidebar__log-timestamp">
220
+ {formatTimestamp(log.timestamp)}
221
+ </div>
222
+ </div>
223
+ <div class="logs-sidebar__log-message">
224
+ {log.message}
225
+ </div>
226
+ {#if log.nodeId}
227
+ <div class="logs-sidebar__log-node">
228
+ <Icon icon="mdi:graph" />
229
+ Node: {log.nodeId}
230
+ </div>
231
+ {/if}
232
+ </div>
233
+ {/each}
234
+ </div>
235
+ {:else}
236
+ <div class="logs-sidebar__empty">
237
+ <Icon icon="mdi:file-document-outline" class="logs-sidebar__empty-icon" />
238
+ <p class="logs-sidebar__empty-text">
239
+ {#if props.selectedNode}
240
+ No logs available for this node
241
+ {:else}
242
+ No execution logs yet
243
+ {/if}
244
+ </p>
245
+ </div>
246
+ {/if}
247
+ </div>
248
+
249
+ <!-- Footer -->
250
+ <div class="logs-sidebar__footer">
251
+ <div class="logs-sidebar__actions">
252
+ <button
253
+ type="button"
254
+ class="logs-sidebar__btn logs-sidebar__btn--secondary"
255
+ onclick={clearLogs}
256
+ disabled={props.logs.length === 0}
257
+ >
258
+ <Icon icon="mdi:delete" />
259
+ Clear
260
+ </button>
261
+ <button
262
+ type="button"
263
+ class="logs-sidebar__btn logs-sidebar__btn--outline"
264
+ onclick={exportLogs}
265
+ disabled={props.logs.length === 0}
266
+ >
267
+ <Icon icon="mdi:download" />
268
+ Export
269
+ </button>
270
+ </div>
271
+
272
+ {#if props.logs.length > 0}
273
+ <p class="logs-sidebar__info-text">
274
+ {filteredLogs().length} of {props.logs.length} log entries
275
+ </p>
276
+ {/if}
277
+ </div>
278
+ </div>
279
+
280
+ <style>
281
+ .logs-sidebar {
282
+ position: fixed;
283
+ top: var(--fd-navbar-height); /* Start below navbar */
284
+ right: 0;
285
+ width: 400px;
286
+ height: calc(100vh - var(--fd-navbar-height)); /* Account for navbar height */
287
+ background-color: #ffffff;
288
+ border-left: 1px solid #e5e7eb;
289
+ box-shadow: -4px 0 20px rgba(0, 0, 0, 0.15);
290
+ transform: translateX(100%);
291
+ transition: transform 0.3s cubic-bezier(0.4, 0, 0.2, 1);
292
+ z-index: -1;
293
+ display: flex;
294
+ flex-direction: column;
295
+ pointer-events: none;
296
+ }
297
+
298
+ /* Mobile responsive */
299
+ @media (max-width: 768px) {
300
+ .logs-sidebar {
301
+ width: 100vw;
302
+ border-left: none;
303
+ }
304
+ }
305
+
306
+ @media (max-width: 480px) {
307
+ .logs-sidebar {
308
+ width: 100vw;
309
+ }
310
+ }
311
+
312
+ .logs-sidebar--open {
313
+ transform: translateX(0);
314
+ z-index: 999;
315
+ pointer-events: auto;
316
+ }
317
+
318
+ /* Prevent body scroll when sidebar is open */
319
+ :global(body:has(.logs-sidebar--open)) {
320
+ overflow: hidden;
321
+ }
322
+
323
+ .logs-sidebar__header {
324
+ display: flex;
325
+ align-items: center;
326
+ justify-content: space-between;
327
+ padding: 1rem 1.5rem;
328
+ border-bottom: 1px solid #e5e7eb;
329
+ background-color: #f9fafb;
330
+ flex-shrink: 0;
331
+ }
332
+
333
+ .logs-sidebar__title-section {
334
+ display: flex;
335
+ align-items: center;
336
+ gap: 0.5rem;
337
+ }
338
+
339
+ .logs-sidebar__title {
340
+ font-size: 1.125rem;
341
+ font-weight: 600;
342
+ color: #111827;
343
+ margin: 0;
344
+ }
345
+
346
+ .logs-sidebar__count {
347
+ display: flex;
348
+ align-items: center;
349
+ gap: 0.25rem;
350
+ font-size: 0.75rem;
351
+ color: #6b7280;
352
+ background-color: #f3f4f6;
353
+ padding: 0.25rem 0.5rem;
354
+ border-radius: 0.375rem;
355
+ }
356
+
357
+ .logs-sidebar__close-btn {
358
+ display: flex;
359
+ align-items: center;
360
+ justify-content: center;
361
+ width: 2rem;
362
+ height: 2rem;
363
+ border: none;
364
+ background: transparent;
365
+ color: #6b7280;
366
+ cursor: pointer;
367
+ border-radius: 0.375rem;
368
+ transition: all 0.2s ease-in-out;
369
+ }
370
+
371
+ .logs-sidebar__close-btn:hover {
372
+ background-color: #f3f4f6;
373
+ color: #374151;
374
+ }
375
+
376
+ .logs-sidebar__content {
377
+ flex: 1;
378
+ overflow-y: auto;
379
+ padding: 1.5rem;
380
+ }
381
+
382
+ .logs-sidebar__logs {
383
+ display: flex;
384
+ flex-direction: column;
385
+ gap: 0.75rem;
386
+ }
387
+
388
+ .logs-sidebar__log-entry {
389
+ background-color: var(--fd-muted);
390
+ border: 1px solid var(--fd-border);
391
+ border-radius: var(--fd-radius-lg);
392
+ padding: 0.75rem;
393
+ transition: all var(--fd-transition-fast);
394
+ }
395
+
396
+ .logs-sidebar__log-entry--error {
397
+ border-left: 4px solid var(--fd-error);
398
+ background-color: var(--fd-error-muted);
399
+ }
400
+
401
+ .logs-sidebar__log-entry--warning {
402
+ border-left: 4px solid var(--fd-warning);
403
+ background-color: var(--fd-warning-muted);
404
+ }
405
+
406
+ .logs-sidebar__log-entry--success {
407
+ border-left: 4px solid var(--fd-success);
408
+ background-color: var(--fd-success-muted);
409
+ }
410
+
411
+ .logs-sidebar__log-entry--info {
412
+ border-left: 4px solid var(--fd-info);
413
+ background-color: var(--fd-info-muted);
414
+ }
415
+
416
+ .logs-sidebar__log-header {
417
+ display: flex;
418
+ align-items: center;
419
+ justify-content: space-between;
420
+ margin-bottom: 0.5rem;
421
+ }
422
+
423
+ .logs-sidebar__log-level {
424
+ display: flex;
425
+ align-items: center;
426
+ gap: 0.25rem;
427
+ font-size: 0.75rem;
428
+ font-weight: 600;
429
+ text-transform: uppercase;
430
+ letter-spacing: 0.05em;
431
+ }
432
+
433
+ .logs-sidebar__log-level-text {
434
+ font-size: 0.75rem;
435
+ font-weight: 600;
436
+ }
437
+
438
+ .logs-sidebar__log-timestamp {
439
+ font-size: 0.75rem;
440
+ color: #6b7280;
441
+ font-family: 'Monaco', 'Menlo', 'Ubuntu Mono', monospace;
442
+ }
443
+
444
+ .logs-sidebar__log-message {
445
+ font-size: 0.875rem;
446
+ color: #374151;
447
+ line-height: 1.5;
448
+ margin-bottom: 0.5rem;
449
+ word-break: break-word;
450
+ }
451
+
452
+ .logs-sidebar__log-node {
453
+ display: flex;
454
+ align-items: center;
455
+ gap: 0.25rem;
456
+ font-size: 0.75rem;
457
+ color: #6b7280;
458
+ background-color: #ffffff;
459
+ padding: 0.25rem 0.5rem;
460
+ border-radius: 0.25rem;
461
+ border: 1px solid #e5e7eb;
462
+ width: fit-content;
463
+ }
464
+
465
+ .logs-sidebar__empty {
466
+ display: flex;
467
+ flex-direction: column;
468
+ align-items: center;
469
+ justify-content: center;
470
+ padding: 3rem 1rem;
471
+ text-align: center;
472
+ color: #6b7280;
473
+ }
474
+
475
+ :global(.logs-sidebar__empty-icon) {
476
+ font-size: 3rem;
477
+ margin-bottom: 1rem;
478
+ opacity: 0.5;
479
+ }
480
+
481
+ .logs-sidebar__empty-text {
482
+ font-size: 0.875rem;
483
+ margin: 0;
484
+ }
485
+
486
+ .logs-sidebar__footer {
487
+ padding: 1rem 1.5rem;
488
+ border-top: 1px solid #e5e7eb;
489
+ background-color: #f9fafb;
490
+ flex-shrink: 0;
491
+ }
492
+
493
+ .logs-sidebar__actions {
494
+ display: flex;
495
+ gap: 0.75rem;
496
+ margin-bottom: 0.5rem;
497
+ }
498
+
499
+ .logs-sidebar__btn {
500
+ display: flex;
501
+ align-items: center;
502
+ gap: 0.5rem;
503
+ padding: 0.5rem 1rem;
504
+ border: 1px solid;
505
+ border-radius: 0.375rem;
506
+ font-size: 0.875rem;
507
+ font-weight: 500;
508
+ cursor: pointer;
509
+ transition: all 0.2s ease-in-out;
510
+ flex: 1;
511
+ justify-content: center;
512
+ }
513
+
514
+ .logs-sidebar__btn:disabled {
515
+ opacity: 0.5;
516
+ cursor: not-allowed;
517
+ }
518
+
519
+ .logs-sidebar__btn--secondary {
520
+ background-color: #ef4444;
521
+ border-color: #ef4444;
522
+ color: #ffffff;
523
+ }
524
+
525
+ .logs-sidebar__btn--secondary:hover:not(:disabled) {
526
+ background-color: #dc2626;
527
+ border-color: #dc2626;
528
+ }
529
+
530
+ .logs-sidebar__btn--outline {
531
+ background-color: transparent;
532
+ border-color: #d1d5db;
533
+ color: #374151;
534
+ }
535
+
536
+ .logs-sidebar__btn--outline:hover:not(:disabled) {
537
+ background-color: #f3f4f6;
538
+ border-color: #9ca3af;
539
+ }
540
+
541
+ .logs-sidebar__info-text {
542
+ font-size: 0.75rem;
543
+ color: #6b7280;
544
+ margin: 0;
545
+ text-align: center;
546
+ }
547
+
548
+ /* Responsive design */
549
+ @media (max-width: 640px) {
550
+ .logs-sidebar {
551
+ width: 100vw;
552
+ }
553
+ }
554
+
555
+ @media (max-width: 480px) {
556
+ .logs-sidebar__header,
557
+ .logs-sidebar__content,
558
+ .logs-sidebar__footer {
559
+ padding-left: 1rem;
560
+ padding-right: 1rem;
561
+ }
562
+ }
563
+ </style>
@@ -0,0 +1,17 @@
1
+ import type { WorkflowNode as WorkflowNodeType } from '../types/index.js';
2
+ interface LogEntry {
3
+ timestamp: string;
4
+ level: string;
5
+ message: string;
6
+ nodeId?: string;
7
+ }
8
+ interface Props {
9
+ isOpen: boolean;
10
+ logs: LogEntry[];
11
+ selectedNode?: WorkflowNodeType | null;
12
+ onClose?: () => void;
13
+ onClear?: () => void;
14
+ }
15
+ declare const LogsSidebar: import("svelte").Component<Props, {}, "">;
16
+ type LogsSidebar = ReturnType<typeof LogsSidebar>;
17
+ export default LogsSidebar;
@@ -0,0 +1,36 @@
1
+ <script module>
2
+ import { defineMeta } from '@storybook/addon-svelte-csf';
3
+ import MarkdownDisplay from './MarkdownDisplay.svelte';
4
+
5
+ const { Story } = defineMeta({
6
+ title: 'Display/MarkdownDisplay',
7
+ component: MarkdownDisplay,
8
+ tags: ['autodocs'],
9
+ argTypes: {
10
+ content: { control: 'text' }
11
+ }
12
+ });
13
+ </script>
14
+
15
+ <Story name="Simple" args={{ content: 'Hello **world**! This is *italic* and `inline code`.' }} />
16
+
17
+ <Story
18
+ name="Headings"
19
+ args={{ content: '# Heading 1\n## Heading 2\n### Heading 3\n\nParagraph text below headings.' }}
20
+ />
21
+
22
+ <Story
23
+ name="Code Block"
24
+ args={{
25
+ content:
26
+ 'Here is a code example:\n\n```javascript\nconst greeting = "Hello";\nconsole.log(greeting);\n```\n\nAnd some text after.'
27
+ }}
28
+ />
29
+
30
+ <Story
31
+ name="Full Document"
32
+ args={{
33
+ content:
34
+ '# Workflow Guide\n\n## Getting Started\n\nFollow these steps:\n\n1. Create a new workflow\n2. Add nodes from the sidebar\n3. Connect nodes with edges\n\n> **Tip:** Use keyboard shortcuts for faster editing.\n\n### Supported Node Types\n\n| Type | Description |\n|------|-------------|\n| Start | Entry point |\n| End | Exit point |\n| Tool | Processing step |\n\nFor more info, visit [the docs](https://example.com).'
35
+ }}
36
+ />
@@ -0,0 +1,27 @@
1
+ export default MarkdownDisplay;
2
+ type MarkdownDisplay = SvelteComponent<{
3
+ [x: string]: never;
4
+ }, {
5
+ [evt: string]: CustomEvent<any>;
6
+ }, {}> & {
7
+ $$bindings?: string | undefined;
8
+ };
9
+ declare const MarkdownDisplay: $$__sveltets_2_IsomorphicComponent<{
10
+ [x: string]: never;
11
+ }, {
12
+ [evt: string]: CustomEvent<any>;
13
+ }, {}, {}, string>;
14
+ import MarkdownDisplay from './MarkdownDisplay.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,29 @@
1
+ <!--
2
+ MarkdownDisplay Component
3
+ Reusable component for rendering markdown content with consistent styling
4
+ Supports all standard markdown elements with proper typography
5
+ -->
6
+
7
+ <script lang="ts">
8
+ import { marked } from 'marked';
9
+ import { sanitizeHtml } from '../utils/sanitize.js';
10
+
11
+ interface Props {
12
+ content: string;
13
+ className?: string;
14
+ }
15
+
16
+ let props: Props = $props();
17
+
18
+ // Parse markdown content and sanitize to prevent XSS
19
+ let renderedContent = $derived(sanitizeHtml(marked.parse(props.content || '') as string));
20
+
21
+ // Default class name if none provided
22
+ let displayClass = $derived(props.className || 'markdown-display');
23
+ </script>
24
+
25
+ <div class={displayClass}>
26
+ <!-- Content is sanitized with DOMPurify to prevent XSS -->
27
+ <!-- eslint-disable-next-line svelte/no-at-html-tags -->
28
+ {@html renderedContent}
29
+ </div>
@@ -0,0 +1,7 @@
1
+ interface Props {
2
+ content: string;
3
+ className?: string;
4
+ }
5
+ declare const MarkdownDisplay: import("svelte").Component<Props, {}, "">;
6
+ type MarkdownDisplay = ReturnType<typeof MarkdownDisplay>;
7
+ export default MarkdownDisplay;