@dxos/plugin-markdown 0.8.3 → 0.8.4-main.1068cf700f

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 (395) hide show
  1. package/dist/lib/browser/MarkdownCard-7VIO7R66.mjs +11 -0
  2. package/dist/lib/browser/MarkdownCard-7VIO7R66.mjs.map +7 -0
  3. package/dist/lib/browser/MarkdownContainer-6E43EDAU.mjs +11 -0
  4. package/dist/lib/browser/MarkdownContainer-6E43EDAU.mjs.map +7 -0
  5. package/dist/lib/browser/anchor-sort-JBAZRPE7.mjs +33 -0
  6. package/dist/lib/browser/anchor-sort-JBAZRPE7.mjs.map +7 -0
  7. package/dist/lib/browser/app-graph-serializer-6Q5YBUPW.mjs +59 -0
  8. package/dist/lib/browser/app-graph-serializer-6Q5YBUPW.mjs.map +7 -0
  9. package/dist/lib/browser/blueprint-definition-6HOAW2E6.mjs +20 -0
  10. package/dist/lib/browser/blueprint-definition-6HOAW2E6.mjs.map +7 -0
  11. package/dist/lib/browser/blueprints/index.mjs +8 -0
  12. package/dist/lib/browser/blueprints/index.mjs.map +7 -0
  13. package/dist/lib/browser/{chunk-D767LUGU.mjs → chunk-2AAD3W6X.mjs} +21 -15
  14. package/dist/lib/browser/chunk-2AAD3W6X.mjs.map +7 -0
  15. package/dist/lib/browser/chunk-4GT3QWMK.mjs +167 -0
  16. package/dist/lib/browser/chunk-4GT3QWMK.mjs.map +7 -0
  17. package/dist/lib/browser/chunk-6SM75KL3.mjs +8 -0
  18. package/dist/lib/browser/chunk-6SM75KL3.mjs.map +7 -0
  19. package/dist/lib/browser/chunk-7AQTX6D5.mjs +105 -0
  20. package/dist/lib/browser/chunk-7AQTX6D5.mjs.map +7 -0
  21. package/dist/lib/browser/chunk-EZZFREFN.mjs +58 -0
  22. package/dist/lib/browser/chunk-EZZFREFN.mjs.map +7 -0
  23. package/dist/lib/browser/chunk-HHRUUWGH.mjs +796 -0
  24. package/dist/lib/browser/chunk-HHRUUWGH.mjs.map +7 -0
  25. package/dist/lib/browser/chunk-HQTBT5IY.mjs +176 -0
  26. package/dist/lib/browser/chunk-HQTBT5IY.mjs.map +7 -0
  27. package/dist/lib/browser/cli/index.mjs +33 -0
  28. package/dist/lib/browser/cli/index.mjs.map +7 -0
  29. package/dist/lib/browser/index.mjs +132 -137
  30. package/dist/lib/browser/index.mjs.map +4 -4
  31. package/dist/lib/browser/meta.json +1 -1
  32. package/dist/lib/browser/operation-resolver-UBQUPSXC.mjs +53 -0
  33. package/dist/lib/browser/operation-resolver-UBQUPSXC.mjs.map +7 -0
  34. package/dist/lib/browser/react-surface-7Z6AB26V.mjs +213 -0
  35. package/dist/lib/browser/react-surface-7Z6AB26V.mjs.map +7 -0
  36. package/dist/lib/browser/settings-V2XOFSD5.mjs +36 -0
  37. package/dist/lib/browser/settings-V2XOFSD5.mjs.map +7 -0
  38. package/dist/lib/browser/state-6Y3JB64H.mjs +29 -0
  39. package/dist/lib/browser/state-6Y3JB64H.mjs.map +7 -0
  40. package/dist/lib/browser/types/index.mjs +13 -14
  41. package/dist/lib/node-esm/MarkdownCard-YC3R2TQW.mjs +12 -0
  42. package/dist/lib/node-esm/MarkdownCard-YC3R2TQW.mjs.map +7 -0
  43. package/dist/lib/node-esm/MarkdownContainer-TTRUOXU6.mjs +12 -0
  44. package/dist/lib/node-esm/MarkdownContainer-TTRUOXU6.mjs.map +7 -0
  45. package/dist/lib/node-esm/anchor-sort-IQMDZRA3.mjs +34 -0
  46. package/dist/lib/node-esm/anchor-sort-IQMDZRA3.mjs.map +7 -0
  47. package/dist/lib/node-esm/app-graph-serializer-STEPJH57.mjs +60 -0
  48. package/dist/lib/node-esm/app-graph-serializer-STEPJH57.mjs.map +7 -0
  49. package/dist/lib/node-esm/blueprint-definition-UGDFF5OZ.mjs +21 -0
  50. package/dist/lib/node-esm/blueprint-definition-UGDFF5OZ.mjs.map +7 -0
  51. package/dist/lib/node-esm/blueprints/index.mjs +9 -0
  52. package/dist/lib/node-esm/blueprints/index.mjs.map +7 -0
  53. package/dist/lib/node-esm/chunk-AGZOFIK2.mjs +10 -0
  54. package/dist/lib/node-esm/chunk-AGZOFIK2.mjs.map +7 -0
  55. package/dist/lib/node-esm/chunk-D46D75SK.mjs +797 -0
  56. package/dist/lib/node-esm/chunk-D46D75SK.mjs.map +7 -0
  57. package/dist/lib/node-esm/chunk-DCKB3AVD.mjs +59 -0
  58. package/dist/lib/node-esm/chunk-DCKB3AVD.mjs.map +7 -0
  59. package/dist/lib/node-esm/chunk-K2IIYNCG.mjs +106 -0
  60. package/dist/lib/node-esm/chunk-K2IIYNCG.mjs.map +7 -0
  61. package/dist/lib/node-esm/chunk-LOZVC2WA.mjs +177 -0
  62. package/dist/lib/node-esm/chunk-LOZVC2WA.mjs.map +7 -0
  63. package/dist/lib/node-esm/{chunk-BWDDFDJY.mjs → chunk-MLZQCT2N.mjs} +21 -15
  64. package/dist/lib/node-esm/chunk-MLZQCT2N.mjs.map +7 -0
  65. package/dist/lib/node-esm/chunk-USKAPINH.mjs +168 -0
  66. package/dist/lib/node-esm/chunk-USKAPINH.mjs.map +7 -0
  67. package/dist/lib/node-esm/cli/index.mjs +34 -0
  68. package/dist/lib/node-esm/cli/index.mjs.map +7 -0
  69. package/dist/lib/node-esm/index.mjs +132 -137
  70. package/dist/lib/node-esm/index.mjs.map +4 -4
  71. package/dist/lib/node-esm/meta.json +1 -1
  72. package/dist/lib/node-esm/operation-resolver-QAGXDA5E.mjs +54 -0
  73. package/dist/lib/node-esm/operation-resolver-QAGXDA5E.mjs.map +7 -0
  74. package/dist/lib/node-esm/react-surface-VIXAH5CF.mjs +214 -0
  75. package/dist/lib/node-esm/react-surface-VIXAH5CF.mjs.map +7 -0
  76. package/dist/lib/node-esm/settings-EXSH2KF4.mjs +37 -0
  77. package/dist/lib/node-esm/settings-EXSH2KF4.mjs.map +7 -0
  78. package/dist/lib/node-esm/state-TVF2XT2T.mjs +30 -0
  79. package/dist/lib/node-esm/state-TVF2XT2T.mjs.map +7 -0
  80. package/dist/lib/node-esm/types/index.mjs +13 -14
  81. package/dist/types/src/MarkdownPlugin.d.ts +2 -1
  82. package/dist/types/src/MarkdownPlugin.d.ts.map +1 -1
  83. package/dist/types/src/blueprints/functions/create.d.ts +8 -0
  84. package/dist/types/src/blueprints/functions/create.d.ts.map +1 -0
  85. package/dist/types/src/blueprints/functions/create.test.d.ts +2 -0
  86. package/dist/types/src/blueprints/functions/create.test.d.ts.map +1 -0
  87. package/dist/types/src/blueprints/functions/index.d.ts +4 -0
  88. package/dist/types/src/blueprints/functions/index.d.ts.map +1 -0
  89. package/dist/types/src/blueprints/functions/open.d.ts +14 -0
  90. package/dist/types/src/blueprints/functions/open.d.ts.map +1 -0
  91. package/dist/types/src/blueprints/functions/update.d.ts +19 -0
  92. package/dist/types/src/blueprints/functions/update.d.ts.map +1 -0
  93. package/dist/types/src/blueprints/functions/update.test.d.ts +2 -0
  94. package/dist/types/src/blueprints/functions/update.test.d.ts.map +1 -0
  95. package/dist/types/src/blueprints/index.d.ts +2 -0
  96. package/dist/types/src/blueprints/index.d.ts.map +1 -0
  97. package/dist/types/src/blueprints/markdown-blueprint.d.ts +21 -0
  98. package/dist/types/src/blueprints/markdown-blueprint.d.ts.map +1 -0
  99. package/dist/types/src/capabilities/anchor-sort/anchor-sort.d.ts +6 -0
  100. package/dist/types/src/capabilities/anchor-sort/anchor-sort.d.ts.map +1 -0
  101. package/dist/types/src/capabilities/anchor-sort/index.d.ts +3 -0
  102. package/dist/types/src/capabilities/anchor-sort/index.d.ts.map +1 -0
  103. package/dist/types/src/capabilities/app-graph-serializer/app-graph-serializer.d.ts +5 -0
  104. package/dist/types/src/capabilities/app-graph-serializer/app-graph-serializer.d.ts.map +1 -0
  105. package/dist/types/src/capabilities/app-graph-serializer/index.d.ts +3 -0
  106. package/dist/types/src/capabilities/app-graph-serializer/index.d.ts.map +1 -0
  107. package/dist/types/src/capabilities/artifact-definition/artifact-definition.d.ts +5 -0
  108. package/dist/types/src/capabilities/artifact-definition/artifact-definition.d.ts.map +1 -0
  109. package/dist/types/src/capabilities/artifact-definition/index.d.ts +3 -0
  110. package/dist/types/src/capabilities/artifact-definition/index.d.ts.map +1 -0
  111. package/dist/types/src/capabilities/blueprint-definition/blueprint-definition.d.ts +11 -0
  112. package/dist/types/src/capabilities/blueprint-definition/blueprint-definition.d.ts.map +1 -0
  113. package/dist/types/src/capabilities/blueprint-definition/index.d.ts +3 -0
  114. package/dist/types/src/capabilities/blueprint-definition/index.d.ts.map +1 -0
  115. package/dist/types/src/capabilities/index.d.ts +7 -16
  116. package/dist/types/src/capabilities/index.d.ts.map +1 -1
  117. package/dist/types/src/capabilities/operation-resolver/index.d.ts +3 -0
  118. package/dist/types/src/capabilities/operation-resolver/index.d.ts.map +1 -0
  119. package/dist/types/src/capabilities/operation-resolver/operation-resolver.d.ts +5 -0
  120. package/dist/types/src/capabilities/operation-resolver/operation-resolver.d.ts.map +1 -0
  121. package/dist/types/src/capabilities/react-surface/index.d.ts +3 -0
  122. package/dist/types/src/capabilities/react-surface/index.d.ts.map +1 -0
  123. package/dist/types/src/capabilities/react-surface/react-surface.d.ts +5 -0
  124. package/dist/types/src/capabilities/react-surface/react-surface.d.ts.map +1 -0
  125. package/dist/types/src/capabilities/settings/index.d.ts +3 -0
  126. package/dist/types/src/capabilities/settings/index.d.ts.map +1 -0
  127. package/dist/types/src/capabilities/settings/settings.d.ts +7 -0
  128. package/dist/types/src/capabilities/settings/settings.d.ts.map +1 -0
  129. package/dist/types/src/capabilities/state/index.d.ts +3 -0
  130. package/dist/types/src/capabilities/state/index.d.ts.map +1 -0
  131. package/dist/types/src/capabilities/state/state.d.ts +5 -0
  132. package/dist/types/src/capabilities/state/state.d.ts.map +1 -0
  133. package/dist/types/src/cli/index.d.ts +2 -0
  134. package/dist/types/src/cli/index.d.ts.map +1 -0
  135. package/dist/types/src/cli/plugin.d.ts +3 -0
  136. package/dist/types/src/cli/plugin.d.ts.map +1 -0
  137. package/dist/types/src/components/MarkdownCard/MarkdownCard.d.ts +8 -0
  138. package/dist/types/src/components/MarkdownCard/MarkdownCard.d.ts.map +1 -0
  139. package/dist/types/src/components/MarkdownCard/MarkdownCard.stories.d.ts +9 -0
  140. package/dist/types/src/components/MarkdownCard/MarkdownCard.stories.d.ts.map +1 -0
  141. package/dist/types/src/components/MarkdownCard/index.d.ts +4 -0
  142. package/dist/types/src/components/MarkdownCard/index.d.ts.map +1 -0
  143. package/dist/types/src/components/MarkdownContainer.d.ts +22 -12
  144. package/dist/types/src/components/MarkdownContainer.d.ts.map +1 -1
  145. package/dist/types/src/components/MarkdownContainer.stories.d.ts +84 -5
  146. package/dist/types/src/components/MarkdownContainer.stories.d.ts.map +1 -1
  147. package/dist/types/src/components/MarkdownEditor/FileUpload.d.ts +11 -0
  148. package/dist/types/src/components/MarkdownEditor/FileUpload.d.ts.map +1 -0
  149. package/dist/types/src/components/MarkdownEditor/MarkdownEditor.d.ts +43 -23
  150. package/dist/types/src/components/MarkdownEditor/MarkdownEditor.d.ts.map +1 -1
  151. package/dist/types/src/components/MarkdownEditor/MarkdownEditor.stories.d.ts +8 -15
  152. package/dist/types/src/components/MarkdownEditor/MarkdownEditor.stories.d.ts.map +1 -1
  153. package/dist/types/src/components/MarkdownEditor/MarkdownEditorContent.d.ts +30 -0
  154. package/dist/types/src/components/MarkdownEditor/MarkdownEditorContent.d.ts.map +1 -0
  155. package/dist/types/src/components/MarkdownEditor/MarkdownEditorToolbar.d.ts +12 -0
  156. package/dist/types/src/components/MarkdownEditor/MarkdownEditorToolbar.d.ts.map +1 -0
  157. package/dist/types/src/components/MarkdownSettings/MarkdownSettings.d.ts +6 -4
  158. package/dist/types/src/components/MarkdownSettings/MarkdownSettings.d.ts.map +1 -1
  159. package/dist/types/src/components/Suggestions.stories.d.ts +4 -5
  160. package/dist/types/src/components/Suggestions.stories.d.ts.map +1 -1
  161. package/dist/types/src/components/index.d.ts +7 -2
  162. package/dist/types/src/components/index.d.ts.map +1 -1
  163. package/dist/types/src/hooks/index.d.ts +3 -0
  164. package/dist/types/src/hooks/index.d.ts.map +1 -1
  165. package/dist/types/src/hooks/useEditorMenuOptions.d.ts +9 -0
  166. package/dist/types/src/hooks/useEditorMenuOptions.d.ts.map +1 -0
  167. package/dist/types/src/hooks/useExtensions.d.ts +21 -0
  168. package/dist/types/src/hooks/useExtensions.d.ts.map +1 -0
  169. package/dist/types/src/hooks/useLinkQuery.d.ts +4 -0
  170. package/dist/types/src/hooks/useLinkQuery.d.ts.map +1 -0
  171. package/dist/types/src/hooks/useSelectCurrentThread.d.ts +1 -1
  172. package/dist/types/src/hooks/useSelectCurrentThread.d.ts.map +1 -1
  173. package/dist/types/src/index.d.ts +4 -3
  174. package/dist/types/src/index.d.ts.map +1 -1
  175. package/dist/types/src/meta.d.ts +2 -3
  176. package/dist/types/src/meta.d.ts.map +1 -1
  177. package/dist/types/src/testing.d.ts +6 -0
  178. package/dist/types/src/testing.d.ts.map +1 -0
  179. package/dist/types/src/translations.d.ts +69 -80
  180. package/dist/types/src/translations.d.ts.map +1 -1
  181. package/dist/types/src/types/Markdown.d.ts +45 -0
  182. package/dist/types/src/types/Markdown.d.ts.map +1 -0
  183. package/dist/types/src/types/MarkdownAction.d.ts +66 -0
  184. package/dist/types/src/types/MarkdownAction.d.ts.map +1 -0
  185. package/dist/types/src/types/capabilities.d.ts +22 -0
  186. package/dist/types/src/types/capabilities.d.ts.map +1 -0
  187. package/dist/types/src/types/events.d.ts +5 -0
  188. package/dist/types/src/types/events.d.ts.map +1 -0
  189. package/dist/types/src/types/index.d.ts +5 -1
  190. package/dist/types/src/types/index.d.ts.map +1 -1
  191. package/dist/types/src/types/types.d.ts +4 -59
  192. package/dist/types/src/types/types.d.ts.map +1 -1
  193. package/dist/types/src/util.d.ts +17 -5
  194. package/dist/types/src/util.d.ts.map +1 -1
  195. package/dist/types/src/util.test.d.ts +2 -0
  196. package/dist/types/src/util.test.d.ts.map +1 -0
  197. package/dist/types/tsconfig.tsbuildinfo +1 -1
  198. package/package.json +99 -58
  199. package/src/MarkdownPlugin.tsx +83 -104
  200. package/src/blueprints/functions/create.conversations.json +1 -0
  201. package/src/blueprints/functions/create.test.ts +92 -0
  202. package/src/blueprints/functions/create.ts +35 -0
  203. package/src/blueprints/functions/index.ts +7 -0
  204. package/src/blueprints/functions/open.ts +33 -0
  205. package/src/blueprints/functions/update.conversations.json +1 -0
  206. package/src/blueprints/functions/update.test.ts +215 -0
  207. package/src/blueprints/functions/update.ts +79 -0
  208. package/src/blueprints/index.ts +5 -0
  209. package/src/blueprints/markdown-blueprint.ts +38 -0
  210. package/src/capabilities/anchor-sort/anchor-sort.ts +37 -0
  211. package/src/capabilities/anchor-sort/index.ts +7 -0
  212. package/src/capabilities/app-graph-serializer/app-graph-serializer.ts +60 -0
  213. package/src/capabilities/app-graph-serializer/index.ts +7 -0
  214. package/src/capabilities/artifact-definition/artifact-definition.ts +110 -0
  215. package/src/capabilities/artifact-definition/index.ts +7 -0
  216. package/src/capabilities/blueprint-definition/blueprint-definition.ts +26 -0
  217. package/src/capabilities/blueprint-definition/index.ts +7 -0
  218. package/src/capabilities/index.ts +7 -11
  219. package/src/capabilities/operation-resolver/index.ts +7 -0
  220. package/src/capabilities/operation-resolver/operation-resolver.ts +45 -0
  221. package/src/capabilities/react-surface/index.ts +7 -0
  222. package/src/capabilities/react-surface/react-surface.tsx +102 -0
  223. package/src/capabilities/settings/index.ts +7 -0
  224. package/src/capabilities/settings/settings.ts +37 -0
  225. package/src/capabilities/state/index.ts +7 -0
  226. package/src/capabilities/state/state.ts +31 -0
  227. package/src/cli/index.ts +5 -0
  228. package/src/cli/plugin.ts +30 -0
  229. package/src/components/MarkdownCard/MarkdownCard.stories.tsx +58 -0
  230. package/src/components/MarkdownCard/MarkdownCard.tsx +64 -0
  231. package/src/components/MarkdownCard/index.ts +9 -0
  232. package/src/components/MarkdownContainer.stories.tsx +82 -62
  233. package/src/components/MarkdownContainer.tsx +106 -234
  234. package/src/components/MarkdownEditor/FileUpload.tsx +63 -0
  235. package/src/components/MarkdownEditor/MarkdownEditor.stories.tsx +59 -37
  236. package/src/components/MarkdownEditor/MarkdownEditor.tsx +226 -272
  237. package/src/components/MarkdownEditor/MarkdownEditorContent.tsx +162 -0
  238. package/src/components/MarkdownEditor/MarkdownEditorToolbar.tsx +66 -0
  239. package/src/components/MarkdownSettings/MarkdownSettings.tsx +97 -80
  240. package/src/components/Suggestions.stories.tsx +74 -74
  241. package/src/components/index.ts +10 -3
  242. package/src/hooks/index.ts +3 -0
  243. package/src/hooks/useEditorMenuOptions.ts +68 -0
  244. package/src/{extensions.tsx → hooks/useExtensions.tsx} +96 -145
  245. package/src/hooks/useLinkQuery.ts +83 -0
  246. package/src/hooks/useSelectCurrentThread.tsx +39 -34
  247. package/src/index.ts +7 -3
  248. package/src/meta.ts +9 -10
  249. package/src/testing.ts +27 -0
  250. package/src/translations.ts +16 -7
  251. package/src/types/Markdown.ts +57 -0
  252. package/src/types/MarkdownAction.ts +59 -0
  253. package/src/types/capabilities.ts +38 -0
  254. package/src/types/events.ts +14 -0
  255. package/src/types/index.ts +6 -1
  256. package/src/types/types.ts +7 -50
  257. package/src/util.test.ts +44 -0
  258. package/src/util.tsx +100 -11
  259. package/dist/lib/browser/MarkdownContainer-EFWQ6DHD.mjs +0 -770
  260. package/dist/lib/browser/MarkdownContainer-EFWQ6DHD.mjs.map +0 -7
  261. package/dist/lib/browser/MarkdownPreview-F4PYFW5L.mjs +0 -80
  262. package/dist/lib/browser/MarkdownPreview-F4PYFW5L.mjs.map +0 -7
  263. package/dist/lib/browser/anchor-sort-BMAN2ABT.mjs +0 -32
  264. package/dist/lib/browser/anchor-sort-BMAN2ABT.mjs.map +0 -7
  265. package/dist/lib/browser/app-graph-serializer-EI6TEHRQ.mjs +0 -52
  266. package/dist/lib/browser/app-graph-serializer-EI6TEHRQ.mjs.map +0 -7
  267. package/dist/lib/browser/artifact-definition-FQ2R6KPT.mjs +0 -145
  268. package/dist/lib/browser/artifact-definition-FQ2R6KPT.mjs.map +0 -7
  269. package/dist/lib/browser/chunk-354IBM5X.mjs +0 -20
  270. package/dist/lib/browser/chunk-354IBM5X.mjs.map +0 -7
  271. package/dist/lib/browser/chunk-D767LUGU.mjs.map +0 -7
  272. package/dist/lib/browser/chunk-JX6XNEHE.mjs +0 -22
  273. package/dist/lib/browser/chunk-JX6XNEHE.mjs.map +0 -7
  274. package/dist/lib/browser/chunk-LXSRQPEP.mjs +0 -51
  275. package/dist/lib/browser/chunk-LXSRQPEP.mjs.map +0 -7
  276. package/dist/lib/browser/chunk-N2D26K6W.mjs +0 -79
  277. package/dist/lib/browser/chunk-N2D26K6W.mjs.map +0 -7
  278. package/dist/lib/browser/chunk-QVJETNGS.mjs +0 -16
  279. package/dist/lib/browser/chunk-QVJETNGS.mjs.map +0 -7
  280. package/dist/lib/browser/intent-resolver-6ZOABX2J.mjs +0 -64
  281. package/dist/lib/browser/intent-resolver-6ZOABX2J.mjs.map +0 -7
  282. package/dist/lib/browser/react-surface-4B5ELMEW.mjs +0 -205
  283. package/dist/lib/browser/react-surface-4B5ELMEW.mjs.map +0 -7
  284. package/dist/lib/browser/settings-PLH54VC7.mjs +0 -28
  285. package/dist/lib/browser/settings-PLH54VC7.mjs.map +0 -7
  286. package/dist/lib/browser/state-KI6PJ6DT.mjs +0 -37
  287. package/dist/lib/browser/state-KI6PJ6DT.mjs.map +0 -7
  288. package/dist/lib/node/MarkdownContainer-KYGUEZIL.cjs +0 -783
  289. package/dist/lib/node/MarkdownContainer-KYGUEZIL.cjs.map +0 -7
  290. package/dist/lib/node/MarkdownPreview-GCJJCXY6.cjs +0 -103
  291. package/dist/lib/node/MarkdownPreview-GCJJCXY6.cjs.map +0 -7
  292. package/dist/lib/node/anchor-sort-V3T4SFFI.cjs +0 -48
  293. package/dist/lib/node/anchor-sort-V3T4SFFI.cjs.map +0 -7
  294. package/dist/lib/node/app-graph-serializer-E6BXEDEL.cjs +0 -65
  295. package/dist/lib/node/app-graph-serializer-E6BXEDEL.cjs.map +0 -7
  296. package/dist/lib/node/artifact-definition-U27MH5SC.cjs +0 -158
  297. package/dist/lib/node/artifact-definition-U27MH5SC.cjs.map +0 -7
  298. package/dist/lib/node/chunk-3HHV4MM6.cjs +0 -101
  299. package/dist/lib/node/chunk-3HHV4MM6.cjs.map +0 -7
  300. package/dist/lib/node/chunk-CJLYFGPI.cjs +0 -74
  301. package/dist/lib/node/chunk-CJLYFGPI.cjs.map +0 -7
  302. package/dist/lib/node/chunk-FU3XZZCO.cjs +0 -58
  303. package/dist/lib/node/chunk-FU3XZZCO.cjs.map +0 -7
  304. package/dist/lib/node/chunk-IFYSBQE5.cjs +0 -35
  305. package/dist/lib/node/chunk-IFYSBQE5.cjs.map +0 -7
  306. package/dist/lib/node/chunk-LQAC5HL7.cjs +0 -68
  307. package/dist/lib/node/chunk-LQAC5HL7.cjs.map +0 -7
  308. package/dist/lib/node/chunk-ZU5OIHCY.cjs +0 -45
  309. package/dist/lib/node/chunk-ZU5OIHCY.cjs.map +0 -7
  310. package/dist/lib/node/index.cjs +0 -165
  311. package/dist/lib/node/index.cjs.map +0 -7
  312. package/dist/lib/node/intent-resolver-OEFLRNEJ.cjs +0 -77
  313. package/dist/lib/node/intent-resolver-OEFLRNEJ.cjs.map +0 -7
  314. package/dist/lib/node/meta.json +0 -1
  315. package/dist/lib/node/react-surface-456HQ4KZ.cjs +0 -218
  316. package/dist/lib/node/react-surface-456HQ4KZ.cjs.map +0 -7
  317. package/dist/lib/node/settings-E3NUTXJ4.cjs +0 -42
  318. package/dist/lib/node/settings-E3NUTXJ4.cjs.map +0 -7
  319. package/dist/lib/node/state-KKDRAG7X.cjs +0 -51
  320. package/dist/lib/node/state-KKDRAG7X.cjs.map +0 -7
  321. package/dist/lib/node/types/index.cjs +0 -40
  322. package/dist/lib/node/types/index.cjs.map +0 -7
  323. package/dist/lib/node-esm/MarkdownContainer-O3SGMH4G.mjs +0 -771
  324. package/dist/lib/node-esm/MarkdownContainer-O3SGMH4G.mjs.map +0 -7
  325. package/dist/lib/node-esm/MarkdownPreview-KFDRV4GC.mjs +0 -81
  326. package/dist/lib/node-esm/MarkdownPreview-KFDRV4GC.mjs.map +0 -7
  327. package/dist/lib/node-esm/anchor-sort-BXL7BE67.mjs +0 -33
  328. package/dist/lib/node-esm/anchor-sort-BXL7BE67.mjs.map +0 -7
  329. package/dist/lib/node-esm/app-graph-serializer-F7DGNF3G.mjs +0 -53
  330. package/dist/lib/node-esm/app-graph-serializer-F7DGNF3G.mjs.map +0 -7
  331. package/dist/lib/node-esm/artifact-definition-NQOHB6S5.mjs +0 -146
  332. package/dist/lib/node-esm/artifact-definition-NQOHB6S5.mjs.map +0 -7
  333. package/dist/lib/node-esm/chunk-BWDDFDJY.mjs.map +0 -7
  334. package/dist/lib/node-esm/chunk-JXXDCSMW.mjs +0 -17
  335. package/dist/lib/node-esm/chunk-JXXDCSMW.mjs.map +0 -7
  336. package/dist/lib/node-esm/chunk-K26TX5V4.mjs +0 -52
  337. package/dist/lib/node-esm/chunk-K26TX5V4.mjs.map +0 -7
  338. package/dist/lib/node-esm/chunk-RX63ZNML.mjs +0 -24
  339. package/dist/lib/node-esm/chunk-RX63ZNML.mjs.map +0 -7
  340. package/dist/lib/node-esm/chunk-T2Y2BT53.mjs +0 -80
  341. package/dist/lib/node-esm/chunk-T2Y2BT53.mjs.map +0 -7
  342. package/dist/lib/node-esm/chunk-YOABAQ7A.mjs +0 -22
  343. package/dist/lib/node-esm/chunk-YOABAQ7A.mjs.map +0 -7
  344. package/dist/lib/node-esm/intent-resolver-CLMSVF2K.mjs +0 -65
  345. package/dist/lib/node-esm/intent-resolver-CLMSVF2K.mjs.map +0 -7
  346. package/dist/lib/node-esm/react-surface-YHFOQTVO.mjs +0 -206
  347. package/dist/lib/node-esm/react-surface-YHFOQTVO.mjs.map +0 -7
  348. package/dist/lib/node-esm/settings-SIY33P3F.mjs +0 -29
  349. package/dist/lib/node-esm/settings-SIY33P3F.mjs.map +0 -7
  350. package/dist/lib/node-esm/state-LLGVRYKL.mjs +0 -38
  351. package/dist/lib/node-esm/state-LLGVRYKL.mjs.map +0 -7
  352. package/dist/types/src/capabilities/anchor-sort.d.ts +0 -6
  353. package/dist/types/src/capabilities/anchor-sort.d.ts.map +0 -1
  354. package/dist/types/src/capabilities/app-graph-serializer.d.ts +0 -4
  355. package/dist/types/src/capabilities/app-graph-serializer.d.ts.map +0 -1
  356. package/dist/types/src/capabilities/artifact-definition.d.ts +0 -11
  357. package/dist/types/src/capabilities/artifact-definition.d.ts.map +0 -1
  358. package/dist/types/src/capabilities/capabilities.d.ts +0 -12
  359. package/dist/types/src/capabilities/capabilities.d.ts.map +0 -1
  360. package/dist/types/src/capabilities/intent-resolver.d.ts +0 -4
  361. package/dist/types/src/capabilities/intent-resolver.d.ts.map +0 -1
  362. package/dist/types/src/capabilities/react-surface.d.ts +0 -4
  363. package/dist/types/src/capabilities/react-surface.d.ts.map +0 -1
  364. package/dist/types/src/capabilities/settings.d.ts +0 -4
  365. package/dist/types/src/capabilities/settings.d.ts.map +0 -1
  366. package/dist/types/src/capabilities/state.d.ts +0 -11
  367. package/dist/types/src/capabilities/state.d.ts.map +0 -1
  368. package/dist/types/src/components/MarkdownPreview/MarkdownPreview.d.ts +0 -6
  369. package/dist/types/src/components/MarkdownPreview/MarkdownPreview.d.ts.map +0 -1
  370. package/dist/types/src/components/MarkdownPreview/MarkdownPreview.stories.d.ts +0 -17
  371. package/dist/types/src/components/MarkdownPreview/MarkdownPreview.stories.d.ts.map +0 -1
  372. package/dist/types/src/components/MarkdownPreview/index.d.ts +0 -4
  373. package/dist/types/src/components/MarkdownPreview/index.d.ts.map +0 -1
  374. package/dist/types/src/components/Toolbar.stories.d.ts +0 -11
  375. package/dist/types/src/components/Toolbar.stories.d.ts.map +0 -1
  376. package/dist/types/src/events.d.ts +0 -4
  377. package/dist/types/src/events.d.ts.map +0 -1
  378. package/dist/types/src/extensions.d.ts +0 -24
  379. package/dist/types/src/extensions.d.ts.map +0 -1
  380. package/dist/types/src/types/schema.d.ts +0 -35
  381. package/dist/types/src/types/schema.d.ts.map +0 -1
  382. package/src/capabilities/anchor-sort.ts +0 -30
  383. package/src/capabilities/app-graph-serializer.ts +0 -52
  384. package/src/capabilities/artifact-definition.ts +0 -116
  385. package/src/capabilities/capabilities.ts +0 -20
  386. package/src/capabilities/intent-resolver.ts +0 -63
  387. package/src/capabilities/react-surface.tsx +0 -113
  388. package/src/capabilities/settings.ts +0 -25
  389. package/src/capabilities/state.ts +0 -31
  390. package/src/components/MarkdownPreview/MarkdownPreview.stories.tsx +0 -74
  391. package/src/components/MarkdownPreview/MarkdownPreview.tsx +0 -71
  392. package/src/components/MarkdownPreview/index.ts +0 -9
  393. package/src/components/Toolbar.stories.tsx +0 -113
  394. package/src/events.ts +0 -11
  395. package/src/types/schema.ts +0 -39
