@dxos/plugin-markdown 0.8.4-main.e8ec1fe → 0.8.4-main.effb148878

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 (417) 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-VL5KPM7V.mjs +55 -0
  20. package/dist/lib/neutral/app-graph-serializer-VL5KPM7V.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-5JY7PO7Z.mjs +285 -0
  29. package/dist/lib/neutral/chunk-5JY7PO7Z.mjs.map +7 -0
  30. package/dist/lib/neutral/chunk-J5LGTIGS.mjs +10 -0
  31. package/dist/lib/neutral/chunk-KDN4GKG2.mjs +98 -0
  32. package/dist/lib/neutral/chunk-KDN4GKG2.mjs.map +7 -0
  33. package/dist/lib/neutral/chunk-LXNSKCPD.mjs +44 -0
  34. package/dist/lib/neutral/chunk-LXNSKCPD.mjs.map +7 -0
  35. package/dist/lib/neutral/chunk-MGVKW5GN.mjs +8 -0
  36. package/dist/lib/neutral/chunk-MGVKW5GN.mjs.map +7 -0
  37. package/dist/lib/neutral/chunk-N76TRQSY.mjs +28 -0
  38. package/dist/lib/neutral/chunk-N76TRQSY.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 +370 -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-P255GUFG.mjs +28 -0
  46. package/dist/lib/neutral/create-P255GUFG.mjs.map +7 -0
  47. package/dist/lib/neutral/create-markdown-N2DOEZXT.mjs +20 -0
  48. package/dist/lib/neutral/create-markdown-N2DOEZXT.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 +327 -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-4U46EH7F.mjs +20 -0
  57. package/dist/lib/neutral/open-4U46EH7F.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/plugin.mjs +16 -0
  62. package/dist/lib/neutral/plugin.mjs.map +7 -0
  63. package/dist/lib/neutral/react-surface-P2WX2KXA.mjs +119 -0
  64. package/dist/lib/neutral/react-surface-P2WX2KXA.mjs.map +7 -0
  65. package/dist/lib/neutral/scroll-to-anchor-AFFA7YBC.mjs +47 -0
  66. package/dist/lib/neutral/scroll-to-anchor-AFFA7YBC.mjs.map +7 -0
  67. package/dist/lib/neutral/set-view-mode-UERQK6D7.mjs +24 -0
  68. package/dist/lib/neutral/set-view-mode-UERQK6D7.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 +19 -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/update-markdown-Q4MT3TW3.mjs +44 -0
  79. package/dist/lib/neutral/update-markdown-Q4MT3TW3.mjs.map +7 -0
  80. package/dist/types/src/MarkdownPlugin.d.ts +3 -1
  81. package/dist/types/src/MarkdownPlugin.d.ts.map +1 -1
  82. package/dist/types/src/MarkdownPlugin.node.d.ts +4 -0
  83. package/dist/types/src/MarkdownPlugin.node.d.ts.map +1 -0
  84. package/dist/types/src/MarkdownPlugin.test.d.ts +2 -0
  85. package/dist/types/src/MarkdownPlugin.test.d.ts.map +1 -0
  86. package/dist/types/src/MarkdownPlugin.workerd.d.ts +4 -0
  87. package/dist/types/src/MarkdownPlugin.workerd.d.ts.map +1 -0
  88. package/dist/types/src/blueprints/index.d.ts +2 -0
  89. package/dist/types/src/blueprints/index.d.ts.map +1 -0
  90. package/dist/types/src/blueprints/markdown-blueprint.d.ts +4 -0
  91. package/dist/types/src/blueprints/markdown-blueprint.d.ts.map +1 -0
  92. package/dist/types/src/capabilities/anchor-sort.d.ts +4 -2
  93. package/dist/types/src/capabilities/anchor-sort.d.ts.map +1 -1
  94. package/dist/types/src/capabilities/app-graph-serializer.d.ts +3 -2
  95. package/dist/types/src/capabilities/app-graph-serializer.d.ts.map +1 -1
  96. package/dist/types/src/capabilities/artifact-definition.d.ts +3 -1
  97. package/dist/types/src/capabilities/artifact-definition.d.ts.map +1 -1
  98. package/dist/types/src/capabilities/blueprint-definition.d.ts +5 -6
  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 -14
  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 +1 -1
  117. package/dist/types/src/components/MarkdownEditor/FileUpload.d.ts.map +1 -1
  118. package/dist/types/src/components/MarkdownEditor/MarkdownEditor.d.ts +34 -22
  119. package/dist/types/src/components/MarkdownEditor/MarkdownEditor.d.ts.map +1 -1
  120. package/dist/types/src/components/MarkdownEditor/MarkdownEditor.stories.d.ts +3 -3
  121. package/dist/types/src/components/MarkdownEditor/MarkdownEditor.stories.d.ts.map +1 -1
  122. package/dist/types/src/components/MarkdownEditor/MarkdownEditorContent.d.ts +17 -10
  123. package/dist/types/src/components/MarkdownEditor/MarkdownEditorContent.d.ts.map +1 -1
  124. package/dist/types/src/components/MarkdownEditor/MarkdownEditorToolbar.d.ts +6 -5
  125. package/dist/types/src/components/MarkdownEditor/MarkdownEditorToolbar.d.ts.map +1 -1
  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 -5
  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 +0 -1
  157. package/dist/types/src/hooks/index.d.ts.map +1 -1
  158. package/dist/types/src/hooks/useEditorMenuOptions.d.ts.map +1 -1
  159. package/dist/types/src/hooks/useExtensions.d.ts +10 -6
  160. package/dist/types/src/hooks/useExtensions.d.ts.map +1 -1
  161. package/dist/types/src/hooks/useLinkQuery.d.ts +2 -2
  162. package/dist/types/src/hooks/useLinkQuery.d.ts.map +1 -1
  163. package/dist/types/src/index.d.ts +2 -3
  164. package/dist/types/src/index.d.ts.map +1 -1
  165. package/dist/types/src/meta.d.ts +2 -2
  166. package/dist/types/src/meta.d.ts.map +1 -1
  167. package/dist/types/src/operations/create-markdown.d.ts +5 -0
  168. package/dist/types/src/operations/create-markdown.d.ts.map +1 -0
  169. package/dist/types/src/operations/create.d.ts +5 -0
  170. package/dist/types/src/operations/create.d.ts.map +1 -0
  171. package/dist/types/src/operations/create.test.d.ts.map +1 -0
  172. package/dist/types/src/operations/index.d.ts +3 -0
  173. package/dist/types/src/operations/index.d.ts.map +1 -0
  174. package/dist/types/src/operations/open.d.ts +5 -0
  175. package/dist/types/src/operations/open.d.ts.map +1 -0
  176. package/dist/types/src/operations/scroll-to-anchor.d.ts +5 -0
  177. package/dist/types/src/operations/scroll-to-anchor.d.ts.map +1 -0
  178. package/dist/types/src/operations/set-view-mode.d.ts +5 -0
  179. package/dist/types/src/operations/set-view-mode.d.ts.map +1 -0
  180. package/dist/types/src/operations/update-markdown.d.ts +5 -0
  181. package/dist/types/src/operations/update-markdown.d.ts.map +1 -0
  182. package/dist/types/src/operations/update.test.d.ts.map +1 -0
  183. package/dist/types/src/plugin.d.ts +4 -0
  184. package/dist/types/src/plugin.d.ts.map +1 -0
  185. package/dist/types/src/testing.d.ts +3 -2
  186. package/dist/types/src/testing.d.ts.map +1 -1
  187. package/dist/types/src/translations.d.ts +74 -36
  188. package/dist/types/src/translations.d.ts.map +1 -1
  189. package/dist/types/src/types/Markdown.d.ts +34 -33
  190. package/dist/types/src/types/Markdown.d.ts.map +1 -1
  191. package/dist/types/src/types/MarkdownCapabilities.d.ts +32 -0
  192. package/dist/types/src/types/MarkdownCapabilities.d.ts.map +1 -0
  193. package/dist/types/src/types/MarkdownEvents.d.ts +3 -0
  194. package/dist/types/src/types/MarkdownEvents.d.ts.map +1 -0
  195. package/dist/types/src/types/MarkdownOperation.d.ts +64 -0
  196. package/dist/types/src/types/MarkdownOperation.d.ts.map +1 -0
  197. package/dist/types/src/types/Settings.d.ts +30 -0
  198. package/dist/types/src/types/Settings.d.ts.map +1 -0
  199. package/dist/types/src/types/index.d.ts +5 -2
  200. package/dist/types/src/types/index.d.ts.map +1 -1
  201. package/dist/types/src/types/types.d.ts +3 -2
  202. package/dist/types/src/types/types.d.ts.map +1 -1
  203. package/dist/types/src/util.d.ts +6 -3
  204. package/dist/types/src/util.d.ts.map +1 -1
  205. package/dist/types/src/util.test.d.ts +2 -0
  206. package/dist/types/src/util.test.d.ts.map +1 -0
  207. package/dist/types/tsconfig.tsbuildinfo +1 -1
  208. package/package.json +153 -89
  209. package/src/MarkdownPlugin.node.ts +20 -0
  210. package/src/MarkdownPlugin.test.ts +26 -0
  211. package/src/MarkdownPlugin.tsx +33 -101
  212. package/src/MarkdownPlugin.workerd.ts +19 -0
  213. package/src/blueprints/index.ts +5 -0
  214. package/src/blueprints/markdown-blueprint.ts +43 -0
  215. package/src/capabilities/anchor-sort.ts +28 -21
  216. package/src/capabilities/app-graph-serializer.ts +52 -43
  217. package/src/capabilities/artifact-definition.ts +83 -86
  218. package/src/capabilities/blueprint-definition.ts +11 -35
  219. package/src/capabilities/comment-config.ts +33 -0
  220. package/src/capabilities/create-object.ts +31 -0
  221. package/src/capabilities/index.ts +15 -11
  222. package/src/capabilities/node.ts +13 -0
  223. package/src/capabilities/operation-handler.ts +16 -0
  224. package/src/capabilities/react-surface.tsx +102 -67
  225. package/src/capabilities/settings.ts +30 -18
  226. package/src/capabilities/state.ts +41 -25
  227. package/src/components/MarkdownEditor/FileUpload.tsx +2 -2
  228. package/src/components/MarkdownEditor/MarkdownEditor.stories.tsx +48 -44
  229. package/src/components/MarkdownEditor/MarkdownEditor.tsx +149 -106
  230. package/src/components/MarkdownEditor/MarkdownEditorContent.tsx +66 -33
  231. package/src/components/MarkdownEditor/MarkdownEditorToolbar.tsx +37 -53
  232. package/src/components/MarkdownSettings/MarkdownSettings.stories.tsx +40 -0
  233. package/src/components/MarkdownSettings/MarkdownSettings.tsx +23 -96
  234. package/src/components/MarkdownSettings/index.ts +1 -1
  235. package/src/components/index.ts +4 -7
  236. package/src/containers/EditableMarkdownCard/EditableMarkdownCard.stories.tsx +86 -0
  237. package/src/containers/EditableMarkdownCard/EditableMarkdownCard.tsx +44 -0
  238. package/src/containers/EditableMarkdownCard/index.ts +6 -0
  239. package/src/containers/MarkdownArticle/MarkdownArticle.stories.tsx +135 -0
  240. package/src/containers/MarkdownArticle/MarkdownArticle.tsx +146 -0
  241. package/src/containers/MarkdownArticle/index.ts +6 -0
  242. package/src/containers/MarkdownCard/MarkdownCard.stories.tsx +68 -0
  243. package/src/containers/MarkdownCard/MarkdownCard.tsx +75 -0
  244. package/src/containers/MarkdownCard/index.ts +5 -0
  245. package/src/containers/MarkdownCard/snippet.ts +54 -0
  246. package/src/containers/index.ts +11 -0
  247. package/src/hooks/index.ts +0 -1
  248. package/src/hooks/useEditorMenuOptions.ts +11 -14
  249. package/src/hooks/useExtensions.tsx +103 -114
  250. package/src/hooks/useLinkQuery.ts +57 -41
  251. package/src/index.ts +2 -5
  252. package/src/meta.ts +15 -6
  253. package/src/operations/create-markdown.ts +19 -0
  254. package/src/operations/create.conversations.json +1 -0
  255. package/src/operations/create.test.ts +96 -0
  256. package/src/operations/create.ts +26 -0
  257. package/src/operations/index.ts +14 -0
  258. package/src/operations/open.ts +25 -0
  259. package/src/operations/scroll-to-anchor.ts +38 -0
  260. package/src/operations/set-view-mode.ts +23 -0
  261. package/src/operations/update-markdown.ts +51 -0
  262. package/src/operations/update.conversations.json +1 -0
  263. package/src/operations/update.test.ts +213 -0
  264. package/src/plugin.ts +11 -0
  265. package/src/testing.ts +13 -8
  266. package/src/translations.ts +28 -36
  267. package/src/types/Markdown.ts +27 -33
  268. package/src/types/MarkdownCapabilities.ts +51 -0
  269. package/src/types/MarkdownEvents.ts +14 -0
  270. package/src/types/MarkdownOperation.ts +125 -0
  271. package/src/types/Settings.ts +85 -0
  272. package/src/types/index.ts +6 -3
  273. package/src/types/types.ts +7 -3
  274. package/src/util.test.ts +44 -0
  275. package/src/util.tsx +78 -8
  276. package/dist/lib/browser/MarkdownCard-JYMDPKV5.mjs +0 -12
  277. package/dist/lib/browser/MarkdownContainer-Y75XSVBX.mjs +0 -15
  278. package/dist/lib/browser/anchor-sort-3HGPGCOO.mjs +0 -31
  279. package/dist/lib/browser/anchor-sort-3HGPGCOO.mjs.map +0 -7
  280. package/dist/lib/browser/app-graph-serializer-POZN234F.mjs +0 -51
  281. package/dist/lib/browser/app-graph-serializer-POZN234F.mjs.map +0 -7
  282. package/dist/lib/browser/blueprint-definition-GIPKFDY5.mjs +0 -13
  283. package/dist/lib/browser/chunk-22XSSNBS.mjs +0 -56
  284. package/dist/lib/browser/chunk-22XSSNBS.mjs.map +0 -7
  285. package/dist/lib/browser/chunk-2MLGSYRN.mjs +0 -20
  286. package/dist/lib/browser/chunk-2MLGSYRN.mjs.map +0 -7
  287. package/dist/lib/browser/chunk-BQTYJOFB.mjs +0 -28
  288. package/dist/lib/browser/chunk-BQTYJOFB.mjs.map +0 -7
  289. package/dist/lib/browser/chunk-GH6GQSBL.mjs +0 -51
  290. package/dist/lib/browser/chunk-GH6GQSBL.mjs.map +0 -7
  291. package/dist/lib/browser/chunk-IBCHVMZW.mjs +0 -16
  292. package/dist/lib/browser/chunk-IBCHVMZW.mjs.map +0 -7
  293. package/dist/lib/browser/chunk-K3LXOU3E.mjs +0 -827
  294. package/dist/lib/browser/chunk-K3LXOU3E.mjs.map +0 -7
  295. package/dist/lib/browser/chunk-PBJLFIOX.mjs +0 -96
  296. package/dist/lib/browser/chunk-PBJLFIOX.mjs.map +0 -7
  297. package/dist/lib/browser/chunk-QYSEJ5GP.mjs +0 -79
  298. package/dist/lib/browser/chunk-QYSEJ5GP.mjs.map +0 -7
  299. package/dist/lib/browser/chunk-Y53FQREH.mjs +0 -150
  300. package/dist/lib/browser/chunk-Y53FQREH.mjs.map +0 -7
  301. package/dist/lib/browser/index.mjs +0 -174
  302. package/dist/lib/browser/index.mjs.map +0 -7
  303. package/dist/lib/browser/intent-resolver-Z5L7TXUK.mjs +0 -62
  304. package/dist/lib/browser/intent-resolver-Z5L7TXUK.mjs.map +0 -7
  305. package/dist/lib/browser/meta.json +0 -1
  306. package/dist/lib/browser/react-surface-GO5ZOKNN.mjs +0 -211
  307. package/dist/lib/browser/react-surface-GO5ZOKNN.mjs.map +0 -7
  308. package/dist/lib/browser/settings-TZUDB5EW.mjs +0 -28
  309. package/dist/lib/browser/settings-TZUDB5EW.mjs.map +0 -7
  310. package/dist/lib/browser/state-BTUKVZHY.mjs +0 -37
  311. package/dist/lib/browser/state-BTUKVZHY.mjs.map +0 -7
  312. package/dist/lib/browser/toolkit.mjs +0 -13
  313. package/dist/lib/browser/types/index.mjs +0 -10
  314. package/dist/lib/node-esm/MarkdownCard-ZXPJLUYO.mjs +0 -13
  315. package/dist/lib/node-esm/MarkdownCard-ZXPJLUYO.mjs.map +0 -7
  316. package/dist/lib/node-esm/MarkdownContainer-YRDSRDCS.mjs +0 -16
  317. package/dist/lib/node-esm/MarkdownContainer-YRDSRDCS.mjs.map +0 -7
  318. package/dist/lib/node-esm/anchor-sort-PCDXEBJ2.mjs +0 -32
  319. package/dist/lib/node-esm/anchor-sort-PCDXEBJ2.mjs.map +0 -7
  320. package/dist/lib/node-esm/app-graph-serializer-NF65JYAS.mjs +0 -52
  321. package/dist/lib/node-esm/app-graph-serializer-NF65JYAS.mjs.map +0 -7
  322. package/dist/lib/node-esm/blueprint-definition-ENKJZYQS.mjs +0 -14
  323. package/dist/lib/node-esm/blueprint-definition-ENKJZYQS.mjs.map +0 -7
  324. package/dist/lib/node-esm/chunk-AMHACOXW.mjs +0 -57
  325. package/dist/lib/node-esm/chunk-AMHACOXW.mjs.map +0 -7
  326. package/dist/lib/node-esm/chunk-CT7CFX5G.mjs +0 -828
  327. package/dist/lib/node-esm/chunk-CT7CFX5G.mjs.map +0 -7
  328. package/dist/lib/node-esm/chunk-GMMVSXQ6.mjs +0 -17
  329. package/dist/lib/node-esm/chunk-GMMVSXQ6.mjs.map +0 -7
  330. package/dist/lib/node-esm/chunk-HAIEWPU7.mjs +0 -151
  331. package/dist/lib/node-esm/chunk-HAIEWPU7.mjs.map +0 -7
  332. package/dist/lib/node-esm/chunk-KCHUTL3Q.mjs +0 -22
  333. package/dist/lib/node-esm/chunk-KCHUTL3Q.mjs.map +0 -7
  334. package/dist/lib/node-esm/chunk-NGYJNQ6A.mjs +0 -80
  335. package/dist/lib/node-esm/chunk-NGYJNQ6A.mjs.map +0 -7
  336. package/dist/lib/node-esm/chunk-PIOOG7A5.mjs +0 -97
  337. package/dist/lib/node-esm/chunk-PIOOG7A5.mjs.map +0 -7
  338. package/dist/lib/node-esm/chunk-PLZ7EVCT.mjs +0 -52
  339. package/dist/lib/node-esm/chunk-PLZ7EVCT.mjs.map +0 -7
  340. package/dist/lib/node-esm/chunk-SHAMSMKQ.mjs +0 -29
  341. package/dist/lib/node-esm/chunk-SHAMSMKQ.mjs.map +0 -7
  342. package/dist/lib/node-esm/index.mjs +0 -175
  343. package/dist/lib/node-esm/index.mjs.map +0 -7
  344. package/dist/lib/node-esm/intent-resolver-6B3PFQ5F.mjs +0 -63
  345. package/dist/lib/node-esm/intent-resolver-6B3PFQ5F.mjs.map +0 -7
  346. package/dist/lib/node-esm/meta.json +0 -1
  347. package/dist/lib/node-esm/react-surface-I46BPCWT.mjs +0 -212
  348. package/dist/lib/node-esm/react-surface-I46BPCWT.mjs.map +0 -7
  349. package/dist/lib/node-esm/settings-CJ3T5EX4.mjs +0 -29
  350. package/dist/lib/node-esm/settings-CJ3T5EX4.mjs.map +0 -7
  351. package/dist/lib/node-esm/state-K6EH7SRZ.mjs +0 -38
  352. package/dist/lib/node-esm/state-K6EH7SRZ.mjs.map +0 -7
  353. package/dist/lib/node-esm/toolkit.mjs +0 -14
  354. package/dist/lib/node-esm/toolkit.mjs.map +0 -7
  355. package/dist/lib/node-esm/types/index.mjs +0 -11
  356. package/dist/types/src/capabilities/capabilities.d.ts +0 -12
  357. package/dist/types/src/capabilities/capabilities.d.ts.map +0 -1
  358. package/dist/types/src/capabilities/intent-resolver.d.ts +0 -4
  359. package/dist/types/src/capabilities/intent-resolver.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 -14
  367. package/dist/types/src/components/MarkdownContainer.d.ts.map +0 -1
  368. package/dist/types/src/components/MarkdownContainer.stories.d.ts +0 -58
  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/events.d.ts +0 -4
  373. package/dist/types/src/events.d.ts.map +0 -1
  374. package/dist/types/src/functions/create.d.ts +0 -8
  375. package/dist/types/src/functions/create.d.ts.map +0 -1
  376. package/dist/types/src/functions/create.test.d.ts.map +0 -1
  377. package/dist/types/src/functions/index.d.ts +0 -18
  378. package/dist/types/src/functions/index.d.ts.map +0 -1
  379. package/dist/types/src/functions/open.d.ts +0 -7
  380. package/dist/types/src/functions/open.d.ts.map +0 -1
  381. package/dist/types/src/functions/update.d.ts +0 -6
  382. package/dist/types/src/functions/update.d.ts.map +0 -1
  383. package/dist/types/src/functions/update.test.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/toolkit.d.ts +0 -3
  387. package/dist/types/src/toolkit.d.ts.map +0 -1
  388. package/dist/types/src/types/MarkdownAction.d.ts +0 -34
  389. package/dist/types/src/types/MarkdownAction.d.ts.map +0 -1
  390. package/src/capabilities/capabilities.ts +0 -22
  391. package/src/capabilities/intent-resolver.ts +0 -58
  392. package/src/components/MarkdownCard/MarkdownCard.stories.tsx +0 -76
  393. package/src/components/MarkdownCard/MarkdownCard.tsx +0 -89
  394. package/src/components/MarkdownCard/index.ts +0 -9
  395. package/src/components/MarkdownContainer.stories.tsx +0 -136
  396. package/src/components/MarkdownContainer.tsx +0 -113
  397. package/src/components/Suggestions.stories.tsx +0 -225
  398. package/src/events.ts +0 -11
  399. package/src/functions/create.conversations.json +0 -1
  400. package/src/functions/create.test.ts +0 -128
  401. package/src/functions/create.ts +0 -34
  402. package/src/functions/index.ts +0 -13
  403. package/src/functions/open.ts +0 -32
  404. package/src/functions/update.conversations.json +0 -1
  405. package/src/functions/update.test.ts +0 -151
  406. package/src/functions/update.ts +0 -37
  407. package/src/hooks/useSelectCurrentThread.tsx +0 -66
  408. package/src/toolkit.ts +0 -6
  409. package/src/types/MarkdownAction.ts +0 -29
  410. /package/dist/lib/{browser/types → neutral/blueprints}/index.mjs.map +0 -0
  411. /package/dist/lib/{browser/MarkdownCard-JYMDPKV5.mjs.map → neutral/chunk-J5LGTIGS.mjs.map} +0 -0
  412. /package/dist/lib/{node-esm/types → neutral}/index.mjs.map +0 -0
  413. /package/dist/lib/{browser/MarkdownContainer-Y75XSVBX.mjs.map → neutral/meta.mjs.map} +0 -0
  414. /package/dist/lib/{browser/blueprint-definition-GIPKFDY5.mjs.map → neutral/operations/index.mjs.map} +0 -0
  415. /package/dist/lib/{browser/toolkit.mjs.map → neutral/types/index.mjs.map} +0 -0
  416. /package/dist/types/src/{functions → operations}/create.test.d.ts +0 -0
  417. /package/dist/types/src/{functions → operations}/update.test.d.ts +0 -0
