@dxos/plugin-markdown 0.8.4-main.2e9d522 → 0.8.4-main.548089c

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 (288) hide show
  1. package/dist/lib/browser/MarkdownCard-L3BS2SED.mjs +12 -0
  2. package/dist/lib/browser/MarkdownCard-L3BS2SED.mjs.map +7 -0
  3. package/dist/lib/browser/MarkdownContainer-KF3YL6CI.mjs +15 -0
  4. package/dist/lib/browser/MarkdownContainer-KF3YL6CI.mjs.map +7 -0
  5. package/dist/lib/browser/{anchor-sort-UKJJ7ZNP.mjs → anchor-sort-3HGPGCOO.mjs} +7 -8
  6. package/dist/lib/browser/anchor-sort-3HGPGCOO.mjs.map +7 -0
  7. package/dist/lib/browser/{app-graph-serializer-ICLAF662.mjs → app-graph-serializer-POZN234F.mjs} +15 -16
  8. package/dist/lib/browser/app-graph-serializer-POZN234F.mjs.map +7 -0
  9. package/dist/lib/browser/blueprint-definition-GIPKFDY5.mjs +13 -0
  10. package/dist/lib/browser/blueprint-definition-GIPKFDY5.mjs.map +7 -0
  11. package/dist/lib/browser/{chunk-LHDCHDBW.mjs → chunk-22XSSNBS.mjs} +10 -6
  12. package/dist/lib/browser/chunk-22XSSNBS.mjs.map +7 -0
  13. package/dist/lib/browser/chunk-2YCH7AOL.mjs +827 -0
  14. package/dist/lib/browser/chunk-2YCH7AOL.mjs.map +7 -0
  15. package/dist/lib/browser/chunk-BQTYJOFB.mjs +28 -0
  16. package/dist/lib/browser/chunk-BQTYJOFB.mjs.map +7 -0
  17. package/dist/lib/browser/chunk-BU7S64EA.mjs +95 -0
  18. package/dist/lib/browser/chunk-BU7S64EA.mjs.map +7 -0
  19. package/dist/lib/browser/{chunk-LFML7LC6.mjs → chunk-GH6GQSBL.mjs} +14 -14
  20. package/dist/lib/browser/chunk-GH6GQSBL.mjs.map +7 -0
  21. package/dist/lib/browser/chunk-IBCHVMZW.mjs +16 -0
  22. package/dist/lib/browser/chunk-IBCHVMZW.mjs.map +7 -0
  23. package/dist/lib/browser/chunk-IGS3RCFE.mjs +20 -0
  24. package/dist/lib/browser/chunk-IGS3RCFE.mjs.map +7 -0
  25. package/dist/lib/browser/chunk-QYSEJ5GP.mjs +79 -0
  26. package/dist/lib/browser/chunk-QYSEJ5GP.mjs.map +7 -0
  27. package/dist/lib/browser/chunk-Y53FQREH.mjs +150 -0
  28. package/dist/lib/browser/chunk-Y53FQREH.mjs.map +7 -0
  29. package/dist/lib/browser/index.mjs +41 -27
  30. package/dist/lib/browser/index.mjs.map +3 -3
  31. package/dist/lib/browser/intent-resolver-Z5L7TXUK.mjs +62 -0
  32. package/dist/lib/browser/intent-resolver-Z5L7TXUK.mjs.map +7 -0
  33. package/dist/lib/browser/meta.json +1 -1
  34. package/dist/lib/browser/react-surface-45NYBFCG.mjs +217 -0
  35. package/dist/lib/browser/react-surface-45NYBFCG.mjs.map +7 -0
  36. package/dist/lib/browser/{settings-KN75ZQY6.mjs → settings-TZUDB5EW.mjs} +7 -7
  37. package/dist/lib/browser/settings-TZUDB5EW.mjs.map +7 -0
  38. package/dist/lib/browser/{state-LZWTAS65.mjs → state-BTUKVZHY.mjs} +9 -9
  39. package/dist/lib/browser/state-BTUKVZHY.mjs.map +7 -0
  40. package/dist/lib/browser/toolkit.mjs +13 -0
  41. package/dist/lib/browser/toolkit.mjs.map +7 -0
  42. package/dist/lib/browser/types/index.mjs +6 -14
  43. package/dist/lib/node-esm/MarkdownCard-UUQLN6XK.mjs +13 -0
  44. package/dist/lib/node-esm/MarkdownCard-UUQLN6XK.mjs.map +7 -0
  45. package/dist/lib/node-esm/MarkdownContainer-PQBLVUW4.mjs +16 -0
  46. package/dist/lib/node-esm/MarkdownContainer-PQBLVUW4.mjs.map +7 -0
  47. package/dist/lib/node-esm/{anchor-sort-IPIS5D5B.mjs → anchor-sort-PCDXEBJ2.mjs} +7 -8
  48. package/dist/lib/node-esm/anchor-sort-PCDXEBJ2.mjs.map +7 -0
  49. package/dist/lib/node-esm/{app-graph-serializer-FLBXQKKR.mjs → app-graph-serializer-NF65JYAS.mjs} +15 -16
  50. package/dist/lib/node-esm/app-graph-serializer-NF65JYAS.mjs.map +7 -0
  51. package/dist/lib/node-esm/blueprint-definition-ENKJZYQS.mjs +14 -0
  52. package/dist/lib/node-esm/blueprint-definition-ENKJZYQS.mjs.map +7 -0
  53. package/dist/lib/node-esm/chunk-2PYNDVNK.mjs +828 -0
  54. package/dist/lib/node-esm/chunk-2PYNDVNK.mjs.map +7 -0
  55. package/dist/lib/node-esm/chunk-6XVGFGRW.mjs +96 -0
  56. package/dist/lib/node-esm/chunk-6XVGFGRW.mjs.map +7 -0
  57. package/dist/lib/node-esm/{chunk-VIR2ABYE.mjs → chunk-AMHACOXW.mjs} +10 -6
  58. package/dist/lib/node-esm/chunk-AMHACOXW.mjs.map +7 -0
  59. package/dist/lib/node-esm/chunk-ENYE7TQ5.mjs +22 -0
  60. package/dist/lib/node-esm/chunk-ENYE7TQ5.mjs.map +7 -0
  61. package/dist/lib/node-esm/{chunk-ACFGXH2K.mjs → chunk-GMMVSXQ6.mjs} +5 -5
  62. package/dist/lib/node-esm/chunk-GMMVSXQ6.mjs.map +7 -0
  63. package/dist/lib/node-esm/chunk-HAIEWPU7.mjs +151 -0
  64. package/dist/lib/node-esm/chunk-HAIEWPU7.mjs.map +7 -0
  65. package/dist/lib/node-esm/chunk-NGYJNQ6A.mjs +80 -0
  66. package/dist/lib/node-esm/chunk-NGYJNQ6A.mjs.map +7 -0
  67. package/dist/lib/node-esm/{chunk-CWTFQSN7.mjs → chunk-PLZ7EVCT.mjs} +14 -14
  68. package/dist/lib/node-esm/chunk-PLZ7EVCT.mjs.map +7 -0
  69. package/dist/lib/node-esm/chunk-SHAMSMKQ.mjs +29 -0
  70. package/dist/lib/node-esm/chunk-SHAMSMKQ.mjs.map +7 -0
  71. package/dist/lib/node-esm/index.mjs +41 -27
  72. package/dist/lib/node-esm/index.mjs.map +3 -3
  73. package/dist/lib/node-esm/intent-resolver-6B3PFQ5F.mjs +63 -0
  74. package/dist/lib/node-esm/intent-resolver-6B3PFQ5F.mjs.map +7 -0
  75. package/dist/lib/node-esm/meta.json +1 -1
  76. package/dist/lib/node-esm/react-surface-CPMCARNW.mjs +218 -0
  77. package/dist/lib/node-esm/react-surface-CPMCARNW.mjs.map +7 -0
  78. package/dist/lib/node-esm/{settings-KVP7TVX7.mjs → settings-CJ3T5EX4.mjs} +7 -7
  79. package/dist/lib/node-esm/settings-CJ3T5EX4.mjs.map +7 -0
  80. package/dist/lib/node-esm/{state-NW3W4JCQ.mjs → state-K6EH7SRZ.mjs} +9 -9
  81. package/dist/lib/node-esm/state-K6EH7SRZ.mjs.map +7 -0
  82. package/dist/lib/node-esm/toolkit.mjs +14 -0
  83. package/dist/lib/node-esm/toolkit.mjs.map +7 -0
  84. package/dist/lib/node-esm/types/index.mjs +6 -14
  85. package/dist/types/src/MarkdownPlugin.d.ts +1 -1
  86. package/dist/types/src/MarkdownPlugin.d.ts.map +1 -1
  87. package/dist/types/src/capabilities/anchor-sort.d.ts +2 -4
  88. package/dist/types/src/capabilities/anchor-sort.d.ts.map +1 -1
  89. package/dist/types/src/capabilities/app-graph-serializer.d.ts +1 -1
  90. package/dist/types/src/capabilities/app-graph-serializer.d.ts.map +1 -1
  91. package/dist/types/src/capabilities/artifact-definition.d.ts +1 -9
  92. package/dist/types/src/capabilities/artifact-definition.d.ts.map +1 -1
  93. package/dist/types/src/capabilities/blueprint-definition.d.ts +7 -0
  94. package/dist/types/src/capabilities/blueprint-definition.d.ts.map +1 -0
  95. package/dist/types/src/capabilities/capabilities.d.ts +1 -1
  96. package/dist/types/src/capabilities/capabilities.d.ts.map +1 -1
  97. package/dist/types/src/capabilities/index.d.ts +10 -12
  98. package/dist/types/src/capabilities/index.d.ts.map +1 -1
  99. package/dist/types/src/capabilities/intent-resolver.d.ts +1 -1
  100. package/dist/types/src/capabilities/intent-resolver.d.ts.map +1 -1
  101. package/dist/types/src/capabilities/react-surface.d.ts +1 -1
  102. package/dist/types/src/capabilities/react-surface.d.ts.map +1 -1
  103. package/dist/types/src/capabilities/settings.d.ts +1 -1
  104. package/dist/types/src/capabilities/state.d.ts +2 -2
  105. package/dist/types/src/capabilities/state.d.ts.map +1 -1
  106. package/dist/types/src/components/MarkdownCard/MarkdownCard.d.ts +7 -0
  107. package/dist/types/src/components/MarkdownCard/MarkdownCard.d.ts.map +1 -0
  108. package/dist/types/src/components/MarkdownCard/MarkdownCard.stories.d.ts +9 -0
  109. package/dist/types/src/components/MarkdownCard/MarkdownCard.stories.d.ts.map +1 -0
  110. package/dist/types/src/components/MarkdownCard/index.d.ts +4 -0
  111. package/dist/types/src/components/MarkdownCard/index.d.ts.map +1 -0
  112. package/dist/types/src/components/MarkdownContainer.d.ts +9 -13
  113. package/dist/types/src/components/MarkdownContainer.d.ts.map +1 -1
  114. package/dist/types/src/components/MarkdownContainer.stories.d.ts +54 -5
  115. package/dist/types/src/components/MarkdownContainer.stories.d.ts.map +1 -1
  116. package/dist/types/src/components/MarkdownEditor/FileUpload.d.ts +11 -0
  117. package/dist/types/src/components/MarkdownEditor/FileUpload.d.ts.map +1 -0
  118. package/dist/types/src/components/MarkdownEditor/MarkdownEditor.d.ts +42 -23
  119. package/dist/types/src/components/MarkdownEditor/MarkdownEditor.d.ts.map +1 -1
  120. package/dist/types/src/components/MarkdownEditor/MarkdownEditor.stories.d.ts +8 -15
  121. package/dist/types/src/components/MarkdownEditor/MarkdownEditor.stories.d.ts.map +1 -1
  122. package/dist/types/src/components/MarkdownEditor/MarkdownEditorContent.d.ts +26 -0
  123. package/dist/types/src/components/MarkdownEditor/MarkdownEditorContent.d.ts.map +1 -0
  124. package/dist/types/src/components/MarkdownEditor/MarkdownEditorToolbar.d.ts +12 -0
  125. package/dist/types/src/components/MarkdownEditor/MarkdownEditorToolbar.d.ts.map +1 -0
  126. package/dist/types/src/components/MarkdownSettings/MarkdownSettings.d.ts +2 -2
  127. package/dist/types/src/components/MarkdownSettings/MarkdownSettings.d.ts.map +1 -1
  128. package/dist/types/src/components/Suggestions.stories.d.ts +3 -4
  129. package/dist/types/src/components/Suggestions.stories.d.ts.map +1 -1
  130. package/dist/types/src/components/index.d.ts +4 -2
  131. package/dist/types/src/components/index.d.ts.map +1 -1
  132. package/dist/types/src/events.d.ts.map +1 -1
  133. package/dist/types/src/functions/create.d.ts +8 -0
  134. package/dist/types/src/functions/create.d.ts.map +1 -0
  135. package/dist/types/src/functions/create.test.d.ts +2 -0
  136. package/dist/types/src/functions/create.test.d.ts.map +1 -0
  137. package/dist/types/src/functions/index.d.ts +18 -0
  138. package/dist/types/src/functions/index.d.ts.map +1 -0
  139. package/dist/types/src/functions/open.d.ts +7 -0
  140. package/dist/types/src/functions/open.d.ts.map +1 -0
  141. package/dist/types/src/functions/update.d.ts +6 -0
  142. package/dist/types/src/functions/update.d.ts.map +1 -0
  143. package/dist/types/src/functions/update.test.d.ts +2 -0
  144. package/dist/types/src/functions/update.test.d.ts.map +1 -0
  145. package/dist/types/src/hooks/index.d.ts +3 -0
  146. package/dist/types/src/hooks/index.d.ts.map +1 -1
  147. package/dist/types/src/hooks/useExtensions.d.ts +21 -0
  148. package/dist/types/src/hooks/useExtensions.d.ts.map +1 -0
  149. package/dist/types/src/hooks/useLinkQuery.d.ts +4 -0
  150. package/dist/types/src/hooks/useLinkQuery.d.ts.map +1 -0
  151. package/dist/types/src/hooks/usePopoverMenuOptions.d.ts +9 -0
  152. package/dist/types/src/hooks/usePopoverMenuOptions.d.ts.map +1 -0
  153. package/dist/types/src/hooks/useSelectCurrentThread.d.ts +1 -1
  154. package/dist/types/src/hooks/useSelectCurrentThread.d.ts.map +1 -1
  155. package/dist/types/src/index.d.ts +2 -1
  156. package/dist/types/src/index.d.ts.map +1 -1
  157. package/dist/types/src/meta.d.ts +0 -1
  158. package/dist/types/src/meta.d.ts.map +1 -1
  159. package/dist/types/src/testing.d.ts +6 -0
  160. package/dist/types/src/testing.d.ts.map +1 -0
  161. package/dist/types/src/toolkit.d.ts +3 -0
  162. package/dist/types/src/toolkit.d.ts.map +1 -0
  163. package/dist/types/src/translations.d.ts +6 -2
  164. package/dist/types/src/translations.d.ts.map +1 -1
  165. package/dist/types/src/types/Markdown.d.ts +45 -0
  166. package/dist/types/src/types/Markdown.d.ts.map +1 -0
  167. package/dist/types/src/types/MarkdownAction.d.ts +34 -0
  168. package/dist/types/src/types/MarkdownAction.d.ts.map +1 -0
  169. package/dist/types/src/types/index.d.ts +2 -1
  170. package/dist/types/src/types/index.d.ts.map +1 -1
  171. package/dist/types/src/types/types.d.ts +3 -59
  172. package/dist/types/src/types/types.d.ts.map +1 -1
  173. package/dist/types/src/util.d.ts +14 -5
  174. package/dist/types/src/util.d.ts.map +1 -1
  175. package/dist/types/tsconfig.tsbuildinfo +1 -1
  176. package/package.json +74 -53
  177. package/src/MarkdownPlugin.tsx +103 -96
  178. package/src/capabilities/anchor-sort.ts +5 -5
  179. package/src/capabilities/app-graph-serializer.ts +12 -10
  180. package/src/capabilities/artifact-definition.ts +22 -26
  181. package/src/capabilities/blueprint-definition.ts +43 -0
  182. package/src/capabilities/capabilities.ts +6 -4
  183. package/src/capabilities/index.ts +3 -2
  184. package/src/capabilities/intent-resolver.ts +16 -21
  185. package/src/capabilities/react-surface.tsx +56 -76
  186. package/src/capabilities/settings.ts +3 -3
  187. package/src/capabilities/state.ts +8 -8
  188. package/src/components/MarkdownCard/MarkdownCard.stories.tsx +76 -0
  189. package/src/components/MarkdownCard/MarkdownCard.tsx +88 -0
  190. package/src/components/MarkdownCard/index.ts +9 -0
  191. package/src/components/MarkdownContainer.stories.tsx +81 -48
  192. package/src/components/MarkdownContainer.tsx +81 -222
  193. package/src/components/MarkdownEditor/FileUpload.tsx +63 -0
  194. package/src/components/MarkdownEditor/MarkdownEditor.stories.tsx +58 -34
  195. package/src/components/MarkdownEditor/MarkdownEditor.tsx +220 -271
  196. package/src/components/MarkdownEditor/MarkdownEditorContent.tsx +134 -0
  197. package/src/components/MarkdownEditor/MarkdownEditorToolbar.tsx +63 -0
  198. package/src/components/MarkdownSettings/MarkdownSettings.tsx +81 -78
  199. package/src/components/Suggestions.stories.tsx +61 -57
  200. package/src/components/index.ts +3 -1
  201. package/src/events.ts +2 -2
  202. package/src/functions/create.conversations.json +1 -0
  203. package/src/functions/create.test.ts +128 -0
  204. package/src/functions/create.ts +34 -0
  205. package/src/functions/index.ts +13 -0
  206. package/src/functions/open.ts +32 -0
  207. package/src/functions/update.conversations.json +1 -0
  208. package/src/functions/update.test.ts +151 -0
  209. package/src/functions/update.ts +37 -0
  210. package/src/hooks/index.ts +3 -0
  211. package/src/{extensions.tsx → hooks/useExtensions.tsx} +65 -114
  212. package/src/hooks/useLinkQuery.ts +83 -0
  213. package/src/hooks/usePopoverMenuOptions.ts +71 -0
  214. package/src/hooks/useSelectCurrentThread.tsx +17 -7
  215. package/src/index.ts +4 -1
  216. package/src/meta.ts +7 -8
  217. package/src/testing.ts +27 -0
  218. package/src/toolkit.ts +6 -0
  219. package/src/translations.ts +6 -2
  220. package/src/types/Markdown.ts +58 -0
  221. package/src/types/MarkdownAction.ts +29 -0
  222. package/src/types/index.ts +3 -1
  223. package/src/types/types.ts +6 -50
  224. package/src/util.tsx +28 -9
  225. package/dist/lib/browser/MarkdownContainer-F3WEEIBX.mjs +0 -778
  226. package/dist/lib/browser/MarkdownContainer-F3WEEIBX.mjs.map +0 -7
  227. package/dist/lib/browser/MarkdownPreview-S3C7CGAV.mjs +0 -80
  228. package/dist/lib/browser/MarkdownPreview-S3C7CGAV.mjs.map +0 -7
  229. package/dist/lib/browser/anchor-sort-UKJJ7ZNP.mjs.map +0 -7
  230. package/dist/lib/browser/app-graph-serializer-ICLAF662.mjs.map +0 -7
  231. package/dist/lib/browser/artifact-definition-R2YYWOPN.mjs +0 -145
  232. package/dist/lib/browser/artifact-definition-R2YYWOPN.mjs.map +0 -7
  233. package/dist/lib/browser/chunk-777RIED6.mjs +0 -16
  234. package/dist/lib/browser/chunk-777RIED6.mjs.map +0 -7
  235. package/dist/lib/browser/chunk-EPTSAJZM.mjs +0 -22
  236. package/dist/lib/browser/chunk-EPTSAJZM.mjs.map +0 -7
  237. package/dist/lib/browser/chunk-LFML7LC6.mjs.map +0 -7
  238. package/dist/lib/browser/chunk-LHDCHDBW.mjs.map +0 -7
  239. package/dist/lib/browser/chunk-PHTD5DTR.mjs +0 -20
  240. package/dist/lib/browser/chunk-PHTD5DTR.mjs.map +0 -7
  241. package/dist/lib/browser/chunk-UANWRJZU.mjs +0 -79
  242. package/dist/lib/browser/chunk-UANWRJZU.mjs.map +0 -7
  243. package/dist/lib/browser/intent-resolver-3MXYO3MW.mjs +0 -64
  244. package/dist/lib/browser/intent-resolver-3MXYO3MW.mjs.map +0 -7
  245. package/dist/lib/browser/react-surface-C3Z423TV.mjs +0 -206
  246. package/dist/lib/browser/react-surface-C3Z423TV.mjs.map +0 -7
  247. package/dist/lib/browser/settings-KN75ZQY6.mjs.map +0 -7
  248. package/dist/lib/browser/state-LZWTAS65.mjs.map +0 -7
  249. package/dist/lib/node-esm/MarkdownContainer-VOUHL6IU.mjs +0 -779
  250. package/dist/lib/node-esm/MarkdownContainer-VOUHL6IU.mjs.map +0 -7
  251. package/dist/lib/node-esm/MarkdownPreview-77UFEWXT.mjs +0 -81
  252. package/dist/lib/node-esm/MarkdownPreview-77UFEWXT.mjs.map +0 -7
  253. package/dist/lib/node-esm/anchor-sort-IPIS5D5B.mjs.map +0 -7
  254. package/dist/lib/node-esm/app-graph-serializer-FLBXQKKR.mjs.map +0 -7
  255. package/dist/lib/node-esm/artifact-definition-MLTAY4LK.mjs +0 -146
  256. package/dist/lib/node-esm/artifact-definition-MLTAY4LK.mjs.map +0 -7
  257. package/dist/lib/node-esm/chunk-7X6TPTJK.mjs +0 -22
  258. package/dist/lib/node-esm/chunk-7X6TPTJK.mjs.map +0 -7
  259. package/dist/lib/node-esm/chunk-ACFGXH2K.mjs.map +0 -7
  260. package/dist/lib/node-esm/chunk-CWTFQSN7.mjs.map +0 -7
  261. package/dist/lib/node-esm/chunk-CXG7GMYP.mjs +0 -24
  262. package/dist/lib/node-esm/chunk-CXG7GMYP.mjs.map +0 -7
  263. package/dist/lib/node-esm/chunk-JEEQLO7C.mjs +0 -80
  264. package/dist/lib/node-esm/chunk-JEEQLO7C.mjs.map +0 -7
  265. package/dist/lib/node-esm/chunk-VIR2ABYE.mjs.map +0 -7
  266. package/dist/lib/node-esm/intent-resolver-BZYWV53A.mjs +0 -65
  267. package/dist/lib/node-esm/intent-resolver-BZYWV53A.mjs.map +0 -7
  268. package/dist/lib/node-esm/react-surface-TTTBYNI2.mjs +0 -207
  269. package/dist/lib/node-esm/react-surface-TTTBYNI2.mjs.map +0 -7
  270. package/dist/lib/node-esm/settings-KVP7TVX7.mjs.map +0 -7
  271. package/dist/lib/node-esm/state-NW3W4JCQ.mjs.map +0 -7
  272. package/dist/types/src/components/MarkdownPreview/MarkdownPreview.d.ts +0 -6
  273. package/dist/types/src/components/MarkdownPreview/MarkdownPreview.d.ts.map +0 -1
  274. package/dist/types/src/components/MarkdownPreview/MarkdownPreview.stories.d.ts +0 -42
  275. package/dist/types/src/components/MarkdownPreview/MarkdownPreview.stories.d.ts.map +0 -1
  276. package/dist/types/src/components/MarkdownPreview/index.d.ts +0 -4
  277. package/dist/types/src/components/MarkdownPreview/index.d.ts.map +0 -1
  278. package/dist/types/src/components/Toolbar.stories.d.ts +0 -11
  279. package/dist/types/src/components/Toolbar.stories.d.ts.map +0 -1
  280. package/dist/types/src/extensions.d.ts +0 -24
  281. package/dist/types/src/extensions.d.ts.map +0 -1
  282. package/dist/types/src/types/schema.d.ts +0 -35
  283. package/dist/types/src/types/schema.d.ts.map +0 -1
  284. package/src/components/MarkdownPreview/MarkdownPreview.stories.tsx +0 -81
  285. package/src/components/MarkdownPreview/MarkdownPreview.tsx +0 -73
  286. package/src/components/MarkdownPreview/index.ts +0 -9
  287. package/src/components/Toolbar.stories.tsx +0 -113
  288. package/src/types/schema.ts +0 -39
