kritzel-stencil 0.1.60 → 0.1.61
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/cjs/kritzel-active-users_40.cjs.entry.js +10 -112
- package/dist/collection/classes/structures/app-state-map.structure.js +0 -38
- package/dist/collection/classes/structures/object-map.structure.js +0 -65
- package/dist/collection/components/core/kritzel-engine/kritzel-engine.js +10 -9
- package/dist/collection/constants/version.js +1 -1
- package/dist/components/index.js +1 -1
- package/dist/components/kritzel-editor.js +1 -1
- package/dist/components/kritzel-engine.js +1 -1
- package/dist/components/kritzel-settings.js +1 -1
- package/dist/components/{p-CrkD9uFI.js → p-CWF90EEG.js} +1 -1
- package/dist/components/{p-hr0B3YQg.js → p-aj0x_i-p.js} +2 -2
- package/dist/esm/kritzel-active-users_40.entry.js +10 -112
- package/dist/stencil/p-3cc5dddd.entry.js +9 -0
- package/dist/stencil/stencil.esm.js +1 -1
- package/dist/types/classes/structures/app-state-map.structure.d.ts +0 -9
- package/dist/types/classes/structures/object-map.structure.d.ts +0 -7
- package/dist/types/components/core/kritzel-engine/kritzel-engine.d.ts +4 -4
- package/dist/types/components.d.ts +1 -1
- package/dist/types/constants/version.d.ts +1 -1
- package/package.json +1 -1
- package/dist/stencil/p-77b5fe95.entry.js +0 -9
|
@@ -20939,7 +20939,6 @@ class KritzelObjectMap {
|
|
|
20939
20939
|
_temporaryItemsCount = 0;
|
|
20940
20940
|
_idMap = new Map();
|
|
20941
20941
|
_awareness = null;
|
|
20942
|
-
_docName = null;
|
|
20943
20942
|
// Store observer/listener references for cleanup
|
|
20944
20943
|
_objectsObserver = null;
|
|
20945
20944
|
_stackItemAddedHandler = null;
|
|
@@ -21071,7 +21070,6 @@ class KritzelObjectMap {
|
|
|
21071
21070
|
this._objectsMap = this._ydoc.getMap('objects');
|
|
21072
21071
|
this._metadataMap = this._ydoc.getMap('metadata');
|
|
21073
21072
|
const docName = core.editorId ? `kritzel-workspace-${core.editorId}-${workspaceId}` : `kritzel-workspace-${workspaceId}`;
|
|
21074
|
-
this._docName = docName;
|
|
21075
21073
|
const finalConfig = config ?? DEFAULT_SYNC_CONFIG;
|
|
21076
21074
|
// Instantiate providers from configuration
|
|
21077
21075
|
const quiet = !core.store?.state?.debugInfo?.showSyncProviderInfo;
|
|
@@ -21616,68 +21614,6 @@ class KritzelObjectMap {
|
|
|
21616
21614
|
/**
|
|
21617
21615
|
* Hot-swaps sync providers on the existing Y.Doc without destroying the document,
|
|
21618
21616
|
* objects, undo manager, or quadtree. Tears down old awareness subscriptions,
|
|
21619
|
-
* disconnects and destroys current providers, then instantiates and connects new ones.
|
|
21620
|
-
* Re-establishes awareness from the new provider set and restores the local user identity.
|
|
21621
|
-
*
|
|
21622
|
-
* @param config - The new sync configuration specifying providers to use.
|
|
21623
|
-
*/
|
|
21624
|
-
async reconnectProviders(config) {
|
|
21625
|
-
// Tear down old awareness subscription
|
|
21626
|
-
if (this._awareness && this._awarenessChangeHandler) {
|
|
21627
|
-
this._awareness.off('change', this._awarenessChangeHandler);
|
|
21628
|
-
}
|
|
21629
|
-
this._awareness = null;
|
|
21630
|
-
// Disconnect and destroy current providers
|
|
21631
|
-
this._providers.forEach(p => {
|
|
21632
|
-
p.disconnect();
|
|
21633
|
-
p.destroy();
|
|
21634
|
-
});
|
|
21635
|
-
this._providers = [];
|
|
21636
|
-
const finalConfig = config ?? DEFAULT_SYNC_CONFIG;
|
|
21637
|
-
const quiet = !this._core?.store?.state?.debugInfo?.showSyncProviderInfo;
|
|
21638
|
-
// Instantiate new providers with the existing Y.Doc and stored docName
|
|
21639
|
-
for (const providerConfig of finalConfig.providers) {
|
|
21640
|
-
let provider;
|
|
21641
|
-
if (typeof providerConfig === 'function') {
|
|
21642
|
-
provider = new providerConfig(this._docName, this._ydoc, { quiet });
|
|
21643
|
-
}
|
|
21644
|
-
else {
|
|
21645
|
-
provider = providerConfig.create(this._docName, this._ydoc, { quiet });
|
|
21646
|
-
}
|
|
21647
|
-
this._providers.push(provider);
|
|
21648
|
-
}
|
|
21649
|
-
// Connect new providers (settle individually so one failure doesn't block the rest)
|
|
21650
|
-
const results = await Promise.allSettled(this._providers.map(p => p.connect()));
|
|
21651
|
-
results.forEach((result, i) => {
|
|
21652
|
-
if (result.status === 'rejected') {
|
|
21653
|
-
console.error(`[Kritzel] Sync provider "${this._providers[i]?.constructor.name}" failed to connect:`, result.reason);
|
|
21654
|
-
}
|
|
21655
|
-
});
|
|
21656
|
-
// Re-establish awareness from the new provider set
|
|
21657
|
-
for (const provider of this._providers) {
|
|
21658
|
-
if (provider.awareness) {
|
|
21659
|
-
this._awareness = provider.awareness;
|
|
21660
|
-
break;
|
|
21661
|
-
}
|
|
21662
|
-
}
|
|
21663
|
-
// Re-subscribe to awareness changes using existing callbacks
|
|
21664
|
-
if (this._awareness && this._awarenessChangeHandler) {
|
|
21665
|
-
this._awareness.on('change', this._awarenessChangeHandler);
|
|
21666
|
-
}
|
|
21667
|
-
else if (this._awareness && this._awarenessChangeCallbacks.length > 0) {
|
|
21668
|
-
this._awarenessChangeHandler = () => {
|
|
21669
|
-
const states = this._awareness.getStates();
|
|
21670
|
-
for (const callback of this._awarenessChangeCallbacks) {
|
|
21671
|
-
callback(states);
|
|
21672
|
-
}
|
|
21673
|
-
};
|
|
21674
|
-
this._awareness.on('change', this._awarenessChangeHandler);
|
|
21675
|
-
}
|
|
21676
|
-
// Restore local user identity on the new awareness
|
|
21677
|
-
if (this._core) {
|
|
21678
|
-
this.setLocalUser(this._core.user);
|
|
21679
|
-
}
|
|
21680
|
-
}
|
|
21681
21617
|
/**
|
|
21682
21618
|
* Destroys the object map and releases all resources.
|
|
21683
21619
|
* This removes all observers, destroys the undo manager, disconnects all providers,
|
|
@@ -21730,7 +21666,6 @@ class KritzelObjectMap {
|
|
|
21730
21666
|
this._core = null;
|
|
21731
21667
|
this._reviver = null;
|
|
21732
21668
|
this._workspaceId = null;
|
|
21733
|
-
this._docName = null;
|
|
21734
21669
|
this._isReady = false;
|
|
21735
21670
|
this._temporaryItemsCount = 0;
|
|
21736
21671
|
}
|
|
@@ -22023,7 +21958,6 @@ class KritzelAppStateMap {
|
|
|
22023
21958
|
_providers = [];
|
|
22024
21959
|
_core = null;
|
|
22025
21960
|
_isReady = false;
|
|
22026
|
-
_docName = null;
|
|
22027
21961
|
_onRemoteChangeCallback = null;
|
|
22028
21962
|
_workspacesObserver = null;
|
|
22029
21963
|
/**
|
|
@@ -22063,7 +21997,6 @@ class KritzelAppStateMap {
|
|
|
22063
21997
|
this._metadataMap = this._ydoc.getMap('metadata');
|
|
22064
21998
|
const instanceId = config?.appStateId ?? this.getOrCreateAppStateInstanceId(core);
|
|
22065
21999
|
const docName = core.editorId ? `kritzel-app-state-${core.editorId}-${instanceId}` : `kritzel-app-state-${instanceId}`;
|
|
22066
|
-
this._docName = docName;
|
|
22067
22000
|
const finalConfig = config ?? DEFAULT_SYNC_CONFIG;
|
|
22068
22001
|
// Instantiate providers from configuration
|
|
22069
22002
|
const quiet = !core.store.state.debugInfo.showSyncProviderInfo;
|
|
@@ -22362,41 +22295,6 @@ class KritzelAppStateMap {
|
|
|
22362
22295
|
has(id) {
|
|
22363
22296
|
return this.map.has(id);
|
|
22364
22297
|
}
|
|
22365
|
-
/**
|
|
22366
|
-
* Hot-swaps sync providers on the existing Y.Doc without destroying the document or its data.
|
|
22367
|
-
* Disconnects and destroys current providers, then instantiates and connects new ones
|
|
22368
|
-
* from the given configuration. Observers, maps, and in-memory state remain intact.
|
|
22369
|
-
*
|
|
22370
|
-
* @param config - The new sync configuration specifying providers to use.
|
|
22371
|
-
*/
|
|
22372
|
-
async reconnectProviders(config) {
|
|
22373
|
-
// Disconnect and destroy current providers
|
|
22374
|
-
this._providers.forEach(p => {
|
|
22375
|
-
p.disconnect();
|
|
22376
|
-
p.destroy();
|
|
22377
|
-
});
|
|
22378
|
-
this._providers = [];
|
|
22379
|
-
const finalConfig = config ?? DEFAULT_SYNC_CONFIG;
|
|
22380
|
-
const quiet = !this._core?.store.state.debugInfo.showSyncProviderInfo;
|
|
22381
|
-
// Instantiate new providers with the existing Y.Doc and stored docName
|
|
22382
|
-
for (const providerConfig of finalConfig.providers) {
|
|
22383
|
-
let provider;
|
|
22384
|
-
if (typeof providerConfig === 'function') {
|
|
22385
|
-
provider = new providerConfig(this._docName, this._ydoc, { quiet });
|
|
22386
|
-
}
|
|
22387
|
-
else {
|
|
22388
|
-
provider = providerConfig.create(this._docName, this._ydoc, { quiet });
|
|
22389
|
-
}
|
|
22390
|
-
this._providers.push(provider);
|
|
22391
|
-
}
|
|
22392
|
-
// Connect new providers (settle individually so one failure doesn't block the rest)
|
|
22393
|
-
const results = await Promise.allSettled(this._providers.map(p => p.connect()));
|
|
22394
|
-
results.forEach((result, i) => {
|
|
22395
|
-
if (result.status === 'rejected') {
|
|
22396
|
-
console.error(`[Kritzel] Sync provider "${this._providers[i]?.constructor.name}" failed to connect:`, result.reason);
|
|
22397
|
-
}
|
|
22398
|
-
});
|
|
22399
|
-
}
|
|
22400
22298
|
/**
|
|
22401
22299
|
* Destroys the app state map and releases all resources.
|
|
22402
22300
|
* Unobserves the Yjs workspaces map, disconnects and destroys all sync providers,
|
|
@@ -22427,7 +22325,6 @@ class KritzelAppStateMap {
|
|
|
22427
22325
|
// Clear remaining references
|
|
22428
22326
|
this._core = null;
|
|
22429
22327
|
this._onRemoteChangeCallback = null;
|
|
22430
|
-
this._docName = null;
|
|
22431
22328
|
this._isReady = false;
|
|
22432
22329
|
}
|
|
22433
22330
|
}
|
|
@@ -26080,17 +25977,18 @@ const KritzelEngine = class {
|
|
|
26080
25977
|
await this.core.loadSharedWorkspace(token);
|
|
26081
25978
|
}
|
|
26082
25979
|
/**
|
|
26083
|
-
* Reinitializes sync
|
|
26084
|
-
*
|
|
26085
|
-
*
|
|
26086
|
-
* the syncConfig prop (e.g. after authentication state changes).
|
|
25980
|
+
* Reinitializes sync by performing a full teardown and re-initialization.
|
|
25981
|
+
* Destroys the current Yjs documents and providers, then rebuilds everything
|
|
25982
|
+
* from the current syncConfig. Data reloads from IndexedDB nearly instantly.
|
|
25983
|
+
* Call this after updating the syncConfig prop (e.g. after authentication state changes).
|
|
26087
25984
|
*/
|
|
26088
25985
|
async reinitSync() {
|
|
26089
25986
|
this.core.setSyncConfig(this.syncConfig);
|
|
26090
|
-
|
|
26091
|
-
|
|
26092
|
-
|
|
26093
|
-
|
|
25987
|
+
this.core.store.state.objects?.clearCursorPosition();
|
|
25988
|
+
this.core.store.state.objects?.destroy();
|
|
25989
|
+
this.core.appStateMap.destroy();
|
|
25990
|
+
this._isYjsInitialized = false;
|
|
25991
|
+
await this.initializeSyncAndWorkspace();
|
|
26094
25992
|
}
|
|
26095
25993
|
core;
|
|
26096
25994
|
viewport;
|
|
@@ -27976,7 +27874,7 @@ const KritzelPortal = class {
|
|
|
27976
27874
|
* This file is auto-generated by the version bump scripts.
|
|
27977
27875
|
* Do not modify manually.
|
|
27978
27876
|
*/
|
|
27979
|
-
const KRITZEL_VERSION = '0.1.
|
|
27877
|
+
const KRITZEL_VERSION = '0.1.61';
|
|
27980
27878
|
|
|
27981
27879
|
const kritzelSettingsCss = () => `:host{display:contents}kritzel-dialog{--kritzel-dialog-body-padding:0;--kritzel-dialog-width-large:800px;--kritzel-dialog-height-large:500px}.footer-button{padding:8px 16px;border-radius:6px;cursor:pointer;font-size:14px}.cancel-button{border:1px solid #ebebeb;background:#fff;color:inherit}.cancel-button:hover{background:#f5f5f5}.settings-content{padding:0}.settings-content h3{margin:0 0 16px 0;font-size:18px;font-weight:600;color:var(--kritzel-settings-content-heading-color, #333333)}.settings-content p{margin:0;font-size:14px;color:var(--kritzel-settings-content-text-color, #666666);line-height:1.5}.settings-group{display:flex;flex-direction:column;gap:24px}.settings-item{display:flex;flex-direction:column;gap:8px}.settings-row{display:flex;align-items:center;justify-content:space-between;gap:16px}.settings-label{font-size:14px;font-weight:600;color:var(--kritzel-settings-label-color, #333333);margin:0 0 4px 0}.settings-description{font-size:12px;color:var(--kritzel-settings-description-color, #888888);margin:0;line-height:1.4}.shortcuts-list{display:flex;flex-direction:column;gap:24px}.shortcuts-category{display:flex;flex-direction:column;gap:8px}.shortcuts-category-title{font-size:14px;font-weight:600;color:var(--kritzel-settings-label-color, #333333);margin:0 0 4px 0}.shortcuts-group{display:flex;flex-direction:column;gap:4px}.shortcut-item{display:flex;justify-content:space-between;align-items:center;padding:6px 8px;border-radius:4px;background:var(--kritzel-settings-shortcut-item-bg, rgba(0, 0, 0, 0.02))}.shortcut-label{font-size:14px;color:var(--kritzel-settings-content-text-color, #666666)}.shortcut-key{font-family:monospace;font-size:12px;padding:2px 8px;border-radius:4px;background:var(--kritzel-settings-shortcut-key-bg, #f0f0f0);color:var(--kritzel-settings-shortcut-key-color, #333333);border:1px solid var(--kritzel-settings-shortcut-key-border, #ddd)}`;
|
|
27982
27880
|
|
|
@@ -16,7 +16,6 @@ export class KritzelAppStateMap {
|
|
|
16
16
|
_providers = [];
|
|
17
17
|
_core = null;
|
|
18
18
|
_isReady = false;
|
|
19
|
-
_docName = null;
|
|
20
19
|
_onRemoteChangeCallback = null;
|
|
21
20
|
_workspacesObserver = null;
|
|
22
21
|
/**
|
|
@@ -56,7 +55,6 @@ export class KritzelAppStateMap {
|
|
|
56
55
|
this._metadataMap = this._ydoc.getMap('metadata');
|
|
57
56
|
const instanceId = config?.appStateId ?? this.getOrCreateAppStateInstanceId(core);
|
|
58
57
|
const docName = core.editorId ? `kritzel-app-state-${core.editorId}-${instanceId}` : `kritzel-app-state-${instanceId}`;
|
|
59
|
-
this._docName = docName;
|
|
60
58
|
const finalConfig = config ?? DEFAULT_SYNC_CONFIG;
|
|
61
59
|
// Instantiate providers from configuration
|
|
62
60
|
const quiet = !core.store.state.debugInfo.showSyncProviderInfo;
|
|
@@ -355,41 +353,6 @@ export class KritzelAppStateMap {
|
|
|
355
353
|
has(id) {
|
|
356
354
|
return this.map.has(id);
|
|
357
355
|
}
|
|
358
|
-
/**
|
|
359
|
-
* Hot-swaps sync providers on the existing Y.Doc without destroying the document or its data.
|
|
360
|
-
* Disconnects and destroys current providers, then instantiates and connects new ones
|
|
361
|
-
* from the given configuration. Observers, maps, and in-memory state remain intact.
|
|
362
|
-
*
|
|
363
|
-
* @param config - The new sync configuration specifying providers to use.
|
|
364
|
-
*/
|
|
365
|
-
async reconnectProviders(config) {
|
|
366
|
-
// Disconnect and destroy current providers
|
|
367
|
-
this._providers.forEach(p => {
|
|
368
|
-
p.disconnect();
|
|
369
|
-
p.destroy();
|
|
370
|
-
});
|
|
371
|
-
this._providers = [];
|
|
372
|
-
const finalConfig = config ?? DEFAULT_SYNC_CONFIG;
|
|
373
|
-
const quiet = !this._core?.store.state.debugInfo.showSyncProviderInfo;
|
|
374
|
-
// Instantiate new providers with the existing Y.Doc and stored docName
|
|
375
|
-
for (const providerConfig of finalConfig.providers) {
|
|
376
|
-
let provider;
|
|
377
|
-
if (typeof providerConfig === 'function') {
|
|
378
|
-
provider = new providerConfig(this._docName, this._ydoc, { quiet });
|
|
379
|
-
}
|
|
380
|
-
else {
|
|
381
|
-
provider = providerConfig.create(this._docName, this._ydoc, { quiet });
|
|
382
|
-
}
|
|
383
|
-
this._providers.push(provider);
|
|
384
|
-
}
|
|
385
|
-
// Connect new providers (settle individually so one failure doesn't block the rest)
|
|
386
|
-
const results = await Promise.allSettled(this._providers.map(p => p.connect()));
|
|
387
|
-
results.forEach((result, i) => {
|
|
388
|
-
if (result.status === 'rejected') {
|
|
389
|
-
console.error(`[Kritzel] Sync provider "${this._providers[i]?.constructor.name}" failed to connect:`, result.reason);
|
|
390
|
-
}
|
|
391
|
-
});
|
|
392
|
-
}
|
|
393
356
|
/**
|
|
394
357
|
* Destroys the app state map and releases all resources.
|
|
395
358
|
* Unobserves the Yjs workspaces map, disconnects and destroys all sync providers,
|
|
@@ -420,7 +383,6 @@ export class KritzelAppStateMap {
|
|
|
420
383
|
// Clear remaining references
|
|
421
384
|
this._core = null;
|
|
422
385
|
this._onRemoteChangeCallback = null;
|
|
423
|
-
this._docName = null;
|
|
424
386
|
this._isReady = false;
|
|
425
387
|
}
|
|
426
388
|
}
|
|
@@ -25,7 +25,6 @@ export class KritzelObjectMap {
|
|
|
25
25
|
_temporaryItemsCount = 0;
|
|
26
26
|
_idMap = new Map();
|
|
27
27
|
_awareness = null;
|
|
28
|
-
_docName = null;
|
|
29
28
|
// Store observer/listener references for cleanup
|
|
30
29
|
_objectsObserver = null;
|
|
31
30
|
_stackItemAddedHandler = null;
|
|
@@ -157,7 +156,6 @@ export class KritzelObjectMap {
|
|
|
157
156
|
this._objectsMap = this._ydoc.getMap('objects');
|
|
158
157
|
this._metadataMap = this._ydoc.getMap('metadata');
|
|
159
158
|
const docName = core.editorId ? `kritzel-workspace-${core.editorId}-${workspaceId}` : `kritzel-workspace-${workspaceId}`;
|
|
160
|
-
this._docName = docName;
|
|
161
159
|
const finalConfig = config ?? DEFAULT_SYNC_CONFIG;
|
|
162
160
|
// Instantiate providers from configuration
|
|
163
161
|
const quiet = !core.store?.state?.debugInfo?.showSyncProviderInfo;
|
|
@@ -709,68 +707,6 @@ export class KritzelObjectMap {
|
|
|
709
707
|
/**
|
|
710
708
|
* Hot-swaps sync providers on the existing Y.Doc without destroying the document,
|
|
711
709
|
* objects, undo manager, or quadtree. Tears down old awareness subscriptions,
|
|
712
|
-
* disconnects and destroys current providers, then instantiates and connects new ones.
|
|
713
|
-
* Re-establishes awareness from the new provider set and restores the local user identity.
|
|
714
|
-
*
|
|
715
|
-
* @param config - The new sync configuration specifying providers to use.
|
|
716
|
-
*/
|
|
717
|
-
async reconnectProviders(config) {
|
|
718
|
-
// Tear down old awareness subscription
|
|
719
|
-
if (this._awareness && this._awarenessChangeHandler) {
|
|
720
|
-
this._awareness.off('change', this._awarenessChangeHandler);
|
|
721
|
-
}
|
|
722
|
-
this._awareness = null;
|
|
723
|
-
// Disconnect and destroy current providers
|
|
724
|
-
this._providers.forEach(p => {
|
|
725
|
-
p.disconnect();
|
|
726
|
-
p.destroy();
|
|
727
|
-
});
|
|
728
|
-
this._providers = [];
|
|
729
|
-
const finalConfig = config ?? DEFAULT_SYNC_CONFIG;
|
|
730
|
-
const quiet = !this._core?.store?.state?.debugInfo?.showSyncProviderInfo;
|
|
731
|
-
// Instantiate new providers with the existing Y.Doc and stored docName
|
|
732
|
-
for (const providerConfig of finalConfig.providers) {
|
|
733
|
-
let provider;
|
|
734
|
-
if (typeof providerConfig === 'function') {
|
|
735
|
-
provider = new providerConfig(this._docName, this._ydoc, { quiet });
|
|
736
|
-
}
|
|
737
|
-
else {
|
|
738
|
-
provider = providerConfig.create(this._docName, this._ydoc, { quiet });
|
|
739
|
-
}
|
|
740
|
-
this._providers.push(provider);
|
|
741
|
-
}
|
|
742
|
-
// Connect new providers (settle individually so one failure doesn't block the rest)
|
|
743
|
-
const results = await Promise.allSettled(this._providers.map(p => p.connect()));
|
|
744
|
-
results.forEach((result, i) => {
|
|
745
|
-
if (result.status === 'rejected') {
|
|
746
|
-
console.error(`[Kritzel] Sync provider "${this._providers[i]?.constructor.name}" failed to connect:`, result.reason);
|
|
747
|
-
}
|
|
748
|
-
});
|
|
749
|
-
// Re-establish awareness from the new provider set
|
|
750
|
-
for (const provider of this._providers) {
|
|
751
|
-
if (provider.awareness) {
|
|
752
|
-
this._awareness = provider.awareness;
|
|
753
|
-
break;
|
|
754
|
-
}
|
|
755
|
-
}
|
|
756
|
-
// Re-subscribe to awareness changes using existing callbacks
|
|
757
|
-
if (this._awareness && this._awarenessChangeHandler) {
|
|
758
|
-
this._awareness.on('change', this._awarenessChangeHandler);
|
|
759
|
-
}
|
|
760
|
-
else if (this._awareness && this._awarenessChangeCallbacks.length > 0) {
|
|
761
|
-
this._awarenessChangeHandler = () => {
|
|
762
|
-
const states = this._awareness.getStates();
|
|
763
|
-
for (const callback of this._awarenessChangeCallbacks) {
|
|
764
|
-
callback(states);
|
|
765
|
-
}
|
|
766
|
-
};
|
|
767
|
-
this._awareness.on('change', this._awarenessChangeHandler);
|
|
768
|
-
}
|
|
769
|
-
// Restore local user identity on the new awareness
|
|
770
|
-
if (this._core) {
|
|
771
|
-
this.setLocalUser(this._core.user);
|
|
772
|
-
}
|
|
773
|
-
}
|
|
774
710
|
/**
|
|
775
711
|
* Destroys the object map and releases all resources.
|
|
776
712
|
* This removes all observers, destroys the undo manager, disconnects all providers,
|
|
@@ -823,7 +759,6 @@ export class KritzelObjectMap {
|
|
|
823
759
|
this._core = null;
|
|
824
760
|
this._reviver = null;
|
|
825
761
|
this._workspaceId = null;
|
|
826
|
-
this._docName = null;
|
|
827
762
|
this._isReady = false;
|
|
828
763
|
this._temporaryItemsCount = 0;
|
|
829
764
|
}
|
|
@@ -1095,17 +1095,18 @@ export class KritzelEngine {
|
|
|
1095
1095
|
await this.core.loadSharedWorkspace(token);
|
|
1096
1096
|
}
|
|
1097
1097
|
/**
|
|
1098
|
-
* Reinitializes sync
|
|
1099
|
-
*
|
|
1100
|
-
*
|
|
1101
|
-
* the syncConfig prop (e.g. after authentication state changes).
|
|
1098
|
+
* Reinitializes sync by performing a full teardown and re-initialization.
|
|
1099
|
+
* Destroys the current Yjs documents and providers, then rebuilds everything
|
|
1100
|
+
* from the current syncConfig. Data reloads from IndexedDB nearly instantly.
|
|
1101
|
+
* Call this after updating the syncConfig prop (e.g. after authentication state changes).
|
|
1102
1102
|
*/
|
|
1103
1103
|
async reinitSync() {
|
|
1104
1104
|
this.core.setSyncConfig(this.syncConfig);
|
|
1105
|
-
|
|
1106
|
-
|
|
1107
|
-
|
|
1108
|
-
|
|
1105
|
+
this.core.store.state.objects?.clearCursorPosition();
|
|
1106
|
+
this.core.store.state.objects?.destroy();
|
|
1107
|
+
this.core.appStateMap.destroy();
|
|
1108
|
+
this._isYjsInitialized = false;
|
|
1109
|
+
await this.initializeSyncAndWorkspace();
|
|
1109
1110
|
}
|
|
1110
1111
|
core;
|
|
1111
1112
|
viewport;
|
|
@@ -4086,7 +4087,7 @@ export class KritzelEngine {
|
|
|
4086
4087
|
"return": "Promise<void>"
|
|
4087
4088
|
},
|
|
4088
4089
|
"docs": {
|
|
4089
|
-
"text": "Reinitializes sync
|
|
4090
|
+
"text": "Reinitializes sync by performing a full teardown and re-initialization.\r\nDestroys the current Yjs documents and providers, then rebuilds everything\r\nfrom the current syncConfig. Data reloads from IndexedDB nearly instantly.\r\nCall this after updating the syncConfig prop (e.g. after authentication state changes).",
|
|
4090
4091
|
"tags": []
|
|
4091
4092
|
}
|
|
4092
4093
|
}
|
package/dist/components/index.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
export{g as getAssetPath,r as render,s as setAssetPath,a as setNonce,b as setPlatformOptions}from"./p-pebXO4LU.js";export{f as KritzelBrushTool,d as KritzelGroup,b as KritzelImage,c as KritzelLine,g as KritzelLineTool,a as KritzelPath,j as KritzelSelectionTool,e as KritzelShape,i as KritzelShapeTool,K as KritzelText,h as KritzelTextTool,S as ShapeType}from"./p-DQyoGv35.js";export{I as IndexedDBSyncProvider,d as KritzelAlignment,c as KritzelAnchorManager,b as KritzelCursorHelper,K as KritzelEraserTool,a as KritzelImageTool}from"./p-hr0B3YQg.js";import*as t from"yjs";import{WebsocketProvider as o}from"y-websocket";import{H as n,a as m}from"./kritzel-editor.js";export{D as DEFAULT_BRUSH_CONFIG,c as DEFAULT_LINE_TOOL_CONFIG,b as DEFAULT_TEXT_CONFIG,KritzelEditor,defineCustomElement as defineCustomElementKritzelEditor}from"./kritzel-editor.js";export{K as KritzelWorkspace,W as WORKSPACE_EXPORT_VERSION}from"./p-DCO0-Di5.js";export{K as KritzelThemeManager,d as darkTheme,l as lightTheme}from"./p-B-fsUXTm.js";export{KritzelActiveUsers,defineCustomElement as defineCustomElementKritzelActiveUsers}from"./kritzel-active-users.js";export{KritzelAvatar,defineCustomElement as defineCustomElementKritzelAvatar}from"./kritzel-avatar.js";export{KritzelBackToContent,defineCustomElement as defineCustomElementKritzelBackToContent}from"./kritzel-back-to-content.js";export{KritzelBrushStyle,defineCustomElement as defineCustomElementKritzelBrushStyle}from"./kritzel-brush-style.js";export{KritzelButton,defineCustomElement as defineCustomElementKritzelButton}from"./kritzel-button.js";export{KritzelColor,defineCustomElement as defineCustomElementKritzelColor}from"./kritzel-color.js";export{KritzelColorPalette,defineCustomElement as defineCustomElementKritzelColorPalette}from"./kritzel-color-palette.js";export{KritzelContextMenu,defineCustomElement as defineCustomElementKritzelContextMenu}from"./kritzel-context-menu.js";export{KritzelControls,defineCustomElement as defineCustomElementKritzelControls}from"./kritzel-controls.js";export{KritzelCurrentUser,defineCustomElement as defineCustomElementKritzelCurrentUser}from"./kritzel-current-user.js";export{KritzelCursorTrail,defineCustomElement as defineCustomElementKritzelCursorTrail}from"./kritzel-cursor-trail.js";export{KritzelDialog,defineCustomElement as defineCustomElementKritzelDialog}from"./kritzel-dialog.js";export{KritzelDropdown,defineCustomElement as defineCustomElementKritzelDropdown}from"./kritzel-dropdown.js";export{KritzelEngine,defineCustomElement as defineCustomElementKritzelEngine}from"./kritzel-engine.js";export{KritzelExport,defineCustomElement as defineCustomElementKritzelExport}from"./kritzel-export.js";export{KritzelFont,defineCustomElement as defineCustomElementKritzelFont}from"./kritzel-font.js";export{KritzelFontFamily,defineCustomElement as defineCustomElementKritzelFontFamily}from"./kritzel-font-family.js";export{KritzelFontSize,defineCustomElement as defineCustomElementKritzelFontSize}from"./kritzel-font-size.js";export{KritzelIcon,defineCustomElement as defineCustomElementKritzelIcon}from"./kritzel-icon.js";export{KritzelInput,defineCustomElement as defineCustomElementKritzelInput}from"./kritzel-input.js";export{KritzelLineEndings,defineCustomElement as defineCustomElementKritzelLineEndings}from"./kritzel-line-endings.js";export{KritzelLoginDialog,defineCustomElement as defineCustomElementKritzelLoginDialog}from"./kritzel-login-dialog.js";export{KritzelMasterDetail,defineCustomElement as defineCustomElementKritzelMasterDetail}from"./kritzel-master-detail.js";export{KritzelMenu,defineCustomElement as defineCustomElementKritzelMenu}from"./kritzel-menu.js";export{KritzelMenuItem,defineCustomElement as defineCustomElementKritzelMenuItem}from"./kritzel-menu-item.js";export{KritzelMoreMenu,defineCustomElement as defineCustomElementKritzelMoreMenu}from"./kritzel-more-menu.js";export{KritzelNumericInput,defineCustomElement as defineCustomElementKritzelNumericInput}from"./kritzel-numeric-input.js";export{KritzelOpacitySlider,defineCustomElement as defineCustomElementKritzelOpacitySlider}from"./kritzel-opacity-slider.js";export{KritzelPillTabs,defineCustomElement as defineCustomElementKritzelPillTabs}from"./kritzel-pill-tabs.js";export{KritzelPortal,defineCustomElement as defineCustomElementKritzelPortal}from"./kritzel-portal.js";export{KritzelSettings,defineCustomElement as defineCustomElementKritzelSettings}from"./kritzel-settings.js";export{KritzelShapeFill,defineCustomElement as defineCustomElementKritzelShapeFill}from"./kritzel-shape-fill.js";export{KritzelShareDialog,defineCustomElement as defineCustomElementKritzelShareDialog}from"./kritzel-share-dialog.js";export{KritzelSlideToggle,defineCustomElement as defineCustomElementKritzelSlideToggle}from"./kritzel-slide-toggle.js";export{KritzelSplitButton,defineCustomElement as defineCustomElementKritzelSplitButton}from"./kritzel-split-button.js";export{KritzelStrokeSize,defineCustomElement as defineCustomElementKritzelStrokeSize}from"./kritzel-stroke-size.js";export{KritzelToolConfig,defineCustomElement as defineCustomElementKritzelToolConfig}from"./kritzel-tool-config.js";export{KritzelTooltip,defineCustomElement as defineCustomElementKritzelTooltip}from"./kritzel-tooltip.js";export{KritzelUtilityPanel,defineCustomElement as defineCustomElementKritzelUtilityPanel}from"./kritzel-utility-panel.js";export{KritzelWorkspaceManager,defineCustomElement as defineCustomElementKritzelWorkspaceManager}from"./kritzel-workspace-manager.js";const u=Math.floor,z=127,p=Number.MAX_SAFE_INTEGER;class C{constructor(){this.cpos=0,this.cbuf=new Uint8Array(100),this.bufs=[]}}const E=()=>new C,k=e=>{const t=new Uint8Array((e=>{let t=e.cpos;for(let s=0;s<e.bufs.length;s++)t+=e.bufs[s].length;return t})(e));let s=0;for(let o=0;o<e.bufs.length;o++){const i=e.bufs[o];t.set(i,s),s+=i.length}return t.set(new Uint8Array(e.cbuf.buffer,0,e.cpos),s),t},x=(e,t)=>{const s=e.cbuf.length;e.cpos===s&&(e.bufs.push(e.cbuf),e.cbuf=new Uint8Array(2*s),e.cpos=0),e.cbuf[e.cpos++]=t},y=(e,t)=>{for(;t>z;)x(e,128|z&t),t=u(t/128);x(e,z&t)},T=(e,t)=>{y(e,t.byteLength),((e,t)=>{const s=e.cbuf.length,o=e.cpos,i=((e,t)=>e<t?e:t)(s-o,t.length),r=t.length-i;e.cbuf.set(t.subarray(0,i),o),e.cpos+=i,r>0&&(e.bufs.push(e.cbuf),e.cbuf=new Uint8Array(((e,t)=>e>t?e:t)(2*s,r)),e.cbuf.set(t.subarray(i)),e.cpos=r)})(e,t)},w=e=>Error(e),P=w("Unexpected end of array"),U=w("Integer out of Range");class v{constructor(e){this.arr=e,this.pos=0}}const A=e=>((e,t)=>{const s=new Uint8Array(e.arr.buffer,e.pos+e.arr.byteOffset,t);return e.pos+=t,s})(e,M(e)),M=e=>{let t=0,s=1;const o=e.arr.length;for(;e.pos<o;){const o=e.arr[e.pos++];if(t+=(o&z)*s,s*=128,o<128)return t;if(t>p)throw U}throw P};class B{doc;channel;_synced=!1;constructor(e,t,s){this.doc=t,this.channel=new BroadcastChannel(e),this.channel.onmessage=e=>{this.handleMessage(e.data)},this.doc.on("update",this.handleDocUpdate),this.broadcastSync(),setTimeout((()=>{this._synced=!0}),100),s?.quiet||console.info("BroadcastChannel Provider initialized: "+e)}handleDocUpdate=(e,t)=>{if(t!==this){const t=E();y(t,0),T(t,e),this.channel.postMessage(k(t))}};handleMessage(e){const s=(e=>new v(e))(new Uint8Array(e));switch(M(s)){case 0:const e=A(s);t.applyUpdate(this.doc,e,this);break;case 1:this.broadcastSync();break;case 2:const o=A(s),i=t.encodeStateAsUpdate(this.doc,o);if(i.length>0){const e=E();y(e,0),T(e,i),this.channel.postMessage(k(e))}}}broadcastSync(){const e=E();y(e,2),T(e,t.encodeStateVector(this.doc)),this.channel.postMessage(k(e))}async connect(){if(!this._synced)return new Promise((e=>{const t=()=>{this._synced?e():setTimeout(t,50)};t()}))}disconnect(){}destroy(){this.doc.off("update",this.handleDocUpdate),this.channel.close()}}class F{provider;isConnected=!1;_quiet=!1;get awareness(){return this.provider.awareness}constructor(e,t,s){const i=s?.url||"ws://localhost:1234",r=s?.roomName||e;this.provider=new o(i,r,t,{params:s?.params,protocols:s?.protocols,WebSocketPolyfill:s?.WebSocketPolyfill,awareness:s?.awareness,maxBackoffTime:s?.maxBackoffTime,disableBc:!0}),this._quiet=s?.quiet??!1,this.setupEventListeners(),this._quiet||console.info(`WebSocket Provider initialized: ${i}/${r}`)}static with(e){return{create:(t,s,o)=>{const i=o?{...e,...o}:e;return new F(t,s,i)}}}setupEventListeners(){this.provider.on("status",(({status:e})=>{"connected"===e?(this.isConnected=!0,this._quiet||console.info("WebSocket connected")):"disconnected"===e&&(this.isConnected=!1,this._quiet||console.info("WebSocket disconnected"))})),this.provider.on("sync",(e=>{e&&!this._quiet&&console.info("WebSocket synced")}))}async connect(){if(!this.isConnected)return new Promise(((e,t)=>{const s=setTimeout((()=>{t(Error("WebSocket connection timeout"))}),1e4),o=({status:t})=>{"connected"===t&&(clearTimeout(s),this.provider.off("status",o),this.isConnected=!0,e())};this.provider.on("status",o),this.provider.wsconnected&&(clearTimeout(s),this.provider.off("status",o),this.isConnected=!0,e())}))}disconnect(){this.provider&&this.provider.disconnect(),this.isConnected=!1}destroy(){this.provider&&this.provider.destroy(),this.isConnected=!1}}class H{provider;isConnected=!1;isSynced=!1;usesSharedSocket=!1;get awareness(){return this.provider.awareness}static sharedWebSocketProvider=null;constructor(e,t,s){const o=s?.name||e,i=s?.url||"ws://localhost:1234",r=s?.websocketProvider||H.sharedWebSocketProvider;if(r){this.usesSharedSocket=!0;const e={websocketProvider:r,name:o,document:t,token:s?.token||null,onConnect:()=>{this.isConnected||(this.isConnected=!0,s?.quiet||console.info("Hocuspocus connected: "+o),s?.onConnect&&s.onConnect())},onDisconnect:()=>{(this.isConnected||this.isSynced)&&(this.isConnected=!1,this.isSynced=!1,s?.quiet||console.info("Hocuspocus disconnected: "+o),s?.onDisconnect&&s.onDisconnect())},onSynced:()=>{this.isSynced||(this.isSynced=!0,s?.quiet||console.info("Hocuspocus synced: "+o),s?.onSynced&&s.onSynced())}};void 0!==s?.forceSyncInterval&&(e.forceSyncInterval=s.forceSyncInterval),s?.onAuthenticationFailed&&(e.onAuthenticationFailed=s.onAuthenticationFailed),s?.onStatus&&(e.onStatus=s.onStatus),this.provider=new n(e),this.provider.attach(),s?.quiet||console.info("Hocuspocus Provider initialized (multiplexed): "+o)}else{this.usesSharedSocket=!1;const e={url:i,name:o,document:t,token:s?.token||null,onConnect:()=>{this.isConnected||(this.isConnected=!0,s?.quiet||console.info("Hocuspocus connected: "+o),s?.onConnect&&s.onConnect())},onDisconnect:()=>{(this.isConnected||this.isSynced)&&(this.isConnected=!1,this.isSynced=!1,s?.quiet||console.info("Hocuspocus disconnected: "+o),s?.onDisconnect&&s.onDisconnect())},onSynced:()=>{this.isSynced||(this.isSynced=!0,s?.quiet||console.info("Hocuspocus synced: "+o),s?.onSynced&&s.onSynced())}};void 0!==s?.forceSyncInterval&&(e.forceSyncInterval=s.forceSyncInterval),s?.onAuthenticationFailed&&(e.onAuthenticationFailed=s.onAuthenticationFailed),s?.onStatus&&(e.onStatus=s.onStatus),s?.WebSocketPolyfill&&(e.WebSocketPolyfill=s.WebSocketPolyfill),this.provider=new n(e),s?.quiet||console.info(`Hocuspocus Provider initialized: ${i}/${o}`)}}static createSharedWebSocket(e){if(H.sharedWebSocketProvider)return console.warn("Shared WebSocket already exists. Returning existing instance."),H.sharedWebSocketProvider;const t={url:e.url};return e.WebSocketPolyfill&&(t.WebSocketPolyfill=e.WebSocketPolyfill),e.onConnect&&(t.onConnect=e.onConnect),e.onDisconnect&&(t.onDisconnect=e.onDisconnect),e.onStatus&&(t.onStatus=e.onStatus),H.sharedWebSocketProvider=new m(t),console.info("Shared Hocuspocus WebSocket created: "+e.url),H.sharedWebSocketProvider}static destroySharedWebSocket(){H.sharedWebSocketProvider&&(H.sharedWebSocketProvider.destroy(),H.sharedWebSocketProvider=null,console.info("Shared Hocuspocus WebSocket destroyed"))}static getSharedWebSocket(){return H.sharedWebSocketProvider}static with(e){return{create:(t,s,o)=>{const i=o?{...e,...o}:e;return new H(t,s,i)}}}async connect(){if(!this.isSynced)return new Promise(((e,t)=>{const s=setTimeout((()=>{t(Error("Hocuspocus connection timeout"))}),1e4),o=()=>{clearTimeout(s),this.provider.off("synced",o),e()};if(this.provider.on("synced",o),this.provider.isSynced)return clearTimeout(s),this.provider.off("synced",o),void e();this.isConnected||this.usesSharedSocket||this.provider.connect()}))}disconnect(){this.provider&&(this.usesSharedSocket?this.provider.detach():this.provider.disconnect()),this.isConnected=!1,this.isSynced=!1}destroy(){this.provider&&this.provider.destroy(),this.isConnected=!1,this.isSynced=!1}}export{B as BroadcastSyncProvider,H as HocuspocusSyncProvider,F as WebSocketSyncProvider}
|
|
1
|
+
export{g as getAssetPath,r as render,s as setAssetPath,a as setNonce,b as setPlatformOptions}from"./p-pebXO4LU.js";export{f as KritzelBrushTool,d as KritzelGroup,b as KritzelImage,c as KritzelLine,g as KritzelLineTool,a as KritzelPath,j as KritzelSelectionTool,e as KritzelShape,i as KritzelShapeTool,K as KritzelText,h as KritzelTextTool,S as ShapeType}from"./p-DQyoGv35.js";export{I as IndexedDBSyncProvider,d as KritzelAlignment,c as KritzelAnchorManager,b as KritzelCursorHelper,K as KritzelEraserTool,a as KritzelImageTool}from"./p-aj0x_i-p.js";import*as t from"yjs";import{WebsocketProvider as o}from"y-websocket";import{H as n,a as m}from"./kritzel-editor.js";export{D as DEFAULT_BRUSH_CONFIG,c as DEFAULT_LINE_TOOL_CONFIG,b as DEFAULT_TEXT_CONFIG,KritzelEditor,defineCustomElement as defineCustomElementKritzelEditor}from"./kritzel-editor.js";export{K as KritzelWorkspace,W as WORKSPACE_EXPORT_VERSION}from"./p-DCO0-Di5.js";export{K as KritzelThemeManager,d as darkTheme,l as lightTheme}from"./p-B-fsUXTm.js";export{KritzelActiveUsers,defineCustomElement as defineCustomElementKritzelActiveUsers}from"./kritzel-active-users.js";export{KritzelAvatar,defineCustomElement as defineCustomElementKritzelAvatar}from"./kritzel-avatar.js";export{KritzelBackToContent,defineCustomElement as defineCustomElementKritzelBackToContent}from"./kritzel-back-to-content.js";export{KritzelBrushStyle,defineCustomElement as defineCustomElementKritzelBrushStyle}from"./kritzel-brush-style.js";export{KritzelButton,defineCustomElement as defineCustomElementKritzelButton}from"./kritzel-button.js";export{KritzelColor,defineCustomElement as defineCustomElementKritzelColor}from"./kritzel-color.js";export{KritzelColorPalette,defineCustomElement as defineCustomElementKritzelColorPalette}from"./kritzel-color-palette.js";export{KritzelContextMenu,defineCustomElement as defineCustomElementKritzelContextMenu}from"./kritzel-context-menu.js";export{KritzelControls,defineCustomElement as defineCustomElementKritzelControls}from"./kritzel-controls.js";export{KritzelCurrentUser,defineCustomElement as defineCustomElementKritzelCurrentUser}from"./kritzel-current-user.js";export{KritzelCursorTrail,defineCustomElement as defineCustomElementKritzelCursorTrail}from"./kritzel-cursor-trail.js";export{KritzelDialog,defineCustomElement as defineCustomElementKritzelDialog}from"./kritzel-dialog.js";export{KritzelDropdown,defineCustomElement as defineCustomElementKritzelDropdown}from"./kritzel-dropdown.js";export{KritzelEngine,defineCustomElement as defineCustomElementKritzelEngine}from"./kritzel-engine.js";export{KritzelExport,defineCustomElement as defineCustomElementKritzelExport}from"./kritzel-export.js";export{KritzelFont,defineCustomElement as defineCustomElementKritzelFont}from"./kritzel-font.js";export{KritzelFontFamily,defineCustomElement as defineCustomElementKritzelFontFamily}from"./kritzel-font-family.js";export{KritzelFontSize,defineCustomElement as defineCustomElementKritzelFontSize}from"./kritzel-font-size.js";export{KritzelIcon,defineCustomElement as defineCustomElementKritzelIcon}from"./kritzel-icon.js";export{KritzelInput,defineCustomElement as defineCustomElementKritzelInput}from"./kritzel-input.js";export{KritzelLineEndings,defineCustomElement as defineCustomElementKritzelLineEndings}from"./kritzel-line-endings.js";export{KritzelLoginDialog,defineCustomElement as defineCustomElementKritzelLoginDialog}from"./kritzel-login-dialog.js";export{KritzelMasterDetail,defineCustomElement as defineCustomElementKritzelMasterDetail}from"./kritzel-master-detail.js";export{KritzelMenu,defineCustomElement as defineCustomElementKritzelMenu}from"./kritzel-menu.js";export{KritzelMenuItem,defineCustomElement as defineCustomElementKritzelMenuItem}from"./kritzel-menu-item.js";export{KritzelMoreMenu,defineCustomElement as defineCustomElementKritzelMoreMenu}from"./kritzel-more-menu.js";export{KritzelNumericInput,defineCustomElement as defineCustomElementKritzelNumericInput}from"./kritzel-numeric-input.js";export{KritzelOpacitySlider,defineCustomElement as defineCustomElementKritzelOpacitySlider}from"./kritzel-opacity-slider.js";export{KritzelPillTabs,defineCustomElement as defineCustomElementKritzelPillTabs}from"./kritzel-pill-tabs.js";export{KritzelPortal,defineCustomElement as defineCustomElementKritzelPortal}from"./kritzel-portal.js";export{KritzelSettings,defineCustomElement as defineCustomElementKritzelSettings}from"./kritzel-settings.js";export{KritzelShapeFill,defineCustomElement as defineCustomElementKritzelShapeFill}from"./kritzel-shape-fill.js";export{KritzelShareDialog,defineCustomElement as defineCustomElementKritzelShareDialog}from"./kritzel-share-dialog.js";export{KritzelSlideToggle,defineCustomElement as defineCustomElementKritzelSlideToggle}from"./kritzel-slide-toggle.js";export{KritzelSplitButton,defineCustomElement as defineCustomElementKritzelSplitButton}from"./kritzel-split-button.js";export{KritzelStrokeSize,defineCustomElement as defineCustomElementKritzelStrokeSize}from"./kritzel-stroke-size.js";export{KritzelToolConfig,defineCustomElement as defineCustomElementKritzelToolConfig}from"./kritzel-tool-config.js";export{KritzelTooltip,defineCustomElement as defineCustomElementKritzelTooltip}from"./kritzel-tooltip.js";export{KritzelUtilityPanel,defineCustomElement as defineCustomElementKritzelUtilityPanel}from"./kritzel-utility-panel.js";export{KritzelWorkspaceManager,defineCustomElement as defineCustomElementKritzelWorkspaceManager}from"./kritzel-workspace-manager.js";const u=Math.floor,z=127,p=Number.MAX_SAFE_INTEGER;class C{constructor(){this.cpos=0,this.cbuf=new Uint8Array(100),this.bufs=[]}}const E=()=>new C,k=e=>{const t=new Uint8Array((e=>{let t=e.cpos;for(let s=0;s<e.bufs.length;s++)t+=e.bufs[s].length;return t})(e));let s=0;for(let o=0;o<e.bufs.length;o++){const i=e.bufs[o];t.set(i,s),s+=i.length}return t.set(new Uint8Array(e.cbuf.buffer,0,e.cpos),s),t},x=(e,t)=>{const s=e.cbuf.length;e.cpos===s&&(e.bufs.push(e.cbuf),e.cbuf=new Uint8Array(2*s),e.cpos=0),e.cbuf[e.cpos++]=t},y=(e,t)=>{for(;t>z;)x(e,128|z&t),t=u(t/128);x(e,z&t)},T=(e,t)=>{y(e,t.byteLength),((e,t)=>{const s=e.cbuf.length,o=e.cpos,i=((e,t)=>e<t?e:t)(s-o,t.length),r=t.length-i;e.cbuf.set(t.subarray(0,i),o),e.cpos+=i,r>0&&(e.bufs.push(e.cbuf),e.cbuf=new Uint8Array(((e,t)=>e>t?e:t)(2*s,r)),e.cbuf.set(t.subarray(i)),e.cpos=r)})(e,t)},w=e=>Error(e),P=w("Unexpected end of array"),U=w("Integer out of Range");class v{constructor(e){this.arr=e,this.pos=0}}const A=e=>((e,t)=>{const s=new Uint8Array(e.arr.buffer,e.pos+e.arr.byteOffset,t);return e.pos+=t,s})(e,M(e)),M=e=>{let t=0,s=1;const o=e.arr.length;for(;e.pos<o;){const o=e.arr[e.pos++];if(t+=(o&z)*s,s*=128,o<128)return t;if(t>p)throw U}throw P};class B{doc;channel;_synced=!1;constructor(e,t,s){this.doc=t,this.channel=new BroadcastChannel(e),this.channel.onmessage=e=>{this.handleMessage(e.data)},this.doc.on("update",this.handleDocUpdate),this.broadcastSync(),setTimeout((()=>{this._synced=!0}),100),s?.quiet||console.info("BroadcastChannel Provider initialized: "+e)}handleDocUpdate=(e,t)=>{if(t!==this){const t=E();y(t,0),T(t,e),this.channel.postMessage(k(t))}};handleMessage(e){const s=(e=>new v(e))(new Uint8Array(e));switch(M(s)){case 0:const e=A(s);t.applyUpdate(this.doc,e,this);break;case 1:this.broadcastSync();break;case 2:const o=A(s),i=t.encodeStateAsUpdate(this.doc,o);if(i.length>0){const e=E();y(e,0),T(e,i),this.channel.postMessage(k(e))}}}broadcastSync(){const e=E();y(e,2),T(e,t.encodeStateVector(this.doc)),this.channel.postMessage(k(e))}async connect(){if(!this._synced)return new Promise((e=>{const t=()=>{this._synced?e():setTimeout(t,50)};t()}))}disconnect(){}destroy(){this.doc.off("update",this.handleDocUpdate),this.channel.close()}}class F{provider;isConnected=!1;_quiet=!1;get awareness(){return this.provider.awareness}constructor(e,t,s){const i=s?.url||"ws://localhost:1234",r=s?.roomName||e;this.provider=new o(i,r,t,{params:s?.params,protocols:s?.protocols,WebSocketPolyfill:s?.WebSocketPolyfill,awareness:s?.awareness,maxBackoffTime:s?.maxBackoffTime,disableBc:!0}),this._quiet=s?.quiet??!1,this.setupEventListeners(),this._quiet||console.info(`WebSocket Provider initialized: ${i}/${r}`)}static with(e){return{create:(t,s,o)=>{const i=o?{...e,...o}:e;return new F(t,s,i)}}}setupEventListeners(){this.provider.on("status",(({status:e})=>{"connected"===e?(this.isConnected=!0,this._quiet||console.info("WebSocket connected")):"disconnected"===e&&(this.isConnected=!1,this._quiet||console.info("WebSocket disconnected"))})),this.provider.on("sync",(e=>{e&&!this._quiet&&console.info("WebSocket synced")}))}async connect(){if(!this.isConnected)return new Promise(((e,t)=>{const s=setTimeout((()=>{t(Error("WebSocket connection timeout"))}),1e4),o=({status:t})=>{"connected"===t&&(clearTimeout(s),this.provider.off("status",o),this.isConnected=!0,e())};this.provider.on("status",o),this.provider.wsconnected&&(clearTimeout(s),this.provider.off("status",o),this.isConnected=!0,e())}))}disconnect(){this.provider&&this.provider.disconnect(),this.isConnected=!1}destroy(){this.provider&&this.provider.destroy(),this.isConnected=!1}}class H{provider;isConnected=!1;isSynced=!1;usesSharedSocket=!1;get awareness(){return this.provider.awareness}static sharedWebSocketProvider=null;constructor(e,t,s){const o=s?.name||e,i=s?.url||"ws://localhost:1234",r=s?.websocketProvider||H.sharedWebSocketProvider;if(r){this.usesSharedSocket=!0;const e={websocketProvider:r,name:o,document:t,token:s?.token||null,onConnect:()=>{this.isConnected||(this.isConnected=!0,s?.quiet||console.info("Hocuspocus connected: "+o),s?.onConnect&&s.onConnect())},onDisconnect:()=>{(this.isConnected||this.isSynced)&&(this.isConnected=!1,this.isSynced=!1,s?.quiet||console.info("Hocuspocus disconnected: "+o),s?.onDisconnect&&s.onDisconnect())},onSynced:()=>{this.isSynced||(this.isSynced=!0,s?.quiet||console.info("Hocuspocus synced: "+o),s?.onSynced&&s.onSynced())}};void 0!==s?.forceSyncInterval&&(e.forceSyncInterval=s.forceSyncInterval),s?.onAuthenticationFailed&&(e.onAuthenticationFailed=s.onAuthenticationFailed),s?.onStatus&&(e.onStatus=s.onStatus),this.provider=new n(e),this.provider.attach(),s?.quiet||console.info("Hocuspocus Provider initialized (multiplexed): "+o)}else{this.usesSharedSocket=!1;const e={url:i,name:o,document:t,token:s?.token||null,onConnect:()=>{this.isConnected||(this.isConnected=!0,s?.quiet||console.info("Hocuspocus connected: "+o),s?.onConnect&&s.onConnect())},onDisconnect:()=>{(this.isConnected||this.isSynced)&&(this.isConnected=!1,this.isSynced=!1,s?.quiet||console.info("Hocuspocus disconnected: "+o),s?.onDisconnect&&s.onDisconnect())},onSynced:()=>{this.isSynced||(this.isSynced=!0,s?.quiet||console.info("Hocuspocus synced: "+o),s?.onSynced&&s.onSynced())}};void 0!==s?.forceSyncInterval&&(e.forceSyncInterval=s.forceSyncInterval),s?.onAuthenticationFailed&&(e.onAuthenticationFailed=s.onAuthenticationFailed),s?.onStatus&&(e.onStatus=s.onStatus),s?.WebSocketPolyfill&&(e.WebSocketPolyfill=s.WebSocketPolyfill),this.provider=new n(e),s?.quiet||console.info(`Hocuspocus Provider initialized: ${i}/${o}`)}}static createSharedWebSocket(e){if(H.sharedWebSocketProvider)return console.warn("Shared WebSocket already exists. Returning existing instance."),H.sharedWebSocketProvider;const t={url:e.url};return e.WebSocketPolyfill&&(t.WebSocketPolyfill=e.WebSocketPolyfill),e.onConnect&&(t.onConnect=e.onConnect),e.onDisconnect&&(t.onDisconnect=e.onDisconnect),e.onStatus&&(t.onStatus=e.onStatus),H.sharedWebSocketProvider=new m(t),console.info("Shared Hocuspocus WebSocket created: "+e.url),H.sharedWebSocketProvider}static destroySharedWebSocket(){H.sharedWebSocketProvider&&(H.sharedWebSocketProvider.destroy(),H.sharedWebSocketProvider=null,console.info("Shared Hocuspocus WebSocket destroyed"))}static getSharedWebSocket(){return H.sharedWebSocketProvider}static with(e){return{create:(t,s,o)=>{const i=o?{...e,...o}:e;return new H(t,s,i)}}}async connect(){if(!this.isSynced)return new Promise(((e,t)=>{const s=setTimeout((()=>{t(Error("Hocuspocus connection timeout"))}),1e4),o=()=>{clearTimeout(s),this.provider.off("synced",o),e()};if(this.provider.on("synced",o),this.provider.isSynced)return clearTimeout(s),this.provider.off("synced",o),void e();this.isConnected||this.usesSharedSocket||this.provider.connect()}))}disconnect(){this.provider&&(this.usesSharedSocket?this.provider.detach():this.provider.disconnect()),this.isConnected=!1,this.isSynced=!1}destroy(){this.provider&&this.provider.destroy(),this.isConnected=!1,this.isSynced=!1}}export{B as BroadcastSyncProvider,H as HocuspocusSyncProvider,F as WebSocketSyncProvider}
|