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

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 (362) hide show
  1. package/dist/lib/browser/MarkdownCard-WHK3ORP7.mjs +12 -0
  2. package/dist/lib/browser/MarkdownContainer-V7EAADMF.mjs +12 -0
  3. package/dist/lib/browser/anchor-sort-WQ3TL7ZI.mjs +32 -0
  4. package/dist/lib/browser/anchor-sort-WQ3TL7ZI.mjs.map +7 -0
  5. package/dist/lib/browser/app-graph-serializer-ULZUJKOD.mjs +58 -0
  6. package/dist/lib/browser/app-graph-serializer-ULZUJKOD.mjs.map +7 -0
  7. package/dist/lib/browser/blueprint-definition-TLV4PNZW.mjs +19 -0
  8. package/dist/lib/browser/blueprint-definition-TLV4PNZW.mjs.map +7 -0
  9. package/dist/lib/browser/blueprints/index.mjs +8 -0
  10. package/dist/lib/browser/chunk-BX73DASG.mjs +702 -0
  11. package/dist/lib/browser/chunk-BX73DASG.mjs.map +7 -0
  12. package/dist/lib/browser/chunk-CUGDX7KA.mjs +8 -0
  13. package/dist/lib/browser/chunk-CUGDX7KA.mjs.map +7 -0
  14. package/dist/lib/browser/chunk-FWQQW6KU.mjs +144 -0
  15. package/dist/lib/browser/chunk-FWQQW6KU.mjs.map +7 -0
  16. package/dist/lib/browser/{chunk-A3CQYGCN.mjs → chunk-JOXYQLKH.mjs} +5 -6
  17. package/dist/lib/browser/chunk-JOXYQLKH.mjs.map +7 -0
  18. package/dist/lib/browser/chunk-KDKXFKDN.mjs +104 -0
  19. package/dist/lib/browser/chunk-KDKXFKDN.mjs.map +7 -0
  20. package/dist/lib/browser/chunk-LMO5UVKL.mjs +167 -0
  21. package/dist/lib/browser/chunk-LMO5UVKL.mjs.map +7 -0
  22. package/dist/lib/browser/chunk-S45ULIOG.mjs +101 -0
  23. package/dist/lib/browser/chunk-S45ULIOG.mjs.map +7 -0
  24. package/dist/lib/browser/chunk-WIPSLZ6L.mjs +60 -0
  25. package/dist/lib/browser/chunk-WIPSLZ6L.mjs.map +7 -0
  26. package/dist/lib/browser/cli/index.mjs +32 -0
  27. package/dist/lib/browser/cli/index.mjs.map +7 -0
  28. package/dist/lib/browser/index.mjs +122 -144
  29. package/dist/lib/browser/index.mjs.map +4 -4
  30. package/dist/lib/browser/meta.json +1 -1
  31. package/dist/lib/browser/operation-resolver-EGCWOQKJ.mjs +53 -0
  32. package/dist/lib/browser/operation-resolver-EGCWOQKJ.mjs.map +7 -0
  33. package/dist/lib/browser/react-surface-SRPLD3ED.mjs +213 -0
  34. package/dist/lib/browser/react-surface-SRPLD3ED.mjs.map +7 -0
  35. package/dist/lib/browser/settings-JY5JE7MI.mjs +35 -0
  36. package/dist/lib/browser/settings-JY5JE7MI.mjs.map +7 -0
  37. package/dist/lib/browser/state-QE7VSJWJ.mjs +29 -0
  38. package/dist/lib/browser/state-QE7VSJWJ.mjs.map +7 -0
  39. package/dist/lib/browser/types/index.mjs +10 -3
  40. package/dist/lib/node-esm/{MarkdownCard-MCWEFW4F.mjs → MarkdownCard-WJPLQTFS.mjs} +5 -5
  41. package/dist/lib/node-esm/MarkdownContainer-LUSMORP2.mjs +13 -0
  42. package/dist/lib/node-esm/{anchor-sort-4SXYVYXT.mjs → anchor-sort-G7D5TAI6.mjs} +12 -12
  43. package/dist/lib/node-esm/anchor-sort-G7D5TAI6.mjs.map +7 -0
  44. package/dist/lib/node-esm/app-graph-serializer-W5YMQP7P.mjs +59 -0
  45. package/dist/lib/node-esm/app-graph-serializer-W5YMQP7P.mjs.map +7 -0
  46. package/dist/lib/node-esm/blueprint-definition-HYFA7BKQ.mjs +20 -0
  47. package/dist/lib/node-esm/blueprint-definition-HYFA7BKQ.mjs.map +7 -0
  48. package/dist/lib/node-esm/blueprints/index.mjs +9 -0
  49. package/dist/lib/node-esm/chunk-3JYPCC7M.mjs +105 -0
  50. package/dist/lib/node-esm/chunk-3JYPCC7M.mjs.map +7 -0
  51. package/dist/lib/node-esm/{chunk-SJ2QRGPM.mjs → chunk-44VJC3QF.mjs} +5 -6
  52. package/dist/lib/node-esm/chunk-44VJC3QF.mjs.map +7 -0
  53. package/dist/lib/node-esm/chunk-D4BCFPKK.mjs +703 -0
  54. package/dist/lib/node-esm/chunk-D4BCFPKK.mjs.map +7 -0
  55. package/dist/lib/node-esm/chunk-EYAFC4N7.mjs +145 -0
  56. package/dist/lib/node-esm/chunk-EYAFC4N7.mjs.map +7 -0
  57. package/dist/lib/node-esm/chunk-PRV35A7Z.mjs +168 -0
  58. package/dist/lib/node-esm/chunk-PRV35A7Z.mjs.map +7 -0
  59. package/dist/lib/node-esm/chunk-RQP7G7XW.mjs +61 -0
  60. package/dist/lib/node-esm/chunk-RQP7G7XW.mjs.map +7 -0
  61. package/dist/lib/node-esm/chunk-SDTYEGGL.mjs +102 -0
  62. package/dist/lib/node-esm/chunk-SDTYEGGL.mjs.map +7 -0
  63. package/dist/lib/node-esm/chunk-W3IIKDV5.mjs +10 -0
  64. package/dist/lib/node-esm/chunk-W3IIKDV5.mjs.map +7 -0
  65. package/dist/lib/node-esm/cli/index.mjs +33 -0
  66. package/dist/lib/node-esm/cli/index.mjs.map +7 -0
  67. package/dist/lib/node-esm/index.mjs +122 -144
  68. package/dist/lib/node-esm/index.mjs.map +4 -4
  69. package/dist/lib/node-esm/meta.json +1 -1
  70. package/dist/lib/node-esm/operation-resolver-2HIS2AQZ.mjs +54 -0
  71. package/dist/lib/node-esm/operation-resolver-2HIS2AQZ.mjs.map +7 -0
  72. package/dist/lib/node-esm/react-surface-RONSOJIQ.mjs +214 -0
  73. package/dist/lib/node-esm/react-surface-RONSOJIQ.mjs.map +7 -0
  74. package/dist/lib/node-esm/settings-4UGMPIRY.mjs +36 -0
  75. package/dist/lib/node-esm/settings-4UGMPIRY.mjs.map +7 -0
  76. package/dist/lib/node-esm/state-LXE5XIN4.mjs +30 -0
  77. package/dist/lib/node-esm/state-LXE5XIN4.mjs.map +7 -0
  78. package/dist/lib/node-esm/types/index.mjs +10 -3
  79. package/dist/types/src/MarkdownPlugin.d.ts +2 -1
  80. package/dist/types/src/MarkdownPlugin.d.ts.map +1 -1
  81. package/dist/types/src/blueprints/functions/create.d.ts +8 -0
  82. package/dist/types/src/blueprints/functions/create.d.ts.map +1 -0
  83. package/dist/types/src/blueprints/functions/create.test.d.ts +2 -0
  84. package/dist/types/src/blueprints/functions/create.test.d.ts.map +1 -0
  85. package/dist/types/src/blueprints/functions/index.d.ts +4 -0
  86. package/dist/types/src/blueprints/functions/index.d.ts.map +1 -0
  87. package/dist/types/src/{functions → blueprints/functions}/open.d.ts +1 -1
  88. package/dist/types/src/blueprints/functions/open.d.ts.map +1 -0
  89. package/dist/types/src/{functions/diff.d.ts → blueprints/functions/update.d.ts} +2 -2
  90. package/dist/types/src/blueprints/functions/update.d.ts.map +1 -0
  91. package/dist/types/src/blueprints/functions/update.test.d.ts +2 -0
  92. package/dist/types/src/blueprints/functions/update.test.d.ts.map +1 -0
  93. package/dist/types/src/blueprints/index.d.ts +2 -0
  94. package/dist/types/src/blueprints/index.d.ts.map +1 -0
  95. package/dist/types/src/blueprints/markdown-blueprint.d.ts +21 -0
  96. package/dist/types/src/blueprints/markdown-blueprint.d.ts.map +1 -0
  97. package/dist/types/src/capabilities/anchor-sort/anchor-sort.d.ts +5 -0
  98. package/dist/types/src/capabilities/anchor-sort/anchor-sort.d.ts.map +1 -0
  99. package/dist/types/src/capabilities/anchor-sort/index.d.ts +3 -0
  100. package/dist/types/src/capabilities/anchor-sort/index.d.ts.map +1 -0
  101. package/dist/types/src/capabilities/app-graph-serializer/app-graph-serializer.d.ts +5 -0
  102. package/dist/types/src/capabilities/app-graph-serializer/app-graph-serializer.d.ts.map +1 -0
  103. package/dist/types/src/capabilities/app-graph-serializer/index.d.ts +3 -0
  104. package/dist/types/src/capabilities/app-graph-serializer/index.d.ts.map +1 -0
  105. package/dist/types/src/capabilities/artifact-definition/artifact-definition.d.ts +5 -0
  106. package/dist/types/src/capabilities/artifact-definition/artifact-definition.d.ts.map +1 -0
  107. package/dist/types/src/capabilities/artifact-definition/index.d.ts +3 -0
  108. package/dist/types/src/capabilities/artifact-definition/index.d.ts.map +1 -0
  109. package/dist/types/src/capabilities/blueprint-definition/blueprint-definition.d.ts +10 -0
  110. package/dist/types/src/capabilities/blueprint-definition/blueprint-definition.d.ts.map +1 -0
  111. package/dist/types/src/capabilities/blueprint-definition/index.d.ts +3 -0
  112. package/dist/types/src/capabilities/blueprint-definition/index.d.ts.map +1 -0
  113. package/dist/types/src/capabilities/index.d.ts +6 -17
  114. package/dist/types/src/capabilities/index.d.ts.map +1 -1
  115. package/dist/types/src/capabilities/operation-resolver/index.d.ts +3 -0
  116. package/dist/types/src/capabilities/operation-resolver/index.d.ts.map +1 -0
  117. package/dist/types/src/capabilities/operation-resolver/operation-resolver.d.ts +5 -0
  118. package/dist/types/src/capabilities/operation-resolver/operation-resolver.d.ts.map +1 -0
  119. package/dist/types/src/capabilities/react-surface/index.d.ts +3 -0
  120. package/dist/types/src/capabilities/react-surface/index.d.ts.map +1 -0
  121. package/dist/types/src/capabilities/react-surface/react-surface.d.ts +5 -0
  122. package/dist/types/src/capabilities/react-surface/react-surface.d.ts.map +1 -0
  123. package/dist/types/src/capabilities/settings/index.d.ts +3 -0
  124. package/dist/types/src/capabilities/settings/index.d.ts.map +1 -0
  125. package/dist/types/src/capabilities/settings/settings.d.ts +6 -0
  126. package/dist/types/src/capabilities/settings/settings.d.ts.map +1 -0
  127. package/dist/types/src/capabilities/state/index.d.ts +3 -0
  128. package/dist/types/src/capabilities/state/index.d.ts.map +1 -0
  129. package/dist/types/src/capabilities/state/state.d.ts +5 -0
  130. package/dist/types/src/capabilities/state/state.d.ts.map +1 -0
  131. package/dist/types/src/cli/index.d.ts +2 -0
  132. package/dist/types/src/cli/index.d.ts.map +1 -0
  133. package/dist/types/src/cli/plugin.d.ts +3 -0
  134. package/dist/types/src/cli/plugin.d.ts.map +1 -0
  135. package/dist/types/src/components/MarkdownCard/MarkdownCard.d.ts +5 -4
  136. package/dist/types/src/components/MarkdownCard/MarkdownCard.d.ts.map +1 -1
  137. package/dist/types/src/components/MarkdownCard/MarkdownCard.stories.d.ts +5 -5
  138. package/dist/types/src/components/MarkdownCard/MarkdownCard.stories.d.ts.map +1 -1
  139. package/dist/types/src/components/MarkdownContainer.d.ts +19 -5
  140. package/dist/types/src/components/MarkdownContainer.d.ts.map +1 -1
  141. package/dist/types/src/components/MarkdownContainer.stories.d.ts +1 -0
  142. package/dist/types/src/components/MarkdownContainer.stories.d.ts.map +1 -1
  143. package/dist/types/src/components/MarkdownEditor/FileUpload.d.ts +2 -2
  144. package/dist/types/src/components/MarkdownEditor/FileUpload.d.ts.map +1 -1
  145. package/dist/types/src/components/MarkdownEditor/MarkdownEditor.d.ts +10 -9
  146. package/dist/types/src/components/MarkdownEditor/MarkdownEditor.d.ts.map +1 -1
  147. package/dist/types/src/components/MarkdownEditor/MarkdownEditor.stories.d.ts.map +1 -1
  148. package/dist/types/src/components/MarkdownEditor/MarkdownEditorContent.d.ts +16 -12
  149. package/dist/types/src/components/MarkdownEditor/MarkdownEditorContent.d.ts.map +1 -1
  150. package/dist/types/src/components/MarkdownEditor/MarkdownEditorToolbar.d.ts +4 -4
  151. package/dist/types/src/components/MarkdownEditor/MarkdownEditorToolbar.d.ts.map +1 -1
  152. package/dist/types/src/components/MarkdownSettings/MarkdownSettings.d.ts +4 -2
  153. package/dist/types/src/components/MarkdownSettings/MarkdownSettings.d.ts.map +1 -1
  154. package/dist/types/src/components/Suggestions.stories.d.ts.map +1 -1
  155. package/dist/types/src/components/index.d.ts +5 -2
  156. package/dist/types/src/components/index.d.ts.map +1 -1
  157. package/dist/types/src/hooks/index.d.ts +1 -1
  158. package/dist/types/src/hooks/index.d.ts.map +1 -1
  159. package/dist/types/src/hooks/useEditorMenuOptions.d.ts +9 -0
  160. package/dist/types/src/hooks/useEditorMenuOptions.d.ts.map +1 -0
  161. package/dist/types/src/hooks/useExtensions.d.ts +5 -5
  162. package/dist/types/src/hooks/useExtensions.d.ts.map +1 -1
  163. package/dist/types/src/hooks/useLinkQuery.d.ts +3 -3
  164. package/dist/types/src/hooks/useLinkQuery.d.ts.map +1 -1
  165. package/dist/types/src/hooks/useSelectCurrentThread.d.ts.map +1 -1
  166. package/dist/types/src/index.d.ts +1 -2
  167. package/dist/types/src/index.d.ts.map +1 -1
  168. package/dist/types/src/meta.d.ts +2 -2
  169. package/dist/types/src/meta.d.ts.map +1 -1
  170. package/dist/types/src/testing.d.ts +6 -0
  171. package/dist/types/src/testing.d.ts.map +1 -0
  172. package/dist/types/src/translations.d.ts +1 -0
  173. package/dist/types/src/translations.d.ts.map +1 -1
  174. package/dist/types/src/types/Markdown.d.ts +16 -16
  175. package/dist/types/src/types/Markdown.d.ts.map +1 -1
  176. package/dist/types/src/types/MarkdownAction.d.ts +63 -31
  177. package/dist/types/src/types/MarkdownAction.d.ts.map +1 -1
  178. package/dist/types/src/types/capabilities.d.ts +22 -0
  179. package/dist/types/src/types/capabilities.d.ts.map +1 -0
  180. package/dist/types/src/types/events.d.ts +5 -0
  181. package/dist/types/src/types/events.d.ts.map +1 -0
  182. package/dist/types/src/types/index.d.ts +3 -0
  183. package/dist/types/src/types/index.d.ts.map +1 -1
  184. package/dist/types/src/types/types.d.ts +2 -2
  185. package/dist/types/src/types/types.d.ts.map +1 -1
  186. package/dist/types/src/util.d.ts +6 -3
  187. package/dist/types/src/util.d.ts.map +1 -1
  188. package/dist/types/src/util.test.d.ts +2 -0
  189. package/dist/types/src/util.test.d.ts.map +1 -0
  190. package/dist/types/tsconfig.tsbuildinfo +1 -1
  191. package/package.json +86 -58
  192. package/src/MarkdownPlugin.tsx +61 -92
  193. package/src/blueprints/functions/create.conversations.json +1 -0
  194. package/src/blueprints/functions/create.test.ts +125 -0
  195. package/src/blueprints/functions/create.ts +34 -0
  196. package/src/blueprints/functions/index.ts +7 -0
  197. package/src/{functions → blueprints/functions}/open.ts +4 -3
  198. package/src/blueprints/functions/update.conversations.json +1 -0
  199. package/src/blueprints/functions/update.test.ts +149 -0
  200. package/src/{functions/diff.ts → blueprints/functions/update.ts} +6 -5
  201. package/src/blueprints/index.ts +5 -0
  202. package/src/blueprints/markdown-blueprint.ts +38 -0
  203. package/src/capabilities/anchor-sort/anchor-sort.ts +36 -0
  204. package/src/capabilities/anchor-sort/index.ts +7 -0
  205. package/src/capabilities/app-graph-serializer/app-graph-serializer.ts +59 -0
  206. package/src/capabilities/app-graph-serializer/index.ts +7 -0
  207. package/src/capabilities/artifact-definition/artifact-definition.ts +110 -0
  208. package/src/capabilities/artifact-definition/index.ts +7 -0
  209. package/src/capabilities/blueprint-definition/blueprint-definition.ts +25 -0
  210. package/src/capabilities/blueprint-definition/index.ts +7 -0
  211. package/src/capabilities/index.ts +6 -12
  212. package/src/capabilities/operation-resolver/index.ts +7 -0
  213. package/src/capabilities/operation-resolver/operation-resolver.ts +45 -0
  214. package/src/capabilities/react-surface/index.ts +7 -0
  215. package/src/capabilities/react-surface/react-surface.tsx +100 -0
  216. package/src/capabilities/settings/index.ts +7 -0
  217. package/src/capabilities/settings/settings.ts +36 -0
  218. package/src/capabilities/state/index.ts +7 -0
  219. package/src/capabilities/state/state.ts +31 -0
  220. package/src/cli/index.ts +5 -0
  221. package/src/cli/plugin.ts +29 -0
  222. package/src/components/MarkdownCard/MarkdownCard.stories.tsx +25 -43
  223. package/src/components/MarkdownCard/MarkdownCard.tsx +29 -50
  224. package/src/components/MarkdownContainer.stories.tsx +52 -66
  225. package/src/components/MarkdownContainer.tsx +97 -107
  226. package/src/components/MarkdownEditor/FileUpload.tsx +3 -3
  227. package/src/components/MarkdownEditor/MarkdownEditor.stories.tsx +19 -21
  228. package/src/components/MarkdownEditor/MarkdownEditor.tsx +28 -29
  229. package/src/components/MarkdownEditor/MarkdownEditorContent.tsx +50 -22
  230. package/src/components/MarkdownEditor/MarkdownEditorToolbar.tsx +9 -6
  231. package/src/components/MarkdownSettings/MarkdownSettings.tsx +24 -10
  232. package/src/components/Suggestions.stories.tsx +34 -38
  233. package/src/components/index.ts +8 -3
  234. package/src/hooks/index.ts +1 -1
  235. package/src/hooks/{usePopoverMenuOptions.ts → useEditorMenuOptions.ts} +19 -22
  236. package/src/hooks/useExtensions.tsx +34 -30
  237. package/src/hooks/useLinkQuery.ts +22 -21
  238. package/src/hooks/useSelectCurrentThread.tsx +37 -32
  239. package/src/index.ts +1 -2
  240. package/src/meta.ts +2 -2
  241. package/src/testing.ts +27 -0
  242. package/src/translations.ts +1 -0
  243. package/src/types/Markdown.ts +8 -9
  244. package/src/types/MarkdownAction.ts +48 -18
  245. package/src/types/capabilities.ts +38 -0
  246. package/src/types/events.ts +13 -0
  247. package/src/types/index.ts +4 -0
  248. package/src/types/types.ts +3 -2
  249. package/src/util.test.ts +44 -0
  250. package/src/util.tsx +79 -11
  251. package/dist/lib/browser/MarkdownCard-SLM6QZYC.mjs +0 -12
  252. package/dist/lib/browser/MarkdownContainer-UZFQC6XY.mjs +0 -15
  253. package/dist/lib/browser/anchor-sort-4XPPLMZS.mjs +0 -32
  254. package/dist/lib/browser/anchor-sort-4XPPLMZS.mjs.map +0 -7
  255. package/dist/lib/browser/app-graph-serializer-QQFV4K6P.mjs +0 -51
  256. package/dist/lib/browser/app-graph-serializer-QQFV4K6P.mjs.map +0 -7
  257. package/dist/lib/browser/blueprint-definition-BC5R3T72.mjs +0 -11
  258. package/dist/lib/browser/chunk-2LLVTQCK.mjs +0 -51
  259. package/dist/lib/browser/chunk-2LLVTQCK.mjs.map +0 -7
  260. package/dist/lib/browser/chunk-3VILQLA4.mjs +0 -95
  261. package/dist/lib/browser/chunk-3VILQLA4.mjs.map +0 -7
  262. package/dist/lib/browser/chunk-5AYTOIUF.mjs +0 -822
  263. package/dist/lib/browser/chunk-5AYTOIUF.mjs.map +0 -7
  264. package/dist/lib/browser/chunk-A3CQYGCN.mjs.map +0 -7
  265. package/dist/lib/browser/chunk-BQTYJOFB.mjs +0 -28
  266. package/dist/lib/browser/chunk-BQTYJOFB.mjs.map +0 -7
  267. package/dist/lib/browser/chunk-GLEYXJX3.mjs +0 -22
  268. package/dist/lib/browser/chunk-GLEYXJX3.mjs.map +0 -7
  269. package/dist/lib/browser/chunk-IBCHVMZW.mjs +0 -16
  270. package/dist/lib/browser/chunk-IBCHVMZW.mjs.map +0 -7
  271. package/dist/lib/browser/chunk-JAETS5LE.mjs +0 -106
  272. package/dist/lib/browser/chunk-JAETS5LE.mjs.map +0 -7
  273. package/dist/lib/browser/chunk-UKTCPHLI.mjs +0 -79
  274. package/dist/lib/browser/chunk-UKTCPHLI.mjs.map +0 -7
  275. package/dist/lib/browser/intent-resolver-VQGMBNXZ.mjs +0 -62
  276. package/dist/lib/browser/intent-resolver-VQGMBNXZ.mjs.map +0 -7
  277. package/dist/lib/browser/react-surface-WOMJOPJE.mjs +0 -217
  278. package/dist/lib/browser/react-surface-WOMJOPJE.mjs.map +0 -7
  279. package/dist/lib/browser/settings-LBXJHVBU.mjs +0 -28
  280. package/dist/lib/browser/settings-LBXJHVBU.mjs.map +0 -7
  281. package/dist/lib/browser/state-BTUKVZHY.mjs +0 -37
  282. package/dist/lib/browser/state-BTUKVZHY.mjs.map +0 -7
  283. package/dist/lib/browser/toolkit-YPIVDB4A.mjs +0 -66
  284. package/dist/lib/browser/toolkit-YPIVDB4A.mjs.map +0 -7
  285. package/dist/lib/node-esm/MarkdownContainer-KAQOK7K5.mjs +0 -16
  286. package/dist/lib/node-esm/anchor-sort-4SXYVYXT.mjs.map +0 -7
  287. package/dist/lib/node-esm/app-graph-serializer-KBVRLQN2.mjs +0 -52
  288. package/dist/lib/node-esm/app-graph-serializer-KBVRLQN2.mjs.map +0 -7
  289. package/dist/lib/node-esm/blueprint-definition-FPNOTEYC.mjs +0 -12
  290. package/dist/lib/node-esm/chunk-2Q4WCKWT.mjs +0 -823
  291. package/dist/lib/node-esm/chunk-2Q4WCKWT.mjs.map +0 -7
  292. package/dist/lib/node-esm/chunk-DOB2MJAX.mjs +0 -107
  293. package/dist/lib/node-esm/chunk-DOB2MJAX.mjs.map +0 -7
  294. package/dist/lib/node-esm/chunk-GGKPPGWA.mjs +0 -24
  295. package/dist/lib/node-esm/chunk-GGKPPGWA.mjs.map +0 -7
  296. package/dist/lib/node-esm/chunk-GMMVSXQ6.mjs +0 -17
  297. package/dist/lib/node-esm/chunk-GMMVSXQ6.mjs.map +0 -7
  298. package/dist/lib/node-esm/chunk-JELROKGD.mjs +0 -80
  299. package/dist/lib/node-esm/chunk-JELROKGD.mjs.map +0 -7
  300. package/dist/lib/node-esm/chunk-QH4MC5BE.mjs +0 -52
  301. package/dist/lib/node-esm/chunk-QH4MC5BE.mjs.map +0 -7
  302. package/dist/lib/node-esm/chunk-SHAMSMKQ.mjs +0 -29
  303. package/dist/lib/node-esm/chunk-SHAMSMKQ.mjs.map +0 -7
  304. package/dist/lib/node-esm/chunk-SJ2QRGPM.mjs.map +0 -7
  305. package/dist/lib/node-esm/chunk-YYSASY7X.mjs +0 -96
  306. package/dist/lib/node-esm/chunk-YYSASY7X.mjs.map +0 -7
  307. package/dist/lib/node-esm/intent-resolver-Q4XVI5EX.mjs +0 -63
  308. package/dist/lib/node-esm/intent-resolver-Q4XVI5EX.mjs.map +0 -7
  309. package/dist/lib/node-esm/react-surface-FAMZTAXK.mjs +0 -218
  310. package/dist/lib/node-esm/react-surface-FAMZTAXK.mjs.map +0 -7
  311. package/dist/lib/node-esm/settings-2YRA67H6.mjs +0 -29
  312. package/dist/lib/node-esm/settings-2YRA67H6.mjs.map +0 -7
  313. package/dist/lib/node-esm/state-K6EH7SRZ.mjs +0 -38
  314. package/dist/lib/node-esm/state-K6EH7SRZ.mjs.map +0 -7
  315. package/dist/lib/node-esm/toolkit-36BFLIR3.mjs +0 -67
  316. package/dist/lib/node-esm/toolkit-36BFLIR3.mjs.map +0 -7
  317. package/dist/types/src/capabilities/anchor-sort.d.ts +0 -6
  318. package/dist/types/src/capabilities/anchor-sort.d.ts.map +0 -1
  319. package/dist/types/src/capabilities/app-graph-serializer.d.ts +0 -4
  320. package/dist/types/src/capabilities/app-graph-serializer.d.ts.map +0 -1
  321. package/dist/types/src/capabilities/artifact-definition.d.ts +0 -3
  322. package/dist/types/src/capabilities/artifact-definition.d.ts.map +0 -1
  323. package/dist/types/src/capabilities/blueprint-definition.d.ts +0 -5
  324. package/dist/types/src/capabilities/blueprint-definition.d.ts.map +0 -1
  325. package/dist/types/src/capabilities/capabilities.d.ts +0 -12
  326. package/dist/types/src/capabilities/capabilities.d.ts.map +0 -1
  327. package/dist/types/src/capabilities/intent-resolver.d.ts +0 -4
  328. package/dist/types/src/capabilities/intent-resolver.d.ts.map +0 -1
  329. package/dist/types/src/capabilities/react-surface.d.ts +0 -4
  330. package/dist/types/src/capabilities/react-surface.d.ts.map +0 -1
  331. package/dist/types/src/capabilities/settings.d.ts +0 -4
  332. package/dist/types/src/capabilities/settings.d.ts.map +0 -1
  333. package/dist/types/src/capabilities/state.d.ts +0 -11
  334. package/dist/types/src/capabilities/state.d.ts.map +0 -1
  335. package/dist/types/src/capabilities/toolkit.d.ts +0 -20
  336. package/dist/types/src/capabilities/toolkit.d.ts.map +0 -1
  337. package/dist/types/src/events.d.ts +0 -4
  338. package/dist/types/src/events.d.ts.map +0 -1
  339. package/dist/types/src/functions/diff.d.ts.map +0 -1
  340. package/dist/types/src/functions/index.d.ts +0 -3
  341. package/dist/types/src/functions/index.d.ts.map +0 -1
  342. package/dist/types/src/functions/open.d.ts.map +0 -1
  343. package/dist/types/src/hooks/usePopoverMenuOptions.d.ts +0 -9
  344. package/dist/types/src/hooks/usePopoverMenuOptions.d.ts.map +0 -1
  345. package/src/capabilities/anchor-sort.ts +0 -30
  346. package/src/capabilities/app-graph-serializer.ts +0 -54
  347. package/src/capabilities/artifact-definition.ts +0 -112
  348. package/src/capabilities/blueprint-definition.ts +0 -39
  349. package/src/capabilities/capabilities.ts +0 -22
  350. package/src/capabilities/intent-resolver.ts +0 -58
  351. package/src/capabilities/react-surface.tsx +0 -93
  352. package/src/capabilities/settings.ts +0 -25
  353. package/src/capabilities/state.ts +0 -31
  354. package/src/capabilities/toolkit.ts +0 -53
  355. package/src/events.ts +0 -11
  356. package/src/functions/index.ts +0 -6
  357. /package/dist/lib/browser/{MarkdownCard-SLM6QZYC.mjs.map → MarkdownCard-WHK3ORP7.mjs.map} +0 -0
  358. /package/dist/lib/browser/{MarkdownContainer-UZFQC6XY.mjs.map → MarkdownContainer-V7EAADMF.mjs.map} +0 -0
  359. /package/dist/lib/browser/{blueprint-definition-BC5R3T72.mjs.map → blueprints/index.mjs.map} +0 -0
  360. /package/dist/lib/node-esm/{MarkdownCard-MCWEFW4F.mjs.map → MarkdownCard-WJPLQTFS.mjs.map} +0 -0
  361. /package/dist/lib/node-esm/{MarkdownContainer-KAQOK7K5.mjs.map → MarkdownContainer-LUSMORP2.mjs.map} +0 -0
  362. /package/dist/lib/node-esm/{blueprint-definition-FPNOTEYC.mjs.map → blueprints/index.mjs.map} +0 -0
