@dxos/plugin-markdown 0.8.3 → 0.8.4-main.5acf9ea
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/{MarkdownContainer-EFWQ6DHD.mjs → MarkdownContainer-NNBPE6A5.mjs} +37 -28
- package/dist/lib/browser/MarkdownContainer-NNBPE6A5.mjs.map +7 -0
- package/dist/lib/browser/{MarkdownPreview-F4PYFW5L.mjs → MarkdownPreview-7VG3K24R.mjs} +13 -13
- package/dist/lib/browser/MarkdownPreview-7VG3K24R.mjs.map +7 -0
- package/dist/lib/browser/{anchor-sort-BMAN2ABT.mjs → anchor-sort-Z7JQA7RL.mjs} +6 -6
- package/dist/lib/browser/anchor-sort-Z7JQA7RL.mjs.map +7 -0
- package/dist/lib/browser/{app-graph-serializer-EI6TEHRQ.mjs → app-graph-serializer-ZT5OVF5G.mjs} +13 -13
- package/dist/lib/browser/app-graph-serializer-ZT5OVF5G.mjs.map +7 -0
- package/dist/lib/browser/{artifact-definition-FQ2R6KPT.mjs → artifact-definition-7VNP5PCP.mjs} +15 -15
- package/dist/lib/browser/artifact-definition-7VNP5PCP.mjs.map +7 -0
- package/dist/lib/browser/chunk-CD4E4K7J.mjs +16 -0
- package/dist/lib/browser/chunk-CD4E4K7J.mjs.map +7 -0
- package/dist/lib/browser/{chunk-D767LUGU.mjs → chunk-K7ZFMSC4.mjs} +13 -12
- package/dist/lib/browser/chunk-K7ZFMSC4.mjs.map +7 -0
- package/dist/lib/browser/chunk-VCUKIILA.mjs +20 -0
- package/dist/lib/browser/{chunk-LXSRQPEP.mjs → chunk-VMX5SDGW.mjs} +9 -10
- package/dist/lib/browser/chunk-VMX5SDGW.mjs.map +7 -0
- package/dist/lib/browser/chunk-YHMGUSO7.mjs +80 -0
- package/dist/lib/browser/chunk-YHMGUSO7.mjs.map +7 -0
- package/dist/lib/browser/chunk-ZGY3DYC2.mjs +30 -0
- package/dist/lib/browser/chunk-ZGY3DYC2.mjs.map +7 -0
- package/dist/lib/browser/index.mjs +21 -19
- package/dist/lib/browser/index.mjs.map +3 -3
- package/dist/lib/browser/{intent-resolver-6ZOABX2J.mjs → intent-resolver-EBEF7WEI.mjs} +15 -19
- package/dist/lib/browser/intent-resolver-EBEF7WEI.mjs.map +7 -0
- package/dist/lib/browser/meta.json +1 -1
- package/dist/lib/browser/{react-surface-4B5ELMEW.mjs → react-surface-ZPMZT4VU.mjs} +31 -28
- package/dist/lib/browser/react-surface-ZPMZT4VU.mjs.map +7 -0
- package/dist/lib/browser/{settings-PLH54VC7.mjs → settings-MBDK4TWE.mjs} +6 -6
- package/dist/lib/browser/settings-MBDK4TWE.mjs.map +7 -0
- package/dist/lib/browser/{state-KI6PJ6DT.mjs → state-ZA6PZPUI.mjs} +8 -8
- package/dist/lib/browser/state-ZA6PZPUI.mjs.map +7 -0
- package/dist/lib/browser/types/index.mjs +6 -14
- package/dist/lib/node-esm/{MarkdownContainer-O3SGMH4G.mjs → MarkdownContainer-Q6UO7DKT.mjs} +37 -28
- package/dist/lib/node-esm/MarkdownContainer-Q6UO7DKT.mjs.map +7 -0
- package/dist/lib/node-esm/{MarkdownPreview-KFDRV4GC.mjs → MarkdownPreview-UVWR2YK3.mjs} +13 -13
- package/dist/lib/node-esm/MarkdownPreview-UVWR2YK3.mjs.map +7 -0
- package/dist/lib/node-esm/{anchor-sort-BXL7BE67.mjs → anchor-sort-R6AAKYNG.mjs} +6 -6
- package/dist/lib/node-esm/anchor-sort-R6AAKYNG.mjs.map +7 -0
- package/dist/lib/node-esm/{app-graph-serializer-F7DGNF3G.mjs → app-graph-serializer-X4M5QEI6.mjs} +13 -13
- package/dist/lib/node-esm/app-graph-serializer-X4M5QEI6.mjs.map +7 -0
- package/dist/lib/node-esm/{artifact-definition-NQOHB6S5.mjs → artifact-definition-IRIILD7S.mjs} +15 -15
- package/dist/lib/node-esm/artifact-definition-IRIILD7S.mjs.map +7 -0
- package/dist/lib/node-esm/chunk-6GCOJS4Y.mjs +81 -0
- package/dist/lib/node-esm/chunk-6GCOJS4Y.mjs.map +7 -0
- package/dist/lib/node-esm/chunk-A7LLVI34.mjs +22 -0
- package/dist/lib/node-esm/chunk-B3J2M4YL.mjs +17 -0
- package/dist/lib/node-esm/chunk-B3J2M4YL.mjs.map +7 -0
- package/dist/lib/node-esm/{chunk-K26TX5V4.mjs → chunk-LZK3TLKM.mjs} +9 -10
- package/dist/lib/node-esm/chunk-LZK3TLKM.mjs.map +7 -0
- package/dist/lib/node-esm/chunk-RCIXKCVG.mjs +31 -0
- package/dist/lib/node-esm/chunk-RCIXKCVG.mjs.map +7 -0
- package/dist/lib/node-esm/{chunk-BWDDFDJY.mjs → chunk-YGNVDYMB.mjs} +13 -12
- package/dist/lib/node-esm/chunk-YGNVDYMB.mjs.map +7 -0
- package/dist/lib/node-esm/index.mjs +21 -19
- package/dist/lib/node-esm/index.mjs.map +3 -3
- package/dist/lib/node-esm/{intent-resolver-CLMSVF2K.mjs → intent-resolver-L2UGZ72W.mjs} +15 -19
- package/dist/lib/node-esm/intent-resolver-L2UGZ72W.mjs.map +7 -0
- package/dist/lib/node-esm/meta.json +1 -1
- package/dist/lib/node-esm/{react-surface-YHFOQTVO.mjs → react-surface-3JJSTTQP.mjs} +31 -28
- package/dist/lib/node-esm/react-surface-3JJSTTQP.mjs.map +7 -0
- package/dist/lib/node-esm/{settings-SIY33P3F.mjs → settings-LBDWWPZJ.mjs} +6 -6
- package/dist/lib/node-esm/settings-LBDWWPZJ.mjs.map +7 -0
- package/dist/lib/node-esm/{state-LLGVRYKL.mjs → state-UIHO2SFZ.mjs} +8 -8
- package/dist/lib/node-esm/state-UIHO2SFZ.mjs.map +7 -0
- package/dist/lib/node-esm/types/index.mjs +6 -14
- 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/capabilities.d.ts.map +1 -1
- package/dist/types/src/capabilities/index.d.ts +1 -1
- 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/MarkdownContainer.d.ts +5 -5
- package/dist/types/src/components/MarkdownContainer.d.ts.map +1 -1
- package/dist/types/src/components/MarkdownContainer.stories.d.ts +1 -1
- package/dist/types/src/components/MarkdownContainer.stories.d.ts.map +1 -1
- package/dist/types/src/components/MarkdownEditor/MarkdownEditor.d.ts +1 -1
- package/dist/types/src/components/MarkdownEditor/MarkdownEditor.d.ts.map +1 -1
- package/dist/types/src/components/MarkdownEditor/MarkdownEditor.stories.d.ts +1 -1
- package/dist/types/src/components/MarkdownEditor/MarkdownEditor.stories.d.ts.map +1 -1
- package/dist/types/src/components/MarkdownPreview/MarkdownPreview.d.ts +2 -2
- package/dist/types/src/components/MarkdownPreview/MarkdownPreview.d.ts.map +1 -1
- package/dist/types/src/components/MarkdownPreview/MarkdownPreview.stories.d.ts +5 -12
- package/dist/types/src/components/MarkdownPreview/MarkdownPreview.stories.d.ts.map +1 -1
- package/dist/types/src/components/MarkdownSettings/MarkdownSettings.d.ts +2 -2
- package/dist/types/src/components/MarkdownSettings/MarkdownSettings.d.ts.map +1 -1
- package/dist/types/src/components/Suggestions.stories.d.ts +3 -3
- package/dist/types/src/components/Suggestions.stories.d.ts.map +1 -1
- package/dist/types/src/components/Toolbar.stories.d.ts +1 -1
- package/dist/types/src/components/Toolbar.stories.d.ts.map +1 -1
- package/dist/types/src/components/index.d.ts +1 -1
- package/dist/types/src/components/index.d.ts.map +1 -1
- package/dist/types/src/events.d.ts.map +1 -1
- package/dist/types/src/extensions.d.ts +4 -4
- package/dist/types/src/extensions.d.ts.map +1 -1
- package/dist/types/src/index.d.ts.map +1 -1
- package/dist/types/src/meta.d.ts +1 -1
- package/dist/types/src/meta.d.ts.map +1 -1
- package/dist/types/src/translations.d.ts +35 -80
- package/dist/types/src/translations.d.ts.map +1 -1
- package/dist/types/src/types/Markdown.d.ts +43 -0
- package/dist/types/src/types/Markdown.d.ts.map +1 -0
- package/dist/types/src/types/MarkdownAction.d.ts +42 -0
- package/dist/types/src/types/MarkdownAction.d.ts.map +1 -0
- package/dist/types/src/types/index.d.ts +2 -1
- package/dist/types/src/types/index.d.ts.map +1 -1
- package/dist/types/src/types/types.d.ts +4 -59
- package/dist/types/src/types/types.d.ts.map +1 -1
- package/dist/types/src/util.d.ts +12 -3
- package/dist/types/src/util.d.ts.map +1 -1
- package/dist/types/tsconfig.tsbuildinfo +1 -1
- package/package.json +47 -47
- package/src/MarkdownPlugin.tsx +7 -7
- package/src/capabilities/anchor-sort.ts +3 -3
- package/src/capabilities/app-graph-serializer.ts +8 -6
- package/src/capabilities/artifact-definition.ts +8 -8
- package/src/capabilities/capabilities.ts +4 -3
- package/src/capabilities/intent-resolver.ts +5 -11
- package/src/capabilities/react-surface.tsx +18 -17
- package/src/capabilities/settings.ts +3 -3
- package/src/capabilities/state.ts +6 -7
- package/src/components/MarkdownContainer.stories.tsx +7 -10
- package/src/components/MarkdownContainer.tsx +26 -13
- package/src/components/MarkdownEditor/MarkdownEditor.stories.tsx +2 -2
- package/src/components/MarkdownEditor/MarkdownEditor.tsx +3 -3
- package/src/components/MarkdownPreview/MarkdownPreview.stories.tsx +35 -32
- package/src/components/MarkdownPreview/MarkdownPreview.tsx +18 -16
- package/src/components/MarkdownSettings/MarkdownSettings.tsx +4 -4
- package/src/components/Suggestions.stories.tsx +22 -17
- package/src/components/Toolbar.stories.tsx +2 -3
- package/src/events.ts +2 -2
- package/src/extensions.tsx +22 -18
- package/src/hooks/useSelectCurrentThread.tsx +2 -2
- package/src/index.ts +1 -0
- package/src/meta.ts +10 -8
- package/src/translations.ts +9 -7
- package/src/types/Markdown.ts +55 -0
- package/src/types/MarkdownAction.ts +30 -0
- package/src/types/index.ts +2 -1
- package/src/types/types.ts +6 -51
- package/src/util.tsx +20 -6
- package/dist/lib/browser/MarkdownContainer-EFWQ6DHD.mjs.map +0 -7
- package/dist/lib/browser/MarkdownPreview-F4PYFW5L.mjs.map +0 -7
- package/dist/lib/browser/anchor-sort-BMAN2ABT.mjs.map +0 -7
- package/dist/lib/browser/app-graph-serializer-EI6TEHRQ.mjs.map +0 -7
- package/dist/lib/browser/artifact-definition-FQ2R6KPT.mjs.map +0 -7
- package/dist/lib/browser/chunk-354IBM5X.mjs +0 -20
- package/dist/lib/browser/chunk-D767LUGU.mjs.map +0 -7
- package/dist/lib/browser/chunk-JX6XNEHE.mjs +0 -22
- package/dist/lib/browser/chunk-JX6XNEHE.mjs.map +0 -7
- package/dist/lib/browser/chunk-LXSRQPEP.mjs.map +0 -7
- package/dist/lib/browser/chunk-N2D26K6W.mjs +0 -79
- package/dist/lib/browser/chunk-N2D26K6W.mjs.map +0 -7
- package/dist/lib/browser/chunk-QVJETNGS.mjs +0 -16
- package/dist/lib/browser/chunk-QVJETNGS.mjs.map +0 -7
- package/dist/lib/browser/intent-resolver-6ZOABX2J.mjs.map +0 -7
- package/dist/lib/browser/react-surface-4B5ELMEW.mjs.map +0 -7
- package/dist/lib/browser/settings-PLH54VC7.mjs.map +0 -7
- package/dist/lib/browser/state-KI6PJ6DT.mjs.map +0 -7
- package/dist/lib/node/MarkdownContainer-KYGUEZIL.cjs +0 -783
- package/dist/lib/node/MarkdownContainer-KYGUEZIL.cjs.map +0 -7
- package/dist/lib/node/MarkdownPreview-GCJJCXY6.cjs +0 -103
- package/dist/lib/node/MarkdownPreview-GCJJCXY6.cjs.map +0 -7
- package/dist/lib/node/anchor-sort-V3T4SFFI.cjs +0 -48
- package/dist/lib/node/anchor-sort-V3T4SFFI.cjs.map +0 -7
- package/dist/lib/node/app-graph-serializer-E6BXEDEL.cjs +0 -65
- package/dist/lib/node/app-graph-serializer-E6BXEDEL.cjs.map +0 -7
- package/dist/lib/node/artifact-definition-U27MH5SC.cjs +0 -158
- package/dist/lib/node/artifact-definition-U27MH5SC.cjs.map +0 -7
- package/dist/lib/node/chunk-3HHV4MM6.cjs +0 -101
- package/dist/lib/node/chunk-3HHV4MM6.cjs.map +0 -7
- package/dist/lib/node/chunk-CJLYFGPI.cjs +0 -74
- package/dist/lib/node/chunk-CJLYFGPI.cjs.map +0 -7
- package/dist/lib/node/chunk-FU3XZZCO.cjs +0 -58
- package/dist/lib/node/chunk-FU3XZZCO.cjs.map +0 -7
- package/dist/lib/node/chunk-IFYSBQE5.cjs +0 -35
- package/dist/lib/node/chunk-IFYSBQE5.cjs.map +0 -7
- package/dist/lib/node/chunk-LQAC5HL7.cjs +0 -68
- package/dist/lib/node/chunk-LQAC5HL7.cjs.map +0 -7
- package/dist/lib/node/chunk-ZU5OIHCY.cjs +0 -45
- package/dist/lib/node/chunk-ZU5OIHCY.cjs.map +0 -7
- package/dist/lib/node/index.cjs +0 -165
- package/dist/lib/node/index.cjs.map +0 -7
- package/dist/lib/node/intent-resolver-OEFLRNEJ.cjs +0 -77
- package/dist/lib/node/intent-resolver-OEFLRNEJ.cjs.map +0 -7
- package/dist/lib/node/meta.json +0 -1
- package/dist/lib/node/react-surface-456HQ4KZ.cjs +0 -218
- package/dist/lib/node/react-surface-456HQ4KZ.cjs.map +0 -7
- package/dist/lib/node/settings-E3NUTXJ4.cjs +0 -42
- package/dist/lib/node/settings-E3NUTXJ4.cjs.map +0 -7
- package/dist/lib/node/state-KKDRAG7X.cjs +0 -51
- package/dist/lib/node/state-KKDRAG7X.cjs.map +0 -7
- package/dist/lib/node/types/index.cjs +0 -40
- package/dist/lib/node/types/index.cjs.map +0 -7
- package/dist/lib/node-esm/MarkdownContainer-O3SGMH4G.mjs.map +0 -7
- package/dist/lib/node-esm/MarkdownPreview-KFDRV4GC.mjs.map +0 -7
- package/dist/lib/node-esm/anchor-sort-BXL7BE67.mjs.map +0 -7
- package/dist/lib/node-esm/app-graph-serializer-F7DGNF3G.mjs.map +0 -7
- package/dist/lib/node-esm/artifact-definition-NQOHB6S5.mjs.map +0 -7
- package/dist/lib/node-esm/chunk-BWDDFDJY.mjs.map +0 -7
- package/dist/lib/node-esm/chunk-JXXDCSMW.mjs +0 -17
- package/dist/lib/node-esm/chunk-JXXDCSMW.mjs.map +0 -7
- package/dist/lib/node-esm/chunk-K26TX5V4.mjs.map +0 -7
- package/dist/lib/node-esm/chunk-RX63ZNML.mjs +0 -24
- package/dist/lib/node-esm/chunk-RX63ZNML.mjs.map +0 -7
- package/dist/lib/node-esm/chunk-T2Y2BT53.mjs +0 -80
- package/dist/lib/node-esm/chunk-T2Y2BT53.mjs.map +0 -7
- package/dist/lib/node-esm/chunk-YOABAQ7A.mjs +0 -22
- package/dist/lib/node-esm/intent-resolver-CLMSVF2K.mjs.map +0 -7
- package/dist/lib/node-esm/react-surface-YHFOQTVO.mjs.map +0 -7
- package/dist/lib/node-esm/settings-SIY33P3F.mjs.map +0 -7
- package/dist/lib/node-esm/state-LLGVRYKL.mjs.map +0 -7
- package/dist/types/src/types/schema.d.ts +0 -35
- package/dist/types/src/types/schema.d.ts.map +0 -1
- package/src/types/schema.ts +0 -39
- /package/dist/lib/browser/{chunk-354IBM5X.mjs.map → chunk-VCUKIILA.mjs.map} +0 -0
- /package/dist/lib/node-esm/{chunk-YOABAQ7A.mjs.map → chunk-A7LLVI34.mjs.map} +0 -0
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
|
|
5
5
|
import '@dxos-theme';
|
|
6
6
|
|
|
7
|
-
import { type Meta } from '@storybook/react';
|
|
7
|
+
import { type Meta } from '@storybook/react-vite';
|
|
8
8
|
import React, { useMemo } from 'react';
|
|
9
9
|
|
|
10
10
|
import { IntentPlugin } from '@dxos/app-framework';
|
|
@@ -15,7 +15,7 @@ import { automerge, translations as editorTranslations } from '@dxos/react-ui-ed
|
|
|
15
15
|
import { withLayout, withTheme } from '@dxos/storybook-utils';
|
|
16
16
|
|
|
17
17
|
import { MarkdownEditor, type MarkdownEditorProps } from './MarkdownEditor';
|
|
18
|
-
import translations from '../../translations';
|
|
18
|
+
import { translations } from '../../translations';
|
|
19
19
|
|
|
20
20
|
const content = Array.from({ length: 100 }, (_, i) => `Line ${i + 1}`).join('\n');
|
|
21
21
|
|
|
@@ -44,16 +44,16 @@ import { StackItem } from '@dxos/react-ui-stack';
|
|
|
44
44
|
import { isNotFalsy, isNonNullable } 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);
|
|
@@ -4,39 +4,29 @@
|
|
|
4
4
|
|
|
5
5
|
import '@dxos-theme';
|
|
6
6
|
|
|
7
|
-
import { type Meta } from '@storybook/react';
|
|
7
|
+
import { type StoryObj, type Meta } 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
|
-
import {
|
|
16
|
-
import { DataType } from '@dxos/schema';
|
|
14
|
+
import { CardContainer } from '@dxos/react-ui-stack/testing';
|
|
17
15
|
import { withTheme, withLayout } from '@dxos/storybook-utils';
|
|
18
16
|
|
|
19
17
|
import { MarkdownPreview } from './MarkdownPreview';
|
|
20
|
-
import translations from '../../translations';
|
|
18
|
+
import { translations } from '../../translations';
|
|
21
19
|
|
|
22
20
|
faker.seed(1234);
|
|
23
21
|
|
|
24
22
|
const meta: Meta<typeof MarkdownPreview> = {
|
|
25
|
-
title: '
|
|
23
|
+
title: 'Cards/plugin-markdown',
|
|
26
24
|
component: MarkdownPreview,
|
|
27
|
-
render: ({ subject }) => {
|
|
25
|
+
render: ({ role, subject, ...args }) => {
|
|
28
26
|
return (
|
|
29
|
-
<
|
|
30
|
-
<
|
|
31
|
-
|
|
32
|
-
<MarkdownPreview subject={subject} role='popover' />
|
|
33
|
-
</Popover.Viewport>
|
|
34
|
-
<Popover.Arrow />
|
|
35
|
-
</Popover.Content>
|
|
36
|
-
<Popover.Trigger>
|
|
37
|
-
<Icon icon='ph--text-aa--regular' size={5} />
|
|
38
|
-
</Popover.Trigger>
|
|
39
|
-
</Popover.Root>
|
|
27
|
+
<CardContainer icon='ph--text-aa--regular' role={role}>
|
|
28
|
+
<MarkdownPreview role={role} subject={subject} {...args} />
|
|
29
|
+
</CardContainer>
|
|
40
30
|
);
|
|
41
31
|
},
|
|
42
32
|
decorators: [
|
|
@@ -54,21 +44,34 @@ const meta: Meta<typeof MarkdownPreview> = {
|
|
|
54
44
|
|
|
55
45
|
export default meta;
|
|
56
46
|
|
|
57
|
-
|
|
58
|
-
const document = Obj.make(DocumentType, {
|
|
59
|
-
name: faker.lorem.words(3),
|
|
60
|
-
content: Ref.make(
|
|
61
|
-
Obj.make(DataType.Text, {
|
|
62
|
-
content: faker.lorem.paragraphs(3),
|
|
63
|
-
}),
|
|
64
|
-
),
|
|
65
|
-
});
|
|
47
|
+
type Story = StoryObj<typeof meta>;
|
|
66
48
|
|
|
67
|
-
|
|
68
|
-
|
|
49
|
+
export const Popover: Story = {
|
|
50
|
+
args: {
|
|
51
|
+
role: 'card--popover',
|
|
52
|
+
subject: Markdown.makeDocument({
|
|
53
|
+
name: faker.lorem.words(3),
|
|
54
|
+
content: faker.lorem.paragraphs(3),
|
|
55
|
+
}),
|
|
56
|
+
},
|
|
57
|
+
};
|
|
58
|
+
|
|
59
|
+
export const Extrinsic: Story = {
|
|
60
|
+
args: {
|
|
61
|
+
role: 'card--extrinsic',
|
|
62
|
+
subject: Markdown.makeDocument({
|
|
63
|
+
name: faker.lorem.words(3),
|
|
64
|
+
content: faker.lorem.paragraphs(3),
|
|
65
|
+
}),
|
|
66
|
+
},
|
|
67
|
+
};
|
|
69
68
|
|
|
70
|
-
export const
|
|
69
|
+
export const Intrinsic: Story = {
|
|
71
70
|
args: {
|
|
72
|
-
|
|
71
|
+
role: 'card--intrinsic',
|
|
72
|
+
subject: Markdown.makeDocument({
|
|
73
|
+
name: faker.lorem.words(3),
|
|
74
|
+
content: faker.lorem.paragraphs(3),
|
|
75
|
+
}),
|
|
73
76
|
},
|
|
74
77
|
};
|
|
@@ -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,17 @@ 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 const MarkdownPreview = ({ subject, role }: PreviewProps<
|
|
38
|
+
export const MarkdownPreview = ({ subject, role }: PreviewProps<Markdown.Document | DataType.Text>) => {
|
|
39
39
|
const { dispatchPromise: dispatch } = useIntentDispatcher();
|
|
40
|
-
const { t } = useTranslation(
|
|
40
|
+
const { t } = useTranslation(meta.id);
|
|
41
41
|
const snippet = getSnippet(subject, t('fallback abstract'));
|
|
42
42
|
|
|
43
43
|
// TODO(wittjosiah): Factor out so this component isn't dependent on the app framework.
|
|
@@ -57,15 +57,17 @@ export const MarkdownPreview = ({ subject, role }: PreviewProps<DocumentType | D
|
|
|
57
57
|
);
|
|
58
58
|
|
|
59
59
|
return (
|
|
60
|
-
<Card.
|
|
60
|
+
<Card.SurfaceRoot role={role}>
|
|
61
61
|
<Card.Heading>{getTitle(subject, t('fallback title'))}</Card.Heading>
|
|
62
62
|
{snippet && <Card.Text classNames='line-clamp-3 break-words col-span-2'>{snippet}</Card.Text>}
|
|
63
|
-
|
|
64
|
-
<
|
|
65
|
-
<
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
63
|
+
{role === 'card--popover' && (
|
|
64
|
+
<Card.Chrome>
|
|
65
|
+
<Button onClick={handleNavigate}>
|
|
66
|
+
<span className='grow'>{t('navigate to document label')}</span>
|
|
67
|
+
<Icon icon='ph--arrow-right--regular' />
|
|
68
|
+
</Button>
|
|
69
|
+
</Card.Chrome>
|
|
70
|
+
)}
|
|
71
|
+
</Card.SurfaceRoot>
|
|
70
72
|
);
|
|
71
73
|
};
|
|
@@ -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 (
|
|
@@ -4,11 +4,10 @@
|
|
|
4
4
|
|
|
5
5
|
import '@dxos-theme';
|
|
6
6
|
|
|
7
|
-
import { type Meta } from '@storybook/react';
|
|
7
|
+
import { type Meta } from '@storybook/react-vite';
|
|
8
8
|
import { Match, Option, pipe, Schema } 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,
|
|
@@ -34,14 +33,15 @@ import { IconButton, Toolbar } from '@dxos/react-ui';
|
|
|
34
33
|
import { command, type EditorSelection, type Range, 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';
|
|
39
|
+
import { MarkdownContainer } from './MarkdownContainer';
|
|
40
40
|
import { MarkdownPlugin } from '../MarkdownPlugin';
|
|
41
41
|
import { MarkdownCapabilities } from '../capabilities';
|
|
42
|
-
import {
|
|
43
|
-
import translations from '../translations';
|
|
44
|
-
import {
|
|
42
|
+
import { meta } from '../meta';
|
|
43
|
+
import { translations } from '../translations';
|
|
44
|
+
import { Markdown } from '../types';
|
|
45
45
|
|
|
46
46
|
faker.seed(1);
|
|
47
47
|
|
|
@@ -61,19 +61,25 @@ const TestItem = Schema.Struct({
|
|
|
61
61
|
}),
|
|
62
62
|
);
|
|
63
63
|
|
|
64
|
-
const TestChat: FC<{ doc:
|
|
64
|
+
const TestChat: FC<{ doc: Markdown.Document; content: string }> = ({ doc, content }) => {
|
|
65
65
|
const { dispatchPromise: dispatch } = useIntentDispatcher();
|
|
66
66
|
const { parentRef } = useTextEditor({ initialValue: content });
|
|
67
67
|
const { editorState } = useCapability(MarkdownCapabilities.State);
|
|
68
68
|
|
|
69
69
|
const space = useSpace();
|
|
70
70
|
const queueDxn = useMemo(() => space && space.queues.create().dxn, [space]);
|
|
71
|
-
const queue = useQueue<Message>(queueDxn);
|
|
71
|
+
const queue = useQueue<DataType.Message>(queueDxn);
|
|
72
72
|
|
|
73
73
|
const handleInsert = async () => {
|
|
74
74
|
invariant(space);
|
|
75
75
|
invariant(queue);
|
|
76
|
-
await queue.append([
|
|
76
|
+
await queue.append([
|
|
77
|
+
Obj.make(DataType.Message, {
|
|
78
|
+
created: new Date().toISOString(),
|
|
79
|
+
sender: { role: 'assistant' },
|
|
80
|
+
blocks: [{ _tag: 'text', text: 'Hello' }],
|
|
81
|
+
}),
|
|
82
|
+
]);
|
|
77
83
|
const message = queue.objects.at(-1);
|
|
78
84
|
invariant(message);
|
|
79
85
|
|
|
@@ -114,8 +120,8 @@ const TestChat: FC<{ doc: DocumentType; content: string }> = ({ doc, content })
|
|
|
114
120
|
|
|
115
121
|
const DefaultStory = ({ document, chat }: { document: string; chat: string }) => {
|
|
116
122
|
const space = useSpace();
|
|
117
|
-
const [doc, setDoc] = useState<
|
|
118
|
-
const settings = useCapability(Capabilities.SettingsStore).getStore<
|
|
123
|
+
const [doc, setDoc] = useState<Markdown.Document>();
|
|
124
|
+
const settings = useCapability(Capabilities.SettingsStore).getStore<Markdown.Settings>(meta.id)!.value;
|
|
119
125
|
const { editorState } = useCapability(MarkdownCapabilities.State);
|
|
120
126
|
|
|
121
127
|
useEffect(() => {
|
|
@@ -124,10 +130,8 @@ const DefaultStory = ({ document, chat }: { document: string; chat: string }) =>
|
|
|
124
130
|
}
|
|
125
131
|
|
|
126
132
|
const doc = space.db.add(
|
|
127
|
-
|
|
133
|
+
Markdown.makeDocument({
|
|
128
134
|
name: 'Test',
|
|
129
|
-
|
|
130
|
-
// Create links.
|
|
131
135
|
content: document.replaceAll(/\[(\w+)\]/g, (_, label) => {
|
|
132
136
|
const obj = space.db.add(Obj.make(TestItem, { title: label, description: faker.lorem.paragraph() }));
|
|
133
137
|
const dxn = Ref.make(obj).dxn.toString();
|
|
@@ -151,7 +155,8 @@ const DefaultStory = ({ document, chat }: { document: string; chat: string }) =>
|
|
|
151
155
|
);
|
|
152
156
|
};
|
|
153
157
|
|
|
154
|
-
|
|
158
|
+
// TODO(burdon): Make consistent.
|
|
159
|
+
const storybook: Meta<typeof DefaultStory> = {
|
|
155
160
|
title: 'plugins/plugin-markdown/Suggestions',
|
|
156
161
|
render: DefaultStory,
|
|
157
162
|
decorators: [
|
|
@@ -160,7 +165,7 @@ const meta: Meta<typeof DefaultStory> = {
|
|
|
160
165
|
ThemePlugin({ tx: defaultTx }),
|
|
161
166
|
StorybookLayoutPlugin(),
|
|
162
167
|
ClientPlugin({
|
|
163
|
-
types: [
|
|
168
|
+
types: [Markdown.Document, TestItem],
|
|
164
169
|
onClientInitialized: async (_, client) => {
|
|
165
170
|
await client.halo.createIdentity();
|
|
166
171
|
},
|
|
@@ -181,7 +186,7 @@ const meta: Meta<typeof DefaultStory> = {
|
|
|
181
186
|
},
|
|
182
187
|
};
|
|
183
188
|
|
|
184
|
-
export default
|
|
189
|
+
export default storybook;
|
|
185
190
|
|
|
186
191
|
type Story = Meta<typeof DefaultStory>;
|
|
187
192
|
|
|
@@ -4,10 +4,9 @@
|
|
|
4
4
|
|
|
5
5
|
import '@dxos-theme';
|
|
6
6
|
|
|
7
|
-
import { type Meta } from '@storybook/react';
|
|
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';
|
|
@@ -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/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
|
@@ -2,6 +2,7 @@
|
|
|
2
2
|
// Copyright 2023 DXOS.org
|
|
3
3
|
//
|
|
4
4
|
|
|
5
|
+
import { type ViewUpdate } from '@codemirror/view';
|
|
5
6
|
import React, { type AnchorHTMLAttributes, type ReactNode, useMemo } from 'react';
|
|
6
7
|
import { createRoot } from 'react-dom/client';
|
|
7
8
|
|
|
@@ -12,6 +13,7 @@ import {
|
|
|
12
13
|
useCapabilities,
|
|
13
14
|
useIntentDispatcher,
|
|
14
15
|
} from '@dxos/app-framework';
|
|
16
|
+
import { debounceAndThrottle } from '@dxos/async';
|
|
15
17
|
import { invariant } from '@dxos/invariant';
|
|
16
18
|
import { createDocAccessor, fullyQualifiedId, getSpace, type QueryResult } from '@dxos/react-client/echo';
|
|
17
19
|
import { useIdentity } from '@dxos/react-client/halo';
|
|
@@ -44,16 +46,16 @@ import { type DataType } from '@dxos/schema';
|
|
|
44
46
|
import { isNotFalsy } from '@dxos/util';
|
|
45
47
|
|
|
46
48
|
import { MarkdownCapabilities } from './capabilities';
|
|
47
|
-
import { type
|
|
49
|
+
import { type Markdown } from './types';
|
|
48
50
|
import { setFallbackName } from './util';
|
|
49
51
|
|
|
50
52
|
type ExtensionsOptions = {
|
|
51
|
-
document?:
|
|
53
|
+
document?: Markdown.Document;
|
|
52
54
|
id?: string;
|
|
53
55
|
text?: DataType.Text;
|
|
54
56
|
dispatch?: PromiseIntentDispatcher;
|
|
55
|
-
query?: QueryResult<
|
|
56
|
-
settings:
|
|
57
|
+
query?: QueryResult<Markdown.Document>;
|
|
58
|
+
settings: Markdown.Settings;
|
|
57
59
|
selectionManager?: SelectionManager;
|
|
58
60
|
viewMode?: EditorViewMode;
|
|
59
61
|
editorStateStore?: EditorStateStore;
|
|
@@ -249,20 +251,22 @@ const createBaseExtensions = ({
|
|
|
249
251
|
};
|
|
250
252
|
|
|
251
253
|
export const selectionChange = (selectionManager: SelectionManager) => {
|
|
252
|
-
return EditorView.updateListener.of(
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
254
|
+
return EditorView.updateListener.of(
|
|
255
|
+
debounceAndThrottle((update: ViewUpdate) => {
|
|
256
|
+
if (update.selectionSet) {
|
|
257
|
+
const id = update.state.facet(documentId);
|
|
258
|
+
const cursorConverter = update.state.facet(Cursor.converter);
|
|
259
|
+
const selection = update.state.selection;
|
|
260
|
+
const ranges = selection.ranges
|
|
261
|
+
.map((range) => ({
|
|
262
|
+
from: cursorConverter.toCursor(range.from),
|
|
263
|
+
to: cursorConverter.toCursor(range.to),
|
|
264
|
+
}))
|
|
265
|
+
.filter(({ from, to }) => to > from);
|
|
266
|
+
selectionManager.updateMultiRange(id, ranges);
|
|
267
|
+
}
|
|
268
|
+
}, 100),
|
|
269
|
+
);
|
|
266
270
|
};
|
|
267
271
|
|
|
268
272
|
// TODO(burdon): Factor out styles.
|
|
@@ -10,7 +10,7 @@ import { createResolver, LayoutAction, useIntentResolver } from '@dxos/app-frame
|
|
|
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?
|
|
22
|
+
export const not_meta = meta;
|
package/src/translations.ts
CHANGED
|
@@ -2,22 +2,24 @@
|
|
|
2
2
|
// Copyright 2023 DXOS.org
|
|
3
3
|
//
|
|
4
4
|
|
|
5
|
-
import {
|
|
5
|
+
import { type Resource } from '@dxos/react-ui';
|
|
6
6
|
|
|
7
|
-
import {
|
|
8
|
-
import {
|
|
7
|
+
import { meta } from './meta';
|
|
8
|
+
import { Markdown } from './types';
|
|
9
9
|
|
|
10
|
-
export
|
|
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',
|
|
17
17
|
'typename label_other': 'Documents',
|
|
18
18
|
'object name placeholder': 'New document',
|
|
19
|
+
'rename object label': 'Rename document',
|
|
20
|
+
'delete object label': 'Delete document',
|
|
19
21
|
},
|
|
20
|
-
[
|
|
22
|
+
[meta.id]: {
|
|
21
23
|
'plugin name': 'Editor',
|
|
22
24
|
'choose markdown from space dialog title': 'Choose one or more documents to add',
|
|
23
25
|
// TODO(burdon): Style-guide for user-facing text (e.g., hints, questions, capitalization, etc.)
|
|
@@ -43,4 +45,4 @@ export default [
|
|
|
43
45
|
},
|
|
44
46
|
},
|
|
45
47
|
},
|
|
46
|
-
];
|
|
48
|
+
] as const satisfies Resource[];
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
//
|
|
2
|
+
// Copyright 2024 DXOS.org
|
|
3
|
+
//
|
|
4
|
+
|
|
5
|
+
import { Schema } from 'effect';
|
|
6
|
+
|
|
7
|
+
import { Obj, Ref, Type } from '@dxos/echo';
|
|
8
|
+
import { LabelAnnotation } from '@dxos/echo-schema';
|
|
9
|
+
import { EditorInputMode, EditorViewMode } from '@dxos/react-ui-editor/types';
|
|
10
|
+
import { DataType } 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
|
+
);
|
|
26
|
+
|
|
27
|
+
export type Document = Schema.Schema.Type<typeof Document>;
|
|
28
|
+
|
|
29
|
+
/**
|
|
30
|
+
* Document factory.
|
|
31
|
+
*/
|
|
32
|
+
export const makeDocument = ({
|
|
33
|
+
content = '',
|
|
34
|
+
...props
|
|
35
|
+
}: Partial<{ name: string; fallbackName: string; content: string }> = {}) =>
|
|
36
|
+
Obj.make(Document, { ...props, content: Ref.make(DataType.makeText(content)) });
|
|
37
|
+
|
|
38
|
+
/**
|
|
39
|
+
* Plugin settings.
|
|
40
|
+
*/
|
|
41
|
+
export const Settings = Schema.mutable(
|
|
42
|
+
Schema.Struct({
|
|
43
|
+
defaultViewMode: EditorViewMode,
|
|
44
|
+
editorInputMode: Schema.optional(EditorInputMode),
|
|
45
|
+
experimental: Schema.optional(Schema.Boolean),
|
|
46
|
+
debug: Schema.optional(Schema.Boolean),
|
|
47
|
+
toolbar: Schema.optional(Schema.Boolean),
|
|
48
|
+
typewriter: Schema.optional(Schema.String),
|
|
49
|
+
// TODO(burdon): Per document settings.
|
|
50
|
+
numberedHeadings: Schema.optional(Schema.Boolean),
|
|
51
|
+
folding: Schema.optional(Schema.Boolean),
|
|
52
|
+
}),
|
|
53
|
+
);
|
|
54
|
+
|
|
55
|
+
export interface Settings extends Schema.Schema.Type<typeof Settings> {}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
//
|
|
2
|
+
// Copyright 2023 DXOS.org
|
|
3
|
+
//
|
|
4
|
+
|
|
5
|
+
import { Schema } from 'effect';
|
|
6
|
+
|
|
7
|
+
import { Type } from '@dxos/echo';
|
|
8
|
+
import { EditorViewMode } from '@dxos/react-ui-editor/types';
|
|
9
|
+
|
|
10
|
+
import { Document } from './Markdown';
|
|
11
|
+
import { not_meta } from '../meta';
|
|
12
|
+
|
|
13
|
+
export class Create extends Schema.TaggedClass<Create>()(`${not_meta.id}/action/create`, {
|
|
14
|
+
input: Schema.Struct({
|
|
15
|
+
spaceId: Type.SpaceId,
|
|
16
|
+
name: Schema.optional(Schema.String),
|
|
17
|
+
content: Schema.optional(Schema.String),
|
|
18
|
+
}),
|
|
19
|
+
output: Schema.Struct({
|
|
20
|
+
object: Document,
|
|
21
|
+
}),
|
|
22
|
+
}) {}
|
|
23
|
+
|
|
24
|
+
export class SetViewMode extends Schema.TaggedClass<SetViewMode>()(`${not_meta.id}/action/set-view-mode`, {
|
|
25
|
+
input: Schema.Struct({
|
|
26
|
+
id: Schema.String,
|
|
27
|
+
viewMode: EditorViewMode,
|
|
28
|
+
}),
|
|
29
|
+
output: Schema.Void,
|
|
30
|
+
}) {}
|