@vertesia/ui 1.5.0-dev.20260722.120446Z → 1.5.0-dev.20260725.083715Z

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 (307) hide show
  1. package/lib/core/components/shadcn/filters/filterBar.d.ts.map +1 -1
  2. package/lib/core/components/shadcn/filters/filterBar.js +1 -1
  3. package/lib/core/components/shadcn/filters/filterBar.js.map +1 -1
  4. package/lib/core/components/shadcn/modal/dialog.d.ts +1 -1
  5. package/lib/core/components/shadcn/modal/dialog.d.ts.map +1 -1
  6. package/lib/core/components/shadcn/modal/dialog.js +2 -0
  7. package/lib/core/components/shadcn/modal/dialog.js.map +1 -1
  8. package/lib/core/components/shadcn/tabs.d.ts +12 -1
  9. package/lib/core/components/shadcn/tabs.d.ts.map +1 -1
  10. package/lib/core/components/shadcn/tabs.js +12 -4
  11. package/lib/core/components/shadcn/tabs.js.map +1 -1
  12. package/lib/features/agent/chat/AgentRightPanel.d.ts +5 -1
  13. package/lib/features/agent/chat/AgentRightPanel.d.ts.map +1 -1
  14. package/lib/features/agent/chat/AgentRightPanel.js +2 -2
  15. package/lib/features/agent/chat/AgentRightPanel.js.map +1 -1
  16. package/lib/features/agent/chat/ArtifactsTab.d.ts +5 -1
  17. package/lib/features/agent/chat/ArtifactsTab.d.ts.map +1 -1
  18. package/lib/features/agent/chat/ArtifactsTab.js +48 -11
  19. package/lib/features/agent/chat/ArtifactsTab.js.map +1 -1
  20. package/lib/features/agent/chat/DocumentEditingActionCard.d.ts +6 -0
  21. package/lib/features/agent/chat/DocumentEditingActionCard.d.ts.map +1 -0
  22. package/lib/features/agent/chat/DocumentEditingActionCard.js +129 -0
  23. package/lib/features/agent/chat/DocumentEditingActionCard.js.map +1 -0
  24. package/lib/features/agent/chat/ModernAgentConversation.d.ts +19 -1
  25. package/lib/features/agent/chat/ModernAgentConversation.d.ts.map +1 -1
  26. package/lib/features/agent/chat/ModernAgentConversation.js +125 -27
  27. package/lib/features/agent/chat/ModernAgentConversation.js.map +1 -1
  28. package/lib/features/agent/chat/ModernAgentOutput/AgentMarkdownAnchor.d.ts +45 -0
  29. package/lib/features/agent/chat/ModernAgentOutput/AgentMarkdownAnchor.d.ts.map +1 -0
  30. package/lib/features/agent/chat/ModernAgentOutput/AgentMarkdownAnchor.js +40 -0
  31. package/lib/features/agent/chat/ModernAgentOutput/AgentMarkdownAnchor.js.map +1 -0
  32. package/lib/features/agent/chat/ModernAgentOutput/AllMessagesMixed.d.ts +3 -1
  33. package/lib/features/agent/chat/ModernAgentOutput/AllMessagesMixed.d.ts.map +1 -1
  34. package/lib/features/agent/chat/ModernAgentOutput/AllMessagesMixed.js +94 -49
  35. package/lib/features/agent/chat/ModernAgentOutput/AllMessagesMixed.js.map +1 -1
  36. package/lib/features/agent/chat/ModernAgentOutput/AttachmentPreview.d.ts +2 -1
  37. package/lib/features/agent/chat/ModernAgentOutput/AttachmentPreview.d.ts.map +1 -1
  38. package/lib/features/agent/chat/ModernAgentOutput/AttachmentPreview.js +9 -5
  39. package/lib/features/agent/chat/ModernAgentOutput/AttachmentPreview.js.map +1 -1
  40. package/lib/features/agent/chat/ModernAgentOutput/CollapsibleAgentMarkdown.d.ts +25 -0
  41. package/lib/features/agent/chat/ModernAgentOutput/CollapsibleAgentMarkdown.d.ts.map +1 -0
  42. package/lib/features/agent/chat/ModernAgentOutput/CollapsibleAgentMarkdown.js +33 -0
  43. package/lib/features/agent/chat/ModernAgentOutput/CollapsibleAgentMarkdown.js.map +1 -0
  44. package/lib/features/agent/chat/ModernAgentOutput/MessageItem.d.ts +3 -1
  45. package/lib/features/agent/chat/ModernAgentOutput/MessageItem.d.ts.map +1 -1
  46. package/lib/features/agent/chat/ModernAgentOutput/MessageItem.js +22 -24
  47. package/lib/features/agent/chat/ModernAgentOutput/MessageItem.js.map +1 -1
  48. package/lib/features/agent/chat/ModernAgentOutput/ResourceChangeSummary.d.ts +14 -0
  49. package/lib/features/agent/chat/ModernAgentOutput/ResourceChangeSummary.d.ts.map +1 -0
  50. package/lib/features/agent/chat/ModernAgentOutput/ResourceChangeSummary.js +21 -0
  51. package/lib/features/agent/chat/ModernAgentOutput/ResourceChangeSummary.js.map +1 -0
  52. package/lib/features/agent/chat/ModernAgentOutput/ResourceChip.d.ts +30 -0
  53. package/lib/features/agent/chat/ModernAgentOutput/ResourceChip.d.ts.map +1 -0
  54. package/lib/features/agent/chat/ModernAgentOutput/ResourceChip.js +53 -0
  55. package/lib/features/agent/chat/ModernAgentOutput/ResourceChip.js.map +1 -0
  56. package/lib/features/agent/chat/ModernAgentOutput/ToolCallGroup.d.ts.map +1 -1
  57. package/lib/features/agent/chat/ModernAgentOutput/ToolCallGroup.js +21 -2
  58. package/lib/features/agent/chat/ModernAgentOutput/ToolCallGroup.js.map +1 -1
  59. package/lib/features/agent/chat/ModernAgentOutput/resourceLinks.d.ts +6 -0
  60. package/lib/features/agent/chat/ModernAgentOutput/resourceLinks.d.ts.map +1 -0
  61. package/lib/features/agent/chat/ModernAgentOutput/resourceLinks.js +29 -0
  62. package/lib/features/agent/chat/ModernAgentOutput/resourceLinks.js.map +1 -0
  63. package/lib/features/agent/chat/ModernAgentOutput/resourceSummary.d.ts +33 -0
  64. package/lib/features/agent/chat/ModernAgentOutput/resourceSummary.d.ts.map +1 -0
  65. package/lib/features/agent/chat/ModernAgentOutput/resourceSummary.js +129 -0
  66. package/lib/features/agent/chat/ModernAgentOutput/resourceSummary.js.map +1 -0
  67. package/lib/features/agent/chat/ModernAgentOutput/utils.d.ts +7 -0
  68. package/lib/features/agent/chat/ModernAgentOutput/utils.d.ts.map +1 -1
  69. package/lib/features/agent/chat/ModernAgentOutput/utils.js +11 -1
  70. package/lib/features/agent/chat/ModernAgentOutput/utils.js.map +1 -1
  71. package/lib/features/agent/chat/hooks/useAgentStream.d.ts +1 -1
  72. package/lib/features/agent/chat/hooks/useAgentStream.d.ts.map +1 -1
  73. package/lib/features/agent/chat/hooks/useAgentStream.js +24 -9
  74. package/lib/features/agent/chat/hooks/useAgentStream.js.map +1 -1
  75. package/lib/features/agent/chat/index.d.ts +2 -1
  76. package/lib/features/agent/chat/index.d.ts.map +1 -1
  77. package/lib/features/agent/chat/index.js +3 -0
  78. package/lib/features/agent/chat/index.js.map +1 -1
  79. package/lib/features/store/objects/DocumentSearchResults.js +2 -2
  80. package/lib/features/store/objects/DocumentSearchResults.js.map +1 -1
  81. package/lib/features/store/objects/components/ContentOverview.d.ts +2 -1
  82. package/lib/features/store/objects/components/ContentOverview.d.ts.map +1 -1
  83. package/lib/features/store/objects/components/ContentOverview.js +86 -15
  84. package/lib/features/store/objects/components/ContentOverview.js.map +1 -1
  85. package/lib/features/store/objects/components/DocumentEditingConfigurationSelector.d.ts +16 -0
  86. package/lib/features/store/objects/components/DocumentEditingConfigurationSelector.d.ts.map +1 -0
  87. package/lib/features/store/objects/components/DocumentEditingConfigurationSelector.js +116 -0
  88. package/lib/features/store/objects/components/DocumentEditingConfigurationSelector.js.map +1 -0
  89. package/lib/features/store/objects/components/DocumentEditingLockStatus.d.ts +7 -0
  90. package/lib/features/store/objects/components/DocumentEditingLockStatus.d.ts.map +1 -0
  91. package/lib/features/store/objects/components/DocumentEditingLockStatus.js +13 -0
  92. package/lib/features/store/objects/components/DocumentEditingLockStatus.js.map +1 -0
  93. package/lib/features/store/objects/components/DocumentEditingPanel.d.ts +48 -0
  94. package/lib/features/store/objects/components/DocumentEditingPanel.d.ts.map +1 -0
  95. package/lib/features/store/objects/components/DocumentEditingPanel.js +720 -0
  96. package/lib/features/store/objects/components/DocumentEditingPanel.js.map +1 -0
  97. package/lib/features/store/objects/components/TextEditorPanel.d.ts.map +1 -1
  98. package/lib/features/store/objects/components/TextEditorPanel.js +22 -9
  99. package/lib/features/store/objects/components/TextEditorPanel.js.map +1 -1
  100. package/lib/features/store/objects/components/documentArtifactRefs.d.ts +26 -0
  101. package/lib/features/store/objects/components/documentArtifactRefs.d.ts.map +1 -0
  102. package/lib/features/store/objects/components/documentArtifactRefs.js +52 -0
  103. package/lib/features/store/objects/components/documentArtifactRefs.js.map +1 -0
  104. package/lib/features/store/objects/components/documentEditingAgentConfig.d.ts +4 -0
  105. package/lib/features/store/objects/components/documentEditingAgentConfig.d.ts.map +1 -0
  106. package/lib/features/store/objects/components/documentEditingAgentConfig.js +40 -0
  107. package/lib/features/store/objects/components/documentEditingAgentConfig.js.map +1 -0
  108. package/lib/features/store/objects/components/documentEditingPrompts.d.ts +3 -0
  109. package/lib/features/store/objects/components/documentEditingPrompts.d.ts.map +1 -0
  110. package/lib/features/store/objects/components/documentEditingPrompts.js +13 -0
  111. package/lib/features/store/objects/components/documentEditingPrompts.js.map +1 -0
  112. package/lib/features/store/objects/components/documentEditingRun.d.ts +27 -0
  113. package/lib/features/store/objects/components/documentEditingRun.d.ts.map +1 -0
  114. package/lib/features/store/objects/components/documentEditingRun.js +126 -0
  115. package/lib/features/store/objects/components/documentEditingRun.js.map +1 -0
  116. package/lib/features/store/objects/components/documentEditingTarget.d.ts +20 -0
  117. package/lib/features/store/objects/components/documentEditingTarget.d.ts.map +1 -0
  118. package/lib/features/store/objects/components/documentEditingTarget.js +40 -0
  119. package/lib/features/store/objects/components/documentEditingTarget.js.map +1 -0
  120. package/lib/features/store/objects/components/index.d.ts +1 -0
  121. package/lib/features/store/objects/components/index.d.ts.map +1 -1
  122. package/lib/features/store/objects/components/index.js +1 -0
  123. package/lib/features/store/objects/components/index.js.map +1 -1
  124. package/lib/features/store/objects/components/useContentPanelHooks.d.ts +5 -1
  125. package/lib/features/store/objects/components/useContentPanelHooks.d.ts.map +1 -1
  126. package/lib/features/store/objects/components/useContentPanelHooks.js +53 -29
  127. package/lib/features/store/objects/components/useContentPanelHooks.js.map +1 -1
  128. package/lib/features/store/objects/components/useDownloadFile.d.ts +2 -1
  129. package/lib/features/store/objects/components/useDownloadFile.d.ts.map +1 -1
  130. package/lib/features/store/objects/components/useDownloadFile.js +3 -0
  131. package/lib/features/store/objects/components/useDownloadFile.js.map +1 -1
  132. package/lib/features/store/objects/selection/actions/StartWorkflowButton.js +1 -1
  133. package/lib/features/store/objects/selection/actions/StartWorkflowButton.js.map +1 -1
  134. package/lib/i18n/locales/ar.json +118 -1
  135. package/lib/i18n/locales/de.json +118 -1
  136. package/lib/i18n/locales/en.json +118 -0
  137. package/lib/i18n/locales/es.json +118 -1
  138. package/lib/i18n/locales/fr.json +118 -1
  139. package/lib/i18n/locales/it.json +118 -1
  140. package/lib/i18n/locales/ja.json +118 -1
  141. package/lib/i18n/locales/ko.json +118 -1
  142. package/lib/i18n/locales/pt.json +118 -1
  143. package/lib/i18n/locales/ru.json +118 -1
  144. package/lib/i18n/locales/tr.json +118 -1
  145. package/lib/i18n/locales/zh-TW.json +118 -1
  146. package/lib/i18n/locales/zh.json +118 -1
  147. package/lib/rich-text/EditorToolbar.d.ts +37 -0
  148. package/lib/rich-text/EditorToolbar.d.ts.map +1 -0
  149. package/lib/rich-text/EditorToolbar.js +215 -0
  150. package/lib/rich-text/EditorToolbar.js.map +1 -0
  151. package/lib/rich-text/VertesiaRichTextEditor.d.ts +26 -0
  152. package/lib/rich-text/VertesiaRichTextEditor.d.ts.map +1 -0
  153. package/lib/rich-text/VertesiaRichTextEditor.js +67 -0
  154. package/lib/rich-text/VertesiaRichTextEditor.js.map +1 -0
  155. package/lib/rich-text/index.d.ts +2 -0
  156. package/lib/rich-text/index.d.ts.map +1 -0
  157. package/lib/rich-text/index.js +2 -0
  158. package/lib/rich-text/index.js.map +1 -0
  159. package/lib/vertesia-ui-core.js +2 -2
  160. package/lib/vertesia-ui-core.js.map +1 -1
  161. package/lib/vertesia-ui-features.js +35 -30
  162. package/lib/vertesia-ui-features.js.map +1 -1
  163. package/lib/vertesia-ui-i18n.js +14 -14
  164. package/lib/vertesia-ui-i18n.js.map +1 -1
  165. package/lib/vertesia-ui-rich-text.js +5 -0
  166. package/lib/vertesia-ui-rich-text.js.map +1 -0
  167. package/lib/vertesia-ui-widgets.js +25 -7
  168. package/lib/vertesia-ui-widgets.js.map +1 -1
  169. package/lib/widgets/markdown/AgentResourceResolver.d.ts +31 -0
  170. package/lib/widgets/markdown/AgentResourceResolver.d.ts.map +1 -0
  171. package/lib/widgets/markdown/AgentResourceResolver.js +39 -0
  172. package/lib/widgets/markdown/AgentResourceResolver.js.map +1 -0
  173. package/lib/widgets/markdown/ArtifactEditingSurface.d.ts +63 -0
  174. package/lib/widgets/markdown/ArtifactEditingSurface.d.ts.map +1 -0
  175. package/lib/widgets/markdown/ArtifactEditingSurface.js +582 -0
  176. package/lib/widgets/markdown/ArtifactEditingSurface.js.map +1 -0
  177. package/lib/widgets/markdown/CollaborativeMarkdownRenderer.d.ts +69 -0
  178. package/lib/widgets/markdown/CollaborativeMarkdownRenderer.d.ts.map +1 -0
  179. package/lib/widgets/markdown/CollaborativeMarkdownRenderer.js +374 -0
  180. package/lib/widgets/markdown/CollaborativeMarkdownRenderer.js.map +1 -0
  181. package/lib/widgets/markdown/MarkdownLink.d.ts +3 -1
  182. package/lib/widgets/markdown/MarkdownLink.d.ts.map +1 -1
  183. package/lib/widgets/markdown/MarkdownLink.js +41 -14
  184. package/lib/widgets/markdown/MarkdownLink.js.map +1 -1
  185. package/lib/widgets/markdown/MarkdownRenderer.d.ts +8 -1
  186. package/lib/widgets/markdown/MarkdownRenderer.d.ts.map +1 -1
  187. package/lib/widgets/markdown/MarkdownRenderer.js +20 -4
  188. package/lib/widgets/markdown/MarkdownRenderer.js.map +1 -1
  189. package/lib/widgets/markdown/index.d.ts +5 -1
  190. package/lib/widgets/markdown/index.d.ts.map +1 -1
  191. package/lib/widgets/markdown/index.js +5 -1
  192. package/lib/widgets/markdown/index.js.map +1 -1
  193. package/lib/widgets/markdown/normalizeCustomSchemeLinks.d.ts.map +1 -1
  194. package/lib/widgets/markdown/normalizeCustomSchemeLinks.js +14 -2
  195. package/lib/widgets/markdown/normalizeCustomSchemeLinks.js.map +1 -1
  196. package/lib/widgets/markdown/textDiff.d.ts +52 -0
  197. package/lib/widgets/markdown/textDiff.d.ts.map +1 -0
  198. package/lib/widgets/markdown/textDiff.js +362 -0
  199. package/lib/widgets/markdown/textDiff.js.map +1 -0
  200. package/lib/widgets/markdown/useArtifactContent.d.ts +5 -3
  201. package/lib/widgets/markdown/useArtifactContent.d.ts.map +1 -1
  202. package/lib/widgets/markdown/useArtifactContent.js +6 -3
  203. package/lib/widgets/markdown/useArtifactContent.js.map +1 -1
  204. package/lib/widgets/markdown/useResolvedUrl.d.ts +1 -5
  205. package/lib/widgets/markdown/useResolvedUrl.d.ts.map +1 -1
  206. package/lib/widgets/markdown/useResolvedUrl.js +19 -31
  207. package/lib/widgets/markdown/useResolvedUrl.js.map +1 -1
  208. package/lib/widgets/xml-viewer/hooks/useXMLViewer.d.ts +9 -0
  209. package/lib/widgets/xml-viewer/hooks/useXMLViewer.d.ts.map +1 -1
  210. package/lib/widgets/xml-viewer/hooks/useXMLViewer.js +20 -17
  211. package/lib/widgets/xml-viewer/hooks/useXMLViewer.js.map +1 -1
  212. package/package.json +13 -9
  213. package/src/__tests__/a11y.test.tsx +4 -1
  214. package/src/__tests__/axe-helper.ts +17 -7
  215. package/src/__tests__/setup.ts +25 -0
  216. package/src/core/components/shadcn/filters/filterBar.tsx +1 -0
  217. package/src/core/components/shadcn/modal/dialog.tsx +3 -1
  218. package/src/core/components/shadcn/tabs.test.tsx +65 -0
  219. package/src/core/components/shadcn/tabs.tsx +25 -3
  220. package/src/features/agent/chat/AgentRightPanel.tsx +16 -1
  221. package/src/features/agent/chat/ArtifactsTab.test.tsx +55 -0
  222. package/src/features/agent/chat/ArtifactsTab.tsx +203 -52
  223. package/src/features/agent/chat/DocumentEditingActionCard.test.tsx +105 -0
  224. package/src/features/agent/chat/DocumentEditingActionCard.tsx +210 -0
  225. package/src/features/agent/chat/ModernAgentConversation.test.tsx +237 -40
  226. package/src/features/agent/chat/ModernAgentConversation.tsx +247 -75
  227. package/src/features/agent/chat/ModernAgentOutput/AgentMarkdownAnchor.test.tsx +79 -0
  228. package/src/features/agent/chat/ModernAgentOutput/AgentMarkdownAnchor.tsx +94 -0
  229. package/src/features/agent/chat/ModernAgentOutput/AllMessagesMixed.test.tsx +257 -34
  230. package/src/features/agent/chat/ModernAgentOutput/AllMessagesMixed.tsx +217 -105
  231. package/src/features/agent/chat/ModernAgentOutput/AttachmentPreview.tsx +17 -0
  232. package/src/features/agent/chat/ModernAgentOutput/CollapsibleAgentMarkdown.test.tsx +44 -0
  233. package/src/features/agent/chat/ModernAgentOutput/CollapsibleAgentMarkdown.tsx +88 -0
  234. package/src/features/agent/chat/ModernAgentOutput/MessageItem.tsx +30 -46
  235. package/src/features/agent/chat/ModernAgentOutput/ResourceChangeSummary.tsx +40 -0
  236. package/src/features/agent/chat/ModernAgentOutput/ResourceChip.test.tsx +148 -0
  237. package/src/features/agent/chat/ModernAgentOutput/ResourceChip.tsx +141 -0
  238. package/src/features/agent/chat/ModernAgentOutput/ToolCallGroup.tsx +33 -1
  239. package/src/features/agent/chat/ModernAgentOutput/resourceLinks.tsx +43 -0
  240. package/src/features/agent/chat/ModernAgentOutput/resourceSummary.test.ts +229 -0
  241. package/src/features/agent/chat/ModernAgentOutput/resourceSummary.ts +152 -0
  242. package/src/features/agent/chat/ModernAgentOutput/utils.test.ts +17 -0
  243. package/src/features/agent/chat/ModernAgentOutput/utils.ts +14 -1
  244. package/src/features/agent/chat/hooks/useAgentStream.test.tsx +188 -0
  245. package/src/features/agent/chat/hooks/useAgentStream.ts +28 -8
  246. package/src/features/agent/chat/index.ts +11 -0
  247. package/src/features/store/objects/DocumentSearchResults.tsx +2 -2
  248. package/src/features/store/objects/components/ContentOverview.tsx +216 -65
  249. package/src/features/store/objects/components/DocumentEditingConfigurationSelector.test.ts +34 -0
  250. package/src/features/store/objects/components/DocumentEditingConfigurationSelector.tsx +211 -0
  251. package/src/features/store/objects/components/DocumentEditingLockStatus.test.tsx +32 -0
  252. package/src/features/store/objects/components/DocumentEditingLockStatus.tsx +45 -0
  253. package/src/features/store/objects/components/DocumentEditingPanel.test.tsx +336 -0
  254. package/src/features/store/objects/components/DocumentEditingPanel.tsx +1236 -0
  255. package/src/features/store/objects/components/TextEditorPanel.test.tsx +48 -0
  256. package/src/features/store/objects/components/TextEditorPanel.tsx +41 -20
  257. package/src/features/store/objects/components/documentArtifactRefs.test.ts +65 -0
  258. package/src/features/store/objects/components/documentArtifactRefs.ts +72 -0
  259. package/src/features/store/objects/components/documentEditingAgentConfig.test.ts +28 -0
  260. package/src/features/store/objects/components/documentEditingAgentConfig.ts +41 -0
  261. package/src/features/store/objects/components/documentEditingPrompts.test.ts +26 -0
  262. package/src/features/store/objects/components/documentEditingPrompts.ts +12 -0
  263. package/src/features/store/objects/components/documentEditingRun.test.ts +176 -0
  264. package/src/features/store/objects/components/documentEditingRun.ts +184 -0
  265. package/src/features/store/objects/components/documentEditingTarget.test.ts +96 -0
  266. package/src/features/store/objects/components/documentEditingTarget.ts +63 -0
  267. package/src/features/store/objects/components/index.ts +1 -0
  268. package/src/features/store/objects/components/useContentPanelHooks.ts +52 -27
  269. package/src/features/store/objects/components/useDownloadFile.test.ts +20 -0
  270. package/src/features/store/objects/components/useDownloadFile.ts +5 -1
  271. package/src/features/store/objects/selection/actions/StartWorkflowButton.tsx +2 -2
  272. package/src/i18n/locales/ar.json +118 -1
  273. package/src/i18n/locales/de.json +118 -1
  274. package/src/i18n/locales/en.json +118 -0
  275. package/src/i18n/locales/es.json +118 -1
  276. package/src/i18n/locales/fr.json +118 -1
  277. package/src/i18n/locales/it.json +118 -1
  278. package/src/i18n/locales/ja.json +118 -1
  279. package/src/i18n/locales/ko.json +118 -1
  280. package/src/i18n/locales/pt.json +118 -1
  281. package/src/i18n/locales/ru.json +118 -1
  282. package/src/i18n/locales/tr.json +118 -1
  283. package/src/i18n/locales/zh-TW.json +118 -1
  284. package/src/i18n/locales/zh.json +118 -1
  285. package/src/rich-text/EditorToolbar.tsx +708 -0
  286. package/src/rich-text/VertesiaRichTextEditor.test.tsx +211 -0
  287. package/src/rich-text/VertesiaRichTextEditor.tsx +241 -0
  288. package/src/rich-text/index.ts +9 -0
  289. package/src/session/UserSession.test.ts +11 -11
  290. package/src/widgets/markdown/AgentResourceResolver.test.ts +24 -0
  291. package/src/widgets/markdown/AgentResourceResolver.tsx +70 -0
  292. package/src/widgets/markdown/ArtifactEditingSurface.test.tsx +537 -0
  293. package/src/widgets/markdown/ArtifactEditingSurface.tsx +878 -0
  294. package/src/widgets/markdown/CollaborativeMarkdownRenderer.test.tsx +484 -0
  295. package/src/widgets/markdown/CollaborativeMarkdownRenderer.tsx +825 -0
  296. package/src/widgets/markdown/MarkdownLink.test.tsx +122 -0
  297. package/src/widgets/markdown/MarkdownLink.tsx +102 -17
  298. package/src/widgets/markdown/MarkdownRenderer.tsx +30 -3
  299. package/src/widgets/markdown/index.ts +39 -1
  300. package/src/widgets/markdown/normalizeCustomSchemeLinks.ts +15 -2
  301. package/src/widgets/markdown/textDiff.test.ts +156 -0
  302. package/src/widgets/markdown/textDiff.ts +399 -0
  303. package/src/widgets/markdown/useArtifactContent.ts +9 -3
  304. package/src/widgets/markdown/useResolvedUrl.test.ts +29 -40
  305. package/src/widgets/markdown/useResolvedUrl.ts +33 -35
  306. package/src/widgets/xml-viewer/hooks/useXMLViewer.test.ts +26 -0
  307. package/src/widgets/xml-viewer/hooks/useXMLViewer.ts +23 -18
