@rgby/collab-core 1.0.1 → 1.0.2

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/index.d.ts CHANGED
@@ -1,5 +1,4 @@
1
1
  export * from './collab-provider.js';
2
- export * from './useCollab.js';
3
2
  export * from './upload-queue.js';
4
3
  export * from './services/sw-manager.js';
5
4
  export { Collaboration } from '@tiptap/extension-collaboration';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,sBAAsB,CAAA;AACpC,cAAc,gBAAgB,CAAA;AAC9B,cAAc,mBAAmB,CAAA;AACjC,cAAc,0BAA0B,CAAA;AACxC,OAAO,EAAE,aAAa,EAAE,MAAM,iCAAiC,CAAA;AAC/D,OAAO,EAAE,mBAAmB,EAAE,MAAM,sCAAsC,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,sBAAsB,CAAA;AAEpC,cAAc,mBAAmB,CAAA;AACjC,cAAc,0BAA0B,CAAA;AACxC,OAAO,EAAE,aAAa,EAAE,MAAM,iCAAiC,CAAA;AAC/D,OAAO,EAAE,mBAAmB,EAAE,MAAM,sCAAsC,CAAA"}
package/dist/index.js CHANGED
@@ -1,5 +1,4 @@
1
1
  export * from './collab-provider.js';
2
- export * from './useCollab.js';
3
2
  export * from './upload-queue.js';
4
3
  export * from './services/sw-manager.js';
5
4
  export { Collaboration } from '@tiptap/extension-collaboration';
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,sBAAsB,CAAA;AACpC,cAAc,gBAAgB,CAAA;AAC9B,cAAc,mBAAmB,CAAA;AACjC,cAAc,0BAA0B,CAAA;AACxC,OAAO,EAAE,aAAa,EAAE,MAAM,iCAAiC,CAAA;AAC/D,OAAO,EAAE,mBAAmB,EAAE,MAAM,sCAAsC,CAAA"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,sBAAsB,CAAA;AAEpC,cAAc,mBAAmB,CAAA;AACjC,cAAc,0BAA0B,CAAA;AACxC,OAAO,EAAE,aAAa,EAAE,MAAM,iCAAiC,CAAA;AAC/D,OAAO,EAAE,mBAAmB,EAAE,MAAM,sCAAsC,CAAA"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@rgby/collab-core",
3
- "version": "1.0.1",
3
+ "version": "1.0.2",
4
4
  "type": "module",
5
5
  "sideEffects": false,
6
6
  "main": "./dist/index.js",
@@ -83,11 +83,11 @@
83
83
  },
84
84
  "devDependencies": {
85
85
  "@ava/typescript": "^5.0.0",
86
- "@rgby/collab-sdk": "workspace:*",
86
+ "@rgby/collab-sdk": "^1.0.2",
87
87
  "ava": "^6.4.1",
88
88
  "esbuild": "^0.27.2",
89
89
  "happy-dom": "^20.4.0",
90
90
  "tsx": "^4.21.0",
91
91
  "typescript": "^5.9.3"
92
92
  }
