@dxos/plugin-markdown 0.8.4-main.c4373fc → 0.8.4-main.d9fc60f731

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 (409) hide show
  1. package/LICENSE +102 -5
  2. package/README.md +1 -1
  3. package/dist/lib/neutral/EditableMarkdownCard-AW7MD35U.mjs +34 -0
  4. package/dist/lib/neutral/EditableMarkdownCard-AW7MD35U.mjs.map +7 -0
  5. package/dist/lib/neutral/MarkdownArticle-Z4QRU3WD.mjs +126 -0
  6. package/dist/lib/neutral/MarkdownArticle-Z4QRU3WD.mjs.map +7 -0
  7. package/dist/lib/neutral/MarkdownCard-36P4AHYL.mjs +107 -0
  8. package/dist/lib/neutral/MarkdownCard-36P4AHYL.mjs.map +7 -0
  9. package/dist/lib/neutral/MarkdownPlugin.mjs +58 -0
  10. package/dist/lib/neutral/MarkdownPlugin.mjs.map +7 -0
  11. package/dist/lib/neutral/MarkdownPlugin.node.mjs +25 -0
  12. package/dist/lib/neutral/MarkdownPlugin.node.mjs.map +7 -0
  13. package/dist/lib/neutral/MarkdownPlugin.workerd.mjs +23 -0
  14. package/dist/lib/neutral/MarkdownPlugin.workerd.mjs.map +7 -0
  15. package/dist/lib/neutral/MarkdownSettings-YCTZJL5V.mjs +32 -0
  16. package/dist/lib/neutral/MarkdownSettings-YCTZJL5V.mjs.map +7 -0
  17. package/dist/lib/neutral/anchor-sort-37GOHBLW.mjs +32 -0
  18. package/dist/lib/neutral/anchor-sort-37GOHBLW.mjs.map +7 -0
  19. package/dist/lib/neutral/app-graph-serializer-EN5E3BMG.mjs +56 -0
  20. package/dist/lib/neutral/app-graph-serializer-EN5E3BMG.mjs.map +7 -0
  21. package/dist/lib/neutral/blueprint-definition-33OK2KUL.mjs +15 -0
  22. package/dist/lib/neutral/blueprint-definition-33OK2KUL.mjs.map +7 -0
  23. package/dist/lib/neutral/blueprints/index.mjs +8 -0
  24. package/dist/lib/neutral/capabilities/index.mjs +25 -0
  25. package/dist/lib/neutral/capabilities/index.mjs.map +7 -0
  26. package/dist/lib/neutral/capabilities/node.mjs +11 -0
  27. package/dist/lib/neutral/capabilities/node.mjs.map +7 -0
  28. package/dist/lib/neutral/chunk-36QFEVOZ.mjs +30 -0
  29. package/dist/lib/neutral/chunk-36QFEVOZ.mjs.map +7 -0
  30. package/dist/lib/neutral/chunk-A45UVZEH.mjs +285 -0
  31. package/dist/lib/neutral/chunk-A45UVZEH.mjs.map +7 -0
  32. package/dist/lib/neutral/chunk-E5NVTEKQ.mjs +8 -0
  33. package/dist/lib/neutral/chunk-E5NVTEKQ.mjs.map +7 -0
  34. package/dist/lib/neutral/chunk-J5LGTIGS.mjs +10 -0
  35. package/dist/lib/neutral/chunk-KDN4GKG2.mjs +98 -0
  36. package/dist/lib/neutral/chunk-KDN4GKG2.mjs.map +7 -0
  37. package/dist/lib/neutral/chunk-LXNSKCPD.mjs +44 -0
  38. package/dist/lib/neutral/chunk-LXNSKCPD.mjs.map +7 -0
  39. package/dist/lib/neutral/comment-config-ZEA66BUR.mjs +31 -0
  40. package/dist/lib/neutral/comment-config-ZEA66BUR.mjs.map +7 -0
  41. package/dist/lib/neutral/components/index.mjs +371 -0
  42. package/dist/lib/neutral/components/index.mjs.map +7 -0
  43. package/dist/lib/neutral/containers/index.mjs +13 -0
  44. package/dist/lib/neutral/containers/index.mjs.map +7 -0
  45. package/dist/lib/neutral/create-HONLDBVT.mjs +28 -0
  46. package/dist/lib/neutral/create-HONLDBVT.mjs.map +7 -0
  47. package/dist/lib/neutral/create-markdown-UCPD2Z3V.mjs +20 -0
  48. package/dist/lib/neutral/create-markdown-UCPD2Z3V.mjs.map +7 -0
  49. package/dist/lib/neutral/create-object-VU3KX663.mjs +28 -0
  50. package/dist/lib/neutral/create-object-VU3KX663.mjs.map +7 -0
  51. package/dist/lib/neutral/hooks/index.mjs +316 -0
  52. package/dist/lib/neutral/hooks/index.mjs.map +7 -0
  53. package/dist/lib/neutral/index.mjs +42 -0
  54. package/dist/lib/neutral/meta.json +1 -0
  55. package/dist/lib/neutral/meta.mjs +8 -0
  56. package/dist/lib/neutral/open-VVDMNJ7J.mjs +20 -0
  57. package/dist/lib/neutral/open-VVDMNJ7J.mjs.map +7 -0
  58. package/dist/lib/neutral/operation-handler-2ARMPBGZ.mjs +13 -0
  59. package/dist/lib/neutral/operation-handler-2ARMPBGZ.mjs.map +7 -0
  60. package/dist/lib/neutral/operations/index.mjs +8 -0
  61. package/dist/lib/neutral/operations/index.mjs.map +7 -0
  62. package/dist/lib/neutral/plugin.mjs +16 -0
  63. package/dist/lib/neutral/plugin.mjs.map +7 -0
  64. package/dist/lib/neutral/react-surface-EMYFM37T.mjs +119 -0
  65. package/dist/lib/neutral/react-surface-EMYFM37T.mjs.map +7 -0
  66. package/dist/lib/neutral/scroll-to-anchor-Y3P676QG.mjs +47 -0
  67. package/dist/lib/neutral/scroll-to-anchor-Y3P676QG.mjs.map +7 -0
  68. package/dist/lib/neutral/set-view-mode-JZB7UXIF.mjs +24 -0
  69. package/dist/lib/neutral/set-view-mode-JZB7UXIF.mjs.map +7 -0
  70. package/dist/lib/neutral/settings-TDGDLCUR.mjs +34 -0
  71. package/dist/lib/neutral/settings-TDGDLCUR.mjs.map +7 -0
  72. package/dist/lib/neutral/state-5COCF5PN.mjs +44 -0
  73. package/dist/lib/neutral/state-5COCF5PN.mjs.map +7 -0
  74. package/dist/lib/neutral/testing.mjs +30 -0
  75. package/dist/lib/neutral/testing.mjs.map +7 -0
  76. package/dist/lib/neutral/translations.mjs +44 -0
  77. package/dist/lib/neutral/translations.mjs.map +7 -0
  78. package/dist/lib/neutral/types/index.mjs +16 -0
  79. package/dist/lib/neutral/types/index.mjs.map +7 -0
  80. package/dist/lib/neutral/update-markdown-F25F4EPF.mjs +44 -0
  81. package/dist/lib/neutral/update-markdown-F25F4EPF.mjs.map +7 -0
  82. package/dist/types/src/MarkdownPlugin.d.ts +3 -1
  83. package/dist/types/src/MarkdownPlugin.d.ts.map +1 -1
  84. package/dist/types/src/MarkdownPlugin.node.d.ts +4 -0
  85. package/dist/types/src/MarkdownPlugin.node.d.ts.map +1 -0
  86. package/dist/types/src/MarkdownPlugin.test.d.ts +2 -0
  87. package/dist/types/src/MarkdownPlugin.test.d.ts.map +1 -0
  88. package/dist/types/src/MarkdownPlugin.workerd.d.ts +4 -0
  89. package/dist/types/src/MarkdownPlugin.workerd.d.ts.map +1 -0
  90. package/dist/types/src/blueprints/index.d.ts +2 -0
  91. package/dist/types/src/blueprints/index.d.ts.map +1 -0
  92. package/dist/types/src/blueprints/markdown-blueprint.d.ts +4 -0
  93. package/dist/types/src/blueprints/markdown-blueprint.d.ts.map +1 -0
  94. package/dist/types/src/capabilities/anchor-sort.d.ts +4 -4
  95. package/dist/types/src/capabilities/anchor-sort.d.ts.map +1 -1
  96. package/dist/types/src/capabilities/app-graph-serializer.d.ts +3 -2
  97. package/dist/types/src/capabilities/app-graph-serializer.d.ts.map +1 -1
  98. package/dist/types/src/capabilities/blueprint-definition.d.ts +5 -4
  99. package/dist/types/src/capabilities/blueprint-definition.d.ts.map +1 -1
  100. package/dist/types/src/capabilities/comment-config.d.ts +12 -0
  101. package/dist/types/src/capabilities/comment-config.d.ts.map +1 -0
  102. package/dist/types/src/capabilities/create-object.d.ts +11 -0
  103. package/dist/types/src/capabilities/create-object.d.ts.map +1 -0
  104. package/dist/types/src/capabilities/index.d.ts +22 -18
  105. package/dist/types/src/capabilities/index.d.ts.map +1 -1
  106. package/dist/types/src/capabilities/node.d.ts +10 -0
  107. package/dist/types/src/capabilities/node.d.ts.map +1 -0
  108. package/dist/types/src/capabilities/operation-handler.d.ts +6 -0
  109. package/dist/types/src/capabilities/operation-handler.d.ts.map +1 -0
  110. package/dist/types/src/capabilities/react-surface.d.ts +3 -2
  111. package/dist/types/src/capabilities/react-surface.d.ts.map +1 -1
  112. package/dist/types/src/capabilities/settings.d.ts +4 -2
  113. package/dist/types/src/capabilities/settings.d.ts.map +1 -1
  114. package/dist/types/src/capabilities/state.d.ts +4 -9
  115. package/dist/types/src/capabilities/state.d.ts.map +1 -1
  116. package/dist/types/src/components/MarkdownEditor/FileUpload.d.ts +11 -0
  117. package/dist/types/src/components/MarkdownEditor/FileUpload.d.ts.map +1 -0
  118. package/dist/types/src/components/MarkdownEditor/MarkdownEditor.d.ts +52 -21
  119. package/dist/types/src/components/MarkdownEditor/MarkdownEditor.d.ts.map +1 -1
  120. package/dist/types/src/components/MarkdownEditor/MarkdownEditor.stories.d.ts +5 -110
  121. package/dist/types/src/components/MarkdownEditor/MarkdownEditor.stories.d.ts.map +1 -1
  122. package/dist/types/src/components/MarkdownEditor/MarkdownEditorContent.d.ts +33 -0
  123. package/dist/types/src/components/MarkdownEditor/MarkdownEditorContent.d.ts.map +1 -0
  124. package/dist/types/src/components/MarkdownEditor/MarkdownEditorToolbar.d.ts +13 -0
  125. package/dist/types/src/components/MarkdownEditor/MarkdownEditorToolbar.d.ts.map +1 -0
  126. package/dist/types/src/components/MarkdownSettings/MarkdownSettings.d.ts +4 -4
  127. package/dist/types/src/components/MarkdownSettings/MarkdownSettings.d.ts.map +1 -1
  128. package/dist/types/src/components/MarkdownSettings/MarkdownSettings.stories.d.ts +94 -0
  129. package/dist/types/src/components/MarkdownSettings/MarkdownSettings.stories.d.ts.map +1 -0
  130. package/dist/types/src/components/MarkdownSettings/index.d.ts +1 -1
  131. package/dist/types/src/components/MarkdownSettings/index.d.ts.map +1 -1
  132. package/dist/types/src/components/index.d.ts +3 -3
  133. package/dist/types/src/components/index.d.ts.map +1 -1
  134. package/dist/types/src/containers/EditableMarkdownCard/EditableMarkdownCard.d.ts +15 -0
  135. package/dist/types/src/containers/EditableMarkdownCard/EditableMarkdownCard.d.ts.map +1 -0
  136. package/dist/types/src/containers/EditableMarkdownCard/EditableMarkdownCard.stories.d.ts +9 -0
  137. package/dist/types/src/containers/EditableMarkdownCard/EditableMarkdownCard.stories.d.ts.map +1 -0
  138. package/dist/types/src/containers/EditableMarkdownCard/index.d.ts +3 -0
  139. package/dist/types/src/containers/EditableMarkdownCard/index.d.ts.map +1 -0
  140. package/dist/types/src/containers/MarkdownArticle/MarkdownArticle.d.ts +40 -0
  141. package/dist/types/src/containers/MarkdownArticle/MarkdownArticle.d.ts.map +1 -0
  142. package/dist/types/src/containers/MarkdownArticle/MarkdownArticle.stories.d.ts +97 -0
  143. package/dist/types/src/containers/MarkdownArticle/MarkdownArticle.stories.d.ts.map +1 -0
  144. package/dist/types/src/containers/MarkdownArticle/index.d.ts +3 -0
  145. package/dist/types/src/containers/MarkdownArticle/index.d.ts.map +1 -0
  146. package/dist/types/src/containers/MarkdownCard/MarkdownCard.d.ts +8 -0
  147. package/dist/types/src/containers/MarkdownCard/MarkdownCard.d.ts.map +1 -0
  148. package/dist/types/src/containers/MarkdownCard/MarkdownCard.stories.d.ts +9 -0
  149. package/dist/types/src/containers/MarkdownCard/MarkdownCard.stories.d.ts.map +1 -0
  150. package/dist/types/src/containers/MarkdownCard/index.d.ts +2 -0
  151. package/dist/types/src/containers/MarkdownCard/index.d.ts.map +1 -0
  152. package/dist/types/src/containers/MarkdownCard/snippet.d.ts +17 -0
  153. package/dist/types/src/containers/MarkdownCard/snippet.d.ts.map +1 -0
  154. package/dist/types/src/containers/index.d.ts +6 -0
  155. package/dist/types/src/containers/index.d.ts.map +1 -0
  156. package/dist/types/src/hooks/index.d.ts +3 -1
  157. package/dist/types/src/hooks/index.d.ts.map +1 -1
  158. package/dist/types/src/hooks/useEditorMenuOptions.d.ts +9 -0
  159. package/dist/types/src/hooks/useEditorMenuOptions.d.ts.map +1 -0
  160. package/dist/types/src/hooks/useExtensions.d.ts +25 -0
  161. package/dist/types/src/hooks/useExtensions.d.ts.map +1 -0
  162. package/dist/types/src/hooks/useLinkQuery.d.ts +4 -0
  163. package/dist/types/src/hooks/useLinkQuery.d.ts.map +1 -0
  164. package/dist/types/src/index.d.ts +2 -3
  165. package/dist/types/src/index.d.ts.map +1 -1
  166. package/dist/types/src/meta.d.ts +2 -2
  167. package/dist/types/src/meta.d.ts.map +1 -1
  168. package/dist/types/src/operations/create-markdown.d.ts +5 -0
  169. package/dist/types/src/operations/create-markdown.d.ts.map +1 -0
  170. package/dist/types/src/operations/create.d.ts +5 -0
  171. package/dist/types/src/operations/create.d.ts.map +1 -0
  172. package/dist/types/src/operations/create.test.d.ts +2 -0
  173. package/dist/types/src/operations/create.test.d.ts.map +1 -0
  174. package/dist/types/src/operations/index.d.ts +3 -0
  175. package/dist/types/src/operations/index.d.ts.map +1 -0
  176. package/dist/types/src/operations/open.d.ts +5 -0
  177. package/dist/types/src/operations/open.d.ts.map +1 -0
  178. package/dist/types/src/operations/scroll-to-anchor.d.ts +5 -0
  179. package/dist/types/src/operations/scroll-to-anchor.d.ts.map +1 -0
  180. package/dist/types/src/operations/set-view-mode.d.ts +5 -0
  181. package/dist/types/src/operations/set-view-mode.d.ts.map +1 -0
  182. package/dist/types/src/operations/update-markdown.d.ts +5 -0
  183. package/dist/types/src/operations/update-markdown.d.ts.map +1 -0
  184. package/dist/types/src/operations/update.test.d.ts +2 -0
  185. package/dist/types/src/operations/update.test.d.ts.map +1 -0
  186. package/dist/types/src/plugin.d.ts +4 -0
  187. package/dist/types/src/plugin.d.ts.map +1 -0
  188. package/dist/types/src/testing.d.ts +7 -0
  189. package/dist/types/src/testing.d.ts.map +1 -0
  190. package/dist/types/src/translations.d.ts +74 -33
  191. package/dist/types/src/translations.d.ts.map +1 -1
  192. package/dist/types/src/types/Markdown.d.ts +35 -32
  193. package/dist/types/src/types/Markdown.d.ts.map +1 -1
  194. package/dist/types/src/types/MarkdownCapabilities.d.ts +32 -0
  195. package/dist/types/src/types/MarkdownCapabilities.d.ts.map +1 -0
  196. package/dist/types/src/types/MarkdownEvents.d.ts +3 -0
  197. package/dist/types/src/types/MarkdownEvents.d.ts.map +1 -0
  198. package/dist/types/src/types/MarkdownOperation.d.ts +64 -0
  199. package/dist/types/src/types/MarkdownOperation.d.ts.map +1 -0
  200. package/dist/types/src/types/Settings.d.ts +30 -0
  201. package/dist/types/src/types/Settings.d.ts.map +1 -0
  202. package/dist/types/src/types/index.d.ts +5 -2
  203. package/dist/types/src/types/index.d.ts.map +1 -1
  204. package/dist/types/src/types/types.d.ts +3 -2
  205. package/dist/types/src/types/types.d.ts.map +1 -1
  206. package/dist/types/src/util.d.ts +8 -5
  207. package/dist/types/src/util.d.ts.map +1 -1
  208. package/dist/types/src/util.test.d.ts +2 -0
  209. package/dist/types/src/util.test.d.ts.map +1 -0
  210. package/dist/types/tsconfig.tsbuildinfo +1 -1
  211. package/package.json +152 -71
  212. package/src/MarkdownPlugin.node.ts +20 -0
  213. package/src/MarkdownPlugin.test.ts +26 -0
  214. package/src/MarkdownPlugin.tsx +34 -103
  215. package/src/MarkdownPlugin.workerd.ts +19 -0
  216. package/src/blueprints/index.ts +5 -0
  217. package/src/blueprints/markdown-blueprint.ts +43 -0
  218. package/src/capabilities/anchor-sort.ts +29 -22
  219. package/src/capabilities/app-graph-serializer.ts +53 -43
  220. package/src/capabilities/blueprint-definition.ts +11 -31
  221. package/src/capabilities/comment-config.ts +33 -0
  222. package/src/capabilities/create-object.ts +31 -0
  223. package/src/capabilities/index.ts +15 -12
  224. package/src/capabilities/node.ts +13 -0
  225. package/src/capabilities/operation-handler.ts +16 -0
  226. package/src/capabilities/react-surface.tsx +116 -103
  227. package/src/capabilities/settings.ts +30 -18
  228. package/src/capabilities/state.ts +41 -25
  229. package/src/components/MarkdownEditor/FileUpload.tsx +63 -0
  230. package/src/components/MarkdownEditor/MarkdownEditor.stories.tsx +63 -40
  231. package/src/components/MarkdownEditor/MarkdownEditor.tsx +247 -255
  232. package/src/components/MarkdownEditor/MarkdownEditorContent.tsx +171 -0
  233. package/src/components/MarkdownEditor/MarkdownEditorToolbar.tsx +47 -0
  234. package/src/components/MarkdownSettings/MarkdownSettings.stories.tsx +40 -0
  235. package/src/components/MarkdownSettings/MarkdownSettings.tsx +23 -96
  236. package/src/components/MarkdownSettings/index.ts +1 -1
  237. package/src/components/index.ts +4 -5
  238. package/src/containers/EditableMarkdownCard/EditableMarkdownCard.stories.tsx +86 -0
  239. package/src/containers/EditableMarkdownCard/EditableMarkdownCard.tsx +44 -0
  240. package/src/containers/EditableMarkdownCard/index.ts +6 -0
  241. package/src/containers/MarkdownArticle/MarkdownArticle.stories.tsx +141 -0
  242. package/src/containers/MarkdownArticle/MarkdownArticle.tsx +146 -0
  243. package/src/containers/MarkdownArticle/index.ts +6 -0
  244. package/src/containers/MarkdownCard/MarkdownCard.stories.tsx +68 -0
  245. package/src/containers/MarkdownCard/MarkdownCard.tsx +75 -0
  246. package/src/containers/MarkdownCard/index.ts +5 -0
  247. package/src/containers/MarkdownCard/snippet.ts +54 -0
  248. package/src/containers/index.ts +11 -0
  249. package/src/hooks/index.ts +3 -1
  250. package/src/hooks/useEditorMenuOptions.ts +68 -0
  251. package/src/hooks/useExtensions.tsx +268 -0
  252. package/src/hooks/useLinkQuery.ts +93 -0
  253. package/src/index.ts +2 -5
  254. package/src/meta.ts +18 -8
  255. package/src/operations/create-markdown.ts +19 -0
  256. package/src/operations/create.conversations.json +1 -0
  257. package/src/operations/create.test.ts +96 -0
  258. package/src/operations/create.ts +26 -0
  259. package/src/operations/index.ts +14 -0
  260. package/src/operations/open.ts +25 -0
  261. package/src/operations/scroll-to-anchor.ts +38 -0
  262. package/src/operations/set-view-mode.ts +23 -0
  263. package/src/operations/update-markdown.ts +51 -0
  264. package/src/operations/update.conversations.json +1 -0
  265. package/src/operations/update.test.ts +213 -0
  266. package/src/plugin.ts +11 -0
  267. package/src/testing.ts +40 -0
  268. package/src/translations.ts +28 -33
  269. package/src/types/Markdown.ts +27 -34
  270. package/src/types/MarkdownCapabilities.ts +51 -0
  271. package/src/types/MarkdownEvents.ts +14 -0
  272. package/src/types/MarkdownOperation.ts +133 -0
  273. package/src/types/Settings.ts +85 -0
  274. package/src/types/index.ts +6 -2
  275. package/src/types/types.ts +7 -3
  276. package/src/util.test.ts +44 -0
  277. package/src/util.tsx +84 -9
  278. package/dist/lib/browser/MarkdownCard-ZHTH6EVA.mjs +0 -80
  279. package/dist/lib/browser/MarkdownCard-ZHTH6EVA.mjs.map +0 -7
  280. package/dist/lib/browser/MarkdownContainer-XDYFBDCI.mjs +0 -750
  281. package/dist/lib/browser/MarkdownContainer-XDYFBDCI.mjs.map +0 -7
  282. package/dist/lib/browser/anchor-sort-53E7TJGF.mjs +0 -32
  283. package/dist/lib/browser/anchor-sort-53E7TJGF.mjs.map +0 -7
  284. package/dist/lib/browser/app-graph-serializer-IEPNJZBR.mjs +0 -51
  285. package/dist/lib/browser/app-graph-serializer-IEPNJZBR.mjs.map +0 -7
  286. package/dist/lib/browser/blueprint-definition-XDLVVSUN.mjs +0 -11
  287. package/dist/lib/browser/chunk-EVQGTH3P.mjs +0 -22
  288. package/dist/lib/browser/chunk-EVQGTH3P.mjs.map +0 -7
  289. package/dist/lib/browser/chunk-NGXGBWSS.mjs +0 -53
  290. package/dist/lib/browser/chunk-NGXGBWSS.mjs.map +0 -7
  291. package/dist/lib/browser/chunk-ODB2PTBP.mjs +0 -28
  292. package/dist/lib/browser/chunk-ODB2PTBP.mjs.map +0 -7
  293. package/dist/lib/browser/chunk-OY6CGPOO.mjs +0 -16
  294. package/dist/lib/browser/chunk-OY6CGPOO.mjs.map +0 -7
  295. package/dist/lib/browser/chunk-PMBWHKDI.mjs +0 -78
  296. package/dist/lib/browser/chunk-PMBWHKDI.mjs.map +0 -7
  297. package/dist/lib/browser/chunk-VZU7BRGW.mjs +0 -106
  298. package/dist/lib/browser/chunk-VZU7BRGW.mjs.map +0 -7
  299. package/dist/lib/browser/chunk-XYQDM6PM.mjs +0 -50
  300. package/dist/lib/browser/chunk-XYQDM6PM.mjs.map +0 -7
  301. package/dist/lib/browser/index.mjs +0 -173
  302. package/dist/lib/browser/index.mjs.map +0 -7
  303. package/dist/lib/browser/intent-resolver-66ZUQ6JC.mjs +0 -62
  304. package/dist/lib/browser/intent-resolver-66ZUQ6JC.mjs.map +0 -7
  305. package/dist/lib/browser/meta.json +0 -1
  306. package/dist/lib/browser/react-surface-ONX5RNFM.mjs +0 -215
  307. package/dist/lib/browser/react-surface-ONX5RNFM.mjs.map +0 -7
  308. package/dist/lib/browser/settings-HXM36BCZ.mjs +0 -28
  309. package/dist/lib/browser/settings-HXM36BCZ.mjs.map +0 -7
  310. package/dist/lib/browser/state-6QODXCSZ.mjs +0 -37
  311. package/dist/lib/browser/state-6QODXCSZ.mjs.map +0 -7
  312. package/dist/lib/browser/toolkit-73U3A7SD.mjs +0 -76
  313. package/dist/lib/browser/toolkit-73U3A7SD.mjs.map +0 -7
  314. package/dist/lib/browser/types/index.mjs +0 -10
  315. package/dist/lib/node-esm/MarkdownCard-MEA4QAAI.mjs +0 -81
  316. package/dist/lib/node-esm/MarkdownCard-MEA4QAAI.mjs.map +0 -7
  317. package/dist/lib/node-esm/MarkdownContainer-7GYMOJVT.mjs +0 -751
  318. package/dist/lib/node-esm/MarkdownContainer-7GYMOJVT.mjs.map +0 -7
  319. package/dist/lib/node-esm/anchor-sort-V2FWEYDN.mjs +0 -33
  320. package/dist/lib/node-esm/anchor-sort-V2FWEYDN.mjs.map +0 -7
  321. package/dist/lib/node-esm/app-graph-serializer-HIN4NMUG.mjs +0 -52
  322. package/dist/lib/node-esm/app-graph-serializer-HIN4NMUG.mjs.map +0 -7
  323. package/dist/lib/node-esm/blueprint-definition-PDXZ67UQ.mjs +0 -12
  324. package/dist/lib/node-esm/chunk-35WAARP4.mjs +0 -79
  325. package/dist/lib/node-esm/chunk-35WAARP4.mjs.map +0 -7
  326. package/dist/lib/node-esm/chunk-CB2R4YIY.mjs +0 -17
  327. package/dist/lib/node-esm/chunk-CB2R4YIY.mjs.map +0 -7
  328. package/dist/lib/node-esm/chunk-IOC54NCF.mjs +0 -51
  329. package/dist/lib/node-esm/chunk-IOC54NCF.mjs.map +0 -7
  330. package/dist/lib/node-esm/chunk-VCG2U522.mjs +0 -29
  331. package/dist/lib/node-esm/chunk-VCG2U522.mjs.map +0 -7
  332. package/dist/lib/node-esm/chunk-VELFUWUH.mjs +0 -107
  333. package/dist/lib/node-esm/chunk-VELFUWUH.mjs.map +0 -7
  334. package/dist/lib/node-esm/chunk-W4XXBX33.mjs +0 -24
  335. package/dist/lib/node-esm/chunk-W4XXBX33.mjs.map +0 -7
  336. package/dist/lib/node-esm/chunk-YGSNWTGP.mjs +0 -54
  337. package/dist/lib/node-esm/chunk-YGSNWTGP.mjs.map +0 -7
  338. package/dist/lib/node-esm/index.mjs +0 -174
  339. package/dist/lib/node-esm/index.mjs.map +0 -7
  340. package/dist/lib/node-esm/intent-resolver-TNRIFHNH.mjs +0 -63
  341. package/dist/lib/node-esm/intent-resolver-TNRIFHNH.mjs.map +0 -7
  342. package/dist/lib/node-esm/meta.json +0 -1
  343. package/dist/lib/node-esm/react-surface-X2GV6WQH.mjs +0 -216
  344. package/dist/lib/node-esm/react-surface-X2GV6WQH.mjs.map +0 -7
  345. package/dist/lib/node-esm/settings-KPLQ5ONI.mjs +0 -29
  346. package/dist/lib/node-esm/settings-KPLQ5ONI.mjs.map +0 -7
  347. package/dist/lib/node-esm/state-W3PECOJX.mjs +0 -38
  348. package/dist/lib/node-esm/state-W3PECOJX.mjs.map +0 -7
  349. package/dist/lib/node-esm/toolkit-GUBDYF72.mjs +0 -77
  350. package/dist/lib/node-esm/toolkit-GUBDYF72.mjs.map +0 -7
  351. package/dist/lib/node-esm/types/index.mjs +0 -11
  352. package/dist/types/src/capabilities/artifact-definition.d.ts +0 -3
  353. package/dist/types/src/capabilities/artifact-definition.d.ts.map +0 -1
  354. package/dist/types/src/capabilities/capabilities.d.ts +0 -12
  355. package/dist/types/src/capabilities/capabilities.d.ts.map +0 -1
  356. package/dist/types/src/capabilities/intent-resolver.d.ts +0 -4
  357. package/dist/types/src/capabilities/intent-resolver.d.ts.map +0 -1
  358. package/dist/types/src/capabilities/toolkit.d.ts +0 -4
  359. package/dist/types/src/capabilities/toolkit.d.ts.map +0 -1
  360. package/dist/types/src/components/MarkdownCard/MarkdownCard.d.ts +0 -7
  361. package/dist/types/src/components/MarkdownCard/MarkdownCard.d.ts.map +0 -1
  362. package/dist/types/src/components/MarkdownCard/MarkdownCard.stories.d.ts +0 -9
  363. package/dist/types/src/components/MarkdownCard/MarkdownCard.stories.d.ts.map +0 -1
  364. package/dist/types/src/components/MarkdownCard/index.d.ts +0 -4
  365. package/dist/types/src/components/MarkdownCard/index.d.ts.map +0 -1
  366. package/dist/types/src/components/MarkdownContainer.d.ts +0 -18
  367. package/dist/types/src/components/MarkdownContainer.d.ts.map +0 -1
  368. package/dist/types/src/components/MarkdownContainer.stories.d.ts +0 -55
  369. package/dist/types/src/components/MarkdownContainer.stories.d.ts.map +0 -1
  370. package/dist/types/src/components/Suggestions.stories.d.ts +0 -11
  371. package/dist/types/src/components/Suggestions.stories.d.ts.map +0 -1
  372. package/dist/types/src/components/Toolbar.stories.d.ts +0 -48
  373. package/dist/types/src/components/Toolbar.stories.d.ts.map +0 -1
  374. package/dist/types/src/events.d.ts +0 -4
  375. package/dist/types/src/events.d.ts.map +0 -1
  376. package/dist/types/src/extensions.d.ts +0 -22
  377. package/dist/types/src/extensions.d.ts.map +0 -1
  378. package/dist/types/src/functions/diff.d.ts +0 -6
  379. package/dist/types/src/functions/diff.d.ts.map +0 -1
  380. package/dist/types/src/functions/index.d.ts +0 -3
  381. package/dist/types/src/functions/index.d.ts.map +0 -1
  382. package/dist/types/src/functions/open.d.ts +0 -7
  383. package/dist/types/src/functions/open.d.ts.map +0 -1
  384. package/dist/types/src/hooks/useSelectCurrentThread.d.ts +0 -6
  385. package/dist/types/src/hooks/useSelectCurrentThread.d.ts.map +0 -1
  386. package/dist/types/src/types/MarkdownAction.d.ts +0 -33
  387. package/dist/types/src/types/MarkdownAction.d.ts.map +0 -1
  388. package/src/capabilities/artifact-definition.ts +0 -112
  389. package/src/capabilities/capabilities.ts +0 -21
  390. package/src/capabilities/intent-resolver.ts +0 -58
  391. package/src/capabilities/toolkit.ts +0 -49
  392. package/src/components/MarkdownCard/MarkdownCard.stories.tsx +0 -76
  393. package/src/components/MarkdownCard/MarkdownCard.tsx +0 -75
  394. package/src/components/MarkdownCard/index.ts +0 -9
  395. package/src/components/MarkdownContainer.stories.tsx +0 -109
  396. package/src/components/MarkdownContainer.tsx +0 -257
  397. package/src/components/Suggestions.stories.tsx +0 -221
  398. package/src/components/Toolbar.stories.tsx +0 -118
  399. package/src/events.ts +0 -11
  400. package/src/extensions.tsx +0 -300
  401. package/src/functions/diff.ts +0 -37
  402. package/src/functions/index.ts +0 -6
  403. package/src/functions/open.ts +0 -32
  404. package/src/hooks/useSelectCurrentThread.tsx +0 -56
  405. package/src/types/MarkdownAction.ts +0 -29
  406. /package/dist/lib/{browser/types → neutral/blueprints}/index.mjs.map +0 -0
  407. /package/dist/lib/{browser/blueprint-definition-XDLVVSUN.mjs.map → neutral/chunk-J5LGTIGS.mjs.map} +0 -0
  408. /package/dist/lib/{node-esm/types → neutral}/index.mjs.map +0 -0
  409. /package/dist/lib/{node-esm/blueprint-definition-PDXZ67UQ.mjs.map → neutral/meta.mjs.map} +0 -0
