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

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 (266) hide show
  1. package/dist/lib/browser/{chunk-WIPSLZ6L.mjs → MarkdownCard-R6VVXOMN.mjs} +27 -26
  2. package/dist/lib/browser/MarkdownCard-R6VVXOMN.mjs.map +7 -0
  3. package/dist/lib/browser/{chunk-KDKXFKDN.mjs → MarkdownContainer-LSOAAG6R.mjs} +48 -25
  4. package/dist/lib/browser/MarkdownContainer-LSOAAG6R.mjs.map +7 -0
  5. package/dist/lib/browser/MarkdownSettings-OD7AJSSJ.mjs +106 -0
  6. package/dist/lib/browser/MarkdownSettings-OD7AJSSJ.mjs.map +7 -0
  7. package/dist/lib/browser/{anchor-sort-WQ3TL7ZI.mjs → anchor-sort-35SV33JX.mjs} +6 -4
  8. package/dist/lib/browser/anchor-sort-35SV33JX.mjs.map +7 -0
  9. package/dist/lib/browser/{app-graph-serializer-ULZUJKOD.mjs → app-graph-serializer-RMUNNVUY.mjs} +9 -7
  10. package/dist/lib/browser/app-graph-serializer-RMUNNVUY.mjs.map +7 -0
  11. package/dist/lib/browser/blueprint-definition-SFGTWLSY.mjs +18 -0
  12. package/dist/lib/browser/blueprint-definition-SFGTWLSY.mjs.map +7 -0
  13. package/dist/lib/browser/blueprints/index.mjs +5 -4
  14. package/dist/lib/browser/{chunk-LMO5UVKL.mjs → chunk-4CSOMIT4.mjs} +29 -61
  15. package/dist/lib/browser/chunk-4CSOMIT4.mjs.map +7 -0
  16. package/dist/lib/browser/chunk-646I24Q2.mjs +178 -0
  17. package/dist/lib/browser/chunk-646I24Q2.mjs.map +7 -0
  18. package/dist/lib/browser/{chunk-BX73DASG.mjs → chunk-B6S4YQWZ.mjs} +285 -206
  19. package/dist/lib/browser/chunk-B6S4YQWZ.mjs.map +7 -0
  20. package/dist/lib/browser/chunk-RYZHVXZ5.mjs +28 -0
  21. package/dist/lib/browser/chunk-RYZHVXZ5.mjs.map +7 -0
  22. package/dist/lib/browser/{chunk-CUGDX7KA.mjs → chunk-WU3CQIPM.mjs} +2 -2
  23. package/dist/lib/browser/{chunk-JOXYQLKH.mjs → chunk-YKXQWJX6.mjs} +9 -4
  24. package/dist/lib/browser/chunk-YKXQWJX6.mjs.map +7 -0
  25. package/dist/lib/browser/cli/index.mjs +15 -13
  26. package/dist/lib/browser/cli/index.mjs.map +3 -3
  27. package/dist/lib/browser/index.mjs +49 -48
  28. package/dist/lib/browser/index.mjs.map +3 -3
  29. package/dist/lib/browser/meta.json +1 -1
  30. package/dist/lib/browser/{operation-resolver-EGCWOQKJ.mjs → operation-resolver-MVI2ZJ7M.mjs} +6 -18
  31. package/dist/lib/browser/operation-resolver-MVI2ZJ7M.mjs.map +7 -0
  32. package/dist/lib/browser/react-surface-OJYNFGZB.mjs +117 -0
  33. package/dist/lib/browser/react-surface-OJYNFGZB.mjs.map +7 -0
  34. package/dist/lib/browser/{settings-JY5JE7MI.mjs → settings-R722LDFD.mjs} +8 -5
  35. package/dist/lib/browser/settings-R722LDFD.mjs.map +7 -0
  36. package/dist/lib/browser/{state-QE7VSJWJ.mjs → state-MRJLGZW4.mjs} +7 -5
  37. package/dist/lib/{node-esm/state-LXE5XIN4.mjs.map → browser/state-MRJLGZW4.mjs.map} +2 -2
  38. package/dist/lib/browser/types/index.mjs +2 -1
  39. package/dist/lib/node-esm/{chunk-RQP7G7XW.mjs → MarkdownCard-EE3Q2JPL.mjs} +27 -26
  40. package/dist/lib/node-esm/MarkdownCard-EE3Q2JPL.mjs.map +7 -0
  41. package/dist/lib/node-esm/{chunk-3JYPCC7M.mjs → MarkdownContainer-NMFVVFBR.mjs} +48 -25
  42. package/dist/lib/node-esm/MarkdownContainer-NMFVVFBR.mjs.map +7 -0
  43. package/dist/lib/node-esm/MarkdownSettings-U7GJ4OP3.mjs +107 -0
  44. package/dist/lib/node-esm/MarkdownSettings-U7GJ4OP3.mjs.map +7 -0
  45. package/dist/lib/node-esm/{anchor-sort-G7D5TAI6.mjs → anchor-sort-QCV4U222.mjs} +6 -4
  46. package/dist/lib/node-esm/anchor-sort-QCV4U222.mjs.map +7 -0
  47. package/dist/lib/node-esm/{app-graph-serializer-W5YMQP7P.mjs → app-graph-serializer-I27YTNDW.mjs} +9 -7
  48. package/dist/lib/node-esm/app-graph-serializer-I27YTNDW.mjs.map +7 -0
  49. package/dist/lib/node-esm/blueprint-definition-VZEIBTAP.mjs +19 -0
  50. package/dist/lib/node-esm/blueprint-definition-VZEIBTAP.mjs.map +7 -0
  51. package/dist/lib/node-esm/blueprints/index.mjs +5 -4
  52. package/dist/lib/node-esm/{chunk-PRV35A7Z.mjs → chunk-2LVNBTQT.mjs} +29 -61
  53. package/dist/lib/node-esm/chunk-2LVNBTQT.mjs.map +7 -0
  54. package/dist/lib/node-esm/chunk-CW4FZNMZ.mjs +29 -0
  55. package/dist/lib/node-esm/chunk-CW4FZNMZ.mjs.map +7 -0
  56. package/dist/lib/node-esm/{chunk-W3IIKDV5.mjs → chunk-HVAZON2M.mjs} +2 -2
  57. package/dist/lib/node-esm/chunk-KHTJJ45U.mjs +179 -0
  58. package/dist/lib/node-esm/chunk-KHTJJ45U.mjs.map +7 -0
  59. package/dist/lib/node-esm/{chunk-44VJC3QF.mjs → chunk-TR2NZYXO.mjs} +9 -4
  60. package/dist/lib/node-esm/chunk-TR2NZYXO.mjs.map +7 -0
  61. package/dist/lib/node-esm/{chunk-D4BCFPKK.mjs → chunk-VG2PIENM.mjs} +285 -206
  62. package/dist/lib/node-esm/chunk-VG2PIENM.mjs.map +7 -0
  63. package/dist/lib/node-esm/cli/index.mjs +15 -13
  64. package/dist/lib/node-esm/cli/index.mjs.map +3 -3
  65. package/dist/lib/node-esm/index.mjs +49 -48
  66. package/dist/lib/node-esm/index.mjs.map +3 -3
  67. package/dist/lib/node-esm/meta.json +1 -1
  68. package/dist/lib/node-esm/{operation-resolver-2HIS2AQZ.mjs → operation-resolver-6TK6ARJ6.mjs} +6 -18
  69. package/dist/lib/node-esm/operation-resolver-6TK6ARJ6.mjs.map +7 -0
  70. package/dist/lib/node-esm/react-surface-UVNCUX77.mjs +118 -0
  71. package/dist/lib/node-esm/react-surface-UVNCUX77.mjs.map +7 -0
  72. package/dist/lib/node-esm/{settings-4UGMPIRY.mjs → settings-RDYNOKVE.mjs} +8 -5
  73. package/dist/lib/node-esm/settings-RDYNOKVE.mjs.map +7 -0
  74. package/dist/lib/node-esm/{state-LXE5XIN4.mjs → state-7HQSNXXQ.mjs} +7 -5
  75. package/dist/lib/{browser/state-QE7VSJWJ.mjs.map → node-esm/state-7HQSNXXQ.mjs.map} +2 -2
  76. package/dist/lib/node-esm/types/index.mjs +2 -1
  77. package/dist/types/src/MarkdownPlugin.d.ts.map +1 -1
  78. package/dist/types/src/blueprints/functions/create.d.ts.map +1 -1
  79. package/dist/types/src/blueprints/functions/index.d.ts +41 -3
  80. package/dist/types/src/blueprints/functions/index.d.ts.map +1 -1
  81. package/dist/types/src/blueprints/functions/open.d.ts +8 -1
  82. package/dist/types/src/blueprints/functions/open.d.ts.map +1 -1
  83. package/dist/types/src/blueprints/functions/update.d.ts +16 -3
  84. package/dist/types/src/blueprints/functions/update.d.ts.map +1 -1
  85. package/dist/types/src/blueprints/index.d.ts +1 -1
  86. package/dist/types/src/blueprints/index.d.ts.map +1 -1
  87. package/dist/types/src/blueprints/markdown-blueprint.d.ts +3 -20
  88. package/dist/types/src/blueprints/markdown-blueprint.d.ts.map +1 -1
  89. package/dist/types/src/capabilities/anchor-sort/anchor-sort.d.ts +3 -2
  90. package/dist/types/src/capabilities/anchor-sort/anchor-sort.d.ts.map +1 -1
  91. package/dist/types/src/capabilities/anchor-sort/index.d.ts +1 -1
  92. package/dist/types/src/capabilities/anchor-sort/index.d.ts.map +1 -1
  93. package/dist/types/src/capabilities/app-graph-serializer/app-graph-serializer.d.ts +2 -2
  94. package/dist/types/src/capabilities/app-graph-serializer/app-graph-serializer.d.ts.map +1 -1
  95. package/dist/types/src/capabilities/app-graph-serializer/index.d.ts +1 -1
  96. package/dist/types/src/capabilities/app-graph-serializer/index.d.ts.map +1 -1
  97. package/dist/types/src/capabilities/artifact-definition/artifact-definition.d.ts +1 -1
  98. package/dist/types/src/capabilities/artifact-definition/artifact-definition.d.ts.map +1 -1
  99. package/dist/types/src/capabilities/blueprint-definition/blueprint-definition.d.ts +3 -7
  100. package/dist/types/src/capabilities/blueprint-definition/blueprint-definition.d.ts.map +1 -1
  101. package/dist/types/src/capabilities/blueprint-definition/index.d.ts +1 -1
  102. package/dist/types/src/capabilities/blueprint-definition/index.d.ts.map +1 -1
  103. package/dist/types/src/capabilities/operation-resolver/index.d.ts +1 -1
  104. package/dist/types/src/capabilities/operation-resolver/index.d.ts.map +1 -1
  105. package/dist/types/src/capabilities/operation-resolver/operation-resolver.d.ts +2 -2
  106. package/dist/types/src/capabilities/operation-resolver/operation-resolver.d.ts.map +1 -1
  107. package/dist/types/src/capabilities/react-surface/index.d.ts +1 -1
  108. package/dist/types/src/capabilities/react-surface/index.d.ts.map +1 -1
  109. package/dist/types/src/capabilities/react-surface/react-surface.d.ts +2 -2
  110. package/dist/types/src/capabilities/react-surface/react-surface.d.ts.map +1 -1
  111. package/dist/types/src/capabilities/settings/index.d.ts +1 -1
  112. package/dist/types/src/capabilities/settings/index.d.ts.map +1 -1
  113. package/dist/types/src/capabilities/settings/settings.d.ts +3 -2
  114. package/dist/types/src/capabilities/settings/settings.d.ts.map +1 -1
  115. package/dist/types/src/capabilities/state/state.d.ts +1 -1
  116. package/dist/types/src/cli/plugin.d.ts.map +1 -1
  117. package/dist/types/src/components/MarkdownEditor/FileUpload.d.ts +2 -2
  118. package/dist/types/src/components/MarkdownEditor/FileUpload.d.ts.map +1 -1
  119. package/dist/types/src/components/MarkdownEditor/MarkdownEditor.d.ts +5 -3
  120. package/dist/types/src/components/MarkdownEditor/MarkdownEditor.d.ts.map +1 -1
  121. package/dist/types/src/components/MarkdownEditor/MarkdownEditor.stories.d.ts +1 -1
  122. package/dist/types/src/components/MarkdownEditor/MarkdownEditor.stories.d.ts.map +1 -1
  123. package/dist/types/src/components/MarkdownEditor/MarkdownEditorContent.d.ts +2 -0
  124. package/dist/types/src/components/MarkdownEditor/MarkdownEditorContent.d.ts.map +1 -1
  125. package/dist/types/src/components/MarkdownEditor/MarkdownEditorToolbar.d.ts +5 -5
  126. package/dist/types/src/components/MarkdownEditor/MarkdownEditorToolbar.d.ts.map +1 -1
  127. package/dist/types/src/components/index.d.ts +1 -8
  128. package/dist/types/src/components/index.d.ts.map +1 -1
  129. package/dist/types/src/containers/MarkdownCard/MarkdownCard.d.ts.map +1 -0
  130. package/dist/types/src/containers/MarkdownCard/MarkdownCard.stories.d.ts.map +1 -0
  131. package/dist/types/src/{components → containers}/MarkdownCard/index.d.ts +0 -1
  132. package/dist/types/src/containers/MarkdownCard/index.d.ts.map +1 -0
  133. package/dist/types/src/{components → containers/MarkdownContainer}/MarkdownContainer.d.ts +6 -6
  134. package/dist/types/src/containers/MarkdownContainer/MarkdownContainer.d.ts.map +1 -0
  135. package/dist/types/src/{components → containers/MarkdownContainer}/MarkdownContainer.stories.d.ts +31 -1
  136. package/dist/types/src/containers/MarkdownContainer/MarkdownContainer.stories.d.ts.map +1 -0
  137. package/dist/types/src/containers/MarkdownContainer/index.d.ts +3 -0
  138. package/dist/types/src/containers/MarkdownContainer/index.d.ts.map +1 -0
  139. package/dist/types/src/{components → containers}/MarkdownSettings/MarkdownSettings.d.ts.map +1 -1
  140. package/dist/types/src/containers/MarkdownSettings/index.d.ts +3 -0
  141. package/dist/types/src/containers/MarkdownSettings/index.d.ts.map +1 -0
  142. package/dist/types/src/containers/index.d.ts +6 -0
  143. package/dist/types/src/containers/index.d.ts.map +1 -0
  144. package/dist/types/src/hooks/useExtensions.d.ts +3 -3
  145. package/dist/types/src/hooks/useExtensions.d.ts.map +1 -1
  146. package/dist/types/src/hooks/useSelectCurrentThread.d.ts +1 -1
  147. package/dist/types/src/hooks/useSelectCurrentThread.d.ts.map +1 -1
  148. package/dist/types/src/index.d.ts +1 -0
  149. package/dist/types/src/index.d.ts.map +1 -1
  150. package/dist/types/src/translations.d.ts +30 -0
  151. package/dist/types/src/translations.d.ts.map +1 -1
  152. package/dist/types/src/types/Markdown.d.ts +1 -1
  153. package/dist/types/src/types/Markdown.d.ts.map +1 -1
  154. package/dist/types/src/types/MarkdownAction.d.ts +2 -22
  155. package/dist/types/src/types/MarkdownAction.d.ts.map +1 -1
  156. package/dist/types/src/types/events.d.ts.map +1 -1
  157. package/dist/types/src/util.d.ts +1 -1
  158. package/dist/types/src/util.d.ts.map +1 -1
  159. package/dist/types/tsconfig.tsbuildinfo +1 -1
  160. package/package.json +64 -57
  161. package/src/MarkdownPlugin.tsx +29 -38
  162. package/src/blueprints/functions/create.conversations.json +1 -1
  163. package/src/blueprints/functions/create.test.ts +24 -57
  164. package/src/blueprints/functions/create.ts +6 -5
  165. package/src/blueprints/functions/index.ts +11 -3
  166. package/src/blueprints/functions/open.ts +10 -10
  167. package/src/blueprints/functions/update.conversations.json +1 -1
  168. package/src/blueprints/functions/update.test.ts +133 -67
  169. package/src/blueprints/functions/update.ts +54 -13
  170. package/src/blueprints/index.ts +1 -1
  171. package/src/blueprints/markdown-blueprint.ts +14 -6
  172. package/src/capabilities/anchor-sort/anchor-sort.ts +3 -2
  173. package/src/capabilities/app-graph-serializer/app-graph-serializer.ts +5 -4
  174. package/src/capabilities/artifact-definition/artifact-definition.ts +2 -2
  175. package/src/capabilities/blueprint-definition/blueprint-definition.ts +6 -14
  176. package/src/capabilities/operation-resolver/operation-resolver.ts +3 -14
  177. package/src/capabilities/react-surface/react-surface.tsx +30 -19
  178. package/src/capabilities/settings/settings.ts +3 -2
  179. package/src/capabilities/state/state.ts +2 -2
  180. package/src/cli/plugin.ts +5 -5
  181. package/src/components/MarkdownEditor/FileUpload.tsx +2 -2
  182. package/src/components/MarkdownEditor/MarkdownEditor.stories.tsx +25 -22
  183. package/src/components/MarkdownEditor/MarkdownEditor.tsx +44 -17
  184. package/src/components/MarkdownEditor/MarkdownEditorContent.tsx +6 -5
  185. package/src/components/MarkdownEditor/MarkdownEditorToolbar.tsx +13 -13
  186. package/src/components/index.ts +2 -14
  187. package/src/{components → containers}/MarkdownCard/MarkdownCard.stories.tsx +17 -7
  188. package/src/{components → containers}/MarkdownCard/MarkdownCard.tsx +21 -24
  189. package/src/{components → containers}/MarkdownCard/index.ts +0 -2
  190. package/src/{components → containers/MarkdownContainer}/MarkdownContainer.stories.tsx +22 -9
  191. package/src/{components → containers/MarkdownContainer}/MarkdownContainer.tsx +57 -34
  192. package/src/containers/MarkdownContainer/index.ts +6 -0
  193. package/src/{components → containers}/MarkdownSettings/MarkdownSettings.tsx +24 -24
  194. package/src/containers/MarkdownSettings/index.ts +7 -0
  195. package/src/containers/index.ts +11 -0
  196. package/src/hooks/useEditorMenuOptions.ts +1 -1
  197. package/src/hooks/useExtensions.tsx +52 -89
  198. package/src/hooks/useLinkQuery.ts +3 -3
  199. package/src/hooks/useSelectCurrentThread.tsx +6 -6
  200. package/src/index.ts +2 -0
  201. package/src/meta.ts +1 -1
  202. package/src/testing.ts +2 -2
  203. package/src/translations.ts +3 -0
  204. package/src/types/Markdown.ts +13 -5
  205. package/src/types/MarkdownAction.ts +3 -18
  206. package/src/types/capabilities.ts +4 -4
  207. package/src/types/events.ts +4 -3
  208. package/src/util.tsx +2 -2
  209. package/dist/lib/browser/MarkdownCard-WHK3ORP7.mjs +0 -12
  210. package/dist/lib/browser/MarkdownCard-WHK3ORP7.mjs.map +0 -7
  211. package/dist/lib/browser/MarkdownContainer-V7EAADMF.mjs +0 -12
  212. package/dist/lib/browser/MarkdownContainer-V7EAADMF.mjs.map +0 -7
  213. package/dist/lib/browser/anchor-sort-WQ3TL7ZI.mjs.map +0 -7
  214. package/dist/lib/browser/app-graph-serializer-ULZUJKOD.mjs.map +0 -7
  215. package/dist/lib/browser/blueprint-definition-TLV4PNZW.mjs +0 -19
  216. package/dist/lib/browser/blueprint-definition-TLV4PNZW.mjs.map +0 -7
  217. package/dist/lib/browser/chunk-BX73DASG.mjs.map +0 -7
  218. package/dist/lib/browser/chunk-FWQQW6KU.mjs +0 -144
  219. package/dist/lib/browser/chunk-FWQQW6KU.mjs.map +0 -7
  220. package/dist/lib/browser/chunk-JOXYQLKH.mjs.map +0 -7
  221. package/dist/lib/browser/chunk-KDKXFKDN.mjs.map +0 -7
  222. package/dist/lib/browser/chunk-LMO5UVKL.mjs.map +0 -7
  223. package/dist/lib/browser/chunk-S45ULIOG.mjs +0 -101
  224. package/dist/lib/browser/chunk-S45ULIOG.mjs.map +0 -7
  225. package/dist/lib/browser/chunk-WIPSLZ6L.mjs.map +0 -7
  226. package/dist/lib/browser/operation-resolver-EGCWOQKJ.mjs.map +0 -7
  227. package/dist/lib/browser/react-surface-SRPLD3ED.mjs +0 -213
  228. package/dist/lib/browser/react-surface-SRPLD3ED.mjs.map +0 -7
  229. package/dist/lib/browser/settings-JY5JE7MI.mjs.map +0 -7
  230. package/dist/lib/node-esm/MarkdownCard-WJPLQTFS.mjs +0 -13
  231. package/dist/lib/node-esm/MarkdownCard-WJPLQTFS.mjs.map +0 -7
  232. package/dist/lib/node-esm/MarkdownContainer-LUSMORP2.mjs +0 -13
  233. package/dist/lib/node-esm/MarkdownContainer-LUSMORP2.mjs.map +0 -7
  234. package/dist/lib/node-esm/anchor-sort-G7D5TAI6.mjs.map +0 -7
  235. package/dist/lib/node-esm/app-graph-serializer-W5YMQP7P.mjs.map +0 -7
  236. package/dist/lib/node-esm/blueprint-definition-HYFA7BKQ.mjs +0 -20
  237. package/dist/lib/node-esm/blueprint-definition-HYFA7BKQ.mjs.map +0 -7
  238. package/dist/lib/node-esm/chunk-3JYPCC7M.mjs.map +0 -7
  239. package/dist/lib/node-esm/chunk-44VJC3QF.mjs.map +0 -7
  240. package/dist/lib/node-esm/chunk-D4BCFPKK.mjs.map +0 -7
  241. package/dist/lib/node-esm/chunk-EYAFC4N7.mjs +0 -145
  242. package/dist/lib/node-esm/chunk-EYAFC4N7.mjs.map +0 -7
  243. package/dist/lib/node-esm/chunk-PRV35A7Z.mjs.map +0 -7
  244. package/dist/lib/node-esm/chunk-RQP7G7XW.mjs.map +0 -7
  245. package/dist/lib/node-esm/chunk-SDTYEGGL.mjs +0 -102
  246. package/dist/lib/node-esm/chunk-SDTYEGGL.mjs.map +0 -7
  247. package/dist/lib/node-esm/operation-resolver-2HIS2AQZ.mjs.map +0 -7
  248. package/dist/lib/node-esm/react-surface-RONSOJIQ.mjs +0 -214
  249. package/dist/lib/node-esm/react-surface-RONSOJIQ.mjs.map +0 -7
  250. package/dist/lib/node-esm/settings-4UGMPIRY.mjs.map +0 -7
  251. package/dist/types/src/components/MarkdownCard/MarkdownCard.d.ts.map +0 -1
  252. package/dist/types/src/components/MarkdownCard/MarkdownCard.stories.d.ts.map +0 -1
  253. package/dist/types/src/components/MarkdownCard/index.d.ts.map +0 -1
  254. package/dist/types/src/components/MarkdownContainer.d.ts.map +0 -1
  255. package/dist/types/src/components/MarkdownContainer.stories.d.ts.map +0 -1
  256. package/dist/types/src/components/MarkdownSettings/index.d.ts +0 -2
  257. package/dist/types/src/components/MarkdownSettings/index.d.ts.map +0 -1
  258. package/dist/types/src/components/Suggestions.stories.d.ts +0 -11
  259. package/dist/types/src/components/Suggestions.stories.d.ts.map +0 -1
  260. package/src/components/MarkdownSettings/index.ts +0 -5
  261. package/src/components/Suggestions.stories.tsx +0 -215
  262. /package/dist/lib/browser/{chunk-CUGDX7KA.mjs.map → chunk-WU3CQIPM.mjs.map} +0 -0
  263. /package/dist/lib/node-esm/{chunk-W3IIKDV5.mjs.map → chunk-HVAZON2M.mjs.map} +0 -0
  264. /package/dist/types/src/{components → containers}/MarkdownCard/MarkdownCard.d.ts +0 -0
  265. /package/dist/types/src/{components → containers}/MarkdownCard/MarkdownCard.stories.d.ts +0 -0
  266. /package/dist/types/src/{components → containers}/MarkdownSettings/MarkdownSettings.d.ts +0 -0
