@dxos/react-ui-editor 0.8.2-main.f11618f → 0.8.2-main.fbd8ed0

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 (125) hide show
  1. package/dist/lib/browser/index.mjs +1662 -1357
  2. package/dist/lib/browser/index.mjs.map +4 -4
  3. package/dist/lib/browser/meta.json +1 -1
  4. package/dist/lib/node/index.cjs +2175 -1872
  5. package/dist/lib/node/index.cjs.map +4 -4
  6. package/dist/lib/node/meta.json +1 -1
  7. package/dist/lib/node-esm/index.mjs +1662 -1357
  8. package/dist/lib/node-esm/index.mjs.map +4 -4
  9. package/dist/lib/node-esm/meta.json +1 -1
  10. package/dist/types/src/components/EditorToolbar/EditorToolbar.d.ts +1 -1
  11. package/dist/types/src/components/EditorToolbar/EditorToolbar.d.ts.map +1 -1
  12. package/dist/types/src/{stories/InputMode.stories.d.ts → components/EditorToolbar/EditorToolbar.stories.d.ts} +3 -7
  13. package/dist/types/src/components/EditorToolbar/EditorToolbar.stories.d.ts.map +1 -0
  14. package/dist/types/src/components/EditorToolbar/blocks.d.ts +4 -3
  15. package/dist/types/src/components/EditorToolbar/blocks.d.ts.map +1 -1
  16. package/dist/types/src/components/EditorToolbar/comment.d.ts +4 -3
  17. package/dist/types/src/components/EditorToolbar/comment.d.ts.map +1 -1
  18. package/dist/types/src/components/EditorToolbar/formatting.d.ts +4 -3
  19. package/dist/types/src/components/EditorToolbar/formatting.d.ts.map +1 -1
  20. package/dist/types/src/components/EditorToolbar/headings.d.ts +4 -3
  21. package/dist/types/src/components/EditorToolbar/headings.d.ts.map +1 -1
  22. package/dist/types/src/components/EditorToolbar/image.d.ts +16 -0
  23. package/dist/types/src/components/EditorToolbar/image.d.ts.map +1 -0
  24. package/dist/types/src/components/EditorToolbar/lists.d.ts +4 -3
  25. package/dist/types/src/components/EditorToolbar/lists.d.ts.map +1 -1
  26. package/dist/types/src/components/EditorToolbar/search.d.ts +17 -0
  27. package/dist/types/src/components/EditorToolbar/search.d.ts.map +1 -0
  28. package/dist/types/src/components/EditorToolbar/util.d.ts +11 -17
  29. package/dist/types/src/components/EditorToolbar/util.d.ts.map +1 -1
  30. package/dist/types/src/components/EditorToolbar/view-mode.d.ts +4 -3
  31. package/dist/types/src/components/EditorToolbar/view-mode.d.ts.map +1 -1
  32. package/dist/types/src/defaults.d.ts.map +1 -1
  33. package/dist/types/src/extensions/annotations.d.ts.map +1 -1
  34. package/dist/types/src/extensions/autocomplete.d.ts.map +1 -1
  35. package/dist/types/src/extensions/automerge/automerge.d.ts.map +1 -1
  36. package/dist/types/src/extensions/automerge/automerge.stories.d.ts.map +1 -1
  37. package/dist/types/src/extensions/automerge/cursor.d.ts.map +1 -1
  38. package/dist/types/src/extensions/automerge/defs.d.ts +1 -1
  39. package/dist/types/src/extensions/automerge/defs.d.ts.map +1 -1
  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/automerge/update-codemirror.d.ts +1 -1
  44. package/dist/types/src/extensions/automerge/update-codemirror.d.ts.map +1 -1
  45. package/dist/types/src/extensions/awareness/awareness.d.ts.map +1 -1
  46. package/dist/types/src/extensions/blast.d.ts.map +1 -1
  47. package/dist/types/src/extensions/command/command.d.ts.map +1 -1
  48. package/dist/types/src/extensions/command/hint.d.ts.map +1 -1
  49. package/dist/types/src/extensions/command/menu.d.ts.map +1 -1
  50. package/dist/types/src/extensions/comments.d.ts.map +1 -1
  51. package/dist/types/src/extensions/debug.d.ts.map +1 -1
  52. package/dist/types/src/extensions/dnd.d.ts.map +1 -1
  53. package/dist/types/src/extensions/factories.d.ts.map +1 -1
  54. package/dist/types/src/extensions/folding.d.ts.map +1 -1
  55. package/dist/types/src/extensions/listener.d.ts.map +1 -1
  56. package/dist/types/src/extensions/markdown/bundle.d.ts.map +1 -1
  57. package/dist/types/src/extensions/markdown/changes.d.ts.map +1 -1
  58. package/dist/types/src/extensions/markdown/debug.d.ts.map +1 -1
  59. package/dist/types/src/extensions/markdown/decorate.d.ts +1 -0
  60. package/dist/types/src/extensions/markdown/decorate.d.ts.map +1 -1
  61. package/dist/types/src/extensions/markdown/formatting.d.ts +1 -1
  62. package/dist/types/src/extensions/markdown/formatting.d.ts.map +1 -1
  63. package/dist/types/src/extensions/markdown/highlight.d.ts.map +1 -1
  64. package/dist/types/src/extensions/markdown/image.d.ts.map +1 -1
  65. package/dist/types/src/extensions/markdown/index.d.ts +1 -0
  66. package/dist/types/src/extensions/markdown/index.d.ts.map +1 -1
  67. package/dist/types/src/extensions/markdown/link.d.ts.map +1 -1
  68. package/dist/types/src/extensions/markdown/outliner.d.ts +12 -0
  69. package/dist/types/src/extensions/markdown/outliner.d.ts.map +1 -0
  70. package/dist/types/src/extensions/markdown/table.d.ts.map +1 -1
  71. package/dist/types/src/extensions/mention.d.ts.map +1 -1
  72. package/dist/types/src/extensions/modes.d.ts +5 -5
  73. package/dist/types/src/extensions/modes.d.ts.map +1 -1
  74. package/dist/types/src/extensions/preview/preview.d.ts.map +1 -1
  75. package/dist/types/src/extensions/selection.d.ts.map +1 -1
  76. package/dist/types/src/extensions/typewriter.d.ts.map +1 -1
  77. package/dist/types/src/hooks/index.d.ts +0 -1
  78. package/dist/types/src/hooks/index.d.ts.map +1 -1
  79. package/dist/types/src/hooks/useTextEditor.d.ts.map +1 -1
  80. package/dist/types/src/stories/TextEditorBasic.stories.d.ts +3 -0
  81. package/dist/types/src/stories/TextEditorBasic.stories.d.ts.map +1 -1
  82. package/dist/types/src/stories/story-utils.d.ts.map +1 -1
  83. package/dist/types/src/styles/theme.d.ts.map +1 -1
  84. package/dist/types/src/util/cursor.d.ts.map +1 -1
  85. package/dist/types/src/util/debug.d.ts.map +1 -1
  86. package/dist/types/src/util/dom.d.ts.map +1 -1
  87. package/dist/types/src/util/facet.d.ts.map +1 -1
  88. package/dist/types/src/util/react.d.ts.map +1 -1
  89. package/dist/types/tsconfig.tsbuildinfo +1 -1
  90. package/package.json +32 -28
  91. package/src/components/EditorToolbar/EditorToolbar.stories.tsx +90 -0
  92. package/src/components/EditorToolbar/EditorToolbar.tsx +31 -32
  93. package/src/components/EditorToolbar/blocks.ts +27 -6
  94. package/src/components/EditorToolbar/comment.ts +11 -4
  95. package/src/components/EditorToolbar/formatting.ts +34 -7
  96. package/src/components/EditorToolbar/headings.ts +9 -8
  97. package/src/components/EditorToolbar/image.ts +16 -0
  98. package/src/components/EditorToolbar/lists.ts +26 -7
  99. package/src/components/EditorToolbar/search.ts +19 -0
  100. package/src/components/EditorToolbar/util.ts +14 -14
  101. package/src/components/EditorToolbar/view-mode.ts +9 -8
  102. package/src/defaults.ts +1 -1
  103. package/src/extensions/automerge/automerge.stories.tsx +9 -7
  104. package/src/extensions/automerge/automerge.test.tsx +4 -4
  105. package/src/extensions/automerge/automerge.ts +2 -2
  106. package/src/extensions/automerge/defs.ts +1 -2
  107. package/src/extensions/automerge/sync.ts +4 -4
  108. package/src/extensions/automerge/update-automerge.ts +1 -1
  109. package/src/extensions/automerge/update-codemirror.ts +3 -4
  110. package/src/extensions/markdown/changes.ts +3 -2
  111. package/src/extensions/markdown/decorate.ts +8 -7
  112. package/src/extensions/markdown/formatting.ts +4 -4
  113. package/src/extensions/markdown/index.ts +1 -0
  114. package/src/extensions/markdown/outliner.ts +235 -0
  115. package/src/extensions/markdown/styles.ts +2 -2
  116. package/src/extensions/modes.ts +5 -6
  117. package/src/hooks/index.ts +0 -1
  118. package/src/stories/TextEditorBasic.stories.tsx +44 -0
  119. package/src/stories/story-utils.tsx +7 -9
  120. package/src/styles/theme.ts +3 -0
  121. package/dist/types/src/hooks/useActionHandler.d.ts +0 -4
  122. package/dist/types/src/hooks/useActionHandler.d.ts.map +0 -1
  123. package/dist/types/src/stories/InputMode.stories.d.ts.map +0 -1
  124. package/src/hooks/useActionHandler.ts +0 -12
  125. package/src/stories/InputMode.stories.tsx +0 -124
