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

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 (404) hide show
  1. package/dist/lib/neutral/EditableMarkdownCard-P4F4TIUM.mjs +32 -0
  2. package/dist/lib/neutral/EditableMarkdownCard-P4F4TIUM.mjs.map +7 -0
  3. package/dist/lib/neutral/MarkdownCard-INMBLUL4.mjs +102 -0
  4. package/dist/lib/neutral/MarkdownCard-INMBLUL4.mjs.map +7 -0
  5. package/dist/lib/neutral/MarkdownContainer-2BDGD3PL.mjs +126 -0
  6. package/dist/lib/neutral/MarkdownContainer-2BDGD3PL.mjs.map +7 -0
  7. package/dist/lib/neutral/MarkdownPlugin.mjs +58 -0
  8. package/dist/lib/neutral/MarkdownPlugin.mjs.map +7 -0
  9. package/dist/lib/neutral/MarkdownPlugin.node.mjs +25 -0
  10. package/dist/lib/neutral/MarkdownPlugin.node.mjs.map +7 -0
  11. package/dist/lib/neutral/MarkdownSettings-YCTZJL5V.mjs +32 -0
  12. package/dist/lib/neutral/MarkdownSettings-YCTZJL5V.mjs.map +7 -0
  13. package/dist/lib/{browser/anchor-sort-3MYLO74J.mjs → neutral/anchor-sort-L4VCKDO6.mjs} +9 -9
  14. package/dist/lib/neutral/anchor-sort-L4VCKDO6.mjs.map +7 -0
  15. package/dist/lib/neutral/app-graph-serializer-3XFKP4ER.mjs +56 -0
  16. package/dist/lib/neutral/app-graph-serializer-3XFKP4ER.mjs.map +7 -0
  17. package/dist/lib/neutral/blueprint-definition-33OK2KUL.mjs +15 -0
  18. package/dist/lib/neutral/blueprint-definition-33OK2KUL.mjs.map +7 -0
  19. package/dist/lib/neutral/blueprints/index.mjs +8 -0
  20. package/dist/lib/neutral/capabilities/index.mjs +25 -0
  21. package/dist/lib/neutral/capabilities/index.mjs.map +7 -0
  22. package/dist/lib/neutral/capabilities/node.mjs +11 -0
  23. package/dist/lib/neutral/capabilities/node.mjs.map +7 -0
  24. package/dist/lib/{browser/chunk-BQTYJOFB.mjs → neutral/chunk-3LYCPEVP.mjs} +2 -9
  25. package/dist/lib/neutral/chunk-3LYCPEVP.mjs.map +7 -0
  26. package/dist/lib/neutral/chunk-6N7AD3IU.mjs +8 -0
  27. package/dist/lib/neutral/chunk-6N7AD3IU.mjs.map +7 -0
  28. package/dist/lib/neutral/chunk-J5LGTIGS.mjs +10 -0
  29. package/dist/lib/{browser/chunk-KPH4ZPQN.mjs → neutral/chunk-KDN4GKG2.mjs} +8 -9
  30. package/dist/lib/neutral/chunk-KDN4GKG2.mjs.map +7 -0
  31. package/dist/lib/neutral/chunk-LXNSKCPD.mjs +44 -0
  32. package/dist/lib/neutral/chunk-LXNSKCPD.mjs.map +7 -0
  33. package/dist/lib/neutral/chunk-SOLAMEK3.mjs +276 -0
  34. package/dist/lib/neutral/chunk-SOLAMEK3.mjs.map +7 -0
  35. package/dist/lib/neutral/comment-config-7VTHRUIZ.mjs +30 -0
  36. package/dist/lib/neutral/comment-config-7VTHRUIZ.mjs.map +7 -0
  37. package/dist/lib/neutral/components/index.mjs +370 -0
  38. package/dist/lib/neutral/components/index.mjs.map +7 -0
  39. package/dist/lib/neutral/containers/index.mjs +13 -0
  40. package/dist/lib/neutral/containers/index.mjs.map +7 -0
  41. package/dist/lib/neutral/create-3PGJ2NEK.mjs +28 -0
  42. package/dist/lib/neutral/create-3PGJ2NEK.mjs.map +7 -0
  43. package/dist/lib/neutral/create-markdown-5LS46GMH.mjs +20 -0
  44. package/dist/lib/neutral/create-markdown-5LS46GMH.mjs.map +7 -0
  45. package/dist/lib/neutral/create-object-ZA6VXLJJ.mjs +27 -0
  46. package/dist/lib/neutral/create-object-ZA6VXLJJ.mjs.map +7 -0
  47. package/dist/lib/neutral/hooks/index.mjs +322 -0
  48. package/dist/lib/neutral/hooks/index.mjs.map +7 -0
  49. package/dist/lib/neutral/index.mjs +42 -0
  50. package/dist/lib/neutral/meta.json +1 -0
  51. package/dist/lib/neutral/meta.mjs +8 -0
  52. package/dist/lib/neutral/open-WCYGBLAG.mjs +20 -0
  53. package/dist/lib/neutral/open-WCYGBLAG.mjs.map +7 -0
  54. package/dist/lib/neutral/operation-handler-2ARMPBGZ.mjs +13 -0
  55. package/dist/lib/neutral/operation-handler-2ARMPBGZ.mjs.map +7 -0
  56. package/dist/lib/neutral/operations/index.mjs +8 -0
  57. package/dist/lib/neutral/plugin.mjs +16 -0
  58. package/dist/lib/neutral/plugin.mjs.map +7 -0
  59. package/dist/lib/neutral/react-surface-TB4TY57T.mjs +119 -0
  60. package/dist/lib/neutral/react-surface-TB4TY57T.mjs.map +7 -0
  61. package/dist/lib/neutral/scroll-to-anchor-6FIOKVKT.mjs +47 -0
  62. package/dist/lib/neutral/scroll-to-anchor-6FIOKVKT.mjs.map +7 -0
  63. package/dist/lib/neutral/set-view-mode-37RSPFEN.mjs +24 -0
  64. package/dist/lib/neutral/set-view-mode-37RSPFEN.mjs.map +7 -0
  65. package/dist/lib/neutral/settings-TDGDLCUR.mjs +34 -0
  66. package/dist/lib/neutral/settings-TDGDLCUR.mjs.map +7 -0
  67. package/dist/lib/neutral/state-5COCF5PN.mjs +44 -0
  68. package/dist/lib/neutral/state-5COCF5PN.mjs.map +7 -0
  69. package/dist/lib/neutral/testing.mjs +20 -0
  70. package/dist/lib/neutral/testing.mjs.map +7 -0
  71. package/dist/lib/neutral/translations.mjs +43 -0
  72. package/dist/lib/neutral/translations.mjs.map +7 -0
  73. package/dist/lib/neutral/types/index.mjs +16 -0
  74. package/dist/lib/neutral/update-markdown-5EDRD3SH.mjs +44 -0
  75. package/dist/lib/neutral/update-markdown-5EDRD3SH.mjs.map +7 -0
  76. package/dist/types/src/MarkdownPlugin.d.ts +3 -1
  77. package/dist/types/src/MarkdownPlugin.d.ts.map +1 -1
  78. package/dist/types/src/MarkdownPlugin.node.d.ts +4 -0
  79. package/dist/types/src/MarkdownPlugin.node.d.ts.map +1 -0
  80. package/dist/types/src/MarkdownPlugin.test.d.ts +2 -0
  81. package/dist/types/src/MarkdownPlugin.test.d.ts.map +1 -0
  82. package/dist/types/src/blueprints/index.d.ts +2 -0
  83. package/dist/types/src/blueprints/index.d.ts.map +1 -0
  84. package/dist/types/src/blueprints/markdown-blueprint.d.ts +4 -0
  85. package/dist/types/src/blueprints/markdown-blueprint.d.ts.map +1 -0
  86. package/dist/types/src/capabilities/anchor-sort.d.ts +4 -2
  87. package/dist/types/src/capabilities/anchor-sort.d.ts.map +1 -1
  88. package/dist/types/src/capabilities/app-graph-serializer.d.ts +3 -2
  89. package/dist/types/src/capabilities/app-graph-serializer.d.ts.map +1 -1
  90. package/dist/types/src/capabilities/artifact-definition.d.ts +3 -1
  91. package/dist/types/src/capabilities/artifact-definition.d.ts.map +1 -1
  92. package/dist/types/src/capabilities/blueprint-definition.d.ts +5 -6
  93. package/dist/types/src/capabilities/blueprint-definition.d.ts.map +1 -1
  94. package/dist/types/src/capabilities/comment-config.d.ts +12 -0
  95. package/dist/types/src/capabilities/comment-config.d.ts.map +1 -0
  96. package/dist/types/src/capabilities/create-object.d.ts +11 -0
  97. package/dist/types/src/capabilities/create-object.d.ts.map +1 -0
  98. package/dist/types/src/capabilities/index.d.ts +22 -14
  99. package/dist/types/src/capabilities/index.d.ts.map +1 -1
  100. package/dist/types/src/capabilities/node.d.ts +10 -0
  101. package/dist/types/src/capabilities/node.d.ts.map +1 -0
  102. package/dist/types/src/capabilities/operation-handler.d.ts +6 -0
  103. package/dist/types/src/capabilities/operation-handler.d.ts.map +1 -0
  104. package/dist/types/src/capabilities/react-surface.d.ts +3 -2
  105. package/dist/types/src/capabilities/react-surface.d.ts.map +1 -1
  106. package/dist/types/src/capabilities/settings.d.ts +4 -2
  107. package/dist/types/src/capabilities/settings.d.ts.map +1 -1
  108. package/dist/types/src/capabilities/state.d.ts +4 -9
  109. package/dist/types/src/capabilities/state.d.ts.map +1 -1
  110. package/dist/types/src/components/MarkdownEditor/FileUpload.d.ts +1 -1
  111. package/dist/types/src/components/MarkdownEditor/FileUpload.d.ts.map +1 -1
  112. package/dist/types/src/components/MarkdownEditor/MarkdownEditor.d.ts +34 -22
  113. package/dist/types/src/components/MarkdownEditor/MarkdownEditor.d.ts.map +1 -1
  114. package/dist/types/src/components/MarkdownEditor/MarkdownEditor.stories.d.ts +3 -3
  115. package/dist/types/src/components/MarkdownEditor/MarkdownEditor.stories.d.ts.map +1 -1
  116. package/dist/types/src/components/MarkdownEditor/MarkdownEditorContent.d.ts +11 -7
  117. package/dist/types/src/components/MarkdownEditor/MarkdownEditorContent.d.ts.map +1 -1
  118. package/dist/types/src/components/MarkdownEditor/MarkdownEditorToolbar.d.ts +6 -5
  119. package/dist/types/src/components/MarkdownEditor/MarkdownEditorToolbar.d.ts.map +1 -1
  120. package/dist/types/src/components/MarkdownSettings/MarkdownSettings.d.ts +4 -4
  121. package/dist/types/src/components/MarkdownSettings/MarkdownSettings.d.ts.map +1 -1
  122. package/dist/types/src/components/MarkdownSettings/MarkdownSettings.stories.d.ts +94 -0
  123. package/dist/types/src/components/MarkdownSettings/MarkdownSettings.stories.d.ts.map +1 -0
  124. package/dist/types/src/components/MarkdownSettings/index.d.ts +1 -1
  125. package/dist/types/src/components/MarkdownSettings/index.d.ts.map +1 -1
  126. package/dist/types/src/components/index.d.ts +3 -8
  127. package/dist/types/src/components/index.d.ts.map +1 -1
  128. package/dist/types/src/containers/EditableMarkdownCard/EditableMarkdownCard.d.ts +15 -0
  129. package/dist/types/src/containers/EditableMarkdownCard/EditableMarkdownCard.d.ts.map +1 -0
  130. package/dist/types/src/containers/EditableMarkdownCard/index.d.ts +3 -0
  131. package/dist/types/src/containers/EditableMarkdownCard/index.d.ts.map +1 -0
  132. package/dist/types/src/containers/MarkdownCard/MarkdownCard.d.ts +8 -0
  133. package/dist/types/src/containers/MarkdownCard/MarkdownCard.d.ts.map +1 -0
  134. package/dist/types/src/containers/MarkdownCard/MarkdownCard.stories.d.ts +9 -0
  135. package/dist/types/src/containers/MarkdownCard/MarkdownCard.stories.d.ts.map +1 -0
  136. package/dist/types/src/containers/MarkdownCard/index.d.ts +2 -0
  137. package/dist/types/src/containers/MarkdownCard/index.d.ts.map +1 -0
  138. package/dist/types/src/containers/MarkdownCard/snippet.d.ts +17 -0
  139. package/dist/types/src/containers/MarkdownCard/snippet.d.ts.map +1 -0
  140. package/dist/types/src/containers/MarkdownContainer/MarkdownContainer.d.ts +36 -0
  141. package/dist/types/src/containers/MarkdownContainer/MarkdownContainer.d.ts.map +1 -0
  142. package/dist/types/src/containers/MarkdownContainer/MarkdownContainer.stories.d.ts +97 -0
  143. package/dist/types/src/containers/MarkdownContainer/MarkdownContainer.stories.d.ts.map +1 -0
  144. package/dist/types/src/containers/MarkdownContainer/index.d.ts +3 -0
  145. package/dist/types/src/containers/MarkdownContainer/index.d.ts.map +1 -0
  146. package/dist/types/src/containers/index.d.ts +6 -0
  147. package/dist/types/src/containers/index.d.ts.map +1 -0
  148. package/dist/types/src/hooks/index.d.ts +0 -1
  149. package/dist/types/src/hooks/index.d.ts.map +1 -1
  150. package/dist/types/src/hooks/useEditorMenuOptions.d.ts.map +1 -1
  151. package/dist/types/src/hooks/useExtensions.d.ts +10 -6
  152. package/dist/types/src/hooks/useExtensions.d.ts.map +1 -1
  153. package/dist/types/src/hooks/useLinkQuery.d.ts +2 -2
  154. package/dist/types/src/hooks/useLinkQuery.d.ts.map +1 -1
  155. package/dist/types/src/index.d.ts +2 -3
  156. package/dist/types/src/index.d.ts.map +1 -1
  157. package/dist/types/src/meta.d.ts +2 -2
  158. package/dist/types/src/meta.d.ts.map +1 -1
  159. package/dist/types/src/operations/create-markdown.d.ts +5 -0
  160. package/dist/types/src/operations/create-markdown.d.ts.map +1 -0
  161. package/dist/types/src/operations/create.d.ts +5 -0
  162. package/dist/types/src/operations/create.d.ts.map +1 -0
  163. package/dist/types/src/operations/create.test.d.ts.map +1 -0
  164. package/dist/types/src/operations/index.d.ts +3 -0
  165. package/dist/types/src/operations/index.d.ts.map +1 -0
  166. package/dist/types/src/operations/open.d.ts +5 -0
  167. package/dist/types/src/operations/open.d.ts.map +1 -0
  168. package/dist/types/src/operations/scroll-to-anchor.d.ts +5 -0
  169. package/dist/types/src/operations/scroll-to-anchor.d.ts.map +1 -0
  170. package/dist/types/src/operations/set-view-mode.d.ts +5 -0
  171. package/dist/types/src/operations/set-view-mode.d.ts.map +1 -0
  172. package/dist/types/src/operations/update-markdown.d.ts +5 -0
  173. package/dist/types/src/operations/update-markdown.d.ts.map +1 -0
  174. package/dist/types/src/operations/update.test.d.ts.map +1 -0
  175. package/dist/types/src/plugin.d.ts +4 -0
  176. package/dist/types/src/plugin.d.ts.map +1 -0
  177. package/dist/types/src/testing.d.ts.map +1 -1
  178. package/dist/types/src/translations.d.ts +74 -37
  179. package/dist/types/src/translations.d.ts.map +1 -1
  180. package/dist/types/src/types/Markdown.d.ts +28 -28
  181. package/dist/types/src/types/Markdown.d.ts.map +1 -1
  182. package/dist/types/src/types/MarkdownCapabilities.d.ts +32 -0
  183. package/dist/types/src/types/MarkdownCapabilities.d.ts.map +1 -0
  184. package/dist/types/src/types/MarkdownEvents.d.ts +3 -0
  185. package/dist/types/src/types/MarkdownEvents.d.ts.map +1 -0
  186. package/dist/types/src/types/MarkdownOperation.d.ts +64 -0
  187. package/dist/types/src/types/MarkdownOperation.d.ts.map +1 -0
  188. package/dist/types/src/types/Settings.d.ts +17 -0
  189. package/dist/types/src/types/Settings.d.ts.map +1 -0
  190. package/dist/types/src/types/index.d.ts +5 -2
  191. package/dist/types/src/types/index.d.ts.map +1 -1
  192. package/dist/types/src/types/types.d.ts +3 -2
  193. package/dist/types/src/types/types.d.ts.map +1 -1
  194. package/dist/types/src/util.d.ts +3 -3
  195. package/dist/types/src/util.d.ts.map +1 -1
  196. package/dist/types/tsconfig.tsbuildinfo +1 -1
  197. package/package.json +147 -85
  198. package/src/MarkdownPlugin.node.ts +20 -0
  199. package/src/MarkdownPlugin.test.ts +26 -0
  200. package/src/MarkdownPlugin.tsx +33 -85
  201. package/src/blueprints/index.ts +5 -0
  202. package/src/blueprints/markdown-blueprint.ts +43 -0
  203. package/src/capabilities/anchor-sort.ts +26 -20
  204. package/src/capabilities/app-graph-serializer.ts +52 -42
  205. package/src/capabilities/artifact-definition.ts +82 -84
  206. package/src/capabilities/blueprint-definition.ts +11 -35
  207. package/src/capabilities/comment-config.ts +32 -0
  208. package/src/capabilities/create-object.ts +30 -0
  209. package/src/capabilities/index.ts +15 -11
  210. package/src/capabilities/node.ts +13 -0
  211. package/src/capabilities/operation-handler.ts +16 -0
  212. package/src/capabilities/react-surface.tsx +112 -82
  213. package/src/capabilities/settings.ts +30 -18
  214. package/src/capabilities/state.ts +41 -25
  215. package/src/components/MarkdownEditor/FileUpload.tsx +2 -2
  216. package/src/components/MarkdownEditor/MarkdownEditor.stories.tsx +47 -43
  217. package/src/components/MarkdownEditor/MarkdownEditor.tsx +146 -103
  218. package/src/components/MarkdownEditor/MarkdownEditorContent.tsx +49 -32
  219. package/src/components/MarkdownEditor/MarkdownEditorToolbar.tsx +37 -53
  220. package/src/components/MarkdownSettings/MarkdownSettings.stories.tsx +40 -0
  221. package/src/components/MarkdownSettings/MarkdownSettings.tsx +23 -96
  222. package/src/components/MarkdownSettings/index.ts +1 -1
  223. package/src/components/index.ts +4 -12
  224. package/src/containers/EditableMarkdownCard/EditableMarkdownCard.tsx +42 -0
  225. package/src/containers/EditableMarkdownCard/index.ts +6 -0
  226. package/src/containers/MarkdownCard/MarkdownCard.stories.tsx +68 -0
  227. package/src/containers/MarkdownCard/MarkdownCard.tsx +67 -0
  228. package/src/containers/MarkdownCard/index.ts +5 -0
  229. package/src/containers/MarkdownCard/snippet.ts +54 -0
  230. package/src/containers/MarkdownContainer/MarkdownContainer.stories.tsx +135 -0
  231. package/src/containers/MarkdownContainer/MarkdownContainer.tsx +146 -0
  232. package/src/containers/MarkdownContainer/index.ts +6 -0
  233. package/src/containers/index.ts +11 -0
  234. package/src/hooks/index.ts +0 -1
  235. package/src/hooks/useEditorMenuOptions.ts +11 -14
  236. package/src/hooks/useExtensions.tsx +95 -112
  237. package/src/hooks/useLinkQuery.ts +42 -33
  238. package/src/index.ts +2 -5
  239. package/src/meta.ts +3 -3
  240. package/src/operations/create-markdown.ts +19 -0
  241. package/src/operations/create.conversations.json +1 -0
  242. package/src/operations/create.test.ts +97 -0
  243. package/src/operations/create.ts +26 -0
  244. package/src/operations/index.ts +14 -0
  245. package/src/operations/open.ts +25 -0
  246. package/src/operations/scroll-to-anchor.ts +38 -0
  247. package/src/operations/set-view-mode.ts +23 -0
  248. package/src/operations/update-markdown.ts +51 -0
  249. package/src/operations/update.conversations.json +1 -0
  250. package/src/operations/update.test.ts +214 -0
  251. package/src/plugin.ts +11 -0
  252. package/src/testing.ts +2 -2
  253. package/src/translations.ts +26 -36
  254. package/src/types/Markdown.ts +24 -26
  255. package/src/types/MarkdownCapabilities.ts +51 -0
  256. package/src/types/MarkdownEvents.ts +14 -0
  257. package/src/types/MarkdownOperation.ts +122 -0
  258. package/src/types/Settings.ts +65 -0
  259. package/src/types/index.ts +6 -3
  260. package/src/types/types.ts +7 -3
  261. package/src/util.tsx +7 -5
  262. package/dist/lib/browser/MarkdownCard-THZFDOOV.mjs +0 -13
  263. package/dist/lib/browser/MarkdownContainer-VKPSVI5F.mjs +0 -16
  264. package/dist/lib/browser/anchor-sort-3MYLO74J.mjs.map +0 -7
  265. package/dist/lib/browser/app-graph-serializer-BZJ4TQOE.mjs +0 -51
  266. package/dist/lib/browser/app-graph-serializer-BZJ4TQOE.mjs.map +0 -7
  267. package/dist/lib/browser/blueprint-definition-R5T6LTPN.mjs +0 -13
  268. package/dist/lib/browser/chunk-56SUMOIZ.mjs +0 -734
  269. package/dist/lib/browser/chunk-56SUMOIZ.mjs.map +0 -7
  270. package/dist/lib/browser/chunk-6OMOMVO7.mjs +0 -107
  271. package/dist/lib/browser/chunk-6OMOMVO7.mjs.map +0 -7
  272. package/dist/lib/browser/chunk-BQTYJOFB.mjs.map +0 -7
  273. package/dist/lib/browser/chunk-CN35HEBX.mjs +0 -79
  274. package/dist/lib/browser/chunk-CN35HEBX.mjs.map +0 -7
  275. package/dist/lib/browser/chunk-IBCHVMZW.mjs +0 -16
  276. package/dist/lib/browser/chunk-IBCHVMZW.mjs.map +0 -7
  277. package/dist/lib/browser/chunk-KCOBZZIL.mjs +0 -111
  278. package/dist/lib/browser/chunk-KCOBZZIL.mjs.map +0 -7
  279. package/dist/lib/browser/chunk-KPH4ZPQN.mjs.map +0 -7
  280. package/dist/lib/browser/chunk-NXT2E2BG.mjs +0 -57
  281. package/dist/lib/browser/chunk-NXT2E2BG.mjs.map +0 -7
  282. package/dist/lib/browser/chunk-RJPOHSYN.mjs +0 -152
  283. package/dist/lib/browser/chunk-RJPOHSYN.mjs.map +0 -7
  284. package/dist/lib/browser/chunk-U6Y53XZK.mjs +0 -20
  285. package/dist/lib/browser/chunk-U6Y53XZK.mjs.map +0 -7
  286. package/dist/lib/browser/index.mjs +0 -160
  287. package/dist/lib/browser/index.mjs.map +0 -7
  288. package/dist/lib/browser/intent-resolver-55ASQRIW.mjs +0 -62
  289. package/dist/lib/browser/intent-resolver-55ASQRIW.mjs.map +0 -7
  290. package/dist/lib/browser/meta.json +0 -1
  291. package/dist/lib/browser/react-surface-Q3C5H2KT.mjs +0 -215
  292. package/dist/lib/browser/react-surface-Q3C5H2KT.mjs.map +0 -7
  293. package/dist/lib/browser/settings-G3ZOXJQY.mjs +0 -28
  294. package/dist/lib/browser/settings-G3ZOXJQY.mjs.map +0 -7
  295. package/dist/lib/browser/state-BTUKVZHY.mjs +0 -37
  296. package/dist/lib/browser/state-BTUKVZHY.mjs.map +0 -7
  297. package/dist/lib/browser/toolkit.mjs +0 -13
  298. package/dist/lib/browser/types/index.mjs +0 -10
  299. package/dist/lib/node-esm/MarkdownCard-QHSSZGIY.mjs +0 -14
  300. package/dist/lib/node-esm/MarkdownCard-QHSSZGIY.mjs.map +0 -7
  301. package/dist/lib/node-esm/MarkdownContainer-G3ZQJS7A.mjs +0 -17
  302. package/dist/lib/node-esm/MarkdownContainer-G3ZQJS7A.mjs.map +0 -7
  303. package/dist/lib/node-esm/anchor-sort-W4HCTYUQ.mjs +0 -33
  304. package/dist/lib/node-esm/anchor-sort-W4HCTYUQ.mjs.map +0 -7
  305. package/dist/lib/node-esm/app-graph-serializer-OCTHXWLF.mjs +0 -52
  306. package/dist/lib/node-esm/app-graph-serializer-OCTHXWLF.mjs.map +0 -7
  307. package/dist/lib/node-esm/blueprint-definition-2JV3WV22.mjs +0 -14
  308. package/dist/lib/node-esm/blueprint-definition-2JV3WV22.mjs.map +0 -7
  309. package/dist/lib/node-esm/chunk-6F6FCTIA.mjs +0 -100
  310. package/dist/lib/node-esm/chunk-6F6FCTIA.mjs.map +0 -7
  311. package/dist/lib/node-esm/chunk-C5KXP2ZE.mjs +0 -153
  312. package/dist/lib/node-esm/chunk-C5KXP2ZE.mjs.map +0 -7
  313. package/dist/lib/node-esm/chunk-FR6RW6DH.mjs +0 -735
  314. package/dist/lib/node-esm/chunk-FR6RW6DH.mjs.map +0 -7
  315. package/dist/lib/node-esm/chunk-GMMVSXQ6.mjs +0 -17
  316. package/dist/lib/node-esm/chunk-GMMVSXQ6.mjs.map +0 -7
  317. package/dist/lib/node-esm/chunk-I5JSQBPI.mjs +0 -58
  318. package/dist/lib/node-esm/chunk-I5JSQBPI.mjs.map +0 -7
  319. package/dist/lib/node-esm/chunk-KM7KYV6W.mjs +0 -22
  320. package/dist/lib/node-esm/chunk-KM7KYV6W.mjs.map +0 -7
  321. package/dist/lib/node-esm/chunk-KYWXTMKI.mjs +0 -108
  322. package/dist/lib/node-esm/chunk-KYWXTMKI.mjs.map +0 -7
  323. package/dist/lib/node-esm/chunk-R3SGV4ES.mjs +0 -112
  324. package/dist/lib/node-esm/chunk-R3SGV4ES.mjs.map +0 -7
  325. package/dist/lib/node-esm/chunk-SHAMSMKQ.mjs +0 -29
  326. package/dist/lib/node-esm/chunk-SHAMSMKQ.mjs.map +0 -7
  327. package/dist/lib/node-esm/chunk-YFRTKXTB.mjs +0 -80
  328. package/dist/lib/node-esm/chunk-YFRTKXTB.mjs.map +0 -7
  329. package/dist/lib/node-esm/index.mjs +0 -161
  330. package/dist/lib/node-esm/index.mjs.map +0 -7
  331. package/dist/lib/node-esm/intent-resolver-DTBVWCNO.mjs +0 -63
  332. package/dist/lib/node-esm/intent-resolver-DTBVWCNO.mjs.map +0 -7
  333. package/dist/lib/node-esm/meta.json +0 -1
  334. package/dist/lib/node-esm/react-surface-QWRT4SD6.mjs +0 -216
  335. package/dist/lib/node-esm/react-surface-QWRT4SD6.mjs.map +0 -7
  336. package/dist/lib/node-esm/settings-IBFFCGNL.mjs +0 -29
  337. package/dist/lib/node-esm/settings-IBFFCGNL.mjs.map +0 -7
  338. package/dist/lib/node-esm/state-K6EH7SRZ.mjs +0 -38
  339. package/dist/lib/node-esm/state-K6EH7SRZ.mjs.map +0 -7
  340. package/dist/lib/node-esm/toolkit.mjs +0 -14
  341. package/dist/lib/node-esm/toolkit.mjs.map +0 -7
  342. package/dist/lib/node-esm/types/index.mjs +0 -11
  343. package/dist/types/src/capabilities/capabilities.d.ts +0 -12
  344. package/dist/types/src/capabilities/capabilities.d.ts.map +0 -1
  345. package/dist/types/src/capabilities/intent-resolver.d.ts +0 -4
  346. package/dist/types/src/capabilities/intent-resolver.d.ts.map +0 -1
  347. package/dist/types/src/components/MarkdownCard/MarkdownCard.d.ts +0 -20
  348. package/dist/types/src/components/MarkdownCard/MarkdownCard.d.ts.map +0 -1
  349. package/dist/types/src/components/MarkdownCard/MarkdownCard.stories.d.ts +0 -9
  350. package/dist/types/src/components/MarkdownCard/MarkdownCard.stories.d.ts.map +0 -1
  351. package/dist/types/src/components/MarkdownCard/index.d.ts +0 -4
  352. package/dist/types/src/components/MarkdownCard/index.d.ts.map +0 -1
  353. package/dist/types/src/components/MarkdownContainer.d.ts +0 -19
  354. package/dist/types/src/components/MarkdownContainer.d.ts.map +0 -1
  355. package/dist/types/src/components/MarkdownContainer.stories.d.ts +0 -59
  356. package/dist/types/src/components/MarkdownContainer.stories.d.ts.map +0 -1
  357. package/dist/types/src/components/Suggestions.stories.d.ts +0 -11
  358. package/dist/types/src/components/Suggestions.stories.d.ts.map +0 -1
  359. package/dist/types/src/events.d.ts +0 -4
  360. package/dist/types/src/events.d.ts.map +0 -1
  361. package/dist/types/src/functions/create.d.ts +0 -8
  362. package/dist/types/src/functions/create.d.ts.map +0 -1
  363. package/dist/types/src/functions/create.test.d.ts.map +0 -1
  364. package/dist/types/src/functions/index.d.ts +0 -18
  365. package/dist/types/src/functions/index.d.ts.map +0 -1
  366. package/dist/types/src/functions/open.d.ts +0 -7
  367. package/dist/types/src/functions/open.d.ts.map +0 -1
  368. package/dist/types/src/functions/update.d.ts +0 -6
  369. package/dist/types/src/functions/update.d.ts.map +0 -1
  370. package/dist/types/src/functions/update.test.d.ts.map +0 -1
  371. package/dist/types/src/hooks/useSelectCurrentThread.d.ts +0 -6
  372. package/dist/types/src/hooks/useSelectCurrentThread.d.ts.map +0 -1
  373. package/dist/types/src/toolkit.d.ts +0 -3
  374. package/dist/types/src/toolkit.d.ts.map +0 -1
  375. package/dist/types/src/types/MarkdownAction.d.ts +0 -34
  376. package/dist/types/src/types/MarkdownAction.d.ts.map +0 -1
  377. package/src/capabilities/capabilities.ts +0 -22
  378. package/src/capabilities/intent-resolver.ts +0 -58
  379. package/src/components/MarkdownCard/MarkdownCard.stories.tsx +0 -76
  380. package/src/components/MarkdownCard/MarkdownCard.tsx +0 -96
  381. package/src/components/MarkdownCard/index.ts +0 -9
  382. package/src/components/MarkdownContainer.stories.tsx +0 -136
  383. package/src/components/MarkdownContainer.tsx +0 -108
  384. package/src/components/Suggestions.stories.tsx +0 -226
  385. package/src/events.ts +0 -11
  386. package/src/functions/create.conversations.json +0 -1
  387. package/src/functions/create.test.ts +0 -124
  388. package/src/functions/create.ts +0 -34
  389. package/src/functions/index.ts +0 -13
  390. package/src/functions/open.ts +0 -33
  391. package/src/functions/update.conversations.json +0 -1
  392. package/src/functions/update.test.ts +0 -147
  393. package/src/functions/update.ts +0 -38
  394. package/src/hooks/useSelectCurrentThread.tsx +0 -66
  395. package/src/toolkit.ts +0 -6
  396. package/src/types/MarkdownAction.ts +0 -29
  397. /package/dist/lib/{browser/types → neutral/blueprints}/index.mjs.map +0 -0
  398. /package/dist/lib/{browser/MarkdownCard-THZFDOOV.mjs.map → neutral/chunk-J5LGTIGS.mjs.map} +0 -0
  399. /package/dist/lib/{node-esm/types → neutral}/index.mjs.map +0 -0
  400. /package/dist/lib/{browser/MarkdownContainer-VKPSVI5F.mjs.map → neutral/meta.mjs.map} +0 -0
  401. /package/dist/lib/{browser/blueprint-definition-R5T6LTPN.mjs.map → neutral/operations/index.mjs.map} +0 -0
  402. /package/dist/lib/{browser/toolkit.mjs.map → neutral/types/index.mjs.map} +0 -0
  403. /package/dist/types/src/{functions → operations}/create.test.d.ts +0 -0
  404. /package/dist/types/src/{functions → operations}/update.test.d.ts +0 -0
