@dxos/plugin-markdown 0.8.4-main.f9ba587 → 0.8.4-main.fd6878d
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-XYP2VXI2.mjs → MarkdownCard-IMCR4A4V.mjs} +17 -17
- package/dist/lib/browser/MarkdownCard-IMCR4A4V.mjs.map +7 -0
- package/dist/lib/browser/{MarkdownContainer-BO5MZWA4.mjs → MarkdownContainer-VGJPHMVG.mjs} +274 -265
- package/dist/lib/browser/MarkdownContainer-VGJPHMVG.mjs.map +7 -0
- package/dist/lib/browser/{anchor-sort-UKJJ7ZNP.mjs → anchor-sort-AJKRIWFD.mjs} +5 -5
- package/dist/lib/browser/anchor-sort-AJKRIWFD.mjs.map +7 -0
- package/dist/lib/browser/{app-graph-serializer-7DKUUZSJ.mjs → app-graph-serializer-OIS3MZX2.mjs} +10 -10
- 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-LFML7LC6.mjs → chunk-JMBQG2ZC.mjs} +8 -9
- 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-5JRBJCZM.mjs → chunk-MVL4K3OD.mjs} +8 -6
- package/dist/lib/browser/chunk-MVL4K3OD.mjs.map +7 -0
- package/dist/lib/browser/index.mjs +20 -22
- package/dist/lib/browser/index.mjs.map +3 -3
- package/dist/lib/browser/{intent-resolver-3MXYO3MW.mjs → intent-resolver-BLLHRSTQ.mjs} +14 -18
- 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-NAXBGUR3.mjs → react-surface-NL3BZR6H.mjs} +28 -25
- package/dist/lib/browser/react-surface-NL3BZR6H.mjs.map +7 -0
- package/dist/lib/browser/{settings-KN75ZQY6.mjs → settings-Z7ZV7SLC.mjs} +5 -5
- package/dist/lib/browser/settings-Z7ZV7SLC.mjs.map +7 -0
- package/dist/lib/browser/{state-LZWTAS65.mjs → state-ORTZIEJU.mjs} +7 -7
- 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-JEXD3KSQ.mjs → MarkdownCard-JV2YDV3M.mjs} +17 -17
- package/dist/lib/node-esm/MarkdownCard-JV2YDV3M.mjs.map +7 -0
- package/dist/lib/node-esm/{MarkdownContainer-J2NVCX2H.mjs → MarkdownContainer-BJRNCXJZ.mjs} +274 -265
- package/dist/lib/node-esm/MarkdownContainer-BJRNCXJZ.mjs.map +7 -0
- package/dist/lib/node-esm/{anchor-sort-IPIS5D5B.mjs → anchor-sort-N7WEA5E3.mjs} +5 -5
- package/dist/lib/node-esm/anchor-sort-N7WEA5E3.mjs.map +7 -0
- package/dist/lib/node-esm/{app-graph-serializer-YRMRPW7A.mjs → app-graph-serializer-Q3B44VFB.mjs} +10 -10
- package/dist/lib/node-esm/app-graph-serializer-Q3B44VFB.mjs.map +7 -0
- package/dist/lib/node-esm/{chunk-ACFGXH2K.mjs → chunk-AYWAYBAY.mjs} +5 -5
- 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-CWTFQSN7.mjs → chunk-JDMMLOB6.mjs} +8 -9
- 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-Q5DIKLN5.mjs → chunk-Z4XQ6C3D.mjs} +8 -6
- package/dist/lib/node-esm/chunk-Z4XQ6C3D.mjs.map +7 -0
- package/dist/lib/node-esm/index.mjs +20 -22
- package/dist/lib/node-esm/index.mjs.map +3 -3
- package/dist/lib/node-esm/{intent-resolver-BZYWV53A.mjs → intent-resolver-NHPUPSWK.mjs} +14 -18
- 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-BSAGEIN6.mjs → react-surface-XJ6ODCBE.mjs} +28 -25
- package/dist/lib/node-esm/react-surface-XJ6ODCBE.mjs.map +7 -0
- package/dist/lib/node-esm/{settings-KVP7TVX7.mjs → settings-UCXEWBCT.mjs} +5 -5
- package/dist/lib/node-esm/settings-UCXEWBCT.mjs.map +7 -0
- package/dist/lib/node-esm/{state-NW3W4JCQ.mjs → state-47WSZG54.mjs} +7 -7
- 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.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.map +1 -1
- package/dist/types/src/components/MarkdownSettings/MarkdownSettings.d.ts +2 -2
- package/dist/types/src/components/MarkdownSettings/MarkdownSettings.d.ts.map +1 -1
- package/dist/types/src/components/Suggestions.stories.d.ts +2 -2
- package/dist/types/src/components/Suggestions.stories.d.ts.map +1 -1
- package/dist/types/src/components/Toolbar.stories.d.ts.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 +4 -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 +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 +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 +43 -41
- package/src/MarkdownPlugin.tsx +8 -14
- package/src/capabilities/anchor-sort.ts +3 -3
- package/src/capabilities/app-graph-serializer.ts +6 -4
- 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} +19 -15
- package/src/components/MarkdownCard/index.ts +9 -0
- package/src/components/MarkdownContainer.stories.tsx +8 -11
- package/src/components/MarkdownContainer.tsx +30 -16
- package/src/components/MarkdownEditor/MarkdownEditor.stories.tsx +2 -1
- package/src/components/MarkdownEditor/MarkdownEditor.tsx +9 -8
- package/src/components/MarkdownSettings/MarkdownSettings.tsx +4 -4
- package/src/components/Suggestions.stories.tsx +25 -19
- package/src/components/Toolbar.stories.tsx +4 -5
- package/src/components/index.ts +1 -1
- package/src/events.ts +2 -2
- package/src/extensions.tsx +12 -12
- package/src/hooks/useSelectCurrentThread.tsx +3 -3
- package/src/index.ts +4 -1
- package/src/meta.ts +10 -8
- package/src/translations.ts +4 -2
- 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 +5 -50
- package/src/util.tsx +20 -6
- package/dist/lib/browser/MarkdownContainer-BO5MZWA4.mjs.map +0 -7
- package/dist/lib/browser/MarkdownPreview-XYP2VXI2.mjs.map +0 -7
- package/dist/lib/browser/anchor-sort-UKJJ7ZNP.mjs.map +0 -7
- package/dist/lib/browser/app-graph-serializer-7DKUUZSJ.mjs.map +0 -7
- package/dist/lib/browser/artifact-definition-JSUG6XPF.mjs +0 -145
- package/dist/lib/browser/artifact-definition-JSUG6XPF.mjs.map +0 -7
- package/dist/lib/browser/chunk-5JRBJCZM.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-IZLATPXQ.mjs +0 -20
- package/dist/lib/browser/chunk-IZLATPXQ.mjs.map +0 -7
- package/dist/lib/browser/chunk-LFML7LC6.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.map +0 -7
- package/dist/lib/browser/react-surface-NAXBGUR3.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-J2NVCX2H.mjs.map +0 -7
- package/dist/lib/node-esm/MarkdownPreview-JEXD3KSQ.mjs.map +0 -7
- package/dist/lib/node-esm/anchor-sort-IPIS5D5B.mjs.map +0 -7
- package/dist/lib/node-esm/app-graph-serializer-YRMRPW7A.mjs.map +0 -7
- package/dist/lib/node-esm/artifact-definition-6C2MOHGP.mjs +0 -146
- package/dist/lib/node-esm/artifact-definition-6C2MOHGP.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-FWKOJW6J.mjs +0 -22
- package/dist/lib/node-esm/chunk-FWKOJW6J.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-Q5DIKLN5.mjs.map +0 -7
- package/dist/lib/node-esm/intent-resolver-BZYWV53A.mjs.map +0 -7
- package/dist/lib/node-esm/react-surface-BSAGEIN6.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 -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
package/src/components/{MarkdownPreview/MarkdownPreview.tsx → MarkdownCard/MarkdownCard.tsx}
RENAMED
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
import { pipe } from 'effect';
|
|
6
6
|
import React, { useCallback } from 'react';
|
|
7
7
|
|
|
8
|
-
import { chain, createIntent,
|
|
8
|
+
import { LayoutAction, chain, createIntent, useIntentDispatcher } from '@dxos/app-framework';
|
|
9
9
|
import { Obj } from '@dxos/echo';
|
|
10
10
|
import { type PreviewProps } from '@dxos/plugin-preview';
|
|
11
11
|
import { fullyQualifiedId } from '@dxos/react-client/echo';
|
|
@@ -13,13 +13,13 @@ import { Button, Icon, useTranslation } from '@dxos/react-ui';
|
|
|
13
13
|
import { Card } from '@dxos/react-ui-stack';
|
|
14
14
|
import { DataType } from '@dxos/schema';
|
|
15
15
|
|
|
16
|
-
import {
|
|
17
|
-
import {
|
|
16
|
+
import { meta } from '../../meta';
|
|
17
|
+
import { Markdown } from '../../types';
|
|
18
18
|
import { getAbstract, getFallbackName } from '../../util';
|
|
19
19
|
|
|
20
20
|
// TODO(burdon): Factor out.
|
|
21
|
-
const getTitle = (subject:
|
|
22
|
-
if (Obj.instanceOf(
|
|
21
|
+
const getTitle = (subject: Markdown.Document | DataType.Text, fallback: string) => {
|
|
22
|
+
if (Obj.instanceOf(Markdown.Document, subject)) {
|
|
23
23
|
return subject.name ?? subject.fallbackName ?? getFallbackName(subject.content?.target?.content ?? fallback);
|
|
24
24
|
} else if (Obj.instanceOf(DataType.Text, subject)) {
|
|
25
25
|
return getFallbackName(subject.content);
|
|
@@ -27,17 +27,19 @@ const getTitle = (subject: DocumentType | DataType.Text, fallback: string) => {
|
|
|
27
27
|
};
|
|
28
28
|
|
|
29
29
|
// TODO(burdon): Factor out.
|
|
30
|
-
const getSnippet = (subject:
|
|
31
|
-
if (Obj.instanceOf(
|
|
30
|
+
const getSnippet = (subject: Markdown.Document | DataType.Text, fallback: string) => {
|
|
31
|
+
if (Obj.instanceOf(Markdown.Document, subject)) {
|
|
32
32
|
return getAbstract(subject.content?.target?.content ?? fallback);
|
|
33
33
|
} else if (Obj.instanceOf(DataType.Text, subject)) {
|
|
34
34
|
return getAbstract(subject.content);
|
|
35
35
|
}
|
|
36
36
|
};
|
|
37
37
|
|
|
38
|
-
export
|
|
38
|
+
export type MarkdownCardProps = PreviewProps<Markdown.Document | DataType.Text>;
|
|
39
|
+
|
|
40
|
+
export const MarkdownCard = ({ subject, role }: MarkdownCardProps) => {
|
|
39
41
|
const { dispatchPromise: dispatch } = useIntentDispatcher();
|
|
40
|
-
const { t } = useTranslation(
|
|
42
|
+
const { t } = useTranslation(meta.id);
|
|
41
43
|
const snippet = getSnippet(subject, t('fallback abstract'));
|
|
42
44
|
|
|
43
45
|
// TODO(wittjosiah): Factor out so this component isn't dependent on the app framework.
|
|
@@ -60,12 +62,14 @@ export const MarkdownPreview = ({ subject, role }: PreviewProps<DocumentType | D
|
|
|
60
62
|
<Card.SurfaceRoot role={role}>
|
|
61
63
|
<Card.Heading>{getTitle(subject, t('fallback title'))}</Card.Heading>
|
|
62
64
|
{snippet && <Card.Text classNames='line-clamp-3 break-words col-span-2'>{snippet}</Card.Text>}
|
|
63
|
-
|
|
64
|
-
<
|
|
65
|
-
<
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
65
|
+
{role === 'card--popover' && (
|
|
66
|
+
<Card.Chrome>
|
|
67
|
+
<Button onClick={handleNavigate}>
|
|
68
|
+
<span className='grow'>{t('navigate to document label')}</span>
|
|
69
|
+
<Icon icon='ph--arrow-right--regular' />
|
|
70
|
+
</Button>
|
|
71
|
+
</Card.Chrome>
|
|
72
|
+
)}
|
|
69
73
|
</Card.SurfaceRoot>
|
|
70
74
|
);
|
|
71
75
|
};
|
|
@@ -7,10 +7,10 @@ import '@dxos-theme';
|
|
|
7
7
|
import { type Meta } from '@storybook/react-vite';
|
|
8
8
|
import React, { useMemo } from 'react';
|
|
9
9
|
|
|
10
|
-
import { Capabilities,
|
|
10
|
+
import { Capabilities, IntentPlugin, SettingsPlugin, Surface, contributes } from '@dxos/app-framework';
|
|
11
11
|
import { withPluginManager } from '@dxos/app-framework/testing';
|
|
12
12
|
import { todo } from '@dxos/debug';
|
|
13
|
-
import {
|
|
13
|
+
import { Query, Type } from '@dxos/echo';
|
|
14
14
|
import { AttentionPlugin } from '@dxos/plugin-attention';
|
|
15
15
|
import { ClientPlugin } from '@dxos/plugin-client';
|
|
16
16
|
import { GraphPlugin } from '@dxos/plugin-graph';
|
|
@@ -22,12 +22,12 @@ import { faker } from '@dxos/random';
|
|
|
22
22
|
import { useQuery, useSpace } from '@dxos/react-client/echo';
|
|
23
23
|
import { defaultTx } from '@dxos/react-ui-theme';
|
|
24
24
|
import { DataType } from '@dxos/schema';
|
|
25
|
-
import {
|
|
25
|
+
import { Testing, type ValueGenerator, createObjectFactory } from '@dxos/schema/testing';
|
|
26
26
|
import { withLayout } from '@dxos/storybook-utils';
|
|
27
27
|
|
|
28
28
|
import { MarkdownPlugin } from '../MarkdownPlugin';
|
|
29
29
|
import { translations } from '../translations';
|
|
30
|
-
import {
|
|
30
|
+
import { Markdown } from '../types';
|
|
31
31
|
|
|
32
32
|
faker.seed(1);
|
|
33
33
|
|
|
@@ -35,7 +35,7 @@ const generator: ValueGenerator = faker as any;
|
|
|
35
35
|
|
|
36
36
|
const DefaultStory = () => {
|
|
37
37
|
const space = useSpace();
|
|
38
|
-
const [doc] = useQuery(space, Query.type(
|
|
38
|
+
const [doc] = useQuery(space, Query.type(Markdown.Document));
|
|
39
39
|
const data = useMemo(() => ({ subject: doc }), [doc]);
|
|
40
40
|
|
|
41
41
|
return <Surface role='article' data={data} />;
|
|
@@ -51,16 +51,13 @@ const meta: Meta<typeof DefaultStory> = {
|
|
|
51
51
|
ThemePlugin({ tx: defaultTx }),
|
|
52
52
|
StorybookLayoutPlugin(),
|
|
53
53
|
ClientPlugin({
|
|
54
|
-
types: [
|
|
55
|
-
onClientInitialized: async (
|
|
54
|
+
types: [Markdown.Document, DataType.Text, Testing.Contact],
|
|
55
|
+
onClientInitialized: async ({ client }) => {
|
|
56
56
|
await client.halo.createIdentity();
|
|
57
57
|
await client.spaces.waitUntilReady();
|
|
58
58
|
await client.spaces.default.waitUntilReady();
|
|
59
59
|
const space = client.spaces.default;
|
|
60
|
-
const doc =
|
|
61
|
-
name: 'Test',
|
|
62
|
-
content: Ref.make(Obj.make(DataType.Text, { content: '# Test\n\n' })),
|
|
63
|
-
});
|
|
60
|
+
const doc = Markdown.makeDocument({ name: 'Test', content: '# Test\n\n' });
|
|
64
61
|
space.db.add(doc);
|
|
65
62
|
const createObjects = createObjectFactory(space.db, generator);
|
|
66
63
|
await createObjects([{ type: Testing.Contact, count: 10 }]);
|
|
@@ -7,7 +7,8 @@ import React, { useCallback, useEffect, useMemo, useState } from 'react';
|
|
|
7
7
|
import { createPortal } from 'react-dom';
|
|
8
8
|
|
|
9
9
|
import { Capabilities, Surface, useAppGraph, useCapabilities, usePluginManager } from '@dxos/app-framework';
|
|
10
|
-
import { DXN, Filter, Obj, Query } from '@dxos/echo';
|
|
10
|
+
import { DXN, Filter, Obj, Query, Type } from '@dxos/echo';
|
|
11
|
+
import { ClientCapabilities } from '@dxos/plugin-client';
|
|
11
12
|
import { SpaceCapabilities } from '@dxos/plugin-space';
|
|
12
13
|
import { fullyQualifiedId, getSpace, useQuery, useSpace } from '@dxos/react-client/echo';
|
|
13
14
|
import { toLocalizedString, useTranslation } from '@dxos/react-ui';
|
|
@@ -15,29 +16,30 @@ import { type SelectionManager } from '@dxos/react-ui-attention';
|
|
|
15
16
|
import {
|
|
16
17
|
type CommandMenuGroup,
|
|
17
18
|
type CommandMenuItem,
|
|
18
|
-
insertAtCursor,
|
|
19
|
-
insertAtLineStart,
|
|
20
19
|
type PreviewLinkRef,
|
|
21
20
|
type PreviewOptions,
|
|
21
|
+
insertAtCursor,
|
|
22
|
+
insertAtLineStart,
|
|
22
23
|
} from '@dxos/react-ui-editor';
|
|
23
24
|
import { DataType } from '@dxos/schema';
|
|
24
25
|
|
|
25
|
-
import { MarkdownEditor, type MarkdownEditorProps } from './MarkdownEditor';
|
|
26
26
|
import { useExtensions } from '../extensions';
|
|
27
|
-
import {
|
|
27
|
+
import { Markdown } from '../types';
|
|
28
28
|
import { getFallbackName } from '../util';
|
|
29
29
|
|
|
30
|
+
import { MarkdownEditor, type MarkdownEditorProps } from './MarkdownEditor';
|
|
31
|
+
|
|
30
32
|
export type MarkdownContainerProps = Pick<
|
|
31
33
|
MarkdownEditorProps,
|
|
32
34
|
'role' | 'extensionProviders' | 'viewMode' | 'editorStateStore' | 'onViewModeChange'
|
|
33
35
|
> & {
|
|
34
36
|
id: string;
|
|
35
|
-
object:
|
|
36
|
-
settings:
|
|
37
|
+
object: Markdown.Document | DataType.Text | any;
|
|
38
|
+
settings: Markdown.Settings;
|
|
37
39
|
selectionManager?: SelectionManager;
|
|
38
40
|
};
|
|
39
41
|
|
|
40
|
-
const MarkdownContainer = ({
|
|
42
|
+
export const MarkdownContainer = ({
|
|
41
43
|
id,
|
|
42
44
|
role,
|
|
43
45
|
object,
|
|
@@ -49,7 +51,7 @@ const MarkdownContainer = ({
|
|
|
49
51
|
}: MarkdownContainerProps) => {
|
|
50
52
|
const { t } = useTranslation();
|
|
51
53
|
const scrollPastEnd = role === 'article';
|
|
52
|
-
const doc = Obj.instanceOf(
|
|
54
|
+
const doc = Obj.instanceOf(Markdown.Document, object) ? object : undefined;
|
|
53
55
|
const text = Obj.instanceOf(DataType.Text, object) ? object : undefined;
|
|
54
56
|
const [previewBlocks, setPreviewBlocks] = useState<{ link: PreviewLinkRef; el: HTMLElement }[]>([]);
|
|
55
57
|
const previewOptions = useMemo(
|
|
@@ -83,18 +85,30 @@ const MarkdownContainer = ({
|
|
|
83
85
|
);
|
|
84
86
|
const space = getSpace(object);
|
|
85
87
|
const objectForms = useCapabilities(SpaceCapabilities.ObjectForm);
|
|
86
|
-
const
|
|
88
|
+
const schemaWhiteList = useCapabilities(ClientCapabilities.SchemaWhiteList);
|
|
89
|
+
const filter = useMemo(
|
|
90
|
+
() =>
|
|
91
|
+
Filter.or(
|
|
92
|
+
...objectForms.map((form) => Filter.type(form.objectSchema)),
|
|
93
|
+
...schemaWhiteList.flat().map((schema) => Filter.typename(Type.getTypename(schema))),
|
|
94
|
+
),
|
|
95
|
+
[objectForms, schemaWhiteList],
|
|
96
|
+
);
|
|
87
97
|
const onLinkQuery = useCallback(
|
|
88
98
|
async (query?: string): Promise<CommandMenuGroup[]> => {
|
|
89
|
-
const name = query?.startsWith('@') ? query.slice(1).toLowerCase() : query?.toLowerCase() ?? '';
|
|
99
|
+
const name = query?.startsWith('@') ? query.slice(1).toLowerCase() : (query?.toLowerCase() ?? '');
|
|
90
100
|
const results = await space?.db.query(Query.select(filter)).run();
|
|
91
101
|
// TODO(wittjosiah): Use `Obj.Any` type.
|
|
92
102
|
const getLabel = (object: any) => {
|
|
103
|
+
const label = Obj.getLabel(object);
|
|
104
|
+
if (label) {
|
|
105
|
+
return label;
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
// TODO(wittjosiah): Remove metadata labels.
|
|
93
109
|
const type = Obj.getTypename(object)!;
|
|
94
110
|
const metadata = resolve(type);
|
|
95
|
-
return (
|
|
96
|
-
metadata.label?.(object) || object.name || ['object name placeholder', { ns: type, default: 'New object' }]
|
|
97
|
-
);
|
|
111
|
+
return metadata.label?.(object) || ['object name placeholder', { ns: type, default: 'New object' }];
|
|
98
112
|
};
|
|
99
113
|
const items =
|
|
100
114
|
results?.objects
|
|
@@ -181,12 +195,12 @@ const PreviewBlock = ({ link, el }: { link: PreviewLinkRef; el: HTMLElement }) =
|
|
|
181
195
|
const [subject] = useQuery(space, Query.select(Filter.ids(echoDXN?.echoId ?? '')));
|
|
182
196
|
const data = useMemo(() => ({ subject }), [subject]);
|
|
183
197
|
|
|
184
|
-
return createPortal(<Surface role='card--
|
|
198
|
+
return createPortal(<Surface role='card--transclusion' data={data} limit={1} />, el);
|
|
185
199
|
};
|
|
186
200
|
|
|
187
201
|
type DocumentEditorProps = Omit<MarkdownContainerProps, 'object' | 'extensionProviders' | 'editorStateStore'> &
|
|
188
202
|
Pick<MarkdownEditorProps, 'id' | 'scrollPastEnd' | 'extensions' | 'onLinkQuery'> & {
|
|
189
|
-
document:
|
|
203
|
+
document: Markdown.Document;
|
|
190
204
|
};
|
|
191
205
|
|
|
192
206
|
export const DocumentEditor = ({ id, document: doc, settings, viewMode, ...props }: DocumentEditorProps) => {
|
|
@@ -14,9 +14,10 @@ import { withAttention } from '@dxos/react-ui-attention/testing';
|
|
|
14
14
|
import { automerge, translations as editorTranslations } from '@dxos/react-ui-editor';
|
|
15
15
|
import { withLayout, withTheme } from '@dxos/storybook-utils';
|
|
16
16
|
|
|
17
|
-
import { MarkdownEditor, type MarkdownEditorProps } from './MarkdownEditor';
|
|
18
17
|
import { translations } from '../../translations';
|
|
19
18
|
|
|
19
|
+
import { MarkdownEditor, type MarkdownEditorProps } from './MarkdownEditor';
|
|
20
|
+
|
|
20
21
|
const content = Array.from({ length: 100 }, (_, i) => `Line ${i + 1}`).join('\n');
|
|
21
22
|
|
|
22
23
|
type StoryProps = MarkdownEditorProps & {
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
//
|
|
4
4
|
|
|
5
5
|
import { type EditorView } from '@codemirror/view';
|
|
6
|
-
import React, { forwardRef,
|
|
6
|
+
import React, { forwardRef, useCallback, useEffect, useImperativeHandle, useMemo, useRef } from 'react';
|
|
7
7
|
import { useDropzone } from 'react-dropzone';
|
|
8
8
|
|
|
9
9
|
import { type FileInfo } from '@dxos/app-framework';
|
|
@@ -20,11 +20,12 @@ import {
|
|
|
20
20
|
type EditorToolbarActionGraphProps,
|
|
21
21
|
type EditorViewMode,
|
|
22
22
|
RefPopover,
|
|
23
|
+
type UseCommandMenuOptions,
|
|
23
24
|
type UseTextEditorProps,
|
|
24
25
|
addLink,
|
|
25
|
-
createElement,
|
|
26
26
|
coreSlashCommands,
|
|
27
27
|
createBasicExtensions,
|
|
28
|
+
createElement,
|
|
28
29
|
createMarkdownExtensions,
|
|
29
30
|
createThemeExtensions,
|
|
30
31
|
dropFile,
|
|
@@ -34,26 +35,25 @@ import {
|
|
|
34
35
|
linkSlashCommands,
|
|
35
36
|
processEditorPayload,
|
|
36
37
|
stackItemContentEditorClassNames,
|
|
38
|
+
useCommandMenu,
|
|
37
39
|
useEditorToolbarState,
|
|
38
40
|
useFormattingState,
|
|
39
41
|
useTextEditor,
|
|
40
|
-
useCommandMenu,
|
|
41
|
-
type UseCommandMenuOptions,
|
|
42
42
|
} from '@dxos/react-ui-editor';
|
|
43
43
|
import { StackItem } from '@dxos/react-ui-stack';
|
|
44
|
-
import {
|
|
44
|
+
import { isNonNullable, isNotFalsy } from '@dxos/util';
|
|
45
45
|
|
|
46
46
|
import { useSelectCurrentThread } from '../../hooks';
|
|
47
|
-
import {
|
|
47
|
+
import { meta } from '../../meta';
|
|
48
48
|
import { type MarkdownPluginState } from '../../types';
|
|
49
49
|
|
|
50
50
|
export type MarkdownEditorProps = {
|
|
51
51
|
id: string;
|
|
52
52
|
role?: string;
|
|
53
|
+
toolbar?: boolean;
|
|
53
54
|
inputMode?: EditorInputMode;
|
|
54
55
|
scrollPastEnd?: boolean;
|
|
55
56
|
slashCommandGroups?: CommandMenuGroup[];
|
|
56
|
-
toolbar?: boolean;
|
|
57
57
|
customActions?: EditorToolbarActionGraphProps['customActions'];
|
|
58
58
|
// TODO(wittjosiah): Generalize custom toolbar actions (e.g. comment, upload, etc.)
|
|
59
59
|
viewMode?: EditorViewMode;
|
|
@@ -147,7 +147,7 @@ const MarkdownEditorImpl = forwardRef<EditorView | undefined, MarkdownEditorProp
|
|
|
147
147
|
},
|
|
148
148
|
forwardedRef,
|
|
149
149
|
) => {
|
|
150
|
-
const { t } = useTranslation(
|
|
150
|
+
const { t } = useTranslation(meta.id);
|
|
151
151
|
const { themeMode } = useThemeContext();
|
|
152
152
|
const toolbarState = useEditorToolbarState({ viewMode });
|
|
153
153
|
const formattingObserver = useFormattingState(toolbarState);
|
|
@@ -185,6 +185,7 @@ const MarkdownEditorImpl = forwardRef<EditorView | undefined, MarkdownEditorProp
|
|
|
185
185
|
readOnly: viewMode === 'readonly',
|
|
186
186
|
placeholder: t('editor placeholder'),
|
|
187
187
|
scrollPastEnd: role === 'section' ? false : scrollPastEnd,
|
|
188
|
+
search: true,
|
|
188
189
|
}),
|
|
189
190
|
createMarkdownExtensions({ themeMode }),
|
|
190
191
|
createThemeExtensions({ themeMode, syntaxHighlighting: true, slots: editorSlots }),
|
|
@@ -8,11 +8,11 @@ import { Input, Select, useTranslation } from '@dxos/react-ui';
|
|
|
8
8
|
import { type EditorInputMode, EditorInputModes, type EditorViewMode, EditorViewModes } from '@dxos/react-ui-editor';
|
|
9
9
|
import { DeprecatedFormContainer, DeprecatedFormInput } from '@dxos/react-ui-form';
|
|
10
10
|
|
|
11
|
-
import {
|
|
12
|
-
import { type
|
|
11
|
+
import { meta } from '../../meta';
|
|
12
|
+
import { type Markdown } from '../../types';
|
|
13
13
|
|
|
14
|
-
export const MarkdownSettings = ({ settings }: { settings:
|
|
15
|
-
const { t } = useTranslation(
|
|
14
|
+
export const MarkdownSettings = ({ settings }: { settings: Markdown.Settings }) => {
|
|
15
|
+
const { t } = useTranslation(meta.id);
|
|
16
16
|
|
|
17
17
|
// TODO(wittjosiah): Add skill test confirmation for entering vim mode.
|
|
18
18
|
return (
|
|
@@ -5,10 +5,9 @@
|
|
|
5
5
|
import '@dxos-theme';
|
|
6
6
|
|
|
7
7
|
import { type Meta } from '@storybook/react-vite';
|
|
8
|
-
import { Match, Option,
|
|
8
|
+
import { Match, Option, Schema, pipe } from 'effect';
|
|
9
9
|
import React, { type FC, useEffect, useMemo, useState } from 'react';
|
|
10
10
|
|
|
11
|
-
import { Message } from '@dxos/ai';
|
|
12
11
|
import {
|
|
13
12
|
Capabilities,
|
|
14
13
|
CollaborationActions,
|
|
@@ -31,17 +30,19 @@ import { ThemePlugin } from '@dxos/plugin-theme';
|
|
|
31
30
|
import { faker } from '@dxos/random';
|
|
32
31
|
import { createDocAccessor, fullyQualifiedId, toCursorRange, useQueue, useSpace } from '@dxos/react-client/echo';
|
|
33
32
|
import { IconButton, Toolbar } from '@dxos/react-ui';
|
|
34
|
-
import {
|
|
33
|
+
import { type EditorSelection, type Range, command, useTextEditor } from '@dxos/react-ui-editor';
|
|
35
34
|
import { StackItem } from '@dxos/react-ui-stack';
|
|
36
35
|
import { defaultTx } from '@dxos/react-ui-theme';
|
|
36
|
+
import { DataType } from '@dxos/schema';
|
|
37
37
|
import { withLayout } from '@dxos/storybook-utils';
|
|
38
38
|
|
|
39
|
-
import MarkdownContainer from './MarkdownContainer';
|
|
40
|
-
import { MarkdownPlugin } from '../MarkdownPlugin';
|
|
41
39
|
import { MarkdownCapabilities } from '../capabilities';
|
|
42
|
-
import {
|
|
40
|
+
import { MarkdownPlugin } from '../MarkdownPlugin';
|
|
41
|
+
import { meta } from '../meta';
|
|
43
42
|
import { translations } from '../translations';
|
|
44
|
-
import {
|
|
43
|
+
import { Markdown } from '../types';
|
|
44
|
+
|
|
45
|
+
import { MarkdownContainer } from './MarkdownContainer';
|
|
45
46
|
|
|
46
47
|
faker.seed(1);
|
|
47
48
|
|
|
@@ -61,19 +62,25 @@ const TestItem = Schema.Struct({
|
|
|
61
62
|
}),
|
|
62
63
|
);
|
|
63
64
|
|
|
64
|
-
const TestChat: FC<{ doc:
|
|
65
|
+
const TestChat: FC<{ doc: Markdown.Document; content: string }> = ({ doc, content }) => {
|
|
65
66
|
const { dispatchPromise: dispatch } = useIntentDispatcher();
|
|
66
67
|
const { parentRef } = useTextEditor({ initialValue: content });
|
|
67
68
|
const { editorState } = useCapability(MarkdownCapabilities.State);
|
|
68
69
|
|
|
69
70
|
const space = useSpace();
|
|
70
71
|
const queueDxn = useMemo(() => space && space.queues.create().dxn, [space]);
|
|
71
|
-
const queue = useQueue<Message>(queueDxn);
|
|
72
|
+
const queue = useQueue<DataType.Message>(queueDxn);
|
|
72
73
|
|
|
73
74
|
const handleInsert = async () => {
|
|
74
75
|
invariant(space);
|
|
75
76
|
invariant(queue);
|
|
76
|
-
await queue.append([
|
|
77
|
+
await queue.append([
|
|
78
|
+
Obj.make(DataType.Message, {
|
|
79
|
+
created: new Date().toISOString(),
|
|
80
|
+
sender: { role: 'assistant' },
|
|
81
|
+
blocks: [{ _tag: 'text', text: 'Hello' }],
|
|
82
|
+
}),
|
|
83
|
+
]);
|
|
77
84
|
const message = queue.objects.at(-1);
|
|
78
85
|
invariant(message);
|
|
79
86
|
|
|
@@ -114,8 +121,8 @@ const TestChat: FC<{ doc: DocumentType; content: string }> = ({ doc, content })
|
|
|
114
121
|
|
|
115
122
|
const DefaultStory = ({ document, chat }: { document: string; chat: string }) => {
|
|
116
123
|
const space = useSpace();
|
|
117
|
-
const [doc, setDoc] = useState<
|
|
118
|
-
const settings = useCapability(Capabilities.SettingsStore).getStore<
|
|
124
|
+
const [doc, setDoc] = useState<Markdown.Document>();
|
|
125
|
+
const settings = useCapability(Capabilities.SettingsStore).getStore<Markdown.Settings>(meta.id)!.value;
|
|
119
126
|
const { editorState } = useCapability(MarkdownCapabilities.State);
|
|
120
127
|
|
|
121
128
|
useEffect(() => {
|
|
@@ -124,10 +131,8 @@ const DefaultStory = ({ document, chat }: { document: string; chat: string }) =>
|
|
|
124
131
|
}
|
|
125
132
|
|
|
126
133
|
const doc = space.db.add(
|
|
127
|
-
|
|
134
|
+
Markdown.makeDocument({
|
|
128
135
|
name: 'Test',
|
|
129
|
-
|
|
130
|
-
// Create links.
|
|
131
136
|
content: document.replaceAll(/\[(\w+)\]/g, (_, label) => {
|
|
132
137
|
const obj = space.db.add(Obj.make(TestItem, { title: label, description: faker.lorem.paragraph() }));
|
|
133
138
|
const dxn = Ref.make(obj).dxn.toString();
|
|
@@ -151,7 +156,8 @@ const DefaultStory = ({ document, chat }: { document: string; chat: string }) =>
|
|
|
151
156
|
);
|
|
152
157
|
};
|
|
153
158
|
|
|
154
|
-
|
|
159
|
+
// TODO(burdon): Make consistent.
|
|
160
|
+
const storybook: Meta<typeof DefaultStory> = {
|
|
155
161
|
title: 'plugins/plugin-markdown/Suggestions',
|
|
156
162
|
render: DefaultStory,
|
|
157
163
|
decorators: [
|
|
@@ -160,8 +166,8 @@ const meta: Meta<typeof DefaultStory> = {
|
|
|
160
166
|
ThemePlugin({ tx: defaultTx }),
|
|
161
167
|
StorybookLayoutPlugin(),
|
|
162
168
|
ClientPlugin({
|
|
163
|
-
types: [
|
|
164
|
-
onClientInitialized: async (
|
|
169
|
+
types: [Markdown.Document, TestItem],
|
|
170
|
+
onClientInitialized: async ({ client }) => {
|
|
165
171
|
await client.halo.createIdentity();
|
|
166
172
|
},
|
|
167
173
|
}),
|
|
@@ -181,7 +187,7 @@ const meta: Meta<typeof DefaultStory> = {
|
|
|
181
187
|
},
|
|
182
188
|
};
|
|
183
189
|
|
|
184
|
-
export default
|
|
190
|
+
export default storybook;
|
|
185
191
|
|
|
186
192
|
type Story = Meta<typeof DefaultStory>;
|
|
187
193
|
|
|
@@ -7,15 +7,15 @@ import '@dxos-theme';
|
|
|
7
7
|
import { type Meta } from '@storybook/react-vite';
|
|
8
8
|
import React, { type FC, useCallback, useState } from 'react';
|
|
9
9
|
|
|
10
|
-
import { Obj } from '@dxos/echo';
|
|
11
10
|
import { invariant } from '@dxos/invariant';
|
|
12
11
|
import { PublicKey } from '@dxos/keys';
|
|
13
12
|
import { faker } from '@dxos/random';
|
|
14
13
|
import { createDocAccessor } from '@dxos/react-client/echo';
|
|
15
14
|
import { useThemeContext } from '@dxos/react-ui';
|
|
16
15
|
import {
|
|
17
|
-
EditorToolbar,
|
|
18
16
|
type Comment,
|
|
17
|
+
EditorToolbar,
|
|
18
|
+
type EditorViewMode,
|
|
19
19
|
comments,
|
|
20
20
|
createBasicExtensions,
|
|
21
21
|
createDataExtensions,
|
|
@@ -26,10 +26,9 @@ 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
34
|
import { withLayout, withTheme } from '@dxos/storybook-utils';
|
|
@@ -38,7 +37,7 @@ faker.seed(101);
|
|
|
38
37
|
|
|
39
38
|
const DefaultStory: FC<{ content?: string }> = ({ content = '' }) => {
|
|
40
39
|
const { themeMode } = useThemeContext();
|
|
41
|
-
const [text] = useState(
|
|
40
|
+
const [text] = useState(DataType.makeText(content));
|
|
42
41
|
const toolbarState = useEditorToolbarState({ viewMode: 'preview' });
|
|
43
42
|
const formattingObserver = useFormattingState(toolbarState);
|
|
44
43
|
const { parentRef, view } = useTextEditor(() => {
|
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,32 @@ 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 { type QueryResult, 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
|
type AutocompleteResult,
|
|
24
|
+
Cursor,
|
|
24
25
|
type EditorStateStore,
|
|
26
|
+
EditorView,
|
|
25
27
|
type EditorViewMode,
|
|
26
28
|
type Extension,
|
|
27
29
|
InputModeExtensions,
|
|
28
|
-
|
|
30
|
+
type PreviewOptions,
|
|
31
|
+
type RenderCallback,
|
|
29
32
|
autocomplete,
|
|
33
|
+
createDataExtensions,
|
|
30
34
|
decorateMarkdown,
|
|
35
|
+
documentId,
|
|
31
36
|
folding,
|
|
32
37
|
formattingKeymap,
|
|
33
38
|
linkTooltip,
|
|
@@ -35,27 +40,22 @@ import {
|
|
|
35
40
|
preview,
|
|
36
41
|
selectionState,
|
|
37
42
|
typewriter,
|
|
38
|
-
type RenderCallback,
|
|
39
|
-
EditorView,
|
|
40
|
-
documentId,
|
|
41
|
-
Cursor,
|
|
42
|
-
type PreviewOptions,
|
|
43
43
|
} from '@dxos/react-ui-editor';
|
|
44
44
|
import { defaultTx } from '@dxos/react-ui-theme';
|
|
45
45
|
import { type DataType } from '@dxos/schema';
|
|
46
46
|
import { isNotFalsy } from '@dxos/util';
|
|
47
47
|
|
|
48
48
|
import { MarkdownCapabilities } from './capabilities';
|
|
49
|
-
import { type
|
|
49
|
+
import { type Markdown } from './types';
|
|
50
50
|
import { setFallbackName } from './util';
|
|
51
51
|
|
|
52
52
|
type ExtensionsOptions = {
|
|
53
|
-
document?:
|
|
53
|
+
document?: Markdown.Document;
|
|
54
54
|
id?: string;
|
|
55
55
|
text?: DataType.Text;
|
|
56
56
|
dispatch?: PromiseIntentDispatcher;
|
|
57
|
-
query?: QueryResult<
|
|
58
|
-
settings:
|
|
57
|
+
query?: QueryResult<Markdown.Document>;
|
|
58
|
+
settings: Markdown.Settings;
|
|
59
59
|
selectionManager?: SelectionManager;
|
|
60
60
|
viewMode?: EditorViewMode;
|
|
61
61
|
editorStateStore?: EditorStateStore;
|
|
@@ -6,11 +6,11 @@ import { EditorView } from '@codemirror/view';
|
|
|
6
6
|
import { Schema } from 'effect';
|
|
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.
|
|
@@ -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,20 @@
|
|
|
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
|
};
|
|
20
|
+
|
|
21
|
+
// TODO(burdon): Workaround for suspected vitest bug? Update vitest?
|
|
22
|
+
export const not_meta = meta;
|