kritzel-stencil 0.0.140 → 0.0.142

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 (217) hide show
  1. package/dist/cjs/{index-nzUNdMPh.js → index-DcTwXs_q.js} +47 -22
  2. package/dist/cjs/index-DcTwXs_q.js.map +1 -0
  3. package/dist/cjs/index-SaGfCHX3.js +16452 -0
  4. package/dist/cjs/index-SaGfCHX3.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 +134 -96
  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-object.command.js +1 -0
  12. package/dist/collection/classes/commands/add-object.command.js.map +1 -1
  13. package/dist/collection/classes/commands/base.command.js +2 -0
  14. package/dist/collection/classes/commands/base.command.js.map +1 -1
  15. package/dist/collection/classes/commands/remove-object.command.js +1 -3
  16. package/dist/collection/classes/commands/remove-object.command.js.map +1 -1
  17. package/dist/collection/classes/commands/update-object.command.js +2 -0
  18. package/dist/collection/classes/commands/update-object.command.js.map +1 -1
  19. package/dist/collection/classes/core/command-manager.class.js +51 -0
  20. package/dist/collection/classes/core/command-manager.class.js.map +1 -0
  21. package/dist/collection/classes/core/core.class.js +30 -14
  22. package/dist/collection/classes/core/core.class.js.map +1 -1
  23. package/dist/collection/classes/core/history.class.js +2 -40
  24. package/dist/collection/classes/core/history.class.js.map +1 -1
  25. package/dist/collection/classes/core/viewport.class.js +16 -5
  26. package/dist/collection/classes/core/viewport.class.js.map +1 -1
  27. package/dist/collection/classes/handlers/context-menu.handler.js +1 -1
  28. package/dist/collection/classes/handlers/context-menu.handler.js.map +1 -1
  29. package/dist/collection/classes/handlers/key.handler.js +2 -2
  30. package/dist/collection/classes/handlers/key.handler.js.map +1 -1
  31. package/dist/collection/classes/handlers/move.handler.js +11 -6
  32. package/dist/collection/classes/handlers/move.handler.js.map +1 -1
  33. package/dist/collection/classes/handlers/resize.handler.js +29 -5
  34. package/dist/collection/classes/handlers/resize.handler.js.map +1 -1
  35. package/dist/collection/classes/handlers/rotation.handler.js +2 -2
  36. package/dist/collection/classes/handlers/rotation.handler.js.map +1 -1
  37. package/dist/collection/classes/handlers/selection.handler.js +4 -4
  38. package/dist/collection/classes/handlers/selection.handler.js.map +1 -1
  39. package/dist/collection/classes/objects/base-object.class.js +15 -14
  40. package/dist/collection/classes/objects/base-object.class.js.map +1 -1
  41. package/dist/collection/classes/objects/custom-element.class.js +7 -1
  42. package/dist/collection/classes/objects/custom-element.class.js.map +1 -1
  43. package/dist/collection/classes/objects/text.class.js +189 -82
  44. package/dist/collection/classes/objects/text.class.js.map +1 -1
  45. package/dist/collection/classes/tools/brush-tool.class.js +2 -2
  46. package/dist/collection/classes/tools/brush-tool.class.js.map +1 -1
  47. package/dist/collection/classes/tools/eraser-tool.class.js +2 -2
  48. package/dist/collection/classes/tools/eraser-tool.class.js.map +1 -1
  49. package/dist/collection/classes/tools/image-tool.class.js +1 -1
  50. package/dist/collection/classes/tools/image-tool.class.js.map +1 -1
  51. package/dist/collection/classes/tools/selection-tool.class.js +2 -2
  52. package/dist/collection/classes/tools/selection-tool.class.js.map +1 -1
  53. package/dist/collection/classes/tools/text-tool.class.js +17 -13
  54. package/dist/collection/classes/tools/text-tool.class.js.map +1 -1
  55. package/dist/collection/collection-manifest.json +2 -2
  56. package/dist/collection/components/core/kritzel-cursor-trail/kritzel-cursor-trail.js +0 -1
  57. package/dist/collection/components/core/kritzel-cursor-trail/kritzel-cursor-trail.js.map +1 -1
  58. package/dist/collection/components/core/kritzel-editor/kritzel-editor.js +4 -8
  59. package/dist/collection/components/core/kritzel-editor/kritzel-editor.js.map +1 -1
  60. package/dist/collection/components/core/kritzel-engine/kritzel-engine.css +21 -8
  61. package/dist/collection/components/core/kritzel-engine/kritzel-engine.js +33 -37
  62. package/dist/collection/components/core/kritzel-engine/kritzel-engine.js.map +1 -1
  63. package/dist/collection/components/shared/kritzel-brush-style/kritzel-brush-style.js +1 -2
  64. package/dist/collection/components/shared/kritzel-brush-style/kritzel-brush-style.js.map +1 -1
  65. package/dist/collection/components/shared/kritzel-color/kritzel-color.js +3 -3
  66. package/dist/collection/components/shared/kritzel-color-palette/kritzel-color-palette.js +3 -4
  67. package/dist/collection/components/shared/kritzel-color-palette/kritzel-color-palette.js.map +1 -1
  68. package/dist/collection/components/shared/kritzel-dropdown/kritzel-dropdown.js +5 -6
  69. package/dist/collection/components/shared/kritzel-dropdown/kritzel-dropdown.js.map +1 -1
  70. package/dist/collection/components/shared/kritzel-font/kritzel-font.js +3 -3
  71. package/dist/collection/components/shared/kritzel-font-family/kritzel-font-family.js +2 -3
  72. package/dist/collection/components/shared/kritzel-font-family/kritzel-font-family.js.map +1 -1
  73. package/dist/collection/components/shared/kritzel-font-size/kritzel-font-size.js +2 -3
  74. package/dist/collection/components/shared/kritzel-font-size/kritzel-font-size.js.map +1 -1
  75. package/dist/collection/components/shared/kritzel-icon/kritzel-icon.js +5 -5
  76. package/dist/collection/components/shared/kritzel-menu/kritzel-menu.js +0 -2
  77. package/dist/collection/components/shared/kritzel-menu/kritzel-menu.js.map +1 -1
  78. package/dist/collection/components/shared/kritzel-menu-item/kritzel-menu-item.js +0 -2
  79. package/dist/collection/components/shared/kritzel-menu-item/kritzel-menu-item.js.map +1 -1
  80. package/dist/collection/components/shared/kritzel-portal/kritzel-portal.js +5 -6
  81. package/dist/collection/components/shared/kritzel-portal/kritzel-portal.js.map +1 -1
  82. package/dist/collection/components/shared/kritzel-split-button/kritzel-split-button.js +4 -5
  83. package/dist/collection/components/shared/kritzel-split-button/kritzel-split-button.js.map +1 -1
  84. package/dist/collection/components/shared/kritzel-stroke-size/kritzel-stroke-size.js +1 -2
  85. package/dist/collection/components/shared/kritzel-stroke-size/kritzel-stroke-size.js.map +1 -1
  86. package/dist/collection/components/shared/kritzel-tooltip/kritzel-tooltip.js +3 -4
  87. package/dist/collection/components/shared/kritzel-tooltip/kritzel-tooltip.js.map +1 -1
  88. package/dist/collection/components/ui/kritzel-context-menu/kritzel-context-menu.js +0 -2
  89. package/dist/collection/components/ui/kritzel-context-menu/kritzel-context-menu.js.map +1 -1
  90. package/dist/collection/components/ui/kritzel-control-brush-config/kritzel-control-brush-config.js +1 -2
  91. package/dist/collection/components/ui/kritzel-control-brush-config/kritzel-control-brush-config.js.map +1 -1
  92. package/dist/collection/components/ui/kritzel-control-text-config/kritzel-control-text-config.js +1 -2
  93. package/dist/collection/components/ui/kritzel-control-text-config/kritzel-control-text-config.js.map +1 -1
  94. package/dist/collection/components/ui/kritzel-controls/kritzel-controls.js +1 -3
  95. package/dist/collection/components/ui/kritzel-controls/kritzel-controls.js.map +1 -1
  96. package/dist/collection/components/ui/kritzel-workspace-manager/kritzel-workspace-manager.js +0 -2
  97. package/dist/collection/components/ui/kritzel-workspace-manager/kritzel-workspace-manager.js.map +1 -1
  98. package/dist/collection/interfaces/object.interface.js.map +1 -1
  99. package/dist/components/index.js +3 -3
  100. package/dist/components/kritzel-brush-style.js +4 -4
  101. package/dist/components/kritzel-color-palette.js +1 -1
  102. package/dist/components/kritzel-color.js +1 -1
  103. package/dist/components/kritzel-context-menu.js +1 -1
  104. package/dist/components/kritzel-control-brush-config.js +1 -1
  105. package/dist/components/kritzel-control-text-config.js +1 -1
  106. package/dist/components/kritzel-controls.js +1 -1
  107. package/dist/components/kritzel-cursor-trail.js +1 -1
  108. package/dist/components/kritzel-dropdown.js +1 -1
  109. package/dist/components/kritzel-editor.js +25 -25
  110. package/dist/components/kritzel-engine.js +1 -1
  111. package/dist/components/kritzel-font-family.js +1 -1
  112. package/dist/components/kritzel-font-size.js +1 -1
  113. package/dist/components/kritzel-font.js +1 -1
  114. package/dist/components/kritzel-icon.js +1 -1
  115. package/dist/components/kritzel-menu-item.js +1 -1
  116. package/dist/components/kritzel-menu.js +1 -1
  117. package/dist/components/kritzel-portal.js +1 -1
  118. package/dist/components/kritzel-split-button.js +1 -1
  119. package/dist/components/kritzel-stroke-size.js +1 -1
  120. package/dist/components/kritzel-tooltip.js +1 -1
  121. package/dist/components/kritzel-utility-panel.js +1 -1
  122. package/dist/components/kritzel-workspace-manager.js +1 -1
  123. package/dist/components/{p-BQJhnpY3.js → p-BEKicPnH.js} +3 -3
  124. package/dist/components/{p-BQJhnpY3.js.map → p-BEKicPnH.js.map} +1 -1
  125. package/dist/components/{p-D6FeQRzi.js → p-BFNwskCY.js} +4 -4
  126. package/dist/components/{p-D6FeQRzi.js.map → p-BFNwskCY.js.map} +1 -1
  127. package/dist/components/{p-sHDCqDbD.js → p-BJbN3vca.js} +6 -6
  128. package/dist/components/{p-sHDCqDbD.js.map → p-BJbN3vca.js.map} +1 -1
  129. package/dist/components/{p-bC64Ng59.js → p-ByAzDzS5.js} +3 -3
  130. package/dist/components/{p-bC64Ng59.js.map → p-ByAzDzS5.js.map} +1 -1
  131. package/dist/components/{p-CE_sOMS2.js → p-BycHaC-9.js} +4 -4
  132. package/dist/components/{p-CE_sOMS2.js.map → p-BycHaC-9.js.map} +1 -1
  133. package/dist/components/{p-SKH0G2nM.js → p-C8calcQF.js} +17 -17
  134. package/dist/components/{p-SKH0G2nM.js.map → p-C8calcQF.js.map} +1 -1
  135. package/dist/components/{p-BYanlgdq.js → p-C9hrbrUN.js} +27 -14
  136. package/dist/components/p-C9hrbrUN.js.map +1 -0
  137. package/dist/components/{p-JYqCBcMd.js → p-CEn1WeG3.js} +8 -8
  138. package/dist/components/{p-JYqCBcMd.js.map → p-CEn1WeG3.js.map} +1 -1
  139. package/dist/components/{p-C7UWRUAy.js → p-CGb-8cK4.js} +3 -3
  140. package/dist/components/{p-C7UWRUAy.js.map → p-CGb-8cK4.js.map} +1 -1
  141. package/dist/components/p-CZk591FE.js +14739 -0
  142. package/dist/components/p-CZk591FE.js.map +1 -0
  143. package/dist/components/{p-BJZudenH.js → p-C_hSH2nN.js} +3 -3
  144. package/dist/components/{p-BJZudenH.js.map → p-C_hSH2nN.js.map} +1 -1
  145. package/dist/components/{p-D2eJXNMx.js → p-CieOx1XL.js} +4 -4
  146. package/dist/components/{p-D2eJXNMx.js.map → p-CieOx1XL.js.map} +1 -1
  147. package/dist/components/{p-BFLXutiB.js → p-Co5lU_7h.js} +10 -10
  148. package/dist/components/{p-BFLXutiB.js.map → p-Co5lU_7h.js.map} +1 -1
  149. package/dist/components/{p-BV5iL9W6.js → p-CziwfEQh.js} +253 -181
  150. package/dist/components/p-CziwfEQh.js.map +1 -0
  151. package/dist/components/{p-sq9jgfX0.js → p-D27d2rKT.js} +3 -3
  152. package/dist/components/{p-sq9jgfX0.js.map → p-D27d2rKT.js.map} +1 -1
  153. package/dist/components/{p-DFO-6kuA.js → p-DPxzgBs0.js} +3 -3
  154. package/dist/components/{p-DFO-6kuA.js.map → p-DPxzgBs0.js.map} +1 -1
  155. package/dist/components/{p-vNnVlsJt.js → p-D_RcVGj0.js} +4 -4
  156. package/dist/components/{p-vNnVlsJt.js.map → p-D_RcVGj0.js.map} +1 -1
  157. package/dist/components/{p-C-ozL_Es.js → p-DqsgZIHC.js} +4 -4
  158. package/dist/components/{p-C-ozL_Es.js.map → p-DqsgZIHC.js.map} +1 -1
  159. package/dist/components/{p-Dh61W3GT.js → p-DzyZA2GT.js} +5 -5
  160. package/dist/components/{p-Dh61W3GT.js.map → p-DzyZA2GT.js.map} +1 -1
  161. package/dist/components/{p-DbmQ5DrU.js → p-dcR2uxM3.js} +5 -5
  162. package/dist/components/{p-DbmQ5DrU.js.map → p-dcR2uxM3.js.map} +1 -1
  163. package/dist/components/{p-BLc8TzcU.js → p-fiFoOjv0.js} +7 -7
  164. package/dist/components/{p-BLc8TzcU.js.map → p-fiFoOjv0.js.map} +1 -1
  165. package/dist/components/{p-IgPm36bH.js → p-gCHmJzc2.js} +4 -4
  166. package/dist/components/{p-IgPm36bH.js.map → p-gCHmJzc2.js.map} +1 -1
  167. package/dist/esm/{index-oCOlsFCN.js → index-Cw77zP6g.js} +47 -22
  168. package/dist/esm/index-Cw77zP6g.js.map +1 -0
  169. package/dist/esm/index-SIM_s7ed.js +16424 -0
  170. package/dist/esm/index-SIM_s7ed.js.map +1 -0
  171. package/dist/esm/index.js +1 -1
  172. package/dist/esm/kritzel-brush-style.entry.js +1 -1
  173. package/dist/esm/kritzel-color_22.entry.js +134 -96
  174. package/dist/esm/loader.js +3 -3
  175. package/dist/esm/stencil.js +4 -4
  176. package/dist/esm/stencil.js.map +1 -1
  177. package/dist/stencil/index.esm.js +1 -1
  178. package/dist/stencil/{p-25d1e040.entry.js → p-8b831c94.entry.js} +2 -2
  179. package/dist/stencil/p-Cw77zP6g.js +3 -0
  180. package/dist/stencil/p-Cw77zP6g.js.map +1 -0
  181. package/dist/stencil/p-SIM_s7ed.js +2 -0
  182. package/dist/stencil/p-SIM_s7ed.js.map +1 -0
  183. package/dist/stencil/p-b697b2c1.entry.js +2 -0
  184. package/dist/stencil/p-b697b2c1.entry.js.map +1 -0
  185. package/dist/stencil/stencil.esm.js +1 -1
  186. package/dist/stencil/stencil.esm.js.map +1 -1
  187. package/dist/types/classes/commands/add-object.command.d.ts +2 -2
  188. package/dist/types/classes/commands/base.command.d.ts +2 -1
  189. package/dist/types/classes/commands/remove-object.command.d.ts +2 -2
  190. package/dist/types/classes/commands/update-object.command.d.ts +2 -2
  191. package/dist/types/classes/core/command-manager.class.d.ts +16 -0
  192. package/dist/types/classes/core/core.class.d.ts +4 -0
  193. package/dist/types/classes/core/history.class.d.ts +0 -8
  194. package/dist/types/classes/core/viewport.class.d.ts +2 -0
  195. package/dist/types/classes/handlers/resize.handler.d.ts +1 -0
  196. package/dist/types/classes/objects/base-object.class.d.ts +6 -4
  197. package/dist/types/classes/objects/text.class.d.ts +33 -12
  198. package/dist/types/interfaces/object.interface.d.ts +1 -3
  199. package/dist/types/stencil-public-runtime.d.ts +36 -12
  200. package/package.json +7 -2
  201. package/dist/cjs/index-Clh2g9JM.js +0 -2850
  202. package/dist/cjs/index-Clh2g9JM.js.map +0 -1
  203. package/dist/cjs/index-nzUNdMPh.js.map +0 -1
  204. package/dist/components/p-BV5iL9W6.js.map +0 -1
  205. package/dist/components/p-BYanlgdq.js.map +0 -1
  206. package/dist/components/p-C5sTCwe3.js +0 -1171
  207. package/dist/components/p-C5sTCwe3.js.map +0 -1
  208. package/dist/esm/index-BAbkwyRx.js +0 -2822
  209. package/dist/esm/index-BAbkwyRx.js.map +0 -1
  210. package/dist/esm/index-oCOlsFCN.js.map +0 -1
  211. package/dist/stencil/p-BAbkwyRx.js +0 -2
  212. package/dist/stencil/p-BAbkwyRx.js.map +0 -1
  213. package/dist/stencil/p-fe465059.entry.js +0 -2
  214. package/dist/stencil/p-fe465059.entry.js.map +0 -1
  215. package/dist/stencil/p-oCOlsFCN.js +0 -3
  216. package/dist/stencil/p-oCOlsFCN.js.map +0 -1
  217. /package/dist/stencil/{p-25d1e040.entry.js.map → p-8b831c94.entry.js.map} +0 -0