@@ -3,119 +3,109 @@
3
3
  //
4
4
 
5
5
  import { type Extension } from '@codemirror/state';
6
- import { Rx } from '@effect-rx/rx-react';
7
- import React, { useMemo } from 'react';
6
+ import { Atom } from '@effect-atom/atom-react';
7
+ import React, { forwardRef, useMemo } from 'react';
8
8
 
9
- import { Capabilities, useAppGraph, useCapabilities } from '@dxos/app-framework';
9
+ import { Common } from '@dxos/app-framework';
10
+ import { type SurfaceComponentProps, useAppGraph, useCapabilities } from '@dxos/app-framework/react';
10
11
  import { Obj } from '@dxos/echo';
11
- import { fullyQualifiedId, getSpace } from '@dxos/react-client/echo';
12
+ import { useActionRunner } from '@dxos/plugin-graph';
13
+ import { useObject } from '@dxos/react-client/echo';
12
14
  import { type SelectionManager } from '@dxos/react-ui-attention';
13
- import { StackItem } from '@dxos/react-ui-stack';
14
- import { DataType } from '@dxos/schema';
15
+ import { Layout } from '@dxos/react-ui-mosaic';
16
+ import { Text } from '@dxos/schema';
15
17
 
16
- import { MarkdownCapabilities } from '../capabilities';
17
- import { type DocumentType, useLinkQuery } from '../hooks';
18
- import { Markdown, type MarkdownPluginState } from '../types';
18
+ import { useLinkQuery } from '../hooks';
19
+ import { Markdown, MarkdownCapabilities, type MarkdownPluginState } from '../types';
19
20
 
