@adonis-agora/collaboration-client 0.3.2 → 0.4.0
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/src/docs/automerge_doc.d.ts +22 -0
- package/dist/src/docs/automerge_doc.d.ts.map +1 -0
- package/dist/src/docs/automerge_doc.js +19 -0
- package/dist/src/docs/automerge_doc.js.map +1 -0
- package/dist/src/docs/index.d.ts +5 -0
- package/dist/src/docs/index.d.ts.map +1 -0
- package/dist/src/docs/index.js +3 -0
- package/dist/src/docs/index.js.map +1 -0
- package/dist/src/docs/types.d.ts +21 -0
- package/dist/src/docs/types.d.ts.map +1 -0
- package/dist/src/docs/types.js +2 -0
- package/dist/src/docs/types.js.map +1 -0
- package/dist/src/docs/yjs_doc.d.ts +15 -0
- package/dist/src/docs/yjs_doc.d.ts.map +1 -0
- package/dist/src/docs/yjs_doc.js +24 -0
- package/dist/src/docs/yjs_doc.js.map +1 -0
- package/dist/src/editors/excalidraw.d.ts +3 -3
- package/dist/src/editors/excalidraw.d.ts.map +1 -1
- package/dist/src/editors/excalidraw.js +2 -13
- package/dist/src/editors/excalidraw.js.map +1 -1
- package/dist/src/editors/text.d.ts +4 -1
- package/dist/src/editors/text.d.ts.map +1 -1
- package/dist/src/editors/text.js +14 -7
- package/dist/src/editors/text.js.map +1 -1
- package/dist/src/editors/tldraw.d.ts +3 -3
- package/dist/src/editors/tldraw.d.ts.map +1 -1
- package/dist/src/editors/tldraw.js +10 -16
- package/dist/src/editors/tldraw.js.map +1 -1
- package/dist/src/editors/types.d.ts +5 -4
- package/dist/src/editors/types.d.ts.map +1 -1
- package/dist/src/hooks/use_collab_editor.d.ts +7 -0
- package/dist/src/hooks/use_collab_editor.d.ts.map +1 -1
- package/dist/src/hooks/use_collab_editor.js +6 -8
- package/dist/src/hooks/use_collab_editor.js.map +1 -1
- package/dist/src/index.d.ts +2 -0
- package/dist/src/index.d.ts.map +1 -1
- package/dist/src/index.js +1 -0
- package/dist/src/index.js.map +1 -1
- package/dist/src/session.d.ts +2 -0
- package/dist/src/session.d.ts.map +1 -1
- package/dist/src/session.js +6 -0
- package/dist/src/session.js.map +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import type { CollabDoc } from './types.js';
|
|
2
|
+
/**
|
|
3
|
+
* Implementação Automerge do contrato CollabDoc — envolve um documento
|
|
4
|
+
* Automerge (`A.Doc`) lendo/escrevendo chaves top-level. A sync de rede
|
|
5
|
+
* (WS + merge) é administrada pelo host.
|
|
6
|
+
*/
|
|
7
|
+
export interface AutomergeDocHost<T extends Record<string, unknown>> {
|
|
8
|
+
/** Doc atual (null antes do primeiro payload do server). */
|
|
9
|
+
readDoc(): T | null;
|
|
10
|
+
/** Aplica uma mutação sobre o doc atual via A.change. */
|
|
11
|
+
change(updater: (doc: T) => void): void;
|
|
12
|
+
/** Assina mudanças locais/remotas; retorna unsubscribe. */
|
|
13
|
+
onChange(callback: () => void): () => void;
|
|
14
|
+
}
|
|
15
|
+
export declare class AutomergeCollabDoc<T extends Record<string, unknown>> implements CollabDoc {
|
|
16
|
+
private readonly host;
|
|
17
|
+
constructor(host: AutomergeDocHost<T>);
|
|
18
|
+
read<U>(key: string): U | undefined;
|
|
19
|
+
write(key: string, value: unknown): void;
|
|
20
|
+
onUpdate(callback: () => void): () => void;
|
|
21
|
+
}
|
|
22
|
+
//# sourceMappingURL=automerge_doc.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"automerge_doc.d.ts","sourceRoot":"","sources":["../../../src/docs/automerge_doc.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAE5C;;;;GAIG;AACH,MAAM,WAAW,gBAAgB,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IACjE,4DAA4D;IAC5D,OAAO,IAAI,CAAC,GAAG,IAAI,CAAC;IACpB,yDAAyD;IACzD,MAAM,CAAC,OAAO,EAAE,CAAC,GAAG,EAAE,CAAC,KAAK,IAAI,GAAG,IAAI,CAAC;IACxC,2DAA2D;IAC3D,QAAQ,CAAC,QAAQ,EAAE,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC;CAC5C;AAED,qBAAa,kBAAkB,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAE,YAAW,SAAS;IACzE,OAAO,CAAC,QAAQ,CAAC,IAAI;gBAAJ,IAAI,EAAE,gBAAgB,CAAC,CAAC,CAAC;IAEtD,IAAI,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,GAAG,CAAC,GAAG,SAAS;IAKnC,KAAK,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,GAAG,IAAI;IAMxC,QAAQ,CAAC,QAAQ,EAAE,MAAM,IAAI,GAAG,MAAM,IAAI;CAG3C"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
export class AutomergeCollabDoc {
|
|
2
|
+
host;
|
|
3
|
+
constructor(host) {
|
|
4
|
+
this.host = host;
|
|
5
|
+
}
|
|
6
|
+
read(key) {
|
|
7
|
+
const doc = this.host.readDoc();
|
|
8
|
+
return doc ? doc[key] : undefined;
|
|
9
|
+
}
|
|
10
|
+
write(key, value) {
|
|
11
|
+
this.host.change((doc) => {
|
|
12
|
+
doc[key] = value;
|
|
13
|
+
});
|
|
14
|
+
}
|
|
15
|
+
onUpdate(callback) {
|
|
16
|
+
return this.host.onChange(callback);
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
//# sourceMappingURL=automerge_doc.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"automerge_doc.js","sourceRoot":"","sources":["../../../src/docs/automerge_doc.ts"],"names":[],"mappings":"AAgBA,MAAM,OAAO,kBAAkB;IACA;IAA7B,YAA6B,IAAyB;QAAzB,SAAI,GAAJ,IAAI,CAAqB;IAAG,CAAC;IAE1D,IAAI,CAAI,GAAW;QACjB,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;QAChC,OAAO,GAAG,CAAC,CAAC,CAAE,GAAG,CAAC,GAAG,CAAO,CAAC,CAAC,CAAC,SAAS,CAAC;IAC3C,CAAC;IAED,KAAK,CAAC,GAAW,EAAE,KAAc;QAC/B,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,EAAE;YACtB,GAA+B,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;QAChD,CAAC,CAAC,CAAC;IACL,CAAC;IAED,QAAQ,CAAC,QAAoB;QAC3B,OAAO,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;IACtC,CAAC;CACF"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/docs/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AACxD,YAAY,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAC3D,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAC5C,YAAY,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/docs/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AAExD,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Abstração de documento colaborativo — a seam que desacopla os adapters de
|
|
3
|
+
* editor (Excalidraw/tldraw/texto) do CRDT de baixo.
|
|
4
|
+
*
|
|
5
|
+
* Tanto Yjs quanto Automerge satisfazem este contrato: o adapter só enxerga
|
|
6
|
+
* `read`/`write`/`onUpdate`. Quem decide a implementação é o `useCollabEditor`,
|
|
7
|
+
* resolvendo a engine pelo token que o server devolve.
|
|
8
|
+
*/
|
|
9
|
+
export interface CollabDoc {
|
|
10
|
+
/** Lê o valor de uma chave (undefined se ausente). */
|
|
11
|
+
read<T>(key: string): T | undefined;
|
|
12
|
+
/** Escreve o valor de uma chave (grava no CRDT de forma transacional). */
|
|
13
|
+
write(key: string, value: unknown): void;
|
|
14
|
+
/** Assina mudanças; retorna unsubscribe. */
|
|
15
|
+
onUpdate(callback: () => void): () => void;
|
|
16
|
+
}
|
|
17
|
+
/** Texto rico (Yjs). Sem isso, Tiptap/ProseMirror não conseguem editar. */
|
|
18
|
+
export interface RichTextDoc extends CollabDoc {
|
|
19
|
+
getText(key: string): unknown;
|
|
20
|
+
}
|
|
21
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/docs/types.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AACH,MAAM,WAAW,SAAS;IACxB,sDAAsD;IACtD,IAAI,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,GAAG,CAAC,GAAG,SAAS,CAAC;IACpC,0EAA0E;IAC1E,KAAK,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,GAAG,IAAI,CAAC;IACzC,4CAA4C;IAC5C,QAAQ,CAAC,QAAQ,EAAE,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC;CAC5C;AAED,2EAA2E;AAC3E,MAAM,WAAW,WAAY,SAAQ,SAAS;IAC5C,OAAO,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CAC/B"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/docs/types.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import type * as Y from 'yjs';
|
|
2
|
+
import type { RichTextDoc } from './types.js';
|
|
3
|
+
/**
|
|
4
|
+
* Implementação Yjs do contrato CollabDoc — envolve o Y.Doc da sessão e usa
|
|
5
|
+
* `getMap(editorId)` para dados serializáveis e `getText` para texto rico.
|
|
6
|
+
*/
|
|
7
|
+
export declare class YjsCollabDoc implements RichTextDoc {
|
|
8
|
+
private readonly doc;
|
|
9
|
+
constructor(doc: Y.Doc);
|
|
10
|
+
read<T>(key: string): T | undefined;
|
|
11
|
+
write(key: string, value: unknown): void;
|
|
12
|
+
getText(key: string): unknown;
|
|
13
|
+
onUpdate(callback: () => void): () => void;
|
|
14
|
+
}
|
|
15
|
+
//# sourceMappingURL=yjs_doc.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"yjs_doc.d.ts","sourceRoot":"","sources":["../../../src/docs/yjs_doc.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,CAAC,MAAM,KAAK,CAAC;AAC9B,OAAO,KAAK,EAAa,WAAW,EAAE,MAAM,YAAY,CAAC;AAEzD;;;GAGG;AACH,qBAAa,YAAa,YAAW,WAAW;IAClC,OAAO,CAAC,QAAQ,CAAC,GAAG;gBAAH,GAAG,EAAE,CAAC,CAAC,GAAG;IAEvC,IAAI,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,GAAG,CAAC,GAAG,SAAS;IAInC,KAAK,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,GAAG,IAAI;IAIxC,OAAO,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO;IAI7B,QAAQ,CAAC,QAAQ,EAAE,MAAM,IAAI,GAAG,MAAM,IAAI;CAI3C"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Implementação Yjs do contrato CollabDoc — envolve o Y.Doc da sessão e usa
|
|
3
|
+
* `getMap(editorId)` para dados serializáveis e `getText` para texto rico.
|
|
4
|
+
*/
|
|
5
|
+
export class YjsCollabDoc {
|
|
6
|
+
doc;
|
|
7
|
+
constructor(doc) {
|
|
8
|
+
this.doc = doc;
|
|
9
|
+
}
|
|
10
|
+
read(key) {
|
|
11
|
+
return this.doc.getMap(key).get('value');
|
|
12
|
+
}
|
|
13
|
+
write(key, value) {
|
|
14
|
+
this.doc.transact(() => this.doc.getMap(key).set('value', value));
|
|
15
|
+
}
|
|
16
|
+
getText(key) {
|
|
17
|
+
return this.doc.getText(key);
|
|
18
|
+
}
|
|
19
|
+
onUpdate(callback) {
|
|
20
|
+
this.doc.on('update', callback);
|
|
21
|
+
return () => this.doc.off('update', callback);
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
//# sourceMappingURL=yjs_doc.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"yjs_doc.js","sourceRoot":"","sources":["../../../src/docs/yjs_doc.ts"],"names":[],"mappings":"AAGA;;;GAGG;AACH,MAAM,OAAO,YAAY;IACM;IAA7B,YAA6B,GAAU;QAAV,QAAG,GAAH,GAAG,CAAO;IAAG,CAAC;IAE3C,IAAI,CAAI,GAAW;QACjB,OAAO,IAAI,CAAC,GAAG,CAAC,MAAM,CAAU,GAAG,CAAC,CAAC,GAAG,CAAC,OAAO,CAAkB,CAAC;IACrE,CAAC;IAED,KAAK,CAAC,GAAW,EAAE,KAAc;QAC/B,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAU,GAAG,CAAC,CAAC,GAAG,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC,CAAC;IAC7E,CAAC;IAED,OAAO,CAAC,GAAW;QACjB,OAAO,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;IAC/B,CAAC;IAED,QAAQ,CAAC,QAAoB;QAC3B,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;QAChC,OAAO,GAAG,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;IAChD,CAAC;CACF"}
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import type { CollabEditorAdapter } from './types.js';
|
|
2
2
|
/**
|
|
3
|
-
*
|
|
4
|
-
*
|
|
5
|
-
*
|
|
3
|
+
* Espelho da cena Excalidraw: guarda `{ elements, appState }` na chave do
|
|
4
|
+
* editor. Padrão self-hosted (o protocolo `collab` do Excalidraw é
|
|
5
|
+
* proprietário e não é usado aqui).
|
|
6
6
|
*/
|
|
7
7
|
export interface ExcalidrawScene<S = unknown> {
|
|
8
8
|
elements: S[];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"excalidraw.d.ts","sourceRoot":"","sources":["../../../src/editors/excalidraw.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAC;AAEtD;;;;GAIG;AACH,MAAM,WAAW,eAAe,CAAC,CAAC,GAAG,OAAO;IAC1C,QAAQ,EAAE,CAAC,EAAE,CAAC;IACd,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACpC;AAED,wBAAgB,uBAAuB,CAAC,CAAC,GAAG,OAAO,KAAK,mBAAmB,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,
|
|
1
|
+
{"version":3,"file":"excalidraw.d.ts","sourceRoot":"","sources":["../../../src/editors/excalidraw.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAC;AAEtD;;;;GAIG;AACH,MAAM,WAAW,eAAe,CAAC,CAAC,GAAG,OAAO;IAC1C,QAAQ,EAAE,CAAC,EAAE,CAAC;IACd,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACpC;AAED,wBAAgB,uBAAuB,CAAC,CAAC,GAAG,OAAO,KAAK,mBAAmB,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,CAgB9F"}
|
|
@@ -1,25 +1,14 @@
|
|
|
1
1
|
export function createExcalidrawAdapter() {
|
|
2
|
-
const ELEMENTS = 'elements';
|
|
3
|
-
const APP_STATE = 'appState';
|
|
4
2
|
return {
|
|
5
3
|
empty: () => ({ elements: [] }),
|
|
6
4
|
create: (doc, editorId) => {
|
|
7
|
-
const
|
|
8
|
-
const read = () => {
|
|
9
|
-
const elements = map.get(ELEMENTS) ?? [];
|
|
10
|
-
const appState = map.get(APP_STATE);
|
|
11
|
-
return appState ? { elements, appState } : { elements };
|
|
12
|
-
};
|
|
5
|
+
const read = () => doc.read(editorId) ?? { elements: [] };
|
|
13
6
|
return {
|
|
14
7
|
get state() {
|
|
15
8
|
return read();
|
|
16
9
|
},
|
|
17
10
|
update(next) {
|
|
18
|
-
doc.
|
|
19
|
-
map.set(ELEMENTS, next.elements);
|
|
20
|
-
if (next.appState)
|
|
21
|
-
map.set(APP_STATE, next.appState);
|
|
22
|
-
});
|
|
11
|
+
doc.write(editorId, next);
|
|
23
12
|
},
|
|
24
13
|
};
|
|
25
14
|
},
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"excalidraw.js","sourceRoot":"","sources":["../../../src/editors/excalidraw.ts"],"names":[],"mappings":"AAaA,MAAM,UAAU,uBAAuB;IACrC,
|
|
1
|
+
{"version":3,"file":"excalidraw.js","sourceRoot":"","sources":["../../../src/editors/excalidraw.ts"],"names":[],"mappings":"AAaA,MAAM,UAAU,uBAAuB;IACrC,OAAO;QACL,KAAK,EAAE,GAAG,EAAE,CAAC,CAAC,EAAE,QAAQ,EAAE,EAAE,EAAE,CAAC;QAC/B,MAAM,EAAE,CAAC,GAAc,EAAE,QAAgB,EAAE,EAAE;YAC3C,MAAM,IAAI,GAAG,GAAuB,EAAE,CACpC,GAAG,CAAC,IAAI,CAAqB,QAAQ,CAAC,IAAI,EAAE,QAAQ,EAAE,EAAE,EAAE,CAAC;YAC7D,OAAO;gBACL,IAAI,KAAK;oBACP,OAAO,IAAI,EAAE,CAAC;gBAChB,CAAC;gBACD,MAAM,CAAC,IAAI;oBACT,GAAG,CAAC,KAAK,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;gBAC5B,CAAC;aACF,CAAC;QACJ,CAAC;KACF,CAAC;AACJ,CAAC"}
|
|
@@ -1,4 +1,7 @@
|
|
|
1
1
|
import type { CollabEditorAdapter } from './types.js';
|
|
2
|
-
/**
|
|
2
|
+
/**
|
|
3
|
+
* Espelho de texto puro sobre `doc.read(editorId)` (monaco/textarea). Para
|
|
4
|
+
* texto rico use a doc Yjs e o binding Tiptap diretamente.
|
|
5
|
+
*/
|
|
3
6
|
export declare function createTextAdapter(): CollabEditorAdapter<string>;
|
|
4
7
|
//# sourceMappingURL=text.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"text.d.ts","sourceRoot":"","sources":["../../../src/editors/text.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAC;AAEtD
|
|
1
|
+
{"version":3,"file":"text.d.ts","sourceRoot":"","sources":["../../../src/editors/text.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAC;AAEtD;;;GAGG;AACH,wBAAgB,iBAAiB,IAAI,mBAAmB,CAAC,MAAM,CAAC,CAqB/D"}
|
package/dist/src/editors/text.js
CHANGED
|
@@ -1,18 +1,25 @@
|
|
|
1
|
-
/**
|
|
1
|
+
/**
|
|
2
|
+
* Espelho de texto puro sobre `doc.read(editorId)` (monaco/textarea). Para
|
|
3
|
+
* texto rico use a doc Yjs e o binding Tiptap diretamente.
|
|
4
|
+
*/
|
|
2
5
|
export function createTextAdapter() {
|
|
3
6
|
return {
|
|
4
7
|
empty: () => '',
|
|
5
8
|
create: (doc, editorId) => {
|
|
6
|
-
const
|
|
9
|
+
const rich = doc;
|
|
10
|
+
const get = () => {
|
|
11
|
+
const v = doc.read(editorId);
|
|
12
|
+
if (v !== undefined)
|
|
13
|
+
return v;
|
|
14
|
+
const ytext = rich.getText?.(editorId);
|
|
15
|
+
return ytext ? ytext.toString() : '';
|
|
16
|
+
};
|
|
7
17
|
return {
|
|
8
18
|
get state() {
|
|
9
|
-
return
|
|
19
|
+
return get();
|
|
10
20
|
},
|
|
11
21
|
update(next) {
|
|
12
|
-
doc.
|
|
13
|
-
text.delete(0, text.length);
|
|
14
|
-
text.insert(0, next);
|
|
15
|
-
});
|
|
22
|
+
doc.write(editorId, next);
|
|
16
23
|
},
|
|
17
24
|
};
|
|
18
25
|
},
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"text.js","sourceRoot":"","sources":["../../../src/editors/text.ts"],"names":[],"mappings":"AAGA
|
|
1
|
+
{"version":3,"file":"text.js","sourceRoot":"","sources":["../../../src/editors/text.ts"],"names":[],"mappings":"AAGA;;;GAGG;AACH,MAAM,UAAU,iBAAiB;IAC/B,OAAO;QACL,KAAK,EAAE,GAAG,EAAE,CAAC,EAAE;QACf,MAAM,EAAE,CAAC,GAAc,EAAE,QAAgB,EAAE,EAAE;YAC3C,MAAM,IAAI,GAAG,GAAkB,CAAC;YAChC,MAAM,GAAG,GAAG,GAAW,EAAE;gBACvB,MAAM,CAAC,GAAG,GAAG,CAAC,IAAI,CAAS,QAAQ,CAAC,CAAC;gBACrC,IAAI,CAAC,KAAK,SAAS;oBAAE,OAAO,CAAC,CAAC;gBAC9B,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,EAAE,CAAC,QAAQ,CAAuC,CAAC;gBAC7E,OAAO,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YACvC,CAAC,CAAC;YACF,OAAO;gBACL,IAAI,KAAK;oBACP,OAAO,GAAG,EAAE,CAAC;gBACf,CAAC;gBACD,MAAM,CAAC,IAAI;oBACT,GAAG,CAAC,KAAK,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;gBAC5B,CAAC;aACF,CAAC;QACJ,CAAC;KACF,CAAC;AACJ,CAAC"}
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import type { CollabEditorAdapter } from './types.js';
|
|
2
2
|
/**
|
|
3
|
-
*
|
|
4
|
-
*
|
|
5
|
-
* `createTLStore({ snapshot })`
|
|
3
|
+
* Espelho do snapshot tldraw: `doc.read(editorId)` guarda
|
|
4
|
+
* `{ snapshot }` (records + schema), suficiente pra reidratar
|
|
5
|
+
* `createTLStore({ snapshot })` em qualquer peer.
|
|
6
6
|
*/
|
|
7
7
|
export interface TldrawScene<S = Record<string, unknown>> {
|
|
8
8
|
snapshot: S;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tldraw.d.ts","sourceRoot":"","sources":["../../../src/editors/tldraw.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAC;AAEtD;;;;GAIG;AACH,MAAM,WAAW,WAAW,CAAC,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IACtD,QAAQ,EAAE,CAAC,CAAC;CACb;AAED,wBAAgB,mBAAmB,CAAC,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,mBAAmB,CACrF,WAAW,CAAC,CAAC,CAAC,CACf,
|
|
1
|
+
{"version":3,"file":"tldraw.d.ts","sourceRoot":"","sources":["../../../src/editors/tldraw.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAC;AAEtD;;;;GAIG;AACH,MAAM,WAAW,WAAW,CAAC,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IACtD,QAAQ,EAAE,CAAC,CAAC;CACb;AAED,wBAAgB,mBAAmB,CAAC,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,mBAAmB,CACrF,WAAW,CAAC,CAAC,CAAC,CACf,CAaA"}
|
|
@@ -1,21 +1,15 @@
|
|
|
1
1
|
export function createTldrawAdapter() {
|
|
2
|
-
const
|
|
2
|
+
const empty = () => ({ snapshot: { records: [] } });
|
|
3
3
|
return {
|
|
4
|
-
empty
|
|
5
|
-
create: (doc, editorId) => {
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
},
|
|
14
|
-
update(next) {
|
|
15
|
-
doc.transact(() => map.set(SNAPSHOT, next.snapshot));
|
|
16
|
-
},
|
|
17
|
-
};
|
|
18
|
-
},
|
|
4
|
+
empty,
|
|
5
|
+
create: (doc, editorId) => ({
|
|
6
|
+
get state() {
|
|
7
|
+
return doc.read(editorId) ?? empty();
|
|
8
|
+
},
|
|
9
|
+
update(next) {
|
|
10
|
+
doc.write(editorId, next);
|
|
11
|
+
},
|
|
12
|
+
}),
|
|
19
13
|
};
|
|
20
14
|
}
|
|
21
15
|
//# sourceMappingURL=tldraw.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tldraw.js","sourceRoot":"","sources":["../../../src/editors/tldraw.ts"],"names":[],"mappings":"AAYA,MAAM,UAAU,mBAAmB;IAGjC,MAAM,
|
|
1
|
+
{"version":3,"file":"tldraw.js","sourceRoot":"","sources":["../../../src/editors/tldraw.ts"],"names":[],"mappings":"AAYA,MAAM,UAAU,mBAAmB;IAGjC,MAAM,KAAK,GAAG,GAAmB,EAAE,CAAC,CAAC,EAAE,QAAQ,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE,EAAE,CAAmB,CAAC;IACtF,OAAO;QACL,KAAK;QACL,MAAM,EAAE,CAAC,GAAc,EAAE,QAAgB,EAAE,EAAE,CAAC,CAAC;YAC7C,IAAI,KAAK;gBACP,OAAO,GAAG,CAAC,IAAI,CAAiB,QAAQ,CAAC,IAAI,KAAK,EAAE,CAAC;YACvD,CAAC;YACD,MAAM,CAAC,IAAI;gBACT,GAAG,CAAC,KAAK,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;YAC5B,CAAC;SACF,CAAC;KACH,CAAC;AACJ,CAAC"}
|
|
@@ -1,8 +1,9 @@
|
|
|
1
|
-
import type
|
|
1
|
+
import type { CollabDoc } from '../docs/types.js';
|
|
2
2
|
/**
|
|
3
3
|
* Editor adapters decouple a frontend surface (Excalidraw, tldraw, text)
|
|
4
4
|
* from the CRDT document. Each adapter knows how to read/write its scene
|
|
5
|
-
*
|
|
5
|
+
* against a {@link CollabDoc}, so hooks stay engine-aware: the same adapter
|
|
6
|
+
* works on Yjs or Automerge.
|
|
6
7
|
*/
|
|
7
8
|
export interface CollabEditorView<S> {
|
|
8
9
|
/** Current serializable scene state. */
|
|
@@ -13,7 +14,7 @@ export interface CollabEditorView<S> {
|
|
|
13
14
|
export interface CollabEditorAdapter<S> {
|
|
14
15
|
/** Empty scene for a fresh document. */
|
|
15
16
|
empty(): S;
|
|
16
|
-
/** Binds the adapter to a document key inside the
|
|
17
|
-
create(doc:
|
|
17
|
+
/** Binds the adapter to a document key inside the doc. */
|
|
18
|
+
create(doc: CollabDoc, editorId: string): CollabEditorView<S>;
|
|
18
19
|
}
|
|
19
20
|
//# sourceMappingURL=types.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/editors/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/editors/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAElD;;;;;GAKG;AACH,MAAM,WAAW,gBAAgB,CAAC,CAAC;IACjC,wCAAwC;IACxC,KAAK,EAAE,CAAC,CAAC;IACT,wDAAwD;IACxD,MAAM,CAAC,IAAI,EAAE,CAAC,GAAG,IAAI,CAAC;CACvB;AAED,MAAM,WAAW,mBAAmB,CAAC,CAAC;IACpC,wCAAwC;IACxC,KAAK,IAAI,CAAC,CAAC;IACX,0DAA0D;IAC1D,MAAM,CAAC,GAAG,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,GAAG,gBAAgB,CAAC,CAAC,CAAC,CAAC;CAC/D"}
|
|
@@ -1,9 +1,16 @@
|
|
|
1
|
+
import type { CollabDoc } from '../docs/types.js';
|
|
1
2
|
import type { CollabEditorAdapter } from '../editors/types.js';
|
|
2
3
|
import type { CollabPeer, CollabStatus } from '../types.js';
|
|
3
4
|
export interface UseCollabEditorOptions<S> {
|
|
4
5
|
docName: string;
|
|
5
6
|
editorId: string;
|
|
6
7
|
adapter: CollabEditorAdapter<S>;
|
|
8
|
+
/**
|
|
9
|
+
* Doc colaborativo (impl de engine). Omita para Yjs (a doc da sessão);
|
|
10
|
+
* passe `new AutomergeCollabDoc(host)` para engine automerge — os mesmos
|
|
11
|
+
* adapters funcionam com qualquer impl.
|
|
12
|
+
*/
|
|
13
|
+
doc?: CollabDoc;
|
|
7
14
|
}
|
|
8
15
|
export interface UseCollabEditorResult<S> {
|
|
9
16
|
/** Current scene state (editor-agnostic shape from the adapter). */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"use_collab_editor.d.ts","sourceRoot":"","sources":["../../../src/hooks/use_collab_editor.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"use_collab_editor.d.ts","sourceRoot":"","sources":["../../../src/hooks/use_collab_editor.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAClD,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;AAC/D,OAAO,KAAK,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAG5D,MAAM,WAAW,sBAAsB,CAAC,CAAC;IACvC,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,mBAAmB,CAAC,CAAC,CAAC,CAAC;IAChC;;;;OAIG;IACH,GAAG,CAAC,EAAE,SAAS,CAAC;CACjB;AAED,MAAM,WAAW,qBAAqB,CAAC,CAAC;IACtC,oEAAoE;IACpE,KAAK,EAAE,CAAC,CAAC;IACT,iDAAiD;IACjD,MAAM,CAAC,IAAI,EAAE,CAAC,GAAG,IAAI,CAAC;IACtB,MAAM,EAAE,YAAY,CAAC;IACrB,KAAK,EAAE,UAAU,EAAE,CAAC;CACrB;AAED;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,eAAe,CAAC,CAAC,EAAE,OAAO,EAAE,sBAAsB,CAAC,CAAC,CAAC,GAAG,qBAAqB,CAAC,CAAC,CAAC,CA8B/F"}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { useCallback, useMemo, useRef, useSyncExternalStore } from 'react';
|
|
2
2
|
import { getOrCreateSession, useCollaborationContext } from '../context.js';
|
|
3
|
+
import { YjsCollabDoc } from '../docs/index.js';
|
|
3
4
|
import { useAwareness } from './use_awareness.js';
|
|
4
5
|
/**
|
|
5
6
|
* Engine-aware, editor-aware view of a collaborative document.
|
|
@@ -18,21 +19,18 @@ import { useAwareness } from './use_awareness.js';
|
|
|
18
19
|
* ```
|
|
19
20
|
*/
|
|
20
21
|
export function useCollabEditor(options) {
|
|
21
|
-
const { docName, editorId, adapter } = options;
|
|
22
|
+
const { docName, editorId, adapter, doc } = options;
|
|
22
23
|
const context = useCollaborationContext();
|
|
23
24
|
const session = getOrCreateSession(context, docName);
|
|
25
|
+
const collabDoc = doc ?? new YjsCollabDoc(session.doc);
|
|
24
26
|
const { peers, status } = useAwareness({ docName });
|
|
25
27
|
// Reactivity: any Yjs update re-renders and re-reads the adapter state.
|
|
26
28
|
const subscribe = useCallback((onStoreChange) => {
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
return () => {
|
|
30
|
-
session.doc.off('update', handler);
|
|
31
|
-
};
|
|
32
|
-
}, [session]);
|
|
29
|
+
return collabDoc.onUpdate(onStoreChange);
|
|
30
|
+
}, [collabDoc]);
|
|
33
31
|
// Adapter view + stable snapshot: scenes are freshly built objects, so we
|
|
34
32
|
// cache by serialized equality to keep useSyncExternalStore from looping.
|
|
35
|
-
const view = useMemo(() => adapter.create(
|
|
33
|
+
const view = useMemo(() => adapter.create(collabDoc, editorId), [adapter, collabDoc, editorId]);
|
|
36
34
|
const cacheRef = useRef(undefined);
|
|
37
35
|
const getSnapshot = useCallback(() => {
|
|
38
36
|
const next = view.state;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"use_collab_editor.js","sourceRoot":"","sources":["../../../src/hooks/use_collab_editor.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,OAAO,EAAE,MAAM,EAAE,oBAAoB,EAAE,MAAM,OAAO,CAAC;AAE3E,OAAO,EAAE,kBAAkB,EAAE,uBAAuB,EAAE,MAAM,eAAe,CAAC;
|
|
1
|
+
{"version":3,"file":"use_collab_editor.js","sourceRoot":"","sources":["../../../src/hooks/use_collab_editor.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,OAAO,EAAE,MAAM,EAAE,oBAAoB,EAAE,MAAM,OAAO,CAAC;AAE3E,OAAO,EAAE,kBAAkB,EAAE,uBAAuB,EAAE,MAAM,eAAe,CAAC;AAC5E,OAAO,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAIhD,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAuBlD;;;;;;;;;;;;;;;GAeG;AACH,MAAM,UAAU,eAAe,CAAI,OAAkC;IACnE,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,OAAO,CAAC;IACpD,MAAM,OAAO,GAAG,uBAAuB,EAAE,CAAC;IAC1C,MAAM,OAAO,GAAG,kBAAkB,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;IACrD,MAAM,SAAS,GAAG,GAAG,IAAI,IAAI,YAAY,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;IACvD,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,YAAY,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC;IAEpD,wEAAwE;IACxE,MAAM,SAAS,GAAG,WAAW,CAC3B,CAAC,aAAyB,EAAE,EAAE;QAC5B,OAAO,SAAS,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAC;IAC3C,CAAC,EACD,CAAC,SAAS,CAAC,CACZ,CAAC;IAEF,0EAA0E;IAC1E,0EAA0E;IAC1E,MAAM,IAAI,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC,SAAS,EAAE,QAAQ,CAAC,EAAE,CAAC,OAAO,EAAE,SAAS,EAAE,QAAQ,CAAC,CAAC,CAAC;IAChG,MAAM,QAAQ,GAAG,MAAM,CAAwC,SAAS,CAAC,CAAC;IAC1E,MAAM,WAAW,GAAG,WAAW,CAAC,GAAM,EAAE;QACtC,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC;QACxB,MAAM,GAAG,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;QACjC,IAAI,QAAQ,CAAC,OAAO,EAAE,GAAG,KAAK,GAAG;YAAE,OAAO,QAAQ,CAAC,OAAO,CAAC,KAAK,CAAC;QACjE,QAAQ,CAAC,OAAO,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;QACxC,OAAO,IAAI,CAAC;IACd,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC;IAEX,MAAM,KAAK,GAAG,oBAAoB,CAAC,SAAS,EAAE,WAAW,EAAE,WAAW,CAAC,CAAC;IAExE,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC;AACvD,CAAC"}
|
package/dist/src/index.d.ts
CHANGED
|
@@ -21,4 +21,6 @@ export { createExcalidrawAdapter, createTldrawAdapter, createTextAdapter, } from
|
|
|
21
21
|
export type { CollabEditorAdapter, CollabEditorView, ExcalidrawScene, TldrawScene, } from './editors/index.js';
|
|
22
22
|
export { useCollabEditor } from './hooks/use_collab_editor.js';
|
|
23
23
|
export type { UseCollabEditorResult } from './hooks/use_collab_editor.js';
|
|
24
|
+
export { YjsCollabDoc, AutomergeCollabDoc } from './docs/index.js';
|
|
25
|
+
export type { CollabDoc, RichTextDoc, AutomergeDocHost } from './docs/index.js';
|
|
24
26
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/src/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,qBAAqB,EAAE,uBAAuB,EAAE,MAAM,cAAc,CAAC;AAC9E,YAAY,EAAE,0BAA0B,EAAE,MAAM,cAAc,CAAC;AAC/D,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC1C,OAAO,EACL,eAAe,EACf,WAAW,EACX,aAAa,EACb,aAAa,EACb,aAAa,EACb,UAAU,EACV,YAAY,EACZ,YAAY,EACZ,cAAc,EACd,cAAc,GACf,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAAE,uBAAuB,EAAE,MAAM,uBAAuB,CAAC;AAChE,OAAO,EAAE,yBAAyB,EAAE,MAAM,4BAA4B,CAAC;AACvE,OAAO,EAAE,uBAAuB,EAAE,MAAM,0BAA0B,CAAC;AACnE,OAAO,EAAE,0BAA0B,EAAE,MAAM,6BAA6B,CAAC;AACzE,OAAO,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AACzD,YAAY,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AACpE,OAAO,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;AACxD,YAAY,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAC;AACnE,OAAO,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AACtD,YAAY,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AACjE,OAAO,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AACtD,YAAY,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AACjE,YAAY,EACV,aAAa,EACb,UAAU,EACV,YAAY,EACZ,eAAe,EACf,eAAe,EACf,aAAa,EACb,yBAAyB,EACzB,gBAAgB,GACjB,MAAM,YAAY,CAAC;AACpB,OAAO,EAAE,eAAe,EAAE,MAAM,8BAA8B,CAAC;AAC/D,YAAY,EAAE,qBAAqB,EAAE,MAAM,8BAA8B,CAAC;AAC1E,OAAO,EACL,uBAAuB,EACvB,mBAAmB,EACnB,iBAAiB,GAClB,MAAM,oBAAoB,CAAC;AAC5B,YAAY,EACV,mBAAmB,EACnB,gBAAgB,EAChB,eAAe,EACf,WAAW,GACZ,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAE,eAAe,EAAE,MAAM,8BAA8B,CAAC;AAC/D,YAAY,EAAE,qBAAqB,EAAE,MAAM,8BAA8B,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,qBAAqB,EAAE,uBAAuB,EAAE,MAAM,cAAc,CAAC;AAC9E,YAAY,EAAE,0BAA0B,EAAE,MAAM,cAAc,CAAC;AAC/D,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC1C,OAAO,EACL,eAAe,EACf,WAAW,EACX,aAAa,EACb,aAAa,EACb,aAAa,EACb,UAAU,EACV,YAAY,EACZ,YAAY,EACZ,cAAc,EACd,cAAc,GACf,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAAE,uBAAuB,EAAE,MAAM,uBAAuB,CAAC;AAChE,OAAO,EAAE,yBAAyB,EAAE,MAAM,4BAA4B,CAAC;AACvE,OAAO,EAAE,uBAAuB,EAAE,MAAM,0BAA0B,CAAC;AACnE,OAAO,EAAE,0BAA0B,EAAE,MAAM,6BAA6B,CAAC;AACzE,OAAO,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AACzD,YAAY,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AACpE,OAAO,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;AACxD,YAAY,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAC;AACnE,OAAO,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AACtD,YAAY,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AACjE,OAAO,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AACtD,YAAY,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AACjE,YAAY,EACV,aAAa,EACb,UAAU,EACV,YAAY,EACZ,eAAe,EACf,eAAe,EACf,aAAa,EACb,yBAAyB,EACzB,gBAAgB,GACjB,MAAM,YAAY,CAAC;AACpB,OAAO,EAAE,eAAe,EAAE,MAAM,8BAA8B,CAAC;AAC/D,YAAY,EAAE,qBAAqB,EAAE,MAAM,8BAA8B,CAAC;AAC1E,OAAO,EACL,uBAAuB,EACvB,mBAAmB,EACnB,iBAAiB,GAClB,MAAM,oBAAoB,CAAC;AAC5B,YAAY,EACV,mBAAmB,EACnB,gBAAgB,EAChB,eAAe,EACf,WAAW,GACZ,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAE,eAAe,EAAE,MAAM,8BAA8B,CAAC;AAC/D,YAAY,EAAE,qBAAqB,EAAE,MAAM,8BAA8B,CAAC;AAC1E,OAAO,EAAE,YAAY,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AACnE,YAAY,EAAE,SAAS,EAAE,WAAW,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC"}
|
package/dist/src/index.js
CHANGED
|
@@ -12,4 +12,5 @@ export { useVersions } from './hooks/use_versions.js';
|
|
|
12
12
|
export { useAutomergeDoc } from './hooks/use_automerge_doc.js';
|
|
13
13
|
export { createExcalidrawAdapter, createTldrawAdapter, createTextAdapter, } from './editors/index.js';
|
|
14
14
|
export { useCollabEditor } from './hooks/use_collab_editor.js';
|
|
15
|
+
export { YjsCollabDoc, AutomergeCollabDoc } from './docs/index.js';
|
|
15
16
|
//# sourceMappingURL=index.js.map
|
package/dist/src/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,qBAAqB,EAAE,uBAAuB,EAAE,MAAM,cAAc,CAAC;AAE9E,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC1C,OAAO,EACL,eAAe,EACf,WAAW,EACX,aAAa,EACb,aAAa,EACb,aAAa,EACb,UAAU,EACV,YAAY,EACZ,YAAY,EACZ,cAAc,EACd,cAAc,GACf,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAAE,uBAAuB,EAAE,MAAM,uBAAuB,CAAC;AAChE,OAAO,EAAE,yBAAyB,EAAE,MAAM,4BAA4B,CAAC;AACvE,OAAO,EAAE,uBAAuB,EAAE,MAAM,0BAA0B,CAAC;AACnE,OAAO,EAAE,0BAA0B,EAAE,MAAM,6BAA6B,CAAC;AACzE,OAAO,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AAEzD,OAAO,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;AAExD,OAAO,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AAEtD,OAAO,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AAYtD,OAAO,EAAE,eAAe,EAAE,MAAM,8BAA8B,CAAC;AAE/D,OAAO,EACL,uBAAuB,EACvB,mBAAmB,EACnB,iBAAiB,GAClB,MAAM,oBAAoB,CAAC;AAO5B,OAAO,EAAE,eAAe,EAAE,MAAM,8BAA8B,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,qBAAqB,EAAE,uBAAuB,EAAE,MAAM,cAAc,CAAC;AAE9E,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC1C,OAAO,EACL,eAAe,EACf,WAAW,EACX,aAAa,EACb,aAAa,EACb,aAAa,EACb,UAAU,EACV,YAAY,EACZ,YAAY,EACZ,cAAc,EACd,cAAc,GACf,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAAE,uBAAuB,EAAE,MAAM,uBAAuB,CAAC;AAChE,OAAO,EAAE,yBAAyB,EAAE,MAAM,4BAA4B,CAAC;AACvE,OAAO,EAAE,uBAAuB,EAAE,MAAM,0BAA0B,CAAC;AACnE,OAAO,EAAE,0BAA0B,EAAE,MAAM,6BAA6B,CAAC;AACzE,OAAO,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AAEzD,OAAO,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;AAExD,OAAO,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AAEtD,OAAO,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AAYtD,OAAO,EAAE,eAAe,EAAE,MAAM,8BAA8B,CAAC;AAE/D,OAAO,EACL,uBAAuB,EACvB,mBAAmB,EACnB,iBAAiB,GAClB,MAAM,oBAAoB,CAAC;AAO5B,OAAO,EAAE,eAAe,EAAE,MAAM,8BAA8B,CAAC;AAE/D,OAAO,EAAE,YAAY,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAC"}
|
package/dist/src/session.d.ts
CHANGED
|
@@ -17,6 +17,8 @@ export declare class DocSession {
|
|
|
17
17
|
constructor(docName: string, config: CollaborationClientConfig);
|
|
18
18
|
get transport(): CollabTransport | undefined;
|
|
19
19
|
get error(): Error | null;
|
|
20
|
+
/** Engine informado pelo server no token (yjs | automerge | ...). */
|
|
21
|
+
get engine(): string | undefined;
|
|
20
22
|
getStatus(): CollabStatus;
|
|
21
23
|
subscribe(listener: () => void): () => void;
|
|
22
24
|
/** Idempotent — token + transport created a single time per generation. */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"session.d.ts","sourceRoot":"","sources":["../../src/session.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,CAAC,MAAM,KAAK,CAAC;AAGzB,OAAO,KAAK,EACV,YAAY,EAEZ,eAAe,EACf,yBAAyB,EAC1B,MAAM,YAAY,CAAC;AAIpB;;;;;;;;;GASG;AACH,qBAAa,UAAU;;IACrB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,GAAG,EAAE,CAAC,CAAC,GAAG,CAAC;
|
|
1
|
+
{"version":3,"file":"session.d.ts","sourceRoot":"","sources":["../../src/session.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,CAAC,MAAM,KAAK,CAAC;AAGzB,OAAO,KAAK,EACV,YAAY,EAEZ,eAAe,EACf,yBAAyB,EAC1B,MAAM,YAAY,CAAC;AAIpB;;;;;;;;;GASG;AACH,qBAAa,UAAU;;IACrB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,GAAG,EAAE,CAAC,CAAC,GAAG,CAAC;gBAaR,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,yBAAyB;IAM9D,IAAI,SAAS,IAAI,eAAe,GAAG,SAAS,CAE3C;IAED,IAAI,KAAK,IAAI,KAAK,GAAG,IAAI,CAExB;IAED,qEAAqE;IACrE,IAAI,MAAM,IAAI,MAAM,GAAG,SAAS,CAE/B;IAED,SAAS,IAAI,YAAY;IAIzB,SAAS,CAAC,QAAQ,EAAE,MAAM,IAAI,GAAG,MAAM,IAAI;IAS3C,2EAA2E;IAC3E,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAgFtB,OAAO,IAAI,IAAI;CAQhB"}
|
package/dist/src/session.js
CHANGED
|
@@ -24,6 +24,7 @@ export class DocSession {
|
|
|
24
24
|
#destroyed = false;
|
|
25
25
|
#reconnectTimer;
|
|
26
26
|
#attempt = 0;
|
|
27
|
+
#engine;
|
|
27
28
|
constructor(docName, config) {
|
|
28
29
|
this.docName = docName;
|
|
29
30
|
this.#config = config;
|
|
@@ -35,6 +36,10 @@ export class DocSession {
|
|
|
35
36
|
get error() {
|
|
36
37
|
return this.#error;
|
|
37
38
|
}
|
|
39
|
+
/** Engine informado pelo server no token (yjs | automerge | ...). */
|
|
40
|
+
get engine() {
|
|
41
|
+
return this.#engine;
|
|
42
|
+
}
|
|
38
43
|
getStatus() {
|
|
39
44
|
return this.#status;
|
|
40
45
|
}
|
|
@@ -56,6 +61,7 @@ export class DocSession {
|
|
|
56
61
|
async #start() {
|
|
57
62
|
try {
|
|
58
63
|
const info = await fetchToken(this.#config, this.docName);
|
|
64
|
+
this.#engine = info.engine;
|
|
59
65
|
if (this.#destroyed)
|
|
60
66
|
return;
|
|
61
67
|
if (info.engine === 'automerge') {
|
package/dist/src/session.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"session.js","sourceRoot":"","sources":["../../src/session.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,CAAC,MAAM,KAAK,CAAC;AACzB,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC9C,OAAO,EAAE,uBAAuB,EAAE,MAAM,uBAAuB,CAAC;AAQhE,MAAM,sBAAsB,GAAG,MAAM,CAAC;AAEtC;;;;;;;;;GASG;AACH,MAAM,OAAO,UAAU;IACZ,OAAO,CAAS;IAChB,GAAG,CAAQ;IAEpB,OAAO,CAA4B;IACnC,OAAO,GAAiB,YAAY,CAAC;IACrC,MAAM,GAAiB,IAAI,CAAC;IAC5B,UAAU,CAA8B;IACxC,UAAU,GAAG,IAAI,GAAG,EAAc,CAAC;IACnC,aAAa,CAA4B;IACzC,UAAU,GAAG,KAAK,CAAC;IACnB,eAAe,CAA4C;IAC3D,QAAQ,GAAG,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"session.js","sourceRoot":"","sources":["../../src/session.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@adonis-agora/collaboration-client",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.4.0",
|
|
4
4
|
"description": "Client-side React hooks for @adonis-agora/collaboration — collaborative docs, presence, comments and versions. Part of the Agora ecosystem.",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"repository": {
|