kritzel-stencil 0.0.160 → 0.0.162

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 (220) hide show
  1. package/dist/cjs/{default-text-tool.config-D10FksvZ.js → default-line-tool.config-D1Ns0NmM.js} +3156 -929
  2. package/dist/cjs/default-line-tool.config-D1Ns0NmM.js.map +1 -0
  3. package/dist/cjs/index.cjs.js +131 -126
  4. package/dist/cjs/index.cjs.js.map +1 -1
  5. package/dist/cjs/kritzel-brush-style.cjs.entry.js +1 -1
  6. package/dist/cjs/kritzel-brush-style.entry.cjs.js.map +1 -1
  7. package/dist/cjs/kritzel-color_22.cjs.entry.js +538 -198
  8. package/dist/cjs/loader.cjs.js +1 -1
  9. package/dist/cjs/stencil.cjs.js +1 -1
  10. package/dist/collection/classes/core/core.class.js +140 -3
  11. package/dist/collection/classes/core/core.class.js.map +1 -1
  12. package/dist/collection/classes/core/reviver.class.js +8 -0
  13. package/dist/collection/classes/core/reviver.class.js.map +1 -1
  14. package/dist/collection/classes/core/store.class.js +8 -0
  15. package/dist/collection/classes/core/store.class.js.map +1 -1
  16. package/dist/collection/classes/handlers/line-handle.handler.js +383 -0
  17. package/dist/collection/classes/handlers/line-handle.handler.js.map +1 -0
  18. package/dist/collection/classes/handlers/move.handler.js +2 -2
  19. package/dist/collection/classes/handlers/move.handler.js.map +1 -1
  20. package/dist/collection/classes/handlers/resize.handler.js +42 -34
  21. package/dist/collection/classes/handlers/resize.handler.js.map +1 -1
  22. package/dist/collection/classes/handlers/rotation.handler.js +12 -8
  23. package/dist/collection/classes/handlers/rotation.handler.js.map +1 -1
  24. package/dist/collection/classes/managers/anchor.manager.js +874 -0
  25. package/dist/collection/classes/managers/anchor.manager.js.map +1 -0
  26. package/dist/collection/classes/managers/cursor.manager.js +117 -0
  27. package/dist/collection/classes/managers/cursor.manager.js.map +1 -0
  28. package/dist/collection/classes/objects/base-object.class.js +4 -2
  29. package/dist/collection/classes/objects/base-object.class.js.map +1 -1
  30. package/dist/collection/classes/objects/line.class.js +564 -0
  31. package/dist/collection/classes/objects/line.class.js.map +1 -0
  32. package/dist/collection/classes/objects/selection-group.class.js +4 -0
  33. package/dist/collection/classes/objects/selection-group.class.js.map +1 -1
  34. package/dist/collection/classes/registries/icon-registry.class.js +7 -1
  35. package/dist/collection/classes/registries/icon-registry.class.js.map +1 -1
  36. package/dist/collection/classes/tools/line-tool.class.js +172 -0
  37. package/dist/collection/classes/tools/line-tool.class.js.map +1 -0
  38. package/dist/collection/classes/tools/selection-tool.class.js +41 -8
  39. package/dist/collection/classes/tools/selection-tool.class.js.map +1 -1
  40. package/dist/collection/components/core/kritzel-cursor-trail/kritzel-cursor-trail.js +1 -1
  41. package/dist/collection/components/core/kritzel-editor/kritzel-editor.js +11 -2
  42. package/dist/collection/components/core/kritzel-editor/kritzel-editor.js.map +1 -1
  43. package/dist/collection/components/core/kritzel-engine/kritzel-engine.css +0 -14
  44. package/dist/collection/components/core/kritzel-engine/kritzel-engine.js +163 -21
  45. package/dist/collection/components/core/kritzel-engine/kritzel-engine.js.map +1 -1
  46. package/dist/collection/components/shared/kritzel-brush-style/kritzel-brush-style.css +0 -1
  47. package/dist/collection/components/shared/kritzel-color/kritzel-color.js +2 -2
  48. package/dist/collection/components/shared/kritzel-color-palette/kritzel-color-palette.css +1 -1
  49. package/dist/collection/components/shared/kritzel-color-palette/kritzel-color-palette.js +1 -1
  50. package/dist/collection/components/shared/kritzel-dropdown/kritzel-dropdown.css +1 -1
  51. package/dist/collection/components/shared/kritzel-font/kritzel-font.js +1 -1
  52. package/dist/collection/components/shared/kritzel-font-family/kritzel-font-family.css +1 -1
  53. package/dist/collection/components/shared/kritzel-font-family/kritzel-font-family.js +1 -1
  54. package/dist/collection/components/shared/kritzel-font-size/kritzel-font-size.css +1 -1
  55. package/dist/collection/components/shared/kritzel-font-size/kritzel-font-size.js +1 -1
  56. package/dist/collection/components/shared/kritzel-menu/kritzel-menu.js +1 -1
  57. package/dist/collection/components/shared/kritzel-menu-item/kritzel-menu-item.css +1 -2
  58. package/dist/collection/components/shared/kritzel-menu-item/kritzel-menu-item.js +2 -2
  59. package/dist/collection/components/shared/kritzel-portal/kritzel-portal.js +1 -1
  60. package/dist/collection/components/shared/kritzel-split-button/kritzel-split-button.css +1 -1
  61. package/dist/collection/components/shared/kritzel-split-button/kritzel-split-button.js +1 -1
  62. package/dist/collection/components/shared/kritzel-stroke-size/kritzel-stroke-size.css +1 -1
  63. package/dist/collection/components/shared/kritzel-stroke-size/kritzel-stroke-size.js +1 -1
  64. package/dist/collection/components/shared/kritzel-tooltip/kritzel-tooltip.js +4 -4
  65. package/dist/collection/components/ui/kritzel-context-menu/kritzel-context-menu.css +1 -2
  66. package/dist/collection/components/ui/kritzel-context-menu/kritzel-context-menu.js +1 -1
  67. package/dist/collection/components/ui/kritzel-control-brush-config/kritzel-control-brush-config.css +1 -1
  68. package/dist/collection/components/ui/kritzel-control-brush-config/kritzel-control-brush-config.js +2 -2
  69. package/dist/collection/components/ui/kritzel-control-text-config/kritzel-control-text-config.css +1 -1
  70. package/dist/collection/components/ui/kritzel-control-text-config/kritzel-control-text-config.js +2 -2
  71. package/dist/collection/components/ui/kritzel-controls/kritzel-controls.css +4 -4
  72. package/dist/collection/components/ui/kritzel-controls/kritzel-controls.js +3 -3
  73. package/dist/collection/components/ui/kritzel-utility-panel/kritzel-utility-panel.css +1 -1
  74. package/dist/collection/components/ui/kritzel-utility-panel/kritzel-utility-panel.js +1 -1
  75. package/dist/collection/configs/default-engine-config.js +10 -0
  76. package/dist/collection/configs/default-engine-config.js.map +1 -1
  77. package/dist/collection/configs/default-line-tool.config.js +34 -0
  78. package/dist/collection/configs/default-line-tool.config.js.map +1 -0
  79. package/dist/collection/helpers/cursor.helper.js +58 -0
  80. package/dist/collection/helpers/cursor.helper.js.map +1 -0
  81. package/dist/collection/helpers/geometry.helper.js +42 -0
  82. package/dist/collection/helpers/geometry.helper.js.map +1 -1
  83. package/dist/collection/index.js +6 -0
  84. package/dist/collection/index.js.map +1 -1
  85. package/dist/collection/interfaces/anchor.interface.js +2 -0
  86. package/dist/collection/interfaces/anchor.interface.js.map +1 -0
  87. package/dist/collection/interfaces/arrow-head.interface.js +2 -0
  88. package/dist/collection/interfaces/arrow-head.interface.js.map +1 -0
  89. package/dist/collection/interfaces/engine-state.interface.js.map +1 -1
  90. package/dist/collection/interfaces/line-options.interface.js +2 -0
  91. package/dist/collection/interfaces/line-options.interface.js.map +1 -0
  92. package/dist/collection/interfaces/toolbar-control.interface.js.map +1 -1
  93. package/dist/components/index.js +4 -4
  94. package/dist/components/kritzel-brush-style.js +3 -3
  95. package/dist/components/kritzel-brush-style.js.map +1 -1
  96. package/dist/components/kritzel-color-palette.js +1 -1
  97. package/dist/components/kritzel-color.js +1 -1
  98. package/dist/components/kritzel-context-menu.js +1 -1
  99. package/dist/components/kritzel-control-brush-config.js +1 -1
  100. package/dist/components/kritzel-control-text-config.js +1 -1
  101. package/dist/components/kritzel-controls.js +1 -1
  102. package/dist/components/kritzel-cursor-trail.js +1 -1
  103. package/dist/components/kritzel-dropdown.js +1 -1
  104. package/dist/components/kritzel-editor.js +64 -23
  105. package/dist/components/kritzel-editor.js.map +1 -1
  106. package/dist/components/kritzel-engine.js +1 -1
  107. package/dist/components/kritzel-font-family.js +1 -1
  108. package/dist/components/kritzel-font-size.js +1 -1
  109. package/dist/components/kritzel-font.js +1 -1
  110. package/dist/components/kritzel-icon.js +1 -1
  111. package/dist/components/kritzel-menu-item.js +1 -1
  112. package/dist/components/kritzel-menu.js +1 -1
  113. package/dist/components/kritzel-portal.js +1 -1
  114. package/dist/components/kritzel-split-button.js +1 -1
  115. package/dist/components/kritzel-stroke-size.js +1 -1
  116. package/dist/components/kritzel-tooltip.js +1 -1
  117. package/dist/components/kritzel-utility-panel.js +1 -1
  118. package/dist/components/kritzel-workspace-manager.js +1 -1
  119. package/dist/components/{p-TdCTkEu0.js → p-7_lwv0zQ.js} +7 -7
  120. package/dist/components/p-7_lwv0zQ.js.map +1 -0
  121. package/dist/components/{p-CTP479Lf.js → p-9Fzdviju.js} +6 -6
  122. package/dist/components/{p-CTP479Lf.js.map → p-9Fzdviju.js.map} +1 -1
  123. package/dist/components/{p-DDmSxM5f.js → p-B6r22FSC.js} +5 -5
  124. package/dist/components/p-B6r22FSC.js.map +1 -0
  125. package/dist/components/{p-CLt3HMl6.js → p-B_3OZeom.js} +3 -3
  126. package/dist/components/{p-CLt3HMl6.js.map → p-B_3OZeom.js.map} +1 -1
  127. package/dist/components/{p-CIXPLjCu.js → p-BdwB-S9G.js} +3 -3
  128. package/dist/components/p-BdwB-S9G.js.map +1 -0
  129. package/dist/components/p-BixlbUD7.js +104 -0
  130. package/dist/components/p-BixlbUD7.js.map +1 -0
  131. package/dist/components/{p-D1uj4A4F.js → p-Brd9SxWS.js} +5 -5
  132. package/dist/components/p-Brd9SxWS.js.map +1 -0
  133. package/dist/components/{p-Ddh40W3x.js → p-CDteBYm9.js} +9 -9
  134. package/dist/components/p-CDteBYm9.js.map +1 -0
  135. package/dist/components/{p-BgznZoBH.js → p-CFH6XRL5.js} +5 -5
  136. package/dist/components/p-CFH6XRL5.js.map +1 -0
  137. package/dist/components/{p-B4kxkVe-.js → p-CRGwaUcp.js} +5 -5
  138. package/dist/components/p-CRGwaUcp.js.map +1 -0
  139. package/dist/components/{p-uuRJU2R1.js → p-Ck4lGnmt.js} +3 -3
  140. package/dist/components/{p-uuRJU2R1.js.map → p-Ck4lGnmt.js.map} +1 -1
  141. package/dist/components/{p-CK6no3mi.js → p-CkD1PQQX.js} +6 -6
  142. package/dist/components/{p-CK6no3mi.js.map → p-CkD1PQQX.js.map} +1 -1
  143. package/dist/components/{p-BQg4YML7.js → p-Cqr0Bah5.js} +12 -12
  144. package/dist/components/p-Cqr0Bah5.js.map +1 -0
  145. package/dist/components/{p-DTHqEUDc.js → p-CuhOrcET.js} +2861 -390
  146. package/dist/components/p-CuhOrcET.js.map +1 -0
  147. package/dist/components/{p-DAfkuR8U.js → p-CvLFRlQU.js} +5 -5
  148. package/dist/components/p-CvLFRlQU.js.map +1 -0
  149. package/dist/components/{p-1lIHoOlH.js → p-DKwJJuFb.js} +19 -19
  150. package/dist/components/p-DKwJJuFb.js.map +1 -0
  151. package/dist/components/{p-CsA9M6me.js → p-DZ7kxJUx.js} +8 -8
  152. package/dist/components/p-DZ7kxJUx.js.map +1 -0
  153. package/dist/components/{p-D4yvhd1d.js → p-LAsVgL2e.js} +4 -4
  154. package/dist/components/{p-D4yvhd1d.js.map → p-LAsVgL2e.js.map} +1 -1
  155. package/dist/components/{p-D5Wq4x4r.js → p-OFrACpZf.js} +3 -3
  156. package/dist/components/{p-D5Wq4x4r.js.map → p-OFrACpZf.js.map} +1 -1
  157. package/dist/components/{p-C2sWlNsJ.js → p-dMCB4tJA.js} +5 -5
  158. package/dist/components/p-dMCB4tJA.js.map +1 -0
  159. package/dist/components/{p-CBYBurdY.js → p-sokRZ7Vn.js} +49 -5
  160. package/dist/components/p-sokRZ7Vn.js.map +1 -0
  161. package/dist/esm/{default-text-tool.config-DzqpOikl.js → default-line-tool.config-C35m-d1Y.js} +3150 -930
  162. package/dist/esm/default-line-tool.config-C35m-d1Y.js.map +1 -0
  163. package/dist/esm/index.js +2 -2
  164. package/dist/esm/kritzel-brush-style.entry.js +1 -1
  165. package/dist/esm/kritzel-brush-style.entry.js.map +1 -1
  166. package/dist/esm/kritzel-color_22.entry.js +457 -117
  167. package/dist/esm/loader.js +1 -1
  168. package/dist/esm/stencil.js +1 -1
  169. package/dist/stencil/index.esm.js +1 -1
  170. package/dist/stencil/kritzel-brush-style.entry.esm.js.map +1 -1
  171. package/dist/stencil/p-385bab97.entry.js +2 -0
  172. package/dist/stencil/{p-d702c5af.entry.js.map → p-385bab97.entry.js.map} +1 -1
  173. package/dist/stencil/p-C35m-d1Y.js +2 -0
  174. package/dist/stencil/p-C35m-d1Y.js.map +1 -0
  175. package/dist/stencil/p-d142ef46.entry.js +10 -0
  176. package/dist/stencil/p-d142ef46.entry.js.map +1 -0
  177. package/dist/stencil/stencil.esm.js +1 -1
  178. package/dist/types/classes/core/core.class.d.ts +18 -0
  179. package/dist/types/classes/core/store.class.d.ts +3 -0
  180. package/dist/types/classes/handlers/line-handle.handler.d.ts +34 -0
  181. package/dist/types/classes/managers/anchor.manager.d.ts +160 -0
  182. package/dist/types/classes/managers/cursor.manager.d.ts +43 -0
  183. package/dist/types/classes/objects/line.class.d.ts +98 -0
  184. package/dist/types/classes/tools/line-tool.class.d.ts +17 -0
  185. package/dist/types/classes/tools/selection-tool.class.d.ts +4 -0
  186. package/dist/types/components/core/kritzel-engine/kritzel-engine.d.ts +4 -2
  187. package/dist/types/components.d.ts +7 -5
  188. package/dist/types/configs/default-line-tool.config.d.ts +2 -0
  189. package/dist/types/helpers/cursor.helper.d.ts +22 -0
  190. package/dist/types/helpers/geometry.helper.d.ts +10 -0
  191. package/dist/types/index.d.ts +6 -0
  192. package/dist/types/interfaces/anchor.interface.d.ts +137 -0
  193. package/dist/types/interfaces/arrow-head.interface.d.ts +26 -0
  194. package/dist/types/interfaces/engine-state.interface.d.ts +15 -0
  195. package/dist/types/interfaces/line-options.interface.d.ts +21 -0
  196. package/dist/types/interfaces/toolbar-control.interface.d.ts +17 -1
  197. package/package.json +1 -1
  198. package/dist/cjs/default-text-tool.config-D10FksvZ.js.map +0 -1
  199. package/dist/components/p-1lIHoOlH.js.map +0 -1
  200. package/dist/components/p-B4kxkVe-.js.map +0 -1
  201. package/dist/components/p-BQg4YML7.js.map +0 -1
  202. package/dist/components/p-BgznZoBH.js.map +0 -1
  203. package/dist/components/p-Bhtn9qay.js +0 -98
  204. package/dist/components/p-Bhtn9qay.js.map +0 -1
  205. package/dist/components/p-C2sWlNsJ.js.map +0 -1
  206. package/dist/components/p-CBYBurdY.js.map +0 -1
  207. package/dist/components/p-CIXPLjCu.js.map +0 -1
  208. package/dist/components/p-CsA9M6me.js.map +0 -1
  209. package/dist/components/p-D1uj4A4F.js.map +0 -1
  210. package/dist/components/p-DAfkuR8U.js.map +0 -1
  211. package/dist/components/p-DDmSxM5f.js.map +0 -1
  212. package/dist/components/p-DTHqEUDc.js.map +0 -1
  213. package/dist/components/p-Ddh40W3x.js.map +0 -1
  214. package/dist/components/p-TdCTkEu0.js.map +0 -1
  215. package/dist/esm/default-text-tool.config-DzqpOikl.js.map +0 -1
  216. package/dist/stencil/p-5475442e.entry.js +0 -10
  217. package/dist/stencil/p-5475442e.entry.js.map +0 -1
  218. package/dist/stencil/p-DzqpOikl.js +0 -2
  219. package/dist/stencil/p-DzqpOikl.js.map +0 -1
  220. package/dist/stencil/p-d702c5af.entry.js +0 -2
