@dxos/plugin-markdown 0.8.4-main.2e9d522 → 0.8.4-main.406dc2a

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 (241) hide show
  1. package/dist/lib/browser/MarkdownCard-AGWOTODZ.mjs +83 -0
  2. package/dist/lib/browser/MarkdownCard-AGWOTODZ.mjs.map +7 -0
  3. package/dist/lib/browser/{MarkdownContainer-F3WEEIBX.mjs → MarkdownContainer-MV2UNAUV.mjs} +295 -322
  4. package/dist/lib/browser/MarkdownContainer-MV2UNAUV.mjs.map +7 -0
  5. package/dist/lib/browser/{anchor-sort-UKJJ7ZNP.mjs → anchor-sort-YWJI3BKT.mjs} +7 -7
  6. package/dist/lib/browser/anchor-sort-YWJI3BKT.mjs.map +7 -0
  7. package/dist/lib/browser/{app-graph-serializer-ICLAF662.mjs → app-graph-serializer-KYDFCUOW.mjs} +13 -14
  8. package/dist/lib/browser/app-graph-serializer-KYDFCUOW.mjs.map +7 -0
  9. package/dist/lib/browser/blueprint-definition-BHRMFZAC.mjs +11 -0
  10. package/dist/lib/browser/blueprint-definition-BHRMFZAC.mjs.map +7 -0
  11. package/dist/lib/browser/{chunk-LFML7LC6.mjs → chunk-6KU5DKP7.mjs} +12 -12
  12. package/dist/lib/browser/chunk-6KU5DKP7.mjs.map +7 -0
  13. package/dist/lib/browser/chunk-HBBEHOP3.mjs +106 -0
  14. package/dist/lib/browser/chunk-HBBEHOP3.mjs.map +7 -0
  15. package/dist/lib/browser/{chunk-LHDCHDBW.mjs → chunk-O6XUPW6S.mjs} +6 -5
  16. package/dist/lib/browser/chunk-O6XUPW6S.mjs.map +7 -0
  17. package/dist/lib/browser/chunk-ODB2PTBP.mjs +28 -0
  18. package/dist/lib/browser/chunk-ODB2PTBP.mjs.map +7 -0
  19. package/dist/lib/browser/chunk-OY6CGPOO.mjs +16 -0
  20. package/dist/lib/browser/chunk-OY6CGPOO.mjs.map +7 -0
  21. package/dist/lib/browser/chunk-XMT6PMU5.mjs +79 -0
  22. package/dist/lib/browser/chunk-XMT6PMU5.mjs.map +7 -0
  23. package/dist/lib/browser/chunk-Z5PDJNBV.mjs +22 -0
  24. package/dist/lib/browser/chunk-Z5PDJNBV.mjs.map +7 -0
  25. package/dist/lib/browser/index.mjs +37 -24
  26. package/dist/lib/browser/index.mjs.map +3 -3
  27. package/dist/lib/browser/intent-resolver-XHVCZZHU.mjs +62 -0
  28. package/dist/lib/browser/intent-resolver-XHVCZZHU.mjs.map +7 -0
  29. package/dist/lib/browser/meta.json +1 -1
  30. package/dist/lib/browser/{react-surface-C3Z423TV.mjs → react-surface-3A2GO3BN.mjs} +55 -46
  31. package/dist/lib/browser/react-surface-3A2GO3BN.mjs.map +7 -0
  32. package/dist/lib/browser/{settings-KN75ZQY6.mjs → settings-XY265Y2Q.mjs} +7 -7
  33. package/dist/lib/browser/settings-XY265Y2Q.mjs.map +7 -0
  34. package/dist/lib/browser/{state-LZWTAS65.mjs → state-6QODXCSZ.mjs} +9 -9
  35. package/dist/lib/browser/state-6QODXCSZ.mjs.map +7 -0
  36. package/dist/lib/browser/toolkit-YA65QX2S.mjs +76 -0
  37. package/dist/lib/browser/toolkit-YA65QX2S.mjs.map +7 -0
  38. package/dist/lib/browser/types/index.mjs +6 -14
  39. package/dist/lib/node-esm/MarkdownCard-B2IWTFOC.mjs +84 -0
  40. package/dist/lib/node-esm/MarkdownCard-B2IWTFOC.mjs.map +7 -0
  41. package/dist/lib/node-esm/{MarkdownContainer-VOUHL6IU.mjs → MarkdownContainer-J2R3DLCQ.mjs} +295 -322
  42. package/dist/lib/node-esm/MarkdownContainer-J2R3DLCQ.mjs.map +7 -0
  43. package/dist/lib/node-esm/{anchor-sort-IPIS5D5B.mjs → anchor-sort-FCRYL2FX.mjs} +7 -7
  44. package/dist/lib/node-esm/anchor-sort-FCRYL2FX.mjs.map +7 -0
  45. package/dist/lib/node-esm/{app-graph-serializer-FLBXQKKR.mjs → app-graph-serializer-FAUQM3BH.mjs} +13 -14
  46. package/dist/lib/node-esm/app-graph-serializer-FAUQM3BH.mjs.map +7 -0
  47. package/dist/lib/node-esm/blueprint-definition-XYFKMIDR.mjs +12 -0
  48. package/dist/lib/node-esm/blueprint-definition-XYFKMIDR.mjs.map +7 -0
  49. package/dist/lib/node-esm/chunk-7RDNIMTF.mjs +24 -0
  50. package/dist/lib/node-esm/chunk-7RDNIMTF.mjs.map +7 -0
  51. package/dist/lib/node-esm/{chunk-ACFGXH2K.mjs → chunk-CB2R4YIY.mjs} +5 -5
  52. package/dist/lib/node-esm/chunk-CB2R4YIY.mjs.map +7 -0
  53. package/dist/lib/node-esm/chunk-FVI7LPC3.mjs +107 -0
  54. package/dist/lib/node-esm/chunk-FVI7LPC3.mjs.map +7 -0
  55. package/dist/lib/node-esm/chunk-FWZKC6X5.mjs +80 -0
  56. package/dist/lib/node-esm/chunk-FWZKC6X5.mjs.map +7 -0
  57. package/dist/lib/node-esm/chunk-VCG2U522.mjs +29 -0
  58. package/dist/lib/node-esm/chunk-VCG2U522.mjs.map +7 -0
  59. package/dist/lib/node-esm/{chunk-VIR2ABYE.mjs → chunk-XO3IEQJE.mjs} +6 -5
  60. package/dist/lib/node-esm/chunk-XO3IEQJE.mjs.map +7 -0
  61. package/dist/lib/node-esm/{chunk-CWTFQSN7.mjs → chunk-ZBXV4ON7.mjs} +12 -12
  62. package/dist/lib/node-esm/chunk-ZBXV4ON7.mjs.map +7 -0
  63. package/dist/lib/node-esm/index.mjs +37 -24
  64. package/dist/lib/node-esm/index.mjs.map +3 -3
  65. package/dist/lib/node-esm/intent-resolver-7A2EXGZQ.mjs +63 -0
  66. package/dist/lib/node-esm/intent-resolver-7A2EXGZQ.mjs.map +7 -0
  67. package/dist/lib/node-esm/meta.json +1 -1
  68. package/dist/lib/node-esm/{react-surface-TTTBYNI2.mjs → react-surface-RCLL5WVQ.mjs} +55 -46
  69. package/dist/lib/node-esm/react-surface-RCLL5WVQ.mjs.map +7 -0
  70. package/dist/lib/node-esm/{settings-KVP7TVX7.mjs → settings-H3UDD3KO.mjs} +7 -7
  71. package/dist/lib/node-esm/settings-H3UDD3KO.mjs.map +7 -0
  72. package/dist/lib/node-esm/{state-NW3W4JCQ.mjs → state-W3PECOJX.mjs} +9 -9
  73. package/dist/lib/node-esm/state-W3PECOJX.mjs.map +7 -0
  74. package/dist/lib/node-esm/toolkit-HSIKUGNK.mjs +77 -0
  75. package/dist/lib/node-esm/toolkit-HSIKUGNK.mjs.map +7 -0
  76. package/dist/lib/node-esm/types/index.mjs +6 -14
  77. package/dist/types/src/MarkdownPlugin.d.ts +1 -1
  78. package/dist/types/src/MarkdownPlugin.d.ts.map +1 -1
  79. package/dist/types/src/capabilities/anchor-sort.d.ts +2 -2
  80. package/dist/types/src/capabilities/app-graph-serializer.d.ts +1 -1
  81. package/dist/types/src/capabilities/app-graph-serializer.d.ts.map +1 -1
  82. package/dist/types/src/capabilities/artifact-definition.d.ts +1 -9
  83. package/dist/types/src/capabilities/artifact-definition.d.ts.map +1 -1
  84. package/dist/types/src/capabilities/blueprint-definition.d.ts +5 -0
  85. package/dist/types/src/capabilities/blueprint-definition.d.ts.map +1 -0
  86. package/dist/types/src/capabilities/capabilities.d.ts +1 -1
  87. package/dist/types/src/capabilities/capabilities.d.ts.map +1 -1
  88. package/dist/types/src/capabilities/index.d.ts +12 -10
  89. package/dist/types/src/capabilities/index.d.ts.map +1 -1
  90. package/dist/types/src/capabilities/intent-resolver.d.ts +1 -1
  91. package/dist/types/src/capabilities/intent-resolver.d.ts.map +1 -1
  92. package/dist/types/src/capabilities/react-surface.d.ts +1 -1
  93. package/dist/types/src/capabilities/react-surface.d.ts.map +1 -1
  94. package/dist/types/src/capabilities/settings.d.ts +1 -1
  95. package/dist/types/src/capabilities/state.d.ts +2 -2
  96. package/dist/types/src/capabilities/state.d.ts.map +1 -1
  97. package/dist/types/src/capabilities/toolkit.d.ts +4 -0
  98. package/dist/types/src/capabilities/toolkit.d.ts.map +1 -0
  99. package/dist/types/src/components/MarkdownCard/MarkdownCard.d.ts +7 -0
  100. package/dist/types/src/components/MarkdownCard/MarkdownCard.d.ts.map +1 -0
  101. package/dist/types/src/components/MarkdownCard/MarkdownCard.stories.d.ts +9 -0
  102. package/dist/types/src/components/MarkdownCard/MarkdownCard.stories.d.ts.map +1 -0
  103. package/dist/types/src/components/MarkdownCard/index.d.ts +4 -0
  104. package/dist/types/src/components/MarkdownCard/index.d.ts.map +1 -0
  105. package/dist/types/src/components/MarkdownContainer.d.ts +5 -5
  106. package/dist/types/src/components/MarkdownContainer.d.ts.map +1 -1
  107. package/dist/types/src/components/MarkdownContainer.stories.d.ts +51 -5
  108. package/dist/types/src/components/MarkdownContainer.stories.d.ts.map +1 -1
  109. package/dist/types/src/components/MarkdownEditor/MarkdownEditor.d.ts +6 -6
  110. package/dist/types/src/components/MarkdownEditor/MarkdownEditor.d.ts.map +1 -1
  111. package/dist/types/src/components/MarkdownEditor/MarkdownEditor.stories.d.ts +111 -13
  112. package/dist/types/src/components/MarkdownEditor/MarkdownEditor.stories.d.ts.map +1 -1
  113. package/dist/types/src/components/MarkdownSettings/MarkdownSettings.d.ts +2 -2
  114. package/dist/types/src/components/MarkdownSettings/MarkdownSettings.d.ts.map +1 -1
  115. package/dist/types/src/components/Suggestions.stories.d.ts +3 -4
  116. package/dist/types/src/components/Suggestions.stories.d.ts.map +1 -1
  117. package/dist/types/src/components/Toolbar.stories.d.ts +45 -8
  118. package/dist/types/src/components/Toolbar.stories.d.ts.map +1 -1
  119. package/dist/types/src/components/index.d.ts +1 -1
  120. package/dist/types/src/components/index.d.ts.map +1 -1
  121. package/dist/types/src/events.d.ts.map +1 -1
  122. package/dist/types/src/extensions.d.ts +3 -5
  123. package/dist/types/src/extensions.d.ts.map +1 -1
  124. package/dist/types/src/functions/diff.d.ts +6 -0
  125. package/dist/types/src/functions/diff.d.ts.map +1 -0
  126. package/dist/types/src/functions/index.d.ts +3 -0
  127. package/dist/types/src/functions/index.d.ts.map +1 -0
  128. package/dist/types/src/functions/open.d.ts +7 -0
  129. package/dist/types/src/functions/open.d.ts.map +1 -0
  130. package/dist/types/src/hooks/useSelectCurrentThread.d.ts +1 -1
  131. package/dist/types/src/hooks/useSelectCurrentThread.d.ts.map +1 -1
  132. package/dist/types/src/index.d.ts +2 -1
  133. package/dist/types/src/index.d.ts.map +1 -1
  134. package/dist/types/src/meta.d.ts +0 -1
  135. package/dist/types/src/meta.d.ts.map +1 -1
  136. package/dist/types/src/translations.d.ts +3 -2
  137. package/dist/types/src/translations.d.ts.map +1 -1
  138. package/dist/types/src/types/Markdown.d.ts +45 -0
  139. package/dist/types/src/types/Markdown.d.ts.map +1 -0
  140. package/dist/types/src/types/MarkdownAction.d.ts +34 -0
  141. package/dist/types/src/types/MarkdownAction.d.ts.map +1 -0
  142. package/dist/types/src/types/index.d.ts +2 -1
  143. package/dist/types/src/types/index.d.ts.map +1 -1
  144. package/dist/types/src/types/types.d.ts +3 -59
  145. package/dist/types/src/types/types.d.ts.map +1 -1
  146. package/dist/types/src/util.d.ts +13 -4
  147. package/dist/types/src/util.d.ts.map +1 -1
  148. package/dist/types/tsconfig.tsbuildinfo +1 -1
  149. package/package.json +57 -52
  150. package/src/MarkdownPlugin.tsx +103 -95
  151. package/src/capabilities/anchor-sort.ts +3 -3
  152. package/src/capabilities/app-graph-serializer.ts +9 -7
  153. package/src/capabilities/artifact-definition.ts +20 -24
  154. package/src/capabilities/blueprint-definition.ts +39 -0
  155. package/src/capabilities/capabilities.ts +5 -4
  156. package/src/capabilities/index.ts +3 -1
  157. package/src/capabilities/intent-resolver.ts +16 -21
  158. package/src/capabilities/react-surface.tsx +21 -19
  159. package/src/capabilities/settings.ts +3 -3
  160. package/src/capabilities/state.ts +8 -8
  161. package/src/capabilities/toolkit.ts +49 -0
  162. package/src/components/MarkdownCard/MarkdownCard.stories.tsx +76 -0
  163. package/src/components/MarkdownCard/MarkdownCard.tsx +76 -0
  164. package/src/components/MarkdownCard/index.ts +9 -0
  165. package/src/components/MarkdownContainer.stories.tsx +47 -41
  166. package/src/components/MarkdownContainer.tsx +26 -23
  167. package/src/components/MarkdownEditor/MarkdownEditor.stories.tsx +21 -17
  168. package/src/components/MarkdownEditor/MarkdownEditor.tsx +52 -52
  169. package/src/components/MarkdownSettings/MarkdownSettings.tsx +81 -78
  170. package/src/components/Suggestions.stories.tsx +49 -51
  171. package/src/components/Toolbar.stories.tsx +23 -18
  172. package/src/components/index.ts +1 -1
  173. package/src/events.ts +2 -2
  174. package/src/extensions.tsx +13 -41
  175. package/src/functions/diff.ts +37 -0
  176. package/src/functions/index.ts +6 -0
  177. package/src/functions/open.ts +32 -0
  178. package/src/hooks/useSelectCurrentThread.tsx +5 -5
  179. package/src/index.ts +4 -1
  180. package/src/meta.ts +7 -8
  181. package/src/translations.ts +3 -2
  182. package/src/types/Markdown.ts +58 -0
  183. package/src/types/MarkdownAction.ts +29 -0
  184. package/src/types/index.ts +2 -1
  185. package/src/types/types.ts +6 -50
  186. package/src/util.tsx +28 -8
  187. package/dist/lib/browser/MarkdownContainer-F3WEEIBX.mjs.map +0 -7
  188. package/dist/lib/browser/MarkdownPreview-S3C7CGAV.mjs +0 -80
  189. package/dist/lib/browser/MarkdownPreview-S3C7CGAV.mjs.map +0 -7
  190. package/dist/lib/browser/anchor-sort-UKJJ7ZNP.mjs.map +0 -7
  191. package/dist/lib/browser/app-graph-serializer-ICLAF662.mjs.map +0 -7
  192. package/dist/lib/browser/artifact-definition-R2YYWOPN.mjs +0 -145
  193. package/dist/lib/browser/artifact-definition-R2YYWOPN.mjs.map +0 -7
  194. package/dist/lib/browser/chunk-777RIED6.mjs +0 -16
  195. package/dist/lib/browser/chunk-777RIED6.mjs.map +0 -7
  196. package/dist/lib/browser/chunk-EPTSAJZM.mjs +0 -22
  197. package/dist/lib/browser/chunk-EPTSAJZM.mjs.map +0 -7
  198. package/dist/lib/browser/chunk-LFML7LC6.mjs.map +0 -7
  199. package/dist/lib/browser/chunk-LHDCHDBW.mjs.map +0 -7
  200. package/dist/lib/browser/chunk-PHTD5DTR.mjs +0 -20
  201. package/dist/lib/browser/chunk-PHTD5DTR.mjs.map +0 -7
  202. package/dist/lib/browser/chunk-UANWRJZU.mjs +0 -79
  203. package/dist/lib/browser/chunk-UANWRJZU.mjs.map +0 -7
  204. package/dist/lib/browser/intent-resolver-3MXYO3MW.mjs +0 -64
  205. package/dist/lib/browser/intent-resolver-3MXYO3MW.mjs.map +0 -7
  206. package/dist/lib/browser/react-surface-C3Z423TV.mjs.map +0 -7
  207. package/dist/lib/browser/settings-KN75ZQY6.mjs.map +0 -7
  208. package/dist/lib/browser/state-LZWTAS65.mjs.map +0 -7
  209. package/dist/lib/node-esm/MarkdownContainer-VOUHL6IU.mjs.map +0 -7
  210. package/dist/lib/node-esm/MarkdownPreview-77UFEWXT.mjs +0 -81
  211. package/dist/lib/node-esm/MarkdownPreview-77UFEWXT.mjs.map +0 -7
  212. package/dist/lib/node-esm/anchor-sort-IPIS5D5B.mjs.map +0 -7
  213. package/dist/lib/node-esm/app-graph-serializer-FLBXQKKR.mjs.map +0 -7
  214. package/dist/lib/node-esm/artifact-definition-MLTAY4LK.mjs +0 -146
  215. package/dist/lib/node-esm/artifact-definition-MLTAY4LK.mjs.map +0 -7
  216. package/dist/lib/node-esm/chunk-7X6TPTJK.mjs +0 -22
  217. package/dist/lib/node-esm/chunk-7X6TPTJK.mjs.map +0 -7
  218. package/dist/lib/node-esm/chunk-ACFGXH2K.mjs.map +0 -7
  219. package/dist/lib/node-esm/chunk-CWTFQSN7.mjs.map +0 -7
  220. package/dist/lib/node-esm/chunk-CXG7GMYP.mjs +0 -24
  221. package/dist/lib/node-esm/chunk-CXG7GMYP.mjs.map +0 -7
  222. package/dist/lib/node-esm/chunk-JEEQLO7C.mjs +0 -80
  223. package/dist/lib/node-esm/chunk-JEEQLO7C.mjs.map +0 -7
  224. package/dist/lib/node-esm/chunk-VIR2ABYE.mjs.map +0 -7
  225. package/dist/lib/node-esm/intent-resolver-BZYWV53A.mjs +0 -65
  226. package/dist/lib/node-esm/intent-resolver-BZYWV53A.mjs.map +0 -7
  227. package/dist/lib/node-esm/react-surface-TTTBYNI2.mjs.map +0 -7
  228. package/dist/lib/node-esm/settings-KVP7TVX7.mjs.map +0 -7
  229. package/dist/lib/node-esm/state-NW3W4JCQ.mjs.map +0 -7
  230. package/dist/types/src/components/MarkdownPreview/MarkdownPreview.d.ts +0 -6
  231. package/dist/types/src/components/MarkdownPreview/MarkdownPreview.d.ts.map +0 -1
  232. package/dist/types/src/components/MarkdownPreview/MarkdownPreview.stories.d.ts +0 -42
  233. package/dist/types/src/components/MarkdownPreview/MarkdownPreview.stories.d.ts.map +0 -1
  234. package/dist/types/src/components/MarkdownPreview/index.d.ts +0 -4
  235. package/dist/types/src/components/MarkdownPreview/index.d.ts.map +0 -1
  236. package/dist/types/src/types/schema.d.ts +0 -35
  237. package/dist/types/src/types/schema.d.ts.map +0 -1
  238. package/src/components/MarkdownPreview/MarkdownPreview.stories.tsx +0 -81
  239. package/src/components/MarkdownPreview/MarkdownPreview.tsx +0 -73
  240. package/src/components/MarkdownPreview/index.ts +0 -9
  241. package/src/types/schema.ts +0 -39
