@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.
Files changed (194) hide show
  1. package/dist/lib/browser/{chunk-22UMM3QJ.mjs → chunk-HL3YF6WC.mjs} +2 -2
  2. package/dist/lib/browser/chunk-HL3YF6WC.mjs.map +7 -0
  3. package/dist/lib/browser/index.mjs +4577 -4832
  4. package/dist/lib/browser/index.mjs.map +4 -4
  5. package/dist/lib/browser/meta.json +1 -1
  6. package/dist/lib/browser/testing/index.mjs.map +2 -2
  7. package/dist/lib/browser/types/index.mjs +1 -1
  8. package/dist/lib/node-esm/{chunk-YXYQPV6R.mjs → chunk-YJZGD3LY.mjs} +2 -2
  9. package/dist/lib/node-esm/chunk-YJZGD3LY.mjs.map +7 -0
  10. package/dist/lib/node-esm/index.mjs +4577 -4832
  11. package/dist/lib/node-esm/index.mjs.map +4 -4
  12. package/dist/lib/node-esm/meta.json +1 -1
  13. package/dist/lib/node-esm/testing/index.mjs.map +2 -2
  14. package/dist/lib/node-esm/types/index.mjs +1 -1
  15. package/dist/types/src/components/Editor/Editor.d.ts +13 -4
  16. package/dist/types/src/components/Editor/Editor.d.ts.map +1 -1
  17. package/dist/types/src/components/Editor/Editor.stories.d.ts +27 -0
  18. package/dist/types/src/components/Editor/Editor.stories.d.ts.map +1 -0
  19. package/dist/types/src/components/EditorToolbar/EditorToolbar.d.ts +17 -2
  20. package/dist/types/src/components/EditorToolbar/EditorToolbar.d.ts.map +1 -1
  21. package/dist/types/src/components/EditorToolbar/headings.d.ts.map +1 -1
  22. package/dist/types/src/components/EditorToolbar/util.d.ts +5 -19
  23. package/dist/types/src/components/EditorToolbar/util.d.ts.map +1 -1
  24. package/dist/types/src/components/index.d.ts +0 -1
  25. package/dist/types/src/components/index.d.ts.map +1 -1
  26. package/dist/types/src/extensions/autocomplete/autocomplete.d.ts.map +1 -0
  27. package/dist/types/src/extensions/autocomplete/index.d.ts +5 -0
  28. package/dist/types/src/extensions/autocomplete/index.d.ts.map +1 -0
  29. package/dist/types/src/extensions/autocomplete/match.d.ts +13 -0
  30. package/dist/types/src/extensions/autocomplete/match.d.ts.map +1 -0
  31. package/dist/types/src/extensions/autocomplete/placeholder.d.ts +20 -0
  32. package/dist/types/src/extensions/autocomplete/placeholder.d.ts.map +1 -0
  33. package/dist/types/src/extensions/autocomplete/typeahead.d.ts +10 -0
  34. package/dist/types/src/extensions/autocomplete/typeahead.d.ts.map +1 -0
  35. package/dist/types/src/extensions/automerge/automerge.d.ts +1 -1
  36. package/dist/types/src/extensions/automerge/automerge.d.ts.map +1 -1
  37. package/dist/types/src/extensions/automerge/cursor.d.ts +1 -1
  38. package/dist/types/src/extensions/automerge/cursor.d.ts.map +1 -1
  39. package/dist/types/src/extensions/automerge/sync.d.ts +3 -3
  40. package/dist/types/src/extensions/automerge/sync.d.ts.map +1 -1
  41. package/dist/types/src/extensions/automerge/update-automerge.d.ts +1 -1
  42. package/dist/types/src/extensions/automerge/update-automerge.d.ts.map +1 -1
  43. package/dist/types/src/extensions/autoscroll.d.ts +2 -2
  44. package/dist/types/src/extensions/autoscroll.d.ts.map +1 -1
  45. package/dist/types/src/extensions/awareness/awareness-provider.d.ts +1 -1
  46. package/dist/types/src/extensions/awareness/awareness-provider.d.ts.map +1 -1
  47. package/dist/types/src/extensions/factories.d.ts +9 -4
  48. package/dist/types/src/extensions/factories.d.ts.map +1 -1
  49. package/dist/types/src/extensions/index.d.ts +2 -3
  50. package/dist/types/src/extensions/index.d.ts.map +1 -1
  51. package/dist/types/src/extensions/json.d.ts +1 -1
  52. package/dist/types/src/extensions/json.d.ts.map +1 -1
  53. package/dist/types/src/extensions/listener.d.ts +8 -6
  54. package/dist/types/src/extensions/listener.d.ts.map +1 -1
  55. package/dist/types/src/extensions/markdown/bundle.d.ts.map +1 -1
  56. package/dist/types/src/extensions/markdown/formatting.d.ts +1 -2
  57. package/dist/types/src/extensions/markdown/formatting.d.ts.map +1 -1
  58. package/dist/types/src/extensions/modes.d.ts +1 -1
  59. package/dist/types/src/extensions/modes.d.ts.map +1 -1
  60. package/dist/types/src/extensions/outliner/menu.d.ts +8 -0
  61. package/dist/types/src/extensions/outliner/menu.d.ts.map +1 -0
  62. package/dist/types/src/extensions/popover/PopoverMenuProvider.d.ts +36 -0
  63. package/dist/types/src/extensions/popover/PopoverMenuProvider.d.ts.map +1 -0
  64. package/dist/types/src/extensions/popover/index.d.ts +8 -0
  65. package/dist/types/src/extensions/popover/index.d.ts.map +1 -0
  66. package/dist/types/src/extensions/popover/menu-presets.d.ts +4 -0
  67. package/dist/types/src/extensions/popover/menu-presets.d.ts.map +1 -0
  68. package/dist/types/src/extensions/popover/menu.d.ts +24 -0
  69. package/dist/types/src/extensions/popover/menu.d.ts.map +1 -0
  70. package/dist/types/src/extensions/popover/modal.d.ts +7 -0
  71. package/dist/types/src/extensions/popover/modal.d.ts.map +1 -0
  72. package/dist/types/src/extensions/popover/popover.d.ts +47 -0
  73. package/dist/types/src/extensions/popover/popover.d.ts.map +1 -0
  74. package/dist/types/src/extensions/popover/usePopoverMenu.d.ts +34 -0
  75. package/dist/types/src/extensions/popover/usePopoverMenu.d.ts.map +1 -0
  76. package/dist/types/src/extensions/popover/util.d.ts +8 -0
  77. package/dist/types/src/extensions/popover/util.d.ts.map +1 -0
  78. package/dist/types/src/extensions/preview/preview.d.ts +6 -3
  79. package/dist/types/src/extensions/preview/preview.d.ts.map +1 -1
  80. package/dist/types/src/extensions/state.d.ts +2 -0
  81. package/dist/types/src/extensions/state.d.ts.map +1 -0
  82. package/dist/types/src/hooks/useTextEditor.d.ts +2 -6
  83. package/dist/types/src/hooks/useTextEditor.d.ts.map +1 -1
  84. package/dist/types/src/stories/CommandDialog.stories.d.ts.map +1 -1
  85. package/dist/types/src/stories/Comments.stories.d.ts +2 -2
  86. package/dist/types/src/stories/EditorToolbar.stories.d.ts.map +1 -1
  87. package/dist/types/src/stories/Experimental.stories.d.ts +2 -2
  88. package/dist/types/src/stories/Markdown.stories.d.ts +2 -2
  89. package/dist/types/src/stories/Outliner.stories.d.ts.map +1 -1
  90. package/dist/types/src/stories/{CommandMenu.stories.d.ts → Popover.stories.d.ts} +6 -5
  91. package/dist/types/src/stories/Popover.stories.d.ts.map +1 -0
  92. package/dist/types/src/stories/Preview.stories.d.ts +2 -2
  93. package/dist/types/src/stories/Preview.stories.d.ts.map +1 -1
  94. package/dist/types/src/stories/TextEditor.stories.d.ts +2 -3
  95. package/dist/types/src/stories/TextEditor.stories.d.ts.map +1 -1
  96. package/dist/types/src/stories/components/EditorStory.d.ts +3 -3
  97. package/dist/types/src/stories/components/EditorStory.d.ts.map +1 -1
  98. package/dist/types/src/styles/theme.d.ts.map +1 -1
  99. package/dist/types/src/testing/PreviewPopover.d.ts.map +1 -1
  100. package/dist/types/src/types/types.d.ts +1 -1
  101. package/dist/types/src/types/types.d.ts.map +1 -1
  102. package/dist/types/tsconfig.tsbuildinfo +1 -1
  103. package/package.json +41 -38
  104. package/src/components/Editor/Editor.stories.tsx +69 -0
  105. package/src/components/Editor/Editor.tsx +25 -17
  106. package/src/components/EditorToolbar/EditorToolbar.tsx +88 -87
  107. package/src/components/EditorToolbar/headings.ts +6 -4
  108. package/src/components/EditorToolbar/util.ts +2 -18
  109. package/src/components/index.ts +0 -1
  110. package/src/extensions/{autocomplete.ts → autocomplete/autocomplete.ts} +1 -0
  111. package/src/extensions/autocomplete/index.ts +8 -0
  112. package/src/extensions/autocomplete/match.ts +46 -0
  113. package/src/extensions/{command-menu → autocomplete}/placeholder.ts +21 -17
  114. package/src/extensions/{command-dialog → autocomplete}/typeahead.ts +6 -48
  115. package/src/extensions/automerge/automerge.ts +28 -9
  116. package/src/extensions/automerge/cursor.ts +1 -1
  117. package/src/extensions/automerge/sync.ts +8 -4
  118. package/src/extensions/automerge/update-automerge.ts +1 -1
  119. package/src/extensions/autoscroll.ts +3 -3
  120. package/src/extensions/awareness/awareness-provider.ts +2 -2
  121. package/src/extensions/factories.ts +18 -10
  122. package/src/extensions/hashtag.tsx +2 -2
  123. package/src/extensions/index.ts +2 -3
  124. package/src/extensions/json.ts +1 -1
  125. package/src/extensions/listener.ts +14 -20
  126. package/src/extensions/markdown/bundle.ts +14 -2
  127. package/src/extensions/markdown/formatting.ts +8 -8
  128. package/src/extensions/modes.ts +2 -2
  129. package/src/extensions/{floating-menu.ts → outliner/menu.ts} +7 -5
  130. package/src/extensions/outliner/outliner.ts +2 -2
  131. package/src/extensions/popover/PopoverMenuProvider.tsx +220 -0
  132. package/src/extensions/popover/index.ts +12 -0
  133. package/src/extensions/popover/menu-presets.ts +124 -0
  134. package/src/extensions/popover/menu.ts +67 -0
  135. package/src/extensions/popover/modal.ts +24 -0
  136. package/src/extensions/popover/popover.ts +289 -0
  137. package/src/extensions/popover/usePopoverMenu.ts +173 -0
  138. package/src/extensions/popover/util.ts +29 -0
  139. package/src/extensions/preview/index.ts +1 -1
  140. package/src/extensions/preview/preview.ts +10 -7
  141. package/src/extensions/state.ts +7 -0
  142. package/src/hooks/useTextEditor.ts +21 -21
  143. package/src/stories/CommandDialog.stories.tsx +3 -14
  144. package/src/stories/EditorToolbar.stories.tsx +4 -5
  145. package/src/stories/Outliner.stories.tsx +16 -9
  146. package/src/stories/Popover.stories.tsx +163 -0
  147. package/src/stories/Preview.stories.tsx +15 -8
  148. package/src/stories/TextEditor.stories.tsx +3 -29
  149. package/src/stories/components/EditorStory.tsx +5 -3
  150. package/src/styles/theme.ts +2 -1
  151. package/src/testing/PreviewPopover.tsx +2 -0
  152. package/src/types/types.ts +1 -1
  153. package/dist/lib/browser/chunk-22UMM3QJ.mjs.map +0 -7
  154. package/dist/lib/node-esm/chunk-YXYQPV6R.mjs.map +0 -7
  155. package/dist/types/src/components/CommandMenu/CommandMenu.d.ts +0 -38
  156. package/dist/types/src/components/CommandMenu/CommandMenu.d.ts.map +0 -1
  157. package/dist/types/src/components/CommandMenu/index.d.ts +0 -2
  158. package/dist/types/src/components/CommandMenu/index.d.ts.map +0 -1
  159. package/dist/types/src/extensions/autocomplete.d.ts.map +0 -1
  160. package/dist/types/src/extensions/command-dialog/action.d.ts +0 -17
  161. package/dist/types/src/extensions/command-dialog/action.d.ts.map +0 -1
  162. package/dist/types/src/extensions/command-dialog/command-dialog.d.ts +0 -6
  163. package/dist/types/src/extensions/command-dialog/command-dialog.d.ts.map +0 -1
  164. package/dist/types/src/extensions/command-dialog/hint.d.ts +0 -19
  165. package/dist/types/src/extensions/command-dialog/hint.d.ts.map +0 -1
  166. package/dist/types/src/extensions/command-dialog/index.d.ts +0 -4
  167. package/dist/types/src/extensions/command-dialog/index.d.ts.map +0 -1
  168. package/dist/types/src/extensions/command-dialog/state.d.ts +0 -16
  169. package/dist/types/src/extensions/command-dialog/state.d.ts.map +0 -1
  170. package/dist/types/src/extensions/command-dialog/typeahead.d.ts +0 -22
  171. package/dist/types/src/extensions/command-dialog/typeahead.d.ts.map +0 -1
  172. package/dist/types/src/extensions/command-menu/command-menu.d.ts +0 -20
  173. package/dist/types/src/extensions/command-menu/command-menu.d.ts.map +0 -1
  174. package/dist/types/src/extensions/command-menu/index.d.ts +0 -3
  175. package/dist/types/src/extensions/command-menu/index.d.ts.map +0 -1
  176. package/dist/types/src/extensions/command-menu/placeholder.d.ts +0 -10
  177. package/dist/types/src/extensions/command-menu/placeholder.d.ts.map +0 -1
  178. package/dist/types/src/extensions/command-menu/useCommandMenu.d.ts +0 -24
  179. package/dist/types/src/extensions/command-menu/useCommandMenu.d.ts.map +0 -1
  180. package/dist/types/src/extensions/floating-menu.d.ts +0 -7
  181. package/dist/types/src/extensions/floating-menu.d.ts.map +0 -1
  182. package/dist/types/src/stories/CommandMenu.stories.d.ts.map +0 -1
  183. package/src/components/CommandMenu/CommandMenu.tsx +0 -348
  184. package/src/components/CommandMenu/index.ts +0 -5
  185. package/src/extensions/command-dialog/action.ts +0 -55
  186. package/src/extensions/command-dialog/command-dialog.ts +0 -34
  187. package/src/extensions/command-dialog/hint.ts +0 -103
  188. package/src/extensions/command-dialog/index.ts +0 -7
  189. package/src/extensions/command-dialog/state.ts +0 -90
  190. package/src/extensions/command-menu/command-menu.ts +0 -210
  191. package/src/extensions/command-menu/index.ts +0 -6
  192. package/src/extensions/command-menu/useCommandMenu.ts +0 -134
  193. package/src/stories/CommandMenu.stories.tsx +0 -158
  194. /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