20
21
  import { MarkdownEditor, type MarkdownEditorContentProps, type MarkdownEditorRootProps } from './MarkdownEditor';
21
22
 
22
- export type MarkdownContainerProps = {
23
- role?: string;
24
- object: DocumentType;
25
- settings: Markdown.Settings;
26
- selectionManager?: SelectionManager;
27
- } & (Pick<MarkdownEditorRootProps, 'id' | 'viewMode' | 'onViewModeChange'> &
28
- Pick<MarkdownEditorContentProps, 'editorStateStore'> &
29
- Pick<MarkdownPluginState, 'extensionProviders'>);
30
-
31
- // TODO(burdon): Attention doesn't update in storybook.
32
- // TODO(burdon): Toolbar state (currently not working in labs: e.g., heading, list, table).
33
- // Heading state is correct (see react-ui-editor headings.ts, but the toolbar isn't updated).
34
- // TODO(burdon): View mode (currently not working in labs).
35
- // TODO(burdon): Test update document name.
36
- // TODO(burdon): Test comment threads.
37
- // TODO(burdon): Test preview blocks.
38
- // TODO(burdon): Test file upload.
39
-
40
- export const MarkdownContainer = ({
41
- id,
42
- role,
43
- object,
44
- settings,
45
- extensionProviders,
46
- ...props
47
- }: MarkdownContainerProps) => {
48
- const space = getSpace(object);
49
- const isDocument = Obj.instanceOf(Markdown.Document, object);
50
- const isText = Obj.instanceOf(DataType.Text, object);
51
- const attendableId = isDocument ? fullyQualifiedId(object) : undefined;
52
-
53
- // Extensions from other plugins.
54
- // TODO(burdon): Document MarkdownPluginState.extensionProviders
55
- const otherExtensionProviders = useCapabilities(MarkdownCapabilities.Extensions);
56
- const extensions = useMemo<Extension[]>(() => {
57
- if (!Obj.instanceOf(Markdown.Document, object)) {
58
- return [];
59
- }
60
-
61
- return [...(otherExtensionProviders ?? []), ...(extensionProviders ?? [])]
62
- .flat()
63
- .reduce((acc: Extension[], provider) => {
64
- const extension =
65
- typeof provider === 'function' ? provider({ document: object as Markdown.Document }) : provider;
66
- if (extension) {
67
- acc.push(extension);
68
- }
69
-
70
- return acc;
71
- }, []);
72
- }, [extensionProviders, otherExtensionProviders, object]);
73
-
74
- // Toolbar actions from app graph.
75
- const { graph } = useAppGraph();
76
- const customActions = useMemo(() => {
77
- return Rx.make((get) => {
78
- const actions = get(graph.actions(id));
79
- const nodes = actions.filter((action) => action.properties.disposition === 'toolbar');
80
- const edges = nodes.map((node) => ({ source: 'root', target: node.id }));
81
- return { nodes, edges };
82
- });
83
- }, [graph]);
84
-
85
- // File upload.
86
- const [upload] = useCapabilities(Capabilities.FileUploader);
87
- const handleFileUpload = useMemo(() => {
88
- if (!space || !upload) {
89
- return undefined;
90
- }
91
-
92
- return async (file: File) => upload(space, file);
93
- }, [space, upload]);
94
-
95
- // Query for @ refs.
96
- const handleLinkQuery = useLinkQuery(space);
97
-
98
- return (
99
- <StackItem.Content toolbar={settings.toolbar}>
100
- <MarkdownEditor.Root
101
- id={attendableId ?? id}
102
- object={object}
103
- extensions={extensions}
104
- onFileUpload={handleFileUpload}
105
- onLinkQuery={handleLinkQuery}
106
- {...props}
107
- >
108
- {settings.toolbar && (
109
- <MarkdownEditor.Toolbar id={attendableId ?? id} role={role} customActions={customActions} />
110
- )}
111
- <MarkdownEditor.Content
112
- initialValue={isDocument ? object.content?.target?.content : isText ? object.content : object.text}
113
- scrollPastEnd={role === 'article'}
114
- />
115
- <MarkdownEditor.Blocks />
116
- </MarkdownEditor.Root>
117
- </StackItem.Content>
118
- );
119
- };
23
+ export type MarkdownContainerProps = SurfaceComponentProps<
24
+ Markdown.Document | Text.Text,
25
+ {
26
+ id: string;
27
+ settings: Markdown.Settings;
28
+ selectionManager?: SelectionManager;
29
+ } & Pick<MarkdownEditorRootProps, 'viewMode' | 'onViewModeChange'> &
30
+ Pick<MarkdownEditorContentProps, 'editorStateStore'> &
31
+ Pick<MarkdownPluginState, 'extensionProviders'>
32
+ >;
33
+
34
+ export const MarkdownContainer = forwardRef<HTMLDivElement, MarkdownContainerProps>(
35
+ ({ role, subject: object, id, settings, extensionProviders, ...props }, forwardedRef) => {
36
+ const db = Obj.isObject(object) ? Obj.getDatabase(object) : undefined;
37
+ const attendableId = Obj.instanceOf(Markdown.Document, object) ? Obj.getDXN(object).toString() : undefined;
38
+ const [docContent] = useObject(Obj.instanceOf(Markdown.Document, object) ? object.content : undefined, 'content');
39
+ const [textContent] = useObject(Obj.instanceOf(Text.Text, object) ? object : undefined, 'content');
40
+ const initialValue = docContent ?? textContent;
41
+
42
+ // Extensions from other plugins.
43
+ // TODO(burdon): Document MarkdownPluginState.extensionProviders
44
+ const otherExtensionProviders = useCapabilities(MarkdownCapabilities.Extensions);
45
+ const extensions = useMemo<Extension[]>(() => {
46
+ if (!Obj.instanceOf(Markdown.Document, object) && !Obj.instanceOf(Text.Text, object)) {
47
+ return [];
48
+ }
49
+
50
+ return [...(otherExtensionProviders ?? []), ...(extensionProviders ?? [])]
51
+ .flat()
52
+ .reduce((acc: Extension[], provider) => {
53
+ const extension =
54
+ typeof provider === 'function' ? provider({ document: object as Markdown.Document }) : provider;
55
+ if (extension) {
56
+ acc.push(extension);
57
+ }
58
+
59
+ return acc;
60
+ }, []);
61
+ }, [extensionProviders, otherExtensionProviders, object]);
62
+
63
+ // Toolbar actions from app graph.
64
+ const { graph } = useAppGraph();
65
+ const runAction = useActionRunner();
66
+ const customActions = useMemo(() => {
67
+ return Atom.make((get) => {
68
+ const actions = get(graph.actions(id));
69
+ const nodes = actions.filter((action) => action.properties.disposition === 'toolbar');
70
+ const edges = nodes.map((node) => ({ source: 'root', target: node.id }));
71
+ return { nodes, edges };
72
+ });
73
+ }, [graph]);
74
+
75
+ // File upload.
76
+ const [upload] = useCapabilities(Common.Capability.FileUploader);
77
+ const handleFileUpload = useMemo(() => {
78
+ if (!db || !upload) {
79
+ return undefined;
80
+ }
81
+
82
+ return async (file: File) => upload(db, file);
83
+ }, [db, upload]);
84
+
85
+ // Query for @ refs.
86
+ const handleLinkQuery = useLinkQuery(db);
87
+
88
+ return (
89
+ <Layout.Main toolbar={settings.toolbar} ref={forwardedRef}>
90
+ <MarkdownEditor.Root
91
+ id={attendableId ?? id}
92
+ object={object}
93
+ extensions={extensions}
94
+ settings={settings}
95
+ onAction={runAction}
96
+ onFileUpload={handleFileUpload}
97
+ onLinkQuery={handleLinkQuery}
98
+ {...props}
99
+ >
100
+ {settings.toolbar && (
101
+ <MarkdownEditor.Toolbar id={attendableId ?? id} role={role} customActions={customActions} />
102
+ )}
103
+ <MarkdownEditor.Content initialValue={initialValue} scrollPastEnd={role === 'article'} />
104
+ <MarkdownEditor.Blocks />
105
+ </MarkdownEditor.Root>
106
+ </Layout.Main>
107
+ );
108
+ },
109
+ );
120
110
 
