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
@@ -1,5 +1,5 @@
1
1
  import { r as registerInstance, h, H as Host, c as createEvent, g as getElement } from './index-SGde3HXB.js';
2
- import { T as KritzelDevicesHelper, G as KritzelBrushTool, L as KritzelTextTool, U as KritzelMouseButton, M as KritzelSelectionTool, R as DEFAULT_BRUSH_CONFIG, I as KritzelEraserTool, S as DEFAULT_TEXT_CONFIG, J as KritzelImageTool, Q as KritzelWorkspace, V as KritzelKeyboardHelper, W as KritzelBaseHandler, X as KritzelToolRegistry, Y as KritzelSelectionBox, Z as KritzelSelectionGroup, _ as KritzelBaseObject, F as KritzelImage, K as KritzelText, E as KritzelPath, $ as Doc, a0 as DEFAULT_SYNC_CONFIG, a1 as UndoManager, P as KritzelAppStateMap, a2 as ObjectHelper, a3 as KritzelEventHelper, a4 as KritzelBaseTool } from './default-text-tool.config-2YFQA3SF.js';
2
+ import { U as KritzelDevicesHelper, G as KritzelBrushTool, L as KritzelTextTool, V as KritzelMouseButton, N as KritzelSelectionTool, S as DEFAULT_BRUSH_CONFIG, I as KritzelEraserTool, T as DEFAULT_TEXT_CONFIG, J as KritzelImageTool, R as KritzelWorkspace, W as KritzelIconRegistry, X as KritzelKeyboardHelper, Y as KritzelBaseHandler, Z as KritzelToolRegistry, _ as KritzelSelectionBox, $ as KritzelSelectionGroup, a0 as KritzelBaseObject, F as KritzelImage, K as KritzelText, E as KritzelPath, a1 as Doc, a2 as DEFAULT_SYNC_CONFIG, a3 as UndoManager, Q as KritzelAppStateMap, a4 as ObjectHelper, a5 as KritzelEventHelper, a6 as KritzelBaseTool, M as KritzelCursorHelper } from './default-text-tool.config-BvCgOiKA.js';
3
3
 
4
4
  var commonjsGlobal = typeof globalThis !== 'undefined' ? globalThis : typeof window !== 'undefined' ? window : typeof global !== 'undefined' ? global : typeof self !== 'undefined' ? self : {};
5
5
 
@@ -37,13 +37,13 @@ const KritzelColor = class {
37
37
  }
