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.
Files changed (171) hide show
  1. package/dist/cjs/{default-text-tool.config-BySzvIox.js → default-text-tool.config-zB3FPuXq.js} +270 -58
  2. package/dist/cjs/default-text-tool.config-zB3FPuXq.js.map +1 -0
  3. package/dist/cjs/index.cjs.js +2 -1
  4. package/dist/cjs/index.cjs.js.map +1 -1
  5. package/dist/cjs/kritzel-brush-style.cjs.entry.js +1 -1
  6. package/dist/cjs/kritzel-brush-style.entry.cjs.js.map +1 -1
  7. package/dist/cjs/kritzel-color_22.cjs.entry.js +108 -101
  8. package/dist/cjs/loader.cjs.js +1 -1
  9. package/dist/cjs/stencil.cjs.js +1 -1
  10. package/dist/collection/classes/core/store.class.js +3 -0
  11. package/dist/collection/classes/core/store.class.js.map +1 -1
  12. package/dist/collection/classes/handlers/resize.handler.js +54 -32
  13. package/dist/collection/classes/handlers/resize.handler.js.map +1 -1
  14. package/dist/collection/classes/handlers/rotation.handler.js +12 -8
  15. package/dist/collection/classes/handlers/rotation.handler.js.map +1 -1
  16. package/dist/collection/classes/objects/selection-group.class.js +91 -16
  17. package/dist/collection/classes/objects/selection-group.class.js.map +1 -1
  18. package/dist/collection/classes/registries/icon-registry.class.js +6 -1
  19. package/dist/collection/classes/registries/icon-registry.class.js.map +1 -1
  20. package/dist/collection/components/core/kritzel-cursor-trail/kritzel-cursor-trail.js +1 -1
  21. package/dist/collection/components/core/kritzel-editor/kritzel-editor.js +1 -1
  22. package/dist/collection/components/core/kritzel-engine/kritzel-engine.css +0 -14
  23. package/dist/collection/components/core/kritzel-engine/kritzel-engine.js +80 -10
  24. package/dist/collection/components/core/kritzel-engine/kritzel-engine.js.map +1 -1
  25. package/dist/collection/components/shared/kritzel-brush-style/kritzel-brush-style.css +0 -1
  26. package/dist/collection/components/shared/kritzel-color/kritzel-color.js +2 -2
  27. package/dist/collection/components/shared/kritzel-color-palette/kritzel-color-palette.css +1 -1
  28. package/dist/collection/components/shared/kritzel-color-palette/kritzel-color-palette.js +1 -1
  29. package/dist/collection/components/shared/kritzel-dropdown/kritzel-dropdown.css +1 -1
  30. package/dist/collection/components/shared/kritzel-font/kritzel-font.js +1 -1
  31. package/dist/collection/components/shared/kritzel-font-family/kritzel-font-family.css +1 -1
  32. package/dist/collection/components/shared/kritzel-font-family/kritzel-font-family.js +1 -1
  33. package/dist/collection/components/shared/kritzel-font-size/kritzel-font-size.css +1 -1
  34. package/dist/collection/components/shared/kritzel-font-size/kritzel-font-size.js +1 -1
  35. package/dist/collection/components/shared/kritzel-menu/kritzel-menu.js +1 -1
  36. package/dist/collection/components/shared/kritzel-menu-item/kritzel-menu-item.css +1 -2
  37. package/dist/collection/components/shared/kritzel-menu-item/kritzel-menu-item.js +2 -2
  38. package/dist/collection/components/shared/kritzel-portal/kritzel-portal.js +1 -1
  39. package/dist/collection/components/shared/kritzel-split-button/kritzel-split-button.css +1 -1
  40. package/dist/collection/components/shared/kritzel-split-button/kritzel-split-button.js +1 -1
  41. package/dist/collection/components/shared/kritzel-stroke-size/kritzel-stroke-size.css +1 -1
  42. package/dist/collection/components/shared/kritzel-stroke-size/kritzel-stroke-size.js +1 -1
  43. package/dist/collection/components/shared/kritzel-tooltip/kritzel-tooltip.js +4 -4
  44. package/dist/collection/components/ui/kritzel-context-menu/kritzel-context-menu.css +1 -2
  45. package/dist/collection/components/ui/kritzel-context-menu/kritzel-context-menu.js +1 -1
  46. package/dist/collection/components/ui/kritzel-control-brush-config/kritzel-control-brush-config.css +1 -1
  47. package/dist/collection/components/ui/kritzel-control-brush-config/kritzel-control-brush-config.js +2 -2
  48. package/dist/collection/components/ui/kritzel-control-text-config/kritzel-control-text-config.css +1 -1
  49. package/dist/collection/components/ui/kritzel-control-text-config/kritzel-control-text-config.js +2 -2
  50. package/dist/collection/components/ui/kritzel-controls/kritzel-controls.css +4 -4
  51. package/dist/collection/components/ui/kritzel-controls/kritzel-controls.js +3 -3
  52. package/dist/collection/components/ui/kritzel-utility-panel/kritzel-utility-panel.css +1 -1
  53. package/dist/collection/components/ui/kritzel-utility-panel/kritzel-utility-panel.js +1 -1
  54. package/dist/collection/configs/default-engine-config.js +6 -0
  55. package/dist/collection/configs/default-engine-config.js.map +1 -1
  56. package/dist/collection/helpers/cursor.helper.js +58 -0
  57. package/dist/collection/helpers/cursor.helper.js.map +1 -0
  58. package/dist/collection/index.js +1 -0
  59. package/dist/collection/index.js.map +1 -1
  60. package/dist/collection/interfaces/engine-state.interface.js.map +1 -1
  61. package/dist/components/index.js +2 -2
  62. package/dist/components/kritzel-brush-style.js +3 -3
  63. package/dist/components/kritzel-brush-style.js.map +1 -1
  64. package/dist/components/kritzel-color-palette.js +1 -1
  65. package/dist/components/kritzel-color.js +1 -1
  66. package/dist/components/kritzel-context-menu.js +1 -1
  67. package/dist/components/kritzel-control-brush-config.js +1 -1
  68. package/dist/components/kritzel-control-text-config.js +1 -1
  69. package/dist/components/kritzel-controls.js +1 -1
  70. package/dist/components/kritzel-cursor-trail.js +1 -1
  71. package/dist/components/kritzel-dropdown.js +1 -1
  72. package/dist/components/kritzel-editor.js +21 -21
  73. package/dist/components/kritzel-engine.js +1 -1
  74. package/dist/components/kritzel-font-family.js +1 -1
  75. package/dist/components/kritzel-font-size.js +1 -1
  76. package/dist/components/kritzel-font.js +1 -1
  77. package/dist/components/kritzel-icon.js +1 -1
  78. package/dist/components/kritzel-menu-item.js +1 -1
  79. package/dist/components/kritzel-menu.js +1 -1
  80. package/dist/components/kritzel-portal.js +1 -1
  81. package/dist/components/kritzel-split-button.js +1 -1
  82. package/dist/components/kritzel-stroke-size.js +1 -1
  83. package/dist/components/kritzel-tooltip.js +1 -1
  84. package/dist/components/kritzel-utility-panel.js +1 -1
  85. package/dist/components/kritzel-workspace-manager.js +1 -1
  86. package/dist/components/{p-CK6no3mi.js → p-58y59Acb.js} +6 -6
  87. package/dist/components/{p-CK6no3mi.js.map → p-58y59Acb.js.map} +1 -1
  88. package/dist/components/{p-CTP479Lf.js → p-9Fzdviju.js} +6 -6
  89. package/dist/components/{p-CTP479Lf.js.map → p-9Fzdviju.js.map} +1 -1
  90. package/dist/components/{p-DDmSxM5f.js → p-B6r22FSC.js} +5 -5
  91. package/dist/components/p-B6r22FSC.js.map +1 -0
  92. package/dist/components/{p-CLt3HMl6.js → p-B_3OZeom.js} +3 -3
  93. package/dist/components/{p-CLt3HMl6.js.map → p-B_3OZeom.js.map} +1 -1
  94. package/dist/components/{p-TdCTkEu0.js → p-BdZKPKnx.js} +7 -7
  95. package/dist/components/p-BdZKPKnx.js.map +1 -0
  96. package/dist/components/{p-CIXPLjCu.js → p-BdwB-S9G.js} +3 -3
  97. package/dist/components/p-BdwB-S9G.js.map +1 -0
  98. package/dist/components/{p-1lIHoOlH.js → p-BpXgwgnV.js} +18 -18
  99. package/dist/components/p-BpXgwgnV.js.map +1 -0
  100. package/dist/components/{p-D1uj4A4F.js → p-Brd9SxWS.js} +5 -5
  101. package/dist/components/p-Brd9SxWS.js.map +1 -0
  102. package/dist/components/{p-CsA9M6me.js → p-CC8KFHSe.js} +8 -8
  103. package/dist/components/p-CC8KFHSe.js.map +1 -0
  104. package/dist/components/{p-BgznZoBH.js → p-CFH6XRL5.js} +5 -5
  105. package/dist/components/p-CFH6XRL5.js.map +1 -0
  106. package/dist/components/{p-B4kxkVe-.js → p-CRGwaUcp.js} +5 -5
  107. package/dist/components/p-CRGwaUcp.js.map +1 -0
  108. package/dist/components/{p-uuRJU2R1.js → p-Ck4lGnmt.js} +3 -3
  109. package/dist/components/{p-uuRJU2R1.js.map → p-Ck4lGnmt.js.map} +1 -1
  110. package/dist/components/{p-BAplhrRJ.js → p-D7BLVRXX.js} +289 -75
  111. package/dist/components/p-D7BLVRXX.js.map +1 -0
  112. package/dist/components/{p-C2sWlNsJ.js → p-D_ygcWSz.js} +5 -5
  113. package/dist/components/p-D_ygcWSz.js.map +1 -0
  114. package/dist/components/p-DbKKCHKd.js +103 -0
  115. package/dist/components/p-DbKKCHKd.js.map +1 -0
  116. package/dist/components/{p-Ddh40W3x.js → p-Doixm8-N.js} +9 -9
  117. package/dist/components/p-Doixm8-N.js.map +1 -0
  118. package/dist/components/{p-BQg4YML7.js → p-DxNbcUzt.js} +12 -12
  119. package/dist/components/p-DxNbcUzt.js.map +1 -0
  120. package/dist/components/{p-D4yvhd1d.js → p-LAsVgL2e.js} +4 -4
  121. package/dist/components/{p-D4yvhd1d.js.map → p-LAsVgL2e.js.map} +1 -1
  122. package/dist/components/{p-D5Wq4x4r.js → p-OFrACpZf.js} +3 -3
  123. package/dist/components/{p-D5Wq4x4r.js.map → p-OFrACpZf.js.map} +1 -1
  124. package/dist/components/{p-DAfkuR8U.js → p-i0IlGLv2.js} +5 -5
  125. package/dist/components/p-i0IlGLv2.js.map +1 -0
  126. package/dist/esm/{default-text-tool.config-2YFQA3SF.js → default-text-tool.config-BvCgOiKA.js} +269 -59
  127. package/dist/esm/default-text-tool.config-BvCgOiKA.js.map +1 -0
  128. package/dist/esm/index.js +2 -2
  129. package/dist/esm/kritzel-brush-style.entry.js +1 -1
  130. package/dist/esm/kritzel-brush-style.entry.js.map +1 -1
  131. package/dist/esm/kritzel-color_22.entry.js +106 -99
  132. package/dist/esm/loader.js +1 -1
  133. package/dist/esm/stencil.js +1 -1
  134. package/dist/stencil/index.esm.js +1 -1
  135. package/dist/stencil/kritzel-brush-style.entry.esm.js.map +1 -1
  136. package/dist/stencil/p-385bab97.entry.js +2 -0
  137. package/dist/stencil/{p-d702c5af.entry.js.map → p-385bab97.entry.js.map} +1 -1
  138. package/dist/stencil/p-6d9756d9.entry.js +10 -0
  139. package/dist/stencil/p-6d9756d9.entry.js.map +1 -0
  140. package/dist/stencil/{p-2YFQA3SF.js → p-BvCgOiKA.js} +2 -2
  141. package/dist/stencil/p-BvCgOiKA.js.map +1 -0
  142. package/dist/stencil/stencil.esm.js +1 -1
  143. package/dist/types/classes/core/store.class.d.ts +1 -0
  144. package/dist/types/classes/objects/selection-group.class.d.ts +1 -0
  145. package/dist/types/components/core/kritzel-engine/kritzel-engine.d.ts +4 -0
  146. package/dist/types/components.d.ts +2 -0
  147. package/dist/types/helpers/cursor.helper.d.ts +22 -0
  148. package/dist/types/index.d.ts +1 -0
  149. package/dist/types/interfaces/engine-state.interface.d.ts +7 -0
  150. package/package.json +1 -1
  151. package/dist/cjs/default-text-tool.config-BySzvIox.js.map +0 -1
  152. package/dist/components/p-1lIHoOlH.js.map +0 -1
  153. package/dist/components/p-B4kxkVe-.js.map +0 -1
  154. package/dist/components/p-BAplhrRJ.js.map +0 -1
  155. package/dist/components/p-BQg4YML7.js.map +0 -1
  156. package/dist/components/p-BgznZoBH.js.map +0 -1
  157. package/dist/components/p-Bhtn9qay.js +0 -98
  158. package/dist/components/p-Bhtn9qay.js.map +0 -1
  159. package/dist/components/p-C2sWlNsJ.js.map +0 -1
  160. package/dist/components/p-CIXPLjCu.js.map +0 -1
  161. package/dist/components/p-CsA9M6me.js.map +0 -1
  162. package/dist/components/p-D1uj4A4F.js.map +0 -1
  163. package/dist/components/p-DAfkuR8U.js.map +0 -1
  164. package/dist/components/p-DDmSxM5f.js.map +0 -1
  165. package/dist/components/p-Ddh40W3x.js.map +0 -1
  166. package/dist/components/p-TdCTkEu0.js.map +0 -1
  167. package/dist/esm/default-text-tool.config-2YFQA3SF.js.map +0 -1
  168. package/dist/stencil/p-2YFQA3SF.js.map +0 -1
  169. package/dist/stencil/p-2e85a4af.entry.js +0 -10
  170. package/dist/stencil/p-2e85a4af.entry.js.map +0 -1
  171. package/dist/stencil/p-d702c5af.entry.js +0 -2
@@ -14,6 +14,7 @@ import { ABSOLUTE_SCALE_MAX, ABSOLUTE_SCALE_MIN } from "../../../constants/engin
14
14
  import { KritzelCore } from "../../../classes/core/core.class";
15
15
  import { KritzelDevicesHelper } from "../../../helpers/devices.helper";
16
16
  import { throttle } from "lodash";
17
+ import { KritzelCursorHelper } from "../../../helpers/cursor.helper";
17
18
  export class KritzelEngine {
18
19
  host;
19
20
  workspace;
@@ -51,6 +52,15 @@ export class KritzelEngine {
51
52
  this.core.store.state.scaleMin = newValue;
52
53
  }
53
54
  }
