@dxos/react-ui-editor 0.3.11-main.3ac0bc5 → 0.3.11-main.3cb6acf

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 (135) hide show
  1. package/dist/lib/browser/index.mjs +757 -910
  2. package/dist/lib/browser/index.mjs.map +4 -4
  3. package/dist/lib/browser/meta.json +1 -1
  4. package/dist/types/src/components/TextEditor/MarkdownEditor.stories.d.ts +16 -13
  5. package/dist/types/src/components/TextEditor/MarkdownEditor.stories.d.ts.map +1 -1
  6. package/dist/types/src/components/TextEditor/TextEditor.d.ts +20 -17
  7. package/dist/types/src/components/TextEditor/TextEditor.d.ts.map +1 -1
  8. package/dist/types/src/components/TextEditor/TextEditor.stories.d.ts +6 -6
  9. package/dist/types/src/components/TextEditor/TextEditor.stories.d.ts.map +1 -1
  10. package/dist/types/src/components/TextEditor/comments.stories.d.ts +26 -0
  11. package/dist/types/src/components/TextEditor/comments.stories.d.ts.map +1 -0
  12. package/dist/types/src/extensions/autocomplete.d.ts.map +1 -1
  13. package/dist/types/src/extensions/automerge/automerge.d.ts.map +1 -1
  14. package/dist/types/src/extensions/automerge/cursor.d.ts +1 -1
  15. package/dist/types/src/extensions/automerge/cursor.d.ts.map +1 -1
  16. package/dist/types/src/extensions/automerge/defs.d.ts +7 -9
  17. package/dist/types/src/extensions/automerge/defs.d.ts.map +1 -1
  18. package/dist/types/src/extensions/automerge/semaphore.d.ts +7 -12
  19. package/dist/types/src/extensions/automerge/semaphore.d.ts.map +1 -1
  20. package/dist/types/src/extensions/automerge/update-automerge.d.ts +2 -2
  21. package/dist/types/src/extensions/awareness.d.ts +1 -1
  22. package/dist/types/src/extensions/awareness.d.ts.map +1 -1
  23. package/dist/types/src/extensions/basic.d.ts +4 -5
  24. package/dist/types/src/extensions/basic.d.ts.map +1 -1
  25. package/dist/types/src/extensions/code.d.ts.map +1 -1
  26. package/dist/types/src/extensions/comments.d.ts +32 -19
  27. package/dist/types/src/extensions/comments.d.ts.map +1 -1
  28. package/dist/types/src/{util → extensions}/cursor.d.ts +10 -2
  29. package/dist/types/src/extensions/cursor.d.ts.map +1 -0
  30. package/dist/types/src/extensions/hr.d.ts.map +1 -1
  31. package/dist/types/src/extensions/index.d.ts +2 -1
  32. package/dist/types/src/extensions/index.d.ts.map +1 -1
  33. package/dist/types/src/extensions/markdown/bundle.d.ts +2 -5
  34. package/dist/types/src/extensions/markdown/bundle.d.ts.map +1 -1
  35. package/dist/types/src/extensions/markdown/highlight.d.ts.map +1 -1
  36. package/dist/types/src/extensions/mention.d.ts.map +1 -1
  37. package/dist/types/src/extensions/outliner.d.ts +4 -0
  38. package/dist/types/src/extensions/outliner.d.ts.map +1 -0
  39. package/dist/types/src/extensions/tasklist.d.ts.map +1 -1
  40. package/dist/types/src/hooks/awareness-provider.d.ts +7 -4
  41. package/dist/types/src/hooks/awareness-provider.d.ts.map +1 -1
  42. package/dist/types/src/hooks/defs.d.ts +25 -0
  43. package/dist/types/src/hooks/defs.d.ts.map +1 -0
  44. package/dist/types/src/hooks/index.d.ts +2 -2
  45. package/dist/types/src/hooks/index.d.ts.map +1 -1
  46. package/dist/types/src/hooks/useTextEditor.d.ts +17 -0
  47. package/dist/types/src/hooks/useTextEditor.d.ts.map +1 -0
  48. package/dist/types/src/hooks/useTextModel.d.ts +2 -32
  49. package/dist/types/src/hooks/useTextModel.d.ts.map +1 -1
  50. package/dist/types/src/index.d.ts +2 -0
  51. package/dist/types/src/index.d.ts.map +1 -1
  52. package/dist/types/src/styles/markdown.d.ts.map +1 -1
  53. package/dist/types/src/themes/default.d.ts.map +1 -1
  54. package/dist/types/src/util.d.ts +7 -0
  55. package/dist/types/src/util.d.ts.map +1 -0
  56. package/package.json +33 -35
  57. package/src/components/TextEditor/MarkdownEditor.stories.tsx +77 -79
  58. package/src/components/TextEditor/TextEditor.stories.tsx +12 -46
  59. package/src/components/TextEditor/TextEditor.tsx +122 -93
  60. package/src/components/TextEditor/comments.stories.tsx +357 -0
  61. package/src/extensions/autocomplete.ts +6 -3
  62. package/src/extensions/automerge/automerge.ts +40 -46
  63. package/src/extensions/automerge/cursor.ts +2 -1
  64. package/src/extensions/automerge/defs.ts +10 -31
  65. package/src/extensions/automerge/semaphore.ts +23 -20
  66. package/src/extensions/automerge/update-automerge.ts +2 -2
  67. package/src/extensions/awareness.ts +40 -46
  68. package/src/extensions/basic.ts +22 -17
  69. package/src/extensions/code.ts +24 -18
  70. package/src/extensions/comments.ts +246 -238
  71. package/src/extensions/cursor.ts +50 -0
  72. package/src/extensions/hr.ts +49 -50
  73. package/src/extensions/image.ts +2 -2
  74. package/src/extensions/index.ts +2 -1
  75. package/src/extensions/link.ts +7 -7
  76. package/src/extensions/markdown/bundle.ts +18 -24
  77. package/src/extensions/markdown/highlight.ts +0 -8
  78. package/src/extensions/mention.ts +9 -2
  79. package/src/extensions/outliner.ts +12 -0
  80. package/src/extensions/table.ts +2 -2
  81. package/src/extensions/tasklist.ts +78 -86
  82. package/src/hooks/awareness-provider.ts +24 -20
  83. package/src/hooks/defs.ts +42 -0
  84. package/src/hooks/index.ts +3 -2
  85. package/src/hooks/useTextEditor.ts +29 -0
  86. package/src/hooks/useTextModel.ts +48 -60
  87. package/src/index.ts +2 -0
  88. package/src/styles/markdown.ts +0 -2
  89. package/src/themes/default.ts +17 -50
  90. package/src/util.ts +41 -0
  91. package/dist/types/src/components/TextEditor/codemirror.stories.d.ts +0 -12
  92. package/dist/types/src/components/TextEditor/codemirror.stories.d.ts.map +0 -1
  93. package/dist/types/src/components/TextEditor/yjs.stories.d.ts +0 -12
  94. package/dist/types/src/components/TextEditor/yjs.stories.d.ts.map +0 -1
  95. package/dist/types/src/extensions/yjs/cursor.d.ts +0 -4
  96. package/dist/types/src/extensions/yjs/cursor.d.ts.map +0 -1
  97. package/dist/types/src/extensions/yjs/index.d.ts +0 -2
  98. package/dist/types/src/extensions/yjs/index.d.ts.map +0 -1
  99. package/dist/types/src/extensions/yjs/yjs.d.ts +0 -4
  100. package/dist/types/src/extensions/yjs/yjs.d.ts.map +0 -1
  101. package/dist/types/src/extensions/yjs/yjs.test.d.ts +0 -2
  102. package/dist/types/src/extensions/yjs/yjs.test.d.ts.map +0 -1
  103. package/dist/types/src/hooks/automerge.d.ts +0 -3
  104. package/dist/types/src/hooks/automerge.d.ts.map +0 -1
  105. package/dist/types/src/hooks/yjs.d.ts +0 -27
  106. package/dist/types/src/hooks/yjs.d.ts.map +0 -1
  107. package/dist/types/src/testing/index.d.ts +0 -3
  108. package/dist/types/src/testing/index.d.ts.map +0 -1
  109. package/dist/types/src/testing/proto/gen/schema.d.ts +0 -15
  110. package/dist/types/src/testing/proto/gen/schema.d.ts.map +0 -1
  111. package/dist/types/src/testing/proto/index.d.ts +0 -2
  112. package/dist/types/src/testing/proto/index.d.ts.map +0 -1
  113. package/dist/types/src/testing/replicator.d.ts +0 -45
  114. package/dist/types/src/testing/replicator.d.ts.map +0 -1
  115. package/dist/types/src/util/cursor.d.ts.map +0 -1
  116. package/dist/types/src/util/index.d.ts +0 -3
  117. package/dist/types/src/util/index.d.ts.map +0 -1
  118. package/dist/types/src/util/util.d.ts +0 -5
  119. package/dist/types/src/util/util.d.ts.map +0 -1
  120. package/src/components/TextEditor/codemirror.stories.ts +0 -115
  121. package/src/components/TextEditor/yjs.stories.tsx +0 -56
  122. package/src/extensions/yjs/cursor.ts +0 -21
  123. package/src/extensions/yjs/index.ts +0 -5
  124. package/src/extensions/yjs/yjs.test.ts +0 -35
  125. package/src/extensions/yjs/yjs.ts +0 -16
  126. package/src/hooks/automerge.ts +0 -52
  127. package/src/hooks/yjs.ts +0 -178
  128. package/src/testing/index.ts +0 -6
  129. package/src/testing/proto/gen/schema.ts +0 -49
  130. package/src/testing/proto/index.ts +0 -5
  131. package/src/testing/proto/schema.proto +0 -15
  132. package/src/testing/replicator.ts +0 -184
  133. package/src/util/cursor.ts +0 -29
  134. package/src/util/index.ts +0 -6
  135. package/src/util/util.ts +0 -18