@@ -0,0 +1,40 @@
1
+ //
2
+ // Copyright 2025 DXOS.org
3
+ //
4
+
5
+ import { type Meta, type StoryObj } from '@storybook/react-vite';
6
+
7
+ import { withLayout, withTheme } from '@dxos/react-ui/testing';
8
+
9
+ import { translations } from '#translations';
10
+
11
+ import { MarkdownSettings } from './MarkdownSettings';
12
+
13
+ const meta = {
14
+ title: 'plugins/plugin-markdown/components/MarkdownSettings',
15
+ tags: ['settings'],
16
+ component: MarkdownSettings,
17
+ decorators: [withTheme(), withLayout({ layout: 'fullscreen' })],
18
+ parameters: {
19
+ layout: 'fullscreen',
20
+ translations,
21
+ },
22
+ } satisfies Meta<typeof MarkdownSettings>;
23
+
24
+ export default meta;
25
+
26
+ type Story = StoryObj<typeof meta>;
27
+
28
+ export const Default: Story = {
29
+ args: {
30
+ settings: {
31
+ defaultViewMode: 'preview',
32
+ editorInputMode: 'default',
33
+ toolbar: true,
34
+ numberedHeadings: false,
35
+ folding: false,
36
+ experimental: false,
37
+ debug: false,
38
+ },
39
+ },
40
+ };
@@ -4,105 +4,32 @@
4
4
 
