@dxos/plugin-markdown 0.8.4-main.5acf9ea → 0.8.4-main.66e292d

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 (265) hide show
  1. package/dist/lib/browser/MarkdownCard-TC3GGUSX.mjs +12 -0
  2. package/dist/lib/browser/MarkdownCard-TC3GGUSX.mjs.map +7 -0
  3. package/dist/lib/browser/MarkdownContainer-YF22DV4M.mjs +15 -0
  4. package/dist/lib/browser/MarkdownContainer-YF22DV4M.mjs.map +7 -0
  5. package/dist/lib/browser/{anchor-sort-Z7JQA7RL.mjs → anchor-sort-3MYLO74J.mjs} +10 -10
  6. package/dist/lib/browser/anchor-sort-3MYLO74J.mjs.map +7 -0
  7. package/dist/lib/browser/{app-graph-serializer-ZT5OVF5G.mjs → app-graph-serializer-BZJ4TQOE.mjs} +11 -12
  8. package/dist/lib/browser/app-graph-serializer-BZJ4TQOE.mjs.map +7 -0
  9. package/dist/lib/browser/blueprint-definition-HED54GGW.mjs +13 -0
  10. package/dist/lib/browser/blueprint-definition-HED54GGW.mjs.map +7 -0
  11. package/dist/lib/browser/chunk-3IPVL3E4.mjs +20 -0
  12. package/dist/lib/browser/chunk-3IPVL3E4.mjs.map +7 -0
  13. package/dist/lib/browser/chunk-BE3IO2CM.mjs +150 -0
  14. package/dist/lib/browser/chunk-BE3IO2CM.mjs.map +7 -0
  15. package/dist/lib/browser/{chunk-ZGY3DYC2.mjs → chunk-BQTYJOFB.mjs} +5 -7
  16. package/dist/lib/browser/chunk-BQTYJOFB.mjs.map +7 -0
  17. package/dist/lib/browser/{chunk-YHMGUSO7.mjs → chunk-CN35HEBX.mjs} +16 -17
  18. package/dist/lib/browser/chunk-CN35HEBX.mjs.map +7 -0
  19. package/dist/lib/browser/chunk-DLZ5RR3P.mjs +96 -0
  20. package/dist/lib/browser/chunk-DLZ5RR3P.mjs.map +7 -0
  21. package/dist/lib/browser/{chunk-CD4E4K7J.mjs → chunk-IBCHVMZW.mjs} +2 -2
  22. package/dist/lib/browser/{chunk-CD4E4K7J.mjs.map → chunk-IBCHVMZW.mjs.map} +2 -2
  23. package/dist/lib/browser/{chunk-K7ZFMSC4.mjs → chunk-NXT2E2BG.mjs} +10 -5
  24. package/dist/lib/browser/chunk-NXT2E2BG.mjs.map +7 -0
  25. package/dist/lib/browser/{chunk-VMX5SDGW.mjs → chunk-OKNQ57GF.mjs} +9 -8
  26. package/dist/lib/browser/chunk-OKNQ57GF.mjs.map +7 -0
  27. package/dist/lib/browser/chunk-V7P7EIWG.mjs +829 -0
  28. package/dist/lib/browser/chunk-V7P7EIWG.mjs.map +7 -0
  29. package/dist/lib/browser/index.mjs +32 -34
  30. package/dist/lib/browser/index.mjs.map +3 -3
  31. package/dist/lib/browser/{intent-resolver-EBEF7WEI.mjs → intent-resolver-55ASQRIW.mjs} +22 -20
  32. package/dist/lib/browser/intent-resolver-55ASQRIW.mjs.map +7 -0
  33. package/dist/lib/browser/meta.json +1 -1
  34. package/dist/lib/browser/{react-surface-ZPMZT4VU.mjs → react-surface-GPD6T435.mjs} +89 -86
  35. package/dist/lib/browser/react-surface-GPD6T435.mjs.map +7 -0
  36. package/dist/lib/browser/{settings-MBDK4TWE.mjs → settings-G3ZOXJQY.mjs} +5 -5
  37. package/dist/lib/browser/{settings-MBDK4TWE.mjs.map → settings-G3ZOXJQY.mjs.map} +1 -1
  38. package/dist/lib/browser/{state-ZA6PZPUI.mjs → state-BTUKVZHY.mjs} +5 -5
  39. package/dist/lib/browser/state-BTUKVZHY.mjs.map +7 -0
  40. package/dist/lib/browser/toolkit.mjs +13 -0
  41. package/dist/lib/browser/toolkit.mjs.map +7 -0
  42. package/dist/lib/browser/types/index.mjs +2 -2
  43. package/dist/lib/node-esm/MarkdownCard-FTEHVH7P.mjs +13 -0
  44. package/dist/lib/node-esm/MarkdownCard-FTEHVH7P.mjs.map +7 -0
  45. package/dist/lib/node-esm/MarkdownContainer-L75AIJFM.mjs +16 -0
  46. package/dist/lib/node-esm/MarkdownContainer-L75AIJFM.mjs.map +7 -0
  47. package/dist/lib/node-esm/{anchor-sort-R6AAKYNG.mjs → anchor-sort-W4HCTYUQ.mjs} +10 -10
  48. package/dist/lib/node-esm/anchor-sort-W4HCTYUQ.mjs.map +7 -0
  49. package/dist/lib/node-esm/{app-graph-serializer-X4M5QEI6.mjs → app-graph-serializer-OCTHXWLF.mjs} +11 -12
  50. package/dist/lib/node-esm/app-graph-serializer-OCTHXWLF.mjs.map +7 -0
  51. package/dist/lib/node-esm/blueprint-definition-HAQGJOMQ.mjs +14 -0
  52. package/dist/lib/node-esm/blueprint-definition-HAQGJOMQ.mjs.map +7 -0
  53. package/dist/lib/node-esm/chunk-3DN4DPVA.mjs +151 -0
  54. package/dist/lib/node-esm/chunk-3DN4DPVA.mjs.map +7 -0
  55. package/dist/lib/node-esm/{chunk-LZK3TLKM.mjs → chunk-7GN66TDQ.mjs} +9 -8
  56. package/dist/lib/node-esm/chunk-7GN66TDQ.mjs.map +7 -0
  57. package/dist/lib/node-esm/{chunk-B3J2M4YL.mjs → chunk-GMMVSXQ6.mjs} +2 -2
  58. package/dist/lib/node-esm/{chunk-B3J2M4YL.mjs.map → chunk-GMMVSXQ6.mjs.map} +2 -2
  59. package/dist/lib/node-esm/{chunk-YGNVDYMB.mjs → chunk-I5JSQBPI.mjs} +10 -5
  60. package/dist/lib/node-esm/chunk-I5JSQBPI.mjs.map +7 -0
  61. package/dist/lib/node-esm/{chunk-RCIXKCVG.mjs → chunk-SHAMSMKQ.mjs} +5 -7
  62. package/dist/lib/node-esm/chunk-SHAMSMKQ.mjs.map +7 -0
  63. package/dist/lib/node-esm/chunk-TYUGABTD.mjs +22 -0
  64. package/dist/lib/node-esm/chunk-TYUGABTD.mjs.map +7 -0
  65. package/dist/lib/node-esm/chunk-UVLACSAE.mjs +830 -0
  66. package/dist/lib/node-esm/chunk-UVLACSAE.mjs.map +7 -0
  67. package/dist/lib/node-esm/{chunk-6GCOJS4Y.mjs → chunk-YFRTKXTB.mjs} +16 -17
  68. package/dist/lib/node-esm/chunk-YFRTKXTB.mjs.map +7 -0
  69. package/dist/lib/node-esm/chunk-ZNS55FS3.mjs +97 -0
  70. package/dist/lib/node-esm/chunk-ZNS55FS3.mjs.map +7 -0
  71. package/dist/lib/node-esm/index.mjs +32 -34
  72. package/dist/lib/node-esm/index.mjs.map +3 -3
  73. package/dist/lib/node-esm/{intent-resolver-L2UGZ72W.mjs → intent-resolver-DTBVWCNO.mjs} +22 -20
  74. package/dist/lib/node-esm/intent-resolver-DTBVWCNO.mjs.map +7 -0
  75. package/dist/lib/node-esm/meta.json +1 -1
  76. package/dist/lib/node-esm/{react-surface-3JJSTTQP.mjs → react-surface-QWG7CJ5U.mjs} +89 -86
  77. package/dist/lib/node-esm/react-surface-QWG7CJ5U.mjs.map +7 -0
  78. package/dist/lib/node-esm/{settings-LBDWWPZJ.mjs → settings-IBFFCGNL.mjs} +5 -5
  79. package/dist/lib/node-esm/{settings-LBDWWPZJ.mjs.map → settings-IBFFCGNL.mjs.map} +1 -1
  80. package/dist/lib/node-esm/{state-UIHO2SFZ.mjs → state-K6EH7SRZ.mjs} +5 -5
  81. package/dist/lib/node-esm/state-K6EH7SRZ.mjs.map +7 -0
  82. package/dist/lib/node-esm/toolkit.mjs +14 -0
  83. package/dist/lib/node-esm/toolkit.mjs.map +7 -0
  84. package/dist/lib/node-esm/types/index.mjs +2 -2
  85. package/dist/types/src/MarkdownPlugin.d.ts +1 -1
  86. package/dist/types/src/MarkdownPlugin.d.ts.map +1 -1
  87. package/dist/types/src/capabilities/anchor-sort.d.ts +2 -4
  88. package/dist/types/src/capabilities/anchor-sort.d.ts.map +1 -1
  89. package/dist/types/src/capabilities/app-graph-serializer.d.ts +1 -1
  90. package/dist/types/src/capabilities/app-graph-serializer.d.ts.map +1 -1
  91. package/dist/types/src/capabilities/artifact-definition.d.ts +1 -9
  92. package/dist/types/src/capabilities/artifact-definition.d.ts.map +1 -1
  93. package/dist/types/src/capabilities/blueprint-definition.d.ts +7 -0
  94. package/dist/types/src/capabilities/blueprint-definition.d.ts.map +1 -0
  95. package/dist/types/src/capabilities/capabilities.d.ts +1 -1
  96. package/dist/types/src/capabilities/capabilities.d.ts.map +1 -1
  97. package/dist/types/src/capabilities/index.d.ts +10 -12
  98. package/dist/types/src/capabilities/index.d.ts.map +1 -1
  99. package/dist/types/src/capabilities/intent-resolver.d.ts +1 -1
  100. package/dist/types/src/capabilities/intent-resolver.d.ts.map +1 -1
  101. package/dist/types/src/capabilities/react-surface.d.ts +1 -1
  102. package/dist/types/src/capabilities/react-surface.d.ts.map +1 -1
  103. package/dist/types/src/capabilities/settings.d.ts +1 -1
  104. package/dist/types/src/capabilities/state.d.ts +2 -2
  105. package/dist/types/src/capabilities/state.d.ts.map +1 -1
  106. package/dist/types/src/components/MarkdownCard/MarkdownCard.d.ts +7 -0
  107. package/dist/types/src/components/MarkdownCard/MarkdownCard.d.ts.map +1 -0
  108. package/dist/types/src/components/MarkdownCard/MarkdownCard.stories.d.ts +9 -0
  109. package/dist/types/src/components/MarkdownCard/MarkdownCard.stories.d.ts.map +1 -0
  110. package/dist/types/src/components/MarkdownCard/index.d.ts +4 -0
  111. package/dist/types/src/components/MarkdownCard/index.d.ts.map +1 -0
  112. package/dist/types/src/components/MarkdownContainer.d.ts +8 -12
  113. package/dist/types/src/components/MarkdownContainer.d.ts.map +1 -1
  114. package/dist/types/src/components/MarkdownContainer.stories.d.ts +55 -5
  115. package/dist/types/src/components/MarkdownContainer.stories.d.ts.map +1 -1
  116. package/dist/types/src/components/MarkdownEditor/FileUpload.d.ts +11 -0
  117. package/dist/types/src/components/MarkdownEditor/FileUpload.d.ts.map +1 -0
  118. package/dist/types/src/components/MarkdownEditor/MarkdownEditor.d.ts +42 -23
  119. package/dist/types/src/components/MarkdownEditor/MarkdownEditor.d.ts.map +1 -1
  120. package/dist/types/src/components/MarkdownEditor/MarkdownEditor.stories.d.ts +8 -15
  121. package/dist/types/src/components/MarkdownEditor/MarkdownEditor.stories.d.ts.map +1 -1
  122. package/dist/types/src/components/MarkdownEditor/MarkdownEditorContent.d.ts +26 -0
  123. package/dist/types/src/components/MarkdownEditor/MarkdownEditorContent.d.ts.map +1 -0
  124. package/dist/types/src/components/MarkdownEditor/MarkdownEditorToolbar.d.ts +12 -0
  125. package/dist/types/src/components/MarkdownEditor/MarkdownEditorToolbar.d.ts.map +1 -0
  126. package/dist/types/src/components/MarkdownSettings/MarkdownSettings.d.ts.map +1 -1
  127. package/dist/types/src/components/Suggestions.stories.d.ts +1 -2
  128. package/dist/types/src/components/Suggestions.stories.d.ts.map +1 -1
  129. package/dist/types/src/components/index.d.ts +4 -2
  130. package/dist/types/src/components/index.d.ts.map +1 -1
  131. package/dist/types/src/functions/create.d.ts +8 -0
  132. package/dist/types/src/functions/create.d.ts.map +1 -0
  133. package/dist/types/src/functions/create.test.d.ts +2 -0
  134. package/dist/types/src/functions/create.test.d.ts.map +1 -0
  135. package/dist/types/src/functions/index.d.ts +18 -0
  136. package/dist/types/src/functions/index.d.ts.map +1 -0
  137. package/dist/types/src/functions/open.d.ts +7 -0
  138. package/dist/types/src/functions/open.d.ts.map +1 -0
  139. package/dist/types/src/functions/update.d.ts +6 -0
  140. package/dist/types/src/functions/update.d.ts.map +1 -0
  141. package/dist/types/src/functions/update.test.d.ts +2 -0
  142. package/dist/types/src/functions/update.test.d.ts.map +1 -0
  143. package/dist/types/src/hooks/index.d.ts +3 -0
  144. package/dist/types/src/hooks/index.d.ts.map +1 -1
  145. package/dist/types/src/hooks/useEditorMenuOptions.d.ts +9 -0
  146. package/dist/types/src/hooks/useEditorMenuOptions.d.ts.map +1 -0
  147. package/dist/types/src/hooks/useExtensions.d.ts +21 -0
  148. package/dist/types/src/hooks/useExtensions.d.ts.map +1 -0
  149. package/dist/types/src/hooks/useLinkQuery.d.ts +4 -0
  150. package/dist/types/src/hooks/useLinkQuery.d.ts.map +1 -0
  151. package/dist/types/src/hooks/useSelectCurrentThread.d.ts +1 -1
  152. package/dist/types/src/hooks/useSelectCurrentThread.d.ts.map +1 -1
  153. package/dist/types/src/index.d.ts +2 -1
  154. package/dist/types/src/index.d.ts.map +1 -1
  155. package/dist/types/src/meta.d.ts +0 -1
  156. package/dist/types/src/meta.d.ts.map +1 -1
  157. package/dist/types/src/testing.d.ts +6 -0
  158. package/dist/types/src/testing.d.ts.map +1 -0
  159. package/dist/types/src/toolkit.d.ts +3 -0
  160. package/dist/types/src/toolkit.d.ts.map +1 -0
  161. package/dist/types/src/translations.d.ts +5 -0
  162. package/dist/types/src/translations.d.ts.map +1 -1
  163. package/dist/types/src/types/Markdown.d.ts +11 -9
  164. package/dist/types/src/types/Markdown.d.ts.map +1 -1
  165. package/dist/types/src/types/MarkdownAction.d.ts +7 -15
  166. package/dist/types/src/types/MarkdownAction.d.ts.map +1 -1
  167. package/dist/types/src/types/index.d.ts.map +1 -1
  168. package/dist/types/src/types/types.d.ts.map +1 -1
  169. package/dist/types/src/util.d.ts +3 -3
  170. package/dist/types/src/util.d.ts.map +1 -1
  171. package/dist/types/tsconfig.tsbuildinfo +1 -1
  172. package/package.json +76 -57
  173. package/src/MarkdownPlugin.tsx +90 -99
  174. package/src/capabilities/anchor-sort.ts +7 -6
  175. package/src/capabilities/app-graph-serializer.ts +7 -7
  176. package/src/capabilities/artifact-definition.ts +17 -21
  177. package/src/capabilities/blueprint-definition.ts +43 -0
  178. package/src/capabilities/capabilities.ts +2 -1
  179. package/src/capabilities/index.ts +3 -2
  180. package/src/capabilities/intent-resolver.ts +16 -15
  181. package/src/capabilities/react-surface.tsx +46 -67
  182. package/src/capabilities/state.ts +3 -2
  183. package/src/components/{MarkdownPreview/MarkdownPreview.stories.tsx → MarkdownCard/MarkdownCard.stories.tsx} +17 -18
  184. package/src/components/MarkdownCard/MarkdownCard.tsx +89 -0
  185. package/src/components/MarkdownCard/index.ts +9 -0
  186. package/src/components/MarkdownContainer.stories.tsx +79 -43
  187. package/src/components/MarkdownContainer.tsx +79 -220
  188. package/src/components/MarkdownEditor/FileUpload.tsx +63 -0
  189. package/src/components/MarkdownEditor/MarkdownEditor.stories.tsx +57 -34
  190. package/src/components/MarkdownEditor/MarkdownEditor.tsx +221 -272
  191. package/src/components/MarkdownEditor/MarkdownEditorContent.tsx +136 -0
  192. package/src/components/MarkdownEditor/MarkdownEditorToolbar.tsx +63 -0
  193. package/src/components/MarkdownSettings/MarkdownSettings.tsx +77 -74
  194. package/src/components/Suggestions.stories.tsx +54 -48
  195. package/src/components/index.ts +3 -1
  196. package/src/functions/create.conversations.json +1 -0
  197. package/src/functions/create.test.ts +128 -0
  198. package/src/functions/create.ts +34 -0
  199. package/src/functions/index.ts +13 -0
  200. package/src/functions/open.ts +32 -0
  201. package/src/functions/update.conversations.json +1 -0
  202. package/src/functions/update.test.ts +151 -0
  203. package/src/functions/update.ts +37 -0
  204. package/src/hooks/index.ts +3 -0
  205. package/src/hooks/useEditorMenuOptions.ts +71 -0
  206. package/src/{extensions.tsx → hooks/useExtensions.tsx} +66 -115
  207. package/src/hooks/useLinkQuery.ts +83 -0
  208. package/src/hooks/useSelectCurrentThread.tsx +15 -5
  209. package/src/index.ts +3 -1
  210. package/src/meta.ts +3 -6
  211. package/src/testing.ts +27 -0
  212. package/src/toolkit.ts +6 -0
  213. package/src/translations.ts +5 -0
  214. package/src/types/Markdown.ts +9 -7
  215. package/src/types/MarkdownAction.ts +5 -6
  216. package/src/types/index.ts +1 -0
  217. package/src/types/types.ts +1 -0
  218. package/src/util.tsx +10 -5
  219. package/dist/lib/browser/MarkdownContainer-NNBPE6A5.mjs +0 -779
  220. package/dist/lib/browser/MarkdownContainer-NNBPE6A5.mjs.map +0 -7
  221. package/dist/lib/browser/MarkdownPreview-7VG3K24R.mjs +0 -80
  222. package/dist/lib/browser/MarkdownPreview-7VG3K24R.mjs.map +0 -7
  223. package/dist/lib/browser/anchor-sort-Z7JQA7RL.mjs.map +0 -7
  224. package/dist/lib/browser/app-graph-serializer-ZT5OVF5G.mjs.map +0 -7
  225. package/dist/lib/browser/artifact-definition-7VNP5PCP.mjs +0 -145
  226. package/dist/lib/browser/artifact-definition-7VNP5PCP.mjs.map +0 -7
  227. package/dist/lib/browser/chunk-K7ZFMSC4.mjs.map +0 -7
  228. package/dist/lib/browser/chunk-VCUKIILA.mjs +0 -20
  229. package/dist/lib/browser/chunk-VCUKIILA.mjs.map +0 -7
  230. package/dist/lib/browser/chunk-VMX5SDGW.mjs.map +0 -7
  231. package/dist/lib/browser/chunk-YHMGUSO7.mjs.map +0 -7
  232. package/dist/lib/browser/chunk-ZGY3DYC2.mjs.map +0 -7
  233. package/dist/lib/browser/intent-resolver-EBEF7WEI.mjs.map +0 -7
  234. package/dist/lib/browser/react-surface-ZPMZT4VU.mjs.map +0 -7
  235. package/dist/lib/browser/state-ZA6PZPUI.mjs.map +0 -7
  236. package/dist/lib/node-esm/MarkdownContainer-Q6UO7DKT.mjs +0 -780
  237. package/dist/lib/node-esm/MarkdownContainer-Q6UO7DKT.mjs.map +0 -7
  238. package/dist/lib/node-esm/MarkdownPreview-UVWR2YK3.mjs +0 -81
  239. package/dist/lib/node-esm/MarkdownPreview-UVWR2YK3.mjs.map +0 -7
  240. package/dist/lib/node-esm/anchor-sort-R6AAKYNG.mjs.map +0 -7
  241. package/dist/lib/node-esm/app-graph-serializer-X4M5QEI6.mjs.map +0 -7
  242. package/dist/lib/node-esm/artifact-definition-IRIILD7S.mjs +0 -146
  243. package/dist/lib/node-esm/artifact-definition-IRIILD7S.mjs.map +0 -7
  244. package/dist/lib/node-esm/chunk-6GCOJS4Y.mjs.map +0 -7
  245. package/dist/lib/node-esm/chunk-A7LLVI34.mjs +0 -22
  246. package/dist/lib/node-esm/chunk-A7LLVI34.mjs.map +0 -7
  247. package/dist/lib/node-esm/chunk-LZK3TLKM.mjs.map +0 -7
  248. package/dist/lib/node-esm/chunk-RCIXKCVG.mjs.map +0 -7
  249. package/dist/lib/node-esm/chunk-YGNVDYMB.mjs.map +0 -7
  250. package/dist/lib/node-esm/intent-resolver-L2UGZ72W.mjs.map +0 -7
  251. package/dist/lib/node-esm/react-surface-3JJSTTQP.mjs.map +0 -7
  252. package/dist/lib/node-esm/state-UIHO2SFZ.mjs.map +0 -7
  253. package/dist/types/src/components/MarkdownPreview/MarkdownPreview.d.ts +0 -6
  254. package/dist/types/src/components/MarkdownPreview/MarkdownPreview.d.ts.map +0 -1
  255. package/dist/types/src/components/MarkdownPreview/MarkdownPreview.stories.d.ts +0 -10
  256. package/dist/types/src/components/MarkdownPreview/MarkdownPreview.stories.d.ts.map +0 -1
  257. package/dist/types/src/components/MarkdownPreview/index.d.ts +0 -4
  258. package/dist/types/src/components/MarkdownPreview/index.d.ts.map +0 -1
  259. package/dist/types/src/components/Toolbar.stories.d.ts +0 -11
  260. package/dist/types/src/components/Toolbar.stories.d.ts.map +0 -1
  261. package/dist/types/src/extensions.d.ts +0 -24
  262. package/dist/types/src/extensions.d.ts.map +0 -1
  263. package/src/components/MarkdownPreview/MarkdownPreview.tsx +0 -73
  264. package/src/components/MarkdownPreview/index.ts +0 -9
  265. package/src/components/Toolbar.stories.tsx +0 -112
