@dxos/react-ui-editor 0.3.11-main.6d5715f → 0.3.11-main.870164f
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/lib/browser/index.mjs +961 -1406
- package/dist/lib/browser/index.mjs.map +4 -4
- package/dist/lib/browser/meta.json +1 -1
- package/dist/types/src/components/TextEditor/codemirror.stories.d.ts.map +1 -1
- package/dist/types/src/extensions/comments.d.ts.map +1 -1
- package/dist/types/src/extensions/index.d.ts +0 -3
- package/dist/types/src/extensions/index.d.ts.map +1 -1
- package/dist/types/src/extensions/util.d.ts.map +1 -0
- package/dist/types/src/{components/TextEditor → hooks/automerge}/automerge.stories.d.ts +1 -6
- package/dist/types/src/hooks/automerge/automerge.stories.d.ts.map +1 -0
- package/dist/types/src/hooks/automerge/handle.d.ts +9 -0
- package/dist/types/src/hooks/automerge/handle.d.ts.map +1 -0
- package/dist/types/src/hooks/automerge/index.d.ts +3 -0
- package/dist/types/src/hooks/automerge/index.d.ts.map +1 -0
- package/dist/types/src/hooks/automerge/plugin.d.ts +26 -0
- package/dist/types/src/hooks/automerge/plugin.d.ts.map +1 -0
- package/dist/types/src/{extensions → hooks}/automerge/semaphore.d.ts +4 -4
- package/dist/types/src/hooks/automerge/semaphore.d.ts.map +1 -0
- package/dist/types/src/hooks/automerge/update-automerge.d.ts +6 -0
- package/dist/types/src/hooks/automerge/update-automerge.d.ts.map +1 -0
- package/dist/types/src/hooks/automerge/update-codemirror.d.ts.map +1 -0
- package/dist/types/src/hooks/index.d.ts +0 -2
- package/dist/types/src/hooks/index.d.ts.map +1 -1
- package/dist/types/src/hooks/useTextModel.d.ts +7 -8
- package/dist/types/src/hooks/useTextModel.d.ts.map +1 -1
- package/dist/types/src/hooks/yjs/cursors.d.ts.map +1 -0
- package/dist/types/src/hooks/yjs/index.d.ts +3 -0
- package/dist/types/src/hooks/yjs/index.d.ts.map +1 -0
- package/dist/types/src/hooks/{yjs.d.ts → yjs/space-provider.d.ts} +8 -8
- package/dist/types/src/hooks/yjs/space-provider.d.ts.map +1 -0
- package/dist/types/src/{components/TextEditor → hooks/yjs}/yjs.stories.d.ts +1 -1
- package/dist/types/src/hooks/yjs/yjs.stories.d.ts.map +1 -0
- package/dist/types/src/hooks/yjs/yjs.test.d.ts.map +1 -0
- package/dist/types/src/styles/index.d.ts +0 -1
- package/dist/types/src/styles/index.d.ts.map +1 -1
- package/dist/types/src/testing/replicator.d.ts +2 -2
- package/dist/types/src/testing/replicator.d.ts.map +1 -1
- package/package.json +21 -22
- package/src/components/TextEditor/TextEditor.tsx +1 -1
- package/src/components/TextEditor/codemirror.stories.ts +2 -3
- package/src/extensions/comments.ts +11 -27
- package/src/extensions/index.ts +0 -3
- package/src/{components/TextEditor → hooks/automerge}/automerge.stories.tsx +6 -66
- package/src/hooks/automerge/handle.ts +14 -0
- package/src/hooks/automerge/index.ts +6 -0
- package/src/{extensions/automerge/automerge.ts → hooks/automerge/plugin.ts} +58 -20
- package/src/{extensions → hooks}/automerge/semaphore.ts +12 -14
- package/src/{extensions → hooks}/automerge/update-automerge.ts +6 -5
- package/src/{extensions → hooks}/automerge/update-codemirror.ts +5 -13
- package/src/hooks/index.ts +0 -2
- package/src/hooks/useTextModel.ts +93 -19
- package/src/hooks/yjs/index.ts +6 -0
- package/src/hooks/{yjs.ts → yjs/space-provider.ts} +19 -71
- package/src/{components/TextEditor → hooks/yjs}/yjs.stories.tsx +1 -1
- package/src/{extensions → hooks}/yjs/yjs.test.ts +25 -1
- package/src/styles/index.ts +0 -1
- package/src/testing/replicator.ts +15 -10
- package/dist/types/src/components/TextEditor/automerge.stories.d.ts.map +0 -1
- package/dist/types/src/components/TextEditor/yjs.stories.d.ts.map +0 -1
- package/dist/types/src/extensions/automerge/automerge.d.ts +0 -9
- package/dist/types/src/extensions/automerge/automerge.d.ts.map +0 -1
- package/dist/types/src/extensions/automerge/cursor.d.ts +0 -5
- package/dist/types/src/extensions/automerge/cursor.d.ts.map +0 -1
- package/dist/types/src/extensions/automerge/defs.d.ts +0 -26
- package/dist/types/src/extensions/automerge/defs.d.ts.map +0 -1
- package/dist/types/src/extensions/automerge/index.d.ts +0 -3
- package/dist/types/src/extensions/automerge/index.d.ts.map +0 -1
- package/dist/types/src/extensions/automerge/semaphore.d.ts.map +0 -1
- package/dist/types/src/extensions/automerge/update-automerge.d.ts +0 -5
- package/dist/types/src/extensions/automerge/update-automerge.d.ts.map +0 -1
- package/dist/types/src/extensions/automerge/update-codemirror.d.ts.map +0 -1
- package/dist/types/src/extensions/awareness.d.ts +0 -46
- package/dist/types/src/extensions/awareness.d.ts.map +0 -1
- package/dist/types/src/extensions/yjs/cursor.d.ts +0 -4
- package/dist/types/src/extensions/yjs/cursor.d.ts.map +0 -1
- package/dist/types/src/extensions/yjs/index.d.ts +0 -2
- package/dist/types/src/extensions/yjs/index.d.ts.map +0 -1
- package/dist/types/src/extensions/yjs/yjs.d.ts +0 -4
- package/dist/types/src/extensions/yjs/yjs.d.ts.map +0 -1
- package/dist/types/src/extensions/yjs/yjs.test.d.ts.map +0 -1
- package/dist/types/src/hooks/automerge.d.ts +0 -3
- package/dist/types/src/hooks/automerge.d.ts.map +0 -1
- package/dist/types/src/hooks/awareness-provider.d.ts +0 -28
- package/dist/types/src/hooks/awareness-provider.d.ts.map +0 -1
- package/dist/types/src/hooks/yjs.d.ts.map +0 -1
- package/dist/types/src/styles/cursors.d.ts.map +0 -1
- package/dist/types/src/util/cursor.d.ts +0 -17
- package/dist/types/src/util/cursor.d.ts.map +0 -1
- package/dist/types/src/util/index.d.ts +0 -3
- package/dist/types/src/util/index.d.ts.map +0 -1
- package/dist/types/src/util/util.d.ts.map +0 -1
- package/src/extensions/automerge/cursor.ts +0 -51
- package/src/extensions/automerge/defs.ts +0 -62
- package/src/extensions/automerge/index.ts +0 -6
- package/src/extensions/awareness.ts +0 -316
- package/src/extensions/yjs/cursor.ts +0 -21
- package/src/extensions/yjs/index.ts +0 -5
- package/src/extensions/yjs/yjs.ts +0 -16
- package/src/hooks/automerge.ts +0 -52
- package/src/hooks/awareness-provider.ts +0 -120
- package/src/util/cursor.ts +0 -29
- package/src/util/index.ts +0 -6
- /package/dist/types/src/{util → extensions}/util.d.ts +0 -0
- /package/dist/types/src/{extensions → hooks}/automerge/update-codemirror.d.ts +0 -0
- /package/dist/types/src/{styles → hooks/yjs}/cursors.d.ts +0 -0
- /package/dist/types/src/{extensions → hooks}/yjs/yjs.test.d.ts +0 -0
- /package/src/{util → extensions}/util.ts +0 -0
- /package/src/{styles → hooks/yjs}/cursors.ts +0 -0
|
@@ -1,120 +0,0 @@
|
|
|
1
|
-
//
|
|
2
|
-
// Copyright 2024 DXOS.org
|
|
3
|
-
//
|
|
4
|
-
|
|
5
|
-
import { DeferredTask, Event, sleep } from '@dxos/async';
|
|
6
|
-
import { Context } from '@dxos/context';
|
|
7
|
-
import { invariant } from '@dxos/invariant';
|
|
8
|
-
import { log } from '@dxos/log';
|
|
9
|
-
import { type Space } from '@dxos/react-client/echo';
|
|
10
|
-
import { type GossipMessage } from '@dxos/react-client/mesh';
|
|
11
|
-
|
|
12
|
-
import { type AwarenessInfo, type AwarenessPosition, type AwarenessProvider, type AwarenessState } from '../extensions';
|
|
13
|
-
|
|
14
|
-
type ProtocolMessage =
|
|
15
|
-
| {
|
|
16
|
-
kind: 'query';
|
|
17
|
-
}
|
|
18
|
-
| {
|
|
19
|
-
kind: 'post';
|
|
20
|
-
state: AwarenessState;
|
|
21
|
-
};
|
|
22
|
-
|
|
23
|
-
const DEBOUNCE_INTERVAL = 100; // ms
|
|
24
|
-
|
|
25
|
-
export type AwarenessProviderParams = {
|
|
26
|
-
space: Space;
|
|
27
|
-
channel: string;
|
|
28
|
-
peerId: string;
|
|
29
|
-
info: AwarenessInfo;
|
|
30
|
-
};
|
|
31
|
-
|
|
32
|
-
export class SpaceAwarenessProvider implements AwarenessProvider {
|
|
33
|
-
public readonly remoteStateChange = new Event<void>();
|
|
34
|
-
|
|
35
|
-
private readonly _remoteStates = new Map<string, AwarenessState>();
|
|
36
|
-
|
|
37
|
-
private readonly _space: Space;
|
|
38
|
-
private readonly _channel: string;
|
|
39
|
-
private readonly _peerId: string;
|
|
40
|
-
private readonly _info: AwarenessInfo;
|
|
41
|
-
|
|
42
|
-
private _localState?: AwarenessState;
|
|
43
|
-
private _postTask?: DeferredTask;
|
|
44
|
-
private _ctx?: Context;
|
|
45
|
-
|
|
46
|
-
constructor(params: AwarenessProviderParams) {
|
|
47
|
-
this._space = params.space;
|
|
48
|
-
this._channel = params.channel;
|
|
49
|
-
this._peerId = params.peerId;
|
|
50
|
-
this._info = params.info;
|
|
51
|
-
}
|
|
52
|
-
|
|
53
|
-
open() {
|
|
54
|
-
this._ctx = new Context();
|
|
55
|
-
this._postTask = new DeferredTask(this._ctx, async () => {
|
|
56
|
-
if (this._localState) {
|
|
57
|
-
await this._space.postMessage(this._channel, {
|
|
58
|
-
kind: 'post',
|
|
59
|
-
state: this._localState,
|
|
60
|
-
} satisfies ProtocolMessage);
|
|
61
|
-
|
|
62
|
-
await sleep(DEBOUNCE_INTERVAL);
|
|
63
|
-
}
|
|
64
|
-
});
|
|
65
|
-
|
|
66
|
-
const unsubscribe = this._space.listen(this._channel, (message: GossipMessage) => {
|
|
67
|
-
switch (message.payload.kind) {
|
|
68
|
-
case 'query': {
|
|
69
|
-
this._handleQueryMessage();
|
|
70
|
-
break;
|
|
71
|
-
}
|
|
72
|
-
case 'post': {
|
|
73
|
-
this._handlePostMessage(message.payload);
|
|
74
|
-
break;
|
|
75
|
-
}
|
|
76
|
-
}
|
|
77
|
-
});
|
|
78
|
-
this._ctx.onDispose(unsubscribe);
|
|
79
|
-
|
|
80
|
-
void this._space
|
|
81
|
-
.postMessage(this._channel, {
|
|
82
|
-
kind: 'query',
|
|
83
|
-
} satisfies ProtocolMessage)
|
|
84
|
-
.catch((err) => {
|
|
85
|
-
log.debug('failed to query awareness', { err });
|
|
86
|
-
});
|
|
87
|
-
}
|
|
88
|
-
|
|
89
|
-
close() {
|
|
90
|
-
void this._ctx?.dispose();
|
|
91
|
-
this._ctx = undefined;
|
|
92
|
-
this._postTask = undefined;
|
|
93
|
-
}
|
|
94
|
-
|
|
95
|
-
update(position: AwarenessPosition | undefined): void {
|
|
96
|
-
invariant(this._postTask);
|
|
97
|
-
this._localState = {
|
|
98
|
-
peerId: this._peerId,
|
|
99
|
-
position,
|
|
100
|
-
info: this._info,
|
|
101
|
-
};
|
|
102
|
-
|
|
103
|
-
this._postTask.schedule();
|
|
104
|
-
}
|
|
105
|
-
|
|
106
|
-
getRemoteStates(): AwarenessState[] {
|
|
107
|
-
return Array.from(this._remoteStates.values());
|
|
108
|
-
}
|
|
109
|
-
|
|
110
|
-
private _handleQueryMessage() {
|
|
111
|
-
invariant(this._postTask);
|
|
112
|
-
this._postTask.schedule();
|
|
113
|
-
}
|
|
114
|
-
|
|
115
|
-
private _handlePostMessage(message: ProtocolMessage) {
|
|
116
|
-
invariant(message.kind === 'post');
|
|
117
|
-
this._remoteStates.set(message.state.peerId, message.state);
|
|
118
|
-
this.remoteStateChange.emit();
|
|
119
|
-
}
|
|
120
|
-
}
|
package/src/util/cursor.ts
DELETED
|
@@ -1,29 +0,0 @@
|
|
|
1
|
-
//
|
|
2
|
-
// Copyright 2024 DXOS.org
|
|
3
|
-
//
|
|
4
|
-
|
|
5
|
-
import { Facet } from '@codemirror/state';
|
|
6
|
-
|
|
7
|
-
/**
|
|
8
|
-
* Converts indexes into the text document into stable peer-independent cursors.
|
|
9
|
-
*
|
|
10
|
-
* See:
|
|
11
|
-
* - https://automerge.org/automerge/api-docs/js/functions/next.getCursor.html
|
|
12
|
-
* - https://github.com/yjs/yjs?tab=readme-ov-file#relative-positions
|
|
13
|
-
*
|
|
14
|
-
* @param {assoc} number Negative values will associate the cursor with the previous character
|
|
15
|
-
* while positive - with the next one.
|
|
16
|
-
*/
|
|
17
|
-
export interface CursorConverter {
|
|
18
|
-
toCursor(position: number, assoc?: -1 | 1 | undefined): string;
|
|
19
|
-
fromCursor(cursor: string): number;
|
|
20
|
-
}
|
|
21
|
-
|
|
22
|
-
const DEFAULT_CURSOR_CONVERTER: CursorConverter = {
|
|
23
|
-
toCursor: (position) => position.toString(),
|
|
24
|
-
fromCursor: (cursor) => parseInt(cursor),
|
|
25
|
-
};
|
|
26
|
-
|
|
27
|
-
export const CursorConverter = Facet.define<CursorConverter, CursorConverter>({
|
|
28
|
-
combine: (providers) => providers[0] ?? DEFAULT_CURSOR_CONVERTER,
|
|
29
|
-
});
|
package/src/util/index.ts
DELETED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|