55
+ cursorTarget;
56
+ onCursorTargetChange(newValue) {
57
+ // Reset cursor on old target
58
+ if (this.cursorTargetElement) {
59
+ this.cursorTargetElement.style.cursor = '';
60
+ }
61
+ // Set new target (defaults to document.body)
62
+ this.cursorTargetElement = newValue || document.body;
63
+ }
54
64
  isEngineReady;
55
65
  activeToolChange;
56
66
  workspacesChange;
@@ -91,7 +101,9 @@ export class KritzelEngine {
91
101
  if (this.core.store.isDisabled) {
92
102
  return;
93
103
  }
94
- this.core.store.state.pointers.set(ev.pointerId, ev);
104
+ if (this.core.store.state.pointers.has(ev.pointerId)) {
105
+ this.core.store.state.pointers.set(ev.pointerId, ev);
106
+ }
95
107
  if (this.core.store.state.pointers.size > 1) {
96
108
  this.throttledPointerMoveMulti(ev);
97
109
  }
@@ -104,6 +116,10 @@ export class KritzelEngine {
104
116
  }
105
117
  this.core.store.state.pointers.delete(ev.pointerId);
106
118
  this.host.releasePointerCapture(ev.pointerId);
119
+ // Reset cursor to default when all pointers are released
120
+ if (this.core.store.state.pointers.size === 0) {
121
+ this.core.store.state.cursor = { icon: 'default', iconActive: 'default' };
122
+ }
107
123
  this.viewport.handlePointerUp(ev);
108
124
  this.core.store.state?.activeTool?.handlePointerUp(ev);
109
125
  }
@@ -113,6 +129,10 @@ export class KritzelEngine {
113
129
  }
114
130
  this.host.releasePointerCapture(ev.pointerId);
115
131
  this.core.store.state.pointers.delete(ev.pointerId);
132
+ // Reset cursor to default when all pointers are released
133
+ if (this.core.store.state.pointers.size === 0) {
134
+ this.core.store.state.cursor = { icon: 'default', iconActive: 'default' };
135
+ }
116
136
  this.viewport.handlePointerUp(ev);
117
137
  this.core.store.state?.activeTool?.handlePointerUp(ev);
118
138
  }
@@ -287,6 +307,7 @@ export class KritzelEngine {
287
307
  contextMenuHandler;
288
308
  keyHandler;
289
309
  contextMenuElement = null;
310
+ cursorTargetElement = null;
290
311
  get isSelecting() {
291
312
  return this.core.store.state.activeTool instanceof KritzelSelectionTool && this.core.store.state.isSelecting;
292
313
  }
@@ -299,6 +320,12 @@ export class KritzelEngine {
299
320
  disconnectedCallback() {
300
321
  this.throttledWheel.cancel();
301
322
  this.throttledPointerMoveMulti.cancel();
323
+ // Reset cursor on target element
324
+ if (this.cursorTargetElement) {
325
+ this.cursorTargetElement.style.cursor = '';
326
+ this.cursorTargetElement.style.removeProperty('--kritzel-pointer-cursor');
327
+ this.cursorTargetElement = null;
328
+ }
302
329
  }
303
330
  componentWillLoad() {
304
331
  this.validateScaleMax(this.scaleMax);
@@ -308,6 +335,10 @@ export class KritzelEngine {
308
335
  this.contextMenuHandler = new KritzelContextMenuHandler(this.core, this.globalContextMenuItems, this.objectContextMenuItems);
309
336
  this.keyHandler = new KritzelKeyHandler(this.core);
310
337
  this.viewport = new KritzelViewport(this.core, this.host);
338
+ // Set cursor target element (use prop value or default to document.body)
339
+ this.cursorTargetElement = this.cursorTarget || document.body;
340
+ // Set the pointer cursor CSS variable for child components to use
341
+ this.cursorTargetElement.style.setProperty('--kritzel-pointer-cursor', KritzelCursorHelper.getPointerCursor());
311
342
  // Set sync configuration if provided
312
343
  if (this.syncConfig) {
313
344
  this.core.setSyncConfig(this.syncConfig);
@@ -349,6 +380,20 @@ export class KritzelEngine {
349
380
  KritzelKeyboardHelper.forceHideKeyboard();
350
381
  this.core.rerender();
351
382
  }
383
+ updateCursor() {
384
+ const state = this.core.store.state;
385
+ const isPointerDown = this.core.store.isPointerDown;
386
+ const icon = state.cursor?.icon;
387
+ const iconActive = state.cursor?.iconActive ?? icon;
388
+ const rotation = state.cursor?.rotation;
389
+ const cursor = KritzelCursorHelper.getCursor({
390
+ iconName: isPointerDown ? iconActive : icon,
391
+ rotation: rotation,
392
+ });
393
+ if (this.cursorTargetElement) {
394
+ this.cursorTargetElement.style.cursor = cursor;
395
+ }
396
+ }
352
397
  render() {
353
398
  const computedStyle = window.getComputedStyle(this.host);
354
399
  const baseHandleSizePx = computedStyle.getPropertyValue('--kritzel-selection-handle-size').trim() || '6px';
@@ -365,7 +410,8 @@ export class KritzelEngine {
365
410
  depth: 100,
366
411
  };
367
412
  const visibleObjects = this.core.store.state.objects.query(viewportBounds);
368
- return (h(Host, { key: '1a76bcddde5f1aa68dd20a73af61f6f89ab08c78' }, this.core.store.state.debugInfo.showViewportInfo && (h("div", { key: '9be109e44187d7d2072e115533b3c58a36351993', class: "debug-panel" }, h("div", { key: 'de16ca51bc04f851ef65a9a937829916041abd1c' }, "ActiveWorkspaceId: ", this.core.store.state?.activeWorkspace?.id), h("div", { key: '299b05d4091d6c883ee637207e242e3fdb93f19c' }, "ActiveWorkspaceName: ", this.core.store.state?.activeWorkspace?.name), h("div", { key: '9ef3f04b7fcb42ec87d8b7e6b9f5e914918fd780' }, "TranslateX: ", this.core.store.state?.translateX), h("div", { key: 'cd920e869be5112c7dbe7d494f9fa06902c3d30a' }, "TranslateY: ", this.core.store.state?.translateY), h("div", { key: 'd8d28322f8cc2b5cf9a3da2c97c91e3115f53ddc' }, "ViewportWidth: ", this.core.store.state?.viewportWidth), h("div", { key: 'e8d920e10b020b359533682452f76489bc8e9f2d' }, "ViewportHeight: ", this.core.store.state?.viewportHeight), h("div", { key: '768280f7bf01703c9f6ea22b06b89fe7130006a4' }, "PointerCount: ", this.core.store.state.pointers.size), h("div", { key: 'ff0f5e860a9987abaf8c81b95d1476af19d9b186' }, "Scale: ", this.core.store.state?.scale), h("div", { key: 'a672fbf63576a1776f4d3960d9f36493a4308a79' }, "ActiveTool: ", this.core.store.state?.activeTool?.name), h("div", { key: 'd562bff5d582e3df38e0a62229c8c7b0700b9fa0' }, "HasViewportChanged: ", this.core.store.state?.hasViewportChanged ? 'true' : 'false'), h("div", { key: 'd6b2646e7fd0abb5d39928c51ad340ccf306db01' }, "IsEnabled: ", this.core.store.state?.isEnabled ? 'true' : 'false'), h("div", { key: '453e3d3691aad984895241734c70de61cbcd60ec' }, "IsScaling: ", this.core.store.state?.isScaling ? 'true' : 'false'), h("div", { key: '156668df87ea5001c7348c1c141f1c8601fe23da' }, "IsPanning: ", this.core.store.state?.isPanning ? 'true' : 'false'), h("div", { key: '86f956f35a84961c17685ebfd7cb73e92f04cd45' }, "IsSelecting: ", this.isSelecting ? 'true' : 'false'), h("div", { key: '73581c5791434983308d49e5c41f82836729a75d' }, "IsSelectionActive: ", this.isSelectionActive ? 'true' : 'false'), h("div", { key: '23f3eef374052545b7e99b0cb58a00011b421188' }, "IsResizeHandleSelected: ", this.core.store.state.isResizeHandleSelected ? 'true' : 'false'), h("div", { key: '51842e9f6e95413e6defbe6f81f43c1c7559be3e' }, "IsRotationHandleSelected: ", this.core.store.state.isRotationHandleSelected ? 'true' : 'false'), h("div", { key: 'b835c25cb75bc6f6d29a71ba25b18735f60319f8' }, "IsDrawing: ", this.core.store.state.isDrawing ? 'true' : 'false'), h("div", { key: '9a9740f44f06d57f2f9a1fce94ca2330a9c14e29' }, "IsWriting: ", this.core.store.state.isWriting ? 'true' : 'false'), h("div", { key: '9b97322077152d4fbcb98bc650ee7d0555f8d06d' }, "PointerX: ", this.core.store.state?.pointerX), h("div", { key: '9eddc79647458ca7b72e3241709fc36276587159' }, "PointerY: ", this.core.store.state?.pointerY), h("div", { key: '426ac2bf30669cc79beda5c2e5136eba5c29c578' }, "SelectedObjects: ", this.core.store.selectionGroup?.objects.length || 0), h("div", { key: '8544b6e8aaeacee60fe9597ec13af11c938eaacf' }, "ViewportCenter: (", viewportCenterX.toFixed(2), ", ", viewportCenterY.toFixed(2), ")"))), h("div", { key: '5101eecff40329a93b5ac6eb09830f1067ebaa90', id: "origin", class: "origin", style: {
413
+ this.updateCursor();
414
+ return (h(Host, { key: '192c356c5476b2b3cf370b05efd5742776423200' }, this.core.store.state.debugInfo.showViewportInfo && (h("div", { key: 'fae1b053c1eda01726f6b583a8dd167bb1c34aa1', class: "debug-panel" }, h("div", { key: '0e0fab7c39c1c8116831cf7b228914b0c40fb338' }, "ActiveWorkspaceId: ", this.core.store.state?.activeWorkspace?.id), h("div", { key: '770d284f5104919c5c6a36e653971d3662e9428b' }, "ActiveWorkspaceName: ", this.core.store.state?.activeWorkspace?.name), h("div", { key: '4937256ccf074a0a2fffb9c8c32a8c6ba41d3fb4' }, "TranslateX: ", this.core.store.state?.translateX), h("div", { key: '447d95aed0dda6e212e7c67ff4bc0a2e574131fd' }, "TranslateY: ", this.core.store.state?.translateY), h("div", { key: '548a04b16f68873e5fc0a2767146b52e83b9f0f8' }, "ViewportWidth: ", this.core.store.state?.viewportWidth), h("div", { key: '16a92abf89f1b438f14f311dd248ae82e1ac1982' }, "ViewportHeight: ", this.core.store.state?.viewportHeight), h("div", { key: '92a2abc5a757c64d764f3e1ee525556eb6a88852' }, "PointerCount: ", this.core.store.state.pointers.size), h("div", { key: '7677d4fd149ef2507626e50502d7c2b74fb294af' }, "Scale: ", this.core.store.state?.scale), h("div", { key: '3120c7ff85fd9f8ef14fb313b9aae6f2fc817f75' }, "ActiveTool: ", this.core.store.state?.activeTool?.name), h("div", { key: '100cd8a8c221d66046d9ff869b23809ca2568d12' }, "HasViewportChanged: ", this.core.store.state?.hasViewportChanged ? 'true' : 'false'), h("div", { key: '2efec039f635eec81d172113d55284eb9002f339' }, "IsEnabled: ", this.core.store.state?.isEnabled ? 'true' : 'false'), h("div", { key: 'f1df2fbf86a1944831c26a23e8c0baadd5ba1c56' }, "IsScaling: ", this.core.store.state?.isScaling ? 'true' : 'false'), h("div", { key: '10098cd2ffd07200fc8a12941ffd91fc1fac4de8' }, "IsPanning: ", this.core.store.state?.isPanning ? 'true' : 'false'), h("div", { key: '75043ccdac3ef3b02dae17b758813132174c2034' }, "IsSelecting: ", this.isSelecting ? 'true' : 'false'), h("div", { key: '59217b67d572cc60fc8381bcc930a952fea2faaa' }, "IsSelectionActive: ", this.isSelectionActive ? 'true' : 'false'), h("div", { key: 'c4a7d64031d3b430673adb6adcb7f525f7a47ddc' }, "IsResizeHandleSelected: ", this.core.store.state.isResizeHandleSelected ? 'true' : 'false'), h("div", { key: 'd62bef9cab424e77781a3d5639552b8122e92238' }, "IsRotationHandleSelected: ", this.core.store.state.isRotationHandleSelected ? 'true' : 'false'), h("div", { key: 'ab5dbbc947b335a1396a945328a5939d690d8cd0' }, "IsRotationHandleHovered: ", this.core.store.state.isRotationHandleHovered ? 'true' : 'false'), h("div", { key: 'fb2c19a0cdc070ecbf28e51b08112a73ffcf2817' }, "IsDrawing: ", this.core.store.state.isDrawing ? 'true' : 'false'), h("div", { key: '2d5519541aeb9a6423524463a03d1626f5eaf6ca' }, "IsWriting: ", this.core.store.state.isWriting ? 'true' : 'false'), h("div", { key: 'f86b578263c68ac194d6b3d606a1cb31717b1792' }, "IsPointerDown: ", this.core.store.isPointerDown ? 'true' : 'false'), h("div", { key: '52ed5379ef3e9a18cbabe14be8106055a8f71ede' }, "PointerX: ", this.core.store.state?.pointerX), h("div", { key: '6b97e5f6c90666283fb5cfed0cf0e3b7bc0fffe3' }, "PointerY: ", this.core.store.state?.pointerY), h("div", { key: '5f80b9d4121974ee1e8afe89925b6b38b840e90f' }, "SelectedObjects: ", this.core.store.selectionGroup?.objects.length || 0), h("div", { key: '8a280b4454677f5dc29e4a2a39fd4f7cfc8c26df' }, "ViewportCenter: (", viewportCenterX.toFixed(2), ", ", viewportCenterY.toFixed(2), ")"))), h("div", { key: '660dd95852906f5c049b9527b26ea0af3fa04274', id: "origin", class: "origin", style: {
369
415
  transform: `matrix(${this.core.store.state?.scale}, 0, 0, ${this.core.store.state?.scale}, ${this.core.store.state?.translateX}, ${this.core.store.state?.translateY})`,
370
416
  } }, visibleObjects?.map(object => {
371
417
  return (h("div", { key: object.id, style: {
@@ -463,25 +509,25 @@ export class KritzelEngine {
463
509
  } }), h("circle", { class: "resize-handle-overlay top-left", cx: "0", cy: "0", r: `${(baseHandleTouchSize * object.scale) / this.core.store.state?.scale}`, style: {
464
510
  fill: 'transparent',
465
511
  paintOrder: 'fill',
466
- } }), h("circle", { class: "resize-handle top-right", cx: object.totalWidth, cy: "0", r: `${(baseHandleSize * object.scale) / this.core.store.state?.scale}`, style: {
512
+ }, onPointerEnter: () => !this.core.store.isPointerDown && (this.core.store.state.cursor = { icon: 'move-vertical', rotation: object.rotationDegrees - 45 }), onPointerLeave: () => !this.core.store.isPointerDown && (this.core.store.state.cursor = { icon: 'default', iconActive: 'default' }) }), h("circle", { class: "resize-handle top-right", cx: object.totalWidth, cy: "0", r: `${(baseHandleSize * object.scale) / this.core.store.state?.scale}`, style: {
467
513
  fill: 'var(--kritzel-selection-handle-color, #000000)',
468
514
  paintOrder: 'fill',
469
515
  } }), h("circle", { class: "resize-handle-overlay top-right", cx: object.totalWidth, cy: "0", r: `${(baseHandleTouchSize * object.scale) / this.core.store.state?.scale}`, style: {
470
516
  fill: 'transparent',
471
517
  paintOrder: 'fill',
472
- } }), h("circle", { class: "resize-handle bottom-left", cx: "0", cy: object.totalHeight, r: `${(baseHandleSize * object.scale) / this.core.store.state?.scale}`, style: {
518
+ }, onPointerEnter: () => !this.core.store.isPointerDown && (this.core.store.state.cursor = { icon: 'move-vertical', rotation: object.rotationDegrees + 45 }), onPointerLeave: () => !this.core.store.isPointerDown && (this.core.store.state.cursor = { icon: 'default', iconActive: 'default' }) }), h("circle", { class: "resize-handle bottom-left", cx: "0", cy: object.totalHeight, r: `${(baseHandleSize * object.scale) / this.core.store.state?.scale}`, style: {
473
519
  fill: 'var(--kritzel-selection-handle-color, #000000)',
474
520
  paintOrder: 'fill',
475
521
  } }), h("circle", { class: "resize-handle-overlay bottom-left", cx: "0", cy: object.totalHeight, r: `${(baseHandleTouchSize * object.scale) / this.core.store.state?.scale}`, style: {
476
522
  fill: 'transparent',
477
523
  paintOrder: 'fill',
478
- } }), h("circle", { class: "resize-handle bottom-right", cx: object.totalWidth, cy: object.totalHeight, r: `${(baseHandleSize * object.scale) / this.core.store.state?.scale}`, style: {
524
+ }, onPointerEnter: () => !this.core.store.isPointerDown && (this.core.store.state.cursor = { icon: 'move-vertical', rotation: object.rotationDegrees + 45 }), onPointerLeave: () => !this.core.store.isPointerDown && (this.core.store.state.cursor = { icon: 'default', iconActive: 'default' }) }), h("circle", { class: "resize-handle bottom-right", cx: object.totalWidth, cy: object.totalHeight, r: `${(baseHandleSize * object.scale) / this.core.store.state?.scale}`, style: {
479
525
  fill: 'var(--kritzel-selection-handle-color, #000000)',
480
526
  paintOrder: 'fill',
481
527
  } }), h("circle", { class: "resize-handle-overlay bottom-right", cx: object.totalWidth, cy: object.totalHeight, r: `${(baseHandleTouchSize * object.scale) / this.core.store.state?.scale}`, style: {
482
528
  fill: 'transparent',
483
529
  paintOrder: 'fill',
484
- } }), h("line", { x1: object.totalWidth / 2, y1: "0", x2: object.totalWidth / 2, y2: -((15 * object.scale) / this.core.store.state?.scale), style: {
530
+ }, onPointerEnter: () => !this.core.store.isPointerDown && (this.core.store.state.cursor = { icon: 'move-vertical', rotation: object.rotationDegrees - 45 }), onPointerLeave: () => !this.core.store.isPointerDown && (this.core.store.state.cursor = { icon: 'default', iconActive: 'default' }) }), h("line", { x1: object.totalWidth / 2, y1: "0", x2: object.totalWidth / 2, y2: -((15 * object.scale) / this.core.store.state?.scale), style: {
485
531
  stroke: 'var(--kritzel-selection-border-color, #007AFF)',
486
532
  strokeWidth: `calc(var(--kritzel-selection-border-width, 2px) * ${object.scale} / ${this.core.store.state?.scale})`,
487
533
  } }), h("circle", { class: "rotation-handle", cx: object.totalWidth / 2, cy: -((15 * object.scale) / this.core.store.state?.scale), r: `${(baseHandleSize * object.scale) / this.core.store.state?.scale}`, style: {
@@ -489,10 +535,9 @@ export class KritzelEngine {
489
535
  paintOrder: 'fill',
490
536
  } }), h("circle", { class: "rotation-handle-overlay", cx: object.totalWidth / 2, cy: -((15 * object.scale) / this.core.store.state?.scale), r: `${(baseHandleTouchSize * object.scale) / this.core.store.state?.scale}`, style: {
491
537
  fill: 'transparent',
492
- cursor: 'grab',
493
538
  paintOrder: 'fill',
494
- } }))))));
495
- })), this.core.store.state.isContextMenuVisible && (h("kritzel-context-menu", { key: '8270193062df51aa5e358bd31c0851f54e4644d1', class: "context-menu", ref: el => (this.contextMenuElement = el), items: this.core.store.state.contextMenuItems, objects: this.core.store.selectionGroup?.objects || [], style: {
539
+ }, onPointerEnter: () => !this.core.store.isPointerDown && (this.core.store.state.cursor = { icon: 'hand', iconActive: 'hand-grab' }), onPointerLeave: () => !this.core.store.isPointerDown && (this.core.store.state.cursor = { icon: 'default', iconActive: 'default' }) }))))));
540
+ })), this.core.store.state.isContextMenuVisible && (h("kritzel-context-menu", { key: '0da13416f8f2cf2f0eb6fcbb8eacb942dda0efb5', class: "context-menu", ref: el => (this.contextMenuElement = el), items: this.core.store.state.contextMenuItems, objects: this.core.store.selectionGroup?.objects || [], style: {
496
541
  position: 'fixed',
497
542
  left: `${this.core.store.state.contextMenuX}px`,
498
543
  top: `${this.core.store.state.contextMenuY}px`,
@@ -503,7 +548,7 @@ export class KritzelEngine {
503
548
  y: (-this.core.store.state.translateY + this.core.store.state.contextMenuY) / this.core.store.state.scale,
504
549
  }, this.core.store.selectionGroup?.objects);
505
550
  this.hideContextMenu();
506
- }, onClose: () => this.hideContextMenu() })), this.core.store.state?.activeTool instanceof KritzelEraserTool && !this.core.store.state.isScaling && h("kritzel-cursor-trail", { key: '7d199fcf652dee0cd12fff8a558b455c361e019f', core: this.core })));
551
+ }, onClose: () => this.hideContextMenu() })), this.core.store.state?.activeTool instanceof KritzelEraserTool && !this.core.store.state.isScaling && h("kritzel-cursor-trail", { key: '609dd8438a2678eaa3ce0a73858d9236c9371f96', core: this.core })));
507
552
  }
