kritzel-stencil 0.3.22 → 0.3.23

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 (104) hide show
  1. package/dist/cjs/index.cjs.js +3 -1
  2. package/dist/cjs/kritzel-active-users_45.cjs.entry.js +507 -288
  3. package/dist/cjs/{schema.constants-IBG5VW_J.js → schema.constants-Lr_zNkox.js} +713 -47
  4. package/dist/collection/classes/core/core.class.js +83 -5
  5. package/dist/collection/classes/core/store.class.js +9 -0
  6. package/dist/collection/classes/handlers/key.handler.js +1 -1
  7. package/dist/collection/classes/handlers/selection.handler.js +13 -9
  8. package/dist/collection/classes/objects/base-object.class.js +20 -8
  9. package/dist/collection/classes/objects/custom-element.class.js +330 -8
  10. package/dist/collection/classes/objects/image.class.js +0 -1
  11. package/dist/collection/classes/objects/selection-group.class.js +12 -0
  12. package/dist/collection/classes/providers/assets/asset-resolver.class.js +24 -14
  13. package/dist/collection/classes/providers/assets/indexeddb-asset-provider.class.js +0 -8
  14. package/dist/collection/classes/registries/custom-element-renderer.registry.js +52 -0
  15. package/dist/collection/classes/structures/app-state-map.structure.js +17 -3
  16. package/dist/collection/classes/structures/object-map.structure.js +17 -3
  17. package/dist/collection/classes/tools/selection-tool.class.js +34 -6
  18. package/dist/collection/components/core/kritzel-editor/kritzel-editor.js +9 -8
  19. package/dist/collection/components/core/kritzel-engine/kritzel-engine.js +211 -78
  20. package/dist/collection/components/ui/kritzel-settings/kritzel-settings.js +2 -1
  21. package/dist/collection/configs/default-engine-config.js +3 -2
  22. package/dist/collection/constants/version.js +1 -1
  23. package/dist/collection/helpers/html.helper.js +52 -0
  24. package/dist/collection/helpers/object.helper.js +3 -0
  25. package/dist/collection/helpers/svg-export.helper.js +35 -0
  26. package/dist/collection/helpers/wheel.helper.js +113 -0
  27. package/dist/collection/index.js +3 -0
  28. package/dist/collection/interfaces/custom-element-renderer.interface.js +1 -0
  29. package/dist/components/index.js +1 -1
  30. package/dist/components/kritzel-awareness-cursors.js +1 -1
  31. package/dist/components/kritzel-controls.js +1 -1
  32. package/dist/components/kritzel-current-user-dialog.js +1 -1
  33. package/dist/components/kritzel-current-user.js +1 -1
  34. package/dist/components/kritzel-dialog.js +1 -1
  35. package/dist/components/kritzel-editor.js +1 -1
  36. package/dist/components/kritzel-engine.js +1 -1
  37. package/dist/components/kritzel-export.js +1 -1
  38. package/dist/components/kritzel-login-dialog.js +1 -1
  39. package/dist/components/kritzel-menu-item.js +1 -1
  40. package/dist/components/kritzel-menu.js +1 -1
  41. package/dist/components/kritzel-more-menu.js +1 -1
  42. package/dist/components/kritzel-portal.js +1 -1
  43. package/dist/components/kritzel-settings.js +1 -1
  44. package/dist/components/kritzel-share-dialog.js +1 -1
  45. package/dist/components/kritzel-split-button.js +1 -1
  46. package/dist/components/kritzel-tool-config.js +1 -1
  47. package/dist/components/kritzel-tooltip.js +1 -1
  48. package/dist/components/kritzel-workspace-manager.js +1 -1
  49. package/dist/components/{p-BwuemYET.js → p-B4WfPDj0.js} +1 -1
  50. package/dist/components/p-BNu3Akp5.js +1 -0
  51. package/dist/components/p-BYveczcb.js +1 -0
  52. package/dist/components/{p-D28ZylHn.js → p-BixEMVtW.js} +1 -1
  53. package/dist/components/{p-Ndib1Jb3.js → p-BntMEYss.js} +1 -1
  54. package/dist/components/p-C48bv_0f.js +9 -0
  55. package/dist/components/{p-BO1CnEOT.js → p-CPMpf9ku.js} +1 -1
  56. package/dist/components/{p-BhODnvMO.js → p-CZQz_mul.js} +1 -1
  57. package/dist/components/{p-COj8EVzL.js → p-Ckpa5tHF.js} +1 -1
  58. package/dist/components/{p-BPoDE87Q.js → p-DJ3KI725.js} +1 -1
  59. package/dist/components/{p-DRsD38Nl.js → p-DPlEzPKO.js} +1 -1
  60. package/dist/components/{p-C-RiEw9X.js → p-DSd5xTAH.js} +1 -1
  61. package/dist/components/{p-CbMLbDou.js → p-DTqMF94b.js} +1 -1
  62. package/dist/components/{p-CHrSFOSI.js → p-DX2nriaq.js} +1 -1
  63. package/dist/components/{p-BAN5dnHX.js → p-Dd-pMvlr.js} +1 -1
  64. package/dist/components/{p-C5TZjIE1.js → p-M9m9-OEY.js} +1 -1
  65. package/dist/components/p-WUdQqYnu.js +1 -0
  66. package/dist/components/{p-YFR180v-.js → p-XDNjFYRB.js} +1 -1
  67. package/dist/components/{p-CJEIUs0x.js → p-X_pyPCe8.js} +1 -1
  68. package/dist/components/{p-CpR9lc-o.js → p-meY80XnF.js} +1 -1
  69. package/dist/components/{p-6Ca7Eolf.js → p-y5T0_Wvi.js} +1 -1
  70. package/dist/esm/index.js +2 -2
  71. package/dist/esm/kritzel-active-users_45.entry.js +500 -281
  72. package/dist/esm/{schema.constants-D35cwCYd.js → schema.constants-DMPBDrZh.js} +711 -47
  73. package/dist/stencil/index.esm.js +1 -1
  74. package/dist/stencil/p-27d41f6f.entry.js +9 -0
  75. package/dist/stencil/p-DMPBDrZh.js +1 -0
  76. package/dist/stencil/stencil.esm.js +1 -1
  77. package/dist/types/classes/core/core.class.d.ts +15 -0
  78. package/dist/types/classes/core/store.class.d.ts +6 -0
  79. package/dist/types/classes/objects/base-object.class.d.ts +3 -2
  80. package/dist/types/classes/objects/custom-element.class.d.ts +87 -21
  81. package/dist/types/classes/objects/image.class.d.ts +0 -1
  82. package/dist/types/classes/objects/selection-group.class.d.ts +1 -0
  83. package/dist/types/classes/providers/assets/asset-resolver.class.d.ts +3 -0
  84. package/dist/types/classes/providers/assets/indexeddb-asset-provider.class.d.ts +0 -1
  85. package/dist/types/classes/registries/custom-element-renderer.registry.d.ts +32 -0
  86. package/dist/types/components/core/kritzel-engine/kritzel-engine.d.ts +7 -1
  87. package/dist/types/components.d.ts +2 -2
  88. package/dist/types/constants/version.d.ts +1 -1
  89. package/dist/types/helpers/html.helper.d.ts +2 -0
  90. package/dist/types/helpers/object.helper.d.ts +1 -0
  91. package/dist/types/helpers/svg-export.helper.d.ts +9 -0
  92. package/dist/types/helpers/wheel.helper.d.ts +9 -0
  93. package/dist/types/index.d.ts +3 -0
  94. package/dist/types/interfaces/asset-storage-config.interface.d.ts +0 -4
  95. package/dist/types/interfaces/custom-element-renderer.interface.d.ts +40 -0
  96. package/dist/types/interfaces/debug-info.interface.d.ts +1 -0
  97. package/dist/types/interfaces/object.interface.d.ts +0 -1
  98. package/package.json +1 -1
  99. package/dist/components/p-BML28BJR.js +0 -1
  100. package/dist/components/p-CVV-HzFR.js +0 -1
  101. package/dist/components/p-DWhWFDcC.js +0 -9
  102. package/dist/components/p-Dd_EODkk.js +0 -1
  103. package/dist/stencil/p-D35cwCYd.js +0 -1
  104. package/dist/stencil/p-fcbf7965.entry.js +0 -9
