@dxos/plugin-markdown 0.8.3 → 0.8.4-main.1f223c7
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.
- package/dist/lib/browser/{MarkdownPreview-F4PYFW5L.mjs → MarkdownCard-JLUQITYK.mjs} +18 -18
- package/dist/lib/browser/MarkdownCard-JLUQITYK.mjs.map +7 -0
- package/dist/lib/browser/{MarkdownContainer-EFWQ6DHD.mjs → MarkdownContainer-HMPNQMNG.mjs} +277 -296
- package/dist/lib/browser/MarkdownContainer-HMPNQMNG.mjs.map +7 -0
- package/dist/lib/browser/{anchor-sort-BMAN2ABT.mjs → anchor-sort-E33BSTYF.mjs} +6 -6
- package/dist/lib/browser/anchor-sort-E33BSTYF.mjs.map +7 -0
- package/dist/lib/browser/{app-graph-serializer-EI6TEHRQ.mjs → app-graph-serializer-OX62DNPT.mjs} +14 -15
- package/dist/lib/browser/app-graph-serializer-OX62DNPT.mjs.map +7 -0
- package/dist/lib/browser/blueprint-definition-5YKFUHRU.mjs +11 -0
- package/dist/lib/browser/blueprint-definition-5YKFUHRU.mjs.map +7 -0
- package/dist/lib/browser/chunk-BEE7VQPU.mjs +78 -0
- package/dist/lib/browser/chunk-BEE7VQPU.mjs.map +7 -0
- package/dist/lib/browser/chunk-F6JJLKLN.mjs +102 -0
- package/dist/lib/browser/chunk-F6JJLKLN.mjs.map +7 -0
- package/dist/lib/browser/{chunk-LXSRQPEP.mjs → chunk-LAVZ2W6X.mjs} +9 -10
- package/dist/lib/browser/chunk-LAVZ2W6X.mjs.map +7 -0
- package/dist/lib/browser/chunk-ODB2PTBP.mjs +28 -0
- package/dist/lib/browser/chunk-ODB2PTBP.mjs.map +7 -0
- package/dist/lib/browser/chunk-OY6CGPOO.mjs +16 -0
- package/dist/lib/browser/chunk-OY6CGPOO.mjs.map +7 -0
- package/dist/lib/browser/chunk-XE66SH4O.mjs +22 -0
- package/dist/lib/browser/chunk-XE66SH4O.mjs.map +7 -0
- package/dist/lib/browser/{chunk-D767LUGU.mjs → chunk-Z7P6JGGW.mjs} +14 -12
- package/dist/lib/browser/chunk-Z7P6JGGW.mjs.map +7 -0
- package/dist/lib/browser/index.mjs +38 -25
- package/dist/lib/browser/index.mjs.map +3 -3
- package/dist/lib/browser/intent-resolver-WDDH56JC.mjs +62 -0
- package/dist/lib/browser/intent-resolver-WDDH56JC.mjs.map +7 -0
- package/dist/lib/browser/meta.json +1 -1
- package/dist/lib/browser/{react-surface-4B5ELMEW.mjs → react-surface-NY5K2I5R.mjs} +62 -52
- package/dist/lib/browser/react-surface-NY5K2I5R.mjs.map +7 -0
- package/dist/lib/browser/{settings-PLH54VC7.mjs → settings-AABBTB4Q.mjs} +6 -6
- package/dist/lib/browser/settings-AABBTB4Q.mjs.map +7 -0
- package/dist/lib/browser/{state-KI6PJ6DT.mjs → state-FTHQQX7V.mjs} +8 -8
- package/dist/lib/browser/state-FTHQQX7V.mjs.map +7 -0
- package/dist/lib/browser/toolkit-2AJTHG74.mjs +74 -0
- package/dist/lib/browser/toolkit-2AJTHG74.mjs.map +7 -0
- package/dist/lib/browser/types/index.mjs +6 -14
- package/dist/lib/node-esm/{MarkdownPreview-KFDRV4GC.mjs → MarkdownCard-XL5EVSJ7.mjs} +18 -18
- package/dist/lib/node-esm/MarkdownCard-XL5EVSJ7.mjs.map +7 -0
- package/dist/lib/node-esm/{MarkdownContainer-O3SGMH4G.mjs → MarkdownContainer-5FTROSXN.mjs} +277 -296
- package/dist/lib/node-esm/MarkdownContainer-5FTROSXN.mjs.map +7 -0
- package/dist/lib/node-esm/{anchor-sort-BXL7BE67.mjs → anchor-sort-ALP2NH24.mjs} +6 -6
- package/dist/lib/node-esm/anchor-sort-ALP2NH24.mjs.map +7 -0
- package/dist/lib/node-esm/{app-graph-serializer-F7DGNF3G.mjs → app-graph-serializer-56TD3BMX.mjs} +14 -15
- package/dist/lib/node-esm/app-graph-serializer-56TD3BMX.mjs.map +7 -0
- package/dist/lib/node-esm/blueprint-definition-GVW67KGV.mjs +12 -0
- package/dist/lib/node-esm/blueprint-definition-GVW67KGV.mjs.map +7 -0
- package/dist/lib/node-esm/chunk-CB2R4YIY.mjs +17 -0
- package/dist/lib/node-esm/chunk-CB2R4YIY.mjs.map +7 -0
- package/dist/lib/node-esm/chunk-DVK63TD3.mjs +103 -0
- package/dist/lib/node-esm/chunk-DVK63TD3.mjs.map +7 -0
- package/dist/lib/node-esm/chunk-FXILAQ5F.mjs +79 -0
- package/dist/lib/node-esm/chunk-FXILAQ5F.mjs.map +7 -0
- package/dist/lib/node-esm/{chunk-BWDDFDJY.mjs → chunk-J7A6TUB2.mjs} +14 -12
- package/dist/lib/node-esm/chunk-J7A6TUB2.mjs.map +7 -0
- package/dist/lib/node-esm/{chunk-K26TX5V4.mjs → chunk-O6EXWGGS.mjs} +9 -10
- package/dist/lib/node-esm/chunk-O6EXWGGS.mjs.map +7 -0
- package/dist/lib/node-esm/chunk-Q2BREK2M.mjs +24 -0
- package/dist/lib/node-esm/chunk-Q2BREK2M.mjs.map +7 -0
- package/dist/lib/node-esm/chunk-VCG2U522.mjs +29 -0
- package/dist/lib/node-esm/chunk-VCG2U522.mjs.map +7 -0
- package/dist/lib/node-esm/index.mjs +38 -25
- package/dist/lib/node-esm/index.mjs.map +3 -3
- package/dist/lib/node-esm/intent-resolver-2I5HKCUU.mjs +63 -0
- package/dist/lib/node-esm/intent-resolver-2I5HKCUU.mjs.map +7 -0
- package/dist/lib/node-esm/meta.json +1 -1
- package/dist/lib/node-esm/{react-surface-YHFOQTVO.mjs → react-surface-AUWSLYJS.mjs} +62 -52
- package/dist/lib/node-esm/react-surface-AUWSLYJS.mjs.map +7 -0
- package/dist/lib/node-esm/{settings-SIY33P3F.mjs → settings-CXGR6DH4.mjs} +6 -6
- package/dist/lib/node-esm/settings-CXGR6DH4.mjs.map +7 -0
- package/dist/lib/node-esm/{state-LLGVRYKL.mjs → state-NWMQ3XAI.mjs} +8 -8
- package/dist/lib/node-esm/state-NWMQ3XAI.mjs.map +7 -0
- package/dist/lib/node-esm/toolkit-RC44I2MI.mjs +75 -0
- package/dist/lib/node-esm/toolkit-RC44I2MI.mjs.map +7 -0
- package/dist/lib/node-esm/types/index.mjs +6 -14
- package/dist/types/src/MarkdownPlugin.d.ts.map +1 -1
- package/dist/types/src/capabilities/anchor-sort.d.ts +2 -2
- package/dist/types/src/capabilities/app-graph-serializer.d.ts +1 -1
- package/dist/types/src/capabilities/app-graph-serializer.d.ts.map +1 -1
- package/dist/types/src/capabilities/artifact-definition.d.ts +1 -9
- package/dist/types/src/capabilities/artifact-definition.d.ts.map +1 -1
- package/dist/types/src/capabilities/blueprint-definition.d.ts +5 -0
- package/dist/types/src/capabilities/blueprint-definition.d.ts.map +1 -0
- package/dist/types/src/capabilities/capabilities.d.ts +1 -1
- package/dist/types/src/capabilities/capabilities.d.ts.map +1 -1
- package/dist/types/src/capabilities/index.d.ts +12 -10
- package/dist/types/src/capabilities/index.d.ts.map +1 -1
- package/dist/types/src/capabilities/intent-resolver.d.ts +1 -1
- package/dist/types/src/capabilities/intent-resolver.d.ts.map +1 -1
- package/dist/types/src/capabilities/react-surface.d.ts +1 -1
- package/dist/types/src/capabilities/react-surface.d.ts.map +1 -1
- package/dist/types/src/capabilities/settings.d.ts +1 -1
- package/dist/types/src/capabilities/state.d.ts +2 -2
- package/dist/types/src/capabilities/state.d.ts.map +1 -1
- package/dist/types/src/capabilities/toolkit.d.ts +4 -0
- package/dist/types/src/capabilities/toolkit.d.ts.map +1 -0
- package/dist/types/src/components/MarkdownCard/MarkdownCard.d.ts +7 -0
- package/dist/types/src/components/MarkdownCard/MarkdownCard.d.ts.map +1 -0
- package/dist/types/src/components/MarkdownCard/MarkdownCard.stories.d.ts +10 -0
- package/dist/types/src/components/MarkdownCard/MarkdownCard.stories.d.ts.map +1 -0
- package/dist/types/src/components/MarkdownCard/index.d.ts +4 -0
- package/dist/types/src/components/MarkdownCard/index.d.ts.map +1 -0
- package/dist/types/src/components/MarkdownContainer.d.ts +5 -5
- package/dist/types/src/components/MarkdownContainer.d.ts.map +1 -1
- package/dist/types/src/components/MarkdownContainer.stories.d.ts +50 -4
- package/dist/types/src/components/MarkdownContainer.stories.d.ts.map +1 -1
- package/dist/types/src/components/MarkdownEditor/MarkdownEditor.d.ts +2 -2
- package/dist/types/src/components/MarkdownEditor/MarkdownEditor.d.ts.map +1 -1
- package/dist/types/src/components/MarkdownEditor/MarkdownEditor.stories.d.ts +110 -12
- package/dist/types/src/components/MarkdownEditor/MarkdownEditor.stories.d.ts.map +1 -1
- package/dist/types/src/components/MarkdownSettings/MarkdownSettings.d.ts +2 -2
- package/dist/types/src/components/MarkdownSettings/MarkdownSettings.d.ts.map +1 -1
- package/dist/types/src/components/Suggestions.stories.d.ts +3 -3
- package/dist/types/src/components/Suggestions.stories.d.ts.map +1 -1
- package/dist/types/src/components/Toolbar.stories.d.ts +44 -7
- package/dist/types/src/components/Toolbar.stories.d.ts.map +1 -1
- package/dist/types/src/components/index.d.ts +1 -1
- package/dist/types/src/components/index.d.ts.map +1 -1
- package/dist/types/src/events.d.ts.map +1 -1
- package/dist/types/src/extensions.d.ts +3 -5
- package/dist/types/src/extensions.d.ts.map +1 -1
- package/dist/types/src/functions/diff.d.ts +6 -0
- package/dist/types/src/functions/diff.d.ts.map +1 -0
- package/dist/types/src/functions/index.d.ts +3 -0
- package/dist/types/src/functions/index.d.ts.map +1 -0
- package/dist/types/src/functions/open.d.ts +7 -0
- package/dist/types/src/functions/open.d.ts.map +1 -0
- package/dist/types/src/index.d.ts +2 -1
- package/dist/types/src/index.d.ts.map +1 -1
- package/dist/types/src/meta.d.ts +0 -1
- package/dist/types/src/meta.d.ts.map +1 -1
- package/dist/types/src/translations.d.ts +36 -80
- package/dist/types/src/translations.d.ts.map +1 -1
- package/dist/types/src/types/Markdown.d.ts +43 -0
- package/dist/types/src/types/Markdown.d.ts.map +1 -0
- package/dist/types/src/types/MarkdownAction.d.ts +33 -0
- package/dist/types/src/types/MarkdownAction.d.ts.map +1 -0
- package/dist/types/src/types/index.d.ts +2 -1
- package/dist/types/src/types/index.d.ts.map +1 -1
- package/dist/types/src/types/types.d.ts +4 -59
- package/dist/types/src/types/types.d.ts.map +1 -1
- package/dist/types/src/util.d.ts +12 -3
- package/dist/types/src/util.d.ts.map +1 -1
- package/dist/types/tsconfig.tsbuildinfo +1 -1
- package/package.json +51 -48
- package/src/MarkdownPlugin.tsx +22 -13
- package/src/capabilities/anchor-sort.ts +3 -3
- package/src/capabilities/app-graph-serializer.ts +10 -8
- package/src/capabilities/artifact-definition.ts +19 -24
- package/src/capabilities/blueprint-definition.ts +39 -0
- package/src/capabilities/capabilities.ts +5 -4
- package/src/capabilities/index.ts +3 -1
- package/src/capabilities/intent-resolver.ts +15 -21
- package/src/capabilities/react-surface.tsx +22 -20
- package/src/capabilities/settings.ts +3 -3
- package/src/capabilities/state.ts +8 -8
- package/src/capabilities/toolkit.ts +47 -0
- package/src/components/MarkdownCard/MarkdownCard.stories.tsx +79 -0
- package/src/components/{MarkdownPreview/MarkdownPreview.tsx → MarkdownCard/MarkdownCard.tsx} +21 -17
- package/src/components/MarkdownCard/index.ts +9 -0
- package/src/components/MarkdownContainer.stories.tsx +13 -16
- package/src/components/MarkdownContainer.tsx +31 -17
- package/src/components/MarkdownEditor/MarkdownEditor.stories.tsx +10 -7
- package/src/components/MarkdownEditor/MarkdownEditor.tsx +28 -30
- package/src/components/MarkdownSettings/MarkdownSettings.tsx +81 -78
- package/src/components/Suggestions.stories.tsx +36 -33
- package/src/components/Toolbar.stories.tsx +19 -14
- package/src/components/index.ts +1 -1
- package/src/events.ts +2 -2
- package/src/extensions.tsx +28 -52
- package/src/functions/diff.ts +35 -0
- package/src/functions/index.ts +6 -0
- package/src/functions/open.ts +30 -0
- package/src/hooks/useSelectCurrentThread.tsx +3 -3
- package/src/index.ts +4 -1
- package/src/meta.ts +7 -8
- package/src/translations.ts +10 -7
- package/src/types/Markdown.ts +56 -0
- package/src/types/MarkdownAction.ts +29 -0
- package/src/types/index.ts +2 -1
- package/src/types/types.ts +7 -51
- package/src/util.tsx +20 -6
- package/dist/lib/browser/MarkdownContainer-EFWQ6DHD.mjs.map +0 -7
- package/dist/lib/browser/MarkdownPreview-F4PYFW5L.mjs.map +0 -7
- package/dist/lib/browser/anchor-sort-BMAN2ABT.mjs.map +0 -7
- package/dist/lib/browser/app-graph-serializer-EI6TEHRQ.mjs.map +0 -7
- package/dist/lib/browser/artifact-definition-FQ2R6KPT.mjs +0 -145
- package/dist/lib/browser/artifact-definition-FQ2R6KPT.mjs.map +0 -7
- package/dist/lib/browser/chunk-354IBM5X.mjs +0 -20
- package/dist/lib/browser/chunk-354IBM5X.mjs.map +0 -7
- package/dist/lib/browser/chunk-D767LUGU.mjs.map +0 -7
- package/dist/lib/browser/chunk-JX6XNEHE.mjs +0 -22
- package/dist/lib/browser/chunk-JX6XNEHE.mjs.map +0 -7
- package/dist/lib/browser/chunk-LXSRQPEP.mjs.map +0 -7
- package/dist/lib/browser/chunk-N2D26K6W.mjs +0 -79
- package/dist/lib/browser/chunk-N2D26K6W.mjs.map +0 -7
- package/dist/lib/browser/chunk-QVJETNGS.mjs +0 -16
- package/dist/lib/browser/chunk-QVJETNGS.mjs.map +0 -7
- package/dist/lib/browser/intent-resolver-6ZOABX2J.mjs +0 -64
- package/dist/lib/browser/intent-resolver-6ZOABX2J.mjs.map +0 -7
- package/dist/lib/browser/react-surface-4B5ELMEW.mjs.map +0 -7
- package/dist/lib/browser/settings-PLH54VC7.mjs.map +0 -7
- package/dist/lib/browser/state-KI6PJ6DT.mjs.map +0 -7
- package/dist/lib/node/MarkdownContainer-KYGUEZIL.cjs +0 -783
- package/dist/lib/node/MarkdownContainer-KYGUEZIL.cjs.map +0 -7
- package/dist/lib/node/MarkdownPreview-GCJJCXY6.cjs +0 -103
- package/dist/lib/node/MarkdownPreview-GCJJCXY6.cjs.map +0 -7
- package/dist/lib/node/anchor-sort-V3T4SFFI.cjs +0 -48
- package/dist/lib/node/anchor-sort-V3T4SFFI.cjs.map +0 -7
- package/dist/lib/node/app-graph-serializer-E6BXEDEL.cjs +0 -65
- package/dist/lib/node/app-graph-serializer-E6BXEDEL.cjs.map +0 -7
- package/dist/lib/node/artifact-definition-U27MH5SC.cjs +0 -158
- package/dist/lib/node/artifact-definition-U27MH5SC.cjs.map +0 -7
- package/dist/lib/node/chunk-3HHV4MM6.cjs +0 -101
- package/dist/lib/node/chunk-3HHV4MM6.cjs.map +0 -7
- package/dist/lib/node/chunk-CJLYFGPI.cjs +0 -74
- package/dist/lib/node/chunk-CJLYFGPI.cjs.map +0 -7
- package/dist/lib/node/chunk-FU3XZZCO.cjs +0 -58
- package/dist/lib/node/chunk-FU3XZZCO.cjs.map +0 -7
- package/dist/lib/node/chunk-IFYSBQE5.cjs +0 -35
- package/dist/lib/node/chunk-IFYSBQE5.cjs.map +0 -7
- package/dist/lib/node/chunk-LQAC5HL7.cjs +0 -68
- package/dist/lib/node/chunk-LQAC5HL7.cjs.map +0 -7
- package/dist/lib/node/chunk-ZU5OIHCY.cjs +0 -45
- package/dist/lib/node/chunk-ZU5OIHCY.cjs.map +0 -7
- package/dist/lib/node/index.cjs +0 -165
- package/dist/lib/node/index.cjs.map +0 -7
- package/dist/lib/node/intent-resolver-OEFLRNEJ.cjs +0 -77
- package/dist/lib/node/intent-resolver-OEFLRNEJ.cjs.map +0 -7
- package/dist/lib/node/meta.json +0 -1
- package/dist/lib/node/react-surface-456HQ4KZ.cjs +0 -218
- package/dist/lib/node/react-surface-456HQ4KZ.cjs.map +0 -7
- package/dist/lib/node/settings-E3NUTXJ4.cjs +0 -42
- package/dist/lib/node/settings-E3NUTXJ4.cjs.map +0 -7
- package/dist/lib/node/state-KKDRAG7X.cjs +0 -51
- package/dist/lib/node/state-KKDRAG7X.cjs.map +0 -7
- package/dist/lib/node/types/index.cjs +0 -40
- package/dist/lib/node/types/index.cjs.map +0 -7
- package/dist/lib/node-esm/MarkdownContainer-O3SGMH4G.mjs.map +0 -7
- package/dist/lib/node-esm/MarkdownPreview-KFDRV4GC.mjs.map +0 -7
- package/dist/lib/node-esm/anchor-sort-BXL7BE67.mjs.map +0 -7
- package/dist/lib/node-esm/app-graph-serializer-F7DGNF3G.mjs.map +0 -7
- package/dist/lib/node-esm/artifact-definition-NQOHB6S5.mjs +0 -146
- package/dist/lib/node-esm/artifact-definition-NQOHB6S5.mjs.map +0 -7
- package/dist/lib/node-esm/chunk-BWDDFDJY.mjs.map +0 -7
- package/dist/lib/node-esm/chunk-JXXDCSMW.mjs +0 -17
- package/dist/lib/node-esm/chunk-JXXDCSMW.mjs.map +0 -7
- package/dist/lib/node-esm/chunk-K26TX5V4.mjs.map +0 -7
- package/dist/lib/node-esm/chunk-RX63ZNML.mjs +0 -24
- package/dist/lib/node-esm/chunk-RX63ZNML.mjs.map +0 -7
- package/dist/lib/node-esm/chunk-T2Y2BT53.mjs +0 -80
- package/dist/lib/node-esm/chunk-T2Y2BT53.mjs.map +0 -7
- package/dist/lib/node-esm/chunk-YOABAQ7A.mjs +0 -22
- package/dist/lib/node-esm/chunk-YOABAQ7A.mjs.map +0 -7
- package/dist/lib/node-esm/intent-resolver-CLMSVF2K.mjs +0 -65
- package/dist/lib/node-esm/intent-resolver-CLMSVF2K.mjs.map +0 -7
- package/dist/lib/node-esm/react-surface-YHFOQTVO.mjs.map +0 -7
- package/dist/lib/node-esm/settings-SIY33P3F.mjs.map +0 -7
- package/dist/lib/node-esm/state-LLGVRYKL.mjs.map +0 -7
- package/dist/types/src/components/MarkdownPreview/MarkdownPreview.d.ts +0 -6
- package/dist/types/src/components/MarkdownPreview/MarkdownPreview.d.ts.map +0 -1
- package/dist/types/src/components/MarkdownPreview/MarkdownPreview.stories.d.ts +0 -17
- package/dist/types/src/components/MarkdownPreview/MarkdownPreview.stories.d.ts.map +0 -1
- package/dist/types/src/components/MarkdownPreview/index.d.ts +0 -4
- package/dist/types/src/components/MarkdownPreview/index.d.ts.map +0 -1
- package/dist/types/src/types/schema.d.ts +0 -35
- package/dist/types/src/types/schema.d.ts.map +0 -1
- package/src/components/MarkdownPreview/MarkdownPreview.stories.tsx +0 -74
- package/src/components/MarkdownPreview/index.ts +0 -9
- package/src/types/schema.ts +0 -39
|
@@ -1,63 +1,269 @@
|
|
|
1
1
|
import { createRequire } from 'node:module';const require = createRequire(import.meta.url);
|
|
2
|
-
import "./chunk-
|
|
2
|
+
import "./chunk-Q2BREK2M.mjs";
|
|
3
|
+
import "./chunk-DVK63TD3.mjs";
|
|
3
4
|
import {
|
|
4
5
|
MarkdownCapabilities
|
|
5
|
-
} from "./chunk-
|
|
6
|
+
} from "./chunk-CB2R4YIY.mjs";
|
|
6
7
|
import {
|
|
7
8
|
getFallbackName,
|
|
8
9
|
setFallbackName
|
|
9
|
-
} from "./chunk-
|
|
10
|
+
} from "./chunk-O6EXWGGS.mjs";
|
|
10
11
|
import {
|
|
11
|
-
|
|
12
|
-
} from "./chunk-
|
|
12
|
+
Markdown_exports
|
|
13
|
+
} from "./chunk-FXILAQ5F.mjs";
|
|
13
14
|
import {
|
|
14
|
-
|
|
15
|
-
} from "./chunk-
|
|
15
|
+
meta
|
|
16
|
+
} from "./chunk-VCG2U522.mjs";
|
|
16
17
|
|
|
17
|
-
//
|
|
18
|
+
// src/components/MarkdownContainer.tsx
|
|
18
19
|
import { useSignals as _useSignals2 } from "@preact-signals/safe-react/tracking";
|
|
19
20
|
import { Rx } from "@effect-rx/rx-react";
|
|
20
21
|
import React3, { useCallback as useCallback2, useEffect as useEffect2, useMemo as useMemo4, useState } from "react";
|
|
21
22
|
import { createPortal } from "react-dom";
|
|
22
23
|
import { Capabilities, Surface, useAppGraph, useCapabilities as useCapabilities2, usePluginManager } from "@dxos/app-framework";
|
|
23
|
-
import { DXN, Filter, Obj, Query } from "@dxos/echo";
|
|
24
|
+
import { DXN, Filter, Obj, Query, Type } from "@dxos/echo";
|
|
25
|
+
import { ClientCapabilities } from "@dxos/plugin-client";
|
|
24
26
|
import { SpaceCapabilities } from "@dxos/plugin-space";
|
|
25
27
|
import { fullyQualifiedId as fullyQualifiedId2, getSpace as getSpace2, useQuery, useSpace } 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
|
|
|
30
|
-
//
|
|
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 { isNotFalsy } 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(isNotFalsy), [
|
|
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(isNotFalsy);
|
|
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
|
+
|
|
236
|
+
// src/components/MarkdownEditor/MarkdownEditor.tsx
|
|
31
237
|
import { useSignals as _useSignals } from "@preact-signals/safe-react/tracking";
|
|
32
|
-
import
|
|
238
|
+
import React2, { forwardRef, useCallback, useEffect, useImperativeHandle, useMemo as useMemo3, useRef } from "react";
|
|
33
239
|
import { useDropzone } from "react-dropzone";
|
|
34
|
-
import { invariant as
|
|
240
|
+
import { invariant as invariant3 } from "@dxos/invariant";
|
|
35
241
|
import { toLocalizedString, useThemeContext, useTranslation } from "@dxos/react-ui";
|
|
36
|
-
import {
|
|
242
|
+
import { CommandMenuProvider, Domino, 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 {
|
|
244
|
+
import { isNonNullable, isNotFalsy as isNotFalsy2 } from "@dxos/util";
|
|
39
245
|
|
|
40
|
-
//
|
|
41
|
-
import { EditorView } from "@codemirror/view";
|
|
246
|
+
// src/hooks/useSelectCurrentThread.tsx
|
|
247
|
+
import { EditorView as EditorView2 } from "@codemirror/view";
|
|
42
248
|
import { Schema } from "effect";
|
|
43
|
-
import { useMemo } from "react";
|
|
44
|
-
import {
|
|
45
|
-
import { invariant } from "@dxos/invariant";
|
|
46
|
-
import { Cursor, setSelection } from "@dxos/react-ui-editor";
|
|
47
|
-
var
|
|
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 =
|
|
50
|
-
intent:
|
|
255
|
+
const scrollIntoViewResolver = useMemo2(() => createResolver({
|
|
256
|
+
intent: LayoutAction2.UpdateLayout,
|
|
51
257
|
position: "hoist",
|
|
52
258
|
filter: (data) => {
|
|
53
|
-
if (!Schema.is(
|
|
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
|
-
|
|
60
|
-
F:
|
|
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 =
|
|
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
|
-
|
|
281
|
+
EditorView2.scrollIntoView(range.from, {
|
|
76
282
|
y: "start",
|
|
77
283
|
yMargin: 96
|
|
78
284
|
})
|
|
@@ -94,12 +300,12 @@ var useSelectCurrentThread = (editorView, documentId2) => {
|
|
|
94
300
|
documentId2,
|
|
95
301
|
editorView
|
|
96
302
|
]);
|
|
97
|
-
useIntentResolver(
|
|
303
|
+
useIntentResolver(meta.id, scrollIntoViewResolver);
|
|
98
304
|
};
|
|
99
305
|
|
|
100
|
-
//
|
|
101
|
-
var
|
|
102
|
-
var MarkdownEditor = ({ extensions:
|
|
306
|
+
// src/components/MarkdownEditor/MarkdownEditor.tsx
|
|
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();
|
|
@@ -120,7 +326,7 @@ var MarkdownEditor = ({ extensions: _extensions, slashCommandGroups, onLinkQuery
|
|
|
120
326
|
onLinkQuery,
|
|
121
327
|
slashCommandGroups
|
|
122
328
|
]);
|
|
123
|
-
const options =
|
|
329
|
+
const options = useMemo3(() => {
|
|
124
330
|
const trigger = onLinkQuery ? [
|
|
125
331
|
"/",
|
|
126
332
|
"@"
|
|
@@ -132,45 +338,28 @@ var MarkdownEditor = ({ extensions: _extensions, slashCommandGroups, onLinkQuery
|
|
|
132
338
|
trigger,
|
|
133
339
|
placeholder: {
|
|
134
340
|
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
|
-
}
|
|
341
|
+
content: () => Domino.of("div").child(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
342
|
},
|
|
150
343
|
getMenu
|
|
151
344
|
};
|
|
152
345
|
}, [
|
|
153
346
|
getMenu
|
|
154
347
|
]);
|
|
155
|
-
const { commandMenu, groupsRef,
|
|
156
|
-
const extensions =
|
|
157
|
-
|
|
348
|
+
const { commandMenu, groupsRef, ...commandMenuProps } = useCommandMenu(options);
|
|
349
|
+
const extensions = useMemo3(() => [
|
|
350
|
+
extensionsParam,
|
|
158
351
|
commandMenu
|
|
159
|
-
].filter(
|
|
160
|
-
|
|
352
|
+
].filter(isNotFalsy2), [
|
|
353
|
+
extensionsParam,
|
|
161
354
|
commandMenu
|
|
162
355
|
]);
|
|
163
|
-
return /* @__PURE__ */
|
|
164
|
-
|
|
165
|
-
...
|
|
166
|
-
}, /* @__PURE__ */
|
|
356
|
+
return /* @__PURE__ */ React2.createElement(CommandMenuProvider, {
|
|
357
|
+
groups: groupsRef.current,
|
|
358
|
+
...commandMenuProps
|
|
359
|
+
}, /* @__PURE__ */ React2.createElement(MarkdownEditorImpl, {
|
|
167
360
|
ref: viewRef,
|
|
168
361
|
...props,
|
|
169
362
|
extensions
|
|
170
|
-
}), /* @__PURE__ */ React.createElement(CommandMenu, {
|
|
171
|
-
groups: groupsRef.current,
|
|
172
|
-
currentItem,
|
|
173
|
-
onSelect
|
|
174
363
|
}));
|
|
175
364
|
} finally {
|
|
176
365
|
_effect.f();
|
|
@@ -179,16 +368,16 @@ var MarkdownEditor = ({ extensions: _extensions, slashCommandGroups, onLinkQuery
|
|
|
179
368
|
var MarkdownEditorImpl = /* @__PURE__ */ forwardRef(({ id, role = "article", initialValue, customActions, editorStateStore, extensions, extensionProviders, scrollPastEnd, toolbar, viewMode, onFileUpload, onViewModeChange }, forwardedRef) => {
|
|
180
369
|
var _effect = _useSignals();
|
|
181
370
|
try {
|
|
182
|
-
const { t } = useTranslation(
|
|
371
|
+
const { t } = useTranslation(meta.id);
|
|
183
372
|
const { themeMode } = useThemeContext();
|
|
184
373
|
const toolbarState = useEditorToolbarState({
|
|
185
374
|
viewMode
|
|
186
375
|
});
|
|
187
376
|
const formattingObserver = useFormattingState(toolbarState);
|
|
188
|
-
const { scrollTo, selection } =
|
|
377
|
+
const { scrollTo, selection } = useMemo3(() => editorStateStore?.getState(id) ?? {}, [
|
|
189
378
|
id
|
|
190
379
|
]);
|
|
191
|
-
const providerExtensions =
|
|
380
|
+
const providerExtensions = useMemo3(() => extensionProviders?.flatMap((provider) => provider({})).filter(isNonNullable), [
|
|
192
381
|
extensionProviders
|
|
193
382
|
]);
|
|
194
383
|
const handleDrop = async (view, { files }) => {
|
|
@@ -208,11 +397,10 @@ var MarkdownEditorImpl = /* @__PURE__ */ forwardRef(({ id, role = "article", ini
|
|
|
208
397
|
createBasicExtensions({
|
|
209
398
|
readOnly: viewMode === "readonly",
|
|
210
399
|
placeholder: t("editor placeholder"),
|
|
211
|
-
scrollPastEnd: role === "section" ? false : scrollPastEnd
|
|
212
|
-
|
|
213
|
-
createMarkdownExtensions({
|
|
214
|
-
themeMode
|
|
400
|
+
scrollPastEnd: role === "section" ? false : scrollPastEnd,
|
|
401
|
+
search: true
|
|
215
402
|
}),
|
|
403
|
+
createMarkdownExtensions(),
|
|
216
404
|
createThemeExtensions({
|
|
217
405
|
themeMode,
|
|
218
406
|
syntaxHighlighting: true,
|
|
@@ -224,7 +412,7 @@ var MarkdownEditorImpl = /* @__PURE__ */ forwardRef(({ id, role = "article", ini
|
|
|
224
412
|
}),
|
|
225
413
|
providerExtensions,
|
|
226
414
|
extensions
|
|
227
|
-
].filter(
|
|
415
|
+
].filter(isNotFalsy2),
|
|
228
416
|
...role !== "section" && {
|
|
229
417
|
id,
|
|
230
418
|
scrollTo,
|
|
@@ -283,9 +471,9 @@ var MarkdownEditorImpl = /* @__PURE__ */ forwardRef(({ id, role = "article", ini
|
|
|
283
471
|
onFileUpload
|
|
284
472
|
]);
|
|
285
473
|
const getView = useCallback(() => {
|
|
286
|
-
|
|
287
|
-
F:
|
|
288
|
-
L:
|
|
474
|
+
invariant3(editorView, void 0, {
|
|
475
|
+
F: __dxlog_file3,
|
|
476
|
+
L: 238,
|
|
289
477
|
S: void 0,
|
|
290
478
|
A: [
|
|
291
479
|
"editorView",
|
|
@@ -307,9 +495,9 @@ var MarkdownEditorImpl = /* @__PURE__ */ forwardRef(({ id, role = "article", ini
|
|
|
307
495
|
}, [
|
|
308
496
|
onFileUpload
|
|
309
497
|
]);
|
|
310
|
-
return /* @__PURE__ */
|
|
498
|
+
return /* @__PURE__ */ React2.createElement(StackItem.Content, {
|
|
311
499
|
toolbar: !!toolbar
|
|
312
|
-
}, toolbar && /* @__PURE__ */
|
|
500
|
+
}, toolbar && /* @__PURE__ */ React2.createElement(React2.Fragment, null, /* @__PURE__ */ React2.createElement(EditorToolbar, {
|
|
313
501
|
attendableId: id,
|
|
314
502
|
role,
|
|
315
503
|
state: toolbarState,
|
|
@@ -317,7 +505,7 @@ var MarkdownEditorImpl = /* @__PURE__ */ forwardRef(({ id, role = "article", ini
|
|
|
317
505
|
getView,
|
|
318
506
|
image: handleImageUpload,
|
|
319
507
|
viewMode: handleViewModeChange
|
|
320
|
-
}), /* @__PURE__ */
|
|
508
|
+
}), /* @__PURE__ */ React2.createElement("input", getInputProps())), /* @__PURE__ */ React2.createElement("div", {
|
|
321
509
|
role: "none",
|
|
322
510
|
ref: parentRef,
|
|
323
511
|
"data-testid": "composer.markdownRoot",
|
|
@@ -341,227 +529,13 @@ var useTest = (view) => {
|
|
|
341
529
|
]);
|
|
342
530
|
};
|
|
343
531
|
|
|
344
|
-
//
|
|
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 { invariant as invariant3 } from "@dxos/invariant";
|
|
349
|
-
import { createDocAccessor, fullyQualifiedId, getSpace } from "@dxos/react-client/echo";
|
|
350
|
-
import { useIdentity } from "@dxos/react-client/halo";
|
|
351
|
-
import { Icon, ThemeProvider } from "@dxos/react-ui";
|
|
352
|
-
import { InputModeExtensions, createDataExtensions, autocomplete, decorateMarkdown, folding, formattingKeymap, linkTooltip, listener, preview, selectionState, typewriter, EditorView as EditorView2, documentId, Cursor as Cursor2 } from "@dxos/react-ui-editor";
|
|
353
|
-
import { defaultTx } from "@dxos/react-ui-theme";
|
|
354
|
-
import { isNotFalsy as isNotFalsy2 } from "@dxos/util";
|
|
355
|
-
var __dxlog_file3 = "/home/runner/work/dxos/dxos/packages/plugins/plugin-markdown/src/extensions.tsx";
|
|
356
|
-
var useExtensions = ({ document, id, text, settings, selectionManager, viewMode, editorStateStore, previewOptions }) => {
|
|
357
|
-
const { dispatchPromise: dispatch } = useIntentDispatcher();
|
|
358
|
-
const identity = useIdentity();
|
|
359
|
-
const space = getSpace(document) ?? getSpace(text);
|
|
360
|
-
const baseExtensions = useMemo3(() => createBaseExtensions({
|
|
361
|
-
document,
|
|
362
|
-
id,
|
|
363
|
-
text,
|
|
364
|
-
settings,
|
|
365
|
-
selectionManager,
|
|
366
|
-
viewMode,
|
|
367
|
-
previewOptions,
|
|
368
|
-
dispatch
|
|
369
|
-
}), [
|
|
370
|
-
document,
|
|
371
|
-
id,
|
|
372
|
-
text,
|
|
373
|
-
viewMode,
|
|
374
|
-
dispatch,
|
|
375
|
-
previewOptions,
|
|
376
|
-
settings,
|
|
377
|
-
settings.editorInputMode,
|
|
378
|
-
settings.folding,
|
|
379
|
-
settings.numberedHeadings,
|
|
380
|
-
settings.debug,
|
|
381
|
-
settings.typewriter,
|
|
382
|
-
selectionManager
|
|
383
|
-
]);
|
|
384
|
-
const extensionProviders = useCapabilities(MarkdownCapabilities.Extensions);
|
|
385
|
-
const pluginExtensions = useMemo3(() => {
|
|
386
|
-
if (!document) {
|
|
387
|
-
return [];
|
|
388
|
-
}
|
|
389
|
-
return extensionProviders.flat().reduce((acc, provider) => {
|
|
390
|
-
const extension = typeof provider === "function" ? provider({
|
|
391
|
-
document
|
|
392
|
-
}) : provider;
|
|
393
|
-
if (extension) {
|
|
394
|
-
acc.push(extension);
|
|
395
|
-
}
|
|
396
|
-
return acc;
|
|
397
|
-
}, []);
|
|
398
|
-
}, [
|
|
399
|
-
extensionProviders,
|
|
400
|
-
document
|
|
401
|
-
]);
|
|
402
|
-
return useMemo3(() => [
|
|
403
|
-
// NOTE: Data extensions must be first so that automerge is updated before other extensions compute their state.
|
|
404
|
-
document && createDataExtensions({
|
|
405
|
-
id: document.id,
|
|
406
|
-
text: document.content.target && createDocAccessor(document.content.target, [
|
|
407
|
-
"content"
|
|
408
|
-
]),
|
|
409
|
-
space,
|
|
410
|
-
identity
|
|
411
|
-
}),
|
|
412
|
-
text && id && createDataExtensions({
|
|
413
|
-
id,
|
|
414
|
-
text: createDocAccessor(text, [
|
|
415
|
-
"content"
|
|
416
|
-
]),
|
|
417
|
-
space,
|
|
418
|
-
identity
|
|
419
|
-
}),
|
|
420
|
-
selectionState(editorStateStore),
|
|
421
|
-
document && listener({
|
|
422
|
-
onChange: (text2) => setFallbackName(document, text2)
|
|
423
|
-
}),
|
|
424
|
-
baseExtensions,
|
|
425
|
-
pluginExtensions
|
|
426
|
-
].filter(isNotFalsy2), [
|
|
427
|
-
baseExtensions,
|
|
428
|
-
pluginExtensions,
|
|
429
|
-
document,
|
|
430
|
-
document?.content?.target,
|
|
431
|
-
text,
|
|
432
|
-
id,
|
|
433
|
-
space,
|
|
434
|
-
identity
|
|
435
|
-
]);
|
|
436
|
-
};
|
|
437
|
-
var createBaseExtensions = ({ document, id, dispatch, settings, selectionManager, query, viewMode, previewOptions }) => {
|
|
438
|
-
const extensions = [
|
|
439
|
-
selectionManager && selectionChange(selectionManager),
|
|
440
|
-
settings.editorInputMode && InputModeExtensions[settings.editorInputMode],
|
|
441
|
-
settings.folding && folding()
|
|
442
|
-
].filter(isNotFalsy2);
|
|
443
|
-
if (viewMode !== "source") {
|
|
444
|
-
extensions.push(...[
|
|
445
|
-
formattingKeymap(),
|
|
446
|
-
decorateMarkdown({
|
|
447
|
-
selectionChangeDelay: 100,
|
|
448
|
-
numberedHeadings: settings.numberedHeadings ? {
|
|
449
|
-
from: 2
|
|
450
|
-
} : void 0,
|
|
451
|
-
// TODO(wittjosiah): For internal links, consider ignoring the link text and rendering the label of the object being linked to.
|
|
452
|
-
renderLinkButton: dispatch && (document || id) ? createLinkRenderer((id2) => {
|
|
453
|
-
void dispatch(createIntent(LayoutAction2.Open, {
|
|
454
|
-
part: "main",
|
|
455
|
-
subject: [
|
|
456
|
-
id2
|
|
457
|
-
],
|
|
458
|
-
options: {
|
|
459
|
-
pivotId: document ? fullyQualifiedId(document) : id2
|
|
460
|
-
}
|
|
461
|
-
}));
|
|
462
|
-
}) : void 0
|
|
463
|
-
}),
|
|
464
|
-
linkTooltip(renderLinkTooltip),
|
|
465
|
-
preview(previewOptions)
|
|
466
|
-
]);
|
|
467
|
-
}
|
|
468
|
-
if (query) {
|
|
469
|
-
extensions.push(autocomplete({
|
|
470
|
-
onSearch: (text) => {
|
|
471
|
-
return query.objects.map((object) => object.name?.length && object.id !== document?.id ? {
|
|
472
|
-
label: object.name,
|
|
473
|
-
// TODO(burdon): Factor out URL builder.
|
|
474
|
-
apply: `[${object.name}](/${fullyQualifiedId(object)})`
|
|
475
|
-
} : void 0).filter(isNotFalsy2);
|
|
476
|
-
}
|
|
477
|
-
}));
|
|
478
|
-
}
|
|
479
|
-
if (settings.debug) {
|
|
480
|
-
const items = settings.typewriter?.split(/[,\n]/) ?? "";
|
|
481
|
-
if (items) {
|
|
482
|
-
extensions.push(typewriter({
|
|
483
|
-
items
|
|
484
|
-
}));
|
|
485
|
-
}
|
|
486
|
-
}
|
|
487
|
-
return extensions;
|
|
488
|
-
};
|
|
489
|
-
var selectionChange = (selectionManager) => {
|
|
490
|
-
return EditorView2.updateListener.of((update) => {
|
|
491
|
-
if (update.selectionSet) {
|
|
492
|
-
const id = update.state.facet(documentId);
|
|
493
|
-
const cursorConverter = update.state.facet(Cursor2.converter);
|
|
494
|
-
const selection = update.state.selection;
|
|
495
|
-
const ranges = selection.ranges.map((range) => ({
|
|
496
|
-
from: cursorConverter.toCursor(range.from),
|
|
497
|
-
to: cursorConverter.toCursor(range.to)
|
|
498
|
-
})).filter(({ from, to }) => to > from);
|
|
499
|
-
selectionManager.updateMultiRange(id, ranges);
|
|
500
|
-
}
|
|
501
|
-
});
|
|
502
|
-
};
|
|
503
|
-
var style = {
|
|
504
|
-
hover: "rounded-sm text-primary-500 hover:text-primary-600 dark:text-primary-500 hover:dark:text-primary-400",
|
|
505
|
-
icon: "inline-block leading-none mis-1 cursor-pointer"
|
|
506
|
-
};
|
|
507
|
-
var createLinkRenderer = (onSelectObject) => (el, { url }) => {
|
|
508
|
-
const isInternal = url.startsWith("/") || // TODO(wittjosiah): This should probably be parsed out on paste?
|
|
509
|
-
url.startsWith(window.location.origin);
|
|
510
|
-
const options = isInternal ? {
|
|
511
|
-
onClick: () => {
|
|
512
|
-
const qualifiedId = url.split("/").at(-1);
|
|
513
|
-
invariant3(qualifiedId, "Invalid link format.", {
|
|
514
|
-
F: __dxlog_file3,
|
|
515
|
-
L: 287,
|
|
516
|
-
S: void 0,
|
|
517
|
-
A: [
|
|
518
|
-
"qualifiedId",
|
|
519
|
-
"'Invalid link format.'"
|
|
520
|
-
]
|
|
521
|
-
});
|
|
522
|
-
onSelectObject(qualifiedId);
|
|
523
|
-
}
|
|
524
|
-
} : {
|
|
525
|
-
href: url,
|
|
526
|
-
rel: "noreferrer",
|
|
527
|
-
target: "_blank"
|
|
528
|
-
};
|
|
529
|
-
renderRoot(el, /* @__PURE__ */ React2.createElement("a", {
|
|
530
|
-
...options,
|
|
531
|
-
className: style.hover
|
|
532
|
-
}, /* @__PURE__ */ React2.createElement(Icon, {
|
|
533
|
-
icon: isInternal ? "ph--arrow-square-down--bold" : "ph--arrow-square-out--bold",
|
|
534
|
-
size: 4,
|
|
535
|
-
classNames: style.icon
|
|
536
|
-
})));
|
|
537
|
-
};
|
|
538
|
-
var renderLinkTooltip = (el, { url }) => {
|
|
539
|
-
const web = new URL(url);
|
|
540
|
-
renderRoot(el, /* @__PURE__ */ React2.createElement("a", {
|
|
541
|
-
href: url,
|
|
542
|
-
rel: "noreferrer",
|
|
543
|
-
target: "_blank",
|
|
544
|
-
className: style.hover
|
|
545
|
-
}, web.origin, /* @__PURE__ */ React2.createElement(Icon, {
|
|
546
|
-
icon: "ph--arrow-square-out--bold",
|
|
547
|
-
size: 4,
|
|
548
|
-
classNames: style.icon
|
|
549
|
-
})));
|
|
550
|
-
};
|
|
551
|
-
var renderRoot = (root, node) => {
|
|
552
|
-
createRoot(root).render(/* @__PURE__ */ React2.createElement(ThemeProvider, {
|
|
553
|
-
tx: defaultTx
|
|
554
|
-
}, node));
|
|
555
|
-
return root;
|
|
556
|
-
};
|
|
557
|
-
|
|
558
|
-
// packages/plugins/plugin-markdown/src/components/MarkdownContainer.tsx
|
|
532
|
+
// src/components/MarkdownContainer.tsx
|
|
559
533
|
var MarkdownContainer = ({ id, role, object, settings, selectionManager, viewMode, editorStateStore, onViewModeChange }) => {
|
|
560
534
|
var _effect = _useSignals2();
|
|
561
535
|
try {
|
|
562
536
|
const { t } = useTranslation2();
|
|
563
537
|
const scrollPastEnd = role === "article";
|
|
564
|
-
const doc = Obj.instanceOf(
|
|
538
|
+
const doc = Obj.instanceOf(Markdown_exports.Document, object) ? object : void 0;
|
|
565
539
|
const text = Obj.instanceOf(DataType.Text, object) ? object : void 0;
|
|
566
540
|
const [previewBlocks, setPreviewBlocks] = useState([]);
|
|
567
541
|
const previewOptions = useMemo4(() => ({
|
|
@@ -594,16 +568,22 @@ var MarkdownContainer = ({ id, role, object, settings, selectionManager, viewMod
|
|
|
594
568
|
]);
|
|
595
569
|
const space = getSpace2(object);
|
|
596
570
|
const objectForms = useCapabilities2(SpaceCapabilities.ObjectForm);
|
|
597
|
-
const
|
|
598
|
-
|
|
571
|
+
const schemaWhiteList = useCapabilities2(ClientCapabilities.SchemaWhiteList);
|
|
572
|
+
const filter = useMemo4(() => Filter.or(...objectForms.map((form) => Filter.type(form.objectSchema)), ...schemaWhiteList.flat().map((schema) => Filter.typename(Type.getTypename(schema)))), [
|
|
573
|
+
objectForms,
|
|
574
|
+
schemaWhiteList
|
|
599
575
|
]);
|
|
600
576
|
const onLinkQuery = useCallback2(async (query) => {
|
|
601
577
|
const name = query?.startsWith("@") ? query.slice(1).toLowerCase() : query?.toLowerCase() ?? "";
|
|
602
578
|
const results = await space?.db.query(Query.select(filter)).run();
|
|
603
579
|
const getLabel = (object2) => {
|
|
580
|
+
const label = Obj.getLabel(object2);
|
|
581
|
+
if (label) {
|
|
582
|
+
return label;
|
|
583
|
+
}
|
|
604
584
|
const type = Obj.getTypename(object2);
|
|
605
585
|
const metadata = resolve(type);
|
|
606
|
-
return metadata.label?.(object2) ||
|
|
586
|
+
return metadata.label?.(object2) || [
|
|
607
587
|
"object name placeholder",
|
|
608
588
|
{
|
|
609
589
|
ns: type,
|
|
@@ -619,7 +599,7 @@ var MarkdownContainer = ({ id, role, object, settings, selectionManager, viewMod
|
|
|
619
599
|
label,
|
|
620
600
|
icon: metadata.icon,
|
|
621
601
|
onSelect: (view, head) => {
|
|
622
|
-
const link = `[${label}]
|
|
602
|
+
const link = `[${label}](${Obj.getDXN(object2)})`;
|
|
623
603
|
if (query?.startsWith("@")) {
|
|
624
604
|
insertAtLineStart(view, head, `!${link}
|
|
625
605
|
`);
|
|
@@ -699,7 +679,7 @@ var PreviewBlock = ({ link, el }) => {
|
|
|
699
679
|
subject
|
|
700
680
|
]);
|
|
701
681
|
return /* @__PURE__ */ createPortal(/* @__PURE__ */ React3.createElement(Surface, {
|
|
702
|
-
role: "card--
|
|
682
|
+
role: "card--transclusion",
|
|
703
683
|
data,
|
|
704
684
|
limit: 1
|
|
705
685
|
}), el);
|
|
@@ -766,6 +746,7 @@ var DocumentEditor = ({ id, document: doc, settings, viewMode, ...props }) => {
|
|
|
766
746
|
var MarkdownContainer_default = MarkdownContainer;
|
|
767
747
|
export {
|
|
768
748
|
DocumentEditor,
|
|
749
|
+
MarkdownContainer,
|
|
769
750
|
MarkdownContainer_default as default
|
|
770
751
|
};
|
|
771
|
-
//# sourceMappingURL=MarkdownContainer-
|
|
752
|
+
//# sourceMappingURL=MarkdownContainer-5FTROSXN.mjs.map
|