@@ -0,0 +1,69 @@
1
+ import type { Element } from 'hast';
2
+ import React from 'react';
3
+ import type { Components } from 'react-markdown';
4
+ import { type MarkdownRendererProps } from './MarkdownRenderer';
5
+ export type MarkdownEditingResource = {
6
+ kind: 'store_document';
7
+ document_id: string;
8
+ name?: string;
9
+ } | {
10
+ kind: 'agent_artifact';
11
+ run_id: string;
12
+ path: string;
13
+ };
14
+ export type MarkdownBlockType = 'heading' | 'paragraph' | 'list'
15
+ /** Legacy anchors from before lists became the selectable unit. */
16
+ | 'list_item' | 'blockquote' | 'code_block' | 'table'
17
+ /** Thematic break / horizontal rule (`---`). */
18
+ | 'separator';
19
+ export interface MarkdownBlockAnchor {
20
+ block_id: string;
21
+ block_type: MarkdownBlockType;
22
+ heading_path?: string[];
23
+ source_range?: {
24
+ start: number;
25
+ end: number;
26
+ };
27
+ exact_text: string;
28
+ prefix?: string;
29
+ suffix?: string;
30
+ /** Zero-based occurrence among identical blocks under the same heading path. */
31
+ occurrence_index?: number;
32
+ }
33
+ export interface MarkdownEditingAction {
34
+ operation_id: string;
35
+ resource: MarkdownEditingResource;
36
+ base_version?: string;
37
+ action: 'comment' | 'edit';
38
+ anchor: MarkdownBlockAnchor;
39
+ comment?: string;
40
+ user_change?: {
41
+ before: string;
42
+ after: string;
43
+ };
44
+ /** True when the client already committed this change to the resource. */
45
+ applied?: boolean;
46
+ /** Revision/document id produced by an applied change. */
47
+ updated_document_id?: string;
48
+ }
49
+ export interface CollaborativeMarkdownRendererProps extends Omit<MarkdownRendererProps, 'children' | 'components'> {
50
+ children: string;
51
+ resource: MarkdownEditingResource;
52
+ baseVersion?: string;
53
+ components?: Components;
54
+ readOnly?: boolean;
55
+ /** Keep comments available when content mutations are read-only (for example while the agent is working). */
56
+ allowComments?: boolean;
57
+ highlightChangesFrom?: string;
58
+ highlightVersion?: number;
59
+ onAction: (action: MarkdownEditingAction) => void | Promise<void>;
60
+ }
61
+ export declare function createMarkdownBlockAnchor(markdown: string, node: Element | undefined, blockType: MarkdownBlockType): MarkdownBlockAnchor;
62
+ /**
63
+ * Apply a user edit to the markdown source. Returns the updated markdown, or
64
+ * undefined when the anchored content cannot be located unambiguously.
65
+ */
66
+ export declare function applyMarkdownEditingChange(markdown: string, action: MarkdownEditingAction): string | undefined;
67
+ export declare function formatMarkdownEditingAction(action: MarkdownEditingAction): string;
68
+ export declare function CollaborativeMarkdownRenderer({ children: markdown, resource, baseVersion, artifactRunId, components, readOnly, allowComments, highlightChangesFrom, highlightVersion, onAction, className, ...markdownProps }: CollaborativeMarkdownRendererProps): React.JSX.Element;
69
+ //# sourceMappingURL=CollaborativeMarkdownRenderer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CollaborativeMarkdownRenderer.d.ts","sourceRoot":"","sources":["../../../src/widgets/markdown/CollaborativeMarkdownRenderer.tsx"],"names":[],"mappings":"AAWA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,MAAM,CAAC;AAgBpC,OAAO,KAUN,MAAM,OAAO,CAAC;AACf,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AACjD,OAAO,EAAoB,KAAK,qBAAqB,EAAE,MAAM,oBAAoB,CAAC;AAElF,MAAM,MAAM,uBAAuB,GAC7B;IACI,IAAI,EAAE,gBAAgB,CAAC;IACvB,WAAW,EAAE,MAAM,CAAC;IACpB,IAAI,CAAC,EAAE,MAAM,CAAC;CACjB,GACD;IACI,IAAI,EAAE,gBAAgB,CAAC;IACvB,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;CAChB,CAAC;AAER,MAAM,MAAM,iBAAiB,GACvB,SAAS,GACT,WAAW,GACX,MAAM;AACR,mEAAmE;GACjE,WAAW,GACX,YAAY,GACZ,YAAY,GACZ,OAAO;AACT,gDAAgD;GAC9C,WAAW,CAAC;AAKlB,MAAM,WAAW,mBAAmB;IAChC,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,iBAAiB,CAAC;IAC9B,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;IACxB,YAAY,CAAC,EAAE;QACX,KAAK,EAAE,MAAM,CAAC;QACd,GAAG,EAAE,MAAM,CAAC;KACf,CAAC;IACF,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,gFAAgF;IAChF,gBAAgB,CAAC,EAAE,MAAM,CAAC;CAC7B;AAED,MAAM,WAAW,qBAAqB;IAClC,YAAY,EAAE,MAAM,CAAC;IACrB,QAAQ,EAAE,uBAAuB,CAAC;IAClC,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,MAAM,EAAE,SAAS,GAAG,MAAM,CAAC;IAC3B,MAAM,EAAE,mBAAmB,CAAC;IAC5B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,WAAW,CAAC,EAAE;QACV,MAAM,EAAE,MAAM,CAAC;QACf,KAAK,EAAE,MAAM,CAAC;KACjB,CAAC;IACF,0EAA0E;IAC1E,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,0DAA0D;IAC1D,mBAAmB,CAAC,EAAE,MAAM,CAAC;CAChC;AAED,MAAM,WAAW,kCAAmC,SAAQ,IAAI,CAAC,qBAAqB,EAAE,UAAU,GAAG,YAAY,CAAC;IAC9G,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,uBAAuB,CAAC;IAClC,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,UAAU,CAAC,EAAE,UAAU,CAAC;IACxB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,6GAA6G;IAC7G,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,QAAQ,EAAE,CAAC,MAAM,EAAE,qBAAqB,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CACrE;AAuFD,wBAAgB,yBAAyB,CACrC,QAAQ,EAAE,MAAM,EAChB,IAAI,EAAE,OAAO,GAAG,SAAS,EACzB,SAAS,EAAE,iBAAiB,GAC7B,mBAAmB,CAErB;AAuED;;;GAGG;AACH,wBAAgB,0BAA0B,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,qBAAqB,GAAG,MAAM,GAAG,SAAS,CAsB9G;AAED,wBAAgB,2BAA2B,CAAC,MAAM,EAAE,qBAAqB,GAAG,MAAM,CAyDjF;AA0RD,wBAAgB,6BAA6B,CAAC,EAC1C,QAAQ,EAAE,QAAQ,EAClB,QAAQ,EACR,WAAW,EACX,aAAa,EACb,UAAU,EACV,QAAgB,EAChB,aAAyB,EACzB,oBAAoB,EACpB,gBAAoB,EACpB,QAAQ,EACR,SAAS,EACT,GAAG,aAAa,EACnB,EAAE,kCAAkC,qBAyKpC"}
@@ -0,0 +1,374 @@
1
+ import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
2
+ import { Button, cn, DropdownMenu, DropdownMenuContent, DropdownMenuItem, DropdownMenuTrigger, Textarea, VTooltip, } from '@vertesia/ui/core';
3
+ import { useUITranslation } from '@vertesia/ui/i18n';
4
+ import { BarChart3, Code2, Heading2, Link, List, MessageSquare, Pencil, Pilcrow, Plus, Quote, Send, Table2, X, } from 'lucide-react';
5
+ import React, { createContext, lazy, Suspense, useCallback, useContext, useEffect, useMemo, useRef, useState, } from 'react';
6
+ import { MarkdownRenderer } from './MarkdownRenderer';
7
+ /** Container blocks whose inner blocks must not offer their own selection controls. */
8
+ const CONTAINER_BLOCK_TYPES = new Set(['list', 'blockquote', 'table']);
9
+ const CollaborativeMarkdownContext = createContext(null);
10
+ /** True inside a selectable container block (list, blockquote, table). */
11
+ const NestedMarkdownBlockContext = createContext(false);
12
+ const MarkdownComponentEditor = lazy(() => import('@vertesia/ui/rich-text').then((module) => ({ default: module.VertesiaMarkdownComponentEditor })));
13
+ const CONTEXT_LENGTH = 80;
14
+ const ATX_HEADING = /^ {0,3}(#{1,6})[\t ]+(.+?)[\t ]*#*[\t ]*$/;
15
+ const FENCE = /^ {0,3}(`{3,}|~{3,})/;
16
+ function createOperationId() {
17
+ if (typeof crypto !== 'undefined' && 'randomUUID' in crypto) {
18
+ return crypto.randomUUID();
19
+ }
20
+ return `edit-${Date.now()}-${Math.random().toString(36).slice(2, 10)}`;
21
+ }
22
+ function createMarkdownBlockLocator(markdown, node, blockType) {
23
+ const start = node?.position?.start.offset;
24
+ const end = node?.position?.end.offset;
25
+ const hasRange = typeof start === 'number' && typeof end === 'number' && start >= 0 && end >= start;
26
+ const exactText = hasRange ? markdown.slice(start, end) : '';
27
+ return {
28
+ block_id: hasRange ? `${blockType}:${start}:${end}` : `${blockType}:${createOperationId()}`,
29
+ block_type: blockType,
30
+ ...(hasRange ? { source_range: { start, end } } : {}),
31
+ exact_text: exactText,
32
+ ...(hasRange && start > 0 ? { prefix: markdown.slice(Math.max(0, start - CONTEXT_LENGTH), start) } : {}),
33
+ ...(hasRange && end < markdown.length
34
+ ? { suffix: markdown.slice(end, Math.min(markdown.length, end + CONTEXT_LENGTH)) }
35
+ : {}),
36
+ };
37
+ }
38
+ function enrichMarkdownBlockAnchor(markdown, anchor) {
39
+ const start = anchor.source_range?.start;
40
+ if (typeof start !== 'number')
41
+ return anchor;
42
+ const headingPath = getHeadingPath(markdown, start);
43
+ const occurrenceIndex = getOccurrenceIndex(markdown, anchor.exact_text, start, headingPath);
44
+ return {
45
+ ...anchor,
46
+ ...(headingPath.length > 0 ? { heading_path: headingPath } : {}),
47
+ occurrence_index: occurrenceIndex,
48
+ };
49
+ }
50
+ export function createMarkdownBlockAnchor(markdown, node, blockType) {
51
+ return enrichMarkdownBlockAnchor(markdown, createMarkdownBlockLocator(markdown, node, blockType));
52
+ }
53
+ function getHeadingPath(markdown, offset) {
54
+ const headings = [];
55
+ let inFence = null;
56
+ let cursor = 0;
57
+ for (const line of markdown.slice(0, offset).split('\n')) {
58
+ const fenceMatch = FENCE.exec(line);
59
+ if (fenceMatch) {
60
+ const marker = fenceMatch[1]?.[0];
61
+ if (!inFence)
62
+ inFence = marker ?? null;
63
+ else if (marker === inFence)
64
+ inFence = null;
65
+ cursor += line.length + 1;
66
+ continue;
67
+ }
68
+ if (!inFence) {
69
+ const headingMatch = ATX_HEADING.exec(line);
70
+ if (headingMatch) {
71
+ const level = headingMatch[1]?.length ?? 1;
72
+ const title = headingMatch[2]?.trim();
73
+ if (title) {
74
+ headings.length = level - 1;
75
+ headings[level - 1] = title;
76
+ }
77
+ }
78
+ }
79
+ cursor += line.length + 1;
80
+ if (cursor > offset)
81
+ break;
82
+ }
83
+ return headings.filter((heading) => Boolean(heading));
84
+ }
85
+ function getOccurrenceIndex(markdown, exactText, offset, headingPath) {
86
+ if (!exactText)
87
+ return 0;
88
+ let occurrenceIndex = 0;
89
+ let candidate = markdown.indexOf(exactText);
90
+ while (candidate >= 0 && candidate < offset) {
91
+ const candidateHeadingPath = getHeadingPath(markdown, candidate);
92
+ if (candidateHeadingPath.length === headingPath.length &&
93
+ candidateHeadingPath.every((heading, index) => heading === headingPath[index])) {
94
+ occurrenceIndex++;
95
+ }
96
+ candidate = markdown.indexOf(exactText, candidate + Math.max(1, exactText.length));
97
+ }
98
+ return occurrenceIndex;
99
+ }
100
+ function resourceReference(resource) {
101
+ if (resource.kind === 'store_document') {
102
+ return `store:${resource.document_id}`;
103
+ }
104
+ return `artifact:${resource.path} (run ${resource.run_id})`;
105
+ }
106
+ function markdownFence(...values) {
107
+ let longestRun = 0;
108
+ for (const value of values) {
109
+ for (const match of value.matchAll(/`+/g)) {
110
+ longestRun = Math.max(longestRun, match[0].length);
111
+ }
112
+ }
113
+ return '`'.repeat(Math.max(3, longestRun + 1));
114
+ }
115
+ /**
116
+ * Apply a user edit to the markdown source. Returns the updated markdown, or
117
+ * undefined when the anchored content cannot be located unambiguously.
118
+ */
119
+ export function applyMarkdownEditingChange(markdown, action) {
120
+ const change = action.user_change;
121
+ if (!change)
122
+ return undefined;
123
+ const { before, after } = change;
124
+ const range = action.anchor.source_range;
125
+ if (range && markdown.slice(range.start, range.end) === before) {
126
+ return markdown.slice(0, range.start) + after + markdown.slice(range.end);
127
+ }
128
+ const prefix = action.anchor.prefix;
129
+ if (prefix) {
130
+ const anchored = markdown.indexOf(prefix + before);
131
+ if (anchored >= 0 && markdown.indexOf(prefix + before, anchored + 1) < 0) {
132
+ const start = anchored + prefix.length;
133
+ return markdown.slice(0, start) + after + markdown.slice(start + before.length);
134
+ }
135
+ }
136
+ const first = markdown.indexOf(before);
137
+ if (first < 0 || markdown.indexOf(before, first + 1) >= 0)
138
+ return undefined;
139
+ return markdown.slice(0, first) + after + markdown.slice(first + before.length);
140
+ }
141
+ export function formatMarkdownEditingAction(action) {
142
+ const reference = resourceReference(action.resource);
143
+ const location = action.anchor.block_type.replace('_', ' ');
144
+ if (action.action === 'edit' && action.user_change && action.applied) {
145
+ const fence = markdownFence(action.user_change.before, action.user_change.after);
146
+ return [
147
+ `I already edited the ${location} in ${reference} myself and the change is saved` +
148
+ `${action.updated_document_id ? ` as revision ${action.updated_document_id}` : ''}.`,
149
+ `Operation: ${action.operation_id}`,
150
+ 'This is a notification only. Do not apply this change again and do not modify the document in ' +
151
+ 'response; acknowledge briefly and use the latest content going forward.',
152
+ '',
153
+ 'Before:',
154
+ `${fence}markdown`,
155
+ action.user_change.before,
156
+ fence,
157
+ '',
158
+ 'After:',
159
+ `${fence}markdown`,
160
+ action.user_change.after,
161
+ fence,
162
+ ].join('\n');
163
+ }
164
+ if (action.action === 'edit' && action.user_change) {
165
+ const fence = markdownFence(action.user_change.before, action.user_change.after);
166
+ return [
167
+ `Apply my edit to the ${location} in ${reference}, then update the resource.`,
168
+ `Operation: ${action.operation_id}`,
169
+ 'Preserve all content outside the selected block exactly; do not regenerate unrelated sections.',
170
+ '',
171
+ 'Before:',
172
+ `${fence}markdown`,
173
+ action.user_change.before,
174
+ fence,
175
+ '',
176
+ 'After:',
177
+ `${fence}markdown`,
178
+ action.user_change.after,
179
+ fence,
180
+ ].join('\n');
181
+ }
182
+ const fence = markdownFence(action.anchor.exact_text);
183
+ return [
184
+ `Update the ${location} in ${reference} based on this comment:`,
185
+ `Operation: ${action.operation_id}`,
186
+ 'Preserve all content outside the selected block exactly; do not regenerate unrelated sections.',
187
+ '',
188
+ action.comment ?? '',
189
+ '',
190
+ 'Selected content:',
191
+ `${fence}markdown`,
192
+ action.anchor.exact_text,
193
+ fence,
194
+ ].join('\n');
195
+ }
196
+ function useCollaborativeMarkdownContext() {
197
+ const context = useContext(CollaborativeMarkdownContext);
198
+ if (!context) {
199
+ throw new Error('Collaborative Markdown blocks must be rendered inside CollaborativeMarkdownRenderer');
200
+ }
201
+ return context;
202
+ }
203
+ function CollaborativeBlockEditor({ anchor, mode, initialDraft }) {
204
+ const { t } = useUITranslation();
205
+ const { artifactRunId, readOnly, allowComments, cancelEditing, submit, updateDraft } = useCollaborativeMarkdownContext();
206
+ const [draft, setDraft] = useState(mode === 'edit' ? anchor.exact_text : mode === 'insert' ? (initialDraft ?? '') : '');
207
+ const [isSubmitting, setIsSubmitting] = useState(false);
208
+ const isActionDisabled = mode === 'comment' ? !allowComments : readOnly;
209
+ const changeDraft = (nextDraft) => {
210
+ setDraft(nextDraft);
211
+ updateDraft(nextDraft);
212
+ };
213
+ const submitDraft = async () => {
214
+ if (!draft.trim() || isSubmitting)
215
+ return;
216
+ setIsSubmitting(true);
217
+ try {
218
+ await submit(anchor, mode, mode === 'comment' ? draft.trim() : draft);
219
+ }
220
+ finally {
221
+ setIsSubmitting(false);
222
+ }
223
+ };
224
+ return (_jsxs("div", { className: "mb-2 space-y-2", children: [mode === 'edit' || mode === 'insert' ? (_jsx(Suspense, { fallback: _jsx(Textarea, { value: draft, onChange: (event) => changeDraft(event.target.value), placeholder: t('agent.editSelectionPlaceholder'), rows: 6, autoFocus: true }), children: _jsx(MarkdownComponentEditor, { value: draft, onChange: changeDraft, artifactRunId: artifactRunId, editable: !readOnly, externalValueSync: "manual", autoFocus: true }) })) : (_jsx(Textarea, { value: draft, onChange: (event) => changeDraft(event.target.value), placeholder: t('agent.commentOnSelectionPlaceholder'), rows: 3, autoFocus: true, disabled: !allowComments })), _jsxs("div", { className: "flex justify-end gap-2", children: [_jsxs(Button, { variant: "outline", size: "sm", onClick: cancelEditing, disabled: isSubmitting, children: [_jsx(X, { className: "me-1 size-4" }), t('store.cancelEdit')] }), _jsxs(Button, { size: "sm", onClick: () => void submitDraft(), disabled: isActionDisabled || !draft.trim() || isSubmitting, children: [_jsx(Send, { className: "me-1 size-4" }), t('agent.send')] })] })] }));
225
+ }
226
+ function createBlockComponent(tag, blockType, ExistingComponent) {
227
+ return function CollaborativeBlock({ node, children: blockChildren, ...props }) {
228
+ const { t } = useUITranslation();
229
+ const { markdown, readOnly, allowComments, activeEditing, highlightChangesFrom, flashChangedBlocks, beginEditing, } = useCollaborativeMarkdownContext();
230
+ const isNested = useContext(NestedMarkdownBlockContext);
231
+ const rendered = ExistingComponent
232
+ ? React.createElement(ExistingComponent, { node, ...props }, blockChildren)
233
+ : React.createElement(tag, props, blockChildren);
234
+ // Blocks inside a selectable container (a bullet's paragraph, a nested list, a
235
+ // quoted paragraph) are edited through their container, not individually.
236
+ if (isNested)
237
+ return rendered;
238
+ const anchor = createMarkdownBlockLocator(markdown, node, blockType);
239
+ const hasAnchor = Boolean(anchor.source_range && anchor.exact_text);
240
+ const isEditable = !readOnly && hasAnchor;
241
+ const isCommentable = allowComments && hasAnchor;
242
+ const isSelected = activeEditing?.anchor.block_id === anchor.block_id;
243
+ // While editing a block's content, the editor replaces the rendered block. Comment/insert
244
+ // keep the rendered block visible as context.
245
+ const isEditingContent = isSelected && activeEditing?.mode === 'edit';
246
+ const isChanged = flashChangedBlocks &&
247
+ Boolean(anchor.exact_text) &&
248
+ Boolean(highlightChangesFrom) &&
249
+ !highlightChangesFrom?.includes(anchor.exact_text);
250
+ const containerClassName = cn('group/collab relative rounded-md border transition-colors duration-700',
251
+ // Negative margins keep the document's flow spacing while giving the hover/selection box
252
+ // padding on all sides — otherwise text (notably the first block, whose prose margin-top
253
+ // is 0) sits flush against the top of its highlight box.
254
+ '-mx-2 -my-1 px-2 py-1', isEditingContent
255
+ ? 'border-transparent'
256
+ : isSelected
257
+ ? 'border-info bg-mixer-info/5'
258
+ : isEditable || isCommentable
259
+ ? 'border-transparent hover:border-mixer-info/30 hover:bg-mixer-muted/10'
260
+ : 'border-transparent', isChanged && 'border-mixer-success/50 bg-mixer-success/15 ring-1 ring-mixer-success/20');
261
+ const showControls = isEditable || isCommentable || isSelected;
262
+ const controls = showControls ? (_jsxs(_Fragment, { children: [_jsxs("div", { className: cn('absolute end-1 top-1 z-10 flex items-center gap-0.5 rounded-md border bg-background p-0.5 shadow-sm', ((!isEditable && !isCommentable) || isEditingContent) && 'hidden', isSelected
263
+ ? 'opacity-100'
264
+ : 'pointer-events-none opacity-0 group-hover/collab:pointer-events-auto group-hover/collab:opacity-100 group-focus-within/collab:pointer-events-auto group-focus-within/collab:opacity-100'), children: [isCommentable ? (_jsx(VTooltip, { description: t('agent.commentOnSelection'), asChild: true, children: _jsx(Button, { variant: "ghost", size: "sm", className: "h-7 w-7 p-0", "aria-label": t('agent.commentOnSelection'), onClick: () => beginEditing(anchor, 'comment'), children: _jsx(MessageSquare, { className: "size-4" }) }) })) : null, isEditable ? (_jsx(VTooltip, { description: t('agent.editSelection'), asChild: true, children: _jsx(Button, { variant: "ghost", size: "sm", className: "h-7 w-7 p-0", "aria-label": t('agent.editSelection'), onClick: () => beginEditing(anchor, 'edit'), children: _jsx(Pencil, { className: "size-4" }) }) })) : null, isEditable ? (_jsxs(DropdownMenu, { children: [_jsx(VTooltip, { description: t('agent.insertComponent'), asChild: true, children: _jsx(DropdownMenuTrigger, { asChild: true, children: _jsx(Button, { variant: "ghost", size: "sm", className: "h-7 w-7 p-0", "aria-label": t('agent.insertComponent'), children: _jsx(Plus, { className: "size-4" }) }) }) }), _jsxs(DropdownMenuContent, { align: "end", className: "w-52", children: [_jsxs(DropdownMenuItem, { onClick: () => beginEditing(anchor, 'insert', t('richText.paragraph')), children: [_jsx(Pilcrow, {}), t('richText.paragraph')] }), _jsxs(DropdownMenuItem, { onClick: () => beginEditing(anchor, 'insert', `## ${t('richText.heading2')}`), children: [_jsx(Heading2, {}), t('richText.heading2')] }), _jsxs(DropdownMenuItem, { onClick: () => beginEditing(anchor, 'insert', `- ${t('richText.bulletList')}`), children: [_jsx(List, {}), t('richText.bulletList')] }), _jsxs(DropdownMenuItem, { onClick: () => beginEditing(anchor, 'insert', `> ${t('richText.blockquote')}`), children: [_jsx(Quote, {}), t('richText.blockquote')] }), _jsxs(DropdownMenuItem, { onClick: () => beginEditing(anchor, 'insert', '```\nCode\n```'), children: [_jsx(Code2, {}), t('richText.codeBlock')] }), _jsxs(DropdownMenuItem, { onClick: () => beginEditing(anchor, 'insert', '| Column | Value |\n| --- | --- |\n| A | 1 |'), children: [_jsx(Table2, {}), t('richText.table')] }), _jsxs(DropdownMenuItem, { onClick: () => beginEditing(anchor, 'insert', `[${t('agent.insertLink')}](https://example.com)`), children: [_jsx(Link, {}), t('agent.insertLink')] }), _jsxs(DropdownMenuItem, { onClick: () => beginEditing(anchor, 'insert', '```chart\n{"$schema":"https://vega.github.io/schema/vega-lite/v5.json","data":{"values":[{"category":"A","value":1}]},"mark":"bar","encoding":{"x":{"field":"category","type":"nominal"},"y":{"field":"value","type":"quantitative"}}}\n```'), children: [_jsx(BarChart3, {}), t('agent.insertChart')] })] })] })) : null] }), isSelected && activeEditing ? (_jsx(CollaborativeBlockEditor, { anchor: activeEditing.anchor, mode: activeEditing.mode, initialDraft: activeEditing.initialDraft }, `${activeEditing.anchor.block_id}:${activeEditing.mode}:${activeEditing.initialDraft ?? ''}`)) : null] })) : null;
265
+ const content = CONTAINER_BLOCK_TYPES.has(blockType) ? (_jsx(NestedMarkdownBlockContext.Provider, { value: true, children: rendered })) : (rendered);
266
+ return (_jsxs("div", { className: containerClassName, "data-collaborative-block": anchor.block_id, children: [isEditingContent ? null : content, controls] }));
267
+ };
268
+ }
269
+ export function CollaborativeMarkdownRenderer({ children: markdown, resource, baseVersion, artifactRunId, components, readOnly = false, allowComments = !readOnly, highlightChangesFrom, highlightVersion = 0, onAction, className, ...markdownProps }) {
270
+ const { t } = useUITranslation();
271
+ const [activeEditing, setActiveEditing] = useState();
272
+ const [orphanedDraft, setOrphanedDraft] = useState();
273
+ const [flashChangedBlocks, setFlashChangedBlocks] = useState(false);
274
+ const draftRef = useRef('');
275
+ useEffect(() => {
276
+ if (!highlightChangesFrom || highlightVersion <= 0)
277
+ return;
278
+ setFlashChangedBlocks(true);
279
+ const timeoutId = window.setTimeout(() => setFlashChangedBlocks(false), 1800);
280
+ return () => window.clearTimeout(timeoutId);
281
+ }, [highlightChangesFrom, highlightVersion]);
282
+ useEffect(() => {
283
+ const range = activeEditing?.anchor.source_range;
284
+ if (!activeEditing || !range)
285
+ return;
286
+ if (markdown.slice(range.start, range.end) === activeEditing.anchor.exact_text)
287
+ return;
288
+ const draft = draftRef.current;
289
+ const initialDraft = activeEditing.mode === 'edit'
290
+ ? activeEditing.anchor.exact_text
291
+ : activeEditing.mode === 'insert'
292
+ ? (activeEditing.initialDraft ?? '')
293
+ : '';
294
+ if (draft.trim() && draft !== initialDraft) {
295
+ setOrphanedDraft({ ...activeEditing, draft });
296
+ }
297
+ setActiveEditing(undefined);
298
+ }, [activeEditing, markdown]);
299
+ const collaborativeComponents = useMemo(() => {
300
+ return {
301
+ ...components,
302
+ p: createBlockComponent('p', 'paragraph', components?.p),
303
+ h1: createBlockComponent('h1', 'heading', components?.h1),
304
+ h2: createBlockComponent('h2', 'heading', components?.h2),
305
+ h3: createBlockComponent('h3', 'heading', components?.h3),
306
+ h4: createBlockComponent('h4', 'heading', components?.h4),
307
+ h5: createBlockComponent('h5', 'heading', components?.h5),
308
+ h6: createBlockComponent('h6', 'heading', components?.h6),
309
+ ul: createBlockComponent('ul', 'list', components?.ul),
310
+ ol: createBlockComponent('ol', 'list', components?.ol),
311
+ blockquote: createBlockComponent('blockquote', 'blockquote', components?.blockquote),
312
+ pre: createBlockComponent('pre', 'code_block', components?.pre),
313
+ table: createBlockComponent('table', 'table', components?.table),
314
+ hr: createBlockComponent('hr', 'separator', components?.hr),
315
+ };
316
+ }, [components]);
317
+ const beginEditing = useCallback((anchor, mode, initialDraft) => {
318
+ if ((mode === 'comment' && !allowComments) || (mode !== 'comment' && readOnly))
319
+ return;
320
+ const enrichedAnchor = enrichMarkdownBlockAnchor(markdown, anchor);
321
+ draftRef.current = mode === 'edit' ? enrichedAnchor.exact_text : (initialDraft ?? '');
322
+ setActiveEditing({ anchor: enrichedAnchor, mode, initialDraft });
323
+ }, [allowComments, markdown, readOnly]);
324
+ const cancelEditing = useCallback(() => {
325
+ draftRef.current = '';
326
+ setActiveEditing(undefined);
327
+ }, []);
328
+ const updateDraft = useCallback((draft) => {
329
+ draftRef.current = draft;
330
+ }, []);
331
+ const submit = useCallback(async (anchor, mode, draft) => {
332
+ if ((mode === 'comment' && !allowComments) || (mode !== 'comment' && readOnly))
333
+ return;
334
+ const after = mode === 'insert' ? `${anchor.exact_text.replace(/\s+$/, '')}\n\n${draft.trim()}` : draft;
335
+ const action = {
336
+ operation_id: createOperationId(),
337
+ resource,
338
+ base_version: baseVersion,
339
+ action: mode === 'insert' ? 'edit' : mode,
340
+ anchor,
341
+ ...(mode === 'comment' ? { comment: draft } : { user_change: { before: anchor.exact_text, after } }),
342
+ };
343
+ await onAction(action);
344
+ draftRef.current = '';
345
+ setActiveEditing(undefined);
346
+ }, [allowComments, baseVersion, onAction, readOnly, resource]);
347
+ const contextValue = useMemo(() => ({
348
+ markdown,
349
+ artifactRunId,
350
+ readOnly,
351
+ allowComments,
352
+ activeEditing,
353
+ highlightChangesFrom,
354
+ flashChangedBlocks,
355
+ beginEditing,
356
+ cancelEditing,
357
+ updateDraft,
358
+ submit,
359
+ }), [
360
+ activeEditing,
361
+ allowComments,
362
+ artifactRunId,
363
+ beginEditing,
364
+ cancelEditing,
365
+ flashChangedBlocks,
366
+ highlightChangesFrom,
367
+ markdown,
368
+ readOnly,
369
+ submit,
370
+ updateDraft,
371
+ ]);
372
+ return (_jsxs(CollaborativeMarkdownContext.Provider, { value: contextValue, children: [orphanedDraft ? (_jsxs("div", { className: "not-prose mb-3 rounded-md border border-mixer-attention/35 bg-mixer-attention/10 p-3", children: [_jsxs("div", { className: "flex items-start justify-between gap-3", children: [_jsxs("div", { children: [_jsx("div", { className: "text-sm font-semibold text-foreground", children: t('agent.documentEditingDraftPreserved') }), _jsx("div", { className: "mt-0.5 text-xs leading-4 text-muted", children: t('agent.documentEditingDraftPreservedDescription') })] }), _jsx(Button, { variant: "ghost", size: "sm", className: "h-7 w-7 shrink-0 p-0", onClick: () => setOrphanedDraft(undefined), "aria-label": t('agent.close'), children: _jsx(X, { className: "size-4" }) })] }), _jsx(Textarea, { className: "mt-2", value: orphanedDraft.draft, onChange: (event) => setOrphanedDraft((current) => current ? { ...current, draft: event.target.value } : current), rows: 4 })] })) : null, _jsx(MarkdownRenderer, { ...markdownProps, artifactRunId: artifactRunId, className: className, components: collaborativeComponents, preserveSourcePositions: true, children: markdown })] }));
373
+ }
374
+ //# sourceMappingURL=CollaborativeMarkdownRenderer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CollaborativeMarkdownRenderer.js","sourceRoot":"","sources":["../../../src/widgets/markdown/CollaborativeMarkdownRenderer.tsx"],"names":[],"mappings":"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"}
@@ -6,6 +6,8 @@ export interface MarkdownLinkProps {
6
6
  children?: React.ReactNode;
7
7
  className?: string;
8
8
  artifactRunId?: string;
9
+ /** Open a Markdown artifact in the host artifact viewer instead of downloading it. */
10
+ onArtifactOpen?: (path: string) => void;
9
11
  /** Existing link component to delegate to for standard URLs */
10
12
  ExistingLink?: React.ComponentType<MarkdownLinkProps>;
11
13
  }
