@dxos/plugin-markdown 0.8.3 → 0.8.4-main.1da679c

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 (271) hide show
  1. package/dist/lib/browser/{MarkdownPreview-F4PYFW5L.mjs → MarkdownCard-JLUQITYK.mjs} +18 -18
  2. package/dist/lib/browser/MarkdownCard-JLUQITYK.mjs.map +7 -0
  3. package/dist/lib/browser/{MarkdownContainer-EFWQ6DHD.mjs → MarkdownContainer-OZ5DHEIA.mjs} +282 -302
  4. package/dist/lib/browser/MarkdownContainer-OZ5DHEIA.mjs.map +7 -0
  5. package/dist/lib/browser/{anchor-sort-BMAN2ABT.mjs → anchor-sort-SUD373SW.mjs} +8 -8
  6. package/dist/lib/browser/anchor-sort-SUD373SW.mjs.map +7 -0
  7. package/dist/lib/browser/{app-graph-serializer-EI6TEHRQ.mjs → app-graph-serializer-GH7JJZB7.mjs} +16 -17
  8. package/dist/lib/browser/app-graph-serializer-GH7JJZB7.mjs.map +7 -0
  9. package/dist/lib/browser/blueprint-definition-JSNGFAZB.mjs +11 -0
  10. package/dist/lib/browser/blueprint-definition-JSNGFAZB.mjs.map +7 -0
  11. package/dist/lib/browser/chunk-BEE7VQPU.mjs +78 -0
  12. package/dist/lib/browser/chunk-BEE7VQPU.mjs.map +7 -0
  13. package/dist/lib/browser/{chunk-LXSRQPEP.mjs → chunk-LAVZ2W6X.mjs} +9 -10
  14. package/dist/lib/browser/chunk-LAVZ2W6X.mjs.map +7 -0
  15. package/dist/lib/browser/chunk-ODB2PTBP.mjs +28 -0
  16. package/dist/lib/browser/chunk-ODB2PTBP.mjs.map +7 -0
  17. package/dist/lib/browser/chunk-OY6CGPOO.mjs +16 -0
  18. package/dist/lib/browser/chunk-OY6CGPOO.mjs.map +7 -0
  19. package/dist/lib/browser/chunk-SQLSKQRQ.mjs +22 -0
  20. package/dist/lib/browser/chunk-SQLSKQRQ.mjs.map +7 -0
  21. package/dist/lib/browser/chunk-UM2GILLR.mjs +102 -0
  22. package/dist/lib/browser/chunk-UM2GILLR.mjs.map +7 -0
  23. package/dist/lib/browser/{chunk-D767LUGU.mjs → chunk-Z7P6JGGW.mjs} +14 -12
  24. package/dist/lib/browser/chunk-Z7P6JGGW.mjs.map +7 -0
  25. package/dist/lib/browser/index.mjs +38 -25
  26. package/dist/lib/browser/index.mjs.map +3 -3
  27. package/dist/lib/browser/intent-resolver-SUBIHVU7.mjs +62 -0
  28. package/dist/lib/browser/intent-resolver-SUBIHVU7.mjs.map +7 -0
  29. package/dist/lib/browser/meta.json +1 -1
  30. package/dist/lib/{node-esm/react-surface-YHFOQTVO.mjs → browser/react-surface-JBQHF4GR.mjs} +64 -55
  31. package/dist/lib/browser/react-surface-JBQHF4GR.mjs.map +7 -0
  32. package/dist/lib/browser/{settings-PLH54VC7.mjs → settings-T5ZMC5TH.mjs} +8 -8
  33. package/dist/lib/browser/settings-T5ZMC5TH.mjs.map +7 -0
  34. package/dist/lib/browser/{state-KI6PJ6DT.mjs → state-6QODXCSZ.mjs} +10 -10
  35. package/dist/lib/browser/state-6QODXCSZ.mjs.map +7 -0
  36. package/dist/lib/browser/toolkit-GNADYSGW.mjs +74 -0
  37. package/dist/lib/browser/toolkit-GNADYSGW.mjs.map +7 -0
  38. package/dist/lib/browser/types/index.mjs +6 -14
  39. package/dist/lib/node-esm/{MarkdownPreview-KFDRV4GC.mjs → MarkdownCard-XL5EVSJ7.mjs} +18 -18
  40. package/dist/lib/node-esm/MarkdownCard-XL5EVSJ7.mjs.map +7 -0
  41. package/dist/lib/node-esm/{MarkdownContainer-O3SGMH4G.mjs → MarkdownContainer-Z4I23DPN.mjs} +282 -302
  42. package/dist/lib/node-esm/MarkdownContainer-Z4I23DPN.mjs.map +7 -0
  43. package/dist/lib/node-esm/{anchor-sort-BXL7BE67.mjs → anchor-sort-J2BK2XLZ.mjs} +8 -8
  44. package/dist/lib/node-esm/anchor-sort-J2BK2XLZ.mjs.map +7 -0
  45. package/dist/lib/node-esm/{app-graph-serializer-F7DGNF3G.mjs → app-graph-serializer-LRYCXG7N.mjs} +16 -17
  46. package/dist/lib/node-esm/app-graph-serializer-LRYCXG7N.mjs.map +7 -0
  47. package/dist/lib/node-esm/blueprint-definition-KX3Y5JHC.mjs +12 -0
  48. package/dist/lib/node-esm/blueprint-definition-KX3Y5JHC.mjs.map +7 -0
  49. package/dist/lib/node-esm/chunk-CB2R4YIY.mjs +17 -0
  50. package/dist/lib/node-esm/chunk-CB2R4YIY.mjs.map +7 -0
  51. package/dist/lib/node-esm/chunk-FXILAQ5F.mjs +79 -0
  52. package/dist/lib/node-esm/chunk-FXILAQ5F.mjs.map +7 -0
  53. package/dist/lib/node-esm/{chunk-BWDDFDJY.mjs → chunk-J7A6TUB2.mjs} +14 -12
  54. package/dist/lib/node-esm/chunk-J7A6TUB2.mjs.map +7 -0
  55. package/dist/lib/node-esm/chunk-KAXL7TWD.mjs +103 -0
  56. package/dist/lib/node-esm/chunk-KAXL7TWD.mjs.map +7 -0
  57. package/dist/lib/node-esm/chunk-MJZPYYIH.mjs +24 -0
  58. package/dist/lib/node-esm/chunk-MJZPYYIH.mjs.map +7 -0
  59. package/dist/lib/node-esm/{chunk-K26TX5V4.mjs → chunk-O6EXWGGS.mjs} +9 -10
  60. package/dist/lib/node-esm/chunk-O6EXWGGS.mjs.map +7 -0
  61. package/dist/lib/node-esm/chunk-VCG2U522.mjs +29 -0
  62. package/dist/lib/node-esm/chunk-VCG2U522.mjs.map +7 -0
  63. package/dist/lib/node-esm/index.mjs +38 -25
  64. package/dist/lib/node-esm/index.mjs.map +3 -3
  65. package/dist/lib/node-esm/intent-resolver-YZEGYWGA.mjs +63 -0
  66. package/dist/lib/node-esm/intent-resolver-YZEGYWGA.mjs.map +7 -0
  67. package/dist/lib/node-esm/meta.json +1 -1
  68. package/dist/lib/{browser/react-surface-4B5ELMEW.mjs → node-esm/react-surface-JOXUHXQJ.mjs} +65 -54
  69. package/dist/lib/node-esm/react-surface-JOXUHXQJ.mjs.map +7 -0
  70. package/dist/lib/node-esm/{settings-SIY33P3F.mjs → settings-LGG22OH4.mjs} +8 -8
  71. package/dist/lib/node-esm/settings-LGG22OH4.mjs.map +7 -0
  72. package/dist/lib/node-esm/{state-LLGVRYKL.mjs → state-W3PECOJX.mjs} +10 -10
  73. package/dist/lib/node-esm/state-W3PECOJX.mjs.map +7 -0
  74. package/dist/lib/node-esm/toolkit-ZCFWOGNH.mjs +75 -0
  75. package/dist/lib/node-esm/toolkit-ZCFWOGNH.mjs.map +7 -0
  76. package/dist/lib/node-esm/types/index.mjs +6 -14
  77. package/dist/types/src/MarkdownPlugin.d.ts.map +1 -1
  78. package/dist/types/src/capabilities/anchor-sort.d.ts +2 -2
  79. package/dist/types/src/capabilities/app-graph-serializer.d.ts +1 -1
  80. package/dist/types/src/capabilities/app-graph-serializer.d.ts.map +1 -1
  81. package/dist/types/src/capabilities/artifact-definition.d.ts +1 -9
  82. package/dist/types/src/capabilities/artifact-definition.d.ts.map +1 -1
  83. package/dist/types/src/capabilities/blueprint-definition.d.ts +5 -0
  84. package/dist/types/src/capabilities/blueprint-definition.d.ts.map +1 -0
  85. package/dist/types/src/capabilities/capabilities.d.ts +1 -1
  86. package/dist/types/src/capabilities/capabilities.d.ts.map +1 -1
  87. package/dist/types/src/capabilities/index.d.ts +12 -10
  88. package/dist/types/src/capabilities/index.d.ts.map +1 -1
  89. package/dist/types/src/capabilities/intent-resolver.d.ts +1 -1
  90. package/dist/types/src/capabilities/intent-resolver.d.ts.map +1 -1
  91. package/dist/types/src/capabilities/react-surface.d.ts +1 -1
  92. package/dist/types/src/capabilities/react-surface.d.ts.map +1 -1
  93. package/dist/types/src/capabilities/settings.d.ts +1 -1
  94. package/dist/types/src/capabilities/state.d.ts +2 -2
  95. package/dist/types/src/capabilities/state.d.ts.map +1 -1
  96. package/dist/types/src/capabilities/toolkit.d.ts +4 -0
  97. package/dist/types/src/capabilities/toolkit.d.ts.map +1 -0
  98. package/dist/types/src/components/MarkdownCard/MarkdownCard.d.ts +7 -0
  99. package/dist/types/src/components/MarkdownCard/MarkdownCard.d.ts.map +1 -0
  100. package/dist/types/src/components/MarkdownCard/MarkdownCard.stories.d.ts +10 -0
  101. package/dist/types/src/components/MarkdownCard/MarkdownCard.stories.d.ts.map +1 -0
  102. package/dist/types/src/components/MarkdownCard/index.d.ts +4 -0
  103. package/dist/types/src/components/MarkdownCard/index.d.ts.map +1 -0
  104. package/dist/types/src/components/MarkdownContainer.d.ts +5 -5
  105. package/dist/types/src/components/MarkdownContainer.d.ts.map +1 -1
  106. package/dist/types/src/components/MarkdownContainer.stories.d.ts +51 -4
  107. package/dist/types/src/components/MarkdownContainer.stories.d.ts.map +1 -1
  108. package/dist/types/src/components/MarkdownEditor/MarkdownEditor.d.ts +2 -2
  109. package/dist/types/src/components/MarkdownEditor/MarkdownEditor.d.ts.map +1 -1
  110. package/dist/types/src/components/MarkdownEditor/MarkdownEditor.stories.d.ts +110 -12
  111. package/dist/types/src/components/MarkdownEditor/MarkdownEditor.stories.d.ts.map +1 -1
  112. package/dist/types/src/components/MarkdownSettings/MarkdownSettings.d.ts +2 -2
  113. package/dist/types/src/components/MarkdownSettings/MarkdownSettings.d.ts.map +1 -1
  114. package/dist/types/src/components/Suggestions.stories.d.ts +3 -3
  115. package/dist/types/src/components/Suggestions.stories.d.ts.map +1 -1
  116. package/dist/types/src/components/Toolbar.stories.d.ts +44 -7
  117. package/dist/types/src/components/Toolbar.stories.d.ts.map +1 -1
  118. package/dist/types/src/components/index.d.ts +1 -1
  119. package/dist/types/src/components/index.d.ts.map +1 -1
  120. package/dist/types/src/events.d.ts.map +1 -1
  121. package/dist/types/src/extensions.d.ts +3 -5
  122. package/dist/types/src/extensions.d.ts.map +1 -1
  123. package/dist/types/src/functions/diff.d.ts +6 -0
  124. package/dist/types/src/functions/diff.d.ts.map +1 -0
  125. package/dist/types/src/functions/index.d.ts +3 -0
  126. package/dist/types/src/functions/index.d.ts.map +1 -0
  127. package/dist/types/src/functions/open.d.ts +7 -0
  128. package/dist/types/src/functions/open.d.ts.map +1 -0
  129. package/dist/types/src/index.d.ts +2 -1
  130. package/dist/types/src/index.d.ts.map +1 -1
  131. package/dist/types/src/meta.d.ts +0 -1
  132. package/dist/types/src/meta.d.ts.map +1 -1
  133. package/dist/types/src/translations.d.ts +36 -80
  134. package/dist/types/src/translations.d.ts.map +1 -1
  135. package/dist/types/src/types/Markdown.d.ts +43 -0
  136. package/dist/types/src/types/Markdown.d.ts.map +1 -0
  137. package/dist/types/src/types/MarkdownAction.d.ts +33 -0
  138. package/dist/types/src/types/MarkdownAction.d.ts.map +1 -0
  139. package/dist/types/src/types/index.d.ts +2 -1
  140. package/dist/types/src/types/index.d.ts.map +1 -1
  141. package/dist/types/src/types/types.d.ts +4 -59
  142. package/dist/types/src/types/types.d.ts.map +1 -1
  143. package/dist/types/src/util.d.ts +12 -3
  144. package/dist/types/src/util.d.ts.map +1 -1
  145. package/dist/types/tsconfig.tsbuildinfo +1 -1
  146. package/package.json +51 -48
  147. package/src/MarkdownPlugin.tsx +22 -13
  148. package/src/capabilities/anchor-sort.ts +3 -3
  149. package/src/capabilities/app-graph-serializer.ts +10 -8
  150. package/src/capabilities/artifact-definition.ts +19 -24
  151. package/src/capabilities/blueprint-definition.ts +39 -0
  152. package/src/capabilities/capabilities.ts +5 -4
  153. package/src/capabilities/index.ts +3 -1
  154. package/src/capabilities/intent-resolver.ts +15 -21
  155. package/src/capabilities/react-surface.tsx +22 -20
  156. package/src/capabilities/settings.ts +3 -3
  157. package/src/capabilities/state.ts +8 -8
  158. package/src/capabilities/toolkit.ts +47 -0
  159. package/src/components/MarkdownCard/MarkdownCard.stories.tsx +79 -0
  160. package/src/components/{MarkdownPreview/MarkdownPreview.tsx → MarkdownCard/MarkdownCard.tsx} +21 -17
  161. package/src/components/MarkdownCard/index.ts +9 -0
  162. package/src/components/MarkdownContainer.stories.tsx +39 -31
  163. package/src/components/MarkdownContainer.tsx +36 -21
  164. package/src/components/MarkdownEditor/MarkdownEditor.stories.tsx +10 -7
  165. package/src/components/MarkdownEditor/MarkdownEditor.tsx +28 -30
  166. package/src/components/MarkdownSettings/MarkdownSettings.tsx +81 -78
  167. package/src/components/Suggestions.stories.tsx +36 -33
  168. package/src/components/Toolbar.stories.tsx +19 -14
  169. package/src/components/index.ts +1 -1
  170. package/src/events.ts +2 -2
  171. package/src/extensions.tsx +28 -52
  172. package/src/functions/diff.ts +35 -0
  173. package/src/functions/index.ts +6 -0
  174. package/src/functions/open.ts +30 -0
  175. package/src/hooks/useSelectCurrentThread.tsx +3 -3
  176. package/src/index.ts +4 -1
  177. package/src/meta.ts +7 -8
  178. package/src/translations.ts +10 -7
  179. package/src/types/Markdown.ts +56 -0
  180. package/src/types/MarkdownAction.ts +29 -0
  181. package/src/types/index.ts +2 -1
  182. package/src/types/types.ts +7 -51
  183. package/src/util.tsx +20 -6
  184. package/dist/lib/browser/MarkdownContainer-EFWQ6DHD.mjs.map +0 -7
  185. package/dist/lib/browser/MarkdownPreview-F4PYFW5L.mjs.map +0 -7
  186. package/dist/lib/browser/anchor-sort-BMAN2ABT.mjs.map +0 -7
  187. package/dist/lib/browser/app-graph-serializer-EI6TEHRQ.mjs.map +0 -7
  188. package/dist/lib/browser/artifact-definition-FQ2R6KPT.mjs +0 -145
  189. package/dist/lib/browser/artifact-definition-FQ2R6KPT.mjs.map +0 -7
  190. package/dist/lib/browser/chunk-354IBM5X.mjs +0 -20
  191. package/dist/lib/browser/chunk-354IBM5X.mjs.map +0 -7
  192. package/dist/lib/browser/chunk-D767LUGU.mjs.map +0 -7
  193. package/dist/lib/browser/chunk-JX6XNEHE.mjs +0 -22
  194. package/dist/lib/browser/chunk-JX6XNEHE.mjs.map +0 -7
  195. package/dist/lib/browser/chunk-LXSRQPEP.mjs.map +0 -7
  196. package/dist/lib/browser/chunk-N2D26K6W.mjs +0 -79
  197. package/dist/lib/browser/chunk-N2D26K6W.mjs.map +0 -7
  198. package/dist/lib/browser/chunk-QVJETNGS.mjs +0 -16
  199. package/dist/lib/browser/chunk-QVJETNGS.mjs.map +0 -7
  200. package/dist/lib/browser/intent-resolver-6ZOABX2J.mjs +0 -64
  201. package/dist/lib/browser/intent-resolver-6ZOABX2J.mjs.map +0 -7
  202. package/dist/lib/browser/react-surface-4B5ELMEW.mjs.map +0 -7
  203. package/dist/lib/browser/settings-PLH54VC7.mjs.map +0 -7
  204. package/dist/lib/browser/state-KI6PJ6DT.mjs.map +0 -7
  205. package/dist/lib/node/MarkdownContainer-KYGUEZIL.cjs +0 -783
  206. package/dist/lib/node/MarkdownContainer-KYGUEZIL.cjs.map +0 -7
  207. package/dist/lib/node/MarkdownPreview-GCJJCXY6.cjs +0 -103
  208. package/dist/lib/node/MarkdownPreview-GCJJCXY6.cjs.map +0 -7
  209. package/dist/lib/node/anchor-sort-V3T4SFFI.cjs +0 -48
  210. package/dist/lib/node/anchor-sort-V3T4SFFI.cjs.map +0 -7
  211. package/dist/lib/node/app-graph-serializer-E6BXEDEL.cjs +0 -65
  212. package/dist/lib/node/app-graph-serializer-E6BXEDEL.cjs.map +0 -7
  213. package/dist/lib/node/artifact-definition-U27MH5SC.cjs +0 -158
  214. package/dist/lib/node/artifact-definition-U27MH5SC.cjs.map +0 -7
  215. package/dist/lib/node/chunk-3HHV4MM6.cjs +0 -101
  216. package/dist/lib/node/chunk-3HHV4MM6.cjs.map +0 -7
  217. package/dist/lib/node/chunk-CJLYFGPI.cjs +0 -74
  218. package/dist/lib/node/chunk-CJLYFGPI.cjs.map +0 -7
  219. package/dist/lib/node/chunk-FU3XZZCO.cjs +0 -58
  220. package/dist/lib/node/chunk-FU3XZZCO.cjs.map +0 -7
  221. package/dist/lib/node/chunk-IFYSBQE5.cjs +0 -35
  222. package/dist/lib/node/chunk-IFYSBQE5.cjs.map +0 -7
  223. package/dist/lib/node/chunk-LQAC5HL7.cjs +0 -68
  224. package/dist/lib/node/chunk-LQAC5HL7.cjs.map +0 -7
  225. package/dist/lib/node/chunk-ZU5OIHCY.cjs +0 -45
  226. package/dist/lib/node/chunk-ZU5OIHCY.cjs.map +0 -7
  227. package/dist/lib/node/index.cjs +0 -165
  228. package/dist/lib/node/index.cjs.map +0 -7
  229. package/dist/lib/node/intent-resolver-OEFLRNEJ.cjs +0 -77
  230. package/dist/lib/node/intent-resolver-OEFLRNEJ.cjs.map +0 -7
  231. package/dist/lib/node/meta.json +0 -1
  232. package/dist/lib/node/react-surface-456HQ4KZ.cjs +0 -218
  233. package/dist/lib/node/react-surface-456HQ4KZ.cjs.map +0 -7
  234. package/dist/lib/node/settings-E3NUTXJ4.cjs +0 -42
  235. package/dist/lib/node/settings-E3NUTXJ4.cjs.map +0 -7
  236. package/dist/lib/node/state-KKDRAG7X.cjs +0 -51
  237. package/dist/lib/node/state-KKDRAG7X.cjs.map +0 -7
  238. package/dist/lib/node/types/index.cjs +0 -40
  239. package/dist/lib/node/types/index.cjs.map +0 -7
  240. package/dist/lib/node-esm/MarkdownContainer-O3SGMH4G.mjs.map +0 -7
  241. package/dist/lib/node-esm/MarkdownPreview-KFDRV4GC.mjs.map +0 -7
  242. package/dist/lib/node-esm/anchor-sort-BXL7BE67.mjs.map +0 -7
  243. package/dist/lib/node-esm/app-graph-serializer-F7DGNF3G.mjs.map +0 -7
  244. package/dist/lib/node-esm/artifact-definition-NQOHB6S5.mjs +0 -146
  245. package/dist/lib/node-esm/artifact-definition-NQOHB6S5.mjs.map +0 -7
  246. package/dist/lib/node-esm/chunk-BWDDFDJY.mjs.map +0 -7
  247. package/dist/lib/node-esm/chunk-JXXDCSMW.mjs +0 -17
  248. package/dist/lib/node-esm/chunk-JXXDCSMW.mjs.map +0 -7
  249. package/dist/lib/node-esm/chunk-K26TX5V4.mjs.map +0 -7
  250. package/dist/lib/node-esm/chunk-RX63ZNML.mjs +0 -24
  251. package/dist/lib/node-esm/chunk-RX63ZNML.mjs.map +0 -7
  252. package/dist/lib/node-esm/chunk-T2Y2BT53.mjs +0 -80
  253. package/dist/lib/node-esm/chunk-T2Y2BT53.mjs.map +0 -7
  254. package/dist/lib/node-esm/chunk-YOABAQ7A.mjs +0 -22
  255. package/dist/lib/node-esm/chunk-YOABAQ7A.mjs.map +0 -7
  256. package/dist/lib/node-esm/intent-resolver-CLMSVF2K.mjs +0 -65
  257. package/dist/lib/node-esm/intent-resolver-CLMSVF2K.mjs.map +0 -7
  258. package/dist/lib/node-esm/react-surface-YHFOQTVO.mjs.map +0 -7
  259. package/dist/lib/node-esm/settings-SIY33P3F.mjs.map +0 -7
  260. package/dist/lib/node-esm/state-LLGVRYKL.mjs.map +0 -7
  261. package/dist/types/src/components/MarkdownPreview/MarkdownPreview.d.ts +0 -6
  262. package/dist/types/src/components/MarkdownPreview/MarkdownPreview.d.ts.map +0 -1
  263. package/dist/types/src/components/MarkdownPreview/MarkdownPreview.stories.d.ts +0 -17
  264. package/dist/types/src/components/MarkdownPreview/MarkdownPreview.stories.d.ts.map +0 -1
  265. package/dist/types/src/components/MarkdownPreview/index.d.ts +0 -4
  266. package/dist/types/src/components/MarkdownPreview/index.d.ts.map +0 -1
  267. package/dist/types/src/types/schema.d.ts +0 -35
  268. package/dist/types/src/types/schema.d.ts.map +0 -1
  269. package/src/components/MarkdownPreview/MarkdownPreview.stories.tsx +0 -74
  270. package/src/components/MarkdownPreview/index.ts +0 -9
  271. package/src/types/schema.ts +0 -39
