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

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