@dxos/plugin-markdown 0.8.4-main.f9ba587 → 0.8.4-main.fcfe5033a5

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 (337) hide show
  1. package/dist/lib/browser/MarkdownSettings-62YSRY7L.mjs +32 -0
  2. package/dist/lib/browser/MarkdownSettings-62YSRY7L.mjs.map +7 -0
  3. package/dist/lib/browser/blueprints/index.mjs +51 -0
  4. package/dist/lib/browser/blueprints/index.mjs.map +7 -0
  5. package/dist/lib/browser/chunk-4KOZEH2H.mjs +121 -0
  6. package/dist/lib/browser/chunk-4KOZEH2H.mjs.map +7 -0
  7. package/dist/lib/browser/chunk-J5LGTIGS.mjs +10 -0
  8. package/dist/lib/browser/chunk-J5LGTIGS.mjs.map +7 -0
  9. package/dist/lib/browser/chunk-QFPZONKP.mjs +158 -0
  10. package/dist/lib/browser/chunk-QFPZONKP.mjs.map +7 -0
  11. package/dist/lib/browser/cli/index.mjs +39 -0
  12. package/dist/lib/browser/cli/index.mjs.map +7 -0
  13. package/dist/lib/browser/create-YL5ELZWP.mjs +30 -0
  14. package/dist/lib/browser/create-YL5ELZWP.mjs.map +7 -0
  15. package/dist/lib/browser/create-markdown-LU5IDKMH.mjs +22 -0
  16. package/dist/lib/browser/create-markdown-LU5IDKMH.mjs.map +7 -0
  17. package/dist/lib/browser/index.mjs +614 -142
  18. package/dist/lib/browser/index.mjs.map +4 -4
  19. package/dist/lib/browser/meta.json +1 -1
  20. package/dist/lib/browser/open-AFSOZZ6G.mjs +21 -0
  21. package/dist/lib/browser/open-AFSOZZ6G.mjs.map +7 -0
  22. package/dist/lib/browser/operations/index.mjs +14 -0
  23. package/dist/lib/browser/operations/index.mjs.map +7 -0
  24. package/dist/lib/browser/scroll-to-anchor-IPXV32A6.mjs +49 -0
  25. package/dist/lib/browser/scroll-to-anchor-IPXV32A6.mjs.map +7 -0
  26. package/dist/lib/browser/set-view-mode-2QWB24RR.mjs +26 -0
  27. package/dist/lib/browser/set-view-mode-2QWB24RR.mjs.map +7 -0
  28. package/dist/lib/browser/types/index.mjs +12 -14
  29. package/dist/lib/browser/update-HZNVYBMO.mjs +45 -0
  30. package/dist/lib/browser/update-HZNVYBMO.mjs.map +7 -0
  31. package/dist/lib/node-esm/MarkdownSettings-QMPISOEU.mjs +33 -0
  32. package/dist/lib/node-esm/MarkdownSettings-QMPISOEU.mjs.map +7 -0
  33. package/dist/lib/node-esm/blueprints/index.mjs +52 -0
  34. package/dist/lib/node-esm/blueprints/index.mjs.map +7 -0
  35. package/dist/lib/node-esm/chunk-3OPDJJJH.mjs +122 -0
  36. package/dist/lib/node-esm/chunk-3OPDJJJH.mjs.map +7 -0
  37. package/dist/lib/node-esm/chunk-HSLMI22Q.mjs +11 -0
  38. package/dist/lib/node-esm/chunk-HSLMI22Q.mjs.map +7 -0
  39. package/dist/lib/node-esm/chunk-JUGS6RKO.mjs +159 -0
  40. package/dist/lib/node-esm/chunk-JUGS6RKO.mjs.map +7 -0
  41. package/dist/lib/node-esm/cli/index.mjs +40 -0
  42. package/dist/lib/node-esm/cli/index.mjs.map +7 -0
  43. package/dist/lib/node-esm/create-SMQAIM3V.mjs +31 -0
  44. package/dist/lib/node-esm/create-SMQAIM3V.mjs.map +7 -0
  45. package/dist/lib/node-esm/create-markdown-X2OASYKG.mjs +23 -0
  46. package/dist/lib/node-esm/create-markdown-X2OASYKG.mjs.map +7 -0
  47. package/dist/lib/node-esm/index.mjs +614 -142
  48. package/dist/lib/node-esm/index.mjs.map +4 -4
  49. package/dist/lib/node-esm/meta.json +1 -1
  50. package/dist/lib/node-esm/open-SRWLLOKE.mjs +22 -0
  51. package/dist/lib/node-esm/open-SRWLLOKE.mjs.map +7 -0
  52. package/dist/lib/node-esm/operations/index.mjs +15 -0
  53. package/dist/lib/node-esm/operations/index.mjs.map +7 -0
  54. package/dist/lib/node-esm/scroll-to-anchor-M76GXKYQ.mjs +50 -0
  55. package/dist/lib/node-esm/scroll-to-anchor-M76GXKYQ.mjs.map +7 -0
  56. package/dist/lib/node-esm/set-view-mode-6BB6KIDS.mjs +27 -0
  57. package/dist/lib/node-esm/set-view-mode-6BB6KIDS.mjs.map +7 -0
  58. package/dist/lib/node-esm/types/index.mjs +12 -14
  59. package/dist/lib/node-esm/update-4CELTLXK.mjs +46 -0
  60. package/dist/lib/node-esm/update-4CELTLXK.mjs.map +7 -0
  61. package/dist/types/src/MarkdownPlugin.d.ts +2 -1
  62. package/dist/types/src/MarkdownPlugin.d.ts.map +1 -1
  63. package/dist/types/src/blueprints/index.d.ts +2 -0
  64. package/dist/types/src/blueprints/index.d.ts.map +1 -0
  65. package/dist/types/src/blueprints/markdown-blueprint.d.ts +4 -0
  66. package/dist/types/src/blueprints/markdown-blueprint.d.ts.map +1 -0
  67. package/dist/types/src/capabilities/anchor-sort.d.ts +4 -4
  68. package/dist/types/src/capabilities/anchor-sort.d.ts.map +1 -1
  69. package/dist/types/src/capabilities/app-graph-serializer.d.ts +3 -2
  70. package/dist/types/src/capabilities/app-graph-serializer.d.ts.map +1 -1
  71. package/dist/types/src/capabilities/artifact-definition.d.ts +3 -9
  72. package/dist/types/src/capabilities/artifact-definition.d.ts.map +1 -1
  73. package/dist/types/src/capabilities/blueprint-definition.d.ts +6 -0
  74. package/dist/types/src/capabilities/blueprint-definition.d.ts.map +1 -0
  75. package/dist/types/src/capabilities/index.d.ts +9 -16
  76. package/dist/types/src/capabilities/index.d.ts.map +1 -1
  77. package/dist/types/src/capabilities/node.d.ts +4 -0
  78. package/dist/types/src/capabilities/node.d.ts.map +1 -0
  79. package/dist/types/src/capabilities/operation-handler.d.ts +6 -0
  80. package/dist/types/src/capabilities/operation-handler.d.ts.map +1 -0
  81. package/dist/types/src/capabilities/react-surface.d.ts +3 -2
  82. package/dist/types/src/capabilities/react-surface.d.ts.map +1 -1
  83. package/dist/types/src/capabilities/settings.d.ts +4 -2
  84. package/dist/types/src/capabilities/settings.d.ts.map +1 -1
  85. package/dist/types/src/capabilities/state.d.ts +4 -9
  86. package/dist/types/src/capabilities/state.d.ts.map +1 -1
  87. package/dist/types/src/cli/index.d.ts +2 -0
  88. package/dist/types/src/cli/index.d.ts.map +1 -0
  89. package/dist/types/src/cli/plugin.d.ts +3 -0
  90. package/dist/types/src/cli/plugin.d.ts.map +1 -0
  91. package/dist/types/src/components/MarkdownEditor/FileUpload.d.ts +11 -0
  92. package/dist/types/src/components/MarkdownEditor/FileUpload.d.ts.map +1 -0
  93. package/dist/types/src/components/MarkdownEditor/MarkdownEditor.d.ts +44 -21
  94. package/dist/types/src/components/MarkdownEditor/MarkdownEditor.d.ts.map +1 -1
  95. package/dist/types/src/components/MarkdownEditor/MarkdownEditor.stories.d.ts +8 -15
  96. package/dist/types/src/components/MarkdownEditor/MarkdownEditor.stories.d.ts.map +1 -1
  97. package/dist/types/src/components/MarkdownEditor/MarkdownEditorContent.d.ts +32 -0
  98. package/dist/types/src/components/MarkdownEditor/MarkdownEditorContent.d.ts.map +1 -0
  99. package/dist/types/src/components/MarkdownEditor/MarkdownEditorToolbar.d.ts +13 -0
  100. package/dist/types/src/components/MarkdownEditor/MarkdownEditorToolbar.d.ts.map +1 -0
  101. package/dist/types/src/components/MarkdownSettings/MarkdownSettings.d.ts +4 -4
  102. package/dist/types/src/components/MarkdownSettings/MarkdownSettings.d.ts.map +1 -1
  103. package/dist/types/src/components/MarkdownSettings/MarkdownSettings.stories.d.ts +94 -0
  104. package/dist/types/src/components/MarkdownSettings/MarkdownSettings.stories.d.ts.map +1 -0
  105. package/dist/types/src/components/MarkdownSettings/index.d.ts +1 -1
  106. package/dist/types/src/components/MarkdownSettings/index.d.ts.map +1 -1
  107. package/dist/types/src/components/index.d.ts +3 -3
  108. package/dist/types/src/components/index.d.ts.map +1 -1
  109. package/dist/types/src/containers/MarkdownCard/MarkdownCard.d.ts +8 -0
  110. package/dist/types/src/containers/MarkdownCard/MarkdownCard.d.ts.map +1 -0
  111. package/dist/types/src/containers/MarkdownCard/MarkdownCard.stories.d.ts +9 -0
  112. package/dist/types/src/containers/MarkdownCard/MarkdownCard.stories.d.ts.map +1 -0
  113. package/dist/types/src/containers/MarkdownCard/index.d.ts +2 -0
  114. package/dist/types/src/containers/MarkdownCard/index.d.ts.map +1 -0
  115. package/dist/types/src/containers/MarkdownCard/snippet.d.ts +17 -0
  116. package/dist/types/src/containers/MarkdownCard/snippet.d.ts.map +1 -0
  117. package/dist/types/src/containers/MarkdownContainer/MarkdownContainer.d.ts +36 -0
  118. package/dist/types/src/containers/MarkdownContainer/MarkdownContainer.d.ts.map +1 -0
  119. package/dist/types/src/containers/MarkdownContainer/MarkdownContainer.stories.d.ts +77 -0
  120. package/dist/types/src/containers/MarkdownContainer/MarkdownContainer.stories.d.ts.map +1 -0
  121. package/dist/types/src/containers/MarkdownContainer/index.d.ts +3 -0
  122. package/dist/types/src/containers/MarkdownContainer/index.d.ts.map +1 -0
  123. package/dist/types/src/containers/index.d.ts +5 -0
  124. package/dist/types/src/containers/index.d.ts.map +1 -0
  125. package/dist/types/src/hooks/index.d.ts +3 -1
  126. package/dist/types/src/hooks/index.d.ts.map +1 -1
  127. package/dist/types/src/hooks/useEditorMenuOptions.d.ts +9 -0
  128. package/dist/types/src/hooks/useEditorMenuOptions.d.ts.map +1 -0
  129. package/dist/types/src/hooks/useExtensions.d.ts +24 -0
  130. package/dist/types/src/hooks/useExtensions.d.ts.map +1 -0
  131. package/dist/types/src/hooks/useLinkQuery.d.ts +4 -0
  132. package/dist/types/src/hooks/useLinkQuery.d.ts.map +1 -0
  133. package/dist/types/src/index.d.ts +5 -3
  134. package/dist/types/src/index.d.ts.map +1 -1
  135. package/dist/types/src/meta.d.ts +2 -3
  136. package/dist/types/src/meta.d.ts.map +1 -1
  137. package/dist/types/src/operations/create-markdown.d.ts +5 -0
  138. package/dist/types/src/operations/create-markdown.d.ts.map +1 -0
  139. package/dist/types/src/operations/create.d.ts +5 -0
  140. package/dist/types/src/operations/create.d.ts.map +1 -0
  141. package/dist/types/src/operations/create.test.d.ts +2 -0
  142. package/dist/types/src/operations/create.test.d.ts.map +1 -0
  143. package/dist/types/src/operations/definitions.d.ts +64 -0
  144. package/dist/types/src/operations/definitions.d.ts.map +1 -0
  145. package/dist/types/src/operations/index.d.ts +4 -0
  146. package/dist/types/src/operations/index.d.ts.map +1 -0
  147. package/dist/types/src/operations/open.d.ts +5 -0
  148. package/dist/types/src/operations/open.d.ts.map +1 -0
  149. package/dist/types/src/operations/scroll-to-anchor.d.ts +5 -0
  150. package/dist/types/src/operations/scroll-to-anchor.d.ts.map +1 -0
  151. package/dist/types/src/operations/set-view-mode.d.ts +5 -0
  152. package/dist/types/src/operations/set-view-mode.d.ts.map +1 -0
  153. package/dist/types/src/operations/update.d.ts +5 -0
  154. package/dist/types/src/operations/update.d.ts.map +1 -0
  155. package/dist/types/src/operations/update.test.d.ts +2 -0
  156. package/dist/types/src/operations/update.test.d.ts.map +1 -0
  157. package/dist/types/src/testing.d.ts +6 -0
  158. package/dist/types/src/testing.d.ts.map +1 -0
  159. package/dist/types/src/translations.d.ts +54 -29
  160. package/dist/types/src/translations.d.ts.map +1 -1
  161. package/dist/types/src/types/Markdown.d.ts +44 -0
  162. package/dist/types/src/types/Markdown.d.ts.map +1 -0
  163. package/dist/types/src/types/Settings.d.ts +17 -0
  164. package/dist/types/src/types/Settings.d.ts.map +1 -0
  165. package/dist/types/src/types/capabilities.d.ts +33 -0
  166. package/dist/types/src/types/capabilities.d.ts.map +1 -0
  167. package/dist/types/src/types/events.d.ts +5 -0
  168. package/dist/types/src/types/events.d.ts.map +1 -0
  169. package/dist/types/src/types/index.d.ts +4 -1
  170. package/dist/types/src/types/index.d.ts.map +1 -1
  171. package/dist/types/src/types/types.d.ts +4 -60
  172. package/dist/types/src/types/types.d.ts.map +1 -1
  173. package/dist/types/src/util.d.ts +17 -5
  174. package/dist/types/src/util.d.ts.map +1 -1
  175. package/dist/types/src/util.test.d.ts +2 -0
  176. package/dist/types/src/util.test.d.ts.map +1 -0
  177. package/dist/types/tsconfig.tsbuildinfo +1 -1
  178. package/package.json +124 -56
  179. package/src/MarkdownPlugin.tsx +90 -107
  180. package/src/blueprints/index.ts +5 -0
  181. package/src/blueprints/markdown-blueprint.ts +44 -0
  182. package/src/capabilities/anchor-sort.ts +29 -22
  183. package/src/capabilities/app-graph-serializer.ts +55 -42
  184. package/src/capabilities/artifact-definition.ts +93 -99
  185. package/src/capabilities/blueprint-definition.ts +17 -0
  186. package/src/capabilities/index.ts +12 -10
  187. package/src/capabilities/node.ts +11 -0
  188. package/src/capabilities/operation-handler.ts +16 -0
  189. package/src/capabilities/react-surface.tsx +110 -102
  190. package/src/capabilities/settings.ts +30 -18
  191. package/src/capabilities/state.ts +40 -24
  192. package/src/cli/index.ts +5 -0
  193. package/src/cli/plugin.ts +39 -0
  194. package/src/components/MarkdownEditor/FileUpload.tsx +63 -0
  195. package/src/components/MarkdownEditor/MarkdownEditor.stories.tsx +63 -37
  196. package/src/components/MarkdownEditor/MarkdownEditor.tsx +251 -266
  197. package/src/components/MarkdownEditor/MarkdownEditorContent.tsx +170 -0
  198. package/src/components/MarkdownEditor/MarkdownEditorToolbar.tsx +47 -0
  199. package/src/components/MarkdownSettings/MarkdownSettings.stories.tsx +39 -0
  200. package/src/components/MarkdownSettings/MarkdownSettings.tsx +22 -92
  201. package/src/components/MarkdownSettings/index.ts +1 -1
  202. package/src/components/index.ts +4 -5
  203. package/src/containers/MarkdownCard/MarkdownCard.stories.tsx +67 -0
  204. package/src/containers/MarkdownCard/MarkdownCard.tsx +68 -0
  205. package/src/containers/MarkdownCard/index.ts +5 -0
  206. package/src/containers/MarkdownCard/snippet.ts +52 -0
  207. package/src/containers/MarkdownContainer/MarkdownContainer.stories.tsx +135 -0
  208. package/src/containers/MarkdownContainer/MarkdownContainer.tsx +145 -0
  209. package/src/containers/MarkdownContainer/index.ts +6 -0
  210. package/src/containers/index.ts +10 -0
  211. package/src/hooks/index.ts +3 -1
  212. package/src/hooks/useEditorMenuOptions.ts +68 -0
  213. package/src/hooks/useExtensions.tsx +264 -0
  214. package/src/hooks/useLinkQuery.ts +108 -0
  215. package/src/index.ts +8 -3
  216. package/src/meta.ts +9 -10
  217. package/src/operations/create-markdown.ts +20 -0
  218. package/src/operations/create.conversations.json +1 -0
  219. package/src/operations/create.test.ts +98 -0
  220. package/src/operations/create.ts +27 -0
  221. package/src/operations/definitions.ts +120 -0
  222. package/src/operations/index.ts +16 -0
  223. package/src/operations/open.ts +25 -0
  224. package/src/operations/scroll-to-anchor.ts +39 -0
  225. package/src/operations/set-view-mode.ts +24 -0
  226. package/src/operations/update.conversations.json +1 -0
  227. package/src/operations/update.test.ts +215 -0
  228. package/src/operations/update.ts +51 -0
  229. package/src/testing.ts +27 -0
  230. package/src/translations.ts +27 -30
  231. package/src/types/Markdown.ts +50 -0
  232. package/src/types/Settings.ts +65 -0
  233. package/src/types/capabilities.ts +50 -0
  234. package/src/types/events.ts +14 -0
  235. package/src/types/index.ts +5 -1
  236. package/src/types/types.ts +7 -50
  237. package/src/util.test.ts +44 -0
  238. package/src/util.tsx +100 -11
  239. package/dist/lib/browser/MarkdownContainer-BO5MZWA4.mjs +0 -771
  240. package/dist/lib/browser/MarkdownContainer-BO5MZWA4.mjs.map +0 -7
  241. package/dist/lib/browser/MarkdownPreview-XYP2VXI2.mjs +0 -80
  242. package/dist/lib/browser/MarkdownPreview-XYP2VXI2.mjs.map +0 -7
  243. package/dist/lib/browser/anchor-sort-UKJJ7ZNP.mjs +0 -32
  244. package/dist/lib/browser/anchor-sort-UKJJ7ZNP.mjs.map +0 -7
  245. package/dist/lib/browser/app-graph-serializer-7DKUUZSJ.mjs +0 -52
  246. package/dist/lib/browser/app-graph-serializer-7DKUUZSJ.mjs.map +0 -7
  247. package/dist/lib/browser/artifact-definition-JSUG6XPF.mjs +0 -145
  248. package/dist/lib/browser/artifact-definition-JSUG6XPF.mjs.map +0 -7
  249. package/dist/lib/browser/chunk-5JRBJCZM.mjs +0 -50
  250. package/dist/lib/browser/chunk-5JRBJCZM.mjs.map +0 -7
  251. package/dist/lib/browser/chunk-777RIED6.mjs +0 -16
  252. package/dist/lib/browser/chunk-777RIED6.mjs.map +0 -7
  253. package/dist/lib/browser/chunk-EPTSAJZM.mjs +0 -22
  254. package/dist/lib/browser/chunk-EPTSAJZM.mjs.map +0 -7
  255. package/dist/lib/browser/chunk-IZLATPXQ.mjs +0 -20
  256. package/dist/lib/browser/chunk-IZLATPXQ.mjs.map +0 -7
  257. package/dist/lib/browser/chunk-LFML7LC6.mjs +0 -51
  258. package/dist/lib/browser/chunk-LFML7LC6.mjs.map +0 -7
  259. package/dist/lib/browser/chunk-UANWRJZU.mjs +0 -79
  260. package/dist/lib/browser/chunk-UANWRJZU.mjs.map +0 -7
  261. package/dist/lib/browser/intent-resolver-3MXYO3MW.mjs +0 -64
  262. package/dist/lib/browser/intent-resolver-3MXYO3MW.mjs.map +0 -7
  263. package/dist/lib/browser/react-surface-NAXBGUR3.mjs +0 -205
  264. package/dist/lib/browser/react-surface-NAXBGUR3.mjs.map +0 -7
  265. package/dist/lib/browser/settings-KN75ZQY6.mjs +0 -28
  266. package/dist/lib/browser/settings-KN75ZQY6.mjs.map +0 -7
  267. package/dist/lib/browser/state-LZWTAS65.mjs +0 -37
  268. package/dist/lib/browser/state-LZWTAS65.mjs.map +0 -7
  269. package/dist/lib/node-esm/MarkdownContainer-J2NVCX2H.mjs +0 -772
  270. package/dist/lib/node-esm/MarkdownContainer-J2NVCX2H.mjs.map +0 -7
  271. package/dist/lib/node-esm/MarkdownPreview-JEXD3KSQ.mjs +0 -81
  272. package/dist/lib/node-esm/MarkdownPreview-JEXD3KSQ.mjs.map +0 -7
  273. package/dist/lib/node-esm/anchor-sort-IPIS5D5B.mjs +0 -33
  274. package/dist/lib/node-esm/anchor-sort-IPIS5D5B.mjs.map +0 -7
  275. package/dist/lib/node-esm/app-graph-serializer-YRMRPW7A.mjs +0 -53
  276. package/dist/lib/node-esm/app-graph-serializer-YRMRPW7A.mjs.map +0 -7
  277. package/dist/lib/node-esm/artifact-definition-6C2MOHGP.mjs +0 -146
  278. package/dist/lib/node-esm/artifact-definition-6C2MOHGP.mjs.map +0 -7
  279. package/dist/lib/node-esm/chunk-ACFGXH2K.mjs +0 -17
  280. package/dist/lib/node-esm/chunk-ACFGXH2K.mjs.map +0 -7
  281. package/dist/lib/node-esm/chunk-CWTFQSN7.mjs +0 -52
  282. package/dist/lib/node-esm/chunk-CWTFQSN7.mjs.map +0 -7
  283. package/dist/lib/node-esm/chunk-CXG7GMYP.mjs +0 -24
  284. package/dist/lib/node-esm/chunk-CXG7GMYP.mjs.map +0 -7
  285. package/dist/lib/node-esm/chunk-FWKOJW6J.mjs +0 -22
  286. package/dist/lib/node-esm/chunk-FWKOJW6J.mjs.map +0 -7
  287. package/dist/lib/node-esm/chunk-JEEQLO7C.mjs +0 -80
  288. package/dist/lib/node-esm/chunk-JEEQLO7C.mjs.map +0 -7
  289. package/dist/lib/node-esm/chunk-Q5DIKLN5.mjs +0 -51
  290. package/dist/lib/node-esm/chunk-Q5DIKLN5.mjs.map +0 -7
  291. package/dist/lib/node-esm/intent-resolver-BZYWV53A.mjs +0 -65
  292. package/dist/lib/node-esm/intent-resolver-BZYWV53A.mjs.map +0 -7
  293. package/dist/lib/node-esm/react-surface-BSAGEIN6.mjs +0 -206
  294. package/dist/lib/node-esm/react-surface-BSAGEIN6.mjs.map +0 -7
  295. package/dist/lib/node-esm/settings-KVP7TVX7.mjs +0 -29
  296. package/dist/lib/node-esm/settings-KVP7TVX7.mjs.map +0 -7
  297. package/dist/lib/node-esm/state-NW3W4JCQ.mjs +0 -38
  298. package/dist/lib/node-esm/state-NW3W4JCQ.mjs.map +0 -7
  299. package/dist/types/src/capabilities/capabilities.d.ts +0 -12
  300. package/dist/types/src/capabilities/capabilities.d.ts.map +0 -1
  301. package/dist/types/src/capabilities/intent-resolver.d.ts +0 -4
  302. package/dist/types/src/capabilities/intent-resolver.d.ts.map +0 -1
  303. package/dist/types/src/components/MarkdownContainer.d.ts +0 -18
  304. package/dist/types/src/components/MarkdownContainer.d.ts.map +0 -1
  305. package/dist/types/src/components/MarkdownContainer.stories.d.ts +0 -9
  306. package/dist/types/src/components/MarkdownContainer.stories.d.ts.map +0 -1
  307. package/dist/types/src/components/MarkdownPreview/MarkdownPreview.d.ts +0 -6
  308. package/dist/types/src/components/MarkdownPreview/MarkdownPreview.d.ts.map +0 -1
  309. package/dist/types/src/components/MarkdownPreview/MarkdownPreview.stories.d.ts +0 -17
  310. package/dist/types/src/components/MarkdownPreview/MarkdownPreview.stories.d.ts.map +0 -1
  311. package/dist/types/src/components/MarkdownPreview/index.d.ts +0 -4
  312. package/dist/types/src/components/MarkdownPreview/index.d.ts.map +0 -1
  313. package/dist/types/src/components/Suggestions.stories.d.ts +0 -12
  314. package/dist/types/src/components/Suggestions.stories.d.ts.map +0 -1
  315. package/dist/types/src/components/Toolbar.stories.d.ts +0 -11
  316. package/dist/types/src/components/Toolbar.stories.d.ts.map +0 -1
  317. package/dist/types/src/events.d.ts +0 -4
  318. package/dist/types/src/events.d.ts.map +0 -1
  319. package/dist/types/src/extensions.d.ts +0 -24
  320. package/dist/types/src/extensions.d.ts.map +0 -1
  321. package/dist/types/src/hooks/useSelectCurrentThread.d.ts +0 -6
  322. package/dist/types/src/hooks/useSelectCurrentThread.d.ts.map +0 -1
  323. package/dist/types/src/types/schema.d.ts +0 -35
  324. package/dist/types/src/types/schema.d.ts.map +0 -1
  325. package/src/capabilities/capabilities.ts +0 -20
  326. package/src/capabilities/intent-resolver.ts +0 -63
  327. package/src/components/MarkdownContainer.stories.tsx +0 -103
  328. package/src/components/MarkdownContainer.tsx +0 -241
  329. package/src/components/MarkdownPreview/MarkdownPreview.stories.tsx +0 -74
  330. package/src/components/MarkdownPreview/MarkdownPreview.tsx +0 -71
  331. package/src/components/MarkdownPreview/index.ts +0 -9
  332. package/src/components/Suggestions.stories.tsx +0 -215
  333. package/src/components/Toolbar.stories.tsx +0 -113
  334. package/src/events.ts +0 -11
  335. package/src/extensions.tsx +0 -328
  336. package/src/hooks/useSelectCurrentThread.tsx +0 -56
  337. package/src/types/schema.ts +0 -39
