@dxos/plugin-markdown 0.8.4-main.406dc2a → 0.8.4-main.52d7546f51

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 (362) hide show
  1. package/dist/lib/browser/MarkdownCard-7VIO7R66.mjs +11 -0
  2. package/dist/lib/browser/MarkdownContainer-6E43EDAU.mjs +11 -0
  3. package/dist/lib/browser/anchor-sort-JBAZRPE7.mjs +33 -0
  4. package/dist/lib/browser/anchor-sort-JBAZRPE7.mjs.map +7 -0
  5. package/dist/lib/browser/app-graph-serializer-6Q5YBUPW.mjs +59 -0
  6. package/dist/lib/browser/app-graph-serializer-6Q5YBUPW.mjs.map +7 -0
  7. package/dist/lib/browser/blueprint-definition-6HOAW2E6.mjs +20 -0
  8. package/dist/lib/browser/blueprint-definition-6HOAW2E6.mjs.map +7 -0
  9. package/dist/lib/browser/blueprints/index.mjs +8 -0
  10. package/dist/lib/browser/blueprints/index.mjs.map +7 -0
  11. package/dist/lib/browser/{chunk-O6XUPW6S.mjs → chunk-2AAD3W6X.mjs} +12 -8
  12. package/dist/lib/browser/chunk-2AAD3W6X.mjs.map +7 -0
  13. package/dist/lib/browser/chunk-4GT3QWMK.mjs +167 -0
  14. package/dist/lib/browser/chunk-4GT3QWMK.mjs.map +7 -0
  15. package/dist/lib/browser/chunk-6SM75KL3.mjs +8 -0
  16. package/dist/lib/browser/chunk-6SM75KL3.mjs.map +7 -0
  17. package/dist/lib/browser/chunk-7AQTX6D5.mjs +105 -0
  18. package/dist/lib/browser/chunk-7AQTX6D5.mjs.map +7 -0
  19. package/dist/lib/browser/chunk-EZZFREFN.mjs +58 -0
  20. package/dist/lib/browser/chunk-EZZFREFN.mjs.map +7 -0
  21. package/dist/lib/browser/chunk-HHRUUWGH.mjs +796 -0
  22. package/dist/lib/browser/chunk-HHRUUWGH.mjs.map +7 -0
  23. package/dist/lib/browser/chunk-HQTBT5IY.mjs +176 -0
  24. package/dist/lib/browser/chunk-HQTBT5IY.mjs.map +7 -0
  25. package/dist/lib/browser/cli/index.mjs +33 -0
  26. package/dist/lib/browser/cli/index.mjs.map +7 -0
  27. package/dist/lib/browser/index.mjs +125 -143
  28. package/dist/lib/browser/index.mjs.map +4 -4
  29. package/dist/lib/browser/meta.json +1 -1
  30. package/dist/lib/browser/operation-resolver-UBQUPSXC.mjs +53 -0
  31. package/dist/lib/browser/operation-resolver-UBQUPSXC.mjs.map +7 -0
  32. package/dist/lib/browser/react-surface-7Z6AB26V.mjs +213 -0
  33. package/dist/lib/browser/react-surface-7Z6AB26V.mjs.map +7 -0
  34. package/dist/lib/browser/settings-V2XOFSD5.mjs +36 -0
  35. package/dist/lib/browser/settings-V2XOFSD5.mjs.map +7 -0
  36. package/dist/lib/browser/state-6Y3JB64H.mjs +29 -0
  37. package/dist/lib/browser/state-6Y3JB64H.mjs.map +7 -0
  38. package/dist/lib/browser/types/index.mjs +10 -3
  39. package/dist/lib/node-esm/MarkdownCard-YC3R2TQW.mjs +12 -0
  40. package/dist/lib/node-esm/MarkdownCard-YC3R2TQW.mjs.map +7 -0
  41. package/dist/lib/node-esm/MarkdownContainer-TTRUOXU6.mjs +12 -0
  42. package/dist/lib/node-esm/MarkdownContainer-TTRUOXU6.mjs.map +7 -0
  43. package/dist/lib/node-esm/anchor-sort-IQMDZRA3.mjs +34 -0
  44. package/dist/lib/node-esm/anchor-sort-IQMDZRA3.mjs.map +7 -0
  45. package/dist/lib/node-esm/app-graph-serializer-STEPJH57.mjs +60 -0
  46. package/dist/lib/node-esm/app-graph-serializer-STEPJH57.mjs.map +7 -0
  47. package/dist/lib/node-esm/blueprint-definition-UGDFF5OZ.mjs +21 -0
  48. package/dist/lib/node-esm/blueprint-definition-UGDFF5OZ.mjs.map +7 -0
  49. package/dist/lib/node-esm/blueprints/index.mjs +9 -0
  50. package/dist/lib/node-esm/blueprints/index.mjs.map +7 -0
  51. package/dist/lib/node-esm/chunk-AGZOFIK2.mjs +10 -0
  52. package/dist/lib/node-esm/chunk-AGZOFIK2.mjs.map +7 -0
  53. package/dist/lib/node-esm/chunk-D46D75SK.mjs +797 -0
  54. package/dist/lib/node-esm/chunk-D46D75SK.mjs.map +7 -0
  55. package/dist/lib/node-esm/chunk-DCKB3AVD.mjs +59 -0
  56. package/dist/lib/node-esm/chunk-DCKB3AVD.mjs.map +7 -0
  57. package/dist/lib/node-esm/chunk-K2IIYNCG.mjs +106 -0
  58. package/dist/lib/node-esm/chunk-K2IIYNCG.mjs.map +7 -0
  59. package/dist/lib/node-esm/chunk-LOZVC2WA.mjs +177 -0
  60. package/dist/lib/node-esm/chunk-LOZVC2WA.mjs.map +7 -0
  61. package/dist/lib/node-esm/{chunk-XO3IEQJE.mjs → chunk-MLZQCT2N.mjs} +12 -8
  62. package/dist/lib/node-esm/chunk-MLZQCT2N.mjs.map +7 -0
  63. package/dist/lib/node-esm/chunk-USKAPINH.mjs +168 -0
  64. package/dist/lib/node-esm/chunk-USKAPINH.mjs.map +7 -0
  65. package/dist/lib/node-esm/cli/index.mjs +34 -0
  66. package/dist/lib/node-esm/cli/index.mjs.map +7 -0
  67. package/dist/lib/node-esm/index.mjs +125 -143
  68. package/dist/lib/node-esm/index.mjs.map +4 -4
  69. package/dist/lib/node-esm/meta.json +1 -1
  70. package/dist/lib/node-esm/operation-resolver-QAGXDA5E.mjs +54 -0
  71. package/dist/lib/node-esm/operation-resolver-QAGXDA5E.mjs.map +7 -0
  72. package/dist/lib/node-esm/react-surface-VIXAH5CF.mjs +214 -0
  73. package/dist/lib/node-esm/react-surface-VIXAH5CF.mjs.map +7 -0
  74. package/dist/lib/node-esm/settings-EXSH2KF4.mjs +37 -0
  75. package/dist/lib/node-esm/settings-EXSH2KF4.mjs.map +7 -0
  76. package/dist/lib/node-esm/state-TVF2XT2T.mjs +30 -0
  77. package/dist/lib/node-esm/state-TVF2XT2T.mjs.map +7 -0
  78. package/dist/lib/node-esm/types/index.mjs +10 -3
  79. package/dist/types/src/MarkdownPlugin.d.ts +2 -1
  80. package/dist/types/src/MarkdownPlugin.d.ts.map +1 -1
  81. package/dist/types/src/{functions/open.d.ts → blueprints/functions/create.d.ts} +5 -4
  82. package/dist/types/src/blueprints/functions/create.d.ts.map +1 -0
  83. package/dist/types/src/blueprints/functions/create.test.d.ts +2 -0
  84. package/dist/types/src/blueprints/functions/create.test.d.ts.map +1 -0
  85. package/dist/types/src/blueprints/functions/index.d.ts +4 -0
  86. package/dist/types/src/blueprints/functions/index.d.ts.map +1 -0
  87. package/dist/types/src/blueprints/functions/open.d.ts +14 -0
  88. package/dist/types/src/blueprints/functions/open.d.ts.map +1 -0
  89. package/dist/types/src/blueprints/functions/update.d.ts +19 -0
  90. package/dist/types/src/blueprints/functions/update.d.ts.map +1 -0
  91. package/dist/types/src/blueprints/functions/update.test.d.ts +2 -0
  92. package/dist/types/src/blueprints/functions/update.test.d.ts.map +1 -0
  93. package/dist/types/src/blueprints/index.d.ts +2 -0
  94. package/dist/types/src/blueprints/index.d.ts.map +1 -0
  95. package/dist/types/src/blueprints/markdown-blueprint.d.ts +21 -0
  96. package/dist/types/src/blueprints/markdown-blueprint.d.ts.map +1 -0
  97. package/dist/types/src/capabilities/anchor-sort/anchor-sort.d.ts +6 -0
  98. package/dist/types/src/capabilities/anchor-sort/anchor-sort.d.ts.map +1 -0
  99. package/dist/types/src/capabilities/anchor-sort/index.d.ts +3 -0
  100. package/dist/types/src/capabilities/anchor-sort/index.d.ts.map +1 -0
  101. package/dist/types/src/capabilities/app-graph-serializer/app-graph-serializer.d.ts +5 -0
  102. package/dist/types/src/capabilities/app-graph-serializer/app-graph-serializer.d.ts.map +1 -0
  103. package/dist/types/src/capabilities/app-graph-serializer/index.d.ts +3 -0
  104. package/dist/types/src/capabilities/app-graph-serializer/index.d.ts.map +1 -0
  105. package/dist/types/src/capabilities/artifact-definition/artifact-definition.d.ts +5 -0
  106. package/dist/types/src/capabilities/artifact-definition/artifact-definition.d.ts.map +1 -0
  107. package/dist/types/src/capabilities/artifact-definition/index.d.ts +3 -0
  108. package/dist/types/src/capabilities/artifact-definition/index.d.ts.map +1 -0
  109. package/dist/types/src/capabilities/blueprint-definition/blueprint-definition.d.ts +11 -0
  110. package/dist/types/src/capabilities/blueprint-definition/blueprint-definition.d.ts.map +1 -0
  111. package/dist/types/src/capabilities/blueprint-definition/index.d.ts +3 -0
  112. package/dist/types/src/capabilities/blueprint-definition/index.d.ts.map +1 -0
  113. package/dist/types/src/capabilities/index.d.ts +6 -17
  114. package/dist/types/src/capabilities/index.d.ts.map +1 -1
  115. package/dist/types/src/capabilities/operation-resolver/index.d.ts +3 -0
  116. package/dist/types/src/capabilities/operation-resolver/index.d.ts.map +1 -0
  117. package/dist/types/src/capabilities/operation-resolver/operation-resolver.d.ts +5 -0
  118. package/dist/types/src/capabilities/operation-resolver/operation-resolver.d.ts.map +1 -0
  119. package/dist/types/src/capabilities/react-surface/index.d.ts +3 -0
  120. package/dist/types/src/capabilities/react-surface/index.d.ts.map +1 -0
  121. package/dist/types/src/capabilities/react-surface/react-surface.d.ts +5 -0
  122. package/dist/types/src/capabilities/react-surface/react-surface.d.ts.map +1 -0
  123. package/dist/types/src/capabilities/settings/index.d.ts +3 -0
  124. package/dist/types/src/capabilities/settings/index.d.ts.map +1 -0
  125. package/dist/types/src/capabilities/settings/settings.d.ts +7 -0
  126. package/dist/types/src/capabilities/settings/settings.d.ts.map +1 -0
  127. package/dist/types/src/capabilities/state/index.d.ts +3 -0
  128. package/dist/types/src/capabilities/state/index.d.ts.map +1 -0
  129. package/dist/types/src/capabilities/state/state.d.ts +5 -0
  130. package/dist/types/src/capabilities/state/state.d.ts.map +1 -0
  131. package/dist/types/src/cli/index.d.ts +2 -0
  132. package/dist/types/src/cli/index.d.ts.map +1 -0
  133. package/dist/types/src/cli/plugin.d.ts +3 -0
  134. package/dist/types/src/cli/plugin.d.ts.map +1 -0
  135. package/dist/types/src/components/MarkdownCard/MarkdownCard.d.ts +5 -4
  136. package/dist/types/src/components/MarkdownCard/MarkdownCard.d.ts.map +1 -1
  137. package/dist/types/src/components/MarkdownCard/MarkdownCard.stories.d.ts +5 -5
  138. package/dist/types/src/components/MarkdownCard/MarkdownCard.stories.d.ts.map +1 -1
  139. package/dist/types/src/components/MarkdownContainer.d.ts +21 -11
  140. package/dist/types/src/components/MarkdownContainer.d.ts.map +1 -1
  141. package/dist/types/src/components/MarkdownContainer.stories.d.ts +33 -0
  142. package/dist/types/src/components/MarkdownContainer.stories.d.ts.map +1 -1
  143. package/dist/types/src/components/MarkdownEditor/FileUpload.d.ts +11 -0
  144. package/dist/types/src/components/MarkdownEditor/FileUpload.d.ts.map +1 -0
  145. package/dist/types/src/components/MarkdownEditor/MarkdownEditor.d.ts +43 -23
  146. package/dist/types/src/components/MarkdownEditor/MarkdownEditor.d.ts.map +1 -1
  147. package/dist/types/src/components/MarkdownEditor/MarkdownEditor.stories.d.ts +5 -110
  148. package/dist/types/src/components/MarkdownEditor/MarkdownEditor.stories.d.ts.map +1 -1
  149. package/dist/types/src/components/MarkdownEditor/MarkdownEditorContent.d.ts +30 -0
  150. package/dist/types/src/components/MarkdownEditor/MarkdownEditorContent.d.ts.map +1 -0
  151. package/dist/types/src/components/MarkdownEditor/MarkdownEditorToolbar.d.ts +12 -0
  152. package/dist/types/src/components/MarkdownEditor/MarkdownEditorToolbar.d.ts.map +1 -0
  153. package/dist/types/src/components/MarkdownSettings/MarkdownSettings.d.ts +4 -2
  154. package/dist/types/src/components/MarkdownSettings/MarkdownSettings.d.ts.map +1 -1
  155. package/dist/types/src/components/Suggestions.stories.d.ts.map +1 -1
  156. package/dist/types/src/components/index.d.ts +7 -2
  157. package/dist/types/src/components/index.d.ts.map +1 -1
  158. package/dist/types/src/hooks/index.d.ts +3 -0
  159. package/dist/types/src/hooks/index.d.ts.map +1 -1
  160. package/dist/types/src/hooks/useEditorMenuOptions.d.ts +9 -0
  161. package/dist/types/src/hooks/useEditorMenuOptions.d.ts.map +1 -0
  162. package/dist/types/src/hooks/useExtensions.d.ts +21 -0
  163. package/dist/types/src/hooks/useExtensions.d.ts.map +1 -0
  164. package/dist/types/src/hooks/useLinkQuery.d.ts +4 -0
  165. package/dist/types/src/hooks/useLinkQuery.d.ts.map +1 -0
  166. package/dist/types/src/hooks/useSelectCurrentThread.d.ts.map +1 -1
  167. package/dist/types/src/index.d.ts +2 -2
  168. package/dist/types/src/index.d.ts.map +1 -1
  169. package/dist/types/src/meta.d.ts +2 -2
  170. package/dist/types/src/meta.d.ts.map +1 -1
  171. package/dist/types/src/testing.d.ts +6 -0
  172. package/dist/types/src/testing.d.ts.map +1 -0
  173. package/dist/types/src/translations.d.ts +33 -0
  174. package/dist/types/src/translations.d.ts.map +1 -1
  175. package/dist/types/src/types/Markdown.d.ts +16 -16
  176. package/dist/types/src/types/Markdown.d.ts.map +1 -1
  177. package/dist/types/src/types/MarkdownAction.d.ts +63 -31
  178. package/dist/types/src/types/MarkdownAction.d.ts.map +1 -1
  179. package/dist/types/src/types/capabilities.d.ts +22 -0
  180. package/dist/types/src/types/capabilities.d.ts.map +1 -0
  181. package/dist/types/src/types/events.d.ts +5 -0
  182. package/dist/types/src/types/events.d.ts.map +1 -0
  183. package/dist/types/src/types/index.d.ts +3 -0
  184. package/dist/types/src/types/index.d.ts.map +1 -1
  185. package/dist/types/src/types/types.d.ts +2 -2
  186. package/dist/types/src/types/types.d.ts.map +1 -1
  187. package/dist/types/src/util.d.ts +6 -3
  188. package/dist/types/src/util.d.ts.map +1 -1
  189. package/dist/types/src/util.test.d.ts +2 -0
  190. package/dist/types/src/util.test.d.ts.map +1 -0
  191. package/dist/types/tsconfig.tsbuildinfo +1 -1
  192. package/package.json +94 -56
  193. package/src/MarkdownPlugin.tsx +65 -94
  194. package/src/blueprints/functions/create.conversations.json +1 -0
  195. package/src/blueprints/functions/create.test.ts +92 -0
  196. package/src/blueprints/functions/create.ts +35 -0
  197. package/src/blueprints/functions/index.ts +7 -0
  198. package/src/{functions → blueprints/functions}/open.ts +11 -10
  199. package/src/blueprints/functions/update.conversations.json +1 -0
  200. package/src/blueprints/functions/update.test.ts +215 -0
  201. package/src/blueprints/functions/update.ts +79 -0
  202. package/src/blueprints/index.ts +5 -0
  203. package/src/blueprints/markdown-blueprint.ts +38 -0
  204. package/src/capabilities/anchor-sort/anchor-sort.ts +37 -0
  205. package/src/capabilities/anchor-sort/index.ts +7 -0
  206. package/src/capabilities/app-graph-serializer/app-graph-serializer.ts +60 -0
  207. package/src/capabilities/app-graph-serializer/index.ts +7 -0
  208. package/src/capabilities/artifact-definition/artifact-definition.ts +110 -0
  209. package/src/capabilities/artifact-definition/index.ts +7 -0
  210. package/src/capabilities/blueprint-definition/blueprint-definition.ts +26 -0
  211. package/src/capabilities/blueprint-definition/index.ts +7 -0
  212. package/src/capabilities/index.ts +6 -12
  213. package/src/capabilities/operation-resolver/index.ts +7 -0
  214. package/src/capabilities/operation-resolver/operation-resolver.ts +45 -0
  215. package/src/capabilities/react-surface/index.ts +7 -0
  216. package/src/capabilities/react-surface/react-surface.tsx +102 -0
  217. package/src/capabilities/settings/index.ts +7 -0
  218. package/src/capabilities/settings/settings.ts +37 -0
  219. package/src/capabilities/state/index.ts +7 -0
  220. package/src/capabilities/state/state.ts +31 -0
  221. package/src/cli/index.ts +5 -0
  222. package/src/cli/plugin.ts +30 -0
  223. package/src/components/MarkdownCard/MarkdownCard.stories.tsx +26 -44
  224. package/src/components/MarkdownCard/MarkdownCard.tsx +41 -53
  225. package/src/components/MarkdownContainer.stories.tsx +68 -54
  226. package/src/components/MarkdownContainer.tsx +106 -250
  227. package/src/components/MarkdownEditor/FileUpload.tsx +63 -0
  228. package/src/components/MarkdownEditor/MarkdownEditor.stories.tsx +56 -38
  229. package/src/components/MarkdownEditor/MarkdownEditor.tsx +227 -273
  230. package/src/components/MarkdownEditor/MarkdownEditorContent.tsx +162 -0
  231. package/src/components/MarkdownEditor/MarkdownEditorToolbar.tsx +66 -0
  232. package/src/components/MarkdownSettings/MarkdownSettings.tsx +48 -34
  233. package/src/components/Suggestions.stories.tsx +35 -39
  234. package/src/components/index.ts +10 -3
  235. package/src/hooks/index.ts +3 -0
  236. package/src/hooks/useEditorMenuOptions.ts +68 -0
  237. package/src/{extensions.tsx → hooks/useExtensions.tsx} +70 -95
  238. package/src/hooks/useLinkQuery.ts +83 -0
  239. package/src/hooks/useSelectCurrentThread.tsx +37 -32
  240. package/src/index.ts +3 -2
  241. package/src/meta.ts +5 -5
  242. package/src/testing.ts +27 -0
  243. package/src/translations.ts +6 -0
  244. package/src/types/Markdown.ts +8 -9
  245. package/src/types/MarkdownAction.ts +48 -18
  246. package/src/types/capabilities.ts +38 -0
  247. package/src/types/events.ts +14 -0
  248. package/src/types/index.ts +4 -0
  249. package/src/types/types.ts +3 -2
  250. package/src/util.test.ts +44 -0
  251. package/src/util.tsx +80 -11
  252. package/dist/lib/browser/MarkdownCard-AGWOTODZ.mjs +0 -83
  253. package/dist/lib/browser/MarkdownCard-AGWOTODZ.mjs.map +0 -7
  254. package/dist/lib/browser/MarkdownContainer-MV2UNAUV.mjs +0 -751
  255. package/dist/lib/browser/MarkdownContainer-MV2UNAUV.mjs.map +0 -7
  256. package/dist/lib/browser/anchor-sort-YWJI3BKT.mjs +0 -32
  257. package/dist/lib/browser/anchor-sort-YWJI3BKT.mjs.map +0 -7
  258. package/dist/lib/browser/app-graph-serializer-KYDFCUOW.mjs +0 -51
  259. package/dist/lib/browser/app-graph-serializer-KYDFCUOW.mjs.map +0 -7
  260. package/dist/lib/browser/blueprint-definition-BHRMFZAC.mjs +0 -11
  261. package/dist/lib/browser/chunk-6KU5DKP7.mjs +0 -51
  262. package/dist/lib/browser/chunk-6KU5DKP7.mjs.map +0 -7
  263. package/dist/lib/browser/chunk-HBBEHOP3.mjs +0 -106
  264. package/dist/lib/browser/chunk-HBBEHOP3.mjs.map +0 -7
  265. package/dist/lib/browser/chunk-O6XUPW6S.mjs.map +0 -7
  266. package/dist/lib/browser/chunk-ODB2PTBP.mjs +0 -28
  267. package/dist/lib/browser/chunk-ODB2PTBP.mjs.map +0 -7
  268. package/dist/lib/browser/chunk-OY6CGPOO.mjs +0 -16
  269. package/dist/lib/browser/chunk-OY6CGPOO.mjs.map +0 -7
  270. package/dist/lib/browser/chunk-XMT6PMU5.mjs +0 -79
  271. package/dist/lib/browser/chunk-XMT6PMU5.mjs.map +0 -7
  272. package/dist/lib/browser/chunk-Z5PDJNBV.mjs +0 -22
  273. package/dist/lib/browser/chunk-Z5PDJNBV.mjs.map +0 -7
  274. package/dist/lib/browser/intent-resolver-XHVCZZHU.mjs +0 -62
  275. package/dist/lib/browser/intent-resolver-XHVCZZHU.mjs.map +0 -7
  276. package/dist/lib/browser/react-surface-3A2GO3BN.mjs +0 -215
  277. package/dist/lib/browser/react-surface-3A2GO3BN.mjs.map +0 -7
  278. package/dist/lib/browser/settings-XY265Y2Q.mjs +0 -28
  279. package/dist/lib/browser/settings-XY265Y2Q.mjs.map +0 -7
  280. package/dist/lib/browser/state-6QODXCSZ.mjs +0 -37
  281. package/dist/lib/browser/state-6QODXCSZ.mjs.map +0 -7
  282. package/dist/lib/browser/toolkit-YA65QX2S.mjs +0 -76
  283. package/dist/lib/browser/toolkit-YA65QX2S.mjs.map +0 -7
  284. package/dist/lib/node-esm/MarkdownCard-B2IWTFOC.mjs +0 -84
  285. package/dist/lib/node-esm/MarkdownCard-B2IWTFOC.mjs.map +0 -7
  286. package/dist/lib/node-esm/MarkdownContainer-J2R3DLCQ.mjs +0 -752
  287. package/dist/lib/node-esm/MarkdownContainer-J2R3DLCQ.mjs.map +0 -7
  288. package/dist/lib/node-esm/anchor-sort-FCRYL2FX.mjs +0 -33
  289. package/dist/lib/node-esm/anchor-sort-FCRYL2FX.mjs.map +0 -7
  290. package/dist/lib/node-esm/app-graph-serializer-FAUQM3BH.mjs +0 -52
  291. package/dist/lib/node-esm/app-graph-serializer-FAUQM3BH.mjs.map +0 -7
  292. package/dist/lib/node-esm/blueprint-definition-XYFKMIDR.mjs +0 -12
  293. package/dist/lib/node-esm/chunk-7RDNIMTF.mjs +0 -24
  294. package/dist/lib/node-esm/chunk-7RDNIMTF.mjs.map +0 -7
  295. package/dist/lib/node-esm/chunk-CB2R4YIY.mjs +0 -17
  296. package/dist/lib/node-esm/chunk-CB2R4YIY.mjs.map +0 -7
  297. package/dist/lib/node-esm/chunk-FVI7LPC3.mjs +0 -107
  298. package/dist/lib/node-esm/chunk-FVI7LPC3.mjs.map +0 -7
  299. package/dist/lib/node-esm/chunk-FWZKC6X5.mjs +0 -80
  300. package/dist/lib/node-esm/chunk-FWZKC6X5.mjs.map +0 -7
  301. package/dist/lib/node-esm/chunk-VCG2U522.mjs +0 -29
  302. package/dist/lib/node-esm/chunk-VCG2U522.mjs.map +0 -7
  303. package/dist/lib/node-esm/chunk-XO3IEQJE.mjs.map +0 -7
  304. package/dist/lib/node-esm/chunk-ZBXV4ON7.mjs +0 -52
  305. package/dist/lib/node-esm/chunk-ZBXV4ON7.mjs.map +0 -7
  306. package/dist/lib/node-esm/intent-resolver-7A2EXGZQ.mjs +0 -63
  307. package/dist/lib/node-esm/intent-resolver-7A2EXGZQ.mjs.map +0 -7
  308. package/dist/lib/node-esm/react-surface-RCLL5WVQ.mjs +0 -216
  309. package/dist/lib/node-esm/react-surface-RCLL5WVQ.mjs.map +0 -7
  310. package/dist/lib/node-esm/settings-H3UDD3KO.mjs +0 -29
  311. package/dist/lib/node-esm/settings-H3UDD3KO.mjs.map +0 -7
  312. package/dist/lib/node-esm/state-W3PECOJX.mjs +0 -38
  313. package/dist/lib/node-esm/state-W3PECOJX.mjs.map +0 -7
  314. package/dist/lib/node-esm/toolkit-HSIKUGNK.mjs +0 -77
  315. package/dist/lib/node-esm/toolkit-HSIKUGNK.mjs.map +0 -7
  316. package/dist/types/src/capabilities/anchor-sort.d.ts +0 -6
  317. package/dist/types/src/capabilities/anchor-sort.d.ts.map +0 -1
  318. package/dist/types/src/capabilities/app-graph-serializer.d.ts +0 -4
  319. package/dist/types/src/capabilities/app-graph-serializer.d.ts.map +0 -1
  320. package/dist/types/src/capabilities/artifact-definition.d.ts +0 -3
  321. package/dist/types/src/capabilities/artifact-definition.d.ts.map +0 -1
  322. package/dist/types/src/capabilities/blueprint-definition.d.ts +0 -5
  323. package/dist/types/src/capabilities/blueprint-definition.d.ts.map +0 -1
  324. package/dist/types/src/capabilities/capabilities.d.ts +0 -12
  325. package/dist/types/src/capabilities/capabilities.d.ts.map +0 -1
  326. package/dist/types/src/capabilities/intent-resolver.d.ts +0 -4
  327. package/dist/types/src/capabilities/intent-resolver.d.ts.map +0 -1
  328. package/dist/types/src/capabilities/react-surface.d.ts +0 -4
  329. package/dist/types/src/capabilities/react-surface.d.ts.map +0 -1
  330. package/dist/types/src/capabilities/settings.d.ts +0 -4
  331. package/dist/types/src/capabilities/settings.d.ts.map +0 -1
  332. package/dist/types/src/capabilities/state.d.ts +0 -11
  333. package/dist/types/src/capabilities/state.d.ts.map +0 -1
  334. package/dist/types/src/capabilities/toolkit.d.ts +0 -4
  335. package/dist/types/src/capabilities/toolkit.d.ts.map +0 -1
  336. package/dist/types/src/components/Toolbar.stories.d.ts +0 -48
  337. package/dist/types/src/components/Toolbar.stories.d.ts.map +0 -1
  338. package/dist/types/src/events.d.ts +0 -4
  339. package/dist/types/src/events.d.ts.map +0 -1
  340. package/dist/types/src/extensions.d.ts +0 -22
  341. package/dist/types/src/extensions.d.ts.map +0 -1
  342. package/dist/types/src/functions/diff.d.ts +0 -6
  343. package/dist/types/src/functions/diff.d.ts.map +0 -1
  344. package/dist/types/src/functions/index.d.ts +0 -3
  345. package/dist/types/src/functions/index.d.ts.map +0 -1
  346. package/dist/types/src/functions/open.d.ts.map +0 -1
  347. package/src/capabilities/anchor-sort.ts +0 -30
  348. package/src/capabilities/app-graph-serializer.ts +0 -54
  349. package/src/capabilities/artifact-definition.ts +0 -112
  350. package/src/capabilities/blueprint-definition.ts +0 -39
  351. package/src/capabilities/capabilities.ts +0 -21
  352. package/src/capabilities/intent-resolver.ts +0 -58
  353. package/src/capabilities/react-surface.tsx +0 -115
  354. package/src/capabilities/settings.ts +0 -25
  355. package/src/capabilities/state.ts +0 -31
  356. package/src/capabilities/toolkit.ts +0 -49
  357. package/src/components/Toolbar.stories.tsx +0 -118
  358. package/src/events.ts +0 -11
  359. package/src/functions/diff.ts +0 -37
  360. package/src/functions/index.ts +0 -6
  361. /package/dist/lib/browser/{blueprint-definition-BHRMFZAC.mjs.map → MarkdownCard-7VIO7R66.mjs.map} +0 -0
  362. /package/dist/lib/{node-esm/blueprint-definition-XYFKMIDR.mjs.map → browser/MarkdownContainer-6E43EDAU.mjs.map} +0 -0
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/util.tsx", "../../../src/hooks/useLinkQuery.ts", "../../../src/hooks/useEditorMenuOptions.ts", "../../../src/hooks/useExtensions.tsx", "../../../src/hooks/useSelectCurrentThread.tsx", "../../../src/components/MarkdownEditor/MarkdownEditor.tsx", "../../../src/components/MarkdownEditor/MarkdownEditorContent.tsx", "../../../src/components/MarkdownEditor/MarkdownEditorToolbar.tsx", "../../../src/components/MarkdownEditor/FileUpload.tsx"],
4
+ "sourcesContent": ["//\n// Copyright 2023 DXOS.org\n//\n\nimport { debounce } from '@dxos/async';\nimport { Obj } from '@dxos/echo';\nimport { type TypedObjectSerializer } from '@dxos/plugin-space/types';\n\nimport { Markdown } from './types';\n\n/**\n * Checks if an object conforms to the interface needed to render an editor.\n * @deprecated Use Schema.instanceOf(Markdown.Document, data)\n */\n// TODO(burdon): Normalize types (from FilesPlugin).\nexport const isEditorModel = (data: any): data is { id: string; text: string } =>\n data &&\n typeof data === 'object' &&\n 'id' in data &&\n typeof data.id === 'string' &&\n 'text' in data &&\n typeof data.text === 'string';\n\nexport type MarkdownProperties = Record<string, any>;\n\nexport const isMarkdownProperties = (data: unknown): data is MarkdownProperties =>\n (Obj.isObject(data) as boolean)\n ? true\n : data && typeof data === 'object'\n ? 'title' in data && typeof data.title === 'string'\n : false;\n\nconst nonTitleChars = /[^\\w ]/g;\n\n// Lines matching these patterns are skipped.\nconst skipPatterns = [\n /^!\\[/, // Image.\n /^---\\s*$/, // Horizontal rule.\n /^```/, // Code block fence.\n /^\\s*$/, // Empty or whitespace-only.\n];\n\n// Patterns to extract title text (first capture group is used).\nconst titlePatterns = [\n /^#{1,6}\\s+(.+)/, // Heading.\n];\n\n/**\n * Extracts a fallback name by scanning lines for the first heading or text fragment.\n */\nexport const getFallbackName = (content = ''): string => {\n const len = content.length;\n\n let i = 0;\n while (i < len) {\n // Find end of line.\n let lineEnd = i;\n while (lineEnd < len && content[lineEnd] !== '\\n') {\n lineEnd++;\n }\n\n const line = content.slice(i, lineEnd).trim();\n i = lineEnd + 1;\n\n // Skip lines matching skip patterns.\n if (skipPatterns.some((pattern) => pattern.test(line))) {\n continue;\n }\n\n // Check for title patterns.\n for (const pattern of titlePatterns) {\n const match = pattern.exec(line);\n if (match) {\n const text = match[1].replaceAll(nonTitleChars, '').trim();\n if (text.length > 0) {\n return text;\n }\n }\n }\n\n // Use line as plain text fallback.\n const maxLen = 32;\n const text = line.replaceAll(nonTitleChars, '').trim();\n if (text.length > 0) {\n if (text.length > maxLen) {\n const words = text.split(/\\s+/);\n let result = '';\n for (const word of words) {\n const next = result.length === 0 ? word : result + ' ' + word;\n if (next.length > maxLen) {\n break;\n }\n result = next;\n }\n\n return result + '…';\n }\n\n return text;\n }\n }\n\n return '';\n};\n\n// TODO(burdon): Option to strip Markdown.\nexport const getContentSnippet = (content = '') => {\n const abstract = content\n .split('\\n')\n .filter((line) => !line.startsWith('!'))\n .filter((line) => line.trim() !== '');\n\n return abstract.slice(0, 3).join('\\n') ?? '';\n};\n\nexport const setFallbackName = debounce((doc: Markdown.Document, content = '') => {\n const name = getFallbackName(content);\n if (doc.fallbackName !== name) {\n Obj.change(doc, (d) => {\n d.fallbackName = name;\n });\n }\n}, 200);\n\nexport const serializer: TypedObjectSerializer<Markdown.Document> = {\n serialize: async ({ object }): Promise<string> => {\n const { content } = await object.content.load();\n return JSON.stringify({ name: object.name, fallbackName: object.fallbackName, content });\n },\n\n deserialize: async ({ content: serialized }) => {\n const { name, fallbackName, content } = JSON.parse(serialized);\n return Markdown.make({ name, fallbackName, content });\n },\n};\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport * as Option from 'effect/Option';\nimport { useCallback, useMemo } from 'react';\n\nimport { usePluginManager } from '@dxos/app-framework/ui';\nimport { AppCapabilities } from '@dxos/app-toolkit';\nimport { type Database, Filter, Obj, Query, Type } from '@dxos/echo';\nimport { EntityKind, SystemTypeAnnotation, getTypeAnnotation } from '@dxos/echo/internal';\nimport { toLocalizedString, useTranslation } from '@dxos/react-ui';\nimport { type EditorMenuGroup, type EditorMenuItem } from '@dxos/react-ui-editor';\nimport { insertAtCursor, insertAtLineStart } from '@dxos/ui-editor';\n\nexport const useLinkQuery = (db: Database.Database | undefined) => {\n const { t } = useTranslation();\n\n const manager = usePluginManager();\n const resolve = useCallback(\n (typename: string) =>\n manager.capabilities.getAll(AppCapabilities.Metadata).find(({ id }) => id === typename)?.metadata ?? {},\n [manager],\n );\n\n const filter = useMemo(\n () =>\n Filter.or(\n ...(db?.schemaRegistry.query({ location: ['database', 'runtime'] }).runSync() ?? [])\n .filter((schema) => getTypeAnnotation(schema)?.kind !== EntityKind.Relation)\n .filter((schema) => !SystemTypeAnnotation.get(schema).pipe(Option.getOrElse(() => false)))\n .map((schema) => Filter.typename(Type.getTypename(schema))),\n ),\n [db],\n );\n\n const handleLinkQuery = useCallback(\n async (query?: string): Promise<EditorMenuGroup[]> => {\n const name = query?.startsWith('@') ? query.slice(1).toLowerCase() : (query?.toLowerCase() ?? '');\n const results = await db?.query(Query.select(filter)).run();\n\n // TODO(wittjosiah): Use `Obj.Unknown` type.\n const getLabel = (object: any) => {\n const label = Obj.getLabel(object);\n if (label) {\n return label;\n }\n\n // TODO(wittjosiah): Remove metadata labels.\n const type = Obj.getTypename(object)!;\n const metadata = resolve(type);\n return metadata.label?.(object) || ['object name placeholder', { ns: type, default: 'New object' }];\n };\n\n const items =\n results\n ?.filter((object) => toLocalizedString(getLabel(object), t).toLowerCase().includes(name))\n // TODO(wittjosiah): Remove `any` type.\n .map((object: any): EditorMenuItem => {\n const metadata = resolve(Obj.getTypename(object)!);\n const label = toLocalizedString(getLabel(object), t);\n return {\n id: object.id,\n label,\n icon: metadata.icon,\n onSelect: ({ view, head }) => {\n const link = `[${label}](${Obj.getDXN(object)})`;\n if (query?.startsWith('@')) {\n insertAtLineStart(view, head, `!${link}\\n`);\n } else {\n insertAtCursor(view, head, `${link} `);\n }\n },\n };\n }) ?? [];\n\n return [{ id: 'echo', items }];\n },\n [db, filter, resolve],\n );\n\n return handleLinkQuery;\n};\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport { type EditorView } from '@codemirror/view';\nimport { useCallback, useMemo, useRef } from 'react';\n\nimport { toLocalizedString, useTranslation } from '@dxos/react-ui';\nimport {\n type EditorMenuGroup,\n type UseEditorMenuProps,\n filterMenuGroups,\n formattingCommands,\n linkSlashCommands,\n} from '@dxos/react-ui-editor';\nimport { Domino } from '@dxos/ui';\n\nimport { meta } from '../meta';\n\nexport type UseEditorMenuOptionsProps = {\n editorView?: EditorView;\n slashCommandGroups?: EditorMenuGroup[];\n onLinkQuery?: (query?: string) => Promise<EditorMenuGroup[]>;\n};\n\nexport const useEditorMenuOptions = ({\n editorView,\n slashCommandGroups,\n onLinkQuery,\n}: UseEditorMenuOptionsProps): UseEditorMenuProps => {\n const { t } = useTranslation(meta.id);\n\n const getMenu = useCallback<NonNullable<UseEditorMenuProps['getMenu']>>(\n ({ text, trigger }) => {\n switch (trigger) {\n case '@': {\n return onLinkQuery?.(text) ?? [];\n }\n\n case '/':\n default: {\n return filterMenuGroups([formattingCommands, linkSlashCommands, ...(slashCommandGroups ?? [])], (item) =>\n text ? toLocalizedString(item.label, t).toLowerCase().includes(text.toLowerCase()) : true,\n );\n }\n }\n },\n [slashCommandGroups, onLinkQuery],\n );\n\n const viewRef = useRef(editorView);\n return useMemo<UseEditorMenuProps>(() => {\n const trigger = onLinkQuery ? ['/', '@'] : ['/'];\n const placeholder = {\n delay: 3_000,\n content: () => {\n const pressEl = Domino.of('span').text('Press');\n const triggerEls = trigger.map((text) =>\n Domino.of('span').classNames('mx-1 pli-1.5 pt-[1px] pb-[2px] border border-separator rounded-sm').text(text),\n );\n const forCommandsEl = Domino.of('span').text('for commands.');\n return Domino.of('div').children(pressEl, ...triggerEls, forCommandsEl).root;\n },\n };\n\n return { viewRef, getMenu, trigger, placeholder };\n }, [getMenu, onLinkQuery]);\n};\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport { type ViewUpdate } from '@codemirror/view';\nimport React, { type AnchorHTMLAttributes, type ReactNode, useMemo } from 'react';\nimport { createRoot } from 'react-dom/client';\n\nimport { type Capabilities } from '@dxos/app-framework';\nimport { useOperationInvoker } from '@dxos/app-framework/ui';\nimport { LayoutOperation } from '@dxos/app-toolkit';\nimport { debounceAndThrottle } from '@dxos/async';\nimport { Obj } from '@dxos/echo';\nimport { createDocAccessor } from '@dxos/echo-db';\nimport { invariant } from '@dxos/invariant';\nimport { getSpace, useObject } from '@dxos/react-client/echo';\nimport { useIdentity } from '@dxos/react-client/halo';\nimport { Icon, ThemeProvider } from '@dxos/react-ui';\nimport { type SelectionManager } from '@dxos/react-ui-attention';\nimport { Text } from '@dxos/schema';\nimport {\n Cursor,\n type EditorStateStore,\n EditorView,\n type EditorViewMode,\n type Extension,\n InputModeExtensions,\n type PreviewOptions,\n type RenderCallback,\n createDataExtensions,\n decorateMarkdown,\n documentId,\n folding,\n formattingKeymap,\n linkTooltip,\n listener,\n preview,\n replacer,\n selectionState,\n typewriter,\n} from '@dxos/ui-editor';\nimport { defaultTx } from '@dxos/ui-theme';\nimport { isTruthy } from '@dxos/util';\n\nimport { Markdown } from '../types';\nimport { setFallbackName } from '../util';\n\nexport type DocumentType = Markdown.Document | Text.Text | { id: string; text: string };\n\nexport type ExtensionsOptions = {\n id: string;\n object?: DocumentType;\n invokePromise?: Capabilities.OperationInvoker['invokePromise'];\n settings?: Markdown.Settings;\n selectionManager?: SelectionManager;\n viewMode?: EditorViewMode;\n editorStateStore?: EditorStateStore;\n previewOptions?: PreviewOptions;\n};\n\n// TODO(burdon): Merge with createBaseExtensions below.\nexport const useExtensions = ({\n id,\n object,\n settings,\n selectionManager,\n viewMode,\n editorStateStore,\n previewOptions,\n}: ExtensionsOptions): Extension[] => {\n const { invokePromise } = useOperationInvoker();\n const identity = useIdentity();\n const space = getSpace(object);\n\n // Get the content reference from Document objects.\n const contentRef = Obj.instanceOf(Markdown.Document, object) ? (object as Markdown.Document).content : undefined;\n // Use useObject to trigger re-render when the reference loads (returns snapshot for reactivity).\n useObject(contentRef);\n // Get the actual live object target via .target (needed for createDocAccessor).\n const target = contentRef?.target ?? (Obj.instanceOf(Text.Text, object) ? object : undefined);\n\n // TODO(wittjosiah): Autocomplete is not working and this query is causing performance issues.\n // TODO(burdon): Unsubscribe.\n // const query = space?.db.query(Filter.type(DocumentType));\n // query?.subscribe();\n\n const baseExtensions = useMemo(\n () =>\n createBaseExtensions({\n id,\n object,\n settings,\n selectionManager,\n viewMode,\n previewOptions,\n invokePromise,\n }),\n [\n id,\n object,\n viewMode,\n invokePromise,\n previewOptions,\n settings,\n settings?.debug,\n settings?.editorInputMode,\n settings?.folding,\n settings?.numberedHeadings,\n settings?.typewriter,\n selectionManager,\n ],\n );\n\n return useMemo<Extension[]>(\n () =>\n [\n // TODO(burdon): Pass this in?\n // NOTE: Data extensions must be first so that automerge is updated before other extensions compute their state.\n target &&\n createDataExtensions({\n id,\n text: createDocAccessor(target, ['content']),\n messenger: space,\n identity,\n }),\n\n // TODO(burdon): Reconcile with effect in parent.\n Obj.instanceOf(Markdown.Document, object) &&\n listener({\n onChange: ({ text }) => {\n setFallbackName(object as Markdown.Document, text);\n },\n }),\n\n baseExtensions,\n selectionState(editorStateStore),\n ].filter(isTruthy),\n [identity, space, id, object, target, baseExtensions],\n );\n};\n\n/**\n * Create extension instances for editor.\n */\nconst createBaseExtensions = ({\n id,\n object,\n invokePromise,\n settings,\n selectionManager,\n viewMode,\n previewOptions,\n}: ExtensionsOptions): Extension[] => {\n const extensions: Extension[] = [\n selectionManager && selectionChange(selectionManager),\n settings?.editorInputMode && InputModeExtensions[settings.editorInputMode],\n settings?.folding && folding(),\n ].filter(isTruthy);\n\n //\n // Markdown\n //\n if (viewMode !== 'source') {\n extensions.push(\n ...[\n formattingKeymap(),\n decorateMarkdown({\n selectionChangeDelay: 100,\n numberedHeadings: settings?.numberedHeadings ? { from: 2 } : undefined,\n // TODO(wittjosiah): For internal links, consider ignoring the link text and rendering the label of the object being linked to.\n // TODO(burdon): Create dx-tag.\n renderLinkButton:\n invokePromise && (object || id)\n ? createLinkRenderer((targetId: string) => {\n void invokePromise(LayoutOperation.Open, {\n subject: [targetId],\n pivotId: object && Obj.isObject(object) ? Obj.getDXN(object).toString() : id,\n });\n })\n : undefined,\n }),\n linkTooltip(renderLinkTooltip),\n preview(previewOptions),\n replacer(),\n ],\n );\n }\n\n if (settings?.debug) {\n const items = settings.typewriter?.split(/[,\\n]/) ?? '';\n if (items) {\n extensions.push(typewriter({ items }));\n }\n }\n\n return extensions;\n};\n\nconst selectionChange = (selectionManager: SelectionManager) => {\n return EditorView.updateListener.of(\n debounceAndThrottle((update: ViewUpdate) => {\n if (update.selectionSet) {\n const id = update.state.facet(documentId);\n const cursorConverter = update.state.facet(Cursor.converter);\n const selection = update.state.selection;\n const ranges = selection.ranges\n .map((range) => ({\n from: cursorConverter.toCursor(range.from),\n to: cursorConverter.toCursor(range.to),\n }))\n .filter(({ from, to }) => to > from);\n\n selectionManager.updateMultiRange(id, ranges);\n }\n }, 100),\n );\n};\n\n// TODO(burdon): Factor out styles.\nconst style = {\n hover: 'rounded-sm text-primary-500 hover:text-primary-600 dark:text-primary-500 hover:dark:text-primary-400',\n icon: 'inline-block leading-none mis-1 cursor-pointer',\n};\n\nconst createLinkRenderer =\n (onSelectObject: (id: string) => void): RenderCallback<{ url: string }> =>\n (el, { url }) => {\n // TODO(burdon): Formalize/document internal link format.\n const isInternal =\n url.startsWith('/') ||\n // TODO(wittjosiah): This should probably be parsed out on paste?\n url.startsWith(window.location.origin);\n\n const options: AnchorHTMLAttributes<any> = isInternal\n ? {\n onClick: () => {\n const qualifiedId = url.split('/').at(-1);\n invariant(qualifiedId, 'Invalid link format.');\n onSelectObject(qualifiedId);\n },\n }\n : {\n href: url,\n rel: 'noreferrer',\n target: '_blank',\n };\n\n renderRoot(\n el,\n <a {...options} className={style.hover}>\n <Icon\n icon={isInternal ? 'ph--arrow-square-down--bold' : 'ph--arrow-square-out--bold'}\n size={4}\n classNames={style.icon}\n />\n </a>,\n );\n };\n\nconst renderLinkTooltip: RenderCallback<{ url: string }> = (el, { url }) => {\n const web = new URL(url);\n renderRoot(\n el,\n <a href={url} rel='noreferrer' target='_blank' className={style.hover}>\n {web.origin}\n <Icon icon='ph--arrow-square-out--bold' size={4} classNames={style.icon} />\n </a>,\n );\n};\n\n// TODO(burdon): REMOVE.\nconst renderRoot = <T extends Element>(root: T, node: ReactNode): T => {\n createRoot(root).render(<ThemeProvider tx={defaultTx}>{node}</ThemeProvider>);\n return root;\n};\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport { EditorView } from '@codemirror/view';\nimport * as Effect from 'effect/Effect';\nimport { useMemo } from 'react';\n\nimport { useOperationResolver } from '@dxos/app-framework/ui';\nimport { LayoutOperation } from '@dxos/app-toolkit';\nimport { invariant } from '@dxos/invariant';\nimport { OperationResolver } from '@dxos/operation';\nimport { Cursor, setSelection } from '@dxos/ui-editor';\n\nimport { meta } from '../meta';\n\n/**\n * Handle scrolling and selection of the current thread in a markdown editor.\n */\nexport const useSelectCurrentThread = (editorView: EditorView | null, documentId: string) => {\n const scrollIntoViewHandler = useMemo(\n () =>\n OperationResolver.make({\n operation: LayoutOperation.ScrollIntoView,\n position: 'hoist',\n filter: (input) => !!editorView && input.subject === documentId && !!input.cursor,\n handler: (input) =>\n Effect.sync(() => {\n invariant(editorView, 'Editor view is not defined.');\n const cursor = input.cursor;\n if (!cursor) {\n return;\n }\n const range = Cursor.getRangeFromCursor(editorView.state, cursor);\n if (range) {\n const selection =\n editorView.state.selection.main.from !== range.from ? { anchor: range.from } : undefined;\n const effects = [\n // NOTE: This does not use the DOM scrollIntoView function.\n EditorView.scrollIntoView(range.from, {\n y: 'start',\n yMargin: 96,\n }),\n ];\n if (selection) {\n // Update the editor selection to get bi-directional highlighting.\n effects.push(setSelection.of({ current: documentId }));\n }\n\n editorView.dispatch({\n effects,\n selection: selection ? { anchor: range.from } : undefined,\n });\n }\n }),\n }),\n [documentId, editorView],\n );\n\n useOperationResolver(meta.id, scrollIntoViewHandler);\n};\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport { type Extension } from '@codemirror/state';\nimport { type EditorView } from '@codemirror/view';\nimport { type Atom } from '@effect-atom/atom-react';\nimport { createContext } from '@radix-ui/react-context';\nimport React, { type PropsWithChildren, useMemo, useState } from 'react';\nimport { createPortal } from 'react-dom';\n\nimport { Surface } from '@dxos/app-framework/ui';\nimport { DXN } from '@dxos/keys';\nimport { useClient } from '@dxos/react-client';\nimport {\n EditorMenuProvider,\n type EditorToolbarState,\n type UseEditorMenu,\n useEditorMenu,\n useEditorToolbar,\n} from '@dxos/react-ui-editor';\nimport { type PreviewBlock, type PreviewOptions } from '@dxos/ui-editor';\nimport { isNonNullable } from '@dxos/util';\n\nimport {\n type DocumentType,\n type ExtensionsOptions,\n type UseEditorMenuOptionsProps,\n useEditorMenuOptions,\n useExtensions,\n} from '../../hooks';\n\nimport {\n MarkdownEditorContent as NaturalMarkdownEditorContent,\n type MarkdownEditorContentProps as NaturalMarkdownEditorContentProps,\n} from './MarkdownEditorContent';\nimport {\n MarkdownEditorToolbar as NaturalMarkdownToolbar,\n type MarkdownEditorToolbarProps as NaturalMarkdownToolbarProps,\n} from './MarkdownEditorToolbar';\n\n//\n// Context\n//\n\ntype MarkdownEditorContextValue = {\n id: string;\n setEditorView: (view: EditorView) => void;\n extensions: Extension[];\n previewBlocks: PreviewBlock[];\n toolbarState: Atom.Writable<EditorToolbarState>;\n popoverMenu: Omit<UseEditorMenu, 'extension'>;\n} & (Pick<ExtensionsOptions, 'viewMode'> &\n Pick<NaturalMarkdownToolbarProps, 'editorView' | 'onAction' | 'onFileUpload' | 'onViewModeChange'>);\n\nconst [MarkdownEditorContextProvider, useMarkdownEditorContext] =\n createContext<MarkdownEditorContextValue>('MarkdownEditor.Context');\n\n//\n// MarkdownEditor.Root\n//\n\ntype MarkdownEditorRootProps = PropsWithChildren<\n {\n object?: DocumentType;\n extensions?: Extension[];\n } & Pick<MarkdownEditorContextValue, 'id' | 'onAction' | 'onFileUpload' | 'onViewModeChange' | 'viewMode'> &\n Pick<UseEditorMenuOptionsProps, 'slashCommandGroups' | 'onLinkQuery'> &\n Pick<ExtensionsOptions, 'editorStateStore' | 'selectionManager' | 'settings'>\n>;\n\nconst MarkdownEditorRoot = ({\n children,\n id,\n object,\n editorStateStore,\n selectionManager,\n settings,\n viewMode,\n extensions: extensionsProp,\n slashCommandGroups,\n onLinkQuery,\n ...props\n}: MarkdownEditorRootProps) => {\n const [editorView, setEditorView] = useState<EditorView>();\n\n // Preview blocks.\n const [previewBlocks, setPreviewBlocks] = useState<PreviewBlock[]>([]);\n const previewOptions = useMemo<PreviewOptions>(\n () => ({\n addBlockContainer: (block) => {\n setPreviewBlocks((prev) => [...prev, block]);\n },\n removeBlockContainer: ({ link }) => {\n setPreviewBlocks((prev) => prev.filter(({ link: prevLink }) => prevLink.dxn !== link.dxn));\n },\n }),\n [],\n );\n\n // Toolbar state.\n const toolbarState = useEditorToolbar({ viewMode });\n\n // Context menu.\n const menuOptions = useEditorMenuOptions({\n editorView,\n slashCommandGroups,\n onLinkQuery,\n });\n const { extension: menuExtension, ...menuProps } = useEditorMenu(menuOptions);\n\n // Extensions.\n const coreExtensions = useExtensions({\n id,\n object,\n editorStateStore,\n previewOptions,\n selectionManager,\n settings,\n viewMode,\n });\n\n const extensions = useMemo(\n () => [coreExtensions, menuExtension, extensionsProp].filter(isNonNullable),\n [coreExtensions, menuExtension, extensionsProp],\n );\n\n return (\n <MarkdownEditorContextProvider\n id={id}\n editorView={editorView}\n setEditorView={setEditorView}\n extensions={extensions}\n previewBlocks={previewBlocks}\n toolbarState={toolbarState}\n popoverMenu={menuProps}\n viewMode={viewMode}\n {...props}\n >\n {children}\n </MarkdownEditorContextProvider>\n );\n};\n\nMarkdownEditorRoot.displayName = 'MarkdownEditor.Root';\n\n//\n// MarkdownEditor.Main\n//\n\nconst MARKDOWN_EDITOR_CONTENT_NAME = 'MarkdownEditor.Content';\n\ntype MarkdownEditorContentProps = Omit<NaturalMarkdownEditorContentProps, 'id' | 'extensions' | 'toolbarState'>;\n\nconst MarkdownEditorContent = (props: MarkdownEditorContentProps) => {\n const {\n id,\n editorView,\n setEditorView,\n viewMode,\n toolbarState,\n extensions,\n popoverMenu: { groupsRef, ...menuProps },\n } = useMarkdownEditorContext(MARKDOWN_EDITOR_CONTENT_NAME);\n\n return (\n <EditorMenuProvider view={editorView} groups={groupsRef.current} {...menuProps}>\n <NaturalMarkdownEditorContent\n {...props}\n id={id}\n viewMode={viewMode}\n toolbarState={toolbarState}\n extensions={extensions}\n ref={setEditorView}\n />\n </EditorMenuProvider>\n );\n};\n\nMarkdownEditorContent.displayName = MARKDOWN_EDITOR_CONTENT_NAME;\n\n//\n// MarkdownEditor.Toolbar\n//\n\nconst MARKDOWN_EDITOR_TOOLBAR_NAME = 'MarkdownEditor.Toolbar';\n\ntype MarkdownEditorToolbarProps = Omit<\n NaturalMarkdownToolbarProps,\n 'state' | 'editorView' | 'onAction' | 'onFileUpload' | 'onViewModeChange'\n>;\n\nconst MarkdownEditorToolbar = (props: MarkdownEditorToolbarProps) => {\n const { toolbarState, ...rootProps } = useMarkdownEditorContext(MARKDOWN_EDITOR_TOOLBAR_NAME);\n\n return <NaturalMarkdownToolbar {...props} {...rootProps} state={toolbarState} />;\n};\n\nMarkdownEditorToolbar.displayName = MARKDOWN_EDITOR_TOOLBAR_NAME;\n\n//\n// MarkdownEditor.Blocks (embedded objects)\n//\n\nconst MARKDOWN_EDITOR_BLOCKS_NAME = 'MarkdownEditor.Blocks';\n\ntype MarkdownEditorBlocksProps = {};\n\nconst MarkdownEditorBlocks = (_props: MarkdownEditorBlocksProps) => {\n const { previewBlocks } = useMarkdownEditorContext(MARKDOWN_EDITOR_BLOCKS_NAME);\n\n return (\n <>\n {previewBlocks.map(({ link, el }) => (\n <PreviewBlock key={link.dxn} link={link} el={el} />\n ))}\n </>\n );\n};\n\nMarkdownEditorBlocks.displayName = MARKDOWN_EDITOR_BLOCKS_NAME;\n\nconst PreviewBlock = ({ el, link }: PreviewBlock) => {\n const client = useClient();\n const dxn = DXN.parse(link.dxn);\n const subject = client.graph.makeRef(dxn).target;\n const data = useMemo(() => ({ subject }), [subject]);\n\n return createPortal(<Surface.Surface role='card--transclusion' data={data} limit={1} />, el);\n};\n\n//\n// MarkdownEditor\n//\n\nexport const MarkdownEditor = {\n Root: MarkdownEditorRoot,\n Content: MarkdownEditorContent,\n Toolbar: MarkdownEditorToolbar,\n Blocks: MarkdownEditorBlocks,\n};\n\nexport type {\n MarkdownEditorRootProps,\n MarkdownEditorContentProps,\n MarkdownEditorToolbarProps,\n MarkdownEditorBlocksProps,\n};\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport { type EditorView } from '@codemirror/view';\nimport { type Atom, RegistryContext } from '@effect-atom/atom-react';\nimport React, { forwardRef, useCallback, useContext, useEffect, useImperativeHandle, useMemo } from 'react';\n\nimport { type ThemedClassName, useThemeContext, useTranslation } from '@dxos/react-ui';\nimport {\n type EditorMenuGroup,\n type EditorToolbarState,\n type UseTextEditorProps,\n useTextEditor,\n} from '@dxos/react-ui-editor';\nimport {\n type EditorSelectionState,\n type EditorStateStore,\n type EditorViewMode,\n type ThemeExtensionsOptions,\n createBasicExtensions,\n createMarkdownExtensions,\n createThemeExtensions,\n dropFile,\n editorSlots,\n formattingListener,\n processEditorPayload,\n stackItemContentEditorClassNames,\n} from '@dxos/ui-editor';\nimport { mx } from '@dxos/ui-theme';\nimport { isTruthy } from '@dxos/util';\n\nimport { useSelectCurrentThread } from '../../hooks';\nimport { meta } from '../../meta';\n\nimport { type MarkdownEditorToolbarProps } from './MarkdownEditorToolbar';\n\nexport type MarkdownEditorContentProps = ThemedClassName<{\n id: string;\n role?: string;\n viewMode?: EditorViewMode;\n scrollPastEnd?: boolean;\n slashCommandGroups?: EditorMenuGroup[];\n editorStateStore?: EditorStateStore;\n toolbarState?: Atom.Writable<EditorToolbarState>;\n onLinkQuery?: (query?: string) => Promise<EditorMenuGroup[]>;\n}> &\n // prettier-ignore\n Pick<UseTextEditorProps, 'initialValue' | 'extensions'> &\n Pick<MarkdownEditorToolbarProps, 'onFileUpload'> &\n Pick<ThemeExtensionsOptions, 'slots'>;\n\nexport const MarkdownEditorContent = forwardRef<EditorView | null, MarkdownEditorContentProps>(\n (\n {\n classNames,\n id,\n role,\n viewMode,\n initialValue,\n editorStateStore,\n toolbarState,\n extensions,\n scrollPastEnd,\n slots = editorSlots,\n onFileUpload,\n },\n forwardedRef,\n ) => {\n const { t } = useTranslation(meta.id);\n const { themeMode } = useThemeContext();\n const registry = useContext(RegistryContext);\n\n // Callback to update toolbar state atom.\n const updateToolbarState = useCallback(\n (formatting: EditorToolbarState) => {\n if (toolbarState) {\n registry.set(toolbarState, { ...registry.get(toolbarState), ...formatting });\n }\n },\n [registry, toolbarState],\n );\n\n // Restore last selection and scroll point.\n const { scrollTo, selection } = useMemo<EditorSelectionState>(() => editorStateStore?.getState(id) ?? {}, [id]);\n\n const {\n parentRef,\n view: editorView,\n focusAttributes,\n } = useTextEditor(\n () => ({\n ...(role !== 'section' && {\n id,\n scrollTo,\n selection,\n // TODO(wittjosiah): Autofocus based on layout is racy.\n // autoFocus: layoutPlugin?.provides.layout ? layoutPlugin?.provides.layout.scrollIntoView === id : true,\n selectionEnd: true,\n }),\n initialValue,\n extensions: [\n createBasicExtensions({\n readOnly: viewMode === 'readonly',\n placeholder: t('editor placeholder'),\n scrollPastEnd: scrollPastEnd && role !== 'section',\n search: true,\n }),\n createThemeExtensions({\n themeMode,\n slots,\n syntaxHighlighting: true,\n }),\n createMarkdownExtensions(),\n toolbarState && formattingListener(updateToolbarState),\n role !== 'section' &&\n onFileUpload &&\n dropFile({\n // TODO(wittjosiah): Factor out to file uploader plugin.\n onDrop: async (view, { files }) => {\n const file = files[0];\n const info = file && onFileUpload ? await onFileUpload(file) : undefined;\n if (info) {\n processEditorPayload(view, { type: 'image', data: info.url });\n }\n },\n }),\n extensions,\n ].filter(isTruthy),\n }),\n [id, viewMode, themeMode, extensions],\n );\n\n useImperativeHandle<EditorView | null, EditorView | null>(forwardedRef, () => editorView, [editorView]);\n\n useSelectCurrentThread(editorView, id);\n\n useTest(editorView);\n\n return (\n <div\n role='none'\n ref={parentRef}\n data-testid='composer.markdownRoot'\n className={mx(stackItemContentEditorClassNames(role), classNames)}\n data-popover-collision-boundary={true}\n {...focusAttributes}\n />\n );\n },\n);\n\n// Expose editor view for playwright tests.\n// TODO(wittjosiah): Find a better way to expose this or find a way to limit it to test runs.\nconst useTest = (view: EditorView | null) => {\n useEffect(() => {\n const composer = (window as any).composer;\n if (composer) {\n composer.editorView = view;\n }\n }, [view]);\n};\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport { type EditorView } from '@codemirror/view';\nimport React, { useCallback, useState } from 'react';\n\nimport { type FileInfo } from '@dxos/app-toolkit';\nimport { invariant } from '@dxos/invariant';\nimport { type ThemedClassName } from '@dxos/react-ui';\nimport { EditorToolbar, type EditorToolbarProps } from '@dxos/react-ui-editor';\nimport { type EditorViewMode } from '@dxos/ui-editor';\n\nimport { FileUpload, type FileUploadAction } from './FileUpload';\n\nexport type MarkdownEditorToolbarProps = ThemedClassName<\n {\n id: string;\n editorView?: EditorView;\n onFileUpload?: (file: File) => Promise<FileInfo | undefined>;\n } & Pick<EditorToolbarProps, 'role' | 'state' | 'customActions' | 'onAction' | 'onViewModeChange'>\n>;\n\nexport const MarkdownEditorToolbar = ({\n classNames,\n id,\n role,\n state,\n editorView,\n customActions,\n onAction,\n onFileUpload,\n onViewModeChange,\n}: MarkdownEditorToolbarProps) => {\n const [upload, setUpload] = useState<FileUploadAction | null>(null);\n const uploadRef = useCallback((next: FileUploadAction) => setUpload(() => next), []);\n\n const handleViewModeChange = useCallback((mode: EditorViewMode) => onViewModeChange?.(mode), [onViewModeChange]);\n\n const getView = useCallback(() => {\n invariant(editorView);\n return editorView;\n }, [editorView]);\n\n if (!editorView) {\n return <div />;\n }\n\n return (\n <>\n <EditorToolbar\n classNames={classNames}\n attendableId={id}\n role={role}\n state={state}\n customActions={customActions}\n getView={getView}\n onAction={onAction}\n onImageUpload={upload ?? undefined}\n onViewModeChange={handleViewModeChange}\n />\n\n {onFileUpload && <FileUpload ref={uploadRef} editorView={editorView} onFileUpload={onFileUpload} />}\n </>\n );\n};\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport { type EditorView } from '@codemirror/view';\nimport React, { forwardRef, useEffect, useImperativeHandle } from 'react';\nimport { createPortal } from 'react-dom';\nimport { useDropzone } from 'react-dropzone';\n\nimport { type FileInfo } from '@dxos/app-toolkit';\nimport { addLink } from '@dxos/ui-editor';\n\nexport const IMAGE_FILES = ['.jpg', '.jpeg', '.png', '.gif'];\n\nexport type FileUploadAction = () => void;\n\nexport type FileUploadProps = {\n editorView?: EditorView;\n onFileUpload?: (file: File) => Promise<FileInfo | undefined>;\n};\n\n// TODO(burdon): Factor out.\n// TODO(burdon): Move to root? (support drag into document via dropzone).\nexport const FileUpload = forwardRef<FileUploadAction, FileUploadProps>(\n ({ editorView, onFileUpload }, forwardedRef) => {\n // https://react-dropzone.js.org\n const { acceptedFiles, open, inputRef } = useDropzone({\n disabled: !onFileUpload,\n multiple: false,\n noDrag: true,\n accept: {\n 'image/*': IMAGE_FILES,\n },\n });\n\n useImperativeHandle(forwardedRef, () => open, []);\n\n useEffect(() => {\n if (editorView && acceptedFiles.length && onFileUpload) {\n requestAnimationFrame(async () => {\n // NOTE: Clone file since react-dropzone patches in a non-standard `path` property, which confuses IPFS.\n const f = acceptedFiles[0];\n const file = new File([f], f.name, {\n type: f.type,\n lastModified: f.lastModified,\n });\n\n // TODO(burdon): Factor out.\n const info = await onFileUpload(file);\n if (info) {\n addLink({ url: info.url, image: true })(editorView);\n }\n });\n }\n }, [editorView, acceptedFiles, onFileUpload]);\n\n if (!onFileUpload) {\n return null;\n }\n\n return <>{createPortal(<input ref={inputRef} />, document.body)} </>;\n },\n);\n"],
5
+ "mappings": "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",
6
+ "names": ["debounce", "Obj", "isEditorModel", "data", "id", "text", "isMarkdownProperties", "Obj", "isObject", "title", "nonTitleChars", "skipPatterns", "titlePatterns", "getFallbackName", "content", "len", "length", "i", "lineEnd", "line", "slice", "trim", "some", "pattern", "test", "match", "exec", "replaceAll", "maxLen", "words", "split", "result", "word", "next", "getContentSnippet", "abstract", "filter", "startsWith", "join", "setFallbackName", "debounce", "doc", "name", "fallbackName", "change", "d", "serializer", "serialize", "object", "load", "JSON", "stringify", "deserialize", "serialized", "parse", "Markdown", "make", "Option", "useCallback", "useMemo", "usePluginManager", "AppCapabilities", "Filter", "Obj", "Query", "Type", "EntityKind", "SystemTypeAnnotation", "getTypeAnnotation", "toLocalizedString", "useTranslation", "insertAtCursor", "insertAtLineStart", "useLinkQuery", "db", "t", "useTranslation", "manager", "usePluginManager", "resolve", "useCallback", "typename", "capabilities", "getAll", "AppCapabilities", "Metadata", "find", "id", "metadata", "filter", "useMemo", "Filter", "or", "schemaRegistry", "query", "location", "runSync", "schema", "getTypeAnnotation", "kind", "EntityKind", "Relation", "SystemTypeAnnotation", "get", "pipe", "getOrElse", "map", "Type", "getTypename", "handleLinkQuery", "name", "startsWith", "slice", "toLowerCase", "results", "Query", "select", "run", "getLabel", "object", "label", "Obj", "type", "ns", "default", "items", "toLocalizedString", "includes", "icon", "onSelect", "view", "head", "link", "getDXN", "insertAtLineStart", "insertAtCursor", "useCallback", "useMemo", "useRef", "toLocalizedString", "useTranslation", "filterMenuGroups", "formattingCommands", "linkSlashCommands", "Domino", "useEditorMenuOptions", "editorView", "slashCommandGroups", "onLinkQuery", "t", "useTranslation", "meta", "id", "getMenu", "useCallback", "text", "trigger", "filterMenuGroups", "formattingCommands", "linkSlashCommands", "item", "toLocalizedString", "label", "toLowerCase", "includes", "viewRef", "useRef", "useMemo", "placeholder", "delay", "content", "pressEl", "Domino", "of", "triggerEls", "map", "classNames", "forCommandsEl", "children", "root", "React", "useMemo", "createRoot", "useOperationInvoker", "LayoutOperation", "debounceAndThrottle", "Obj", "createDocAccessor", "invariant", "getSpace", "useObject", "useIdentity", "Icon", "ThemeProvider", "Text", "Cursor", "EditorView", "InputModeExtensions", "createDataExtensions", "decorateMarkdown", "documentId", "folding", "formattingKeymap", "linkTooltip", "listener", "preview", "replacer", "selectionState", "typewriter", "defaultTx", "isTruthy", "useExtensions", "id", "object", "settings", "selectionManager", "viewMode", "editorStateStore", "previewOptions", "invokePromise", "useOperationInvoker", "identity", "useIdentity", "space", "getSpace", "contentRef", "Obj", "instanceOf", "Markdown", "Document", "content", "undefined", "useObject", "target", "Text", "baseExtensions", "useMemo", "createBaseExtensions", "debug", "editorInputMode", "folding", "numberedHeadings", "typewriter", "createDataExtensions", "text", "createDocAccessor", "messenger", "listener", "onChange", "setFallbackName", "selectionState", "filter", "isTruthy", "extensions", "selectionChange", "InputModeExtensions", "push", "formattingKeymap", "decorateMarkdown", "selectionChangeDelay", "from", "renderLinkButton", "createLinkRenderer", "targetId", "LayoutOperation", "Open", "subject", "pivotId", "isObject", "getDXN", "toString", "linkTooltip", "renderLinkTooltip", "preview", "replacer", "items", "split", "EditorView", "updateListener", "of", "debounceAndThrottle", "update", "selectionSet", "state", "facet", "documentId", "cursorConverter", "Cursor", "converter", "selection", "ranges", "map", "range", "toCursor", "to", "updateMultiRange", "style", "hover", "icon", "onSelectObject", "el", "url", "isInternal", "startsWith", "window", "location", "origin", "options", "onClick", "qualifiedId", "at", "invariant", "href", "rel", "renderRoot", "a", "className", "Icon", "size", "classNames", "web", "URL", "root", "node", "createRoot", "render", "ThemeProvider", "tx", "defaultTx", "EditorView", "Effect", "useMemo", "useOperationResolver", "LayoutOperation", "invariant", "OperationResolver", "Cursor", "setSelection", "useSelectCurrentThread", "editorView", "documentId", "scrollIntoViewHandler", "useMemo", "OperationResolver", "make", "operation", "LayoutOperation", "ScrollIntoView", "position", "filter", "input", "subject", "cursor", "handler", "sync", "invariant", "range", "Cursor", "getRangeFromCursor", "state", "selection", "main", "from", "anchor", "undefined", "effects", "EditorView", "scrollIntoView", "y", "yMargin", "push", "setSelection", "of", "current", "dispatch", "useOperationResolver", "meta", "id", "createContext", "React", "useMemo", "useState", "createPortal", "Surface", "DXN", "useClient", "EditorMenuProvider", "useEditorMenu", "useEditorToolbar", "isNonNullable", "RegistryContext", "React", "forwardRef", "useCallback", "useContext", "useEffect", "useImperativeHandle", "useMemo", "useThemeContext", "useTranslation", "useTextEditor", "createBasicExtensions", "createMarkdownExtensions", "createThemeExtensions", "dropFile", "editorSlots", "formattingListener", "processEditorPayload", "stackItemContentEditorClassNames", "mx", "isTruthy", "MarkdownEditorContent", "forwardRef", "classNames", "id", "role", "viewMode", "initialValue", "editorStateStore", "toolbarState", "extensions", "scrollPastEnd", "slots", "editorSlots", "onFileUpload", "forwardedRef", "t", "useTranslation", "meta", "themeMode", "useThemeContext", "registry", "useContext", "RegistryContext", "updateToolbarState", "useCallback", "formatting", "set", "get", "scrollTo", "selection", "useMemo", "getState", "parentRef", "view", "editorView", "focusAttributes", "useTextEditor", "selectionEnd", "createBasicExtensions", "readOnly", "placeholder", "search", "createThemeExtensions", "syntaxHighlighting", "createMarkdownExtensions", "formattingListener", "dropFile", "onDrop", "files", "file", "info", "undefined", "processEditorPayload", "type", "data", "url", "filter", "isTruthy", "useImperativeHandle", "useSelectCurrentThread", "useTest", "React", "div", "ref", "data-testid", "className", "mx", "stackItemContentEditorClassNames", "data-popover-collision-boundary", "useEffect", "composer", "window", "React", "useCallback", "useState", "invariant", "EditorToolbar", "React", "forwardRef", "useEffect", "useImperativeHandle", "createPortal", "useDropzone", "addLink", "IMAGE_FILES", "FileUpload", "forwardRef", "editorView", "onFileUpload", "forwardedRef", "acceptedFiles", "open", "inputRef", "useDropzone", "disabled", "multiple", "noDrag", "accept", "useImperativeHandle", "useEffect", "length", "requestAnimationFrame", "f", "file", "File", "name", "type", "lastModified", "info", "addLink", "url", "image", "React", "createPortal", "input", "ref", "document", "body", "MarkdownEditorToolbar", "classNames", "id", "role", "state", "editorView", "customActions", "onAction", "onFileUpload", "onViewModeChange", "upload", "setUpload", "useState", "uploadRef", "useCallback", "next", "handleViewModeChange", "mode", "getView", "invariant", "React", "div", "EditorToolbar", "attendableId", "onImageUpload", "undefined", "FileUpload", "ref", "MarkdownEditorContextProvider", "useMarkdownEditorContext", "createContext", "MarkdownEditorRoot", "children", "id", "object", "editorStateStore", "selectionManager", "settings", "viewMode", "extensions", "extensionsProp", "slashCommandGroups", "onLinkQuery", "props", "editorView", "setEditorView", "useState", "previewBlocks", "setPreviewBlocks", "previewOptions", "useMemo", "addBlockContainer", "block", "prev", "removeBlockContainer", "link", "filter", "prevLink", "dxn", "toolbarState", "useEditorToolbar", "menuOptions", "useEditorMenuOptions", "extension", "menuExtension", "menuProps", "useEditorMenu", "coreExtensions", "useExtensions", "isNonNullable", "React", "popoverMenu", "displayName", "MARKDOWN_EDITOR_CONTENT_NAME", "MarkdownEditorContent", "groupsRef", "EditorMenuProvider", "view", "groups", "current", "NaturalMarkdownEditorContent", "ref", "MARKDOWN_EDITOR_TOOLBAR_NAME", "MarkdownEditorToolbar", "rootProps", "NaturalMarkdownToolbar", "state", "MARKDOWN_EDITOR_BLOCKS_NAME", "MarkdownEditorBlocks", "_props", "map", "el", "PreviewBlock", "key", "client", "useClient", "DXN", "parse", "subject", "graph", "makeRef", "target", "data", "createPortal", "Surface", "role", "limit", "MarkdownEditor", "Root", "Content", "Toolbar", "Blocks"]
7
+ }
@@ -0,0 +1,59 @@
1
+ import { createRequire } from 'node:module';const require = createRequire(import.meta.url);
2
+ import {
3
+ MarkdownEditor,
4
+ getContentSnippet
5
+ } from "./chunk-D46D75SK.mjs";
6
+ import {
7
+ Markdown_exports,
8
+ meta
9
+ } from "./chunk-USKAPINH.mjs";
10
+
11
+ // src/components/MarkdownCard/MarkdownCard.tsx
12
+ import React, { useMemo } from "react";
13
+ import { Obj } from "@dxos/echo";
14
+ import { useTranslation } from "@dxos/react-ui";
15
+ import { Card } from "@dxos/react-ui-mosaic";
16
+ import { Text } from "@dxos/schema";
17
+ var MarkdownCard = ({ subject }) => {
18
+ const { t } = useTranslation(meta.id);
19
+ const snippet = useMemo(() => getSnippet(subject), [
20
+ subject
21
+ ]);
22
+ const info = getInfo(subject);
23
+ return /* @__PURE__ */ React.createElement(Card.Content, null, snippet && /* @__PURE__ */ React.createElement(Card.Row, {
24
+ className: "max-h-[300px] overflow-hidden"
25
+ }, /* @__PURE__ */ React.createElement(MarkdownEditor.Root, {
26
+ id: subject.id,
27
+ viewMode: "readonly"
28
+ }, /* @__PURE__ */ React.createElement(MarkdownEditor.Content, {
29
+ initialValue: snippet,
30
+ slots: {},
31
+ classNames: "!bg-transparent"
32
+ }))), /* @__PURE__ */ React.createElement(Card.Row, null, /* @__PURE__ */ React.createElement(Card.Text, {
33
+ classNames: "text-xs text-description"
34
+ }, info.words, " ", t("words label", {
35
+ count: info.words
36
+ }))));
37
+ };
38
+ var getInfo = (subject) => {
39
+ const text = (Obj.instanceOf(Markdown_exports.Document, subject) ? subject.content?.target?.content : subject.content) ?? "";
40
+ return {
41
+ words: text.split(" ").length
42
+ };
43
+ };
44
+ var getSnippet = (subject, fallback) => {
45
+ if (Obj.instanceOf(Markdown_exports.Document, subject)) {
46
+ return Obj.getDescription(subject) || getContentSnippet(subject.content?.target?.content ?? fallback);
47
+ } else if (Obj.instanceOf(Text.Text, subject)) {
48
+ return getContentSnippet(subject.content ?? fallback);
49
+ }
50
+ };
51
+
52
+ // src/components/MarkdownCard/index.ts
53
+ var MarkdownCard_default = MarkdownCard;
54
+
55
+ export {
56
+ MarkdownCard,
57
+ MarkdownCard_default
58
+ };
59
+ //# sourceMappingURL=chunk-DCKB3AVD.mjs.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/components/MarkdownCard/MarkdownCard.tsx", "../../../src/components/MarkdownCard/index.ts"],
4
+ "sourcesContent": ["//\n// Copyright 2025 DXOS.org\n//\n\nimport React, { useMemo } from 'react';\n\nimport { Obj } from '@dxos/echo';\nimport { useTranslation } from '@dxos/react-ui';\nimport { Card } from '@dxos/react-ui-mosaic';\nimport { Text } from '@dxos/schema';\n\nimport { meta } from '../../meta';\nimport { Markdown } from '../../types';\nimport { getContentSnippet, getFallbackName } from '../../util';\nimport { MarkdownEditor } from '../MarkdownEditor';\n\nexport type MarkdownCardProps = { subject: Markdown.Document | Text.Text };\n\nexport const MarkdownCard = ({ subject }: MarkdownCardProps) => {\n const { t } = useTranslation(meta.id);\n const snippet = useMemo(() => getSnippet(subject), [subject]);\n const info = getInfo(subject);\n\n return (\n <Card.Content>\n {snippet && (\n <Card.Row className='max-h-[300px] overflow-hidden'>\n <MarkdownEditor.Root id={subject.id} viewMode='readonly'>\n <MarkdownEditor.Content initialValue={snippet} slots={{}} classNames='!bg-transparent' />\n </MarkdownEditor.Root>\n </Card.Row>\n )}\n <Card.Row>\n <Card.Text classNames='text-xs text-description'>\n {info.words} {t('words label', { count: info.words })}\n </Card.Text>\n </Card.Row>\n </Card.Content>\n );\n};\n\nconst getInfo = (subject: Markdown.Document | Text.Text) => {\n const text = (Obj.instanceOf(Markdown.Document, subject) ? subject.content?.target?.content : subject.content) ?? '';\n return { words: text.split(' ').length };\n};\n\n// TODO(burdon): Factor out.\nconst getTitle = (subject: Markdown.Document | Text.Text, fallback: string) => {\n if (Obj.instanceOf(Markdown.Document, subject)) {\n const title = Obj.getLabel(subject);\n return title ?? getFallbackName(subject.content?.target?.content ?? fallback);\n } else if (Obj.instanceOf(Text.Text, subject)) {\n return getFallbackName(subject.content);\n }\n};\n\n// TODO(burdon): Factor out.\nconst getSnippet = (subject: Markdown.Document | Text.Text, fallback?: string) => {\n if (Obj.instanceOf(Markdown.Document, subject)) {\n return Obj.getDescription(subject) || getContentSnippet(subject.content?.target?.content ?? fallback);\n } else if (Obj.instanceOf(Text.Text, subject)) {\n return getContentSnippet(subject.content ?? fallback);\n }\n};\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport { MarkdownCard } from './MarkdownCard';\n\nexport * from './MarkdownCard';\n\nexport default MarkdownCard;\n"],
5
+ "mappings": ";;;;;;;;;;;AAIA,OAAOA,SAASC,eAAe;AAE/B,SAASC,WAAW;AACpB,SAASC,sBAAsB;AAC/B,SAASC,YAAY;AACrB,SAASC,YAAY;AASd,IAAMC,eAAe,CAAC,EAAEC,QAAO,MAAqB;AACzD,QAAM,EAAEC,EAAC,IAAKC,eAAeC,KAAKC,EAAE;AACpC,QAAMC,UAAUC,QAAQ,MAAMC,WAAWP,OAAAA,GAAU;IAACA;GAAQ;AAC5D,QAAMQ,OAAOC,QAAQT,OAAAA;AAErB,SACE,sBAAA,cAACU,KAAKC,SAAO,MACVN,WACC,sBAAA,cAACK,KAAKE,KAAG;IAACC,WAAU;KAClB,sBAAA,cAACC,eAAeC,MAAI;IAACX,IAAIJ,QAAQI;IAAIY,UAAS;KAC5C,sBAAA,cAACF,eAAeH,SAAO;IAACM,cAAcZ;IAASa,OAAO,CAAC;IAAGC,YAAW;QAI3E,sBAAA,cAACT,KAAKE,KAAG,MACP,sBAAA,cAACF,KAAKU,MAAI;IAACD,YAAW;KACnBX,KAAKa,OAAM,KAAEpB,EAAE,eAAe;IAAEqB,OAAOd,KAAKa;EAAM,CAAA,CAAA,CAAA,CAAA;AAK7D;AAEA,IAAMZ,UAAU,CAACT,YAAAA;AACf,QAAMuB,QAAQC,IAAIC,WAAWC,iBAASC,UAAU3B,OAAAA,IAAWA,QAAQ4B,SAASC,QAAQD,UAAU5B,QAAQ4B,YAAY;AAClH,SAAO;IAAEP,OAAOE,KAAKO,MAAM,GAAA,EAAKC;EAAO;AACzC;AAaA,IAAMC,aAAa,CAACC,SAAwCC,aAAAA;AAC1D,MAAIC,IAAIC,WAAWC,iBAASC,UAAUL,OAAAA,GAAU;AAC9C,WAAOE,IAAII,eAAeN,OAAAA,KAAYO,kBAAkBP,QAAQQ,SAASC,QAAQD,WAAWP,QAAAA;EAC9F,WAAWC,IAAIC,WAAWO,KAAKA,MAAMV,OAAAA,GAAU;AAC7C,WAAOO,kBAAkBP,QAAQQ,WAAWP,QAAAA;EAC9C;AACF;;;ACvDA,IAAA,uBAAeU;",
6
+ "names": ["React", "useMemo", "Obj", "useTranslation", "Card", "Text", "MarkdownCard", "subject", "t", "useTranslation", "meta", "id", "snippet", "useMemo", "getSnippet", "info", "getInfo", "Card", "Content", "Row", "className", "MarkdownEditor", "Root", "viewMode", "initialValue", "slots", "classNames", "Text", "words", "count", "text", "Obj", "instanceOf", "Markdown", "Document", "content", "target", "split", "length", "getSnippet", "subject", "fallback", "Obj", "instanceOf", "Markdown", "Document", "getDescription", "getContentSnippet", "content", "target", "Text", "MarkdownCard"]
7
+ }
@@ -0,0 +1,106 @@
1
+ import { createRequire } from 'node:module';const require = createRequire(import.meta.url);
2
+ import {
3
+ MarkdownEditor,
4
+ useLinkQuery
5
+ } from "./chunk-D46D75SK.mjs";
6
+ import {
7
+ MarkdownCapabilities,
8
+ Markdown_exports
9
+ } from "./chunk-USKAPINH.mjs";
10
+
11
+ // src/components/MarkdownContainer.tsx
12
+ import { Atom } from "@effect-atom/atom-react";
13
+ import React, { forwardRef, useMemo } from "react";
14
+ import { useCapabilities } from "@dxos/app-framework/ui";
15
+ import { AppCapabilities } from "@dxos/app-toolkit";
16
+ import { useAppGraph } from "@dxos/app-toolkit/ui";
17
+ import { Obj } from "@dxos/echo";
18
+ import { useActionRunner } from "@dxos/plugin-graph";
19
+ import { useObject } from "@dxos/react-client/echo";
20
+ import { Layout } from "@dxos/react-ui";
21
+ import { Text } from "@dxos/schema";
22
+ var MarkdownContainer = /* @__PURE__ */ forwardRef(({ role, subject: object, id, settings, extensionProviders, ...props }, forwardedRef) => {
23
+ const db = Obj.isObject(object) ? Obj.getDatabase(object) : void 0;
24
+ const attendableId = Obj.instanceOf(Markdown_exports.Document, object) ? Obj.getDXN(object).toString() : void 0;
25
+ const [docContent] = useObject(Obj.instanceOf(Markdown_exports.Document, object) ? object.content : void 0, "content");
26
+ const [textContent] = useObject(Obj.instanceOf(Text.Text, object) ? object : void 0, "content");
27
+ const initialValue = docContent ?? textContent;
28
+ const otherExtensionProviders = useCapabilities(MarkdownCapabilities.Extensions);
29
+ const extensions = useMemo(() => {
30
+ if (!Obj.instanceOf(Markdown_exports.Document, object) && !Obj.instanceOf(Text.Text, object)) {
31
+ return [];
32
+ }
33
+ return [
34
+ ...otherExtensionProviders ?? [],
35
+ ...extensionProviders ?? []
36
+ ].flat().reduce((acc, provider) => {
37
+ const extension = typeof provider === "function" ? provider({
38
+ document: object
39
+ }) : provider;
40
+ if (extension) {
41
+ acc.push(extension);
42
+ }
43
+ return acc;
44
+ }, []);
45
+ }, [
46
+ extensionProviders,
47
+ otherExtensionProviders,
48
+ object
49
+ ]);
50
+ const { graph } = useAppGraph();
51
+ const runAction = useActionRunner();
52
+ const customActions = useMemo(() => {
53
+ return Atom.make((get) => {
54
+ const actions = get(graph.actions(id));
55
+ const nodes = actions.filter((action) => action.properties.disposition === "toolbar");
56
+ const edges = nodes.map((node) => ({
57
+ source: "root",
58
+ target: node.id
59
+ }));
60
+ return {
61
+ nodes,
62
+ edges
63
+ };
64
+ });
65
+ }, [
66
+ graph
67
+ ]);
68
+ const [upload] = useCapabilities(AppCapabilities.FileUploader);
69
+ const handleFileUpload = useMemo(() => {
70
+ if (!db || !upload) {
71
+ return void 0;
72
+ }
73
+ return async (file) => upload(db, file);
74
+ }, [
75
+ db,
76
+ upload
77
+ ]);
78
+ const handleLinkQuery = useLinkQuery(db);
79
+ return /* @__PURE__ */ React.createElement(Layout.Main, {
80
+ toolbar: settings.toolbar,
81
+ ref: forwardedRef
82
+ }, /* @__PURE__ */ React.createElement(MarkdownEditor.Root, {
83
+ id: attendableId ?? id,
84
+ object,
85
+ extensions,
86
+ settings,
87
+ onAction: runAction,
88
+ onFileUpload: handleFileUpload,
89
+ onLinkQuery: handleLinkQuery,
90
+ ...props
91
+ }, settings.toolbar && /* @__PURE__ */ React.createElement(MarkdownEditor.Toolbar, {
92
+ id: attendableId ?? id,
93
+ role,
94
+ customActions
95
+ }), /* @__PURE__ */ React.createElement(MarkdownEditor.Content, {
96
+ initialValue,
97
+ scrollPastEnd: role === "article"
98
+ }), /* @__PURE__ */ React.createElement(MarkdownEditor.Blocks, null)));
99
+ });
100
+ var MarkdownContainer_default = MarkdownContainer;
101
+
102
+ export {
103
+ MarkdownContainer,
104
+ MarkdownContainer_default
105
+ };
106
+ //# sourceMappingURL=chunk-K2IIYNCG.mjs.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/components/MarkdownContainer.tsx"],
4
+ "sourcesContent": ["//\n// Copyright 2024 DXOS.org\n//\n\nimport { type Extension } from '@codemirror/state';\nimport { Atom } from '@effect-atom/atom-react';\nimport React, { forwardRef, useMemo } from 'react';\n\nimport { useCapabilities } from '@dxos/app-framework/ui';\nimport { AppCapabilities } from '@dxos/app-toolkit';\nimport { type SurfaceComponentProps } from '@dxos/app-toolkit/ui';\nimport { useAppGraph } from '@dxos/app-toolkit/ui';\nimport { Obj } from '@dxos/echo';\nimport { useActionRunner } from '@dxos/plugin-graph';\nimport { useObject } from '@dxos/react-client/echo';\nimport { Layout } from '@dxos/react-ui';\nimport { type SelectionManager } from '@dxos/react-ui-attention';\nimport { Text } from '@dxos/schema';\n\nimport { useLinkQuery } from '../hooks';\nimport { Markdown, MarkdownCapabilities, type MarkdownPluginState } from '../types';\n\nimport { MarkdownEditor, type MarkdownEditorContentProps, type MarkdownEditorRootProps } from './MarkdownEditor';\n\nexport type MarkdownContainerProps = SurfaceComponentProps<\n Markdown.Document | Text.Text,\n {\n id: string;\n settings: Markdown.Settings;\n selectionManager?: SelectionManager;\n } & Pick<MarkdownEditorRootProps, 'viewMode' | 'onViewModeChange'> &\n Pick<MarkdownEditorContentProps, 'editorStateStore'> &\n Pick<MarkdownPluginState, 'extensionProviders'>\n>;\n\nexport const MarkdownContainer = forwardRef<HTMLDivElement, MarkdownContainerProps>(\n ({ role, subject: object, id, settings, extensionProviders, ...props }, forwardedRef) => {\n const db = Obj.isObject(object) ? Obj.getDatabase(object) : undefined;\n const attendableId = Obj.instanceOf(Markdown.Document, object) ? Obj.getDXN(object).toString() : undefined;\n const [docContent] = useObject(Obj.instanceOf(Markdown.Document, object) ? object.content : undefined, 'content');\n const [textContent] = useObject(Obj.instanceOf(Text.Text, object) ? object : undefined, 'content');\n const initialValue = docContent ?? textContent;\n\n // Extensions from other plugins.\n // TODO(burdon): Document MarkdownPluginState.extensionProviders\n const otherExtensionProviders = useCapabilities(MarkdownCapabilities.Extensions);\n const extensions = useMemo<Extension[]>(() => {\n if (!Obj.instanceOf(Markdown.Document, object) && !Obj.instanceOf(Text.Text, object)) {\n return [];\n }\n\n return [...(otherExtensionProviders ?? []), ...(extensionProviders ?? [])]\n .flat()\n .reduce((acc: Extension[], provider) => {\n const extension =\n typeof provider === 'function' ? provider({ document: object as Markdown.Document }) : provider;\n if (extension) {\n acc.push(extension);\n }\n\n return acc;\n }, []);\n }, [extensionProviders, otherExtensionProviders, object]);\n\n // Toolbar actions from app graph.\n const { graph } = useAppGraph();\n const runAction = useActionRunner();\n const customActions = useMemo(() => {\n return Atom.make((get) => {\n const actions = get(graph.actions(id));\n const nodes = actions.filter((action) => action.properties.disposition === 'toolbar');\n const edges = nodes.map((node) => ({ source: 'root', target: node.id }));\n return { nodes, edges };\n });\n }, [graph]);\n\n // File upload.\n const [upload] = useCapabilities(AppCapabilities.FileUploader);\n const handleFileUpload = useMemo(() => {\n if (!db || !upload) {\n return undefined;\n }\n\n return async (file: File) => upload(db, file);\n }, [db, upload]);\n\n // Query for @ refs.\n const handleLinkQuery = useLinkQuery(db);\n\n return (\n <Layout.Main toolbar={settings.toolbar} ref={forwardedRef}>\n <MarkdownEditor.Root\n id={attendableId ?? id}\n object={object}\n extensions={extensions}\n settings={settings}\n onAction={runAction}\n onFileUpload={handleFileUpload}\n onLinkQuery={handleLinkQuery}\n {...props}\n >\n {settings.toolbar && (\n <MarkdownEditor.Toolbar id={attendableId ?? id} role={role} customActions={customActions} />\n )}\n <MarkdownEditor.Content initialValue={initialValue} scrollPastEnd={role === 'article'} />\n <MarkdownEditor.Blocks />\n </MarkdownEditor.Root>\n </Layout.Main>\n );\n },\n);\n\nexport default MarkdownContainer;\n"],
5
+ "mappings": "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",
6
+ "names": ["Atom", "React", "forwardRef", "useMemo", "useCapabilities", "AppCapabilities", "useAppGraph", "Obj", "useActionRunner", "useObject", "Layout", "Text", "MarkdownContainer", "forwardRef", "role", "subject", "object", "id", "settings", "extensionProviders", "props", "forwardedRef", "db", "Obj", "isObject", "getDatabase", "undefined", "attendableId", "instanceOf", "Markdown", "Document", "getDXN", "toString", "docContent", "useObject", "content", "textContent", "Text", "initialValue", "otherExtensionProviders", "useCapabilities", "MarkdownCapabilities", "Extensions", "extensions", "useMemo", "flat", "reduce", "acc", "provider", "extension", "document", "push", "graph", "useAppGraph", "runAction", "useActionRunner", "customActions", "Atom", "make", "get", "actions", "nodes", "filter", "action", "properties", "disposition", "edges", "map", "node", "source", "target", "upload", "AppCapabilities", "FileUploader", "handleFileUpload", "file", "handleLinkQuery", "useLinkQuery", "Layout", "Main", "toolbar", "ref", "MarkdownEditor", "Root", "onAction", "onFileUpload", "onLinkQuery", "Toolbar", "Content", "scrollPastEnd", "Blocks"]
7
+ }
@@ -0,0 +1,177 @@
1
+ import { createRequire } from 'node:module';const require = createRequire(import.meta.url);
2
+ import {
3
+ Markdown_exports,
4
+ __export
5
+ } from "./chunk-USKAPINH.mjs";
6
+
7
+ // src/blueprints/markdown-blueprint.ts
8
+ var markdown_blueprint_exports = {};
9
+ __export(markdown_blueprint_exports, {
10
+ Key: () => Key,
11
+ functions: () => functions,
12
+ make: () => make
13
+ });
14
+ import { Blueprint, Template } from "@dxos/blueprints";
15
+ import { trim as trim2 } from "@dxos/util";
16
+
17
+ // src/blueprints/functions/create.ts
18
+ import * as Effect from "effect/Effect";
19
+ import * as Schema from "effect/Schema";
20
+ import { Obj } from "@dxos/echo";
21
+ import { defineFunction } from "@dxos/functions";
22
+ import { Collection } from "@dxos/schema";
23
+ var create_default = defineFunction({
24
+ key: "dxos.org/function/markdown/create",
25
+ name: "Create",
26
+ description: "Creates a new markdown document and adds it to the space.",
27
+ inputSchema: Schema.Struct({
28
+ name: Schema.String,
29
+ content: Schema.String
30
+ }),
31
+ outputSchema: Schema.Struct({
32
+ id: Schema.String.annotations({
33
+ description: "The DXN of the created document."
34
+ })
35
+ }),
36
+ handler: Effect.fn(function* ({ data: { name, content } }) {
37
+ const object = Markdown_exports.make({
38
+ name,
39
+ content
40
+ });
41
+ yield* Collection.add({
42
+ object
43
+ });
44
+ return {
45
+ id: Obj.getDXN(object).toString()
46
+ };
47
+ })
48
+ });
49
+
50
+ // src/blueprints/functions/open.ts
51
+ import * as Effect2 from "effect/Effect";
52
+ import * as Schema2 from "effect/Schema";
53
+ import { Database, Type } from "@dxos/echo";
54
+ import { defineFunction as defineFunction2 } from "@dxos/functions";
55
+ var open_default = defineFunction2({
56
+ key: "dxos.org/function/markdown/open",
57
+ name: "Open",
58
+ description: "Opens and reads the contents of a new markdown document.",
59
+ inputSchema: Schema2.Struct({
60
+ doc: Type.Ref(Markdown_exports.Document).annotations({
61
+ description: "The ID of the markdown document."
62
+ })
63
+ }),
64
+ outputSchema: Schema2.Struct({
65
+ content: Schema2.String
66
+ }),
67
+ handler: Effect2.fn(function* ({ data: { doc } }) {
68
+ const { content } = yield* doc.pipe(Database.load, Effect2.map((_) => _.content), Effect2.flatMap(Database.load));
69
+ return {
70
+ content
71
+ };
72
+ })
73
+ });
74
+
75
+ // src/blueprints/functions/update.ts
76
+ import { next as A } from "@automerge/automerge";
77
+ import * as Effect3 from "effect/Effect";
78
+ import * as Schema3 from "effect/Schema";
79
+ import { Database as Database2, Type as Type2 } from "@dxos/echo";
80
+ import { DocAccessor, createDocAccessor } from "@dxos/echo-db";
81
+ import { defineFunction as defineFunction3 } from "@dxos/functions";
82
+ import { trim } from "@dxos/util";
83
+ var Edit = Schema3.Struct({
84
+ oldString: Schema3.String.annotations({
85
+ description: "The text to find in the document."
86
+ }),
87
+ newString: Schema3.String.annotations({
88
+ description: "The text to replace it with."
89
+ }),
90
+ replaceAll: Schema3.optional(Schema3.Boolean).annotations({
91
+ description: "If true, replaces all occurrences. Defaults to false (first occurrence only)."
92
+ })
93
+ });
94
+ var update_default = defineFunction3({
95
+ key: "dxos.org/function/markdown/update",
96
+ name: "Update",
97
+ description: trim`
98
+ Applies a set of edits to the markdown document.
99
+ `,
100
+ inputSchema: Schema3.Struct({
101
+ doc: Type2.Ref(Markdown_exports.Document).annotations({
102
+ description: "The ID of the markdown document."
103
+ }),
104
+ edits: Schema3.Array(Edit).annotations({
105
+ description: "The edits to apply to the document. Each edit finds oldString and replaces it with newString."
106
+ })
107
+ }),
108
+ outputSchema: Schema3.Struct({
109
+ newContent: Schema3.String
110
+ }),
111
+ handler: Effect3.fn(function* ({ data: { doc, edits } }) {
112
+ const content = yield* doc.pipe(Database2.load, Effect3.map((_) => _.content), Effect3.flatMap(Database2.load));
113
+ const accessor = createDocAccessor(content, [
114
+ "content"
115
+ ]);
116
+ for (const edit of edits) {
117
+ accessor.handle.change((doc2) => {
118
+ const text = DocAccessor.getValue(accessor);
119
+ if (edit.replaceAll) {
120
+ let idx = text.indexOf(edit.oldString);
121
+ while (idx !== -1) {
122
+ A.splice(doc2, accessor.path, idx, edit.oldString.length, edit.newString);
123
+ const updated = DocAccessor.getValue(accessor);
124
+ idx = updated.indexOf(edit.oldString, idx + edit.newString.length);
125
+ }
126
+ } else {
127
+ const idx = text.indexOf(edit.oldString);
128
+ if (idx === -1) {
129
+ throw new Error(`Edit not found: ${JSON.stringify(edit.oldString)}`);
130
+ }
131
+ A.splice(doc2, accessor.path, idx, edit.oldString.length, edit.newString);
132
+ }
133
+ });
134
+ }
135
+ return {
136
+ newContent: DocAccessor.getValue(accessor)
137
+ };
138
+ })
139
+ });
140
+
141
+ // src/blueprints/markdown-blueprint.ts
142
+ var functions = [
143
+ create_default,
144
+ open_default,
145
+ update_default
146
+ ];
147
+ var Key = "dxos.org/blueprint/markdown";
148
+ var make = () => Blueprint.make({
149
+ key: Key,
150
+ name: "Markdown",
151
+ tools: Blueprint.toolDefinitions({
152
+ functions
153
+ }),
154
+ instructions: Template.make({
155
+ // TODO(wittjosiah): Move example to function input schema annotation.
156
+ source: trim2`
157
+ {{! Markdown }}
158
+
159
+ You can create, read and update markdown documents.
160
+ When asked to edit or update documents return updates as a set of compact diff string pairs.
161
+ For each diff, respond with the smallest possible matching span.
162
+
163
+ Example:
164
+ ${"```"}diff
165
+ - "There is a tyop in this sentence."
166
+ + "There is a typo in this sentence."
167
+ - "This id good."
168
+ + "This sentence is really good."
169
+ ${"```"}
170
+ `
171
+ })
172
+ });
173
+
174
+ export {
175
+ markdown_blueprint_exports
176
+ };
177
+ //# sourceMappingURL=chunk-LOZVC2WA.mjs.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/blueprints/markdown-blueprint.ts", "../../../src/blueprints/functions/create.ts", "../../../src/blueprints/functions/open.ts", "../../../src/blueprints/functions/update.ts"],
4
+ "sourcesContent": ["//\n// Copyright 2025 DXOS.org\n//\n\nimport { Blueprint, Template } from '@dxos/blueprints';\nimport { type FunctionDefinition } from '@dxos/functions';\nimport { trim } from '@dxos/util';\n\nimport { create, open, update } from './functions';\n\nexport const functions: FunctionDefinition[] = [create, open, update];\n\nexport const Key = 'dxos.org/blueprint/markdown';\n\nexport const make = () =>\n Blueprint.make({\n key: Key,\n name: 'Markdown',\n tools: Blueprint.toolDefinitions({ functions }),\n instructions: Template.make({\n // TODO(wittjosiah): Move example to function input schema annotation.\n source: trim`\n {{! Markdown }}\n\n You can create, read and update markdown documents.\n When asked to edit or update documents return updates as a set of compact diff string pairs.\n For each diff, respond with the smallest possible matching span.\n\n Example:\n ${'```'}diff\n - \"There is a tyop in this sentence.\"\n + \"There is a typo in this sentence.\"\n - \"This id good.\"\n + \"This sentence is really good.\"\n ${'```'}\n `,\n }),\n });\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport * as Effect from 'effect/Effect';\nimport * as Schema from 'effect/Schema';\n\nimport { Obj } from '@dxos/echo';\nimport { defineFunction } from '@dxos/functions';\nimport { Collection } from '@dxos/schema';\n\nimport { Markdown } from '../../types';\n\nexport default defineFunction({\n key: 'dxos.org/function/markdown/create',\n name: 'Create',\n description: 'Creates a new markdown document and adds it to the space.',\n inputSchema: Schema.Struct({\n name: Schema.String,\n content: Schema.String,\n }),\n outputSchema: Schema.Struct({\n id: Schema.String.annotations({\n description: 'The DXN of the created document.',\n }),\n }),\n handler: Effect.fn(function* ({ data: { name, content } }) {\n const object = Markdown.make({ name, content });\n yield* Collection.add({ object });\n\n return {\n id: Obj.getDXN(object).toString(),\n };\n }),\n});\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport * as Effect from 'effect/Effect';\nimport * as Schema from 'effect/Schema';\n\nimport { Database, Type } from '@dxos/echo';\nimport { defineFunction } from '@dxos/functions';\n\nimport { Markdown } from '../../types';\n\nexport default defineFunction({\n key: 'dxos.org/function/markdown/open',\n name: 'Open',\n description: 'Opens and reads the contents of a new markdown document.',\n inputSchema: Schema.Struct({\n doc: Type.Ref(Markdown.Document).annotations({\n description: 'The ID of the markdown document.',\n }),\n }),\n outputSchema: Schema.Struct({\n content: Schema.String,\n }),\n handler: Effect.fn(function* ({ data: { doc } }) {\n const { content } = yield* doc.pipe(\n Database.load,\n Effect.map((_) => _.content),\n Effect.flatMap(Database.load),\n );\n return { content };\n }),\n});\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport { next as A, type Doc } from '@automerge/automerge';\nimport * as Effect from 'effect/Effect';\nimport * as Schema from 'effect/Schema';\n\nimport { Database, Type } from '@dxos/echo';\nimport { DocAccessor, createDocAccessor } from '@dxos/echo-db';\nimport { defineFunction } from '@dxos/functions';\nimport { trim } from '@dxos/util';\n\nimport { Markdown } from '../../types';\n\nconst Edit = Schema.Struct({\n oldString: Schema.String.annotations({\n description: 'The text to find in the document.',\n }),\n newString: Schema.String.annotations({\n description: 'The text to replace it with.',\n }),\n replaceAll: Schema.optional(Schema.Boolean).annotations({\n description: 'If true, replaces all occurrences. Defaults to false (first occurrence only).',\n }),\n});\n\n// TODO(wittjosiah): Reconcile with ThreadAction.AddProposal.\n// Based on opencode's MutilEdit tool: https://deepwiki.com/search/how-does-text-edit-tool-work_a159bc76-5401-424e-b29f-f087d1ea4f78\nexport default defineFunction({\n key: 'dxos.org/function/markdown/update',\n name: 'Update',\n description: trim`\n Applies a set of edits to the markdown document.\n `,\n inputSchema: Schema.Struct({\n doc: Type.Ref(Markdown.Document).annotations({\n description: 'The ID of the markdown document.',\n }),\n edits: Schema.Array(Edit).annotations({\n description: 'The edits to apply to the document. Each edit finds oldString and replaces it with newString.',\n }),\n }),\n outputSchema: Schema.Struct({\n newContent: Schema.String,\n }),\n handler: Effect.fn(function* ({ data: { doc, edits } }) {\n const content = yield* doc.pipe(\n Database.load,\n Effect.map((_) => _.content),\n Effect.flatMap(Database.load),\n );\n const accessor = createDocAccessor(content, ['content']);\n\n for (const edit of edits) {\n accessor.handle.change((doc: Doc<typeof content>) => {\n const text = DocAccessor.getValue<string>(accessor);\n if (edit.replaceAll) {\n let idx = text.indexOf(edit.oldString);\n while (idx !== -1) {\n A.splice(doc, accessor.path as A.Prop[], idx, edit.oldString.length, edit.newString);\n const updated = DocAccessor.getValue<string>(accessor);\n idx = updated.indexOf(edit.oldString, idx + edit.newString.length);\n }\n } else {\n const idx = text.indexOf(edit.oldString);\n if (idx === -1) {\n throw new Error(`Edit not found: ${JSON.stringify(edit.oldString)}`);\n }\n A.splice(doc, accessor.path as A.Prop[], idx, edit.oldString.length, edit.newString);\n }\n });\n }\n\n return {\n newContent: DocAccessor.getValue<string>(accessor),\n };\n }),\n});\n"],
5
+ "mappings": "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",
6
+ "names": ["Blueprint", "Template", "trim", "Effect", "Schema", "Obj", "defineFunction", "Collection", "defineFunction", "key", "name", "description", "inputSchema", "Struct", "String", "content", "outputSchema", "id", "annotations", "handler", "fn", "data", "object", "Markdown", "make", "Collection", "add", "Obj", "getDXN", "toString", "Effect", "Schema", "Database", "Type", "defineFunction", "defineFunction", "key", "name", "description", "inputSchema", "Struct", "doc", "Type", "Ref", "Markdown", "Document", "annotations", "outputSchema", "content", "String", "handler", "fn", "data", "pipe", "Database", "load", "map", "_", "flatMap", "next", "A", "Effect", "Schema", "Database", "Type", "DocAccessor", "createDocAccessor", "defineFunction", "trim", "Edit", "Struct", "oldString", "String", "annotations", "description", "newString", "replaceAll", "optional", "Boolean", "defineFunction", "key", "name", "trim", "inputSchema", "doc", "Type", "Ref", "Markdown", "Document", "edits", "Array", "outputSchema", "newContent", "handler", "fn", "data", "content", "pipe", "Database", "load", "map", "_", "flatMap", "accessor", "createDocAccessor", "edit", "handle", "change", "text", "DocAccessor", "getValue", "idx", "indexOf", "A", "splice", "path", "length", "updated", "Error", "JSON", "stringify", "functions", "create", "open", "update", "Key", "make", "Blueprint", "key", "name", "tools", "toolDefinitions", "instructions", "Template", "source", "trim"]
7
+ }
@@ -1,12 +1,11 @@
1
1
  import { createRequire } from 'node:module';const require = createRequire(import.meta.url);
2
2
  import {
3
- Markdown_exports
4
- } from "./chunk-FWZKC6X5.mjs";
5
- import {
3
+ Markdown_exports,
6
4
  meta
7
- } from "./chunk-VCG2U522.mjs";
5
+ } from "./chunk-USKAPINH.mjs";
8
6
 
9
7
  // src/translations.ts
8
+ import { translations as editorTranslations } from "@dxos/react-ui-editor";
10
9
  var translations = [
11
10
  {
12
11
  "en-US": {
@@ -17,7 +16,8 @@ var translations = [
17
16
  "typename label_other": "Documents",
18
17
  "object name placeholder": "New document",
19
18
  "rename object label": "Rename document",
20
- "delete object label": "Delete document"
19
+ "delete object label": "Delete document",
20
+ "object deleted label": "Document deleted"
21
21
  },
22
22
  [meta.id]: {
23
23
  "plugin name": "Editor",
@@ -42,13 +42,17 @@ var translations = [
42
42
  "default view mode label": "Default view mode",
43
43
  "upload image label": "Upload image",
44
44
  "fallback title": "Untitled",
45
- "navigate to document label": "Open document"
45
+ "navigate to document label": "Open document",
46
+ "words label_zero": "words",
47
+ "words label_one": "word",
48
+ "words label_other": "words"
46
49
  }
47
50
  }
48
- }
51
+ },
52
+ ...editorTranslations
49
53
  ];
50
54
 
51
55
  export {
52
56
  translations
53
57
  };
54
- //# sourceMappingURL=chunk-XO3IEQJE.mjs.map
58
+ //# sourceMappingURL=chunk-MLZQCT2N.mjs.map