kritzel-stencil 0.0.159 → 0.0.161
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/{default-text-tool.config-BySzvIox.js → default-text-tool.config-zB3FPuXq.js} +270 -58
- package/dist/cjs/default-text-tool.config-zB3FPuXq.js.map +1 -0
- package/dist/cjs/index.cjs.js +2 -1
- package/dist/cjs/index.cjs.js.map +1 -1
- package/dist/cjs/kritzel-brush-style.cjs.entry.js +1 -1
- package/dist/cjs/kritzel-brush-style.entry.cjs.js.map +1 -1
- package/dist/cjs/kritzel-color_22.cjs.entry.js +108 -101
- package/dist/cjs/loader.cjs.js +1 -1
- package/dist/cjs/stencil.cjs.js +1 -1
- package/dist/collection/classes/core/store.class.js +3 -0
- package/dist/collection/classes/core/store.class.js.map +1 -1
- package/dist/collection/classes/handlers/resize.handler.js +54 -32
- package/dist/collection/classes/handlers/resize.handler.js.map +1 -1
- package/dist/collection/classes/handlers/rotation.handler.js +12 -8
- package/dist/collection/classes/handlers/rotation.handler.js.map +1 -1
- package/dist/collection/classes/objects/selection-group.class.js +91 -16
- package/dist/collection/classes/objects/selection-group.class.js.map +1 -1
- package/dist/collection/classes/registries/icon-registry.class.js +6 -1
- package/dist/collection/classes/registries/icon-registry.class.js.map +1 -1
- package/dist/collection/components/core/kritzel-cursor-trail/kritzel-cursor-trail.js +1 -1
- package/dist/collection/components/core/kritzel-editor/kritzel-editor.js +1 -1
- package/dist/collection/components/core/kritzel-engine/kritzel-engine.css +0 -14
- package/dist/collection/components/core/kritzel-engine/kritzel-engine.js +80 -10
- package/dist/collection/components/core/kritzel-engine/kritzel-engine.js.map +1 -1
- package/dist/collection/components/shared/kritzel-brush-style/kritzel-brush-style.css +0 -1
- package/dist/collection/components/shared/kritzel-color/kritzel-color.js +2 -2
- package/dist/collection/components/shared/kritzel-color-palette/kritzel-color-palette.css +1 -1
- package/dist/collection/components/shared/kritzel-color-palette/kritzel-color-palette.js +1 -1
- package/dist/collection/components/shared/kritzel-dropdown/kritzel-dropdown.css +1 -1
- package/dist/collection/components/shared/kritzel-font/kritzel-font.js +1 -1
- package/dist/collection/components/shared/kritzel-font-family/kritzel-font-family.css +1 -1
- package/dist/collection/components/shared/kritzel-font-family/kritzel-font-family.js +1 -1
- package/dist/collection/components/shared/kritzel-font-size/kritzel-font-size.css +1 -1
- package/dist/collection/components/shared/kritzel-font-size/kritzel-font-size.js +1 -1
- package/dist/collection/components/shared/kritzel-menu/kritzel-menu.js +1 -1
- package/dist/collection/components/shared/kritzel-menu-item/kritzel-menu-item.css +1 -2
- package/dist/collection/components/shared/kritzel-menu-item/kritzel-menu-item.js +2 -2
- package/dist/collection/components/shared/kritzel-portal/kritzel-portal.js +1 -1
- package/dist/collection/components/shared/kritzel-split-button/kritzel-split-button.css +1 -1
- package/dist/collection/components/shared/kritzel-split-button/kritzel-split-button.js +1 -1
- package/dist/collection/components/shared/kritzel-stroke-size/kritzel-stroke-size.css +1 -1
- package/dist/collection/components/shared/kritzel-stroke-size/kritzel-stroke-size.js +1 -1
- package/dist/collection/components/shared/kritzel-tooltip/kritzel-tooltip.js +4 -4
- package/dist/collection/components/ui/kritzel-context-menu/kritzel-context-menu.css +1 -2
- package/dist/collection/components/ui/kritzel-context-menu/kritzel-context-menu.js +1 -1
- package/dist/collection/components/ui/kritzel-control-brush-config/kritzel-control-brush-config.css +1 -1
- package/dist/collection/components/ui/kritzel-control-brush-config/kritzel-control-brush-config.js +2 -2
- package/dist/collection/components/ui/kritzel-control-text-config/kritzel-control-text-config.css +1 -1
- package/dist/collection/components/ui/kritzel-control-text-config/kritzel-control-text-config.js +2 -2
- package/dist/collection/components/ui/kritzel-controls/kritzel-controls.css +4 -4
- package/dist/collection/components/ui/kritzel-controls/kritzel-controls.js +3 -3
- package/dist/collection/components/ui/kritzel-utility-panel/kritzel-utility-panel.css +1 -1
- package/dist/collection/components/ui/kritzel-utility-panel/kritzel-utility-panel.js +1 -1
- package/dist/collection/configs/default-engine-config.js +6 -0
- package/dist/collection/configs/default-engine-config.js.map +1 -1
- package/dist/collection/helpers/cursor.helper.js +58 -0
- package/dist/collection/helpers/cursor.helper.js.map +1 -0
- package/dist/collection/index.js +1 -0
- package/dist/collection/index.js.map +1 -1
- package/dist/collection/interfaces/engine-state.interface.js.map +1 -1
- package/dist/components/index.js +2 -2
- package/dist/components/kritzel-brush-style.js +3 -3
- package/dist/components/kritzel-brush-style.js.map +1 -1
- package/dist/components/kritzel-color-palette.js +1 -1
- package/dist/components/kritzel-color.js +1 -1
- package/dist/components/kritzel-context-menu.js +1 -1
- package/dist/components/kritzel-control-brush-config.js +1 -1
- package/dist/components/kritzel-control-text-config.js +1 -1
- package/dist/components/kritzel-controls.js +1 -1
- package/dist/components/kritzel-cursor-trail.js +1 -1
- package/dist/components/kritzel-dropdown.js +1 -1
- package/dist/components/kritzel-editor.js +21 -21
- package/dist/components/kritzel-engine.js +1 -1
- package/dist/components/kritzel-font-family.js +1 -1
- package/dist/components/kritzel-font-size.js +1 -1
- package/dist/components/kritzel-font.js +1 -1
- package/dist/components/kritzel-icon.js +1 -1
- package/dist/components/kritzel-menu-item.js +1 -1
- package/dist/components/kritzel-menu.js +1 -1
- package/dist/components/kritzel-portal.js +1 -1
- package/dist/components/kritzel-split-button.js +1 -1
- package/dist/components/kritzel-stroke-size.js +1 -1
- package/dist/components/kritzel-tooltip.js +1 -1
- package/dist/components/kritzel-utility-panel.js +1 -1
- package/dist/components/kritzel-workspace-manager.js +1 -1
- package/dist/components/{p-CK6no3mi.js → p-58y59Acb.js} +6 -6
- package/dist/components/{p-CK6no3mi.js.map → p-58y59Acb.js.map} +1 -1
- package/dist/components/{p-CTP479Lf.js → p-9Fzdviju.js} +6 -6
- package/dist/components/{p-CTP479Lf.js.map → p-9Fzdviju.js.map} +1 -1
- package/dist/components/{p-DDmSxM5f.js → p-B6r22FSC.js} +5 -5
- package/dist/components/p-B6r22FSC.js.map +1 -0
- package/dist/components/{p-CLt3HMl6.js → p-B_3OZeom.js} +3 -3
- package/dist/components/{p-CLt3HMl6.js.map → p-B_3OZeom.js.map} +1 -1
- package/dist/components/{p-TdCTkEu0.js → p-BdZKPKnx.js} +7 -7
- package/dist/components/p-BdZKPKnx.js.map +1 -0
- package/dist/components/{p-CIXPLjCu.js → p-BdwB-S9G.js} +3 -3
- package/dist/components/p-BdwB-S9G.js.map +1 -0
- package/dist/components/{p-1lIHoOlH.js → p-BpXgwgnV.js} +18 -18
- package/dist/components/p-BpXgwgnV.js.map +1 -0
- package/dist/components/{p-D1uj4A4F.js → p-Brd9SxWS.js} +5 -5
- package/dist/components/p-Brd9SxWS.js.map +1 -0
- package/dist/components/{p-CsA9M6me.js → p-CC8KFHSe.js} +8 -8
- package/dist/components/p-CC8KFHSe.js.map +1 -0
- package/dist/components/{p-BgznZoBH.js → p-CFH6XRL5.js} +5 -5
- package/dist/components/p-CFH6XRL5.js.map +1 -0
- package/dist/components/{p-B4kxkVe-.js → p-CRGwaUcp.js} +5 -5
- package/dist/components/p-CRGwaUcp.js.map +1 -0
- package/dist/components/{p-uuRJU2R1.js → p-Ck4lGnmt.js} +3 -3
- package/dist/components/{p-uuRJU2R1.js.map → p-Ck4lGnmt.js.map} +1 -1
- package/dist/components/{p-BAplhrRJ.js → p-D7BLVRXX.js} +289 -75
- package/dist/components/p-D7BLVRXX.js.map +1 -0
- package/dist/components/{p-C2sWlNsJ.js → p-D_ygcWSz.js} +5 -5
- package/dist/components/p-D_ygcWSz.js.map +1 -0
- package/dist/components/p-DbKKCHKd.js +103 -0
- package/dist/components/p-DbKKCHKd.js.map +1 -0
- package/dist/components/{p-Ddh40W3x.js → p-Doixm8-N.js} +9 -9
- package/dist/components/p-Doixm8-N.js.map +1 -0
- package/dist/components/{p-BQg4YML7.js → p-DxNbcUzt.js} +12 -12
- package/dist/components/p-DxNbcUzt.js.map +1 -0
- package/dist/components/{p-D4yvhd1d.js → p-LAsVgL2e.js} +4 -4
- package/dist/components/{p-D4yvhd1d.js.map → p-LAsVgL2e.js.map} +1 -1
- package/dist/components/{p-D5Wq4x4r.js → p-OFrACpZf.js} +3 -3
- package/dist/components/{p-D5Wq4x4r.js.map → p-OFrACpZf.js.map} +1 -1
- package/dist/components/{p-DAfkuR8U.js → p-i0IlGLv2.js} +5 -5
- package/dist/components/p-i0IlGLv2.js.map +1 -0
- package/dist/esm/{default-text-tool.config-2YFQA3SF.js → default-text-tool.config-BvCgOiKA.js} +269 -59
- package/dist/esm/default-text-tool.config-BvCgOiKA.js.map +1 -0
- package/dist/esm/index.js +2 -2
- package/dist/esm/kritzel-brush-style.entry.js +1 -1
- package/dist/esm/kritzel-brush-style.entry.js.map +1 -1
- package/dist/esm/kritzel-color_22.entry.js +106 -99
- package/dist/esm/loader.js +1 -1
- package/dist/esm/stencil.js +1 -1
- package/dist/stencil/index.esm.js +1 -1
- package/dist/stencil/kritzel-brush-style.entry.esm.js.map +1 -1
- package/dist/stencil/p-385bab97.entry.js +2 -0
- package/dist/stencil/{p-d702c5af.entry.js.map → p-385bab97.entry.js.map} +1 -1
- package/dist/stencil/p-6d9756d9.entry.js +10 -0
- package/dist/stencil/p-6d9756d9.entry.js.map +1 -0
- package/dist/stencil/{p-2YFQA3SF.js → p-BvCgOiKA.js} +2 -2
- package/dist/stencil/p-BvCgOiKA.js.map +1 -0
- package/dist/stencil/stencil.esm.js +1 -1
- package/dist/types/classes/core/store.class.d.ts +1 -0
- package/dist/types/classes/objects/selection-group.class.d.ts +1 -0
- package/dist/types/components/core/kritzel-engine/kritzel-engine.d.ts +4 -0
- package/dist/types/components.d.ts +2 -0
- package/dist/types/helpers/cursor.helper.d.ts +22 -0
- package/dist/types/index.d.ts +1 -0
- package/dist/types/interfaces/engine-state.interface.d.ts +7 -0
- package/package.json +1 -1
- package/dist/cjs/default-text-tool.config-BySzvIox.js.map +0 -1
- package/dist/components/p-1lIHoOlH.js.map +0 -1
- package/dist/components/p-B4kxkVe-.js.map +0 -1
- package/dist/components/p-BAplhrRJ.js.map +0 -1
- package/dist/components/p-BQg4YML7.js.map +0 -1
- package/dist/components/p-BgznZoBH.js.map +0 -1
- package/dist/components/p-Bhtn9qay.js +0 -98
- package/dist/components/p-Bhtn9qay.js.map +0 -1
- package/dist/components/p-C2sWlNsJ.js.map +0 -1
- package/dist/components/p-CIXPLjCu.js.map +0 -1
- package/dist/components/p-CsA9M6me.js.map +0 -1
- package/dist/components/p-D1uj4A4F.js.map +0 -1
- package/dist/components/p-DAfkuR8U.js.map +0 -1
- package/dist/components/p-DDmSxM5f.js.map +0 -1
- package/dist/components/p-Ddh40W3x.js.map +0 -1
- package/dist/components/p-TdCTkEu0.js.map +0 -1
- package/dist/esm/default-text-tool.config-2YFQA3SF.js.map +0 -1
- package/dist/stencil/p-2YFQA3SF.js.map +0 -1
- package/dist/stencil/p-2e85a4af.entry.js +0 -10
- package/dist/stencil/p-2e85a4af.entry.js.map +0 -1
- package/dist/stencil/p-d702c5af.entry.js +0 -2
package/dist/cjs/{default-text-tool.config-BySzvIox.js → default-text-tool.config-zB3FPuXq.js}
RENAMED
|
@@ -14953,6 +14953,115 @@ class KritzelTextTool extends KritzelBaseTool {
|
|
|
14953
14953
|
}
|
|
14954
14954
|
}
|
|
14955
14955
|
|
|
14956
|
+
class KritzelIconRegistry {
|
|
14957
|
+
static registry = new Map();
|
|
14958
|
+
static register(name, svgContent) {
|
|
14959
|
+
if (this.registry.has(name)) {
|
|
14960
|
+
console.warn(`[IconRegistry] Icon "${name}" is already registered. It will be overwritten.`);
|
|
14961
|
+
}
|
|
14962
|
+
this.registry.set(name, svgContent);
|
|
14963
|
+
}
|
|
14964
|
+
static get(name) {
|
|
14965
|
+
return this.registry.get(name);
|
|
14966
|
+
}
|
|
14967
|
+
static registerIcons(icons) {
|
|
14968
|
+
for (const name in icons) {
|
|
14969
|
+
if (Object.prototype.hasOwnProperty.call(icons, name)) {
|
|
14970
|
+
this.register(name, icons[name]);
|
|
14971
|
+
}
|
|
14972
|
+
}
|
|
14973
|
+
}
|
|
14974
|
+
static has(name) {
|
|
14975
|
+
return this.registry.has(name);
|
|
14976
|
+
}
|
|
14977
|
+
}
|
|
14978
|
+
KritzelIconRegistry.registerIcons({
|
|
14979
|
+
'cursor': '<svg width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"><path d="M4.037 4.688a.495.495 0 0 1 .651-.651l16 6.5a.5.5 0 0 1-.063.947l-6.124 1.58a2 2 0 0 0-1.438 1.435l-1.579 6.126a.5.5 0 0 1-.947.063z"/></svg>',
|
|
14980
|
+
'pen': '<svg width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"><path d="M21.174 6.812a1 1 0 0 0-3.986-3.987L3.842 16.174a2 2 0 0 0-.5.83l-1.321 4.352a.5.5 0 0 0 .623.622l4.353-1.32a2 2 0 0 0 .83-.497z"/></svg>',
|
|
14981
|
+
'highlighter': '<svg width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-highlighter-icon lucide-highlighter"><path d="m9 11-6 6v3h9l3-3"/><path d="m22 12-4.6 4.6a2 2 0 0 1-2.8 0l-5.2-5.2a2 2 0 0 1 0-2.8L14 4"/></svg>',
|
|
14982
|
+
'eraser': '<svg width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"><path d="m7 21-4.3-4.3c-1-1-1-2.5 0-3.4l9.6-9.6c1-1 2.5-1 3.4 0l5.6 5.6c1 1 1 2.5 0 3.4L13 21"/><path d="M22 21H7"/><path d="m5 11 9 9"/></svg>',
|
|
14983
|
+
'type': '<svg width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"><polyline points="4 7 4 4 20 4 20 7"/><line x1="9" x2="15" y1="20" y2="20"/><line x1="12" x2="12" y1="4" y2="20"/></svg>',
|
|
14984
|
+
'image': '<svg width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"><rect width="18" height="18" x="3" y="3" rx="2" ry="2"/><circle cx="9" cy="9" r="2"/><path d="m21 15-3.086-3.086a2 2 0 0 0-2.828 0L6 21"/></svg>',
|
|
14985
|
+
'chevron-down': '<svg width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"><path d="m6 9 6 6 6-6"/></svg>',
|
|
14986
|
+
'chevron-up': '<svg width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"><path d="m18 15-6-6-6 6"/></svg>',
|
|
14987
|
+
'copy': '<svg width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-copy-icon lucide-copy"><rect width="14" height="14" x="8" y="8" rx="2" ry="2"/><path d="M4 16c-1.1 0-2-.9-2-2V4c0-1.1.9-2 2-2h10c1.1 0 2 .9 2 2"/></svg>',
|
|
14988
|
+
'paste': '<svg width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-clipboard-paste-icon lucide-clipboard-paste"><path d="M11 14h10"/><path d="M16 4h2a2 2 0 0 1 2 2v1.344"/><path d="m17 18 4-4-4-4"/><path d="M8 4H6a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h12a2 2 0 0 0 1.793-1.113"/><rect x="8" y="2" width="8" height="4" rx="1"/></svg>',
|
|
14989
|
+
'cut': '<svg width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-scissors-icon lucide-scissors"><circle cx="6" cy="6" r="3"/><path d="M8.12 8.12 12 12"/><path d="M20 4 8.12 15.88"/><circle cx="6" cy="18" r="3"/><path d="M14.8 14.8 20 20"/></svg>',
|
|
14990
|
+
'delete': '<svg width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-trash2-icon lucide-trash-2"><path d="M3 6h18"/><path d="M19 6v14c0 1-1 2-2 2H7c-1 0-2-1-2-2V6"/><path d="M8 6V4c0-1 1-2 2-2h4c1 0 2 1 2 2v2"/><line x1="10" x2="10" y1="11" y2="17"/><line x1="14" x2="14" y1="11" y2="17"/></svg>',
|
|
14991
|
+
'bring-to-front': '<svg width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-arrow-up-to-line-icon lucide-arrow-up-to-line"><path d="M5 3h14"/><path d="m18 13-6-6-6 6"/><path d="M12 7v14"/></svg>',
|
|
14992
|
+
'send-to-back': '<svg width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-arrow-down-to-line-icon lucide-arrow-down-to-line"><path d="M12 17V3"/><path d="m6 11 6 6 6-6"/><path d="M19 21H5"/></svg>',
|
|
14993
|
+
'select-all': '<svg width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-square-mouse-pointer-icon lucide-square-mouse-pointer"><path d="M12.034 12.681a.498.498 0 0 1 .647-.647l9 3.5a.5.5 0 0 1-.033.943l-3.444 1.068a1 1 0 0 0-.66.66l-1.067 3.443a.5.5 0 0 1-.943.033z"/><path d="M21 11V5a2 2 0 0 0-2-2H5a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h6"/></svg>',
|
|
14994
|
+
'download': '<svg width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-download-icon lucide-download"><path d="M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4"/><polyline points="7 10 12 15 17 10"/><line x1="12" x2="12" y1="15" y2="3"/></svg>',
|
|
14995
|
+
'undo': '<svg width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-undo-icon lucide-undo"><path d="M3 7v6h6"/><path d="M21 17a9 9 0 0 0-9-9 9 9 0 0 0-6 2.3L3 13"/></svg>',
|
|
14996
|
+
'redo': '<svg width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-redo-icon lucide-redo"><path d="M21 7v6h-6"/><path d="M3 17a9 9 0 0 1 9-9 9 9 0 0 1 6 2.3l3 2.7"/></svg>',
|
|
14997
|
+
'plus': '<svg width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-plus-icon lucide-plus"><path d="M5 12h14"/><path d="M12 5v14"/></svg>',
|
|
14998
|
+
'ellipsis-vertical': '<svg width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-ellipsis-vertical-icon lucide-ellipsis-vertical"><circle cx="12" cy="12" r="1"/><circle cx="12" cy="5" r="1"/><circle cx="12" cy="19" r="1"/></svg>',
|
|
14999
|
+
'x': '<svg width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-x-icon lucide-x"><path d="M18 6 6 18"/><path d="m6 6 12 12"/></svg>',
|
|
15000
|
+
'check': '<svg width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-check-icon lucide-check"><path d="M20 6 9 17l-5-5"/></svg>',
|
|
15001
|
+
'move-vertical': '<svg width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-move-vertical-icon lucide-move-vertical" version="1.1" id="svg3"> <defs id="defs3" /> <path d="M12 2v20" id="path1" /> <path style="fill:#ffffff;stroke-width:2.5;stroke-dasharray:none;stroke-linejoin:round;paint-order:stroke fill markers" d="m 11.735575,22.661865 c -0.09259,-0.02798 -0.204674,-0.07661 -0.249076,-0.108068 -0.04441,-0.03147 -1.167275,-0.979853 -2.4952713,-2.10755 -1.8557024,-1.57581 -2.4300904,-2.079639 -2.4817336,-2.17687 -0.086514,-0.162885 -0.089504,-0.422449 -0.00664,-0.576334 0.1483053,-0.275409 0.437667,-0.436207 0.7830634,-0.435147 0.3692925,0.0011 0.3517326,-0.01122 2.168748,1.525599 L 11.12348,20.194964 V 11.999996 3.8050256 L 9.4546663,5.2164943 C 7.6376509,6.7533118 7.6552109,6.7409594 7.2859184,6.7420935 6.6681409,6.7439906 6.253658,6.1955854 6.5159903,5.723396 6.5738626,5.6192278 7.1368766,5.1267427 9.0629381,3.4955044 11.738128,1.2298067 11.640395,1.3026868 12.00355,1.3026868 c 0.363154,0 0.265421,-0.07288 2.940611,2.1928176 1.926062,1.6312383 2.489076,2.1237234 2.546948,2.2278916 0.262332,0.4721894 -0.15215,1.0205946 -0.769928,1.0186975 -0.369293,-0.00114 -0.351733,0.011218 -2.168748,-1.5255992 L 12.88362,3.8050256 v 8.1949704 8.194968 l 1.668813,-1.411469 c 1.817015,-1.536817 1.799455,-1.524464 2.168748,-1.525599 0.617772,-0.0019 1.032269,0.546521 0.769928,1.018687 -0.103474,0.18623 -4.919006,4.273935 -5.130582,4.355136 -0.20796,0.07981 -0.425829,0.09033 -0.624952,0.03014 z" id="path4" /> </svg>',
|
|
15002
|
+
'hand': '<svg width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-hand-icon lucide-hand" version="1.1" id="svg4"> <defs id="defs4" /> <path d="M18 11V6a2 2 0 0 0-2-2a2 2 0 0 0-2 2" id="path1" /> <path d="M14 10V4a2 2 0 0 0-2-2a2 2 0 0 0-2 2v2" id="path2" /> <path d="M10 10.5V6a2 2 0 0 0-2-2a2 2 0 0 0-2 2v8" id="path3" /> <path d="M18 8a2 2 0 1 1 4 0v6a8 8 0 0 1-8 8h-2c-2.8 0-4.5-.86-5.99-2.34l-3.6-3.6a2 2 0 0 1 2.83-2.82L7 15" id="path4" /> <path style="fill:#ffffff;stroke-width:0.0423032" d="M 11.478261,21.222477 C 9.6854059,21.139331 8.3341788,20.647346 7.1297169,19.639159 6.9698298,19.505327 5.949644,18.508708 4.8626374,17.42445 3.0780314,15.644357 2.8775851,15.435367 2.7968392,15.270602 2.5896561,14.847836 2.616354,14.436649 2.8771894,14.033085 c 0.136522,-0.211226 0.3837159,-0.398688 0.6367632,-0.482897 0.1529977,-0.05091 0.2326803,-0.05992 0.4470908,-0.05054 0.2250407,0.0098 0.2876577,0.02439 0.4554568,0.105827 0.1747854,0.08483 0.2933718,0.192702 1.1675186,1.062064 0.7182021,0.714271 1.0062041,0.982633 1.0998825,1.024878 0.1680197,0.07577 0.4756439,0.07817 0.6368269,0.005 0.1370772,-0.06226 0.2976691,-0.220818 0.3691296,-0.364463 0.072561,-0.145855 0.071573,-0.543545 -0.00169,-0.681911 -0.028747,-0.05429 -0.2476439,-0.296131 -0.4864385,-0.537426 l -0.4341716,-0.438718 0.00753,-3.989014 0.00753,-3.9890137 0.089246,-0.1883791 c 0.244787,-0.516692 0.7711718,-0.809716 1.3059705,-0.7269981 0.3973687,0.061462 0.7569953,0.3284904 0.9363122,0.6952277 l 0.093853,0.1919473 0.014101,2.4958872 0.014101,2.4958877 0.067385,0.149123 c 0.1186861,0.262654 0.4140438,0.457222 0.6940724,0.457222 0.2764172,0 0.5690532,-0.187563 0.6965992,-0.446482 l 0.06486,-0.131661 0.0141,-3.4970626 0.0141,-3.4970623 0.08982,-0.1896121 C 11.096301,3.0422103 11.506844,2.7755634 12,2.7755634 c 0.493156,0 0.903699,0.2666469 1.122868,0.7293016 l 0.08982,0.1896121 0.0141,3.2432432 c 0.01405,3.2315947 0.01432,3.2437077 0.07397,3.3726737 0.124721,0.269649 0.355908,0.424566 0.661411,0.443206 0.237954,0.01452 0.429018,-0.0627 0.591626,-0.239109 0.223655,-0.242637 0.208338,-0.06565 0.224113,-2.5896966 l 0.0141,-2.2561693 0.09385,-0.1919473 c 0.179317,-0.3667373 0.538944,-0.6337662 0.936313,-0.6952277 0.609359,-0.09425 1.208067,0.3054956 1.370981,0.9153772 0.03013,0.1127929 0.03773,0.6662436 0.038,2.7657391 3.74e-4,2.9328416 -0.008,2.8034316 0.197044,3.0364016 0.234927,0.266892 0.603828,0.337117 0.920407,0.175213 0.181933,-0.09304 0.329759,-0.261686 0.376309,-0.4293 0.01848,-0.06654 0.02929,-0.683932 0.0295,-1.684364 1.78e-4,-0.8783075 0.01239,-1.6530128 0.02751,-1.745346 0.08579,-0.5238478 0.505382,-0.9420803 1.039546,-1.0361716 0.607538,-0.1070155 1.25615,0.3485846 1.385876,0.973471 0.02211,0.1064847 0.02843,1.1397236 0.02169,3.5455556 -0.0093,3.324725 -0.01078,3.403075 -0.07062,3.770606 -0.126399,0.776213 -0.328814,1.41352 -0.669031,2.106456 -0.36657,0.746612 -0.72118,1.250303 -1.297841,1.843464 -1.185731,1.21966 -2.604527,1.933174 -4.300822,2.162889 -0.38234,0.05178 -2.604621,0.0785 -3.412456,0.04104 z" id="path16" /> </svg>',
|
|
15003
|
+
'hand-grab': '<svg width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-hand-grab-icon lucide-hand-grab" version="1.1" id="svg5"> <defs id="defs5" /> <path d="M18 11.5V9a2 2 0 0 0-2-2a2 2 0 0 0-2 2v1.4" id="path1" /> <path d="M14 10V8a2 2 0 0 0-2-2a2 2 0 0 0-2 2v2" id="path2" /> <path d="M10 9.9V9a2 2 0 0 0-2-2a2 2 0 0 0-2 2v5" id="path3" /> <path d="M6 14a2 2 0 0 0-2-2a2 2 0 0 0-2 2" id="path4" /> <path d="M18 11a2 2 0 1 1 4 0v3a8 8 0 0 1-8 8h-4a8 8 0 0 1-8-8 2 2 0 1 1 4 0" id="path5" /> <path style="fill:#ffffff;stroke-width:0.0423032" d="M 9.5887192,21.221364 C 8.0526856,21.128375 6.6533474,20.587008 5.4571093,19.622953 5.3019976,19.497947 5.0101058,19.225967 4.8084606,19.018552 4.2300382,18.423579 3.8474097,17.879011 3.4960953,17.150756 3.1017715,16.333345 2.9014937,15.633198 2.8052391,14.735605 c -0.097577,-0.909922 -0.019834,-1.263323 0.3569794,-1.622742 0.753018,-0.718257 1.9463784,-0.256949 2.0619296,0.797066 0.037839,0.345154 0.089701,0.477674 0.2472582,0.631806 0.2464521,0.241095 0.5958008,0.287445 0.9036474,0.119894 0.1478567,-0.08047 0.2303871,-0.16866 0.3266699,-0.349056 0.050118,-0.0939 0.05337,-0.2326 0.066784,-2.848413 L 6.7826087,8.7144536 6.8458627,8.559342 C 6.9736603,8.2459558 7.2463773,7.9734987 7.5581669,7.8477164 c 0.1253804,-0.050581 0.2118709,-0.062705 0.4512338,-0.063254 0.275392,-6.312e-4 0.3094658,0.00564 0.4867271,0.089609 0.264676,0.1253746 0.4771417,0.334346 0.6070085,0.5970252 l 0.1048543,0.212087 0.017338,0.7488899 c 0.019395,0.8377165 0.026343,0.8713745 0.2242006,1.0860245 0.1591067,0.172611 0.3522021,0.249908 0.5883018,0.235502 0.305503,-0.01864 0.53669,-0.173557 0.661411,-0.443206 0.05734,-0.123963 0.0605,-0.181852 0.07486,-1.3703236 0.01626,-1.3456629 0.0141,-1.3267758 0.182667,-1.5938092 0.257891,-0.4085268 0.77099,-0.6442307 1.228943,-0.5645435 0.471012,0.08196 0.850379,0.4102836 0.989676,0.8565175 0.04663,0.149383 0.0514,0.2860903 0.0514,1.4721724 0,0.8344844 0.01108,1.3591794 0.03064,1.4503554 0.04109,0.191585 0.179844,0.390224 0.342505,0.490321 0.27721,0.170587 0.693425,0.126085 0.92529,-0.09893 0.228986,-0.222224 0.234357,-0.25046 0.251582,-1.3227071 l 0.0152,-0.9463484 0.104855,-0.2120434 c 0.129872,-0.2626357 0.342372,-0.471626 0.607008,-0.5969817 0.177262,-0.083967 0.211335,-0.09024 0.486727,-0.089609 0.239363,5.486e-4 0.325854,0.012673 0.451234,0.063254 0.31179,0.1257823 0.584507,0.3982394 0.712304,0.7116256 0.0621,0.1522783 0.06351,0.1824139 0.07736,1.649824 0.01408,1.492435 0.0142,1.494914 0.07947,1.627432 0.0771,0.156535 0.2216,0.291061 0.395058,0.367789 0.09695,0.04289 0.169789,0.05275 0.325757,0.04411 0.230544,-0.01277 0.363779,-0.06826 0.506411,-0.21089 0.177062,-0.177061 0.198302,-0.25307 0.219359,-0.784959 0.02002,-0.505773 0.05012,-0.6549 0.175297,-0.868492 0.498409,-0.850471 1.728484,-0.8041941 2.173478,0.08177 0.131751,0.262312 0.134447,0.313526 0.122615,2.328965 -0.0104,1.771638 -0.01517,1.923481 -0.0714,2.273746 -0.123689,0.770512 -0.327108,1.411813 -0.668163,2.106456 -0.36657,0.746612 -0.72118,1.250303 -1.297841,1.843464 -1.180268,1.214041 -2.600612,1.930754 -4.287083,2.163284 -0.28697,0.03957 -0.685446,0.04782 -2.636536,0.05459 -1.26416,0.0044 -2.4698005,-0.0024 -2.6792012,-0.01507 z" id="path6" /> </svg>',
|
|
15004
|
+
'mouse-pointer': '<svg width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-mouse-pointer2-icon lucide-mouse-pointer-2" version="1.1" id="svg1"> <defs id="defs1" /> <path d="M4.037 4.688a.495.495 0 0 1 .651-.651l16 6.5a.5.5 0 0 1-.063.947l-6.124 1.58a2 2 0 0 0-1.438 1.435l-1.579 6.126a.5.5 0 0 1-.947.063z" id="path1" /> <path style="fill:#ffffff;stroke-width:0.0972651;stroke-linejoin:round;paint-order:stroke fill markers" d="M 7.8509196,12.314844 C 6.127071,8.1920568 4.7235325,4.8125504 4.7319449,4.8048299 c 0.01847,-0.016951 15.4787861,6.0801241 15.4610371,6.0973581 -0.0069,0.0067 -1.32633,0.341226 -2.93219,0.743509 -1.858829,0.465652 -3.011462,0.772855 -3.172161,0.845453 -0.688426,0.310999 -1.245788,0.879167 -1.498145,1.527185 -0.06251,0.160512 -0.440389,1.529576 -0.839733,3.042364 -0.399346,1.512788 -0.734966,2.750433 -0.745822,2.750322 -0.01086,-1.09e-4 -1.430163,-3.373391 -3.1540114,-7.496177 z" id="path2" /> <path style="fill:#ffffff;stroke-width:0.0705053;stroke-linejoin:round;paint-order:stroke fill markers" d="M 10.777831,19.240865 C 9.3899089,15.977493 4.7567738,4.8648478 4.7760705,4.8455511 c 0.013084,-0.013084 4.7618079,1.8507077 10.7773965,4.2299406 4.467495,1.7669453 4.558837,1.8037523 4.533848,1.8269883 -0.01183,0.011 -0.96064,0.257045 -2.108467,0.546768 -3.445281,0.869623 -3.777157,0.960825 -4.075205,1.119907 -0.597122,0.31871 -1.103666,0.864485 -1.309236,1.410635 -0.09642,0.256167 -0.312339,1.032806 -0.943226,3.392713 -0.641066,2.39798 -0.629171,2.354884 -0.649929,2.354849 -0.0091,-1.5e-5 -0.10963,-0.218934 -0.223421,-0.486487 z" id="path6" /> </svg>',
|
|
15005
|
+
'pointer': '<svg width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-pointer-icon lucide-pointer" version="1.1" id="svg5"> <defs id="defs5" /> <path d="M22 14a8 8 0 0 1-8 8" id="path1" /> <path d="M18 11v-1a2 2 0 0 0-2-2a2 2 0 0 0-2 2" id="path2" /> <path d="M14 10V9a2 2 0 0 0-2-2a2 2 0 0 0-2 2v1" id="path3" /> <path d="M10 9.5V4a2 2 0 0 0-2-2a2 2 0 0 0-2 2v10" id="path4" /> <path d="M18 11a2 2 0 1 1 4 0v3a8 8 0 0 1-8 8h-2c-2.8 0-4.5-.86-5.99-2.34l-3.6-3.6a2 2 0 0 1 2.83-2.82L7 15" id="path5" /> <path style="fill:#ffffff;stroke-width:0.0930233;stroke-linejoin:round;paint-order:stroke fill markers" d="M 11.2,21.203517 C 9.5092536,21.041493 8.4838422,20.667261 7.3116279,19.784423 7.1888372,19.691945 6.139155,18.670017 4.9790008,17.513473 2.5649891,15.106974 2.6562686,15.220427 2.6869266,14.664621 c 0.020277,-0.367608 0.1272548,-0.601802 0.3822766,-0.836873 0.2609241,-0.240511 0.4631523,-0.319555 0.8191689,-0.320185 0.509345,-9.02e-4 0.5815472,0.04845 1.7102825,1.168976 0.532833,0.528958 1.0223742,0.98871 1.0878697,1.021671 0.1699959,0.08555 0.4741793,0.07658 0.6733897,-0.01985 0.303161,-0.146758 0.4720469,-0.543298 0.3791811,-0.890307 -0.036373,-0.135913 -0.1250717,-0.246717 -0.506083,-0.632208 l -0.4619807,-0.467411 0.00983,-5.002356 0.00983,-5.0023561 0.080405,-0.1739784 C 6.9849846,3.2633288 7.2288893,3.0140593 7.4738043,2.8937849 7.6531903,2.8056908 7.7297209,2.7906977 8,2.7906977 c 0.2702791,0 0.3468097,0.014993 0.5261957,0.1030872 0.244915,0.1202744 0.4888197,0.3695439 0.6027014,0.6159576 0.079998,0.1730976 0.080499,0.1905559 0.09901,3.448397 0.020472,3.6031325 0.00418,3.3665775 0.2478407,3.5980265 0.2810043,0.266918 0.6822132,0.283308 1.0083162,0.04119 0.232339,-0.172501 0.25913,-0.280173 0.275933,-1.1089849 0.01456,-0.7180841 0.01869,-0.7520168 0.117805,-0.9674419 0.454637,-0.9881395 1.789759,-0.9881395 2.244396,0 0.09912,0.2154251 0.103248,0.2493578 0.117805,0.9674419 0.0168,0.8288119 0.04359,0.9364839 0.275933,1.1089849 0.326103,0.242117 0.727312,0.225727 1.008316,-0.04119 0.160426,-0.152384 0.218977,-0.294978 0.250819,-0.610832 C 14.845142,9.2502593 15.336916,8.7840275 16,8.7840275 c 0.478554,0 0.847992,0.2240614 1.082489,0.6565225 l 0.126813,0.2338686 0.01869,0.7813954 c 0.02069,0.865066 0.03258,0.913549 0.276595,1.127795 0.239244,0.210059 0.56665,0.239738 0.88018,0.07979 0.219744,-0.112104 0.324993,-0.301479 0.383515,-0.690054 0.06437,-0.427406 0.125794,-0.56694 0.357358,-0.811785 C 19.38604,9.8862229 19.614832,9.7882106 20,9.7869898 c 0.380153,-0.0012 0.636641,0.1145641 0.905451,0.4086842 0.318537,0.348531 0.317259,0.340596 0.332734,2.064791 0.02055,2.290001 -0.04576,2.983129 -0.383655,4.009983 -0.878739,2.670467 -3.284504,4.613238 -6.090273,4.918188 -0.322415,0.03504 -3.227312,0.04717 -3.564257,0.01488 z" id="path6" /> <path style="fill:#ffffff;stroke-width:0.0705053;stroke-linejoin:round;paint-order:stroke fill markers" d="m 11.942854,21.190957 c -1.015003,-0.01704 -1.131723,-0.02688 -1.806535,-0.1522 C 9.5352183,20.927122 8.8225664,20.681951 8.319624,20.413766 7.7570149,20.113766 7.3758537,19.827607 6.7836127,19.260598 5.774345,18.294328 3.1746828,15.68636 2.994305,15.459184 2.7288345,15.124838 2.6970674,15.049109 2.7026798,14.763988 c 0.00827,-0.420163 0.1162058,-0.679868 0.3844475,-0.925026 0.2382303,-0.217729 0.416008,-0.293073 0.7303102,-0.309513 0.5101451,-0.02668 0.6329728,0.04799 1.5378542,0.934977 0.8479274,0.831158 1.2429087,1.199656 1.342282,1.252283 0.11819,0.06259 0.4442817,0.06081 0.6122724,-0.0033 0.1482348,-0.05661 0.3410696,-0.248342 0.4107195,-0.408368 0.063024,-0.144802 0.06179,-0.498 -0.00216,-0.618376 C 7.6917315,14.63641 7.4736023,14.388937 7.2336742,14.136678 L 6.797441,13.678026 6.7970753,8.6903755 6.7967098,3.7027253 6.9021002,3.502167 C 7.0320375,3.2548956 7.2343175,3.0487286 7.4743519,2.9189189 c 0.1797064,-0.097185 0.1877434,-0.098707 0.5209477,-0.098707 0.3169743,0 0.349151,0.00524 0.5076381,0.082665 0.2190605,0.1070166 0.4871239,0.3748528 0.5931342,0.592632 l 0.081613,0.1676584 0.019992,1.3834579 c 0.010995,0.7609018 0.021403,2.0560783 0.023128,2.87817 0.00341,1.6233162 0.028863,2.2876938 0.093598,2.4426258 0.089047,0.213119 0.4255042,0.419889 0.683247,0.419889 0.1563141,0 0.3731941,-0.08265 0.5187231,-0.197689 0.205546,-0.162474 0.225694,-0.250142 0.256177,-1.1146856 C 10.79418,8.8613623 10.8052,8.7492253 10.85668,8.6186115 11.053264,8.1198873 11.50183,7.7978848 12,7.7978848 c 0.49817,0 0.946736,0.3220025 1.143315,0.8207259 0.05148,0.1306138 0.0625,0.2427508 0.08413,0.8563239 0.02897,0.8216044 0.05497,0.9507864 0.218548,1.0859664 0.341252,0.282005 0.756809,0.293493 1.057036,0.02922 0.169206,-0.148941 0.234219,-0.2921 0.288276,-0.6347773 0.103115,-0.6536616 0.472737,-1.0621772 1.030077,-1.1384664 0.547738,-0.074975 0.986339,0.1608863 1.276145,0.6862578 l 0.105758,0.1917223 7.68e-4,0.3699606 c 0.0011,0.553623 0.04553,1.179579 0.09141,1.289176 0.04428,0.105777 0.219161,0.276182 0.364423,0.355092 0.06913,0.03755 0.155512,0.05067 0.333059,0.05055 0.204058,-1.3e-4 0.260695,-0.01118 0.380729,-0.07426 0.239564,-0.12591 0.320531,-0.265583 0.407786,-0.703455 0.08382,-0.420648 0.125337,-0.527172 0.279883,-0.718174 0.321102,-0.3968443 0.77117,-0.5469022 1.259123,-0.4198065 0.21344,0.055594 0.39756,0.1739295 0.578279,0.3716645 0.286251,0.313205 0.299377,0.389392 0.324444,1.883099 0.02888,1.721047 -0.03379,2.808669 -0.20314,3.525265 -0.307591,1.301561 -0.970113,2.493177 -1.91312,3.440943 -1.060413,1.065767 -2.34115,1.742909 -3.849589,2.035329 -0.348478,0.06755 -0.462014,0.07524 -1.340342,0.09078 -0.527787,0.0093 -1.416154,0.0093 -1.974148,-6.4e-5 z" id="path7" /> </svg>'
|
|
15006
|
+
});
|
|
15007
|
+
|
|
15008
|
+
class KritzelCursorHelper {
|
|
15009
|
+
static _pointerCursor = null;
|
|
15010
|
+
/**
|
|
15011
|
+
* Returns the custom pointer cursor CSS value.
|
|
15012
|
+
* This can be used instead of `cursor: pointer` for consistent styling.
|
|
15013
|
+
*/
|
|
15014
|
+
static getPointerCursor() {
|
|
15015
|
+
if (!this._pointerCursor) {
|
|
15016
|
+
this._pointerCursor = this.getCursor({ iconName: 'pointer' });
|
|
15017
|
+
}
|
|
15018
|
+
return this._pointerCursor;
|
|
15019
|
+
}
|
|
15020
|
+
/**
|
|
15021
|
+
* Returns a custom cursor CSS value with support for rotation.
|
|
15022
|
+
* The icon is retrieved from the KritzelIconRegistry.
|
|
15023
|
+
*/
|
|
15024
|
+
static getCursor(options) {
|
|
15025
|
+
const iconName = options.iconName === 'default' ? 'mouse-pointer' : options.iconName;
|
|
15026
|
+
const iconSvg = KritzelIconRegistry.get(iconName);
|
|
15027
|
+
if (!iconSvg) {
|
|
15028
|
+
console.warn(`Icon "${iconName}" not found in registry.`);
|
|
15029
|
+
return 'auto';
|
|
15030
|
+
}
|
|
15031
|
+
const size = options.size || 24;
|
|
15032
|
+
const rotation = options.rotation || 0;
|
|
15033
|
+
const color = options.color || 'black';
|
|
15034
|
+
// Default cursor (mouse-pointer) has hotspot at (4, 4), others at center
|
|
15035
|
+
const hotspot = options.hotspot || (options.iconName === 'default' ? { x: 4, y: 4 } : { x: size / 2, y: size / 2 });
|
|
15036
|
+
// Modify the SVG string to set size and color
|
|
15037
|
+
// We replace width and height to match the requested size
|
|
15038
|
+
// We replace currentColor with the requested color
|
|
15039
|
+
let content = iconSvg
|
|
15040
|
+
.replace(/width="\d+"/, `width="${size}"`)
|
|
15041
|
+
.replace(/height="\d+"/, `height="${size}"`)
|
|
15042
|
+
.replace(/currentColor/g, color);
|
|
15043
|
+
// Create the SVG string
|
|
15044
|
+
// We rotate around the center of the SVG canvas
|
|
15045
|
+
const center = size / 2;
|
|
15046
|
+
// We use a group to apply the rotation
|
|
15047
|
+
const svg = `
|
|
15048
|
+
<svg xmlns="http://www.w3.org/2000/svg" width="${size}" height="${size}" viewBox="0 0 ${size} ${size}">
|
|
15049
|
+
<g transform="rotate(${rotation} ${center} ${center})">
|
|
15050
|
+
${content}
|
|
15051
|
+
</g>
|
|
15052
|
+
</svg>
|
|
15053
|
+
`;
|
|
15054
|
+
// Encode the SVG for use in a data URI
|
|
15055
|
+
// We need to be careful with encoding to ensure it works across browsers
|
|
15056
|
+
const encodedSvg = encodeURIComponent(svg.replace(/\s+/g, ' ').trim())
|
|
15057
|
+
.replace(/'/g, '%27')
|
|
15058
|
+
.replace(/"/g, '%22');
|
|
15059
|
+
const dataUri = `data:image/svg+xml;charset=utf-8,${encodedSvg}`;
|
|
15060
|
+
// Return the cursor style string
|
|
15061
|
+
return `url('${dataUri}') ${hotspot.x} ${hotspot.y}, auto`;
|
|
15062
|
+
}
|
|
15063
|
+
}
|
|
15064
|
+
|
|
14956
15065
|
class KritzelBaseHandler {
|
|
14957
15066
|
_core;
|
|
14958
15067
|
constructor(core) {
|
|
@@ -15188,32 +15297,43 @@ class KritzelResizeHandler extends KritzelBaseHandler {
|
|
|
15188
15297
|
if (!this.hasResized) {
|
|
15189
15298
|
return;
|
|
15190
15299
|
}
|
|
15300
|
+
const rotation = selectionGroup.rotation;
|
|
15301
|
+
const sin = Math.sin(rotation);
|
|
15302
|
+
const cos = Math.cos(rotation);
|
|
15303
|
+
const objectScale = selectionGroup.scale || 1;
|
|
15304
|
+
const currentScale = this._core.store.state.scale;
|
|
15305
|
+
// Calculate delta in local unrotated space
|
|
15306
|
+
// We rotate the screen delta by -rotation to align with the object's axes
|
|
15307
|
+
const localDx = (dx * cos + dy * sin) / currentScale;
|
|
15308
|
+
const localDy = (-dx * sin + dy * cos) / currentScale;
|
|
15309
|
+
// Calculate the center of the selection group before resize
|
|
15310
|
+
const initialCenterX = this.initialSize.x + this.initialSize.width / objectScale / 2;
|
|
15311
|
+
const initialCenterY = this.initialSize.y + this.initialSize.height / objectScale / 2;
|
|
15312
|
+
// The center moves by half of the screen delta (scaled)
|
|
15313
|
+
// This is true regardless of rotation because the resize happens symmetrically around the center
|
|
15314
|
+
// relative to the fixed point logic
|
|
15315
|
+
const newCenterX = initialCenterX + dx / currentScale / 2;
|
|
15316
|
+
const newCenterY = initialCenterY + dy / currentScale / 2;
|
|
15191
15317
|
switch (this._core.store.state.resizeHandleType) {
|
|
15192
15318
|
case KritzelHandleType.TopLeft:
|
|
15193
|
-
this.newSize.width = this.initialSize.width -
|
|
15194
|
-
this.newSize.height = this.initialSize.height -
|
|
15195
|
-
this.newSize.x = dx / this._core.store.state.scale + this.initialSize.x;
|
|
15196
|
-
this.newSize.y = dy / this._core.store.state.scale + this.initialSize.y;
|
|
15319
|
+
this.newSize.width = this.initialSize.width - localDx * objectScale;
|
|
15320
|
+
this.newSize.height = this.initialSize.height - localDy * objectScale;
|
|
15197
15321
|
break;
|
|
15198
15322
|
case KritzelHandleType.TopRight:
|
|
15199
|
-
this.newSize.width = this.initialSize.width +
|
|
15200
|
-
this.newSize.height = this.initialSize.height -
|
|
15201
|
-
this.newSize.x = this.initialSize.x;
|
|
15202
|
-
this.newSize.y = dy / this._core.store.state.scale + this.initialSize.y;
|
|
15323
|
+
this.newSize.width = this.initialSize.width + localDx * objectScale;
|
|
15324
|
+
this.newSize.height = this.initialSize.height - localDy * objectScale;
|
|
15203
15325
|
break;
|
|
15204
15326
|
case KritzelHandleType.BottomLeft:
|
|
15205
|
-
this.newSize.width = this.initialSize.width -
|
|
15206
|
-
this.newSize.height = this.initialSize.height +
|
|
15207
|
-
this.newSize.x = dx / this._core.store.state.scale + this.initialSize.x;
|
|
15208
|
-
this.newSize.y = this.initialSize.y;
|
|
15327
|
+
this.newSize.width = this.initialSize.width - localDx * objectScale;
|
|
15328
|
+
this.newSize.height = this.initialSize.height + localDy * objectScale;
|
|
15209
15329
|
break;
|
|
15210
15330
|
case KritzelHandleType.BottomRight:
|
|
15211
|
-
this.newSize.width = this.initialSize.width +
|
|
15212
|
-
this.newSize.height = this.initialSize.height +
|
|
15213
|
-
this.newSize.x = this.initialSize.x;
|
|
15214
|
-
this.newSize.y = this.initialSize.y;
|
|
15331
|
+
this.newSize.width = this.initialSize.width + localDx * objectScale;
|
|
15332
|
+
this.newSize.height = this.initialSize.height + localDy * objectScale;
|
|
15215
15333
|
break;
|
|
15216
15334
|
}
|
|
15335
|
+
this.newSize.x = newCenterX - this.newSize.width / objectScale / 2;
|
|
15336
|
+
this.newSize.y = newCenterY - this.newSize.height / objectScale / 2;
|
|
15217
15337
|
selectionGroup.resize(this.newSize.x, this.newSize.y, this.newSize.width, this.newSize.height);
|
|
15218
15338
|
}
|
|
15219
15339
|
}
|
|
@@ -15239,32 +15359,43 @@ class KritzelResizeHandler extends KritzelBaseHandler {
|
|
|
15239
15359
|
if (!this.hasResized) {
|
|
15240
15360
|
return;
|
|
15241
15361
|
}
|
|
15362
|
+
const rotation = selectionGroup.rotation;
|
|
15363
|
+
const sin = Math.sin(rotation);
|
|
15364
|
+
const cos = Math.cos(rotation);
|
|
15365
|
+
const objectScale = selectionGroup.scale || 1;
|
|
15366
|
+
const currentScale = this._core.store.state.scale;
|
|
15367
|
+
// Calculate delta in local unrotated space
|
|
15368
|
+
// We rotate the screen delta by -rotation to align with the object's axes
|
|
15369
|
+
const localDx = (dx * cos + dy * sin) / currentScale;
|
|
15370
|
+
const localDy = (-dx * sin + dy * cos) / currentScale;
|
|
15371
|
+
// Calculate the center of the selection group before resize
|
|
15372
|
+
const initialCenterX = this.initialSize.x + this.initialSize.width / objectScale / 2;
|
|
15373
|
+
const initialCenterY = this.initialSize.y + this.initialSize.height / objectScale / 2;
|
|
15374
|
+
// The center moves by half of the screen delta (scaled)
|
|
15375
|
+
// This is true regardless of rotation because the resize happens symmetrically around the center
|
|
15376
|
+
// relative to the fixed point logic
|
|
15377
|
+
const newCenterX = initialCenterX + dx / currentScale / 2;
|
|
15378
|
+
const newCenterY = initialCenterY + dy / currentScale / 2;
|
|
15242
15379
|
switch (this._core.store.state.resizeHandleType) {
|
|
15243
15380
|
case KritzelHandleType.TopLeft:
|
|
15244
|
-
this.newSize.width = this.initialSize.width -
|
|
15245
|
-
this.newSize.height = this.initialSize.height -
|
|
15246
|
-
this.newSize.x = dx / this._core.store.state.scale + this.initialSize.x;
|
|
15247
|
-
this.newSize.y = dy / this._core.store.state.scale + this.initialSize.y;
|
|
15381
|
+
this.newSize.width = this.initialSize.width - localDx * objectScale;
|
|
15382
|
+
this.newSize.height = this.initialSize.height - localDy * objectScale;
|
|
15248
15383
|
break;
|
|
15249
15384
|
case KritzelHandleType.TopRight:
|
|
15250
|
-
this.newSize.width = this.initialSize.width +
|
|
15251
|
-
this.newSize.height = this.initialSize.height -
|
|
15252
|
-
this.newSize.x = this.initialSize.x;
|
|
15253
|
-
this.newSize.y = dy / this._core.store.state.scale + this.initialSize.y;
|
|
15385
|
+
this.newSize.width = this.initialSize.width + localDx * objectScale;
|
|
15386
|
+
this.newSize.height = this.initialSize.height - localDy * objectScale;
|
|
15254
15387
|
break;
|
|
15255
15388
|
case KritzelHandleType.BottomLeft:
|
|
15256
|
-
this.newSize.width = this.initialSize.width -
|
|
15257
|
-
this.newSize.height = this.initialSize.height +
|
|
15258
|
-
this.newSize.x = dx / this._core.store.state.scale + this.initialSize.x;
|
|
15259
|
-
this.newSize.y = this.initialSize.y;
|
|
15389
|
+
this.newSize.width = this.initialSize.width - localDx * objectScale;
|
|
15390
|
+
this.newSize.height = this.initialSize.height + localDy * objectScale;
|
|
15260
15391
|
break;
|
|
15261
15392
|
case KritzelHandleType.BottomRight:
|
|
15262
|
-
this.newSize.width = this.initialSize.width +
|
|
15263
|
-
this.newSize.height = this.initialSize.height +
|
|
15264
|
-
this.newSize.x = this.initialSize.x;
|
|
15265
|
-
this.newSize.y = this.initialSize.y;
|
|
15393
|
+
this.newSize.width = this.initialSize.width + localDx * objectScale;
|
|
15394
|
+
this.newSize.height = this.initialSize.height + localDy * objectScale;
|
|
15266
15395
|
break;
|
|
15267
15396
|
}
|
|
15397
|
+
this.newSize.x = newCenterX - this.newSize.width / objectScale / 2;
|
|
15398
|
+
this.newSize.y = newCenterY - this.newSize.height / objectScale / 2;
|
|
15268
15399
|
selectionGroup.resize(this.newSize.x, this.newSize.y, this.newSize.width, this.newSize.height);
|
|
15269
15400
|
}
|
|
15270
15401
|
}
|
|
@@ -15317,8 +15448,9 @@ class KritzelRotationHandler extends KritzelBaseHandler {
|
|
|
15317
15448
|
const clientX = event.clientX - this._core.store.offsetX;
|
|
15318
15449
|
const clientY = event.clientY - this._core.store.offsetY;
|
|
15319
15450
|
this._core.store.state.isRotating = true;
|
|
15320
|
-
const
|
|
15321
|
-
const
|
|
15451
|
+
const objectScale = selectionGroup.scale || 1;
|
|
15452
|
+
const centerX = selectionGroup.translateX + selectionGroup.width / 2 / objectScale;
|
|
15453
|
+
const centerY = selectionGroup.translateY + selectionGroup.height / 2 / objectScale;
|
|
15322
15454
|
const cursorX = (clientX - this._core.store.state.translateX) / this._core.store.state.scale;
|
|
15323
15455
|
const cursorY = (clientY - this._core.store.state.translateY) / this._core.store.state.scale;
|
|
15324
15456
|
this.initialSelectionGroupRotation = selectionGroup.rotation;
|
|
@@ -15339,8 +15471,9 @@ class KritzelRotationHandler extends KritzelBaseHandler {
|
|
|
15339
15471
|
const clientX = Math.round(firstTouch.clientX - this._core.store.offsetX);
|
|
15340
15472
|
const clientY = Math.round(firstTouch.clientY - this._core.store.offsetY);
|
|
15341
15473
|
this._core.store.state.isRotating = true;
|
|
15342
|
-
const
|
|
15343
|
-
const
|
|
15474
|
+
const objectScale = selectionGroup.scale || 1;
|
|
15475
|
+
const centerX = selectionGroup.translateX + selectionGroup.width / 2 / objectScale;
|
|
15476
|
+
const centerY = selectionGroup.translateY + selectionGroup.height / 2 / objectScale;
|
|
15344
15477
|
const cursorX = (clientX - this._core.store.state.translateX) / this._core.store.state.scale;
|
|
15345
15478
|
const cursorY = (clientY - this._core.store.state.translateY) / this._core.store.state.scale;
|
|
15346
15479
|
this.initialSelectionGroupRotation = selectionGroup.rotation;
|
|
@@ -15357,8 +15490,9 @@ class KritzelRotationHandler extends KritzelBaseHandler {
|
|
|
15357
15490
|
if (this._core.store.state.isRotating && selectionGroup) {
|
|
15358
15491
|
const clientX = event.clientX - this._core.store.offsetX;
|
|
15359
15492
|
const clientY = event.clientY - this._core.store.offsetY;
|
|
15360
|
-
const
|
|
15361
|
-
const
|
|
15493
|
+
const objectScale = selectionGroup.scale || 1;
|
|
15494
|
+
const groupCenterX = selectionGroup.translateX + selectionGroup.width / 2 / objectScale;
|
|
15495
|
+
const groupCenterY = selectionGroup.translateY + selectionGroup.height / 2 / objectScale;
|
|
15362
15496
|
const cursorX = (clientX - this._core.store.state.translateX) / this._core.store.state.scale;
|
|
15363
15497
|
const cursorY = (clientY - this._core.store.state.translateY) / this._core.store.state.scale;
|
|
15364
15498
|
const currentRotation = Math.atan2(groupCenterY - cursorY, groupCenterX - cursorX);
|
|
@@ -15376,8 +15510,9 @@ class KritzelRotationHandler extends KritzelBaseHandler {
|
|
|
15376
15510
|
if (this._core.store.state.isRotating && selectionGroup) {
|
|
15377
15511
|
const clientX = Math.round(firstTouch.clientX - this._core.store.offsetX);
|
|
15378
15512
|
const clientY = Math.round(firstTouch.clientY - this._core.store.offsetY);
|
|
15379
|
-
const
|
|
15380
|
-
const
|
|
15513
|
+
const objectScale = selectionGroup.scale || 1;
|
|
15514
|
+
const groupCenterX = selectionGroup.translateX + selectionGroup.width / 2 / objectScale;
|
|
15515
|
+
const groupCenterY = selectionGroup.translateY + selectionGroup.height / 2 / objectScale;
|
|
15381
15516
|
const cursorX = (clientX - this._core.store.state.translateX) / this._core.store.state.scale;
|
|
15382
15517
|
const cursorY = (clientY - this._core.store.state.translateY) / this._core.store.state.scale;
|
|
15383
15518
|
const currentRotation = Math.atan2(groupCenterY - cursorY, groupCenterX - cursorX);
|
|
@@ -15434,6 +15569,7 @@ class KritzelSelectionGroup extends KritzelBaseObject {
|
|
|
15434
15569
|
objectIds = [];
|
|
15435
15570
|
// Store snapshots of object state for transformations (rotation, resize)
|
|
15436
15571
|
unchangedObjectSnapshots = new Map();
|
|
15572
|
+
snapshotRotation = 0;
|
|
15437
15573
|
minX;
|
|
15438
15574
|
maxX;
|
|
15439
15575
|
minY;
|
|
@@ -15504,6 +15640,7 @@ class KritzelSelectionGroup extends KritzelBaseObject {
|
|
|
15504
15640
|
*/
|
|
15505
15641
|
captureUnchangedSnapshots() {
|
|
15506
15642
|
this.unchangedObjectSnapshots.clear();
|
|
15643
|
+
this.snapshotRotation = this.rotation;
|
|
15507
15644
|
this.objects.forEach(obj => {
|
|
15508
15645
|
this.unchangedObjectSnapshots.set(obj.id, {
|
|
15509
15646
|
id: obj.id,
|
|
@@ -15563,14 +15700,56 @@ class KritzelSelectionGroup extends KritzelBaseObject {
|
|
|
15563
15700
|
resize(x, y, width, height) {
|
|
15564
15701
|
const widthScaleFactor = width / this.width;
|
|
15565
15702
|
const heightScaleFactor = height / this.height;
|
|
15566
|
-
|
|
15567
|
-
const
|
|
15703
|
+
// Calculate old center
|
|
15704
|
+
const oldCenterX = this.translateX + this.totalWidth / 2 / this.scale;
|
|
15705
|
+
const oldCenterY = this.translateY + this.totalHeight / 2 / this.scale;
|
|
15706
|
+
// Calculate new center
|
|
15707
|
+
const newTotalWidth = width + this.padding * 2;
|
|
15708
|
+
const newTotalHeight = height + this.padding * 2;
|
|
15709
|
+
const newCenterX = x + newTotalWidth / 2 / this.scale;
|
|
15710
|
+
const newCenterY = y + newTotalHeight / 2 / this.scale;
|
|
15711
|
+
const rotation = this.rotation;
|
|
15712
|
+
const cos = Math.cos(-rotation);
|
|
15713
|
+
const sin = Math.sin(-rotation);
|
|
15714
|
+
const cosR = Math.cos(rotation);
|
|
15715
|
+
const sinR = Math.sin(rotation);
|
|
15568
15716
|
this._core.store.state.objects.transaction(() => {
|
|
15569
15717
|
this.objects.forEach(child => {
|
|
15570
|
-
|
|
15571
|
-
const
|
|
15572
|
-
const
|
|
15573
|
-
|
|
15718
|
+
// Calculate child center
|
|
15719
|
+
const childCenterX = child.translateX + child.totalWidth / 2 / child.scale;
|
|
15720
|
+
const childCenterY = child.translateY + child.totalHeight / 2 / child.scale;
|
|
15721
|
+
// Vector from old group center to child center
|
|
15722
|
+
const dx = childCenterX - oldCenterX;
|
|
15723
|
+
const dy = childCenterY - oldCenterY;
|
|
15724
|
+
// Rotate to local space (align with group axes)
|
|
15725
|
+
const localX = dx * cos - dy * sin;
|
|
15726
|
+
const localY = dx * sin + dy * cos;
|
|
15727
|
+
// Scale in local space
|
|
15728
|
+
const scaledLocalX = localX * widthScaleFactor;
|
|
15729
|
+
const scaledLocalY = localY * heightScaleFactor;
|
|
15730
|
+
// Rotate back to world space
|
|
15731
|
+
const rotatedX = scaledLocalX * cosR - scaledLocalY * sinR;
|
|
15732
|
+
const rotatedY = scaledLocalX * sinR + scaledLocalY * cosR;
|
|
15733
|
+
// New child center
|
|
15734
|
+
const newChildCenterX = newCenterX + rotatedX;
|
|
15735
|
+
const newChildCenterY = newCenterY + rotatedY;
|
|
15736
|
+
// New child top-left
|
|
15737
|
+
// Calculate relative rotation
|
|
15738
|
+
const relativeRotation = child.rotation - rotation;
|
|
15739
|
+
const cosRel = Math.cos(relativeRotation);
|
|
15740
|
+
const sinRel = Math.sin(relativeRotation);
|
|
15741
|
+
// Project the group's scale factors onto the child's local axes
|
|
15742
|
+
// We use absolute values because scaling is magnitude-based
|
|
15743
|
+
// If the child is aligned (0 deg), cos=1, sin=0 -> scales match
|
|
15744
|
+
// If the child is 90 deg, cos=0, sin=1 -> scales swap
|
|
15745
|
+
const newChildWidthScale = Math.sqrt(Math.pow(widthScaleFactor * cosRel, 2) + Math.pow(heightScaleFactor * sinRel, 2));
|
|
15746
|
+
const newChildHeightScale = Math.sqrt(Math.pow(widthScaleFactor * sinRel, 2) + Math.pow(heightScaleFactor * cosRel, 2));
|
|
15747
|
+
const updatedWidth = child.width * newChildWidthScale;
|
|
15748
|
+
const updatedHeight = child.height * newChildHeightScale;
|
|
15749
|
+
const updatedTotalWidth = updatedWidth + child.padding * 2;
|
|
15750
|
+
const updatedTotalHeight = updatedHeight + child.padding * 2;
|
|
15751
|
+
const updatedX = newChildCenterX - updatedTotalWidth / 2 / child.scale;
|
|
15752
|
+
const updatedY = newChildCenterY - updatedTotalHeight / 2 / child.scale;
|
|
15574
15753
|
child.resize(updatedX, updatedY, updatedWidth, updatedHeight);
|
|
15575
15754
|
});
|
|
15576
15755
|
// Refresh dimensions and update the SelectionGroup to propagate changes to other tabs
|
|
@@ -15583,7 +15762,7 @@ class KritzelSelectionGroup extends KritzelBaseObject {
|
|
|
15583
15762
|
this.rotation = value;
|
|
15584
15763
|
const centerX = this.translateX + this.totalWidth / 2 / this.scale;
|
|
15585
15764
|
const centerY = this.translateY + this.totalHeight / 2 / this.scale;
|
|
15586
|
-
const angle = value;
|
|
15765
|
+
const angle = value - this.snapshotRotation;
|
|
15587
15766
|
const cos = Math.cos(angle);
|
|
15588
15767
|
const sin = Math.sin(angle);
|
|
15589
15768
|
this._core.store.state.objects.transaction(() => {
|
|
@@ -15599,7 +15778,7 @@ class KritzelSelectionGroup extends KritzelBaseObject {
|
|
|
15599
15778
|
const rotatedY = sin * offsetX + cos * offsetY;
|
|
15600
15779
|
child.translateX = centerX + rotatedX - child.totalWidth / 2 / child.scale;
|
|
15601
15780
|
child.translateY = centerY + rotatedY - child.totalHeight / 2 / child.scale;
|
|
15602
|
-
child.rotate(this.objects.length === 1 ? value :
|
|
15781
|
+
child.rotate(this.objects.length === 1 ? value : unchangedSnapshot.rotation + angle);
|
|
15603
15782
|
});
|
|
15604
15783
|
});
|
|
15605
15784
|
}
|
|
@@ -15630,14 +15809,45 @@ class KritzelSelectionGroup extends KritzelBaseObject {
|
|
|
15630
15809
|
this.height = (this.maxY - this.minY - this.padding) * this.scale;
|
|
15631
15810
|
}
|
|
15632
15811
|
else {
|
|
15633
|
-
|
|
15634
|
-
|
|
15635
|
-
|
|
15636
|
-
|
|
15637
|
-
|
|
15638
|
-
|
|
15639
|
-
|
|
15640
|
-
this.
|
|
15812
|
+
const rotation = this.rotation;
|
|
15813
|
+
const cos = Math.cos(-rotation);
|
|
15814
|
+
const sin = Math.sin(-rotation);
|
|
15815
|
+
let minX = Infinity;
|
|
15816
|
+
let maxX = -Infinity;
|
|
15817
|
+
let minY = Infinity;
|
|
15818
|
+
let maxY = -Infinity;
|
|
15819
|
+
this.objects.forEach(obj => {
|
|
15820
|
+
const polygon = obj.rotatedPolygon;
|
|
15821
|
+
const corners = [polygon.topLeft, polygon.topRight, polygon.bottomRight, polygon.bottomLeft];
|
|
15822
|
+
corners.forEach(corner => {
|
|
15823
|
+
// Rotate corner into local space (aligned with group rotation)
|
|
15824
|
+
const rx = corner.x * cos - corner.y * sin;
|
|
15825
|
+
const ry = corner.x * sin + corner.y * cos;
|
|
15826
|
+
if (rx < minX)
|
|
15827
|
+
minX = rx;
|
|
15828
|
+
if (rx > maxX)
|
|
15829
|
+
maxX = rx;
|
|
15830
|
+
if (ry < minY)
|
|
15831
|
+
minY = ry;
|
|
15832
|
+
if (ry > maxY)
|
|
15833
|
+
maxY = ry;
|
|
15834
|
+
});
|
|
15835
|
+
});
|
|
15836
|
+
// Dimensions in world units (unrotated)
|
|
15837
|
+
const worldWidth = maxX - minX;
|
|
15838
|
+
const worldHeight = maxY - minY;
|
|
15839
|
+
this.width = (worldWidth - this.padding) * this.scale;
|
|
15840
|
+
this.height = (worldHeight - this.padding) * this.scale;
|
|
15841
|
+
// Center of the box in rotated space
|
|
15842
|
+
const cRx = (minX + maxX) / 2;
|
|
15843
|
+
const cRy = (minY + maxY) / 2;
|
|
15844
|
+
// Rotate center back to world space
|
|
15845
|
+
const cosR = Math.cos(rotation);
|
|
15846
|
+
const sinR = Math.sin(rotation);
|
|
15847
|
+
const cx = cRx * cosR - cRy * sinR;
|
|
15848
|
+
const cy = cRx * sinR + cRy * cosR;
|
|
15849
|
+
this.translateX = cx - (this.width / this.scale + 2 * this.padding) / 2;
|
|
15850
|
+
this.translateY = cy - (this.height / this.scale + 2 * this.padding) / 2;
|
|
15641
15851
|
}
|
|
15642
15852
|
this._core.store.state.objects.update(this);
|
|
15643
15853
|
}
|
|
@@ -31216,9 +31426,11 @@ exports.KritzelBaseHandler = KritzelBaseHandler;
|
|
|
31216
31426
|
exports.KritzelBaseObject = KritzelBaseObject;
|
|
31217
31427
|
exports.KritzelBaseTool = KritzelBaseTool;
|
|
31218
31428
|
exports.KritzelBrushTool = KritzelBrushTool;
|
|
31429
|
+
exports.KritzelCursorHelper = KritzelCursorHelper;
|
|
31219
31430
|
exports.KritzelDevicesHelper = KritzelDevicesHelper;
|
|
31220
31431
|
exports.KritzelEraserTool = KritzelEraserTool;
|
|
31221
31432
|
exports.KritzelEventHelper = KritzelEventHelper;
|
|
31433
|
+
exports.KritzelIconRegistry = KritzelIconRegistry;
|
|
31222
31434
|
exports.KritzelImage = KritzelImage;
|
|
31223
31435
|
exports.KritzelImageTool = KritzelImageTool;
|
|
31224
31436
|
exports.KritzelKeyboardHelper = KritzelKeyboardHelper;
|
|
@@ -31262,6 +31474,6 @@ exports.varStorage = varStorage;
|
|
|
31262
31474
|
exports.writeVarString = writeVarString$2;
|
|
31263
31475
|
exports.writeVarUint = writeVarUint$2;
|
|
31264
31476
|
exports.writeVarUint8Array = writeVarUint8Array$2;
|
|
31265
|
-
//# sourceMappingURL=default-text-tool.config-
|
|
31477
|
+
//# sourceMappingURL=default-text-tool.config-zB3FPuXq.js.map
|
|
31266
31478
|
|
|
31267
|
-
//# sourceMappingURL=default-text-tool.config-
|
|
31479
|
+
//# sourceMappingURL=default-text-tool.config-zB3FPuXq.js.map
|