@dxos/plugin-markdown 0.8.4-main.c1de068 → 0.8.4-main.dedc0f3
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-S3C7CGAV.mjs → MarkdownCard-JLUQITYK.mjs} +16 -16
- package/dist/lib/browser/MarkdownCard-JLUQITYK.mjs.map +7 -0
- package/dist/lib/browser/{MarkdownContainer-F3WEEIBX.mjs → MarkdownContainer-JW7TRDSA.mjs} +256 -279
- package/dist/lib/browser/MarkdownContainer-JW7TRDSA.mjs.map +7 -0
- package/dist/lib/browser/{anchor-sort-UKJJ7ZNP.mjs → anchor-sort-E33BSTYF.mjs} +5 -5
- package/dist/lib/browser/anchor-sort-E33BSTYF.mjs.map +7 -0
- package/dist/lib/browser/{app-graph-serializer-ICLAF662.mjs → app-graph-serializer-OX62DNPT.mjs} +10 -11
- 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-LFML7LC6.mjs → chunk-LAVZ2W6X.mjs} +8 -9
- 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-SUOK6YMI.mjs +22 -0
- package/dist/lib/browser/chunk-SUOK6YMI.mjs.map +7 -0
- package/dist/lib/browser/{chunk-LHDCHDBW.mjs → chunk-Z7P6JGGW.mjs} +6 -5
- package/dist/lib/browser/chunk-Z7P6JGGW.mjs.map +7 -0
- package/dist/lib/browser/index.mjs +34 -21
- 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-C3Z423TV.mjs → react-surface-L3NTMD4D.mjs} +53 -44
- package/dist/lib/browser/react-surface-L3NTMD4D.mjs.map +7 -0
- package/dist/lib/browser/{settings-KN75ZQY6.mjs → settings-AABBTB4Q.mjs} +5 -5
- package/dist/lib/browser/settings-AABBTB4Q.mjs.map +7 -0
- package/dist/lib/browser/{state-LZWTAS65.mjs → state-FTHQQX7V.mjs} +7 -7
- 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-77UFEWXT.mjs → MarkdownCard-XL5EVSJ7.mjs} +16 -16
- package/dist/lib/node-esm/MarkdownCard-XL5EVSJ7.mjs.map +7 -0
- package/dist/lib/node-esm/{MarkdownContainer-VOUHL6IU.mjs → MarkdownContainer-HRGQXIXP.mjs} +256 -279
- package/dist/lib/node-esm/MarkdownContainer-HRGQXIXP.mjs.map +7 -0
- package/dist/lib/node-esm/{anchor-sort-IPIS5D5B.mjs → anchor-sort-ALP2NH24.mjs} +5 -5
- package/dist/lib/node-esm/anchor-sort-ALP2NH24.mjs.map +7 -0
- package/dist/lib/node-esm/{app-graph-serializer-FLBXQKKR.mjs → app-graph-serializer-56TD3BMX.mjs} +10 -11
- 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-ACFGXH2K.mjs → chunk-CB2R4YIY.mjs} +5 -5
- 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-VIR2ABYE.mjs → chunk-J7A6TUB2.mjs} +6 -5
- package/dist/lib/node-esm/chunk-J7A6TUB2.mjs.map +7 -0
- package/dist/lib/node-esm/chunk-JC2YWB5D.mjs +24 -0
- package/dist/lib/node-esm/chunk-JC2YWB5D.mjs.map +7 -0
- package/dist/lib/node-esm/{chunk-CWTFQSN7.mjs → chunk-O6EXWGGS.mjs} +8 -9
- 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 +34 -21
- 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-TTTBYNI2.mjs → react-surface-YZSZFR5D.mjs} +53 -44
- package/dist/lib/node-esm/react-surface-YZSZFR5D.mjs.map +7 -0
- package/dist/lib/node-esm/{settings-KVP7TVX7.mjs → settings-CXGR6DH4.mjs} +5 -5
- package/dist/lib/node-esm/settings-CXGR6DH4.mjs.map +7 -0
- package/dist/lib/node-esm/{state-NW3W4JCQ.mjs → state-NWMQ3XAI.mjs} +7 -7
- 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 +2 -2
- 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 +3 -2
- 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 +3 -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 +49 -44
- package/src/MarkdownPlugin.tsx +21 -12
- package/src/capabilities/anchor-sort.ts +3 -3
- package/src/capabilities/app-graph-serializer.ts +7 -5
- package/src/capabilities/artifact-definition.ts +18 -23
- 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 +21 -19
- 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} +11 -9
- package/src/components/MarkdownCard/index.ts +9 -0
- package/src/components/MarkdownContainer.stories.tsx +12 -15
- package/src/components/MarkdownContainer.tsx +10 -9
- package/src/components/MarkdownEditor/MarkdownEditor.stories.tsx +10 -7
- package/src/components/MarkdownEditor/MarkdownEditor.tsx +24 -24
- package/src/components/MarkdownSettings/MarkdownSettings.tsx +81 -78
- package/src/components/Suggestions.stories.tsx +24 -27
- 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 +10 -38
- 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 +3 -2
- 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 +6 -50
- package/src/util.tsx +20 -6
- package/dist/lib/browser/MarkdownContainer-F3WEEIBX.mjs.map +0 -7
- package/dist/lib/browser/MarkdownPreview-S3C7CGAV.mjs.map +0 -7
- package/dist/lib/browser/anchor-sort-UKJJ7ZNP.mjs.map +0 -7
- package/dist/lib/browser/app-graph-serializer-ICLAF662.mjs.map +0 -7
- package/dist/lib/browser/artifact-definition-R2YYWOPN.mjs +0 -145
- package/dist/lib/browser/artifact-definition-R2YYWOPN.mjs.map +0 -7
- package/dist/lib/browser/chunk-777RIED6.mjs +0 -16
- package/dist/lib/browser/chunk-777RIED6.mjs.map +0 -7
- package/dist/lib/browser/chunk-EPTSAJZM.mjs +0 -22
- package/dist/lib/browser/chunk-EPTSAJZM.mjs.map +0 -7
- package/dist/lib/browser/chunk-LFML7LC6.mjs.map +0 -7
- package/dist/lib/browser/chunk-LHDCHDBW.mjs.map +0 -7
- package/dist/lib/browser/chunk-PHTD5DTR.mjs +0 -20
- package/dist/lib/browser/chunk-PHTD5DTR.mjs.map +0 -7
- package/dist/lib/browser/chunk-UANWRJZU.mjs +0 -79
- package/dist/lib/browser/chunk-UANWRJZU.mjs.map +0 -7
- package/dist/lib/browser/intent-resolver-3MXYO3MW.mjs +0 -64
- package/dist/lib/browser/intent-resolver-3MXYO3MW.mjs.map +0 -7
- package/dist/lib/browser/react-surface-C3Z423TV.mjs.map +0 -7
- package/dist/lib/browser/settings-KN75ZQY6.mjs.map +0 -7
- package/dist/lib/browser/state-LZWTAS65.mjs.map +0 -7
- package/dist/lib/node-esm/MarkdownContainer-VOUHL6IU.mjs.map +0 -7
- package/dist/lib/node-esm/MarkdownPreview-77UFEWXT.mjs.map +0 -7
- package/dist/lib/node-esm/anchor-sort-IPIS5D5B.mjs.map +0 -7
- package/dist/lib/node-esm/app-graph-serializer-FLBXQKKR.mjs.map +0 -7
- package/dist/lib/node-esm/artifact-definition-MLTAY4LK.mjs +0 -146
- package/dist/lib/node-esm/artifact-definition-MLTAY4LK.mjs.map +0 -7
- package/dist/lib/node-esm/chunk-7X6TPTJK.mjs +0 -22
- package/dist/lib/node-esm/chunk-7X6TPTJK.mjs.map +0 -7
- package/dist/lib/node-esm/chunk-ACFGXH2K.mjs.map +0 -7
- package/dist/lib/node-esm/chunk-CWTFQSN7.mjs.map +0 -7
- package/dist/lib/node-esm/chunk-CXG7GMYP.mjs +0 -24
- package/dist/lib/node-esm/chunk-CXG7GMYP.mjs.map +0 -7
- package/dist/lib/node-esm/chunk-JEEQLO7C.mjs +0 -80
- package/dist/lib/node-esm/chunk-JEEQLO7C.mjs.map +0 -7
- package/dist/lib/node-esm/chunk-VIR2ABYE.mjs.map +0 -7
- package/dist/lib/node-esm/intent-resolver-BZYWV53A.mjs +0 -65
- package/dist/lib/node-esm/intent-resolver-BZYWV53A.mjs.map +0 -7
- package/dist/lib/node-esm/react-surface-TTTBYNI2.mjs.map +0 -7
- package/dist/lib/node-esm/settings-KVP7TVX7.mjs.map +0 -7
- package/dist/lib/node-esm/state-NW3W4JCQ.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 -42
- 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 -81
- package/src/components/MarkdownPreview/index.ts +0 -9
- package/src/types/schema.ts +0 -39
|
@@ -1,17 +1,18 @@
|
|
|
1
|
-
import "./chunk-
|
|
1
|
+
import "./chunk-SUOK6YMI.mjs";
|
|
2
|
+
import "./chunk-F6JJLKLN.mjs";
|
|
2
3
|
import {
|
|
3
4
|
MarkdownCapabilities
|
|
4
|
-
} from "./chunk-
|
|
5
|
+
} from "./chunk-OY6CGPOO.mjs";
|
|
5
6
|
import {
|
|
6
7
|
getFallbackName,
|
|
7
8
|
setFallbackName
|
|
8
|
-
} from "./chunk-
|
|
9
|
+
} from "./chunk-LAVZ2W6X.mjs";
|
|
9
10
|
import {
|
|
10
|
-
|
|
11
|
-
} from "./chunk-
|
|
11
|
+
Markdown_exports
|
|
12
|
+
} from "./chunk-BEE7VQPU.mjs";
|
|
12
13
|
import {
|
|
13
|
-
|
|
14
|
-
} from "./chunk-
|
|
14
|
+
meta
|
|
15
|
+
} from "./chunk-ODB2PTBP.mjs";
|
|
15
16
|
|
|
16
17
|
// src/components/MarkdownContainer.tsx
|
|
17
18
|
import { useSignals as _useSignals2 } from "@preact-signals/safe-react/tracking";
|
|
@@ -27,37 +28,241 @@ import { toLocalizedString as toLocalizedString2, useTranslation as useTranslati
|
|
|
27
28
|
import { insertAtCursor, insertAtLineStart } from "@dxos/react-ui-editor";
|
|
28
29
|
import { DataType } from "@dxos/schema";
|
|
29
30
|
|
|
31
|
+
// src/extensions.tsx
|
|
32
|
+
import React, { useMemo } from "react";
|
|
33
|
+
import { createRoot } from "react-dom/client";
|
|
34
|
+
import { LayoutAction, createIntent, useCapabilities, useIntentDispatcher } from "@dxos/app-framework";
|
|
35
|
+
import { debounceAndThrottle } from "@dxos/async";
|
|
36
|
+
import { invariant } from "@dxos/invariant";
|
|
37
|
+
import { createDocAccessor, fullyQualifiedId, getSpace } from "@dxos/react-client/echo";
|
|
38
|
+
import { useIdentity } from "@dxos/react-client/halo";
|
|
39
|
+
import { Icon, ThemeProvider } from "@dxos/react-ui";
|
|
40
|
+
import { Cursor, EditorView, InputModeExtensions, createDataExtensions, decorateMarkdown, documentId, folding, formattingKeymap, linkTooltip, listener, preview, selectionState, typewriter } from "@dxos/react-ui-editor";
|
|
41
|
+
import { defaultTx } from "@dxos/react-ui-theme";
|
|
42
|
+
import { isNotFalsy } from "@dxos/util";
|
|
43
|
+
var __dxlog_file = "/__w/dxos/dxos/packages/plugins/plugin-markdown/src/extensions.tsx";
|
|
44
|
+
var useExtensions = ({ document, id, text, settings, selectionManager, viewMode, editorStateStore, previewOptions }) => {
|
|
45
|
+
const { dispatchPromise: dispatch } = useIntentDispatcher();
|
|
46
|
+
const identity = useIdentity();
|
|
47
|
+
const space = getSpace(document) ?? getSpace(text);
|
|
48
|
+
const baseExtensions = useMemo(() => createBaseExtensions({
|
|
49
|
+
document,
|
|
50
|
+
id,
|
|
51
|
+
text,
|
|
52
|
+
settings,
|
|
53
|
+
selectionManager,
|
|
54
|
+
viewMode,
|
|
55
|
+
previewOptions,
|
|
56
|
+
dispatch
|
|
57
|
+
}), [
|
|
58
|
+
document,
|
|
59
|
+
id,
|
|
60
|
+
text,
|
|
61
|
+
viewMode,
|
|
62
|
+
dispatch,
|
|
63
|
+
previewOptions,
|
|
64
|
+
settings,
|
|
65
|
+
settings.editorInputMode,
|
|
66
|
+
settings.folding,
|
|
67
|
+
settings.numberedHeadings,
|
|
68
|
+
settings.debug,
|
|
69
|
+
settings.typewriter,
|
|
70
|
+
selectionManager
|
|
71
|
+
]);
|
|
72
|
+
const extensionProviders = useCapabilities(MarkdownCapabilities.Extensions);
|
|
73
|
+
const pluginExtensions = useMemo(() => {
|
|
74
|
+
if (!document) {
|
|
75
|
+
return [];
|
|
76
|
+
}
|
|
77
|
+
return extensionProviders.flat().reduce((acc, provider) => {
|
|
78
|
+
const extension = typeof provider === "function" ? provider({
|
|
79
|
+
document
|
|
80
|
+
}) : provider;
|
|
81
|
+
if (extension) {
|
|
82
|
+
acc.push(extension);
|
|
83
|
+
}
|
|
84
|
+
return acc;
|
|
85
|
+
}, []);
|
|
86
|
+
}, [
|
|
87
|
+
extensionProviders,
|
|
88
|
+
document
|
|
89
|
+
]);
|
|
90
|
+
return useMemo(() => [
|
|
91
|
+
// NOTE: Data extensions must be first so that automerge is updated before other extensions compute their state.
|
|
92
|
+
document && createDataExtensions({
|
|
93
|
+
id: document.id,
|
|
94
|
+
text: document.content.target && createDocAccessor(document.content.target, [
|
|
95
|
+
"content"
|
|
96
|
+
]),
|
|
97
|
+
space,
|
|
98
|
+
identity
|
|
99
|
+
}),
|
|
100
|
+
text && id && createDataExtensions({
|
|
101
|
+
id,
|
|
102
|
+
text: createDocAccessor(text, [
|
|
103
|
+
"content"
|
|
104
|
+
]),
|
|
105
|
+
space,
|
|
106
|
+
identity
|
|
107
|
+
}),
|
|
108
|
+
selectionState(editorStateStore),
|
|
109
|
+
document && listener({
|
|
110
|
+
onChange: (text2) => setFallbackName(document, text2)
|
|
111
|
+
}),
|
|
112
|
+
baseExtensions,
|
|
113
|
+
pluginExtensions
|
|
114
|
+
].filter(isNotFalsy), [
|
|
115
|
+
baseExtensions,
|
|
116
|
+
pluginExtensions,
|
|
117
|
+
document,
|
|
118
|
+
document?.content?.target,
|
|
119
|
+
text,
|
|
120
|
+
id,
|
|
121
|
+
space,
|
|
122
|
+
identity
|
|
123
|
+
]);
|
|
124
|
+
};
|
|
125
|
+
var createBaseExtensions = ({ document, id, dispatch, settings, selectionManager, viewMode, previewOptions }) => {
|
|
126
|
+
const extensions = [
|
|
127
|
+
selectionManager && selectionChange(selectionManager),
|
|
128
|
+
settings.editorInputMode && InputModeExtensions[settings.editorInputMode],
|
|
129
|
+
settings.folding && folding()
|
|
130
|
+
].filter(isNotFalsy);
|
|
131
|
+
if (viewMode !== "source") {
|
|
132
|
+
extensions.push(...[
|
|
133
|
+
formattingKeymap(),
|
|
134
|
+
decorateMarkdown({
|
|
135
|
+
selectionChangeDelay: 100,
|
|
136
|
+
numberedHeadings: settings.numberedHeadings ? {
|
|
137
|
+
from: 2
|
|
138
|
+
} : void 0,
|
|
139
|
+
// TODO(wittjosiah): For internal links, consider ignoring the link text and rendering the label of the object being linked to.
|
|
140
|
+
renderLinkButton: dispatch && (document || id) ? createLinkRenderer((id2) => {
|
|
141
|
+
void dispatch(createIntent(LayoutAction.Open, {
|
|
142
|
+
part: "main",
|
|
143
|
+
subject: [
|
|
144
|
+
id2
|
|
145
|
+
],
|
|
146
|
+
options: {
|
|
147
|
+
pivotId: document ? fullyQualifiedId(document) : id2
|
|
148
|
+
}
|
|
149
|
+
}));
|
|
150
|
+
}) : void 0
|
|
151
|
+
}),
|
|
152
|
+
linkTooltip(renderLinkTooltip),
|
|
153
|
+
preview(previewOptions)
|
|
154
|
+
]);
|
|
155
|
+
}
|
|
156
|
+
if (settings.debug) {
|
|
157
|
+
const items = settings.typewriter?.split(/[,\n]/) ?? "";
|
|
158
|
+
if (items) {
|
|
159
|
+
extensions.push(typewriter({
|
|
160
|
+
items
|
|
161
|
+
}));
|
|
162
|
+
}
|
|
163
|
+
}
|
|
164
|
+
return extensions;
|
|
165
|
+
};
|
|
166
|
+
var selectionChange = (selectionManager) => {
|
|
167
|
+
return EditorView.updateListener.of(debounceAndThrottle((update) => {
|
|
168
|
+
if (update.selectionSet) {
|
|
169
|
+
const id = update.state.facet(documentId);
|
|
170
|
+
const cursorConverter = update.state.facet(Cursor.converter);
|
|
171
|
+
const selection = update.state.selection;
|
|
172
|
+
const ranges = selection.ranges.map((range) => ({
|
|
173
|
+
from: cursorConverter.toCursor(range.from),
|
|
174
|
+
to: cursorConverter.toCursor(range.to)
|
|
175
|
+
})).filter(({ from, to }) => to > from);
|
|
176
|
+
selectionManager.updateMultiRange(id, ranges);
|
|
177
|
+
}
|
|
178
|
+
}, 100));
|
|
179
|
+
};
|
|
180
|
+
var style = {
|
|
181
|
+
hover: "rounded-sm text-primary-500 hover:text-primary-600 dark:text-primary-500 hover:dark:text-primary-400",
|
|
182
|
+
icon: "inline-block leading-none mis-1 cursor-pointer"
|
|
183
|
+
};
|
|
184
|
+
var createLinkRenderer = (onSelectObject) => (el, { url }) => {
|
|
185
|
+
const isInternal = url.startsWith("/") || // TODO(wittjosiah): This should probably be parsed out on paste?
|
|
186
|
+
url.startsWith(window.location.origin);
|
|
187
|
+
const options = isInternal ? {
|
|
188
|
+
onClick: () => {
|
|
189
|
+
const qualifiedId = url.split("/").at(-1);
|
|
190
|
+
invariant(qualifiedId, "Invalid link format.", {
|
|
191
|
+
F: __dxlog_file,
|
|
192
|
+
L: 263,
|
|
193
|
+
S: void 0,
|
|
194
|
+
A: [
|
|
195
|
+
"qualifiedId",
|
|
196
|
+
"'Invalid link format.'"
|
|
197
|
+
]
|
|
198
|
+
});
|
|
199
|
+
onSelectObject(qualifiedId);
|
|
200
|
+
}
|
|
201
|
+
} : {
|
|
202
|
+
href: url,
|
|
203
|
+
rel: "noreferrer",
|
|
204
|
+
target: "_blank"
|
|
205
|
+
};
|
|
206
|
+
renderRoot(el, /* @__PURE__ */ React.createElement("a", {
|
|
207
|
+
...options,
|
|
208
|
+
className: style.hover
|
|
209
|
+
}, /* @__PURE__ */ React.createElement(Icon, {
|
|
210
|
+
icon: isInternal ? "ph--arrow-square-down--bold" : "ph--arrow-square-out--bold",
|
|
211
|
+
size: 4,
|
|
212
|
+
classNames: style.icon
|
|
213
|
+
})));
|
|
214
|
+
};
|
|
215
|
+
var renderLinkTooltip = (el, { url }) => {
|
|
216
|
+
const web = new URL(url);
|
|
217
|
+
renderRoot(el, /* @__PURE__ */ React.createElement("a", {
|
|
218
|
+
href: url,
|
|
219
|
+
rel: "noreferrer",
|
|
220
|
+
target: "_blank",
|
|
221
|
+
className: style.hover
|
|
222
|
+
}, web.origin, /* @__PURE__ */ React.createElement(Icon, {
|
|
223
|
+
icon: "ph--arrow-square-out--bold",
|
|
224
|
+
size: 4,
|
|
225
|
+
classNames: style.icon
|
|
226
|
+
})));
|
|
227
|
+
};
|
|
228
|
+
var renderRoot = (root, node) => {
|
|
229
|
+
createRoot(root).render(/* @__PURE__ */ React.createElement(ThemeProvider, {
|
|
230
|
+
tx: defaultTx
|
|
231
|
+
}, node));
|
|
232
|
+
return root;
|
|
233
|
+
};
|
|
234
|
+
|
|
30
235
|
// src/components/MarkdownEditor/MarkdownEditor.tsx
|
|
31
236
|
import { useSignals as _useSignals } from "@preact-signals/safe-react/tracking";
|
|
32
|
-
import
|
|
237
|
+
import React2, { forwardRef, useCallback, useEffect, useImperativeHandle, useMemo as useMemo3, useRef } from "react";
|
|
33
238
|
import { useDropzone } from "react-dropzone";
|
|
34
|
-
import { invariant as
|
|
239
|
+
import { invariant as invariant3 } from "@dxos/invariant";
|
|
35
240
|
import { toLocalizedString, useThemeContext, useTranslation } from "@dxos/react-ui";
|
|
36
|
-
import { CommandMenu, EditorToolbar, RefPopover, addLink,
|
|
241
|
+
import { CommandMenu, Domino, EditorToolbar, RefPopover, addLink, coreSlashCommands, createBasicExtensions, createMarkdownExtensions, createThemeExtensions, dropFile, editorGutter, editorSlots, filterItems, linkSlashCommands, processEditorPayload, stackItemContentEditorClassNames, useCommandMenu, useEditorToolbarState, useFormattingState, useTextEditor } from "@dxos/react-ui-editor";
|
|
37
242
|
import { StackItem } from "@dxos/react-ui-stack";
|
|
38
|
-
import {
|
|
243
|
+
import { isNonNullable, isNotFalsy as isNotFalsy2 } from "@dxos/util";
|
|
39
244
|
|
|
40
245
|
// src/hooks/useSelectCurrentThread.tsx
|
|
41
|
-
import { EditorView } from "@codemirror/view";
|
|
246
|
+
import { EditorView as EditorView2 } from "@codemirror/view";
|
|
42
247
|
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
|
|
248
|
+
import { useMemo as useMemo2 } from "react";
|
|
249
|
+
import { LayoutAction as LayoutAction2, createResolver, useIntentResolver } from "@dxos/app-framework";
|
|
250
|
+
import { invariant as invariant2 } from "@dxos/invariant";
|
|
251
|
+
import { Cursor as Cursor2, setSelection } from "@dxos/react-ui-editor";
|
|
252
|
+
var __dxlog_file2 = "/__w/dxos/dxos/packages/plugins/plugin-markdown/src/hooks/useSelectCurrentThread.tsx";
|
|
48
253
|
var useSelectCurrentThread = (editorView, documentId2) => {
|
|
49
|
-
const scrollIntoViewResolver =
|
|
50
|
-
intent:
|
|
254
|
+
const scrollIntoViewResolver = useMemo2(() => createResolver({
|
|
255
|
+
intent: LayoutAction2.UpdateLayout,
|
|
51
256
|
position: "hoist",
|
|
52
257
|
filter: (data) => {
|
|
53
|
-
if (!Schema.is(
|
|
258
|
+
if (!Schema.is(LayoutAction2.ScrollIntoView.fields.input)(data)) {
|
|
54
259
|
return false;
|
|
55
260
|
}
|
|
56
261
|
return !!editorView && data.subject === documentId2 && !!data.options?.cursor;
|
|
57
262
|
},
|
|
58
263
|
resolve: ({ options: { cursor } }) => {
|
|
59
|
-
|
|
60
|
-
F:
|
|
264
|
+
invariant2(editorView, "Editor view is not defined.", {
|
|
265
|
+
F: __dxlog_file2,
|
|
61
266
|
L: 32,
|
|
62
267
|
S: void 0,
|
|
63
268
|
A: [
|
|
@@ -65,14 +270,14 @@ var useSelectCurrentThread = (editorView, documentId2) => {
|
|
|
65
270
|
"'Editor view is not defined.'"
|
|
66
271
|
]
|
|
67
272
|
});
|
|
68
|
-
const range =
|
|
273
|
+
const range = Cursor2.getRangeFromCursor(editorView.state, cursor);
|
|
69
274
|
if (range) {
|
|
70
275
|
const selection = editorView.state.selection.main.from !== range.from ? {
|
|
71
276
|
anchor: range.from
|
|
72
277
|
} : void 0;
|
|
73
278
|
const effects = [
|
|
74
279
|
// NOTE: This does not use the DOM scrollIntoView function.
|
|
75
|
-
|
|
280
|
+
EditorView2.scrollIntoView(range.from, {
|
|
76
281
|
y: "start",
|
|
77
282
|
yMargin: 96
|
|
78
283
|
})
|
|
@@ -94,12 +299,12 @@ var useSelectCurrentThread = (editorView, documentId2) => {
|
|
|
94
299
|
documentId2,
|
|
95
300
|
editorView
|
|
96
301
|
]);
|
|
97
|
-
useIntentResolver(
|
|
302
|
+
useIntentResolver(meta.id, scrollIntoViewResolver);
|
|
98
303
|
};
|
|
99
304
|
|
|
100
305
|
// src/components/MarkdownEditor/MarkdownEditor.tsx
|
|
101
|
-
var
|
|
102
|
-
var MarkdownEditor = ({ extensions:
|
|
306
|
+
var __dxlog_file3 = "/__w/dxos/dxos/packages/plugins/plugin-markdown/src/components/MarkdownEditor/MarkdownEditor.tsx";
|
|
307
|
+
var MarkdownEditor = ({ extensions: extensionsParam, slashCommandGroups, onLinkQuery, ...props }) => {
|
|
103
308
|
var _effect = _useSignals();
|
|
104
309
|
try {
|
|
105
310
|
const { t } = useTranslation();
|
|
@@ -120,7 +325,7 @@ var MarkdownEditor = ({ extensions: _extensions, slashCommandGroups, onLinkQuery
|
|
|
120
325
|
onLinkQuery,
|
|
121
326
|
slashCommandGroups
|
|
122
327
|
]);
|
|
123
|
-
const options =
|
|
328
|
+
const options = useMemo3(() => {
|
|
124
329
|
const trigger = onLinkQuery ? [
|
|
125
330
|
"/",
|
|
126
331
|
"@"
|
|
@@ -132,20 +337,7 @@ var MarkdownEditor = ({ extensions: _extensions, slashCommandGroups, onLinkQuery
|
|
|
132
337
|
trigger,
|
|
133
338
|
placeholder: {
|
|
134
339
|
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
|
-
}
|
|
340
|
+
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
341
|
},
|
|
150
342
|
getMenu
|
|
151
343
|
};
|
|
@@ -153,21 +345,21 @@ var MarkdownEditor = ({ extensions: _extensions, slashCommandGroups, onLinkQuery
|
|
|
153
345
|
getMenu
|
|
154
346
|
]);
|
|
155
347
|
const { commandMenu, groupsRef, currentItem, onSelect, ...refPopoverProps } = useCommandMenu(options);
|
|
156
|
-
const extensions =
|
|
157
|
-
|
|
348
|
+
const extensions = useMemo3(() => [
|
|
349
|
+
extensionsParam,
|
|
158
350
|
commandMenu
|
|
159
|
-
].filter(
|
|
160
|
-
|
|
351
|
+
].filter(isNotFalsy2), [
|
|
352
|
+
extensionsParam,
|
|
161
353
|
commandMenu
|
|
162
354
|
]);
|
|
163
|
-
return /* @__PURE__ */
|
|
355
|
+
return /* @__PURE__ */ React2.createElement(RefPopover, {
|
|
164
356
|
modal: false,
|
|
165
357
|
...refPopoverProps
|
|
166
|
-
}, /* @__PURE__ */
|
|
358
|
+
}, /* @__PURE__ */ React2.createElement(MarkdownEditorImpl, {
|
|
167
359
|
ref: viewRef,
|
|
168
360
|
...props,
|
|
169
361
|
extensions
|
|
170
|
-
}), /* @__PURE__ */
|
|
362
|
+
}), /* @__PURE__ */ React2.createElement(CommandMenu, {
|
|
171
363
|
groups: groupsRef.current,
|
|
172
364
|
currentItem,
|
|
173
365
|
onSelect
|
|
@@ -179,16 +371,16 @@ var MarkdownEditor = ({ extensions: _extensions, slashCommandGroups, onLinkQuery
|
|
|
179
371
|
var MarkdownEditorImpl = /* @__PURE__ */ forwardRef(({ id, role = "article", initialValue, customActions, editorStateStore, extensions, extensionProviders, scrollPastEnd, toolbar, viewMode, onFileUpload, onViewModeChange }, forwardedRef) => {
|
|
180
372
|
var _effect = _useSignals();
|
|
181
373
|
try {
|
|
182
|
-
const { t } = useTranslation(
|
|
374
|
+
const { t } = useTranslation(meta.id);
|
|
183
375
|
const { themeMode } = useThemeContext();
|
|
184
376
|
const toolbarState = useEditorToolbarState({
|
|
185
377
|
viewMode
|
|
186
378
|
});
|
|
187
379
|
const formattingObserver = useFormattingState(toolbarState);
|
|
188
|
-
const { scrollTo, selection } =
|
|
380
|
+
const { scrollTo, selection } = useMemo3(() => editorStateStore?.getState(id) ?? {}, [
|
|
189
381
|
id
|
|
190
382
|
]);
|
|
191
|
-
const providerExtensions =
|
|
383
|
+
const providerExtensions = useMemo3(() => extensionProviders?.flatMap((provider) => provider({})).filter(isNonNullable), [
|
|
192
384
|
extensionProviders
|
|
193
385
|
]);
|
|
194
386
|
const handleDrop = async (view, { files }) => {
|
|
@@ -208,11 +400,10 @@ var MarkdownEditorImpl = /* @__PURE__ */ forwardRef(({ id, role = "article", ini
|
|
|
208
400
|
createBasicExtensions({
|
|
209
401
|
readOnly: viewMode === "readonly",
|
|
210
402
|
placeholder: t("editor placeholder"),
|
|
211
|
-
scrollPastEnd: role === "section" ? false : scrollPastEnd
|
|
212
|
-
|
|
213
|
-
createMarkdownExtensions({
|
|
214
|
-
themeMode
|
|
403
|
+
scrollPastEnd: role === "section" ? false : scrollPastEnd,
|
|
404
|
+
search: true
|
|
215
405
|
}),
|
|
406
|
+
createMarkdownExtensions(),
|
|
216
407
|
createThemeExtensions({
|
|
217
408
|
themeMode,
|
|
218
409
|
syntaxHighlighting: true,
|
|
@@ -224,7 +415,7 @@ var MarkdownEditorImpl = /* @__PURE__ */ forwardRef(({ id, role = "article", ini
|
|
|
224
415
|
}),
|
|
225
416
|
providerExtensions,
|
|
226
417
|
extensions
|
|
227
|
-
].filter(
|
|
418
|
+
].filter(isNotFalsy2),
|
|
228
419
|
...role !== "section" && {
|
|
229
420
|
id,
|
|
230
421
|
scrollTo,
|
|
@@ -283,8 +474,8 @@ var MarkdownEditorImpl = /* @__PURE__ */ forwardRef(({ id, role = "article", ini
|
|
|
283
474
|
onFileUpload
|
|
284
475
|
]);
|
|
285
476
|
const getView = useCallback(() => {
|
|
286
|
-
|
|
287
|
-
F:
|
|
477
|
+
invariant3(editorView, void 0, {
|
|
478
|
+
F: __dxlog_file3,
|
|
288
479
|
L: 240,
|
|
289
480
|
S: void 0,
|
|
290
481
|
A: [
|
|
@@ -307,9 +498,9 @@ var MarkdownEditorImpl = /* @__PURE__ */ forwardRef(({ id, role = "article", ini
|
|
|
307
498
|
}, [
|
|
308
499
|
onFileUpload
|
|
309
500
|
]);
|
|
310
|
-
return /* @__PURE__ */
|
|
501
|
+
return /* @__PURE__ */ React2.createElement(StackItem.Content, {
|
|
311
502
|
toolbar: !!toolbar
|
|
312
|
-
}, toolbar && /* @__PURE__ */
|
|
503
|
+
}, toolbar && /* @__PURE__ */ React2.createElement(React2.Fragment, null, /* @__PURE__ */ React2.createElement(EditorToolbar, {
|
|
313
504
|
attendableId: id,
|
|
314
505
|
role,
|
|
315
506
|
state: toolbarState,
|
|
@@ -317,7 +508,7 @@ var MarkdownEditorImpl = /* @__PURE__ */ forwardRef(({ id, role = "article", ini
|
|
|
317
508
|
getView,
|
|
318
509
|
image: handleImageUpload,
|
|
319
510
|
viewMode: handleViewModeChange
|
|
320
|
-
}), /* @__PURE__ */
|
|
511
|
+
}), /* @__PURE__ */ React2.createElement("input", getInputProps())), /* @__PURE__ */ React2.createElement("div", {
|
|
321
512
|
role: "none",
|
|
322
513
|
ref: parentRef,
|
|
323
514
|
"data-testid": "composer.markdownRoot",
|
|
@@ -341,228 +532,13 @@ var useTest = (view) => {
|
|
|
341
532
|
]);
|
|
342
533
|
};
|
|
343
534
|
|
|
344
|
-
// src/extensions.tsx
|
|
345
|
-
import React2, { useMemo as useMemo3 } from "react";
|
|
346
|
-
import { createRoot } from "react-dom/client";
|
|
347
|
-
import { createIntent, LayoutAction as LayoutAction2, useCapabilities, useIntentDispatcher } from "@dxos/app-framework";
|
|
348
|
-
import { debounceAndThrottle } from "@dxos/async";
|
|
349
|
-
import { invariant as invariant3 } from "@dxos/invariant";
|
|
350
|
-
import { createDocAccessor, fullyQualifiedId, getSpace } from "@dxos/react-client/echo";
|
|
351
|
-
import { useIdentity } from "@dxos/react-client/halo";
|
|
352
|
-
import { Icon, ThemeProvider } from "@dxos/react-ui";
|
|
353
|
-
import { InputModeExtensions, createDataExtensions, autocomplete, decorateMarkdown, folding, formattingKeymap, linkTooltip, listener, preview, selectionState, typewriter, EditorView as EditorView2, documentId, Cursor as Cursor2 } from "@dxos/react-ui-editor";
|
|
354
|
-
import { defaultTx } from "@dxos/react-ui-theme";
|
|
355
|
-
import { isNotFalsy as isNotFalsy2 } from "@dxos/util";
|
|
356
|
-
var __dxlog_file3 = "/__w/dxos/dxos/packages/plugins/plugin-markdown/src/extensions.tsx";
|
|
357
|
-
var useExtensions = ({ document, id, text, settings, selectionManager, viewMode, editorStateStore, previewOptions }) => {
|
|
358
|
-
const { dispatchPromise: dispatch } = useIntentDispatcher();
|
|
359
|
-
const identity = useIdentity();
|
|
360
|
-
const space = getSpace(document) ?? getSpace(text);
|
|
361
|
-
const baseExtensions = useMemo3(() => createBaseExtensions({
|
|
362
|
-
document,
|
|
363
|
-
id,
|
|
364
|
-
text,
|
|
365
|
-
settings,
|
|
366
|
-
selectionManager,
|
|
367
|
-
viewMode,
|
|
368
|
-
previewOptions,
|
|
369
|
-
dispatch
|
|
370
|
-
}), [
|
|
371
|
-
document,
|
|
372
|
-
id,
|
|
373
|
-
text,
|
|
374
|
-
viewMode,
|
|
375
|
-
dispatch,
|
|
376
|
-
previewOptions,
|
|
377
|
-
settings,
|
|
378
|
-
settings.editorInputMode,
|
|
379
|
-
settings.folding,
|
|
380
|
-
settings.numberedHeadings,
|
|
381
|
-
settings.debug,
|
|
382
|
-
settings.typewriter,
|
|
383
|
-
selectionManager
|
|
384
|
-
]);
|
|
385
|
-
const extensionProviders = useCapabilities(MarkdownCapabilities.Extensions);
|
|
386
|
-
const pluginExtensions = useMemo3(() => {
|
|
387
|
-
if (!document) {
|
|
388
|
-
return [];
|
|
389
|
-
}
|
|
390
|
-
return extensionProviders.flat().reduce((acc, provider) => {
|
|
391
|
-
const extension = typeof provider === "function" ? provider({
|
|
392
|
-
document
|
|
393
|
-
}) : provider;
|
|
394
|
-
if (extension) {
|
|
395
|
-
acc.push(extension);
|
|
396
|
-
}
|
|
397
|
-
return acc;
|
|
398
|
-
}, []);
|
|
399
|
-
}, [
|
|
400
|
-
extensionProviders,
|
|
401
|
-
document
|
|
402
|
-
]);
|
|
403
|
-
return useMemo3(() => [
|
|
404
|
-
// NOTE: Data extensions must be first so that automerge is updated before other extensions compute their state.
|
|
405
|
-
document && createDataExtensions({
|
|
406
|
-
id: document.id,
|
|
407
|
-
text: document.content.target && createDocAccessor(document.content.target, [
|
|
408
|
-
"content"
|
|
409
|
-
]),
|
|
410
|
-
space,
|
|
411
|
-
identity
|
|
412
|
-
}),
|
|
413
|
-
text && id && createDataExtensions({
|
|
414
|
-
id,
|
|
415
|
-
text: createDocAccessor(text, [
|
|
416
|
-
"content"
|
|
417
|
-
]),
|
|
418
|
-
space,
|
|
419
|
-
identity
|
|
420
|
-
}),
|
|
421
|
-
selectionState(editorStateStore),
|
|
422
|
-
document && listener({
|
|
423
|
-
onChange: (text2) => setFallbackName(document, text2)
|
|
424
|
-
}),
|
|
425
|
-
baseExtensions,
|
|
426
|
-
pluginExtensions
|
|
427
|
-
].filter(isNotFalsy2), [
|
|
428
|
-
baseExtensions,
|
|
429
|
-
pluginExtensions,
|
|
430
|
-
document,
|
|
431
|
-
document?.content?.target,
|
|
432
|
-
text,
|
|
433
|
-
id,
|
|
434
|
-
space,
|
|
435
|
-
identity
|
|
436
|
-
]);
|
|
437
|
-
};
|
|
438
|
-
var createBaseExtensions = ({ document, id, dispatch, settings, selectionManager, query, viewMode, previewOptions }) => {
|
|
439
|
-
const extensions = [
|
|
440
|
-
selectionManager && selectionChange(selectionManager),
|
|
441
|
-
settings.editorInputMode && InputModeExtensions[settings.editorInputMode],
|
|
442
|
-
settings.folding && folding()
|
|
443
|
-
].filter(isNotFalsy2);
|
|
444
|
-
if (viewMode !== "source") {
|
|
445
|
-
extensions.push(...[
|
|
446
|
-
formattingKeymap(),
|
|
447
|
-
decorateMarkdown({
|
|
448
|
-
selectionChangeDelay: 100,
|
|
449
|
-
numberedHeadings: settings.numberedHeadings ? {
|
|
450
|
-
from: 2
|
|
451
|
-
} : void 0,
|
|
452
|
-
// TODO(wittjosiah): For internal links, consider ignoring the link text and rendering the label of the object being linked to.
|
|
453
|
-
renderLinkButton: dispatch && (document || id) ? createLinkRenderer((id2) => {
|
|
454
|
-
void dispatch(createIntent(LayoutAction2.Open, {
|
|
455
|
-
part: "main",
|
|
456
|
-
subject: [
|
|
457
|
-
id2
|
|
458
|
-
],
|
|
459
|
-
options: {
|
|
460
|
-
pivotId: document ? fullyQualifiedId(document) : id2
|
|
461
|
-
}
|
|
462
|
-
}));
|
|
463
|
-
}) : void 0
|
|
464
|
-
}),
|
|
465
|
-
linkTooltip(renderLinkTooltip),
|
|
466
|
-
preview(previewOptions)
|
|
467
|
-
]);
|
|
468
|
-
}
|
|
469
|
-
if (query) {
|
|
470
|
-
extensions.push(autocomplete({
|
|
471
|
-
onSearch: (text) => {
|
|
472
|
-
return query.objects.map((object) => object.name?.length && object.id !== document?.id ? {
|
|
473
|
-
label: object.name,
|
|
474
|
-
// TODO(burdon): Factor out URL builder.
|
|
475
|
-
apply: `[${object.name}](/${fullyQualifiedId(object)})`
|
|
476
|
-
} : void 0).filter(isNotFalsy2);
|
|
477
|
-
}
|
|
478
|
-
}));
|
|
479
|
-
}
|
|
480
|
-
if (settings.debug) {
|
|
481
|
-
const items = settings.typewriter?.split(/[,\n]/) ?? "";
|
|
482
|
-
if (items) {
|
|
483
|
-
extensions.push(typewriter({
|
|
484
|
-
items
|
|
485
|
-
}));
|
|
486
|
-
}
|
|
487
|
-
}
|
|
488
|
-
return extensions;
|
|
489
|
-
};
|
|
490
|
-
var selectionChange = (selectionManager) => {
|
|
491
|
-
return EditorView2.updateListener.of(debounceAndThrottle((update) => {
|
|
492
|
-
if (update.selectionSet) {
|
|
493
|
-
const id = update.state.facet(documentId);
|
|
494
|
-
const cursorConverter = update.state.facet(Cursor2.converter);
|
|
495
|
-
const selection = update.state.selection;
|
|
496
|
-
const ranges = selection.ranges.map((range) => ({
|
|
497
|
-
from: cursorConverter.toCursor(range.from),
|
|
498
|
-
to: cursorConverter.toCursor(range.to)
|
|
499
|
-
})).filter(({ from, to }) => to > from);
|
|
500
|
-
selectionManager.updateMultiRange(id, ranges);
|
|
501
|
-
}
|
|
502
|
-
}, 100));
|
|
503
|
-
};
|
|
504
|
-
var style = {
|
|
505
|
-
hover: "rounded-sm text-primary-500 hover:text-primary-600 dark:text-primary-500 hover:dark:text-primary-400",
|
|
506
|
-
icon: "inline-block leading-none mis-1 cursor-pointer"
|
|
507
|
-
};
|
|
508
|
-
var createLinkRenderer = (onSelectObject) => (el, { url }) => {
|
|
509
|
-
const isInternal = url.startsWith("/") || // TODO(wittjosiah): This should probably be parsed out on paste?
|
|
510
|
-
url.startsWith(window.location.origin);
|
|
511
|
-
const options = isInternal ? {
|
|
512
|
-
onClick: () => {
|
|
513
|
-
const qualifiedId = url.split("/").at(-1);
|
|
514
|
-
invariant3(qualifiedId, "Invalid link format.", {
|
|
515
|
-
F: __dxlog_file3,
|
|
516
|
-
L: 291,
|
|
517
|
-
S: void 0,
|
|
518
|
-
A: [
|
|
519
|
-
"qualifiedId",
|
|
520
|
-
"'Invalid link format.'"
|
|
521
|
-
]
|
|
522
|
-
});
|
|
523
|
-
onSelectObject(qualifiedId);
|
|
524
|
-
}
|
|
525
|
-
} : {
|
|
526
|
-
href: url,
|
|
527
|
-
rel: "noreferrer",
|
|
528
|
-
target: "_blank"
|
|
529
|
-
};
|
|
530
|
-
renderRoot(el, /* @__PURE__ */ React2.createElement("a", {
|
|
531
|
-
...options,
|
|
532
|
-
className: style.hover
|
|
533
|
-
}, /* @__PURE__ */ React2.createElement(Icon, {
|
|
534
|
-
icon: isInternal ? "ph--arrow-square-down--bold" : "ph--arrow-square-out--bold",
|
|
535
|
-
size: 4,
|
|
536
|
-
classNames: style.icon
|
|
537
|
-
})));
|
|
538
|
-
};
|
|
539
|
-
var renderLinkTooltip = (el, { url }) => {
|
|
540
|
-
const web = new URL(url);
|
|
541
|
-
renderRoot(el, /* @__PURE__ */ React2.createElement("a", {
|
|
542
|
-
href: url,
|
|
543
|
-
rel: "noreferrer",
|
|
544
|
-
target: "_blank",
|
|
545
|
-
className: style.hover
|
|
546
|
-
}, web.origin, /* @__PURE__ */ React2.createElement(Icon, {
|
|
547
|
-
icon: "ph--arrow-square-out--bold",
|
|
548
|
-
size: 4,
|
|
549
|
-
classNames: style.icon
|
|
550
|
-
})));
|
|
551
|
-
};
|
|
552
|
-
var renderRoot = (root, node) => {
|
|
553
|
-
createRoot(root).render(/* @__PURE__ */ React2.createElement(ThemeProvider, {
|
|
554
|
-
tx: defaultTx
|
|
555
|
-
}, node));
|
|
556
|
-
return root;
|
|
557
|
-
};
|
|
558
|
-
|
|
559
535
|
// src/components/MarkdownContainer.tsx
|
|
560
536
|
var MarkdownContainer = ({ id, role, object, settings, selectionManager, viewMode, editorStateStore, onViewModeChange }) => {
|
|
561
537
|
var _effect = _useSignals2();
|
|
562
538
|
try {
|
|
563
539
|
const { t } = useTranslation2();
|
|
564
540
|
const scrollPastEnd = role === "article";
|
|
565
|
-
const doc = Obj.instanceOf(
|
|
541
|
+
const doc = Obj.instanceOf(Markdown_exports.Document, object) ? object : void 0;
|
|
566
542
|
const text = Obj.instanceOf(DataType.Text, object) ? object : void 0;
|
|
567
543
|
const [previewBlocks, setPreviewBlocks] = useState([]);
|
|
568
544
|
const previewOptions = useMemo4(() => ({
|
|
@@ -773,6 +749,7 @@ var DocumentEditor = ({ id, document: doc, settings, viewMode, ...props }) => {
|
|
|
773
749
|
var MarkdownContainer_default = MarkdownContainer;
|
|
774
750
|
export {
|
|
775
751
|
DocumentEditor,
|
|
752
|
+
MarkdownContainer,
|
|
776
753
|
MarkdownContainer_default as default
|
|
777
754
|
};
|
|
778
|
-
//# sourceMappingURL=MarkdownContainer-
|
|
755
|
+
//# sourceMappingURL=MarkdownContainer-JW7TRDSA.mjs.map
|