@dxos/plugin-markdown 0.8.4-main.3eb6e50203 → 0.8.4-main.422d1c7879

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 (357) 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 +47 -4
  4. package/dist/lib/browser/blueprints/index.mjs.map +4 -4
  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-QFPZONKP.mjs +158 -0
  9. package/dist/lib/browser/chunk-QFPZONKP.mjs.map +7 -0
  10. package/dist/lib/browser/cli/index.mjs +19 -13
  11. package/dist/lib/browser/cli/index.mjs.map +3 -3
  12. package/dist/lib/browser/create-YL5ELZWP.mjs +30 -0
  13. package/dist/lib/browser/create-YL5ELZWP.mjs.map +7 -0
  14. package/dist/lib/browser/create-markdown-LU5IDKMH.mjs +22 -0
  15. package/dist/lib/browser/create-markdown-LU5IDKMH.mjs.map +7 -0
  16. package/dist/lib/browser/index.mjs +544 -67
  17. package/dist/lib/browser/index.mjs.map +4 -4
  18. package/dist/lib/browser/meta.json +1 -1
  19. package/dist/lib/browser/open-AFSOZZ6G.mjs +21 -0
  20. package/dist/lib/browser/open-AFSOZZ6G.mjs.map +7 -0
  21. package/dist/lib/browser/operations/index.mjs +14 -0
  22. package/dist/lib/browser/operations/index.mjs.map +7 -0
  23. package/dist/lib/browser/scroll-to-anchor-IPXV32A6.mjs +49 -0
  24. package/dist/lib/browser/scroll-to-anchor-IPXV32A6.mjs.map +7 -0
  25. package/dist/lib/browser/set-view-mode-2QWB24RR.mjs +26 -0
  26. package/dist/lib/browser/set-view-mode-2QWB24RR.mjs.map +7 -0
  27. package/dist/lib/browser/types/index.mjs +6 -7
  28. package/dist/lib/browser/update-HZNVYBMO.mjs +45 -0
  29. package/dist/lib/browser/update-HZNVYBMO.mjs.map +7 -0
  30. package/dist/lib/node-esm/MarkdownSettings-QMPISOEU.mjs +33 -0
  31. package/dist/lib/node-esm/MarkdownSettings-QMPISOEU.mjs.map +7 -0
  32. package/dist/lib/node-esm/blueprints/index.mjs +47 -4
  33. package/dist/lib/node-esm/blueprints/index.mjs.map +4 -4
  34. package/dist/lib/node-esm/chunk-3OPDJJJH.mjs +122 -0
  35. package/dist/lib/node-esm/chunk-3OPDJJJH.mjs.map +7 -0
  36. package/dist/lib/node-esm/chunk-HSLMI22Q.mjs +11 -0
  37. package/dist/lib/node-esm/chunk-JUGS6RKO.mjs +159 -0
  38. package/dist/lib/node-esm/chunk-JUGS6RKO.mjs.map +7 -0
  39. package/dist/lib/node-esm/cli/index.mjs +19 -13
  40. package/dist/lib/node-esm/cli/index.mjs.map +3 -3
  41. package/dist/lib/node-esm/create-SMQAIM3V.mjs +31 -0
  42. package/dist/lib/node-esm/create-SMQAIM3V.mjs.map +7 -0
  43. package/dist/lib/node-esm/create-markdown-X2OASYKG.mjs +23 -0
  44. package/dist/lib/node-esm/create-markdown-X2OASYKG.mjs.map +7 -0
  45. package/dist/lib/node-esm/index.mjs +544 -67
  46. package/dist/lib/node-esm/index.mjs.map +4 -4
  47. package/dist/lib/node-esm/meta.json +1 -1
  48. package/dist/lib/node-esm/open-SRWLLOKE.mjs +22 -0
  49. package/dist/lib/node-esm/open-SRWLLOKE.mjs.map +7 -0
  50. package/dist/lib/node-esm/operations/index.mjs +15 -0
  51. package/dist/lib/node-esm/operations/index.mjs.map +7 -0
  52. package/dist/lib/node-esm/scroll-to-anchor-M76GXKYQ.mjs +50 -0
  53. package/dist/lib/node-esm/scroll-to-anchor-M76GXKYQ.mjs.map +7 -0
  54. package/dist/lib/node-esm/set-view-mode-6BB6KIDS.mjs +27 -0
  55. package/dist/lib/node-esm/set-view-mode-6BB6KIDS.mjs.map +7 -0
  56. package/dist/lib/node-esm/types/index.mjs +6 -7
  57. package/dist/lib/node-esm/update-4CELTLXK.mjs +46 -0
  58. package/dist/lib/node-esm/update-4CELTLXK.mjs.map +7 -0
  59. package/dist/types/src/MarkdownPlugin.d.ts.map +1 -1
  60. package/dist/types/src/blueprints/index.d.ts +1 -1
  61. package/dist/types/src/blueprints/index.d.ts.map +1 -1
  62. package/dist/types/src/blueprints/markdown-blueprint.d.ts +3 -20
  63. package/dist/types/src/blueprints/markdown-blueprint.d.ts.map +1 -1
  64. package/dist/types/src/capabilities/anchor-sort.d.ts +6 -0
  65. package/dist/types/src/capabilities/anchor-sort.d.ts.map +1 -0
  66. package/dist/types/src/capabilities/app-graph-serializer.d.ts +5 -0
  67. package/dist/types/src/capabilities/app-graph-serializer.d.ts.map +1 -0
  68. package/dist/types/src/capabilities/artifact-definition.d.ts +5 -0
  69. package/dist/types/src/capabilities/artifact-definition.d.ts.map +1 -0
  70. package/dist/types/src/capabilities/blueprint-definition.d.ts +6 -0
  71. package/dist/types/src/capabilities/blueprint-definition.d.ts.map +1 -0
  72. package/dist/types/src/capabilities/index.d.ts +9 -7
  73. package/dist/types/src/capabilities/index.d.ts.map +1 -1
  74. package/dist/types/src/capabilities/node.d.ts +4 -0
  75. package/dist/types/src/capabilities/node.d.ts.map +1 -0
  76. package/dist/types/src/capabilities/operation-handler.d.ts +6 -0
  77. package/dist/types/src/capabilities/operation-handler.d.ts.map +1 -0
  78. package/dist/types/src/capabilities/react-surface.d.ts +5 -0
  79. package/dist/types/src/capabilities/react-surface.d.ts.map +1 -0
  80. package/dist/types/src/capabilities/settings.d.ts +6 -0
  81. package/dist/types/src/capabilities/settings.d.ts.map +1 -0
  82. package/dist/types/src/capabilities/state.d.ts +6 -0
  83. package/dist/types/src/capabilities/state.d.ts.map +1 -0
  84. package/dist/types/src/cli/plugin.d.ts.map +1 -1
  85. package/dist/types/src/components/MarkdownEditor/MarkdownEditor.d.ts +25 -22
  86. package/dist/types/src/components/MarkdownEditor/MarkdownEditor.d.ts.map +1 -1
  87. package/dist/types/src/components/MarkdownEditor/MarkdownEditor.stories.d.ts +3 -3
  88. package/dist/types/src/components/MarkdownEditor/MarkdownEditor.stories.d.ts.map +1 -1
  89. package/dist/types/src/components/MarkdownEditor/MarkdownEditorContent.d.ts +4 -2
  90. package/dist/types/src/components/MarkdownEditor/MarkdownEditorContent.d.ts.map +1 -1
  91. package/dist/types/src/components/MarkdownEditor/MarkdownEditorToolbar.d.ts +5 -4
  92. package/dist/types/src/components/MarkdownEditor/MarkdownEditorToolbar.d.ts.map +1 -1
  93. package/dist/types/src/components/MarkdownSettings/MarkdownSettings.d.ts +4 -6
  94. package/dist/types/src/components/MarkdownSettings/MarkdownSettings.d.ts.map +1 -1
  95. package/dist/types/src/components/MarkdownSettings/MarkdownSettings.stories.d.ts +94 -0
  96. package/dist/types/src/components/MarkdownSettings/MarkdownSettings.stories.d.ts.map +1 -0
  97. package/dist/types/src/components/MarkdownSettings/index.d.ts +1 -1
  98. package/dist/types/src/components/MarkdownSettings/index.d.ts.map +1 -1
  99. package/dist/types/src/components/index.d.ts +3 -8
  100. package/dist/types/src/components/index.d.ts.map +1 -1
  101. package/dist/types/src/{components → containers}/MarkdownCard/MarkdownCard.d.ts +1 -1
  102. package/dist/types/src/containers/MarkdownCard/MarkdownCard.d.ts.map +1 -0
  103. package/dist/types/src/containers/MarkdownCard/MarkdownCard.stories.d.ts.map +1 -0
  104. package/dist/types/src/containers/MarkdownCard/index.d.ts +2 -0
  105. package/dist/types/src/containers/MarkdownCard/index.d.ts.map +1 -0
  106. package/dist/types/src/containers/MarkdownCard/snippet.d.ts +17 -0
  107. package/dist/types/src/containers/MarkdownCard/snippet.d.ts.map +1 -0
  108. package/dist/types/src/containers/MarkdownContainer/MarkdownContainer.d.ts +36 -0
  109. package/dist/types/src/containers/MarkdownContainer/MarkdownContainer.d.ts.map +1 -0
  110. package/dist/types/src/containers/MarkdownContainer/MarkdownContainer.stories.d.ts +77 -0
  111. package/dist/types/src/containers/MarkdownContainer/MarkdownContainer.stories.d.ts.map +1 -0
  112. package/dist/types/src/containers/MarkdownContainer/index.d.ts +3 -0
  113. package/dist/types/src/containers/MarkdownContainer/index.d.ts.map +1 -0
  114. package/dist/types/src/containers/index.d.ts +5 -0
  115. package/dist/types/src/containers/index.d.ts.map +1 -0
  116. package/dist/types/src/hooks/index.d.ts +0 -1
  117. package/dist/types/src/hooks/index.d.ts.map +1 -1
  118. package/dist/types/src/hooks/useExtensions.d.ts +8 -5
  119. package/dist/types/src/hooks/useExtensions.d.ts.map +1 -1
  120. package/dist/types/src/hooks/useLinkQuery.d.ts.map +1 -1
  121. package/dist/types/src/index.d.ts +2 -1
  122. package/dist/types/src/index.d.ts.map +1 -1
  123. package/dist/types/src/operations/create-markdown.d.ts +5 -0
  124. package/dist/types/src/operations/create-markdown.d.ts.map +1 -0
  125. package/dist/types/src/operations/create.d.ts +5 -0
  126. package/dist/types/src/operations/create.d.ts.map +1 -0
  127. package/dist/types/src/operations/create.test.d.ts.map +1 -0
  128. package/dist/types/src/operations/definitions.d.ts +64 -0
  129. package/dist/types/src/operations/definitions.d.ts.map +1 -0
  130. package/dist/types/src/operations/index.d.ts +4 -0
  131. package/dist/types/src/operations/index.d.ts.map +1 -0
  132. package/dist/types/src/operations/open.d.ts +5 -0
  133. package/dist/types/src/operations/open.d.ts.map +1 -0
  134. package/dist/types/src/operations/scroll-to-anchor.d.ts +5 -0
  135. package/dist/types/src/operations/scroll-to-anchor.d.ts.map +1 -0
  136. package/dist/types/src/operations/set-view-mode.d.ts +5 -0
  137. package/dist/types/src/operations/set-view-mode.d.ts.map +1 -0
  138. package/dist/types/src/operations/update.d.ts +5 -0
  139. package/dist/types/src/operations/update.d.ts.map +1 -0
  140. package/dist/types/src/operations/update.test.d.ts.map +1 -0
  141. package/dist/types/src/translations.d.ts +48 -59
  142. package/dist/types/src/translations.d.ts.map +1 -1
  143. package/dist/types/src/types/Markdown.d.ts +17 -18
  144. package/dist/types/src/types/Markdown.d.ts.map +1 -1
  145. package/dist/types/src/types/Settings.d.ts +17 -0
  146. package/dist/types/src/types/Settings.d.ts.map +1 -0
  147. package/dist/types/src/types/capabilities.d.ts +13 -2
  148. package/dist/types/src/types/capabilities.d.ts.map +1 -1
  149. package/dist/types/src/types/index.d.ts +2 -3
  150. package/dist/types/src/types/index.d.ts.map +1 -1
  151. package/dist/types/src/util.d.ts +2 -2
  152. package/dist/types/src/util.d.ts.map +1 -1
  153. package/dist/types/tsconfig.tsbuildinfo +1 -1
  154. package/package.json +77 -68
  155. package/src/MarkdownPlugin.tsx +28 -24
  156. package/src/blueprints/index.ts +1 -1
  157. package/src/blueprints/markdown-blueprint.ts +14 -8
  158. package/src/capabilities/{anchor-sort/anchor-sort.ts → anchor-sort.ts} +1 -1
  159. package/src/capabilities/{app-graph-serializer/app-graph-serializer.ts → app-graph-serializer.ts} +11 -6
  160. package/src/capabilities/{artifact-definition/artifact-definition.ts → artifact-definition.ts} +3 -3
  161. package/src/capabilities/blueprint-definition.ts +17 -0
  162. package/src/capabilities/index.ts +13 -7
  163. package/src/capabilities/node.ts +11 -0
  164. package/src/capabilities/operation-handler.ts +16 -0
  165. package/src/capabilities/react-surface.tsx +121 -0
  166. package/src/capabilities/{settings/settings.ts → settings.ts} +2 -2
  167. package/src/capabilities/state.ts +47 -0
  168. package/src/cli/plugin.ts +16 -7
  169. package/src/components/MarkdownEditor/MarkdownEditor.stories.tsx +38 -34
  170. package/src/components/MarkdownEditor/MarkdownEditor.tsx +125 -94
  171. package/src/components/MarkdownEditor/MarkdownEditorContent.tsx +25 -17
  172. package/src/components/MarkdownEditor/MarkdownEditorToolbar.tsx +36 -55
  173. package/src/components/MarkdownSettings/MarkdownSettings.stories.tsx +39 -0
  174. package/src/components/MarkdownSettings/MarkdownSettings.tsx +22 -109
  175. package/src/components/MarkdownSettings/index.ts +1 -1
  176. package/src/components/index.ts +4 -12
  177. package/src/{components → containers}/MarkdownCard/MarkdownCard.stories.tsx +20 -11
  178. package/src/containers/MarkdownCard/MarkdownCard.tsx +68 -0
  179. package/src/containers/MarkdownCard/index.ts +5 -0
  180. package/src/containers/MarkdownCard/snippet.ts +52 -0
  181. package/src/{components → containers/MarkdownContainer}/MarkdownContainer.stories.tsx +34 -22
  182. package/src/containers/MarkdownContainer/MarkdownContainer.tsx +145 -0
  183. package/src/containers/MarkdownContainer/index.ts +6 -0
  184. package/src/containers/index.ts +10 -0
  185. package/src/hooks/index.ts +0 -1
  186. package/src/hooks/useEditorMenuOptions.ts +3 -3
  187. package/src/hooks/useExtensions.tsx +82 -93
  188. package/src/hooks/useLinkQuery.ts +28 -3
  189. package/src/index.ts +2 -1
  190. package/src/meta.ts +1 -1
  191. package/src/operations/create-markdown.ts +20 -0
  192. package/src/operations/create.conversations.json +1 -0
  193. package/src/{blueprints/functions → operations}/create.test.ts +26 -20
  194. package/src/operations/create.ts +27 -0
  195. package/src/operations/definitions.ts +120 -0
  196. package/src/operations/index.ts +16 -0
  197. package/src/operations/open.ts +25 -0
  198. package/src/operations/scroll-to-anchor.ts +39 -0
  199. package/src/operations/set-view-mode.ts +24 -0
  200. package/src/operations/update.conversations.json +1 -0
  201. package/src/{blueprints/functions → operations}/update.test.ts +46 -46
  202. package/src/operations/update.ts +51 -0
  203. package/src/testing.ts +1 -1
  204. package/src/translations.ts +24 -36
  205. package/src/types/Markdown.ts +18 -25
  206. package/src/types/Settings.ts +65 -0
  207. package/src/types/capabilities.ts +17 -5
  208. package/src/types/events.ts +2 -2
  209. package/src/types/index.ts +3 -4
  210. package/src/util.tsx +5 -5
  211. package/dist/lib/browser/MarkdownCard-7VIO7R66.mjs +0 -11
  212. package/dist/lib/browser/MarkdownContainer-6E43EDAU.mjs +0 -11
  213. package/dist/lib/browser/anchor-sort-JBAZRPE7.mjs +0 -33
  214. package/dist/lib/browser/anchor-sort-JBAZRPE7.mjs.map +0 -7
  215. package/dist/lib/browser/app-graph-serializer-6Q5YBUPW.mjs +0 -59
  216. package/dist/lib/browser/app-graph-serializer-6Q5YBUPW.mjs.map +0 -7
  217. package/dist/lib/browser/blueprint-definition-6HOAW2E6.mjs +0 -20
  218. package/dist/lib/browser/blueprint-definition-6HOAW2E6.mjs.map +0 -7
  219. package/dist/lib/browser/chunk-2AAD3W6X.mjs +0 -57
  220. package/dist/lib/browser/chunk-2AAD3W6X.mjs.map +0 -7
  221. package/dist/lib/browser/chunk-4GT3QWMK.mjs +0 -167
  222. package/dist/lib/browser/chunk-4GT3QWMK.mjs.map +0 -7
  223. package/dist/lib/browser/chunk-6SM75KL3.mjs +0 -8
  224. package/dist/lib/browser/chunk-6SM75KL3.mjs.map +0 -7
  225. package/dist/lib/browser/chunk-7AQTX6D5.mjs +0 -105
  226. package/dist/lib/browser/chunk-7AQTX6D5.mjs.map +0 -7
  227. package/dist/lib/browser/chunk-EZZFREFN.mjs +0 -58
  228. package/dist/lib/browser/chunk-EZZFREFN.mjs.map +0 -7
  229. package/dist/lib/browser/chunk-HHRUUWGH.mjs +0 -796
  230. package/dist/lib/browser/chunk-HHRUUWGH.mjs.map +0 -7
  231. package/dist/lib/browser/chunk-HQTBT5IY.mjs +0 -176
  232. package/dist/lib/browser/chunk-HQTBT5IY.mjs.map +0 -7
  233. package/dist/lib/browser/operation-resolver-UBQUPSXC.mjs +0 -53
  234. package/dist/lib/browser/operation-resolver-UBQUPSXC.mjs.map +0 -7
  235. package/dist/lib/browser/react-surface-7Z6AB26V.mjs +0 -213
  236. package/dist/lib/browser/react-surface-7Z6AB26V.mjs.map +0 -7
  237. package/dist/lib/browser/settings-V2XOFSD5.mjs +0 -36
  238. package/dist/lib/browser/settings-V2XOFSD5.mjs.map +0 -7
  239. package/dist/lib/browser/state-6Y3JB64H.mjs +0 -29
  240. package/dist/lib/browser/state-6Y3JB64H.mjs.map +0 -7
  241. package/dist/lib/node-esm/MarkdownCard-YC3R2TQW.mjs +0 -12
  242. package/dist/lib/node-esm/MarkdownCard-YC3R2TQW.mjs.map +0 -7
  243. package/dist/lib/node-esm/MarkdownContainer-TTRUOXU6.mjs +0 -12
  244. package/dist/lib/node-esm/MarkdownContainer-TTRUOXU6.mjs.map +0 -7
  245. package/dist/lib/node-esm/anchor-sort-IQMDZRA3.mjs +0 -34
  246. package/dist/lib/node-esm/anchor-sort-IQMDZRA3.mjs.map +0 -7
  247. package/dist/lib/node-esm/app-graph-serializer-STEPJH57.mjs +0 -60
  248. package/dist/lib/node-esm/app-graph-serializer-STEPJH57.mjs.map +0 -7
  249. package/dist/lib/node-esm/blueprint-definition-UGDFF5OZ.mjs +0 -21
  250. package/dist/lib/node-esm/blueprint-definition-UGDFF5OZ.mjs.map +0 -7
  251. package/dist/lib/node-esm/chunk-AGZOFIK2.mjs +0 -10
  252. package/dist/lib/node-esm/chunk-AGZOFIK2.mjs.map +0 -7
  253. package/dist/lib/node-esm/chunk-D46D75SK.mjs +0 -797
  254. package/dist/lib/node-esm/chunk-D46D75SK.mjs.map +0 -7
  255. package/dist/lib/node-esm/chunk-DCKB3AVD.mjs +0 -59
  256. package/dist/lib/node-esm/chunk-DCKB3AVD.mjs.map +0 -7
  257. package/dist/lib/node-esm/chunk-K2IIYNCG.mjs +0 -106
  258. package/dist/lib/node-esm/chunk-K2IIYNCG.mjs.map +0 -7
  259. package/dist/lib/node-esm/chunk-LOZVC2WA.mjs +0 -177
  260. package/dist/lib/node-esm/chunk-LOZVC2WA.mjs.map +0 -7
  261. package/dist/lib/node-esm/chunk-MLZQCT2N.mjs +0 -58
  262. package/dist/lib/node-esm/chunk-MLZQCT2N.mjs.map +0 -7
  263. package/dist/lib/node-esm/chunk-USKAPINH.mjs +0 -168
  264. package/dist/lib/node-esm/chunk-USKAPINH.mjs.map +0 -7
  265. package/dist/lib/node-esm/operation-resolver-QAGXDA5E.mjs +0 -54
  266. package/dist/lib/node-esm/operation-resolver-QAGXDA5E.mjs.map +0 -7
  267. package/dist/lib/node-esm/react-surface-VIXAH5CF.mjs +0 -214
  268. package/dist/lib/node-esm/react-surface-VIXAH5CF.mjs.map +0 -7
  269. package/dist/lib/node-esm/settings-EXSH2KF4.mjs +0 -37
  270. package/dist/lib/node-esm/settings-EXSH2KF4.mjs.map +0 -7
  271. package/dist/lib/node-esm/state-TVF2XT2T.mjs +0 -30
  272. package/dist/lib/node-esm/state-TVF2XT2T.mjs.map +0 -7
  273. package/dist/types/src/blueprints/functions/create.d.ts +0 -8
  274. package/dist/types/src/blueprints/functions/create.d.ts.map +0 -1
  275. package/dist/types/src/blueprints/functions/create.test.d.ts.map +0 -1
  276. package/dist/types/src/blueprints/functions/index.d.ts +0 -4
  277. package/dist/types/src/blueprints/functions/index.d.ts.map +0 -1
  278. package/dist/types/src/blueprints/functions/open.d.ts +0 -14
  279. package/dist/types/src/blueprints/functions/open.d.ts.map +0 -1
  280. package/dist/types/src/blueprints/functions/update.d.ts +0 -19
  281. package/dist/types/src/blueprints/functions/update.d.ts.map +0 -1
  282. package/dist/types/src/blueprints/functions/update.test.d.ts.map +0 -1
  283. package/dist/types/src/capabilities/anchor-sort/anchor-sort.d.ts +0 -6
  284. package/dist/types/src/capabilities/anchor-sort/anchor-sort.d.ts.map +0 -1
  285. package/dist/types/src/capabilities/anchor-sort/index.d.ts +0 -3
  286. package/dist/types/src/capabilities/anchor-sort/index.d.ts.map +0 -1
  287. package/dist/types/src/capabilities/app-graph-serializer/app-graph-serializer.d.ts +0 -5
  288. package/dist/types/src/capabilities/app-graph-serializer/app-graph-serializer.d.ts.map +0 -1
  289. package/dist/types/src/capabilities/app-graph-serializer/index.d.ts +0 -3
  290. package/dist/types/src/capabilities/app-graph-serializer/index.d.ts.map +0 -1
  291. package/dist/types/src/capabilities/artifact-definition/artifact-definition.d.ts +0 -5
  292. package/dist/types/src/capabilities/artifact-definition/artifact-definition.d.ts.map +0 -1
  293. package/dist/types/src/capabilities/artifact-definition/index.d.ts +0 -3
  294. package/dist/types/src/capabilities/artifact-definition/index.d.ts.map +0 -1
  295. package/dist/types/src/capabilities/blueprint-definition/blueprint-definition.d.ts +0 -11
  296. package/dist/types/src/capabilities/blueprint-definition/blueprint-definition.d.ts.map +0 -1
  297. package/dist/types/src/capabilities/blueprint-definition/index.d.ts +0 -3
  298. package/dist/types/src/capabilities/blueprint-definition/index.d.ts.map +0 -1
  299. package/dist/types/src/capabilities/operation-resolver/index.d.ts +0 -3
  300. package/dist/types/src/capabilities/operation-resolver/index.d.ts.map +0 -1
  301. package/dist/types/src/capabilities/operation-resolver/operation-resolver.d.ts +0 -5
  302. package/dist/types/src/capabilities/operation-resolver/operation-resolver.d.ts.map +0 -1
  303. package/dist/types/src/capabilities/react-surface/index.d.ts +0 -3
  304. package/dist/types/src/capabilities/react-surface/index.d.ts.map +0 -1
  305. package/dist/types/src/capabilities/react-surface/react-surface.d.ts +0 -5
  306. package/dist/types/src/capabilities/react-surface/react-surface.d.ts.map +0 -1
  307. package/dist/types/src/capabilities/settings/index.d.ts +0 -3
  308. package/dist/types/src/capabilities/settings/index.d.ts.map +0 -1
  309. package/dist/types/src/capabilities/settings/settings.d.ts +0 -7
  310. package/dist/types/src/capabilities/settings/settings.d.ts.map +0 -1
  311. package/dist/types/src/capabilities/state/index.d.ts +0 -3
  312. package/dist/types/src/capabilities/state/index.d.ts.map +0 -1
  313. package/dist/types/src/capabilities/state/state.d.ts +0 -5
  314. package/dist/types/src/capabilities/state/state.d.ts.map +0 -1
  315. package/dist/types/src/components/MarkdownCard/MarkdownCard.d.ts.map +0 -1
  316. package/dist/types/src/components/MarkdownCard/MarkdownCard.stories.d.ts.map +0 -1
  317. package/dist/types/src/components/MarkdownCard/index.d.ts +0 -4
  318. package/dist/types/src/components/MarkdownCard/index.d.ts.map +0 -1
  319. package/dist/types/src/components/MarkdownContainer.d.ts +0 -28
  320. package/dist/types/src/components/MarkdownContainer.d.ts.map +0 -1
  321. package/dist/types/src/components/MarkdownContainer.stories.d.ts +0 -88
  322. package/dist/types/src/components/MarkdownContainer.stories.d.ts.map +0 -1
  323. package/dist/types/src/components/Suggestions.stories.d.ts +0 -11
  324. package/dist/types/src/components/Suggestions.stories.d.ts.map +0 -1
  325. package/dist/types/src/hooks/useSelectCurrentThread.d.ts +0 -6
  326. package/dist/types/src/hooks/useSelectCurrentThread.d.ts.map +0 -1
  327. package/dist/types/src/types/MarkdownAction.d.ts +0 -66
  328. package/dist/types/src/types/MarkdownAction.d.ts.map +0 -1
  329. package/src/blueprints/functions/create.conversations.json +0 -1
  330. package/src/blueprints/functions/create.ts +0 -35
  331. package/src/blueprints/functions/index.ts +0 -7
  332. package/src/blueprints/functions/open.ts +0 -33
  333. package/src/blueprints/functions/update.conversations.json +0 -1
  334. package/src/blueprints/functions/update.ts +0 -79
  335. package/src/capabilities/anchor-sort/index.ts +0 -7
  336. package/src/capabilities/app-graph-serializer/index.ts +0 -7
  337. package/src/capabilities/artifact-definition/index.ts +0 -7
  338. package/src/capabilities/blueprint-definition/blueprint-definition.ts +0 -26
  339. package/src/capabilities/blueprint-definition/index.ts +0 -7
  340. package/src/capabilities/operation-resolver/index.ts +0 -7
  341. package/src/capabilities/operation-resolver/operation-resolver.ts +0 -45
  342. package/src/capabilities/react-surface/index.ts +0 -7
  343. package/src/capabilities/react-surface/react-surface.tsx +0 -102
  344. package/src/capabilities/settings/index.ts +0 -7
  345. package/src/capabilities/state/index.ts +0 -7
  346. package/src/capabilities/state/state.ts +0 -31
  347. package/src/components/MarkdownCard/MarkdownCard.tsx +0 -64
  348. package/src/components/MarkdownCard/index.ts +0 -9
  349. package/src/components/MarkdownContainer.tsx +0 -113
  350. package/src/components/Suggestions.stories.tsx +0 -215
  351. package/src/hooks/useSelectCurrentThread.tsx +0 -61
  352. package/src/types/MarkdownAction.ts +0 -59
  353. /package/dist/lib/browser/{MarkdownCard-7VIO7R66.mjs.map → chunk-J5LGTIGS.mjs.map} +0 -0
  354. /package/dist/lib/{browser/MarkdownContainer-6E43EDAU.mjs.map → node-esm/chunk-HSLMI22Q.mjs.map} +0 -0
  355. /package/dist/types/src/{components → containers}/MarkdownCard/MarkdownCard.stories.d.ts +0 -0
  356. /package/dist/types/src/{blueprints/functions → operations}/create.test.d.ts +0 -0
  357. /package/dist/types/src/{blueprints/functions → operations}/update.test.d.ts +0 -0