@@ -2,7 +2,8 @@
2
2
  // Copyright 2023 DXOS.org
3
3
  //
4
4
 
5
- export * from './automerge';
6
5
  export * from './awareness-provider';
6
+ export * from './defs';
7
+
8
+ export * from './useTextEditor';
7
9
  export * from './useTextModel';
8
- export * from './yjs';
@@ -0,0 +1,29 @@
1
+ //
2
+ // Copyright 2024 DXOS.org
3
+ //
4
+
5
+ import { type EditorView } from '@codemirror/view';
6
+ import { type RefCallback, useState } from 'react';
7
+
8
+ /**
9
+ * Hook for accessing the editor view.
10
+ *
11
+ * ```tsx
12
+ * const Test = () => {
13
+ * const [editorRef, editorView] = useTextEditor();
14
+ * useEffect(() => {
15
+ * editorView?.focus();
16
+ * }, [editorView]);
17
+ * return <TextEditor ref={editorRef} />;
18
+ * };
19
+ * ```
20
+ */
21
+ export const useTextEditor = (): [RefCallback<EditorView | null>, EditorView | null] => {
22
+ const [view, setView] = useState<EditorView | null>(null);
23
+ return [
24
+ (ref: EditorView | null) => {
25
+ setView(ref);
26
+ },
27
+ view,
28
+ ];
29
+ };
@@ -2,58 +2,20 @@
2
2
  // Copyright 2023 DXOS.org