@@ -0,0 +1,134 @@
1
+ //
2
+ // Copyright 2023 DXOS.org
3
+ //
4
+
5
+ import { type EditorView } from '@codemirror/view';
6
+ import React, { forwardRef, useEffect, useImperativeHandle, useMemo } from 'react';
7
+
8
+ import { type Live } from '@dxos/live-object';
9
+ import { useDynamicRef, useThemeContext, useTranslation } from '@dxos/react-ui';
10
+ import {
11
+ type EditorSelectionState,
12
+ type EditorStateStore,
13
+ type EditorToolbarState,
14
+ type EditorViewMode,
15
+ type PopoverMenuGroup,
16
+ type UseTextEditorProps,
17
+ createBasicExtensions,
18
+ createMarkdownExtensions,
19
+ createThemeExtensions,
20
+ dropFile,
21
+ editorGutter,
22
+ editorSlots,
23
+ formattingListener,
24
+ processEditorPayload,
25
+ stackItemContentEditorClassNames,
26
+ useTextEditor,
27
+ } from '@dxos/react-ui-editor';
28
+ import { isTruthy } from '@dxos/util';
29
+
30
+ import { useSelectCurrentThread } from '../../hooks';
31
+ import { meta } from '../../meta';
32
+
33
+ import { type MarkdownEditorToolbarProps } from './MarkdownEditorToolbar';
34
+
35
+ export type MarkdownEditorContentProps = {
36
+ id: string;
37
+ role?: string;
38
+ viewMode?: EditorViewMode;
39
+ scrollPastEnd?: boolean;
40
+ slashCommandGroups?: PopoverMenuGroup[];
41
+ editorStateStore?: EditorStateStore;
42
+ toolbarState?: Live<EditorToolbarState>;
43
+ onLinkQuery?: (query?: string) => Promise<PopoverMenuGroup[]>;
44
+ } & (Pick<UseTextEditorProps, 'initialValue' | 'extensions'> & Pick<MarkdownEditorToolbarProps, 'onFileUpload'>);
45
+
46
+ export const MarkdownEditorContent = forwardRef<EditorView | null, MarkdownEditorContentProps>(
47
+ (
48
+ { id, role, initialValue, editorStateStore, toolbarState, extensions, viewMode, scrollPastEnd, onFileUpload },
49
+ forwardedRef,
50
+ ) => {
51
+ const { t } = useTranslation(meta.id);
52
+ const { themeMode } = useThemeContext();
53
+
54
+ // TODO(burdon): Toolbar state is not reactive.
55
+ const toolbarStateRef = useDynamicRef(toolbarState);
56
+
57
+ // Restore last selection and scroll point.
58
+ const { scrollTo, selection } = useMemo<EditorSelectionState>(() => editorStateStore?.getState(id) ?? {}, [id]);
59
+
60
+ const {
61
+ parentRef,
62
+ view: editorView,
63
+ focusAttributes,
64
+ } = useTextEditor(
65
+ () => ({
66
+ ...(role !== 'section' && {
67
+ id,
68
+ scrollTo,
69
+ selection,
70
+ // TODO(wittjosiah): Autofocus based on layout is racy.
71
+ // autoFocus: layoutPlugin?.provides.layout ? layoutPlugin?.provides.layout.scrollIntoView === id : true,
72
+ moveToEndOfLine: true,
73
+ }),
74
+ initialValue,
75
+ extensions: [
76
+ createBasicExtensions({
77
+ readOnly: viewMode === 'readonly',
78
+ placeholder: t('editor placeholder'),
79
+ scrollPastEnd: scrollPastEnd && role !== 'section',
80
+ search: true,
81
+ }),
82
+ createThemeExtensions({
83
+ themeMode,
84
+ slots: editorSlots,
85
+ syntaxHighlighting: true,
86
+ }),
87
+ createMarkdownExtensions(),
88
+ formattingListener(() => toolbarStateRef.current),
89
+ editorGutter,
90
+ role !== 'section' &&
91
+ onFileUpload &&
92
+ dropFile({
93
+ // TODO(wittjosiah): Factor out to file uploader plugin.
94
+ onDrop: async (view, { files }) => {
95
+ const file = files[0];
96
+ const info = file && onFileUpload ? await onFileUpload(file) : undefined;
97
+ if (info) {
98
+ processEditorPayload(view, { type: 'image', data: info.url });
99
+ }
100
+ },
101
+ }),
102
+ extensions,
103
+ ].filter(isTruthy),
104
+ }),
105
+ [id, viewMode, themeMode, extensions],
106
+ );
107
+
108
+ useImperativeHandle<EditorView | null, EditorView | null>(forwardedRef, () => editorView, [editorView]);
109
+ useSelectCurrentThread(editorView, id);
110
+ useTest(editorView);
111
+
112
+ return (
113
+ <div
114
+ role='none'
115
+ ref={parentRef}
116
+ data-testid='composer.markdownRoot'
117
+ className={stackItemContentEditorClassNames(role)}
118
+ data-popover-collision-boundary={true}
119
+ {...focusAttributes}
120
+ />
121
+ );
122
+ },
123
+ );
124
+
125
+ // Expose editor view for playwright tests.
126
+ // TODO(wittjosiah): Find a better way to expose this or find a way to limit it to test runs.
127
+ const useTest = (view: EditorView | null) => {
128
+ useEffect(() => {
129
+ const composer = (window as any).composer;
130
+ if (composer) {
131
+ composer.editorView = view;
132
+ }
133
+ }, [view]);
134
+ };
@@ -0,0 +1,63 @@
1
+ //
2
+ // Copyright 2025 DXOS.org
3
+ //
4
+
5
+ import { type EditorView } from '@codemirror/view';
6
+ import React, { useCallback, useState } from 'react';
7
+
8
+ import { type FileInfo } from '@dxos/app-framework';
9
+ import { invariant } from '@dxos/invariant';
10
+ import { type ThemedClassName } from '@dxos/react-ui';
11
+ import { EditorToolbar, type EditorToolbarProps, type EditorViewMode } from '@dxos/react-ui-editor';
12
+
13
+ import { FileUpload, type FileUploadAction } from './FileUpload';
14
+
15
+ export type MarkdownEditorToolbarProps = ThemedClassName<
16
+ {
17
+ id: string;
18
+ editorView?: EditorView;
19
+ onFileUpload?: (file: File) => Promise<FileInfo | undefined>;
20
+ } & Pick<EditorToolbarProps, 'role' | 'state' | 'customActions' | 'onViewModeChange'>
21
+ >;
22
+
23
+ export const MarkdownEditorToolbar = ({
24
+ classNames,
25
+ id,
26
+ role,
27
+ state,
28
+ editorView,
29
+ customActions,
30
+ onFileUpload,
31
+ onViewModeChange,
32
+ }: MarkdownEditorToolbarProps) => {
33
+ const [upload, setUpload] = useState<FileUploadAction | null>(null);
34
+ const handleRef = useCallback((next: FileUploadAction) => setUpload(() => next), []);
35
+
36
+ const handleViewModeChange = useCallback((mode: EditorViewMode) => onViewModeChange?.(mode), [onViewModeChange]);
37
+
38
+ const getView = useCallback(() => {
39
+ invariant(editorView);
40
+ return editorView;
41
+ }, [editorView]);
42
+
43
+ if (!editorView) {
44
+ return <div />;
45
+ }
46
+
47
+ return (
48
+ <>
49
+ <EditorToolbar
50
+ classNames={classNames}
51
+ attendableId={id}
52
+ role={role}
53
+ state={state}
54
+ customActions={customActions}
55
+ getView={getView}
56
+ onImageUpload={upload ?? undefined}
57
+ onViewModeChange={handleViewModeChange}
58
+ />
59
+
60
+ {onFileUpload && <FileUpload ref={handleRef} editorView={editorView} onFileUpload={onFileUpload} />}
61
+ </>
62
+ );
63
+ };
@@ -6,100 +6,103 @@ import React from 'react';
6
6
 