121
111
  export default MarkdownContainer;
@@ -7,8 +7,8 @@ import React, { forwardRef, useEffect, useImperativeHandle } from 'react';
7
7
  import { createPortal } from 'react-dom';
8
8
  import { useDropzone } from 'react-dropzone';
9
9
 
10
- import { type FileInfo } from '@dxos/app-framework';
11
- import { addLink } from '@dxos/react-ui-editor';
10
+ import { type Common } from '@dxos/app-framework';
11
+ import { addLink } from '@dxos/ui-editor';
12
12
 
13
13
  export const IMAGE_FILES = ['.jpg', '.jpeg', '.png', '.gif'];
14
14
 
@@ -16,7 +16,7 @@ export type FileUploadAction = () => void;
16
16
 
17
17
  export type FileUploadProps = {
18
18
  editorView?: EditorView;
19
- onFileUpload?: (file: File) => Promise<FileInfo | undefined>;
19
+ onFileUpload?: (file: File) => Promise<Common.FileInfo | undefined>;
20
20
  };
21
21
 
22
22
  // TODO(burdon): Factor out.
@@ -3,18 +3,18 @@
3
3
  //
4
4
 
5
5
  import { type Meta, type StoryObj } from '@storybook/react-vite';
6
+ import * as Effect from 'effect/Effect';
6
7
  import React from 'react';