@@ -1,12 +1,12 @@
1
- import { p as proxyCustomElement, H, c as createEvent, h, d as Host } from './p-BYanlgdq.js';
1
+ import { p as proxyCustomElement, H, c as createEvent, h, d as Host } from './p-C9hrbrUN.js';
2
2
  import { K as KritzelMouseButton } from './p-D8W6LE-c.js';
3
- import { e as KritzelBaseObject, f as KritzelBaseCommand, g as KritzelBaseTool, h as KritzelEventHelper, c as KritzelTextTool, b as KritzelBrushTool, K as KritzelText, a as KritzelPath, A as AddObjectCommand, i as KritzelToolRegistry, U as UpdateObjectCommand, d as KritzelKeyboardHelper } from './p-C5sTCwe3.js';
3
+ import { e as KritzelBaseObject, f as KritzelBaseCommand, g as KritzelBaseTool, h as KritzelEventHelper, c as KritzelTextTool, b as KritzelBrushTool, K as KritzelText, a as KritzelPath, A as AddObjectCommand, i as KritzelToolRegistry, U as UpdateObjectCommand, d as KritzelKeyboardHelper } from './p-CZk591FE.js';
4
4
  import { K as KritzelWorkspace } from './p-YqK8ch2R.js';
5
- import { K as KritzelContextMenu, d as defineCustomElement$3 } from './p-C-ozL_Es.js';
5
+ import { K as KritzelContextMenu, d as defineCustomElement$3 } from './p-DqsgZIHC.js';
6
6
  import { O as ObjectHelper } from './p-B0kd2rUI.js';
7
7
  import { K as KritzelDevicesHelper } from './p-l10It7Nm.js';
8
- import { d as defineCustomElement$2 } from './p-bC64Ng59.js';
9
- import { d as defineCustomElement$1 } from './p-sq9jgfX0.js';
8
+ import { d as defineCustomElement$2 } from './p-ByAzDzS5.js';
9
+ import { d as defineCustomElement$1 } from './p-D27d2rKT.js';
10
10
 
11
11
  class KritzelImage extends KritzelBaseObject {
12
12
  __class__ = 'KritzelImage';
@@ -75,59 +75,6 @@ class BatchCommand extends KritzelBaseCommand {
75
75
  }
76
76
  }
77
77
 
