@dxos/plugin-markdown 0.8.4-main.5acf9ea → 0.8.4-main.5ea62a8
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-7VG3K24R.mjs → MarkdownCard-JLUQITYK.mjs} +11 -11
- package/dist/lib/browser/MarkdownCard-JLUQITYK.mjs.map +7 -0
- package/dist/lib/browser/{MarkdownContainer-NNBPE6A5.mjs → MarkdownContainer-7M37DXAD.mjs} +257 -255
- package/dist/lib/browser/MarkdownContainer-7M37DXAD.mjs.map +7 -0
- package/dist/lib/browser/{anchor-sort-Z7JQA7RL.mjs → anchor-sort-E33BSTYF.mjs} +3 -3
- package/dist/lib/browser/{app-graph-serializer-ZT5OVF5G.mjs → app-graph-serializer-OX62DNPT.mjs} +5 -6
- package/dist/lib/browser/{app-graph-serializer-ZT5OVF5G.mjs.map → app-graph-serializer-OX62DNPT.mjs.map} +3 -3
- package/dist/lib/browser/blueprint-definition-Z3RQGWUD.mjs +11 -0
- package/dist/lib/browser/blueprint-definition-Z3RQGWUD.mjs.map +7 -0
- package/dist/lib/browser/{chunk-YHMGUSO7.mjs → chunk-BEE7VQPU.mjs} +7 -9
- package/dist/lib/browser/chunk-BEE7VQPU.mjs.map +7 -0
- package/dist/lib/browser/chunk-D7UYVHL6.mjs +20 -0
- package/dist/lib/browser/{chunk-VCUKIILA.mjs.map → chunk-D7UYVHL6.mjs.map} +3 -3
- package/dist/lib/browser/{chunk-VMX5SDGW.mjs → chunk-LAVZ2W6X.mjs} +2 -2
- package/dist/lib/browser/{chunk-ZGY3DYC2.mjs → chunk-ODB2PTBP.mjs} +2 -4
- package/dist/lib/browser/{chunk-ZGY3DYC2.mjs.map → chunk-ODB2PTBP.mjs.map} +3 -3
- package/dist/lib/browser/{chunk-CD4E4K7J.mjs → chunk-OY6CGPOO.mjs} +2 -2
- package/dist/lib/browser/{chunk-CD4E4K7J.mjs.map → chunk-OY6CGPOO.mjs.map} +1 -1
- package/dist/lib/browser/{chunk-K7ZFMSC4.mjs → chunk-Z7P6JGGW.mjs} +4 -3
- package/dist/lib/browser/chunk-Z7P6JGGW.mjs.map +7 -0
- package/dist/lib/browser/chunk-ZVVKLB5L.mjs +121 -0
- package/dist/lib/browser/chunk-ZVVKLB5L.mjs.map +7 -0
- package/dist/lib/browser/index.mjs +20 -16
- package/dist/lib/browser/index.mjs.map +3 -3
- package/dist/lib/browser/{intent-resolver-EBEF7WEI.mjs → intent-resolver-WDDH56JC.mjs} +18 -16
- 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-ZPMZT4VU.mjs → react-surface-LN2XK2UN.mjs} +38 -31
- package/dist/lib/browser/react-surface-LN2XK2UN.mjs.map +7 -0
- package/dist/lib/browser/{settings-MBDK4TWE.mjs → settings-AABBTB4Q.mjs} +3 -3
- package/dist/lib/browser/{state-ZA6PZPUI.mjs → state-FTHQQX7V.mjs} +3 -3
- package/dist/lib/browser/state-FTHQQX7V.mjs.map +7 -0
- package/dist/lib/browser/types/index.mjs +2 -2
- package/dist/lib/node-esm/{MarkdownPreview-UVWR2YK3.mjs → MarkdownCard-XL5EVSJ7.mjs} +11 -11
- package/dist/lib/node-esm/MarkdownCard-XL5EVSJ7.mjs.map +7 -0
- package/dist/lib/node-esm/{MarkdownContainer-Q6UO7DKT.mjs → MarkdownContainer-K3BPAGWO.mjs} +257 -255
- package/dist/lib/node-esm/MarkdownContainer-K3BPAGWO.mjs.map +7 -0
- package/dist/lib/node-esm/{anchor-sort-R6AAKYNG.mjs → anchor-sort-ALP2NH24.mjs} +3 -3
- package/dist/lib/node-esm/{app-graph-serializer-X4M5QEI6.mjs → app-graph-serializer-56TD3BMX.mjs} +5 -6
- package/dist/lib/node-esm/{app-graph-serializer-X4M5QEI6.mjs.map → app-graph-serializer-56TD3BMX.mjs.map} +3 -3
- package/dist/lib/node-esm/blueprint-definition-735OAX33.mjs +12 -0
- package/dist/lib/node-esm/blueprint-definition-735OAX33.mjs.map +7 -0
- package/dist/lib/node-esm/{chunk-B3J2M4YL.mjs → chunk-CB2R4YIY.mjs} +2 -2
- package/dist/lib/node-esm/{chunk-B3J2M4YL.mjs.map → chunk-CB2R4YIY.mjs.map} +1 -1
- package/dist/lib/node-esm/{chunk-6GCOJS4Y.mjs → chunk-FXILAQ5F.mjs} +7 -9
- package/dist/lib/node-esm/chunk-FXILAQ5F.mjs.map +7 -0
- package/dist/lib/node-esm/{chunk-YGNVDYMB.mjs → chunk-J7A6TUB2.mjs} +4 -3
- package/dist/lib/node-esm/chunk-J7A6TUB2.mjs.map +7 -0
- package/dist/lib/node-esm/chunk-JPXFCBC4.mjs +22 -0
- package/dist/lib/node-esm/{chunk-A7LLVI34.mjs.map → chunk-JPXFCBC4.mjs.map} +3 -3
- package/dist/lib/node-esm/{chunk-LZK3TLKM.mjs → chunk-O6EXWGGS.mjs} +2 -2
- package/dist/lib/node-esm/{chunk-RCIXKCVG.mjs → chunk-VCG2U522.mjs} +2 -4
- package/dist/lib/node-esm/{chunk-RCIXKCVG.mjs.map → chunk-VCG2U522.mjs.map} +3 -3
- package/dist/lib/node-esm/chunk-Y422WR6A.mjs +122 -0
- package/dist/lib/node-esm/chunk-Y422WR6A.mjs.map +7 -0
- package/dist/lib/node-esm/index.mjs +20 -16
- package/dist/lib/node-esm/index.mjs.map +3 -3
- package/dist/lib/node-esm/{intent-resolver-L2UGZ72W.mjs → intent-resolver-2I5HKCUU.mjs} +18 -16
- 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-3JJSTTQP.mjs → react-surface-DJGGKYBD.mjs} +38 -31
- package/dist/lib/node-esm/react-surface-DJGGKYBD.mjs.map +7 -0
- package/dist/lib/node-esm/{settings-LBDWWPZJ.mjs → settings-CXGR6DH4.mjs} +3 -3
- package/dist/lib/node-esm/{state-UIHO2SFZ.mjs → state-NWMQ3XAI.mjs} +3 -3
- package/dist/lib/node-esm/state-NWMQ3XAI.mjs.map +7 -0
- package/dist/lib/node-esm/types/index.mjs +2 -2
- 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 +11 -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/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 +1 -1
- 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.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.map +1 -1
- 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/extensions.d.ts.map +1 -1
- package/dist/types/src/functions/create.d.ts +12 -0
- package/dist/types/src/functions/create.d.ts.map +1 -0
- 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 +4 -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 +1 -0
- package/dist/types/src/translations.d.ts.map +1 -1
- package/dist/types/src/types/Markdown.d.ts +1 -1
- package/dist/types/src/types/Markdown.d.ts.map +1 -1
- package/dist/types/src/types/MarkdownAction.d.ts +3 -12
- package/dist/types/src/types/MarkdownAction.d.ts.map +1 -1
- package/dist/types/src/types/types.d.ts.map +1 -1
- package/dist/types/tsconfig.tsbuildinfo +1 -1
- package/package.json +48 -45
- package/src/MarkdownPlugin.tsx +8 -6
- package/src/capabilities/app-graph-serializer.ts +2 -2
- package/src/capabilities/artifact-definition.ts +12 -17
- package/src/capabilities/blueprint-definition.ts +39 -0
- package/src/capabilities/capabilities.ts +1 -1
- package/src/capabilities/index.ts +2 -1
- package/src/capabilities/intent-resolver.ts +13 -13
- package/src/capabilities/react-surface.tsx +5 -4
- package/src/capabilities/state.ts +3 -2
- package/src/components/{MarkdownPreview/MarkdownPreview.stories.tsx → MarkdownCard/MarkdownCard.stories.tsx} +14 -12
- package/src/components/{MarkdownPreview/MarkdownPreview.tsx → MarkdownCard/MarkdownCard.tsx} +4 -2
- package/src/components/MarkdownCard/index.ts +9 -0
- package/src/components/MarkdownContainer.stories.tsx +7 -7
- package/src/components/MarkdownContainer.tsx +4 -3
- package/src/components/MarkdownEditor/MarkdownEditor.stories.tsx +10 -7
- package/src/components/MarkdownEditor/MarkdownEditor.tsx +6 -5
- package/src/components/MarkdownSettings/MarkdownSettings.tsx +77 -74
- package/src/components/Suggestions.stories.tsx +14 -16
- package/src/components/Toolbar.stories.tsx +17 -11
- package/src/components/index.ts +1 -1
- package/src/extensions.tsx +8 -8
- package/src/functions/create.ts +23 -0
- package/src/functions/diff.ts +35 -0
- package/src/functions/index.ts +7 -0
- package/src/functions/open.ts +30 -0
- package/src/hooks/useSelectCurrentThread.tsx +1 -1
- package/src/index.ts +3 -1
- package/src/meta.ts +0 -3
- package/src/translations.ts +1 -0
- package/src/types/Markdown.ts +2 -1
- package/src/types/MarkdownAction.ts +4 -5
- package/src/types/types.ts +1 -0
- package/dist/lib/browser/MarkdownContainer-NNBPE6A5.mjs.map +0 -7
- package/dist/lib/browser/MarkdownPreview-7VG3K24R.mjs.map +0 -7
- package/dist/lib/browser/artifact-definition-7VNP5PCP.mjs +0 -145
- package/dist/lib/browser/artifact-definition-7VNP5PCP.mjs.map +0 -7
- package/dist/lib/browser/chunk-K7ZFMSC4.mjs.map +0 -7
- package/dist/lib/browser/chunk-VCUKIILA.mjs +0 -20
- package/dist/lib/browser/chunk-YHMGUSO7.mjs.map +0 -7
- package/dist/lib/browser/intent-resolver-EBEF7WEI.mjs.map +0 -7
- package/dist/lib/browser/react-surface-ZPMZT4VU.mjs.map +0 -7
- package/dist/lib/browser/state-ZA6PZPUI.mjs.map +0 -7
- package/dist/lib/node-esm/MarkdownContainer-Q6UO7DKT.mjs.map +0 -7
- package/dist/lib/node-esm/MarkdownPreview-UVWR2YK3.mjs.map +0 -7
- package/dist/lib/node-esm/artifact-definition-IRIILD7S.mjs +0 -146
- package/dist/lib/node-esm/artifact-definition-IRIILD7S.mjs.map +0 -7
- package/dist/lib/node-esm/chunk-6GCOJS4Y.mjs.map +0 -7
- package/dist/lib/node-esm/chunk-A7LLVI34.mjs +0 -22
- package/dist/lib/node-esm/chunk-YGNVDYMB.mjs.map +0 -7
- package/dist/lib/node-esm/intent-resolver-L2UGZ72W.mjs.map +0 -7
- package/dist/lib/node-esm/react-surface-3JJSTTQP.mjs.map +0 -7
- package/dist/lib/node-esm/state-UIHO2SFZ.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 -10
- 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/src/components/MarkdownPreview/index.ts +0 -9
- /package/dist/lib/browser/{anchor-sort-Z7JQA7RL.mjs.map → anchor-sort-E33BSTYF.mjs.map} +0 -0
- /package/dist/lib/browser/{chunk-VMX5SDGW.mjs.map → chunk-LAVZ2W6X.mjs.map} +0 -0
- /package/dist/lib/browser/{settings-MBDK4TWE.mjs.map → settings-AABBTB4Q.mjs.map} +0 -0
- /package/dist/lib/node-esm/{anchor-sort-R6AAKYNG.mjs.map → anchor-sort-ALP2NH24.mjs.map} +0 -0
- /package/dist/lib/node-esm/{chunk-LZK3TLKM.mjs.map → chunk-O6EXWGGS.mjs.map} +0 -0
- /package/dist/lib/node-esm/{settings-LBDWWPZJ.mjs.map → settings-CXGR6DH4.mjs.map} +0 -0
|
@@ -1,18 +1,19 @@
|
|
|
1
1
|
import { createRequire } from 'node:module';const require = createRequire(import.meta.url);
|
|
2
|
-
import "./chunk-
|
|
2
|
+
import "./chunk-JPXFCBC4.mjs";
|
|
3
|
+
import "./chunk-Y422WR6A.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
|
Markdown_exports
|
|
12
|
-
} from "./chunk-
|
|
13
|
+
} from "./chunk-FXILAQ5F.mjs";
|
|
13
14
|
import {
|
|
14
15
|
meta
|
|
15
|
-
} from "./chunk-
|
|
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";
|
|
@@ -28,37 +29,252 @@ import { toLocalizedString as toLocalizedString2, useTranslation as useTranslati
|
|
|
28
29
|
import { insertAtCursor, insertAtLineStart } from "@dxos/react-ui-editor";
|
|
29
30
|
import { DataType } from "@dxos/schema";
|
|
30
31
|
|
|
32
|
+
// src/extensions.tsx
|
|
33
|
+
import React, { useMemo } from "react";
|
|
34
|
+
import { createRoot } from "react-dom/client";
|
|
35
|
+
import { LayoutAction, createIntent, useCapabilities, useIntentDispatcher } from "@dxos/app-framework";
|
|
36
|
+
import { debounceAndThrottle } from "@dxos/async";
|
|
37
|
+
import { invariant } from "@dxos/invariant";
|
|
38
|
+
import { createDocAccessor, fullyQualifiedId, getSpace } from "@dxos/react-client/echo";
|
|
39
|
+
import { useIdentity } from "@dxos/react-client/halo";
|
|
40
|
+
import { Icon, ThemeProvider } from "@dxos/react-ui";
|
|
41
|
+
import { Cursor, EditorView, InputModeExtensions, autocomplete, createDataExtensions, decorateMarkdown, documentId, folding, formattingKeymap, linkTooltip, listener, preview, selectionState, typewriter } from "@dxos/react-ui-editor";
|
|
42
|
+
import { defaultTx } from "@dxos/react-ui-theme";
|
|
43
|
+
import { isNotFalsy } from "@dxos/util";
|
|
44
|
+
var __dxlog_file = "/__w/dxos/dxos/packages/plugins/plugin-markdown/src/extensions.tsx";
|
|
45
|
+
var useExtensions = ({ document, id, text, settings, selectionManager, viewMode, editorStateStore, previewOptions }) => {
|
|
46
|
+
const { dispatchPromise: dispatch } = useIntentDispatcher();
|
|
47
|
+
const identity = useIdentity();
|
|
48
|
+
const space = getSpace(document) ?? getSpace(text);
|
|
49
|
+
const baseExtensions = useMemo(() => createBaseExtensions({
|
|
50
|
+
document,
|
|
51
|
+
id,
|
|
52
|
+
text,
|
|
53
|
+
settings,
|
|
54
|
+
selectionManager,
|
|
55
|
+
viewMode,
|
|
56
|
+
previewOptions,
|
|
57
|
+
dispatch
|
|
58
|
+
}), [
|
|
59
|
+
document,
|
|
60
|
+
id,
|
|
61
|
+
text,
|
|
62
|
+
viewMode,
|
|
63
|
+
dispatch,
|
|
64
|
+
previewOptions,
|
|
65
|
+
settings,
|
|
66
|
+
settings.editorInputMode,
|
|
67
|
+
settings.folding,
|
|
68
|
+
settings.numberedHeadings,
|
|
69
|
+
settings.debug,
|
|
70
|
+
settings.typewriter,
|
|
71
|
+
selectionManager
|
|
72
|
+
]);
|
|
73
|
+
const extensionProviders = useCapabilities(MarkdownCapabilities.Extensions);
|
|
74
|
+
const pluginExtensions = useMemo(() => {
|
|
75
|
+
if (!document) {
|
|
76
|
+
return [];
|
|
77
|
+
}
|
|
78
|
+
return extensionProviders.flat().reduce((acc, provider) => {
|
|
79
|
+
const extension = typeof provider === "function" ? provider({
|
|
80
|
+
document
|
|
81
|
+
}) : provider;
|
|
82
|
+
if (extension) {
|
|
83
|
+
acc.push(extension);
|
|
84
|
+
}
|
|
85
|
+
return acc;
|
|
86
|
+
}, []);
|
|
87
|
+
}, [
|
|
88
|
+
extensionProviders,
|
|
89
|
+
document
|
|
90
|
+
]);
|
|
91
|
+
return useMemo(() => [
|
|
92
|
+
// NOTE: Data extensions must be first so that automerge is updated before other extensions compute their state.
|
|
93
|
+
document && createDataExtensions({
|
|
94
|
+
id: document.id,
|
|
95
|
+
text: document.content.target && createDocAccessor(document.content.target, [
|
|
96
|
+
"content"
|
|
97
|
+
]),
|
|
98
|
+
space,
|
|
99
|
+
identity
|
|
100
|
+
}),
|
|
101
|
+
text && id && createDataExtensions({
|
|
102
|
+
id,
|
|
103
|
+
text: createDocAccessor(text, [
|
|
104
|
+
"content"
|
|
105
|
+
]),
|
|
106
|
+
space,
|
|
107
|
+
identity
|
|
108
|
+
}),
|
|
109
|
+
selectionState(editorStateStore),
|
|
110
|
+
document && listener({
|
|
111
|
+
onChange: (text2) => setFallbackName(document, text2)
|
|
112
|
+
}),
|
|
113
|
+
baseExtensions,
|
|
114
|
+
pluginExtensions
|
|
115
|
+
].filter(isNotFalsy), [
|
|
116
|
+
baseExtensions,
|
|
117
|
+
pluginExtensions,
|
|
118
|
+
document,
|
|
119
|
+
document?.content?.target,
|
|
120
|
+
text,
|
|
121
|
+
id,
|
|
122
|
+
space,
|
|
123
|
+
identity
|
|
124
|
+
]);
|
|
125
|
+
};
|
|
126
|
+
var createBaseExtensions = ({ document, id, dispatch, settings, selectionManager, query, viewMode, previewOptions }) => {
|
|
127
|
+
const extensions = [
|
|
128
|
+
selectionManager && selectionChange(selectionManager),
|
|
129
|
+
settings.editorInputMode && InputModeExtensions[settings.editorInputMode],
|
|
130
|
+
settings.folding && folding()
|
|
131
|
+
].filter(isNotFalsy);
|
|
132
|
+
if (viewMode !== "source") {
|
|
133
|
+
extensions.push(...[
|
|
134
|
+
formattingKeymap(),
|
|
135
|
+
decorateMarkdown({
|
|
136
|
+
selectionChangeDelay: 100,
|
|
137
|
+
numberedHeadings: settings.numberedHeadings ? {
|
|
138
|
+
from: 2
|
|
139
|
+
} : void 0,
|
|
140
|
+
// TODO(wittjosiah): For internal links, consider ignoring the link text and rendering the label of the object being linked to.
|
|
141
|
+
renderLinkButton: dispatch && (document || id) ? createLinkRenderer((id2) => {
|
|
142
|
+
void dispatch(createIntent(LayoutAction.Open, {
|
|
143
|
+
part: "main",
|
|
144
|
+
subject: [
|
|
145
|
+
id2
|
|
146
|
+
],
|
|
147
|
+
options: {
|
|
148
|
+
pivotId: document ? fullyQualifiedId(document) : id2
|
|
149
|
+
}
|
|
150
|
+
}));
|
|
151
|
+
}) : void 0
|
|
152
|
+
}),
|
|
153
|
+
linkTooltip(renderLinkTooltip),
|
|
154
|
+
preview(previewOptions)
|
|
155
|
+
]);
|
|
156
|
+
}
|
|
157
|
+
if (query) {
|
|
158
|
+
extensions.push(autocomplete({
|
|
159
|
+
onSearch: (text) => {
|
|
160
|
+
return query.objects.map((object) => object.name?.length && object.id !== document?.id ? {
|
|
161
|
+
label: object.name,
|
|
162
|
+
// TODO(burdon): Factor out URL builder.
|
|
163
|
+
apply: `[${object.name}](/${fullyQualifiedId(object)})`
|
|
164
|
+
} : void 0).filter(isNotFalsy);
|
|
165
|
+
}
|
|
166
|
+
}));
|
|
167
|
+
}
|
|
168
|
+
if (settings.debug) {
|
|
169
|
+
const items = settings.typewriter?.split(/[,\n]/) ?? "";
|
|
170
|
+
if (items) {
|
|
171
|
+
extensions.push(typewriter({
|
|
172
|
+
items
|
|
173
|
+
}));
|
|
174
|
+
}
|
|
175
|
+
}
|
|
176
|
+
return extensions;
|
|
177
|
+
};
|
|
178
|
+
var selectionChange = (selectionManager) => {
|
|
179
|
+
return EditorView.updateListener.of(debounceAndThrottle((update) => {
|
|
180
|
+
if (update.selectionSet) {
|
|
181
|
+
const id = update.state.facet(documentId);
|
|
182
|
+
const cursorConverter = update.state.facet(Cursor.converter);
|
|
183
|
+
const selection = update.state.selection;
|
|
184
|
+
const ranges = selection.ranges.map((range) => ({
|
|
185
|
+
from: cursorConverter.toCursor(range.from),
|
|
186
|
+
to: cursorConverter.toCursor(range.to)
|
|
187
|
+
})).filter(({ from, to }) => to > from);
|
|
188
|
+
selectionManager.updateMultiRange(id, ranges);
|
|
189
|
+
}
|
|
190
|
+
}, 100));
|
|
191
|
+
};
|
|
192
|
+
var style = {
|
|
193
|
+
hover: "rounded-sm text-primary-500 hover:text-primary-600 dark:text-primary-500 hover:dark:text-primary-400",
|
|
194
|
+
icon: "inline-block leading-none mis-1 cursor-pointer"
|
|
195
|
+
};
|
|
196
|
+
var createLinkRenderer = (onSelectObject) => (el, { url }) => {
|
|
197
|
+
const isInternal = url.startsWith("/") || // TODO(wittjosiah): This should probably be parsed out on paste?
|
|
198
|
+
url.startsWith(window.location.origin);
|
|
199
|
+
const options = isInternal ? {
|
|
200
|
+
onClick: () => {
|
|
201
|
+
const qualifiedId = url.split("/").at(-1);
|
|
202
|
+
invariant(qualifiedId, "Invalid link format.", {
|
|
203
|
+
F: __dxlog_file,
|
|
204
|
+
L: 291,
|
|
205
|
+
S: void 0,
|
|
206
|
+
A: [
|
|
207
|
+
"qualifiedId",
|
|
208
|
+
"'Invalid link format.'"
|
|
209
|
+
]
|
|
210
|
+
});
|
|
211
|
+
onSelectObject(qualifiedId);
|
|
212
|
+
}
|
|
213
|
+
} : {
|
|
214
|
+
href: url,
|
|
215
|
+
rel: "noreferrer",
|
|
216
|
+
target: "_blank"
|
|
217
|
+
};
|
|
218
|
+
renderRoot(el, /* @__PURE__ */ React.createElement("a", {
|
|
219
|
+
...options,
|
|
220
|
+
className: style.hover
|
|
221
|
+
}, /* @__PURE__ */ React.createElement(Icon, {
|
|
222
|
+
icon: isInternal ? "ph--arrow-square-down--bold" : "ph--arrow-square-out--bold",
|
|
223
|
+
size: 4,
|
|
224
|
+
classNames: style.icon
|
|
225
|
+
})));
|
|
226
|
+
};
|
|
227
|
+
var renderLinkTooltip = (el, { url }) => {
|
|
228
|
+
const web = new URL(url);
|
|
229
|
+
renderRoot(el, /* @__PURE__ */ React.createElement("a", {
|
|
230
|
+
href: url,
|
|
231
|
+
rel: "noreferrer",
|
|
232
|
+
target: "_blank",
|
|
233
|
+
className: style.hover
|
|
234
|
+
}, web.origin, /* @__PURE__ */ React.createElement(Icon, {
|
|
235
|
+
icon: "ph--arrow-square-out--bold",
|
|
236
|
+
size: 4,
|
|
237
|
+
classNames: style.icon
|
|
238
|
+
})));
|
|
239
|
+
};
|
|
240
|
+
var renderRoot = (root, node) => {
|
|
241
|
+
createRoot(root).render(/* @__PURE__ */ React.createElement(ThemeProvider, {
|
|
242
|
+
tx: defaultTx
|
|
243
|
+
}, node));
|
|
244
|
+
return root;
|
|
245
|
+
};
|
|
246
|
+
|
|
31
247
|
// src/components/MarkdownEditor/MarkdownEditor.tsx
|
|
32
248
|
import { useSignals as _useSignals } from "@preact-signals/safe-react/tracking";
|
|
33
|
-
import
|
|
249
|
+
import React2, { forwardRef, useCallback, useEffect, useImperativeHandle, useMemo as useMemo3, useRef } from "react";
|
|
34
250
|
import { useDropzone } from "react-dropzone";
|
|
35
|
-
import { invariant as
|
|
251
|
+
import { invariant as invariant3 } from "@dxos/invariant";
|
|
36
252
|
import { toLocalizedString, useThemeContext, useTranslation } from "@dxos/react-ui";
|
|
37
|
-
import { CommandMenu, EditorToolbar, RefPopover, addLink,
|
|
253
|
+
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
254
|
import { StackItem } from "@dxos/react-ui-stack";
|
|
39
|
-
import {
|
|
255
|
+
import { isNonNullable, isNotFalsy as isNotFalsy2 } from "@dxos/util";
|
|
40
256
|
|
|
41
257
|
// src/hooks/useSelectCurrentThread.tsx
|
|
42
|
-
import { EditorView } from "@codemirror/view";
|
|
258
|
+
import { EditorView as EditorView2 } from "@codemirror/view";
|
|
43
259
|
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
|
|
260
|
+
import { useMemo as useMemo2 } from "react";
|
|
261
|
+
import { LayoutAction as LayoutAction2, createResolver, useIntentResolver } from "@dxos/app-framework";
|
|
262
|
+
import { invariant as invariant2 } from "@dxos/invariant";
|
|
263
|
+
import { Cursor as Cursor2, setSelection } from "@dxos/react-ui-editor";
|
|
264
|
+
var __dxlog_file2 = "/__w/dxos/dxos/packages/plugins/plugin-markdown/src/hooks/useSelectCurrentThread.tsx";
|
|
49
265
|
var useSelectCurrentThread = (editorView, documentId2) => {
|
|
50
|
-
const scrollIntoViewResolver =
|
|
51
|
-
intent:
|
|
266
|
+
const scrollIntoViewResolver = useMemo2(() => createResolver({
|
|
267
|
+
intent: LayoutAction2.UpdateLayout,
|
|
52
268
|
position: "hoist",
|
|
53
269
|
filter: (data) => {
|
|
54
|
-
if (!Schema.is(
|
|
270
|
+
if (!Schema.is(LayoutAction2.ScrollIntoView.fields.input)(data)) {
|
|
55
271
|
return false;
|
|
56
272
|
}
|
|
57
273
|
return !!editorView && data.subject === documentId2 && !!data.options?.cursor;
|
|
58
274
|
},
|
|
59
275
|
resolve: ({ options: { cursor } }) => {
|
|
60
|
-
|
|
61
|
-
F:
|
|
276
|
+
invariant2(editorView, "Editor view is not defined.", {
|
|
277
|
+
F: __dxlog_file2,
|
|
62
278
|
L: 32,
|
|
63
279
|
S: void 0,
|
|
64
280
|
A: [
|
|
@@ -66,14 +282,14 @@ var useSelectCurrentThread = (editorView, documentId2) => {
|
|
|
66
282
|
"'Editor view is not defined.'"
|
|
67
283
|
]
|
|
68
284
|
});
|
|
69
|
-
const range =
|
|
285
|
+
const range = Cursor2.getRangeFromCursor(editorView.state, cursor);
|
|
70
286
|
if (range) {
|
|
71
287
|
const selection = editorView.state.selection.main.from !== range.from ? {
|
|
72
288
|
anchor: range.from
|
|
73
289
|
} : void 0;
|
|
74
290
|
const effects = [
|
|
75
291
|
// NOTE: This does not use the DOM scrollIntoView function.
|
|
76
|
-
|
|
292
|
+
EditorView2.scrollIntoView(range.from, {
|
|
77
293
|
y: "start",
|
|
78
294
|
yMargin: 96
|
|
79
295
|
})
|
|
@@ -99,7 +315,7 @@ var useSelectCurrentThread = (editorView, documentId2) => {
|
|
|
99
315
|
};
|
|
100
316
|
|
|
101
317
|
// src/components/MarkdownEditor/MarkdownEditor.tsx
|
|
102
|
-
var
|
|
318
|
+
var __dxlog_file3 = "/__w/dxos/dxos/packages/plugins/plugin-markdown/src/components/MarkdownEditor/MarkdownEditor.tsx";
|
|
103
319
|
var MarkdownEditor = ({ extensions: _extensions, slashCommandGroups, onLinkQuery, ...props }) => {
|
|
104
320
|
var _effect = _useSignals();
|
|
105
321
|
try {
|
|
@@ -121,7 +337,7 @@ var MarkdownEditor = ({ extensions: _extensions, slashCommandGroups, onLinkQuery
|
|
|
121
337
|
onLinkQuery,
|
|
122
338
|
slashCommandGroups
|
|
123
339
|
]);
|
|
124
|
-
const options =
|
|
340
|
+
const options = useMemo3(() => {
|
|
125
341
|
const trigger = onLinkQuery ? [
|
|
126
342
|
"/",
|
|
127
343
|
"@"
|
|
@@ -154,21 +370,21 @@ var MarkdownEditor = ({ extensions: _extensions, slashCommandGroups, onLinkQuery
|
|
|
154
370
|
getMenu
|
|
155
371
|
]);
|
|
156
372
|
const { commandMenu, groupsRef, currentItem, onSelect, ...refPopoverProps } = useCommandMenu(options);
|
|
157
|
-
const extensions =
|
|
373
|
+
const extensions = useMemo3(() => [
|
|
158
374
|
_extensions,
|
|
159
375
|
commandMenu
|
|
160
|
-
].filter(
|
|
376
|
+
].filter(isNotFalsy2), [
|
|
161
377
|
_extensions,
|
|
162
378
|
commandMenu
|
|
163
379
|
]);
|
|
164
|
-
return /* @__PURE__ */
|
|
380
|
+
return /* @__PURE__ */ React2.createElement(RefPopover, {
|
|
165
381
|
modal: false,
|
|
166
382
|
...refPopoverProps
|
|
167
|
-
}, /* @__PURE__ */
|
|
383
|
+
}, /* @__PURE__ */ React2.createElement(MarkdownEditorImpl, {
|
|
168
384
|
ref: viewRef,
|
|
169
385
|
...props,
|
|
170
386
|
extensions
|
|
171
|
-
}), /* @__PURE__ */
|
|
387
|
+
}), /* @__PURE__ */ React2.createElement(CommandMenu, {
|
|
172
388
|
groups: groupsRef.current,
|
|
173
389
|
currentItem,
|
|
174
390
|
onSelect
|
|
@@ -186,10 +402,10 @@ var MarkdownEditorImpl = /* @__PURE__ */ forwardRef(({ id, role = "article", ini
|
|
|
186
402
|
viewMode
|
|
187
403
|
});
|
|
188
404
|
const formattingObserver = useFormattingState(toolbarState);
|
|
189
|
-
const { scrollTo, selection } =
|
|
405
|
+
const { scrollTo, selection } = useMemo3(() => editorStateStore?.getState(id) ?? {}, [
|
|
190
406
|
id
|
|
191
407
|
]);
|
|
192
|
-
const providerExtensions =
|
|
408
|
+
const providerExtensions = useMemo3(() => extensionProviders?.flatMap((provider) => provider({})).filter(isNonNullable), [
|
|
193
409
|
extensionProviders
|
|
194
410
|
]);
|
|
195
411
|
const handleDrop = async (view, { files }) => {
|
|
@@ -209,7 +425,8 @@ var MarkdownEditorImpl = /* @__PURE__ */ forwardRef(({ id, role = "article", ini
|
|
|
209
425
|
createBasicExtensions({
|
|
210
426
|
readOnly: viewMode === "readonly",
|
|
211
427
|
placeholder: t("editor placeholder"),
|
|
212
|
-
scrollPastEnd: role === "section" ? false : scrollPastEnd
|
|
428
|
+
scrollPastEnd: role === "section" ? false : scrollPastEnd,
|
|
429
|
+
search: true
|
|
213
430
|
}),
|
|
214
431
|
createMarkdownExtensions({
|
|
215
432
|
themeMode
|
|
@@ -225,7 +442,7 @@ var MarkdownEditorImpl = /* @__PURE__ */ forwardRef(({ id, role = "article", ini
|
|
|
225
442
|
}),
|
|
226
443
|
providerExtensions,
|
|
227
444
|
extensions
|
|
228
|
-
].filter(
|
|
445
|
+
].filter(isNotFalsy2),
|
|
229
446
|
...role !== "section" && {
|
|
230
447
|
id,
|
|
231
448
|
scrollTo,
|
|
@@ -284,9 +501,9 @@ var MarkdownEditorImpl = /* @__PURE__ */ forwardRef(({ id, role = "article", ini
|
|
|
284
501
|
onFileUpload
|
|
285
502
|
]);
|
|
286
503
|
const getView = useCallback(() => {
|
|
287
|
-
|
|
288
|
-
F:
|
|
289
|
-
L:
|
|
504
|
+
invariant3(editorView, void 0, {
|
|
505
|
+
F: __dxlog_file3,
|
|
506
|
+
L: 241,
|
|
290
507
|
S: void 0,
|
|
291
508
|
A: [
|
|
292
509
|
"editorView",
|
|
@@ -308,9 +525,9 @@ var MarkdownEditorImpl = /* @__PURE__ */ forwardRef(({ id, role = "article", ini
|
|
|
308
525
|
}, [
|
|
309
526
|
onFileUpload
|
|
310
527
|
]);
|
|
311
|
-
return /* @__PURE__ */
|
|
528
|
+
return /* @__PURE__ */ React2.createElement(StackItem.Content, {
|
|
312
529
|
toolbar: !!toolbar
|
|
313
|
-
}, toolbar && /* @__PURE__ */
|
|
530
|
+
}, toolbar && /* @__PURE__ */ React2.createElement(React2.Fragment, null, /* @__PURE__ */ React2.createElement(EditorToolbar, {
|
|
314
531
|
attendableId: id,
|
|
315
532
|
role,
|
|
316
533
|
state: toolbarState,
|
|
@@ -318,7 +535,7 @@ var MarkdownEditorImpl = /* @__PURE__ */ forwardRef(({ id, role = "article", ini
|
|
|
318
535
|
getView,
|
|
319
536
|
image: handleImageUpload,
|
|
320
537
|
viewMode: handleViewModeChange
|
|
321
|
-
}), /* @__PURE__ */
|
|
538
|
+
}), /* @__PURE__ */ React2.createElement("input", getInputProps())), /* @__PURE__ */ React2.createElement("div", {
|
|
322
539
|
role: "none",
|
|
323
540
|
ref: parentRef,
|
|
324
541
|
"data-testid": "composer.markdownRoot",
|
|
@@ -342,221 +559,6 @@ var useTest = (view) => {
|
|
|
342
559
|
]);
|
|
343
560
|
};
|
|
344
561
|
|
|
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
562
|
// src/components/MarkdownContainer.tsx
|
|
561
563
|
var MarkdownContainer = ({ id, role, object, settings, selectionManager, viewMode, editorStateStore, onViewModeChange }) => {
|
|
562
564
|
var _effect = _useSignals2();
|
|
@@ -777,4 +779,4 @@ export {
|
|
|
777
779
|
MarkdownContainer,
|
|
778
780
|
MarkdownContainer_default as default
|
|
779
781
|
};
|
|
780
|
-
//# sourceMappingURL=MarkdownContainer-
|
|
782
|
+
//# sourceMappingURL=MarkdownContainer-K3BPAGWO.mjs.map
|