@@ -0,0 +1,68 @@
1
+ //
2
+ // Copyright 2023 DXOS.org
3
+ //
4
+
5
+ import { type Meta, type StoryObj } from '@storybook/react-vite';
6
+ import React, { useMemo } from 'react';
7
+
8
+ import { ProcessManagerPlugin } from '@dxos/app-framework';
9
+ import { withPluginManager } from '@dxos/app-framework/testing';
10
+ import { Obj } from '@dxos/echo';
11
+ import { ClientPlugin } from '@dxos/plugin-client/testing';
12
+ import { Markdown } from '@dxos/plugin-markdown';
13
+ import { random } from '@dxos/random';
14
+ import { Card } from '@dxos/react-ui';
15
+ import { CardContainer } from '@dxos/react-ui-mosaic/testing';
16
+ import { withTheme } from '@dxos/react-ui/testing';
17
+
18
+ import { translations } from '#translations';
19
+
20
+ import { MarkdownCard, type MarkdownCardProps } from './MarkdownCard';
21
+
22
+ random.seed(1234);
23
+
24
+ const MarkdownCardStory = ({ ...args }: Omit<MarkdownCardProps, 'subject'>) => {
25
+ const subject = useMemo(
26
+ () =>
27
+ Markdown.make({
28
+ name: random.lorem.words(3),
29
+ content: '# Title\n' + random.lorem.paragraphs(5),
30
+ }),
31
+ [],
32
+ );
33
+
34
+ return (
35
+ <CardContainer icon='ph--text-aa--regular'>
36
+ <Card.Root border={false}>
37
+ <Card.Header>
38
+ <Card.DragHandle />
39
+ <Card.Title>{Obj.getLabel(subject)}</Card.Title>
40
+ <Card.Menu />
41
+ </Card.Header>
42
+ <MarkdownCard subject={subject} {...args} />
43
+ </Card.Root>
44
+ </CardContainer>
45
+ );
46
+ };
47
+
48
+ const meta: Meta<typeof MarkdownCardStory> = {
49
+ title: 'plugins/plugin-markdown/containers/MarkdownCard',
50
+ component: MarkdownCardStory,
51
+ decorators: [
52
+ withTheme(),
53
+ withPluginManager({
54
+ plugins: [ProcessManagerPlugin(), ClientPlugin({})],
55
+ }),
56
+ ],
57
+ parameters: {
58
+ layout: 'centered',
59
+ translations,
60
+ },
61
+ tags: ['cards'],
62
+ };
63
+
64
+ export default meta;
65
+
66
+ type Story = StoryObj<typeof meta>;
67
+
68
+ export const Default: Story = {};
@@ -0,0 +1,75 @@
1
+ //
2
+ // Copyright 2025 DXOS.org
3
+ //
4
+
5
+ import React, { useMemo } from 'react';
6
+
7
+ import { Obj } from '@dxos/echo';
8
+ import { Card, useTranslation } from '@dxos/react-ui';
9
+ import { Editor } from '@dxos/react-ui-editor';
10
+ import { Text } from '@dxos/schema';
11
+ import { mx } from '@dxos/ui-theme';
12
+
13
+ import { MarkdownEditor, MarkdownEditorProvider } from '#components';
14
+ import { meta } from '#meta';
15
+ import { Markdown } from '#types';
16
+
17
+ import { getContentSnippet } from '../../util';
18
+ import { snippet as snippetExtension } from './snippet';
19
+
20
+ export type MarkdownCardProps = { subject: Markdown.Document | Text.Text };
21
+
22
+ export const MarkdownCard = ({ subject }: MarkdownCardProps) => {
23
+ const { t } = useTranslation(meta.id);
24
+ const snippet = useMemo(() => getSnippet(subject), [subject]);
25
+ const extensions = useMemo(() => [snippetExtension({ height: 300, scale: 0.8 })], []);
26
+ const info = getInfo(subject);
27
+
28
+ return (
29
+ <Card.Body>
30
+ {snippet && (
31
+ <Card.Section className='relative'>
32
+ <Card.Row fullWidth>
33
+ <MarkdownEditorProvider id={subject.id} viewMode='readonly' extensions={extensions}>
34
+ {(editorRootProps) => (
35
+ <Editor.Root {...editorRootProps}>
36
+ <MarkdownEditor.Content initialValue={snippet} slots={{ content: { className: 'px-2!' } }} />
37
+ </Editor.Root>
38
+ )}
39
+ </MarkdownEditorProvider>
40
+ <Fade />
41
+ </Card.Row>
42
+ </Card.Section>
43
+ )}
44
+ <Card.Section>
45
+ <Card.Row fullWidth>
46
+ <Card.Text classNames='px-2 text-xs text-description'>
47
+ {info.words} {t('words.label', { count: info.words })}
48
+ </Card.Text>
49
+ </Card.Row>
50
+ </Card.Section>
51
+ </Card.Body>
52
+ );
53
+ };
54
+
55
+ const Fade = () => (
56
+ <div
57
+ className={mx(
58
+ 'z-10 absolute bottom-0 inset-x-0 h-12 w-full',
59
+ 'bg-gradient-to-b from-transparent to-(--surface-bg) pointer-events-none',
60
+ )}
61
+ />
62
+ );
63
+
64
+ const getSnippet = (subject: Markdown.Document | Text.Text, fallback?: string, maxLines = 16) => {
65
+ if (Obj.instanceOf(Markdown.Document, subject)) {
66
+ return Obj.getDescription(subject) || getContentSnippet(subject.content?.target?.content ?? fallback, maxLines);
67
+ } else if (Obj.instanceOf(Text.Text, subject)) {
68
+ return getContentSnippet(subject.content ?? fallback, maxLines);
69
+ }
70
+ };
71
+
72
+ const getInfo = (subject: Markdown.Document | Text.Text) => {
73
+ const text = (Obj.instanceOf(Markdown.Document, subject) ? subject.content?.target?.content : subject.content) ?? '';
74
+ return { words: text.split(' ').length };
75
+ };
@@ -0,0 +1,5 @@
1
+ //
2
+ // Copyright 2025 DXOS.org
3
+ //
4
+
5
+ export { MarkdownCard as default } from './MarkdownCard';
@@ -0,0 +1,54 @@
1
+ //
2
+ // Copyright 2025 DXOS.org
3
+ //
4
+
5
+ import { EditorState } from '@codemirror/state';
6
+ import { EditorView } from '@codemirror/view';
7
+
8
+ export type SnippetOptions = {
9
+ /** Maximum height of the editor in pixels. Overflowing content is hidden. */
10
+ height: number;
11
+ /** Zoom factor applied to the editor (e.g. 0.5 renders at 50%). @default 1 */
12
+ scale?: number;
13
+ };
14
+
15
+ /**
16
+ * CodeMirror extension for rendering a non-scrollable snippet of editor content.
17
+ * Constrains the editor to the given height via CSS `max-height`, wraps long
18
+ * lines (`pre-wrap`), and disables scrolling entirely.
19
+ *
20
+ * NOTE: Uses CSS `zoom` rather than `transform: scale` because `zoom` affects
21
+ * layout, so line wrapping fills the full visual width of the container.
22
+ * `transform: scale` only scales paint output, leaving empty space on the right.
23
+ */
24
+ export const snippet = ({ height, scale = 1 }: SnippetOptions) => {
25
+ return [
26
+ EditorState.readOnly.of(true),
27
+ EditorView.editable.of(false),
28
+ EditorState.transactionFilter.of((tr) => {
29
+ if (tr.selection) {
30
+ return [];
31
+ } // Drop any selection changes.
32
+ return tr;
33
+ }),
34
+ EditorView.theme({
35
+ // Outer editor element: clip to the caller-specified height.
36
+ '&': {
37
+ maxHeight: `${height}px`,
38
+ overflow: 'hidden',
39
+ },
40
+ '.cm-scroller': {
41
+ // Prevent scroll; scale up the inner clip so the final pixel height matches `height`.
42
+ maxHeight: `${height / scale}px`,
43
+ overflow: 'hidden !important',
44
+ padding: '0',
45
+ },
46
+ '.cm-content': {
47
+ // zoom (unlike transform: scale) affects layout, so line-wrapping fills the full visual width of the container.
48
+ zoom: scale,
49
+ margin: '0',
50
+ padding: '0',
51
+ },
52
+ }),
53
+ ];
54
+ };
@@ -0,0 +1,11 @@
1
+ //
2
+ // Copyright 2025 DXOS.org
3
+ //
4
+
5
+ import { type ComponentType, lazy } from 'react';
6
+
7
+ export type { MarkdownArticleProps } from './MarkdownArticle';
8
+
9
+ export const MarkdownCard: ComponentType<any> = lazy(() => import('./MarkdownCard'));
10
+ export const EditableMarkdownCard: ComponentType<any> = lazy(() => import('./EditableMarkdownCard'));
11
+ export const MarkdownArticle: ComponentType<any> = lazy(() => import('./MarkdownArticle'));
@@ -5,4 +5,3 @@
5
5
  export * from './useEditorMenuOptions';
