@dxos/plugin-markdown 0.8.4-main.422d1c7879 → 0.8.4-main.43cb759274

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 (316) 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/{browser/MarkdownSettings-62YSRY7L.mjs → neutral/MarkdownSettings-YCTZJL5V.mjs} +4 -4
  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-KDN4GKG2.mjs +98 -0
  35. package/dist/lib/neutral/chunk-KDN4GKG2.mjs.map +7 -0
  36. package/dist/lib/{browser/blueprints/index.mjs → neutral/chunk-LXNSKCPD.mjs} +10 -17
  37. package/dist/lib/neutral/chunk-LXNSKCPD.mjs.map +7 -0
  38. package/dist/lib/neutral/comment-config-ZEA66BUR.mjs +31 -0
  39. package/dist/lib/neutral/comment-config-ZEA66BUR.mjs.map +7 -0
  40. package/dist/lib/{browser → neutral/components}/index.mjs +19 -280
  41. package/dist/lib/neutral/components/index.mjs.map +7 -0
  42. package/dist/lib/neutral/containers/index.mjs +13 -0
  43. package/dist/lib/neutral/containers/index.mjs.map +7 -0
  44. package/dist/lib/{browser/create-YL5ELZWP.mjs → neutral/create-HONLDBVT.mjs} +7 -9
  45. package/dist/lib/neutral/create-HONLDBVT.mjs.map +7 -0
  46. package/dist/lib/{browser/create-markdown-LU5IDKMH.mjs → neutral/create-markdown-UCPD2Z3V.mjs} +5 -7
  47. package/dist/lib/neutral/create-markdown-UCPD2Z3V.mjs.map +7 -0
  48. package/dist/lib/neutral/create-object-VU3KX663.mjs +28 -0
  49. package/dist/lib/neutral/create-object-VU3KX663.mjs.map +7 -0
  50. package/dist/lib/neutral/hooks/index.mjs +316 -0
  51. package/dist/lib/neutral/hooks/index.mjs.map +7 -0
  52. package/dist/lib/neutral/index.mjs +42 -0
  53. package/dist/lib/neutral/meta.json +1 -0
  54. package/dist/lib/neutral/meta.mjs +8 -0
  55. package/dist/lib/{browser/open-AFSOZZ6G.mjs → neutral/open-VVDMNJ7J.mjs} +5 -6
  56. package/dist/lib/neutral/open-VVDMNJ7J.mjs.map +7 -0
  57. package/dist/lib/neutral/operation-handler-2ARMPBGZ.mjs +13 -0
  58. package/dist/lib/neutral/operation-handler-2ARMPBGZ.mjs.map +7 -0
  59. package/dist/lib/neutral/operations/index.mjs +8 -0
  60. package/dist/lib/neutral/operations/index.mjs.map +7 -0
  61. package/dist/lib/neutral/plugin.mjs +16 -0
  62. package/dist/lib/neutral/plugin.mjs.map +7 -0
  63. package/dist/lib/neutral/react-surface-EMYFM37T.mjs +119 -0
  64. package/dist/lib/neutral/react-surface-EMYFM37T.mjs.map +7 -0
  65. package/dist/lib/{browser/scroll-to-anchor-IPXV32A6.mjs → neutral/scroll-to-anchor-Y3P676QG.mjs} +7 -9
  66. package/dist/lib/neutral/scroll-to-anchor-Y3P676QG.mjs.map +7 -0
  67. package/dist/lib/neutral/set-view-mode-JZB7UXIF.mjs +24 -0
  68. package/dist/lib/neutral/set-view-mode-JZB7UXIF.mjs.map +7 -0
  69. package/dist/lib/neutral/settings-TDGDLCUR.mjs +34 -0
  70. package/dist/lib/neutral/settings-TDGDLCUR.mjs.map +7 -0
  71. package/dist/lib/neutral/state-5COCF5PN.mjs +44 -0
  72. package/dist/lib/neutral/state-5COCF5PN.mjs.map +7 -0
  73. package/dist/lib/neutral/testing.mjs +30 -0
  74. package/dist/lib/neutral/testing.mjs.map +7 -0
  75. package/dist/lib/neutral/translations.mjs +44 -0
  76. package/dist/lib/neutral/translations.mjs.map +7 -0
  77. package/dist/lib/neutral/types/index.mjs +16 -0
  78. package/dist/lib/neutral/types/index.mjs.map +7 -0
  79. package/dist/lib/{browser/update-HZNVYBMO.mjs → neutral/update-markdown-F25F4EPF.mjs} +8 -9
  80. package/dist/lib/neutral/update-markdown-F25F4EPF.mjs.map +7 -0
  81. package/dist/types/src/MarkdownPlugin.d.ts +1 -0
  82. package/dist/types/src/MarkdownPlugin.d.ts.map +1 -1
  83. package/dist/types/src/{cli/plugin.d.ts → MarkdownPlugin.node.d.ts} +2 -1
  84. package/dist/types/src/MarkdownPlugin.node.d.ts.map +1 -0
  85. package/dist/types/src/MarkdownPlugin.test.d.ts +2 -0
  86. package/dist/types/src/MarkdownPlugin.test.d.ts.map +1 -0
  87. package/dist/types/src/MarkdownPlugin.workerd.d.ts +4 -0
  88. package/dist/types/src/MarkdownPlugin.workerd.d.ts.map +1 -0
  89. package/dist/types/src/blueprints/markdown-blueprint.d.ts +2 -2
  90. package/dist/types/src/blueprints/markdown-blueprint.d.ts.map +1 -1
  91. package/dist/types/src/capabilities/anchor-sort.d.ts.map +1 -1
  92. package/dist/types/src/capabilities/app-graph-serializer.d.ts.map +1 -1
  93. package/dist/types/src/capabilities/blueprint-definition.d.ts +2 -2
  94. package/dist/types/src/capabilities/blueprint-definition.d.ts.map +1 -1
  95. package/dist/types/src/capabilities/comment-config.d.ts +12 -0
  96. package/dist/types/src/capabilities/comment-config.d.ts.map +1 -0
  97. package/dist/types/src/capabilities/create-object.d.ts +11 -0
  98. package/dist/types/src/capabilities/create-object.d.ts.map +1 -0
  99. package/dist/types/src/capabilities/index.d.ts +16 -3
  100. package/dist/types/src/capabilities/index.d.ts.map +1 -1
  101. package/dist/types/src/capabilities/node.d.ts +7 -1
  102. package/dist/types/src/capabilities/node.d.ts.map +1 -1
  103. package/dist/types/src/capabilities/operation-handler.d.ts +1 -1
  104. package/dist/types/src/capabilities/operation-handler.d.ts.map +1 -1
  105. package/dist/types/src/capabilities/react-surface.d.ts.map +1 -1
  106. package/dist/types/src/capabilities/settings.d.ts.map +1 -1
  107. package/dist/types/src/capabilities/state.d.ts +2 -2
  108. package/dist/types/src/capabilities/state.d.ts.map +1 -1
  109. package/dist/types/src/components/MarkdownEditor/MarkdownEditor.d.ts +13 -5
  110. package/dist/types/src/components/MarkdownEditor/MarkdownEditor.d.ts.map +1 -1
  111. package/dist/types/src/components/MarkdownEditor/MarkdownEditor.stories.d.ts.map +1 -1
  112. package/dist/types/src/components/MarkdownEditor/MarkdownEditorContent.d.ts +2 -1
  113. package/dist/types/src/components/MarkdownEditor/MarkdownEditorContent.d.ts.map +1 -1
  114. package/dist/types/src/components/MarkdownEditor/MarkdownEditorToolbar.d.ts +1 -1
  115. package/dist/types/src/components/MarkdownEditor/MarkdownEditorToolbar.d.ts.map +1 -1
  116. package/dist/types/src/components/MarkdownSettings/MarkdownSettings.d.ts.map +1 -1
  117. package/dist/types/src/components/MarkdownSettings/MarkdownSettings.stories.d.ts +46 -46
  118. package/dist/types/src/components/MarkdownSettings/MarkdownSettings.stories.d.ts.map +1 -1
  119. package/dist/types/src/containers/EditableMarkdownCard/EditableMarkdownCard.d.ts +15 -0
  120. package/dist/types/src/containers/EditableMarkdownCard/EditableMarkdownCard.d.ts.map +1 -0
  121. package/dist/types/src/containers/EditableMarkdownCard/EditableMarkdownCard.stories.d.ts +9 -0
  122. package/dist/types/src/containers/EditableMarkdownCard/EditableMarkdownCard.stories.d.ts.map +1 -0
  123. package/dist/types/src/containers/EditableMarkdownCard/index.d.ts +3 -0
  124. package/dist/types/src/containers/EditableMarkdownCard/index.d.ts.map +1 -0
  125. package/dist/types/src/containers/{MarkdownContainer/MarkdownContainer.d.ts → MarkdownArticle/MarkdownArticle.d.ts} +14 -10
  126. package/dist/types/src/containers/MarkdownArticle/MarkdownArticle.d.ts.map +1 -0
  127. package/dist/types/src/containers/MarkdownArticle/MarkdownArticle.stories.d.ts +97 -0
  128. package/dist/types/src/containers/MarkdownArticle/MarkdownArticle.stories.d.ts.map +1 -0
  129. package/dist/types/src/containers/MarkdownArticle/index.d.ts +3 -0
  130. package/dist/types/src/containers/MarkdownArticle/index.d.ts.map +1 -0
  131. package/dist/types/src/containers/MarkdownCard/MarkdownCard.d.ts.map +1 -1
  132. package/dist/types/src/containers/MarkdownCard/MarkdownCard.stories.d.ts +1 -1
  133. package/dist/types/src/containers/MarkdownCard/MarkdownCard.stories.d.ts.map +1 -1
  134. package/dist/types/src/containers/MarkdownCard/snippet.d.ts.map +1 -1
  135. package/dist/types/src/containers/index.d.ts +3 -2
  136. package/dist/types/src/containers/index.d.ts.map +1 -1
  137. package/dist/types/src/hooks/useEditorMenuOptions.d.ts.map +1 -1
  138. package/dist/types/src/hooks/useExtensions.d.ts +2 -1
  139. package/dist/types/src/hooks/useExtensions.d.ts.map +1 -1
  140. package/dist/types/src/hooks/useLinkQuery.d.ts.map +1 -1
  141. package/dist/types/src/index.d.ts +2 -4
  142. package/dist/types/src/index.d.ts.map +1 -1
  143. package/dist/types/src/meta.d.ts +1 -1
  144. package/dist/types/src/meta.d.ts.map +1 -1
  145. package/dist/types/src/operations/create-markdown.d.ts +3 -3
  146. package/dist/types/src/operations/create-markdown.d.ts.map +1 -1
  147. package/dist/types/src/operations/create.d.ts +3 -3
  148. package/dist/types/src/operations/create.d.ts.map +1 -1
  149. package/dist/types/src/operations/index.d.ts +1 -2
  150. package/dist/types/src/operations/index.d.ts.map +1 -1
  151. package/dist/types/src/operations/open.d.ts +3 -3
  152. package/dist/types/src/operations/open.d.ts.map +1 -1
  153. package/dist/types/src/operations/scroll-to-anchor.d.ts +3 -3
  154. package/dist/types/src/operations/scroll-to-anchor.d.ts.map +1 -1
  155. package/dist/types/src/operations/set-view-mode.d.ts +3 -3
  156. package/dist/types/src/operations/set-view-mode.d.ts.map +1 -1
  157. package/dist/types/src/operations/update-markdown.d.ts +5 -0
  158. package/dist/types/src/operations/update-markdown.d.ts.map +1 -0
  159. package/dist/types/src/plugin.d.ts +4 -0
  160. package/dist/types/src/plugin.d.ts.map +1 -0
  161. package/dist/types/src/testing.d.ts +1 -0
  162. package/dist/types/src/testing.d.ts.map +1 -1
  163. package/dist/types/src/translations.d.ts +70 -51
  164. package/dist/types/src/translations.d.ts.map +1 -1
  165. package/dist/types/src/types/Markdown.d.ts +12 -10
  166. package/dist/types/src/types/Markdown.d.ts.map +1 -1
  167. package/dist/types/src/types/MarkdownCapabilities.d.ts +32 -0
  168. package/dist/types/src/types/MarkdownCapabilities.d.ts.map +1 -0
  169. package/dist/types/src/types/MarkdownEvents.d.ts +3 -0
  170. package/dist/types/src/types/MarkdownEvents.d.ts.map +1 -0
  171. package/dist/types/src/{operations/definitions.d.ts → types/MarkdownOperation.d.ts} +17 -17
  172. package/dist/types/src/types/MarkdownOperation.d.ts.map +1 -0
  173. package/dist/types/src/types/Settings.d.ts +14 -1
  174. package/dist/types/src/types/Settings.d.ts.map +1 -1
  175. package/dist/types/src/types/index.d.ts +3 -2
  176. package/dist/types/src/types/index.d.ts.map +1 -1
  177. package/dist/types/src/types/types.d.ts +1 -0
  178. package/dist/types/src/types/types.d.ts.map +1 -1
  179. package/dist/types/src/util.d.ts +1 -1
  180. package/dist/types/src/util.d.ts.map +1 -1
  181. package/dist/types/tsconfig.tsbuildinfo +1 -1
  182. package/package.json +125 -91
  183. package/src/MarkdownPlugin.node.ts +20 -0
  184. package/src/MarkdownPlugin.test.ts +26 -0
  185. package/src/MarkdownPlugin.tsx +8 -52
  186. package/src/MarkdownPlugin.workerd.ts +19 -0
  187. package/src/blueprints/markdown-blueprint.ts +8 -9
  188. package/src/capabilities/anchor-sort.ts +2 -2
  189. package/src/capabilities/app-graph-serializer.ts +9 -10
  190. package/src/capabilities/blueprint-definition.ts +2 -0
  191. package/src/capabilities/comment-config.ts +33 -0
  192. package/src/capabilities/create-object.ts +31 -0
  193. package/src/capabilities/index.ts +4 -1
  194. package/src/capabilities/node.ts +3 -1
  195. package/src/capabilities/operation-handler.ts +1 -1
  196. package/src/capabilities/react-surface.tsx +17 -10
  197. package/src/capabilities/state.ts +4 -4
  198. package/src/components/MarkdownEditor/MarkdownEditor.stories.tsx +5 -4
  199. package/src/components/MarkdownEditor/MarkdownEditor.tsx +35 -28
  200. package/src/components/MarkdownEditor/MarkdownEditorContent.tsx +4 -3
  201. package/src/components/MarkdownEditor/MarkdownEditorToolbar.tsx +2 -2
  202. package/src/components/MarkdownSettings/MarkdownSettings.stories.tsx +2 -1
  203. package/src/components/MarkdownSettings/MarkdownSettings.tsx +3 -3
  204. package/src/containers/EditableMarkdownCard/EditableMarkdownCard.stories.tsx +86 -0
  205. package/src/containers/EditableMarkdownCard/EditableMarkdownCard.tsx +44 -0
  206. package/src/containers/EditableMarkdownCard/index.ts +6 -0
  207. package/src/containers/{MarkdownContainer/MarkdownContainer.stories.tsx → MarkdownArticle/MarkdownArticle.stories.tsx} +14 -8
  208. package/src/containers/{MarkdownContainer/MarkdownContainer.tsx → MarkdownArticle/MarkdownArticle.tsx} +7 -6
  209. package/src/containers/MarkdownArticle/index.ts +6 -0
  210. package/src/containers/MarkdownCard/MarkdownCard.stories.tsx +8 -7
  211. package/src/containers/MarkdownCard/MarkdownCard.tsx +27 -20
  212. package/src/containers/MarkdownCard/snippet.ts +3 -1
  213. package/src/containers/index.ts +3 -2
  214. package/src/hooks/useExtensions.tsx +12 -8
  215. package/src/hooks/useLinkQuery.ts +19 -34
  216. package/src/index.ts +2 -7
  217. package/src/meta.ts +17 -7
  218. package/src/operations/create-markdown.ts +3 -4
  219. package/src/operations/create.conversations.json +1 -1
  220. package/src/operations/create.test.ts +10 -12
  221. package/src/operations/create.ts +5 -6
  222. package/src/operations/index.ts +2 -4
  223. package/src/operations/open.ts +3 -3
  224. package/src/operations/scroll-to-anchor.ts +3 -4
  225. package/src/operations/set-view-mode.ts +3 -4
  226. package/src/operations/{update.ts → update-markdown.ts} +3 -3
  227. package/src/operations/update.conversations.json +1 -1
  228. package/src/operations/update.test.ts +10 -12
  229. package/src/plugin.ts +11 -0
  230. package/src/testing.ts +22 -9
  231. package/src/translations.ts +4 -3
  232. package/src/types/Markdown.ts +9 -10
  233. package/src/types/MarkdownCapabilities.ts +51 -0
  234. package/src/types/MarkdownEvents.ts +14 -0
  235. package/src/{operations/definitions.ts → types/MarkdownOperation.ts} +24 -11
  236. package/src/types/Settings.ts +23 -3
  237. package/src/types/index.ts +3 -2
  238. package/src/types/types.ts +4 -1
  239. package/src/util.tsx +2 -2
  240. package/dist/lib/browser/MarkdownSettings-62YSRY7L.mjs.map +0 -7
  241. package/dist/lib/browser/blueprints/index.mjs.map +0 -7
  242. package/dist/lib/browser/chunk-4KOZEH2H.mjs +0 -121
  243. package/dist/lib/browser/chunk-4KOZEH2H.mjs.map +0 -7
  244. package/dist/lib/browser/chunk-QFPZONKP.mjs +0 -158
  245. package/dist/lib/browser/chunk-QFPZONKP.mjs.map +0 -7
  246. package/dist/lib/browser/cli/index.mjs +0 -39
  247. package/dist/lib/browser/cli/index.mjs.map +0 -7
  248. package/dist/lib/browser/create-YL5ELZWP.mjs.map +0 -7
  249. package/dist/lib/browser/create-markdown-LU5IDKMH.mjs.map +0 -7
  250. package/dist/lib/browser/index.mjs.map +0 -7
  251. package/dist/lib/browser/meta.json +0 -1
  252. package/dist/lib/browser/open-AFSOZZ6G.mjs.map +0 -7
  253. package/dist/lib/browser/operations/index.mjs +0 -14
  254. package/dist/lib/browser/operations/index.mjs.map +0 -7
  255. package/dist/lib/browser/scroll-to-anchor-IPXV32A6.mjs.map +0 -7
  256. package/dist/lib/browser/set-view-mode-2QWB24RR.mjs +0 -26
  257. package/dist/lib/browser/set-view-mode-2QWB24RR.mjs.map +0 -7
  258. package/dist/lib/browser/types/index.mjs +0 -16
  259. package/dist/lib/browser/update-HZNVYBMO.mjs.map +0 -7
  260. package/dist/lib/node-esm/MarkdownSettings-QMPISOEU.mjs +0 -33
  261. package/dist/lib/node-esm/MarkdownSettings-QMPISOEU.mjs.map +0 -7
  262. package/dist/lib/node-esm/blueprints/index.mjs +0 -52
  263. package/dist/lib/node-esm/blueprints/index.mjs.map +0 -7
  264. package/dist/lib/node-esm/chunk-3OPDJJJH.mjs +0 -122
  265. package/dist/lib/node-esm/chunk-3OPDJJJH.mjs.map +0 -7
  266. package/dist/lib/node-esm/chunk-HSLMI22Q.mjs +0 -11
  267. package/dist/lib/node-esm/chunk-JUGS6RKO.mjs +0 -159
  268. package/dist/lib/node-esm/chunk-JUGS6RKO.mjs.map +0 -7
  269. package/dist/lib/node-esm/cli/index.mjs +0 -40
  270. package/dist/lib/node-esm/cli/index.mjs.map +0 -7
  271. package/dist/lib/node-esm/create-SMQAIM3V.mjs +0 -31
  272. package/dist/lib/node-esm/create-SMQAIM3V.mjs.map +0 -7
  273. package/dist/lib/node-esm/create-markdown-X2OASYKG.mjs +0 -23
  274. package/dist/lib/node-esm/create-markdown-X2OASYKG.mjs.map +0 -7
  275. package/dist/lib/node-esm/index.mjs +0 -633
  276. package/dist/lib/node-esm/index.mjs.map +0 -7
  277. package/dist/lib/node-esm/meta.json +0 -1
  278. package/dist/lib/node-esm/open-SRWLLOKE.mjs +0 -22
  279. package/dist/lib/node-esm/open-SRWLLOKE.mjs.map +0 -7
  280. package/dist/lib/node-esm/operations/index.mjs +0 -15
  281. package/dist/lib/node-esm/operations/index.mjs.map +0 -7
  282. package/dist/lib/node-esm/scroll-to-anchor-M76GXKYQ.mjs +0 -50
  283. package/dist/lib/node-esm/scroll-to-anchor-M76GXKYQ.mjs.map +0 -7
  284. package/dist/lib/node-esm/set-view-mode-6BB6KIDS.mjs +0 -27
  285. package/dist/lib/node-esm/set-view-mode-6BB6KIDS.mjs.map +0 -7
  286. package/dist/lib/node-esm/types/index.mjs +0 -17
  287. package/dist/lib/node-esm/update-4CELTLXK.mjs +0 -46
  288. package/dist/lib/node-esm/update-4CELTLXK.mjs.map +0 -7
  289. package/dist/types/src/capabilities/artifact-definition.d.ts +0 -5
  290. package/dist/types/src/capabilities/artifact-definition.d.ts.map +0 -1
  291. package/dist/types/src/cli/index.d.ts +0 -2
  292. package/dist/types/src/cli/index.d.ts.map +0 -1
  293. package/dist/types/src/cli/plugin.d.ts.map +0 -1
  294. package/dist/types/src/containers/MarkdownContainer/MarkdownContainer.d.ts.map +0 -1
  295. package/dist/types/src/containers/MarkdownContainer/MarkdownContainer.stories.d.ts +0 -77
  296. package/dist/types/src/containers/MarkdownContainer/MarkdownContainer.stories.d.ts.map +0 -1
  297. package/dist/types/src/containers/MarkdownContainer/index.d.ts +0 -3
  298. package/dist/types/src/containers/MarkdownContainer/index.d.ts.map +0 -1
  299. package/dist/types/src/operations/definitions.d.ts.map +0 -1
  300. package/dist/types/src/operations/update.d.ts +0 -5
  301. package/dist/types/src/operations/update.d.ts.map +0 -1
  302. package/dist/types/src/types/capabilities.d.ts +0 -33
  303. package/dist/types/src/types/capabilities.d.ts.map +0 -1
  304. package/dist/types/src/types/events.d.ts +0 -5
  305. package/dist/types/src/types/events.d.ts.map +0 -1
  306. package/src/capabilities/artifact-definition.ts +0 -110
  307. package/src/cli/index.ts +0 -5
  308. package/src/cli/plugin.ts +0 -39
  309. package/src/containers/MarkdownContainer/index.ts +0 -6
  310. package/src/types/capabilities.ts +0 -50
  311. package/src/types/events.ts +0 -14
  312. /package/dist/lib/{browser/types → neutral/blueprints}/index.mjs.map +0 -0
  313. /package/dist/lib/{browser → neutral}/chunk-J5LGTIGS.mjs +0 -0
  314. /package/dist/lib/{browser → neutral}/chunk-J5LGTIGS.mjs.map +0 -0
  315. /package/dist/lib/{node-esm/types → neutral}/index.mjs.map +0 -0
  316. /package/dist/lib/{node-esm/chunk-HSLMI22Q.mjs.map → neutral/meta.mjs.map} +0 -0