@@ -2,5 +2,4 @@
2
2
  // Copyright 2023 DXOS.org
3
3
  //
4
4
 
5
- export * from './useActionHandler';
6
5
  export * from './useTextEditor';
@@ -38,6 +38,7 @@ import {
38
38
  table,
39
39
  autocomplete,
40
40
  mention,
41
+ outliner,
41
42
  } from '../extensions';
42
43
 
43
44
  const meta: Meta<typeof DefaultStory> = {
@@ -188,20 +189,63 @@ export const Lists = {
188
189
  ),
189
190
  };
190
191
 
192
+ //
193
+ // Bullet List
194
+ //
195
+
191
196
  export const BulletList = {
192
197
  render: () => <DefaultStory text={str(content.bullets, content.footer)} extensions={[decorateMarkdown()]} />,
193
198
  };
194
199
 
200
+ //
201
+ // Ordered List
202
+ //
203
+
195
204
  export const OrderedList = {
196
205
  render: () => <DefaultStory text={str(content.numbered, content.footer)} extensions={[decorateMarkdown()]} />,
197
206
  };
198
207
 
208
+ //
209
+ // Task List
210
+ //
211
+
199
212
  export const TaskList = {
200
213
  render: () => (
201
214
  <DefaultStory text={str(content.tasks, content.footer)} extensions={[decorateMarkdown()]} debug='raw+tree' />
202
215
  ),
203
216
  };
