kritzel-stencil 0.0.124 → 0.0.126

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 (378) hide show
  1. package/dist/{components/p-Cnc43o9b.js → stencil/brush-tool.class-D1U3x9_Y.js} +57 -11
  2. package/dist/stencil/brush-tool.class-D1U3x9_Y.js.map +1 -0
  3. package/dist/{collection/configs/default-brush-tool.config.js → stencil/default-text-tool.config-DvOZmpuR.js} +38 -2
  4. package/dist/stencil/default-text-tool.config-DvOZmpuR.js.map +1 -0
  5. package/dist/stencil/engine.constants-DsjjAmnl.js +7 -0
  6. package/dist/stencil/engine.constants-DsjjAmnl.js.map +1 -0
  7. package/dist/{components/p-D8W6LE-c.js → stencil/event-button.enum-D8W6LE-c.js} +2 -2
  8. package/dist/stencil/event-button.enum-D8W6LE-c.js.map +1 -0
  9. package/dist/{collection/classes/registries/icon-registry.class.js → stencil/icon-registry.class-Bw5YkOTi.js} +6 -2
  10. package/dist/stencil/icon-registry.class-Bw5YkOTi.js.map +1 -0
  11. package/dist/stencil/image-tool.class-uKAmXFSl.js +1341 -0
  12. package/dist/stencil/image-tool.class-uKAmXFSl.js.map +1 -0
  13. package/dist/stencil/index-Df69oUcb.js +4334 -0
  14. package/dist/stencil/index-Df69oUcb.js.map +1 -0
  15. package/dist/stencil/index.esm.js +16 -1
  16. package/dist/stencil/index.esm.js.map +1 -1
  17. package/dist/stencil/kritzel-brush-style.entry.esm.js.map +1 -0
  18. package/dist/stencil/kritzel-brush-style.entry.js +31 -0
  19. package/dist/stencil/kritzel-brush-style.entry.js.map +1 -0
  20. package/dist/stencil/kritzel-color-palette.entry.esm.js.map +1 -0
  21. package/dist/{components/p-Bn5P7YQn.js → stencil/kritzel-color-palette.entry.js} +11 -37
  22. package/dist/stencil/kritzel-color-palette.entry.js.map +1 -0
  23. package/dist/stencil/kritzel-color.entry.esm.js.map +1 -0
  24. package/dist/{components/p-D0sLslUq.js → stencil/kritzel-color.entry.js} +11 -29
  25. package/dist/stencil/kritzel-color.entry.js.map +1 -0
  26. package/dist/{components/p-BY8BWGge.js → stencil/kritzel-context-menu-B2p1_Ffh.js} +12 -40
  27. package/dist/stencil/kritzel-context-menu-B2p1_Ffh.js.map +1 -0
  28. package/dist/stencil/kritzel-context-menu-DPHV6MRm.js +91 -0
  29. package/dist/stencil/kritzel-context-menu-DPHV6MRm.js.map +1 -0
  30. package/dist/stencil/kritzel-context-menu.entry.esm.js.map +1 -0
  31. package/dist/stencil/kritzel-context-menu.entry.js +5 -0
  32. package/dist/stencil/kritzel-context-menu.entry.js.map +1 -0
  33. package/dist/stencil/kritzel-control-brush-config.entry.esm.js.map +1 -0
  34. package/dist/stencil/kritzel-control-brush-config.entry.js +54 -0
  35. package/dist/stencil/kritzel-control-brush-config.entry.js.map +1 -0
  36. package/dist/stencil/kritzel-control-text-config.entry.esm.js.map +1 -0
  37. package/dist/stencil/kritzel-control-text-config.entry.js +42 -0
  38. package/dist/stencil/kritzel-control-text-config.entry.js.map +1 -0
  39. package/dist/stencil/kritzel-controls.entry.esm.js.map +1 -0
  40. package/dist/{components/p-CneTqrgt.js → stencil/kritzel-controls.entry.js} +16 -116
  41. package/dist/stencil/kritzel-controls.entry.js.map +1 -0
  42. package/dist/stencil/kritzel-cursor-trail.entry.esm.js.map +1 -0
  43. package/dist/{components/p-Cw2ATHMj.js → stencil/kritzel-cursor-trail.entry.js} +11 -30
  44. package/dist/stencil/kritzel-cursor-trail.entry.js.map +1 -0
  45. package/dist/stencil/kritzel-dropdown.entry.esm.js.map +1 -0
  46. package/dist/{components/p-NZJPrwJV.js → stencil/kritzel-dropdown.entry.js} +11 -37
  47. package/dist/stencil/kritzel-dropdown.entry.js.map +1 -0
  48. package/dist/stencil/kritzel-editor.entry.esm.js.map +1 -0
  49. package/dist/stencil/kritzel-editor.entry.js +180 -0
  50. package/dist/stencil/kritzel-editor.entry.js.map +1 -0
  51. package/dist/stencil/kritzel-engine.entry.esm.js.map +1 -0
  52. package/dist/stencil/kritzel-engine.entry.js +1318 -0
  53. package/dist/stencil/kritzel-engine.entry.js.map +1 -0
  54. package/dist/stencil/kritzel-font-family.entry.esm.js.map +1 -0
  55. package/dist/{components/p-CF8ziFc4.js → stencil/kritzel-font-family.entry.js} +11 -35
  56. package/dist/stencil/kritzel-font-family.entry.js.map +1 -0
  57. package/dist/stencil/kritzel-font-size.entry.esm.js.map +1 -0
  58. package/dist/stencil/kritzel-font-size.entry.js +29 -0
  59. package/dist/stencil/kritzel-font-size.entry.js.map +1 -0
  60. package/dist/stencil/kritzel-font.entry.esm.js.map +1 -0
  61. package/dist/stencil/kritzel-font.entry.js +25 -0
  62. package/dist/stencil/kritzel-font.entry.js.map +1 -0
  63. package/dist/stencil/kritzel-icon.entry.esm.js.map +1 -0
  64. package/dist/stencil/kritzel-icon.entry.js +29 -0
  65. package/dist/stencil/kritzel-icon.entry.js.map +1 -0
  66. package/dist/stencil/kritzel-stroke-size.entry.esm.js.map +1 -0
  67. package/dist/stencil/kritzel-stroke-size.entry.js +28 -0
  68. package/dist/stencil/kritzel-stroke-size.entry.js.map +1 -0
  69. package/dist/stencil/kritzel-tooltip.entry.esm.js.map +1 -0
  70. package/dist/{components/p-DpiklJU9.js → stencil/kritzel-tooltip.entry.js} +14 -37
  71. package/dist/stencil/kritzel-tooltip.entry.js.map +1 -0
  72. package/dist/stencil/kritzel-utility-panel.entry.esm.js.map +1 -0
  73. package/dist/stencil/kritzel-utility-panel.entry.js +33 -0
  74. package/dist/stencil/kritzel-utility-panel.entry.js.map +1 -0
  75. package/dist/stencil/loader.esm.js.map +1 -1
  76. package/dist/stencil/stencil.esm.js +49 -1
  77. package/dist/stencil/stencil.esm.js.map +1 -1
  78. package/dist/types/classes/objects/path.class.d.ts +1 -1
  79. package/dist/types/components/core/kritzel-engine/kritzel-engine.d.ts +2 -2
  80. package/dist/types/components.d.ts +4 -4
  81. package/package.json +62 -57
  82. package/dist/cjs/app-globals-V2Kpy_OQ.js +0 -8
  83. package/dist/cjs/app-globals-V2Kpy_OQ.js.map +0 -1
  84. package/dist/cjs/index-C05uAr89.js +0 -1591
  85. package/dist/cjs/index-C05uAr89.js.map +0 -1
  86. package/dist/cjs/index-UcX3pzju.js +0 -2549
  87. package/dist/cjs/index-UcX3pzju.js.map +0 -1
  88. package/dist/cjs/index.cjs.js +0 -19
  89. package/dist/cjs/index.cjs.js.map +0 -1
  90. package/dist/cjs/kritzel-brush-style_18.cjs.entry.js +0 -2366
  91. package/dist/cjs/kritzel-brush-style_18.cjs.entry.js.map +0 -1
  92. package/dist/cjs/loader.cjs.js +0 -16
  93. package/dist/cjs/loader.cjs.js.map +0 -1
  94. package/dist/cjs/stencil.cjs.js +0 -28
  95. package/dist/cjs/stencil.cjs.js.map +0 -1
  96. package/dist/collection/classes/commands/add-object.command.js +0 -14
  97. package/dist/collection/classes/commands/add-object.command.js.map +0 -1
  98. package/dist/collection/classes/commands/add-selection-group.command.js +0 -20
  99. package/dist/collection/classes/commands/add-selection-group.command.js.map +0 -1
  100. package/dist/collection/classes/commands/base.command.js +0 -15
  101. package/dist/collection/classes/commands/base.command.js.map +0 -1
  102. package/dist/collection/classes/commands/batch.command.js +0 -14
  103. package/dist/collection/classes/commands/batch.command.js.map +0 -1
  104. package/dist/collection/classes/commands/move-selection-group.command.js +0 -25
  105. package/dist/collection/classes/commands/move-selection-group.command.js.map +0 -1
  106. package/dist/collection/classes/commands/remove-object.command.js +0 -17
  107. package/dist/collection/classes/commands/remove-object.command.js.map +0 -1
  108. package/dist/collection/classes/commands/remove-selection-group.command.js +0 -18
  109. package/dist/collection/classes/commands/remove-selection-group.command.js.map +0 -1
  110. package/dist/collection/classes/commands/resize-selection-group.command.js +0 -18
  111. package/dist/collection/classes/commands/resize-selection-group.command.js.map +0 -1
  112. package/dist/collection/classes/commands/rotate-selection-group.command.js +0 -24
  113. package/dist/collection/classes/commands/rotate-selection-group.command.js.map +0 -1
  114. package/dist/collection/classes/commands/update-object.command.js +0 -29
  115. package/dist/collection/classes/commands/update-object.command.js.map +0 -1
  116. package/dist/collection/classes/commands/update-viewport.command.js +0 -23
  117. package/dist/collection/classes/commands/update-viewport.command.js.map +0 -1
  118. package/dist/collection/classes/handlers/base.handler.js +0 -7
  119. package/dist/collection/classes/handlers/base.handler.js.map +0 -1
  120. package/dist/collection/classes/handlers/context-menu.handler.js +0 -47
  121. package/dist/collection/classes/handlers/context-menu.handler.js.map +0 -1
  122. package/dist/collection/classes/handlers/hover.handler.js +0 -22
  123. package/dist/collection/classes/handlers/hover.handler.js.map +0 -1
  124. package/dist/collection/classes/handlers/key.handler.js +0 -81
  125. package/dist/collection/classes/handlers/key.handler.js.map +0 -1
  126. package/dist/collection/classes/handlers/move.handler.js +0 -84
  127. package/dist/collection/classes/handlers/move.handler.js.map +0 -1
  128. package/dist/collection/classes/handlers/resize.handler.js +0 -150
  129. package/dist/collection/classes/handlers/resize.handler.js.map +0 -1
  130. package/dist/collection/classes/handlers/rotation.handler.js +0 -102
  131. package/dist/collection/classes/handlers/rotation.handler.js.map +0 -1
  132. package/dist/collection/classes/handlers/selection.handler.js +0 -200
  133. package/dist/collection/classes/handlers/selection.handler.js.map +0 -1
  134. package/dist/collection/classes/history.class.js +0 -71
  135. package/dist/collection/classes/history.class.js.map +0 -1
  136. package/dist/collection/classes/objects/base-object.class.js +0 -199
  137. package/dist/collection/classes/objects/base-object.class.js.map +0 -1
  138. package/dist/collection/classes/objects/custom-element.class.js +0 -52
  139. package/dist/collection/classes/objects/custom-element.class.js.map +0 -1
  140. package/dist/collection/classes/objects/image.class.js +0 -53
  141. package/dist/collection/classes/objects/image.class.js.map +0 -1
  142. package/dist/collection/classes/objects/path.class.js +0 -260
  143. package/dist/collection/classes/objects/path.class.js.map +0 -1
  144. package/dist/collection/classes/objects/selection-box.class.js +0 -22
  145. package/dist/collection/classes/objects/selection-box.class.js.map +0 -1
  146. package/dist/collection/classes/objects/selection-group.class.js +0 -161
  147. package/dist/collection/classes/objects/selection-group.class.js.map +0 -1
  148. package/dist/collection/classes/objects/text.class.js +0 -141
  149. package/dist/collection/classes/objects/text.class.js.map +0 -1
  150. package/dist/collection/classes/registries/icon-registry.class.js.map +0 -1
  151. package/dist/collection/classes/registries/tool.registry.js +0 -18
  152. package/dist/collection/classes/registries/tool.registry.js.map +0 -1
  153. package/dist/collection/classes/reviver.class.js +0 -66
  154. package/dist/collection/classes/reviver.class.js.map +0 -1
  155. package/dist/collection/classes/store.class.js +0 -287
  156. package/dist/collection/classes/store.class.js.map +0 -1
  157. package/dist/collection/classes/structures/circular-buffer.structure.js +0 -46
  158. package/dist/collection/classes/structures/circular-buffer.structure.js.map +0 -1
  159. package/dist/collection/classes/structures/octree.structure.js +0 -111
  160. package/dist/collection/classes/structures/octree.structure.js.map +0 -1
  161. package/dist/collection/classes/tools/base-tool.class.js +0 -31
  162. package/dist/collection/classes/tools/base-tool.class.js.map +0 -1
  163. package/dist/collection/classes/tools/brush-tool.class.js +0 -116
  164. package/dist/collection/classes/tools/brush-tool.class.js.map +0 -1
  165. package/dist/collection/classes/tools/eraser-tool.class.js +0 -86
  166. package/dist/collection/classes/tools/eraser-tool.class.js.map +0 -1
  167. package/dist/collection/classes/tools/image-tool.class.js +0 -88
  168. package/dist/collection/classes/tools/image-tool.class.js.map +0 -1
  169. package/dist/collection/classes/tools/selection-tool.class.js +0 -156
  170. package/dist/collection/classes/tools/selection-tool.class.js.map +0 -1
  171. package/dist/collection/classes/tools/text-tool.class.js +0 -116
  172. package/dist/collection/classes/tools/text-tool.class.js.map +0 -1
  173. package/dist/collection/classes/viewport.class.js +0 -148
  174. package/dist/collection/classes/viewport.class.js.map +0 -1
  175. package/dist/collection/collection-manifest.json +0 -29
  176. package/dist/collection/components/core/kritzel-cursor-trail/kritzel-cursor-trail.css +0 -10
  177. package/dist/collection/components/core/kritzel-cursor-trail/kritzel-cursor-trail.js +0 -154
  178. package/dist/collection/components/core/kritzel-cursor-trail/kritzel-cursor-trail.js.map +0 -1
  179. package/dist/collection/components/core/kritzel-editor/kritzel-editor.css +0 -24
  180. package/dist/collection/components/core/kritzel-editor/kritzel-editor.js +0 -672
  181. package/dist/collection/components/core/kritzel-editor/kritzel-editor.js.map +0 -1
  182. package/dist/collection/components/core/kritzel-engine/kritzel-engine.css +0 -60
  183. package/dist/collection/components/core/kritzel-engine/kritzel-engine.js +0 -1288
  184. package/dist/collection/components/core/kritzel-engine/kritzel-engine.js.map +0 -1
  185. package/dist/collection/components/shared/kritzel-brush-style/kritzel-brush-style.css +0 -44
  186. package/dist/collection/components/shared/kritzel-brush-style/kritzel-brush-style.js +0 -100
  187. package/dist/collection/components/shared/kritzel-brush-style/kritzel-brush-style.js.map +0 -1
  188. package/dist/collection/components/shared/kritzel-color/kritzel-color.css +0 -21
  189. package/dist/collection/components/shared/kritzel-color/kritzel-color.js +0 -108
  190. package/dist/collection/components/shared/kritzel-color/kritzel-color.js.map +0 -1
  191. package/dist/collection/components/shared/kritzel-color-palette/kritzel-color-palette.css +0 -46
  192. package/dist/collection/components/shared/kritzel-color-palette/kritzel-color-palette.js +0 -147
  193. package/dist/collection/components/shared/kritzel-color-palette/kritzel-color-palette.js.map +0 -1
  194. package/dist/collection/components/shared/kritzel-dropdown/kritzel-dropdown.css +0 -53
  195. package/dist/collection/components/shared/kritzel-dropdown/kritzel-dropdown.js +0 -215
  196. package/dist/collection/components/shared/kritzel-dropdown/kritzel-dropdown.js.map +0 -1
  197. package/dist/collection/components/shared/kritzel-font/kritzel-font.css +0 -10
  198. package/dist/collection/components/shared/kritzel-font/kritzel-font.js +0 -92
  199. package/dist/collection/components/shared/kritzel-font/kritzel-font.js.map +0 -1
  200. package/dist/collection/components/shared/kritzel-font-family/kritzel-font-family.css +0 -48
  201. package/dist/collection/components/shared/kritzel-font-family/kritzel-font-family.js +0 -115
  202. package/dist/collection/components/shared/kritzel-font-family/kritzel-font-family.js.map +0 -1
  203. package/dist/collection/components/shared/kritzel-font-size/kritzel-font-size.css +0 -30
  204. package/dist/collection/components/shared/kritzel-font-size/kritzel-font-size.js +0 -112
  205. package/dist/collection/components/shared/kritzel-font-size/kritzel-font-size.js.map +0 -1
  206. package/dist/collection/components/shared/kritzel-icon/kritzel-icon.css +0 -17
  207. package/dist/collection/components/shared/kritzel-icon/kritzel-icon.js +0 -94
  208. package/dist/collection/components/shared/kritzel-icon/kritzel-icon.js.map +0 -1
  209. package/dist/collection/components/shared/kritzel-stroke-size/kritzel-stroke-size.css +0 -28
  210. package/dist/collection/components/shared/kritzel-stroke-size/kritzel-stroke-size.js +0 -91
  211. package/dist/collection/components/shared/kritzel-stroke-size/kritzel-stroke-size.js.map +0 -1
  212. package/dist/collection/components/shared/kritzel-tooltip/kritzel-tooltip.css +0 -17
  213. package/dist/collection/components/shared/kritzel-tooltip/kritzel-tooltip.js +0 -181
  214. package/dist/collection/components/shared/kritzel-tooltip/kritzel-tooltip.js.map +0 -1
  215. package/dist/collection/components/ui/kritzel-context-menu/kritzel-context-menu.css +0 -55
  216. package/dist/collection/components/ui/kritzel-context-menu/kritzel-context-menu.js +0 -178
  217. package/dist/collection/components/ui/kritzel-context-menu/kritzel-context-menu.js.map +0 -1
  218. package/dist/collection/components/ui/kritzel-control-brush-config/kritzel-control-brush-config.css +0 -19
  219. package/dist/collection/components/ui/kritzel-control-brush-config/kritzel-control-brush-config.js +0 -136
  220. package/dist/collection/components/ui/kritzel-control-brush-config/kritzel-control-brush-config.js.map +0 -1
  221. package/dist/collection/components/ui/kritzel-control-text-config/kritzel-control-text-config.css +0 -19
  222. package/dist/collection/components/ui/kritzel-control-text-config/kritzel-control-text-config.js +0 -116
  223. package/dist/collection/components/ui/kritzel-control-text-config/kritzel-control-text-config.js.map +0 -1
  224. package/dist/collection/components/ui/kritzel-controls/kritzel-controls.css +0 -124
  225. package/dist/collection/components/ui/kritzel-controls/kritzel-controls.js +0 -268
  226. package/dist/collection/components/ui/kritzel-controls/kritzel-controls.js.map +0 -1
  227. package/dist/collection/components/ui/kritzel-utility-panel/kritzel-utility-panel.css +0 -33
  228. package/dist/collection/components/ui/kritzel-utility-panel/kritzel-utility-panel.js +0 -79
  229. package/dist/collection/components/ui/kritzel-utility-panel/kritzel-utility-panel.js.map +0 -1
  230. package/dist/collection/configs/default-brush-tool.config.js.map +0 -1
  231. package/dist/collection/configs/default-engine-state.js +0 -58
  232. package/dist/collection/configs/default-engine-state.js.map +0 -1
  233. package/dist/collection/configs/default-text-tool.config.js +0 -32
  234. package/dist/collection/configs/default-text-tool.config.js.map +0 -1
  235. package/dist/collection/constants/engine.constants.js +0 -3
  236. package/dist/collection/constants/engine.constants.js.map +0 -1
  237. package/dist/collection/enums/event-button.enum.js +0 -7
  238. package/dist/collection/enums/event-button.enum.js.map +0 -1
  239. package/dist/collection/enums/handle-type.enum.js +0 -8
  240. package/dist/collection/enums/handle-type.enum.js.map +0 -1
  241. package/dist/collection/helpers/class.helper.js +0 -6
  242. package/dist/collection/helpers/class.helper.js.map +0 -1
  243. package/dist/collection/helpers/devices.helper.js +0 -6
  244. package/dist/collection/helpers/devices.helper.js.map +0 -1
  245. package/dist/collection/helpers/event.helper.js +0 -58
  246. package/dist/collection/helpers/event.helper.js.map +0 -1
  247. package/dist/collection/helpers/geometry.helper.js +0 -53
  248. package/dist/collection/helpers/geometry.helper.js.map +0 -1
  249. package/dist/collection/helpers/html.helper.js +0 -7
  250. package/dist/collection/helpers/html.helper.js.map +0 -1
  251. package/dist/collection/helpers/keyboard.helper.js +0 -31
  252. package/dist/collection/helpers/keyboard.helper.js.map +0 -1
  253. package/dist/collection/helpers/math.helper.js +0 -6
  254. package/dist/collection/helpers/math.helper.js.map +0 -1
  255. package/dist/collection/helpers/object.helper.js +0 -38
  256. package/dist/collection/helpers/object.helper.js.map +0 -1
  257. package/dist/collection/index.js +0 -21
  258. package/dist/collection/index.js.map +0 -1
  259. package/dist/collection/interfaces/bounding-box.interface.js +0 -2
  260. package/dist/collection/interfaces/bounding-box.interface.js.map +0 -1
  261. package/dist/collection/interfaces/command.interface.js +0 -2
  262. package/dist/collection/interfaces/command.interface.js.map +0 -1
  263. package/dist/collection/interfaces/context-menu-item.interface.js +0 -2
  264. package/dist/collection/interfaces/context-menu-item.interface.js.map +0 -1
  265. package/dist/collection/interfaces/debug-info.interface.js +0 -2
  266. package/dist/collection/interfaces/debug-info.interface.js.map +0 -1
  267. package/dist/collection/interfaces/engine-state.interface.js +0 -2
  268. package/dist/collection/interfaces/engine-state.interface.js.map +0 -1
  269. package/dist/collection/interfaces/object.interface.js +0 -2
  270. package/dist/collection/interfaces/object.interface.js.map +0 -1
  271. package/dist/collection/interfaces/path-options.interface.js +0 -2
  272. package/dist/collection/interfaces/path-options.interface.js.map +0 -1
  273. package/dist/collection/interfaces/point.interface.js +0 -2
  274. package/dist/collection/interfaces/point.interface.js.map +0 -1
  275. package/dist/collection/interfaces/polygon.interface.js +0 -2
  276. package/dist/collection/interfaces/polygon.interface.js.map +0 -1
  277. package/dist/collection/interfaces/selection-state.interface.js +0 -2
  278. package/dist/collection/interfaces/selection-state.interface.js.map +0 -1
  279. package/dist/collection/interfaces/serializable.interface.js +0 -2
  280. package/dist/collection/interfaces/serializable.interface.js.map +0 -1
  281. package/dist/collection/interfaces/tool.interface.js +0 -2
  282. package/dist/collection/interfaces/tool.interface.js.map +0 -1
  283. package/dist/collection/interfaces/toolbar-control.interface.js +0 -2
  284. package/dist/collection/interfaces/toolbar-control.interface.js.map +0 -1
  285. package/dist/collection/types/state.types.js +0 -2
  286. package/dist/collection/types/state.types.js.map +0 -1
  287. package/dist/components/index.js +0 -24
  288. package/dist/components/index.js.map +0 -1
  289. package/dist/components/kritzel-brush-style.js +0 -9
  290. package/dist/components/kritzel-brush-style.js.map +0 -1
  291. package/dist/components/kritzel-color-palette.js +0 -9
  292. package/dist/components/kritzel-color-palette.js.map +0 -1
  293. package/dist/components/kritzel-color.js +0 -9
  294. package/dist/components/kritzel-color.js.map +0 -1
  295. package/dist/components/kritzel-context-menu.js +0 -9
  296. package/dist/components/kritzel-context-menu.js.map +0 -1
  297. package/dist/components/kritzel-control-brush-config.js +0 -9
  298. package/dist/components/kritzel-control-brush-config.js.map +0 -1
  299. package/dist/components/kritzel-control-text-config.js +0 -9
  300. package/dist/components/kritzel-control-text-config.js.map +0 -1
  301. package/dist/components/kritzel-controls.js +0 -9
  302. package/dist/components/kritzel-controls.js.map +0 -1
  303. package/dist/components/kritzel-cursor-trail.js +0 -9
  304. package/dist/components/kritzel-cursor-trail.js.map +0 -1
  305. package/dist/components/kritzel-dropdown.js +0 -9
  306. package/dist/components/kritzel-dropdown.js.map +0 -1
  307. package/dist/components/kritzel-editor.js +0 -409
  308. package/dist/components/kritzel-editor.js.map +0 -1
  309. package/dist/components/kritzel-engine.js +0 -9
  310. package/dist/components/kritzel-engine.js.map +0 -1
  311. package/dist/components/kritzel-font-family.js +0 -9
  312. package/dist/components/kritzel-font-family.js.map +0 -1
  313. package/dist/components/kritzel-font-size.js +0 -9
  314. package/dist/components/kritzel-font-size.js.map +0 -1
  315. package/dist/components/kritzel-font.js +0 -9
  316. package/dist/components/kritzel-font.js.map +0 -1
  317. package/dist/components/kritzel-icon.js +0 -9
  318. package/dist/components/kritzel-icon.js.map +0 -1
  319. package/dist/components/kritzel-stroke-size.js +0 -9
  320. package/dist/components/kritzel-stroke-size.js.map +0 -1
  321. package/dist/components/kritzel-tooltip.js +0 -9
  322. package/dist/components/kritzel-tooltip.js.map +0 -1
  323. package/dist/components/kritzel-utility-panel.js +0 -9
  324. package/dist/components/kritzel-utility-panel.js.map +0 -1
  325. package/dist/components/p-BOj_wqdw.js +0 -54
  326. package/dist/components/p-BOj_wqdw.js.map +0 -1
  327. package/dist/components/p-BY8BWGge.js.map +0 -1
  328. package/dist/components/p-Bn5P7YQn.js.map +0 -1
  329. package/dist/components/p-C9usqwb5.js +0 -61
  330. package/dist/components/p-C9usqwb5.js.map +0 -1
  331. package/dist/components/p-CF8ziFc4.js.map +0 -1
  332. package/dist/components/p-CiT5gBDh.js +0 -44
  333. package/dist/components/p-CiT5gBDh.js.map +0 -1
  334. package/dist/components/p-Cn_kantt.js +0 -54
  335. package/dist/components/p-Cn_kantt.js.map +0 -1
  336. package/dist/components/p-Cnc43o9b.js.map +0 -1
  337. package/dist/components/p-CneTqrgt.js.map +0 -1
  338. package/dist/components/p-CtiROna-.js +0 -90
  339. package/dist/components/p-CtiROna-.js.map +0 -1
  340. package/dist/components/p-Cw2ATHMj.js.map +0 -1
  341. package/dist/components/p-D0sLslUq.js.map +0 -1
  342. package/dist/components/p-D8W6LE-c.js.map +0 -1
  343. package/dist/components/p-DJN0U8pI.js +0 -1327
  344. package/dist/components/p-DJN0U8pI.js.map +0 -1
  345. package/dist/components/p-DJaVT2yR.js +0 -2724
  346. package/dist/components/p-DJaVT2yR.js.map +0 -1
  347. package/dist/components/p-DMAzUKo6.js +0 -102
  348. package/dist/components/p-DMAzUKo6.js.map +0 -1
  349. package/dist/components/p-DSLY0tr5.js +0 -52
  350. package/dist/components/p-DSLY0tr5.js.map +0 -1
  351. package/dist/components/p-DpiklJU9.js.map +0 -1
  352. package/dist/components/p-NZJPrwJV.js.map +0 -1
  353. package/dist/components/p-ubNAWsY_.js +0 -111
  354. package/dist/components/p-ubNAWsY_.js.map +0 -1
  355. package/dist/esm/app-globals-DQuL1Twl.js +0 -6
  356. package/dist/esm/app-globals-DQuL1Twl.js.map +0 -1
  357. package/dist/esm/index-BGl8znzE.js +0 -1564
  358. package/dist/esm/index-BGl8znzE.js.map +0 -1
  359. package/dist/esm/index-DO2IiM_o.js +0 -2525
  360. package/dist/esm/index-DO2IiM_o.js.map +0 -1
  361. package/dist/esm/index.js +0 -4
  362. package/dist/esm/index.js.map +0 -1
  363. package/dist/esm/kritzel-brush-style_18.entry.js +0 -2347
  364. package/dist/esm/kritzel-brush-style_18.entry.js.map +0 -1
  365. package/dist/esm/loader.js +0 -14
  366. package/dist/esm/loader.js.map +0 -1
  367. package/dist/esm/stencil.js +0 -24
  368. package/dist/esm/stencil.js.map +0 -1
  369. package/dist/index.cjs.js +0 -1
  370. package/dist/index.js +0 -1
  371. package/dist/stencil/p-BGl8znzE.js +0 -3
  372. package/dist/stencil/p-BGl8znzE.js.map +0 -1
  373. package/dist/stencil/p-DO2IiM_o.js +0 -2
  374. package/dist/stencil/p-DO2IiM_o.js.map +0 -1
  375. package/dist/stencil/p-DQuL1Twl.js +0 -2
  376. package/dist/stencil/p-DQuL1Twl.js.map +0 -1
  377. package/dist/stencil/p-c64f6589.entry.js +0 -2
  378. package/dist/stencil/p-c64f6589.entry.js.map +0 -1
