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.
- package/dist/cjs/index-Xav9JFHg.js +2 -2
- package/dist/cjs/index.cjs.js +3 -42
- package/dist/cjs/{kritzel-active-users_47.cjs.entry.js → kritzel-active-users_46.cjs.entry.js} +119 -191
- package/dist/cjs/loader.cjs.js +1 -1
- package/dist/cjs/{schema.constants-CjN-B633.js → schema.constants-CcvqL5nJ.js} +41 -0
- package/dist/cjs/stencil.cjs.js +1 -1
- package/dist/collection/classes/core/core.class.js +0 -4
- package/dist/collection/classes/structures/object-map.structure.js +0 -65
- package/dist/collection/collection-manifest.json +0 -1
- package/dist/collection/components/core/kritzel-editor/kritzel-editor.css +4 -4
- package/dist/collection/components/core/kritzel-editor/kritzel-editor.js +58 -77
- package/dist/collection/components/core/kritzel-engine/kritzel-engine.js +16 -72
- package/dist/collection/components/core/kritzel-watermark/kritzel-watermark.js +1 -1
- package/dist/collection/components/shared/kritzel-avatar/kritzel-avatar.js +3 -3
- package/dist/collection/components/shared/kritzel-button/kritzel-button.js +2 -2
- package/dist/collection/components/shared/kritzel-color/kritzel-color.js +2 -2
- package/dist/collection/components/shared/kritzel-color-palette/kritzel-color-palette.js +1 -1
- package/dist/collection/components/shared/kritzel-font/kritzel-font.js +1 -1
- package/dist/collection/components/shared/kritzel-font-size/kritzel-font-size.js +1 -1
- package/dist/collection/components/shared/kritzel-input/kritzel-input.js +1 -1
- package/dist/collection/components/shared/kritzel-master-detail/kritzel-master-detail.js +3 -3
- package/dist/collection/components/shared/kritzel-menu/kritzel-menu.js +1 -1
- package/dist/collection/components/shared/kritzel-menu-item/kritzel-menu-item.js +2 -2
- package/dist/collection/components/shared/kritzel-numeric-input/kritzel-numeric-input.js +1 -1
- package/dist/collection/components/shared/kritzel-opacity-slider/kritzel-opacity-slider.js +1 -1
- package/dist/collection/components/shared/kritzel-portal/kritzel-portal.js +1 -1
- package/dist/collection/components/shared/kritzel-slide-toggle/kritzel-slide-toggle.js +1 -1
- package/dist/collection/components/shared/kritzel-split-button/kritzel-split-button.js +1 -1
- package/dist/collection/components/shared/kritzel-stroke-size/kritzel-stroke-size.js +1 -1
- package/dist/collection/components/shared/kritzel-tooltip/kritzel-tooltip.js +2 -2
- package/dist/collection/components/ui/kritzel-back-to-content/kritzel-back-to-content.js +1 -1
- package/dist/collection/components/ui/kritzel-controls/kritzel-controls.js +6 -6
- package/dist/collection/components/ui/kritzel-current-user/kritzel-current-user.js +1 -1
- package/dist/collection/components/ui/kritzel-current-user-dialog/kritzel-current-user-dialog.js +1 -1
- package/dist/collection/components/ui/kritzel-export/kritzel-export.js +1 -1
- package/dist/collection/components/ui/kritzel-loading-overlay/kritzel-loading-overlay.css +13 -9
- package/dist/collection/components/ui/kritzel-loading-overlay/kritzel-loading-overlay.js +1 -1
- package/dist/collection/components/ui/kritzel-login-dialog/kritzel-login-dialog.js +1 -1
- package/dist/collection/components/ui/kritzel-more-menu/kritzel-more-menu.js +1 -1
- package/dist/collection/components/ui/kritzel-settings/kritzel-settings.js +1 -1
- package/dist/collection/components/ui/kritzel-share-dialog/kritzel-share-dialog.js +2 -2
- package/dist/collection/components/ui/kritzel-utility-panel/kritzel-utility-panel.js +1 -1
- package/dist/collection/components/ui/kritzel-zoom-panel/kritzel-zoom-panel.js +1 -1
- package/dist/collection/configs/default-sync.config.js +2 -1
- package/dist/collection/constants/version.js +1 -1
- package/dist/components/index.d.ts +0 -2
- package/dist/components/index.js +2 -43
- package/dist/components/kritzel-active-users.js +1 -1
- package/dist/components/kritzel-avatar.js +1 -1
- package/dist/components/kritzel-back-to-content.js +1 -1
- package/dist/components/kritzel-button.js +1 -1
- package/dist/components/kritzel-color-palette.js +1 -1
- package/dist/components/kritzel-color.js +1 -1
- package/dist/components/kritzel-controls.js +1 -1
- package/dist/components/kritzel-current-user-dialog.js +1 -1
- package/dist/components/kritzel-current-user.js +1 -1
- package/dist/components/kritzel-editor.js +140 -113
- package/dist/components/kritzel-engine.js +1 -1
- package/dist/components/kritzel-export.js +1 -1
- package/dist/components/kritzel-font-size.js +1 -1
- package/dist/components/kritzel-font.js +1 -1
- package/dist/components/kritzel-input.js +1 -1
- package/dist/components/kritzel-loading-overlay.js +1 -1
- package/dist/components/kritzel-login-dialog.js +1 -1
- package/dist/components/kritzel-master-detail.js +1 -1
- package/dist/components/kritzel-menu-item.js +1 -1
- package/dist/components/kritzel-menu.js +1 -1
- package/dist/components/kritzel-more-menu.js +1 -1
- package/dist/components/kritzel-numeric-input.js +1 -1
- package/dist/components/kritzel-opacity-slider.js +1 -1
- package/dist/components/kritzel-portal.js +1 -1
- package/dist/components/kritzel-settings.js +1 -1
- package/dist/components/kritzel-share-dialog.js +1 -1
- package/dist/components/kritzel-slide-toggle.js +1 -1
- package/dist/components/kritzel-split-button.js +1 -1
- package/dist/components/kritzel-stroke-size.js +1 -1
- package/dist/components/kritzel-tool-config.js +1 -1
- package/dist/components/kritzel-tooltip.js +1 -1
- package/dist/components/kritzel-utility-panel.js +1 -1
- package/dist/components/kritzel-watermark.js +1 -1
- package/dist/components/kritzel-workspace-manager.js +1 -1
- package/dist/components/kritzel-zoom-panel.js +1 -1
- package/dist/components/p-4uoSa0Xl.js +43 -0
- package/dist/components/{p-fL9rl200.js → p-B38_9BJg.js} +1 -1
- package/dist/components/{p-eZXIu4yK.js → p-BPzdPKWE.js} +3 -3
- package/dist/components/{p-0fhjWRmT.js → p-BTo2cQZ9.js} +5 -5
- package/dist/components/{p-BoN700-O.js → p-Ba0c-tu2.js} +2 -2
- package/dist/components/{p-B-585egz.js → p-BeSKOETx.js} +2 -2
- package/dist/components/{p-2WiGyky4.js → p-BprEDRpA.js} +2 -2
- package/dist/components/{p-B5SWPDuq.js → p-C0FEC_gS.js} +1 -1
- package/dist/components/{p-BrNsOp2v.js → p-CAXR5-S9.js} +4 -4
- package/dist/components/{p-BPsKYMH6.js → p-CBrn5AIB.js} +1 -1
- package/dist/components/{p-gJcH-huF.js → p-CYwoBiqy.js} +57 -112
- package/dist/components/{p-C98Eb3_R.js → p-Ce1j1-Hg.js} +3 -3
- package/dist/components/{p-DDTMGbtA.js → p-CeffYwAK.js} +15 -15
- package/dist/components/{p-CwZ3KKFq.js → p-ChPs27Fd.js} +3 -3
- package/dist/components/{p-D1rjfWgJ.js → p-CoXN583u.js} +3 -3
- package/dist/components/{p-DwMqCX2P.js → p-CucCT7Qn.js} +2 -2
- package/dist/components/{p-vqEUQ-4Q.js → p-D0Ed8epW.js} +3 -3
- package/dist/components/{p-DBqoPgev.js → p-DFMZEarE.js} +1 -1
- package/dist/components/{p-DtnMdWWB.js → p-DK0anxtL.js} +1 -1
- package/dist/components/{p-4SPnZZkH.js → p-DN9p3G9K.js} +3 -3
- package/dist/components/{p-Dt7-I2Xz.js → p-DOTdJ3JQ.js} +2 -2
- package/dist/components/{p-HoO86l1o.js → p-DOl-95VY.js} +6 -6
- package/dist/components/{p-DKGg-76-.js → p-DTB3ykgO.js} +1 -1
- package/dist/components/{p-CzW58DHM.js → p-DUmLsjKb.js} +1 -1
- package/dist/components/{p-Czhdc844.js → p-D_cyY7Nd.js} +1 -1
- package/dist/components/{p-CF8pLc07.js → p-DhabvHJM.js} +3 -3
- package/dist/components/{p-CaBbajU2.js → p-DkHYY72B.js} +2 -2
- package/dist/components/{p-CrHvaLRV.js → p-DnmVD1Mz.js} +1 -1
- package/dist/components/{p-GKmqCI8r.js → p-DoxFuOy1.js} +2 -2
- package/dist/components/{p-dsxHDlQ3.js → p-Dpm75DfV.js} +2 -2
- package/dist/components/{p-BozrueXV.js → p-Dvn6ad4a.js} +1 -1
- package/dist/components/{p-PjPPCHVL.js → p-NOWtUeeQ.js} +1 -1
- package/dist/components/{p-DVXTPI71.js → p-OUl5CA4Y.js} +1 -1
- package/dist/esm/index-Dhio9uis.js +2 -2
- package/dist/esm/index.js +4 -43
- package/dist/esm/{kritzel-active-users_47.entry.js → kritzel-active-users_46.entry.js} +120 -191
- package/dist/esm/loader.js +1 -1
- package/dist/esm/{schema.constants-DfvqHmxc.js → schema.constants-De_S50eB.js} +41 -1
- package/dist/esm/stencil.js +1 -1
- package/dist/stencil/index.esm.js +4 -43
- package/dist/stencil/{p-DfvqHmxc.js → p-De_S50eB.js} +41 -1
- package/dist/stencil/{p-dc5783ee.entry.js → p-f91efb01.entry.js} +120 -191
- package/dist/stencil/stencil.esm.js +1 -1
- package/dist/types/classes/structures/object-map.structure.d.ts +0 -14
- package/dist/types/components/core/kritzel-editor/kritzel-editor.d.ts +8 -6
- package/dist/types/components/core/kritzel-engine/kritzel-engine.d.ts +3 -10
- package/dist/types/components.d.ts +5 -80
- package/dist/types/constants/version.d.ts +1 -1
- package/package.json +1 -1
- package/dist/collection/components/shared/kritzel-sync-indicator/kritzel-sync-indicator.css +0 -50
- package/dist/collection/components/shared/kritzel-sync-indicator/kritzel-sync-indicator.js +0 -66
- package/dist/components/kritzel-sync-indicator.d.ts +0 -11
- package/dist/components/kritzel-sync-indicator.js +0 -6
- package/dist/components/p-CAoN_STZ.js +0 -39
- package/dist/components/p-DB58Oa5V.js +0 -43
- 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-
|
|
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
|
|
48978
|
-
|
|
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
|
-
|
|
50576
|
-
this.core.store.state.isLoading
|
|
50577
|
-
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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,
|
|
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-
|
|
5
|
-
import { d as defineCustomElement$1 } from './p-
|
|
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: '
|
|
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-
|
|
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-
|
|
6
|
-
import { d as defineCustomElement$d } from './p-
|
|
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-
|
|
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-
|
|
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-
|
|
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-
|
|
16
|
-
import { d as defineCustomElement$2 } from './p-
|
|
17
|
-
import { d as defineCustomElement$1 } from './p-
|
|
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: '
|
|
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: '
|
|
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: '
|
|
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: '
|
|
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: '
|
|
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: '
|
|
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-
|
|
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: '
|
|
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: '
|
|
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-
|
|
6
|
-
import { d as defineCustomElement$2 } from './p-
|
|
7
|
-
import { d as defineCustomElement$1 } from './p-
|
|
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-
|
|
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: '
|
|
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-
|
|
3
|
-
import { d as defineCustomElement$2 } from './p-
|
|
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: '
|
|
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-
|
|
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: '
|
|
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: '
|
|
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: '
|
|
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: '
|
|
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: '
|
|
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: '
|
|
57
|
+
} }, h("div", { key: 'bbcb68f6e5f00d9a33b316d52ac86e49911e463c', class: {
|
|
58
58
|
'color-circle': true,
|
|
59
59
|
'white': isColorVeryLight,
|
|
60
60
|
}, style: {
|