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.
@@ -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 providers by hot-swapping them on the existing Yjs documents.
26084
- * Tears down current providers and creates new ones from the current syncConfig,
26085
- * without destroying the Y.Doc or losing in-memory data. Call this after updating
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
- await this.core.appStateMap.reconnectProviders(this.syncConfig);
26091
- if (this.core.store.state.objects) {
26092
- await this.core.store.state.objects.reconnectProviders(this.syncConfig);
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.60';
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 providers by hot-swapping them on the existing Yjs documents.
1099
- * Tears down current providers and creates new ones from the current syncConfig,
1100
- * without destroying the Y.Doc or losing in-memory data. Call this after updating
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
- await this.core.appStateMap.reconnectProviders(this.syncConfig);
1106
- if (this.core.store.state.objects) {
1107
- await this.core.store.state.objects.reconnectProviders(this.syncConfig);
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 providers by hot-swapping them on the existing Yjs documents.\r\nTears down current providers and creates new ones from the current syncConfig,\r\nwithout destroying the Y.Doc or losing in-memory data. Call this after updating\r\nthe syncConfig prop (e.g. after authentication state changes).",
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
  }
@@ -3,4 +3,4 @@
3
3
  * This file is auto-generated by the version bump scripts.
4
4
  * Do not modify manually.
5
5
  */
6
- export const KRITZEL_VERSION = '0.1.60';
6
+ export const KRITZEL_VERSION = '0.1.61';
@@ -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}