@@ -15,13 +15,13 @@ export default Capability.makeModule(
15
15
  Effect.fnUntraced(function* () {
16
16
  // Persisted state using KVS store.
17
17
  const stateAtom = createKvsStore({
18
- key: `${meta.id}/state`,
18
+ key: `${meta.id}.state`,
19
19
  schema: MarkdownStateSchema,
20
20
  defaultValue: () => ({ viewMode: {} }),
21
21
  });
22
22
 
23
23
  // TODO(wittjosiah): Fold into state.
24
- const editorState = createEditorStateStore(`${meta.id}/editor`);
24
+ const editorState = createEditorStateStore(`${meta.id}.editor`);
25
25
 
26
26
  return [
27
27
  Capability.contributes(MarkdownCapabilities.State, stateAtom),
package/src/cli/plugin.ts CHANGED
@@ -4,7 +4,8 @@
4
4
 
5
5
  import * as Effect from 'effect/Effect';
6
6
 
7
- import { Common, Plugin } from '@dxos/app-framework';
7
+ import { Plugin } from '@dxos/app-framework';
8
+ import { AppPlugin } from '@dxos/app-toolkit';
8
9
  import { type CreateObject } from '@dxos/plugin-space/types';
9
10
  import { Text } from '@dxos/schema';
10
11
 
@@ -14,16 +15,15 @@ import { meta } from '../meta';
14
15
  import { Markdown } from '../types';
15
16
 
16
17
  export const MarkdownPlugin = Plugin.define(meta).pipe(
17
- Common.Plugin.addSchemaModule({ schema: [Markdown.Document, Text.Text] }),
18
- Common.Plugin.addMetadataModule({
18
+ AppPlugin.addMetadataModule({
19
19
  metadata: {
20
20
  id: Markdown.Document.typename,
21
21
  metadata: {
22
22
  createObject: ((props) => Effect.sync(() => Markdown.make(props))) satisfies CreateObject,
23
- addToCollectionOnCreate: true,
24
23
  },
25
24
  },
26
25
  }),
27
- Common.Plugin.addOperationResolverModule({ activate: OperationResolver }),
26
+ AppPlugin.addOperationResolverModule({ activate: OperationResolver }),
27
+ AppPlugin.addSchemaModule({ schema: [Markdown.Document, Text.Text] }),
28
28
  Plugin.make,
29
29
  );
@@ -7,7 +7,7 @@ import React, { forwardRef, useEffect, useImperativeHandle } from 'react';
7
7
  import { createPortal } from 'react-dom';
8
8
  import { useDropzone } from 'react-dropzone';
9
9
 
10
- import { type Common } from '@dxos/app-framework';
10
+ import { type FileInfo } from '@dxos/app-toolkit';
11
11
  import { addLink } from '@dxos/ui-editor';
12
12
 
13
13
  export const IMAGE_FILES = ['.jpg', '.jpeg', '.png', '.gif'];
@@ -16,7 +16,7 @@ export type FileUploadAction = () => void;
16
16
 
17
17
  export type FileUploadProps = {
18
18
  editorView?: EditorView;
19
- onFileUpload?: (file: File) => Promise<Common.FileInfo | undefined>;
19
+ onFileUpload?: (file: File) => Promise<FileInfo | undefined>;
20
20
  };
21
21
 
22
22
  // TODO(burdon): Factor out.
@@ -11,61 +11,64 @@ import { Filter, Obj } from '@dxos/echo';
11
11
  import { ClientPlugin } from '@dxos/plugin-client';
12
12
  import { corePlugins } from '@dxos/plugin-testing';
13
13
  import { useQuery, useSpace } from '@dxos/react-client/echo';
14
- import { withLayout, withTheme } from '@dxos/react-ui/testing';
15
- import { useAttentionAttributes } from '@dxos/react-ui-attention';
14
+ import { Panel } from '@dxos/react-ui';
15
+ import { Loading, withLayout, withTheme } from '@dxos/react-ui/testing';
16
+ import { AttendableContainer } from '@dxos/react-ui-attention';
16
17
  import { translations as editorTranslations } from '@dxos/react-ui-editor';
17
- import { Layout } from '@dxos/react-ui-mosaic';
18
+ import { Text } from '@dxos/schema';
18
19
 
19
20
  import { translations } from '../../translations';
20
21
  import { Markdown } from '../../types';
21
22
 
22
23
  import { MarkdownEditor, type MarkdownEditorRootProps } from './MarkdownEditor';
23
24
 
24
- const content = Array.from({ length: 100 }, (_, i) => `Line ${i + 1}`).join('\n');
25
-
26
25
  type StoryProps = Omit<MarkdownEditorRootProps, 'id' | 'extensions'>;
27
26
 
28
27
  const DefaultStory = (props: StoryProps) => {
29
28
  const space = useSpace();
30
29
  const [doc] = useQuery(space?.db, Filter.type(Markdown.Document));
31
30
  const id = doc && Obj.getDXN(doc).toString();
32
- const attentionAttrs = useAttentionAttributes(id);
33
31
  if (!id) {
34
- return null;
32
+ return <Loading data={{ id }} />;
35
33
  }
36
34
 
37
35
  return (
38
- <div className='contents' {...attentionAttrs}>
39
- <Layout.Main toolbar>
40
- <MarkdownEditor.Root id={id} object={doc} {...props}>
41
- <MarkdownEditor.Toolbar id={id} />
42
- <MarkdownEditor.Content />
43
- </MarkdownEditor.Root>
44
- </Layout.Main>
45
- </div>
36
+ <AttendableContainer id={id} tabIndex={0} classNames='dx-container'>
37
+ <MarkdownEditor.Root id={id} object={doc} {...props}>
38
+ <Panel.Root>
39
+ <Panel.Toolbar asChild>
40
+ <MarkdownEditor.Toolbar />
41
+ </Panel.Toolbar>
42
+ <Panel.Content asChild>
43
+ <MarkdownEditor.Content />
44
+ </Panel.Content>
45
+ </Panel.Root>
46
+ </MarkdownEditor.Root>
47
+ </AttendableContainer>
46
48
  );
47
49
  };
48
50
 
49
51
  const meta: Meta<typeof DefaultStory> = {
50
- title: 'plugins/plugin-markdown/MarkdownEditor',
51
- component: DefaultStory,
52
- render: DefaultStory as any,
52
+ title: 'plugins/plugin-markdown/components/MarkdownEditor',
53
+ render: DefaultStory,
53
54
  decorators: [
54
- withTheme,
55
+ withTheme(),
55
56
  withLayout({ layout: 'column' }),
56
57
  withPluginManager({
57
58
  plugins: [
58
59
  ...corePlugins(),
60
+ // TODO(burdon): Try to write story without ClientPlugin.
59
61
  ClientPlugin({
60
- types: [Markdown.Document],
62
+ types: [Markdown.Document, Text.Text],
61
63
  onClientInitialized: ({ client }) =>
62
64
  Effect.gen(function* () {
63
65
  yield* Effect.promise(() => client.halo.createIdentity());
64
66
  yield* Effect.promise(() => client.spaces.waitUntilReady());
65
67
  const space = client.spaces.default;
66
68
  yield* Effect.promise(() => space.waitUntilReady());
67
-
68
- space.db.add(Markdown.make({ content }));
69
+ space.db.add(
70
+ Markdown.make({ content: Array.from({ length: 100 }, (_, i) => `Line ${i + 1}`).join('\n') }),
71
+ );
69
72
  }),
70
73
  }),
71
74
  ],
@@ -9,7 +9,7 @@ import { createContext } from '@radix-ui/react-context';
9
9
  import React, { type PropsWithChildren, useMemo, useState } from 'react';
10
10
  import { createPortal } from 'react-dom';
11
11
 
12
- import { Surface } from '@dxos/app-framework/react';
12
+ import { Surface } from '@dxos/app-framework/ui';
13
13
  import { DXN } from '@dxos/keys';
14
14
  import { useClient } from '@dxos/react-client';
15
15
  import {
@@ -19,6 +19,7 @@ import {
19
19
  useEditorMenu,
20
20
  useEditorToolbar,
21
21
  } from '@dxos/react-ui-editor';
22
+ import { type ThemedClassName } from '@dxos/react-ui';
22
23
  import { type PreviewBlock, type PreviewOptions } from '@dxos/ui-editor';
23
24
  import { isNonNullable } from '@dxos/util';
24
25
 
@@ -45,6 +46,7 @@ import {
45
46
 
46
47
  type MarkdownEditorContextValue = {
47
48
  id: string;
49
+ attendableId?: string;
48
50
  setEditorView: (view: EditorView) => void;
49
51
  extensions: Extension[];
50
52
  previewBlocks: PreviewBlock[];
@@ -64,14 +66,18 @@ type MarkdownEditorRootProps = PropsWithChildren<
64
66
  {
65
67
  object?: DocumentType;
66
68
  extensions?: Extension[];
67
- } & Pick<MarkdownEditorContextValue, 'id' | 'onAction' | 'onFileUpload' | 'onViewModeChange' | 'viewMode'> &
69
+ } & Pick<
70
+ MarkdownEditorContextValue,
71
+ 'id' | 'attendableId' | 'onAction' | 'onFileUpload' | 'onViewModeChange' | 'viewMode'
72
+ > &
68
73
  Pick<UseEditorMenuOptionsProps, 'slashCommandGroups' | 'onLinkQuery'> &
69
- Pick<ExtensionsOptions, 'editorStateStore' | 'selectionManager' | 'settings'>
74
+ Pick<ExtensionsOptions, 'editorStateStore' | 'selectionManager' | 'settings' | 'onSelectObject'>
70
75
  >;
71
76
 
72
77
  const MarkdownEditorRoot = ({
73
78
  children,
74
79
  id,
80
+ attendableId,
75
81
  object,
76
82
  editorStateStore,
77
83
  selectionManager,
@@ -80,6 +86,7 @@ const MarkdownEditorRoot = ({
80
86
  extensions: extensionsProp,
81
87
  slashCommandGroups,
82
88
  onLinkQuery,
89
+ onSelectObject,
83
90
  ...props
84
91
  }: MarkdownEditorRootProps) => {
85
92
  const [editorView, setEditorView] = useState<EditorView>();
@@ -92,7 +99,7 @@ const MarkdownEditorRoot = ({
92
99
  setPreviewBlocks((prev) => [...prev, block]);
93
100
  },
94
101
  removeBlockContainer: ({ link }) => {
95
- setPreviewBlocks((prev) => prev.filter(({ link: prevLink }) => prevLink.ref !== link.ref));
102
+ setPreviewBlocks((prev) => prev.filter(({ link: prevLink }) => prevLink.dxn !== link.dxn));
96
103
  },
97
104
  }),
98
105
  [],
@@ -118,6 +125,7 @@ const MarkdownEditorRoot = ({
118
125
  selectionManager,
119
126
  settings,
120
127
  viewMode,
128
+ onSelectObject,
121
129
  });
122
130
 
123
131
  const extensions = useMemo(
@@ -128,6 +136,7 @@ const MarkdownEditorRoot = ({
128
136
  return (
129
137
  <MarkdownEditorContextProvider
130
138
  id={id}
139
+ attendableId={attendableId}
131
140
  editorView={editorView}
132
141
  setEditorView={setEditorView}
133
142
  extensions={extensions}
@@ -148,24 +157,28 @@ MarkdownEditorRoot.displayName = 'MarkdownEditor.Root';
148
157
  // MarkdownEditor.Main
149
158
  //
150
159
 
160
+ const MARKDOWN_EDITOR_CONTENT_NAME = 'MarkdownEditor.Content';
161
+
151
162
  type MarkdownEditorContentProps = Omit<NaturalMarkdownEditorContentProps, 'id' | 'extensions' | 'toolbarState'>;
152
163
 
153
164
  const MarkdownEditorContent = (props: MarkdownEditorContentProps) => {
154
165
  const {
155
166
  id,
167
+ attendableId,
156
168
  editorView,
157
169
  setEditorView,
158
170
  viewMode,
159
171
  toolbarState,
160
172
  extensions,
161
173
  popoverMenu: { groupsRef, ...menuProps },
162
- } = useMarkdownEditorContext(MarkdownEditorContent.displayName);
174
+ } = useMarkdownEditorContext(MARKDOWN_EDITOR_CONTENT_NAME);
163
175
 
164
176
  return (
165
177
  <EditorMenuProvider view={editorView} groups={groupsRef.current} {...menuProps}>
166
178
  <NaturalMarkdownEditorContent
167
179
  {...props}
168
180
  id={id}
181
+ attendableId={attendableId}
169
182
  viewMode={viewMode}
170
183
  toolbarState={toolbarState}
171
184
  extensions={extensions}
@@ -175,52 +188,66 @@ const MarkdownEditorContent = (props: MarkdownEditorContentProps) => {
175
188
  );
176
189
  };
177
190
 
178
- MarkdownEditorContent.displayName = 'MarkdownEditor.Content';
191
+ MarkdownEditorContent.displayName = MARKDOWN_EDITOR_CONTENT_NAME;
179
192
 
180
193
  //
181
194
  // MarkdownEditor.Toolbar
182
195
  //
183
196
 
184
- type MarkdownEditorToolbarProps = Omit<
185
- NaturalMarkdownToolbarProps,
186
- 'state' | 'editorView' | 'onAction' | 'onFileUpload' | 'onViewModeChange'
197
+ const MARKDOWN_EDITOR_TOOLBAR_NAME = 'MarkdownEditor.Toolbar';
198
+
199
+ type MarkdownEditorToolbarProps = ThemedClassName<
200
+ Omit<NaturalMarkdownToolbarProps, 'state' | 'editorView' | 'onAction' | 'onFileUpload' | 'onViewModeChange' | 'id'>
187
201
  >;
188
202
 
189
203
  const MarkdownEditorToolbar = (props: MarkdownEditorToolbarProps) => {
190
- const { toolbarState, ...rootProps } = useMarkdownEditorContext(MarkdownEditorToolbar.displayName);
204
+ const { id, attendableId, editorView, toolbarState, onAction, onFileUpload, onViewModeChange } =
205
+ useMarkdownEditorContext(MARKDOWN_EDITOR_TOOLBAR_NAME);
191
206
 
192
- return <NaturalMarkdownToolbar {...props} {...rootProps} state={toolbarState} />;
207
+ return (
208
+ <NaturalMarkdownToolbar
209
+ {...props}
210
+ id={attendableId ?? id}
211
+ editorView={editorView}
212
+ state={toolbarState}
213
+ onAction={onAction}
214
+ onFileUpload={onFileUpload}
215
+ onViewModeChange={onViewModeChange}
216
+ />
217
+ );
193
218
  };
194
219
 
195
- MarkdownEditorToolbar.displayName = 'MarkdownEditor.Toolbar';
220
+ MarkdownEditorToolbar.displayName = MARKDOWN_EDITOR_TOOLBAR_NAME;
196
221
 
197
222
  //
198
223
  // MarkdownEditor.Blocks (embedded objects)
199
224
  //
200
225
 
226
+ const MARKDOWN_EDITOR_BLOCKS_NAME = 'MarkdownEditor.Blocks';
227
+
201
228
  type MarkdownEditorBlocksProps = {};
202
229
 
203
230
  const MarkdownEditorBlocks = (_props: MarkdownEditorBlocksProps) => {
204
- const { previewBlocks } = useMarkdownEditorContext(MarkdownEditorBlocks.displayName);
231
+ const { previewBlocks } = useMarkdownEditorContext(MARKDOWN_EDITOR_BLOCKS_NAME);
205
232
 
206
233
  return (
207
234
  <>
208
235
  {previewBlocks.map(({ link, el }) => (
209
- <PreviewBlock key={link.ref} link={link} el={el} />
236
+ <PreviewBlock key={link.dxn} link={link} el={el} />
210
237
  ))}
211
238
  </>
212
239
  );
213
240
  };
214
241
 
215
- MarkdownEditorBlocks.displayName = 'MarkdownEditor.Blocks';
242
+ MarkdownEditorBlocks.displayName = MARKDOWN_EDITOR_BLOCKS_NAME;
216
243
 
217
244
  const PreviewBlock = ({ el, link }: PreviewBlock) => {
218
245
  const client = useClient();
219
- const dxn = DXN.parse(link.ref);
246
+ const dxn = DXN.parse(link.dxn);
220
247
  const subject = client.graph.makeRef(dxn).target;
221
248
  const data = useMemo(() => ({ subject }), [subject]);
222
249
 
223
- return createPortal(<Surface role='card--transclusion' data={data} limit={1} />, el);
250
+ return createPortal(<Surface.Surface role='card--content' data={data} limit={1} />, el);
224
251
  };
225
252
 
226
253
  //
@@ -37,6 +37,7 @@ import { type MarkdownEditorToolbarProps } from './MarkdownEditorToolbar';
37
37
 
38
38
  export type MarkdownEditorContentProps = ThemedClassName<{
39
39
  id: string;
40
+ attendableId?: string;
40
41
  role?: string;
41
42
  viewMode?: EditorViewMode;
42
43
  scrollPastEnd?: boolean;
@@ -45,7 +46,6 @@ export type MarkdownEditorContentProps = ThemedClassName<{
45
46
  toolbarState?: Atom.Writable<EditorToolbarState>;
46
47
  onLinkQuery?: (query?: string) => Promise<EditorMenuGroup[]>;
47
48
  }> &
48
- // prettier-ignore
49
49
  Pick<UseTextEditorProps, 'initialValue' | 'extensions'> &
50
50
  Pick<MarkdownEditorToolbarProps, 'onFileUpload'> &
51
51
  Pick<ThemeExtensionsOptions, 'slots'>;
@@ -55,6 +55,7 @@ export const MarkdownEditorContent = forwardRef<EditorView | null, MarkdownEdito
55
55
  {
56
56
  classNames,
57
57
  id,
58
+ attendableId,
58
59
  role,
59
60
  viewMode,
60
61
  initialValue,
@@ -133,18 +134,18 @@ export const MarkdownEditorContent = forwardRef<EditorView | null, MarkdownEdito
133
134
 
134
135
  useImperativeHandle<EditorView | null, EditorView | null>(forwardedRef, () => editorView, [editorView]);
135
136
 
136
- useSelectCurrentThread(editorView, id);
137
+ useSelectCurrentThread(editorView, id, attendableId ?? id);
137
138
 
138
139
  useTest(editorView);
139
140
 
140
141
  return (
141
142
  <div
143
+ {...focusAttributes}
142
144
  role='none'
143
- ref={parentRef}
144
145
  data-testid='composer.markdownRoot'
145
- className={mx(stackItemContentEditorClassNames(role), classNames)}
146
146
  data-popover-collision-boundary={true}
147
- {...focusAttributes}
147
+ className={mx(stackItemContentEditorClassNames(role), classNames)}
148
+ ref={parentRef}
148
149
  />
149
150
  );
150
151
  },
@@ -3,26 +3,25 @@
3
3
  //
4
4
 
5
5
  import { type EditorView } from '@codemirror/view';
6
- import React, { useCallback, useState } from 'react';
6
+ import React, { type ComponentPropsWithoutRef, useCallback, useState } from 'react';
7
7
 
8
- import { type Common } from '@dxos/app-framework';
8
+ import { type FileInfo } from '@dxos/app-toolkit';
9
9
  import { invariant } from '@dxos/invariant';
10
10
  import { type ThemedClassName } from '@dxos/react-ui';
11
11
  import { EditorToolbar, type EditorToolbarProps } from '@dxos/react-ui-editor';
12
- import { type EditorViewMode } from '@dxos/ui-editor';
13
12
 
14
13
  import { FileUpload, type FileUploadAction } from './FileUpload';
14
+ import { composableProps } from '@dxos/ui-theme';
15
15
 
16
16
  export type MarkdownEditorToolbarProps = ThemedClassName<
17
- {
17
+ ComponentPropsWithoutRef<'div'> & {
18
18
  id: string;
19
19
  editorView?: EditorView;
20
- onFileUpload?: (file: File) => Promise<Common.FileInfo | undefined>;
20
+ onFileUpload?: (file: File) => Promise<FileInfo | undefined>;
21
21
  } & Pick<EditorToolbarProps, 'role' | 'state' | 'customActions' | 'onAction' | 'onViewModeChange'>
22
22
  >;
23
23
 
24
24
  export const MarkdownEditorToolbar = ({
25
- classNames,
26
25
  id,
27
26
  role,
28
27
  state,
@@ -31,25 +30,26 @@ export const MarkdownEditorToolbar = ({
31
30
  onAction,
32
31
  onFileUpload,
33
32
  onViewModeChange,
33
+ ...props
34
34
  }: MarkdownEditorToolbarProps) => {
35
+ const { className, ...rest } = composableProps(props);
35
36
  const [upload, setUpload] = useState<FileUploadAction | null>(null);
36
37
  const uploadRef = useCallback((next: FileUploadAction) => setUpload(() => next), []);
37
38
 
38
- const handleViewModeChange = useCallback((mode: EditorViewMode) => onViewModeChange?.(mode), [onViewModeChange]);
39
-
40
39
  const getView = useCallback(() => {
41
40
  invariant(editorView);
42
41
  return editorView;
43
42
  }, [editorView]);
44
43
 
45
44
  if (!editorView) {
46
- return <div />;
45
+ return <div className={className} {...rest} />;
47
46
  }
48
47
 
49
48
  return (
50
- <>
49
+ <div role='none' className='contents'>
51
50
  <EditorToolbar
52
- classNames={classNames}
51
+ {...rest}
52
+ classNames={className}
53
53
  attendableId={id}
54
54
  role={role}
55
55
  state={state}
@@ -57,10 +57,10 @@ export const MarkdownEditorToolbar = ({
57
57
  getView={getView}
58
58
  onAction={onAction}
59
59
  onImageUpload={upload ?? undefined}
60
- onViewModeChange={handleViewModeChange}
60
+ onViewModeChange={onViewModeChange}
61
61
  />
62
62
 
63
63
  {onFileUpload && <FileUpload ref={uploadRef} editorView={editorView} onFileUpload={onFileUpload} />}
64
- </>
64
+ </div>
65
65
  );
66
66
  };
@@ -1,17 +1,5 @@
1
1
  //
2
- // Copyright 2023 DXOS.org
2
+ // Copyright 2025 DXOS.org
3
3
  //
4
4
 
5
- import { type LazyExoticComponent, lazy } from 'react';
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';
12
- export * from './MarkdownSettings';
13
-
14
- export const MarkdownCard: LazyExoticComponent<typeof MarkdownCardType> = lazy(() => import('./MarkdownCard'));
15
- export const MarkdownContainer: LazyExoticComponent<typeof MarkdownContainerType> = lazy(
16
- () => import('./MarkdownContainer'),
17
- );
5
+ export * from './MarkdownEditor';
@@ -5,10 +5,13 @@
5
5
  import { type Meta, type StoryObj } from '@storybook/react-vite';
6
6
  import React, { useMemo } from 'react';
7
7
 
8
- import { OperationPlugin } from '@dxos/app-framework';
8
+ import { OperationPlugin, RuntimePlugin } from '@dxos/app-framework';
9
9
  import { withPluginManager } from '@dxos/app-framework/testing';
10
+ import { Obj } from '@dxos/echo';
11
+ import { ClientPlugin } from '@dxos/plugin-client';
10
12
  import { Markdown } from '@dxos/plugin-markdown/types';
11
13
  import { faker } from '@dxos/random';
14
+ import { Card } from '@dxos/react-ui';
12
15
  import { withTheme } from '@dxos/react-ui/testing';
13
16
  import { CardContainer } from '@dxos/react-ui-mosaic/testing';
14
17
 
@@ -18,30 +21,37 @@ import { MarkdownCard, type MarkdownCardProps } from './MarkdownCard';
18
21
 
19
22
  faker.seed(1234);
20
23
 
21
- // TODO(wittjosiah): ECHO objects don't work when passed via Storybook args.
22
24
  const MarkdownCardStory = ({ ...args }: Omit<MarkdownCardProps, 'subject'>) => {
23
25
  const subject = useMemo(
24
26
  () =>
25
27
  Markdown.make({
26
28
  name: faker.lorem.words(3),
27
- content: faker.lorem.paragraphs(3),
29
+ content: faker.lorem.paragraphs(5),
28
30
  }),
29
31
  [],
30
32
  );
33
+
31
34
  return (
32
35
  <CardContainer icon='ph--text-aa--regular'>
33
- <MarkdownCard subject={subject} {...args} />
36
+ <Card.Root border={false}>
37
+ <Card.Toolbar>
38
+ <Card.DragHandle />
39
+ <Card.Title>{Obj.getLabel(subject)}</Card.Title>
40
+ <Card.Menu />
41
+ </Card.Toolbar>
42
+ <MarkdownCard subject={subject} {...args} />
43
+ </Card.Root>
34
44
  </CardContainer>
35
45
  );
36
46
  };
37
47
 
38
48
  const meta: Meta<typeof MarkdownCardStory> = {
39
- title: 'plugins/plugin-markdown/Card',
49
+ title: 'plugins/plugin-markdown/containers/MarkdownCard',
40
50
  component: MarkdownCardStory,
41
51
  decorators: [
42
- withTheme,
52
+ withTheme(),
43
53
  withPluginManager({
44
- plugins: [OperationPlugin()],
54
+ plugins: [OperationPlugin(), RuntimePlugin(), ClientPlugin({})],
45
55
  }),
46
56
  ],
47
57
  parameters: {
@@ -6,13 +6,13 @@ import React, { useMemo } from 'react';
6
6
 
7
7
  import { Obj } from '@dxos/echo';
8
8
  import { useTranslation } from '@dxos/react-ui';
9
- import { Card } from '@dxos/react-ui-mosaic';
9
+ import { Card } from '@dxos/react-ui';
10
10
  import { Text } from '@dxos/schema';
11
11
 
12
+ import { MarkdownEditor } from '../../components';
12
13
  import { meta } from '../../meta';
13
14
  import { Markdown } from '../../types';
14
- import { getContentSnippet, getFallbackName } from '../../util';
15
- import { MarkdownEditor } from '../MarkdownEditor';
15
+ import { getContentSnippet } from '../../util';
16
16
 
17
17
  export type MarkdownCardProps = { subject: Markdown.Document | Text.Text };
18
18
 
@@ -24,41 +24,38 @@ export const MarkdownCard = ({ subject }: MarkdownCardProps) => {
24
24
  return (
25
25
  <Card.Content>
26
26
  {snippet && (
27
- <Card.Row className='max-h-[300px] overflow-hidden'>
27
+ <Card.Section>
28
28
  <MarkdownEditor.Root id={subject.id} viewMode='readonly'>
29
- <MarkdownEditor.Content initialValue={snippet} slots={{}} classNames='!bg-transparent' />
29
+ <MarkdownEditor.Content
30
+ initialValue={snippet}
31
+ classNames='bg-transparent'
32
+ slots={{
33
+ editor: { className: 'max-h-[240px]' },
34
+ }}
35
+ />
30
36
  </MarkdownEditor.Root>
31
- </Card.Row>
37
+ </Card.Section>
32
38
  )}
33
- <Card.Row>
39
+ <Card.Section>
34
40
  <Card.Text classNames='text-xs text-description'>
35
41
  {info.words} {t('words label', { count: info.words })}
36
42
  </Card.Text>
37
- </Card.Row>
43
+ </Card.Section>
38
44
  </Card.Content>
39
45
  );
40
46
  };
41
47
 
42
- const getInfo = (subject: Markdown.Document | Text.Text) => {
43
- const text = (Obj.instanceOf(Markdown.Document, subject) ? subject.content?.target?.content : subject.content) ?? '';
44
- return { words: text.split(' ').length };
45
- };
48
+ const MAX_LINES = 5;
46
49
 
47
- // TODO(burdon): Factor out.
48
- const getTitle = (subject: Markdown.Document | Text.Text, fallback: string) => {
50
+ const getSnippet = (subject: Markdown.Document | Text.Text, fallback?: string) => {
49
51
  if (Obj.instanceOf(Markdown.Document, subject)) {
50
- const title = Obj.getLabel(subject);
51
- return title ?? getFallbackName(subject.content?.target?.content ?? fallback);
52
+ return Obj.getDescription(subject) || getContentSnippet(subject.content?.target?.content ?? fallback, MAX_LINES);
52
53
  } else if (Obj.instanceOf(Text.Text, subject)) {
53
- return getFallbackName(subject.content);
54
+ return getContentSnippet(subject.content ?? fallback, MAX_LINES);
54
55
  }
55
56
  };
56
57
 
57
- // TODO(burdon): Factor out.
58
- const getSnippet = (subject: Markdown.Document | Text.Text, fallback?: string) => {
59
- if (Obj.instanceOf(Markdown.Document, subject)) {
60
- return Obj.getDescription(subject) || getContentSnippet(subject.content?.target?.content ?? fallback);
61
- } else if (Obj.instanceOf(Text.Text, subject)) {
62
- return getContentSnippet(subject.content ?? fallback);
63
- }
58
+ const getInfo = (subject: Markdown.Document | Text.Text) => {
59
+ const text = (Obj.instanceOf(Markdown.Document, subject) ? subject.content?.target?.content : subject.content) ?? '';
60
+ return { words: text.split(' ').length };
64
61
  };
@@ -4,6 +4,4 @@
4
4
 
5
5
  import { MarkdownCard } from './MarkdownCard';
6
6
 
7
- export * from './MarkdownCard';
8
-
9
7
  export default MarkdownCard;