@@ -1,17 +1,18 @@
1
- import "./chunk-PHTD5DTR.mjs";
1
+ import "./chunk-Z5PDJNBV.mjs";
2
+ import "./chunk-HBBEHOP3.mjs";
2
3
  import {
3
4
  MarkdownCapabilities
4
- } from "./chunk-777RIED6.mjs";
5
+ } from "./chunk-OY6CGPOO.mjs";
5
6
  import {
6
7
  getFallbackName,
7
8
  setFallbackName
8
- } from "./chunk-LFML7LC6.mjs";
9
+ } from "./chunk-6KU5DKP7.mjs";
9
10
  import {
10
- DocumentType
11
- } from "./chunk-UANWRJZU.mjs";
11
+ Markdown_exports
12
+ } from "./chunk-XMT6PMU5.mjs";
12
13
  import {
13
- MARKDOWN_PLUGIN
14
- } from "./chunk-EPTSAJZM.mjs";
14
+ meta
15
+ } from "./chunk-ODB2PTBP.mjs";
15
16
 
16
17
  // src/components/MarkdownContainer.tsx
17
18
  import { useSignals as _useSignals2 } from "@preact-signals/safe-react/tracking";
@@ -22,42 +23,247 @@ import { Capabilities, Surface, useAppGraph, useCapabilities as useCapabilities2
22
23
  import { DXN, Filter, Obj, Query, Type } from "@dxos/echo";
23
24
  import { ClientCapabilities } from "@dxos/plugin-client";
24
25
  import { SpaceCapabilities } from "@dxos/plugin-space";
25
- import { fullyQualifiedId as fullyQualifiedId2, getSpace as getSpace2, useQuery, useSpace } from "@dxos/react-client/echo";
26
+ import { useClient } from "@dxos/react-client";
27
+ import { fullyQualifiedId as fullyQualifiedId2, getSpace as getSpace2 } from "@dxos/react-client/echo";
26
28
  import { toLocalizedString as toLocalizedString2, useTranslation as useTranslation2 } from "@dxos/react-ui";
27
29
  import { insertAtCursor, insertAtLineStart } from "@dxos/react-ui-editor";
28
30
  import { DataType } from "@dxos/schema";
29
31
 
32
+ // src/extensions.tsx
33
+ import React, { useMemo } from "react";
34
+ import { createRoot } from "react-dom/client";
35
+ import { LayoutAction, createIntent, useCapabilities, useIntentDispatcher } from "@dxos/app-framework";
36
+ import { debounceAndThrottle } from "@dxos/async";
37
+ import { invariant } from "@dxos/invariant";
38
+ import { createDocAccessor, fullyQualifiedId, getSpace } from "@dxos/react-client/echo";
39
+ import { useIdentity } from "@dxos/react-client/halo";
40
+ import { Icon, ThemeProvider } from "@dxos/react-ui";
41
+ import { Cursor, EditorView, InputModeExtensions, createDataExtensions, decorateMarkdown, documentId, folding, formattingKeymap, linkTooltip, listener, preview, selectionState, typewriter } from "@dxos/react-ui-editor";
42
+ import { defaultTx } from "@dxos/react-ui-theme";
43
+ import { isTruthy } from "@dxos/util";
44
+ var __dxlog_file = "/__w/dxos/dxos/packages/plugins/plugin-markdown/src/extensions.tsx";
45
+ var useExtensions = ({ document, id, text, settings, selectionManager, viewMode, editorStateStore, previewOptions }) => {
46
+ const { dispatchPromise: dispatch } = useIntentDispatcher();
47
+ const identity = useIdentity();
48
+ const space = getSpace(document) ?? getSpace(text);
49
+ const baseExtensions = useMemo(() => createBaseExtensions({
50
+ document,
51
+ id,
52
+ text,
53
+ settings,
54
+ selectionManager,
55
+ viewMode,
56
+ previewOptions,
57
+ dispatch
58
+ }), [
59
+ document,
60
+ id,
61
+ text,
62
+ viewMode,
63
+ dispatch,
64
+ previewOptions,
65
+ settings,
66
+ settings.editorInputMode,
67
+ settings.folding,
68
+ settings.numberedHeadings,
69
+ settings.debug,
70
+ settings.typewriter,
71
+ selectionManager
72
+ ]);
73
+ const extensionProviders = useCapabilities(MarkdownCapabilities.Extensions);
74
+ const pluginExtensions = useMemo(() => {
75
+ if (!document) {
76
+ return [];
77
+ }
78
+ return extensionProviders.flat().reduce((acc, provider) => {
79
+ const extension = typeof provider === "function" ? provider({
80
+ document
81
+ }) : provider;
82
+ if (extension) {
83
+ acc.push(extension);
84
+ }
85
+ return acc;
86
+ }, []);
87
+ }, [
88
+ extensionProviders,
89
+ document
90
+ ]);
91
+ return useMemo(() => [
92
+ // NOTE: Data extensions must be first so that automerge is updated before other extensions compute their state.
93
+ document && createDataExtensions({
94
+ id: document.id,
95
+ text: document.content.target && createDocAccessor(document.content.target, [
96
+ "content"
97
+ ]),
98
+ space,
99
+ identity
100
+ }),
101
+ text && id && createDataExtensions({
102
+ id,
103
+ text: createDocAccessor(text, [
104
+ "content"
105
+ ]),
106
+ space,
107
+ identity
108
+ }),
109
+ selectionState(editorStateStore),
110
+ document && listener({
111
+ onChange: (text2) => setFallbackName(document, text2)
112
+ }),
113
+ baseExtensions,
114
+ pluginExtensions
115
+ ].filter(isTruthy), [
116
+ baseExtensions,
117
+ pluginExtensions,
118
+ document,
119
+ document?.content?.target,
120
+ text,
121
+ id,
122
+ space,
123
+ identity
124
+ ]);
125
+ };
126
+ var createBaseExtensions = ({ document, id, dispatch, settings, selectionManager, viewMode, previewOptions }) => {
127
+ const extensions = [
128
+ selectionManager && selectionChange(selectionManager),
129
+ settings.editorInputMode && InputModeExtensions[settings.editorInputMode],
130
+ settings.folding && folding()
131
+ ].filter(isTruthy);
132
+ if (viewMode !== "source") {
133
+ extensions.push(...[
134
+ formattingKeymap(),
135
+ decorateMarkdown({
136
+ selectionChangeDelay: 100,
137
+ numberedHeadings: settings.numberedHeadings ? {
138
+ from: 2
139
+ } : void 0,
140
+ // TODO(wittjosiah): For internal links, consider ignoring the link text and rendering the label of the object being linked to.
141
+ renderLinkButton: dispatch && (document || id) ? createLinkRenderer((id2) => {
142
+ void dispatch(createIntent(LayoutAction.Open, {
143
+ part: "main",
144
+ subject: [
145
+ id2
146
+ ],
147
+ options: {
148
+ pivotId: document ? fullyQualifiedId(document) : id2
149
+ }
150
+ }));
151
+ }) : void 0
152
+ }),
153
+ linkTooltip(renderLinkTooltip),
154
+ preview(previewOptions)
155
+ ]);
156
+ }
157
+ if (settings.debug) {
158
+ const items = settings.typewriter?.split(/[,\n]/) ?? "";
159
+ if (items) {
160
+ extensions.push(typewriter({
161
+ items
162
+ }));
163
+ }
164
+ }
165
+ return extensions;
166
+ };
167
+ var selectionChange = (selectionManager) => {
168
+ return EditorView.updateListener.of(debounceAndThrottle((update) => {
169
+ if (update.selectionSet) {
170
+ const id = update.state.facet(documentId);
171
+ const cursorConverter = update.state.facet(Cursor.converter);
172
+ const selection = update.state.selection;
173
+ const ranges = selection.ranges.map((range) => ({
174
+ from: cursorConverter.toCursor(range.from),
175
+ to: cursorConverter.toCursor(range.to)
176
+ })).filter(({ from, to }) => to > from);
177
+ selectionManager.updateMultiRange(id, ranges);
178
+ }
179
+ }, 100));
180
+ };
181
+ var style = {
182
+ hover: "rounded-sm text-primary-500 hover:text-primary-600 dark:text-primary-500 hover:dark:text-primary-400",
183
+ icon: "inline-block leading-none mis-1 cursor-pointer"
184
+ };
185
+ var createLinkRenderer = (onSelectObject) => (el, { url }) => {
186
+ const isInternal = url.startsWith("/") || // TODO(wittjosiah): This should probably be parsed out on paste?
187
+ url.startsWith(window.location.origin);
188
+ const options = isInternal ? {
189
+ onClick: () => {
190
+ const qualifiedId = url.split("/").at(-1);
191
+ invariant(qualifiedId, "Invalid link format.", {
192
+ F: __dxlog_file,
193
+ L: 263,
194
+ S: void 0,
195
+ A: [
196
+ "qualifiedId",
197
+ "'Invalid link format.'"
198
+ ]
199
+ });
200
+ onSelectObject(qualifiedId);
201
+ }
202
+ } : {
203
+ href: url,
204
+ rel: "noreferrer",
205
+ target: "_blank"
206
+ };
207
+ renderRoot(el, /* @__PURE__ */ React.createElement("a", {
208
+ ...options,
209
+ className: style.hover
210
+ }, /* @__PURE__ */ React.createElement(Icon, {
211
+ icon: isInternal ? "ph--arrow-square-down--bold" : "ph--arrow-square-out--bold",
212
+ size: 4,
213
+ classNames: style.icon
214
+ })));
215
+ };
216
+ var renderLinkTooltip = (el, { url }) => {
217
+ const web = new URL(url);
218
+ renderRoot(el, /* @__PURE__ */ React.createElement("a", {
219
+ href: url,
220
+ rel: "noreferrer",
221
+ target: "_blank",
222
+ className: style.hover
223
+ }, web.origin, /* @__PURE__ */ React.createElement(Icon, {
224
+ icon: "ph--arrow-square-out--bold",
225
+ size: 4,
226
+ classNames: style.icon
227
+ })));
228
+ };
229
+ var renderRoot = (root, node) => {
230
+ createRoot(root).render(/* @__PURE__ */ React.createElement(ThemeProvider, {
231
+ tx: defaultTx
232
+ }, node));
233
+ return root;
234
+ };
235
+
30
236
  // src/components/MarkdownEditor/MarkdownEditor.tsx
31
237
  import { useSignals as _useSignals } from "@preact-signals/safe-react/tracking";
32
- import React, { forwardRef, useMemo as useMemo2, useEffect, useCallback, useImperativeHandle, useRef } from "react";
238
+ import React2, { forwardRef, useCallback, useEffect, useImperativeHandle, useMemo as useMemo3, useRef } from "react";
33
239
  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";
240
+ import { invariant as invariant3 } from "@dxos/invariant";
241
+ import { Domino, toLocalizedString, useThemeContext, useTranslation } from "@dxos/react-ui";
242
+ import { EditorToolbar, PopoverMenuProvider, addLink, createBasicExtensions, createMarkdownExtensions, createThemeExtensions, dropFile, editorGutter, editorSlots, filterMenuGroups, formattingCommands, linkSlashCommands, processEditorPayload, stackItemContentEditorClassNames, useEditorToolbarState, useFormattingState, usePopoverMenu, useTextEditor } from "@dxos/react-ui-editor";
37
243
  import { StackItem } from "@dxos/react-ui-stack";
38
- import { isNotFalsy, isNonNullable } from "@dxos/util";
244
+ import { isNonNullable, isTruthy as isTruthy2 } from "@dxos/util";
39
245
 
40
246
  // 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";
247
+ import { EditorView as EditorView2 } from "@codemirror/view";
248
+ import * as Schema from "effect/Schema";
249
+ import { useMemo as useMemo2 } from "react";
250
+ import { LayoutAction as LayoutAction2, createResolver, useIntentResolver } from "@dxos/app-framework";
251
+ import { invariant as invariant2 } from "@dxos/invariant";
252
+ import { Cursor as Cursor2, setSelection } from "@dxos/react-ui-editor";
253
+ var __dxlog_file2 = "/__w/dxos/dxos/packages/plugins/plugin-markdown/src/hooks/useSelectCurrentThread.tsx";
48
254
  var useSelectCurrentThread = (editorView, documentId2) => {
49
- const scrollIntoViewResolver = useMemo(() => createResolver({
50
- intent: LayoutAction.UpdateLayout,
255
+ const scrollIntoViewResolver = useMemo2(() => createResolver({
256
+ intent: LayoutAction2.UpdateLayout,
51
257
  position: "hoist",
52
258
  filter: (data) => {
53
- if (!Schema.is(LayoutAction.ScrollIntoView.fields.input)(data)) {
259
+ if (!Schema.is(LayoutAction2.ScrollIntoView.fields.input)(data)) {
54
260
  return false;
55
261
  }
56
262
  return !!editorView && data.subject === documentId2 && !!data.options?.cursor;
57
263
  },
58
264
  resolve: ({ options: { cursor } }) => {
59
- invariant(editorView, "Editor view is not defined.", {
60
- F: __dxlog_file,
265
+ invariant2(editorView, "Editor view is not defined.", {
266
+ F: __dxlog_file2,
61
267
  L: 32,
62
268
  S: void 0,
63
269
  A: [
@@ -65,14 +271,14 @@ var useSelectCurrentThread = (editorView, documentId2) => {
65
271
  "'Editor view is not defined.'"
66
272
  ]
67
273
  });
68
- const range = Cursor.getRangeFromCursor(editorView.state, cursor);
274
+ const range = Cursor2.getRangeFromCursor(editorView.state, cursor);
69
275
  if (range) {
70
276
  const selection = editorView.state.selection.main.from !== range.from ? {
71
277
  anchor: range.from
72
278
  } : void 0;
73
279
  const effects = [
74
280
  // NOTE: This does not use the DOM scrollIntoView function.
75
- EditorView.scrollIntoView(range.from, {
281
+ EditorView2.scrollIntoView(range.from, {
76
282
  y: "start",
77
283
  yMargin: 96
78
284
  })
@@ -94,33 +300,35 @@ var useSelectCurrentThread = (editorView, documentId2) => {
94
300
  documentId2,
95
301
  editorView
96
302
  ]);
97
- useIntentResolver(MARKDOWN_PLUGIN, scrollIntoViewResolver);
303
+ useIntentResolver(meta.id, scrollIntoViewResolver);
98
304
  };
99
305
 
100
306
  // 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 }) => {
307
+ var __dxlog_file3 = "/__w/dxos/dxos/packages/plugins/plugin-markdown/src/components/MarkdownEditor/MarkdownEditor.tsx";
308
+ var MarkdownEditor = ({ extensions: extensionsParam, slashCommandGroups, onLinkQuery, ...props }) => {
103
309
  var _effect = _useSignals();
104
310
  try {
105
311
  const { t } = useTranslation();
106
- const viewRef = useRef();
107
- const getMenu = useCallback((trigger, query) => {
312
+ const viewRef = useRef(null);
313
+ const getMenu = useCallback(({ text, trigger }) => {
108
314
  switch (trigger) {
109
- case "@":
110
- return onLinkQuery?.(query) ?? [];
315
+ case "@": {
316
+ return onLinkQuery?.(text) ?? [];
317
+ }
111
318
  case "/":
112
- default:
113
- return filterItems([
114
- coreSlashCommands,
319
+ default: {
320
+ return filterMenuGroups([
321
+ formattingCommands,
115
322
  linkSlashCommands,
116
323
  ...slashCommandGroups ?? []
117
- ], (item) => query ? toLocalizedString(item.label, t).toLowerCase().includes(query.toLowerCase()) : true);
324
+ ], (item) => text ? toLocalizedString(item.label, t).toLowerCase().includes(text.toLowerCase()) : true);
325
+ }
118
326
  }
119
327
  }, [
120
328
  onLinkQuery,
121
329
  slashCommandGroups
122
330
  ]);
123
- const options = useMemo2(() => {
331
+ const options = useMemo3(() => {
124
332
  const trigger = onLinkQuery ? [
125
333
  "/",
126
334
  "@"
@@ -132,45 +340,30 @@ var MarkdownEditor = ({ extensions: _extensions, slashCommandGroups, onLinkQuery
132
340
  trigger,
133
341
  placeholder: {
134
342
  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
- }
343
+ content: () => Domino.of("div").children(Domino.of("span").text("Press"), ...trigger.map((text) => Domino.of("span").classNames("mx-1 px-1.5 pt-[1px] pb-[2px] border border-separator rounded-sm").text(text)), Domino.of("span").text("for commands.")).build()
149
344
  },
150
345
  getMenu
151
346
  };
152
347
  }, [
348
+ onLinkQuery,
153
349
  getMenu
154
350
  ]);
155
- const { commandMenu, groupsRef, currentItem, onSelect, ...refPopoverProps } = useCommandMenu(options);
156
- const extensions = useMemo2(() => [
157
- _extensions,
158
- commandMenu
159
- ].filter(isNotFalsy), [
160
- _extensions,
161
- commandMenu
351
+ const { groupsRef, extension, ...commandMenuProps } = usePopoverMenu(options);
352
+ const extensions = useMemo3(() => [
353
+ extensionsParam,
354
+ extension
355
+ ].filter(isTruthy2), [
356
+ extensionsParam,
357
+ extension
162
358
  ]);
163
- return /* @__PURE__ */ React.createElement(RefPopover, {
164
- modal: false,
165
- ...refPopoverProps
166
- }, /* @__PURE__ */ React.createElement(MarkdownEditorImpl, {
359
+ return /* @__PURE__ */ React2.createElement(PopoverMenuProvider, {
360
+ view: viewRef.current,
361
+ groups: groupsRef.current,
362
+ ...commandMenuProps
363
+ }, /* @__PURE__ */ React2.createElement(MarkdownEditorImpl, {
167
364
  ref: viewRef,
168
365
  ...props,
169
366
  extensions
170
- }), /* @__PURE__ */ React.createElement(CommandMenu, {
171
- groups: groupsRef.current,
172
- currentItem,
173
- onSelect
174
367
  }));
175
368
  } finally {
176
369
  _effect.f();
@@ -179,16 +372,16 @@ var MarkdownEditor = ({ extensions: _extensions, slashCommandGroups, onLinkQuery
179
372
  var MarkdownEditorImpl = /* @__PURE__ */ forwardRef(({ id, role = "article", initialValue, customActions, editorStateStore, extensions, extensionProviders, scrollPastEnd, toolbar, viewMode, onFileUpload, onViewModeChange }, forwardedRef) => {
180
373
  var _effect = _useSignals();
181
374
  try {
182
- const { t } = useTranslation(MARKDOWN_PLUGIN);
375
+ const { t } = useTranslation(meta.id);
183
376
  const { themeMode } = useThemeContext();
184
377
  const toolbarState = useEditorToolbarState({
185
378
  viewMode
186
379
  });
187
380
  const formattingObserver = useFormattingState(toolbarState);
188
- const { scrollTo, selection } = useMemo2(() => editorStateStore?.getState(id) ?? {}, [
381
+ const { scrollTo, selection } = useMemo3(() => editorStateStore?.getState(id) ?? {}, [
189
382
  id
190
383
  ]);
191
- const providerExtensions = useMemo2(() => extensionProviders?.flatMap((provider) => provider({})).filter(isNonNullable), [
384
+ const providerExtensions = useMemo3(() => extensionProviders?.flatMap((provider) => provider({})).filter(isNonNullable), [
192
385
  extensionProviders
193
386
  ]);
194
387
  const handleDrop = async (view, { files }) => {
@@ -208,11 +401,10 @@ var MarkdownEditorImpl = /* @__PURE__ */ forwardRef(({ id, role = "article", ini
208
401
  createBasicExtensions({
209
402
  readOnly: viewMode === "readonly",
210
403
  placeholder: t("editor placeholder"),
211
- scrollPastEnd: role === "section" ? false : scrollPastEnd
212
- }),
213
- createMarkdownExtensions({
214
- themeMode
404
+ scrollPastEnd: role === "section" ? false : scrollPastEnd,
405
+ search: true
215
406
  }),
407
+ createMarkdownExtensions(),
216
408
  createThemeExtensions({
217
409
  themeMode,
218
410
  syntaxHighlighting: true,
@@ -224,7 +416,7 @@ var MarkdownEditorImpl = /* @__PURE__ */ forwardRef(({ id, role = "article", ini
224
416
  }),
225
417
  providerExtensions,
226
418
  extensions
227
- ].filter(isNotFalsy),
419
+ ].filter(isTruthy2),
228
420
  ...role !== "section" && {
229
421
  id,
230
422
  scrollTo,
@@ -283,8 +475,8 @@ var MarkdownEditorImpl = /* @__PURE__ */ forwardRef(({ id, role = "article", ini
283
475
  onFileUpload
284
476
  ]);
285
477
  const getView = useCallback(() => {
286
- invariant2(editorView, void 0, {
287
- F: __dxlog_file2,
478
+ invariant3(editorView, void 0, {
479
+ F: __dxlog_file3,
288
480
  L: 240,
289
481
  S: void 0,
290
482
  A: [
@@ -307,9 +499,9 @@ var MarkdownEditorImpl = /* @__PURE__ */ forwardRef(({ id, role = "article", ini
307
499
  }, [
308
500
  onFileUpload
309
501
  ]);
310
- return /* @__PURE__ */ React.createElement(StackItem.Content, {
502
+ return /* @__PURE__ */ React2.createElement(StackItem.Content, {
311
503
  toolbar: !!toolbar
312
- }, toolbar && /* @__PURE__ */ React.createElement(React.Fragment, null, /* @__PURE__ */ React.createElement(EditorToolbar, {
504
+ }, toolbar && /* @__PURE__ */ React2.createElement(React2.Fragment, null, /* @__PURE__ */ React2.createElement(EditorToolbar, {
313
505
  attendableId: id,
314
506
  role,
315
507
  state: toolbarState,
@@ -317,7 +509,7 @@ var MarkdownEditorImpl = /* @__PURE__ */ forwardRef(({ id, role = "article", ini
317
509
  getView,
318
510
  image: handleImageUpload,
319
511
  viewMode: handleViewModeChange
320
- }), /* @__PURE__ */ React.createElement("input", getInputProps())), /* @__PURE__ */ React.createElement("div", {
512
+ }), /* @__PURE__ */ React2.createElement("input", getInputProps())), /* @__PURE__ */ React2.createElement("div", {
321
513
  role: "none",
322
514
  ref: parentRef,
323
515
  "data-testid": "composer.markdownRoot",
@@ -341,228 +533,13 @@ var useTest = (view) => {
341
533
  ]);
342
534
  };
343
535
 
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
536
  // src/components/MarkdownContainer.tsx
560
537
  var MarkdownContainer = ({ id, role, object, settings, selectionManager, viewMode, editorStateStore, onViewModeChange }) => {
561
538
  var _effect = _useSignals2();
562
539
  try {
563
540
  const { t } = useTranslation2();
564
541
  const scrollPastEnd = role === "article";
565
- const doc = Obj.instanceOf(DocumentType, object) ? object : void 0;
542
+ const doc = Obj.instanceOf(Markdown_exports.Document, object) ? object : void 0;
566
543
  const text = Obj.instanceOf(DataType.Text, object) ? object : void 0;
567
544
  const [previewBlocks, setPreviewBlocks] = useState([]);
568
545
  const previewOptions = useMemo4(() => ({
@@ -600,7 +577,7 @@ var MarkdownContainer = ({ id, role, object, settings, selectionManager, viewMod
600
577
  objectForms,
601
578
  schemaWhiteList
602
579
  ]);
603
- const onLinkQuery = useCallback2(async (query) => {
580
+ const handleLinkQuery = useCallback2(async (query) => {
604
581
  const name = query?.startsWith("@") ? query.slice(1).toLowerCase() : query?.toLowerCase() ?? "";
605
582
  const results = await space?.db.query(Query.select(filter)).run();
606
583
  const getLabel = (object2) => {
@@ -626,7 +603,7 @@ var MarkdownContainer = ({ id, role, object, settings, selectionManager, viewMod
626
603
  label,
627
604
  icon: metadata.icon,
628
605
  onSelect: (view, head) => {
629
- const link = `[${label}][${Obj.getDXN(object2)}]`;
606
+ const link = `[${label}](${Obj.getDXN(object2)})`;
630
607
  if (query?.startsWith("@")) {
631
608
  insertAtLineStart(view, head, `!${link}
632
609
  `);
@@ -656,7 +633,7 @@ var MarkdownContainer = ({ id, role, object, settings, selectionManager, viewMod
656
633
  settings,
657
634
  scrollPastEnd,
658
635
  onViewModeChange,
659
- onLinkQuery: space ? onLinkQuery : void 0
636
+ onLinkQuery: space ? handleLinkQuery : void 0
660
637
  }) : text ? /* @__PURE__ */ React3.createElement(MarkdownEditor, {
661
638
  id,
662
639
  role,
@@ -667,22 +644,19 @@ var MarkdownContainer = ({ id, role, object, settings, selectionManager, viewMod
667
644
  inputMode: settings.editorInputMode,
668
645
  scrollPastEnd,
669
646
  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
- );
647
+ onLinkQuery: space ? handleLinkQuery : void 0
648
+ }) : /* @__PURE__ */ React3.createElement(MarkdownEditor, {
649
+ id,
650
+ role,
651
+ initialValue: object.text,
652
+ extensions,
653
+ viewMode,
654
+ toolbar: settings.toolbar,
655
+ inputMode: settings.editorInputMode,
656
+ scrollPastEnd,
657
+ onViewModeChange,
658
+ onLinkQuery: space ? handleLinkQuery : void 0
659
+ });
686
660
  return /* @__PURE__ */ React3.createElement(React3.Fragment, null, editor, previewBlocks.map(({ link, el }) => /* @__PURE__ */ React3.createElement(PreviewBlock, {
687
661
  key: link.ref,
688
662
  link,
@@ -695,11 +669,9 @@ var MarkdownContainer = ({ id, role, object, settings, selectionManager, viewMod
695
669
  var PreviewBlock = ({ link, el }) => {
696
670
  var _effect = _useSignals2();
697
671
  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 ?? "")));
672
+ const client = useClient();
673
+ const dxn = DXN.parse(link.ref);
674
+ const subject = client.graph.ref(dxn).target;
703
675
  const data = useMemo4(() => ({
704
676
  subject
705
677
  }), [
@@ -773,6 +745,7 @@ var DocumentEditor = ({ id, document: doc, settings, viewMode, ...props }) => {
773
745
  var MarkdownContainer_default = MarkdownContainer;
774
746
  export {
775
747
  DocumentEditor,
748
+ MarkdownContainer,
776
749
  MarkdownContainer_default as default
777
750
  };
778
- //# sourceMappingURL=MarkdownContainer-F3WEEIBX.mjs.map
751
+ //# sourceMappingURL=MarkdownContainer-MV2UNAUV.mjs.map