@dxos/plugin-markdown 0.8.4-main.7ace549 → 0.8.4-main.8baae0fced

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 (412) hide show
  1. package/LICENSE +102 -5
  2. package/README.md +1 -1
  3. package/dist/lib/neutral/EditableMarkdownCard-LXBXN3OW.mjs +32 -0
  4. package/dist/lib/neutral/EditableMarkdownCard-LXBXN3OW.mjs.map +7 -0
  5. package/dist/lib/neutral/MarkdownArticle-Z4QRU3WD.mjs +126 -0
  6. package/dist/lib/neutral/MarkdownArticle-Z4QRU3WD.mjs.map +7 -0
  7. package/dist/lib/neutral/MarkdownCard-INMBLUL4.mjs +102 -0
  8. package/dist/lib/neutral/MarkdownCard-INMBLUL4.mjs.map +7 -0
  9. package/dist/lib/neutral/MarkdownPlugin.mjs +58 -0
  10. package/dist/lib/neutral/MarkdownPlugin.mjs.map +7 -0
  11. package/dist/lib/neutral/MarkdownPlugin.node.mjs +25 -0
  12. package/dist/lib/neutral/MarkdownPlugin.node.mjs.map +7 -0
  13. package/dist/lib/neutral/MarkdownPlugin.workerd.mjs +23 -0
  14. package/dist/lib/neutral/MarkdownPlugin.workerd.mjs.map +7 -0
  15. package/dist/lib/neutral/MarkdownSettings-YCTZJL5V.mjs +32 -0
  16. package/dist/lib/neutral/MarkdownSettings-YCTZJL5V.mjs.map +7 -0
  17. package/dist/lib/{browser/anchor-sort-3MYLO74J.mjs → neutral/anchor-sort-L4VCKDO6.mjs} +9 -9
  18. package/dist/lib/neutral/anchor-sort-L4VCKDO6.mjs.map +7 -0
  19. package/dist/lib/neutral/app-graph-serializer-YI72EEVM.mjs +55 -0
  20. package/dist/lib/neutral/app-graph-serializer-YI72EEVM.mjs.map +7 -0
  21. package/dist/lib/neutral/blueprint-definition-33OK2KUL.mjs +15 -0
  22. package/dist/lib/neutral/blueprint-definition-33OK2KUL.mjs.map +7 -0
  23. package/dist/lib/neutral/blueprints/index.mjs +8 -0
  24. package/dist/lib/neutral/capabilities/index.mjs +25 -0
  25. package/dist/lib/neutral/capabilities/index.mjs.map +7 -0
  26. package/dist/lib/neutral/capabilities/node.mjs +11 -0
  27. package/dist/lib/neutral/capabilities/node.mjs.map +7 -0
  28. package/dist/lib/neutral/chunk-5JWFZVBC.mjs +8 -0
  29. package/dist/lib/neutral/chunk-5JWFZVBC.mjs.map +7 -0
  30. package/dist/lib/{node-esm/chunk-SHAMSMKQ.mjs → neutral/chunk-ISCL3BB2.mjs} +4 -10
  31. package/dist/lib/neutral/chunk-ISCL3BB2.mjs.map +7 -0
  32. package/dist/lib/neutral/chunk-J5LGTIGS.mjs +10 -0
  33. package/dist/lib/neutral/chunk-KDN4GKG2.mjs +98 -0
  34. package/dist/lib/neutral/chunk-KDN4GKG2.mjs.map +7 -0
  35. package/dist/lib/neutral/chunk-LXNSKCPD.mjs +44 -0
  36. package/dist/lib/neutral/chunk-LXNSKCPD.mjs.map +7 -0
  37. package/dist/lib/neutral/chunk-SOLAMEK3.mjs +276 -0
  38. package/dist/lib/neutral/chunk-SOLAMEK3.mjs.map +7 -0
  39. package/dist/lib/neutral/comment-config-7VTHRUIZ.mjs +30 -0
  40. package/dist/lib/neutral/comment-config-7VTHRUIZ.mjs.map +7 -0
  41. package/dist/lib/neutral/components/index.mjs +370 -0
  42. package/dist/lib/neutral/components/index.mjs.map +7 -0
  43. package/dist/lib/neutral/containers/index.mjs +13 -0
  44. package/dist/lib/neutral/containers/index.mjs.map +7 -0
  45. package/dist/lib/neutral/create-3PGJ2NEK.mjs +28 -0
  46. package/dist/lib/neutral/create-3PGJ2NEK.mjs.map +7 -0
  47. package/dist/lib/neutral/create-markdown-5LS46GMH.mjs +20 -0
  48. package/dist/lib/neutral/create-markdown-5LS46GMH.mjs.map +7 -0
  49. package/dist/lib/neutral/create-object-ZA6VXLJJ.mjs +27 -0
  50. package/dist/lib/neutral/create-object-ZA6VXLJJ.mjs.map +7 -0
  51. package/dist/lib/neutral/hooks/index.mjs +321 -0
  52. package/dist/lib/neutral/hooks/index.mjs.map +7 -0
  53. package/dist/lib/neutral/index.mjs +42 -0
  54. package/dist/lib/neutral/meta.json +1 -0
  55. package/dist/lib/neutral/meta.mjs +8 -0
  56. package/dist/lib/neutral/open-WCYGBLAG.mjs +20 -0
  57. package/dist/lib/neutral/open-WCYGBLAG.mjs.map +7 -0
  58. package/dist/lib/neutral/operation-handler-2ARMPBGZ.mjs +13 -0
  59. package/dist/lib/neutral/operation-handler-2ARMPBGZ.mjs.map +7 -0
  60. package/dist/lib/neutral/operations/index.mjs +8 -0
  61. package/dist/lib/neutral/plugin.mjs +16 -0
  62. package/dist/lib/neutral/plugin.mjs.map +7 -0
  63. package/dist/lib/neutral/react-surface-SG4YNXBS.mjs +119 -0
  64. package/dist/lib/neutral/react-surface-SG4YNXBS.mjs.map +7 -0
  65. package/dist/lib/neutral/scroll-to-anchor-6FIOKVKT.mjs +47 -0
  66. package/dist/lib/neutral/scroll-to-anchor-6FIOKVKT.mjs.map +7 -0
  67. package/dist/lib/neutral/set-view-mode-37RSPFEN.mjs +24 -0
  68. package/dist/lib/neutral/set-view-mode-37RSPFEN.mjs.map +7 -0
  69. package/dist/lib/neutral/settings-TDGDLCUR.mjs +34 -0
  70. package/dist/lib/neutral/settings-TDGDLCUR.mjs.map +7 -0
  71. package/dist/lib/neutral/state-5COCF5PN.mjs +44 -0
  72. package/dist/lib/neutral/state-5COCF5PN.mjs.map +7 -0
  73. package/dist/lib/neutral/testing.mjs +19 -0
  74. package/dist/lib/neutral/testing.mjs.map +7 -0
  75. package/dist/lib/neutral/translations.mjs +43 -0
  76. package/dist/lib/neutral/translations.mjs.map +7 -0
  77. package/dist/lib/neutral/types/index.mjs +16 -0
  78. package/dist/lib/neutral/update-markdown-5EDRD3SH.mjs +44 -0
  79. package/dist/lib/neutral/update-markdown-5EDRD3SH.mjs.map +7 -0
  80. package/dist/types/src/MarkdownPlugin.d.ts +3 -1
  81. package/dist/types/src/MarkdownPlugin.d.ts.map +1 -1
  82. package/dist/types/src/MarkdownPlugin.node.d.ts +4 -0
  83. package/dist/types/src/MarkdownPlugin.node.d.ts.map +1 -0
  84. package/dist/types/src/MarkdownPlugin.test.d.ts +2 -0
  85. package/dist/types/src/MarkdownPlugin.test.d.ts.map +1 -0
  86. package/dist/types/src/MarkdownPlugin.workerd.d.ts +4 -0
  87. package/dist/types/src/MarkdownPlugin.workerd.d.ts.map +1 -0
  88. package/dist/types/src/blueprints/index.d.ts +2 -0
  89. package/dist/types/src/blueprints/index.d.ts.map +1 -0
  90. package/dist/types/src/blueprints/markdown-blueprint.d.ts +4 -0
  91. package/dist/types/src/blueprints/markdown-blueprint.d.ts.map +1 -0
  92. package/dist/types/src/capabilities/anchor-sort.d.ts +4 -2
  93. package/dist/types/src/capabilities/anchor-sort.d.ts.map +1 -1
  94. package/dist/types/src/capabilities/app-graph-serializer.d.ts +3 -2
  95. package/dist/types/src/capabilities/app-graph-serializer.d.ts.map +1 -1
  96. package/dist/types/src/capabilities/artifact-definition.d.ts +3 -1
  97. package/dist/types/src/capabilities/artifact-definition.d.ts.map +1 -1
  98. package/dist/types/src/capabilities/blueprint-definition.d.ts +5 -6
  99. package/dist/types/src/capabilities/blueprint-definition.d.ts.map +1 -1
  100. package/dist/types/src/capabilities/comment-config.d.ts +12 -0
  101. package/dist/types/src/capabilities/comment-config.d.ts.map +1 -0
  102. package/dist/types/src/capabilities/create-object.d.ts +11 -0
  103. package/dist/types/src/capabilities/create-object.d.ts.map +1 -0
  104. package/dist/types/src/capabilities/index.d.ts +22 -14
  105. package/dist/types/src/capabilities/index.d.ts.map +1 -1
  106. package/dist/types/src/capabilities/node.d.ts +10 -0
  107. package/dist/types/src/capabilities/node.d.ts.map +1 -0
  108. package/dist/types/src/capabilities/operation-handler.d.ts +6 -0
  109. package/dist/types/src/capabilities/operation-handler.d.ts.map +1 -0
  110. package/dist/types/src/capabilities/react-surface.d.ts +3 -2
  111. package/dist/types/src/capabilities/react-surface.d.ts.map +1 -1
  112. package/dist/types/src/capabilities/settings.d.ts +4 -2
  113. package/dist/types/src/capabilities/settings.d.ts.map +1 -1
  114. package/dist/types/src/capabilities/state.d.ts +4 -9
  115. package/dist/types/src/capabilities/state.d.ts.map +1 -1
  116. package/dist/types/src/components/MarkdownEditor/FileUpload.d.ts +1 -1
  117. package/dist/types/src/components/MarkdownEditor/FileUpload.d.ts.map +1 -1
  118. package/dist/types/src/components/MarkdownEditor/MarkdownEditor.d.ts +34 -22
  119. package/dist/types/src/components/MarkdownEditor/MarkdownEditor.d.ts.map +1 -1
  120. package/dist/types/src/components/MarkdownEditor/MarkdownEditor.stories.d.ts +3 -3
  121. package/dist/types/src/components/MarkdownEditor/MarkdownEditor.stories.d.ts.map +1 -1
  122. package/dist/types/src/components/MarkdownEditor/MarkdownEditorContent.d.ts +17 -10
  123. package/dist/types/src/components/MarkdownEditor/MarkdownEditorContent.d.ts.map +1 -1
  124. package/dist/types/src/components/MarkdownEditor/MarkdownEditorToolbar.d.ts +6 -5
  125. package/dist/types/src/components/MarkdownEditor/MarkdownEditorToolbar.d.ts.map +1 -1
  126. package/dist/types/src/components/MarkdownSettings/MarkdownSettings.d.ts +4 -4
  127. package/dist/types/src/components/MarkdownSettings/MarkdownSettings.d.ts.map +1 -1
  128. package/dist/types/src/components/MarkdownSettings/MarkdownSettings.stories.d.ts +94 -0
  129. package/dist/types/src/components/MarkdownSettings/MarkdownSettings.stories.d.ts.map +1 -0
  130. package/dist/types/src/components/MarkdownSettings/index.d.ts +1 -1
  131. package/dist/types/src/components/MarkdownSettings/index.d.ts.map +1 -1
  132. package/dist/types/src/components/index.d.ts +3 -5
  133. package/dist/types/src/components/index.d.ts.map +1 -1
  134. package/dist/types/src/containers/EditableMarkdownCard/EditableMarkdownCard.d.ts +15 -0
  135. package/dist/types/src/containers/EditableMarkdownCard/EditableMarkdownCard.d.ts.map +1 -0
  136. package/dist/types/src/containers/EditableMarkdownCard/index.d.ts +3 -0
  137. package/dist/types/src/containers/EditableMarkdownCard/index.d.ts.map +1 -0
  138. package/dist/types/src/containers/MarkdownArticle/MarkdownArticle.d.ts +36 -0
  139. package/dist/types/src/containers/MarkdownArticle/MarkdownArticle.d.ts.map +1 -0
  140. package/dist/types/src/containers/MarkdownArticle/MarkdownArticle.stories.d.ts +97 -0
  141. package/dist/types/src/containers/MarkdownArticle/MarkdownArticle.stories.d.ts.map +1 -0
  142. package/dist/types/src/containers/MarkdownArticle/index.d.ts +3 -0
  143. package/dist/types/src/containers/MarkdownArticle/index.d.ts.map +1 -0
  144. package/dist/types/src/containers/MarkdownCard/MarkdownCard.d.ts +8 -0
  145. package/dist/types/src/containers/MarkdownCard/MarkdownCard.d.ts.map +1 -0
  146. package/dist/types/src/containers/MarkdownCard/MarkdownCard.stories.d.ts +9 -0
  147. package/dist/types/src/containers/MarkdownCard/MarkdownCard.stories.d.ts.map +1 -0
  148. package/dist/types/src/containers/MarkdownCard/index.d.ts +2 -0
  149. package/dist/types/src/containers/MarkdownCard/index.d.ts.map +1 -0
  150. package/dist/types/src/containers/MarkdownCard/snippet.d.ts +17 -0
  151. package/dist/types/src/containers/MarkdownCard/snippet.d.ts.map +1 -0
  152. package/dist/types/src/containers/index.d.ts +6 -0
  153. package/dist/types/src/containers/index.d.ts.map +1 -0
  154. package/dist/types/src/hooks/index.d.ts +0 -1
  155. package/dist/types/src/hooks/index.d.ts.map +1 -1
  156. package/dist/types/src/hooks/useEditorMenuOptions.d.ts.map +1 -1
  157. package/dist/types/src/hooks/useExtensions.d.ts +10 -6
  158. package/dist/types/src/hooks/useExtensions.d.ts.map +1 -1
  159. package/dist/types/src/hooks/useLinkQuery.d.ts +2 -2
  160. package/dist/types/src/hooks/useLinkQuery.d.ts.map +1 -1
  161. package/dist/types/src/index.d.ts +2 -3
  162. package/dist/types/src/index.d.ts.map +1 -1
  163. package/dist/types/src/meta.d.ts +2 -2
  164. package/dist/types/src/meta.d.ts.map +1 -1
  165. package/dist/types/src/operations/create-markdown.d.ts +5 -0
  166. package/dist/types/src/operations/create-markdown.d.ts.map +1 -0
  167. package/dist/types/src/operations/create.d.ts +5 -0
  168. package/dist/types/src/operations/create.d.ts.map +1 -0
  169. package/dist/types/src/operations/create.test.d.ts.map +1 -0
  170. package/dist/types/src/operations/index.d.ts +3 -0
  171. package/dist/types/src/operations/index.d.ts.map +1 -0
  172. package/dist/types/src/operations/open.d.ts +5 -0
  173. package/dist/types/src/operations/open.d.ts.map +1 -0
  174. package/dist/types/src/operations/scroll-to-anchor.d.ts +5 -0
  175. package/dist/types/src/operations/scroll-to-anchor.d.ts.map +1 -0
  176. package/dist/types/src/operations/set-view-mode.d.ts +5 -0
  177. package/dist/types/src/operations/set-view-mode.d.ts.map +1 -0
  178. package/dist/types/src/operations/update-markdown.d.ts +5 -0
  179. package/dist/types/src/operations/update-markdown.d.ts.map +1 -0
  180. package/dist/types/src/operations/update.test.d.ts.map +1 -0
  181. package/dist/types/src/plugin.d.ts +4 -0
  182. package/dist/types/src/plugin.d.ts.map +1 -0
  183. package/dist/types/src/testing.d.ts +3 -2
  184. package/dist/types/src/testing.d.ts.map +1 -1
  185. package/dist/types/src/translations.d.ts +74 -37
  186. package/dist/types/src/translations.d.ts.map +1 -1
  187. package/dist/types/src/types/Markdown.d.ts +28 -28
  188. package/dist/types/src/types/Markdown.d.ts.map +1 -1
  189. package/dist/types/src/types/MarkdownCapabilities.d.ts +32 -0
  190. package/dist/types/src/types/MarkdownCapabilities.d.ts.map +1 -0
  191. package/dist/types/src/types/MarkdownEvents.d.ts +3 -0
  192. package/dist/types/src/types/MarkdownEvents.d.ts.map +1 -0
  193. package/dist/types/src/types/MarkdownOperation.d.ts +64 -0
  194. package/dist/types/src/types/MarkdownOperation.d.ts.map +1 -0
  195. package/dist/types/src/types/Settings.d.ts +17 -0
  196. package/dist/types/src/types/Settings.d.ts.map +1 -0
  197. package/dist/types/src/types/index.d.ts +5 -2
  198. package/dist/types/src/types/index.d.ts.map +1 -1
  199. package/dist/types/src/types/types.d.ts +3 -2
  200. package/dist/types/src/types/types.d.ts.map +1 -1
  201. package/dist/types/src/util.d.ts +6 -3
  202. package/dist/types/src/util.d.ts.map +1 -1
  203. package/dist/types/src/util.test.d.ts +2 -0
  204. package/dist/types/src/util.test.d.ts.map +1 -0
  205. package/dist/types/tsconfig.tsbuildinfo +1 -1
  206. package/package.json +150 -86
  207. package/src/MarkdownPlugin.node.ts +20 -0
  208. package/src/MarkdownPlugin.test.ts +26 -0
  209. package/src/MarkdownPlugin.tsx +33 -85
  210. package/src/MarkdownPlugin.workerd.ts +19 -0
  211. package/src/blueprints/index.ts +5 -0
  212. package/src/blueprints/markdown-blueprint.ts +43 -0
  213. package/src/capabilities/anchor-sort.ts +26 -20
  214. package/src/capabilities/app-graph-serializer.ts +52 -43
  215. package/src/capabilities/artifact-definition.ts +83 -86
  216. package/src/capabilities/blueprint-definition.ts +11 -35
  217. package/src/capabilities/comment-config.ts +32 -0
  218. package/src/capabilities/create-object.ts +30 -0
  219. package/src/capabilities/index.ts +15 -11
  220. package/src/capabilities/node.ts +13 -0
  221. package/src/capabilities/operation-handler.ts +16 -0
  222. package/src/capabilities/react-surface.tsx +101 -67
  223. package/src/capabilities/settings.ts +30 -18
  224. package/src/capabilities/state.ts +41 -25
  225. package/src/components/MarkdownEditor/FileUpload.tsx +2 -2
  226. package/src/components/MarkdownEditor/MarkdownEditor.stories.tsx +47 -43
  227. package/src/components/MarkdownEditor/MarkdownEditor.tsx +148 -105
  228. package/src/components/MarkdownEditor/MarkdownEditorContent.tsx +66 -33
  229. package/src/components/MarkdownEditor/MarkdownEditorToolbar.tsx +37 -53
  230. package/src/components/MarkdownSettings/MarkdownSettings.stories.tsx +40 -0
  231. package/src/components/MarkdownSettings/MarkdownSettings.tsx +23 -96
  232. package/src/components/MarkdownSettings/index.ts +1 -1
  233. package/src/components/index.ts +4 -7
  234. package/src/containers/EditableMarkdownCard/EditableMarkdownCard.tsx +42 -0
  235. package/src/containers/EditableMarkdownCard/index.ts +6 -0
  236. package/src/containers/MarkdownArticle/MarkdownArticle.stories.tsx +135 -0
  237. package/src/containers/MarkdownArticle/MarkdownArticle.tsx +146 -0
  238. package/src/containers/MarkdownArticle/index.ts +6 -0
  239. package/src/containers/MarkdownCard/MarkdownCard.stories.tsx +68 -0
  240. package/src/containers/MarkdownCard/MarkdownCard.tsx +67 -0
  241. package/src/containers/MarkdownCard/index.ts +5 -0
  242. package/src/containers/MarkdownCard/snippet.ts +54 -0
  243. package/src/containers/index.ts +11 -0
  244. package/src/hooks/index.ts +0 -1
  245. package/src/hooks/useEditorMenuOptions.ts +11 -14
  246. package/src/hooks/useExtensions.tsx +95 -112
  247. package/src/hooks/useLinkQuery.ts +43 -35
  248. package/src/index.ts +2 -5
  249. package/src/meta.ts +8 -4
  250. package/src/operations/create-markdown.ts +19 -0
  251. package/src/operations/create.conversations.json +1 -0
  252. package/src/operations/create.test.ts +96 -0
  253. package/src/operations/create.ts +26 -0
  254. package/src/operations/index.ts +14 -0
  255. package/src/operations/open.ts +25 -0
  256. package/src/operations/scroll-to-anchor.ts +38 -0
  257. package/src/operations/set-view-mode.ts +23 -0
  258. package/src/operations/update-markdown.ts +51 -0
  259. package/src/operations/update.conversations.json +1 -0
  260. package/src/operations/update.test.ts +213 -0
  261. package/src/plugin.ts +11 -0
  262. package/src/testing.ts +10 -5
  263. package/src/translations.ts +26 -36
  264. package/src/types/Markdown.ts +24 -26
  265. package/src/types/MarkdownCapabilities.ts +51 -0
  266. package/src/types/MarkdownEvents.ts +14 -0
  267. package/src/types/MarkdownOperation.ts +122 -0
  268. package/src/types/Settings.ts +65 -0
  269. package/src/types/index.ts +6 -3
  270. package/src/types/types.ts +7 -3
  271. package/src/util.test.ts +44 -0
  272. package/src/util.tsx +78 -8
  273. package/dist/lib/browser/MarkdownCard-TC3GGUSX.mjs +0 -12
  274. package/dist/lib/browser/MarkdownContainer-YF22DV4M.mjs +0 -15
  275. package/dist/lib/browser/anchor-sort-3MYLO74J.mjs.map +0 -7
  276. package/dist/lib/browser/app-graph-serializer-BZJ4TQOE.mjs +0 -51
  277. package/dist/lib/browser/app-graph-serializer-BZJ4TQOE.mjs.map +0 -7
  278. package/dist/lib/browser/blueprint-definition-HED54GGW.mjs +0 -13
  279. package/dist/lib/browser/chunk-3IPVL3E4.mjs +0 -20
  280. package/dist/lib/browser/chunk-3IPVL3E4.mjs.map +0 -7
  281. package/dist/lib/browser/chunk-BE3IO2CM.mjs +0 -150
  282. package/dist/lib/browser/chunk-BE3IO2CM.mjs.map +0 -7
  283. package/dist/lib/browser/chunk-BQTYJOFB.mjs +0 -28
  284. package/dist/lib/browser/chunk-BQTYJOFB.mjs.map +0 -7
  285. package/dist/lib/browser/chunk-CN35HEBX.mjs +0 -79
  286. package/dist/lib/browser/chunk-CN35HEBX.mjs.map +0 -7
  287. package/dist/lib/browser/chunk-DLZ5RR3P.mjs +0 -96
  288. package/dist/lib/browser/chunk-DLZ5RR3P.mjs.map +0 -7
  289. package/dist/lib/browser/chunk-IBCHVMZW.mjs +0 -16
  290. package/dist/lib/browser/chunk-IBCHVMZW.mjs.map +0 -7
  291. package/dist/lib/browser/chunk-NXT2E2BG.mjs +0 -57
  292. package/dist/lib/browser/chunk-NXT2E2BG.mjs.map +0 -7
  293. package/dist/lib/browser/chunk-OKNQ57GF.mjs +0 -51
  294. package/dist/lib/browser/chunk-OKNQ57GF.mjs.map +0 -7
  295. package/dist/lib/browser/chunk-V7P7EIWG.mjs +0 -829
  296. package/dist/lib/browser/chunk-V7P7EIWG.mjs.map +0 -7
  297. package/dist/lib/browser/index.mjs +0 -160
  298. package/dist/lib/browser/index.mjs.map +0 -7
  299. package/dist/lib/browser/intent-resolver-55ASQRIW.mjs +0 -62
  300. package/dist/lib/browser/intent-resolver-55ASQRIW.mjs.map +0 -7
  301. package/dist/lib/browser/meta.json +0 -1
  302. package/dist/lib/browser/react-surface-GPD6T435.mjs +0 -211
  303. package/dist/lib/browser/react-surface-GPD6T435.mjs.map +0 -7
  304. package/dist/lib/browser/settings-G3ZOXJQY.mjs +0 -28
  305. package/dist/lib/browser/settings-G3ZOXJQY.mjs.map +0 -7
  306. package/dist/lib/browser/state-BTUKVZHY.mjs +0 -37
  307. package/dist/lib/browser/state-BTUKVZHY.mjs.map +0 -7
  308. package/dist/lib/browser/toolkit.mjs +0 -13
  309. package/dist/lib/browser/types/index.mjs +0 -10
  310. package/dist/lib/node-esm/MarkdownCard-FTEHVH7P.mjs +0 -13
  311. package/dist/lib/node-esm/MarkdownCard-FTEHVH7P.mjs.map +0 -7
  312. package/dist/lib/node-esm/MarkdownContainer-L75AIJFM.mjs +0 -16
  313. package/dist/lib/node-esm/MarkdownContainer-L75AIJFM.mjs.map +0 -7
  314. package/dist/lib/node-esm/anchor-sort-W4HCTYUQ.mjs +0 -33
  315. package/dist/lib/node-esm/anchor-sort-W4HCTYUQ.mjs.map +0 -7
  316. package/dist/lib/node-esm/app-graph-serializer-OCTHXWLF.mjs +0 -52
  317. package/dist/lib/node-esm/app-graph-serializer-OCTHXWLF.mjs.map +0 -7
  318. package/dist/lib/node-esm/blueprint-definition-HAQGJOMQ.mjs +0 -14
  319. package/dist/lib/node-esm/blueprint-definition-HAQGJOMQ.mjs.map +0 -7
  320. package/dist/lib/node-esm/chunk-3DN4DPVA.mjs +0 -151
  321. package/dist/lib/node-esm/chunk-3DN4DPVA.mjs.map +0 -7
  322. package/dist/lib/node-esm/chunk-7GN66TDQ.mjs +0 -52
  323. package/dist/lib/node-esm/chunk-7GN66TDQ.mjs.map +0 -7
  324. package/dist/lib/node-esm/chunk-GMMVSXQ6.mjs +0 -17
  325. package/dist/lib/node-esm/chunk-GMMVSXQ6.mjs.map +0 -7
  326. package/dist/lib/node-esm/chunk-I5JSQBPI.mjs +0 -58
  327. package/dist/lib/node-esm/chunk-I5JSQBPI.mjs.map +0 -7
  328. package/dist/lib/node-esm/chunk-SHAMSMKQ.mjs.map +0 -7
  329. package/dist/lib/node-esm/chunk-TYUGABTD.mjs +0 -22
  330. package/dist/lib/node-esm/chunk-TYUGABTD.mjs.map +0 -7
  331. package/dist/lib/node-esm/chunk-UVLACSAE.mjs +0 -830
  332. package/dist/lib/node-esm/chunk-UVLACSAE.mjs.map +0 -7
  333. package/dist/lib/node-esm/chunk-YFRTKXTB.mjs +0 -80
  334. package/dist/lib/node-esm/chunk-YFRTKXTB.mjs.map +0 -7
  335. package/dist/lib/node-esm/chunk-ZNS55FS3.mjs +0 -97
  336. package/dist/lib/node-esm/chunk-ZNS55FS3.mjs.map +0 -7
  337. package/dist/lib/node-esm/index.mjs +0 -161
  338. package/dist/lib/node-esm/index.mjs.map +0 -7
  339. package/dist/lib/node-esm/intent-resolver-DTBVWCNO.mjs +0 -63
  340. package/dist/lib/node-esm/intent-resolver-DTBVWCNO.mjs.map +0 -7
  341. package/dist/lib/node-esm/meta.json +0 -1
  342. package/dist/lib/node-esm/react-surface-QWG7CJ5U.mjs +0 -212
  343. package/dist/lib/node-esm/react-surface-QWG7CJ5U.mjs.map +0 -7
  344. package/dist/lib/node-esm/settings-IBFFCGNL.mjs +0 -29
  345. package/dist/lib/node-esm/settings-IBFFCGNL.mjs.map +0 -7
  346. package/dist/lib/node-esm/state-K6EH7SRZ.mjs +0 -38
  347. package/dist/lib/node-esm/state-K6EH7SRZ.mjs.map +0 -7
  348. package/dist/lib/node-esm/toolkit.mjs +0 -14
  349. package/dist/lib/node-esm/toolkit.mjs.map +0 -7
  350. package/dist/lib/node-esm/types/index.mjs +0 -11
  351. package/dist/types/src/capabilities/capabilities.d.ts +0 -12
  352. package/dist/types/src/capabilities/capabilities.d.ts.map +0 -1
  353. package/dist/types/src/capabilities/intent-resolver.d.ts +0 -4
  354. package/dist/types/src/capabilities/intent-resolver.d.ts.map +0 -1
  355. package/dist/types/src/components/MarkdownCard/MarkdownCard.d.ts +0 -7
  356. package/dist/types/src/components/MarkdownCard/MarkdownCard.d.ts.map +0 -1
  357. package/dist/types/src/components/MarkdownCard/MarkdownCard.stories.d.ts +0 -9
  358. package/dist/types/src/components/MarkdownCard/MarkdownCard.stories.d.ts.map +0 -1
  359. package/dist/types/src/components/MarkdownCard/index.d.ts +0 -4
  360. package/dist/types/src/components/MarkdownCard/index.d.ts.map +0 -1
  361. package/dist/types/src/components/MarkdownContainer.d.ts +0 -14
  362. package/dist/types/src/components/MarkdownContainer.d.ts.map +0 -1
  363. package/dist/types/src/components/MarkdownContainer.stories.d.ts +0 -59
  364. package/dist/types/src/components/MarkdownContainer.stories.d.ts.map +0 -1
  365. package/dist/types/src/components/Suggestions.stories.d.ts +0 -11
  366. package/dist/types/src/components/Suggestions.stories.d.ts.map +0 -1
  367. package/dist/types/src/events.d.ts +0 -4
  368. package/dist/types/src/events.d.ts.map +0 -1
  369. package/dist/types/src/functions/create.d.ts +0 -8
  370. package/dist/types/src/functions/create.d.ts.map +0 -1
  371. package/dist/types/src/functions/create.test.d.ts.map +0 -1
  372. package/dist/types/src/functions/index.d.ts +0 -18
  373. package/dist/types/src/functions/index.d.ts.map +0 -1
  374. package/dist/types/src/functions/open.d.ts +0 -7
  375. package/dist/types/src/functions/open.d.ts.map +0 -1
  376. package/dist/types/src/functions/update.d.ts +0 -6
  377. package/dist/types/src/functions/update.d.ts.map +0 -1
  378. package/dist/types/src/functions/update.test.d.ts.map +0 -1
  379. package/dist/types/src/hooks/useSelectCurrentThread.d.ts +0 -6
  380. package/dist/types/src/hooks/useSelectCurrentThread.d.ts.map +0 -1
  381. package/dist/types/src/toolkit.d.ts +0 -3
  382. package/dist/types/src/toolkit.d.ts.map +0 -1
  383. package/dist/types/src/types/MarkdownAction.d.ts +0 -34
  384. package/dist/types/src/types/MarkdownAction.d.ts.map +0 -1
  385. package/src/capabilities/capabilities.ts +0 -22
  386. package/src/capabilities/intent-resolver.ts +0 -58
  387. package/src/components/MarkdownCard/MarkdownCard.stories.tsx +0 -76
  388. package/src/components/MarkdownCard/MarkdownCard.tsx +0 -89
  389. package/src/components/MarkdownCard/index.ts +0 -9
  390. package/src/components/MarkdownContainer.stories.tsx +0 -136
  391. package/src/components/MarkdownContainer.tsx +0 -113
  392. package/src/components/Suggestions.stories.tsx +0 -226
  393. package/src/events.ts +0 -11
  394. package/src/functions/create.conversations.json +0 -1
  395. package/src/functions/create.test.ts +0 -128
  396. package/src/functions/create.ts +0 -34
  397. package/src/functions/index.ts +0 -13
  398. package/src/functions/open.ts +0 -32
  399. package/src/functions/update.conversations.json +0 -1
  400. package/src/functions/update.test.ts +0 -151
  401. package/src/functions/update.ts +0 -37
  402. package/src/hooks/useSelectCurrentThread.tsx +0 -66
  403. package/src/toolkit.ts +0 -6
  404. package/src/types/MarkdownAction.ts +0 -29
  405. /package/dist/lib/{browser/types → neutral/blueprints}/index.mjs.map +0 -0
  406. /package/dist/lib/{browser/MarkdownCard-TC3GGUSX.mjs.map → neutral/chunk-J5LGTIGS.mjs.map} +0 -0
  407. /package/dist/lib/{node-esm/types → neutral}/index.mjs.map +0 -0
  408. /package/dist/lib/{browser/MarkdownContainer-YF22DV4M.mjs.map → neutral/meta.mjs.map} +0 -0
  409. /package/dist/lib/{browser/blueprint-definition-HED54GGW.mjs.map → neutral/operations/index.mjs.map} +0 -0
  410. /package/dist/lib/{browser/toolkit.mjs.map → neutral/types/index.mjs.map} +0 -0
  411. /package/dist/types/src/{functions → operations}/create.test.d.ts +0 -0
  412. /package/dist/types/src/{functions → operations}/update.test.d.ts +0 -0