@@ -1,260 +0,0 @@
1
- import { getStroke } from "perfect-freehand";
2
- import { KritzelMathHelper } from "../../helpers/math.helper";
3
- import { KritzelBaseObject } from "./base-object.class";
4
- import { KritzelGeometryHelper } from "../../helpers/geometry.helper";
5
- export class KritzelPath extends KritzelBaseObject {
6
- get viewBox() {
7
- return `${this.x} ${this.y} ${this.width} ${this.height}`;
8
- }
9
- constructor(config) {
10
- var _a, _b, _c, _d, _e, _f;
11
- super();
12
- this.__class__ = 'KritzelPath';
13
- this.stroke = 'none';
14
- this.lineSlack = 0.5;
15
- this.x = 0;
16
- this.y = 0;
17
- this.height = 0;
18
- this.width = 0;
19
- this.scale = 1;
20
- this.isVisible = true;
21
- this.isDebugInfoVisible = true;
22
- this._adjustedPoints = null;
23
- this.options = config;
24
- this.points = (_a = config === null || config === void 0 ? void 0 : config.points) !== null && _a !== void 0 ? _a : [];
25
- this.translateX = (_b = config === null || config === void 0 ? void 0 : config.translateX) !== null && _b !== void 0 ? _b : 0;
26
- this.translateY = (_c = config === null || config === void 0 ? void 0 : config.translateY) !== null && _c !== void 0 ? _c : 0;
27
- this.scale = (_d = config === null || config === void 0 ? void 0 : config.scale) !== null && _d !== void 0 ? _d : 1;
28
- this.strokeWidth = (_e = config === null || config === void 0 ? void 0 : config.strokeWidth) !== null && _e !== void 0 ? _e : 8;
29
- this.fill = (_f = config === null || config === void 0 ? void 0 : config.fill) !== null && _f !== void 0 ? _f : '#000000';
30
- this.d = this.generateSvgPath();
31
- this.updateDimensions();
32
- }
33
- static create(store, options) {
34
- var _a, _b, _c, _d, _e, _f;
35
- const object = new KritzelPath();
36
- object._store = store;
37
- object.id = object.generateId();
38
- object.options = options;
39
- object.points = (_a = options === null || options === void 0 ? void 0 : options.points) !== null && _a !== void 0 ? _a : [];
40
- object.translateX = (_b = options === null || options === void 0 ? void 0 : options.translateX) !== null && _b !== void 0 ? _b : 0;
41
- object.translateY = (_c = options === null || options === void 0 ? void 0 : options.translateY) !== null && _c !== void 0 ? _c : 0;
42
- object.scale = (_d = options === null || options === void 0 ? void 0 : options.scale) !== null && _d !== void 0 ? _d : 1;
43
- object.strokeWidth = (_e = options === null || options === void 0 ? void 0 : options.strokeWidth) !== null && _e !== void 0 ? _e : 8;
44
- object.fill = (_f = options === null || options === void 0 ? void 0 : options.fill) !== null && _f !== void 0 ? _f : '#000000';
45
- object.zIndex = store.currentZIndex;
46
- object.d = object.generateSvgPath();
47
- object.updateDimensions();
48
- return object;
49
- }
50
- resize(x, y, width, height) {
51
- if (width <= 1 || height <= 1) {
52
- return;
53
- }
54
- const scaleX = width / this.width;
55
- const scaleY = height / this.height;
56
- this.width = width;
57
- this.height = height;
58
- this.points = this.points.map(([x, y]) => [x * scaleX, y * scaleY]);
59
- this.d = this.generateSvgPath();
60
- this.width = Math.max(...this.points.map(p => p[0])) - Math.min(...this.points.map(p => p[0])) + this.strokeWidth;
61
- this.height = Math.max(...this.points.map(p => p[1])) - Math.min(...this.points.map(p => p[1])) + this.strokeWidth;
62
- this.x = Math.min(...this.points.map(p => p[0])) - this.strokeWidth / 2;
63
- this.y = Math.min(...this.points.map(p => p[1])) - this.strokeWidth / 2;
64
- this.translateX = x;
65
- this.translateY = y;
66
- this._adjustedPoints = null;
67
- }
68
- rotate(value) {
69
- this.rotation = value;
70
- this._adjustedPoints = null;
71
- }
72
- move(_startX, _startY, _endX, _endY) {
73
- this._adjustedPoints = null;
74
- }
75
- hitTest(x, y) {
76
- const halfStroke = this.strokeWidth / this.scale / 2;
77
- if (this._adjustedPoints === null) {
78
- this._adjustedPoints = this.computeAdjustedPoints();
79
- }
80
- if (this._adjustedPoints.length === 1) {
81
- const p1 = this._adjustedPoints[0];
82
- const distance = this.pointToLineSegmentDistance(x, y, p1[0], p1[1], p1[0], p1[1]);
83
- return distance <= halfStroke;
84
- }
85
- for (let i = 0; i < this._adjustedPoints.length - 1; i++) {
86
- const p1 = this._adjustedPoints[i];
87
- const p2 = this._adjustedPoints[i + 1];
88
- const distance = this.pointToLineSegmentDistance(x, y, p1[0], p1[1], p2[0], p2[1]);
89
- if (distance <= halfStroke) {
90
- return true;
91
- }
92
- }
93
- return false;
94
- }
95
- hitTestPolygon(polygon) {
96
- const halfStroke = this.strokeWidth / this.scale / 2;
97
- if (this._adjustedPoints === null) {
98
- this._adjustedPoints = this.computeAdjustedPoints();
99
- }
100
- const polyPoints = [
101
- { x: polygon.bottomLeft.x, y: polygon.bottomLeft.y },
102
- { x: polygon.bottomRight.x, y: polygon.bottomRight.y },
103
- { x: polygon.topRight.x, y: polygon.topRight.y },
104
- { x: polygon.topLeft.x, y: polygon.topLeft.y },
105
- ];
106
- for (const [px, py] of this._adjustedPoints) {
107
- if (KritzelGeometryHelper.isPointInPolygon({ x: px, y: py }, polyPoints)) {
108
- return true;
109
- }
110
- }
111
- for (const pt of polyPoints) {
112
- if (this.hitTest(pt.x, pt.y)) {
113
- return true;
114
- }
115
- }
116
- for (let i = 0; i < this._adjustedPoints.length - 1; i++) {
117
- const p1 = { x: this._adjustedPoints[i][0], y: this._adjustedPoints[i][1] };
118
- const p2 = { x: this._adjustedPoints[i + 1][0], y: this._adjustedPoints[i + 1][1] };
119
- for (let j = 0; j < polyPoints.length; j++) {
120
- const q1 = polyPoints[j];
121
- const q2 = polyPoints[(j + 1) % polyPoints.length];
122
- if (KritzelGeometryHelper.intersectLines(p1, p2, q1, q2)) {
123
- return true;
124
- }
125
- }
126
- }
127
- for (let i = 0; i < this._adjustedPoints.length - 1; i++) {
128
- const p1 = this._adjustedPoints[i];
129
- const p2 = this._adjustedPoints[i + 1];
130
- for (let j = 0; j < polyPoints.length; j++) {
131
- const q1 = polyPoints[j];
132
- const q2 = polyPoints[(j + 1) % polyPoints.length];
133
- const d1 = this.pointToLineSegmentDistance(q1.x, q1.y, p1[0], p1[1], p2[0], p2[1]);
134
- const d2 = this.pointToLineSegmentDistance(q2.x, q2.y, p1[0], p1[1], p2[0], p2[1]);
135
- const d3 = this.pointToLineSegmentDistance(p1[0], p1[1], q1.x, q1.y, q2.x, q2.y);
136
- const d4 = this.pointToLineSegmentDistance(p2[0], p2[1], q1.x, q1.y, q2.x, q2.y);
137
- const minD = Math.min(d1, d2, d3, d4);
138
- if (minD <= halfStroke) {
139
- return true;
140
- }
141
- }
142
- }
143
- return false;
144
- }
145
- computeAdjustedPoints() {
146
- var _a;
147
- if (!((_a = this.points) === null || _a === void 0 ? void 0 : _a.length)) {
148
- return [];
149
- }
150
- const angle = this.rotation;
151
- const cos = Math.cos(angle);
152
- const sin = Math.sin(angle);
153
- const xs = this.points.map(p => p[0]);
154
- const ys = this.points.map(p => p[1]);
155
- const pivot = {
156
- x: (Math.min(...xs) + Math.max(...xs)) / 2,
157
- y: (Math.min(...ys) + Math.max(...ys)) / 2,
158
- };
159
- const { x: cx, y: cy } = pivot;
160
- const rotatedPoints = this.points.map(([x, y]) => {
161
- const dx = x - cx;
162
- const dy = y - cy;
163
- return [cx + dx * cos - dy * sin, cy + dx * sin + dy * cos];
164
- });
165
- const deltaX = this.x - this.translateX;
166
- const deltaY = this.y - this.translateY;
167
- return rotatedPoints.map(([px, py]) => [(px + this.options.translateX - deltaX) / this.scale, (py + this.options.translateY - deltaY) / this.scale]);
168
- }
169
- pointToLineSegmentDistance(x, y, x1, y1, x2, y2) {
170
- const A = x - x1;
171
- const B = y - y1;
172
- const C = x2 - x1;
173
- const D = y2 - y1;
174
- const dot = A * C + B * D;
175
- const len_sq = C * C + D * D;
176
- let param = -1;
177
- if (len_sq !== 0) {
178
- // in case of 0 length line
179
- param = dot / len_sq;
180
- }
181
- let xx, yy;
182
- if (param < 0) {
183
- xx = x1;
184
- yy = y1;
185
- }
186
- else if (param > 1) {
187
- xx = x2;
188
- yy = y2;
189
- }
190
- else {
191
- xx = x1 + param * C;
192
- yy = y1 + param * D;
193
- }
194
- const dx = x - xx;
195
- const dy = y - yy;
196
- return Math.sqrt(dx * dx + dy * dy);
197
- }
198
- updateDimensions() {
199
- const rotatedPoints = this.points.map(([x, y]) => {
200
- const rotatedX = x * Math.cos(this.rotation) - y * Math.sin(this.rotation);
201
- const rotatedY = x * Math.sin(this.rotation) + y * Math.cos(this.rotation);
202
- return [rotatedX, rotatedY];
203
- });
204
- const minX = Math.min(...rotatedPoints.map(p => p[0] - this.strokeWidth / 2));
205
- const minY = Math.min(...rotatedPoints.map(p => p[1] - this.strokeWidth / 2));
206
- const maxX = Math.max(...rotatedPoints.map(p => p[0] + this.strokeWidth / 2));
207
- const maxY = Math.max(...rotatedPoints.map(p => p[1] + this.strokeWidth / 2));
208
- this.width = maxX - minX + this.lineSlack;
209
- this.height = maxY - minY + this.lineSlack;
210
- this.x = minX;
211
- this.y = minY;
212
- this.translateX = (this.x + this.translateX) / this.scale;
213
- this.translateY = (this.y + this.translateY) / this.scale;
214
- }
215
- generateSvgPath() {
216
- const stroke = this.getStrokeFromPoints(this.points, this.strokeWidth);
217
- return this.getSvgPathFromStroke(stroke);
218
- }
219
- getStrokeFromPoints(points, strokeWidth) {
220
- return getStroke(points, {
221
- size: strokeWidth,
222
- thinning: 0.5,
223
- smoothing: 0.5,
224
- streamline: 0.5,
225
- easing: t => t,
226
- simulatePressure: true,
227
- last: true,
228
- start: {
229
- cap: true,
230
- taper: 0,
231
- easing: t => t,
232
- },
233
- end: {
234
- cap: true,
235
- taper: 0,
236
- easing: t => t,
237
- },
238
- });
239
- }
240
- getSvgPathFromStroke(points, closed = true) {
241
- const len = points.length;
242
- if (len < 4) {
243
- return ``;
244
- }
245
- let a = points[0];
246
- let b = points[1];
247
- const c = points[2];
248
- 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`;
249
- for (let i = 2, max = len - 1; i < max; i++) {
250
- a = points[i];
251
- b = points[i + 1];
252
- result += `${KritzelMathHelper.average(a[0], b[0]).toFixed(2)},${KritzelMathHelper.average(a[1], b[1]).toFixed(2)} `;
253
- }
254
- if (closed) {
255
- result += 'Z';
256
- }
257
- return result;
258
- }
259
- }
260
- //# sourceMappingURL=path.class.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"path.class.js","sourceRoot":"","sources":["../../../src/classes/objects/path.class.ts"],"names":[],"mappings":"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","sourcesContent":["import { getStroke } from 'perfect-freehand';\r\nimport { KritzelMathHelper } from '../../helpers/math.helper';\r\nimport { KritzelPathOptions } from '../../interfaces/path-options.interface';\r\nimport { KritzelBaseObject } from './base-object.class';\r\nimport { KritzelStore } from '../store.class';\r\nimport { KritzelPolygon } from '../../interfaces/polygon.interface';\r\nimport { KritzelGeometryHelper } from '../../helpers/geometry.helper';\r\nimport { KritzelPoint } from '../../interfaces/point.interface';\r\n\r\nexport class KritzelPath extends KritzelBaseObject<SVGElement> {\r\n override __class__: string = 'KritzelPath';\r\n\r\n points: number[][];\r\n d: string;\r\n stroke: string = 'none';\r\n strokeWidth: number;\r\n lineSlack: number = 0.5;\r\n fill: string;\r\n x: number = 0;\r\n y: number = 0;\r\n translateX: number;\r\n translateY: number;\r\n height: number = 0;\r\n width: number = 0;\r\n scale: number = 1;\r\n options: KritzelPathOptions | undefined;\r\n\r\n isVisible: boolean = true;\r\n isDebugInfoVisible: boolean = true;\r\n\r\n private _adjustedPoints?: number[][] = null;\r\n\r\n get viewBox(): string {\r\n return `${this.x} ${this.y} ${this.width} ${this.height}`;\r\n }\r\n\r\n constructor(config?: { points: number[][]; translateX?: number; translateY?: number; scale?: number; strokeWidth?: number; fill?: string; lineSlack?: number }) {\r\n super();\r\n this.options = config;\r\n this.points = config?.points ?? [];\r\n this.translateX = config?.translateX ?? 0;\r\n this.translateY = config?.translateY ?? 0;\r\n this.scale = config?.scale ?? 1;\r\n this.strokeWidth = config?.strokeWidth ?? 8;\r\n this.fill = config?.fill ?? '#000000';\r\n this.d = this.generateSvgPath();\r\n this.updateDimensions();\r\n }\r\n\r\n static override create(store: KritzelStore, options?: KritzelPathOptions): KritzelPath {\r\n const object = new KritzelPath();\r\n\r\n object._store = store;\r\n object.id = object.generateId();\r\n object.options = options;\r\n object.points = options?.points ?? [];\r\n object.translateX = options?.translateX ?? 0;\r\n object.translateY = options?.translateY ?? 0;\r\n object.scale = options?.scale ?? 1;\r\n object.strokeWidth = options?.strokeWidth ?? 8;\r\n object.fill = options?.fill ?? '#000000';\r\n object.zIndex = store.currentZIndex;\r\n object.d = object.generateSvgPath();\r\n object.updateDimensions();\r\n\r\n return object;\r\n }\r\n\r\n override resize(x: number | null, y: number | null, width: number, height: number): void {\r\n if (width <= 1 || height <= 1) {\r\n return;\r\n }\r\n\r\n const scaleX = width / this.width;\r\n const scaleY = height / this.height;\r\n\r\n this.width = width;\r\n this.height = height;\r\n\r\n this.points = this.points.map(([x, y]) => [x * scaleX, y * scaleY]);\r\n this.d = this.generateSvgPath();\r\n\r\n this.width = Math.max(...this.points.map(p => p[0])) - Math.min(...this.points.map(p => p[0])) + this.strokeWidth;\r\n this.height = Math.max(...this.points.map(p => p[1])) - Math.min(...this.points.map(p => p[1])) + this.strokeWidth;\r\n\r\n this.x = Math.min(...this.points.map(p => p[0])) - this.strokeWidth / 2;\r\n this.y = Math.min(...this.points.map(p => p[1])) - this.strokeWidth / 2;\r\n\r\n this.translateX = x;\r\n this.translateY = y;\r\n\r\n this._adjustedPoints = null;\r\n }\r\n\r\n override rotate(value: number): void {\r\n this.rotation = value;\r\n this._adjustedPoints = null;\r\n }\r\n\r\n override move(_startX: number, _startY: number, _endX: number, _endY: number): void {\r\n this._adjustedPoints = null;\r\n }\r\n\r\n override hitTest(x: number, y: number): boolean {\r\n const halfStroke = this.strokeWidth / this.scale / 2;\r\n\r\n if (this._adjustedPoints === null) {\r\n this._adjustedPoints = this.computeAdjustedPoints();\r\n }\r\n\r\n if (this._adjustedPoints.length === 1) {\r\n const p1 = this._adjustedPoints[0];\r\n const distance = this.pointToLineSegmentDistance(x, y, p1[0], p1[1], p1[0], p1[1]);\r\n return distance <= halfStroke;\r\n }\r\n\r\n for (let i = 0; i < this._adjustedPoints.length - 1; i++) {\r\n const p1 = this._adjustedPoints[i];\r\n const p2 = this._adjustedPoints[i + 1];\r\n\r\n const distance = this.pointToLineSegmentDistance(x, y, p1[0], p1[1], p2[0], p2[1]);\r\n\r\n if (distance <= halfStroke) {\r\n return true;\r\n }\r\n }\r\n\r\n return false;\r\n }\r\n\r\n override hitTestPolygon(polygon: KritzelPolygon): boolean {\r\n const halfStroke = this.strokeWidth / this.scale / 2;\r\n\r\n if (this._adjustedPoints === null) {\r\n this._adjustedPoints = this.computeAdjustedPoints();\r\n }\r\n\r\n const polyPoints: KritzelPoint[] = [\r\n { x: polygon.bottomLeft.x, y: polygon.bottomLeft.y },\r\n { x: polygon.bottomRight.x, y: polygon.bottomRight.y },\r\n { x: polygon.topRight.x, y: polygon.topRight.y },\r\n { x: polygon.topLeft.x, y: polygon.topLeft.y },\r\n ];\r\n\r\n for (const [px, py] of this._adjustedPoints) {\r\n if (KritzelGeometryHelper.isPointInPolygon({ x: px, y: py }, polyPoints)) {\r\n return true;\r\n }\r\n }\r\n\r\n for (const pt of polyPoints) {\r\n if (this.hitTest(pt.x, pt.y)) {\r\n return true;\r\n }\r\n }\r\n\r\n for (let i = 0; i < this._adjustedPoints.length - 1; i++) {\r\n const p1 = { x: this._adjustedPoints[i][0], y: this._adjustedPoints[i][1] };\r\n const p2 = { x: this._adjustedPoints[i + 1][0], y: this._adjustedPoints[i + 1][1] };\r\n\r\n for (let j = 0; j < polyPoints.length; j++) {\r\n const q1 = polyPoints[j];\r\n const q2 = polyPoints[(j + 1) % polyPoints.length];\r\n\r\n if (KritzelGeometryHelper.intersectLines(p1, p2, q1, q2)) {\r\n return true;\r\n }\r\n }\r\n }\r\n\r\n for (let i = 0; i < this._adjustedPoints.length - 1; i++) {\r\n const p1 = this._adjustedPoints[i];\r\n const p2 = this._adjustedPoints[i + 1];\r\n\r\n for (let j = 0; j < polyPoints.length; j++) {\r\n const q1 = polyPoints[j];\r\n const q2 = polyPoints[(j + 1) % polyPoints.length];\r\n\r\n const d1 = this.pointToLineSegmentDistance(q1.x, q1.y, p1[0], p1[1], p2[0], p2[1]);\r\n const d2 = this.pointToLineSegmentDistance(q2.x, q2.y, p1[0], p1[1], p2[0], p2[1]);\r\n const d3 = this.pointToLineSegmentDistance(p1[0], p1[1], q1.x, q1.y, q2.x, q2.y);\r\n const d4 = this.pointToLineSegmentDistance(p2[0], p2[1], q1.x, q1.y, q2.x, q2.y);\r\n\r\n const minD = Math.min(d1, d2, d3, d4);\r\n if (minD <= halfStroke) {\r\n return true;\r\n }\r\n }\r\n }\r\n\r\n return false;\r\n }\r\n\r\n private computeAdjustedPoints(): number[][] {\r\n if (!this.points?.length) {\r\n return [];\r\n }\r\n\r\n const angle = this.rotation;\r\n const cos = Math.cos(angle);\r\n const sin = Math.sin(angle);\r\n\r\n const xs = this.points.map(p => p[0]);\r\n const ys = this.points.map(p => p[1]);\r\n const pivot = {\r\n x: (Math.min(...xs) + Math.max(...xs)) / 2,\r\n y: (Math.min(...ys) + Math.max(...ys)) / 2,\r\n };\r\n\r\n const { x: cx, y: cy } = pivot;\r\n\r\n const rotatedPoints = this.points.map(([x, y]) => {\r\n const dx = x - cx;\r\n const dy = y - cy;\r\n return [cx + dx * cos - dy * sin, cy + dx * sin + dy * cos];\r\n });\r\n\r\n const deltaX = this.x - this.translateX;\r\n const deltaY = this.y - this.translateY;\r\n\r\n return rotatedPoints.map(([px, py]) => [(px + this.options.translateX - deltaX) / this.scale, (py + this.options.translateY - deltaY) / this.scale]);\r\n }\r\n\r\n private pointToLineSegmentDistance(x: number, y: number, x1: number, y1: number, x2: number, y2: number): number {\r\n const A = x - x1;\r\n const B = y - y1;\r\n const C = x2 - x1;\r\n const D = y2 - y1;\r\n\r\n const dot = A * C + B * D;\r\n const len_sq = C * C + D * D;\r\n let param = -1;\r\n if (len_sq !== 0) {\r\n // in case of 0 length line\r\n param = dot / len_sq;\r\n }\r\n\r\n let xx, yy;\r\n\r\n if (param < 0) {\r\n xx = x1;\r\n yy = y1;\r\n } else if (param > 1) {\r\n xx = x2;\r\n yy = y2;\r\n } else {\r\n xx = x1 + param * C;\r\n yy = y1 + param * D;\r\n }\r\n\r\n const dx = x - xx;\r\n const dy = y - yy;\r\n return Math.sqrt(dx * dx + dy * dy);\r\n }\r\n\r\n private updateDimensions(): void {\r\n const rotatedPoints = this.points.map(([x, y]) => {\r\n const rotatedX = x * Math.cos(this.rotation) - y * Math.sin(this.rotation);\r\n const rotatedY = x * Math.sin(this.rotation) + y * Math.cos(this.rotation);\r\n return [rotatedX, rotatedY];\r\n });\r\n\r\n const minX = Math.min(...rotatedPoints.map(p => p[0] - this.strokeWidth / 2));\r\n const minY = Math.min(...rotatedPoints.map(p => p[1] - this.strokeWidth / 2));\r\n\r\n const maxX = Math.max(...rotatedPoints.map(p => p[0] + this.strokeWidth / 2));\r\n const maxY = Math.max(...rotatedPoints.map(p => p[1] + this.strokeWidth / 2));\r\n\r\n this.width = maxX - minX + this.lineSlack;\r\n this.height = maxY - minY + this.lineSlack;\r\n\r\n this.x = minX;\r\n this.y = minY;\r\n\r\n this.translateX = (this.x + this.translateX) / this.scale;\r\n this.translateY = (this.y + this.translateY) / this.scale;\r\n }\r\n\r\n private generateSvgPath(): string {\r\n const stroke = this.getStrokeFromPoints(this.points, this.strokeWidth);\r\n return this.getSvgPathFromStroke(stroke);\r\n }\r\n\r\n private getStrokeFromPoints(points: number[][], strokeWidth: number): number[][] {\r\n return getStroke(points, {\r\n size: strokeWidth,\r\n thinning: 0.5,\r\n smoothing: 0.5,\r\n streamline: 0.5,\r\n easing: t => t,\r\n simulatePressure: true,\r\n last: true,\r\n start: {\r\n cap: true,\r\n taper: 0,\r\n easing: t => t,\r\n },\r\n end: {\r\n cap: true,\r\n taper: 0,\r\n easing: t => t,\r\n },\r\n });\r\n }\r\n\r\n private getSvgPathFromStroke(points: number[][], closed = true) {\r\n const len = points.length;\r\n\r\n if (len < 4) {\r\n return ``;\r\n }\r\n\r\n let a = points[0];\r\n let b = points[1];\r\n const c = points[2];\r\n\r\n 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(\r\n 2,\r\n )},${KritzelMathHelper.average(b[1], c[1]).toFixed(2)} T`;\r\n\r\n for (let i = 2, max = len - 1; i < max; i++) {\r\n a = points[i];\r\n b = points[i + 1];\r\n result += `${KritzelMathHelper.average(a[0], b[0]).toFixed(2)},${KritzelMathHelper.average(a[1], b[1]).toFixed(2)} `;\r\n }\r\n\r\n if (closed) {\r\n result += 'Z';\r\n }\r\n\r\n return result;\r\n }\r\n}\r\n"]}
@@ -1,22 +0,0 @@
1
- import { KritzelBaseObject } from "./base-object.class";
2
- export class KrtizelSelectionBox extends KritzelBaseObject {
3
- constructor() {
4
- super(...arguments);
5
- this.__class__ = 'KrtizelSelectionBox';
6
- this.objects = [];
7
- }
8
- static create(store) {
9
- const object = new KrtizelSelectionBox();
10
- object._store = store;
11
- object.id = object.generateId();
12
- object.scale = store.state.scale;
13
- object.zIndex = 99999;
14
- object.backgroundColor = 'var(--kritzel-selection-box-background-color, rgba(0, 122, 255, 0.2))';
15
- object.borderColor = 'var(--kritzel-selection-box-border-color, rgba(0, 122, 255, 0.5))';
16
- object.borderWidth = 2;
17
- object.height = 0;
18
- object.width = 0;
19
- return object;
20
- }
21
- }
22
- //# sourceMappingURL=selection-box.class.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"selection-box.class.js","sourceRoot":"","sources":["../../../src/classes/objects/selection-box.class.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAExD,MAAM,OAAO,mBAAoB,SAAQ,iBAA8B;IAAvE;;QACW,cAAS,GAAW,qBAAqB,CAAC;QAEnD,YAAO,GAA6B,EAAE,CAAC;IAiBzC,CAAC;IAfC,MAAM,CAAU,MAAM,CAAC,KAAmB;QACxC,MAAM,MAAM,GAAG,IAAI,mBAAmB,EAAE,CAAC;QAEzC,MAAM,CAAC,MAAM,GAAG,KAAK,CAAC;QACtB,MAAM,CAAC,EAAE,GAAG,MAAM,CAAC,UAAU,EAAE,CAAC;QAChC,MAAM,CAAC,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC;QACjC,MAAM,CAAC,MAAM,GAAG,KAAK,CAAC;QACtB,MAAM,CAAC,eAAe,GAAG,uEAAuE,CAAC;QACjG,MAAM,CAAC,WAAW,GAAG,mEAAmE,CAAC;QACzF,MAAM,CAAC,WAAW,GAAG,CAAC,CAAC;QACvB,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC;QAClB,MAAM,CAAC,KAAK,GAAG,CAAC,CAAC;QAEjB,OAAO,MAAM,CAAC;IAChB,CAAC;CACF","sourcesContent":["import { KritzelStore } from '../store.class';\r\nimport { KritzelBaseObject } from './base-object.class';\r\n\r\nexport class KrtizelSelectionBox extends KritzelBaseObject<HTMLElement> {\r\n override __class__: string = 'KrtizelSelectionBox';\r\n\r\n objects: KritzelBaseObject<any>[] = [];\r\n\r\n static override create(store: KritzelStore): KrtizelSelectionBox {\r\n const object = new KrtizelSelectionBox();\r\n\r\n object._store = store;\r\n object.id = object.generateId();\r\n object.scale = store.state.scale;\r\n object.zIndex = 99999;\r\n object.backgroundColor = 'var(--kritzel-selection-box-background-color, rgba(0, 122, 255, 0.2))';\r\n object.borderColor = 'var(--kritzel-selection-box-border-color, rgba(0, 122, 255, 0.5))';\r\n object.borderWidth = 2;\r\n object.height = 0;\r\n object.width = 0;\r\n\r\n return object;\r\n }\r\n}\r\n"]}
@@ -1,161 +0,0 @@
1
- import { ObjectHelper } from "../../helpers/object.helper";
2
- import { KritzelReviver } from "../reviver.class";
3
- import { KritzelBaseObject } from "./base-object.class";
4
- export class KritzelSelectionGroup extends KritzelBaseObject {
5
- constructor() {
6
- super(...arguments);
7
- this.__class__ = 'KritzelSelectionGroup';
8
- this.objects = [];
9
- this.unchangedObjects = [];
10
- }
11
- get length() {
12
- return this.objects.length;
13
- }
14
- static create(store) {
15
- const object = new KritzelSelectionGroup();
16
- object._store = store;
17
- object.id = object.generateId();
18
- object.scale = store.state.scale;
19
- object.zIndex = 99999;
20
- return object;
21
- }
22
- addOrRemove(object) {
23
- const index = this.objects.findIndex(obj => obj.id === object.id);
24
- if (index === -1) {
25
- this.objects.push(object);
26
- }
27
- else {
28
- this.objects.splice(index, 1);
29
- }
30
- this.unchangedObjects = ObjectHelper.clone(this.objects);
31
- this.refreshObjectDimensions();
32
- }
33
- deselectAllChildren() {
34
- this.objects.forEach(obj => (obj.isSelected = false));
35
- }
36
- updatePosition(x, y) {
37
- this.objects.forEach(obj => {
38
- const deltaX = obj.translateX - this.translateX;
39
- const deltaY = obj.translateY - this.translateY;
40
- obj.translateX = x + deltaX;
41
- obj.translateY = y + deltaY;
42
- this._store.state.objectsOctree.update(obj);
43
- });
44
- this.unchangedObjects.forEach(obj => {
45
- const deltaX = obj.translateX - this.translateX;
46
- const deltaY = obj.translateY - this.translateY;
47
- obj.translateX = x + deltaX;
48
- obj.translateY = y + deltaY;
49
- });
50
- this.translateX = x;
51
- this.translateY = y;
52
- this._store.state.objectsOctree.update(this);
53
- }
54
- move(startX, startY, endX, endY) {
55
- const deltaX = (startX - endX) / this._store.state.scale;
56
- const deltaY = (startY - endY) / this._store.state.scale;
57
- this.translateX += deltaX;
58
- this.translateY += deltaY;
59
- this._store.state.objectsOctree.update(this);
60
- this.objects.forEach(obj => {
61
- obj.translateX += deltaX;
62
- obj.translateY += deltaY;
63
- obj.move(startX, startY, endX, endY);
64
- this._store.state.objectsOctree.update(obj);
65
- });
66
- this.unchangedObjects.forEach(obj => {
67
- obj.translateX += deltaX;
68
- obj.translateY += deltaY;
69
- });
70
- }
71
- resize(x, y, width, height) {
72
- const widthScaleFactor = width / this.width;
73
- const heightScaleFactor = height / this.height;
74
- const deltaX = x - this.translateX;
75
- const deltaY = y - this.translateY;
76
- this.objects.forEach(child => {
77
- const updatedWidth = child.width * widthScaleFactor;
78
- const updatedHeight = child.height * heightScaleFactor;
79
- const updatedX = child.translateX + deltaX + (child.translateX - this.translateX) * (widthScaleFactor - 1);
80
- const updatedY = child.translateY + deltaY + (child.translateY - this.translateY) * (heightScaleFactor - 1);
81
- child.resize(updatedX, updatedY, updatedWidth, updatedHeight);
82
- this._store.state.objectsOctree.update(child);
83
- });
84
- this.refreshObjectDimensions();
85
- this.unchangedObjects = ObjectHelper.clone(this.objects);
86
- }
87
- rotate(value) {
88
- this.rotation = value;
89
- const centerX = this.translateX + this.totalWidth / 2 / this.scale;
90
- const centerY = this.translateY + this.totalHeight / 2 / this.scale;
91
- const angle = value;
92
- const cos = Math.cos(angle);
93
- const sin = Math.sin(angle);
94
- this.objects.forEach(child => {
95
- const unchangedChild = this.getUnchangedObject(child.id);
96
- const offsetX = this.getOffsetXToCenter(unchangedChild);
97
- const offsetY = this.getOffsetYToCenter(unchangedChild);
98
- const rotatedX = cos * offsetX - sin * offsetY;
99
- const rotatedY = sin * offsetX + cos * offsetY;
100
- child.translateX = centerX + rotatedX - child.totalWidth / 2 / child.scale;
101
- child.translateY = centerY + rotatedY - child.totalHeight / 2 / child.scale;
102
- child.rotate(this.objects.length === 1 ? value : value + unchangedChild.rotation);
103
- this._store.state.objectsOctree.update(child);
104
- });
105
- }
106
- copy() {
107
- const selectionGroup = KritzelSelectionGroup.create(this._store);
108
- let currentZIndex = this._store.currentZIndex;
109
- this.objects.forEach(obj => {
110
- const copiedObject = obj.copy();
111
- copiedObject.zIndex = currentZIndex;
112
- selectionGroup.addOrRemove(copiedObject);
113
- currentZIndex++;
114
- });
115
- selectionGroup.unchangedObjects = ObjectHelper.clone(selectionGroup.objects);
116
- if (this.objects.length === 1) {
117
- selectionGroup.rotation = this.objects[0].rotation;
118
- }
119
- return selectionGroup;
120
- }
121
- refreshObjectDimensions() {
122
- if (this.objects.length === 1) {
123
- const obj = this.objects[0];
124
- this.minX = obj.boundingBox.x / this.scale;
125
- this.maxX = obj.boundingBox.x / this.scale + obj.boundingBox.width;
126
- this.minY = obj.boundingBox.y / this.scale;
127
- this.maxY = obj.boundingBox.y / this.scale + obj.boundingBox.height;
128
- this.translateX = (this.minX - this.padding) * this.scale;
129
- this.translateY = (this.minY - this.padding) * this.scale;
130
- this.width = (this.maxX - this.minX - this.padding) * this.scale;
131
- this.height = (this.maxY - this.minY - this.padding) * this.scale;
132
- }
133
- else {
134
- this.minX = Math.min(...this.objects.map(obj => obj.minXRotated));
135
- this.maxX = Math.max(...this.objects.map(obj => obj.maxXRotated));
136
- this.minY = Math.min(...this.objects.map(obj => obj.minYRotated));
137
- this.maxY = Math.max(...this.objects.map(obj => obj.maxYRotated));
138
- this.translateX = this.minX - this.padding;
139
- this.translateY = this.minY - this.padding;
140
- this.width = (this.maxX - this.minX - this.padding) * this.scale;
141
- this.height = (this.maxY - this.minY - this.padding) * this.scale;
142
- }
143
- this._store.state.objectsOctree.update(this);
144
- }
145
- getOffsetXToCenter(obj) {
146
- const objCenterX = obj.translateX + obj.totalWidth / obj.scale / 2;
147
- const groupCenterX = this.translateX + this.totalWidth / this.scale / 2;
148
- return objCenterX - groupCenterX;
149
- }
150
- getOffsetYToCenter(obj) {
151
- const objCenterY = obj.translateY + obj.totalHeight / obj.scale / 2;
152
- const groupCenterY = this.translateY + this.totalHeight / this.scale / 2;
153
- return objCenterY - groupCenterY;
154
- }
155
- getUnchangedObject(objectId) {
156
- const obj = this.unchangedObjects.find(obj => obj.id === objectId);
157
- const reviver = new KritzelReviver(this._store);
158
- return reviver.revive(obj);
159
- }
160
- }
161
- //# sourceMappingURL=selection-group.class.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"selection-group.class.js","sourceRoot":"","sources":["../../../src/classes/objects/selection-group.class.ts"],"names":[],"mappings":"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","sourcesContent":["import { ObjectHelper } from '../../helpers/object.helper';\r\nimport { KritzelStore } from '../store.class';\r\nimport { KritzelReviver } from '../reviver.class';\r\nimport { KritzelBaseObject } from './base-object.class';\r\nexport class KritzelSelectionGroup extends KritzelBaseObject<HTMLElement> {\r\n override __class__: string = 'KritzelSelectionGroup';\r\n\r\n objects: KritzelBaseObject<any>[] = [];\r\n unchangedObjects: KritzelBaseObject<any>[] = [];\r\n\r\n minX: number;\r\n maxX: number;\r\n\r\n minY: number;\r\n maxY: number;\r\n\r\n get length(): number {\r\n return this.objects.length;\r\n }\r\n\r\n static override create(store: KritzelStore): KritzelSelectionGroup {\r\n const object = new KritzelSelectionGroup();\r\n\r\n object._store = store;\r\n object.id = object.generateId();\r\n object.scale = store.state.scale;\r\n object.zIndex = 99999;\r\n\r\n return object;\r\n }\r\n\r\n addOrRemove(object: KritzelBaseObject<any>) {\r\n \r\n const index = this.objects.findIndex(obj => obj.id === object.id);\r\n if (index === -1) {\r\n this.objects.push(object);\r\n } else {\r\n this.objects.splice(index, 1);\r\n }\r\n\r\n this.unchangedObjects = ObjectHelper.clone(this.objects);\r\n this.refreshObjectDimensions();\r\n }\r\n\r\n deselectAllChildren() {\r\n this.objects.forEach(obj => (obj.isSelected = false));\r\n }\r\n\r\n updatePosition(x: number, y: number) {\r\n this.objects.forEach(obj => {\r\n const deltaX = obj.translateX - this.translateX;\r\n const deltaY = obj.translateY - this.translateY;\r\n obj.translateX = x + deltaX;\r\n obj.translateY = y + deltaY;\r\n this._store.state.objectsOctree.update(obj);\r\n });\r\n\r\n this.unchangedObjects.forEach(obj => {\r\n const deltaX = obj.translateX - this.translateX;\r\n const deltaY = obj.translateY - this.translateY;\r\n obj.translateX = x + deltaX;\r\n obj.translateY = y + deltaY;\r\n });\r\n\r\n this.translateX = x;\r\n this.translateY = y;\r\n\r\n this._store.state.objectsOctree.update(this);\r\n }\r\n\r\n override move(startX: number, startY: number, endX: number, endY: number): void {\r\n const deltaX = (startX - endX) / this._store.state.scale;\r\n const deltaY = (startY - endY) / this._store.state.scale;\r\n\r\n this.translateX += deltaX;\r\n this.translateY += deltaY;\r\n this._store.state.objectsOctree.update(this);\r\n\r\n this.objects.forEach(obj => {\r\n obj.translateX += deltaX;\r\n obj.translateY += deltaY;\r\n obj.move(startX, startY, endX, endY);\r\n this._store.state.objectsOctree.update(obj);\r\n });\r\n\r\n this.unchangedObjects.forEach(obj => {\r\n obj.translateX += deltaX;\r\n obj.translateY += deltaY;\r\n });\r\n }\r\n\r\n override resize(x: number, y: number, width: number, height: number): void {\r\n const widthScaleFactor = width / this.width;\r\n const heightScaleFactor = height / this.height;\r\n\r\n const deltaX = x - this.translateX;\r\n const deltaY = y - this.translateY;\r\n\r\n this.objects.forEach(child => {\r\n const updatedWidth = child.width * widthScaleFactor;\r\n const updatedHeight = child.height * heightScaleFactor;\r\n\r\n const updatedX = child.translateX + deltaX + (child.translateX - this.translateX) * (widthScaleFactor - 1);\r\n const updatedY = child.translateY + deltaY + (child.translateY - this.translateY) * (heightScaleFactor - 1);\r\n\r\n child.resize(updatedX, updatedY, updatedWidth, updatedHeight);\r\n\r\n this._store.state.objectsOctree.update(child);\r\n });\r\n\r\n this.refreshObjectDimensions();\r\n this.unchangedObjects = ObjectHelper.clone(this.objects);\r\n }\r\n\r\n override rotate(value: number): void {\r\n this.rotation = value;\r\n\r\n const centerX = this.translateX + this.totalWidth / 2 / this.scale;\r\n const centerY = this.translateY + this.totalHeight / 2 / this.scale;\r\n\r\n const angle = value;\r\n const cos = Math.cos(angle);\r\n const sin = Math.sin(angle);\r\n\r\n this.objects.forEach(child => {\r\n const unchangedChild = this.getUnchangedObject(child.id);\r\n\r\n const offsetX = this.getOffsetXToCenter(unchangedChild);\r\n const offsetY = this.getOffsetYToCenter(unchangedChild);\r\n\r\n const rotatedX = cos * offsetX - sin * offsetY;\r\n const rotatedY = sin * offsetX + cos * offsetY;\r\n\r\n child.translateX = centerX + rotatedX - child.totalWidth / 2 / child.scale;\r\n child.translateY = centerY + rotatedY - child.totalHeight / 2 / child.scale;\r\n\r\n child.rotate(this.objects.length === 1 ? value : value + unchangedChild.rotation);\r\n this._store.state.objectsOctree.update(child);\r\n });\r\n }\r\n\r\n override copy(): KritzelBaseObject<HTMLElement> {\r\n const selectionGroup = KritzelSelectionGroup.create(this._store);\r\n\r\n let currentZIndex = this._store.currentZIndex;\r\n\r\n this.objects.forEach(obj => {\r\n const copiedObject = obj.copy() as KritzelBaseObject<any>;\r\n copiedObject.zIndex = currentZIndex;\r\n selectionGroup.addOrRemove(copiedObject);\r\n currentZIndex++;\r\n });\r\n\r\n selectionGroup.unchangedObjects = ObjectHelper.clone(selectionGroup.objects);\r\n\r\n if (this.objects.length === 1) {\r\n selectionGroup.rotation = this.objects[0].rotation;\r\n }\r\n\r\n return selectionGroup;\r\n }\r\n\r\n refreshObjectDimensions() {\r\n if (this.objects.length === 1) {\r\n const obj = this.objects[0];\r\n this.minX = obj.boundingBox.x / this.scale;\r\n this.maxX = obj.boundingBox.x / this.scale + obj.boundingBox.width;\r\n this.minY = obj.boundingBox.y / this.scale;\r\n this.maxY = obj.boundingBox.y / this.scale + obj.boundingBox.height;\r\n\r\n this.translateX = (this.minX - this.padding) * this.scale;\r\n this.translateY = (this.minY - this.padding) * this.scale;\r\n\r\n this.width = (this.maxX - this.minX - this.padding) * this.scale;\r\n this.height = (this.maxY - this.minY - this.padding) * this.scale;\r\n } else {\r\n this.minX = Math.min(...this.objects.map(obj => obj.minXRotated));\r\n this.maxX = Math.max(...this.objects.map(obj => obj.maxXRotated));\r\n\r\n this.minY = Math.min(...this.objects.map(obj => obj.minYRotated));\r\n this.maxY = Math.max(...this.objects.map(obj => obj.maxYRotated));\r\n\r\n this.translateX = this.minX - this.padding;\r\n this.translateY = this.minY - this.padding;\r\n\r\n this.width = (this.maxX - this.minX - this.padding) * this.scale;\r\n this.height = (this.maxY - this.minY - this.padding) * this.scale;\r\n }\r\n\r\n this._store.state.objectsOctree.update(this);\r\n }\r\n\r\n private getOffsetXToCenter(obj: KritzelBaseObject<any>): number {\r\n const objCenterX = obj.translateX + obj.totalWidth / obj.scale / 2;\r\n const groupCenterX = this.translateX + this.totalWidth / this.scale / 2;\r\n return objCenterX - groupCenterX;\r\n }\r\n\r\n private getOffsetYToCenter(obj: KritzelBaseObject<any>): number {\r\n const objCenterY = obj.translateY + obj.totalHeight / obj.scale / 2;\r\n const groupCenterY = this.translateY + this.totalHeight / this.scale / 2;\r\n return objCenterY - groupCenterY;\r\n }\r\n\r\n private getUnchangedObject(objectId: string): KritzelBaseObject<any> {\r\n const obj = this.unchangedObjects.find(obj => obj.id === objectId);\r\n const reviver = new KritzelReviver(this._store);\r\n return reviver.revive(obj);\r\n }\r\n}\r\n"]}