7
7
  import { Input, Select, useTranslation } from '@dxos/react-ui';
8
8
  import { type EditorInputMode, EditorInputModes, type EditorViewMode, EditorViewModes } from '@dxos/react-ui-editor';
9
- import { DeprecatedFormContainer, DeprecatedFormInput } from '@dxos/react-ui-form';
9
+ import { ControlGroup, ControlItemInput, ControlPage, ControlSection } from '@dxos/react-ui-form';
10
10
 
11
- import { MARKDOWN_PLUGIN } from '../../meta';
12
- import { type MarkdownSettingsProps } from '../../types';
11
+ import { meta } from '../../meta';
12
+ import { type Markdown } from '../../types';
13
13
 
14
- export const MarkdownSettings = ({ settings }: { settings: MarkdownSettingsProps }) => {
15
- const { t } = useTranslation(MARKDOWN_PLUGIN);
14
+ export const MarkdownSettings = ({ settings }: { settings: Markdown.Settings }) => {
15
+ const { t } = useTranslation(meta.id);
16
16
 
17
17
  // TODO(wittjosiah): Add skill test confirmation for entering vim mode.
18
18
  return (
19
- <DeprecatedFormContainer>
20
- <DeprecatedFormInput label={t('default view mode label')}>
21
- <Select.Root
22
- value={settings.defaultViewMode}
23
- onValueChange={(value) => {
24
- settings.defaultViewMode = value as EditorViewMode;
25
- }}
26
- >
27
- <Select.TriggerButton />
28
- <Select.Portal>
29
- <Select.Content>
30
- <Select.Viewport>
31
- {EditorViewModes.map((mode) => (
32
- <Select.Option key={mode} value={mode}>
33
- {t(`${mode} mode label`, { ns: 'react-ui-editor' })}
34
- </Select.Option>
35
- ))}
36
- </Select.Viewport>
37
- </Select.Content>
38
- </Select.Portal>
39
- </Select.Root>
40
- </DeprecatedFormInput>
19
+ <ControlPage>
20
+ <ControlSection title={t('settings title', { ns: meta.id })}>
21
+ <ControlGroup>
22
+ <ControlItemInput title={t('default view mode label')}>
23
+ <Select.Root
24
+ value={settings.defaultViewMode}
25
+ onValueChange={(value) => {
26
+ settings.defaultViewMode = value as EditorViewMode;
27
+ }}
28
+ >
29
+ <Select.TriggerButton />
30
+ <Select.Portal>
31
+ <Select.Content>
32
+ <Select.Viewport>
33
+ {EditorViewModes.map((mode) => (
34
+ <Select.Option key={mode} value={mode}>
35
+ {t(`${mode} mode label`, { ns: 'react-ui-editor' })}
36
+ </Select.Option>
37
+ ))}
38
+ </Select.Viewport>
39
+ <Select.Arrow />
40
+ </Select.Content>
41
+ </Select.Portal>
42
+ </Select.Root>
43
+ </ControlItemInput>
41
44
 
42
- <DeprecatedFormInput label={t('editor input mode label')}>
43
- <Select.Root
44
- value={settings.editorInputMode ?? 'default'}
45
- onValueChange={(value) => {
46
- settings.editorInputMode = value as EditorInputMode;
47
- }}
48
- >
49
- <Select.TriggerButton placeholder={t('select editor input mode placeholder')} />
50
- <Select.Portal>
51
- <Select.Content>
52
- <Select.Viewport>
53
- {EditorInputModes.map((mode) => (
54
- <Select.Option key={mode} value={mode}>
55
- {t(`settings editor input mode ${mode} label`)}
56
- </Select.Option>
57
- ))}
58
- </Select.Viewport>
59
- </Select.Content>
60
- </Select.Portal>
61
- </Select.Root>
62
- </DeprecatedFormInput>
45
+ <ControlItemInput title={t('editor input mode label')}>
46
+ <Select.Root
47
+ value={settings.editorInputMode ?? 'default'}
48
+ onValueChange={(value) => {
49
+ settings.editorInputMode = value as EditorInputMode;
50
+ }}
51
+ >
52
+ <Select.TriggerButton placeholder={t('select editor input mode placeholder')} />
53
+ <Select.Portal>
54
+ <Select.Content>
55
+ <Select.Viewport>
56
+ {EditorInputModes.map((mode) => (
57
+ <Select.Option key={mode} value={mode}>
58
+ {t(`settings editor input mode ${mode} label`)}
59
+ </Select.Option>
60
+ ))}
61
+ </Select.Viewport>
62
+ <Select.Arrow />
63
+ </Select.Content>
64
+ </Select.Portal>
65
+ </Select.Root>
66
+ </ControlItemInput>
63
67
 
64
- <DeprecatedFormInput label={t('settings toolbar label')}>
65
- <Input.Switch checked={settings.toolbar} onCheckedChange={(checked) => (settings.toolbar = !!checked)} />
66
- </DeprecatedFormInput>
68
+ <ControlItemInput title={t('settings toolbar label')}>
69
+ <Input.Switch checked={settings.toolbar} onCheckedChange={(checked) => (settings.toolbar = !!checked)} />
70
+ </ControlItemInput>
67
71
 
68
- <DeprecatedFormInput label={t('settings numbered headings label')}>
69
- <Input.Switch
70
- checked={settings.numberedHeadings}
71
- onCheckedChange={(checked) => (settings.numberedHeadings = !!checked)}
72
- />
73
- </DeprecatedFormInput>
72
+ <ControlItemInput title={t('settings numbered headings label')}>
73
+ <Input.Switch
74
+ checked={settings.numberedHeadings}
75
+ onCheckedChange={(checked) => (settings.numberedHeadings = !!checked)}
76
+ />
77
+ </ControlItemInput>
74
78
 
75
- <DeprecatedFormInput label={t('settings folding label')}>
76
- <Input.Switch checked={settings.folding} onCheckedChange={(checked) => (settings.folding = !!checked)} />
77
- </DeprecatedFormInput>
79
+ <ControlItemInput title={t('settings folding label')}>
80
+ <Input.Switch checked={settings.folding} onCheckedChange={(checked) => (settings.folding = !!checked)} />
81
+ </ControlItemInput>
78
82
 
79
- <DeprecatedFormInput label={t('settings experimental label')}>
80
- <Input.Switch
81
- checked={settings.experimental}
82
- onCheckedChange={(checked) => (settings.experimental = !!checked)}
83
- />
84
- </DeprecatedFormInput>
83
+ <ControlItemInput title={t('settings experimental label')}>
84
+ <Input.Switch
85
+ checked={settings.experimental}
86
+ onCheckedChange={(checked) => (settings.experimental = !!checked)}
87
+ />
88
+ </ControlItemInput>
85
89
 
86
- <DeprecatedFormInput
87
- label={t('settings debug label')}
88
- secondary={
89
- settings.debug ? (
90
- <Input.Root>
90
+ <ControlItemInput title={t('settings debug label')}>
91
+ <Input.Switch checked={settings.debug} onCheckedChange={(checked) => (settings.debug = !!checked)} />
92
+ </ControlItemInput>
93
+
94
+ {settings.debug && (
95
+ <ControlItemInput title={t('settings debug textarea label', { ns: meta.id })}>
91
96
  <Input.TextArea
92
97
  rows={5}
93
98
  value={settings.typewriter}
94
99
  onChange={({ target: { value } }) => (settings.typewriter = value)}
95
100
  placeholder={t('settings debug placeholder')}
96
101
  />
97
- </Input.Root>
98
- ) : undefined
99
- }
100
- >
101
- <Input.Switch checked={settings.debug} onCheckedChange={(checked) => (settings.debug = !!checked)} />
102
- </DeprecatedFormInput>
103
- </DeprecatedFormContainer>
102
+ </ControlItemInput>
103
+ )}
104
+ </ControlGroup>
105
+ </ControlSection>
106
+ </ControlPage>
104
107
  );
105
108
  };
@@ -2,46 +2,41 @@
2
2
  // Copyright 2023 DXOS.org
3
3
  //
4
4
 
5
- import '@dxos-theme';
6
-
7
5
  import { type Meta } from '@storybook/react-vite';
8
- import { Match, Option, pipe, Schema } from 'effect';
6
+ import * as Function from 'effect/Function';
7
+ import * as Match from 'effect/Match';
8
+ import * as Option from 'effect/Option';
9
+ import * as Schema from 'effect/Schema';
9
10
  import React, { type FC, useEffect, useMemo, useState } from 'react';
10
11
 
11
- import {
12
- Capabilities,
13
- CollaborationActions,
14
- IntentPlugin,
15
- SettingsPlugin,
16
- contributes,
17
- createIntent,
18
- useCapability,
19
- useIntentDispatcher,
20
- } from '@dxos/app-framework';
12
+ import { Capabilities, IntentPlugin, SettingsPlugin } from '@dxos/app-framework';
13
+ import { useCapability, useIntentDispatcher } from '@dxos/app-framework/react';
21
14
  import { withPluginManager } from '@dxos/app-framework/testing';
22
15
  import { Obj, Ref, Type } from '@dxos/echo';
23
16
  import { invariant } from '@dxos/invariant';
24
- import { DXN } from '@dxos/keys';
25
17
  import { ClientPlugin } from '@dxos/plugin-client';
18
+ import { GraphPlugin } from '@dxos/plugin-graph';
26
19
  import { PreviewPlugin } from '@dxos/plugin-preview';
27
20
  import { SpacePlugin } from '@dxos/plugin-space';
28
21
  import { StorybookLayoutPlugin } from '@dxos/plugin-storybook-layout';
29
22
  import { ThemePlugin } from '@dxos/plugin-theme';
30
23
  import { faker } from '@dxos/random';
31
- import { createDocAccessor, fullyQualifiedId, toCursorRange, useQueue, useSpace } from '@dxos/react-client/echo';
24
+ import { createDocAccessor, toCursorRange, useQueue, useSpace } from '@dxos/react-client/echo';
32
25
  import { IconButton, Toolbar } from '@dxos/react-ui';
33
- import { command, type EditorSelection, type Range, useTextEditor } from '@dxos/react-ui-editor';
26
+ import { withTheme } from '@dxos/react-ui/testing';
27
+ import { type EditorSelection, type Range, useTextEditor } from '@dxos/react-ui-editor';
34
28
  import { StackItem } from '@dxos/react-ui-stack';
35
29
  import { defaultTx } from '@dxos/react-ui-theme';
36
- import { DataType } from '@dxos/schema';
37
- import { withLayout } from '@dxos/storybook-utils';
30
+ import { render } from '@dxos/storybook-utils';
31
+ import { Message } from '@dxos/types';
38
32
 
39
- import MarkdownContainer from './MarkdownContainer';
40
- import { MarkdownPlugin } from '../MarkdownPlugin';
41
33
  import { MarkdownCapabilities } from '../capabilities';
42
- import { MARKDOWN_PLUGIN } from '../meta';
34
+ import { MarkdownPlugin } from '../MarkdownPlugin';
35
+ import { meta } from '../meta';
43
36
  import { translations } from '../translations';
44
- import { createDocument, DocumentType, type MarkdownSettingsProps } from '../types';
37
+ import { Markdown } from '../types';
38
+
39
+ import { MarkdownContainer } from './MarkdownContainer';
45
40
 
46
41
  faker.seed(1);
47
42
 
@@ -61,20 +56,20 @@ const TestItem = Schema.Struct({
61
56
  }),
62
57
  );