@@ -4,23 +4,25 @@
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
- import React, { type PropsWithChildren, useMemo, useState } from 'react';
9
+ import React, { type ReactNode, useCallback, useMemo, useState } from 'react';
9
10
  import { createPortal } from 'react-dom';
10
11
 
11
- import { Surface } from '@dxos/app-framework/react';
12
+ import { Surface } from '@dxos/app-framework/ui';
13
+ import { AppSurface } from '@dxos/app-toolkit/ui';
14
+ import { Obj } from '@dxos/echo';
12
15
  import { DXN } from '@dxos/keys';
13
- import { type Live } from '@dxos/live-object';
14
16
  import { useClient } from '@dxos/react-client';
17
+ import { type ThemedClassName } from '@dxos/react-ui';
15
18
  import {
16
- EditorMenuProvider,
19
+ type EditorRootProps,
17
20
  type EditorToolbarState,
18
- type PreviewBlock,
19
- type PreviewOptions,
20
- type UseEditorMenu,
21
- useEditorMenu,
22
- useEditorToolbar,
21
+ createEditorController,
22
+ useEditorContext,
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 {
@@ -29,7 +31,7 @@ import {
29
31
  type UseEditorMenuOptionsProps,
30
32
  useEditorMenuOptions,
31
33
  useExtensions,
32
- } from '../../hooks';
34
+ } from '#hooks';
33
35
 
34
36
  import {
35
37
  MarkdownEditorContent as NaturalMarkdownEditorContent,
@@ -46,198 +48,239 @@ import {
46
48
 
47
49
  type MarkdownEditorContextValue = {
48
50
  id: string;
49
- setEditorView: (view: EditorView) => void;
50
- extensions: Extension[];
51
+ attendableId?: string;
51
52
  previewBlocks: PreviewBlock[];
52
- toolbarState: Live<EditorToolbarState>;
53
- popoverMenu: Omit<UseEditorMenu, 'extension'>;
54
- } & (Pick<ExtensionsOptions, 'viewMode'> &
55
- Pick<NaturalMarkdownToolbarProps, 'editorView' | 'onFileUpload' | 'onViewModeChange'>);
53
+ } & Pick<ExtensionsOptions, 'compact' | 'viewMode'> &
54
+ Pick<NaturalMarkdownToolbarProps, 'onAction' | 'onFileUpload' | 'onViewModeChange'>;
56
55
 
57
56
  const [MarkdownEditorContextProvider, useMarkdownEditorContext] =
58
57
  createContext<MarkdownEditorContextValue>('MarkdownEditor.Context');
59
58
 
59
+ /**
60
+ * Props to spread onto `Editor.Root` from `MarkdownEditorProvider`'s render callback.
61
+ */
62
+ export type MarkdownEditorEditorRootProps = Omit<EditorRootProps, 'children'>;
63
+
60
64
  //
61
- // MarkdownEditor.Root
65
+ // MarkdownEditorProvider
62
66
  //
63
67
 
64
- type MarkdownEditorRootProps = PropsWithChildren<
65
- {
66
- object?: DocumentType;
67
- extensions?: Extension[];
68
- } & Pick<MarkdownEditorContextValue, 'id' | 'onFileUpload' | 'onViewModeChange' | 'viewMode'> &
69
- Pick<UseEditorMenuOptionsProps, 'slashCommandGroups' | 'onLinkQuery'> &
70
- Pick<ExtensionsOptions, 'editorStateStore' | 'selectionManager' | 'settings'>
71
- >;
72
-
73
- const MarkdownEditorRoot = ({
68
+ export type MarkdownEditorProviderProps = {
69
+ object?: DocumentType;
70
+ extensions?: Extension[];
71
+ children: (editorRootProps: MarkdownEditorEditorRootProps) => ReactNode;
72
+ } & Pick<
73
+ MarkdownEditorContextValue,
74
+ 'id' | 'attendableId' | 'viewMode' | 'compact' | 'onAction' | 'onFileUpload' | 'onViewModeChange'
75
+ > &
76
+ Pick<UseEditorMenuOptionsProps, 'slashCommandGroups' | 'onLinkQuery'> &
77
+ Pick<ExtensionsOptions, 'editorStateStore' | 'selectionManager' | 'settings' | 'onSelectObject'>;
78
+
79
+ export const MarkdownEditorProvider = ({
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,
84
- ...props
85
- }: MarkdownEditorRootProps) => {
86
- const [editorView, setEditorView] = useState<EditorView>();
87
-
92
+ onSelectObject,
93
+ onAction,
94
+ onFileUpload,
95
+ onViewModeChange,
96
+ }: MarkdownEditorProviderProps) => {
88
97
  // Preview blocks.
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
- // Toolbar state.
103
- const toolbarState = useEditorToolbar({ viewMode });
104
-
105
- // Context menu.
106
- const menuOptions = useEditorMenuOptions({
107
- editorView,
108
- slashCommandGroups,
109
- onLinkQuery,
110
- });
111
- const { extension: menuExtension, ...menuProps } = useEditorMenu(menuOptions);
112
+ // Context menu options (Editor.Root calls useEditorMenu with these props).
113
+ const menuOptions = useEditorMenuOptions({ slashCommandGroups, onLinkQuery });
112
114
 
113
- // Extensions.
115
+ // Core markdown extensions (popover/menu extension is added by Editor.Root).
114
116
  const coreExtensions = useExtensions({
115
117
  id,
116
118
  object,
119
+ compact,
120
+ viewMode,
121
+ selectionManager,
117
122
  editorStateStore,
118
123
  previewOptions,
119
- selectionManager,
120
124
  settings,
121
- viewMode,
125
+ onSelectObject,
122
126
  });
123
127
 
124
128
  const extensions = useMemo(
125
- () => [coreExtensions, menuExtension, extensionsParam].filter(isNonNullable),
126
- [coreExtensions, menuExtension, extensionsParam],
129
+ () => [coreExtensions, extensionsProp].filter(isNonNullable).flat(),
130
+ [coreExtensions, extensionsProp],
131
+ );
132
+
133
+ const editorRootProps = useMemo<MarkdownEditorEditorRootProps>(
134
+ () => ({
135
+ extensions,
136
+ viewMode,
137
+ getMenu: menuOptions.getMenu,
138
+ trigger: menuOptions.trigger,
139
+ placeholder: menuOptions.placeholder,
140
+ ...(menuOptions.filter !== undefined ? { filter: menuOptions.filter } : {}),
141
+ ...(menuOptions.triggerKey !== undefined ? { triggerKey: menuOptions.triggerKey } : {}),
142
+ }),
143
+ [extensions, viewMode, menuOptions],
144
+ );
145
+
146
+ const markdownContextValue = useMemo<MarkdownEditorContextValue>(
147
+ () => ({
148
+ id,
149
+ attendableId,
150
+ compact,
151
+ viewMode,
152
+ previewBlocks,
153
+ onAction,
154
+ onFileUpload,
155
+ onViewModeChange,
156
+ }),
157
+ [id, attendableId, compact, viewMode, previewBlocks, onAction, onFileUpload, onViewModeChange],
127
158
  );
128
159
 
129
160
  return (
130
- <MarkdownEditorContextProvider
131
- id={id}
132
- editorView={editorView}
133
- setEditorView={setEditorView}
134
- extensions={extensions}
135
- previewBlocks={previewBlocks}
136
- toolbarState={toolbarState}
137
- popoverMenu={menuProps}
138
- viewMode={viewMode}
139
- {...props}
140
- >
141
- {children}
142
- </MarkdownEditorContextProvider>
161
+ <MarkdownEditorContextProvider {...markdownContextValue}>{children(editorRootProps)}</MarkdownEditorContextProvider>
143
162
  );
144
163
  };
145
164
 
146
- MarkdownEditorRoot.displayName = 'MarkdownEditor.Root';
165
+ MarkdownEditorProvider.displayName = 'MarkdownEditor.Provider';
147
166
 
148
167
  //
149
- // MarkdownEditor.Main
168
+ // MarkdownEditor.Content
150
169
  //
151
170
 
171
+ const MARKDOWN_EDITOR_CONTENT_NAME = 'MarkdownEditor.Content';
172
+
152
173
  type MarkdownEditorContentProps = Omit<NaturalMarkdownEditorContentProps, 'id' | 'extensions' | 'toolbarState'>;
153
174
 
154
- const MarkdownEditorContent = (props: MarkdownEditorContentProps) => {
155
- const {
156
- id,
157
- extensions,
158
- editorView,
159
- setEditorView,
160
- toolbarState,
161
- viewMode,
162
- popoverMenu: { groupsRef, ...menuProps },
163
- } = useMarkdownEditorContext(MarkdownEditorContent.displayName);
175
+ const MarkdownEditorContent = composable<HTMLDivElement, MarkdownEditorContentProps>(
176
+ ({ compact: compactProp, ...props }, _forwardedRef) => {
177
+ const {
178
+ id,
179
+ attendableId,
180
+ compact = compactProp,
181
+ viewMode,
182
+ onFileUpload,
183
+ } = useMarkdownEditorContext(MARKDOWN_EDITOR_CONTENT_NAME);
184
+ const { extensions, setController, state } = useEditorContext(MARKDOWN_EDITOR_CONTENT_NAME);
185
+
186
+ const handleRef = useCallback(
187
+ (view: EditorView | null) => {
188
+ setController(createEditorController(view));
189
+ },
190
+ [setController],
191
+ );
164
192
 
165
- return (
166
- <EditorMenuProvider view={editorView} groups={groupsRef.current} {...menuProps}>
193
+ return (
167
194
  <NaturalMarkdownEditorContent
168
- {...props}
195
+ {...composableProps(props)}
169
196
  id={id}
170
- extensions={extensions}
171
- toolbarState={toolbarState}
197
+ attendableId={attendableId}
198
+ compact={compact}
172
199
  viewMode={viewMode}
173
- ref={setEditorView}
200
+ toolbarState={state as Atom.Writable<EditorToolbarState>}
201
+ extensions={extensions}
202
+ onFileUpload={onFileUpload}
203
+ ref={handleRef}
174
204
  />
175
- </EditorMenuProvider>
176
- );
177
- };
205
+ );
206
+ },
207
+ );
178
208
 
179
- MarkdownEditorContent.displayName = 'MarkdownEditor.Content';
209
+ MarkdownEditorContent.displayName = MARKDOWN_EDITOR_CONTENT_NAME;
180
210
 
181
211
  //
182
212
  // MarkdownEditor.Toolbar
183
213
  //
184
214
 
185
- type MarkdownEditorToolbarProps = Omit<
186
- NaturalMarkdownToolbarProps,
187
- 'state' | 'editorView' | 'onFileUpload' | 'onViewModeChange'
215
+ const MARKDOWN_EDITOR_TOOLBAR_NAME = 'MarkdownEditor.Toolbar';
216
+
217
+ type MarkdownEditorToolbarProps = ThemedClassName<
218
+ Omit<NaturalMarkdownToolbarProps, 'editorView' | 'onAction' | 'onFileUpload' | 'onViewModeChange' | 'id'>
188
219
  >;
189
220
 
190
221
  const MarkdownEditorToolbar = (props: MarkdownEditorToolbarProps) => {
191
- const { toolbarState, ...rootProps } = useMarkdownEditorContext(MarkdownEditorToolbar.displayName);
222
+ const { id, attendableId, onAction, onFileUpload, onViewModeChange } =
223
+ useMarkdownEditorContext(MARKDOWN_EDITOR_TOOLBAR_NAME);
192
224
 
193
- return <NaturalMarkdownToolbar {...props} {...rootProps} state={toolbarState} />;
225
+ const { controller } = useEditorContext(MARKDOWN_EDITOR_TOOLBAR_NAME);
226
+
227
+ return (
228
+ <NaturalMarkdownToolbar
229
+ {...props}
230
+ id={attendableId ?? id}
231
+ editorView={controller?.view ?? undefined}
232
+ onAction={onAction}
233
+ onFileUpload={onFileUpload}
234
+ onViewModeChange={onViewModeChange}
235
+ />
236
+ );
194
237
  };
195
238
 
196
- MarkdownEditorToolbar.displayName = 'MarkdownEditor.Toolbar';
239
+ MarkdownEditorToolbar.displayName = MARKDOWN_EDITOR_TOOLBAR_NAME;
197
240
 
198
241
  //
199
242
  // MarkdownEditor.Blocks (embedded objects)
200
243
  //
201
244
 
245
+ const MARKDOWN_EDITOR_BLOCKS_NAME = 'MarkdownEditor.Blocks';
246
+
202
247
  type MarkdownEditorBlocksProps = {};
203
248
 
204
249
  const MarkdownEditorBlocks = (_props: MarkdownEditorBlocksProps) => {
205
- const { previewBlocks } = useMarkdownEditorContext(MarkdownEditorBlocks.displayName);
250
+ const { previewBlocks } = useMarkdownEditorContext(MARKDOWN_EDITOR_BLOCKS_NAME);
206
251
 
207
252
  return (
208
253
  <>
209
254
  {previewBlocks.map(({ link, el }) => (
210
- <PreviewBlock key={link.ref} link={link} el={el} />
255
+ <PreviewBlock key={link.dxn} link={link} el={el} />
211
256
  ))}
212
257
  </>
213
258
  );
214
259
  };
215
260
 
216
- MarkdownEditorBlocks.displayName = 'MarkdownEditor.Blocks';
261
+ MarkdownEditorBlocks.displayName = MARKDOWN_EDITOR_BLOCKS_NAME;
217
262
 
218
263
  const PreviewBlock = ({ el, link }: PreviewBlock) => {
219
264
  const client = useClient();
220
- const dxn = DXN.parse(link.ref);
221
- const subject = client.graph.ref(dxn).target;
265
+ const dxn = DXN.parse(link.dxn);
266
+ const subject = client.graph.makeRef(dxn).target;
222
267
  const data = useMemo(() => ({ subject }), [subject]);
223
268
 
224
- return createPortal(<Surface role='card--transclusion' data={data} limit={1} />, el);
269
+ return createPortal(<Surface.Surface type={AppSurface.Card} data={data} limit={1} />, el);
225
270
  };
226
271
 
227
272
  //
228
273
  // MarkdownEditor
229
274
  //
230
275
 
276
+ /** @private */
231
277
  export const MarkdownEditor = {
232
- Root: MarkdownEditorRoot,
233
278
  Content: MarkdownEditorContent,
234
279
  Toolbar: MarkdownEditorToolbar,
235
280
  Blocks: MarkdownEditorBlocks,
236
281
  };
237
282
 
238
- export type {
239
- MarkdownEditorRootProps,
240
- MarkdownEditorContentProps,
241
- MarkdownEditorToolbarProps,
242
- MarkdownEditorBlocksProps,
243
- };
283
+ export type { MarkdownEditorContentProps, MarkdownEditorToolbarProps, MarkdownEditorBlocksProps };
284
+
285
+ /** @deprecated Use `MarkdownEditorProviderProps`. */
286
+ export type MarkdownEditorRootProps = MarkdownEditorProviderProps;
@@ -3,56 +3,87 @@
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';
10
11
  import {
11
12
  type EditorMenuGroup,
12
- type EditorSelectionState,
13
- type EditorStateStore,
14
13
  type EditorToolbarState,
15
- type EditorViewMode,
16
14
  type UseTextEditorProps,
15
+ useTextEditor,
16
+ } from '@dxos/react-ui-editor';
17
+ import {
18
+ type EditorSelectionState,
19
+ type EditorStateStore,
20
+ type ThemeExtensionsOptions,
21
+ mobileSlots,
17
22
  createBasicExtensions,
18
23
  createMarkdownExtensions,
19
24
  createThemeExtensions,
20
25
  dropFile,
21
- editorGutter,
22
- editorSlots,
26
+ documentSlots,
23
27
  formattingListener,
24
28
  processEditorPayload,
25
- stackItemContentEditorClassNames,
26
- useTextEditor,
27
- } from '@dxos/react-ui-editor';
29
+ editorClassNames,
30
+ } from '@dxos/ui-editor';
31
+ import { type EditorViewMode } from '@dxos/ui-editor/types';
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
46
  slashCommandGroups?: EditorMenuGroup[];
41
47
  editorStateStore?: EditorStateStore;
42
- toolbarState?: Live<EditorToolbarState>;
48
+ toolbarState?: Atom.Writable<EditorToolbarState>;
43
49
  onLinkQuery?: (query?: string) => Promise<EditorMenuGroup[]>;
44
- } & (Pick<UseTextEditorProps, 'initialValue' | 'extensions'> & Pick<MarkdownEditorToolbarProps, 'onFileUpload'>);
50
+ }> &
51
+ Pick<UseTextEditorProps, 'initialValue' | 'extensions'> &
52
+ Pick<MarkdownEditorToolbarProps, 'onFileUpload'> &
53
+ Pick<ThemeExtensionsOptions, 'slots'>;
45
54
 
