kritzel-stencil 0.0.119 → 0.0.121

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 (167) hide show
  1. package/dist/cjs/{index-CXT94beA.js → index-BcrLbdO1.js} +50 -10
  2. package/dist/cjs/index-BcrLbdO1.js.map +1 -0
  3. package/dist/cjs/index-BjLSiQIM.js +2342 -0
  4. package/dist/cjs/index-BjLSiQIM.js.map +1 -0
  5. package/dist/cjs/index.cjs.js +8 -1
  6. package/dist/cjs/index.cjs.js.map +1 -1
  7. package/dist/cjs/kritzel-brush-style_18.cjs.entry.js +363 -1743
  8. package/dist/cjs/kritzel-brush-style_18.cjs.entry.js.map +1 -1
  9. package/dist/cjs/loader.cjs.js +2 -2
  10. package/dist/cjs/stencil.cjs.js +3 -3
  11. package/dist/cjs/stencil.cjs.js.map +1 -1
  12. package/dist/collection/classes/commands/add-selection-group.command.js +2 -0
  13. package/dist/collection/classes/commands/add-selection-group.command.js.map +1 -1
  14. package/dist/collection/classes/objects/base-object.class.js +4 -0
  15. package/dist/collection/classes/objects/base-object.class.js.map +1 -1
  16. package/dist/collection/classes/objects/image.class.js +23 -2
  17. package/dist/collection/classes/objects/image.class.js.map +1 -1
  18. package/dist/collection/classes/objects/path.class.js +15 -5
  19. package/dist/collection/classes/objects/path.class.js.map +1 -1
  20. package/dist/collection/classes/objects/text.class.js +2 -1
  21. package/dist/collection/classes/objects/text.class.js.map +1 -1
  22. package/dist/collection/classes/store.class.js +2 -13
  23. package/dist/collection/classes/store.class.js.map +1 -1
  24. package/dist/collection/classes/tools/image-tool.class.js +6 -23
  25. package/dist/collection/classes/tools/image-tool.class.js.map +1 -1
  26. package/dist/collection/classes/tools/selection-tool.class.js +4 -13
  27. package/dist/collection/classes/tools/selection-tool.class.js.map +1 -1
  28. package/dist/collection/classes/viewport.class.js.map +1 -1
  29. package/dist/collection/collection-manifest.json +1 -1
  30. package/dist/collection/components/core/kritzel-editor/kritzel-editor.js +217 -13
  31. package/dist/collection/components/core/kritzel-editor/kritzel-editor.js.map +1 -1
  32. package/dist/collection/components/core/kritzel-engine/kritzel-engine.js +159 -68
  33. package/dist/collection/components/core/kritzel-engine/kritzel-engine.js.map +1 -1
  34. package/dist/collection/components/ui/kritzel-context-menu/kritzel-context-menu.js +104 -4
  35. package/dist/collection/components/ui/kritzel-context-menu/kritzel-context-menu.js.map +1 -1
  36. package/dist/collection/components/ui/kritzel-controls/kritzel-controls.js +30 -9
  37. package/dist/collection/components/ui/kritzel-controls/kritzel-controls.js.map +1 -1
  38. package/dist/collection/configs/default-brush-tool.config.js +60 -0
  39. package/dist/collection/configs/default-brush-tool.config.js.map +1 -0
  40. package/dist/collection/configs/default-engine-state.js +6 -2
  41. package/dist/collection/configs/default-engine-state.js.map +1 -1
  42. package/dist/collection/configs/default-text-tool.config.js +32 -0
  43. package/dist/collection/configs/default-text-tool.config.js.map +1 -0
  44. package/dist/collection/constants/engine.constants.js +3 -0
  45. package/dist/collection/constants/engine.constants.js.map +1 -0
  46. package/dist/collection/index.js +8 -0
  47. package/dist/collection/index.js.map +1 -1
  48. package/dist/collection/interfaces/context-menu-item.interface.js.map +1 -1
  49. package/dist/collection/interfaces/engine-state.interface.js.map +1 -1
  50. package/dist/collection/interfaces/object.interface.js.map +1 -1
  51. package/dist/components/index.js +4 -4
  52. package/dist/components/kritzel-brush-style.js +1 -1
  53. package/dist/components/kritzel-color-palette.js +1 -1
  54. package/dist/components/kritzel-color.js +1 -1
  55. package/dist/components/kritzel-context-menu.js +1 -1
  56. package/dist/components/kritzel-control-brush-config.js +1 -1
  57. package/dist/components/kritzel-control-text-config.js +1 -1
  58. package/dist/components/kritzel-controls.js +1 -1
  59. package/dist/components/kritzel-cursor-trail.js +1 -1
  60. package/dist/components/kritzel-dropdown.js +1 -1
  61. package/dist/components/kritzel-editor.js +110 -68
  62. package/dist/components/kritzel-editor.js.map +1 -1
  63. package/dist/components/kritzel-engine.js +1 -1
  64. package/dist/components/kritzel-font-family.js +1 -1
  65. package/dist/components/kritzel-font-size.js +1 -1
  66. package/dist/components/kritzel-font.js +1 -1
  67. package/dist/components/kritzel-icon.js +1 -1
  68. package/dist/components/kritzel-stroke-size.js +1 -1
  69. package/dist/components/kritzel-tooltip.js +1 -1
  70. package/dist/components/kritzel-utility-panel.js +1 -1
  71. package/dist/components/{p-CtNzxQ7T.js → p--2FkikYE.js} +4 -4
  72. package/dist/components/{p-CtNzxQ7T.js.map → p--2FkikYE.js.map} +1 -1
  73. package/dist/components/{p-LIijWPsT.js → p--tElassI.js} +4 -4
  74. package/dist/components/{p-LIijWPsT.js.map → p--tElassI.js.map} +1 -1
  75. package/dist/components/{p-C6kzcN4b.js → p-B2wWYPH8.js} +4 -4
  76. package/dist/components/{p-C6kzcN4b.js.map → p-B2wWYPH8.js.map} +1 -1
  77. package/dist/components/{p-93b-eQ0s.js → p-BAMl2Ww6.js} +29 -27
  78. package/dist/components/p-BAMl2Ww6.js.map +1 -0
  79. package/dist/components/{p-B8nuvSxt.js → p-BSS4UREq.js} +10 -10
  80. package/dist/components/{p-B8nuvSxt.js.map → p-BSS4UREq.js.map} +1 -1
  81. package/dist/components/{p-JQA2FRVr.js → p-C3E9PtD3.js} +11 -11
  82. package/dist/components/{p-JQA2FRVr.js.map → p-C3E9PtD3.js.map} +1 -1
  83. package/dist/components/{p-B57pFHwJ.js → p-CDpq9L_H.js} +4 -4
  84. package/dist/components/{p-B57pFHwJ.js.map → p-CDpq9L_H.js.map} +1 -1
  85. package/dist/components/p-CEYRFk55.js +119 -0
  86. package/dist/components/p-CEYRFk55.js.map +1 -0
  87. package/dist/components/{p-BV9-NuyD.js → p-CIb4IA9u.js} +6 -6
  88. package/dist/components/{p-BV9-NuyD.js.map → p-CIb4IA9u.js.map} +1 -1
  89. package/dist/components/{p-eBBOf568.js → p-CqPrOhzi.js} +5 -5
  90. package/dist/components/{p-eBBOf568.js.map → p-CqPrOhzi.js.map} +1 -1
  91. package/dist/components/{p-CaQ7Iei7.js → p-CxmkJbeV.js} +4 -4
  92. package/dist/components/{p-CaQ7Iei7.js.map → p-CxmkJbeV.js.map} +1 -1
  93. package/dist/components/{p-yBnfPxIa.js → p-D-Rf05Ov.js} +5 -5
  94. package/dist/components/{p-yBnfPxIa.js.map → p-D-Rf05Ov.js.map} +1 -1
  95. package/dist/components/{p-CSSrNLad.js → p-D0L3GqSK.js} +4 -4
  96. package/dist/components/{p-CSSrNLad.js.map → p-D0L3GqSK.js.map} +1 -1
  97. package/dist/components/{p-fmNiA3Yr.js → p-D1oFXBAp.js} +5 -5
  98. package/dist/components/{p-fmNiA3Yr.js.map → p-D1oFXBAp.js.map} +1 -1
  99. package/dist/components/{p-DRuQsvUx.js → p-DC3j4P1n.js} +23 -8
  100. package/dist/components/p-DC3j4P1n.js.map +1 -0
  101. package/dist/components/{p-D04aTZsR.js → p-DbPbyRLO.js} +5 -5
  102. package/dist/components/{p-D04aTZsR.js.map → p-DbPbyRLO.js.map} +1 -1
  103. package/dist/components/{p-DoQOtXjT.js → p-dCaxwGmu.js} +44 -9
  104. package/dist/components/p-dCaxwGmu.js.map +1 -0
  105. package/dist/components/{p-BBIuV3j1.js → p-gDLg_PJJ.js} +5 -5
  106. package/dist/components/{p-BBIuV3j1.js.map → p-gDLg_PJJ.js.map} +1 -1
  107. package/dist/components/{p-DuWb7MaD.js → p-q-xqpmae.js} +137 -125
  108. package/dist/components/p-q-xqpmae.js.map +1 -0
  109. package/dist/esm/{index-CGHvfMWF.js → index-BPFXWTBp.js} +50 -10
  110. package/dist/esm/index-BPFXWTBp.js.map +1 -0
  111. package/dist/esm/index-DsUDklEm.js +2318 -0
  112. package/dist/esm/index-DsUDklEm.js.map +1 -0
  113. package/dist/esm/index.js +1 -1
  114. package/dist/esm/kritzel-brush-style_18.entry.js +333 -1713
  115. package/dist/esm/kritzel-brush-style_18.entry.js.map +1 -1
  116. package/dist/esm/loader.js +3 -3
  117. package/dist/esm/stencil.js +4 -4
  118. package/dist/esm/stencil.js.map +1 -1
  119. package/dist/stencil/index.esm.js +1 -1
  120. package/dist/stencil/p-3797c300.entry.js +2 -0
  121. package/dist/stencil/p-3797c300.entry.js.map +1 -0
  122. package/dist/stencil/p-BPFXWTBp.js +3 -0
  123. package/dist/stencil/p-BPFXWTBp.js.map +1 -0
  124. package/dist/stencil/p-DsUDklEm.js +2 -0
  125. package/dist/stencil/p-DsUDklEm.js.map +1 -0
  126. package/dist/stencil/stencil.esm.js +1 -1
  127. package/dist/stencil/stencil.esm.js.map +1 -1
  128. package/dist/types/classes/objects/base-object.class.d.ts +3 -1
  129. package/dist/types/classes/objects/image.class.d.ts +8 -0
  130. package/dist/types/classes/objects/path.class.d.ts +9 -0
  131. package/dist/types/classes/objects/text.class.d.ts +2 -1
  132. package/dist/types/classes/store.class.d.ts +1 -1
  133. package/dist/types/classes/tools/image-tool.class.d.ts +0 -4
  134. package/dist/types/components/core/kritzel-editor/kritzel-editor.d.ts +9 -3
  135. package/dist/types/components/core/kritzel-engine/kritzel-engine.d.ts +12 -4
  136. package/dist/types/components/ui/kritzel-context-menu/kritzel-context-menu.d.ts +8 -0
  137. package/dist/types/components/ui/kritzel-controls/kritzel-controls.d.ts +2 -1
  138. package/dist/types/components.d.ts +77 -22
  139. package/dist/types/configs/default-brush-tool.config.d.ts +2 -0
  140. package/dist/types/configs/default-text-tool.config.d.ts +2 -0
  141. package/dist/types/constants/engine.constants.d.ts +2 -0
  142. package/dist/types/index.d.ts +8 -0
  143. package/dist/types/interfaces/context-menu-item.interface.d.ts +13 -2
  144. package/dist/types/interfaces/engine-state.interface.d.ts +4 -0
  145. package/dist/types/interfaces/object.interface.d.ts +2 -0
  146. package/package.json +1 -1
  147. package/dist/cjs/index-CXT94beA.js.map +0 -1
  148. package/dist/cjs/index-aaWestcD.js +0 -827
  149. package/dist/cjs/index-aaWestcD.js.map +0 -1
  150. package/dist/collection/configs/default-toolbar-controls.js +0 -139
  151. package/dist/collection/configs/default-toolbar-controls.js.map +0 -1
  152. package/dist/components/p-93b-eQ0s.js.map +0 -1
  153. package/dist/components/p-CYnE3twZ.js +0 -49
  154. package/dist/components/p-CYnE3twZ.js.map +0 -1
  155. package/dist/components/p-DRuQsvUx.js.map +0 -1
  156. package/dist/components/p-DoQOtXjT.js.map +0 -1
  157. package/dist/components/p-DuWb7MaD.js.map +0 -1
  158. package/dist/esm/index-CGHvfMWF.js.map +0 -1
  159. package/dist/esm/index-Dn7aP72S.js +0 -814
  160. package/dist/esm/index-Dn7aP72S.js.map +0 -1
  161. package/dist/stencil/p-6c35ba88.entry.js +0 -2
  162. package/dist/stencil/p-6c35ba88.entry.js.map +0 -1
  163. package/dist/stencil/p-CGHvfMWF.js +0 -3
  164. package/dist/stencil/p-CGHvfMWF.js.map +0 -1
  165. package/dist/stencil/p-Dn7aP72S.js +0 -2
  166. package/dist/stencil/p-Dn7aP72S.js.map +0 -1
  167. package/dist/types/configs/default-toolbar-controls.d.ts +0 -4
