@dxos/react-ui-editor 0.3.10-main.3645708 → 0.3.10-main.396fa89

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 (118) hide show
  1. package/dist/lib/browser/index.mjs +1495 -489
  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 +26 -2
  5. package/dist/types/src/components/TextEditor/MarkdownEditor.stories.d.ts.map +1 -1
  6. package/dist/types/src/components/TextEditor/TextEditor.d.ts +3 -1
  7. package/dist/types/src/components/TextEditor/TextEditor.d.ts.map +1 -1
  8. package/dist/types/src/components/TextEditor/TextEditor.stories.d.ts +3 -0
  9. package/dist/types/src/components/TextEditor/TextEditor.stories.d.ts.map +1 -1
  10. package/dist/types/src/components/TextEditor/extensions/autocomplete.d.ts +3 -2
  11. package/dist/types/src/components/TextEditor/extensions/autocomplete.d.ts.map +1 -1
  12. package/dist/types/src/components/TextEditor/extensions/basic.d.ts +2 -1
  13. package/dist/types/src/components/TextEditor/extensions/basic.d.ts.map +1 -1
  14. package/dist/types/src/components/TextEditor/extensions/blast.d.ts +25 -0
  15. package/dist/types/src/components/TextEditor/extensions/blast.d.ts.map +1 -0
  16. package/dist/types/src/components/TextEditor/extensions/code.d.ts +2 -0
  17. package/dist/types/src/components/TextEditor/extensions/code.d.ts.map +1 -0
  18. package/dist/types/src/components/TextEditor/extensions/comments.d.ts +18 -0
  19. package/dist/types/src/components/TextEditor/extensions/comments.d.ts.map +1 -0
  20. package/dist/types/src/components/TextEditor/extensions/demo.d.ts +11 -0
  21. package/dist/types/src/components/TextEditor/extensions/demo.d.ts.map +1 -0
  22. package/dist/types/src/components/TextEditor/extensions/experimental.d.ts +1 -1
  23. package/dist/types/src/components/TextEditor/extensions/experimental.d.ts.map +1 -1
  24. package/dist/types/src/components/TextEditor/extensions/highlight.d.ts +24 -0
  25. package/dist/types/src/components/TextEditor/extensions/highlight.d.ts.map +1 -0
  26. package/dist/types/src/components/TextEditor/extensions/image.d.ts +4 -0
  27. package/dist/types/src/components/TextEditor/extensions/image.d.ts.map +1 -0
  28. package/dist/types/src/components/TextEditor/extensions/index.d.ts +8 -0
  29. package/dist/types/src/components/TextEditor/extensions/index.d.ts.map +1 -1
  30. package/dist/types/src/components/TextEditor/extensions/link.d.ts.map +1 -1
  31. package/dist/types/src/components/TextEditor/extensions/listener.d.ts +4 -2
  32. package/dist/types/src/components/TextEditor/extensions/listener.d.ts.map +1 -1
  33. package/dist/types/src/components/TextEditor/extensions/markdown/bundle.d.ts +10 -1
  34. package/dist/types/src/components/TextEditor/extensions/markdown/bundle.d.ts.map +1 -1
  35. package/dist/types/src/components/TextEditor/extensions/markdown/highlight.d.ts +9 -3
  36. package/dist/types/src/components/TextEditor/extensions/markdown/highlight.d.ts.map +1 -1
  37. package/dist/types/src/components/TextEditor/extensions/mention.d.ts +6 -0
  38. package/dist/types/src/components/TextEditor/extensions/mention.d.ts.map +1 -0
  39. package/dist/types/src/components/TextEditor/extensions/table.d.ts +8 -0
  40. package/dist/types/src/components/TextEditor/extensions/table.d.ts.map +1 -0
  41. package/dist/types/src/components/TextEditor/extensions/tasklist.d.ts +2 -4
  42. package/dist/types/src/components/TextEditor/extensions/tasklist.d.ts.map +1 -1
  43. package/dist/types/src/components/TextEditor/themes/default.d.ts +8 -0
  44. package/dist/types/src/components/TextEditor/themes/default.d.ts.map +1 -1
  45. package/dist/types/src/{automerge/automerge-plugin → hooks/automerge}/PatchSemaphore.d.ts +3 -0
  46. package/dist/types/src/hooks/automerge/PatchSemaphore.d.ts.map +1 -0
  47. package/dist/types/src/hooks/automerge/automerge.stories.d.ts +16 -0
  48. package/dist/types/src/hooks/automerge/automerge.stories.d.ts.map +1 -0
  49. package/dist/types/src/hooks/automerge/handle.d.ts.map +1 -0
  50. package/dist/types/src/{automerge/automerge-plugin → hooks/automerge}/index.d.ts +1 -1
  51. package/dist/types/src/hooks/automerge/index.d.ts.map +1 -0
  52. package/dist/types/src/hooks/automerge/plugin.d.ts.map +1 -0
  53. package/dist/types/src/hooks/automerge/translation/automerge-to-codemirror.d.ts +5 -0
  54. package/dist/types/src/hooks/automerge/translation/automerge-to-codemirror.d.ts.map +1 -0
  55. package/dist/types/src/hooks/automerge/translation/codemirror-to-automerge.d.ts +6 -0
  56. package/dist/types/src/hooks/automerge/translation/codemirror-to-automerge.d.ts.map +1 -0
  57. package/dist/types/src/hooks/automerge/translation/index.d.ts +3 -0
  58. package/dist/types/src/hooks/automerge/translation/index.d.ts.map +1 -0
  59. package/dist/types/src/hooks/index.d.ts +0 -1
  60. package/dist/types/src/hooks/index.d.ts.map +1 -1
  61. package/dist/types/src/hooks/useTextModel.d.ts +8 -3
  62. package/dist/types/src/hooks/useTextModel.d.ts.map +1 -1
  63. package/dist/types/src/{components/TextEditor → hooks/yjs}/yjs.stories.d.ts +2 -2
  64. package/dist/types/src/hooks/yjs/yjs.stories.d.ts.map +1 -0
  65. package/dist/types/src/styles/markdown.d.ts +3 -2
  66. package/dist/types/src/styles/markdown.d.ts.map +1 -1
  67. package/dist/types/src/testing/replicator.d.ts.map +1 -1
  68. package/package.json +22 -19
  69. package/src/components/TextEditor/MarkdownEditor.stories.tsx +161 -36
  70. package/src/components/TextEditor/TextEditor.stories.tsx +12 -1
  71. package/src/components/TextEditor/TextEditor.tsx +49 -24
  72. package/src/components/TextEditor/extensions/autocomplete.ts +9 -22
  73. package/src/components/TextEditor/extensions/basic.ts +6 -4
  74. package/src/components/TextEditor/extensions/blast.ts +373 -0
  75. package/src/components/TextEditor/extensions/code.ts +99 -0
  76. package/src/components/TextEditor/extensions/comments.ts +173 -0
  77. package/src/components/TextEditor/extensions/demo.ts +69 -0
  78. package/src/components/TextEditor/extensions/experimental.tsx +15 -35
  79. package/src/components/TextEditor/extensions/highlight.ts +128 -0
  80. package/src/components/TextEditor/extensions/image.ts +67 -0
  81. package/src/components/TextEditor/extensions/index.ts +8 -0
  82. package/src/components/TextEditor/extensions/link.ts +27 -27
  83. package/src/components/TextEditor/extensions/listener.ts +4 -3
  84. package/src/components/TextEditor/extensions/markdown/bundle.ts +46 -43
  85. package/src/components/TextEditor/extensions/markdown/highlight.ts +148 -107
  86. package/src/components/TextEditor/extensions/mention.ts +31 -0
  87. package/src/components/TextEditor/extensions/table.ts +119 -0
  88. package/src/components/TextEditor/extensions/tasklist.ts +89 -81
  89. package/src/components/TextEditor/themes/default.ts +112 -4
  90. package/src/{automerge/automerge-plugin → hooks/automerge}/PatchSemaphore.ts +12 -9
  91. package/src/{automerge → hooks/automerge}/automerge.stories.tsx +6 -3
  92. package/src/{automerge/automerge-plugin → hooks/automerge}/plugin.ts +1 -0
  93. package/src/{automerge/automerge-plugin/amToCodemirror.ts → hooks/automerge/translation/automerge-to-codemirror.ts} +10 -2
  94. package/src/{automerge/automerge-plugin/codeMirrorToAm.ts → hooks/automerge/translation/codemirror-to-automerge.ts} +7 -4
  95. package/src/hooks/automerge/translation/index.ts +6 -0
  96. package/src/hooks/index.ts +0 -1
  97. package/src/hooks/useTextModel.ts +58 -41
  98. package/src/{components/TextEditor → hooks/yjs}/yjs.stories.tsx +2 -2
  99. package/src/styles/markdown.ts +15 -8
  100. package/src/testing/replicator.ts +7 -7
  101. package/dist/types/src/automerge/automerge-plugin/PatchSemaphore.d.ts.map +0 -1
  102. package/dist/types/src/automerge/automerge-plugin/amToCodemirror.d.ts +0 -6
  103. package/dist/types/src/automerge/automerge-plugin/amToCodemirror.d.ts.map +0 -1
  104. package/dist/types/src/automerge/automerge-plugin/codeMirrorToAm.d.ts +0 -7
  105. package/dist/types/src/automerge/automerge-plugin/codeMirrorToAm.d.ts.map +0 -1
  106. package/dist/types/src/automerge/automerge-plugin/handle.d.ts.map +0 -1
  107. package/dist/types/src/automerge/automerge-plugin/index.d.ts.map +0 -1
  108. package/dist/types/src/automerge/automerge-plugin/plugin.d.ts.map +0 -1
  109. package/dist/types/src/automerge/automerge.stories.d.ts +0 -9
  110. package/dist/types/src/automerge/automerge.stories.d.ts.map +0 -1
  111. package/dist/types/src/components/TextEditor/yjs.stories.d.ts.map +0 -1
  112. package/dist/types/src/hooks/useCollaboration.d.ts +0 -9
  113. package/dist/types/src/hooks/useCollaboration.d.ts.map +0 -1
  114. package/src/hooks/useCollaboration.ts +0 -45
  115. package/dist/types/src/{automerge/automerge-plugin → hooks/automerge}/handle.d.ts +0 -0
  116. package/dist/types/src/{automerge/automerge-plugin → hooks/automerge}/plugin.d.ts +0 -0
  117. package/src/{automerge/automerge-plugin → hooks/automerge}/handle.ts +0 -0
  118. package/src/{automerge/automerge-plugin → hooks/automerge}/index.ts +1 -1
