@dxos/plugin-markdown 0.8.4-main.9735255 → 0.8.4-main.9be5663bfe

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 (367) hide show
  1. package/dist/lib/browser/MarkdownSettings-YZFNSJJY.mjs +121 -0
  2. package/dist/lib/browser/MarkdownSettings-YZFNSJJY.mjs.map +7 -0
  3. package/dist/lib/browser/blueprints/index.mjs +47 -4
  4. package/dist/lib/browser/blueprints/index.mjs.map +4 -4
  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-J5LGTIGS.mjs +10 -0
  8. package/dist/lib/browser/chunk-XKUKZNUS.mjs +158 -0
  9. package/dist/lib/browser/chunk-XKUKZNUS.mjs.map +7 -0
  10. package/dist/lib/browser/cli/index.mjs +26 -19
  11. package/dist/lib/browser/cli/index.mjs.map +3 -3
  12. package/dist/lib/browser/create-HSXPXCC5.mjs +30 -0
  13. package/dist/lib/browser/create-HSXPXCC5.mjs.map +7 -0
  14. package/dist/lib/browser/create-markdown-WB7DH3UF.mjs +22 -0
  15. package/dist/lib/browser/create-markdown-WB7DH3UF.mjs.map +7 -0
  16. package/dist/lib/browser/index.mjs +606 -85
  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-N6PAX6DY.mjs +21 -0
  20. package/dist/lib/browser/open-N6PAX6DY.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-5M4F24AB.mjs +49 -0
  24. package/dist/lib/browser/scroll-to-anchor-5M4F24AB.mjs.map +7 -0
  25. package/dist/lib/browser/set-view-mode-NBNF2I5W.mjs +26 -0
  26. package/dist/lib/browser/set-view-mode-NBNF2I5W.mjs.map +7 -0
  27. package/dist/lib/browser/types/index.mjs +6 -7
  28. package/dist/lib/browser/update-5QIRVGTL.mjs +45 -0
  29. package/dist/lib/browser/update-5QIRVGTL.mjs.map +7 -0
  30. package/dist/lib/node-esm/MarkdownSettings-X6SDS35F.mjs +122 -0
  31. package/dist/lib/node-esm/MarkdownSettings-X6SDS35F.mjs.map +7 -0
  32. package/dist/lib/node-esm/blueprints/index.mjs +47 -4
  33. package/dist/lib/node-esm/blueprints/index.mjs.map +4 -4
  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-E4BQCEXF.mjs +159 -0
  37. package/dist/lib/node-esm/chunk-E4BQCEXF.mjs.map +7 -0
  38. package/dist/lib/node-esm/chunk-HSLMI22Q.mjs +11 -0
  39. package/dist/lib/node-esm/cli/index.mjs +26 -19
  40. package/dist/lib/node-esm/cli/index.mjs.map +3 -3
  41. package/dist/lib/node-esm/create-6Z2KYISY.mjs +31 -0
  42. package/dist/lib/node-esm/create-6Z2KYISY.mjs.map +7 -0
  43. package/dist/lib/node-esm/create-markdown-JWQZICKY.mjs +23 -0
  44. package/dist/lib/node-esm/create-markdown-JWQZICKY.mjs.map +7 -0
  45. package/dist/lib/node-esm/index.mjs +606 -85
  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-DSNFRSNZ.mjs +22 -0
  49. package/dist/lib/node-esm/open-DSNFRSNZ.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-D6SHGU2R.mjs +50 -0
  53. package/dist/lib/node-esm/scroll-to-anchor-D6SHGU2R.mjs.map +7 -0
  54. package/dist/lib/node-esm/set-view-mode-REYB4L7J.mjs +27 -0
  55. package/dist/lib/node-esm/set-view-mode-REYB4L7J.mjs.map +7 -0
  56. package/dist/lib/node-esm/types/index.mjs +6 -7
  57. package/dist/lib/node-esm/update-YMQAIKOF.mjs +46 -0
  58. package/dist/lib/node-esm/update-YMQAIKOF.mjs.map +7 -0
  59. package/dist/types/src/MarkdownPlugin.d.ts.map +1 -1
  60. package/dist/types/src/blueprints/index.d.ts +1 -1
  61. package/dist/types/src/blueprints/index.d.ts.map +1 -1
  62. package/dist/types/src/blueprints/markdown-blueprint.d.ts +3 -20
  63. package/dist/types/src/blueprints/markdown-blueprint.d.ts.map +1 -1
  64. package/dist/types/src/capabilities/anchor-sort.d.ts +6 -0
  65. package/dist/types/src/capabilities/anchor-sort.d.ts.map +1 -0
  66. package/dist/types/src/capabilities/app-graph-serializer.d.ts +5 -0
  67. package/dist/types/src/capabilities/app-graph-serializer.d.ts.map +1 -0
  68. package/dist/types/src/capabilities/artifact-definition.d.ts +5 -0
  69. package/dist/types/src/capabilities/artifact-definition.d.ts.map +1 -0
  70. package/dist/types/src/capabilities/blueprint-definition.d.ts +6 -0
  71. package/dist/types/src/capabilities/blueprint-definition.d.ts.map +1 -0
  72. package/dist/types/src/capabilities/index.d.ts +27 -7
  73. package/dist/types/src/capabilities/index.d.ts.map +1 -1
  74. package/dist/types/src/capabilities/node.d.ts +4 -0
  75. package/dist/types/src/capabilities/node.d.ts.map +1 -0
  76. package/dist/types/src/capabilities/operation-handler.d.ts +6 -0
  77. package/dist/types/src/capabilities/operation-handler.d.ts.map +1 -0
  78. package/dist/types/src/capabilities/react-surface.d.ts +5 -0
  79. package/dist/types/src/capabilities/react-surface.d.ts.map +1 -0
  80. package/dist/types/src/capabilities/settings.d.ts +24 -0
  81. package/dist/types/src/capabilities/settings.d.ts.map +1 -0
  82. package/dist/types/src/capabilities/state.d.ts +6 -0
  83. package/dist/types/src/capabilities/state.d.ts.map +1 -0
  84. package/dist/types/src/cli/plugin.d.ts.map +1 -1
  85. package/dist/types/src/components/MarkdownEditor/FileUpload.d.ts +2 -2
  86. package/dist/types/src/components/MarkdownEditor/FileUpload.d.ts.map +1 -1
  87. package/dist/types/src/components/MarkdownEditor/MarkdownEditor.d.ts +25 -22
  88. package/dist/types/src/components/MarkdownEditor/MarkdownEditor.d.ts.map +1 -1
  89. package/dist/types/src/components/MarkdownEditor/MarkdownEditor.stories.d.ts +3 -3
  90. package/dist/types/src/components/MarkdownEditor/MarkdownEditor.stories.d.ts.map +1 -1
  91. package/dist/types/src/components/MarkdownEditor/MarkdownEditorContent.d.ts +4 -2
  92. package/dist/types/src/components/MarkdownEditor/MarkdownEditorContent.d.ts.map +1 -1
  93. package/dist/types/src/components/MarkdownEditor/MarkdownEditorToolbar.d.ts +7 -6
  94. package/dist/types/src/components/MarkdownEditor/MarkdownEditorToolbar.d.ts.map +1 -1
  95. package/dist/types/src/components/MarkdownSettings/MarkdownSettings.d.ts +4 -6
  96. package/dist/types/src/components/MarkdownSettings/MarkdownSettings.d.ts.map +1 -1
  97. package/dist/types/src/components/MarkdownSettings/MarkdownSettings.stories.d.ts +138 -0
  98. package/dist/types/src/components/MarkdownSettings/MarkdownSettings.stories.d.ts.map +1 -0
  99. package/dist/types/src/components/MarkdownSettings/index.d.ts +1 -1
  100. package/dist/types/src/components/MarkdownSettings/index.d.ts.map +1 -1
  101. package/dist/types/src/components/index.d.ts +3 -8
  102. package/dist/types/src/components/index.d.ts.map +1 -1
  103. package/dist/types/src/{components → containers}/MarkdownCard/MarkdownCard.d.ts +1 -1
  104. package/dist/types/src/containers/MarkdownCard/MarkdownCard.d.ts.map +1 -0
  105. package/dist/types/src/containers/MarkdownCard/MarkdownCard.stories.d.ts.map +1 -0
  106. package/dist/types/src/containers/MarkdownCard/index.d.ts +2 -0
  107. package/dist/types/src/containers/MarkdownCard/index.d.ts.map +1 -0
  108. package/dist/types/src/containers/MarkdownCard/snippet.d.ts +15 -0
  109. package/dist/types/src/containers/MarkdownCard/snippet.d.ts.map +1 -0
  110. package/dist/types/src/containers/MarkdownContainer/MarkdownContainer.d.ts +36 -0
  111. package/dist/types/src/containers/MarkdownContainer/MarkdownContainer.d.ts.map +1 -0
  112. package/dist/types/src/containers/MarkdownContainer/MarkdownContainer.stories.d.ts +99 -0
  113. package/dist/types/src/containers/MarkdownContainer/MarkdownContainer.stories.d.ts.map +1 -0
  114. package/dist/types/src/containers/MarkdownContainer/index.d.ts +3 -0
  115. package/dist/types/src/containers/MarkdownContainer/index.d.ts.map +1 -0
  116. package/dist/types/src/containers/index.d.ts +5 -0
  117. package/dist/types/src/containers/index.d.ts.map +1 -0
  118. package/dist/types/src/hooks/index.d.ts +0 -1
  119. package/dist/types/src/hooks/index.d.ts.map +1 -1
  120. package/dist/types/src/hooks/useExtensions.d.ts +7 -5
  121. package/dist/types/src/hooks/useExtensions.d.ts.map +1 -1
  122. package/dist/types/src/hooks/useLinkQuery.d.ts.map +1 -1
  123. package/dist/types/src/index.d.ts +2 -0
  124. package/dist/types/src/index.d.ts.map +1 -1
  125. package/dist/types/src/operations/create-markdown.d.ts +5 -0
  126. package/dist/types/src/operations/create-markdown.d.ts.map +1 -0
  127. package/dist/types/src/operations/create.d.ts +5 -0
  128. package/dist/types/src/operations/create.d.ts.map +1 -0
  129. package/dist/types/src/operations/create.test.d.ts.map +1 -0
  130. package/dist/types/src/operations/definitions.d.ts +64 -0
  131. package/dist/types/src/operations/definitions.d.ts.map +1 -0
  132. package/dist/types/src/operations/index.d.ts +4 -0
  133. package/dist/types/src/operations/index.d.ts.map +1 -0
  134. package/dist/types/src/operations/open.d.ts +5 -0
  135. package/dist/types/src/operations/open.d.ts.map +1 -0
  136. package/dist/types/src/operations/scroll-to-anchor.d.ts +5 -0
  137. package/dist/types/src/operations/scroll-to-anchor.d.ts.map +1 -0
  138. package/dist/types/src/operations/set-view-mode.d.ts +5 -0
  139. package/dist/types/src/operations/set-view-mode.d.ts.map +1 -0
  140. package/dist/types/src/operations/update.d.ts +5 -0
  141. package/dist/types/src/operations/update.d.ts.map +1 -0
  142. package/dist/types/src/operations/update.test.d.ts.map +1 -0
  143. package/dist/types/src/translations.d.ts +75 -35
  144. package/dist/types/src/translations.d.ts.map +1 -1
  145. package/dist/types/src/types/Markdown.d.ts +15 -16
  146. package/dist/types/src/types/Markdown.d.ts.map +1 -1
  147. package/dist/types/src/types/Settings.d.ts +16 -0
  148. package/dist/types/src/types/Settings.d.ts.map +1 -0
  149. package/dist/types/src/types/capabilities.d.ts +31 -2
  150. package/dist/types/src/types/capabilities.d.ts.map +1 -1
  151. package/dist/types/src/types/events.d.ts.map +1 -1
  152. package/dist/types/src/types/index.d.ts +2 -3
  153. package/dist/types/src/types/index.d.ts.map +1 -1
  154. package/dist/types/src/util.d.ts +2 -2
  155. package/dist/types/src/util.d.ts.map +1 -1
  156. package/dist/types/tsconfig.tsbuildinfo +1 -1
  157. package/package.json +89 -57
  158. package/src/MarkdownPlugin.tsx +47 -42
  159. package/src/blueprints/index.ts +1 -1
  160. package/src/blueprints/markdown-blueprint.ts +14 -8
  161. package/src/capabilities/{anchor-sort/anchor-sort.ts → anchor-sort.ts} +4 -3
  162. package/src/capabilities/{app-graph-serializer/app-graph-serializer.ts → app-graph-serializer.ts} +15 -9
  163. package/src/capabilities/{artifact-definition/artifact-definition.ts → artifact-definition.ts} +5 -5
  164. package/src/capabilities/blueprint-definition.ts +17 -0
  165. package/src/capabilities/index.ts +13 -7
  166. package/src/capabilities/node.ts +11 -0
  167. package/src/capabilities/operation-handler.ts +16 -0
  168. package/src/capabilities/react-surface.tsx +120 -0
  169. package/src/capabilities/{settings/settings.ts → settings.ts} +5 -4
  170. package/src/capabilities/state.ts +47 -0
  171. package/src/cli/plugin.ts +20 -10
  172. package/src/components/MarkdownEditor/FileUpload.tsx +2 -2
  173. package/src/components/MarkdownEditor/MarkdownEditor.stories.tsx +38 -34
  174. package/src/components/MarkdownEditor/MarkdownEditor.tsx +139 -102
  175. package/src/components/MarkdownEditor/MarkdownEditorContent.tsx +25 -17
  176. package/src/components/MarkdownEditor/MarkdownEditorToolbar.tsx +46 -54
  177. package/src/components/MarkdownSettings/MarkdownSettings.stories.tsx +39 -0
  178. package/src/components/MarkdownSettings/MarkdownSettings.tsx +114 -98
  179. package/src/components/MarkdownSettings/index.ts +1 -1
  180. package/src/components/index.ts +4 -12
  181. package/src/{components → containers}/MarkdownCard/MarkdownCard.stories.tsx +21 -12
  182. package/src/containers/MarkdownCard/MarkdownCard.tsx +62 -0
  183. package/src/containers/MarkdownCard/index.ts +5 -0
  184. package/src/containers/MarkdownCard/snippet.ts +78 -0
  185. package/src/{components → containers/MarkdownContainer}/MarkdownContainer.stories.tsx +34 -23
  186. package/src/containers/MarkdownContainer/MarkdownContainer.tsx +145 -0
  187. package/src/containers/MarkdownContainer/index.ts +6 -0
  188. package/src/containers/index.ts +10 -0
  189. package/src/hooks/index.ts +0 -1
  190. package/src/hooks/useEditorMenuOptions.ts +3 -3
  191. package/src/hooks/useExtensions.tsx +81 -92
  192. package/src/hooks/useLinkQuery.ts +31 -6
  193. package/src/index.ts +3 -0
  194. package/src/meta.ts +1 -1
  195. package/src/operations/create-markdown.ts +20 -0
  196. package/src/operations/create.conversations.json +1 -0
  197. package/src/operations/create.test.ts +98 -0
  198. package/src/operations/create.ts +27 -0
  199. package/src/operations/definitions.ts +120 -0
  200. package/src/operations/index.ts +16 -0
  201. package/src/operations/open.ts +25 -0
  202. package/src/operations/scroll-to-anchor.ts +39 -0
  203. package/src/operations/set-view-mode.ts +24 -0
  204. package/src/operations/update.conversations.json +1 -0
  205. package/src/operations/update.test.ts +215 -0
  206. package/src/operations/update.ts +51 -0
  207. package/src/testing.ts +2 -2
  208. package/src/translations.ts +49 -35
  209. package/src/types/Markdown.ts +18 -25
  210. package/src/types/Settings.ts +28 -0
  211. package/src/types/capabilities.ts +17 -5
  212. package/src/types/events.ts +5 -4
  213. package/src/types/index.ts +3 -4
  214. package/src/util.tsx +5 -5
  215. package/dist/lib/browser/MarkdownCard-WHK3ORP7.mjs +0 -12
  216. package/dist/lib/browser/MarkdownContainer-V7EAADMF.mjs +0 -12
  217. package/dist/lib/browser/anchor-sort-WQ3TL7ZI.mjs +0 -32
  218. package/dist/lib/browser/anchor-sort-WQ3TL7ZI.mjs.map +0 -7
  219. package/dist/lib/browser/app-graph-serializer-ULZUJKOD.mjs +0 -58
  220. package/dist/lib/browser/app-graph-serializer-ULZUJKOD.mjs.map +0 -7
  221. package/dist/lib/browser/blueprint-definition-TLV4PNZW.mjs +0 -19
  222. package/dist/lib/browser/blueprint-definition-TLV4PNZW.mjs.map +0 -7
  223. package/dist/lib/browser/chunk-BX73DASG.mjs +0 -702
  224. package/dist/lib/browser/chunk-BX73DASG.mjs.map +0 -7
  225. package/dist/lib/browser/chunk-CUGDX7KA.mjs +0 -8
  226. package/dist/lib/browser/chunk-CUGDX7KA.mjs.map +0 -7
  227. package/dist/lib/browser/chunk-FWQQW6KU.mjs +0 -144
  228. package/dist/lib/browser/chunk-FWQQW6KU.mjs.map +0 -7
  229. package/dist/lib/browser/chunk-JOXYQLKH.mjs +0 -55
  230. package/dist/lib/browser/chunk-JOXYQLKH.mjs.map +0 -7
  231. package/dist/lib/browser/chunk-KDKXFKDN.mjs +0 -104
  232. package/dist/lib/browser/chunk-KDKXFKDN.mjs.map +0 -7
  233. package/dist/lib/browser/chunk-LMO5UVKL.mjs +0 -167
  234. package/dist/lib/browser/chunk-LMO5UVKL.mjs.map +0 -7
  235. package/dist/lib/browser/chunk-S45ULIOG.mjs +0 -101
  236. package/dist/lib/browser/chunk-S45ULIOG.mjs.map +0 -7
  237. package/dist/lib/browser/chunk-WIPSLZ6L.mjs +0 -60
  238. package/dist/lib/browser/chunk-WIPSLZ6L.mjs.map +0 -7
  239. package/dist/lib/browser/operation-resolver-EGCWOQKJ.mjs +0 -53
  240. package/dist/lib/browser/operation-resolver-EGCWOQKJ.mjs.map +0 -7
  241. package/dist/lib/browser/react-surface-SRPLD3ED.mjs +0 -213
  242. package/dist/lib/browser/react-surface-SRPLD3ED.mjs.map +0 -7
  243. package/dist/lib/browser/settings-JY5JE7MI.mjs +0 -35
  244. package/dist/lib/browser/settings-JY5JE7MI.mjs.map +0 -7
  245. package/dist/lib/browser/state-QE7VSJWJ.mjs +0 -29
  246. package/dist/lib/browser/state-QE7VSJWJ.mjs.map +0 -7
  247. package/dist/lib/node-esm/MarkdownCard-WJPLQTFS.mjs +0 -13
  248. package/dist/lib/node-esm/MarkdownCard-WJPLQTFS.mjs.map +0 -7
  249. package/dist/lib/node-esm/MarkdownContainer-LUSMORP2.mjs +0 -13
  250. package/dist/lib/node-esm/MarkdownContainer-LUSMORP2.mjs.map +0 -7
  251. package/dist/lib/node-esm/anchor-sort-G7D5TAI6.mjs +0 -33
  252. package/dist/lib/node-esm/anchor-sort-G7D5TAI6.mjs.map +0 -7
  253. package/dist/lib/node-esm/app-graph-serializer-W5YMQP7P.mjs +0 -59
  254. package/dist/lib/node-esm/app-graph-serializer-W5YMQP7P.mjs.map +0 -7
  255. package/dist/lib/node-esm/blueprint-definition-HYFA7BKQ.mjs +0 -20
  256. package/dist/lib/node-esm/blueprint-definition-HYFA7BKQ.mjs.map +0 -7
  257. package/dist/lib/node-esm/chunk-3JYPCC7M.mjs +0 -105
  258. package/dist/lib/node-esm/chunk-3JYPCC7M.mjs.map +0 -7
  259. package/dist/lib/node-esm/chunk-44VJC3QF.mjs +0 -56
  260. package/dist/lib/node-esm/chunk-44VJC3QF.mjs.map +0 -7
  261. package/dist/lib/node-esm/chunk-D4BCFPKK.mjs +0 -703
  262. package/dist/lib/node-esm/chunk-D4BCFPKK.mjs.map +0 -7
  263. package/dist/lib/node-esm/chunk-EYAFC4N7.mjs +0 -145
  264. package/dist/lib/node-esm/chunk-EYAFC4N7.mjs.map +0 -7
  265. package/dist/lib/node-esm/chunk-PRV35A7Z.mjs +0 -168
  266. package/dist/lib/node-esm/chunk-PRV35A7Z.mjs.map +0 -7
  267. package/dist/lib/node-esm/chunk-RQP7G7XW.mjs +0 -61
  268. package/dist/lib/node-esm/chunk-RQP7G7XW.mjs.map +0 -7
  269. package/dist/lib/node-esm/chunk-SDTYEGGL.mjs +0 -102
  270. package/dist/lib/node-esm/chunk-SDTYEGGL.mjs.map +0 -7
  271. package/dist/lib/node-esm/chunk-W3IIKDV5.mjs +0 -10
  272. package/dist/lib/node-esm/chunk-W3IIKDV5.mjs.map +0 -7
  273. package/dist/lib/node-esm/operation-resolver-2HIS2AQZ.mjs +0 -54
  274. package/dist/lib/node-esm/operation-resolver-2HIS2AQZ.mjs.map +0 -7
  275. package/dist/lib/node-esm/react-surface-RONSOJIQ.mjs +0 -214
  276. package/dist/lib/node-esm/react-surface-RONSOJIQ.mjs.map +0 -7
  277. package/dist/lib/node-esm/settings-4UGMPIRY.mjs +0 -36
  278. package/dist/lib/node-esm/settings-4UGMPIRY.mjs.map +0 -7
  279. package/dist/lib/node-esm/state-LXE5XIN4.mjs +0 -30
  280. package/dist/lib/node-esm/state-LXE5XIN4.mjs.map +0 -7
  281. package/dist/types/src/blueprints/functions/create.d.ts +0 -8
  282. package/dist/types/src/blueprints/functions/create.d.ts.map +0 -1
  283. package/dist/types/src/blueprints/functions/create.test.d.ts.map +0 -1
  284. package/dist/types/src/blueprints/functions/index.d.ts +0 -4
  285. package/dist/types/src/blueprints/functions/index.d.ts.map +0 -1
  286. package/dist/types/src/blueprints/functions/open.d.ts +0 -7
  287. package/dist/types/src/blueprints/functions/open.d.ts.map +0 -1
  288. package/dist/types/src/blueprints/functions/update.d.ts +0 -6
  289. package/dist/types/src/blueprints/functions/update.d.ts.map +0 -1
  290. package/dist/types/src/blueprints/functions/update.test.d.ts.map +0 -1
  291. package/dist/types/src/capabilities/anchor-sort/anchor-sort.d.ts +0 -5
  292. package/dist/types/src/capabilities/anchor-sort/anchor-sort.d.ts.map +0 -1
  293. package/dist/types/src/capabilities/anchor-sort/index.d.ts +0 -3
  294. package/dist/types/src/capabilities/anchor-sort/index.d.ts.map +0 -1
  295. package/dist/types/src/capabilities/app-graph-serializer/app-graph-serializer.d.ts +0 -5
  296. package/dist/types/src/capabilities/app-graph-serializer/app-graph-serializer.d.ts.map +0 -1
  297. package/dist/types/src/capabilities/app-graph-serializer/index.d.ts +0 -3
  298. package/dist/types/src/capabilities/app-graph-serializer/index.d.ts.map +0 -1
  299. package/dist/types/src/capabilities/artifact-definition/artifact-definition.d.ts +0 -5
  300. package/dist/types/src/capabilities/artifact-definition/artifact-definition.d.ts.map +0 -1
  301. package/dist/types/src/capabilities/artifact-definition/index.d.ts +0 -3
  302. package/dist/types/src/capabilities/artifact-definition/index.d.ts.map +0 -1
  303. package/dist/types/src/capabilities/blueprint-definition/blueprint-definition.d.ts +0 -10
  304. package/dist/types/src/capabilities/blueprint-definition/blueprint-definition.d.ts.map +0 -1
  305. package/dist/types/src/capabilities/blueprint-definition/index.d.ts +0 -3
  306. package/dist/types/src/capabilities/blueprint-definition/index.d.ts.map +0 -1
  307. package/dist/types/src/capabilities/operation-resolver/index.d.ts +0 -3
  308. package/dist/types/src/capabilities/operation-resolver/index.d.ts.map +0 -1
  309. package/dist/types/src/capabilities/operation-resolver/operation-resolver.d.ts +0 -5
  310. package/dist/types/src/capabilities/operation-resolver/operation-resolver.d.ts.map +0 -1
  311. package/dist/types/src/capabilities/react-surface/index.d.ts +0 -3
  312. package/dist/types/src/capabilities/react-surface/index.d.ts.map +0 -1
  313. package/dist/types/src/capabilities/react-surface/react-surface.d.ts +0 -5
  314. package/dist/types/src/capabilities/react-surface/react-surface.d.ts.map +0 -1
  315. package/dist/types/src/capabilities/settings/index.d.ts +0 -3
  316. package/dist/types/src/capabilities/settings/index.d.ts.map +0 -1
  317. package/dist/types/src/capabilities/settings/settings.d.ts +0 -6
  318. package/dist/types/src/capabilities/settings/settings.d.ts.map +0 -1
  319. package/dist/types/src/capabilities/state/index.d.ts +0 -3
  320. package/dist/types/src/capabilities/state/index.d.ts.map +0 -1
  321. package/dist/types/src/capabilities/state/state.d.ts +0 -5
  322. package/dist/types/src/capabilities/state/state.d.ts.map +0 -1
  323. package/dist/types/src/components/MarkdownCard/MarkdownCard.d.ts.map +0 -1
  324. package/dist/types/src/components/MarkdownCard/MarkdownCard.stories.d.ts.map +0 -1
  325. package/dist/types/src/components/MarkdownCard/index.d.ts +0 -4
  326. package/dist/types/src/components/MarkdownCard/index.d.ts.map +0 -1
  327. package/dist/types/src/components/MarkdownContainer.d.ts +0 -28
  328. package/dist/types/src/components/MarkdownContainer.d.ts.map +0 -1
  329. package/dist/types/src/components/MarkdownContainer.stories.d.ts +0 -59
  330. package/dist/types/src/components/MarkdownContainer.stories.d.ts.map +0 -1
  331. package/dist/types/src/components/Suggestions.stories.d.ts +0 -11
  332. package/dist/types/src/components/Suggestions.stories.d.ts.map +0 -1
  333. package/dist/types/src/hooks/useSelectCurrentThread.d.ts +0 -6
  334. package/dist/types/src/hooks/useSelectCurrentThread.d.ts.map +0 -1
  335. package/dist/types/src/types/MarkdownAction.d.ts +0 -66
  336. package/dist/types/src/types/MarkdownAction.d.ts.map +0 -1
  337. package/src/blueprints/functions/create.conversations.json +0 -1
  338. package/src/blueprints/functions/create.test.ts +0 -125
  339. package/src/blueprints/functions/create.ts +0 -34
  340. package/src/blueprints/functions/index.ts +0 -7
  341. package/src/blueprints/functions/open.ts +0 -33
  342. package/src/blueprints/functions/update.conversations.json +0 -1
  343. package/src/blueprints/functions/update.test.ts +0 -149
  344. package/src/blueprints/functions/update.ts +0 -38
  345. package/src/capabilities/anchor-sort/index.ts +0 -7
  346. package/src/capabilities/app-graph-serializer/index.ts +0 -7
  347. package/src/capabilities/artifact-definition/index.ts +0 -7
  348. package/src/capabilities/blueprint-definition/blueprint-definition.ts +0 -25
  349. package/src/capabilities/blueprint-definition/index.ts +0 -7
  350. package/src/capabilities/operation-resolver/index.ts +0 -7
  351. package/src/capabilities/operation-resolver/operation-resolver.ts +0 -45
  352. package/src/capabilities/react-surface/index.ts +0 -7
  353. package/src/capabilities/react-surface/react-surface.tsx +0 -100
  354. package/src/capabilities/settings/index.ts +0 -7
  355. package/src/capabilities/state/index.ts +0 -7
  356. package/src/capabilities/state/state.ts +0 -31
  357. package/src/components/MarkdownCard/MarkdownCard.tsx +0 -64
  358. package/src/components/MarkdownCard/index.ts +0 -9
  359. package/src/components/MarkdownContainer.tsx +0 -111
  360. package/src/components/Suggestions.stories.tsx +0 -215
  361. package/src/hooks/useSelectCurrentThread.tsx +0 -61
  362. package/src/types/MarkdownAction.ts +0 -59
  363. /package/dist/lib/browser/{MarkdownCard-WHK3ORP7.mjs.map → chunk-J5LGTIGS.mjs.map} +0 -0
  364. /package/dist/lib/{browser/MarkdownContainer-V7EAADMF.mjs.map → node-esm/chunk-HSLMI22Q.mjs.map} +0 -0
  365. /package/dist/types/src/{components → containers}/MarkdownCard/MarkdownCard.stories.d.ts +0 -0
  366. /package/dist/types/src/{blueprints/functions → operations}/create.test.d.ts +0 -0
  367. /package/dist/types/src/{blueprints/functions → operations}/update.test.d.ts +0 -0