508
553
  static get is() { return "kritzel-engine"; }
509
554
  static get encapsulation() { return "shadow"; }
@@ -673,6 +718,28 @@ export class KritzelEngine {
673
718
  "reflect": false,
674
719
  "attribute": "scale-min",
675
720
  "defaultValue": "ABSOLUTE_SCALE_MIN"
721
+ },
722
+ "cursorTarget": {
723
+ "type": "unknown",
724
+ "mutable": false,
725
+ "complexType": {
726
+ "original": "HTMLElement",
727
+ "resolved": "HTMLElement",
728
+ "references": {
729
+ "HTMLElement": {
730
+ "location": "global",
731
+ "id": "global::HTMLElement"
732
+ }
733
+ }
734
+ },
735
+ "required": false,
736
+ "optional": true,
737
+ "docs": {
738
+ "tags": [],
739
+ "text": ""
740
+ },
741
+ "getter": false,
742
+ "setter": false
676
743
  }
677
744
  };
678
745
  }
@@ -1538,6 +1605,9 @@ export class KritzelEngine {
1538
1605
  }, {
1539
1606
  "propName": "scaleMin",
1540
1607
  "methodName": "validateScaleMin"
1608
+ }, {
1609
+ "propName": "cursorTarget",
1610
+ "methodName": "onCursorTargetChange"
1541
1611
  }];
1542
1612
  }