78
- class KritzelCustomElement extends KritzelBaseObject {
79
- __class__ = 'KritzelCustomElement';
80
- element;
81
- isInteractive = true;
82
- constructor(config) {
83
- super();
84
- if (config) {
85
- this.translateX = config.translateX || 0;
86
- this.translateY = config.translateY || 0;
87
- this.scale = config.scale || 1;
88
- this.element = config.element;
89
- this.height = config.height || 0;
90
- this.width = config.width || 0;
91
- }
92
- }
93
- static create(core, config) {
94
- const object = new KritzelCustomElement(config);
95
- object._core = core;
96
- object.id = object.generateId();
97
- object.workspaceId = core.store.state.activeWorkspace.id;
98
- return object;
99
- }
100
- mount(element) {
101
- if (this.isMounted) {
102
- return;
103
- }
104
- this.elementRef = element;
105
- this.isMounted = true;
106
- this.elementRef.appendChild(this.element);
107
- }
108
- resize(x, y, width, height) {
109
- if (width <= 1 || height <= 1) {
110
- return;
111
- }
112
- this.width = width;
113
- this.height = height;
114
- this.translateX = x;
115
- this.translateY = y;
116
- if (this.element) {
117
- this.element.style.width = `${width}px`;
118
- this.element.style.height = `${height}px`;
119
- }
120
- }
121
- copy() {
122
- const copiedObject = Object.create(Object.getPrototypeOf(this));
123
- Object.assign(copiedObject, this);
124
- copiedObject.id = this.generateId();
125
- copiedObject.isMounted = false;
126
- copiedObject.element = this.element.cloneNode(true);
127
- return copiedObject;
128
- }
129
- }
130
-
131
78
  class RemoveObjectCommand extends KritzelBaseCommand {
132
79
  object;
133
80
  constructor(core, initiator, object, skipHistory = false) {
@@ -135,13 +82,12 @@ class RemoveObjectCommand extends KritzelBaseCommand {
135
82
  this.object = object;
136
83
  }
137
84
  execute() {
85
+ this.object.isMounted = false;
138
86
  this._core.store.state.objectsMap.remove(object => object.id === this.object.id);
139
- this._core.store.state.objectsMap.filter(object => object instanceof KritzelCustomElement).forEach(object => object.remount());
140
87
  this._core.deleteObjectFromDatabase(this.object.id);
141
88
  }
142
89
  undo() {
143
90
  this._core.store.state.objectsMap.insert(this.object);
144
- this._core.store.state.objectsMap.filter(object => object instanceof KritzelCustomElement).forEach(object => object.remount());
145
91
  this._core.addObjectToDatabase(this.object);
146
92
  }
147
93
  }
@@ -204,7 +150,7 @@ class KritzelEraserTool extends KritzelBaseTool {
204
150
  return new RemoveObjectCommand(this._core, this, object);
205
151
  });
206
152
  if (removeCommands.length > 0) {
207
- this._core.history.executeCommand(new BatchCommand(this._core, this, removeCommands));
153
+ this._core.commandManager.executeCommand(new BatchCommand(this._core, this, removeCommands));
208
154
  }
209
155
  this._core.store.state.isErasing = false;
210
156
  }
@@ -219,7 +165,7 @@ class KritzelEraserTool extends KritzelBaseTool {
219
165
  return new RemoveObjectCommand(this._core, this, object);
220
166
  });
221
167
  if (removeCommands.length > 0) {
222
- this._core.history.executeCommand(new BatchCommand(this._core, this, removeCommands));
168
+ this._core.commandManager.executeCommand(new BatchCommand(this._core, this, removeCommands));
223
169
  }
224
170
  this._core.store.state.isErasing = false;
225
171
  }
@@ -370,10 +316,15 @@ class KritzelMoveHandler extends KritzelBaseHandler {
370
316
  const clientY = event.clientY - this._core.store.offsetY;
371
317
  this.endX = clientX;
372
318
  this.endY = clientY;
373
- this._core.store.state.selectionGroup.move(clientX, clientY, this.dragStartX, this.dragStartY);
374
- this.dragStartX = clientX;
375
- this.dragStartY = clientY;
376
- this.hasMoved = true;
319
+ const moveDeltaX = Math.abs(clientX - this.startX);
320
+ const moveDeltaY = Math.abs(clientY - this.startY);
321
+ const moveThreshold = 5;
322
+ if (moveDeltaX > moveThreshold || moveDeltaY > moveThreshold) {
323
+ this._core.store.state.selectionGroup.move(clientX, clientY, this.dragStartX, this.dragStartY);
324
+ this.dragStartX = clientX;
325
+ this.dragStartY = clientY;
326
+ this.hasMoved = true;
327
+ }
377
328
  }
378
329
  }
