kritzel-stencil 0.3.13 → 0.3.15
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.cjs.js +1 -1
- package/dist/cjs/kritzel-active-users_42.cjs.entry.js +156 -25
- package/dist/cjs/loader.cjs.js +1 -1
- package/dist/cjs/{schema.constants-CMFOYyBj.js → schema.constants-DJQTjcy7.js} +62 -0
- package/dist/cjs/stencil.cjs.js +1 -1
- package/dist/collection/classes/core/viewport.class.js +81 -0
- package/dist/collection/classes/objects/image.class.js +62 -0
- package/dist/collection/components/core/kritzel-editor/kritzel-editor.js +86 -18
- package/dist/collection/components/core/kritzel-engine/kritzel-engine.js +169 -17
- package/dist/collection/constants/version.js +1 -1
- package/dist/components/index.js +1 -1
- package/dist/components/kritzel-controls.js +1 -1
- package/dist/components/kritzel-editor.js +1 -1
- package/dist/components/kritzel-engine.js +1 -1
- package/dist/components/kritzel-settings.js +1 -1
- package/dist/components/kritzel-tool-config.js +1 -1
- package/dist/components/p-BTEV1WwT.js +1 -0
- package/dist/components/{p-ijIqLY9g.js → p-CUFKqzMC.js} +1 -1
- package/dist/components/{p-B9hLySCl.js → p-CUPYGT8c.js} +1 -1
- package/dist/components/p-Dc0a_Hb-.js +9 -0
- package/dist/components/{p-CVzH1Oil.js → p-J9_SwObO.js} +1 -1
- package/dist/esm/index.js +2 -2
- package/dist/esm/kritzel-active-users_42.entry.js +156 -25
- package/dist/esm/loader.js +1 -1
- package/dist/esm/{schema.constants-NrtFvKER.js → schema.constants-DiCnmIYK.js} +62 -0
- package/dist/esm/stencil.js +1 -1
- package/dist/stencil/index.esm.js +1 -1
- package/dist/stencil/{p-NrtFvKER.js → p-DiCnmIYK.js} +1 -1
- package/dist/stencil/p-bbebe56c.entry.js +9 -0
- package/dist/stencil/stencil.esm.js +1 -1
- package/dist/types/classes/core/viewport.class.d.ts +30 -0
- package/dist/types/classes/objects/image.class.d.ts +15 -0
- package/dist/types/components/core/kritzel-editor/kritzel-editor.d.ts +11 -3
- package/dist/types/components/core/kritzel-engine/kritzel-engine.d.ts +33 -5
- package/dist/types/components.d.ts +28 -6
- package/dist/types/constants/version.d.ts +1 -1
- package/package.json +1 -1
- package/dist/components/p-C-aFOO5p.js +0 -1
- package/dist/components/p-DplAQ6jk.js +0 -9
- package/dist/stencil/p-9adee165.entry.js +0 -9
package/dist/cjs/index.cjs.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
3
|
var index = require('./index-Xav9JFHg.js');
|
|
4
|
-
var schema_constants = require('./schema.constants-
|
|
4
|
+
var schema_constants = require('./schema.constants-DJQTjcy7.js');
|
|
5
5
|
var Y = require('yjs');
|
|
6
6
|
require('y-indexeddb');
|
|
7
7
|
require('y-websocket');
|
|
@@ -2524,6 +2524,12 @@ const KritzelEditor = class {
|
|
|
2524
2524
|
async zoomTo(scale, worldX, worldY) {
|
|
2525
2525
|
return this.engineRef.zoomTo(scale, worldX, worldY);
|
|
2526
2526
|
}
|
|
2527
|
+
async zoomIn(factor = 1.6, duration = 200) {
|
|
2528
|
+
return this.engineRef.zoomIn(factor, duration);
|
|
2529
|
+
}
|
|
2530
|
+
async zoomOut(factor = 1.6, duration = 200) {
|
|
2531
|
+
return this.engineRef.zoomOut(factor, duration);
|
|
2532
|
+
}
|
|
2527
2533
|
async getViewport() {
|
|
2528
2534
|
return this.engineRef.getViewport();
|
|
2529
2535
|
}
|
|
@@ -2609,14 +2615,14 @@ const KritzelEditor = class {
|
|
|
2609
2615
|
async redo() {
|
|
2610
2616
|
return this.engineRef.redo();
|
|
2611
2617
|
}
|
|
2612
|
-
async getScreenshot(format = 'png') {
|
|
2613
|
-
return this.engineRef.getScreenshot(format);
|
|
2618
|
+
async getScreenshot(format = 'png', options) {
|
|
2619
|
+
return this.engineRef.getScreenshot(format, options);
|
|
2614
2620
|
}
|
|
2615
|
-
async exportViewportAsPng() {
|
|
2616
|
-
return this.engineRef.exportViewportAsPng();
|
|
2621
|
+
async exportViewportAsPng(options) {
|
|
2622
|
+
return this.engineRef.exportViewportAsPng(options);
|
|
2617
2623
|
}
|
|
2618
|
-
async exportViewportAsSvg() {
|
|
2619
|
-
return this.engineRef.exportViewportAsSvg();
|
|
2624
|
+
async exportViewportAsSvg(options) {
|
|
2625
|
+
return this.engineRef.exportViewportAsSvg(options);
|
|
2620
2626
|
}
|
|
2621
2627
|
async exportSelectedObjectsAsPng() {
|
|
2622
2628
|
return this.engineRef.exportSelectedObjectsAsPng();
|
|
@@ -2968,31 +2974,31 @@ const KritzelEditor = class {
|
|
|
2968
2974
|
const isLoggedIn = this.isLoggedIn;
|
|
2969
2975
|
const shouldShowCurrentUser = isLoggedIn;
|
|
2970
2976
|
const shouldShowLoginButton = this.isReady && !!this.loginConfig && !isLoggedIn;
|
|
2971
|
-
return (index.h(index.Host, { key: '
|
|
2977
|
+
return (index.h(index.Host, { key: 'ffacaea5d3df12a3a8b448d31db3c5949053156c', style: {
|
|
2972
2978
|
opacity: this.isEditorVisible ? '1' : '0',
|
|
2973
2979
|
visibility: this.isEditorVisible ? 'visible' : 'hidden',
|
|
2974
2980
|
transition: 'opacity 0.2s ease-in-out, visibility 0.2s ease-in-out',
|
|
2975
|
-
} }, index.h("div", { key: '
|
|
2981
|
+
} }, index.h("div", { key: '669eafee25b4f84c39469738a1337c21ab03e388', class: "top-left-buttons" }, index.h("kritzel-workspace-manager", { key: 'd6feb4a71c3286830fbe53a533f283c8af9a0385', visible: this.isWorkspaceManagerVisible, workspaces: this.workspaces, activeWorkspace: this.activeWorkspace, onWorkspaceChange: event => (this.activeWorkspace = event.detail), onIsWorkspaceManagerReady: () => (this.isWorkspaceManagerReady = true) }), index.h("kritzel-back-to-content", { key: '5bd0e6263d51119b197292b69879c1ae437f92fc', visible: this.isBackToContentButtonVisible, onBackToContent: () => this.backToContent() })), index.h("kritzel-engine", { key: '468f17137c51c90fd61c9179d13c449b1ac8feb9', ref: el => {
|
|
2976
2982
|
if (el) {
|
|
2977
2983
|
this.engineRef = el;
|
|
2978
2984
|
}
|
|
2979
|
-
}, 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, wheelEnabled: this.wheelEnabled, theme: this.theme, themes: this.themes, 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) }), index.h("kritzel-controls", { key: '
|
|
2985
|
+
}, 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, wheelEnabled: this.wheelEnabled, theme: this.theme, themes: this.themes, 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) }), index.h("kritzel-controls", { key: '848c30b27fb916c8480b41745bd6ec844e0b23a2', visible: this.isControlsVisible, class: { 'keyboard-open': this.isVirtualKeyboardOpen }, ref: el => {
|
|
2980
2986
|
if (el) {
|
|
2981
2987
|
this.controlsRef = el;
|
|
2982
2988
|
}
|
|
2983
|
-
}, controls: this.controls, isUtilityPanelVisible: this.isUtilityPanelVisible, undoState: this.undoState ?? undefined, theme: this.theme, onIsControlsReady: () => (this.isControlsReady = true) }), index.h("div", { key: '
|
|
2989
|
+
}, controls: this.controls, isUtilityPanelVisible: this.isUtilityPanelVisible, undoState: this.undoState ?? undefined, theme: this.theme, onIsControlsReady: () => (this.isControlsReady = true) }), index.h("div", { key: 'e998d60679c767d15617bd7ecde5ee77e781a92f', class: "top-right-buttons" }, index.h("kritzel-settings", { key: '43b9cdb2d10de789cc03d2a9ef5df870b8ca7bfe', ref: el => {
|
|
2984
2990
|
if (el) {
|
|
2985
2991
|
this.settingsRef = el;
|
|
2986
2992
|
}
|
|
2987
|
-
}, shortcuts: this.shortcuts, availableThemes: this.themes && this.themes.length > 0 ? this.themes.map(t => t.name) : ['light', 'dark'], settings: this.currentSettingsConfig, onSettingsChange: event => this.handleSettingsChange(event) }), index.h("kritzel-export", { key: '
|
|
2993
|
+
}, shortcuts: this.shortcuts, availableThemes: this.themes && this.themes.length > 0 ? this.themes.map(t => t.name) : ['light', 'dark'], settings: this.currentSettingsConfig, onSettingsChange: event => this.handleSettingsChange(event) }), index.h("kritzel-export", { key: '74669624a1e5177125ef00e1667c880ce47cbce4', ref: el => {
|
|
2988
2994
|
if (el) {
|
|
2989
2995
|
this.exportRef = el;
|
|
2990
2996
|
}
|
|
2991
|
-
}, workspaceName: this.activeWorkspace?.name || 'workspace', onExportPng: () => this.engineRef.exportViewportAsPng(), onExportSvg: () => this.engineRef.exportViewportAsSvg(), onExportJson: event => this.engineRef.downloadAsJson(event.detail) }), index.h("kritzel-active-users", { key: '
|
|
2997
|
+
}, workspaceName: this.activeWorkspace?.name || 'workspace', onExportPng: () => this.engineRef.exportViewportAsPng(), onExportSvg: () => this.engineRef.exportViewportAsSvg(), onExportJson: event => this.engineRef.downloadAsJson(event.detail) }), index.h("kritzel-active-users", { key: '18d925f32d021ff6713accb22d0594d259d70f2e', users: this.activeUsers }), shouldShowCurrentUser && index.h("kritzel-current-user", { key: 'bddd5c29c5f17cced47276c237c04cfdb711da38', user: this.user }), shouldShowLoginButton && (index.h("kritzel-button", { key: '4eb6c85459f59863d6e644ecf21c2295da71bafc', onButtonClick: () => this.loginDialogRef?.open() }, "Sign in")), index.h("kritzel-more-menu", { key: 'a5a323ec248bebc7bc07898f344e0926fac8db17', items: this.moreMenuItems, visible: this.isMoreMenuVisible }), index.h("kritzel-share-dialog", { key: '8cb3ddad95d36f5b7ad59d8c4f057df93cb2bfe3', ref: el => {
|
|
2992
2998
|
if (el) {
|
|
2993
2999
|
this.shareDialogRef = el;
|
|
2994
3000
|
}
|
|
2995
|
-
}, isPublic: this.currentIsPublic, workspaceId: this.activeWorkspace?.id, onToggleIsPublic: this.handleToggleIsPublic }), this.loginConfig && (index.h("kritzel-login-dialog", { key: '
|
|
3001
|
+
}, isPublic: this.currentIsPublic, workspaceId: this.activeWorkspace?.id, onToggleIsPublic: this.handleToggleIsPublic }), this.loginConfig && (index.h("kritzel-login-dialog", { key: '35395d0faadcfeb021fba685aa46e180e47d2be2', ref: el => {
|
|
2996
3002
|
if (el) {
|
|
2997
3003
|
this.loginDialogRef = el;
|
|
2998
3004
|
}
|
|
@@ -20679,6 +20685,87 @@ class KritzelViewport {
|
|
|
20679
20685
|
this.setViewport(centerWorldX, centerWorldY, scale);
|
|
20680
20686
|
}
|
|
20681
20687
|
}
|
|
20688
|
+
/**
|
|
20689
|
+
* Zooms in by a fixed step, centered on the current viewport center,
|
|
20690
|
+
* with a smooth animation. The resulting scale is clamped to the allowed range.
|
|
20691
|
+
* @param factor - Multiplicative zoom-in step
|
|
20692
|
+
* @param duration - Animation duration in milliseconds
|
|
20693
|
+
*/
|
|
20694
|
+
zoomIn(factor, duration) {
|
|
20695
|
+
this.animateZoomAroundViewportCenter(factor, duration);
|
|
20696
|
+
}
|
|
20697
|
+
/**
|
|
20698
|
+
* Zooms out by a fixed step, centered on the current viewport center,
|
|
20699
|
+
* with a smooth animation. The resulting scale is clamped to the allowed range.
|
|
20700
|
+
* @param factor - Multiplicative zoom-out step
|
|
20701
|
+
* @param duration - Animation duration in milliseconds
|
|
20702
|
+
*/
|
|
20703
|
+
zoomOut(factor, duration) {
|
|
20704
|
+
this.animateZoomAroundViewportCenter(1 / factor, duration);
|
|
20705
|
+
}
|
|
20706
|
+
/**
|
|
20707
|
+
* Smoothly zooms around the viewport center, keeping the center world point
|
|
20708
|
+
* fixed for the entire animation. The translation is recomputed from the fixed
|
|
20709
|
+
* center point on every frame (rather than interpolated independently), which
|
|
20710
|
+
* guarantees the center never drifts and the viewport does not jump.
|
|
20711
|
+
* The resulting scale is clamped to the allowed range and the translation is
|
|
20712
|
+
* clamped to the viewport boundaries.
|
|
20713
|
+
* @param scaleFactor - Multiplicative scale factor (>1 zooms in, <1 zooms out)
|
|
20714
|
+
* @param duration - Animation duration in milliseconds
|
|
20715
|
+
*/
|
|
20716
|
+
animateZoomAroundViewportCenter(scaleFactor, duration) {
|
|
20717
|
+
this.cancelViewportAnimation();
|
|
20718
|
+
const state = this._core.store.state;
|
|
20719
|
+
const startScale = state.scale;
|
|
20720
|
+
const effectiveMinScale = this.getEffectiveMinScale();
|
|
20721
|
+
const targetScale = Math.min(state.scaleMax, Math.max(effectiveMinScale, startScale * scaleFactor));
|
|
20722
|
+
// The world point currently under the viewport center stays fixed.
|
|
20723
|
+
const centerScreenX = state.viewportWidth / 2;
|
|
20724
|
+
const centerScreenY = state.viewportHeight / 2;
|
|
20725
|
+
const centerWorldX = (centerScreenX - state.translateX) / startScale;
|
|
20726
|
+
const centerWorldY = (centerScreenY - state.translateY) / startScale;
|
|
20727
|
+
if (targetScale === startScale || duration <= 0) {
|
|
20728
|
+
this.applyZoomAroundCenter(targetScale, centerScreenX, centerScreenY, centerWorldX, centerWorldY);
|
|
20729
|
+
state.isScaling = true;
|
|
20730
|
+
this._core.rerender();
|
|
20731
|
+
this._debounceUpdate();
|
|
20732
|
+
this._debounceEndScaling();
|
|
20733
|
+
return;
|
|
20734
|
+
}
|
|
20735
|
+
const startTime = performance.now();
|
|
20736
|
+
state.isScaling = true;
|
|
20737
|
+
const animate = (currentTime) => {
|
|
20738
|
+
const elapsed = currentTime - startTime;
|
|
20739
|
+
const progress = Math.min(elapsed / duration, 1);
|
|
20740
|
+
// easeInOutCubic for a smooth ramp in and out
|
|
20741
|
+
const eased = progress < 0.5 ? 4 * progress * progress * progress : 1 - Math.pow(-2 * progress + 2, 3) / 2;
|
|
20742
|
+
const frameScale = startScale + (targetScale - startScale) * eased;
|
|
20743
|
+
this.applyZoomAroundCenter(frameScale, centerScreenX, centerScreenY, centerWorldX, centerWorldY);
|
|
20744
|
+
this._core.rerender();
|
|
20745
|
+
if (progress < 1) {
|
|
20746
|
+
this._animationFrameId = requestAnimationFrame(animate);
|
|
20747
|
+
}
|
|
20748
|
+
else {
|
|
20749
|
+
this._animationFrameId = null;
|
|
20750
|
+
state.isScaling = false;
|
|
20751
|
+
this._core.rerender();
|
|
20752
|
+
this._debounceUpdate();
|
|
20753
|
+
}
|
|
20754
|
+
};
|
|
20755
|
+
this._animationFrameId = requestAnimationFrame(animate);
|
|
20756
|
+
}
|
|
20757
|
+
/**
|
|
20758
|
+
* Applies a single zoom step that keeps the given world point anchored to the
|
|
20759
|
+
* given screen point at the specified scale, clamped to the viewport boundaries.
|
|
20760
|
+
*/
|
|
20761
|
+
applyZoomAroundCenter(scale, screenX, screenY, worldX, worldY) {
|
|
20762
|
+
const state = this._core.store.state;
|
|
20763
|
+
state.scale = scale;
|
|
20764
|
+
const clamped = this.clampTranslate(screenX - worldX * scale, screenY - worldY * scale);
|
|
20765
|
+
state.translateX = clamped.translateX;
|
|
20766
|
+
state.translateY = clamped.translateY;
|
|
20767
|
+
state.hasViewportChanged = true;
|
|
20768
|
+
}
|
|
20682
20769
|
/**
|
|
20683
20770
|
* Centers a given object in the viewport without changing the scale.
|
|
20684
20771
|
* The object's center point will be positioned at the viewport center.
|
|
@@ -26993,6 +27080,9 @@ const KritzelEngine = class {
|
|
|
26993
27080
|
object.scale = object.scale ?? this.core.store.state.scale;
|
|
26994
27081
|
object.zIndex = this.core.store.currentZIndex;
|
|
26995
27082
|
object.workspaceId = this.core.store.state.activeWorkspace.id;
|
|
27083
|
+
if (schema_constants.KritzelClassHelper.isInstanceOf(object, 'KritzelImage')) {
|
|
27084
|
+
await object.prepareForInsert();
|
|
27085
|
+
}
|
|
26996
27086
|
// Handle KritzelText: recreate the editor now that _core is available
|
|
26997
27087
|
// The editor's dispatchTransaction callback needs _core for persisting changes
|
|
26998
27088
|
if (schema_constants.KritzelClassHelper.isInstanceOf(object, 'KritzelText')) {
|
|
@@ -27062,6 +27152,7 @@ const KritzelEngine = class {
|
|
|
27062
27152
|
await new Promise(resolve => {
|
|
27063
27153
|
requestAnimationFrame(() => requestAnimationFrame(() => resolve()));
|
|
27064
27154
|
});
|
|
27155
|
+
this.emitObjectsChange();
|
|
27065
27156
|
this.emitObjectsAdded([object]);
|
|
27066
27157
|
return object;
|
|
27067
27158
|
}
|
|
@@ -27077,6 +27168,12 @@ const KritzelEngine = class {
|
|
|
27077
27168
|
if (objects.length === 0) {
|
|
27078
27169
|
return [];
|
|
27079
27170
|
}
|
|
27171
|
+
for (const object of objects) {
|
|
27172
|
+
object._core = this.core;
|
|
27173
|
+
if (schema_constants.KritzelClassHelper.isInstanceOf(object, 'KritzelImage')) {
|
|
27174
|
+
await object.prepareForInsert();
|
|
27175
|
+
}
|
|
27176
|
+
}
|
|
27080
27177
|
this.core.store.objects.transaction(() => {
|
|
27081
27178
|
for (const object of objects) {
|
|
27082
27179
|
object.id = object.generateId();
|
|
@@ -27138,6 +27235,7 @@ const KritzelEngine = class {
|
|
|
27138
27235
|
await new Promise(resolve => {
|
|
27139
27236
|
requestAnimationFrame(() => requestAnimationFrame(() => resolve()));
|
|
27140
27237
|
});
|
|
27238
|
+
this.emitObjectsChange();
|
|
27141
27239
|
this.emitObjectsAdded(objects);
|
|
27142
27240
|
return objects;
|
|
27143
27241
|
}
|
|
@@ -27151,6 +27249,7 @@ const KritzelEngine = class {
|
|
|
27151
27249
|
this.core.deselectAllObjects();
|
|
27152
27250
|
this.core.updateObject(object, updatedProperties);
|
|
27153
27251
|
this.core.rerender();
|
|
27252
|
+
this.emitObjectsChange();
|
|
27154
27253
|
this.emitObjectsUpdated([{ object, changedProperties: Object.keys(updatedProperties) }]);
|
|
27155
27254
|
return object;
|
|
27156
27255
|
}
|
|
@@ -27167,6 +27266,7 @@ const KritzelEngine = class {
|
|
|
27167
27266
|
this.core.deselectAllObjects();
|
|
27168
27267
|
objectsMap.remove(o => o.id === object.id);
|
|
27169
27268
|
this.core.rerender();
|
|
27269
|
+
this.emitObjectsChange();
|
|
27170
27270
|
this.emitObjectsRemoved([object]);
|
|
27171
27271
|
return object;
|
|
27172
27272
|
}
|
|
@@ -27189,6 +27289,7 @@ const KritzelEngine = class {
|
|
|
27189
27289
|
}
|
|
27190
27290
|
});
|
|
27191
27291
|
this.core.rerender();
|
|
27292
|
+
this.emitObjectsChange();
|
|
27192
27293
|
this.emitObjectsRemoved(objects);
|
|
27193
27294
|
return objects;
|
|
27194
27295
|
}
|
|
@@ -27303,6 +27404,22 @@ const KritzelEngine = class {
|
|
|
27303
27404
|
async zoomTo(scale, worldX, worldY) {
|
|
27304
27405
|
this.viewport.zoomTo(scale, worldX, worldY);
|
|
27305
27406
|
}
|
|
27407
|
+
/**
|
|
27408
|
+
* Zooms in by a fixed step, centered on the current viewport center, with a smooth animation.
|
|
27409
|
+
* @param factor - Multiplicative zoom-in step.
|
|
27410
|
+
* @param duration - Animation duration in milliseconds.
|
|
27411
|
+
*/
|
|
27412
|
+
async zoomIn(factor, duration) {
|
|
27413
|
+
this.viewport.zoomIn(factor, duration);
|
|
27414
|
+
}
|
|
27415
|
+
/**
|
|
27416
|
+
* Zooms out by a fixed step, centered on the current viewport center, with a smooth animation.
|
|
27417
|
+
* @param factor - Multiplicative zoom-out step.
|
|
27418
|
+
* @param duration - Animation duration in milliseconds.
|
|
27419
|
+
*/
|
|
27420
|
+
async zoomOut(factor, duration) {
|
|
27421
|
+
this.viewport.zoomOut(factor, duration);
|
|
27422
|
+
}
|
|
27306
27423
|
/**
|
|
27307
27424
|
* Returns the current viewport state including position, scale, and dimensions.
|
|
27308
27425
|
* @returns The current viewport state.
|
|
@@ -27339,11 +27456,14 @@ const KritzelEngine = class {
|
|
|
27339
27456
|
/**
|
|
27340
27457
|
* Captures a screenshot of the current viewport as a data URL.
|
|
27341
27458
|
* @param format - The image format: `'png'` (default) or `'svg'`.
|
|
27459
|
+
* @param options - Optional screenshot settings.
|
|
27460
|
+
* @param options.includeBackground - Whether to include the canvas background in the export. Defaults to `true`. Set to `false` for a transparent background.
|
|
27342
27461
|
* @returns A data URL string of the captured image.
|
|
27343
27462
|
*/
|
|
27344
|
-
async getScreenshot(format = 'png') {
|
|
27463
|
+
async getScreenshot(format = 'png', options) {
|
|
27345
27464
|
if (!this.host)
|
|
27346
27465
|
return null;
|
|
27466
|
+
const includeBackground = options?.includeBackground ?? true;
|
|
27347
27467
|
// Save critical state before screenshot to restore after
|
|
27348
27468
|
const savedState = {
|
|
27349
27469
|
objects: this.core.store.objects,
|
|
@@ -27355,7 +27475,7 @@ const KritzelEngine = class {
|
|
|
27355
27475
|
translateY: this.core.store.state.translateY,
|
|
27356
27476
|
scale: this.core.store.state.scale,
|
|
27357
27477
|
};
|
|
27358
|
-
const
|
|
27478
|
+
const screenshotOptions = {
|
|
27359
27479
|
filter: (node) => {
|
|
27360
27480
|
// Exclude the context menu, debug panel, and awareness cursors from the screenshot
|
|
27361
27481
|
if (node.tagName === 'KRITZEL-CONTEXT-MENU') {
|
|
@@ -27370,13 +27490,16 @@ const KritzelEngine = class {
|
|
|
27370
27490
|
return true;
|
|
27371
27491
|
},
|
|
27372
27492
|
};
|
|
27493
|
+
if (!includeBackground) {
|
|
27494
|
+
screenshotOptions.backgroundColor = 'transparent';
|
|
27495
|
+
}
|
|
27373
27496
|
let result;
|
|
27374
27497
|
try {
|
|
27375
27498
|
if (format === 'svg') {
|
|
27376
|
-
result = await toSvg(this.host,
|
|
27499
|
+
result = await toSvg(this.host, screenshotOptions);
|
|
27377
27500
|
}
|
|
27378
27501
|
else {
|
|
27379
|
-
result = await toPng(this.host,
|
|
27502
|
+
result = await toPng(this.host, screenshotOptions);
|
|
27380
27503
|
}
|
|
27381
27504
|
}
|
|
27382
27505
|
finally {
|
|
@@ -27393,14 +27516,18 @@ const KritzelEngine = class {
|
|
|
27393
27516
|
}
|
|
27394
27517
|
return result;
|
|
27395
27518
|
}
|
|
27396
|
-
/**
|
|
27397
|
-
|
|
27519
|
+
/**
|
|
27520
|
+
* Exports the current viewport as a PNG file and triggers a browser download.
|
|
27521
|
+
* @param options - Optional export settings.
|
|
27522
|
+
* @param options.includeBackground - Whether to include the canvas background. Defaults to `true`.
|
|
27523
|
+
*/
|
|
27524
|
+
async exportViewportAsPng(options) {
|
|
27398
27525
|
try {
|
|
27399
27526
|
const activeWorkspaceName = this.core.store.state?.activeWorkspace?.name || 'workspace';
|
|
27400
27527
|
// timestamp format: YYYY-MM-DDTHH-mm-ss-sssZ, clearing colons/dots for safe filename
|
|
27401
27528
|
const timestamp = new Date().toISOString().replace(/[:.]/g, '-');
|
|
27402
27529
|
const filename = `${activeWorkspaceName}-${timestamp}.png`;
|
|
27403
|
-
const dataUrl = await this.getScreenshot('png');
|
|
27530
|
+
const dataUrl = await this.getScreenshot('png', options);
|
|
27404
27531
|
if (!dataUrl) {
|
|
27405
27532
|
console.error('Failed to export viewport as PNG: screenshot could not be generated');
|
|
27406
27533
|
return;
|
|
@@ -27414,14 +27541,18 @@ const KritzelEngine = class {
|
|
|
27414
27541
|
console.error('Failed to export viewport as PNG:', error);
|
|
27415
27542
|
}
|
|
27416
27543
|
}
|
|
27417
|
-
/**
|
|
27418
|
-
|
|
27544
|
+
/**
|
|
27545
|
+
* Exports the current viewport as an SVG file and triggers a browser download.
|
|
27546
|
+
* @param options - Optional export settings.
|
|
27547
|
+
* @param options.includeBackground - Whether to include the canvas background. Defaults to `true`.
|
|
27548
|
+
*/
|
|
27549
|
+
async exportViewportAsSvg(options) {
|
|
27419
27550
|
try {
|
|
27420
27551
|
const activeWorkspaceName = this.core.store.state?.activeWorkspace?.name || 'workspace';
|
|
27421
27552
|
// timestamp format: YYYY-MM-DDTHH-mm-ss-sssZ, clearing colons/dots for safe filename
|
|
27422
27553
|
const timestamp = new Date().toISOString().replace(/[:.]/g, '-');
|
|
27423
27554
|
const filename = `${activeWorkspaceName}-${timestamp}.svg`;
|
|
27424
|
-
const dataUrl = await this.getScreenshot('svg');
|
|
27555
|
+
const dataUrl = await this.getScreenshot('svg', options);
|
|
27425
27556
|
if (!dataUrl) {
|
|
27426
27557
|
console.error('Failed to export viewport as SVG: screenshot could not be generated');
|
|
27427
27558
|
return;
|
|
@@ -29991,7 +30122,7 @@ const KritzelPortal = class {
|
|
|
29991
30122
|
* This file is auto-generated by the version bump scripts.
|
|
29992
30123
|
* Do not modify manually.
|
|
29993
30124
|
*/
|
|
29994
|
-
const KRITZEL_VERSION = '0.3.
|
|
30125
|
+
const KRITZEL_VERSION = '0.3.15';
|
|
29995
30126
|
|
|
29996
30127
|
const kritzelSettingsCss = () => `:host{display:contents}kritzel-dialog{--kritzel-dialog-body-padding:0;--kritzel-dialog-width-large:800px;--kritzel-dialog-height-large:500px}.footer-button{padding:8px 16px;border-radius:6px;cursor:pointer;font-size:14px}.cancel-button{border:1px solid #ebebeb;background:#fff;color:inherit}.cancel-button:hover{background:#f5f5f5}.settings-content{padding:0}.settings-content h3{margin:0 0 16px 0;font-size:18px;font-weight:600;color:var(--kritzel-settings-content-heading-color, #333333)}.settings-content p{margin:0;font-size:14px;color:var(--kritzel-settings-content-text-color, #666666);line-height:1.5}.settings-group{display:flex;flex-direction:column;gap:24px}.settings-item{display:flex;flex-direction:column;gap:8px}.settings-row{display:flex;align-items:center;justify-content:space-between;gap:16px}.settings-label{font-size:14px;font-weight:600;color:var(--kritzel-settings-label-color, #333333);margin:0 0 4px 0}.settings-description{font-size:12px;color:var(--kritzel-settings-description-color, #888888);margin:0;line-height:1.4}.shortcuts-list{display:flex;flex-direction:column;gap:24px}.shortcuts-category{display:flex;flex-direction:column;gap:8px}.shortcuts-category-title{font-size:14px;font-weight:600;color:var(--kritzel-settings-label-color, #333333);margin:0 0 4px 0}.shortcuts-group{display:flex;flex-direction:column;gap:4px}.shortcut-item{display:flex;justify-content:space-between;align-items:center;padding:6px 8px;border-radius:4px;background:var(--kritzel-settings-shortcut-item-bg, rgba(0, 0, 0, 0.02))}.shortcut-label{font-size:14px;color:var(--kritzel-settings-content-text-color, #666666)}.shortcut-key{font-family:monospace;font-size:12px;padding:2px 8px;border-radius:4px;background:var(--kritzel-settings-shortcut-key-bg, #f0f0f0);color:var(--kritzel-settings-shortcut-key-color, #333333);border:1px solid var(--kritzel-settings-shortcut-key-border, #ddd)}`;
|
|
29997
30128
|
|
package/dist/cjs/loader.cjs.js
CHANGED
|
@@ -6,7 +6,7 @@ var appGlobals = require('./app-globals-V2Kpy_OQ.js');
|
|
|
6
6
|
const defineCustomElements = async (win, options) => {
|
|
7
7
|
if (typeof window === 'undefined') return undefined;
|
|
8
8
|
await appGlobals.globalScripts();
|
|
9
|
-
return index.bootstrapLazy(JSON.parse("[[\"kritzel-active-users_42.cjs\",[[512,\"kritzel-editor\",{\"scaleMax\":[1026,\"scale-max\"],\"scaleMin\":[1026,\"scale-min\"],\"lockDrawingScale\":[1028,\"lock-drawing-scale\"],\"viewportBoundaryLeft\":[1026,\"viewport-boundary-left\"],\"viewportBoundaryRight\":[1026,\"viewport-boundary-right\"],\"viewportBoundaryTop\":[1026,\"viewport-boundary-top\"],\"viewportBoundaryBottom\":[1026,\"viewport-boundary-bottom\"],\"wheelEnabled\":[1028,\"wheel-enabled\"],\"debugInfo\":[1040],\"user\":[16],\"activeUsers\":[16],\"controls\":[16],\"globalContextMenuItems\":[16],\"objectContextMenuItems\":[16],\"themes\":[16],\"theme\":[1025],\"customSvgIcons\":[16],\"isControlsVisible\":[4,\"is-controls-visible\"],\"isUtilityPanelVisible\":[4,\"is-utility-panel-visible\"],\"isWorkspaceManagerVisible\":[4,\"is-workspace-manager-visible\"],\"isMoreMenuVisible\":[4,\"is-more-menu-visible\"],\"isObjectDistanceFadingActive\":[4,\"is-object-distance-fading-active\"],\"syncConfig\":[16],\"assetStorageConfig\":[16],\"cursorTarget\":[16],\"loginConfig\":[16],\"isLoading\":[4,\"is-loading\"],\"editorId\":[1,\"editor-id\"],\"activeWorkspaceId\":[1,\"active-workspace-id\"],\"isEngineReady\":[32],\"isControlsReady\":[32],\"isWorkspaceManagerReady\":[32],\"workspaces\":[32],\"activeWorkspace\":[32],\"isVirtualKeyboardOpen\":[32],\"undoState\":[32],\"isBackToContentButtonVisible\":[32],\"shortcuts\":[32],\"currentIsPublic\":[32],\"isEditorVisible\":[32],\"getObjectById\":[64],\"addObject\":[64],\"addObjects\":[64],\"updateObject\":[64],\"removeObject\":[64],\"removeObjects\":[64],\"getSelectedObjects\":[64],\"selectObjects\":[64],\"selectAllObjectsInViewport\":[64],\"clearSelection\":[64],\"centerObjectInViewport\":[64],\"panToObject\":[64],\"backToContent\":[64],\"centerAllObjects\":[64],\"centerObjects\":[64],\"setViewport\":[64],\"panTo\":[64],\"zoomTo\":[64],\"getViewport\":[64],\"screenToWorld\":[64],\"worldToScreen\":[64],\"createWorkspace\":[64],\"updateWorkspace\":[64],\"deleteWorkspace\":[64],\"getWorkspaces\":[64],\"getActiveWorkspace\":[64],\"loadSharedWorkspace\":[64],\"reinitSync\":[64],\"registerTool\":[64],\"changeActiveTool\":[64],\"changeActiveToolByName\":[64],\"disable\":[64],\"enable\":[64],\"copy\":[64],\"cut\":[64],\"paste\":[64],\"delete\":[64],\"bringForward\":[64],\"sendBackward\":[64],\"bringToFront\":[64],\"sendToBack\":[64],\"alignObjects\":[64],\"group\":[64],\"ungroup\":[64],\"undo\":[64],\"redo\":[64],\"getScreenshot\":[64],\"exportViewportAsPng\":[64],\"exportViewportAsSvg\":[64],\"exportSelectedObjectsAsPng\":[64],\"exportSelectedObjectsAsSvg\":[64],\"downloadAsJson\":[64],\"importFromFile\":[64],\"loadObjectsFromJson\":[64],\"getObjectsTotalCount\":[64],\"getAllObjects\":[64],\"findObjects\":[64],\"getCopiedObjects\":[64],\"getObjectsInViewport\":[64],\"hideContextMenu\":[64],\"openContextMenu\":[64],\"triggerSelectionChange\":[64],\"getDisplayableShortcuts\":[64],\"openLoginDialog\":[64],\"setLoginLoading\":[64]},[[0,\"dblclick\",\"onTouchStart\"]],{\"isEngineReady\":[{\"onIsEngineReady\":0}],\"isControlsReady\":[{\"onIsControlsReady\":0}],\"workspaces\":[{\"onWorkspacesChange\":0}],\"activeWorkspace\":[{\"onActiveWorkspaceChange\":0}],\"activeWorkspaceId\":[{\"onActiveWorkspaceIdChange\":0}],\"theme\":[{\"onCurrentThemeChange\":0}],\"themes\":[{\"onThemesChange\":0}]}],[513,\"kritzel-controls\",{\"visible\":[4],\"controls\":[16],\"activeControl\":[1040],\"isUtilityPanelVisible\":[4,\"is-utility-panel-visible\"],\"undoState\":[16],\"theme\":[1],\"firstConfig\":[32],\"isTouchDevice\":[32],\"selectedSubOptions\":[32],\"canScrollLeft\":[32],\"canScrollRight\":[32],\"needsScrolling\":[32],\"displayValues\":[32],\"internalControls\":[32],\"closeTooltip\":[64]},[[8,\"keydown\",\"handleKeyDown\"]],{\"controls\":[{\"onControlsChange\":0}],\"theme\":[{\"onThemeChange\":0}]}],[513,\"kritzel-settings\",{\"availableThemes\":[16],\"shortcuts\":[16],\"settings\":[16],\"isDialogOpen\":[32],\"selectedCategoryId\":[32],\"scaleMin\":[32],\"scaleMax\":[32],\"lockDrawingScale\":[32],\"theme\":[32],\"viewportBoundaryLeft\":[32],\"viewportBoundaryRight\":[32],\"viewportBoundaryTop\":[32],\"viewportBoundaryBottom\":[32],\"debugInfo\":[32],\"open\":[64]},null,{\"settings\":[{\"onSettingsPropChange\":0}]}],[513,\"kritzel-export\",{\"workspaceName\":[1,\"workspace-name\"],\"isDialogOpen\":[32],\"previewUrl\":[32],\"isLoading\":[32],\"activeTab\":[32],\"exportFilename\":[32],\"viewportExportFormat\":[32],\"open\":[64]}],[513,\"kritzel-workspace-manager\",{\"visible\":[4],\"activeWorkspace\":[1040],\"workspaces\":[16],\"childMenuAnchor\":[32],\"openChildMenuItem\":[32],\"newWorkspace\":[32],\"editingItemId\":[32]},[[8,\"wheel\",\"handleWheel\"]]],[513,\"kritzel-engine\",{\"workspace\":[16],\"editorId\":[1,\"editor-id\"],\"activeWorkspaceId\":[1,\"active-workspace-id\"],\"syncConfig\":[16],\"assetStorageConfig\":[16],\"user\":[16],\"globalContextMenuItems\":[16],\"objectContextMenuItems\":[16],\"scaleMax\":[1026,\"scale-max\"],\"scaleMin\":[1026,\"scale-min\"],\"cursorTarget\":[16],\"lockDrawingScale\":[4,\"lock-drawing-scale\"],\"isObjectDistanceFadingActive\":[4,\"is-object-distance-fading-active\"],\"theme\":[1],\"themes\":[16],\"viewportBoundaryLeft\":[2,\"viewport-boundary-left\"],\"viewportBoundaryRight\":[2,\"viewport-boundary-right\"],\"viewportBoundaryTop\":[2,\"viewport-boundary-top\"],\"viewportBoundaryBottom\":[2,\"viewport-boundary-bottom\"],\"debugInfo\":[16],\"wheelEnabled\":[4,\"wheel-enabled\"],\"isLoading\":[4,\"is-loading\"],\"forceUpdate\":[32],\"triggerSelectionChange\":[64],\"registerTool\":[64],\"changeActiveTool\":[64],\"changeActiveToolByName\":[64],\"disable\":[64],\"enable\":[64],\"delete\":[64],\"copy\":[64],\"cut\":[64],\"paste\":[64],\"bringForward\":[64],\"sendBackward\":[64],\"bringToFront\":[64],\"sendToBack\":[64],\"alignObjects\":[64],\"group\":[64],\"ungroup\":[64],\"undo\":[64],\"redo\":[64],\"hideContextMenu\":[64],\"openContextMenu\":[64],\"getObjectById\":[64],\"getAllObjects\":[64],\"findObjects\":[64],\"getObjectsTotalCount\":[64],\"addObject\":[64],\"addObjects\":[64],\"updateObject\":[64],\"removeObject\":[64],\"removeObjects\":[64],\"getSelectedObjects\":[64],\"getDisplayableShortcuts\":[64],\"selectObjects\":[64],\"selectAllObjectsInViewport\":[64],\"clearSelection\":[64],\"centerObjectInViewport\":[64],\"panToObject\":[64],\"backToContent\":[64],\"centerAllObjects\":[64],\"centerObjects\":[64],\"setViewport\":[64],\"panTo\":[64],\"zoomTo\":[64],\"getViewport\":[64],\"screenToWorld\":[64],\"worldToScreen\":[64],\"getCopiedObjects\":[64],\"getObjectsInViewport\":[64],\"getScreenshot\":[64],\"exportViewportAsPng\":[64],\"exportViewportAsSvg\":[64],\"getSelectedObjectsAsSvgString\":[64],\"exportSelectedObjectsAsSvg\":[64],\"getSelectedObjectsAsPngDataUrl\":[64],\"exportSelectedObjectsAsPng\":[64],\"exportAsJson\":[64],\"importFromJson\":[64],\"loadObjectsFromJson\":[64],\"downloadAsJson\":[64],\"importFromFile\":[64],\"createWorkspace\":[64],\"updateWorkspace\":[64],\"deleteWorkspace\":[64],\"getWorkspaces\":[64],\"getActiveWorkspace\":[64],\"getIsPublic\":[64],\"loadSharedWorkspace\":[64],\"reinitSync\":[64],\"saveSettings\":[64],\"loadSettings\":[64]},[[1,\"wheel\",\"handleWheel\"],[0,\"pointerdown\",\"handlePointerDown\"],[0,\"pointermove\",\"handlePointerMove\"],[0,\"pointerup\",\"handlePointerUp\"],[0,\"pointercancel\",\"handlePointerCancel\"],[1,\"pointerleave\",\"handlePointerLeave\"],[1,\"longpress\",\"handleLongPress\"],[0,\"contextmenu\",\"handleContextMenu\"],[9,\"resize\",\"handleResize\"],[8,\"keydown\",\"handleKeyDown\"],[8,\"keyup\",\"handleKeyUp\"],[4,\"dblclick\",\"preventDoubleTapZoomOnTouchDevices\"]],{\"workspace\":[{\"onWorkspaceChange\":0}],\"activeWorkspaceId\":[{\"onActiveWorkspaceIdChange\":0}],\"syncConfig\":[{\"onSyncConfigChange\":0}],\"assetStorageConfig\":[{\"onAssetStorageConfigChange\":0}],\"user\":[{\"onUserChange\":0}],\"globalContextMenuItems\":[{\"onGlobalContextMenuItemsChange\":0}],\"objectContextMenuItems\":[{\"onObjectContextMenuItemsChange\":0}],\"scaleMax\":[{\"validateScaleMax\":0}],\"scaleMin\":[{\"validateScaleMin\":0}],\"cursorTarget\":[{\"onCursorTargetChange\":0}],\"lockDrawingScale\":[{\"onLockDrawingScaleChange\":0}],\"isObjectDistanceFadingActive\":[{\"onIsObjectDistanceFadingActiveChange\":0}],\"theme\":[{\"onThemeChange\":0}],\"themes\":[{\"onThemesChange\":0}],\"viewportBoundaryLeft\":[{\"onViewportBoundaryLeftChange\":0}],\"viewportBoundaryRight\":[{\"onViewportBoundaryRightChange\":0}],\"viewportBoundaryTop\":[{\"onViewportBoundaryTopChange\":0}],\"viewportBoundaryBottom\":[{\"onViewportBoundaryBottomChange\":0}],\"debugInfo\":[{\"onDebugInfoChange\":0}],\"isLoading\":[{\"onIsLoadingChange\":0}]}],[513,\"kritzel-more-menu\",{\"visible\":[4],\"items\":[16],\"icon\":[1],\"iconSize\":[2,\"icon-size\"],\"offsetY\":[2,\"offset-y\"],\"menuAnchor\":[32],\"isTouchDevice\":[32]}],[513,\"kritzel-current-user\",{\"user\":[16],\"avatarSize\":[2,\"avatar-size\"]}],[513,\"kritzel-share-dialog\",{\"isPublic\":[4,\"is-public\"],\"workspaceId\":[1,\"workspace-id\"],\"isDialogOpen\":[32],\"internalIsPublic\":[32],\"copySuccess\":[32],\"open\":[64],\"close\":[64]},null,{\"isPublic\":[{\"onIsPublicChange\":0}]}],[513,\"kritzel-login-dialog\",{\"providers\":[16],\"dialogTitle\":[1,\"dialog-title\"],\"subtitle\":[1],\"isDialogOpen\":[32],\"loadingProvider\":[32],\"open\":[64],\"close\":[64],\"setLoading\":[64]}],[513,\"kritzel-active-users\",{\"users\":[16],\"avatarSize\":[2,\"avatar-size\"],\"maxVisible\":[2,\"max-visible\"],\"overlap\":[2]}],[513,\"kritzel-back-to-content\",{\"visible\":[4],\"text\":[1]}],[769,\"kritzel-button\",{\"variant\":[1],\"disabled\":[4],\"type\":[1]}],[513,\"kritzel-tool-config\",{\"tool\":[1040],\"isExpanded\":[1028,\"is-expanded\"],\"theme\":[1],\"engine\":[16],\"config\":[32],\"palette\":[32],\"sizes\":[32],\"currentOpacity\":[32],\"updateTrigger\":[32]},null,{\"tool\":[{\"handleToolChange\":0}],\"theme\":[{\"onThemeChange\":0}],\"engine\":[{\"handleEngineChange\":0}]}],[513,\"kritzel-split-button\",{\"buttonIcon\":[1,\"button-icon\"],\"dropdownIcon\":[1,\"dropdown-icon\"],\"items\":[16],\"mainButtonDisabled\":[4,\"main-button-disabled\"],\"menuButtonDisabled\":[4,\"menu-button-disabled\"],\"isMenuOpen\":[32],\"isTouchDevice\":[32],\"anchorElement\":[32],\"menuScrollTop\":[32],\"open\":[64],\"focusMenu\":[64]}],[513,\"kritzel-current-user-dialog\",{\"user\":[16],\"isDialogOpen\":[32],\"open\":[64],\"close\":[64]}],[513,\"kritzel-context-menu\",{\"items\":[16],\"objects\":[16],\"processedItems\":[32],\"openSubmenuPath\":[32],\"submenuPositions\":[32]},[[9,\"pointerdown\",\"handleOutsideClick\"]],{\"items\":[{\"onItemsChanged\":0}]}],[769,\"kritzel-master-detail\",{\"items\":[16],\"selectedItemId\":[1,\"selected-item-id\"],\"focusedIndex\":[32],\"showMobileDetail\":[32]},null,{\"selectedItemId\":[{\"watchSelectedItemId\":0}]}],[513,\"kritzel-pill-tabs\",{\"tabs\":[16],\"value\":[1025]}],[513,\"kritzel-utility-panel\",{\"undoState\":[16]}],[513,\"kritzel-awareness-cursors\",{\"core\":[16],\"showEdgeIndicators\":[4,\"show-edge-indicators\"],\"edgeIndicatorPadding\":[2,\"edge-indicator-padding\"],\"remoteCursors\":[32],\"objectVersion\":[32]}],[513,\"kritzel-cursor-trail\",{\"core\":[16],\"cursorTrailPoints\":[32],\"isLeftButtonDown\":[32]},[[9,\"pointerdown\",\"handleMouseDown\"],[9,\"pointermove\",\"handlePointerMove\"],[9,\"pointerup\",\"handlePointerUp\"]]],[513,\"kritzel-input\",{\"value\":[1025],\"label\":[1],\"placeholder\":[1],\"suffix\":[1],\"type\":[1],\"disabled\":[4],\"inputValue\":[32]},null,{\"value\":[{\"onValueChange\":0}]}],[513,\"kritzel-numeric-input\",{\"value\":[1026],\"min\":[2],\"max\":[2],\"step\":[2],\"label\":[1],\"placeholder\":[1],\"inputValue\":[32]},null,{\"value\":[{\"onValueChange\":0}]}],[769,\"kritzel-tooltip\",{\"isVisible\":[1028,\"is-visible\"],\"anchorElement\":[16],\"triggerElement\":[16],\"offsetY\":[2,\"offset-y\"],\"positionX\":[32],\"positionY\":[32],\"open\":[64],\"close\":[64],\"toggle\":[64],\"focusContent\":[64]},[[4,\"click\",\"handleOutsideClick\"],[6,\"pointerdown\",\"handleOutsidePointerDown\"],[4,\"kritzelTooltipCloseAll\",\"handleCloseAll\"],[9,\"resize\",\"handleWindowResize\"]],{\"triggerElement\":[{\"handleTriggerElementChange\":0}],\"isVisible\":[{\"handleVisibilityChange\":0}]}],[513,\"kritzel-color-palette\",{\"colors\":[16],\"selectedColor\":[1040],\"isExpanded\":[4,\"is-expanded\"],\"isOpaque\":[4,\"is-opaque\"],\"opacity\":[2],\"theme\":[1]}],[513,\"kritzel-font-family\",{\"fontOptions\":[16],\"selectedFontFamily\":[1025,\"selected-font-family\"]}],[513,\"kritzel-font-size\",{\"sizes\":[16],\"selectedSize\":[1026,\"selected-size\"],\"fontFamily\":[1,\"font-family\"]}],[513,\"kritzel-stroke-size\",{\"sizes\":[16],\"selectedSize\":[1026,\"selected-size\"]}],[513,\"kritzel-line-endings\",{\"styles\":[16],\"value\":[1040]}],[513,\"kritzel-opacity-slider\",{\"value\":[1026],\"min\":[2],\"max\":[2],\"step\":[2],\"previewColor\":[1,\"preview-color\"]}],[513,\"kritzel-shape-fill\",{\"value\":[1025]}],[513,\"kritzel-slide-toggle\",{\"checked\":[1028],\"disabled\":[4],\"label\":[1]}],[513,\"kritzel-avatar\",{\"user\":[16],\"name\":[1],\"size\":[2],\"color\":[1],\"imageError\":[32]},null,{\"user\":[{\"userChanged\":0}],\"profileImageUrl\":[{\"profileImageUrlChanged\":0}]}],[513,\"kritzel-font\",{\"fontFamily\":[1,\"font-family\"],\"size\":[2],\"color\":[1]}],[513,\"kritzel-color\",{\"value\":[1],\"theme\":[1],\"size\":[2]}],[513,\"kritzel-menu\",{\"items\":[16],\"parent\":[16],\"selectedIndex\":[32],\"setScrollTop\":[64],\"setFocus\":[64]}],[513,\"kritzel-menu-item\",{\"item\":[16],\"parent\":[16],\"isDirty\":[32]},null,{\"item\":[{\"onItemChange\":0}]}],[769,\"kritzel-portal\",{\"anchor\":[16],\"offsetX\":[2,\"offset-x\"],\"offsetY\":[2,\"offset-y\"],\"autoFocus\":[4,\"auto-focus\"]},[[8,\"kritzel-dismiss-menus\",\"handleDismissMenus\"],[8,\"click\",\"handleOutsideClick\"],[6,\"pointerdown\",\"handleOutsidePointerDown\"],[8,\"keydown\",\"handleKeyDown\"],[11,\"resize\",\"handleResize\"],[11,\"scroll\",\"handleWindowScroll\"]],{\"anchor\":[{\"anchorChanged\":0}]}],[769,\"kritzel-dialog\",{\"isOpen\":[516,\"is-open\"],\"dialogTitle\":[1,\"dialog-title\"],\"closable\":[4],\"closeOnBackdrop\":[4,\"close-on-backdrop\"],\"closeOnEscape\":[4,\"close-on-escape\"],\"autoFocus\":[4,\"auto-focus\"],\"trapFocus\":[4,\"trap-focus\"],\"size\":[1],\"fullscreenOnMobile\":[4,\"fullscreen-on-mobile\"],\"contained\":[516],\"isAnimating\":[32],\"mobileLockedHeight\":[32],\"containerRect\":[32],\"containerBorderRadius\":[32],\"open\":[64],\"close\":[64],\"focusFirstElement\":[64]},[[8,\"keydown\",\"handleKeyDown\"],[9,\"resize\",\"handleWindowResize\"],[8,\"orientationchange\",\"handleOrientationChange\"]],{\"isOpen\":[{\"handleIsOpenChange\":0}]}],[769,\"kritzel-dropdown\",{\"options\":[16],\"value\":[1],\"width\":[1],\"selectStyles\":[16],\"forceOpenDirection\":[1,\"force-open-direction\"],\"internalValue\":[32],\"hasSuffixContent\":[32],\"hasPrefixContent\":[32],\"isOpen\":[32],\"focusedIndex\":[32],\"openDirection\":[32]},[[4,\"click\",\"handleDocumentClick\"],[4,\"keydown\",\"handleDocumentKeydown\"]],{\"options\":[{\"optionsChanged\":0}],\"value\":[{\"externalValueChanged\":0}]}],[513,\"kritzel-icon\",{\"name\":[1],\"label\":[1],\"size\":[2]}]]],[\"kritzel-brush-style.cjs\",[[513,\"kritzel-brush-style\",{\"type\":[1],\"brushOptions\":[16]}]]]]"), options);
|
|
9
|
+
return index.bootstrapLazy(JSON.parse("[[\"kritzel-active-users_42.cjs\",[[512,\"kritzel-editor\",{\"scaleMax\":[1026,\"scale-max\"],\"scaleMin\":[1026,\"scale-min\"],\"lockDrawingScale\":[1028,\"lock-drawing-scale\"],\"viewportBoundaryLeft\":[1026,\"viewport-boundary-left\"],\"viewportBoundaryRight\":[1026,\"viewport-boundary-right\"],\"viewportBoundaryTop\":[1026,\"viewport-boundary-top\"],\"viewportBoundaryBottom\":[1026,\"viewport-boundary-bottom\"],\"wheelEnabled\":[1028,\"wheel-enabled\"],\"debugInfo\":[1040],\"user\":[16],\"activeUsers\":[16],\"controls\":[16],\"globalContextMenuItems\":[16],\"objectContextMenuItems\":[16],\"themes\":[16],\"theme\":[1025],\"customSvgIcons\":[16],\"isControlsVisible\":[4,\"is-controls-visible\"],\"isUtilityPanelVisible\":[4,\"is-utility-panel-visible\"],\"isWorkspaceManagerVisible\":[4,\"is-workspace-manager-visible\"],\"isMoreMenuVisible\":[4,\"is-more-menu-visible\"],\"isObjectDistanceFadingActive\":[4,\"is-object-distance-fading-active\"],\"syncConfig\":[16],\"assetStorageConfig\":[16],\"cursorTarget\":[16],\"loginConfig\":[16],\"isLoading\":[4,\"is-loading\"],\"editorId\":[1,\"editor-id\"],\"activeWorkspaceId\":[1,\"active-workspace-id\"],\"isEngineReady\":[32],\"isControlsReady\":[32],\"isWorkspaceManagerReady\":[32],\"workspaces\":[32],\"activeWorkspace\":[32],\"isVirtualKeyboardOpen\":[32],\"undoState\":[32],\"isBackToContentButtonVisible\":[32],\"shortcuts\":[32],\"currentIsPublic\":[32],\"isEditorVisible\":[32],\"getObjectById\":[64],\"addObject\":[64],\"addObjects\":[64],\"updateObject\":[64],\"removeObject\":[64],\"removeObjects\":[64],\"getSelectedObjects\":[64],\"selectObjects\":[64],\"selectAllObjectsInViewport\":[64],\"clearSelection\":[64],\"centerObjectInViewport\":[64],\"panToObject\":[64],\"backToContent\":[64],\"centerAllObjects\":[64],\"centerObjects\":[64],\"setViewport\":[64],\"panTo\":[64],\"zoomTo\":[64],\"zoomIn\":[64],\"zoomOut\":[64],\"getViewport\":[64],\"screenToWorld\":[64],\"worldToScreen\":[64],\"createWorkspace\":[64],\"updateWorkspace\":[64],\"deleteWorkspace\":[64],\"getWorkspaces\":[64],\"getActiveWorkspace\":[64],\"loadSharedWorkspace\":[64],\"reinitSync\":[64],\"registerTool\":[64],\"changeActiveTool\":[64],\"changeActiveToolByName\":[64],\"disable\":[64],\"enable\":[64],\"copy\":[64],\"cut\":[64],\"paste\":[64],\"delete\":[64],\"bringForward\":[64],\"sendBackward\":[64],\"bringToFront\":[64],\"sendToBack\":[64],\"alignObjects\":[64],\"group\":[64],\"ungroup\":[64],\"undo\":[64],\"redo\":[64],\"getScreenshot\":[64],\"exportViewportAsPng\":[64],\"exportViewportAsSvg\":[64],\"exportSelectedObjectsAsPng\":[64],\"exportSelectedObjectsAsSvg\":[64],\"downloadAsJson\":[64],\"importFromFile\":[64],\"loadObjectsFromJson\":[64],\"getObjectsTotalCount\":[64],\"getAllObjects\":[64],\"findObjects\":[64],\"getCopiedObjects\":[64],\"getObjectsInViewport\":[64],\"hideContextMenu\":[64],\"openContextMenu\":[64],\"triggerSelectionChange\":[64],\"getDisplayableShortcuts\":[64],\"openLoginDialog\":[64],\"setLoginLoading\":[64]},[[0,\"dblclick\",\"onTouchStart\"]],{\"isEngineReady\":[{\"onIsEngineReady\":0}],\"isControlsReady\":[{\"onIsControlsReady\":0}],\"workspaces\":[{\"onWorkspacesChange\":0}],\"activeWorkspace\":[{\"onActiveWorkspaceChange\":0}],\"activeWorkspaceId\":[{\"onActiveWorkspaceIdChange\":0}],\"theme\":[{\"onCurrentThemeChange\":0}],\"themes\":[{\"onThemesChange\":0}]}],[513,\"kritzel-controls\",{\"visible\":[4],\"controls\":[16],\"activeControl\":[1040],\"isUtilityPanelVisible\":[4,\"is-utility-panel-visible\"],\"undoState\":[16],\"theme\":[1],\"firstConfig\":[32],\"isTouchDevice\":[32],\"selectedSubOptions\":[32],\"canScrollLeft\":[32],\"canScrollRight\":[32],\"needsScrolling\":[32],\"displayValues\":[32],\"internalControls\":[32],\"closeTooltip\":[64]},[[8,\"keydown\",\"handleKeyDown\"]],{\"controls\":[{\"onControlsChange\":0}],\"theme\":[{\"onThemeChange\":0}]}],[513,\"kritzel-settings\",{\"availableThemes\":[16],\"shortcuts\":[16],\"settings\":[16],\"isDialogOpen\":[32],\"selectedCategoryId\":[32],\"scaleMin\":[32],\"scaleMax\":[32],\"lockDrawingScale\":[32],\"theme\":[32],\"viewportBoundaryLeft\":[32],\"viewportBoundaryRight\":[32],\"viewportBoundaryTop\":[32],\"viewportBoundaryBottom\":[32],\"debugInfo\":[32],\"open\":[64]},null,{\"settings\":[{\"onSettingsPropChange\":0}]}],[513,\"kritzel-export\",{\"workspaceName\":[1,\"workspace-name\"],\"isDialogOpen\":[32],\"previewUrl\":[32],\"isLoading\":[32],\"activeTab\":[32],\"exportFilename\":[32],\"viewportExportFormat\":[32],\"open\":[64]}],[513,\"kritzel-workspace-manager\",{\"visible\":[4],\"activeWorkspace\":[1040],\"workspaces\":[16],\"childMenuAnchor\":[32],\"openChildMenuItem\":[32],\"newWorkspace\":[32],\"editingItemId\":[32]},[[8,\"wheel\",\"handleWheel\"]]],[513,\"kritzel-engine\",{\"workspace\":[16],\"editorId\":[1,\"editor-id\"],\"activeWorkspaceId\":[1,\"active-workspace-id\"],\"syncConfig\":[16],\"assetStorageConfig\":[16],\"user\":[16],\"globalContextMenuItems\":[16],\"objectContextMenuItems\":[16],\"scaleMax\":[1026,\"scale-max\"],\"scaleMin\":[1026,\"scale-min\"],\"cursorTarget\":[16],\"lockDrawingScale\":[4,\"lock-drawing-scale\"],\"isObjectDistanceFadingActive\":[4,\"is-object-distance-fading-active\"],\"theme\":[1],\"themes\":[16],\"viewportBoundaryLeft\":[2,\"viewport-boundary-left\"],\"viewportBoundaryRight\":[2,\"viewport-boundary-right\"],\"viewportBoundaryTop\":[2,\"viewport-boundary-top\"],\"viewportBoundaryBottom\":[2,\"viewport-boundary-bottom\"],\"debugInfo\":[16],\"wheelEnabled\":[4,\"wheel-enabled\"],\"isLoading\":[4,\"is-loading\"],\"forceUpdate\":[32],\"triggerSelectionChange\":[64],\"registerTool\":[64],\"changeActiveTool\":[64],\"changeActiveToolByName\":[64],\"disable\":[64],\"enable\":[64],\"delete\":[64],\"copy\":[64],\"cut\":[64],\"paste\":[64],\"bringForward\":[64],\"sendBackward\":[64],\"bringToFront\":[64],\"sendToBack\":[64],\"alignObjects\":[64],\"group\":[64],\"ungroup\":[64],\"undo\":[64],\"redo\":[64],\"hideContextMenu\":[64],\"openContextMenu\":[64],\"getObjectById\":[64],\"getAllObjects\":[64],\"findObjects\":[64],\"getObjectsTotalCount\":[64],\"addObject\":[64],\"addObjects\":[64],\"updateObject\":[64],\"removeObject\":[64],\"removeObjects\":[64],\"getSelectedObjects\":[64],\"getDisplayableShortcuts\":[64],\"selectObjects\":[64],\"selectAllObjectsInViewport\":[64],\"clearSelection\":[64],\"centerObjectInViewport\":[64],\"panToObject\":[64],\"backToContent\":[64],\"centerAllObjects\":[64],\"centerObjects\":[64],\"setViewport\":[64],\"panTo\":[64],\"zoomTo\":[64],\"zoomIn\":[64],\"zoomOut\":[64],\"getViewport\":[64],\"screenToWorld\":[64],\"worldToScreen\":[64],\"getCopiedObjects\":[64],\"getObjectsInViewport\":[64],\"getScreenshot\":[64],\"exportViewportAsPng\":[64],\"exportViewportAsSvg\":[64],\"getSelectedObjectsAsSvgString\":[64],\"exportSelectedObjectsAsSvg\":[64],\"getSelectedObjectsAsPngDataUrl\":[64],\"exportSelectedObjectsAsPng\":[64],\"exportAsJson\":[64],\"importFromJson\":[64],\"loadObjectsFromJson\":[64],\"downloadAsJson\":[64],\"importFromFile\":[64],\"createWorkspace\":[64],\"updateWorkspace\":[64],\"deleteWorkspace\":[64],\"getWorkspaces\":[64],\"getActiveWorkspace\":[64],\"getIsPublic\":[64],\"loadSharedWorkspace\":[64],\"reinitSync\":[64],\"saveSettings\":[64],\"loadSettings\":[64]},[[1,\"wheel\",\"handleWheel\"],[0,\"pointerdown\",\"handlePointerDown\"],[0,\"pointermove\",\"handlePointerMove\"],[0,\"pointerup\",\"handlePointerUp\"],[0,\"pointercancel\",\"handlePointerCancel\"],[1,\"pointerleave\",\"handlePointerLeave\"],[1,\"longpress\",\"handleLongPress\"],[0,\"contextmenu\",\"handleContextMenu\"],[9,\"resize\",\"handleResize\"],[8,\"keydown\",\"handleKeyDown\"],[8,\"keyup\",\"handleKeyUp\"],[4,\"dblclick\",\"preventDoubleTapZoomOnTouchDevices\"]],{\"workspace\":[{\"onWorkspaceChange\":0}],\"activeWorkspaceId\":[{\"onActiveWorkspaceIdChange\":0}],\"syncConfig\":[{\"onSyncConfigChange\":0}],\"assetStorageConfig\":[{\"onAssetStorageConfigChange\":0}],\"user\":[{\"onUserChange\":0}],\"globalContextMenuItems\":[{\"onGlobalContextMenuItemsChange\":0}],\"objectContextMenuItems\":[{\"onObjectContextMenuItemsChange\":0}],\"scaleMax\":[{\"validateScaleMax\":0}],\"scaleMin\":[{\"validateScaleMin\":0}],\"cursorTarget\":[{\"onCursorTargetChange\":0}],\"lockDrawingScale\":[{\"onLockDrawingScaleChange\":0}],\"isObjectDistanceFadingActive\":[{\"onIsObjectDistanceFadingActiveChange\":0}],\"theme\":[{\"onThemeChange\":0}],\"themes\":[{\"onThemesChange\":0}],\"viewportBoundaryLeft\":[{\"onViewportBoundaryLeftChange\":0}],\"viewportBoundaryRight\":[{\"onViewportBoundaryRightChange\":0}],\"viewportBoundaryTop\":[{\"onViewportBoundaryTopChange\":0}],\"viewportBoundaryBottom\":[{\"onViewportBoundaryBottomChange\":0}],\"debugInfo\":[{\"onDebugInfoChange\":0}],\"isLoading\":[{\"onIsLoadingChange\":0}]}],[513,\"kritzel-more-menu\",{\"visible\":[4],\"items\":[16],\"icon\":[1],\"iconSize\":[2,\"icon-size\"],\"offsetY\":[2,\"offset-y\"],\"menuAnchor\":[32],\"isTouchDevice\":[32]}],[513,\"kritzel-current-user\",{\"user\":[16],\"avatarSize\":[2,\"avatar-size\"]}],[513,\"kritzel-share-dialog\",{\"isPublic\":[4,\"is-public\"],\"workspaceId\":[1,\"workspace-id\"],\"isDialogOpen\":[32],\"internalIsPublic\":[32],\"copySuccess\":[32],\"open\":[64],\"close\":[64]},null,{\"isPublic\":[{\"onIsPublicChange\":0}]}],[513,\"kritzel-login-dialog\",{\"providers\":[16],\"dialogTitle\":[1,\"dialog-title\"],\"subtitle\":[1],\"isDialogOpen\":[32],\"loadingProvider\":[32],\"open\":[64],\"close\":[64],\"setLoading\":[64]}],[513,\"kritzel-active-users\",{\"users\":[16],\"avatarSize\":[2,\"avatar-size\"],\"maxVisible\":[2,\"max-visible\"],\"overlap\":[2]}],[513,\"kritzel-back-to-content\",{\"visible\":[4],\"text\":[1]}],[769,\"kritzel-button\",{\"variant\":[1],\"disabled\":[4],\"type\":[1]}],[513,\"kritzel-tool-config\",{\"tool\":[1040],\"isExpanded\":[1028,\"is-expanded\"],\"theme\":[1],\"engine\":[16],\"config\":[32],\"palette\":[32],\"sizes\":[32],\"currentOpacity\":[32],\"updateTrigger\":[32]},null,{\"tool\":[{\"handleToolChange\":0}],\"theme\":[{\"onThemeChange\":0}],\"engine\":[{\"handleEngineChange\":0}]}],[513,\"kritzel-split-button\",{\"buttonIcon\":[1,\"button-icon\"],\"dropdownIcon\":[1,\"dropdown-icon\"],\"items\":[16],\"mainButtonDisabled\":[4,\"main-button-disabled\"],\"menuButtonDisabled\":[4,\"menu-button-disabled\"],\"isMenuOpen\":[32],\"isTouchDevice\":[32],\"anchorElement\":[32],\"menuScrollTop\":[32],\"open\":[64],\"focusMenu\":[64]}],[513,\"kritzel-current-user-dialog\",{\"user\":[16],\"isDialogOpen\":[32],\"open\":[64],\"close\":[64]}],[513,\"kritzel-context-menu\",{\"items\":[16],\"objects\":[16],\"processedItems\":[32],\"openSubmenuPath\":[32],\"submenuPositions\":[32]},[[9,\"pointerdown\",\"handleOutsideClick\"]],{\"items\":[{\"onItemsChanged\":0}]}],[769,\"kritzel-master-detail\",{\"items\":[16],\"selectedItemId\":[1,\"selected-item-id\"],\"focusedIndex\":[32],\"showMobileDetail\":[32]},null,{\"selectedItemId\":[{\"watchSelectedItemId\":0}]}],[513,\"kritzel-pill-tabs\",{\"tabs\":[16],\"value\":[1025]}],[513,\"kritzel-utility-panel\",{\"undoState\":[16]}],[513,\"kritzel-awareness-cursors\",{\"core\":[16],\"showEdgeIndicators\":[4,\"show-edge-indicators\"],\"edgeIndicatorPadding\":[2,\"edge-indicator-padding\"],\"remoteCursors\":[32],\"objectVersion\":[32]}],[513,\"kritzel-cursor-trail\",{\"core\":[16],\"cursorTrailPoints\":[32],\"isLeftButtonDown\":[32]},[[9,\"pointerdown\",\"handleMouseDown\"],[9,\"pointermove\",\"handlePointerMove\"],[9,\"pointerup\",\"handlePointerUp\"]]],[513,\"kritzel-input\",{\"value\":[1025],\"label\":[1],\"placeholder\":[1],\"suffix\":[1],\"type\":[1],\"disabled\":[4],\"inputValue\":[32]},null,{\"value\":[{\"onValueChange\":0}]}],[513,\"kritzel-numeric-input\",{\"value\":[1026],\"min\":[2],\"max\":[2],\"step\":[2],\"label\":[1],\"placeholder\":[1],\"inputValue\":[32]},null,{\"value\":[{\"onValueChange\":0}]}],[769,\"kritzel-tooltip\",{\"isVisible\":[1028,\"is-visible\"],\"anchorElement\":[16],\"triggerElement\":[16],\"offsetY\":[2,\"offset-y\"],\"positionX\":[32],\"positionY\":[32],\"open\":[64],\"close\":[64],\"toggle\":[64],\"focusContent\":[64]},[[4,\"click\",\"handleOutsideClick\"],[6,\"pointerdown\",\"handleOutsidePointerDown\"],[4,\"kritzelTooltipCloseAll\",\"handleCloseAll\"],[9,\"resize\",\"handleWindowResize\"]],{\"triggerElement\":[{\"handleTriggerElementChange\":0}],\"isVisible\":[{\"handleVisibilityChange\":0}]}],[513,\"kritzel-color-palette\",{\"colors\":[16],\"selectedColor\":[1040],\"isExpanded\":[4,\"is-expanded\"],\"isOpaque\":[4,\"is-opaque\"],\"opacity\":[2],\"theme\":[1]}],[513,\"kritzel-font-family\",{\"fontOptions\":[16],\"selectedFontFamily\":[1025,\"selected-font-family\"]}],[513,\"kritzel-font-size\",{\"sizes\":[16],\"selectedSize\":[1026,\"selected-size\"],\"fontFamily\":[1,\"font-family\"]}],[513,\"kritzel-stroke-size\",{\"sizes\":[16],\"selectedSize\":[1026,\"selected-size\"]}],[513,\"kritzel-line-endings\",{\"styles\":[16],\"value\":[1040]}],[513,\"kritzel-opacity-slider\",{\"value\":[1026],\"min\":[2],\"max\":[2],\"step\":[2],\"previewColor\":[1,\"preview-color\"]}],[513,\"kritzel-shape-fill\",{\"value\":[1025]}],[513,\"kritzel-slide-toggle\",{\"checked\":[1028],\"disabled\":[4],\"label\":[1]}],[513,\"kritzel-avatar\",{\"user\":[16],\"name\":[1],\"size\":[2],\"color\":[1],\"imageError\":[32]},null,{\"user\":[{\"userChanged\":0}],\"profileImageUrl\":[{\"profileImageUrlChanged\":0}]}],[513,\"kritzel-font\",{\"fontFamily\":[1,\"font-family\"],\"size\":[2],\"color\":[1]}],[513,\"kritzel-color\",{\"value\":[1],\"theme\":[1],\"size\":[2]}],[513,\"kritzel-menu\",{\"items\":[16],\"parent\":[16],\"selectedIndex\":[32],\"setScrollTop\":[64],\"setFocus\":[64]}],[513,\"kritzel-menu-item\",{\"item\":[16],\"parent\":[16],\"isDirty\":[32]},null,{\"item\":[{\"onItemChange\":0}]}],[769,\"kritzel-portal\",{\"anchor\":[16],\"offsetX\":[2,\"offset-x\"],\"offsetY\":[2,\"offset-y\"],\"autoFocus\":[4,\"auto-focus\"]},[[8,\"kritzel-dismiss-menus\",\"handleDismissMenus\"],[8,\"click\",\"handleOutsideClick\"],[6,\"pointerdown\",\"handleOutsidePointerDown\"],[8,\"keydown\",\"handleKeyDown\"],[11,\"resize\",\"handleResize\"],[11,\"scroll\",\"handleWindowScroll\"]],{\"anchor\":[{\"anchorChanged\":0}]}],[769,\"kritzel-dialog\",{\"isOpen\":[516,\"is-open\"],\"dialogTitle\":[1,\"dialog-title\"],\"closable\":[4],\"closeOnBackdrop\":[4,\"close-on-backdrop\"],\"closeOnEscape\":[4,\"close-on-escape\"],\"autoFocus\":[4,\"auto-focus\"],\"trapFocus\":[4,\"trap-focus\"],\"size\":[1],\"fullscreenOnMobile\":[4,\"fullscreen-on-mobile\"],\"contained\":[516],\"isAnimating\":[32],\"mobileLockedHeight\":[32],\"containerRect\":[32],\"containerBorderRadius\":[32],\"open\":[64],\"close\":[64],\"focusFirstElement\":[64]},[[8,\"keydown\",\"handleKeyDown\"],[9,\"resize\",\"handleWindowResize\"],[8,\"orientationchange\",\"handleOrientationChange\"]],{\"isOpen\":[{\"handleIsOpenChange\":0}]}],[769,\"kritzel-dropdown\",{\"options\":[16],\"value\":[1],\"width\":[1],\"selectStyles\":[16],\"forceOpenDirection\":[1,\"force-open-direction\"],\"internalValue\":[32],\"hasSuffixContent\":[32],\"hasPrefixContent\":[32],\"isOpen\":[32],\"focusedIndex\":[32],\"openDirection\":[32]},[[4,\"click\",\"handleDocumentClick\"],[4,\"keydown\",\"handleDocumentKeydown\"]],{\"options\":[{\"optionsChanged\":0}],\"value\":[{\"externalValueChanged\":0}]}],[513,\"kritzel-icon\",{\"name\":[1],\"label\":[1],\"size\":[2]}]]],[\"kritzel-brush-style.cjs\",[[513,\"kritzel-brush-style\",{\"type\":[1],\"brushOptions\":[16]}]]]]"), options);
|
|
10
10
|
};
|
|
11
11
|
|
|
12
12
|
exports.setNonce = index.setNonce;
|
|
@@ -17373,6 +17373,68 @@ class KritzelImage extends KritzelBaseObject {
|
|
|
17373
17373
|
this.migrateLegacyDataUrlIfNeeded();
|
|
17374
17374
|
}
|
|
17375
17375
|
}
|
|
17376
|
+
/**
|
|
17377
|
+
* Prepares image objects for insertion into the canvas while preserving
|
|
17378
|
+
* the standard object-first flow (`new KritzelImage(...); addObject(image)`).
|
|
17379
|
+
*
|
|
17380
|
+
* Behavior:
|
|
17381
|
+
* - If `assetId` is already set, no-op.
|
|
17382
|
+
* - If `src` is set (URL or data URL), uploads bytes through the asset
|
|
17383
|
+
* resolver, fills `assetId`/`mimeType`, computes dimensions when needed,
|
|
17384
|
+
* and seeds `resolvedSrc` for immediate rendering.
|
|
17385
|
+
*/
|
|
17386
|
+
async prepareForInsert() {
|
|
17387
|
+
if (this.assetId || !this.src) {
|
|
17388
|
+
return;
|
|
17389
|
+
}
|
|
17390
|
+
if (!this._core?.assetResolver) {
|
|
17391
|
+
return;
|
|
17392
|
+
}
|
|
17393
|
+
const source = this.src;
|
|
17394
|
+
const response = await fetch(source);
|
|
17395
|
+
if (!response.ok) {
|
|
17396
|
+
throw new Error(`Failed to load image source: ${source} (HTTP ${response.status})`);
|
|
17397
|
+
}
|
|
17398
|
+
const blob = await response.blob();
|
|
17399
|
+
const mimeType = blob.type || 'image/png';
|
|
17400
|
+
const { naturalWidth, naturalHeight } = await this.measureImageBlob(blob);
|
|
17401
|
+
const asset = await this._core.assetResolver.put(blob, {
|
|
17402
|
+
mimeType,
|
|
17403
|
+
kind: 'image',
|
|
17404
|
+
width: naturalWidth,
|
|
17405
|
+
height: naturalHeight,
|
|
17406
|
+
});
|
|
17407
|
+
this.assetId = asset.id;
|
|
17408
|
+
this.mimeType = asset.mimeType;
|
|
17409
|
+
if (this.width <= 0 || this.height <= 0) {
|
|
17410
|
+
const { scaledWidth, scaledHeight } = this.calculateScaledDimensions({
|
|
17411
|
+
width: naturalWidth,
|
|
17412
|
+
height: naturalHeight,
|
|
17413
|
+
});
|
|
17414
|
+
this.width = scaledWidth;
|
|
17415
|
+
this.height = scaledHeight;
|
|
17416
|
+
}
|
|
17417
|
+
this.resolvedSrc = await this._core.assetResolver.resolve(asset.id);
|
|
17418
|
+
this.loadState = 'ready';
|
|
17419
|
+
this.src = '';
|
|
17420
|
+
}
|
|
17421
|
+
/**
|
|
17422
|
+
* Measures intrinsic image dimensions from a Blob.
|
|
17423
|
+
*/
|
|
17424
|
+
async measureImageBlob(blob) {
|
|
17425
|
+
const objectUrl = URL.createObjectURL(blob);
|
|
17426
|
+
try {
|
|
17427
|
+
return await new Promise((resolve, reject) => {
|
|
17428
|
+
const img = new Image();
|
|
17429
|
+
img.onload = () => resolve({ naturalWidth: img.naturalWidth, naturalHeight: img.naturalHeight });
|
|
17430
|
+
img.onerror = err => reject(err);
|
|
17431
|
+
img.src = objectUrl;
|
|
17432
|
+
});
|
|
17433
|
+
}
|
|
17434
|
+
finally {
|
|
17435
|
+
URL.revokeObjectURL(objectUrl);
|
|
17436
|
+
}
|
|
17437
|
+
}
|
|
17376
17438
|
/**
|
|
17377
17439
|
* Overrides base mount to kick off asset resolution the first time
|
|
17378
17440
|
* the image is attached to the DOM. Legacy images persisted with an
|