1543
1613
  static get listeners() {
@@ -1 +1 @@
1
- {"version":3,"file":"kritzel-engine.js","sourceRoot":"","sources":["../../../../src/components/core/kritzel-engine/kritzel-engine.tsx"],"names":[],"mappings":"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;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CACF","sourcesContent":["import { Component, Host, h, Listen, Element, Prop, Method, State, Event, EventEmitter, Watch } from '@stencil/core';\r\nimport { KritzelTool } from '../../../interfaces/tool.interface';\r\nimport { KritzelViewport } from '../../../classes/core/viewport.class';\r\nimport { KritzelPath } from '../../../classes/objects/path.class';\r\nimport { KritzelSelectionTool } from '../../../classes/tools/selection-tool.class';\r\nimport { KritzelImage } from '../../../classes/objects/image.class';\r\nimport { KritzelText } from '../../../classes/objects/text.class';\r\nimport { KritzelSelectionGroup } from '../../../classes/objects/selection-group.class';\r\nimport { KritzelSelectionBox } from '../../../classes/objects/selection-box.class';\r\nimport { KritzelKeyHandler } from '../../../classes/handlers/key.handler';\r\nimport { KritzelBaseTool } from '../../../classes/tools/base-tool.class';\r\nimport { ContextMenuItem } from '../../../interfaces/context-menu-item.interface';\r\nimport { KritzelEraserTool } from '../../../classes/tools/eraser-tool.class';\r\nimport { KritzelBrushToolConfig, KritzelTextToolConfig } from '../../../interfaces/toolbar-control.interface';\r\nimport { KritzelKeyboardHelper } from '../../../helpers/keyboard.helper';\r\nimport { KritzelContextMenuHandler } from '../../../classes/handlers/context-menu.handler';\r\nimport { KritzelBaseObject } from '../../../classes/objects/base-object.class';\r\nimport { KritzelToolRegistry } from '../../../classes/registries/tool.registry';\r\nimport { KritzelEventHelper } from '../../../helpers/event.helper';\r\nimport { KritzelClassHelper } from '../../../helpers/class.helper';\r\nimport { ABSOLUTE_SCALE_MAX, ABSOLUTE_SCALE_MIN } from '../../../constants/engine.constants';\r\nimport { KritzelCustomElement } from '../../../classes/objects/custom-element.class';\r\nimport { KritzelWorkspace } from '../../../classes/core/workspace.class';\r\nimport { KritzelEngineState } from '../../../interfaces/engine-state.interface';\r\nimport { KritzelCore } from '../../../classes/core/core.class';\r\nimport { KritzelDevicesHelper } from '../../../helpers/devices.helper';\r\nimport { KritzelSyncConfig } from '../../../interfaces/sync-config.interface';\r\nimport { throttle } from 'lodash';\r\nimport { KritzelUndoState } from '../../../interfaces/undo-state.interface';\r\n\r\n@Component({\r\n tag: 'kritzel-engine',\r\n styleUrl: 'kritzel-engine.css',\r\n shadow: true,\r\n})\r\nexport class KritzelEngine {\r\n @Element() host: HTMLElement;\r\n\r\n @Prop() workspace?: KritzelWorkspace;\r\n @Prop() syncConfig?: KritzelSyncConfig;\r\n @Watch('workspace')\r\n onWorkspaceChange(newWorkspace: KritzelWorkspace | null) {\r\n const currentWorkspaceId = this.core.store.state.activeWorkspace?.id;\r\n const newWorkspaceId = newWorkspace?.id;\r\n\r\n if (currentWorkspaceId !== newWorkspaceId) {\r\n this.core.beforeWorkspaceChange();\r\n this.core.initializeWorkspace(newWorkspace);\r\n }\r\n }\r\n @Prop() activeTool: KritzelTool;\r\n @Prop() globalContextMenuItems: ContextMenuItem[];\r\n @Prop() objectContextMenuItems: ContextMenuItem[];\r\n @Prop({ mutable: true }) scaleMax: number = ABSOLUTE_SCALE_MAX;\r\n @Watch('scaleMax')\r\n validateScaleMax(newValue: number) {\r\n if (newValue > ABSOLUTE_SCALE_MAX) {\r\n console.warn(`scaleMax cannot be greater than ${ABSOLUTE_SCALE_MAX}.`);\r\n this.scaleMax = ABSOLUTE_SCALE_MAX;\r\n this.core.store.state.scaleMax = this.scaleMax;\r\n } else {\r\n this.core.store.state.scaleMax = newValue;\r\n }\r\n }\r\n @Prop({ mutable: true }) scaleMin: number = ABSOLUTE_SCALE_MIN;\r\n @Watch('scaleMin')\r\n validateScaleMin(newValue: number) {\r\n if (newValue < ABSOLUTE_SCALE_MIN) {\r\n console.warn(`scaleMin cannot be less than ${ABSOLUTE_SCALE_MIN}.`);\r\n this.scaleMin = ABSOLUTE_SCALE_MIN;\r\n this.core.store.state.scaleMin = this.scaleMin;\r\n } else {\r\n this.core.store.state.scaleMin = newValue;\r\n }\r\n }\r\n\r\n @Event() isEngineReady: EventEmitter<KritzelEngineState>;\r\n @Event() activeToolChange: EventEmitter<KritzelBaseTool>;\r\n @Event() workspacesChange: EventEmitter<KritzelWorkspace[]>;\r\n @Event() longpress: EventEmitter<PointerEvent>;\r\n @Event() objectsChange: EventEmitter<KritzelBaseObject[]>;\r\n @Event() undoStateChange: EventEmitter<KritzelUndoState>;\r\n\r\n @State() forceUpdate: number = 0;\r\n\r\n private throttledWheel = throttle((ev: WheelEvent) => {\r\n this.viewport.handleWheel(ev);\r\n this.core.store.state?.activeTool?.handleWheel(ev);\r\n }, 16);\r\n\r\n @Listen('wheel', { passive: false })\r\n handleWheel(ev) {\r\n if (this.core.store.isDisabled) {\r\n return;\r\n }\r\n\r\n if (this.core.store.state.isContextMenuVisible) {\r\n this.hideContextMenu();\r\n }\r\n\r\n this.throttledWheel(ev);\r\n }\r\n\r\n @Listen('pointerdown', { passive: false })\r\n handlePointerDown(ev: PointerEvent) {\r\n if (this.core.store.isDisabled) {\r\n return;\r\n }\r\n\r\n if (KritzelDevicesHelper.isTouchDevice()) {\r\n KritzelEventHelper.onLongPress(ev, (event: PointerEvent) => this.longpress.emit(event));\r\n }\r\n\r\n this.host.setPointerCapture(ev.pointerId);\r\n this.core.store.state.pointers.set(ev.pointerId, ev);\r\n\r\n this.viewport.handlePointerDown(ev);\r\n this.core.store.state?.activeTool?.handlePointerDown(ev);\r\n }\r\n\r\n private throttledPointerMoveMulti = throttle((ev: PointerEvent) => {\r\n this.viewport.handlePointerMove(ev);\r\n this.core.store.state?.activeTool?.handlePointerMove(ev);\r\n }, 16);\r\n\r\n @Listen('pointermove', { passive: false })\r\n handlePointerMove(ev: PointerEvent) {\r\n if (this.core.store.isDisabled) {\r\n return;\r\n }\r\n\r\n this.core.store.state.pointers.set(ev.pointerId, ev);\r\n\r\n if (this.core.store.state.pointers.size > 1) {\r\n this.throttledPointerMoveMulti(ev);\r\n }\r\n\r\n this.viewport.handlePointerMove(ev);\r\n this.core.store.state?.activeTool?.handlePointerMove(ev);\r\n }\r\n\r\n @Listen('pointerup', { passive: false })\r\n handlePointerUp(ev: PointerEvent) {\r\n if (this.core.store.isDisabled) {\r\n return;\r\n }\r\n\r\n this.core.store.state.pointers.delete(ev.pointerId);\r\n this.host.releasePointerCapture(ev.pointerId);\r\n\r\n this.viewport.handlePointerUp(ev);\r\n this.core.store.state?.activeTool?.handlePointerUp(ev);\r\n }\r\n\r\n @Listen('pointercancel', { passive: false })\r\n handlePointerCancel(ev: PointerEvent) {\r\n if (this.core.store.isDisabled) {\r\n return;\r\n }\r\n\r\n this.host.releasePointerCapture(ev.pointerId);\r\n this.core.store.state.pointers.delete(ev.pointerId);\r\n\r\n this.viewport.handlePointerUp(ev);\r\n this.core.store.state?.activeTool?.handlePointerUp(ev);\r\n }\r\n\r\n @Listen('longpress', { passive: false })\r\n handleLongPress(ev: CustomEvent<PointerEvent>) {\r\n this.contextMenuHandler.handleContextMenu(ev.detail);\r\n }\r\n\r\n @Listen('contextmenu', { capture: false })\r\n handleContextMenu(ev: PointerEvent) {\r\n ev.preventDefault();\r\n\r\n if (this.core.store.isDisabled) {\r\n return;\r\n }\r\n\r\n if (ev.pointerType === 'touch') {\r\n return;\r\n }\r\n\r\n this.contextMenuHandler.handleContextMenu(ev);\r\n }\r\n\r\n @Listen('resize', { target: 'window' })\r\n handleResize() {\r\n this.viewport.handleResize();\r\n }\r\n\r\n @Listen('keydown', { target: 'window' })\r\n handleKeyDown(ev) {\r\n if (this.core.store.isDisabled) {\r\n return;\r\n }\r\n\r\n this.keyHandler.handleKeyDown(ev);\r\n }\r\n\r\n @Listen('keyup', { target: 'window' })\r\n handleKeyUp(ev) {\r\n if (this.core.store.isDisabled) {\r\n return;\r\n }\r\n\r\n this.keyHandler.handleKeyUp(ev);\r\n }\r\n\r\n @Listen('dblclick', { target: 'document' })\r\n preventDoubleTapZoomOnTouchDevices(ev: MouseEvent) {\r\n ev.preventDefault();\r\n }\r\n\r\n @Method()\r\n async registerTool(toolName: string, toolClass: any, toolConfig?: KritzelTextToolConfig | KritzelBrushToolConfig): Promise<KritzelBaseTool> {\r\n if (typeof toolClass !== 'function' || !(toolClass.prototype instanceof KritzelBaseTool)) {\r\n console.error(`Failed to register tool \"${toolName}\": Tool class must be a constructor function`);\r\n return null;\r\n }\r\n\r\n const registeredTool = KritzelToolRegistry.registerTool(toolName, toolClass, this.core);\r\n\r\n if (toolConfig) {\r\n Object.entries(toolConfig).forEach(([key, value]) => {\r\n registeredTool[key] = value;\r\n });\r\n }\r\n\r\n return Promise.resolve(registeredTool);\r\n }\r\n\r\n @Method()\r\n async changeActiveTool(tool: KritzelBaseTool) {\r\n this.core.store.state.activeTool?.onDeactivate();\r\n this.core.store.setState('activeTool', tool);\r\n this.core.deselectAllObjects();\r\n tool?.onActivate();\r\n }\r\n\r\n @Method()\r\n async disable() {\r\n this.core.store.state.isEnabled = false;\r\n this.core.rerender();\r\n }\r\n\r\n @Method()\r\n async enable() {\r\n this.core.store.state.isEnabled = true;\r\n this.core.rerender();\r\n }\r\n\r\n @Method()\r\n async delete() {\r\n this.core.delete();\r\n }\r\n\r\n @Method()\r\n async copy() {\r\n this.core.copy();\r\n }\r\n\r\n @Method()\r\n async paste(x: number, y: number) {\r\n this.core.paste(x, y);\r\n }\r\n\r\n @Method()\r\n async bringForward(object?: KritzelBaseObject<any>) {\r\n this.core.bringForward(object);\r\n }\r\n\r\n @Method()\r\n async sendBackward(object?: KritzelBaseObject<any>) {\r\n this.core.sendBackward(object);\r\n }\r\n\r\n @Method()\r\n async bringToFront(object?: KritzelBaseObject<any>) {\r\n this.core.bringToFront(object);\r\n }\r\n\r\n @Method()\r\n async sendToBack(object?: KritzelBaseObject<any>) {\r\n this.core.sendToBack(object);\r\n }\r\n\r\n @Method()\r\n async undo() {\r\n this.core.undo();\r\n }\r\n\r\n @Method()\r\n async redo() {\r\n this.core.redo();\r\n }\r\n\r\n @Method()\r\n async hideContextMenu() {\r\n this.core.store.state.pointers.clear();\r\n this.core.store.state.isContextMenuVisible = false;\r\n this.core.store.state.objects.remove(o => o instanceof KritzelSelectionBox);\r\n this.core.store.state.isSelecting = false;\r\n this.core.store.state.isEnabled = true;\r\n this.core.rerender();\r\n }\r\n\r\n @Method()\r\n async getObjectById<T extends KritzelBaseObject>(id: string): Promise<T | null> {\r\n const object = this.core.store.allObjects.find(obj => obj.id === id) as T | undefined;\r\n return object || null;\r\n }\r\n\r\n @Method()\r\n async addObject<T extends KritzelBaseObject>(object: T): Promise<T | null> {\r\n this.core.deselectAllObjects();\r\n\r\n object.id = object.generateId();\r\n object._core = this.core;\r\n object.scale = object.scale ? object.scale : this.core.store.state.scale;\r\n object.zIndex = this.core.store.currentZIndex;\r\n\r\n this.core.addObject(object);\r\n this.core.rerender();\r\n\r\n return object;\r\n }\r\n\r\n @Method()\r\n async updateObject<T extends KritzelBaseObject>(object: T, updatedProperties: Partial<T>): Promise<T | null> {\r\n this.core.deselectAllObjects();\r\n\r\n this.core.updateObject(object, updatedProperties);\r\n this.core.rerender();\r\n\r\n return object;\r\n }\r\n\r\n @Method()\r\n async removeObject<T extends KritzelBaseObject>(object: T): Promise<T | null> {\r\n this.core.deselectAllObjects();\r\n\r\n this.core.store.state.objects.remove(o => o.id === object.id);\r\n this.core.rerender();\r\n\r\n return object;\r\n }\r\n\r\n @Method()\r\n async getSelectedObjects(): Promise<KritzelBaseObject<any>[]> {\r\n const selectionGroup = this.core.store.selectionGroup;\r\n return selectionGroup ? selectionGroup.objects : [];\r\n }\r\n\r\n @Method()\r\n async selectObjects(objects: KritzelBaseObject[]) {\r\n this.core.store.state.activeTool?.onDeactivate();\r\n this.core.store.setState('activeTool', KritzelToolRegistry.getTool('selection'));\r\n this.core.deselectAllObjects();\r\n this.core.selectObjects(objects);\r\n }\r\n\r\n @Method()\r\n async selectAllObjectsInViewport() {\r\n this.core.store.state.activeTool?.onDeactivate();\r\n this.core.store.setState('activeTool', KritzelToolRegistry.getTool('selection'));\r\n this.core.deselectAllObjects();\r\n this.core.selectAllObjectsInViewport();\r\n }\r\n\r\n @Method()\r\n async clearSelection() {\r\n this.core.clearSelection();\r\n }\r\n\r\n @Method()\r\n async centerObjectInViewport(object: KritzelBaseObject) {\r\n object.centerInViewport();\r\n\r\n this.core.updateObject(object, object);\r\n this.core.rerender();\r\n\r\n return object;\r\n }\r\n\r\n @Method()\r\n async getCopiedObjects(): Promise<KritzelBaseObject[]> {\r\n return this.core.store.state.copiedObjects || [];\r\n }\r\n\r\n @Method()\r\n async createWorkspace(workspace: KritzelWorkspace): Promise<KritzelWorkspace | null> {\r\n await this.core.createWorkspace(workspace);\r\n this.workspacesChange.emit(this.core.store.state.workspaces);\r\n return workspace;\r\n }\r\n\r\n @Method()\r\n async updateWorkspace(workspace: KritzelWorkspace): Promise<void> {\r\n await this.core.updateWorkspace(workspace);\r\n this.workspacesChange.emit(this.core.store.state.workspaces);\r\n }\r\n\r\n @Method()\r\n async deleteWorkspace(workspace: KritzelWorkspace): Promise<void> {\r\n await this.core.deleteWorkspace(workspace);\r\n this.workspacesChange.emit(this.core.store.state.workspaces);\r\n }\r\n\r\n @Method()\r\n async getWorkspaces(): Promise<KritzelWorkspace[]> {\r\n return await this.core.getWorkspaces();\r\n }\r\n\r\n @Method()\r\n async getActiveWorkspace(): Promise<KritzelWorkspace> {\r\n return this.core.store.state.activeWorkspace;\r\n }\r\n\r\n core: KritzelCore;\r\n viewport: KritzelViewport;\r\n contextMenuHandler: KritzelContextMenuHandler;\r\n keyHandler: KritzelKeyHandler;\r\n contextMenuElement: HTMLKritzelContextMenuElement | null = null;\r\n\r\n get isSelecting() {\r\n return this.core.store.state.activeTool instanceof KritzelSelectionTool && this.core.store.state.isSelecting;\r\n }\r\n\r\n get isSelectionActive() {\r\n return this.core.store.state.activeTool instanceof KritzelSelectionTool && this.core.store.selectionGroup !== null;\r\n }\r\n\r\n constructor() {\r\n this.core = new KritzelCore(this);\r\n }\r\n\r\n disconnectedCallback() {\r\n this.throttledWheel.cancel();\r\n this.throttledPointerMoveMulti.cancel();\r\n }\r\n\r\n componentWillLoad() {\r\n this.validateScaleMax(this.scaleMax);\r\n this.validateScaleMin(this.scaleMin);\r\n }\r\n\r\n async componentDidLoad() {\r\n this.contextMenuHandler = new KritzelContextMenuHandler(this.core, this.globalContextMenuItems, this.objectContextMenuItems);\r\n this.keyHandler = new KritzelKeyHandler(this.core);\r\n this.viewport = new KritzelViewport(this.core, this.host);\r\n\r\n // Set sync configuration if provided\r\n if (this.syncConfig) {\r\n this.core.setSyncConfig(this.syncConfig);\r\n }\r\n\r\n // Initialize Yjs document and persistence layer\r\n await this.core.initializeYjs();\r\n\r\n // Initialize workspace (will load from Yjs if available)\r\n await this.core.initializeWorkspace(this.workspace);\r\n\r\n // Register callback for remote workspace changes\r\n this.core.appStateMap.onRemoteChange(() => {\r\n this.workspacesChange.emit(this.core.store.state.workspaces);\r\n });\r\n\r\n this._registerStateChangeListeners();\r\n\r\n if (this.core.store.state.isReady === false) {\r\n this.core.store.state.isReady = true;\r\n this.isEngineReady.emit(this.core.store.state);\r\n }\r\n }\r\n\r\n emitObjectsChange() {\r\n const objects = this.core.store.allObjects as KritzelBaseObject<HTMLElement | SVGElement>[];\r\n const undoState = this.core.store.state.objects.undoState;\r\n\r\n this.objectsChange.emit(objects);\r\n this.undoStateChange.emit(undoState);\r\n }\r\n\r\n private _registerStateChangeListeners() {\r\n this.core.store.onStateChange('activeTool', this._handleActiveToolChange.bind(this));\r\n }\r\n\r\n private _handleActiveToolChange(activeTool: KritzelBaseTool) {\r\n if (!(activeTool instanceof KritzelSelectionTool)) {\r\n this.core.clearSelection();\r\n this.core.store.state.objects.remove(o => o instanceof KritzelSelectionBox);\r\n this.core.store.state.isSelecting = false;\r\n this.core.store.state.isResizeHandleSelected = false;\r\n this.core.store.state.isRotationHandleSelected = false;\r\n }\r\n\r\n this.core.store.state.skipContextMenu = false;\r\n this.core.store.state.copiedObjects = null;\r\n this.activeToolChange.emit(activeTool);\r\n KritzelKeyboardHelper.forceHideKeyboard();\r\n\r\n this.core.rerender();\r\n }\r\n\r\n render() {\r\n const computedStyle = window.getComputedStyle(this.host);\r\n const baseHandleSizePx = computedStyle.getPropertyValue('--kritzel-selection-handle-size').trim() || '6px';\r\n const baseHandleSize = parseFloat(baseHandleSizePx);\r\n const baseHandleTouchSize = baseHandleSize * 2 < 14 ? 14 : baseHandleSize;\r\n const viewportCenterX = this.core.store.state.viewportWidth / 2 + this.core.store.state.translateX;\r\n const viewportCenterY = this.core.store.state.viewportHeight / 2 + this.core.store.state.translateY;\r\n const viewportBounds = {\r\n x: -this.core.store.state.translateX / this.core.store.state.scale,\r\n y: -this.core.store.state.translateY / this.core.store.state.scale,\r\n z: this.core.store.state.scale,\r\n width: this.core.store.state.viewportWidth / this.core.store.state.scale,\r\n height: this.core.store.state.viewportHeight / this.core.store.state.scale,\r\n depth: 100,\r\n };\r\n const visibleObjects = this.core.store.state.objects.query(viewportBounds);\r\n\r\n return (\r\n <Host>\r\n {this.core.store.state.debugInfo.showViewportInfo && (\r\n <div class=\"debug-panel\">\r\n <div>ActiveWorkspaceId: {this.core.store.state?.activeWorkspace?.id}</div>\r\n <div>ActiveWorkspaceName: {this.core.store.state?.activeWorkspace?.name}</div>\r\n <div>TranslateX: {this.core.store.state?.translateX}</div>\r\n <div>TranslateY: {this.core.store.state?.translateY}</div>\r\n <div>ViewportWidth: {this.core.store.state?.viewportWidth}</div>\r\n <div>ViewportHeight: {this.core.store.state?.viewportHeight}</div>\r\n <div>PointerCount: {this.core.store.state.pointers.size}</div>\r\n <div>Scale: {this.core.store.state?.scale}</div>\r\n <div>ActiveTool: {this.core.store.state?.activeTool?.name}</div>\r\n <div>HasViewportChanged: {this.core.store.state?.hasViewportChanged ? 'true' : 'false'}</div>\r\n <div>IsEnabled: {this.core.store.state?.isEnabled ? 'true' : 'false'}</div>\r\n <div>IsScaling: {this.core.store.state?.isScaling ? 'true' : 'false'}</div>\r\n <div>IsPanning: {this.core.store.state?.isPanning ? 'true' : 'false'}</div>\r\n <div>IsSelecting: {this.isSelecting ? 'true' : 'false'}</div>\r\n <div>IsSelectionActive: {this.isSelectionActive ? 'true' : 'false'}</div>\r\n <div>IsResizeHandleSelected: {this.core.store.state.isResizeHandleSelected ? 'true' : 'false'}</div>\r\n <div>IsRotationHandleSelected: {this.core.store.state.isRotationHandleSelected ? 'true' : 'false'}</div>\r\n <div>IsDrawing: {this.core.store.state.isDrawing ? 'true' : 'false'}</div>\r\n <div>IsWriting: {this.core.store.state.isWriting ? 'true' : 'false'}</div>\r\n <div>PointerX: {this.core.store.state?.pointerX}</div>\r\n <div>PointerY: {this.core.store.state?.pointerY}</div>\r\n <div>SelectedObjects: {this.core.store.selectionGroup?.objects.length || 0}</div>\r\n <div>\r\n ViewportCenter: ({viewportCenterX.toFixed(2)}, {viewportCenterY.toFixed(2)})\r\n </div>\r\n </div>\r\n )}\r\n\r\n <div\r\n id=\"origin\"\r\n class=\"origin\"\r\n style={{\r\n transform: `matrix(${this.core.store.state?.scale}, 0, 0, ${this.core.store.state?.scale}, ${this.core.store.state?.translateX}, ${this.core.store.state?.translateY})`,\r\n }}\r\n >\r\n {visibleObjects?.map(object => {\r\n return (\r\n <div\r\n key={object.id}\r\n style={{\r\n transform: object?.transformationMatrix,\r\n transformOrigin: 'top left',\r\n zIndex: object.zIndex.toString(),\r\n position: 'absolute',\r\n pointerEvents: this.core.store.state.isScaling ? 'none' : 'auto',\r\n }}\r\n >\r\n <svg\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n id={object.id}\r\n class=\"object\"\r\n style={{\r\n height: object?.totalHeight.toString(),\r\n width: object?.totalWidth.toString(),\r\n left: '0',\r\n top: '0',\r\n position: 'absolute',\r\n transform: `rotate(${object.rotationDegrees}deg)`,\r\n transformOrigin: `${object.totalWidth / 2}px ${object.totalHeight / 2}px`,\r\n opacity: object.markedForRemoval ? '0.5' : object.opacity.toString(),\r\n pointerEvents: object.markedForRemoval ? 'none' : 'auto',\r\n }}\r\n >\r\n <foreignObject\r\n x=\"0\"\r\n y=\"0\"\r\n width={object.totalWidth.toString()}\r\n height={object.totalHeight.toString()}\r\n style={{\r\n minHeight: '0',\r\n minWidth: '0',\r\n backgroundColor: object.backgroundColor,\r\n borderColor: object.borderColor,\r\n borderWidth: object.borderWidth + 'px',\r\n borderStyle: 'solid',\r\n padding: object.padding + 'px',\r\n overflow: 'visible',\r\n }}\r\n >\r\n {KritzelClassHelper.isInstanceOf<KritzelPath>(object, 'KritzelPath') && (\r\n <svg\r\n ref={el => object.mount(el)}\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n style={{\r\n height: object?.height.toString(),\r\n width: object?.width.toString(),\r\n position: 'absolute',\r\n overflow: 'visible',\r\n }}\r\n viewBox={object?.viewBox}\r\n >\r\n <path d={object?.d} fill={object.fill} stroke={object?.stroke} shape-rendering={object.isLowRes() ? 'optimizeSpeed' : 'auto'} />\r\n </svg>\r\n )}\r\n\r\n {KritzelClassHelper.isInstanceOf<KritzelImage>(object, 'KritzelImage') && (\r\n <img\r\n ref={el => object.mount(el)}\r\n src={object.src}\r\n style={{\r\n width: '100%',\r\n height: '100%',\r\n userSelect: 'none',\r\n pointerEvents: 'none',\r\n imageRendering: this.core.store.state.isScaling || this.core.store.state.isPanning ? 'pixelated' : 'auto',\r\n }}\r\n draggable={false}\r\n onDragStart={e => e.preventDefault()}\r\n />\r\n )}\r\n\r\n {KritzelClassHelper.isInstanceOf<KritzelText>(object, 'KritzelText') && (\r\n <div\r\n ref={el => object.mount(el)}\r\n onPointerDown={e => object.handlePointerDown(e)}\r\n onPointerMove={e => object.handlePointerMove(e)}\r\n onPointerUp={e => object.handlePointerUp(e)}\r\n style={{\r\n minWidth: object.initialWidth + 'px',\r\n minHeight: object.initialHeight + 'px',\r\n maxWidth: '500px',\r\n height: 'auto',\r\n width: 'max-content',\r\n transformOrigin: 'top left',\r\n transform: `scale(${object.scaleFactor})`,\r\n backgroundColor: object.backgroundColor,\r\n overflow: 'visible',\r\n textRendering: this.core.store.state.isScaling || this.core.store.state.isPanning ? 'optimizeSpeed' : 'auto',\r\n }}\r\n ></div>\r\n )}\r\n\r\n {KritzelClassHelper.isInstanceOf<KritzelCustomElement>(object, 'KritzelCustomElement') && (\r\n <div\r\n ref={el => object.mount(el)}\r\n style={{\r\n width: '100%',\r\n height: '100%',\r\n pointerEvents: 'auto',\r\n overflow: 'hidden',\r\n display: 'block',\r\n }}\r\n ></div>\r\n )}\r\n\r\n {KritzelClassHelper.isInstanceOf<KritzelSelectionGroup>(object, 'KritzelSelectionGroup') && (\r\n <div\r\n ref={el => object.mount(el)}\r\n style={{\r\n width: '100%',\r\n height: '100%',\r\n }}\r\n ></div>\r\n )}\r\n\r\n {KritzelClassHelper.isInstanceOf<KritzelSelectionBox>(object, 'KritzelSelectionBox') && (\r\n <div\r\n ref={el => object.mount(el)}\r\n style={{\r\n width: '100%',\r\n height: '100%',\r\n backgroundColor: KritzelDevicesHelper.isFirefox() ? object.backgroundColor : 'transparent',\r\n borderWidth: KritzelDevicesHelper.isFirefox() ? object.borderWidth + 'px' : '0',\r\n borderStyle: KritzelDevicesHelper.isFirefox() ? 'solid' : 'none',\r\n borderColor: KritzelDevicesHelper.isFirefox() ? object.borderColor : 'transparent',\r\n }}\r\n ></div>\r\n )}\r\n\r\n </foreignObject>\r\n\r\n {this.core.store.state.debugInfo.showObjectInfo && object.isDebugInfoVisible && (\r\n <g style={{ pointerEvents: 'none' }}>\r\n <foreignObject x={object.totalWidth.toString()} y=\"0\" width=\"400px\" height=\"160px\" style={{ minHeight: '0', minWidth: '0' }}>\r\n <div style={{ width: '100%', height: '100%' }}>\r\n <div style={{ whiteSpace: 'nowrap' }}>Id: {object.id}</div>\r\n <div style={{ whiteSpace: 'nowrap' }}>width: {object.width}</div>\r\n <div style={{ whiteSpace: 'nowrap' }}>height: {object.height}</div>\r\n <div style={{ whiteSpace: 'nowrap' }}>translateX: {object.translateX}</div>\r\n <div style={{ whiteSpace: 'nowrap' }}>translateY: {object.translateY}</div>\r\n {/* <div style={{ whiteSpace: 'nowrap' }}>zIndex: {object.zIndex}</div>\r\n <div style={{ whiteSpace: 'nowrap' }}>scale: {object.scale}</div>\r\n <div style={{ whiteSpace: 'nowrap' }}>rotation: {object.rotation}</div>\r\n <div style={{ whiteSpace: 'nowrap' }}>x: {object.x}</div>\r\n <div style={{ whiteSpace: 'nowrap' }}>y: {object.y}</div> */}\r\n </div>\r\n </foreignObject>\r\n </g>\r\n )}\r\n </svg>\r\n\r\n <svg\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n style={{\r\n height: object?.totalHeight.toString(),\r\n width: object?.totalWidth.toString(),\r\n left: '0',\r\n top: '0',\r\n position: 'absolute',\r\n transform: `rotate(${object.rotationDegrees}deg)`,\r\n transformOrigin: `${object.totalWidth / 2}px ${object.totalHeight / 2}px`,\r\n overflow: 'visible',\r\n pointerEvents: 'none',\r\n }}\r\n >\r\n {object.isSelected && (\r\n <g class=\"selection-borders\" style={{ pointerEvents: 'none' }}>\r\n <line\r\n x1=\"0\"\r\n y1=\"0\"\r\n x2={object.totalWidth}\r\n y2=\"0\"\r\n style={{\r\n stroke: 'var(--kritzel-selection-border-color, #007AFF)',\r\n strokeWidth: `calc(var(--kritzel-selection-border-width, 2px) * ${object.scale} / ${this.core.store.state?.scale})`,\r\n strokeLinecap: 'square',\r\n }}\r\n />\r\n <line\r\n x1=\"0\"\r\n y1=\"0\"\r\n x2=\"0\"\r\n y2={object.totalHeight}\r\n style={{\r\n stroke: 'var(--kritzel-selection-border-color, #007AFF)',\r\n strokeWidth: `calc(var(--kritzel-selection-border-width, 2px) * ${object.scale} / ${this.core.store.state?.scale})`,\r\n strokeLinecap: 'square',\r\n }}\r\n />\r\n <line\r\n x1=\"0\"\r\n y1={object.totalHeight}\r\n x2={object.totalWidth}\r\n y2={object.totalHeight}\r\n style={{\r\n stroke: 'var(--kritzel-selection-border-color, #007AFF)',\r\n strokeWidth: `calc(var(--kritzel-selection-border-width, 2px) * ${object.scale} / ${this.core.store.state?.scale})`,\r\n strokeLinecap: 'square',\r\n }}\r\n />\r\n <line\r\n x1={object.totalWidth}\r\n y1=\"0\"\r\n x2={object.totalWidth}\r\n y2={object.totalHeight}\r\n style={{\r\n stroke: 'var(--kritzel-selection-border-color, #007AFF)',\r\n strokeWidth: `calc(var(--kritzel-selection-border-width, 2px) * ${object.scale} / ${this.core.store.state?.scale})`,\r\n strokeLinecap: 'square',\r\n }}\r\n />\r\n </g>\r\n )}\r\n\r\n {object.isSelected && !this.isSelecting && (\r\n <g class=\"selection-handles\" style={{ pointerEvents: 'auto' }}>\r\n <circle\r\n class=\"resize-handle top-left\"\r\n cx=\"0\"\r\n cy=\"0\"\r\n r={`${(baseHandleSize * object.scale) / this.core.store.state?.scale}`}\r\n style={{\r\n fill: 'var(--kritzel-selection-handle-color, #000000)',\r\n paintOrder: 'fill',\r\n }}\r\n />\r\n <circle\r\n class=\"resize-handle-overlay top-left\"\r\n cx=\"0\"\r\n cy=\"0\"\r\n r={`${(baseHandleTouchSize * object.scale) / this.core.store.state?.scale}`}\r\n style={{\r\n fill: 'transparent',\r\n paintOrder: 'fill',\r\n }}\r\n />\r\n\r\n <circle\r\n class=\"resize-handle top-right\"\r\n cx={object.totalWidth}\r\n cy=\"0\"\r\n r={`${(baseHandleSize * object.scale) / this.core.store.state?.scale}`}\r\n style={{\r\n fill: 'var(--kritzel-selection-handle-color, #000000)',\r\n paintOrder: 'fill',\r\n }}\r\n />\r\n <circle\r\n class=\"resize-handle-overlay top-right\"\r\n cx={object.totalWidth}\r\n cy=\"0\"\r\n r={`${(baseHandleTouchSize * object.scale) / this.core.store.state?.scale}`}\r\n style={{\r\n fill: 'transparent',\r\n paintOrder: 'fill',\r\n }}\r\n />\r\n\r\n <circle\r\n class=\"resize-handle bottom-left\"\r\n cx=\"0\"\r\n cy={object.totalHeight}\r\n r={`${(baseHandleSize * object.scale) / this.core.store.state?.scale}`}\r\n style={{\r\n fill: 'var(--kritzel-selection-handle-color, #000000)',\r\n paintOrder: 'fill',\r\n }}\r\n />\r\n <circle\r\n class=\"resize-handle-overlay bottom-left\"\r\n cx=\"0\"\r\n cy={object.totalHeight}\r\n r={`${(baseHandleTouchSize * object.scale) / this.core.store.state?.scale}`}\r\n style={{\r\n fill: 'transparent',\r\n paintOrder: 'fill',\r\n }}\r\n />\r\n\r\n <circle\r\n class=\"resize-handle bottom-right\"\r\n cx={object.totalWidth}\r\n cy={object.totalHeight}\r\n r={`${(baseHandleSize * object.scale) / this.core.store.state?.scale}`}\r\n style={{\r\n fill: 'var(--kritzel-selection-handle-color, #000000)',\r\n paintOrder: 'fill',\r\n }}\r\n />\r\n <circle\r\n class=\"resize-handle-overlay bottom-right\"\r\n cx={object.totalWidth}\r\n cy={object.totalHeight}\r\n r={`${(baseHandleTouchSize * object.scale) / this.core.store.state?.scale}`}\r\n style={{\r\n fill: 'transparent',\r\n paintOrder: 'fill',\r\n }}\r\n />\r\n\r\n <line\r\n x1={object.totalWidth / 2}\r\n y1=\"0\"\r\n x2={object.totalWidth / 2}\r\n y2={-((15 * object.scale) / this.core.store.state?.scale)}\r\n style={{\r\n stroke: 'var(--kritzel-selection-border-color, #007AFF)',\r\n strokeWidth: `calc(var(--kritzel-selection-border-width, 2px) * ${object.scale} / ${this.core.store.state?.scale})`,\r\n }}\r\n />\r\n <circle\r\n class=\"rotation-handle\"\r\n cx={object.totalWidth / 2}\r\n cy={-((15 * object.scale) / this.core.store.state?.scale)}\r\n r={`${(baseHandleSize * object.scale) / this.core.store.state?.scale}`}\r\n style={{\r\n fill: 'var(--kritzel-selection-handle-color, #000000)',\r\n paintOrder: 'fill',\r\n }}\r\n />\r\n <circle\r\n class=\"rotation-handle-overlay\"\r\n cx={object.totalWidth / 2}\r\n cy={-((15 * object.scale) / this.core.store.state?.scale)}\r\n r={`${(baseHandleTouchSize * object.scale) / this.core.store.state?.scale}`}\r\n style={{\r\n fill: 'transparent',\r\n cursor: 'grab',\r\n paintOrder: 'fill',\r\n }}\r\n />\r\n </g>\r\n )}\r\n </svg>\r\n </div>\r\n );\r\n })}\r\n </div>\r\n\r\n {this.core.store.state.isContextMenuVisible && (\r\n <kritzel-context-menu\r\n class=\"context-menu\"\r\n ref={el => (this.contextMenuElement = el)}\r\n items={this.core.store.state.contextMenuItems}\r\n objects={this.core.store.selectionGroup?.objects || []}\r\n style={{\r\n position: 'fixed',\r\n left: `${this.core.store.state.contextMenuX}px`,\r\n top: `${this.core.store.state.contextMenuY}px`,\r\n zIndex: '10000',\r\n }}\r\n onActionSelected={event => {\r\n event.detail.action(\r\n {\r\n x: (-this.core.store.state.translateX + this.core.store.state.contextMenuX) / this.core.store.state.scale,\r\n y: (-this.core.store.state.translateY + this.core.store.state.contextMenuY) / this.core.store.state.scale,\r\n },\r\n this.core.store.selectionGroup?.objects,\r\n );\r\n this.hideContextMenu();\r\n }}\r\n onClose={() => this.hideContextMenu()}\r\n ></kritzel-context-menu>\r\n )}\r\n\r\n {this.core.store.state?.activeTool instanceof KritzelEraserTool && !this.core.store.state.isScaling && <kritzel-cursor-trail core={this.core}></kritzel-cursor-trail>}\r\n </Host>\r\n );\r\n }\r\n}\r\n"]}
1
+ {"version":3,"file":"kritzel-engine.js","sourceRoot":"","sources":["../../../../src/components/core/kritzel-engine/kritzel-engine.tsx"],"names":[],"mappings":"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;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CACF","sourcesContent":["import { Component, Host, h, Listen, Element, Prop, Method, State, Event, EventEmitter, Watch } from '@stencil/core';\r\nimport { KritzelTool } from '../../../interfaces/tool.interface';\r\nimport { KritzelViewport } from '../../../classes/core/viewport.class';\r\nimport { KritzelPath } from '../../../classes/objects/path.class';\r\nimport { KritzelSelectionTool } from '../../../classes/tools/selection-tool.class';\r\nimport { KritzelImage } from '../../../classes/objects/image.class';\r\nimport { KritzelText } from '../../../classes/objects/text.class';\r\nimport { KritzelSelectionGroup } from '../../../classes/objects/selection-group.class';\r\nimport { KritzelSelectionBox } from '../../../classes/objects/selection-box.class';\r\nimport { KritzelKeyHandler } from '../../../classes/handlers/key.handler';\r\nimport { KritzelBaseTool } from '../../../classes/tools/base-tool.class';\r\nimport { ContextMenuItem } from '../../../interfaces/context-menu-item.interface';\r\nimport { KritzelEraserTool } from '../../../classes/tools/eraser-tool.class';\r\nimport { KritzelBrushToolConfig, KritzelTextToolConfig } from '../../../interfaces/toolbar-control.interface';\r\nimport { KritzelKeyboardHelper } from '../../../helpers/keyboard.helper';\r\nimport { KritzelContextMenuHandler } from '../../../classes/handlers/context-menu.handler';\r\nimport { KritzelBaseObject } from '../../../classes/objects/base-object.class';\r\nimport { KritzelToolRegistry } from '../../../classes/registries/tool.registry';\r\nimport { KritzelEventHelper } from '../../../helpers/event.helper';\r\nimport { KritzelClassHelper } from '../../../helpers/class.helper';\r\nimport { ABSOLUTE_SCALE_MAX, ABSOLUTE_SCALE_MIN } from '../../../constants/engine.constants';\r\nimport { KritzelCustomElement } from '../../../classes/objects/custom-element.class';\r\nimport { KritzelWorkspace } from '../../../classes/core/workspace.class';\r\nimport { KritzelEngineState } from '../../../interfaces/engine-state.interface';\r\nimport { KritzelCore } from '../../../classes/core/core.class';\r\nimport { KritzelDevicesHelper } from '../../../helpers/devices.helper';\r\nimport { KritzelSyncConfig } from '../../../interfaces/sync-config.interface';\r\nimport { throttle } from 'lodash';\r\nimport { KritzelUndoState } from '../../../interfaces/undo-state.interface';\r\nimport { KritzelCursorHelper } from '../../../helpers/cursor.helper';\r\n\r\n@Component({\r\n tag: 'kritzel-engine',\r\n styleUrl: 'kritzel-engine.css',\r\n shadow: true,\r\n})\r\nexport class KritzelEngine {\r\n @Element() host: HTMLElement;\r\n\r\n @Prop() workspace?: KritzelWorkspace;\r\n @Prop() syncConfig?: KritzelSyncConfig;\r\n @Watch('workspace')\r\n onWorkspaceChange(newWorkspace: KritzelWorkspace | null) {\r\n const currentWorkspaceId = this.core.store.state.activeWorkspace?.id;\r\n const newWorkspaceId = newWorkspace?.id;\r\n\r\n if (currentWorkspaceId !== newWorkspaceId) {\r\n this.core.beforeWorkspaceChange();\r\n this.core.initializeWorkspace(newWorkspace);\r\n }\r\n }\r\n @Prop() activeTool: KritzelTool;\r\n @Prop() globalContextMenuItems: ContextMenuItem[];\r\n @Prop() objectContextMenuItems: ContextMenuItem[];\r\n @Prop({ mutable: true }) scaleMax: number = ABSOLUTE_SCALE_MAX;\r\n @Watch('scaleMax')\r\n validateScaleMax(newValue: number) {\r\n if (newValue > ABSOLUTE_SCALE_MAX) {\r\n console.warn(`scaleMax cannot be greater than ${ABSOLUTE_SCALE_MAX}.`);\r\n this.scaleMax = ABSOLUTE_SCALE_MAX;\r\n this.core.store.state.scaleMax = this.scaleMax;\r\n } else {\r\n this.core.store.state.scaleMax = newValue;\r\n }\r\n }\r\n @Prop({ mutable: true }) scaleMin: number = ABSOLUTE_SCALE_MIN;\r\n @Watch('scaleMin')\r\n validateScaleMin(newValue: number) {\r\n if (newValue < ABSOLUTE_SCALE_MIN) {\r\n console.warn(`scaleMin cannot be less than ${ABSOLUTE_SCALE_MIN}.`);\r\n this.scaleMin = ABSOLUTE_SCALE_MIN;\r\n this.core.store.state.scaleMin = this.scaleMin;\r\n } else {\r\n this.core.store.state.scaleMin = newValue;\r\n }\r\n }\r\n @Prop() cursorTarget?: HTMLElement;\r\n @Watch('cursorTarget')\r\n onCursorTargetChange(newValue: HTMLElement | undefined) {\r\n // Reset cursor on old target\r\n if (this.cursorTargetElement) {\r\n this.cursorTargetElement.style.cursor = '';\r\n }\r\n // Set new target (defaults to document.body)\r\n this.cursorTargetElement = newValue || document.body;\r\n }\r\n\r\n @Event() isEngineReady: EventEmitter<KritzelEngineState>;\r\n @Event() activeToolChange: EventEmitter<KritzelBaseTool>;\r\n @Event() workspacesChange: EventEmitter<KritzelWorkspace[]>;\r\n @Event() longpress: EventEmitter<PointerEvent>;\r\n @Event() objectsChange: EventEmitter<KritzelBaseObject[]>;\r\n @Event() undoStateChange: EventEmitter<KritzelUndoState>;\r\n\r\n @State() forceUpdate: number = 0;\r\n\r\n private throttledWheel = throttle((ev: WheelEvent) => {\r\n this.viewport.handleWheel(ev);\r\n this.core.store.state?.activeTool?.handleWheel(ev);\r\n }, 16);\r\n\r\n @Listen('wheel', { passive: false })\r\n handleWheel(ev) {\r\n if (this.core.store.isDisabled) {\r\n return;\r\n }\r\n\r\n if (this.core.store.state.isContextMenuVisible) {\r\n this.hideContextMenu();\r\n }\r\n\r\n this.throttledWheel(ev);\r\n }\r\n\r\n @Listen('pointerdown', { passive: false })\r\n handlePointerDown(ev: PointerEvent) {\r\n if (this.core.store.isDisabled) {\r\n return;\r\n }\r\n\r\n if (KritzelDevicesHelper.isTouchDevice()) {\r\n KritzelEventHelper.onLongPress(ev, (event: PointerEvent) => this.longpress.emit(event));\r\n }\r\n\r\n this.host.setPointerCapture(ev.pointerId);\r\n this.core.store.state.pointers.set(ev.pointerId, ev);\r\n\r\n this.viewport.handlePointerDown(ev);\r\n this.core.store.state?.activeTool?.handlePointerDown(ev);\r\n }\r\n\r\n private throttledPointerMoveMulti = throttle((ev: PointerEvent) => {\r\n this.viewport.handlePointerMove(ev);\r\n this.core.store.state?.activeTool?.handlePointerMove(ev);\r\n }, 16);\r\n\r\n @Listen('pointermove', { passive: false })\r\n handlePointerMove(ev: PointerEvent) {\r\n if (this.core.store.isDisabled) {\r\n return;\r\n }\r\n\r\n if (this.core.store.state.pointers.has(ev.pointerId)) {\r\n this.core.store.state.pointers.set(ev.pointerId, ev);\r\n }\r\n\r\n if (this.core.store.state.pointers.size > 1) {\r\n this.throttledPointerMoveMulti(ev);\r\n }\r\n\r\n this.viewport.handlePointerMove(ev);\r\n this.core.store.state?.activeTool?.handlePointerMove(ev);\r\n }\r\n\r\n @Listen('pointerup', { passive: false })\r\n handlePointerUp(ev: PointerEvent) {\r\n if (this.core.store.isDisabled) {\r\n return;\r\n }\r\n\r\n this.core.store.state.pointers.delete(ev.pointerId);\r\n this.host.releasePointerCapture(ev.pointerId);\r\n\r\n // Reset cursor to default when all pointers are released\r\n if (this.core.store.state.pointers.size === 0) {\r\n this.core.store.state.cursor = { icon: 'default', iconActive: 'default' };\r\n }\r\n\r\n this.viewport.handlePointerUp(ev);\r\n this.core.store.state?.activeTool?.handlePointerUp(ev);\r\n }\r\n\r\n @Listen('pointercancel', { passive: false })\r\n handlePointerCancel(ev: PointerEvent) {\r\n if (this.core.store.isDisabled) {\r\n return;\r\n }\r\n\r\n this.host.releasePointerCapture(ev.pointerId);\r\n this.core.store.state.pointers.delete(ev.pointerId);\r\n\r\n // Reset cursor to default when all pointers are released\r\n if (this.core.store.state.pointers.size === 0) {\r\n this.core.store.state.cursor = { icon: 'default', iconActive: 'default' };\r\n }\r\n\r\n this.viewport.handlePointerUp(ev);\r\n this.core.store.state?.activeTool?.handlePointerUp(ev);\r\n }\r\n\r\n @Listen('longpress', { passive: false })\r\n handleLongPress(ev: CustomEvent<PointerEvent>) {\r\n this.contextMenuHandler.handleContextMenu(ev.detail);\r\n }\r\n\r\n @Listen('contextmenu', { capture: false })\r\n handleContextMenu(ev: PointerEvent) {\r\n ev.preventDefault();\r\n\r\n if (this.core.store.isDisabled) {\r\n return;\r\n }\r\n\r\n if (ev.pointerType === 'touch') {\r\n return;\r\n }\r\n\r\n this.contextMenuHandler.handleContextMenu(ev);\r\n }\r\n\r\n @Listen('resize', { target: 'window' })\r\n handleResize() {\r\n this.viewport.handleResize();\r\n }\r\n\r\n @Listen('keydown', { target: 'window' })\r\n handleKeyDown(ev) {\r\n if (this.core.store.isDisabled) {\r\n return;\r\n }\r\n\r\n this.keyHandler.handleKeyDown(ev);\r\n }\r\n\r\n @Listen('keyup', { target: 'window' })\r\n handleKeyUp(ev) {\r\n if (this.core.store.isDisabled) {\r\n return;\r\n }\r\n\r\n this.keyHandler.handleKeyUp(ev);\r\n }\r\n\r\n @Listen('dblclick', { target: 'document' })\r\n preventDoubleTapZoomOnTouchDevices(ev: MouseEvent) {\r\n ev.preventDefault();\r\n }\r\n\r\n @Method()\r\n async registerTool(toolName: string, toolClass: any, toolConfig?: KritzelTextToolConfig | KritzelBrushToolConfig): Promise<KritzelBaseTool> {\r\n if (typeof toolClass !== 'function' || !(toolClass.prototype instanceof KritzelBaseTool)) {\r\n console.error(`Failed to register tool \"${toolName}\": Tool class must be a constructor function`);\r\n return null;\r\n }\r\n\r\n const registeredTool = KritzelToolRegistry.registerTool(toolName, toolClass, this.core);\r\n\r\n if (toolConfig) {\r\n Object.entries(toolConfig).forEach(([key, value]) => {\r\n registeredTool[key] = value;\r\n });\r\n }\r\n\r\n return Promise.resolve(registeredTool);\r\n }\r\n\r\n @Method()\r\n async changeActiveTool(tool: KritzelBaseTool) {\r\n this.core.store.state.activeTool?.onDeactivate();\r\n this.core.store.setState('activeTool', tool);\r\n this.core.deselectAllObjects();\r\n tool?.onActivate();\r\n }\r\n\r\n @Method()\r\n async disable() {\r\n this.core.store.state.isEnabled = false;\r\n this.core.rerender();\r\n }\r\n\r\n @Method()\r\n async enable() {\r\n this.core.store.state.isEnabled = true;\r\n this.core.rerender();\r\n }\r\n\r\n @Method()\r\n async delete() {\r\n this.core.delete();\r\n }\r\n\r\n @Method()\r\n async copy() {\r\n this.core.copy();\r\n }\r\n\r\n @Method()\r\n async paste(x: number, y: number) {\r\n this.core.paste(x, y);\r\n }\r\n\r\n @Method()\r\n async bringForward(object?: KritzelBaseObject<any>) {\r\n this.core.bringForward(object);\r\n }\r\n\r\n @Method()\r\n async sendBackward(object?: KritzelBaseObject<any>) {\r\n this.core.sendBackward(object);\r\n }\r\n\r\n @Method()\r\n async bringToFront(object?: KritzelBaseObject<any>) {\r\n this.core.bringToFront(object);\r\n }\r\n\r\n @Method()\r\n async sendToBack(object?: KritzelBaseObject<any>) {\r\n this.core.sendToBack(object);\r\n }\r\n\r\n @Method()\r\n async undo() {\r\n this.core.undo();\r\n }\r\n\r\n @Method()\r\n async redo() {\r\n this.core.redo();\r\n }\r\n\r\n @Method()\r\n async hideContextMenu() {\r\n this.core.store.state.pointers.clear();\r\n this.core.store.state.isContextMenuVisible = false;\r\n this.core.store.state.objects.remove(o => o instanceof KritzelSelectionBox);\r\n this.core.store.state.isSelecting = false;\r\n this.core.store.state.isEnabled = true;\r\n this.core.rerender();\r\n }\r\n\r\n @Method()\r\n async getObjectById<T extends KritzelBaseObject>(id: string): Promise<T | null> {\r\n const object = this.core.store.allObjects.find(obj => obj.id === id) as T | undefined;\r\n return object || null;\r\n }\r\n\r\n @Method()\r\n async addObject<T extends KritzelBaseObject>(object: T): Promise<T | null> {\r\n this.core.deselectAllObjects();\r\n\r\n object.id = object.generateId();\r\n object._core = this.core;\r\n object.scale = object.scale ? object.scale : this.core.store.state.scale;\r\n object.zIndex = this.core.store.currentZIndex;\r\n\r\n this.core.addObject(object);\r\n this.core.rerender();\r\n\r\n return object;\r\n }\r\n\r\n @Method()\r\n async updateObject<T extends KritzelBaseObject>(object: T, updatedProperties: Partial<T>): Promise<T | null> {\r\n this.core.deselectAllObjects();\r\n\r\n this.core.updateObject(object, updatedProperties);\r\n this.core.rerender();\r\n\r\n return object;\r\n }\r\n\r\n @Method()\r\n async removeObject<T extends KritzelBaseObject>(object: T): Promise<T | null> {\r\n this.core.deselectAllObjects();\r\n\r\n this.core.store.state.objects.remove(o => o.id === object.id);\r\n this.core.rerender();\r\n\r\n return object;\r\n }\r\n\r\n @Method()\r\n async getSelectedObjects(): Promise<KritzelBaseObject<any>[]> {\r\n const selectionGroup = this.core.store.selectionGroup;\r\n return selectionGroup ? selectionGroup.objects : [];\r\n }\r\n\r\n @Method()\r\n async selectObjects(objects: KritzelBaseObject[]) {\r\n this.core.store.state.activeTool?.onDeactivate();\r\n this.core.store.setState('activeTool', KritzelToolRegistry.getTool('selection'));\r\n this.core.deselectAllObjects();\r\n this.core.selectObjects(objects);\r\n }\r\n\r\n @Method()\r\n async selectAllObjectsInViewport() {\r\n this.core.store.state.activeTool?.onDeactivate();\r\n this.core.store.setState('activeTool', KritzelToolRegistry.getTool('selection'));\r\n this.core.deselectAllObjects();\r\n this.core.selectAllObjectsInViewport();\r\n }\r\n\r\n @Method()\r\n async clearSelection() {\r\n this.core.clearSelection();\r\n }\r\n\r\n @Method()\r\n async centerObjectInViewport(object: KritzelBaseObject) {\r\n object.centerInViewport();\r\n\r\n this.core.updateObject(object, object);\r\n this.core.rerender();\r\n\r\n return object;\r\n }\r\n\r\n @Method()\r\n async getCopiedObjects(): Promise<KritzelBaseObject[]> {\r\n return this.core.store.state.copiedObjects || [];\r\n }\r\n\r\n @Method()\r\n async createWorkspace(workspace: KritzelWorkspace): Promise<KritzelWorkspace | null> {\r\n await this.core.createWorkspace(workspace);\r\n this.workspacesChange.emit(this.core.store.state.workspaces);\r\n return workspace;\r\n }\r\n\r\n @Method()\r\n async updateWorkspace(workspace: KritzelWorkspace): Promise<void> {\r\n await this.core.updateWorkspace(workspace);\r\n this.workspacesChange.emit(this.core.store.state.workspaces);\r\n }\r\n\r\n @Method()\r\n async deleteWorkspace(workspace: KritzelWorkspace): Promise<void> {\r\n await this.core.deleteWorkspace(workspace);\r\n this.workspacesChange.emit(this.core.store.state.workspaces);\r\n }\r\n\r\n @Method()\r\n async getWorkspaces(): Promise<KritzelWorkspace[]> {\r\n return await this.core.getWorkspaces();\r\n }\r\n\r\n @Method()\r\n async getActiveWorkspace(): Promise<KritzelWorkspace> {\r\n return this.core.store.state.activeWorkspace;\r\n }\r\n\r\n core: KritzelCore;\r\n viewport: KritzelViewport;\r\n contextMenuHandler: KritzelContextMenuHandler;\r\n keyHandler: KritzelKeyHandler;\r\n contextMenuElement: HTMLKritzelContextMenuElement | null = null;\r\n cursorTargetElement: HTMLElement | null = null;\r\n\r\n get isSelecting() {\r\n return this.core.store.state.activeTool instanceof KritzelSelectionTool && this.core.store.state.isSelecting;\r\n }\r\n\r\n get isSelectionActive() {\r\n return this.core.store.state.activeTool instanceof KritzelSelectionTool && this.core.store.selectionGroup !== null;\r\n }\r\n\r\n constructor() {\r\n this.core = new KritzelCore(this);\r\n }\r\n\r\n disconnectedCallback() {\r\n this.throttledWheel.cancel();\r\n this.throttledPointerMoveMulti.cancel();\r\n \r\n // Reset cursor on target element\r\n if (this.cursorTargetElement) {\r\n this.cursorTargetElement.style.cursor = '';\r\n this.cursorTargetElement.style.removeProperty('--kritzel-pointer-cursor');\r\n this.cursorTargetElement = null;\r\n }\r\n }\r\n\r\n componentWillLoad() {\r\n this.validateScaleMax(this.scaleMax);\r\n this.validateScaleMin(this.scaleMin);\r\n }\r\n\r\n async componentDidLoad() {\r\n this.contextMenuHandler = new KritzelContextMenuHandler(this.core, this.globalContextMenuItems, this.objectContextMenuItems);\r\n this.keyHandler = new KritzelKeyHandler(this.core);\r\n this.viewport = new KritzelViewport(this.core, this.host);\r\n\r\n // Set cursor target element (use prop value or default to document.body)\r\n this.cursorTargetElement = this.cursorTarget || document.body;\r\n \r\n // Set the pointer cursor CSS variable for child components to use\r\n this.cursorTargetElement.style.setProperty('--kritzel-pointer-cursor', KritzelCursorHelper.getPointerCursor());\r\n\r\n // Set sync configuration if provided\r\n if (this.syncConfig) {\r\n this.core.setSyncConfig(this.syncConfig);\r\n }\r\n\r\n // Initialize Yjs document and persistence layer\r\n await this.core.initializeYjs();\r\n\r\n // Initialize workspace (will load from Yjs if available)\r\n await this.core.initializeWorkspace(this.workspace);\r\n\r\n // Register callback for remote workspace changes\r\n this.core.appStateMap.onRemoteChange(() => {\r\n this.workspacesChange.emit(this.core.store.state.workspaces);\r\n });\r\n\r\n this._registerStateChangeListeners();\r\n\r\n if (this.core.store.state.isReady === false) {\r\n this.core.store.state.isReady = true;\r\n this.isEngineReady.emit(this.core.store.state);\r\n }\r\n }\r\n\r\n emitObjectsChange() {\r\n const objects = this.core.store.allObjects as KritzelBaseObject<HTMLElement | SVGElement>[];\r\n const undoState = this.core.store.state.objects.undoState;\r\n\r\n this.objectsChange.emit(objects);\r\n this.undoStateChange.emit(undoState);\r\n }\r\n\r\n private _registerStateChangeListeners() {\r\n this.core.store.onStateChange('activeTool', this._handleActiveToolChange.bind(this));\r\n }\r\n\r\n private _handleActiveToolChange(activeTool: KritzelBaseTool) {\r\n if (!(activeTool instanceof KritzelSelectionTool)) {\r\n this.core.clearSelection();\r\n this.core.store.state.objects.remove(o => o instanceof KritzelSelectionBox);\r\n this.core.store.state.isSelecting = false;\r\n this.core.store.state.isResizeHandleSelected = false;\r\n this.core.store.state.isRotationHandleSelected = false;\r\n }\r\n\r\n this.core.store.state.skipContextMenu = false;\r\n this.core.store.state.copiedObjects = null;\r\n this.activeToolChange.emit(activeTool);\r\n KritzelKeyboardHelper.forceHideKeyboard();\r\n\r\n this.core.rerender();\r\n }\r\n\r\n private updateCursor(): void {\r\n const state = this.core.store.state;\r\n \r\n const isPointerDown = this.core.store.isPointerDown;\r\n\r\n const icon = state.cursor?.icon;\r\n const iconActive = state.cursor?.iconActive ?? icon;\r\n const rotation = state.cursor?.rotation;\r\n\r\n const cursor = KritzelCursorHelper.getCursor({\r\n iconName: isPointerDown ? iconActive : icon,\r\n rotation: rotation,\r\n });\r\n\r\n if (this.cursorTargetElement) {\r\n this.cursorTargetElement.style.cursor = cursor;\r\n }\r\n }\r\n\r\n render() {\r\n const computedStyle = window.getComputedStyle(this.host);\r\n const baseHandleSizePx = computedStyle.getPropertyValue('--kritzel-selection-handle-size').trim() || '6px';\r\n const baseHandleSize = parseFloat(baseHandleSizePx);\r\n const baseHandleTouchSize = baseHandleSize * 2 < 14 ? 14 : baseHandleSize;\r\n const viewportCenterX = this.core.store.state.viewportWidth / 2 + this.core.store.state.translateX;\r\n const viewportCenterY = this.core.store.state.viewportHeight / 2 + this.core.store.state.translateY;\r\n const viewportBounds = {\r\n x: -this.core.store.state.translateX / this.core.store.state.scale,\r\n y: -this.core.store.state.translateY / this.core.store.state.scale,\r\n z: this.core.store.state.scale,\r\n width: this.core.store.state.viewportWidth / this.core.store.state.scale,\r\n height: this.core.store.state.viewportHeight / this.core.store.state.scale,\r\n depth: 100,\r\n };\r\n const visibleObjects = this.core.store.state.objects.query(viewportBounds);\r\n\r\n this.updateCursor();\r\n\r\n return (\r\n <Host>\r\n {this.core.store.state.debugInfo.showViewportInfo && (\r\n <div class=\"debug-panel\">\r\n <div>ActiveWorkspaceId: {this.core.store.state?.activeWorkspace?.id}</div>\r\n <div>ActiveWorkspaceName: {this.core.store.state?.activeWorkspace?.name}</div>\r\n <div>TranslateX: {this.core.store.state?.translateX}</div>\r\n <div>TranslateY: {this.core.store.state?.translateY}</div>\r\n <div>ViewportWidth: {this.core.store.state?.viewportWidth}</div>\r\n <div>ViewportHeight: {this.core.store.state?.viewportHeight}</div>\r\n <div>PointerCount: {this.core.store.state.pointers.size}</div>\r\n <div>Scale: {this.core.store.state?.scale}</div>\r\n <div>ActiveTool: {this.core.store.state?.activeTool?.name}</div>\r\n <div>HasViewportChanged: {this.core.store.state?.hasViewportChanged ? 'true' : 'false'}</div>\r\n <div>IsEnabled: {this.core.store.state?.isEnabled ? 'true' : 'false'}</div>\r\n <div>IsScaling: {this.core.store.state?.isScaling ? 'true' : 'false'}</div>\r\n <div>IsPanning: {this.core.store.state?.isPanning ? 'true' : 'false'}</div>\r\n <div>IsSelecting: {this.isSelecting ? 'true' : 'false'}</div>\r\n <div>IsSelectionActive: {this.isSelectionActive ? 'true' : 'false'}</div>\r\n <div>IsResizeHandleSelected: {this.core.store.state.isResizeHandleSelected ? 'true' : 'false'}</div>\r\n <div>IsRotationHandleSelected: {this.core.store.state.isRotationHandleSelected ? 'true' : 'false'}</div>\r\n <div>IsRotationHandleHovered: {this.core.store.state.isRotationHandleHovered ? 'true' : 'false'}</div>\r\n <div>IsDrawing: {this.core.store.state.isDrawing ? 'true' : 'false'}</div>\r\n <div>IsWriting: {this.core.store.state.isWriting ? 'true' : 'false'}</div>\r\n <div>IsPointerDown: {this.core.store.isPointerDown ? 'true' : 'false'}</div>\r\n <div>PointerX: {this.core.store.state?.pointerX}</div>\r\n <div>PointerY: {this.core.store.state?.pointerY}</div>\r\n <div>SelectedObjects: {this.core.store.selectionGroup?.objects.length || 0}</div>\r\n <div>\r\n ViewportCenter: ({viewportCenterX.toFixed(2)}, {viewportCenterY.toFixed(2)})\r\n </div>\r\n </div>\r\n )}\r\n\r\n <div\r\n id=\"origin\"\r\n class=\"origin\"\r\n style={{\r\n transform: `matrix(${this.core.store.state?.scale}, 0, 0, ${this.core.store.state?.scale}, ${this.core.store.state?.translateX}, ${this.core.store.state?.translateY})`,\r\n }}\r\n >\r\n {visibleObjects?.map(object => {\r\n return (\r\n <div\r\n key={object.id}\r\n style={{\r\n transform: object?.transformationMatrix,\r\n transformOrigin: 'top left',\r\n zIndex: object.zIndex.toString(),\r\n position: 'absolute',\r\n pointerEvents: this.core.store.state.isScaling ? 'none' : 'auto',\r\n }}\r\n >\r\n <svg\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n id={object.id}\r\n class=\"object\"\r\n style={{\r\n height: object?.totalHeight.toString(),\r\n width: object?.totalWidth.toString(),\r\n left: '0',\r\n top: '0',\r\n position: 'absolute',\r\n transform: `rotate(${object.rotationDegrees}deg)`,\r\n transformOrigin: `${object.totalWidth / 2}px ${object.totalHeight / 2}px`,\r\n opacity: object.markedForRemoval ? '0.5' : object.opacity.toString(),\r\n pointerEvents: object.markedForRemoval ? 'none' : 'auto',\r\n }}\r\n >\r\n <foreignObject\r\n x=\"0\"\r\n y=\"0\"\r\n width={object.totalWidth.toString()}\r\n height={object.totalHeight.toString()}\r\n style={{\r\n minHeight: '0',\r\n minWidth: '0',\r\n backgroundColor: object.backgroundColor,\r\n borderColor: object.borderColor,\r\n borderWidth: object.borderWidth + 'px',\r\n borderStyle: 'solid',\r\n padding: object.padding + 'px',\r\n overflow: 'visible',\r\n }}\r\n >\r\n {KritzelClassHelper.isInstanceOf<KritzelPath>(object, 'KritzelPath') && (\r\n <svg\r\n ref={el => object.mount(el)}\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n style={{\r\n height: object?.height.toString(),\r\n width: object?.width.toString(),\r\n position: 'absolute',\r\n overflow: 'visible',\r\n }}\r\n viewBox={object?.viewBox}\r\n >\r\n <path d={object?.d} fill={object.fill} stroke={object?.stroke} shape-rendering={object.isLowRes() ? 'optimizeSpeed' : 'auto'} />\r\n </svg>\r\n )}\r\n\r\n {KritzelClassHelper.isInstanceOf<KritzelImage>(object, 'KritzelImage') && (\r\n <img\r\n ref={el => object.mount(el)}\r\n src={object.src}\r\n style={{\r\n width: '100%',\r\n height: '100%',\r\n userSelect: 'none',\r\n pointerEvents: 'none',\r\n imageRendering: this.core.store.state.isScaling || this.core.store.state.isPanning ? 'pixelated' : 'auto',\r\n }}\r\n draggable={false}\r\n onDragStart={e => e.preventDefault()}\r\n />\r\n )}\r\n\r\n {KritzelClassHelper.isInstanceOf<KritzelText>(object, 'KritzelText') && (\r\n <div\r\n ref={el => object.mount(el)}\r\n onPointerDown={e => object.handlePointerDown(e)}\r\n onPointerMove={e => object.handlePointerMove(e)}\r\n onPointerUp={e => object.handlePointerUp(e)}\r\n style={{\r\n minWidth: object.initialWidth + 'px',\r\n minHeight: object.initialHeight + 'px',\r\n maxWidth: '500px',\r\n height: 'auto',\r\n width: 'max-content',\r\n transformOrigin: 'top left',\r\n transform: `scale(${object.scaleFactor})`,\r\n backgroundColor: object.backgroundColor,\r\n overflow: 'visible',\r\n textRendering: this.core.store.state.isScaling || this.core.store.state.isPanning ? 'optimizeSpeed' : 'auto',\r\n }}\r\n ></div>\r\n )}\r\n\r\n {KritzelClassHelper.isInstanceOf<KritzelCustomElement>(object, 'KritzelCustomElement') && (\r\n <div\r\n ref={el => object.mount(el)}\r\n style={{\r\n width: '100%',\r\n height: '100%',\r\n pointerEvents: 'auto',\r\n overflow: 'hidden',\r\n display: 'block',\r\n }}\r\n ></div>\r\n )}\r\n\r\n {KritzelClassHelper.isInstanceOf<KritzelSelectionGroup>(object, 'KritzelSelectionGroup') && (\r\n <div\r\n ref={el => object.mount(el)}\r\n style={{\r\n width: '100%',\r\n height: '100%',\r\n }}\r\n ></div>\r\n )}\r\n\r\n {KritzelClassHelper.isInstanceOf<KritzelSelectionBox>(object, 'KritzelSelectionBox') && (\r\n <div\r\n ref={el => object.mount(el)}\r\n style={{\r\n width: '100%',\r\n height: '100%',\r\n backgroundColor: KritzelDevicesHelper.isFirefox() ? object.backgroundColor : 'transparent',\r\n borderWidth: KritzelDevicesHelper.isFirefox() ? object.borderWidth + 'px' : '0',\r\n borderStyle: KritzelDevicesHelper.isFirefox() ? 'solid' : 'none',\r\n borderColor: KritzelDevicesHelper.isFirefox() ? object.borderColor : 'transparent',\r\n }}\r\n ></div>\r\n )}\r\n </foreignObject>\r\n\r\n {this.core.store.state.debugInfo.showObjectInfo && object.isDebugInfoVisible && (\r\n <g style={{ pointerEvents: 'none' }}>\r\n <foreignObject x={object.totalWidth.toString()} y=\"0\" width=\"400px\" height=\"160px\" style={{ minHeight: '0', minWidth: '0' }}>\r\n <div style={{ width: '100%', height: '100%' }}>\r\n <div style={{ whiteSpace: 'nowrap' }}>Id: {object.id}</div>\r\n <div style={{ whiteSpace: 'nowrap' }}>width: {object.width}</div>\r\n <div style={{ whiteSpace: 'nowrap' }}>height: {object.height}</div>\r\n <div style={{ whiteSpace: 'nowrap' }}>translateX: {object.translateX}</div>\r\n <div style={{ whiteSpace: 'nowrap' }}>translateY: {object.translateY}</div>\r\n </div>\r\n </foreignObject>\r\n </g>\r\n )}\r\n </svg>\r\n\r\n <svg\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n style={{\r\n height: object?.totalHeight.toString(),\r\n width: object?.totalWidth.toString(),\r\n left: '0',\r\n top: '0',\r\n position: 'absolute',\r\n transform: `rotate(${object.rotationDegrees}deg)`,\r\n transformOrigin: `${object.totalWidth / 2}px ${object.totalHeight / 2}px`,\r\n overflow: 'visible',\r\n pointerEvents: 'none',\r\n }}\r\n >\r\n {object.isSelected && (\r\n <g class=\"selection-borders\" style={{ pointerEvents: 'none' }}>\r\n <line\r\n x1=\"0\"\r\n y1=\"0\"\r\n x2={object.totalWidth}\r\n y2=\"0\"\r\n style={{\r\n stroke: 'var(--kritzel-selection-border-color, #007AFF)',\r\n strokeWidth: `calc(var(--kritzel-selection-border-width, 2px) * ${object.scale} / ${this.core.store.state?.scale})`,\r\n strokeLinecap: 'square',\r\n }}\r\n />\r\n <line\r\n x1=\"0\"\r\n y1=\"0\"\r\n x2=\"0\"\r\n y2={object.totalHeight}\r\n style={{\r\n stroke: 'var(--kritzel-selection-border-color, #007AFF)',\r\n strokeWidth: `calc(var(--kritzel-selection-border-width, 2px) * ${object.scale} / ${this.core.store.state?.scale})`,\r\n strokeLinecap: 'square',\r\n }}\r\n />\r\n <line\r\n x1=\"0\"\r\n y1={object.totalHeight}\r\n x2={object.totalWidth}\r\n y2={object.totalHeight}\r\n style={{\r\n stroke: 'var(--kritzel-selection-border-color, #007AFF)',\r\n strokeWidth: `calc(var(--kritzel-selection-border-width, 2px) * ${object.scale} / ${this.core.store.state?.scale})`,\r\n strokeLinecap: 'square',\r\n }}\r\n />\r\n <line\r\n x1={object.totalWidth}\r\n y1=\"0\"\r\n x2={object.totalWidth}\r\n y2={object.totalHeight}\r\n style={{\r\n stroke: 'var(--kritzel-selection-border-color, #007AFF)',\r\n strokeWidth: `calc(var(--kritzel-selection-border-width, 2px) * ${object.scale} / ${this.core.store.state?.scale})`,\r\n strokeLinecap: 'square',\r\n }}\r\n />\r\n </g>\r\n )}\r\n\r\n {object.isSelected && !this.isSelecting && (\r\n <g class=\"selection-handles\" style={{ pointerEvents: 'auto' }}>\r\n <circle\r\n class=\"resize-handle top-left\"\r\n cx=\"0\"\r\n cy=\"0\"\r\n r={`${(baseHandleSize * object.scale) / this.core.store.state?.scale}`}\r\n style={{\r\n fill: 'var(--kritzel-selection-handle-color, #000000)',\r\n paintOrder: 'fill',\r\n }}\r\n />\r\n <circle\r\n class=\"resize-handle-overlay top-left\"\r\n cx=\"0\"\r\n cy=\"0\"\r\n r={`${(baseHandleTouchSize * object.scale) / this.core.store.state?.scale}`}\r\n style={{\r\n fill: 'transparent',\r\n paintOrder: 'fill',\r\n }}\r\n onPointerEnter={() => !this.core.store.isPointerDown && (this.core.store.state.cursor = { icon: 'move-vertical', rotation: object.rotationDegrees - 45 })}\r\n onPointerLeave={() => !this.core.store.isPointerDown && (this.core.store.state.cursor = { icon: 'default', iconActive: 'default' })}\r\n />\r\n\r\n <circle\r\n class=\"resize-handle top-right\"\r\n cx={object.totalWidth}\r\n cy=\"0\"\r\n r={`${(baseHandleSize * object.scale) / this.core.store.state?.scale}`}\r\n style={{\r\n fill: 'var(--kritzel-selection-handle-color, #000000)',\r\n paintOrder: 'fill',\r\n }}\r\n />\r\n <circle\r\n class=\"resize-handle-overlay top-right\"\r\n cx={object.totalWidth}\r\n cy=\"0\"\r\n r={`${(baseHandleTouchSize * object.scale) / this.core.store.state?.scale}`}\r\n style={{\r\n fill: 'transparent',\r\n paintOrder: 'fill',\r\n }}\r\n onPointerEnter={() => !this.core.store.isPointerDown && (this.core.store.state.cursor = { icon: 'move-vertical', rotation: object.rotationDegrees + 45 })}\r\n onPointerLeave={() => !this.core.store.isPointerDown && (this.core.store.state.cursor = { icon: 'default', iconActive: 'default' })}\r\n />\r\n\r\n <circle\r\n class=\"resize-handle bottom-left\"\r\n cx=\"0\"\r\n cy={object.totalHeight}\r\n r={`${(baseHandleSize * object.scale) / this.core.store.state?.scale}`}\r\n style={{\r\n fill: 'var(--kritzel-selection-handle-color, #000000)',\r\n paintOrder: 'fill',\r\n }}\r\n />\r\n <circle\r\n class=\"resize-handle-overlay bottom-left\"\r\n cx=\"0\"\r\n cy={object.totalHeight}\r\n r={`${(baseHandleTouchSize * object.scale) / this.core.store.state?.scale}`}\r\n style={{\r\n fill: 'transparent',\r\n paintOrder: 'fill',\r\n }}\r\n onPointerEnter={() => !this.core.store.isPointerDown && (this.core.store.state.cursor = { icon: 'move-vertical', rotation: object.rotationDegrees + 45 })}\r\n onPointerLeave={() => !this.core.store.isPointerDown && (this.core.store.state.cursor = { icon: 'default', iconActive: 'default' })}\r\n />\r\n\r\n <circle\r\n class=\"resize-handle bottom-right\"\r\n cx={object.totalWidth}\r\n cy={object.totalHeight}\r\n r={`${(baseHandleSize * object.scale) / this.core.store.state?.scale}`}\r\n style={{\r\n fill: 'var(--kritzel-selection-handle-color, #000000)',\r\n paintOrder: 'fill',\r\n }}\r\n />\r\n <circle\r\n class=\"resize-handle-overlay bottom-right\"\r\n cx={object.totalWidth}\r\n cy={object.totalHeight}\r\n r={`${(baseHandleTouchSize * object.scale) / this.core.store.state?.scale}`}\r\n style={{\r\n fill: 'transparent',\r\n paintOrder: 'fill',\r\n }}\r\n onPointerEnter={() => !this.core.store.isPointerDown && (this.core.store.state.cursor = { icon: 'move-vertical', rotation: object.rotationDegrees - 45 })}\r\n onPointerLeave={() => !this.core.store.isPointerDown && (this.core.store.state.cursor = { icon: 'default', iconActive: 'default' })}\r\n />\r\n\r\n <line\r\n x1={object.totalWidth / 2}\r\n y1=\"0\"\r\n x2={object.totalWidth / 2}\r\n y2={-((15 * object.scale) / this.core.store.state?.scale)}\r\n style={{\r\n stroke: 'var(--kritzel-selection-border-color, #007AFF)',\r\n strokeWidth: `calc(var(--kritzel-selection-border-width, 2px) * ${object.scale} / ${this.core.store.state?.scale})`,\r\n }}\r\n />\r\n <circle\r\n class=\"rotation-handle\"\r\n cx={object.totalWidth / 2}\r\n cy={-((15 * object.scale) / this.core.store.state?.scale)}\r\n r={`${(baseHandleSize * object.scale) / this.core.store.state?.scale}`}\r\n style={{\r\n fill: 'var(--kritzel-selection-handle-color, #000000)',\r\n paintOrder: 'fill',\r\n }}\r\n />\r\n <circle\r\n class=\"rotation-handle-overlay\"\r\n cx={object.totalWidth / 2}\r\n cy={-((15 * object.scale) / this.core.store.state?.scale)}\r\n r={`${(baseHandleTouchSize * object.scale) / this.core.store.state?.scale}`}\r\n style={{\r\n fill: 'transparent',\r\n paintOrder: 'fill',\r\n }}\r\n onPointerEnter={() => !this.core.store.isPointerDown && (this.core.store.state.cursor = { icon: 'hand', iconActive: 'hand-grab' })}\r\n onPointerLeave={() => !this.core.store.isPointerDown && (this.core.store.state.cursor = { icon: 'default', iconActive: 'default' })}\r\n />\r\n </g>\r\n )}\r\n </svg>\r\n </div>\r\n );\r\n })}\r\n </div>\r\n\r\n {this.core.store.state.isContextMenuVisible && (\r\n <kritzel-context-menu\r\n class=\"context-menu\"\r\n ref={el => (this.contextMenuElement = el)}\r\n items={this.core.store.state.contextMenuItems}\r\n objects={this.core.store.selectionGroup?.objects || []}\r\n style={{\r\n position: 'fixed',\r\n left: `${this.core.store.state.contextMenuX}px`,\r\n top: `${this.core.store.state.contextMenuY}px`,\r\n zIndex: '10000',\r\n }}\r\n onActionSelected={event => {\r\n event.detail.action(\r\n {\r\n x: (-this.core.store.state.translateX + this.core.store.state.contextMenuX) / this.core.store.state.scale,\r\n y: (-this.core.store.state.translateY + this.core.store.state.contextMenuY) / this.core.store.state.scale,\r\n },\r\n this.core.store.selectionGroup?.objects,\r\n );\r\n this.hideContextMenu();\r\n }}\r\n onClose={() => this.hideContextMenu()}\r\n ></kritzel-context-menu>\r\n )}\r\n\r\n {this.core.store.state?.activeTool instanceof KritzelEraserTool && !this.core.store.state.isScaling && <kritzel-cursor-trail core={this.core}></kritzel-cursor-trail>}\r\n </Host>\r\n );\r\n }\r\n}\r\n"]}
@@ -17,7 +17,6 @@
17
17
  border: none;
18
18
  outline: none;
19
19
  background: none;
20
- cursor: default;
21
20
  border-radius: 0;
22
21
  color: var(--control-text-color);
23
22
  font-weight: bold;