@dxos/plugin-markdown 0.8.4-main.72ec0f3 → 0.8.4-main.937b3ca

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (357) hide show
  1. package/dist/lib/browser/MarkdownCard-HFNNE4B4.mjs +12 -0
  2. package/dist/lib/browser/MarkdownContainer-V7EAADMF.mjs +12 -0
  3. package/dist/lib/browser/{anchor-sort-3HGPGCOO.mjs → anchor-sort-WQ3TL7ZI.mjs} +11 -10
  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-Y53FQREH.mjs → chunk-FWQQW6KU.mjs} +41 -47
  15. package/dist/lib/browser/chunk-FWQQW6KU.mjs.map +7 -0
  16. package/dist/lib/browser/{chunk-22XSSNBS.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-VQ3WOAB6.mjs +60 -0
  25. package/dist/lib/browser/chunk-VQ3WOAB6.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 +121 -143
  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-64FZ7T7F.mjs +213 -0
  34. package/dist/lib/browser/react-surface-64FZ7T7F.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-ZXPJLUYO.mjs → MarkdownCard-GMNXUWWR.mjs} +5 -5
  41. package/dist/lib/node-esm/MarkdownContainer-LUSMORP2.mjs +13 -0
  42. package/dist/lib/node-esm/{anchor-sort-PCDXEBJ2.mjs → anchor-sort-G7D5TAI6.mjs} +11 -10
  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-AMHACOXW.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-HAIEWPU7.mjs → chunk-EYAFC4N7.mjs} +41 -47
  56. package/dist/lib/node-esm/chunk-EYAFC4N7.mjs.map +7 -0
  57. package/dist/lib/node-esm/chunk-KXEQCFMB.mjs +61 -0
  58. package/dist/lib/node-esm/chunk-KXEQCFMB.mjs.map +7 -0
  59. package/dist/lib/node-esm/chunk-PRV35A7Z.mjs +168 -0
  60. package/dist/lib/node-esm/chunk-PRV35A7Z.mjs.map +7 -0
  61. package/dist/lib/node-esm/{chunk-PLZ7EVCT.mjs → chunk-SDTYEGGL.mjs} +56 -6
  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 +121 -143
  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-PKEVHTJK.mjs +214 -0
  73. package/dist/lib/node-esm/react-surface-PKEVHTJK.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.map +1 -0
  82. package/dist/types/src/blueprints/functions/create.test.d.ts.map +1 -0
  83. package/dist/types/src/blueprints/functions/index.d.ts +4 -0
  84. package/dist/types/src/blueprints/functions/index.d.ts.map +1 -0
  85. package/dist/types/src/blueprints/functions/open.d.ts.map +1 -0
  86. package/dist/types/src/blueprints/functions/update.d.ts.map +1 -0
  87. package/dist/types/src/blueprints/functions/update.test.d.ts.map +1 -0
  88. package/dist/types/src/blueprints/index.d.ts +2 -0
  89. package/dist/types/src/blueprints/index.d.ts.map +1 -0
  90. package/dist/types/src/blueprints/markdown-blueprint.d.ts +21 -0
  91. package/dist/types/src/blueprints/markdown-blueprint.d.ts.map +1 -0
  92. package/dist/types/src/capabilities/anchor-sort/anchor-sort.d.ts +5 -0
  93. package/dist/types/src/capabilities/anchor-sort/anchor-sort.d.ts.map +1 -0
  94. package/dist/types/src/capabilities/anchor-sort/index.d.ts +3 -0
  95. package/dist/types/src/capabilities/anchor-sort/index.d.ts.map +1 -0
  96. package/dist/types/src/capabilities/app-graph-serializer/app-graph-serializer.d.ts +5 -0
  97. package/dist/types/src/capabilities/app-graph-serializer/app-graph-serializer.d.ts.map +1 -0
  98. package/dist/types/src/capabilities/app-graph-serializer/index.d.ts +3 -0
  99. package/dist/types/src/capabilities/app-graph-serializer/index.d.ts.map +1 -0
  100. package/dist/types/src/capabilities/artifact-definition/artifact-definition.d.ts +5 -0
  101. package/dist/types/src/capabilities/artifact-definition/artifact-definition.d.ts.map +1 -0
  102. package/dist/types/src/capabilities/artifact-definition/index.d.ts +3 -0
  103. package/dist/types/src/capabilities/artifact-definition/index.d.ts.map +1 -0
  104. package/dist/types/src/capabilities/blueprint-definition/blueprint-definition.d.ts +10 -0
  105. package/dist/types/src/capabilities/blueprint-definition/blueprint-definition.d.ts.map +1 -0
  106. package/dist/types/src/capabilities/blueprint-definition/index.d.ts +3 -0
  107. package/dist/types/src/capabilities/blueprint-definition/index.d.ts.map +1 -0
  108. package/dist/types/src/capabilities/index.d.ts +6 -13
  109. package/dist/types/src/capabilities/index.d.ts.map +1 -1
  110. package/dist/types/src/capabilities/operation-resolver/index.d.ts +3 -0
  111. package/dist/types/src/capabilities/operation-resolver/index.d.ts.map +1 -0
  112. package/dist/types/src/capabilities/operation-resolver/operation-resolver.d.ts +5 -0
  113. package/dist/types/src/capabilities/operation-resolver/operation-resolver.d.ts.map +1 -0
  114. package/dist/types/src/capabilities/react-surface/index.d.ts +3 -0
  115. package/dist/types/src/capabilities/react-surface/index.d.ts.map +1 -0
  116. package/dist/types/src/capabilities/react-surface/react-surface.d.ts +5 -0
  117. package/dist/types/src/capabilities/react-surface/react-surface.d.ts.map +1 -0
  118. package/dist/types/src/capabilities/settings/index.d.ts +3 -0
  119. package/dist/types/src/capabilities/settings/index.d.ts.map +1 -0
  120. package/dist/types/src/capabilities/settings/settings.d.ts +6 -0
  121. package/dist/types/src/capabilities/settings/settings.d.ts.map +1 -0
  122. package/dist/types/src/capabilities/state/index.d.ts +3 -0
  123. package/dist/types/src/capabilities/state/index.d.ts.map +1 -0
  124. package/dist/types/src/capabilities/state/state.d.ts +5 -0
  125. package/dist/types/src/capabilities/state/state.d.ts.map +1 -0
  126. package/dist/types/src/cli/index.d.ts +2 -0
  127. package/dist/types/src/cli/index.d.ts.map +1 -0
  128. package/dist/types/src/cli/plugin.d.ts +3 -0
  129. package/dist/types/src/cli/plugin.d.ts.map +1 -0
  130. package/dist/types/src/components/MarkdownCard/MarkdownCard.d.ts +4 -3
  131. package/dist/types/src/components/MarkdownCard/MarkdownCard.d.ts.map +1 -1
  132. package/dist/types/src/components/MarkdownCard/MarkdownCard.stories.d.ts +5 -5
  133. package/dist/types/src/components/MarkdownCard/MarkdownCard.stories.d.ts.map +1 -1
  134. package/dist/types/src/components/MarkdownContainer.d.ts +19 -5
  135. package/dist/types/src/components/MarkdownContainer.d.ts.map +1 -1
  136. package/dist/types/src/components/MarkdownContainer.stories.d.ts +1 -0
  137. package/dist/types/src/components/MarkdownContainer.stories.d.ts.map +1 -1
  138. package/dist/types/src/components/MarkdownEditor/FileUpload.d.ts +2 -2
  139. package/dist/types/src/components/MarkdownEditor/FileUpload.d.ts.map +1 -1
  140. package/dist/types/src/components/MarkdownEditor/MarkdownEditor.d.ts +8 -7
  141. package/dist/types/src/components/MarkdownEditor/MarkdownEditor.d.ts.map +1 -1
  142. package/dist/types/src/components/MarkdownEditor/MarkdownEditor.stories.d.ts.map +1 -1
  143. package/dist/types/src/components/MarkdownEditor/MarkdownEditorContent.d.ts +12 -8
  144. package/dist/types/src/components/MarkdownEditor/MarkdownEditorContent.d.ts.map +1 -1
  145. package/dist/types/src/components/MarkdownEditor/MarkdownEditorToolbar.d.ts +4 -4
  146. package/dist/types/src/components/MarkdownEditor/MarkdownEditorToolbar.d.ts.map +1 -1
  147. package/dist/types/src/components/MarkdownSettings/MarkdownSettings.d.ts +4 -2
  148. package/dist/types/src/components/MarkdownSettings/MarkdownSettings.d.ts.map +1 -1
  149. package/dist/types/src/components/Suggestions.stories.d.ts.map +1 -1
  150. package/dist/types/src/components/index.d.ts +5 -2
  151. package/dist/types/src/components/index.d.ts.map +1 -1
  152. package/dist/types/src/hooks/useEditorMenuOptions.d.ts.map +1 -1
  153. package/dist/types/src/hooks/useExtensions.d.ts +3 -3
  154. package/dist/types/src/hooks/useExtensions.d.ts.map +1 -1
  155. package/dist/types/src/hooks/useLinkQuery.d.ts +2 -2
  156. package/dist/types/src/hooks/useLinkQuery.d.ts.map +1 -1
  157. package/dist/types/src/hooks/useSelectCurrentThread.d.ts.map +1 -1
  158. package/dist/types/src/index.d.ts +1 -2
  159. package/dist/types/src/index.d.ts.map +1 -1
  160. package/dist/types/src/meta.d.ts +2 -2
  161. package/dist/types/src/meta.d.ts.map +1 -1
  162. package/dist/types/src/testing.d.ts +2 -2
  163. package/dist/types/src/testing.d.ts.map +1 -1
  164. package/dist/types/src/translations.d.ts +1 -0
  165. package/dist/types/src/translations.d.ts.map +1 -1
  166. package/dist/types/src/types/Markdown.d.ts +15 -15
  167. package/dist/types/src/types/Markdown.d.ts.map +1 -1
  168. package/dist/types/src/types/MarkdownAction.d.ts +63 -31
  169. package/dist/types/src/types/MarkdownAction.d.ts.map +1 -1
  170. package/dist/types/src/types/capabilities.d.ts +22 -0
  171. package/dist/types/src/types/capabilities.d.ts.map +1 -0
  172. package/dist/types/src/types/events.d.ts +5 -0
  173. package/dist/types/src/types/events.d.ts.map +1 -0
  174. package/dist/types/src/types/index.d.ts +3 -0
  175. package/dist/types/src/types/index.d.ts.map +1 -1
  176. package/dist/types/src/types/types.d.ts +2 -2
  177. package/dist/types/src/types/types.d.ts.map +1 -1
  178. package/dist/types/src/util.d.ts +3 -0
  179. package/dist/types/src/util.d.ts.map +1 -1
  180. package/dist/types/src/util.test.d.ts +2 -0
  181. package/dist/types/src/util.test.d.ts.map +1 -0
  182. package/dist/types/tsconfig.tsbuildinfo +1 -1
  183. package/package.json +82 -67
  184. package/src/MarkdownPlugin.tsx +60 -89
  185. package/src/blueprints/functions/create.conversations.json +1 -0
  186. package/src/{functions → blueprints/functions}/create.test.ts +22 -25
  187. package/src/{functions → blueprints/functions}/create.ts +1 -1
  188. package/src/blueprints/functions/index.ts +7 -0
  189. package/src/{functions → blueprints/functions}/open.ts +4 -3
  190. package/src/blueprints/functions/update.conversations.json +1 -0
  191. package/src/{functions → blueprints/functions}/update.test.ts +25 -27
  192. package/src/{functions → blueprints/functions}/update.ts +4 -3
  193. package/src/blueprints/index.ts +5 -0
  194. package/src/blueprints/markdown-blueprint.ts +38 -0
  195. package/src/capabilities/anchor-sort/anchor-sort.ts +36 -0
  196. package/src/capabilities/anchor-sort/index.ts +7 -0
  197. package/src/capabilities/app-graph-serializer/app-graph-serializer.ts +59 -0
  198. package/src/capabilities/app-graph-serializer/index.ts +7 -0
  199. package/src/capabilities/artifact-definition/artifact-definition.ts +110 -0
  200. package/src/capabilities/artifact-definition/index.ts +7 -0
  201. package/src/capabilities/blueprint-definition/blueprint-definition.ts +25 -0
  202. package/src/capabilities/blueprint-definition/index.ts +7 -0
  203. package/src/capabilities/index.ts +6 -11
  204. package/src/capabilities/operation-resolver/index.ts +7 -0
  205. package/src/capabilities/operation-resolver/operation-resolver.ts +45 -0
  206. package/src/capabilities/react-surface/index.ts +7 -0
  207. package/src/capabilities/react-surface/react-surface.tsx +100 -0
  208. package/src/capabilities/settings/index.ts +7 -0
  209. package/src/capabilities/settings/settings.ts +36 -0
  210. package/src/capabilities/state/index.ts +7 -0
  211. package/src/capabilities/state/state.ts +31 -0
  212. package/src/cli/index.ts +5 -0
  213. package/src/cli/plugin.ts +29 -0
  214. package/src/components/MarkdownCard/MarkdownCard.stories.tsx +25 -43
  215. package/src/components/MarkdownCard/MarkdownCard.tsx +17 -44
  216. package/src/components/MarkdownContainer.stories.tsx +47 -60
  217. package/src/components/MarkdownContainer.tsx +86 -88
  218. package/src/components/MarkdownEditor/FileUpload.tsx +3 -3
  219. package/src/components/MarkdownEditor/MarkdownEditor.stories.tsx +16 -17
  220. package/src/components/MarkdownEditor/MarkdownEditor.tsx +14 -15
  221. package/src/components/MarkdownEditor/MarkdownEditorContent.tsx +44 -18
  222. package/src/components/MarkdownEditor/MarkdownEditorToolbar.tsx +7 -4
  223. package/src/components/MarkdownSettings/MarkdownSettings.tsx +24 -10
  224. package/src/components/Suggestions.stories.tsx +23 -33
  225. package/src/components/index.ts +8 -3
  226. package/src/hooks/useEditorMenuOptions.ts +10 -13
  227. package/src/hooks/useExtensions.tsx +25 -30
  228. package/src/hooks/useLinkQuery.ts +19 -19
  229. package/src/hooks/useSelectCurrentThread.tsx +37 -42
  230. package/src/index.ts +1 -2
  231. package/src/meta.ts +2 -2
  232. package/src/testing.ts +5 -5
  233. package/src/translations.ts +1 -0
  234. package/src/types/Markdown.ts +6 -7
  235. package/src/types/MarkdownAction.ts +48 -18
  236. package/src/types/capabilities.ts +38 -0
  237. package/src/types/events.ts +13 -0
  238. package/src/types/index.ts +3 -0
  239. package/src/types/types.ts +3 -2
  240. package/src/util.test.ts +44 -0
  241. package/src/util.tsx +75 -5
  242. package/dist/lib/browser/MarkdownCard-JYMDPKV5.mjs +0 -12
  243. package/dist/lib/browser/MarkdownContainer-Y75XSVBX.mjs +0 -15
  244. package/dist/lib/browser/anchor-sort-3HGPGCOO.mjs.map +0 -7
  245. package/dist/lib/browser/app-graph-serializer-POZN234F.mjs +0 -51
  246. package/dist/lib/browser/app-graph-serializer-POZN234F.mjs.map +0 -7
  247. package/dist/lib/browser/blueprint-definition-GIPKFDY5.mjs +0 -13
  248. package/dist/lib/browser/chunk-22XSSNBS.mjs.map +0 -7
  249. package/dist/lib/browser/chunk-2MLGSYRN.mjs +0 -20
  250. package/dist/lib/browser/chunk-2MLGSYRN.mjs.map +0 -7
  251. package/dist/lib/browser/chunk-BQTYJOFB.mjs +0 -28
  252. package/dist/lib/browser/chunk-BQTYJOFB.mjs.map +0 -7
  253. package/dist/lib/browser/chunk-GH6GQSBL.mjs +0 -51
  254. package/dist/lib/browser/chunk-GH6GQSBL.mjs.map +0 -7
  255. package/dist/lib/browser/chunk-IBCHVMZW.mjs +0 -16
  256. package/dist/lib/browser/chunk-IBCHVMZW.mjs.map +0 -7
  257. package/dist/lib/browser/chunk-K3LXOU3E.mjs +0 -827
  258. package/dist/lib/browser/chunk-K3LXOU3E.mjs.map +0 -7
  259. package/dist/lib/browser/chunk-PBJLFIOX.mjs +0 -96
  260. package/dist/lib/browser/chunk-PBJLFIOX.mjs.map +0 -7
  261. package/dist/lib/browser/chunk-QYSEJ5GP.mjs +0 -79
  262. package/dist/lib/browser/chunk-QYSEJ5GP.mjs.map +0 -7
  263. package/dist/lib/browser/chunk-Y53FQREH.mjs.map +0 -7
  264. package/dist/lib/browser/intent-resolver-Z5L7TXUK.mjs +0 -62
  265. package/dist/lib/browser/intent-resolver-Z5L7TXUK.mjs.map +0 -7
  266. package/dist/lib/browser/react-surface-GO5ZOKNN.mjs +0 -211
  267. package/dist/lib/browser/react-surface-GO5ZOKNN.mjs.map +0 -7
  268. package/dist/lib/browser/settings-TZUDB5EW.mjs +0 -28
  269. package/dist/lib/browser/settings-TZUDB5EW.mjs.map +0 -7
  270. package/dist/lib/browser/state-BTUKVZHY.mjs +0 -37
  271. package/dist/lib/browser/state-BTUKVZHY.mjs.map +0 -7
  272. package/dist/lib/browser/toolkit.mjs +0 -13
  273. package/dist/lib/node-esm/MarkdownContainer-YRDSRDCS.mjs +0 -16
  274. package/dist/lib/node-esm/anchor-sort-PCDXEBJ2.mjs.map +0 -7
  275. package/dist/lib/node-esm/app-graph-serializer-NF65JYAS.mjs +0 -52
  276. package/dist/lib/node-esm/app-graph-serializer-NF65JYAS.mjs.map +0 -7
  277. package/dist/lib/node-esm/blueprint-definition-ENKJZYQS.mjs +0 -14
  278. package/dist/lib/node-esm/blueprint-definition-ENKJZYQS.mjs.map +0 -7
  279. package/dist/lib/node-esm/chunk-AMHACOXW.mjs.map +0 -7
  280. package/dist/lib/node-esm/chunk-CT7CFX5G.mjs +0 -828
  281. package/dist/lib/node-esm/chunk-CT7CFX5G.mjs.map +0 -7
  282. package/dist/lib/node-esm/chunk-GMMVSXQ6.mjs +0 -17
  283. package/dist/lib/node-esm/chunk-GMMVSXQ6.mjs.map +0 -7
  284. package/dist/lib/node-esm/chunk-HAIEWPU7.mjs.map +0 -7
  285. package/dist/lib/node-esm/chunk-KCHUTL3Q.mjs +0 -22
  286. package/dist/lib/node-esm/chunk-KCHUTL3Q.mjs.map +0 -7
  287. package/dist/lib/node-esm/chunk-NGYJNQ6A.mjs +0 -80
  288. package/dist/lib/node-esm/chunk-NGYJNQ6A.mjs.map +0 -7
  289. package/dist/lib/node-esm/chunk-PIOOG7A5.mjs +0 -97
  290. package/dist/lib/node-esm/chunk-PIOOG7A5.mjs.map +0 -7
  291. package/dist/lib/node-esm/chunk-PLZ7EVCT.mjs.map +0 -7
  292. package/dist/lib/node-esm/chunk-SHAMSMKQ.mjs +0 -29
  293. package/dist/lib/node-esm/chunk-SHAMSMKQ.mjs.map +0 -7
  294. package/dist/lib/node-esm/intent-resolver-6B3PFQ5F.mjs +0 -63
  295. package/dist/lib/node-esm/intent-resolver-6B3PFQ5F.mjs.map +0 -7
  296. package/dist/lib/node-esm/react-surface-I46BPCWT.mjs +0 -212
  297. package/dist/lib/node-esm/react-surface-I46BPCWT.mjs.map +0 -7
  298. package/dist/lib/node-esm/settings-CJ3T5EX4.mjs +0 -29
  299. package/dist/lib/node-esm/settings-CJ3T5EX4.mjs.map +0 -7
  300. package/dist/lib/node-esm/state-K6EH7SRZ.mjs +0 -38
  301. package/dist/lib/node-esm/state-K6EH7SRZ.mjs.map +0 -7
  302. package/dist/lib/node-esm/toolkit.mjs +0 -14
  303. package/dist/lib/node-esm/toolkit.mjs.map +0 -7
  304. package/dist/types/src/capabilities/anchor-sort.d.ts +0 -4
  305. package/dist/types/src/capabilities/anchor-sort.d.ts.map +0 -1
  306. package/dist/types/src/capabilities/app-graph-serializer.d.ts +0 -4
  307. package/dist/types/src/capabilities/app-graph-serializer.d.ts.map +0 -1
  308. package/dist/types/src/capabilities/artifact-definition.d.ts +0 -3
  309. package/dist/types/src/capabilities/artifact-definition.d.ts.map +0 -1
  310. package/dist/types/src/capabilities/blueprint-definition.d.ts +0 -7
  311. package/dist/types/src/capabilities/blueprint-definition.d.ts.map +0 -1
  312. package/dist/types/src/capabilities/capabilities.d.ts +0 -12
  313. package/dist/types/src/capabilities/capabilities.d.ts.map +0 -1
  314. package/dist/types/src/capabilities/intent-resolver.d.ts +0 -4
  315. package/dist/types/src/capabilities/intent-resolver.d.ts.map +0 -1
  316. package/dist/types/src/capabilities/react-surface.d.ts +0 -4
  317. package/dist/types/src/capabilities/react-surface.d.ts.map +0 -1
  318. package/dist/types/src/capabilities/settings.d.ts +0 -4
  319. package/dist/types/src/capabilities/settings.d.ts.map +0 -1
  320. package/dist/types/src/capabilities/state.d.ts +0 -11
  321. package/dist/types/src/capabilities/state.d.ts.map +0 -1
  322. package/dist/types/src/events.d.ts +0 -4
  323. package/dist/types/src/events.d.ts.map +0 -1
  324. package/dist/types/src/functions/create.d.ts.map +0 -1
  325. package/dist/types/src/functions/create.test.d.ts.map +0 -1
  326. package/dist/types/src/functions/index.d.ts +0 -18
  327. package/dist/types/src/functions/index.d.ts.map +0 -1
  328. package/dist/types/src/functions/open.d.ts.map +0 -1
  329. package/dist/types/src/functions/update.d.ts.map +0 -1
  330. package/dist/types/src/functions/update.test.d.ts.map +0 -1
  331. package/dist/types/src/toolkit.d.ts +0 -3
  332. package/dist/types/src/toolkit.d.ts.map +0 -1
  333. package/src/capabilities/anchor-sort.ts +0 -30
  334. package/src/capabilities/app-graph-serializer.ts +0 -54
  335. package/src/capabilities/artifact-definition.ts +0 -112
  336. package/src/capabilities/blueprint-definition.ts +0 -43
  337. package/src/capabilities/capabilities.ts +0 -22
  338. package/src/capabilities/intent-resolver.ts +0 -58
  339. package/src/capabilities/react-surface.tsx +0 -93
  340. package/src/capabilities/settings.ts +0 -25
  341. package/src/capabilities/state.ts +0 -31
  342. package/src/events.ts +0 -11
  343. package/src/functions/create.conversations.json +0 -1
  344. package/src/functions/index.ts +0 -13
  345. package/src/functions/update.conversations.json +0 -1
  346. package/src/toolkit.ts +0 -6
  347. /package/dist/lib/browser/{MarkdownCard-JYMDPKV5.mjs.map → MarkdownCard-HFNNE4B4.mjs.map} +0 -0
  348. /package/dist/lib/browser/{MarkdownContainer-Y75XSVBX.mjs.map → MarkdownContainer-V7EAADMF.mjs.map} +0 -0
  349. /package/dist/lib/browser/{blueprint-definition-GIPKFDY5.mjs.map → blueprints/index.mjs.map} +0 -0
  350. /package/dist/lib/{browser/toolkit.mjs.map → node-esm/MarkdownCard-GMNXUWWR.mjs.map} +0 -0
  351. /package/dist/lib/node-esm/{MarkdownCard-ZXPJLUYO.mjs.map → MarkdownContainer-LUSMORP2.mjs.map} +0 -0
  352. /package/dist/lib/node-esm/{MarkdownContainer-YRDSRDCS.mjs.map → blueprints/index.mjs.map} +0 -0
  353. /package/dist/types/src/{functions → blueprints/functions}/create.d.ts +0 -0
  354. /package/dist/types/src/{functions → blueprints/functions}/create.test.d.ts +0 -0
  355. /package/dist/types/src/{functions → blueprints/functions}/open.d.ts +0 -0
  356. /package/dist/types/src/{functions → blueprints/functions}/update.d.ts +0 -0
  357. /package/dist/types/src/{functions → blueprints/functions}/update.test.d.ts +0 -0
