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