@dxos/plugin-markdown 0.8.4-main.3c1ae3b → 0.8.4-main.3fbcb4aa9b

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 (404) hide show
  1. package/dist/lib/neutral/EditableMarkdownCard-P4F4TIUM.mjs +32 -0
  2. package/dist/lib/neutral/EditableMarkdownCard-P4F4TIUM.mjs.map +7 -0
  3. package/dist/lib/neutral/MarkdownCard-INMBLUL4.mjs +102 -0
  4. package/dist/lib/neutral/MarkdownCard-INMBLUL4.mjs.map +7 -0
  5. package/dist/lib/neutral/MarkdownContainer-2BDGD3PL.mjs +126 -0
  6. package/dist/lib/neutral/MarkdownContainer-2BDGD3PL.mjs.map +7 -0
  7. package/dist/lib/neutral/MarkdownPlugin.mjs +58 -0
  8. package/dist/lib/neutral/MarkdownPlugin.mjs.map +7 -0
  9. package/dist/lib/neutral/MarkdownPlugin.node.mjs +25 -0
  10. package/dist/lib/neutral/MarkdownPlugin.node.mjs.map +7 -0
  11. package/dist/lib/neutral/MarkdownSettings-YCTZJL5V.mjs +32 -0
  12. package/dist/lib/neutral/MarkdownSettings-YCTZJL5V.mjs.map +7 -0
  13. package/dist/lib/{browser/anchor-sort-3MYLO74J.mjs → neutral/anchor-sort-L4VCKDO6.mjs} +9 -9
  14. package/dist/lib/neutral/anchor-sort-L4VCKDO6.mjs.map +7 -0
  15. package/dist/lib/neutral/app-graph-serializer-3XFKP4ER.mjs +56 -0
  16. package/dist/lib/neutral/app-graph-serializer-3XFKP4ER.mjs.map +7 -0
  17. package/dist/lib/neutral/blueprint-definition-33OK2KUL.mjs +15 -0
  18. package/dist/lib/neutral/blueprint-definition-33OK2KUL.mjs.map +7 -0
  19. package/dist/lib/neutral/blueprints/index.mjs +8 -0
  20. package/dist/lib/neutral/capabilities/index.mjs +25 -0
  21. package/dist/lib/neutral/capabilities/index.mjs.map +7 -0
  22. package/dist/lib/neutral/capabilities/node.mjs +11 -0
  23. package/dist/lib/neutral/capabilities/node.mjs.map +7 -0
  24. package/dist/lib/{browser/chunk-BQTYJOFB.mjs → neutral/chunk-3LYCPEVP.mjs} +2 -9
  25. package/dist/lib/neutral/chunk-3LYCPEVP.mjs.map +7 -0
  26. package/dist/lib/neutral/chunk-6N7AD3IU.mjs +8 -0
  27. package/dist/lib/neutral/chunk-6N7AD3IU.mjs.map +7 -0
  28. package/dist/lib/neutral/chunk-J5LGTIGS.mjs +10 -0
  29. package/dist/lib/{browser/chunk-KPH4ZPQN.mjs → neutral/chunk-KDN4GKG2.mjs} +8 -9
  30. package/dist/lib/neutral/chunk-KDN4GKG2.mjs.map +7 -0
  31. package/dist/lib/neutral/chunk-LXNSKCPD.mjs +44 -0
  32. package/dist/lib/neutral/chunk-LXNSKCPD.mjs.map +7 -0
  33. package/dist/lib/neutral/chunk-SOLAMEK3.mjs +276 -0
  34. package/dist/lib/neutral/chunk-SOLAMEK3.mjs.map +7 -0
  35. package/dist/lib/neutral/comment-config-7VTHRUIZ.mjs +30 -0
  36. package/dist/lib/neutral/comment-config-7VTHRUIZ.mjs.map +7 -0
  37. package/dist/lib/neutral/components/index.mjs +370 -0
  38. package/dist/lib/neutral/components/index.mjs.map +7 -0
  39. package/dist/lib/neutral/containers/index.mjs +13 -0
  40. package/dist/lib/neutral/containers/index.mjs.map +7 -0
  41. package/dist/lib/neutral/create-3PGJ2NEK.mjs +28 -0
  42. package/dist/lib/neutral/create-3PGJ2NEK.mjs.map +7 -0
  43. package/dist/lib/neutral/create-markdown-5LS46GMH.mjs +20 -0
  44. package/dist/lib/neutral/create-markdown-5LS46GMH.mjs.map +7 -0
  45. package/dist/lib/neutral/create-object-ZA6VXLJJ.mjs +27 -0
  46. package/dist/lib/neutral/create-object-ZA6VXLJJ.mjs.map +7 -0
  47. package/dist/lib/neutral/hooks/index.mjs +322 -0
  48. package/dist/lib/neutral/hooks/index.mjs.map +7 -0
  49. package/dist/lib/neutral/index.mjs +42 -0
  50. package/dist/lib/neutral/meta.json +1 -0
  51. package/dist/lib/neutral/meta.mjs +8 -0
  52. package/dist/lib/neutral/open-WCYGBLAG.mjs +20 -0
  53. package/dist/lib/neutral/open-WCYGBLAG.mjs.map +7 -0
  54. package/dist/lib/neutral/operation-handler-2ARMPBGZ.mjs +13 -0
  55. package/dist/lib/neutral/operation-handler-2ARMPBGZ.mjs.map +7 -0
  56. package/dist/lib/neutral/operations/index.mjs +8 -0
  57. package/dist/lib/neutral/plugin.mjs +16 -0
  58. package/dist/lib/neutral/plugin.mjs.map +7 -0
  59. package/dist/lib/neutral/react-surface-TB4TY57T.mjs +119 -0
  60. package/dist/lib/neutral/react-surface-TB4TY57T.mjs.map +7 -0
  61. package/dist/lib/neutral/scroll-to-anchor-6FIOKVKT.mjs +47 -0
  62. package/dist/lib/neutral/scroll-to-anchor-6FIOKVKT.mjs.map +7 -0
  63. package/dist/lib/neutral/set-view-mode-37RSPFEN.mjs +24 -0
  64. package/dist/lib/neutral/set-view-mode-37RSPFEN.mjs.map +7 -0
  65. package/dist/lib/neutral/settings-TDGDLCUR.mjs +34 -0
  66. package/dist/lib/neutral/settings-TDGDLCUR.mjs.map +7 -0
  67. package/dist/lib/neutral/state-5COCF5PN.mjs +44 -0
  68. package/dist/lib/neutral/state-5COCF5PN.mjs.map +7 -0
  69. package/dist/lib/neutral/testing.mjs +20 -0
  70. package/dist/lib/neutral/testing.mjs.map +7 -0
  71. package/dist/lib/neutral/translations.mjs +43 -0
  72. package/dist/lib/neutral/translations.mjs.map +7 -0
  73. package/dist/lib/neutral/types/index.mjs +16 -0
  74. package/dist/lib/neutral/update-markdown-5EDRD3SH.mjs +44 -0
  75. package/dist/lib/neutral/update-markdown-5EDRD3SH.mjs.map +7 -0
  76. package/dist/types/src/MarkdownPlugin.d.ts +3 -1
  77. package/dist/types/src/MarkdownPlugin.d.ts.map +1 -1
  78. package/dist/types/src/MarkdownPlugin.node.d.ts +4 -0
  79. package/dist/types/src/MarkdownPlugin.node.d.ts.map +1 -0
  80. package/dist/types/src/MarkdownPlugin.test.d.ts +2 -0
  81. package/dist/types/src/MarkdownPlugin.test.d.ts.map +1 -0
  82. package/dist/types/src/blueprints/index.d.ts +2 -0
  83. package/dist/types/src/blueprints/index.d.ts.map +1 -0
  84. package/dist/types/src/blueprints/markdown-blueprint.d.ts +4 -0
  85. package/dist/types/src/blueprints/markdown-blueprint.d.ts.map +1 -0
  86. package/dist/types/src/capabilities/anchor-sort.d.ts +4 -2
  87. package/dist/types/src/capabilities/anchor-sort.d.ts.map +1 -1
  88. package/dist/types/src/capabilities/app-graph-serializer.d.ts +3 -2
  89. package/dist/types/src/capabilities/app-graph-serializer.d.ts.map +1 -1
  90. package/dist/types/src/capabilities/artifact-definition.d.ts +3 -1
  91. package/dist/types/src/capabilities/artifact-definition.d.ts.map +1 -1
  92. package/dist/types/src/capabilities/blueprint-definition.d.ts +5 -6
  93. package/dist/types/src/capabilities/blueprint-definition.d.ts.map +1 -1
  94. package/dist/types/src/capabilities/comment-config.d.ts +12 -0
  95. package/dist/types/src/capabilities/comment-config.d.ts.map +1 -0
  96. package/dist/types/src/capabilities/create-object.d.ts +11 -0
  97. package/dist/types/src/capabilities/create-object.d.ts.map +1 -0
  98. package/dist/types/src/capabilities/index.d.ts +22 -14
  99. package/dist/types/src/capabilities/index.d.ts.map +1 -1
  100. package/dist/types/src/capabilities/node.d.ts +10 -0
  101. package/dist/types/src/capabilities/node.d.ts.map +1 -0
  102. package/dist/types/src/capabilities/operation-handler.d.ts +6 -0
  103. package/dist/types/src/capabilities/operation-handler.d.ts.map +1 -0
  104. package/dist/types/src/capabilities/react-surface.d.ts +3 -2
  105. package/dist/types/src/capabilities/react-surface.d.ts.map +1 -1
  106. package/dist/types/src/capabilities/settings.d.ts +4 -2
  107. package/dist/types/src/capabilities/settings.d.ts.map +1 -1
  108. package/dist/types/src/capabilities/state.d.ts +4 -9
  109. package/dist/types/src/capabilities/state.d.ts.map +1 -1
  110. package/dist/types/src/components/MarkdownEditor/FileUpload.d.ts +1 -1
  111. package/dist/types/src/components/MarkdownEditor/FileUpload.d.ts.map +1 -1
  112. package/dist/types/src/components/MarkdownEditor/MarkdownEditor.d.ts +34 -22
  113. package/dist/types/src/components/MarkdownEditor/MarkdownEditor.d.ts.map +1 -1
  114. package/dist/types/src/components/MarkdownEditor/MarkdownEditor.stories.d.ts +3 -3
  115. package/dist/types/src/components/MarkdownEditor/MarkdownEditor.stories.d.ts.map +1 -1
  116. package/dist/types/src/components/MarkdownEditor/MarkdownEditorContent.d.ts +11 -7
  117. package/dist/types/src/components/MarkdownEditor/MarkdownEditorContent.d.ts.map +1 -1
  118. package/dist/types/src/components/MarkdownEditor/MarkdownEditorToolbar.d.ts +6 -5
  119. package/dist/types/src/components/MarkdownEditor/MarkdownEditorToolbar.d.ts.map +1 -1
  120. package/dist/types/src/components/MarkdownSettings/MarkdownSettings.d.ts +4 -4
  121. package/dist/types/src/components/MarkdownSettings/MarkdownSettings.d.ts.map +1 -1
  122. package/dist/types/src/components/MarkdownSettings/MarkdownSettings.stories.d.ts +94 -0
  123. package/dist/types/src/components/MarkdownSettings/MarkdownSettings.stories.d.ts.map +1 -0
  124. package/dist/types/src/components/MarkdownSettings/index.d.ts +1 -1
  125. package/dist/types/src/components/MarkdownSettings/index.d.ts.map +1 -1
  126. package/dist/types/src/components/index.d.ts +3 -8
  127. package/dist/types/src/components/index.d.ts.map +1 -1
  128. package/dist/types/src/containers/EditableMarkdownCard/EditableMarkdownCard.d.ts +15 -0
  129. package/dist/types/src/containers/EditableMarkdownCard/EditableMarkdownCard.d.ts.map +1 -0
  130. package/dist/types/src/containers/EditableMarkdownCard/index.d.ts +3 -0
  131. package/dist/types/src/containers/EditableMarkdownCard/index.d.ts.map +1 -0
  132. package/dist/types/src/containers/MarkdownCard/MarkdownCard.d.ts +8 -0
  133. package/dist/types/src/containers/MarkdownCard/MarkdownCard.d.ts.map +1 -0
  134. package/dist/types/src/containers/MarkdownCard/MarkdownCard.stories.d.ts +9 -0
  135. package/dist/types/src/containers/MarkdownCard/MarkdownCard.stories.d.ts.map +1 -0
  136. package/dist/types/src/containers/MarkdownCard/index.d.ts +2 -0
  137. package/dist/types/src/containers/MarkdownCard/index.d.ts.map +1 -0
  138. package/dist/types/src/containers/MarkdownCard/snippet.d.ts +17 -0
  139. package/dist/types/src/containers/MarkdownCard/snippet.d.ts.map +1 -0
  140. package/dist/types/src/containers/MarkdownContainer/MarkdownContainer.d.ts +36 -0
  141. package/dist/types/src/containers/MarkdownContainer/MarkdownContainer.d.ts.map +1 -0
  142. package/dist/types/src/containers/MarkdownContainer/MarkdownContainer.stories.d.ts +97 -0
  143. package/dist/types/src/containers/MarkdownContainer/MarkdownContainer.stories.d.ts.map +1 -0
  144. package/dist/types/src/containers/MarkdownContainer/index.d.ts +3 -0
  145. package/dist/types/src/containers/MarkdownContainer/index.d.ts.map +1 -0
  146. package/dist/types/src/containers/index.d.ts +6 -0
  147. package/dist/types/src/containers/index.d.ts.map +1 -0
  148. package/dist/types/src/hooks/index.d.ts +0 -1
  149. package/dist/types/src/hooks/index.d.ts.map +1 -1
  150. package/dist/types/src/hooks/useEditorMenuOptions.d.ts.map +1 -1
  151. package/dist/types/src/hooks/useExtensions.d.ts +10 -6
  152. package/dist/types/src/hooks/useExtensions.d.ts.map +1 -1
  153. package/dist/types/src/hooks/useLinkQuery.d.ts +2 -2
  154. package/dist/types/src/hooks/useLinkQuery.d.ts.map +1 -1
  155. package/dist/types/src/index.d.ts +2 -3
  156. package/dist/types/src/index.d.ts.map +1 -1
  157. package/dist/types/src/meta.d.ts +2 -2
  158. package/dist/types/src/meta.d.ts.map +1 -1
  159. package/dist/types/src/operations/create-markdown.d.ts +5 -0
  160. package/dist/types/src/operations/create-markdown.d.ts.map +1 -0
  161. package/dist/types/src/operations/create.d.ts +5 -0
  162. package/dist/types/src/operations/create.d.ts.map +1 -0
  163. package/dist/types/src/operations/create.test.d.ts.map +1 -0
  164. package/dist/types/src/operations/index.d.ts +3 -0
  165. package/dist/types/src/operations/index.d.ts.map +1 -0
  166. package/dist/types/src/operations/open.d.ts +5 -0
  167. package/dist/types/src/operations/open.d.ts.map +1 -0
  168. package/dist/types/src/operations/scroll-to-anchor.d.ts +5 -0
  169. package/dist/types/src/operations/scroll-to-anchor.d.ts.map +1 -0
  170. package/dist/types/src/operations/set-view-mode.d.ts +5 -0
  171. package/dist/types/src/operations/set-view-mode.d.ts.map +1 -0
  172. package/dist/types/src/operations/update-markdown.d.ts +5 -0
  173. package/dist/types/src/operations/update-markdown.d.ts.map +1 -0
  174. package/dist/types/src/operations/update.test.d.ts.map +1 -0
  175. package/dist/types/src/plugin.d.ts +4 -0
  176. package/dist/types/src/plugin.d.ts.map +1 -0
  177. package/dist/types/src/testing.d.ts.map +1 -1
  178. package/dist/types/src/translations.d.ts +74 -37
  179. package/dist/types/src/translations.d.ts.map +1 -1
  180. package/dist/types/src/types/Markdown.d.ts +28 -28
  181. package/dist/types/src/types/Markdown.d.ts.map +1 -1
  182. package/dist/types/src/types/MarkdownCapabilities.d.ts +32 -0
  183. package/dist/types/src/types/MarkdownCapabilities.d.ts.map +1 -0
  184. package/dist/types/src/types/MarkdownEvents.d.ts +3 -0
  185. package/dist/types/src/types/MarkdownEvents.d.ts.map +1 -0
  186. package/dist/types/src/types/MarkdownOperation.d.ts +64 -0
  187. package/dist/types/src/types/MarkdownOperation.d.ts.map +1 -0
  188. package/dist/types/src/types/Settings.d.ts +17 -0
  189. package/dist/types/src/types/Settings.d.ts.map +1 -0
  190. package/dist/types/src/types/index.d.ts +5 -2
  191. package/dist/types/src/types/index.d.ts.map +1 -1
  192. package/dist/types/src/types/types.d.ts +3 -2
  193. package/dist/types/src/types/types.d.ts.map +1 -1
  194. package/dist/types/src/util.d.ts +3 -3
  195. package/dist/types/src/util.d.ts.map +1 -1
  196. package/dist/types/tsconfig.tsbuildinfo +1 -1
  197. package/package.json +147 -85
  198. package/src/MarkdownPlugin.node.ts +20 -0
  199. package/src/MarkdownPlugin.test.ts +26 -0
  200. package/src/MarkdownPlugin.tsx +33 -85
  201. package/src/blueprints/index.ts +5 -0
  202. package/src/blueprints/markdown-blueprint.ts +43 -0
  203. package/src/capabilities/anchor-sort.ts +26 -20
  204. package/src/capabilities/app-graph-serializer.ts +52 -42
  205. package/src/capabilities/artifact-definition.ts +82 -84
  206. package/src/capabilities/blueprint-definition.ts +11 -35
  207. package/src/capabilities/comment-config.ts +32 -0
  208. package/src/capabilities/create-object.ts +30 -0
  209. package/src/capabilities/index.ts +15 -11
  210. package/src/capabilities/node.ts +13 -0
  211. package/src/capabilities/operation-handler.ts +16 -0
  212. package/src/capabilities/react-surface.tsx +112 -82
  213. package/src/capabilities/settings.ts +30 -18
  214. package/src/capabilities/state.ts +41 -25
  215. package/src/components/MarkdownEditor/FileUpload.tsx +2 -2
  216. package/src/components/MarkdownEditor/MarkdownEditor.stories.tsx +47 -43
  217. package/src/components/MarkdownEditor/MarkdownEditor.tsx +146 -103
  218. package/src/components/MarkdownEditor/MarkdownEditorContent.tsx +49 -32
  219. package/src/components/MarkdownEditor/MarkdownEditorToolbar.tsx +37 -53
  220. package/src/components/MarkdownSettings/MarkdownSettings.stories.tsx +40 -0
  221. package/src/components/MarkdownSettings/MarkdownSettings.tsx +23 -96
  222. package/src/components/MarkdownSettings/index.ts +1 -1
  223. package/src/components/index.ts +4 -12
  224. package/src/containers/EditableMarkdownCard/EditableMarkdownCard.tsx +42 -0
  225. package/src/containers/EditableMarkdownCard/index.ts +6 -0
  226. package/src/containers/MarkdownCard/MarkdownCard.stories.tsx +68 -0
  227. package/src/containers/MarkdownCard/MarkdownCard.tsx +67 -0
  228. package/src/containers/MarkdownCard/index.ts +5 -0
  229. package/src/containers/MarkdownCard/snippet.ts +54 -0
  230. package/src/containers/MarkdownContainer/MarkdownContainer.stories.tsx +135 -0
  231. package/src/containers/MarkdownContainer/MarkdownContainer.tsx +146 -0
  232. package/src/containers/MarkdownContainer/index.ts +6 -0
  233. package/src/containers/index.ts +11 -0
  234. package/src/hooks/index.ts +0 -1
  235. package/src/hooks/useEditorMenuOptions.ts +11 -14
  236. package/src/hooks/useExtensions.tsx +95 -112
  237. package/src/hooks/useLinkQuery.ts +42 -33
  238. package/src/index.ts +2 -5
  239. package/src/meta.ts +3 -3
  240. package/src/operations/create-markdown.ts +19 -0
  241. package/src/operations/create.conversations.json +1 -0
  242. package/src/operations/create.test.ts +97 -0
  243. package/src/operations/create.ts +26 -0
  244. package/src/operations/index.ts +14 -0
  245. package/src/operations/open.ts +25 -0
  246. package/src/operations/scroll-to-anchor.ts +38 -0
  247. package/src/operations/set-view-mode.ts +23 -0
  248. package/src/operations/update-markdown.ts +51 -0
  249. package/src/operations/update.conversations.json +1 -0
  250. package/src/operations/update.test.ts +214 -0
  251. package/src/plugin.ts +11 -0
  252. package/src/testing.ts +2 -2
  253. package/src/translations.ts +26 -36
  254. package/src/types/Markdown.ts +24 -26
  255. package/src/types/MarkdownCapabilities.ts +51 -0
  256. package/src/types/MarkdownEvents.ts +14 -0
  257. package/src/types/MarkdownOperation.ts +122 -0
  258. package/src/types/Settings.ts +65 -0
  259. package/src/types/index.ts +6 -3
  260. package/src/types/types.ts +7 -3
  261. package/src/util.tsx +7 -5
  262. package/dist/lib/browser/MarkdownCard-THZFDOOV.mjs +0 -13
  263. package/dist/lib/browser/MarkdownContainer-VKPSVI5F.mjs +0 -16
  264. package/dist/lib/browser/anchor-sort-3MYLO74J.mjs.map +0 -7
  265. package/dist/lib/browser/app-graph-serializer-BZJ4TQOE.mjs +0 -51
  266. package/dist/lib/browser/app-graph-serializer-BZJ4TQOE.mjs.map +0 -7
  267. package/dist/lib/browser/blueprint-definition-R5T6LTPN.mjs +0 -13
  268. package/dist/lib/browser/chunk-56SUMOIZ.mjs +0 -734
  269. package/dist/lib/browser/chunk-56SUMOIZ.mjs.map +0 -7
  270. package/dist/lib/browser/chunk-6OMOMVO7.mjs +0 -107
  271. package/dist/lib/browser/chunk-6OMOMVO7.mjs.map +0 -7
  272. package/dist/lib/browser/chunk-BQTYJOFB.mjs.map +0 -7
  273. package/dist/lib/browser/chunk-CN35HEBX.mjs +0 -79
  274. package/dist/lib/browser/chunk-CN35HEBX.mjs.map +0 -7
  275. package/dist/lib/browser/chunk-IBCHVMZW.mjs +0 -16
  276. package/dist/lib/browser/chunk-IBCHVMZW.mjs.map +0 -7
  277. package/dist/lib/browser/chunk-KCOBZZIL.mjs +0 -111
  278. package/dist/lib/browser/chunk-KCOBZZIL.mjs.map +0 -7
  279. package/dist/lib/browser/chunk-KPH4ZPQN.mjs.map +0 -7
  280. package/dist/lib/browser/chunk-NXT2E2BG.mjs +0 -57
  281. package/dist/lib/browser/chunk-NXT2E2BG.mjs.map +0 -7
  282. package/dist/lib/browser/chunk-RJPOHSYN.mjs +0 -152
  283. package/dist/lib/browser/chunk-RJPOHSYN.mjs.map +0 -7
  284. package/dist/lib/browser/chunk-U6Y53XZK.mjs +0 -20
  285. package/dist/lib/browser/chunk-U6Y53XZK.mjs.map +0 -7
  286. package/dist/lib/browser/index.mjs +0 -160
  287. package/dist/lib/browser/index.mjs.map +0 -7
  288. package/dist/lib/browser/intent-resolver-55ASQRIW.mjs +0 -62
  289. package/dist/lib/browser/intent-resolver-55ASQRIW.mjs.map +0 -7
  290. package/dist/lib/browser/meta.json +0 -1
  291. package/dist/lib/browser/react-surface-Q3C5H2KT.mjs +0 -215
  292. package/dist/lib/browser/react-surface-Q3C5H2KT.mjs.map +0 -7
  293. package/dist/lib/browser/settings-G3ZOXJQY.mjs +0 -28
  294. package/dist/lib/browser/settings-G3ZOXJQY.mjs.map +0 -7
  295. package/dist/lib/browser/state-BTUKVZHY.mjs +0 -37
  296. package/dist/lib/browser/state-BTUKVZHY.mjs.map +0 -7
  297. package/dist/lib/browser/toolkit.mjs +0 -13
  298. package/dist/lib/browser/types/index.mjs +0 -10
  299. package/dist/lib/node-esm/MarkdownCard-QHSSZGIY.mjs +0 -14
  300. package/dist/lib/node-esm/MarkdownCard-QHSSZGIY.mjs.map +0 -7
  301. package/dist/lib/node-esm/MarkdownContainer-G3ZQJS7A.mjs +0 -17
  302. package/dist/lib/node-esm/MarkdownContainer-G3ZQJS7A.mjs.map +0 -7
  303. package/dist/lib/node-esm/anchor-sort-W4HCTYUQ.mjs +0 -33
  304. package/dist/lib/node-esm/anchor-sort-W4HCTYUQ.mjs.map +0 -7
  305. package/dist/lib/node-esm/app-graph-serializer-OCTHXWLF.mjs +0 -52
  306. package/dist/lib/node-esm/app-graph-serializer-OCTHXWLF.mjs.map +0 -7
  307. package/dist/lib/node-esm/blueprint-definition-2JV3WV22.mjs +0 -14
  308. package/dist/lib/node-esm/blueprint-definition-2JV3WV22.mjs.map +0 -7
  309. package/dist/lib/node-esm/chunk-6F6FCTIA.mjs +0 -100
  310. package/dist/lib/node-esm/chunk-6F6FCTIA.mjs.map +0 -7
  311. package/dist/lib/node-esm/chunk-C5KXP2ZE.mjs +0 -153
  312. package/dist/lib/node-esm/chunk-C5KXP2ZE.mjs.map +0 -7
  313. package/dist/lib/node-esm/chunk-FR6RW6DH.mjs +0 -735
  314. package/dist/lib/node-esm/chunk-FR6RW6DH.mjs.map +0 -7
  315. package/dist/lib/node-esm/chunk-GMMVSXQ6.mjs +0 -17
  316. package/dist/lib/node-esm/chunk-GMMVSXQ6.mjs.map +0 -7
  317. package/dist/lib/node-esm/chunk-I5JSQBPI.mjs +0 -58
  318. package/dist/lib/node-esm/chunk-I5JSQBPI.mjs.map +0 -7
  319. package/dist/lib/node-esm/chunk-KM7KYV6W.mjs +0 -22
  320. package/dist/lib/node-esm/chunk-KM7KYV6W.mjs.map +0 -7
  321. package/dist/lib/node-esm/chunk-KYWXTMKI.mjs +0 -108
  322. package/dist/lib/node-esm/chunk-KYWXTMKI.mjs.map +0 -7
  323. package/dist/lib/node-esm/chunk-R3SGV4ES.mjs +0 -112
  324. package/dist/lib/node-esm/chunk-R3SGV4ES.mjs.map +0 -7
  325. package/dist/lib/node-esm/chunk-SHAMSMKQ.mjs +0 -29
  326. package/dist/lib/node-esm/chunk-SHAMSMKQ.mjs.map +0 -7
  327. package/dist/lib/node-esm/chunk-YFRTKXTB.mjs +0 -80
  328. package/dist/lib/node-esm/chunk-YFRTKXTB.mjs.map +0 -7
  329. package/dist/lib/node-esm/index.mjs +0 -161
  330. package/dist/lib/node-esm/index.mjs.map +0 -7
  331. package/dist/lib/node-esm/intent-resolver-DTBVWCNO.mjs +0 -63
  332. package/dist/lib/node-esm/intent-resolver-DTBVWCNO.mjs.map +0 -7
  333. package/dist/lib/node-esm/meta.json +0 -1
  334. package/dist/lib/node-esm/react-surface-QWRT4SD6.mjs +0 -216
  335. package/dist/lib/node-esm/react-surface-QWRT4SD6.mjs.map +0 -7
  336. package/dist/lib/node-esm/settings-IBFFCGNL.mjs +0 -29
  337. package/dist/lib/node-esm/settings-IBFFCGNL.mjs.map +0 -7
  338. package/dist/lib/node-esm/state-K6EH7SRZ.mjs +0 -38
  339. package/dist/lib/node-esm/state-K6EH7SRZ.mjs.map +0 -7
  340. package/dist/lib/node-esm/toolkit.mjs +0 -14
  341. package/dist/lib/node-esm/toolkit.mjs.map +0 -7
  342. package/dist/lib/node-esm/types/index.mjs +0 -11
  343. package/dist/types/src/capabilities/capabilities.d.ts +0 -12
  344. package/dist/types/src/capabilities/capabilities.d.ts.map +0 -1
  345. package/dist/types/src/capabilities/intent-resolver.d.ts +0 -4
  346. package/dist/types/src/capabilities/intent-resolver.d.ts.map +0 -1
  347. package/dist/types/src/components/MarkdownCard/MarkdownCard.d.ts +0 -20
  348. package/dist/types/src/components/MarkdownCard/MarkdownCard.d.ts.map +0 -1
  349. package/dist/types/src/components/MarkdownCard/MarkdownCard.stories.d.ts +0 -9
  350. package/dist/types/src/components/MarkdownCard/MarkdownCard.stories.d.ts.map +0 -1
  351. package/dist/types/src/components/MarkdownCard/index.d.ts +0 -4
  352. package/dist/types/src/components/MarkdownCard/index.d.ts.map +0 -1
  353. package/dist/types/src/components/MarkdownContainer.d.ts +0 -19
  354. package/dist/types/src/components/MarkdownContainer.d.ts.map +0 -1
  355. package/dist/types/src/components/MarkdownContainer.stories.d.ts +0 -59
  356. package/dist/types/src/components/MarkdownContainer.stories.d.ts.map +0 -1
  357. package/dist/types/src/components/Suggestions.stories.d.ts +0 -11
  358. package/dist/types/src/components/Suggestions.stories.d.ts.map +0 -1
  359. package/dist/types/src/events.d.ts +0 -4
  360. package/dist/types/src/events.d.ts.map +0 -1
  361. package/dist/types/src/functions/create.d.ts +0 -8
  362. package/dist/types/src/functions/create.d.ts.map +0 -1
  363. package/dist/types/src/functions/create.test.d.ts.map +0 -1
  364. package/dist/types/src/functions/index.d.ts +0 -18
  365. package/dist/types/src/functions/index.d.ts.map +0 -1
  366. package/dist/types/src/functions/open.d.ts +0 -7
  367. package/dist/types/src/functions/open.d.ts.map +0 -1
  368. package/dist/types/src/functions/update.d.ts +0 -6
  369. package/dist/types/src/functions/update.d.ts.map +0 -1
  370. package/dist/types/src/functions/update.test.d.ts.map +0 -1
  371. package/dist/types/src/hooks/useSelectCurrentThread.d.ts +0 -6
  372. package/dist/types/src/hooks/useSelectCurrentThread.d.ts.map +0 -1
  373. package/dist/types/src/toolkit.d.ts +0 -3
  374. package/dist/types/src/toolkit.d.ts.map +0 -1
  375. package/dist/types/src/types/MarkdownAction.d.ts +0 -34
  376. package/dist/types/src/types/MarkdownAction.d.ts.map +0 -1
  377. package/src/capabilities/capabilities.ts +0 -22
  378. package/src/capabilities/intent-resolver.ts +0 -58
  379. package/src/components/MarkdownCard/MarkdownCard.stories.tsx +0 -76
  380. package/src/components/MarkdownCard/MarkdownCard.tsx +0 -96
  381. package/src/components/MarkdownCard/index.ts +0 -9
  382. package/src/components/MarkdownContainer.stories.tsx +0 -136
  383. package/src/components/MarkdownContainer.tsx +0 -108
  384. package/src/components/Suggestions.stories.tsx +0 -226
  385. package/src/events.ts +0 -11
  386. package/src/functions/create.conversations.json +0 -1
  387. package/src/functions/create.test.ts +0 -124
  388. package/src/functions/create.ts +0 -34
  389. package/src/functions/index.ts +0 -13
  390. package/src/functions/open.ts +0 -33
  391. package/src/functions/update.conversations.json +0 -1
  392. package/src/functions/update.test.ts +0 -147
  393. package/src/functions/update.ts +0 -38
  394. package/src/hooks/useSelectCurrentThread.tsx +0 -66
  395. package/src/toolkit.ts +0 -6
  396. package/src/types/MarkdownAction.ts +0 -29
  397. /package/dist/lib/{browser/types → neutral/blueprints}/index.mjs.map +0 -0
  398. /package/dist/lib/{browser/MarkdownCard-THZFDOOV.mjs.map → neutral/chunk-J5LGTIGS.mjs.map} +0 -0
  399. /package/dist/lib/{node-esm/types → neutral}/index.mjs.map +0 -0
  400. /package/dist/lib/{browser/MarkdownContainer-VKPSVI5F.mjs.map → neutral/meta.mjs.map} +0 -0
  401. /package/dist/lib/{browser/blueprint-definition-R5T6LTPN.mjs.map → neutral/operations/index.mjs.map} +0 -0
  402. /package/dist/lib/{browser/toolkit.mjs.map → neutral/types/index.mjs.map} +0 -0
  403. /package/dist/types/src/{functions → operations}/create.test.d.ts +0 -0
  404. /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
