@dxos/plugin-markdown 0.8.4-main.67995b8 → 0.8.4-main.ae835ea

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