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