@@ -6,20 +6,22 @@ import { type Extension } from '@codemirror/state';
6
6
  import { type EditorView } from '@codemirror/view';
7
7
  import { type Atom } from '@effect-atom/atom-react';
8
8
  import { createContext } from '@radix-ui/react-context';
9
- import React, { type PropsWithChildren, useMemo, useState } from 'react';
9
+ import React, { type ReactNode, useCallback, useMemo, useState } from 'react';
10
10
  import { createPortal } from 'react-dom';
11
11
 
12
- import { Surface } from '@dxos/app-framework/react';
12
+ import { Surface } from '@dxos/app-framework/ui';
13
+ import { Obj } from '@dxos/echo';
13
14
  import { DXN } from '@dxos/keys';
14
15
  import { useClient } from '@dxos/react-client';
16
+ import { type ThemedClassName } from '@dxos/react-ui';
15
17
  import {
16
- EditorMenuProvider,
18
+ type EditorRootProps,
17
19
  type EditorToolbarState,
18
- type UseEditorMenu,
19
- useEditorMenu,
20
- useEditorToolbar,
20
+ createEditorController,
21
+ useEditorContext,
21
22
  } from '@dxos/react-ui-editor';
22
23
  import { type PreviewBlock, type PreviewOptions } from '@dxos/ui-editor';
