@dxos/plugin-markdown 0.8.4-main.c1de068 → 0.8.4-main.c4373fc

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 (238) hide show
  1. package/dist/lib/browser/{MarkdownPreview-S3C7CGAV.mjs → MarkdownCard-ZHTH6EVA.mjs} +18 -18
  2. package/dist/lib/browser/MarkdownCard-ZHTH6EVA.mjs.map +7 -0
  3. package/dist/lib/browser/{MarkdownContainer-F3WEEIBX.mjs → MarkdownContainer-XDYFBDCI.mjs} +287 -315
  4. package/dist/lib/browser/MarkdownContainer-XDYFBDCI.mjs.map +7 -0
  5. package/dist/lib/browser/{anchor-sort-UKJJ7ZNP.mjs → anchor-sort-53E7TJGF.mjs} +7 -7
  6. package/dist/lib/browser/anchor-sort-53E7TJGF.mjs.map +7 -0
  7. package/dist/lib/browser/{app-graph-serializer-ICLAF662.mjs → app-graph-serializer-IEPNJZBR.mjs} +13 -14
  8. package/dist/lib/browser/app-graph-serializer-IEPNJZBR.mjs.map +7 -0
  9. package/dist/lib/browser/blueprint-definition-XDLVVSUN.mjs +11 -0
  10. package/dist/lib/browser/blueprint-definition-XDLVVSUN.mjs.map +7 -0
  11. package/dist/lib/browser/chunk-EVQGTH3P.mjs +22 -0
  12. package/dist/lib/browser/chunk-EVQGTH3P.mjs.map +7 -0
  13. package/dist/lib/browser/{chunk-LHDCHDBW.mjs → chunk-NGXGBWSS.mjs} +6 -5
  14. package/dist/lib/browser/chunk-NGXGBWSS.mjs.map +7 -0
  15. package/dist/lib/browser/chunk-ODB2PTBP.mjs +28 -0
  16. package/dist/lib/browser/chunk-ODB2PTBP.mjs.map +7 -0
  17. package/dist/lib/browser/chunk-OY6CGPOO.mjs +16 -0
  18. package/dist/lib/browser/chunk-OY6CGPOO.mjs.map +7 -0
  19. package/dist/lib/browser/chunk-PMBWHKDI.mjs +78 -0
  20. package/dist/lib/browser/chunk-PMBWHKDI.mjs.map +7 -0
  21. package/dist/lib/browser/chunk-VZU7BRGW.mjs +106 -0
  22. package/dist/lib/browser/chunk-VZU7BRGW.mjs.map +7 -0
  23. package/dist/lib/browser/{chunk-LFML7LC6.mjs → chunk-XYQDM6PM.mjs} +8 -9
  24. package/dist/lib/browser/chunk-XYQDM6PM.mjs.map +7 -0
  25. package/dist/lib/browser/index.mjs +35 -22
  26. package/dist/lib/browser/index.mjs.map +3 -3
  27. package/dist/lib/browser/intent-resolver-66ZUQ6JC.mjs +62 -0
  28. package/dist/lib/browser/intent-resolver-66ZUQ6JC.mjs.map +7 -0
  29. package/dist/lib/browser/meta.json +1 -1
  30. package/dist/lib/browser/{react-surface-C3Z423TV.mjs → react-surface-ONX5RNFM.mjs} +55 -46
  31. package/dist/lib/browser/react-surface-ONX5RNFM.mjs.map +7 -0
  32. package/dist/lib/browser/{settings-KN75ZQY6.mjs → settings-HXM36BCZ.mjs} +7 -7
  33. package/dist/lib/browser/settings-HXM36BCZ.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-73U3A7SD.mjs +76 -0
  37. package/dist/lib/browser/toolkit-73U3A7SD.mjs.map +7 -0
  38. package/dist/lib/browser/types/index.mjs +6 -14
  39. package/dist/lib/node-esm/{MarkdownPreview-77UFEWXT.mjs → MarkdownCard-MEA4QAAI.mjs} +18 -18
  40. package/dist/lib/node-esm/MarkdownCard-MEA4QAAI.mjs.map +7 -0
  41. package/dist/lib/node-esm/{MarkdownContainer-VOUHL6IU.mjs → MarkdownContainer-7GYMOJVT.mjs} +287 -315
  42. package/dist/lib/node-esm/MarkdownContainer-7GYMOJVT.mjs.map +7 -0
  43. package/dist/lib/node-esm/{anchor-sort-IPIS5D5B.mjs → anchor-sort-V2FWEYDN.mjs} +7 -7
  44. package/dist/lib/node-esm/anchor-sort-V2FWEYDN.mjs.map +7 -0
  45. package/dist/lib/node-esm/{app-graph-serializer-FLBXQKKR.mjs → app-graph-serializer-HIN4NMUG.mjs} +13 -14
  46. package/dist/lib/node-esm/app-graph-serializer-HIN4NMUG.mjs.map +7 -0
  47. package/dist/lib/node-esm/blueprint-definition-PDXZ67UQ.mjs +12 -0
  48. package/dist/lib/node-esm/blueprint-definition-PDXZ67UQ.mjs.map +7 -0
  49. package/dist/lib/node-esm/chunk-35WAARP4.mjs +79 -0
  50. package/dist/lib/node-esm/chunk-35WAARP4.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-CWTFQSN7.mjs → chunk-IOC54NCF.mjs} +8 -9
  54. package/dist/lib/node-esm/chunk-IOC54NCF.mjs.map +7 -0
  55. package/dist/lib/node-esm/chunk-VCG2U522.mjs +29 -0
  56. package/dist/lib/node-esm/chunk-VCG2U522.mjs.map +7 -0
  57. package/dist/lib/node-esm/chunk-VELFUWUH.mjs +107 -0
  58. package/dist/lib/node-esm/chunk-VELFUWUH.mjs.map +7 -0
  59. package/dist/lib/node-esm/chunk-W4XXBX33.mjs +24 -0
  60. package/dist/lib/node-esm/chunk-W4XXBX33.mjs.map +7 -0
  61. package/dist/lib/node-esm/{chunk-VIR2ABYE.mjs → chunk-YGSNWTGP.mjs} +6 -5
  62. package/dist/lib/node-esm/chunk-YGSNWTGP.mjs.map +7 -0
  63. package/dist/lib/node-esm/index.mjs +35 -22
  64. package/dist/lib/node-esm/index.mjs.map +3 -3
  65. package/dist/lib/node-esm/intent-resolver-TNRIFHNH.mjs +63 -0
  66. package/dist/lib/node-esm/intent-resolver-TNRIFHNH.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-X2GV6WQH.mjs} +55 -46
  69. package/dist/lib/node-esm/react-surface-X2GV6WQH.mjs.map +7 -0
  70. package/dist/lib/node-esm/{settings-KVP7TVX7.mjs → settings-KPLQ5ONI.mjs} +7 -7
  71. package/dist/lib/node-esm/settings-KPLQ5ONI.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-GUBDYF72.mjs +77 -0
  75. package/dist/lib/node-esm/toolkit-GUBDYF72.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 +2 -2
  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 +43 -0
  139. package/dist/types/src/types/Markdown.d.ts.map +1 -0
  140. package/dist/types/src/types/MarkdownAction.d.ts +33 -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 +12 -3
  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/{MarkdownPreview/MarkdownPreview.tsx → MarkdownCard/MarkdownCard.tsx} +13 -11
  164. package/src/components/MarkdownCard/index.ts +9 -0
  165. package/src/components/MarkdownContainer.stories.tsx +47 -41
  166. package/src/components/MarkdownContainer.tsx +22 -19
  167. package/src/components/MarkdownEditor/MarkdownEditor.stories.tsx +21 -17
  168. package/src/components/MarkdownEditor/MarkdownEditor.tsx +39 -39
  169. package/src/components/MarkdownSettings/MarkdownSettings.tsx +81 -78
  170. package/src/components/Suggestions.stories.tsx +51 -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 +56 -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 +20 -6
  187. package/dist/lib/browser/MarkdownContainer-F3WEEIBX.mjs.map +0 -7
  188. package/dist/lib/browser/MarkdownPreview-S3C7CGAV.mjs.map +0 -7
  189. package/dist/lib/browser/anchor-sort-UKJJ7ZNP.mjs.map +0 -7
  190. package/dist/lib/browser/app-graph-serializer-ICLAF662.mjs.map +0 -7
  191. package/dist/lib/browser/artifact-definition-R2YYWOPN.mjs +0 -145
  192. package/dist/lib/browser/artifact-definition-R2YYWOPN.mjs.map +0 -7
  193. package/dist/lib/browser/chunk-777RIED6.mjs +0 -16
  194. package/dist/lib/browser/chunk-777RIED6.mjs.map +0 -7
  195. package/dist/lib/browser/chunk-EPTSAJZM.mjs +0 -22
  196. package/dist/lib/browser/chunk-EPTSAJZM.mjs.map +0 -7
  197. package/dist/lib/browser/chunk-LFML7LC6.mjs.map +0 -7
  198. package/dist/lib/browser/chunk-LHDCHDBW.mjs.map +0 -7
  199. package/dist/lib/browser/chunk-PHTD5DTR.mjs +0 -20
  200. package/dist/lib/browser/chunk-PHTD5DTR.mjs.map +0 -7
  201. package/dist/lib/browser/chunk-UANWRJZU.mjs +0 -79
  202. package/dist/lib/browser/chunk-UANWRJZU.mjs.map +0 -7
  203. package/dist/lib/browser/intent-resolver-3MXYO3MW.mjs +0 -64
  204. package/dist/lib/browser/intent-resolver-3MXYO3MW.mjs.map +0 -7
  205. package/dist/lib/browser/react-surface-C3Z423TV.mjs.map +0 -7
  206. package/dist/lib/browser/settings-KN75ZQY6.mjs.map +0 -7
  207. package/dist/lib/browser/state-LZWTAS65.mjs.map +0 -7
  208. package/dist/lib/node-esm/MarkdownContainer-VOUHL6IU.mjs.map +0 -7
  209. package/dist/lib/node-esm/MarkdownPreview-77UFEWXT.mjs.map +0 -7
  210. package/dist/lib/node-esm/anchor-sort-IPIS5D5B.mjs.map +0 -7
  211. package/dist/lib/node-esm/app-graph-serializer-FLBXQKKR.mjs.map +0 -7
  212. package/dist/lib/node-esm/artifact-definition-MLTAY4LK.mjs +0 -146
  213. package/dist/lib/node-esm/artifact-definition-MLTAY4LK.mjs.map +0 -7
  214. package/dist/lib/node-esm/chunk-7X6TPTJK.mjs +0 -22
  215. package/dist/lib/node-esm/chunk-7X6TPTJK.mjs.map +0 -7
  216. package/dist/lib/node-esm/chunk-ACFGXH2K.mjs.map +0 -7
  217. package/dist/lib/node-esm/chunk-CWTFQSN7.mjs.map +0 -7
  218. package/dist/lib/node-esm/chunk-CXG7GMYP.mjs +0 -24
  219. package/dist/lib/node-esm/chunk-CXG7GMYP.mjs.map +0 -7
  220. package/dist/lib/node-esm/chunk-JEEQLO7C.mjs +0 -80
  221. package/dist/lib/node-esm/chunk-JEEQLO7C.mjs.map +0 -7
  222. package/dist/lib/node-esm/chunk-VIR2ABYE.mjs.map +0 -7
  223. package/dist/lib/node-esm/intent-resolver-BZYWV53A.mjs +0 -65
  224. package/dist/lib/node-esm/intent-resolver-BZYWV53A.mjs.map +0 -7
  225. package/dist/lib/node-esm/react-surface-TTTBYNI2.mjs.map +0 -7
  226. package/dist/lib/node-esm/settings-KVP7TVX7.mjs.map +0 -7
  227. package/dist/lib/node-esm/state-NW3W4JCQ.mjs.map +0 -7
  228. package/dist/types/src/components/MarkdownPreview/MarkdownPreview.d.ts +0 -6
  229. package/dist/types/src/components/MarkdownPreview/MarkdownPreview.d.ts.map +0 -1
  230. package/dist/types/src/components/MarkdownPreview/MarkdownPreview.stories.d.ts +0 -42
  231. package/dist/types/src/components/MarkdownPreview/MarkdownPreview.stories.d.ts.map +0 -1
  232. package/dist/types/src/components/MarkdownPreview/index.d.ts +0 -4
  233. package/dist/types/src/components/MarkdownPreview/index.d.ts.map +0 -1
  234. package/dist/types/src/types/schema.d.ts +0 -35
  235. package/dist/types/src/types/schema.d.ts.map +0 -1
  236. package/src/components/MarkdownPreview/MarkdownPreview.stories.tsx +0 -81
  237. package/src/components/MarkdownPreview/index.ts +0 -9
  238. package/src/types/schema.ts +0 -39