3
3
  //
4
4
 
5
- import { StateField, type Extension } from '@codemirror/state';
5
+ import get from 'lodash.get';
6
6
  import { useEffect, useState } from 'react';
7
- import type * as YP from 'y-protocols/awareness';
8
7
 
9
- import { isAutomergeObject, type DocAccessor, type Space, type TextObject } from '@dxos/react-client/echo';
8
+ import { generateName } from '@dxos/display-name';
9
+ import { type AutomergeTextCompat, getRawDoc } from '@dxos/echo-schema';
10
+ import { invariant } from '@dxos/invariant';
11
+ import { isAutomergeObject, type Space, type TextObject } from '@dxos/react-client/echo';
10
12
  import { type Identity } from '@dxos/react-client/halo';
11
- import type { YText, YXmlFragment } from '@dxos/text-model';
13
+ import { isNotNullOrUndefined } from '@dxos/util';
12
14
 
13
- import { createAutomergeModel } from './automerge';
14
- import { createYjsModel } from './yjs';
15
-
16
- // TODO(burdon): Factor out defs.
17
-
18
- /**
19
- * State field makes the model available to other extensions.
20
- */
21
- export const modelState = StateField.define<EditorModel | undefined>({
22
- create: () => undefined,
23
- update: (model) => model,
24
- });
25
-
26
- export type Range = {
27
- from: number;
28
- to: number;
29
- };
30
-
31
- export type CommentRange = {
32
- id: string;
33
- cursor: string;
34
- };
35
-
36
- // TODO(wittjosiah): Factor out to common package? @dxos/react-client?
37
- export type EditorModel = {
38
- id: string;
39
- text: () => string;
40
- extension?: Extension;
41
-
42
- // TODO(burdon): Remove.
43
- content: string | YText | YXmlFragment | DocAccessor;
44
- /**
45
- * @deprecated Use CursorConverter.
46
- */
47
- getCursorFromRange?: (value: Range) => string;
48
- getRangeFromCursor?: (cursor: string) => Range | undefined;
49
- // TODO(burdon): Move into extension.
50
- awareness?: YP.Awareness;
51
- // TODO(burdon): Remove.
52
- peer?: {
53
- id: string;
54
- name?: string;
55
- };
56
- };
15
+ import { SpaceAwarenessProvider } from './awareness-provider';
16
+ import { type EditorModel, modelState } from './defs';
17
+ import { automerge, awareness, AwarenessProvider } from '../extensions';
18
+ import { cursorColor } from '../styles';
57
19
 
58
20
  // TODO(burdon): Remove space/identity dependency. Define interface for the framework re content and presence.
