@dxos/plugin-markdown 0.8.4-main.c1de068 → 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-S3C7CGAV.mjs → MarkdownCard-IMCR4A4V.mjs} +16 -16
- package/dist/lib/browser/MarkdownCard-IMCR4A4V.mjs.map +7 -0
- package/dist/lib/browser/{MarkdownContainer-F3WEEIBX.mjs → MarkdownContainer-VGJPHMVG.mjs} +262 -260
- 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-ICLAF662.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-LHDCHDBW.mjs → chunk-MVL4K3OD.mjs} +5 -5
- 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-C3Z423TV.mjs → react-surface-NL3BZR6H.mjs} +24 -22
- 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-77UFEWXT.mjs → MarkdownCard-JV2YDV3M.mjs} +16 -16
- package/dist/lib/node-esm/MarkdownCard-JV2YDV3M.mjs.map +7 -0
- package/dist/lib/node-esm/{MarkdownContainer-VOUHL6IU.mjs → MarkdownContainer-BJRNCXJZ.mjs} +262 -260
- 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-FLBXQKKR.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-VIR2ABYE.mjs → chunk-Z4XQ6C3D.mjs} +5 -5
- 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-TTTBYNI2.mjs → react-surface-XJ6ODCBE.mjs} +24 -22
- 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/{MarkdownPreview/MarkdownPreview.stories.d.ts → MarkdownCard/MarkdownCard.stories.d.ts} +8 -8
- 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 +2 -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 +15 -12
- 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 +21 -19
- package/src/capabilities/settings.ts +3 -3
- package/src/capabilities/state.ts +8 -8
- package/src/components/{MarkdownPreview/MarkdownPreview.stories.tsx → MarkdownCard/MarkdownCard.stories.tsx} +30 -32
- package/src/components/{MarkdownPreview/MarkdownPreview.tsx → MarkdownCard/MarkdownCard.tsx} +11 -9
- package/src/components/MarkdownCard/index.ts +9 -0
- package/src/components/MarkdownContainer.stories.tsx +8 -11
- package/src/components/MarkdownContainer.tsx +10 -9
- 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 +16 -16
- 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 +2 -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-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.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.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.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/index.ts +0 -9
- package/src/types/schema.ts +0 -39
|
@@ -4,30 +4,29 @@
|
|
|
4
4
|
|
|
5
5
|
import '@dxos-theme';
|
|
6
6
|
|
|
7
|
-
import { type Meta } from '@storybook/react-vite';
|
|
7
|
+
import { type Meta, type StoryObj } from '@storybook/react-vite';
|
|
8
8
|
import React from 'react';
|
|
9
9
|
|
|
10
10
|
import { IntentPlugin } from '@dxos/app-framework';
|
|
11
11
|
import { withPluginManager } from '@dxos/app-framework/testing';
|
|
12
|
-
import {
|
|
13
|
-
import { DocumentType } from '@dxos/plugin-markdown/types';
|
|
12
|
+
import { Markdown } from '@dxos/plugin-markdown/types';
|
|
14
13
|
import { faker } from '@dxos/random';
|
|
15
14
|
import { CardContainer } from '@dxos/react-ui-stack/testing';
|
|
16
|
-
import {
|
|
17
|
-
import { withTheme, withLayout } from '@dxos/storybook-utils';
|
|
15
|
+
import { withLayout, withTheme } from '@dxos/storybook-utils';
|
|
18
16
|
|
|
19
|
-
import { MarkdownPreview } from './MarkdownPreview';
|
|
20
17
|
import { translations } from '../../translations';
|
|
21
18
|
|
|
19
|
+
import { MarkdownCard } from './MarkdownCard';
|
|
20
|
+
|
|
22
21
|
faker.seed(1234);
|
|
23
22
|
|
|
24
|
-
const meta: Meta<typeof
|
|
25
|
-
title: '
|
|
26
|
-
component:
|
|
23
|
+
const meta: Meta<typeof MarkdownCard> = {
|
|
24
|
+
title: 'plugins/plugin-markdown/Card',
|
|
25
|
+
component: MarkdownCard,
|
|
27
26
|
render: ({ role, subject, ...args }) => {
|
|
28
27
|
return (
|
|
29
28
|
<CardContainer icon='ph--text-aa--regular' role={role}>
|
|
30
|
-
<
|
|
29
|
+
<MarkdownCard role={role} subject={subject} {...args} />
|
|
31
30
|
</CardContainer>
|
|
32
31
|
);
|
|
33
32
|
},
|
|
@@ -42,40 +41,39 @@ const meta: Meta<typeof MarkdownPreview> = {
|
|
|
42
41
|
layout: 'centered',
|
|
43
42
|
translations,
|
|
44
43
|
},
|
|
44
|
+
tags: ['cards'],
|
|
45
45
|
};
|
|
46
46
|
|
|
47
47
|
export default meta;
|
|
48
48
|
|
|
49
|
-
|
|
50
|
-
const document = Obj.make(DocumentType, {
|
|
51
|
-
name: faker.lorem.words(3),
|
|
52
|
-
content: Ref.make(
|
|
53
|
-
Obj.make(DataType.Text, {
|
|
54
|
-
content: faker.lorem.paragraphs(3),
|
|
55
|
-
}),
|
|
56
|
-
),
|
|
57
|
-
});
|
|
58
|
-
|
|
59
|
-
return { document };
|
|
60
|
-
})();
|
|
49
|
+
type Story = StoryObj<typeof meta>;
|
|
61
50
|
|
|
62
51
|
export const Popover = {
|
|
63
52
|
args: {
|
|
64
|
-
subject: Obj.make(DocumentType, data.document),
|
|
65
53
|
role: 'card--popover',
|
|
54
|
+
subject: Markdown.makeDocument({
|
|
55
|
+
name: faker.lorem.words(3),
|
|
56
|
+
content: faker.lorem.paragraphs(3),
|
|
57
|
+
}),
|
|
66
58
|
},
|
|
67
|
-
};
|
|
59
|
+
} satisfies Story;
|
|
68
60
|
|
|
69
|
-
export const
|
|
61
|
+
export const Intrinsic = {
|
|
70
62
|
args: {
|
|
71
|
-
|
|
72
|
-
|
|
63
|
+
role: 'card--intrinsic',
|
|
64
|
+
subject: Markdown.makeDocument({
|
|
65
|
+
name: faker.lorem.words(3),
|
|
66
|
+
content: faker.lorem.paragraphs(3),
|
|
67
|
+
}),
|
|
73
68
|
},
|
|
74
|
-
};
|
|
69
|
+
} satisfies Story;
|
|
75
70
|
|
|
76
|
-
export const
|
|
71
|
+
export const Extrinsic = {
|
|
77
72
|
args: {
|
|
78
|
-
|
|
79
|
-
|
|
73
|
+
role: 'card--extrinsic',
|
|
74
|
+
subject: Markdown.makeDocument({
|
|
75
|
+
name: faker.lorem.words(3),
|
|
76
|
+
content: faker.lorem.paragraphs(3),
|
|
77
|
+
}),
|
|
80
78
|
},
|
|
81
|
-
};
|
|
79
|
+
} satisfies Story;
|
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.
|
|
@@ -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 }]);
|
|
@@ -16,29 +16,30 @@ import { type SelectionManager } from '@dxos/react-ui-attention';
|
|
|
16
16
|
import {
|
|
17
17
|
type CommandMenuGroup,
|
|
18
18
|
type CommandMenuItem,
|
|
19
|
-
insertAtCursor,
|
|
20
|
-
insertAtLineStart,
|
|
21
19
|
type PreviewLinkRef,
|
|
22
20
|
type PreviewOptions,
|
|
21
|
+
insertAtCursor,
|
|
22
|
+
insertAtLineStart,
|
|
23
23
|
} from '@dxos/react-ui-editor';
|
|
24
24
|
import { DataType } from '@dxos/schema';
|
|
25
25
|
|
|
26
|
-
import { MarkdownEditor, type MarkdownEditorProps } from './MarkdownEditor';
|
|
27
26
|
import { useExtensions } from '../extensions';
|
|
28
|
-
import {
|
|
27
|
+
import { Markdown } from '../types';
|
|
29
28
|
import { getFallbackName } from '../util';
|
|
30
29
|
|
|
30
|
+
import { MarkdownEditor, type MarkdownEditorProps } from './MarkdownEditor';
|
|
31
|
+
|
|
31
32
|
export type MarkdownContainerProps = Pick<
|
|
32
33
|
MarkdownEditorProps,
|
|
33
34
|
'role' | 'extensionProviders' | 'viewMode' | 'editorStateStore' | 'onViewModeChange'
|
|
34
35
|
> & {
|
|
35
36
|
id: string;
|
|
36
|
-
object:
|
|
37
|
-
settings:
|
|
37
|
+
object: Markdown.Document | DataType.Text | any;
|
|
38
|
+
settings: Markdown.Settings;
|
|
38
39
|
selectionManager?: SelectionManager;
|
|
39
40
|
};
|
|
40
41
|
|
|
41
|
-
const MarkdownContainer = ({
|
|
42
|
+
export const MarkdownContainer = ({
|
|
42
43
|
id,
|
|
43
44
|
role,
|
|
44
45
|
object,
|
|
@@ -50,7 +51,7 @@ const MarkdownContainer = ({
|
|
|
50
51
|
}: MarkdownContainerProps) => {
|
|
51
52
|
const { t } = useTranslation();
|
|
52
53
|
const scrollPastEnd = role === 'article';
|
|
53
|
-
const doc = Obj.instanceOf(
|
|
54
|
+
const doc = Obj.instanceOf(Markdown.Document, object) ? object : undefined;
|
|
54
55
|
const text = Obj.instanceOf(DataType.Text, object) ? object : undefined;
|
|
55
56
|
const [previewBlocks, setPreviewBlocks] = useState<{ link: PreviewLinkRef; el: HTMLElement }[]>([]);
|
|
56
57
|
const previewOptions = useMemo(
|
|
@@ -199,7 +200,7 @@ const PreviewBlock = ({ link, el }: { link: PreviewLinkRef; el: HTMLElement }) =
|
|
|
199
200
|
|
|
200
201
|
type DocumentEditorProps = Omit<MarkdownContainerProps, 'object' | 'extensionProviders' | 'editorStateStore'> &
|
|
201
202
|
Pick<MarkdownEditorProps, 'id' | 'scrollPastEnd' | 'extensions' | 'onLinkQuery'> & {
|
|
202
|
-
document:
|
|
203
|
+
document: Markdown.Document;
|
|
203
204
|
};
|
|
204
205
|
|
|
205
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,7 +5,7 @@
|
|
|
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
11
|
import {
|
|
@@ -30,18 +30,19 @@ import { ThemePlugin } from '@dxos/plugin-theme';
|
|
|
30
30
|
import { faker } from '@dxos/random';
|
|
31
31
|
import { createDocAccessor, fullyQualifiedId, toCursorRange, useQueue, useSpace } from '@dxos/react-client/echo';
|
|
32
32
|
import { IconButton, Toolbar } from '@dxos/react-ui';
|
|
33
|
-
import {
|
|
33
|
+
import { type EditorSelection, type Range, command, useTextEditor } from '@dxos/react-ui-editor';
|
|
34
34
|
import { StackItem } from '@dxos/react-ui-stack';
|
|
35
35
|
import { defaultTx } from '@dxos/react-ui-theme';
|
|
36
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,7 +62,7 @@ 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);
|
|
@@ -120,8 +121,8 @@ const TestChat: FC<{ doc: DocumentType; content: string }> = ({ doc, content })
|
|
|
120
121
|
|
|
121
122
|
const DefaultStory = ({ document, chat }: { document: string; chat: string }) => {
|
|
122
123
|
const space = useSpace();
|
|
123
|
-
const [doc, setDoc] = useState<
|
|
124
|
-
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;
|
|
125
126
|
const { editorState } = useCapability(MarkdownCapabilities.State);
|
|
126
127
|
|
|
127
128
|
useEffect(() => {
|
|
@@ -130,10 +131,8 @@ const DefaultStory = ({ document, chat }: { document: string; chat: string }) =>
|
|
|
130
131
|
}
|
|
131
132
|
|
|
132
133
|
const doc = space.db.add(
|
|
133
|
-
|
|
134
|
+
Markdown.makeDocument({
|
|
134
135
|
name: 'Test',
|
|
135
|
-
|
|
136
|
-
// Create links.
|
|
137
136
|
content: document.replaceAll(/\[(\w+)\]/g, (_, label) => {
|
|
138
137
|
const obj = space.db.add(Obj.make(TestItem, { title: label, description: faker.lorem.paragraph() }));
|
|
139
138
|
const dxn = Ref.make(obj).dxn.toString();
|
|
@@ -157,7 +156,8 @@ const DefaultStory = ({ document, chat }: { document: string; chat: string }) =>
|
|
|
157
156
|
);
|
|
158
157
|
};
|
|
159
158
|
|
|
160
|
-
|
|
159
|
+
// TODO(burdon): Make consistent.
|
|
160
|
+
const storybook: Meta<typeof DefaultStory> = {
|
|
161
161
|
title: 'plugins/plugin-markdown/Suggestions',
|
|
162
162
|
render: DefaultStory,
|
|
163
163
|
decorators: [
|
|
@@ -166,8 +166,8 @@ const meta: Meta<typeof DefaultStory> = {
|
|
|
166
166
|
ThemePlugin({ tx: defaultTx }),
|
|
167
167
|
StorybookLayoutPlugin(),
|
|
168
168
|
ClientPlugin({
|
|
169
|
-
types: [
|
|
170
|
-
onClientInitialized: async (
|
|
169
|
+
types: [Markdown.Document, TestItem],
|
|
170
|
+
onClientInitialized: async ({ client }) => {
|
|
171
171
|
await client.halo.createIdentity();
|
|
172
172
|
},
|
|
173
173
|
}),
|
|
@@ -187,7 +187,7 @@ const meta: Meta<typeof DefaultStory> = {
|
|
|
187
187
|
},
|
|
188
188
|
};
|
|
189
189
|
|
|
190
|
-
export default
|
|
190
|
+
export default storybook;
|
|
191
191
|
|
|
192
192
|
type Story = Meta<typeof DefaultStory>;
|
|
193
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;
|