- useFormattingState,
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
- trackFormatting,
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} viewMode={handleViewModeChange} />}
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.\n\n',
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 { type CommandMenuGroup, type CommandMenuItem, CommandMenuProvider } from '../components';
13
- import { deleteItem, hashtag, listItemToString, outliner, treeFacet } from '../extensions';
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: CommandMenuGroup[] = useMemo(
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
- <CommandMenuProvider
51
+ <PopoverMenuProvider
52
+ view={viewRef.current}
45
53
  groups={commandGroups}
46
- onSelect={(item: CommandMenuItem) => {
47
- if (viewRef.current && item.onSelect) {
48
- return item.onSelect(viewRef.current, viewRef.current.state.selection.main.head);
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
- </CommandMenuProvider>
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 { type PreviewLinkRef, type PreviewLinkTarget, getLinkRef, image, preview } from '../extensions';
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 PreviewBlock = ({ link, el, view }: { link: PreviewLinkRef; el: HTMLElement; view?: EditorView }) => {
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<{ link: PreviewLinkRef; el: HTMLElement }[]>([]);
190
+ const [previewBlocks, setPreviewBlocks] = useState<PreviewBlock[]>([]);
184
191
  const extensions = useMemo(() => {
185
192
  return [
186
193
  image(),
187
194
  preview({
188
- addBlockContainer: (link, el) => {
189
- setPreviewBlocks((prev) => [...prev, { link, el }]);
195
+ addBlockContainer: (block) => {
196
+ setPreviewBlocks((prev) => [...prev, block]);
190
197
  },
191
- removeBlockContainer: (link) => {
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
- <PreviewBlock key={link.ref} link={link} el={el} view={view} />
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 = ['type', 'AND', 'OR', 'NOT', 'dxos.org'];
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 { Expando } from '@dxos/echo-schema';
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
  ],
@@ -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 };
@@ -3,7 +3,7 @@
3
3
  //
4
4
 
5
5
  import { type EditorView } from '@codemirror/view';
6
- import { Schema } from 'effect';
6
+ import * as Schema from 'effect/Schema';
7
7
 
8
8
  // Runtime data structure.
9
9
  export type Range = {
@@ -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,2 +0,0 @@
1
- export * from './CommandMenu';
2
- //# sourceMappingURL=index.d.ts.map
@@ -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,4 +0,0 @@
1
- export * from './command-dialog';
2
- export { type Action } from './action';
3
- export * from './typeahead';
4
- //# sourceMappingURL=index.d.ts.map
@@ -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"}