@dxos/plugin-markdown 0.8.4-main.c4373fc → 0.8.4-main.d9fc60f731

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 (409) hide show
  1. package/LICENSE +102 -5
  2. package/README.md +1 -1
  3. package/dist/lib/neutral/EditableMarkdownCard-AW7MD35U.mjs +34 -0
  4. package/dist/lib/neutral/EditableMarkdownCard-AW7MD35U.mjs.map +7 -0
  5. package/dist/lib/neutral/MarkdownArticle-Z4QRU3WD.mjs +126 -0
  6. package/dist/lib/neutral/MarkdownArticle-Z4QRU3WD.mjs.map +7 -0
  7. package/dist/lib/neutral/MarkdownCard-36P4AHYL.mjs +107 -0
  8. package/dist/lib/neutral/MarkdownCard-36P4AHYL.mjs.map +7 -0
  9. package/dist/lib/neutral/MarkdownPlugin.mjs +58 -0
  10. package/dist/lib/neutral/MarkdownPlugin.mjs.map +7 -0
  11. package/dist/lib/neutral/MarkdownPlugin.node.mjs +25 -0
  12. package/dist/lib/neutral/MarkdownPlugin.node.mjs.map +7 -0
  13. package/dist/lib/neutral/MarkdownPlugin.workerd.mjs +23 -0
  14. package/dist/lib/neutral/MarkdownPlugin.workerd.mjs.map +7 -0
  15. package/dist/lib/neutral/MarkdownSettings-YCTZJL5V.mjs +32 -0
  16. package/dist/lib/neutral/MarkdownSettings-YCTZJL5V.mjs.map +7 -0
  17. package/dist/lib/neutral/anchor-sort-37GOHBLW.mjs +32 -0
  18. package/dist/lib/neutral/anchor-sort-37GOHBLW.mjs.map +7 -0
  19. package/dist/lib/neutral/app-graph-serializer-EN5E3BMG.mjs +56 -0
  20. package/dist/lib/neutral/app-graph-serializer-EN5E3BMG.mjs.map +7 -0
  21. package/dist/lib/neutral/blueprint-definition-33OK2KUL.mjs +15 -0
  22. package/dist/lib/neutral/blueprint-definition-33OK2KUL.mjs.map +7 -0
  23. package/dist/lib/neutral/blueprints/index.mjs +8 -0
  24. package/dist/lib/neutral/capabilities/index.mjs +25 -0
  25. package/dist/lib/neutral/capabilities/index.mjs.map +7 -0
  26. package/dist/lib/neutral/capabilities/node.mjs +11 -0
  27. package/dist/lib/neutral/capabilities/node.mjs.map +7 -0
  28. package/dist/lib/neutral/chunk-36QFEVOZ.mjs +30 -0
  29. package/dist/lib/neutral/chunk-36QFEVOZ.mjs.map +7 -0
  30. package/dist/lib/neutral/chunk-A45UVZEH.mjs +285 -0
  31. package/dist/lib/neutral/chunk-A45UVZEH.mjs.map +7 -0
  32. package/dist/lib/neutral/chunk-E5NVTEKQ.mjs +8 -0
  33. package/dist/lib/neutral/chunk-E5NVTEKQ.mjs.map +7 -0
  34. package/dist/lib/neutral/chunk-J5LGTIGS.mjs +10 -0
  35. package/dist/lib/neutral/chunk-KDN4GKG2.mjs +98 -0
  36. package/dist/lib/neutral/chunk-KDN4GKG2.mjs.map +7 -0
  37. package/dist/lib/neutral/chunk-LXNSKCPD.mjs +44 -0
  38. package/dist/lib/neutral/chunk-LXNSKCPD.mjs.map +7 -0
  39. package/dist/lib/neutral/comment-config-ZEA66BUR.mjs +31 -0
  40. package/dist/lib/neutral/comment-config-ZEA66BUR.mjs.map +7 -0
  41. package/dist/lib/neutral/components/index.mjs +371 -0
  42. package/dist/lib/neutral/components/index.mjs.map +7 -0
  43. package/dist/lib/neutral/containers/index.mjs +13 -0
  44. package/dist/lib/neutral/containers/index.mjs.map +7 -0
  45. package/dist/lib/neutral/create-HONLDBVT.mjs +28 -0
  46. package/dist/lib/neutral/create-HONLDBVT.mjs.map +7 -0
  47. package/dist/lib/neutral/create-markdown-UCPD2Z3V.mjs +20 -0
  48. package/dist/lib/neutral/create-markdown-UCPD2Z3V.mjs.map +7 -0
  49. package/dist/lib/neutral/create-object-VU3KX663.mjs +28 -0
  50. package/dist/lib/neutral/create-object-VU3KX663.mjs.map +7 -0
  51. package/dist/lib/neutral/hooks/index.mjs +316 -0
  52. package/dist/lib/neutral/hooks/index.mjs.map +7 -0
  53. package/dist/lib/neutral/index.mjs +42 -0
  54. package/dist/lib/neutral/meta.json +1 -0
  55. package/dist/lib/neutral/meta.mjs +8 -0
  56. package/dist/lib/neutral/open-VVDMNJ7J.mjs +20 -0
  57. package/dist/lib/neutral/open-VVDMNJ7J.mjs.map +7 -0
  58. package/dist/lib/neutral/operation-handler-2ARMPBGZ.mjs +13 -0
  59. package/dist/lib/neutral/operation-handler-2ARMPBGZ.mjs.map +7 -0
  60. package/dist/lib/neutral/operations/index.mjs +8 -0
  61. package/dist/lib/neutral/operations/index.mjs.map +7 -0
  62. package/dist/lib/neutral/plugin.mjs +16 -0
  63. package/dist/lib/neutral/plugin.mjs.map +7 -0
  64. package/dist/lib/neutral/react-surface-EMYFM37T.mjs +119 -0
  65. package/dist/lib/neutral/react-surface-EMYFM37T.mjs.map +7 -0
  66. package/dist/lib/neutral/scroll-to-anchor-Y3P676QG.mjs +47 -0
  67. package/dist/lib/neutral/scroll-to-anchor-Y3P676QG.mjs.map +7 -0
  68. package/dist/lib/neutral/set-view-mode-JZB7UXIF.mjs +24 -0
  69. package/dist/lib/neutral/set-view-mode-JZB7UXIF.mjs.map +7 -0
  70. package/dist/lib/neutral/settings-TDGDLCUR.mjs +34 -0
  71. package/dist/lib/neutral/settings-TDGDLCUR.mjs.map +7 -0
  72. package/dist/lib/neutral/state-5COCF5PN.mjs +44 -0
  73. package/dist/lib/neutral/state-5COCF5PN.mjs.map +7 -0
  74. package/dist/lib/neutral/testing.mjs +30 -0
  75. package/dist/lib/neutral/testing.mjs.map +7 -0
  76. package/dist/lib/neutral/translations.mjs +44 -0
  77. package/dist/lib/neutral/translations.mjs.map +7 -0
  78. package/dist/lib/neutral/types/index.mjs +16 -0
  79. package/dist/lib/neutral/types/index.mjs.map +7 -0
  80. package/dist/lib/neutral/update-markdown-F25F4EPF.mjs +44 -0
  81. package/dist/lib/neutral/update-markdown-F25F4EPF.mjs.map +7 -0
  82. package/dist/types/src/MarkdownPlugin.d.ts +3 -1
  83. package/dist/types/src/MarkdownPlugin.d.ts.map +1 -1
  84. package/dist/types/src/MarkdownPlugin.node.d.ts +4 -0
  85. package/dist/types/src/MarkdownPlugin.node.d.ts.map +1 -0
  86. package/dist/types/src/MarkdownPlugin.test.d.ts +2 -0
  87. package/dist/types/src/MarkdownPlugin.test.d.ts.map +1 -0
  88. package/dist/types/src/MarkdownPlugin.workerd.d.ts +4 -0
  89. package/dist/types/src/MarkdownPlugin.workerd.d.ts.map +1 -0
  90. package/dist/types/src/blueprints/index.d.ts +2 -0
  91. package/dist/types/src/blueprints/index.d.ts.map +1 -0
  92. package/dist/types/src/blueprints/markdown-blueprint.d.ts +4 -0
  93. package/dist/types/src/blueprints/markdown-blueprint.d.ts.map +1 -0
  94. package/dist/types/src/capabilities/anchor-sort.d.ts +4 -4
  95. package/dist/types/src/capabilities/anchor-sort.d.ts.map +1 -1
  96. package/dist/types/src/capabilities/app-graph-serializer.d.ts +3 -2
  97. package/dist/types/src/capabilities/app-graph-serializer.d.ts.map +1 -1
  98. package/dist/types/src/capabilities/blueprint-definition.d.ts +5 -4
  99. package/dist/types/src/capabilities/blueprint-definition.d.ts.map +1 -1
  100. package/dist/types/src/capabilities/comment-config.d.ts +12 -0
  101. package/dist/types/src/capabilities/comment-config.d.ts.map +1 -0
  102. package/dist/types/src/capabilities/create-object.d.ts +11 -0
  103. package/dist/types/src/capabilities/create-object.d.ts.map +1 -0
  104. package/dist/types/src/capabilities/index.d.ts +22 -18
  105. package/dist/types/src/capabilities/index.d.ts.map +1 -1
  106. package/dist/types/src/capabilities/node.d.ts +10 -0
  107. package/dist/types/src/capabilities/node.d.ts.map +1 -0
  108. package/dist/types/src/capabilities/operation-handler.d.ts +6 -0
  109. package/dist/types/src/capabilities/operation-handler.d.ts.map +1 -0
  110. package/dist/types/src/capabilities/react-surface.d.ts +3 -2
  111. package/dist/types/src/capabilities/react-surface.d.ts.map +1 -1
  112. package/dist/types/src/capabilities/settings.d.ts +4 -2
  113. package/dist/types/src/capabilities/settings.d.ts.map +1 -1
  114. package/dist/types/src/capabilities/state.d.ts +4 -9
  115. package/dist/types/src/capabilities/state.d.ts.map +1 -1
  116. package/dist/types/src/components/MarkdownEditor/FileUpload.d.ts +11 -0
  117. package/dist/types/src/components/MarkdownEditor/FileUpload.d.ts.map +1 -0
  118. package/dist/types/src/components/MarkdownEditor/MarkdownEditor.d.ts +52 -21
  119. package/dist/types/src/components/MarkdownEditor/MarkdownEditor.d.ts.map +1 -1
  120. package/dist/types/src/components/MarkdownEditor/MarkdownEditor.stories.d.ts +5 -110
  121. package/dist/types/src/components/MarkdownEditor/MarkdownEditor.stories.d.ts.map +1 -1
  122. package/dist/types/src/components/MarkdownEditor/MarkdownEditorContent.d.ts +33 -0
  123. package/dist/types/src/components/MarkdownEditor/MarkdownEditorContent.d.ts.map +1 -0
  124. package/dist/types/src/components/MarkdownEditor/MarkdownEditorToolbar.d.ts +13 -0
  125. package/dist/types/src/components/MarkdownEditor/MarkdownEditorToolbar.d.ts.map +1 -0
  126. package/dist/types/src/components/MarkdownSettings/MarkdownSettings.d.ts +4 -4
  127. package/dist/types/src/components/MarkdownSettings/MarkdownSettings.d.ts.map +1 -1
  128. package/dist/types/src/components/MarkdownSettings/MarkdownSettings.stories.d.ts +94 -0
  129. package/dist/types/src/components/MarkdownSettings/MarkdownSettings.stories.d.ts.map +1 -0
  130. package/dist/types/src/components/MarkdownSettings/index.d.ts +1 -1
  131. package/dist/types/src/components/MarkdownSettings/index.d.ts.map +1 -1
  132. package/dist/types/src/components/index.d.ts +3 -3
  133. package/dist/types/src/components/index.d.ts.map +1 -1
  134. package/dist/types/src/containers/EditableMarkdownCard/EditableMarkdownCard.d.ts +15 -0
  135. package/dist/types/src/containers/EditableMarkdownCard/EditableMarkdownCard.d.ts.map +1 -0
  136. package/dist/types/src/containers/EditableMarkdownCard/EditableMarkdownCard.stories.d.ts +9 -0
  137. package/dist/types/src/containers/EditableMarkdownCard/EditableMarkdownCard.stories.d.ts.map +1 -0
  138. package/dist/types/src/containers/EditableMarkdownCard/index.d.ts +3 -0
  139. package/dist/types/src/containers/EditableMarkdownCard/index.d.ts.map +1 -0
  140. package/dist/types/src/containers/MarkdownArticle/MarkdownArticle.d.ts +40 -0
  141. package/dist/types/src/containers/MarkdownArticle/MarkdownArticle.d.ts.map +1 -0
  142. package/dist/types/src/containers/MarkdownArticle/MarkdownArticle.stories.d.ts +97 -0
  143. package/dist/types/src/containers/MarkdownArticle/MarkdownArticle.stories.d.ts.map +1 -0
  144. package/dist/types/src/containers/MarkdownArticle/index.d.ts +3 -0
  145. package/dist/types/src/containers/MarkdownArticle/index.d.ts.map +1 -0
  146. package/dist/types/src/containers/MarkdownCard/MarkdownCard.d.ts +8 -0
  147. package/dist/types/src/containers/MarkdownCard/MarkdownCard.d.ts.map +1 -0
  148. package/dist/types/src/containers/MarkdownCard/MarkdownCard.stories.d.ts +9 -0
  149. package/dist/types/src/containers/MarkdownCard/MarkdownCard.stories.d.ts.map +1 -0
  150. package/dist/types/src/containers/MarkdownCard/index.d.ts +2 -0
  151. package/dist/types/src/containers/MarkdownCard/index.d.ts.map +1 -0
  152. package/dist/types/src/containers/MarkdownCard/snippet.d.ts +17 -0
  153. package/dist/types/src/containers/MarkdownCard/snippet.d.ts.map +1 -0
  154. package/dist/types/src/containers/index.d.ts +6 -0
  155. package/dist/types/src/containers/index.d.ts.map +1 -0
  156. package/dist/types/src/hooks/index.d.ts +3 -1
  157. package/dist/types/src/hooks/index.d.ts.map +1 -1
  158. package/dist/types/src/hooks/useEditorMenuOptions.d.ts +9 -0
  159. package/dist/types/src/hooks/useEditorMenuOptions.d.ts.map +1 -0
  160. package/dist/types/src/hooks/useExtensions.d.ts +25 -0
  161. package/dist/types/src/hooks/useExtensions.d.ts.map +1 -0
  162. package/dist/types/src/hooks/useLinkQuery.d.ts +4 -0
  163. package/dist/types/src/hooks/useLinkQuery.d.ts.map +1 -0
  164. package/dist/types/src/index.d.ts +2 -3
  165. package/dist/types/src/index.d.ts.map +1 -1
  166. package/dist/types/src/meta.d.ts +2 -2
  167. package/dist/types/src/meta.d.ts.map +1 -1
  168. package/dist/types/src/operations/create-markdown.d.ts +5 -0
  169. package/dist/types/src/operations/create-markdown.d.ts.map +1 -0
  170. package/dist/types/src/operations/create.d.ts +5 -0
  171. package/dist/types/src/operations/create.d.ts.map +1 -0
  172. package/dist/types/src/operations/create.test.d.ts +2 -0
  173. package/dist/types/src/operations/create.test.d.ts.map +1 -0
  174. package/dist/types/src/operations/index.d.ts +3 -0
  175. package/dist/types/src/operations/index.d.ts.map +1 -0
  176. package/dist/types/src/operations/open.d.ts +5 -0
  177. package/dist/types/src/operations/open.d.ts.map +1 -0
  178. package/dist/types/src/operations/scroll-to-anchor.d.ts +5 -0
  179. package/dist/types/src/operations/scroll-to-anchor.d.ts.map +1 -0
  180. package/dist/types/src/operations/set-view-mode.d.ts +5 -0
  181. package/dist/types/src/operations/set-view-mode.d.ts.map +1 -0
  182. package/dist/types/src/operations/update-markdown.d.ts +5 -0
  183. package/dist/types/src/operations/update-markdown.d.ts.map +1 -0
  184. package/dist/types/src/operations/update.test.d.ts +2 -0
  185. package/dist/types/src/operations/update.test.d.ts.map +1 -0
  186. package/dist/types/src/plugin.d.ts +4 -0
  187. package/dist/types/src/plugin.d.ts.map +1 -0
  188. package/dist/types/src/testing.d.ts +7 -0
  189. package/dist/types/src/testing.d.ts.map +1 -0
  190. package/dist/types/src/translations.d.ts +74 -33
  191. package/dist/types/src/translations.d.ts.map +1 -1
  192. package/dist/types/src/types/Markdown.d.ts +35 -32
  193. package/dist/types/src/types/Markdown.d.ts.map +1 -1
  194. package/dist/types/src/types/MarkdownCapabilities.d.ts +32 -0
  195. package/dist/types/src/types/MarkdownCapabilities.d.ts.map +1 -0
  196. package/dist/types/src/types/MarkdownEvents.d.ts +3 -0
  197. package/dist/types/src/types/MarkdownEvents.d.ts.map +1 -0
  198. package/dist/types/src/types/MarkdownOperation.d.ts +64 -0
  199. package/dist/types/src/types/MarkdownOperation.d.ts.map +1 -0
  200. package/dist/types/src/types/Settings.d.ts +30 -0
  201. package/dist/types/src/types/Settings.d.ts.map +1 -0
  202. package/dist/types/src/types/index.d.ts +5 -2
  203. package/dist/types/src/types/index.d.ts.map +1 -1
  204. package/dist/types/src/types/types.d.ts +3 -2
  205. package/dist/types/src/types/types.d.ts.map +1 -1
  206. package/dist/types/src/util.d.ts +8 -5
  207. package/dist/types/src/util.d.ts.map +1 -1
  208. package/dist/types/src/util.test.d.ts +2 -0
  209. package/dist/types/src/util.test.d.ts.map +1 -0
  210. package/dist/types/tsconfig.tsbuildinfo +1 -1
  211. package/package.json +152 -71
  212. package/src/MarkdownPlugin.node.ts +20 -0
  213. package/src/MarkdownPlugin.test.ts +26 -0
  214. package/src/MarkdownPlugin.tsx +34 -103
  215. package/src/MarkdownPlugin.workerd.ts +19 -0
  216. package/src/blueprints/index.ts +5 -0
  217. package/src/blueprints/markdown-blueprint.ts +43 -0
  218. package/src/capabilities/anchor-sort.ts +29 -22
  219. package/src/capabilities/app-graph-serializer.ts +53 -43
  220. package/src/capabilities/blueprint-definition.ts +11 -31
  221. package/src/capabilities/comment-config.ts +33 -0
  222. package/src/capabilities/create-object.ts +31 -0
  223. package/src/capabilities/index.ts +15 -12
  224. package/src/capabilities/node.ts +13 -0
  225. package/src/capabilities/operation-handler.ts +16 -0
  226. package/src/capabilities/react-surface.tsx +116 -103
  227. package/src/capabilities/settings.ts +30 -18
  228. package/src/capabilities/state.ts +41 -25
  229. package/src/components/MarkdownEditor/FileUpload.tsx +63 -0
  230. package/src/components/MarkdownEditor/MarkdownEditor.stories.tsx +63 -40
  231. package/src/components/MarkdownEditor/MarkdownEditor.tsx +247 -255
  232. package/src/components/MarkdownEditor/MarkdownEditorContent.tsx +171 -0
  233. package/src/components/MarkdownEditor/MarkdownEditorToolbar.tsx +47 -0
  234. package/src/components/MarkdownSettings/MarkdownSettings.stories.tsx +40 -0
  235. package/src/components/MarkdownSettings/MarkdownSettings.tsx +23 -96
  236. package/src/components/MarkdownSettings/index.ts +1 -1
  237. package/src/components/index.ts +4 -5
  238. package/src/containers/EditableMarkdownCard/EditableMarkdownCard.stories.tsx +86 -0
  239. package/src/containers/EditableMarkdownCard/EditableMarkdownCard.tsx +44 -0
  240. package/src/containers/EditableMarkdownCard/index.ts +6 -0
  241. package/src/containers/MarkdownArticle/MarkdownArticle.stories.tsx +141 -0
  242. package/src/containers/MarkdownArticle/MarkdownArticle.tsx +146 -0
  243. package/src/containers/MarkdownArticle/index.ts +6 -0
  244. package/src/containers/MarkdownCard/MarkdownCard.stories.tsx +68 -0
  245. package/src/containers/MarkdownCard/MarkdownCard.tsx +75 -0
  246. package/src/containers/MarkdownCard/index.ts +5 -0
  247. package/src/containers/MarkdownCard/snippet.ts +54 -0
  248. package/src/containers/index.ts +11 -0
  249. package/src/hooks/index.ts +3 -1
  250. package/src/hooks/useEditorMenuOptions.ts +68 -0
  251. package/src/hooks/useExtensions.tsx +268 -0
  252. package/src/hooks/useLinkQuery.ts +93 -0
  253. package/src/index.ts +2 -5
  254. package/src/meta.ts +18 -8
  255. package/src/operations/create-markdown.ts +19 -0
  256. package/src/operations/create.conversations.json +1 -0
  257. package/src/operations/create.test.ts +96 -0
  258. package/src/operations/create.ts +26 -0
  259. package/src/operations/index.ts +14 -0
  260. package/src/operations/open.ts +25 -0
  261. package/src/operations/scroll-to-anchor.ts +38 -0
  262. package/src/operations/set-view-mode.ts +23 -0
  263. package/src/operations/update-markdown.ts +51 -0
  264. package/src/operations/update.conversations.json +1 -0
  265. package/src/operations/update.test.ts +213 -0
  266. package/src/plugin.ts +11 -0
  267. package/src/testing.ts +40 -0
  268. package/src/translations.ts +28 -33
  269. package/src/types/Markdown.ts +27 -34
  270. package/src/types/MarkdownCapabilities.ts +51 -0
  271. package/src/types/MarkdownEvents.ts +14 -0
  272. package/src/types/MarkdownOperation.ts +133 -0
  273. package/src/types/Settings.ts +85 -0
  274. package/src/types/index.ts +6 -2
  275. package/src/types/types.ts +7 -3
  276. package/src/util.test.ts +44 -0
  277. package/src/util.tsx +84 -9
  278. package/dist/lib/browser/MarkdownCard-ZHTH6EVA.mjs +0 -80
  279. package/dist/lib/browser/MarkdownCard-ZHTH6EVA.mjs.map +0 -7
  280. package/dist/lib/browser/MarkdownContainer-XDYFBDCI.mjs +0 -750
  281. package/dist/lib/browser/MarkdownContainer-XDYFBDCI.mjs.map +0 -7
  282. package/dist/lib/browser/anchor-sort-53E7TJGF.mjs +0 -32
  283. package/dist/lib/browser/anchor-sort-53E7TJGF.mjs.map +0 -7
  284. package/dist/lib/browser/app-graph-serializer-IEPNJZBR.mjs +0 -51
  285. package/dist/lib/browser/app-graph-serializer-IEPNJZBR.mjs.map +0 -7
  286. package/dist/lib/browser/blueprint-definition-XDLVVSUN.mjs +0 -11
  287. package/dist/lib/browser/chunk-EVQGTH3P.mjs +0 -22
  288. package/dist/lib/browser/chunk-EVQGTH3P.mjs.map +0 -7
  289. package/dist/lib/browser/chunk-NGXGBWSS.mjs +0 -53
  290. package/dist/lib/browser/chunk-NGXGBWSS.mjs.map +0 -7
  291. package/dist/lib/browser/chunk-ODB2PTBP.mjs +0 -28
  292. package/dist/lib/browser/chunk-ODB2PTBP.mjs.map +0 -7
  293. package/dist/lib/browser/chunk-OY6CGPOO.mjs +0 -16
  294. package/dist/lib/browser/chunk-OY6CGPOO.mjs.map +0 -7
  295. package/dist/lib/browser/chunk-PMBWHKDI.mjs +0 -78
  296. package/dist/lib/browser/chunk-PMBWHKDI.mjs.map +0 -7
  297. package/dist/lib/browser/chunk-VZU7BRGW.mjs +0 -106
  298. package/dist/lib/browser/chunk-VZU7BRGW.mjs.map +0 -7
  299. package/dist/lib/browser/chunk-XYQDM6PM.mjs +0 -50
  300. package/dist/lib/browser/chunk-XYQDM6PM.mjs.map +0 -7
  301. package/dist/lib/browser/index.mjs +0 -173
  302. package/dist/lib/browser/index.mjs.map +0 -7
  303. package/dist/lib/browser/intent-resolver-66ZUQ6JC.mjs +0 -62
  304. package/dist/lib/browser/intent-resolver-66ZUQ6JC.mjs.map +0 -7
  305. package/dist/lib/browser/meta.json +0 -1
  306. package/dist/lib/browser/react-surface-ONX5RNFM.mjs +0 -215
  307. package/dist/lib/browser/react-surface-ONX5RNFM.mjs.map +0 -7
  308. package/dist/lib/browser/settings-HXM36BCZ.mjs +0 -28
  309. package/dist/lib/browser/settings-HXM36BCZ.mjs.map +0 -7
  310. package/dist/lib/browser/state-6QODXCSZ.mjs +0 -37
  311. package/dist/lib/browser/state-6QODXCSZ.mjs.map +0 -7
  312. package/dist/lib/browser/toolkit-73U3A7SD.mjs +0 -76
  313. package/dist/lib/browser/toolkit-73U3A7SD.mjs.map +0 -7
  314. package/dist/lib/browser/types/index.mjs +0 -10
  315. package/dist/lib/node-esm/MarkdownCard-MEA4QAAI.mjs +0 -81
  316. package/dist/lib/node-esm/MarkdownCard-MEA4QAAI.mjs.map +0 -7
  317. package/dist/lib/node-esm/MarkdownContainer-7GYMOJVT.mjs +0 -751
  318. package/dist/lib/node-esm/MarkdownContainer-7GYMOJVT.mjs.map +0 -7
  319. package/dist/lib/node-esm/anchor-sort-V2FWEYDN.mjs +0 -33
  320. package/dist/lib/node-esm/anchor-sort-V2FWEYDN.mjs.map +0 -7
  321. package/dist/lib/node-esm/app-graph-serializer-HIN4NMUG.mjs +0 -52
  322. package/dist/lib/node-esm/app-graph-serializer-HIN4NMUG.mjs.map +0 -7
  323. package/dist/lib/node-esm/blueprint-definition-PDXZ67UQ.mjs +0 -12
  324. package/dist/lib/node-esm/chunk-35WAARP4.mjs +0 -79
  325. package/dist/lib/node-esm/chunk-35WAARP4.mjs.map +0 -7
  326. package/dist/lib/node-esm/chunk-CB2R4YIY.mjs +0 -17
  327. package/dist/lib/node-esm/chunk-CB2R4YIY.mjs.map +0 -7
  328. package/dist/lib/node-esm/chunk-IOC54NCF.mjs +0 -51
  329. package/dist/lib/node-esm/chunk-IOC54NCF.mjs.map +0 -7
  330. package/dist/lib/node-esm/chunk-VCG2U522.mjs +0 -29
  331. package/dist/lib/node-esm/chunk-VCG2U522.mjs.map +0 -7
  332. package/dist/lib/node-esm/chunk-VELFUWUH.mjs +0 -107
  333. package/dist/lib/node-esm/chunk-VELFUWUH.mjs.map +0 -7
  334. package/dist/lib/node-esm/chunk-W4XXBX33.mjs +0 -24
  335. package/dist/lib/node-esm/chunk-W4XXBX33.mjs.map +0 -7
  336. package/dist/lib/node-esm/chunk-YGSNWTGP.mjs +0 -54
  337. package/dist/lib/node-esm/chunk-YGSNWTGP.mjs.map +0 -7
  338. package/dist/lib/node-esm/index.mjs +0 -174
  339. package/dist/lib/node-esm/index.mjs.map +0 -7
  340. package/dist/lib/node-esm/intent-resolver-TNRIFHNH.mjs +0 -63
  341. package/dist/lib/node-esm/intent-resolver-TNRIFHNH.mjs.map +0 -7
  342. package/dist/lib/node-esm/meta.json +0 -1
  343. package/dist/lib/node-esm/react-surface-X2GV6WQH.mjs +0 -216
  344. package/dist/lib/node-esm/react-surface-X2GV6WQH.mjs.map +0 -7
  345. package/dist/lib/node-esm/settings-KPLQ5ONI.mjs +0 -29
  346. package/dist/lib/node-esm/settings-KPLQ5ONI.mjs.map +0 -7
  347. package/dist/lib/node-esm/state-W3PECOJX.mjs +0 -38
  348. package/dist/lib/node-esm/state-W3PECOJX.mjs.map +0 -7
  349. package/dist/lib/node-esm/toolkit-GUBDYF72.mjs +0 -77
  350. package/dist/lib/node-esm/toolkit-GUBDYF72.mjs.map +0 -7
  351. package/dist/lib/node-esm/types/index.mjs +0 -11
  352. package/dist/types/src/capabilities/artifact-definition.d.ts +0 -3
  353. package/dist/types/src/capabilities/artifact-definition.d.ts.map +0 -1
  354. package/dist/types/src/capabilities/capabilities.d.ts +0 -12
  355. package/dist/types/src/capabilities/capabilities.d.ts.map +0 -1
  356. package/dist/types/src/capabilities/intent-resolver.d.ts +0 -4
  357. package/dist/types/src/capabilities/intent-resolver.d.ts.map +0 -1
  358. package/dist/types/src/capabilities/toolkit.d.ts +0 -4
  359. package/dist/types/src/capabilities/toolkit.d.ts.map +0 -1
  360. package/dist/types/src/components/MarkdownCard/MarkdownCard.d.ts +0 -7
  361. package/dist/types/src/components/MarkdownCard/MarkdownCard.d.ts.map +0 -1
  362. package/dist/types/src/components/MarkdownCard/MarkdownCard.stories.d.ts +0 -9
  363. package/dist/types/src/components/MarkdownCard/MarkdownCard.stories.d.ts.map +0 -1
  364. package/dist/types/src/components/MarkdownCard/index.d.ts +0 -4
  365. package/dist/types/src/components/MarkdownCard/index.d.ts.map +0 -1
  366. package/dist/types/src/components/MarkdownContainer.d.ts +0 -18
  367. package/dist/types/src/components/MarkdownContainer.d.ts.map +0 -1
  368. package/dist/types/src/components/MarkdownContainer.stories.d.ts +0 -55
  369. package/dist/types/src/components/MarkdownContainer.stories.d.ts.map +0 -1
  370. package/dist/types/src/components/Suggestions.stories.d.ts +0 -11
  371. package/dist/types/src/components/Suggestions.stories.d.ts.map +0 -1
  372. package/dist/types/src/components/Toolbar.stories.d.ts +0 -48
  373. package/dist/types/src/components/Toolbar.stories.d.ts.map +0 -1
  374. package/dist/types/src/events.d.ts +0 -4
  375. package/dist/types/src/events.d.ts.map +0 -1
  376. package/dist/types/src/extensions.d.ts +0 -22
  377. package/dist/types/src/extensions.d.ts.map +0 -1
  378. package/dist/types/src/functions/diff.d.ts +0 -6
  379. package/dist/types/src/functions/diff.d.ts.map +0 -1
  380. package/dist/types/src/functions/index.d.ts +0 -3
  381. package/dist/types/src/functions/index.d.ts.map +0 -1
  382. package/dist/types/src/functions/open.d.ts +0 -7
  383. package/dist/types/src/functions/open.d.ts.map +0 -1
  384. package/dist/types/src/hooks/useSelectCurrentThread.d.ts +0 -6
  385. package/dist/types/src/hooks/useSelectCurrentThread.d.ts.map +0 -1
  386. package/dist/types/src/types/MarkdownAction.d.ts +0 -33
  387. package/dist/types/src/types/MarkdownAction.d.ts.map +0 -1
  388. package/src/capabilities/artifact-definition.ts +0 -112
  389. package/src/capabilities/capabilities.ts +0 -21
  390. package/src/capabilities/intent-resolver.ts +0 -58
  391. package/src/capabilities/toolkit.ts +0 -49
  392. package/src/components/MarkdownCard/MarkdownCard.stories.tsx +0 -76
  393. package/src/components/MarkdownCard/MarkdownCard.tsx +0 -75
  394. package/src/components/MarkdownCard/index.ts +0 -9
  395. package/src/components/MarkdownContainer.stories.tsx +0 -109
  396. package/src/components/MarkdownContainer.tsx +0 -257
  397. package/src/components/Suggestions.stories.tsx +0 -221
  398. package/src/components/Toolbar.stories.tsx +0 -118
  399. package/src/events.ts +0 -11
  400. package/src/extensions.tsx +0 -300
  401. package/src/functions/diff.ts +0 -37
  402. package/src/functions/index.ts +0 -6
  403. package/src/functions/open.ts +0 -32
  404. package/src/hooks/useSelectCurrentThread.tsx +0 -56
  405. package/src/types/MarkdownAction.ts +0 -29
  406. /package/dist/lib/{browser/types → neutral/blueprints}/index.mjs.map +0 -0
  407. /package/dist/lib/{browser/blueprint-definition-XDLVVSUN.mjs.map → neutral/chunk-J5LGTIGS.mjs.map} +0 -0
  408. /package/dist/lib/{node-esm/types → neutral}/index.mjs.map +0 -0
  409. /package/dist/lib/{node-esm/blueprint-definition-PDXZ67UQ.mjs.map → neutral/meta.mjs.map} +0 -0