55
+ // TODO(burdon): Move controller to Root.
46
56
  export const MarkdownEditorContent = forwardRef<EditorView | null, MarkdownEditorContentProps>(
47
57
  (
48
- { id, role, initialValue, editorStateStore, toolbarState, extensions, viewMode, scrollPastEnd, onFileUpload },
58
+ {
59
+ classNames,
60
+ id,
61
+ attendableId,
62
+ role,
63
+ compact,
64
+ viewMode,
65
+ initialValue,
66
+ editorStateStore,
67
+ toolbarState,
68
+ extensions,
69
+ slots,
70
+ onFileUpload,
71
+ },
49
72
  forwardedRef,
50
73
  ) => {
51
74
  const { t } = useTranslation(meta.id);
52
75
  const { themeMode } = useThemeContext();
76
+ const registry = useContext(RegistryContext);
53
77
 
54
- // TODO(burdon): Toolbar state is not reactive.
55
- const toolbarStateRef = useDynamicRef(toolbarState);
78
+ // Callback to update toolbar state atom.
79
+ const updateToolbarState = useCallback(
80
+ (formatting: EditorToolbarState) => {
81
+ if (toolbarState) {
82
+ registry.set(toolbarState, { ...registry.get(toolbarState), ...formatting });
83
+ }
84
+ },
85
+ [registry, toolbarState],
86
+ );
56
87
 
57
88
  // Restore last selection and scroll point.
58
89
  const { scrollTo, selection } = useMemo<EditorSelectionState>(() => editorStateStore?.getState(id) ?? {}, [id]);
@@ -67,26 +98,23 @@ export const MarkdownEditorContent = forwardRef<EditorView | null, MarkdownEdito
67
98
  id,
68
99
  scrollTo,
69
100
  selection,
70
- // TODO(wittjosiah): Autofocus based on layout is racy.
71
- // autoFocus: layoutPlugin?.provides.layout ? layoutPlugin?.provides.layout.scrollIntoView === id : true,
72
101
  selectionEnd: true,
73
102
  }),
