kritzel-stencil 0.0.139 → 0.0.141

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 (213) hide show
  1. package/dist/cjs/index-BKstgWru.js +16981 -0
  2. package/dist/cjs/index-BKstgWru.js.map +1 -0
  3. package/dist/cjs/{index-nzUNdMPh.js → index-DcTwXs_q.js} +47 -22
  4. package/dist/cjs/index-DcTwXs_q.js.map +1 -0
  5. package/dist/cjs/index.cjs.js +1 -1
  6. package/dist/cjs/kritzel-brush-style.cjs.entry.js +1 -1
  7. package/dist/cjs/kritzel-color_22.cjs.entry.js +205 -157
  8. package/dist/cjs/loader.cjs.js +2 -2
  9. package/dist/cjs/stencil.cjs.js +3 -3
  10. package/dist/cjs/stencil.cjs.js.map +1 -1
  11. package/dist/collection/classes/commands/add-selection-group.command.js +4 -4
  12. package/dist/collection/classes/commands/add-selection-group.command.js.map +1 -1
  13. package/dist/collection/classes/commands/move-selection-group.command.js +2 -2
  14. package/dist/collection/classes/commands/move-selection-group.command.js.map +1 -1
  15. package/dist/collection/classes/commands/remove-selection-group.command.js +2 -2
  16. package/dist/collection/classes/commands/remove-selection-group.command.js.map +1 -1
  17. package/dist/collection/classes/commands/resize-selection-group.command.js +2 -2
  18. package/dist/collection/classes/commands/resize-selection-group.command.js.map +1 -1
  19. package/dist/collection/classes/commands/rotate-selection-group.command.js +2 -2
  20. package/dist/collection/classes/commands/rotate-selection-group.command.js.map +1 -1
  21. package/dist/collection/classes/commands/update-viewport.command.js +6 -6
  22. package/dist/collection/classes/commands/update-viewport.command.js.map +1 -1
  23. package/dist/collection/classes/core/core.class.js +52 -29
  24. package/dist/collection/classes/core/core.class.js.map +1 -1
  25. package/dist/collection/classes/core/history.class.js +3 -3
  26. package/dist/collection/classes/core/history.class.js.map +1 -1
  27. package/dist/collection/classes/core/store.class.js +4 -1
  28. package/dist/collection/classes/core/store.class.js.map +1 -1
  29. package/dist/collection/classes/core/viewport.class.js +63 -44
  30. package/dist/collection/classes/core/viewport.class.js.map +1 -1
  31. package/dist/collection/classes/handlers/context-menu.handler.js +16 -8
  32. package/dist/collection/classes/handlers/context-menu.handler.js.map +1 -1
  33. package/dist/collection/classes/handlers/key.handler.js +4 -4
  34. package/dist/collection/classes/handlers/key.handler.js.map +1 -1
  35. package/dist/collection/classes/handlers/move.handler.js +30 -8
  36. package/dist/collection/classes/handlers/move.handler.js.map +1 -1
  37. package/dist/collection/classes/handlers/resize.handler.js +6 -6
  38. package/dist/collection/classes/handlers/resize.handler.js.map +1 -1
  39. package/dist/collection/classes/handlers/rotation.handler.js +6 -6
  40. package/dist/collection/classes/handlers/rotation.handler.js.map +1 -1
  41. package/dist/collection/classes/handlers/selection.handler.js +56 -28
  42. package/dist/collection/classes/handlers/selection.handler.js.map +1 -1
  43. package/dist/collection/classes/objects/base-object.class.js +9 -3
  44. package/dist/collection/classes/objects/base-object.class.js.map +1 -1
  45. package/dist/collection/classes/objects/selection-group.class.js +3 -1
  46. package/dist/collection/classes/objects/selection-group.class.js.map +1 -1
  47. package/dist/collection/classes/objects/text.class.js +123 -75
  48. package/dist/collection/classes/objects/text.class.js.map +1 -1
  49. package/dist/collection/classes/tools/brush-tool.class.js +16 -16
  50. package/dist/collection/classes/tools/brush-tool.class.js.map +1 -1
  51. package/dist/collection/classes/tools/eraser-tool.class.js +4 -4
  52. package/dist/collection/classes/tools/eraser-tool.class.js.map +1 -1
  53. package/dist/collection/classes/tools/selection-tool.class.js +7 -7
  54. package/dist/collection/classes/tools/selection-tool.class.js.map +1 -1
  55. package/dist/collection/classes/tools/text-tool.class.js +8 -10
  56. package/dist/collection/classes/tools/text-tool.class.js.map +1 -1
  57. package/dist/collection/collection-manifest.json +2 -2
  58. package/dist/collection/components/core/kritzel-cursor-trail/kritzel-cursor-trail.js +1 -2
  59. package/dist/collection/components/core/kritzel-cursor-trail/kritzel-cursor-trail.js.map +1 -1
  60. package/dist/collection/components/core/kritzel-editor/kritzel-editor.js +5 -9
  61. package/dist/collection/components/core/kritzel-editor/kritzel-editor.js.map +1 -1
  62. package/dist/collection/components/core/kritzel-engine/kritzel-engine.css +21 -8
  63. package/dist/collection/components/core/kritzel-engine/kritzel-engine.js +30 -38
  64. package/dist/collection/components/core/kritzel-engine/kritzel-engine.js.map +1 -1
  65. package/dist/collection/components/shared/kritzel-brush-style/kritzel-brush-style.js +1 -2
  66. package/dist/collection/components/shared/kritzel-brush-style/kritzel-brush-style.js.map +1 -1
  67. package/dist/collection/components/shared/kritzel-color/kritzel-color.js +5 -5
  68. package/dist/collection/components/shared/kritzel-color-palette/kritzel-color-palette.js +4 -5
  69. package/dist/collection/components/shared/kritzel-color-palette/kritzel-color-palette.js.map +1 -1
  70. package/dist/collection/components/shared/kritzel-dropdown/kritzel-dropdown.js +5 -6
  71. package/dist/collection/components/shared/kritzel-dropdown/kritzel-dropdown.js.map +1 -1
  72. package/dist/collection/components/shared/kritzel-font/kritzel-font.js +4 -4
  73. package/dist/collection/components/shared/kritzel-font-family/kritzel-font-family.js +3 -4
  74. package/dist/collection/components/shared/kritzel-font-family/kritzel-font-family.js.map +1 -1
  75. package/dist/collection/components/shared/kritzel-font-size/kritzel-font-size.js +3 -4
  76. package/dist/collection/components/shared/kritzel-font-size/kritzel-font-size.js.map +1 -1
  77. package/dist/collection/components/shared/kritzel-icon/kritzel-icon.js +5 -5
  78. package/dist/collection/components/shared/kritzel-menu/kritzel-menu.js +1 -3
  79. package/dist/collection/components/shared/kritzel-menu/kritzel-menu.js.map +1 -1
  80. package/dist/collection/components/shared/kritzel-menu-item/kritzel-menu-item.js +2 -4
  81. package/dist/collection/components/shared/kritzel-menu-item/kritzel-menu-item.js.map +1 -1
  82. package/dist/collection/components/shared/kritzel-portal/kritzel-portal.js +6 -7
  83. package/dist/collection/components/shared/kritzel-portal/kritzel-portal.js.map +1 -1
  84. package/dist/collection/components/shared/kritzel-split-button/kritzel-split-button.js +5 -6
  85. package/dist/collection/components/shared/kritzel-split-button/kritzel-split-button.js.map +1 -1
  86. package/dist/collection/components/shared/kritzel-stroke-size/kritzel-stroke-size.js +2 -3
  87. package/dist/collection/components/shared/kritzel-stroke-size/kritzel-stroke-size.js.map +1 -1
  88. package/dist/collection/components/shared/kritzel-tooltip/kritzel-tooltip.js +7 -8
  89. package/dist/collection/components/shared/kritzel-tooltip/kritzel-tooltip.js.map +1 -1
  90. package/dist/collection/components/ui/kritzel-context-menu/kritzel-context-menu.js +1 -3
  91. package/dist/collection/components/ui/kritzel-context-menu/kritzel-context-menu.js.map +1 -1
  92. package/dist/collection/components/ui/kritzel-control-brush-config/kritzel-control-brush-config.js +3 -4
  93. package/dist/collection/components/ui/kritzel-control-brush-config/kritzel-control-brush-config.js.map +1 -1
  94. package/dist/collection/components/ui/kritzel-control-text-config/kritzel-control-text-config.js +3 -4
  95. package/dist/collection/components/ui/kritzel-control-text-config/kritzel-control-text-config.js.map +1 -1
  96. package/dist/collection/components/ui/kritzel-controls/kritzel-controls.js +4 -6
  97. package/dist/collection/components/ui/kritzel-controls/kritzel-controls.js.map +1 -1
  98. package/dist/collection/components/ui/kritzel-utility-panel/kritzel-utility-panel.js +1 -1
  99. package/dist/collection/components/ui/kritzel-workspace-manager/kritzel-workspace-manager.js +1 -3
  100. package/dist/collection/components/ui/kritzel-workspace-manager/kritzel-workspace-manager.js.map +1 -1
  101. package/dist/components/index.js +3 -3
  102. package/dist/components/kritzel-brush-style.js +4 -4
  103. package/dist/components/kritzel-color-palette.js +1 -1
  104. package/dist/components/kritzel-color.js +1 -1
  105. package/dist/components/kritzel-context-menu.js +1 -1
  106. package/dist/components/kritzel-control-brush-config.js +1 -1
  107. package/dist/components/kritzel-control-text-config.js +1 -1
  108. package/dist/components/kritzel-controls.js +1 -1
  109. package/dist/components/kritzel-cursor-trail.js +1 -1
  110. package/dist/components/kritzel-dropdown.js +1 -1
  111. package/dist/components/kritzel-editor.js +26 -26
  112. package/dist/components/kritzel-engine.js +1 -1
  113. package/dist/components/kritzel-font-family.js +1 -1
  114. package/dist/components/kritzel-font-size.js +1 -1
  115. package/dist/components/kritzel-font.js +1 -1
  116. package/dist/components/kritzel-icon.js +1 -1
  117. package/dist/components/kritzel-menu-item.js +1 -1
  118. package/dist/components/kritzel-menu.js +1 -1
  119. package/dist/components/kritzel-portal.js +1 -1
  120. package/dist/components/kritzel-split-button.js +1 -1
  121. package/dist/components/kritzel-stroke-size.js +1 -1
  122. package/dist/components/kritzel-tooltip.js +1 -1
  123. package/dist/components/kritzel-utility-panel.js +1 -1
  124. package/dist/components/kritzel-workspace-manager.js +1 -1
  125. package/dist/components/{p-BlPlPpUy.js → p-BEKicPnH.js} +4 -4
  126. package/dist/components/{p-BlPlPpUy.js.map → p-BEKicPnH.js.map} +1 -1
  127. package/dist/components/{p-DCx3703u.js → p-BFNwskCY.js} +5 -5
  128. package/dist/components/{p-DCx3703u.js.map → p-BFNwskCY.js.map} +1 -1
  129. package/dist/components/{p-BorT6g39.js → p-BJbN3vca.js} +7 -7
  130. package/dist/components/{p-BorT6g39.js.map → p-BJbN3vca.js.map} +1 -1
  131. package/dist/components/p-BuDVaqTF.js +15302 -0
  132. package/dist/components/p-BuDVaqTF.js.map +1 -0
  133. package/dist/components/{p-Db3kxVe2.js → p-ByAzDzS5.js} +4 -4
  134. package/dist/components/{p-Db3kxVe2.js.map → p-ByAzDzS5.js.map} +1 -1
  135. package/dist/components/{p-sreNwi0N.js → p-BycHaC-9.js} +5 -5
  136. package/dist/components/{p-sreNwi0N.js.map → p-BycHaC-9.js.map} +1 -1
  137. package/dist/components/{p-KudVTtHk.js → p-C4nj29RW.js} +310 -210
  138. package/dist/components/p-C4nj29RW.js.map +1 -0
  139. package/dist/components/{p-BYanlgdq.js → p-C9hrbrUN.js} +27 -14
  140. package/dist/components/p-C9hrbrUN.js.map +1 -0
  141. package/dist/components/{p-BgpsMYcw.js → p-CEn1WeG3.js} +8 -8
  142. package/dist/components/p-CEn1WeG3.js.map +1 -0
  143. package/dist/components/{p-BM9IjvnD.js → p-CGb-8cK4.js} +4 -4
  144. package/dist/components/{p-BM9IjvnD.js.map → p-CGb-8cK4.js.map} +1 -1
  145. package/dist/components/{p-B7kZ1_RH.js → p-C_hSH2nN.js} +5 -5
  146. package/dist/components/{p-B7kZ1_RH.js.map → p-C_hSH2nN.js.map} +1 -1
  147. package/dist/components/{p-CHdJi6b4.js → p-ChLi4Ufe.js} +20 -20
  148. package/dist/components/{p-CHdJi6b4.js.map → p-ChLi4Ufe.js.map} +1 -1
  149. package/dist/components/{p-BPsQrpzN.js → p-CieOx1XL.js} +8 -8
  150. package/dist/components/{p-BPsQrpzN.js.map → p-CieOx1XL.js.map} +1 -1
  151. package/dist/components/{p-DjU7p3od.js → p-Co5lU_7h.js} +12 -12
  152. package/dist/components/{p-DjU7p3od.js.map → p-Co5lU_7h.js.map} +1 -1
  153. package/dist/components/{p-sq9jgfX0.js → p-D27d2rKT.js} +3 -3
  154. package/dist/components/{p-sq9jgfX0.js.map → p-D27d2rKT.js.map} +1 -1
  155. package/dist/components/{p-DFO-6kuA.js → p-DPxzgBs0.js} +3 -3
  156. package/dist/components/{p-DFO-6kuA.js.map → p-DPxzgBs0.js.map} +1 -1
  157. package/dist/components/{p-0iJh9Z6m.js → p-D_RcVGj0.js} +5 -5
  158. package/dist/components/{p-0iJh9Z6m.js.map → p-D_RcVGj0.js.map} +1 -1
  159. package/dist/components/{p-DOPuq6gn.js → p-DqsgZIHC.js} +5 -5
  160. package/dist/components/{p-DOPuq6gn.js.map → p-DqsgZIHC.js.map} +1 -1
  161. package/dist/components/{p-BehchtaT.js → p-DzyZA2GT.js} +8 -8
  162. package/dist/components/{p-BehchtaT.js.map → p-DzyZA2GT.js.map} +1 -1
  163. package/dist/components/{p-Ddlbt3Bj.js → p-dcR2uxM3.js} +6 -6
  164. package/dist/components/{p-Ddlbt3Bj.js.map → p-dcR2uxM3.js.map} +1 -1
  165. package/dist/components/{p-B7w19kIk.js → p-fiFoOjv0.js} +9 -9
  166. package/dist/components/{p-B7w19kIk.js.map → p-fiFoOjv0.js.map} +1 -1
  167. package/dist/components/{p-CsyM5q2M.js → p-gCHmJzc2.js} +5 -5
  168. package/dist/components/{p-CsyM5q2M.js.map → p-gCHmJzc2.js.map} +1 -1
  169. package/dist/esm/{index-oCOlsFCN.js → index-Cw77zP6g.js} +47 -22
  170. package/dist/esm/index-Cw77zP6g.js.map +1 -0
  171. package/dist/esm/index-D0Q2MKPn.js +16953 -0
  172. package/dist/esm/index-D0Q2MKPn.js.map +1 -0
  173. package/dist/esm/index.js +1 -1
  174. package/dist/esm/kritzel-brush-style.entry.js +1 -1
  175. package/dist/esm/kritzel-color_22.entry.js +205 -157
  176. package/dist/esm/loader.js +3 -3
  177. package/dist/esm/stencil.js +4 -4
  178. package/dist/esm/stencil.js.map +1 -1
  179. package/dist/stencil/index.esm.js +1 -1
  180. package/dist/stencil/p-73784709.entry.js +2 -0
  181. package/dist/stencil/p-73784709.entry.js.map +1 -0
  182. package/dist/stencil/{p-25d1e040.entry.js → p-8b831c94.entry.js} +2 -2
  183. package/dist/stencil/p-Cw77zP6g.js +3 -0
  184. package/dist/stencil/p-Cw77zP6g.js.map +1 -0
  185. package/dist/stencil/p-D0Q2MKPn.js +2 -0
  186. package/dist/stencil/p-D0Q2MKPn.js.map +1 -0
  187. package/dist/stencil/stencil.esm.js +1 -1
  188. package/dist/stencil/stencil.esm.js.map +1 -1
  189. package/dist/types/classes/core/store.class.d.ts +2 -1
  190. package/dist/types/classes/core/viewport.class.d.ts +3 -0
  191. package/dist/types/classes/handlers/move.handler.d.ts +2 -0
  192. package/dist/types/classes/handlers/selection.handler.d.ts +3 -0
  193. package/dist/types/classes/objects/text.class.d.ts +20 -10
  194. package/dist/types/stencil-public-runtime.d.ts +36 -12
  195. package/package.json +7 -2
  196. package/dist/cjs/index-DgZMn9B_.js +0 -2791
  197. package/dist/cjs/index-DgZMn9B_.js.map +0 -1
  198. package/dist/cjs/index-nzUNdMPh.js.map +0 -1
  199. package/dist/components/p-BYanlgdq.js.map +0 -1
  200. package/dist/components/p-BbGgijCS.js +0 -1164
  201. package/dist/components/p-BbGgijCS.js.map +0 -1
  202. package/dist/components/p-BgpsMYcw.js.map +0 -1
  203. package/dist/components/p-KudVTtHk.js.map +0 -1
  204. package/dist/esm/index-CxieEK_G.js +0 -2763
  205. package/dist/esm/index-CxieEK_G.js.map +0 -1
  206. package/dist/esm/index-oCOlsFCN.js.map +0 -1
  207. package/dist/stencil/p-CxieEK_G.js +0 -2
  208. package/dist/stencil/p-CxieEK_G.js.map +0 -1
  209. package/dist/stencil/p-ab074e87.entry.js +0 -2
  210. package/dist/stencil/p-ab074e87.entry.js.map +0 -1
  211. package/dist/stencil/p-oCOlsFCN.js +0 -3
  212. package/dist/stencil/p-oCOlsFCN.js.map +0 -1
  213. /package/dist/stencil/{p-25d1e040.entry.js.map → p-8b831c94.entry.js.map} +0 -0