@@ -0,0 +1,215 @@
1
+ //
2
+ // Copyright 2025 DXOS.org
3
+ //
4
+
5
+ import { describe, expect, it } from '@effect/vitest';
6
+ import * as Effect from 'effect/Effect';
7
+
8
+ import { MemoizedAiService } from '@dxos/ai/testing';
9
+ import { AgentService } from '@dxos/assistant';
10
+ import { AssistantTestLayer } from '@dxos/assistant/testing';
11
+ import { Blueprint } from '@dxos/blueprints';
12
+ import { SpaceProperties } from '@dxos/client-protocol';
13
+ import { Database, Feed, Obj, Query, Ref } from '@dxos/echo';
14
+ import { Collection } from '@dxos/echo';
15
+ import { TestHelpers } from '@dxos/effect/testing';
16
+ import { invariant } from '@dxos/invariant';
17
+ import { ObjectId } from '@dxos/keys';
18
+ import { Operation } from '@dxos/operation';
19
+ import { Markdown } from '@dxos/plugin-markdown/types';
20
+ import { HasSubject } from '@dxos/types';
21
+ import { trim } from '@dxos/util';
22
+
23
+ import { WithProperties } from '#testing';
24
+
25
+ import MarkdownBlueprint from '../blueprints/markdown-blueprint';
26
+ import { Update } from './definitions';
27
+ import { MarkdownOperationHandlerSet } from './index';
28
+
29
+ ObjectId.dangerouslyDisableRandomness();
30
+
31
+ const TestLayer = AssistantTestLayer({
32
+ aiServicePreset: 'edge-remote',
33
+ operationHandlers: MarkdownOperationHandlerSet,
34
+ types: [
35
+ SpaceProperties,
36
+ Collection.Collection,
37
+ Blueprint.Blueprint,
38
+ Markdown.Document,
39
+ HasSubject.HasSubject,
40
+ Feed.Feed,
41
+ ],
42
+ blueprints: [MarkdownBlueprint.make()],
43
+ tracing: 'pretty',
44
+ });
45
+
46
+ describe('update', () => {
47
+ it.effect(
48
+ 'call a function to update a markdown document',
49
+ Effect.fnUntraced(
50
+ function* (_) {
51
+ const doc = Markdown.make({
52
+ name: 'BlueYard',
53
+ content: 'Founders and portfolio of BlueYard.',
54
+ });
55
+ yield* Database.add(doc);
56
+
57
+ yield* Operation.invoke(Update, {
58
+ doc: Ref.make(doc),
59
+ edits: [{ oldString: 'Founders', newString: '# Founders' }],
60
+ });
61
+
62
+ const updatedDoc = yield* Database.resolve(Obj.getDXN(doc), Markdown.Document);
63
+ expect(updatedDoc.name).toBe(doc.name);
64
+ const text = yield* Database.load(updatedDoc.content);
65
+ expect(text.content).toBe('# Founders and portfolio of BlueYard.');
66
+ },
67
+ WithProperties,
68
+ Effect.provide(TestLayer),
69
+ TestHelpers.provideTestContext,
70
+ ),
71
+ );
72
+
73
+ it.effect(
74
+ 'create and update a markdown document',
75
+ Effect.fnUntraced(
76
+ function* (_) {
77
+ const agent = yield* AgentService.createSession({
78
+ blueprints: [MarkdownBlueprint.make()],
79
+ });
80
+
81
+ yield* agent.submitPrompt('Create a document with a cookie recipe.');
82
+ yield* agent.waitForCompletion();
83
+ {
84
+ const docs = yield* Database.runQuery(Query.type(Markdown.Document));
85
+ if (docs.length !== 1) {
86
+ throw new Error(`Expected 1 document; got ${docs.length}: ${docs.map((_) => _.name)}`);
87
+ }
88
+
89
+ const doc = docs[0];
90
+ invariant(Obj.instanceOf(Markdown.Document, doc));
91
+ console.log({
92
+ name: doc.name,
93
+ content: yield* Database.load(doc.content).pipe(Effect.map((_) => _.content)),
94
+ });
95
+ }
96
+
97
+ yield* agent.submitPrompt('Add a section with a holiday-themed variation.');
98
+ yield* agent.waitForCompletion();
99
+ {
100
+ const docs = yield* Database.runQuery(Query.type(Markdown.Document));
101
+ if (docs.length !== 1) {
102
+ throw new Error(`Expected 1 document; got ${docs.length}: ${docs.map((_) => _.name)}`);
103
+ }
104
+
105
+ const doc = docs[0];
106
+ invariant(Obj.instanceOf(Markdown.Document, doc));
107
+ console.log({
108
+ name: doc.name,
109
+ content: yield* Database.load(doc.content).pipe(Effect.map((_) => _.content)),
110
+ });
111
+ }
112
+ },
113
+ WithProperties,
114
+ Effect.provide(TestLayer),
115
+ TestHelpers.provideTestContext,
116
+ ),
117
+ MemoizedAiService.isGenerationEnabled() ? 240_000 : 30_000,
118
+ );
119
+
120
+ it.effect(
121
+ 'update existing document',
122
+ Effect.fnUntraced(
123
+ function* (_) {
124
+ const document = yield* Database.add(
125
+ Markdown.make({
126
+ name: 'Cookie Recipe',
127
+ content: trim`
128
+ Ingredients:
129
+ - 2 cups of ???
130
+ - 1 cup of sugar
131
+ - 1 cup of butter
132
+ - 1 cup of eggs
133
+ `,
134
+ }),
135
+ );
136
+ const agent = yield* AgentService.createSession({
137
+ blueprints: [MarkdownBlueprint.make()],
138
+ context: [Ref.make(document)],
139
+ });
140
+
141
+ yield* agent.submitPrompt('Add the missing ingredient (its flour).');
142
+ yield* agent.waitForCompletion();
143
+
144
+ {
145
+ const docs = yield* Database.runQuery(Query.type(Markdown.Document));
146
+ if (docs.length !== 1) {
147
+ throw new Error(`Expected 1 document; got ${docs.length}: ${docs.map((_) => _.name)}`);
148
+ }
149
+
150
+ const doc = docs[0];
151
+ invariant(Obj.instanceOf(Markdown.Document, doc));
152
+ const content = yield* Database.load(doc.content).pipe(Effect.map((_) => _.content));
153
+ console.log({
154
+ name: doc.name,
155
+ content: yield* Database.load(doc.content).pipe(Effect.map((_) => _.content)),
156
+ });
157
+ expect(content.toLowerCase()).toContain('flour');
158
+ }
159
+ },
160
+ WithProperties,
161
+ Effect.provide(TestLayer),
162
+ TestHelpers.provideTestContext,
163
+ ),
164
+ MemoizedAiService.isGenerationEnabled() ? 240_000 : 30_000,
165
+ );
166
+
167
+ it.effect(
168
+ 'add lines to document one by one',
169
+ Effect.fnUntraced(
170
+ function* (_) {
171
+ const document = yield* Database.add(
172
+ Markdown.make({
173
+ name: 'Shopping list',
174
+ content: trim`
175
+ # Shopping list
176
+ `,
177
+ }),
178
+ );
179
+ const agent = yield* AgentService.createSession({
180
+ blueprints: [MarkdownBlueprint.make()],
181
+ context: [Ref.make(document)],
182
+ });
183
+
184
+ yield* agent.submitPrompt('Add milk to the shopping list.');
185
+ yield* agent.waitForCompletion();
186
+ yield* agent.submitPrompt('Add bread to the shopping list.');
187
+ yield* agent.waitForCompletion();
188
+ yield* agent.submitPrompt('Add eggs to the shopping list.');
189
+ yield* agent.waitForCompletion();
190
+
191
+ {
192
+ const docs = yield* Database.runQuery(Query.type(Markdown.Document));
193
+ if (docs.length !== 1) {
194
+ throw new Error(`Expected 1 document; got ${docs.length}: ${docs.map((_) => _.name)}`);
195
+ }
196
+
197
+ const doc = docs[0];
198
+ invariant(Obj.instanceOf(Markdown.Document, doc));
199
+ const content = yield* Database.load(doc.content).pipe(Effect.map((_) => _.content));
200
+ console.log({
201
+ name: doc.name,
202
+ content: yield* Database.load(doc.content).pipe(Effect.map((_) => _.content)),
203
+ });
204
+ expect(content.toLowerCase()).toContain('milk');
205
+ expect(content.toLowerCase()).toContain('bread');
206
+ expect(content.toLowerCase()).toContain('eggs');
207
+ }
208
+ },
209
+ WithProperties,
210
+ Effect.provide(TestLayer),
211
+ TestHelpers.provideTestContext,
212
+ ),
213
+ MemoizedAiService.isGenerationEnabled() ? 240_000 : 30_000,
214
+ );
215
+ });
@@ -0,0 +1,51 @@
1
+ //
2
+ // Copyright 2025 DXOS.org
3
+ //
4
+
5
+ import { next as A, type Doc } from '@automerge/automerge';
6
+ import * as Effect from 'effect/Effect';
7
+
8
+ import { Database } from '@dxos/echo';
9
+ import { DocAccessor, createDocAccessor } from '@dxos/echo-db';
10
+ import { Operation } from '@dxos/operation';
11
+
12
+ import { Update } from './definitions';
13
+
14
+ const handler: Operation.WithHandler<typeof Update> = Update.pipe(
15
+ Operation.withHandler(
16
+ Effect.fn(function* ({ doc, edits }) {
17
+ const content = yield* doc.pipe(
18
+ Database.load,
19
+ Effect.map((_) => _.content),
20
+ Effect.flatMap(Database.load),
21
+ );
22
+ const accessor = createDocAccessor(content, ['content']);
23
+
24
+ for (const edit of edits) {
25
+ accessor.handle.change((doc: Doc<typeof content>) => {
26
+ const text = DocAccessor.getValue<string>(accessor);
27
+ if (edit.replaceAll) {
28
+ let idx = text.indexOf(edit.oldString);
29
+ while (idx !== -1) {
30
+ A.splice(doc, accessor.path as A.Prop[], idx, edit.oldString.length, edit.newString);
31
+ const updated = DocAccessor.getValue<string>(accessor);
32
+ idx = updated.indexOf(edit.oldString, idx + edit.newString.length);
33
+ }
34
+ } else {
35
+ const idx = text.indexOf(edit.oldString);
36
+ if (idx === -1) {
37
+ throw new Error(`Edit not found: ${JSON.stringify(edit.oldString)}`);
38
+ }
39
+ A.splice(doc, accessor.path as A.Prop[], idx, edit.oldString.length, edit.newString);
40
+ }
41
+ });
42
+ }
43
+
44
+ return {
45
+ newContent: DocAccessor.getValue<string>(accessor),
46
+ };
47
+ }),
48
+ ),
49
+ );
50
+
51
+ export default handler;
package/src/testing.ts ADDED
@@ -0,0 +1,27 @@
1
+ //
2
+ // Copyright 2025 DXOS.org
3
+ //
4
+
5
+ import * as Toolkit from '@effect/ai/Toolkit';
6
+ import * as Effect from 'effect/Effect';
7
+
8
+ import { SpaceProperties } from '@dxos/client-protocol';
9
+ import { Obj, Ref } from '@dxos/echo';
10
+ import { Database } from '@dxos/echo';
11
+ import { Collection } from '@dxos/echo';
12
+
13
+ // TODO(wittjosiah): Factor out.
14
+ export const WithProperties = <A, E, R>(effect: Effect.Effect<A, E, R>): Effect.Effect<A, E, R | Database.Service> =>
15
+ Effect.zipRight(
16
+ Effect.gen(function* () {
17
+ // TODO(wittjosiah): Remove cast.
18
+ yield* Database.add(
19
+ Obj.make(SpaceProperties, {
20
+ [Collection.Collection.typename]: Ref.make(Collection.make()),
21
+ }) as any,
22
+ );
23
+ }),
24
+ effect,
25
+ );
26
+
27
+ export const testToolkit = Toolkit.empty as Toolkit.Toolkit<any>;
@@ -3,44 +3,41 @@
3
3
  //
