@dxos/plugin-markdown 0.8.4-main.67995b8 → 0.8.4-main.c4373fc
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/lib/browser/{MarkdownPreview-7VG3K24R.mjs → MarkdownCard-ZHTH6EVA.mjs} +13 -13
- package/dist/lib/browser/MarkdownCard-ZHTH6EVA.mjs.map +7 -0
- package/dist/lib/browser/{MarkdownContainer-NNBPE6A5.mjs → MarkdownContainer-XDYFBDCI.mjs} +281 -310
- package/dist/lib/browser/MarkdownContainer-XDYFBDCI.mjs.map +7 -0
- package/dist/lib/browser/{anchor-sort-Z7JQA7RL.mjs → anchor-sort-53E7TJGF.mjs} +5 -5
- package/dist/lib/browser/{anchor-sort-Z7JQA7RL.mjs.map → anchor-sort-53E7TJGF.mjs.map} +1 -1
- package/dist/lib/browser/{app-graph-serializer-ZT5OVF5G.mjs → app-graph-serializer-IEPNJZBR.mjs} +9 -10
- package/dist/lib/browser/app-graph-serializer-IEPNJZBR.mjs.map +7 -0
- package/dist/lib/browser/blueprint-definition-XDLVVSUN.mjs +11 -0
- package/dist/lib/browser/blueprint-definition-XDLVVSUN.mjs.map +7 -0
- package/dist/lib/browser/chunk-EVQGTH3P.mjs +22 -0
- package/dist/lib/browser/chunk-EVQGTH3P.mjs.map +7 -0
- package/dist/lib/browser/{chunk-K7ZFMSC4.mjs → chunk-NGXGBWSS.mjs} +4 -3
- package/dist/lib/browser/chunk-NGXGBWSS.mjs.map +7 -0
- package/dist/lib/browser/{chunk-ZGY3DYC2.mjs → chunk-ODB2PTBP.mjs} +2 -4
- package/dist/lib/browser/{chunk-ZGY3DYC2.mjs.map → chunk-ODB2PTBP.mjs.map} +3 -3
- package/dist/lib/browser/{chunk-CD4E4K7J.mjs → chunk-OY6CGPOO.mjs} +2 -2
- package/dist/lib/browser/{chunk-CD4E4K7J.mjs.map → chunk-OY6CGPOO.mjs.map} +1 -1
- package/dist/lib/browser/{chunk-YHMGUSO7.mjs → chunk-PMBWHKDI.mjs} +10 -12
- package/dist/lib/browser/chunk-PMBWHKDI.mjs.map +7 -0
- package/dist/lib/browser/chunk-VZU7BRGW.mjs +106 -0
- package/dist/lib/browser/chunk-VZU7BRGW.mjs.map +7 -0
- package/dist/lib/browser/{chunk-VMX5SDGW.mjs → chunk-XYQDM6PM.mjs} +2 -2
- package/dist/lib/browser/index.mjs +29 -18
- package/dist/lib/browser/index.mjs.map +3 -3
- package/dist/lib/browser/{intent-resolver-EBEF7WEI.mjs → intent-resolver-66ZUQ6JC.mjs} +20 -18
- package/dist/lib/browser/intent-resolver-66ZUQ6JC.mjs.map +7 -0
- package/dist/lib/browser/meta.json +1 -1
- package/dist/lib/browser/{react-surface-ZPMZT4VU.mjs → react-surface-ONX5RNFM.mjs} +40 -33
- package/dist/lib/browser/react-surface-ONX5RNFM.mjs.map +7 -0
- package/dist/lib/browser/{settings-MBDK4TWE.mjs → settings-HXM36BCZ.mjs} +5 -5
- package/dist/lib/browser/{settings-MBDK4TWE.mjs.map → settings-HXM36BCZ.mjs.map} +1 -1
- package/dist/lib/browser/{state-ZA6PZPUI.mjs → state-6QODXCSZ.mjs} +5 -5
- package/dist/lib/browser/state-6QODXCSZ.mjs.map +7 -0
- package/dist/lib/browser/toolkit-73U3A7SD.mjs +76 -0
- package/dist/lib/browser/toolkit-73U3A7SD.mjs.map +7 -0
- package/dist/lib/browser/types/index.mjs +2 -2
- package/dist/lib/node-esm/{MarkdownPreview-UVWR2YK3.mjs → MarkdownCard-MEA4QAAI.mjs} +13 -13
- package/dist/lib/node-esm/MarkdownCard-MEA4QAAI.mjs.map +7 -0
- package/dist/lib/node-esm/{MarkdownContainer-Q6UO7DKT.mjs → MarkdownContainer-7GYMOJVT.mjs} +281 -310
- package/dist/lib/node-esm/MarkdownContainer-7GYMOJVT.mjs.map +7 -0
- package/dist/lib/node-esm/{anchor-sort-R6AAKYNG.mjs → anchor-sort-V2FWEYDN.mjs} +5 -5
- package/dist/lib/node-esm/{anchor-sort-R6AAKYNG.mjs.map → anchor-sort-V2FWEYDN.mjs.map} +1 -1
- package/dist/lib/node-esm/{app-graph-serializer-X4M5QEI6.mjs → app-graph-serializer-HIN4NMUG.mjs} +9 -10
- package/dist/lib/node-esm/app-graph-serializer-HIN4NMUG.mjs.map +7 -0
- package/dist/lib/node-esm/blueprint-definition-PDXZ67UQ.mjs +12 -0
- package/dist/lib/node-esm/blueprint-definition-PDXZ67UQ.mjs.map +7 -0
- package/dist/lib/node-esm/{chunk-6GCOJS4Y.mjs → chunk-35WAARP4.mjs} +10 -12
- package/dist/lib/node-esm/chunk-35WAARP4.mjs.map +7 -0
- package/dist/lib/node-esm/{chunk-B3J2M4YL.mjs → chunk-CB2R4YIY.mjs} +2 -2
- package/dist/lib/node-esm/{chunk-B3J2M4YL.mjs.map → chunk-CB2R4YIY.mjs.map} +1 -1
- package/dist/lib/node-esm/{chunk-LZK3TLKM.mjs → chunk-IOC54NCF.mjs} +2 -2
- package/dist/lib/node-esm/{chunk-RCIXKCVG.mjs → chunk-VCG2U522.mjs} +2 -4
- package/dist/lib/node-esm/{chunk-RCIXKCVG.mjs.map → chunk-VCG2U522.mjs.map} +3 -3
- package/dist/lib/node-esm/chunk-VELFUWUH.mjs +107 -0
- package/dist/lib/node-esm/chunk-VELFUWUH.mjs.map +7 -0
- package/dist/lib/node-esm/chunk-W4XXBX33.mjs +24 -0
- package/dist/lib/node-esm/chunk-W4XXBX33.mjs.map +7 -0
- package/dist/lib/node-esm/{chunk-YGNVDYMB.mjs → chunk-YGSNWTGP.mjs} +4 -3
- package/dist/lib/node-esm/chunk-YGSNWTGP.mjs.map +7 -0
- package/dist/lib/node-esm/index.mjs +29 -18
- package/dist/lib/node-esm/index.mjs.map +3 -3
- package/dist/lib/node-esm/{intent-resolver-L2UGZ72W.mjs → intent-resolver-TNRIFHNH.mjs} +20 -18
- package/dist/lib/node-esm/intent-resolver-TNRIFHNH.mjs.map +7 -0
- package/dist/lib/node-esm/meta.json +1 -1
- package/dist/lib/node-esm/{react-surface-3JJSTTQP.mjs → react-surface-X2GV6WQH.mjs} +40 -33
- package/dist/lib/node-esm/react-surface-X2GV6WQH.mjs.map +7 -0
- package/dist/lib/node-esm/{settings-LBDWWPZJ.mjs → settings-KPLQ5ONI.mjs} +5 -5
- package/dist/lib/node-esm/{settings-LBDWWPZJ.mjs.map → settings-KPLQ5ONI.mjs.map} +1 -1
- package/dist/lib/node-esm/{state-UIHO2SFZ.mjs → state-W3PECOJX.mjs} +5 -5
- package/dist/lib/node-esm/state-W3PECOJX.mjs.map +7 -0
- package/dist/lib/node-esm/toolkit-GUBDYF72.mjs +77 -0
- package/dist/lib/node-esm/toolkit-GUBDYF72.mjs.map +7 -0
- package/dist/lib/node-esm/types/index.mjs +2 -2
- package/dist/types/src/MarkdownPlugin.d.ts +1 -1
- package/dist/types/src/MarkdownPlugin.d.ts.map +1 -1
- package/dist/types/src/capabilities/anchor-sort.d.ts +2 -2
- package/dist/types/src/capabilities/app-graph-serializer.d.ts +1 -1
- package/dist/types/src/capabilities/app-graph-serializer.d.ts.map +1 -1
- package/dist/types/src/capabilities/artifact-definition.d.ts +1 -9
- package/dist/types/src/capabilities/artifact-definition.d.ts.map +1 -1
- package/dist/types/src/capabilities/blueprint-definition.d.ts +5 -0
- package/dist/types/src/capabilities/blueprint-definition.d.ts.map +1 -0
- package/dist/types/src/capabilities/capabilities.d.ts +1 -1
- package/dist/types/src/capabilities/capabilities.d.ts.map +1 -1
- package/dist/types/src/capabilities/index.d.ts +12 -10
- package/dist/types/src/capabilities/index.d.ts.map +1 -1
- package/dist/types/src/capabilities/intent-resolver.d.ts +1 -1
- package/dist/types/src/capabilities/intent-resolver.d.ts.map +1 -1
- package/dist/types/src/capabilities/react-surface.d.ts +1 -1
- package/dist/types/src/capabilities/react-surface.d.ts.map +1 -1
- package/dist/types/src/capabilities/settings.d.ts +1 -1
- package/dist/types/src/capabilities/state.d.ts +2 -2
- package/dist/types/src/capabilities/state.d.ts.map +1 -1
- package/dist/types/src/capabilities/toolkit.d.ts +4 -0
- package/dist/types/src/capabilities/toolkit.d.ts.map +1 -0
- package/dist/types/src/components/MarkdownCard/MarkdownCard.d.ts +7 -0
- package/dist/types/src/components/MarkdownCard/MarkdownCard.d.ts.map +1 -0
- package/dist/types/src/components/MarkdownCard/MarkdownCard.stories.d.ts +9 -0
- package/dist/types/src/components/MarkdownCard/MarkdownCard.stories.d.ts.map +1 -0
- package/dist/types/src/components/MarkdownCard/index.d.ts +4 -0
- package/dist/types/src/components/MarkdownCard/index.d.ts.map +1 -0
- package/dist/types/src/components/MarkdownContainer.d.ts +1 -1
- package/dist/types/src/components/MarkdownContainer.d.ts.map +1 -1
- package/dist/types/src/components/MarkdownContainer.stories.d.ts +51 -5
- package/dist/types/src/components/MarkdownContainer.stories.d.ts.map +1 -1
- package/dist/types/src/components/MarkdownEditor/MarkdownEditor.d.ts +1 -1
- package/dist/types/src/components/MarkdownEditor/MarkdownEditor.d.ts.map +1 -1
- package/dist/types/src/components/MarkdownEditor/MarkdownEditor.stories.d.ts +111 -13
- package/dist/types/src/components/MarkdownEditor/MarkdownEditor.stories.d.ts.map +1 -1
- package/dist/types/src/components/MarkdownSettings/MarkdownSettings.d.ts.map +1 -1
- package/dist/types/src/components/Suggestions.stories.d.ts +1 -2
- package/dist/types/src/components/Suggestions.stories.d.ts.map +1 -1
- package/dist/types/src/components/Toolbar.stories.d.ts +45 -8
- package/dist/types/src/components/Toolbar.stories.d.ts.map +1 -1
- package/dist/types/src/components/index.d.ts +1 -1
- package/dist/types/src/components/index.d.ts.map +1 -1
- package/dist/types/src/extensions.d.ts +0 -2
- package/dist/types/src/extensions.d.ts.map +1 -1
- package/dist/types/src/functions/diff.d.ts +6 -0
- package/dist/types/src/functions/diff.d.ts.map +1 -0
- package/dist/types/src/functions/index.d.ts +3 -0
- package/dist/types/src/functions/index.d.ts.map +1 -0
- package/dist/types/src/functions/open.d.ts +7 -0
- package/dist/types/src/functions/open.d.ts.map +1 -0
- package/dist/types/src/hooks/useSelectCurrentThread.d.ts +1 -1
- package/dist/types/src/hooks/useSelectCurrentThread.d.ts.map +1 -1
- package/dist/types/src/index.d.ts +2 -1
- package/dist/types/src/index.d.ts.map +1 -1
- package/dist/types/src/meta.d.ts +0 -1
- package/dist/types/src/meta.d.ts.map +1 -1
- package/dist/types/src/translations.d.ts +1 -0
- package/dist/types/src/translations.d.ts.map +1 -1
- package/dist/types/src/types/Markdown.d.ts +5 -5
- package/dist/types/src/types/Markdown.d.ts.map +1 -1
- package/dist/types/src/types/MarkdownAction.d.ts +5 -14
- package/dist/types/src/types/MarkdownAction.d.ts.map +1 -1
- package/dist/types/src/types/types.d.ts.map +1 -1
- package/dist/types/tsconfig.tsbuildinfo +1 -1
- package/package.json +59 -56
- package/src/MarkdownPlugin.tsx +102 -94
- package/src/capabilities/app-graph-serializer.ts +4 -4
- package/src/capabilities/artifact-definition.ts +15 -19
- package/src/capabilities/blueprint-definition.ts +39 -0
- package/src/capabilities/capabilities.ts +1 -1
- package/src/capabilities/index.ts +3 -1
- package/src/capabilities/intent-resolver.ts +14 -13
- package/src/capabilities/react-surface.tsx +5 -4
- package/src/capabilities/state.ts +3 -2
- package/src/capabilities/toolkit.ts +49 -0
- package/src/components/{MarkdownPreview/MarkdownPreview.stories.tsx → MarkdownCard/MarkdownCard.stories.tsx} +14 -15
- package/src/components/{MarkdownPreview/MarkdownPreview.tsx → MarkdownCard/MarkdownCard.tsx} +6 -4
- package/src/components/MarkdownCard/index.ts +9 -0
- package/src/components/MarkdownContainer.stories.tsx +47 -38
- package/src/components/MarkdownContainer.tsx +16 -13
- package/src/components/MarkdownEditor/MarkdownEditor.stories.tsx +21 -17
- package/src/components/MarkdownEditor/MarkdownEditor.tsx +36 -36
- package/src/components/MarkdownSettings/MarkdownSettings.tsx +77 -74
- package/src/components/Suggestions.stories.tsx +42 -41
- package/src/components/Toolbar.stories.tsx +23 -17
- package/src/components/index.ts +1 -1
- package/src/extensions.tsx +10 -38
- package/src/functions/diff.ts +37 -0
- package/src/functions/index.ts +6 -0
- package/src/functions/open.ts +32 -0
- package/src/hooks/useSelectCurrentThread.tsx +3 -3
- package/src/index.ts +3 -1
- package/src/meta.ts +0 -3
- package/src/translations.ts +1 -0
- package/src/types/Markdown.ts +4 -3
- package/src/types/MarkdownAction.ts +5 -6
- package/src/types/types.ts +1 -0
- package/dist/lib/browser/MarkdownContainer-NNBPE6A5.mjs.map +0 -7
- package/dist/lib/browser/MarkdownPreview-7VG3K24R.mjs.map +0 -7
- package/dist/lib/browser/app-graph-serializer-ZT5OVF5G.mjs.map +0 -7
- package/dist/lib/browser/artifact-definition-7VNP5PCP.mjs +0 -145
- package/dist/lib/browser/artifact-definition-7VNP5PCP.mjs.map +0 -7
- package/dist/lib/browser/chunk-K7ZFMSC4.mjs.map +0 -7
- package/dist/lib/browser/chunk-VCUKIILA.mjs +0 -20
- package/dist/lib/browser/chunk-VCUKIILA.mjs.map +0 -7
- package/dist/lib/browser/chunk-YHMGUSO7.mjs.map +0 -7
- package/dist/lib/browser/intent-resolver-EBEF7WEI.mjs.map +0 -7
- package/dist/lib/browser/react-surface-ZPMZT4VU.mjs.map +0 -7
- package/dist/lib/browser/state-ZA6PZPUI.mjs.map +0 -7
- package/dist/lib/node-esm/MarkdownContainer-Q6UO7DKT.mjs.map +0 -7
- package/dist/lib/node-esm/MarkdownPreview-UVWR2YK3.mjs.map +0 -7
- package/dist/lib/node-esm/app-graph-serializer-X4M5QEI6.mjs.map +0 -7
- package/dist/lib/node-esm/artifact-definition-IRIILD7S.mjs +0 -146
- package/dist/lib/node-esm/artifact-definition-IRIILD7S.mjs.map +0 -7
- package/dist/lib/node-esm/chunk-6GCOJS4Y.mjs.map +0 -7
- package/dist/lib/node-esm/chunk-A7LLVI34.mjs +0 -22
- package/dist/lib/node-esm/chunk-A7LLVI34.mjs.map +0 -7
- package/dist/lib/node-esm/chunk-YGNVDYMB.mjs.map +0 -7
- package/dist/lib/node-esm/intent-resolver-L2UGZ72W.mjs.map +0 -7
- package/dist/lib/node-esm/react-surface-3JJSTTQP.mjs.map +0 -7
- package/dist/lib/node-esm/state-UIHO2SFZ.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 -10
- 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/src/components/MarkdownPreview/index.ts +0 -9
- /package/dist/lib/browser/{chunk-VMX5SDGW.mjs.map → chunk-XYQDM6PM.mjs.map} +0 -0
- /package/dist/lib/node-esm/{chunk-LZK3TLKM.mjs.map → chunk-IOC54NCF.mjs.map} +0 -0
|
@@ -6,7 +6,7 @@ import React from 'react';
|
|
|
6
6
|
|
|
7
7
|
import { Input, Select, useTranslation } from '@dxos/react-ui';
|
|
8
8
|
import { type EditorInputMode, EditorInputModes, type EditorViewMode, EditorViewModes } from '@dxos/react-ui-editor';
|
|
9
|
-
import {
|
|
9
|
+
import { ControlGroup, ControlItemInput, ControlPage, ControlSection } from '@dxos/react-ui-form';
|
|
10
10
|
|
|
11
11
|
import { meta } from '../../meta';
|
|
12
12
|
import { type Markdown } from '../../types';
|
|
@@ -16,90 +16,93 @@ export const MarkdownSettings = ({ settings }: { settings: Markdown.Settings })
|
|
|
16
16
|
|
|
17
17
|
// TODO(wittjosiah): Add skill test confirmation for entering vim mode.
|
|
18
18
|
return (
|
|
19
|
-
<
|
|
20
|
-
<
|
|
21
|
-
<
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
<Select.
|
|
31
|
-
|
|
32
|
-
<Select.
|
|
33
|
-
{
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
19
|
+
<ControlPage>
|
|
20
|
+
<ControlSection title={t('settings title', { ns: meta.id })}>
|
|
21
|
+
<ControlGroup>
|
|
22
|
+
<ControlItemInput title={t('default view mode label')}>
|
|
23
|
+
<Select.Root
|
|
24
|
+
value={settings.defaultViewMode}
|
|
25
|
+
onValueChange={(value) => {
|
|
26
|
+
settings.defaultViewMode = value as EditorViewMode;
|
|
27
|
+
}}
|
|
28
|
+
>
|
|
29
|
+
<Select.TriggerButton />
|
|
30
|
+
<Select.Portal>
|
|
31
|
+
<Select.Content>
|
|
32
|
+
<Select.Viewport>
|
|
33
|
+
{EditorViewModes.map((mode) => (
|
|
34
|
+
<Select.Option key={mode} value={mode}>
|
|
35
|
+
{t(`${mode} mode label`, { ns: 'react-ui-editor' })}
|
|
36
|
+
</Select.Option>
|
|
37
|
+
))}
|
|
38
|
+
</Select.Viewport>
|
|
39
|
+
<Select.Arrow />
|
|
40
|
+
</Select.Content>
|
|
41
|
+
</Select.Portal>
|
|
42
|
+
</Select.Root>
|
|
43
|
+
</ControlItemInput>
|
|
41
44
|
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
45
|
+
<ControlItemInput title={t('editor input mode label')}>
|
|
46
|
+
<Select.Root
|
|
47
|
+
value={settings.editorInputMode ?? 'default'}
|
|
48
|
+
onValueChange={(value) => {
|
|
49
|
+
settings.editorInputMode = value as EditorInputMode;
|
|
50
|
+
}}
|
|
51
|
+
>
|
|
52
|
+
<Select.TriggerButton placeholder={t('select editor input mode placeholder')} />
|
|
53
|
+
<Select.Portal>
|
|
54
|
+
<Select.Content>
|
|
55
|
+
<Select.Viewport>
|
|
56
|
+
{EditorInputModes.map((mode) => (
|
|
57
|
+
<Select.Option key={mode} value={mode}>
|
|
58
|
+
{t(`settings editor input mode ${mode} label`)}
|
|
59
|
+
</Select.Option>
|
|
60
|
+
))}
|
|
61
|
+
</Select.Viewport>
|
|
62
|
+
<Select.Arrow />
|
|
63
|
+
</Select.Content>
|
|
64
|
+
</Select.Portal>
|
|
65
|
+
</Select.Root>
|
|
66
|
+
</ControlItemInput>
|
|
63
67
|
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
68
|
+
<ControlItemInput title={t('settings toolbar label')}>
|
|
69
|
+
<Input.Switch checked={settings.toolbar} onCheckedChange={(checked) => (settings.toolbar = !!checked)} />
|
|
70
|
+
</ControlItemInput>
|
|
67
71
|
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
72
|
+
<ControlItemInput title={t('settings numbered headings label')}>
|
|
73
|
+
<Input.Switch
|
|
74
|
+
checked={settings.numberedHeadings}
|
|
75
|
+
onCheckedChange={(checked) => (settings.numberedHeadings = !!checked)}
|
|
76
|
+
/>
|
|
77
|
+
</ControlItemInput>
|
|
74
78
|
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
79
|
+
<ControlItemInput title={t('settings folding label')}>
|
|
80
|
+
<Input.Switch checked={settings.folding} onCheckedChange={(checked) => (settings.folding = !!checked)} />
|
|
81
|
+
</ControlItemInput>
|
|
78
82
|
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
83
|
+
<ControlItemInput title={t('settings experimental label')}>
|
|
84
|
+
<Input.Switch
|
|
85
|
+
checked={settings.experimental}
|
|
86
|
+
onCheckedChange={(checked) => (settings.experimental = !!checked)}
|
|
87
|
+
/>
|
|
88
|
+
</ControlItemInput>
|
|
85
89
|
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
90
|
+
<ControlItemInput title={t('settings debug label')}>
|
|
91
|
+
<Input.Switch checked={settings.debug} onCheckedChange={(checked) => (settings.debug = !!checked)} />
|
|
92
|
+
</ControlItemInput>
|
|
93
|
+
|
|
94
|
+
{settings.debug && (
|
|
95
|
+
<ControlItemInput title={t('settings debug textarea label', { ns: meta.id })}>
|
|
91
96
|
<Input.TextArea
|
|
92
97
|
rows={5}
|
|
93
98
|
value={settings.typewriter}
|
|
94
99
|
onChange={({ target: { value } }) => (settings.typewriter = value)}
|
|
95
100
|
placeholder={t('settings debug placeholder')}
|
|
96
101
|
/>
|
|
97
|
-
</
|
|
98
|
-
)
|
|
99
|
-
|
|
100
|
-
>
|
|
101
|
-
|
|
102
|
-
</DeprecatedFormInput>
|
|
103
|
-
</DeprecatedFormContainer>
|
|
102
|
+
</ControlItemInput>
|
|
103
|
+
)}
|
|
104
|
+
</ControlGroup>
|
|
105
|
+
</ControlSection>
|
|
106
|
+
</ControlPage>
|
|
104
107
|
);
|
|
105
108
|
};
|
|
@@ -2,27 +2,19 @@
|
|
|
2
2
|
// Copyright 2023 DXOS.org
|
|
3
3
|
//
|
|
4
4
|
|
|
5
|
-
import '@dxos-theme';
|
|
6
|
-
|
|
7
5
|
import { type Meta } from '@storybook/react-vite';
|
|
8
|
-
import
|
|
6
|
+
import * as Function from 'effect/Function';
|
|
7
|
+
import * as Match from 'effect/Match';
|
|
8
|
+
import * as Option from 'effect/Option';
|
|
9
|
+
import * as Schema from 'effect/Schema';
|
|
9
10
|
import React, { type FC, useEffect, useMemo, useState } from 'react';
|
|
10
11
|
|
|
11
|
-
import {
|
|
12
|
-
Capabilities,
|
|
13
|
-
CollaborationActions,
|
|
14
|
-
IntentPlugin,
|
|
15
|
-
SettingsPlugin,
|
|
16
|
-
contributes,
|
|
17
|
-
createIntent,
|
|
18
|
-
useCapability,
|
|
19
|
-
useIntentDispatcher,
|
|
20
|
-
} from '@dxos/app-framework';
|
|
12
|
+
import { Capabilities, IntentPlugin, SettingsPlugin, useCapability, useIntentDispatcher } from '@dxos/app-framework';
|
|
21
13
|
import { withPluginManager } from '@dxos/app-framework/testing';
|
|
22
14
|
import { Obj, Ref, Type } from '@dxos/echo';
|
|
23
15
|
import { invariant } from '@dxos/invariant';
|
|
24
|
-
import { DXN } from '@dxos/keys';
|
|
25
16
|
import { ClientPlugin } from '@dxos/plugin-client';
|
|
17
|
+
import { GraphPlugin } from '@dxos/plugin-graph';
|
|
26
18
|
import { PreviewPlugin } from '@dxos/plugin-preview';
|
|
27
19
|
import { SpacePlugin } from '@dxos/plugin-space';
|
|
28
20
|
import { StorybookLayoutPlugin } from '@dxos/plugin-storybook-layout';
|
|
@@ -30,19 +22,21 @@ import { ThemePlugin } from '@dxos/plugin-theme';
|
|
|
30
22
|
import { faker } from '@dxos/random';
|
|
31
23
|
import { createDocAccessor, fullyQualifiedId, toCursorRange, useQueue, useSpace } from '@dxos/react-client/echo';
|
|
32
24
|
import { IconButton, Toolbar } from '@dxos/react-ui';
|
|
33
|
-
import {
|
|
25
|
+
import { withTheme } from '@dxos/react-ui/testing';
|
|
26
|
+
import { type EditorSelection, type Range, useTextEditor } from '@dxos/react-ui-editor';
|
|
34
27
|
import { StackItem } from '@dxos/react-ui-stack';
|
|
35
28
|
import { defaultTx } from '@dxos/react-ui-theme';
|
|
36
29
|
import { DataType } from '@dxos/schema';
|
|
37
|
-
import {
|
|
30
|
+
import { render } from '@dxos/storybook-utils';
|
|
38
31
|
|
|
39
|
-
import { MarkdownContainer } from './MarkdownContainer';
|
|
40
|
-
import { MarkdownPlugin } from '../MarkdownPlugin';
|
|
41
32
|
import { MarkdownCapabilities } from '../capabilities';
|
|
33
|
+
import { MarkdownPlugin } from '../MarkdownPlugin';
|
|
42
34
|
import { meta } from '../meta';
|
|
43
35
|
import { translations } from '../translations';
|
|
44
36
|
import { Markdown } from '../types';
|
|
45
37
|
|
|
38
|
+
import { MarkdownContainer } from './MarkdownContainer';
|
|
39
|
+
|
|
46
40
|
faker.seed(1);
|
|
47
41
|
|
|
48
42
|
const TestItem = Schema.Struct({
|
|
@@ -85,7 +79,7 @@ const TestChat: FC<{ doc: Markdown.Document; content: string }> = ({ doc, conten
|
|
|
85
79
|
|
|
86
80
|
const text = await doc.content.load();
|
|
87
81
|
const accessor = createDocAccessor(text, ['content']);
|
|
88
|
-
const cursor = pipe(
|
|
82
|
+
const cursor = Function.pipe(
|
|
89
83
|
editorState.getState(fullyQualifiedId(doc))?.selection,
|
|
90
84
|
Option.fromNullable,
|
|
91
85
|
Option.map(selectionToRange),
|
|
@@ -98,14 +92,14 @@ const TestChat: FC<{ doc: Markdown.Document; content: string }> = ({ doc, conten
|
|
|
98
92
|
// const message = deref(ref);
|
|
99
93
|
// }
|
|
100
94
|
|
|
101
|
-
void dispatch(
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
);
|
|
95
|
+
// void dispatch(
|
|
96
|
+
// createIntent(CollaborationActions.InsertContent, {
|
|
97
|
+
// target: doc as any as Type.Expando,
|
|
98
|
+
// object: Ref.fromDXN(new DXN(DXN.kind.QUEUE, [...queue.dxn.parts, message.id])),
|
|
99
|
+
// at: cursor,
|
|
100
|
+
// label: 'Proposal',
|
|
101
|
+
// }),
|
|
102
|
+
// );
|
|
109
103
|
};
|
|
110
104
|
|
|
111
105
|
return (
|
|
@@ -135,7 +129,7 @@ const DefaultStory = ({ document, chat }: { document: string; chat: string }) =>
|
|
|
135
129
|
content: document.replaceAll(/\[(\w+)\]/g, (_, label) => {
|
|
136
130
|
const obj = space.db.add(Obj.make(TestItem, { title: label, description: faker.lorem.paragraph() }));
|
|
137
131
|
const dxn = Ref.make(obj).dxn.toString();
|
|
138
|
-
return `[${label}]
|
|
132
|
+
return `[${label}](${dxn})`;
|
|
139
133
|
}),
|
|
140
134
|
}),
|
|
141
135
|
);
|
|
@@ -144,45 +138,52 @@ const DefaultStory = ({ document, chat }: { document: string; chat: string }) =>
|
|
|
144
138
|
}, [space]);
|
|
145
139
|
|
|
146
140
|
if (!space || !doc) {
|
|
147
|
-
return
|
|
141
|
+
return null;
|
|
148
142
|
}
|
|
149
143
|
|
|
144
|
+
// TODO(burdon): Layout issue.
|
|
150
145
|
return (
|
|
151
|
-
|
|
146
|
+
<div className='grid grid-cols-2 bs-full overflow-hidden'>
|
|
152
147
|
<MarkdownContainer id={doc.id} object={doc} settings={settings} editorStateStore={editorState} />
|
|
153
148
|
<TestChat doc={doc} content={chat} />
|
|
154
|
-
|
|
149
|
+
</div>
|
|
155
150
|
);
|
|
156
151
|
};
|
|
157
152
|
|
|
158
|
-
// TODO(burdon): Make consistent.
|
|
159
153
|
const storybook: Meta<typeof DefaultStory> = {
|
|
160
154
|
title: 'plugins/plugin-markdown/Suggestions',
|
|
161
|
-
render: DefaultStory,
|
|
155
|
+
render: render(DefaultStory),
|
|
162
156
|
decorators: [
|
|
157
|
+
withTheme,
|
|
163
158
|
withPluginManager({
|
|
164
159
|
plugins: [
|
|
165
|
-
ThemePlugin({ tx: defaultTx }),
|
|
166
|
-
StorybookLayoutPlugin(),
|
|
167
160
|
ClientPlugin({
|
|
168
161
|
types: [Markdown.Document, TestItem],
|
|
169
|
-
onClientInitialized: async (
|
|
162
|
+
onClientInitialized: async ({ client }) => {
|
|
170
163
|
await client.halo.createIdentity();
|
|
171
164
|
},
|
|
172
165
|
}),
|
|
173
|
-
SpacePlugin(),
|
|
174
|
-
|
|
166
|
+
SpacePlugin({}),
|
|
167
|
+
GraphPlugin(),
|
|
175
168
|
IntentPlugin(),
|
|
169
|
+
SettingsPlugin(),
|
|
170
|
+
|
|
171
|
+
// UI
|
|
172
|
+
ThemePlugin({ tx: defaultTx }),
|
|
176
173
|
MarkdownPlugin(),
|
|
177
174
|
PreviewPlugin(),
|
|
175
|
+
StorybookLayoutPlugin({}),
|
|
178
176
|
],
|
|
179
|
-
|
|
177
|
+
// TODO(thure): `commandDialog` doesn’t do anything without a `renderDialog` option.
|
|
178
|
+
// capabilities: [contributes(MarkdownCapabilities.Extensions, [() => commandDialog()])],
|
|
180
179
|
}),
|
|
181
|
-
withLayout({ fullscreen: true, classNames: 'grid grid-cols-2' }),
|
|
182
180
|
],
|
|
183
181
|
parameters: {
|
|
182
|
+
layout: 'fullscreen',
|
|
183
|
+
controls: {
|
|
184
|
+
disable: true,
|
|
185
|
+
},
|
|
184
186
|
translations,
|
|
185
|
-
controls: { disable: true },
|
|
186
187
|
},
|
|
187
188
|
};
|
|
188
189
|
|
|
@@ -2,19 +2,20 @@
|
|
|
2
2
|
// Copyright 2024 DXOS.org
|
|
3
3
|
//
|
|
4
4
|
|
|
5
|
-
import '@
|
|
6
|
-
|
|
7
|
-
import { type Meta } from '@storybook/react-vite';
|
|
8
|
-
import React, { type FC, useCallback, useState } from 'react';
|
|
5
|
+
import { type Meta, type StoryObj } from '@storybook/react-vite';
|
|
6
|
+
import React, { useCallback, useState } from 'react';
|
|
9
7
|
|
|
8
|
+
import { createObject } from '@dxos/echo-db';
|
|
10
9
|
import { invariant } from '@dxos/invariant';
|
|
11
10
|
import { PublicKey } from '@dxos/keys';
|
|
12
11
|
import { faker } from '@dxos/random';
|
|
13
12
|
import { createDocAccessor } from '@dxos/react-client/echo';
|
|
14
13
|
import { useThemeContext } from '@dxos/react-ui';
|
|
14
|
+
import { withTheme } from '@dxos/react-ui/testing';
|
|
15
15
|
import {
|
|
16
|
-
EditorToolbar,
|
|
17
16
|
type Comment,
|
|
17
|
+
EditorToolbar,
|
|
18
|
+
type EditorViewMode,
|
|
18
19
|
comments,
|
|
19
20
|
createBasicExtensions,
|
|
20
21
|
createDataExtensions,
|
|
@@ -25,19 +26,21 @@ import {
|
|
|
25
26
|
formattingKeymap,
|
|
26
27
|
translations,
|
|
27
28
|
useComments,
|
|
29
|
+
useEditorToolbarState,
|
|
28
30
|
useFormattingState,
|
|
29
31
|
useTextEditor,
|
|
30
|
-
useEditorToolbarState,
|
|
31
|
-
type EditorViewMode,
|
|
32
32
|
} from '@dxos/react-ui-editor';
|
|
33
33
|
import { DataType } from '@dxos/schema';
|
|
34
|
-
import { withLayout, withTheme } from '@dxos/storybook-utils';
|
|
35
34
|
|
|
36
35
|
faker.seed(101);
|
|
37
36
|
|
|
38
|
-
|
|
37
|
+
type StoryProps = {
|
|
38
|
+
content?: string;
|
|
39
|
+
};
|
|
40
|
+
|
|
41
|
+
const DefaultStory = ({ content = '' }: StoryProps) => {
|
|
39
42
|
const { themeMode } = useThemeContext();
|
|
40
|
-
const [text] = useState(DataType.makeText(content));
|
|
43
|
+
const [text] = useState(createObject(DataType.makeText(content)));
|
|
41
44
|
const toolbarState = useEditorToolbarState({ viewMode: 'preview' });
|
|
42
45
|
const formattingObserver = useFormattingState(toolbarState);
|
|
43
46
|
const { parentRef, view } = useTextEditor(() => {
|
|
@@ -47,7 +50,7 @@ const DefaultStory: FC<{ content?: string }> = ({ content = '' }) => {
|
|
|
47
50
|
extensions: [
|
|
48
51
|
formattingObserver,
|
|
49
52
|
createBasicExtensions({ readOnly: toolbarState.viewMode === 'readonly' }),
|
|
50
|
-
createMarkdownExtensions(
|
|
53
|
+
createMarkdownExtensions(),
|
|
51
54
|
createThemeExtensions({ themeMode, syntaxHighlighting: true, slots: editorSlots }),
|
|
52
55
|
createDataExtensions({ id: text.id, text: createDocAccessor(text, ['content']) }),
|
|
53
56
|
comments({
|
|
@@ -93,19 +96,22 @@ const content = [
|
|
|
93
96
|
'',
|
|
94
97
|
].join('\n');
|
|
95
98
|
|
|
96
|
-
const meta
|
|
99
|
+
const meta = {
|
|
97
100
|
title: 'plugins/plugin-markdown/Toolbar',
|
|
98
|
-
component: EditorToolbar,
|
|
99
|
-
render: DefaultStory
|
|
100
|
-
decorators: [withTheme
|
|
101
|
+
component: EditorToolbar as any,
|
|
102
|
+
render: DefaultStory,
|
|
103
|
+
decorators: [withTheme],
|
|
101
104
|
parameters: {
|
|
105
|
+
layout: 'fullscreen',
|
|
102
106
|
translations,
|
|
103
107
|
},
|
|
104
|
-
}
|
|
108
|
+
} satisfies Meta<typeof DefaultStory>;
|
|
105
109
|
|
|
106
110
|
export default meta;
|
|
107
111
|
|
|
108
|
-
|
|
112
|
+
type Story = StoryObj<typeof meta>;
|
|
113
|
+
|
|
114
|
+
export const Default: Story = {
|
|
109
115
|
args: {
|
|
110
116
|
content,
|
|
111
117
|
},
|
package/src/components/index.ts
CHANGED
|
@@ -7,4 +7,4 @@ import { lazy } from 'react';
|
|
|
7
7
|
export * from './MarkdownSettings';
|
|
8
8
|
|
|
9
9
|
export const MarkdownContainer = lazy(() => import('./MarkdownContainer'));
|
|
10
|
-
export const
|
|
10
|
+
export const MarkdownCard = lazy(() => import('./MarkdownCard'));
|
package/src/extensions.tsx
CHANGED
|
@@ -7,27 +7,30 @@ import React, { type AnchorHTMLAttributes, type ReactNode, useMemo } from 'react
|
|
|
7
7
|
import { createRoot } from 'react-dom/client';
|
|
8
8
|
|
|
9
9
|
import {
|
|
10
|
-
createIntent,
|
|
11
10
|
LayoutAction,
|
|
12
11
|
type PromiseIntentDispatcher,
|
|
12
|
+
createIntent,
|
|
13
13
|
useCapabilities,
|
|
14
14
|
useIntentDispatcher,
|
|
15
15
|
} from '@dxos/app-framework';
|
|
16
16
|
import { debounceAndThrottle } from '@dxos/async';
|
|
17
17
|
import { invariant } from '@dxos/invariant';
|
|
18
|
-
import { createDocAccessor, fullyQualifiedId, getSpace
|
|
18
|
+
import { createDocAccessor, fullyQualifiedId, getSpace } from '@dxos/react-client/echo';
|
|
19
19
|
import { useIdentity } from '@dxos/react-client/halo';
|
|
20
20
|
import { Icon, ThemeProvider } from '@dxos/react-ui';
|
|
21
21
|
import { type SelectionManager } from '@dxos/react-ui-attention';
|
|
22
22
|
import {
|
|
23
|
-
|
|
23
|
+
Cursor,
|
|
24
24
|
type EditorStateStore,
|
|
25
|
+
EditorView,
|
|
25
26
|
type EditorViewMode,
|
|
26
27
|
type Extension,
|
|
27
28
|
InputModeExtensions,
|
|
29
|
+
type PreviewOptions,
|
|
30
|
+
type RenderCallback,
|
|
28
31
|
createDataExtensions,
|
|
29
|
-
autocomplete,
|
|
30
32
|
decorateMarkdown,
|
|
33
|
+
documentId,
|
|
31
34
|
folding,
|
|
32
35
|
formattingKeymap,
|
|
33
36
|
linkTooltip,
|
|
@@ -35,15 +38,10 @@ import {
|
|
|
35
38
|
preview,
|
|
36
39
|
selectionState,
|
|
37
40
|
typewriter,
|
|
38
|
-
type RenderCallback,
|
|
39
|
-
EditorView,
|
|
40
|
-
documentId,
|
|
41
|
-
Cursor,
|
|
42
|
-
type PreviewOptions,
|
|
43
41
|
} from '@dxos/react-ui-editor';
|
|
44
42
|
import { defaultTx } from '@dxos/react-ui-theme';
|
|
45
43
|
import { type DataType } from '@dxos/schema';
|
|
46
|
-
import {
|
|
44
|
+
import { isTruthy } from '@dxos/util';
|
|
47
45
|
|
|
48
46
|
import { MarkdownCapabilities } from './capabilities';
|
|
49
47
|
import { type Markdown } from './types';
|
|
@@ -54,7 +52,6 @@ type ExtensionsOptions = {
|
|
|
54
52
|
id?: string;
|
|
55
53
|
text?: DataType.Text;
|
|
56
54
|
dispatch?: PromiseIntentDispatcher;
|
|
57
|
-
query?: QueryResult<Markdown.Document>;
|
|
58
55
|
settings: Markdown.Settings;
|
|
59
56
|
selectionManager?: SelectionManager;
|
|
60
57
|
viewMode?: EditorViewMode;
|
|
@@ -160,7 +157,7 @@ export const useExtensions = ({
|
|
|
160
157
|
}),
|
|
161
158
|
baseExtensions,
|
|
162
159
|
pluginExtensions,
|
|
163
|
-
].filter(
|
|
160
|
+
].filter(isTruthy),
|
|
164
161
|
[baseExtensions, pluginExtensions, document, document?.content?.target, text, id, space, identity],
|
|
165
162
|
);
|
|
166
163
|
};
|
|
@@ -174,7 +171,6 @@ const createBaseExtensions = ({
|
|
|
174
171
|
dispatch,
|
|
175
172
|
settings,
|
|
176
173
|
selectionManager,
|
|
177
|
-
query,
|
|
178
174
|
viewMode,
|
|
179
175
|
previewOptions,
|
|
180
176
|
}: ExtensionsOptions): Extension[] => {
|
|
@@ -182,7 +178,7 @@ const createBaseExtensions = ({
|
|
|
182
178
|
selectionManager && selectionChange(selectionManager),
|
|
183
179
|
settings.editorInputMode && InputModeExtensions[settings.editorInputMode],
|
|
184
180
|
settings.folding && folding(),
|
|
185
|
-
].filter(
|
|
181
|
+
].filter(isTruthy);
|
|
186
182
|
|
|
187
183
|
//
|
|
188
184
|
// Markdown
|
|
@@ -216,30 +212,6 @@ const createBaseExtensions = ({
|
|
|
216
212
|
);
|
|
217
213
|
}
|
|
218
214
|
|
|
219
|
-
//
|
|
220
|
-
// Autocomplete object links.
|
|
221
|
-
//
|
|
222
|
-
if (query) {
|
|
223
|
-
extensions.push(
|
|
224
|
-
autocomplete({
|
|
225
|
-
onSearch: (text: string) => {
|
|
226
|
-
// TODO(burdon): Specify filter (e.g., stack).
|
|
227
|
-
return query.objects
|
|
228
|
-
.map<AutocompleteResult | undefined>((object) =>
|
|
229
|
-
object.name?.length && object.id !== document?.id
|
|
230
|
-
? {
|
|
231
|
-
label: object.name,
|
|
232
|
-
// TODO(burdon): Factor out URL builder.
|
|
233
|
-
apply: `[${object.name}](/${fullyQualifiedId(object)})`,
|
|
234
|
-
}
|
|
235
|
-
: undefined,
|
|
236
|
-
)
|
|
237
|
-
.filter(isNotFalsy);
|
|
238
|
-
},
|
|
239
|
-
}),
|
|
240
|
-
);
|
|
241
|
-
}
|
|
242
|
-
|
|
243
215
|
if (settings.debug) {
|
|
244
216
|
const items = settings.typewriter?.split(/[,\n]/) ?? '';
|
|
245
217
|
if (items) {
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
//
|
|
2
|
+
// Copyright 2025 DXOS.org
|
|
3
|
+
//
|
|
4
|
+
|
|
5
|
+
import * as Effect from 'effect/Effect';
|
|
6
|
+
import * as Schema from 'effect/Schema';
|
|
7
|
+
|
|
8
|
+
import { ArtifactId, applyDiffs } from '@dxos/assistant';
|
|
9
|
+
import { createDocAccessor } from '@dxos/echo-db';
|
|
10
|
+
import { DatabaseService, defineFunction } from '@dxos/functions';
|
|
11
|
+
import { trim } from '@dxos/util';
|
|
12
|
+
|
|
13
|
+
import { Markdown } from '../types';
|
|
14
|
+
|
|
15
|
+
// TODO(wittjosiah): Reconcile with ThreadAction.AddProposal.
|
|
16
|
+
export default defineFunction({
|
|
17
|
+
key: 'dxos.org/function/markdown/diff',
|
|
18
|
+
name: 'Diff',
|
|
19
|
+
description: trim`
|
|
20
|
+
Applies a set of diffs to the markdown document.
|
|
21
|
+
`,
|
|
22
|
+
inputSchema: Schema.Struct({
|
|
23
|
+
id: ArtifactId.annotations({
|
|
24
|
+
description: 'The ID of the markdown document.',
|
|
25
|
+
}),
|
|
26
|
+
diffs: Schema.Array(Schema.String).annotations({
|
|
27
|
+
description: 'The diffs to apply to the document.',
|
|
28
|
+
}),
|
|
29
|
+
}),
|
|
30
|
+
outputSchema: Schema.Void,
|
|
31
|
+
handler: Effect.fn(function* ({ data: { id, diffs } }) {
|
|
32
|
+
const object = yield* DatabaseService.resolve(ArtifactId.toDXN(id), Markdown.Document);
|
|
33
|
+
const content = yield* Effect.promise(() => object.content.load());
|
|
34
|
+
const accessor = createDocAccessor(content, ['content']);
|
|
35
|
+
applyDiffs(accessor, diffs);
|
|
36
|
+
}),
|
|
37
|
+
});
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
//
|
|
2
|
+
// Copyright 2025 DXOS.org
|
|
3
|
+
//
|
|
4
|
+
|
|
5
|
+
import * as Effect from 'effect/Effect';
|
|
6
|
+
import * as Schema from 'effect/Schema';
|
|
7
|
+
|
|
8
|
+
import { ArtifactId } from '@dxos/assistant';
|
|
9
|
+
import { DatabaseService, defineFunction } from '@dxos/functions';
|
|
10
|
+
|
|
11
|
+
import { Markdown } from '../types';
|
|
12
|
+
|
|
13
|
+
export default defineFunction({
|
|
14
|
+
key: 'dxos.org/function/markdown/open',
|
|
15
|
+
name: 'Open',
|
|
16
|
+
description: 'Opens and reads the contents of a new markdown document.',
|
|
17
|
+
inputSchema: Schema.Struct({
|
|
18
|
+
id: ArtifactId.annotations({
|
|
19
|
+
description: 'The ID of the markdown document.',
|
|
20
|
+
}),
|
|
21
|
+
}),
|
|
22
|
+
outputSchema: Schema.Struct({
|
|
23
|
+
content: Schema.String,
|
|
24
|
+
}),
|
|
25
|
+
handler: Effect.fn(function* ({ data: { id } }) {
|
|
26
|
+
const object = yield* DatabaseService.resolve(ArtifactId.toDXN(id), Markdown.Document);
|
|
27
|
+
const { content } = yield* Effect.promise(() => object.content.load());
|
|
28
|
+
return {
|
|
29
|
+
content,
|
|
30
|
+
};
|
|
31
|
+
}),
|
|
32
|
+
});
|
|
@@ -3,10 +3,10 @@
|
|
|
3
3
|
//
|
|
4
4
|
|
|
5
5
|
import { EditorView } from '@codemirror/view';
|
|
6
|
-
import
|
|
6
|
+
import * as Schema from 'effect/Schema';
|
|
7
7
|
import { useMemo } from 'react';
|
|
8
8
|
|
|
9
|
-
import {
|
|
9
|
+
import { LayoutAction, createResolver, useIntentResolver } from '@dxos/app-framework';
|
|
10
10
|
import { invariant } from '@dxos/invariant';
|
|
11
11
|
import { Cursor, setSelection } from '@dxos/react-ui-editor';
|
|
12
12
|
|
|
@@ -15,7 +15,7 @@ import { meta } from '../meta';
|
|
|
15
15
|
/**
|
|
16
16
|
* Handle scrolling and selection of the current thread in a markdown editor.
|
|
17
17
|
*/
|
|
18
|
-
export const useSelectCurrentThread = (editorView: EditorView |
|
|
18
|
+
export const useSelectCurrentThread = (editorView: EditorView | null, documentId: string) => {
|
|
19
19
|
const scrollIntoViewResolver = useMemo(
|
|
20
20
|
() =>
|
|
21
21
|
createResolver({
|
package/src/index.ts
CHANGED