@@ -2,9 +2,13 @@
2
2
  // Copyright 2023 DXOS.org
3
3
  //
4
4
 
5
- import { useMemo } from 'react';
5
+ import { type Extension } from '@codemirror/state';
6
+ import get from 'lodash.get';
7
+ import { useEffect, useState } from 'react';
8
+ import { yCollab } from 'y-codemirror.next';
6
9
  import type * as awarenessProtocol from 'y-protocols/awareness';
7
10
 
11
+ import { invariant } from '@dxos/invariant';
8
12
  import {
9
13
  type DocAccessor,
10
14
  type Space,
@@ -16,18 +20,27 @@ import {
16
20
  import { type Identity } from '@dxos/react-client/halo';
17
21
  import type { YText, YXmlFragment } from '@dxos/text-model';
18
22
 
23
+ import { automergePlugin } from './automerge';
19
24
  import { SpaceAwarenessProvider } from './yjs';
20
25
 
21
26
  // TODO(burdon): Move.
22
27
  type Awareness = awarenessProtocol.Awareness;
23
- type Provider = { awareness: Awareness };
28
+
29
+ export type DocumentRange = {
30
+ id: string;
31
+ from: number;
32
+ to: number;
33
+ };
24
34
 
25
35
  // TODO(wittjosiah): Factor out to common package? @dxos/react-client?
26
36
  export type EditorModel = {
27
37
  id: string;
38
+ // TODO(burdon): Remove.
28
39
  content: string | YText | YXmlFragment | DocAccessor;
29
40
  text: () => string;
30
- provider?: Provider;
41
+ ranges: DocumentRange[];
42
+ extension?: Extension;
43
+ awareness?: Awareness;
31
44
  peer?: {
32
45
  id: string;
33
46
  name?: string;
@@ -41,57 +54,61 @@ export type UseTextModelOptions = {
41
54
  text?: TextObject;
42
55
  };
43
56
 
44
- // TODO(burdon): Don't support returning undefined (and remove checks from calling code).
45
- // TODO(burdon): Decouple space (make Editor less dependent on entire stack)?
57
+ // TODO(burdon): Remove YJS/Automerge deps (from UI component -- create abstraction; incl. all ECHO/Space deps).
46
58
  // TODO(wittjosiah): Factor out to common package? @dxos/react-client?
47
59
  export const useTextModel = ({ identity, space, text }: UseTextModelOptions): EditorModel | undefined => {
48
- // TODO(burdon): Remove?
49
- // eslint-disable-next-line unused-imports/no-unused-vars
50
- const provider = useMemo(() => {
51
- if (isActualAutomergeObject(text)) {
52
- return undefined;
53
- }
60
+ const [model, setModel] = useState<EditorModel | undefined>(() => createModel({ identity, space, text }));
61
+ useEffect(() => {
62
+ setModel(createModel({ identity, space, text }));
63
+ }, [identity, space, text]);
64
+ return model;
65
+ };
54
66
 
55
- if (!space || !text?.doc) {
67
+ const createModel = (options: UseTextModelOptions) => {
68
+ const { text } = options;
69
+ if (isActualAutomergeObject(text)) {
70
+ return createAutomergeModel(options);
71
+ } else {
72
+ if (!text?.doc) {
56
73
  return undefined;
57
74
  }
58
75
 
59
- return new SpaceAwarenessProvider({ space, doc: text.doc, channel: `yjs.awareness.${text.id}` });
60
- }, [identity, space, text, text?.doc]);
61
-
62
- const content = useMemo(() => {
63
- if (isActualAutomergeObject(text)) {
64
- const obj = text as any as AutomergeTextCompat;
65
- return getRawDoc(obj, [obj.field]);
66
- } else {
67
- return text?.content;
68
- }
69
- }, [text]);
70
-
71
- if (!text?.doc || !text?.content) {
72
- return undefined;
76
+ return createYjsModel(options);
73
77
  }
78
+ };
74
79
 
75
- if (isActualAutomergeObject(text)) {
76
- const obj = text as any as AutomergeTextCompat;
77
- return {
78
- id: obj.id,
79
- content: content!,
80
- text: () => content!.toString(),
81
- provider: undefined,
82
- peer: identity
83
- ? {
84
- id: identity.identityKey.toHex(),
85
- name: identity.profile?.displayName,
86
- }
87
- : undefined,
88
- };
89
- }
80
+ const createYjsModel = ({ identity, space, text }: UseTextModelOptions): EditorModel => {
81
+ invariant(text?.doc && text?.content);
82
+ const provider = space
83
+ ? new SpaceAwarenessProvider({ space, doc: text.doc, channel: `yjs.awareness.${text.id}` })
84
+ : undefined;
90
85
 
91
86
  return {
92
87
  id: text.doc.guid,
93
88
  content: text.content,
94
89
  text: () => text.content!.toString(),
90
+ ranges: [],
91
+ extension: yCollab(text.content as YText, provider?.awareness),
92
+ awareness: provider?.awareness,
93
+ peer: identity
94
+ ? {
95
+ id: identity.identityKey.toHex(),
96
+ name: identity.profile?.displayName,
97
+ }
98
+ : undefined,
99
+ };
100
+ };
101
+
102
+ const createAutomergeModel = ({ identity, text }: UseTextModelOptions): EditorModel => {
103
+ const obj = text as any as AutomergeTextCompat;
104
+ const doc = getRawDoc(obj, [obj.field]);
105
+
106
+ return {
107
+ id: obj.id,
108
+ content: doc,
109
+ text: () => get(doc.handle.docSync(), doc.path),
110
+ ranges: [],
111
+ extension: automergePlugin(doc.handle, doc.path),
95
112
  peer: identity
96
113
  ? {
97
114
  id: identity.identityKey.toHex(),
@@ -12,10 +12,11 @@ import { ClientRepeater, textGenerator, useDataGenerator } from '@dxos/react-cli
12
12
  import { useId, Input } from '@dxos/react-ui';
13
13
  import { withTheme } from '@dxos/storybook-utils';
14
14
 
15
- import { MarkdownEditor } from './TextEditor';
15
+ import { MarkdownEditor } from '../../components';
16
16
  import { Replicator, useYjsModel } from '../../testing';
17
17
 
18
18
  export default {
19
+ title: 'react-ui-editor/YJS',
19
20
  component: MarkdownEditor,
20
21
  decorators: [withTheme],
21
22
  };
@@ -50,7 +51,6 @@ const Story = () => {
50
51
  };
51
52
 
52
53
  export const Default = {
53
- title: 'react-ui-editor/YJS',
54
54
  // TODO(wittjosiah): Decorator for doing this without clients being initialized?
55
55
  render: () => <ClientRepeater count={2} Component={Story} />,
56
56
  };
@@ -6,14 +6,20 @@ import { mx } from '@dxos/react-ui-theme';
6
6
 
7
7
  export type HeadingLevel = 1 | 2 | 3 | 4 | 5 | 6;
8
8
 
9
+ // TODO(burdon): Better way to align vertically than negative margin? Font-specific?
9
10
  // https://tailwindcss.com/docs/font-weight
10
- export const heading: Record<HeadingLevel, string> = {
11
- 1: 'mbs-4 mbe-2 font-medium text-inherit no-underline text-4xl',
12
- 2: 'mbs-4 mbe-2 font-medium text-inherit no-underline text-3xl',
13
- 3: 'mbs-4 mbe-2 font-medium text-inherit no-underline text-2xl',
14
- 4: 'mbs-4 mbe-2 font-medium text-inherit no-underline text-xl',
15
- 5: 'mbs-4 mbe-2 font-medium text-inherit no-underline text-lg',
16
- 6: 'mbs-4 mbe-2 font-medium text-inherit no-underline',
11
+ export const headings: Record<HeadingLevel, string[]> = {
12
+ 1: ['mbs-4 mbe-2 font-medium text-inherit no-underline text-4xl', '-ml-[10px]'],
13
+ 2: ['mbs-4 mbe-2 font-medium text-inherit no-underline text-3xl', '-ml-[8px]'],
14
+ 3: ['mbs-4 mbe-2 font-medium text-inherit no-underline text-2xl', '-ml-[7px]'],
15
+ 4: ['mbs-4 mbe-2 font-medium text-inherit no-underline text-xl', '-ml-[6px]'],
16
+ 5: ['mbs-4 mbe-2 font-medium text-inherit no-underline text-lg', '-ml-[5px]'],
17
+ 6: ['mbs-4 mbe-2 font-medium text-inherit no-underline', '-ml-[4px]'],
18
+ };
19
+
20
+ export const heading = (level: HeadingLevel, readonly?: boolean) => {
21
+ const [style, offset] = headings[level];
22
+ return mx(style, readonly && offset);
17
23
  };
18
24
 
19
25
  export const text = 'text-neutral-800 dark:text-neutral-200';
@@ -37,7 +43,8 @@ export const inlineUrl = mx(code, 'px-1');
37
43
  export const blockquote = mx('pl-1 mr-1 border-is-4 border-primary-500/70 dark:border-primary-500/30', light);
38
44
 
39
45
  // TODO(burdon): Replace with widget.
40
- export const horizontalRule = 'flex mlb-4 border-b text-neutral-100 dark:text-neutral-900 border-neutral-500/50';
46
+ export const horizontalRule =
47
+ 'flex mlb-4 border-b text-neutral-100 dark:text-neutral-900 border-neutral-200 dark:border-neutral-800';
41
48
 
42
49
  // TODO(thure): Tailwind was not seeing `[&>li:before]:content-["•"]` as a utility class, but it would work if instead of `"•"` it was `"X"`… why?
43
50
  export const unorderedList =
@@ -163,17 +163,18 @@ export class Replicator {
163
163
  colorLight: cursorColor.light,
164
164
  });
165
165
 
166
- // TODO(burdon): Create concrete class that implements SyncModel?
166
+ const field = 'content';
167
+ const content = this._kind === TextKind.PLAIN ? doc.getText(field) : doc.getXmlFragment(field);
167
168
  const model: EditorModel = {
168
169
  id: doc.guid,
169
- content: this._kind === TextKind.PLAIN ? doc.getText('content') : doc.getXmlFragment('content'),
170
- text: () => model.content.toString(), // TODO(burdon): Fix.
171
- provider,
170
+ text: () => content.toString(),
171
+ content,
172
+ ranges: [],
173
+ awareness: provider.awareness,
172
174
  peer: { id },
173
175
  };
174
176
 
175
177
  this._peers.push(model);
176
-
177
178
  return model;
178
179
  };
179
180
  }
@@ -185,6 +186,5 @@ export type UseYjsModelOptions = {
185
186
  };
186
187
 
187
188
  export const useYjsModel = ({ replicator, id, doc }: UseYjsModelOptions): EditorModel => {
188
- const peer = useMemo(() => replicator.createPeer(id, doc), [doc]);
189
- return peer;
189
+ return useMemo(() => replicator.createPeer(id, doc), [doc]);
190
190
  };
@@ -1 +0,0 @@
1
- {"version":3,"file":"PatchSemaphore.d.ts","sourceRoot":"","sources":["../../../../../src/automerge/automerge-plugin/PatchSemaphore.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,KAAK,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAEnD,OAAO,EAAE,IAAI,IAAI,SAAS,EAAE,MAAM,2BAA2B,CAAC;AAI9D,OAAO,EAAE,KAAK,UAAU,EAAE,MAAM,UAAU,CAAC;AAC3C,OAAO,EAAE,KAAK,KAAK,EAA8E,MAAM,UAAU,CAAC;AAElH,KAAK,GAAG,CAAC,CAAC,IAAI,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;AAC/B,KAAK,KAAK,GAAG,SAAS,CAAC,KAAK,CAAC;AAE7B,KAAK,QAAQ,GAAG,CAAC,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,GAAG,EAAE,GAAG,CAAC,OAAO,CAAC,KAAK,IAAI,KAAK,KAAK,GAAG,SAAS,CAAC;AAE3F,qBAAa,cAAc;IACzB,MAAM,EAAG,KAAK,CAAC;IACf,YAAY,UAAS;IACrB,MAAM,EAAE,KAAK,CAAC,QAAQ,CAAC,CAAM;gBAEjB,KAAK,CAAC,EAAE,KAAK;IAMzB,SAAS,WAAY,UAAU,QAAQ,UAAU,UA2C/C;CACH"}
@@ -1,6 +0,0 @@
1
- import { type EditorSelection } from '@codemirror/state';
2
- import { type EditorView } from '@codemirror/view';
3
- import { type Patch, type Prop } from '@dxos/automerge/automerge';
4
- declare const _default: (view: EditorView, selection: EditorSelection, target: Prop[], patches: Patch[]) => void;
5
- export default _default;
6
- //# sourceMappingURL=amToCodemirror.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"amToCodemirror.d.ts","sourceRoot":"","sources":["../../../../../src/automerge/automerge-plugin/amToCodemirror.ts"],"names":[],"mappings":"AAIA,OAAO,EAA8B,KAAK,eAAe,EAAoB,MAAM,mBAAmB,CAAC;AACvG,OAAO,EAAE,KAAK,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAEnD,OAAO,EAGL,KAAK,KAAK,EACV,KAAK,IAAI,EAGV,MAAM,2BAA2B,CAAC;+BAIb,UAAU,aAAa,eAAe,UAAU,IAAI,EAAE,WAAW,KAAK,EAAE;AAA9F,wBAgBE"}
@@ -1,7 +0,0 @@
1
- import { type EditorState, type Transaction } from '@codemirror/state';
2
- import { type Heads } from '@dxos/automerge/automerge';
3
- import { type IDocHandle } from './handle';
4
- import { type Field } from './plugin';
5
- declare const _default: (field: Field, handle: IDocHandle, transactions: Transaction[], state: EditorState) => Heads | undefined;
6
- export default _default;
7
- //# sourceMappingURL=codeMirrorToAm.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"codeMirrorToAm.d.ts","sourceRoot":"","sources":["../../../../../src/automerge/automerge-plugin/codeMirrorToAm.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,KAAK,WAAW,EAAa,KAAK,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAElF,OAAO,EAAc,KAAK,KAAK,EAAE,MAAM,2BAA2B,CAAC;AAEnE,OAAO,EAAE,KAAK,UAAU,EAAE,MAAM,UAAU,CAAC;AAC3C,OAAO,EAAE,KAAK,KAAK,EAAE,MAAM,UAAU,CAAC;+CAI5B,UAAU,gBACJ,WAAW,EAAE,SACpB,WAAW,KACjB,KAAK,GAAG,SAAS;AALpB,wBA6BE"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"handle.d.ts","sourceRoot":"","sources":["../../../../../src/automerge/automerge-plugin/handle.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,KAAK,CAAC,MAAM,2BAA2B,CAAC;AAEpD,MAAM,MAAM,UAAU,CAAC,CAAC,GAAG,GAAG,IAAI;IAChC,OAAO,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,SAAS,CAAC;IAChC,MAAM,CAAC,QAAQ,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,OAAO,CAAC,EAAE,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC;IACpE,QAAQ,CAAC,KAAK,EAAE,CAAC,CAAC,KAAK,EAAE,QAAQ,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,OAAO,CAAC,EAAE,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,GAAG,MAAM,EAAE,GAAG,SAAS,CAAC;IAEtG,WAAW,CAAC,KAAK,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,IAAI,GAAG,IAAI,CAAC;IACzD,cAAc,CAAC,KAAK,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,IAAI,GAAG,IAAI,CAAC;CAC7D,CAAC"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/automerge/automerge-plugin/index.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,eAAe,EAAE,KAAK,eAAe,EAAE,MAAM,UAAU,CAAC;AACjE,OAAO,EAAE,KAAK,UAAU,EAAE,MAAM,UAAU,CAAC"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"plugin.d.ts","sourceRoot":"","sources":["../../../../../src/automerge/automerge-plugin/plugin.ts"],"names":[],"mappings":"AAIA,OAAO,EAEL,KAAK,WAAW,EAChB,KAAK,SAAS,EAEd,WAAW,EACX,UAAU,EACV,KAAK,WAAW,EAChB,KAAK,eAAe,EACrB,MAAM,mBAAmB,CAAC;AAG3B,OAAO,KAAK,SAAS,MAAM,2BAA2B,CAAC;AACvD,OAAO,EAAE,KAAK,KAAK,EAAE,KAAK,IAAI,EAAE,MAAM,2BAA2B,CAAC;AAGlE,OAAO,EAAE,KAAK,UAAU,EAAE,MAAM,UAAU,CAAC;AAE3C,MAAM,MAAM,KAAK,GAAG;IAClB,SAAS,EAAE,KAAK,CAAC;IACjB,IAAI,EAAE,IAAI,EAAE,CAAC;IACb,wBAAwB,EAAE,WAAW,EAAE,CAAC;CACzC,CAAC;AAEF,KAAK,WAAW,GAAG;IACjB,QAAQ,EAAE,KAAK,CAAC;CACjB,CAAC;AAEF,eAAO,MAAM,UAAU,0DAAsC,CAAC;AAE9D,eAAO,MAAM,WAAW,sCAAsB,YAAY,WAAW,CAAgC,CAAC;AAEtG,eAAO,MAAM,YAAY,UAAW,WAAW,uCAAsD,CAAC;AAEtG,eAAO,MAAM,OAAO,UAAW,WAAW,mBAAiB,IAAI,EAA6B,CAAC;AAE7F,MAAM,MAAM,KAAK,GAAG,UAAU,CAAC,KAAK,CAAC,CAAC;AAMtC,MAAM,MAAM,eAAe,GAAG;IAC5B,SAAS,EAAE,SAAS,CAAC;CACtB,CAAC;AAEF,eAAO,MAAM,eAAe,WAAY,UAAU,QAAQ,IAAI,EAAE,KAAG,eA8DlE,CAAC;AAEF,eAAO,MAAM,uBAAuB,qDAA+B,CAAC;AAEpE,eAAO,MAAM,aAAa,OAAQ,WAAW,KAAG,OAAmD,CAAC;AAEpG,eAAO,MAAM,aAAa,OAAQ,eAAe,SAchD,CAAC"}
@@ -1,9 +0,0 @@
1
- import '@preact/signals-react';
2
- declare const _default: {
3
- title: string;
4
- };
5
- export default _default;
6
- export declare const AutomergeRepo: {
7
- render: () => JSX.Element;
8
- };
9
- //# sourceMappingURL=automerge.stories.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"automerge.stories.d.ts","sourceRoot":"","sources":["../../../../src/automerge/automerge.stories.tsx"],"names":[],"mappings":"AAIA,OAAO,uBAAuB,CAAC;;;;AA8E/B,wBAEE;AAEF,eAAO,MAAM,aAAa;;CAEzB,CAAC"}
@@ -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,wBAGE;AA+BF,eAAO,MAAM,OAAO;;;CAInB,CAAC"}
@@ -1,9 +0,0 @@
1
- import type { Extension } from '@codemirror/state';
2
- import type { ThemeMode } from '@dxos/react-ui';
3
- import type { EditorModel } from './useTextModel';
4
- /**
5
- * Replication and awareness (incl. remote selection).
6
- * https://codemirror.net/docs/ref/#collab
7
- */
8
- export declare const useCollaboration: (model: EditorModel, themeMode: ThemeMode) => Extension | undefined;
9
- //# sourceMappingURL=useCollaboration.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"useCollaboration.d.ts","sourceRoot":"","sources":["../../../../src/hooks/useCollaboration.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAMnD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAIhD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAGlD;;;GAGG;AACH,eAAO,MAAM,gBAAgB,UAAW,WAAW,aAAa,SAAS,KAAG,SAAS,GAAG,SAuBvF,CAAC"}
@@ -1,45 +0,0 @@
1
- //
2
- // Copyright 2023 DXOS.org
3
- //
4
-
5
- import type { Extension } from '@codemirror/state';
6
- import { useEffect, useState } from 'react';
7
- import { yCollab } from 'y-codemirror.next';
8
-
9
- import { generateName } from '@dxos/display-name';
10
- import { isDocAccessor } from '@dxos/echo-schema';
11
- import type { ThemeMode } from '@dxos/react-ui';
12
- import { getColorForValue } from '@dxos/react-ui-theme';
13
- import { YText } from '@dxos/text-model';
14
-
15
- import type { EditorModel } from './useTextModel';
16
- import { automergePlugin } from '../automerge/automerge-plugin';
17
-
18
- /**
19
- * Replication and awareness (incl. remote selection).
20
- * https://codemirror.net/docs/ref/#collab
21
- */
22
- export const useCollaboration = (model: EditorModel, themeMode: ThemeMode): Extension | undefined => {
23
- const { content, provider, peer } = model;
24
- const [extension] = useState(() => {
25
- if (content instanceof YText) {
26
- return yCollab(content, provider?.awareness);
27
- } else if (isDocAccessor(content)) {
28
- return automergePlugin(content.handle, content.path);
29
- } else {
30
- return undefined;
31
- }
32
- });
33
-
34
- useEffect(() => {
35
- if (provider && peer) {
36
- provider.awareness.setLocalStateField('user', {
37
- name: peer.name ?? generateName(peer.id),
38
- color: getColorForValue({ value: peer.id, type: 'color' }),
39
- colorLight: getColorForValue({ value: peer.id, themeMode, type: 'highlight' }),
40
- });
41
- }
42
- }, [provider, peer, themeMode]);
43
-
44
- return extension;
45
- };
@@ -2,5 +2,5 @@
2
2
  // Copyright 2023 DXOS.org
3
3
  //
4
4
 
5
- export { automergePlugin, type AutomergePlugin } from './plugin';
6
5
  export { type IDocHandle } from './handle';
6
+ export { automergePlugin, type AutomergePlugin } from './plugin';