@dxos/plugin-markdown 0.8.4-main.ae835ea → 0.8.4-main.bcb3aa67d6

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 (357) hide show
  1. package/dist/lib/browser/MarkdownSettings-5AD3X3II.mjs +124 -0
  2. package/dist/lib/browser/MarkdownSettings-5AD3X3II.mjs.map +7 -0
  3. package/dist/lib/browser/blueprints/index.mjs +51 -0
  4. package/dist/lib/browser/blueprints/index.mjs.map +7 -0
  5. package/dist/lib/browser/chunk-46WIDM4R.mjs +98 -0
  6. package/dist/lib/browser/chunk-46WIDM4R.mjs.map +7 -0
  7. package/dist/lib/browser/chunk-GQKARRJU.mjs +158 -0
  8. package/dist/lib/browser/chunk-GQKARRJU.mjs.map +7 -0
  9. package/dist/lib/browser/chunk-J5LGTIGS.mjs +10 -0
  10. package/dist/lib/browser/cli/index.mjs +39 -0
  11. package/dist/lib/browser/cli/index.mjs.map +7 -0
  12. package/dist/lib/browser/create-I7QWPBMS.mjs +30 -0
  13. package/dist/lib/browser/create-I7QWPBMS.mjs.map +7 -0
  14. package/dist/lib/browser/create-markdown-6QQXSF3Q.mjs +22 -0
  15. package/dist/lib/browser/create-markdown-6QQXSF3Q.mjs.map +7 -0
  16. package/dist/lib/browser/index.mjs +632 -153
  17. package/dist/lib/browser/index.mjs.map +4 -4
  18. package/dist/lib/browser/meta.json +1 -1
  19. package/dist/lib/browser/open-NSBN4NKR.mjs +21 -0
  20. package/dist/lib/browser/open-NSBN4NKR.mjs.map +7 -0
  21. package/dist/lib/browser/operations/index.mjs +14 -0
  22. package/dist/lib/browser/operations/index.mjs.map +7 -0
  23. package/dist/lib/browser/scroll-to-anchor-RA5OMQCP.mjs +49 -0
  24. package/dist/lib/browser/scroll-to-anchor-RA5OMQCP.mjs.map +7 -0
  25. package/dist/lib/browser/set-view-mode-75MBU6CB.mjs +26 -0
  26. package/dist/lib/browser/set-view-mode-75MBU6CB.mjs.map +7 -0
  27. package/dist/lib/browser/types/index.mjs +11 -5
  28. package/dist/lib/browser/update-QQJYONAC.mjs +45 -0
  29. package/dist/lib/browser/update-QQJYONAC.mjs.map +7 -0
  30. package/dist/lib/node-esm/MarkdownSettings-ODDM67XG.mjs +125 -0
  31. package/dist/lib/node-esm/MarkdownSettings-ODDM67XG.mjs.map +7 -0
  32. package/dist/lib/node-esm/blueprints/index.mjs +52 -0
  33. package/dist/lib/node-esm/blueprints/index.mjs.map +7 -0
  34. package/dist/lib/node-esm/chunk-4MSJO6IJ.mjs +99 -0
  35. package/dist/lib/node-esm/chunk-4MSJO6IJ.mjs.map +7 -0
  36. package/dist/lib/node-esm/chunk-HSLMI22Q.mjs +11 -0
  37. package/dist/lib/node-esm/chunk-QRCQ55W7.mjs +159 -0
  38. package/dist/lib/node-esm/chunk-QRCQ55W7.mjs.map +7 -0
  39. package/dist/lib/node-esm/cli/index.mjs +40 -0
  40. package/dist/lib/node-esm/cli/index.mjs.map +7 -0
  41. package/dist/lib/node-esm/create-VJ5SIKYF.mjs +31 -0
  42. package/dist/lib/node-esm/create-VJ5SIKYF.mjs.map +7 -0
  43. package/dist/lib/node-esm/create-markdown-P5KNGLZ5.mjs +23 -0
  44. package/dist/lib/node-esm/create-markdown-P5KNGLZ5.mjs.map +7 -0
  45. package/dist/lib/node-esm/index.mjs +632 -153
  46. package/dist/lib/node-esm/index.mjs.map +4 -4
  47. package/dist/lib/node-esm/meta.json +1 -1
  48. package/dist/lib/node-esm/open-U3T6IVHN.mjs +22 -0
  49. package/dist/lib/node-esm/open-U3T6IVHN.mjs.map +7 -0
  50. package/dist/lib/node-esm/operations/index.mjs +15 -0
  51. package/dist/lib/node-esm/operations/index.mjs.map +7 -0
  52. package/dist/lib/node-esm/scroll-to-anchor-CVM3LVSQ.mjs +50 -0
  53. package/dist/lib/node-esm/scroll-to-anchor-CVM3LVSQ.mjs.map +7 -0
  54. package/dist/lib/node-esm/set-view-mode-WQJBCUXY.mjs +27 -0
  55. package/dist/lib/node-esm/set-view-mode-WQJBCUXY.mjs.map +7 -0
  56. package/dist/lib/node-esm/types/index.mjs +11 -5
  57. package/dist/lib/node-esm/update-24CQM75C.mjs +46 -0
  58. package/dist/lib/node-esm/update-24CQM75C.mjs.map +7 -0
  59. package/dist/types/src/MarkdownPlugin.d.ts +2 -1
  60. package/dist/types/src/MarkdownPlugin.d.ts.map +1 -1
  61. package/dist/types/src/blueprints/index.d.ts +2 -0
  62. package/dist/types/src/blueprints/index.d.ts.map +1 -0
  63. package/dist/types/src/blueprints/markdown-blueprint.d.ts +4 -0
  64. package/dist/types/src/blueprints/markdown-blueprint.d.ts.map +1 -0
  65. package/dist/types/src/capabilities/anchor-sort.d.ts +4 -4
  66. package/dist/types/src/capabilities/anchor-sort.d.ts.map +1 -1
  67. package/dist/types/src/capabilities/app-graph-serializer.d.ts +3 -2
  68. package/dist/types/src/capabilities/app-graph-serializer.d.ts.map +1 -1
  69. package/dist/types/src/capabilities/artifact-definition.d.ts +3 -1
  70. package/dist/types/src/capabilities/artifact-definition.d.ts.map +1 -1
  71. package/dist/types/src/capabilities/blueprint-definition.d.ts +5 -4
  72. package/dist/types/src/capabilities/blueprint-definition.d.ts.map +1 -1
  73. package/dist/types/src/capabilities/index.d.ts +27 -18
  74. package/dist/types/src/capabilities/index.d.ts.map +1 -1
  75. package/dist/types/src/capabilities/node.d.ts +4 -0
  76. package/dist/types/src/capabilities/node.d.ts.map +1 -0
  77. package/dist/types/src/capabilities/operation-handler.d.ts +6 -0
  78. package/dist/types/src/capabilities/operation-handler.d.ts.map +1 -0
  79. package/dist/types/src/capabilities/react-surface.d.ts +3 -2
  80. package/dist/types/src/capabilities/react-surface.d.ts.map +1 -1
  81. package/dist/types/src/capabilities/settings.d.ts +22 -2
  82. package/dist/types/src/capabilities/settings.d.ts.map +1 -1
  83. package/dist/types/src/capabilities/state.d.ts +4 -9
  84. package/dist/types/src/capabilities/state.d.ts.map +1 -1
  85. package/dist/types/src/cli/index.d.ts +2 -0
  86. package/dist/types/src/cli/index.d.ts.map +1 -0
  87. package/dist/types/src/cli/plugin.d.ts +3 -0
  88. package/dist/types/src/cli/plugin.d.ts.map +1 -0
  89. package/dist/types/src/components/MarkdownEditor/FileUpload.d.ts +1 -1
  90. package/dist/types/src/components/MarkdownEditor/FileUpload.d.ts.map +1 -1
  91. package/dist/types/src/components/MarkdownEditor/MarkdownEditor.d.ts +19 -13
  92. package/dist/types/src/components/MarkdownEditor/MarkdownEditor.d.ts.map +1 -1
  93. package/dist/types/src/components/MarkdownEditor/MarkdownEditor.stories.d.ts +2 -2
  94. package/dist/types/src/components/MarkdownEditor/MarkdownEditor.stories.d.ts.map +1 -1
  95. package/dist/types/src/components/MarkdownEditor/MarkdownEditorContent.d.ts +20 -14
  96. package/dist/types/src/components/MarkdownEditor/MarkdownEditorContent.d.ts.map +1 -1
  97. package/dist/types/src/components/MarkdownEditor/MarkdownEditorToolbar.d.ts +10 -5
  98. package/dist/types/src/components/MarkdownEditor/MarkdownEditorToolbar.d.ts.map +1 -1
  99. package/dist/types/src/components/MarkdownSettings/MarkdownSettings.d.ts +4 -4
  100. package/dist/types/src/components/MarkdownSettings/MarkdownSettings.d.ts.map +1 -1
  101. package/dist/types/src/components/MarkdownSettings/MarkdownSettings.stories.d.ts +138 -0
  102. package/dist/types/src/components/MarkdownSettings/MarkdownSettings.stories.d.ts.map +1 -0
  103. package/dist/types/src/components/MarkdownSettings/index.d.ts +2 -1
  104. package/dist/types/src/components/MarkdownSettings/index.d.ts.map +1 -1
  105. package/dist/types/src/components/index.d.ts +3 -5
  106. package/dist/types/src/components/index.d.ts.map +1 -1
  107. package/dist/types/src/containers/MarkdownCard/MarkdownCard.d.ts +8 -0
  108. package/dist/types/src/containers/MarkdownCard/MarkdownCard.d.ts.map +1 -0
  109. package/dist/types/src/containers/MarkdownCard/MarkdownCard.stories.d.ts +9 -0
  110. package/dist/types/src/containers/MarkdownCard/MarkdownCard.stories.d.ts.map +1 -0
  111. package/dist/types/src/{components → containers}/MarkdownCard/index.d.ts +0 -1
  112. package/dist/types/src/containers/MarkdownCard/index.d.ts.map +1 -0
  113. package/dist/types/src/containers/MarkdownCard/snippet.d.ts +15 -0
  114. package/dist/types/src/containers/MarkdownCard/snippet.d.ts.map +1 -0
  115. package/dist/types/src/containers/MarkdownContainer/MarkdownContainer.d.ts +31 -0
  116. package/dist/types/src/containers/MarkdownContainer/MarkdownContainer.d.ts.map +1 -0
  117. package/dist/types/src/containers/MarkdownContainer/MarkdownContainer.stories.d.ts +99 -0
  118. package/dist/types/src/containers/MarkdownContainer/MarkdownContainer.stories.d.ts.map +1 -0
  119. package/dist/types/src/containers/MarkdownContainer/index.d.ts +3 -0
  120. package/dist/types/src/containers/MarkdownContainer/index.d.ts.map +1 -0
  121. package/dist/types/src/containers/index.d.ts +5 -0
  122. package/dist/types/src/containers/index.d.ts.map +1 -0
  123. package/dist/types/src/hooks/index.d.ts +1 -2
  124. package/dist/types/src/hooks/index.d.ts.map +1 -1
  125. package/dist/types/src/hooks/useEditorMenuOptions.d.ts +9 -0
  126. package/dist/types/src/hooks/useEditorMenuOptions.d.ts.map +1 -0
  127. package/dist/types/src/hooks/useExtensions.d.ts +10 -8
  128. package/dist/types/src/hooks/useExtensions.d.ts.map +1 -1
  129. package/dist/types/src/hooks/useLinkQuery.d.ts +3 -3
  130. package/dist/types/src/hooks/useLinkQuery.d.ts.map +1 -1
  131. package/dist/types/src/index.d.ts +2 -2
  132. package/dist/types/src/index.d.ts.map +1 -1
  133. package/dist/types/src/meta.d.ts +2 -2
  134. package/dist/types/src/meta.d.ts.map +1 -1
  135. package/dist/types/src/operations/create-markdown.d.ts +5 -0
  136. package/dist/types/src/operations/create-markdown.d.ts.map +1 -0
  137. package/dist/types/src/operations/create.d.ts +5 -0
  138. package/dist/types/src/operations/create.d.ts.map +1 -0
  139. package/dist/types/src/operations/create.test.d.ts +2 -0
  140. package/dist/types/src/operations/create.test.d.ts.map +1 -0
  141. package/dist/types/src/operations/definitions.d.ts +64 -0
  142. package/dist/types/src/operations/definitions.d.ts.map +1 -0
  143. package/dist/types/src/operations/index.d.ts +4 -0
  144. package/dist/types/src/operations/index.d.ts.map +1 -0
  145. package/dist/types/src/operations/open.d.ts +5 -0
  146. package/dist/types/src/operations/open.d.ts.map +1 -0
  147. package/dist/types/src/operations/scroll-to-anchor.d.ts +5 -0
  148. package/dist/types/src/operations/scroll-to-anchor.d.ts.map +1 -0
  149. package/dist/types/src/operations/set-view-mode.d.ts +5 -0
  150. package/dist/types/src/operations/set-view-mode.d.ts.map +1 -0
  151. package/dist/types/src/operations/update.d.ts +5 -0
  152. package/dist/types/src/operations/update.d.ts.map +1 -0
  153. package/dist/types/src/operations/update.test.d.ts +2 -0
  154. package/dist/types/src/operations/update.test.d.ts.map +1 -0
  155. package/dist/types/src/testing.d.ts +6 -0
  156. package/dist/types/src/testing.d.ts.map +1 -0
  157. package/dist/types/src/translations.d.ts +75 -34
  158. package/dist/types/src/translations.d.ts.map +1 -1
  159. package/dist/types/src/types/Markdown.d.ts +30 -31
  160. package/dist/types/src/types/Markdown.d.ts.map +1 -1
  161. package/dist/types/src/types/Settings.d.ts +16 -0
  162. package/dist/types/src/types/Settings.d.ts.map +1 -0
  163. package/dist/types/src/types/capabilities.d.ts +51 -0
  164. package/dist/types/src/types/capabilities.d.ts.map +1 -0
  165. package/dist/types/src/types/events.d.ts +5 -0
  166. package/dist/types/src/types/events.d.ts.map +1 -0
  167. package/dist/types/src/types/index.d.ts +4 -2
  168. package/dist/types/src/types/index.d.ts.map +1 -1
  169. package/dist/types/src/types/types.d.ts +2 -2
  170. package/dist/types/src/types/types.d.ts.map +1 -1
  171. package/dist/types/src/util.d.ts +7 -4
  172. package/dist/types/src/util.d.ts.map +1 -1
  173. package/dist/types/src/util.test.d.ts +2 -0
  174. package/dist/types/src/util.test.d.ts.map +1 -0
  175. package/dist/types/tsconfig.tsbuildinfo +1 -1
  176. package/package.json +119 -59
  177. package/src/MarkdownPlugin.tsx +77 -103
  178. package/src/blueprints/index.ts +5 -0
  179. package/src/blueprints/markdown-blueprint.ts +44 -0
  180. package/src/capabilities/anchor-sort.ts +29 -22
  181. package/src/capabilities/app-graph-serializer.ts +51 -41
  182. package/src/capabilities/artifact-definition.ts +82 -84
  183. package/src/capabilities/blueprint-definition.ts +9 -31
  184. package/src/capabilities/index.ts +12 -12
  185. package/src/capabilities/node.ts +11 -0
  186. package/src/capabilities/operation-handler.ts +16 -0
  187. package/src/capabilities/react-surface.tsx +108 -80
  188. package/src/capabilities/settings.ts +30 -18
  189. package/src/capabilities/state.ts +41 -25
  190. package/src/cli/index.ts +5 -0
  191. package/src/cli/plugin.ts +40 -0
  192. package/src/components/MarkdownEditor/FileUpload.tsx +2 -2
  193. package/src/components/MarkdownEditor/MarkdownEditor.stories.tsx +39 -41
  194. package/src/components/MarkdownEditor/MarkdownEditor.tsx +87 -57
  195. package/src/components/MarkdownEditor/MarkdownEditorContent.tsx +69 -34
  196. package/src/components/MarkdownEditor/MarkdownEditorToolbar.tsx +48 -53
  197. package/src/components/MarkdownSettings/MarkdownSettings.stories.tsx +40 -0
  198. package/src/components/MarkdownSettings/MarkdownSettings.tsx +116 -86
  199. package/src/components/MarkdownSettings/index.ts +3 -1
  200. package/src/components/index.ts +4 -7
  201. package/src/containers/MarkdownCard/MarkdownCard.stories.tsx +68 -0
  202. package/src/containers/MarkdownCard/MarkdownCard.tsx +57 -0
  203. package/src/{components → containers}/MarkdownCard/index.ts +0 -2
  204. package/src/containers/MarkdownCard/snippet.ts +75 -0
  205. package/src/containers/MarkdownContainer/MarkdownContainer.stories.tsx +133 -0
  206. package/src/containers/MarkdownContainer/MarkdownContainer.tsx +134 -0
  207. package/src/containers/MarkdownContainer/index.ts +6 -0
  208. package/src/containers/index.ts +10 -0
  209. package/src/hooks/index.ts +1 -2
  210. package/src/hooks/{usePopoverMenuOptions.ts → useEditorMenuOptions.ts} +20 -23
  211. package/src/hooks/useExtensions.tsx +100 -109
  212. package/src/hooks/useLinkQuery.ts +49 -23
  213. package/src/index.ts +3 -2
  214. package/src/meta.ts +3 -3
  215. package/src/operations/create-markdown.ts +21 -0
  216. package/src/operations/create.conversations.json +1 -0
  217. package/src/operations/create.test.ts +98 -0
  218. package/src/operations/create.ts +27 -0
  219. package/src/operations/definitions.ts +119 -0
  220. package/src/operations/index.ts +16 -0
  221. package/src/operations/open.ts +25 -0
  222. package/src/operations/scroll-to-anchor.ts +40 -0
  223. package/src/operations/set-view-mode.ts +25 -0
  224. package/src/operations/update.conversations.json +1 -0
  225. package/src/operations/update.test.ts +215 -0
  226. package/src/operations/update.ts +51 -0
  227. package/src/testing.ts +27 -0
  228. package/src/translations.ts +49 -34
  229. package/src/types/Markdown.ts +23 -31
  230. package/src/types/Settings.ts +28 -0
  231. package/src/types/capabilities.ts +50 -0
  232. package/src/types/events.ts +14 -0
  233. package/src/types/index.ts +5 -2
  234. package/src/types/types.ts +3 -2
  235. package/src/util.test.ts +44 -0
  236. package/src/util.tsx +80 -12
  237. package/dist/lib/browser/MarkdownCard-SLM6QZYC.mjs +0 -12
  238. package/dist/lib/browser/MarkdownContainer-UZFQC6XY.mjs +0 -15
  239. package/dist/lib/browser/anchor-sort-4XPPLMZS.mjs +0 -32
  240. package/dist/lib/browser/anchor-sort-4XPPLMZS.mjs.map +0 -7
  241. package/dist/lib/browser/app-graph-serializer-QQFV4K6P.mjs +0 -51
  242. package/dist/lib/browser/app-graph-serializer-QQFV4K6P.mjs.map +0 -7
  243. package/dist/lib/browser/blueprint-definition-BC5R3T72.mjs +0 -11
  244. package/dist/lib/browser/blueprint-definition-BC5R3T72.mjs.map +0 -7
  245. package/dist/lib/browser/chunk-2LLVTQCK.mjs +0 -51
  246. package/dist/lib/browser/chunk-2LLVTQCK.mjs.map +0 -7
  247. package/dist/lib/browser/chunk-3VILQLA4.mjs +0 -95
  248. package/dist/lib/browser/chunk-3VILQLA4.mjs.map +0 -7
  249. package/dist/lib/browser/chunk-5AYTOIUF.mjs +0 -822
  250. package/dist/lib/browser/chunk-5AYTOIUF.mjs.map +0 -7
  251. package/dist/lib/browser/chunk-A3CQYGCN.mjs +0 -56
  252. package/dist/lib/browser/chunk-A3CQYGCN.mjs.map +0 -7
  253. package/dist/lib/browser/chunk-BQTYJOFB.mjs +0 -28
  254. package/dist/lib/browser/chunk-BQTYJOFB.mjs.map +0 -7
  255. package/dist/lib/browser/chunk-GLEYXJX3.mjs +0 -22
  256. package/dist/lib/browser/chunk-GLEYXJX3.mjs.map +0 -7
  257. package/dist/lib/browser/chunk-IBCHVMZW.mjs +0 -16
  258. package/dist/lib/browser/chunk-IBCHVMZW.mjs.map +0 -7
  259. package/dist/lib/browser/chunk-JAETS5LE.mjs +0 -106
  260. package/dist/lib/browser/chunk-JAETS5LE.mjs.map +0 -7
  261. package/dist/lib/browser/chunk-UKTCPHLI.mjs +0 -79
  262. package/dist/lib/browser/chunk-UKTCPHLI.mjs.map +0 -7
  263. package/dist/lib/browser/intent-resolver-VQGMBNXZ.mjs +0 -62
  264. package/dist/lib/browser/intent-resolver-VQGMBNXZ.mjs.map +0 -7
  265. package/dist/lib/browser/react-surface-WOMJOPJE.mjs +0 -217
  266. package/dist/lib/browser/react-surface-WOMJOPJE.mjs.map +0 -7
  267. package/dist/lib/browser/settings-LBXJHVBU.mjs +0 -28
  268. package/dist/lib/browser/settings-LBXJHVBU.mjs.map +0 -7
  269. package/dist/lib/browser/state-BTUKVZHY.mjs +0 -37
  270. package/dist/lib/browser/state-BTUKVZHY.mjs.map +0 -7
  271. package/dist/lib/browser/toolkit-YPIVDB4A.mjs +0 -66
  272. package/dist/lib/browser/toolkit-YPIVDB4A.mjs.map +0 -7
  273. package/dist/lib/node-esm/MarkdownCard-MCWEFW4F.mjs +0 -13
  274. package/dist/lib/node-esm/MarkdownCard-MCWEFW4F.mjs.map +0 -7
  275. package/dist/lib/node-esm/MarkdownContainer-KAQOK7K5.mjs +0 -16
  276. package/dist/lib/node-esm/MarkdownContainer-KAQOK7K5.mjs.map +0 -7
  277. package/dist/lib/node-esm/anchor-sort-4SXYVYXT.mjs +0 -33
  278. package/dist/lib/node-esm/anchor-sort-4SXYVYXT.mjs.map +0 -7
  279. package/dist/lib/node-esm/app-graph-serializer-KBVRLQN2.mjs +0 -52
  280. package/dist/lib/node-esm/app-graph-serializer-KBVRLQN2.mjs.map +0 -7
  281. package/dist/lib/node-esm/blueprint-definition-FPNOTEYC.mjs +0 -12
  282. package/dist/lib/node-esm/blueprint-definition-FPNOTEYC.mjs.map +0 -7
  283. package/dist/lib/node-esm/chunk-2Q4WCKWT.mjs +0 -823
  284. package/dist/lib/node-esm/chunk-2Q4WCKWT.mjs.map +0 -7
  285. package/dist/lib/node-esm/chunk-DOB2MJAX.mjs +0 -107
  286. package/dist/lib/node-esm/chunk-DOB2MJAX.mjs.map +0 -7
  287. package/dist/lib/node-esm/chunk-GGKPPGWA.mjs +0 -24
  288. package/dist/lib/node-esm/chunk-GGKPPGWA.mjs.map +0 -7
  289. package/dist/lib/node-esm/chunk-GMMVSXQ6.mjs +0 -17
  290. package/dist/lib/node-esm/chunk-GMMVSXQ6.mjs.map +0 -7
  291. package/dist/lib/node-esm/chunk-JELROKGD.mjs +0 -80
  292. package/dist/lib/node-esm/chunk-JELROKGD.mjs.map +0 -7
  293. package/dist/lib/node-esm/chunk-QH4MC5BE.mjs +0 -52
  294. package/dist/lib/node-esm/chunk-QH4MC5BE.mjs.map +0 -7
  295. package/dist/lib/node-esm/chunk-SHAMSMKQ.mjs +0 -29
  296. package/dist/lib/node-esm/chunk-SHAMSMKQ.mjs.map +0 -7
  297. package/dist/lib/node-esm/chunk-SJ2QRGPM.mjs +0 -57
  298. package/dist/lib/node-esm/chunk-SJ2QRGPM.mjs.map +0 -7
  299. package/dist/lib/node-esm/chunk-YYSASY7X.mjs +0 -96
  300. package/dist/lib/node-esm/chunk-YYSASY7X.mjs.map +0 -7
  301. package/dist/lib/node-esm/intent-resolver-Q4XVI5EX.mjs +0 -63
  302. package/dist/lib/node-esm/intent-resolver-Q4XVI5EX.mjs.map +0 -7
  303. package/dist/lib/node-esm/react-surface-FAMZTAXK.mjs +0 -218
  304. package/dist/lib/node-esm/react-surface-FAMZTAXK.mjs.map +0 -7
  305. package/dist/lib/node-esm/settings-2YRA67H6.mjs +0 -29
  306. package/dist/lib/node-esm/settings-2YRA67H6.mjs.map +0 -7
  307. package/dist/lib/node-esm/state-K6EH7SRZ.mjs +0 -38
  308. package/dist/lib/node-esm/state-K6EH7SRZ.mjs.map +0 -7
  309. package/dist/lib/node-esm/toolkit-36BFLIR3.mjs +0 -67
  310. package/dist/lib/node-esm/toolkit-36BFLIR3.mjs.map +0 -7
  311. package/dist/types/src/capabilities/capabilities.d.ts +0 -12
  312. package/dist/types/src/capabilities/capabilities.d.ts.map +0 -1
  313. package/dist/types/src/capabilities/intent-resolver.d.ts +0 -4
  314. package/dist/types/src/capabilities/intent-resolver.d.ts.map +0 -1
  315. package/dist/types/src/capabilities/toolkit.d.ts +0 -20
  316. package/dist/types/src/capabilities/toolkit.d.ts.map +0 -1
  317. package/dist/types/src/components/MarkdownCard/MarkdownCard.d.ts +0 -7
  318. package/dist/types/src/components/MarkdownCard/MarkdownCard.d.ts.map +0 -1
  319. package/dist/types/src/components/MarkdownCard/MarkdownCard.stories.d.ts +0 -9
  320. package/dist/types/src/components/MarkdownCard/MarkdownCard.stories.d.ts.map +0 -1
  321. package/dist/types/src/components/MarkdownCard/index.d.ts.map +0 -1
  322. package/dist/types/src/components/MarkdownContainer.d.ts +0 -14
  323. package/dist/types/src/components/MarkdownContainer.d.ts.map +0 -1
  324. package/dist/types/src/components/MarkdownContainer.stories.d.ts +0 -58
  325. package/dist/types/src/components/MarkdownContainer.stories.d.ts.map +0 -1
  326. package/dist/types/src/components/Suggestions.stories.d.ts +0 -11
  327. package/dist/types/src/components/Suggestions.stories.d.ts.map +0 -1
  328. package/dist/types/src/events.d.ts +0 -4
  329. package/dist/types/src/events.d.ts.map +0 -1
  330. package/dist/types/src/functions/diff.d.ts +0 -6
  331. package/dist/types/src/functions/diff.d.ts.map +0 -1
  332. package/dist/types/src/functions/index.d.ts +0 -3
  333. package/dist/types/src/functions/index.d.ts.map +0 -1
  334. package/dist/types/src/functions/open.d.ts +0 -7
  335. package/dist/types/src/functions/open.d.ts.map +0 -1
  336. package/dist/types/src/hooks/usePopoverMenuOptions.d.ts +0 -9
  337. package/dist/types/src/hooks/usePopoverMenuOptions.d.ts.map +0 -1
  338. package/dist/types/src/hooks/useSelectCurrentThread.d.ts +0 -6
  339. package/dist/types/src/hooks/useSelectCurrentThread.d.ts.map +0 -1
  340. package/dist/types/src/types/MarkdownAction.d.ts +0 -34
  341. package/dist/types/src/types/MarkdownAction.d.ts.map +0 -1
  342. package/src/capabilities/capabilities.ts +0 -22
  343. package/src/capabilities/intent-resolver.ts +0 -58
  344. package/src/capabilities/toolkit.ts +0 -53
  345. package/src/components/MarkdownCard/MarkdownCard.stories.tsx +0 -76
  346. package/src/components/MarkdownCard/MarkdownCard.tsx +0 -85
  347. package/src/components/MarkdownContainer.stories.tsx +0 -137
  348. package/src/components/MarkdownContainer.tsx +0 -121
  349. package/src/components/Suggestions.stories.tsx +0 -219
  350. package/src/events.ts +0 -11
  351. package/src/functions/diff.ts +0 -37
  352. package/src/functions/index.ts +0 -6
  353. package/src/functions/open.ts +0 -32
  354. package/src/hooks/useSelectCurrentThread.tsx +0 -56
  355. package/src/types/MarkdownAction.ts +0 -29
  356. /package/dist/lib/browser/{MarkdownCard-SLM6QZYC.mjs.map → chunk-J5LGTIGS.mjs.map} +0 -0
  357. /package/dist/lib/{browser/MarkdownContainer-UZFQC6XY.mjs.map → node-esm/chunk-HSLMI22Q.mjs.map} +0 -0