59
21
  export type UseTextModelProps = {
@@ -62,22 +24,48 @@ export type UseTextModelProps = {
62
24
  text?: TextObject;
63
25
  };
64
26
 
65
- // TODO(burdon): Remove YJS/Automerge deps (from UI component -- create abstraction; incl. all ECHO/Space deps).
66
- // TODO(wittjosiah): Factor out to common package? @dxos/react-client?
67
27
  export const useTextModel = (props: UseTextModelProps): EditorModel | undefined => {
68
28
  const { identity, space, text } = props;
69
- const [model, setModel] = useState<EditorModel | undefined>(() => createModel(props));
29
+ const [model, setModel] = useState<EditorModel | undefined>();
70
30
  useEffect(() => setModel(createModel(props)), [identity, space, text]);
71
31
  return model;
72
32
  };
73
33
 
74
- const createModel = (props: UseTextModelProps) => {
75
- const { text } = props;
76
- if (isAutomergeObject(text)) {
77
- return createAutomergeModel(props);
78
- } else if (text?.doc) {
79
- return createYjsModel(props);
80
- } else {
81
- return undefined;
82
- }
34
+ const createModel = ({ space, identity, text }: UseTextModelProps) => {
35
+ invariant(isAutomergeObject(text));
36
+ const obj = text as any as AutomergeTextCompat;
37
+ const doc = getRawDoc(obj, [obj.field]);
38
+
39
+ const awarenessProvider =
40
+ space &&
41
+ new SpaceAwarenessProvider({
42
+ space,
43
+ channel: `automerge.awareness.${obj.id}`,
44
+ info: {
45
+ displayName: identity ? identity.profile?.displayName ?? generateName(identity.identityKey.toHex()) : undefined,
46
+ color: cursorColor.color,
47
+ lightColor: cursorColor.light,
48
+ },
49
+ peerId: identity?.identityKey.toHex() ?? 'Anonymous',
50
+ });
51
+
52
+ const model: EditorModel = {
53
+ id: obj.id,
54
+ content: doc,
55
+ text: () => get(doc.handle.docSync(), doc.path),
56
+ extension: [
57
+ modelState.init(() => model),
58
+ automerge({ handle: doc.handle, path: doc.path }),
59
+ awarenessProvider && AwarenessProvider.of(awarenessProvider),
60
+ awareness(),
61
+ ].filter(isNotNullOrUndefined),
62
+ peer: identity
63
+ ? {
64
+ id: identity.identityKey.toHex(),
65
+ name: identity.profile?.displayName,
66
+ }
67
+ : undefined,
68
+ };
69
+
70
+ return model;
83
71
  };
package/src/index.ts CHANGED
@@ -5,9 +5,11 @@
5
5
  export { TextKind } from '@dxos/protocols/proto/dxos/echo/model/text';
6
6
  export { Doc, YText, YXmlFragment } from '@dxos/text-model';
7
7
  export { type Extension } from '@codemirror/state';
8
+ export { type EditorView } from '@codemirror/view';
8
9
 
9
10
  export * from './components';
10
11
  export * from './extensions';
11
12
  export * from './hooks';
12
13
  export { getToken } from './styles';
13
14
  export * from './themes';
15
+ export * from './util';
@@ -39,10 +39,8 @@ export const codeBlock = 'mlb-2 font-mono bg-neutral-500/10 p-3 rounded';
39
39
 
40
40
  export const inlineUrl = mx(code, 'px-1');
41
41
 
42
- // TODO(burdon): Replace with widget.
43
42
  export const blockquote = mx('pl-1 mr-1 border-is-4 border-primary-500/70 dark:border-primary-500/30', light);
44
43
 
45
- // TODO(burdon): Replace with widget.
46
44
  export const horizontalRule =
47
45
  'flex mlb-4 border-b text-neutral-100 dark:text-neutral-900 border-neutral-200 dark:border-neutral-800';
48
46
 
@@ -6,8 +6,8 @@ import get from 'lodash.get';
6
6
 
7
7
  import { type ThemeStyles, tokens } from '../styles';
8
8
 
9
- // TODO(burdon): Can we erase All of the default CM styles?
10
- // TODO(burdon): Theme styles seem to be added multiple times?
9
+ // TODO(burdon): Can we use @apply and import css file?
10
+ // https://tailwindcss.com/docs/reusing-styles#extracting-classes-with-apply?
11
11
 
12
12
  /**
13
13
  * Minimal styles.
@@ -86,6 +86,8 @@ export const defaultTheme: ThemeStyles = {
86
86
  //
87
87
  '.cm-line': {
88
88
  paddingInline: 0,
89
+ // TODO(burdon): Other values leave gaps between lines when highlighted.
90
+ // lineHeight: 'normal',
89
91
  },
90
92
  '.cm-activeLine': {
91
93
  background: 'inherit',
@@ -119,36 +121,6 @@ export const defaultTheme: ThemeStyles = {
119
121
  backgroundColor: get(tokens, 'extend.colors.yellow.700'),
120
122
  },
121
123
 
122
- //
123
- // collaboration
124
- // TODO(burdon): Review classnames (YJS dependent?) Note: e2e tests depend on this class.
125
- //
126
-
127
- '&light .cm-ySelection, &light .cm-yLineSelection': {
128
- mixBlendMode: 'multiply',
129
- },
130
- '&dark .cm-ySelection, &dark .cm-yLineSelection': {
131
- mixBlendMode: 'screen',
132
- },
133
-
134
- '.cm-ySelectionInfo': {
135
- padding: '2px 4px',
136
- marginBlockStart: '-4px',
137
- },
138
- '.cm-ySelection, & .cm-selectionMatch': {
139
- paddingBlockStart: '.15em',
140
- paddingBlockEnd: '.15em',
141
- },
142
- '.cm-ySelectionCaret': {
143
- display: 'inline-block',
144
- insetBlockStart: '.1em',
145
- blockSize: '1.4em',
146
- verticalAlign: 'top',
147
- },
148
- '.cm-yLineSelection': {
149
- margin: 0,
150
- },
151
-
152
124
  //
153
125
  // link
154
126
  //
@@ -188,14 +160,6 @@ export const defaultTheme: ThemeStyles = {
188
160
  textDecoration: 'none',
189
161
  },
190
162
 
191
- //
192
- // widgets
193
- //
194
- '.cm-widgetBuffer': {
195
- display: 'none',
196
- height: 0,
197
- },
198
-
199
163
  //
200
164
  // table
201
165
  //
@@ -229,16 +193,17 @@ export const defaultTheme: ThemeStyles = {
229
193
 
230
194
  //
231
195
  // font size
232
- // TODO(thure): This appears to be the best or only way to set selection caret heights, but it's far more verbose than it needs to be.
196
+ // TODO(thure): This appears to be the best or only way to set selection caret heights,
197
+ // but it's far more verbose than it needs to be.
233
198
  //
234
- ...Object.keys(get(tokens, 'extend.fontSize', {})).reduce((acc: Record<string, any>, fontSize) => {
235
- const height = get(tokens, ['extend', 'fontSize', fontSize, 1, 'lineHeight']);
236
-
237
- acc[`& .text-${fontSize} + .cm-ySelectionCaret`] = { height };
238
- acc[`& .text-${fontSize} + .cm-ySelection + .cm-ySelectionCaret`] = { height };
239
- acc[`& .text-${fontSize} + .cm-widgetBuffer + .cm-ySelectionCaret`] = { height };
240
- return acc;
241
- }, {}),
199
+ // ...Object.keys(get(tokens, 'extend.fontSize', {})).reduce((acc: Record<string, any>, fontSize) => {
200
+ // const height = get(tokens, ['extend', 'fontSize', fontSize, 1, 'lineHeight']);
201
+ //
202
+ // acc[`& .text-${fontSize} + .cm-ySelectionCaret`] = { height };
203
+ // acc[`& .text-${fontSize} + .cm-ySelection + .cm-ySelectionCaret`] = { height };
204
+ // acc[`& .text-${fontSize} + .cm-widgetBuffer + .cm-ySelectionCaret`] = { height };
205
+ // return acc;
206
+ // }, {}),
242
207
 
243
208
  /**
244
209
  * Panels
@@ -292,7 +257,9 @@ export const textTheme: ThemeStyles = {
292
257
  };
293
258
 
294
259
  export const markdownTheme: ThemeStyles = {
295
- // NOTE: Must leave base font family as is (i.e., monospace) due to fenced code blocks.
260
+ '.cm-scroller': {
261
+ fontFamily: get(tokens, 'fontFamily.body', []).join(','),
262
+ },
296
263
  '.cm-placeholder': {
297
264
  fontFamily: get(tokens, 'fontFamily.body', []).join(','),
298
265
  },
package/src/util.ts ADDED
@@ -0,0 +1,41 @@
1
+ //
2
+ // Copyright 2024 DXOS.org
3
+ //
4
+
5
+ import type { Transaction } from '@codemirror/state';
6
+
7
+ import { log } from '@dxos/log';
8
+
9
+ /**
10
+ * CodeMirror callbacks swallow errors so wrap handlers.
11
+ */
12
+ // TODO(burdon): EditorView.exceptionSink should catch errors.
13
+ export const callbackWrapper = <T extends Function>(fn: T): T =>
14
+ ((...args: any[]) => {
15
+ try {
16
+ return fn(...args);
17
+ } catch (err) {
18
+ log.catch(err);
19
+ }
20
+ }) as unknown as T;
21
+
22
+ export const logChanges = (trs: readonly Transaction[]) => {
23
+ const changes = trs
24
+ .flatMap((tr) => {
25
+ if (tr.changes.empty) {
26
+ return undefined;
27
+ }
28
+
29
+ const changes: any[] = [];
30
+ tr.changes.iterChanges((fromA, toA, fromB, toB, inserted) =>
31
+ changes.push(JSON.stringify({ fromA, toA, fromB, toB, inserted: inserted.toString() })),
32
+ );
33
+
34
+ return changes;
35
+ })
36
+ .filter(Boolean);
37
+
38
+ if (changes.length) {
39
+ console.log('changes', changes);
40
+ }
41
+ };
@@ -1,12 +0,0 @@
1
- import { type StoryObj } from '@storybook/html';
2
- import { Client, type PublicKey } from '@dxos/react-client';
3
- declare const _default: {
4
- title: string;
5
- };
6
- export default _default;
7
- export declare const Default: StoryObj<{
8
- id: number;
9
- client: Client;
10
- spaceKey: PublicKey;
11
- }>;
12
- //# sourceMappingURL=codemirror.stories.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"codemirror.stories.d.ts","sourceRoot":"","sources":["../../../../../src/components/TextEditor/codemirror.stories.ts"],"names":[],"mappings":"AAOA,OAAO,EAAE,KAAK,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAMhD,OAAO,EAAE,MAAM,EAAE,KAAK,SAAS,EAAE,MAAM,oBAAoB,CAAC;;;;AAU5D,wBAEE;AAqEF,eAAO,MAAM,OAAO,EAAE,QAAQ,CAAC;IAAE,EAAE,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,SAAS,CAAA;CAAE,CAoBjF,CAAC"}
@@ -1,12 +0,0 @@
1
- import '@dxosTheme';
2
- import React from 'react';
3
- declare const _default: {
4
- title: string;
5
- component: React.ForwardRefExoticComponent<import("./TextEditor").TextEditorProps & React.RefAttributes<import("./TextEditor").TextEditorRef>>;
6
- decorators: import("@storybook/react").Decorator[];
7
- };
8
- export default _default;
9
- export declare const Default: {
10
- render: () => JSX.Element;
11
- };
12
- //# sourceMappingURL=yjs.stories.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"yjs.stories.d.ts","sourceRoot":"","sources":["../../../../../src/components/TextEditor/yjs.stories.tsx"],"names":[],"mappings":"AAIA,OAAO,YAAY,CAAC;AAEpB,OAAO,KAAmB,MAAM,OAAO,CAAC;;;;;;AAWxC,wBAIE;AA+BF,eAAO,MAAM,OAAO;;CAGnB,CAAC"}
@@ -1,4 +0,0 @@
1
- import * as Y from 'yjs';
2
- import { type CursorConverter } from '../../util';
3
- export declare const cursorConverter: (text: Y.Text) => CursorConverter;
4
- //# sourceMappingURL=cursor.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"cursor.d.ts","sourceRoot":"","sources":["../../../../../src/extensions/yjs/cursor.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,CAAC,MAAM,KAAK,CAAC;AAIzB,OAAO,EAAE,KAAK,eAAe,EAAE,MAAM,YAAY,CAAC;AAElD,eAAO,MAAM,eAAe,SAAU,MAAM,KAAG,eAU7C,CAAC"}
@@ -1,2 +0,0 @@
1
- export * from './yjs';
2
- //# sourceMappingURL=index.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/extensions/yjs/index.ts"],"names":[],"mappings":"AAIA,cAAc,OAAO,CAAC"}
@@ -1,4 +0,0 @@
1
- import type * as YP from 'y-protocols/awareness';
2
- import type { YText } from '@dxos/text-model';
3
- export declare const yjs: (content: YText, awareness?: YP.Awareness) => import("@codemirror/state").Extension[];
4
- //# sourceMappingURL=yjs.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"yjs.d.ts","sourceRoot":"","sources":["../../../../../src/extensions/yjs/yjs.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,KAAK,EAAE,MAAM,uBAAuB,CAAC;AAEjD,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAC;AAK9C,eAAO,MAAM,GAAG,YAAa,KAAK,cAAc,GAAG,SAAS,4CAG3D,CAAC"}
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=yjs.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"yjs.test.d.ts","sourceRoot":"","sources":["../../../../../src/extensions/yjs/yjs.test.ts"],"names":[],"mappings":""}
@@ -1,3 +0,0 @@
1
- import { type EditorModel, type UseTextModelProps } from './useTextModel';
2
- export declare const createAutomergeModel: ({ space, identity, text }: UseTextModelProps) => EditorModel;
3
- //# sourceMappingURL=automerge.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"automerge.d.ts","sourceRoot":"","sources":["../../../../src/hooks/automerge.ts"],"names":[],"mappings":"AAUA,OAAO,EAAE,KAAK,WAAW,EAAc,KAAK,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AAItF,eAAO,MAAM,oBAAoB,8BAA+B,iBAAiB,KAAG,WAqCnF,CAAC"}
@@ -1,27 +0,0 @@
1
- import { Observable } from 'lib0/observable';
2
- import * as YP from 'y-protocols/awareness';
3
- import { type Doc } from 'yjs';
4
- import { type Space } from '@dxos/react-client/echo';
5
- import { type EditorModel, type UseTextModelProps } from './useTextModel';
6
- export declare const createYjsModel: ({ identity, space, text }: UseTextModelProps) => EditorModel;
7
- /**
8
- * Yjs awareness provider on top of a DXOS space.
9
- */
10
- export declare class YAwarenessProvider extends Observable<any> {
11
- private readonly _space;
12
- private readonly _awareness;
13
- private readonly _clientId;
14
- private readonly _channel;
15
- constructor({ space, doc, channel, awareness, }: {
16
- space: Space;
17
- doc: Doc;
18
- channel: string;
19
- awareness?: YP.Awareness;
20
- });
21
- get awareness(): YP.Awareness;
22
- private _handleAwarenessUpdate;
23
- private _handleSpaceMessage;
24
- private _readMessage;
25
- private _handleBeforeUnload;
26
- }
27
- //# sourceMappingURL=yjs.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"yjs.d.ts","sourceRoot":"","sources":["../../../../src/hooks/yjs.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC7C,OAAO,KAAK,EAAE,MAAM,uBAAuB,CAAC;AAE5C,OAAO,EAAE,KAAK,GAAG,EAAE,MAAM,KAAK,CAAC;AAI/B,OAAO,EAAE,KAAK,KAAK,EAAE,MAAM,yBAAyB,CAAC;AAKrD,OAAO,EAAE,KAAK,WAAW,EAA0B,KAAK,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AAGlG,eAAO,MAAM,cAAc,8BAA+B,iBAAiB,KAAG,WAyC7E,CAAC;AAOF;;GAEG;AACH,qBAAa,kBAAmB,SAAQ,UAAU,CAAC,GAAG,CAAC;IACrD,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAQ;IAC/B,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAe;IAC1C,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAS;IACnC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAS;gBAEtB,EACV,KAAK,EACL,GAAG,EACH,OAAO,EACP,SAAS,GACV,EAAE;QACD,KAAK,EAAE,KAAK,CAAC;QACb,GAAG,EAAE,GAAG,CAAC;QACT,OAAO,EAAE,MAAM,CAAC;QAChB,SAAS,CAAC,EAAE,EAAE,CAAC,SAAS,CAAC;KAC1B;IA4BD,IAAI,SAAS,IAAI,EAAE,CAAC,SAAS,CAE5B;IAED,OAAO,CAAC,sBAAsB;IAS9B,OAAO,CAAC,mBAAmB;IAS3B,OAAO,CAAC,YAAY;IAoCpB,OAAO,CAAC,mBAAmB;CAG5B"}
@@ -1,3 +0,0 @@
1
- export * from './proto';
2
- export * from './replicator';
3
- //# sourceMappingURL=index.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/testing/index.ts"],"names":[],"mappings":"AAIA,cAAc,SAAS,CAAC;AACxB,cAAc,cAAc,CAAC"}
@@ -1,15 +0,0 @@
1
- /**
2
- * @generated @dxos/echo-typegen src/testing/proto/schema.proto
3
- **/
4
- import * as dxos_echo_schema from "@dxos/echo-schema";
5
- export declare const types: dxos_echo_schema.TypeCollection;
6
- export type EditorDocumentProps = {
7
- content: dxos_echo_schema.Text;
8
- };
9
- export declare class EditorDocument extends dxos_echo_schema.TypedObject<EditorDocumentProps> {
10
- static readonly schema: dxos_echo_schema.Schema;
11
- static filter(filter?: Partial<EditorDocumentProps> | dxos_echo_schema.OperatorFilter<EditorDocument>): dxos_echo_schema.Filter<EditorDocument>;
12
- constructor(initValues?: Partial<EditorDocumentProps>, opts?: dxos_echo_schema.TypedObjectOptions);
13
- content: dxos_echo_schema.Text;
14
- }
15
- //# sourceMappingURL=schema.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../../../../../../src/testing/proto/gen/schema.ts"],"names":[],"mappings":"AAAA;;IAEI;AAEJ,OAAO,KAAK,gBAAgB,MAAM,mBAAmB,CAAC;AAEtD,eAAO,MAAM,KAAK,iCAAwC,CAAC;AAE3D,MAAM,MAAM,mBAAmB,GAAG;IAChC,OAAO,EAAE,gBAAgB,CAAC,IAAI,CAAC;CAChC,CAAC;AAEF,qBAAa,cAAe,SAAQ,gBAAgB,CAAC,WAAW,CAAC,mBAAmB,CAAC;IACnF,gBAAwB,MAAM,EAAE,gBAAgB,CAAC,MAAM,CAAC;IAExD,MAAM,CAAC,MAAM,CACX,MAAM,CAAC,EACH,OAAO,CAAC,mBAAmB,CAAC,GAC5B,gBAAgB,CAAC,cAAc,CAAC,cAAc,CAAC,GAClD,gBAAgB,CAAC,MAAM,CAAC,cAAc,CAAC;gBAQxC,UAAU,CAAC,EAAE,OAAO,CAAC,mBAAmB,CAAC,EACzC,IAAI,CAAC,EAAE,gBAAgB,CAAC,kBAAkB;IAIpC,OAAO,EAAE,gBAAgB,CAAC,IAAI,CAAC;CACxC"}
@@ -1,2 +0,0 @@
1
- export * from './gen/schema';
2
- //# sourceMappingURL=index.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/testing/proto/index.ts"],"names":[],"mappings":"AAIA,cAAc,cAAc,CAAC"}
@@ -1,45 +0,0 @@
1
- import { Observable } from 'lib0/observable';
2
- import * as YP from 'y-protocols/awareness';
3
- import { Doc } from 'yjs';
4
- import { Event } from '@dxos/async';
5
- import { TextKind } from '@dxos/protocols/proto/dxos/echo/model/text';
6
- import { type EditorModel } from '../hooks';
7
- type Awareness = YP.Awareness;
8
- /**
9
- * Yjs awareness provider in-memory.
10
- */
11
- export declare class AwarenessProvider extends Observable<any> {
12
- private readonly _remoteUpdate;
13
- private readonly _awareness;
14
- private readonly _doc;
15
- constructor({ update, doc, awareness }: {
16
- update: Event<Uint8Array>;
17
- doc: Doc;
18
- awareness?: Awareness;
19
- });
20
- get awareness(): Awareness;
21
- private _handleDocUpdate;
22
- private _handleAwarenessUpdate;
23
- private _handleRemoteUpdate;
24
- private _readMessage;
25
- private _handleBeforeUnload;
26
- }
27
- /**
28
- * This mocks the replication across the swarm.
29
- */
30
- export declare class Replicator {
31
- private readonly _kind;
32
- private readonly _update;
33
- private _peers;
34
- constructor(_kind: TextKind);
35
- setPeers(peers: EditorModel[]): void;
36
- createPeer: (id: string, doc?: Doc) => EditorModel;
37
- }
38
- export type UseYjsModelOptions = {
39
- replicator: Replicator;
40
- id: string;
41
- doc?: Doc;
42
- };
43
- export declare const useYjsModel: ({ replicator, id, doc }: UseYjsModelOptions) => EditorModel;
44
- export {};
45
- //# sourceMappingURL=replicator.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"replicator.d.ts","sourceRoot":"","sources":["../../../../src/testing/replicator.ts"],"names":[],"mappings":"AAOA,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAE7C,OAAO,KAAK,EAAE,MAAM,uBAAuB,CAAC;AAE5C,OAAO,EAAE,GAAG,EAAE,MAAM,KAAK,CAAC;AAE1B,OAAO,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AAEpC,OAAO,EAAE,QAAQ,EAAE,MAAM,4CAA4C,CAAC;AAEtE,OAAO,EAAE,KAAK,WAAW,EAAE,MAAM,UAAU,CAAC;AAG5C,KAAK,SAAS,GAAG,EAAE,CAAC,SAAS,CAAC;AAM9B;;GAEG;AACH,qBAAa,iBAAkB,SAAQ,UAAU,CAAC,GAAG,CAAC;IACpD,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAoB;IAClD,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAY;IACvC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAM;gBAEf,EAAE,MAAM,EAAE,GAAG,EAAE,SAAS,EAAE,EAAE;QAAE,MAAM,EAAE,KAAK,CAAC,UAAU,CAAC,CAAC;QAAC,GAAG,EAAE,GAAG,CAAC;QAAC,SAAS,CAAC,EAAE,SAAS,CAAA;KAAE;IA4BtG,IAAI,SAAS,IAAI,SAAS,CAEzB;IAED,OAAO,CAAC,gBAAgB;IAQxB,OAAO,CAAC,sBAAsB;IAS9B,OAAO,CAAC,mBAAmB;IAS3B,OAAO,CAAC,YAAY;IA0CpB,OAAO,CAAC,mBAAmB;CAG5B;AAED;;GAEG;AACH,qBAAa,UAAU;IAIT,OAAO,CAAC,QAAQ,CAAC,KAAK;IAHlC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAA2B;IACnD,OAAO,CAAC,MAAM,CAAqB;gBAEN,KAAK,EAAE,QAAQ;IAE5C,QAAQ,CAAC,KAAK,EAAE,WAAW,EAAE;IAI7B,UAAU,OAAQ,MAAM,QAAO,GAAG,KAAe,WAAW,CAoB1D;CACH;AAED,MAAM,MAAM,kBAAkB,GAAG;IAC/B,UAAU,EAAE,UAAU,CAAC;IACvB,EAAE,EAAE,MAAM,CAAC;IACX,GAAG,CAAC,EAAE,GAAG,CAAC;CACX,CAAC;AAEF,eAAO,MAAM,WAAW,4BAA6B,kBAAkB,KAAG,WAEzE,CAAC"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"cursor.d.ts","sourceRoot":"","sources":["../../../../src/util/cursor.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAC;AAE1C;;;;;;;;;GASG;AACH,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,GAAG,SAAS,GAAG,MAAM,CAAC;IAC/D,UAAU,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAAC;CACpC;AAOD,eAAO,MAAM,eAAe,yCAE1B,CAAC"}
@@ -1,3 +0,0 @@
1
- export * from './cursor';
2
- export * from './util';
3
- //# sourceMappingURL=index.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/util/index.ts"],"names":[],"mappings":"AAIA,cAAc,UAAU,CAAC;AACzB,cAAc,QAAQ,CAAC"}
@@ -1,5 +0,0 @@
1
- /**
2
- * CodeMirror callbacks swallow errors so wrap handlers.
3
- */
4
- export declare const callbackWrapper: <T extends Function>(fn: T) => T;
5
- //# sourceMappingURL=util.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"util.d.ts","sourceRoot":"","sources":["../../../../src/util/util.ts"],"names":[],"mappings":"AAMA;;GAEG;AAEH,eAAO,MAAM,eAAe,kCAOR,CAAC"}