@@ -68,7 +68,8 @@ export class KritzelAppStateMap {
68
68
  const docName = core.editorId ? `kritzel-app-state-${core.editorId}-${instanceId}` : `kritzel-app-state-${instanceId}`;
69
69
  const finalConfig = config ?? DEFAULT_SYNC_CONFIG;
70
70
  // Instantiate providers from configuration
71
- const quiet = !core.store.state.debugInfo.showSyncProviderInfo;
71
+ const showSyncProviderInfo = !!core.store.state.debugInfo.showSyncProviderInfo;
72
+ const quiet = !showSyncProviderInfo;
72
73
  for (const providerConfig of finalConfig.providers) {
73
74
  let provider;
74
75
  // Check if it's a class constructor or a factory
@@ -82,6 +83,10 @@ export class KritzelAppStateMap {
82
83
  }
83
84
  this._providers.push(provider);
84
85
  }
86
+ if (showSyncProviderInfo) {
87
+ const providerList = this._providers.map(p => `${p.constructor.name} (${p.type})`).join(', ');
88
+ console.info(`[Kritzel] App-state sync providers initialized for ${docName}: ${providerList || 'none'}`);
89
+ }
85
90
  // Observe changes to workspaces and sync with application state
86
91
  this._workspacesObserver = event => {
87
92
  this.handleWorkspacesChange(event);
@@ -94,15 +99,24 @@ export class KritzelAppStateMap {
94
99
  const networkProviders = this._providers.filter(p => p.type === 'network');
95
100
  // Await local providers for immediate data availability
96
101
  const localResults = await Promise.allSettled(localProviders.map(p => p.connect()));
102
+ if (showSyncProviderInfo) {
103
+ const connectedLocalCount = localResults.filter(result => result.status === 'fulfilled').length;
104
+ console.info(`[Kritzel] App-state local providers connected: ${connectedLocalCount}/${localProviders.length}`);
105
+ }
97
106
  localResults.forEach((result, i) => {
98
- if (result.status === 'rejected') {
107
+ if (showSyncProviderInfo && result.status === 'rejected') {
99
108
  console.error(`[Kritzel] Sync provider "${localProviders[i]?.constructor.name}" failed to connect:`, result.reason);
100
109
  }
101
110
  });
102
111
  // Connect network providers in the background (remote data arrives via Yjs observers)
112
+ if (showSyncProviderInfo && networkProviders.length > 0) {
113
+ console.info(`[Kritzel] App-state network providers connecting in background: ${networkProviders.length}`);
114
+ }
103
115
  for (const provider of networkProviders) {
104
116
  provider.connect().catch(err => {
105
- console.error(`[Kritzel] Network sync provider "${provider.constructor.name}" failed to connect:`, err);
117
+ if (showSyncProviderInfo) {
118
+ console.error(`[Kritzel] Network sync provider "${provider.constructor.name}" failed to connect:`, err);
119
+ }
106
120
  });
107
121
  }
108
122
  this._isReady = true;
@@ -274,7 +274,8 @@ export class KritzelObjectMap {
274
274
  const docName = core.editorId ? `kritzel-workspace-${core.editorId}-${workspaceId}` : `kritzel-workspace-${workspaceId}`;
275
275
  const finalConfig = config ?? DEFAULT_SYNC_CONFIG;
276
276
  // Instantiate providers from configuration
277
- const quiet = !core.store?.state?.debugInfo?.showSyncProviderInfo;
277
+ const showSyncProviderInfo = !!core.store?.state?.debugInfo?.showSyncProviderInfo;
278
+ const quiet = !showSyncProviderInfo;
278
279
  for (const providerConfig of finalConfig.providers) {
279
280
  let provider;
280
281
  // Check if it's a class constructor or a factory
@@ -288,6 +289,10 @@ export class KritzelObjectMap {
288
289
  }
289
290
  this._providers.push(provider);
290
291
  }
292
+ if (showSyncProviderInfo) {
293
+ const providerList = this._providers.map(p => `${p.constructor.name} (${p.type})`).join(', ');
294
+ console.info(`[Kritzel] Workspace sync providers initialized for ${docName}: ${providerList || 'none'}`);
295
+ }
291
296
  // captureTimeout is effectively infinite — undo-step boundaries are
292
297
  // marked explicitly via markUndoBoundary() in insert/remove/reset and
293
298
  // at stroke/gesture boundaries in the tools. This prevents a single
@@ -328,15 +333,24 @@ export class KritzelObjectMap {
328
333
  const networkProviders = this._providers.filter(p => p.type === 'network');
329
334
  // Await local providers for immediate data availability
330
335
  const localResults = await Promise.allSettled(localProviders.map(p => p.connect()));
336
+ if (showSyncProviderInfo) {
337
+ const connectedLocalCount = localResults.filter(result => result.status === 'fulfilled').length;
338
+ console.info(`[Kritzel] Workspace local providers connected: ${connectedLocalCount}/${localProviders.length}`);
339
+ }
331
340
  localResults.forEach((result, i) => {
332
- if (result.status === 'rejected') {
341
+ if (showSyncProviderInfo && result.status === 'rejected') {
333
342
  console.error(`[Kritzel] Sync provider "${localProviders[i]?.constructor.name}" failed to connect:`, result.reason);
334
343
  }
335
344
  });
336
345
  // Connect network providers in the background (remote data arrives via Yjs observers)
346
+ if (showSyncProviderInfo && networkProviders.length > 0) {
347
+ console.info(`[Kritzel] Workspace network providers connecting in background: ${networkProviders.length}`);
348
+ }
337
349
  for (const provider of networkProviders) {
338
350
  provider.connect().catch(err => {
339
- console.error(`[Kritzel] Network sync provider "${provider.constructor.name}" failed to connect:`, err);
351
+ if (showSyncProviderInfo) {
352
+ console.error(`[Kritzel] Network sync provider "${provider.constructor.name}" failed to connect:`, err);
353
+ }
340
354
  });
341
355
  }
342
356
  this._isReady = true;
@@ -370,8 +370,18 @@ export class KritzelSelectionTool extends KritzelBaseTool {
370
370
  this._core.removeSelectionGroup();
371
371
  this._core.rerender();
372
372
  }
373
- if (selectedObject && selectedObject.isSelected === false && selectedObject?.objects.length === 1 && selectedObject.objects[0].isInteractive) {
374
- return;
373
+ if (selectedObject && selectedObject.isSelected === false && selectedObject?.objects.length === 1) {
374
+ const firstObj = selectedObject.objects[0];
375
+ if (KritzelClassHelper.isInstanceOf(firstObj, 'KritzelCustomElement')) {
376
+ // Selected single custom elements hand pointer interaction to their
377
+ // embedded DOM content. Unselected custom elements remain selectable.
378
+ if (firstObj.isSelected && this._core.store.selectionGroup?.objects.length === 1)
379
+ return;
380
+ }
381
+ else if (firstObj.isInteractive) {
382
+ // Preserve existing behavior for text/shape edit mode
383
+ return;
384
+ }
375
385
  }
376
386
  }
377
387
  this.lineHandleHandler.handlePointerDown(event);
@@ -383,6 +393,14 @@ export class KritzelSelectionTool extends KritzelBaseTool {
383
393
  }
384
394
  if (event.pointerType === 'touch' || event.pointerType === 'pen') {
385
395
  if (this._core.store.state.isScaling === true) {
396
+ const activePointerCount = this._core.store.state.pointers.size;
397
+ // During a real pinch (two active pointers), keep touch handling suspended.
398
+ // If only one pointer is active, scaling is stale (debounce window after pinch),
399
+ // so resume normal touch selection behavior immediately.
400
+ if (activePointerCount === 1) {
401
+ this._core.store.state.isScaling = false;
402
+ this._savedSelectionGroupForPinch = null;
403
+ }
386
404
  // A second finger has arrived to start a pinch-zoom gesture. If we
387
405
  // cleared a selection group on the first finger-down, restore it now
388
406
  // so the user's selection is preserved while zooming.
@@ -391,7 +409,10 @@ export class KritzelSelectionTool extends KritzelBaseTool {
391
409
  this._savedSelectionGroupForPinch = null;
392
410
  this._core.rerender();
393
411
  }
394
- return;
412
+ if (this._core.store.state.isScaling === true) {
413
+ return;
414
+ }
415
+ // Continue with normal touch handling when scaling was stale.
395
416
  }
396
417
  if (this._core.store.state.pointers.size === 1) {
397
418
  this._core.store.state.isResizeHandleSelected = this.isHandleSelected(event);
@@ -423,7 +444,10 @@ export class KritzelSelectionTool extends KritzelBaseTool {
423
444
  this.rotationHandler.handlePointerDown(event);
424
445
  this.resizeHandler.handlePointerDown(event);
425
446
  this.moveHandler.handlePointerDown(event);
426
- this.selectionHandler.handlePointerDown(event);
447
+ // Only process selection handler if we are not scaling (2 pointers)
448
+ if (this._core.store.state.pointers.size === 1) {
449
+ this.selectionHandler.handlePointerDown(event);
450
+ }
427
451
  this._core.rerender();
428
452
  }
429
453
  }
@@ -497,7 +521,7 @@ export class KritzelSelectionTool extends KritzelBaseTool {
497
521
  * @returns A KritzelSelectionGroup containing the object, or null if no object at that location
498
522
  */
499
523
  getSelectedObject(event) {
500
- const path = event.composedPath().slice(1);
524
+ const path = event.composedPath();
501
525
  const objectElement = path.find(element => element.classList && element.classList.contains('object'));
502
526
  const object = objectElement?.id ? this._core.findObjectById(objectElement.id) : null;
503
527
  if (!object) {
@@ -507,6 +531,10 @@ export class KritzelSelectionTool extends KritzelBaseTool {
507
531
  if (!object.hitTest(x, y)) {
508
532
  return null;
509
533
  }
534
+ const currentSelectionGroup = this._core.store.selectionGroup;
535
+ if (currentSelectionGroup?.objects.some(selectedObject => selectedObject.id === object.id)) {
536
+ return currentSelectionGroup;
537
+ }
510
538
  if (object instanceof KritzelSelectionGroup) {
511
539
  return object;
512
540
  }
@@ -514,7 +542,7 @@ export class KritzelSelectionTool extends KritzelBaseTool {
514
542
  const group = KritzelSelectionGroup.create(this._core);
515
543
  group.translateX = 0;
516
544
  group.translateY = 0;
517
- group.addOrRemove(object);
545
+ group.objectIds = [object.id];
518
546
  return group;
519
547
  }
520
548
  }
@@ -38,6 +38,7 @@ export class KritzelEditor {
38
38
  showObjectInfo: false,
39
39
  showSyncProviderInfo: true,
40
40
  showMigrationInfo: true,
41
+ showAssetResolverInfo: false,
41
42
  };
42
43
  user;
43
44
  activeUsers;
@@ -949,31 +950,31 @@ export class KritzelEditor {
949
950
  const isLoggedIn = this.isLoggedIn;
950
951
  const shouldShowCurrentUser = isLoggedIn;
951
952
  const shouldShowLoginButton = this.isReady && !!this.loginConfig && !isLoggedIn;
952
- return (h(Host, { key: '07fe246b722ca64cfbdd8cc3474e6288c39d1128', style: {
953
+ return (h(Host, { key: '56b172459e6d940229dc1d4f409157e403ad5f27', style: {
953
954
  opacity: this.isEditorVisible ? '1' : '0',
954
955
  visibility: this.isEditorVisible ? 'visible' : 'hidden',
955
956
  transition: 'opacity 0.2s ease-in-out, visibility 0.2s ease-in-out',
956
- } }, h("div", { key: '2d0db1e78161edb061779b5875114e901f8e79f8', class: "top-left-buttons" }, h("kritzel-workspace-manager", { key: '8fee1d57b0b868b673c41015453fd39a19f8cb43', visible: this.isWorkspaceManagerVisible, workspaces: this.workspaces, activeWorkspace: this.activeWorkspace, terms: this.resolvedTerms, onWorkspaceChange: event => (this.activeWorkspace = event.detail), onIsWorkspaceManagerReady: () => (this.isWorkspaceManagerReady = true) }), h("kritzel-back-to-content", { key: 'f2a0305bf73bd14d7522974b7956a289a0a44258', visible: this.isBackToContentButtonVisible, text: this.resolvedTerms['backToContent.label'] ?? 'Back to content', onBackToContent: () => this.backToContent() })), this.activeNotification && (h("div", { key: '918fe80193999ec072042500cd1eaf3670f5ed3c', class: "top-center-notification-layer", role: "presentation" }, h("div", { key: '0a5609b2b32f9f04bac03618803c14d9a891742c', class: { 'top-center-notification-container': true, 'is-dismissing': this.isNotificationDismissing }, role: "presentation" }, h("kritzel-notification-card", { key: 'eb1ff7aeaee3a237baf3ba2d96a10ba03a8bf7fb', notification: this.activeNotification, locale: this.locale, onDismiss: this.dismissNotification, onHoverChange: event => this.handleNotificationHoverChange(event) })))), h("kritzel-engine", { key: '8783a87101f308029482ced926a8d2163aae1428', ref: el => {
957
+ } }, h("div", { key: '93a2195c14402f38416b2d377c684e2650418edb', class: "top-left-buttons" }, h("kritzel-workspace-manager", { key: '1b42b21bc35e1fc56202e19a78053e46d87ca51a', visible: this.isWorkspaceManagerVisible, workspaces: this.workspaces, activeWorkspace: this.activeWorkspace, terms: this.resolvedTerms, onWorkspaceChange: event => (this.activeWorkspace = event.detail), onIsWorkspaceManagerReady: () => (this.isWorkspaceManagerReady = true) }), h("kritzel-back-to-content", { key: '3b90b69a5b83a6e5593d4f752c4094a2a3af8c4d', visible: this.isBackToContentButtonVisible, text: this.resolvedTerms['backToContent.label'] ?? 'Back to content', onBackToContent: () => this.backToContent() })), this.activeNotification && (h("div", { key: '9c2ee1e10212145bf2f97a1a7f27746aa18cfc98', class: "top-center-notification-layer", role: "presentation" }, h("div", { key: 'a77b025329da64e1f1223a2f749aa2fc60e5c469', class: { 'top-center-notification-container': true, 'is-dismissing': this.isNotificationDismissing }, role: "presentation" }, h("kritzel-notification-card", { key: '9ced0bc5213ec8c3387915cd71272a1f56161405', notification: this.activeNotification, locale: this.locale, onDismiss: this.dismissNotification, onHoverChange: event => this.handleNotificationHoverChange(event) })))), h("kritzel-engine", { key: '884b7f088e164a51c49158c409904ca5419f2d55', ref: el => {
957
958
  if (el) {
958
959
  this.engineRef = el;
959
960
  }
960
- }, workspace: this.activeWorkspace, activeWorkspaceId: this.activeWorkspaceId, editorId: this.editorId, syncConfig: this.syncConfig, assetStorageConfig: this.assetStorageConfig, user: this.user, scaleMax: this.scaleMax, lockDrawingScale: this.lockDrawingScale, isObjectDistanceFadingActive: this.isObjectDistanceFadingActive, scaleMin: this.scaleMin, cursorTarget: this.cursorTarget, isLoading: this.isLoading, viewportBoundaryLeft: this.viewportBoundaryLeft, viewportBoundaryRight: this.viewportBoundaryRight, viewportBoundaryTop: this.viewportBoundaryTop, viewportBoundaryBottom: this.viewportBoundaryBottom, isPanningEnabled: this.isPanningEnabled, isZoomingEnabled: this.isZoomingEnabled, theme: this.theme, themes: this.themes, licenseKey: this.licenseKey, locale: this.locale, locales: this.locales, fallbackLocale: this.fallbackLocale, debugInfo: this.debugInfo, globalContextMenuItems: this.globalContextMenuItems, objectContextMenuItems: this.objectContextMenuItems, onIsEngineReady: event => this.onEngineReady(event), onWorkspacesChange: event => this.handleWorkspacesChange(event), onActiveWorkspaceChange: event => this.handleActiveWorkspaceChange(event), onObjectsChange: event => this.handleObjectsChange(event), onObjectsAdded: event => this.handleObjectsAdded(event), onObjectsRemoved: event => this.handleObjectsRemoved(event), onObjectsUpdated: event => this.handleObjectsUpdated(event), onUndoStateChange: event => this.handleUndoStateChange(event), onObjectsInViewportChange: event => this.handleObjectsInViewportChange(event), onViewportChange: event => this.handleViewportChange(event), onAwarenessChange: event => this.handleAwarenessChange(event), onNotificationsChange: event => this.handleNotificationsChange(event) }), h("kritzel-controls", { key: '73a94f6baef4e0e26be4540ecd44d24588f5761b', visible: this.isControlsVisible, class: { 'keyboard-open': this.isVirtualKeyboardOpen }, ref: el => {
961
+ }, workspace: this.activeWorkspace, activeWorkspaceId: this.activeWorkspaceId, editorId: this.editorId, syncConfig: this.syncConfig, assetStorageConfig: this.assetStorageConfig, user: this.user, scaleMax: this.scaleMax, lockDrawingScale: this.lockDrawingScale, isObjectDistanceFadingActive: this.isObjectDistanceFadingActive, scaleMin: this.scaleMin, cursorTarget: this.cursorTarget, isLoading: this.isLoading, viewportBoundaryLeft: this.viewportBoundaryLeft, viewportBoundaryRight: this.viewportBoundaryRight, viewportBoundaryTop: this.viewportBoundaryTop, viewportBoundaryBottom: this.viewportBoundaryBottom, isPanningEnabled: this.isPanningEnabled, isZoomingEnabled: this.isZoomingEnabled, theme: this.theme, themes: this.themes, licenseKey: this.licenseKey, locale: this.locale, locales: this.locales, fallbackLocale: this.fallbackLocale, debugInfo: this.debugInfo, globalContextMenuItems: this.globalContextMenuItems, objectContextMenuItems: this.objectContextMenuItems, onIsEngineReady: event => this.onEngineReady(event), onWorkspacesChange: event => this.handleWorkspacesChange(event), onActiveWorkspaceChange: event => this.handleActiveWorkspaceChange(event), onObjectsChange: event => this.handleObjectsChange(event), onObjectsAdded: event => this.handleObjectsAdded(event), onObjectsRemoved: event => this.handleObjectsRemoved(event), onObjectsUpdated: event => this.handleObjectsUpdated(event), onUndoStateChange: event => this.handleUndoStateChange(event), onObjectsInViewportChange: event => this.handleObjectsInViewportChange(event), onViewportChange: event => this.handleViewportChange(event), onAwarenessChange: event => this.handleAwarenessChange(event), onNotificationsChange: event => this.handleNotificationsChange(event) }), h("kritzel-controls", { key: '3a7c22f037d551636c53190eb07b318c2b857162', visible: this.isControlsVisible, class: { 'keyboard-open': this.isVirtualKeyboardOpen }, ref: el => {
961
962
  if (el) {
962
963
  this.controlsRef = el;
963
964
  }
964
- }, controls: this.controls, isUtilityPanelVisible: this.isUtilityPanelVisible, undoState: this.undoState ?? undefined, theme: this.theme, terms: this.resolvedTerms, onIsControlsReady: () => (this.isControlsReady = true) }), h("div", { key: 'b0653098e5e15b81f453a7f3c2b27f137eb38f2e', class: "bottom-left-buttons" }, h("kritzel-zoom-panel", { key: '33384aeb6bd32d17fb428bd9ed48e5d588ac60c0', visible: this.isZoomPanelVisible, disabled: !this.isZoomingEnabled, zoomPercent: this.currentZoomPercent, terms: this.resolvedTerms, onZoomIn: () => this.zoomIn(), onZoomOut: () => this.zoomOut() })), h("div", { key: '37bed04c062b63a99c930362fb8ce30b58ed8872', class: "top-right-buttons" }, h("kritzel-settings", { key: '4e339573e3d8d48bc9803b9dd40a549bd056d147', ref: el => {
965
+ }, controls: this.controls, isUtilityPanelVisible: this.isUtilityPanelVisible, undoState: this.undoState ?? undefined, theme: this.theme, terms: this.resolvedTerms, onIsControlsReady: () => (this.isControlsReady = true) }), h("div", { key: 'c0dad9086679397c46f5550c38686a9b7d8bae6c', class: "bottom-left-buttons" }, h("kritzel-zoom-panel", { key: '1639d6d2092ecd3fbc657dfdcfc3f12c02539329', visible: this.isZoomPanelVisible, disabled: !this.isZoomingEnabled, zoomPercent: this.currentZoomPercent, terms: this.resolvedTerms, onZoomIn: () => this.zoomIn(), onZoomOut: () => this.zoomOut() })), h("div", { key: '45313b28a5e4bd75d09980e4765c2241d54fe1df', class: "top-right-buttons" }, h("kritzel-settings", { key: '33737a005cd6580505ee741be0dc40bd69873276', ref: el => {
965
966
  if (el) {
966
967
  this.settingsRef = el;
967
968
  }
968
- }, shortcuts: this.shortcuts, availableThemes: this.themes && this.themes.length > 0 ? this.themes.map(t => t.name) : ['light', 'dark'], availableLocales: this.availableLocaleOptions, settings: this.currentSettingsConfig, terms: this.resolvedTerms, onSettingsChange: event => this.handleSettingsChange(event) }), h("kritzel-export", { key: '2a726ea5b56cd36ecf92bbab17d69d04baf73009', ref: el => {
969
+ }, shortcuts: this.shortcuts, availableThemes: this.themes && this.themes.length > 0 ? this.themes.map(t => t.name) : ['light', 'dark'], availableLocales: this.availableLocaleOptions, settings: this.currentSettingsConfig, terms: this.resolvedTerms, onSettingsChange: event => this.handleSettingsChange(event) }), h("kritzel-export", { key: '9e13001850b15b9ce9d8a502466ed9fa05ac1518', ref: el => {
969
970
  if (el) {
970
971
  this.exportRef = el;
971
972
  }
972
- }, workspaceName: this.activeWorkspace?.name || 'workspace', terms: this.resolvedTerms, onExportPng: () => this.engineRef.exportViewportAsPng(), onExportSvg: () => this.engineRef.exportViewportAsSvg(), onExportJson: event => this.engineRef.downloadAsJson(event.detail) }), h("kritzel-active-users", { key: '26d9bbf922b1d4158a0875ba42e7b598011973d5', users: this.activeUsers }), shouldShowCurrentUser && h("kritzel-current-user", { key: '8179cc3e940c9fd8d97978af2bf52543f661a0fd', user: this.user, terms: this.resolvedTerms }), shouldShowLoginButton && (h("kritzel-button", { key: 'd4aa5bc108043eb103754d14f1b5df42ab73f8c4', onButtonClick: () => this.loginDialogRef?.open() }, this.resolvedTerms['login.dialogTitle'] ?? 'Sign in')), h("kritzel-more-menu", { key: '17ac617bde379d7484dbeed39ac7168349b634a1', items: this.moreMenuItems, visible: this.isMoreMenuVisible, terms: this.resolvedTerms }), h("kritzel-share-dialog", { key: '881729b36d34ef3ac3d87fc51ad828fc20fa36cd', ref: el => {
973
+ }, workspaceName: this.activeWorkspace?.name || 'workspace', terms: this.resolvedTerms, onExportPng: () => this.engineRef.exportViewportAsPng(), onExportSvg: () => this.engineRef.exportViewportAsSvg(), onExportJson: event => this.engineRef.downloadAsJson(event.detail) }), h("kritzel-active-users", { key: 'f2494af1241ecc068ace09b23cfd405c76bd1273', users: this.activeUsers }), shouldShowCurrentUser && h("kritzel-current-user", { key: '7f199e3493805977b5e5b8d2c736f31729919f96', user: this.user, terms: this.resolvedTerms }), shouldShowLoginButton && (h("kritzel-button", { key: 'c6c192ddb1245acc771ac550c1fe3e4f9bc08eab', onButtonClick: () => this.loginDialogRef?.open() }, this.resolvedTerms['login.dialogTitle'] ?? 'Sign in')), h("kritzel-more-menu", { key: '869194078a4c90d42c5ebd604bc58b4f55fc4cb6', items: this.moreMenuItems, visible: this.isMoreMenuVisible, terms: this.resolvedTerms }), h("kritzel-share-dialog", { key: '8daed8fd7267aca056b6a53626c721e2f23cead4', ref: el => {
973
974
  if (el) {
974
975
  this.shareDialogRef = el;
975
976
  }
976
- }, isPublic: this.currentIsPublic, workspaceId: this.activeWorkspace?.id, terms: this.resolvedTerms, onToggleIsPublic: this.handleToggleIsPublic }), this.loginConfig && (h("kritzel-login-dialog", { key: '5e34b647ac4c3e18981042d765b4d443422c5db3', ref: el => {
977
+ }, isPublic: this.currentIsPublic, workspaceId: this.activeWorkspace?.id, terms: this.resolvedTerms, onToggleIsPublic: this.handleToggleIsPublic }), this.loginConfig && (h("kritzel-login-dialog", { key: 'b65ea0940cee31b152b60881180fab2445c92b0c', ref: el => {
977
978
  if (el) {
978
979
  this.loginDialogRef = el;
979
980
  }
@@ -1155,7 +1156,7 @@ export class KritzelEditor {
1155
1156
  },
1156
1157
  "getter": false,
1157
1158
  "setter": false,
1158
- "defaultValue": "{\n showViewportInfo: false,\n showObjectInfo: false,\n showSyncProviderInfo: true,\n showMigrationInfo: true,\n }"
1159
+ "defaultValue": "{\n showViewportInfo: false,\n showObjectInfo: false,\n showSyncProviderInfo: true,\n showMigrationInfo: true,\n showAssetResolverInfo: false,\n }"
1159
1160
  },
1160
1161
  "user": {
1161
1162
  "type": "unknown",