- editorView,
158
- setEditorView,
159
- viewMode,
160
- toolbarState,
161
- extensions,
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}
197
+ attendableId={attendableId}
198
+ compact={compact}
170
199
  viewMode={viewMode}
171
- toolbarState={toolbarState}
200
+ toolbarState={state as Atom.Writable<EditorToolbarState>}
172
201
  extensions={extensions}
173
- ref={setEditorView}
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);
224
+
225
+ const { controller } = useEditorContext(MARKDOWN_EDITOR_TOOLBAR_NAME);
192
226
 
193
- return <NaturalMarkdownToolbar {...props} {...rootProps} state={toolbarState} />;
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);
265
+ const dxn = DXN.parse(link.dxn);
221
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,73 +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 { type ThemedClassName, 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,
13
+ type EditorToolbarState,
14
+ type UseTextEditorProps,
15
+ useTextEditor,
16
+ } from '@dxos/react-ui-editor';
17
+ import {
12
18
  type EditorSelectionState,
13
19
  type EditorStateStore,
14
- type EditorToolbarState,
15
- type EditorViewMode,
16
20
  type ThemeExtensionsOptions,
17
- type UseTextEditorProps,
21
+ mobileSlots,
18
22
  createBasicExtensions,
19
23
  createMarkdownExtensions,
20
24
  createThemeExtensions,
21
25
  dropFile,
22
- editorSlots,
26
+ documentSlots,
23
27
  formattingListener,
24
28
  processEditorPayload,
25
- stackItemContentEditorClassNames,
26
- useTextEditor,
27
- } from '@dxos/react-ui-editor';
28
- import { mx } from '@dxos/react-ui-theme';
29
+ editorClassNames,
30
+ } from '@dxos/ui-editor';
31
+ import { type EditorViewMode } from '@dxos/ui-editor/types';
32
+ import { mx } from '@dxos/ui-theme';
29
33
  import { isTruthy } from '@dxos/util';