@@ -1,827 +0,0 @@
1
- 'use strict';
2
-
3
- class KritzelToolRegistry {
4
- static registerTool(toolName, constructor, store) {
5
- const toolInstance = new constructor(store);
6
- toolInstance.name = toolName;
7
- this.registry[toolName] = toolInstance;
8
- return toolInstance;
9
- }
10
- static getTool(toolName) {
11
- const toolInstance = this.registry[toolName];
12
- if (!toolInstance) {
13
- console.warn(`Unknown tool: ${toolName}`);
14
- return null;
15
- }
16
- return toolInstance;
17
- }
18
- }
19
- KritzelToolRegistry.registry = {};
20
-
21
- class KritzelBaseTool {
22
- constructor(store) {
23
- this.__class__ = this.constructor.name;
24
- this.name = 'base-tool';
25
- this._store = store;
26
- }
27
- onActivate() {
28
- // default implementation
29
- }
30
- onDeactivate() {
31
- // default implementation
32
- }
33
- handlePointerDown(_event) {
34
- // default implementation
35
- }
36
- handlePointerMove(_event) {
37
- // default implementation
38
- }
39
- handlePointerUp(_event) {
40
- // default implementation
41
- }
42
- handleWheel(_event) {
43
- // default implementation
44
- }
45
- revive(object) {
46
- Object.assign(this, object);
47
- return this;
48
- }
49
- }
50
-
51
- class KritzelBaseCommand {
52
- constructor(store, initiator) {
53
- var _a, _b;
54
- this._store = store;
55
- this.initiator = (_b = (_a = initiator === null || initiator === void 0 ? void 0 : initiator.constructor) === null || _a === void 0 ? void 0 : _a.name) !== null && _b !== void 0 ? _b : 'Unknown';
56
- this.isUndoable = true;
57
- }
58
- execute() {
59
- throw new Error('Method not implemented.');
60
- }
61
- undo() {
62
- throw new Error('Method not implemented.');
63
- }
64
- }
65
-
66
- class AddObjectCommand extends KritzelBaseCommand {
67
- constructor(store, initiator, object) {
68
- super(store, initiator);
69
- this.object = object;
70
- }
71
- execute() {
72
- this._store.state.objectsOctree.insert(this.object);
73
- }
74
- undo() {
75
- this._store.state.objectsOctree.remove(object => object.id === this.object.id);
76
- }
77
- }
78
-
79
- exports.KritzelMouseButton = void 0;
80
- (function (KritzelMouseButton) {
81
- KritzelMouseButton[KritzelMouseButton["Left"] = 0] = "Left";
82
- KritzelMouseButton[KritzelMouseButton["Middle"] = 1] = "Middle";
83
- KritzelMouseButton[KritzelMouseButton["Right"] = 2] = "Right";
84
- })(exports.KritzelMouseButton || (exports.KritzelMouseButton = {}));
85
-
86
- class KritzelEventHelper {
87
- static isRightClick(ev) {
88
- return ev.button === exports.KritzelMouseButton.Right;
89
- }
90
- static isLeftClick(ev) {
91
- return ev.button === exports.KritzelMouseButton.Left;
92
- }
93
- static isMainMouseWheel(event) {
94
- return Math.abs(event.deltaY) > 0 && Math.abs(event.deltaX) === 0 && Number.isInteger(event.deltaY);
95
- }
96
- static isPointerEventOnContextMenu(event) {
97
- const path = event.composedPath();
98
- const contextMenu = path.find(element => element.classList && element.classList.contains('context-menu'));
99
- return !!contextMenu;
100
- }
101
- static onLongTouchPress(event, onSuccess, onCancel) {
102
- if (event.pointerType !== 'touch') {
103
- onCancel === null || onCancel === void 0 ? void 0 : onCancel();
104
- return () => { };
105
- }
106
- const longPressTimeout = 400;
107
- const moveThreshold = 10;
108
- const startX = event.clientX;
109
- const startY = event.clientY;
110
- const target = event.target;
111
- const timer = setTimeout(() => {
112
- removeListeners();
113
- onSuccess(event);
114
- }, longPressTimeout);
115
- const cancel = () => {
116
- clearTimeout(timer);
117
- removeListeners();
118
- onCancel === null || onCancel === void 0 ? void 0 : onCancel();
119
- };
120
- const onPointerMove = (e) => {
121
- if (Math.abs(e.clientX - startX) > moveThreshold || Math.abs(e.clientY - startY) > moveThreshold) {
122
- cancel();
123
- }
124
- };
125
- const onPointerUp = () => {
126
- cancel();
127
- };
128
- const onPointerCancel = () => {
129
- cancel();
130
- };
131
- const removeListeners = () => {
132
- target.removeEventListener('pointermove', onPointerMove);
133
- target.removeEventListener('pointerup', onPointerUp);
134
- target.removeEventListener('pointercancel', onPointerCancel);
135
- };
136
- target.addEventListener('pointermove', onPointerMove, { passive: true });
137
- target.addEventListener('pointerup', onPointerUp, { once: true });
138
- target.addEventListener('pointercancel', onPointerCancel, { once: true });
139
- return cancel;
140
- }
141
- }
142
-
143
- class KritzelKeyboardHelper {
144
- static forceHideKeyboard() {
145
- if (document.activeElement instanceof HTMLElement) {
146
- document.activeElement.blur();
147
- }
148
- }
149
- static enableInteractiveWidget() {
150
- const meta = document.querySelector('meta[name="viewport"][content*="interactive-widget=resizes-content"]');
151
- if (meta) {
152
- let currentContent = meta.getAttribute('content');
153
- if (!currentContent.includes('interactive-widget=resizes-content')) {
154
- currentContent += ', interactive-widget=resizes-content';
155
- }
156
- meta.setAttribute('content', currentContent);
157
- }
158
- }
159
- static disableInteractiveWidget() {
160
- const meta = document.querySelector('meta[name="viewport"][content*="interactive-widget=resizes-content"]');
161
- if (meta) {
162
- let currentContent = meta.getAttribute('content');
163
- let newContent = currentContent.replace(/\s*interactive-widget=resizes-content\s*[,;]?/g, '');
164
- newContent = newContent
165
- .replace(/,(\s*,)+/g, ',')
166
- .replace(/^,/, '')
167
- .replace(/,$/, '')
168
- .trim();
169
- meta.setAttribute('content', newContent);
170
- }
171
- }
172
- }
173
-
174
- class KritzelTextTool extends KritzelBaseTool {
175
- constructor(store) {
176
- super(store);
177
- this.fontFamily = 'Arial';
178
- this.fontSize = 16;
179
- this.fontColor = '#000000';
180
- this.palette = [
181
- '#000000',
182
- '#FFFFFF',
183
- '#FF0000',
184
- '#00FF00',
185
- '#0000FF',
186
- '#FFFF00',
187
- '#FF00FF',
188
- '#00FFFF',
189
- '#808080',
190
- '#C0C0C0',
191
- '#800000',
192
- '#008000',
193
- '#000080',
194
- '#808000',
195
- '#800080',
196
- ];
197
- }
198
- handlePointerDown(event) {
199
- if (event.cancelable) {
200
- event.preventDefault();
201
- }
202
- if (event.pointerType === 'mouse') {
203
- const path = event.composedPath().slice(1);
204
- const objectElement = path.find(element => element.classList && element.classList.contains('object'));
205
- const object = this._store.findObjectById(objectElement === null || objectElement === void 0 ? void 0 : objectElement.id);
206
- if (this._store.state.activeText === null && object && object instanceof KritzelText) {
207
- this._store.state.activeText = object;
208
- object.focus();
209
- return;
210
- }
211
- if (this._store.state.activeText !== null && object instanceof KritzelText) {
212
- object.focus();
213
- return;
214
- }
215
- if (this._store.state.activeText !== null) {
216
- this._store.resetActiveText();
217
- this._store.setState('activeTool', KritzelToolRegistry.getTool('selection'));
218
- return;
219
- }
220
- if (KritzelEventHelper.isLeftClick(event) === false) {
221
- return;
222
- }
223
- const clientX = event.clientX - this._store.offsetX;
224
- const clientY = event.clientY - this._store.offsetY;
225
- const text = KritzelText.create(this._store, this.fontSize, this.fontFamily);
226
- text.fontColor = this.fontColor;
227
- text.translateX = (clientX - this._store.state.translateX) / this._store.state.scale;
228
- text.translateY = (clientY - this._store.state.translateY) / this._store.state.scale;
229
- text.zIndex = this._store.currentZIndex;
230
- this._store.state.activeText = text;
231
- this._store.history.executeCommand(new AddObjectCommand(this._store, this, text));
232
- }
233
- if (event.pointerType === 'touch') {
234
- const activePointers = Array.from(this._store.state.pointers.values());
235
- const path = event.composedPath().slice(1);
236
- const objectElement = path.find(element => element.classList && element.classList.contains('object'));
237
- const object = this._store.findObjectById(objectElement === null || objectElement === void 0 ? void 0 : objectElement.id);
238
- if (this._store.state.activeText === null && object && object instanceof KritzelText) {
239
- this._store.state.activeText = object;
240
- object.focus();
241
- return;
242
- }
243
- if (this._store.state.activeText !== null && object instanceof KritzelText) {
244
- object.focus();
245
- return;
246
- }
247
- if (this._store.state.activeText !== null) {
248
- this._store.resetActiveText();
249
- this._store.setState('activeTool', KritzelToolRegistry.getTool('selection'));
250
- return;
251
- }
252
- if (activePointers.length > 1) {
253
- return;
254
- }
255
- KritzelKeyboardHelper.disableInteractiveWidget();
256
- const clientX = Math.round(activePointers[0].clientX - this._store.offsetX);
257
- const clientY = Math.round(activePointers[0].clientY - this._store.offsetY);
258
- const text = KritzelText.create(this._store, this.fontSize, this.fontFamily);
259
- text.fontColor = this.fontColor;
260
- text.translateX = (clientX - this._store.state.translateX) / this._store.state.scale;
261
- text.translateY = (clientY - this._store.state.translateY) / this._store.state.scale;
262
- text.zIndex = this._store.currentZIndex;
263
- this._store.state.activeText = text;
264
- this._store.history.executeCommand(new AddObjectCommand(this._store, this, text));
265
- }
266
- }
267
- handlePointerUp(event) {
268
- var _a, _b, _c, _d;
269
- if (event.cancelable) {
270
- event.preventDefault();
271
- }
272
- if (event.pointerType === 'mouse') {
273
- (_a = this._store.state.activeText) === null || _a === void 0 ? void 0 : _a.adjustTextareaSize();
274
- (_b = this._store.state.activeText) === null || _b === void 0 ? void 0 : _b.focus();
275
- }
276
- if (event.pointerType === 'touch') {
277
- (_c = this._store.state.activeText) === null || _c === void 0 ? void 0 : _c.adjustTextareaSize();
278
- (_d = this._store.state.activeText) === null || _d === void 0 ? void 0 : _d.focus();
279
- KritzelKeyboardHelper.enableInteractiveWidget();
280
- }
281
- }
282
- }
283
-
284
- var __rest = (undefined && undefined.__rest) || function (s, e) {
285
- var t = {};
286
- for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
287
- t[p] = s[p];
288
- if (s != null && typeof Object.getOwnPropertySymbols === "function")
289
- for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
290
- if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))
291
- t[p[i]] = s[p[i]];
292
- }
293
- return t;
294
- };
295
- class ObjectHelper {
296
- static generateUUID() {
297
- return Math.random().toString(36).substr(2, 9);
298
- }
299
- static clone(objOrObjs) {
300
- const cloneObject = (obj) => {
301
- const remainingProps = __rest(obj, ["_store", "_elementRef", "totalWidth", "totalHeight"]);
302
- return structuredClone(remainingProps);
303
- };
304
- if (Array.isArray(objOrObjs)) {
305
- return objOrObjs.map(cloneObject);
306
- }
307
- return cloneObject(objOrObjs);
308
- }
309
- static isEmpty(obj) {
310
- if (obj === null || obj === undefined) {
311
- return true;
312
- }
313
- return (Object === null || Object === void 0 ? void 0 : Object.keys(obj).length) === 0 && (obj === null || obj === void 0 ? void 0 : obj.constructor) === Object;
314
- }
315
- }
316
-
317
- class KritzelBaseObject {
318
- get totalWidth() {
319
- return this.width + this.padding * 2;
320
- }
321
- get totalHeight() {
322
- return this.height + this.padding * 2;
323
- }
324
- set elementRef(element) {
325
- this._elementRef = element;
326
- }
327
- get elementRef() {
328
- return this._elementRef;
329
- }
330
- get boundingBox() {
331
- return {
332
- x: this.translateX,
333
- y: this.translateY,
334
- z: this.scale,
335
- width: this.totalWidth / this.scale,
336
- height: this.totalHeight / this.scale,
337
- depth: 0,
338
- };
339
- }
340
- get rotatedBoundingBox() {
341
- return {
342
- x: this.minXRotated,
343
- y: this.minYRotated,
344
- z: this.scale,
345
- width: this.maxXRotated - this.minXRotated,
346
- height: this.maxYRotated - this.minYRotated,
347
- depth: 0,
348
- };
349
- }
350
- get rotatedPolygon() {
351
- const cx = (this.translateX + this.totalWidth / 2 / this.scale);
352
- const cy = (this.translateY + this.totalHeight / 2 / this.scale);
353
- const angle = this.rotation;
354
- const adjustedWidth = this.totalWidth / this.scale;
355
- const adjustedHeight = this.totalHeight / this.scale;
356
- const corners = {
357
- topLeft: { x: this.translateX, y: this.translateY },
358
- topRight: { x: this.translateX + adjustedWidth, y: this.translateY },
359
- bottomRight: { x: this.translateX + adjustedWidth, y: this.translateY + adjustedHeight },
360
- bottomLeft: { x: this.translateX, y: this.translateY + adjustedHeight },
361
- };
362
- const rotatedCorners = Object.keys(corners).reduce((acc, key) => {
363
- const corner = corners[key];
364
- const rotatedX = Math.cos(angle) * (corner.x - cx) - Math.sin(angle) * (corner.y - cy) + cx;
365
- const rotatedY = Math.sin(angle) * (corner.x - cx) + Math.cos(angle) * (corner.y - cy) + cy;
366
- acc[key] = { x: rotatedX, y: rotatedY };
367
- return acc;
368
- }, {});
369
- return rotatedCorners;
370
- }
371
- get minXRotated() {
372
- const corners = [
373
- this.rotatedPolygon.topLeft.x,
374
- this.rotatedPolygon.topRight.x,
375
- this.rotatedPolygon.bottomRight.x,
376
- this.rotatedPolygon.bottomLeft.x,
377
- ];
378
- return Math.min(...corners);
379
- }
380
- get minYRotated() {
381
- const corners = [
382
- this.rotatedPolygon.topLeft.y,
383
- this.rotatedPolygon.topRight.y,
384
- this.rotatedPolygon.bottomRight.y,
385
- this.rotatedPolygon.bottomLeft.y,
386
- ];
387
- return Math.min(...corners);
388
- }
389
- get maxXRotated() {
390
- const corners = [
391
- this.rotatedPolygon.topLeft.x,
392
- this.rotatedPolygon.topRight.x,
393
- this.rotatedPolygon.bottomRight.x,
394
- this.rotatedPolygon.bottomLeft.x,
395
- ];
396
- return Math.max(...corners);
397
- }
398
- get maxYRotated() {
399
- const corners = [
400
- this.rotatedPolygon.topLeft.y,
401
- this.rotatedPolygon.topRight.y,
402
- this.rotatedPolygon.bottomRight.y,
403
- this.rotatedPolygon.bottomLeft.y,
404
- ];
405
- return Math.max(...corners);
406
- }
407
- get transformationMatrix() {
408
- const scale = 1 / this.scale;
409
- const translateX = this.translateX;
410
- const translateY = this.translateY;
411
- return `matrix(${scale}, 0, 0, ${scale}, ${translateX}, ${translateY})`;
412
- }
413
- get rotationDegrees() {
414
- return this.rotation * (180 / Math.PI);
415
- }
416
- get centerX() {
417
- return this.translateX + this.totalWidth / 2;
418
- }
419
- get centerY() {
420
- return this.translateY + this.totalHeight / 2;
421
- }
422
- constructor() {
423
- this.__class__ = 'KritzelBaseObject';
424
- this.visible = true;
425
- this.borderWidth = 0;
426
- this.opacity = 1;
427
- this.padding = 0;
428
- this.selected = false;
429
- this.resizing = false;
430
- this.rotation = 0;
431
- this.markedForRemoval = false;
432
- this.isMounted = false;
433
- this.zIndex = 0;
434
- this.debugInfoVisible = false;
435
- this.id = this.generateId();
436
- }
437
- static create(store) {
438
- const object = new KritzelBaseObject();
439
- object._store = store;
440
- object.zIndex = store.currentZIndex;
441
- return object;
442
- }
443
- mount(element) {
444
- if (this.isMounted) {
445
- return;
446
- }
447
- this.elementRef = element;
448
- this.isMounted = true;
449
- }
450
- generateId() {
451
- return ObjectHelper.generateUUID();
452
- }
453
- isInViewport() {
454
- const viewportBounds = {
455
- x: -this._store.state.translateX / this._store.state.scale,
456
- y: -this._store.state.translateY / this._store.state.scale,
457
- width: this._store.state.viewportWidth / this._store.state.scale,
458
- height: this._store.state.viewportHeight / this._store.state.scale};
459
- return this.boundingBox.x < viewportBounds.x + viewportBounds.width &&
460
- this.boundingBox.x + this.boundingBox.width > viewportBounds.x &&
461
- this.boundingBox.y < viewportBounds.y + viewportBounds.height &&
462
- this.boundingBox.y + this.boundingBox.height > viewportBounds.y;
463
- }
464
- centerInViewport() {
465
- const scale = this._store.state.scale;
466
- this.translateX = (this._store.state.viewportWidth / 2 - this.totalWidth / 2 - this._store.state.translateX) / scale;
467
- this.translateY = (this._store.state.viewportHeight / 2 - this.totalHeight / 2 - this._store.state.translateY) / scale;
468
- }
469
- move(startX, startY, endX, endY) {
470
- const deltaX = (startX - endX) / this._store.state.scale;
471
- const deltaY = (startY - endY) / this._store.state.scale;
472
- this.translateX += deltaX;
473
- this.translateY += deltaY;
474
- }
475
- resize(x, y, width, height) {
476
- if (width <= 1 || height <= 1) {
477
- return;
478
- }
479
- this.width = width;
480
- this.height = height;
481
- this.translateX = x;
482
- this.translateY = y;
483
- }
484
- rotate(value) {
485
- this.rotation = value;
486
- }
487
- copy() {
488
- const copiedObject = Object.create(Object.getPrototypeOf(this));
489
- Object.assign(copiedObject, this);
490
- copiedObject.id = this.generateId();
491
- copiedObject.isMounted = false;
492
- return copiedObject;
493
- }
494
- onSelectedClick() {
495
- // This method can be overridden by subclasses to handle click events when the object is selected.
496
- }
497
- revive(object) {
498
- Object.assign(this, object);
499
- return this;
500
- }
501
- isClass(className) {
502
- return this.__class__ === className;
503
- }
504
- }
505
-
506
- class KritzelText extends KritzelBaseObject {
507
- get isReadonly() {
508
- return !(this._store.state.activeTool instanceof KritzelTextTool);
509
- }
510
- constructor(config) {
511
- super();
512
- this.__class__ = 'KritzelText';
513
- this.value = '';
514
- this.fontFamily = 'Arial';
515
- this.fontSize = 8;
516
- this.fontColor = '#000000';
517
- this.initialWidth = 3;
518
- this.isNew = true;
519
- this.debugInfoVisible = true;
520
- this.rows = 1;
521
- if (config) {
522
- this.value = config.value || ' ';
523
- this.translateX = config.translateX || 0;
524
- this.translateY = config.translateY || 0;
525
- this.fontSize = config.fontSize || 8;
526
- this.fontFamily = config.fontFamily || 'Arial';
527
- this.fontColor = config.fontColor || '#000000';
528
- this.height = config.height || this.fontSize * 1.2;
529
- this.width = config.width || 0;
530
- this.scale = config.scale || 1;
531
- }
532
- }
533
- static create(store, fontSize, fontFamily) {
534
- const object = new KritzelText();
535
- object._store = store;
536
- object.fontSize = fontSize;
537
- object.fontFamily = fontFamily;
538
- object.translateX = 0;
539
- object.translateY = 0;
540
- object.width = object.initialWidth / (object._store.state.scale < 0 ? object._store.state.scale : 1);
541
- object.height = (object.fontSize * 1.2) / (object._store.state.scale < 0 ? object._store.state.scale : 1);
542
- object.padding = 5;
543
- object.backgroundColor = 'transparent';
544
- object.scale = object._store.state.scale;
545
- object.value = ' ';
546
- object.zIndex = store.currentZIndex;
547
- return object;
548
- }
549
- mount(element) {
550
- if ((this.isMounted && this.elementRef === element) || this.isInViewport() === false) {
551
- return;
552
- }
553
- this.elementRef = element;
554
- this.isMounted = true;
555
- }
556
- resize(x, y, width, height) {
557
- if (width <= 1 || height <= 1) {
558
- return;
559
- }
560
- const scaleFactor = height / this.height;
561
- this.fontSize = this.fontSize * scaleFactor;
562
- this.width = this.width * scaleFactor;
563
- this.height = height;
564
- this.translateX = x;
565
- this.translateY = y;
566
- }
567
- handleKeyDown(event) {
568
- if (this.isReadonly) {
569
- event.preventDefault();
570
- event.stopPropagation();
571
- }
572
- }
573
- handleInput(event) {
574
- const target = event.target;
575
- if (target.value === '') {
576
- this.value = ' ';
577
- target.value = ' ';
578
- target.selectionStart = target.selectionEnd = target.value.length;
579
- }
580
- else {
581
- this.value = target.value.trim();
582
- }
583
- this.adjustTextareaSize();
584
- }
585
- adjustTextareaSize() {
586
- if (this.elementRef) {
587
- const span = document.createElement('span');
588
- span.style.position = 'absolute';
589
- span.style.whiteSpace = 'pre-wrap';
590
- span.style.visibility = 'hidden';
591
- span.style.fontSize = window.getComputedStyle(this.elementRef).fontSize;
592
- span.style.fontFamily = window.getComputedStyle(this.elementRef).fontFamily;
593
- span.innerHTML = this.elementRef.value.replace(/&/g, '&amp;').replace(/</g, '&lt;').replace(/>/g, '&gt;').replace(/\n/g, '<br>') + '<br>';
594
- document.body.appendChild(span);
595
- const textWidth = span.offsetWidth;
596
- const textHeight = span.offsetHeight;
597
- document.body.removeChild(span);
598
- this.width = textWidth;
599
- this.height = textHeight;
600
- this._store.rerender();
601
- }
602
- }
603
- focus() {
604
- if (this.elementRef) {
605
- this.elementRef.focus();
606
- }
607
- }
608
- selectAll() {
609
- if (this.elementRef) {
610
- this.elementRef.select();
611
- }
612
- }
613
- insertFromClipboard() {
614
- if (this.elementRef) {
615
- this.elementRef.focus();
616
- try {
617
- navigator.clipboard.readText().then(text => {
618
- const start = this.elementRef.selectionStart;
619
- const end = this.elementRef.selectionEnd;
620
- const value = this.elementRef.value;
621
- this.elementRef.value = value.substring(0, start) + text + value.substring(end);
622
- this.elementRef.selectionStart = this.elementRef.selectionEnd = start + text.length;
623
- this.value = this.elementRef.value;
624
- this.adjustTextareaSize();
625
- });
626
- }
627
- catch (err) {
628
- console.error('Failed to read clipboard contents:', err);
629
- }
630
- }
631
- }
632
- onSelectedClick() {
633
- this._store.setState('activeTool', KritzelToolRegistry.getTool('text'));
634
- this._store.state.selectionGroup = null;
635
- this._store.state.selectionBox = null;
636
- this._store.state.activeText = this;
637
- setTimeout(() => {
638
- this.focus();
639
- }, 300);
640
- }
641
- }
642
-
643
- var cjs = {};
644
-
645
- var hasRequiredCjs;
646
-
647
- function requireCjs () {
648
- if (hasRequiredCjs) return cjs;
649
- hasRequiredCjs = 1;
650
- (function (exports) {
651
- var pe=Object.defineProperty;var ge=e=>pe(e,"__esModule",{value:true});var de=(e,t)=>{ge(e);for(var s in t)pe(e,s,{get:t[s],enumerable:true});};de(exports,{default:()=>ve,getStroke:()=>ne,getStrokeOutlinePoints:()=>te,getStrokePoints:()=>re});function $(e,t,s,x=h=>h){return e*x(.5-t*(.5-s))}function ce(e){return [-e[0],-e[1]]}function l(e,t){return [e[0]+t[0],e[1]+t[1]]}function a(e,t){return [e[0]-t[0],e[1]-t[1]]}function b(e,t){return [e[0]*t,e[1]*t]}function xe(e,t){return [e[0]/t,e[1]/t]}function R(e){return [e[1],-e[0]]}function B(e,t){return e[0]*t[0]+e[1]*t[1]}function me(e,t){return e[0]===t[0]&&e[1]===t[1]}function Se(e){return Math.hypot(e[0],e[1])}function Pe(e){return e[0]*e[0]+e[1]*e[1]}function A(e,t){return Pe(a(e,t))}function G(e){return xe(e,Se(e))}function ae(e,t){return Math.hypot(e[1]-t[1],e[0]-t[0])}function L(e,t,s){let x=Math.sin(s),h=Math.cos(s),y=e[0]-t[0],n=e[1]-t[1],f=y*h-n*x,d=y*x+n*h;return [f+t[0],d+t[1]]}function K(e,t,s){return l(e,b(a(t,e),s))}function ee(e,t,s){return l(e,b(t,s))}var{min:C,PI:ke}=Math,le=.275,V=ke+1e-4;function te(e,t={}){let{size:s=16,smoothing:x=.5,thinning:h=.5,simulatePressure:y=true,easing:n=r=>r,start:f={},end:d={},last:D=false}=t,{cap:S=true,easing:j=r=>r*(2-r)}=f,{cap:q=true,easing:c=r=>--r*r*r+1}=d;if(e.length===0||s<=0)return [];let p=e[e.length-1].runningLength,g=f.taper===false?0:f.taper===true?Math.max(s,p):f.taper,T=d.taper===false?0:d.taper===true?Math.max(s,p):d.taper,oe=Math.pow(s*x,2),_=[],M=[],H=e.slice(0,10).reduce((r,i)=>{let o=i.pressure;if(y){let u=C(1,i.distance/s),W=C(1,1-u);o=C(1,r+(W-r)*(u*le));}return (r+o)/2},e[0].pressure),m=$(s,h,e[e.length-1].pressure,n),U,X=e[0].vector,z=e[0].point,F=z,O=z,E=F,J=false;for(let r=0;r<e.length;r++){let{pressure:i}=e[r],{point:o,vector:u,distance:W,runningLength:I}=e[r];if(r<e.length-1&&p-I<3)continue;if(h){if(y){let v=C(1,W/s),Z=C(1,1-v);i=C(1,H+(Z-H)*(v*le));}m=$(s,h,i,n);}else m=s/2;U===void 0&&(U=m);let fe=I<g?j(I/g):1,be=p-I<T?c((p-I)/T):1;m=Math.max(.01,m*Math.min(fe,be));let se=(r<e.length-1?e[r+1]:e[r]).vector,Y=r<e.length-1?B(u,se):1,he=B(u,X)<0&&!J,ue=Y!==null&&Y<0;if(he||ue){let v=b(R(X),m);for(let Z=1/13,w=0;w<=1;w+=Z)O=L(a(o,v),o,V*w),_.push(O),E=L(l(o,v),o,V*-w),M.push(E);z=O,F=E,ue&&(J=true);continue}if(J=false,r===e.length-1){let v=b(R(u),m);_.push(a(o,v)),M.push(l(o,v));continue}let ie=b(R(K(se,u,Y)),m);O=a(o,ie),(r<=1||A(z,O)>oe)&&(_.push(O),z=O),E=l(o,ie),(r<=1||A(F,E)>oe)&&(M.push(E),F=E),H=i,X=u;}let P=e[0].point.slice(0,2),k=e.length>1?e[e.length-1].point.slice(0,2):l(e[0].point,[1,1]),Q=[],N=[];if(e.length===1){if(!(g||T)||D){let r=ee(P,G(R(a(P,k))),-(U||m)),i=[];for(let o=1/13,u=o;u<=1;u+=o)i.push(L(r,P,V*2*u));return i}}else {if(!(g||T&&e.length===1))if(S)for(let i=1/13,o=i;o<=1;o+=i){let u=L(M[0],P,V*o);Q.push(u);}else {let i=a(_[0],M[0]),o=b(i,.5),u=b(i,.51);Q.push(a(P,o),a(P,u),l(P,u),l(P,o));}let r=R(ce(e[e.length-1].vector));if(T||g&&e.length===1)N.push(k);else if(q){let i=ee(k,r,m);for(let o=1/29,u=o;u<1;u+=o)N.push(L(i,k,V*3*u));}else N.push(l(k,b(r,m)),l(k,b(r,m*.99)),a(k,b(r,m*.99)),a(k,b(r,m)));}return _.concat(N,M.reverse(),Q)}function re(e,t={}){var q;let{streamline:s=.5,size:x=16,last:h=false}=t;if(e.length===0)return [];let y=.15+(1-s)*.85,n=Array.isArray(e[0])?e:e.map(({x:c,y:p,pressure:g=.5})=>[c,p,g]);if(n.length===2){let c=n[1];n=n.slice(0,-1);for(let p=1;p<5;p++)n.push(K(n[0],c,p/4));}n.length===1&&(n=[...n,[...l(n[0],[1,1]),...n[0].slice(2)]]);let f=[{point:[n[0][0],n[0][1]],pressure:n[0][2]>=0?n[0][2]:.25,vector:[1,1],distance:0,runningLength:0}],d=false,D=0,S=f[0],j=n.length-1;for(let c=1;c<n.length;c++){let p=h&&c===j?n[c].slice(0,2):K(S.point,n[c],y);if(me(S.point,p))continue;let g=ae(p,S.point);if(D+=g,c<j&&!d){if(D<x)continue;d=true;}S={point:p,pressure:n[c][2]>=0?n[c][2]:.5,vector:G(a(S.point,p)),distance:g,runningLength:D},f.push(S);}return f[0].vector=((q=f[1])==null?void 0:q.vector)||[0,0],f}function ne(e,t={}){return te(re(e,t),t)}var ve=ne;
652
- } (cjs));
653
- return cjs;
654
- }
655
-
656
- var cjsExports = requireCjs();
657
-
658
- class KritzelMathHelper {
659
- static average(a, b) {
660
- return (a + b) / 2;
661
- }
662
- }
663
-
664
- class KritzelPath extends KritzelBaseObject {
665
- constructor() {
666
- super(...arguments);
667
- this.__class__ = 'KritzelPath';
668
- this.stroke = 'none';
669
- this.lineSlack = 0.5;
670
- this.x = 0;
671
- this.y = 0;
672
- this.height = 0;
673
- this.width = 0;
674
- this.scale = 1;
675
- this.visible = true;
676
- this.debugInfoVisible = true;
677
- }
678
- get viewBox() {
679
- return `${this.x} ${this.y} ${this.width} ${this.height}`;
680
- }
681
- static create(store, options) {
682
- var _a, _b, _c, _d, _e, _f;
683
- const object = new KritzelPath();
684
- object._store = store;
685
- object.id = object.generateId();
686
- object.options = options;
687
- object.points = (_a = options === null || options === void 0 ? void 0 : options.points) !== null && _a !== void 0 ? _a : [];
688
- object.translateX = (_b = options === null || options === void 0 ? void 0 : options.translateX) !== null && _b !== void 0 ? _b : 0;
689
- object.translateY = (_c = options === null || options === void 0 ? void 0 : options.translateY) !== null && _c !== void 0 ? _c : 0;
690
- object.scale = (_d = options === null || options === void 0 ? void 0 : options.scale) !== null && _d !== void 0 ? _d : 1;
691
- object.strokeWidth = (_e = options === null || options === void 0 ? void 0 : options.strokeWidth) !== null && _e !== void 0 ? _e : 8;
692
- object.fill = (_f = options === null || options === void 0 ? void 0 : options.fill) !== null && _f !== void 0 ? _f : '#000000';
693
- object.zIndex = store.currentZIndex;
694
- object.d = object.generateSvgPath();
695
- object.updateDimensions();
696
- return object;
697
- }
698
- resize(x, y, width, height) {
699
- if (width <= 1 || height <= 1) {
700
- return;
701
- }
702
- const scaleX = width / this.width;
703
- const scaleY = height / this.height;
704
- this.width = width;
705
- this.height = height;
706
- this.points = this.points.map(([x, y]) => [x * scaleX, y * scaleY]);
707
- this.d = this.generateSvgPath();
708
- this.width = Math.max(...this.points.map(p => p[0])) - Math.min(...this.points.map(p => p[0])) + this.strokeWidth;
709
- this.height = Math.max(...this.points.map(p => p[1])) - Math.min(...this.points.map(p => p[1])) + this.strokeWidth;
710
- this.x = Math.min(...this.points.map(p => p[0])) - this.strokeWidth / 2;
711
- this.y = Math.min(...this.points.map(p => p[1])) - this.strokeWidth / 2;
712
- this.translateX = x;
713
- this.translateY = y;
714
- }
715
- rotate(value) {
716
- super.rotate(value);
717
- this.updateDimensions();
718
- }
719
- updateDimensions() {
720
- const rotatedPoints = this.points.map(([x, y]) => {
721
- const rotatedX = x * Math.cos(this.rotation) - y * Math.sin(this.rotation);
722
- const rotatedY = x * Math.sin(this.rotation) + y * Math.cos(this.rotation);
723
- return [rotatedX, rotatedY];
724
- });
725
- const minX = Math.min(...rotatedPoints.map(p => p[0] - this.strokeWidth / 2));
726
- const minY = Math.min(...rotatedPoints.map(p => p[1] - this.strokeWidth / 2));
727
- const maxX = Math.max(...rotatedPoints.map(p => p[0] + this.strokeWidth / 2));
728
- const maxY = Math.max(...rotatedPoints.map(p => p[1] + this.strokeWidth / 2));
729
- this.width = maxX - minX + this.lineSlack;
730
- this.height = maxY - minY + this.lineSlack;
731
- this.x = minX;
732
- this.y = minY;
733
- this.translateX = (this.x + this.translateX) / this.scale;
734
- this.translateY = (this.y + this.translateY) / this.scale;
735
- }
736
- generateSvgPath() {
737
- const stroke = this.getStrokeFromPoints(this.points, this.strokeWidth);
738
- return this.getSvgPathFromStroke(stroke);
739
- }
740
- getStrokeFromPoints(points, strokeWidth) {
741
- return cjsExports.getStroke(points, {
742
- size: strokeWidth,
743
- thinning: 0.5,
744
- smoothing: 0.5,
745
- streamline: 0.5,
746
- easing: t => t,
747
- simulatePressure: true,
748
- last: true,
749
- start: {
750
- cap: true,
751
- taper: 0,
752
- easing: t => t,
753
- },
754
- end: {
755
- cap: true,
756
- taper: 0,
757
- easing: t => t,
758
- },
759
- });
760
- }
761
- getSvgPathFromStroke(points, closed = true) {
762
- const len = points.length;
763
- if (len < 4) {
764
- return ``;
765
- }
766
- let a = points[0];
767
- let b = points[1];
768
- const c = points[2];
769
- let result = `M${a[0].toFixed(2)},${a[1].toFixed(2)} Q${b[0].toFixed(2)},${b[1].toFixed(2)} ${KritzelMathHelper.average(b[0], c[0]).toFixed(2)},${KritzelMathHelper.average(b[1], c[1]).toFixed(2)} T`;
770
- for (let i = 2, max = len - 1; i < max; i++) {
771
- a = points[i];
772
- b = points[i + 1];
773
- result += `${KritzelMathHelper.average(a[0], b[0]).toFixed(2)},${KritzelMathHelper.average(a[1], b[1]).toFixed(2)} `;
774
- }
775
- if (closed) {
776
- result += 'Z';
777
- }
778
- return result;
779
- }
780
- }
781
-
782
- class KritzelImage extends KritzelBaseObject {
783
- constructor() {
784
- super(...arguments);
785
- this.__class__ = 'KritzelImage';
786
- this.src = '';
787
- this.debugInfoVisible = true;
788
- }
789
- static create(store) {
790
- const object = new KritzelImage();
791
- object._store = store;
792
- object.id = object.generateId();
793
- object.x = 0;
794
- object.y = 0;
795
- object.translateX = 0;
796
- object.translateY = 0;
797
- object.scale = object._store.state.scale;
798
- object.zIndex = store.currentZIndex;
799
- return object;
800
- }
801
- resize(x, y, width, height) {
802
- if (width <= 1 || height <= 1) {
803
- return;
804
- }
805
- const scaleFactor = height / this.height;
806
- this.width = this.width * scaleFactor;
807
- this.height = this.height * scaleFactor;
808
- this.translateX = x;
809
- this.translateY = y;
810
- }
811
- }
812
-
813
- exports.AddObjectCommand = AddObjectCommand;
814
- exports.KritzelBaseCommand = KritzelBaseCommand;
815
- exports.KritzelBaseObject = KritzelBaseObject;
816
- exports.KritzelBaseTool = KritzelBaseTool;
817
- exports.KritzelEventHelper = KritzelEventHelper;
818
- exports.KritzelImage = KritzelImage;
819
- exports.KritzelKeyboardHelper = KritzelKeyboardHelper;
820
- exports.KritzelPath = KritzelPath;
821
- exports.KritzelText = KritzelText;
822
- exports.KritzelTextTool = KritzelTextTool;
823
- exports.KritzelToolRegistry = KritzelToolRegistry;
824
- exports.ObjectHelper = ObjectHelper;
825
- //# sourceMappingURL=index-aaWestcD.js.map
826
-
827
- //# sourceMappingURL=index-aaWestcD.js.map