24
+ import { composable, composableProps } from '@dxos/ui-theme';
23
25
  import { isNonNullable } from '@dxos/util';
24
26
 
25
27
  import {
@@ -28,7 +30,7 @@ import {
28
30
  type UseEditorMenuOptionsProps,
29
31
  useEditorMenuOptions,
30
32
  useExtensions,
31
- } from '../../hooks';
33
+ } from '#hooks';
32
34
 
33
35
  import {
34
36
  MarkdownEditorContent as NaturalMarkdownEditorContent,
@@ -45,198 +47,233 @@ import {
45
47
 
46
48
  type MarkdownEditorContextValue = {
47
49
  id: string;
48
- setEditorView: (view: EditorView) => void;
49
- extensions: Extension[];
50
+ attendableId?: string;
50
51
  previewBlocks: PreviewBlock[];
51
- toolbarState: Atom.Writable<EditorToolbarState>;
52
- popoverMenu: Omit<UseEditorMenu, 'extension'>;
53
- } & (Pick<ExtensionsOptions, 'viewMode'> &
54
- Pick<NaturalMarkdownToolbarProps, 'editorView' | 'onAction' | 'onFileUpload' | 'onViewModeChange'>);
52
+ } & Pick<ExtensionsOptions, 'compact' | 'viewMode'> &
53
+ Pick<NaturalMarkdownToolbarProps, 'onAction' | 'onFileUpload' | 'onViewModeChange'>;
55
54
 
56
55
  const [MarkdownEditorContextProvider, useMarkdownEditorContext] =
57
56
  createContext<MarkdownEditorContextValue>('MarkdownEditor.Context');
58
57
 
58
+ /**
59
+ * Props to spread onto `Editor.Root` from `MarkdownEditorProvider`'s render callback.
60
+ */
61
+ export type MarkdownEditorEditorRootProps = Omit<EditorRootProps, 'children'>;
62
+
59
63
  //
60
- // MarkdownEditor.Root
64
+ // MarkdownEditorProvider
61
65
  //
62
66
 
63
- type MarkdownEditorRootProps = PropsWithChildren<
64
- {
65
- object?: DocumentType;
66
- extensions?: Extension[];
67
- } & Pick<MarkdownEditorContextValue, 'id' | 'onAction' | 'onFileUpload' | 'onViewModeChange' | 'viewMode'> &
68
- Pick<UseEditorMenuOptionsProps, 'slashCommandGroups' | 'onLinkQuery'> &
69
- Pick<ExtensionsOptions, 'editorStateStore' | 'selectionManager' | 'settings'>
70
- >;
71
-
72
- const MarkdownEditorRoot = ({
67
+ export type MarkdownEditorProviderProps = {
68
+ object?: DocumentType;
69
+ extensions?: Extension[];
70
+ children: (editorRootProps: MarkdownEditorEditorRootProps) => ReactNode;
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'>;
77
+
78
+ export const MarkdownEditorProvider = ({
73
79
  children,
74
80
  id,
81
+ attendableId,
75
82
  object,
76
- editorStateStore,
77
- selectionManager,
78
83
  settings,
84
+ compact,
79
85
  viewMode,
86
+ selectionManager,
87
+ editorStateStore,
80
88
  extensions: extensionsProp,
81
89
  slashCommandGroups,
82
90
  onLinkQuery,
83
- ...props
84
- }: MarkdownEditorRootProps) => {
85
- const [editorView, setEditorView] = useState<EditorView>();
86
-
91
+ onSelectObject,
92
+ onAction,
93
+ onFileUpload,
94
+ onViewModeChange,
95
+ }: MarkdownEditorProviderProps) => {
87
96
  // Preview blocks.
88
97
  const [previewBlocks, setPreviewBlocks] = useState<PreviewBlock[]>([]);
89
98
  const previewOptions = useMemo<PreviewOptions>(
90
99
  () => ({
100
+ db: Obj.isObject(object) ? Obj.getDatabase(object) : undefined,
91
101
  addBlockContainer: (block) => {
92
102
  setPreviewBlocks((prev) => [...prev, block]);
93
103
  },
94
104
  removeBlockContainer: ({ link }) => {
95
- setPreviewBlocks((prev) => prev.filter(({ link: prevLink }) => prevLink.ref !== link.ref));
105
+ setPreviewBlocks((prev) => prev.filter(({ link: prevLink }) => prevLink.dxn !== link.dxn));
96
106
  },
97
107
  }),
98
- [],
108
+ [object],
99
109
  );
100
110
 
101
- // Toolbar state.
102
- const toolbarState = useEditorToolbar({ viewMode });
111
+ // Context menu options (Editor.Root calls useEditorMenu with these props).
112
+ const menuOptions = useEditorMenuOptions({ slashCommandGroups, onLinkQuery });
103
113
 
104
- // Context menu.
105
- const menuOptions = useEditorMenuOptions({
106
- editorView,
107
- slashCommandGroups,
108
- onLinkQuery,
109
- });
110
- const { extension: menuExtension, ...menuProps } = useEditorMenu(menuOptions);
111
-
112
- // Extensions.
114
+ // Core markdown extensions (popover/menu extension is added by Editor.Root).
113
115
  const coreExtensions = useExtensions({
114
116
  id,
115
117
  object,
118
+ compact,
119
+ viewMode,
120
+ selectionManager,
116
121
  editorStateStore,
117
122
  previewOptions,
118
- selectionManager,
119
123
  settings,
120
- viewMode,
124
+ onSelectObject,
121
125
  });
122
126
 
123
127
  const extensions = useMemo(
124
- () => [coreExtensions, menuExtension, extensionsProp].filter(isNonNullable),
125
- [coreExtensions, menuExtension, extensionsProp],
128
+ () => [coreExtensions, extensionsProp].filter(isNonNullable).flat(),
129
+ [coreExtensions, extensionsProp],
130
+ );
131
+
132
+ const editorRootProps = useMemo<MarkdownEditorEditorRootProps>(
133
+ () => ({
134
+ extensions,
135
+ viewMode,
136
+ getMenu: menuOptions.getMenu,
137
+ trigger: menuOptions.trigger,
138
+ placeholder: menuOptions.placeholder,
139
+ ...(menuOptions.filter !== undefined ? { filter: menuOptions.filter } : {}),
140
+ ...(menuOptions.triggerKey !== undefined ? { triggerKey: menuOptions.triggerKey } : {}),
141
+ }),
142
+ [extensions, viewMode, menuOptions],
143
+ );
144
+
145
+ const markdownContextValue = useMemo<MarkdownEditorContextValue>(
146
+ () => ({
147
+ id,
148
+ attendableId,
149
+ compact,
150
+ viewMode,
151
+ previewBlocks,
152
+ onAction,
153
+ onFileUpload,
154
+ onViewModeChange,
155
+ }),
156
+ [id, attendableId, compact, viewMode, previewBlocks, onAction, onFileUpload, onViewModeChange],
126
157
  );
127
158
 
128
159
  return (
129
- <MarkdownEditorContextProvider
130
- id={id}
131
- editorView={editorView}
132
- setEditorView={setEditorView}
133
- extensions={extensions}
134
- previewBlocks={previewBlocks}
135
- toolbarState={toolbarState}
136
- popoverMenu={menuProps}
137
- viewMode={viewMode}
138
- {...props}
139
- >
140
- {children}
141
- </MarkdownEditorContextProvider>
160
+ <MarkdownEditorContextProvider {...markdownContextValue}>{children(editorRootProps)}</MarkdownEditorContextProvider>
142
161
  );
143
162
  };
144
163
 
145
- MarkdownEditorRoot.displayName = 'MarkdownEditor.Root';
164
+ MarkdownEditorProvider.displayName = 'MarkdownEditor.Provider';
146
165
 
147
166
  //
148
- // MarkdownEditor.Main
167
+ // MarkdownEditor.Content
149
168
  //
150
169
 
170
+ const MARKDOWN_EDITOR_CONTENT_NAME = 'MarkdownEditor.Content';
171
+
151
172
  type MarkdownEditorContentProps = Omit<NaturalMarkdownEditorContentProps, 'id' | 'extensions' | 'toolbarState'>;
152
173
 
153
- const MarkdownEditorContent = (props: MarkdownEditorContentProps) => {
154
- const {
155
- id,
156
- editorView,
157
- setEditorView,
158
- viewMode,
159
- toolbarState,
160
- extensions,
161
- popoverMenu: { groupsRef, ...menuProps },
162
- } = useMarkdownEditorContext(MarkdownEditorContent.displayName);
174
+ const MarkdownEditorContent = composable<HTMLDivElement, MarkdownEditorContentProps>(({ ...props }, _forwardedRef) => {
175
+ const { id, attendableId, compact, viewMode, onFileUpload } = useMarkdownEditorContext(MARKDOWN_EDITOR_CONTENT_NAME);
176
+
177
+ const { extensions, setController, state } = useEditorContext(MARKDOWN_EDITOR_CONTENT_NAME);
178
+
179
+ const handleRef = useCallback(
180
+ (view: EditorView | null) => {
181
+ setController(createEditorController(view));
182
+ },
183
+ [setController],
184
+ );
163
185
 
164
186
  return (
165
- <EditorMenuProvider view={editorView} groups={groupsRef.current} {...menuProps}>
166
- <NaturalMarkdownEditorContent
167
- {...props}
168
- id={id}
169
- viewMode={viewMode}
170
- toolbarState={toolbarState}
171
- extensions={extensions}
172
- ref={setEditorView}
173
- />
174
- </EditorMenuProvider>
187
+ <NaturalMarkdownEditorContent
188
+ {...composableProps(props)}
189
+ id={id}
190
+ attendableId={attendableId}
191
+ compact={compact}
192
+ viewMode={viewMode}
193
+ toolbarState={state as Atom.Writable<EditorToolbarState>}
194
+ extensions={extensions}
195
+ onFileUpload={onFileUpload}
196
+ ref={handleRef}
197
+ />
175
198
  );
176
- };
199
+ });
177
200
 
178
- MarkdownEditorContent.displayName = 'MarkdownEditor.Content';
201
+ MarkdownEditorContent.displayName = MARKDOWN_EDITOR_CONTENT_NAME;
179
202
 
180
203
  //
181
204
  // MarkdownEditor.Toolbar
182
205
  //
183
206
 
184
- type MarkdownEditorToolbarProps = Omit<
185
- NaturalMarkdownToolbarProps,
186
- 'state' | 'editorView' | 'onAction' | 'onFileUpload' | 'onViewModeChange'
207
+ const MARKDOWN_EDITOR_TOOLBAR_NAME = 'MarkdownEditor.Toolbar';
208
+
209
+ type MarkdownEditorToolbarProps = ThemedClassName<
210
+ Omit<NaturalMarkdownToolbarProps, 'state' | 'editorView' | 'onAction' | 'onFileUpload' | 'onViewModeChange' | 'id'>
187
211
  >;
188
212
 
189
213
  const MarkdownEditorToolbar = (props: MarkdownEditorToolbarProps) => {
190
- const { toolbarState, ...rootProps } = useMarkdownEditorContext(MarkdownEditorToolbar.displayName);
214
+ const { id, attendableId, onAction, onFileUpload, onViewModeChange } =
215
+ useMarkdownEditorContext(MARKDOWN_EDITOR_TOOLBAR_NAME);
216
+
217
+ const { controller, state } = useEditorContext(MARKDOWN_EDITOR_TOOLBAR_NAME);
191
218
 
192
- return <NaturalMarkdownToolbar {...props} {...rootProps} state={toolbarState} />;
219
+ return (
220
+ <NaturalMarkdownToolbar
221
+ {...props}
222
+ id={attendableId ?? id}
223
+ editorView={controller?.view ?? undefined}
224
+ state={state}
225
+ onAction={onAction}
226
+ onFileUpload={onFileUpload}
227
+ onViewModeChange={onViewModeChange}
228
+ />
229
+ );
193
230
  };
194
231
 
195
- MarkdownEditorToolbar.displayName = 'MarkdownEditor.Toolbar';
232
+ MarkdownEditorToolbar.displayName = MARKDOWN_EDITOR_TOOLBAR_NAME;
196
233
 
197
234
  //
198
235
  // MarkdownEditor.Blocks (embedded objects)
199
236
  //
200
237
 
238
+ const MARKDOWN_EDITOR_BLOCKS_NAME = 'MarkdownEditor.Blocks';
239
+
201
240
  type MarkdownEditorBlocksProps = {};
202
241
 
203
242
  const MarkdownEditorBlocks = (_props: MarkdownEditorBlocksProps) => {
204
- const { previewBlocks } = useMarkdownEditorContext(MarkdownEditorBlocks.displayName);
243
+ const { previewBlocks } = useMarkdownEditorContext(MARKDOWN_EDITOR_BLOCKS_NAME);
205
244
 
206
245
  return (
207
246
  <>
208
247
  {previewBlocks.map(({ link, el }) => (
209
- <PreviewBlock key={link.ref} link={link} el={el} />
248
+ <PreviewBlock key={link.dxn} link={link} el={el} />
210
249
  ))}
211
250
  </>
212
251
  );
213
252
  };
214
253
 
215
- MarkdownEditorBlocks.displayName = 'MarkdownEditor.Blocks';
254
+ MarkdownEditorBlocks.displayName = MARKDOWN_EDITOR_BLOCKS_NAME;
216
255
 
217
256
  const PreviewBlock = ({ el, link }: PreviewBlock) => {
218
257
  const client = useClient();
219
- const dxn = DXN.parse(link.ref);
258
+ const dxn = DXN.parse(link.dxn);
220
259
  const subject = client.graph.makeRef(dxn).target;
221
260
  const data = useMemo(() => ({ subject }), [subject]);
222
261
 
223
- return createPortal(<Surface role='card--transclusion' data={data} limit={1} />, el);
262
+ return createPortal(<Surface.Surface role='card--content' data={data} limit={1} />, el);
224
263
  };
225
264
 
226
265
  //
227
266
  // MarkdownEditor
228
267
  //
229
268
 
269
+ /** @private */
230
270
  export const MarkdownEditor = {
231
- Root: MarkdownEditorRoot,
232
271
  Content: MarkdownEditorContent,
233
272
  Toolbar: MarkdownEditorToolbar,
234
273
  Blocks: MarkdownEditorBlocks,
235
274
  };
236
275
 
237
- export type {
238
- MarkdownEditorRootProps,
239
- MarkdownEditorContentProps,
240
- MarkdownEditorToolbarProps,
241
- MarkdownEditorBlocksProps,
242
- };
276
+ export type { MarkdownEditorContentProps, MarkdownEditorToolbarProps, MarkdownEditorBlocksProps };
277
+
278
+ /** @deprecated Use `MarkdownEditorProviderProps`. */
279
+ export type MarkdownEditorRootProps = MarkdownEditorProviderProps;
@@ -6,6 +6,7 @@ import { type EditorView } from '@codemirror/view';
6
6
  import { type Atom, RegistryContext } from '@effect-atom/atom-react';
7
7
  import React, { forwardRef, useCallback, useContext, useEffect, useImperativeHandle, useMemo } from 'react';
8
8
 
9
+ import { useCapabilities } from '@dxos/app-framework/ui';
9
10
  import { type ThemedClassName, useThemeContext, useTranslation } from '@dxos/react-ui';
10
11
  import {
11
12
  type EditorMenuGroup,
@@ -18,51 +19,54 @@ import {
18
19
  type EditorStateStore,
19
20
  type EditorViewMode,
20
21
  type ThemeExtensionsOptions,
22
+ compactSlots,
21
23
  createBasicExtensions,
22
24
  createMarkdownExtensions,
23
25
  createThemeExtensions,
24
26
  dropFile,
25
- editorSlots,
27
+ documentSlots,
26
28
  formattingListener,
27
29
  processEditorPayload,
28
- stackItemContentEditorClassNames,
30
+ editorClassNames,
29
31
  } from '@dxos/ui-editor';
30
32
  import { mx } from '@dxos/ui-theme';
31
33
  import { isTruthy } from '@dxos/util';
32
34
 
33
- import { useSelectCurrentThread } from '../../hooks';
34
- import { meta } from '../../meta';
35
+ import { meta } from '#meta';
36
+ import { MarkdownCapabilities } from '#types';
35
37
 
36
38
  import { type MarkdownEditorToolbarProps } from './MarkdownEditorToolbar';
37
39
 
38
40
  export type MarkdownEditorContentProps = ThemedClassName<{
39
41
  id: string;
42
+ attendableId?: string;
40
43
  role?: string;
44
+ compact?: boolean;
41
45
  viewMode?: EditorViewMode;
42
- scrollPastEnd?: boolean;
43
46
  slashCommandGroups?: EditorMenuGroup[];
44
47
  editorStateStore?: EditorStateStore;
45
48
  toolbarState?: Atom.Writable<EditorToolbarState>;
46
49
  onLinkQuery?: (query?: string) => Promise<EditorMenuGroup[]>;
47
50
  }> &
48
- // prettier-ignore
49
51
  Pick<UseTextEditorProps, 'initialValue' | 'extensions'> &
50
52
  Pick<MarkdownEditorToolbarProps, 'onFileUpload'> &
51
53
  Pick<ThemeExtensionsOptions, 'slots'>;
52
54
 
55
+ // TODO(burdon): Move controller to Root.
53
56
  export const MarkdownEditorContent = forwardRef<EditorView | null, MarkdownEditorContentProps>(
54
57
  (
55
58
  {
56
59
  classNames,
57
60
  id,
61
+ attendableId,
58
62
  role,
63
+ compact,
59
64
  viewMode,
60
65
  initialValue,
61
66
  editorStateStore,
62
67
  toolbarState,
63
68
  extensions,
64
- scrollPastEnd,
65
- slots = editorSlots,
69
+ slots,
66
70
  onFileUpload,
67
71
  },
68
72
  forwardedRef,
@@ -94,21 +98,19 @@ export const MarkdownEditorContent = forwardRef<EditorView | null, MarkdownEdito
94
98
  id,
95
99
  scrollTo,
96
100
  selection,
97
- // TODO(wittjosiah): Autofocus based on layout is racy.
98
- // autoFocus: layoutPlugin?.provides.layout ? layoutPlugin?.provides.layout.scrollIntoView === id : true,
99
101
  selectionEnd: true,
100
102
  }),
101
103
  initialValue,
102
104
  extensions: [
103
105
  createBasicExtensions({
104
106
  readOnly: viewMode === 'readonly',
105
- placeholder: t('editor placeholder'),
106
- scrollPastEnd: scrollPastEnd && role !== 'section',
107
+ placeholder: t('editor.placeholder'),
108
+ scrollPastEnd: !compact,
107
109
  search: true,
108
110
  }),
109
111
  createThemeExtensions({
110
112
  themeMode,
111
- slots,
113
+ slots: slots ?? (compact ? compactSlots : documentSlots),
112
114
  syntaxHighlighting: true,
113
115
  }),
114
116
  createMarkdownExtensions(),
@@ -133,18 +135,24 @@ export const MarkdownEditorContent = forwardRef<EditorView | null, MarkdownEdito
133
135
 
134
136
  useImperativeHandle<EditorView | null, EditorView | null>(forwardedRef, () => editorView, [editorView]);
135
137
 
136
- useSelectCurrentThread(editorView, id);
138
+ const [editorViewRegistry] = useCapabilities(MarkdownCapabilities.EditorViews);
139
+ useEffect(() => {
140
+ if (editorView && editorViewRegistry) {
141
+ editorViewRegistry.register(attendableId ?? id, editorView, id);
142
+ return () => editorViewRegistry.unregister(attendableId ?? id);
143
+ }
144
+ }, [editorView, editorViewRegistry, attendableId, id]);
137
145
 
138
146
  useTest(editorView);
139
147
 
140
148
  return (
141
149
  <div
150
+ {...focusAttributes}
151
+ className={mx(editorClassNames(role), classNames)}
142
152
  role='none'
143
- ref={parentRef}
144
153
  data-testid='composer.markdownRoot'
145
- className={mx(stackItemContentEditorClassNames(role), classNames)}
146
154
  data-popover-collision-boundary={true}
147
- {...focusAttributes}
155
+ ref={parentRef}
148
156
  />
149
157
  );
150
158
  },
@@ -5,62 +5,54 @@
5
5
  import { type EditorView } from '@codemirror/view';
6
6
  import React, { useCallback, useState } from 'react';
7
7
 
8
- import { type Common } from '@dxos/app-framework';
8
+ import { type FileInfo } from '@dxos/app-toolkit';
9
9
  import { invariant } from '@dxos/invariant';
10
- import { type ThemedClassName } from '@dxos/react-ui';
11
10
  import { EditorToolbar, type EditorToolbarProps } from '@dxos/react-ui-editor';
12
- import { type EditorViewMode } from '@dxos/ui-editor';
11
+ import { composable, composableProps } from '@dxos/ui-theme';
13
12
 
14
13
  import { FileUpload, type FileUploadAction } from './FileUpload';
15
14
 
16
- export type MarkdownEditorToolbarProps = ThemedClassName<
17
- {
18
- id: string;
19
- editorView?: EditorView;
20
- onFileUpload?: (file: File) => Promise<Common.FileInfo | undefined>;
21
- } & Pick<EditorToolbarProps, 'role' | 'state' | 'customActions' | 'onAction' | 'onViewModeChange'>
22
- >;
23
-
24
- export const MarkdownEditorToolbar = ({
25
- classNames,
26
- id,
27
- role,
28
- state,
29
- editorView,
30
- customActions,
31
- onAction,
32
- onFileUpload,
33
- onViewModeChange,
34
- }: MarkdownEditorToolbarProps) => {
35
- const [upload, setUpload] = useState<FileUploadAction | null>(null);
36
- const uploadRef = useCallback((next: FileUploadAction) => setUpload(() => next), []);
37
-
38
- const handleViewModeChange = useCallback((mode: EditorViewMode) => onViewModeChange?.(mode), [onViewModeChange]);
39
-
40
- const getView = useCallback(() => {
41
- invariant(editorView);
42
- return editorView;
43
- }, [editorView]);
44
-
45
- if (!editorView) {
46
- return <div />;
47
- }
48
-
49
- return (
50
- <>
51
- <EditorToolbar
52
- classNames={classNames}
53
- attendableId={id}
54
- role={role}
55
- state={state}
56
- customActions={customActions}
57
- getView={getView}
58
- onAction={onAction}
59
- onImageUpload={upload ?? undefined}
60
- onViewModeChange={handleViewModeChange}
61
- />
62
-
63
- {onFileUpload && <FileUpload ref={uploadRef} editorView={editorView} onFileUpload={onFileUpload} />}
64
- </>
65
- );
66
- };
15
+ export type MarkdownEditorToolbarProps = {
16
+ id: string;
17
+ editorView?: EditorView;
18
+ onFileUpload?: (file: File) => Promise<FileInfo | undefined>;
19
+ } & Pick<EditorToolbarProps, 'role' | 'state' | 'customActions' | 'onAction' | 'onViewModeChange'>;
20
+
21
+ export const MarkdownEditorToolbar = composable<HTMLDivElement, MarkdownEditorToolbarProps>(
22
+ (
23
+ { id, role, state, editorView, customActions, onAction, onFileUpload, onViewModeChange, ...props },
24
+ forwardedRef,
25
+ ) => {
26
+ const { className, ...rest } = composableProps(props);
27
+ const [upload, setUpload] = useState<FileUploadAction | null>(null);
28
+ const uploadRef = useCallback((next: FileUploadAction) => setUpload(() => next), []);
29
+
30
+ const getView = useCallback(() => {
31
+ invariant(editorView);
32
+ return editorView;
33
+ }, [editorView]);
34
+
35
+ if (!editorView) {
36
+ return <div className={className} {...rest} ref={forwardedRef} />;
37
+ }
38
+
39
+ return (
40
+ <div role='none' className='contents' ref={forwardedRef}>
41
+ <EditorToolbar
42
+ {...rest}
43
+ classNames={className}
44
+ attendableId={id}
45
+ role={role}
46
+ state={state}
47
+ customActions={customActions}
48
+ getView={getView}
49
+ onAction={onAction}
50
+ onImageUpload={upload ?? undefined}
51
+ onViewModeChange={onViewModeChange}
52
+ />
53
+
54
+ {onFileUpload && <FileUpload ref={uploadRef} editorView={editorView} onFileUpload={onFileUpload} />}
55
+ </div>
56
+ );
57
+ },
58
+ );
@@ -0,0 +1,39 @@
1
+ //
2
+ // Copyright 2025 DXOS.org
3
+ //
4
+
5
+ import { type Meta, type StoryObj } from '@storybook/react-vite';
6
+
7
+ import { withLayout, withTheme } from '@dxos/react-ui/testing';
8
+
9
+ import { translations } from '../../translations';
10
+ import { MarkdownSettings } from './MarkdownSettings';
11
+
12
+ const meta = {
13
+ title: 'plugins/plugin-markdown/components/MarkdownSettings',
14
+ tags: ['settings'],
15
+ component: MarkdownSettings,
16
+ decorators: [withTheme(), withLayout({ layout: 'fullscreen' })],
17
+ parameters: {
18
+ layout: 'fullscreen',
19
+ translations,
20
+ },
21
+ } satisfies Meta<typeof MarkdownSettings>;
22
+
23
+ export default meta;
24
+
25
+ type Story = StoryObj<typeof meta>;
26
+
27
+ export const Default: Story = {
28
+ args: {
29
+ settings: {
30
+ defaultViewMode: 'preview',
31
+ editorInputMode: 'default',
32
+ toolbar: true,
33
+ numberedHeadings: false,
34
+ folding: false,
35
+ experimental: false,
36
+ debug: false,
37
+ },
38
+ },
39
+ };