@@ -5,7 +5,7 @@
5
5
  import * as Effect from 'effect/Effect';
6
6
 
7
7
  import { Capabilities, Capability } from '@dxos/app-framework';
8
- import type { OperationHandlerSet } from '@dxos/operation';
8
+ import type { OperationHandlerSet } from '@dxos/compute';
9
9
 
10
10
  import { MarkdownOperationHandlerSet } from '#operations';
11
11
 
@@ -10,17 +10,18 @@ import {
10
10
  Surface,
11
11
  useAtomCapability,
12
12
  useAtomCapabilityState,
13
+ useCapabilities,
13
14
  useCapability,
14
15
  useSettingsState,
15
16
  } from '@dxos/app-framework/ui';
16
17
  import { AppSurface } from '@dxos/app-toolkit/ui';
17
18
  import { Obj } from '@dxos/echo';
18
- import { AttentionCapabilities } from '@dxos/plugin-attention/types';
19
+ import { AttentionCapabilities } from '@dxos/plugin-attention';
19
20
  import { Text } from '@dxos/schema';
20
- import { type EditorViewMode } from '@dxos/ui-editor';
21
+ import { type EditorViewMode } from '@dxos/ui-editor/types';
21
22
 
22
23
  import { MarkdownSettings } from '#components';
