kritzel-stencil 0.4.25 → 0.4.27

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (138) hide show
  1. package/dist/cjs/index-Xav9JFHg.js +2 -2
  2. package/dist/cjs/index.cjs.js +3 -42
  3. package/dist/cjs/{kritzel-active-users_47.cjs.entry.js → kritzel-active-users_46.cjs.entry.js} +119 -191
  4. package/dist/cjs/loader.cjs.js +1 -1
  5. package/dist/cjs/{schema.constants-CjN-B633.js → schema.constants-CcvqL5nJ.js} +41 -0
  6. package/dist/cjs/stencil.cjs.js +1 -1
  7. package/dist/collection/classes/core/core.class.js +0 -4
  8. package/dist/collection/classes/structures/object-map.structure.js +0 -65
  9. package/dist/collection/collection-manifest.json +0 -1
  10. package/dist/collection/components/core/kritzel-editor/kritzel-editor.css +4 -4
  11. package/dist/collection/components/core/kritzel-editor/kritzel-editor.js +58 -77
  12. package/dist/collection/components/core/kritzel-engine/kritzel-engine.js +16 -72
  13. package/dist/collection/components/core/kritzel-watermark/kritzel-watermark.js +1 -1
  14. package/dist/collection/components/shared/kritzel-avatar/kritzel-avatar.js +3 -3
  15. package/dist/collection/components/shared/kritzel-button/kritzel-button.js +2 -2
  16. package/dist/collection/components/shared/kritzel-color/kritzel-color.js +2 -2
  17. package/dist/collection/components/shared/kritzel-color-palette/kritzel-color-palette.js +1 -1
  18. package/dist/collection/components/shared/kritzel-font/kritzel-font.js +1 -1
  19. package/dist/collection/components/shared/kritzel-font-size/kritzel-font-size.js +1 -1
  20. package/dist/collection/components/shared/kritzel-input/kritzel-input.js +1 -1
  21. package/dist/collection/components/shared/kritzel-master-detail/kritzel-master-detail.js +3 -3
  22. package/dist/collection/components/shared/kritzel-menu/kritzel-menu.js +1 -1
  23. package/dist/collection/components/shared/kritzel-menu-item/kritzel-menu-item.js +2 -2
  24. package/dist/collection/components/shared/kritzel-numeric-input/kritzel-numeric-input.js +1 -1
  25. package/dist/collection/components/shared/kritzel-opacity-slider/kritzel-opacity-slider.js +1 -1
  26. package/dist/collection/components/shared/kritzel-portal/kritzel-portal.js +1 -1
  27. package/dist/collection/components/shared/kritzel-slide-toggle/kritzel-slide-toggle.js +1 -1
  28. package/dist/collection/components/shared/kritzel-split-button/kritzel-split-button.js +1 -1
  29. package/dist/collection/components/shared/kritzel-stroke-size/kritzel-stroke-size.js +1 -1
  30. package/dist/collection/components/shared/kritzel-tooltip/kritzel-tooltip.js +2 -2
  31. package/dist/collection/components/ui/kritzel-back-to-content/kritzel-back-to-content.js +1 -1
  32. package/dist/collection/components/ui/kritzel-controls/kritzel-controls.js +6 -6
  33. package/dist/collection/components/ui/kritzel-current-user/kritzel-current-user.js +1 -1
  34. package/dist/collection/components/ui/kritzel-current-user-dialog/kritzel-current-user-dialog.js +1 -1
  35. package/dist/collection/components/ui/kritzel-export/kritzel-export.js +1 -1
  36. package/dist/collection/components/ui/kritzel-loading-overlay/kritzel-loading-overlay.css +13 -9
  37. package/dist/collection/components/ui/kritzel-loading-overlay/kritzel-loading-overlay.js +1 -1
  38. package/dist/collection/components/ui/kritzel-login-dialog/kritzel-login-dialog.js +1 -1
  39. package/dist/collection/components/ui/kritzel-more-menu/kritzel-more-menu.js +1 -1
  40. package/dist/collection/components/ui/kritzel-settings/kritzel-settings.js +1 -1
  41. package/dist/collection/components/ui/kritzel-share-dialog/kritzel-share-dialog.js +2 -2
  42. package/dist/collection/components/ui/kritzel-utility-panel/kritzel-utility-panel.js +1 -1
  43. package/dist/collection/components/ui/kritzel-zoom-panel/kritzel-zoom-panel.js +1 -1
  44. package/dist/collection/configs/default-sync.config.js +2 -1
  45. package/dist/collection/constants/version.js +1 -1
  46. package/dist/components/index.d.ts +0 -2
  47. package/dist/components/index.js +2 -43
  48. package/dist/components/kritzel-active-users.js +1 -1
  49. package/dist/components/kritzel-avatar.js +1 -1
  50. package/dist/components/kritzel-back-to-content.js +1 -1
  51. package/dist/components/kritzel-button.js +1 -1
  52. package/dist/components/kritzel-color-palette.js +1 -1
  53. package/dist/components/kritzel-color.js +1 -1
  54. package/dist/components/kritzel-controls.js +1 -1
  55. package/dist/components/kritzel-current-user-dialog.js +1 -1
  56. package/dist/components/kritzel-current-user.js +1 -1
  57. package/dist/components/kritzel-editor.js +140 -113
  58. package/dist/components/kritzel-engine.js +1 -1
  59. package/dist/components/kritzel-export.js +1 -1
  60. package/dist/components/kritzel-font-size.js +1 -1
  61. package/dist/components/kritzel-font.js +1 -1
  62. package/dist/components/kritzel-input.js +1 -1
  63. package/dist/components/kritzel-loading-overlay.js +1 -1
  64. package/dist/components/kritzel-login-dialog.js +1 -1
  65. package/dist/components/kritzel-master-detail.js +1 -1
  66. package/dist/components/kritzel-menu-item.js +1 -1
  67. package/dist/components/kritzel-menu.js +1 -1
  68. package/dist/components/kritzel-more-menu.js +1 -1
  69. package/dist/components/kritzel-numeric-input.js +1 -1
  70. package/dist/components/kritzel-opacity-slider.js +1 -1
  71. package/dist/components/kritzel-portal.js +1 -1
  72. package/dist/components/kritzel-settings.js +1 -1
  73. package/dist/components/kritzel-share-dialog.js +1 -1
  74. package/dist/components/kritzel-slide-toggle.js +1 -1
  75. package/dist/components/kritzel-split-button.js +1 -1
  76. package/dist/components/kritzel-stroke-size.js +1 -1
  77. package/dist/components/kritzel-tool-config.js +1 -1
  78. package/dist/components/kritzel-tooltip.js +1 -1
  79. package/dist/components/kritzel-utility-panel.js +1 -1
  80. package/dist/components/kritzel-watermark.js +1 -1
  81. package/dist/components/kritzel-workspace-manager.js +1 -1
  82. package/dist/components/kritzel-zoom-panel.js +1 -1
  83. package/dist/components/p-4uoSa0Xl.js +43 -0
  84. package/dist/components/{p-fL9rl200.js → p-B38_9BJg.js} +1 -1
  85. package/dist/components/{p-eZXIu4yK.js → p-BPzdPKWE.js} +3 -3
  86. package/dist/components/{p-0fhjWRmT.js → p-BTo2cQZ9.js} +5 -5
  87. package/dist/components/{p-BoN700-O.js → p-Ba0c-tu2.js} +2 -2
  88. package/dist/components/{p-B-585egz.js → p-BeSKOETx.js} +2 -2
  89. package/dist/components/{p-2WiGyky4.js → p-BprEDRpA.js} +2 -2
  90. package/dist/components/{p-B5SWPDuq.js → p-C0FEC_gS.js} +1 -1
  91. package/dist/components/{p-BrNsOp2v.js → p-CAXR5-S9.js} +4 -4
  92. package/dist/components/{p-BPsKYMH6.js → p-CBrn5AIB.js} +1 -1
  93. package/dist/components/{p-gJcH-huF.js → p-CYwoBiqy.js} +57 -112
  94. package/dist/components/{p-C98Eb3_R.js → p-Ce1j1-Hg.js} +3 -3
  95. package/dist/components/{p-DDTMGbtA.js → p-CeffYwAK.js} +15 -15
  96. package/dist/components/{p-CwZ3KKFq.js → p-ChPs27Fd.js} +3 -3
  97. package/dist/components/{p-D1rjfWgJ.js → p-CoXN583u.js} +3 -3
  98. package/dist/components/{p-DwMqCX2P.js → p-CucCT7Qn.js} +2 -2
  99. package/dist/components/{p-vqEUQ-4Q.js → p-D0Ed8epW.js} +3 -3
  100. package/dist/components/{p-DBqoPgev.js → p-DFMZEarE.js} +1 -1
  101. package/dist/components/{p-DtnMdWWB.js → p-DK0anxtL.js} +1 -1
  102. package/dist/components/{p-4SPnZZkH.js → p-DN9p3G9K.js} +3 -3
  103. package/dist/components/{p-Dt7-I2Xz.js → p-DOTdJ3JQ.js} +2 -2
  104. package/dist/components/{p-HoO86l1o.js → p-DOl-95VY.js} +6 -6
  105. package/dist/components/{p-DKGg-76-.js → p-DTB3ykgO.js} +1 -1
  106. package/dist/components/{p-CzW58DHM.js → p-DUmLsjKb.js} +1 -1
  107. package/dist/components/{p-Czhdc844.js → p-D_cyY7Nd.js} +1 -1
  108. package/dist/components/{p-CF8pLc07.js → p-DhabvHJM.js} +3 -3
  109. package/dist/components/{p-CaBbajU2.js → p-DkHYY72B.js} +2 -2
  110. package/dist/components/{p-CrHvaLRV.js → p-DnmVD1Mz.js} +1 -1
  111. package/dist/components/{p-GKmqCI8r.js → p-DoxFuOy1.js} +2 -2
  112. package/dist/components/{p-dsxHDlQ3.js → p-Dpm75DfV.js} +2 -2
  113. package/dist/components/{p-BozrueXV.js → p-Dvn6ad4a.js} +1 -1
  114. package/dist/components/{p-PjPPCHVL.js → p-NOWtUeeQ.js} +1 -1
  115. package/dist/components/{p-DVXTPI71.js → p-OUl5CA4Y.js} +1 -1
  116. package/dist/esm/index-Dhio9uis.js +2 -2
  117. package/dist/esm/index.js +4 -43
  118. package/dist/esm/{kritzel-active-users_47.entry.js → kritzel-active-users_46.entry.js} +120 -191
  119. package/dist/esm/loader.js +1 -1
  120. package/dist/esm/{schema.constants-DfvqHmxc.js → schema.constants-De_S50eB.js} +41 -1
  121. package/dist/esm/stencil.js +1 -1
  122. package/dist/stencil/index.esm.js +4 -43
  123. package/dist/stencil/{p-DfvqHmxc.js → p-De_S50eB.js} +41 -1
  124. package/dist/stencil/{p-dc5783ee.entry.js → p-f91efb01.entry.js} +120 -191
  125. package/dist/stencil/stencil.esm.js +1 -1
  126. package/dist/types/classes/structures/object-map.structure.d.ts +0 -14
  127. package/dist/types/components/core/kritzel-editor/kritzel-editor.d.ts +8 -6
  128. package/dist/types/components/core/kritzel-engine/kritzel-engine.d.ts +3 -10
  129. package/dist/types/components.d.ts +5 -80
  130. package/dist/types/constants/version.d.ts +1 -1
  131. package/package.json +1 -1
  132. package/dist/collection/components/shared/kritzel-sync-indicator/kritzel-sync-indicator.css +0 -50
  133. package/dist/collection/components/shared/kritzel-sync-indicator/kritzel-sync-indicator.js +0 -66
  134. package/dist/components/kritzel-sync-indicator.d.ts +0 -11
  135. package/dist/components/kritzel-sync-indicator.js +0 -6
  136. package/dist/components/p-CAoN_STZ.js +0 -39
  137. package/dist/components/p-DB58Oa5V.js +0 -43
  138. package/dist/types/components/shared/kritzel-sync-indicator/kritzel-sync-indicator.d.ts +0 -7