30
34
 
31
- import { useSelectCurrentThread } from '../../hooks';
32
- import { meta } from '../../meta';
35
+ import { meta } from '#meta';
36
+ import { MarkdownCapabilities } from '#types';
33
37
 
34
38
  import { type MarkdownEditorToolbarProps } from './MarkdownEditorToolbar';
35
39
 
36
40
  export type MarkdownEditorContentProps = ThemedClassName<{
37
41
  id: string;
42
+ attendableId?: string;
38
43
  role?: string;
44
+ compact?: boolean;
39
45
  viewMode?: EditorViewMode;
40
- scrollPastEnd?: boolean;
41
46
  slashCommandGroups?: EditorMenuGroup[];
42
47
  editorStateStore?: EditorStateStore;
43
- toolbarState?: Live<EditorToolbarState>;
48
+ toolbarState?: Atom.Writable<EditorToolbarState>;
44
49
  onLinkQuery?: (query?: string) => Promise<EditorMenuGroup[]>;
45
50
  }> &
46
- // prettier-ignore
47
51
  Pick<UseTextEditorProps, 'initialValue' | 'extensions'> &
48
52
  Pick<MarkdownEditorToolbarProps, 'onFileUpload'> &
49
53
  Pick<ThemeExtensionsOptions, 'slots'>;