6
6
  export * from './useExtensions';
7
7
  export * from './useLinkQuery';
8
- export * from './useSelectCurrentThread';
@@ -5,7 +5,7 @@
5
5
  import { type EditorView } from '@codemirror/view';
6
6
  import { useCallback, useMemo, useRef } from 'react';
7
7
 
8
- import { Domino, toLocalizedString, useTranslation } from '@dxos/react-ui';
8
+ import { toLocalizedString, useTranslation } from '@dxos/react-ui';
9
9
  import {
10
10
  type EditorMenuGroup,
11
11
  type UseEditorMenuProps,
@@ -13,8 +13,9 @@ import {
13
13
  formattingCommands,
14
14
  linkSlashCommands,
15
15
  } from '@dxos/react-ui-editor';
16
+ import { Domino } from '@dxos/ui';
16
17
 
17
- import { meta } from '../meta';
18
+ import { meta } from '#meta';
18
19
 
19
20
  export type UseEditorMenuOptionsProps = {
20
21
  editorView?: EditorView;
@@ -52,18 +53,14 @@ export const useEditorMenuOptions = ({
52
53
  const trigger = onLinkQuery ? ['/', '@'] : ['/'];
53
54
  const placeholder = {
54
55
  delay: 3_000,
55
- content: () =>
56
- Domino.of('div')
57
- .children(
58
- Domino.of('span').text('Press'),
59
- ...trigger.map((text) =>
60
- Domino.of('span')
61
- .classNames('mx-1 pli-1.5 pt-[1px] pb-[2px] border border-separator rounded-sm')
62
- .text(text),
63
- ),
64
- Domino.of('span').text('for commands.'),
65
- )
66
- .build(),
56
+ content: () => {
57
+ const pressEl = Domino.of('span').text('Press');
58
+ const triggerEls = trigger.map((text) =>
59
+ Domino.of('span').classNames('mx-1 px-1.5 pt-[1px] pb-[2px] border border-separator rounded-xs').text(text),
60
+ );
61
+ const forCommandsEl = Domino.of('span').text('for commands.');
62
+ return Domino.of('div').append(pressEl, ...triggerEls, forCommandsEl).root;
63
+ },
67
64
  };
68
65
 
69
66
  return { viewRef, getMenu, trigger, placeholder };
@@ -3,28 +3,26 @@
3
3
  //
4
4
 
5
5
  import { type ViewUpdate } from '@codemirror/view';
6
- import React, { type AnchorHTMLAttributes, type ReactNode, useMemo } from 'react';
7
- import { createRoot } from 'react-dom/client';
6
+ import { useMemo } from 'react';
8
7
 
9
- import { LayoutAction, type PromiseIntentDispatcher, createIntent } from '@dxos/app-framework';
10
- import { useIntentDispatcher } from '@dxos/app-framework/react';
8
+ import { fromUrlPath } from '@dxos/app-toolkit';
11
9
  import { debounceAndThrottle } from '@dxos/async';
12
10
  import { Obj } from '@dxos/echo';
11
+ import { createDocAccessor } from '@dxos/echo-db';
13
12
  import { invariant } from '@dxos/invariant';
14
- import { createDocAccessor } from '@dxos/react-client/echo';
15
- import { getSpace } from '@dxos/react-client/echo';
13
+ import { getSpace, useObject } from '@dxos/react-client/echo';
16
14
  import { useIdentity } from '@dxos/react-client/halo';
17
- import { Icon, ThemeProvider } from '@dxos/react-ui';
15
+ import { useThemeContext } from '@dxos/react-ui';
18
16
  import { type SelectionManager } from '@dxos/react-ui-attention';
17
+ import { Text } from '@dxos/schema';
18
+ import { Domino } from '@dxos/ui';
19
19
  import {
20
20
  Cursor,
21
21
  type EditorStateStore,
22
22
  EditorView,
23
- type EditorViewMode,
24
23
  type Extension,
25
24
  InputModeExtensions,
26
25
  type PreviewOptions,
27
- type RenderCallback,
28
26
  createDataExtensions,
29
27
  decorateMarkdown,
30
28
  documentId,
@@ -35,13 +33,13 @@ import {
35
33
  preview,
36
34
  replacer,
37
35
  selectionState,
38
- typewriter,
39
- } from '@dxos/react-ui-editor';
40
- import { defaultTx } from '@dxos/react-ui-theme';
41
- import { Text } from '@dxos/schema';
42
- import { isTruthy } from '@dxos/util';
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';
43
42
 
44
- import { Markdown } from '../types';
45
43
  import { setFallbackName } from '../util';
46
44
 
47
45
  export type DocumentType = Markdown.Document | Text.Text | { id: string; text: string };
@@ -49,12 +47,16 @@ export type DocumentType = Markdown.Document | Text.Text | { id: string; text: s
49
47
  export type ExtensionsOptions = {
50
48
  id: string;
51
49
  object?: DocumentType;
52
- dispatch?: PromiseIntentDispatcher;
53
50
  settings?: Markdown.Settings;
54
- selectionManager?: SelectionManager;
51
+ compact?: boolean;
55
52
  viewMode?: EditorViewMode;
53
+ editable?: boolean;
54
+ selectionManager?: SelectionManager;
56
55
  editorStateStore?: EditorStateStore;
57
56
  previewOptions?: PreviewOptions;
57
+ platform?: 'mobile' | 'desktop';
58
+ /** Callback when an internal link is clicked. */
59
+ onSelectObject?: (objectId: string) => void;
58
60
  };
59
61
 
60
62
  // TODO(burdon): Merge with createBaseExtensions below.
@@ -62,21 +64,23 @@ export const useExtensions = ({
62
64
  id,
63
65
  object,
64
66
  settings,
65
- selectionManager,
67
+ compact,
66
68
  viewMode,
69
+ selectionManager,
67
70
  editorStateStore,
68
71
  previewOptions,
72
+ onSelectObject,
69
73
  }: ExtensionsOptions): Extension[] => {
70
- const { dispatchPromise: dispatch } = useIntentDispatcher();
74
+ const { platform } = useThemeContext();
71
75
  const identity = useIdentity();
72
76
  const space = getSpace(object);
73
77
 
74
- let target: Obj.Any | undefined;
75
- if (Obj.instanceOf(Markdown.Document, object)) {
76
- target = (object as Markdown.Document).content.target;
77
- } else if (Obj.instanceOf(Text.Text, object)) {
78
- target = object;
79
- }
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);
80
84
 
81
85
  // TODO(wittjosiah): Autocomplete is not working and this query is causing performance issues.
82
86
  // TODO(burdon): Unsubscribe.
@@ -89,24 +93,27 @@ export const useExtensions = ({
89
93
  id,
90
94
  object,
91
95
  settings,
92
- selectionManager,
96
+ compact,
93
97
  viewMode,
98
+ selectionManager,
94
99
  previewOptions,
95
- dispatch,
100
+ platform,
101
+ onSelectObject,
96
102
  }),
97
103
  [
98
104
  id,
99
105
  object,
106
+ compact,
100
107
  viewMode,
101
- dispatch,
108
+ selectionManager,
102
109
  previewOptions,
103
110
  settings,
104
111
  settings?.debug,
105
112
  settings?.editorInputMode,
106
113
  settings?.folding,
107
114
  settings?.numberedHeadings,
108
- settings?.typewriter,
109
- selectionManager,
115
+ platform,
116
+ onSelectObject,
110
117
  ],
111
118
  );
112
119
 
@@ -119,7 +126,7 @@ export const useExtensions = ({
119
126
  createDataExtensions({
120
127
  id,
121
128
  text: createDocAccessor(target, ['content']),
122
- space,
129
+ messenger: space,
123
130
  identity,
124
131
  }),
125
132
 
@@ -144,16 +151,18 @@ export const useExtensions = ({
144
151
  const createBaseExtensions = ({
145
152
  id,
146
153
  object,
147
- dispatch,
154
+ onSelectObject,
148
155
  settings,
149
- selectionManager,
156
+ compact,
150
157
  viewMode,
158
+ selectionManager,
151
159
  previewOptions,
160
+ platform,
152
161
  }: ExtensionsOptions): Extension[] => {
153
162
  const extensions: Extension[] = [
154
163
  selectionManager && selectionChange(selectionManager),
155
164
  settings?.editorInputMode && InputModeExtensions[settings.editorInputMode],
156
- settings?.folding && folding(),
165
+ settings?.folding && !compact && platform !== 'mobile' && folding(),
157
166
  ].filter(isTruthy);
158
167
 
159
168
  //
@@ -166,22 +175,8 @@ const createBaseExtensions = ({
166
175
  decorateMarkdown({
167
176
  selectionChangeDelay: 100,
168
177
  numberedHeadings: settings?.numberedHeadings ? { from: 2 } : undefined,
169
- // TODO(wittjosiah): For internal links, consider ignoring the link text and rendering the label of the object being linked to.
170
- // TODO(burdon): Create dx-tag.
171
- renderLinkButton:
172
- dispatch && (object || id)
173
- ? createLinkRenderer((id: string) => {
174
- void dispatch(
175
- createIntent(LayoutAction.Open, {
176
- part: 'main',
177
- subject: [id],
178
- options: {
179
- pivotId: object && Obj.isObject(object) ? Obj.getDXN(object).toString() : id,
180
- },
181
- }),
182
- );
183
- })
184
- : undefined,
178
+ // TODO(wittjosiah): For internal links render the label of the object.
179
+ renderLinkButton: onSelectObject && createRenderLink(onSelectObject),
185
180
  }),
186
181
  linkTooltip(renderLinkTooltip),
187
182
  preview(previewOptions),
@@ -191,9 +186,9 @@ const createBaseExtensions = ({
191
186
  }
192
187
 
193
188
  if (settings?.debug) {
194
- const items = settings.typewriter?.split(/[,\n]/) ?? '';
189
+ const items = settings.snippets?.split(/[,\n]/) ?? '';
195
190
  if (items) {
196
- extensions.push(typewriter({ items }));
191
+ extensions.push(snippets({ items }));
197
192
  }
198
193
  }
199
194
 
@@ -201,79 +196,73 @@ const createBaseExtensions = ({
201
196
  };
202
197
 
203
198
  const selectionChange = (selectionManager: SelectionManager) => {
204
- return EditorView.updateListener.of(
205
- debounceAndThrottle((update: ViewUpdate) => {
206
- if (update.selectionSet) {
207
- const id = update.state.facet(documentId);
208
- const cursorConverter = update.state.facet(Cursor.converter);
209
- const selection = update.state.selection;
210
- const ranges = selection.ranges
211
- .map((range) => ({
212
- from: cursorConverter.toCursor(range.from),
213
- to: cursorConverter.toCursor(range.to),
214
- }))
215
- .filter(({ from, to }) => to > from);
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
+ }));
216
215
 
217
- selectionManager.updateMultiRange(id, ranges);
218
- }
219
- }, 100),
220
- );
221
- };
216
+ selectionManager.updateMultiRange(id, ranges);
217
+ }, 100);
222
218
 
223
- // TODO(burdon): Factor out styles.
224
- const style = {
225
- hover: 'rounded-sm text-primary-500 hover:text-primary-600 dark:text-primary-500 hover:dark:text-primary-400',
226
- icon: 'inline-block leading-none mis-1 cursor-pointer',
219
+ return EditorView.updateListener.of((update: ViewUpdate) => {
220
+ if (update.selectionSet) {
221
+ debouncedHandler(update);
222
+ }
223
+ });
227
224
  };
228
225
 
229
- const createLinkRenderer =
226
+ const createRenderLink =
230
227
  (onSelectObject: (id: string) => void): RenderCallback<{ url: string }> =>
231
228
  (el, { url }) => {
232
229
  // TODO(burdon): Formalize/document internal link format.
233
- const isInternal =
234
- url.startsWith('/') ||
235
- // TODO(wittjosiah): This should probably be parsed out on paste?
236
- url.startsWith(window.location.origin);
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'));
237
235
 
238
- const options: AnchorHTMLAttributes<any> = isInternal
239
- ? {
240
- onClick: () => {
241
- const qualifiedId = url.split('/').at(-1);
242
- invariant(qualifiedId, 'Invalid link format.');
243
- onSelectObject(qualifiedId);
244
- },
245
- }
246
- : {
247
- href: url,
248
- rel: 'noreferrer',
249
- target: '_blank',
250
- };
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
+ }
251
250
 
252
- renderRoot(
253
- el,
254
- <a {...options} className={style.hover}>
255
- <Icon
256
- icon={isInternal ? 'ph--arrow-square-down--bold' : 'ph--arrow-square-out--bold'}
257
- size={4}
258
- classNames={style.icon}
259
- />
260
- </a>,
261
- );
251
+ keyboardEvent.preventDefault();
252
+ keyboardEvent.stopPropagation();
253
+ onSelectObject(qualifiedId);
254
+ });
255
+ }
256
+
257
+ el.appendChild(icon.root);
262
258
  };
263
259
 
264
260
  const renderLinkTooltip: RenderCallback<{ url: string }> = (el, { url }) => {
265
- const web = new URL(url);
266
- renderRoot(
267
- el,
268
- <a href={url} rel='noreferrer' target='_blank' className={style.hover}>
269
- {web.origin}
270
- <Icon icon='ph--arrow-square-out--bold' size={4} classNames={style.icon} />
271
- </a>,
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,
272
267
  );
273
268
  };
274
-
275
- // TODO(burdon): REMOVE.
276
- const renderRoot = <T extends Element>(root: T, node: ReactNode): T => {
277
- createRoot(root).render(<ThemeProvider tx={defaultTx}>{node}</ThemeProvider>);
278
- return root;
279
- };