7
8
 
8
- import { IntentPlugin } from '@dxos/app-framework';
9
9
  import { withPluginManager } from '@dxos/app-framework/testing';
10
- import { Filter } from '@dxos/echo';
11
- import { AttentionPlugin } from '@dxos/plugin-attention';
10
+ import { Filter, Obj } from '@dxos/echo';
12
11
  import { ClientPlugin } from '@dxos/plugin-client';
13
- import { fullyQualifiedId, useQuery, useSpace } from '@dxos/react-client/echo';
12
+ import { corePlugins } from '@dxos/plugin-testing';
13
+ import { useQuery, useSpace } from '@dxos/react-client/echo';
14
14
  import { withLayout, withTheme } from '@dxos/react-ui/testing';
15
15
  import { useAttentionAttributes } from '@dxos/react-ui-attention';
16
16
  import { translations as editorTranslations } from '@dxos/react-ui-editor';
17
- import { StackItem } from '@dxos/react-ui-stack';
17
+ import { Layout } from '@dxos/react-ui-mosaic';
18
18
 
19
19
  import { translations } from '../../translations';
20
20
  import { Markdown } from '../../types';
@@ -28,22 +28,20 @@ type StoryProps = Omit<MarkdownEditorRootProps, 'id' | 'extensions'>;
28
28
  const DefaultStory = (props: StoryProps) => {
29
29
  const space = useSpace();
30
30
  const [doc] = useQuery(space?.db, Filter.type(Markdown.Document));
31
- const id = doc && fullyQualifiedId(doc);
31
+ const id = doc && Obj.getDXN(doc).toString();
32
32
  const attentionAttrs = useAttentionAttributes(id);
33
-
34
33
  if (!id) {
35
34
  return null;
36
35
  }
37
36
 
38
- // TODO(burdon): Toolbar attention isn't working in this story.
39
37
  return (
40
38
  <div className='contents' {...attentionAttrs}>
41
- <StackItem.Content toolbar>
39
+ <Layout.Main toolbar>
42
40
  <MarkdownEditor.Root id={id} object={doc} {...props}>
43
41
  <MarkdownEditor.Toolbar id={id} />
44
42
  <MarkdownEditor.Content />
45
43
  </MarkdownEditor.Root>
46
- </StackItem.Content>
44
+ </Layout.Main>
47
45
  </div>
48
46
  );
49
47
  };