4
4
 
5
5
  import { type Resource } from '@dxos/react-ui';
6
+ import { translations as editorTranslations } from '@dxos/react-ui-editor';
6
7
 
7
- import { meta } from './meta';
8
- import { DocumentType } from './types';
8
+ import { meta } from '#meta';
9
+ import { Markdown } from '#types';
9
10
 
10
11
  export const translations = [
11
12
  {
12
13
  'en-US': {
13
- [DocumentType.typename]: {
14
- 'typename label': 'Document',
15
- 'typename label_zero': 'Documents',
16
- 'typename label_one': 'Document',
17
- 'typename label_other': 'Documents',
18
- 'object name placeholder': 'New document',
14
+ [Markdown.Document.typename]: {
15
+ 'typename.label': 'Document',
16
+ 'typename.label_zero': 'Documents',
17
+ 'typename.label_one': 'Document',
18
+ 'typename.label_other': 'Documents',
19
+ 'object-name.placeholder': 'New document',
20
+ 'add-object.label': 'Add document',
21
+ 'rename-object.label': 'Rename document',
22
+ 'delete-object.label': 'Delete document',
23
+ 'object-deleted.label': 'Document deleted',
19
24
  },
20
25
  [meta.id]: {
21
- 'plugin name': 'Editor',
22
- 'choose markdown from space dialog title': 'Choose one or more documents to add',
23
- // TODO(burdon): Style-guide for user-facing text (e.g., hints, questions, capitalization, etc.)
24
- 'empty choose markdown from space message': 'None available; try creating a new one instead?',
25
- 'chooser done label': 'Add selected',
26
- 'editor placeholder': '',
27
- 'editor input mode label': 'Editor input mode',
28
- 'select editor input mode placeholder': 'Select editor input mode…',
29
- 'settings editor input mode default label': 'Default',
30
- 'settings editor input mode vim label': 'Vim',
31
- 'settings editor input mode vscode label': 'VS Code',
32
- 'settings toolbar label': 'Show toolbar',
33
- 'settings numbered headings label': 'Numbered headings',
34
- 'settings folding label': 'Folding',
35
- 'settings experimental label': 'Enable experimental features',
36
- 'settings debug label': 'Enable debugging features',
37
- 'settings debug placeholder': 'Typewriter script...',
38
- 'toggle view mode label': 'Toggle read-only',
39
- 'default view mode label': 'Default view mode',
40
- 'upload image label': 'Upload image',
41
- 'fallback title': 'Untitled',
42
- 'navigate to document label': 'Open document',
26
+ 'plugin.name': 'Editor',
27
+ 'choose-markdown-from-space-dialog.title': 'Choose one or more documents to add',
28
+ 'empty-choose-markdown-from-space.message': 'None available; try creating a new one instead?',
29
+ 'chooser-done.label': 'Add selected',
30
+ 'editor.placeholder': 'Start typing…',
31
+ 'toggle-view-mode.label': 'Toggle read-only',
32
+ 'upload-image.label': 'Upload image',
33
+ 'fallback.title': 'Untitled',
34
+ 'navigate-to-document.label': 'Open document',
35
+ 'words.label': 'words',
36
+ 'words.label_zero': 'words',
37
+ 'words.label_one': 'word',
38
+ 'words.label_other': 'words',
43
39
  },
44
40
  },
45
41
  },
42
+ ...editorTranslations,
46
43
  ] as const satisfies Resource[];
@@ -0,0 +1,50 @@
1
+ //
2
+ // Copyright 2024 DXOS.org
3
+ //
4
+
5
+ import * as Schema from 'effect/Schema';
6
+
7
+ import { Annotation, Obj, Ref, Type } from '@dxos/echo';
8
+ import { DescriptionAnnotation, FormInputAnnotation, LabelAnnotation } from '@dxos/echo/internal';
9
+ import { Text } from '@dxos/schema';
10
+
11
+ // Re-export Settings as merged const/type (not as namespace).
12
+ import * as SettingsModule from './Settings';
13
+ export const Settings = SettingsModule.Settings;
14
+ export type Settings = SettingsModule.Settings;
15
+
16
+ /**
17
+ * Document Item type.
18
+ */
19
+ export const Document = Schema.Struct({
20
+ name: Schema.optional(Schema.String),
21
+ description: Schema.optional(Schema.String),
22
+ fallbackName: Schema.String.pipe(FormInputAnnotation.set(false), Schema.optional),
23
+ content: Ref.Ref(Text.Text).pipe(FormInputAnnotation.set(false)),
24
+ }).pipe(
25
+ Type.object({
26
+ typename: 'org.dxos.type.document',
27
+ version: '0.1.0',
28
+ }),
29
+ LabelAnnotation.set(['name', 'fallbackName']),
30
+ DescriptionAnnotation.set('description'),
31
+ Annotation.IconAnnotation.set({
32
+ icon: 'ph--text-aa--regular',
33
+ hue: 'indigo',
34
+ }),
35
+ );
36
+
37
+ export type Document = Schema.Schema.Type<typeof Document>;
38
+
39
+ /**
40
+ * Document factory.
41
+ */
42
+ export const make = ({
43
+ content = '',
44
+ ...props
45
+ }: Partial<{ name: string; fallbackName: string; content: string }> = {}) => {
46
+ const doc = Obj.make(Document, { ...props, content: Ref.make(Text.make({ content })) });
47
+ // TODO(dmaretskyi): We need a better way to set parents when creating hierarchies.
48
+ Obj.setParent(doc.content.target!, doc);
49
+ return doc;
50
+ };
@@ -0,0 +1,65 @@
1
+ //
2
+ // Copyright 2024 DXOS.org
3
+ //
4
+
5
+ // @import-as-namespace
6
+
7
+ import * as Schema from 'effect/Schema';
8
+
9
+ import { EditorInputMode, EditorViewMode } from '@dxos/ui-editor/types';
10
+
11
+ /**
12
+ * Plugin settings.
13
+ */
14
+ export const Settings = Schema.mutable(
15
+ Schema.Struct({
16
+ defaultViewMode: EditorViewMode.annotations({
17
+ title: 'Default view mode',
18
+ description: 'Set whether documents open in editing or read-only mode.',
19
+ }),
20
+ editorInputMode: Schema.optional(
21
+ EditorInputMode.annotations({
22
+ title: 'Editor input mode',
23
+ description: 'Choose keyboard bindings for the editor.',
24
+ }),
25
+ ),
26
+ toolbar: Schema.optional(
27
+ Schema.Boolean.annotations({
28
+ title: 'Show toolbar',
29
+ description: 'Display a formatting toolbar above the editor.',
30
+ }),
31
+ ),
32
+ numberedHeadings: Schema.optional(
33
+ Schema.Boolean.annotations({
34
+ title: 'Numbered headings',
35
+ description: 'Automatically number heading levels in the document.',
36
+ }),
37
+ ),
38
+ folding: Schema.optional(
39
+ Schema.Boolean.annotations({
40
+ title: 'Folding',
41
+ description: 'Allow collapsing and expanding sections by heading.',
42
+ }),
43
+ ),
44
+ experimental: Schema.optional(
45
+ Schema.Boolean.annotations({
46
+ title: 'Enable experimental features',
47
+ description: 'Turn on features that are still in development.',
48
+ }),
49
+ ),
50
+ debug: Schema.optional(
51
+ Schema.Boolean.annotations({
52
+ title: 'Enable debugging features',
53
+ description: 'Show developer tools and diagnostics for the editor.',
54
+ }),
55
+ ),
56
+ typewriter: Schema.optional(
57
+ Schema.String.annotations({
58
+ title: 'Typewriter script',
59
+ description: 'Script to replay typed input for testing purposes.',
60
+ }),
61
+ ),
62
+ }),
63
+ );
64
+
65
+ export interface Settings extends Schema.Schema.Type<typeof Settings> {}
@@ -0,0 +1,50 @@
1
+ //
2
+ // Copyright 2025 DXOS.org
3
+ //
4
+
5
+ import { type EditorView } from '@codemirror/view';
6
+ import { type Atom } from '@effect-atom/atom-react';
7
+ import * as Schema from 'effect/Schema';
8
+
9
+ import { Capability } from '@dxos/app-framework';
10
+ import { type EditorStateStore, type EditorViewMode } from '@dxos/ui-editor';
11
+
12
+ import { meta } from '#meta';
13
+
14
+ import type * as Markdown from './Markdown';
15
+ import { type MarkdownExtensionProvider } from './types';
16
+
17
+ /** Schema for persisted markdown state. */
18
+ export const MarkdownStateSchema = Schema.mutable(
19
+ Schema.Struct({
20
+ viewMode: Schema.Record({ key: Schema.String, value: Schema.String }),
21
+ }),
22
+ );
23
+
24
+ export type MarkdownState = {
25
+ viewMode: Record<string, EditorViewMode>;
26
+ };
27
+
28
+ export type EditorViewEntry = { view: EditorView; documentId: string };
29
+
30
+ export type EditorViewRegistry = {
31
+ register: (attendableId: string, view: EditorView, documentId: string) => void;
32
+ unregister: (attendableId: string) => void;
33
+ get: (attendableId: string) => EditorViewEntry | undefined;
34
+ };
35
+
36
+ export namespace MarkdownCapabilities {
37
+ export const Settings = Capability.make<Atom.Writable<Markdown.Settings>>(`${meta.id}.capability.settings`);
38
+
39
+ /** Persisted state atom for view mode per document. */
40
+ export const State = Capability.make<Atom.Writable<MarkdownState>>(`${meta.id}.capability.state`);
41
+
42
+ /** Editor state store for cursor positions, scroll state, etc. */
43
+ export const EditorState = Capability.make<EditorStateStore>(`${meta.id}.capability.editor-state`);
44
+
45
+ /** Registry of active EditorView instances keyed by attendable ID. */
46
+ export const EditorViews = Capability.make<EditorViewRegistry>(`${meta.id}.capability.editor-views`);
47
+
48
+ // TODO(burdon): Move to ./types (external API)?
49
+ export const Extensions = Capability.make<MarkdownExtensionProvider[]>(`${meta.id}.capability.extensions`);
50
+ }
@@ -0,0 +1,14 @@
1
+ //
2
+ // Copyright 2025 DXOS.org
3
+ //
4
+
5
+ import { type ActivationEvent } from '@dxos/app-framework';
6
+ import { AppActivationEvents } from '@dxos/app-toolkit';
7
+
8
+ import { meta } from '#meta';
9
+
10
+ export namespace MarkdownEvents {
11
+ export const SetupExtensions: ActivationEvent.ActivationEvent = AppActivationEvents.createStateEvent(
12
+ `${meta.id}.event.setup-extensions`,
13
+ );
14
+ }
@@ -2,5 +2,9 @@
2
2
  // Copyright 2024 DXOS.org
3
3
  //
4
4
 
5
- export * from './schema';
5
+ export * from './capabilities';
6
+ export * from './events';
6
7
  export * from './types';
8
+
9
+ export * as Markdown from './Markdown';
10
+ export * as Settings from './Settings';
@@ -2,44 +2,17 @@
2
2
  // Copyright 2023 DXOS.org
3
3
  //
4
4
 
5
- import { Schema } from 'effect';
5
+ import { type Extension } from '@codemirror/state';
6
6
 
7
- import { Type } from '@dxos/echo';
8
- import { type Extension } from '@dxos/react-ui-editor';
9
- import { EditorInputMode, EditorViewMode } from '@dxos/react-ui-editor/types';
7
+ import { type EditorViewMode } from '@dxos/ui-editor/types';
10
8
 
11
- import { DocumentType } from './schema';
12
- import { MARKDOWN_PLUGIN } from '../meta';
9
+ import { type Document } from './Markdown';
13
10
 
14
- const MARKDOWN_ACTION = `${MARKDOWN_PLUGIN}/action`;
11
+ // TODO(burdon): Remove these from ./types since not part of plugin-markdown API?
12
+ // TODO(wittjosiah): MarkdownExtensionProvider is a part of the MarkdownCapabilities api which should be in ./types.
15
13
 
16
- export namespace MarkdownAction {
17
- export class Create extends Schema.TaggedClass<Create>()(MARKDOWN_ACTION, {
18
- input: Schema.Struct({
19
- spaceId: Type.SpaceId,
20
- name: Schema.optional(Schema.String),
21
- content: Schema.optional(Schema.String),
22
- }),
23
- output: Schema.Struct({
24
- object: DocumentType,
25
- }),
26
- }) {}
27
-
28
- export class SetViewMode extends Schema.TaggedClass<SetViewMode>()(`${MARKDOWN_ACTION}/set-view-mode`, {
29
- input: Schema.Struct({
30
- id: Schema.String,
31
- viewMode: EditorViewMode,
32
- }),
33
- output: Schema.Void,
34
- }) {}
35
- }
36
-
37
- export type MarkdownProperties = Record<string, any>;
38
-
39
- // TODO(burdon): Async.
40
- export type MarkdownExtensionProvider = (props: { document?: DocumentType }) => Extension | undefined;
41
-
42
- export type OnChange = (text: string) => void;
14
+ // TODO(burdon): Async?
15
+ export type MarkdownExtensionProvider = (props: { document?: Document }) => Extension | undefined;
43
16
 
44
17
  export type MarkdownPluginState = {
45
18
  // Codemirror extensions provided by other plugins.
@@ -49,19 +22,3 @@ export type MarkdownPluginState = {
49
22
  // View mode per document.
50
23
  viewMode: Record<string, EditorViewMode>;
51
24
  };
52
-
53
- export const MarkdownSettingsSchema = Schema.mutable(
54
- Schema.Struct({
55
- defaultViewMode: EditorViewMode,
56
- editorInputMode: Schema.optional(EditorInputMode),
57
- experimental: Schema.optional(Schema.Boolean),
58
- debug: Schema.optional(Schema.Boolean),
59
- toolbar: Schema.optional(Schema.Boolean),
60
- typewriter: Schema.optional(Schema.String),
61
- // TODO(burdon): Per document settings.
62
- numberedHeadings: Schema.optional(Schema.Boolean),
63
- folding: Schema.optional(Schema.Boolean),
64
- }),
65
- );
66
-
67
- export type MarkdownSettingsProps = Schema.Schema.Type<typeof MarkdownSettingsSchema>;
@@ -0,0 +1,44 @@
1
+ //
2
+ // Copyright 2025 DXOS.org
3
+ //
4
+
5
+ import { describe, expect, it } from 'vitest';
6
+
7
+ import { trim } from '@dxos/util';
8
+
9
+ import { getFallbackName } from './util';
10
+
11
+ describe('markdown utils', () => {
12
+ it('getFallbackName', () => {
13
+ const tests = [
14
+ {
15
+ content: '',
16
+ expected: '',
17
+ },
18
+ {
19
+ content: trim`
20
+ ![img](https://dxos.network/dxos-logotype-blue.png)
21
+
22
+ # Welcome to Composer by DXOS
23
+
24
+ ## What is Composer?
25
+ `,
26
+ expected: 'Welcome to Composer by DXOS',
27
+ },
28
+ {
29
+ content: trim`
30
+ ![img](https://dxos.network/dxos-logotype-blue.png)
31
+
32
+ ---
33
+
34
+ This document is about the decetralized platform DXOS.
35
+ `,
36
+ expected: 'This document is about the…',
37
+ },
38
+ ];
39
+
40
+ tests.forEach(({ content, expected }) => {
41
+ expect(getFallbackName(content)).toBe(expected);
42
+ });
43
+ });
44
+ });