@dxos/plugin-markdown 0.8.2-staging.7ac8446 → 0.8.2

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 (227) hide show
  1. package/dist/lib/browser/MarkdownContainer-5IEINNQB.mjs +588 -0
  2. package/dist/lib/browser/MarkdownContainer-5IEINNQB.mjs.map +7 -0
  3. package/dist/lib/browser/MarkdownPreview-YW5CS3ID.mjs +87 -0
  4. package/dist/lib/browser/MarkdownPreview-YW5CS3ID.mjs.map +7 -0
  5. package/dist/lib/browser/anchor-sort-VS4OZVPP.mjs +32 -0
  6. package/dist/lib/browser/anchor-sort-VS4OZVPP.mjs.map +7 -0
  7. package/dist/lib/browser/{app-graph-serializer-NOXI4IQ5.mjs → app-graph-serializer-V6RLEHVY.mjs} +5 -6
  8. package/dist/lib/browser/app-graph-serializer-V6RLEHVY.mjs.map +7 -0
  9. package/dist/lib/browser/{artifact-definition-CE6J6NY4.mjs → artifact-definition-5NAODQLG.mjs} +65 -17
  10. package/dist/lib/browser/artifact-definition-5NAODQLG.mjs.map +7 -0
  11. package/dist/lib/browser/{chunk-3ULJ4FIJ.mjs → chunk-77NGW7EO.mjs} +12 -26
  12. package/dist/lib/browser/chunk-77NGW7EO.mjs.map +7 -0
  13. package/dist/lib/browser/chunk-ACAID3XF.mjs +20 -0
  14. package/dist/lib/browser/chunk-ACAID3XF.mjs.map +7 -0
  15. package/dist/lib/browser/{chunk-QXDKFACU.mjs → chunk-C5RABVIX.mjs} +6 -5
  16. package/dist/lib/browser/chunk-C5RABVIX.mjs.map +7 -0
  17. package/dist/lib/browser/chunk-ECSM56YC.mjs +80 -0
  18. package/dist/lib/browser/chunk-ECSM56YC.mjs.map +7 -0
  19. package/dist/lib/browser/{chunk-NAGMSX77.mjs → chunk-QVJETNGS.mjs} +2 -2
  20. package/dist/lib/{node-esm/chunk-ETXPC5VP.mjs.map → browser/chunk-QVJETNGS.mjs.map} +1 -1
  21. package/dist/lib/browser/index.mjs +34 -18
  22. package/dist/lib/browser/index.mjs.map +3 -3
  23. package/dist/lib/browser/intent-resolver-4GDYST4Y.mjs +65 -0
  24. package/dist/lib/browser/intent-resolver-4GDYST4Y.mjs.map +7 -0
  25. package/dist/lib/browser/meta.json +1 -1
  26. package/dist/lib/browser/react-surface-QE4SKXBT.mjs +200 -0
  27. package/dist/lib/browser/react-surface-QE4SKXBT.mjs.map +7 -0
  28. package/dist/lib/browser/{settings-GCSS3Y4Z.mjs → settings-W5CK4PXP.mjs} +4 -4
  29. package/dist/lib/browser/settings-W5CK4PXP.mjs.map +7 -0
  30. package/dist/lib/browser/{state-O7P5JDIH.mjs → state-KI6PJ6DT.mjs} +3 -3
  31. package/dist/lib/browser/state-KI6PJ6DT.mjs.map +7 -0
  32. package/dist/lib/browser/types/index.mjs +3 -1
  33. package/dist/lib/node/MarkdownContainer-LSNNPNRB.cjs +601 -0
  34. package/dist/lib/node/MarkdownContainer-LSNNPNRB.cjs.map +7 -0
  35. package/dist/lib/node/MarkdownPreview-G34HSQEB.cjs +110 -0
  36. package/dist/lib/node/MarkdownPreview-G34HSQEB.cjs.map +7 -0
  37. package/dist/lib/node/{thread-42R57L4K.cjs → anchor-sort-NHVF23EU.cjs} +15 -20
  38. package/dist/lib/node/anchor-sort-NHVF23EU.cjs.map +7 -0
  39. package/dist/lib/node/{app-graph-serializer-HKK3SEDN.cjs → app-graph-serializer-CLALIYN3.cjs} +10 -11
  40. package/dist/lib/node/app-graph-serializer-CLALIYN3.cjs.map +7 -0
  41. package/dist/lib/node/{artifact-definition-XGADFWCQ.cjs → artifact-definition-VEAHK7BX.cjs} +68 -21
  42. package/dist/lib/node/artifact-definition-VEAHK7BX.cjs.map +7 -0
  43. package/dist/lib/node/chunk-C4HR7UXE.cjs +58 -0
  44. package/dist/lib/node/chunk-C4HR7UXE.cjs.map +7 -0
  45. package/dist/lib/node/{chunk-7QVONRSI.cjs → chunk-G7RBJX22.cjs} +13 -41
  46. package/dist/lib/node/chunk-G7RBJX22.cjs.map +7 -0
  47. package/dist/lib/node/{chunk-DZXTXSXX.cjs → chunk-IFYSBQE5.cjs} +5 -5
  48. package/dist/lib/node/{chunk-DZXTXSXX.cjs.map → chunk-IFYSBQE5.cjs.map} +1 -1
  49. package/dist/lib/node/{chunk-UEXGNGSS.cjs → chunk-RQS4KBMG.cjs} +45 -39
  50. package/dist/lib/node/chunk-RQS4KBMG.cjs.map +7 -0
  51. package/dist/lib/node/{chunk-H5MYVP6F.cjs → chunk-ZDTL47I7.cjs} +9 -8
  52. package/dist/lib/node/chunk-ZDTL47I7.cjs.map +7 -0
  53. package/dist/lib/node/index.cjs +43 -28
  54. package/dist/lib/node/index.cjs.map +3 -3
  55. package/dist/lib/node/intent-resolver-AUZVK3NZ.cjs +78 -0
  56. package/dist/lib/node/intent-resolver-AUZVK3NZ.cjs.map +7 -0
  57. package/dist/lib/node/meta.json +1 -1
  58. package/dist/lib/node/react-surface-WJZTEBYO.cjs +213 -0
  59. package/dist/lib/node/react-surface-WJZTEBYO.cjs.map +7 -0
  60. package/dist/lib/node/{settings-S2ISUVIH.cjs → settings-IRKU3WPM.cjs} +7 -7
  61. package/dist/lib/node/settings-IRKU3WPM.cjs.map +7 -0
  62. package/dist/lib/node/{state-L44SG3ZM.cjs → state-KKDRAG7X.cjs} +7 -7
  63. package/dist/lib/node/state-KKDRAG7X.cjs.map +7 -0
  64. package/dist/lib/node/types/index.cjs +8 -6
  65. package/dist/lib/node/types/index.cjs.map +2 -2
  66. package/dist/lib/node-esm/MarkdownContainer-UZSLXMWO.mjs +589 -0
  67. package/dist/lib/node-esm/MarkdownContainer-UZSLXMWO.mjs.map +7 -0
  68. package/dist/lib/node-esm/MarkdownPreview-TCV7BI32.mjs +88 -0
  69. package/dist/lib/node-esm/MarkdownPreview-TCV7BI32.mjs.map +7 -0
  70. package/dist/lib/node-esm/anchor-sort-G2HLCYFK.mjs +33 -0
  71. package/dist/lib/node-esm/anchor-sort-G2HLCYFK.mjs.map +7 -0
  72. package/dist/lib/node-esm/{app-graph-serializer-QQ2CTHOQ.mjs → app-graph-serializer-C3RNTQGM.mjs} +5 -6
  73. package/dist/lib/node-esm/app-graph-serializer-C3RNTQGM.mjs.map +7 -0
  74. package/dist/lib/node-esm/{artifact-definition-WRG5ZRN5.mjs → artifact-definition-7TIJW2CO.mjs} +65 -17
  75. package/dist/lib/node-esm/artifact-definition-7TIJW2CO.mjs.map +7 -0
  76. package/dist/lib/node-esm/{chunk-F6UHVLH7.mjs → chunk-6RPARLIK.mjs} +12 -26
  77. package/dist/lib/node-esm/chunk-6RPARLIK.mjs.map +7 -0
  78. package/dist/lib/node-esm/chunk-EIUTPXGL.mjs +22 -0
  79. package/dist/lib/node-esm/chunk-EIUTPXGL.mjs.map +7 -0
  80. package/dist/lib/node-esm/{chunk-ETXPC5VP.mjs → chunk-JXXDCSMW.mjs} +2 -2
  81. package/dist/lib/{browser/chunk-NAGMSX77.mjs.map → node-esm/chunk-JXXDCSMW.mjs.map} +1 -1
  82. package/dist/lib/node-esm/chunk-NCMPVEXO.mjs +81 -0
  83. package/dist/lib/node-esm/chunk-NCMPVEXO.mjs.map +7 -0
  84. package/dist/lib/node-esm/{chunk-JAVD67QP.mjs → chunk-TCFJNUAE.mjs} +6 -5
  85. package/dist/lib/node-esm/chunk-TCFJNUAE.mjs.map +7 -0
  86. package/dist/lib/node-esm/index.mjs +34 -18
  87. package/dist/lib/node-esm/index.mjs.map +3 -3
  88. package/dist/lib/node-esm/intent-resolver-FTNXUNI2.mjs +66 -0
  89. package/dist/lib/node-esm/intent-resolver-FTNXUNI2.mjs.map +7 -0
  90. package/dist/lib/node-esm/meta.json +1 -1
  91. package/dist/lib/node-esm/react-surface-XNM3YDFB.mjs +201 -0
  92. package/dist/lib/node-esm/react-surface-XNM3YDFB.mjs.map +7 -0
  93. package/dist/lib/node-esm/{settings-ZDIFTK4N.mjs → settings-MK7D7LHQ.mjs} +4 -4
  94. package/dist/lib/node-esm/settings-MK7D7LHQ.mjs.map +7 -0
  95. package/dist/lib/node-esm/{state-DWPOKLEY.mjs → state-LLGVRYKL.mjs} +3 -3
  96. package/dist/lib/node-esm/state-LLGVRYKL.mjs.map +7 -0
  97. package/dist/lib/node-esm/types/index.mjs +3 -1
  98. package/dist/types/src/MarkdownPlugin.d.ts.map +1 -1
  99. package/dist/types/src/capabilities/anchor-sort.d.ts +6 -0
  100. package/dist/types/src/capabilities/anchor-sort.d.ts.map +1 -0
  101. package/dist/types/src/capabilities/app-graph-serializer.d.ts +2 -2
  102. package/dist/types/src/capabilities/app-graph-serializer.d.ts.map +1 -1
  103. package/dist/types/src/capabilities/artifact-definition.d.ts.map +1 -1
  104. package/dist/types/src/capabilities/index.d.ts +7 -7
  105. package/dist/types/src/capabilities/index.d.ts.map +1 -1
  106. package/dist/types/src/capabilities/intent-resolver.d.ts +2 -2
  107. package/dist/types/src/capabilities/intent-resolver.d.ts.map +1 -1
  108. package/dist/types/src/capabilities/react-surface.d.ts.map +1 -1
  109. package/dist/types/src/capabilities/state.d.ts +2 -2
  110. package/dist/types/src/capabilities/state.d.ts.map +1 -1
  111. package/dist/types/src/components/MarkdownContainer.d.ts +5 -3
  112. package/dist/types/src/components/MarkdownContainer.d.ts.map +1 -1
  113. package/dist/types/src/components/MarkdownEditor/MarkdownEditor.d.ts +24 -0
  114. package/dist/types/src/components/MarkdownEditor/MarkdownEditor.d.ts.map +1 -0
  115. package/dist/types/src/components/{MarkdownEditor.stories.d.ts → MarkdownEditor/MarkdownEditor.stories.d.ts} +3 -3
  116. package/dist/types/src/components/MarkdownEditor/MarkdownEditor.stories.d.ts.map +1 -0
  117. package/dist/types/src/components/MarkdownEditor/index.d.ts +2 -0
  118. package/dist/types/src/components/MarkdownEditor/index.d.ts.map +1 -0
  119. package/dist/types/src/components/MarkdownPreview/MarkdownPreview.d.ts +6 -0
  120. package/dist/types/src/components/MarkdownPreview/MarkdownPreview.d.ts.map +1 -0
  121. package/dist/types/src/components/MarkdownPreview/MarkdownPreview.stories.d.ts +23 -0
  122. package/dist/types/src/components/MarkdownPreview/MarkdownPreview.stories.d.ts.map +1 -0
  123. package/dist/types/src/components/MarkdownPreview/index.d.ts +4 -0
  124. package/dist/types/src/components/MarkdownPreview/index.d.ts.map +1 -0
  125. package/dist/types/src/components/{MarkdownSettings.d.ts → MarkdownSettings/MarkdownSettings.d.ts} +1 -1
  126. package/dist/types/src/components/MarkdownSettings/MarkdownSettings.d.ts.map +1 -0
  127. package/dist/types/src/components/MarkdownSettings/index.d.ts +2 -0
  128. package/dist/types/src/components/MarkdownSettings/index.d.ts.map +1 -0
  129. package/dist/types/src/components/Suggestions.stories.d.ts +12 -0
  130. package/dist/types/src/components/Suggestions.stories.d.ts.map +1 -0
  131. package/dist/types/src/components/Toolbar.stories.d.ts +2 -2
  132. package/dist/types/src/components/Toolbar.stories.d.ts.map +1 -1
  133. package/dist/types/src/components/index.d.ts +2 -1
  134. package/dist/types/src/components/index.d.ts.map +1 -1
  135. package/dist/types/src/extensions.d.ts +8 -5
  136. package/dist/types/src/extensions.d.ts.map +1 -1
  137. package/dist/types/src/hooks/useSelectCurrentThread.d.ts.map +1 -1
  138. package/dist/types/src/translations.d.ts +4 -42
  139. package/dist/types/src/translations.d.ts.map +1 -1
  140. package/dist/types/src/types/schema.d.ts +29 -129
  141. package/dist/types/src/types/schema.d.ts.map +1 -1
  142. package/dist/types/src/types/types.d.ts +40 -88
  143. package/dist/types/src/types/types.d.ts.map +1 -1
  144. package/dist/types/src/util.d.ts +1 -0
  145. package/dist/types/src/util.d.ts.map +1 -1
  146. package/dist/types/tsconfig.tsbuildinfo +1 -1
  147. package/package.json +48 -34
  148. package/src/MarkdownPlugin.tsx +22 -12
  149. package/src/capabilities/anchor-sort.ts +30 -0
  150. package/src/capabilities/app-graph-serializer.ts +4 -5
  151. package/src/capabilities/artifact-definition.ts +48 -10
  152. package/src/capabilities/index.ts +1 -1
  153. package/src/capabilities/intent-resolver.ts +40 -12
  154. package/src/capabilities/react-surface.tsx +20 -5
  155. package/src/capabilities/settings.ts +2 -2
  156. package/src/capabilities/state.ts +4 -4
  157. package/src/components/MarkdownContainer.tsx +20 -7
  158. package/src/components/{MarkdownEditor.stories.tsx → MarkdownEditor/MarkdownEditor.stories.tsx} +22 -35
  159. package/src/components/{MarkdownEditor.tsx → MarkdownEditor/MarkdownEditor.tsx} +32 -73
  160. package/src/components/MarkdownEditor/index.ts +5 -0
  161. package/src/components/MarkdownPreview/MarkdownPreview.stories.tsx +73 -0
  162. package/src/components/MarkdownPreview/MarkdownPreview.tsx +85 -0
  163. package/src/components/MarkdownPreview/index.ts +9 -0
  164. package/src/components/{MarkdownSettings.tsx → MarkdownSettings/MarkdownSettings.tsx} +2 -2
  165. package/src/components/MarkdownSettings/index.ts +5 -0
  166. package/src/components/Suggestions.stories.tsx +216 -0
  167. package/src/components/Toolbar.stories.tsx +29 -29
  168. package/src/components/index.ts +1 -0
  169. package/src/extensions.tsx +82 -48
  170. package/src/hooks/useSelectCurrentThread.tsx +2 -2
  171. package/src/translations.ts +3 -3
  172. package/src/types/schema.ts +22 -15
  173. package/src/types/types.ts +23 -21
  174. package/src/util.tsx +8 -4
  175. package/dist/lib/browser/MarkdownContainer-T3HU27RE.mjs +0 -563
  176. package/dist/lib/browser/MarkdownContainer-T3HU27RE.mjs.map +0 -7
  177. package/dist/lib/browser/app-graph-serializer-NOXI4IQ5.mjs.map +0 -7
  178. package/dist/lib/browser/artifact-definition-CE6J6NY4.mjs.map +0 -7
  179. package/dist/lib/browser/chunk-3ULJ4FIJ.mjs.map +0 -7
  180. package/dist/lib/browser/chunk-QXDKFACU.mjs.map +0 -7
  181. package/dist/lib/browser/chunk-YCJNW2RU.mjs +0 -75
  182. package/dist/lib/browser/chunk-YCJNW2RU.mjs.map +0 -7
  183. package/dist/lib/browser/intent-resolver-42GQ6HNZ.mjs +0 -50
  184. package/dist/lib/browser/intent-resolver-42GQ6HNZ.mjs.map +0 -7
  185. package/dist/lib/browser/react-surface-RQX3CPFV.mjs +0 -176
  186. package/dist/lib/browser/react-surface-RQX3CPFV.mjs.map +0 -7
  187. package/dist/lib/browser/settings-GCSS3Y4Z.mjs.map +0 -7
  188. package/dist/lib/browser/state-O7P5JDIH.mjs.map +0 -7
  189. package/dist/lib/browser/thread-3QGCFNVZ.mjs +0 -37
  190. package/dist/lib/browser/thread-3QGCFNVZ.mjs.map +0 -7
  191. package/dist/lib/node/MarkdownContainer-6ZJIFAP6.cjs +0 -576
  192. package/dist/lib/node/MarkdownContainer-6ZJIFAP6.cjs.map +0 -7
  193. package/dist/lib/node/app-graph-serializer-HKK3SEDN.cjs.map +0 -7
  194. package/dist/lib/node/artifact-definition-XGADFWCQ.cjs.map +0 -7
  195. package/dist/lib/node/chunk-7QVONRSI.cjs.map +0 -7
  196. package/dist/lib/node/chunk-H5MYVP6F.cjs.map +0 -7
  197. package/dist/lib/node/chunk-UEXGNGSS.cjs.map +0 -7
  198. package/dist/lib/node/intent-resolver-NW27BF3W.cjs +0 -63
  199. package/dist/lib/node/intent-resolver-NW27BF3W.cjs.map +0 -7
  200. package/dist/lib/node/react-surface-5X3SMHGI.cjs +0 -189
  201. package/dist/lib/node/react-surface-5X3SMHGI.cjs.map +0 -7
  202. package/dist/lib/node/settings-S2ISUVIH.cjs.map +0 -7
  203. package/dist/lib/node/state-L44SG3ZM.cjs.map +0 -7
  204. package/dist/lib/node/thread-42R57L4K.cjs.map +0 -7
  205. package/dist/lib/node-esm/MarkdownContainer-URAPTO37.mjs +0 -564
  206. package/dist/lib/node-esm/MarkdownContainer-URAPTO37.mjs.map +0 -7
  207. package/dist/lib/node-esm/app-graph-serializer-QQ2CTHOQ.mjs.map +0 -7
  208. package/dist/lib/node-esm/artifact-definition-WRG5ZRN5.mjs.map +0 -7
  209. package/dist/lib/node-esm/chunk-4AM4VU3Y.mjs +0 -76
  210. package/dist/lib/node-esm/chunk-4AM4VU3Y.mjs.map +0 -7
  211. package/dist/lib/node-esm/chunk-F6UHVLH7.mjs.map +0 -7
  212. package/dist/lib/node-esm/chunk-JAVD67QP.mjs.map +0 -7
  213. package/dist/lib/node-esm/intent-resolver-7HOMUVHR.mjs +0 -51
  214. package/dist/lib/node-esm/intent-resolver-7HOMUVHR.mjs.map +0 -7
  215. package/dist/lib/node-esm/react-surface-6IKC3G46.mjs +0 -177
  216. package/dist/lib/node-esm/react-surface-6IKC3G46.mjs.map +0 -7
  217. package/dist/lib/node-esm/settings-ZDIFTK4N.mjs.map +0 -7
  218. package/dist/lib/node-esm/state-DWPOKLEY.mjs.map +0 -7
  219. package/dist/lib/node-esm/thread-R2KHZD6V.mjs +0 -38
  220. package/dist/lib/node-esm/thread-R2KHZD6V.mjs.map +0 -7
  221. package/dist/types/src/capabilities/thread.d.ts +0 -6
  222. package/dist/types/src/capabilities/thread.d.ts.map +0 -1
  223. package/dist/types/src/components/MarkdownEditor.d.ts +0 -39
  224. package/dist/types/src/components/MarkdownEditor.d.ts.map +0 -1
  225. package/dist/types/src/components/MarkdownEditor.stories.d.ts.map +0 -1
  226. package/dist/types/src/components/MarkdownSettings.d.ts.map +0 -1
  227. package/src/capabilities/thread.ts +0 -35