@@ -4,110 +4,108 @@
4
4
 
5
5
  import { type Extension } from '@codemirror/state';
6
6
  import { Atom } from '@effect-atom/atom-react';
7
- import React, { useMemo } from 'react';
7
+ import React, { forwardRef, useMemo } from 'react';
8
8
 
9
- import { Capabilities } from '@dxos/app-framework';
10
- import { useAppGraph, useCapabilities } from '@dxos/app-framework/react';
9
+ import { Common } from '@dxos/app-framework';
10
+ import { type SurfaceComponentProps, useAppGraph, useCapabilities } from '@dxos/app-framework/react';
11
11
  import { Obj } from '@dxos/echo';
12
- import { getSpace } from '@dxos/react-client/echo';
12
+ import { useActionRunner } from '@dxos/plugin-graph';
13
+ import { useObject } from '@dxos/react-client/echo';
13
14
  import { type SelectionManager } from '@dxos/react-ui-attention';
14
- import { StackItem } from '@dxos/react-ui-stack';
15
+ import { Layout } from '@dxos/react-ui-mosaic';
15
16
  import { Text } from '@dxos/schema';
16
17
 
17
- import { MarkdownCapabilities } from '../capabilities';
18
- import { type DocumentType, useLinkQuery } from '../hooks';
19
- import { Markdown, type MarkdownPluginState } from '../types';
18
+ import { useLinkQuery } from '../hooks';
19
+ import { Markdown, MarkdownCapabilities, type MarkdownPluginState } from '../types';
20
20
 