93
- }
93
+ }
package/README.md DELETED
@@ -1,60 +0,0 @@
1
- # @collab/client
2
-
3
- A powerful real-time collaboration SDK for building modern web applications. Built on top of [Yjs](https://github.com/yjs/yjs) and [Hocuspocus](https://github.com/ueberdosis/hocuspocus), providing a seamless experience for shared editing, comments, presence, and file uploads.
4
-
5
- ## Features
6
-
7
- - 🔄 **Real-time Sync**: Effortless data synchronization across clients using Yjs.
8
- - 🔌 **Offline Support**: Built-in IndexedDB persistence for offline editing.
9
- - 💬 **Comments**: Integrated commenting system with threads and resolving.
10
- - 👥 **Presence**: Real-time user awareness (cursors, selections).
11
- - 📂 **File Uploads**: Resumable file uploads with offline queue support.
12
- - 🌳 **Document Management**: Hierarchical document structure (spaces, folders).
13
- - ⚡ **Framework Agnostic**: Core logic works with any framework.
14
- - 💚 **Vue Composables**: First-class support for Vue 3.
15
-
16
- ## Installation
17
-
18
- ```bash
19
- npm install @collab/client
20
- ```
21
-
22
- ## Quick Start
23
-
24
- ### 1. Initialize the Client
25
-
26
- ```typescript
27
- import { CollabClient } from '@collab/client';
28
-
29
- const client = new CollabClient({
30
- baseUrl: 'https://api.your-collab-server.com',
31
- authClient: {
32
- // Implement your auth logic here if using custom auth
33
- },
34
- managedAuth: {
35
- // Or use the built-in managed auth
36
- autoRefresh: true
37
- }
38
- });
39
- ```
40
-
41
- ### 2. Connect to a Document
42
-
43
- ```typescript
44
- // Connect to a specific document within a space
45
- const provider = await client.getProvider('space-id', 'document-id');
46
-
47
- // Access the Yjs document
48
- const yDoc = provider.document;
49
- const yText = yDoc.getText('content');
50
-
51
- // Observe changes
52
- yText.observe(() => {
53
- console.log('Content updated:', yText.toString());
54
- });
55
- ```
56
-
57
- ## Documentation
58
-
59
- - [**Vanilla JS Guide**](./VANILLA.md): Detailed guide for using the SDK in any JavaScript environment.
60
- - [**Vue.js Guide**](./VUE.md): Learn how to use the provided Vue composables for reactive collaborative state.
@@ -1,216 +0,0 @@
1
- import { type InjectionKey, type Ref, type ShallowRef, type ComputedRef } from 'vue';
2
- import * as Y from 'yjs';
3
- import { CollabClient, CollabProvider, type CollabClientOptions, type SessionData } from './collab-provider.ts';
4
- import type { Editor, EditorOptions } from '@tiptap/core';
5
- export declare const CollabClientKey: InjectionKey<CollabClient>;
6
- export declare function provideCollabClient(optionsOrInstance: CollabClientOptions | CollabClient): CollabClient;
7
- export declare function useCollabClient(): CollabClient;
8
- export interface UseDocumentReturn {
9
- doc: ShallowRef<Y.Doc>;
10
- provider: ShallowRef<CollabProvider | null>;
11
- status: Ref<'disconnected' | 'connecting' | 'connected'>;
12
- synced: Ref<boolean>;
13
- persistenceReady: Ref<boolean>;
14
- undoManager: ShallowRef<Y.UndoManager | null>;
15
- connect: () => void;
16
- disconnect: () => void;
17
- transact: (callback: (txn: Y.Transaction) => void) => void;
18
- undo: () => void;
19
- redo: () => void;
20
- clearLocalData: () => Promise<void>;
21
- }
22
- export declare function useDocument(spaceId: string, documentId: string): UseDocumentReturn;
23
- export declare function useSyncedMap<T = any>(doc: ShallowRef<Y.Doc>, mapName: string): {
24
- data: Record<string, T>;
25
- set: (key: string, value: T) => T | undefined;
26
- remove: (key: string) => void | undefined;
27
- clear: () => void | undefined;
28
- get: (key: string) => T | undefined;
29
- yMap: ComputedRef<Y.Map<T> | null>;
30
- };
31
- export declare function useSyncedArray<T = any>(doc: ShallowRef<Y.Doc>, arrayName: string): {
32
- list: Ref<T[], T[]>;
33
- push: (item: T) => void | undefined;
34
- unshift: (item: T) => void | undefined;
35
- insert: (index: number, items: T[]) => void | undefined;
36
- deleteAt: (index: number, length?: number) => void | undefined;
37
- replace: (index: number, item: T) => void;
38
- yArray: ComputedRef<Y.Array<T> | null>;
39
- };
40
- export declare function useSyncedText(doc: ShallowRef<Y.Doc>, textName: string): {
41
- text: Ref<string, string>;
42
- insert: (index: number, content: string, attributes?: Record<string, any>) => void | undefined;
43
- delete: (index: number, length: number) => void | undefined;
44
- format: (index: number, length: number, attributes: Record<string, any>) => void | undefined;
45
- yText: ComputedRef<Y.Text | null>;
46
- };
47
- export declare function useSyncedXml(doc: ShallowRef<Y.Doc>, xmlName: string): {
48
- yXml: ShallowRef<Y.XmlFragment | null, Y.XmlFragment | null>;
49
- };
50
- export interface AwarenessUser {
51
- clientId: number;
52
- user: {
53
- name: string;
54
- color: string;
55
- avatar?: string;
56
- };
57
- [key: string]: any;
58
- }
59
- export declare function useAwareness(provider: ShallowRef<CollabProvider | null>): {
60
- states: Ref<{
61
- [x: string]: any;
62
- clientId: number;
63
- user: {
64
- name: string;
65
- color: string;
66
- avatar?: string | undefined;
67
- };
68
- }[], AwarenessUser[] | {
69
- [x: string]: any;
70
- clientId: number;
71
- user: {
72
- name: string;
73
- color: string;
74
- avatar?: string | undefined;
75
- };
76
- }[]>;
77
- currentUser: Ref<{
78
- [x: string]: any;
79
- clientId: number;
80
- user: {
81
- name: string;
82
- color: string;
83
- avatar?: string | undefined;
84
- };
85
- } | null, AwarenessUser | {
86
- [x: string]: any;
87
- clientId: number;
88
- user: {
89
- name: string;
90
- color: string;
91
- avatar?: string | undefined;
92
- };
93
- } | null>;
94
- setLocalState: (state: Partial<AwarenessUser["user"] | any>) => void;
95
- };
96
- export declare function useLiveComments(provider: ShallowRef<CollabProvider | null>, spaceId: string, documentId: string): {
97
- threads: Ref<any[], any[]>;
98
- loading: Ref<boolean, boolean>;
99
- createComment: (content: string, anchor?: any, parentId?: string) => Promise<void>;
100
- refresh: () => Promise<void>;
101
- };
102
- export interface UseAuthReturn {
103
- session: ComputedRef<SessionData | null>;
104
- user: ComputedRef<SessionData['user'] | null>;
105
- isAuthenticated: ComputedRef<boolean>;
106
- login: (email: string, password: string) => Promise<SessionData>;
107
- signup: (email: string, password: string, name: string) => Promise<SessionData>;
108
- logout: () => Promise<void>;
109
- }
110
- export declare function useAuth(providedClient?: CollabClient): UseAuthReturn;
111
- export interface UseTiptapEditorOptions {
112
- spaceId: ComputedRef<string> | Ref<string> | string;
113
- documentId: ComputedRef<string> | Ref<string> | string;
114
- extensions?: any[];
115
- editorOptions?: Partial<EditorOptions>;
116
- user?: {
117
- name?: string;
118
- color?: string;
119
- };
120
- onReady?: (editor: Editor) => void;
121
- autoConnect?: boolean;
122
- }
123
- export interface UseTiptapEditorReturn {
124
- editor: ShallowRef<Editor | null>;
125
- doc: ShallowRef<Y.Doc>;
126
- provider: ShallowRef<CollabProvider | null>;
127
- status: Ref<'disconnected' | 'connecting' | 'connected'>;
128
- synced: Ref<boolean>;
129
- persistenceReady: Ref<boolean>;
130
- loading: Ref<boolean>;
131
- error: Ref<string>;
132
- connect: () => Promise<void>;
133
- disconnect: () => void;
134
- destroy: () => void;
135
- clearLocalData: () => Promise<void>;
136
- }
137
- export declare function useTiptapEditor(options: UseTiptapEditorOptions): UseTiptapEditorReturn;
138
- export declare function useCollaborativeDocument(spaceId: string, documentId: string): {
139
- doc: ShallowRef<Y.Doc>;
140
- provider: ShallowRef<CollabProvider | null>;
141
- status: Ref<"connected" | "disconnected" | "connecting", "connected" | "disconnected" | "connecting">;
142
- synced: Ref<boolean, boolean>;
143
- connect: () => void;
144
- disconnect: () => void;
145
- undo: () => void;
146
- redo: () => void;
147
- transact: (callback: (txn: Y.Transaction) => void) => void;
148
- canUndo: ComputedRef<number | boolean>;
149
- canRedo: ComputedRef<number | boolean>;
150
- users: Ref<{
151
- [x: string]: any;
152
- clientId: number;
153
- user: {
154
- name: string;
155
- color: string;
156
- avatar?: string | undefined;
157
- };
158
- }[], AwarenessUser[] | {
159
- [x: string]: any;
160
- clientId: number;
161
- user: {
162
- name: string;
163
- color: string;
164
- avatar?: string | undefined;
165
- };
166
- }[]>;
167
- me: Ref<{
168
- [x: string]: any;
169
- clientId: number;
170
- user: {
171
- name: string;
172
- color: string;
173
- avatar?: string | undefined;
174
- };
175
- } | null, AwarenessUser | {
176
- [x: string]: any;
177
- clientId: number;
178
- user: {
179
- name: string;
180
- color: string;
181
- avatar?: string | undefined;
182
- };
183
- } | null>;
184
- updatePresence: (state: Partial<AwarenessUser["user"] | any>) => void;
185
- comments: Ref<any[], any[]>;
186
- loadingComments: Ref<boolean, boolean>;
187
- createComment: (content: string, anchor?: any, parentId?: string) => Promise<void>;
188
- useMap: <T>(name: string) => {
189
- data: Record<string, T>;
190
- set: (key: string, value: T) => T | undefined;
191
- remove: (key: string) => void | undefined;
192
- clear: () => void | undefined;
193
- get: (key: string) => T | undefined;
194
- yMap: ComputedRef<Y.Map<T> | null>;
195
- };
196
- useArray: <T>(name: string) => {
197
- list: Ref<T[], T[]>;
198
- push: (item: T) => void | undefined;
199
- unshift: (item: T) => void | undefined;
200
- insert: (index: number, items: T[]) => void | undefined;
201
- deleteAt: (index: number, length?: number) => void | undefined;
202
- replace: (index: number, item: T) => void;
203
- yArray: ComputedRef<Y.Array<T> | null>;
204
- };
205
- useText: (name: string) => {
206
- text: Ref<string, string>;
207
- insert: (index: number, content: string, attributes?: Record<string, any>) => void | undefined;
208
- delete: (index: number, length: number) => void | undefined;
209
- format: (index: number, length: number, attributes: Record<string, any>) => void | undefined;
210
- yText: ComputedRef<Y.Text | null>;
211
- };
212
- useXml: (name: string) => {
213
- yXml: ShallowRef<Y.XmlFragment | null, Y.XmlFragment | null>;
214
- };
215
- };
216
- //# sourceMappingURL=useCollab.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"useCollab.d.ts","sourceRoot":"","sources":["../src/useCollab.ts"],"names":[],"mappings":"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"}
package/dist/useCollab.js DELETED
@@ -1,583 +0,0 @@
1
- // @ts-nocheck
2
- import { inject, provide, ref, reactive, computed, onMounted, onBeforeUnmount, shallowRef, watch, markRaw, nextTick } from 'vue';
3
- import * as Y from 'yjs';
4
- import { CollabClient, CollabProvider } from "./collab-provider.js";
5
- // ----------------------------------------------------------------------
6
- // 1. Setup & Context
7
- // ----------------------------------------------------------------------
8
- export const CollabClientKey = Symbol.for('CollabClient');
9
- export function provideCollabClient(optionsOrInstance) {
10
- const client = optionsOrInstance instanceof CollabClient
11
- ? optionsOrInstance
12
- : new CollabClient(optionsOrInstance);
13
- provide(CollabClientKey, client);
14
- return client;
15
- }
16
- export function useCollabClient() {
17
- const client = inject(CollabClientKey);
18
- if (!client)
19
- throw new Error('CollabClient not provided. Call provideCollabClient() at the root.');
20
- return client;
21
- }
22
- export function useDocument(spaceId, documentId) {
23
- const client = useCollabClient();
24
- // Y.Doc should not be deeply reactive in Vue, so we use shallowRef + markRaw
25
- const doc = shallowRef(markRaw(new Y.Doc()));
26
- const provider = shallowRef(null);
27
- const undoManager = shallowRef(null);
28
- const status = ref('disconnected');
29
- const synced = ref(false);
30
- const persistenceReady = ref(false);
31
- // Track scope for UndoManager to allow filtering (e.g., only undo text, not layout)
32
- const trackedTypes = new Set();
33
- const connect = async () => {
34
- if (provider.value)
35
- return;
36
- const p = await client.getProvider(spaceId, documentId, {
37
- document: doc.value
38
- });
39
- // Wait for persistence to load before syncing
40
- await p.waitForPersistence();
41
- persistenceReady.value = p.isPersistenceReady();
42
- // Event Listeners
43
- const updateStatus = () => { status.value = p.status; };
44
- const updateSynced = () => { synced.value = p.synced; };
45
- p.on('status', updateStatus);
46
- p.on('synced', updateSynced);
47
- p.on('disconnect', updateStatus);
48
- provider.value = markRaw(p);
49
- // Initialize UndoManager
50
- // We defer this slightly to allow composables to register their types if needed
51
- nextTick(() => {
52
- undoManager.value = new Y.UndoManager(trackedTypes.size > 0 ? Array.from(trackedTypes) : doc.value.share.values(), {
53
- doc: doc.value,
54
- captureTransaction: (tr) => tr.origin !== undoManager.value
55
- });
56
- });
57
- };
58
- const disconnect = () => {
59
- provider.value?.destroy();
60
- provider.value = null;
61
- undoManager.value?.destroy();
62
- undoManager.value = null;
63
- status.value = 'disconnected';
64
- synced.value = false;
65
- };
66
- onMounted(connect);
67
- onBeforeUnmount(() => {
68
- disconnect();
69
- doc.value.destroy();
70
- });
71
- const transact = (callback) => {
72
- doc.value.transact(callback, client);
73
- };
74
- const undo = () => undoManager.value?.undo();
75
- const redo = () => undoManager.value?.redo();
76
- const clearLocalData = async () => {
77
- if (provider.value) {
78
- await provider.value.clearLocalData();
79
- }
80
- };
81
- return {
82
- doc,
83
- provider,
84
- status,
85
- synced,
86
- persistenceReady,
87
- undoManager,
88
- connect,
89
- disconnect,
90
- transact,
91
- undo,
92
- redo,
93
- clearLocalData
94
- };
95
- }
96
- // ----------------------------------------------------------------------
97
- // 3. Factory: useSyncedMap
98
- // Reactive wrapper for Y.Map
99
- // ----------------------------------------------------------------------
100
- export function useSyncedMap(doc, mapName) {
101
- // We use reactive so properties are directly accessible in templates
102
- const state = reactive({});
103
- let _ymap = null;
104
- const init = (newDoc) => {
105
- if (_ymap)
106
- _ymap.unobserve(observer);
107
- _ymap = newDoc.getMap(mapName);
108
- // Initial Hydration: clear old keys, set new ones
109
- for (const key in state)
110
- delete state[key];
111
- _ymap.forEach((value, key) => {
112
- state[key] = value;
113
- });
114
- _ymap.observe(observer);
115
- };
116
- const observer = (event) => {
117
- event.keysChanged.forEach(key => {
118
- if (_ymap.has(key)) {
119
- state[key] = _ymap.get(key);
120
- }
121
- else {
122
- delete state[key];
123
- }
124
- });
125
- };
126
- watch(doc, (newDoc) => { if (newDoc)
127
- init(newDoc); }, { immediate: true });
128
- onBeforeUnmount(() => {
129
- if (_ymap)
130
- _ymap.unobserve(observer);
131
- });
132
- // Mutators
133
- const set = (key, value) => _ymap?.set(key, value);
134
- const remove = (key) => _ymap?.delete(key);
135
- const clear = () => _ymap?.clear();
136
- const get = (key) => _ymap?.get(key);
137
- return {
138
- data: state,
139
- set,
140
- remove,
141
- clear,
142
- get,
143
- yMap: computed(() => _ymap)
144
- };
145
- }
146
- // ----------------------------------------------------------------------
147
- // 4. Factory: useSyncedArray
148
- // Reactive wrapper for Y.Array using Deltas for fine-grained DOM updates
149
- // ----------------------------------------------------------------------
150
- export function useSyncedArray(doc, arrayName) {
151
- const list = ref([]);
152
- let _yarray = null;
153
- const init = (newDoc) => {
154
- if (_yarray)
155
- _yarray.unobserve(observer);
156
- _yarray = newDoc.getArray(arrayName);
157
- // Initial full copy
158
- list.value = _yarray.toArray();
159
- _yarray.observe(observer);
160
- };
161
- const observer = (event) => {
162
- let index = 0;
163
- event.delta.forEach((op) => {
164
- if (op.retain) {
165
- index += op.retain;
166
- }
167
- else if (op.insert) {
168
- const items = op.insert;
169
- list.value.splice(index, 0, ...items);
170
- index += items.length;
171
- }
172
- else if (op.delete) {
173
- list.value.splice(index, op.delete);
174
- }
175
- });
176
- };
177
- watch(doc, (newDoc) => { if (newDoc)
178
- init(newDoc); }, { immediate: true });
179
- onBeforeUnmount(() => {
180
- if (_yarray)
181
- _yarray.unobserve(observer);
182
- });
183
- // Mutators
184
- const push = (item) => _yarray?.push([item]);
185
- const unshift = (item) => _yarray?.insert(0, [item]);
186
- const insert = (index, items) => _yarray?.insert(index, items);
187
- const deleteAt = (index, length = 1) => _yarray?.delete(index, length);
188
- /**
189
- * Replaces an item at index. Useful for updating object properties in an array
190
- * since Y.Array doesn't track deep object property changes automatically.
191
- */
192
- const replace = (index, item) => {
193
- if (!_yarray)
194
- return;
195
- doc.value.transact(() => {
196
- _yarray.delete(index, 1);
197
- _yarray.insert(index, [item]);
198
- });
199
- };
200
- return {
201
- list,
202
- push,
203
- unshift,
204
- insert,
205
- deleteAt,
206
- replace,
207
- yArray: computed(() => _yarray)
208
- };
209
- }
210
- // ----------------------------------------------------------------------
211
- // 5. Factory: useSyncedText
212
- // Reactive wrapper for Y.Text
213
- // ----------------------------------------------------------------------
214
- export function useSyncedText(doc, textName) {
215
- const text = ref('');
216
- let _ytext = null;
217
- const init = (newDoc) => {
218
- if (_ytext)
219
- _ytext.unobserve(observer);
220
- _ytext = newDoc.getText(textName);
221
- text.value = _ytext.toString();
222
- _ytext.observe(observer);
223
- };
224
- const observer = (event) => {
225
- // For strings, we usually just want the current value.
226
- // Applying strict deltas to a Javascript string is O(N) anyway.
227
- text.value = _ytext.toString();
228
- };
229
- watch(doc, (newDoc) => { if (newDoc)
230
- init(newDoc); }, { immediate: true });
231
- onBeforeUnmount(() => {
232
- if (_ytext)
233
- _ytext.unobserve(observer);
234
- });
235
- const insert = (index, content, attributes) => _ytext?.insert(index, content, attributes);
236
- const deleteText = (index, length) => _ytext?.delete(index, length);
237
- const format = (index, length, attributes) => _ytext?.format(index, length, attributes);
238
- return {
239
- text, // Read-only reactive string
240
- insert,
241
- delete: deleteText,
242
- format,
243
- yText: computed(() => _ytext)
244
- };
245
- }
246
- // ----------------------------------------------------------------------
247
- // 6. Factory: useSyncedXml
248
- // Exposes Y.XmlFragment (for Tiptap/ProseMirror/Quill)
249
- // ----------------------------------------------------------------------
250
- export function useSyncedXml(doc, xmlName) {
251
- const _yxml = shallowRef(null);
252
- watch(doc, (newDoc) => {
253
- if (newDoc) {
254
- _yxml.value = newDoc.getXmlFragment(xmlName);
255
- }
256
- }, { immediate: true });
257
- return {
258
- yXml: _yxml // Pass this to Tiptap's Collaboration extension
259
- };
260
- }
261
- export function useAwareness(provider) {
262
- const states = ref([]);
263
- const currentUser = ref(null);
264
- const update = () => {
265
- if (!provider.value)
266
- return;
267
- const awareness = provider.value.awareness;
268
- states.value = Array.from(awareness.getStates().entries()).map(([id, state]) => ({
269
- clientId: id,
270
- ...state
271
- }));
272
- const local = awareness.getLocalState();
273
- if (local) {
274
- currentUser.value = { clientId: awareness.clientID, ...local };
275
- }
276
- };
277
- watch(provider, (p, oldP) => {
278
- if (oldP)
279
- oldP.awareness.off('change', update);
280
- if (p) {
281
- p.awareness.on('change', update);
282
- update(); // Initial fetch
283
- }
284
- }, { immediate: true });
285
- const setLocalState = (state) => {
286
- if (!provider.value)
287
- return;
288
- const current = provider.value.awareness.getLocalState() || {};
289
- provider.value.awareness.setLocalState({ ...current, ...state });
290
- };
291
- return {
292
- states,
293
- currentUser,
294
- setLocalState
295
- };
296
- }
297
- // ----------------------------------------------------------------------
298
- // 8. Utility: useLiveComments
299
- // Hybrid REST + Websocket comments
300
- // ----------------------------------------------------------------------
301
- export function useLiveComments(provider, spaceId, documentId) {
302
- const client = useCollabClient();
303
- const threads = ref([]); // Replace `any` with your CommentThread interface
304
- const loading = ref(false);
305
- const fetchComments = async () => {
306
- loading.value = true;
307
- try {
308
- const res = await client.comments.list(spaceId, documentId);
309
- threads.value = res.threads;
310
- }
311
- catch (e) {
312
- console.error(e);
313
- }
314
- finally {
315
- loading.value = false;
316
- }
317
- };
318
- watch(provider, (p) => {
319
- if (!p)
320
- return;
321
- // Watch for broadcasted events
322
- const cleanup = p.onComment((event) => {
323
- // Simple strategy: refetch on any change from others
324
- // (You can implement optimistic updates here for 'create' events)
325
- if (['create', 'update', 'delete', 'resolve'].includes(event.action)) {
326
- fetchComments();
327
- }
328
- });
329
- fetchComments();
330
- return () => cleanup();
331
- }, { immediate: true });
332
- const createComment = async (content, anchor, parentId) => {
333
- const comment = await client.comments.create(spaceId, documentId, { content, anchor, parentId });
334
- provider.value?.sendComment('create', comment);
335
- // Optimistic local update
336
- if (parentId) {
337
- const thread = threads.value.find(t => t.id === parentId);
338
- if (thread)
339
- thread.replies.push(comment);
340
- }
341
- else {
342
- threads.value.push({ ...comment, replies: [] });
343
- }
344
- };
345
- return { threads, loading, createComment, refresh: fetchComments };
346
- }
347
- export function useAuth(providedClient) {
348
- const client = providedClient || useCollabClient();
349
- const session = ref(null);
350
- // Access private authManager
351
- const authManager = client.authManager;
352
- if (!authManager) {
353
- throw new Error('useAuth() requires CollabClient to be initialized with managed auth mode');
354
- }
355
- // Get initial session immediately
356
- session.value = authManager.getSession();
357
- // Subscribe to auth changes
358
- const unsubscribe = authManager.subscribe((newSession) => {
359
- session.value = newSession;
360
- });
361
- onBeforeUnmount(() => {
362
- unsubscribe();
363
- });
364
- return {
365
- session: computed(() => session.value),
366
- user: computed(() => session.value?.user ?? null),
367
- isAuthenticated: computed(() => session.value !== null),
368
- login: (email, password) => client.login(email, password),
369
- signup: (email, password, name) => client.signup(email, password, name),
370
- logout: () => client.logout()
371
- };
372
- }
373
- export function useTiptapEditor(options) {
374
- const client = useCollabClient();
375
- // Normalize refs
376
- const spaceId = computed(() => {
377
- const val = options.spaceId;
378
- return typeof val === 'string' ? val : val.value;
379
- });
380
- const documentId = computed(() => {
381
- const val = options.documentId;
382
- return typeof val === 'string' ? val : val.value;
383
- });
384
- const editor = shallowRef(null);
385
- const doc = shallowRef(markRaw(new Y.Doc()));
386
- const provider = shallowRef(null);
387
- const status = ref('disconnected');
388
- const synced = ref(false);
389
- const persistenceReady = ref(false);
390
- const loading = ref(false);
391
- const error = ref('');
392
- // Generate unique tab ID for multi-tab awareness
393
- const generateTabId = () => {
394
- return `tab-${Math.random().toString(36).substring(2, 9)}-${Date.now()}`;
395
- };
396
- // Random color for cursor
397
- const generateColor = () => {
398
- const colors = [
399
- '#958DF1', '#F98181', '#FBBC88', '#FAF594', '#70CFF8',
400
- '#94FADB', '#B9F18D', '#C3E2C2', '#EAECCC', '#AFC8AD'
401
- ];
402
- return colors[Math.floor(Math.random() * colors.length)];
403
- };
404
- const connect = async () => {
405
- if (provider.value)
406
- return;
407
- loading.value = true;
408
- error.value = '';
409
- try {
410
- // Dynamically import TipTap extensions first (needed for server extensions)
411
- const [tiptapCore, { Collaboration }, { CollaborationCursor }] = await Promise.all([
412
- import('@tiptap/core'),
413
- import('@tiptap/extension-collaboration'),
414
- import('./extensions/collaboration-cursor.js')
415
- ]);
416
- const { Editor: TiptapEditor } = tiptapCore;
417
- // Fetch server extensions, providing @tiptap/core for scripts that import it
418
- const serverExtensions = await client.getExtensions({
419
- '@tiptap/core': tiptapCore
420
- });
421
- // Get provider
422
- const p = await client.getProvider(spaceId.value, documentId.value, {
423
- document: doc.value
424
- });
425
- // Wait for persistence to load
426
- await p.waitForPersistence();
427
- persistenceReady.value = p.isPersistenceReady();
428
- // Event listeners
429
- const updateStatus = () => { status.value = p.status; };
430
- const updateSynced = () => { synced.value = p.synced; };
431
- p.on('status', updateStatus);
432
- p.on('synced', updateSynced);
433
- p.on('disconnect', updateStatus);
434
- provider.value = markRaw(p);
435
- // StarterKit is optional - consumer can provide their own extensions
436
- let StarterKit = null;
437
- try {
438
- StarterKit = (await import('@tiptap/starter-kit')).default;
439
- }
440
- catch {
441
- // StarterKit not installed - user should provide extensions via options
442
- }
443
- const fragment = doc.value.getXmlFragment('default');
444
- const tabId = generateTabId();
445
- const userName = options.user?.name ?? 'Anonymous';
446
- const userColor = options.user?.color ?? generateColor();
447
- // Create editor
448
- const baseExtensions = StarterKit
449
- ? [StarterKit.configure({ undoRedo: false })]
450
- : [];
451
- const editorInstance = new TiptapEditor({
452
- extensions: [
453
- ...baseExtensions,
454
- Collaboration.configure({
455
- document: doc.value,
456
- field: 'default'
457
- }),
458
- CollaborationCursor.configure({
459
- provider: provider.value,
460
- user: {
461
- name: userName,
462
- color: userColor,
463
- clientId: tabId
464
- }
465
- }),
466
- ...serverExtensions,
467
- ...(options.extensions ?? [])
468
- ],
469
- ...options.editorOptions
470
- });
471
- editor.value = markRaw(editorInstance);
472
- loading.value = false;
473
- if (options.onReady) {
474
- options.onReady(editorInstance);
475
- }
476
- }
477
- catch (e) {
478
- error.value = e.message || 'Failed to initialize editor';
479
- loading.value = false;
480
- console.error('[useTiptapEditor] Error:', e);
481
- }
482
- };
483
- const disconnect = () => {
484
- provider.value?.destroy();
485
- provider.value = null;
486
- status.value = 'disconnected';
487
- synced.value = false;
488
- };
489
- const destroy = () => {
490
- editor.value?.destroy();
491
- editor.value = null;
492
- disconnect();
493
- doc.value.destroy();
494
- doc.value = markRaw(new Y.Doc());
495
- };
496
- const clearLocalData = async () => {
497
- if (provider.value) {
498
- await provider.value.clearLocalData();
499
- }
500
- };
501
- // Watch for changes to spaceId/documentId and reconnect
502
- watch([spaceId, documentId], async ([newSpaceId, newDocId], [oldSpaceId, oldDocId]) => {
503
- if (!newSpaceId || !newDocId) {
504
- destroy();
505
- return;
506
- }
507
- // If changed, reconnect
508
- if (newSpaceId !== oldSpaceId || newDocId !== oldDocId) {
509
- destroy();
510
- await connect();
511
- }
512
- });
513
- // Auto-connect if enabled
514
- if (options.autoConnect !== false) {
515
- onMounted(async () => {
516
- if (spaceId.value && documentId.value) {
517
- await connect();
518
- }
519
- });
520
- }
521
- onBeforeUnmount(() => {
522
- destroy();
523
- });
524
- return {
525
- editor,
526
- doc,
527
- provider,
528
- status,
529
- synced,
530
- persistenceReady,
531
- loading,
532
- error,
533
- connect,
534
- disconnect,
535
- destroy,
536
- clearLocalData
537
- };
538
- }
539
- // ----------------------------------------------------------------------
540
- // 11. Master Composable: useCollaborativeDocument
541
- // ----------------------------------------------------------------------
542
- export function useCollaborativeDocument(spaceId, documentId) {
543
- // 1. Initialize Connection
544
- const { doc, provider, status, synced, undoManager, connect, disconnect, transact, undo, redo } = useDocument(spaceId, documentId);
545
- // 2. Initialize Utils
546
- const awareness = useAwareness(provider);
547
- const comments = useLiveComments(provider, spaceId, documentId);
548
- // 3. Create Factories (closured around 'doc')
549
- // We return functions that generate the composables so the user can name them
550
- const useMap = (name) => useSyncedMap(doc, name);
551
- const useArray = (name) => useSyncedArray(doc, name);
552
- const useText = (name) => useSyncedText(doc, name);
553
- const useXml = (name) => useSyncedXml(doc, name);
554
- return {
555
- // Connection & Core
556
- doc,
557
- provider,
558
- status,
559
- synced,
560
- connect,
561
- disconnect,
562
- // History
563
- undo,
564
- redo,
565
- transact,
566
- canUndo: computed(() => undoManager.value?.undoStack.length ?? 0 > 0),
567
- canRedo: computed(() => undoManager.value?.redoStack.length ?? 0 > 0),
568
- // Presence
569
- users: awareness.states,
570
- me: awareness.currentUser,
571
- updatePresence: awareness.setLocalState,
572
- // Comments
573
- comments: comments.threads,
574
- loadingComments: comments.loading,
575
- createComment: comments.createComment,
576
- // Factories
577
- useMap,
578
- useArray,
579
- useText,
580
- useXml
581
- };
582
- }
583
- //# sourceMappingURL=useCollab.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"useCollab.js","sourceRoot":"","sources":["../src/useCollab.ts"],"names":[],"mappings":"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"}