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