21
21
  import { MarkdownEditor, type MarkdownEditorContentProps, type MarkdownEditorRootProps } from './MarkdownEditor';
22
22
 
23
- export type MarkdownContainerProps = {
24
- role?: string;
25
- object: DocumentType;
26
- settings: Markdown.Settings;
27
- selectionManager?: SelectionManager;
28
- } & (Pick<MarkdownEditorRootProps, 'id' | 'viewMode' | 'onViewModeChange'> &
29
- Pick<MarkdownEditorContentProps, 'editorStateStore'> &
30
- Pick<MarkdownPluginState, 'extensionProviders'>);
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
+ >;
31
33
 
32
- export const MarkdownContainer = ({
33
- id,
34
- role,
35
- object,
36
- settings,
37
- extensionProviders,
38
- ...props
39
- }: MarkdownContainerProps) => {
40
- const space = getSpace(object);
41
- const isDocument = Obj.instanceOf(Markdown.Document, object);
42
- const isText = Obj.instanceOf(Text.Text, object);
43
- const attendableId = isDocument ? Obj.getDXN(object).toString() : undefined;
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;
44
41
 
45
- // Extensions from other plugins.
46
- // TODO(burdon): Document MarkdownPluginState.extensionProviders
47
- const otherExtensionProviders = useCapabilities(MarkdownCapabilities.Extensions);
48
- const extensions = useMemo<Extension[]>(() => {
49
- if (!Obj.instanceOf(Markdown.Document, object)) {
50
- return [];
51
- }
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
+ }
52
49
 
53
- return [...(otherExtensionProviders ?? []), ...(extensionProviders ?? [])]
54
- .flat()
55
- .reduce((acc: Extension[], provider) => {
56
- const extension =
57
- typeof provider === 'function' ? provider({ document: object as Markdown.Document }) : provider;
58
- if (extension) {
59
- acc.push(extension);
60
- }
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
+ }
61
58
 
62
- return acc;
63
- }, []);
64
- }, [extensionProviders, otherExtensionProviders, object]);
59
+ return acc;
60
+ }, []);
61
+ }, [extensionProviders, otherExtensionProviders, object]);
65
62
 