204
217
 
218
+ //
219
+ // Outliner
220
+ //
221
+
222
+ export const Outliner = {
223
+ render: () => (
224
+ <DefaultStory
225
+ // text={str(...content.tasks.split('\n').filter((line) => line.trim().startsWith('-')))}
226
+ text={str(
227
+ //
228
+ '- [ ] A',
229
+ '- [ ] B',
230
+ // Continuation lines.
231
+ ' ## Example',
232
+ ' Continuation line belonging to B.',
233
+ ' ```ts',
234
+ ' const x = 100',
235
+ ' ```',
236
+ ' - [ ] C',
237
+ ' - D Items can have links [like this](https://example.com).',
238
+ )}
239
+ extensions={[decorateMarkdown({ listPaddingLeft: 8 }), outliner()]}
240
+ debug='raw+tree'
241
+ />
242
+ ),
243
+ };
244
+
245
+ //
246
+ // Table
247
+ //
248
+
205
249
  export const Table = {
206
250
  render: () => <DefaultStory text={str(content.table, content.footer)} extensions={[decorateMarkdown(), table()]} />,
207
251
  };
@@ -17,21 +17,19 @@ import { mx } from '@dxos/react-ui-theme';
17
17
 
18
18
  import { editorContent, editorGutter } from '../defaults';
