@dxos/plugin-markdown 0.8.3 → 0.8.4-main.1da679c

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 (271) hide show
  1. package/dist/lib/browser/{MarkdownPreview-F4PYFW5L.mjs → MarkdownCard-JLUQITYK.mjs} +18 -18
  2. package/dist/lib/browser/MarkdownCard-JLUQITYK.mjs.map +7 -0
  3. package/dist/lib/browser/{MarkdownContainer-EFWQ6DHD.mjs → MarkdownContainer-OZ5DHEIA.mjs} +282 -302
  4. package/dist/lib/browser/MarkdownContainer-OZ5DHEIA.mjs.map +7 -0
  5. package/dist/lib/browser/{anchor-sort-BMAN2ABT.mjs → anchor-sort-SUD373SW.mjs} +8 -8
  6. package/dist/lib/browser/anchor-sort-SUD373SW.mjs.map +7 -0
  7. package/dist/lib/browser/{app-graph-serializer-EI6TEHRQ.mjs → app-graph-serializer-GH7JJZB7.mjs} +16 -17
  8. package/dist/lib/browser/app-graph-serializer-GH7JJZB7.mjs.map +7 -0
  9. package/dist/lib/browser/blueprint-definition-JSNGFAZB.mjs +11 -0
  10. package/dist/lib/browser/blueprint-definition-JSNGFAZB.mjs.map +7 -0
  11. package/dist/lib/browser/chunk-BEE7VQPU.mjs +78 -0
  12. package/dist/lib/browser/chunk-BEE7VQPU.mjs.map +7 -0
  13. package/dist/lib/browser/{chunk-LXSRQPEP.mjs → chunk-LAVZ2W6X.mjs} +9 -10
  14. package/dist/lib/browser/chunk-LAVZ2W6X.mjs.map +7 -0
  15. package/dist/lib/browser/chunk-ODB2PTBP.mjs +28 -0
  16. package/dist/lib/browser/chunk-ODB2PTBP.mjs.map +7 -0
  17. package/dist/lib/browser/chunk-OY6CGPOO.mjs +16 -0
  18. package/dist/lib/browser/chunk-OY6CGPOO.mjs.map +7 -0
  19. package/dist/lib/browser/chunk-SQLSKQRQ.mjs +22 -0
  20. package/dist/lib/browser/chunk-SQLSKQRQ.mjs.map +7 -0
  21. package/dist/lib/browser/chunk-UM2GILLR.mjs +102 -0
  22. package/dist/lib/browser/chunk-UM2GILLR.mjs.map +7 -0
  23. package/dist/lib/browser/{chunk-D767LUGU.mjs → chunk-Z7P6JGGW.mjs} +14 -12
  24. package/dist/lib/browser/chunk-Z7P6JGGW.mjs.map +7 -0
  25. package/dist/lib/browser/index.mjs +38 -25
  26. package/dist/lib/browser/index.mjs.map +3 -3
  27. package/dist/lib/browser/intent-resolver-SUBIHVU7.mjs +62 -0
  28. package/dist/lib/browser/intent-resolver-SUBIHVU7.mjs.map +7 -0
  29. package/dist/lib/browser/meta.json +1 -1
  30. package/dist/lib/{node-esm/react-surface-YHFOQTVO.mjs → browser/react-surface-JBQHF4GR.mjs} +64 -55
  31. package/dist/lib/browser/react-surface-JBQHF4GR.mjs.map +7 -0
  32. package/dist/lib/browser/{settings-PLH54VC7.mjs → settings-T5ZMC5TH.mjs} +8 -8
  33. package/dist/lib/browser/settings-T5ZMC5TH.mjs.map +7 -0
  34. package/dist/lib/browser/{state-KI6PJ6DT.mjs → state-6QODXCSZ.mjs} +10 -10
  35. package/dist/lib/browser/state-6QODXCSZ.mjs.map +7 -0
  36. package/dist/lib/browser/toolkit-GNADYSGW.mjs +74 -0
  37. package/dist/lib/browser/toolkit-GNADYSGW.mjs.map +7 -0
  38. package/dist/lib/browser/types/index.mjs +6 -14
  39. package/dist/lib/node-esm/{MarkdownPreview-KFDRV4GC.mjs → MarkdownCard-XL5EVSJ7.mjs} +18 -18
  40. package/dist/lib/node-esm/MarkdownCard-XL5EVSJ7.mjs.map +7 -0
  41. package/dist/lib/node-esm/{MarkdownContainer-O3SGMH4G.mjs → MarkdownContainer-Z4I23DPN.mjs} +282 -302
  42. package/dist/lib/node-esm/MarkdownContainer-Z4I23DPN.mjs.map +7 -0
  43. package/dist/lib/node-esm/{anchor-sort-BXL7BE67.mjs → anchor-sort-J2BK2XLZ.mjs} +8 -8
  44. package/dist/lib/node-esm/anchor-sort-J2BK2XLZ.mjs.map +7 -0
  45. package/dist/lib/node-esm/{app-graph-serializer-F7DGNF3G.mjs → app-graph-serializer-LRYCXG7N.mjs} +16 -17
  46. package/dist/lib/node-esm/app-graph-serializer-LRYCXG7N.mjs.map +7 -0
  47. package/dist/lib/node-esm/blueprint-definition-KX3Y5JHC.mjs +12 -0
  48. package/dist/lib/node-esm/blueprint-definition-KX3Y5JHC.mjs.map +7 -0
  49. package/dist/lib/node-esm/chunk-CB2R4YIY.mjs +17 -0
  50. package/dist/lib/node-esm/chunk-CB2R4YIY.mjs.map +7 -0
  51. package/dist/lib/node-esm/chunk-FXILAQ5F.mjs +79 -0
  52. package/dist/lib/node-esm/chunk-FXILAQ5F.mjs.map +7 -0
  53. package/dist/lib/node-esm/{chunk-BWDDFDJY.mjs → chunk-J7A6TUB2.mjs} +14 -12
  54. package/dist/lib/node-esm/chunk-J7A6TUB2.mjs.map +7 -0
  55. package/dist/lib/node-esm/chunk-KAXL7TWD.mjs +103 -0
  56. package/dist/lib/node-esm/chunk-KAXL7TWD.mjs.map +7 -0
  57. package/dist/lib/node-esm/chunk-MJZPYYIH.mjs +24 -0
  58. package/dist/lib/node-esm/chunk-MJZPYYIH.mjs.map +7 -0
  59. package/dist/lib/node-esm/{chunk-K26TX5V4.mjs → chunk-O6EXWGGS.mjs} +9 -10
  60. package/dist/lib/node-esm/chunk-O6EXWGGS.mjs.map +7 -0
  61. package/dist/lib/node-esm/chunk-VCG2U522.mjs +29 -0
  62. package/dist/lib/node-esm/chunk-VCG2U522.mjs.map +7 -0
  63. package/dist/lib/node-esm/index.mjs +38 -25
  64. package/dist/lib/node-esm/index.mjs.map +3 -3
  65. package/dist/lib/node-esm/intent-resolver-YZEGYWGA.mjs +63 -0
  66. package/dist/lib/node-esm/intent-resolver-YZEGYWGA.mjs.map +7 -0
  67. package/dist/lib/node-esm/meta.json +1 -1
  68. package/dist/lib/{browser/react-surface-4B5ELMEW.mjs → node-esm/react-surface-JOXUHXQJ.mjs} +65 -54
  69. package/dist/lib/node-esm/react-surface-JOXUHXQJ.mjs.map +7 -0
  70. package/dist/lib/node-esm/{settings-SIY33P3F.mjs → settings-LGG22OH4.mjs} +8 -8
  71. package/dist/lib/node-esm/settings-LGG22OH4.mjs.map +7 -0
  72. package/dist/lib/node-esm/{state-LLGVRYKL.mjs → state-W3PECOJX.mjs} +10 -10
  73. package/dist/lib/node-esm/state-W3PECOJX.mjs.map +7 -0
  74. package/dist/lib/node-esm/toolkit-ZCFWOGNH.mjs +75 -0
  75. package/dist/lib/node-esm/toolkit-ZCFWOGNH.mjs.map +7 -0
  76. package/dist/lib/node-esm/types/index.mjs +6 -14
  77. package/dist/types/src/MarkdownPlugin.d.ts.map +1 -1
  78. package/dist/types/src/capabilities/anchor-sort.d.ts +2 -2
  79. package/dist/types/src/capabilities/app-graph-serializer.d.ts +1 -1
  80. package/dist/types/src/capabilities/app-graph-serializer.d.ts.map +1 -1
  81. package/dist/types/src/capabilities/artifact-definition.d.ts +1 -9
  82. package/dist/types/src/capabilities/artifact-definition.d.ts.map +1 -1
  83. package/dist/types/src/capabilities/blueprint-definition.d.ts +5 -0
  84. package/dist/types/src/capabilities/blueprint-definition.d.ts.map +1 -0
  85. package/dist/types/src/capabilities/capabilities.d.ts +1 -1
  86. package/dist/types/src/capabilities/capabilities.d.ts.map +1 -1
  87. package/dist/types/src/capabilities/index.d.ts +12 -10
  88. package/dist/types/src/capabilities/index.d.ts.map +1 -1
  89. package/dist/types/src/capabilities/intent-resolver.d.ts +1 -1
  90. package/dist/types/src/capabilities/intent-resolver.d.ts.map +1 -1
  91. package/dist/types/src/capabilities/react-surface.d.ts +1 -1
  92. package/dist/types/src/capabilities/react-surface.d.ts.map +1 -1
  93. package/dist/types/src/capabilities/settings.d.ts +1 -1
  94. package/dist/types/src/capabilities/state.d.ts +2 -2
  95. package/dist/types/src/capabilities/state.d.ts.map +1 -1
  96. package/dist/types/src/capabilities/toolkit.d.ts +4 -0
  97. package/dist/types/src/capabilities/toolkit.d.ts.map +1 -0
  98. package/dist/types/src/components/MarkdownCard/MarkdownCard.d.ts +7 -0
  99. package/dist/types/src/components/MarkdownCard/MarkdownCard.d.ts.map +1 -0
  100. package/dist/types/src/components/MarkdownCard/MarkdownCard.stories.d.ts +10 -0
  101. package/dist/types/src/components/MarkdownCard/MarkdownCard.stories.d.ts.map +1 -0
  102. package/dist/types/src/components/MarkdownCard/index.d.ts +4 -0
  103. package/dist/types/src/components/MarkdownCard/index.d.ts.map +1 -0
  104. package/dist/types/src/components/MarkdownContainer.d.ts +5 -5
  105. package/dist/types/src/components/MarkdownContainer.d.ts.map +1 -1
  106. package/dist/types/src/components/MarkdownContainer.stories.d.ts +51 -4
  107. package/dist/types/src/components/MarkdownContainer.stories.d.ts.map +1 -1
  108. package/dist/types/src/components/MarkdownEditor/MarkdownEditor.d.ts +2 -2
  109. package/dist/types/src/components/MarkdownEditor/MarkdownEditor.d.ts.map +1 -1
  110. package/dist/types/src/components/MarkdownEditor/MarkdownEditor.stories.d.ts +110 -12
  111. package/dist/types/src/components/MarkdownEditor/MarkdownEditor.stories.d.ts.map +1 -1
  112. package/dist/types/src/components/MarkdownSettings/MarkdownSettings.d.ts +2 -2
  113. package/dist/types/src/components/MarkdownSettings/MarkdownSettings.d.ts.map +1 -1
  114. package/dist/types/src/components/Suggestions.stories.d.ts +3 -3
  115. package/dist/types/src/components/Suggestions.stories.d.ts.map +1 -1
  116. package/dist/types/src/components/Toolbar.stories.d.ts +44 -7
  117. package/dist/types/src/components/Toolbar.stories.d.ts.map +1 -1
  118. package/dist/types/src/components/index.d.ts +1 -1
  119. package/dist/types/src/components/index.d.ts.map +1 -1
  120. package/dist/types/src/events.d.ts.map +1 -1
  121. package/dist/types/src/extensions.d.ts +3 -5
  122. package/dist/types/src/extensions.d.ts.map +1 -1
  123. package/dist/types/src/functions/diff.d.ts +6 -0
  124. package/dist/types/src/functions/diff.d.ts.map +1 -0
  125. package/dist/types/src/functions/index.d.ts +3 -0
  126. package/dist/types/src/functions/index.d.ts.map +1 -0
  127. package/dist/types/src/functions/open.d.ts +7 -0
  128. package/dist/types/src/functions/open.d.ts.map +1 -0
  129. package/dist/types/src/index.d.ts +2 -1
  130. package/dist/types/src/index.d.ts.map +1 -1
  131. package/dist/types/src/meta.d.ts +0 -1
  132. package/dist/types/src/meta.d.ts.map +1 -1
  133. package/dist/types/src/translations.d.ts +36 -80
  134. package/dist/types/src/translations.d.ts.map +1 -1
  135. package/dist/types/src/types/Markdown.d.ts +43 -0
  136. package/dist/types/src/types/Markdown.d.ts.map +1 -0
  137. package/dist/types/src/types/MarkdownAction.d.ts +33 -0
  138. package/dist/types/src/types/MarkdownAction.d.ts.map +1 -0
  139. package/dist/types/src/types/index.d.ts +2 -1
  140. package/dist/types/src/types/index.d.ts.map +1 -1
  141. package/dist/types/src/types/types.d.ts +4 -59
  142. package/dist/types/src/types/types.d.ts.map +1 -1
  143. package/dist/types/src/util.d.ts +12 -3
  144. package/dist/types/src/util.d.ts.map +1 -1
  145. package/dist/types/tsconfig.tsbuildinfo +1 -1
  146. package/package.json +51 -48
  147. package/src/MarkdownPlugin.tsx +22 -13
  148. package/src/capabilities/anchor-sort.ts +3 -3
  149. package/src/capabilities/app-graph-serializer.ts +10 -8
  150. package/src/capabilities/artifact-definition.ts +19 -24
  151. package/src/capabilities/blueprint-definition.ts +39 -0
  152. package/src/capabilities/capabilities.ts +5 -4
  153. package/src/capabilities/index.ts +3 -1
  154. package/src/capabilities/intent-resolver.ts +15 -21
  155. package/src/capabilities/react-surface.tsx +22 -20
  156. package/src/capabilities/settings.ts +3 -3
  157. package/src/capabilities/state.ts +8 -8
  158. package/src/capabilities/toolkit.ts +47 -0
  159. package/src/components/MarkdownCard/MarkdownCard.stories.tsx +79 -0
  160. package/src/components/{MarkdownPreview/MarkdownPreview.tsx → MarkdownCard/MarkdownCard.tsx} +21 -17
  161. package/src/components/MarkdownCard/index.ts +9 -0
  162. package/src/components/MarkdownContainer.stories.tsx +39 -31
  163. package/src/components/MarkdownContainer.tsx +36 -21
  164. package/src/components/MarkdownEditor/MarkdownEditor.stories.tsx +10 -7
  165. package/src/components/MarkdownEditor/MarkdownEditor.tsx +28 -30
  166. package/src/components/MarkdownSettings/MarkdownSettings.tsx +81 -78
  167. package/src/components/Suggestions.stories.tsx +36 -33
  168. package/src/components/Toolbar.stories.tsx +19 -14
  169. package/src/components/index.ts +1 -1
  170. package/src/events.ts +2 -2
  171. package/src/extensions.tsx +28 -52
  172. package/src/functions/diff.ts +35 -0
  173. package/src/functions/index.ts +6 -0
  174. package/src/functions/open.ts +30 -0
  175. package/src/hooks/useSelectCurrentThread.tsx +3 -3
  176. package/src/index.ts +4 -1
  177. package/src/meta.ts +7 -8
  178. package/src/translations.ts +10 -7
  179. package/src/types/Markdown.ts +56 -0
  180. package/src/types/MarkdownAction.ts +29 -0
  181. package/src/types/index.ts +2 -1
  182. package/src/types/types.ts +7 -51
  183. package/src/util.tsx +20 -6
  184. package/dist/lib/browser/MarkdownContainer-EFWQ6DHD.mjs.map +0 -7
  185. package/dist/lib/browser/MarkdownPreview-F4PYFW5L.mjs.map +0 -7
  186. package/dist/lib/browser/anchor-sort-BMAN2ABT.mjs.map +0 -7
  187. package/dist/lib/browser/app-graph-serializer-EI6TEHRQ.mjs.map +0 -7
  188. package/dist/lib/browser/artifact-definition-FQ2R6KPT.mjs +0 -145
  189. package/dist/lib/browser/artifact-definition-FQ2R6KPT.mjs.map +0 -7
  190. package/dist/lib/browser/chunk-354IBM5X.mjs +0 -20
  191. package/dist/lib/browser/chunk-354IBM5X.mjs.map +0 -7
  192. package/dist/lib/browser/chunk-D767LUGU.mjs.map +0 -7
  193. package/dist/lib/browser/chunk-JX6XNEHE.mjs +0 -22
  194. package/dist/lib/browser/chunk-JX6XNEHE.mjs.map +0 -7
  195. package/dist/lib/browser/chunk-LXSRQPEP.mjs.map +0 -7
  196. package/dist/lib/browser/chunk-N2D26K6W.mjs +0 -79
  197. package/dist/lib/browser/chunk-N2D26K6W.mjs.map +0 -7
  198. package/dist/lib/browser/chunk-QVJETNGS.mjs +0 -16
  199. package/dist/lib/browser/chunk-QVJETNGS.mjs.map +0 -7
  200. package/dist/lib/browser/intent-resolver-6ZOABX2J.mjs +0 -64
  201. package/dist/lib/browser/intent-resolver-6ZOABX2J.mjs.map +0 -7
  202. package/dist/lib/browser/react-surface-4B5ELMEW.mjs.map +0 -7
  203. package/dist/lib/browser/settings-PLH54VC7.mjs.map +0 -7
  204. package/dist/lib/browser/state-KI6PJ6DT.mjs.map +0 -7
  205. package/dist/lib/node/MarkdownContainer-KYGUEZIL.cjs +0 -783
  206. package/dist/lib/node/MarkdownContainer-KYGUEZIL.cjs.map +0 -7
  207. package/dist/lib/node/MarkdownPreview-GCJJCXY6.cjs +0 -103
  208. package/dist/lib/node/MarkdownPreview-GCJJCXY6.cjs.map +0 -7
  209. package/dist/lib/node/anchor-sort-V3T4SFFI.cjs +0 -48
  210. package/dist/lib/node/anchor-sort-V3T4SFFI.cjs.map +0 -7
  211. package/dist/lib/node/app-graph-serializer-E6BXEDEL.cjs +0 -65
  212. package/dist/lib/node/app-graph-serializer-E6BXEDEL.cjs.map +0 -7
  213. package/dist/lib/node/artifact-definition-U27MH5SC.cjs +0 -158
  214. package/dist/lib/node/artifact-definition-U27MH5SC.cjs.map +0 -7
  215. package/dist/lib/node/chunk-3HHV4MM6.cjs +0 -101
  216. package/dist/lib/node/chunk-3HHV4MM6.cjs.map +0 -7
  217. package/dist/lib/node/chunk-CJLYFGPI.cjs +0 -74
  218. package/dist/lib/node/chunk-CJLYFGPI.cjs.map +0 -7
  219. package/dist/lib/node/chunk-FU3XZZCO.cjs +0 -58
  220. package/dist/lib/node/chunk-FU3XZZCO.cjs.map +0 -7
  221. package/dist/lib/node/chunk-IFYSBQE5.cjs +0 -35
  222. package/dist/lib/node/chunk-IFYSBQE5.cjs.map +0 -7
  223. package/dist/lib/node/chunk-LQAC5HL7.cjs +0 -68
  224. package/dist/lib/node/chunk-LQAC5HL7.cjs.map +0 -7
  225. package/dist/lib/node/chunk-ZU5OIHCY.cjs +0 -45
  226. package/dist/lib/node/chunk-ZU5OIHCY.cjs.map +0 -7
  227. package/dist/lib/node/index.cjs +0 -165
  228. package/dist/lib/node/index.cjs.map +0 -7
  229. package/dist/lib/node/intent-resolver-OEFLRNEJ.cjs +0 -77
  230. package/dist/lib/node/intent-resolver-OEFLRNEJ.cjs.map +0 -7
  231. package/dist/lib/node/meta.json +0 -1
  232. package/dist/lib/node/react-surface-456HQ4KZ.cjs +0 -218
  233. package/dist/lib/node/react-surface-456HQ4KZ.cjs.map +0 -7
  234. package/dist/lib/node/settings-E3NUTXJ4.cjs +0 -42
  235. package/dist/lib/node/settings-E3NUTXJ4.cjs.map +0 -7
  236. package/dist/lib/node/state-KKDRAG7X.cjs +0 -51
  237. package/dist/lib/node/state-KKDRAG7X.cjs.map +0 -7
  238. package/dist/lib/node/types/index.cjs +0 -40
  239. package/dist/lib/node/types/index.cjs.map +0 -7
  240. package/dist/lib/node-esm/MarkdownContainer-O3SGMH4G.mjs.map +0 -7
  241. package/dist/lib/node-esm/MarkdownPreview-KFDRV4GC.mjs.map +0 -7
  242. package/dist/lib/node-esm/anchor-sort-BXL7BE67.mjs.map +0 -7
  243. package/dist/lib/node-esm/app-graph-serializer-F7DGNF3G.mjs.map +0 -7
  244. package/dist/lib/node-esm/artifact-definition-NQOHB6S5.mjs +0 -146
  245. package/dist/lib/node-esm/artifact-definition-NQOHB6S5.mjs.map +0 -7
  246. package/dist/lib/node-esm/chunk-BWDDFDJY.mjs.map +0 -7
  247. package/dist/lib/node-esm/chunk-JXXDCSMW.mjs +0 -17
  248. package/dist/lib/node-esm/chunk-JXXDCSMW.mjs.map +0 -7
  249. package/dist/lib/node-esm/chunk-K26TX5V4.mjs.map +0 -7
  250. package/dist/lib/node-esm/chunk-RX63ZNML.mjs +0 -24
  251. package/dist/lib/node-esm/chunk-RX63ZNML.mjs.map +0 -7
  252. package/dist/lib/node-esm/chunk-T2Y2BT53.mjs +0 -80
  253. package/dist/lib/node-esm/chunk-T2Y2BT53.mjs.map +0 -7
  254. package/dist/lib/node-esm/chunk-YOABAQ7A.mjs +0 -22
  255. package/dist/lib/node-esm/chunk-YOABAQ7A.mjs.map +0 -7
  256. package/dist/lib/node-esm/intent-resolver-CLMSVF2K.mjs +0 -65
  257. package/dist/lib/node-esm/intent-resolver-CLMSVF2K.mjs.map +0 -7
  258. package/dist/lib/node-esm/react-surface-YHFOQTVO.mjs.map +0 -7
  259. package/dist/lib/node-esm/settings-SIY33P3F.mjs.map +0 -7
  260. package/dist/lib/node-esm/state-LLGVRYKL.mjs.map +0 -7
  261. package/dist/types/src/components/MarkdownPreview/MarkdownPreview.d.ts +0 -6
  262. package/dist/types/src/components/MarkdownPreview/MarkdownPreview.d.ts.map +0 -1
  263. package/dist/types/src/components/MarkdownPreview/MarkdownPreview.stories.d.ts +0 -17
  264. package/dist/types/src/components/MarkdownPreview/MarkdownPreview.stories.d.ts.map +0 -1
  265. package/dist/types/src/components/MarkdownPreview/index.d.ts +0 -4
  266. package/dist/types/src/components/MarkdownPreview/index.d.ts.map +0 -1
  267. package/dist/types/src/types/schema.d.ts +0 -35
  268. package/dist/types/src/types/schema.d.ts.map +0 -1
  269. package/src/components/MarkdownPreview/MarkdownPreview.stories.tsx +0 -74
  270. package/src/components/MarkdownPreview/index.ts +0 -9
  271. package/src/types/schema.ts +0 -39