@@ -1,17 +1,18 @@
1
- import "./chunk-PHTD5DTR.mjs";
1
+ import "./chunk-EVQGTH3P.mjs";
2
+ import "./chunk-VZU7BRGW.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-XYQDM6PM.mjs";
9
10
  import {
10
- DocumentType
11
- } from "./chunk-UANWRJZU.mjs";
11
+ Markdown_exports
12
+ } from "./chunk-PMBWHKDI.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 { CommandMenuProvider, EditorToolbar, addLink, coreSlashCommands, createBasicExtensions, createMarkdownExtensions, createThemeExtensions, dropFile, editorGutter, editorSlots, filterItems, linkSlashCommands, processEditorPayload, stackItemContentEditorClassNames, useCommandMenu, useEditorToolbarState, useFormattingState, 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();
312
+ const viewRef = useRef(null);
107
313
  const getMenu = useCallback((trigger, query) => {
108
314
  switch (trigger) {
109
- case "@":
315
+ case "@": {
110
316
  return onLinkQuery?.(query) ?? [];
317
+ }
111
318
  case "/":
112
- default:
319
+ default: {
113
320
  return filterItems([
114
321
  coreSlashCommands,
115
322
  linkSlashCommands,
116
323
  ...slashCommandGroups ?? []
117
324
  ], (item) => query ? toLocalizedString(item.label, t).toLowerCase().includes(query.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,29 @@ 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("border border-separator rounded-sm mx-1 px-1.5 pt-[1px] pb-[2px]").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,
351
+ const { groupsRef, commandMenu, ...commandMenuProps } = useCommandMenu(options);
352
+ const extensions = useMemo3(() => [
353
+ extensionsParam,
158
354
  commandMenu
159
- ].filter(isNotFalsy), [
160
- _extensions,
355
+ ].filter(isTruthy2), [
356
+ extensionsParam,
161
357
  commandMenu
162
358
  ]);
163
- return /* @__PURE__ */ React.createElement(RefPopover, {
164
- modal: false,
165
- ...refPopoverProps
166
- }, /* @__PURE__ */ React.createElement(MarkdownEditorImpl, {
359
+ return /* @__PURE__ */ React2.createElement(CommandMenuProvider, {
360
+ groups: groupsRef.current,
361
+ ...commandMenuProps
362
+ }, /* @__PURE__ */ React2.createElement(MarkdownEditorImpl, {
167
363
  ref: viewRef,
168
364
  ...props,
169
365
  extensions
170
- }), /* @__PURE__ */ React.createElement(CommandMenu, {
171
- groups: groupsRef.current,
172
- currentItem,
173
- onSelect
174
366
  }));
175
367
  } finally {
176
368
  _effect.f();
@@ -179,16 +371,16 @@ var MarkdownEditor = ({ extensions: _extensions, slashCommandGroups, onLinkQuery
179
371
  var MarkdownEditorImpl = /* @__PURE__ */ forwardRef(({ id, role = "article", initialValue, customActions, editorStateStore, extensions, extensionProviders, scrollPastEnd, toolbar, viewMode, onFileUpload, onViewModeChange }, forwardedRef) => {
180
372
  var _effect = _useSignals();
181
373
  try {
182
- const { t } = useTranslation(MARKDOWN_PLUGIN);
374
+ const { t } = useTranslation(meta.id);
183
375
  const { themeMode } = useThemeContext();
184
376
  const toolbarState = useEditorToolbarState({
185
377
  viewMode
186
378
  });
187
379
  const formattingObserver = useFormattingState(toolbarState);
188
- const { scrollTo, selection } = useMemo2(() => editorStateStore?.getState(id) ?? {}, [
380
+ const { scrollTo, selection } = useMemo3(() => editorStateStore?.getState(id) ?? {}, [
189
381
  id
190
382
  ]);
191
- const providerExtensions = useMemo2(() => extensionProviders?.flatMap((provider) => provider({})).filter(isNonNullable), [
383
+ const providerExtensions = useMemo3(() => extensionProviders?.flatMap((provider) => provider({})).filter(isNonNullable), [
192
384
  extensionProviders
193
385
  ]);
194
386
  const handleDrop = async (view, { files }) => {
@@ -208,11 +400,10 @@ var MarkdownEditorImpl = /* @__PURE__ */ forwardRef(({ id, role = "article", ini
208
400
  createBasicExtensions({
209
401
  readOnly: viewMode === "readonly",
210
402
  placeholder: t("editor placeholder"),
211
- scrollPastEnd: role === "section" ? false : scrollPastEnd
212
- }),
213
- createMarkdownExtensions({
214
- themeMode
403
+ scrollPastEnd: role === "section" ? false : scrollPastEnd,
404
+ search: true
215
405
  }),
406
+ createMarkdownExtensions(),
216
407
  createThemeExtensions({
217
408
  themeMode,
218
409
  syntaxHighlighting: true,
@@ -224,7 +415,7 @@ var MarkdownEditorImpl = /* @__PURE__ */ forwardRef(({ id, role = "article", ini
224
415
  }),
225
416
  providerExtensions,
226
417
  extensions
227
- ].filter(isNotFalsy),
418
+ ].filter(isTruthy2),
228
419
  ...role !== "section" && {
229
420
  id,
230
421
  scrollTo,
@@ -283,8 +474,8 @@ var MarkdownEditorImpl = /* @__PURE__ */ forwardRef(({ id, role = "article", ini
283
474
  onFileUpload
284
475
  ]);
285
476
  const getView = useCallback(() => {
286
- invariant2(editorView, void 0, {
287
- F: __dxlog_file2,
477
+ invariant3(editorView, void 0, {
478
+ F: __dxlog_file3,
288
479
  L: 240,
289
480
  S: void 0,
290
481
  A: [
@@ -307,9 +498,9 @@ var MarkdownEditorImpl = /* @__PURE__ */ forwardRef(({ id, role = "article", ini
307
498
  }, [
308
499
  onFileUpload
309
500
  ]);
310
- return /* @__PURE__ */ React.createElement(StackItem.Content, {
501
+ return /* @__PURE__ */ React2.createElement(StackItem.Content, {
311
502
  toolbar: !!toolbar
312
- }, toolbar && /* @__PURE__ */ React.createElement(React.Fragment, null, /* @__PURE__ */ React.createElement(EditorToolbar, {
503
+ }, toolbar && /* @__PURE__ */ React2.createElement(React2.Fragment, null, /* @__PURE__ */ React2.createElement(EditorToolbar, {
313
504
  attendableId: id,
314
505
  role,
315
506
  state: toolbarState,
@@ -317,7 +508,7 @@ var MarkdownEditorImpl = /* @__PURE__ */ forwardRef(({ id, role = "article", ini
317
508
  getView,
318
509
  image: handleImageUpload,
319
510
  viewMode: handleViewModeChange
320
- }), /* @__PURE__ */ React.createElement("input", getInputProps())), /* @__PURE__ */ React.createElement("div", {
511
+ }), /* @__PURE__ */ React2.createElement("input", getInputProps())), /* @__PURE__ */ React2.createElement("div", {
321
512
  role: "none",
322
513
  ref: parentRef,
323
514
  "data-testid": "composer.markdownRoot",
@@ -341,228 +532,13 @@ var useTest = (view) => {
341
532
  ]);
342
533
  };
343
534
 
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
535
  // src/components/MarkdownContainer.tsx
560
536
  var MarkdownContainer = ({ id, role, object, settings, selectionManager, viewMode, editorStateStore, onViewModeChange }) => {
561
537
  var _effect = _useSignals2();
562
538
  try {
563
539
  const { t } = useTranslation2();
564
540
  const scrollPastEnd = role === "article";
565
- const doc = Obj.instanceOf(DocumentType, object) ? object : void 0;
541
+ const doc = Obj.instanceOf(Markdown_exports.Document, object) ? object : void 0;
566
542
  const text = Obj.instanceOf(DataType.Text, object) ? object : void 0;
567
543
  const [previewBlocks, setPreviewBlocks] = useState([]);
568
544
  const previewOptions = useMemo4(() => ({
@@ -600,7 +576,7 @@ var MarkdownContainer = ({ id, role, object, settings, selectionManager, viewMod
600
576
  objectForms,
601
577
  schemaWhiteList
602
578
  ]);
603
- const onLinkQuery = useCallback2(async (query) => {
579
+ const handleLinkQuery = useCallback2(async (query) => {
604
580
  const name = query?.startsWith("@") ? query.slice(1).toLowerCase() : query?.toLowerCase() ?? "";
605
581
  const results = await space?.db.query(Query.select(filter)).run();
606
582
  const getLabel = (object2) => {
@@ -626,7 +602,7 @@ var MarkdownContainer = ({ id, role, object, settings, selectionManager, viewMod
626
602
  label,
627
603
  icon: metadata.icon,
628
604
  onSelect: (view, head) => {
629
- const link = `[${label}][${Obj.getDXN(object2)}]`;
605
+ const link = `[${label}](${Obj.getDXN(object2)})`;
630
606
  if (query?.startsWith("@")) {
631
607
  insertAtLineStart(view, head, `!${link}
632
608
  `);
@@ -656,7 +632,7 @@ var MarkdownContainer = ({ id, role, object, settings, selectionManager, viewMod
656
632
  settings,
657
633
  scrollPastEnd,
658
634
  onViewModeChange,
659
- onLinkQuery: space ? onLinkQuery : void 0
635
+ onLinkQuery: space ? handleLinkQuery : void 0
660
636
  }) : text ? /* @__PURE__ */ React3.createElement(MarkdownEditor, {
661
637
  id,
662
638
  role,
@@ -667,22 +643,19 @@ var MarkdownContainer = ({ id, role, object, settings, selectionManager, viewMod
667
643
  inputMode: settings.editorInputMode,
668
644
  scrollPastEnd,
669
645
  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
- );
646
+ onLinkQuery: space ? handleLinkQuery : void 0
647
+ }) : /* @__PURE__ */ React3.createElement(MarkdownEditor, {
648
+ id,
649
+ role,
650
+ initialValue: object.text,
651
+ extensions,
652
+ viewMode,
653
+ toolbar: settings.toolbar,
654
+ inputMode: settings.editorInputMode,
655
+ scrollPastEnd,
656
+ onViewModeChange,
657
+ onLinkQuery: space ? handleLinkQuery : void 0
658
+ });
686
659
  return /* @__PURE__ */ React3.createElement(React3.Fragment, null, editor, previewBlocks.map(({ link, el }) => /* @__PURE__ */ React3.createElement(PreviewBlock, {
687
660
  key: link.ref,
688
661
  link,
@@ -695,11 +668,9 @@ var MarkdownContainer = ({ id, role, object, settings, selectionManager, viewMod
695
668
  var PreviewBlock = ({ link, el }) => {
696
669
  var _effect = _useSignals2();
697
670
  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 ?? "")));
671
+ const client = useClient();
672
+ const dxn = DXN.parse(link.ref);
673
+ const subject = client.graph.ref(dxn).target;
703
674
  const data = useMemo4(() => ({
704
675
  subject
705
676
  }), [
@@ -773,6 +744,7 @@ var DocumentEditor = ({ id, document: doc, settings, viewMode, ...props }) => {
773
744
  var MarkdownContainer_default = MarkdownContainer;
774
745
  export {
775
746
  DocumentEditor,
747
+ MarkdownContainer,
776
748
  MarkdownContainer_default as default
777
749
  };
778
- //# sourceMappingURL=MarkdownContainer-F3WEEIBX.mjs.map
750
+ //# sourceMappingURL=MarkdownContainer-XDYFBDCI.mjs.map