66
- // Toolbar actions from app graph.
67
- const { graph } = useAppGraph();
68
- const customActions = useMemo(() => {
69
- return Atom.make((get) => {
70
- const actions = get(graph.actions(id));
71
- const nodes = actions.filter((action) => action.properties.disposition === 'toolbar');
72
- const edges = nodes.map((node) => ({ source: 'root', target: node.id }));
73
- return { nodes, edges };
74
- });
75
- }, [graph]);
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]);
76
74
 
77
- // File upload.
78
- const [upload] = useCapabilities(Capabilities.FileUploader);
79
- const handleFileUpload = useMemo(() => {
80
- if (!space || !upload) {
81
- return undefined;
82
- }
75
+ // File upload.
76
+ const [upload] = useCapabilities(Common.Capability.FileUploader);
77
+ const handleFileUpload = useMemo(() => {
78
+ if (!db || !upload) {
79
+ return undefined;
80
+ }
83
81
 
84
- return async (file: File) => upload(space, file);
85
- }, [space, upload]);
82
+ return async (file: File) => upload(db, file);
83
+ }, [db, upload]);
86
84
 
87
- // Query for @ refs.
88
- const handleLinkQuery = useLinkQuery(space);
85
+ // Query for @ refs.
86
+ const handleLinkQuery = useLinkQuery(db);
89
87
 