@@ -0,0 +1,213 @@
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 { SpaceProperties } from '@dxos/client-protocol';
10
+ import { Blueprint, Operation } from '@dxos/compute';
11
+ import { Collection, Database, Feed, Obj, Query, Ref } from '@dxos/echo';
12
+ import { TestHelpers } from '@dxos/effect/testing';
13
+ import { AgentService } from '@dxos/functions-runtime';
14
+ import { AssistantTestLayer } from '@dxos/functions-runtime/testing';
15
+ import { invariant } from '@dxos/invariant';
16
+ import { EntityId } from '@dxos/keys';
17
+ import { Markdown } from '@dxos/plugin-markdown';
18
+ import { HasSubject } from '@dxos/types';
19
+ import { trim } from '@dxos/util';
20
+
21
+ import { WithProperties } from '#testing';
22
+
23
+ import MarkdownBlueprint from '../blueprints/markdown-blueprint';
24
+ import { MarkdownOperation } from '../types';
25
+ import { MarkdownOperationHandlerSet } from './index';
26
+
27
+ EntityId.dangerouslyDisableRandomness();
28
+
29
+ const TestLayer = AssistantTestLayer({
30
+ aiServicePreset: 'edge-remote',
31
+ operationHandlers: MarkdownOperationHandlerSet,
32
+ types: [
33
+ SpaceProperties,
34
+ Collection.Collection,
35
+ Blueprint.Blueprint,
36
+ Markdown.Document,
37
+ HasSubject.HasSubject,
38
+ Feed.Feed,
39
+ ],
40
+ blueprints: [MarkdownBlueprint.make()],
41
+ tracing: 'pretty',
42
+ });
43
+
44
+ describe('update', () => {
45
+ it.effect(
46
+ 'call a function to update a markdown document',
47
+ Effect.fnUntraced(
48
+ function* (_) {
49
+ const doc = Markdown.make({
50
+ name: 'BlueYard',
51
+ content: 'Founders and portfolio of BlueYard.',
52
+ });
53
+ yield* Database.add(doc);
54
+
55
+ yield* Operation.invoke(MarkdownOperation.Update, {
56
+ doc: Ref.make(doc),
57
+ edits: [{ oldString: 'Founders', newString: '# Founders' }],
58
+ });
59
+
60
+ const updatedDoc = yield* Database.resolve(Obj.getURI(doc), Markdown.Document);
61
+ expect(updatedDoc.name).toBe(doc.name);
62
+ const text = yield* Database.load(updatedDoc.content);
63
+ expect(text.content).toBe('# Founders and portfolio of BlueYard.');
64
+ },
65
+ WithProperties,
66
+ Effect.provide(TestLayer),
67
+ TestHelpers.provideTestContext,
68
+ ),
69
+ );
70
+
71
+ it.effect(
72
+ 'create and update a markdown document',
73
+ Effect.fnUntraced(
74
+ function* (_) {
75
+ const agent = yield* AgentService.createSession({
76
+ blueprints: [MarkdownBlueprint.make()],
77
+ });
78
+
79
+ yield* agent.submitPrompt('Create a document with a cookie recipe.');
80
+ yield* agent.waitForCompletion();
81
+ {
82
+ const docs = yield* Database.runQuery(Query.type(Markdown.Document));
83
+ if (docs.length !== 1) {
84
+ throw new Error(`Expected 1 document; got ${docs.length}: ${docs.map((_) => _.name)}`);
85
+ }
86
+
87
+ const doc = docs[0];
88
+ invariant(Obj.instanceOf(Markdown.Document, doc));
89
+ console.log({
90
+ name: doc.name,
91
+ content: yield* Database.load(doc.content).pipe(Effect.map((_) => _.content)),
92
+ });
93
+ }
94
+
95
+ yield* agent.submitPrompt('Add a section with a holiday-themed variation.');
96
+ yield* agent.waitForCompletion();
97
+ {
98
+ const docs = yield* Database.runQuery(Query.type(Markdown.Document));
99
+ if (docs.length !== 1) {
100
+ throw new Error(`Expected 1 document; got ${docs.length}: ${docs.map((_) => _.name)}`);
101
+ }
102
+
103
+ const doc = docs[0];
104
+ invariant(Obj.instanceOf(Markdown.Document, doc));
105
+ console.log({
106
+ name: doc.name,
107
+ content: yield* Database.load(doc.content).pipe(Effect.map((_) => _.content)),
108
+ });
109
+ }
110
+ },
111
+ WithProperties,
112
+ Effect.provide(TestLayer),
113
+ TestHelpers.provideTestContext,
114
+ ),
115
+ MemoizedAiService.isGenerationEnabled() ? 240_000 : 30_000,
116
+ );
117
+
118
+ it.effect(
119
+ 'update existing document',
120
+ Effect.fnUntraced(
121
+ function* (_) {
122
+ const document = yield* Database.add(
123
+ Markdown.make({
124
+ name: 'Cookie Recipe',
125
+ content: trim`
126
+ Ingredients:
127
+ - 2 cups of ???
128
+ - 1 cup of sugar
129
+ - 1 cup of butter
130
+ - 1 cup of eggs
131
+ `,
132
+ }),
133
+ );
134
+ const agent = yield* AgentService.createSession({
135
+ blueprints: [MarkdownBlueprint.make()],
136
+ context: [Ref.make(document)],
137
+ });
138
+
139
+ yield* agent.submitPrompt('Add the missing ingredient (its flour).');
140
+ yield* agent.waitForCompletion();
141
+
142
+ {
143
+ const docs = yield* Database.runQuery(Query.type(Markdown.Document));
144
+ if (docs.length !== 1) {
145
+ throw new Error(`Expected 1 document; got ${docs.length}: ${docs.map((_) => _.name)}`);
146
+ }
147
+
148
+ const doc = docs[0];
149
+ invariant(Obj.instanceOf(Markdown.Document, doc));
150
+ const content = yield* Database.load(doc.content).pipe(Effect.map((_) => _.content));
151
+ console.log({
152
+ name: doc.name,
153
+ content: yield* Database.load(doc.content).pipe(Effect.map((_) => _.content)),
154
+ });
155
+ expect(content.toLowerCase()).toContain('flour');
156
+ }
157
+ },
158
+ WithProperties,
159
+ Effect.provide(TestLayer),
160
+ TestHelpers.provideTestContext,
161
+ ),
162
+ MemoizedAiService.isGenerationEnabled() ? 240_000 : 30_000,
163
+ );
164
+
165
+ it.effect(
166
+ 'add lines to document one by one',
167
+ Effect.fnUntraced(
168
+ function* (_) {
169
+ const document = yield* Database.add(
170
+ Markdown.make({
171
+ name: 'Shopping list',
172
+ content: trim`
173
+ # Shopping list
174
+ `,
175
+ }),
176
+ );
177
+ const agent = yield* AgentService.createSession({
178
+ blueprints: [MarkdownBlueprint.make()],
179
+ context: [Ref.make(document)],
180
+ });
181
+
182
+ yield* agent.submitPrompt('Add milk to the shopping list.');
183
+ yield* agent.waitForCompletion();
184
+ yield* agent.submitPrompt('Add bread to the shopping list.');
185
+ yield* agent.waitForCompletion();
186
+ yield* agent.submitPrompt('Add eggs to the shopping list.');
187
+ yield* agent.waitForCompletion();
188
+
189
+ {
190
+ const docs = yield* Database.runQuery(Query.type(Markdown.Document));
191
+ if (docs.length !== 1) {
192
+ throw new Error(`Expected 1 document; got ${docs.length}: ${docs.map((_) => _.name)}`);
193
+ }
194
+
195
+ const doc = docs[0];
196
+ invariant(Obj.instanceOf(Markdown.Document, doc));
197
+ const content = yield* Database.load(doc.content).pipe(Effect.map((_) => _.content));
198
+ console.log({
199
+ name: doc.name,
200
+ content: yield* Database.load(doc.content).pipe(Effect.map((_) => _.content)),
201
+ });
202
+ expect(content.toLowerCase()).toContain('milk');
203
+ expect(content.toLowerCase()).toContain('bread');
204
+ expect(content.toLowerCase()).toContain('eggs');
205
+ }
206
+ },
207
+ WithProperties,
208
+ Effect.provide(TestLayer),
209
+ TestHelpers.provideTestContext,
210
+ ),
211
+ MemoizedAiService.isGenerationEnabled() ? 240_000 : 30_000,
212
+ );
213
+ });
package/src/plugin.ts ADDED
@@ -0,0 +1,11 @@
1
+ //
2
+ // Copyright 2023 DXOS.org
3
+ //
4
+
5
+ import { Plugin } from '@dxos/app-framework';
6
+
7
+ import { meta } from './meta';
8
+
9
+ export const MarkdownPlugin = Plugin.lazy(meta, () => import('#plugin'));
10
+
11
+ export { MarkdownOperationHandlerSet } from './operations';
package/src/testing.ts ADDED
@@ -0,0 +1,40 @@
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 { RootCollectionAnnotation } from '@dxos/app-toolkit';
9
+ import { SpaceProperties } from '@dxos/client-protocol';
10
+ import { Annotation, Collection, Database, Obj, Ref } from '@dxos/echo';
11
+
12
+ // Eager re-export of `MarkdownPlugin`. See `@dxos/plugin-testing/src/core.ts`
13
+ // for the rationale. Uses the `#plugin` subpath so the node-only build is
14
+ // re-exported in test environments, avoiding the browser-only `MarkdownPlugin.tsx`
15
+ // which references React-surface capabilities that are intentionally omitted
16
+ // from `capabilities/node.ts`.
17
+ export * from '#plugin';
18
+
19
+ // TODO(wittjosiah): Factor out.
20
+ export const WithProperties = <A, E, R>(effect: Effect.Effect<A, E, R>): Effect.Effect<A, E, R | Database.Service> =>
21
+ Effect.zipRight(
22
+ Effect.gen(function* () {
23
+ const collection = Collection.make({ objects: [] });
24
+ const properties = Obj.make(SpaceProperties, {});
25
+ yield* Database.add(collection);
26
+ yield* Database.add(properties);
27
+ // Both entities are in the DB before setting the annotation so Database.load
28
+ // works in CollectionModel.add (which uses the Effect DB context, not Ref.load).
29
+ Obj.update(properties, (properties) => {
30
+ const meta = Obj.getMeta(properties);
31
+ if (!meta.annotations) {
32
+ meta.annotations = {};
33
+ }
34
+ Annotation.setDictionary(meta.annotations, RootCollectionAnnotation, Ref.make(collection));
35
+ });
36
+ }),
37
+ effect,
38
+ );
39
+
40
+ export const testToolkit = Toolkit.empty as Toolkit.Toolkit<any>;
@@ -2,48 +2,43 @@
2
2
  // Copyright 2023 DXOS.org