@@ -0,0 +1,268 @@
1
+ //
2
+ // Copyright 2023 DXOS.org
3
+ //
4
+
5
+ import { type ViewUpdate } from '@codemirror/view';
6
+ import { useMemo } from 'react';
7
+
8
+ import { fromUrlPath } from '@dxos/app-toolkit';
9
+ import { debounceAndThrottle } from '@dxos/async';
10
+ import { Obj } from '@dxos/echo';
11
+ import { createDocAccessor } from '@dxos/echo-db';
12
+ import { invariant } from '@dxos/invariant';
13
+ import { getSpace, useObject } from '@dxos/react-client/echo';
14
+ import { useIdentity } from '@dxos/react-client/halo';
15
+ import { useThemeContext } from '@dxos/react-ui';
16
+ import { type SelectionManager } from '@dxos/react-ui-attention';
17
+ import { Text } from '@dxos/schema';
18
+ import { Domino } from '@dxos/ui';
19
+ import {
20
+ Cursor,
21
+ type EditorStateStore,
22
+ EditorView,
23
+ type Extension,
24
+ InputModeExtensions,
25
+ type PreviewOptions,
26
+ createDataExtensions,
27
+ decorateMarkdown,
28
+ documentId,
29
+ folding,
30
+ formattingKeymap,
31
+ linkTooltip,
32
+ listener,
33
+ preview,
34
+ replacer,
35
+ selectionState,
36
+ snippets,
37
+ } from '@dxos/ui-editor';
38
+ import { type EditorViewMode, type RenderCallback } from '@dxos/ui-editor/types';
39
+ import { isTruthy, safeUrl } from '@dxos/util';
40
+
41
+ import { Markdown } from '#types';
42
+
43
+ import { setFallbackName } from '../util';
44
+
45
+ export type DocumentType = Markdown.Document | Text.Text | { id: string; text: string };
46
+
47
+ export type ExtensionsOptions = {
48
+ id: string;
49
+ object?: DocumentType;
50
+ settings?: Markdown.Settings;
51
+ compact?: boolean;
52
+ viewMode?: EditorViewMode;
53
+ editable?: boolean;
54
+ selectionManager?: SelectionManager;
55
+ editorStateStore?: EditorStateStore;
56
+ previewOptions?: PreviewOptions;
57
+ platform?: 'mobile' | 'desktop';
58
+ /** Callback when an internal link is clicked. */
59
+ onSelectObject?: (objectId: string) => void;
60
+ };
61
+
62
+ // TODO(burdon): Merge with createBaseExtensions below.
63
+ export const useExtensions = ({
64
+ id,
65
+ object,
66
+ settings,
67
+ compact,
68
+ viewMode,
69
+ selectionManager,
70
+ editorStateStore,
71
+ previewOptions,
72
+ onSelectObject,
73
+ }: ExtensionsOptions): Extension[] => {
74
+ const { platform } = useThemeContext();
75
+ const identity = useIdentity();
76
+ const space = getSpace(object);
77
+
78
+ // Get the content reference from Document objects.
79
+ const contentRef = Obj.instanceOf(Markdown.Document, object) ? (object as Markdown.Document).content : undefined;
80
+ // Use useObject to trigger re-render when the reference loads (returns snapshot for reactivity).
81
+ useObject(contentRef);
82
+ // Get the actual live object target via .target (needed for createDocAccessor).
83
+ const target = contentRef?.target ?? (Obj.instanceOf(Text.Text, object) ? object : undefined);
84
+
85
+ // TODO(wittjosiah): Autocomplete is not working and this query is causing performance issues.
86
+ // TODO(burdon): Unsubscribe.
87
+ // const query = space?.db.query(Filter.type(DocumentType));
88
+ // query?.subscribe();
89
+
90
+ const baseExtensions = useMemo(
91
+ () =>
92
+ createBaseExtensions({
93
+ id,
94
+ object,
95
+ settings,
96
+ compact,
97
+ viewMode,
98
+ selectionManager,
99
+ previewOptions,
100
+ platform,
101
+ onSelectObject,
102
+ }),
103
+ [
104
+ id,
105
+ object,
106
+ compact,
107
+ viewMode,
108
+ selectionManager,
109
+ previewOptions,
110
+ settings,
111
+ settings?.debug,
112
+ settings?.editorInputMode,
113
+ settings?.folding,
114
+ settings?.numberedHeadings,
115
+ platform,
116
+ onSelectObject,
117
+ ],
118
+ );
119
+
120
+ return useMemo<Extension[]>(
121
+ () =>
122
+ [
123
+ // TODO(burdon): Pass this in?
124
+ // NOTE: Data extensions must be first so that automerge is updated before other extensions compute their state.
125
+ target &&
126
+ createDataExtensions({
127
+ id,
128
+ text: createDocAccessor(target, ['content']),
129
+ messenger: space,
130
+ identity,
131
+ }),
132
+
133
+ // TODO(burdon): Reconcile with effect in parent.
134
+ Obj.instanceOf(Markdown.Document, object) &&
135
+ listener({
136
+ onChange: ({ text }) => {
137
+ setFallbackName(object as Markdown.Document, text);
138
+ },
139
+ }),
140
+
141
+ baseExtensions,
142
+ selectionState(editorStateStore),
143
+ ].filter(isTruthy),
144
+ [identity, space, id, object, target, baseExtensions],
145
+ );
146
+ };
147
+
148
+ /**
149
+ * Create extension instances for editor.
150
+ */
151
+ const createBaseExtensions = ({
152
+ id,
153
+ object,
154
+ onSelectObject,
155
+ settings,
156
+ compact,
157
+ viewMode,
158
+ selectionManager,
159
+ previewOptions,
160
+ platform,
161
+ }: ExtensionsOptions): Extension[] => {
162
+ const extensions: Extension[] = [
163
+ selectionManager && selectionChange(selectionManager),
164
+ settings?.editorInputMode && InputModeExtensions[settings.editorInputMode],
165
+ settings?.folding && !compact && platform !== 'mobile' && folding(),
166
+ ].filter(isTruthy);
167
+
168
+ //
169
+ // Markdown
170
+ //
171
+ if (viewMode !== 'source') {
172
+ extensions.push(
173
+ ...[
174
+ formattingKeymap(),
175
+ decorateMarkdown({
176
+ selectionChangeDelay: 100,
177
+ numberedHeadings: settings?.numberedHeadings ? { from: 2 } : undefined,
178
+ // TODO(wittjosiah): For internal links render the label of the object.
179
+ renderLinkButton: onSelectObject && createRenderLink(onSelectObject),
180
+ }),
181
+ linkTooltip(renderLinkTooltip),
182
+ preview(previewOptions),
183
+ replacer(),
184
+ ],
185
+ );
186
+ }
187
+
188
+ if (settings?.debug) {
189
+ const items = settings.snippets?.split(/[,\n]/) ?? '';
190
+ if (items) {
191
+ extensions.push(snippets({ items }));
192
+ }
193
+ }
194
+
195
+ return extensions;
196
+ };
197
+
198
+ const selectionChange = (selectionManager: SelectionManager) => {
199
+ const debouncedHandler = debounceAndThrottle((update: ViewUpdate) => {
200
+ const id = update.state.facet(documentId);
201
+ const cursorConverter = update.state.facet(Cursor.converter);
202
+ const selection = update.state.selection;
203
+ // NOTE: Filter on numeric offsets BEFORE converting to cursor strings.
204
+ // Cursors are opaque (Automerge-encoded), so a lexicographic `to > from`
205
+ // comparison is nondeterministic — it would let some cursor-placements
206
+ // (where from === to numerically) through and reject genuine selections
207
+ // depending on encoding, which made the comment button's enabled state
208
+ // appear random across different lines.
209
+ const ranges = selection.ranges
210
+ .filter((range) => range.to > range.from)
211
+ .map((range) => ({
212
+ from: cursorConverter.toCursor(range.from),
213
+ to: cursorConverter.toCursor(range.to),
214
+ }));
215
+
216
+ selectionManager.updateMultiRange(id, ranges);
217
+ }, 100);
218
+
219
+ return EditorView.updateListener.of((update: ViewUpdate) => {
220
+ if (update.selectionSet) {
221
+ debouncedHandler(update);
222
+ }
223
+ });
224
+ };
225
+
226
+ const createRenderLink =
227
+ (onSelectObject: (id: string) => void): RenderCallback<{ url: string }> =>
228
+ (el, { url }) => {
229
+ // TODO(burdon): Formalize/document internal link format.
230
+ const isInternal = url.startsWith('/') || url.startsWith(window.location.origin);
231
+ const qualifiedId = isInternal ? fromUrlPath(new URL(url, window.location.origin).pathname) : undefined;
232
+ const icon = Domino.of('span')
233
+ .classNames('dx-link ms-1 inline-block align-[-0.125em]')
234
+ .append(Domino.svg(isInternal ? 'ph--arrow-square-down--regular' : 'ph--arrow-square-out--regular'));
235
+
236
+ if (isInternal) {
237
+ invariant(qualifiedId, 'Invalid link format.');
238
+ icon
239
+ .attributes({ role: 'button', tabindex: '0' })
240
+ .on('click', (event) => {
241
+ event.preventDefault();
242
+ event.stopPropagation();
243
+ onSelectObject(qualifiedId);
244
+ })
245
+ .on('keydown', (event) => {
246
+ const keyboardEvent = event as KeyboardEvent;
247
+ if (keyboardEvent.key !== 'Enter' && keyboardEvent.key !== ' ') {
248
+ return;
249
+ }
250
+
251
+ keyboardEvent.preventDefault();
252
+ keyboardEvent.stopPropagation();
253
+ onSelectObject(qualifiedId);
254
+ });
255
+ }
256
+
257
+ el.appendChild(icon.root);
258
+ };
259
+
260
+ const renderLinkTooltip: RenderCallback<{ url: string }> = (el, { url }) => {
261
+ el.appendChild(
262
+ Domino.of('a')
263
+ .attributes({ href: url, target: '_blank', rel: 'noreferrer' })
264
+ .classNames('dx-link flex items-center gap-2')
265
+ .text(safeUrl(url)?.toString() ?? url)
266
+ .append(Domino.svg('ph--arrow-square-out--regular')).root,
267
+ );
268
+ };
@@ -0,0 +1,93 @@
1
+ //
2
+ // Copyright 2024 DXOS.org
3
+ //
4
+
5
+ import * as Option from 'effect/Option';
6
+ import { useCallback, useMemo } from 'react';
7
+
8
+ import { Annotation, type Database, Filter, Obj, Query, Type } from '@dxos/echo';
9
+ import { EntityKind, HiddenAnnotation, getTypeAnnotation } from '@dxos/echo/internal';
10
+ import { type Label, toLocalizedString, useTranslation } from '@dxos/react-ui';
11
+ import { type EditorMenuGroup, type EditorMenuItem } from '@dxos/react-ui-editor';
12
+ import { insertAtCursor, insertAtLineStart } from '@dxos/ui-editor';
13
+
14
+ import { Markdown } from '../types';
15
+
16
+ export const useLinkQuery = (db: Database.Database | undefined) => {
17
+ const { t } = useTranslation();
18
+
19
+ const filter = useMemo(
20
+ () =>
21
+ Filter.or(
22
+ ...(db ? db.graph.registry.list().filter(Type.isType) : [])
23
+ .filter((schema) => getTypeAnnotation(Type.getSchema(schema))?.kind !== EntityKind.Relation)
24
+ .filter((schema) => !HiddenAnnotation.get(Type.getSchema(schema)).pipe(Option.getOrElse(() => false)))
25
+ .map((schema) => Filter.typename(Type.getTypename(schema))),
26
+ ),
27
+ [db],
28
+ );
29
+
30
+ const handleLinkQuery = useCallback(
31
+ async (query?: string): Promise<EditorMenuGroup[]> => {
32
+ // A second "@" switches the link query into block-embed mode, so "@@foo" searches for "foo".
33
+ const name = query?.startsWith('@') ? query.slice(1).toLowerCase() : (query?.toLowerCase() ?? '');
34
+ const results = await db?.query(Query.select(filter)).run();
35
+
36
+ const getLabel = (object: Obj.Unknown): Label => {
37
+ const type = Obj.getTypename(object)!;
38
+ return Obj.getLabel(object) ?? ['object-name.placeholder', { ns: type, defaultValue: 'New object' }];
39
+ };
40
+
41
+ const items =
42
+ results
43
+ ?.filter((object) => toLocalizedString(getLabel(object), t).toLowerCase().includes(name))
44
+ .map((object: Obj.Unknown): EditorMenuItem => {
45
+ const type = Obj.getType(object);
46
+ const icon = type
47
+ ? Option.getOrUndefined(Annotation.IconAnnotation.get(Type.getSchema(type)))?.icon
48
+ : undefined;
49
+ const label = toLocalizedString(getLabel(object), t);
50
+ return {
51
+ id: object.id,
52
+ label,
53
+ icon,
54
+ onSelect: ({ view, head }) => {
55
+ const link = `[${label}](${Obj.getURI(object)})`;
56
+ // "@@" inserts a block embed on its own line instead of an inline link.
57
+ if (query?.startsWith('@')) {
58
+ insertAtLineStart(view, head, `!${link}\n`);
59
+ } else {
60
+ insertAtCursor(view, head, `${link} `);
61
+ }
62
+ },
63
+ };
64
+ }) ?? [];
65
+
66
+ // Add "Create new document" option at the end.
67
+ const createItem: EditorMenuItem = {
68
+ id: 'create-document',
69
+ label: ['add-object.label', { ns: Type.getTypename(Markdown.Document) }],
70
+ icon: 'ph--plus--regular',
71
+ onSelect: ({ view, head }) => {
72
+ const doc = Markdown.make({ name: name || undefined });
73
+ db?.add(doc);
74
+ const label = name || t('object-name.placeholder', { ns: Type.getTypename(Markdown.Document) });
75
+ const link = `[${label}](${Obj.getURI(doc)})`;
76
+ if (query?.startsWith('@')) {
77
+ insertAtLineStart(view, head, `!${link}\n`);
78
+ } else {
79
+ insertAtCursor(view, head, `${link} `);
80
+ }
81
+ },
82
+ };
83
+
84
+ return [
85
+ { id: 'echo', items },
86
+ { id: 'create', items: [createItem] },
87
+ ];
88
+ },
89
+ [db, filter, t],
90
+ );
91
+
92
+ return handleLinkQuery;
93
+ };
package/src/index.ts CHANGED
@@ -2,11 +2,8 @@
2
2
  // Copyright 2023 DXOS.org