90
- return (
91
- <StackItem.Content toolbar={settings.toolbar}>
92
- <MarkdownEditor.Root
93
- id={attendableId ?? id}
94
- object={object}
95
- extensions={extensions}
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
104
- initialValue={isDocument ? object.content?.target?.content : isText ? object.content : object.text}
105
- scrollPastEnd={role === 'article'}
106
- />
107
- <MarkdownEditor.Blocks />
108
- </MarkdownEditor.Root>
109
- </StackItem.Content>
110
- );
111
- };
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
+ );
112
110
 
113
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
10
  import { Filter, Obj } from '@dxos/echo';
11
- import { AttentionPlugin } from '@dxos/plugin-attention';
12
11
  import { ClientPlugin } from '@dxos/plugin-client';
12
+ import { corePlugins } from '@dxos/plugin-testing';
13
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';
@@ -30,19 +30,18 @@ const DefaultStory = (props: StoryProps) => {
30
30
  const [doc] = useQuery(space?.db, Filter.type(Markdown.Document));
31
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
37
  return (
39
38
  <div className='contents' {...attentionAttrs}>
40
- <StackItem.Content toolbar>
39
+ <Layout.Main toolbar>
41
40
  <MarkdownEditor.Root id={id} object={doc} {...props}>
42
41
  <MarkdownEditor.Toolbar id={id} />
43
42
  <MarkdownEditor.Content />
44
43
  </MarkdownEditor.Root>
45
- </StackItem.Content>
44
+ </Layout.Main>
46
45
  </div>
47
46
  );
48
47
  };