@@ -4,33 +4,42 @@
4
4
 
5
5
  import { describe, expect, it } from '@effect/vitest';
6
6
  import * as Effect from 'effect/Effect';
7
- import * as Layer from 'effect/Layer';
8
7
 
9
8
  import { MemoizedAiService } from '@dxos/ai/testing';
10
- import { AiContextService, AiConversationService } from '@dxos/assistant';
9
+ import { AgentService } from '@dxos/assistant';
11
10
  import { AssistantTestLayer } from '@dxos/assistant/testing';
12
11
  import { Blueprint } from '@dxos/blueprints';
13
12
  import { SpaceProperties } from '@dxos/client-protocol';
14
- import { Database, Obj, Query, Ref } from '@dxos/echo';
13
+ import { Database, Feed, Obj, Query, Ref } from '@dxos/echo';
14
+ import { Collection } from '@dxos/echo';
15
15
  import { TestHelpers } from '@dxos/effect/testing';
16
- import { FunctionInvocationService } from '@dxos/functions';
17
16
  import { invariant } from '@dxos/invariant';
18
17
  import { ObjectId } from '@dxos/keys';
18
+ import { Operation } from '@dxos/operation';
19
19
  import { Markdown } from '@dxos/plugin-markdown/types';
20
- import { Collection } from '@dxos/schema';
21
20
  import { HasSubject } from '@dxos/types';