@@ -54,22 +52,22 @@ const meta: Meta<typeof DefaultStory> = {
54
52
  render: DefaultStory as any,
55
53
  decorators: [
56
54
  withTheme,
57
- withLayout({ container: 'column' }),
58
- // TODO(burdon): Create story without client.
55
+ withLayout({ layout: 'column' }),
59
56
  withPluginManager({
60
57
  plugins: [
58
+ ...corePlugins(),
61
59
  ClientPlugin({
62
60
  types: [Markdown.Document],
63
- onClientInitialized: async ({ client }) => {
64
- await client.halo.createIdentity();
65
- await client.spaces.waitUntilReady();
66
- const space = client.spaces.default;
67
- await space.waitUntilReady();
68
- space.db.add(Markdown.makeDocument({ content }));
69
- },
61
+ onClientInitialized: ({ client }) =>
62
+ Effect.gen(function* () {
63
+ yield* Effect.promise(() => client.halo.createIdentity());
64
+ yield* Effect.promise(() => client.spaces.waitUntilReady());
65
+ const space = client.spaces.default;
66
+ yield* Effect.promise(() => space.waitUntilReady());
67
+
68
+ space.db.add(Markdown.make({ content }));
69
+ }),
70
70
  }),
71
- IntentPlugin(),
72
- AttentionPlugin(),
73
71
  ],
74
72
  }),
75
73
  ],
@@ -4,31 +4,30 @@
4
4
 
5
5
  import { type Extension } from '@codemirror/state';
6
6
  import { type EditorView } from '@codemirror/view';
7
+ import { type Atom } from '@effect-atom/atom-react';
7
8
  import { createContext } from '@radix-ui/react-context';
8
9
  import React, { type PropsWithChildren, useMemo, useState } from 'react';
9
10
  import { createPortal } from 'react-dom';
10
11
 
11
- import { Surface } from '@dxos/app-framework';
12
+ import { Surface } from '@dxos/app-framework/react';
12
13
  import { DXN } from '@dxos/keys';
13
- import { type Live } from '@dxos/live-object';
14
14
  import { useClient } from '@dxos/react-client';
15
15
  import {
16
+ EditorMenuProvider,
16
17
  type EditorToolbarState,
17
- PopoverMenuProvider,
18
- type PreviewBlock,
19
- type PreviewOptions,
20
- type UsePopoverMenu,
21
- useEditorToolbarState,
22
- usePopoverMenu,
18
+ type UseEditorMenu,
19
+ useEditorMenu,
20
+ useEditorToolbar,
23
21
  } from '@dxos/react-ui-editor';
22
+ import { type PreviewBlock, type PreviewOptions } from '@dxos/ui-editor';
24
23
  import { isNonNullable } from '@dxos/util';
25
24
 
26
25
  import {
27
26
  type DocumentType,
28
27
  type ExtensionsOptions,
29
- type UsePopoverMenuOptionsProps,
28
+ type UseEditorMenuOptionsProps,
29
+ useEditorMenuOptions,
30
30
  useExtensions,
31
- usePopoverMenuOptions,
32
31
  } from '../../hooks';
33
32
 
34
33
  import {
@@ -49,10 +48,10 @@ type MarkdownEditorContextValue = {
49
48
  setEditorView: (view: EditorView) => void;
50
49
  extensions: Extension[];
51
50
  previewBlocks: PreviewBlock[];
52
- toolbarState: Live<EditorToolbarState>;
53
- popoverMenu: Omit<UsePopoverMenu, 'extension'>;
51
+ toolbarState: Atom.Writable<EditorToolbarState>;
52
+ popoverMenu: Omit<UseEditorMenu, 'extension'>;
54
53
  } & (Pick<ExtensionsOptions, 'viewMode'> &
55
- Pick<NaturalMarkdownToolbarProps, 'editorView' | 'onFileUpload' | 'onViewModeChange'>);
54
+ Pick<NaturalMarkdownToolbarProps, 'editorView' | 'onAction' | 'onFileUpload' | 'onViewModeChange'>);
56
55
 
57
56
  const [MarkdownEditorContextProvider, useMarkdownEditorContext] =
58
57
  createContext<MarkdownEditorContextValue>('MarkdownEditor.Context');
@@ -65,8 +64,8 @@ type MarkdownEditorRootProps = PropsWithChildren<
65
64
  {
66
65
  object?: DocumentType;
67
66
  extensions?: Extension[];
68
- } & Pick<MarkdownEditorContextValue, 'id' | 'onFileUpload' | 'onViewModeChange' | 'viewMode'> &
69
- Pick<UsePopoverMenuOptionsProps, 'slashCommandGroups' | 'onLinkQuery'> &
67
+ } & Pick<MarkdownEditorContextValue, 'id' | 'onAction' | 'onFileUpload' | 'onViewModeChange' | 'viewMode'> &
68
+ Pick<UseEditorMenuOptionsProps, 'slashCommandGroups' | 'onLinkQuery'> &
70
69
  Pick<ExtensionsOptions, 'editorStateStore' | 'selectionManager' | 'settings'>