@@ -0,0 +1 @@
1
+ {"version":3,"file":"line.class.js","sourceRoot":"","sources":["../../../src/classes/objects/line.class.ts"],"names":[],"mappings":"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","sourcesContent":["import { KritzelLineOptions } from '../../interfaces/line-options.interface';\r\nimport { KritzelBaseObject } from './base-object.class';\r\nimport { KritzelPolygon } from '../../interfaces/polygon.interface';\r\nimport { KritzelGeometryHelper } from '../../helpers/geometry.helper';\r\nimport { KritzelPoint } from '../../interfaces/point.interface';\r\nimport { KritzelCore } from '../core/core.class';\r\nimport { LineAnchor } from '../../interfaces/anchor.interface';\r\nimport { ArrowHeadStyle, LineArrowConfig } from '../../interfaces/arrow-head.interface';\r\n\r\nexport class KritzelLine extends KritzelBaseObject<SVGElement> {\r\n override __class__: string = 'KritzelLine';\r\n\r\n startX: number;\r\n startY: number;\r\n endX: number;\r\n endY: number;\r\n controlX?: number;\r\n controlY?: number;\r\n stroke: string;\r\n strokeWidth: number;\r\n scale: number = 1;\r\n options: KritzelLineOptions | undefined;\r\n\r\n /** Anchor connection for the start point of the line */\r\n startAnchor?: LineAnchor;\r\n /** Anchor connection for the end point of the line */\r\n endAnchor?: LineAnchor;\r\n /** Arrow head configuration for start and end of line */\r\n arrows?: LineArrowConfig;\r\n\r\n isVisible: boolean = true;\r\n isDebugInfoVisible: boolean = true;\r\n isCompleted: boolean = false;\r\n\r\n private _adjustedPoints?: number[][] = null;\r\n\r\n get d(): string {\r\n if (this.controlX !== undefined && this.controlY !== undefined) {\r\n return `M ${this.startX} ${this.startY} Q ${this.controlX} ${this.controlY} ${this.endX} ${this.endY}`;\r\n }\r\n return `M ${this.startX} ${this.startY} L ${this.endX} ${this.endY}`;\r\n }\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?: KritzelLineOptions) {\r\n super();\r\n this.options = config;\r\n this.startX = config?.startX ?? 0;\r\n this.startY = config?.startY ?? 0;\r\n this.endX = config?.endX ?? 0;\r\n this.endY = config?.endY ?? 0;\r\n this.controlX = config?.controlX;\r\n this.controlY = config?.controlY;\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 ?? 4;\r\n this.stroke = config?.stroke ?? '#000000';\r\n this.startAnchor = config?.startAnchor;\r\n this.endAnchor = config?.endAnchor;\r\n this.arrows = config?.arrows;\r\n this.updateDimensions();\r\n }\r\n\r\n static override create(core: KritzelCore, options?: KritzelLineOptions): KritzelLine {\r\n const object = new KritzelLine();\r\n\r\n object._core = core;\r\n object.id = object.generateId();\r\n object.workspaceId = core.store.state.activeWorkspace.id;\r\n object.options = options;\r\n object.startX = options?.startX ?? 0;\r\n object.startY = options?.startY ?? 0;\r\n object.endX = options?.endX ?? 0;\r\n object.endY = options?.endY ?? 0;\r\n object.controlX = options?.controlX;\r\n object.controlY = options?.controlY;\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 ?? 4;\r\n object.stroke = options?.stroke ?? '#000000';\r\n object.startAnchor = options?.startAnchor;\r\n object.endAnchor = options?.endAnchor;\r\n object.arrows = options?.arrows;\r\n object.zIndex = core.store.currentZIndex;\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 // Scale the line endpoints\r\n this.startX = this.startX * scaleX;\r\n this.startY = this.startY * scaleY;\r\n this.endX = this.endX * scaleX;\r\n this.endY = this.endY * scaleY;\r\n\r\n if (this.controlX !== undefined && this.controlY !== undefined) {\r\n this.controlX = this.controlX * scaleX;\r\n this.controlY = this.controlY * scaleY;\r\n }\r\n\r\n // Recalculate dimensions from scaled endpoints\r\n const { minX, minY, maxX, maxY } = this.calculateBoundingBox();\r\n\r\n this.width = maxX - minX;\r\n this.height = maxY - minY;\r\n this.x = minX;\r\n this.y = minY;\r\n\r\n // Set the new position\r\n this.translateX = x;\r\n this.translateY = y;\r\n\r\n this._adjustedPoints = null;\r\n\r\n this._core.store.state.objects.update(this);\r\n\r\n // Update anchors after the line is updated\r\n this._core.anchorManager.updateAnchorsForObject(this.id);\r\n\r\n if (this.startAnchor) {\r\n this._core.anchorManager.updateAnchorsForObject(this.startAnchor.objectId);\r\n }\r\n if (this.endAnchor) {\r\n this._core.anchorManager.updateAnchorsForObject(this.endAnchor.objectId);\r\n }\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 this._core.store.state.objects.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._core.store.state.scale;\r\n const deltaY = (startY - endY) / this._core.store.state.scale;\r\n\r\n this.translateX += deltaX;\r\n this.translateY += deltaY;\r\n\r\n // If the line is anchored, we need to ensure the anchored endpoints stay at the target\r\n if (this.startAnchor) {\r\n this._core.anchorManager.updateAnchorsForObject(this.startAnchor.objectId);\r\n }\r\n if (this.endAnchor) {\r\n this._core.anchorManager.updateAnchorsForObject(this.endAnchor.objectId);\r\n }\r\n\r\n this._adjustedPoints = null;\r\n\r\n this._core.store.state.objects.update(this);\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 // For curved lines, use distance to the Bezier curve\r\n if (this.controlX !== undefined && this.controlY !== undefined) {\r\n const distance = this.pointToBezierDistance(x, y);\r\n return distance <= halfStroke + 2;\r\n }\r\n\r\n // For straight lines, use distance to line segment\r\n const p1 = this._adjustedPoints[0];\r\n const p2 = this._adjustedPoints[1];\r\n\r\n const distance = this.pointToLineSegmentDistance(x, y, p1[0], p1[1], p2[0], p2[1]);\r\n return distance <= halfStroke + 2; // Add a small tolerance for easier selection\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 // Check if any endpoint is inside the polygon\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 // Check if any polygon vertex is on the line/curve\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 curved lines, sample points along the curve and check if any are inside the polygon\r\n if (this.controlX !== undefined && this.controlY !== undefined) {\r\n const p0 = this._adjustedPoints[0];\r\n const p2 = this._adjustedPoints[1];\r\n const controlAdjusted = this.computeAdjustedControlPoint();\r\n\r\n const samples = 20;\r\n for (let i = 1; i < samples; i++) {\r\n const t = i / samples;\r\n const oneMinusT = 1 - t;\r\n\r\n const bx = oneMinusT * oneMinusT * p0[0] + 2 * oneMinusT * t * controlAdjusted[0] + t * t * p2[0];\r\n const by = oneMinusT * oneMinusT * p0[1] + 2 * oneMinusT * t * controlAdjusted[1] + t * t * p2[1];\r\n\r\n if (KritzelGeometryHelper.isPointInPolygon({ x: bx, y: by }, polyPoints)) {\r\n return true;\r\n }\r\n\r\n // Also check if curve point is within stroke distance of polygon edges\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 const d = this.pointToLineSegmentDistance(bx, by, q1.x, q1.y, q2.x, q2.y);\r\n if (d <= halfStroke) {\r\n return true;\r\n }\r\n }\r\n }\r\n\r\n return false;\r\n }\r\n\r\n // For straight lines, check if line intersects any polygon edge\r\n const p1 = { x: this._adjustedPoints[0][0], y: this._adjustedPoints[0][1] };\r\n const p2 = { x: this._adjustedPoints[1][0], y: this._adjustedPoints[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 // Check distance from polygon edges to line segment\r\n const d1 = this.pointToLineSegmentDistance(q1.x, q1.y, p1.x, p1.y, p2.x, p2.y);\r\n const d2 = this.pointToLineSegmentDistance(q2.x, q2.y, p1.x, p1.y, p2.x, p2.y);\r\n const d3 = this.pointToLineSegmentDistance(p1.x, p1.y, q1.x, q1.y, q2.x, q2.y);\r\n const d4 = this.pointToLineSegmentDistance(p2.x, p2.y, 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 return false;\r\n }\r\n\r\n override updatePosition(x: number, y: number): void {\r\n this.translateX = x;\r\n this.translateY = y;\r\n this._adjustedPoints = null;\r\n this._core.store.state.objects.update(this);\r\n }\r\n\r\n /**\r\n * Updates a specific endpoint of the line (start or end).\r\n * The coordinates are in viewBox-local space (relative to x, y origin).\r\n * This method recalculates the bounding box dimensions.\r\n *\r\n * @param handleType - Which endpoint to update: 'start' or 'end'\r\n * @param newX - New X coordinate in viewBox-local space\r\n * @param newY - New Y coordinate in viewBox-local space\r\n */\r\n updateEndpoint(handleType: 'start' | 'end', newX: number, newY: number): void {\r\n // Update the appropriate endpoint\r\n if (handleType === 'start') {\r\n this.startX = newX;\r\n this.startY = newY;\r\n } else {\r\n this.endX = newX;\r\n this.endY = newY;\r\n }\r\n\r\n const oldWidth = this.width;\r\n const oldHeight = this.height;\r\n\r\n // Recalculate the bounding box (viewBox dimensions)\r\n const { minX, minY, maxX, maxY } = this.calculateBoundingBox();\r\n\r\n // Calculate the change in origin (in local coordinates)\r\n const deltaX = minX - this.x;\r\n const deltaY = minY - this.y;\r\n\r\n const newWidth = maxX - minX;\r\n const newHeight = maxY - minY;\r\n\r\n const deltaWidth = newWidth - oldWidth;\r\n const deltaHeight = newHeight - oldHeight;\r\n\r\n const deltaCx = deltaWidth / 2;\r\n const deltaCy = deltaHeight / 2;\r\n\r\n // Update viewBox dimensions\r\n this.x = minX;\r\n this.y = minY;\r\n this.width = newWidth;\r\n this.height = newHeight;\r\n\r\n // Rotate the delta to world coordinates before applying to translate\r\n const cos = Math.cos(this.rotation);\r\n const sin = Math.sin(this.rotation);\r\n\r\n // We need to compensate for:\r\n // 1. The shift of the top-left corner (deltaX, deltaY)\r\n // 2. The shift of the center point (deltaCx, deltaCy) which affects rotation pivot\r\n // Formula: DeltaT = R(DeltaPos + DeltaCenter) - DeltaCenter\r\n\r\n const vx = deltaX + deltaCx;\r\n const vy = deltaY + deltaCy;\r\n\r\n const rotatedVx = vx * cos - vy * sin;\r\n const rotatedVy = vx * sin + vy * cos;\r\n\r\n const correctionX = rotatedVx - deltaCx;\r\n const correctionY = rotatedVy - deltaCy;\r\n\r\n // Adjust translateX/Y to compensate for the origin shift\r\n // so the line stays visually in the same position\r\n this.translateX += correctionX / this.scale;\r\n this.translateY += correctionY / this.scale;\r\n\r\n // Clear cached adjusted points\r\n this._adjustedPoints = null;\r\n\r\n this._core.store.state.objects.update(this);\r\n }\r\n\r\n updateControlPoint(newX: number | undefined, newY: number | undefined): void {\r\n this.controlX = newX;\r\n this.controlY = newY;\r\n\r\n const oldWidth = this.width;\r\n const oldHeight = this.height;\r\n\r\n // Recalculate the bounding box (viewBox dimensions)\r\n const { minX, minY, maxX, maxY } = this.calculateBoundingBox();\r\n\r\n // Calculate the change in origin (in local coordinates)\r\n const deltaX = minX - this.x;\r\n const deltaY = minY - this.y;\r\n\r\n const newWidth = maxX - minX;\r\n const newHeight = maxY - minY;\r\n\r\n const deltaWidth = newWidth - oldWidth;\r\n const deltaHeight = newHeight - oldHeight;\r\n\r\n const deltaCx = deltaWidth / 2;\r\n const deltaCy = deltaHeight / 2;\r\n\r\n // Update viewBox dimensions\r\n this.x = minX;\r\n this.y = minY;\r\n this.width = newWidth;\r\n this.height = newHeight;\r\n\r\n // Rotate the delta to world coordinates before applying to translate\r\n const cos = Math.cos(this.rotation);\r\n const sin = Math.sin(this.rotation);\r\n\r\n // We need to compensate for:\r\n // 1. The shift of the top-left corner (deltaX, deltaY)\r\n // 2. The shift of the center point (deltaCx, deltaCy) which affects rotation pivot\r\n // Formula: DeltaT = R(DeltaPos + DeltaCenter) - DeltaCenter\r\n\r\n const vx = deltaX + deltaCx;\r\n const vy = deltaY + deltaCy;\r\n\r\n const rotatedVx = vx * cos - vy * sin;\r\n const rotatedVy = vx * sin + vy * cos;\r\n\r\n const correctionX = rotatedVx - deltaCx;\r\n const correctionY = rotatedVy - deltaCy;\r\n\r\n // Adjust translateX/Y to compensate for the origin shift\r\n // so the line stays visually in the same position\r\n this.translateX += correctionX / this.scale;\r\n this.translateY += correctionY / this.scale;\r\n\r\n // Clear cached adjusted points\r\n this._adjustedPoints = null;\r\n\r\n this._core.store.state.objects.update(this);\r\n }\r\n\r\n private computeAdjustedPoints(): number[][] {\r\n const points = [\r\n [this.startX, this.startY],\r\n [this.endX, this.endY],\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 = points.map(p => p[0]);\r\n const ys = 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 = 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 return rotatedPoints.map(([px, py]) => [(px - this.x) / this.scale + this.translateX, (py - this.y) / this.scale + this.translateY]);\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 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 /**\r\n * Calculates the minimum distance from a point to a quadratic Bezier curve.\r\n * Uses sampling along the curve to find the closest point.\r\n */\r\n private pointToBezierDistance(x: number, y: number): number {\r\n if (this._adjustedPoints === null) {\r\n this._adjustedPoints = this.computeAdjustedPoints();\r\n }\r\n\r\n const p0 = this._adjustedPoints[0];\r\n const p2 = this._adjustedPoints[1];\r\n\r\n // Calculate the adjusted control point\r\n const controlAdjusted = this.computeAdjustedControlPoint();\r\n\r\n let minDistance = Infinity;\r\n const samples = 20; // Number of samples along the curve\r\n\r\n for (let i = 0; i <= samples; i++) {\r\n const t = i / samples;\r\n const oneMinusT = 1 - t;\r\n\r\n // Quadratic Bezier: B(t) = (1-t)²P₀ + 2(1-t)tP₁ + t²P₂\r\n const bx = oneMinusT * oneMinusT * p0[0] + 2 * oneMinusT * t * controlAdjusted[0] + t * t * p2[0];\r\n const by = oneMinusT * oneMinusT * p0[1] + 2 * oneMinusT * t * controlAdjusted[1] + t * t * p2[1];\r\n\r\n const dx = x - bx;\r\n const dy = y - by;\r\n const distance = Math.sqrt(dx * dx + dy * dy);\r\n\r\n if (distance < minDistance) {\r\n minDistance = distance;\r\n }\r\n }\r\n\r\n return minDistance;\r\n }\r\n\r\n /**\r\n * Computes the adjusted control point in world coordinates, accounting for rotation and translation.\r\n */\r\n private computeAdjustedControlPoint(): number[] {\r\n if (this.controlX === undefined || this.controlY === undefined) {\r\n // Return midpoint if no control point\r\n return [(this.startX + this.endX) / 2, (this.startY + this.endY) / 2];\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 // Calculate pivot (center of bounding box for endpoints)\r\n const xs = [this.startX, this.endX];\r\n const ys = [this.startY, this.endY];\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 // Rotate control point around pivot\r\n const dx = this.controlX - cx;\r\n const dy = this.controlY - cy;\r\n const rotatedX = cx + dx * cos - dy * sin;\r\n const rotatedY = cy + dx * sin + dy * cos;\r\n\r\n // Transform to world coordinates\r\n return [(rotatedX - this.x) / this.scale + this.translateX, (rotatedY - this.y) / this.scale + this.translateY];\r\n }\r\n\r\n override get rotatedPolygon(): KritzelPolygon {\r\n const padding = this.padding;\r\n\r\n // Use the bounding box which accounts for curve extrema\r\n const { minX, minY, maxX, maxY } = KritzelLine.calculateBoundingBox(\r\n this.startX,\r\n this.startY,\r\n this.endX,\r\n this.endY,\r\n this.controlX,\r\n this.controlY,\r\n this.strokeWidth,\r\n );\r\n\r\n // Convert to local coordinates (relative to this.x, this.y)\r\n const localMinX = minX - this.x + padding;\r\n const localMinY = minY - this.y + padding;\r\n const localMaxX = maxX - this.x + padding;\r\n const localMaxY = maxY - this.y + padding;\r\n\r\n const c1 = { x: localMinX, y: localMinY }; // top-left\r\n const c2 = { x: localMaxX, y: localMinY }; // top-right\r\n const c3 = { x: localMaxX, y: localMaxY }; // bottom-right\r\n const c4 = { x: localMinX, y: localMaxY }; // bottom-left\r\n\r\n const cx = this.totalWidth / 2;\r\n const cy = this.totalHeight / 2;\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 transform = (p: { x: number; y: number }) => {\r\n const rx = (p.x - cx) * cos - (p.y - cy) * sin + cx;\r\n const ry = (p.x - cx) * sin + (p.y - cy) * cos + cy;\r\n return {\r\n x: rx / this.scale + this.translateX,\r\n y: ry / this.scale + this.translateY,\r\n };\r\n };\r\n\r\n return {\r\n topLeft: transform(c1),\r\n topRight: transform(c2),\r\n bottomRight: transform(c3),\r\n bottomLeft: transform(c4),\r\n };\r\n }\r\n\r\n /**\r\n * Calculates the tight bounding box for a quadratic Bezier curve or straight line.\r\n * For curves, it finds the extrema points where the derivative equals zero.\r\n */\r\n static calculateBoundingBox(\r\n startX: number,\r\n startY: number,\r\n endX: number,\r\n endY: number,\r\n controlX: number | undefined,\r\n controlY: number | undefined,\r\n strokeWidth: number,\r\n ): { minX: number; minY: number; maxX: number; maxY: number } {\r\n let minX = Math.min(startX, endX);\r\n let minY = Math.min(startY, endY);\r\n let maxX = Math.max(startX, endX);\r\n let maxY = Math.max(startY, endY);\r\n\r\n if (controlX !== undefined && controlY !== undefined) {\r\n // For a quadratic Bezier: B(t) = (1-t)²P₀ + 2(1-t)tP₁ + t²P₂\r\n // Derivative: B'(t) = 2(1-t)(P₁-P₀) + 2t(P₂-P₁) = 0\r\n // Solving for t: t = (P₀ - P₁) / (P₀ - 2P₁ + P₂)\r\n\r\n // Find extrema for X\r\n const aX = startX - 2 * controlX + endX;\r\n if (aX !== 0) {\r\n const tX = (startX - controlX) / aX;\r\n if (tX > 0 && tX < 1) {\r\n const extremaX = (1 - tX) * (1 - tX) * startX + 2 * (1 - tX) * tX * controlX + tX * tX * endX;\r\n minX = Math.min(minX, extremaX);\r\n maxX = Math.max(maxX, extremaX);\r\n }\r\n }\r\n\r\n // Find extrema for Y\r\n const aY = startY - 2 * controlY + endY;\r\n if (aY !== 0) {\r\n const tY = (startY - controlY) / aY;\r\n if (tY > 0 && tY < 1) {\r\n const extremaY = (1 - tY) * (1 - tY) * startY + 2 * (1 - tY) * tY * controlY + tY * tY * endY;\r\n minY = Math.min(minY, extremaY);\r\n maxY = Math.max(maxY, extremaY);\r\n }\r\n }\r\n }\r\n\r\n const halfStroke = strokeWidth / 2;\r\n return {\r\n minX: minX - halfStroke,\r\n minY: minY - halfStroke,\r\n maxX: maxX + halfStroke,\r\n maxY: maxY + halfStroke,\r\n };\r\n }\r\n\r\n calculateBoundingBox(): { minX: number; minY: number; maxX: number; maxY: number } {\r\n return KritzelLine.calculateBoundingBox(\r\n this.startX,\r\n this.startY,\r\n this.endX,\r\n this.endY,\r\n this.controlX,\r\n this.controlY,\r\n this.strokeWidth,\r\n );\r\n }\r\n\r\n private updateDimensions(): void {\r\n const { minX, minY, maxX, maxY } = this.calculateBoundingBox();\r\n\r\n this.width = maxX - minX;\r\n this.height = maxY - minY;\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 /** Get unique marker ID for SVG defs at the start of the line */\r\n get startMarkerId(): string {\r\n return `arrow-start-${this.id}`;\r\n }\r\n\r\n /** Get unique marker ID for SVG defs at the end of the line */\r\n get endMarkerId(): string {\r\n return `arrow-end-${this.id}`;\r\n }\r\n\r\n /** Get the arrow size for start or end, defaulting to strokeWidth * 3 */\r\n getArrowSize(end: 'start' | 'end'): number {\r\n const config = end === 'start' ? this.arrows?.start : this.arrows?.end;\r\n return config?.size ?? this.strokeWidth * 3;\r\n }\r\n\r\n /** Get the arrow fill color for start or end, defaulting to stroke color */\r\n getArrowFill(end: 'start' | 'end'): string {\r\n const config = end === 'start' ? this.arrows?.start : this.arrows?.end;\r\n return config?.fill ?? this.stroke;\r\n }\r\n\r\n /**\r\n * Generate SVG path data for an arrow head based on the given style.\r\n * The path is designed to fit in a 10x10 viewBox with the tip at (10, 5).\r\n * @param style The arrow head style\r\n * @returns SVG path data string\r\n */\r\n getArrowPath(style: ArrowHeadStyle = 'triangle'): string {\r\n switch (style) {\r\n case 'triangle':\r\n return 'M 0 0 L 10 5 L 0 10 z';\r\n case 'open':\r\n return 'M 0 0 L 10 5 L 0 10';\r\n case 'diamond':\r\n return 'M 0 5 L 5 0 L 10 5 L 5 10 z';\r\n case 'circle':\r\n return 'M 5,0 A 5,5 0 1,1 5,10 A 5,5 0 1,1 5,0';\r\n default:\r\n return 'M 0 0 L 10 5 L 0 10 z';\r\n }\r\n }\r\n\r\n /** Check if start arrow is enabled */\r\n get hasStartArrow(): boolean {\r\n return this.arrows?.start?.enabled === true;\r\n }\r\n\r\n /** Check if end arrow is enabled */\r\n get hasEndArrow(): boolean {\r\n return this.arrows?.end?.enabled === true;\r\n }\r\n}\r\n"]}
@@ -125,6 +125,8 @@ export class KritzelSelectionGroup extends KritzelBaseObject {
125
125
  this._core.store.state.objects.update(this);
126
126
  this.objects.forEach(obj => {
127
127
  obj.move(startX, startY, endX, endY);
128
+ // Update any lines that are anchored to this object
129
+ this._core.anchorManager.updateAnchorsForObject(obj.id);
128
130
  });
129
131
  });