@@ -1,780 +0,0 @@
1
- import { createRequire } from 'node:module';const require = createRequire(import.meta.url);
2
- import "./chunk-A7LLVI34.mjs";
3
- import {
4
- MarkdownCapabilities
5
- } from "./chunk-B3J2M4YL.mjs";
6
- import {
7
- getFallbackName,
8
- setFallbackName
9
- } from "./chunk-LZK3TLKM.mjs";
10
- import {
11
- Markdown_exports
12
- } from "./chunk-6GCOJS4Y.mjs";
13
- import {
14
- meta
15
- } from "./chunk-RCIXKCVG.mjs";
16
-
17
- // src/components/MarkdownContainer.tsx
18
- import { useSignals as _useSignals2 } from "@preact-signals/safe-react/tracking";
19
- import { Rx } from "@effect-rx/rx-react";
20
- import React3, { useCallback as useCallback2, useEffect as useEffect2, useMemo as useMemo4, useState } from "react";
21
- import { createPortal } from "react-dom";
22
- import { Capabilities, Surface, useAppGraph, useCapabilities as useCapabilities2, usePluginManager } from "@dxos/app-framework";
23
- import { DXN, Filter, Obj, Query, Type } from "@dxos/echo";
24
- import { ClientCapabilities } from "@dxos/plugin-client";
25
- import { SpaceCapabilities } from "@dxos/plugin-space";
26
- import { fullyQualifiedId as fullyQualifiedId2, getSpace as getSpace2, useQuery, useSpace } from "@dxos/react-client/echo";
27
- import { toLocalizedString as toLocalizedString2, useTranslation as useTranslation2 } from "@dxos/react-ui";
28
- import { insertAtCursor, insertAtLineStart } from "@dxos/react-ui-editor";
29
- import { DataType } from "@dxos/schema";
30
-
31
- // src/components/MarkdownEditor/MarkdownEditor.tsx
32
- import { useSignals as _useSignals } from "@preact-signals/safe-react/tracking";
33
- import React, { forwardRef, useMemo as useMemo2, useEffect, useCallback, useImperativeHandle, useRef } from "react";
34
- import { useDropzone } from "react-dropzone";
35
- import { invariant as invariant2 } from "@dxos/invariant";
36
- import { toLocalizedString, useThemeContext, useTranslation } from "@dxos/react-ui";
37
- import { CommandMenu, EditorToolbar, RefPopover, addLink, createElement, coreSlashCommands, createBasicExtensions, createMarkdownExtensions, createThemeExtensions, dropFile, editorGutter, editorSlots, filterItems, linkSlashCommands, processEditorPayload, stackItemContentEditorClassNames, useEditorToolbarState, useFormattingState, useTextEditor, useCommandMenu } from "@dxos/react-ui-editor";
38
- import { StackItem } from "@dxos/react-ui-stack";
39
- import { isNotFalsy, isNonNullable } from "@dxos/util";
40
-
41
- // src/hooks/useSelectCurrentThread.tsx
42
- import { EditorView } from "@codemirror/view";
43
- import { Schema } from "effect";
44
- import { useMemo } from "react";
45
- import { createResolver, LayoutAction, useIntentResolver } from "@dxos/app-framework";
46
- import { invariant } from "@dxos/invariant";
47
- import { Cursor, setSelection } from "@dxos/react-ui-editor";
48
- var __dxlog_file = "/__w/dxos/dxos/packages/plugins/plugin-markdown/src/hooks/useSelectCurrentThread.tsx";
49
- var useSelectCurrentThread = (editorView, documentId2) => {
50
- const scrollIntoViewResolver = useMemo(() => createResolver({
51
- intent: LayoutAction.UpdateLayout,
52
- position: "hoist",
53
- filter: (data) => {
54
- if (!Schema.is(LayoutAction.ScrollIntoView.fields.input)(data)) {
55
- return false;
56
- }
57
- return !!editorView && data.subject === documentId2 && !!data.options?.cursor;
58
- },
59
- resolve: ({ options: { cursor } }) => {
60
- invariant(editorView, "Editor view is not defined.", {
61
- F: __dxlog_file,
62
- L: 32,
63
- S: void 0,
64
- A: [
65
- "editorView",
66
- "'Editor view is not defined.'"
67
- ]
68
- });
69
- const range = Cursor.getRangeFromCursor(editorView.state, cursor);
70
- if (range) {
71
- const selection = editorView.state.selection.main.from !== range.from ? {
72
- anchor: range.from
73
- } : void 0;
74
- const effects = [
75
- // NOTE: This does not use the DOM scrollIntoView function.
76
- EditorView.scrollIntoView(range.from, {
77
- y: "start",
78
- yMargin: 96
79
- })
80
- ];
81
- if (selection) {
82
- effects.push(setSelection.of({
83
- current: documentId2
84
- }));
85
- }
86
- editorView.dispatch({
87
- effects,
88
- selection: selection ? {
89
- anchor: range.from
90
- } : void 0
91
- });
92
- }
93
- }
94
- }), [
95
- documentId2,
96
- editorView
97
- ]);
98
- useIntentResolver(meta.id, scrollIntoViewResolver);
99
- };
100
-
101
- // src/components/MarkdownEditor/MarkdownEditor.tsx
102
- var __dxlog_file2 = "/__w/dxos/dxos/packages/plugins/plugin-markdown/src/components/MarkdownEditor/MarkdownEditor.tsx";
103
- var MarkdownEditor = ({ extensions: _extensions, slashCommandGroups, onLinkQuery, ...props }) => {
104
- var _effect = _useSignals();
105
- try {
106
- const { t } = useTranslation();
107
- const viewRef = useRef();
108
- const getMenu = useCallback((trigger, query) => {
109
- switch (trigger) {
110
- case "@":
111
- return onLinkQuery?.(query) ?? [];
112
- case "/":
113
- default:
114
- return filterItems([
115
- coreSlashCommands,
116
- linkSlashCommands,
117
- ...slashCommandGroups ?? []
118
- ], (item) => query ? toLocalizedString(item.label, t).toLowerCase().includes(query.toLowerCase()) : true);
119
- }
120
- }, [
121
- onLinkQuery,
122
- slashCommandGroups
123
- ]);
124
- const options = useMemo2(() => {
125
- const trigger = onLinkQuery ? [
126
- "/",
127
- "@"
128
- ] : [
129
- "/"
130
- ];
131
- return {
132
- viewRef,
133
- trigger,
134
- placeholder: {
135
- delay: 3e3,
136
- content: () => {
137
- return createElement("div", void 0, [
138
- createElement("span", {
139
- text: "Press"
140
- }),
141
- ...trigger.map((text) => createElement("span", {
142
- className: "border border-separator rounded-sm mx-1 px-1.5 pt-[1px] pb-[2px]",
143
- text
144
- })),
145
- createElement("span", {
146
- text: "for commands."
147
- })
148
- ]);
149
- }
150
- },
151
- getMenu
152
- };
153
- }, [
154
- getMenu
155
- ]);
156
- const { commandMenu, groupsRef, currentItem, onSelect, ...refPopoverProps } = useCommandMenu(options);
157
- const extensions = useMemo2(() => [
158
- _extensions,
159
- commandMenu
160
- ].filter(isNotFalsy), [
161
- _extensions,
162
- commandMenu
163
- ]);
164
- return /* @__PURE__ */ React.createElement(RefPopover, {
165
- modal: false,
166
- ...refPopoverProps
167
- }, /* @__PURE__ */ React.createElement(MarkdownEditorImpl, {
168
- ref: viewRef,
169
- ...props,
170
- extensions
171
- }), /* @__PURE__ */ React.createElement(CommandMenu, {
172
- groups: groupsRef.current,
173
- currentItem,
174
- onSelect
175
- }));
176
- } finally {
177
- _effect.f();
178
- }
179
- };
180
- var MarkdownEditorImpl = /* @__PURE__ */ forwardRef(({ id, role = "article", initialValue, customActions, editorStateStore, extensions, extensionProviders, scrollPastEnd, toolbar, viewMode, onFileUpload, onViewModeChange }, forwardedRef) => {
181
- var _effect = _useSignals();
182
- try {
183
- const { t } = useTranslation(meta.id);
184
- const { themeMode } = useThemeContext();
185
- const toolbarState = useEditorToolbarState({
186
- viewMode
187
- });
188
- const formattingObserver = useFormattingState(toolbarState);
189
- const { scrollTo, selection } = useMemo2(() => editorStateStore?.getState(id) ?? {}, [
190
- id
191
- ]);
192
- const providerExtensions = useMemo2(() => extensionProviders?.flatMap((provider) => provider({})).filter(isNonNullable), [
193
- extensionProviders
194
- ]);
195
- const handleDrop = async (view, { files }) => {
196
- const file = files[0];
197
- const info = file && onFileUpload ? await onFileUpload(file) : void 0;
198
- if (info) {
199
- processEditorPayload(view, {
200
- type: "image",
201
- data: info.url
202
- });
203
- }
204
- };
205
- const { parentRef, view: editorView, focusAttributes } = useTextEditor(() => ({
206
- initialValue,
207
- extensions: [
208
- formattingObserver,
209
- createBasicExtensions({
210
- readOnly: viewMode === "readonly",
211
- placeholder: t("editor placeholder"),
212
- scrollPastEnd: role === "section" ? false : scrollPastEnd
213
- }),
214
- createMarkdownExtensions({
215
- themeMode
216
- }),
217
- createThemeExtensions({
218
- themeMode,
219
- syntaxHighlighting: true,
220
- slots: editorSlots
221
- }),
222
- editorGutter,
223
- role !== "section" && onFileUpload && dropFile({
224
- onDrop: handleDrop
225
- }),
226
- providerExtensions,
227
- extensions
228
- ].filter(isNotFalsy),
229
- ...role !== "section" && {
230
- id,
231
- scrollTo,
232
- selection,
233
- // TODO(wittjosiah): Autofocus based on layout is racy.
234
- // autoFocus: layoutPlugin?.provides.layout ? layoutPlugin?.provides.layout.scrollIntoView === id : true,
235
- moveToEndOfLine: true
236
- }
237
- }), [
238
- id,
239
- formattingObserver,
240
- viewMode,
241
- themeMode,
242
- extensions,
243
- providerExtensions
244
- ]);
245
- useImperativeHandle(forwardedRef, () => editorView, [
246
- editorView
247
- ]);
248
- useTest(editorView);
249
- useSelectCurrentThread(editorView, id);
250
- const { acceptedFiles, getInputProps, open } = useDropzone({
251
- multiple: false,
252
- noDrag: true,
253
- accept: {
254
- "image/*": [
255
- ".jpg",
256
- ".jpeg",
257
- ".png",
258
- ".gif"
259
- ]
260
- }
261
- });
262
- useEffect(() => {
263
- if (editorView && onFileUpload && acceptedFiles.length) {
264
- requestAnimationFrame(async () => {
265
- const f = acceptedFiles[0];
266
- const file = new File([
267
- f
268
- ], f.name, {
269
- type: f.type,
270
- lastModified: f.lastModified
271
- });
272
- const info = await onFileUpload(file);
273
- if (info) {
274
- addLink({
275
- url: info.url,
276
- image: true
277
- })(editorView);
278
- }
279
- });
280
- }
281
- }, [
282
- acceptedFiles,
283
- editorView,
284
- onFileUpload
285
- ]);
286
- const getView = useCallback(() => {
287
- invariant2(editorView, void 0, {
288
- F: __dxlog_file2,
289
- L: 240,
290
- S: void 0,
291
- A: [
292
- "editorView",
293
- ""
294
- ]
295
- });
296
- return editorView;
297
- }, [
298
- editorView
299
- ]);
300
- const handleViewModeChange = useCallback((mode) => onViewModeChange?.(id, mode), [
301
- id,
302
- onViewModeChange
303
- ]);
304
- const handleImageUpload = useCallback(() => {
305
- if (onFileUpload) {
306
- open();
307
- }
308
- }, [
309
- onFileUpload
310
- ]);
311
- return /* @__PURE__ */ React.createElement(StackItem.Content, {
312
- toolbar: !!toolbar
313
- }, toolbar && /* @__PURE__ */ React.createElement(React.Fragment, null, /* @__PURE__ */ React.createElement(EditorToolbar, {
314
- attendableId: id,
315
- role,
316
- state: toolbarState,
317
- customActions,
318
- getView,
319
- image: handleImageUpload,
320
- viewMode: handleViewModeChange
321
- }), /* @__PURE__ */ React.createElement("input", getInputProps())), /* @__PURE__ */ React.createElement("div", {
322
- role: "none",
323
- ref: parentRef,
324
- "data-testid": "composer.markdownRoot",
325
- "data-toolbar": toolbar ? "enabled" : "disabled",
326
- className: stackItemContentEditorClassNames(role),
327
- "data-popover-collision-boundary": true,
328
- ...focusAttributes
329
- }));
330
- } finally {
331
- _effect.f();
332
- }
333
- });
334
- var useTest = (view) => {
335
- useEffect(() => {
336
- const composer = window.composer;
337
- if (composer) {
338
- composer.editorView = view;
339
- }
340
- }, [
341
- view
342
- ]);
343
- };
344
-
345
- // src/extensions.tsx
346
- import React2, { useMemo as useMemo3 } from "react";
347
- import { createRoot } from "react-dom/client";
348
- import { createIntent, LayoutAction as LayoutAction2, useCapabilities, useIntentDispatcher } from "@dxos/app-framework";
349
- import { debounceAndThrottle } from "@dxos/async";
350
- import { invariant as invariant3 } from "@dxos/invariant";
351
- import { createDocAccessor, fullyQualifiedId, getSpace } from "@dxos/react-client/echo";
352
- import { useIdentity } from "@dxos/react-client/halo";
353
- import { Icon, ThemeProvider } from "@dxos/react-ui";
354
- import { InputModeExtensions, createDataExtensions, autocomplete, decorateMarkdown, folding, formattingKeymap, linkTooltip, listener, preview, selectionState, typewriter, EditorView as EditorView2, documentId, Cursor as Cursor2 } from "@dxos/react-ui-editor";
355
- import { defaultTx } from "@dxos/react-ui-theme";
356
- import { isNotFalsy as isNotFalsy2 } from "@dxos/util";
357
- var __dxlog_file3 = "/__w/dxos/dxos/packages/plugins/plugin-markdown/src/extensions.tsx";
358
- var useExtensions = ({ document, id, text, settings, selectionManager, viewMode, editorStateStore, previewOptions }) => {
359
- const { dispatchPromise: dispatch } = useIntentDispatcher();
360
- const identity = useIdentity();
361
- const space = getSpace(document) ?? getSpace(text);
362
- const baseExtensions = useMemo3(() => createBaseExtensions({
363
- document,
364
- id,
365
- text,
366
- settings,
367
- selectionManager,
368
- viewMode,
369
- previewOptions,
370
- dispatch
371
- }), [
372
- document,
373
- id,
374
- text,
375
- viewMode,
376
- dispatch,
377
- previewOptions,
378
- settings,
379
- settings.editorInputMode,
380
- settings.folding,
381
- settings.numberedHeadings,
382
- settings.debug,
383
- settings.typewriter,
384
- selectionManager
385
- ]);
386
- const extensionProviders = useCapabilities(MarkdownCapabilities.Extensions);
387
- const pluginExtensions = useMemo3(() => {
388
- if (!document) {
389
- return [];
390
- }
391
- return extensionProviders.flat().reduce((acc, provider) => {
392
- const extension = typeof provider === "function" ? provider({
393
- document
394
- }) : provider;
395
- if (extension) {
396
- acc.push(extension);
397
- }
398
- return acc;
399
- }, []);
400
- }, [
401
- extensionProviders,
402
- document
403
- ]);
404
- return useMemo3(() => [
405
- // NOTE: Data extensions must be first so that automerge is updated before other extensions compute their state.
406
- document && createDataExtensions({
407
- id: document.id,
408
- text: document.content.target && createDocAccessor(document.content.target, [
409
- "content"
410
- ]),
411
- space,
412
- identity
413
- }),
414
- text && id && createDataExtensions({
415
- id,
416
- text: createDocAccessor(text, [
417
- "content"
418
- ]),
419
- space,
420
- identity
421
- }),
422
- selectionState(editorStateStore),
423
- document && listener({
424
- onChange: (text2) => setFallbackName(document, text2)
425
- }),
426
- baseExtensions,
427
- pluginExtensions
428
- ].filter(isNotFalsy2), [
429
- baseExtensions,
430
- pluginExtensions,
431
- document,
432
- document?.content?.target,
433
- text,
434
- id,
435
- space,
436
- identity
437
- ]);
438
- };
439
- var createBaseExtensions = ({ document, id, dispatch, settings, selectionManager, query, viewMode, previewOptions }) => {
440
- const extensions = [
441
- selectionManager && selectionChange(selectionManager),
442
- settings.editorInputMode && InputModeExtensions[settings.editorInputMode],
443
- settings.folding && folding()
444
- ].filter(isNotFalsy2);
445
- if (viewMode !== "source") {
446
- extensions.push(...[
447
- formattingKeymap(),
448
- decorateMarkdown({
449
- selectionChangeDelay: 100,
450
- numberedHeadings: settings.numberedHeadings ? {
451
- from: 2
452
- } : void 0,
453
- // TODO(wittjosiah): For internal links, consider ignoring the link text and rendering the label of the object being linked to.
454
- renderLinkButton: dispatch && (document || id) ? createLinkRenderer((id2) => {
455
- void dispatch(createIntent(LayoutAction2.Open, {
456
- part: "main",
457
- subject: [
458
- id2
459
- ],
460
- options: {
461
- pivotId: document ? fullyQualifiedId(document) : id2
462
- }
463
- }));
464
- }) : void 0
465
- }),
466
- linkTooltip(renderLinkTooltip),
467
- preview(previewOptions)
468
- ]);
469
- }
470
- if (query) {
471
- extensions.push(autocomplete({
472
- onSearch: (text) => {
473
- return query.objects.map((object) => object.name?.length && object.id !== document?.id ? {
474
- label: object.name,
475
- // TODO(burdon): Factor out URL builder.
476
- apply: `[${object.name}](/${fullyQualifiedId(object)})`
477
- } : void 0).filter(isNotFalsy2);
478
- }
479
- }));
480
- }
481
- if (settings.debug) {
482
- const items = settings.typewriter?.split(/[,\n]/) ?? "";
483
- if (items) {
484
- extensions.push(typewriter({
485
- items
486
- }));
487
- }
488
- }
489
- return extensions;
490
- };
491
- var selectionChange = (selectionManager) => {
492
- return EditorView2.updateListener.of(debounceAndThrottle((update) => {
493
- if (update.selectionSet) {
494
- const id = update.state.facet(documentId);
495
- const cursorConverter = update.state.facet(Cursor2.converter);
496
- const selection = update.state.selection;
497
- const ranges = selection.ranges.map((range) => ({
498
- from: cursorConverter.toCursor(range.from),
499
- to: cursorConverter.toCursor(range.to)
500
- })).filter(({ from, to }) => to > from);
501
- selectionManager.updateMultiRange(id, ranges);
502
- }
503
- }, 100));
504
- };
505
- var style = {
506
- hover: "rounded-sm text-primary-500 hover:text-primary-600 dark:text-primary-500 hover:dark:text-primary-400",
507
- icon: "inline-block leading-none mis-1 cursor-pointer"
508
- };
509
- var createLinkRenderer = (onSelectObject) => (el, { url }) => {
510
- const isInternal = url.startsWith("/") || // TODO(wittjosiah): This should probably be parsed out on paste?
511
- url.startsWith(window.location.origin);
512
- const options = isInternal ? {
513
- onClick: () => {
514
- const qualifiedId = url.split("/").at(-1);
515
- invariant3(qualifiedId, "Invalid link format.", {
516
- F: __dxlog_file3,
517
- L: 291,
518
- S: void 0,
519
- A: [
520
- "qualifiedId",
521
- "'Invalid link format.'"
522
- ]
523
- });
524
- onSelectObject(qualifiedId);
525
- }
526
- } : {
527
- href: url,
528
- rel: "noreferrer",
529
- target: "_blank"
530
- };
531
- renderRoot(el, /* @__PURE__ */ React2.createElement("a", {
532
- ...options,
533
- className: style.hover
534
- }, /* @__PURE__ */ React2.createElement(Icon, {
535
- icon: isInternal ? "ph--arrow-square-down--bold" : "ph--arrow-square-out--bold",
536
- size: 4,
537
- classNames: style.icon
538
- })));
539
- };
540
- var renderLinkTooltip = (el, { url }) => {
541
- const web = new URL(url);
542
- renderRoot(el, /* @__PURE__ */ React2.createElement("a", {
543
- href: url,
544
- rel: "noreferrer",
545
- target: "_blank",
546
- className: style.hover
547
- }, web.origin, /* @__PURE__ */ React2.createElement(Icon, {
548
- icon: "ph--arrow-square-out--bold",
549
- size: 4,
550
- classNames: style.icon
551
- })));
552
- };
553
- var renderRoot = (root, node) => {
554
- createRoot(root).render(/* @__PURE__ */ React2.createElement(ThemeProvider, {
555
- tx: defaultTx
556
- }, node));
557
- return root;
558
- };
559
-
560
- // src/components/MarkdownContainer.tsx
561
- var MarkdownContainer = ({ id, role, object, settings, selectionManager, viewMode, editorStateStore, onViewModeChange }) => {
562
- var _effect = _useSignals2();
563
- try {
564
- const { t } = useTranslation2();
565
- const scrollPastEnd = role === "article";
566
- const doc = Obj.instanceOf(Markdown_exports.Document, object) ? object : void 0;
567
- const text = Obj.instanceOf(DataType.Text, object) ? object : void 0;
568
- const [previewBlocks, setPreviewBlocks] = useState([]);
569
- const previewOptions = useMemo4(() => ({
570
- addBlockContainer: (link, el) => {
571
- setPreviewBlocks((prev) => [
572
- ...prev,
573
- {
574
- link,
575
- el
576
- }
577
- ]);
578
- },
579
- removeBlockContainer: (link) => {
580
- setPreviewBlocks((prev) => prev.filter(({ link: prevLink }) => prevLink.ref !== link.ref));
581
- }
582
- }), []);
583
- const extensions = useExtensions({
584
- document: doc,
585
- text,
586
- id,
587
- settings,
588
- selectionManager,
589
- viewMode,
590
- editorStateStore,
591
- previewOptions
592
- });
593
- const manager = usePluginManager();
594
- const resolve = useCallback2((typename) => manager.context.getCapabilities(Capabilities.Metadata).find(({ id: id2 }) => id2 === typename)?.metadata ?? {}, [
595
- manager
596
- ]);
597
- const space = getSpace2(object);
598
- const objectForms = useCapabilities2(SpaceCapabilities.ObjectForm);
599
- const schemaWhiteList = useCapabilities2(ClientCapabilities.SchemaWhiteList);
600
- const filter = useMemo4(() => Filter.or(...objectForms.map((form) => Filter.type(form.objectSchema)), ...schemaWhiteList.flat().map((schema) => Filter.typename(Type.getTypename(schema)))), [
601
- objectForms,
602
- schemaWhiteList
603
- ]);
604
- const onLinkQuery = useCallback2(async (query) => {
605
- const name = query?.startsWith("@") ? query.slice(1).toLowerCase() : query?.toLowerCase() ?? "";
606
- const results = await space?.db.query(Query.select(filter)).run();
607
- const getLabel = (object2) => {
608
- const label = Obj.getLabel(object2);
609
- if (label) {
610
- return label;
611
- }
612
- const type = Obj.getTypename(object2);
613
- const metadata = resolve(type);
614
- return metadata.label?.(object2) || [
615
- "object name placeholder",
616
- {
617
- ns: type,
618
- default: "New object"
619
- }
620
- ];
621
- };
622
- const items = results?.objects.filter((object2) => toLocalizedString2(getLabel(object2), t).toLowerCase().includes(name)).map((object2) => {
623
- const metadata = resolve(Obj.getTypename(object2));
624
- const label = toLocalizedString2(getLabel(object2), t);
625
- return {
626
- id: object2.id,
627
- label,
628
- icon: metadata.icon,
629
- onSelect: (view, head) => {
630
- const link = `[${label}][${Obj.getDXN(object2)}]`;
631
- if (query?.startsWith("@")) {
632
- insertAtLineStart(view, head, `!${link}
633
- `);
634
- } else {
635
- insertAtCursor(view, head, `${link} `);
636
- }
637
- }
638
- };
639
- }) ?? [];
640
- return [
641
- {
642
- id: "echo",
643
- items
644
- }
645
- ];
646
- }, [
647
- filter,
648
- resolve,
649
- space
650
- ]);
651
- const editor = doc ? /* @__PURE__ */ React3.createElement(DocumentEditor, {
652
- id: fullyQualifiedId2(object),
653
- role,
654
- document: doc,
655
- extensions,
656
- viewMode,
657
- settings,
658
- scrollPastEnd,
659
- onViewModeChange,
660
- onLinkQuery: space ? onLinkQuery : void 0
661
- }) : text ? /* @__PURE__ */ React3.createElement(MarkdownEditor, {
662
- id,
663
- role,
664
- initialValue: text.content,
665
- extensions,
666
- viewMode,
667
- toolbar: settings.toolbar,
668
- inputMode: settings.editorInputMode,
669
- scrollPastEnd,
670
- onViewModeChange,
671
- onLinkQuery: space ? onLinkQuery : void 0
672
- }) : (
673
- // TODO(burdon): Normalize with above.
674
- /* @__PURE__ */ React3.createElement(MarkdownEditor, {
675
- id,
676
- role,
677
- initialValue: object.text,
678
- extensions,
679
- viewMode,
680
- toolbar: settings.toolbar,
681
- inputMode: settings.editorInputMode,
682
- scrollPastEnd,
683
- onViewModeChange,
684
- onLinkQuery: space ? onLinkQuery : void 0
685
- })
686
- );
687
- return /* @__PURE__ */ React3.createElement(React3.Fragment, null, editor, previewBlocks.map(({ link, el }) => /* @__PURE__ */ React3.createElement(PreviewBlock, {
688
- key: link.ref,
689
- link,
690
- el
691
- })));
692
- } finally {
693
- _effect.f();
694
- }
695
- };
696
- var PreviewBlock = ({ link, el }) => {
697
- var _effect = _useSignals2();
698
- try {
699
- const echoDXN = useMemo4(() => DXN.parse(link.ref).asEchoDXN(), [
700
- link.ref
701
- ]);
702
- const space = useSpace(echoDXN?.spaceId);
703
- const [subject] = useQuery(space, Query.select(Filter.ids(echoDXN?.echoId ?? "")));
704
- const data = useMemo4(() => ({
705
- subject
706
- }), [
707
- subject
708
- ]);
709
- return /* @__PURE__ */ createPortal(/* @__PURE__ */ React3.createElement(Surface, {
710
- role: "card--transclusion",
711
- data,
712
- limit: 1
713
- }), el);
714
- } finally {
715
- _effect.f();
716
- }
717
- };
718
- var DocumentEditor = ({ id, document: doc, settings, viewMode, ...props }) => {
719
- var _effect = _useSignals2();
720
- try {
721
- const space = getSpace2(doc);
722
- useEffect2(() => {
723
- if (typeof doc.fallbackName === "string") {
724
- return;
725
- }
726
- const fallbackName = doc.content?.target?.content ? getFallbackName(doc.content.target.content) : void 0;
727
- if (fallbackName) {
728
- doc.fallbackName = fallbackName;
729
- }
730
- }, [
731
- doc,
732
- doc.content
733
- ]);
734
- const [upload] = useCapabilities2(Capabilities.FileUploader);
735
- const handleFileUpload = useMemo4(() => {
736
- if (space === void 0 || upload === void 0) {
737
- return void 0;
738
- }
739
- return async (file) => upload(file, space);
740
- }, [
741
- space,
742
- upload
743
- ]);
744
- const { graph } = useAppGraph();
745
- const customActions = useMemo4(() => {
746
- return Rx.make((get) => {
747
- const actions = get(graph.actions(id));
748
- const nodes = actions.filter((action) => action.properties.disposition === "toolbar");
749
- return {
750
- nodes,
751
- edges: nodes.map((node) => ({
752
- source: "root",
753
- target: node.id
754
- }))
755
- };
756
- });
757
- }, [
758
- graph
759
- ]);
760
- return /* @__PURE__ */ React3.createElement(MarkdownEditor, {
761
- id,
762
- initialValue: doc.content?.target?.content,
763
- viewMode,
764
- toolbar: settings.toolbar,
765
- customActions,
766
- inputMode: settings.editorInputMode,
767
- onFileUpload: handleFileUpload,
768
- ...props
769
- });
770
- } finally {
771
- _effect.f();
772
- }
773
- };
774
- var MarkdownContainer_default = MarkdownContainer;
775
- export {
776
- DocumentEditor,
777
- MarkdownContainer,
778
- MarkdownContainer_default as default
779
- };
780
- //# sourceMappingURL=MarkdownContainer-Q6UO7DKT.mjs.map