@dxos/plugin-markdown 0.8.4-main.c1de068 → 0.8.4-main.e098934
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-HMPNQMNG.mjs} +260 -287
- package/dist/lib/browser/MarkdownContainer-HMPNQMNG.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-XE66SH4O.mjs +22 -0
- package/dist/lib/browser/chunk-XE66SH4O.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-NY5K2I5R.mjs} +53 -44
- package/dist/lib/browser/react-surface-NY5K2I5R.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-5FTROSXN.mjs} +260 -287
- package/dist/lib/node-esm/MarkdownContainer-5FTROSXN.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-CWTFQSN7.mjs → chunk-O6EXWGGS.mjs} +8 -9
- package/dist/lib/node-esm/chunk-O6EXWGGS.mjs.map +7 -0
- package/dist/lib/node-esm/chunk-Q2BREK2M.mjs +24 -0
- package/dist/lib/node-esm/chunk-Q2BREK2M.mjs.map +7 -0
- package/dist/lib/node-esm/chunk-VCG2U522.mjs +29 -0
- package/dist/lib/node-esm/chunk-VCG2U522.mjs.map +7 -0
- package/dist/lib/node-esm/index.mjs +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-AUWSLYJS.mjs} +53 -44
- package/dist/lib/node-esm/react-surface-AUWSLYJS.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 +11 -10
- package/src/components/MarkdownEditor/MarkdownEditor.stories.tsx +10 -7
- package/src/components/MarkdownEditor/MarkdownEditor.tsx +28 -30
- package/src/components/MarkdownSettings/MarkdownSettings.tsx +81 -78
- package/src/components/Suggestions.stories.tsx +25 -28
- 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,18 +1,19 @@
|
|
|
1
1
|
import { createRequire } from 'node:module';const require = createRequire(import.meta.url);
|
|
2
|
-
import "./chunk-
|
|
2
|
+
import "./chunk-Q2BREK2M.mjs";
|
|
3
|
+
import "./chunk-DVK63TD3.mjs";
|
|
3
4
|
import {
|
|
4
5
|
MarkdownCapabilities
|
|
5
|
-
} from "./chunk-
|
|
6
|
+
} from "./chunk-CB2R4YIY.mjs";
|
|
6
7
|
import {
|
|
7
8
|
getFallbackName,
|
|
8
9
|
setFallbackName
|
|
9
|
-
} from "./chunk-
|
|
10
|
+
} from "./chunk-O6EXWGGS.mjs";
|
|
10
11
|
import {
|
|
11
|
-
|
|
12
|
-
} from "./chunk-
|
|
12
|
+
Markdown_exports
|
|
13
|
+
} from "./chunk-FXILAQ5F.mjs";
|
|
13
14
|
import {
|
|
14
|
-
|
|
15
|
-
} from "./chunk-
|
|
15
|
+
meta
|
|
16
|
+
} from "./chunk-VCG2U522.mjs";
|
|
16
17
|
|
|
17
18
|
// src/components/MarkdownContainer.tsx
|
|
18
19
|
import { useSignals as _useSignals2 } from "@preact-signals/safe-react/tracking";
|
|
@@ -28,37 +29,241 @@ 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, createDataExtensions, decorateMarkdown, documentId, folding, formattingKeymap, linkTooltip, listener, preview, selectionState, typewriter } from "@dxos/react-ui-editor";
|
|
42
|
+
import { defaultTx } from "@dxos/react-ui-theme";
|
|
43
|
+
import { isNotFalsy } from "@dxos/util";
|
|
44
|
+
var __dxlog_file = "/__w/dxos/dxos/packages/plugins/plugin-markdown/src/extensions.tsx";
|
|
45
|
+
var useExtensions = ({ document, id, text, settings, selectionManager, viewMode, editorStateStore, previewOptions }) => {
|
|
46
|
+
const { dispatchPromise: dispatch } = useIntentDispatcher();
|
|
47
|
+
const identity = useIdentity();
|
|
48
|
+
const space = getSpace(document) ?? getSpace(text);
|
|
49
|
+
const baseExtensions = useMemo(() => createBaseExtensions({
|
|
50
|
+
document,
|
|
51
|
+
id,
|
|
52
|
+
text,
|
|
53
|
+
settings,
|
|
54
|
+
selectionManager,
|
|
55
|
+
viewMode,
|
|
56
|
+
previewOptions,
|
|
57
|
+
dispatch
|
|
58
|
+
}), [
|
|
59
|
+
document,
|
|
60
|
+
id,
|
|
61
|
+
text,
|
|
62
|
+
viewMode,
|
|
63
|
+
dispatch,
|
|
64
|
+
previewOptions,
|
|
65
|
+
settings,
|
|
66
|
+
settings.editorInputMode,
|
|
67
|
+
settings.folding,
|
|
68
|
+
settings.numberedHeadings,
|
|
69
|
+
settings.debug,
|
|
70
|
+
settings.typewriter,
|
|
71
|
+
selectionManager
|
|
72
|
+
]);
|
|
73
|
+
const extensionProviders = useCapabilities(MarkdownCapabilities.Extensions);
|
|
74
|
+
const pluginExtensions = useMemo(() => {
|
|
75
|
+
if (!document) {
|
|
76
|
+
return [];
|
|
77
|
+
}
|
|
78
|
+
return extensionProviders.flat().reduce((acc, provider) => {
|
|
79
|
+
const extension = typeof provider === "function" ? provider({
|
|
80
|
+
document
|
|
81
|
+
}) : provider;
|
|
82
|
+
if (extension) {
|
|
83
|
+
acc.push(extension);
|
|
84
|
+
}
|
|
85
|
+
return acc;
|
|
86
|
+
}, []);
|
|
87
|
+
}, [
|
|
88
|
+
extensionProviders,
|
|
89
|
+
document
|
|
90
|
+
]);
|
|
91
|
+
return useMemo(() => [
|
|
92
|
+
// NOTE: Data extensions must be first so that automerge is updated before other extensions compute their state.
|
|
93
|
+
document && createDataExtensions({
|
|
94
|
+
id: document.id,
|
|
95
|
+
text: document.content.target && createDocAccessor(document.content.target, [
|
|
96
|
+
"content"
|
|
97
|
+
]),
|
|
98
|
+
space,
|
|
99
|
+
identity
|
|
100
|
+
}),
|
|
101
|
+
text && id && createDataExtensions({
|
|
102
|
+
id,
|
|
103
|
+
text: createDocAccessor(text, [
|
|
104
|
+
"content"
|
|
105
|
+
]),
|
|
106
|
+
space,
|
|
107
|
+
identity
|
|
108
|
+
}),
|
|
109
|
+
selectionState(editorStateStore),
|
|
110
|
+
document && listener({
|
|
111
|
+
onChange: (text2) => setFallbackName(document, text2)
|
|
112
|
+
}),
|
|
113
|
+
baseExtensions,
|
|
114
|
+
pluginExtensions
|
|
115
|
+
].filter(isNotFalsy), [
|
|
116
|
+
baseExtensions,
|
|
117
|
+
pluginExtensions,
|
|
118
|
+
document,
|
|
119
|
+
document?.content?.target,
|
|
120
|
+
text,
|
|
121
|
+
id,
|
|
122
|
+
space,
|
|
123
|
+
identity
|
|
124
|
+
]);
|
|
125
|
+
};
|
|
126
|
+
var createBaseExtensions = ({ document, id, dispatch, settings, selectionManager, viewMode, previewOptions }) => {
|
|
127
|
+
const extensions = [
|
|
128
|
+
selectionManager && selectionChange(selectionManager),
|
|
129
|
+
settings.editorInputMode && InputModeExtensions[settings.editorInputMode],
|
|
130
|
+
settings.folding && folding()
|
|
131
|
+
].filter(isNotFalsy);
|
|
132
|
+
if (viewMode !== "source") {
|
|
133
|
+
extensions.push(...[
|
|
134
|
+
formattingKeymap(),
|
|
135
|
+
decorateMarkdown({
|
|
136
|
+
selectionChangeDelay: 100,
|
|
137
|
+
numberedHeadings: settings.numberedHeadings ? {
|
|
138
|
+
from: 2
|
|
139
|
+
} : void 0,
|
|
140
|
+
// TODO(wittjosiah): For internal links, consider ignoring the link text and rendering the label of the object being linked to.
|
|
141
|
+
renderLinkButton: dispatch && (document || id) ? createLinkRenderer((id2) => {
|
|
142
|
+
void dispatch(createIntent(LayoutAction.Open, {
|
|
143
|
+
part: "main",
|
|
144
|
+
subject: [
|
|
145
|
+
id2
|
|
146
|
+
],
|
|
147
|
+
options: {
|
|
148
|
+
pivotId: document ? fullyQualifiedId(document) : id2
|
|
149
|
+
}
|
|
150
|
+
}));
|
|
151
|
+
}) : void 0
|
|
152
|
+
}),
|
|
153
|
+
linkTooltip(renderLinkTooltip),
|
|
154
|
+
preview(previewOptions)
|
|
155
|
+
]);
|
|
156
|
+
}
|
|
157
|
+
if (settings.debug) {
|
|
158
|
+
const items = settings.typewriter?.split(/[,\n]/) ?? "";
|
|
159
|
+
if (items) {
|
|
160
|
+
extensions.push(typewriter({
|
|
161
|
+
items
|
|
162
|
+
}));
|
|
163
|
+
}
|
|
164
|
+
}
|
|
165
|
+
return extensions;
|
|
166
|
+
};
|
|
167
|
+
var selectionChange = (selectionManager) => {
|
|
168
|
+
return EditorView.updateListener.of(debounceAndThrottle((update) => {
|
|
169
|
+
if (update.selectionSet) {
|
|
170
|
+
const id = update.state.facet(documentId);
|
|
171
|
+
const cursorConverter = update.state.facet(Cursor.converter);
|
|
172
|
+
const selection = update.state.selection;
|
|
173
|
+
const ranges = selection.ranges.map((range) => ({
|
|
174
|
+
from: cursorConverter.toCursor(range.from),
|
|
175
|
+
to: cursorConverter.toCursor(range.to)
|
|
176
|
+
})).filter(({ from, to }) => to > from);
|
|
177
|
+
selectionManager.updateMultiRange(id, ranges);
|
|
178
|
+
}
|
|
179
|
+
}, 100));
|
|
180
|
+
};
|
|
181
|
+
var style = {
|
|
182
|
+
hover: "rounded-sm text-primary-500 hover:text-primary-600 dark:text-primary-500 hover:dark:text-primary-400",
|
|
183
|
+
icon: "inline-block leading-none mis-1 cursor-pointer"
|
|
184
|
+
};
|
|
185
|
+
var createLinkRenderer = (onSelectObject) => (el, { url }) => {
|
|
186
|
+
const isInternal = url.startsWith("/") || // TODO(wittjosiah): This should probably be parsed out on paste?
|
|
187
|
+
url.startsWith(window.location.origin);
|
|
188
|
+
const options = isInternal ? {
|
|
189
|
+
onClick: () => {
|
|
190
|
+
const qualifiedId = url.split("/").at(-1);
|
|
191
|
+
invariant(qualifiedId, "Invalid link format.", {
|
|
192
|
+
F: __dxlog_file,
|
|
193
|
+
L: 263,
|
|
194
|
+
S: void 0,
|
|
195
|
+
A: [
|
|
196
|
+
"qualifiedId",
|
|
197
|
+
"'Invalid link format.'"
|
|
198
|
+
]
|
|
199
|
+
});
|
|
200
|
+
onSelectObject(qualifiedId);
|
|
201
|
+
}
|
|
202
|
+
} : {
|
|
203
|
+
href: url,
|
|
204
|
+
rel: "noreferrer",
|
|
205
|
+
target: "_blank"
|
|
206
|
+
};
|
|
207
|
+
renderRoot(el, /* @__PURE__ */ React.createElement("a", {
|
|
208
|
+
...options,
|
|
209
|
+
className: style.hover
|
|
210
|
+
}, /* @__PURE__ */ React.createElement(Icon, {
|
|
211
|
+
icon: isInternal ? "ph--arrow-square-down--bold" : "ph--arrow-square-out--bold",
|
|
212
|
+
size: 4,
|
|
213
|
+
classNames: style.icon
|
|
214
|
+
})));
|
|
215
|
+
};
|
|
216
|
+
var renderLinkTooltip = (el, { url }) => {
|
|
217
|
+
const web = new URL(url);
|
|
218
|
+
renderRoot(el, /* @__PURE__ */ React.createElement("a", {
|
|
219
|
+
href: url,
|
|
220
|
+
rel: "noreferrer",
|
|
221
|
+
target: "_blank",
|
|
222
|
+
className: style.hover
|
|
223
|
+
}, web.origin, /* @__PURE__ */ React.createElement(Icon, {
|
|
224
|
+
icon: "ph--arrow-square-out--bold",
|
|
225
|
+
size: 4,
|
|
226
|
+
classNames: style.icon
|
|
227
|
+
})));
|
|
228
|
+
};
|
|
229
|
+
var renderRoot = (root, node) => {
|
|
230
|
+
createRoot(root).render(/* @__PURE__ */ React.createElement(ThemeProvider, {
|
|
231
|
+
tx: defaultTx
|
|
232
|
+
}, node));
|
|
233
|
+
return root;
|
|
234
|
+
};
|
|
235
|
+
|
|
31
236
|
// src/components/MarkdownEditor/MarkdownEditor.tsx
|
|
32
237
|
import { useSignals as _useSignals } from "@preact-signals/safe-react/tracking";
|
|
33
|
-
import
|
|
238
|
+
import React2, { forwardRef, useCallback, useEffect, useImperativeHandle, useMemo as useMemo3, useRef } from "react";
|
|
34
239
|
import { useDropzone } from "react-dropzone";
|
|
35
|
-
import { invariant as
|
|
240
|
+
import { invariant as invariant3 } from "@dxos/invariant";
|
|
36
241
|
import { toLocalizedString, useThemeContext, useTranslation } from "@dxos/react-ui";
|
|
37
|
-
import {
|
|
242
|
+
import { CommandMenuProvider, Domino, EditorToolbar, addLink, coreSlashCommands, createBasicExtensions, createMarkdownExtensions, createThemeExtensions, dropFile, editorGutter, editorSlots, filterItems, linkSlashCommands, processEditorPayload, stackItemContentEditorClassNames, useCommandMenu, useEditorToolbarState, useFormattingState, useTextEditor } from "@dxos/react-ui-editor";
|
|
38
243
|
import { StackItem } from "@dxos/react-ui-stack";
|
|
39
|
-
import {
|
|
244
|
+
import { isNonNullable, isNotFalsy as isNotFalsy2 } from "@dxos/util";
|
|
40
245
|
|
|
41
246
|
// src/hooks/useSelectCurrentThread.tsx
|
|
42
|
-
import { EditorView } from "@codemirror/view";
|
|
247
|
+
import { EditorView as EditorView2 } from "@codemirror/view";
|
|
43
248
|
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
|
|
249
|
+
import { useMemo as useMemo2 } from "react";
|
|
250
|
+
import { LayoutAction as LayoutAction2, createResolver, useIntentResolver } from "@dxos/app-framework";
|
|
251
|
+
import { invariant as invariant2 } from "@dxos/invariant";
|
|
252
|
+
import { Cursor as Cursor2, setSelection } from "@dxos/react-ui-editor";
|
|
253
|
+
var __dxlog_file2 = "/__w/dxos/dxos/packages/plugins/plugin-markdown/src/hooks/useSelectCurrentThread.tsx";
|
|
49
254
|
var useSelectCurrentThread = (editorView, documentId2) => {
|
|
50
|
-
const scrollIntoViewResolver =
|
|
51
|
-
intent:
|
|
255
|
+
const scrollIntoViewResolver = useMemo2(() => createResolver({
|
|
256
|
+
intent: LayoutAction2.UpdateLayout,
|
|
52
257
|
position: "hoist",
|
|
53
258
|
filter: (data) => {
|
|
54
|
-
if (!Schema.is(
|
|
259
|
+
if (!Schema.is(LayoutAction2.ScrollIntoView.fields.input)(data)) {
|
|
55
260
|
return false;
|
|
56
261
|
}
|
|
57
262
|
return !!editorView && data.subject === documentId2 && !!data.options?.cursor;
|
|
58
263
|
},
|
|
59
264
|
resolve: ({ options: { cursor } }) => {
|
|
60
|
-
|
|
61
|
-
F:
|
|
265
|
+
invariant2(editorView, "Editor view is not defined.", {
|
|
266
|
+
F: __dxlog_file2,
|
|
62
267
|
L: 32,
|
|
63
268
|
S: void 0,
|
|
64
269
|
A: [
|
|
@@ -66,14 +271,14 @@ var useSelectCurrentThread = (editorView, documentId2) => {
|
|
|
66
271
|
"'Editor view is not defined.'"
|
|
67
272
|
]
|
|
68
273
|
});
|
|
69
|
-
const range =
|
|
274
|
+
const range = Cursor2.getRangeFromCursor(editorView.state, cursor);
|
|
70
275
|
if (range) {
|
|
71
276
|
const selection = editorView.state.selection.main.from !== range.from ? {
|
|
72
277
|
anchor: range.from
|
|
73
278
|
} : void 0;
|
|
74
279
|
const effects = [
|
|
75
280
|
// NOTE: This does not use the DOM scrollIntoView function.
|
|
76
|
-
|
|
281
|
+
EditorView2.scrollIntoView(range.from, {
|
|
77
282
|
y: "start",
|
|
78
283
|
yMargin: 96
|
|
79
284
|
})
|
|
@@ -95,12 +300,12 @@ var useSelectCurrentThread = (editorView, documentId2) => {
|
|
|
95
300
|
documentId2,
|
|
96
301
|
editorView
|
|
97
302
|
]);
|
|
98
|
-
useIntentResolver(
|
|
303
|
+
useIntentResolver(meta.id, scrollIntoViewResolver);
|
|
99
304
|
};
|
|
100
305
|
|
|
101
306
|
// src/components/MarkdownEditor/MarkdownEditor.tsx
|
|
102
|
-
var
|
|
103
|
-
var MarkdownEditor = ({ extensions:
|
|
307
|
+
var __dxlog_file3 = "/__w/dxos/dxos/packages/plugins/plugin-markdown/src/components/MarkdownEditor/MarkdownEditor.tsx";
|
|
308
|
+
var MarkdownEditor = ({ extensions: extensionsParam, slashCommandGroups, onLinkQuery, ...props }) => {
|
|
104
309
|
var _effect = _useSignals();
|
|
105
310
|
try {
|
|
106
311
|
const { t } = useTranslation();
|
|
@@ -121,7 +326,7 @@ var MarkdownEditor = ({ extensions: _extensions, slashCommandGroups, onLinkQuery
|
|
|
121
326
|
onLinkQuery,
|
|
122
327
|
slashCommandGroups
|
|
123
328
|
]);
|
|
124
|
-
const options =
|
|
329
|
+
const options = useMemo3(() => {
|
|
125
330
|
const trigger = onLinkQuery ? [
|
|
126
331
|
"/",
|
|
127
332
|
"@"
|
|
@@ -133,45 +338,28 @@ var MarkdownEditor = ({ extensions: _extensions, slashCommandGroups, onLinkQuery
|
|
|
133
338
|
trigger,
|
|
134
339
|
placeholder: {
|
|
135
340
|
delay: 3e3,
|
|
136
|
-
content: () =>
|
|
137
|
-
return createElement("div", void 0, [
|
|
138
|
-
createElement("span", {
|
|
139
|
-
text: "Press"
|
|
140
|
-
}),
|
|
141
|
-
...trigger.map((text) => createElement("span", {
|
|
142
|
-
className: "border border-separator rounded-sm mx-1 px-1.5 pt-[1px] pb-[2px]",
|
|
143
|
-
text
|
|
144
|
-
})),
|
|
145
|
-
createElement("span", {
|
|
146
|
-
text: "for commands."
|
|
147
|
-
})
|
|
148
|
-
]);
|
|
149
|
-
}
|
|
341
|
+
content: () => Domino.of("div").child(Domino.of("span").text("Press"), ...trigger.map((text) => Domino.of("span").classNames("border border-separator rounded-sm mx-1 px-1.5 pt-[1px] pb-[2px]").text(text)), Domino.of("span").text("for commands.")).build()
|
|
150
342
|
},
|
|
151
343
|
getMenu
|
|
152
344
|
};
|
|
153
345
|
}, [
|
|
154
346
|
getMenu
|
|
155
347
|
]);
|
|
156
|
-
const { commandMenu, groupsRef,
|
|
157
|
-
const extensions =
|
|
158
|
-
|
|
348
|
+
const { commandMenu, groupsRef, ...commandMenuProps } = useCommandMenu(options);
|
|
349
|
+
const extensions = useMemo3(() => [
|
|
350
|
+
extensionsParam,
|
|
159
351
|
commandMenu
|
|
160
|
-
].filter(
|
|
161
|
-
|
|
352
|
+
].filter(isNotFalsy2), [
|
|
353
|
+
extensionsParam,
|
|
162
354
|
commandMenu
|
|
163
355
|
]);
|
|
164
|
-
return /* @__PURE__ */
|
|
165
|
-
|
|
166
|
-
...
|
|
167
|
-
}, /* @__PURE__ */
|
|
356
|
+
return /* @__PURE__ */ React2.createElement(CommandMenuProvider, {
|
|
357
|
+
groups: groupsRef.current,
|
|
358
|
+
...commandMenuProps
|
|
359
|
+
}, /* @__PURE__ */ React2.createElement(MarkdownEditorImpl, {
|
|
168
360
|
ref: viewRef,
|
|
169
361
|
...props,
|
|
170
362
|
extensions
|
|
171
|
-
}), /* @__PURE__ */ React.createElement(CommandMenu, {
|
|
172
|
-
groups: groupsRef.current,
|
|
173
|
-
currentItem,
|
|
174
|
-
onSelect
|
|
175
363
|
}));
|
|
176
364
|
} finally {
|
|
177
365
|
_effect.f();
|
|
@@ -180,16 +368,16 @@ var MarkdownEditor = ({ extensions: _extensions, slashCommandGroups, onLinkQuery
|
|
|
180
368
|
var MarkdownEditorImpl = /* @__PURE__ */ forwardRef(({ id, role = "article", initialValue, customActions, editorStateStore, extensions, extensionProviders, scrollPastEnd, toolbar, viewMode, onFileUpload, onViewModeChange }, forwardedRef) => {
|
|
181
369
|
var _effect = _useSignals();
|
|
182
370
|
try {
|
|
183
|
-
const { t } = useTranslation(
|
|
371
|
+
const { t } = useTranslation(meta.id);
|
|
184
372
|
const { themeMode } = useThemeContext();
|
|
185
373
|
const toolbarState = useEditorToolbarState({
|
|
186
374
|
viewMode
|
|
187
375
|
});
|
|
188
376
|
const formattingObserver = useFormattingState(toolbarState);
|
|
189
|
-
const { scrollTo, selection } =
|
|
377
|
+
const { scrollTo, selection } = useMemo3(() => editorStateStore?.getState(id) ?? {}, [
|
|
190
378
|
id
|
|
191
379
|
]);
|
|
192
|
-
const providerExtensions =
|
|
380
|
+
const providerExtensions = useMemo3(() => extensionProviders?.flatMap((provider) => provider({})).filter(isNonNullable), [
|
|
193
381
|
extensionProviders
|
|
194
382
|
]);
|
|
195
383
|
const handleDrop = async (view, { files }) => {
|
|
@@ -209,11 +397,10 @@ var MarkdownEditorImpl = /* @__PURE__ */ forwardRef(({ id, role = "article", ini
|
|
|
209
397
|
createBasicExtensions({
|
|
210
398
|
readOnly: viewMode === "readonly",
|
|
211
399
|
placeholder: t("editor placeholder"),
|
|
212
|
-
scrollPastEnd: role === "section" ? false : scrollPastEnd
|
|
213
|
-
|
|
214
|
-
createMarkdownExtensions({
|
|
215
|
-
themeMode
|
|
400
|
+
scrollPastEnd: role === "section" ? false : scrollPastEnd,
|
|
401
|
+
search: true
|
|
216
402
|
}),
|
|
403
|
+
createMarkdownExtensions(),
|
|
217
404
|
createThemeExtensions({
|
|
218
405
|
themeMode,
|
|
219
406
|
syntaxHighlighting: true,
|
|
@@ -225,7 +412,7 @@ var MarkdownEditorImpl = /* @__PURE__ */ forwardRef(({ id, role = "article", ini
|
|
|
225
412
|
}),
|
|
226
413
|
providerExtensions,
|
|
227
414
|
extensions
|
|
228
|
-
].filter(
|
|
415
|
+
].filter(isNotFalsy2),
|
|
229
416
|
...role !== "section" && {
|
|
230
417
|
id,
|
|
231
418
|
scrollTo,
|
|
@@ -284,9 +471,9 @@ var MarkdownEditorImpl = /* @__PURE__ */ forwardRef(({ id, role = "article", ini
|
|
|
284
471
|
onFileUpload
|
|
285
472
|
]);
|
|
286
473
|
const getView = useCallback(() => {
|
|
287
|
-
|
|
288
|
-
F:
|
|
289
|
-
L:
|
|
474
|
+
invariant3(editorView, void 0, {
|
|
475
|
+
F: __dxlog_file3,
|
|
476
|
+
L: 238,
|
|
290
477
|
S: void 0,
|
|
291
478
|
A: [
|
|
292
479
|
"editorView",
|
|
@@ -308,9 +495,9 @@ var MarkdownEditorImpl = /* @__PURE__ */ forwardRef(({ id, role = "article", ini
|
|
|
308
495
|
}, [
|
|
309
496
|
onFileUpload
|
|
310
497
|
]);
|
|
311
|
-
return /* @__PURE__ */
|
|
498
|
+
return /* @__PURE__ */ React2.createElement(StackItem.Content, {
|
|
312
499
|
toolbar: !!toolbar
|
|
313
|
-
}, toolbar && /* @__PURE__ */
|
|
500
|
+
}, toolbar && /* @__PURE__ */ React2.createElement(React2.Fragment, null, /* @__PURE__ */ React2.createElement(EditorToolbar, {
|
|
314
501
|
attendableId: id,
|
|
315
502
|
role,
|
|
316
503
|
state: toolbarState,
|
|
@@ -318,7 +505,7 @@ var MarkdownEditorImpl = /* @__PURE__ */ forwardRef(({ id, role = "article", ini
|
|
|
318
505
|
getView,
|
|
319
506
|
image: handleImageUpload,
|
|
320
507
|
viewMode: handleViewModeChange
|
|
321
|
-
}), /* @__PURE__ */
|
|
508
|
+
}), /* @__PURE__ */ React2.createElement("input", getInputProps())), /* @__PURE__ */ React2.createElement("div", {
|
|
322
509
|
role: "none",
|
|
323
510
|
ref: parentRef,
|
|
324
511
|
"data-testid": "composer.markdownRoot",
|
|
@@ -342,228 +529,13 @@ var useTest = (view) => {
|
|
|
342
529
|
]);
|
|
343
530
|
};
|
|
344
531
|
|
|
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
532
|
// src/components/MarkdownContainer.tsx
|
|
561
533
|
var MarkdownContainer = ({ id, role, object, settings, selectionManager, viewMode, editorStateStore, onViewModeChange }) => {
|
|
562
534
|
var _effect = _useSignals2();
|
|
563
535
|
try {
|
|
564
536
|
const { t } = useTranslation2();
|
|
565
537
|
const scrollPastEnd = role === "article";
|
|
566
|
-
const doc = Obj.instanceOf(
|
|
538
|
+
const doc = Obj.instanceOf(Markdown_exports.Document, object) ? object : void 0;
|
|
567
539
|
const text = Obj.instanceOf(DataType.Text, object) ? object : void 0;
|
|
568
540
|
const [previewBlocks, setPreviewBlocks] = useState([]);
|
|
569
541
|
const previewOptions = useMemo4(() => ({
|
|
@@ -627,7 +599,7 @@ var MarkdownContainer = ({ id, role, object, settings, selectionManager, viewMod
|
|
|
627
599
|
label,
|
|
628
600
|
icon: metadata.icon,
|
|
629
601
|
onSelect: (view, head) => {
|
|
630
|
-
const link = `[${label}]
|
|
602
|
+
const link = `[${label}](${Obj.getDXN(object2)})`;
|
|
631
603
|
if (query?.startsWith("@")) {
|
|
632
604
|
insertAtLineStart(view, head, `!${link}
|
|
633
605
|
`);
|
|
@@ -774,6 +746,7 @@ var DocumentEditor = ({ id, document: doc, settings, viewMode, ...props }) => {
|
|
|
774
746
|
var MarkdownContainer_default = MarkdownContainer;
|
|
775
747
|
export {
|
|
776
748
|
DocumentEditor,
|
|
749
|
+
MarkdownContainer,
|
|
777
750
|
MarkdownContainer_default as default
|
|
778
751
|
};
|
|
779
|
-
//# sourceMappingURL=MarkdownContainer-
|
|
752
|
+
//# sourceMappingURL=MarkdownContainer-5FTROSXN.mjs.map
|