19
19
  import {
20
- type EditorSelectionState,
21
20
  type DebugNode,
22
- decorateMarkdown,
23
- formattingKeymap,
24
- linkTooltip,
25
- image,
26
- table,
27
- folding,
28
- } from '../extensions';
29
- import {
21
+ type EditorSelectionState,
30
22
  createDataExtensions,
31
23
  createBasicExtensions,
32
24
  createMarkdownExtensions,
33
25
  createThemeExtensions,
26
+ decorateMarkdown,
34
27
  debugTree,
28
+ folding,
29
+ formattingKeymap,
30
+ image,
31
+ linkTooltip,
32
+ table,
35
33
  } from '../extensions';
36
34
  import { useTextEditor, type UseTextEditorProps } from '../hooks';
37
35
  import { createRenderer } from '../util';
@@ -119,6 +119,9 @@ export const defaultTheme: ThemeStyles = {
119
119
  '.cm-selectionBackground': {
120
120
  background: 'var(--dx-cmSelection)',
121
121
  },
122
+ '&.cm-focused > .cm-scroller > .cm-selectionLayer .cm-selectionBackground': {
123
+ background: 'var(--dx-cmFocusedSelection)',
124
+ },
122
125
 
123
126
  /**
124
127
  * Search.
@@ -1,4 +0,0 @@
1
- import { type EditorView } from '@codemirror/view';
2
- import { type EditorAction } from '../extensions';
3
- export declare const useActionHandler: (view?: EditorView | null) => (action: EditorAction) => void | null | undefined;
4
- //# sourceMappingURL=useActionHandler.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"useActionHandler.d.ts","sourceRoot":"","sources":["../../../../src/hooks/useActionHandler.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,KAAK,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAGnD,OAAO,EAAE,KAAK,YAAY,EAAwB,MAAM,eAAe,CAAC;AAExE,eAAO,MAAM,gBAAgB,UAAW,UAAU,GAAG,IAAI,cAC3B,YAAY,4BACzC,CAAC"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"InputMode.stories.d.ts","sourceRoot":"","sources":["../../../../src/stories/InputMode.stories.tsx"],"names":[],"mappings":"AAIA,OAAO,aAAa,CAAC;AAErB,OAAO,KAAmB,MAAM,OAAO,CAAC;AAiBxC,OAAO,EAAmC,KAAK,kBAAkB,EAAE,MAAM,UAAU,CAAC;AAGpF,KAAK,UAAU,GAAG;IAAE,WAAW,CAAC,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,EAAE,OAAO,CAAA;CAAE,GAAG,kBAAkB,CAAC;AAqEpF,eAAO,MAAM,OAAO;;CAanB,CAAC;AAEF,eAAO,MAAM,QAAQ;;;;;;CAMpB,CAAC;;;iEAxFwE,UAAU;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA0FpF,wBAKE"}
@@ -1,12 +0,0 @@
1
- //
2
- // Copyright 2024 DXOS.org
3
- //
4
-
5
- import { type EditorView } from '@codemirror/view';
6
- import { useCallback } from 'react';
7
-
8
- import { type EditorAction, processEditorPayload } from '../extensions';
9
-
10
- export const useActionHandler = (view?: EditorView | null) => {
11
- return useCallback((action: EditorAction) => view && processEditorPayload(view, action.properties), [view]);
12
- };
@@ -1,124 +0,0 @@
1
- //
2
- // Copyright 2024 DXOS.org
3
- //
4
-
5
- import '@dxos-theme';
6
-
7
- import React, { useState } from 'react';
8
-
9
- import { Toolbar as NaturalToolbar, Select, useThemeContext } from '@dxos/react-ui';
10
- import { attentionSurface, mx } from '@dxos/react-ui-theme';
11
- import { withLayout, withTheme } from '@dxos/storybook-utils';
12
-
13
- import { EditorToolbar, useEditorToolbarState } from '../components';
14
- import {
15
- type EditorInputMode,
16
- decorateMarkdown,
17
- createMarkdownExtensions,
18
- formattingKeymap,
19
- useFormattingState,
20
- createBasicExtensions,
21
- createThemeExtensions,
22
- InputModeExtensions,
23
- } from '../extensions';
24
- import { useActionHandler, useTextEditor, type UseTextEditorProps } from '../hooks';
25
- import translations from '../translations';
26
-
27
- type StoryProps = { placeholder?: string; readOnly?: boolean } & UseTextEditorProps;
28
-
29
- const DefaultStory = ({ autoFocus, initialValue, placeholder, readOnly }: StoryProps) => {
30
- const { themeMode } = useThemeContext();
31
- const toolbarState = useEditorToolbarState({ viewMode: 'source' });
32
- const trackFormatting = useFormattingState(toolbarState);
33
- const [editorInputMode, _setEditorInputMode] = useState<EditorInputMode>('default');
34
- const { parentRef, view } = useTextEditor(
35
- () => ({
36
- autoFocus,
37
- initialValue,
38
- moveToEndOfLine: true,
39
- extensions: [
40
- editorInputMode ? InputModeExtensions[editorInputMode] : [],
41
- createBasicExtensions({ placeholder, lineWrapping: true, readOnly }),
42
- createMarkdownExtensions({ themeMode }),
43
- createThemeExtensions({ themeMode, syntaxHighlighting: true }),
44
- decorateMarkdown(),
45
- formattingKeymap(),
46
- trackFormatting,
47
- ],
48
- }),
49
- [editorInputMode, themeMode, placeholder, readOnly],
50
- );
51
-
52
- const handleAction = useActionHandler(view);
53
-
54
- // TODO(marijn): This doesn't update the state on view changes.
55
- // Also not sure if view is even guaranteed to exist at this point.
56
- return (
57
- <div role='none' className={mx('fixed inset-0 flex flex-col')}>
58
- {toolbarState && <EditorToolbar onAction={handleAction} state={toolbarState} />}
59
- <div role='none' className='grow overflow-hidden'>
60
- <div className={attentionSurface} ref={parentRef} />
61
- </div>
62
- </div>
63
- );
64
- };
65
-
66
- const _EditorInputModeToolbar = ({
67
- editorInputMode,
68
- setEditorInputMode,
69
- }: {
70
- editorInputMode: EditorInputMode;
71
- setEditorInputMode: (mode: EditorInputMode) => void;
72
- }) => {
73
- return (
74
- <Select.Root value={editorInputMode} onValueChange={(value) => setEditorInputMode(value as EditorInputMode)}>
75
- <NaturalToolbar.Button asChild>
76
- <Select.TriggerButton variant='ghost'>{editorInputMode}</Select.TriggerButton>
77
- </NaturalToolbar.Button>
78
- <Select.Portal>
79
- <Select.Content>
80
- <Select.ScrollUpButton />
81
- <Select.Viewport>
82
- {['default', 'vim'].map((mode) => (
83
- <Select.Option key={mode} value={mode}>
84
- {mode}
85
- </Select.Option>
86
- ))}
87
- </Select.Viewport>
88
- <Select.ScrollDownButton />
89
- <Select.Arrow />
90
- </Select.Content>
91
- </Select.Portal>
92
- </Select.Root>
93
- );
94
- };
95
-
96
- export const Default = {
97
- render: () => {
98
- const { themeMode } = useThemeContext();
99
- const { parentRef } = useTextEditor({
100
- extensions: [
101
- //
102
- createBasicExtensions({ placeholder: 'Enter text...' }),
103
- createThemeExtensions({ themeMode }),
104
- ],
105
- });
106
-
107
- return <div ref={parentRef} className={attentionSurface} />;
108
- },
109
- };
110
-
111
- export const Markdown = {
112
- args: {
113
- autoFocus: true,
114
- placeholder: 'Text...',
115
- initialValue: '# Demo\n\nThis is a document.\n\n',
116
- },
117
- };
118
-
119
- export default {
120
- title: 'ui/react-ui-editor/InputMode',
121
- render: DefaultStory,
122
- decorators: [withTheme, withLayout({ fullscreen: true, tooltips: true })],
123
- parameters: { translations, layout: 'fullscreen' },
124
- };