71
70
  >;
72
71
 
@@ -78,7 +77,7 @@ const MarkdownEditorRoot = ({
78
77
  selectionManager,
79
78
  settings,
80
79
  viewMode,
81
- extensions: extensionsParam,
80
+ extensions: extensionsProp,
82
81
  slashCommandGroups,
83
82
  onLinkQuery,
84
83
  ...props
@@ -100,15 +99,15 @@ const MarkdownEditorRoot = ({
100
99
  );
101
100
 
102
101
  // Toolbar state.
103
- const toolbarState = useEditorToolbarState({ viewMode });
102
+ const toolbarState = useEditorToolbar({ viewMode });
104
103
 
105
104
  // Context menu.
106
- const menuOptions = usePopoverMenuOptions({
105
+ const menuOptions = useEditorMenuOptions({
107
106
  editorView,
108
107
  slashCommandGroups,
109
108
  onLinkQuery,
110
109
  });
111
- const { extension: menuExtension, ...menuProps } = usePopoverMenu(menuOptions);
110
+ const { extension: menuExtension, ...menuProps } = useEditorMenu(menuOptions);
112
111
 
113
112
  // Extensions.
114
113
  const coreExtensions = useExtensions({
@@ -122,8 +121,8 @@ const MarkdownEditorRoot = ({
122
121
  });
123
122
 
124
123
  const extensions = useMemo(
125
- () => [coreExtensions, menuExtension, extensionsParam].filter(isNonNullable),
126
- [coreExtensions, menuExtension, extensionsParam],
124
+ () => [coreExtensions, menuExtension, extensionsProp].filter(isNonNullable),
125
+ [coreExtensions, menuExtension, extensionsProp],
127
126
  );
128
127
 
129
128
  return (
@@ -154,25 +153,25 @@ type MarkdownEditorContentProps = Omit<NaturalMarkdownEditorContentProps, 'id' |
154
153
  const MarkdownEditorContent = (props: MarkdownEditorContentProps) => {
155
154
  const {
156
155
  id,
157
- extensions,
158
156
  editorView,
159
157
  setEditorView,
160
- toolbarState,
161
158
  viewMode,
159
+ toolbarState,
160
+ extensions,
162
161
  popoverMenu: { groupsRef, ...menuProps },
163
162
  } = useMarkdownEditorContext(MarkdownEditorContent.displayName);
164
163
 
165
164
  return (
166
- <PopoverMenuProvider view={editorView} groups={groupsRef.current} {...menuProps}>
165
+ <EditorMenuProvider view={editorView} groups={groupsRef.current} {...menuProps}>
167
166
  <NaturalMarkdownEditorContent
168
167
  {...props}
169
168
  id={id}
170
- extensions={extensions}
171
- toolbarState={toolbarState}
172
169
  viewMode={viewMode}
170
+ toolbarState={toolbarState}
171
+ extensions={extensions}
173
172
  ref={setEditorView}
174
173
  />
175
- </PopoverMenuProvider>
174
+ </EditorMenuProvider>
176
175
  );
177
176
  };
178
177
 
@@ -184,7 +183,7 @@ MarkdownEditorContent.displayName = 'MarkdownEditor.Content';
184
183
 
185
184
  type MarkdownEditorToolbarProps = Omit<
186
185
  NaturalMarkdownToolbarProps,
187
- 'state' | 'editorView' | 'onFileUpload' | 'onViewModeChange'
186
+ 'state' | 'editorView' | 'onAction' | 'onFileUpload' | 'onViewModeChange'
188
187
  >;
189
188
 
190
189
  const MarkdownEditorToolbar = (props: MarkdownEditorToolbarProps) => {
@@ -218,7 +217,7 @@ MarkdownEditorBlocks.displayName = 'MarkdownEditor.Blocks';
218
217
  const PreviewBlock = ({ el, link }: PreviewBlock) => {
219
218
  const client = useClient();
220
219
  const dxn = DXN.parse(link.ref);
221
- const subject = client.graph.ref(dxn).target;
220
+ const subject = client.graph.makeRef(dxn).target;
222
221
  const data = useMemo(() => ({ subject }), [subject]);
223
222
 
224
223
  return createPortal(<Surface role='card--transclusion' data={data} limit={1} />, el);
@@ -3,28 +3,31 @@
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 { type ThemedClassName, useThemeContext, useTranslation } from '@dxos/react-ui';
10
+ import {
11
+ type EditorMenuGroup,
12
+ type EditorToolbarState,
13
+ type UseTextEditorProps,
14
+ useTextEditor,
15
+ } from '@dxos/react-ui-editor';
10
16
  import {
11
17
  type EditorSelectionState,
12
18
  type EditorStateStore,
13
- type EditorToolbarState,
14
19
  type EditorViewMode,
15
- type PopoverMenuGroup,
16
- type UseTextEditorProps,
20
+ type ThemeExtensionsOptions,
17
21
  createBasicExtensions,
18
22
  createMarkdownExtensions,
19
23
  createThemeExtensions,
20
24
  dropFile,
21
- editorGutter,
22
25
  editorSlots,
23
26
  formattingListener,
24
27
  processEditorPayload,
25
28
  stackItemContentEditorClassNames,
26
- useTextEditor,
27
- } from '@dxos/react-ui-editor';
29
+ } from '@dxos/ui-editor';
30
+ import { mx } from '@dxos/ui-theme';
28
31
  import { isTruthy } from '@dxos/util';
29
32
 
30
33
  import { useSelectCurrentThread } from '../../hooks';
@@ -32,27 +35,51 @@ import { meta } from '../../meta';
32
35
 
33
36
  import { type MarkdownEditorToolbarProps } from './MarkdownEditorToolbar';
34
37
 
35
- export type MarkdownEditorContentProps = {
38
+ export type MarkdownEditorContentProps = ThemedClassName<{
36
39
  id: string;
37
40
  role?: string;
38
41
  viewMode?: EditorViewMode;
39
42
  scrollPastEnd?: boolean;
40
- slashCommandGroups?: PopoverMenuGroup[];
43
+ slashCommandGroups?: EditorMenuGroup[];
41
44
  editorStateStore?: EditorStateStore;
42
- toolbarState?: Live<EditorToolbarState>;
43
- onLinkQuery?: (query?: string) => Promise<PopoverMenuGroup[]>;
44
- } & (Pick<UseTextEditorProps, 'initialValue' | 'extensions'> & Pick<MarkdownEditorToolbarProps, 'onFileUpload'>);
45
+ toolbarState?: Atom.Writable<EditorToolbarState>;
46
+ onLinkQuery?: (query?: string) => Promise<EditorMenuGroup[]>;
47
+ }> &
48
+ // prettier-ignore
49
+ Pick<UseTextEditorProps, 'initialValue' | 'extensions'> &
50
+ Pick<MarkdownEditorToolbarProps, 'onFileUpload'> &
51
+ Pick<ThemeExtensionsOptions, 'slots'>;
45
52
 
46
53
  export const MarkdownEditorContent = forwardRef<EditorView | null, MarkdownEditorContentProps>(
47
54
  (
48
- { id, role, initialValue, editorStateStore, toolbarState, extensions, viewMode, scrollPastEnd, onFileUpload },
55
+ {
56
+ classNames,
57
+ id,
58
+ role,
59
+ viewMode,
60
+ initialValue,
61
+ editorStateStore,
62
+ toolbarState,
63
+ extensions,
64
+ scrollPastEnd,
65
+ slots = editorSlots,
66
+ onFileUpload,
67
+ },
49
68
  forwardedRef,
50
69
  ) => {
51
70
  const { t } = useTranslation(meta.id);
52
71
  const { themeMode } = useThemeContext();
72
+ const registry = useContext(RegistryContext);
53
73
 
54
- // TODO(burdon): Toolbar state is not reactive.
55
- const toolbarStateRef = useDynamicRef(toolbarState);
74
+ // Callback to update toolbar state atom.
75
+ const updateToolbarState = useCallback(
76
+ (formatting: EditorToolbarState) => {
77
+ if (toolbarState) {
78
+ registry.set(toolbarState, { ...registry.get(toolbarState), ...formatting });
79
+ }
80
+ },
81
+ [registry, toolbarState],
82
+ );
56
83
 
57
84
  // Restore last selection and scroll point.
58
85
  const { scrollTo, selection } = useMemo<EditorSelectionState>(() => editorStateStore?.getState(id) ?? {}, [id]);
@@ -69,7 +96,7 @@ export const MarkdownEditorContent = forwardRef<EditorView | null, MarkdownEdito
69
96
  selection,
70
97
  // TODO(wittjosiah): Autofocus based on layout is racy.
71
98
  // autoFocus: layoutPlugin?.provides.layout ? layoutPlugin?.provides.layout.scrollIntoView === id : true,
72
- moveToEndOfLine: true,
99
+ selectionEnd: true,
73
100
  }),
74
101
  initialValue,
75
102
  extensions: [
@@ -81,12 +108,11 @@ export const MarkdownEditorContent = forwardRef<EditorView | null, MarkdownEdito
81
108
  }),
82
109
  createThemeExtensions({
83
110
  themeMode,
84
- slots: editorSlots,
111
+ slots,
85
112
  syntaxHighlighting: true,
86
113
  }),
87
114
  createMarkdownExtensions(),
88
- formattingListener(() => toolbarStateRef.current),
89
- editorGutter,
115
+ toolbarState && formattingListener(updateToolbarState),
90
116
  role !== 'section' &&
91
117
  onFileUpload &&
92
118
  dropFile({
@@ -106,7 +132,9 @@ export const MarkdownEditorContent = forwardRef<EditorView | null, MarkdownEdito
106
132
  );
107
133
 
108
134
  useImperativeHandle<EditorView | null, EditorView | null>(forwardedRef, () => editorView, [editorView]);
135
+
109
136
  useSelectCurrentThread(editorView, id);
137
+
110
138
  useTest(editorView);
111
139
 
112
140
  return (
@@ -114,7 +142,7 @@ export const MarkdownEditorContent = forwardRef<EditorView | null, MarkdownEdito
114
142
  role='none'
115
143
  ref={parentRef}
116
144
  data-testid='composer.markdownRoot'
117
- className={stackItemContentEditorClassNames(role)}
145
+ className={mx(stackItemContentEditorClassNames(role), classNames)}
118
146
  data-popover-collision-boundary={true}
119
147
  {...focusAttributes}
120
148
  />