@@ -2,25 +2,25 @@
2
2
  // Copyright 2025 DXOS.org
3
3
  //
4
4
 
5
- import { Capabilities, contributes, type PluginContext } from '@dxos/app-framework';
5
+ import { Capabilities, type PluginContext, contributes } from '@dxos/app-framework';
6
6
  import { LocalStorageStore } from '@dxos/local-storage';
7
7
  import { type EditorViewMode, createEditorStateStore } from '@dxos/react-ui-editor';
8
8
 
9
+ import { meta } from '../meta';
10
+ import { type Markdown, type MarkdownPluginState } from '../types';
11
+
9
12
  import { MarkdownCapabilities } from './capabilities';
10
- import { MARKDOWN_PLUGIN } from '../meta';
11
- import { type MarkdownPluginState, type MarkdownSettingsProps } from '../types';
12
13
 
13
14
  export default (context: PluginContext) => {
14
- const state = new LocalStorageStore<MarkdownPluginState>(MARKDOWN_PLUGIN, { extensionProviders: [], viewMode: {} });
15
+ const state = new LocalStorageStore<MarkdownPluginState>(meta.id, { extensionProviders: [], viewMode: {} });
15
16
  state.prop({ key: 'viewMode', type: LocalStorageStore.json<{ [key: string]: EditorViewMode }>() });
16
17
 
17
18
  // TODO(wittjosiah): Fold into state.
18
- const editorState = createEditorStateStore(`${MARKDOWN_PLUGIN}/editor`);
19
+ const editorState = createEditorStateStore(`${meta.id}/editor`);
19
20
 
20
21
  const getViewMode = (id: string) => {
21
- const defaultViewMode = context
22
- .getCapability(Capabilities.SettingsStore)
23
- .getStore<MarkdownSettingsProps>(MARKDOWN_PLUGIN)!.value.defaultViewMode;
22
+ const defaultViewMode = context.getCapability(Capabilities.SettingsStore).getStore<Markdown.Settings>(meta.id)!
23
+ .value.defaultViewMode;
24
24
  return (id && state.values.viewMode[id]) || defaultViewMode;
25
25
  };
26
26
 
@@ -0,0 +1,47 @@
1
+ //
2
+ // Copyright 2025 DXOS.org
3
+ //
4
+
5
+ import { AiTool, AiToolkit } from '@effect/ai';
6
+ import { Effect, Schema } from 'effect';
7
+
8
+ import { Capabilities, type Capability, type PluginContext, contributes, createIntent } from '@dxos/app-framework';
9
+ import { invariant } from '@dxos/invariant';
10
+ import { getActiveSpace } from '@dxos/plugin-space';
11
+ import { SpaceAction } from '@dxos/plugin-space/types';
12
+
13
+ import { MarkdownAction } from '../types';
14
+
15
+ // TODO(burdon): Reconcile with functions (currently reuses plugin framework intents).
16
+ class Toolkit extends AiToolkit.make(
17
+ AiTool.make('create-document', {
18
+ description: 'Creates a new markdown document.',
19
+ parameters: {
20
+ name: Schema.optional(Schema.String),
21
+ content: Schema.optional(Schema.String),
22
+ },
23
+ // TODO(wittjosiah): Return document.
24
+ success: Schema.Any,
25
+ failure: Schema.Never,
26
+ }),
27
+ ) {
28
+ static layer = (context: PluginContext) =>
29
+ Toolkit.toLayer({
30
+ 'create-document': ({ name, content }) => {
31
+ const { dispatch } = context.getCapability(Capabilities.IntentDispatcher);
32
+ const space = getActiveSpace(context);
33
+ invariant(space, 'No active space');
34
+
35
+ return Effect.gen(function* () {
36
+ const { object } = yield* dispatch(createIntent(MarkdownAction.Create, { name, content }));
37
+ yield* dispatch(createIntent(SpaceAction.AddObject, { object, target: space }));
38
+ return { id: object.id };
39
+ }).pipe(Effect.orDie);
40
+ },
41
+ });
42
+ }
43
+
44
+ export default (context: PluginContext): Capability<any>[] => [
45
+ contributes(Capabilities.Toolkit, Toolkit),
46
+ contributes(Capabilities.ToolkitHandler, Toolkit.layer(context)),
47
+ ];
@@ -0,0 +1,79 @@
1
+ //
2
+ // Copyright 2023 DXOS.org
3
+ //
4
+
5
+ import '@dxos-theme';
6
+
7
+ import { type Meta, type StoryObj } from '@storybook/react-vite';
8
+ import React from 'react';
9
+
10
+ import { IntentPlugin } from '@dxos/app-framework';
11
+ import { withPluginManager } from '@dxos/app-framework/testing';
12
+ import { Markdown } from '@dxos/plugin-markdown/types';
13
+ import { faker } from '@dxos/random';
14
+ import { CardContainer } from '@dxos/react-ui-stack/testing';
15
+ import { withLayout, withTheme } from '@dxos/storybook-utils';
16
+
17
+ import { translations } from '../../translations';
18
+
19
+ import { MarkdownCard } from './MarkdownCard';
20
+
21
+ faker.seed(1234);
22
+
23
+ const meta: Meta<typeof MarkdownCard> = {
24
+ title: 'plugins/plugin-markdown/Card',
25
+ component: MarkdownCard,
26
+ render: ({ role, subject, ...args }) => {
27
+ return (
28
+ <CardContainer icon='ph--text-aa--regular' role={role}>
29
+ <MarkdownCard role={role} subject={subject} {...args} />
30
+ </CardContainer>
31
+ );
32
+ },
33
+ decorators: [
34
+ withPluginManager({
35
+ plugins: [IntentPlugin()],
36
+ }),
37
+ withTheme,
38
+ withLayout(),
39
+ ],
40
+ parameters: {
41
+ layout: 'centered',
42
+ translations,
43
+ },
44
+ tags: ['cards'],
45
+ } satisfies Meta<typeof MarkdownCard>;
46
+
47
+ export default meta;
48
+
49
+ type Story = StoryObj<typeof meta>;
50
+
51
+ export const Popover: Story = {
52
+ args: {
53
+ role: 'card--popover',
54
+ subject: Markdown.makeDocument({
55
+ name: faker.lorem.words(3),
56
+ content: faker.lorem.paragraphs(3),
57
+ }),
58
+ },
59
+ };
60
+
61
+ export const Intrinsic: Story = {
62
+ args: {
63
+ role: 'card--intrinsic',
64
+ subject: Markdown.makeDocument({
65
+ name: faker.lorem.words(3),
66
+ content: faker.lorem.paragraphs(3),
67
+ }),
68
+ },
69
+ };
70
+
71
+ export const Extrinsic: Story = {
72
+ args: {
73
+ role: 'card--extrinsic',
74
+ subject: Markdown.makeDocument({
75
+ name: faker.lorem.words(3),
76
+ content: faker.lorem.paragraphs(3),
77
+ }),
78
+ },
79
+ };
@@ -5,7 +5,7 @@
5
5
  import { pipe } from 'effect';
6
6
  import React, { useCallback } from 'react';
7
7
 
8
- import { chain, createIntent, LayoutAction, useIntentDispatcher } from '@dxos/app-framework';
8
+ import { LayoutAction, chain, createIntent, useIntentDispatcher } from '@dxos/app-framework';
9
9
  import { Obj } from '@dxos/echo';
10
10
  import { type PreviewProps } from '@dxos/plugin-preview';
11
11
  import { fullyQualifiedId } from '@dxos/react-client/echo';
@@ -13,13 +13,13 @@ import { Button, Icon, useTranslation } from '@dxos/react-ui';
13
13
  import { Card } from '@dxos/react-ui-stack';
14
14
  import { DataType } from '@dxos/schema';
15
15
 
16
- import { MARKDOWN_PLUGIN } from '../../meta';
17
- import { DocumentType } from '../../types';
16
+ import { meta } from '../../meta';
17
+ import { Markdown } from '../../types';
18
18
  import { getAbstract, getFallbackName } from '../../util';
19
19
 
20
20
  // TODO(burdon): Factor out.
21
- const getTitle = (subject: DocumentType | DataType.Text, fallback: string) => {
22
- if (Obj.instanceOf(DocumentType, subject)) {
21
+ const getTitle = (subject: Markdown.Document | DataType.Text, fallback: string) => {
22
+ if (Obj.instanceOf(Markdown.Document, subject)) {
23
23
  return subject.name ?? subject.fallbackName ?? getFallbackName(subject.content?.target?.content ?? fallback);
24
24
  } else if (Obj.instanceOf(DataType.Text, subject)) {
25
25
  return getFallbackName(subject.content);
@@ -27,17 +27,19 @@ const getTitle = (subject: DocumentType | DataType.Text, fallback: string) => {
27
27
  };
28
28
 
29
29
  // TODO(burdon): Factor out.
30
- const getSnippet = (subject: DocumentType | DataType.Text, fallback: string) => {
31
- if (Obj.instanceOf(DocumentType, subject)) {
30
+ const getSnippet = (subject: Markdown.Document | DataType.Text, fallback: string) => {
31
+ if (Obj.instanceOf(Markdown.Document, subject)) {
32
32
  return getAbstract(subject.content?.target?.content ?? fallback);
33
33
  } else if (Obj.instanceOf(DataType.Text, subject)) {
34
34
  return getAbstract(subject.content);
35
35
  }
36
36
  };
37
37
 
38
- export const MarkdownPreview = ({ subject, role }: PreviewProps<DocumentType | DataType.Text>) => {
38
+ export type MarkdownCardProps = PreviewProps<Markdown.Document | DataType.Text>;
39
+
40
+ export const MarkdownCard = ({ subject, role }: MarkdownCardProps) => {
39
41
  const { dispatchPromise: dispatch } = useIntentDispatcher();
40
- const { t } = useTranslation(MARKDOWN_PLUGIN);
42
+ const { t } = useTranslation(meta.id);
41
43
  const snippet = getSnippet(subject, t('fallback abstract'));
42
44
 
43
45
  // TODO(wittjosiah): Factor out so this component isn't dependent on the app framework.
@@ -57,15 +59,17 @@ export const MarkdownPreview = ({ subject, role }: PreviewProps<DocumentType | D
57
59
  );
58
60
 
59
61
  return (
60
- <Card.Container role={role}>
62
+ <Card.SurfaceRoot role={role}>
61
63
  <Card.Heading>{getTitle(subject, t('fallback title'))}</Card.Heading>
62
64
  {snippet && <Card.Text classNames='line-clamp-3 break-words col-span-2'>{snippet}</Card.Text>}
63
- <Card.Chrome>
64
- <Button onClick={handleNavigate}>
65
- <span className='grow'>{t('navigate to document label')}</span>
66
- <Icon icon='ph--arrow-right--regular' />
67
- </Button>
68
- </Card.Chrome>
69
- </Card.Container>
65
+ {role === 'card--popover' && (
66
+ <Card.Chrome>
67
+ <Button onClick={handleNavigate}>
68
+ <span className='grow'>{t('navigate to document label')}</span>
69
+ <Icon icon='ph--arrow-right--regular' />
70
+ </Button>
71
+ </Card.Chrome>
72
+ )}
73
+ </Card.SurfaceRoot>
70
74
  );
71
75
  };
@@ -0,0 +1,9 @@
1
+ //
2
+ // Copyright 2025 DXOS.org
3
+ //
4
+
5
+ import { MarkdownCard } from './MarkdownCard';
6
+
7
+ export * from './MarkdownCard';
8
+
9
+ export default MarkdownCard;
@@ -4,44 +4,59 @@
4
4
 
5
5
  import '@dxos-theme';
6
6
 
7
- import { type Meta } from '@storybook/react';
7
+ import { type Meta, type StoryObj } from '@storybook/react-vite';
8
8
  import React, { useMemo } from 'react';
9
9
 
10
- import { Capabilities, contributes, IntentPlugin, SettingsPlugin, Surface } from '@dxos/app-framework';
10
+ import {
11
+ type Capabilities,
12
+ IntentPlugin,
13
+ LayoutAction,
14
+ SettingsPlugin,
15
+ Surface,
16
+ createIntent,
17
+ useIntentDispatcher,
18
+ } from '@dxos/app-framework';
11
19
  import { withPluginManager } from '@dxos/app-framework/testing';
12
- import { todo } from '@dxos/debug';
13
- import { Obj, Query, Ref, Type } from '@dxos/echo';
20
+ import { Obj, Query } from '@dxos/echo';
14
21
  import { AttentionPlugin } from '@dxos/plugin-attention';
15
22
  import { ClientPlugin } from '@dxos/plugin-client';
16
23
  import { GraphPlugin } from '@dxos/plugin-graph';
17
24
  import { PreviewPlugin } from '@dxos/plugin-preview';
18
- import { SpaceCapabilities, SpacePlugin } from '@dxos/plugin-space';
25
+ import { SpacePlugin } from '@dxos/plugin-space';
19
26
  import { StorybookLayoutPlugin } from '@dxos/plugin-storybook-layout';
20
27
  import { ThemePlugin } from '@dxos/plugin-theme';
21
28
  import { faker } from '@dxos/random';
22
29
  import { useQuery, useSpace } from '@dxos/react-client/echo';
30
+ import { useAsyncEffect } from '@dxos/react-ui';
23
31
  import { defaultTx } from '@dxos/react-ui-theme';
24
32
  import { DataType } from '@dxos/schema';
25
- import { createObjectFactory, Testing, type ValueGenerator } from '@dxos/schema/testing';
33
+ import { type ValueGenerator, createObjectFactory } from '@dxos/schema/testing';
26
34
  import { withLayout } from '@dxos/storybook-utils';
27
35
 
28
36
  import { MarkdownPlugin } from '../MarkdownPlugin';
29
- import translations from '../translations';
30
- import { DocumentType } from '../types';
37
+ import { translations } from '../translations';
38
+ import { Markdown } from '../types';
31
39
 
32
40
  faker.seed(1);
33
41
 
34
42
  const generator: ValueGenerator = faker as any;
35
43
 
36
44
  const DefaultStory = () => {
45
+ const { dispatchPromise: dispatch } = useIntentDispatcher();
37
46
  const space = useSpace();
38
- const [doc] = useQuery(space, Query.type(DocumentType));
47
+ const [doc] = useQuery(space, Query.type(Markdown.Document));
39
48
  const data = useMemo(() => ({ subject: doc }), [doc]);
40
49
 
41
- return <Surface role='article' data={data} />;
50
+ useAsyncEffect(async () => {
51
+ if (space) {
52
+ await dispatch(createIntent(LayoutAction.SwitchWorkspace, { part: 'workspace', subject: space.id }));
53
+ }
54
+ }, [space, dispatch]);
55
+
56
+ return <Surface role='article' data={data} limit={1} />;
42
57
  };
43
58
 
44
- const meta: Meta<typeof DefaultStory> = {
59
+ const meta = {
45
60
  title: 'plugins/plugin-markdown/MarkdownContainer',
46
61
  render: DefaultStory,
47
62
  decorators: [
@@ -51,19 +66,25 @@ const meta: Meta<typeof DefaultStory> = {
51
66
  ThemePlugin({ tx: defaultTx }),
52
67
  StorybookLayoutPlugin(),
53
68
  ClientPlugin({
54
- types: [DocumentType, DataType.Text, Testing.Contact],
55
- onClientInitialized: async (_, client) => {
69
+ types: [Markdown.Document, DataType.Text, DataType.Person, DataType.Organization],
70
+ onClientInitialized: async ({ client }) => {
56
71
  await client.halo.createIdentity();
57
72
  await client.spaces.waitUntilReady();
58
73
  await client.spaces.default.waitUntilReady();
59
74
  const space = client.spaces.default;
60
- const doc = Obj.make(DocumentType, {
75
+
76
+ const queue = space.queues.create();
77
+ const alice = Obj.make(DataType.Person, { fullName: 'Alice' });
78
+ const acme = Obj.make(DataType.Organization, { name: 'ACME' });
79
+ await queue.append([alice, acme]);
80
+
81
+ const doc = Markdown.makeDocument({
61
82
  name: 'Test',
62
- content: Ref.make(Obj.make(DataType.Text, { content: '# Test\n\n' })),
83
+ content: `# Test\n\n![Alice](${Obj.getDXN(alice)})\n\n![ACME](${Obj.getDXN(acme)})`,
63
84
  });
64
85
  space.db.add(doc);
65
86
  const createObjects = createObjectFactory(space.db, generator);
66
- await createObjects([{ type: Testing.Contact, count: 10 }]);
87
+ await createObjects([{ type: DataType.Organization, count: 10 }]);
67
88
  await space.db.flush({ indexes: true });
68
89
  },
69
90
  }),
@@ -74,19 +95,6 @@ const meta: Meta<typeof DefaultStory> = {
74
95
  PreviewPlugin(),
75
96
  GraphPlugin(),
76
97
  ],
77
- capabilities: [
78
- // NOTE: Editor only queries for object form schemas when linking.
79
- contributes(SpaceCapabilities.ObjectForm, {
80
- objectSchema: Testing.Contact,
81
- getIntent: () => todo(),
82
- }),
83
- contributes(Capabilities.Metadata, {
84
- id: Type.getTypename(Testing.Contact),
85
- metadata: {
86
- icon: 'ph--user--regular',
87
- },
88
- }),
89
- ],
90
98
  }),
91
99
  withLayout({ fullscreen: true }),
92
100
  ],
@@ -94,10 +102,10 @@ const meta: Meta<typeof DefaultStory> = {
94
102
  translations,
95
103
  controls: { disable: true },
96
104
  },
97
- };
105
+ } satisfies Meta<typeof Capabilities>;
98
106
 
99
107
  export default meta;
100
108
 
101
- type Story = Meta<typeof DefaultStory>;
109
+ type Story = StoryObj<typeof meta>;
102
110
 
103
111
  export const Default: Story = {};
@@ -7,37 +7,40 @@ import React, { useCallback, useEffect, useMemo, useState } from 'react';
7
7
  import { createPortal } from 'react-dom';
8
8
 
9
9
  import { Capabilities, Surface, useAppGraph, useCapabilities, usePluginManager } from '@dxos/app-framework';
10
- import { DXN, Filter, Obj, Query } from '@dxos/echo';
10
+ import { DXN, Filter, Obj, Query, Type } from '@dxos/echo';
11
+ import { ClientCapabilities } from '@dxos/plugin-client';
11
12
  import { SpaceCapabilities } from '@dxos/plugin-space';
12
- import { fullyQualifiedId, getSpace, useQuery, useSpace } from '@dxos/react-client/echo';
13
+ import { useClient } from '@dxos/react-client';
14
+ import { fullyQualifiedId, getSpace } from '@dxos/react-client/echo';
13
15
  import { toLocalizedString, useTranslation } from '@dxos/react-ui';
14
16
  import { type SelectionManager } from '@dxos/react-ui-attention';
15
17
  import {
16
18
  type CommandMenuGroup,
17
19
  type CommandMenuItem,
18
- insertAtCursor,
19
- insertAtLineStart,
20
20
  type PreviewLinkRef,
21
21
  type PreviewOptions,
22
+ insertAtCursor,
23
+ insertAtLineStart,
22
24
  } from '@dxos/react-ui-editor';
23
25
  import { DataType } from '@dxos/schema';
24
26
 
25
- import { MarkdownEditor, type MarkdownEditorProps } from './MarkdownEditor';
26
27
  import { useExtensions } from '../extensions';
27
- import { DocumentType, type MarkdownSettingsProps } from '../types';
28
+ import { Markdown } from '../types';
28
29
  import { getFallbackName } from '../util';
29
30
 
31
+ import { MarkdownEditor, type MarkdownEditorProps } from './MarkdownEditor';
32
+
30
33
  export type MarkdownContainerProps = Pick<
31
34
  MarkdownEditorProps,
32
35
  'role' | 'extensionProviders' | 'viewMode' | 'editorStateStore' | 'onViewModeChange'
33
36
  > & {
34
37
  id: string;
35
- object: DocumentType | DataType.Text | any;
36
- settings: MarkdownSettingsProps;
38
+ object: Markdown.Document | DataType.Text | any;
39
+ settings: Markdown.Settings;
37
40
  selectionManager?: SelectionManager;
38
41
  };
39
42
 
40
- const MarkdownContainer = ({
43
+ export const MarkdownContainer = ({
41
44
  id,
42
45
  role,
43
46
  object,
@@ -49,7 +52,7 @@ const MarkdownContainer = ({
49
52
  }: MarkdownContainerProps) => {
50
53
  const { t } = useTranslation();
51
54
  const scrollPastEnd = role === 'article';
52
- const doc = Obj.instanceOf(DocumentType, object) ? object : undefined;
55
+ const doc = Obj.instanceOf(Markdown.Document, object) ? object : undefined;
53
56
  const text = Obj.instanceOf(DataType.Text, object) ? object : undefined;
54
57
  const [previewBlocks, setPreviewBlocks] = useState<{ link: PreviewLinkRef; el: HTMLElement }[]>([]);
55
58
  const previewOptions = useMemo(
@@ -83,18 +86,30 @@ const MarkdownContainer = ({
83
86
  );
84
87
  const space = getSpace(object);
85
88
  const objectForms = useCapabilities(SpaceCapabilities.ObjectForm);
86
- const filter = useMemo(() => Filter.or(...objectForms.map((form) => Filter.type(form.objectSchema))), [objectForms]);
89
+ const schemaWhiteList = useCapabilities(ClientCapabilities.SchemaWhiteList);
90
+ const filter = useMemo(
91
+ () =>
92
+ Filter.or(
93
+ ...objectForms.map((form) => Filter.type(form.objectSchema)),
94
+ ...schemaWhiteList.flat().map((schema) => Filter.typename(Type.getTypename(schema))),
95
+ ),
96
+ [objectForms, schemaWhiteList],
97
+ );
87
98
  const onLinkQuery = useCallback(
88
99
  async (query?: string): Promise<CommandMenuGroup[]> => {
89
- const name = query?.startsWith('@') ? query.slice(1).toLowerCase() : query?.toLowerCase() ?? '';
100
+ const name = query?.startsWith('@') ? query.slice(1).toLowerCase() : (query?.toLowerCase() ?? '');
90
101
  const results = await space?.db.query(Query.select(filter)).run();
91
102
  // TODO(wittjosiah): Use `Obj.Any` type.
92
103
  const getLabel = (object: any) => {
104
+ const label = Obj.getLabel(object);
105
+ if (label) {
106
+ return label;
107
+ }
108
+
109
+ // TODO(wittjosiah): Remove metadata labels.
93
110
  const type = Obj.getTypename(object)!;
94
111
  const metadata = resolve(type);
95
- return (
96
- metadata.label?.(object) || object.name || ['object name placeholder', { ns: type, default: 'New object' }]
97
- );
112
+ return metadata.label?.(object) || ['object name placeholder', { ns: type, default: 'New object' }];
98
113
  };
99
114
  const items =
100
115
  results?.objects
@@ -108,7 +123,7 @@ const MarkdownContainer = ({
108
123
  label,
109
124
  icon: metadata.icon,
110
125
  onSelect: (view, head) => {
111
- const link = `[${label}][${Obj.getDXN(object)}]`;
126
+ const link = `[${label}](${Obj.getDXN(object)})`;
112
127
  if (query?.startsWith('@')) {
113
128
  insertAtLineStart(view, head, `!${link}\n`);
114
129
  } else {
@@ -176,17 +191,17 @@ const MarkdownContainer = ({
176
191
  // TODO(wittjosiah): This shouldn't be "card" but "block".
177
192
  // It's not a preview card but an interactive embedded object.
178
193
  const PreviewBlock = ({ link, el }: { link: PreviewLinkRef; el: HTMLElement }) => {
179
- const echoDXN = useMemo(() => DXN.parse(link.ref).asEchoDXN(), [link.ref]);
180
- const space = useSpace(echoDXN?.spaceId);
181
- const [subject] = useQuery(space, Query.select(Filter.ids(echoDXN?.echoId ?? '')));
194
+ const client = useClient();
195
+ const dxn = DXN.parse(link.ref);
196
+ const subject = client.graph.ref(dxn).target;
182
197
  const data = useMemo(() => ({ subject }), [subject]);
183
198
 
184
- return createPortal(<Surface role='card--document' data={data} limit={1} />, el);
199
+ return createPortal(<Surface role='card--transclusion' data={data} limit={1} />, el);
185
200
  };
186
201
 
187
202
  type DocumentEditorProps = Omit<MarkdownContainerProps, 'object' | 'extensionProviders' | 'editorStateStore'> &
188
203
  Pick<MarkdownEditorProps, 'id' | 'scrollPastEnd' | 'extensions' | 'onLinkQuery'> & {
189
- document: DocumentType;
204
+ document: Markdown.Document;
190
205
  };
191
206
 
192
207
  export const DocumentEditor = ({ id, document: doc, settings, viewMode, ...props }: DocumentEditorProps) => {
@@ -4,7 +4,7 @@
4
4
 
5
5
  import '@dxos-theme';
6
6
 
7
- import { type Meta } from '@storybook/react';
7
+ import { type Meta, type StoryObj } from '@storybook/react-vite';
8
8
  import React, { useMemo } from 'react';
9
9
 
10
10
  import { IntentPlugin } from '@dxos/app-framework';
@@ -14,8 +14,9 @@ import { withAttention } from '@dxos/react-ui-attention/testing';
14
14
  import { automerge, translations as editorTranslations } from '@dxos/react-ui-editor';
15
15
  import { withLayout, withTheme } from '@dxos/storybook-utils';
16
16
 
17
+ import { translations } from '../../translations';
18
+
17
19
  import { MarkdownEditor, type MarkdownEditorProps } from './MarkdownEditor';
18
- import translations from '../../translations';
19
20
 
20
21
  const content = Array.from({ length: 100 }, (_, i) => `Line ${i + 1}`).join('\n');
21
22
 
@@ -30,9 +31,9 @@ const DefaultStory = ({ content = '# Test', toolbar }: StoryProps) => {
30
31
  return <MarkdownEditor id='test' initialValue={doc.content} extensions={extensions} toolbar={toolbar} />;
31
32
  };
32
33
 
33
- const meta: Meta<typeof MarkdownEditor> = {
34
+ const meta = {
34
35
  title: 'plugins/plugin-markdown/MarkdownEditor',
35
- component: MarkdownEditor,
36
+ component: MarkdownEditor as any,
36
37
  render: DefaultStory,
37
38
  decorators: [
38
39
  withPluginManager({ plugins: [IntentPlugin()] }),
@@ -43,17 +44,19 @@ const meta: Meta<typeof MarkdownEditor> = {
43
44
  parameters: {
44
45
  translations: [...translations, ...editorTranslations],
45
46
  },
46
- };
47
+ } satisfies Meta<typeof DefaultStory>;
47
48
 
48
49
  export default meta;
49
50
 
50
- export const Default = {
51
+ type Story = StoryObj<typeof meta>;
52
+
53
+ export const Default: Story = {
51
54
  args: {
52
55
  content,
53
56
  },
54
57
  };
55
58
 
56
- export const WithToolbar = {
59
+ export const WithToolbar: Story = {
57
60
  args: {
58
61
  toolbar: true,
59
62
  content,