@@ -2,30 +2,35 @@
2
2
  // Copyright 2023 DXOS.org
3
3
  //
4
4
 
5
+ import { type ViewUpdate } from '@codemirror/view';
5
6
  import React, { type AnchorHTMLAttributes, type ReactNode, useMemo } from 'react';
6
7
  import { createRoot } from 'react-dom/client';
7
8
 
8
9
  import {
9
- createIntent,
10
10
  LayoutAction,
11
11
  type PromiseIntentDispatcher,
12
+ createIntent,
12
13
  useCapabilities,
13
14
  useIntentDispatcher,
14
15
  } from '@dxos/app-framework';
16
+ import { debounceAndThrottle } from '@dxos/async';
15
17
  import { invariant } from '@dxos/invariant';
16
- import { createDocAccessor, fullyQualifiedId, getSpace, type QueryResult } from '@dxos/react-client/echo';
18
+ import { createDocAccessor, fullyQualifiedId, getSpace } from '@dxos/react-client/echo';
17
19
  import { useIdentity } from '@dxos/react-client/halo';
18
20
  import { Icon, ThemeProvider } from '@dxos/react-ui';
19
21
  import { type SelectionManager } from '@dxos/react-ui-attention';
20
22
  import {
21
- type AutocompleteResult,
23
+ Cursor,
22
24
  type EditorStateStore,
25
+ EditorView,
23
26
  type EditorViewMode,
24
27
  type Extension,
25
28
  InputModeExtensions,
29
+ type PreviewOptions,
30
+ type RenderCallback,
26
31
  createDataExtensions,
27
- autocomplete,
28
32
  decorateMarkdown,
33
+ documentId,
29
34
  folding,
30
35
  formattingKeymap,
31
36
  linkTooltip,
@@ -33,27 +38,21 @@ import {
33
38
  preview,
34
39
  selectionState,
35
40
  typewriter,
36
- type RenderCallback,
37
- EditorView,
38
- documentId,
39
- Cursor,
40
- type PreviewOptions,
41
41
  } from '@dxos/react-ui-editor';
42
42
  import { defaultTx } from '@dxos/react-ui-theme';
43
43
  import { type DataType } from '@dxos/schema';
44
44
  import { isNotFalsy } from '@dxos/util';
45
45
 
46
46
  import { MarkdownCapabilities } from './capabilities';
47
- import { type DocumentType, type MarkdownSettingsProps } from './types';
47
+ import { type Markdown } from './types';
48
48
  import { setFallbackName } from './util';
49
49
 
50
50
  type ExtensionsOptions = {
51
- document?: DocumentType;
51
+ document?: Markdown.Document;
52
52
  id?: string;
53
53
  text?: DataType.Text;
54
54
  dispatch?: PromiseIntentDispatcher;
55
- query?: QueryResult<DocumentType>;
56
- settings: MarkdownSettingsProps;
55
+ settings: Markdown.Settings;
57
56
  selectionManager?: SelectionManager;
58
57
  viewMode?: EditorViewMode;
59
58
  editorStateStore?: EditorStateStore;
@@ -172,7 +171,6 @@ const createBaseExtensions = ({
172
171
  dispatch,
173
172
  settings,
174
173
  selectionManager,
175
- query,
176
174
  viewMode,
177
175
  previewOptions,
178
176
  }: ExtensionsOptions): Extension[] => {
@@ -214,30 +212,6 @@ const createBaseExtensions = ({
214
212
  );
215
213
  }
216
214
 
217
- //
218
- // Autocomplete object links.
219
- //
220
- if (query) {
221
- extensions.push(
222
- autocomplete({
223
- onSearch: (text: string) => {
224
- // TODO(burdon): Specify filter (e.g., stack).
225
- return query.objects
226
- .map<AutocompleteResult | undefined>((object) =>
227
- object.name?.length && object.id !== document?.id
228
- ? {
229
- label: object.name,
230
- // TODO(burdon): Factor out URL builder.
231
- apply: `[${object.name}](/${fullyQualifiedId(object)})`,
232
- }
233
- : undefined,
234
- )
235
- .filter(isNotFalsy);
236
- },
237
- }),
238
- );
239
- }
240
-
241
215
  if (settings.debug) {
242
216
  const items = settings.typewriter?.split(/[,\n]/) ?? '';
243
217
  if (items) {
@@ -249,20 +223,22 @@ const createBaseExtensions = ({
249
223
  };
250
224
 
251
225
  export const selectionChange = (selectionManager: SelectionManager) => {
252
- return EditorView.updateListener.of((update) => {
253
- if (update.selectionSet) {
254
- const id = update.state.facet(documentId);
255
- const cursorConverter = update.state.facet(Cursor.converter);
256
- const selection = update.state.selection;
257
- const ranges = selection.ranges
258
- .map((range) => ({
259
- from: cursorConverter.toCursor(range.from),
260
- to: cursorConverter.toCursor(range.to),
261
- }))
262
- .filter(({ from, to }) => to > from);
263
- selectionManager.updateMultiRange(id, ranges);
264
- }
265
- });
226
+ return EditorView.updateListener.of(
227
+ debounceAndThrottle((update: ViewUpdate) => {
228
+ if (update.selectionSet) {
229
+ const id = update.state.facet(documentId);
230
+ const cursorConverter = update.state.facet(Cursor.converter);
231
+ const selection = update.state.selection;
232
+ const ranges = selection.ranges
233
+ .map((range) => ({
234
+ from: cursorConverter.toCursor(range.from),
235
+ to: cursorConverter.toCursor(range.to),
236
+ }))
237
+ .filter(({ from, to }) => to > from);
238
+ selectionManager.updateMultiRange(id, ranges);
239
+ }
240
+ }, 100),
241
+ );
266
242
  };
267
243
 
268
244
  // TODO(burdon): Factor out styles.
@@ -0,0 +1,35 @@
1
+ //
2
+ // Copyright 2025 DXOS.org
3
+ //
4
+
5
+ import { Effect, Schema } from 'effect';
6
+
7
+ import { ArtifactId, applyDiffs } from '@dxos/assistant';
8
+ import { createDocAccessor } from '@dxos/echo-db';
9
+ import { DatabaseService, defineFunction } from '@dxos/functions';
10
+ import { trim } from '@dxos/util';
11
+
12
+ import { Markdown } from '../types';
13
+
14
+ // TODO(wittjosiah): Reconcile with ThreadAction.AddProposal.
15
+ export default defineFunction({
16
+ name: 'dxos.org/function/markdown/diff',
17
+ description: trim`
18
+ Applies a set of diffs to the markdown document.
19
+ `,
20
+ inputSchema: Schema.Struct({
21
+ id: ArtifactId.annotations({
22
+ description: 'The ID of the markdown document.',
23
+ }),
24
+ diffs: Schema.Array(Schema.String).annotations({
25
+ description: 'The diffs to apply to the document.',
26
+ }),
27
+ }),
28
+ outputSchema: Schema.Void,
29
+ handler: Effect.fn(function* ({ data: { id, diffs } }) {
30
+ const object = yield* DatabaseService.resolve(ArtifactId.toDXN(id), Markdown.Document);
31
+ const content = yield* Effect.promise(() => object.content.load());
32
+ const accessor = createDocAccessor(content, ['content']);
33
+ applyDiffs(accessor, diffs);
34
+ }),
35
+ });
@@ -0,0 +1,6 @@
1
+ //
2
+ // Copyright 2024 DXOS.org
3
+ //
4
+
5
+ export { default as diff } from './diff';
6
+ export { default as open } from './open';
@@ -0,0 +1,30 @@
1
+ //
2
+ // Copyright 2025 DXOS.org
3
+ //
4
+
5
+ import { Effect, Schema } from 'effect';
6
+
7
+ import { ArtifactId } from '@dxos/assistant';
8
+ import { DatabaseService, defineFunction } from '@dxos/functions';
9
+
10
+ import { Markdown } from '../types';
11
+
12
+ export default defineFunction({
13
+ name: 'dxos.org/function/markdown/open',
14
+ description: 'Opens and reads the contents of a new markdown document.',
15
+ inputSchema: Schema.Struct({
16
+ id: ArtifactId.annotations({
17
+ description: 'The ID of the markdown document.',
18
+ }),
19
+ }),
20
+ outputSchema: Schema.Struct({
21
+ content: Schema.String,
22
+ }),
23
+ handler: Effect.fn(function* ({ data: { id } }) {
24
+ const object = yield* DatabaseService.resolve(ArtifactId.toDXN(id), Markdown.Document);
25
+ const { content } = yield* Effect.promise(() => object.content.load());
26
+ return {
27
+ content,
28
+ };
29
+ }),
30
+ });
@@ -6,11 +6,11 @@ import { EditorView } from '@codemirror/view';
6
6
  import { Schema } from 'effect';
7
7
  import { useMemo } from 'react';
8
8
 
9
- import { createResolver, LayoutAction, useIntentResolver } from '@dxos/app-framework';
9
+ import { LayoutAction, createResolver, useIntentResolver } from '@dxos/app-framework';
10
10
  import { invariant } from '@dxos/invariant';
11
11
  import { Cursor, setSelection } from '@dxos/react-ui-editor';
12
12
 
13
- import { MARKDOWN_PLUGIN } from '../meta';
13
+ import { meta } from '../meta';
14
14
 
15
15
  /**
16
16
  * Handle scrolling and selection of the current thread in a markdown editor.
@@ -52,5 +52,5 @@ export const useSelectCurrentThread = (editorView: EditorView | undefined, docum
52
52
  [documentId, editorView],
53
53
  );
54
54
 
55
- useIntentResolver(MARKDOWN_PLUGIN, scrollIntoViewResolver);
55
+ useIntentResolver(meta.id, scrollIntoViewResolver);
56
56
  };
package/src/index.ts CHANGED
@@ -4,6 +4,9 @@
4
4
 
5
5
  export { MarkdownCapabilities } from './capabilities';
6
6
  export { MarkdownEvents } from './events';
7
- export * from './MarkdownPlugin';
7
+
8
8
  export * from './meta';
9
+ export * from './types';
9
10
  export * from './util';
11
+
12
+ export * from './MarkdownPlugin';
package/src/meta.ts CHANGED
@@ -3,18 +3,17 @@
3
3
  //
4
4
 
5
5
  import { type PluginMeta } from '@dxos/app-framework';
6
-
7
- export const MARKDOWN_PLUGIN = 'dxos.org/plugin/markdown';
6
+ import { trim } from '@dxos/util';
8
7
 
9
8
  export const meta: PluginMeta = {
10
- id: MARKDOWN_PLUGIN,
9
+ id: 'dxos.org/plugin/markdown',
11
10
  name: 'Markdown',
12
- description: `
13
- A Markdown editor that is collaborative and fully extensible. It provides rich text editing as well as read only and markdown view.
14
- In addition to markdown capabilities, it also support threaded in-line comments which can be accessed from the right hand sidebar at any times inside the document.
15
- Your AI agent will have access to all markdown docs in your Space which means you can use them to extend the memory of your personal agent and add long term context for automated workflows.
11
+ 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.
16
15
  `,
17
- source: 'https://github.com/dxos/dxos/tree/main/packages/plugins/plugin-markdown',
18
16
  icon: 'ph--text-aa--regular',
17
+ source: 'https://github.com/dxos/dxos/tree/main/packages/plugins/plugin-markdown',
19
18
  screenshots: ['https://dxos.network/plugin-details-markdown-dark.png'],
20
19
  };
@@ -2,23 +2,26 @@
2
2
  // Copyright 2023 DXOS.org
3
3
  //
4
4
 
5
- import { Type } from '@dxos/echo';
5
+ import { type Resource } from '@dxos/react-ui';
6
6
 
7
- import { MARKDOWN_PLUGIN } from './meta';
8
- import { DocumentType } from './types';
7
+ import { meta } from './meta';
8
+ import { Markdown } from './types';
9
9
 
10
- export default [
10
+ export const translations = [
11
11
  {
12
12
  'en-US': {
13
- [Type.getTypename(DocumentType)]: {
13
+ [Markdown.Document.typename]: {
14
14
  'typename label': 'Document',
15
15
  'typename label_zero': 'Documents',
16
16
  'typename label_one': 'Document',
17
17
  'typename label_other': 'Documents',
18
18
  'object name placeholder': 'New document',
19
+ 'rename object label': 'Rename document',
20
+ 'delete object label': 'Delete document',
19
21
  },
20
- [MARKDOWN_PLUGIN]: {
22
+ [meta.id]: {
21
23
  'plugin name': 'Editor',
24
+ 'settings title': 'Editor settings',
22
25
  'choose markdown from space dialog title': 'Choose one or more documents to add',
23
26
  // TODO(burdon): Style-guide for user-facing text (e.g., hints, questions, capitalization, etc.)
24
27
  'empty choose markdown from space message': 'None available; try creating a new one instead?',
@@ -43,4 +46,4 @@ export default [
43
46
  },
44
47
  },
45
48
  },
46
- ];
49
+ ] as const satisfies Resource[];
@@ -0,0 +1,56 @@
1
+ //
2
+ // Copyright 2024 DXOS.org
3
+ //
4
+
5
+ import { Schema } from 'effect';
6
+
7
+ import { Obj, Ref, Type } from '@dxos/echo';
8
+ import { LabelAnnotation } from '@dxos/echo-schema';
9
+ import { EditorInputMode, EditorViewMode } from '@dxos/react-ui-editor/types';
10
+ import { DataType, ItemAnnotation } from '@dxos/schema';
11
+
12
+ /**
13
+ * Document Item type.
14
+ */
15
+ export const Document = Schema.Struct({
16
+ name: Schema.optional(Schema.String),
17
+ fallbackName: Schema.optional(Schema.String),
18
+ content: Type.Ref(DataType.Text),
19
+ }).pipe(
20
+ Type.Obj({
21
+ typename: 'dxos.org/type/Document',
22
+ version: '0.1.0',
23
+ }),
24
+ LabelAnnotation.set(['name', 'fallbackName']),
25
+ ItemAnnotation.set(true),
26
+ );
27
+
28
+ export type Document = Schema.Schema.Type<typeof Document>;
29
+
30
+ /**
31
+ * Document factory.
32
+ */
33
+ export const makeDocument = ({
34
+ content = '',
35
+ ...props
36
+ }: Partial<{ name: string; fallbackName: string; content: string }> = {}) =>
37
+ Obj.make(Document, { ...props, content: Ref.make(DataType.makeText(content)) });
38
+
39
+ /**
40
+ * Plugin settings.
41
+ */
42
+ export const Settings = Schema.mutable(
43
+ Schema.Struct({
44
+ defaultViewMode: EditorViewMode,
45
+ editorInputMode: Schema.optional(EditorInputMode),
46
+ experimental: Schema.optional(Schema.Boolean),
47
+ debug: Schema.optional(Schema.Boolean),
48
+ toolbar: Schema.optional(Schema.Boolean),
49
+ typewriter: Schema.optional(Schema.String),
50
+ // TODO(burdon): Per document settings.
51
+ numberedHeadings: Schema.optional(Schema.Boolean),
52
+ folding: Schema.optional(Schema.Boolean),
53
+ }),
54
+ );
55
+
56
+ export interface Settings extends Schema.Schema.Type<typeof Settings> {}
@@ -0,0 +1,29 @@
1
+ //
2
+ // Copyright 2023 DXOS.org
3
+ //
4
+
5
+ import { Schema } from 'effect';
6
+
7
+ import { EditorViewMode } from '@dxos/react-ui-editor/types';
8
+
9
+ import { meta } from '../meta';
10
+
11
+ import { Document } from './Markdown';
12
+
13
+ export class Create extends Schema.TaggedClass<Create>()(`${meta.id}/action/create`, {
14
+ input: Schema.Struct({
15
+ name: Schema.optional(Schema.String),
16
+ content: Schema.optional(Schema.String),
17
+ }),
18
+ output: Schema.Struct({
19
+ object: Document,
20
+ }),
21
+ }) {}
22
+
23
+ export class SetViewMode extends Schema.TaggedClass<SetViewMode>()(`${meta.id}/action/set-view-mode`, {
24
+ input: Schema.Struct({
25
+ id: Schema.String,
26
+ viewMode: EditorViewMode,
27
+ }),
28
+ output: Schema.Void,
29
+ }) {}
@@ -2,5 +2,6 @@
2
2
  // Copyright 2024 DXOS.org
3
3
  //
4
4
 
5
- export * from './schema';
5
+ export * as MarkdownAction from './MarkdownAction';
6
+ export * as Markdown from './Markdown';
6
7
  export * from './types';
@@ -2,44 +2,16 @@
2
2
  // Copyright 2023 DXOS.org
3
3
  //
4
4
 
5
- import { Schema } from 'effect';
5
+ import { type Extension } from '@dxos/react-ui-editor';
6
+ import { type EditorViewMode } from '@dxos/react-ui-editor/types';
6
7
 
7
- import { Type } from '@dxos/echo';
8
- // TODO(wittjosiah): This pulls in UI code into the types entrypoint.
9
- import { type Extension, EditorInputMode, EditorViewMode } from '@dxos/react-ui-editor';
8
+ import { type Document } from './Markdown';
10
9
 
11
- import { DocumentType } from './schema';
12
- import { MARKDOWN_PLUGIN } from '../meta';
10
+ // TODO(burdon): Remove these from ./types since not part of plugin-markdown API?
11
+ // TODO(wittjosiah): MarkdownExtensionProvider is a part of the MarkdownCapabilities api which should be in ./types.
13
12
 
14
- const MARKDOWN_ACTION = `${MARKDOWN_PLUGIN}/action`;
15
-
16
- export namespace MarkdownAction {
17
- export class Create extends Schema.TaggedClass<Create>()(MARKDOWN_ACTION, {
18
- input: Schema.Struct({
19
- spaceId: Type.SpaceId,
20
- name: Schema.optional(Schema.String),
21
- content: Schema.optional(Schema.String),
22
- }),
23
- output: Schema.Struct({
24
- object: DocumentType,
25
- }),
26
- }) {}
27
-
28
- export class SetViewMode extends Schema.TaggedClass<SetViewMode>()(`${MARKDOWN_ACTION}/set-view-mode`, {
29
- input: Schema.Struct({
30
- id: Schema.String,
31
- viewMode: EditorViewMode,
32
- }),
33
- output: Schema.Void,
34
- }) {}
35
- }
36
-
37
- export type MarkdownProperties = Record<string, any>;
38
-
39
- // TODO(burdon): Async.
40
- export type MarkdownExtensionProvider = (props: { document?: DocumentType }) => Extension | undefined;
41
-
42
- export type OnChange = (text: string) => void;
13
+ // TODO(burdon): Async?
14
+ export type MarkdownExtensionProvider = (props: { document?: Document }) => Extension | undefined;
43
15
 
44
16
  export type MarkdownPluginState = {
45
17
  // Codemirror extensions provided by other plugins.
@@ -49,19 +21,3 @@ export type MarkdownPluginState = {
49
21
  // View mode per document.
50
22
  viewMode: Record<string, EditorViewMode>;
51
23
  };
52
-
53
- export const MarkdownSettingsSchema = Schema.mutable(
54
- Schema.Struct({
55
- defaultViewMode: EditorViewMode,
56
- editorInputMode: Schema.optional(EditorInputMode),
57
- experimental: Schema.optional(Schema.Boolean),
58
- debug: Schema.optional(Schema.Boolean),
59
- toolbar: Schema.optional(Schema.Boolean),
60
- typewriter: Schema.optional(Schema.String),
61
- // TODO(burdon): Per document settings.
62
- numberedHeadings: Schema.optional(Schema.Boolean),
63
- folding: Schema.optional(Schema.Boolean),
64
- }),
65
- );
66
-
67
- export type MarkdownSettingsProps = Schema.Schema.Type<typeof MarkdownSettingsSchema>;
package/src/util.tsx CHANGED
@@ -3,11 +3,25 @@
3
3
  //
4
4
 
5
5
  import { debounce } from '@dxos/async';
6
- import { Obj, Ref } from '@dxos/echo';
6
+ import { Obj } from '@dxos/echo';
7
7
  import { type TypedObjectSerializer } from '@dxos/plugin-space/types';
8
- import { DataType } from '@dxos/schema';
9
8
 
10
- import { DocumentType, type MarkdownProperties } from './types';
9
+ import { Markdown } from './types';
10
+
11
+ /**
12
+ * Checks if an object conforms to the interface needed to render an editor.
13
+ * @deprecated Use Schema.instanceOf(Markdown.Document, data)
14
+ */
15
+ // TODO(burdon): Normalize types (from FilesPlugin).
16
+ export const isEditorModel = (data: any): data is { id: string; text: string } =>
17
+ data &&
18
+ typeof data === 'object' &&
19
+ 'id' in data &&
20
+ typeof data.id === 'string' &&
21
+ 'text' in data &&
22
+ typeof data.text === 'string';
23
+
24
+ export type MarkdownProperties = Record<string, any>;
11
25
 
12
26
  export const isMarkdownProperties = (data: unknown): data is MarkdownProperties =>
13
27
  (Obj.isObject(data) as boolean)
@@ -26,14 +40,14 @@ export const getAbstract = (content: string) => {
26
40
  return content.substring(0, 128).split('\n')[0].replaceAll(nonTitleChars, '').trim();
27
41
  };
28
42
 
29
- export const setFallbackName = debounce((doc: DocumentType, content: string) => {
43
+ export const setFallbackName = debounce((doc: Markdown.Document, content: string) => {
30
44
  const name = getFallbackName(content);
31
45
  if (doc.fallbackName !== name) {
32
46
  doc.fallbackName = name;
33
47
  }
34
48
  }, 200);
35
49
 
36
- export const serializer: TypedObjectSerializer<DocumentType> = {
50
+ export const serializer: TypedObjectSerializer<Markdown.Document> = {
37
51
  serialize: async ({ object }): Promise<string> => {
38
52
  const { content } = await object.content.load();
39
53
  return JSON.stringify({ name: object.name, fallbackName: object.fallbackName, content });
@@ -41,6 +55,6 @@ export const serializer: TypedObjectSerializer<DocumentType> = {
41
55
 
42
56
  deserialize: async ({ content: serialized }) => {
43
57
  const { name, fallbackName, content } = JSON.parse(serialized);
44
- return Obj.make(DocumentType, { name, fallbackName, content: Ref.make(Obj.make(DataType.Text, { content })) });
58
+ return Markdown.makeDocument({ name, fallbackName, content });
45
59
  },
46
60
  };