@@ -0,0 +1,588 @@
1
+ import "./chunk-ACAID3XF.mjs";
2
+ import {
3
+ MarkdownCapabilities
4
+ } from "./chunk-QVJETNGS.mjs";
5
+ import {
6
+ getFallbackName,
7
+ setFallbackName
8
+ } from "./chunk-77NGW7EO.mjs";
9
+ import {
10
+ DocumentType
11
+ } from "./chunk-ECSM56YC.mjs";
12
+ import {
13
+ MARKDOWN_PLUGIN
14
+ } from "./chunk-JX6XNEHE.mjs";
15
+
16
+ // packages/plugins/plugin-markdown/src/components/MarkdownContainer.tsx
17
+ import { useSignals as _useSignals2 } from "@preact-signals/safe-react/tracking";
18
+ import { Rx } from "@effect-rx/rx-react";
19
+ import React3, { useEffect as useEffect2, useMemo as useMemo4 } from "react";
20
+ import { Capabilities, useAppGraph, useCapabilities as useCapabilities2 } from "@dxos/app-framework";
21
+ import { isInstanceOf } from "@dxos/echo-schema";
22
+ import { fullyQualifiedId as fullyQualifiedId2, getSpace as getSpace2 } from "@dxos/react-client/echo";
23
+ import { DataType } from "@dxos/schema";
24
+
25
+ // packages/plugins/plugin-markdown/src/components/MarkdownEditor/MarkdownEditor.tsx
26
+ import { useSignals as _useSignals } from "@preact-signals/safe-react/tracking";
27
+ import React, { useMemo as useMemo2, useEffect, useCallback } from "react";
28
+ import { useDropzone } from "react-dropzone";
29
+ import { invariant as invariant2 } from "@dxos/invariant";
30
+ import { useThemeContext, useTranslation } from "@dxos/react-ui";
31
+ import { EditorToolbar, createBasicExtensions, createMarkdownExtensions, createThemeExtensions, dropFile, editorSlots, editorGutter, processEditorPayload, stackItemContentEditorClassNames, useFormattingState, useTextEditor, useEditorToolbarState, addLink } from "@dxos/react-ui-editor";
32
+ import { StackItem } from "@dxos/react-ui-stack";
33
+ import { isNotFalsy, isNonNullable } from "@dxos/util";
34
+
35
+ // packages/plugins/plugin-markdown/src/hooks/useSelectCurrentThread.tsx
36
+ import { EditorView } from "@codemirror/view";
37
+ import { Schema } from "effect";
38
+ import { useMemo } from "react";
39
+ import { createResolver, LayoutAction, useIntentResolver } from "@dxos/app-framework";
40
+ import { invariant } from "@dxos/invariant";
41
+ import { Cursor, setSelection } from "@dxos/react-ui-editor";
42
+ var __dxlog_file = "/home/runner/work/dxos/dxos/packages/plugins/plugin-markdown/src/hooks/useSelectCurrentThread.tsx";
43
+ var useSelectCurrentThread = (editorView, documentId2) => {
44
+ const scrollIntoViewResolver = useMemo(() => createResolver({
45
+ intent: LayoutAction.UpdateLayout,
46
+ position: "hoist",
47
+ filter: (data) => {
48
+ if (!Schema.is(LayoutAction.ScrollIntoView.fields.input)(data)) {
49
+ return false;
50
+ }
51
+ return !!editorView && data.subject === documentId2 && !!data.options?.cursor;
52
+ },
53
+ resolve: ({ options: { cursor } }) => {
54
+ invariant(editorView, "Editor view is not defined.", {
55
+ F: __dxlog_file,
56
+ L: 32,
57
+ S: void 0,
58
+ A: [
59
+ "editorView",
60
+ "'Editor view is not defined.'"
61
+ ]
62
+ });
63
+ const range = Cursor.getRangeFromCursor(editorView.state, cursor);
64
+ if (range) {
65
+ const selection = editorView.state.selection.main.from !== range.from ? {
66
+ anchor: range.from
67
+ } : void 0;
68
+ const effects = [
69
+ // NOTE: This does not use the DOM scrollIntoView function.
70
+ EditorView.scrollIntoView(range.from, {
71
+ y: "start",
72
+ yMargin: 96
73
+ })
74
+ ];
75
+ if (selection) {
76
+ effects.push(setSelection.of({
77
+ current: documentId2
78
+ }));
79
+ }
80
+ editorView.dispatch({
81
+ effects,
82
+ selection: selection ? {
83
+ anchor: range.from
84
+ } : void 0
85
+ });
86
+ }
87
+ }
88
+ }), [
89
+ documentId2,
90
+ editorView
91
+ ]);
92
+ useIntentResolver(MARKDOWN_PLUGIN, scrollIntoViewResolver);
93
+ };
94
+
95
+ // packages/plugins/plugin-markdown/src/components/MarkdownEditor/MarkdownEditor.tsx
96
+ var __dxlog_file2 = "/home/runner/work/dxos/dxos/packages/plugins/plugin-markdown/src/components/MarkdownEditor/MarkdownEditor.tsx";
97
+ var MarkdownEditor = ({ id, role = "article", initialValue, extensions, extensionProviders, scrollPastEnd, toolbar, customActions, viewMode, editorStateStore, onFileUpload, onViewModeChange }) => {
98
+ var _effect = _useSignals();
99
+ try {
100
+ const { t } = useTranslation(MARKDOWN_PLUGIN);
101
+ const { themeMode } = useThemeContext();
102
+ const toolbarState = useEditorToolbarState({
103
+ viewMode
104
+ });
105
+ const formattingObserver = useFormattingState(toolbarState);
106
+ const { scrollTo, selection } = useMemo2(() => editorStateStore?.getState(id) ?? {}, [
107
+ id
108
+ ]);
109
+ const providerExtensions = useMemo2(() => extensionProviders?.flatMap((provider) => provider({})).filter(isNonNullable), [
110
+ extensionProviders
111
+ ]);
112
+ const handleDrop = async (view, { files }) => {
113
+ const file = files[0];
114
+ const info = file && onFileUpload ? await onFileUpload(file) : void 0;
115
+ if (info) {
116
+ processEditorPayload(view, {
117
+ type: "image",
118
+ data: info.url
119
+ });
120
+ }
121
+ };
122
+ const { parentRef, view: editorView, focusAttributes } = useTextEditor(() => ({
123
+ initialValue,
124
+ extensions: [
125
+ formattingObserver,
126
+ createBasicExtensions({
127
+ readOnly: viewMode === "readonly",
128
+ placeholder: t("editor placeholder"),
129
+ scrollPastEnd: role === "section" ? false : scrollPastEnd
130
+ }),
131
+ createMarkdownExtensions({
132
+ themeMode
133
+ }),
134
+ createThemeExtensions({
135
+ themeMode,
136
+ syntaxHighlighting: true,
137
+ slots: editorSlots
138
+ }),
139
+ editorGutter,
140
+ role !== "section" && onFileUpload && dropFile({
141
+ onDrop: handleDrop
142
+ }),
143
+ providerExtensions,
144
+ extensions
145
+ ].filter(isNotFalsy),
146
+ ...role !== "section" && {
147
+ id,
148
+ scrollTo,
149
+ selection,
150
+ // TODO(wittjosiah): Autofocus based on layout is racy.
151
+ // autoFocus: layoutPlugin?.provides.layout ? layoutPlugin?.provides.layout.scrollIntoView === id : true,
152
+ moveToEndOfLine: true
153
+ }
154
+ }), [
155
+ id,
156
+ formattingObserver,
157
+ viewMode,
158
+ themeMode,
159
+ extensions,
160
+ providerExtensions
161
+ ]);
162
+ useTest(editorView);
163
+ useSelectCurrentThread(editorView, id);
164
+ const { acceptedFiles, getInputProps, open } = useDropzone({
165
+ multiple: false,
166
+ noDrag: true,
167
+ accept: {
168
+ "image/*": [
169
+ ".jpg",
170
+ ".jpeg",
171
+ ".png",
172
+ ".gif"
173
+ ]
174
+ }
175
+ });
176
+ useEffect(() => {
177
+ if (editorView && onFileUpload && acceptedFiles.length) {
178
+ requestAnimationFrame(async () => {
179
+ const f = acceptedFiles[0];
180
+ const file = new File([
181
+ f
182
+ ], f.name, {
183
+ type: f.type,
184
+ lastModified: f.lastModified
185
+ });
186
+ const info = await onFileUpload(file);
187
+ if (info) {
188
+ addLink({
189
+ url: info.url,
190
+ image: true
191
+ })(editorView);
192
+ }
193
+ });
194
+ }
195
+ }, [
196
+ acceptedFiles,
197
+ editorView,
198
+ onFileUpload
199
+ ]);
200
+ const getView = useCallback(() => {
201
+ invariant2(editorView, void 0, {
202
+ F: __dxlog_file2,
203
+ L: 165,
204
+ S: void 0,
205
+ A: [
206
+ "editorView",
207
+ ""
208
+ ]
209
+ });
210
+ return editorView;
211
+ }, [
212
+ editorView
213
+ ]);
214
+ const handleViewModeChange = useCallback((mode) => onViewModeChange?.(id, mode), [
215
+ id,
216
+ onViewModeChange
217
+ ]);
218
+ const handleImageUpload = useCallback(() => {
219
+ if (onFileUpload) {
220
+ open();
221
+ }
222
+ }, [
223
+ onFileUpload
224
+ ]);
225
+ return /* @__PURE__ */ React.createElement(StackItem.Content, {
226
+ toolbar: !!toolbar
227
+ }, toolbar && /* @__PURE__ */ React.createElement(React.Fragment, null, /* @__PURE__ */ React.createElement(EditorToolbar, {
228
+ attendableId: id,
229
+ role,
230
+ state: toolbarState,
231
+ customActions,
232
+ getView,
233
+ image: handleImageUpload,
234
+ viewMode: handleViewModeChange
235
+ }), /* @__PURE__ */ React.createElement("input", getInputProps())), /* @__PURE__ */ React.createElement("div", {
236
+ role: "none",
237
+ ref: parentRef,
238
+ "data-testid": "composer.markdownRoot",
239
+ "data-toolbar": toolbar ? "enabled" : "disabled",
240
+ className: stackItemContentEditorClassNames(role),
241
+ "data-popover-collision-boundary": true,
242
+ ...focusAttributes
243
+ }));
244
+ } finally {
245
+ _effect.f();
246
+ }
247
+ };
248
+ var useTest = (view) => {
249
+ useEffect(() => {
250
+ const composer = window.composer;
251
+ if (composer) {
252
+ composer.editorView = view;
253
+ }
254
+ }, [
255
+ view
256
+ ]);
257
+ };
258
+
259
+ // packages/plugins/plugin-markdown/src/extensions.tsx
260
+ import React2, { useMemo as useMemo3 } from "react";
261
+ import { createRoot } from "react-dom/client";
262
+ import { createIntent, LayoutAction as LayoutAction2, useCapabilities, useIntentDispatcher } from "@dxos/app-framework";
263
+ import { invariant as invariant3 } from "@dxos/invariant";
264
+ import { createDocAccessor, fullyQualifiedId, getSpace } from "@dxos/react-client/echo";
265
+ import { useIdentity } from "@dxos/react-client/halo";
266
+ import { Icon, ThemeProvider } from "@dxos/react-ui";
267
+ import { InputModeExtensions, createDataExtensions, autocomplete, decorateMarkdown, folding, formattingKeymap, linkTooltip, listener, preview, selectionState, typewriter, EditorView as EditorView2, documentId, Cursor as Cursor2 } from "@dxos/react-ui-editor";
268
+ import { defaultTx } from "@dxos/react-ui-theme";
269
+ import { isNotFalsy as isNotFalsy2 } from "@dxos/util";
270
+ var __dxlog_file3 = "/home/runner/work/dxos/dxos/packages/plugins/plugin-markdown/src/extensions.tsx";
271
+ var useExtensions = ({ document, id, text, settings, selectionManager, viewMode, editorStateStore }) => {
272
+ const { dispatchPromise: dispatch } = useIntentDispatcher();
273
+ const identity = useIdentity();
274
+ const space = getSpace(document) ?? getSpace(text);
275
+ const baseExtensions = useMemo3(() => createBaseExtensions({
276
+ document,
277
+ id,
278
+ text,
279
+ settings,
280
+ selectionManager,
281
+ viewMode,
282
+ dispatch
283
+ }), [
284
+ document,
285
+ id,
286
+ text,
287
+ viewMode,
288
+ dispatch,
289
+ settings,
290
+ settings.editorInputMode,
291
+ settings.folding,
292
+ settings.numberedHeadings,
293
+ settings.debug,
294
+ settings.typewriter,
295
+ selectionManager
296
+ ]);
297
+ const extensionProviders = useCapabilities(MarkdownCapabilities.Extensions);
298
+ const pluginExtensions = useMemo3(() => {
299
+ if (!document) {
300
+ return [];
301
+ }
302
+ return extensionProviders.flat().reduce((acc, provider) => {
303
+ const extension = typeof provider === "function" ? provider({
304
+ document
305
+ }) : provider;
306
+ if (extension) {
307
+ acc.push(extension);
308
+ }
309
+ return acc;
310
+ }, []);
311
+ }, [
312
+ extensionProviders,
313
+ document
314
+ ]);
315
+ return useMemo3(() => [
316
+ // NOTE: Data extensions must be first so that automerge is updated before other extensions compute their state.
317
+ document && createDataExtensions({
318
+ id: document.id,
319
+ text: document.content.target && createDocAccessor(document.content.target, [
320
+ "content"
321
+ ]),
322
+ space,
323
+ identity
324
+ }),
325
+ text && id && createDataExtensions({
326
+ id,
327
+ text: createDocAccessor(text, [
328
+ "content"
329
+ ]),
330
+ space,
331
+ identity
332
+ }),
333
+ selectionState(editorStateStore),
334
+ document && listener({
335
+ onChange: (text2) => setFallbackName(document, text2)
336
+ }),
337
+ baseExtensions,
338
+ pluginExtensions
339
+ ].filter(isNotFalsy2), [
340
+ baseExtensions,
341
+ pluginExtensions,
342
+ document,
343
+ document?.content?.target,
344
+ text,
345
+ id,
346
+ space,
347
+ identity
348
+ ]);
349
+ };
350
+ var createBaseExtensions = ({ document, id, dispatch, settings, selectionManager, query, viewMode }) => {
351
+ const extensions = [
352
+ selectionManager && selectionChange(selectionManager),
353
+ settings.editorInputMode && InputModeExtensions[settings.editorInputMode],
354
+ settings.folding && folding()
355
+ ].filter(isNotFalsy2);
356
+ if (viewMode !== "source") {
357
+ extensions.push(...[
358
+ formattingKeymap(),
359
+ decorateMarkdown({
360
+ selectionChangeDelay: 100,
361
+ numberedHeadings: settings.numberedHeadings ? {
362
+ from: 2
363
+ } : void 0,
364
+ // TODO(wittjosiah): For internal links, consider ignoring the link text and rendering the label of the object being linked to.
365
+ renderLinkButton: dispatch && (document || id) ? createLinkRenderer((id2) => {
366
+ void dispatch(createIntent(LayoutAction2.Open, {
367
+ part: "main",
368
+ subject: [
369
+ id2
370
+ ],
371
+ options: {
372
+ pivotId: document ? fullyQualifiedId(document) : id2
373
+ }
374
+ }));
375
+ }) : void 0
376
+ }),
377
+ linkTooltip(renderLinkTooltip),
378
+ preview()
379
+ ]);
380
+ }
381
+ if (query) {
382
+ extensions.push(autocomplete({
383
+ onSearch: (text) => {
384
+ return query.objects.map((object) => object.name?.length && object.id !== document?.id ? {
385
+ label: object.name,
386
+ // TODO(burdon): Factor out URL builder.
387
+ apply: `[${object.name}](/${fullyQualifiedId(object)})`
388
+ } : void 0).filter(isNotFalsy2);
389
+ }
390
+ }));
391
+ }
392
+ if (settings.debug) {
393
+ const items = settings.typewriter?.split(/[,\n]/) ?? "";
394
+ if (items) {
395
+ extensions.push(typewriter({
396
+ items
397
+ }));
398
+ }
399
+ }
400
+ return extensions;
401
+ };
402
+ var selectionChange = (selectionManager) => {
403
+ return EditorView2.updateListener.of((update) => {
404
+ if (update.selectionSet) {
405
+ const id = update.state.facet(documentId);
406
+ const cursorConverter = update.state.facet(Cursor2.converter);
407
+ const selection = update.state.selection;
408
+ const ranges = selection.ranges.map((range) => ({
409
+ from: cursorConverter.toCursor(range.from),
410
+ to: cursorConverter.toCursor(range.to)
411
+ })).filter(({ from, to }) => to > from);
412
+ selectionManager.updateMultiRange(id, ranges);
413
+ }
414
+ });
415
+ };
416
+ var style = {
417
+ hover: "rounded-sm text-primary-500 hover:text-primary-600 dark:text-primary-500 hover:dark:text-primary-400",
418
+ icon: "inline-block leading-none mis-1 cursor-pointer"
419
+ };
420
+ var createLinkRenderer = (onSelectObject) => (el, { url }) => {
421
+ const isInternal = url.startsWith("/") || // TODO(wittjosiah): This should probably be parsed out on paste?
422
+ url.startsWith(window.location.origin);
423
+ const options = isInternal ? {
424
+ onClick: () => {
425
+ const qualifiedId = url.split("/").at(-1);
426
+ invariant3(qualifiedId, "Invalid link format.", {
427
+ F: __dxlog_file3,
428
+ L: 281,
429
+ S: void 0,
430
+ A: [
431
+ "qualifiedId",
432
+ "'Invalid link format.'"
433
+ ]
434
+ });
435
+ onSelectObject(qualifiedId);
436
+ }
437
+ } : {
438
+ href: url,
439
+ rel: "noreferrer",
440
+ target: "_blank"
441
+ };
442
+ renderRoot(el, /* @__PURE__ */ React2.createElement("a", {
443
+ ...options,
444
+ className: style.hover
445
+ }, /* @__PURE__ */ React2.createElement(Icon, {
446
+ icon: isInternal ? "ph--arrow-square-down--bold" : "ph--arrow-square-out--bold",
447
+ size: 4,
448
+ classNames: style.icon
449
+ })));
450
+ };
451
+ var renderLinkTooltip = (el, { url }) => {
452
+ const web = new URL(url);
453
+ renderRoot(el, /* @__PURE__ */ React2.createElement("a", {
454
+ href: url,
455
+ rel: "noreferrer",
456
+ target: "_blank",
457
+ className: style.hover
458
+ }, web.origin, /* @__PURE__ */ React2.createElement(Icon, {
459
+ icon: "ph--arrow-square-out--bold",
460
+ size: 4,
461
+ classNames: style.icon
462
+ })));
463
+ };
464
+ var renderRoot = (root, node) => {
465
+ createRoot(root).render(/* @__PURE__ */ React2.createElement(ThemeProvider, {
466
+ tx: defaultTx
467
+ }, node));
468
+ return root;
469
+ };
470
+
471
+ // packages/plugins/plugin-markdown/src/components/MarkdownContainer.tsx
472
+ var MarkdownContainer = ({ id, role, object, settings, selectionManager, viewMode, editorStateStore, onViewModeChange }) => {
473
+ var _effect = _useSignals2();
474
+ try {
475
+ const scrollPastEnd = role === "article";
476
+ const doc = isInstanceOf(DocumentType, object) ? object : void 0;
477
+ const text = isInstanceOf(DataType.Text, object) ? object : void 0;
478
+ const extensions = useExtensions({
479
+ document: doc,
480
+ text,
481
+ id,
482
+ settings,
483
+ selectionManager,
484
+ viewMode,
485
+ editorStateStore
486
+ });
487
+ if (doc) {
488
+ return /* @__PURE__ */ React3.createElement(DocumentEditor, {
489
+ id: fullyQualifiedId2(object),
490
+ role,
491
+ document: doc,
492
+ extensions,
493
+ viewMode,
494
+ settings,
495
+ scrollPastEnd,
496
+ onViewModeChange
497
+ });
498
+ } else if (text) {
499
+ return /* @__PURE__ */ React3.createElement(MarkdownEditor, {
500
+ id,
501
+ role,
502
+ initialValue: text.content,
503
+ extensions,
504
+ viewMode,
505
+ toolbar: settings.toolbar,
506
+ inputMode: settings.editorInputMode,
507
+ scrollPastEnd,
508
+ onViewModeChange
509
+ });
510
+ } else {
511
+ return /* @__PURE__ */ React3.createElement(MarkdownEditor, {
512
+ id,
513
+ role,
514
+ initialValue: object.text,
515
+ extensions,
516
+ viewMode,
517
+ toolbar: settings.toolbar,
518
+ inputMode: settings.editorInputMode,
519
+ scrollPastEnd,
520
+ onViewModeChange
521
+ });
522
+ }
523
+ } finally {
524
+ _effect.f();
525
+ }
526
+ };
527
+ var DocumentEditor = ({ id, document: doc, settings, viewMode, ...props }) => {
528
+ var _effect = _useSignals2();
529
+ try {
530
+ const space = getSpace2(doc);
531
+ useEffect2(() => {
532
+ if (typeof doc.fallbackName === "string") {
533
+ return;
534
+ }
535
+ const fallbackName = doc.content?.target?.content ? getFallbackName(doc.content.target.content) : void 0;
536
+ if (fallbackName) {
537
+ doc.fallbackName = fallbackName;
538
+ }
539
+ }, [
540
+ doc,
541
+ doc.content
542
+ ]);
543
+ const [upload] = useCapabilities2(Capabilities.FileUploader);
544
+ const handleFileUpload = useMemo4(() => {
545
+ if (space === void 0 || upload === void 0) {
546
+ return void 0;
547
+ }
548
+ return async (file) => upload(file, space);
549
+ }, [
550
+ space,
551
+ upload
552
+ ]);
553
+ const { graph } = useAppGraph();
554
+ const customActions = useMemo4(() => {
555
+ return Rx.make((get) => {
556
+ const actions = get(graph.actions(id));
557
+ const nodes = actions.filter((action) => action.properties.disposition === "toolbar");
558
+ return {
559
+ nodes,
560
+ edges: nodes.map((node) => ({
561
+ source: "root",
562
+ target: node.id
563
+ }))
564
+ };
565
+ });
566
+ }, [
567
+ graph
568
+ ]);
569
+ return /* @__PURE__ */ React3.createElement(MarkdownEditor, {
570
+ id,
571
+ initialValue: doc.content?.target?.content,
572
+ viewMode,
573
+ toolbar: settings.toolbar,
574
+ customActions,
575
+ inputMode: settings.editorInputMode,
576
+ onFileUpload: handleFileUpload,
577
+ ...props
578
+ });
579
+ } finally {
580
+ _effect.f();
581
+ }
582
+ };
583
+ var MarkdownContainer_default = MarkdownContainer;
584
+ export {
585
+ DocumentEditor,
586
+ MarkdownContainer_default as default
587
+ };
588
+ //# sourceMappingURL=MarkdownContainer-5IEINNQB.mjs.map