22
21
  import { trim } from '@dxos/util';
23
22
 
24
- import { WithProperties } from '../../testing';
25
- import * as MarkdownBlueprint from '../markdown-blueprint';
23
+ import { WithProperties } from '#testing';
26
24
 
27
- import update from './update';
25
+ import MarkdownBlueprint from '../blueprints/markdown-blueprint';
26
+ import { Update } from './definitions';
27
+ import { MarkdownOperationHandlerSet } from './index';
28
28
 
29
29
  ObjectId.dangerouslyDisableRandomness();
30
30
 
31
31
  const TestLayer = AssistantTestLayer({
32
- functions: [...MarkdownBlueprint.functions],
33
- types: [SpaceProperties, Collection.Collection, Blueprint.Blueprint, Markdown.Document, HasSubject.HasSubject],
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()],
34
43
  tracing: 'pretty',
35
44
  });
36
45
 
@@ -45,7 +54,7 @@ describe('update', () => {
45
54
  });
46
55
  yield* Database.add(doc);
47
56
 
48
- yield* FunctionInvocationService.invokeFunction(update, {
57
+ yield* Operation.invoke(Update, {
49
58
  doc: Ref.make(doc),
50
59
  edits: [{ oldString: 'Founders', newString: '# Founders' }],
51
60
  });
@@ -61,18 +70,16 @@ describe('update', () => {
61
70
  ),
62
71
  );
63
72
 
64
- it.scoped(
73
+ it.effect(
65
74
  'create and update a markdown document',
66
75
  Effect.fnUntraced(
67
76
  function* (_) {
68
- const markdownBlueprint = yield* Database.add(Obj.clone(MarkdownBlueprint.make()));
69
- yield* AiContextService.bindContext({
70
- blueprints: [Ref.make(markdownBlueprint)],
77
+ const agent = yield* AgentService.createSession({
78
+ blueprints: [MarkdownBlueprint.make()],
71
79
  });
72
80
 
73
- yield* AiConversationService.run({
74
- prompt: `Create a document with a cookie recipe.`,
75
- });
81
+ yield* agent.submitPrompt('Create a document with a cookie recipe.');
82
+ yield* agent.waitForCompletion();
76
83
  {
77
84
  const docs = yield* Database.runQuery(Query.type(Markdown.Document));
78
85
  if (docs.length !== 1) {
@@ -87,9 +94,8 @@ describe('update', () => {
87
94
  });
88
95
  }
89
96
 
90
- yield* AiConversationService.run({
91
- prompt: 'Add a section with a holiday-themed variation.',
92
- });
97
+ yield* agent.submitPrompt('Add a section with a holiday-themed variation.');
98
+ yield* agent.waitForCompletion();
93
99
  {
94
100
  const docs = yield* Database.runQuery(Query.type(Markdown.Document));
95
101
  if (docs.length !== 1) {
@@ -105,13 +111,13 @@ describe('update', () => {
105
111
  }
106
112
  },
107
113
  WithProperties,
108
- Effect.provide(AiConversationService.layerNewQueue().pipe(Layer.provideMerge(TestLayer))),
114
+ Effect.provide(TestLayer),
109
115
  TestHelpers.provideTestContext,
110
116
  ),
111
117
  MemoizedAiService.isGenerationEnabled() ? 240_000 : 30_000,
112
118
  );
113
119
 
114
- it.scoped(
120
+ it.effect(
115
121
  'update existing document',
116
122
  Effect.fnUntraced(
117
123
  function* (_) {
@@ -127,15 +133,13 @@ describe('update', () => {
127
133
  `,
128
134
  }),
129
135
  );
130
- const markdownBlueprint = yield* Database.add(Obj.clone(MarkdownBlueprint.make()));
131
- yield* AiContextService.bindContext({
132
- blueprints: [Ref.make(markdownBlueprint)],
133
- objects: [Ref.make(document)],
136
+ const agent = yield* AgentService.createSession({
137
+ blueprints: [MarkdownBlueprint.make()],
138
+ context: [Ref.make(document)],
134
139
  });
135
140
 
136
- yield* AiConversationService.run({
137
- prompt: 'Add the missing ingredient (its flour).',
138
- });
141
+ yield* agent.submitPrompt('Add the missing ingredient (its flour).');
142
+ yield* agent.waitForCompletion();
139
143
 
140
144
  {
141
145
  const docs = yield* Database.runQuery(Query.type(Markdown.Document));
@@ -154,13 +158,13 @@ describe('update', () => {
154
158
  }
155
159
  },
156
160
  WithProperties,
157
- Effect.provide(AiConversationService.layerNewQueue().pipe(Layer.provideMerge(TestLayer))),
161
+ Effect.provide(TestLayer),
158
162
  TestHelpers.provideTestContext,
159
163
  ),
160
164
  MemoizedAiService.isGenerationEnabled() ? 240_000 : 30_000,
161
165
  );
162
166
 
163
- it.scoped(
167
+ it.effect(
164
168
  'add lines to document one by one',
165
169
  Effect.fnUntraced(
166
170
  function* (_) {
@@ -172,21 +176,17 @@ describe('update', () => {
172
176
  `,
173
177
  }),
174
178
  );
175
- const markdownBlueprint = yield* Database.add(Obj.clone(MarkdownBlueprint.make()));
176
- yield* AiContextService.bindContext({
177
- blueprints: [Ref.make(markdownBlueprint)],
178
- objects: [Ref.make(document)],
179
+ const agent = yield* AgentService.createSession({
180
+ blueprints: [MarkdownBlueprint.make()],
181
+ context: [Ref.make(document)],
179
182
  });
180
183
 
181
- yield* AiConversationService.run({
182
- prompt: 'Add milk to the shopping list.',
183
- });
184
- yield* AiConversationService.run({
185
- prompt: 'Add bread to the shopping list.',
186
- });
187
- yield* AiConversationService.run({
188
- prompt: 'Add eggs to the shopping list.',
189
- });
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
190
 
191
191
  {
192
192
  const docs = yield* Database.runQuery(Query.type(Markdown.Document));
@@ -207,7 +207,7 @@ describe('update', () => {
207
207
  }
208
208
  },
209
209
  WithProperties,
210
- Effect.provide(AiConversationService.layerNewQueue().pipe(Layer.provideMerge(TestLayer))),
210
+ Effect.provide(TestLayer),
211
211
  TestHelpers.provideTestContext,
212
212
  ),
213
213
  MemoizedAiService.isGenerationEnabled() ? 240_000 : 30_000,
@@ -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 CHANGED
@@ -8,7 +8,7 @@ import * as Effect from 'effect/Effect';
8
8
  import { SpaceProperties } from '@dxos/client-protocol';
9
9
  import { Obj, Ref } from '@dxos/echo';
10
10
  import { Database } from '@dxos/echo';
11
- import { Collection } from '@dxos/schema';
11
+ import { Collection } from '@dxos/echo';
12
12
 
13
13
  // TODO(wittjosiah): Factor out.
14
14
  export const WithProperties = <A, E, R>(effect: Effect.Effect<A, E, R>): Effect.Effect<A, E, R | Database.Service> =>
@@ -5,49 +5,37 @@
5
5
  import { type Resource } from '@dxos/react-ui';
6
6
  import { translations as editorTranslations } from '@dxos/react-ui-editor';
7
7
 
8
- import { meta } from './meta';
9
- import { Markdown } from './types';
8
+ import { meta } from '#meta';
9
+ import { Markdown } from '#types';
10
10
 
11
11
  export const translations = [
12
12
  {
13
13
  'en-US': {
14
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
- 'rename object label': 'Rename document',
21
- 'delete object label': 'Delete document',
22
- 'object deleted label': 'Document deleted',
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',
23
24
  },
24
25
  [meta.id]: {
25
- 'plugin name': 'Editor',
26
- 'settings title': 'Editor settings',
27
- 'choose markdown from space dialog title': 'Choose one or more documents to add',
28
- // TODO(burdon): Style-guide for user-facing text (e.g., hints, questions, capitalization, etc.)
29
- 'empty choose markdown from space message': 'None available; try creating a new one instead?',
30
- 'chooser done label': 'Add selected',
31
- 'editor placeholder': '',
32
- 'editor input mode label': 'Editor input mode',
33
- 'select editor input mode placeholder': 'Select editor input mode…',
34
- 'settings editor input mode default label': 'Default',
35
- 'settings editor input mode vim label': 'Vim',
36
- 'settings editor input mode vscode label': 'VS Code',
37
- 'settings toolbar label': 'Show toolbar',
38
- 'settings numbered headings label': 'Numbered headings',
39
- 'settings folding label': 'Folding',
40
- 'settings experimental label': 'Enable experimental features',
41
- 'settings debug label': 'Enable debugging features',
42
- 'settings debug placeholder': 'Typewriter script...',
43
- 'toggle view mode label': 'Toggle read-only',
44
- 'default view mode label': 'Default view mode',
45
- 'upload image label': 'Upload image',
46
- 'fallback title': 'Untitled',
47
- 'navigate to document label': 'Open document',
48
- 'words label_zero': 'words',
49
- 'words label_one': 'word',
50
- 'words label_other': 'words',
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',
51
39
  },
52
40
  },
53
41
  },
@@ -4,10 +4,14 @@
4
4
 
5
5
  import * as Schema from 'effect/Schema';
6
6
 
7
- import { Obj, Ref, Type } from '@dxos/echo';
7
+ import { Annotation, Obj, Ref, Type } from '@dxos/echo';
8
8
  import { DescriptionAnnotation, FormInputAnnotation, LabelAnnotation } from '@dxos/echo/internal';
9
9
  import { Text } from '@dxos/schema';
10
- import { EditorInputMode, EditorViewMode } from '@dxos/ui-editor/types';
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;
11
15
 
12
16
  /**
13
17
  * Document Item type.
@@ -16,14 +20,18 @@ export const Document = Schema.Struct({
16
20
  name: Schema.optional(Schema.String),
17
21
  description: Schema.optional(Schema.String),
18
22
  fallbackName: Schema.String.pipe(FormInputAnnotation.set(false), Schema.optional),
19
- content: Type.Ref(Text.Text).pipe(FormInputAnnotation.set(false)),
23
+ content: Ref.Ref(Text.Text).pipe(FormInputAnnotation.set(false)),
20
24
  }).pipe(
21
25
  Type.object({
22
- typename: 'dxos.org/type/Document',
26
+ typename: 'org.dxos.type.document',
23
27
  version: '0.1.0',
24
28
  }),
25
29
  LabelAnnotation.set(['name', 'fallbackName']),
26
30
  DescriptionAnnotation.set('description'),
31
+ Annotation.IconAnnotation.set({
32
+ icon: 'ph--text-aa--regular',
33
+ hue: 'indigo',
34
+ }),
27
35
  );
28
36
 
29
37
  export type Document = Schema.Schema.Type<typeof Document>;
@@ -34,24 +42,9 @@ export type Document = Schema.Schema.Type<typeof Document>;
34
42
  export const make = ({
35
43
  content = '',
36
44
  ...props
37
- }: Partial<{ name: string; fallbackName: string; content: string }> = {}) =>
38
- Obj.make(Document, { ...props, content: Ref.make(Text.make(content)) });
39
-
40
- /**
41
- * Plugin settings.
42
- */
43
- export const Settings = Schema.mutable(
44
- Schema.Struct({
45
- defaultViewMode: EditorViewMode,
46
- editorInputMode: Schema.optional(EditorInputMode),
47
- experimental: Schema.optional(Schema.Boolean),
48
- debug: Schema.optional(Schema.Boolean),
49
- toolbar: Schema.optional(Schema.Boolean),
50
- typewriter: Schema.optional(Schema.String),
51
- // TODO(burdon): Per document settings.
52
- numberedHeadings: Schema.optional(Schema.Boolean),
53
- folding: Schema.optional(Schema.Boolean),
54
- }),
55
- );
56
-
57
- export interface Settings extends Schema.Schema.Type<typeof Settings> {}
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> {}
@@ -2,13 +2,14 @@
2
2
  // Copyright 2025 DXOS.org
3
3
  //
4
4
 
5
+ import { type EditorView } from '@codemirror/view';
5
6
  import { type Atom } from '@effect-atom/atom-react';
6
7
  import * as Schema from 'effect/Schema';
7
8
 
8
9
  import { Capability } from '@dxos/app-framework';
9
10
  import { type EditorStateStore, type EditorViewMode } from '@dxos/ui-editor';
10
11
 
11
- import { meta } from '../meta';
12
+ import { meta } from '#meta';
12
13
 
13
14
  import type * as Markdown from './Markdown';
14
15
  import { type MarkdownExtensionProvider } from './types';
@@ -24,15 +25,26 @@ export type MarkdownState = {
24
25
  viewMode: Record<string, EditorViewMode>;
25
26
  };
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
+
27
36
  export namespace MarkdownCapabilities {
28
- export const Settings = Capability.make<Atom.Writable<Markdown.Settings>>(`${meta.id}/capability/settings`);
37
+ export const Settings = Capability.make<Atom.Writable<Markdown.Settings>>(`${meta.id}.capability.settings`);
29
38
 
30
39
  /** Persisted state atom for view mode per document. */
31
- export const State = Capability.make<Atom.Writable<MarkdownState>>(`${meta.id}/capability/state`);
40
+ export const State = Capability.make<Atom.Writable<MarkdownState>>(`${meta.id}.capability.state`);
32
41
 
33
42
  /** Editor state store for cursor positions, scroll state, etc. */
34
- export const EditorState = Capability.make<EditorStateStore>(`${meta.id}/capability/editor-state`);
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`);
35
47
 
36
48
  // TODO(burdon): Move to ./types (external API)?
37
- export const Extensions = Capability.make<MarkdownExtensionProvider[]>(`${meta.id}/capability/extensions`);
49
+ export const Extensions = Capability.make<MarkdownExtensionProvider[]>(`${meta.id}.capability.extensions`);
38
50
  }
@@ -5,10 +5,10 @@
5
5
  import { type ActivationEvent } from '@dxos/app-framework';
6
6
  import { AppActivationEvents } from '@dxos/app-toolkit';
7
7
 
8
- import { meta } from '../meta';
8
+ import { meta } from '#meta';
9
9
 
10
10
  export namespace MarkdownEvents {
11
11
  export const SetupExtensions: ActivationEvent.ActivationEvent = AppActivationEvents.createStateEvent(
12
- `${meta.id}/event/setup-extensions`,
12
+ `${meta.id}.event.setup-extensions`,
13
13
  );
14
14
  }
@@ -2,10 +2,9 @@
2
2
  // Copyright 2024 DXOS.org
3
3
  //
4
4
 
5
- export * as MarkdownAction from './MarkdownAction';
6
- export { MarkdownOperation } from './MarkdownAction';
7
- export * as Markdown from './Markdown';
8
-
9
5
  export * from './capabilities';
10
6
  export * from './events';
11
7
  export * from './types';
8
+
9
+ export * as Markdown from './Markdown';
10
+ export * as Settings from './Settings';
package/src/util.tsx CHANGED
@@ -6,7 +6,7 @@ import { debounce } from '@dxos/async';
6
6
  import { Obj } from '@dxos/echo';
7
7
  import { type TypedObjectSerializer } from '@dxos/plugin-space/types';
8
8
 
9
- import { Markdown } from './types';
9
+ import { Markdown } from '#types';
10
10
 
11
11
  /**
12
12
  * Checks if an object conforms to the interface needed to render an editor.
@@ -104,20 +104,20 @@ export const getFallbackName = (content = ''): string => {
104
104
  };
105
105
 
106
106
  // TODO(burdon): Option to strip Markdown.
107
- export const getContentSnippet = (content = '') => {
107
+ export const getContentSnippet = (content = '', maxLines = 3) => {
108
108
  const abstract = content
109
109
  .split('\n')
110
110
  .filter((line) => !line.startsWith('!'))
111
111
  .filter((line) => line.trim() !== '');
112
112
 
113
- return abstract.slice(0, 3).join('\n') ?? '';
113
+ return abstract.slice(0, maxLines).join('\n') ?? '';
114
114
  };
115
115
 
116
116
  export const setFallbackName = debounce((doc: Markdown.Document, content = '') => {
117
117
  const name = getFallbackName(content);
118
118
  if (doc.fallbackName !== name) {
119
- Obj.change(doc, (d) => {
120
- d.fallbackName = name;
119
+ Obj.change(doc, (doc) => {
120
+ doc.fallbackName = name;
121
121
  });
122
122
  }
123
123
  }, 200);
@@ -1,11 +0,0 @@
1
- import {
2
- MarkdownCard,
3
- MarkdownCard_default
4
- } from "./chunk-EZZFREFN.mjs";
5
- import "./chunk-HHRUUWGH.mjs";
6
- import "./chunk-4GT3QWMK.mjs";
7
- export {
8
- MarkdownCard,
9
- MarkdownCard_default as default
10
- };
11
- //# sourceMappingURL=MarkdownCard-7VIO7R66.mjs.map
@@ -1,11 +0,0 @@
1
- import {
2
- MarkdownContainer,
3
- MarkdownContainer_default
4
- } from "./chunk-7AQTX6D5.mjs";
5
- import "./chunk-HHRUUWGH.mjs";
6
- import "./chunk-4GT3QWMK.mjs";
7
- export {
8
- MarkdownContainer,
9
- MarkdownContainer_default as default
10
- };
11
- //# sourceMappingURL=MarkdownContainer-6E43EDAU.mjs.map
@@ -1,33 +0,0 @@
1
- import {
2
- Markdown_exports
3
- } from "./chunk-4GT3QWMK.mjs";
4
-
5
- // src/capabilities/anchor-sort/anchor-sort.ts
6
- import * as Effect from "effect/Effect";
7
- import { Capability } from "@dxos/app-framework";
8
- import { AppCapabilities } from "@dxos/app-toolkit";
9
- import { Relation } from "@dxos/echo";
10
- import { createDocAccessor, getRangeFromCursor } from "@dxos/echo-db";
11
- var anchor_sort_default = Capability.makeModule(() => Effect.succeed(Capability.contributes(AppCapabilities.AnchorSort, {
12
- key: Markdown_exports.Document.typename,
13
- sort: (anchorA, anchorB) => {
14
- const doc = Relation.getTarget(anchorA);
15
- const accessor = doc.content.target ? createDocAccessor(doc.content.target, [
16
- "content"
17
- ]) : void 0;
18
- if (doc !== Relation.getTarget(anchorB) || !accessor) {
19
- return 0;
20
- }
21
- const getStartPosition = (cursor) => {
22
- const range = cursor ? getRangeFromCursor(accessor, cursor) : void 0;
23
- return range?.start ?? Number.MAX_SAFE_INTEGER;
24
- };
25
- const posA = getStartPosition(anchorA.anchor);
26
- const posB = getStartPosition(anchorB.anchor);
27
- return posA - posB;
28
- }
29
- })));
30
- export {
31
- anchor_sort_default as default
32
- };
33
- //# sourceMappingURL=anchor-sort-JBAZRPE7.mjs.map
@@ -1,7 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../../../src/capabilities/anchor-sort/anchor-sort.ts"],
4
- "sourcesContent": ["//\n// Copyright 2025 DXOS.org\n//\n\nimport * as Effect from 'effect/Effect';\n\nimport { Capability } from '@dxos/app-framework';\nimport { AppCapabilities } from '@dxos/app-toolkit';\nimport { Relation } from '@dxos/echo';\nimport { createDocAccessor, getRangeFromCursor } from '@dxos/echo-db';\nimport { type AnchoredTo } from '@dxos/types';\n\nimport { Markdown } from '../../types';\n\nexport default Capability.makeModule(() =>\n Effect.succeed(\n Capability.contributes(AppCapabilities.AnchorSort, {\n key: Markdown.Document.typename,\n sort: (anchorA: AnchoredTo.AnchoredTo, anchorB: AnchoredTo.AnchoredTo) => {\n const doc = Relation.getTarget(anchorA) as Markdown.Document;\n const accessor = doc.content.target ? createDocAccessor(doc.content.target, ['content']) : undefined;\n if (doc !== Relation.getTarget(anchorB) || !accessor) {\n return 0;\n }\n\n const getStartPosition = (cursor: string | undefined) => {\n const range = cursor ? getRangeFromCursor(accessor, cursor) : undefined;\n return range?.start ?? Number.MAX_SAFE_INTEGER;\n };\n\n const posA = getStartPosition(anchorA.anchor);\n const posB = getStartPosition(anchorB.anchor);\n return posA - posB;\n },\n }),\n ),\n);\n"],
5
- "mappings": ";;;;;AAIA,YAAYA,YAAY;AAExB,SAASC,kBAAkB;AAC3B,SAASC,uBAAuB;AAChC,SAASC,gBAAgB;AACzB,SAASC,mBAAmBC,0BAA0B;AAKtD,IAAA,sBAAeC,WAAWC,WAAW,MAC5BC,eACLF,WAAWG,YAAYC,gBAAgBC,YAAY;EACjDC,KAAKC,iBAASC,SAASC;EACvBC,MAAM,CAACC,SAAgCC,YAAAA;AACrC,UAAMC,MAAMC,SAASC,UAAUJ,OAAAA;AAC/B,UAAMK,WAAWH,IAAII,QAAQC,SAASC,kBAAkBN,IAAII,QAAQC,QAAQ;MAAC;KAAU,IAAIE;AAC3F,QAAIP,QAAQC,SAASC,UAAUH,OAAAA,KAAY,CAACI,UAAU;AACpD,aAAO;IACT;AAEA,UAAMK,mBAAmB,CAACC,WAAAA;AACxB,YAAMC,QAAQD,SAASE,mBAAmBR,UAAUM,MAAAA,IAAUF;AAC9D,aAAOG,OAAOE,SAASC,OAAOC;IAChC;AAEA,UAAMC,OAAOP,iBAAiBV,QAAQkB,MAAM;AAC5C,UAAMC,OAAOT,iBAAiBT,QAAQiB,MAAM;AAC5C,WAAOD,OAAOE;EAChB;AACF,CAAA,CAAA,CAAA;",
6
- "names": ["Effect", "Capability", "AppCapabilities", "Relation", "createDocAccessor", "getRangeFromCursor", "Capability", "makeModule", "succeed", "contributes", "AppCapabilities", "AnchorSort", "key", "Markdown", "Document", "typename", "sort", "anchorA", "anchorB", "doc", "Relation", "getTarget", "accessor", "content", "target", "createDocAccessor", "undefined", "getStartPosition", "cursor", "range", "getRangeFromCursor", "start", "Number", "MAX_SAFE_INTEGER", "posA", "anchor", "posB"]
7
- }