74
103
  initialValue,
75
104
  extensions: [
76
105
  createBasicExtensions({
77
106
  readOnly: viewMode === 'readonly',
78
- placeholder: t('editor placeholder'),
79
- scrollPastEnd: scrollPastEnd && role !== 'section',
107
+ placeholder: t('editor.placeholder'),
108
+ scrollPastEnd: !compact,
80
109
  search: true,
81
110
  }),
82
111
  createThemeExtensions({
83
112
  themeMode,
84
- slots: editorSlots,
113
+ slots: slots ?? (compact ? mobileSlots : documentSlots),
85
114
  syntaxHighlighting: true,
86
115
  }),
87
116
  createMarkdownExtensions(),
88
- formattingListener(() => toolbarStateRef.current),
89
- editorGutter,
117
+ toolbarState && formattingListener(updateToolbarState),
90
118
  role !== 'section' &&
91
119
  onFileUpload &&
92
120
  dropFile({
@@ -102,23 +130,28 @@ export const MarkdownEditorContent = forwardRef<EditorView | null, MarkdownEdito
102
130
  extensions,
103
131
  ].filter(isTruthy),
104
132
  }),
105
- [id, viewMode, themeMode, extensions],
133
+ [id, viewMode, themeMode, extensions, compact],
106
134
  );