3
3
  //
4
4
 
5
+ import { Type } from '@dxos/echo';
5
6
  import { type Resource } from '@dxos/react-ui';
7
+ import { translations as editorTranslations } from '@dxos/react-ui-editor/translations';
6
8
 
7
- import { meta } from './meta';
8
- import { Markdown } from './types';
9
+ import { meta } from '#meta';
10
+ import { Markdown } from '#types';
9
11
 
10
12
  export const translations = [
11
13
  {
12
14
  'en-US': {
13
- [Markdown.Document.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',
19
- 'rename object label': 'Rename document',
20
- 'delete object label': 'Delete document',
15
+ [Type.getTypename(Markdown.Document)]: {
16
+ 'typename.label': 'Document',
17
+ 'typename.label_zero': 'Documents',
18
+ 'typename.label_one': 'Document',
19
+ 'typename.label_other': 'Documents',
20
+ 'object-name.placeholder': 'New document',
21
+ 'add-object.label': 'Add document',
22
+ 'rename-object.label': 'Rename document',
23
+ 'delete-object.label': 'Delete document',
24
+ 'object-deleted.label': 'Document deleted',
21
25
  },
22
26
  [meta.id]: {
23
- 'plugin name': 'Editor',
24
- 'settings title': 'Editor settings',
25
- 'choose markdown from space dialog title': 'Choose one or more documents to add',
26
- // TODO(burdon): Style-guide for user-facing text (e.g., hints, questions, capitalization, etc.)
27
- 'empty choose markdown from space message': 'None available; try creating a new one instead?',
28
- 'chooser done label': 'Add selected',
29
- 'editor placeholder': '',
30
- 'editor input mode label': 'Editor input mode',
31
- 'select editor input mode placeholder': 'Select editor input mode…',
32
- 'settings editor input mode default label': 'Default',
33
- 'settings editor input mode vim label': 'Vim',
34
- 'settings editor input mode vscode label': 'VS Code',
35
- 'settings toolbar label': 'Show toolbar',
36
- 'settings numbered headings label': 'Numbered headings',
37
- 'settings folding label': 'Folding',
38
- 'settings experimental label': 'Enable experimental features',
39
- 'settings debug label': 'Enable debugging features',
40
- 'settings debug placeholder': 'Typewriter script...',
41
- 'toggle view mode label': 'Toggle read-only',
42
- 'default view mode label': 'Default view mode',
43
- 'upload image label': 'Upload image',
44
- 'fallback title': 'Untitled',
45
- 'navigate to document label': 'Open document',
27
+ 'plugin.name': 'Editor',
28
+ 'choose-markdown-from-space-dialog.title': 'Choose one or more documents to add',
29
+ 'empty-choose-markdown-from-space.message': 'None available; try creating a new one instead?',
30
+ 'chooser-done.label': 'Add selected',
31
+ 'editor.placeholder': 'Enter text…',
32
+ 'toggle-view-mode.label': 'Toggle read-only',
33
+ 'upload-image.label': 'Upload image',
34
+ 'fallback.title': 'Untitled',
35
+ 'navigate-to-document.label': 'Open document',
36
+ 'words.label': 'words',
37
+ 'words.label_zero': 'words',
38
+ 'words.label_one': 'word',
39
+ 'words.label_other': 'words',
46
40
  },
47
41
  },
48
42
  },
43
+ ...editorTranslations,
49
44
  ] as const satisfies Resource[];
@@ -4,53 +4,46 @@
4
4
 
5
5
  import * as Schema from 'effect/Schema';
6
6
 
7
- import { Obj, Ref, Type } from '@dxos/echo';
8
- import { LabelAnnotation } from '@dxos/echo/internal';
9
- import { EditorInputMode, EditorViewMode } from '@dxos/react-ui-editor/types';
10
- import { DataType, ItemAnnotation } from '@dxos/schema';
7
+ import { BlueprintsAnnotation, GraphPropsAnnotation } from '@dxos/app-toolkit';
8
+ import { DXN, Annotation, Obj, Ref, Type } from '@dxos/echo';
9
+ import { DescriptionAnnotation, FormInputAnnotation, LabelAnnotation } from '@dxos/echo/internal';
10
+ import { Text } from '@dxos/schema';
11
+
12
+ export const BLUEPRINT_KEY = 'org.dxos.blueprint.markdown';
13
+
14
+ // Re-export Settings as merged const/type (not as namespace).
15
+ import * as SettingsModule from './Settings';
16
+ export const Settings = SettingsModule.Settings;
17
+ export type Settings = SettingsModule.Settings;
11
18
 
12
19
  /**
13
20
  * Document Item type.
14
21
  */
15
22
  export const Document = Schema.Struct({
16
23
  name: Schema.optional(Schema.String),
17
- fallbackName: Schema.optional(Schema.String),
18
- content: Type.Ref(DataType.Text),
24
+ description: Schema.optional(Schema.String),
25
+ fallbackName: Schema.String.pipe(FormInputAnnotation.set(false), Schema.optional),
26
+ content: Ref.Ref(Text.Text).pipe(FormInputAnnotation.set(false)),
19
27
  }).pipe(
20
- Type.Obj({
21
- typename: 'dxos.org/type/Document',
22
- version: '0.1.0',
23
- }),
24
28
  LabelAnnotation.set(['name', 'fallbackName']),
25
- ItemAnnotation.set(true),
29
+ DescriptionAnnotation.set('description'),
30
+ Annotation.IconAnnotation.set({ icon: 'ph--text-aa--regular', hue: 'indigo' }),
31
+ BlueprintsAnnotation.set([BLUEPRINT_KEY]),
32
+ GraphPropsAnnotation.set({ managesAutofocus: true }),
33
+ Type.makeObject(DXN.make('org.dxos.type.document', '0.1.0')),
26
34
  );
27
35
 
28
- export type Document = Schema.Schema.Type<typeof Document>;
36
+ export type Document = Type.InstanceType<typeof Document>;
29
37
 
30
38
  /**
31
39
  * Document factory.
32
40
  */
33
- export const makeDocument = ({
41
+ export const make = ({
34
42
  content = '',
35
43
  ...props
36
- }: Partial<{ name: string; fallbackName: string; content: string }> = {}) =>
37
- Obj.make(Document, { ...props, content: Ref.make(DataType.makeText(content)) });
38
-
39
- /**
40
- * Plugin settings.
41
- */
42
- export const Settings = Schema.mutable(
43
- Schema.Struct({
44
- defaultViewMode: EditorViewMode,
45
- editorInputMode: Schema.optional(EditorInputMode),
46
- experimental: Schema.optional(Schema.Boolean),
47
- debug: Schema.optional(Schema.Boolean),
48
- toolbar: Schema.optional(Schema.Boolean),
49
- typewriter: Schema.optional(Schema.String),
50
- // TODO(burdon): Per document settings.
51
- numberedHeadings: Schema.optional(Schema.Boolean),
52
- folding: Schema.optional(Schema.Boolean),
53
- }),
54
- );
55
-
56
- export interface Settings extends Schema.Schema.Type<typeof Settings> {}
44
+ }: Partial<{ name: string; fallbackName: string; content: string }> = {}) => {
45
+ const doc = Obj.make(Document, { ...props, content: Ref.make(Text.make({ content })) });
46
+ // TODO(dmaretskyi): We need a better way to set parents when creating hierarchies.
47
+ Obj.setParent(doc.content.target!, doc);
48
+ return doc;
49
+ };
@@ -0,0 +1,51 @@
1
+ //
2
+ // Copyright 2025 DXOS.org
3
+ //
4
+
5
+ // @import-as-namespace
6
+
7
+ import { type EditorView } from '@codemirror/view';
8
+ import { type Atom } from '@effect-atom/atom-react';
9
+ import * as Schema from 'effect/Schema';
10
+
11
+ import { Capability } from '@dxos/app-framework';
12
+ import { type EditorStateStore } from '@dxos/ui-editor';
13
+ import { type EditorViewMode } from '@dxos/ui-editor/types';
14
+
15
+ import { meta } from '#meta';
16
+
17
+ import type * as Markdown from './Markdown';
18
+ import { type MarkdownExtensionProvider } from './types';
19
+
20
+ /** Schema for persisted markdown state. */
21
+ export const StateSchema = Schema.mutable(
22
+ Schema.Struct({
23
+ viewMode: Schema.Record({ key: Schema.String, value: Schema.String }),
24
+ }),
25
+ );
26
+
27
+ export type MarkdownState = {
28
+ viewMode: Record<string, EditorViewMode>;
29
+ };
30
+
31
+ export type EditorViewEntry = { view: EditorView; documentId: string };
32
+
33
+ export type EditorViewRegistry = {
34
+ register: (attendableId: string, view: EditorView, documentId: string) => void;
35
+ unregister: (attendableId: string) => void;
36
+ get: (attendableId: string) => EditorViewEntry | undefined;
37
+ };
38
+
39
+ export const Settings = Capability.make<Atom.Writable<Markdown.Settings>>(`${meta.id}.capability.settings`);
40
+
41
+ /** Persisted state atom for view mode per document. */
42
+ export const State = Capability.make<Atom.Writable<MarkdownState>>(`${meta.id}.capability.state`);
43
+
44
+ /** Editor state store for cursor positions, scroll state, etc. */
45
+ export const EditorState = Capability.make<EditorStateStore>(`${meta.id}.capability.editor-state`);
46
+
47
+ /** Registry of active EditorView instances keyed by attendable ID. */
48
+ export const EditorViews = Capability.make<EditorViewRegistry>(`${meta.id}.capability.editor-views`);
49
+
50
+ // TODO(burdon): Move to ./types (external API)?
51
+ export const Extensions = Capability.make<MarkdownExtensionProvider[]>(`${meta.id}.capability.extensions`);
@@ -0,0 +1,14 @@
1
+ //
2
+ // Copyright 2025 DXOS.org
3
+ //
4
+
5
+ // @import-as-namespace
6
+
7
+ import { type ActivationEvent } from '@dxos/app-framework';
8
+ import { AppActivationEvents } from '@dxos/app-toolkit';
9
+
10
+ import { meta } from '#meta';
11
+
12
+ export const SetupExtensions: ActivationEvent.ActivationEvent = AppActivationEvents.createStateEvent(
13
+ `${meta.id}.event.setup-extensions`,
14
+ );
@@ -0,0 +1,133 @@
1
+ //
2
+ // Copyright 2025 DXOS.org
3
+ //
4
+
5
+ // @import-as-namespace
6
+
7
+ import * as Schema from 'effect/Schema';
8
+
9
+ import { Capability } from '@dxos/app-framework';
10
+ import { Operation } from '@dxos/compute';
11
+ import { Database, Ref, Type, DXN } from '@dxos/echo';
12
+ import { EditorViewMode } from '@dxos/ui-editor/types';
13
+ import { trim } from '@dxos/util';
14
+
15
+ import { meta } from '#meta';
16
+
17
+ import * as Markdown from './Markdown';
18
+
19
+ const makeKey = (name: string) => DXN.make(`${meta.id}.operation.${name}`);
20
+
21
+ const Edit = Schema.Struct({
22
+ oldString: Schema.String.annotations({
23
+ description: 'The text to find in the document.',
24
+ }),
25
+ newString: Schema.String.annotations({
26
+ description: 'The text to replace it with.',
27
+ }),
28
+ replaceAll: Schema.optional(Schema.Boolean).annotations({
29
+ description: 'If true, replaces all occurrences. Defaults to false (first occurrence only).',
30
+ }),
31
+ });
32
+
33
+ export const Create = Operation.make({
34
+ meta: {
35
+ key: DXN.make('org.dxos.function.markdown.create'),
36
+ name: 'Create',
37
+ description: 'Creates a new markdown document and adds it to the space.',
38
+ icon: 'ph--file-text--regular',
39
+ },
40
+ input: Schema.Struct({
41
+ name: Schema.String,
42
+ content: Schema.String,
43
+ }),
44
+ output: Schema.Struct({
45
+ id: Schema.String.annotations({
46
+ description: 'The DXN of the created document.',
47
+ }),
48
+ }),
49
+ services: [Database.Service],
50
+ });
51
+
52
+ export const CreateMarkdown = Operation.make({
53
+ meta: {
54
+ key: makeKey('create'),
55
+ name: 'Create Markdown Document',
56
+ icon: 'ph--file-text--regular',
57
+ },
58
+ services: [Capability.Service],
59
+ input: Schema.Struct({
60
+ name: Schema.optional(Schema.String),
61
+ content: Schema.optional(Schema.String),
62
+ }),
63
+ output: Schema.Struct({
64
+ object: Type.getSchema(Markdown.Document),
65
+ }),
66
+ });
67
+
68
+ export const Open = Operation.make({
69
+ meta: {
70
+ key: DXN.make('org.dxos.function.markdown.open'),
71
+ name: 'Open',
72
+ description: 'Opens and reads the contents of a new markdown document.',
73
+ icon: 'ph--arrow-square-out--regular',
74
+ },
75
+ input: Schema.Struct({
76
+ doc: Ref.Ref(Markdown.Document).annotations({
77
+ description: 'The ID of the markdown document.',
78
+ }),
79
+ }),
80
+ output: Schema.Struct({
81
+ content: Schema.String,
82
+ }),
83
+ services: [Database.Service],
84
+ });
85
+
86
+ export const ScrollToAnchor = Operation.make({
87
+ meta: {
88
+ key: makeKey('scrollToAnchor'),
89
+ name: 'Scroll To Anchor',
90
+ icon: 'ph--anchor-simple--regular',
91
+ },
92
+ services: [Capability.Service],
93
+ input: Schema.Struct({
94
+ subject: Schema.String.annotations({ description: 'Attendable ID of the markdown editor.' }),
95
+ cursor: Schema.String.annotations({ description: 'Cursor position to scroll to.' }),
96
+ ref: Schema.optional(Schema.String.annotations({ description: 'Reference ID (e.g. thread ID).' })),
97
+ }),
98
+ output: Schema.Void,
99
+ });
100
+
101
+ // TODO(wittjosiah): This appears to be unused.
102
+ export const SetViewMode = Operation.make({
103
+ meta: { key: makeKey('setViewMode'), name: 'Set View Mode', icon: 'ph--layout--regular' },
104
+ services: [Capability.Service],
105
+ input: Schema.Struct({
106
+ id: Schema.String,
107
+ viewMode: EditorViewMode,
108
+ }),
109
+ output: Schema.Void,
110
+ });
111
+
112
+ export const Update = Operation.make({
113
+ meta: {
114
+ key: DXN.make('org.dxos.function.markdown.update'),
115
+ name: 'Update',
116
+ description: trim`
117
+ Applies a set of edits to the markdown document.
118
+ `,
119
+ icon: 'ph--pencil-simple--regular',
120
+ },
121
+ input: Schema.Struct({
122
+ doc: Ref.Ref(Markdown.Document).annotations({
123
+ description: 'The ID of the markdown document.',
124
+ }),
125
+ edits: Schema.Array(Edit).annotations({
126
+ description: 'The edits to apply to the document. Each edit finds oldString and replaces it with newString.',
127
+ }),
128
+ }),
129
+ output: Schema.Struct({
130
+ newContent: Schema.String,
131
+ }),
132
+ services: [Database.Service],
133
+ });