@@ -5,11 +5,12 @@ import { c as commonjsGlobal } from './p-BFTU3MAI.js';
5
5
  import { a as KritzelColorHelper, D as DEFAULT_COLOR_PALETTE, K as KritzelThemeManager } from './p-7I4Uzjrw.js';
6
6
  import { K as KritzelDevicesHelper } from './p-jGOpkGDl.js';
7
7
  import { K as KritzelFontRegistry, r as resolveTextToolAvailableFonts } from './p-DJkKlUyZ.js';
8
- import { A as ABSOLUTE_SCALE_MAX, a as ABSOLUTE_SCALE_MIN, d as defineCustomElement$1 } from './p-DtnMdWWB.js';
8
+ import { A as ABSOLUTE_SCALE_MAX, a as ABSOLUTE_SCALE_MIN, d as defineCustomElement$1 } from './p-DK0anxtL.js';
9
9
  import { K as KritzelWorkspace, W as WORKSPACE_EXPORT_VERSION } from './p-DAwPPDMS.js';
10
10
  import { K as KritzelHTMLHelper } from './p-WUdQqYnu.js';
11
11
  import { O as ObjectHelper } from './p-DPONTran.js';
12
12
  import * as Y from 'yjs';
13
+ import { IndexeddbPersistence } from 'y-indexeddb';
13
14
  import { a as CURRENT_WORKSPACE_SCHEMA_VERSION, C as CURRENT_APP_STATE_SCHEMA_VERSION } from './p-CW-VyJgK.js';
14
15
  import { K as KritzelIconRegistry, d as defineCustomElement$2 } from './p-CSuU8frA.js';
15
16
 
@@ -21786,6 +21787,45 @@ class KritzelSelectionTool extends KritzelBaseTool {
21786
21787
  }
21787
21788
  }
21788
21789
 
21790
+ /**
21791
+ * IndexedDB sync provider for local persistence
21792
+ */
21793
+ class IndexedDBSyncProvider {
21794
+ static type = 'local';
21795
+ type = 'local';
21796
+ provider;
21797
+ isConnected = false;
21798
+ constructor(docName, doc, options) {
21799
+ const dbName = options?.name || docName;
21800
+ this.provider = new IndexeddbPersistence(dbName, doc);
21801
+ }
21802
+ async connect() {
21803
+ if (this.isConnected) {
21804
+ return;
21805
+ }
21806
+ return new Promise(resolve => {
21807
+ this.provider.on('synced', () => {
21808
+ this.isConnected = true;
21809
+ resolve();
21810
+ });
21811
+ });
21812
+ }
21813
+ disconnect() {
21814
+ // IndexedDB doesn't need explicit disconnect
21815
+ this.isConnected = false;
21816
+ }
21817
+ async reconnect() {
21818
+ this.disconnect();
21819
+ return this.connect();
21820
+ }
21821
+ destroy() {
21822
+ if (this.provider) {
21823
+ this.provider.destroy();
21824
+ }
21825
+ this.isConnected = false;
21826
+ }
21827
+ }
21828
+
21789
21829
  /**
21790
21830
  * Manages anchor connections between line endpoints and other objects.
21791
21831
  * Maintains a runtime index for efficient reverse lookups and handles
@@ -24326,7 +24366,7 @@ const WORKSPACE_MIGRATIONS = [
24326
24366
  * Default sync configuration - None
24327
24367
  */
24328
24368
  const DEFAULT_SYNC_CONFIG = {
24329
- providers: [],
24369
+ providers: [IndexedDBSyncProvider],
24330
24370
  };
24331
24371
 
24332
24372
  var lodash$1 = {exports: {}};