3
3
  //
4
4
 
5
- export { MarkdownCapabilities } from './capabilities';
6
- export { MarkdownEvents } from './events';
7
-
5
+ export * from './blueprints';
8
6
  export * from './meta';
7
+ export * from './operations';
9
8
  export * from './types';
10
9
  export * from './util';
11
-
12
- export * from './MarkdownPlugin';
package/src/meta.ts CHANGED
@@ -2,18 +2,28 @@
2
2
  // Copyright 2023 DXOS.org
3
3
  //
4
4
 
5
- import { type PluginMeta } from '@dxos/app-framework';
5
+ import { Plugin } from '@dxos/app-framework';
6
+ import { DXN } from '@dxos/keys';
6
7
  import { trim } from '@dxos/util';
7
8
 
8
- export const meta: PluginMeta = {
9
- id: 'dxos.org/plugin/markdown',
9
+ export const meta = Plugin.makeMeta({
10
+ key: DXN.make('org.dxos.plugin.markdown'),
10
11
  name: 'Markdown',
12
+ author: 'DXOS',
11
13
  description: trim`
12
- A collaborative and extensible Markdown editor.
13
- In addition to markdown capabilities, the plugin supports collaborative in-line comments.
14
- You can use documents to extend the memory of your personal agents and add context for automated workflows.
14
+ A full-featured markdown editor for authoring documents in your space. Edits flow through a collaborative CodeMirror surface backed by ECHO Text, so every keystroke replicates to other peers in real time without merge conflicts or lost work.
15
+
16
+ Documents can be opened in source, preview, or read-only mode and rendered as a full-surface article or as embeddable cards. An optional formatting toolbar exposes headings, lists, links, and other common markdown actions, and dispositional toolbar actions contributed by other plugins are surfaced inline alongside it.
17
+
18
+ The editor integrates with the rest of the workspace through @ references that link to any ECHO object, image and file uploads stored in the active space, and anchored comment threads on text ranges. Comments can optionally be routed to an AI agent on every message or only on @mention.
19
+
20
+ A built-in blueprint exposes create, open, and update operations as tools for AI agents. Updates are applied as compact find-and-replace diffs against the document, making it safe for agents to edit large documents incrementally while you continue collaborating.
15
21
  `,
16
22
  icon: 'ph--text-aa--regular',
23
+ iconHue: 'indigo',
17
24
  source: 'https://github.com/dxos/dxos/tree/main/packages/plugins/plugin-markdown',
18
- screenshots: ['https://dxos.network/plugin-details-markdown-dark.png'],
19
- };
25
+ screenshots: [
26
+ 'https://customer-5rxcjpyab08avpmn.cloudflarestream.com/cdf2656365bb1fd327c1fc2105d75e5a/iframe?poster=https%3A%2F%2Fcustomer-5rxcjpyab08avpmn.cloudflarestream.com%2Fcdf2656365bb1fd327c1fc2105d75e5a%2Fthumbnails%2Fthumbnail.jpg%3Ftime%3D%26height%3D600',
27
+ 'https://dxos.network/plugin-details-markdown-dark.png',
28
+ ],
29
+ });
@@ -0,0 +1,19 @@
1
+ //
2
+ // Copyright 2025 DXOS.org
3
+ //
4
+
5
+ import * as Effect from 'effect/Effect';
6
+
7
+ import { Operation } from '@dxos/compute';
8
+
9
+ import { Markdown, MarkdownOperation } from '../types';
10
+
11
+ const handler: Operation.WithHandler<typeof MarkdownOperation.CreateMarkdown> = MarkdownOperation.CreateMarkdown.pipe(
12
+ Operation.withHandler(({ name, content }) =>
13
+ Effect.succeed({
14
+ object: Markdown.make({ name, content }),
15
+ }),
16
+ ),
17
+ );
18
+
19
+ export default handler;