@adonis-agora/collaboration-client 0.6.1 → 0.7.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.
Files changed (52) hide show
  1. package/dist/src/components/excalidraw_board.d.ts +2 -2
  2. package/dist/src/components/excalidraw_board.d.ts.map +1 -1
  3. package/dist/src/components/excalidraw_board.js +4 -6
  4. package/dist/src/components/excalidraw_board.js.map +1 -1
  5. package/dist/src/context.d.ts +15 -3
  6. package/dist/src/context.d.ts.map +1 -1
  7. package/dist/src/context.js +22 -8
  8. package/dist/src/context.js.map +1 -1
  9. package/dist/src/hooks/use_automerge_doc.d.ts +32 -0
  10. package/dist/src/hooks/use_automerge_doc.d.ts.map +1 -1
  11. package/dist/src/hooks/use_automerge_doc.js +137 -40
  12. package/dist/src/hooks/use_automerge_doc.js.map +1 -1
  13. package/dist/src/hooks/use_awareness.d.ts +30 -0
  14. package/dist/src/hooks/use_awareness.d.ts.map +1 -1
  15. package/dist/src/hooks/use_awareness.js +55 -14
  16. package/dist/src/hooks/use_awareness.js.map +1 -1
  17. package/dist/src/hooks/use_collab_doc.d.ts +17 -1
  18. package/dist/src/hooks/use_collab_doc.d.ts.map +1 -1
  19. package/dist/src/hooks/use_collab_doc.js +44 -19
  20. package/dist/src/hooks/use_collab_doc.js.map +1 -1
  21. package/dist/src/hooks/use_collab_editor.d.ts +5 -0
  22. package/dist/src/hooks/use_collab_editor.d.ts.map +1 -1
  23. package/dist/src/hooks/use_collab_editor.js +26 -17
  24. package/dist/src/hooks/use_collab_editor.js.map +1 -1
  25. package/dist/src/hooks/use_comments.d.ts +6 -1
  26. package/dist/src/hooks/use_comments.d.ts.map +1 -1
  27. package/dist/src/hooks/use_comments.js +4 -4
  28. package/dist/src/hooks/use_comments.js.map +1 -1
  29. package/dist/src/hooks/use_excalidraw_sync.d.ts +27 -6
  30. package/dist/src/hooks/use_excalidraw_sync.d.ts.map +1 -1
  31. package/dist/src/hooks/use_excalidraw_sync.js +56 -22
  32. package/dist/src/hooks/use_excalidraw_sync.js.map +1 -1
  33. package/dist/src/hooks/use_versions.js +2 -2
  34. package/dist/src/hooks/use_versions.js.map +1 -1
  35. package/dist/src/index.d.ts +4 -3
  36. package/dist/src/index.d.ts.map +1 -1
  37. package/dist/src/index.js.map +1 -1
  38. package/dist/src/rest_client.d.ts +11 -2
  39. package/dist/src/rest_client.d.ts.map +1 -1
  40. package/dist/src/rest_client.js +11 -2
  41. package/dist/src/rest_client.js.map +1 -1
  42. package/dist/src/session.d.ts +112 -4
  43. package/dist/src/session.d.ts.map +1 -1
  44. package/dist/src/session.js +198 -16
  45. package/dist/src/session.js.map +1 -1
  46. package/dist/src/transports/hocuspocus.d.ts +3 -0
  47. package/dist/src/transports/hocuspocus.d.ts.map +1 -1
  48. package/dist/src/transports/hocuspocus.js +23 -2
  49. package/dist/src/transports/hocuspocus.js.map +1 -1
  50. package/dist/src/types.d.ts +13 -2
  51. package/dist/src/types.d.ts.map +1 -1
  52. package/package.json +1 -1
