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