@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
|
@@ -2,27 +2,19 @@
|
|
|
2
2
|
// Copyright 2023 DXOS.org
|
|
3
3
|
//
|
|
4
4
|
|
|
5
|
-
import '@dxos-theme';
|
|
6
|
-
|
|
7
5
|
import { type Meta } from '@storybook/react-vite';
|
|
8
|
-
import
|
|
6
|
+
import * as Function from 'effect/Function';
|
|
7
|
+
import * as Match from 'effect/Match';
|
|
8
|
+
import * as Option from 'effect/Option';
|
|
9
|
+
import * as Schema from 'effect/Schema';
|
|
9
10
|
import React, { type FC, useEffect, useMemo, useState } from 'react';
|
|
10
11
|
|
|
11
|
-
import {
|
|
12
|
-
Capabilities,
|
|
13
|
-
CollaborationActions,
|
|
14
|
-
IntentPlugin,
|
|
15
|
-
SettingsPlugin,
|
|
16
|
-
contributes,
|
|
17
|
-
createIntent,
|
|
18
|
-
useCapability,
|
|
19
|
-
useIntentDispatcher,
|
|
20
|
-
} from '@dxos/app-framework';
|
|
12
|
+
import { Capabilities, IntentPlugin, SettingsPlugin, useCapability, useIntentDispatcher } from '@dxos/app-framework';
|
|
21
13
|
import { withPluginManager } from '@dxos/app-framework/testing';
|
|
22
14
|
import { Obj, Ref, Type } from '@dxos/echo';
|
|
23
15
|
import { invariant } from '@dxos/invariant';
|
|
24
|
-
import { DXN } from '@dxos/keys';
|
|
25
16
|
import { ClientPlugin } from '@dxos/plugin-client';
|
|
17
|
+
import { GraphPlugin } from '@dxos/plugin-graph';
|
|
26
18
|
import { PreviewPlugin } from '@dxos/plugin-preview';
|
|
27
19
|
import { SpacePlugin } from '@dxos/plugin-space';
|
|
28
20
|
import { StorybookLayoutPlugin } from '@dxos/plugin-storybook-layout';
|
|
@@ -30,18 +22,20 @@ import { ThemePlugin } from '@dxos/plugin-theme';
|
|
|
30
22
|
import { faker } from '@dxos/random';
|
|
31
23
|
import { createDocAccessor, fullyQualifiedId, toCursorRange, useQueue, useSpace } from '@dxos/react-client/echo';
|
|
32
24
|
import { IconButton, Toolbar } from '@dxos/react-ui';
|
|
33
|
-
import {
|
|
25
|
+
import { withTheme } from '@dxos/react-ui/testing';
|
|
26
|
+
import { type EditorSelection, type Range, useTextEditor } from '@dxos/react-ui-editor';
|
|
34
27
|
import { StackItem } from '@dxos/react-ui-stack';
|
|
35
28
|
import { defaultTx } from '@dxos/react-ui-theme';
|
|
36
29
|
import { DataType } from '@dxos/schema';
|
|
37
|
-
import {
|
|
30
|
+
import { render } from '@dxos/storybook-utils';
|
|
38
31
|
|
|
39
|
-
import MarkdownContainer from './MarkdownContainer';
|
|
40
|
-
import { MarkdownPlugin } from '../MarkdownPlugin';
|
|
41
32
|
import { MarkdownCapabilities } from '../capabilities';
|
|
42
|
-
import {
|
|
33
|
+
import { MarkdownPlugin } from '../MarkdownPlugin';
|
|
34
|
+
import { meta } from '../meta';
|
|
43
35
|
import { translations } from '../translations';
|
|
44
|
-
import {
|
|
36
|
+
import { Markdown } from '../types';
|
|
37
|
+
|
|
38
|
+
import { MarkdownContainer } from './MarkdownContainer';
|
|
45
39
|
|
|
46
40
|
faker.seed(1);
|
|
47
41
|
|
|
@@ -61,7 +55,7 @@ const TestItem = Schema.Struct({
|
|
|
61
55
|
}),
|
|
62
56
|
);
|
|
63
57
|
|
|
64
|
-
const TestChat: FC<{ doc:
|
|
58
|
+
const TestChat: FC<{ doc: Markdown.Document; content: string }> = ({ doc, content }) => {
|
|
65
59
|
const { dispatchPromise: dispatch } = useIntentDispatcher();
|
|
66
60
|
const { parentRef } = useTextEditor({ initialValue: content });
|
|
67
61
|
const { editorState } = useCapability(MarkdownCapabilities.State);
|
|
@@ -85,7 +79,7 @@ const TestChat: FC<{ doc: DocumentType; content: string }> = ({ doc, content })
|
|
|
85
79
|
|
|
86
80
|
const text = await doc.content.load();
|
|
87
81
|
const accessor = createDocAccessor(text, ['content']);
|
|
88
|
-
const cursor = pipe(
|
|
82
|
+
const cursor = Function.pipe(
|
|
89
83
|
editorState.getState(fullyQualifiedId(doc))?.selection,
|
|
90
84
|
Option.fromNullable,
|
|
91
85
|
Option.map(selectionToRange),
|
|
@@ -98,14 +92,14 @@ const TestChat: FC<{ doc: DocumentType; content: string }> = ({ doc, content })
|
|
|
98
92
|
// const message = deref(ref);
|
|
99
93
|
// }
|
|
100
94
|
|
|
101
|
-
void dispatch(
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
);
|
|
95
|
+
// void dispatch(
|
|
96
|
+
// createIntent(CollaborationActions.InsertContent, {
|
|
97
|
+
// target: doc as any as Type.Expando,
|
|
98
|
+
// object: Ref.fromDXN(new DXN(DXN.kind.QUEUE, [...queue.dxn.parts, message.id])),
|
|
99
|
+
// at: cursor,
|
|
100
|
+
// label: 'Proposal',
|
|
101
|
+
// }),
|
|
102
|
+
// );
|
|
109
103
|
};
|
|
110
104
|
|
|
111
105
|
return (
|
|
@@ -120,8 +114,8 @@ const TestChat: FC<{ doc: DocumentType; content: string }> = ({ doc, content })
|
|
|
120
114
|
|
|
121
115
|
const DefaultStory = ({ document, chat }: { document: string; chat: string }) => {
|
|
122
116
|
const space = useSpace();
|
|
123
|
-
const [doc, setDoc] = useState<
|
|
124
|
-
const settings = useCapability(Capabilities.SettingsStore).getStore<
|
|
117
|
+
const [doc, setDoc] = useState<Markdown.Document>();
|
|
118
|
+
const settings = useCapability(Capabilities.SettingsStore).getStore<Markdown.Settings>(meta.id)!.value;
|
|
125
119
|
const { editorState } = useCapability(MarkdownCapabilities.State);
|
|
126
120
|
|
|
127
121
|
useEffect(() => {
|
|
@@ -130,14 +124,12 @@ const DefaultStory = ({ document, chat }: { document: string; chat: string }) =>
|
|
|
130
124
|
}
|
|
131
125
|
|
|
132
126
|
const doc = space.db.add(
|
|
133
|
-
|
|
127
|
+
Markdown.makeDocument({
|
|
134
128
|
name: 'Test',
|
|
135
|
-
|
|
136
|
-
// Create links.
|
|
137
129
|
content: document.replaceAll(/\[(\w+)\]/g, (_, label) => {
|
|
138
130
|
const obj = space.db.add(Obj.make(TestItem, { title: label, description: faker.lorem.paragraph() }));
|
|
139
131
|
const dxn = Ref.make(obj).dxn.toString();
|
|
140
|
-
return `[${label}]
|
|
132
|
+
return `[${label}](${dxn})`;
|
|
141
133
|
}),
|
|
142
134
|
}),
|
|
143
135
|
);
|
|
@@ -146,48 +138,56 @@ const DefaultStory = ({ document, chat }: { document: string; chat: string }) =>
|
|
|
146
138
|
}, [space]);
|
|
147
139
|
|
|
148
140
|
if (!space || !doc) {
|
|
149
|
-
return
|
|
141
|
+
return null;
|
|
150
142
|
}
|
|
151
143
|
|
|
144
|
+
// TODO(burdon): Layout issue.
|
|
152
145
|
return (
|
|
153
|
-
|
|
146
|
+
<div className='grid grid-cols-2 bs-full overflow-hidden'>
|
|
154
147
|
<MarkdownContainer id={doc.id} object={doc} settings={settings} editorStateStore={editorState} />
|
|
155
148
|
<TestChat doc={doc} content={chat} />
|
|
156
|
-
|
|
149
|
+
</div>
|
|
157
150
|
);
|
|
158
151
|
};
|
|
159
152
|
|
|
160
|
-
const
|
|
153
|
+
const storybook: Meta<typeof DefaultStory> = {
|
|
161
154
|
title: 'plugins/plugin-markdown/Suggestions',
|
|
162
|
-
render: DefaultStory,
|
|
155
|
+
render: render(DefaultStory),
|
|
163
156
|
decorators: [
|
|
157
|
+
withTheme,
|
|
164
158
|
withPluginManager({
|
|
165
159
|
plugins: [
|
|
166
|
-
ThemePlugin({ tx: defaultTx }),
|
|
167
|
-
StorybookLayoutPlugin(),
|
|
168
160
|
ClientPlugin({
|
|
169
|
-
types: [
|
|
170
|
-
onClientInitialized: async (
|
|
161
|
+
types: [Markdown.Document, TestItem],
|
|
162
|
+
onClientInitialized: async ({ client }) => {
|
|
171
163
|
await client.halo.createIdentity();
|
|
172
164
|
},
|
|
173
165
|
}),
|
|
174
|
-
SpacePlugin(),
|
|
175
|
-
|
|
166
|
+
SpacePlugin({}),
|
|
167
|
+
GraphPlugin(),
|
|
176
168
|
IntentPlugin(),
|
|
169
|
+
SettingsPlugin(),
|
|
170
|
+
|
|
171
|
+
// UI
|
|
172
|
+
ThemePlugin({ tx: defaultTx }),
|
|
177
173
|
MarkdownPlugin(),
|
|
178
174
|
PreviewPlugin(),
|
|
175
|
+
StorybookLayoutPlugin({}),
|
|
179
176
|
],
|
|
180
|
-
|
|
177
|
+
// TODO(thure): `commandDialog` doesn’t do anything without a `renderDialog` option.
|
|
178
|
+
// capabilities: [contributes(MarkdownCapabilities.Extensions, [() => commandDialog()])],
|
|
181
179
|
}),
|
|
182
|
-
withLayout({ fullscreen: true, classNames: 'grid grid-cols-2' }),
|
|
183
180
|
],
|
|
184
181
|
parameters: {
|
|
182
|
+
layout: 'fullscreen',
|
|
183
|
+
controls: {
|
|
184
|
+
disable: true,
|
|
185
|
+
},
|
|
185
186
|
translations,
|
|
186
|
-
controls: { disable: true },
|
|
187
187
|
},
|
|
188
188
|
};
|
|
189
189
|
|
|
190
|
-
export default
|
|
190
|
+
export default storybook;
|
|
191
191
|
|
|
192
192
|
type Story = Meta<typeof DefaultStory>;
|
|
193
193
|
|
|
@@ -2,20 +2,20 @@
|
|
|
2
2
|
// Copyright 2024 DXOS.org
|
|
3
3
|
//
|
|
4
4
|
|
|
5
|
-
import '@
|
|
5
|
+
import { type Meta, type StoryObj } from '@storybook/react-vite';
|
|
6
|
+
import React, { useCallback, useState } from 'react';
|
|
6
7
|
|
|
7
|
-
import {
|
|
8
|
-
import React, { type FC, useCallback, useState } from 'react';
|
|
9
|
-
|
|
10
|
-
import { Obj } from '@dxos/echo';
|
|
8
|
+
import { createObject } from '@dxos/echo-db';
|
|
11
9
|
import { invariant } from '@dxos/invariant';
|
|
12
10
|
import { PublicKey } from '@dxos/keys';
|
|
13
11
|
import { faker } from '@dxos/random';
|
|
14
12
|
import { createDocAccessor } from '@dxos/react-client/echo';
|
|
15
13
|
import { useThemeContext } from '@dxos/react-ui';
|
|
14
|
+
import { withTheme } from '@dxos/react-ui/testing';
|
|
16
15
|
import {
|
|
17
|
-
EditorToolbar,
|
|
18
16
|
type Comment,
|
|
17
|
+
EditorToolbar,
|
|
18
|
+
type EditorViewMode,
|
|
19
19
|
comments,
|
|
20
20
|
createBasicExtensions,
|
|
21
21
|
createDataExtensions,
|
|
@@ -26,19 +26,21 @@ import {
|
|
|
26
26
|
formattingKeymap,
|
|
27
27
|
translations,
|
|
28
28
|
useComments,
|
|
29
|
+
useEditorToolbarState,
|
|
29
30
|
useFormattingState,
|
|
30
31
|
useTextEditor,
|
|
31
|
-
useEditorToolbarState,
|
|
32
|
-
type EditorViewMode,
|
|
33
32
|
} from '@dxos/react-ui-editor';
|
|
34
33
|
import { DataType } from '@dxos/schema';
|
|
35
|
-
import { withLayout, withTheme } from '@dxos/storybook-utils';
|
|
36
34
|
|
|
37
35
|
faker.seed(101);
|
|
38
36
|
|
|
39
|
-
|
|
37
|
+
type StoryProps = {
|
|
38
|
+
content?: string;
|
|
39
|
+
};
|
|
40
|
+
|
|
41
|
+
const DefaultStory = ({ content = '' }: StoryProps) => {
|
|
40
42
|
const { themeMode } = useThemeContext();
|
|
41
|
-
const [text] = useState(
|
|
43
|
+
const [text] = useState(createObject(DataType.makeText(content)));
|
|
42
44
|
const toolbarState = useEditorToolbarState({ viewMode: 'preview' });
|
|
43
45
|
const formattingObserver = useFormattingState(toolbarState);
|
|
44
46
|
const { parentRef, view } = useTextEditor(() => {
|
|
@@ -48,7 +50,7 @@ const DefaultStory: FC<{ content?: string }> = ({ content = '' }) => {
|
|
|
48
50
|
extensions: [
|
|
49
51
|
formattingObserver,
|
|
50
52
|
createBasicExtensions({ readOnly: toolbarState.viewMode === 'readonly' }),
|
|
51
|
-
createMarkdownExtensions(
|
|
53
|
+
createMarkdownExtensions(),
|
|
52
54
|
createThemeExtensions({ themeMode, syntaxHighlighting: true, slots: editorSlots }),
|
|
53
55
|
createDataExtensions({ id: text.id, text: createDocAccessor(text, ['content']) }),
|
|
54
56
|
comments({
|
|
@@ -94,19 +96,22 @@ const content = [
|
|
|
94
96
|
'',
|
|
95
97
|
].join('\n');
|
|
96
98
|
|
|
97
|
-
const meta
|
|
99
|
+
const meta = {
|
|
98
100
|
title: 'plugins/plugin-markdown/Toolbar',
|
|
99
|
-
component: EditorToolbar,
|
|
100
|
-
render: DefaultStory
|
|
101
|
-
decorators: [withTheme
|
|
101
|
+
component: EditorToolbar as any,
|
|
102
|
+
render: DefaultStory,
|
|
103
|
+
decorators: [withTheme],
|
|
102
104
|
parameters: {
|
|
105
|
+
layout: 'fullscreen',
|
|
103
106
|
translations,
|
|
104
107
|
},
|
|
105
|
-
}
|
|
108
|
+
} satisfies Meta<typeof DefaultStory>;
|
|
106
109
|
|
|
107
110
|
export default meta;
|
|
108
111
|
|
|
109
|
-
|
|
112
|
+
type Story = StoryObj<typeof meta>;
|
|
113
|
+
|
|
114
|
+
export const Default: Story = {
|
|
110
115
|
args: {
|
|
111
116
|
content,
|
|
112
117
|
},
|
package/src/components/index.ts
CHANGED
|
@@ -7,4 +7,4 @@ import { lazy } from 'react';
|
|
|
7
7
|
export * from './MarkdownSettings';
|
|
8
8
|
|
|
9
9
|
export const MarkdownContainer = lazy(() => import('./MarkdownContainer'));
|
|
10
|
-
export const
|
|
10
|
+
export const MarkdownCard = lazy(() => import('./MarkdownCard'));
|
package/src/events.ts
CHANGED
|
@@ -4,8 +4,8 @@
|
|
|
4
4
|
|
|
5
5
|
import { Events } from '@dxos/app-framework';
|
|
6
6
|
|
|
7
|
-
import {
|
|
7
|
+
import { meta } from './meta';
|
|
8
8
|
|
|
9
9
|
export namespace MarkdownEvents {
|
|
10
|
-
export const SetupExtensions = Events.createStateEvent(`${
|
|
10
|
+
export const SetupExtensions = Events.createStateEvent(`${meta.id}/event/setup-extensions`);
|
|
11
11
|
}
|
package/src/extensions.tsx
CHANGED
|
@@ -7,27 +7,30 @@ import React, { type AnchorHTMLAttributes, type ReactNode, useMemo } from 'react
|
|
|
7
7
|
import { createRoot } from 'react-dom/client';
|
|
8
8
|
|
|
9
9
|
import {
|
|
10
|
-
createIntent,
|
|
11
10
|
LayoutAction,
|
|
12
11
|
type PromiseIntentDispatcher,
|
|
12
|
+
createIntent,
|
|
13
13
|
useCapabilities,
|
|
14
14
|
useIntentDispatcher,
|
|
15
15
|
} from '@dxos/app-framework';
|
|
16
16
|
import { debounceAndThrottle } from '@dxos/async';
|
|
17
17
|
import { invariant } from '@dxos/invariant';
|
|
18
|
-
import { createDocAccessor, fullyQualifiedId, getSpace
|
|
18
|
+
import { createDocAccessor, fullyQualifiedId, getSpace } from '@dxos/react-client/echo';
|
|
19
19
|
import { useIdentity } from '@dxos/react-client/halo';
|
|
20
20
|
import { Icon, ThemeProvider } from '@dxos/react-ui';
|
|
21
21
|
import { type SelectionManager } from '@dxos/react-ui-attention';
|
|
22
22
|
import {
|
|
23
|
-
|
|
23
|
+
Cursor,
|
|
24
24
|
type EditorStateStore,
|
|
25
|
+
EditorView,
|
|
25
26
|
type EditorViewMode,
|
|
26
27
|
type Extension,
|
|
27
28
|
InputModeExtensions,
|
|
29
|
+
type PreviewOptions,
|
|
30
|
+
type RenderCallback,
|
|
28
31
|
createDataExtensions,
|
|
29
|
-
autocomplete,
|
|
30
32
|
decorateMarkdown,
|
|
33
|
+
documentId,
|
|
31
34
|
folding,
|
|
32
35
|
formattingKeymap,
|
|
33
36
|
linkTooltip,
|
|
@@ -35,27 +38,21 @@ import {
|
|
|
35
38
|
preview,
|
|
36
39
|
selectionState,
|
|
37
40
|
typewriter,
|
|
38
|
-
type RenderCallback,
|
|
39
|
-
EditorView,
|
|
40
|
-
documentId,
|
|
41
|
-
Cursor,
|
|
42
|
-
type PreviewOptions,
|
|
43
41
|
} from '@dxos/react-ui-editor';
|
|
44
42
|
import { defaultTx } from '@dxos/react-ui-theme';
|
|
45
43
|
import { type DataType } from '@dxos/schema';
|
|
46
|
-
import {
|
|
44
|
+
import { isTruthy } from '@dxos/util';
|
|
47
45
|
|
|
48
46
|
import { MarkdownCapabilities } from './capabilities';
|
|
49
|
-
import { type
|
|
47
|
+
import { type Markdown } from './types';
|
|
50
48
|
import { setFallbackName } from './util';
|
|
51
49
|
|
|
52
50
|
type ExtensionsOptions = {
|
|
53
|
-
document?:
|
|
51
|
+
document?: Markdown.Document;
|
|
54
52
|
id?: string;
|
|
55
53
|
text?: DataType.Text;
|
|
56
54
|
dispatch?: PromiseIntentDispatcher;
|
|
57
|
-
|
|
58
|
-
settings: MarkdownSettingsProps;
|
|
55
|
+
settings: Markdown.Settings;
|
|
59
56
|
selectionManager?: SelectionManager;
|
|
60
57
|
viewMode?: EditorViewMode;
|
|
61
58
|
editorStateStore?: EditorStateStore;
|
|
@@ -160,7 +157,7 @@ export const useExtensions = ({
|
|
|
160
157
|
}),
|
|
161
158
|
baseExtensions,
|
|
162
159
|
pluginExtensions,
|
|
163
|
-
].filter(
|
|
160
|
+
].filter(isTruthy),
|
|
164
161
|
[baseExtensions, pluginExtensions, document, document?.content?.target, text, id, space, identity],
|
|
165
162
|
);
|
|
166
163
|
};
|
|
@@ -174,7 +171,6 @@ const createBaseExtensions = ({
|
|
|
174
171
|
dispatch,
|
|
175
172
|
settings,
|
|
176
173
|
selectionManager,
|
|
177
|
-
query,
|
|
178
174
|
viewMode,
|
|
179
175
|
previewOptions,
|
|
180
176
|
}: ExtensionsOptions): Extension[] => {
|
|
@@ -182,7 +178,7 @@ const createBaseExtensions = ({
|
|
|
182
178
|
selectionManager && selectionChange(selectionManager),
|
|
183
179
|
settings.editorInputMode && InputModeExtensions[settings.editorInputMode],
|
|
184
180
|
settings.folding && folding(),
|
|
185
|
-
].filter(
|
|
181
|
+
].filter(isTruthy);
|
|
186
182
|
|
|
187
183
|
//
|
|
188
184
|
// Markdown
|
|
@@ -216,30 +212,6 @@ const createBaseExtensions = ({
|
|
|
216
212
|
);
|
|
217
213
|
}
|
|
218
214
|
|
|
219
|
-
//
|
|
220
|
-
// Autocomplete object links.
|
|
221
|
-
//
|
|
222
|
-
if (query) {
|
|
223
|
-
extensions.push(
|
|
224
|
-
autocomplete({
|
|
225
|
-
onSearch: (text: string) => {
|
|
226
|
-
// TODO(burdon): Specify filter (e.g., stack).
|
|
227
|
-
return query.objects
|
|
228
|
-
.map<AutocompleteResult | undefined>((object) =>
|
|
229
|
-
object.name?.length && object.id !== document?.id
|
|
230
|
-
? {
|
|
231
|
-
label: object.name,
|
|
232
|
-
// TODO(burdon): Factor out URL builder.
|
|
233
|
-
apply: `[${object.name}](/${fullyQualifiedId(object)})`,
|
|
234
|
-
}
|
|
235
|
-
: undefined,
|
|
236
|
-
)
|
|
237
|
-
.filter(isNotFalsy);
|
|
238
|
-
},
|
|
239
|
-
}),
|
|
240
|
-
);
|
|
241
|
-
}
|
|
242
|
-
|
|
243
215
|
if (settings.debug) {
|
|
244
216
|
const items = settings.typewriter?.split(/[,\n]/) ?? '';
|
|
245
217
|
if (items) {
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
//
|
|
2
|
+
// Copyright 2025 DXOS.org
|
|
3
|
+
//
|
|
4
|
+
|
|
5
|
+
import * as Effect from 'effect/Effect';
|
|
6
|
+
import * as Schema from 'effect/Schema';
|
|
7
|
+
|
|
8
|
+
import { ArtifactId, applyDiffs } from '@dxos/assistant';
|
|
9
|
+
import { createDocAccessor } from '@dxos/echo-db';
|
|
10
|
+
import { DatabaseService, defineFunction } from '@dxos/functions';
|
|
11
|
+
import { trim } from '@dxos/util';
|
|
12
|
+
|
|
13
|
+
import { Markdown } from '../types';
|
|
14
|
+
|
|
15
|
+
// TODO(wittjosiah): Reconcile with ThreadAction.AddProposal.
|
|
16
|
+
export default defineFunction({
|
|
17
|
+
key: 'dxos.org/function/markdown/diff',
|
|
18
|
+
name: 'Diff',
|
|
19
|
+
description: trim`
|
|
20
|
+
Applies a set of diffs to the markdown document.
|
|
21
|
+
`,
|
|
22
|
+
inputSchema: Schema.Struct({
|
|
23
|
+
id: ArtifactId.annotations({
|
|
24
|
+
description: 'The ID of the markdown document.',
|
|
25
|
+
}),
|
|
26
|
+
diffs: Schema.Array(Schema.String).annotations({
|
|
27
|
+
description: 'The diffs to apply to the document.',
|
|
28
|
+
}),
|
|
29
|
+
}),
|
|
30
|
+
outputSchema: Schema.Void,
|
|
31
|
+
handler: Effect.fn(function* ({ data: { id, diffs } }) {
|
|
32
|
+
const object = yield* DatabaseService.resolve(ArtifactId.toDXN(id), Markdown.Document);
|
|
33
|
+
const content = yield* Effect.promise(() => object.content.load());
|
|
34
|
+
const accessor = createDocAccessor(content, ['content']);
|
|
35
|
+
applyDiffs(accessor, diffs);
|
|
36
|
+
}),
|
|
37
|
+
});
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
//
|
|
2
|
+
// Copyright 2025 DXOS.org
|
|
3
|
+
//
|
|
4
|
+
|
|
5
|
+
import * as Effect from 'effect/Effect';
|
|
6
|
+
import * as Schema from 'effect/Schema';
|
|
7
|
+
|
|
8
|
+
import { ArtifactId } from '@dxos/assistant';
|
|
9
|
+
import { DatabaseService, defineFunction } from '@dxos/functions';
|
|
10
|
+
|
|
11
|
+
import { Markdown } from '../types';
|
|
12
|
+
|
|
13
|
+
export default defineFunction({
|
|
14
|
+
key: 'dxos.org/function/markdown/open',
|
|
15
|
+
name: 'Open',
|
|
16
|
+
description: 'Opens and reads the contents of a new markdown document.',
|
|
17
|
+
inputSchema: Schema.Struct({
|
|
18
|
+
id: ArtifactId.annotations({
|
|
19
|
+
description: 'The ID of the markdown document.',
|
|
20
|
+
}),
|
|
21
|
+
}),
|
|
22
|
+
outputSchema: Schema.Struct({
|
|
23
|
+
content: Schema.String,
|
|
24
|
+
}),
|
|
25
|
+
handler: Effect.fn(function* ({ data: { id } }) {
|
|
26
|
+
const object = yield* DatabaseService.resolve(ArtifactId.toDXN(id), Markdown.Document);
|
|
27
|
+
const { content } = yield* Effect.promise(() => object.content.load());
|
|
28
|
+
return {
|
|
29
|
+
content,
|
|
30
|
+
};
|
|
31
|
+
}),
|
|
32
|
+
});
|
|
@@ -3,19 +3,19 @@
|
|
|
3
3
|
//
|
|
4
4
|
|
|
5
5
|
import { EditorView } from '@codemirror/view';
|
|
6
|
-
import
|
|
6
|
+
import * as Schema from 'effect/Schema';
|
|
7
7
|
import { useMemo } from 'react';
|
|
8
8
|
|
|
9
|
-
import {
|
|
9
|
+
import { LayoutAction, createResolver, useIntentResolver } from '@dxos/app-framework';
|
|
10
10
|
import { invariant } from '@dxos/invariant';
|
|
11
11
|
import { Cursor, setSelection } from '@dxos/react-ui-editor';
|
|
12
12
|
|
|
13
|
-
import {
|
|
13
|
+
import { meta } from '../meta';
|
|
14
14
|
|
|
15
15
|
/**
|
|
16
16
|
* Handle scrolling and selection of the current thread in a markdown editor.
|
|
17
17
|
*/
|
|
18
|
-
export const useSelectCurrentThread = (editorView: EditorView |
|
|
18
|
+
export const useSelectCurrentThread = (editorView: EditorView | null, documentId: string) => {
|
|
19
19
|
const scrollIntoViewResolver = useMemo(
|
|
20
20
|
() =>
|
|
21
21
|
createResolver({
|
|
@@ -52,5 +52,5 @@ export const useSelectCurrentThread = (editorView: EditorView | undefined, docum
|
|
|
52
52
|
[documentId, editorView],
|
|
53
53
|
);
|
|
54
54
|
|
|
55
|
-
useIntentResolver(
|
|
55
|
+
useIntentResolver(meta.id, scrollIntoViewResolver);
|
|
56
56
|
};
|
package/src/index.ts
CHANGED
package/src/meta.ts
CHANGED
|
@@ -3,18 +3,17 @@
|
|
|
3
3
|
//
|
|
4
4
|
|
|
5
5
|
import { type PluginMeta } from '@dxos/app-framework';
|
|
6
|
-
|
|
7
|
-
export const MARKDOWN_PLUGIN = 'dxos.org/plugin/markdown';
|
|
6
|
+
import { trim } from '@dxos/util';
|
|
8
7
|
|
|
9
8
|
export const meta: PluginMeta = {
|
|
10
|
-
id:
|
|
9
|
+
id: 'dxos.org/plugin/markdown',
|
|
11
10
|
name: 'Markdown',
|
|
12
|
-
description: `
|
|
13
|
-
A
|
|
14
|
-
In addition to markdown capabilities,
|
|
15
|
-
|
|
11
|
+
description: trim`
|
|
12
|
+
A collaborative and extensible Markdown editor.
|
|
13
|
+
In addition to markdown capabilities, the plugin supports collaborative in-line comments.
|
|
14
|
+
You can use documents to extend the memory of your personal agents and add context for automated workflows.
|
|
16
15
|
`,
|
|
17
|
-
source: 'https://github.com/dxos/dxos/tree/main/packages/plugins/plugin-markdown',
|
|
18
16
|
icon: 'ph--text-aa--regular',
|
|
17
|
+
source: 'https://github.com/dxos/dxos/tree/main/packages/plugins/plugin-markdown',
|
|
19
18
|
screenshots: ['https://dxos.network/plugin-details-markdown-dark.png'],
|
|
20
19
|
};
|
package/src/translations.ts
CHANGED
|
@@ -5,12 +5,12 @@
|
|
|
5
5
|
import { type Resource } from '@dxos/react-ui';
|
|
6
6
|
|
|
7
7
|
import { meta } from './meta';
|
|
8
|
-
import {
|
|
8
|
+
import { Markdown } from './types';
|
|
9
9
|
|
|
10
10
|
export const translations = [
|
|
11
11
|
{
|
|
12
12
|
'en-US': {
|
|
13
|
-
[
|
|
13
|
+
[Markdown.Document.typename]: {
|
|
14
14
|
'typename label': 'Document',
|
|
15
15
|
'typename label_zero': 'Documents',
|
|
16
16
|
'typename label_one': 'Document',
|
|
@@ -21,6 +21,7 @@ export const translations = [
|
|
|
21
21
|
},
|
|
22
22
|
[meta.id]: {
|
|
23
23
|
'plugin name': 'Editor',
|
|
24
|
+
'settings title': 'Editor settings',
|
|
24
25
|
'choose markdown from space dialog title': 'Choose one or more documents to add',
|
|
25
26
|
// TODO(burdon): Style-guide for user-facing text (e.g., hints, questions, capitalization, etc.)
|
|
26
27
|
'empty choose markdown from space message': 'None available; try creating a new one instead?',
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
//
|
|
2
|
+
// Copyright 2024 DXOS.org
|
|
3
|
+
//
|
|
4
|
+
|
|
5
|
+
import * as Schema from 'effect/Schema';
|
|
6
|
+
|
|
7
|
+
import { Obj, Ref, Type } from '@dxos/echo';
|
|
8
|
+
import { LabelAnnotation } from '@dxos/echo/internal';
|
|
9
|
+
import { EditorInputMode, EditorViewMode } from '@dxos/react-ui-editor/types';
|
|
10
|
+
import { DataType, ItemAnnotation } from '@dxos/schema';
|
|
11
|
+
|
|
12
|
+
/**
|
|
13
|
+
* Document Item type.
|
|
14
|
+
*/
|
|
15
|
+
export const Document = Schema.Struct({
|
|
16
|
+
name: Schema.optional(Schema.String),
|
|
17
|
+
fallbackName: Schema.optional(Schema.String),
|
|
18
|
+
content: Type.Ref(DataType.Text),
|
|
19
|
+
}).pipe(
|
|
20
|
+
Type.Obj({
|
|
21
|
+
typename: 'dxos.org/type/Document',
|
|
22
|
+
version: '0.1.0',
|
|
23
|
+
}),
|
|
24
|
+
LabelAnnotation.set(['name', 'fallbackName']),
|
|
25
|
+
ItemAnnotation.set(true),
|
|
26
|
+
);
|
|
27
|
+
|
|
28
|
+
export type Document = Schema.Schema.Type<typeof Document>;
|
|
29
|
+
|
|
30
|
+
/**
|
|
31
|
+
* Document factory.
|
|
32
|
+
*/
|
|
33
|
+
export const makeDocument = ({
|
|
34
|
+
content = '',
|
|
35
|
+
...props
|
|
36
|
+
}: Partial<{ name: string; fallbackName: string; content: string }> = {}) =>
|
|
37
|
+
Obj.make(Document, { ...props, content: Ref.make(DataType.makeText(content)) });
|
|
38
|
+
|
|
39
|
+
/**
|
|
40
|
+
* Plugin settings.
|
|
41
|
+
*/
|
|
42
|
+
export const Settings = Schema.mutable(
|
|
43
|
+
Schema.Struct({
|
|
44
|
+
defaultViewMode: EditorViewMode,
|
|
45
|
+
editorInputMode: Schema.optional(EditorInputMode),
|
|
46
|
+
experimental: Schema.optional(Schema.Boolean),
|
|
47
|
+
debug: Schema.optional(Schema.Boolean),
|
|
48
|
+
toolbar: Schema.optional(Schema.Boolean),
|
|
49
|
+
typewriter: Schema.optional(Schema.String),
|
|
50
|
+
// TODO(burdon): Per document settings.
|
|
51
|
+
numberedHeadings: Schema.optional(Schema.Boolean),
|
|
52
|
+
folding: Schema.optional(Schema.Boolean),
|
|
53
|
+
}),
|
|
54
|
+
);
|
|
55
|
+
|
|
56
|
+
export interface Settings extends Schema.Schema.Type<typeof Settings> {}
|