50
54
 
55
+ // TODO(burdon): Move controller to Root.
51
56
  export const MarkdownEditorContent = forwardRef<EditorView | null, MarkdownEditorContentProps>(
52
57
  (
53
58
  {
54
59
  classNames,
55
60
  id,
61
+ attendableId,
56
62
  role,
63
+ compact,
57
64
  viewMode,
58
65
  initialValue,
59
66
  editorStateStore,
60
67
  toolbarState,
61
68
  extensions,
62
- scrollPastEnd,
63
- slots = editorSlots,
69
+ slots,
64
70
  onFileUpload,
65
71
  },
66
72
  forwardedRef,
67
73
  ) => {
68
74
  const { t } = useTranslation(meta.id);
69
75
  const { themeMode } = useThemeContext();
76
+ const registry = useContext(RegistryContext);
70
77
 
71
- // TODO(burdon): Toolbar state is not reactive.
72
- 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
+ );
73
87
 
74
88
  // Restore last selection and scroll point.
75
89
  const { scrollTo, selection } = useMemo<EditorSelectionState>(() => editorStateStore?.getState(id) ?? {}, [id]);
@@ -84,25 +98,23 @@ export const MarkdownEditorContent = forwardRef<EditorView | null, MarkdownEdito
84
98
  id,
85
99
  scrollTo,
86
100
  selection,
87
- // TODO(wittjosiah): Autofocus based on layout is racy.
88
- // autoFocus: layoutPlugin?.provides.layout ? layoutPlugin?.provides.layout.scrollIntoView === id : true,
89
101
  selectionEnd: true,
90
102
  }),