38
38
  render() {
39
39
  const isColorVeryLight = this.isLightColor(this.value);
40
- return (h(Host, { key: '000e54c604c8ceca2c44365e95ec1f5bfb1b729a' }, h("div", { key: '77b2abeae70e4a80714e1364eb4e11e67f16d066', class: "checkerboard-bg", style: {
40
+ return (h(Host, { key: 'bd867d9ff750588e41fb364b2192a6c2c5832e59' }, h("div", { key: '858e97d057d7ba19869cbacc4e9f31ae6c64defa', class: "checkerboard-bg", style: {
41
41
  width: `${this.size}px`,
42
42
  height: `${this.size}px`,
43
43
  borderRadius: '50%',
44
44
  display: 'inline-block',
45
45
  position: 'relative',
46
- } }, h("div", { key: 'df71720cf51d845a36598499adb900a30770c503', class: {
46
+ } }, h("div", { key: '0c983b133716e048f29d7e51979068fbde178abd', class: {
47
47
  'color-circle': true,
48
48
  'white': isColorVeryLight,
49
49
  }, style: {
@@ -60,7 +60,7 @@ const KritzelColor = class {
60
60
  };
61
61
  KritzelColor.style = kritzelColorCss;
62
62
 
63
- const kritzelColorPaletteCss = ":host{display:flex;align-items:flex-start;gap:8px;padding:8px;width:100%;box-sizing:border-box}.color-grid{width:100%;display:grid;grid-template-columns:repeat(6, 32px);gap:8px;justify-items:center;overflow:hidden;height:40px;transition:height 0.1s ease-in-out}.color-grid.expanded{height:500px}.color-container{display:flex;justify-content:center;align-items:center;width:32px;height:32px;border-radius:50%;cursor:pointer;border:2px solid transparent;box-sizing:border-box}.color-container:hover{background-color:var(--kritzel-color-palette-hover-background-color, #ebebeb)}.color-container.selected{border-color:var(--kritzel-selection-border-color, #007AFF);background-color:var(--kritzel-color-palette-selected-background-color)}";
63
+ const kritzelColorPaletteCss = ":host{display:flex;align-items:flex-start;gap:8px;padding:8px;width:100%;box-sizing:border-box}.color-grid{width:100%;display:grid;grid-template-columns:repeat(6, 32px);gap:8px;justify-items:center;overflow:hidden;height:40px;transition:height 0.1s ease-in-out}.color-grid.expanded{height:500px}.color-container{display:flex;justify-content:center;align-items:center;width:32px;height:32px;border-radius:50%;cursor:var(--kritzel-pointer-cursor, pointer);border:2px solid transparent;box-sizing:border-box}.color-container:hover{background-color:var(--kritzel-color-palette-hover-background-color, #ebebeb)}.color-container.selected{border-color:var(--kritzel-selection-border-color, #007AFF);background-color:var(--kritzel-color-palette-selected-background-color)}";
64
64
 
65
65
  const KritzelColorPalette = class {
66
66
  constructor(hostRef) {
@@ -86,7 +86,7 @@ const KritzelColorPalette = class {
86
86
  render() {
87
87
  const displayedColors = this.isExpanded ? this.colors : this.colors.slice(0, 6);
88
88
  const expandedHeight = this.isExpanded ? this.calculateHeight() : '32px';
89
- return (h(Host, { key: 'd533725a8ab2019ae963959727283fbbf833c56a' }, h("div", { key: '7fb50c16d79e9b7330100b0f4e116f8f07b20827', class: {
89
+ return (h(Host, { key: 'a237c0ebccd7fbfb6b42ce7fd5689d7282571bef' }, h("div", { key: 'dbccf2817079f6cf958fa37d097654c326d6a4ab', class: {
90
90
  'color-grid': true,
91
91
  'expanded': this.isExpanded,
92
92
  }, style: {
@@ -99,7 +99,7 @@ const KritzelColorPalette = class {
99
99
  };
100
100
  KritzelColorPalette.style = kritzelColorPaletteCss;
101
101
 
102
- const kritzelContextMenuCss = ":host{display:block}.menu-container{display:flex;flex-direction:column;background-color:var(--kritzel-context-menu-background-color, #ffffff);border-radius:var(--kritzel-context-menu-border-radius, 12px);box-shadow:var(--kritzel-context-menu-box-shadow, 0 1px 6px rgba(0, 0, 0, 0.12));border:var(--kritzel-context-menu-border, 1px solid #ebebeb);padding:var(--kritzel-context-menu-padding,4px)}.menu-item{display:flex;align-items:center;gap:var(--kritzel-context-menu-item-gap, 8px);background:none;border:none;text-align:left;padding:var(--kritzel-context-menu-item-padding, 8px);border-radius:var(--kritzel-context-menu-item-border-radius, 12px);cursor:pointer;font-size:var(--kritzel-context-menu-item-font-size, 14px);color:var(--kritzel-context-menu-item-color, #333333);white-space:nowrap;-webkit-tap-highlight-color:transparent}.menu-item:not(.disabled):hover{background-color:var(--kritzel-context-menu-item-hover-background-color, hsl(0, 0%, 0%, 4.3%))}.menu-item:not(.disabled):active{background-color:var(--kritzel-context-menu-item-active-background-color, hsl(0, 0%, 0%, 8.6%))}.menu-item.disabled{color:var(--kritzel-context-menu-item-disabled-color, #aaaaaa);cursor:default}.menu-item kritzel-icon{opacity:0.8;flex-shrink:0}.menu-item.disabled kritzel-icon{opacity:0.4}.label{flex-grow:1}";
102
+ const kritzelContextMenuCss = ":host{display:block}.menu-container{display:flex;flex-direction:column;background-color:var(--kritzel-context-menu-background-color, #ffffff);border-radius:var(--kritzel-context-menu-border-radius, 12px);box-shadow:var(--kritzel-context-menu-box-shadow, 0 1px 6px rgba(0, 0, 0, 0.12));border:var(--kritzel-context-menu-border, 1px solid #ebebeb);padding:var(--kritzel-context-menu-padding,4px)}.menu-item{display:flex;align-items:center;gap:var(--kritzel-context-menu-item-gap, 8px);background:none;border:none;text-align:left;padding:var(--kritzel-context-menu-item-padding, 8px);border-radius:var(--kritzel-context-menu-item-border-radius, 12px);cursor:var(--kritzel-pointer-cursor, pointer);font-size:var(--kritzel-context-menu-item-font-size, 14px);color:var(--kritzel-context-menu-item-color, #333333);white-space:nowrap;-webkit-tap-highlight-color:transparent}.menu-item:not(.disabled):hover{background-color:var(--kritzel-context-menu-item-hover-background-color, hsl(0, 0%, 0%, 4.3%))}.menu-item:not(.disabled):active{background-color:var(--kritzel-context-menu-item-active-background-color, hsl(0, 0%, 0%, 8.6%))}.menu-item.disabled{color:var(--kritzel-context-menu-item-disabled-color, #aaaaaa)}.menu-item kritzel-icon{opacity:0.8;flex-shrink:0}.menu-item.disabled kritzel-icon{opacity:0.4}.label{flex-grow:1}";
103
103
 
104
104
  const KritzelContextMenu = class {
105
105
  constructor(hostRef) {
@@ -151,7 +151,7 @@ const KritzelContextMenu = class {
151
151
  return defaultValue;
152
152
  }
153
153
  render() {
154
- return (h(Host, { key: '45b9652285f9c3fe7568cbe222667d23c151622f' }, h("div", { key: '9aecc01027f297fa4d991780efaaf51b8d4542dc', class: "menu-container" }, this.processedItems.map(({ item, isDisabled }, index) => (h("button", { key: `${item.label}-${index}`, class: { 'menu-item': true, 'disabled': isDisabled }, onClick: () => this.handleItemClick(item, isDisabled), disabled: isDisabled }, item.icon && h("kritzel-icon", { name: item.icon, size: 16 }), h("span", { class: "label" }, item.label)))))));
154
+ return (h(Host, { key: '102f1fd72d991e6d5c0fa6025ed75d860e8e9852' }, h("div", { key: '510ea27fdcddc78a51220f68a8d8ba82fd2bd108', class: "menu-container" }, this.processedItems.map(({ item, isDisabled }, index) => (h("button", { key: `${item.label}-${index}`, class: { 'menu-item': true, 'disabled': isDisabled }, onClick: () => this.handleItemClick(item, isDisabled), disabled: isDisabled }, item.icon && h("kritzel-icon", { name: item.icon, size: 16 }), h("span", { class: "label" }, item.label)))))));
155
155
  }
156
156
  static get watchers() { return {
157
157
  "items": ["onItemsChanged"]
@@ -159,7 +159,7 @@ const KritzelContextMenu = class {
159
159
  };
160
160
  KritzelContextMenu.style = kritzelContextMenuCss;
161
161
 
162
- const kritzelControlBrushConfigCss = ":host{display:flex;flex-direction:column;width:100%}.expand-toggle{background:none;border:none;cursor:pointer;font-size:14px;line-height:1;padding:8px;color:var(--kritzel-color-palette-expand-toggle-color, #666666)}.expand-toggle:hover{color:var(--kritzel-color-palette-expand-toggle-hover-color, #333333)}";
162
+ const kritzelControlBrushConfigCss = ":host{display:flex;flex-direction:column;width:100%}.expand-toggle{background:none;border:none;cursor:var(--kritzel-pointer-cursor, pointer);font-size:14px;line-height:1;padding:8px;color:var(--kritzel-color-palette-expand-toggle-color, #666666)}.expand-toggle:hover{color:var(--kritzel-color-palette-expand-toggle-hover-color, #333333)}";
163
163
 
164
164
  const KritzelControlBrushConfig = class {
165
165
  constructor(hostRef) {
@@ -194,14 +194,14 @@ const KritzelControlBrushConfig = class {
194
194
  this.toolChange.emit(this.tool);
195
195
  }
196
196
  render() {
197
- return (h(Host, { key: '4b060826312e6d5a2117f5ba9522553af9b02d6f' }, h("div", { key: '0975a250184d5bb2d38cc60263bd718157230d8c', style: {
197
+ return (h(Host, { key: '3111b2870e4a02da26bac5450424cadeef8c8d39' }, h("div", { key: '4bbf6bede0822c35e206566dd176e6b150b54098', style: {
198
198
  display: 'flex',
199
199
  flexDirection: 'row',
200
200
  alignItems: this.isExpanded ? 'flex-start' : 'center',
201
201
  justifyContent: 'flex-start',
202
202
  width: '100%',
203
203
  gap: '8px',
204
- } }, h("kritzel-color-palette", { key: 'df84a6fdda01bc7bf3aff42e3b88c4bd9dca500f', colors: this.palette, selectedColor: this.tool.color, isExpanded: this.isExpanded, isOpaque: true, onColorChange: color => this.handleColorChange(color) }), h("button", { key: 'e43c19612807fc4f9cd1bf04f4fb79a048cfd62b', class: "expand-toggle", onClick: () => this.handleToggleExpand(), title: this.isExpanded ? 'Collapse' : 'Expand', style: this.palette.length > 6 ? { visibillity: 'visible' } : { visibility: 'hidden' } }, h("kritzel-icon", { key: '915cce6c4744ad175f3836c946330882de840880', name: this.isExpanded ? 'chevron-up' : 'chevron-down' }))), h("kritzel-stroke-size", { key: 'c07eebae3ba1785e2644c6b5a22d23f76be950fb', selectedSize: this.tool.size, onSizeChange: event => this.handleSizeChange(event) })));
204
+ } }, h("kritzel-color-palette", { key: 'eb9c5690f823ca278d60629b9ac0595411771d05', colors: this.palette, selectedColor: this.tool.color, isExpanded: this.isExpanded, isOpaque: true, onColorChange: color => this.handleColorChange(color) }), h("button", { key: 'd5b0d12188babdd26bbf97344cec60760b7c4f87', class: "expand-toggle", onClick: () => this.handleToggleExpand(), title: this.isExpanded ? 'Collapse' : 'Expand', style: this.palette.length > 6 ? { visibillity: 'visible' } : { visibility: 'hidden' } }, h("kritzel-icon", { key: 'e1beea772a60dda335a56815fa39609c37849769', name: this.isExpanded ? 'chevron-up' : 'chevron-down' }))), h("kritzel-stroke-size", { key: '8b31bac4e67752f55d2c2281b37a38e6fd801a57', selectedSize: this.tool.size, onSizeChange: event => this.handleSizeChange(event) })));
205
205
  }
206
206
  static get watchers() { return {
207
207
  "tool": ["handleToolChange"]
@@ -209,7 +209,7 @@ const KritzelControlBrushConfig = class {
209
209
  };
210
210
  KritzelControlBrushConfig.style = kritzelControlBrushConfigCss;
211
211
 
212
- const kritzelControlTextConfigCss = ":host{display:block;flex-direction:column;width:100%}.expand-toggle{background:none;border:none;cursor:pointer;font-size:14px;line-height:1;padding:8px;color:var(--kritzel-color-palette-expand-toggle-color, #666666)}.expand-toggle:hover{color:var(--kritzel-color-palette-expand-toggle-hover-color, #333333)}";
212
+ const kritzelControlTextConfigCss = ":host{display:block;flex-direction:column;width:100%}.expand-toggle{background:none;border:none;cursor:var(--kritzel-pointer-cursor, pointer);font-size:14px;line-height:1;padding:8px;color:var(--kritzel-color-palette-expand-toggle-color, #666666)}.expand-toggle:hover{color:var(--kritzel-color-palette-expand-toggle-hover-color, #333333)}";
213
213
 
214
214
  const KritzelControlTextConfig = class {
215
215
  constructor(hostRef) {
@@ -235,19 +235,19 @@ const KritzelControlTextConfig = class {
235
235
  this.toolChange.emit(this.tool);
236
236
  }
237
237
  render() {
238
- return (h(Host, { key: '82e611092700f057bd36823e7f7503fe7a0423ed' }, h("div", { key: '37ed39adeeeb58981a917918cd185e96d589e973', style: {
238
+ return (h(Host, { key: '172bfe742f7fcb7db080729ac9b07cfd7a2f3f86' }, h("div", { key: 'de4000668ebc8a0fb27d9ae9b817b68a5d3e69b0', style: {
239
239
  display: 'flex',
240
240
  flexDirection: 'row',
241
241
  alignItems: 'center',
242
242
  justifyContent: 'flex-start',
243
243
  width: '100%',
244
244
  gap: '8px',
245
- } }, h("kritzel-font-family", { key: 'cd8afc5c4a1eee087610cd3d5a6c05210cfda6b3', selectedFontFamily: this.tool.fontFamily, onFontFamilyChange: event => this.handleFamilyChange(event) }), h("button", { key: '085f1bba060bde27a7b64dc5477bb51305b76235', class: "expand-toggle", onClick: () => this.handleToggleExpand(), title: this.isExpanded ? 'Collapse' : 'Expand' }, h("kritzel-icon", { key: '3ff8fec207120e67f43315c6dace72fc2f6bd0f1', name: this.isExpanded ? 'chevron-up' : 'chevron-down' }))), h("kritzel-color-palette", { key: '2e29d01a6b5c0e4a8ec347e63b6a2698c282db40', colors: this.tool.palette, selectedColor: this.tool.fontColor, isExpanded: this.isExpanded, onColorChange: event => this.handleColorChange(event) }), h("kritzel-font-size", { key: 'c972068f1251d66e756b8de72fbdd1b6002d1daa', selectedSize: this.tool.fontSize, fontFamily: this.tool.fontFamily, onSizeChange: event => this.handleSizeChange(event) })));
245
+ } }, h("kritzel-font-family", { key: '4940703e315d0991d4eb2000f4e1a1da6e113cb2', selectedFontFamily: this.tool.fontFamily, onFontFamilyChange: event => this.handleFamilyChange(event) }), h("button", { key: '5a32fe373c1ce5cd312fa67e2b345fcc9eda81e5', class: "expand-toggle", onClick: () => this.handleToggleExpand(), title: this.isExpanded ? 'Collapse' : 'Expand' }, h("kritzel-icon", { key: '2dc5d0ed3d4bfe02e560e0d9b7fc487e343f56d9', name: this.isExpanded ? 'chevron-up' : 'chevron-down' }))), h("kritzel-color-palette", { key: 'c3cba9ef7408aa726954b649d76bd1ae40f0aec6', colors: this.tool.palette, selectedColor: this.tool.fontColor, isExpanded: this.isExpanded, onColorChange: event => this.handleColorChange(event) }), h("kritzel-font-size", { key: 'b9f879d5f2bcc4b92519235e6fc0a22195a30a8f', selectedSize: this.tool.fontSize, fontFamily: this.tool.fontFamily, onSizeChange: event => this.handleSizeChange(event) })));
246
246
  }
247
247
  };
248
248
  KritzelControlTextConfig.style = kritzelControlTextConfigCss;
249
249
 
250
- const kritzelControlsCss = ":host{display:flex;flex-direction:column;user-select:none}:host(.mobile){--kritzel-controls-control-hover-background-color:transparent;--kritzel-controls-control-active-background-color:transparent}.kritzel-controls{display:flex;flex-direction:row;align-items:center;justify-content:flex-start;gap:var(--kritzel-controls-gap, 8px);height:100%;padding:var(--kritzel-controls-padding, 8px);background-color:var(--kritzel-controls-background-color, #ffffff);border-radius:var(--kritzel-controls-border-radius, 16px);box-shadow:var(--kritzel-controls-box-shadow, 0 0 3px rgba(0, 0, 0, 0.08));border:var(--kritzel-controls-border, 1px solid #ebebeb);z-index:10000;position:relative}.kritzel-control{display:flex;justify-content:center;align-items:center;color:var(--kritzel-controls-control-color, #000000);border-radius:var(--kritzel-controls-control-border-radius, 12px);padding:var(--kritzel-controls-control-padding, 8px);border:none;background:none;cursor:pointer;-webkit-tap-highlight-color:transparent;font-weight:bold}.kritzel-control:focus,.kritzel-control:hover{background-color:var(--kritzel-controls-control-hover-background-color, hsl(0, 0%, 0%, 4.3%))}.kritzel-control:active{background-color:var(--kritzel-controls-control-active-background-color, hsl(0, 0%, 0%, 8.6%))}.kritzel-control.selected,.kritzel-control.selected:hover,.kritzel-control.selected:active{background-color:var(--kritzel-controls-control-selected-background-color, #007AFF) !important;color:var(--kritzel-controls-control-selected-color, #ffffff) !important}.kritzel-control.selected:focus{background-color:var(--kritzel-controls-control-selected-background-color, #007bffe3) !important}.kritzel-divider{width:var(--kritzel-controls-divider-width, 1px);height:var(--kritzel-controls-divider-height, 24px);background-color:var(--kritzel-controls-divider-background-color, hsl(0, 0%, 0%, 4.3%))}.kritzel-config-container{position:relative;display:flex;justify-content:center;align-items:center;width:40px;height:40px;box-sizing:border-box;-webkit-tap-highlight-color:transparent}.kritzel-config{display:flex;justify-content:center;align-items:center;cursor:pointer;border-radius:50%}.color-container{display:flex;justify-content:center;align-items:center;width:32px;height:32px;border-radius:50%;cursor:pointer;border:2px solid transparent;box-sizing:border-box;background-color:var(--kritzel-color-palette-hover-background-color, #ebebeb)}.font-container{display:flex;justify-content:center;align-items:center;width:32px;height:32px;border-radius:50%;cursor:pointer;border:2px solid transparent;box-sizing:border-box;background-color:var(--kritzel-color-palette-hover-background-color, #ebebeb)}.no-config{height:24px;width:24px;border-radius:50%;border:1px dashed gray}kritzel-tooltip{position:fixed;bottom:56px;left:50%;transform:translateX(-50%);z-index:10001}";
250
+ const kritzelControlsCss = ":host{display:flex;flex-direction:column;user-select:none}:host(.mobile){--kritzel-controls-control-hover-background-color:transparent;--kritzel-controls-control-active-background-color:transparent}.kritzel-controls{display:flex;flex-direction:row;align-items:center;justify-content:flex-start;gap:var(--kritzel-controls-gap, 8px);height:100%;padding:var(--kritzel-controls-padding, 8px);background-color:var(--kritzel-controls-background-color, #ffffff);border-radius:var(--kritzel-controls-border-radius, 16px);box-shadow:var(--kritzel-controls-box-shadow, 0 0 3px rgba(0, 0, 0, 0.08));border:var(--kritzel-controls-border, 1px solid #ebebeb);z-index:10000;position:relative}.kritzel-control{display:flex;justify-content:center;align-items:center;color:var(--kritzel-controls-control-color, #000000);border-radius:var(--kritzel-controls-control-border-radius, 12px);padding:var(--kritzel-controls-control-padding, 8px);border:none;background:none;cursor:var(--kritzel-pointer-cursor, pointer);-webkit-tap-highlight-color:transparent;font-weight:bold}.kritzel-control:focus,.kritzel-control:hover{background-color:var(--kritzel-controls-control-hover-background-color, hsl(0, 0%, 0%, 4.3%))}.kritzel-control:active{background-color:var(--kritzel-controls-control-active-background-color, hsl(0, 0%, 0%, 8.6%))}.kritzel-control.selected,.kritzel-control.selected:hover,.kritzel-control.selected:active{background-color:var(--kritzel-controls-control-selected-background-color, #007AFF) !important;color:var(--kritzel-controls-control-selected-color, #ffffff) !important}.kritzel-control.selected:focus{background-color:var(--kritzel-controls-control-selected-background-color, #007bffe3) !important}.kritzel-divider{width:var(--kritzel-controls-divider-width, 1px);height:var(--kritzel-controls-divider-height, 24px);background-color:var(--kritzel-controls-divider-background-color, hsl(0, 0%, 0%, 4.3%))}.kritzel-config-container{position:relative;display:flex;justify-content:center;align-items:center;width:40px;height:40px;box-sizing:border-box;-webkit-tap-highlight-color:transparent}.kritzel-config{display:flex;justify-content:center;align-items:center;cursor:var(--kritzel-pointer-cursor, pointer);border-radius:50%}.color-container{display:flex;justify-content:center;align-items:center;width:32px;height:32px;border-radius:50%;cursor:var(--kritzel-pointer-cursor, pointer);border:2px solid transparent;box-sizing:border-box;background-color:var(--kritzel-color-palette-hover-background-color, #ebebeb)}.font-container{display:flex;justify-content:center;align-items:center;width:32px;height:32px;border-radius:50%;cursor:var(--kritzel-pointer-cursor, pointer);border:2px solid transparent;box-sizing:border-box;background-color:var(--kritzel-color-palette-hover-background-color, #ebebeb)}.no-config{height:24px;width:24px;border-radius:50%;border:1px dashed gray}kritzel-tooltip{position:fixed;bottom:56px;left:50%;transform:translateX(-50%);z-index:10001}";
251
251
 
252
252
  const KritzelControls = class {
253
253
  constructor(hostRef) {
@@ -351,13 +351,13 @@ const KritzelControls = class {
351
351
  }
352
352
  render() {
353
353
  const hasNoConfig = this.activeControl?.config === undefined || this.activeControl?.config === null;
354
- return (h(Host, { key: '6ea9de8d541e3fc02c5ceeebf4c2c5fb4d8ad926', class: {
354
+ return (h(Host, { key: 'c01351cbf438f2e36249b2ef3ef8725edcabd57b', class: {
355
355
  mobile: this.isTouchDevice,
356
- } }, this.isUtilityPanelVisible && (h("kritzel-utility-panel", { key: '7506b42f05c3f49aa5c936d267c5de44b3ebb9cd', style: {
356
+ } }, this.isUtilityPanelVisible && (h("kritzel-utility-panel", { key: '3c14cf25dd51f123dc8d33be92992e2f2c18ac40', style: {
357
357
  position: 'absolute',
358
358
  bottom: '56px',
359
359
  left: '12px',
360
- }, undoState: this.undoState, onUndo: () => this.kritzelEngine?.undo(), onRedo: () => this.kritzelEngine?.redo(), onDelete: () => this.kritzelEngine?.delete() })), h("div", { key: '1299fce4adea3f9a529bbaf73d35e2676b6850e4', class: "kritzel-controls" }, this.controls.map(control => {
360
+ }, undoState: this.undoState, onUndo: () => this.kritzelEngine?.undo(), onRedo: () => this.kritzelEngine?.redo(), onDelete: () => this.kritzelEngine?.delete() })), h("div", { key: '05719acfe12d1770bf49fb7d9989619f2e27ee0f', class: "kritzel-controls" }, this.controls.map(control => {
361
361
  if (control.type === 'tool') {
362
362
  return (h("button", { class: {
363
363
  'kritzel-control': true,
@@ -454,7 +454,7 @@ const KritzelCursorTrail = class {
454
454
  }
455
455
  }
456
456
  render() {
457
- return (h(Host, { key: '10ef620f19d72a8a5c3a12d0d98686bc69308a30' }, this.cursorTrailPoints.length > 1 && (h("svg", { key: 'd03403051e53422aaa28d6360aaa9c0391e3ef6a', class: "cursor-trail-svg", xmlns: "http://www.w3.org/2000/svg", style: {
457
+ return (h(Host, { key: '2bbe2e331555476316c4460ff64fae7a955eee3d' }, this.cursorTrailPoints.length > 1 && (h("svg", { key: '78a354686ff624afba1a3c31df02dbefaf295d4b', class: "cursor-trail-svg", xmlns: "http://www.w3.org/2000/svg", style: {
458
458
  position: 'absolute',
459
459
  left: '0',
460
460
  top: '0',
@@ -477,7 +477,7 @@ const KritzelCursorTrail = class {
477
477
  };
478
478
  KritzelCursorTrail.style = kritzelCursorTrailCss;
479
479
 
480
- const kritzelDropdownCss = ":host{display:inline-flex;vertical-align:middle;width:100%;}.dropdown-wrapper{display:flex;align-items:center;border:1px solid #333333;border-radius:var(--kritzel-controls-control-border-radius, 12px);overflow:hidden;height:32px;width:100%}.custom-select{padding:0 8px;padding-right:30px;height:100%;width:100%;box-sizing:border-box;border-radius:0;border:none;background-color:#fff;cursor:pointer;outline:none;font-size:inherit;color:var(--kritzel-controls-text-color, #333333);-webkit-tap-highlight-color:transparent;-webkit-appearance:none;-moz-appearance:none;appearance:none;background-image:url('data:image/svg+xml;utf8,<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"%23333333\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><polyline points=\"6 9 12 15 18 9\"/></svg>');background-size:16px 16px;background-repeat:no-repeat;background-position:right 8px center}.custom-select.has-suffix-border{border-right:1px solid #333333}.custom-select.has-prefix-border{border-left:1px solid #333333}::slotted(*){height:100%;box-sizing:border-box}";
480
+ const kritzelDropdownCss = ":host{display:inline-flex;vertical-align:middle;width:100%;}.dropdown-wrapper{display:flex;align-items:center;border:1px solid #333333;border-radius:var(--kritzel-controls-control-border-radius, 12px);overflow:hidden;height:32px;width:100%}.custom-select{padding:0 8px;padding-right:30px;height:100%;width:100%;box-sizing:border-box;border-radius:0;border:none;background-color:#fff;cursor:var(--kritzel-pointer-cursor, pointer);outline:none;font-size:inherit;color:var(--kritzel-controls-text-color, #333333);-webkit-tap-highlight-color:transparent;-webkit-appearance:none;-moz-appearance:none;appearance:none;background-image:url('data:image/svg+xml;utf8,<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"%23333333\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><polyline points=\"6 9 12 15 18 9\"/></svg>');background-size:16px 16px;background-repeat:no-repeat;background-position:right 8px center}.custom-select.has-suffix-border{border-right:1px solid #333333}.custom-select.has-prefix-border{border-left:1px solid #333333}::slotted(*){height:100%;box-sizing:border-box}";
481
481
 
482
482
  const KritzelDropdown = class {
483
483
  constructor(hostRef) {
@@ -573,53 +573,6 @@ const KritzelDropdown = class {
573
573
  };
574
574
  KritzelDropdown.style = kritzelDropdownCss;
575
575
 
576
- class KritzelIconRegistry {
577
- static registry = new Map();
578
- static register(name, svgContent) {
579
- if (this.registry.has(name)) {
580
- console.warn(`[IconRegistry] Icon "${name}" is already registered. It will be overwritten.`);
581
- }
582
- this.registry.set(name, svgContent);
583
- }
584
- static get(name) {
585
- return this.registry.get(name);
586
- }
587
- static registerIcons(icons) {
588
- for (const name in icons) {
589
- if (Object.prototype.hasOwnProperty.call(icons, name)) {
590
- this.register(name, icons[name]);
591
- }
592
- }
593
- }
594
- static has(name) {
595
- return this.registry.has(name);
596
- }
597
- }
598
- KritzelIconRegistry.registerIcons({
599
- '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>',
600
- '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>',
601
- '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>',
602
- '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>',
603
- '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>',
604
- '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>',
605
- '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>',
606
- '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>',
607
- '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>',
608
- '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>',
609
- '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>',
610
- '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>',
611
- '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>',
612
- '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>',
613
- '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>',
614
- '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>',
615
- '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>',
616
- '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>',
617
- '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>',
618
- '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>',
619
- '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>',
620
- '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>'
621
- });
622
-
623
576
  const ABSOLUTE_SCALE_MAX = 1000;
624
577
  const ABSOLUTE_SCALE_MIN = 0.0001;
625
578
 
@@ -849,7 +802,7 @@ const KritzelEditor = class {
849
802
  }
850
803
  }
851
804
  render() {
852
- return (h(Host, { key: '87983fe2d4fcdbf226851190e7529f12e7b5fdbf' }, h("kritzel-workspace-manager", { key: 'a1e0f522a7075ef4e2b5eab47dab5dc77098b402', workspaces: this.workspaces, activeWorkspace: this.activeWorkspace, onWorkspaceChange: event => (this.activeWorkspace = event.detail), onIsWorkspaceManagerReady: () => (this.isWorkspaceManagerReady = true) }), h("kritzel-engine", { key: '18e78080712e53ead39ff07e43b7035e43a096f2', ref: el => (this.engineRef = el), workspace: this.activeWorkspace, syncConfig: this.syncConfig, scaleMax: this.scaleMax, scaleMin: this.scaleMin, globalContextMenuItems: this.globalContextMenuItems, objectContextMenuItems: this.objectContextMenuItems, onIsEngineReady: event => this.onEngineReady(event), onWorkspacesChange: event => this.handleWorkspacesChange(event), onObjectsChange: event => this.handleObjectsChange(event), onUndoStateChange: event => this.handleUndoStateChange(event) }), h("kritzel-controls", { key: '5ffaebbbeecbeebab050b3f990d027c6653a1940', class: { 'keyboard-open': this.isVirtualKeyboardOpen }, style: { display: this.isControlsVisible ? 'flex' : 'none' }, ref: el => (this.controlsRef = el), controls: this.controls, isUtilityPanelVisible: this.isUtilityPanelVisible, undoState: this.undoState, onIsControlsReady: () => (this.isControlsReady = true) })));
805
+ return (h(Host, { key: 'c824014ce85ef5c94436211df5241d23f11caed4' }, h("kritzel-workspace-manager", { key: '8ce43afa37896897674b5df943bef3fe1ffba32b', workspaces: this.workspaces, activeWorkspace: this.activeWorkspace, onWorkspaceChange: event => (this.activeWorkspace = event.detail), onIsWorkspaceManagerReady: () => (this.isWorkspaceManagerReady = true) }), h("kritzel-engine", { key: '12f80313bb145d9065a6222d5a8b503f0eca177a', ref: el => (this.engineRef = el), workspace: this.activeWorkspace, syncConfig: this.syncConfig, scaleMax: this.scaleMax, scaleMin: this.scaleMin, globalContextMenuItems: this.globalContextMenuItems, objectContextMenuItems: this.objectContextMenuItems, onIsEngineReady: event => this.onEngineReady(event), onWorkspacesChange: event => this.handleWorkspacesChange(event), onObjectsChange: event => this.handleObjectsChange(event), onUndoStateChange: event => this.handleUndoStateChange(event) }), h("kritzel-controls", { key: '0a1e63580afcbe65e5cf42833d86c3b34bb686c7', class: { 'keyboard-open': this.isVirtualKeyboardOpen }, style: { display: this.isControlsVisible ? 'flex' : 'none' }, ref: el => (this.controlsRef = el), controls: this.controls, isUtilityPanelVisible: this.isUtilityPanelVisible, undoState: this.undoState, onIsControlsReady: () => (this.isControlsReady = true) })));
853
806
  }
854
807
  static get watchers() { return {
855
808
  "isEngineReady": ["onIsEngineReady"],
@@ -18392,8 +18345,10 @@ const DEFAULT_ENGINE_CONFIG = {
18392
18345
  isPanning: false,
18393
18346
  isSelecting: false,
18394
18347
  isResizing: false,
18348
+ isResizeHandleHovered: false,
18395
18349
  isResizeHandleSelected: false,
18396
18350
  isRotating: false,
18351
+ isRotationHandleHovered: false,
18397
18352
  isRotationHandleSelected: false,
18398
18353
  isDragging: false,
18399
18354
  isDrawing: false,
@@ -18429,6 +18384,10 @@ const DEFAULT_ENGINE_CONFIG = {
18429
18384
  longTouchDelay: 300,
18430
18385
  pointers: new Map(),
18431
18386
  workspaces: [],
18387
+ cursor: {
18388
+ icon: 'default',
18389
+ iconActive: 'default'
18390
+ }
18432
18391
  };
18433
18392
 
18434
18393
  class KritzelCustomElement extends KritzelBaseObject {
@@ -19023,6 +18982,9 @@ class KritzelStore {
19023
18982
  get isDisabled() {
19024
18983
  return this._state.isEnabled === false || this._state.isReady === false || this._state.activeWorkspace === null;
19025
18984
  }
18985
+ get isPointerDown() {
18986
+ return this._state.pointers.size > 0;
18987
+ }
19026
18988
  constructor(state) {
19027
18989
  this._state = state;
19028
18990
  this._state.objects = new KritzelObjectMap();
@@ -19507,7 +19469,7 @@ class KritzelCore {
19507
19469
  }
19508
19470
  }
19509
19471
 
19510
- const kritzelEngineCss = ":host{display:block;position:relative;height:100%;width:100%;overflow:hidden;background-color:var(--kritzel-engine-background-color, #ffffff)}:host,:host *{touch-action:none;user-select:none}.ProseMirror{outline:none}p,h1,h2,h3,h4,h5,h6,blockquote,pre{margin:0;padding:0}.debug-panel{position:absolute;pointer-events:none;top:0;right:0}.origin{position:relative;top:0;left:0;height:0;width:0;pointer-events:none;-webkit-transform-origin:top left;-moz-transform-origin:top left;transform-origin:top left;overflow:visible}.object{overflow:visible}.resize-handle-overlay.top-left,.resize-handle-overlay.bottom-right{cursor:nwse-resize}.resize-handle-overlay.top-right,.resize-handle-overlay.bottom-left{cursor:nesw-resize}.rotation-handle-overlay{cursor:grab}.PlaygroundEditorTheme__quote{margin:0;margin-left:20px;margin-bottom:10px;font-size:15px;color:rgb(101, 103, 107);border-left-color:rgb(206, 208, 212);border-left-width:4px;border-left-style:solid;padding-left:16px}";
19472
+ const kritzelEngineCss = ":host{display:block;position:relative;height:100%;width:100%;overflow:hidden;background-color:var(--kritzel-engine-background-color, #ffffff)}:host,:host *{touch-action:none;user-select:none}.ProseMirror{outline:none}p,h1,h2,h3,h4,h5,h6,blockquote,pre{margin:0;padding:0}.debug-panel{position:absolute;pointer-events:none;top:0;right:0}.origin{position:relative;top:0;left:0;height:0;width:0;pointer-events:none;-webkit-transform-origin:top left;-moz-transform-origin:top left;transform-origin:top left;overflow:visible}.object{overflow:visible}.PlaygroundEditorTheme__quote{margin:0;margin-left:20px;margin-bottom:10px;font-size:15px;color:rgb(101, 103, 107);border-left-color:rgb(206, 208, 212);border-left-width:4px;border-left-style:solid;padding-left:16px}";
19511
19473
 
19512
19474
  const KritzelEngine = class {
19513
19475
  get host() { return getElement(this); }
@@ -19546,6 +19508,15 @@ const KritzelEngine = class {
19546
19508
  this.core.store.state.scaleMin = newValue;
19547
19509
  }
19548
19510
  }
19511
+ cursorTarget;
19512
+ onCursorTargetChange(newValue) {
19513
+ // Reset cursor on old target
19514
+ if (this.cursorTargetElement) {
19515
+ this.cursorTargetElement.style.cursor = '';
19516
+ }
19517
+ // Set new target (defaults to document.body)
19518
+ this.cursorTargetElement = newValue || document.body;
19519
+ }
19549
19520
  isEngineReady;
19550
19521
  activeToolChange;
19551
19522
  workspacesChange;
@@ -19586,7 +19557,9 @@ const KritzelEngine = class {
19586
19557
  if (this.core.store.isDisabled) {
19587
19558
  return;
19588
19559
  }
19589
- this.core.store.state.pointers.set(ev.pointerId, ev);
19560
+ if (this.core.store.state.pointers.has(ev.pointerId)) {
19561
+ this.core.store.state.pointers.set(ev.pointerId, ev);
19562
+ }
19590
19563
  if (this.core.store.state.pointers.size > 1) {
19591
19564
  this.throttledPointerMoveMulti(ev);
19592
19565
  }
@@ -19599,6 +19572,10 @@ const KritzelEngine = class {
19599
19572
  }
19600
19573
  this.core.store.state.pointers.delete(ev.pointerId);
19601
19574
  this.host.releasePointerCapture(ev.pointerId);
19575
+ // Reset cursor to default when all pointers are released
19576
+ if (this.core.store.state.pointers.size === 0) {
19577
+ this.core.store.state.cursor = { icon: 'default', iconActive: 'default' };
19578
+ }
19602
19579
  this.viewport.handlePointerUp(ev);
19603
19580
  this.core.store.state?.activeTool?.handlePointerUp(ev);
19604
19581
  }
@@ -19608,6 +19585,10 @@ const KritzelEngine = class {
19608
19585
  }
19609
19586
  this.host.releasePointerCapture(ev.pointerId);
19610
19587
  this.core.store.state.pointers.delete(ev.pointerId);
19588
+ // Reset cursor to default when all pointers are released
19589
+ if (this.core.store.state.pointers.size === 0) {
19590
+ this.core.store.state.cursor = { icon: 'default', iconActive: 'default' };
19591
+ }
19611
19592
  this.viewport.handlePointerUp(ev);
19612
19593
  this.core.store.state?.activeTool?.handlePointerUp(ev);
19613
19594
  }
@@ -19782,6 +19763,7 @@ const KritzelEngine = class {
19782
19763
  contextMenuHandler;
19783
19764
  keyHandler;
19784
19765
  contextMenuElement = null;
19766
+ cursorTargetElement = null;
19785
19767
  get isSelecting() {
19786
19768
  return this.core.store.state.activeTool instanceof KritzelSelectionTool && this.core.store.state.isSelecting;
19787
19769
  }
@@ -19801,6 +19783,12 @@ const KritzelEngine = class {
19801
19783
  disconnectedCallback() {
19802
19784
  this.throttledWheel.cancel();
19803
19785
  this.throttledPointerMoveMulti.cancel();
19786
+ // Reset cursor on target element
19787
+ if (this.cursorTargetElement) {
19788
+ this.cursorTargetElement.style.cursor = '';
19789
+ this.cursorTargetElement.style.removeProperty('--kritzel-pointer-cursor');
19790
+ this.cursorTargetElement = null;
19791
+ }
19804
19792
  }
19805
19793
  componentWillLoad() {
19806
19794
  this.validateScaleMax(this.scaleMax);
@@ -19810,6 +19798,10 @@ const KritzelEngine = class {
19810
19798
  this.contextMenuHandler = new KritzelContextMenuHandler(this.core, this.globalContextMenuItems, this.objectContextMenuItems);
19811
19799
  this.keyHandler = new KritzelKeyHandler(this.core);
19812
19800
  this.viewport = new KritzelViewport(this.core, this.host);
19801
+ // Set cursor target element (use prop value or default to document.body)
19802
+ this.cursorTargetElement = this.cursorTarget || document.body;
19803
+ // Set the pointer cursor CSS variable for child components to use
19804
+ this.cursorTargetElement.style.setProperty('--kritzel-pointer-cursor', KritzelCursorHelper.getPointerCursor());
19813
19805
  // Set sync configuration if provided
19814
19806
  if (this.syncConfig) {
19815
19807
  this.core.setSyncConfig(this.syncConfig);
@@ -19851,6 +19843,20 @@ const KritzelEngine = class {
19851
19843
  KritzelKeyboardHelper.forceHideKeyboard();
19852
19844
  this.core.rerender();
19853
19845
  }
19846
+ updateCursor() {
19847
+ const state = this.core.store.state;
19848
+ const isPointerDown = this.core.store.isPointerDown;
19849
+ const icon = state.cursor?.icon;
19850
+ const iconActive = state.cursor?.iconActive ?? icon;
19851
+ const rotation = state.cursor?.rotation;
19852
+ const cursor = KritzelCursorHelper.getCursor({
19853
+ iconName: isPointerDown ? iconActive : icon,
19854
+ rotation: rotation,
19855
+ });
19856
+ if (this.cursorTargetElement) {
19857
+ this.cursorTargetElement.style.cursor = cursor;
19858
+ }
19859
+ }
19854
19860
  render() {
19855
19861
  const computedStyle = window.getComputedStyle(this.host);
19856
19862
  const baseHandleSizePx = computedStyle.getPropertyValue('--kritzel-selection-handle-size').trim() || '6px';
@@ -19867,7 +19873,8 @@ const KritzelEngine = class {
19867
19873
  depth: 100,
19868
19874
  };
19869
19875
  const visibleObjects = this.core.store.state.objects.query(viewportBounds);
19870
- 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: {
19876
+ this.updateCursor();
19877
+ 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: {
19871
19878
  transform: `matrix(${this.core.store.state?.scale}, 0, 0, ${this.core.store.state?.scale}, ${this.core.store.state?.translateX}, ${this.core.store.state?.translateY})`,
19872
19879
  } }, visibleObjects?.map(object => {
19873
19880
  return (h("div", { key: object.id, style: {
@@ -19965,25 +19972,25 @@ const KritzelEngine = class {
19965
19972
  } }), h("circle", { class: "resize-handle-overlay top-left", cx: "0", cy: "0", r: `${(baseHandleTouchSize * object.scale) / this.core.store.state?.scale}`, style: {
19966
19973
  fill: 'transparent',
19967
19974
  paintOrder: 'fill',
19968
- } }), h("circle", { class: "resize-handle top-right", cx: object.totalWidth, cy: "0", r: `${(baseHandleSize * object.scale) / this.core.store.state?.scale}`, style: {
19975
+ }, 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: {
19969
19976
  fill: 'var(--kritzel-selection-handle-color, #000000)',
19970
19977
  paintOrder: 'fill',
19971
19978
  } }), h("circle", { class: "resize-handle-overlay top-right", cx: object.totalWidth, cy: "0", r: `${(baseHandleTouchSize * object.scale) / this.core.store.state?.scale}`, style: {
19972
19979
  fill: 'transparent',
19973
19980
  paintOrder: 'fill',
19974
- } }), h("circle", { class: "resize-handle bottom-left", cx: "0", cy: object.totalHeight, r: `${(baseHandleSize * object.scale) / this.core.store.state?.scale}`, style: {
19981
+ }, 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: {
19975
19982
  fill: 'var(--kritzel-selection-handle-color, #000000)',
19976
19983
  paintOrder: 'fill',
19977
19984
  } }), h("circle", { class: "resize-handle-overlay bottom-left", cx: "0", cy: object.totalHeight, r: `${(baseHandleTouchSize * object.scale) / this.core.store.state?.scale}`, style: {
19978
19985
  fill: 'transparent',
19979
19986
  paintOrder: 'fill',
19980
- } }), h("circle", { class: "resize-handle bottom-right", cx: object.totalWidth, cy: object.totalHeight, r: `${(baseHandleSize * object.scale) / this.core.store.state?.scale}`, style: {
19987
+ }, 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: {
19981
19988
  fill: 'var(--kritzel-selection-handle-color, #000000)',
19982
19989
  paintOrder: 'fill',
19983
19990
  } }), h("circle", { class: "resize-handle-overlay bottom-right", cx: object.totalWidth, cy: object.totalHeight, r: `${(baseHandleTouchSize * object.scale) / this.core.store.state?.scale}`, style: {
19984
19991
  fill: 'transparent',
19985
19992
  paintOrder: 'fill',
19986
- } }), h("line", { x1: object.totalWidth / 2, y1: "0", x2: object.totalWidth / 2, y2: -((15 * object.scale) / this.core.store.state?.scale), style: {
19993
+ }, 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: {
19987
19994
  stroke: 'var(--kritzel-selection-border-color, #007AFF)',
19988
19995
  strokeWidth: `calc(var(--kritzel-selection-border-width, 2px) * ${object.scale} / ${this.core.store.state?.scale})`,
19989
19996
  } }), 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: {
@@ -19991,10 +19998,9 @@ const KritzelEngine = class {
19991
19998
  paintOrder: 'fill',
19992
19999
  } }), 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: {
19993
20000
  fill: 'transparent',
19994
- cursor: 'grab',
19995
20001
  paintOrder: 'fill',
19996
- } }))))));
19997
- })), 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: {
20002
+ }, 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' }) }))))));
20003
+ })), 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: {
19998
20004
  position: 'fixed',
19999
20005
  left: `${this.core.store.state.contextMenuX}px`,
20000
20006
  top: `${this.core.store.state.contextMenuY}px`,
@@ -20005,12 +20011,13 @@ const KritzelEngine = class {
20005
20011
  y: (-this.core.store.state.translateY + this.core.store.state.contextMenuY) / this.core.store.state.scale,
20006
20012
  }, this.core.store.selectionGroup?.objects);
20007
20013
  this.hideContextMenu();
20008
- }, onClose: () => this.hideContextMenu() })), this.core.store.state?.activeTool instanceof KritzelEraserTool && !this.core.store.state.isScaling && h("kritzel-cursor-trail", { key: '7d199fcf652dee0cd12fff8a558b455c361e019f', core: this.core })));
20014
+ }, onClose: () => this.hideContextMenu() })), this.core.store.state?.activeTool instanceof KritzelEraserTool && !this.core.store.state.isScaling && h("kritzel-cursor-trail", { key: '609dd8438a2678eaa3ce0a73858d9236c9371f96', core: this.core })));
20009
20015
  }
20010
20016
  static get watchers() { return {
20011
20017
  "workspace": ["onWorkspaceChange"],
20012
20018
  "scaleMax": ["validateScaleMax"],
20013
- "scaleMin": ["validateScaleMin"]
20019
+ "scaleMin": ["validateScaleMin"],
20020
+ "cursorTarget": ["onCursorTargetChange"]
20014
20021
  }; }
20015
20022
  };
20016
20023
  KritzelEngine.style = kritzelEngineCss;
@@ -20025,7 +20032,7 @@ const KritzelFont = class {
20025
20032
  size = 24;
20026
20033
  color = '#000000';
20027
20034
  render() {
20028
- return (h(Host, { key: '0a6f1d1326e9dde84a4122d79f75dc1c75ffe0fb' }, h("div", { key: '88a342d01c4150cd4fc5dacca23f7b9904edca52', class: "font-preview", style: {
20035
+ return (h(Host, { key: '23b744f73bf860a53c554ade7d3e9d3eb281caac' }, h("div", { key: '7bfc9dadff6ccfbdf3990830423f92eff8580a54', class: "font-preview", style: {
20029
20036
  fontFamily: this.fontFamily,
20030
20037
  fontSize: `${this.size}px`,
20031
20038
  color: this.color
@@ -20034,7 +20041,7 @@ const KritzelFont = class {
20034
20041
  };
20035
20042
  KritzelFont.style = kritzelFontCss;
20036
20043
 
20037
- const kritzelFontFamilyCss = ":host{display:flex;align-items:flex-start;gap:8px;padding:8px;box-sizing:border-box;width:100%}.font-style-button{display:flex;justify-content:center;align-items:center;width:42px;height:32px;padding:0;border:none;outline:none;background:none;cursor:pointer;border-radius:0;color:var(--control-text-color);font-weight:bold;-webkit-tap-highlight-color:transparent}.font-style-button:not(:last-child){border-right:1px solid #333333}.font-style-button:hover{background-color:var(--control-hover-bg)}.font-style-button:active{background-color:var(--control-active-bg)}.font-style-button.selected,.font-style-button.selected:hover,.font-style-button.selected:active{background-color:var(--control-selected-bg);color:var(--control-selected-color)}.font-style-button.italic-text{font-style:italic}";
20044
+ const kritzelFontFamilyCss = ":host{display:flex;align-items:flex-start;gap:8px;padding:8px;box-sizing:border-box;width:100%}.font-style-button{display:flex;justify-content:center;align-items:center;width:42px;height:32px;padding:0;border:none;outline:none;background:none;cursor:var(--kritzel-pointer-cursor, pointer);border-radius:0;color:var(--control-text-color);font-weight:bold;-webkit-tap-highlight-color:transparent}.font-style-button:not(:last-child){border-right:1px solid #333333}.font-style-button:hover{background-color:var(--control-hover-bg)}.font-style-button:active{background-color:var(--control-active-bg)}.font-style-button.selected,.font-style-button.selected:hover,.font-style-button.selected:active{background-color:var(--control-selected-bg);color:var(--control-selected-color)}.font-style-button.italic-text{font-style:italic}";
20038
20045
 
20039
20046
  const KritzelFontFamily = class {
20040
20047
  constructor(hostRef) {
@@ -20072,12 +20079,12 @@ const KritzelFontFamily = class {
20072
20079
  label: option.label,
20073
20080
  style: { fontFamily: option.value },
20074
20081
  }));
20075
- return (h(Host, { key: '27d14ddb4a57b9cd7b936047b6ea6a9251a1ab27' }, h("kritzel-dropdown", { key: '20ea042c9a907dc1ac5e16a589a8856f87389e36', options: dropdownOptions, value: this.selectedFontFamily, onValueChanged: this.handleDropdownValueChange, selectStyles: { fontFamily: this.selectedFontFamily } }, h("button", { key: 'f63fed16477a327aadaeb54feefe35df1780e37d', class: "font-style-button", slot: "suffix" }, "B"), h("button", { key: '13b3089606c2e83b256ed2cec6513a9911016754', class: "font-style-button italic-text", slot: "suffix" }, "I"))));
20082
+ return (h(Host, { key: '5c31315857fa29e0d7c3dac2b7911a244467a052' }, h("kritzel-dropdown", { key: '05abce1f973cd49ef8c7ddc198545ec63d6ac249', options: dropdownOptions, value: this.selectedFontFamily, onValueChanged: this.handleDropdownValueChange, selectStyles: { fontFamily: this.selectedFontFamily } }, h("button", { key: 'd5c99c0277eeb40f7a0ce29ffb013768125d7fd2', class: "font-style-button", slot: "suffix" }, "B"), h("button", { key: 'db9348b72cd65b047994dba6c898bf6517d0358b', class: "font-style-button italic-text", slot: "suffix" }, "I"))));
20076
20083
  }
20077
20084
  };
20078
20085
  KritzelFontFamily.style = kritzelFontFamilyCss;
20079
20086
 
20080
- const kritzelFontSizeCss = ":host{display:flex;align-items:flex-start;gap:8px;padding:8px;box-sizing:border-box}.size-container{display:flex;justify-content:center;align-items:center;width:32px;height:32px;border-radius:4px;cursor:pointer;border:2px solid transparent;box-sizing:border-box;border-radius:50%}.size-container:hover{background-color:var(--kritzel-font-size-hover-background-color, #ebebeb)}.size-container.selected{border-color:var(--kritzel-selection-border-color, #007AFF);background-color:var(--kritzel-font-size-selected-background-color, #e0e0e0)}";
20087
+ const kritzelFontSizeCss = ":host{display:flex;align-items:flex-start;gap:8px;padding:8px;box-sizing:border-box}.size-container{display:flex;justify-content:center;align-items:center;width:32px;height:32px;border-radius:4px;cursor:var(--kritzel-pointer-cursor, pointer);border:2px solid transparent;box-sizing:border-box;border-radius:50%}.size-container:hover{background-color:var(--kritzel-font-size-hover-background-color, #ebebeb)}.size-container.selected{border-color:var(--kritzel-selection-border-color, #007AFF);background-color:var(--kritzel-font-size-selected-background-color, #e0e0e0)}";
20081
20088
 
20082
20089
  const KritzelFontSize = class {
20083
20090
  constructor(hostRef) {
@@ -20093,7 +20100,7 @@ const KritzelFontSize = class {
20093
20100
  this.sizeChange.emit(size);
20094
20101
  }
20095
20102
  render() {
20096
- return (h(Host, { key: '9f3d851d443352f7437116cf91eff8d8de41e322' }, this.sizes.map(size => (h("div", { class: {
20103
+ return (h(Host, { key: 'd20034d67eb857065dca11d96074fdf4234c0ef4' }, this.sizes.map(size => (h("div", { class: {
20097
20104
  'size-container': true,
20098
20105
  'selected': this.selectedSize === size,
20099
20106
  }, onClick: () => this.handleSizeClick(size) }, h("kritzel-font", { fontFamily: this.fontFamily, size: size }))))));
@@ -20188,12 +20195,12 @@ const KritzelMenu = class {
20188
20195
  this.itemCloseChildMenu.emit(event.detail);
20189
20196
  };
20190
20197
  render() {
20191
- return (h(Host, { key: 'be122cb0ecff3227d9e69997de76a73940a61860', tabIndex: 0, onClick: e => e.stopPropagation() }, this.openChildMenuItem && h("div", { key: 'ae10bec61e5c5e1a29b444cb7378f15c6692f3b6', class: "has-open-child-overlay", onClick: this.onOverlayClick }), this.items.map(item => (h("kritzel-menu-item", { key: item.id, item: item, parent: this.parent, style: { pointerEvents: this.editingMenuItem && !item.isEditing ? 'none' : 'auto' }, onItemSelect: this.handleItemSelect, onItemSave: this.handleSave, onItemCancel: this.handleCancel, onItemToggleChildMenu: this.handleToggleChildMenu, onItemCloseChildMenu: this.handleCloseChildMenu })))));
20198
+ return (h(Host, { key: 'c4b9a602cefcbd0a100f5f1c4a273220d59ead17', tabIndex: 0, onClick: e => e.stopPropagation() }, this.openChildMenuItem && h("div", { key: '530ce19ac1aada15260ac5ed2c95c20b202bb94a', class: "has-open-child-overlay", onClick: this.onOverlayClick }), this.items.map(item => (h("kritzel-menu-item", { key: item.id, item: item, parent: this.parent, style: { pointerEvents: this.editingMenuItem && !item.isEditing ? 'none' : 'auto' }, onItemSelect: this.handleItemSelect, onItemSave: this.handleSave, onItemCancel: this.handleCancel, onItemToggleChildMenu: this.handleToggleChildMenu, onItemCloseChildMenu: this.handleCloseChildMenu })))));
20192
20199
  }
20193
20200
  };
20194
20201
  KritzelMenu.style = kritzelMenuCss;
20195
20202
 
20196
- const kritzelMenuItemCss = ":host{position:relative;display:flex;align-items:center;justify-content:space-between;width:100%;padding:var(--kritzel-menu-item-padding, 8px);box-sizing:border-box;gap:16px;height:var(--kritzel-menu-item-height, 40px);min-height:var(--kritzel-menu-item-min-height, 40px);font-family:sans-serif;font-size:var(--kritzel-menu-item-font-size, 14px);color:var(--kritzel-menu-item-color, #333333);border-radius:var(--kritzel-menu-item-border-radius, 12px);cursor:default}:host(:hover) .menu-item-overlay,:host(:focus-within) .menu-item-overlay{background-color:var(--kritzel-menu-item-overlay-background-color, hsl(0, 0%, 0%, 4.3%))}:host(.selected){background-color:var(--kritzel-menu-item-selected-bg, #007aff);color:var(--kritzel-menu-item-selected-color, #ffffff)}:host(.selected) .action-button{color:var(--kritzel-menu-item-selected-color, #ffffff)}:host(.selected.editing){background-color:var(--kritzel-menu-item-selected-bg, #007aff)}:host(.selected) .edit-input{color:var(--kritzel-menu-item-selected-color, #ffffff)}:host(.selected) .action-button kritzel-icon{--kritzel-icon-color:var(--kritzel-menu-item-selected-color, #ffffff)}kritzel-icon{--kritzel-icon-color:var(--kritzel-menu-item-color, #333333)}:host(.selected) .edit-input::selection{background-color:var(--kritzel-menu-item-input-selection-color, rgba(255, 255, 255, 0.16))}:host(.editing){background-color:var(--kritzel-menu-item-editing-background-color, hsl(0, 0%, 0%, 4.3%))}:host(.disabled){opacity:0.5;pointer-events:none !important}:host(.child-open){background-color:var(--kritzel-menu-item-child-open-background-color, hsl(0, 0%, 0%, 4.3%))}:host(.child-open.selected){background-color:var(--kritzel-menu-item-selected-bg, #007aff)}.menu-item-overlay{position:absolute;inset:0;background-color:transparent;z-index:0;pointer-events:none;border-radius:var(--kritzel-menu-item-border-radius, 12px)}.menu-item-content{display:flex;align-items:center;gap:8px;position:relative;z-index:1;height:100%}.left{justify-content:flex-start;flex:1;min-width:0}.left>div{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.right{justify-content:flex-end}.edit-input{flex:1;height:var(--kritzel-menu-item-input-height, 24px);padding:0;background-color:transparent;border-radius:0;border:none;border-bottom:1px solid var(--kritzel-menu-item-input-border, #ccc);font-size:var(--kritzel-context-menu-item-font-size, 14px);width:100%;min-width:0;box-sizing:border-box;outline:none}.edit-input::selection{background-color:var(--kritzel-menu-item-input-selection-color, #007bff);color:var(--kritzel-menu-item-input-selection-text-color, #ffffff)}.action-button{padding:4px;border-radius:8px;border:none;cursor:pointer;display:flex;align-items:center;justify-content:center;background-color:transparent;background:transparent;-webkit-tap-highlight-color:transparent}.action-button:hover,.action-button:focus{background-color:var(--kritzel-menu-item-button-hover-background-color, hsl(0, 0%, 0%, 4.3%))}.action-button.disabled{pointer-events:none;opacity:0.5}";
20203
+ const kritzelMenuItemCss = ":host{position:relative;display:flex;align-items:center;justify-content:space-between;width:100%;padding:var(--kritzel-menu-item-padding, 8px);box-sizing:border-box;gap:16px;height:var(--kritzel-menu-item-height, 40px);min-height:var(--kritzel-menu-item-min-height, 40px);font-family:sans-serif;font-size:var(--kritzel-menu-item-font-size, 14px);color:var(--kritzel-menu-item-color, #333333);border-radius:var(--kritzel-menu-item-border-radius, 12px)}:host(:hover) .menu-item-overlay,:host(:focus-within) .menu-item-overlay{background-color:var(--kritzel-menu-item-overlay-background-color, hsl(0, 0%, 0%, 4.3%))}:host(.selected){background-color:var(--kritzel-menu-item-selected-bg, #007aff);color:var(--kritzel-menu-item-selected-color, #ffffff)}:host(.selected) .action-button{color:var(--kritzel-menu-item-selected-color, #ffffff)}:host(.selected.editing){background-color:var(--kritzel-menu-item-selected-bg, #007aff)}:host(.selected) .edit-input{color:var(--kritzel-menu-item-selected-color, #ffffff)}:host(.selected) .action-button kritzel-icon{--kritzel-icon-color:var(--kritzel-menu-item-selected-color, #ffffff)}kritzel-icon{--kritzel-icon-color:var(--kritzel-menu-item-color, #333333)}:host(.selected) .edit-input::selection{background-color:var(--kritzel-menu-item-input-selection-color, rgba(255, 255, 255, 0.16))}:host(.editing){background-color:var(--kritzel-menu-item-editing-background-color, hsl(0, 0%, 0%, 4.3%))}:host(.disabled){opacity:0.5;pointer-events:none !important}:host(.child-open){background-color:var(--kritzel-menu-item-child-open-background-color, hsl(0, 0%, 0%, 4.3%))}:host(.child-open.selected){background-color:var(--kritzel-menu-item-selected-bg, #007aff)}.menu-item-overlay{position:absolute;inset:0;background-color:transparent;z-index:0;pointer-events:none;border-radius:var(--kritzel-menu-item-border-radius, 12px)}.menu-item-content{display:flex;align-items:center;gap:8px;position:relative;z-index:1;height:100%}.left{justify-content:flex-start;flex:1;min-width:0}.left>div{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.right{justify-content:flex-end}.edit-input{flex:1;height:var(--kritzel-menu-item-input-height, 24px);padding:0;background-color:transparent;border-radius:0;border:none;border-bottom:1px solid var(--kritzel-menu-item-input-border, #ccc);font-size:var(--kritzel-context-menu-item-font-size, 14px);width:100%;min-width:0;box-sizing:border-box;outline:none}.edit-input::selection{background-color:var(--kritzel-menu-item-input-selection-color, #007bff);color:var(--kritzel-menu-item-input-selection-text-color, #ffffff)}.action-button{padding:4px;border-radius:8px;border:none;cursor:var(--kritzel-pointer-cursor, pointer);display:flex;align-items:center;justify-content:center;background-color:transparent;background:transparent;-webkit-tap-highlight-color:transparent}.action-button:hover,.action-button:focus{background-color:var(--kritzel-menu-item-button-hover-background-color, hsl(0, 0%, 0%, 4.3%))}.action-button.disabled{pointer-events:none;opacity:0.5}";
20197
20204
 
20198
20205
  const KritzelMenuItem = class {
20199
20206
  constructor(hostRef) {
@@ -20289,12 +20296,12 @@ const KritzelMenuItem = class {
20289
20296
  ];
20290
20297
  }
20291
20298
  render() {
20292
- return (h(Host, { key: '9df3acdaff753e3ed910f848c98e8ad73e2b5f5c', tabIndex: this.item.isDisabled ? -1 : 0, class: {
20299
+ return (h(Host, { key: '7e1c4957d32429f235cb0f5a71fe3e0d2ca52934', tabIndex: this.item.isDisabled ? -1 : 0, class: {
20293
20300
  'selected': this.item.isSelected,
20294
20301
  'editing': this.item.isEditing,
20295
20302
  'disabled': this.item.isDisabled,
20296
20303
  'child-open': this.item.isChildMenuOpen,
20297
- }, onClick: this.handleItemSelect }, h("div", { key: 'bb73e5c0c3dd87efabcaa0b53d20c7c477b34aa1', class: "menu-item-overlay" }), this.item.isEditing ? this.renderEditMode() : this.renderViewMode()));
20304
+ }, onClick: this.handleItemSelect }, h("div", { key: '2e478e0ee73b11aaca57b56c25fdbeaa449a543e', class: "menu-item-overlay" }), this.item.isEditing ? this.renderEditMode() : this.renderViewMode()));
20298
20305
  }
20299
20306
  static get watchers() { return {
20300
20307
  "item": ["onItemChange"]
@@ -20535,14 +20542,14 @@ const KritzelPortal = class {
20535
20542
  this.portal.style.left = `${left}px`;
20536
20543
  }
20537
20544
  render() {
20538
- return (h(Host, { key: '9c5cdf7126ff1148dd2364cce9d2524862e27d13', style: { display: this.anchor ? 'block' : 'none' } }, h("slot", { key: '209a77246fedcea0c24882605487452ff5cc62ce' })));
20545
+ return (h(Host, { key: 'e536f728900dd70efc6524c7b9e76c2a20e26ef9', style: { display: this.anchor ? 'block' : 'none' } }, h("slot", { key: 'dc3fdea3ad588ba062c7ffc25e955453f8ac4f30' })));
20539
20546
  }
20540
20547
  static get watchers() { return {
20541
20548
  "anchor": ["anchorChanged"]
20542
20549
  }; }
20543
20550
  };
20544
20551
 
20545
- const kritzelSplitButtonCss = ":host{position:relative;display:flex;align-items:center;font-family:sans-serif;z-index:1;padding:var(--kritzel-split-button-padding, 4px);background-color:var(--kritzel-split-button-background-color, #ffffff);border-radius:var(--kritzel-split-button-border-radius, 12px);box-shadow:var(--kritzel-split-button-box-shadow, 0 0 3px rgba(0, 0, 0, 0.08));border:var(--kritzel-split-button-border, 1px solid #ebebeb);gap:var(--kritzel-split-button-gap, 4px)}:host(.mobile){--kritzel-split-button-hover-background-color:transparent}button{border:none;background-color:transparent;padding:0;margin:0;font-family:inherit;font-size:inherit;color:inherit;-webkit-appearance:none;-moz-appearance:none;appearance:none;cursor:pointer;text-align:center;display:flex;align-items:center;justify-content:center;pointer-events:all;-webkit-tap-highlight-color:transparent}.split-main-button,.split-menu-button{height:auto;display:flex;align-items:center;padding:var(--kritzel-split-button-padding, 8px);background-color:var(--kritzel-split-button-background-color, #ffffff);border-radius:var(--kritzel-split-button-border-radius, 12px);font-size:var(--kritzel-split-button-font-size, 14px)}.split-main-button:hover,.split-menu-button:hover{background-color:var(--kritzel-split-button-hover-background-color, hsl(0, 0%, 0%, 4.3%))}.split-main-button:focus,.split-menu-button:focus{background-color:var(--kritzel-split-button-hover-background-color, hsl(0, 0%, 0%, 4.3%))}.split-main-button{gap:var(--kritzel-split-button-gap, 4px)}.split-menu-button{border-left:none;justify-content:center}.split-divider{width:var(--kritzel-split-button-divider-width, 1px);height:24px;background-color:var(--kritzel-split-button-divider-background-color, hsl(0, 0%, 0%, 4.3%))}:disabled{pointer-events:none;opacity:0.5}";
20552
+ const kritzelSplitButtonCss = ":host{position:relative;display:flex;align-items:center;font-family:sans-serif;z-index:1;padding:var(--kritzel-split-button-padding, 4px);background-color:var(--kritzel-split-button-background-color, #ffffff);border-radius:var(--kritzel-split-button-border-radius, 12px);box-shadow:var(--kritzel-split-button-box-shadow, 0 0 3px rgba(0, 0, 0, 0.08));border:var(--kritzel-split-button-border, 1px solid #ebebeb);gap:var(--kritzel-split-button-gap, 4px)}:host(.mobile){--kritzel-split-button-hover-background-color:transparent}button{border:none;background-color:transparent;padding:0;margin:0;font-family:inherit;font-size:inherit;color:inherit;-webkit-appearance:none;-moz-appearance:none;appearance:none;cursor:var(--kritzel-pointer-cursor, pointer);text-align:center;display:flex;align-items:center;justify-content:center;pointer-events:all;-webkit-tap-highlight-color:transparent}.split-main-button,.split-menu-button{height:auto;display:flex;align-items:center;padding:var(--kritzel-split-button-padding, 8px);background-color:var(--kritzel-split-button-background-color, #ffffff);border-radius:var(--kritzel-split-button-border-radius, 12px);font-size:var(--kritzel-split-button-font-size, 14px)}.split-main-button:hover,.split-menu-button:hover{background-color:var(--kritzel-split-button-hover-background-color, hsl(0, 0%, 0%, 4.3%))}.split-main-button:focus,.split-menu-button:focus{background-color:var(--kritzel-split-button-hover-background-color, hsl(0, 0%, 0%, 4.3%))}.split-main-button{gap:var(--kritzel-split-button-gap, 4px)}.split-menu-button{border-left:none;justify-content:center}.split-divider{width:var(--kritzel-split-button-divider-width, 1px);height:24px;background-color:var(--kritzel-split-button-divider-background-color, hsl(0, 0%, 0%, 4.3%))}:disabled{pointer-events:none;opacity:0.5}";
20546
20553
 
20547
20554
  const KritzelSplitButton = class {
20548
20555
  constructor(hostRef) {
@@ -20635,12 +20642,12 @@ const KritzelSplitButton = class {
20635
20642
  this.menuScrollTop = event.target.scrollTop;
20636
20643
  };
20637
20644
  render() {
20638
- return (h(Host, { key: '4ff7809dd62c1dd60600fda592aeac43cd9bc74c', class: { mobile: this.isTouchDevice } }, h("button", { key: 'db6485fabcffdd75a25d178aca7b653af499a90c', class: "split-main-button", tabIndex: 0, onClick: this.handleButtonClick, disabled: this.mainButtonDisabled }, this.buttonIcon && h("kritzel-icon", { key: '4001a4e23ef53bec2a578310de8c8b593d7b266c', name: this.buttonIcon })), h("div", { key: '8ff86d3c01a48b06afca77dd066518efa3589cb1', class: "split-divider" }), h("button", { key: 'f1c40edbec3756a7f3681de4e8d0f1981dd312a4', ref: el => (this.splitMenuButtonRef = el), class: "split-menu-button", tabIndex: 0, onClick: this.toggleMenu, disabled: this.menuButtonDisabled }, h("kritzel-icon", { key: '0ddb89976632ae7454e66504f8bab3fd5072c252', name: this.dropdownIcon })), h("kritzel-portal", { key: '64531ffd6ac847fd1a99e32aceefea9f18088992', anchor: this.anchorElement, offsetY: 4, onClose: this.closeMenu }, h("kritzel-menu", { key: 'f3b86cb71e5ba39e8f98e26b3669416e2cdb4802', ref: el => (this.menuRef = el), items: this.items, onItemSelect: this.handleItemSelect, onItemSave: this.handleItemSave, onItemCancel: this.handleItemCancel, onItemToggleChildMenu: this.handleItemToggleChildMenu, onItemCloseChildMenu: this.handleItemCloseChildMenu, onClose: this.closeMenu, onScroll: this.handleScroll }))));
20645
+ return (h(Host, { key: '3603874994e8a9d666448460d7e403252d38f799', class: { mobile: this.isTouchDevice } }, h("button", { key: 'a6a2f8cd22118f7be668f3fd1fc52e38c44b22b3', class: "split-main-button", tabIndex: 0, onClick: this.handleButtonClick, disabled: this.mainButtonDisabled }, this.buttonIcon && h("kritzel-icon", { key: 'e61abf53a2890b6587746eb2aef5a813e81ff1b9', name: this.buttonIcon })), h("div", { key: '17f78d85b2fbd0fe6e7925e10c2531c51bcfdf41', class: "split-divider" }), h("button", { key: 'ac507c76479d66e3483ee898e144a6bea4e8cf6a', ref: el => (this.splitMenuButtonRef = el), class: "split-menu-button", tabIndex: 0, onClick: this.toggleMenu, disabled: this.menuButtonDisabled }, h("kritzel-icon", { key: '8274be53e327d537c2987bc9a3761bc768bdd41f', name: this.dropdownIcon })), h("kritzel-portal", { key: '71136ef798f3c77cff30426a0fcd4ff91bf312b8', anchor: this.anchorElement, offsetY: 4, onClose: this.closeMenu }, h("kritzel-menu", { key: 'd1363d2029d7b4aafbd6cba9a4ca6cdf617064e9', ref: el => (this.menuRef = el), items: this.items, onItemSelect: this.handleItemSelect, onItemSave: this.handleItemSave, onItemCancel: this.handleItemCancel, onItemToggleChildMenu: this.handleItemToggleChildMenu, onItemCloseChildMenu: this.handleItemCloseChildMenu, onClose: this.closeMenu, onScroll: this.handleScroll }))));
20639
20646
  }
20640
20647
  };
20641
20648
  KritzelSplitButton.style = kritzelSplitButtonCss;
20642
20649
 
20643
- const kritzelStrokeSizeCss = ":host{display:flex;align-items:flex-start;gap:8px;padding:8px;box-sizing:border-box}.size-container{display:flex;justify-content:center;align-items:center;width:32px;height:32px;border-radius:50%;cursor:pointer;border:2px solid transparent;box-sizing:border-box}.size-container:hover{background-color:var(--kritzel-stroke-size-hover-background-color, #ebebeb)}.size-container.selected{border-color:var(--kritzel-selection-border-color, #007AFF);background-color:var(--kritzel-stroke-size-selected-background-color, #ebebeb)}";
20650
+ const kritzelStrokeSizeCss = ":host{display:flex;align-items:flex-start;gap:8px;padding:8px;box-sizing:border-box}.size-container{display:flex;justify-content:center;align-items:center;width:32px;height:32px;border-radius:50%;cursor:var(--kritzel-pointer-cursor, pointer);border:2px solid transparent;box-sizing:border-box}.size-container:hover{background-color:var(--kritzel-stroke-size-hover-background-color, #ebebeb)}.size-container.selected{border-color:var(--kritzel-selection-border-color, #007AFF);background-color:var(--kritzel-stroke-size-selected-background-color, #ebebeb)}";
20644
20651
 
20645
20652
  const KritzelStrokeSize = class {
20646
20653
  constructor(hostRef) {
@@ -20655,7 +20662,7 @@ const KritzelStrokeSize = class {
20655
20662
  this.sizeChange.emit(size);
20656
20663
  }
20657
20664
  render() {
20658
- return (h(Host, { key: '74579e34c23725e22927afe371c1f7925903720a' }, this.sizes.map(size => (h("div", { tabIndex: 0, class: {
20665
+ return (h(Host, { key: '7c9041e061a946f20210cff2330cb736c2703ac7' }, this.sizes.map(size => (h("div", { tabIndex: 0, class: {
20659
20666
  'size-container': true,
20660
20667
  'selected': this.selectedSize === size,
20661
20668
  }, onClick: () => this.handleSizeClick(size) }, h("kritzel-color", { value: '#000000', size: size }))))));
@@ -20732,23 +20739,23 @@ const KritzelTooltip = class {
20732
20739
  }
20733
20740
  }
20734
20741
  render() {
20735
- return (h(Host, { key: '72a6356a43a15a7abc9a46b0d22c3c62217791e8', style: {
20742
+ return (h(Host, { key: '8f78668b3d266d7a0eb140d01626998534acc252', style: {
20736
20743
  position: 'fixed',
20737
20744
  zIndex: '9999',
20738
20745
  transition: 'opacity 0.3s ease-in-out, transform 0.3s ease-in-out',
20739
20746
  visibility: this.isVisible ? 'visible' : 'hidden',
20740
20747
  left: !this.isMobileView ? `${this.positionX}px` : '50%',
20741
20748
  marginBottom: `${this.offsetY + this.arrowSize}px`,
20742
- } }, h("div", { key: '75f5350f23ada0eee009279eddd7d25273ad3740', class: "tooltip-content", onClick: event => event.stopPropagation() }, h("slot", { key: 'ad999154289e933cac1fdc13392de2aec78811a8' }), h("div", { key: '6be3f5c24d42898920c339be2cd2f3dd8a82fa80', class: "tooltip-arrow-wrapper", style: {
20749
+ } }, h("div", { key: '77b526b1687d41654b32b6f14d3e0400908b0a79', class: "tooltip-content", onClick: event => event.stopPropagation() }, h("slot", { key: 'fcd088608c091ff877b1e58425a0905c84c9999a' }), h("div", { key: '002913b582b5c034e7af722c433fbe79d0c32150', class: "tooltip-arrow-wrapper", style: {
20743
20750
  position: 'fixed',
20744
20751
  left: this.arrowOffset,
20745
20752
  bottom: `-${this.arrowSize * 2}px`,
20746
- } }, h("div", { key: '37397c6245dd6b0def23e2611d118e0c4f5860ef', class: "tooltip-arrow", style: {
20753
+ } }, h("div", { key: 'fc834bf34b464ac039ffb58e47485b76f8ced03e', class: "tooltip-arrow", style: {
20747
20754
  borderLeft: `${this.arrowSize}px solid transparent`,
20748
20755
  borderRight: `${this.arrowSize}px solid transparent`,
20749
20756
  borderTop: `${this.arrowSize}px solid var(--kritzel-controls-tooltip-background-color, #ffffff)`,
20750
20757
  filter: 'drop-shadow(0 2px 4px rgba(0, 0, 0, 0.2))',
20751
- } }), h("div", { key: 'dbf009c371d46ef0a36e27771758c66e817d9b22', class: "tooltip-arrow-rect", style: {
20758
+ } }), h("div", { key: '65939011ae607a144f8217cf3aa5bdd2ff0f88fc', class: "tooltip-arrow-rect", style: {
20752
20759
  position: 'relative',
20753
20760
  width: `${this.arrowSize * 2}px`,
20754
20761
  height: `${this.arrowSize}px`,
@@ -20759,7 +20766,7 @@ const KritzelTooltip = class {
20759
20766
  };
20760
20767
  KritzelTooltip.style = kritzelTooltipCss;
20761
20768
 
20762
- const kritzelUtilityPanelCss = ":host{display:flex;flex-direction:row;align-items:center;padding:4px;gap:8px;border-top-left-radius:12px;border-top-right-radius:12px;background-color:rgb(226, 226, 226);width:fit-content;user-select:none}.utility-button{display:flex;justify-content:center;align-items:center;width:28px;height:28px;padding:8px 4px;border:none;background:none;cursor:pointer;color:#333333;-webkit-tap-highlight-color:transparent;border-radius:var(--kritzel-utility-panel-button-border-radius, 8px)}.utility-button:hover,.utility-button:focus-visible{background-color:var(--kritzel-controls-control-hover-background-color, hsl(0, 0%, 0%, 4.3%))}.utility-button:disabled{opacity:0.4;cursor:not-allowed;pointer-events:none}.utility-separator{width:1px;height:16px;background-color:hsl(0, 0%, 0%, 4.3%)}";
20769
+ const kritzelUtilityPanelCss = ":host{display:flex;flex-direction:row;align-items:center;padding:4px;gap:8px;border-top-left-radius:12px;border-top-right-radius:12px;background-color:rgb(226, 226, 226);width:fit-content;user-select:none}.utility-button{display:flex;justify-content:center;align-items:center;width:28px;height:28px;padding:8px 4px;border:none;background:none;cursor:var(--kritzel-pointer-cursor, pointer);color:#333333;-webkit-tap-highlight-color:transparent;border-radius:var(--kritzel-utility-panel-button-border-radius, 8px)}.utility-button:hover,.utility-button:focus-visible{background-color:var(--kritzel-controls-control-hover-background-color, hsl(0, 0%, 0%, 4.3%))}.utility-button:disabled{opacity:0.4;cursor:not-allowed;pointer-events:none}.utility-separator{width:1px;height:16px;background-color:hsl(0, 0%, 0%, 4.3%)}";
20763
20770
 
20764
20771
  const KritzelUtilityPanel = class {
20765
20772
  constructor(hostRef) {
@@ -20785,7 +20792,7 @@ const KritzelUtilityPanel = class {
20785
20792
  this.redo.emit();
20786
20793
  }
20787
20794
  render() {
20788
- return (h(Host, { key: '47e35a4c61d2807d220888eb90e325e24b9baf90' }, h("button", { key: '4e6ec69fc83242a9c1340a31351da1cccd90b1ba', class: "utility-button", disabled: !this.undoState?.canUndo, onClick: event => this.handleUndo(event) }, h("kritzel-icon", { key: '57bf4920ff9f0b2de8b0c1625dd844bba0c7f66d', name: "undo" })), h("button", { key: '759b9d13a679455fccd00e3d8c84e51b184659df', class: "utility-button", disabled: !this.undoState?.canRedo, onClick: event => this.handleRedo(event) }, h("kritzel-icon", { key: 'f3650d9dcf0c09086ec707443deb6055f7a709ec', name: "redo" })), h("div", { key: 'f414bc1d4be24a1f48d77911db4b9064c898ed8d', class: "utility-separator" }), h("button", { key: 'f542539422b6040bc7b90ceccad075e8f7150a4e', class: "utility-button" }, h("kritzel-icon", { key: 'da8e3cfe848384c3bb984b34d7ad9a6c9c1feba8', name: "delete", onClick: () => this.delete.emit() }))));
20795
+ return (h(Host, { key: '6e33687f7c71ec342d47f1ae4a507de1f08fad6f' }, h("button", { key: 'd0cf45d78743a954764d03abdb49a725c0979cf8', class: "utility-button", disabled: !this.undoState?.canUndo, onClick: event => this.handleUndo(event) }, h("kritzel-icon", { key: '6303892952ef0426023dde47b909fe90abfbd4c6', name: "undo" })), h("button", { key: '0542b66850c61e001d7461ddcbceb7999f98dc6a', class: "utility-button", disabled: !this.undoState?.canRedo, onClick: event => this.handleRedo(event) }, h("kritzel-icon", { key: 'faf61b34c8d5abe3ba0bdb1787a08418874532a4', name: "redo" })), h("div", { key: 'a8482d17b7e9b68204d81097ced692daa1fb11cc', class: "utility-separator" }), h("button", { key: 'd733f273095a96c914285908088d9c1536dddaf0', class: "utility-button" }, h("kritzel-icon", { key: 'd5322357c8ffc646c77acb02c5c5ce9131ba66cd', name: "delete", onClick: () => this.delete.emit() }))));
20789
20796
  }
20790
20797
  };
20791
20798
  KritzelUtilityPanel.style = kritzelUtilityPanelCss;