379
330
  if (event.pointerType === 'touch') {
@@ -408,7 +359,7 @@ class KritzelMoveHandler extends KritzelBaseHandler {
408
359
  if (this._core.store.state.isDragging) {
409
360
  this._core.store.state.isDragging = false;
410
361
  if (this.hasMoved) {
411
- this._core.history.executeCommand(new MoveSelectionGroupCommand(this._core, this, this.endX, this.endY, this.startX, this.startY, true));
362
+ this._core.commandManager.executeCommand(new MoveSelectionGroupCommand(this._core, this, this.endX, this.endY, this.startX, this.startY, true));
412
363
  this._core.store.state.hasObjectsChanged = true;
413
364
  }
414
365
  }
@@ -417,7 +368,7 @@ class KritzelMoveHandler extends KritzelBaseHandler {
417
368
  if (this._core.store.state.isDragging) {
418
369
  this._core.store.state.isDragging = false;
419
370
  if (this.hasMoved) {
420
- this._core.history.executeCommand(new MoveSelectionGroupCommand(this._core, this, this.endX, this.endY, this.startX, this.startY, true));
371
+ this._core.commandManager.executeCommand(new MoveSelectionGroupCommand(this._core, this, this.endX, this.endY, this.startX, this.startY, true));
421
372
  this._core.store.state.hasObjectsChanged = true;
422
373
  }
423
374
  }
@@ -467,6 +418,7 @@ class KritzelResizeHandler extends KritzelBaseHandler {
467
418
  initialMouseY = 0;
468
419
  initialSize = { x: 0, y: 0, width: 0, height: 0 };
469
420
  newSize = { x: 0, y: 0, width: 0, height: 0 };
421
+ hasResized = false;
470
422
  constructor(core) {
471
423
  super(core);
472
424
  }
@@ -475,6 +427,7 @@ class KritzelResizeHandler extends KritzelBaseHandler {
475
427
  this.initialMouseY = 0;
476
428
  this.initialSize = { x: 0, y: 0, width: 0, height: 0 };
477
429
  this.newSize = { x: 0, y: 0, width: 0, height: 0 };
430
+ this.hasResized = false;
478
431
  }
479
432
  handlePointerDown(event) {
480
433
  if (event.pointerType === 'mouse') {
@@ -521,6 +474,15 @@ class KritzelResizeHandler extends KritzelBaseHandler {
521
474
  const clientY = event.clientY - this._core.store.offsetY;
522
475
  const dx = clientX - this.initialMouseX;
523
476
  const dy = clientY - this.initialMouseY;
477
+ const resizeDeltaX = Math.abs(dx);
478
+ const resizeDeltaY = Math.abs(dy);
479
+ const resizeThreshold = 5;
480
+ if (resizeDeltaX > resizeThreshold || resizeDeltaY > resizeThreshold) {
481
+ this.hasResized = true;
482
+ }
483
+ if (!this.hasResized) {
484
+ return;
485
+ }
524
486
  switch (this._core.store.state.resizeHandleType) {
525
487
  case KritzelHandleType.TopLeft:
526
488
  this.newSize.width = this.initialSize.width - dx;
@@ -561,6 +523,16 @@ class KritzelResizeHandler extends KritzelBaseHandler {
561
523
  const clientY = Math.round(oneFingerTouch.clientY - this._core.store.offsetY);
562
524
  const dx = clientX - this.initialMouseX;
563
525
  const dy = clientY - this.initialMouseY;
526
+ const resizeDeltaX = Math.abs(dx);
527
+ const resizeDeltaY = Math.abs(dy);
528
+ const resizeThreshold = 5;
529
+ if (resizeDeltaX > resizeThreshold || resizeDeltaY > resizeThreshold) {
530
+ clearTimeout(this._core.store.state.longTouchTimeout);
531
+ this.hasResized = true;
532
+ }
533
+ if (!this.hasResized) {
534
+ return;
535
+ }
564
536
  switch (this._core.store.state.resizeHandleType) {
565
537
  case KritzelHandleType.TopLeft:
566
538
  this.newSize.width = this.initialSize.width - dx;
@@ -588,24 +560,27 @@ class KritzelResizeHandler extends KritzelBaseHandler {
588
560
  break;
589
561
  }
590
562
  this._core.store.state.selectionGroup.resize(this.newSize.x, this.newSize.y, this.newSize.width, this.newSize.height);
591
- clearTimeout(this._core.store.state.longTouchTimeout);
592
563
  }
593
564
  }
594
565
  }
595
566
  handlePointerUp(event) {
596
567
  if (event.pointerType === 'mouse') {
597
568
  if (this._core.store.state.isResizing) {
598
- this._core.history.executeCommand(new ResizeSelectionGroupCommand(this._core, this, structuredClone(this.initialSize), structuredClone(this.newSize)));
599
569
  this._core.store.state.isResizing = false;
600
- this._core.store.state.hasObjectsChanged = true;
570
+ if (this.hasResized) {
571
+ this._core.commandManager.executeCommand(new ResizeSelectionGroupCommand(this._core, this, structuredClone(this.initialSize), structuredClone(this.newSize)));
572
+ this._core.store.state.hasObjectsChanged = true;
573
+ }
601
574
  this.reset();
602
575
  }
603
576
  }
604
577
  if (event.pointerType === 'touch') {
605
578
  if (this._core.store.state.isResizing) {
606
- this._core.history.executeCommand(new ResizeSelectionGroupCommand(this._core, this, structuredClone(this.initialSize), structuredClone(this.newSize)));
607
579
  this._core.store.state.isResizing = false;
608
- this._core.store.state.hasObjectsChanged = true;
580
+ if (this.hasResized) {
581
+ this._core.commandManager.executeCommand(new ResizeSelectionGroupCommand(this._core, this, structuredClone(this.initialSize), structuredClone(this.newSize)));
582
+ this._core.store.state.hasObjectsChanged = true;
583
+ }
609
584
  this.reset();
610
585
  clearTimeout(this._core.store.state.longTouchTimeout);
611
586
  }
@@ -731,7 +706,7 @@ class KritzelRotationHandler extends KritzelBaseHandler {
731
706
  handlePointerUp(event) {
732
707
  if (event.pointerType === 'mouse') {
733
708
  if (this._core.store.state.isRotating) {
734
- this._core.history.executeCommand(new RotateSelectionGroupCommand(this._core, this, this.rotation, this.initialSelectionGroupRotation));
709
+ this._core.commandManager.executeCommand(new RotateSelectionGroupCommand(this._core, this, this.rotation, this.initialSelectionGroupRotation));
735
710
  this._core.store.state.isRotating = false;
736
711
  this._core.store.state.hasObjectsChanged = true;
737
712
  this.reset();
@@ -739,7 +714,7 @@ class KritzelRotationHandler extends KritzelBaseHandler {
739
714
  }
740
715
  if (event.pointerType === 'touch') {
741
716
  if (this._core.store.state.isRotating) {
742
- this._core.history.executeCommand(new RotateSelectionGroupCommand(this._core, this, this.rotation, this.initialSelectionGroupRotation));
717
+ this._core.commandManager.executeCommand(new RotateSelectionGroupCommand(this._core, this, this.rotation, this.initialSelectionGroupRotation));
743
718
  this._core.store.state.isRotating = false;
744
719
  this._core.store.state.hasObjectsChanged = true;
745
720
  this.reset();
@@ -843,7 +818,7 @@ class KritzelSelectionHandler extends KritzelBaseHandler {
843
818
  if (KritzelEventHelper.isLeftClick(event)) {
844
819
  const hasObjectsMoved = this._core.store.state.hasObjectsChanged;
845
820
  if (this._core.store.state.selectionGroup?.objects.length === 1 && hasObjectsMoved === false) {
846
- this._core.store.state.selectionGroup.objects[0].edit();
821
+ this._core.store.state.selectionGroup.objects[0].edit(event);
847
822
  }
848
823
  this._core.store.state.hasObjectsChanged = false;
849
824
  if (this._core.store.state.isSelecting) {
@@ -862,7 +837,7 @@ class KritzelSelectionHandler extends KritzelBaseHandler {
862
837
  clearTimeout(this.touchStartTimeout);
863
838
  const hasObjectsMoved = this._core.store.state.hasObjectsChanged;
864
839
  if (this._core.store.state.selectionGroup?.objects.length === 1 && hasObjectsMoved === false) {
865
- this._core.store.state.selectionGroup.objects[0].edit();
840
+ this._core.store.state.selectionGroup.objects[0].edit(event);
866
841
  }
867
842
  this._core.store.state.hasObjectsChanged = false;
868
843
  if (this._core.store.state.isSelecting) {
@@ -1005,7 +980,7 @@ class KritzelSelectionHandler extends KritzelBaseHandler {
1005
980
  selectionGroup.addOrRemove(object);
1006
981
  selectionGroup.isSelected = true;
1007
982
  selectionGroup.rotation = object.rotation;
1008
- this._core.history.executeCommand(new AddSelectionGroupCommand(this._core, this, selectionGroup));
983
+ this._core.commandManager.executeCommand(new AddSelectionGroupCommand(this._core, this, selectionGroup));
1009
984
  }
1010
985
  addSelectedObjectsToSelectionGroup() {
1011
986
  const selectedObjects = this._core.store.selectedObjects;
@@ -1022,7 +997,7 @@ class KritzelSelectionHandler extends KritzelBaseHandler {
1022
997
  if (selectionGroup.length === 1) {
1023
998
  selectionGroup.rotation = selectionGroup.objects[0].rotation;
1024
999
  }
1025
- this._core.history.executeCommand(new AddSelectionGroupCommand(this._core, this, selectionGroup));
1000
+ this._core.commandManager.executeCommand(new AddSelectionGroupCommand(this._core, this, selectionGroup));
1026
1001
  }
1027
1002
  }
1028
1003
 
@@ -1071,7 +1046,7 @@ class KritzelSelectionTool extends KritzelBaseTool {
1071
1046
  this._core.store.state.selectionGroup &&
1072
1047
  !this._core.store.state.isResizeHandleSelected &&
1073
1048
  !this._core.store.state.isRotationHandleSelected) {
1074
- this._core.history.executeCommand(new RemoveSelectionGroupCommand(this._core, this._core.store.state.selectionGroup));
1049
+ this._core.commandManager.executeCommand(new RemoveSelectionGroupCommand(this._core, this._core.store.state.selectionGroup));
1075
1050
  }
1076
1051
  if (selectedObject && selectedObject.isSelected === false && selectedObject?.objects.length === 1 && selectedObject.objects[0].isInteractive) {
1077
1052
  return;
@@ -1100,7 +1075,7 @@ class KritzelSelectionTool extends KritzelBaseTool {
1100
1075
  this._core.store.state.selectionGroup &&
1101
1076
  !this._core.store.state.isResizeHandleSelected &&
1102
1077
  !this._core.store.state.isRotationHandleSelected) {
1103
- this._core.history.executeCommand(new RemoveSelectionGroupCommand(this._core, this._core.store.state.selectionGroup));
1078
+ this._core.commandManager.executeCommand(new RemoveSelectionGroupCommand(this._core, this._core.store.state.selectionGroup));
1104
1079
  }
1105
1080
  }
1106
1081
  this.rotationHandler.handlePointerDown(event);
@@ -1194,6 +1169,65 @@ class KritzelSelectionTool extends KritzelBaseTool {
1194
1169
  }
1195
1170
  }
1196
1171
 
1172
+ class KritzelCustomElement extends KritzelBaseObject {
1173
+ __class__ = 'KritzelCustomElement';
1174
+ element;
1175
+ isInteractive = true;
1176
+ constructor(config) {
1177
+ super();
1178
+ if (config) {
1179
+ this.translateX = config.translateX || 0;
1180
+ this.translateY = config.translateY || 0;
1181
+ this.scale = config.scale || 1;
1182
+ this.element = config.element;
1183
+ this.height = config.height || 0;
1184
+ this.width = config.width || 0;
1185
+ }
1186
+ }
1187
+ static create(core, config) {
1188
+ const object = new KritzelCustomElement(config);
1189
+ object._core = core;
1190
+ object.id = object.generateId();
1191
+ object.workspaceId = core.store.state.activeWorkspace.id;
1192
+ return object;
1193
+ }
1194
+ mount(element) {
1195
+ if (element === null) {
1196
+ return;
1197
+ }
1198
+ // If already mounted to the same element and content is still attached, skip
1199
+ if (this.isMounted && this.elementRef === element && this.element.parentElement === element) {
1200
+ return;
1201
+ }
1202
+ this.elementRef = element;
1203
+ this.isMounted = true;
1204
+ // Clear existing content and append the element
1205
+ this.elementRef.innerHTML = '';
1206
+ this.elementRef.appendChild(this.element);
1207
+ }
1208
+ resize(x, y, width, height) {
1209
+ if (width <= 1 || height <= 1) {
1210
+ return;
1211
+ }
1212
+ this.width = width;
1213
+ this.height = height;
1214
+ this.translateX = x;
1215
+ this.translateY = y;
1216
+ if (this.element) {
1217
+ this.element.style.width = `${width}px`;
1218
+ this.element.style.height = `${height}px`;
1219
+ }
1220
+ }
1221
+ copy() {
1222
+ const copiedObject = Object.create(Object.getPrototypeOf(this));
1223
+ Object.assign(copiedObject, this);
1224
+ copiedObject.id = this.generateId();
1225
+ copiedObject.isMounted = false;
1226
+ copiedObject.element = this.element.cloneNode(true);
1227
+ return copiedObject;
1228
+ }
1229
+ }
1230
+
1197
1231
  class KritzelReviver {
1198
1232
  _core;
1199
1233
  constructor(core) {
@@ -1501,7 +1535,7 @@ class KritzelImageTool extends KritzelBaseTool {
1501
1535
  selectionGroup.isSelected = true;
1502
1536
  const addImageCommand = new AddObjectCommand(this._core, this, image);
1503
1537
  const addSelectionGroupCommand = new AddSelectionGroupCommand(this._core, this, selectionGroup);
1504
- this._core.history.executeCommand(new BatchCommand(this._core, this, [addImageCommand, addSelectionGroupCommand]));
1538
+ this._core.commandManager.executeCommand(new BatchCommand(this._core, this, [addImageCommand, addSelectionGroupCommand]));
1505
1539
  this._core.store.setState('activeTool', KritzelToolRegistry.getTool('selection'));
1506
1540
  }
1507
1541
  handleCancel() {
@@ -1514,6 +1548,7 @@ const ABSOLUTE_SCALE_MIN = 0.0001;
1514
1548
 
1515
1549
  class KritzelViewport {
1516
1550
  _core;
1551
+ _debounceUpdate;
1517
1552
  initialTouchDistance = 0;
1518
1553
  startX = 0;
1519
1554
  startY = 0;
@@ -1526,6 +1561,16 @@ class KritzelViewport {
1526
1561
  this._core.store.state.startY = 0;
1527
1562
  this._core.store.state.translateX = 0;
1528
1563
  this._core.store.state.translateY = 0;
1564
+ this._debounceUpdate = this.debounce(() => {
1565
+ this._core.updateWorkspaceViewport(this._core.store.state.translateX, this._core.store.state.translateY, this._core.store.state.scale);
1566
+ }, 0);
1567
+ }
1568
+ debounce(func, delay) {
1569
+ let timeoutId;
1570
+ return () => {
1571
+ clearTimeout(timeoutId);
1572
+ timeoutId = setTimeout(func, delay);
1573
+ };
1529
1574
  }
1530
1575
  handleResize() {
1531
1576
  this._core.store.state.viewportWidth = this._core.store.state.host.clientWidth;
@@ -1576,7 +1621,7 @@ class KritzelViewport {
1576
1621
  this._core.store.state.hasViewportChanged = true;
1577
1622
  this._core.store.state.skipContextMenu = true;
1578
1623
  this._core.rerender();
1579
- this._core.updateWorkspaceViewport(this._core.store.state.translateX, this._core.store.state.translateY, this._core.store.state.scale);
1624
+ this._debounceUpdate();
1580
1625
  }
1581
1626
  }
1582
1627
  if (event.pointerType === 'touch') {
@@ -1612,7 +1657,7 @@ class KritzelViewport {
1612
1657
  this.startY = midpointY;
1613
1658
  this._core.store.state.hasViewportChanged = true;
1614
1659
  this._core.rerender();
1615
- this._core.updateWorkspaceViewport(this._core.store.state.translateX, this._core.store.state.translateY, this._core.store.state.scale);
1660
+ this._debounceUpdate();
1616
1661
  }
1617
1662
  }
1618
1663
  }
@@ -1646,7 +1691,7 @@ class KritzelViewport {
1646
1691
  this._core.store.state.translateY = viewportHeight / 2 - objectCenterY * scale;
1647
1692
  this._core.store.state.hasViewportChanged = true;
1648
1693
  this._core.rerender();
1649
- this._core.updateWorkspaceViewport(this._core.store.state.translateX, this._core.store.state.translateY, this._core.store.state.scale);
1694
+ this._debounceUpdate();
1650
1695
  }
1651
1696
  centerFitInViewport(object) {
1652
1697
  const scaleX = this._core.store.state.viewportWidth / (object.rotatedBoundingBox.width * 1.1);
@@ -1673,7 +1718,7 @@ class KritzelViewport {
1673
1718
  this._core.store.state.translateY = this._core.store.state.translateY - translateYAdjustment;
1674
1719
  this._core.store.state.hasViewportChanged = true;
1675
1720
  this._core.rerender();
1676
- this._core.updateWorkspaceViewport(this._core.store.state.translateX, this._core.store.state.translateY, this._core.store.state.scale);
1721
+ this._debounceUpdate();
1677
1722
  setTimeout(() => {
1678
1723
  this._core.store.state.isScaling = false;
1679
1724
  }, 300);
@@ -1684,7 +1729,7 @@ class KritzelViewport {
1684
1729
  this._core.store.state.translateY = this._core.store.state.translateY - event.deltaY * panSpeed;
1685
1730
  this._core.store.state.hasViewportChanged = true;
1686
1731
  this._core.rerender();
1687
- this._core.updateWorkspaceViewport(this._core.store.state.translateX, this._core.store.state.translateY, this._core.store.state.scale);
1732
+ this._debounceUpdate();
1688
1733
  }
1689
1734
  }
1690
1735
 
@@ -1714,8 +1759,8 @@ class KritzelKeyHandler extends KritzelBaseHandler {
1714
1759
  },
1715
1760
  { key: 'v', ctrl: true, condition: c => !!c.store.state.copiedObjects && !c.store.state.activeText, action: c => c.paste() },
1716
1761
  // Text editing
1717
- { key: 'a', ctrl: true, condition: c => !!c.store.state.activeText, action: c => c.store.state.activeText.selectAll() },
1718
- { key: 'v', ctrl: true, condition: c => !!c.store.state.activeText, action: c => c.store.state.activeText.insertFromClipboard() },
1762
+ // { key: 'a', ctrl: true, condition: c => !!c.store.state.activeText, action: c => c.store.state.activeText.selectAll() },
1763
+ // { key: 'v', ctrl: true, condition: c => !!c.store.state.activeText, action: c => c.store.state.activeText.insertFromClipboard() },
1719
1764
  // Object layering
1720
1765
  { key: '+', ctrl: true, condition: c => !!c.store.state.selectionGroup, action: c => c.bringForward() },
1721
1766
  { key: '-', ctrl: true, condition: c => !!c.store.state.selectionGroup, action: c => c.sendBackward() },
@@ -1778,7 +1823,7 @@ class KritzelContextMenuHandler extends KritzelBaseHandler {
1778
1823
  new RemoveSelectionGroupCommand(this._core, this._core.store.state.selectionGroup),
1779
1824
  new AddSelectionGroupCommand(this._core, this, selectionGroup),
1780
1825
  ]);
1781
- this._core.history.executeCommand(batch);
1826
+ this._core.commandManager.executeCommand(batch);
1782
1827
  }
1783
1828
  this._core.store.state.contextMenuItems = this._core.store.state.selectionGroup ? this.objectContextMenuItems : this.globalContextMenuItems;
1784
1829
  let x = event.clientX - this._core.store.offsetX;
@@ -2181,47 +2226,24 @@ class KritzelHistory {
2181
2226
  _core;
2182
2227
  undoStack;
2183
2228
  redoStack;
2184
- previousViewport;
2185
2229
  constructor(core) {
2186
2230
  this._core = core;
2187
2231
  this.undoStack = new KritzelCircularBuffer(this._core.store.state.historyBufferSize);
2188
2232
  this.redoStack = new KritzelCircularBuffer(this._core.store.state.historyBufferSize);
2189
- this.previousViewport = {
2190
- scale: this._core.store.state.scale,
2191
- scaleStep: this._core.store.state.scaleStep,
2192
- translateX: this._core.store.state.translateX,
2193
- translateY: this._core.store.state.translateY,
2194
- };
2195
2233
  }
2196
2234
  reset() {
2197
2235
  this.undoStack.clear();
2198
2236
  this.redoStack.clear();
2199
- this.previousViewport = {
2237
+ this._core.commandManager.previousViewport = {
2200
2238
  scale: this._core.store.state.scale,
2201
2239
  scaleStep: this._core.store.state.scaleStep,
2202
2240
  translateX: this._core.store.state.translateX,
2203
2241
  translateY: this._core.store.state.translateY
2204
2242
  };
2205
2243
  }
2206
- executeCommand(command) {
2207
- if (this._core.store.state.hasViewportChanged) {
2208
- this.addUpdateViewportCommand();
2209
- }
2210
- command.execute();
2211
- if (command.skipHistory === false) {
2212
- if (this._core.store.state.debugInfo.logCommands) {
2213
- console.info('add', command);
2214
- }
2215
- this.undoStack.add(command);
2216
- if (this.redoStack.isEmpty() === false) {
2217
- this.redoStack.clear();
2218
- }
2219
- }
2220
- this._core.rerender();
2221
- }
2222
2244
  undo() {
2223
2245
  if (this._core.store.state.hasViewportChanged) {
2224
- const command = new UpdateViewportCommand(this._core, this, this.previousViewport);
2246
+ const command = new UpdateViewportCommand(this._core, this, this._core.commandManager.previousViewport);
2225
2247
  command.undo();
2226
2248
  this._core.store.state.hasViewportChanged = false;
2227
2249
  this._core.rerender();
@@ -2247,21 +2269,6 @@ class KritzelHistory {
2247
2269
  }
2248
2270
  this._core.rerender();
2249
2271
  }
2250
- addUpdateViewportCommand() {
2251
- const command = new UpdateViewportCommand(this._core, this, this.previousViewport);
2252
- command.execute();
2253
- this.undoStack.add(command);
2254
- if (this.redoStack.isEmpty() === false) {
2255
- this.redoStack.clear();
2256
- }
2257
- this._core.store.state.hasViewportChanged = false;
2258
- this.previousViewport = {
2259
- scale: this._core.store.state.scale,
2260
- scaleStep: this._core.store.state.scaleStep,
2261
- translateX: this._core.store.state.translateX,
2262
- translateY: this._core.store.state.translateY,
2263
- };
2264
- }
2265
2272
  }
2266
2273
 
2267
2274
  class KritzelObjectMap {
@@ -2358,10 +2365,61 @@ class KritzelStore {
2358
2365
  }
2359
2366
  }
2360
2367
 
2368
+ class KritzelCommandManager {
2369
+ _core;
2370
+ _history;
2371
+ previousViewport;
2372
+ constructor(core) {
2373
+ this._core = core;
2374
+ this._history = this._core.history;
2375
+ this.previousViewport = {
2376
+ scale: this._core.store.state.scale,
2377
+ scaleStep: this._core.store.state.scaleStep,
2378
+ translateX: this._core.store.state.translateX,
2379
+ translateY: this._core.store.state.translateY,
2380
+ };
2381
+ }
2382
+ executeCommand(command) {
2383
+ if (this._core.store.state.hasViewportChanged) {
2384
+ this.addUpdateViewportCommand();
2385
+ }
2386
+ command.execute();
2387
+ if (this.isSkipped(command) === false) {
2388
+ if (this._core.store.state.debugInfo.logCommands) {
2389
+ console.log('execute', command);
2390
+ }
2391
+ this._history.undoStack.add(command);
2392
+ if (this._history.redoStack.isEmpty() === false) {
2393
+ this._history.redoStack.clear();
2394
+ }
2395
+ }
2396
+ this._core.rerender();
2397
+ }
2398
+ isSkipped(command) {
2399
+ return command.skipHistory === true;
2400
+ }
2401
+ addUpdateViewportCommand() {
2402
+ const command = new UpdateViewportCommand(this._core, this, this.previousViewport);
2403
+ command.execute();
2404
+ this._history.undoStack.add(command);
2405
+ if (this._history.redoStack.isEmpty() === false) {
2406
+ this._history.redoStack.clear();
2407
+ }
2408
+ this._core.store.state.hasViewportChanged = false;
2409
+ this.previousViewport = {
2410
+ scale: this._core.store.state.scale,
2411
+ scaleStep: this._core.store.state.scaleStep,
2412
+ translateX: this._core.store.state.translateX,
2413
+ translateY: this._core.store.state.translateY,
2414
+ };
2415
+ }
2416
+ }
2417
+
2361
2418
  class KritzelCore {
2362
2419
  _kritzelEngine;
2363
2420
  _store;
2364
2421
  _history;
2422
+ _commandManager;
2365
2423
  _database;
2366
2424
  get engine() {
2367
2425
  return this._kritzelEngine;
@@ -2369,6 +2427,9 @@ class KritzelCore {
2369
2427
  get history() {
2370
2428
  return this._history;
2371
2429
  }
2430
+ get commandManager() {
2431
+ return this._commandManager;
2432
+ }
2372
2433
  get database() {
2373
2434
  return this._database;
2374
2435
  }
@@ -2379,6 +2440,7 @@ class KritzelCore {
2379
2440
  this._kritzelEngine = kritzelEngine;
2380
2441
  this._store = new KritzelStore(DEFAULT_ENGINE_STATE);
2381
2442
  this._history = new KritzelHistory(this);
2443
+ this._commandManager = new KritzelCommandManager(this);
2382
2444
  this._database = new KritzelDatabase('kritzelDB', 1, this._store.state.debugInfo.logDatabase);
2383
2445
  }
2384
2446
  async initializeDatabase() {
@@ -2531,7 +2593,7 @@ class KritzelCore {
2531
2593
  }
2532
2594
  deselectAllObjects() {
2533
2595
  if (this._store.state.selectionGroup) {
2534
- this._history.executeCommand(new RemoveSelectionGroupCommand(this, this));
2596
+ this.commandManager.executeCommand(new RemoveSelectionGroupCommand(this, this, true));
2535
2597
  }
2536
2598
  }
2537
2599
  delete() {
@@ -2541,13 +2603,13 @@ class KritzelCore {
2541
2603
  const deleteSelectedObjectsCommand = this._store.state.selectionGroup.objects.map(obj => new RemoveObjectCommand(this, this._store.state.selectionGroup, obj));
2542
2604
  const removeSelectionGroupCommand = new RemoveSelectionGroupCommand(this, this._store.state.selectionGroup);
2543
2605
  const commands = [...deleteSelectedObjectsCommand, removeSelectionGroupCommand];
2544
- this.history.executeCommand(new BatchCommand(this, this._store.state.selectionGroup, commands));
2606
+ this.commandManager.executeCommand(new BatchCommand(this, this._store.state.selectionGroup, commands));
2545
2607
  }
2546
2608
  deleteObject(id, skipHistory = false) {
2547
2609
  const object = this.findObjectById(id);
2548
2610
  if (object) {
2549
2611
  const removeObjectCommand = new RemoveObjectCommand(this, this, object, skipHistory);
2550
- this.history.executeCommand(removeObjectCommand);
2612
+ this.commandManager.executeCommand(removeObjectCommand);
2551
2613
  }
2552
2614
  }
2553
2615
  copy() {
@@ -2581,7 +2643,7 @@ class KritzelCore {
2581
2643
  const addCopiedObjectsCommands = this._store.state.copiedObjects.objects.map(obj => new AddObjectCommand(this, this, obj));
2582
2644
  const addCopiedObjectsAsSelectionGroupCommand = new AddSelectionGroupCommand(this, this, this._store.state.copiedObjects, previousSelectionGroup);
2583
2645
  commands.push(...addCopiedObjectsCommands, addCopiedObjectsAsSelectionGroupCommand);
2584
- this.history.executeCommand(new BatchCommand(this, this, commands));
2646
+ this.commandManager.executeCommand(new BatchCommand(this, this, commands));
2585
2647
  this._store.state.isSelecting = false;
2586
2648
  this._store.state.copiedObjects = this._store.state.selectionGroup.copy();
2587
2649
  this._store.setState('activeTool', KritzelToolRegistry.getTool('selection'));
@@ -2596,7 +2658,7 @@ class KritzelCore {
2596
2658
  }
2597
2659
  return new UpdateObjectCommand(this, this, obj, { zIndex: obj.zIndex + 1 });
2598
2660
  });
2599
- this.history.executeCommand(new BatchCommand(this, this, increaseZIndexCommands));
2661
+ this.commandManager.executeCommand(new BatchCommand(this, this, increaseZIndexCommands));
2600
2662
  }
2601
2663
  sendBackward(object) {
2602
2664
  const objects = object ? [object] : this._store.state.selectionGroup.objects;
@@ -2608,7 +2670,7 @@ class KritzelCore {
2608
2670
  }
2609
2671
  return new UpdateObjectCommand(this, this, obj, { zIndex: obj.zIndex - 1 });
2610
2672
  });
2611
- this.history.executeCommand(new BatchCommand(this, this, decreaseZIndexCommands));
2673
+ this.commandManager.executeCommand(new BatchCommand(this, this, decreaseZIndexCommands));
2612
2674
  }
2613
2675
  bringToFront(object) {
2614
2676
  const objects = object ? [object] : this._store.state.selectionGroup.objects;
@@ -2617,7 +2679,7 @@ class KritzelCore {
2617
2679
  const increaseZIndexCommands = objects.map(obj => {
2618
2680
  return new UpdateObjectCommand(this, this, obj, { zIndex: max });
2619
2681
  });
2620
- this.history.executeCommand(new BatchCommand(this, this, increaseZIndexCommands));
2682
+ this.commandManager.executeCommand(new BatchCommand(this, this, increaseZIndexCommands));
2621
2683
  }
2622
2684
  sendToBack(object) {
2623
2685
  const objects = object ? [object] : this._store.state.selectionGroup.objects;
@@ -2626,7 +2688,7 @@ class KritzelCore {
2626
2688
  const decreaseZIndexCommands = objects.map(obj => {
2627
2689
  return new UpdateObjectCommand(this, this, obj, { zIndex: min });
2628
2690
  });
2629
- this.history.executeCommand(new BatchCommand(this, this, decreaseZIndexCommands));
2691
+ this.commandManager.executeCommand(new BatchCommand(this, this, decreaseZIndexCommands));
2630
2692
  }
2631
2693
  selectObjects(objects) {
2632
2694
  if (objects.length === 0) {
@@ -2642,7 +2704,7 @@ class KritzelCore {
2642
2704
  if (objects.length === 1) {
2643
2705
  selectionGroup.rotation = selectionGroup.objects[0].rotation;
2644
2706
  }
2645
- this.history.executeCommand(new AddSelectionGroupCommand(this, this, selectionGroup));
2707
+ this.commandManager.executeCommand(new AddSelectionGroupCommand(this, this, selectionGroup));
2646
2708
  }
2647
2709
  selectAllObjectsInViewport() {
2648
2710
  const objectsInViewport = this._store.state.objectsMap
@@ -2659,13 +2721,13 @@ class KritzelCore {
2659
2721
  if (objectsInViewport.length === 1) {
2660
2722
  selectionGroup.rotation = selectionGroup.objects[0].rotation;
2661
2723
  }
2662
- this.history.executeCommand(new AddSelectionGroupCommand(this, this, selectionGroup));
2724
+ this.commandManager.executeCommand(new AddSelectionGroupCommand(this, this, selectionGroup));
2663
2725
  this._store.setState('activeTool', KritzelToolRegistry.getTool('selection'));
2664
2726
  }
2665
2727
  }
2666
2728
  clearSelection() {
2667
- const command = new RemoveSelectionGroupCommand(this, this._store.state.selectionGroup);
2668
- this.history.executeCommand(command);
2729
+ const command = new RemoveSelectionGroupCommand(this, this);
2730
+ this.commandManager.executeCommand(command);
2669
2731
  this._store.state.selectionGroup = null;
2670
2732
  this._store.state.selectionBox = null;
2671
2733
  this._store.state.isSelecting = false;
@@ -2674,8 +2736,13 @@ class KritzelCore {
2674
2736
  this.rerender();
2675
2737
  }
2676
2738
  resetActiveText() {
2677
- if (this._store.state.activeText && this._store.state.activeText.value === ' ') {
2678
- this.deleteObject(this._store.state.activeText.id, true);
2739
+ if (this._store.state.activeText) {
2740
+ if (this._store.state.activeText.isEmpty) {
2741
+ this.deleteObject(this._store.state.activeText.id, true);
2742
+ }
2743
+ else {
2744
+ this._store.state.activeText.save();
2745
+ }
2679
2746
  }
2680
2747
  this._store.state.activeText = null;
2681
2748
  }
@@ -2730,15 +2797,21 @@ class KritzelCore {
2730
2797
  const worldY = yWithoutTranslate / this._store.state.scale;
2731
2798
  return { x: worldX, y: worldY };
2732
2799
  }
2800
+ beforeWorkspaceChange() {
2801
+ this.resetActiveText();
2802
+ this.clearSelection();
2803
+ this._store.setState('activeTool', KritzelToolRegistry.getTool('selection'));
2804
+ }
2733
2805
  }
2734
2806
 
2735
- 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}";
2807
+ 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}";
2736
2808
 
2737
2809
  const KritzelEngine = /*@__PURE__*/ proxyCustomElement(class KritzelEngine extends H {
2738
2810
  get host() { return this; }
2739
2811
  workspace;
2740
2812
  onWorkspaceChange(newWorkspace) {
2741
2813
  if (this.core.store.state.activeWorkspace !== newWorkspace) {
2814
+ this.core.beforeWorkspaceChange();
2742
2815
  this.core.initializeWorkspace(newWorkspace);
2743
2816
  }
2744
2817
  }
@@ -2924,19 +2997,19 @@ const KritzelEngine = /*@__PURE__*/ proxyCustomElement(class KritzelEngine exten
2924
2997
  object.scale = object.scale ? object.scale : this.core.store.state.scale;
2925
2998
  object.zIndex = this.core.store.currentZIndex;
2926
2999
  const command = new AddObjectCommand(this.core, this, object);
2927
- this.core.history.executeCommand(command);
3000
+ this.core.commandManager.executeCommand(command);
2928
3001
  return object;
2929
3002
  }
2930
3003
  async updateObject(object, updatedProperties) {
2931
3004
  this.core.deselectAllObjects();
2932
3005
  const command = new UpdateObjectCommand(this.core, this, object, updatedProperties);
2933
- this.core.history.executeCommand(command);
3006
+ this.core.commandManager.executeCommand(command);
2934
3007
  return object;
2935
3008
  }
2936
3009
  async removeObject(object) {
2937
3010
  this.core.deselectAllObjects();
2938
3011
  const command = new RemoveObjectCommand(this.core, this, object);
2939
- this.core.history.executeCommand(command);
3012
+ this.core.commandManager.executeCommand(command);
2940
3013
  return object;
2941
3014
  }
2942
3015
  async getSelectedObjects() {
@@ -2960,7 +3033,7 @@ const KritzelEngine = /*@__PURE__*/ proxyCustomElement(class KritzelEngine exten
2960
3033
  async centerObjectInViewport(object) {
2961
3034
  object.centerInViewport();
2962
3035
  const command = new UpdateObjectCommand(this.core, this, object, object);
2963
- this.core.history.executeCommand(command);
3036
+ this.core.commandManager.executeCommand(command);
2964
3037
  return object;
2965
3038
  }
2966
3039
  async getCopiedObjects() {
@@ -3031,20 +3104,25 @@ const KritzelEngine = /*@__PURE__*/ proxyCustomElement(class KritzelEngine exten
3031
3104
  _handleActiveToolChange(activeTool) {
3032
3105
  if (!(activeTool instanceof KritzelSelectionTool)) {
3033
3106
  this.core.clearSelection();
3107
+ this.core.store.state.selectionBox = null;
3108
+ this.core.store.state.isSelecting = false;
3109
+ this.core.store.state.isResizeHandleSelected = false;
3110
+ this.core.store.state.isRotationHandleSelected = false;
3034
3111
  }
3035
3112
  this.core.store.state.skipContextMenu = false;
3036
3113
  this.core.store.state.copiedObjects = null;
3037
3114
  this.activeToolChange.emit(activeTool);
3038
3115
  KritzelKeyboardHelper.forceHideKeyboard();
3116
+ this.core.rerender();
3039
3117
  }
3040
3118
  render() {
3041
3119
  const computedStyle = window.getComputedStyle(this.host);
3042
3120
  const baseHandleSizePx = computedStyle.getPropertyValue('--kritzel-selection-handle-size').trim() || '6px';
3043
3121
  const baseHandleSize = parseFloat(baseHandleSizePx);
3044
3122
  const baseHandleTouchSize = baseHandleSize * 2 < 14 ? 14 : baseHandleSize;
3045
- const viewportCenterX = (this.core.store.state.viewportWidth / 2) + this.core.store.state.translateX;
3046
- const viewportCenterY = (this.core.store.state.viewportHeight / 2) + this.core.store.state.translateY;
3047
- return (h(Host, { key: 'e14b9b0d5ece944a28dbdfd55cd15d3889d344ca' }, h("div", { key: '5bb0cf225392a46c81ccc3fc9cecf08ccf5451dd', class: "debug-panel", style: { display: this.core.store.state.debugInfo.showViewportInfo ? 'block' : 'none' } }, h("div", { key: '49c54b5c2cf67a3bf98319a87cc6bf43738e260a' }, "ActiveWorkspaceId: ", this.core.store.state?.activeWorkspace?.id), h("div", { key: 'c094fbdee828a5699901e5ba09981fdd2970533a' }, "ActiveWorkspaceName: ", this.core.store.state?.activeWorkspace?.name), h("div", { key: '0b260c50045a2dc90f5131bdec5007c5260f435f' }, "TranslateX: ", this.core.store.state?.translateX), h("div", { key: '36ac3660b4dbc902cc6ec4c042f63b03a8b5f38e' }, "TranslateY: ", this.core.store.state?.translateY), h("div", { key: '4d74e2b8b8df35a8f2423e8210662d614e98c9f3' }, "ViewportWidth: ", this.core.store.state?.viewportWidth), h("div", { key: '2c583b35f9b975191bd30f5bcc44a847d442a75b' }, "ViewportHeight: ", this.core.store.state?.viewportHeight), h("div", { key: 'b8f4de7566c250e637f7fb161ee5d4afcf55a862' }, "Scale: ", this.core.store.state?.scale), h("div", { key: '615063733b8a598d24c090397cbda94196f77861' }, "ActiveTool: ", this.core.store.state?.activeTool?.name), h("div", { key: '66f5d805c6a824bccef568b137a4674007050a1e' }, "HasViewportChanged: ", this.core.store.state?.hasViewportChanged ? 'true' : 'false'), h("div", { key: '91f0313f2cfbc7f123be53d8611d0e5f3cfadfae' }, "IsEnabled: ", this.core.store.state?.isEnabled ? 'true' : 'false'), h("div", { key: '944af3ec28b0e7dcf4696477adbd3182d2371196' }, "IsScaling: ", this.core.store.state?.isScaling ? 'true' : 'false'), h("div", { key: '82cfb1b949a3612f786a2d41074286996c9b18e7' }, "IsPanning: ", this.core.store.state?.isPanning ? 'true' : 'false'), h("div", { key: '743ced0847a98b34c404216e888fc24445e291d5' }, "IsSelecting: ", this.isSelecting ? 'true' : 'false'), h("div", { key: '56f7de0f7eb99ee11f4e9c30f14b961c6498415a' }, "IsSelectionActive: ", this.isSelectionActive ? 'true' : 'false'), h("div", { key: '41c55a52a4a3cb1a04e0bb0249e7095a57c52f78' }, "IsResizeHandleSelected: ", this.core.store.state.isResizeHandleSelected ? 'true' : 'false'), h("div", { key: 'f02fbeae6e0e0cb9aca887314f4a5753712373fa' }, "IsRotationHandleSelected: ", this.core.store.state.isRotationHandleSelected ? 'true' : 'false'), h("div", { key: '1ff7b7f138a51c5cc16894483c908f7bde31be40' }, "IsDrawing: ", this.core.store.state.isDrawing ? 'true' : 'false'), h("div", { key: '25b4a1c609dc968e70636fcf73d330996a137342' }, "IsWriting: ", this.core.store.state.isWriting ? 'true' : 'false'), h("div", { key: 'd9de8d6553664633a0462130ee71fbbb80984ff4' }, "PointerX: ", this.core.store.state?.pointerX), h("div", { key: '3f7d3604c3da89fc3c98fb4704474d41773a51fa' }, "PointerY: ", this.core.store.state?.pointerY), h("div", { key: 'e32a4265b7ca234766e4ceb5d98c7898917423ef' }, "SelectedObjects: ", this.core.store.state.selectionGroup?.objects.length || 0), h("div", { key: 'c0d4bd0aab851c1ab4c1b1d2fd99db7397538dcd' }, "ViewportCenter: (", viewportCenterX.toFixed(2), ", ", viewportCenterY.toFixed(2), ")")), h("div", { key: '47cdf9bd5ae9e88ac39376852b4fcf8ebbf44626', id: "origin", class: "origin", style: {
3123
+ const viewportCenterX = this.core.store.state.viewportWidth / 2 + this.core.store.state.translateX;
3124
+ const viewportCenterY = this.core.store.state.viewportHeight / 2 + this.core.store.state.translateY;
3125
+ return (h(Host, { key: 'f7fc3c4c6a91ccdabb83832671e36ebf49ce56c0' }, h("div", { key: 'f6a2ce9e78a1d0e9ea0590035f5b8811f62c8633', class: "debug-panel", style: { display: this.core.store.state.debugInfo.showViewportInfo ? 'block' : 'none' } }, h("div", { key: '5752045746f275223bd42c16dd7e848adaaae9f2' }, "ActiveWorkspaceId: ", this.core.store.state?.activeWorkspace?.id), h("div", { key: 'd99595b135243a7b69a583be33f7b195908ec716' }, "ActiveWorkspaceName: ", this.core.store.state?.activeWorkspace?.name), h("div", { key: '7cecdccad47d3957370ea923f3dfbcd618b5d28e' }, "TranslateX: ", this.core.store.state?.translateX), h("div", { key: '3a5ed989f2343eda92c7c81855c785dbf58fa770' }, "TranslateY: ", this.core.store.state?.translateY), h("div", { key: 'b78074a29463276300ce498b2ddb328cef9026cd' }, "ViewportWidth: ", this.core.store.state?.viewportWidth), h("div", { key: 'd4c8dcfddfa1984eedf695d74f9401fc3284c60b' }, "ViewportHeight: ", this.core.store.state?.viewportHeight), h("div", { key: '566b6dc9afd904ee49e59587ed664e5f46decead' }, "Scale: ", this.core.store.state?.scale), h("div", { key: 'd3feb7a11727c4337ca75a26b3275a0b5d639961' }, "ActiveTool: ", this.core.store.state?.activeTool?.name), h("div", { key: '3991c34df53c7d6fd97c83b0d4b8c9fb438c88fc' }, "HasViewportChanged: ", this.core.store.state?.hasViewportChanged ? 'true' : 'false'), h("div", { key: '5a4244b43871f96d08144483352064804f04e538' }, "IsEnabled: ", this.core.store.state?.isEnabled ? 'true' : 'false'), h("div", { key: '197655c09e24d624ea4dcd312169aeb449ed57ce' }, "IsScaling: ", this.core.store.state?.isScaling ? 'true' : 'false'), h("div", { key: 'a3e4a75a9853c8cee1485cbf8621377466babf90' }, "IsPanning: ", this.core.store.state?.isPanning ? 'true' : 'false'), h("div", { key: '171e0df3e1856e9fe8cd18be5c258c7472317453' }, "IsSelecting: ", this.isSelecting ? 'true' : 'false'), h("div", { key: '66f5a56333dbac1da34e01f5ee1f577e1a964701' }, "IsSelectionActive: ", this.isSelectionActive ? 'true' : 'false'), h("div", { key: 'b869e07b76c2fa21ab5383788e81a40ffdad1b2c' }, "IsResizeHandleSelected: ", this.core.store.state.isResizeHandleSelected ? 'true' : 'false'), h("div", { key: 'd936326f8ea675e170d418f4e97a5d46057bc385' }, "IsRotationHandleSelected: ", this.core.store.state.isRotationHandleSelected ? 'true' : 'false'), h("div", { key: '8594489402204ae4a9cd1bc7795169dbfa2d633d' }, "IsDrawing: ", this.core.store.state.isDrawing ? 'true' : 'false'), h("div", { key: 'f7a254dc35bfe6d42c32d25d0f277b211d86b03f' }, "IsWriting: ", this.core.store.state.isWriting ? 'true' : 'false'), h("div", { key: '053ebd21504bfa3622e4b3e965e39f707c19794d' }, "PointerX: ", this.core.store.state?.pointerX), h("div", { key: 'f330c65821326062874441355352134927760d61' }, "PointerY: ", this.core.store.state?.pointerY), h("div", { key: 'f6c6902562f3e74afa3a0426e72b0c803977250b' }, "SelectedObjects: ", this.core.store.state.selectionGroup?.objects.length || 0), h("div", { key: '99a2d4280d5e79d7dd9a7a27d809e70f90eac38b' }, "ViewportCenter: (", viewportCenterX.toFixed(2), ", ", viewportCenterY.toFixed(2), ")")), h("div", { key: 'dac21fa0ac9487b74c89ac7408e80d9fb89b4558', id: "origin", class: "origin", style: {
3048
3126
  transform: `matrix(${this.core.store.state?.scale}, 0, 0, ${this.core.store.state?.scale}, ${this.core.store.state?.translateX}, ${this.core.store.state?.translateY})`,
3049
3127
  } }, this.core.store.state.objectsMap.allObjects()?.map(object => {
3050
3128
  return (h("div", { key: object.id, style: {
@@ -3072,42 +3150,36 @@ const KritzelEngine = /*@__PURE__*/ proxyCustomElement(class KritzelEngine exten
3072
3150
  borderStyle: 'solid',
3073
3151
  padding: object.padding + 'px',
3074
3152
  overflow: 'visible',
3075
- } }, KritzelClassHelper.isInstanceOf(object, 'KritzelPath') && (h("svg", { ref: el => (el ? object.mount(el) : object.unmount()), xmlns: "http://www.w3.org/2000/svg", style: {
3153
+ } }, KritzelClassHelper.isInstanceOf(object, 'KritzelPath') && (h("svg", { ref: el => object.mount(el), xmlns: "http://www.w3.org/2000/svg", style: {
3076
3154
  height: object?.height.toString(),
3077
3155
  width: object?.width.toString(),
3078
3156
  position: 'absolute',
3079
3157
  overflow: 'visible',
3080
- }, viewBox: object?.viewBox }, h("path", { d: object?.d, fill: object.fill, stroke: object?.stroke }))), KritzelClassHelper.isInstanceOf(object, 'KritzelImage') && (h("img", { ref: el => (el ? object.mount(el) : object.unmount()), src: object.src, style: {
3158
+ }, viewBox: object?.viewBox }, h("path", { d: object?.d, fill: object.fill, stroke: object?.stroke }))), KritzelClassHelper.isInstanceOf(object, 'KritzelImage') && (h("img", { ref: el => object.mount(el), src: object.src, style: {
3081
3159
  width: '100%',
3082
3160
  height: '100%',
3083
3161
  userSelect: 'none',
3084
3162
  pointerEvents: 'none',
3085
- }, draggable: false, onDragStart: e => e.preventDefault() })), KritzelClassHelper.isInstanceOf(object, 'KritzelText') && (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: {
3086
- width: '100%',
3087
- height: '100%',
3088
- color: object.fontColor,
3089
- fontSize: object.fontSize?.toString() + 'px',
3090
- fontFamily: object.fontFamily,
3091
- border: 'none',
3092
- outline: 'none',
3093
- resize: 'none',
3094
- overflow: 'hidden',
3095
- display: 'block',
3096
- padding: '1px',
3097
- whiteSpace: 'nowrap',
3098
- pointerEvents: object.isReadonly ? 'none' : 'auto',
3099
- cursor: object.isReadonly ? 'default' : 'text',
3100
- caretColor: object.isReadonly ? 'transparent' : 'auto',
3101
- } })), KritzelClassHelper.isInstanceOf(object, 'KritzelCustomElement') && (h("div", { ref: el => (el ? object.mount(el) : object.unmount()), style: {
3163
+ }, draggable: false, onDragStart: e => e.preventDefault() })), KritzelClassHelper.isInstanceOf(object, 'KritzelText') && (h("div", { ref: el => object.mount(el), onPointerDown: e => object.handlePointerDown(e), onPointerMove: e => object.handlePointerMove(e), onPointerUp: e => object.handlePointerUp(e), style: {
3164
+ minWidth: object.initialWidth + 'px',
3165
+ minHeight: object.initialHeight + 'px',
3166
+ maxWidth: '500px',
3167
+ height: 'auto',
3168
+ width: 'max-content',
3169
+ transformOrigin: 'top left',
3170
+ transform: `scale(${object.scaleFactor})`,
3171
+ backgroundColor: object.backgroundColor,
3172
+ overflow: 'visible',
3173
+ } })), KritzelClassHelper.isInstanceOf(object, 'KritzelCustomElement') && (h("div", { ref: el => object.mount(el), style: {
3102
3174
  width: '100%',
3103
3175
  height: '100%',
3104
3176
  pointerEvents: 'auto',
3105
3177
  overflow: 'hidden',
3106
3178
  display: 'block',
3107
- } })), KritzelClassHelper.isInstanceOf(object, 'KritzelSelectionGroup') && (h("div", { ref: el => (el ? object.mount(el) : object.unmount()), style: {
3179
+ } })), KritzelClassHelper.isInstanceOf(object, 'KritzelSelectionGroup') && (h("div", { ref: el => object.mount(el), style: {
3108
3180
  width: '100%',
3109
3181
  height: '100%',
3110
- } })), KritzelClassHelper.isInstanceOf(object, 'KrtizelSelectionBox') && (h("div", { ref: el => (el ? object.mount(el) : object.unmount()), style: {
3182
+ } })), KritzelClassHelper.isInstanceOf(object, 'KrtizelSelectionBox') && (h("div", { ref: el => object.mount(el), style: {
3111
3183
  width: '100%',
3112
3184
  height: '100%',
3113
3185
  backgroundColor: KritzelDevicesHelper.isFirefox() ? object.backgroundColor : 'transparent',
@@ -3154,7 +3226,7 @@ const KritzelEngine = /*@__PURE__*/ proxyCustomElement(class KritzelEngine exten
3154
3226
  }, visibility: object.isSelected && !this.isSelecting ? 'visible' : 'hidden' }), 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: {
3155
3227
  fill: 'transparent',
3156
3228
  cursor: 'grab',
3157
- }, visibility: object.isSelected && !this.isSelecting ? 'visible' : 'hidden' }), h("g", { style: { display: this.core.store.state.debugInfo.showObjectInfo ? 'block' : 'none', pointerEvents: 'none' } }, h("foreignObject", { x: object.totalWidth.toString(), y: "0", width: "400px", height: "160px", style: { minHeight: '0', minWidth: '0', display: object.isDebugInfoVisible ? 'block' : 'none' } }, h("div", { style: { width: '100%', height: '100%' } }, h("div", { style: { whiteSpace: 'nowrap' } }, "zIndex: ", object.zIndex), h("div", { style: { whiteSpace: 'nowrap' } }, "translateX: ", object.translateX), h("div", { style: { whiteSpace: 'nowrap' } }, "translateY: ", object.translateY), h("div", { style: { whiteSpace: 'nowrap' } }, "width: ", object.width), h("div", { style: { whiteSpace: 'nowrap' } }, "height: ", object.height), h("div", { style: { whiteSpace: 'nowrap' } }, "scale: ", object.scale), h("div", { style: { whiteSpace: 'nowrap' } }, "rotation: ", object.rotation), h("div", { style: { whiteSpace: 'nowrap' } }, "x: ", object.x), h("div", { style: { whiteSpace: 'nowrap' } }, "y: ", object.y)))))));
3229
+ }, visibility: object.isSelected && !this.isSelecting ? 'visible' : 'hidden' }), h("g", { style: { display: this.core.store.state.debugInfo.showObjectInfo ? 'block' : 'none', pointerEvents: 'none' } }, h("foreignObject", { x: object.totalWidth.toString(), y: "0", width: "400px", height: "160px", style: { minHeight: '0', minWidth: '0', display: object.isDebugInfoVisible ? 'block' : 'none' } }, h("div", { style: { width: '100%', height: '100%' } }, h("div", { style: { whitespace: 'nowrap' } }, "Id: ", object.id), h("div", { style: { whiteSpace: 'nowrap' } }, "width: ", object.width), h("div", { style: { whiteSpace: 'nowrap' } }, "height: ", object.height)))))));
3158
3230
  }), h("svg", { key: "current-path", class: "object", xmlns: "http://www.w3.org/2000/svg", width: this.core.store.state.currentPath?.width, height: this.core.store.state.currentPath?.height, style: {
3159
3231
  left: '0',
3160
3232
  top: '0',
@@ -3163,7 +3235,7 @@ const KritzelEngine = /*@__PURE__*/ proxyCustomElement(class KritzelEngine exten
3163
3235
  transform: this.core.store.state.currentPath?.transformationMatrix,
3164
3236
  transformOrigin: 'top left',
3165
3237
  overflow: 'visible',
3166
- }, viewBox: this.core.store.state.currentPath?.viewBox }, h("path", { key: '318e360ef363dd90e613e2bc35233d6b045fe6df', 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 && (h("kritzel-context-menu", { key: '455cd5c01932246ef318e83934b7869edd063a99', class: "context-menu", ref: el => (this.contextMenuElement = el), items: this.core.store.state.contextMenuItems, objects: this.core.store.state.selectionGroup?.objects || [], style: {
3238
+ }, viewBox: this.core.store.state.currentPath?.viewBox }, h("path", { key: 'f3aaf24804430eeb0308a15ae4a38df302d0566f', 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 && (h("kritzel-context-menu", { key: 'd99a76a11b613167d5723d1c16e9289e45eee8a3', class: "context-menu", ref: el => (this.contextMenuElement = el), items: this.core.store.state.contextMenuItems, objects: this.core.store.state.selectionGroup?.objects || [], style: {
3167
3239
  position: 'fixed',
3168
3240
  left: `${this.core.store.state.contextMenuX}px`,
3169
3241
  top: `${this.core.store.state.contextMenuY}px`,
@@ -3174,7 +3246,7 @@ const KritzelEngine = /*@__PURE__*/ proxyCustomElement(class KritzelEngine exten
3174
3246
  y: (-this.core.store.state.translateY + this.core.store.state.contextMenuY) / this.core.store.state.scale,
3175
3247
  }, this.core.store.state.selectionGroup?.objects);
3176
3248
  this.hideContextMenu();
3177
- }, onClose: () => this.hideContextMenu() })), this.core.store.state?.activeTool instanceof KritzelEraserTool && !this.core.store.state.isScaling && h("kritzel-cursor-trail", { key: 'a70d8765402f0938e9df4c1cc2f8c9a13dfa4445', core: this.core })));
3249
+ }, onClose: () => this.hideContextMenu() })), this.core.store.state?.activeTool instanceof KritzelEraserTool && !this.core.store.state.isScaling && h("kritzel-cursor-trail", { key: 'fc7c474156442dfb5c057ef4ed4f0e5f015c2502', core: this.core })));
3178
3250
  }
3179
3251
  static get watchers() { return {
3180
3252
  "workspace": ["onWorkspaceChange"],
@@ -3184,9 +3256,9 @@ const KritzelEngine = /*@__PURE__*/ proxyCustomElement(class KritzelEngine exten
3184
3256
  static get style() { return kritzelEngineCss; }
3185
3257
  }, [257, "kritzel-engine", {
3186
3258
  "workspace": [16],
3187
- "activeTool": [16, "active-tool"],
3188
- "globalContextMenuItems": [16, "global-context-menu-items"],
3189
- "objectContextMenuItems": [16, "object-context-menu-items"],
3259
+ "activeTool": [16],
3260
+ "globalContextMenuItems": [16],
3261
+ "objectContextMenuItems": [16],
3190
3262
  "scaleMax": [1026, "scale-max"],
3191
3263
  "scaleMin": [1026, "scale-min"],
3192
3264
  "forceUpdate": [32],
@@ -3254,6 +3326,6 @@ function defineCustomElement() {
3254
3326
  }
3255
3327
 
3256
3328
  export { ABSOLUTE_SCALE_MAX as A, KritzelImage as K, KritzelEraserTool as a, KritzelImageTool as b, KritzelSelectionTool as c, KritzelEngine as d, defineCustomElement as e, ABSOLUTE_SCALE_MIN as f };
3257
- //# sourceMappingURL=p-BV5iL9W6.js.map
3329
+ //# sourceMappingURL=p-CziwfEQh.js.map
3258
3330
 
3259
- //# sourceMappingURL=p-BV5iL9W6.js.map
3331
+ //# sourceMappingURL=p-CziwfEQh.js.map