@@ -0,0 +1,40 @@
1
+ //
2
+ // Copyright 2025 DXOS.org
3
+ //
4
+
5
+ import * as Effect from 'effect/Effect';
6
+
7
+ import { Plugin } from '@dxos/app-framework';
8
+ import { AppPlugin } from '@dxos/app-toolkit';
9
+ import { Operation } from '@dxos/operation';
10
+ import { type CreateObject } from '@dxos/plugin-space/types';
11
+ import { SpaceOperation } from '@dxos/plugin-space/operations';
12
+ import { Text } from '@dxos/schema';
13
+
14
+ import { OperationHandler } from '#capabilities';
15
+
16
+ import { meta } from '#meta';
17
+ import { Markdown } from '#types';
18
+
19
+ export const MarkdownPlugin = Plugin.define(meta).pipe(
20
+ AppPlugin.addMetadataModule({
21
+ metadata: {
22
+ id: Markdown.Document.typename,
23
+ metadata: {
24
+ createObject: ((props, options) =>
25
+ Effect.gen(function* () {
26
+ const object = Markdown.make(props);
27
+ return yield* Operation.invoke(SpaceOperation.AddObject, {
28
+ object,
29
+ target: options.target,
30
+ hidden: true,
31
+ targetNodeId: options.targetNodeId,
32
+ });
33
+ })) satisfies CreateObject,
34
+ },
35
+ },
36
+ }),
37
+ AppPlugin.addOperationHandlerModule({ activate: OperationHandler }),
38
+ AppPlugin.addSchemaModule({ schema: [Markdown.Document, Text.Text] }),
39
+ Plugin.make,
40
+ );
@@ -7,8 +7,8 @@ import React, { forwardRef, useEffect, useImperativeHandle } from 'react';
7
7
  import { createPortal } from 'react-dom';