@@ -1,7 +1,7 @@
1
1
  'use strict';
2
2
 
3
- var index = require('./index-nzUNdMPh.js');
4
- var index$1 = require('./index-DgZMn9B_.js');
3
+ var index = require('./index-DcTwXs_q.js');
4
+ var index$1 = require('./index-BKstgWru.js');
5
5
 
6
6
  const kritzelColorCss = ":host{display:flex}.checkerboard-bg{background:repeating-conic-gradient(#ccc 0% 25%, #fff 0% 50%) 50% / 8px 8px;position:relative;overflow:hidden}.color-circle{width:24px;height:24px;border-radius:50%;box-sizing:border-box;display:block}.color-circle.white{border:1px solid var(--kritzel-color-palette-circle-border-color, #dddcdc)}";
7
7
 
@@ -37,13 +37,13 @@ const KritzelColor = class {
37
37
  }
38
38
  render() {
39
39
  const isColorVeryLight = this.isLightColor(this.value);
40
- return (index.h(index.Host, { key: '198dba41e1600d76faace18de78191d2b7a551ec' }, index.h("div", { key: 'ee690cffb7925e09cb2c51022eec607247a4849f', class: "checkerboard-bg", style: {
40
+ return (index.h(index.Host, { key: '000e54c604c8ceca2c44365e95ec1f5bfb1b729a' }, index.h("div", { key: '77b2abeae70e4a80714e1364eb4e11e67f16d066', 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
- } }, index.h("div", { key: '66cc8df8fabd008db8c00942994875e3e8d722ce', class: {
46
+ } }, index.h("div", { key: 'df71720cf51d845a36598499adb900a30770c503', class: {
47
47
  'color-circle': true,
48
48
  'white': isColorVeryLight,
49
49
  }, style: {
@@ -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 (index.h(index.Host, { key: '2ead7cd530ce181856e5f582f086a22a1fe69390' }, index.h("div", { key: 'fcc75b267f36e271d50615bfde42a29c28aa2536', class: {
89
+ return (index.h(index.Host, { key: 'd533725a8ab2019ae963959727283fbbf833c56a' }, index.h("div", { key: '7fb50c16d79e9b7330100b0f4e116f8f07b20827', class: {
90
90
  'color-grid': true,
91
91
  'expanded': this.isExpanded,
92
92
  }, style: {
@@ -151,7 +151,7 @@ const KritzelContextMenu = class {
151
151
  return defaultValue;
152
152
  }
153
153
  render() {
154
- return (index.h(index.Host, { key: '908711e45cb4ea41f25c4f66a9d3b03c847f886e' }, index.h("div", { key: '7dcb6e5654ecafebc1fc1a2efb9fa1b8678236c4', class: "menu-container" }, this.processedItems.map(({ item, isDisabled }, index$1) => (index.h("button", { key: `${item.label}-${index$1}`, class: { 'menu-item': true, 'disabled': isDisabled }, onClick: () => this.handleItemClick(item, isDisabled), disabled: isDisabled }, item.icon && index.h("kritzel-icon", { name: item.icon, size: 16 }), index.h("span", { class: "label" }, item.label)))))));
154
+ return (index.h(index.Host, { key: '45b9652285f9c3fe7568cbe222667d23c151622f' }, index.h("div", { key: '9aecc01027f297fa4d991780efaaf51b8d4542dc', class: "menu-container" }, this.processedItems.map(({ item, isDisabled }, index$1) => (index.h("button", { key: `${item.label}-${index$1}`, class: { 'menu-item': true, 'disabled': isDisabled }, onClick: () => this.handleItemClick(item, isDisabled), disabled: isDisabled }, item.icon && index.h("kritzel-icon", { name: item.icon, size: 16 }), index.h("span", { class: "label" }, item.label)))))));
155
155
  }
156
156
  static get watchers() { return {
157
157
  "items": ["onItemsChanged"]
@@ -194,14 +194,14 @@ const KritzelControlBrushConfig = class {
194
194
  this.toolChange.emit(this.tool);
195
195
  }
196
196
  render() {
197
- return (index.h(index.Host, { key: '8fe8c0564f491121c0c44c6ff4083034f92dbb67' }, index.h("div", { key: '3e8a69b827785976768bfc1e809126bee7c48c62', style: {
197
+ return (index.h(index.Host, { key: '4b060826312e6d5a2117f5ba9522553af9b02d6f' }, index.h("div", { key: '0975a250184d5bb2d38cc60263bd718157230d8c', 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
- } }, index.h("kritzel-color-palette", { key: 'c9056f81cf47d81fef0a0f5743000dcd6633258a', colors: this.palette, selectedColor: this.tool.color, isExpanded: this.isExpanded, isOpaque: true, onColorChange: color => this.handleColorChange(color) }), index.h("button", { key: '2f307264b80a732d976edeb025d509bc1164606b', class: "expand-toggle", onClick: () => this.handleToggleExpand(), title: this.isExpanded ? 'Collapse' : 'Expand', style: this.palette.length > 6 ? { visibillity: 'visible' } : { visibility: 'hidden' } }, index.h("kritzel-icon", { key: '08133ba0a23353b2bb3f87c685a7a0798b8dd16c', name: this.isExpanded ? 'chevron-up' : 'chevron-down' }))), index.h("kritzel-stroke-size", { key: '3de25cc80029ffdfdc173c4c79e937a7dc329743', selectedSize: this.tool.size, onSizeChange: event => this.handleSizeChange(event) })));
204
+ } }, index.h("kritzel-color-palette", { key: 'df84a6fdda01bc7bf3aff42e3b88c4bd9dca500f', colors: this.palette, selectedColor: this.tool.color, isExpanded: this.isExpanded, isOpaque: true, onColorChange: color => this.handleColorChange(color) }), index.h("button", { key: 'e43c19612807fc4f9cd1bf04f4fb79a048cfd62b', class: "expand-toggle", onClick: () => this.handleToggleExpand(), title: this.isExpanded ? 'Collapse' : 'Expand', style: this.palette.length > 6 ? { visibillity: 'visible' } : { visibility: 'hidden' } }, index.h("kritzel-icon", { key: '915cce6c4744ad175f3836c946330882de840880', name: this.isExpanded ? 'chevron-up' : 'chevron-down' }))), index.h("kritzel-stroke-size", { key: 'c07eebae3ba1785e2644c6b5a22d23f76be950fb', selectedSize: this.tool.size, onSizeChange: event => this.handleSizeChange(event) })));
205
205
  }
206
206
  static get watchers() { return {
207
207
  "tool": ["handleToolChange"]
@@ -235,14 +235,14 @@ const KritzelControlTextConfig = class {
235
235
  this.toolChange.emit(this.tool);
236
236
  }
237
237
  render() {
238
- return (index.h(index.Host, { key: '3695b187943af25566885d63257ae3de9f405ea5' }, index.h("div", { key: '7bb146ae3c188478ba17f18f70fd170ce3536308', style: {
238
+ return (index.h(index.Host, { key: '82e611092700f057bd36823e7f7503fe7a0423ed' }, index.h("div", { key: '37ed39adeeeb58981a917918cd185e96d589e973', 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
- } }, index.h("kritzel-font-family", { key: '87f4c5ac2e2a4cfea216b1b828faad231438b9ec', selectedFontFamily: this.tool.fontFamily, onFontFamilyChange: event => this.handleFamilyChange(event) }), index.h("button", { key: '2e73aaf7da659b9e069c247cc762f68394212293', class: "expand-toggle", onClick: () => this.handleToggleExpand(), title: this.isExpanded ? 'Collapse' : 'Expand' }, index.h("kritzel-icon", { key: '785b664697ba266432c535ea26e0665f8d8d657f', name: this.isExpanded ? 'chevron-up' : 'chevron-down' }))), index.h("kritzel-color-palette", { key: 'ed2517a39d254b77f45154914b3ce6a934f66c33', colors: this.tool.palette, selectedColor: this.tool.fontColor, isExpanded: this.isExpanded, onColorChange: event => this.handleColorChange(event) }), index.h("kritzel-font-size", { key: '9b25c9607fa69c991e769852e3e3e378e48387bd', selectedSize: this.tool.fontSize, fontFamily: this.tool.fontFamily, onSizeChange: event => this.handleSizeChange(event) })));
245
+ } }, index.h("kritzel-font-family", { key: 'cd8afc5c4a1eee087610cd3d5a6c05210cfda6b3', selectedFontFamily: this.tool.fontFamily, onFontFamilyChange: event => this.handleFamilyChange(event) }), index.h("button", { key: '085f1bba060bde27a7b64dc5477bb51305b76235', class: "expand-toggle", onClick: () => this.handleToggleExpand(), title: this.isExpanded ? 'Collapse' : 'Expand' }, index.h("kritzel-icon", { key: '3ff8fec207120e67f43315c6dace72fc2f6bd0f1', name: this.isExpanded ? 'chevron-up' : 'chevron-down' }))), index.h("kritzel-color-palette", { key: '2e29d01a6b5c0e4a8ec347e63b6a2698c282db40', colors: this.tool.palette, selectedColor: this.tool.fontColor, isExpanded: this.isExpanded, onColorChange: event => this.handleColorChange(event) }), index.h("kritzel-font-size", { key: 'c972068f1251d66e756b8de72fbdd1b6002d1daa', selectedSize: this.tool.fontSize, fontFamily: this.tool.fontFamily, onSizeChange: event => this.handleSizeChange(event) })));
246
246
  }
247
247
  };
248
248
  KritzelControlTextConfig.style = kritzelControlTextConfigCss;
@@ -376,13 +376,13 @@ const KritzelControls = class {
376
376
  }
377
377
  render() {
378
378
  const hasNoConfig = this.activeControl?.config === undefined || this.activeControl?.config === null;
379
- return (index.h(index.Host, { key: 'a463310d88265b71097f838bf775abdcabc99225', class: {
379
+ return (index.h(index.Host, { key: 'ab3e5f078d6d197c6e10c9dee180c04ef85281bf', class: {
380
380
  mobile: this.isTouchDevice,
381
- } }, this.isUtilityPanelVisible && (index.h("kritzel-utility-panel", { key: '267e9c26b41a52c655209dbaa8c85cbd72323577', style: {
381
+ } }, this.isUtilityPanelVisible && (index.h("kritzel-utility-panel", { key: '290ceb6f2c46eb7e869a4741dd6600bc7c47bbb4', style: {
382
382
  position: 'absolute',
383
383
  bottom: '56px',
384
384
  left: '12px',
385
- }, onUndo: () => this.kritzelEngine?.undo(), onRedo: () => this.kritzelEngine?.redo(), onDelete: () => this.kritzelEngine?.delete() })), index.h("div", { key: 'c55773245c925e1b972f3e83cb4d8f1c93ebe995', class: "kritzel-controls" }, this.controls.map(control => {
385
+ }, onUndo: () => this.kritzelEngine?.undo(), onRedo: () => this.kritzelEngine?.redo(), onDelete: () => this.kritzelEngine?.delete() })), index.h("div", { key: 'd2590bc56b709e77910e7159296741c8859158d7', class: "kritzel-controls" }, this.controls.map(control => {
386
386
  if (control.type === 'tool') {
387
387
  return (index.h("button", { class: {
388
388
  'kritzel-control': true,
@@ -479,7 +479,7 @@ const KritzelCursorTrail = class {
479
479
  }
480
480
  }
481
481
  render() {
482
- return (index.h(index.Host, { key: '87003b14680b3cbca302e7b31ff57e74cc774e25' }, this.cursorTrailPoints.length > 1 && (index.h("svg", { key: 'aa6460089c9f3157d2dea9396405b14ab8cc1710', class: "cursor-trail-svg", xmlns: "http://www.w3.org/2000/svg", style: {
482
+ return (index.h(index.Host, { key: '10ef620f19d72a8a5c3a12d0d98686bc69308a30' }, this.cursorTrailPoints.length > 1 && (index.h("svg", { key: 'd03403051e53422aaa28d6360aaa9c0391e3ef6a', class: "cursor-trail-svg", xmlns: "http://www.w3.org/2000/svg", style: {
483
483
  position: 'absolute',
484
484
  left: '0',
485
485
  top: '0',
@@ -850,7 +850,7 @@ const KritzelEditor = class {
850
850
  }
851
851
  }
852
852
  render() {
853
- return (index.h(index.Host, { key: 'f4f7cb5fbb6b28bac0735d05c2d1ed788c8ef2a7' }, index.h("kritzel-workspace-manager", { key: 'bef6f248a06b7a6576687a82a5ea3eb81d3340c3', workspaces: this.workspaces, activeWorkspace: this.activeWorkspace, onWorkspaceChange: event => (this.activeWorkspace = event.detail), onIsWorkspaceManagerReady: () => (this.isWorkspaceManagerReady = true) }), index.h("kritzel-engine", { key: '8ee352db87d94c367389059074842148e43d8d11', ref: el => (this.engineRef = el), workspace: this.activeWorkspace, scaleMax: this.scaleMax, scaleMin: this.scaleMin, globalContextMenuItems: this.globalContextMenuItems, objectContextMenuItems: this.objectContextMenuItems, onIsEngineReady: event => this.onEngineReady(event), onWorkspacesChange: event => (this.workspaces = event.detail) }), index.h("kritzel-controls", { key: '3e5bfa0fd473a551ba4ab7a7137aedbb3d22db19', class: { 'keyboard-open': this.isVirtualKeyboardOpen }, style: { display: this.isControlsVisible ? 'flex' : 'none' }, ref: el => (this.controlsRef = el), controls: this.controls, isUtilityPanelVisible: this.isUtilityPanelVisible, onIsControlsReady: () => (this.isControlsReady = true) })));
853
+ return (index.h(index.Host, { key: '8dc4fa4d4c3512d3a0ac40d5ab67566720b8a3e4' }, index.h("kritzel-workspace-manager", { key: 'b7a032b8bb01b27af192719b46a3891037770a28', workspaces: this.workspaces, activeWorkspace: this.activeWorkspace, onWorkspaceChange: event => (this.activeWorkspace = event.detail), onIsWorkspaceManagerReady: () => (this.isWorkspaceManagerReady = true) }), index.h("kritzel-engine", { key: '163c4aea9d07290c89e63931ed4a4cf0184757be', ref: el => (this.engineRef = el), workspace: this.activeWorkspace, scaleMax: this.scaleMax, scaleMin: this.scaleMin, globalContextMenuItems: this.globalContextMenuItems, objectContextMenuItems: this.objectContextMenuItems, onIsEngineReady: event => this.onEngineReady(event), onWorkspacesChange: event => (this.workspaces = event.detail) }), index.h("kritzel-controls", { key: '4c9307c3831f2b179a446265f3226b0ae1541afc', class: { 'keyboard-open': this.isVirtualKeyboardOpen }, style: { display: this.isControlsVisible ? 'flex' : 'none' }, ref: el => (this.controlsRef = el), controls: this.controls, isUtilityPanelVisible: this.isUtilityPanelVisible, onIsControlsReady: () => (this.isControlsReady = true) })));
854
854
  }
855
855
  static get watchers() { return {
856
856
  "isEngineReady": ["onIsEngineReady"],
@@ -866,18 +866,18 @@ class KritzelViewport {
866
866
  startY = 0;
867
867
  constructor(core, host) {
868
868
  this._core = core;
869
- this._core.store.setState('host', host);
870
- this._core.store.setState('viewportWidth', host.clientWidth);
871
- this._core.store.setState('viewportHeight', host.clientHeight);
872
- this._core.store.setState('startX', 0);
873
- this._core.store.setState('startY', 0);
874
- this._core.store.setState('translateX', 0);
875
- this._core.store.setState('translateY', 0);
869
+ this._core.store.state.host = host;
870
+ this._core.store.state.viewportWidth = host.clientWidth;
871
+ this._core.store.state.viewportHeight = host.clientHeight;
872
+ this._core.store.state.startX = 0;
873
+ this._core.store.state.startY = 0;
874
+ this._core.store.state.translateX = 0;
875
+ this._core.store.state.translateY = 0;
876
876
  }
877
877
  handleResize() {
878
- this._core.store.setState('viewportWidth', this._core.store.state.host.clientWidth);
879
- this._core.store.setState('viewportHeight', this._core.store.state.host.clientHeight);
880
- this._core.store.setState('hasViewportChanged', true);
878
+ this._core.store.state.viewportWidth = this._core.store.state.host.clientWidth;
879
+ this._core.store.state.viewportHeight = this._core.store.state.host.clientHeight;
880
+ this._core.store.state.hasViewportChanged = true;
881
881
  this._core.rerender();
882
882
  }
883
883
  handlePointerDown(event) {
@@ -885,16 +885,16 @@ class KritzelViewport {
885
885
  const adjustedClientX = event.clientX - this._core.store.offsetX;
886
886
  const adjustedClientY = event.clientY - this._core.store.offsetY;
887
887
  if (event.button === index$1.KritzelMouseButton.Right) {
888
- this._core.store.setState('isPanning', true);
889
- this._core.store.setState('startX', adjustedClientX);
890
- this._core.store.setState('startY', adjustedClientY);
888
+ this._core.store.state.isPanning = true;
889
+ this._core.store.state.startX = adjustedClientX;
890
+ this._core.store.state.startY = adjustedClientY;
891
891
  }
892
892
  }
893
893
  if (event.pointerType === 'touch') {
894
894
  const activePointers = Array.from(this._core.store.state.pointers.values());
895
895
  if (activePointers.length === 2) {
896
- this._core.store.setState('currentPath', null);
897
- this._core.store.setState('isScaling', true);
896
+ this._core.store.state.currentPath = null;
897
+ this._core.store.state.isScaling = true;
898
898
  const firstTouchX = activePointers[0].clientX - this._core.store.offsetX;
899
899
  const firstTouchY = activePointers[0].clientY - this._core.store.offsetY;
900
900
  const secondTouchX = activePointers[1].clientX - this._core.store.offsetX;
@@ -911,17 +911,17 @@ class KritzelViewport {
911
911
  const hostRect = this._core.store.state.host.getBoundingClientRect();
912
912
  const xRelativeToHost = event.clientX - hostRect.left;
913
913
  const yRelativeToHost = event.clientY - hostRect.top;
914
- this._core.store.setState('pointerX', (xRelativeToHost - this._core.store.state.translateX) / this._core.store.state.scale);
915
- this._core.store.setState('pointerY', (yRelativeToHost - this._core.store.state.translateY) / this._core.store.state.scale);
914
+ this._core.store.state.pointerX = (xRelativeToHost - this._core.store.state.translateX) / this._core.store.state.scale;
915
+ this._core.store.state.pointerY = (yRelativeToHost - this._core.store.state.translateY) / this._core.store.state.scale;
916
916
  if (this._core.store.state.isPanning) {
917
917
  const dx = xRelativeToHost - this._core.store.state.startX;
918
918
  const dy = yRelativeToHost - this._core.store.state.startY;
919
- this._core.store.setState('translateX', this._core.store.state.translateX + dx);
920
- this._core.store.setState('translateY', this._core.store.state.translateY + dy);
921
- this._core.store.setState('startX', xRelativeToHost);
922
- this._core.store.setState('startY', yRelativeToHost);
923
- this._core.store.setState('hasViewportChanged', true);
924
- this._core.store.setState('skipContextMenu', true);
919
+ this._core.store.state.translateX += dx;
920
+ this._core.store.state.translateY += dy;
921
+ this._core.store.state.startX = xRelativeToHost;
922
+ this._core.store.state.startY = yRelativeToHost;
923
+ this._core.store.state.hasViewportChanged = true;
924
+ this._core.store.state.skipContextMenu = true;
925
925
  this._core.rerender();
926
926
  this._core.updateWorkspaceViewport(this._core.store.state.translateX, this._core.store.state.translateY, this._core.store.state.scale);
927
927
  }
@@ -930,8 +930,8 @@ class KritzelViewport {
930
930
  const hostRect = this._core.store.state.host.getBoundingClientRect();
931
931
  const xRelativeToHost = event.clientX - hostRect.left;
932
932
  const yRelativeToHost = event.clientY - hostRect.top;
933
- this._core.store.setState('pointerX', (xRelativeToHost - this._core.store.state.translateX) / this._core.store.state.scale);
934
- this._core.store.setState('pointerY', (yRelativeToHost - this._core.store.state.translateY) / this._core.store.state.scale);
933
+ this._core.store.state.pointerX = (xRelativeToHost - this._core.store.state.translateX) / this._core.store.state.scale;
934
+ this._core.store.state.pointerY = (yRelativeToHost - this._core.store.state.translateY) / this._core.store.state.scale;
935
935
  const activePointers = Array.from(this._core.store.state.pointers.values());
936
936
  if (activePointers.length === 2) {
937
937
  const firstTouchX = activePointers[0].clientX - this._core.store.offsetX;
@@ -944,20 +944,20 @@ class KritzelViewport {
944
944
  const scaleRatio = currentTouchDistance / this.initialTouchDistance;
945
945
  const newScale = this._core.store.state.scale * scaleRatio;
946
946
  if (newScale > this._core.store.state.scaleMax || newScale < this._core.store.state.scaleMin) {
947
- this._core.store.setState('translateX', this._core.store.state.translateX + midpointX - this.startX);
948
- this._core.store.setState('translateY', this._core.store.state.translateY + midpointY - this.startY);
947
+ this._core.store.state.translateX = this._core.store.state.translateX + midpointX - this.startX;
948
+ this._core.store.state.translateY = this._core.store.state.translateY + midpointY - this.startY;
949
949
  }
950
950
  else {
951
951
  const translateXAdjustment = (midpointX - this._core.store.state.translateX) * (scaleRatio - 1);
952
952
  const translateYAdjustment = (midpointY - this._core.store.state.translateY) * (scaleRatio - 1);
953
- this._core.store.setState('translateX', this._core.store.state.translateX + midpointX - this.startX - translateXAdjustment);
954
- this._core.store.setState('translateY', this._core.store.state.translateY + midpointY - this.startY - translateYAdjustment);
955
- this._core.store.setState('scale', newScale);
953
+ this._core.store.state.translateX = this._core.store.state.translateX + midpointX - this.startX - translateXAdjustment;
954
+ this._core.store.state.translateY = this._core.store.state.translateY + midpointY - this.startY - translateYAdjustment;
955
+ this._core.store.state.scale = newScale;
956
956
  this.initialTouchDistance = currentTouchDistance;
957
957
  }
958
958
  this.startX = midpointX;
959
959
  this.startY = midpointY;
960
- this._core.store.setState('hasViewportChanged', true);
960
+ this._core.store.state.hasViewportChanged = true;
961
961
  this._core.rerender();
962
962
  this._core.updateWorkspaceViewport(this._core.store.state.translateX, this._core.store.state.translateY, this._core.store.state.scale);
963
963
  }
@@ -966,12 +966,12 @@ class KritzelViewport {
966
966
  handlePointerUp(event) {
967
967
  if (event.pointerType === 'mouse') {
968
968
  if (this._core.store.state.isPanning) {
969
- this._core.store.setState('isPanning', false);
969
+ this._core.store.state.isPanning = false;
970
970
  this._core.rerender();
971
971
  }
972
972
  }
973
973
  if (event.pointerType === 'touch') {
974
- this._core.store.setState('isScaling', false);
974
+ this._core.store.state.isScaling = false;
975
975
  this._core.rerender();
976
976
  }
977
977
  }
@@ -984,33 +984,52 @@ class KritzelViewport {
984
984
  this.handlePan(event);
985
985
  }
986
986
  }
987
+ centerInViewport(object) {
988
+ const { scale, viewportWidth, viewportHeight } = this._core.store.state;
989
+ const { x, y, width, height } = object.rotatedBoundingBox;
990
+ const objectCenterX = x + width / 2;
991
+ const objectCenterY = y + height / 2;
992
+ this._core.store.state.translateX = viewportWidth / 2 - objectCenterX * scale;
993
+ this._core.store.state.translateY = viewportHeight / 2 - objectCenterY * scale;
994
+ this._core.store.state.hasViewportChanged = true;
995
+ this._core.rerender();
996
+ this._core.updateWorkspaceViewport(this._core.store.state.translateX, this._core.store.state.translateY, this._core.store.state.scale);
997
+ }
998
+ centerFitInViewport(object) {
999
+ const scaleX = this._core.store.state.viewportWidth / (object.rotatedBoundingBox.width * 1.1);
1000
+ const scaleY = this._core.store.state.viewportHeight / (object.rotatedBoundingBox.height * 1.1);
1001
+ const newScale = Math.min(scaleX, scaleY, this._core.store.state.scaleMax);
1002
+ const clampedScale = Math.max(newScale, this._core.store.state.scaleMin);
1003
+ this._core.store.state.scale = clampedScale;
1004
+ this.centerInViewport(object);
1005
+ }
987
1006
  handleZoom(event) {
988
- this._core.store.setState('isScaling', true);
1007
+ this._core.store.state.isScaling = true;
989
1008
  const rect = this._core.store.state.host.getBoundingClientRect();
990
1009
  const xRelativeToHost = event.clientX - rect.left;
991
1010
  const yRelativeToHost = event.clientY - rect.top;
992
- this._core.store.setState('pointerX', (xRelativeToHost - this._core.store.state.translateX) / this._core.store.state.scale);
993
- this._core.store.setState('pointerY', (yRelativeToHost - this._core.store.state.translateY) / this._core.store.state.scale);
1011
+ this._core.store.state.pointerX = (xRelativeToHost - this._core.store.state.translateX) / this._core.store.state.scale;
1012
+ this._core.store.state.pointerY = (yRelativeToHost - this._core.store.state.translateY) / this._core.store.state.scale;
994
1013
  const delta = event.deltaY > 0 ? -this._core.store.state.scaleStep * this._core.store.state.scale : this._core.store.state.scaleStep * this._core.store.state.scale;
995
1014
  const newScale = Math.min(this._core.store.state.scaleMax, Math.max(this._core.store.state.scaleMin, this._core.store.state.scale + delta));
996
1015
  const scaleRatio = newScale / this._core.store.state.scale;
997
1016
  const translateXAdjustment = (xRelativeToHost - this._core.store.state.translateX) * (scaleRatio - 1);
998
1017
  const translateYAdjustment = (yRelativeToHost - this._core.store.state.translateY) * (scaleRatio - 1);
999
- this._core.store.setState('scale', newScale);
1000
- this._core.store.setState('translateX', this._core.store.state.translateX - translateXAdjustment);
1001
- this._core.store.setState('translateY', this._core.store.state.translateY - translateYAdjustment);
1002
- this._core.store.setState('hasViewportChanged', true);
1018
+ this._core.store.state.scale = newScale;
1019
+ this._core.store.state.translateX = this._core.store.state.translateX - translateXAdjustment;
1020
+ this._core.store.state.translateY = this._core.store.state.translateY - translateYAdjustment;
1021
+ this._core.store.state.hasViewportChanged = true;
1003
1022
  this._core.rerender();
1004
1023
  this._core.updateWorkspaceViewport(this._core.store.state.translateX, this._core.store.state.translateY, this._core.store.state.scale);
1005
1024
  setTimeout(() => {
1006
- this._core.store.setState('isScaling', false);
1025
+ this._core.store.state.isScaling = false;
1007
1026
  }, 300);
1008
1027
  }
1009
1028
  handlePan(event) {
1010
1029
  const panSpeed = 0.8;
1011
- this._core.store.setState('translateX', this._core.store.state.translateX - event.deltaX * panSpeed);
1012
- this._core.store.setState('translateY', this._core.store.state.translateY - event.deltaY * panSpeed);
1013
- this._core.store.setState('hasViewportChanged', true);
1030
+ this._core.store.state.translateX = this._core.store.state.translateX - event.deltaX * panSpeed;
1031
+ this._core.store.state.translateY = this._core.store.state.translateY - event.deltaY * panSpeed;
1032
+ this._core.store.state.hasViewportChanged = true;
1014
1033
  this._core.rerender();
1015
1034
  this._core.updateWorkspaceViewport(this._core.store.state.translateX, this._core.store.state.translateY, this._core.store.state.scale);
1016
1035
  }
@@ -1042,8 +1061,8 @@ class KritzelKeyHandler extends index$1.KritzelBaseHandler {
1042
1061
  },
1043
1062
  { key: 'v', ctrl: true, condition: c => !!c.store.state.copiedObjects && !c.store.state.activeText, action: c => c.paste() },
1044
1063
  // Text editing
1045
- { key: 'a', ctrl: true, condition: c => !!c.store.state.activeText, action: c => c.store.state.activeText.selectAll() },
1046
- { key: 'v', ctrl: true, condition: c => !!c.store.state.activeText, action: c => c.store.state.activeText.insertFromClipboard() },
1064
+ // { key: 'a', ctrl: true, condition: c => !!c.store.state.activeText, action: c => c.store.state.activeText.selectAll() },
1065
+ // { key: 'v', ctrl: true, condition: c => !!c.store.state.activeText, action: c => c.store.state.activeText.insertFromClipboard() },
1047
1066
  // Object layering
1048
1067
  { key: '+', ctrl: true, condition: c => !!c.store.state.selectionGroup, action: c => c.bringForward() },
1049
1068
  { key: '-', ctrl: true, condition: c => !!c.store.state.selectionGroup, action: c => c.sendBackward() },
@@ -1060,7 +1079,7 @@ class KritzelKeyHandler extends index$1.KritzelBaseHandler {
1060
1079
  toolInstance.onActivate();
1061
1080
  }
1062
1081
  handleKeyDown(event) {
1063
- this._core.store.setState('isCtrlKeyPressed', event.ctrlKey);
1082
+ this._core.store.state.isCtrlKeyPressed = event.ctrlKey;
1064
1083
  const shortcut = this.shortcuts.find(s => s.key === event.key && !!s.ctrl === event.ctrlKey && !!s.shift === event.shiftKey && (!s.condition || s.condition(this._core)));
1065
1084
  if (shortcut) {
1066
1085
  event.preventDefault();
@@ -1068,7 +1087,7 @@ class KritzelKeyHandler extends index$1.KritzelBaseHandler {
1068
1087
  }
1069
1088
  }
1070
1089
  handleKeyUp(event) {
1071
- this._core.store.setState('isCtrlKeyPressed', event.ctrlKey);
1090
+ this._core.store.state.isCtrlKeyPressed = event.ctrlKey;
1072
1091
  }
1073
1092
  }
1074
1093
 
@@ -1085,23 +1104,30 @@ class KritzelContextMenuHandler extends index$1.KritzelBaseHandler {
1085
1104
  return;
1086
1105
  }
1087
1106
  if (this._core.store.state.skipContextMenu) {
1088
- this._core.store.setState('skipContextMenu', false);
1107
+ this._core.store.state.skipContextMenu = false;
1089
1108
  return;
1090
1109
  }
1110
+ const selectionTool = this._core.store.state.activeTool;
1111
+ selectionTool?.moveHandler?.cancelPendingDrag();
1112
+ if (this._core.store.state.selectionBox) {
1113
+ this._core.store.state.objectsMap.remove(object => object instanceof index$1.KrtizelSelectionBox);
1114
+ this._core.store.state.selectionBox = null;
1115
+ this._core.store.state.isSelecting = false;
1116
+ }
1091
1117
  const selectedObject = this._core.getObjectFromPointerEvent(event, '.object');
1092
- if (selectedObject && !(selectedObject instanceof index$1.KritzelSelectionGroup)) {
1118
+ if (selectedObject && !(selectedObject instanceof index$1.KritzelSelectionGroup) && !(selectedObject instanceof index$1.KrtizelSelectionBox)) {
1093
1119
  const selectionGroup = index$1.KritzelSelectionGroup.create(this._core);
1094
1120
  selectionGroup.addOrRemove(selectedObject);
1095
1121
  selectionGroup.isSelected = true;
1096
1122
  selectionGroup.rotation = selectedObject.rotation;
1097
- this._core.store.setState('isSelecting', false);
1123
+ this._core.store.state.isSelecting = false;
1098
1124
  const batch = new index$1.BatchCommand(this._core, this, [
1099
1125
  new index$1.RemoveSelectionGroupCommand(this._core, this._core.store.state.selectionGroup),
1100
1126
  new index$1.AddSelectionGroupCommand(this._core, this, selectionGroup),
1101
1127
  ]);
1102
1128
  this._core.history.executeCommand(batch);
1103
1129
  }
1104
- this._core.store.setState('contextMenuItems', this._core.store.state.selectionGroup ? this.objectContextMenuItems : this.globalContextMenuItems);
1130
+ this._core.store.state.contextMenuItems = this._core.store.state.selectionGroup ? this.objectContextMenuItems : this.globalContextMenuItems;
1105
1131
  let x = event.clientX - this._core.store.offsetX;
1106
1132
  let y = event.clientY - this._core.store.offsetY;
1107
1133
  const menuWidthEstimate = 150;
@@ -1115,10 +1141,10 @@ class KritzelContextMenuHandler extends index$1.KritzelBaseHandler {
1115
1141
  }
1116
1142
  x = Math.max(margin, x);
1117
1143
  y = Math.max(margin, y);
1118
- this._core.store.setState('contextMenuX', x);
1119
- this._core.store.setState('contextMenuY', y);
1120
- this._core.store.setState('isContextMenuVisible', true);
1121
- this._core.store.setState('isEnabled', false);
1144
+ this._core.store.state.contextMenuX = x;
1145
+ this._core.store.state.contextMenuY = y;
1146
+ this._core.store.state.isContextMenuVisible = true;
1147
+ this._core.store.state.isEnabled = false;
1122
1148
  this._core.rerender();
1123
1149
  }
1124
1150
  }
@@ -1439,14 +1465,14 @@ class UpdateViewportCommand extends index$1.KritzelBaseCommand {
1439
1465
  };
1440
1466
  }
1441
1467
  execute() {
1442
- this._core.store.setState('scale', this.currentViewport.scale);
1443
- this._core.store.setState('translateX', this.currentViewport.translateX);
1444
- this._core.store.setState('translateY', this.currentViewport.translateY);
1468
+ this._core.store.state.scale = this.currentViewport.scale;
1469
+ this._core.store.state.translateX = this.currentViewport.translateX;
1470
+ this._core.store.state.translateY = this.currentViewport.translateY;
1445
1471
  }
1446
1472
  undo() {
1447
- this._core.store.setState('scale', this.previousViewport.scale);
1448
- this._core.store.setState('translateX', this.previousViewport.translateX);
1449
- this._core.store.setState('translateY', this.previousViewport.translateY);
1473
+ this._core.store.state.scale = this.previousViewport.scale;
1474
+ this._core.store.state.translateX = this.previousViewport.translateX;
1475
+ this._core.store.state.translateY = this.previousViewport.translateY;
1450
1476
  }
1451
1477
  }
1452
1478
 
@@ -1544,7 +1570,7 @@ class KritzelHistory {
1544
1570
  if (this._core.store.state.hasViewportChanged) {
1545
1571
  const command = new UpdateViewportCommand(this._core, this, this.previousViewport);
1546
1572
  command.undo();
1547
- this._core.store.setState('hasViewportChanged', false);
1573
+ this._core.store.state.hasViewportChanged = false;
1548
1574
  this._core.rerender();
1549
1575
  return;
1550
1576
  }
@@ -1555,7 +1581,7 @@ class KritzelHistory {
1555
1581
  console.info('undo', command);
1556
1582
  this.redoStack.add(command);
1557
1583
  }
1558
- this._core.store.setState('copiedObjects', null);
1584
+ this._core.store.state.copiedObjects = null;
1559
1585
  this._core.rerender();
1560
1586
  }
1561
1587
  redo() {
@@ -1575,7 +1601,7 @@ class KritzelHistory {
1575
1601
  if (this.redoStack.isEmpty() === false) {
1576
1602
  this.redoStack.clear();
1577
1603
  }
1578
- this._core.store.setState('hasViewportChanged', false);
1604
+ this._core.store.state.hasViewportChanged = false;
1579
1605
  this.previousViewport = {
1580
1606
  scale: this._core.store.state.scale,
1581
1607
  scaleStep: this._core.store.state.scaleStep,
@@ -1635,11 +1661,14 @@ class KritzelStore {
1635
1661
  return this._state;
1636
1662
  }
1637
1663
  get currentZIndex() {
1638
- return this._state.objectsMap.filter(o => !(o instanceof index$1.KritzelSelectionGroup) && !(o instanceof index$1.KrtizelSelectionBox)).length;
1664
+ return Math.max(0, ...this._state.objectsMap.filter(o => !(o instanceof index$1.KritzelSelectionGroup) && !(o instanceof index$1.KrtizelSelectionBox)).map(o => o.zIndex)) + 1;
1639
1665
  }
1640
1666
  get allObjects() {
1641
1667
  return this._state.objectsMap.allObjects();
1642
1668
  }
1669
+ get allNonSelectionObjects() {
1670
+ return this._state.objectsMap.allObjects().filter(o => !(o instanceof index$1.KritzelSelectionGroup) && !(o instanceof index$1.KrtizelSelectionBox));
1671
+ }
1643
1672
  get selectedObjects() {
1644
1673
  return this.allObjects.filter(o => !(o instanceof index$1.KritzelSelectionGroup)).filter(o => o.isSelected);
1645
1674
  }
@@ -1713,18 +1742,21 @@ class KritzelCore {
1713
1742
  const workspaces = await this.getWorkspaces();
1714
1743
  const mostRecentWorkspace = [...workspaces].sort((a, b) => b.updatedAt.getTime() - a.updatedAt.getTime())[0];
1715
1744
  const fallbackWorkspace = new index$1.KritzelWorkspace(index$1.ObjectHelper.generateUUID(), 'New Workspace');
1716
- this._store.setState('activeWorkspace', workspace ?? mostRecentWorkspace ?? fallbackWorkspace);
1717
- const isExistingWorkspace = await this.getWorkspace(this._store.state.activeWorkspace.id);
1718
- if (isExistingWorkspace) {
1745
+ const candidateWorkspace = workspace ?? mostRecentWorkspace ?? fallbackWorkspace;
1746
+ const existingWorkspace = await this.getWorkspace(candidateWorkspace.id);
1747
+ if (existingWorkspace) {
1748
+ this._store.state.activeWorkspace = existingWorkspace;
1719
1749
  await this.updateWorkspace(this._store.state.activeWorkspace);
1720
1750
  }
1721
1751
  else {
1752
+ this._store.state.activeWorkspace = candidateWorkspace;
1722
1753
  await this.createWorkspace(this._store.state.activeWorkspace);
1723
1754
  }
1724
- this._store.setState('workspaces', await this.getWorkspaces());
1725
- this._store.setState('translateX', this._store.state.activeWorkspace.viewport.translateX);
1726
- this._store.setState('translateY', this._store.state.activeWorkspace.viewport.translateY);
1727
- this._store.setState('scale', this._store.state.activeWorkspace.viewport.scale);
1755
+ this._store.state.workspaces = await this.getWorkspaces();
1756
+ const viewport = this._store.state.activeWorkspace.viewport ?? { translateX: 0, translateY: 0, scale: 1 };
1757
+ this._store.state.translateX = viewport.translateX ?? 0;
1758
+ this._store.state.translateY = viewport.translateY ?? 0;
1759
+ this._store.state.scale = viewport.scale ?? 1;
1728
1760
  await this.initializeWorkspaceObjects(this._store.state.activeWorkspace.id);
1729
1761
  }
1730
1762
  async initializeWorkspaceObjects(workspaceId) {
@@ -1819,7 +1851,7 @@ class KritzelCore {
1819
1851
  const index = workspaces.findIndex(w => w.id === workspace.id);
1820
1852
  if (index !== -1) {
1821
1853
  workspaces[index] = workspace;
1822
- this._store.setState('workspaces', workspaces);
1854
+ this._store.state.workspaces = workspaces;
1823
1855
  }
1824
1856
  }
1825
1857
  async deleteWorkspace(workspace) {
@@ -1829,7 +1861,7 @@ class KritzelCore {
1829
1861
  const objectRange = IDBKeyRange.bound([workspace.id], [workspace.id, '\uffff']);
1830
1862
  await this._database.deleteByRange('objects', objectRange);
1831
1863
  await this._database.delete('workspaces', workspace.id);
1832
- this._store.setState('workspaces', this._store.state.workspaces.filter(ws => ws.id !== workspace.id));
1864
+ this._store.state.workspaces = this._store.state.workspaces.filter(ws => ws.id !== workspace.id);
1833
1865
  }
1834
1866
  rerender() {
1835
1867
  if (this._kritzelEngine) {
@@ -1866,18 +1898,27 @@ class KritzelCore {
1866
1898
  }
1867
1899
  }
1868
1900
  copy() {
1869
- this._store.setState('copiedObjects', this._store.state.selectionGroup.copy());
1901
+ this._store.state.copiedObjects = this._store.state.selectionGroup.copy();
1870
1902
  }
1871
1903
  paste(x, y) {
1872
1904
  const copiedObjects = this._store.state.copiedObjects;
1873
1905
  copiedObjects.isSelected = true;
1874
- this._store.setState('copiedObjects', copiedObjects);
1906
+ this._store.state.copiedObjects = copiedObjects;
1875
1907
  const adjustedX = x !== undefined ? x : this._store.state.copiedObjects.translateX + 25 / this._store.state.scale;
1876
1908
  const adjustedY = y !== undefined ? y : this._store.state.copiedObjects.translateY + 25 / this._store.state.scale;
1877
1909
  this._store.state.copiedObjects.updatePosition(adjustedX, adjustedY);
1910
+ this._store.state.copiedObjects.updateZIndices(this._store.currentZIndex);
1878
1911
  const activeWorkspace = this._store.state.activeWorkspace;
1879
- this.store.state.copiedObjects.updateWorkspaceId(activeWorkspace.id);
1880
- this.store.state.copiedObjects.updateZIndices(this.store.currentZIndex);
1912
+ if (this.store.state.copiedObjects.workspaceId !== activeWorkspace.id) {
1913
+ this.store.state.copiedObjects.updateWorkspaceId(activeWorkspace.id);
1914
+ if (x !== undefined && y !== undefined) {
1915
+ this._store.state.copiedObjects.updatePosition(x, y);
1916
+ }
1917
+ else {
1918
+ this.store.state.copiedObjects.centerInViewport();
1919
+ }
1920
+ this.engine.viewport.centerFitInViewport(copiedObjects);
1921
+ }
1881
1922
  const commands = [];
1882
1923
  let previousSelectionGroup = null;
1883
1924
  if (this._store.state.selectionGroup !== null) {
@@ -1888,13 +1929,14 @@ class KritzelCore {
1888
1929
  const addCopiedObjectsAsSelectionGroupCommand = new index$1.AddSelectionGroupCommand(this, this, this._store.state.copiedObjects, previousSelectionGroup);
1889
1930
  commands.push(...addCopiedObjectsCommands, addCopiedObjectsAsSelectionGroupCommand);
1890
1931
  this.history.executeCommand(new index$1.BatchCommand(this, this, commands));
1891
- this._store.setState('isSelecting', false);
1892
- this._store.setState('copiedObjects', this._store.state.selectionGroup.copy());
1932
+ this._store.state.isSelecting = false;
1933
+ this._store.state.copiedObjects = this._store.state.selectionGroup.copy();
1893
1934
  this._store.setState('activeTool', index$1.KritzelToolRegistry.getTool('selection'));
1894
1935
  }
1895
1936
  bringForward(object) {
1896
- const max = this._store.allObjects.length + 1;
1897
1937
  const objects = object ? [object] : this._store.state.selectionGroup.objects;
1938
+ const allNonSelectionObjectsWithoutCurrent = this._store.allNonSelectionObjects.filter(o => objects.findIndex(obj => obj.id === o.id) === -1);
1939
+ const max = allNonSelectionObjectsWithoutCurrent.length > 0 ? Math.max(...allNonSelectionObjectsWithoutCurrent.map(obj => obj.zIndex)) + 1 : 0;
1898
1940
  const increaseZIndexCommands = objects.map(obj => {
1899
1941
  if (obj.zIndex === max) {
1900
1942
  return;
@@ -1904,8 +1946,9 @@ class KritzelCore {
1904
1946
  this.history.executeCommand(new index$1.BatchCommand(this, this, increaseZIndexCommands));
1905
1947
  }
1906
1948
  sendBackward(object) {
1907
- const min = 0;
1908
1949
  const objects = object ? [object] : this._store.state.selectionGroup.objects;
1950
+ const allNonSelectionObjectsWithoutCurrent = this._store.allNonSelectionObjects.filter(o => objects.findIndex(obj => obj.id === o.id) === -1);
1951
+ const min = allNonSelectionObjectsWithoutCurrent.length > 0 ? Math.min(...allNonSelectionObjectsWithoutCurrent.map(obj => obj.zIndex)) - 1 : 0;
1909
1952
  const decreaseZIndexCommands = objects.map(obj => {
1910
1953
  if (obj.zIndex === min) {
1911
1954
  return;
@@ -1915,16 +1958,18 @@ class KritzelCore {
1915
1958
  this.history.executeCommand(new index$1.BatchCommand(this, this, decreaseZIndexCommands));
1916
1959
  }
1917
1960
  bringToFront(object) {
1918
- const max = Math.max(...this._store.allObjects.map(obj => obj.zIndex)) + 1;
1919
1961
  const objects = object ? [object] : this._store.state.selectionGroup.objects;
1962
+ const allNonSelectionObjectsWithoutCurrent = this._store.allNonSelectionObjects.filter(o => objects.findIndex(obj => obj.id === o.id) === -1);
1963
+ const max = Math.max(...allNonSelectionObjectsWithoutCurrent.map(obj => obj.zIndex)) + 1;
1920
1964
  const increaseZIndexCommands = objects.map(obj => {
1921
1965
  return new index$1.UpdateObjectCommand(this, this, obj, { zIndex: max });
1922
1966
  });
1923
1967
  this.history.executeCommand(new index$1.BatchCommand(this, this, increaseZIndexCommands));
1924
1968
  }
1925
1969
  sendToBack(object) {
1926
- const min = Math.min(...this._store.allObjects.map(obj => obj.zIndex)) - 1;
1927
1970
  const objects = object ? [object] : this._store.state.selectionGroup.objects;
1971
+ const allNonSelectionObjectsWithoutCurrent = this._store.allNonSelectionObjects.filter(o => objects.findIndex(obj => obj.id === o.id) === -1);
1972
+ const min = Math.min(...allNonSelectionObjectsWithoutCurrent.map(obj => obj.zIndex)) - 1;
1928
1973
  const decreaseZIndexCommands = objects.map(obj => {
1929
1974
  return new index$1.UpdateObjectCommand(this, this, obj, { zIndex: min });
1930
1975
  });
@@ -1940,7 +1985,7 @@ class KritzelCore {
1940
1985
  selectionGroup.addOrRemove(obj);
1941
1986
  });
1942
1987
  selectionGroup.isSelected = true;
1943
- this._store.setState('selectionGroup', selectionGroup);
1988
+ this._store.state.selectionBox = selectionGroup;
1944
1989
  if (objects.length === 1) {
1945
1990
  selectionGroup.rotation = selectionGroup.objects[0].rotation;
1946
1991
  }
@@ -1957,7 +2002,7 @@ class KritzelCore {
1957
2002
  selectionGroup.addOrRemove(obj);
1958
2003
  });
1959
2004
  selectionGroup.isSelected = true;
1960
- this._store.setState('isSelecting', false);
2005
+ this._store.state.isSelecting = false;
1961
2006
  if (objectsInViewport.length === 1) {
1962
2007
  selectionGroup.rotation = selectionGroup.objects[0].rotation;
1963
2008
  }
@@ -1968,18 +2013,25 @@ class KritzelCore {
1968
2013
  clearSelection() {
1969
2014
  const command = new index$1.RemoveSelectionGroupCommand(this, this._store.state.selectionGroup);
1970
2015
  this.history.executeCommand(command);
1971
- this._store.setState('selectionGroup', null);
1972
- this._store.setState('selectionBox', null);
1973
- this._store.setState('isSelecting', false);
1974
- this._store.setState('isResizeHandleSelected', false);
1975
- this._store.setState('isRotationHandleSelected', false);
2016
+ this._store.state.selectionGroup = null;
2017
+ this._store.state.selectionBox = null;
2018
+ this._store.state.isSelecting = false;
2019
+ this._store.state.isResizeHandleSelected = false;
2020
+ this._store.state.isRotationHandleSelected = false;
1976
2021
  this.rerender();
1977
2022
  }
1978
2023
  resetActiveText() {
1979
- if (this._store.state.activeText && this._store.state.activeText.value === ' ') {
1980
- this.deleteObject(this._store.state.activeText.id, true);
2024
+ if (this._store.state.activeText) {
2025
+ if (this._store.state.activeText.isEmpty) {
2026
+ console.log('Deleting empty text object', this._store.state.activeText.id);
2027
+ this.deleteObject(this._store.state.activeText.id, true);
2028
+ }
2029
+ else {
2030
+ console.log('Saving active text object before resetting', this._store.state.activeText.id);
2031
+ this._store.state.activeText.save();
2032
+ }
1981
2033
  }
1982
- this._store.setState('activeText', null);
2034
+ this._store.state.activeText = null;
1983
2035
  }
1984
2036
  getObjectFromPointerEvent(event, selector = '.object') {
1985
2037
  const shadowRoot = this._store.state.host?.shadowRoot;
@@ -2034,7 +2086,7 @@ class KritzelCore {
2034
2086
  }
2035
2087
  }
2036
2088
 
2037
- 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}.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}textarea{all:unset;box-sizing:border-box;outline:none !important;border:none !important;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}";
2089
+ 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{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}";
2038
2090
 
2039
2091
  const KritzelEngine = class {
2040
2092
  get host() { return index.getElement(this); }
@@ -2052,10 +2104,10 @@ const KritzelEngine = class {
2052
2104
  if (newValue > ABSOLUTE_SCALE_MAX) {
2053
2105
  console.warn(`scaleMax cannot be greater than ${ABSOLUTE_SCALE_MAX}.`);
2054
2106
  this.scaleMax = ABSOLUTE_SCALE_MAX;
2055
- this.core.store.setState('scaleMax', this.scaleMax);
2107
+ this.core.store.state.scaleMax = this.scaleMax;
2056
2108
  }
2057
2109
  else {
2058
- this.core.store.setState('scaleMax', newValue);
2110
+ this.core.store.state.scaleMax = newValue;
2059
2111
  }
2060
2112
  }
2061
2113
  scaleMin = ABSOLUTE_SCALE_MIN;
@@ -2063,10 +2115,10 @@ const KritzelEngine = class {
2063
2115
  if (newValue < ABSOLUTE_SCALE_MIN) {
2064
2116
  console.warn(`scaleMin cannot be less than ${ABSOLUTE_SCALE_MIN}.`);
2065
2117
  this.scaleMin = ABSOLUTE_SCALE_MIN;
2066
- this.core.store.setState('scaleMin', this.scaleMin);
2118
+ this.core.store.state.scaleMin = this.scaleMin;
2067
2119
  }
2068
2120
  else {
2069
- this.core.store.setState('scaleMin', newValue);
2121
+ this.core.store.state.scaleMin = newValue;
2070
2122
  }
2071
2123
  }
2072
2124
  isEngineReady;
@@ -2173,11 +2225,11 @@ const KritzelEngine = class {
2173
2225
  tool?.onActivate();
2174
2226
  }
2175
2227
  async disable() {
2176
- this.core.store.setState('isEnabled', false);
2228
+ this.core.store.state.isEnabled = false;
2177
2229
  this.core.rerender();
2178
2230
  }
2179
2231
  async enable() {
2180
- this.core.store.setState('isEnabled', true);
2232
+ this.core.store.state.isEnabled = true;
2181
2233
  this.core.rerender();
2182
2234
  }
2183
2235
  async delete() {
@@ -2209,10 +2261,10 @@ const KritzelEngine = class {
2209
2261
  }
2210
2262
  async hideContextMenu() {
2211
2263
  this.core.store.state.pointers.clear();
2212
- this.core.store.setState('isContextMenuVisible', false);
2213
- this.core.store.setState('selectionBox', null);
2214
- this.core.store.setState('isSelecting', false);
2215
- this.core.store.setState('isEnabled', true);
2264
+ this.core.store.state.isContextMenuVisible = false;
2265
+ this.core.store.state.selectionBox = null;
2266
+ this.core.store.state.isSelecting = false;
2267
+ this.core.store.state.isEnabled = true;
2216
2268
  this.core.rerender();
2217
2269
  }
2218
2270
  async getObjectById(id) {
@@ -2319,7 +2371,7 @@ const KritzelEngine = class {
2319
2371
  await this.core.initializeWorkspace(this.workspace);
2320
2372
  this._registerStateChangeListeners();
2321
2373
  if (this.core.store.state.isReady === false) {
2322
- this.core.store.setState('isReady', true);
2374
+ this.core.store.state.isReady = true;
2323
2375
  this.isEngineReady.emit(this.core.store.state);
2324
2376
  }
2325
2377
  }
@@ -2330,8 +2382,8 @@ const KritzelEngine = class {
2330
2382
  if (!(activeTool instanceof index$1.KritzelSelectionTool)) {
2331
2383
  this.core.clearSelection();
2332
2384
  }
2333
- this.core.store.setState('skipContextMenu', false);
2334
- this.core.store.setState('copiedObjects', null);
2385
+ this.core.store.state.skipContextMenu = false;
2386
+ this.core.store.state.copiedObjects = null;
2335
2387
  this.activeToolChange.emit(activeTool);
2336
2388
  index$1.KritzelKeyboardHelper.forceHideKeyboard();
2337
2389
  }
@@ -2340,7 +2392,9 @@ const KritzelEngine = class {
2340
2392
  const baseHandleSizePx = computedStyle.getPropertyValue('--kritzel-selection-handle-size').trim() || '6px';
2341
2393
  const baseHandleSize = parseFloat(baseHandleSizePx);
2342
2394
  const baseHandleTouchSize = baseHandleSize * 2 < 14 ? 14 : baseHandleSize;
2343
- return (index.h(index.Host, { key: 'b65542448b46000bfb0f467b503b2c9d9e603eaa' }, index.h("div", { key: '8197e8fe5e768f89d5861cc04d4343d5753b8f88', class: "debug-panel", style: { display: this.core.store.state.debugInfo.showViewportInfo ? 'block' : 'none' } }, index.h("div", { key: '97b720f029fb8034453f28df04779011d641105e' }, "ActiveWorkspaceId: ", this.core.store.state?.activeWorkspace?.id), index.h("div", { key: 'e4601378a7d3dc92e66edcd5b7ff0022f890c1e3' }, "ActiveWorkspaceName: ", this.core.store.state?.activeWorkspace?.name), index.h("div", { key: '2506d664411df86fd4d59ee703dc1487c7394f15' }, "TranslateX: ", this.core.store.state?.translateX), index.h("div", { key: 'cada25c03ba66f54433cd09b83d9826f79c94c43' }, "TranslateY: ", this.core.store.state?.translateY), index.h("div", { key: '91853038c5c83116e9ffc296e9acc3b525bbed21' }, "ViewportWidth: ", this.core.store.state?.viewportWidth), index.h("div", { key: '0d3f9d47a5c5f9adab73a44436b214b537f5dd57' }, "ViewportHeight: ", this.core.store.state?.viewportHeight), index.h("div", { key: '079f2314aed15ea9b95ace2be564ff8e0f60acaa' }, "Scale: ", this.core.store.state?.scale), index.h("div", { key: '7d83d8ef32077e9b8d3bd1ddf23e5e1bcb187d0c' }, "ActiveTool: ", this.core.store.state?.activeTool?.name), index.h("div", { key: 'a63d135300e0a24b20e4ea4b631e123a0c492947' }, "HasViewportChanged: ", this.core.store.state?.hasViewportChanged ? 'true' : 'false'), index.h("div", { key: '258d3b009ea75024fc0d2d06000c7c4228312640' }, "IsEnabled: ", this.core.store.state?.isEnabled ? 'true' : 'false'), index.h("div", { key: 'c4dcff04abf12c675d995bad82407d0f5047ebd7' }, "IsScaling: ", this.core.store.state?.isScaling ? 'true' : 'false'), index.h("div", { key: 'fcd7bc6d221d0d3eb294ec7f6526a604ccc539d2' }, "IsPanning: ", this.core.store.state?.isPanning ? 'true' : 'false'), index.h("div", { key: '416ac549246b7a43bf644c536acbff1fb292eb52' }, "IsSelecting: ", this.isSelecting ? 'true' : 'false'), index.h("div", { key: '7d061a0515e33ce836bb550250330c4e2819bc14' }, "IsSelectionActive: ", this.isSelectionActive ? 'true' : 'false'), index.h("div", { key: '1debb3ee3e6a8297d427d09f61c8df8827bcfa37' }, "IsResizeHandleSelected: ", this.core.store.state.isResizeHandleSelected ? 'true' : 'false'), index.h("div", { key: '7d0fbcbc3e4c40ba21d144afd7d7b56b14227ddc' }, "IsRotationHandleSelected: ", this.core.store.state.isRotationHandleSelected ? 'true' : 'false'), index.h("div", { key: '90f5c8d1cf60eb90bb5d136d3457a97d831e361c' }, "IsDrawing: ", this.core.store.state.isDrawing ? 'true' : 'false'), index.h("div", { key: '122a2ad39d27d6f242a286bb2a8298687ab8cbb2' }, "IsWriting: ", this.core.store.state.isWriting ? 'true' : 'false'), index.h("div", { key: 'f5515be35f5037ec256198f2f916c61b78ab4ec2' }, "PointerX: ", this.core.store.state?.pointerX), index.h("div", { key: '2c16ecb22f4063450ef7d17be93ec1a0434a5abd' }, "PointerY: ", this.core.store.state?.pointerY), index.h("div", { key: '69b531a94a9b7430d70ce80ef3247211c67a516e' }, "SelectedObjects: ", this.core.store.state.selectionGroup?.objects.length || 0)), index.h("div", { key: '52b6e44b6fb2b59743f3c48fb1cc2616b19308c7', id: "origin", class: "origin", style: {
2395
+ const viewportCenterX = this.core.store.state.viewportWidth / 2 + this.core.store.state.translateX;
2396
+ const viewportCenterY = this.core.store.state.viewportHeight / 2 + this.core.store.state.translateY;
2397
+ return (index.h(index.Host, { key: 'caabd1ecbf2faccdf7fa50d087a8957df4dd1039' }, index.h("div", { key: 'd757e7133ed9dd190c17c383fb716f760f2b3906', class: "debug-panel", style: { display: this.core.store.state.debugInfo.showViewportInfo ? 'block' : 'none' } }, index.h("div", { key: '00ced12dd956b6eecff7ac80429c0fd05cc7d1c3' }, "ActiveWorkspaceId: ", this.core.store.state?.activeWorkspace?.id), index.h("div", { key: '771f3269627fbe1ef962027f017cf6bdec7bcf8f' }, "ActiveWorkspaceName: ", this.core.store.state?.activeWorkspace?.name), index.h("div", { key: '0e49a60afdfb776a61f46b53bd6488786778bf77' }, "TranslateX: ", this.core.store.state?.translateX), index.h("div", { key: 'e0438479bc9e950ef2cbe88ed0aa0b8ec1888890' }, "TranslateY: ", this.core.store.state?.translateY), index.h("div", { key: '41d7261ed6b893a97fefb4bb6b199ffea51bd5fe' }, "ViewportWidth: ", this.core.store.state?.viewportWidth), index.h("div", { key: '7b6470008968eeebc5097252b3b9e3d172fd5d22' }, "ViewportHeight: ", this.core.store.state?.viewportHeight), index.h("div", { key: '4012ebdc3234ee2775021b38f385dfa0917736cb' }, "Scale: ", this.core.store.state?.scale), index.h("div", { key: '964d26a0ff4ff93dfa1cc928330c4fbdb0ec9b3d' }, "ActiveTool: ", this.core.store.state?.activeTool?.name), index.h("div", { key: 'cd68a81778d3e0f83f9453cd813538b2223541e8' }, "HasViewportChanged: ", this.core.store.state?.hasViewportChanged ? 'true' : 'false'), index.h("div", { key: '2ea80f3b4216a5e3d727c6c94d8b1782fbde80eb' }, "IsEnabled: ", this.core.store.state?.isEnabled ? 'true' : 'false'), index.h("div", { key: '02966d69182e95a8e91d5252f3dcfc19237caafd' }, "IsScaling: ", this.core.store.state?.isScaling ? 'true' : 'false'), index.h("div", { key: '85c06265f3af2b793d1827a40bb74b8837690ce3' }, "IsPanning: ", this.core.store.state?.isPanning ? 'true' : 'false'), index.h("div", { key: '1a2847a815fabc37cae3b7659844975df0c79a81' }, "IsSelecting: ", this.isSelecting ? 'true' : 'false'), index.h("div", { key: 'd1482aa165ed6b430ec0e640971c47e233103e87' }, "IsSelectionActive: ", this.isSelectionActive ? 'true' : 'false'), index.h("div", { key: '3534e455918183d822374edbc80b621939100bd1' }, "IsResizeHandleSelected: ", this.core.store.state.isResizeHandleSelected ? 'true' : 'false'), index.h("div", { key: '7b061a4b08956660ee305316eea2e1d13d66d5de' }, "IsRotationHandleSelected: ", this.core.store.state.isRotationHandleSelected ? 'true' : 'false'), index.h("div", { key: '61998d0f4ffc65f5bb155dfe434a3a07667ca5ee' }, "IsDrawing: ", this.core.store.state.isDrawing ? 'true' : 'false'), index.h("div", { key: 'bdaeb0af59e844351eb46caf7bbe7e246174ccfe' }, "IsWriting: ", this.core.store.state.isWriting ? 'true' : 'false'), index.h("div", { key: '47518514eb67c486583ee61e6747104b4720924a' }, "PointerX: ", this.core.store.state?.pointerX), index.h("div", { key: '9b2ef1c30ecb09bc7df7f765e099f87ea836d697' }, "PointerY: ", this.core.store.state?.pointerY), index.h("div", { key: '72a65218942809918fb5fa1978af83f9442c3ed8' }, "SelectedObjects: ", this.core.store.state.selectionGroup?.objects.length || 0), index.h("div", { key: '1f2ad6b79f28306becd7e83f21ca877c7d15941d' }, "ViewportCenter: (", viewportCenterX.toFixed(2), ", ", viewportCenterY.toFixed(2), ")")), index.h("div", { key: 'ae8afa17ce2a1c0a06a3579091d6f1616fe9b9a7', id: "origin", class: "origin", style: {
2344
2398
  transform: `matrix(${this.core.store.state?.scale}, 0, 0, ${this.core.store.state?.scale}, ${this.core.store.state?.translateX}, ${this.core.store.state?.translateY})`,
2345
2399
  } }, this.core.store.state.objectsMap.allObjects()?.map(object => {
2346
2400
  return (index.h("div", { key: object.id, style: {
@@ -2378,22 +2432,16 @@ const KritzelEngine = class {
2378
2432
  height: '100%',
2379
2433
  userSelect: 'none',
2380
2434
  pointerEvents: 'none',
2381
- }, draggable: false, onDragStart: e => e.preventDefault() })), KritzelClassHelper.isInstanceOf(object, 'KritzelText') && (index.h("textarea", { ref: el => (el ? object.mount(el) : object.unmount()), value: object.value, onKeyDown: event => object.handleKeyDown(event), onInput: event => object.handleInput(event), rows: object.rows, style: {
2382
- width: '100%',
2383
- height: '100%',
2384
- color: object.fontColor,
2385
- fontSize: object.fontSize?.toString() + 'px',
2386
- fontFamily: object.fontFamily,
2387
- border: 'none',
2388
- outline: 'none',
2389
- resize: 'none',
2390
- overflow: 'hidden',
2391
- display: 'block',
2392
- padding: '1px',
2393
- whiteSpace: 'nowrap',
2394
- pointerEvents: object.isReadonly ? 'none' : 'auto',
2395
- cursor: object.isReadonly ? 'default' : 'text',
2396
- caretColor: object.isReadonly ? 'transparent' : 'auto',
2435
+ }, draggable: false, onDragStart: e => e.preventDefault() })), KritzelClassHelper.isInstanceOf(object, 'KritzelText') && (index.h("div", { ref: el => (el ? object.mount(el) : object.unmount()), onPointerDown: e => object.handlePointerDown(e), onPointerMove: e => object.handlePointerMove(e), onPointerUp: e => object.handlePointerUp(e), style: {
2436
+ minWidth: object.initialWidth + 'px',
2437
+ minHeight: object.initialHeight + 'px',
2438
+ maxWidth: '500px',
2439
+ height: 'auto',
2440
+ width: 'max-content',
2441
+ transformOrigin: 'top left',
2442
+ transform: `scale(${object.scaleFactor})`,
2443
+ backgroundColor: object.backgroundColor,
2444
+ overflow: 'visible'
2397
2445
  } })), KritzelClassHelper.isInstanceOf(object, 'KritzelCustomElement') && (index.h("div", { ref: el => (el ? object.mount(el) : object.unmount()), style: {
2398
2446
  width: '100%',
2399
2447
  height: '100%',
@@ -2459,7 +2507,7 @@ const KritzelEngine = class {
2459
2507
  transform: this.core.store.state.currentPath?.transformationMatrix,
2460
2508
  transformOrigin: 'top left',
2461
2509
  overflow: 'visible',
2462
- }, viewBox: this.core.store.state.currentPath?.viewBox }, index.h("path", { key: '2fa37f509acc3573049fc01f22e41fdda6e4acd9', d: this.core.store.state.currentPath?.d, fill: this.core.store.state.currentPath?.fill, stroke: this.core.store.state.currentPath?.stroke }))), this.core.store.state.isContextMenuVisible && (index.h("kritzel-context-menu", { key: 'a17f9ff108cf509f3d6e20fc434cffb7a4d72530', class: "context-menu", ref: el => (this.contextMenuElement = el), items: this.core.store.state.contextMenuItems, objects: this.core.store.state.selectionGroup?.objects || [], style: {
2510
+ }, viewBox: this.core.store.state.currentPath?.viewBox }, index.h("path", { key: '9428a1401021b38b8b811fd68af9e24d53301c08', d: this.core.store.state.currentPath?.d, fill: this.core.store.state.currentPath?.fill, stroke: this.core.store.state.currentPath?.stroke }))), this.core.store.state.isContextMenuVisible && (index.h("kritzel-context-menu", { key: '1ccc963df66e4210886717644503be6304c6c99f', class: "context-menu", ref: el => (this.contextMenuElement = el), items: this.core.store.state.contextMenuItems, objects: this.core.store.state.selectionGroup?.objects || [], style: {
2463
2511
  position: 'fixed',
2464
2512
  left: `${this.core.store.state.contextMenuX}px`,
2465
2513
  top: `${this.core.store.state.contextMenuY}px`,
@@ -2470,7 +2518,7 @@ const KritzelEngine = class {
2470
2518
  y: (-this.core.store.state.translateY + this.core.store.state.contextMenuY) / this.core.store.state.scale,
2471
2519
  }, this.core.store.state.selectionGroup?.objects);
2472
2520
  this.hideContextMenu();
2473
- }, onClose: () => this.hideContextMenu() })), this.core.store.state?.activeTool instanceof index$1.KritzelEraserTool && !this.core.store.state.isScaling && index.h("kritzel-cursor-trail", { key: 'a22fa1dba0442fa77a7660ca230d4bb0236e10ea', core: this.core })));
2521
+ }, onClose: () => this.hideContextMenu() })), this.core.store.state?.activeTool instanceof index$1.KritzelEraserTool && !this.core.store.state.isScaling && index.h("kritzel-cursor-trail", { key: '9b51e52c76f21be679491c21d1921d389d6619fc', core: this.core })));
2474
2522
  }
2475
2523
  static get watchers() { return {
2476
2524
  "workspace": ["onWorkspaceChange"],
@@ -2490,7 +2538,7 @@ const KritzelFont = class {
2490
2538
  size = 24;
2491
2539
  color = '#000000';
2492
2540
  render() {
2493
- return (index.h(index.Host, { key: '0d0f0f75b64f579ca236950334fafde7f0ef2a38' }, index.h("div", { key: 'e71524879ded9727891bdd43f1a41ae5eef49175', class: "font-preview", style: {
2541
+ return (index.h(index.Host, { key: '0a6f1d1326e9dde84a4122d79f75dc1c75ffe0fb' }, index.h("div", { key: '88a342d01c4150cd4fc5dacca23f7b9904edca52', class: "font-preview", style: {
2494
2542
  fontFamily: this.fontFamily,
2495
2543
  fontSize: `${this.size}px`,
2496
2544
  color: this.color
@@ -2537,7 +2585,7 @@ const KritzelFontFamily = class {
2537
2585
  label: option.label,
2538
2586
  style: { fontFamily: option.value },
2539
2587
  }));
2540
- return (index.h(index.Host, { key: 'd05a099adf8623b8c67d68f3861c1cd401e86e2c' }, index.h("kritzel-dropdown", { key: 'b95af194feaaf5748bb0d584617d217e4b3b8180', options: dropdownOptions, value: this.selectedFontFamily, onValueChanged: this.handleDropdownValueChange, selectStyles: { fontFamily: this.selectedFontFamily } }, index.h("button", { key: '04a0a72f9297dc6c34a2a2019cae111d8725bcf4', class: "font-style-button", slot: "suffix" }, "B"), index.h("button", { key: 'f14b59f29bcce33f890b74c1fb8d1dad0ad6fd31', class: "font-style-button italic-text", slot: "suffix" }, "I"))));
2588
+ return (index.h(index.Host, { key: '27d14ddb4a57b9cd7b936047b6ea6a9251a1ab27' }, index.h("kritzel-dropdown", { key: '20ea042c9a907dc1ac5e16a589a8856f87389e36', options: dropdownOptions, value: this.selectedFontFamily, onValueChanged: this.handleDropdownValueChange, selectStyles: { fontFamily: this.selectedFontFamily } }, index.h("button", { key: 'f63fed16477a327aadaeb54feefe35df1780e37d', class: "font-style-button", slot: "suffix" }, "B"), index.h("button", { key: '13b3089606c2e83b256ed2cec6513a9911016754', class: "font-style-button italic-text", slot: "suffix" }, "I"))));
2541
2589
  }
2542
2590
  };
2543
2591
  KritzelFontFamily.style = kritzelFontFamilyCss;
@@ -2558,7 +2606,7 @@ const KritzelFontSize = class {
2558
2606
  this.sizeChange.emit(size);
2559
2607
  }
2560
2608
  render() {
2561
- return (index.h(index.Host, { key: '583659340d8f3bfb2ff6f64f2cd692ac07cb32d6' }, this.sizes.map(size => (index.h("div", { class: {
2609
+ return (index.h(index.Host, { key: '9f3d851d443352f7437116cf91eff8d8de41e322' }, this.sizes.map(size => (index.h("div", { class: {
2562
2610
  'size-container': true,
2563
2611
  'selected': this.selectedSize === size,
2564
2612
  }, onClick: () => this.handleSizeClick(size) }, index.h("kritzel-font", { fontFamily: this.fontFamily, size: size }))))));
@@ -2653,7 +2701,7 @@ const KritzelMenu = class {
2653
2701
  this.itemCloseChildMenu.emit(event.detail);
2654
2702
  };
2655
2703
  render() {
2656
- return (index.h(index.Host, { key: '211bd579000294d9edf6f85f2d7244aebe331191', tabIndex: 0, onClick: e => e.stopPropagation() }, this.openChildMenuItem && index.h("div", { key: 'b1c397118b1fbac934867677073661a69be1cab1', class: "has-open-child-overlay", onClick: this.onOverlayClick }), this.items.map(item => (index.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 })))));
2704
+ return (index.h(index.Host, { key: 'be122cb0ecff3227d9e69997de76a73940a61860', tabIndex: 0, onClick: e => e.stopPropagation() }, this.openChildMenuItem && index.h("div", { key: 'ae10bec61e5c5e1a29b444cb7378f15c6692f3b6', class: "has-open-child-overlay", onClick: this.onOverlayClick }), this.items.map(item => (index.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 })))));
2657
2705
  }
2658
2706
  };
2659
2707
  KritzelMenu.style = kritzelMenuCss;
@@ -2754,12 +2802,12 @@ const KritzelMenuItem = class {
2754
2802
  ];
2755
2803
  }
2756
2804
  render() {
2757
- return (index.h(index.Host, { key: 'a35e1e3427568f436a36b43ba87af3710a4e83c5', tabIndex: this.item.isDisabled ? -1 : 0, class: {
2805
+ return (index.h(index.Host, { key: '9df3acdaff753e3ed910f848c98e8ad73e2b5f5c', tabIndex: this.item.isDisabled ? -1 : 0, class: {
2758
2806
  'selected': this.item.isSelected,
2759
2807
  'editing': this.item.isEditing,
2760
2808
  'disabled': this.item.isDisabled,
2761
2809
  'child-open': this.item.isChildMenuOpen,
2762
- }, onClick: this.handleItemSelect }, index.h("div", { key: '42eef5a16b9b164839c1fe133e38ecb505c07632', class: "menu-item-overlay" }), this.item.isEditing ? this.renderEditMode() : this.renderViewMode()));
2810
+ }, onClick: this.handleItemSelect }, index.h("div", { key: 'bb73e5c0c3dd87efabcaa0b53d20c7c477b34aa1', class: "menu-item-overlay" }), this.item.isEditing ? this.renderEditMode() : this.renderViewMode()));
2763
2811
  }
2764
2812
  static get watchers() { return {
2765
2813
  "item": ["onItemChange"]
@@ -3000,7 +3048,7 @@ const KritzelPortal = class {
3000
3048
  this.portal.style.left = `${left}px`;
3001
3049
  }
3002
3050
  render() {
3003
- return (index.h(index.Host, { key: 'a906e21c1257dfc6ed21257cce150db17048f04e', style: { display: this.anchor ? 'block' : 'none' } }, index.h("slot", { key: '972544f2258f8b6dc8c691f3762d5ba806a57c41' })));
3051
+ return (index.h(index.Host, { key: '9c5cdf7126ff1148dd2364cce9d2524862e27d13', style: { display: this.anchor ? 'block' : 'none' } }, index.h("slot", { key: '209a77246fedcea0c24882605487452ff5cc62ce' })));
3004
3052
  }
3005
3053
  static get watchers() { return {
3006
3054
  "anchor": ["anchorChanged"]
@@ -3100,7 +3148,7 @@ const KritzelSplitButton = class {
3100
3148
  this.menuScrollTop = event.target.scrollTop;
3101
3149
  };
3102
3150
  render() {
3103
- return (index.h(index.Host, { key: 'd18a70b94e3d6860dfac952b26f66e5b96cc6fa0', class: { mobile: this.isTouchDevice } }, index.h("button", { key: 'ee65221543fd8984f94d0a0b43beb7e1d28411f2', class: "split-main-button", tabIndex: 0, onClick: this.handleButtonClick, disabled: this.mainButtonDisabled }, this.buttonIcon && index.h("kritzel-icon", { key: '1dbdd1e4db4087564464e9586e91b48f80b88aae', name: this.buttonIcon })), index.h("div", { key: '78b5e0589e7a3dd0592fb2c1cdaae8732f57b129', class: "split-divider" }), index.h("button", { key: 'cfc5d53f06485a927608a99ea491e36b0e993fcc', ref: el => (this.splitMenuButtonRef = el), class: "split-menu-button", tabIndex: 0, onClick: this.toggleMenu, disabled: this.menuButtonDisabled }, index.h("kritzel-icon", { key: '0e141b614cbfc758f01d21908d846d16bdce586d', name: this.dropdownIcon })), index.h("kritzel-portal", { key: 'b5def34dcfe5cbbf9641b1218af803937d7a77b6', anchor: this.anchorElement, offsetY: 4, onClose: this.closeMenu }, index.h("kritzel-menu", { key: '695f6c85a8ecd44f74ecf7752bf77d0caac69e6a', 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 }))));
3151
+ return (index.h(index.Host, { key: '4ff7809dd62c1dd60600fda592aeac43cd9bc74c', class: { mobile: this.isTouchDevice } }, index.h("button", { key: 'db6485fabcffdd75a25d178aca7b653af499a90c', class: "split-main-button", tabIndex: 0, onClick: this.handleButtonClick, disabled: this.mainButtonDisabled }, this.buttonIcon && index.h("kritzel-icon", { key: '4001a4e23ef53bec2a578310de8c8b593d7b266c', name: this.buttonIcon })), index.h("div", { key: '8ff86d3c01a48b06afca77dd066518efa3589cb1', class: "split-divider" }), index.h("button", { key: 'f1c40edbec3756a7f3681de4e8d0f1981dd312a4', ref: el => (this.splitMenuButtonRef = el), class: "split-menu-button", tabIndex: 0, onClick: this.toggleMenu, disabled: this.menuButtonDisabled }, index.h("kritzel-icon", { key: '0ddb89976632ae7454e66504f8bab3fd5072c252', name: this.dropdownIcon })), index.h("kritzel-portal", { key: '64531ffd6ac847fd1a99e32aceefea9f18088992', anchor: this.anchorElement, offsetY: 4, onClose: this.closeMenu }, index.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 }))));
3104
3152
  }
3105
3153
  };
3106
3154
  KritzelSplitButton.style = kritzelSplitButtonCss;
@@ -3120,7 +3168,7 @@ const KritzelStrokeSize = class {
3120
3168
  this.sizeChange.emit(size);
3121
3169
  }
3122
3170
  render() {
3123
- return (index.h(index.Host, { key: '001a0ef8408d19532b57a521929c0cba54e99c52' }, this.sizes.map(size => (index.h("div", { tabIndex: 0, class: {
3171
+ return (index.h(index.Host, { key: '74579e34c23725e22927afe371c1f7925903720a' }, this.sizes.map(size => (index.h("div", { tabIndex: 0, class: {
3124
3172
  'size-container': true,
3125
3173
  'selected': this.selectedSize === size,
3126
3174
  }, onClick: () => this.handleSizeClick(size) }, index.h("kritzel-color", { value: '#000000', size: size }))))));
@@ -3197,23 +3245,23 @@ const KritzelTooltip = class {
3197
3245
  }
3198
3246
  }
3199
3247
  render() {
3200
- return (index.h(index.Host, { key: '8c3aeff60625f43f129afa70367cdb7a68a4b271', style: {
3248
+ return (index.h(index.Host, { key: '72a6356a43a15a7abc9a46b0d22c3c62217791e8', style: {
3201
3249
  position: 'fixed',
3202
3250
  zIndex: '9999',
3203
3251
  transition: 'opacity 0.3s ease-in-out, transform 0.3s ease-in-out',
3204
3252
  visibility: this.isVisible ? 'visible' : 'hidden',
3205
3253
  left: !this.isMobileView ? `${this.positionX}px` : '50%',
3206
3254
  marginBottom: `${this.offsetY + this.arrowSize}px`,
3207
- } }, index.h("div", { key: 'b22b606c2a836c2c9bbe21c6b470754753ccb309', class: "tooltip-content", onClick: event => event.stopPropagation() }, index.h("slot", { key: '783403f4b5560012c9f6bd184a8c5eb26428e148' }), index.h("div", { key: 'bb98400edc5c6e05fd4ed2a476a5821f93964b8e', class: "tooltip-arrow-wrapper", style: {
3255
+ } }, index.h("div", { key: '75f5350f23ada0eee009279eddd7d25273ad3740', class: "tooltip-content", onClick: event => event.stopPropagation() }, index.h("slot", { key: 'ad999154289e933cac1fdc13392de2aec78811a8' }), index.h("div", { key: '6be3f5c24d42898920c339be2cd2f3dd8a82fa80', class: "tooltip-arrow-wrapper", style: {
3208
3256
  position: 'fixed',
3209
3257
  left: this.arrowOffset,
3210
3258
  bottom: `-${this.arrowSize * 2}px`,
3211
- } }, index.h("div", { key: '850a058d635113a7870f25fa288a6447394c53ed', class: "tooltip-arrow", style: {
3259
+ } }, index.h("div", { key: '37397c6245dd6b0def23e2611d118e0c4f5860ef', class: "tooltip-arrow", style: {
3212
3260
  borderLeft: `${this.arrowSize}px solid transparent`,
3213
3261
  borderRight: `${this.arrowSize}px solid transparent`,
3214
3262
  borderTop: `${this.arrowSize}px solid var(--kritzel-controls-tooltip-background-color, #ffffff)`,
3215
3263
  filter: 'drop-shadow(0 2px 4px rgba(0, 0, 0, 0.2))',
3216
- } }), index.h("div", { key: 'bbb3dc2673e2dfe4443ad80540dfc9e5a25c6c06', class: "tooltip-arrow-rect", style: {
3264
+ } }), index.h("div", { key: 'dbf009c371d46ef0a36e27771758c66e817d9b22', class: "tooltip-arrow-rect", style: {
3217
3265
  position: 'relative',
3218
3266
  width: `${this.arrowSize * 2}px`,
3219
3267
  height: `${this.arrowSize}px`,
@@ -3249,7 +3297,7 @@ const KritzelUtilityPanel = class {
3249
3297
  this.redo.emit();
3250
3298
  }
3251
3299
  render() {
3252
- return (index.h(index.Host, { key: '8109ccff01374c046d057021dfbcabdc632d829f' }, index.h("button", { key: '0d51cfb401974edf1a2a8810d2244f8a977c347f', class: "utility-button", onClick: event => this.handleUndo(event) }, index.h("kritzel-icon", { key: '1d13ee6bbf060402e0b1349d41b728875314e2e5', name: "undo" })), index.h("button", { key: 'f2fe59e7c99cb1550052088b507313cfaed72f29', class: "utility-button", onClick: event => this.handleRedo(event) }, index.h("kritzel-icon", { key: '74bf8c20f61144ab4abc5804dcd8f39917d2c966', name: "redo" })), index.h("div", { key: '0c9a942e786425b32e984fefdc97b1abb5077997', class: "utility-separator" }), index.h("button", { key: '44ca9340c2f73212332e9b3ed93ed93b8f7c6944', class: "utility-button" }, index.h("kritzel-icon", { key: '7b4c3d9a105e0c25b5bbc11ff1bc1cbed9833e03', name: "delete", onClick: () => this.delete.emit() }))));
3300
+ return (index.h(index.Host, { key: '8e2eb13668d8787827b10cee7c9daf2abdecc2c6' }, index.h("button", { key: '0773e7ef81bc972ba589333f4ac7e85d98737770', class: "utility-button", onClick: event => this.handleUndo(event) }, index.h("kritzel-icon", { key: 'fa69c1a2535d44bfb871a4d719079d0f900cc6c7', name: "undo" })), index.h("button", { key: 'edc28968f3ec92467d6b4aaa095a71770413d657', class: "utility-button", onClick: event => this.handleRedo(event) }, index.h("kritzel-icon", { key: 'd4cf72e2bda411fe9942d473c5e1ceae62a76074', name: "redo" })), index.h("div", { key: '8927237c6099a147495564657cdef97e7d35d7c1', class: "utility-separator" }), index.h("button", { key: 'e089819f7dd870165130322c3c4a9d754d4ed023', class: "utility-button" }, index.h("kritzel-icon", { key: 'a143770d1b3f8fdbe5c5b36c5d7eaab511cd8a4b', name: "delete", onClick: () => this.delete.emit() }))));
3253
3301
  }
3254
3302
  };
3255
3303
  KritzelUtilityPanel.style = kritzelUtilityPanelCss;