5
5
  import React from 'react';
6
6
 
7
- import { Input, Select, useTranslation } from '@dxos/react-ui';
8
- import { type EditorInputMode, EditorInputModes, type EditorViewMode, EditorViewModes } from '@dxos/react-ui-editor';
9
- import { ControlGroup, ControlItemInput, ControlPage, ControlSection } from '@dxos/react-ui-form';
7
+ import { type AppSurface } from '@dxos/app-toolkit/ui';
8
+ import { Input } from '@dxos/react-ui';
9
+ import { Settings as SettingsForm, type SettingsFieldProps } from '@dxos/react-ui-form';
10
10
 
11
- import { meta } from '../../meta';
12
- import { type Markdown } from '../../types';
11
+ import { meta } from '#meta';
12
+ import { Markdown } from '#types';
13
13
 
14
- export const MarkdownSettings = ({ settings }: { settings: Markdown.Settings }) => {
15
- const { t } = useTranslation(meta.id);
14
+ export type MarkdownSettingsProps = AppSurface.SettingsArticleProps<Markdown.Settings>;
16
15
 
17
- // TODO(wittjosiah): Add skill test confirmation for entering vim mode.
18
- return (
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>
44
-
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>
67
-
68
- <ControlItemInput title={t('settings toolbar label')}>
69
- <Input.Switch checked={settings.toolbar} onCheckedChange={(checked) => (settings.toolbar = !!checked)} />
70
- </ControlItemInput>
71
-
72
- <ControlItemInput title={t('settings numbered headings label')}>
73
- <Input.Switch
74
- checked={settings.numberedHeadings}
75
- onCheckedChange={(checked) => (settings.numberedHeadings = !!checked)}
76
- />
77
- </ControlItemInput>
16
+ const SnippetsField = ({ value, onChange, readonly }: SettingsFieldProps<string | undefined>) => (
17
+ <Input.TextArea disabled={readonly} rows={5} value={value ?? ''} onChange={(event) => onChange(event.target.value)} />
18
+ );
78
19
 
79
- <ControlItemInput title={t('settings folding label')}>
80
- <Input.Switch checked={settings.folding} onCheckedChange={(checked) => (settings.folding = !!checked)} />
81
- </ControlItemInput>
82
-
83
- <ControlItemInput title={t('settings experimental label')}>
84
- <Input.Switch
85
- checked={settings.experimental}
86
- onCheckedChange={(checked) => (settings.experimental = !!checked)}
87
- />
88
- </ControlItemInput>
89
-
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 })}>
96
- <Input.TextArea
97
- rows={5}
98
- value={settings.typewriter}
99
- onChange={({ target: { value } }) => (settings.typewriter = value)}
100
- placeholder={t('settings debug placeholder')}
101
- />
102
- </ControlItemInput>
103
- )}
104
- </ControlGroup>
105
- </ControlSection>
106
- </ControlPage>
20
+ export const MarkdownSettings = ({ settings, onSettingsChange }: MarkdownSettingsProps) => {
21
+ return (
22
+ <SettingsForm.Viewport>
23
+ <SettingsForm.Section title={meta.name ?? 'Editor'}>
24
+ <SettingsForm.FieldSet
25
+ readonly={!onSettingsChange}
26
+ schema={Markdown.Settings}
27
+ visible={(path, values) => path !== 'snippets' || !!values.debug}
28
+ fieldMap={{ snippets: SnippetsField }}
29
+ values={settings}
30
+ onValuesChanged={(values) => onSettingsChange?.(() => values)}
31
+ />
32
+ </SettingsForm.Section>
33
+ </SettingsForm.Viewport>
107
34
  );
108
35
  };