@@ -0,0 +1,66 @@
1
+ //
2
+ // Copyright 2025 DXOS.org
3
+ //
4
+
5
+ import { type EditorView } from '@codemirror/view';
6
+ import React, { useCallback, useState } from 'react';
7
+
8
+ import { type FileInfo } from '@dxos/app-toolkit';
9
+ import { invariant } from '@dxos/invariant';
10
+ import { type ThemedClassName } from '@dxos/react-ui';
11
+ import { EditorToolbar, type EditorToolbarProps } from '@dxos/react-ui-editor';
12
+ import { type EditorViewMode } from '@dxos/ui-editor';
13
+
14
+ import { FileUpload, type FileUploadAction } from './FileUpload';
15
+
16
+ export type MarkdownEditorToolbarProps = ThemedClassName<
17
+ {
18
+ id: string;
19
+ editorView?: EditorView;
20
+ onFileUpload?: (file: File) => Promise<FileInfo | undefined>;
21
+ } & Pick<EditorToolbarProps, 'role' | 'state' | 'customActions' | 'onAction' | 'onViewModeChange'>
22
+ >;
23
+
24
+ export const MarkdownEditorToolbar = ({
25
+ classNames,
26
+ id,
27
+ role,
28
+ state,
29
+ editorView,
30
+ customActions,
31
+ onAction,
32
+ onFileUpload,
33
+ onViewModeChange,
34
+ }: MarkdownEditorToolbarProps) => {
35
+ const [upload, setUpload] = useState<FileUploadAction | null>(null);
36
+ const uploadRef = useCallback((next: FileUploadAction) => setUpload(() => next), []);
37
+
38
+ const handleViewModeChange = useCallback((mode: EditorViewMode) => onViewModeChange?.(mode), [onViewModeChange]);
39
+
40
+ const getView = useCallback(() => {
41
+ invariant(editorView);
42
+ return editorView;
43
+ }, [editorView]);
44
+
45
+ if (!editorView) {
46
+ return <div />;
47
+ }
48
+
49
+ return (
50
+ <>
51
+ <EditorToolbar
52
+ classNames={classNames}
53
+ attendableId={id}
54
+ role={role}
55
+ state={state}
56
+ customActions={customActions}
57
+ getView={getView}
58
+ onAction={onAction}
59
+ onImageUpload={upload ?? undefined}
60
+ onViewModeChange={handleViewModeChange}
61
+ />
62
+
63
+ {onFileUpload && <FileUpload ref={uploadRef} editorView={editorView} onFileUpload={onFileUpload} />}
64
+ </>
65
+ );
66
+ };
@@ -5,101 +5,118 @@
5
5
  import React from 'react';