63
58
 
64
- const TestChat: FC<{ doc: DocumentType; content: string }> = ({ doc, content }) => {
59
+ const TestChat: FC<{ doc: Markdown.Document; content: string }> = ({ doc, content }) => {
65
60
  const { dispatchPromise: dispatch } = useIntentDispatcher();
66
61
  const { parentRef } = useTextEditor({ initialValue: content });
67
62
  const { editorState } = useCapability(MarkdownCapabilities.State);
68
63
 
69
64
  const space = useSpace();
70
65
  const queueDxn = useMemo(() => space && space.queues.create().dxn, [space]);
71
- const queue = useQueue<DataType.Message>(queueDxn);
66
+ const queue = useQueue<Message.Message>(queueDxn);
72
67
 
73
68
  const handleInsert = async () => {
74
69
  invariant(space);
75
70
  invariant(queue);
76
71
  await queue.append([
77
- Obj.make(DataType.Message, {
72
+ Obj.make(Message.Message, {
78
73
  created: new Date().toISOString(),
79
74
  sender: { role: 'assistant' },
80
75
  blocks: [{ _tag: 'text', text: 'Hello' }],
@@ -85,8 +80,8 @@ const TestChat: FC<{ doc: DocumentType; content: string }> = ({ doc, content })
85
80
 
86
81
  const text = await doc.content.load();
87
82
  const accessor = createDocAccessor(text, ['content']);
88
- const cursor = pipe(
89
- editorState.getState(fullyQualifiedId(doc))?.selection,
83
+ const cursor = Function.pipe(
84
+ editorState.getState(Obj.getDXN(doc).toString())?.selection,
90
85
  Option.fromNullable,
91
86
  Option.map(selectionToRange),
92
87
  Option.map((range) => toCursorRange(accessor, range.from, range.to)),
@@ -98,14 +93,14 @@ const TestChat: FC<{ doc: DocumentType; content: string }> = ({ doc, content })
98
93
  // const message = deref(ref);
99
94
  // }
100
95
 
101
- void dispatch(
102
- createIntent(CollaborationActions.InsertContent, {
103
- target: doc as any as Type.Expando,
104
- object: Ref.fromDXN(new DXN(DXN.kind.QUEUE, [...queue.dxn.parts, message.id])),
105
- at: cursor,
106
- label: 'Proposal',
107
- }),
108
- );
96
+ // void dispatch(
97
+ // createIntent(CollaborationActions.InsertContent, {
98
+ // target: doc as any as Type.Expando,
99
+ // object: Ref.fromDXN(new DXN(DXN.kind.QUEUE, [...queue.dxn.parts, message.id])),
100
+ // at: cursor,
101
+ // label: 'Proposal',
102
+ // }),
103
+ // );
109
104
  };
110
105
 
111
106
  return (
@@ -120,8 +115,8 @@ const TestChat: FC<{ doc: DocumentType; content: string }> = ({ doc, content })
120
115
 
121
116
  const DefaultStory = ({ document, chat }: { document: string; chat: string }) => {
122
117
  const space = useSpace();
123
- const [doc, setDoc] = useState<DocumentType>();
124
- const settings = useCapability(Capabilities.SettingsStore).getStore<MarkdownSettingsProps>(MARKDOWN_PLUGIN)!.value;
118
+ const [doc, setDoc] = useState<Markdown.Document>();
119
+ const settings = useCapability(Capabilities.SettingsStore).getStore<Markdown.Settings>(meta.id)!.value;
125
120
  const { editorState } = useCapability(MarkdownCapabilities.State);
126
121
 
127
122
  useEffect(() => {
@@ -130,14 +125,17 @@ const DefaultStory = ({ document, chat }: { document: string; chat: string }) =>
130
125
  }
131
126
 
132
127
  const doc = space.db.add(
133
- createDocument({
128
+ Markdown.make({
134
129
  name: 'Test',
135
-
136
- // Create links.
137
130
  content: document.replaceAll(/\[(\w+)\]/g, (_, label) => {
138
- const obj = space.db.add(Obj.make(TestItem, { title: label, description: faker.lorem.paragraph() }));
131
+ const obj = space.db.add(
132
+ Obj.make(TestItem, {
133
+ title: label,
134
+ description: faker.lorem.paragraph(),
135
+ }),
136
+ );
139
137
  const dxn = Ref.make(obj).dxn.toString();
140
- return `[${label}][${dxn}]`;
138
+ return `[${label}](${dxn})`;
141
139
  }),
142
140
  }),
143
141
  );
@@ -146,48 +144,54 @@ const DefaultStory = ({ document, chat }: { document: string; chat: string }) =>
146
144
  }, [space]);
147
145
 
148
146
  if (!space || !doc) {
149
- return <></>;
147
+ return null;
150
148
  }
151
149
 
150
+ // TODO(burdon): Layout issue.
152
151
  return (
153
- <>
152
+ <div className='grid grid-cols-2 bs-full overflow-hidden'>
154
153
  <MarkdownContainer id={doc.id} object={doc} settings={settings} editorStateStore={editorState} />
155
154
  <TestChat doc={doc} content={chat} />
156
- </>
155
+ </div>
157
156
  );
158
157
  };
159
158
 
160
- const meta: Meta<typeof DefaultStory> = {
159
+ const storybook: Meta<typeof DefaultStory> = {
161
160
  title: 'plugins/plugin-markdown/Suggestions',
162
- render: DefaultStory,
161
+ render: render(DefaultStory),
163
162
  decorators: [
163
+ withTheme,
164
164
  withPluginManager({
165
165
  plugins: [
166
- ThemePlugin({ tx: defaultTx }),
167
- StorybookLayoutPlugin(),
168
166
  ClientPlugin({
169
- types: [DocumentType, TestItem],
170
- onClientInitialized: async (_, client) => {
167
+ types: [Markdown.Document, TestItem],
168
+ onClientInitialized: async ({ client }) => {
171
169
  await client.halo.createIdentity();
172
170
  },
173
171
  }),
174
- SpacePlugin(),
175
- SettingsPlugin(),
172
+ SpacePlugin({}),
173
+ GraphPlugin(),
176
174
  IntentPlugin(),
175
+ SettingsPlugin(),
176
+
177
+ // UI
178
+ ThemePlugin({ tx: defaultTx }),
177
179
  MarkdownPlugin(),
178
180
  PreviewPlugin(),
181
+ StorybookLayoutPlugin({}),
179
182
  ],
180
- capabilities: [contributes(MarkdownCapabilities.Extensions, [() => command()])],
181
183
  }),
182
- withLayout({ fullscreen: true, classNames: 'grid grid-cols-2' }),
183
184
  ],
184
185
  parameters: {
186
+ layout: 'fullscreen',
187
+ controls: {
188
+ disable: true,
189
+ },
185
190
  translations,
186
- controls: { disable: true },
187
191
  },
188
192
  };
189
193
 
190
- export default meta;
194
+ export default storybook;
191
195
 
192
196
  type Story = Meta<typeof DefaultStory>;
193
197
 
@@ -4,7 +4,9 @@
4
4
 
5
5
  import { lazy } from 'react';
6
6
 
7
+ export * from './MarkdownCard';
8
+ export * from './MarkdownContainer';
7
9
  export * from './MarkdownSettings';
8
10
 
11
+ export const MarkdownCard = lazy(() => import('./MarkdownCard'));
9
12
  export const MarkdownContainer = lazy(() => import('./MarkdownContainer'));
10
- export const MarkdownPreview = lazy(() => import('./MarkdownPreview'));
package/src/events.ts CHANGED
@@ -4,8 +4,8 @@
4
4
 
5
5
  import { Events } from '@dxos/app-framework';
6
6
 
7
- import { MARKDOWN_PLUGIN } from './meta';
7
+ import { meta } from './meta';
8
8
 
9
9
  export namespace MarkdownEvents {
10
- export const SetupExtensions = Events.createStateEvent(`${MARKDOWN_PLUGIN}/setup-extensions`);
10
+ export const SetupExtensions = Events.createStateEvent(`${meta.id}/event/setup-extensions`);
11
11
  }