@@ -2,4 +2,4 @@
2
2
  // Copyright 2025 DXOS.org
3
3
  //
4
4
 
5
- export * from './MarkdownSettings';
5
+ export { MarkdownSettings as default } from './MarkdownSettings';
@@ -1,17 +1,9 @@
1
1
  //
2
- // Copyright 2023 DXOS.org
2
+ // Copyright 2025 DXOS.org
3
3
  //
4
4
 
5
- import { type LazyExoticComponent, lazy } from 'react';
5
+ import { type ComponentType, lazy } from 'react';
6
6
 
7
- import { type MarkdownCard as MarkdownCardType } from './MarkdownCard';
8
- import { type MarkdownContainer as MarkdownContainerType } from './MarkdownContainer';
7
+ export * from './MarkdownEditor';
9
8
 
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
- );
9
+ export const MarkdownSettings: ComponentType<any> = lazy(() => import('./MarkdownSettings'));
@@ -0,0 +1,42 @@
1
+ //
2
+ // Copyright 2026 DXOS.org
3
+ //
4
+
5
+ import React from 'react';
6
+
7
+ import { Obj } from '@dxos/echo';
8
+ import { useObject } from '@dxos/react-client/echo';
9
+ import { Card } from '@dxos/react-ui';
10
+ import { Editor } from '@dxos/react-ui-editor';
11
+ import { Text } from '@dxos/schema';
12
+
13
+ import { MarkdownEditor, MarkdownEditorProvider } from '#components';
14
+ import { Markdown } from '#types';
15
+
16
+ export type EditableMarkdownCardProps = { subject: Markdown.Document | Text.Text };
17
+
18
+ /**
19
+ * Full-bleed editable variant of {@link MarkdownCard}. Activated by the host
20
+ * passing `editable: true` on the card surface data (e.g. plugin-board cells).
21
+ * Renders a plain editor (no app-graph toolbar / file upload / link queries)
22
+ * so it stays self-contained inside the card; the regular MarkdownContainer
23
+ * remains the canonical surface for full article views.
24
+ */
25
+ export const EditableMarkdownCard = ({ subject }: EditableMarkdownCardProps) => {
26
+ const id = Obj.getDXN(subject).toString();
27
+ const [docContent] = useObject(Obj.instanceOf(Markdown.Document, subject) ? subject.content : undefined, 'content');
28
+ const [textContent] = useObject(Obj.instanceOf(Text.Text, subject) ? subject : undefined, 'content');
29
+ const initialValue = docContent ?? textContent;
30
+
31
+ return (
32
+ <Card.Section classNames='overflow-hidden'>
33
+ <MarkdownEditorProvider id={id} object={subject} viewMode='source'>
34
+ {(editorRootProps) => (
35
+ <Editor.Root {...editorRootProps}>
36
+ <MarkdownEditor.Content compact initialValue={initialValue} />
37
+ </Editor.Root>
38
+ )}
39
+ </MarkdownEditorProvider>
40
+ </Card.Section>
41
+ );
42
+ };
@@ -0,0 +1,6 @@
1
+ //
2
+ // Copyright 2026 DXOS.org
3
+ //
4
+
5
+ export { EditableMarkdownCard, type EditableMarkdownCardProps } from './EditableMarkdownCard';
6
+ export { EditableMarkdownCard as default } from './EditableMarkdownCard';
@@ -0,0 +1,68 @@
1
+ //
2
+ // Copyright 2023 DXOS.org
3
+ //
4
+
5
+ import { type Meta, type StoryObj } from '@storybook/react-vite';
6
+ import React, { useMemo } from 'react';
7
+
8
+ import { OperationPlugin, RuntimePlugin } from '@dxos/app-framework';
9
+ import { withPluginManager } from '@dxos/app-framework/testing';
10
+ import { Obj } from '@dxos/echo';
11
+ import { ClientPlugin } from '@dxos/plugin-client/plugin';
12
+ import { Markdown } from '@dxos/plugin-markdown';
13
+ import { random } from '@dxos/random';
14
+ import { Card } from '@dxos/react-ui';
15
+ import { CardContainer } from '@dxos/react-ui-mosaic/testing';
16
+ import { withTheme } from '@dxos/react-ui/testing';
17
+
18
+ import { translations } from '#translations';
19
+
20
+ import { MarkdownCard, type MarkdownCardProps } from './MarkdownCard';
21
+
22
+ random.seed(1234);
23
+
24
+ const MarkdownCardStory = ({ ...args }: Omit<MarkdownCardProps, 'subject'>) => {
25
+ const subject = useMemo(
26
+ () =>
27
+ Markdown.make({
28
+ name: random.lorem.words(3),
29
+ content: '# Title\n' + random.lorem.paragraphs(5),
30
+ }),
31
+ [],
32
+ );
33
+
34
+ return (
35
+ <CardContainer icon='ph--text-aa--regular'>
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>
44
+ </CardContainer>
45
+ );
46
+ };
47
+
48
+ const meta: Meta<typeof MarkdownCardStory> = {
49
+ title: 'plugins/plugin-markdown/containers/MarkdownCard',
50
+ component: MarkdownCardStory,
51
+ decorators: [
52
+ withTheme(),
53
+ withPluginManager({
54
+ plugins: [OperationPlugin(), RuntimePlugin(), ClientPlugin({})],
55
+ }),
56
+ ],
57
+ parameters: {
58
+ layout: 'centered',
59
+ translations,
60
+ },
61
+ tags: ['cards'],
62
+ };
63
+
64
+ export default meta;
65
+
66
+ type Story = StoryObj<typeof meta>;
67
+
68
+ export const Default: Story = {};
@@ -0,0 +1,67 @@
1
+ //
2
+ // Copyright 2025 DXOS.org
3
+ //
4
+
5
+ import React, { useMemo } from 'react';
6
+
7
+ import { Obj } from '@dxos/echo';
8
+ import { Card, useTranslation } from '@dxos/react-ui';
9
+ import { Editor } from '@dxos/react-ui-editor';
10
+ import { Text } from '@dxos/schema';
11
+ import { mx } from '@dxos/ui-theme';
12
+
13
+ import { MarkdownEditor, MarkdownEditorProvider } from '#components';
14
+ import { meta } from '#meta';
15
+ import { Markdown } from '#types';
16
+
17
+ import { getContentSnippet } from '../../util';
18
+ import { snippet as snippetExtension } from './snippet';
19
+
20
+ export type MarkdownCardProps = { subject: Markdown.Document | Text.Text };
21
+
22
+ export const MarkdownCard = ({ subject }: MarkdownCardProps) => {
23
+ const { t } = useTranslation(meta.id);
24
+ const snippet = useMemo(() => getSnippet(subject), [subject]);
25
+ const extensions = useMemo(() => [snippetExtension({ height: 300, scale: 0.8 })], []);
26
+ const info = getInfo(subject);
27
+
28
+ return (
29
+ <Card.Content>
30
+ {snippet && (
31
+ <Card.Section className='relative px-1'>
32
+ <MarkdownEditorProvider id={subject.id} viewMode='readonly' extensions={extensions}>
33
+ {(editorRootProps) => (
34
+ <Editor.Root {...editorRootProps}>
35
+ <MarkdownEditor.Content initialValue={snippet} slots={{ content: { className: 'm-0' } }} />
36
+ </Editor.Root>
37
+ )}
38
+ </MarkdownEditorProvider>
39
+ <div
40
+ className={mx(
41
+ 'z-10 absolute bottom-0 inset-x-0 h-12 w-full',
42
+ 'bg-gradient-to-b from-transparent to-(--surface-bg) pointer-events-none',
43
+ )}
44
+ />
45
+ </Card.Section>
46
+ )}
47
+ <Card.Section>
48
+ <Card.Text classNames='px-1.5 text-xs text-description'>
49
+ {info.words} {t('words.label', { count: info.words })}
50
+ </Card.Text>
51
+ </Card.Section>
52
+ </Card.Content>
53
+ );
54
+ };
55
+
56
+ const getSnippet = (subject: Markdown.Document | Text.Text, fallback?: string, maxLines = 16) => {
57
+ if (Obj.instanceOf(Markdown.Document, subject)) {
58
+ return Obj.getDescription(subject) || getContentSnippet(subject.content?.target?.content ?? fallback, maxLines);
59
+ } else if (Obj.instanceOf(Text.Text, subject)) {
60
+ return getContentSnippet(subject.content ?? fallback, maxLines);
61
+ }
62
+ };
63
+
64
+ const getInfo = (subject: Markdown.Document | Text.Text) => {
65
+ const text = (Obj.instanceOf(Markdown.Document, subject) ? subject.content?.target?.content : subject.content) ?? '';
66
+ return { words: text.split(' ').length };
67
+ };
@@ -0,0 +1,5 @@
1
+ //
2
+ // Copyright 2025 DXOS.org
3
+ //
4
+
5
+ export { MarkdownCard as default } from './MarkdownCard';
@@ -0,0 +1,54 @@
1
+ //
2
+ // Copyright 2025 DXOS.org
3
+ //
4
+
5
+ import { EditorState } from '@codemirror/state';
6
+ import { EditorView } from '@codemirror/view';
7
+
8
+ export type SnippetOptions = {
9
+ /** Maximum height of the editor in pixels. Overflowing content is hidden. */
10
+ height: number;
11
+ /** Zoom factor applied to the editor (e.g. 0.5 renders at 50%). @default 1 */
12
+ scale?: number;
13
+ };
14
+
15
+ /**
16
+ * CodeMirror extension for rendering a non-scrollable snippet of editor content.
17
+ * Constrains the editor to the given height via CSS `max-height`, wraps long
18
+ * lines (`pre-wrap`), and disables scrolling entirely.
19
+ *
20
+ * NOTE: Uses CSS `zoom` rather than `transform: scale` because `zoom` affects
21
+ * layout, so line wrapping fills the full visual width of the container.
22
+ * `transform: scale` only scales paint output, leaving empty space on the right.
23
+ */
24
+ export const snippet = ({ height, scale = 1 }: SnippetOptions) => {
25
+ return [
26
+ EditorState.readOnly.of(true),
27
+ EditorView.editable.of(false),
28
+ EditorState.transactionFilter.of((tr) => {
29
+ if (tr.selection) {
30
+ return [];
31
+ } // Drop any selection changes.
32
+ return tr;
33
+ }),
34
+ EditorView.theme({
35
+ // Outer editor element: clip to the caller-specified height.
36
+ '&': {
37
+ maxHeight: `${height}px`,
38
+ overflow: 'hidden',
39
+ },
40
+ '.cm-scroller': {
41
+ // Prevent scroll; scale up the inner clip so the final pixel height matches `height`.
42
+ maxHeight: `${height / scale}px`,
43
+ overflow: 'hidden !important',
44
+ padding: '0',
45
+ },
46
+ '.cm-content': {
47
+ // zoom (unlike transform: scale) affects layout, so line-wrapping fills the full visual width of the container.
48
+ zoom: scale,
49
+ margin: '0',
50
+ padding: '0',
51
+ },
52
+ }),
53
+ ];
54
+ };
@@ -0,0 +1,135 @@
1
+ //
2
+ // Copyright 2023 DXOS.org
3
+ //
4
+
5
+ import { type Meta, type StoryObj } from '@storybook/react-vite';
6
+ import * as Effect from 'effect/Effect';
7
+ import React, { useMemo } from 'react';
8
+
9
+ import { Capability, Plugin } from '@dxos/app-framework';
10
+ import { withPluginManager } from '@dxos/app-framework/testing';
11
+ import { Surface, useOperationInvoker } from '@dxos/app-framework/ui';
12
+ import { AppActivationEvents, LayoutOperation } from '@dxos/app-toolkit';
13
+ import { AppSurface } from '@dxos/app-toolkit/ui';
14
+ import { Obj, Query } from '@dxos/echo';
15
+ import { ClientPlugin } from '@dxos/plugin-client/plugin';
16
+ import { initializeIdentity } from '@dxos/plugin-client/testing';
17
+ import { PreviewPlugin } from '@dxos/plugin-preview/testing';
18
+ import { StorybookPlugin, corePlugins } from '@dxos/plugin-testing';
19
+ import { random } from '@dxos/random';
20
+ import { useQuery, useSpaces } from '@dxos/react-client/echo';
21
+ import { useAsyncEffect } from '@dxos/react-ui';
22
+ import { useAttentionAttributes } from '@dxos/react-ui-attention';
23
+ import { withLayout } from '@dxos/react-ui/testing';
24
+ import { Text } from '@dxos/schema';
25
+ import { type ValueGenerator, createObjectFactory } from '@dxos/schema/testing';
26
+ import { Organization, Person } from '@dxos/types';
27
+
28
+ import { translations } from '#translations';
29
+ import { Markdown, MarkdownCapabilities, MarkdownEvents } from '#types';
30
+
31
+ import { MarkdownPlugin } from '../../MarkdownPlugin';
32
+
33
+ random.seed(1);
34
+
35
+ const generator: ValueGenerator = random as any;
36
+
37
+ /** Minimal plugin that contributes an empty Extensions capability for stories. */
38
+ const MarkdownExtensionsPlugin = Plugin.define({ id: 'story-markdown-extensions', name: 'Story Extensions' }).pipe(
39
+ Plugin.addModule({
40
+ id: 'extensions',
41
+ activatesOn: MarkdownEvents.SetupExtensions,
42
+ activate: () => Effect.succeed(Capability.contributes(MarkdownCapabilities.Extensions, [])),
43
+ }),
44
+ Plugin.make,
45
+ );
46
+
47
+ const DefaultStory = () => {
48
+ const { invokePromise } = useOperationInvoker();
49
+ const [space] = useSpaces();
50
+ const [doc] = useQuery(space?.db, Query.type(Markdown.Document));
51
+ const id = doc && Obj.getDXN(doc).toString();
52
+ const data = useMemo(() => ({ subject: doc, attendableId: id ?? 'story' }), [doc, id]);
53
+ const attentionAttrs = useAttentionAttributes(id);
54
+
55
+ useAsyncEffect(async () => {
56
+ if (space) {
57
+ await invokePromise(LayoutOperation.SwitchWorkspace, { subject: space.id });
58
+ }
59
+ }, [space, invokePromise]);
60
+
61
+ return (
62
+ <div className='contents' {...attentionAttrs}>
63
+ <Surface.Surface type={AppSurface.Article} data={data} limit={1} />
64
+ </div>
65
+ );
66
+ };
67
+
68
+ const meta = {
69
+ title: 'plugins/plugin-markdown/containers/MarkdownContainer',
70
+ render: DefaultStory,
71
+ decorators: [
72
+ withLayout({ layout: 'column' }),
73
+ withPluginManager<{ title?: string; content?: string }>((context) => ({
74
+ setupEvents: [AppActivationEvents.SetupSettings, MarkdownEvents.SetupExtensions],
75
+ plugins: [
76
+ ...corePlugins(),
77
+ StorybookPlugin({}),
78
+ MarkdownExtensionsPlugin(),
79
+ ClientPlugin({
80
+ types: [Markdown.Document, Text.Text, Person.Person, Organization.Organization],
81
+ onClientInitialized: ({ client }) =>
82
+ Effect.gen(function* () {
83
+ const { personalSpace } = yield* initializeIdentity(client);
84
+
85
+ const createObjects = createObjectFactory(personalSpace.db, generator);
86
+ yield* Effect.promise(() => createObjects([{ type: Organization.Organization, count: 10 }]));
87
+
88
+ const queue = personalSpace.queues.create();
89
+ const kai = Obj.make(Person.Person, { fullName: 'Kai' });
90
+ const dxos = Obj.make(Organization.Organization, { name: 'DXOS' });
91
+ yield* Effect.promise(() => queue.append([kai, dxos]));
92
+
93
+ personalSpace.db.add(
94
+ Markdown.make({
95
+ name: context.args.title ?? 'Testing',
96
+ content: [
97
+ `# ${context.args.title ?? 'Testing'}`,
98
+ context.args.content ?? '',
99
+ // TODO(burdon): Popovers not currently working.
100
+ '## Here are some objects',
101
+ `![Alice](${Obj.getDXN(kai)})`,
102
+ `![DXOS](${Obj.getDXN(dxos)})`,
103
+ '',
104
+ 'END',
105
+ '',
106
+ ].join('\n\n'),
107
+ }),
108
+ );
109
+
110
+ yield* Effect.promise(() => personalSpace.db.flush({ indexes: true }));
111
+ }),
112
+ }),
113
+
114
+ MarkdownPlugin(),
115
+ PreviewPlugin(),
116
+ ],
117
+ })),
118
+ ],
119
+ parameters: {
120
+ layout: 'fullscreen',
121
+ controls: { disable: true },
122
+ translations,
123
+ },
124
+ } satisfies Meta<typeof DefaultStory>;
125
+
126
+ export default meta;
127
+
128
+ type Story = StoryObj<typeof meta>;
129
+
130
+ export const Default: Story = {
131
+ args: {
132
+ title: 'Testing',
133
+ content: ['This is a line with **some** formatting.'].join('\n\n'),
134
+ },
135
+ };