107
135
 
108
136
  useImperativeHandle<EditorView | null, EditorView | null>(forwardedRef, () => editorView, [editorView]);
109
137
 
110
- 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]);
111
145
 
112
146
  useTest(editorView);
113
147
 
114
148
  return (
115
149
  <div
116
- role='none'
117
- ref={parentRef}
150
+ {...focusAttributes}
151
+ className={mx(editorClassNames(role), classNames)}
118
152
  data-testid='composer.markdownRoot'
119
- className={stackItemContentEditorClassNames(role)}
120
153
  data-popover-collision-boundary={true}
121
- {...focusAttributes}
154
+ ref={parentRef}
122
155
  />
123
156
  );
124
157
  },
@@ -5,59 +5,43 @@
5
5
  import { type EditorView } from '@codemirror/view';
6
6
  import React, { useCallback, useState } from 'react';
7
7
 
8
- import { type FileInfo } from '@dxos/app-framework';
9
- import { invariant } from '@dxos/invariant';
10
- import { type ThemedClassName } from '@dxos/react-ui';
11
- import { EditorToolbar, type EditorToolbarProps, type EditorViewMode } from '@dxos/react-ui-editor';
8
+ import { type FileInfo } from '@dxos/app-toolkit';
9
+ import { Editor, type EditorToolbarProps } from '@dxos/react-ui-editor';
10
+ import { composable, composableProps } from '@dxos/ui-theme';
12
11
 