6
6
 
7
7
  import { Input, Select, useTranslation } from '@dxos/react-ui';
8
- import { type EditorInputMode, EditorInputModes, type EditorViewMode, EditorViewModes } from '@dxos/react-ui-editor';
9
- import { DeprecatedFormContainer, DeprecatedFormInput } from '@dxos/react-ui-form';
8
+ import { Settings } from '@dxos/react-ui-form';
9
+ import { type EditorInputMode, EditorInputModes, type EditorViewMode, EditorViewModes } from '@dxos/ui-editor';
10
10
 
11
- import { MARKDOWN_PLUGIN } from '../../meta';
12
- import { type MarkdownSettingsProps } from '../../types';
11
+ import { meta } from '../../meta';
12
+ import { type Markdown } from '../../types';
13
13
 
14
- export const MarkdownSettings = ({ settings }: { settings: MarkdownSettingsProps }) => {
15
- const { t } = useTranslation(MARKDOWN_PLUGIN);
14
+ export type MarkdownSettingsComponentProps = {
15
+ settings: Markdown.Settings;
16
+ onSettingsChange: (fn: (current: Markdown.Settings) => Markdown.Settings) => void;
17
+ };
18
+
19
+ export const MarkdownSettings = ({ settings, onSettingsChange }: MarkdownSettingsComponentProps) => {
20
+ const { t } = useTranslation(meta.id);
16
21
 
17
22
  // TODO(wittjosiah): Add skill test confirmation for entering vim mode.
18
23
  return (
19
- <DeprecatedFormContainer>
20
- <DeprecatedFormInput label={t('default view mode label')}>
21
- <Select.Root
22
- value={settings.defaultViewMode}
23
- onValueChange={(value) => {
24
- settings.defaultViewMode = value as EditorViewMode;
25
- }}
26
- >
27
- <Select.TriggerButton />
28
- <Select.Portal>
29
- <Select.Content>
30
- <Select.Viewport>
31
- {EditorViewModes.map((mode) => (
32
- <Select.Option key={mode} value={mode}>
33
- {t(`${mode} mode label`, { ns: 'react-ui-editor' })}
34
- </Select.Option>
35
- ))}
36
- </Select.Viewport>
37
- </Select.Content>
38
- </Select.Portal>
39
- </Select.Root>
40
- </DeprecatedFormInput>
24
+ <Settings.Root>
25
+ <Settings.Section title={t('settings title', { ns: meta.id })}>
26
+ <Settings.Group>
27
+ <Settings.ItemInput title={t('default view mode label')}>
28
+ <Select.Root
29
+ value={settings.defaultViewMode}
30
+ onValueChange={(value) => {
31
+ onSettingsChange((s) => ({ ...s, defaultViewMode: value as EditorViewMode }));
32
+ }}
33
+ >
34
+ <Select.TriggerButton />
35
+ <Select.Portal>
36
+ <Select.Content>
37
+ <Select.Viewport>
38
+ {EditorViewModes.map((mode) => (
39
+ <Select.Option key={mode} value={mode}>
40
+ {t(`${mode} mode label`, { ns: '@dxos/react-ui-editor' })}
41
+ </Select.Option>
42
+ ))}
43
+ </Select.Viewport>
44
+ <Select.Arrow />
45
+ </Select.Content>
46
+ </Select.Portal>
47
+ </Select.Root>
48
+ </Settings.ItemInput>
49
+
50
+ <Settings.ItemInput title={t('editor input mode label')}>
51
+ <Select.Root
52
+ value={settings.editorInputMode ?? 'default'}
53
+ onValueChange={(value) => {
54
+ onSettingsChange((s) => ({ ...s, editorInputMode: value as EditorInputMode }));
55
+ }}
56
+ >
57
+ <Select.TriggerButton placeholder={t('select editor input mode placeholder')} />
58
+ <Select.Portal>
59
+ <Select.Content>
60
+ <Select.Viewport>
61
+ {EditorInputModes.map((mode) => (
62
+ <Select.Option key={mode} value={mode}>
63
+ {t(`settings editor input mode ${mode} label`)}
64
+ </Select.Option>
65
+ ))}
66
+ </Select.Viewport>
67
+ <Select.Arrow />
68
+ </Select.Content>
69
+ </Select.Portal>
70
+ </Select.Root>
71
+ </Settings.ItemInput>
41
72
 
42
- <DeprecatedFormInput label={t('editor input mode label')}>
43
- <Select.Root
44
- value={settings.editorInputMode ?? 'default'}
45
- onValueChange={(value) => {
46
- settings.editorInputMode = value as EditorInputMode;
47
- }}
48
- >
49
- <Select.TriggerButton placeholder={t('select editor input mode placeholder')} />
50
- <Select.Portal>
51
- <Select.Content>
52
- <Select.Viewport>
53
- {EditorInputModes.map((mode) => (
54
- <Select.Option key={mode} value={mode}>
55
- {t(`settings editor input mode ${mode} label`)}
56
- </Select.Option>
57
- ))}
58
- </Select.Viewport>
59
- </Select.Content>
60
- </Select.Portal>
61
- </Select.Root>
62
- </DeprecatedFormInput>
73
+ <Settings.ItemInput title={t('settings toolbar label')}>
74
+ <Input.Switch
75
+ checked={settings.toolbar}
76
+ onCheckedChange={(checked) => onSettingsChange((s) => ({ ...s, toolbar: !!checked }))}
77
+ />
78
+ </Settings.ItemInput>
63
79
 
64
- <DeprecatedFormInput label={t('settings toolbar label')}>
65
- <Input.Switch checked={settings.toolbar} onCheckedChange={(checked) => (settings.toolbar = !!checked)} />
66
- </DeprecatedFormInput>
80
+ <Settings.ItemInput title={t('settings numbered headings label')}>
81
+ <Input.Switch
82
+ checked={settings.numberedHeadings}
83
+ onCheckedChange={(checked) => onSettingsChange((s) => ({ ...s, numberedHeadings: !!checked }))}
84
+ />
85
+ </Settings.ItemInput>
67
86
 
68
- <DeprecatedFormInput label={t('settings numbered headings label')}>
69
- <Input.Switch
70
- checked={settings.numberedHeadings}
71
- onCheckedChange={(checked) => (settings.numberedHeadings = !!checked)}
72
- />
73
- </DeprecatedFormInput>
87
+ <Settings.ItemInput title={t('settings folding label')}>
88
+ <Input.Switch
89
+ checked={settings.folding}
90
+ onCheckedChange={(checked) => onSettingsChange((s) => ({ ...s, folding: !!checked }))}
91
+ />
92
+ </Settings.ItemInput>
74
93
 
75
- <DeprecatedFormInput label={t('settings folding label')}>
76
- <Input.Switch checked={settings.folding} onCheckedChange={(checked) => (settings.folding = !!checked)} />
77
- </DeprecatedFormInput>
94
+ <Settings.ItemInput title={t('settings experimental label')}>
95
+ <Input.Switch
96
+ checked={settings.experimental}
97
+ onCheckedChange={(checked) => onSettingsChange((s) => ({ ...s, experimental: !!checked }))}
98
+ />
99
+ </Settings.ItemInput>
78
100
 
79
- <DeprecatedFormInput label={t('settings experimental label')}>
80
- <Input.Switch
81
- checked={settings.experimental}
82
- onCheckedChange={(checked) => (settings.experimental = !!checked)}
83
- />
84
- </DeprecatedFormInput>
101
+ <Settings.ItemInput title={t('settings debug label')}>
102
+ <Input.Switch
103
+ checked={settings.debug}
104
+ onCheckedChange={(checked) => onSettingsChange((s) => ({ ...s, debug: !!checked }))}
105
+ />
106
+ </Settings.ItemInput>
85
107
 
86
- <DeprecatedFormInput
87
- label={t('settings debug label')}
88
- secondary={
89
- settings.debug ? (
90
- <Input.Root>
108
+ {settings.debug && (
109
+ <Settings.ItemInput title={t('settings debug textarea label', { ns: meta.id })}>
91
110
  <Input.TextArea
92
111
  rows={5}
93
112
  value={settings.typewriter}
94
- onChange={({ target: { value } }) => (settings.typewriter = value)}
113
+ onChange={({ target: { value } }) => onSettingsChange((s) => ({ ...s, typewriter: value }))}
95
114
  placeholder={t('settings debug placeholder')}
96
115
  />
97
- </Input.Root>
98
- ) : undefined
99
- }
100
- >
101
- <Input.Switch checked={settings.debug} onCheckedChange={(checked) => (settings.debug = !!checked)} />
102
- </DeprecatedFormInput>
103
- </DeprecatedFormContainer>
116
+ </Settings.ItemInput>
117
+ )}
118
+ </Settings.Group>
119
+ </Settings.Section>
120
+ </Settings.Root>
104
121
  );
105
122
  };
@@ -2,46 +2,37 @@
2
2
  // Copyright 2023 DXOS.org
3
3
  //
4
4
 
5
- import '@dxos-theme';
6
-
7
- import { type Meta } from '@storybook/react';
8
- import { Match, Option, pipe, Schema } from 'effect';
5
+ import { type Meta } from '@storybook/react-vite';
6
+ import * as Effect from 'effect/Effect';
7
+ import * as Function from 'effect/Function';
8
+ import * as Match from 'effect/Match';
9
+ import * as Option from 'effect/Option';
10
+ import * as Schema from 'effect/Schema';
9
11
  import React, { type FC, useEffect, useMemo, useState } from 'react';
10
12
 
11
- import { Message } from '@dxos/ai';
12
- import {
13
- Capabilities,
14
- CollaborationActions,
15
- IntentPlugin,
16
- SettingsPlugin,
17
- contributes,
18
- createIntent,
19
- useCapability,
20
- useIntentDispatcher,
21
- } from '@dxos/app-framework';
22
13
  import { withPluginManager } from '@dxos/app-framework/testing';
14
+ import { useAtomCapability, useCapability } from '@dxos/app-framework/ui';
23
15
  import { Obj, Ref, Type } from '@dxos/echo';
16
+ import { createDocAccessor, toCursorRange } from '@dxos/echo-db';
24
17
  import { invariant } from '@dxos/invariant';
25
- import { DXN } from '@dxos/keys';
26
18
  import { ClientPlugin } from '@dxos/plugin-client';
27
19
  import { PreviewPlugin } from '@dxos/plugin-preview';
28
- import { SpacePlugin } from '@dxos/plugin-space';
29
- import { StorybookLayoutPlugin } from '@dxos/plugin-storybook-layout';
30
- import { ThemePlugin } from '@dxos/plugin-theme';
20
+ import { StorybookPlugin, corePlugins } from '@dxos/plugin-testing';
31
21
  import { faker } from '@dxos/random';
32
- import { createDocAccessor, fullyQualifiedId, toCursorRange, useQueue, useSpace } from '@dxos/react-client/echo';
22
+ import { useQueue, useSpace } from '@dxos/react-client/echo';
33
23
  import { IconButton, Toolbar } from '@dxos/react-ui';
34
- import { command, type EditorSelection, type Range, useTextEditor } from '@dxos/react-ui-editor';
35
- import { StackItem } from '@dxos/react-ui-stack';
36
- import { defaultTx } from '@dxos/react-ui-theme';
37
- import { withLayout } from '@dxos/storybook-utils';
24
+ import { Layout } from '@dxos/react-ui';
25
+ import { withTheme } from '@dxos/react-ui/testing';
26
+ import { useTextEditor } from '@dxos/react-ui-editor';
27
+ import { render } from '@dxos/storybook-utils';
28
+ import { Message } from '@dxos/types';
29
+ import { type EditorSelection, type Range } from '@dxos/ui-editor';
38
30
 
39
- import MarkdownContainer from './MarkdownContainer';
40
31
  import { MarkdownPlugin } from '../MarkdownPlugin';
41
- import { MarkdownCapabilities } from '../capabilities';
42
- import { MARKDOWN_PLUGIN } from '../meta';
43
- import translations from '../translations';
44
- import { createDocument, DocumentType, type MarkdownSettingsProps } from '../types';
32
+ import { translations } from '../translations';
33
+ import { Markdown, MarkdownCapabilities } from '../types';
34
+
35
+ import { MarkdownContainer } from './MarkdownContainer';
45
36
 
46
37
  faker.seed(1);
47
38
 
@@ -55,32 +46,37 @@ const TestItem = Schema.Struct({
55
46
  description: 'Product description',
56
47
  }),
57
48
  }).pipe(
58
- Type.Obj({
49
+ Type.object({
59
50
  typename: 'dxos.org/type/Test',
60
51
  version: '0.1.0',
61
52
  }),
62
53
  );
63
54
 
64
- const TestChat: FC<{ doc: DocumentType; content: string }> = ({ doc, content }) => {
65
- const { dispatchPromise: dispatch } = useIntentDispatcher();
55
+ const TestChat: FC<{ doc: Markdown.Document; content: string }> = ({ doc, content }) => {
66
56
  const { parentRef } = useTextEditor({ initialValue: content });
67
- const { editorState } = useCapability(MarkdownCapabilities.State);
57
+ const editorState = useCapability(MarkdownCapabilities.EditorState);
68
58
 
69
59
  const space = useSpace();
70
60
  const queueDxn = useMemo(() => space && space.queues.create().dxn, [space]);
71
- const queue = useQueue<Message>(queueDxn);
61
+ const queue = useQueue<Message.Message>(queueDxn);
72
62
 
73
63
  const handleInsert = async () => {
74
64
  invariant(space);
75
65
  invariant(queue);
76
- await queue.append([Obj.make(Message, { role: 'assistant', content: [{ type: 'text', text: 'Hello' }] })]);
66
+ await queue.append([
67
+ Obj.make(Message.Message, {
68
+ created: new Date().toISOString(),
69
+ sender: { role: 'assistant' },
70
+ blocks: [{ _tag: 'text', text: 'Hello' }],
71
+ }),
72
+ ]);
77
73
  const message = queue.objects.at(-1);
78
74
  invariant(message);
79
75
 
80
76
  const text = await doc.content.load();
81
77
  const accessor = createDocAccessor(text, ['content']);
82
- const cursor = pipe(
83
- editorState.getState(fullyQualifiedId(doc))?.selection,
78
+ const cursor = Function.pipe(
79
+ editorState.getState(Obj.getDXN(doc).toString())?.selection,
84
80
  Option.fromNullable,
85
81
  Option.map(selectionToRange),
86
82
  Option.map((range) => toCursorRange(accessor, range.from, range.to)),
@@ -92,31 +88,31 @@ const TestChat: FC<{ doc: DocumentType; content: string }> = ({ doc, content })
92
88
  // const message = deref(ref);
93
89
  // }
94
90
 
95
- void dispatch(
96
- createIntent(CollaborationActions.InsertContent, {
97
- target: doc as any as Type.Expando,
98
- object: Ref.fromDXN(new DXN(DXN.kind.QUEUE, [...queue.dxn.parts, message.id])),
99
- at: cursor,
100
- label: 'Proposal',
101
- }),
102
- );
91
+ // void dispatch(
92
+ // createIntent(CollaborationActions.InsertContent, {
93
+ // target: doc as any as TestSchema.Expando,
94
+ // object: Ref.fromDXN(new DXN(DXN.kind.QUEUE, [...queue.dxn.parts, message.id])),
95
+ // at: cursor,
96
+ // label: 'Proposal',
97
+ // }),
98
+ // );
103
99
  };
104
100
 
105
101
  return (
106
- <StackItem.Content toolbar>
102
+ <Layout.Main toolbar>
107
103
  <Toolbar.Root>
108
104
  <IconButton icon='ph--plus--regular' disabled={!queue} label='Insert' onClick={handleInsert} />
109
105
  </Toolbar.Root>
110
106
  <div ref={parentRef} className='p-4' />
111
- </StackItem.Content>
107
+ </Layout.Main>
112
108
  );
113
109
  };
114
110
 
115
111
  const DefaultStory = ({ document, chat }: { document: string; chat: string }) => {
116
112
  const space = useSpace();
117
- const [doc, setDoc] = useState<DocumentType>();
118
- const settings = useCapability(Capabilities.SettingsStore).getStore<MarkdownSettingsProps>(MARKDOWN_PLUGIN)!.value;
119
- const { editorState } = useCapability(MarkdownCapabilities.State);
113
+ const [doc, setDoc] = useState<Markdown.Document>();
114
+ const settings = useAtomCapability(MarkdownCapabilities.Settings);
115
+ const editorState = useCapability(MarkdownCapabilities.EditorState);
120
116
 
121
117
  useEffect(() => {
122
118
  if (!space) {
@@ -124,14 +120,17 @@ const DefaultStory = ({ document, chat }: { document: string; chat: string }) =>
124
120
  }
125
121
 
126
122
  const doc = space.db.add(
127
- createDocument({
123
+ Markdown.make({
128
124
  name: 'Test',
129
-
130
- // Create links.
131
125
  content: document.replaceAll(/\[(\w+)\]/g, (_, label) => {
132
- const obj = space.db.add(Obj.make(TestItem, { title: label, description: faker.lorem.paragraph() }));
126
+ const obj = space.db.add(
127
+ Obj.make(TestItem, {
128
+ title: label,
129
+ description: faker.lorem.paragraph(),
130
+ }),
131
+ );
133
132
  const dxn = Ref.make(obj).dxn.toString();
134
- return `[${label}][${dxn}]`;
133
+ return `[${label}](${dxn})`;
135
134
  }),
136
135
  }),
137
136
  );
@@ -140,48 +139,49 @@ const DefaultStory = ({ document, chat }: { document: string; chat: string }) =>
140
139
  }, [space]);
141
140
 
142
141
  if (!space || !doc) {
143
- return <></>;
142
+ return null;
144
143
  }
145
144
 
146
145
  return (
147
- <>
148
- <MarkdownContainer id={doc.id} object={doc} settings={settings} editorStateStore={editorState} />
146
+ <div className='grid grid-cols-2 bs-full overflow-hidden'>
147
+ <MarkdownContainer id={doc.id} subject={doc} settings={settings} editorStateStore={editorState} />
149
148
  <TestChat doc={doc} content={chat} />
150
- </>
149
+ </div>
151
150
  );
152
151
  };
153
152
 
154
- const meta: Meta<typeof DefaultStory> = {
153
+ const storybook: Meta<typeof DefaultStory> = {
155
154
  title: 'plugins/plugin-markdown/Suggestions',
156
- render: DefaultStory,
155
+ render: render(DefaultStory),
157
156
  decorators: [
157
+ withTheme(),
158
158
  withPluginManager({
159
159
  plugins: [
160
- ThemePlugin({ tx: defaultTx }),
161
- StorybookLayoutPlugin(),
160
+ ...corePlugins(),
161
+ StorybookPlugin({}),
162
162
  ClientPlugin({
163
- types: [DocumentType, TestItem],
164
- onClientInitialized: async (_, client) => {
165
- await client.halo.createIdentity();
166
- },
163
+ types: [Markdown.Document, TestItem],
164
+ onClientInitialized: ({ client }) =>
165
+ Effect.gen(function* () {
166
+ yield* Effect.promise(() => client.halo.createIdentity());
167
+ }),
167
168
  }),
168
- SpacePlugin(),
169
- SettingsPlugin(),
170
- IntentPlugin(),
169
+
171
170
  MarkdownPlugin(),
172
171
  PreviewPlugin(),
173
172
  ],
174
- capabilities: [contributes(MarkdownCapabilities.Extensions, [() => command()])],
175
173
  }),
176
- withLayout({ fullscreen: true, classNames: 'grid grid-cols-2' }),
177
174
  ],
178
175
  parameters: {
176
+ layout: 'fullscreen',
177
+ controls: {
178
+ disable: true,
179
+ },
179
180
  translations,
180
- controls: { disable: true },
181
181
  },
182
182
  };
183
183
 
184
- export default meta;
184
+ export default storybook;
185
185
 
186
186
  type Story = Meta<typeof DefaultStory>;
187
187
 
@@ -2,9 +2,16 @@
2
2
  // Copyright 2023 DXOS.org
3
3
  //
4
4
 
5
- import { lazy } from 'react';
5
+ import { type LazyExoticComponent, lazy } from 'react';
6
6
 
7
+ import { type MarkdownCard as MarkdownCardType } from './MarkdownCard';
8
+ import { type MarkdownContainer as MarkdownContainerType } from './MarkdownContainer';
9
+
10
+ export * from './MarkdownCard';
11
+ export * from './MarkdownContainer';
7
12
  export * from './MarkdownSettings';
8
13
 
9
- export const MarkdownContainer = lazy(() => import('./MarkdownContainer'));
10
- export const MarkdownPreview = lazy(() => import('./MarkdownPreview'));
14
+ export const MarkdownCard: LazyExoticComponent<typeof MarkdownCardType> = lazy(() => import('./MarkdownCard'));
15
+ export const MarkdownContainer: LazyExoticComponent<typeof MarkdownContainerType> = lazy(
16
+ () => import('./MarkdownContainer'),
17
+ );
@@ -2,4 +2,7 @@
2
2
  // Copyright 2024 DXOS.org
3
3
  //
4
4
 
5
+ export * from './useEditorMenuOptions';
6
+ export * from './useExtensions';
7
+ export * from './useLinkQuery';
5
8
  export * from './useSelectCurrentThread';
@@ -0,0 +1,68 @@
1
+ //
2
+ // Copyright 2025 DXOS.org
3
+ //
4
+
5
+ import { type EditorView } from '@codemirror/view';
6
+ import { useCallback, useMemo, useRef } from 'react';
7
+
8
+ import { toLocalizedString, useTranslation } from '@dxos/react-ui';
9
+ import {
10
+ type EditorMenuGroup,
11
+ type UseEditorMenuProps,
12
+ filterMenuGroups,
13
+ formattingCommands,
14
+ linkSlashCommands,
15
+ } from '@dxos/react-ui-editor';
16
+ import { Domino } from '@dxos/ui';
17
+
18
+ import { meta } from '../meta';
19
+
20
+ export type UseEditorMenuOptionsProps = {
21
+ editorView?: EditorView;
22
+ slashCommandGroups?: EditorMenuGroup[];
23
+ onLinkQuery?: (query?: string) => Promise<EditorMenuGroup[]>;
24
+ };
25
+
26
+ export const useEditorMenuOptions = ({
27
+ editorView,
28
+ slashCommandGroups,
29
+ onLinkQuery,
30
+ }: UseEditorMenuOptionsProps): UseEditorMenuProps => {
31
+ const { t } = useTranslation(meta.id);
32
+
33
+ const getMenu = useCallback<NonNullable<UseEditorMenuProps['getMenu']>>(
34
+ ({ text, trigger }) => {
35
+ switch (trigger) {
36
+ case '@': {
37
+ return onLinkQuery?.(text) ?? [];
38
+ }
39
+
40
+ case '/':
41
+ default: {
42
+ return filterMenuGroups([formattingCommands, linkSlashCommands, ...(slashCommandGroups ?? [])], (item) =>
43
+ text ? toLocalizedString(item.label, t).toLowerCase().includes(text.toLowerCase()) : true,
44
+ );
45
+ }
46
+ }
47
+ },
48
+ [slashCommandGroups, onLinkQuery],
49
+ );
50
+
51
+ const viewRef = useRef(editorView);
52
+ return useMemo<UseEditorMenuProps>(() => {
53
+ const trigger = onLinkQuery ? ['/', '@'] : ['/'];
54
+ const placeholder = {
55
+ delay: 3_000,
56
+ content: () => {
57
+ const pressEl = Domino.of('span').text('Press');
58
+ const triggerEls = trigger.map((text) =>
59
+ Domino.of('span').classNames('mx-1 pli-1.5 pt-[1px] pb-[2px] border border-separator rounded-sm').text(text),
60
+ );
61
+ const forCommandsEl = Domino.of('span').text('for commands.');
62
+ return Domino.of('div').children(pressEl, ...triggerEls, forCommandsEl).root;
63
+ },
64
+ };
65
+
66
+ return { viewRef, getMenu, trigger, placeholder };
67
+ }, [getMenu, onLinkQuery]);
68
+ };