@@ -1 +1 @@
1
- {"version":3,"file":"use_awareness.js","sourceRoot":"","sources":["../../../src/hooks/use_awareness.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AAE5C,OAAO,EAAE,kBAAkB,EAAE,uBAAuB,EAAE,MAAM,eAAe,CAAC;AAuB5E,SAAS,aAAa,CAAC,SAAsC;IAC3D,MAAM,OAAO,GAAG,SAAS,CAAC,QAAQ,CAAC;IACnC,MAAM,KAAK,GAAiB,EAAE,CAAC;IAC/B,KAAK,MAAM,CAAC,QAAQ,EAAE,KAAK,CAAC,IAAI,SAAS,CAAC,SAAS,EAAE,EAAE,CAAC;QACtD,IAAI,QAAQ,KAAK,OAAO;YAAE,SAAS;QACnC,MAAM,IAAI,GAAI,KAAkF;aAC7F,IAAI,CAAC;QACR,KAAK,CAAC,IAAI,CAAC;YACT,QAAQ;YACR,MAAM,EAAE,IAAI,EAAE,MAAM;YACpB,IAAI,EAAE,IAAI,EAAE,IAAI;YAChB,SAAS,EAAE,IAAI,EAAE,SAAS,IAAI,IAAI;SACnC,CAAC,CAAC;IACL,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,YAAY,CAAC,OAA4B;IACvD,MAAM,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC;IAC5B,MAAM,OAAO,GAAG,uBAAuB,EAAE,CAAC;IAC1C,MAAM,OAAO,GAAG,kBAAkB,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;IACrD,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,QAAQ,CAAe,EAAE,CAAC,CAAC;IACrD,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,GAAG,QAAQ,CAAe,OAAO,CAAC,SAAS,EAAE,CAAC,CAAC;IACxE,MAAM,CAAC,SAAS,EAAE,YAAY,CAAC,GAAG,QAAQ,CACxC,OAAO,CAAC,SAAS,EAAE,SAAS,IAAI,IAAI,CACrC,CAAC;IAEF,SAAS,CAAC,GAAG,EAAE;QACb,MAAM,MAAM,GAAG,GAAG,EAAE;YAClB,SAAS,CAAC,OAAO,CAAC,SAAS,EAAE,CAAC,CAAC;YAC/B,uEAAuE;YACvE,4DAA4D;YAC5D,YAAY,CAAC,OAAO,CAAC,SAAS,EAAE,SAAS,IAAI,IAAI,CAAC,CAAC;YACnD,IAAI,OAAO,CAAC,SAAS,EAAE,SAAS,EAAE,CAAC;gBACjC,QAAQ,CAAC,aAAa,CAAC,OAAO,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC,CAAC;YACvD,CAAC;QACH,CAAC,CAAC;QAEF,MAAM,EAAE,CAAC;QACT,MAAM,WAAW,GAAG,OAAO,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;QAE9C,MAAM,SAAS,GAAG,OAAO,CAAC,SAAS,EAAE,SAAS,CAAC;QAC/C,SAAS,EAAE,EAAE,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;QAEhC,OAAO,GAAG,EAAE;YACV,SAAS,EAAE,GAAG,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;YACjC,WAAW,EAAE,CAAC;QAChB,CAAC,CAAC;IACJ,CAAC,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC;IAEd,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,CAAC;AACtC,CAAC"}
1
+ {"version":3,"file":"use_awareness.js","sourceRoot":"","sources":["../../../src/hooks/use_awareness.ts"],"names":[],"mappings":"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"}
@@ -1,4 +1,5 @@
1
1
  import * as Y from 'yjs';
2
+ import type { CollabDoc } from '../docs/types.js';
2
3
  import type { CollabStatus } from '../types.js';
3
4
  export interface UseCollabDocOptions {
4
5
  docName: string;
@@ -6,14 +7,29 @@ export interface UseCollabDocOptions {
6
7
  export interface UseCollabDocResult {
7
8
  /** Y.Doc compartilhado (estável enquanto o provider viver). */
8
9
  doc: Y.Doc;
10
+ /**
11
+ * O mesmo documento pela seam `CollabDoc` (`read`/`write`/`onUpdate`) —
12
+ * é o que `useExcalidrawSync` e os adapters de editor consomem.
13
+ */
14
+ collabDoc: CollabDoc;
9
15
  status: CollabStatus;
16
+ /**
17
+ * `true` quando o estado inicial do servidor já foi aplicado no doc.
18
+ * `status === 'connected'` só diz que o socket abriu — gate de edição
19
+ * costuma querer este aqui.
20
+ */
21
+ synced: boolean;
10
22
  error: Error | null;
11
23
  }
12
24
  /**
13
25
  * Conecta ao documento colaborativo e devolve o Y.Doc + status.
14
26
  *
27
+ * A sessão é contada por referência: montar segura, desmontar solta, e o
28
+ * último a sair fecha o socket sem destruir o `Y.Doc` — remontar (voltar na
29
+ * navegação, StrictMode) reconecta sobre o mesmo documento.
30
+ *
15
31
  * ```tsx
16
- * const { doc, status } = useCollabDoc('researches/42/writing')
32
+ * const { doc, status, synced } = useCollabDoc({ docName: 'researches/42/writing' })
17
33
  * ```
18
34
  */
19
35
  export declare function useCollabDoc(options: UseCollabDocOptions): UseCollabDocResult;
@@ -1 +1 @@
1
- {"version":3,"file":"use_collab_doc.d.ts","sourceRoot":"","sources":["../../../src/hooks/use_collab_doc.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,CAAC,MAAM,KAAK,CAAC;AAEzB,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAEhD,MAAM,WAAW,mBAAmB;IAClC,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,kBAAkB;IACjC,+DAA+D;IAC/D,GAAG,EAAE,CAAC,CAAC,GAAG,CAAC;IACX,MAAM,EAAE,YAAY,CAAC;IACrB,KAAK,EAAE,KAAK,GAAG,IAAI,CAAC;CACrB;AAED;;;;;;GAMG;AACH,wBAAgB,YAAY,CAAC,OAAO,EAAE,mBAAmB,GAAG,kBAAkB,CA2B7E"}
1
+ {"version":3,"file":"use_collab_doc.d.ts","sourceRoot":"","sources":["../../../src/hooks/use_collab_doc.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,CAAC,MAAM,KAAK,CAAC;AAEzB,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAGlD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAEhD,MAAM,WAAW,mBAAmB;IAClC,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,kBAAkB;IACjC,+DAA+D;IAC/D,GAAG,EAAE,CAAC,CAAC,GAAG,CAAC;IACX;;;OAGG;IACH,SAAS,EAAE,SAAS,CAAC;IACrB,MAAM,EAAE,YAAY,CAAC;IACrB;;;;OAIG;IACH,MAAM,EAAE,OAAO,CAAC;IAChB,KAAK,EAAE,KAAK,GAAG,IAAI,CAAC;CACrB;AAeD;;;;;;;;;;GAUG;AACH,wBAAgB,YAAY,CAAC,OAAO,EAAE,mBAAmB,GAAG,kBAAkB,CAsC7E"}
@@ -1,31 +1,56 @@
1
- import { useEffect, useSyncExternalStore } from 'react';
1
+ import { useCallback, useEffect, useMemo, useSyncExternalStore } from 'react';
2
+ import * as Y from 'yjs';
2
3
  import { getOrCreateSession, useCollaborationContext } from '../context.js';
4
+ import { YjsCollabDoc } from '../docs/yjs_doc.js';
5
+ const SERVER_SNAPSHOT = { status: 'connecting', error: null, synced: false };
6
+ /**
7
+ * Placeholder para SSR: no servidor não abrimos sessão nenhuma, mas o
8
+ * contrato devolve um `Y.Doc`. Um único doc vazio compartilhado evita alocar
9
+ * (e vazar) um documento por render de servidor.
10
+ */
11
+ let serverDoc;
12
+ function getServerDoc() {
13
+ if (!serverDoc)
14
+ serverDoc = new Y.Doc();
15
+ return serverDoc;
16
+ }
3
17
  /**
4
18
  * Conecta ao documento colaborativo e devolve o Y.Doc + status.
5
19
  *
20
+ * A sessão é contada por referência: montar segura, desmontar solta, e o
21
+ * último a sair fecha o socket sem destruir o `Y.Doc` — remontar (voltar na
22
+ * navegação, StrictMode) reconecta sobre o mesmo documento.
23
+ *
6
24
  * ```tsx
7
- * const { doc, status } = useCollabDoc('researches/42/writing')
25
+ * const { doc, status, synced } = useCollabDoc({ docName: 'researches/42/writing' })
8
26
  * ```
9
27
  */
10
28
  export function useCollabDoc(options) {
11
29
  const { docName } = options;
12
30
  const context = useCollaborationContext();
13
- const session = getOrCreateSession(context, docName);
14
- const status = useSyncExternalStore((onStoreChange) => session.subscribe(onStoreChange), () => session.getStatus(), () => 'connecting');
15
- // Garante start no mount. No cleanup destruímos a sessão: o Hocuspocus
16
- // Provider enfileira callbacks (requestIdleCallback, setTimeout) que
17
- // tentam acessar o Y.Doc e o awareness — se o componente re-monta (React
18
- // 18 StrictMode, navegação), o `doc` antigo pode estar destruído e o
19
- // callback quebra com `Cannot read properties of undefined (reading
20
- // 'startTime')`, que dispara o re-render loop do Tiptap Collaboration
21
- // (React #185). Destruir a sessão garante que timers e listeners são
22
- // limpos junto com o doc.
23
- useEffect(() => {
24
- void session.start();
25
- return () => {
26
- session.destroy();
27
- };
28
- }, [session]);
29
- return { doc: session.doc, status, error: session.error };
31
+ // Lazy e no-op no servidor: `getOrCreateSession` muta o Map do provider e
32
+ // constrói um Y.Doc. Efeitos não rodam no SSR, então chamar isso no corpo
33
+ // do render vazava uma sessão por render de servidor — além de ser um
34
+ // render impuro sob React concorrente.
35
+ const isBrowser = typeof window !== 'undefined';
36
+ const session = useMemo(() => (isBrowser ? getOrCreateSession(context, docName) : null), [context, docName, isBrowser]);
37
+ const subscribe = useCallback((onStoreChange) => session?.subscribe(onStoreChange) ?? (() => { }), [session]);
38
+ const getSnapshot = useCallback(() => session?.getSnapshot() ?? SERVER_SNAPSHOT, [session]);
39
+ const snapshot = useSyncExternalStore(subscribe, getSnapshot, () => SERVER_SNAPSHOT);
40
+ const doc = session?.doc ?? getServerDoc();
41
+ const collabDoc = useMemo(() => new YjsCollabDoc(doc), [doc]);
42
+ // Refcount, não destroy. Destruir o Y.Doc no unmount deixava o Hocuspocus
43
+ // Provider com callbacks enfileirados apontando pra um doc destruído
44
+ // (`Cannot read properties of undefined (reading 'startTime')` → React
45
+ // #185), e devolvia um cadáver de sessão na remontagem. `retain()` devolve
46
+ // o `release` correspondente; o último a soltar fecha o transporte.
47
+ useEffect(() => session?.retain(), [session]);
48
+ return {
49
+ doc,
50
+ collabDoc,
51
+ status: snapshot.status,
52
+ synced: snapshot.synced,
53
+ error: snapshot.error,
54
+ };
30
55
  }
31
56
  //# sourceMappingURL=use_collab_doc.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"use_collab_doc.js","sourceRoot":"","sources":["../../../src/hooks/use_collab_doc.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,oBAAoB,EAAE,MAAM,OAAO,CAAC;AAExD,OAAO,EAAE,kBAAkB,EAAE,uBAAuB,EAAE,MAAM,eAAe,CAAC;AAc5E;;;;;;GAMG;AACH,MAAM,UAAU,YAAY,CAAC,OAA4B;IACvD,MAAM,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC;IAC5B,MAAM,OAAO,GAAG,uBAAuB,EAAE,CAAC;IAC1C,MAAM,OAAO,GAAG,kBAAkB,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;IAErD,MAAM,MAAM,GAAG,oBAAoB,CACjC,CAAC,aAAa,EAAE,EAAE,CAAC,OAAO,CAAC,SAAS,CAAC,aAAa,CAAC,EACnD,GAAG,EAAE,CAAC,OAAO,CAAC,SAAS,EAAE,EACzB,GAAG,EAAE,CAAC,YAA4B,CACnC,CAAC;IAEF,uEAAuE;IACvE,qEAAqE;IACrE,yEAAyE;IACzE,qEAAqE;IACrE,oEAAoE;IACpE,sEAAsE;IACtE,qEAAqE;IACrE,0BAA0B;IAC1B,SAAS,CAAC,GAAG,EAAE;QACb,KAAK,OAAO,CAAC,KAAK,EAAE,CAAC;QACrB,OAAO,GAAG,EAAE;YACV,OAAO,CAAC,OAAO,EAAE,CAAC;QACpB,CAAC,CAAC;IACJ,CAAC,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC;IAEd,OAAO,EAAE,GAAG,EAAE,OAAO,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,CAAC,KAAK,EAAE,CAAC;AAC5D,CAAC"}
1
+ {"version":3,"file":"use_collab_doc.js","sourceRoot":"","sources":["../../../src/hooks/use_collab_doc.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,SAAS,EAAE,OAAO,EAAE,oBAAoB,EAAE,MAAM,OAAO,CAAC;AAC9E,OAAO,KAAK,CAAC,MAAM,KAAK,CAAC;AACzB,OAAO,EAAE,kBAAkB,EAAE,uBAAuB,EAAE,MAAM,eAAe,CAAC;AAE5E,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AA0BlD,MAAM,eAAe,GAAuB,EAAE,MAAM,EAAE,YAAY,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC;AAEjG;;;;GAIG;AACH,IAAI,SAA4B,CAAC;AACjC,SAAS,YAAY;IACnB,IAAI,CAAC,SAAS;QAAE,SAAS,GAAG,IAAI,CAAC,CAAC,GAAG,EAAE,CAAC;IACxC,OAAO,SAAS,CAAC;AACnB,CAAC;AAED;;;;;;;;;;GAUG;AACH,MAAM,UAAU,YAAY,CAAC,OAA4B;IACvD,MAAM,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC;IAC5B,MAAM,OAAO,GAAG,uBAAuB,EAAE,CAAC;IAE1C,0EAA0E;IAC1E,0EAA0E;IAC1E,sEAAsE;IACtE,uCAAuC;IACvC,MAAM,SAAS,GAAG,OAAO,MAAM,KAAK,WAAW,CAAC;IAChD,MAAM,OAAO,GAAG,OAAO,CACrB,GAAG,EAAE,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,kBAAkB,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,EAC/D,CAAC,OAAO,EAAE,OAAO,EAAE,SAAS,CAAC,CAC9B,CAAC;IAEF,MAAM,SAAS,GAAG,WAAW,CAC3B,CAAC,aAAyB,EAAE,EAAE,CAAC,OAAO,EAAE,SAAS,CAAC,aAAa,CAAC,IAAI,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,EAC9E,CAAC,OAAO,CAAC,CACV,CAAC;IACF,MAAM,WAAW,GAAG,WAAW,CAAC,GAAG,EAAE,CAAC,OAAO,EAAE,WAAW,EAAE,IAAI,eAAe,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC;IAC5F,MAAM,QAAQ,GAAG,oBAAoB,CAAC,SAAS,EAAE,WAAW,EAAE,GAAG,EAAE,CAAC,eAAe,CAAC,CAAC;IAErF,MAAM,GAAG,GAAG,OAAO,EAAE,GAAG,IAAI,YAAY,EAAE,CAAC;IAC3C,MAAM,SAAS,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC,IAAI,YAAY,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IAE9D,0EAA0E;IAC1E,qEAAqE;IACrE,uEAAuE;IACvE,2EAA2E;IAC3E,oEAAoE;IACpE,SAAS,CAAC,GAAG,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC;IAE9C,OAAO;QACL,GAAG;QACH,SAAS;QACT,MAAM,EAAE,QAAQ,CAAC,MAAM;QACvB,MAAM,EAAE,QAAQ,CAAC,MAAM;QACvB,KAAK,EAAE,QAAQ,CAAC,KAAK;KACtB,CAAC;AACJ,CAAC"}
@@ -18,6 +18,8 @@ export interface UseCollabEditorResult<S> {
18
18
  /** Writes the next scene into the shared doc. */
19
19
  update(next: S): void;
20
20
  status: CollabStatus;
21
+ /** True once the server's initial state has been applied to the doc. */
22
+ synced: boolean;
21
23
  peers: CollabPeer[];
22
24
  }
23
25
  /**
@@ -35,6 +37,9 @@ export interface UseCollabEditorResult<S> {
35
37
  * adapter: createExcalidrawAdapter(),
36
38
  * })
37
39
  * ```
40
+ *
41
+ * Scene writes are whole-scene replacement (last-write-wins over the whole
42
+ * key), not per-element merging — see the Editors docs.
38
43
  */
39
44
  export declare function useCollabEditor<S>(options: UseCollabEditorOptions<S>): UseCollabEditorResult<S>;
40
45
  //# sourceMappingURL=use_collab_editor.d.ts.map
@@ -1 +1 @@
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
+ {"version":3,"file":"use_collab_editor.d.ts","sourceRoot":"","sources":["../../../src/hooks/use_collab_editor.ts"],"names":[],"mappings":"AACA,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;AAI5D,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,wEAAwE;IACxE,MAAM,EAAE,OAAO,CAAC;IAChB,KAAK,EAAE,UAAU,EAAE,CAAC;CACrB;AAED;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAgB,eAAe,CAAC,CAAC,EAAE,OAAO,EAAE,sBAAsB,CAAC,CAAC,CAAC,GAAG,qBAAqB,CAAC,CAAC,CAAC,CAwC/F"}
@@ -1,7 +1,6 @@
1
1
  import { useCallback, useMemo, useRef, useSyncExternalStore } from 'react';
2
- import { getOrCreateSession, useCollaborationContext } from '../context.js';
3
- import { YjsCollabDoc } from '../docs/index.js';
4
2
  import { useAwareness } from './use_awareness.js';
3
+ import { useCollabDoc } from './use_collab_doc.js';
5
4
  /**
6
5
  * Engine-aware, editor-aware view of a collaborative document.
7
6
  *
@@ -17,30 +16,40 @@ import { useAwareness } from './use_awareness.js';
17
16
  * adapter: createExcalidrawAdapter(),
18
17
  * })
19
18
  * ```
19
+ *
20
+ * Scene writes are whole-scene replacement (last-write-wins over the whole
21
+ * key), not per-element merging — see the Editors docs.
20
22
  */
21
23
  export function useCollabEditor(options) {
22
24
  const { docName, editorId, adapter, doc } = options;
23
- const context = useCollaborationContext();
24
- const session = getOrCreateSession(context, docName);
25
- const collabDoc = doc ?? new YjsCollabDoc(session.doc);
26
- const { peers, status } = useAwareness({ docName });
27
- // Reactivity: any Yjs update re-renders and re-reads the adapter state.
28
- const subscribe = useCallback((onStoreChange) => {
29
- return collabDoc.onUpdate(onStoreChange);
30
- }, [collabDoc]);
31
- // Adapter view + stable snapshot: scenes are freshly built objects, so we
32
- // cache by serialized equality to keep useSyncExternalStore from looping.
25
+ const { collabDoc: sessionDoc, status, synced } = useCollabDoc({ docName });
26
+ const { peers } = useAwareness({ docName });
27
+ // Memoized: building the wrapper in the render body gave `subscribe` a new
28
+ // identity on every render, so useSyncExternalStore tore down and re-added
29
+ // the Y.Doc 'update' listener each time.
30
+ const collabDoc = useMemo(() => doc ?? sessionDoc, [doc, sessionDoc]);
33
31
  const view = useMemo(() => adapter.create(collabDoc, editorId), [adapter, collabDoc, editorId]);
32
+ // Reactivity: any document update bumps a version and re-reads the adapter
33
+ // state. The scene is a freshly built object on every read, so the snapshot
34
+ // is cached by version — the old cache key was `JSON.stringify(scene)`,
35
+ // which serialized the whole board on every stroke just to decide whether
36
+ // anything changed.
37
+ const versionRef = useRef(0);
38
+ const subscribe = useCallback((onStoreChange) => collabDoc.onUpdate(() => {
39
+ versionRef.current += 1;
40
+ onStoreChange();
41
+ }), [collabDoc]);
34
42
  const cacheRef = useRef(undefined);
35
43
  const getSnapshot = useCallback(() => {
44
+ const cached = cacheRef.current;
45
+ if (cached && cached.version === versionRef.current && cached.view === view) {
46
+ return cached.value;
47
+ }
36
48
  const next = view.state;
37
- const key = JSON.stringify(next);
38
- if (cacheRef.current?.key === key)
39
- return cacheRef.current.value;
40
- cacheRef.current = { key, value: next };
49
+ cacheRef.current = { version: versionRef.current, view, value: next };
41
50
  return next;
42
51
  }, [view]);
43
52
  const state = useSyncExternalStore(subscribe, getSnapshot, getSnapshot);
44
- return { state, update: view.update, status, peers };
53
+ return { state, update: view.update, status, synced, peers };
45
54
  }
46
55
  //# sourceMappingURL=use_collab_editor.js.map
@@ -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;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"}
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;AAI3E,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAyBnD;;;;;;;;;;;;;;;;;;GAkBG;AACH,MAAM,UAAU,eAAe,CAAI,OAAkC;IACnE,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,OAAO,CAAC;IACpD,MAAM,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,YAAY,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC;IAC5E,MAAM,EAAE,KAAK,EAAE,GAAG,YAAY,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC;IAE5C,2EAA2E;IAC3E,2EAA2E;IAC3E,yCAAyC;IACzC,MAAM,SAAS,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC,GAAG,IAAI,UAAU,EAAE,CAAC,GAAG,EAAE,UAAU,CAAC,CAAC,CAAC;IACtE,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;IAEhG,2EAA2E;IAC3E,4EAA4E;IAC5E,wEAAwE;IACxE,0EAA0E;IAC1E,oBAAoB;IACpB,MAAM,UAAU,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;IAC7B,MAAM,SAAS,GAAG,WAAW,CAC3B,CAAC,aAAyB,EAAE,EAAE,CAC5B,SAAS,CAAC,QAAQ,CAAC,GAAG,EAAE;QACtB,UAAU,CAAC,OAAO,IAAI,CAAC,CAAC;QACxB,aAAa,EAAE,CAAC;IAClB,CAAC,CAAC,EACJ,CAAC,SAAS,CAAC,CACZ,CAAC;IAEF,MAAM,QAAQ,GAAG,MAAM,CAA2D,SAAS,CAAC,CAAC;IAC7F,MAAM,WAAW,GAAG,WAAW,CAAC,GAAM,EAAE;QACtC,MAAM,MAAM,GAAG,QAAQ,CAAC,OAAO,CAAC;QAChC,IAAI,MAAM,IAAI,MAAM,CAAC,OAAO,KAAK,UAAU,CAAC,OAAO,IAAI,MAAM,CAAC,IAAI,KAAK,IAAI,EAAE,CAAC;YAC5E,OAAO,MAAM,CAAC,KAAK,CAAC;QACtB,CAAC;QACD,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC;QACxB,QAAQ,CAAC,OAAO,GAAG,EAAE,OAAO,EAAE,UAAU,CAAC,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;QACtE,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,MAAM,EAAE,KAAK,EAAE,CAAC;AAC/D,CAAC"}
@@ -9,7 +9,12 @@ export interface UseCommentsResult {
9
9
  loading: boolean;
10
10
  error: Error | null;
11
11
  refresh(): Promise<void>;
12
- create(input: Pick<CollabComment, 'space' | 'anchor' | 'body' | 'userId'> & {
12
+ /**
13
+ * The author is the authenticated caller — `handleCreateComment` sets
14
+ * `userId` from the session and discards whatever the body claimed, so this
15
+ * does not ask for one.
16
+ */
17
+ create(input: Pick<CollabComment, 'space' | 'anchor' | 'body'> & {
13
18
  authorName?: string | null;
14
19
  }): Promise<CollabComment>;
15
20
  resolve(commentId: string, resolved?: boolean): Promise<void>;
@@ -1 +1 @@
1
- {"version":3,"file":"use_comments.d.ts","sourceRoot":"","sources":["../../../src/hooks/use_comments.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAEjD,MAAM,WAAW,kBAAkB;IACjC,OAAO,EAAE,MAAM,CAAC;IAChB,6CAA6C;IAC7C,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,iBAAiB;IAChC,QAAQ,EAAE,aAAa,EAAE,CAAC;IAC1B,OAAO,EAAE,OAAO,CAAC;IACjB,KAAK,EAAE,KAAK,GAAG,IAAI,CAAC;IACpB,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IACzB,MAAM,CACJ,KAAK,EAAE,IAAI,CAAC,aAAa,EAAE,OAAO,GAAG,QAAQ,GAAG,MAAM,GAAG,QAAQ,CAAC,GAAG;QACnE,UAAU,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;KAC5B,GACA,OAAO,CAAC,aAAa,CAAC,CAAC;IAC1B,OAAO,CAAC,SAAS,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC9D,MAAM,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CAC1C;AAED;;;;;;GAMG;AACH,wBAAgB,WAAW,CAAC,OAAO,EAAE,kBAAkB,GAAG,iBAAiB,CA0E1E"}
1
+ {"version":3,"file":"use_comments.d.ts","sourceRoot":"","sources":["../../../src/hooks/use_comments.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAEjD,MAAM,WAAW,kBAAkB;IACjC,OAAO,EAAE,MAAM,CAAC;IAChB,6CAA6C;IAC7C,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,iBAAiB;IAChC,QAAQ,EAAE,aAAa,EAAE,CAAC;IAC1B,OAAO,EAAE,OAAO,CAAC;IACjB,KAAK,EAAE,KAAK,GAAG,IAAI,CAAC;IACpB,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IACzB;;;;OAIG;IACH,MAAM,CACJ,KAAK,EAAE,IAAI,CAAC,aAAa,EAAE,OAAO,GAAG,QAAQ,GAAG,MAAM,CAAC,GAAG;QACxD,UAAU,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;KAC5B,GACA,OAAO,CAAC,aAAa,CAAC,CAAC;IAC1B,OAAO,CAAC,SAAS,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC9D,MAAM,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CAC1C;AAED;;;;;;GAMG;AACH,wBAAgB,WAAW,CAAC,OAAO,EAAE,kBAAkB,GAAG,iBAAiB,CA0E1E"}
@@ -1,5 +1,5 @@
1
1
  import { useCallback, useEffect, useRef, useState } from 'react';
2
- import { getOrCreateSession, useCollaborationContext } from '../context.js';
2
+ import { useCollaborationContext } from '../context.js';
3
3
  import { createComment as apiCreateComment, deleteComment as apiDeleteComment, listComments, resolveComment, } from '../rest_client.js';
4
4
  /**
5
5
  * Comentários ancorados de um documento (REST — dados relacionais no Adonis).
@@ -12,9 +12,9 @@ export function useComments(options) {
12
12
  const { docName, space } = options;
13
13
  const context = useCollaborationContext();
14
14
  const config = context.getConfig();
15
- // Mantém a sessão viva (compartilha o ciclo do doc) sem exigir o WS pra
16
- // comentários — REST funciona mesmo com engine offline.
17
- void getOrCreateSession(context, docName);
15
+ // Nada de abrir sessão aqui: comentários são REST puro e funcionam com o
16
+ // engine offline. Criar a sessão no corpo do render só mutava o Map do
17
+ // provider (e vazava um Y.Doc por render de servidor) sem nunca iniciá-la.
18
18
  const [comments, setComments] = useState([]);
19
19
  const [loading, setLoading] = useState(true);
20
20
  const [error, setError] = useState(null);
@@ -1 +1 @@
1
- {"version":3,"file":"use_comments.js","sourceRoot":"","sources":["../../../src/hooks/use_comments.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"use_comments.js","sourceRoot":"","sources":["../../../src/hooks/use_comments.ts"],"names":[],"mappings":"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"}
@@ -1,3 +1,4 @@
1
+ import type * as Y from 'yjs';
1
2
  import type { CollabDoc } from '../docs/types.js';
2
3
  /**
3
4
  * Minimal imperative API that Excalidraw exposes for programmatic control.
@@ -11,8 +12,12 @@ export interface ExcalidrawAPIHandle {
11
12
  }): void;
12
13
  }
13
14
  export interface UseExcalidrawSyncOptions {
14
- /** Documento colaborativo (do `useCollabDoc`). Pode ser `null` enquanto conecta. */
15
- doc: CollabDoc | null;
15
+ /**
16
+ * Documento colaborativo. Aceita tanto o `Y.Doc` quanto o `collabDoc` que
17
+ * o `useCollabDoc` devolve — o wrapper `YjsCollabDoc` é aplicado aqui
18
+ * quando necessário. Pode ser `null` enquanto conecta.
19
+ */
20
+ doc: CollabDoc | Y.Doc | null;
16
21
  /** API imperativa do Excalidraw (`excalidrawAPI` do componente). */
17
22
  excalidrawAPI: ExcalidrawAPIHandle | null;
18
23
  /** Chave do editor no doc (default `'excalidraw'`). */
@@ -21,16 +26,32 @@ export interface UseExcalidrawSyncOptions {
21
26
  /**
22
27
  * Liga um documento colaborativo à API imperativa do Excalidraw.
23
28
  *
24
- * - **Desenho local** → grava os elements no Y.Doc (replica via WebSocket).
29
+ * - **Desenho local** → grava os elements no doc (replica via WebSocket).
25
30
  * - **Mudança remota** → `updateScene` no canvas.
26
- * - **Ao montar** → restaura o estado salvo do doc.
31
+ * - **Ao montar** → restaura o estado salvo do doc (inclusive quando o
32
+ * estado salvo é uma lousa vazia).
27
33
  *
28
34
  * ```tsx
29
- * const [api, setApi] = useState(null)
35
+ * const [api, setApi] = useState<ExcalidrawAPIHandle | null>(null)
30
36
  * const { doc } = useCollabDoc({ docName: 'lousas/1' })
31
37
  * useExcalidrawSync({ doc, excalidrawAPI: api })
32
- * <Excalidraw excalidrawAPI={setApi} />
38
+ *
39
+ * return <Excalidraw excalidrawAPI={setApi} />
33
40
  * ```
41
+ *
42
+ * ## Last-write-wins, e o que isso custa
43
+ *
44
+ * A cena inteira mora numa única chave do documento (`Y.Map[editorId].value`),
45
+ * então cada `onChange` grava o array de elements completo. O CRDT converge,
46
+ * mas **sobre a cena como unidade**: duas pessoas mexendo em formas
47
+ * diferentes no mesmo instante produzem duas escritas de cena inteira e a
48
+ * última vence — o traço da outra some. Não há merge por elemento aqui.
49
+ *
50
+ * Na prática dá pra conviver: as edições aparecem, as pessoas trabalham em
51
+ * regiões diferentes e os cursores de presença mantêm distância. Se a
52
+ * concorrência por item importa de verdade, modele cada elemento como sua
53
+ * própria chave e escreva um adapter que faça isso (veja
54
+ * `CollabEditorAdapter`) — este hook não vai te dar isso.
34
55
  */
35
56
  export declare function useExcalidrawSync({ doc, excalidrawAPI, editorId, }: UseExcalidrawSyncOptions): void;
36
57
  //# sourceMappingURL=use_excalidraw_sync.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"use_excalidraw_sync.d.ts","sourceRoot":"","sources":["../../../src/hooks/use_excalidraw_sync.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAElD;;;;GAIG;AACH,MAAM,WAAW,mBAAmB;IAClC,QAAQ,CAAC,EAAE,EAAE,CAAC,QAAQ,EAAE,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,KAAK,IAAI,GAAG,MAAM,IAAI,CAAC;IACjF,WAAW,CAAC,KAAK,EAAE;QAAE,QAAQ,EAAE,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,CAAA;KAAE,GAAG,IAAI,CAAC;CAC5E;AAED,MAAM,WAAW,wBAAwB;IACvC,oFAAoF;IACpF,GAAG,EAAE,SAAS,GAAG,IAAI,CAAC;IACtB,oEAAoE;IACpE,aAAa,EAAE,mBAAmB,GAAG,IAAI,CAAC;IAC1C,uDAAuD;IACvD,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAgB,iBAAiB,CAAC,EAChC,GAAG,EACH,aAAa,EACb,QAAuB,GACxB,EAAE,wBAAwB,QA4C1B"}
1
+ {"version":3,"file":"use_excalidraw_sync.d.ts","sourceRoot":"","sources":["../../../src/hooks/use_excalidraw_sync.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,KAAK,CAAC,MAAM,KAAK,CAAC;AAC9B,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAIlD;;;;GAIG;AACH,MAAM,WAAW,mBAAmB;IAClC,QAAQ,CAAC,EAAE,EAAE,CAAC,QAAQ,EAAE,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,KAAK,IAAI,GAAG,MAAM,IAAI,CAAC;IACjF,WAAW,CAAC,KAAK,EAAE;QAAE,QAAQ,EAAE,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,CAAA;KAAE,GAAG,IAAI,CAAC;CAC5E;AAED,MAAM,WAAW,wBAAwB;IACvC;;;;OAIG;IACH,GAAG,EAAE,SAAS,GAAG,CAAC,CAAC,GAAG,GAAG,IAAI,CAAC;IAC9B,oEAAoE;IACpE,aAAa,EAAE,mBAAmB,GAAG,IAAI,CAAC;IAC1C,uDAAuD;IACvD,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAYD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6BG;AACH,wBAAgB,iBAAiB,CAAC,EAChC,GAAG,EACH,aAAa,EACb,QAAuB,GACxB,EAAE,wBAAwB,QAsD1B"}
@@ -1,34 +1,66 @@
1
1
  import { useEffect, useMemo, useRef } from 'react';
2
+ import { YjsCollabDoc } from '../docs/yjs_doc.js';
2
3
  import { createExcalidrawAdapter } from '../editors/excalidraw.js';
4
+ /** `Y.Doc` não tem `read`/`write`/`onUpdate` — envolve quando for um. */
5
+ function isCollabDoc(doc) {
6
+ const candidate = doc;
7
+ return (typeof candidate.read === 'function' &&
8
+ typeof candidate.write === 'function' &&
9
+ typeof candidate.onUpdate === 'function');
10
+ }
3
11
  /**
4
12
  * Liga um documento colaborativo à API imperativa do Excalidraw.
5
13
  *
6
- * - **Desenho local** → grava os elements no Y.Doc (replica via WebSocket).
14
+ * - **Desenho local** → grava os elements no doc (replica via WebSocket).
7
15
  * - **Mudança remota** → `updateScene` no canvas.
8
- * - **Ao montar** → restaura o estado salvo do doc.
16
+ * - **Ao montar** → restaura o estado salvo do doc (inclusive quando o
17
+ * estado salvo é uma lousa vazia).
9
18
  *
10
19
  * ```tsx
11
- * const [api, setApi] = useState(null)
20
+ * const [api, setApi] = useState<ExcalidrawAPIHandle | null>(null)
12
21
  * const { doc } = useCollabDoc({ docName: 'lousas/1' })
13
22
  * useExcalidrawSync({ doc, excalidrawAPI: api })
14
- * <Excalidraw excalidrawAPI={setApi} />
23
+ *
24
+ * return <Excalidraw excalidrawAPI={setApi} />
15
25
  * ```
26
+ *
27
+ * ## Last-write-wins, e o que isso custa
28
+ *
29
+ * A cena inteira mora numa única chave do documento (`Y.Map[editorId].value`),
30
+ * então cada `onChange` grava o array de elements completo. O CRDT converge,
31
+ * mas **sobre a cena como unidade**: duas pessoas mexendo em formas
32
+ * diferentes no mesmo instante produzem duas escritas de cena inteira e a
33
+ * última vence — o traço da outra some. Não há merge por elemento aqui.
34
+ *
35
+ * Na prática dá pra conviver: as edições aparecem, as pessoas trabalham em
36
+ * regiões diferentes e os cursores de presença mantêm distância. Se a
37
+ * concorrência por item importa de verdade, modele cada elemento como sua
38
+ * própria chave e escreva um adapter que faça isso (veja
39
+ * `CollabEditorAdapter`) — este hook não vai te dar isso.
16
40
  */
17
41
  export function useExcalidrawSync({ doc, excalidrawAPI, editorId = 'excalidraw', }) {
18
42
  const adapter = useMemo(() => createExcalidrawAdapter(), []);
19
- const view = useMemo(() => (doc ? adapter.create(doc, editorId) : null), [adapter, doc, editorId]);
43
+ const collabDoc = useMemo(() => {
44
+ if (!doc)
45
+ return null;
46
+ return isCollabDoc(doc) ? doc : new YjsCollabDoc(doc);
47
+ }, [doc]);
48
+ const view = useMemo(() => (collabDoc ? adapter.create(collabDoc, editorId) : null), [adapter, collabDoc, editorId]);
20
49
  const localFlag = useRef(null);
21
50
  // Ao montar, carrega o estado inicial do doc no canvas.
22
51
  useEffect(() => {
23
- if (!excalidrawAPI || !view)
52
+ if (!excalidrawAPI || !view || !collabDoc)
24
53
  return;
25
- const scene = view.state;
26
- if (scene.elements.length > 0) {
27
- excalidrawAPI.updateScene({
28
- elements: scene.elements,
29
- });
30
- }
31
- }, [excalidrawAPI, view]);
54
+ // `elements.length > 0` confundia "documento ainda vazio" com "lousa
55
+ // apagada": depois de um select-all + delete, a cena salva é
56
+ // `{ elements: [] }` e o guard antigo pulava a restauração, então o
57
+ // reload trazia os traços de volta. O que importa é se a chave existe.
58
+ if (collabDoc.read(editorId) === undefined)
59
+ return;
60
+ excalidrawAPI.updateScene({
61
+ elements: view.state.elements,
62
+ });
63
+ }, [collabDoc, editorId, excalidrawAPI, view]);
32
64
  // Desenho local → escreve no doc.
33
65
  useEffect(() => {
34
66
  if (!excalidrawAPI || !view)
@@ -45,19 +77,21 @@ export function useExcalidrawSync({ doc, excalidrawAPI, editorId = 'excalidraw',
45
77
  }, [excalidrawAPI, view]);
46
78
  // Mudança remota → atualiza o canvas.
47
79
  useEffect(() => {
48
- if (!doc || !excalidrawAPI || !view)
80
+ if (!collabDoc || !excalidrawAPI || !view)
49
81
  return;
50
- const unsub = doc.onUpdate(() => {
82
+ const unsub = collabDoc.onUpdate(() => {
51
83
  if (localFlag.current || !excalidrawAPI)
52
84
  return;
53
- const scene = view.state;
54
- if (scene.elements.length > 0) {
55
- excalidrawAPI.updateScene({
56
- elements: scene.elements,
57
- });
58
- }
85
+ // Mesmo motivo do efeito de mount: um peer que apagou tudo manda
86
+ // `{ elements: [] }` e isso precisa chegar no canvas, senão apagar
87
+ // nunca propaga.
88
+ if (collabDoc.read(editorId) === undefined)
89
+ return;
90
+ excalidrawAPI.updateScene({
91
+ elements: view.state.elements,
92
+ });
59
93
  });
60
94
  return () => unsub();
61
- }, [doc, excalidrawAPI, view]);
95
+ }, [collabDoc, editorId, excalidrawAPI, view]);
62
96
  }
63
97
  //# sourceMappingURL=use_excalidraw_sync.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"use_excalidraw_sync.js","sourceRoot":"","sources":["../../../src/hooks/use_excalidraw_sync.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,OAAO,CAAC;AACnD,OAAO,EAAE,uBAAuB,EAAE,MAAM,0BAA0B,CAAC;AAsBnE;;;;;;;;;;;;;GAaG;AACH,MAAM,UAAU,iBAAiB,CAAC,EAChC,GAAG,EACH,aAAa,EACb,QAAQ,GAAG,YAAY,GACE;IACzB,MAAM,OAAO,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC,uBAAuB,EAAE,EAAE,EAAE,CAAC,CAAC;IAC7D,MAAM,IAAI,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,GAAG,EAAE,QAAQ,CAAC,CAAC,CAAC;IACnG,MAAM,SAAS,GAAG,MAAM,CAAgB,IAAI,CAAC,CAAC;IAE9C,wDAAwD;IACxD,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,CAAC,aAAa,IAAI,CAAC,IAAI;YAAE,OAAO;QACpC,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC;QACzB,IAAI,KAAK,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC9B,aAAa,CAAC,WAAW,CAAC;gBACxB,QAAQ,EAAE,KAAK,CAAC,QAA8C;aAC/D,CAAC,CAAC;QACL,CAAC;IACH,CAAC,EAAE,CAAC,aAAa,EAAE,IAAI,CAAC,CAAC,CAAC;IAE1B,kCAAkC;IAClC,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,CAAC,aAAa,IAAI,CAAC,IAAI;YAAE,OAAO;QACpC,MAAM,KAAK,GAAG,aAAa,CAAC,QAAQ,CAAC,CAAC,GAAG,EAAE,EAAE;YAC3C,MAAM,KAAK,GAAI,GAA0C,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC;YACjF,SAAS,CAAC,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC,CAAC;YACpC,IAAI,CAAC,MAAM,CAAC,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC,CAAC;YACjC,cAAc,CAAC,GAAG,EAAE;gBAClB,SAAS,CAAC,OAAO,GAAG,IAAI,CAAC;YAC3B,CAAC,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;QACH,OAAO,GAAG,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC;IACzB,CAAC,EAAE,CAAC,aAAa,EAAE,IAAI,CAAC,CAAC,CAAC;IAE1B,sCAAsC;IACtC,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,CAAC,GAAG,IAAI,CAAC,aAAa,IAAI,CAAC,IAAI;YAAE,OAAO;QAC5C,MAAM,KAAK,GAAG,GAAG,CAAC,QAAQ,CAAC,GAAG,EAAE;YAC9B,IAAI,SAAS,CAAC,OAAO,IAAI,CAAC,aAAa;gBAAE,OAAO;YAChD,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC;YACzB,IAAI,KAAK,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBAC9B,aAAa,CAAC,WAAW,CAAC;oBACxB,QAAQ,EAAE,KAAK,CAAC,QAA8C;iBAC/D,CAAC,CAAC;YACL,CAAC;QACH,CAAC,CAAC,CAAC;QACH,OAAO,GAAG,EAAE,CAAC,KAAK,EAAE,CAAC;IACvB,CAAC,EAAE,CAAC,GAAG,EAAE,aAAa,EAAE,IAAI,CAAC,CAAC,CAAC;AACjC,CAAC"}
1
+ {"version":3,"file":"use_excalidraw_sync.js","sourceRoot":"","sources":["../../../src/hooks/use_excalidraw_sync.ts"],"names":[],"mappings":"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"}
@@ -1,5 +1,5 @@
1
1
  import { useCallback, useEffect, useRef, useState } from 'react';
2
- import { getOrCreateSession, useCollaborationContext } from '../context.js';
2
+ import { useCollaborationContext } from '../context.js';
3
3
  import { createVersion as apiCreateVersion, restoreVersion as apiRestoreVersion, listVersions, } from '../rest_client.js';
4
4
  /**
5
5
  * Version control de um documento (REST — snapshots ficam no Adonis).
@@ -12,7 +12,7 @@ export function useVersions(options) {
12
12
  const { docName } = options;
13
13
  const context = useCollaborationContext();
14
14
  const config = context.getConfig();
15
- void getOrCreateSession(context, docName);
15
+ // Versões são REST puro — sem sessão/Y.Doc criados no corpo do render.
16
16
  const [versions, setVersions] = useState([]);
17
17
  const [loading, setLoading] = useState(true);
18
18
  const [error, setError] = useState(null);
@@ -1 +1 @@
1
- {"version":3,"file":"use_versions.js","sourceRoot":"","sources":["../../../src/hooks/use_versions.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"use_versions.js","sourceRoot":"","sources":["../../../src/hooks/use_versions.ts"],"names":[],"mappings":"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"}
@@ -1,15 +1,16 @@
1
1
  export { CollaborationProvider, useCollaborationContext } from './context.js';
2
2
  export type { CollaborationProviderProps } from './context.js';
3
3
  export { DocSession } from './session.js';
4
+ export type { DocSessionSnapshot, DocSessionOptions } from './session.js';
4
5
  export { CollabRestError, collabFetch, createComment, createVersion, deleteComment, fetchToken, listComments, listVersions, resolveComment, restoreVersion, } from './rest_client.js';
5
6
  export { defaultTransportFactory } from './transports/index.js';
6
7
  export { HocuspocusCollabTransport } from './transports/hocuspocus.js';
7
8
  export { PartyKitCollabTransport } from './transports/partykit.js';
8
9
  export { PartyServerCollabTransport } from './transports/partyserver.js';
9
10
  export { useCollabDoc } from './hooks/use_collab_doc.js';
10
- export type { UseCollabDocResult } from './hooks/use_collab_doc.js';
11
+ export type { UseCollabDocOptions, UseCollabDocResult } from './hooks/use_collab_doc.js';
11
12
  export { useAwareness } from './hooks/use_awareness.js';
12
- export type { UseAwarenessResult } from './hooks/use_awareness.js';
13
+ export type { CollabLocalUser, UseAwarenessOptions, UseAwarenessResult, } from './hooks/use_awareness.js';
13
14
  export { useComments } from './hooks/use_comments.js';
14
15
  export type { UseCommentsResult } from './hooks/use_comments.js';
15
16
  export { useVersions } from './hooks/use_versions.js';
@@ -24,7 +25,7 @@ export type { ExcalidrawBoardProps } from './components/excalidraw_board.js';
24
25
  export { createExcalidrawAdapter, createTldrawAdapter, createTextAdapter, } from './editors/index.js';
25
26
  export type { CollabEditorAdapter, CollabEditorView, ExcalidrawScene, TldrawScene, } from './editors/index.js';
26
27
  export { useCollabEditor } from './hooks/use_collab_editor.js';
27
- export type { UseCollabEditorResult } from './hooks/use_collab_editor.js';
28
+ export type { UseCollabEditorOptions, UseCollabEditorResult, } from './hooks/use_collab_editor.js';
28
29
  export { YjsCollabDoc, AutomergeCollabDoc } from './docs/index.js';
29
30
  export type { CollabDoc, RichTextDoc, AutomergeDocHost } from './docs/index.js';
30
31
  //# sourceMappingURL=index.d.ts.map
@@ -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,EAAE,iBAAiB,EAAE,MAAM,gCAAgC,CAAC;AACnE,YAAY,EAAE,wBAAwB,EAAE,mBAAmB,EAAE,MAAM,gCAAgC,CAAC;AACpG,OAAO,EAAE,eAAe,EAAE,MAAM,kCAAkC,CAAC;AACnE,YAAY,EAAE,oBAAoB,EAAE,MAAM,kCAAkC,CAAC;AAC7E,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"}
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,YAAY,EAAE,kBAAkB,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAC;AAC1E,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,mBAAmB,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AACzF,OAAO,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;AACxD,YAAY,EACV,eAAe,EACf,mBAAmB,EACnB,kBAAkB,GACnB,MAAM,0BAA0B,CAAC;AAClC,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,EAAE,iBAAiB,EAAE,MAAM,gCAAgC,CAAC;AACnE,YAAY,EAAE,wBAAwB,EAAE,mBAAmB,EAAE,MAAM,gCAAgC,CAAC;AACpG,OAAO,EAAE,eAAe,EAAE,MAAM,kCAAkC,CAAC;AACnE,YAAY,EAAE,oBAAoB,EAAE,MAAM,kCAAkC,CAAC;AAC7E,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,EACV,sBAAsB,EACtB,qBAAqB,GACtB,MAAM,8BAA8B,CAAC;AACtC,OAAO,EAAE,YAAY,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AACnE,YAAY,EAAE,SAAS,EAAE,WAAW,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC"}
@@ -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,EAAE,iBAAiB,EAAE,MAAM,gCAAgC,CAAC;AAEnE,OAAO,EAAE,eAAe,EAAE,MAAM,kCAAkC,CAAC;AAEnE,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"}
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;AAE1C,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;AAMxD,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,EAAE,iBAAiB,EAAE,MAAM,gCAAgC,CAAC;AAEnE,OAAO,EAAE,eAAe,EAAE,MAAM,kCAAkC,CAAC;AAEnE,OAAO,EACL,uBAAuB,EACvB,mBAAmB,EACnB,iBAAiB,GAClB,MAAM,oBAAoB,CAAC;AAO5B,OAAO,EAAE,eAAe,EAAE,MAAM,8BAA8B,CAAC;AAK/D,OAAO,EAAE,YAAY,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAC"}