@@ -43322,14 +43362,6 @@ class KritzelObjectMap {
43322
43362
  _lastAwarenessEmitTime = 0;
43323
43363
  _awarenessEmitTimeout = null;
43324
43364
  AWARENESS_THROTTLE_INTERVAL = 100; // milliseconds
43325
- // Identities of the raw network-provider instances (e.g. WebsocketProvider, HocuspocusProvider)
43326
- // that Yjs tags as transaction origin for remote updates; local providers (IndexedDB,
43327
- // BroadcastChannel) never appear here, so their transactions never toggle isSyncing.
43328
- _networkTransactionOrigins = new Set();
43329
- _isSyncing = false;
43330
- _syncingChangeCallbacks = [];
43331
- _beforeTransactionHandler = null;
43332
- _afterAllTransactionsHandler = null;
43333
43365
  /**
43334
43366
  * When true, update() only modifies local state (quadtree + idMap)
43335
43367
  * without writing to Yjs. Used during drag operations to avoid
@@ -43505,22 +43537,6 @@ class KritzelObjectMap {
43505
43537
  this._objectsChangeCallbacks = this._objectsChangeCallbacks.filter(existingCallback => existingCallback !== callback);
43506
43538
  };
43507
43539
  }
43508
- /**
43509
- * Whether the local copy currently differs from data a remote peer is in the process of merging in.
43510
- */
43511
- get isSyncing() {
43512
- return this._isSyncing;
43513
- }
43514
- /**
43515
- * Registers a callback invoked when a remote sync starts (`true`) or finishes (`false`).
43516
- * "Starts" fires from `beforeTransaction`, before the incoming remote update is merged.
43517
- */
43518
- onSyncingChange(callback) {
43519
- this._syncingChangeCallbacks.push(callback);
43520
- return () => {
43521
- this._syncingChangeCallbacks = this._syncingChangeCallbacks.filter(existingCallback => existingCallback !== callback);
43522
- };
43523
- }
43524
43540
  /**
43525
43541
  * Returns the Yjs UndoManager instance for managing undo/redo operations.
43526
43542
  * @returns The UndoManager instance, or `null` if not initialized
@@ -43614,36 +43630,6 @@ class KritzelObjectMap {
43614
43630
  const providerList = this._providers.map(p => `${p.constructor.name} (${p.type})`).join(', ');
43615
43631
  console.info(`[Kritzel] Workspace sync providers initialized for ${docName}: ${providerList || 'none'}`);
43616
43632
  }
43617
- // Only network providers (WebSocket, Hocuspocus) represent a genuine remote peer;
43618
- // local providers (IndexedDB, BroadcastChannel) never appear as a transaction origin here,
43619
- // so loading from IndexedDB or a same-device tab never toggles isSyncing.
43620
- this._networkTransactionOrigins = new Set(this._providers
43621
- .filter(p => p.type === 'network')
43622
- .map(p => p.rawProvider)
43623
- .filter((origin) => origin != null));
43624
- // Fires before a remote-origin transaction integrates its update, so this always
43625
- // precedes any local/remote reconciliation for that update.
43626
- this._beforeTransactionHandler = transaction => {
43627
- if (this._isSyncing || !this._networkTransactionOrigins.has(transaction.origin)) {
43628
- return;
43629
- }
43630
- this._isSyncing = true;
43631
- this._syncingChangeCallbacks.forEach(callback => callback(true));
43632
- };
43633
- // Fires once a batch of transactions (possibly several remote updates) has fully settled.
43634
- this._afterAllTransactionsHandler = (_doc, transactions) => {
43635
- if (!this._isSyncing) {
43636
- return;
43637
- }
43638
- const hadRemoteTransaction = transactions.some(transaction => this._networkTransactionOrigins.has(transaction.origin));
43639
- if (!hadRemoteTransaction) {
43640
- return;
43641
- }
43642
- this._isSyncing = false;
43643
- this._syncingChangeCallbacks.forEach(callback => callback(false));
43644
- };
43645
- this._ydoc.on('beforeTransaction', this._beforeTransactionHandler);
43646
- this._ydoc.on('afterAllTransactions', this._afterAllTransactionsHandler);
43647
43633
  // captureTimeout is effectively infinite — undo-step boundaries are
43648
43634
  // marked explicitly via markUndoBoundary() in insert/remove/reset and
43649
43635
  // at stroke/gesture boundaries in the tools. This prevents a single
@@ -44392,20 +44378,11 @@ class KritzelObjectMap {
44392
44378
  p.destroy();
44393
44379
  });
44394
44380
  this._providers = [];
44395
- this._networkTransactionOrigins = new Set();
44396
44381
  // Clear object map references
44397
44382
  this._objectsMap = null;
44398
44383
  this._metadataMap = null;
44399
44384
  // Destroy Y.Doc
44400
44385
  if (this._ydoc) {
44401
- if (this._beforeTransactionHandler) {
44402
- this._ydoc.off('beforeTransaction', this._beforeTransactionHandler);
44403
- this._beforeTransactionHandler = null;
44404
- }
44405
- if (this._afterAllTransactionsHandler) {
44406
- this._ydoc.off('afterAllTransactions', this._afterAllTransactionsHandler);
44407
- this._afterAllTransactionsHandler = null;
44408
- }
44409
44386
  this._ydoc.destroy();
44410
44387
  this._ydoc = null;
44411
44388
  }
@@ -44415,8 +44392,6 @@ class KritzelObjectMap {
44415
44392
  this._workspaceId = null;
44416
44393
  this._isReady = false;
44417
44394
  this._temporaryItemsCount = 0;
44418
- this._isSyncing = false;
44419
- this._syncingChangeCallbacks = [];
44420
44395
  }
44421
44396
  }
44422
44397
 
@@ -46267,10 +46242,6 @@ class KritzelCore {
46267
46242
  objectsMap.onAwarenessChange(states => {
46268
46243
  this.engine.emitAwarenessChange(states);
46269
46244
  });
46270
- // Forward remote sync start/finish to the engine as events
46271
- objectsMap.onSyncingChange(isSyncing => {
46272
- this.engine.emitIsSyncing(isSyncing);
46273
- });
46274
46245
  // Rebuild anchor index after loading objects
46275
46246
  this._anchorManager.rebuildIndex();
46276
46247
  this.engine.emitObjectsChange();
@@ -48935,11 +48906,6 @@ const KritzelEngine = /*@__PURE__*/ proxyCustomElement(class KritzelEngine exten
48935
48906
  isPanningEnabled = true;
48936
48907
  /** When false, Ctrl+wheel events do not zoom the viewport. */
48937
48908
  isZoomingEnabled = true;
48938
- /** External loading state. Combined with internal workspace-loading state to drive the overlay. */
48939
- isLoading = false;
48940
- onIsLoadingChange() {
48941
- this.syncLoadingState();
48942
- }
48943
48909
  /** Emitted when the engine has fully initialized and is ready for interaction. */
48944
48910
  isEngineReady;
48945
48911
  /** Emitted when the active drawing tool changes. */
@@ -48968,14 +48934,12 @@ const KritzelEngine = /*@__PURE__*/ proxyCustomElement(class KritzelEngine exten
48968
48934
  viewportChange;
48969
48935
  /** Emitted when the awareness state changes (remote user cursors, presence). */
48970
48936
  awarenessChange;
48971
- /** Emitted when a remote sync starts (`true`, data differs from the local copy) or finishes (`false`). */
48972
- isSyncing;
48973
48937
  /** Emitted when notifications change. */
48974
48938
  notificationsChange;
48975
48939
  /** Emitted when context-menu visibility, items, or position changes. */
48976
48940
  contextMenuStateChange;
48977
- /** Emitted when the combined loading state (external `isLoading` prop or internal workspace loading) changes. */
48978
- loadingChange;
48941
+ /** Emitted while the selected workspace's objects are being initialized and synchronized. */
48942
+ isLoadingChange;
48979
48943
  forceUpdate = 0;
48980
48944
  /** Manually triggers the `objectsSelectionChange` event. */
48981
48945
  async triggerSelectionChange() {
@@ -50553,7 +50517,6 @@ const KritzelEngine = /*@__PURE__*/ proxyCustomElement(class KritzelEngine exten
50553
50517
  _syncInitPromise = null;
50554
50518
  _syncConfigRevision = 0;
50555
50519
  _assetStorageConfigRevision = 0;
50556
- _isWorkspaceLoading = false;
50557
50520
  _hasLoggedUnlicensedWelcomeBanner = false;
50558
50521
  _previousVisibleCustomElements = new Set();
50559
50522
  _revealedImageKeys = new Set();
@@ -50572,9 +50535,12 @@ const KritzelEngine = /*@__PURE__*/ proxyCustomElement(class KritzelEngine exten
50572
50535
  _objectDistanceFadeCloseStartScale = 2;
50573
50536
  _objectDistanceFadeCloseMaxScale = 4;
50574
50537
  _objectDistanceFadeCloseMinOpacity = 0;
50575
- syncLoadingState() {
50576
- this.core.store.state.isLoading = this._isWorkspaceLoading || this.isLoading;
50577
- this.loadingChange.emit(this.core.store.state.isLoading);
50538
+ setLoadingState(isLoading) {
50539
+ if (this.core.store.state.isLoading === isLoading) {
50540
+ return;
50541
+ }
50542
+ this.core.store.state.isLoading = isLoading;
50543
+ this.isLoadingChange.emit(isLoading);
50578
50544
  }
50579
50545
  isNetworkAvailable() {
50580
50546
  return typeof navigator !== 'undefined' && navigator.onLine;
@@ -50682,10 +50648,9 @@ const KritzelEngine = /*@__PURE__*/ proxyCustomElement(class KritzelEngine exten
50682
50648
  this.objectsInViewportChange = createEvent(this, "objectsInViewportChange");
50683
50649
  this.viewportChange = createEvent(this, "viewportChange");
50684
50650
  this.awarenessChange = createEvent(this, "awarenessChange");
50685
- this.isSyncing = createEvent(this, "isSyncing");
50686
50651
  this.notificationsChange = createEvent(this, "notificationsChange");
50687
50652
  this.contextMenuStateChange = createEvent(this, "contextMenuStateChange");
50688
- this.loadingChange = createEvent(this, "loadingChange");
50653
+ this.isLoadingChange = createEvent(this, "isLoadingChange");
50689
50654
  this.core = new KritzelCore(this);
50690
50655
  }
50691
50656
  disconnectedCallback() {
@@ -50742,8 +50707,6 @@ const KritzelEngine = /*@__PURE__*/ proxyCustomElement(class KritzelEngine exten
50742
50707
  this.core.store.state.debugInfo = this.debugInfo;
50743
50708
  this.core.assetResolver.setShowInfo(this.debugInfo.showAssetResolverInfo);
50744
50709
  }
50745
- this._isWorkspaceLoading = true;
50746
- this.syncLoadingState();
50747
50710
  }
50748
50711
  async componentDidLoad() {
50749
50712
  setTimeout(async () => {
@@ -50881,15 +50844,7 @@ const KritzelEngine = /*@__PURE__*/ proxyCustomElement(class KritzelEngine exten
50881
50844
  if (!this.core.appStateMap.hasNetworkSyncProvider || !this.isNetworkAvailable()) {
50882
50845
  return;
50883
50846
  }
50884
- this._isWorkspaceLoading = true;
50885
- this.syncLoadingState();
50886
- try {
50887
- await this.core.appStateMap.whenNetworkSynced();
50888
- }
50889
- finally {
50890
- this._isWorkspaceLoading = false;
50891
- this.syncLoadingState();
50892
- }
50847
+ await this.core.appStateMap.whenNetworkSynced();
50893
50848
  }
50894
50849
  resolveStartupWorkspace() {
50895
50850
  if (this.activeWorkspaceId) {
@@ -50938,21 +50893,21 @@ const KritzelEngine = /*@__PURE__*/ proxyCustomElement(class KritzelEngine exten
50938
50893
  await this._workspaceInitializationPromise;
50939
50894
  return;
50940
50895
  }
50941
- this._isWorkspaceLoading = true;
50942
- this.syncLoadingState();
50896
+ this.setLoadingState(true);
50943
50897
  const initializationPromise = this.core.initializeWorkspace(workspace, options);
50898
+ const objectsMap = this.core.store.objects;
50944
50899
  this._workspaceInitializationPromise = initializationPromise;
50945
50900
  this._workspaceInitializationTargetKey = targetKey;
50946
50901
  try {
50947
50902
  await initializationPromise;
50903
+ await objectsMap?.whenNetworkSynced();
50948
50904
  }
50949
50905
  finally {
50950
50906
  // Only the most recent init clears loading state to prevent race conditions
50951
50907
  if (this._workspaceInitializationPromise === initializationPromise) {
50952
50908
  this._workspaceInitializationPromise = null;
50953
50909
  this._workspaceInitializationTargetKey = null;
50954
- this._isWorkspaceLoading = false;
50955
- this.syncLoadingState();
50910
+ this.setLoadingState(false);
50956
50911
  }
50957
50912
  }
50958
50913
  }
@@ -50989,9 +50944,6 @@ const KritzelEngine = /*@__PURE__*/ proxyCustomElement(class KritzelEngine exten
50989
50944
  emitAwarenessChange(states) {
50990
50945
  this.awarenessChange.emit(states);
50991
50946
  }
50992
- emitIsSyncing(isSyncing) {
50993
- this.isSyncing.emit(isSyncing);
50994
- }
50995
50947
  emitObjectsInViewportChange() {
50996
50948
  const visibleObjects = this.core.store.objectsInViewport;
50997
50949
  this.objectsInViewportChange.emit(visibleObjects);
@@ -51664,9 +51616,6 @@ const KritzelEngine = /*@__PURE__*/ proxyCustomElement(class KritzelEngine exten
51664
51616
  }],
51665
51617
  "debugInfo": [{
51666
51618
  "onDebugInfoChange": 0
51667
- }],
51668
- "isLoading": [{
51669
- "onIsLoadingChange": 0
51670
51619
  }]
51671
51620
  }; }
51672
51621
  static get style() { return kritzelEngineCss(); }
@@ -51697,7 +51646,6 @@ const KritzelEngine = /*@__PURE__*/ proxyCustomElement(class KritzelEngine exten
51697
51646
  "debugInfo": [16],
51698
51647
  "isPanningEnabled": [4, "is-panning-enabled"],
51699
51648
  "isZoomingEnabled": [4, "is-zooming-enabled"],
51700
- "isLoading": [4, "is-loading"],
51701
51649
  "forceUpdate": [32],
51702
51650
  "triggerSelectionChange": [64],
51703
51651
  "beginSceneBootstrap": [64],
@@ -51847,9 +51795,6 @@ const KritzelEngine = /*@__PURE__*/ proxyCustomElement(class KritzelEngine exten
51847
51795
  }],
51848
51796
  "debugInfo": [{
51849
51797
  "onDebugInfoChange": 0
51850
- }],
51851
- "isLoading": [{
51852
- "onIsLoadingChange": 0
51853
51798
  }]
51854
51799
  }]);
51855
51800
  function defineCustomElement() {
@@ -51886,4 +51831,4 @@ function defineCustomElement() {
51886
51831
  } });
51887
51832
  }
51888
51833
 
51889
- export { AssetNotFoundError as A, KritzelKeyboardHelper as B, defineCustomElement as C, DE_LOCALE as D, EN_LOCALE as E, FR_LOCALE as F, KritzelEngine as G, IndexedDBAssetProvider as I, KritzelText as K, ShapeType as S, WORKSPACE_MIGRATIONS as W, KritzelImage as a, KritzelGroup as b, KritzelShape as c, KritzelCustomElement as d, KritzelBaseTool as e, KritzelBrushTool as f, KritzelLineTool as g, KritzelEraserTool as h, KritzelImageTool as i, KritzelTextTool as j, KritzelShapeTool as k, KritzelCursorHelper as l, KritzelSelectionTool as m, KritzelAssetResolver as n, KritzelAnchorManager as o, KritzelLocalizationManager as p, KritzelLicenseManager as q, KritzelCustomElementRendererRegistry as r, KritzelAlignment as s, runMigrations as t, APP_STATE_MIGRATIONS as u, DEFAULT_STROKE_SIZES as v, DEFAULT_FONT_SIZES as w, DEFAULT_SYNC_CONFIG as x, KritzelSelectionGroup as y, KritzelSelectionBox as z };
51834
+ export { AssetNotFoundError as A, KritzelSelectionBox as B, KritzelKeyboardHelper as C, DE_LOCALE as D, EN_LOCALE as E, FR_LOCALE as F, defineCustomElement as G, KritzelEngine as H, IndexedDBSyncProvider as I, KritzelText as K, ShapeType as S, WORKSPACE_MIGRATIONS as W, KritzelImage as a, KritzelGroup as b, KritzelShape as c, KritzelCustomElement as d, KritzelBaseTool as e, KritzelBrushTool as f, KritzelLineTool as g, KritzelEraserTool as h, KritzelImageTool as i, KritzelTextTool as j, KritzelShapeTool as k, KritzelCursorHelper as l, KritzelSelectionTool as m, KritzelAssetResolver as n, IndexedDBAssetProvider as o, KritzelAnchorManager as p, KritzelLocalizationManager as q, KritzelLicenseManager as r, KritzelCustomElementRendererRegistry as s, KritzelAlignment as t, runMigrations as u, APP_STATE_MIGRATIONS as v, DEFAULT_STROKE_SIZES as w, DEFAULT_FONT_SIZES as x, DEFAULT_SYNC_CONFIG as y, KritzelSelectionGroup as z };
@@ -1,8 +1,8 @@
1
1
  import { p as proxyCustomElement, H, c as createEvent, h, d as Host, t as transformTag } from './p-B43upypT.js';
2
2
  import { K as KritzelDevicesHelper } from './p-jGOpkGDl.js';
3
3
  import { d as defineCustomElement$4 } from './p-CSuU8frA.js';
4
- import { d as defineCustomElement$2, a as defineCustomElement$3 } from './p-BrNsOp2v.js';
5
- import { d as defineCustomElement$1 } from './p-BPsKYMH6.js';
4
+ import { d as defineCustomElement$2, a as defineCustomElement$3 } from './p-CAXR5-S9.js';
5
+ import { d as defineCustomElement$1 } from './p-CBrn5AIB.js';
6
6
 
7
7
  const kritzelSplitButtonCss = () => `:host{position:relative;display:flex;align-items:center;font-family:sans-serif;z-index:1;padding:var(--kritzel-split-button-padding, 4px);background-color:var(--kritzel-split-button-background-color, #ffffff);border-radius:var(--kritzel-split-button-border-radius, 12px);box-shadow:var(--kritzel-split-button-box-shadow, 0 0 3px rgba(0, 0, 0, 0.08));border:var(--kritzel-split-button-border, 1px solid #ebebeb);gap:var(--kritzel-split-button-gap, 4px)}:host(.mobile){--kritzel-split-button-hover-background-color:transparent}button{border:none;background-color:transparent;padding:0;margin:0;font-family:inherit;font-size:inherit;color:var(--kritzel-split-button-color, #000000);-webkit-appearance:none;-moz-appearance:none;appearance:none;cursor:var(--kritzel-global-pointer-cursor, pointer);text-align:center;display:flex;align-items:center;justify-content:center;pointer-events:all;-webkit-tap-highlight-color:transparent}.split-main-button,.split-menu-button{height:auto;display:flex;align-items:center;padding:var(--kritzel-split-button-padding, 8px);background-color:var(--kritzel-split-button-background-color, #ffffff);border-radius:var(--kritzel-split-button-border-radius, 12px);font-size:var(--kritzel-split-button-font-size, 14px)}.split-main-button:hover,.split-menu-button:hover{background-color:var(--kritzel-split-button-hover-background-color, hsl(0, 0%, 0%, 4.3%))}.split-main-button:focus,.split-menu-button:focus{background-color:var(--kritzel-split-button-hover-background-color, hsl(0, 0%, 0%, 4.3%))}.split-main-button{gap:var(--kritzel-split-button-gap, 4px)}.split-menu-button{border-left:none;justify-content:center}.split-divider{width:var(--kritzel-split-button-divider-width, 1px);height:24px;background-color:var(--kritzel-split-button-divider-background-color, hsl(0, 0%, 0%, 4.3%))}:disabled{pointer-events:none;opacity:0.5}`;
8
8
 
@@ -103,7 +103,7 @@ const KritzelSplitButton = /*@__PURE__*/ proxyCustomElement(class KritzelSplitBu
103
103
  this.menuScrollTop = event.target.scrollTop;
104
104
  };
105
105
  render() {
106
- return (h(Host, { key: 'f7f5019b32f4514a4ccf5bd07742658e3d05020a', class: { mobile: this.isTouchDevice } }, h("button", { key: '361007b4281edfe2bf18f28f7c4f19ba1f251b49', class: "split-main-button", tabIndex: 0, onClick: this.handleButtonClick, disabled: this.mainButtonDisabled, "aria-label": "Main action" }, this.buttonIcon && h("kritzel-icon", { key: '17d4fad6cfa070225daa67dfc648d4ac64091e90', name: this.buttonIcon })), h("div", { key: 'c18107b7d557525092c28ff5d7336ebb3648b672', class: "split-divider" }), h("button", { key: 'c7a9a67d832f026fa8e21eff7ea5935cd72862ed', ref: el => (this.splitMenuButtonRef = el), class: "split-menu-button", tabIndex: 0, onClick: this.toggleMenu, disabled: this.menuButtonDisabled, "aria-label": "Open menu" }, h("kritzel-icon", { key: '5b40284c8f04fba80ca606b0af201040efe53880', name: this.dropdownIcon })), h("kritzel-portal", { key: '62bd7f26c020497f2131759d0d1ef9d18e817b37', anchor: this.anchorElement, offsetY: 4, onClose: this.closeMenu }, h("kritzel-menu", { key: 'a1a11a0ae33f9626db3cd56fbb881c613f1ab78c', ref: el => (this.menuRef = el), items: this.items, onItemSelect: this.handleItemSelect, onItemSave: this.handleItemSave, onItemCancel: this.handleItemCancel, onItemToggleChildMenu: this.handleItemToggleChildMenu, onItemCloseChildMenu: this.handleItemCloseChildMenu, onClose: this.closeMenu, onScroll: this.handleScroll }))));
106
+ return (h(Host, { key: '37185b37faa1e703f9457d4f4685c7d8ed40b342', class: { mobile: this.isTouchDevice } }, h("button", { key: 'b97d4df106fea68398116f1c44c6d5cd9f31997c', class: "split-main-button", tabIndex: 0, onClick: this.handleButtonClick, disabled: this.mainButtonDisabled, "aria-label": "Main action" }, this.buttonIcon && h("kritzel-icon", { key: '66dce735d160e23a16727c294f9ccb1bd3cda8c1', name: this.buttonIcon })), h("div", { key: '14ffaf9334090dc10df87d7b8744446be8bb2632', class: "split-divider" }), h("button", { key: '421e23ebb99e7b1ca656c0bc16f602a2a9812264', ref: el => (this.splitMenuButtonRef = el), class: "split-menu-button", tabIndex: 0, onClick: this.toggleMenu, disabled: this.menuButtonDisabled, "aria-label": "Open menu" }, h("kritzel-icon", { key: 'affc13ef766d21030137a7feb44305553845dbfc', name: this.dropdownIcon })), h("kritzel-portal", { key: '326cef4696ebf9986e6c42e18822b90c399b16c2', anchor: this.anchorElement, offsetY: 4, onClose: this.closeMenu }, h("kritzel-menu", { key: 'e0800efbdefc9dce3dc548523ec10e810f3f7f73', ref: el => (this.menuRef = el), items: this.items, onItemSelect: this.handleItemSelect, onItemSave: this.handleItemSave, onItemCancel: this.handleItemCancel, onItemToggleChildMenu: this.handleItemToggleChildMenu, onItemCloseChildMenu: this.handleItemCloseChildMenu, onClose: this.closeMenu, onScroll: this.handleScroll }))));
107
107
  }
108
108
  static get style() { return kritzelSplitButtonCss(); }
109
109
  }, [513, "kritzel-split-button", {
@@ -1,20 +1,20 @@
1
1
  import { p as proxyCustomElement, H, c as createEvent, h, d as Host, t as transformTag } from './p-B43upypT.js';
2
2
  import { K as KritzelDevicesHelper } from './p-jGOpkGDl.js';
3
- import { K as KritzelToolConfigHelper, d as defineCustomElement$3 } from './p-HoO86l1o.js';
3
+ import { K as KritzelToolConfigHelper, d as defineCustomElement$3 } from './p-DOl-95VY.js';
4
4
  import { a as KritzelColorHelper } from './p-7I4Uzjrw.js';
5
- import { d as defineCustomElement$e } from './p-Dt7-I2Xz.js';
6
- import { d as defineCustomElement$d } from './p-B-585egz.js';
5
+ import { d as defineCustomElement$e } from './p-DOTdJ3JQ.js';
6
+ import { d as defineCustomElement$d } from './p-BeSKOETx.js';
7
7
  import { d as defineCustomElement$c } from './p-Df3BwVGy.js';
8
- import { d as defineCustomElement$b } from './p-DVXTPI71.js';
8
+ import { d as defineCustomElement$b } from './p-OUl5CA4Y.js';
9
9
  import { d as defineCustomElement$a } from './p-djJSnjAX.js';
10
- import { d as defineCustomElement$9 } from './p-2WiGyky4.js';
10
+ import { d as defineCustomElement$9 } from './p-BprEDRpA.js';
11
11
  import { d as defineCustomElement$8 } from './p-CSuU8frA.js';
12
12
  import { d as defineCustomElement$7 } from './p-CXpv9Rxe.js';
13
- import { d as defineCustomElement$6 } from './p-CrHvaLRV.js';
13
+ import { d as defineCustomElement$6 } from './p-DnmVD1Mz.js';
14
14
  import { d as defineCustomElement$5 } from './p-BFYtCsZu.js';
15
- import { d as defineCustomElement$4 } from './p-GKmqCI8r.js';
16
- import { d as defineCustomElement$2 } from './p-CaBbajU2.js';
17
- import { d as defineCustomElement$1 } from './p-CzW58DHM.js';
15
+ import { d as defineCustomElement$4 } from './p-DoxFuOy1.js';
16
+ import { d as defineCustomElement$2 } from './p-DkHYY72B.js';
17
+ import { d as defineCustomElement$1 } from './p-DUmLsjKb.js';
18
18
 
19
19
  const kritzelControlsCss = () => `:host{display:flex;flex-direction:column;user-select:none;max-width:100%;z-index:1}:host(.mobile){--kritzel-controls-control-hover-background-color:transparent;--kritzel-controls-control-active-background-color:transparent}.kritzel-controls{display:flex;flex-direction:row;align-items:center;justify-content:flex-start;gap:var(--kritzel-controls-gap, 8px);height:100%;padding:var(--kritzel-controls-padding, 8px);background-color:var(--kritzel-controls-background-color, #ffffff);border-radius:var(--kritzel-controls-border-radius, 16px);box-shadow:var(--kritzel-controls-box-shadow, 0 0 3px rgba(0, 0, 0, 0.08));border:var(--kritzel-controls-border, 1px solid #ebebeb);z-index:1;position:relative;max-width:100%;overflow:hidden}.kritzel-tools-scroll{display:flex;flex-direction:row;align-items:center;gap:var(--kritzel-controls-gap, 8px);overflow-x:auto;overflow-y:hidden;flex:1 1 auto;min-width:0;padding:4px;margin:-4px;scrollbar-width:none;-ms-overflow-style:none}.kritzel-tools-scroll::-webkit-scrollbar{display:none}.scroll-indicator-left,.scroll-indicator-right{position:absolute;top:0;bottom:0;width:32px;pointer-events:none;opacity:0;transition:opacity 0.2s ease-out;z-index:1}.scroll-indicator-left{left:0;background:linear-gradient(to right, var(--kritzel-controls-background-color, #ffffff), transparent);border-radius:var(--kritzel-controls-border-radius, 16px) 0 0 var(--kritzel-controls-border-radius, 16px)}.scroll-indicator-right{right:0;background:linear-gradient(to left, var(--kritzel-controls-background-color, #ffffff), transparent);border-radius:0 var(--kritzel-controls-border-radius, 16px) var(--kritzel-controls-border-radius, 16px) 0}.scroll-indicator-left.visible,.scroll-indicator-right.visible{opacity:1}.kritzel-control{display:flex;justify-content:center;align-items:center;color:var(--kritzel-controls-control-color, #000000);border-radius:var(--kritzel-controls-control-border-radius, 12px);padding:var(--kritzel-controls-control-padding, 8px);border:none;background:none;cursor:var(--kritzel-global-pointer-cursor, pointer);-webkit-tap-highlight-color:transparent;font-weight:bold}.kritzel-control:focus,.kritzel-control:hover{background-color:var(--kritzel-controls-control-hover-background-color, hsl(0, 0%, 0%, 4.3%))}.kritzel-control:active{background-color:var(--kritzel-controls-control-active-background-color, hsl(0, 0%, 0%, 8.6%))}.kritzel-control.selected,.kritzel-control.selected:hover,.kritzel-control.selected:active{background-color:var(--kritzel-controls-control-selected-background-color, #007AFF) !important;color:var(--kritzel-controls-control-selected-color, #ffffff) !important}.kritzel-control.selected:focus{background-color:var(--kritzel-controls-control-selected-background-color, #007bffe3) !important}.kritzel-control-separator{width:1px;height:24px;background-color:var(--kritzel-controls-separator-color, #ebebeb);margin:0 4px}.kritzel-control-split{position:relative;display:flex;align-items:center;border-radius:var(--kritzel-controls-control-border-radius, 12px);color:var(--kritzel-controls-control-color, #000000)}.kritzel-control-split .kritzel-control-main{display:flex;justify-content:center;align-items:center;padding:var(--kritzel-controls-control-padding, 8px);border:none;background:none;cursor:var(--kritzel-global-pointer-cursor, pointer);-webkit-tap-highlight-color:transparent;border-radius:var(--kritzel-controls-control-border-radius, 12px);color:inherit}.kritzel-control-split.selected .kritzel-control-main{border-radius:var(--kritzel-controls-control-border-radius, 12px) 0 0 var(--kritzel-controls-control-border-radius, 12px)}.kritzel-control-split .kritzel-control-dropdown{display:flex;justify-content:center;align-items:center;align-self:stretch;border:none;background:none;cursor:var(--kritzel-global-pointer-cursor, pointer);-webkit-tap-highlight-color:transparent;border-radius:0 var(--kritzel-controls-control-border-radius, 12px) var(--kritzel-controls-control-border-radius, 12px) 0;color:inherit;width:0;padding:0;opacity:0;overflow:hidden;pointer-events:none;transition:width 0.15s ease-out, padding 0.15s ease-out, opacity 0.15s ease-out}.kritzel-control-split .kritzel-control-dropdown.visible{width:auto;padding:0 6px;opacity:1;pointer-events:auto}.kritzel-control-split .kritzel-control-main:focus,.kritzel-control-split .kritzel-control-main:hover,.kritzel-control-split .kritzel-control-dropdown:focus,.kritzel-control-split .kritzel-control-dropdown:hover{background-color:var(--kritzel-controls-control-hover-background-color, hsl(0, 0%, 0%, 4.3%))}.kritzel-control-split .kritzel-control-main:active,.kritzel-control-split .kritzel-control-dropdown:active{background-color:var(--kritzel-controls-control-active-background-color, hsl(0, 0%, 0%, 8.6%))}.kritzel-control-split.selected{background-color:var(--kritzel-controls-control-selected-background-color, #007AFF) !important;color:var(--kritzel-controls-control-selected-color, #ffffff) !important}.kritzel-control-split.selected .kritzel-control-main:hover,.kritzel-control-split.selected .kritzel-control-dropdown:hover{background-color:rgba(255, 255, 255, 0.15)}.kritzel-submenu-content{display:flex;flex-direction:column;gap:var(--kritzel-submenu-gap, 4px);min-width:140px}.kritzel-submenu-item{display:flex;align-items:center;gap:10px;padding:10px 12px;border:none;background:none;cursor:var(--kritzel-global-pointer-cursor, pointer);border-radius:8px;color:var(--kritzel-controls-control-color, #000000);font-size:14px;text-align:left;white-space:nowrap;-webkit-tap-highlight-color:transparent}.kritzel-submenu-item:hover{background-color:var(--kritzel-controls-control-hover-background-color, hsl(0, 0%, 0%, 4.3%))}.kritzel-submenu-item.active{background-color:var(--kritzel-controls-control-selected-background-color, #007AFF);color:var(--kritzel-controls-control-selected-color, #ffffff)}.kritzel-submenu-item.active:hover{background-color:var(--kritzel-controls-control-selected-background-color, #007AFF)}.kritzel-config-container{position:relative;display:flex;justify-content:center;align-items:center;height:40px;box-sizing:border-box;-webkit-tap-highlight-color:transparent;flex-shrink:0;width:0;opacity:0;overflow:hidden;pointer-events:none;margin-left:calc(-1 * var(--kritzel-controls-gap, 8px));transition:width 0.2s ease-out, opacity 0.2s ease-out, margin-left 0.2s ease-out}.kritzel-config-container.visible{width:40px;opacity:1;pointer-events:auto;margin-left:0;overflow:visible}.config-gradient-left{position:absolute;top:0;bottom:0;left:-32px;width:32px;background:linear-gradient(to right, transparent, var(--kritzel-controls-background-color, #ffffff));pointer-events:none;z-index:1;opacity:0;transition:opacity 0.2s ease-out}.config-gradient-left.visible{opacity:1}.kritzel-config{display:flex;justify-content:center;align-items:center;cursor:var(--kritzel-global-pointer-cursor, pointer);border-radius:50%}.color-container{display:flex;justify-content:center;align-items:center;width:32px;height:32px;border-radius:50%;cursor:var(--kritzel-global-pointer-cursor, pointer);border:2px solid transparent;box-sizing:border-box;background-color:var(--kritzel-color-palette-hover-background-color, #ebebeb)}.font-container{display:flex;justify-content:center;align-items:center;width:32px;height:32px;border-radius:50%;cursor:var(--kritzel-global-pointer-cursor, pointer);border:2px solid transparent;box-sizing:border-box;background-color:var(--kritzel-color-palette-hover-background-color, #ebebeb)}.no-config{height:24px;width:24px;border-radius:50%;border:1px dashed gray}kritzel-tooltip{z-index:10001}`;
20
20
 
@@ -256,13 +256,13 @@ const KritzelControls = /*@__PURE__*/ proxyCustomElement(class KritzelControls e
256
256
  // Separate tool controls from config control
257
257
  const toolControls = this.internalControls.filter(c => c.type === 'tool' || c.type === 'separator');
258
258
  const configControl = this.internalControls.find(c => c.type === 'config' && c.name === this.firstConfig?.name);
259
- return (h(Host, { key: '2a7595b72594df3e8ff9a103c3ff7dd70f0a8045', style: { display: this.visible ? '' : 'none' }, class: {
259
+ return (h(Host, { key: '42f84f104e4b008a7c53a5e1ea9290c17ba792d2', style: { display: this.visible ? '' : 'none' }, class: {
260
260
  mobile: this.isTouchDevice,
261
- } }, this.isUtilityPanelVisible && (h("kritzel-utility-panel", { key: '1c2d9f14c53944f291cf49cbcd1bf282ad8a8683', style: {
261
+ } }, this.isUtilityPanelVisible && (h("kritzel-utility-panel", { key: '8f6b3df9db735dfd847da9683db3fbdcc65b08a4', style: {
262
262
  position: 'absolute',
263
263
  bottom: '56px',
264
264
  left: '12px',
265
- }, undoState: this.undoState, terms: this.terms, onUndo: () => this.kritzelEngine?.undo(), onRedo: () => this.kritzelEngine?.redo(), onDelete: () => this.kritzelEngine?.delete() })), h("div", { key: '8ac30e183885bc106033ca163aa7e5927802e67c', class: "kritzel-controls" }, h("div", { key: '74b2808a506e671682aed91107c7c9e27aa4b2c7', class: { 'scroll-indicator-left': true, 'visible': this.canScrollLeft } }), h("div", { key: '3fd693c993d5b11eadd2eec7481214fbc1550301', class: "kritzel-tools-scroll", ref: el => (this.toolsScrollRef = el), onScroll: this.handleToolsScroll }, toolControls.map(control => {
265
+ }, undoState: this.undoState, terms: this.terms, onUndo: () => this.kritzelEngine?.undo(), onRedo: () => this.kritzelEngine?.redo(), onDelete: () => this.kritzelEngine?.delete() })), h("div", { key: '7a314d779882e2b42a39fdb2a52f434ccacff112', class: "kritzel-controls" }, h("div", { key: '23458bc04c2f1a610cff9c5e617d7be2c657bf4f', class: { 'scroll-indicator-left': true, 'visible': this.canScrollLeft } }), h("div", { key: 'b17d817767c92ce7a6edf279759d3f1fb1097911', class: "kritzel-tools-scroll", ref: el => (this.toolsScrollRef = el), onScroll: this.handleToolsScroll }, toolControls.map(control => {
266
266
  // Check if this control has sub-options (split-button)
267
267
  if (control.subOptions?.length) {
268
268
  const selectedSubOption = this.getSelectedSubOption(control);
@@ -292,10 +292,10 @@ const KritzelControls = /*@__PURE__*/ proxyCustomElement(class KritzelControls e
292
292
  'kritzel-control': true,
293
293
  'selected': this.activeControl?.name === control?.name,
294
294
  }, key: control.name, "data-testid": `tool-${control.name}`, onClick: _event => this.handleControlClick?.(control), "aria-label": control.name.charAt(0).toUpperCase() + control.name.slice(1) }, h("kritzel-icon", { name: control.icon })));
295
- })), h("div", { key: '6f16a8332dc6a082f2e6aedbec3e31398f2a8b66', class: { 'scroll-indicator-right': true, 'visible': this.canScrollRight && !(configControl && this.activeControl && hasConfigUI) } }), configControl && this.activeControl && (h("div", { class: {
295
+ })), h("div", { key: '740b52666bf823b7dc504a1072f68b59f94a3773', class: { 'scroll-indicator-right': true, 'visible': this.canScrollRight && !(configControl && this.activeControl && hasConfigUI) } }), configControl && this.activeControl && (h("div", { class: {
296
296
  'kritzel-config-container': true,
297
297
  'visible': hasConfigUI,
298
- }, key: configControl.name }, h("div", { key: '554d743fccfb62d8c368f2a5cdca232ae9842b7f', class: { 'config-gradient-left': true, 'visible': this.needsScrolling } }), h("kritzel-tooltip", { key: 'af97d986d82c961d66c910f7edabd6e597ec59ab', anchorElement: this.host.shadowRoot?.querySelector('.kritzel-config-container'), triggerElement: this.configTriggerRef }, h("kritzel-tool-config", { key: '3721e5463a85881c7e806d69c0a9524f44732978', tool: this.activeControl.tool, theme: this.theme, engine: this.kritzelEngine, terms: this.terms, onToolChange: event => this.handleToolChange?.(event), onDisplayValuesChange: this.handleDisplayValuesChange, style: { width: '100%', height: '100%' } })), h("div", { key: 'c6e3fe4a4a9b781db394073c8f929533487be760', tabIndex: hasConfigUI ? 0 : -1, class: "kritzel-config", "data-testid": "tool-config", ref: el => {
298
+ }, key: configControl.name }, h("div", { key: '7c5697faa2d03931ba9449b58a32e9f06166528e', class: { 'config-gradient-left': true, 'visible': this.needsScrolling } }), h("kritzel-tooltip", { key: '6e9bc7e5cf77778ec1dd2bee1c415344295acc00', anchorElement: this.host.shadowRoot?.querySelector('.kritzel-config-container'), triggerElement: this.configTriggerRef }, h("kritzel-tool-config", { key: 'fbfb910dacd4178aaffca5aa02e4e4422ba1b308', tool: this.activeControl.tool, theme: this.theme, engine: this.kritzelEngine, terms: this.terms, onToolChange: event => this.handleToolChange?.(event), onDisplayValuesChange: this.handleDisplayValuesChange, style: { width: '100%', height: '100%' } })), h("div", { key: '59d11a83e8c9968ba8d50df4275a892b4b75958c', tabIndex: hasConfigUI ? 0 : -1, class: "kritzel-config", "data-testid": "tool-config", ref: el => {
299
299
  if (el)
300
300
  this.configTriggerRef = el;
301
301
  }, onKeyDown: event => {
@@ -304,7 +304,7 @@ const KritzelControls = /*@__PURE__*/ proxyCustomElement(class KritzelControls e
304
304
  }
305
305
  }, style: {
306
306
  cursor: 'pointer',
307
- } }, this.displayValues && (h("div", { key: '9eeb3a9fc29f4848ee9f325d50b4cbfc5bfe5f1c', class: "color-container" }, h("kritzel-color", { key: '1d45edb7ed07a8d12ab55e374ea456b8e95c8d41', value: this.displayValues.color, theme: this.theme, size: 18, style: {
307
+ } }, this.displayValues && (h("div", { key: '0ce5a0d8f51773b6e31feeee785606d637e06b42', class: "color-container" }, h("kritzel-color", { key: '29cc12dd6677b695b14e76e8a1704da78f910698', value: this.displayValues.color, theme: this.theme, size: 18, style: {
308
308
  borderRadius: '50%',
309
309
  border: 'none',
310
310
  } })))))))));
@@ -2,7 +2,7 @@ import { p as proxyCustomElement, H, c as createEvent, h, d as Host, t as transf
2
2
  import { g as getDefaultExportFromCjs } from './p-BFTU3MAI.js';
3
3
  import { d as defineCustomElement$3 } from './p-DX2nriaq.js';
4
4
  import { d as defineCustomElement$2 } from './p-CSuU8frA.js';
5
- import { d as defineCustomElement$1 } from './p-BozrueXV.js';
5
+ import { d as defineCustomElement$1 } from './p-Dvn6ad4a.js';
6
6
 
7
7
  var browser = {};
8
8
 
@@ -3204,9 +3204,9 @@ const KritzelShareDialog = /*@__PURE__*/ proxyCustomElement(class KritzelShareDi
3204
3204
  this.dialogClosed.emit();
3205
3205
  };
3206
3206
  render() {
3207
- return (h(Host, { key: 'f6028ad618f04e3be65c816f4b53c4ccaa93fc71' }, h("kritzel-dialog", { key: '7dabab65955f287650de4ba484e37f4ccdd7c57e', dialogTitle: this.terms['share.dialogTitle'] ?? 'Share Workspace', size: "small", isOpen: this.isDialogOpen, onDialogClose: this.closeDialog, contained: true }, h("div", { key: '321e2b17048dea20528c0f34f39a462548c64689', class: "share-content" }, h("div", { key: 'b31bbe2f686f5fe2fdc03189ffb98082683fff63', class: "share-section" }, h("div", { key: '2c864e00aa4c2da0a7f8ee6c83f149e6e93610a5', class: "share-row" }, h("div", { key: 'cbee03ac7ec9ee82f22c77d3681d4a540a0780a3', class: "share-label-group" }, h("label", { key: '3be7c8dc2ac2f7dbfe6458a902b14a887895fdc3', class: "share-label" }, this.terms['share.linkSharing.label'] ?? 'Link sharing'), h("p", { key: 'c7401bc76fdccbafc6c7c4e37380fc75f35b3a99', class: "share-description" }, this.internalIsPublic
3207
+ return (h(Host, { key: '13e718f70f46a0c71e70d7330e0bcf655ebb60a3' }, h("kritzel-dialog", { key: 'd96e31d7259cc5c5461d94395ceecfc7491f403f', dialogTitle: this.terms['share.dialogTitle'] ?? 'Share Workspace', size: "small", isOpen: this.isDialogOpen, onDialogClose: this.closeDialog, contained: true }, h("div", { key: '9a82641540675cb645e5520bfb1624e77b5eb382', class: "share-content" }, h("div", { key: '5eed405aaf5e39f71083e84d2db0c4177722915b', class: "share-section" }, h("div", { key: '2bb736f60448dcae354d2f7931c277fce9fe7964', class: "share-row" }, h("div", { key: 'f2b22b2ce9e3331b0bf142bcb280e3dae064f34d', class: "share-label-group" }, h("label", { key: '58daf90a8b4de173deaba2e93c31791d78c17214', class: "share-label" }, this.terms['share.linkSharing.label'] ?? 'Link sharing'), h("p", { key: 'ba5f9ee772ab44fd4cc9a3066894ee5da10c56d8', class: "share-description" }, this.internalIsPublic
3208
3208
  ? (this.terms['share.linkSharing.enabledDescription'] ?? 'Anyone with the link can access this workspace.')
3209
- : (this.terms['share.linkSharing.disabledDescription'] ?? 'Link sharing is disabled. Only you can access this workspace.'))), h("kritzel-slide-toggle", { key: '52ae14da0d79797e9ad73f1ffbac003fd1395f47', checked: this.internalIsPublic, onCheckedChange: this.handleToggleChange, label: this.terms['share.linkSharing.toggleLabel'] ?? 'Enable link sharing' }))), this.internalIsPublic && (h("div", { key: 'bd44618680db14d7d95f0c1bbc4441a103e9f15a', class: "share-section" }, h("div", { key: '659cd6b2e2e719d76f692a8dc5a8c0855e5d246d', class: "share-url-container" }, h("input", { key: '76be432ecaad753cb7043aad912d8aa1770afb61', type: "text", class: "share-url-input", value: this.getShareUrl(), readOnly: true, onClick: (e) => e.target.select() }), h("button", { key: 'ef75a04964fb481fae2f6e924497eb2adedc100d', class: { 'copy-button': true, 'copy-success': this.copySuccess }, onClick: this.handleCopyUrl, title: this.copySuccess ? (this.terms['share.copyLink.copied'] ?? 'Copied!') : (this.terms['share.copyLink.title'] ?? 'Copy link') }, h("kritzel-icon", { key: '06bbdc32d4348ca6d75dbbe11ba74d94e1c86882', name: this.copySuccess ? 'check' : 'copy', size: 18 }))), this.qrCodeDataUrl && (h("div", { key: '9246e86b26a9794738a29e6a6bfe6c4812339449', class: "share-qr-container" }, h("img", { key: '90e18eee230c23e0bfd773c9b8a6967803ae10dc', class: "share-qr-image", src: this.qrCodeDataUrl, alt: "QR code for share link" })))))))));
3209
+ : (this.terms['share.linkSharing.disabledDescription'] ?? 'Link sharing is disabled. Only you can access this workspace.'))), h("kritzel-slide-toggle", { key: '7f70df4db90f087d8d7a7efe98012f7bf897975d', checked: this.internalIsPublic, onCheckedChange: this.handleToggleChange, label: this.terms['share.linkSharing.toggleLabel'] ?? 'Enable link sharing' }))), this.internalIsPublic && (h("div", { key: '999fe3550e149b7e3f0ebf28f312fa5f676dd945', class: "share-section" }, h("div", { key: 'ff623a78f50b8a5e27a978e05e2ee2ba4ac1991b', class: "share-url-container" }, h("input", { key: '5c3b5c3e82366ebe4f4e7a73c6afa42dbbf39a20', type: "text", class: "share-url-input", value: this.getShareUrl(), readOnly: true, onClick: (e) => e.target.select() }), h("button", { key: '60ac0315841649722b32d098c787f2a0deeec979', class: { 'copy-button': true, 'copy-success': this.copySuccess }, onClick: this.handleCopyUrl, title: this.copySuccess ? (this.terms['share.copyLink.copied'] ?? 'Copied!') : (this.terms['share.copyLink.title'] ?? 'Copy link') }, h("kritzel-icon", { key: 'eacbd3b75c554d3c62a098ddd45b6723f59521b5', name: this.copySuccess ? 'check' : 'copy', size: 18 }))), this.qrCodeDataUrl && (h("div", { key: 'fc24d6a9673b5b16a35f905023e632a314cef4ce', class: "share-qr-container" }, h("img", { key: '3669f9138336cd4cf51d1e3de5caedaddac518e8', class: "share-qr-image", src: this.qrCodeDataUrl, alt: "QR code for share link" })))))))));
3210
3210
  }
3211
3211
  static get watchers() { return {
3212
3212
  "isPublic": [{
@@ -2,9 +2,9 @@ import { p as proxyCustomElement, H, c as createEvent, h, d as Host, t as transf
2
2
  import { K as KritzelWorkspace } from './p-DAwPPDMS.js';
3
3
  import { O as ObjectHelper } from './p-DPONTran.js';
4
4
  import { d as defineCustomElement$5 } from './p-CSuU8frA.js';
5
- import { d as defineCustomElement$3, a as defineCustomElement$4 } from './p-BrNsOp2v.js';
6
- import { d as defineCustomElement$2 } from './p-BPsKYMH6.js';
7
- import { d as defineCustomElement$1 } from './p-C98Eb3_R.js';
5
+ import { d as defineCustomElement$3, a as defineCustomElement$4 } from './p-CAXR5-S9.js';
6
+ import { d as defineCustomElement$2 } from './p-CBrn5AIB.js';
7
+ import { d as defineCustomElement$1 } from './p-Ce1j1-Hg.js';
8
8
 
9
9
  const kritzelWorkspaceManagerCss = () => `:host{display:flex;flex-direction:column;z-index:1}.manager{opacity:0;pointer-events:none;transition:opacity 0.2s ease-out}.manager.visible{opacity:1;pointer-events:auto}`;
10
10
 
@@ -1,5 +1,5 @@
1
1
  import { p as proxyCustomElement, H, h, d as Host, t as transformTag } from './p-B43upypT.js';
2
- import { d as defineCustomElement$1 } from './p-4SPnZZkH.js';
2
+ import { d as defineCustomElement$1 } from './p-DN9p3G9K.js';
3
3
 
4
4
  const kritzelCurrentUserCss = () => `:host{display:inline-flex;align-items:center;justify-content:center;-webkit-tap-highlight-color:transparent}kritzel-avatar{cursor:var(--kritzel-global-pointer-cursor, pointer);border-radius:50%}`;
5
5
 
@@ -22,7 +22,7 @@ const KritzelCurrentUser = /*@__PURE__*/ proxyCustomElement(class KritzelCurrent
22
22
  /** Resolved localized strings keyed by term key, supplied by the editor. */
23
23
  terms = {};
24
24
  render() {
25
- return (h(Host, { key: '19551eb12507f1384aedf3ca4ce5212eca509c24' }, h("kritzel-avatar", { key: 'e39405e8e6c2e77a8acf5f286fa3890e28e8ab17', user: this.user, size: this.avatarSize })));
25
+ return (h(Host, { key: '30f2cedeefdef5817fcced6b84e74b53beba76ec' }, h("kritzel-avatar", { key: '41dc69bfbc13471fc686bb52e269dc98d2bfa3a8', user: this.user, size: this.avatarSize })));
26
26
  }
27
27
  static get style() { return kritzelCurrentUserCss(); }
28
28
  }, [513, "kritzel-current-user", {
@@ -1,6 +1,6 @@
1
1
  import { p as proxyCustomElement, H, c as createEvent, h, d as Host, t as transformTag } from './p-B43upypT.js';
2
- import { d as defineCustomElement$3 } from './p-4SPnZZkH.js';
3
- import { d as defineCustomElement$2 } from './p-BoN700-O.js';
2
+ import { d as defineCustomElement$3 } from './p-DN9p3G9K.js';
3
+ import { d as defineCustomElement$2 } from './p-Ba0c-tu2.js';
4
4
  import { d as defineCustomElement$1 } from './p-DX2nriaq.js';
5
5
 
6
6
  const kritzelCurrentUserDialogCss = () => `:host{display:contents}kritzel-dialog{--kritzel-dialog-width-small:380px}.user-info{display:flex;flex-direction:column;align-items:center;gap:8px;padding:8px 0}.user-name{font-size:18px;font-weight:600;color:var(--kritzel-current-user-dialog-name-color, #333333);text-align:center;margin-top:8px}.user-email{font-size:14px;color:var(--kritzel-current-user-dialog-email-color, #666666);text-align:center}.logout-button{margin-top:16px;width:100%;--kritzel-button-width:100%;--kritzel-button-primary-background-color:var(--kritzel-current-user-dialog-logout-button-background-color, #007AFF);--kritzel-button-primary-hover-background-color:var(--kritzel-current-user-dialog-logout-button-hover-background-color, #006ae6);--kritzel-button-primary-active-background-color:var(--kritzel-current-user-dialog-logout-button-active-background-color, #005bbf);--kritzel-button-primary-color:var(--kritzel-current-user-dialog-logout-button-color, #ffffff)}`;
@@ -43,7 +43,7 @@ const KritzelCurrentUserDialog = /*@__PURE__*/ proxyCustomElement(class KritzelC
43
43
  }
44
44
  render() {
45
45
  const displayName = this.getDisplayName();
46
- return (h(Host, { key: '8f8e63ac6f789f2d0ee43b8b7439634411a91ac9' }, h("kritzel-dialog", { key: '4022a7251881f669f290e0a8beb9a39ef6242b19', dialogTitle: this.terms['currentUser.dialogTitle'] ?? 'Account', isOpen: this.isDialogOpen, onDialogClose: this.closeDialog, size: "small", contained: true }, h("div", { key: '4671f884c121cfaefdd8a47bd52b30acc2d7b345', class: "user-info" }, h("kritzel-avatar", { key: 'a1847b4b67302f3b7179e4e2b751f7f2106b76d4', user: this.user, size: 80 }), displayName && h("div", { key: 'b3d09b4c99d76014a2e36260edce52c39f1081e1', class: "user-name" }, displayName), this.user?.email && h("div", { key: 'a76ce19cbd24ad536b022264dab6a83f4d1b36c2', class: "user-email" }, this.user.email), h("kritzel-button", { key: 'f125164a9d9362eedfbfff4fc2629f7ec055fc14', class: "logout-button", variant: "primary", onButtonClick: this.handleLogout }, this.terms['menu.logout'] ?? 'Logout')))));
46
+ return (h(Host, { key: '33baea01a828422f2bba5c2fba82dd82e5c5b32d' }, h("kritzel-dialog", { key: '5271e1eb5d36b74f8487c040e70424c26f7019f8', dialogTitle: this.terms['currentUser.dialogTitle'] ?? 'Account', isOpen: this.isDialogOpen, onDialogClose: this.closeDialog, size: "small", contained: true }, h("div", { key: '901697b9439eb8449f2f5c8e044c194f176633b1', class: "user-info" }, h("kritzel-avatar", { key: '76a17b9a2e4442b36b89747a5f5f168d2c59e7a1', user: this.user, size: 80 }), displayName && h("div", { key: '6aaedb1d2d8ea65de2460c15017d13b4e096223d', class: "user-name" }, displayName), this.user?.email && h("div", { key: '3cb78d0007087a18f798849f244399e5d6137e3b', class: "user-email" }, this.user.email), h("kritzel-button", { key: '67d416a1ac1be41cd6b658f79901cea29a287eb7', class: "logout-button", variant: "primary", onButtonClick: this.handleLogout }, this.terms['menu.logout'] ?? 'Logout')))));
47
47
  }
48
48
  static get style() { return kritzelCurrentUserDialogCss(); }
49
49
  }, [513, "kritzel-current-user-dialog", {
@@ -1,5 +1,5 @@
1
1
  import { p as proxyCustomElement, t as transformTag, H, h, d as Host } from './p-B43upypT.js';
2
- import { d as defineCustomElement$1 } from './p-4SPnZZkH.js';
2
+ import { d as defineCustomElement$1 } from './p-DN9p3G9K.js';
3
3
 
4
4
  const kritzelActiveUsersCss = () => `:host{display:inline-flex;align-items:center}.avatars{display:flex;align-items:center}.avatar-wrapper{position:relative;transition:margin-left 200ms ease}.avatar-wrapper kritzel-avatar{border-radius:50%;box-shadow:0 0 0 2px var(--kritzel-active-users-avatar-border-color, #ffffff)}.avatars:hover .avatar-wrapper{margin-left:-6px !important}.avatar-tooltip{position:absolute;top:100%;left:50%;transform:translateX(-50%);margin-top:12px;padding:4px 8px;background-color:var(--kritzel-active-users-tooltip-background, #333333);color:var(--kritzel-active-users-tooltip-color, #ffffff);font-family:sans-serif;font-size:12px;font-weight:500;border-radius:4px;white-space:nowrap;width:max-content;pointer-events:none;opacity:0;transition:opacity 150ms ease}.avatar-wrapper:hover .avatar-tooltip,.overflow-count:hover .avatar-tooltip{opacity:1}.overflow-count{position:relative;margin-left:8px;font-family:sans-serif;font-size:var(--kritzel-active-users-overflow-font-size, 14px);font-weight:500;color:var(--kritzel-active-users-overflow-color, #666666);white-space:nowrap;cursor:default}.overflow-count .avatar-tooltip{white-space:nowrap;text-align:left;margin-top:20px}`;
5
5
 
@@ -25,7 +25,7 @@ const KritzelWatermark = /*@__PURE__*/ proxyCustomElement(class KritzelWatermark
25
25
  label;
26
26
  render() {
27
27
  const label = this.label ?? this.core.localizationManager.translate('watermark.poweredBy');
28
- return (h(Host, { key: 'ae00d98f16912afcb7a90d47a9fc4d55fc7468f0' }, h("a", { key: '8781f94c9efe44b0e7a7a8c20a119160cb9feb8e', class: "watermark-link", href: KRITZEL_WEBSITE_URL, target: "_blank", rel: "noopener noreferrer", part: "watermark", onPointerDown: (ev) => ev.stopPropagation(), onPointerUp: (ev) => ev.stopPropagation() }, label)));
28
+ return (h(Host, { key: '297a488f26fd8637da8d00b98af85cfeda5b0992' }, h("a", { key: '6e3be65773dfda06e9b7ae611cfbb5ff09ba1f91', class: "watermark-link", href: KRITZEL_WEBSITE_URL, target: "_blank", rel: "noopener noreferrer", part: "watermark", onPointerDown: (ev) => ev.stopPropagation(), onPointerUp: (ev) => ev.stopPropagation() }, label)));
29
29
  }
30
30
  static get style() { return kritzelWatermarkCss(); }
31
31
  }, [513, "kritzel-watermark", {
@@ -91,16 +91,16 @@ const KritzelAvatar = /*@__PURE__*/ proxyCustomElement(class KritzelAvatar exten
91
91
  height: `${this.size}px`,
92
92
  fontSize: `${Math.round(this.size * 0.4)}px`,
93
93
  };
94
- return (h(Host, { key: '90ce966bb2a374e68c544906c8c746df6cc01038', style: containerStyles, class: {
94
+ return (h(Host, { key: 'f199b56955b749b868ad8e7940ef3114f1109c37', style: containerStyles, class: {
95
95
  'has-image': !!showImage,
96
96
  'has-initials': !!showInitials,
97
97
  'has-default': !!showDefaultIcon,
98
- }, role: "img", "aria-label": this.getDisplayName() || 'User avatar' }, showImage && (h("img", { key: '6799f4ad45c7d40ebaf640f191171ed6a5f14ae9', src: imageUrl, alt: "", class: "avatar-image", ref: (el) => {
98
+ }, role: "img", "aria-label": this.getDisplayName() || 'User avatar' }, showImage && (h("img", { key: '621a58cc965cf6d037f8515e1263bd5bf4098ab0', src: imageUrl, alt: "", class: "avatar-image", ref: (el) => {
99
99
  if (el) {
100
100
  el.referrerPolicy = 'no-referrer';
101
101
  el.crossOrigin = 'anonymous';
102
102
  }
103
- }, onError: this.handleImageError })), showInitials && (h("span", { key: '98cdcda64b900994b61a03179be9f2af17c489e8', class: "avatar-initials", style: { backgroundColor: this.getBackgroundColor() } }, initials)), showDefaultIcon && (h("span", { key: '64e6a6ee67017c927dce0b51810a5bb02fc0d6d1', class: "avatar-default" }, h("svg", { key: '42f99637a3c23aaf10fa7c99753347ede1d518c0', viewBox: "0 0 24 24", fill: "currentColor" }, h("path", { key: '28b52a68b36e98b0e14891fd225457be65f1bb46', d: "M12 12c2.21 0 4-1.79 4-4s-1.79-4-4-4-4 1.79-4 4 1.79 4 4 4zm0 2c-2.67 0-8 1.34-8 4v2h16v-2c0-2.66-5.33-4-8-4z" }))))));
103
+ }, onError: this.handleImageError })), showInitials && (h("span", { key: '28ff2e8b191c2d476c0f40dd57a2c8ec330ba104', class: "avatar-initials", style: { backgroundColor: this.getBackgroundColor() } }, initials)), showDefaultIcon && (h("span", { key: 'd2ef56b2fca2a609b5b99bb8d7e8747308ab9699', class: "avatar-default" }, h("svg", { key: '1c1d6e6e306a9938f559016eeb77a67aae42f536', viewBox: "0 0 24 24", fill: "currentColor" }, h("path", { key: '2c6af53101c20e137756d1194a3bac04c931066d', d: "M12 12c2.21 0 4-1.79 4-4s-1.79-4-4-4-4 1.79-4 4 1.79 4 4 4zm0 2c-2.67 0-8 1.34-8 4v2h16v-2c0-2.66-5.33-4-8-4z" }))))));
104
104
  }
105
105
  static get watchers() { return {
106
106
  "user": [{
@@ -48,13 +48,13 @@ const KritzelColorComponent = /*@__PURE__*/ proxyCustomElement(class KritzelColo
48
48
  render() {
49
49
  const resolvedColor = this.resolveColor();
50
50
  const isColorVeryLight = this.isLightColor(resolvedColor);
51
- return (h(Host, { key: 'e797bfa6a2aed82d1913ec2f02f8b25a063564e5' }, h("div", { key: '5b62fcdbb2985b90fe0d7c7b65b507ec1c55e240', class: "checkerboard-bg", style: {
51
+ return (h(Host, { key: '17b5c44e1defe8f3fb41632391be093a12bb899b' }, h("div", { key: '545f4c4fd62dea22a4a5f36108a51d30c57f2652', class: "checkerboard-bg", style: {
52
52
  width: `${this.size}px`,
53
53
  height: `${this.size}px`,
54
54
  borderRadius: '50%',
55
55
  display: 'inline-block',
56
56
  position: 'relative',
57
- } }, h("div", { key: '2d62717ebf81be93219ebda7071c0ba992d7441a', class: {
57
+ } }, h("div", { key: 'bbcb68f6e5f00d9a33b316d52ac86e49911e463c', class: {
58
58
  'color-circle': true,
59
59
  'white': isColorVeryLight,
60
60
  }, style: {