91
103
  initialValue,
92
104
  extensions: [
93
105
  createBasicExtensions({
94
106
  readOnly: viewMode === 'readonly',
95
- placeholder: t('editor placeholder'),
96
- scrollPastEnd: scrollPastEnd && role !== 'section',
107
+ placeholder: t('editor.placeholder'),
108
+ scrollPastEnd: !compact,
97
109
  search: true,
98
110
  }),
99
111
  createThemeExtensions({
100
112
  themeMode,
101
- slots,
113
+ slots: slots ?? (compact ? mobileSlots : documentSlots),
102
114
  syntaxHighlighting: true,
103
115
  }),
104
116
  createMarkdownExtensions(),
105
- formattingListener(() => toolbarStateRef.current),
117
+ toolbarState && formattingListener(updateToolbarState),
106
118
  role !== 'section' &&
107
119
  onFileUpload &&
108
120
  dropFile({
@@ -118,23 +130,28 @@ export const MarkdownEditorContent = forwardRef<EditorView | null, MarkdownEdito
118
130
  extensions,
119
131
  ].filter(isTruthy),
120
132
  }),
121
- [id, viewMode, themeMode, extensions],
133
+ [id, viewMode, themeMode, extensions, compact],
122
134
  );
123
135
 
124
136
  useImperativeHandle<EditorView | null, EditorView | null>(forwardedRef, () => editorView, [editorView]);
125
137
 
126
- 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]);
127
145
 
128
146
  useTest(editorView);
129
147
 
130
148
  return (
131
149
  <div
132
- role='none'
133
- ref={parentRef}
150
+ {...focusAttributes}
151
+ className={mx(editorClassNames(role), classNames)}
134
152
  data-testid='composer.markdownRoot'
135
- className={mx(stackItemContentEditorClassNames(role), classNames)}
136
153
  data-popover-collision-boundary={true}
137
- {...focusAttributes}
154
+ ref={parentRef}
138
155
  />
139
156
  );
140
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
+ );