23
- import { MarkdownCard, MarkdownContainer, type MarkdownContainerProps } from '#containers';
24
+ import { MarkdownCard, EditableMarkdownCard, MarkdownArticle, type MarkdownArticleProps } from '#containers';
24
25
  import { meta } from '#meta';
25
26
  import { Markdown, MarkdownCapabilities } from '#types';
26
27
 
@@ -36,7 +37,7 @@ export default Capability.makeModule(() =>
36
37
  component: ({ data, role, ref }) => {
37
38
  return (
38
39
  <Container
39
- id={Obj.getDXN(data.subject).toString()}
40
+ id={Obj.getURI(data.subject)}
40
41
  attendableId={data.attendableId}
41
42
  subject={data.subject}
42
43
  role={role}
@@ -57,7 +58,7 @@ export default Capability.makeModule(() =>
57
58
  component: ({ data, role, ref }) => {
58
59
  return (
59
60
  <Container
60
- id={Obj.getDXN(data.subject).toString()}
61
+ id={Obj.getURI(data.subject)}
61
62
  attendableId={data.attendableId}
62
63
  subject={data.subject}
63
64
  role={role}
@@ -67,16 +68,22 @@ export default Capability.makeModule(() =>
67
68
  },
68
69
  }),
69
70
  Surface.create({
70
- id: 'surface.plugin-settings',
71
+ id: 'surface.pluginSettings',
71
72
  filter: AppSurface.settings(AppSurface.Article, meta.id),
72
73
  component: ({ data: { subject } }) => {
73
74
  const { settings, updateSettings } = useSettingsState<Markdown.Settings>(subject.atom);
74
75
  return <MarkdownSettings settings={settings} onSettingsChange={updateSettings} />;
75
76
  },
76
77
  }),
78
+ Surface.create({
79
+ id: 'surface.editable',
80
+ position: 'first',
81
+ filter: AppSurface.object(AppSurface.Card, [Markdown.Document, Text.Text], (data) => data.editable === true),
82
+ component: ({ data }) => <EditableMarkdownCard subject={data.subject} />,
83
+ }),
77
84
  Surface.create({
78
85
  id: 'surface.preview',
79
- filter: AppSurface.object(AppSurface.Card, [Markdown.Document, Text.Text]),
86
+ filter: AppSurface.object(AppSurface.Card, [Markdown.Document, Text.Text], (data) => data.editable !== true),
80
87
  component: ({ data }) => <MarkdownCard {...data} />,
81
88
  }),
82
89
  ]),
@@ -94,17 +101,17 @@ const Container = forwardRef<
94
101
  const settings = useAtomCapability(MarkdownCapabilities.Settings);
95
102
  const [state, setState] = useAtomCapabilityState(MarkdownCapabilities.State);
96
103
  const editorState = useCapability(MarkdownCapabilities.EditorState);
97
- const extensions = useCapability(MarkdownCapabilities.Extensions);
104
+ const extensions = useCapabilities(MarkdownCapabilities.Extensions);
98
105
  const extensionProviders = useMemo(() => extensions.flat(), [extensions]);
99
106
 
100
107
  const viewMode: EditorViewMode = (id && state.viewMode[id]) || settings?.defaultViewMode || 'source';
101
- const handleViewModeChange = useCallback<NonNullable<MarkdownContainerProps['onViewModeChange']>>(
108
+ const handleViewModeChange = useCallback<NonNullable<MarkdownArticleProps['onViewModeChange']>>(
102
109
  (mode) => setState((current) => ({ ...current, viewMode: { ...current.viewMode, [id]: mode } })),
103
110
  [id, setState],
104
111
  );
105
112
 
106
113
  return (
107
- <MarkdownContainer
114
+ <MarkdownArticle
108
115
  role={role}
109
116
  subject={subject}
110
117
  id={id}
@@ -9,10 +9,10 @@ import { createKvsStore } from '@dxos/effect';
9
9
  import { createEditorStateStore } from '@dxos/ui-editor';
10
10
 
11
11
  import { meta } from '#meta';
12
- import { type EditorViewEntry, type EditorViewRegistry, MarkdownCapabilities, MarkdownStateSchema } from '#types';
12
+ import { MarkdownCapabilities } from '#types';
13
13
 
14
- const createEditorViewRegistry = (): EditorViewRegistry => {
15
- const views = new Map<string, EditorViewEntry>();
14
+ const createEditorViewRegistry = (): MarkdownCapabilities.EditorViewRegistry => {
15
+ const views = new Map<string, MarkdownCapabilities.EditorViewEntry>();
16
16
  return {
17
17
  register: (attendableId, view, documentId) => {
18
18
  views.set(attendableId, { view, documentId });
@@ -29,7 +29,7 @@ export default Capability.makeModule(
29
29
  // Persisted state using KVS store.
30
30
  const stateAtom = createKvsStore({
31
31
  key: `${meta.id}.state`,
32
- schema: MarkdownStateSchema,
32
+ schema: MarkdownCapabilities.StateSchema,
33
33
  defaultValue: () => ({ viewMode: {} }),
34
34
  });
35
35
 
@@ -8,19 +8,20 @@ import React from 'react';
8
8
 
9
9
  import { withPluginManager } from '@dxos/app-framework/testing';
10
10
  import { Filter, Obj } from '@dxos/echo';
11
- import { ClientPlugin } from '@dxos/plugin-client';
11
+ import { ClientPlugin } from '@dxos/plugin-client/testing';
12
12
  import { initializeIdentity } from '@dxos/plugin-client/testing';
13
13
  import { corePlugins } from '@dxos/plugin-testing';
14
14
  import { useQuery, useSpaces } from '@dxos/react-client/echo';
15
15
  import { Panel } from '@dxos/react-ui';
16
16
  import { AttendableContainer } from '@dxos/react-ui-attention';
17
- import { Editor, translations as editorTranslations } from '@dxos/react-ui-editor';
17
+ import { Editor } from '@dxos/react-ui-editor';
18
+ import { translations as editorTranslations } from '@dxos/react-ui-editor/translations';
18
19
  import { Loading, withLayout } from '@dxos/react-ui/testing';
19
20
  import { Text } from '@dxos/schema';
20
21
 
22
+ import { translations } from '#translations';
21
23
  import { Markdown } from '#types';
22
24
 
23
- import { translations } from '../../translations';
24
25
  import { MarkdownEditor, MarkdownEditorProvider, type MarkdownEditorProviderProps } from './MarkdownEditor';
25
26
 
26
27
  type DefaultStoryProps = Omit<MarkdownEditorProviderProps, 'id' | 'extensions' | 'children'>;
@@ -28,7 +29,7 @@ type DefaultStoryProps = Omit<MarkdownEditorProviderProps, 'id' | 'extensions' |
28
29
  const DefaultStory = (props: DefaultStoryProps) => {
29
30
  const [space] = useSpaces();
30
31
  const [doc] = useQuery(space?.db, Filter.type(Markdown.Document));
31
- const id = doc && Obj.getDXN(doc).toString();
32
+ const id = doc && Obj.getURI(doc);
32
33
  if (!id) {
33
34
  return <Loading data={{ id }} />;
34
35
  }
@@ -12,9 +12,10 @@ import { createPortal } from 'react-dom';
12
12
  import { Surface } from '@dxos/app-framework/ui';
13
13
  import { AppSurface } from '@dxos/app-toolkit/ui';
14
14
  import { Obj } from '@dxos/echo';
15
- import { DXN } from '@dxos/keys';
15
+ import { URI } from '@dxos/keys';
16
16
  import { useClient } from '@dxos/react-client';
17
17
  import { type ThemedClassName } from '@dxos/react-ui';
18
+ import { composable, composableProps } from '@dxos/react-ui';
18
19
  import {
19
20
  type EditorRootProps,
20
21
  type EditorToolbarState,
@@ -22,7 +23,6 @@ import {
22
23
  useEditorContext,
23
24
  } from '@dxos/react-ui-editor';
24
25
  import { type PreviewBlock, type PreviewOptions } from '@dxos/ui-editor';
25
- import { composable, composableProps } from '@dxos/ui-theme';
26
26
  import { isNonNullable } from '@dxos/util';
27
27
 
28
28
  import {
@@ -172,32 +172,39 @@ const MARKDOWN_EDITOR_CONTENT_NAME = 'MarkdownEditor.Content';
172
172
 
173
173
  type MarkdownEditorContentProps = Omit<NaturalMarkdownEditorContentProps, 'id' | 'extensions' | 'toolbarState'>;
174
174
 
175
- const MarkdownEditorContent = composable<HTMLDivElement, MarkdownEditorContentProps>(({ ...props }, _forwardedRef) => {
176
- const { id, attendableId, compact, viewMode, onFileUpload } = useMarkdownEditorContext(MARKDOWN_EDITOR_CONTENT_NAME);
177
-
178
- const { extensions, setController, state } = useEditorContext(MARKDOWN_EDITOR_CONTENT_NAME);
179
-
180
- const handleRef = useCallback(
181
- (view: EditorView | null) => {
182
- setController(createEditorController(view));
183
- },
184
- [setController],
185
- );
175
+ const MarkdownEditorContent = composable<HTMLDivElement, MarkdownEditorContentProps>(
176
+ ({ compact: compactProp, ...props }, _forwardedRef) => {
177
+ const {
178
+ id,
179
+ attendableId,
180
+ compact = compactProp,
181
+ viewMode,
182
+ onFileUpload,
183
+ } = useMarkdownEditorContext(MARKDOWN_EDITOR_CONTENT_NAME);
184
+ const { extensions, setController, state } = useEditorContext(MARKDOWN_EDITOR_CONTENT_NAME);
186
185
 
187
- return (
188
- <NaturalMarkdownEditorContent
189
- {...composableProps(props)}
190
- id={id}
191
- attendableId={attendableId}
192
- compact={compact}
193
- viewMode={viewMode}
194
- toolbarState={state as Atom.Writable<EditorToolbarState>}
195
- extensions={extensions}
196
- onFileUpload={onFileUpload}
197
- ref={handleRef}
198
- />
199
- );
200
- });
186
+ const handleRef = useCallback(
187
+ (view: EditorView | null) => {
188
+ setController(createEditorController(view));
189
+ },
190
+ [setController],
191
+ );
192
+
193
+ return (
194
+ <NaturalMarkdownEditorContent
195
+ {...composableProps(props)}
196
+ id={id}
197
+ attendableId={attendableId}
198
+ compact={compact}
199
+ viewMode={viewMode}
200
+ toolbarState={state as Atom.Writable<EditorToolbarState>}
201
+ extensions={extensions}
202
+ onFileUpload={onFileUpload}
203
+ ref={handleRef}
204
+ />
205
+ );
206
+ },
207
+ );
201
208
 
202
209
  MarkdownEditorContent.displayName = MARKDOWN_EDITOR_CONTENT_NAME;
203
210
 
@@ -255,7 +262,7 @@ MarkdownEditorBlocks.displayName = MARKDOWN_EDITOR_BLOCKS_NAME;
255
262
 
256
263
  const PreviewBlock = ({ el, link }: PreviewBlock) => {
257
264
  const client = useClient();
258
- const dxn = DXN.parse(link.dxn);
265
+ const dxn = URI.make(link.dxn);
259
266
  const subject = client.graph.makeRef(dxn).target;
260
267
  const data = useMemo(() => ({ subject }), [subject]);
261
268
 
@@ -17,7 +17,6 @@ import {
17
17
  import {
18
18
  type EditorSelectionState,
19
19
  type EditorStateStore,
20
- type EditorViewMode,
21
20
  type ThemeExtensionsOptions,
22
21
  mobileSlots,
23
22
  createBasicExtensions,
@@ -28,7 +27,9 @@ import {
28
27
  formattingListener,
29
28
  processEditorPayload,
30
29
  editorClassNames,
30
+ scrollbarAutohide,
31
31
  } from '@dxos/ui-editor';
32
+ import { type EditorViewMode } from '@dxos/ui-editor/types';
32
33
  import { mx } from '@dxos/ui-theme';
33
34
  import { isTruthy } from '@dxos/util';
34
35
 
@@ -114,6 +115,7 @@ export const MarkdownEditorContent = forwardRef<EditorView | null, MarkdownEdito
114
115
  syntaxHighlighting: true,
115
116
  }),
116
117
  createMarkdownExtensions(),
118
+ scrollbarAutohide(),
117
119
  toolbarState && formattingListener(updateToolbarState),
118
120
  role !== 'section' &&
119
121
  onFileUpload &&
@@ -130,7 +132,7 @@ export const MarkdownEditorContent = forwardRef<EditorView | null, MarkdownEdito
130
132
  extensions,
131
133
  ].filter(isTruthy),
132
134
  }),
133
- [id, viewMode, themeMode, extensions],
135
+ [id, viewMode, themeMode, extensions, compact],
134
136
  );
135
137
 
136
138
  useImperativeHandle<EditorView | null, EditorView | null>(forwardedRef, () => editorView, [editorView]);
@@ -149,7 +151,6 @@ export const MarkdownEditorContent = forwardRef<EditorView | null, MarkdownEdito
149
151
  <div
150
152
  {...focusAttributes}
151
153
  className={mx(editorClassNames(role), classNames)}
152
- role='none'
153
154
  data-testid='composer.markdownRoot'
154
155
  data-popover-collision-boundary={true}
155
156
  ref={parentRef}
@@ -6,8 +6,8 @@ import { type EditorView } from '@codemirror/view';
6
6
  import React, { useCallback, useState } from 'react';
7
7
 
8
8
  import { type FileInfo } from '@dxos/app-toolkit';
9
+ import { composable, composableProps } from '@dxos/react-ui';
9
10
  import { Editor, type EditorToolbarProps } from '@dxos/react-ui-editor';
10
- import { composable, composableProps } from '@dxos/ui-theme';
11
11
 
12
12
  import { FileUpload, type FileUploadAction } from './FileUpload';
13
13
 
@@ -28,7 +28,7 @@ export const MarkdownEditorToolbar = composable<HTMLDivElement, MarkdownEditorTo
28
28
  }
29
29
 
30
30
  return (
31
- <div role='none' className='contents' ref={forwardedRef}>
31
+ <div className='contents' ref={forwardedRef}>
32
32
  <Editor.Toolbar
33
33
  {...rest}
34
34
  classNames={className}
@@ -6,7 +6,8 @@ import { type Meta, type StoryObj } from '@storybook/react-vite';
6
6
 
7
7
  import { withLayout, withTheme } from '@dxos/react-ui/testing';
8
8
 
9
- import { translations } from '../../translations';
9
+ import { translations } from '#translations';
10
+
10
11
  import { MarkdownSettings } from './MarkdownSettings';
11
12
 
12
13
  const meta = {
@@ -13,7 +13,7 @@ import { Markdown } from '#types';
13
13
 
14
14
  export type MarkdownSettingsProps = AppSurface.SettingsArticleProps<Markdown.Settings>;
15
15
 
16
- const TypewriterField = ({ value, onChange, readonly }: SettingsFieldProps<string>) => (
16
+ const SnippetsField = ({ value, onChange, readonly }: SettingsFieldProps<string | undefined>) => (
17
17
  <Input.TextArea disabled={readonly} rows={5} value={value ?? ''} onChange={(event) => onChange(event.target.value)} />
18
18
  );
19
19
 
@@ -24,8 +24,8 @@ export const MarkdownSettings = ({ settings, onSettingsChange }: MarkdownSetting
24
24
  <SettingsForm.FieldSet
25
25
  readonly={!onSettingsChange}
26
26
  schema={Markdown.Settings}
27
- visible={(path, values) => path !== 'typewriter' || !!values.debug}
28
- fieldMap={{ typewriter: TypewriterField }}
27
+ visible={(path, values) => path !== 'snippets' || !!values.debug}
28
+ fieldMap={{ snippets: SnippetsField }}
29
29
  values={settings}
30
30
  onValuesChanged={(values) => onSettingsChange?.(() => values)}
31
31
  />
@@ -0,0 +1,86 @@
1
+ //
2
+ // Copyright 2026 DXOS.org
3
+ //
4
+
5
+ import { type Meta, type StoryObj } from '@storybook/react-vite';
6
+ import * as Effect from 'effect/Effect';
7
+ import React from 'react';
8
+
9
+ import { ProcessManagerPlugin } from '@dxos/app-framework';
10
+ import { withPluginManager } from '@dxos/app-framework/testing';
11
+ import { Filter, Obj } from '@dxos/echo';
12
+ import { ClientPlugin, initializeIdentity } from '@dxos/plugin-client/testing';
13
+ import { corePlugins } from '@dxos/plugin-testing';
14
+ import { random } from '@dxos/random';
15
+ import { useQuery, useSpaces } from '@dxos/react-client/echo';
16
+ import { Card } from '@dxos/react-ui';
17
+ import { translations as editorTranslations } from '@dxos/react-ui-editor/translations';
18
+ import { CardContainer } from '@dxos/react-ui-mosaic/testing';
19
+ import { Loading, withTheme } from '@dxos/react-ui/testing';
20
+ import { Text } from '@dxos/schema';
21
+
22
+ import { translations } from '#translations';
23
+ import { Markdown } from '#types';
24
+
25
+ import { EditableMarkdownCard, type EditableMarkdownCardProps } from './EditableMarkdownCard';
26
+
27
+ random.seed(1234);
28
+
29
+ const EditableMarkdownCardStory = ({ ...args }: Omit<EditableMarkdownCardProps, 'subject'>) => {
30
+ const [space] = useSpaces();
31
+ const [doc] = useQuery(space?.db, Filter.type(Markdown.Document));
32
+ if (!doc) {
33
+ return <Loading data={{ space: !!space }} />;
34
+ }
35
+
36
+ return (
37
+ <CardContainer icon='ph--text-aa--regular'>
38
+ <Card.Root border={false}>
39
+ <Card.Header>
40
+ <Card.DragHandle />
41
+ <Card.Title>{Obj.getLabel(doc)}</Card.Title>
42
+ <Card.Menu />
43
+ </Card.Header>
44
+ <EditableMarkdownCard subject={doc} {...args} />
45
+ </Card.Root>
46
+ </CardContainer>
47
+ );
48
+ };
49
+
50
+ const meta: Meta<typeof EditableMarkdownCardStory> = {
51
+ title: 'plugins/plugin-markdown/containers/EditableMarkdownCard',
52
+ component: EditableMarkdownCardStory,
53
+ decorators: [
54
+ withTheme(),
55
+ withPluginManager({
56
+ plugins: [
57
+ ...corePlugins(),
58
+ ProcessManagerPlugin(),
59
+ ClientPlugin({
60
+ types: [Markdown.Document, Text.Text],
61
+ onClientInitialized: ({ client }) =>
62
+ Effect.gen(function* () {
63
+ const { personalSpace } = yield* initializeIdentity(client);
64
+ personalSpace.db.add(
65
+ Markdown.make({
66
+ name: random.lorem.words(3),
67
+ content: '# Title\n' + random.lorem.paragraphs(3),
68
+ }),
69
+ );
70
+ }),
71
+ }),
72
+ ],
73
+ }),
74
+ ],
75
+ parameters: {
76
+ layout: 'centered',
77
+ translations: [...translations, ...editorTranslations],
78
+ },
79
+ tags: ['cards'],
80
+ };
81
+
82
+ export default meta;
83
+
84
+ type Story = StoryObj<typeof meta>;
85
+
86
+ export const Default: Story = {};
@@ -0,0 +1,44 @@
1
+ //
2
+ // Copyright 2026 DXOS.org
3
+ //
4
+
5
+ import React from 'react';
6
+
7
+ import { Obj } from '@dxos/echo';
8
+ import { useObject } from '@dxos/react-client/echo';
9
+ import { Card } from '@dxos/react-ui';
10
+ import { Editor } from '@dxos/react-ui-editor';
11
+ import { Text } from '@dxos/schema';
12
+
13
+ import { MarkdownEditor, MarkdownEditorProvider } from '#components';
14
+ import { Markdown } from '#types';
15
+
16
+ export type EditableMarkdownCardProps = { subject: Markdown.Document | Text.Text };
17
+
18
+ /**
19
+ * Full-bleed editable variant of {@link MarkdownCard}. Activated by the host
20
+ * passing `editable: true` on the card surface data (e.g. plugin-board cells).
21
+ * Renders a plain editor (no app-graph toolbar / file upload / link queries)
22
+ * so it stays self-contained inside the card; the regular MarkdownArticle
23
+ * remains the canonical surface for full article views.
24
+ */
25
+ export const EditableMarkdownCard = ({ subject }: EditableMarkdownCardProps) => {
26
+ const id = Obj.getURI(subject);
27
+ const [docContent] = useObject(Obj.instanceOf(Markdown.Document, subject) ? subject.content : undefined, 'content');
28
+ const [textContent] = useObject(Obj.instanceOf(Text.Text, subject) ? subject : undefined, 'content');
29
+ const initialValue = docContent ?? textContent;
30
+
31
+ return (
32
+ <Card.Section classNames='overflow-hidden'>
33
+ <Card.Row fullWidth>
34
+ <MarkdownEditorProvider id={id} object={subject} viewMode='source'>
35
+ {(editorRootProps) => (
36
+ <Editor.Root {...editorRootProps}>
37
+ <MarkdownEditor.Content compact initialValue={initialValue} />
38
+ </Editor.Root>
39
+ )}
40
+ </MarkdownEditorProvider>
41
+ </Card.Row>
42
+ </Card.Section>
43
+ );
44
+ };
@@ -0,0 +1,6 @@
1
+ //
2
+ // Copyright 2026 DXOS.org
3
+ //
4
+
5
+ export { EditableMarkdownCard, type EditableMarkdownCardProps } from './EditableMarkdownCard';
6
+ export { EditableMarkdownCard as default } from './EditableMarkdownCard';
@@ -12,9 +12,10 @@ import { Surface, useOperationInvoker } from '@dxos/app-framework/ui';
12
12
  import { AppActivationEvents, LayoutOperation } from '@dxos/app-toolkit';
13
13
  import { AppSurface } from '@dxos/app-toolkit/ui';
14
14
  import { Obj, Query } from '@dxos/echo';
15
- import { ClientPlugin } from '@dxos/plugin-client';
15
+ import { DXN } from '@dxos/keys';
16
+ import { ClientPlugin } from '@dxos/plugin-client/testing';
16
17
  import { initializeIdentity } from '@dxos/plugin-client/testing';
17
- import { PreviewPlugin } from '@dxos/plugin-preview';
18
+ import { PreviewPlugin } from '@dxos/plugin-preview/testing';
18
19
  import { StorybookPlugin, corePlugins } from '@dxos/plugin-testing';
19
20
  import { random } from '@dxos/random';
20
21
  import { useQuery, useSpaces } from '@dxos/react-client/echo';
@@ -25,17 +26,22 @@ import { Text } from '@dxos/schema';
25
26
  import { type ValueGenerator, createObjectFactory } from '@dxos/schema/testing';
26
27
  import { Organization, Person } from '@dxos/types';
27
28
 
29
+ import { translations } from '#translations';
28
30
  import { Markdown, MarkdownCapabilities, MarkdownEvents } from '#types';
29
31
 
30
32
  import { MarkdownPlugin } from '../../MarkdownPlugin';
31
- import { translations } from '../../translations';
32
33
 
33
34
  random.seed(1);
34
35
 
35
36
  const generator: ValueGenerator = random as any;
36
37
 
37
38
  /** Minimal plugin that contributes an empty Extensions capability for stories. */
38
- const MarkdownExtensionsPlugin = Plugin.define({ id: 'story-markdown-extensions', name: 'Story Extensions' }).pipe(
39
+ const MarkdownExtensionsPlugin = Plugin.define(
40
+ Plugin.makeMeta({
41
+ key: DXN.make('org.dxos.plugin.markdown.story.markdownExtensions'),
42
+ name: 'Story Extensions',
43
+ }),
44
+ ).pipe(
39
45
  Plugin.addModule({
40
46
  id: 'extensions',
41
47
  activatesOn: MarkdownEvents.SetupExtensions,
@@ -48,7 +54,7 @@ const DefaultStory = () => {
48
54
  const { invokePromise } = useOperationInvoker();
49
55
  const [space] = useSpaces();
50
56
  const [doc] = useQuery(space?.db, Query.type(Markdown.Document));
51
- const id = doc && Obj.getDXN(doc).toString();
57
+ const id = doc && Obj.getURI(doc);
52
58
  const data = useMemo(() => ({ subject: doc, attendableId: id ?? 'story' }), [doc, id]);
53
59
  const attentionAttrs = useAttentionAttributes(id);
54
60
 
@@ -66,7 +72,7 @@ const DefaultStory = () => {
66
72
  };
67
73
 
68
74
  const meta = {
69
- title: 'plugins/plugin-markdown/containers/MarkdownContainer',
75
+ title: 'plugins/plugin-markdown/containers/MarkdownArticle',
70
76
  render: DefaultStory,
71
77
  decorators: [
72
78
  withLayout({ layout: 'column' }),
@@ -98,8 +104,8 @@ const meta = {
98
104
  context.args.content ?? '',
99
105
  // TODO(burdon): Popovers not currently working.
100
106
  '## Here are some objects',
101
- `![Alice](${Obj.getDXN(kai)})`,
102
- `![DXOS](${Obj.getDXN(dxos)})`,
107
+ `![Alice](${Obj.getURI(kai)})`,
108
+ `![DXOS](${Obj.getURI(dxos)})`,
103
109
  '',
104
110
  'END',
105
111
  '',
@@ -26,7 +26,7 @@ import {
26
26
  import { useLinkQuery } from '#hooks';
27
27
  import { Markdown, MarkdownCapabilities, type MarkdownPluginState } from '#types';
28
28
 
29
- export type MarkdownContainerProps = AppSurface.ObjectArticleProps<
29
+ export type MarkdownArticleProps = AppSurface.ObjectArticleProps<
30
30
  Markdown.Document | Text.Text,
31
31
  {
32
32
  id: string;
@@ -37,9 +37,9 @@ export type MarkdownContainerProps = AppSurface.ObjectArticleProps<
37
37
  Pick<MarkdownEditorContentProps, 'editorStateStore'>
38
38
  >;
39
39
 
40
- export const MarkdownContainer = forwardRef<HTMLDivElement, MarkdownContainerProps>(
40
+ export const MarkdownArticle = forwardRef<HTMLDivElement, MarkdownArticleProps>(
41
41
  (
42
- { role, subject: object, id, attendableId, settings, extensionProviders, onSelectObject, ...props },
42
+ { role, subject: object, id, attendableId, settings, extensionProviders, onSelectObject, viewMode, ...props },
43
43
  forwardedRef,
44
44
  ) => {
45
45
  const db = Obj.isObject(object) ? Obj.getDatabase(object) : undefined;
@@ -54,18 +54,18 @@ export const MarkdownContainer = forwardRef<HTMLDivElement, MarkdownContainerPro
54
54
  return [];
55
55
  }
56
56
 
57
+ const document = Obj.instanceOf(Markdown.Document, object) ? object : undefined;
57
58
  return [...(otherExtensionProviders ?? []), ...(extensionProviders ?? [])]
58
59
  .flat()
59
60
  .reduce((acc: Extension[], provider) => {
60
- const extension =
61
- typeof provider === 'function' ? provider({ document: object as Markdown.Document }) : provider;
61
+ const extension = typeof provider === 'function' ? provider({ document, viewMode }) : provider;
62
62
  if (extension) {
63
63
  acc.push(extension);
64
64
  }
65
65
 
66
66
  return acc;
67
67
  }, []);
68
- }, [extensionProviders, otherExtensionProviders, object]);
68
+ }, [extensionProviders, otherExtensionProviders, object, viewMode]);
69
69
 
70
70
  // Toolbar actions from app graph.
71
71
  const { graph } = useAppGraph();
@@ -118,6 +118,7 @@ export const MarkdownContainer = forwardRef<HTMLDivElement, MarkdownContainerPro
118
118
  compact={role !== 'article'}
119
119
  extensions={extensions}
120
120
  settings={settings}
121
+ viewMode={viewMode}
121
122
  onAction={runAction}
122
123
  onFileUpload={handleFileUpload}
123
124
  onLinkQuery={handleLinkQuery}
@@ -0,0 +1,6 @@
1
+ //
2
+ // Copyright 2025 DXOS.org
3
+ //
4
+
5
+ export { MarkdownArticle, type MarkdownArticleProps } from './MarkdownArticle';
6
+ export { MarkdownArticle as default } from './MarkdownArticle';
@@ -5,17 +5,18 @@
5
5
  import { type Meta, type StoryObj } from '@storybook/react-vite';
6
6
  import React, { useMemo } from 'react';
7
7
 
8
- import { OperationPlugin, RuntimePlugin } from '@dxos/app-framework';
8
+ import { ProcessManagerPlugin } from '@dxos/app-framework';
9
9
  import { withPluginManager } from '@dxos/app-framework/testing';
10
10
  import { Obj } from '@dxos/echo';
11
- import { ClientPlugin } from '@dxos/plugin-client';
12
- import { Markdown } from '@dxos/plugin-markdown/types';
11
+ import { ClientPlugin } from '@dxos/plugin-client/testing';
12
+ import { Markdown } from '@dxos/plugin-markdown';
13
13
  import { random } from '@dxos/random';
14
14
  import { Card } from '@dxos/react-ui';
15
15
  import { CardContainer } from '@dxos/react-ui-mosaic/testing';
16
16
  import { withTheme } from '@dxos/react-ui/testing';
17
17
 
18
- import { translations } from '../../translations';
18
+ import { translations } from '#translations';
19
+
19
20
  import { MarkdownCard, type MarkdownCardProps } from './MarkdownCard';
20
21
 
21
22
  random.seed(1234);
@@ -33,11 +34,11 @@ const MarkdownCardStory = ({ ...args }: Omit<MarkdownCardProps, 'subject'>) => {
33
34
  return (
34
35
  <CardContainer icon='ph--text-aa--regular'>
35
36
  <Card.Root border={false}>
36
- <Card.Toolbar>
37
+ <Card.Header>
37
38
  <Card.DragHandle />
38
39
  <Card.Title>{Obj.getLabel(subject)}</Card.Title>
39
40
  <Card.Menu />
40
- </Card.Toolbar>
41
+ </Card.Header>
41
42
  <MarkdownCard subject={subject} {...args} />
42
43
  </Card.Root>
43
44
  </CardContainer>
@@ -50,7 +51,7 @@ const meta: Meta<typeof MarkdownCardStory> = {
50
51
  decorators: [
51
52
  withTheme(),
52
53
  withPluginManager({
53
- plugins: [OperationPlugin(), RuntimePlugin(), ClientPlugin({})],
54
+ plugins: [ProcessManagerPlugin(), ClientPlugin({})],
54
55
  }),
55
56
  ],
56
57
  parameters: {