130
132
  // Update snapshots
@@ -187,6 +189,8 @@ export class KritzelSelectionGroup extends KritzelBaseObject {
187
189
  const updatedX = newChildCenterX - updatedTotalWidth / 2 / child.scale;
188
190
  const updatedY = newChildCenterY - updatedTotalHeight / 2 / child.scale;
189
191
  child.resize(updatedX, updatedY, updatedWidth, updatedHeight);
192
+ // Update any lines that are anchored to this child object
193
+ this._core.anchorManager.updateAnchorsForObject(child.id);
190
194
  });
191
195
  // Refresh dimensions and update the SelectionGroup to propagate changes to other tabs
192
196
  this.refreshObjectDimensions();
@@ -1 +1 @@
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 { KritzelCore } from '../core/core.class';\r\nimport { KritzelBaseObject } from './base-object.class';\r\n\r\ninterface UnchangedObjectSnapshot {\r\n id: string;\r\n translateX: number;\r\n translateY: number;\r\n rotation: number;\r\n width: number;\r\n height: number;\r\n totalWidth: number;\r\n totalHeight: number;\r\n scale: number;\r\n}\r\n\r\nexport class KritzelSelectionGroup extends KritzelBaseObject<HTMLElement> {\r\n override __class__: string = 'KritzelSelectionGroup';\r\n\r\n // Store only object IDs instead of full objects\r\n objectIds: string[] = [];\r\n \r\n // Store snapshots of object state for transformations (rotation, resize)\r\n unchangedObjectSnapshots: Map<string, UnchangedObjectSnapshot> = new Map();\r\n snapshotRotation: number = 0;\r\n\r\n minX: number;\r\n maxX: number;\r\n\r\n minY: number;\r\n maxY: number;\r\n\r\n // Getter to retrieve actual objects from the store by their IDs\r\n get objects(): KritzelBaseObject<any>[] {\r\n return this.objectIds\r\n .map(id => {\r\n const found = this._core.store.state.objects.filter(obj => obj.id === id);\r\n return found.length > 0 ? found[0] : null;\r\n })\r\n .filter(obj => obj !== null) as KritzelBaseObject<any>[];\r\n }\r\n\r\n get length(): number {\r\n return this.objectIds.length;\r\n }\r\n\r\n static override create(core: KritzelCore): KritzelSelectionGroup {\r\n const object = new KritzelSelectionGroup();\r\n\r\n object._core = core;\r\n object.id = object.generateId();\r\n object.workspaceId = core.store.state.activeWorkspace.id;\r\n object.scale = core.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 const index = this.objectIds.findIndex(id => id === object.id);\r\n if (index === -1) {\r\n this.objectIds.push(object.id);\r\n } else {\r\n this.objectIds.splice(index, 1);\r\n }\r\n\r\n this.captureUnchangedSnapshots();\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 updateWorkspaceId(workspaceId: string) {\r\n this.workspaceId = workspaceId;\r\n this.objects.forEach(obj => (obj.workspaceId = workspaceId));\r\n }\r\n\r\n updateZIndices(startZIndex: number) {\r\n this.objects.forEach((obj, i) => {\r\n obj.zIndex = startZIndex + i;\r\n });\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.updatePosition(x + deltaX, y + deltaY);\r\n });\r\n\r\n // Update snapshots\r\n this.unchangedObjectSnapshots.forEach(snapshot => {\r\n const deltaX = snapshot.translateX - this.translateX;\r\n const deltaY = snapshot.translateY - this.translateY;\r\n snapshot.translateX = x + deltaX;\r\n snapshot.translateY = x + deltaY;\r\n });\r\n\r\n this.translateX = x;\r\n this.translateY = y;\r\n\r\n this._core.store.state.objects.update(this);\r\n }\r\n\r\n /**\r\n * Capture snapshots of current object states for undo/redo operations\r\n */\r\n private captureUnchangedSnapshots(): void {\r\n this.unchangedObjectSnapshots.clear();\r\n this.snapshotRotation = this.rotation;\r\n this.objects.forEach(obj => {\r\n this.unchangedObjectSnapshots.set(obj.id, {\r\n id: obj.id,\r\n translateX: obj.translateX,\r\n translateY: obj.translateY,\r\n rotation: obj.rotation,\r\n width: obj.width,\r\n height: obj.height,\r\n totalWidth: obj.totalWidth,\r\n totalHeight: obj.totalHeight,\r\n scale: obj.scale,\r\n });\r\n });\r\n }\r\n\r\n override serialize() {\r\n const { _core, _elementRef, element, totalWidth, totalHeight, unchangedObjectSnapshots, ...remainingProps } = this as any;\r\n\r\n const clonedProps = structuredClone(remainingProps);\r\n\r\n if (element && typeof element === 'object' && 'nodeType' in element && element.nodeType === 1) {\r\n clonedProps.element = element.cloneNode(true) as HTMLElement;\r\n }\r\n\r\n // Convert Map to plain object for serialization\r\n clonedProps.unchangedObjectSnapshots = Object.fromEntries(this.unchangedObjectSnapshots);\r\n\r\n return clonedProps;\r\n }\r\n\r\n override deserialize<T>(object: any): T {\r\n // First, deserialize all base properties using parent's deserialize\r\n super.deserialize(object);\r\n\r\n // Restore the Map from serialized object\r\n if (object.unchangedObjectSnapshots) {\r\n this.unchangedObjectSnapshots = new Map(Object.entries(object.unchangedObjectSnapshots));\r\n }\r\n\r\n return this as unknown as T;\r\n }\r\n\r\n override update(): void {\r\n // Only update the selection group itself\r\n // Child objects are already updated during move/resize/rotate operations\r\n // Updating them again here would create redundant y.js updates\r\n this._core.store.state.objects.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._core.store.state.scale;\r\n const deltaY = (startY - endY) / this._core.store.state.scale;\r\n\r\n this.translateX += deltaX;\r\n this.translateY += deltaY;\r\n\r\n this._core.store.state.objects.transaction(() => {\r\n this._core.store.state.objects.update(this);\r\n\r\n this.objects.forEach(obj => {\r\n obj.move(startX, startY, endX, endY);\r\n });\r\n });\r\n\r\n // Update snapshots\r\n this.unchangedObjectSnapshots.forEach(snapshot => {\r\n snapshot.translateX += deltaX;\r\n snapshot.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 // Calculate old center\r\n const oldCenterX = this.translateX + this.totalWidth / 2 / this.scale;\r\n const oldCenterY = this.translateY + this.totalHeight / 2 / this.scale;\r\n\r\n // Calculate new center\r\n const newTotalWidth = width + this.padding * 2;\r\n const newTotalHeight = height + this.padding * 2;\r\n const newCenterX = x + newTotalWidth / 2 / this.scale;\r\n const newCenterY = y + newTotalHeight / 2 / this.scale;\r\n\r\n const rotation = this.rotation;\r\n const cos = Math.cos(-rotation);\r\n const sin = Math.sin(-rotation);\r\n const cosR = Math.cos(rotation);\r\n const sinR = Math.sin(rotation);\r\n\r\n this._core.store.state.objects.transaction(() => {\r\n this.objects.forEach(child => {\r\n // Calculate child center\r\n const childCenterX = child.translateX + child.totalWidth / 2 / child.scale;\r\n const childCenterY = child.translateY + child.totalHeight / 2 / child.scale;\r\n\r\n // Vector from old group center to child center\r\n const dx = childCenterX - oldCenterX;\r\n const dy = childCenterY - oldCenterY;\r\n\r\n // Rotate to local space (align with group axes)\r\n const localX = dx * cos - dy * sin;\r\n const localY = dx * sin + dy * cos;\r\n\r\n // Scale in local space\r\n const scaledLocalX = localX * widthScaleFactor;\r\n const scaledLocalY = localY * heightScaleFactor;\r\n\r\n // Rotate back to world space\r\n const rotatedX = scaledLocalX * cosR - scaledLocalY * sinR;\r\n const rotatedY = scaledLocalX * sinR + scaledLocalY * cosR;\r\n\r\n // New child center\r\n const newChildCenterX = newCenterX + rotatedX;\r\n const newChildCenterY = newCenterY + rotatedY;\r\n\r\n // New child top-left\r\n // Calculate relative rotation\r\n const relativeRotation = child.rotation - rotation;\r\n const cosRel = Math.cos(relativeRotation);\r\n const sinRel = Math.sin(relativeRotation);\r\n\r\n // Project the group's scale factors onto the child's local axes\r\n // We use absolute values because scaling is magnitude-based\r\n // If the child is aligned (0 deg), cos=1, sin=0 -> scales match\r\n // If the child is 90 deg, cos=0, sin=1 -> scales swap\r\n const newChildWidthScale = Math.sqrt(\r\n Math.pow(widthScaleFactor * cosRel, 2) + Math.pow(heightScaleFactor * sinRel, 2)\r\n );\r\n const newChildHeightScale = Math.sqrt(\r\n Math.pow(widthScaleFactor * sinRel, 2) + Math.pow(heightScaleFactor * cosRel, 2)\r\n );\r\n\r\n const updatedWidth = child.width * newChildWidthScale;\r\n const updatedHeight = child.height * newChildHeightScale;\r\n const updatedTotalWidth = updatedWidth + child.padding * 2;\r\n const updatedTotalHeight = updatedHeight + child.padding * 2;\r\n\r\n const updatedX = newChildCenterX - updatedTotalWidth / 2 / child.scale;\r\n const updatedY = newChildCenterY - updatedTotalHeight / 2 / child.scale;\r\n\r\n child.resize(updatedX, updatedY, updatedWidth, updatedHeight);\r\n });\r\n\r\n // Refresh dimensions and update the SelectionGroup to propagate changes to other tabs\r\n this.refreshObjectDimensions();\r\n this.captureUnchangedSnapshots();\r\n this._core.store.state.objects.update(this);\r\n });\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 - this.snapshotRotation;\r\n const cos = Math.cos(angle);\r\n const sin = Math.sin(angle);\r\n\r\n this._core.store.state.objects.transaction(() => {\r\n // Update the SelectionGroup itself to propagate rotation to other tabs\r\n this._core.store.state.objects.update(this);\r\n\r\n this.objects.forEach(child => {\r\n const unchangedSnapshot = this.unchangedObjectSnapshots.get(child.id);\r\n if (!unchangedSnapshot) return;\r\n\r\n const offsetX = this.getOffsetXToCenterFromSnapshot(unchangedSnapshot);\r\n const offsetY = this.getOffsetYToCenterFromSnapshot(unchangedSnapshot);\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 : unchangedSnapshot.rotation + angle);\r\n });\r\n });\r\n }\r\n\r\n override copy(): KritzelBaseObject<HTMLElement> {\r\n const selectionGroup = KritzelSelectionGroup.create(this._core);\r\n\r\n this.objects\r\n .sort((a, b) => a.zIndex - b.zIndex)\r\n .forEach(obj => {\r\n const copiedObject = obj.copy() as KritzelBaseObject<any>;\r\n selectionGroup.addOrRemove(copiedObject);\r\n });\r\n\r\n selectionGroup.captureUnchangedSnapshots();\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 const rotation = this.rotation;\r\n const cos = Math.cos(-rotation);\r\n const sin = Math.sin(-rotation);\r\n\r\n let minX = Infinity;\r\n let maxX = -Infinity;\r\n let minY = Infinity;\r\n let maxY = -Infinity;\r\n\r\n this.objects.forEach(obj => {\r\n const polygon = obj.rotatedPolygon;\r\n const corners = [polygon.topLeft, polygon.topRight, polygon.bottomRight, polygon.bottomLeft];\r\n\r\n corners.forEach(corner => {\r\n // Rotate corner into local space (aligned with group rotation)\r\n const rx = corner.x * cos - corner.y * sin;\r\n const ry = corner.x * sin + corner.y * cos;\r\n\r\n if (rx < minX) minX = rx;\r\n if (rx > maxX) maxX = rx;\r\n if (ry < minY) minY = ry;\r\n if (ry > maxY) maxY = ry;\r\n });\r\n });\r\n\r\n // Dimensions in world units (unrotated)\r\n const worldWidth = maxX - minX;\r\n const worldHeight = maxY - minY;\r\n\r\n this.width = (worldWidth - this.padding) * this.scale;\r\n this.height = (worldHeight - this.padding) * this.scale;\r\n\r\n // Center of the box in rotated space\r\n const cRx = (minX + maxX) / 2;\r\n const cRy = (minY + maxY) / 2;\r\n\r\n // Rotate center back to world space\r\n const cosR = Math.cos(rotation);\r\n const sinR = Math.sin(rotation);\r\n\r\n const cx = cRx * cosR - cRy * sinR;\r\n const cy = cRx * sinR + cRy * cosR;\r\n\r\n this.translateX = cx - (this.width / this.scale + 2 * this.padding) / 2;\r\n this.translateY = cy - (this.height / this.scale + 2 * this.padding) / 2;\r\n }\r\n\r\n this._core.store.state.objects.update(this);\r\n }\r\n\r\n private getOffsetXToCenterFromSnapshot(snapshot: UnchangedObjectSnapshot): number {\r\n const objCenterX = snapshot.translateX + snapshot.totalWidth / snapshot.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 getOffsetYToCenterFromSnapshot(snapshot: UnchangedObjectSnapshot): number {\r\n const objCenterY = snapshot.translateY + snapshot.totalHeight / snapshot.scale / 2;\r\n const groupCenterY = this.translateY + this.totalHeight / this.scale / 2;\r\n return objCenterY - groupCenterY;\r\n }\r\n}\r\n"]}
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 { KritzelCore } from '../core/core.class';\r\nimport { KritzelBaseObject } from './base-object.class';\r\n\r\ninterface UnchangedObjectSnapshot {\r\n id: string;\r\n translateX: number;\r\n translateY: number;\r\n rotation: number;\r\n width: number;\r\n height: number;\r\n totalWidth: number;\r\n totalHeight: number;\r\n scale: number;\r\n}\r\n\r\nexport class KritzelSelectionGroup extends KritzelBaseObject<HTMLElement> {\r\n override __class__: string = 'KritzelSelectionGroup';\r\n\r\n // Store only object IDs instead of full objects\r\n objectIds: string[] = [];\r\n \r\n // Store snapshots of object state for transformations (rotation, resize)\r\n unchangedObjectSnapshots: Map<string, UnchangedObjectSnapshot> = new Map();\r\n snapshotRotation: number = 0;\r\n\r\n minX: number;\r\n maxX: number;\r\n\r\n minY: number;\r\n maxY: number;\r\n\r\n // Getter to retrieve actual objects from the store by their IDs\r\n get objects(): KritzelBaseObject<any>[] {\r\n return this.objectIds\r\n .map(id => {\r\n const found = this._core.store.state.objects.filter(obj => obj.id === id);\r\n return found.length > 0 ? found[0] : null;\r\n })\r\n .filter(obj => obj !== null) as KritzelBaseObject<any>[];\r\n }\r\n\r\n get length(): number {\r\n return this.objectIds.length;\r\n }\r\n\r\n static override create(core: KritzelCore): KritzelSelectionGroup {\r\n const object = new KritzelSelectionGroup();\r\n\r\n object._core = core;\r\n object.id = object.generateId();\r\n object.workspaceId = core.store.state.activeWorkspace.id;\r\n object.scale = core.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 const index = this.objectIds.findIndex(id => id === object.id);\r\n if (index === -1) {\r\n this.objectIds.push(object.id);\r\n } else {\r\n this.objectIds.splice(index, 1);\r\n }\r\n\r\n this.captureUnchangedSnapshots();\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 updateWorkspaceId(workspaceId: string) {\r\n this.workspaceId = workspaceId;\r\n this.objects.forEach(obj => (obj.workspaceId = workspaceId));\r\n }\r\n\r\n updateZIndices(startZIndex: number) {\r\n this.objects.forEach((obj, i) => {\r\n obj.zIndex = startZIndex + i;\r\n });\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.updatePosition(x + deltaX, y + deltaY);\r\n });\r\n\r\n // Update snapshots\r\n this.unchangedObjectSnapshots.forEach(snapshot => {\r\n const deltaX = snapshot.translateX - this.translateX;\r\n const deltaY = snapshot.translateY - this.translateY;\r\n snapshot.translateX = x + deltaX;\r\n snapshot.translateY = x + deltaY;\r\n });\r\n\r\n this.translateX = x;\r\n this.translateY = y;\r\n\r\n this._core.store.state.objects.update(this);\r\n }\r\n\r\n /**\r\n * Capture snapshots of current object states for undo/redo operations\r\n */\r\n private captureUnchangedSnapshots(): void {\r\n this.unchangedObjectSnapshots.clear();\r\n this.snapshotRotation = this.rotation;\r\n this.objects.forEach(obj => {\r\n this.unchangedObjectSnapshots.set(obj.id, {\r\n id: obj.id,\r\n translateX: obj.translateX,\r\n translateY: obj.translateY,\r\n rotation: obj.rotation,\r\n width: obj.width,\r\n height: obj.height,\r\n totalWidth: obj.totalWidth,\r\n totalHeight: obj.totalHeight,\r\n scale: obj.scale,\r\n });\r\n });\r\n }\r\n\r\n override serialize() {\r\n const { _core, _elementRef, element, totalWidth, totalHeight, unchangedObjectSnapshots, ...remainingProps } = this as any;\r\n\r\n const clonedProps = structuredClone(remainingProps);\r\n\r\n if (element && typeof element === 'object' && 'nodeType' in element && element.nodeType === 1) {\r\n clonedProps.element = element.cloneNode(true) as HTMLElement;\r\n }\r\n\r\n // Convert Map to plain object for serialization\r\n clonedProps.unchangedObjectSnapshots = Object.fromEntries(this.unchangedObjectSnapshots);\r\n\r\n return clonedProps;\r\n }\r\n\r\n override deserialize<T>(object: any): T {\r\n // First, deserialize all base properties using parent's deserialize\r\n super.deserialize(object);\r\n\r\n // Restore the Map from serialized object\r\n if (object.unchangedObjectSnapshots) {\r\n this.unchangedObjectSnapshots = new Map(Object.entries(object.unchangedObjectSnapshots));\r\n }\r\n\r\n return this as unknown as T;\r\n }\r\n\r\n override update(): void {\r\n // Only update the selection group itself\r\n // Child objects are already updated during move/resize/rotate operations\r\n // Updating them again here would create redundant y.js updates\r\n this._core.store.state.objects.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._core.store.state.scale;\r\n const deltaY = (startY - endY) / this._core.store.state.scale;\r\n\r\n this.translateX += deltaX;\r\n this.translateY += deltaY;\r\n\r\n this._core.store.state.objects.transaction(() => {\r\n this._core.store.state.objects.update(this);\r\n\r\n this.objects.forEach(obj => {\r\n obj.move(startX, startY, endX, endY);\r\n\r\n // Update any lines that are anchored to this object\r\n this._core.anchorManager.updateAnchorsForObject(obj.id);\r\n });\r\n });\r\n\r\n // Update snapshots\r\n this.unchangedObjectSnapshots.forEach(snapshot => {\r\n snapshot.translateX += deltaX;\r\n snapshot.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 // Calculate old center\r\n const oldCenterX = this.translateX + this.totalWidth / 2 / this.scale;\r\n const oldCenterY = this.translateY + this.totalHeight / 2 / this.scale;\r\n\r\n // Calculate new center\r\n const newTotalWidth = width + this.padding * 2;\r\n const newTotalHeight = height + this.padding * 2;\r\n const newCenterX = x + newTotalWidth / 2 / this.scale;\r\n const newCenterY = y + newTotalHeight / 2 / this.scale;\r\n\r\n const rotation = this.rotation;\r\n const cos = Math.cos(-rotation);\r\n const sin = Math.sin(-rotation);\r\n const cosR = Math.cos(rotation);\r\n const sinR = Math.sin(rotation);\r\n\r\n this._core.store.state.objects.transaction(() => {\r\n this.objects.forEach(child => {\r\n // Calculate child center\r\n const childCenterX = child.translateX + child.totalWidth / 2 / child.scale;\r\n const childCenterY = child.translateY + child.totalHeight / 2 / child.scale;\r\n\r\n // Vector from old group center to child center\r\n const dx = childCenterX - oldCenterX;\r\n const dy = childCenterY - oldCenterY;\r\n\r\n // Rotate to local space (align with group axes)\r\n const localX = dx * cos - dy * sin;\r\n const localY = dx * sin + dy * cos;\r\n\r\n // Scale in local space\r\n const scaledLocalX = localX * widthScaleFactor;\r\n const scaledLocalY = localY * heightScaleFactor;\r\n\r\n // Rotate back to world space\r\n const rotatedX = scaledLocalX * cosR - scaledLocalY * sinR;\r\n const rotatedY = scaledLocalX * sinR + scaledLocalY * cosR;\r\n\r\n // New child center\r\n const newChildCenterX = newCenterX + rotatedX;\r\n const newChildCenterY = newCenterY + rotatedY;\r\n\r\n // New child top-left\r\n // Calculate relative rotation\r\n const relativeRotation = child.rotation - rotation;\r\n const cosRel = Math.cos(relativeRotation);\r\n const sinRel = Math.sin(relativeRotation);\r\n\r\n // Project the group's scale factors onto the child's local axes\r\n // We use absolute values because scaling is magnitude-based\r\n // If the child is aligned (0 deg), cos=1, sin=0 -> scales match\r\n // If the child is 90 deg, cos=0, sin=1 -> scales swap\r\n const newChildWidthScale = Math.sqrt(\r\n Math.pow(widthScaleFactor * cosRel, 2) + Math.pow(heightScaleFactor * sinRel, 2)\r\n );\r\n const newChildHeightScale = Math.sqrt(\r\n Math.pow(widthScaleFactor * sinRel, 2) + Math.pow(heightScaleFactor * cosRel, 2)\r\n );\r\n\r\n const updatedWidth = child.width * newChildWidthScale;\r\n const updatedHeight = child.height * newChildHeightScale;\r\n const updatedTotalWidth = updatedWidth + child.padding * 2;\r\n const updatedTotalHeight = updatedHeight + child.padding * 2;\r\n\r\n const updatedX = newChildCenterX - updatedTotalWidth / 2 / child.scale;\r\n const updatedY = newChildCenterY - updatedTotalHeight / 2 / child.scale;\r\n\r\n child.resize(updatedX, updatedY, updatedWidth, updatedHeight);\r\n\r\n // Update any lines that are anchored to this child object\r\n this._core.anchorManager.updateAnchorsForObject(child.id);\r\n });\r\n\r\n // Refresh dimensions and update the SelectionGroup to propagate changes to other tabs\r\n this.refreshObjectDimensions();\r\n this.captureUnchangedSnapshots();\r\n this._core.store.state.objects.update(this);\r\n });\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 - this.snapshotRotation;\r\n const cos = Math.cos(angle);\r\n const sin = Math.sin(angle);\r\n\r\n this._core.store.state.objects.transaction(() => {\r\n // Update the SelectionGroup itself to propagate rotation to other tabs\r\n this._core.store.state.objects.update(this);\r\n\r\n this.objects.forEach(child => {\r\n const unchangedSnapshot = this.unchangedObjectSnapshots.get(child.id);\r\n if (!unchangedSnapshot) return;\r\n\r\n const offsetX = this.getOffsetXToCenterFromSnapshot(unchangedSnapshot);\r\n const offsetY = this.getOffsetYToCenterFromSnapshot(unchangedSnapshot);\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 : unchangedSnapshot.rotation + angle);\r\n });\r\n });\r\n }\r\n\r\n override copy(): KritzelBaseObject<HTMLElement> {\r\n const selectionGroup = KritzelSelectionGroup.create(this._core);\r\n\r\n this.objects\r\n .sort((a, b) => a.zIndex - b.zIndex)\r\n .forEach(obj => {\r\n const copiedObject = obj.copy() as KritzelBaseObject<any>;\r\n selectionGroup.addOrRemove(copiedObject);\r\n });\r\n\r\n selectionGroup.captureUnchangedSnapshots();\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 const rotation = this.rotation;\r\n const cos = Math.cos(-rotation);\r\n const sin = Math.sin(-rotation);\r\n\r\n let minX = Infinity;\r\n let maxX = -Infinity;\r\n let minY = Infinity;\r\n let maxY = -Infinity;\r\n\r\n this.objects.forEach(obj => {\r\n const polygon = obj.rotatedPolygon;\r\n const corners = [polygon.topLeft, polygon.topRight, polygon.bottomRight, polygon.bottomLeft];\r\n\r\n corners.forEach(corner => {\r\n // Rotate corner into local space (aligned with group rotation)\r\n const rx = corner.x * cos - corner.y * sin;\r\n const ry = corner.x * sin + corner.y * cos;\r\n\r\n if (rx < minX) minX = rx;\r\n if (rx > maxX) maxX = rx;\r\n if (ry < minY) minY = ry;\r\n if (ry > maxY) maxY = ry;\r\n });\r\n });\r\n\r\n // Dimensions in world units (unrotated)\r\n const worldWidth = maxX - minX;\r\n const worldHeight = maxY - minY;\r\n\r\n this.width = (worldWidth - this.padding) * this.scale;\r\n this.height = (worldHeight - this.padding) * this.scale;\r\n\r\n // Center of the box in rotated space\r\n const cRx = (minX + maxX) / 2;\r\n const cRy = (minY + maxY) / 2;\r\n\r\n // Rotate center back to world space\r\n const cosR = Math.cos(rotation);\r\n const sinR = Math.sin(rotation);\r\n\r\n const cx = cRx * cosR - cRy * sinR;\r\n const cy = cRx * sinR + cRy * cosR;\r\n\r\n this.translateX = cx - (this.width / this.scale + 2 * this.padding) / 2;\r\n this.translateY = cy - (this.height / this.scale + 2 * this.padding) / 2;\r\n }\r\n\r\n this._core.store.state.objects.update(this);\r\n }\r\n\r\n private getOffsetXToCenterFromSnapshot(snapshot: UnchangedObjectSnapshot): number {\r\n const objCenterX = snapshot.translateX + snapshot.totalWidth / snapshot.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 getOffsetYToCenterFromSnapshot(snapshot: UnchangedObjectSnapshot): number {\r\n const objCenterY = snapshot.translateY + snapshot.totalHeight / snapshot.scale / 2;\r\n const groupCenterY = this.translateY + this.totalHeight / this.scale / 2;\r\n return objCenterY - groupCenterY;\r\n }\r\n}\r\n"]}
@@ -23,6 +23,7 @@ export class KritzelIconRegistry {
23
23
  KritzelIconRegistry.registerIcons({
24
24
  'cursor': '<svg width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"><path d="M4.037 4.688a.495.495 0 0 1 .651-.651l16 6.5a.5.5 0 0 1-.063.947l-6.124 1.58a2 2 0 0 0-1.438 1.435l-1.579 6.126a.5.5 0 0 1-.947.063z"/></svg>',
25
25
  'pen': '<svg width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"><path d="M21.174 6.812a1 1 0 0 0-3.986-3.987L3.842 16.174a2 2 0 0 0-.5.83l-1.321 4.352a.5.5 0 0 0 .623.622l4.353-1.32a2 2 0 0 0 .83-.497z"/></svg>',
26
+ 'arrow': '<svg width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"><line x1="5" y1="19" x2="19" y2="5"/><path d="M15 5h4v4"/></svg>',
26
27
  'highlighter': '<svg width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-highlighter-icon lucide-highlighter"><path d="m9 11-6 6v3h9l3-3"/><path d="m22 12-4.6 4.6a2 2 0 0 1-2.8 0l-5.2-5.2a2 2 0 0 1 0-2.8L14 4"/></svg>',
27
28
  'eraser': '<svg width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"><path d="m7 21-4.3-4.3c-1-1-1-2.5 0-3.4l9.6-9.6c1-1 2.5-1 3.4 0l5.6 5.6c1 1 1 2.5 0 3.4L13 21"/><path d="M22 21H7"/><path d="m5 11 9 9"/></svg>',
28
29
  'type': '<svg width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"><polyline points="4 7 4 4 20 4 20 7"/><line x1="9" x2="15" y1="20" y2="20"/><line x1="12" x2="12" y1="4" y2="20"/></svg>',
@@ -42,6 +43,11 @@ KritzelIconRegistry.registerIcons({
42
43
  'plus': '<svg width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-plus-icon lucide-plus"><path d="M5 12h14"/><path d="M12 5v14"/></svg>',
43
44
  'ellipsis-vertical': '<svg width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-ellipsis-vertical-icon lucide-ellipsis-vertical"><circle cx="12" cy="12" r="1"/><circle cx="12" cy="5" r="1"/><circle cx="12" cy="19" r="1"/></svg>',
44
45
  'x': '<svg width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-x-icon lucide-x"><path d="M18 6 6 18"/><path d="m6 6 12 12"/></svg>',
45
- 'check': '<svg width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-check-icon lucide-check"><path d="M20 6 9 17l-5-5"/></svg>'
46
+ 'check': '<svg width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-check-icon lucide-check"><path d="M20 6 9 17l-5-5"/></svg>',
47
+ 'move-vertical': '<svg width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-move-vertical-icon lucide-move-vertical" version="1.1" id="svg3"> <defs id="defs3" /> <path d="M12 2v20" id="path1" /> <path style="fill:#ffffff;stroke-width:2.5;stroke-dasharray:none;stroke-linejoin:round;paint-order:stroke fill markers" d="m 11.735575,22.661865 c -0.09259,-0.02798 -0.204674,-0.07661 -0.249076,-0.108068 -0.04441,-0.03147 -1.167275,-0.979853 -2.4952713,-2.10755 -1.8557024,-1.57581 -2.4300904,-2.079639 -2.4817336,-2.17687 -0.086514,-0.162885 -0.089504,-0.422449 -0.00664,-0.576334 0.1483053,-0.275409 0.437667,-0.436207 0.7830634,-0.435147 0.3692925,0.0011 0.3517326,-0.01122 2.168748,1.525599 L 11.12348,20.194964 V 11.999996 3.8050256 L 9.4546663,5.2164943 C 7.6376509,6.7533118 7.6552109,6.7409594 7.2859184,6.7420935 6.6681409,6.7439906 6.253658,6.1955854 6.5159903,5.723396 6.5738626,5.6192278 7.1368766,5.1267427 9.0629381,3.4955044 11.738128,1.2298067 11.640395,1.3026868 12.00355,1.3026868 c 0.363154,0 0.265421,-0.07288 2.940611,2.1928176 1.926062,1.6312383 2.489076,2.1237234 2.546948,2.2278916 0.262332,0.4721894 -0.15215,1.0205946 -0.769928,1.0186975 -0.369293,-0.00114 -0.351733,0.011218 -2.168748,-1.5255992 L 12.88362,3.8050256 v 8.1949704 8.194968 l 1.668813,-1.411469 c 1.817015,-1.536817 1.799455,-1.524464 2.168748,-1.525599 0.617772,-0.0019 1.032269,0.546521 0.769928,1.018687 -0.103474,0.18623 -4.919006,4.273935 -5.130582,4.355136 -0.20796,0.07981 -0.425829,0.09033 -0.624952,0.03014 z" id="path4" /> </svg>',
48
+ 'hand': '<svg width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-hand-icon lucide-hand" version="1.1" id="svg4"> <defs id="defs4" /> <path d="M18 11V6a2 2 0 0 0-2-2a2 2 0 0 0-2 2" id="path1" /> <path d="M14 10V4a2 2 0 0 0-2-2a2 2 0 0 0-2 2v2" id="path2" /> <path d="M10 10.5V6a2 2 0 0 0-2-2a2 2 0 0 0-2 2v8" id="path3" /> <path d="M18 8a2 2 0 1 1 4 0v6a8 8 0 0 1-8 8h-2c-2.8 0-4.5-.86-5.99-2.34l-3.6-3.6a2 2 0 0 1 2.83-2.82L7 15" id="path4" /> <path style="fill:#ffffff;stroke-width:0.0423032" d="M 11.478261,21.222477 C 9.6854059,21.139331 8.3341788,20.647346 7.1297169,19.639159 6.9698298,19.505327 5.949644,18.508708 4.8626374,17.42445 3.0780314,15.644357 2.8775851,15.435367 2.7968392,15.270602 2.5896561,14.847836 2.616354,14.436649 2.8771894,14.033085 c 0.136522,-0.211226 0.3837159,-0.398688 0.6367632,-0.482897 0.1529977,-0.05091 0.2326803,-0.05992 0.4470908,-0.05054 0.2250407,0.0098 0.2876577,0.02439 0.4554568,0.105827 0.1747854,0.08483 0.2933718,0.192702 1.1675186,1.062064 0.7182021,0.714271 1.0062041,0.982633 1.0998825,1.024878 0.1680197,0.07577 0.4756439,0.07817 0.6368269,0.005 0.1370772,-0.06226 0.2976691,-0.220818 0.3691296,-0.364463 0.072561,-0.145855 0.071573,-0.543545 -0.00169,-0.681911 -0.028747,-0.05429 -0.2476439,-0.296131 -0.4864385,-0.537426 l -0.4341716,-0.438718 0.00753,-3.989014 0.00753,-3.9890137 0.089246,-0.1883791 c 0.244787,-0.516692 0.7711718,-0.809716 1.3059705,-0.7269981 0.3973687,0.061462 0.7569953,0.3284904 0.9363122,0.6952277 l 0.093853,0.1919473 0.014101,2.4958872 0.014101,2.4958877 0.067385,0.149123 c 0.1186861,0.262654 0.4140438,0.457222 0.6940724,0.457222 0.2764172,0 0.5690532,-0.187563 0.6965992,-0.446482 l 0.06486,-0.131661 0.0141,-3.4970626 0.0141,-3.4970623 0.08982,-0.1896121 C 11.096301,3.0422103 11.506844,2.7755634 12,2.7755634 c 0.493156,0 0.903699,0.2666469 1.122868,0.7293016 l 0.08982,0.1896121 0.0141,3.2432432 c 0.01405,3.2315947 0.01432,3.2437077 0.07397,3.3726737 0.124721,0.269649 0.355908,0.424566 0.661411,0.443206 0.237954,0.01452 0.429018,-0.0627 0.591626,-0.239109 0.223655,-0.242637 0.208338,-0.06565 0.224113,-2.5896966 l 0.0141,-2.2561693 0.09385,-0.1919473 c 0.179317,-0.3667373 0.538944,-0.6337662 0.936313,-0.6952277 0.609359,-0.09425 1.208067,0.3054956 1.370981,0.9153772 0.03013,0.1127929 0.03773,0.6662436 0.038,2.7657391 3.74e-4,2.9328416 -0.008,2.8034316 0.197044,3.0364016 0.234927,0.266892 0.603828,0.337117 0.920407,0.175213 0.181933,-0.09304 0.329759,-0.261686 0.376309,-0.4293 0.01848,-0.06654 0.02929,-0.683932 0.0295,-1.684364 1.78e-4,-0.8783075 0.01239,-1.6530128 0.02751,-1.745346 0.08579,-0.5238478 0.505382,-0.9420803 1.039546,-1.0361716 0.607538,-0.1070155 1.25615,0.3485846 1.385876,0.973471 0.02211,0.1064847 0.02843,1.1397236 0.02169,3.5455556 -0.0093,3.324725 -0.01078,3.403075 -0.07062,3.770606 -0.126399,0.776213 -0.328814,1.41352 -0.669031,2.106456 -0.36657,0.746612 -0.72118,1.250303 -1.297841,1.843464 -1.185731,1.21966 -2.604527,1.933174 -4.300822,2.162889 -0.38234,0.05178 -2.604621,0.0785 -3.412456,0.04104 z" id="path16" /> </svg>',
49
+ 'hand-grab': '<svg width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-hand-grab-icon lucide-hand-grab" version="1.1" id="svg5"> <defs id="defs5" /> <path d="M18 11.5V9a2 2 0 0 0-2-2a2 2 0 0 0-2 2v1.4" id="path1" /> <path d="M14 10V8a2 2 0 0 0-2-2a2 2 0 0 0-2 2v2" id="path2" /> <path d="M10 9.9V9a2 2 0 0 0-2-2a2 2 0 0 0-2 2v5" id="path3" /> <path d="M6 14a2 2 0 0 0-2-2a2 2 0 0 0-2 2" id="path4" /> <path d="M18 11a2 2 0 1 1 4 0v3a8 8 0 0 1-8 8h-4a8 8 0 0 1-8-8 2 2 0 1 1 4 0" id="path5" /> <path style="fill:#ffffff;stroke-width:0.0423032" d="M 9.5887192,21.221364 C 8.0526856,21.128375 6.6533474,20.587008 5.4571093,19.622953 5.3019976,19.497947 5.0101058,19.225967 4.8084606,19.018552 4.2300382,18.423579 3.8474097,17.879011 3.4960953,17.150756 3.1017715,16.333345 2.9014937,15.633198 2.8052391,14.735605 c -0.097577,-0.909922 -0.019834,-1.263323 0.3569794,-1.622742 0.753018,-0.718257 1.9463784,-0.256949 2.0619296,0.797066 0.037839,0.345154 0.089701,0.477674 0.2472582,0.631806 0.2464521,0.241095 0.5958008,0.287445 0.9036474,0.119894 0.1478567,-0.08047 0.2303871,-0.16866 0.3266699,-0.349056 0.050118,-0.0939 0.05337,-0.2326 0.066784,-2.848413 L 6.7826087,8.7144536 6.8458627,8.559342 C 6.9736603,8.2459558 7.2463773,7.9734987 7.5581669,7.8477164 c 0.1253804,-0.050581 0.2118709,-0.062705 0.4512338,-0.063254 0.275392,-6.312e-4 0.3094658,0.00564 0.4867271,0.089609 0.264676,0.1253746 0.4771417,0.334346 0.6070085,0.5970252 l 0.1048543,0.212087 0.017338,0.7488899 c 0.019395,0.8377165 0.026343,0.8713745 0.2242006,1.0860245 0.1591067,0.172611 0.3522021,0.249908 0.5883018,0.235502 0.305503,-0.01864 0.53669,-0.173557 0.661411,-0.443206 0.05734,-0.123963 0.0605,-0.181852 0.07486,-1.3703236 0.01626,-1.3456629 0.0141,-1.3267758 0.182667,-1.5938092 0.257891,-0.4085268 0.77099,-0.6442307 1.228943,-0.5645435 0.471012,0.08196 0.850379,0.4102836 0.989676,0.8565175 0.04663,0.149383 0.0514,0.2860903 0.0514,1.4721724 0,0.8344844 0.01108,1.3591794 0.03064,1.4503554 0.04109,0.191585 0.179844,0.390224 0.342505,0.490321 0.27721,0.170587 0.693425,0.126085 0.92529,-0.09893 0.228986,-0.222224 0.234357,-0.25046 0.251582,-1.3227071 l 0.0152,-0.9463484 0.104855,-0.2120434 c 0.129872,-0.2626357 0.342372,-0.471626 0.607008,-0.5969817 0.177262,-0.083967 0.211335,-0.09024 0.486727,-0.089609 0.239363,5.486e-4 0.325854,0.012673 0.451234,0.063254 0.31179,0.1257823 0.584507,0.3982394 0.712304,0.7116256 0.0621,0.1522783 0.06351,0.1824139 0.07736,1.649824 0.01408,1.492435 0.0142,1.494914 0.07947,1.627432 0.0771,0.156535 0.2216,0.291061 0.395058,0.367789 0.09695,0.04289 0.169789,0.05275 0.325757,0.04411 0.230544,-0.01277 0.363779,-0.06826 0.506411,-0.21089 0.177062,-0.177061 0.198302,-0.25307 0.219359,-0.784959 0.02002,-0.505773 0.05012,-0.6549 0.175297,-0.868492 0.498409,-0.850471 1.728484,-0.8041941 2.173478,0.08177 0.131751,0.262312 0.134447,0.313526 0.122615,2.328965 -0.0104,1.771638 -0.01517,1.923481 -0.0714,2.273746 -0.123689,0.770512 -0.327108,1.411813 -0.668163,2.106456 -0.36657,0.746612 -0.72118,1.250303 -1.297841,1.843464 -1.180268,1.214041 -2.600612,1.930754 -4.287083,2.163284 -0.28697,0.03957 -0.685446,0.04782 -2.636536,0.05459 -1.26416,0.0044 -2.4698005,-0.0024 -2.6792012,-0.01507 z" id="path6" /> </svg>',
50
+ 'mouse-pointer': '<svg width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-mouse-pointer2-icon lucide-mouse-pointer-2" version="1.1" id="svg1"> <defs id="defs1" /> <path d="M4.037 4.688a.495.495 0 0 1 .651-.651l16 6.5a.5.5 0 0 1-.063.947l-6.124 1.58a2 2 0 0 0-1.438 1.435l-1.579 6.126a.5.5 0 0 1-.947.063z" id="path1" /> <path style="fill:#ffffff;stroke-width:0.0972651;stroke-linejoin:round;paint-order:stroke fill markers" d="M 7.8509196,12.314844 C 6.127071,8.1920568 4.7235325,4.8125504 4.7319449,4.8048299 c 0.01847,-0.016951 15.4787861,6.0801241 15.4610371,6.0973581 -0.0069,0.0067 -1.32633,0.341226 -2.93219,0.743509 -1.858829,0.465652 -3.011462,0.772855 -3.172161,0.845453 -0.688426,0.310999 -1.245788,0.879167 -1.498145,1.527185 -0.06251,0.160512 -0.440389,1.529576 -0.839733,3.042364 -0.399346,1.512788 -0.734966,2.750433 -0.745822,2.750322 -0.01086,-1.09e-4 -1.430163,-3.373391 -3.1540114,-7.496177 z" id="path2" /> <path style="fill:#ffffff;stroke-width:0.0705053;stroke-linejoin:round;paint-order:stroke fill markers" d="M 10.777831,19.240865 C 9.3899089,15.977493 4.7567738,4.8648478 4.7760705,4.8455511 c 0.013084,-0.013084 4.7618079,1.8507077 10.7773965,4.2299406 4.467495,1.7669453 4.558837,1.8037523 4.533848,1.8269883 -0.01183,0.011 -0.96064,0.257045 -2.108467,0.546768 -3.445281,0.869623 -3.777157,0.960825 -4.075205,1.119907 -0.597122,0.31871 -1.103666,0.864485 -1.309236,1.410635 -0.09642,0.256167 -0.312339,1.032806 -0.943226,3.392713 -0.641066,2.39798 -0.629171,2.354884 -0.649929,2.354849 -0.0091,-1.5e-5 -0.10963,-0.218934 -0.223421,-0.486487 z" id="path6" /> </svg>',
51
+ 'pointer': '<svg width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-pointer-icon lucide-pointer" version="1.1" id="svg5"> <defs id="defs5" /> <path d="M22 14a8 8 0 0 1-8 8" id="path1" /> <path d="M18 11v-1a2 2 0 0 0-2-2a2 2 0 0 0-2 2" id="path2" /> <path d="M14 10V9a2 2 0 0 0-2-2a2 2 0 0 0-2 2v1" id="path3" /> <path d="M10 9.5V4a2 2 0 0 0-2-2a2 2 0 0 0-2 2v10" id="path4" /> <path d="M18 11a2 2 0 1 1 4 0v3a8 8 0 0 1-8 8h-2c-2.8 0-4.5-.86-5.99-2.34l-3.6-3.6a2 2 0 0 1 2.83-2.82L7 15" id="path5" /> <path style="fill:#ffffff;stroke-width:0.0930233;stroke-linejoin:round;paint-order:stroke fill markers" d="M 11.2,21.203517 C 9.5092536,21.041493 8.4838422,20.667261 7.3116279,19.784423 7.1888372,19.691945 6.139155,18.670017 4.9790008,17.513473 2.5649891,15.106974 2.6562686,15.220427 2.6869266,14.664621 c 0.020277,-0.367608 0.1272548,-0.601802 0.3822766,-0.836873 0.2609241,-0.240511 0.4631523,-0.319555 0.8191689,-0.320185 0.509345,-9.02e-4 0.5815472,0.04845 1.7102825,1.168976 0.532833,0.528958 1.0223742,0.98871 1.0878697,1.021671 0.1699959,0.08555 0.4741793,0.07658 0.6733897,-0.01985 0.303161,-0.146758 0.4720469,-0.543298 0.3791811,-0.890307 -0.036373,-0.135913 -0.1250717,-0.246717 -0.506083,-0.632208 l -0.4619807,-0.467411 0.00983,-5.002356 0.00983,-5.0023561 0.080405,-0.1739784 C 6.9849846,3.2633288 7.2288893,3.0140593 7.4738043,2.8937849 7.6531903,2.8056908 7.7297209,2.7906977 8,2.7906977 c 0.2702791,0 0.3468097,0.014993 0.5261957,0.1030872 0.244915,0.1202744 0.4888197,0.3695439 0.6027014,0.6159576 0.079998,0.1730976 0.080499,0.1905559 0.09901,3.448397 0.020472,3.6031325 0.00418,3.3665775 0.2478407,3.5980265 0.2810043,0.266918 0.6822132,0.283308 1.0083162,0.04119 0.232339,-0.172501 0.25913,-0.280173 0.275933,-1.1089849 0.01456,-0.7180841 0.01869,-0.7520168 0.117805,-0.9674419 0.454637,-0.9881395 1.789759,-0.9881395 2.244396,0 0.09912,0.2154251 0.103248,0.2493578 0.117805,0.9674419 0.0168,0.8288119 0.04359,0.9364839 0.275933,1.1089849 0.326103,0.242117 0.727312,0.225727 1.008316,-0.04119 0.160426,-0.152384 0.218977,-0.294978 0.250819,-0.610832 C 14.845142,9.2502593 15.336916,8.7840275 16,8.7840275 c 0.478554,0 0.847992,0.2240614 1.082489,0.6565225 l 0.126813,0.2338686 0.01869,0.7813954 c 0.02069,0.865066 0.03258,0.913549 0.276595,1.127795 0.239244,0.210059 0.56665,0.239738 0.88018,0.07979 0.219744,-0.112104 0.324993,-0.301479 0.383515,-0.690054 0.06437,-0.427406 0.125794,-0.56694 0.357358,-0.811785 C 19.38604,9.8862229 19.614832,9.7882106 20,9.7869898 c 0.380153,-0.0012 0.636641,0.1145641 0.905451,0.4086842 0.318537,0.348531 0.317259,0.340596 0.332734,2.064791 0.02055,2.290001 -0.04576,2.983129 -0.383655,4.009983 -0.878739,2.670467 -3.284504,4.613238 -6.090273,4.918188 -0.322415,0.03504 -3.227312,0.04717 -3.564257,0.01488 z" id="path6" /> <path style="fill:#ffffff;stroke-width:0.0705053;stroke-linejoin:round;paint-order:stroke fill markers" d="m 11.942854,21.190957 c -1.015003,-0.01704 -1.131723,-0.02688 -1.806535,-0.1522 C 9.5352183,20.927122 8.8225664,20.681951 8.319624,20.413766 7.7570149,20.113766 7.3758537,19.827607 6.7836127,19.260598 5.774345,18.294328 3.1746828,15.68636 2.994305,15.459184 2.7288345,15.124838 2.6970674,15.049109 2.7026798,14.763988 c 0.00827,-0.420163 0.1162058,-0.679868 0.3844475,-0.925026 0.2382303,-0.217729 0.416008,-0.293073 0.7303102,-0.309513 0.5101451,-0.02668 0.6329728,0.04799 1.5378542,0.934977 0.8479274,0.831158 1.2429087,1.199656 1.342282,1.252283 0.11819,0.06259 0.4442817,0.06081 0.6122724,-0.0033 0.1482348,-0.05661 0.3410696,-0.248342 0.4107195,-0.408368 0.063024,-0.144802 0.06179,-0.498 -0.00216,-0.618376 C 7.6917315,14.63641 7.4736023,14.388937 7.2336742,14.136678 L 6.797441,13.678026 6.7970753,8.6903755 6.7967098,3.7027253 6.9021002,3.502167 C 7.0320375,3.2548956 7.2343175,3.0487286 7.4743519,2.9189189 c 0.1797064,-0.097185 0.1877434,-0.098707 0.5209477,-0.098707 0.3169743,0 0.349151,0.00524 0.5076381,0.082665 0.2190605,0.1070166 0.4871239,0.3748528 0.5931342,0.592632 l 0.081613,0.1676584 0.019992,1.3834579 c 0.010995,0.7609018 0.021403,2.0560783 0.023128,2.87817 0.00341,1.6233162 0.028863,2.2876938 0.093598,2.4426258 0.089047,0.213119 0.4255042,0.419889 0.683247,0.419889 0.1563141,0 0.3731941,-0.08265 0.5187231,-0.197689 0.205546,-0.162474 0.225694,-0.250142 0.256177,-1.1146856 C 10.79418,8.8613623 10.8052,8.7492253 10.85668,8.6186115 11.053264,8.1198873 11.50183,7.7978848 12,7.7978848 c 0.49817,0 0.946736,0.3220025 1.143315,0.8207259 0.05148,0.1306138 0.0625,0.2427508 0.08413,0.8563239 0.02897,0.8216044 0.05497,0.9507864 0.218548,1.0859664 0.341252,0.282005 0.756809,0.293493 1.057036,0.02922 0.169206,-0.148941 0.234219,-0.2921 0.288276,-0.6347773 0.103115,-0.6536616 0.472737,-1.0621772 1.030077,-1.1384664 0.547738,-0.074975 0.986339,0.1608863 1.276145,0.6862578 l 0.105758,0.1917223 7.68e-4,0.3699606 c 0.0011,0.553623 0.04553,1.179579 0.09141,1.289176 0.04428,0.105777 0.219161,0.276182 0.364423,0.355092 0.06913,0.03755 0.155512,0.05067 0.333059,0.05055 0.204058,-1.3e-4 0.260695,-0.01118 0.380729,-0.07426 0.239564,-0.12591 0.320531,-0.265583 0.407786,-0.703455 0.08382,-0.420648 0.125337,-0.527172 0.279883,-0.718174 0.321102,-0.3968443 0.77117,-0.5469022 1.259123,-0.4198065 0.21344,0.055594 0.39756,0.1739295 0.578279,0.3716645 0.286251,0.313205 0.299377,0.389392 0.324444,1.883099 0.02888,1.721047 -0.03379,2.808669 -0.20314,3.525265 -0.307591,1.301561 -0.970113,2.493177 -1.91312,3.440943 -1.060413,1.065767 -2.34115,1.742909 -3.849589,2.035329 -0.348478,0.06755 -0.462014,0.07524 -1.340342,0.09078 -0.527787,0.0093 -1.416154,0.0093 -1.974148,-6.4e-5 z" id="path7" /> </svg>'
46
52
  });
47
53
  //# sourceMappingURL=icon-registry.class.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"icon-registry.class.js","sourceRoot":"","sources":["../../../src/classes/registries/icon-registry.class.ts"],"names":[],"mappings":"AAAA,MAAM,OAAO,mBAAmB;IACtB,MAAM,CAAC,QAAQ,GAAG,IAAI,GAAG,EAAkB,CAAC;IAE7C,MAAM,CAAC,QAAQ,CAAC,IAAY,EAAE,UAAkB;QACrD,IAAI,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;YAC5B,OAAO,CAAC,IAAI,CAAC,wBAAwB,IAAI,kDAAkD,CAAC,CAAC;QAC/F,CAAC;QACD,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC;IACtC,CAAC;IAEM,MAAM,CAAC,GAAG,CAAC,IAAY;QAC5B,OAAO,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IACjC,CAAC;IAEM,MAAM,CAAC,aAAa,CAAC,KAAgC;QAC1D,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;YACzB,IAAI,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,EAAE,CAAC;gBACtD,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC;YACnC,CAAC;QACH,CAAC;IACH,CAAC;IAEM,MAAM,CAAC,GAAG,CAAC,IAAY;QAC5B,OAAO,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IACjC,CAAC;;AAGH,mBAAmB,CAAC,aAAa,CAAC;IAChC,QAAQ,EAAE,4SAA4S;IACtT,KAAK,EAAE,wSAAwS;IAC/S,aAAa,EAAE,2TAA2T;IAC1U,QAAQ,EAAE,qSAAqS;IAC/S,MAAM,EAAE,8QAA8Q;IACtR,OAAO,EAAE,sSAAsS;IAC/S,cAAc,EAAE,oLAAoL;IACpM,YAAY,EAAE,sLAAsL;IACpM,MAAM,EAAE,mUAAmU;IAC3U,OAAO,EAAE,6aAA6a;IACtb,KAAK,EAAE,+VAA+V;IACtW,QAAQ,EAAE,6YAA6Y;IACvZ,gBAAgB,EAAE,kSAAkS;IACpT,cAAc,EAAE,qSAAqS;IACrT,YAAY,EAAE,0bAA0b;IACxc,UAAU,EAAE,gVAAgV;IAC5V,MAAM,EAAE,iRAAiR;IACzR,MAAM,EAAE,mRAAmR;IAC3R,MAAM,EAAE,iPAAiP;IACzP,mBAAmB,EAAE,8TAA8T;IACnV,GAAG,EAAE,8OAA8O;IACnP,OAAO,EAAE,qOAAqO;CAC/O,CAAC,CAAC","sourcesContent":["export class KritzelIconRegistry {\r\n private static registry = new Map<string, string>();\r\n\r\n public static register(name: string, svgContent: string): void {\r\n if (this.registry.has(name)) {\r\n console.warn(`[IconRegistry] Icon \"${name}\" is already registered. It will be overwritten.`);\r\n }\r\n this.registry.set(name, svgContent);\r\n }\r\n\r\n public static get(name: string): string | undefined {\r\n return this.registry.get(name);\r\n }\r\n\r\n public static registerIcons(icons: { [key: string]: string }): void {\r\n for (const name in icons) {\r\n if (Object.prototype.hasOwnProperty.call(icons, name)) {\r\n this.register(name, icons[name]);\r\n }\r\n }\r\n }\r\n\r\n public static has(name: string): boolean {\r\n return this.registry.has(name);\r\n }\r\n}\r\n\r\nKritzelIconRegistry.registerIcons({\r\n 'cursor': '<svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><path d=\"M4.037 4.688a.495.495 0 0 1 .651-.651l16 6.5a.5.5 0 0 1-.063.947l-6.124 1.58a2 2 0 0 0-1.438 1.435l-1.579 6.126a.5.5 0 0 1-.947.063z\"/></svg>',\r\n 'pen': '<svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><path d=\"M21.174 6.812a1 1 0 0 0-3.986-3.987L3.842 16.174a2 2 0 0 0-.5.83l-1.321 4.352a.5.5 0 0 0 .623.622l4.353-1.32a2 2 0 0 0 .83-.497z\"/></svg>',\r\n 'highlighter': '<svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" class=\"lucide lucide-highlighter-icon lucide-highlighter\"><path d=\"m9 11-6 6v3h9l3-3\"/><path d=\"m22 12-4.6 4.6a2 2 0 0 1-2.8 0l-5.2-5.2a2 2 0 0 1 0-2.8L14 4\"/></svg>',\r\n 'eraser': '<svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><path d=\"m7 21-4.3-4.3c-1-1-1-2.5 0-3.4l9.6-9.6c1-1 2.5-1 3.4 0l5.6 5.6c1 1 1 2.5 0 3.4L13 21\"/><path d=\"M22 21H7\"/><path d=\"m5 11 9 9\"/></svg>',\r\n 'type': '<svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><polyline points=\"4 7 4 4 20 4 20 7\"/><line x1=\"9\" x2=\"15\" y1=\"20\" y2=\"20\"/><line x1=\"12\" x2=\"12\" y1=\"4\" y2=\"20\"/></svg>',\r\n 'image': '<svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><rect width=\"18\" height=\"18\" x=\"3\" y=\"3\" rx=\"2\" ry=\"2\"/><circle cx=\"9\" cy=\"9\" r=\"2\"/><path d=\"m21 15-3.086-3.086a2 2 0 0 0-2.828 0L6 21\"/></svg>',\r\n 'chevron-down': '<svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><path d=\"m6 9 6 6 6-6\"/></svg>',\r\n 'chevron-up': '<svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><path d=\"m18 15-6-6-6 6\"/></svg>',\r\n 'copy': '<svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" class=\"lucide lucide-copy-icon lucide-copy\"><rect width=\"14\" height=\"14\" x=\"8\" y=\"8\" rx=\"2\" ry=\"2\"/><path d=\"M4 16c-1.1 0-2-.9-2-2V4c0-1.1.9-2 2-2h10c1.1 0 2 .9 2 2\"/></svg>',\r\n 'paste': '<svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" class=\"lucide lucide-clipboard-paste-icon lucide-clipboard-paste\"><path d=\"M11 14h10\"/><path d=\"M16 4h2a2 2 0 0 1 2 2v1.344\"/><path d=\"m17 18 4-4-4-4\"/><path d=\"M8 4H6a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h12a2 2 0 0 0 1.793-1.113\"/><rect x=\"8\" y=\"2\" width=\"8\" height=\"4\" rx=\"1\"/></svg>',\r\n 'cut': '<svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" class=\"lucide lucide-scissors-icon lucide-scissors\"><circle cx=\"6\" cy=\"6\" r=\"3\"/><path d=\"M8.12 8.12 12 12\"/><path d=\"M20 4 8.12 15.88\"/><circle cx=\"6\" cy=\"18\" r=\"3\"/><path d=\"M14.8 14.8 20 20\"/></svg>',\r\n 'delete': '<svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" class=\"lucide lucide-trash2-icon lucide-trash-2\"><path d=\"M3 6h18\"/><path d=\"M19 6v14c0 1-1 2-2 2H7c-1 0-2-1-2-2V6\"/><path d=\"M8 6V4c0-1 1-2 2-2h4c1 0 2 1 2 2v2\"/><line x1=\"10\" x2=\"10\" y1=\"11\" y2=\"17\"/><line x1=\"14\" x2=\"14\" y1=\"11\" y2=\"17\"/></svg>',\r\n 'bring-to-front': '<svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" class=\"lucide lucide-arrow-up-to-line-icon lucide-arrow-up-to-line\"><path d=\"M5 3h14\"/><path d=\"m18 13-6-6-6 6\"/><path d=\"M12 7v14\"/></svg>',\r\n 'send-to-back': '<svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" class=\"lucide lucide-arrow-down-to-line-icon lucide-arrow-down-to-line\"><path d=\"M12 17V3\"/><path d=\"m6 11 6 6 6-6\"/><path d=\"M19 21H5\"/></svg>',\r\n 'select-all': '<svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" class=\"lucide lucide-square-mouse-pointer-icon lucide-square-mouse-pointer\"><path d=\"M12.034 12.681a.498.498 0 0 1 .647-.647l9 3.5a.5.5 0 0 1-.033.943l-3.444 1.068a1 1 0 0 0-.66.66l-1.067 3.443a.5.5 0 0 1-.943.033z\"/><path d=\"M21 11V5a2 2 0 0 0-2-2H5a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h6\"/></svg>',\r\n 'download': '<svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" class=\"lucide lucide-download-icon lucide-download\"><path d=\"M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4\"/><polyline points=\"7 10 12 15 17 10\"/><line x1=\"12\" x2=\"12\" y1=\"15\" y2=\"3\"/></svg>',\r\n 'undo': '<svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" class=\"lucide lucide-undo-icon lucide-undo\"><path d=\"M3 7v6h6\"/><path d=\"M21 17a9 9 0 0 0-9-9 9 9 0 0 0-6 2.3L3 13\"/></svg>',\r\n 'redo': '<svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" class=\"lucide lucide-redo-icon lucide-redo\"><path d=\"M21 7v6h-6\"/><path d=\"M3 17a9 9 0 0 1 9-9 9 9 0 0 1 6 2.3l3 2.7\"/></svg>',\r\n 'plus': '<svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" class=\"lucide lucide-plus-icon lucide-plus\"><path d=\"M5 12h14\"/><path d=\"M12 5v14\"/></svg>',\r\n 'ellipsis-vertical': '<svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" class=\"lucide lucide-ellipsis-vertical-icon lucide-ellipsis-vertical\"><circle cx=\"12\" cy=\"12\" r=\"1\"/><circle cx=\"12\" cy=\"5\" r=\"1\"/><circle cx=\"12\" cy=\"19\" r=\"1\"/></svg>',\r\n 'x': '<svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" class=\"lucide lucide-x-icon lucide-x\"><path d=\"M18 6 6 18\"/><path d=\"m6 6 12 12\"/></svg>',\r\n 'check': '<svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" class=\"lucide lucide-check-icon lucide-check\"><path d=\"M20 6 9 17l-5-5\"/></svg>'\r\n});"]}
1
+ {"version":3,"file":"icon-registry.class.js","sourceRoot":"","sources":["../../../src/classes/registries/icon-registry.class.ts"],"names":[],"mappings":"AAAA,MAAM,OAAO,mBAAmB;IACtB,MAAM,CAAC,QAAQ,GAAG,IAAI,GAAG,EAAkB,CAAC;IAE7C,MAAM,CAAC,QAAQ,CAAC,IAAY,EAAE,UAAkB;QACrD,IAAI,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;YAC5B,OAAO,CAAC,IAAI,CAAC,wBAAwB,IAAI,kDAAkD,CAAC,CAAC;QAC/F,CAAC;QACD,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC;IACtC,CAAC;IAEM,MAAM,CAAC,GAAG,CAAC,IAAY;QAC5B,OAAO,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IACjC,CAAC;IAEM,MAAM,CAAC,aAAa,CAAC,KAAgC;QAC1D,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;YACzB,IAAI,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,EAAE,CAAC;gBACtD,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC;YACnC,CAAC;QACH,CAAC;IACH,CAAC;IAEM,MAAM,CAAC,GAAG,CAAC,IAAY;QAC5B,OAAO,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IACjC,CAAC;;AAGH,mBAAmB,CAAC,aAAa,CAAC;IAChC,QAAQ,EAAE,4SAA4S;IACtT,KAAK,EAAE,wSAAwS;IAC/S,OAAO,EAAE,sNAAsN;IAC/N,aAAa,EAAE,2TAA2T;IAC1U,QAAQ,EAAE,qSAAqS;IAC/S,MAAM,EAAE,8QAA8Q;IACtR,OAAO,EAAE,sSAAsS;IAC/S,cAAc,EAAE,oLAAoL;IACpM,YAAY,EAAE,sLAAsL;IACpM,MAAM,EAAE,mUAAmU;IAC3U,OAAO,EAAE,6aAA6a;IACtb,KAAK,EAAE,+VAA+V;IACtW,QAAQ,EAAE,6YAA6Y;IACvZ,gBAAgB,EAAE,kSAAkS;IACpT,cAAc,EAAE,qSAAqS;IACrT,YAAY,EAAE,0bAA0b;IACxc,UAAU,EAAE,gVAAgV;IAC5V,MAAM,EAAE,iRAAiR;IACzR,MAAM,EAAE,mRAAmR;IAC3R,MAAM,EAAE,iPAAiP;IACzP,mBAAmB,EAAE,8TAA8T;IACnV,GAAG,EAAE,8OAA8O;IACnP,OAAO,EAAE,qOAAqO;IAC9O,eAAe,EAAE,olDAAolD;IACrmD,MAAM,EAAE,6kGAA6kG;IACrlG,WAAW,EAAE,2vGAA2vG;IACxwG,eAAe,EAAE,wpDAAwpD;IACzqD,SAAS,EAAE,2kLAA2kL;CACvlL,CAAC,CAAC","sourcesContent":["export class KritzelIconRegistry {\r\n private static registry = new Map<string, string>();\r\n\r\n public static register(name: string, svgContent: string): void {\r\n if (this.registry.has(name)) {\r\n console.warn(`[IconRegistry] Icon \"${name}\" is already registered. It will be overwritten.`);\r\n }\r\n this.registry.set(name, svgContent);\r\n }\r\n\r\n public static get(name: string): string | undefined {\r\n return this.registry.get(name);\r\n }\r\n\r\n public static registerIcons(icons: { [key: string]: string }): void {\r\n for (const name in icons) {\r\n if (Object.prototype.hasOwnProperty.call(icons, name)) {\r\n this.register(name, icons[name]);\r\n }\r\n }\r\n }\r\n\r\n public static has(name: string): boolean {\r\n return this.registry.has(name);\r\n }\r\n}\r\n\r\nKritzelIconRegistry.registerIcons({\r\n 'cursor': '<svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><path d=\"M4.037 4.688a.495.495 0 0 1 .651-.651l16 6.5a.5.5 0 0 1-.063.947l-6.124 1.58a2 2 0 0 0-1.438 1.435l-1.579 6.126a.5.5 0 0 1-.947.063z\"/></svg>',\r\n 'pen': '<svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><path d=\"M21.174 6.812a1 1 0 0 0-3.986-3.987L3.842 16.174a2 2 0 0 0-.5.83l-1.321 4.352a.5.5 0 0 0 .623.622l4.353-1.32a2 2 0 0 0 .83-.497z\"/></svg>',\r\n 'arrow': '<svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><line x1=\"5\" y1=\"19\" x2=\"19\" y2=\"5\"/><path d=\"M15 5h4v4\"/></svg>',\r\n 'highlighter': '<svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" class=\"lucide lucide-highlighter-icon lucide-highlighter\"><path d=\"m9 11-6 6v3h9l3-3\"/><path d=\"m22 12-4.6 4.6a2 2 0 0 1-2.8 0l-5.2-5.2a2 2 0 0 1 0-2.8L14 4\"/></svg>',\r\n 'eraser': '<svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><path d=\"m7 21-4.3-4.3c-1-1-1-2.5 0-3.4l9.6-9.6c1-1 2.5-1 3.4 0l5.6 5.6c1 1 1 2.5 0 3.4L13 21\"/><path d=\"M22 21H7\"/><path d=\"m5 11 9 9\"/></svg>',\r\n 'type': '<svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><polyline points=\"4 7 4 4 20 4 20 7\"/><line x1=\"9\" x2=\"15\" y1=\"20\" y2=\"20\"/><line x1=\"12\" x2=\"12\" y1=\"4\" y2=\"20\"/></svg>',\r\n 'image': '<svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><rect width=\"18\" height=\"18\" x=\"3\" y=\"3\" rx=\"2\" ry=\"2\"/><circle cx=\"9\" cy=\"9\" r=\"2\"/><path d=\"m21 15-3.086-3.086a2 2 0 0 0-2.828 0L6 21\"/></svg>',\r\n 'chevron-down': '<svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><path d=\"m6 9 6 6 6-6\"/></svg>',\r\n 'chevron-up': '<svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><path d=\"m18 15-6-6-6 6\"/></svg>',\r\n 'copy': '<svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" class=\"lucide lucide-copy-icon lucide-copy\"><rect width=\"14\" height=\"14\" x=\"8\" y=\"8\" rx=\"2\" ry=\"2\"/><path d=\"M4 16c-1.1 0-2-.9-2-2V4c0-1.1.9-2 2-2h10c1.1 0 2 .9 2 2\"/></svg>',\r\n 'paste': '<svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" class=\"lucide lucide-clipboard-paste-icon lucide-clipboard-paste\"><path d=\"M11 14h10\"/><path d=\"M16 4h2a2 2 0 0 1 2 2v1.344\"/><path d=\"m17 18 4-4-4-4\"/><path d=\"M8 4H6a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h12a2 2 0 0 0 1.793-1.113\"/><rect x=\"8\" y=\"2\" width=\"8\" height=\"4\" rx=\"1\"/></svg>',\r\n 'cut': '<svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" class=\"lucide lucide-scissors-icon lucide-scissors\"><circle cx=\"6\" cy=\"6\" r=\"3\"/><path d=\"M8.12 8.12 12 12\"/><path d=\"M20 4 8.12 15.88\"/><circle cx=\"6\" cy=\"18\" r=\"3\"/><path d=\"M14.8 14.8 20 20\"/></svg>',\r\n 'delete': '<svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" class=\"lucide lucide-trash2-icon lucide-trash-2\"><path d=\"M3 6h18\"/><path d=\"M19 6v14c0 1-1 2-2 2H7c-1 0-2-1-2-2V6\"/><path d=\"M8 6V4c0-1 1-2 2-2h4c1 0 2 1 2 2v2\"/><line x1=\"10\" x2=\"10\" y1=\"11\" y2=\"17\"/><line x1=\"14\" x2=\"14\" y1=\"11\" y2=\"17\"/></svg>',\r\n 'bring-to-front': '<svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" class=\"lucide lucide-arrow-up-to-line-icon lucide-arrow-up-to-line\"><path d=\"M5 3h14\"/><path d=\"m18 13-6-6-6 6\"/><path d=\"M12 7v14\"/></svg>',\r\n 'send-to-back': '<svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" class=\"lucide lucide-arrow-down-to-line-icon lucide-arrow-down-to-line\"><path d=\"M12 17V3\"/><path d=\"m6 11 6 6 6-6\"/><path d=\"M19 21H5\"/></svg>',\r\n 'select-all': '<svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" class=\"lucide lucide-square-mouse-pointer-icon lucide-square-mouse-pointer\"><path d=\"M12.034 12.681a.498.498 0 0 1 .647-.647l9 3.5a.5.5 0 0 1-.033.943l-3.444 1.068a1 1 0 0 0-.66.66l-1.067 3.443a.5.5 0 0 1-.943.033z\"/><path d=\"M21 11V5a2 2 0 0 0-2-2H5a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h6\"/></svg>',\r\n 'download': '<svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" class=\"lucide lucide-download-icon lucide-download\"><path d=\"M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4\"/><polyline points=\"7 10 12 15 17 10\"/><line x1=\"12\" x2=\"12\" y1=\"15\" y2=\"3\"/></svg>',\r\n 'undo': '<svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" class=\"lucide lucide-undo-icon lucide-undo\"><path d=\"M3 7v6h6\"/><path d=\"M21 17a9 9 0 0 0-9-9 9 9 0 0 0-6 2.3L3 13\"/></svg>',\r\n 'redo': '<svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" class=\"lucide lucide-redo-icon lucide-redo\"><path d=\"M21 7v6h-6\"/><path d=\"M3 17a9 9 0 0 1 9-9 9 9 0 0 1 6 2.3l3 2.7\"/></svg>',\r\n 'plus': '<svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" class=\"lucide lucide-plus-icon lucide-plus\"><path d=\"M5 12h14\"/><path d=\"M12 5v14\"/></svg>',\r\n 'ellipsis-vertical': '<svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" class=\"lucide lucide-ellipsis-vertical-icon lucide-ellipsis-vertical\"><circle cx=\"12\" cy=\"12\" r=\"1\"/><circle cx=\"12\" cy=\"5\" r=\"1\"/><circle cx=\"12\" cy=\"19\" r=\"1\"/></svg>',\r\n 'x': '<svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" class=\"lucide lucide-x-icon lucide-x\"><path d=\"M18 6 6 18\"/><path d=\"m6 6 12 12\"/></svg>',\r\n 'check': '<svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" class=\"lucide lucide-check-icon lucide-check\"><path d=\"M20 6 9 17l-5-5\"/></svg>',\r\n 'move-vertical': '<svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" class=\"lucide lucide-move-vertical-icon lucide-move-vertical\" version=\"1.1\" id=\"svg3\"> <defs id=\"defs3\" /> <path d=\"M12 2v20\" id=\"path1\" /> <path style=\"fill:#ffffff;stroke-width:2.5;stroke-dasharray:none;stroke-linejoin:round;paint-order:stroke fill markers\" d=\"m 11.735575,22.661865 c -0.09259,-0.02798 -0.204674,-0.07661 -0.249076,-0.108068 -0.04441,-0.03147 -1.167275,-0.979853 -2.4952713,-2.10755 -1.8557024,-1.57581 -2.4300904,-2.079639 -2.4817336,-2.17687 -0.086514,-0.162885 -0.089504,-0.422449 -0.00664,-0.576334 0.1483053,-0.275409 0.437667,-0.436207 0.7830634,-0.435147 0.3692925,0.0011 0.3517326,-0.01122 2.168748,1.525599 L 11.12348,20.194964 V 11.999996 3.8050256 L 9.4546663,5.2164943 C 7.6376509,6.7533118 7.6552109,6.7409594 7.2859184,6.7420935 6.6681409,6.7439906 6.253658,6.1955854 6.5159903,5.723396 6.5738626,5.6192278 7.1368766,5.1267427 9.0629381,3.4955044 11.738128,1.2298067 11.640395,1.3026868 12.00355,1.3026868 c 0.363154,0 0.265421,-0.07288 2.940611,2.1928176 1.926062,1.6312383 2.489076,2.1237234 2.546948,2.2278916 0.262332,0.4721894 -0.15215,1.0205946 -0.769928,1.0186975 -0.369293,-0.00114 -0.351733,0.011218 -2.168748,-1.5255992 L 12.88362,3.8050256 v 8.1949704 8.194968 l 1.668813,-1.411469 c 1.817015,-1.536817 1.799455,-1.524464 2.168748,-1.525599 0.617772,-0.0019 1.032269,0.546521 0.769928,1.018687 -0.103474,0.18623 -4.919006,4.273935 -5.130582,4.355136 -0.20796,0.07981 -0.425829,0.09033 -0.624952,0.03014 z\" id=\"path4\" /> </svg>',\r\n 'hand': '<svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" class=\"lucide lucide-hand-icon lucide-hand\" version=\"1.1\" id=\"svg4\"> <defs id=\"defs4\" /> <path d=\"M18 11V6a2 2 0 0 0-2-2a2 2 0 0 0-2 2\" id=\"path1\" /> <path d=\"M14 10V4a2 2 0 0 0-2-2a2 2 0 0 0-2 2v2\" id=\"path2\" /> <path d=\"M10 10.5V6a2 2 0 0 0-2-2a2 2 0 0 0-2 2v8\" id=\"path3\" /> <path d=\"M18 8a2 2 0 1 1 4 0v6a8 8 0 0 1-8 8h-2c-2.8 0-4.5-.86-5.99-2.34l-3.6-3.6a2 2 0 0 1 2.83-2.82L7 15\" id=\"path4\" /> <path style=\"fill:#ffffff;stroke-width:0.0423032\" d=\"M 11.478261,21.222477 C 9.6854059,21.139331 8.3341788,20.647346 7.1297169,19.639159 6.9698298,19.505327 5.949644,18.508708 4.8626374,17.42445 3.0780314,15.644357 2.8775851,15.435367 2.7968392,15.270602 2.5896561,14.847836 2.616354,14.436649 2.8771894,14.033085 c 0.136522,-0.211226 0.3837159,-0.398688 0.6367632,-0.482897 0.1529977,-0.05091 0.2326803,-0.05992 0.4470908,-0.05054 0.2250407,0.0098 0.2876577,0.02439 0.4554568,0.105827 0.1747854,0.08483 0.2933718,0.192702 1.1675186,1.062064 0.7182021,0.714271 1.0062041,0.982633 1.0998825,1.024878 0.1680197,0.07577 0.4756439,0.07817 0.6368269,0.005 0.1370772,-0.06226 0.2976691,-0.220818 0.3691296,-0.364463 0.072561,-0.145855 0.071573,-0.543545 -0.00169,-0.681911 -0.028747,-0.05429 -0.2476439,-0.296131 -0.4864385,-0.537426 l -0.4341716,-0.438718 0.00753,-3.989014 0.00753,-3.9890137 0.089246,-0.1883791 c 0.244787,-0.516692 0.7711718,-0.809716 1.3059705,-0.7269981 0.3973687,0.061462 0.7569953,0.3284904 0.9363122,0.6952277 l 0.093853,0.1919473 0.014101,2.4958872 0.014101,2.4958877 0.067385,0.149123 c 0.1186861,0.262654 0.4140438,0.457222 0.6940724,0.457222 0.2764172,0 0.5690532,-0.187563 0.6965992,-0.446482 l 0.06486,-0.131661 0.0141,-3.4970626 0.0141,-3.4970623 0.08982,-0.1896121 C 11.096301,3.0422103 11.506844,2.7755634 12,2.7755634 c 0.493156,0 0.903699,0.2666469 1.122868,0.7293016 l 0.08982,0.1896121 0.0141,3.2432432 c 0.01405,3.2315947 0.01432,3.2437077 0.07397,3.3726737 0.124721,0.269649 0.355908,0.424566 0.661411,0.443206 0.237954,0.01452 0.429018,-0.0627 0.591626,-0.239109 0.223655,-0.242637 0.208338,-0.06565 0.224113,-2.5896966 l 0.0141,-2.2561693 0.09385,-0.1919473 c 0.179317,-0.3667373 0.538944,-0.6337662 0.936313,-0.6952277 0.609359,-0.09425 1.208067,0.3054956 1.370981,0.9153772 0.03013,0.1127929 0.03773,0.6662436 0.038,2.7657391 3.74e-4,2.9328416 -0.008,2.8034316 0.197044,3.0364016 0.234927,0.266892 0.603828,0.337117 0.920407,0.175213 0.181933,-0.09304 0.329759,-0.261686 0.376309,-0.4293 0.01848,-0.06654 0.02929,-0.683932 0.0295,-1.684364 1.78e-4,-0.8783075 0.01239,-1.6530128 0.02751,-1.745346 0.08579,-0.5238478 0.505382,-0.9420803 1.039546,-1.0361716 0.607538,-0.1070155 1.25615,0.3485846 1.385876,0.973471 0.02211,0.1064847 0.02843,1.1397236 0.02169,3.5455556 -0.0093,3.324725 -0.01078,3.403075 -0.07062,3.770606 -0.126399,0.776213 -0.328814,1.41352 -0.669031,2.106456 -0.36657,0.746612 -0.72118,1.250303 -1.297841,1.843464 -1.185731,1.21966 -2.604527,1.933174 -4.300822,2.162889 -0.38234,0.05178 -2.604621,0.0785 -3.412456,0.04104 z\" id=\"path16\" /> </svg>',\r\n 'hand-grab': '<svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" class=\"lucide lucide-hand-grab-icon lucide-hand-grab\" version=\"1.1\" id=\"svg5\"> <defs id=\"defs5\" /> <path d=\"M18 11.5V9a2 2 0 0 0-2-2a2 2 0 0 0-2 2v1.4\" id=\"path1\" /> <path d=\"M14 10V8a2 2 0 0 0-2-2a2 2 0 0 0-2 2v2\" id=\"path2\" /> <path d=\"M10 9.9V9a2 2 0 0 0-2-2a2 2 0 0 0-2 2v5\" id=\"path3\" /> <path d=\"M6 14a2 2 0 0 0-2-2a2 2 0 0 0-2 2\" id=\"path4\" /> <path d=\"M18 11a2 2 0 1 1 4 0v3a8 8 0 0 1-8 8h-4a8 8 0 0 1-8-8 2 2 0 1 1 4 0\" id=\"path5\" /> <path style=\"fill:#ffffff;stroke-width:0.0423032\" d=\"M 9.5887192,21.221364 C 8.0526856,21.128375 6.6533474,20.587008 5.4571093,19.622953 5.3019976,19.497947 5.0101058,19.225967 4.8084606,19.018552 4.2300382,18.423579 3.8474097,17.879011 3.4960953,17.150756 3.1017715,16.333345 2.9014937,15.633198 2.8052391,14.735605 c -0.097577,-0.909922 -0.019834,-1.263323 0.3569794,-1.622742 0.753018,-0.718257 1.9463784,-0.256949 2.0619296,0.797066 0.037839,0.345154 0.089701,0.477674 0.2472582,0.631806 0.2464521,0.241095 0.5958008,0.287445 0.9036474,0.119894 0.1478567,-0.08047 0.2303871,-0.16866 0.3266699,-0.349056 0.050118,-0.0939 0.05337,-0.2326 0.066784,-2.848413 L 6.7826087,8.7144536 6.8458627,8.559342 C 6.9736603,8.2459558 7.2463773,7.9734987 7.5581669,7.8477164 c 0.1253804,-0.050581 0.2118709,-0.062705 0.4512338,-0.063254 0.275392,-6.312e-4 0.3094658,0.00564 0.4867271,0.089609 0.264676,0.1253746 0.4771417,0.334346 0.6070085,0.5970252 l 0.1048543,0.212087 0.017338,0.7488899 c 0.019395,0.8377165 0.026343,0.8713745 0.2242006,1.0860245 0.1591067,0.172611 0.3522021,0.249908 0.5883018,0.235502 0.305503,-0.01864 0.53669,-0.173557 0.661411,-0.443206 0.05734,-0.123963 0.0605,-0.181852 0.07486,-1.3703236 0.01626,-1.3456629 0.0141,-1.3267758 0.182667,-1.5938092 0.257891,-0.4085268 0.77099,-0.6442307 1.228943,-0.5645435 0.471012,0.08196 0.850379,0.4102836 0.989676,0.8565175 0.04663,0.149383 0.0514,0.2860903 0.0514,1.4721724 0,0.8344844 0.01108,1.3591794 0.03064,1.4503554 0.04109,0.191585 0.179844,0.390224 0.342505,0.490321 0.27721,0.170587 0.693425,0.126085 0.92529,-0.09893 0.228986,-0.222224 0.234357,-0.25046 0.251582,-1.3227071 l 0.0152,-0.9463484 0.104855,-0.2120434 c 0.129872,-0.2626357 0.342372,-0.471626 0.607008,-0.5969817 0.177262,-0.083967 0.211335,-0.09024 0.486727,-0.089609 0.239363,5.486e-4 0.325854,0.012673 0.451234,0.063254 0.31179,0.1257823 0.584507,0.3982394 0.712304,0.7116256 0.0621,0.1522783 0.06351,0.1824139 0.07736,1.649824 0.01408,1.492435 0.0142,1.494914 0.07947,1.627432 0.0771,0.156535 0.2216,0.291061 0.395058,0.367789 0.09695,0.04289 0.169789,0.05275 0.325757,0.04411 0.230544,-0.01277 0.363779,-0.06826 0.506411,-0.21089 0.177062,-0.177061 0.198302,-0.25307 0.219359,-0.784959 0.02002,-0.505773 0.05012,-0.6549 0.175297,-0.868492 0.498409,-0.850471 1.728484,-0.8041941 2.173478,0.08177 0.131751,0.262312 0.134447,0.313526 0.122615,2.328965 -0.0104,1.771638 -0.01517,1.923481 -0.0714,2.273746 -0.123689,0.770512 -0.327108,1.411813 -0.668163,2.106456 -0.36657,0.746612 -0.72118,1.250303 -1.297841,1.843464 -1.180268,1.214041 -2.600612,1.930754 -4.287083,2.163284 -0.28697,0.03957 -0.685446,0.04782 -2.636536,0.05459 -1.26416,0.0044 -2.4698005,-0.0024 -2.6792012,-0.01507 z\" id=\"path6\" /> </svg>',\r\n 'mouse-pointer': '<svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" class=\"lucide lucide-mouse-pointer2-icon lucide-mouse-pointer-2\" version=\"1.1\" id=\"svg1\"> <defs id=\"defs1\" /> <path d=\"M4.037 4.688a.495.495 0 0 1 .651-.651l16 6.5a.5.5 0 0 1-.063.947l-6.124 1.58a2 2 0 0 0-1.438 1.435l-1.579 6.126a.5.5 0 0 1-.947.063z\" id=\"path1\" /> <path style=\"fill:#ffffff;stroke-width:0.0972651;stroke-linejoin:round;paint-order:stroke fill markers\" d=\"M 7.8509196,12.314844 C 6.127071,8.1920568 4.7235325,4.8125504 4.7319449,4.8048299 c 0.01847,-0.016951 15.4787861,6.0801241 15.4610371,6.0973581 -0.0069,0.0067 -1.32633,0.341226 -2.93219,0.743509 -1.858829,0.465652 -3.011462,0.772855 -3.172161,0.845453 -0.688426,0.310999 -1.245788,0.879167 -1.498145,1.527185 -0.06251,0.160512 -0.440389,1.529576 -0.839733,3.042364 -0.399346,1.512788 -0.734966,2.750433 -0.745822,2.750322 -0.01086,-1.09e-4 -1.430163,-3.373391 -3.1540114,-7.496177 z\" id=\"path2\" /> <path style=\"fill:#ffffff;stroke-width:0.0705053;stroke-linejoin:round;paint-order:stroke fill markers\" d=\"M 10.777831,19.240865 C 9.3899089,15.977493 4.7567738,4.8648478 4.7760705,4.8455511 c 0.013084,-0.013084 4.7618079,1.8507077 10.7773965,4.2299406 4.467495,1.7669453 4.558837,1.8037523 4.533848,1.8269883 -0.01183,0.011 -0.96064,0.257045 -2.108467,0.546768 -3.445281,0.869623 -3.777157,0.960825 -4.075205,1.119907 -0.597122,0.31871 -1.103666,0.864485 -1.309236,1.410635 -0.09642,0.256167 -0.312339,1.032806 -0.943226,3.392713 -0.641066,2.39798 -0.629171,2.354884 -0.649929,2.354849 -0.0091,-1.5e-5 -0.10963,-0.218934 -0.223421,-0.486487 z\" id=\"path6\" /> </svg>',\r\n 'pointer': '<svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" class=\"lucide lucide-pointer-icon lucide-pointer\" version=\"1.1\" id=\"svg5\"> <defs id=\"defs5\" /> <path d=\"M22 14a8 8 0 0 1-8 8\" id=\"path1\" /> <path d=\"M18 11v-1a2 2 0 0 0-2-2a2 2 0 0 0-2 2\" id=\"path2\" /> <path d=\"M14 10V9a2 2 0 0 0-2-2a2 2 0 0 0-2 2v1\" id=\"path3\" /> <path d=\"M10 9.5V4a2 2 0 0 0-2-2a2 2 0 0 0-2 2v10\" id=\"path4\" /> <path d=\"M18 11a2 2 0 1 1 4 0v3a8 8 0 0 1-8 8h-2c-2.8 0-4.5-.86-5.99-2.34l-3.6-3.6a2 2 0 0 1 2.83-2.82L7 15\" id=\"path5\" /> <path style=\"fill:#ffffff;stroke-width:0.0930233;stroke-linejoin:round;paint-order:stroke fill markers\" d=\"M 11.2,21.203517 C 9.5092536,21.041493 8.4838422,20.667261 7.3116279,19.784423 7.1888372,19.691945 6.139155,18.670017 4.9790008,17.513473 2.5649891,15.106974 2.6562686,15.220427 2.6869266,14.664621 c 0.020277,-0.367608 0.1272548,-0.601802 0.3822766,-0.836873 0.2609241,-0.240511 0.4631523,-0.319555 0.8191689,-0.320185 0.509345,-9.02e-4 0.5815472,0.04845 1.7102825,1.168976 0.532833,0.528958 1.0223742,0.98871 1.0878697,1.021671 0.1699959,0.08555 0.4741793,0.07658 0.6733897,-0.01985 0.303161,-0.146758 0.4720469,-0.543298 0.3791811,-0.890307 -0.036373,-0.135913 -0.1250717,-0.246717 -0.506083,-0.632208 l -0.4619807,-0.467411 0.00983,-5.002356 0.00983,-5.0023561 0.080405,-0.1739784 C 6.9849846,3.2633288 7.2288893,3.0140593 7.4738043,2.8937849 7.6531903,2.8056908 7.7297209,2.7906977 8,2.7906977 c 0.2702791,0 0.3468097,0.014993 0.5261957,0.1030872 0.244915,0.1202744 0.4888197,0.3695439 0.6027014,0.6159576 0.079998,0.1730976 0.080499,0.1905559 0.09901,3.448397 0.020472,3.6031325 0.00418,3.3665775 0.2478407,3.5980265 0.2810043,0.266918 0.6822132,0.283308 1.0083162,0.04119 0.232339,-0.172501 0.25913,-0.280173 0.275933,-1.1089849 0.01456,-0.7180841 0.01869,-0.7520168 0.117805,-0.9674419 0.454637,-0.9881395 1.789759,-0.9881395 2.244396,0 0.09912,0.2154251 0.103248,0.2493578 0.117805,0.9674419 0.0168,0.8288119 0.04359,0.9364839 0.275933,1.1089849 0.326103,0.242117 0.727312,0.225727 1.008316,-0.04119 0.160426,-0.152384 0.218977,-0.294978 0.250819,-0.610832 C 14.845142,9.2502593 15.336916,8.7840275 16,8.7840275 c 0.478554,0 0.847992,0.2240614 1.082489,0.6565225 l 0.126813,0.2338686 0.01869,0.7813954 c 0.02069,0.865066 0.03258,0.913549 0.276595,1.127795 0.239244,0.210059 0.56665,0.239738 0.88018,0.07979 0.219744,-0.112104 0.324993,-0.301479 0.383515,-0.690054 0.06437,-0.427406 0.125794,-0.56694 0.357358,-0.811785 C 19.38604,9.8862229 19.614832,9.7882106 20,9.7869898 c 0.380153,-0.0012 0.636641,0.1145641 0.905451,0.4086842 0.318537,0.348531 0.317259,0.340596 0.332734,2.064791 0.02055,2.290001 -0.04576,2.983129 -0.383655,4.009983 -0.878739,2.670467 -3.284504,4.613238 -6.090273,4.918188 -0.322415,0.03504 -3.227312,0.04717 -3.564257,0.01488 z\" id=\"path6\" /> <path style=\"fill:#ffffff;stroke-width:0.0705053;stroke-linejoin:round;paint-order:stroke fill markers\" d=\"m 11.942854,21.190957 c -1.015003,-0.01704 -1.131723,-0.02688 -1.806535,-0.1522 C 9.5352183,20.927122 8.8225664,20.681951 8.319624,20.413766 7.7570149,20.113766 7.3758537,19.827607 6.7836127,19.260598 5.774345,18.294328 3.1746828,15.68636 2.994305,15.459184 2.7288345,15.124838 2.6970674,15.049109 2.7026798,14.763988 c 0.00827,-0.420163 0.1162058,-0.679868 0.3844475,-0.925026 0.2382303,-0.217729 0.416008,-0.293073 0.7303102,-0.309513 0.5101451,-0.02668 0.6329728,0.04799 1.5378542,0.934977 0.8479274,0.831158 1.2429087,1.199656 1.342282,1.252283 0.11819,0.06259 0.4442817,0.06081 0.6122724,-0.0033 0.1482348,-0.05661 0.3410696,-0.248342 0.4107195,-0.408368 0.063024,-0.144802 0.06179,-0.498 -0.00216,-0.618376 C 7.6917315,14.63641 7.4736023,14.388937 7.2336742,14.136678 L 6.797441,13.678026 6.7970753,8.6903755 6.7967098,3.7027253 6.9021002,3.502167 C 7.0320375,3.2548956 7.2343175,3.0487286 7.4743519,2.9189189 c 0.1797064,-0.097185 0.1877434,-0.098707 0.5209477,-0.098707 0.3169743,0 0.349151,0.00524 0.5076381,0.082665 0.2190605,0.1070166 0.4871239,0.3748528 0.5931342,0.592632 l 0.081613,0.1676584 0.019992,1.3834579 c 0.010995,0.7609018 0.021403,2.0560783 0.023128,2.87817 0.00341,1.6233162 0.028863,2.2876938 0.093598,2.4426258 0.089047,0.213119 0.4255042,0.419889 0.683247,0.419889 0.1563141,0 0.3731941,-0.08265 0.5187231,-0.197689 0.205546,-0.162474 0.225694,-0.250142 0.256177,-1.1146856 C 10.79418,8.8613623 10.8052,8.7492253 10.85668,8.6186115 11.053264,8.1198873 11.50183,7.7978848 12,7.7978848 c 0.49817,0 0.946736,0.3220025 1.143315,0.8207259 0.05148,0.1306138 0.0625,0.2427508 0.08413,0.8563239 0.02897,0.8216044 0.05497,0.9507864 0.218548,1.0859664 0.341252,0.282005 0.756809,0.293493 1.057036,0.02922 0.169206,-0.148941 0.234219,-0.2921 0.288276,-0.6347773 0.103115,-0.6536616 0.472737,-1.0621772 1.030077,-1.1384664 0.547738,-0.074975 0.986339,0.1608863 1.276145,0.6862578 l 0.105758,0.1917223 7.68e-4,0.3699606 c 0.0011,0.553623 0.04553,1.179579 0.09141,1.289176 0.04428,0.105777 0.219161,0.276182 0.364423,0.355092 0.06913,0.03755 0.155512,0.05067 0.333059,0.05055 0.204058,-1.3e-4 0.260695,-0.01118 0.380729,-0.07426 0.239564,-0.12591 0.320531,-0.265583 0.407786,-0.703455 0.08382,-0.420648 0.125337,-0.527172 0.279883,-0.718174 0.321102,-0.3968443 0.77117,-0.5469022 1.259123,-0.4198065 0.21344,0.055594 0.39756,0.1739295 0.578279,0.3716645 0.286251,0.313205 0.299377,0.389392 0.324444,1.883099 0.02888,1.721047 -0.03379,2.808669 -0.20314,3.525265 -0.307591,1.301561 -0.970113,2.493177 -1.91312,3.440943 -1.060413,1.065767 -2.34115,1.742909 -3.849589,2.035329 -0.348478,0.06755 -0.462014,0.07524 -1.340342,0.09078 -0.527787,0.0093 -1.416154,0.0093 -1.974148,-6.4e-5 z\" id=\"path7\" /> </svg>'\r\n});"]}