13
12
  import { FileUpload, type FileUploadAction } from './FileUpload';
14
13
 
15
- export type MarkdownEditorToolbarProps = ThemedClassName<
16
- {
17
- id: string;
18
- editorView?: EditorView;
19
- onFileUpload?: (file: File) => Promise<FileInfo | undefined>;
20
- } & Pick<EditorToolbarProps, 'role' | 'state' | 'customActions' | 'onViewModeChange'>
21
- >;
22
-
23
- export const MarkdownEditorToolbar = ({
24
- classNames,
25
- id,
26
- role,
27
- state,
28
- editorView,
29
- customActions,
30
- onFileUpload,
31
- onViewModeChange,
32
- }: MarkdownEditorToolbarProps) => {
33
- const [upload, setUpload] = useState<FileUploadAction | null>(null);
34
- const uploadRef = useCallback((next: FileUploadAction) => setUpload(() => next), []);
35
-
36
- const handleViewModeChange = useCallback((mode: EditorViewMode) => onViewModeChange?.(mode), [onViewModeChange]);
37
-
38
- const getView = useCallback(() => {
39
- invariant(editorView);
40
- return editorView;
41
- }, [editorView]);
42
-
43
- if (!editorView) {
44
- return <div />;
45
- }
46
-
47
- return (
48
- <>
49
- <EditorToolbar
50
- classNames={classNames}
51
- attendableId={id}
52
- role={role}
53
- state={state}
54
- customActions={customActions}
55
- getView={getView}
56
- onImageUpload={upload ?? undefined}
57
- onViewModeChange={handleViewModeChange}
58
- />
59
-
60
- {onFileUpload && <FileUpload ref={uploadRef} editorView={editorView} onFileUpload={onFileUpload} />}
61
- </>
62
- );
63
- };
14
+ export type MarkdownEditorToolbarProps = {
15
+ id: string;
16
+ editorView?: EditorView;
17
+ onFileUpload?: (file: File) => Promise<FileInfo | undefined>;
18
+ } & Pick<EditorToolbarProps, 'role' | 'customActions' | 'onAction' | 'onViewModeChange'>;
19
+
20
+ export const MarkdownEditorToolbar = composable<HTMLDivElement, MarkdownEditorToolbarProps>(
21
+ ({ id, role, editorView, customActions, onAction, onFileUpload, onViewModeChange, ...props }, forwardedRef) => {
22
+ const { className, ...rest } = composableProps(props);
23
+ const [upload, setUpload] = useState<FileUploadAction | null>(null);
24
+ const uploadRef = useCallback((next: FileUploadAction) => setUpload(() => next), []);
25
+
26
+ if (!editorView) {
27
+ return <div className={className} {...rest} ref={forwardedRef} />;
28
+ }
29
+
30
+ return (
31
+ <div className='contents' ref={forwardedRef}>
32
+ <Editor.Toolbar
33
+ {...rest}
34
+ classNames={className}
35
+ attendableId={id}
36
+ role={role}
37
+ customActions={customActions}
38
+ onAction={onAction}
39
+ onImageUpload={upload ?? undefined}
40
+ onViewModeChange={onViewModeChange}
41
+ />
42
+
43
+ {onFileUpload && <FileUpload ref={uploadRef} editorView={editorView} onFileUpload={onFileUpload} />}
44
+ </div>
45
+ );
46
+ },
47
+ );