@dxos/react-ui-editor 0.8.4-main.a4bbb77 → 0.8.4-main.ae835ea
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/{chunk-22UMM3QJ.mjs → chunk-HL3YF6WC.mjs} +2 -2
- package/dist/lib/browser/chunk-HL3YF6WC.mjs.map +7 -0
- package/dist/lib/browser/index.mjs +4577 -4832
- package/dist/lib/browser/index.mjs.map +4 -4
- package/dist/lib/browser/meta.json +1 -1
- package/dist/lib/browser/testing/index.mjs.map +2 -2
- package/dist/lib/browser/types/index.mjs +1 -1
- package/dist/lib/node-esm/{chunk-YXYQPV6R.mjs → chunk-YJZGD3LY.mjs} +2 -2
- package/dist/lib/node-esm/chunk-YJZGD3LY.mjs.map +7 -0
- package/dist/lib/node-esm/index.mjs +4577 -4832
- 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.map +2 -2
- package/dist/lib/node-esm/types/index.mjs +1 -1
- package/dist/types/src/components/Editor/Editor.d.ts +13 -4
- package/dist/types/src/components/Editor/Editor.d.ts.map +1 -1
- package/dist/types/src/components/Editor/Editor.stories.d.ts +27 -0
- package/dist/types/src/components/Editor/Editor.stories.d.ts.map +1 -0
- package/dist/types/src/components/EditorToolbar/EditorToolbar.d.ts +17 -2
- package/dist/types/src/components/EditorToolbar/EditorToolbar.d.ts.map +1 -1
- package/dist/types/src/components/EditorToolbar/headings.d.ts.map +1 -1
- package/dist/types/src/components/EditorToolbar/util.d.ts +5 -19
- package/dist/types/src/components/EditorToolbar/util.d.ts.map +1 -1
- package/dist/types/src/components/index.d.ts +0 -1
- package/dist/types/src/components/index.d.ts.map +1 -1
- package/dist/types/src/extensions/autocomplete/autocomplete.d.ts.map +1 -0
- package/dist/types/src/extensions/autocomplete/index.d.ts +5 -0
- package/dist/types/src/extensions/autocomplete/index.d.ts.map +1 -0
- package/dist/types/src/extensions/autocomplete/match.d.ts +13 -0
- package/dist/types/src/extensions/autocomplete/match.d.ts.map +1 -0
- package/dist/types/src/extensions/autocomplete/placeholder.d.ts +20 -0
- package/dist/types/src/extensions/autocomplete/placeholder.d.ts.map +1 -0
- package/dist/types/src/extensions/autocomplete/typeahead.d.ts +10 -0
- package/dist/types/src/extensions/autocomplete/typeahead.d.ts.map +1 -0
- package/dist/types/src/extensions/automerge/automerge.d.ts +1 -1
- package/dist/types/src/extensions/automerge/automerge.d.ts.map +1 -1
- package/dist/types/src/extensions/automerge/cursor.d.ts +1 -1
- package/dist/types/src/extensions/automerge/cursor.d.ts.map +1 -1
- package/dist/types/src/extensions/automerge/sync.d.ts +3 -3
- 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/autoscroll.d.ts +2 -2
- package/dist/types/src/extensions/autoscroll.d.ts.map +1 -1
- package/dist/types/src/extensions/awareness/awareness-provider.d.ts +1 -1
- package/dist/types/src/extensions/awareness/awareness-provider.d.ts.map +1 -1
- package/dist/types/src/extensions/factories.d.ts +9 -4
- package/dist/types/src/extensions/factories.d.ts.map +1 -1
- package/dist/types/src/extensions/index.d.ts +2 -3
- package/dist/types/src/extensions/index.d.ts.map +1 -1
- package/dist/types/src/extensions/json.d.ts +1 -1
- package/dist/types/src/extensions/json.d.ts.map +1 -1
- package/dist/types/src/extensions/listener.d.ts +8 -6
- package/dist/types/src/extensions/listener.d.ts.map +1 -1
- package/dist/types/src/extensions/markdown/bundle.d.ts.map +1 -1
- package/dist/types/src/extensions/markdown/formatting.d.ts +1 -2
- package/dist/types/src/extensions/markdown/formatting.d.ts.map +1 -1
- package/dist/types/src/extensions/modes.d.ts +1 -1
- package/dist/types/src/extensions/modes.d.ts.map +1 -1
- package/dist/types/src/extensions/outliner/menu.d.ts +8 -0
- package/dist/types/src/extensions/outliner/menu.d.ts.map +1 -0
- package/dist/types/src/extensions/popover/PopoverMenuProvider.d.ts +36 -0
- package/dist/types/src/extensions/popover/PopoverMenuProvider.d.ts.map +1 -0
- package/dist/types/src/extensions/popover/index.d.ts +8 -0
- package/dist/types/src/extensions/popover/index.d.ts.map +1 -0
- package/dist/types/src/extensions/popover/menu-presets.d.ts +4 -0
- package/dist/types/src/extensions/popover/menu-presets.d.ts.map +1 -0
- package/dist/types/src/extensions/popover/menu.d.ts +24 -0
- package/dist/types/src/extensions/popover/menu.d.ts.map +1 -0
- package/dist/types/src/extensions/popover/modal.d.ts +7 -0
- package/dist/types/src/extensions/popover/modal.d.ts.map +1 -0
- package/dist/types/src/extensions/popover/popover.d.ts +47 -0
- package/dist/types/src/extensions/popover/popover.d.ts.map +1 -0
- package/dist/types/src/extensions/popover/usePopoverMenu.d.ts +34 -0
- package/dist/types/src/extensions/popover/usePopoverMenu.d.ts.map +1 -0
- package/dist/types/src/extensions/popover/util.d.ts +8 -0
- package/dist/types/src/extensions/popover/util.d.ts.map +1 -0
- package/dist/types/src/extensions/preview/preview.d.ts +6 -3
- package/dist/types/src/extensions/preview/preview.d.ts.map +1 -1
- package/dist/types/src/extensions/state.d.ts +2 -0
- package/dist/types/src/extensions/state.d.ts.map +1 -0
- package/dist/types/src/hooks/useTextEditor.d.ts +2 -6
- package/dist/types/src/hooks/useTextEditor.d.ts.map +1 -1
- package/dist/types/src/stories/CommandDialog.stories.d.ts.map +1 -1
- package/dist/types/src/stories/Comments.stories.d.ts +2 -2
- package/dist/types/src/stories/EditorToolbar.stories.d.ts.map +1 -1
- package/dist/types/src/stories/Experimental.stories.d.ts +2 -2
- package/dist/types/src/stories/Markdown.stories.d.ts +2 -2
- package/dist/types/src/stories/Outliner.stories.d.ts.map +1 -1
- package/dist/types/src/stories/{CommandMenu.stories.d.ts → Popover.stories.d.ts} +6 -5
- package/dist/types/src/stories/Popover.stories.d.ts.map +1 -0
- package/dist/types/src/stories/Preview.stories.d.ts +2 -2
- package/dist/types/src/stories/Preview.stories.d.ts.map +1 -1
- package/dist/types/src/stories/TextEditor.stories.d.ts +2 -3
- package/dist/types/src/stories/TextEditor.stories.d.ts.map +1 -1
- package/dist/types/src/stories/components/EditorStory.d.ts +3 -3
- package/dist/types/src/stories/components/EditorStory.d.ts.map +1 -1
- package/dist/types/src/styles/theme.d.ts.map +1 -1
- package/dist/types/src/testing/PreviewPopover.d.ts.map +1 -1
- package/dist/types/src/types/types.d.ts +1 -1
- package/dist/types/src/types/types.d.ts.map +1 -1
- package/dist/types/tsconfig.tsbuildinfo +1 -1
- package/package.json +41 -38
- package/src/components/Editor/Editor.stories.tsx +69 -0
- package/src/components/Editor/Editor.tsx +25 -17
- package/src/components/EditorToolbar/EditorToolbar.tsx +88 -87
- package/src/components/EditorToolbar/headings.ts +6 -4
- package/src/components/EditorToolbar/util.ts +2 -18
- package/src/components/index.ts +0 -1
- package/src/extensions/{autocomplete.ts → autocomplete/autocomplete.ts} +1 -0
- package/src/extensions/autocomplete/index.ts +8 -0
- package/src/extensions/autocomplete/match.ts +46 -0
- package/src/extensions/{command-menu → autocomplete}/placeholder.ts +21 -17
- package/src/extensions/{command-dialog → autocomplete}/typeahead.ts +6 -48
- package/src/extensions/automerge/automerge.ts +28 -9
- package/src/extensions/automerge/cursor.ts +1 -1
- package/src/extensions/automerge/sync.ts +8 -4
- package/src/extensions/automerge/update-automerge.ts +1 -1
- package/src/extensions/autoscroll.ts +3 -3
- package/src/extensions/awareness/awareness-provider.ts +2 -2
- package/src/extensions/factories.ts +18 -10
- package/src/extensions/hashtag.tsx +2 -2
- package/src/extensions/index.ts +2 -3
- package/src/extensions/json.ts +1 -1
- package/src/extensions/listener.ts +14 -20
- package/src/extensions/markdown/bundle.ts +14 -2
- package/src/extensions/markdown/formatting.ts +8 -8
- package/src/extensions/modes.ts +2 -2
- package/src/extensions/{floating-menu.ts → outliner/menu.ts} +7 -5
- package/src/extensions/outliner/outliner.ts +2 -2
- package/src/extensions/popover/PopoverMenuProvider.tsx +220 -0
- package/src/extensions/popover/index.ts +12 -0
- package/src/extensions/popover/menu-presets.ts +124 -0
- package/src/extensions/popover/menu.ts +67 -0
- package/src/extensions/popover/modal.ts +24 -0
- package/src/extensions/popover/popover.ts +289 -0
- package/src/extensions/popover/usePopoverMenu.ts +173 -0
- package/src/extensions/popover/util.ts +29 -0
- package/src/extensions/preview/index.ts +1 -1
- package/src/extensions/preview/preview.ts +10 -7
- package/src/extensions/state.ts +7 -0
- package/src/hooks/useTextEditor.ts +21 -21
- package/src/stories/CommandDialog.stories.tsx +3 -14
- package/src/stories/EditorToolbar.stories.tsx +4 -5
- package/src/stories/Outliner.stories.tsx +16 -9
- package/src/stories/Popover.stories.tsx +163 -0
- package/src/stories/Preview.stories.tsx +15 -8
- package/src/stories/TextEditor.stories.tsx +3 -29
- package/src/stories/components/EditorStory.tsx +5 -3
- package/src/styles/theme.ts +2 -1
- package/src/testing/PreviewPopover.tsx +2 -0
- package/src/types/types.ts +1 -1
- package/dist/lib/browser/chunk-22UMM3QJ.mjs.map +0 -7
- package/dist/lib/node-esm/chunk-YXYQPV6R.mjs.map +0 -7
- package/dist/types/src/components/CommandMenu/CommandMenu.d.ts +0 -38
- package/dist/types/src/components/CommandMenu/CommandMenu.d.ts.map +0 -1
- package/dist/types/src/components/CommandMenu/index.d.ts +0 -2
- package/dist/types/src/components/CommandMenu/index.d.ts.map +0 -1
- package/dist/types/src/extensions/autocomplete.d.ts.map +0 -1
- package/dist/types/src/extensions/command-dialog/action.d.ts +0 -17
- package/dist/types/src/extensions/command-dialog/action.d.ts.map +0 -1
- package/dist/types/src/extensions/command-dialog/command-dialog.d.ts +0 -6
- package/dist/types/src/extensions/command-dialog/command-dialog.d.ts.map +0 -1
- package/dist/types/src/extensions/command-dialog/hint.d.ts +0 -19
- package/dist/types/src/extensions/command-dialog/hint.d.ts.map +0 -1
- package/dist/types/src/extensions/command-dialog/index.d.ts +0 -4
- package/dist/types/src/extensions/command-dialog/index.d.ts.map +0 -1
- package/dist/types/src/extensions/command-dialog/state.d.ts +0 -16
- package/dist/types/src/extensions/command-dialog/state.d.ts.map +0 -1
- package/dist/types/src/extensions/command-dialog/typeahead.d.ts +0 -22
- package/dist/types/src/extensions/command-dialog/typeahead.d.ts.map +0 -1
- package/dist/types/src/extensions/command-menu/command-menu.d.ts +0 -20
- package/dist/types/src/extensions/command-menu/command-menu.d.ts.map +0 -1
- package/dist/types/src/extensions/command-menu/index.d.ts +0 -3
- package/dist/types/src/extensions/command-menu/index.d.ts.map +0 -1
- package/dist/types/src/extensions/command-menu/placeholder.d.ts +0 -10
- package/dist/types/src/extensions/command-menu/placeholder.d.ts.map +0 -1
- package/dist/types/src/extensions/command-menu/useCommandMenu.d.ts +0 -24
- package/dist/types/src/extensions/command-menu/useCommandMenu.d.ts.map +0 -1
- package/dist/types/src/extensions/floating-menu.d.ts +0 -7
- package/dist/types/src/extensions/floating-menu.d.ts.map +0 -1
- package/dist/types/src/stories/CommandMenu.stories.d.ts.map +0 -1
- package/src/components/CommandMenu/CommandMenu.tsx +0 -348
- package/src/components/CommandMenu/index.ts +0 -5
- package/src/extensions/command-dialog/action.ts +0 -55
- package/src/extensions/command-dialog/command-dialog.ts +0 -34
- package/src/extensions/command-dialog/hint.ts +0 -103
- package/src/extensions/command-dialog/index.ts +0 -7
- package/src/extensions/command-dialog/state.ts +0 -90
- package/src/extensions/command-menu/command-menu.ts +0 -210
- package/src/extensions/command-menu/index.ts +0 -6
- package/src/extensions/command-menu/useCommandMenu.ts +0 -134
- package/src/stories/CommandMenu.stories.tsx +0 -158
- /package/dist/types/src/extensions/{autocomplete.d.ts → autocomplete/autocomplete.d.ts} +0 -0
|
@@ -19,7 +19,7 @@ import {
|
|
|
19
19
|
createThemeExtensions,
|
|
20
20
|
decorateMarkdown,
|
|
21
21
|
formattingKeymap,
|
|
22
|
-
|
|
22
|
+
formattingListener,
|
|
23
23
|
} from '../extensions';
|
|
24
24
|
import { type UseTextEditorProps, useTextEditor } from '../hooks';
|
|
25
25
|
import { translations } from '../translations';
|
|
@@ -31,7 +31,6 @@ const DefaultStory = ({ autoFocus, initialValue, placeholder }: StoryProps) => {
|
|
|
31
31
|
const { themeMode } = useThemeContext();
|
|
32
32
|
const toolbarState = useEditorToolbarState({ viewMode: 'source' });
|
|
33
33
|
const viewMode = toolbarState.viewMode;
|
|
34
|
-
const trackFormatting = useFormattingState(toolbarState);
|
|
35
34
|
// TODO(wittjosiah): Provide way to change the input mode.
|
|
36
35
|
const [editorInputMode, _setEditorInputMode] = useState<EditorInputMode>('default');
|
|
37
36
|
const { parentRef, view } = useTextEditor(
|
|
@@ -46,7 +45,7 @@ const DefaultStory = ({ autoFocus, initialValue, placeholder }: StoryProps) => {
|
|
|
46
45
|
createThemeExtensions({ themeMode, syntaxHighlighting: true }),
|
|
47
46
|
viewMode === 'source' ? [] : decorateMarkdown(),
|
|
48
47
|
formattingKeymap(),
|
|
49
|
-
|
|
48
|
+
formattingListener(() => toolbarState),
|
|
50
49
|
],
|
|
51
50
|
}),
|
|
52
51
|
[editorInputMode, viewMode, themeMode, placeholder],
|
|
@@ -65,7 +64,7 @@ const DefaultStory = ({ autoFocus, initialValue, placeholder }: StoryProps) => {
|
|
|
65
64
|
// Also not sure if view is even guaranteed to exist at this point.
|
|
66
65
|
return (
|
|
67
66
|
<div role='none' className={mx('fixed inset-0 flex flex-col')}>
|
|
68
|
-
{toolbarState && <EditorToolbar state={toolbarState} getView={getView}
|
|
67
|
+
{toolbarState && <EditorToolbar state={toolbarState} getView={getView} onViewModeChange={handleViewModeChange} />}
|
|
69
68
|
<div role='none' className={mx('grow overflow-hidden', attentionSurface)}>
|
|
70
69
|
<div className={mx(editorWidth)} ref={parentRef} />
|
|
71
70
|
</div>
|
|
@@ -91,6 +90,6 @@ export const Default: Story = {
|
|
|
91
90
|
args: {
|
|
92
91
|
autoFocus: true,
|
|
93
92
|
placeholder: 'Text...',
|
|
94
|
-
initialValue: '# Demo\n\nThis is a document
|
|
93
|
+
initialValue: '# Demo\n\nThis is a **document**.\n\n',
|
|
95
94
|
},
|
|
96
95
|
};
|
|
@@ -9,8 +9,15 @@ import React, { useMemo, useRef } from 'react';
|
|
|
9
9
|
import { withTheme } from '@dxos/react-ui/testing';
|
|
10
10
|
import { withAttention } from '@dxos/react-ui-attention/testing';
|
|
11
11
|
|
|
12
|
-
import {
|
|
13
|
-
|
|
12
|
+
import {
|
|
13
|
+
type PopoverMenuGroup,
|
|
14
|
+
PopoverMenuProvider,
|
|
15
|
+
deleteItem,
|
|
16
|
+
hashtag,
|
|
17
|
+
listItemToString,
|
|
18
|
+
outliner,
|
|
19
|
+
treeFacet,
|
|
20
|
+
} from '../extensions';
|
|
14
21
|
import { str } from '../testing';
|
|
15
22
|
|
|
16
23
|
import { EditorStory } from './components';
|
|
@@ -22,7 +29,7 @@ type StoryProps = {
|
|
|
22
29
|
const DefaultStory = ({ text }: StoryProps) => {
|
|
23
30
|
const viewRef = useRef<EditorView>(null);
|
|
24
31
|
|
|
25
|
-
const commandGroups:
|
|
32
|
+
const commandGroups: PopoverMenuGroup[] = useMemo(
|
|
26
33
|
() => [
|
|
27
34
|
{
|
|
28
35
|
id: 'outliner-actions',
|
|
@@ -41,11 +48,12 @@ const DefaultStory = ({ text }: StoryProps) => {
|
|
|
41
48
|
);
|
|
42
49
|
|
|
43
50
|
return (
|
|
44
|
-
<
|
|
51
|
+
<PopoverMenuProvider
|
|
52
|
+
view={viewRef.current}
|
|
45
53
|
groups={commandGroups}
|
|
46
|
-
onSelect={(item
|
|
47
|
-
if (
|
|
48
|
-
return item.onSelect(
|
|
54
|
+
onSelect={({ view, item }) => {
|
|
55
|
+
if (item.onSelect) {
|
|
56
|
+
return item.onSelect(view, view.state.selection.main.head);
|
|
49
57
|
}
|
|
50
58
|
}}
|
|
51
59
|
>
|
|
@@ -53,7 +61,6 @@ const DefaultStory = ({ text }: StoryProps) => {
|
|
|
53
61
|
ref={viewRef}
|
|
54
62
|
text={text}
|
|
55
63
|
extensions={[outliner(), hashtag()]}
|
|
56
|
-
placeholder=''
|
|
57
64
|
debug='raw+tree'
|
|
58
65
|
debugCustom={(view) => {
|
|
59
66
|
const tree = view.state.facet(treeFacet);
|
|
@@ -62,7 +69,7 @@ const DefaultStory = ({ text }: StoryProps) => {
|
|
|
62
69
|
return <pre className='p-1 overflow-auto text-xs text-green-800 dark:text-green-200'>{lines.join('\n')}</pre>;
|
|
63
70
|
}}
|
|
64
71
|
/>
|
|
65
|
-
</
|
|
72
|
+
</PopoverMenuProvider>
|
|
66
73
|
);
|
|
67
74
|
};
|
|
68
75
|
|
|
@@ -0,0 +1,163 @@
|
|
|
1
|
+
//
|
|
2
|
+
// Copyright 2023 DXOS.org
|
|
3
|
+
//
|
|
4
|
+
|
|
5
|
+
import { type EditorView } from '@codemirror/view';
|
|
6
|
+
import { type Meta, type StoryObj } from '@storybook/react-vite';
|
|
7
|
+
import React, { useCallback, useState } from 'react';
|
|
8
|
+
|
|
9
|
+
import { Obj, Query } from '@dxos/echo';
|
|
10
|
+
import { faker } from '@dxos/random';
|
|
11
|
+
import { useClientProvider, withClientProvider } from '@dxos/react-client/testing';
|
|
12
|
+
import { Domino } from '@dxos/react-ui';
|
|
13
|
+
import { withTheme } from '@dxos/react-ui/testing';
|
|
14
|
+
import { Testing, type ValueGenerator, createObjectFactory } from '@dxos/schema/testing';
|
|
15
|
+
|
|
16
|
+
import {
|
|
17
|
+
type PopoverMenuGroup,
|
|
18
|
+
type PopoverMenuItem,
|
|
19
|
+
PopoverMenuProvider,
|
|
20
|
+
type UsePopoverMenuProps,
|
|
21
|
+
createMenuGroup,
|
|
22
|
+
filterMenuGroups,
|
|
23
|
+
formattingCommands,
|
|
24
|
+
insertAtCursor,
|
|
25
|
+
insertAtLineStart,
|
|
26
|
+
linkSlashCommands,
|
|
27
|
+
usePopoverMenu,
|
|
28
|
+
} from '../extensions';
|
|
29
|
+
import { str } from '../testing';
|
|
30
|
+
|
|
31
|
+
import { EditorStory } from './components';
|
|
32
|
+
|
|
33
|
+
const generator: ValueGenerator = faker as any;
|
|
34
|
+
|
|
35
|
+
const customCompletions: PopoverMenuGroup = createMenuGroup({
|
|
36
|
+
id: 'test',
|
|
37
|
+
items: ['Hello world!', 'Hello DXOS', 'Hello Composer', 'https://dxos.org'],
|
|
38
|
+
});
|
|
39
|
+
|
|
40
|
+
const placeholder = (trigger: string[]) =>
|
|
41
|
+
Domino.of('div')
|
|
42
|
+
.children(
|
|
43
|
+
Domino.of('span').text('Press'),
|
|
44
|
+
...trigger.map((trigger) =>
|
|
45
|
+
Domino.of('span')
|
|
46
|
+
.text(trigger)
|
|
47
|
+
.classNames('border border-separator rounded-sm mx-1 pis-1 pie-1 pbs-[2px] pbe-[3px]'),
|
|
48
|
+
),
|
|
49
|
+
Domino.of('span').text('for commands'),
|
|
50
|
+
)
|
|
51
|
+
.build();
|
|
52
|
+
|
|
53
|
+
type StoryProps = Omit<UsePopoverMenuProps, 'viewRef'> & { text: string };
|
|
54
|
+
|
|
55
|
+
const DefaultStory = ({ text, ...props }: StoryProps) => {
|
|
56
|
+
const [view, setView] = useState<EditorView | null>(null);
|
|
57
|
+
const { groupsRef, extension, ...menuProps } = usePopoverMenu(props);
|
|
58
|
+
|
|
59
|
+
return (
|
|
60
|
+
<PopoverMenuProvider view={view} groups={groupsRef.current} {...menuProps}>
|
|
61
|
+
<EditorStory ref={setView} text={text} extensions={extension} />
|
|
62
|
+
</PopoverMenuProvider>
|
|
63
|
+
);
|
|
64
|
+
};
|
|
65
|
+
|
|
66
|
+
const LinkStory = (args: StoryProps) => {
|
|
67
|
+
const { space } = useClientProvider();
|
|
68
|
+
const getMenu = useCallback<NonNullable<UsePopoverMenuProps['getMenu']>>(
|
|
69
|
+
async ({ text, trigger }): Promise<PopoverMenuGroup[]> => {
|
|
70
|
+
if (trigger === '/') {
|
|
71
|
+
return filterMenuGroups([linkSlashCommands], (item) =>
|
|
72
|
+
text ? (item.label as string).toLowerCase().includes(text.toLowerCase()) : true,
|
|
73
|
+
);
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
if (!space) {
|
|
77
|
+
return [];
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
const name = text?.startsWith('@') ? text.slice(1).toLowerCase() : (text?.toLowerCase() ?? '');
|
|
81
|
+
const result = await space?.db.query(Query.type(Testing.Contact)).run();
|
|
82
|
+
const items = result.objects
|
|
83
|
+
.filter((object) => object.name.toLowerCase().includes(name))
|
|
84
|
+
.map(
|
|
85
|
+
(object): PopoverMenuItem => ({
|
|
86
|
+
id: object.id,
|
|
87
|
+
label: object.name,
|
|
88
|
+
icon: 'ph--user--regular',
|
|
89
|
+
onSelect: (view, head) => {
|
|
90
|
+
const link = `[${object.name}](${Obj.getDXN(object)})`;
|
|
91
|
+
if (text?.startsWith('@')) {
|
|
92
|
+
insertAtLineStart(view, head, `!${link}\n`);
|
|
93
|
+
} else {
|
|
94
|
+
insertAtCursor(view, head, `${link} `);
|
|
95
|
+
}
|
|
96
|
+
},
|
|
97
|
+
}),
|
|
98
|
+
);
|
|
99
|
+
|
|
100
|
+
return [{ id: 'test', items }];
|
|
101
|
+
},
|
|
102
|
+
[space],
|
|
103
|
+
);
|
|
104
|
+
|
|
105
|
+
return <DefaultStory {...args} getMenu={getMenu} />;
|
|
106
|
+
};
|
|
107
|
+
|
|
108
|
+
const meta = {
|
|
109
|
+
title: 'ui/react-ui-editor/Popover',
|
|
110
|
+
render: DefaultStory,
|
|
111
|
+
decorators: [withTheme],
|
|
112
|
+
parameters: {
|
|
113
|
+
layout: 'fullscreen',
|
|
114
|
+
},
|
|
115
|
+
} satisfies Meta<typeof DefaultStory>;
|
|
116
|
+
|
|
117
|
+
export default meta;
|
|
118
|
+
|
|
119
|
+
type Story = StoryObj<typeof meta>;
|
|
120
|
+
|
|
121
|
+
export const Default: Story = {
|
|
122
|
+
args: {
|
|
123
|
+
text: str('# Autocomplete', '', ''),
|
|
124
|
+
triggerKey: 'Ctrl-Space',
|
|
125
|
+
filter: true,
|
|
126
|
+
getMenu: () => [customCompletions],
|
|
127
|
+
},
|
|
128
|
+
};
|
|
129
|
+
|
|
130
|
+
export const Formatting: Story = {
|
|
131
|
+
args: {
|
|
132
|
+
text: str('# Slash command', '', ''),
|
|
133
|
+
trigger: '/',
|
|
134
|
+
placeholder: {
|
|
135
|
+
content: () => placeholder(['/']),
|
|
136
|
+
},
|
|
137
|
+
getMenu: () => [formattingCommands],
|
|
138
|
+
},
|
|
139
|
+
};
|
|
140
|
+
|
|
141
|
+
export const Link: Story = {
|
|
142
|
+
render: LinkStory,
|
|
143
|
+
decorators: [
|
|
144
|
+
withClientProvider({
|
|
145
|
+
createSpace: true,
|
|
146
|
+
onInitialized: async (client) => {
|
|
147
|
+
client.addTypes([Testing.Contact]);
|
|
148
|
+
},
|
|
149
|
+
onCreateSpace: async ({ space }) => {
|
|
150
|
+
const createObjects = createObjectFactory(space.db, generator);
|
|
151
|
+
await createObjects([{ type: Testing.Contact, count: 10 }]);
|
|
152
|
+
await space.db.flush({ indexes: true });
|
|
153
|
+
},
|
|
154
|
+
}),
|
|
155
|
+
],
|
|
156
|
+
args: {
|
|
157
|
+
text: str('# Links', '', ''),
|
|
158
|
+
trigger: ['/', '@'],
|
|
159
|
+
placeholder: {
|
|
160
|
+
content: () => placeholder(['/', '@']),
|
|
161
|
+
},
|
|
162
|
+
},
|
|
163
|
+
};
|
|
@@ -16,7 +16,14 @@ import { Card } from '@dxos/react-ui-stack';
|
|
|
16
16
|
import { hoverableControlItem, hoverableControlItemTransition, hoverableControls } from '@dxos/react-ui-theme';
|
|
17
17
|
import { trim } from '@dxos/util';
|
|
18
18
|
|
|
19
|
-
import {
|
|
19
|
+
import {
|
|
20
|
+
type PreviewBlock,
|
|
21
|
+
type PreviewLinkRef,
|
|
22
|
+
type PreviewLinkTarget,
|
|
23
|
+
getLinkRef,
|
|
24
|
+
image,
|
|
25
|
+
preview,
|
|
26
|
+
} from '../extensions';
|
|
20
27
|
import { PreviewPopoverProvider, usePreviewPopover } from '../testing';
|
|
21
28
|
|
|
22
29
|
import { EditorStory } from './components';
|
|
@@ -70,7 +77,7 @@ type PreviewAction =
|
|
|
70
77
|
link: PreviewLinkRef;
|
|
71
78
|
};
|
|
72
79
|
|
|
73
|
-
const
|
|
80
|
+
const PreviewBlockComponent = ({ link, el, view }: { link: PreviewLinkRef; el: HTMLElement; view?: EditorView }) => {
|
|
74
81
|
const target = useRefTarget(link);
|
|
75
82
|
|
|
76
83
|
const handleAction = useCallback(
|
|
@@ -180,16 +187,16 @@ type Story = StoryObj<typeof meta>;
|
|
|
180
187
|
export const Default: Story = {
|
|
181
188
|
render: () => {
|
|
182
189
|
const [view, setView] = useState<EditorView>();
|
|
183
|
-
const [previewBlocks, setPreviewBlocks] = useState<
|
|
190
|
+
const [previewBlocks, setPreviewBlocks] = useState<PreviewBlock[]>([]);
|
|
184
191
|
const extensions = useMemo(() => {
|
|
185
192
|
return [
|
|
186
193
|
image(),
|
|
187
194
|
preview({
|
|
188
|
-
addBlockContainer: (
|
|
189
|
-
setPreviewBlocks((prev) => [...prev,
|
|
195
|
+
addBlockContainer: (block) => {
|
|
196
|
+
setPreviewBlocks((prev) => [...prev, block]);
|
|
190
197
|
},
|
|
191
|
-
removeBlockContainer: (
|
|
192
|
-
setPreviewBlocks((prev) => prev.filter(({ link: prevLink }) => prevLink.ref !== link.ref));
|
|
198
|
+
removeBlockContainer: (block) => {
|
|
199
|
+
setPreviewBlocks((prev) => prev.filter(({ link: prevLink }) => prevLink.ref !== block.link.ref));
|
|
193
200
|
},
|
|
194
201
|
}),
|
|
195
202
|
];
|
|
@@ -221,7 +228,7 @@ export const Default: Story = {
|
|
|
221
228
|
/>
|
|
222
229
|
<PreviewCard />
|
|
223
230
|
{previewBlocks.map(({ link, el }) => (
|
|
224
|
-
<
|
|
231
|
+
<PreviewBlockComponent key={link.ref} link={link} el={el} view={view} />
|
|
225
232
|
))}
|
|
226
233
|
</PreviewPopoverProvider>
|
|
227
234
|
);
|
|
@@ -13,7 +13,6 @@ import { withTheme } from '@dxos/react-ui/testing';
|
|
|
13
13
|
import { editorMonospace } from '../defaults';
|
|
14
14
|
import {
|
|
15
15
|
InputModeExtensions,
|
|
16
|
-
autocomplete,
|
|
17
16
|
decorateMarkdown,
|
|
18
17
|
folding,
|
|
19
18
|
image,
|
|
@@ -32,10 +31,8 @@ import {
|
|
|
32
31
|
defaultExtensions,
|
|
33
32
|
global,
|
|
34
33
|
largeWithImages,
|
|
35
|
-
links,
|
|
36
34
|
longText,
|
|
37
35
|
names,
|
|
38
|
-
renderLinkButton,
|
|
39
36
|
text,
|
|
40
37
|
} from './components';
|
|
41
38
|
|
|
@@ -116,10 +113,10 @@ export const Listener: Story = {
|
|
|
116
113
|
text={str('# Listener', '', content.footer)}
|
|
117
114
|
extensions={[
|
|
118
115
|
listener({
|
|
119
|
-
onFocus: (focusing) => {
|
|
116
|
+
onFocus: ({ focusing }) => {
|
|
120
117
|
log.info('listener', { focusing });
|
|
121
118
|
},
|
|
122
|
-
onChange: (text) => {
|
|
119
|
+
onChange: ({ text }) => {
|
|
123
120
|
log.info('listener', { text });
|
|
124
121
|
},
|
|
125
122
|
}),
|
|
@@ -189,40 +186,17 @@ export const Typescript: Story = {
|
|
|
189
186
|
),
|
|
190
187
|
};
|
|
191
188
|
|
|
192
|
-
//
|
|
193
|
-
// Autocomplete
|
|
194
|
-
//
|
|
195
|
-
|
|
196
|
-
export const Autocomplete: Story = {
|
|
197
|
-
render: () => (
|
|
198
|
-
<EditorStory
|
|
199
|
-
text={str('# Autocomplete', '', 'Press Ctrl-Space...', content.footer)}
|
|
200
|
-
extensions={[
|
|
201
|
-
decorateMarkdown({ renderLinkButton }),
|
|
202
|
-
autocomplete({
|
|
203
|
-
onSuggest: (text) => {
|
|
204
|
-
return links
|
|
205
|
-
.filter(({ label }) => label.toLowerCase().includes(text.toLowerCase()))
|
|
206
|
-
.map(({ label }) => label);
|
|
207
|
-
},
|
|
208
|
-
}),
|
|
209
|
-
]}
|
|
210
|
-
/>
|
|
211
|
-
),
|
|
212
|
-
};
|
|
213
|
-
|
|
214
189
|
//
|
|
215
190
|
// Typeahead
|
|
216
191
|
//
|
|
217
192
|
|
|
218
|
-
const completions = ['
|
|
193
|
+
const completions = ['hello world!', 'dxos.org'];
|
|
219
194
|
|
|
220
195
|
export const Typeahead: Story = {
|
|
221
196
|
render: () => (
|
|
222
197
|
<EditorStory
|
|
223
198
|
text={str('# Typeahead', '')}
|
|
224
199
|
extensions={[
|
|
225
|
-
decorateMarkdown({ renderLinkButton }),
|
|
226
200
|
typeahead({
|
|
227
201
|
onComplete: staticCompletion(completions, { minLength: 2 }),
|
|
228
202
|
}),
|
|
@@ -5,11 +5,11 @@
|
|
|
5
5
|
import { type EditorView } from '@codemirror/view';
|
|
6
6
|
import React, { type ReactNode, forwardRef, useEffect, useImperativeHandle, useMemo, useState } from 'react';
|
|
7
7
|
|
|
8
|
-
import {
|
|
8
|
+
import { createDocAccessor, createObject } from '@dxos/client/echo';
|
|
9
|
+
import { Expando } from '@dxos/echo/internal';
|
|
10
|
+
import { live } from '@dxos/echo/internal';
|
|
9
11
|
import { invariant } from '@dxos/invariant';
|
|
10
12
|
import { PublicKey } from '@dxos/keys';
|
|
11
|
-
import { live } from '@dxos/live-object';
|
|
12
|
-
import { createDocAccessor, createObject } from '@dxos/react-client/echo';
|
|
13
13
|
import { useForwardedRef, useThemeContext } from '@dxos/react-ui';
|
|
14
14
|
import { useAttentionAttributes } from '@dxos/react-ui-attention';
|
|
15
15
|
import { JsonFilter } from '@dxos/react-ui-syntax-highlighter';
|
|
@@ -25,6 +25,7 @@ import {
|
|
|
25
25
|
createMarkdownExtensions,
|
|
26
26
|
createThemeExtensions,
|
|
27
27
|
debugTree,
|
|
28
|
+
decorateMarkdown,
|
|
28
29
|
} from '../../extensions';
|
|
29
30
|
import { type UseTextEditorProps, useTextEditor } from '../../hooks';
|
|
30
31
|
|
|
@@ -114,6 +115,7 @@ export const EditorComponent = forwardRef<EditorView | null, StoryProps>(
|
|
|
114
115
|
createBasicExtensions({ readOnly, placeholder, lineNumbers, scrollPastEnd: true, search: true }),
|
|
115
116
|
createMarkdownExtensions(),
|
|
116
117
|
createThemeExtensions({ themeMode, syntaxHighlighting: true, slots }),
|
|
118
|
+
decorateMarkdown(),
|
|
117
119
|
editorGutter,
|
|
118
120
|
extensions || [],
|
|
119
121
|
],
|
package/src/styles/theme.ts
CHANGED
|
@@ -74,12 +74,12 @@ export const defaultTheme: ThemeStyles = {
|
|
|
74
74
|
*/
|
|
75
75
|
'.cm-gutters': {
|
|
76
76
|
borderRight: 'none',
|
|
77
|
-
// background: 'transparent',
|
|
78
77
|
},
|
|
79
78
|
'.cm-gutter': {},
|
|
80
79
|
'.cm-gutter.cm-lineNumbers': {
|
|
81
80
|
paddingRight: '4px',
|
|
82
81
|
borderRight: '1px solid var(--dx-subduedSeparator)',
|
|
82
|
+
color: 'var(--dx-subduedText)',
|
|
83
83
|
},
|
|
84
84
|
'.cm-gutter.cm-lineNumbers .cm-gutterElement': {
|
|
85
85
|
minWidth: '40px',
|
|
@@ -110,6 +110,7 @@ export const defaultTheme: ThemeStyles = {
|
|
|
110
110
|
borderLeft: '2px solid var(--dx-cmCursor)',
|
|
111
111
|
},
|
|
112
112
|
'.cm-placeholder': {
|
|
113
|
+
fontFamily: fontBody,
|
|
113
114
|
color: 'var(--dx-placeholder)',
|
|
114
115
|
},
|
|
115
116
|
|
|
@@ -24,6 +24,7 @@ type PopoverLookupProviderProps = PropsWithChildren<{
|
|
|
24
24
|
onLookup?: PreviewLookup;
|
|
25
25
|
}>;
|
|
26
26
|
|
|
27
|
+
// TOOD(burdon): Reconcile with PreviewPlugin?
|
|
27
28
|
const PreviewPopoverProvider = ({ children, onLookup }: PopoverLookupProviderProps) => {
|
|
28
29
|
const trigger = useRef<HTMLElement | null>(null);
|
|
29
30
|
const [value, setValue] = useState<PreviewPopoverValue>({});
|
|
@@ -73,6 +74,7 @@ const PreviewPopoverProvider = ({ children, onLookup }: PopoverLookupProviderPro
|
|
|
73
74
|
</PreviewPopoverContextProvider>
|
|
74
75
|
);
|
|
75
76
|
};
|
|
77
|
+
|
|
76
78
|
export { PreviewPopoverProvider, usePreviewPopover };
|
|
77
79
|
|
|
78
80
|
export type { PopoverLookupProviderProps, PreviewPopoverValue };
|
package/src/types/types.ts
CHANGED
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"version": 3,
|
|
3
|
-
"sources": ["../../../src/types/types.ts"],
|
|
4
|
-
"sourcesContent": ["//\n// Copyright 2024 DXOS.org\n//\n\nimport { type EditorView } from '@codemirror/view';\nimport { Schema } from 'effect';\n\n// Runtime data structure.\nexport type Range = {\n from: number;\n to: number;\n};\n\n// Persistent data structure.\n// TODO(burdon): Rename annotation?\nexport type Comment = {\n id: string;\n cursor?: string;\n};\n\n/**\n * Callback that renders into a DOM element within the editor.\n */\nexport type RenderCallback<Props extends object> = (el: HTMLElement, props: Props, view: EditorView) => void;\n\nexport const EditorViewModes = ['preview', 'readonly', 'source'] as const;\nexport const EditorViewMode = Schema.Union(...EditorViewModes.map((mode) => Schema.Literal(mode)));\nexport type EditorViewMode = Schema.Schema.Type<typeof EditorViewMode>;\n\nexport const EditorInputModes = ['default', 'vim', 'vscode'] as const;\nexport const EditorInputMode = Schema.Union(...EditorInputModes.map((mode) => Schema.Literal(mode)));\nexport type EditorInputMode = Schema.Schema.Type<typeof EditorInputMode>;\n"],
|
|
5
|
-
"mappings": ";AAKA,SAASA,cAAc;AAoBhB,IAAMC,kBAAkB;EAAC;EAAW;EAAY;;AAChD,IAAMC,iBAAiBC,OAAOC,MAAK,GAAIH,gBAAgBI,IAAI,CAACC,SAASH,OAAOI,QAAQD,IAAAA,CAAAA,CAAAA;AAGpF,IAAME,mBAAmB;EAAC;EAAW;EAAO;;AAC5C,IAAMC,kBAAkBN,OAAOC,MAAK,GAAII,iBAAiBH,IAAI,CAACC,SAASH,OAAOI,QAAQD,IAAAA,CAAAA,CAAAA;",
|
|
6
|
-
"names": ["Schema", "EditorViewModes", "EditorViewMode", "Schema", "Union", "map", "mode", "Literal", "EditorInputModes", "EditorInputMode"]
|
|
7
|
-
}
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"version": 3,
|
|
3
|
-
"sources": ["../../../src/types/types.ts"],
|
|
4
|
-
"sourcesContent": ["//\n// Copyright 2024 DXOS.org\n//\n\nimport { type EditorView } from '@codemirror/view';\nimport { Schema } from 'effect';\n\n// Runtime data structure.\nexport type Range = {\n from: number;\n to: number;\n};\n\n// Persistent data structure.\n// TODO(burdon): Rename annotation?\nexport type Comment = {\n id: string;\n cursor?: string;\n};\n\n/**\n * Callback that renders into a DOM element within the editor.\n */\nexport type RenderCallback<Props extends object> = (el: HTMLElement, props: Props, view: EditorView) => void;\n\nexport const EditorViewModes = ['preview', 'readonly', 'source'] as const;\nexport const EditorViewMode = Schema.Union(...EditorViewModes.map((mode) => Schema.Literal(mode)));\nexport type EditorViewMode = Schema.Schema.Type<typeof EditorViewMode>;\n\nexport const EditorInputModes = ['default', 'vim', 'vscode'] as const;\nexport const EditorInputMode = Schema.Union(...EditorInputModes.map((mode) => Schema.Literal(mode)));\nexport type EditorInputMode = Schema.Schema.Type<typeof EditorInputMode>;\n"],
|
|
5
|
-
"mappings": ";;;AAKA,SAASA,cAAc;AAoBhB,IAAMC,kBAAkB;EAAC;EAAW;EAAY;;AAChD,IAAMC,iBAAiBC,OAAOC,MAAK,GAAIH,gBAAgBI,IAAI,CAACC,SAASH,OAAOI,QAAQD,IAAAA,CAAAA,CAAAA;AAGpF,IAAME,mBAAmB;EAAC;EAAW;EAAO;;AAC5C,IAAMC,kBAAkBN,OAAOC,MAAK,GAAII,iBAAiBH,IAAI,CAACC,SAASH,OAAOI,QAAQD,IAAAA,CAAAA,CAAAA;",
|
|
6
|
-
"names": ["Schema", "EditorViewModes", "EditorViewMode", "Schema", "Union", "map", "mode", "Literal", "EditorInputModes", "EditorInputMode"]
|
|
7
|
-
}
|
|
@@ -1,38 +0,0 @@
|
|
|
1
|
-
import { type EditorView } from '@codemirror/view';
|
|
2
|
-
import React, { type PropsWithChildren } from 'react';
|
|
3
|
-
import { type DxAnchorActivate, type Label } from '@dxos/react-ui';
|
|
4
|
-
import { type MaybePromise } from '@dxos/util';
|
|
5
|
-
export type CommandMenuGroup = {
|
|
6
|
-
id: string;
|
|
7
|
-
label?: Label;
|
|
8
|
-
items: CommandMenuItem[];
|
|
9
|
-
};
|
|
10
|
-
export type CommandMenuItem = {
|
|
11
|
-
id: string;
|
|
12
|
-
label: Label;
|
|
13
|
-
icon?: string;
|
|
14
|
-
onSelect?: (view: EditorView, head: number) => MaybePromise<void>;
|
|
15
|
-
};
|
|
16
|
-
export type CommandMenuProps = PropsWithChildren<{
|
|
17
|
-
groups: CommandMenuGroup[];
|
|
18
|
-
onSelect: (item: CommandMenuItem) => void;
|
|
19
|
-
onActivate?: (event: DxAnchorActivate) => void;
|
|
20
|
-
currentItem?: string;
|
|
21
|
-
open?: boolean;
|
|
22
|
-
onOpenChange?: (nextOpen: boolean) => void;
|
|
23
|
-
defaultOpen?: boolean;
|
|
24
|
-
}>;
|
|
25
|
-
export declare const CommandMenuProvider: ({ groups, onSelect, onActivate, currentItem, children, open: propsOpen, onOpenChange, defaultOpen, }: CommandMenuProps) => React.JSX.Element;
|
|
26
|
-
export declare const getItem: (groups: CommandMenuGroup[], id?: string) => CommandMenuItem | undefined;
|
|
27
|
-
export declare const getNextItem: (groups: CommandMenuGroup[], id?: string) => CommandMenuItem;
|
|
28
|
-
export declare const getPreviousItem: (groups: CommandMenuGroup[], id?: string) => CommandMenuItem;
|
|
29
|
-
export declare const filterItems: (groups: CommandMenuGroup[], filter: (item: CommandMenuItem) => boolean) => CommandMenuGroup[];
|
|
30
|
-
export declare const insertAtCursor: (view: EditorView, head: number, insert: string) => void;
|
|
31
|
-
/**
|
|
32
|
-
* If the cursor is at the start of a line, insert the text at the cursor.
|
|
33
|
-
* Otherwise, insert the text on a new line.
|
|
34
|
-
*/
|
|
35
|
-
export declare const insertAtLineStart: (view: EditorView, head: number, insert: string) => void;
|
|
36
|
-
export declare const coreSlashCommands: CommandMenuGroup;
|
|
37
|
-
export declare const linkSlashCommands: CommandMenuGroup;
|
|
38
|
-
//# sourceMappingURL=CommandMenu.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"CommandMenu.d.ts","sourceRoot":"","sources":["../../../../../src/components/CommandMenu/CommandMenu.tsx"],"names":[],"mappings":"AAIA,OAAO,EAAE,KAAK,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAEnD,OAAO,KAAK,EAAE,EAAY,KAAK,iBAAiB,EAA4C,MAAM,OAAO,CAAC;AAG1G,OAAO,EACL,KAAK,gBAAgB,EAErB,KAAK,KAAK,EAKX,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAAE,KAAK,YAAY,EAAE,MAAM,YAAY,CAAC;AAM/C,MAAM,MAAM,gBAAgB,GAAG;IAC7B,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,CAAC,EAAE,KAAK,CAAC;IACd,KAAK,EAAE,eAAe,EAAE,CAAC;CAC1B,CAAC;AAEF,MAAM,MAAM,eAAe,GAAG;IAC5B,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,KAAK,CAAC;IACb,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,CAAC,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,MAAM,KAAK,YAAY,CAAC,IAAI,CAAC,CAAC;CACnE,CAAC;AAEF,MAAM,MAAM,gBAAgB,GAAG,iBAAiB,CAAC;IAC/C,MAAM,EAAE,gBAAgB,EAAE,CAAC;IAC3B,QAAQ,EAAE,CAAC,IAAI,EAAE,eAAe,KAAK,IAAI,CAAC;IAC1C,UAAU,CAAC,EAAE,CAAC,KAAK,EAAE,gBAAgB,KAAK,IAAI,CAAC;IAC/C,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,YAAY,CAAC,EAAE,CAAC,QAAQ,EAAE,OAAO,KAAK,IAAI,CAAC;IAC3C,WAAW,CAAC,EAAE,OAAO,CAAC;CACvB,CAAC,CAAC;AAGH,eAAO,MAAM,mBAAmB,GAAI,sGASjC,gBAAgB,sBAqElB,CAAC;AAiEF,eAAO,MAAM,OAAO,GAAI,QAAQ,gBAAgB,EAAE,EAAE,KAAK,MAAM,KAAG,eAAe,GAAG,SAEnF,CAAC;AAEF,eAAO,MAAM,WAAW,GAAI,QAAQ,gBAAgB,EAAE,EAAE,KAAK,MAAM,KAAG,eAIrE,CAAC;AAEF,eAAO,MAAM,eAAe,GAAI,QAAQ,gBAAgB,EAAE,EAAE,KAAK,MAAM,KAAG,eAIzE,CAAC;AAEF,eAAO,MAAM,WAAW,GACtB,QAAQ,gBAAgB,EAAE,EAC1B,QAAQ,CAAC,IAAI,EAAE,eAAe,KAAK,OAAO,KACzC,gBAAgB,EAKlB,CAAC;AAEF,eAAO,MAAM,cAAc,GAAI,MAAM,UAAU,EAAE,MAAM,MAAM,EAAE,QAAQ,MAAM,SAK5E,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,iBAAiB,GAAI,MAAM,UAAU,EAAE,MAAM,MAAM,EAAE,QAAQ,MAAM,SAW/E,CAAC;AAEF,eAAO,MAAM,iBAAiB,EAAE,gBA6E/B,CAAC;AAEF,eAAO,MAAM,iBAAiB,EAAE,gBA2B/B,CAAC"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/components/CommandMenu/index.ts"],"names":[],"mappings":"AAIA,cAAc,eAAe,CAAC"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"autocomplete.d.ts","sourceRoot":"","sources":["../../../../src/extensions/autocomplete.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,KAAK,SAAS,EAAQ,MAAM,mBAAmB,CAAC;AAWzD,MAAM,MAAM,mBAAmB,GAAG;IAChC,WAAW,CAAC,EAAE,OAAO,CAAC;IAEtB;;;;OAIG;IACH,QAAQ,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,GAAG,IAAI,CAAC;IAE5C;;;;OAIG;IACH,SAAS,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,MAAM,EAAE,CAAC;IAEvC;;OAEG;IACH,QAAQ,CAAC,EAAE,MAAM,IAAI,CAAC;CACvB,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,YAAY,GAAI,iDAAgD,mBAAwB,KAAG,SA+JvG,CAAC"}
|
|
@@ -1,17 +0,0 @@
|
|
|
1
|
-
import { type Command, type KeyBinding } from '@codemirror/view';
|
|
2
|
-
export type Action = {
|
|
3
|
-
type: 'insert';
|
|
4
|
-
text: string;
|
|
5
|
-
} | {
|
|
6
|
-
type: 'cancel';
|
|
7
|
-
};
|
|
8
|
-
export type ActionHandler = (action: Action) => void;
|
|
9
|
-
export declare const openEffect: import("@codemirror/state").StateEffectType<{
|
|
10
|
-
pos: number;
|
|
11
|
-
fullWidth?: boolean;
|
|
12
|
-
}>;
|
|
13
|
-
export declare const closeEffect: import("@codemirror/state").StateEffectType<null>;
|
|
14
|
-
export declare const openCommand: Command;
|
|
15
|
-
export declare const closeCommand: Command;
|
|
16
|
-
export declare const commandKeyBindings: readonly KeyBinding[];
|
|
17
|
-
//# sourceMappingURL=action.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"action.d.ts","sourceRoot":"","sources":["../../../../../src/extensions/command-dialog/action.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,KAAK,OAAO,EAAmB,KAAK,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAIlF,MAAM,MAAM,MAAM,GACd;IACE,IAAI,EAAE,QAAQ,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;CACd,GACD;IACE,IAAI,EAAE,QAAQ,CAAC;CAChB,CAAC;AAEN,MAAM,MAAM,aAAa,GAAG,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,CAAC;AAErD,eAAO,MAAM,UAAU;SAA6B,MAAM;gBAAc,OAAO;EAAK,CAAC;AACrF,eAAO,MAAM,WAAW,mDAA6B,CAAC;AAEtD,eAAO,MAAM,WAAW,EAAE,OAWzB,CAAC;AAEF,eAAO,MAAM,YAAY,EAAE,OAO1B,CAAC;AAEF,eAAO,MAAM,kBAAkB,EAAE,SAAS,UAAU,EASnD,CAAC"}
|
|
@@ -1,6 +0,0 @@
|
|
|
1
|
-
import { type Extension } from '@codemirror/state';
|
|
2
|
-
import { type HintOptions } from './hint';
|
|
3
|
-
import { type PopupOptions } from './state';
|
|
4
|
-
export type CommandOptions = Partial<PopupOptions & HintOptions>;
|
|
5
|
-
export declare const commandDialog: (options?: CommandOptions) => Extension;
|
|
6
|
-
//# sourceMappingURL=command-dialog.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"command-dialog.d.ts","sourceRoot":"","sources":["../../../../../src/extensions/command-dialog/command-dialog.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,KAAK,SAAS,EAAQ,MAAM,mBAAmB,CAAC;AAMzD,OAAO,EAAE,KAAK,WAAW,EAAQ,MAAM,QAAQ,CAAC;AAChD,OAAO,EAAE,KAAK,YAAY,EAA+B,MAAM,SAAS,CAAC;AAOzE,MAAM,MAAM,cAAc,GAAG,OAAO,CAAC,YAAY,GAAG,WAAW,CAAC,CAAC;AAEjE,eAAO,MAAM,aAAa,GAAI,UAAS,cAAmB,KAAG,SAa5D,CAAC"}
|
|
@@ -1,19 +0,0 @@
|
|
|
1
|
-
import { ViewPlugin, type ViewUpdate, WidgetType } from '@codemirror/view';
|
|
2
|
-
export type HintOptions = {
|
|
3
|
-
delay?: number;
|
|
4
|
-
onHint?: () => string | undefined;
|
|
5
|
-
};
|
|
6
|
-
export declare const hint: ({ delay, onHint }: HintOptions) => ViewPlugin<{
|
|
7
|
-
decorations: import("@codemirror/view").DecorationSet;
|
|
8
|
-
timeout: ReturnType<typeof setTimeout> | undefined;
|
|
9
|
-
update(update: ViewUpdate): void;
|
|
10
|
-
destroy(): void;
|
|
11
|
-
}, undefined>;
|
|
12
|
-
export declare class Hint extends WidgetType {
|
|
13
|
-
readonly content: string | HTMLElement;
|
|
14
|
-
constructor(content: string | HTMLElement);
|
|
15
|
-
toDOM(): HTMLSpanElement;
|
|
16
|
-
coordsAt(dom: HTMLElement): import("../..").Rect | null;
|
|
17
|
-
ignoreEvent(): boolean;
|
|
18
|
-
}
|
|
19
|
-
//# sourceMappingURL=hint.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"hint.d.ts","sourceRoot":"","sources":["../../../../../src/extensions/command-dialog/hint.ts"],"names":[],"mappings":"AAMA,OAAO,EAA0B,UAAU,EAAE,KAAK,UAAU,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAMnG,MAAM,MAAM,WAAW,GAAG;IACxB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,MAAM,GAAG,SAAS,CAAC;CACnC,CAAC;AAEF,eAAO,MAAM,IAAI,GAAI,mBAA2B,WAAW;;aAI5C,UAAU,CAAC,OAAO,UAAU,CAAC,GAAG,SAAS;mBAEnC,UAAU;;aAuC9B,CAAC;AAEF,qBAAa,IAAK,SAAQ,UAAU;IACtB,QAAQ,CAAC,OAAO,EAAE,MAAM,GAAG,WAAW;gBAA7B,OAAO,EAAE,MAAM,GAAG,WAAW;IAIlD,KAAK,IAAI,eAAe;IAcf,QAAQ,CAAC,GAAG,EAAE,WAAW;IAgBzB,WAAW,IAAI,OAAO;CAGhC"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/extensions/command-dialog/index.ts"],"names":[],"mappings":"AAIA,cAAc,kBAAkB,CAAC;AACjC,OAAO,EAAE,KAAK,MAAM,EAAE,MAAM,UAAU,CAAC;AACvC,cAAc,aAAa,CAAC"}
|
|
@@ -1,16 +0,0 @@
|
|
|
1
|
-
import { StateField } from '@codemirror/state';
|
|
2
|
-
import { type Tooltip } from '@codemirror/view';
|
|
3
|
-
import { type RenderCallback } from '../../types';
|
|
4
|
-
import { type Action } from './action';
|
|
5
|
-
export declare const commandConfig: import("@codemirror/state").Facet<Partial<PopupOptions & import("./hint").HintOptions>, Partial<PopupOptions & import("./hint").HintOptions>>;
|
|
6
|
-
export type PopupOptions = {
|
|
7
|
-
renderDialog: RenderCallback<{
|
|
8
|
-
onAction: (action?: Action) => void;
|
|
9
|
-
}>;
|
|
10
|
-
};
|
|
11
|
-
type CommandState = {
|
|
12
|
-
tooltip?: Tooltip;
|
|
13
|
-
};
|
|
14
|
-
export declare const commandState: StateField<CommandState>;
|
|
15
|
-
export {};
|
|
16
|
-
//# sourceMappingURL=state.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"state.d.ts","sourceRoot":"","sources":["../../../../../src/extensions/command-dialog/state.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAC/C,OAAO,EAAmB,KAAK,OAAO,EAAiC,MAAM,kBAAkB,CAAC;AAEhG,OAAO,EAAE,KAAK,cAAc,EAAE,MAAM,aAAa,CAAC;AAGlD,OAAO,EAAE,KAAK,MAAM,EAA2B,MAAM,UAAU,CAAC;AAGhE,eAAO,MAAM,aAAa,+IAAqC,CAAC;AAEhE,MAAM,MAAM,YAAY,GAAG;IACzB,YAAY,EAAE,cAAc,CAAC;QAAE,QAAQ,EAAE,CAAC,MAAM,CAAC,EAAE,MAAM,KAAK,IAAI,CAAA;KAAE,CAAC,CAAC;CACvE,CAAC;AAEF,KAAK,YAAY,GAAG;IAClB,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB,CAAC;AAEF,eAAO,MAAM,YAAY,0BAkEvB,CAAC"}
|