@@ -53,22 +52,22 @@ const meta: Meta<typeof DefaultStory> = {
53
52
  render: DefaultStory as any,
54
53
  decorators: [
55
54
  withTheme,
56
- withLayout({ container: 'column' }),
57
- // TODO(burdon): Create story without client.
55
+ withLayout({ layout: 'column' }),
58
56
  withPluginManager({
59
57
  plugins: [
58
+ ...corePlugins(),
60
59
  ClientPlugin({
61
60
  types: [Markdown.Document],
62
- onClientInitialized: async ({ client }) => {
63
- await client.halo.createIdentity();
64
- await client.spaces.waitUntilReady();
65
- const space = client.spaces.default;
66
- await space.waitUntilReady();
67
- space.db.add(Markdown.make({ content }));
68
- },
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
+ }),
69
70
  }),
70
- IntentPlugin(),
71
- AttentionPlugin(),
72
71
  ],
73
72
  }),
74
73
  ],
@@ -4,23 +4,22 @@
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
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
16
  EditorMenuProvider,
17
17
  type EditorToolbarState,
18
- type PreviewBlock,
19
- type PreviewOptions,
20
18
  type UseEditorMenu,
21
19
  useEditorMenu,
22
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 {
@@ -49,10 +48,10 @@ type MarkdownEditorContextValue = {
49
48
  setEditorView: (view: EditorView) => void;
50
49
  extensions: Extension[];
51
50
  previewBlocks: PreviewBlock[];
52
- toolbarState: Live<EditorToolbarState>;
51
+ toolbarState: Atom.Writable<EditorToolbarState>;
53
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,7 +64,7 @@ type MarkdownEditorRootProps = PropsWithChildren<
65
64
  {
66
65
  object?: DocumentType;
67
66
  extensions?: Extension[];
68
- } & Pick<MarkdownEditorContextValue, 'id' | 'onFileUpload' | 'onViewModeChange' | 'viewMode'> &
67
+ } & Pick<MarkdownEditorContextValue, 'id' | 'onAction' | 'onFileUpload' | 'onViewModeChange' | 'viewMode'> &
69
68
  Pick<UseEditorMenuOptionsProps, 'slashCommandGroups' | 'onLinkQuery'> &
70
69
  Pick<ExtensionsOptions, 'editorStateStore' | 'selectionManager' | 'settings'>
71
70
  >;
@@ -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
@@ -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,11 +153,11 @@ 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
 
@@ -167,9 +166,9 @@ const MarkdownEditorContent = (props: MarkdownEditorContentProps) => {
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
174
  </EditorMenuProvider>
@@ -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
10
  import {
11
11
  type EditorMenuGroup,
12
+ type EditorToolbarState,
13
+ type UseTextEditorProps,
14
+ useTextEditor,
15
+ } from '@dxos/react-ui-editor';
16
+ import {
12
17
  type EditorSelectionState,
13
18
  type EditorStateStore,
14
- type EditorToolbarState,
15
19
  type EditorViewMode,
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
43
  slashCommandGroups?: EditorMenuGroup[];
41
44
  editorStateStore?: EditorStateStore;
42
- toolbarState?: Live<EditorToolbarState>;
45
+ toolbarState?: Atom.Writable<EditorToolbarState>;
43
46
  onLinkQuery?: (query?: string) => Promise<EditorMenuGroup[]>;
44
- } & (Pick<UseTextEditorProps, 'initialValue' | 'extensions'> & Pick<MarkdownEditorToolbarProps, 'onFileUpload'>);
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]);
@@ -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({
@@ -116,7 +142,7 @@ export const MarkdownEditorContent = forwardRef<EditorView | null, MarkdownEdito
116
142
  role='none'
117
143
  ref={parentRef}
118
144
  data-testid='composer.markdownRoot'
119
- className={stackItemContentEditorClassNames(role)}
145
+ className={mx(stackItemContentEditorClassNames(role), classNames)}
120
146
  data-popover-collision-boundary={true}
121
147
  {...focusAttributes}
122
148
  />
@@ -5,10 +5,11 @@
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';
8
+ import { type Common } from '@dxos/app-framework';
9
9
  import { invariant } from '@dxos/invariant';
10
10
  import { type ThemedClassName } from '@dxos/react-ui';
11
- import { EditorToolbar, type EditorToolbarProps, type EditorViewMode } from '@dxos/react-ui-editor';
11
+ import { EditorToolbar, type EditorToolbarProps } from '@dxos/react-ui-editor';
12
+ import { type EditorViewMode } from '@dxos/ui-editor';
12
13
 
13
14
  import { FileUpload, type FileUploadAction } from './FileUpload';
14
15
 
@@ -16,8 +17,8 @@ export type MarkdownEditorToolbarProps = ThemedClassName<
16
17
  {
17
18
  id: string;
18
19
  editorView?: EditorView;
19
- onFileUpload?: (file: File) => Promise<FileInfo | undefined>;
20
- } & Pick<EditorToolbarProps, 'role' | 'state' | 'customActions' | 'onViewModeChange'>
20
+ onFileUpload?: (file: File) => Promise<Common.FileInfo | undefined>;
21
+ } & Pick<EditorToolbarProps, 'role' | 'state' | 'customActions' | 'onAction' | 'onViewModeChange'>
21
22
  >;
22
23
 
23
24
  export const MarkdownEditorToolbar = ({
@@ -27,6 +28,7 @@ export const MarkdownEditorToolbar = ({
27
28
  state,
28
29
  editorView,
29
30
  customActions,
31
+ onAction,
30
32
  onFileUpload,
31
33
  onViewModeChange,
32
34
  }: MarkdownEditorToolbarProps) => {
@@ -53,6 +55,7 @@ export const MarkdownEditorToolbar = ({
53
55
  state={state}
54
56
  customActions={customActions}
55
57
  getView={getView}
58
+ onAction={onAction}
56
59
  onImageUpload={upload ?? undefined}
57
60
  onViewModeChange={handleViewModeChange}
58
61
  />
@@ -5,13 +5,18 @@
5
5
  import React from 'react';
6
6
 
7
7
  import { Input, Select, useTranslation } from '@dxos/react-ui';
8
- import { type EditorInputMode, EditorInputModes, type EditorViewMode, EditorViewModes } from '@dxos/react-ui-editor';
9
8
  import { ControlGroup, ControlItemInput, ControlPage, ControlSection } from '@dxos/react-ui-form';
9
+ import { type EditorInputMode, EditorInputModes, type EditorViewMode, EditorViewModes } from '@dxos/ui-editor';
10
10
 
11
11
  import { meta } from '../../meta';
12
12
  import { type Markdown } from '../../types';
13
13
 
14
- export const MarkdownSettings = ({ settings }: { settings: Markdown.Settings }) => {
14
+ export type MarkdownSettingsComponentProps = {
15
+ settings: Markdown.Settings;
16
+ onSettingsChange: (fn: (current: Markdown.Settings) => Markdown.Settings) => void;
17
+ };
18
+
19
+ export const MarkdownSettings = ({ settings, onSettingsChange }: MarkdownSettingsComponentProps) => {
15
20
  const { t } = useTranslation(meta.id);
16
21
 
17
22
  // TODO(wittjosiah): Add skill test confirmation for entering vim mode.
@@ -23,7 +28,7 @@ export const MarkdownSettings = ({ settings }: { settings: Markdown.Settings })
23
28
  <Select.Root
24
29
  value={settings.defaultViewMode}
25
30
  onValueChange={(value) => {
26
- settings.defaultViewMode = value as EditorViewMode;
31
+ onSettingsChange((s) => ({ ...s, defaultViewMode: value as EditorViewMode }));
27
32
  }}
28
33
  >
29
34
  <Select.TriggerButton />
@@ -46,7 +51,7 @@ export const MarkdownSettings = ({ settings }: { settings: Markdown.Settings })
46
51
  <Select.Root
47
52
  value={settings.editorInputMode ?? 'default'}
48
53
  onValueChange={(value) => {
49
- settings.editorInputMode = value as EditorInputMode;
54
+ onSettingsChange((s) => ({ ...s, editorInputMode: value as EditorInputMode }));
50
55
  }}
51
56
  >
52
57
  <Select.TriggerButton placeholder={t('select editor input mode placeholder')} />
@@ -66,29 +71,38 @@ export const MarkdownSettings = ({ settings }: { settings: Markdown.Settings })
66
71
  </ControlItemInput>
67
72
 
68
73
  <ControlItemInput title={t('settings toolbar label')}>
69
- <Input.Switch checked={settings.toolbar} onCheckedChange={(checked) => (settings.toolbar = !!checked)} />
74
+ <Input.Switch
75
+ checked={settings.toolbar}
76
+ onCheckedChange={(checked) => onSettingsChange((s) => ({ ...s, toolbar: !!checked }))}
77
+ />
70
78
  </ControlItemInput>
71
79
 
72
80
  <ControlItemInput title={t('settings numbered headings label')}>
73
81
  <Input.Switch
74
82
  checked={settings.numberedHeadings}
75
- onCheckedChange={(checked) => (settings.numberedHeadings = !!checked)}
83
+ onCheckedChange={(checked) => onSettingsChange((s) => ({ ...s, numberedHeadings: !!checked }))}
76
84
  />
77
85
  </ControlItemInput>
78
86
 
79
87
  <ControlItemInput title={t('settings folding label')}>
80
- <Input.Switch checked={settings.folding} onCheckedChange={(checked) => (settings.folding = !!checked)} />
88
+ <Input.Switch
89
+ checked={settings.folding}
90
+ onCheckedChange={(checked) => onSettingsChange((s) => ({ ...s, folding: !!checked }))}
91
+ />
81
92
  </ControlItemInput>
82
93
 
83
94
  <ControlItemInput title={t('settings experimental label')}>
84
95
  <Input.Switch
85
96
  checked={settings.experimental}
86
- onCheckedChange={(checked) => (settings.experimental = !!checked)}
97
+ onCheckedChange={(checked) => onSettingsChange((s) => ({ ...s, experimental: !!checked }))}
87
98
  />
88
99
  </ControlItemInput>
89
100
 
90
101
  <ControlItemInput title={t('settings debug label')}>
91
- <Input.Switch checked={settings.debug} onCheckedChange={(checked) => (settings.debug = !!checked)} />
102
+ <Input.Switch
103
+ checked={settings.debug}
104
+ onCheckedChange={(checked) => onSettingsChange((s) => ({ ...s, debug: !!checked }))}
105
+ />
92
106
  </ControlItemInput>
93
107
 
94
108
  {settings.debug && (
@@ -96,7 +110,7 @@ export const MarkdownSettings = ({ settings }: { settings: Markdown.Settings })
96
110
  <Input.TextArea
97
111
  rows={5}
98
112
  value={settings.typewriter}
99
- onChange={({ target: { value } }) => (settings.typewriter = value)}
113
+ onChange={({ target: { value } }) => onSettingsChange((s) => ({ ...s, typewriter: value }))}
100
114
  placeholder={t('settings debug placeholder')}
101
115
  />
102
116
  </ControlItemInput>