@@ -13,5 +15,5 @@ export interface MarkdownLinkProps {
13
15
  * Markdown link component with support for custom URL schemes.
14
16
  * Handles artifact:, image:, store:, document://, and collection: URLs.
15
17
  */
16
- export declare function MarkdownLink({ node, href, children, className, artifactRunId, ExistingLink, ...rest }: MarkdownLinkProps): React.JSX.Element;
18
+ export declare function MarkdownLink({ node, href, children, className, artifactRunId, onArtifactOpen, ExistingLink, ...rest }: MarkdownLinkProps): React.JSX.Element;
17
19
  //# sourceMappingURL=MarkdownLink.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"MarkdownLink.d.ts","sourceRoot":"","sources":["../../../src/widgets/markdown/MarkdownLink.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,MAAM,CAAC;AACpC,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAI/B,MAAM,WAAW,iBAAiB;IAC9B,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAC3B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,+DAA+D;IAC/D,YAAY,CAAC,EAAE,KAAK,CAAC,aAAa,CAAC,iBAAiB,CAAC,CAAC;CACzD;AAED;;;GAGG;AACH,wBAAgB,YAAY,CAAC,EACzB,IAAI,EACJ,IAAI,EACJ,QAAQ,EACR,SAAS,EACT,aAAa,EACb,YAAY,EACZ,GAAG,IAAI,EACV,EAAE,iBAAiB,qBA2CnB"}
1
+ {"version":3,"file":"MarkdownLink.d.ts","sourceRoot":"","sources":["../../../src/widgets/markdown/MarkdownLink.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,MAAM,CAAC;AACpC,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAK/B,MAAM,WAAW,iBAAiB;IAC9B,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAC3B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,sFAAsF;IACtF,cAAc,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IACxC,+DAA+D;IAC/D,YAAY,CAAC,EAAE,KAAK,CAAC,aAAa,CAAC,iBAAiB,CAAC,CAAC;CACzD;AAED;;;GAGG;AACH,wBAAgB,YAAY,CAAC,EACzB,IAAI,EACJ,IAAI,EACJ,QAAQ,EACR,SAAS,EACT,aAAa,EACb,cAAc,EACd,YAAY,EACZ,GAAG,IAAI,EACV,EAAE,iBAAiB,qBAiDnB"}
@@ -1,35 +1,51 @@
1
1
  import { jsx as _jsx } from "react/jsx-runtime";
2
+ import { Button } from '@vertesia/ui/core';
3
+ import { parseAgentResourceHref, useAgentResourceResolver } from './AgentResourceResolver';
2
4
  import { CodeBlockPlaceholder } from './CodeBlockPlaceholder';
3
- import { mapSchemeToRoute, parseUrlScheme, useResolvedUrl } from './useResolvedUrl';
5
+ import { parseUrlScheme, useResolvedUrl } from './useResolvedUrl';
4
6
  /**
5
7
  * Markdown link component with support for custom URL schemes.
6
8
  * Handles artifact:, image:, store:, document://, and collection: URLs.
7
9
  */
8
- export function MarkdownLink({ node, href, children, className, artifactRunId, ExistingLink, ...rest }) {
10
+ export function MarkdownLink({ node, href, children, className, artifactRunId, onArtifactOpen, ExistingLink, ...rest }) {
9
11
  const rawHref = href || '';
10
- const { scheme, path } = parseUrlScheme(rawHref);
11
- // For schemes that map directly to routes (store:, document://, collection:)
12
- const mappedRoute = mapSchemeToRoute(scheme, path);
13
- if (mappedRoute) {
14
- if (typeof ExistingLink === 'function') {
15
- return (_jsx(ExistingLink, { node: node, href: mappedRoute, ...rest, children: children }));
16
- }
17
- return (_jsx("a", { href: mappedRoute, ...rest, className: className, target: "_blank", rel: "noopener noreferrer", children: children }));
12
+ const resource = parseAgentResourceHref(rawHref);
13
+ if (resource) {
14
+ return (_jsx(AgentResourceMarkdownLink, { resource: resource, rawHref: rawHref, artifactRunId: artifactRunId, className: className, ExistingLink: ExistingLink, rest: rest, children: children }));
18
15
  }
16
+ const { scheme, path } = parseUrlScheme(rawHref);
19
17
  // For standard URLs, delegate to existing component or render directly
20
18
  if (scheme === 'standard') {
21
19
  if (typeof ExistingLink === 'function') {
22
- return (_jsx(ExistingLink, { node: node, href: href, ...rest, children: children }));
20
+ return (_jsx(ExistingLink, { node: node, href: href, className: className, ...rest, children: children }));
23
21
  }
24
22
  return (_jsx("a", { href: href, ...rest, className: className, target: "_blank", rel: "noopener noreferrer", children: children }));
25
23
  }
26
24
  // For artifact: and image: URLs, use the resolver
27
- return (_jsx(ResolvedLink, { rawHref: rawHref, artifactRunId: artifactRunId, className: className, rest: rest, children: children }));
25
+ return (_jsx(ResolvedLink, { rawHref: rawHref, artifactRunId: artifactRunId, artifactPath: scheme === 'artifact' ? path : undefined, onArtifactOpen: onArtifactOpen, className: className, rest: rest, children: children }));
26
+ }
27
+ function AgentResourceMarkdownLink({ resource, rawHref, artifactRunId, className, children, ExistingLink, rest, }) {
28
+ const resolve = useAgentResourceResolver();
29
+ const target = resolve(resource, {
30
+ workflowRunId: artifactRunId,
31
+ source: 'markdown',
32
+ rawHref,
33
+ });
34
+ if (target.kind === 'navigate') {
35
+ if (typeof ExistingLink === 'function') {
36
+ return (_jsx(ExistingLink, { href: target.href, className: className, ...rest, children: children }));
37
+ }
38
+ return (_jsx("a", { href: target.href, ...rest, className: className, target: "_blank", rel: "noopener noreferrer", children: children }));
39
+ }
40
+ if (target.kind === 'activate') {
41
+ return (_jsx(Button, { variant: "link", size: "none", className: className, onClick: target.onActivate, children: children }));
42
+ }
43
+ return _jsx("span", { className: className, children: children });
28
44
  }
29
45
  /**
30
46
  * Internal component for links that need async URL resolution
31
47
  */
32
- function ResolvedLink({ rawHref, artifactRunId, className, children, rest, }) {
48
+ function ResolvedLink({ rawHref, artifactRunId, artifactPath, onArtifactOpen, className, children, rest, }) {
33
49
  const { url, isLoading, error, retry } = useResolvedUrl({
34
50
  rawUrl: rawHref,
35
51
  artifactRunId,
@@ -41,6 +57,17 @@ function ResolvedLink({ rawHref, artifactRunId, className, children, rest, }) {
41
57
  if (error) {
42
58
  return (_jsx("span", { className: "inline-flex items-center gap-1", children: _jsx(CodeBlockPlaceholder, { type: "link", error: error, onRetry: retry }) }));
43
59
  }
44
- return (_jsx("a", { href: url || '#', ...rest, className: className, target: "_blank", rel: "noopener noreferrer", children: children }));
60
+ return (_jsx("a", { href: url || '#', ...rest, className: className, target: "_blank", rel: "noopener noreferrer", onClick: (event) => {
61
+ if (artifactPath &&
62
+ /\.md$/i.test(artifactPath) &&
63
+ onArtifactOpen &&
64
+ !event.metaKey &&
65
+ !event.ctrlKey &&
66
+ !event.shiftKey &&
67
+ event.button === 0) {
68
+ event.preventDefault();
69
+ onArtifactOpen(artifactPath);
70
+ }
71
+ }, children: children }));
45
72
  }
46
73
  //# sourceMappingURL=MarkdownLink.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"MarkdownLink.js","sourceRoot":"","sources":["../../../src/widgets/markdown/MarkdownLink.tsx"],"names":[],"mappings":";AAEA,OAAO,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AAC9D,OAAO,EAAE,gBAAgB,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAYpF;;;GAGG;AACH,MAAM,UAAU,YAAY,CAAC,EACzB,IAAI,EACJ,IAAI,EACJ,QAAQ,EACR,SAAS,EACT,aAAa,EACb,YAAY,EACZ,GAAG,IAAI,EACS;IAChB,MAAM,OAAO,GAAG,IAAI,IAAI,EAAE,CAAC;IAC3B,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,cAAc,CAAC,OAAO,CAAC,CAAC;IAEjD,6EAA6E;IAC7E,MAAM,WAAW,GAAG,gBAAgB,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;IACnD,IAAI,WAAW,EAAE,CAAC;QACd,IAAI,OAAO,YAAY,KAAK,UAAU,EAAE,CAAC;YACrC,OAAO,CACH,KAAC,YAAY,IAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,WAAW,KAAM,IAAI,YAChD,QAAQ,GACE,CAClB,CAAC;QACN,CAAC;QACD,OAAO,CACH,YAAG,IAAI,EAAE,WAAW,KAAM,IAAI,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,EAAC,QAAQ,EAAC,GAAG,EAAC,qBAAqB,YAC1F,QAAQ,GACT,CACP,CAAC;IACN,CAAC;IAED,uEAAuE;IACvE,IAAI,MAAM,KAAK,UAAU,EAAE,CAAC;QACxB,IAAI,OAAO,YAAY,KAAK,UAAU,EAAE,CAAC;YACrC,OAAO,CACH,KAAC,YAAY,IAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,KAAM,IAAI,YACzC,QAAQ,GACE,CAClB,CAAC;QACN,CAAC;QACD,OAAO,CACH,YAAG,IAAI,EAAE,IAAI,KAAM,IAAI,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,EAAC,QAAQ,EAAC,GAAG,EAAC,qBAAqB,YACnF,QAAQ,GACT,CACP,CAAC;IACN,CAAC;IAED,kDAAkD;IAClD,OAAO,CACH,KAAC,YAAY,IAAC,OAAO,EAAE,OAAO,EAAE,aAAa,EAAE,aAAa,EAAE,SAAS,EAAE,SAAS,EAAE,IAAI,EAAE,IAAI,YACzF,QAAQ,GACE,CAClB,CAAC;AACN,CAAC;AAED;;GAEG;AACH,SAAS,YAAY,CAAC,EAClB,OAAO,EACP,aAAa,EACb,SAAS,EACT,QAAQ,EACR,IAAI,GAOP;IACG,MAAM,EAAE,GAAG,EAAE,SAAS,EAAE,KAAK,EAAE,KAAK,EAAE,GAAG,cAAc,CAAC;QACpD,MAAM,EAAE,OAAO;QACf,aAAa;QACb,WAAW,EAAE,YAAY;KAC5B,CAAC,CAAC;IAEH,IAAI,SAAS,EAAE,CAAC;QACZ,OAAO,CACH,eAAM,SAAS,EAAC,2CAA2C,YACvD,KAAC,oBAAoB,IAAC,IAAI,EAAC,MAAM,GAAG,GACjC,CACV,CAAC;IACN,CAAC;IAED,IAAI,KAAK,EAAE,CAAC;QACR,OAAO,CACH,eAAM,SAAS,EAAC,gCAAgC,YAC5C,KAAC,oBAAoB,IAAC,IAAI,EAAC,MAAM,EAAC,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,GAAI,GAC/D,CACV,CAAC;IACN,CAAC;IAED,OAAO,CACH,YAAG,IAAI,EAAE,GAAG,IAAI,GAAG,KAAM,IAAI,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,EAAC,QAAQ,EAAC,GAAG,EAAC,qBAAqB,YACzF,QAAQ,GACT,CACP,CAAC;AACN,CAAC"}
1
+ {"version":3,"file":"MarkdownLink.js","sourceRoot":"","sources":["../../../src/widgets/markdown/MarkdownLink.tsx"],"names":[],"mappings":"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"}