@dxos/react-ui-editor 0.8.1 → 0.8.2-main.10c050d
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/index.mjs +4152 -2852
- package/dist/lib/browser/index.mjs.map +4 -4
- package/dist/lib/browser/meta.json +1 -1
- package/dist/lib/browser/testing/index.mjs +6 -0
- package/dist/lib/browser/testing/index.mjs.map +7 -0
- package/dist/lib/node/index.cjs +3318 -2009
- package/dist/lib/node/index.cjs.map +4 -4
- package/dist/lib/node/meta.json +1 -1
- package/dist/lib/node/testing/index.cjs +29 -0
- package/dist/lib/node/testing/index.cjs.map +7 -0
- package/dist/lib/node-esm/index.mjs +4152 -2852
- package/dist/lib/node-esm/index.mjs.map +4 -4
- package/dist/lib/node-esm/meta.json +1 -1
- package/dist/lib/node-esm/testing/index.mjs +8 -0
- package/dist/lib/node-esm/testing/index.mjs.map +7 -0
- package/dist/types/src/components/EditorToolbar/EditorToolbar.d.ts +1 -1
- package/dist/types/src/components/EditorToolbar/EditorToolbar.d.ts.map +1 -1
- package/dist/types/src/components/EditorToolbar/blocks.d.ts +4 -3
- package/dist/types/src/components/EditorToolbar/blocks.d.ts.map +1 -1
- package/dist/types/src/components/EditorToolbar/formatting.d.ts +4 -3
- package/dist/types/src/components/EditorToolbar/formatting.d.ts.map +1 -1
- package/dist/types/src/components/EditorToolbar/headings.d.ts +4 -3
- package/dist/types/src/components/EditorToolbar/headings.d.ts.map +1 -1
- package/dist/types/src/components/EditorToolbar/{comment.d.ts → image.d.ts} +4 -5
- package/dist/types/src/components/EditorToolbar/image.d.ts.map +1 -0
- package/dist/types/src/components/EditorToolbar/index.d.ts +1 -1
- package/dist/types/src/components/EditorToolbar/index.d.ts.map +1 -1
- package/dist/types/src/components/EditorToolbar/lists.d.ts +4 -3
- package/dist/types/src/components/EditorToolbar/lists.d.ts.map +1 -1
- package/dist/types/src/components/EditorToolbar/search.d.ts +17 -0
- package/dist/types/src/components/EditorToolbar/search.d.ts.map +1 -0
- package/dist/types/src/components/EditorToolbar/util.d.ts +17 -25
- package/dist/types/src/components/EditorToolbar/util.d.ts.map +1 -1
- package/dist/types/src/components/EditorToolbar/{viewMode.d.ts → view-mode.d.ts} +5 -4
- package/dist/types/src/components/EditorToolbar/view-mode.d.ts.map +1 -0
- package/dist/types/src/components/Popover/RefDropdownMenu.d.ts +21 -0
- package/dist/types/src/components/Popover/RefDropdownMenu.d.ts.map +1 -0
- package/dist/types/src/components/Popover/RefPopover.d.ts +21 -0
- package/dist/types/src/components/Popover/RefPopover.d.ts.map +1 -0
- package/dist/types/src/components/Popover/index.d.ts +3 -0
- package/dist/types/src/components/Popover/index.d.ts.map +1 -0
- package/dist/types/src/components/index.d.ts +1 -0
- package/dist/types/src/components/index.d.ts.map +1 -1
- package/dist/types/src/defaults.d.ts +3 -5
- package/dist/types/src/defaults.d.ts.map +1 -1
- package/dist/types/src/extensions/annotations.d.ts +4 -1
- package/dist/types/src/extensions/annotations.d.ts.map +1 -1
- package/dist/types/src/extensions/autocomplete.d.ts +1 -2
- package/dist/types/src/extensions/autocomplete.d.ts.map +1 -1
- package/dist/types/src/extensions/automerge/automerge.d.ts.map +1 -1
- package/dist/types/src/extensions/automerge/automerge.stories.d.ts.map +1 -1
- package/dist/types/src/extensions/automerge/cursor.d.ts.map +1 -1
- package/dist/types/src/extensions/automerge/defs.d.ts +1 -1
- package/dist/types/src/extensions/automerge/defs.d.ts.map +1 -1
- package/dist/types/src/extensions/automerge/sync.d.ts.map +1 -1
- package/dist/types/src/extensions/automerge/update-automerge.d.ts +1 -1
- package/dist/types/src/extensions/automerge/update-automerge.d.ts.map +1 -1
- package/dist/types/src/extensions/automerge/update-codemirror.d.ts +1 -1
- package/dist/types/src/extensions/automerge/update-codemirror.d.ts.map +1 -1
- package/dist/types/src/extensions/awareness/awareness-provider.d.ts.map +1 -1
- package/dist/types/src/extensions/awareness/awareness.d.ts.map +1 -1
- package/dist/types/src/extensions/blast.d.ts.map +1 -1
- package/dist/types/src/extensions/command/action.d.ts +17 -0
- package/dist/types/src/extensions/command/action.d.ts.map +1 -0
- package/dist/types/src/extensions/command/command.d.ts +4 -10
- package/dist/types/src/extensions/command/command.d.ts.map +1 -1
- package/dist/types/src/extensions/command/hint.d.ts +18 -4
- package/dist/types/src/extensions/command/hint.d.ts.map +1 -1
- package/dist/types/src/extensions/command/index.d.ts +3 -0
- package/dist/types/src/extensions/command/index.d.ts.map +1 -1
- package/dist/types/src/extensions/command/menu.d.ts +6 -11
- package/dist/types/src/extensions/command/menu.d.ts.map +1 -1
- package/dist/types/src/extensions/command/state.d.ts +9 -11
- package/dist/types/src/extensions/command/state.d.ts.map +1 -1
- package/dist/types/src/extensions/command/typeahead.d.ts +17 -0
- package/dist/types/src/extensions/command/typeahead.d.ts.map +1 -0
- package/dist/types/src/extensions/comments.d.ts +9 -17
- package/dist/types/src/extensions/comments.d.ts.map +1 -1
- package/dist/types/src/extensions/debug.d.ts.map +1 -1
- package/dist/types/src/extensions/dnd.d.ts.map +1 -1
- package/dist/types/src/extensions/factories.d.ts +4 -0
- package/dist/types/src/extensions/factories.d.ts.map +1 -1
- package/dist/types/src/extensions/folding.d.ts.map +1 -1
- package/dist/types/src/extensions/index.d.ts +3 -0
- package/dist/types/src/extensions/index.d.ts.map +1 -1
- package/dist/types/src/extensions/json.d.ts +7 -0
- package/dist/types/src/extensions/json.d.ts.map +1 -0
- package/dist/types/src/extensions/listener.d.ts.map +1 -1
- package/dist/types/src/extensions/markdown/{editorAction.d.ts → action.d.ts} +1 -1
- package/dist/types/src/extensions/markdown/action.d.ts.map +1 -0
- package/dist/types/src/extensions/markdown/bundle.d.ts +2 -1
- package/dist/types/src/extensions/markdown/bundle.d.ts.map +1 -1
- package/dist/types/src/extensions/markdown/changes.d.ts.map +1 -1
- package/dist/types/src/extensions/markdown/debug.d.ts.map +1 -1
- package/dist/types/src/extensions/markdown/decorate.d.ts +5 -1
- package/dist/types/src/extensions/markdown/decorate.d.ts.map +1 -1
- package/dist/types/src/extensions/markdown/formatting.d.ts +3 -3
- package/dist/types/src/extensions/markdown/formatting.d.ts.map +1 -1
- package/dist/types/src/extensions/markdown/highlight.d.ts.map +1 -1
- package/dist/types/src/extensions/markdown/image.d.ts.map +1 -1
- package/dist/types/src/extensions/markdown/index.d.ts +1 -1
- package/dist/types/src/extensions/markdown/index.d.ts.map +1 -1
- package/dist/types/src/extensions/markdown/link.d.ts +4 -1
- package/dist/types/src/extensions/markdown/link.d.ts.map +1 -1
- package/dist/types/src/extensions/markdown/styles.d.ts.map +1 -1
- package/dist/types/src/extensions/markdown/table.d.ts.map +1 -1
- package/dist/types/src/extensions/mention.d.ts.map +1 -1
- package/dist/types/src/extensions/modes.d.ts +5 -5
- package/dist/types/src/extensions/modes.d.ts.map +1 -1
- package/dist/types/src/extensions/outliner/commands.d.ts +10 -0
- package/dist/types/src/extensions/outliner/commands.d.ts.map +1 -0
- package/dist/types/src/extensions/outliner/editor.d.ts +5 -0
- package/dist/types/src/extensions/outliner/editor.d.ts.map +1 -0
- package/dist/types/src/extensions/outliner/editor.test.d.ts +2 -0
- package/dist/types/src/extensions/outliner/editor.test.d.ts.map +1 -0
- package/dist/types/src/extensions/outliner/index.d.ts +4 -0
- package/dist/types/src/extensions/outliner/index.d.ts.map +1 -0
- package/dist/types/src/extensions/outliner/outliner.d.ts +13 -0
- package/dist/types/src/extensions/outliner/outliner.d.ts.map +1 -0
- package/dist/types/src/extensions/outliner/outliner.test.d.ts +2 -0
- package/dist/types/src/extensions/outliner/outliner.test.d.ts.map +1 -0
- package/dist/types/src/extensions/outliner/selection.d.ts +12 -0
- package/dist/types/src/extensions/outliner/selection.d.ts.map +1 -0
- package/dist/types/src/extensions/outliner/tree.d.ts +79 -0
- package/dist/types/src/extensions/outliner/tree.d.ts.map +1 -0
- package/dist/types/src/extensions/outliner/tree.test.d.ts +2 -0
- package/dist/types/src/extensions/outliner/tree.test.d.ts.map +1 -0
- package/dist/types/src/extensions/preview/index.d.ts +2 -0
- package/dist/types/src/extensions/preview/index.d.ts.map +1 -0
- package/dist/types/src/extensions/preview/preview.d.ts +39 -0
- package/dist/types/src/extensions/preview/preview.d.ts.map +1 -0
- package/dist/types/src/extensions/selection.d.ts.map +1 -1
- package/dist/types/src/extensions/typewriter.d.ts.map +1 -1
- package/dist/types/src/hooks/index.d.ts +0 -1
- package/dist/types/src/hooks/index.d.ts.map +1 -1
- package/dist/types/src/hooks/useTextEditor.d.ts +2 -1
- package/dist/types/src/hooks/useTextEditor.d.ts.map +1 -1
- package/dist/types/src/stories/Command.stories.d.ts +7 -0
- package/dist/types/src/stories/Command.stories.d.ts.map +1 -0
- package/dist/types/src/stories/Comments.stories.d.ts +13 -0
- package/dist/types/src/stories/Comments.stories.d.ts.map +1 -0
- package/dist/types/src/stories/EditorToolbar.stories.d.ts +12 -0
- package/dist/types/src/stories/EditorToolbar.stories.d.ts.map +1 -0
- package/dist/types/src/stories/Experimental.stories.d.ts +16 -0
- package/dist/types/src/stories/Experimental.stories.d.ts.map +1 -0
- package/dist/types/src/stories/Markdown.stories.d.ts +46 -0
- package/dist/types/src/stories/Markdown.stories.d.ts.map +1 -0
- package/dist/types/src/stories/Outliner.stories.d.ts +26 -0
- package/dist/types/src/stories/Outliner.stories.d.ts.map +1 -0
- package/dist/types/src/stories/Preview.stories.d.ts +10 -0
- package/dist/types/src/stories/Preview.stories.d.ts.map +1 -0
- package/dist/types/src/stories/TextEditor.stories.d.ts +55 -0
- package/dist/types/src/stories/TextEditor.stories.d.ts.map +1 -0
- package/dist/types/src/stories/util.d.ts +53 -0
- package/dist/types/src/stories/util.d.ts.map +1 -0
- package/dist/types/src/styles/theme.d.ts.map +1 -1
- package/dist/types/src/styles/tokens.d.ts.map +1 -1
- package/dist/types/src/testing/index.d.ts +2 -0
- package/dist/types/src/testing/index.d.ts.map +1 -0
- package/dist/types/src/testing/util.d.ts +2 -0
- package/dist/types/src/testing/util.d.ts.map +1 -0
- package/dist/types/src/types.d.ts +5 -0
- package/dist/types/src/types.d.ts.map +1 -1
- package/dist/types/src/util/cursor.d.ts.map +1 -1
- package/dist/types/src/util/debug.d.ts.map +1 -1
- package/dist/types/src/util/dom.d.ts.map +1 -1
- package/dist/types/src/util/facet.d.ts.map +1 -1
- package/dist/types/src/util/react.d.ts +6 -1
- package/dist/types/src/util/react.d.ts.map +1 -1
- package/dist/types/tsconfig.tsbuildinfo +1 -1
- package/package.json +46 -30
- package/src/components/EditorToolbar/EditorToolbar.tsx +95 -72
- package/src/components/EditorToolbar/blocks.ts +27 -6
- package/src/components/EditorToolbar/formatting.ts +34 -7
- package/src/components/EditorToolbar/headings.ts +9 -8
- package/src/components/EditorToolbar/image.ts +16 -0
- package/src/components/EditorToolbar/index.ts +7 -1
- package/src/components/EditorToolbar/lists.ts +26 -7
- package/src/components/EditorToolbar/search.ts +19 -0
- package/src/components/EditorToolbar/util.ts +19 -20
- package/src/components/EditorToolbar/{viewMode.ts → view-mode.ts} +9 -8
- package/src/components/Popover/RefDropdownMenu.tsx +77 -0
- package/src/components/Popover/RefPopover.tsx +75 -0
- package/src/components/Popover/index.ts +6 -0
- package/src/components/index.ts +1 -0
- package/src/defaults.ts +12 -13
- package/src/extensions/annotations.ts +41 -64
- package/src/extensions/autocomplete.ts +5 -6
- package/src/extensions/automerge/automerge.stories.tsx +13 -24
- package/src/extensions/automerge/automerge.test.tsx +6 -5
- package/src/extensions/automerge/automerge.ts +2 -2
- package/src/extensions/automerge/defs.ts +1 -2
- package/src/extensions/automerge/sync.ts +7 -7
- package/src/extensions/automerge/update-automerge.ts +1 -1
- package/src/extensions/automerge/update-codemirror.ts +3 -4
- package/src/extensions/awareness/awareness-provider.ts +4 -4
- package/src/extensions/awareness/awareness.ts +7 -7
- package/src/extensions/blast.ts +9 -9
- package/src/extensions/command/action.ts +49 -0
- package/src/extensions/command/command.ts +7 -27
- package/src/extensions/command/hint.ts +36 -33
- package/src/extensions/command/index.ts +3 -0
- package/src/extensions/command/menu.ts +79 -51
- package/src/extensions/command/state.ts +41 -61
- package/src/extensions/command/typeahead.ts +116 -0
- package/src/extensions/comments.ts +11 -76
- package/src/extensions/factories.ts +13 -0
- package/src/extensions/folding.tsx +1 -1
- package/src/extensions/index.ts +3 -0
- package/src/extensions/json.ts +56 -0
- package/src/extensions/markdown/bundle.ts +13 -9
- package/src/extensions/markdown/changes.ts +3 -2
- package/src/extensions/markdown/decorate.ts +19 -17
- package/src/extensions/markdown/formatting.ts +6 -6
- package/src/extensions/markdown/image.ts +14 -13
- package/src/extensions/markdown/index.ts +1 -1
- package/src/extensions/markdown/link.ts +33 -24
- package/src/extensions/markdown/styles.ts +4 -3
- package/src/extensions/markdown/table.ts +3 -3
- package/src/extensions/modes.ts +5 -6
- package/src/extensions/outliner/commands.ts +270 -0
- package/src/extensions/outliner/editor.test.ts +33 -0
- package/src/extensions/outliner/editor.ts +184 -0
- package/src/extensions/outliner/index.ts +7 -0
- package/src/extensions/outliner/outliner.test.ts +99 -0
- package/src/extensions/outliner/outliner.ts +168 -0
- package/src/extensions/outliner/selection.ts +50 -0
- package/src/extensions/outliner/tree.test.ts +164 -0
- package/src/extensions/outliner/tree.ts +315 -0
- package/src/extensions/preview/index.ts +5 -0
- package/src/extensions/preview/preview.ts +271 -0
- package/src/hooks/index.ts +0 -1
- package/src/hooks/useTextEditor.ts +4 -3
- package/src/stories/Command.stories.tsx +97 -0
- package/src/stories/Comments.stories.tsx +98 -0
- package/src/stories/EditorToolbar.stories.tsx +96 -0
- package/src/stories/Experimental.stories.tsx +86 -0
- package/src/stories/Markdown.stories.tsx +121 -0
- package/src/stories/Outliner.stories.tsx +108 -0
- package/src/stories/Preview.stories.tsx +149 -0
- package/src/stories/TextEditor.stories.tsx +256 -0
- package/src/stories/util.tsx +326 -0
- package/src/styles/theme.ts +15 -5
- package/src/styles/tokens.ts +1 -2
- package/src/testing/index.ts +5 -0
- package/src/testing/util.ts +5 -0
- package/src/types.ts +7 -0
- package/src/util/react.tsx +20 -2
- package/dist/types/src/InputMode.stories.d.ts +0 -57
- package/dist/types/src/InputMode.stories.d.ts.map +0 -1
- package/dist/types/src/TextEditor.stories.d.ts +0 -115
- package/dist/types/src/TextEditor.stories.d.ts.map +0 -1
- package/dist/types/src/components/EditorToolbar/comment.d.ts.map +0 -1
- package/dist/types/src/components/EditorToolbar/viewMode.d.ts.map +0 -1
- package/dist/types/src/extensions/command/preview.d.ts +0 -12
- package/dist/types/src/extensions/command/preview.d.ts.map +0 -1
- package/dist/types/src/extensions/markdown/editorAction.d.ts.map +0 -1
- package/dist/types/src/fragments.d.ts +0 -3
- package/dist/types/src/fragments.d.ts.map +0 -1
- package/dist/types/src/hooks/useActionHandler.d.ts +0 -4
- package/dist/types/src/hooks/useActionHandler.d.ts.map +0 -1
- package/src/InputMode.stories.tsx +0 -124
- package/src/TextEditor.stories.tsx +0 -856
- package/src/components/EditorToolbar/comment.ts +0 -23
- package/src/extensions/command/preview.ts +0 -79
- package/src/fragments.ts +0 -19
- package/src/hooks/useActionHandler.ts +0 -12
- /package/src/extensions/markdown/{editorAction.ts → action.ts} +0 -0
@@ -0,0 +1,149 @@
|
|
1
|
+
//
|
2
|
+
// Copyright 2023 DXOS.org
|
3
|
+
//
|
4
|
+
|
5
|
+
import '@dxos-theme';
|
6
|
+
|
7
|
+
import React, { useState, useEffect, type FC } from 'react';
|
8
|
+
|
9
|
+
import { faker } from '@dxos/random';
|
10
|
+
import { IconButton, Popover } from '@dxos/react-ui';
|
11
|
+
import { hoverableHidden } from '@dxos/react-ui-theme';
|
12
|
+
import { withLayout, withTheme, type Meta } from '@dxos/storybook-utils';
|
13
|
+
|
14
|
+
import { EditorStory } from './util';
|
15
|
+
import { RefPopover, useRefPopover } from '../components';
|
16
|
+
import {
|
17
|
+
preview,
|
18
|
+
image,
|
19
|
+
type PreviewOptions,
|
20
|
+
type PreviewLinkRef,
|
21
|
+
type PreviewLinkTarget,
|
22
|
+
type PreviewRenderProps,
|
23
|
+
} from '../extensions';
|
24
|
+
import { str } from '../testing';
|
25
|
+
import { createRenderer } from '../util';
|
26
|
+
|
27
|
+
const handlePreviewLookup = async ({ label, ref }: PreviewLinkRef): Promise<PreviewLinkTarget> => {
|
28
|
+
// Random text.
|
29
|
+
faker.seed(ref.split('').reduce((acc: number, char: string) => acc + char.charCodeAt(0), 1));
|
30
|
+
const text = Array.from({ length: 2 }, () => faker.lorem.paragraphs()).join('\n\n');
|
31
|
+
return {
|
32
|
+
label,
|
33
|
+
text,
|
34
|
+
};
|
35
|
+
};
|
36
|
+
|
37
|
+
// Async lookup.
|
38
|
+
// TODO(burdon): Handle errors.
|
39
|
+
const useRefTarget = (link: PreviewLinkRef, onLookup: PreviewOptions['onLookup']): PreviewLinkTarget | undefined => {
|
40
|
+
const [target, setTarget] = useState<PreviewLinkTarget | undefined>();
|
41
|
+
useEffect(() => {
|
42
|
+
void onLookup?.(link).then((target) => setTarget(target ?? undefined));
|
43
|
+
}, [link, onLookup]);
|
44
|
+
|
45
|
+
return target;
|
46
|
+
};
|
47
|
+
|
48
|
+
const PreviewCard = () => {
|
49
|
+
const { target } = useRefPopover('PreviewCard');
|
50
|
+
return (
|
51
|
+
<Popover.Portal>
|
52
|
+
<Popover.Content classNames='popover-card-width p-2' onOpenAutoFocus={(event) => event.preventDefault()}>
|
53
|
+
<Popover.Viewport>
|
54
|
+
<h2 className='grow truncate'>{target?.label}</h2>
|
55
|
+
{target && <div className='line-clamp-3'>{target.text}</div>}
|
56
|
+
</Popover.Viewport>
|
57
|
+
<Popover.Arrow />
|
58
|
+
</Popover.Content>
|
59
|
+
</Popover.Portal>
|
60
|
+
);
|
61
|
+
};
|
62
|
+
|
63
|
+
// TODO(burdon): Replace with card.
|
64
|
+
const PreviewBlock: FC<PreviewRenderProps> = ({ readonly, link, onAction, onLookup }) => {
|
65
|
+
const target = useRefTarget(link, onLookup);
|
66
|
+
return (
|
67
|
+
<div className='group flex flex-col gap-2'>
|
68
|
+
<div className='flex items-center gap-4'>
|
69
|
+
<div className='grow truncate'>
|
70
|
+
{/* <span className='text-xs text-subdued mie-2'>Prompt</span> */}
|
71
|
+
{link.label}
|
72
|
+
</div>
|
73
|
+
{!readonly && (
|
74
|
+
<div className='flex gap-1'>
|
75
|
+
{(link.suggest && (
|
76
|
+
<>
|
77
|
+
{target && (
|
78
|
+
<IconButton
|
79
|
+
classNames='text-green-500'
|
80
|
+
label='Apply'
|
81
|
+
icon={'ph--check--regular'}
|
82
|
+
onClick={() => onAction({ type: 'insert', link, target })}
|
83
|
+
/>
|
84
|
+
)}
|
85
|
+
<IconButton
|
86
|
+
classNames='text-red-500'
|
87
|
+
label='Cancel'
|
88
|
+
icon={'ph--x--regular'}
|
89
|
+
onClick={() => onAction({ type: 'delete', link })}
|
90
|
+
/>
|
91
|
+
</>
|
92
|
+
)) || (
|
93
|
+
<IconButton
|
94
|
+
iconOnly
|
95
|
+
label='Delete'
|
96
|
+
icon={'ph--x--regular'}
|
97
|
+
classNames={hoverableHidden}
|
98
|
+
onClick={() => onAction({ type: 'delete', link })}
|
99
|
+
/>
|
100
|
+
)}
|
101
|
+
</div>
|
102
|
+
)}
|
103
|
+
</div>
|
104
|
+
{target && <div className='line-clamp-3'>{target.text}</div>}
|
105
|
+
</div>
|
106
|
+
);
|
107
|
+
};
|
108
|
+
|
109
|
+
const meta: Meta<typeof EditorStory> = {
|
110
|
+
title: 'ui/react-ui-editor/Preview',
|
111
|
+
decorators: [withTheme, withLayout({ fullscreen: true })],
|
112
|
+
render: EditorStory,
|
113
|
+
parameters: { layout: 'fullscreen' },
|
114
|
+
};
|
115
|
+
|
116
|
+
export default meta;
|
117
|
+
|
118
|
+
export const Default = {
|
119
|
+
render: () => (
|
120
|
+
<RefPopover.Provider onLookup={handlePreviewLookup}>
|
121
|
+
<EditorStory
|
122
|
+
text={str(
|
123
|
+
'# Preview',
|
124
|
+
'',
|
125
|
+
'This project is part of the [DXOS][dxn:queue:data:123] SDK.',
|
126
|
+
'',
|
127
|
+
'![DXOS][?dxn:queue:data:123]',
|
128
|
+
'',
|
129
|
+
'It consists of [ECHO][dxn:queue:data:echo], [HALO][dxn:queue:data:halo], and [MESH][dxn:queue:data:mesh].',
|
130
|
+
'',
|
131
|
+
'## Deep dive',
|
132
|
+
'',
|
133
|
+
'![ECHO][dxn:queue:data:echo]',
|
134
|
+
'',
|
135
|
+
'',
|
136
|
+
'',
|
137
|
+
)}
|
138
|
+
extensions={[
|
139
|
+
image(),
|
140
|
+
preview({
|
141
|
+
renderBlock: createRenderer(PreviewBlock),
|
142
|
+
onLookup: handlePreviewLookup,
|
143
|
+
}),
|
144
|
+
]}
|
145
|
+
/>
|
146
|
+
<PreviewCard />
|
147
|
+
</RefPopover.Provider>
|
148
|
+
),
|
149
|
+
};
|
@@ -0,0 +1,256 @@
|
|
1
|
+
//
|
2
|
+
// Copyright 2023 DXOS.org
|
3
|
+
//
|
4
|
+
|
5
|
+
import '@dxos-theme';
|
6
|
+
|
7
|
+
import { javascript } from '@codemirror/lang-javascript';
|
8
|
+
import { openSearchPanel } from '@codemirror/search';
|
9
|
+
import React from 'react';
|
10
|
+
|
11
|
+
import { log } from '@dxos/log';
|
12
|
+
import { withLayout, withTheme, type Meta } from '@dxos/storybook-utils';
|
13
|
+
|
14
|
+
import {
|
15
|
+
EditorStory,
|
16
|
+
allExtensions,
|
17
|
+
content,
|
18
|
+
defaultExtensions,
|
19
|
+
global,
|
20
|
+
largeWithImages,
|
21
|
+
links,
|
22
|
+
longText,
|
23
|
+
names,
|
24
|
+
renderLinkButton,
|
25
|
+
text,
|
26
|
+
} from './util';
|
27
|
+
import { editorMonospace } from '../defaults';
|
28
|
+
import {
|
29
|
+
InputModeExtensions,
|
30
|
+
autocomplete,
|
31
|
+
decorateMarkdown,
|
32
|
+
folding,
|
33
|
+
image,
|
34
|
+
listener,
|
35
|
+
mention,
|
36
|
+
selectionState,
|
37
|
+
staticCompletion,
|
38
|
+
typeahead,
|
39
|
+
} from '../extensions';
|
40
|
+
import { str } from '../testing';
|
41
|
+
|
42
|
+
const meta: Meta<typeof EditorStory> = {
|
43
|
+
title: 'ui/react-ui-editor/TextEditor',
|
44
|
+
render: EditorStory,
|
45
|
+
decorators: [withTheme, withLayout({ fullscreen: true })],
|
46
|
+
parameters: { layout: 'fullscreen' },
|
47
|
+
};
|
48
|
+
|
49
|
+
export default meta;
|
50
|
+
|
51
|
+
//
|
52
|
+
// Default
|
53
|
+
//
|
54
|
+
|
55
|
+
export const Default = {
|
56
|
+
render: () => <EditorStory text={text} extensions={defaultExtensions} />,
|
57
|
+
};
|
58
|
+
|
59
|
+
//
|
60
|
+
// Everything
|
61
|
+
//
|
62
|
+
|
63
|
+
export const Everything = {
|
64
|
+
render: () => <EditorStory text={text} extensions={allExtensions} selection={{ anchor: 99, head: 110 }} />,
|
65
|
+
};
|
66
|
+
|
67
|
+
//
|
68
|
+
// Empty
|
69
|
+
//
|
70
|
+
|
71
|
+
export const Empty = {
|
72
|
+
render: () => <EditorStory extensions={defaultExtensions} />,
|
73
|
+
};
|
74
|
+
|
75
|
+
//
|
76
|
+
// Readonly
|
77
|
+
//
|
78
|
+
|
79
|
+
export const Readonly = {
|
80
|
+
render: () => <EditorStory text={text} extensions={defaultExtensions} readOnly />,
|
81
|
+
};
|
82
|
+
|
83
|
+
//
|
84
|
+
// No Extensions
|
85
|
+
//
|
86
|
+
|
87
|
+
export const NoExtensions = {
|
88
|
+
render: () => <EditorStory text={text} />,
|
89
|
+
};
|
90
|
+
|
91
|
+
//
|
92
|
+
// Vim
|
93
|
+
//
|
94
|
+
|
95
|
+
export const Vim = {
|
96
|
+
render: () => (
|
97
|
+
<EditorStory
|
98
|
+
text={str('# Vim Mode', '', 'The distant future. The year 2000.', '', content.paragraphs)}
|
99
|
+
extensions={[defaultExtensions, InputModeExtensions.vim]}
|
100
|
+
/>
|
101
|
+
),
|
102
|
+
};
|
103
|
+
|
104
|
+
//
|
105
|
+
// Listener
|
106
|
+
//
|
107
|
+
|
108
|
+
export const Listener = {
|
109
|
+
render: () => (
|
110
|
+
<EditorStory
|
111
|
+
text={str('# Listener', '', content.footer)}
|
112
|
+
extensions={[
|
113
|
+
listener({
|
114
|
+
onFocus: (focusing) => {
|
115
|
+
log.info('listener', { focusing });
|
116
|
+
},
|
117
|
+
onChange: (text) => {
|
118
|
+
log.info('listener', { text });
|
119
|
+
},
|
120
|
+
}),
|
121
|
+
]}
|
122
|
+
/>
|
123
|
+
),
|
124
|
+
};
|
125
|
+
|
126
|
+
//
|
127
|
+
// Folding
|
128
|
+
//
|
129
|
+
|
130
|
+
export const Folding = {
|
131
|
+
render: () => <EditorStory text={text} extensions={[folding()]} />,
|
132
|
+
};
|
133
|
+
|
134
|
+
//
|
135
|
+
// Scrolling
|
136
|
+
//
|
137
|
+
|
138
|
+
export const Scrolling = {
|
139
|
+
render: () => (
|
140
|
+
<EditorStory
|
141
|
+
text={str('# Large Document', '', longText)}
|
142
|
+
extensions={selectionState({
|
143
|
+
setState: (id, state) => global.set(id, state),
|
144
|
+
getState: (id) => global.get(id),
|
145
|
+
})}
|
146
|
+
/>
|
147
|
+
),
|
148
|
+
};
|
149
|
+
|
150
|
+
export const ScrollingWithImages = {
|
151
|
+
render: () => (
|
152
|
+
<EditorStory text={str('# Large Document', '', largeWithImages)} extensions={[decorateMarkdown(), image()]} />
|
153
|
+
),
|
154
|
+
};
|
155
|
+
|
156
|
+
export const ScrollTo = {
|
157
|
+
render: () => {
|
158
|
+
// NOTE: Selection won't appear if text is reformatted.
|
159
|
+
const word = 'Scroll to here...';
|
160
|
+
const text = str('# Scroll To', longText, '', word, '', longText);
|
161
|
+
const idx = text.indexOf(word);
|
162
|
+
return (
|
163
|
+
<EditorStory
|
164
|
+
text={text}
|
165
|
+
extensions={defaultExtensions}
|
166
|
+
scrollTo={idx}
|
167
|
+
selection={{ anchor: idx, head: idx + word.length }}
|
168
|
+
/>
|
169
|
+
);
|
170
|
+
},
|
171
|
+
};
|
172
|
+
|
173
|
+
//
|
174
|
+
// Typescript
|
175
|
+
//
|
176
|
+
|
177
|
+
export const Typescript = {
|
178
|
+
render: () => (
|
179
|
+
<EditorStory
|
180
|
+
text={content.typescript}
|
181
|
+
lineNumbers
|
182
|
+
extensions={[editorMonospace, javascript({ typescript: true })]}
|
183
|
+
/>
|
184
|
+
),
|
185
|
+
};
|
186
|
+
|
187
|
+
//
|
188
|
+
// Autocomplete
|
189
|
+
//
|
190
|
+
|
191
|
+
export const Autocomplete = {
|
192
|
+
render: () => (
|
193
|
+
<EditorStory
|
194
|
+
text={str('# Autocomplete', '', 'Press Ctrl-Space...', content.footer)}
|
195
|
+
extensions={[
|
196
|
+
decorateMarkdown({ renderLinkButton }),
|
197
|
+
autocomplete({
|
198
|
+
onSearch: (text) => {
|
199
|
+
return links.filter(({ label }) => label.toLowerCase().includes(text.toLowerCase()));
|
200
|
+
},
|
201
|
+
}),
|
202
|
+
]}
|
203
|
+
/>
|
204
|
+
),
|
205
|
+
};
|
206
|
+
|
207
|
+
//
|
208
|
+
// Typeahead
|
209
|
+
//
|
210
|
+
|
211
|
+
const completions = ['type', 'AND', 'OR', 'NOT', 'dxos.org'];
|
212
|
+
|
213
|
+
export const Typeahead = {
|
214
|
+
render: () => (
|
215
|
+
<EditorStory
|
216
|
+
text={str('# Typeahead', '')}
|
217
|
+
extensions={[
|
218
|
+
decorateMarkdown({ renderLinkButton }),
|
219
|
+
typeahead({
|
220
|
+
onComplete: staticCompletion(completions, completions[0]),
|
221
|
+
}),
|
222
|
+
]}
|
223
|
+
/>
|
224
|
+
),
|
225
|
+
};
|
226
|
+
|
227
|
+
//
|
228
|
+
// Mention
|
229
|
+
//
|
230
|
+
|
231
|
+
export const Mention = {
|
232
|
+
render: () => (
|
233
|
+
<EditorStory
|
234
|
+
text={str('# Mention', '', 'Type @...', content.footer)}
|
235
|
+
extensions={[
|
236
|
+
mention({
|
237
|
+
onSearch: (text) => names.filter((name) => name.toLowerCase().startsWith(text.toLowerCase())),
|
238
|
+
}),
|
239
|
+
]}
|
240
|
+
/>
|
241
|
+
),
|
242
|
+
};
|
243
|
+
|
244
|
+
//
|
245
|
+
// Search
|
246
|
+
//
|
247
|
+
|
248
|
+
export const Search = {
|
249
|
+
render: () => (
|
250
|
+
<EditorStory
|
251
|
+
text={str('# Search', text)}
|
252
|
+
extensions={defaultExtensions}
|
253
|
+
onReady={(view) => openSearchPanel(view)}
|
254
|
+
/>
|
255
|
+
),
|
256
|
+
};
|