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