@dxos/plugin-markdown 0.8.4-main.c1de068 → 0.8.4-main.c4373fc
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-ZHTH6EVA.mjs} +18 -18
- package/dist/lib/browser/MarkdownCard-ZHTH6EVA.mjs.map +7 -0
- package/dist/lib/browser/{MarkdownContainer-F3WEEIBX.mjs → MarkdownContainer-XDYFBDCI.mjs} +287 -315
- package/dist/lib/browser/MarkdownContainer-XDYFBDCI.mjs.map +7 -0
- package/dist/lib/browser/{anchor-sort-UKJJ7ZNP.mjs → anchor-sort-53E7TJGF.mjs} +7 -7
- package/dist/lib/browser/anchor-sort-53E7TJGF.mjs.map +7 -0
- package/dist/lib/browser/{app-graph-serializer-ICLAF662.mjs → app-graph-serializer-IEPNJZBR.mjs} +13 -14
- package/dist/lib/browser/app-graph-serializer-IEPNJZBR.mjs.map +7 -0
- package/dist/lib/browser/blueprint-definition-XDLVVSUN.mjs +11 -0
- package/dist/lib/browser/blueprint-definition-XDLVVSUN.mjs.map +7 -0
- package/dist/lib/browser/chunk-EVQGTH3P.mjs +22 -0
- package/dist/lib/browser/chunk-EVQGTH3P.mjs.map +7 -0
- package/dist/lib/browser/{chunk-LHDCHDBW.mjs → chunk-NGXGBWSS.mjs} +6 -5
- package/dist/lib/browser/chunk-NGXGBWSS.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-PMBWHKDI.mjs +78 -0
- package/dist/lib/browser/chunk-PMBWHKDI.mjs.map +7 -0
- package/dist/lib/browser/chunk-VZU7BRGW.mjs +106 -0
- package/dist/lib/browser/chunk-VZU7BRGW.mjs.map +7 -0
- package/dist/lib/browser/{chunk-LFML7LC6.mjs → chunk-XYQDM6PM.mjs} +8 -9
- package/dist/lib/browser/chunk-XYQDM6PM.mjs.map +7 -0
- package/dist/lib/browser/index.mjs +35 -22
- package/dist/lib/browser/index.mjs.map +3 -3
- package/dist/lib/browser/intent-resolver-66ZUQ6JC.mjs +62 -0
- package/dist/lib/browser/intent-resolver-66ZUQ6JC.mjs.map +7 -0
- package/dist/lib/browser/meta.json +1 -1
- package/dist/lib/browser/{react-surface-C3Z423TV.mjs → react-surface-ONX5RNFM.mjs} +55 -46
- package/dist/lib/browser/react-surface-ONX5RNFM.mjs.map +7 -0
- package/dist/lib/browser/{settings-KN75ZQY6.mjs → settings-HXM36BCZ.mjs} +7 -7
- package/dist/lib/browser/settings-HXM36BCZ.mjs.map +7 -0
- package/dist/lib/browser/{state-LZWTAS65.mjs → state-6QODXCSZ.mjs} +9 -9
- package/dist/lib/browser/state-6QODXCSZ.mjs.map +7 -0
- package/dist/lib/browser/toolkit-73U3A7SD.mjs +76 -0
- package/dist/lib/browser/toolkit-73U3A7SD.mjs.map +7 -0
- package/dist/lib/browser/types/index.mjs +6 -14
- package/dist/lib/node-esm/{MarkdownPreview-77UFEWXT.mjs → MarkdownCard-MEA4QAAI.mjs} +18 -18
- package/dist/lib/node-esm/MarkdownCard-MEA4QAAI.mjs.map +7 -0
- package/dist/lib/node-esm/{MarkdownContainer-VOUHL6IU.mjs → MarkdownContainer-7GYMOJVT.mjs} +287 -315
- package/dist/lib/node-esm/MarkdownContainer-7GYMOJVT.mjs.map +7 -0
- package/dist/lib/node-esm/{anchor-sort-IPIS5D5B.mjs → anchor-sort-V2FWEYDN.mjs} +7 -7
- package/dist/lib/node-esm/anchor-sort-V2FWEYDN.mjs.map +7 -0
- package/dist/lib/node-esm/{app-graph-serializer-FLBXQKKR.mjs → app-graph-serializer-HIN4NMUG.mjs} +13 -14
- package/dist/lib/node-esm/app-graph-serializer-HIN4NMUG.mjs.map +7 -0
- package/dist/lib/node-esm/blueprint-definition-PDXZ67UQ.mjs +12 -0
- package/dist/lib/node-esm/blueprint-definition-PDXZ67UQ.mjs.map +7 -0
- package/dist/lib/node-esm/chunk-35WAARP4.mjs +79 -0
- package/dist/lib/node-esm/chunk-35WAARP4.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-CWTFQSN7.mjs → chunk-IOC54NCF.mjs} +8 -9
- package/dist/lib/node-esm/chunk-IOC54NCF.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/chunk-VELFUWUH.mjs +107 -0
- package/dist/lib/node-esm/chunk-VELFUWUH.mjs.map +7 -0
- package/dist/lib/node-esm/chunk-W4XXBX33.mjs +24 -0
- package/dist/lib/node-esm/chunk-W4XXBX33.mjs.map +7 -0
- package/dist/lib/node-esm/{chunk-VIR2ABYE.mjs → chunk-YGSNWTGP.mjs} +6 -5
- package/dist/lib/node-esm/chunk-YGSNWTGP.mjs.map +7 -0
- package/dist/lib/node-esm/index.mjs +35 -22
- package/dist/lib/node-esm/index.mjs.map +3 -3
- package/dist/lib/node-esm/intent-resolver-TNRIFHNH.mjs +63 -0
- package/dist/lib/node-esm/intent-resolver-TNRIFHNH.mjs.map +7 -0
- package/dist/lib/node-esm/meta.json +1 -1
- package/dist/lib/node-esm/{react-surface-TTTBYNI2.mjs → react-surface-X2GV6WQH.mjs} +55 -46
- package/dist/lib/node-esm/react-surface-X2GV6WQH.mjs.map +7 -0
- package/dist/lib/node-esm/{settings-KVP7TVX7.mjs → settings-KPLQ5ONI.mjs} +7 -7
- package/dist/lib/node-esm/settings-KPLQ5ONI.mjs.map +7 -0
- package/dist/lib/node-esm/{state-NW3W4JCQ.mjs → state-W3PECOJX.mjs} +9 -9
- package/dist/lib/node-esm/state-W3PECOJX.mjs.map +7 -0
- package/dist/lib/node-esm/toolkit-GUBDYF72.mjs +77 -0
- package/dist/lib/node-esm/toolkit-GUBDYF72.mjs.map +7 -0
- package/dist/lib/node-esm/types/index.mjs +6 -14
- package/dist/types/src/MarkdownPlugin.d.ts +1 -1
- 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 +9 -0
- package/dist/types/src/components/MarkdownCard/MarkdownCard.stories.d.ts.map +1 -0
- package/dist/types/src/components/MarkdownCard/index.d.ts +4 -0
- package/dist/types/src/components/MarkdownCard/index.d.ts.map +1 -0
- package/dist/types/src/components/MarkdownContainer.d.ts +5 -5
- package/dist/types/src/components/MarkdownContainer.d.ts.map +1 -1
- package/dist/types/src/components/MarkdownContainer.stories.d.ts +51 -5
- 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 +111 -13
- package/dist/types/src/components/MarkdownEditor/MarkdownEditor.stories.d.ts.map +1 -1
- package/dist/types/src/components/MarkdownSettings/MarkdownSettings.d.ts +2 -2
- package/dist/types/src/components/MarkdownSettings/MarkdownSettings.d.ts.map +1 -1
- package/dist/types/src/components/Suggestions.stories.d.ts +3 -4
- package/dist/types/src/components/Suggestions.stories.d.ts.map +1 -1
- package/dist/types/src/components/Toolbar.stories.d.ts +45 -8
- 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/hooks/useSelectCurrentThread.d.ts +1 -1
- package/dist/types/src/hooks/useSelectCurrentThread.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 +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 +57 -52
- package/src/MarkdownPlugin.tsx +103 -95
- package/src/capabilities/anchor-sort.ts +3 -3
- package/src/capabilities/app-graph-serializer.ts +9 -7
- package/src/capabilities/artifact-definition.ts +20 -24
- package/src/capabilities/blueprint-definition.ts +39 -0
- package/src/capabilities/capabilities.ts +5 -4
- package/src/capabilities/index.ts +3 -1
- package/src/capabilities/intent-resolver.ts +16 -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 +49 -0
- package/src/components/MarkdownCard/MarkdownCard.stories.tsx +76 -0
- package/src/components/{MarkdownPreview/MarkdownPreview.tsx → MarkdownCard/MarkdownCard.tsx} +13 -11
- package/src/components/MarkdownCard/index.ts +9 -0
- package/src/components/MarkdownContainer.stories.tsx +47 -41
- package/src/components/MarkdownContainer.tsx +22 -19
- package/src/components/MarkdownEditor/MarkdownEditor.stories.tsx +21 -17
- package/src/components/MarkdownEditor/MarkdownEditor.tsx +39 -39
- package/src/components/MarkdownSettings/MarkdownSettings.tsx +81 -78
- package/src/components/Suggestions.stories.tsx +51 -51
- package/src/components/Toolbar.stories.tsx +23 -18
- package/src/components/index.ts +1 -1
- package/src/events.ts +2 -2
- package/src/extensions.tsx +13 -41
- package/src/functions/diff.ts +37 -0
- package/src/functions/index.ts +6 -0
- package/src/functions/open.ts +32 -0
- package/src/hooks/useSelectCurrentThread.tsx +5 -5
- package/src/index.ts +4 -1
- package/src/meta.ts +7 -8
- package/src/translations.ts +3 -2
- package/src/types/Markdown.ts +56 -0
- package/src/types/MarkdownAction.ts +29 -0
- package/src/types/index.ts +2 -1
- package/src/types/types.ts +6 -50
- package/src/util.tsx +20 -6
- package/dist/lib/browser/MarkdownContainer-F3WEEIBX.mjs.map +0 -7
- package/dist/lib/browser/MarkdownPreview-S3C7CGAV.mjs.map +0 -7
- package/dist/lib/browser/anchor-sort-UKJJ7ZNP.mjs.map +0 -7
- package/dist/lib/browser/app-graph-serializer-ICLAF662.mjs.map +0 -7
- package/dist/lib/browser/artifact-definition-R2YYWOPN.mjs +0 -145
- package/dist/lib/browser/artifact-definition-R2YYWOPN.mjs.map +0 -7
- package/dist/lib/browser/chunk-777RIED6.mjs +0 -16
- package/dist/lib/browser/chunk-777RIED6.mjs.map +0 -7
- package/dist/lib/browser/chunk-EPTSAJZM.mjs +0 -22
- package/dist/lib/browser/chunk-EPTSAJZM.mjs.map +0 -7
- package/dist/lib/browser/chunk-LFML7LC6.mjs.map +0 -7
- package/dist/lib/browser/chunk-LHDCHDBW.mjs.map +0 -7
- package/dist/lib/browser/chunk-PHTD5DTR.mjs +0 -20
- package/dist/lib/browser/chunk-PHTD5DTR.mjs.map +0 -7
- package/dist/lib/browser/chunk-UANWRJZU.mjs +0 -79
- package/dist/lib/browser/chunk-UANWRJZU.mjs.map +0 -7
- package/dist/lib/browser/intent-resolver-3MXYO3MW.mjs +0 -64
- package/dist/lib/browser/intent-resolver-3MXYO3MW.mjs.map +0 -7
- package/dist/lib/browser/react-surface-C3Z423TV.mjs.map +0 -7
- package/dist/lib/browser/settings-KN75ZQY6.mjs.map +0 -7
- package/dist/lib/browser/state-LZWTAS65.mjs.map +0 -7
- package/dist/lib/node-esm/MarkdownContainer-VOUHL6IU.mjs.map +0 -7
- package/dist/lib/node-esm/MarkdownPreview-77UFEWXT.mjs.map +0 -7
- package/dist/lib/node-esm/anchor-sort-IPIS5D5B.mjs.map +0 -7
- package/dist/lib/node-esm/app-graph-serializer-FLBXQKKR.mjs.map +0 -7
- package/dist/lib/node-esm/artifact-definition-MLTAY4LK.mjs +0 -146
- package/dist/lib/node-esm/artifact-definition-MLTAY4LK.mjs.map +0 -7
- package/dist/lib/node-esm/chunk-7X6TPTJK.mjs +0 -22
- package/dist/lib/node-esm/chunk-7X6TPTJK.mjs.map +0 -7
- package/dist/lib/node-esm/chunk-ACFGXH2K.mjs.map +0 -7
- package/dist/lib/node-esm/chunk-CWTFQSN7.mjs.map +0 -7
- package/dist/lib/node-esm/chunk-CXG7GMYP.mjs +0 -24
- package/dist/lib/node-esm/chunk-CXG7GMYP.mjs.map +0 -7
- package/dist/lib/node-esm/chunk-JEEQLO7C.mjs +0 -80
- package/dist/lib/node-esm/chunk-JEEQLO7C.mjs.map +0 -7
- package/dist/lib/node-esm/chunk-VIR2ABYE.mjs.map +0 -7
- package/dist/lib/node-esm/intent-resolver-BZYWV53A.mjs +0 -65
- package/dist/lib/node-esm/intent-resolver-BZYWV53A.mjs.map +0 -7
- package/dist/lib/node-esm/react-surface-TTTBYNI2.mjs.map +0 -7
- package/dist/lib/node-esm/settings-KVP7TVX7.mjs.map +0 -7
- package/dist/lib/node-esm/state-NW3W4JCQ.mjs.map +0 -7
- package/dist/types/src/components/MarkdownPreview/MarkdownPreview.d.ts +0 -6
- package/dist/types/src/components/MarkdownPreview/MarkdownPreview.d.ts.map +0 -1
- package/dist/types/src/components/MarkdownPreview/MarkdownPreview.stories.d.ts +0 -42
- package/dist/types/src/components/MarkdownPreview/MarkdownPreview.stories.d.ts.map +0 -1
- package/dist/types/src/components/MarkdownPreview/index.d.ts +0 -4
- package/dist/types/src/components/MarkdownPreview/index.d.ts.map +0 -1
- package/dist/types/src/types/schema.d.ts +0 -35
- package/dist/types/src/types/schema.d.ts.map +0 -1
- package/src/components/MarkdownPreview/MarkdownPreview.stories.tsx +0 -81
- package/src/components/MarkdownPreview/index.ts +0 -9
- package/src/types/schema.ts +0 -39
|
@@ -1,17 +1,18 @@
|
|
|
1
|
-
import "./chunk-
|
|
1
|
+
import "./chunk-EVQGTH3P.mjs";
|
|
2
|
+
import "./chunk-VZU7BRGW.mjs";
|
|
2
3
|
import {
|
|
3
4
|
MarkdownCapabilities
|
|
4
|
-
} from "./chunk-
|
|
5
|
+
} from "./chunk-OY6CGPOO.mjs";
|
|
5
6
|
import {
|
|
6
7
|
getFallbackName,
|
|
7
8
|
setFallbackName
|
|
8
|
-
} from "./chunk-
|
|
9
|
+
} from "./chunk-XYQDM6PM.mjs";
|
|
9
10
|
import {
|
|
10
|
-
|
|
11
|
-
} from "./chunk-
|
|
11
|
+
Markdown_exports
|
|
12
|
+
} from "./chunk-PMBWHKDI.mjs";
|
|
12
13
|
import {
|
|
13
|
-
|
|
14
|
-
} from "./chunk-
|
|
14
|
+
meta
|
|
15
|
+
} from "./chunk-ODB2PTBP.mjs";
|
|
15
16
|
|
|
16
17
|
// src/components/MarkdownContainer.tsx
|
|
17
18
|
import { useSignals as _useSignals2 } from "@preact-signals/safe-react/tracking";
|
|
@@ -22,42 +23,247 @@ import { Capabilities, Surface, useAppGraph, useCapabilities as useCapabilities2
|
|
|
22
23
|
import { DXN, Filter, Obj, Query, Type } from "@dxos/echo";
|
|
23
24
|
import { ClientCapabilities } from "@dxos/plugin-client";
|
|
24
25
|
import { SpaceCapabilities } from "@dxos/plugin-space";
|
|
25
|
-
import {
|
|
26
|
+
import { useClient } from "@dxos/react-client";
|
|
27
|
+
import { fullyQualifiedId as fullyQualifiedId2, getSpace as getSpace2 } from "@dxos/react-client/echo";
|
|
26
28
|
import { toLocalizedString as toLocalizedString2, useTranslation as useTranslation2 } from "@dxos/react-ui";
|
|
27
29
|
import { insertAtCursor, insertAtLineStart } from "@dxos/react-ui-editor";
|
|
28
30
|
import { DataType } from "@dxos/schema";
|
|
29
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 { isTruthy } 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(isTruthy), [
|
|
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(isTruthy);
|
|
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
|
+
|
|
30
236
|
// src/components/MarkdownEditor/MarkdownEditor.tsx
|
|
31
237
|
import { useSignals as _useSignals } from "@preact-signals/safe-react/tracking";
|
|
32
|
-
import
|
|
238
|
+
import React2, { forwardRef, useCallback, useEffect, useImperativeHandle, useMemo as useMemo3, useRef } from "react";
|
|
33
239
|
import { useDropzone } from "react-dropzone";
|
|
34
|
-
import { invariant as
|
|
35
|
-
import { toLocalizedString, useThemeContext, useTranslation } from "@dxos/react-ui";
|
|
36
|
-
import {
|
|
240
|
+
import { invariant as invariant3 } from "@dxos/invariant";
|
|
241
|
+
import { Domino, toLocalizedString, useThemeContext, useTranslation } from "@dxos/react-ui";
|
|
242
|
+
import { CommandMenuProvider, EditorToolbar, addLink, coreSlashCommands, createBasicExtensions, createMarkdownExtensions, createThemeExtensions, dropFile, editorGutter, editorSlots, filterItems, linkSlashCommands, processEditorPayload, stackItemContentEditorClassNames, useCommandMenu, useEditorToolbarState, useFormattingState, useTextEditor } from "@dxos/react-ui-editor";
|
|
37
243
|
import { StackItem } from "@dxos/react-ui-stack";
|
|
38
|
-
import {
|
|
244
|
+
import { isNonNullable, isTruthy as isTruthy2 } from "@dxos/util";
|
|
39
245
|
|
|
40
246
|
// src/hooks/useSelectCurrentThread.tsx
|
|
41
|
-
import { EditorView } from "@codemirror/view";
|
|
42
|
-
import
|
|
43
|
-
import { useMemo } from "react";
|
|
44
|
-
import {
|
|
45
|
-
import { invariant } from "@dxos/invariant";
|
|
46
|
-
import { Cursor, setSelection } from "@dxos/react-ui-editor";
|
|
47
|
-
var
|
|
247
|
+
import { EditorView as EditorView2 } from "@codemirror/view";
|
|
248
|
+
import * as Schema from "effect/Schema";
|
|
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";
|
|
48
254
|
var useSelectCurrentThread = (editorView, documentId2) => {
|
|
49
|
-
const scrollIntoViewResolver =
|
|
50
|
-
intent:
|
|
255
|
+
const scrollIntoViewResolver = useMemo2(() => createResolver({
|
|
256
|
+
intent: LayoutAction2.UpdateLayout,
|
|
51
257
|
position: "hoist",
|
|
52
258
|
filter: (data) => {
|
|
53
|
-
if (!Schema.is(
|
|
259
|
+
if (!Schema.is(LayoutAction2.ScrollIntoView.fields.input)(data)) {
|
|
54
260
|
return false;
|
|
55
261
|
}
|
|
56
262
|
return !!editorView && data.subject === documentId2 && !!data.options?.cursor;
|
|
57
263
|
},
|
|
58
264
|
resolve: ({ options: { cursor } }) => {
|
|
59
|
-
|
|
60
|
-
F:
|
|
265
|
+
invariant2(editorView, "Editor view is not defined.", {
|
|
266
|
+
F: __dxlog_file2,
|
|
61
267
|
L: 32,
|
|
62
268
|
S: void 0,
|
|
63
269
|
A: [
|
|
@@ -65,14 +271,14 @@ var useSelectCurrentThread = (editorView, documentId2) => {
|
|
|
65
271
|
"'Editor view is not defined.'"
|
|
66
272
|
]
|
|
67
273
|
});
|
|
68
|
-
const range =
|
|
274
|
+
const range = Cursor2.getRangeFromCursor(editorView.state, cursor);
|
|
69
275
|
if (range) {
|
|
70
276
|
const selection = editorView.state.selection.main.from !== range.from ? {
|
|
71
277
|
anchor: range.from
|
|
72
278
|
} : void 0;
|
|
73
279
|
const effects = [
|
|
74
280
|
// NOTE: This does not use the DOM scrollIntoView function.
|
|
75
|
-
|
|
281
|
+
EditorView2.scrollIntoView(range.from, {
|
|
76
282
|
y: "start",
|
|
77
283
|
yMargin: 96
|
|
78
284
|
})
|
|
@@ -94,33 +300,35 @@ var useSelectCurrentThread = (editorView, documentId2) => {
|
|
|
94
300
|
documentId2,
|
|
95
301
|
editorView
|
|
96
302
|
]);
|
|
97
|
-
useIntentResolver(
|
|
303
|
+
useIntentResolver(meta.id, scrollIntoViewResolver);
|
|
98
304
|
};
|
|
99
305
|
|
|
100
306
|
// src/components/MarkdownEditor/MarkdownEditor.tsx
|
|
101
|
-
var
|
|
102
|
-
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 }) => {
|
|
103
309
|
var _effect = _useSignals();
|
|
104
310
|
try {
|
|
105
311
|
const { t } = useTranslation();
|
|
106
|
-
const viewRef = useRef();
|
|
312
|
+
const viewRef = useRef(null);
|
|
107
313
|
const getMenu = useCallback((trigger, query) => {
|
|
108
314
|
switch (trigger) {
|
|
109
|
-
case "@":
|
|
315
|
+
case "@": {
|
|
110
316
|
return onLinkQuery?.(query) ?? [];
|
|
317
|
+
}
|
|
111
318
|
case "/":
|
|
112
|
-
default:
|
|
319
|
+
default: {
|
|
113
320
|
return filterItems([
|
|
114
321
|
coreSlashCommands,
|
|
115
322
|
linkSlashCommands,
|
|
116
323
|
...slashCommandGroups ?? []
|
|
117
324
|
], (item) => query ? toLocalizedString(item.label, t).toLowerCase().includes(query.toLowerCase()) : true);
|
|
325
|
+
}
|
|
118
326
|
}
|
|
119
327
|
}, [
|
|
120
328
|
onLinkQuery,
|
|
121
329
|
slashCommandGroups
|
|
122
330
|
]);
|
|
123
|
-
const options =
|
|
331
|
+
const options = useMemo3(() => {
|
|
124
332
|
const trigger = onLinkQuery ? [
|
|
125
333
|
"/",
|
|
126
334
|
"@"
|
|
@@ -132,45 +340,29 @@ var MarkdownEditor = ({ extensions: _extensions, slashCommandGroups, onLinkQuery
|
|
|
132
340
|
trigger,
|
|
133
341
|
placeholder: {
|
|
134
342
|
delay: 3e3,
|
|
135
|
-
content: () =>
|
|
136
|
-
return createElement("div", void 0, [
|
|
137
|
-
createElement("span", {
|
|
138
|
-
text: "Press"
|
|
139
|
-
}),
|
|
140
|
-
...trigger.map((text) => createElement("span", {
|
|
141
|
-
className: "border border-separator rounded-sm mx-1 px-1.5 pt-[1px] pb-[2px]",
|
|
142
|
-
text
|
|
143
|
-
})),
|
|
144
|
-
createElement("span", {
|
|
145
|
-
text: "for commands."
|
|
146
|
-
})
|
|
147
|
-
]);
|
|
148
|
-
}
|
|
343
|
+
content: () => Domino.of("div").children(Domino.of("span").text("Press"), ...trigger.map((text) => Domino.of("span").classNames("border border-separator rounded-sm mx-1 px-1.5 pt-[1px] pb-[2px]").text(text)), Domino.of("span").text("for commands.")).build()
|
|
149
344
|
},
|
|
150
345
|
getMenu
|
|
151
346
|
};
|
|
152
347
|
}, [
|
|
348
|
+
onLinkQuery,
|
|
153
349
|
getMenu
|
|
154
350
|
]);
|
|
155
|
-
const {
|
|
156
|
-
const extensions =
|
|
157
|
-
|
|
351
|
+
const { groupsRef, commandMenu, ...commandMenuProps } = useCommandMenu(options);
|
|
352
|
+
const extensions = useMemo3(() => [
|
|
353
|
+
extensionsParam,
|
|
158
354
|
commandMenu
|
|
159
|
-
].filter(
|
|
160
|
-
|
|
355
|
+
].filter(isTruthy2), [
|
|
356
|
+
extensionsParam,
|
|
161
357
|
commandMenu
|
|
162
358
|
]);
|
|
163
|
-
return /* @__PURE__ */
|
|
164
|
-
|
|
165
|
-
...
|
|
166
|
-
}, /* @__PURE__ */
|
|
359
|
+
return /* @__PURE__ */ React2.createElement(CommandMenuProvider, {
|
|
360
|
+
groups: groupsRef.current,
|
|
361
|
+
...commandMenuProps
|
|
362
|
+
}, /* @__PURE__ */ React2.createElement(MarkdownEditorImpl, {
|
|
167
363
|
ref: viewRef,
|
|
168
364
|
...props,
|
|
169
365
|
extensions
|
|
170
|
-
}), /* @__PURE__ */ React.createElement(CommandMenu, {
|
|
171
|
-
groups: groupsRef.current,
|
|
172
|
-
currentItem,
|
|
173
|
-
onSelect
|
|
174
366
|
}));
|
|
175
367
|
} finally {
|
|
176
368
|
_effect.f();
|
|
@@ -179,16 +371,16 @@ var MarkdownEditor = ({ extensions: _extensions, slashCommandGroups, onLinkQuery
|
|
|
179
371
|
var MarkdownEditorImpl = /* @__PURE__ */ forwardRef(({ id, role = "article", initialValue, customActions, editorStateStore, extensions, extensionProviders, scrollPastEnd, toolbar, viewMode, onFileUpload, onViewModeChange }, forwardedRef) => {
|
|
180
372
|
var _effect = _useSignals();
|
|
181
373
|
try {
|
|
182
|
-
const { t } = useTranslation(
|
|
374
|
+
const { t } = useTranslation(meta.id);
|
|
183
375
|
const { themeMode } = useThemeContext();
|
|
184
376
|
const toolbarState = useEditorToolbarState({
|
|
185
377
|
viewMode
|
|
186
378
|
});
|
|
187
379
|
const formattingObserver = useFormattingState(toolbarState);
|
|
188
|
-
const { scrollTo, selection } =
|
|
380
|
+
const { scrollTo, selection } = useMemo3(() => editorStateStore?.getState(id) ?? {}, [
|
|
189
381
|
id
|
|
190
382
|
]);
|
|
191
|
-
const providerExtensions =
|
|
383
|
+
const providerExtensions = useMemo3(() => extensionProviders?.flatMap((provider) => provider({})).filter(isNonNullable), [
|
|
192
384
|
extensionProviders
|
|
193
385
|
]);
|
|
194
386
|
const handleDrop = async (view, { files }) => {
|
|
@@ -208,11 +400,10 @@ var MarkdownEditorImpl = /* @__PURE__ */ forwardRef(({ id, role = "article", ini
|
|
|
208
400
|
createBasicExtensions({
|
|
209
401
|
readOnly: viewMode === "readonly",
|
|
210
402
|
placeholder: t("editor placeholder"),
|
|
211
|
-
scrollPastEnd: role === "section" ? false : scrollPastEnd
|
|
212
|
-
|
|
213
|
-
createMarkdownExtensions({
|
|
214
|
-
themeMode
|
|
403
|
+
scrollPastEnd: role === "section" ? false : scrollPastEnd,
|
|
404
|
+
search: true
|
|
215
405
|
}),
|
|
406
|
+
createMarkdownExtensions(),
|
|
216
407
|
createThemeExtensions({
|
|
217
408
|
themeMode,
|
|
218
409
|
syntaxHighlighting: true,
|
|
@@ -224,7 +415,7 @@ var MarkdownEditorImpl = /* @__PURE__ */ forwardRef(({ id, role = "article", ini
|
|
|
224
415
|
}),
|
|
225
416
|
providerExtensions,
|
|
226
417
|
extensions
|
|
227
|
-
].filter(
|
|
418
|
+
].filter(isTruthy2),
|
|
228
419
|
...role !== "section" && {
|
|
229
420
|
id,
|
|
230
421
|
scrollTo,
|
|
@@ -283,8 +474,8 @@ var MarkdownEditorImpl = /* @__PURE__ */ forwardRef(({ id, role = "article", ini
|
|
|
283
474
|
onFileUpload
|
|
284
475
|
]);
|
|
285
476
|
const getView = useCallback(() => {
|
|
286
|
-
|
|
287
|
-
F:
|
|
477
|
+
invariant3(editorView, void 0, {
|
|
478
|
+
F: __dxlog_file3,
|
|
288
479
|
L: 240,
|
|
289
480
|
S: void 0,
|
|
290
481
|
A: [
|
|
@@ -307,9 +498,9 @@ var MarkdownEditorImpl = /* @__PURE__ */ forwardRef(({ id, role = "article", ini
|
|
|
307
498
|
}, [
|
|
308
499
|
onFileUpload
|
|
309
500
|
]);
|
|
310
|
-
return /* @__PURE__ */
|
|
501
|
+
return /* @__PURE__ */ React2.createElement(StackItem.Content, {
|
|
311
502
|
toolbar: !!toolbar
|
|
312
|
-
}, toolbar && /* @__PURE__ */
|
|
503
|
+
}, toolbar && /* @__PURE__ */ React2.createElement(React2.Fragment, null, /* @__PURE__ */ React2.createElement(EditorToolbar, {
|
|
313
504
|
attendableId: id,
|
|
314
505
|
role,
|
|
315
506
|
state: toolbarState,
|
|
@@ -317,7 +508,7 @@ var MarkdownEditorImpl = /* @__PURE__ */ forwardRef(({ id, role = "article", ini
|
|
|
317
508
|
getView,
|
|
318
509
|
image: handleImageUpload,
|
|
319
510
|
viewMode: handleViewModeChange
|
|
320
|
-
}), /* @__PURE__ */
|
|
511
|
+
}), /* @__PURE__ */ React2.createElement("input", getInputProps())), /* @__PURE__ */ React2.createElement("div", {
|
|
321
512
|
role: "none",
|
|
322
513
|
ref: parentRef,
|
|
323
514
|
"data-testid": "composer.markdownRoot",
|
|
@@ -341,228 +532,13 @@ var useTest = (view) => {
|
|
|
341
532
|
]);
|
|
342
533
|
};
|
|
343
534
|
|
|
344
|
-
// src/extensions.tsx
|
|
345
|
-
import React2, { useMemo as useMemo3 } from "react";
|
|
346
|
-
import { createRoot } from "react-dom/client";
|
|
347
|
-
import { createIntent, LayoutAction as LayoutAction2, useCapabilities, useIntentDispatcher } from "@dxos/app-framework";
|
|
348
|
-
import { debounceAndThrottle } from "@dxos/async";
|
|
349
|
-
import { invariant as invariant3 } from "@dxos/invariant";
|
|
350
|
-
import { createDocAccessor, fullyQualifiedId, getSpace } from "@dxos/react-client/echo";
|
|
351
|
-
import { useIdentity } from "@dxos/react-client/halo";
|
|
352
|
-
import { Icon, ThemeProvider } from "@dxos/react-ui";
|
|
353
|
-
import { InputModeExtensions, createDataExtensions, autocomplete, decorateMarkdown, folding, formattingKeymap, linkTooltip, listener, preview, selectionState, typewriter, EditorView as EditorView2, documentId, Cursor as Cursor2 } from "@dxos/react-ui-editor";
|
|
354
|
-
import { defaultTx } from "@dxos/react-ui-theme";
|
|
355
|
-
import { isNotFalsy as isNotFalsy2 } from "@dxos/util";
|
|
356
|
-
var __dxlog_file3 = "/__w/dxos/dxos/packages/plugins/plugin-markdown/src/extensions.tsx";
|
|
357
|
-
var useExtensions = ({ document, id, text, settings, selectionManager, viewMode, editorStateStore, previewOptions }) => {
|
|
358
|
-
const { dispatchPromise: dispatch } = useIntentDispatcher();
|
|
359
|
-
const identity = useIdentity();
|
|
360
|
-
const space = getSpace(document) ?? getSpace(text);
|
|
361
|
-
const baseExtensions = useMemo3(() => createBaseExtensions({
|
|
362
|
-
document,
|
|
363
|
-
id,
|
|
364
|
-
text,
|
|
365
|
-
settings,
|
|
366
|
-
selectionManager,
|
|
367
|
-
viewMode,
|
|
368
|
-
previewOptions,
|
|
369
|
-
dispatch
|
|
370
|
-
}), [
|
|
371
|
-
document,
|
|
372
|
-
id,
|
|
373
|
-
text,
|
|
374
|
-
viewMode,
|
|
375
|
-
dispatch,
|
|
376
|
-
previewOptions,
|
|
377
|
-
settings,
|
|
378
|
-
settings.editorInputMode,
|
|
379
|
-
settings.folding,
|
|
380
|
-
settings.numberedHeadings,
|
|
381
|
-
settings.debug,
|
|
382
|
-
settings.typewriter,
|
|
383
|
-
selectionManager
|
|
384
|
-
]);
|
|
385
|
-
const extensionProviders = useCapabilities(MarkdownCapabilities.Extensions);
|
|
386
|
-
const pluginExtensions = useMemo3(() => {
|
|
387
|
-
if (!document) {
|
|
388
|
-
return [];
|
|
389
|
-
}
|
|
390
|
-
return extensionProviders.flat().reduce((acc, provider) => {
|
|
391
|
-
const extension = typeof provider === "function" ? provider({
|
|
392
|
-
document
|
|
393
|
-
}) : provider;
|
|
394
|
-
if (extension) {
|
|
395
|
-
acc.push(extension);
|
|
396
|
-
}
|
|
397
|
-
return acc;
|
|
398
|
-
}, []);
|
|
399
|
-
}, [
|
|
400
|
-
extensionProviders,
|
|
401
|
-
document
|
|
402
|
-
]);
|
|
403
|
-
return useMemo3(() => [
|
|
404
|
-
// NOTE: Data extensions must be first so that automerge is updated before other extensions compute their state.
|
|
405
|
-
document && createDataExtensions({
|
|
406
|
-
id: document.id,
|
|
407
|
-
text: document.content.target && createDocAccessor(document.content.target, [
|
|
408
|
-
"content"
|
|
409
|
-
]),
|
|
410
|
-
space,
|
|
411
|
-
identity
|
|
412
|
-
}),
|
|
413
|
-
text && id && createDataExtensions({
|
|
414
|
-
id,
|
|
415
|
-
text: createDocAccessor(text, [
|
|
416
|
-
"content"
|
|
417
|
-
]),
|
|
418
|
-
space,
|
|
419
|
-
identity
|
|
420
|
-
}),
|
|
421
|
-
selectionState(editorStateStore),
|
|
422
|
-
document && listener({
|
|
423
|
-
onChange: (text2) => setFallbackName(document, text2)
|
|
424
|
-
}),
|
|
425
|
-
baseExtensions,
|
|
426
|
-
pluginExtensions
|
|
427
|
-
].filter(isNotFalsy2), [
|
|
428
|
-
baseExtensions,
|
|
429
|
-
pluginExtensions,
|
|
430
|
-
document,
|
|
431
|
-
document?.content?.target,
|
|
432
|
-
text,
|
|
433
|
-
id,
|
|
434
|
-
space,
|
|
435
|
-
identity
|
|
436
|
-
]);
|
|
437
|
-
};
|
|
438
|
-
var createBaseExtensions = ({ document, id, dispatch, settings, selectionManager, query, viewMode, previewOptions }) => {
|
|
439
|
-
const extensions = [
|
|
440
|
-
selectionManager && selectionChange(selectionManager),
|
|
441
|
-
settings.editorInputMode && InputModeExtensions[settings.editorInputMode],
|
|
442
|
-
settings.folding && folding()
|
|
443
|
-
].filter(isNotFalsy2);
|
|
444
|
-
if (viewMode !== "source") {
|
|
445
|
-
extensions.push(...[
|
|
446
|
-
formattingKeymap(),
|
|
447
|
-
decorateMarkdown({
|
|
448
|
-
selectionChangeDelay: 100,
|
|
449
|
-
numberedHeadings: settings.numberedHeadings ? {
|
|
450
|
-
from: 2
|
|
451
|
-
} : void 0,
|
|
452
|
-
// TODO(wittjosiah): For internal links, consider ignoring the link text and rendering the label of the object being linked to.
|
|
453
|
-
renderLinkButton: dispatch && (document || id) ? createLinkRenderer((id2) => {
|
|
454
|
-
void dispatch(createIntent(LayoutAction2.Open, {
|
|
455
|
-
part: "main",
|
|
456
|
-
subject: [
|
|
457
|
-
id2
|
|
458
|
-
],
|
|
459
|
-
options: {
|
|
460
|
-
pivotId: document ? fullyQualifiedId(document) : id2
|
|
461
|
-
}
|
|
462
|
-
}));
|
|
463
|
-
}) : void 0
|
|
464
|
-
}),
|
|
465
|
-
linkTooltip(renderLinkTooltip),
|
|
466
|
-
preview(previewOptions)
|
|
467
|
-
]);
|
|
468
|
-
}
|
|
469
|
-
if (query) {
|
|
470
|
-
extensions.push(autocomplete({
|
|
471
|
-
onSearch: (text) => {
|
|
472
|
-
return query.objects.map((object) => object.name?.length && object.id !== document?.id ? {
|
|
473
|
-
label: object.name,
|
|
474
|
-
// TODO(burdon): Factor out URL builder.
|
|
475
|
-
apply: `[${object.name}](/${fullyQualifiedId(object)})`
|
|
476
|
-
} : void 0).filter(isNotFalsy2);
|
|
477
|
-
}
|
|
478
|
-
}));
|
|
479
|
-
}
|
|
480
|
-
if (settings.debug) {
|
|
481
|
-
const items = settings.typewriter?.split(/[,\n]/) ?? "";
|
|
482
|
-
if (items) {
|
|
483
|
-
extensions.push(typewriter({
|
|
484
|
-
items
|
|
485
|
-
}));
|
|
486
|
-
}
|
|
487
|
-
}
|
|
488
|
-
return extensions;
|
|
489
|
-
};
|
|
490
|
-
var selectionChange = (selectionManager) => {
|
|
491
|
-
return EditorView2.updateListener.of(debounceAndThrottle((update) => {
|
|
492
|
-
if (update.selectionSet) {
|
|
493
|
-
const id = update.state.facet(documentId);
|
|
494
|
-
const cursorConverter = update.state.facet(Cursor2.converter);
|
|
495
|
-
const selection = update.state.selection;
|
|
496
|
-
const ranges = selection.ranges.map((range) => ({
|
|
497
|
-
from: cursorConverter.toCursor(range.from),
|
|
498
|
-
to: cursorConverter.toCursor(range.to)
|
|
499
|
-
})).filter(({ from, to }) => to > from);
|
|
500
|
-
selectionManager.updateMultiRange(id, ranges);
|
|
501
|
-
}
|
|
502
|
-
}, 100));
|
|
503
|
-
};
|
|
504
|
-
var style = {
|
|
505
|
-
hover: "rounded-sm text-primary-500 hover:text-primary-600 dark:text-primary-500 hover:dark:text-primary-400",
|
|
506
|
-
icon: "inline-block leading-none mis-1 cursor-pointer"
|
|
507
|
-
};
|
|
508
|
-
var createLinkRenderer = (onSelectObject) => (el, { url }) => {
|
|
509
|
-
const isInternal = url.startsWith("/") || // TODO(wittjosiah): This should probably be parsed out on paste?
|
|
510
|
-
url.startsWith(window.location.origin);
|
|
511
|
-
const options = isInternal ? {
|
|
512
|
-
onClick: () => {
|
|
513
|
-
const qualifiedId = url.split("/").at(-1);
|
|
514
|
-
invariant3(qualifiedId, "Invalid link format.", {
|
|
515
|
-
F: __dxlog_file3,
|
|
516
|
-
L: 291,
|
|
517
|
-
S: void 0,
|
|
518
|
-
A: [
|
|
519
|
-
"qualifiedId",
|
|
520
|
-
"'Invalid link format.'"
|
|
521
|
-
]
|
|
522
|
-
});
|
|
523
|
-
onSelectObject(qualifiedId);
|
|
524
|
-
}
|
|
525
|
-
} : {
|
|
526
|
-
href: url,
|
|
527
|
-
rel: "noreferrer",
|
|
528
|
-
target: "_blank"
|
|
529
|
-
};
|
|
530
|
-
renderRoot(el, /* @__PURE__ */ React2.createElement("a", {
|
|
531
|
-
...options,
|
|
532
|
-
className: style.hover
|
|
533
|
-
}, /* @__PURE__ */ React2.createElement(Icon, {
|
|
534
|
-
icon: isInternal ? "ph--arrow-square-down--bold" : "ph--arrow-square-out--bold",
|
|
535
|
-
size: 4,
|
|
536
|
-
classNames: style.icon
|
|
537
|
-
})));
|
|
538
|
-
};
|
|
539
|
-
var renderLinkTooltip = (el, { url }) => {
|
|
540
|
-
const web = new URL(url);
|
|
541
|
-
renderRoot(el, /* @__PURE__ */ React2.createElement("a", {
|
|
542
|
-
href: url,
|
|
543
|
-
rel: "noreferrer",
|
|
544
|
-
target: "_blank",
|
|
545
|
-
className: style.hover
|
|
546
|
-
}, web.origin, /* @__PURE__ */ React2.createElement(Icon, {
|
|
547
|
-
icon: "ph--arrow-square-out--bold",
|
|
548
|
-
size: 4,
|
|
549
|
-
classNames: style.icon
|
|
550
|
-
})));
|
|
551
|
-
};
|
|
552
|
-
var renderRoot = (root, node) => {
|
|
553
|
-
createRoot(root).render(/* @__PURE__ */ React2.createElement(ThemeProvider, {
|
|
554
|
-
tx: defaultTx
|
|
555
|
-
}, node));
|
|
556
|
-
return root;
|
|
557
|
-
};
|
|
558
|
-
|
|
559
535
|
// src/components/MarkdownContainer.tsx
|
|
560
536
|
var MarkdownContainer = ({ id, role, object, settings, selectionManager, viewMode, editorStateStore, onViewModeChange }) => {
|
|
561
537
|
var _effect = _useSignals2();
|
|
562
538
|
try {
|
|
563
539
|
const { t } = useTranslation2();
|
|
564
540
|
const scrollPastEnd = role === "article";
|
|
565
|
-
const doc = Obj.instanceOf(
|
|
541
|
+
const doc = Obj.instanceOf(Markdown_exports.Document, object) ? object : void 0;
|
|
566
542
|
const text = Obj.instanceOf(DataType.Text, object) ? object : void 0;
|
|
567
543
|
const [previewBlocks, setPreviewBlocks] = useState([]);
|
|
568
544
|
const previewOptions = useMemo4(() => ({
|
|
@@ -600,7 +576,7 @@ var MarkdownContainer = ({ id, role, object, settings, selectionManager, viewMod
|
|
|
600
576
|
objectForms,
|
|
601
577
|
schemaWhiteList
|
|
602
578
|
]);
|
|
603
|
-
const
|
|
579
|
+
const handleLinkQuery = useCallback2(async (query) => {
|
|
604
580
|
const name = query?.startsWith("@") ? query.slice(1).toLowerCase() : query?.toLowerCase() ?? "";
|
|
605
581
|
const results = await space?.db.query(Query.select(filter)).run();
|
|
606
582
|
const getLabel = (object2) => {
|
|
@@ -626,7 +602,7 @@ var MarkdownContainer = ({ id, role, object, settings, selectionManager, viewMod
|
|
|
626
602
|
label,
|
|
627
603
|
icon: metadata.icon,
|
|
628
604
|
onSelect: (view, head) => {
|
|
629
|
-
const link = `[${label}]
|
|
605
|
+
const link = `[${label}](${Obj.getDXN(object2)})`;
|
|
630
606
|
if (query?.startsWith("@")) {
|
|
631
607
|
insertAtLineStart(view, head, `!${link}
|
|
632
608
|
`);
|
|
@@ -656,7 +632,7 @@ var MarkdownContainer = ({ id, role, object, settings, selectionManager, viewMod
|
|
|
656
632
|
settings,
|
|
657
633
|
scrollPastEnd,
|
|
658
634
|
onViewModeChange,
|
|
659
|
-
onLinkQuery: space ?
|
|
635
|
+
onLinkQuery: space ? handleLinkQuery : void 0
|
|
660
636
|
}) : text ? /* @__PURE__ */ React3.createElement(MarkdownEditor, {
|
|
661
637
|
id,
|
|
662
638
|
role,
|
|
@@ -667,22 +643,19 @@ var MarkdownContainer = ({ id, role, object, settings, selectionManager, viewMod
|
|
|
667
643
|
inputMode: settings.editorInputMode,
|
|
668
644
|
scrollPastEnd,
|
|
669
645
|
onViewModeChange,
|
|
670
|
-
onLinkQuery: space ?
|
|
671
|
-
}) : (
|
|
672
|
-
|
|
673
|
-
|
|
674
|
-
|
|
675
|
-
|
|
676
|
-
|
|
677
|
-
|
|
678
|
-
|
|
679
|
-
|
|
680
|
-
|
|
681
|
-
|
|
682
|
-
|
|
683
|
-
onLinkQuery: space ? onLinkQuery : void 0
|
|
684
|
-
})
|
|
685
|
-
);
|
|
646
|
+
onLinkQuery: space ? handleLinkQuery : void 0
|
|
647
|
+
}) : /* @__PURE__ */ React3.createElement(MarkdownEditor, {
|
|
648
|
+
id,
|
|
649
|
+
role,
|
|
650
|
+
initialValue: object.text,
|
|
651
|
+
extensions,
|
|
652
|
+
viewMode,
|
|
653
|
+
toolbar: settings.toolbar,
|
|
654
|
+
inputMode: settings.editorInputMode,
|
|
655
|
+
scrollPastEnd,
|
|
656
|
+
onViewModeChange,
|
|
657
|
+
onLinkQuery: space ? handleLinkQuery : void 0
|
|
658
|
+
});
|
|
686
659
|
return /* @__PURE__ */ React3.createElement(React3.Fragment, null, editor, previewBlocks.map(({ link, el }) => /* @__PURE__ */ React3.createElement(PreviewBlock, {
|
|
687
660
|
key: link.ref,
|
|
688
661
|
link,
|
|
@@ -695,11 +668,9 @@ var MarkdownContainer = ({ id, role, object, settings, selectionManager, viewMod
|
|
|
695
668
|
var PreviewBlock = ({ link, el }) => {
|
|
696
669
|
var _effect = _useSignals2();
|
|
697
670
|
try {
|
|
698
|
-
const
|
|
699
|
-
|
|
700
|
-
|
|
701
|
-
const space = useSpace(echoDXN?.spaceId);
|
|
702
|
-
const [subject] = useQuery(space, Query.select(Filter.ids(echoDXN?.echoId ?? "")));
|
|
671
|
+
const client = useClient();
|
|
672
|
+
const dxn = DXN.parse(link.ref);
|
|
673
|
+
const subject = client.graph.ref(dxn).target;
|
|
703
674
|
const data = useMemo4(() => ({
|
|
704
675
|
subject
|
|
705
676
|
}), [
|
|
@@ -773,6 +744,7 @@ var DocumentEditor = ({ id, document: doc, settings, viewMode, ...props }) => {
|
|
|
773
744
|
var MarkdownContainer_default = MarkdownContainer;
|
|
774
745
|
export {
|
|
775
746
|
DocumentEditor,
|
|
747
|
+
MarkdownContainer,
|
|
776
748
|
MarkdownContainer_default as default
|
|
777
749
|
};
|
|
778
|
-
//# sourceMappingURL=MarkdownContainer-
|
|
750
|
+
//# sourceMappingURL=MarkdownContainer-XDYFBDCI.mjs.map
|