8
8
  import { useDropzone } from 'react-dropzone';
9
9
 
10
- import { type FileInfo } from '@dxos/app-framework';
11
- import { addLink } from '@dxos/react-ui-editor';
10
+ import { type FileInfo } from '@dxos/app-toolkit';
11
+ import { addLink } from '@dxos/ui-editor';
12
12
 
13
13
  export const IMAGE_FILES = ['.jpg', '.jpeg', '.png', '.gif'];
14
14
 
@@ -3,73 +3,71 @@
3
3
  //
4
4
 
5
5
  import { type Meta, type StoryObj } from '@storybook/react-vite';
6
+ import * as Effect from 'effect/Effect';
6
7
  import React from 'react';
7
8
 
8
- import { IntentPlugin } from '@dxos/app-framework';
9
9
  import { withPluginManager } from '@dxos/app-framework/testing';
10
- import { Filter } from '@dxos/echo';
11
- import { AttentionPlugin } from '@dxos/plugin-attention';
10
+ import { Filter, Obj } from '@dxos/echo';
12
11
  import { ClientPlugin } from '@dxos/plugin-client';
13
- import { fullyQualifiedId, useQuery, useSpace } from '@dxos/react-client/echo';
14
- import { withLayout, withTheme } from '@dxos/react-ui/testing';
15
- import { useAttentionAttributes } from '@dxos/react-ui-attention';
12
+ import { initializeIdentity } from '@dxos/plugin-client/testing';
13
+ import { corePlugins } from '@dxos/plugin-testing';
14
+ import { useQuery, useSpace } from '@dxos/react-client/echo';
15
+ import { Panel } from '@dxos/react-ui';
16
+ import { Loading, withLayout } from '@dxos/react-ui/testing';
17
+ import { AttendableContainer } from '@dxos/react-ui-attention';
16
18
  import { translations as editorTranslations } from '@dxos/react-ui-editor';
