@dxos/plugin-markdown 0.8.3-staging.0fa589b → 0.8.4-main.1da679c
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-OZ5DHEIA.mjs} +282 -302
- package/dist/lib/browser/MarkdownContainer-OZ5DHEIA.mjs.map +7 -0
- package/dist/lib/browser/{anchor-sort-BMAN2ABT.mjs → anchor-sort-SUD373SW.mjs} +8 -8
- package/dist/lib/browser/anchor-sort-SUD373SW.mjs.map +7 -0
- package/dist/lib/browser/{app-graph-serializer-EI6TEHRQ.mjs → app-graph-serializer-GH7JJZB7.mjs} +16 -17
- package/dist/lib/browser/app-graph-serializer-GH7JJZB7.mjs.map +7 -0
- package/dist/lib/browser/blueprint-definition-JSNGFAZB.mjs +11 -0
- package/dist/lib/browser/blueprint-definition-JSNGFAZB.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-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-SQLSKQRQ.mjs +22 -0
- package/dist/lib/browser/chunk-SQLSKQRQ.mjs.map +7 -0
- package/dist/lib/browser/chunk-UM2GILLR.mjs +102 -0
- package/dist/lib/browser/chunk-UM2GILLR.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-SUBIHVU7.mjs +62 -0
- package/dist/lib/browser/intent-resolver-SUBIHVU7.mjs.map +7 -0
- package/dist/lib/browser/meta.json +1 -1
- package/dist/lib/{node-esm/react-surface-YHFOQTVO.mjs → browser/react-surface-JBQHF4GR.mjs} +64 -55
- package/dist/lib/browser/react-surface-JBQHF4GR.mjs.map +7 -0
- package/dist/lib/browser/{settings-PLH54VC7.mjs → settings-T5ZMC5TH.mjs} +8 -8
- package/dist/lib/browser/settings-T5ZMC5TH.mjs.map +7 -0
- package/dist/lib/browser/{state-KI6PJ6DT.mjs → state-6QODXCSZ.mjs} +10 -10
- package/dist/lib/browser/state-6QODXCSZ.mjs.map +7 -0
- package/dist/lib/browser/toolkit-GNADYSGW.mjs +74 -0
- package/dist/lib/browser/toolkit-GNADYSGW.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-Z4I23DPN.mjs} +282 -302
- package/dist/lib/node-esm/MarkdownContainer-Z4I23DPN.mjs.map +7 -0
- package/dist/lib/node-esm/{anchor-sort-BXL7BE67.mjs → anchor-sort-J2BK2XLZ.mjs} +8 -8
- package/dist/lib/node-esm/anchor-sort-J2BK2XLZ.mjs.map +7 -0
- package/dist/lib/node-esm/{app-graph-serializer-F7DGNF3G.mjs → app-graph-serializer-LRYCXG7N.mjs} +16 -17
- package/dist/lib/node-esm/app-graph-serializer-LRYCXG7N.mjs.map +7 -0
- package/dist/lib/node-esm/blueprint-definition-KX3Y5JHC.mjs +12 -0
- package/dist/lib/node-esm/blueprint-definition-KX3Y5JHC.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-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-KAXL7TWD.mjs +103 -0
- package/dist/lib/node-esm/chunk-KAXL7TWD.mjs.map +7 -0
- package/dist/lib/node-esm/chunk-MJZPYYIH.mjs +24 -0
- package/dist/lib/node-esm/chunk-MJZPYYIH.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-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-YZEGYWGA.mjs +63 -0
- package/dist/lib/node-esm/intent-resolver-YZEGYWGA.mjs.map +7 -0
- package/dist/lib/node-esm/meta.json +1 -1
- package/dist/lib/{browser/react-surface-4B5ELMEW.mjs → node-esm/react-surface-JOXUHXQJ.mjs} +65 -54
- package/dist/lib/node-esm/react-surface-JOXUHXQJ.mjs.map +7 -0
- package/dist/lib/node-esm/{settings-SIY33P3F.mjs → settings-LGG22OH4.mjs} +8 -8
- package/dist/lib/node-esm/settings-LGG22OH4.mjs.map +7 -0
- package/dist/lib/node-esm/{state-LLGVRYKL.mjs → state-W3PECOJX.mjs} +10 -10
- package/dist/lib/node-esm/state-W3PECOJX.mjs.map +7 -0
- package/dist/lib/node-esm/toolkit-ZCFWOGNH.mjs +75 -0
- package/dist/lib/node-esm/toolkit-ZCFWOGNH.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 +51 -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 +39 -31
- package/src/components/MarkdownContainer.tsx +36 -21
- 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,270 @@
|
|
|
1
1
|
import { createRequire } from 'node:module';const require = createRequire(import.meta.url);
|
|
2
|
-
import "./chunk-
|
|
2
|
+
import "./chunk-MJZPYYIH.mjs";
|
|
3
|
+
import "./chunk-KAXL7TWD.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
|
-
import {
|
|
27
|
+
import { useClient } from "@dxos/react-client";
|
|
28
|
+
import { fullyQualifiedId as fullyQualifiedId2, getSpace as getSpace2 } from "@dxos/react-client/echo";
|
|
26
29
|
import { toLocalizedString as toLocalizedString2, useTranslation as useTranslation2 } from "@dxos/react-ui";
|
|
27
30
|
import { insertAtCursor, insertAtLineStart } from "@dxos/react-ui-editor";
|
|
28
31
|
import { DataType } from "@dxos/schema";
|
|
29
32
|
|
|
30
|
-
//
|
|
33
|
+
// src/extensions.tsx
|
|
34
|
+
import React, { useMemo } from "react";
|
|
35
|
+
import { createRoot } from "react-dom/client";
|
|
36
|
+
import { LayoutAction, createIntent, useCapabilities, useIntentDispatcher } from "@dxos/app-framework";
|
|
37
|
+
import { debounceAndThrottle } from "@dxos/async";
|
|
38
|
+
import { invariant } from "@dxos/invariant";
|
|
39
|
+
import { createDocAccessor, fullyQualifiedId, getSpace } from "@dxos/react-client/echo";
|
|
40
|
+
import { useIdentity } from "@dxos/react-client/halo";
|
|
41
|
+
import { Icon, ThemeProvider } from "@dxos/react-ui";
|
|
42
|
+
import { Cursor, EditorView, InputModeExtensions, createDataExtensions, decorateMarkdown, documentId, folding, formattingKeymap, linkTooltip, listener, preview, selectionState, typewriter } from "@dxos/react-ui-editor";
|
|
43
|
+
import { defaultTx } from "@dxos/react-ui-theme";
|
|
44
|
+
import { isNotFalsy } from "@dxos/util";
|
|
45
|
+
var __dxlog_file = "/__w/dxos/dxos/packages/plugins/plugin-markdown/src/extensions.tsx";
|
|
46
|
+
var useExtensions = ({ document, id, text, settings, selectionManager, viewMode, editorStateStore, previewOptions }) => {
|
|
47
|
+
const { dispatchPromise: dispatch } = useIntentDispatcher();
|
|
48
|
+
const identity = useIdentity();
|
|
49
|
+
const space = getSpace(document) ?? getSpace(text);
|
|
50
|
+
const baseExtensions = useMemo(() => createBaseExtensions({
|
|
51
|
+
document,
|
|
52
|
+
id,
|
|
53
|
+
text,
|
|
54
|
+
settings,
|
|
55
|
+
selectionManager,
|
|
56
|
+
viewMode,
|
|
57
|
+
previewOptions,
|
|
58
|
+
dispatch
|
|
59
|
+
}), [
|
|
60
|
+
document,
|
|
61
|
+
id,
|
|
62
|
+
text,
|
|
63
|
+
viewMode,
|
|
64
|
+
dispatch,
|
|
65
|
+
previewOptions,
|
|
66
|
+
settings,
|
|
67
|
+
settings.editorInputMode,
|
|
68
|
+
settings.folding,
|
|
69
|
+
settings.numberedHeadings,
|
|
70
|
+
settings.debug,
|
|
71
|
+
settings.typewriter,
|
|
72
|
+
selectionManager
|
|
73
|
+
]);
|
|
74
|
+
const extensionProviders = useCapabilities(MarkdownCapabilities.Extensions);
|
|
75
|
+
const pluginExtensions = useMemo(() => {
|
|
76
|
+
if (!document) {
|
|
77
|
+
return [];
|
|
78
|
+
}
|
|
79
|
+
return extensionProviders.flat().reduce((acc, provider) => {
|
|
80
|
+
const extension = typeof provider === "function" ? provider({
|
|
81
|
+
document
|
|
82
|
+
}) : provider;
|
|
83
|
+
if (extension) {
|
|
84
|
+
acc.push(extension);
|
|
85
|
+
}
|
|
86
|
+
return acc;
|
|
87
|
+
}, []);
|
|
88
|
+
}, [
|
|
89
|
+
extensionProviders,
|
|
90
|
+
document
|
|
91
|
+
]);
|
|
92
|
+
return useMemo(() => [
|
|
93
|
+
// NOTE: Data extensions must be first so that automerge is updated before other extensions compute their state.
|
|
94
|
+
document && createDataExtensions({
|
|
95
|
+
id: document.id,
|
|
96
|
+
text: document.content.target && createDocAccessor(document.content.target, [
|
|
97
|
+
"content"
|
|
98
|
+
]),
|
|
99
|
+
space,
|
|
100
|
+
identity
|
|
101
|
+
}),
|
|
102
|
+
text && id && createDataExtensions({
|
|
103
|
+
id,
|
|
104
|
+
text: createDocAccessor(text, [
|
|
105
|
+
"content"
|
|
106
|
+
]),
|
|
107
|
+
space,
|
|
108
|
+
identity
|
|
109
|
+
}),
|
|
110
|
+
selectionState(editorStateStore),
|
|
111
|
+
document && listener({
|
|
112
|
+
onChange: (text2) => setFallbackName(document, text2)
|
|
113
|
+
}),
|
|
114
|
+
baseExtensions,
|
|
115
|
+
pluginExtensions
|
|
116
|
+
].filter(isNotFalsy), [
|
|
117
|
+
baseExtensions,
|
|
118
|
+
pluginExtensions,
|
|
119
|
+
document,
|
|
120
|
+
document?.content?.target,
|
|
121
|
+
text,
|
|
122
|
+
id,
|
|
123
|
+
space,
|
|
124
|
+
identity
|
|
125
|
+
]);
|
|
126
|
+
};
|
|
127
|
+
var createBaseExtensions = ({ document, id, dispatch, settings, selectionManager, viewMode, previewOptions }) => {
|
|
128
|
+
const extensions = [
|
|
129
|
+
selectionManager && selectionChange(selectionManager),
|
|
130
|
+
settings.editorInputMode && InputModeExtensions[settings.editorInputMode],
|
|
131
|
+
settings.folding && folding()
|
|
132
|
+
].filter(isNotFalsy);
|
|
133
|
+
if (viewMode !== "source") {
|
|
134
|
+
extensions.push(...[
|
|
135
|
+
formattingKeymap(),
|
|
136
|
+
decorateMarkdown({
|
|
137
|
+
selectionChangeDelay: 100,
|
|
138
|
+
numberedHeadings: settings.numberedHeadings ? {
|
|
139
|
+
from: 2
|
|
140
|
+
} : void 0,
|
|
141
|
+
// TODO(wittjosiah): For internal links, consider ignoring the link text and rendering the label of the object being linked to.
|
|
142
|
+
renderLinkButton: dispatch && (document || id) ? createLinkRenderer((id2) => {
|
|
143
|
+
void dispatch(createIntent(LayoutAction.Open, {
|
|
144
|
+
part: "main",
|
|
145
|
+
subject: [
|
|
146
|
+
id2
|
|
147
|
+
],
|
|
148
|
+
options: {
|
|
149
|
+
pivotId: document ? fullyQualifiedId(document) : id2
|
|
150
|
+
}
|
|
151
|
+
}));
|
|
152
|
+
}) : void 0
|
|
153
|
+
}),
|
|
154
|
+
linkTooltip(renderLinkTooltip),
|
|
155
|
+
preview(previewOptions)
|
|
156
|
+
]);
|
|
157
|
+
}
|
|
158
|
+
if (settings.debug) {
|
|
159
|
+
const items = settings.typewriter?.split(/[,\n]/) ?? "";
|
|
160
|
+
if (items) {
|
|
161
|
+
extensions.push(typewriter({
|
|
162
|
+
items
|
|
163
|
+
}));
|
|
164
|
+
}
|
|
165
|
+
}
|
|
166
|
+
return extensions;
|
|
167
|
+
};
|
|
168
|
+
var selectionChange = (selectionManager) => {
|
|
169
|
+
return EditorView.updateListener.of(debounceAndThrottle((update) => {
|
|
170
|
+
if (update.selectionSet) {
|
|
171
|
+
const id = update.state.facet(documentId);
|
|
172
|
+
const cursorConverter = update.state.facet(Cursor.converter);
|
|
173
|
+
const selection = update.state.selection;
|
|
174
|
+
const ranges = selection.ranges.map((range) => ({
|
|
175
|
+
from: cursorConverter.toCursor(range.from),
|
|
176
|
+
to: cursorConverter.toCursor(range.to)
|
|
177
|
+
})).filter(({ from, to }) => to > from);
|
|
178
|
+
selectionManager.updateMultiRange(id, ranges);
|
|
179
|
+
}
|
|
180
|
+
}, 100));
|
|
181
|
+
};
|
|
182
|
+
var style = {
|
|
183
|
+
hover: "rounded-sm text-primary-500 hover:text-primary-600 dark:text-primary-500 hover:dark:text-primary-400",
|
|
184
|
+
icon: "inline-block leading-none mis-1 cursor-pointer"
|
|
185
|
+
};
|
|
186
|
+
var createLinkRenderer = (onSelectObject) => (el, { url }) => {
|
|
187
|
+
const isInternal = url.startsWith("/") || // TODO(wittjosiah): This should probably be parsed out on paste?
|
|
188
|
+
url.startsWith(window.location.origin);
|
|
189
|
+
const options = isInternal ? {
|
|
190
|
+
onClick: () => {
|
|
191
|
+
const qualifiedId = url.split("/").at(-1);
|
|
192
|
+
invariant(qualifiedId, "Invalid link format.", {
|
|
193
|
+
F: __dxlog_file,
|
|
194
|
+
L: 263,
|
|
195
|
+
S: void 0,
|
|
196
|
+
A: [
|
|
197
|
+
"qualifiedId",
|
|
198
|
+
"'Invalid link format.'"
|
|
199
|
+
]
|
|
200
|
+
});
|
|
201
|
+
onSelectObject(qualifiedId);
|
|
202
|
+
}
|
|
203
|
+
} : {
|
|
204
|
+
href: url,
|
|
205
|
+
rel: "noreferrer",
|
|
206
|
+
target: "_blank"
|
|
207
|
+
};
|
|
208
|
+
renderRoot(el, /* @__PURE__ */ React.createElement("a", {
|
|
209
|
+
...options,
|
|
210
|
+
className: style.hover
|
|
211
|
+
}, /* @__PURE__ */ React.createElement(Icon, {
|
|
212
|
+
icon: isInternal ? "ph--arrow-square-down--bold" : "ph--arrow-square-out--bold",
|
|
213
|
+
size: 4,
|
|
214
|
+
classNames: style.icon
|
|
215
|
+
})));
|
|
216
|
+
};
|
|
217
|
+
var renderLinkTooltip = (el, { url }) => {
|
|
218
|
+
const web = new URL(url);
|
|
219
|
+
renderRoot(el, /* @__PURE__ */ React.createElement("a", {
|
|
220
|
+
href: url,
|
|
221
|
+
rel: "noreferrer",
|
|
222
|
+
target: "_blank",
|
|
223
|
+
className: style.hover
|
|
224
|
+
}, web.origin, /* @__PURE__ */ React.createElement(Icon, {
|
|
225
|
+
icon: "ph--arrow-square-out--bold",
|
|
226
|
+
size: 4,
|
|
227
|
+
classNames: style.icon
|
|
228
|
+
})));
|
|
229
|
+
};
|
|
230
|
+
var renderRoot = (root, node) => {
|
|
231
|
+
createRoot(root).render(/* @__PURE__ */ React.createElement(ThemeProvider, {
|
|
232
|
+
tx: defaultTx
|
|
233
|
+
}, node));
|
|
234
|
+
return root;
|
|
235
|
+
};
|
|
236
|
+
|
|
237
|
+
// src/components/MarkdownEditor/MarkdownEditor.tsx
|
|
31
238
|
import { useSignals as _useSignals } from "@preact-signals/safe-react/tracking";
|
|
32
|
-
import
|
|
239
|
+
import React2, { forwardRef, useCallback, useEffect, useImperativeHandle, useMemo as useMemo3, useRef } from "react";
|
|
33
240
|
import { useDropzone } from "react-dropzone";
|
|
34
|
-
import { invariant as
|
|
241
|
+
import { invariant as invariant3 } from "@dxos/invariant";
|
|
35
242
|
import { toLocalizedString, useThemeContext, useTranslation } from "@dxos/react-ui";
|
|
36
|
-
import {
|
|
243
|
+
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
244
|
import { StackItem } from "@dxos/react-ui-stack";
|
|
38
|
-
import {
|
|
245
|
+
import { isNonNullable, isNotFalsy as isNotFalsy2 } from "@dxos/util";
|
|
39
246
|
|
|
40
|
-
//
|
|
41
|
-
import { EditorView } from "@codemirror/view";
|
|
247
|
+
// src/hooks/useSelectCurrentThread.tsx
|
|
248
|
+
import { EditorView as EditorView2 } from "@codemirror/view";
|
|
42
249
|
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
|
|
250
|
+
import { useMemo as useMemo2 } from "react";
|
|
251
|
+
import { LayoutAction as LayoutAction2, createResolver, useIntentResolver } from "@dxos/app-framework";
|
|
252
|
+
import { invariant as invariant2 } from "@dxos/invariant";
|
|
253
|
+
import { Cursor as Cursor2, setSelection } from "@dxos/react-ui-editor";
|
|
254
|
+
var __dxlog_file2 = "/__w/dxos/dxos/packages/plugins/plugin-markdown/src/hooks/useSelectCurrentThread.tsx";
|
|
48
255
|
var useSelectCurrentThread = (editorView, documentId2) => {
|
|
49
|
-
const scrollIntoViewResolver =
|
|
50
|
-
intent:
|
|
256
|
+
const scrollIntoViewResolver = useMemo2(() => createResolver({
|
|
257
|
+
intent: LayoutAction2.UpdateLayout,
|
|
51
258
|
position: "hoist",
|
|
52
259
|
filter: (data) => {
|
|
53
|
-
if (!Schema.is(
|
|
260
|
+
if (!Schema.is(LayoutAction2.ScrollIntoView.fields.input)(data)) {
|
|
54
261
|
return false;
|
|
55
262
|
}
|
|
56
263
|
return !!editorView && data.subject === documentId2 && !!data.options?.cursor;
|
|
57
264
|
},
|
|
58
265
|
resolve: ({ options: { cursor } }) => {
|
|
59
|
-
|
|
60
|
-
F:
|
|
266
|
+
invariant2(editorView, "Editor view is not defined.", {
|
|
267
|
+
F: __dxlog_file2,
|
|
61
268
|
L: 32,
|
|
62
269
|
S: void 0,
|
|
63
270
|
A: [
|
|
@@ -65,14 +272,14 @@ var useSelectCurrentThread = (editorView, documentId2) => {
|
|
|
65
272
|
"'Editor view is not defined.'"
|
|
66
273
|
]
|
|
67
274
|
});
|
|
68
|
-
const range =
|
|
275
|
+
const range = Cursor2.getRangeFromCursor(editorView.state, cursor);
|
|
69
276
|
if (range) {
|
|
70
277
|
const selection = editorView.state.selection.main.from !== range.from ? {
|
|
71
278
|
anchor: range.from
|
|
72
279
|
} : void 0;
|
|
73
280
|
const effects = [
|
|
74
281
|
// NOTE: This does not use the DOM scrollIntoView function.
|
|
75
|
-
|
|
282
|
+
EditorView2.scrollIntoView(range.from, {
|
|
76
283
|
y: "start",
|
|
77
284
|
yMargin: 96
|
|
78
285
|
})
|
|
@@ -94,12 +301,12 @@ var useSelectCurrentThread = (editorView, documentId2) => {
|
|
|
94
301
|
documentId2,
|
|
95
302
|
editorView
|
|
96
303
|
]);
|
|
97
|
-
useIntentResolver(
|
|
304
|
+
useIntentResolver(meta.id, scrollIntoViewResolver);
|
|
98
305
|
};
|
|
99
306
|
|
|
100
|
-
//
|
|
101
|
-
var
|
|
102
|
-
var MarkdownEditor = ({ extensions:
|
|
307
|
+
// src/components/MarkdownEditor/MarkdownEditor.tsx
|
|
308
|
+
var __dxlog_file3 = "/__w/dxos/dxos/packages/plugins/plugin-markdown/src/components/MarkdownEditor/MarkdownEditor.tsx";
|
|
309
|
+
var MarkdownEditor = ({ extensions: extensionsParam, slashCommandGroups, onLinkQuery, ...props }) => {
|
|
103
310
|
var _effect = _useSignals();
|
|
104
311
|
try {
|
|
105
312
|
const { t } = useTranslation();
|
|
@@ -120,7 +327,7 @@ var MarkdownEditor = ({ extensions: _extensions, slashCommandGroups, onLinkQuery
|
|
|
120
327
|
onLinkQuery,
|
|
121
328
|
slashCommandGroups
|
|
122
329
|
]);
|
|
123
|
-
const options =
|
|
330
|
+
const options = useMemo3(() => {
|
|
124
331
|
const trigger = onLinkQuery ? [
|
|
125
332
|
"/",
|
|
126
333
|
"@"
|
|
@@ -132,45 +339,28 @@ var MarkdownEditor = ({ extensions: _extensions, slashCommandGroups, onLinkQuery
|
|
|
132
339
|
trigger,
|
|
133
340
|
placeholder: {
|
|
134
341
|
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
|
-
}
|
|
342
|
+
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
343
|
},
|
|
150
344
|
getMenu
|
|
151
345
|
};
|
|
152
346
|
}, [
|
|
153
347
|
getMenu
|
|
154
348
|
]);
|
|
155
|
-
const { commandMenu, groupsRef,
|
|
156
|
-
const extensions =
|
|
157
|
-
|
|
349
|
+
const { commandMenu, groupsRef, ...commandMenuProps } = useCommandMenu(options);
|
|
350
|
+
const extensions = useMemo3(() => [
|
|
351
|
+
extensionsParam,
|
|
158
352
|
commandMenu
|
|
159
|
-
].filter(
|
|
160
|
-
|
|
353
|
+
].filter(isNotFalsy2), [
|
|
354
|
+
extensionsParam,
|
|
161
355
|
commandMenu
|
|
162
356
|
]);
|
|
163
|
-
return /* @__PURE__ */
|
|
164
|
-
|
|
165
|
-
...
|
|
166
|
-
}, /* @__PURE__ */
|
|
357
|
+
return /* @__PURE__ */ React2.createElement(CommandMenuProvider, {
|
|
358
|
+
groups: groupsRef.current,
|
|
359
|
+
...commandMenuProps
|
|
360
|
+
}, /* @__PURE__ */ React2.createElement(MarkdownEditorImpl, {
|
|
167
361
|
ref: viewRef,
|
|
168
362
|
...props,
|
|
169
363
|
extensions
|
|
170
|
-
}), /* @__PURE__ */ React.createElement(CommandMenu, {
|
|
171
|
-
groups: groupsRef.current,
|
|
172
|
-
currentItem,
|
|
173
|
-
onSelect
|
|
174
364
|
}));
|
|
175
365
|
} finally {
|
|
176
366
|
_effect.f();
|
|
@@ -179,16 +369,16 @@ var MarkdownEditor = ({ extensions: _extensions, slashCommandGroups, onLinkQuery
|
|
|
179
369
|
var MarkdownEditorImpl = /* @__PURE__ */ forwardRef(({ id, role = "article", initialValue, customActions, editorStateStore, extensions, extensionProviders, scrollPastEnd, toolbar, viewMode, onFileUpload, onViewModeChange }, forwardedRef) => {
|
|
180
370
|
var _effect = _useSignals();
|
|
181
371
|
try {
|
|
182
|
-
const { t } = useTranslation(
|
|
372
|
+
const { t } = useTranslation(meta.id);
|
|
183
373
|
const { themeMode } = useThemeContext();
|
|
184
374
|
const toolbarState = useEditorToolbarState({
|
|
185
375
|
viewMode
|
|
186
376
|
});
|
|
187
377
|
const formattingObserver = useFormattingState(toolbarState);
|
|
188
|
-
const { scrollTo, selection } =
|
|
378
|
+
const { scrollTo, selection } = useMemo3(() => editorStateStore?.getState(id) ?? {}, [
|
|
189
379
|
id
|
|
190
380
|
]);
|
|
191
|
-
const providerExtensions =
|
|
381
|
+
const providerExtensions = useMemo3(() => extensionProviders?.flatMap((provider) => provider({})).filter(isNonNullable), [
|
|
192
382
|
extensionProviders
|
|
193
383
|
]);
|
|
194
384
|
const handleDrop = async (view, { files }) => {
|
|
@@ -208,11 +398,10 @@ var MarkdownEditorImpl = /* @__PURE__ */ forwardRef(({ id, role = "article", ini
|
|
|
208
398
|
createBasicExtensions({
|
|
209
399
|
readOnly: viewMode === "readonly",
|
|
210
400
|
placeholder: t("editor placeholder"),
|
|
211
|
-
scrollPastEnd: role === "section" ? false : scrollPastEnd
|
|
212
|
-
|
|
213
|
-
createMarkdownExtensions({
|
|
214
|
-
themeMode
|
|
401
|
+
scrollPastEnd: role === "section" ? false : scrollPastEnd,
|
|
402
|
+
search: true
|
|
215
403
|
}),
|
|
404
|
+
createMarkdownExtensions(),
|
|
216
405
|
createThemeExtensions({
|
|
217
406
|
themeMode,
|
|
218
407
|
syntaxHighlighting: true,
|
|
@@ -224,7 +413,7 @@ var MarkdownEditorImpl = /* @__PURE__ */ forwardRef(({ id, role = "article", ini
|
|
|
224
413
|
}),
|
|
225
414
|
providerExtensions,
|
|
226
415
|
extensions
|
|
227
|
-
].filter(
|
|
416
|
+
].filter(isNotFalsy2),
|
|
228
417
|
...role !== "section" && {
|
|
229
418
|
id,
|
|
230
419
|
scrollTo,
|
|
@@ -283,9 +472,9 @@ var MarkdownEditorImpl = /* @__PURE__ */ forwardRef(({ id, role = "article", ini
|
|
|
283
472
|
onFileUpload
|
|
284
473
|
]);
|
|
285
474
|
const getView = useCallback(() => {
|
|
286
|
-
|
|
287
|
-
F:
|
|
288
|
-
L:
|
|
475
|
+
invariant3(editorView, void 0, {
|
|
476
|
+
F: __dxlog_file3,
|
|
477
|
+
L: 238,
|
|
289
478
|
S: void 0,
|
|
290
479
|
A: [
|
|
291
480
|
"editorView",
|
|
@@ -307,9 +496,9 @@ var MarkdownEditorImpl = /* @__PURE__ */ forwardRef(({ id, role = "article", ini
|
|
|
307
496
|
}, [
|
|
308
497
|
onFileUpload
|
|
309
498
|
]);
|
|
310
|
-
return /* @__PURE__ */
|
|
499
|
+
return /* @__PURE__ */ React2.createElement(StackItem.Content, {
|
|
311
500
|
toolbar: !!toolbar
|
|
312
|
-
}, toolbar && /* @__PURE__ */
|
|
501
|
+
}, toolbar && /* @__PURE__ */ React2.createElement(React2.Fragment, null, /* @__PURE__ */ React2.createElement(EditorToolbar, {
|
|
313
502
|
attendableId: id,
|
|
314
503
|
role,
|
|
315
504
|
state: toolbarState,
|
|
@@ -317,7 +506,7 @@ var MarkdownEditorImpl = /* @__PURE__ */ forwardRef(({ id, role = "article", ini
|
|
|
317
506
|
getView,
|
|
318
507
|
image: handleImageUpload,
|
|
319
508
|
viewMode: handleViewModeChange
|
|
320
|
-
}), /* @__PURE__ */
|
|
509
|
+
}), /* @__PURE__ */ React2.createElement("input", getInputProps())), /* @__PURE__ */ React2.createElement("div", {
|
|
321
510
|
role: "none",
|
|
322
511
|
ref: parentRef,
|
|
323
512
|
"data-testid": "composer.markdownRoot",
|
|
@@ -341,227 +530,13 @@ var useTest = (view) => {
|
|
|
341
530
|
]);
|
|
342
531
|
};
|
|
343
532
|
|
|
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
|
|
533
|
+
// src/components/MarkdownContainer.tsx
|
|
559
534
|
var MarkdownContainer = ({ id, role, object, settings, selectionManager, viewMode, editorStateStore, onViewModeChange }) => {
|
|
560
535
|
var _effect = _useSignals2();
|
|
561
536
|
try {
|
|
562
537
|
const { t } = useTranslation2();
|
|
563
538
|
const scrollPastEnd = role === "article";
|
|
564
|
-
const doc = Obj.instanceOf(
|
|
539
|
+
const doc = Obj.instanceOf(Markdown_exports.Document, object) ? object : void 0;
|
|
565
540
|
const text = Obj.instanceOf(DataType.Text, object) ? object : void 0;
|
|
566
541
|
const [previewBlocks, setPreviewBlocks] = useState([]);
|
|
567
542
|
const previewOptions = useMemo4(() => ({
|
|
@@ -594,16 +569,22 @@ var MarkdownContainer = ({ id, role, object, settings, selectionManager, viewMod
|
|
|
594
569
|
]);
|
|
595
570
|
const space = getSpace2(object);
|
|
596
571
|
const objectForms = useCapabilities2(SpaceCapabilities.ObjectForm);
|
|
597
|
-
const
|
|
598
|
-
|
|
572
|
+
const schemaWhiteList = useCapabilities2(ClientCapabilities.SchemaWhiteList);
|
|
573
|
+
const filter = useMemo4(() => Filter.or(...objectForms.map((form) => Filter.type(form.objectSchema)), ...schemaWhiteList.flat().map((schema) => Filter.typename(Type.getTypename(schema)))), [
|
|
574
|
+
objectForms,
|
|
575
|
+
schemaWhiteList
|
|
599
576
|
]);
|
|
600
577
|
const onLinkQuery = useCallback2(async (query) => {
|
|
601
578
|
const name = query?.startsWith("@") ? query.slice(1).toLowerCase() : query?.toLowerCase() ?? "";
|
|
602
579
|
const results = await space?.db.query(Query.select(filter)).run();
|
|
603
580
|
const getLabel = (object2) => {
|
|
581
|
+
const label = Obj.getLabel(object2);
|
|
582
|
+
if (label) {
|
|
583
|
+
return label;
|
|
584
|
+
}
|
|
604
585
|
const type = Obj.getTypename(object2);
|
|
605
586
|
const metadata = resolve(type);
|
|
606
|
-
return metadata.label?.(object2) ||
|
|
587
|
+
return metadata.label?.(object2) || [
|
|
607
588
|
"object name placeholder",
|
|
608
589
|
{
|
|
609
590
|
ns: type,
|
|
@@ -619,7 +600,7 @@ var MarkdownContainer = ({ id, role, object, settings, selectionManager, viewMod
|
|
|
619
600
|
label,
|
|
620
601
|
icon: metadata.icon,
|
|
621
602
|
onSelect: (view, head) => {
|
|
622
|
-
const link = `[${label}]
|
|
603
|
+
const link = `[${label}](${Obj.getDXN(object2)})`;
|
|
623
604
|
if (query?.startsWith("@")) {
|
|
624
605
|
insertAtLineStart(view, head, `!${link}
|
|
625
606
|
`);
|
|
@@ -688,18 +669,16 @@ var MarkdownContainer = ({ id, role, object, settings, selectionManager, viewMod
|
|
|
688
669
|
var PreviewBlock = ({ link, el }) => {
|
|
689
670
|
var _effect = _useSignals2();
|
|
690
671
|
try {
|
|
691
|
-
const
|
|
692
|
-
|
|
693
|
-
|
|
694
|
-
const space = useSpace(echoDXN?.spaceId);
|
|
695
|
-
const [subject] = useQuery(space, Query.select(Filter.ids(echoDXN?.echoId ?? "")));
|
|
672
|
+
const client = useClient();
|
|
673
|
+
const dxn = DXN.parse(link.ref);
|
|
674
|
+
const subject = client.graph.ref(dxn).target;
|
|
696
675
|
const data = useMemo4(() => ({
|
|
697
676
|
subject
|
|
698
677
|
}), [
|
|
699
678
|
subject
|
|
700
679
|
]);
|
|
701
680
|
return /* @__PURE__ */ createPortal(/* @__PURE__ */ React3.createElement(Surface, {
|
|
702
|
-
role: "card--
|
|
681
|
+
role: "card--transclusion",
|
|
703
682
|
data,
|
|
704
683
|
limit: 1
|
|
705
684
|
}), el);
|
|
@@ -766,6 +745,7 @@ var DocumentEditor = ({ id, document: doc, settings, viewMode, ...props }) => {
|
|
|
766
745
|
var MarkdownContainer_default = MarkdownContainer;
|
|
767
746
|
export {
|
|
768
747
|
DocumentEditor,
|
|
748
|
+
MarkdownContainer,
|
|
769
749
|
MarkdownContainer_default as default
|
|
770
750
|
};
|
|
771
|
-
//# sourceMappingURL=MarkdownContainer-
|
|
751
|
+
//# sourceMappingURL=MarkdownContainer-Z4I23DPN.mjs.map
|