17
- import { StackItem } from '@dxos/react-ui-stack';
19
+ import { Text } from '@dxos/schema';
18
20
 
19
21
  import { translations } from '../../translations';
20
- import { Markdown } from '../../types';
22
+ import { Markdown } from '#types';
21
23
 
22
24
  import { MarkdownEditor, type MarkdownEditorRootProps } from './MarkdownEditor';
23
25
 
24
- const content = Array.from({ length: 100 }, (_, i) => `Line ${i + 1}`).join('\n');
26
+ type DefaultStoryProps = Omit<MarkdownEditorRootProps, 'id' | 'extensions'>;
25
27
 
26
- type StoryProps = Omit<MarkdownEditorRootProps, 'id' | 'extensions'>;
27
-
28
- const DefaultStory = (props: StoryProps) => {
28
+ const DefaultStory = (props: DefaultStoryProps) => {
29
29
  const space = useSpace();
30
30
  const [doc] = useQuery(space?.db, Filter.type(Markdown.Document));
31
- const id = doc && fullyQualifiedId(doc);
32
- const attentionAttrs = useAttentionAttributes(id);
33
-
31
+ const id = doc && Obj.getDXN(doc).toString();
34
32
  if (!id) {
35
- return null;
33
+ return <Loading data={{ id }} />;
36
34
  }
37
35
 
38
- // TODO(burdon): Toolbar attention isn't working in this story.
39
36
  return (
40
- <div className='contents' {...attentionAttrs}>
41
- <StackItem.Content toolbar>
42
- <MarkdownEditor.Root id={id} object={doc} {...props}>
43
- <MarkdownEditor.Toolbar id={id} />
44
- <MarkdownEditor.Content />
45
- </MarkdownEditor.Root>
46
- </StackItem.Content>
47
- </div>
37
+ <AttendableContainer id={id} tabIndex={0} classNames='dx-container'>
38
+ <MarkdownEditor.Root id={id} object={doc} {...props}>
39
+ <Panel.Root>
40
+ <Panel.Toolbar asChild>
41
+ <MarkdownEditor.Toolbar />
42
+ </Panel.Toolbar>
43
+ <Panel.Content asChild>
44
+ <MarkdownEditor.Content />
45
+ </Panel.Content>
46
+ </Panel.Root>
47
+ </MarkdownEditor.Root>
48
+ </AttendableContainer>
48
49
  );
49
50
  };
50
51
 
51
52
  const meta: Meta<typeof DefaultStory> = {
52
- title: 'plugins/plugin-markdown/MarkdownEditor',
53
- component: DefaultStory,
54
- render: DefaultStory as any,
53
+ title: 'plugins/plugin-markdown/components/MarkdownEditor',
54
+ render: DefaultStory,
55
55
  decorators: [
56
- withTheme,
57
- withLayout({ container: 'column' }),
58
- // TODO(burdon): Create story without client.
56
+ withLayout({ layout: 'column' }),
59
57
  withPluginManager({
60
58
  plugins: [
59
+ ...corePlugins(),
60
+ // TODO(burdon): Try to write story without ClientPlugin.
61
61
  ClientPlugin({
62
- types: [Markdown.Document],
63
- onClientInitialized: async ({ client }) => {
64
- await client.halo.createIdentity();
65
- await client.spaces.waitUntilReady();
66
- const space = client.spaces.default;
67
- await space.waitUntilReady();
68
- space.db.add(Markdown.makeDocument({ content }));
69
- },
62
+ types: [Markdown.Document, Text.Text],
63
+ onClientInitialized: ({ client }) =>
64
+ Effect.gen(function* () {
65
+ const { personalSpace } = yield* initializeIdentity(client);
66
+ personalSpace.db.add(
67
+ Markdown.make({ content: Array.from({ length: 100 }, (_, i) => `Line ${i + 1}`).join('\n') }),
68
+ );
69
+ }),
70
70
  }),
71
- IntentPlugin(),
72
- AttentionPlugin(),
73
71
  ],
74
72
  }),
75
73
  ],
@@ -4,32 +4,34 @@
4
4
 
5
5
  import { type Extension } from '@codemirror/state';
6
6
  import { type EditorView } from '@codemirror/view';
7
+ import { type Atom } from '@effect-atom/atom-react';
7
8
  import { createContext } from '@radix-ui/react-context';
8
9
  import React, { type PropsWithChildren, useMemo, useState } from 'react';
9
10
  import { createPortal } from 'react-dom';
10
11
 
11
- import { Surface } from '@dxos/app-framework';
12
+ import { Surface } from '@dxos/app-framework/ui';
13
+ import { Obj } from '@dxos/echo';
12
14
  import { DXN } from '@dxos/keys';
13
- import { type Live } from '@dxos/live-object';
14
15
  import { useClient } from '@dxos/react-client';
16
+ import { type ThemedClassName } from '@dxos/react-ui';
15
17
  import {
18
+ EditorMenuProvider,
16
19
  type EditorToolbarState,
17
- PopoverMenuProvider,
18
- type PreviewBlock,
19
- type PreviewOptions,
20
- type UsePopoverMenu,
21
- useEditorToolbarState,
22
- usePopoverMenu,
20
+ type UseEditorMenu,
21
+ useEditorMenu,
22
+ useEditorToolbar,
23
23
  } from '@dxos/react-ui-editor';
24
+ import { type PreviewBlock, type PreviewOptions } from '@dxos/ui-editor';
25
+ import { composable, composableProps } from '@dxos/ui-theme';
24
26
  import { isNonNullable } from '@dxos/util';
25
27
 
26
28
  import {
27
29
  type DocumentType,
28
30
  type ExtensionsOptions,
29
- type UsePopoverMenuOptionsProps,
31
+ type UseEditorMenuOptionsProps,
32
+ useEditorMenuOptions,
30
33
  useExtensions,
31
- usePopoverMenuOptions,
32
- } from '../../hooks';
34
+ } from '#hooks';
33
35
 
34
36
  import {
35
37
  MarkdownEditorContent as NaturalMarkdownEditorContent,
@@ -46,13 +48,14 @@ import {
46
48
 
47
49
  type MarkdownEditorContextValue = {
48
50
  id: string;
51
+ attendableId?: string;
49
52
  setEditorView: (view: EditorView) => void;
50
53
  extensions: Extension[];
51
54
  previewBlocks: PreviewBlock[];
52
- toolbarState: Live<EditorToolbarState>;
53
- popoverMenu: Omit<UsePopoverMenu, 'extension'>;
54
- } & (Pick<ExtensionsOptions, 'viewMode'> &
55
- Pick<NaturalMarkdownToolbarProps, 'editorView' | 'onFileUpload' | 'onViewModeChange'>);
55
+ toolbarState: Atom.Writable<EditorToolbarState>;
56
+ popoverMenu: Omit<UseEditorMenu, 'extension'>;
57
+ } & (Pick<ExtensionsOptions, 'compact' | 'viewMode'> &
58
+ Pick<NaturalMarkdownToolbarProps, 'editorView' | 'onAction' | 'onFileUpload' | 'onViewModeChange'>);
56
59
 
57
60
  const [MarkdownEditorContextProvider, useMarkdownEditorContext] =
58
61
  createContext<MarkdownEditorContextValue>('MarkdownEditor.Context');
@@ -65,22 +68,28 @@ type MarkdownEditorRootProps = PropsWithChildren<
65
68
  {
66
69
  object?: DocumentType;
67
70
  extensions?: Extension[];
68
- } & Pick<MarkdownEditorContextValue, 'id' | 'onFileUpload' | 'onViewModeChange' | 'viewMode'> &
69
- Pick<UsePopoverMenuOptionsProps, 'slashCommandGroups' | 'onLinkQuery'> &
70
- Pick<ExtensionsOptions, 'editorStateStore' | 'selectionManager' | 'settings'>
71
+ } & Pick<
72
+ MarkdownEditorContextValue,
73
+ 'id' | 'attendableId' | 'viewMode' | 'compact' | 'onAction' | 'onFileUpload' | 'onViewModeChange'
74
+ > &
75
+ Pick<UseEditorMenuOptionsProps, 'slashCommandGroups' | 'onLinkQuery'> &
76
+ Pick<ExtensionsOptions, 'editorStateStore' | 'selectionManager' | 'settings' | 'onSelectObject'>
71
77
  >;
72
78
 
73
79
  const MarkdownEditorRoot = ({
74
80
  children,
75
81
  id,
82
+ attendableId,
76
83
  object,
77
- editorStateStore,
78
- selectionManager,
79
84
  settings,
85
+ compact,
80
86
  viewMode,
81
- extensions: extensionsParam,
87
+ selectionManager,
88
+ editorStateStore,
89
+ extensions: extensionsProp,
82
90
  slashCommandGroups,
83
91
  onLinkQuery,
92
+ onSelectObject,
84
93
  ...props
85
94
  }: MarkdownEditorRootProps) => {
86
95
  const [editorView, setEditorView] = useState<EditorView>();
@@ -89,46 +98,47 @@ const MarkdownEditorRoot = ({
89
98
  const [previewBlocks, setPreviewBlocks] = useState<PreviewBlock[]>([]);
90
99
  const previewOptions = useMemo<PreviewOptions>(
91
100
  () => ({
101
+ db: Obj.isObject(object) ? Obj.getDatabase(object) : undefined,
92
102
  addBlockContainer: (block) => {
93
103
  setPreviewBlocks((prev) => [...prev, block]);
94
104
  },
95
105
  removeBlockContainer: ({ link }) => {
96
- setPreviewBlocks((prev) => prev.filter(({ link: prevLink }) => prevLink.ref !== link.ref));
106
+ setPreviewBlocks((prev) => prev.filter(({ link: prevLink }) => prevLink.dxn !== link.dxn));
97
107
  },
98
108
  }),
99
- [],
109
+ [object],
100
110
  );
101
111
 
102
112
  // Toolbar state.
103
- const toolbarState = useEditorToolbarState({ viewMode });
113
+ const toolbarState = useEditorToolbar({ viewMode });
104
114
 
105
115
  // Context menu.
106
- const menuOptions = usePopoverMenuOptions({
107
- editorView,
108
- slashCommandGroups,
109
- onLinkQuery,
110
- });
111
- const { extension: menuExtension, ...menuProps } = usePopoverMenu(menuOptions);
116
+ const menuOptions = useEditorMenuOptions({ editorView, slashCommandGroups, onLinkQuery });
117
+ const { extension: menuExtension, ...menuProps } = useEditorMenu(menuOptions);
112
118
 
113
119
  // Extensions.
114
120
  const coreExtensions = useExtensions({
115
121
  id,
116
122
  object,
123
+ compact,
124
+ viewMode,
125
+ selectionManager,
117
126
  editorStateStore,
118
127
  previewOptions,
119
- selectionManager,
120
128
  settings,
121
- viewMode,
129
+ onSelectObject,
122
130
  });
123
131
 
124
132
  const extensions = useMemo(
125
- () => [coreExtensions, menuExtension, extensionsParam].filter(isNonNullable),
126
- [coreExtensions, menuExtension, extensionsParam],
133
+ () => [coreExtensions, menuExtension, extensionsProp].filter(isNonNullable),
134
+ [coreExtensions, menuExtension, extensionsProp],
127
135
  );
128
136
 
129
137
  return (
130
138
  <MarkdownEditorContextProvider
131
139
  id={id}
140
+ attendableId={attendableId}
141
+ compact={compact}
132
142
  editorView={editorView}
133
143
  setEditorView={setEditorView}
134
144
  extensions={extensions}
@@ -149,79 +159,99 @@ MarkdownEditorRoot.displayName = 'MarkdownEditor.Root';
149
159
  // MarkdownEditor.Main
150
160
  //
151
161
 
162
+ const MARKDOWN_EDITOR_CONTENT_NAME = 'MarkdownEditor.Content';
163
+
152
164
  type MarkdownEditorContentProps = Omit<NaturalMarkdownEditorContentProps, 'id' | 'extensions' | 'toolbarState'>;
153
165
 
154
- const MarkdownEditorContent = (props: MarkdownEditorContentProps) => {
166
+ const MarkdownEditorContent = composable<HTMLDivElement, MarkdownEditorContentProps>(({ ...props }, _forwardedRef) => {
155
167
  const {
156
168
  id,
157
- extensions,
169
+ attendableId,
170
+ compact,
158
171
  editorView,
159
172
  setEditorView,
160
- toolbarState,
161
173
  viewMode,
174
+ toolbarState,
175
+ extensions,
162
176
  popoverMenu: { groupsRef, ...menuProps },
163
- } = useMarkdownEditorContext(MarkdownEditorContent.displayName);
177
+ } = useMarkdownEditorContext(MARKDOWN_EDITOR_CONTENT_NAME);
164
178
 
165
179
  return (
166
- <PopoverMenuProvider view={editorView} groups={groupsRef.current} {...menuProps}>
180
+ <EditorMenuProvider view={editorView} groups={groupsRef.current} {...menuProps}>
167
181
  <NaturalMarkdownEditorContent
168
- {...props}
182
+ {...composableProps(props)}
169
183
  id={id}
170
- extensions={extensions}
171
- toolbarState={toolbarState}
184
+ attendableId={attendableId}
185
+ compact={compact}
172
186
  viewMode={viewMode}
187
+ toolbarState={toolbarState}
188
+ extensions={extensions}
173
189
  ref={setEditorView}
174
190
  />
175
- </PopoverMenuProvider>
191
+ </EditorMenuProvider>
176
192
  );
177
- };
193
+ });
178
194
 
179
- MarkdownEditorContent.displayName = 'MarkdownEditor.Content';
195
+ MarkdownEditorContent.displayName = MARKDOWN_EDITOR_CONTENT_NAME;
180
196
 
181
197
  //
182
198
  // MarkdownEditor.Toolbar
183
199
  //
184
200
 
185
- type MarkdownEditorToolbarProps = Omit<
186
- NaturalMarkdownToolbarProps,
187
- 'state' | 'editorView' | 'onFileUpload' | 'onViewModeChange'
201
+ const MARKDOWN_EDITOR_TOOLBAR_NAME = 'MarkdownEditor.Toolbar';
202
+
203
+ type MarkdownEditorToolbarProps = ThemedClassName<
204
+ Omit<NaturalMarkdownToolbarProps, 'state' | 'editorView' | 'onAction' | 'onFileUpload' | 'onViewModeChange' | 'id'>
188
205
  >;
189
206
 
190
207
  const MarkdownEditorToolbar = (props: MarkdownEditorToolbarProps) => {
191
- const { toolbarState, ...rootProps } = useMarkdownEditorContext(MarkdownEditorToolbar.displayName);
208
+ const { id, attendableId, editorView, toolbarState, onAction, onFileUpload, onViewModeChange } =
209
+ useMarkdownEditorContext(MARKDOWN_EDITOR_TOOLBAR_NAME);
192
210
 
193
- return <NaturalMarkdownToolbar {...props} {...rootProps} state={toolbarState} />;
211
+ return (
212
+ <NaturalMarkdownToolbar
213
+ {...props}
214
+ id={attendableId ?? id}
215
+ editorView={editorView}
216
+ state={toolbarState}
217
+ onAction={onAction}
218
+ onFileUpload={onFileUpload}
219
+ onViewModeChange={onViewModeChange}
220
+ />
221
+ );
194
222
  };
195
223
 
196
- MarkdownEditorToolbar.displayName = 'MarkdownEditor.Toolbar';
224
+ MarkdownEditorToolbar.displayName = MARKDOWN_EDITOR_TOOLBAR_NAME;
197
225
 
198
226
  //
199
227
  // MarkdownEditor.Blocks (embedded objects)
200
228
  //
201
229
 
230
+ const MARKDOWN_EDITOR_BLOCKS_NAME = 'MarkdownEditor.Blocks';
231
+
202
232
  type MarkdownEditorBlocksProps = {};
203
233
 
204
234
  const MarkdownEditorBlocks = (_props: MarkdownEditorBlocksProps) => {
205
- const { previewBlocks } = useMarkdownEditorContext(MarkdownEditorBlocks.displayName);
235
+ const { previewBlocks } = useMarkdownEditorContext(MARKDOWN_EDITOR_BLOCKS_NAME);
206
236
 
207
237
  return (
208
238
  <>
209
239
  {previewBlocks.map(({ link, el }) => (
210
- <PreviewBlock key={link.ref} link={link} el={el} />
240
+ <PreviewBlock key={link.dxn} link={link} el={el} />
211
241
  ))}
212
242
  </>
213
243
  );
214
244
  };
215
245
 
216
- MarkdownEditorBlocks.displayName = 'MarkdownEditor.Blocks';
246
+ MarkdownEditorBlocks.displayName = MARKDOWN_EDITOR_BLOCKS_NAME;
217
247
 
218
248
  const PreviewBlock = ({ el, link }: PreviewBlock) => {
219
249
  const client = useClient();
220
- const dxn = DXN.parse(link.ref);
221
- const subject = client.graph.ref(dxn).target;
250
+ const dxn = DXN.parse(link.dxn);
251
+ const subject = client.graph.makeRef(dxn).target;
222
252
  const data = useMemo(() => ({ subject }), [subject]);
223
253
 
224
- return createPortal(<Surface role='card--transclusion' data={data} limit={1} />, el);
254
+ return createPortal(<Surface.Surface role='card--content' data={data} limit={1} />, el);
225
255
  };
226
256
 
227
257
  //
@@ -3,56 +3,86 @@
3
3
  //
4
4
 
5
5
  import { type EditorView } from '@codemirror/view';
6
- import React, { forwardRef, useEffect, useImperativeHandle, useMemo } from 'react';
6
+ import { type Atom, RegistryContext } from '@effect-atom/atom-react';
7
+ import React, { forwardRef, useCallback, useContext, useEffect, useImperativeHandle, useMemo } from 'react';
7
8
 
8
- import { type Live } from '@dxos/live-object';
9
- import { useDynamicRef, useThemeContext, useTranslation } from '@dxos/react-ui';
9
+ import { useCapabilities } from '@dxos/app-framework/ui';
10
+ import { type ThemedClassName, useThemeContext, useTranslation } from '@dxos/react-ui';
11
+ import {
12
+ type EditorMenuGroup,
13
+ type EditorToolbarState,
14
+ type UseTextEditorProps,
15
+ useTextEditor,
16
+ } from '@dxos/react-ui-editor';
10
17
  import {
11
18
  type EditorSelectionState,
12
19
  type EditorStateStore,
13
- type EditorToolbarState,
14
20
  type EditorViewMode,
15
- type PopoverMenuGroup,
16
- type UseTextEditorProps,
21
+ type ThemeExtensionsOptions,
22
+ compactSlots,
17
23
  createBasicExtensions,
18
24
  createMarkdownExtensions,
19
25
  createThemeExtensions,
20
26
  dropFile,
21
- editorGutter,
22
- editorSlots,
27
+ documentSlots,
23
28
  formattingListener,
24
29
  processEditorPayload,
25
- stackItemContentEditorClassNames,
26
- useTextEditor,
27
- } from '@dxos/react-ui-editor';
30
+ editorClassNames,
31
+ } from '@dxos/ui-editor';
32
+ import { mx } from '@dxos/ui-theme';
28
33
  import { isTruthy } from '@dxos/util';
29
34
 
30
- import { useSelectCurrentThread } from '../../hooks';
31
- import { meta } from '../../meta';
35
+ import { meta } from '#meta';
36
+ import { MarkdownCapabilities } from '#types';
32
37
 
33
38
  import { type MarkdownEditorToolbarProps } from './MarkdownEditorToolbar';
34
39
 
35
- export type MarkdownEditorContentProps = {
40
+ export type MarkdownEditorContentProps = ThemedClassName<{
36
41
  id: string;
42
+ attendableId?: string;
37
43
  role?: string;
44
+ compact?: boolean;
38
45
  viewMode?: EditorViewMode;
39
- scrollPastEnd?: boolean;
40
- slashCommandGroups?: PopoverMenuGroup[];
46
+ slashCommandGroups?: EditorMenuGroup[];
41
47
  editorStateStore?: EditorStateStore;
42
- toolbarState?: Live<EditorToolbarState>;
43
- onLinkQuery?: (query?: string) => Promise<PopoverMenuGroup[]>;
44
- } & (Pick<UseTextEditorProps, 'initialValue' | 'extensions'> & Pick<MarkdownEditorToolbarProps, 'onFileUpload'>);
48
+ toolbarState?: Atom.Writable<EditorToolbarState>;
49
+ onLinkQuery?: (query?: string) => Promise<EditorMenuGroup[]>;
50
+ }> &
51
+ Pick<UseTextEditorProps, 'initialValue' | 'extensions'> &
52
+ Pick<MarkdownEditorToolbarProps, 'onFileUpload'> &
53
+ Pick<ThemeExtensionsOptions, 'slots'>;
45
54
 
46
55
  export const MarkdownEditorContent = forwardRef<EditorView | null, MarkdownEditorContentProps>(
47
56
  (
48
- { id, role, initialValue, editorStateStore, toolbarState, extensions, viewMode, scrollPastEnd, onFileUpload },
57
+ {
58
+ classNames,
59
+ id,
60
+ attendableId,
61
+ role,
62
+ compact,
63
+ viewMode,
64
+ initialValue,
65
+ editorStateStore,
66
+ toolbarState,
67
+ extensions,
68
+ slots,
69
+ onFileUpload,
70
+ },
49
71
  forwardedRef,
50
72
  ) => {
51
73
  const { t } = useTranslation(meta.id);
52
74
  const { themeMode } = useThemeContext();
75
+ const registry = useContext(RegistryContext);
53
76
 
54
- // TODO(burdon): Toolbar state is not reactive.
55
- const toolbarStateRef = useDynamicRef(toolbarState);
77
+ // Callback to update toolbar state atom.
78
+ const updateToolbarState = useCallback(
79
+ (formatting: EditorToolbarState) => {
80
+ if (toolbarState) {
81
+ registry.set(toolbarState, { ...registry.get(toolbarState), ...formatting });
82
+ }
83
+ },
84
+ [registry, toolbarState],
85
+ );
56
86
 
57
87
  // Restore last selection and scroll point.
58
88
  const { scrollTo, selection } = useMemo<EditorSelectionState>(() => editorStateStore?.getState(id) ?? {}, [id]);
@@ -67,26 +97,23 @@ export const MarkdownEditorContent = forwardRef<EditorView | null, MarkdownEdito
67
97
  id,
68
98
  scrollTo,
69
99
  selection,
70
- // TODO(wittjosiah): Autofocus based on layout is racy.
71
- // autoFocus: layoutPlugin?.provides.layout ? layoutPlugin?.provides.layout.scrollIntoView === id : true,
72
- moveToEndOfLine: true,
100
+ selectionEnd: true,
73
101
  }),
74
102
  initialValue,
75
103
  extensions: [
76
104
  createBasicExtensions({
77
105
  readOnly: viewMode === 'readonly',
78
- placeholder: t('editor placeholder'),
79
- scrollPastEnd: scrollPastEnd && role !== 'section',
106
+ placeholder: t('editor.placeholder'),
107
+ scrollPastEnd: !compact,
80
108
  search: true,
81
109
  }),
82
110
  createThemeExtensions({
83
111
  themeMode,
84
- slots: editorSlots,
112
+ slots: slots ?? (compact ? compactSlots : documentSlots),
85
113
  syntaxHighlighting: true,
86
114
  }),
87
115
  createMarkdownExtensions(),
88
- formattingListener(() => toolbarStateRef.current),
89
- editorGutter,
116
+ toolbarState && formattingListener(updateToolbarState),
90
117
  role !== 'section' &&
91
118
  onFileUpload &&
92
119
  dropFile({
@@ -106,17 +133,25 @@ export const MarkdownEditorContent = forwardRef<EditorView | null, MarkdownEdito
106
133
  );
107
134
 
108
135
  useImperativeHandle<EditorView | null, EditorView | null>(forwardedRef, () => editorView, [editorView]);
109
- useSelectCurrentThread(editorView, id);
136
+
137
+ const [editorViewRegistry] = useCapabilities(MarkdownCapabilities.EditorViews);
138
+ useEffect(() => {
139
+ if (editorView && editorViewRegistry) {
140
+ editorViewRegistry.register(attendableId ?? id, editorView, id);
141
+ return () => editorViewRegistry.unregister(attendableId ?? id);
142
+ }
143
+ }, [editorView, editorViewRegistry, attendableId, id]);
144
+
110
145
  useTest(editorView);
111
146
 
112
147
  return (
113
148
  <div
149
+ {...focusAttributes}
150
+ className={mx(editorClassNames(role), classNames)}
114
151
  role='none'
115
- ref={parentRef}
116
152
  data-testid='composer.markdownRoot'
117
- className={stackItemContentEditorClassNames(role)}
118
153
  data-popover-collision-boundary={true}
119
- {...focusAttributes}
154
+ ref={parentRef}
120
155
  />
121
156
  );
122
157
  },