kritzel-stencil 0.0.160 → 0.0.161

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 (168) hide show
  1. package/dist/cjs/{default-text-tool.config-D10FksvZ.js → default-text-tool.config-zB3FPuXq.js} +167 -44
  2. package/dist/cjs/default-text-tool.config-zB3FPuXq.js.map +1 -0
  3. package/dist/cjs/index.cjs.js +2 -1
  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 +108 -101
  8. package/dist/cjs/loader.cjs.js +1 -1
  9. package/dist/cjs/stencil.cjs.js +1 -1
  10. package/dist/collection/classes/core/store.class.js +3 -0
  11. package/dist/collection/classes/core/store.class.js.map +1 -1
  12. package/dist/collection/classes/handlers/resize.handler.js +42 -34
  13. package/dist/collection/classes/handlers/resize.handler.js.map +1 -1
  14. package/dist/collection/classes/handlers/rotation.handler.js +12 -8
  15. package/dist/collection/classes/handlers/rotation.handler.js.map +1 -1
  16. package/dist/collection/classes/registries/icon-registry.class.js +6 -1
  17. package/dist/collection/classes/registries/icon-registry.class.js.map +1 -1
  18. package/dist/collection/components/core/kritzel-cursor-trail/kritzel-cursor-trail.js +1 -1
  19. package/dist/collection/components/core/kritzel-editor/kritzel-editor.js +1 -1
  20. package/dist/collection/components/core/kritzel-engine/kritzel-engine.css +0 -14
  21. package/dist/collection/components/core/kritzel-engine/kritzel-engine.js +80 -10
  22. package/dist/collection/components/core/kritzel-engine/kritzel-engine.js.map +1 -1
  23. package/dist/collection/components/shared/kritzel-brush-style/kritzel-brush-style.css +0 -1
  24. package/dist/collection/components/shared/kritzel-color/kritzel-color.js +2 -2
  25. package/dist/collection/components/shared/kritzel-color-palette/kritzel-color-palette.css +1 -1
  26. package/dist/collection/components/shared/kritzel-color-palette/kritzel-color-palette.js +1 -1
  27. package/dist/collection/components/shared/kritzel-dropdown/kritzel-dropdown.css +1 -1
  28. package/dist/collection/components/shared/kritzel-font/kritzel-font.js +1 -1
  29. package/dist/collection/components/shared/kritzel-font-family/kritzel-font-family.css +1 -1
  30. package/dist/collection/components/shared/kritzel-font-family/kritzel-font-family.js +1 -1
  31. package/dist/collection/components/shared/kritzel-font-size/kritzel-font-size.css +1 -1
  32. package/dist/collection/components/shared/kritzel-font-size/kritzel-font-size.js +1 -1
  33. package/dist/collection/components/shared/kritzel-menu/kritzel-menu.js +1 -1
  34. package/dist/collection/components/shared/kritzel-menu-item/kritzel-menu-item.css +1 -2
  35. package/dist/collection/components/shared/kritzel-menu-item/kritzel-menu-item.js +2 -2
  36. package/dist/collection/components/shared/kritzel-portal/kritzel-portal.js +1 -1
  37. package/dist/collection/components/shared/kritzel-split-button/kritzel-split-button.css +1 -1
  38. package/dist/collection/components/shared/kritzel-split-button/kritzel-split-button.js +1 -1
  39. package/dist/collection/components/shared/kritzel-stroke-size/kritzel-stroke-size.css +1 -1
  40. package/dist/collection/components/shared/kritzel-stroke-size/kritzel-stroke-size.js +1 -1
  41. package/dist/collection/components/shared/kritzel-tooltip/kritzel-tooltip.js +4 -4
  42. package/dist/collection/components/ui/kritzel-context-menu/kritzel-context-menu.css +1 -2
  43. package/dist/collection/components/ui/kritzel-context-menu/kritzel-context-menu.js +1 -1
  44. package/dist/collection/components/ui/kritzel-control-brush-config/kritzel-control-brush-config.css +1 -1
  45. package/dist/collection/components/ui/kritzel-control-brush-config/kritzel-control-brush-config.js +2 -2
  46. package/dist/collection/components/ui/kritzel-control-text-config/kritzel-control-text-config.css +1 -1
  47. package/dist/collection/components/ui/kritzel-control-text-config/kritzel-control-text-config.js +2 -2
  48. package/dist/collection/components/ui/kritzel-controls/kritzel-controls.css +4 -4
  49. package/dist/collection/components/ui/kritzel-controls/kritzel-controls.js +3 -3
  50. package/dist/collection/components/ui/kritzel-utility-panel/kritzel-utility-panel.css +1 -1
  51. package/dist/collection/components/ui/kritzel-utility-panel/kritzel-utility-panel.js +1 -1
  52. package/dist/collection/configs/default-engine-config.js +6 -0
  53. package/dist/collection/configs/default-engine-config.js.map +1 -1
  54. package/dist/collection/helpers/cursor.helper.js +58 -0
  55. package/dist/collection/helpers/cursor.helper.js.map +1 -0
  56. package/dist/collection/index.js +1 -0
  57. package/dist/collection/index.js.map +1 -1
  58. package/dist/collection/interfaces/engine-state.interface.js.map +1 -1
  59. package/dist/components/index.js +2 -2
  60. package/dist/components/kritzel-brush-style.js +3 -3
  61. package/dist/components/kritzel-brush-style.js.map +1 -1
  62. package/dist/components/kritzel-color-palette.js +1 -1
  63. package/dist/components/kritzel-color.js +1 -1
  64. package/dist/components/kritzel-context-menu.js +1 -1
  65. package/dist/components/kritzel-control-brush-config.js +1 -1
  66. package/dist/components/kritzel-control-text-config.js +1 -1
  67. package/dist/components/kritzel-controls.js +1 -1
  68. package/dist/components/kritzel-cursor-trail.js +1 -1
  69. package/dist/components/kritzel-dropdown.js +1 -1
  70. package/dist/components/kritzel-editor.js +21 -21
  71. package/dist/components/kritzel-engine.js +1 -1
  72. package/dist/components/kritzel-font-family.js +1 -1
  73. package/dist/components/kritzel-font-size.js +1 -1
  74. package/dist/components/kritzel-font.js +1 -1
  75. package/dist/components/kritzel-icon.js +1 -1
  76. package/dist/components/kritzel-menu-item.js +1 -1
  77. package/dist/components/kritzel-menu.js +1 -1
  78. package/dist/components/kritzel-portal.js +1 -1
  79. package/dist/components/kritzel-split-button.js +1 -1
  80. package/dist/components/kritzel-stroke-size.js +1 -1
  81. package/dist/components/kritzel-tooltip.js +1 -1
  82. package/dist/components/kritzel-utility-panel.js +1 -1
  83. package/dist/components/kritzel-workspace-manager.js +1 -1
  84. package/dist/components/{p-CK6no3mi.js → p-58y59Acb.js} +6 -6
  85. package/dist/components/{p-CK6no3mi.js.map → p-58y59Acb.js.map} +1 -1
  86. package/dist/components/{p-CTP479Lf.js → p-9Fzdviju.js} +6 -6
  87. package/dist/components/{p-CTP479Lf.js.map → p-9Fzdviju.js.map} +1 -1
  88. package/dist/components/{p-DDmSxM5f.js → p-B6r22FSC.js} +5 -5
  89. package/dist/components/p-B6r22FSC.js.map +1 -0
  90. package/dist/components/{p-CLt3HMl6.js → p-B_3OZeom.js} +3 -3
  91. package/dist/components/{p-CLt3HMl6.js.map → p-B_3OZeom.js.map} +1 -1
  92. package/dist/components/{p-TdCTkEu0.js → p-BdZKPKnx.js} +7 -7
  93. package/dist/components/p-BdZKPKnx.js.map +1 -0
  94. package/dist/components/{p-CIXPLjCu.js → p-BdwB-S9G.js} +3 -3
  95. package/dist/components/p-BdwB-S9G.js.map +1 -0
  96. package/dist/components/{p-1lIHoOlH.js → p-BpXgwgnV.js} +18 -18
  97. package/dist/components/p-BpXgwgnV.js.map +1 -0
  98. package/dist/components/{p-D1uj4A4F.js → p-Brd9SxWS.js} +5 -5
  99. package/dist/components/p-Brd9SxWS.js.map +1 -0
  100. package/dist/components/{p-CsA9M6me.js → p-CC8KFHSe.js} +8 -8
  101. package/dist/components/p-CC8KFHSe.js.map +1 -0
  102. package/dist/components/{p-BgznZoBH.js → p-CFH6XRL5.js} +5 -5
  103. package/dist/components/p-CFH6XRL5.js.map +1 -0
  104. package/dist/components/{p-B4kxkVe-.js → p-CRGwaUcp.js} +5 -5
  105. package/dist/components/p-CRGwaUcp.js.map +1 -0
  106. package/dist/components/{p-uuRJU2R1.js → p-Ck4lGnmt.js} +3 -3
  107. package/dist/components/{p-uuRJU2R1.js.map → p-Ck4lGnmt.js.map} +1 -1
  108. package/dist/components/{p-DTHqEUDc.js → p-D7BLVRXX.js} +186 -61
  109. package/dist/components/p-D7BLVRXX.js.map +1 -0
  110. package/dist/components/{p-C2sWlNsJ.js → p-D_ygcWSz.js} +5 -5
  111. package/dist/components/p-D_ygcWSz.js.map +1 -0
  112. package/dist/components/p-DbKKCHKd.js +103 -0
  113. package/dist/components/p-DbKKCHKd.js.map +1 -0
  114. package/dist/components/{p-Ddh40W3x.js → p-Doixm8-N.js} +9 -9
  115. package/dist/components/p-Doixm8-N.js.map +1 -0
  116. package/dist/components/{p-BQg4YML7.js → p-DxNbcUzt.js} +12 -12
  117. package/dist/components/p-DxNbcUzt.js.map +1 -0
  118. package/dist/components/{p-D4yvhd1d.js → p-LAsVgL2e.js} +4 -4
  119. package/dist/components/{p-D4yvhd1d.js.map → p-LAsVgL2e.js.map} +1 -1
  120. package/dist/components/{p-D5Wq4x4r.js → p-OFrACpZf.js} +3 -3
  121. package/dist/components/{p-D5Wq4x4r.js.map → p-OFrACpZf.js.map} +1 -1
  122. package/dist/components/{p-DAfkuR8U.js → p-i0IlGLv2.js} +5 -5
  123. package/dist/components/p-i0IlGLv2.js.map +1 -0
  124. package/dist/esm/{default-text-tool.config-DzqpOikl.js → default-text-tool.config-BvCgOiKA.js} +166 -45
  125. package/dist/esm/default-text-tool.config-BvCgOiKA.js.map +1 -0
  126. package/dist/esm/index.js +2 -2
  127. package/dist/esm/kritzel-brush-style.entry.js +1 -1
  128. package/dist/esm/kritzel-brush-style.entry.js.map +1 -1
  129. package/dist/esm/kritzel-color_22.entry.js +106 -99
  130. package/dist/esm/loader.js +1 -1
  131. package/dist/esm/stencil.js +1 -1
  132. package/dist/stencil/index.esm.js +1 -1
  133. package/dist/stencil/kritzel-brush-style.entry.esm.js.map +1 -1
  134. package/dist/stencil/p-385bab97.entry.js +2 -0
  135. package/dist/stencil/{p-d702c5af.entry.js.map → p-385bab97.entry.js.map} +1 -1
  136. package/dist/stencil/p-6d9756d9.entry.js +10 -0
  137. package/dist/stencil/p-6d9756d9.entry.js.map +1 -0
  138. package/dist/stencil/{p-DzqpOikl.js → p-BvCgOiKA.js} +2 -2
  139. package/dist/stencil/p-BvCgOiKA.js.map +1 -0
  140. package/dist/stencil/stencil.esm.js +1 -1
  141. package/dist/types/classes/core/store.class.d.ts +1 -0
  142. package/dist/types/components/core/kritzel-engine/kritzel-engine.d.ts +4 -0
  143. package/dist/types/components.d.ts +2 -0
  144. package/dist/types/helpers/cursor.helper.d.ts +22 -0
  145. package/dist/types/index.d.ts +1 -0
  146. package/dist/types/interfaces/engine-state.interface.d.ts +7 -0
  147. package/package.json +1 -1
  148. package/dist/cjs/default-text-tool.config-D10FksvZ.js.map +0 -1
  149. package/dist/components/p-1lIHoOlH.js.map +0 -1
  150. package/dist/components/p-B4kxkVe-.js.map +0 -1
  151. package/dist/components/p-BQg4YML7.js.map +0 -1
  152. package/dist/components/p-BgznZoBH.js.map +0 -1
  153. package/dist/components/p-Bhtn9qay.js +0 -98
  154. package/dist/components/p-Bhtn9qay.js.map +0 -1
  155. package/dist/components/p-C2sWlNsJ.js.map +0 -1
  156. package/dist/components/p-CIXPLjCu.js.map +0 -1
  157. package/dist/components/p-CsA9M6me.js.map +0 -1
  158. package/dist/components/p-D1uj4A4F.js.map +0 -1
  159. package/dist/components/p-DAfkuR8U.js.map +0 -1
  160. package/dist/components/p-DDmSxM5f.js.map +0 -1
  161. package/dist/components/p-DTHqEUDc.js.map +0 -1
  162. package/dist/components/p-Ddh40W3x.js.map +0 -1
  163. package/dist/components/p-TdCTkEu0.js.map +0 -1
  164. package/dist/esm/default-text-tool.config-DzqpOikl.js.map +0 -1
  165. package/dist/stencil/p-5475442e.entry.js +0 -10
  166. package/dist/stencil/p-5475442e.entry.js.map +0 -1
  167. package/dist/stencil/p-DzqpOikl.js.map +0 -1
  168. package/dist/stencil/p-d702c5af.entry.js +0 -2
@@ -0,0 +1 @@
1
+ {"file":"p-i0IlGLv2.js","mappings":";;;AAAA,MAAM,sBAAsB,GAAG,+yBAA+yB;;MCQj0B,mBAAmB,iBAAAA,kBAAA,CAAA,MAAA,mBAAA,SAAAC,CAAA,CAAA;;;;;;;;;;;IACtB,SAAS,GAAqB,IAAI;AAEjC,IAAA,IAAI;AACJ,IAAA,IAAI;AACJ,IAAA,MAAM;AAEf,IAAA,UAAU,CAAC,KAAY,EAAA;AACrB,QAAA,IAAI,KAAK,CAAC,UAAU,EAAE;YACpB,KAAK,CAAC,cAAc,EAAE;YACtB,KAAK,CAAC,eAAe,EAAE;AACvB,YAAA,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE;;;AAIpB,IAAA,UAAU,CAAC,KAAY,EAAA;QACrB,KAAK,CAAC,cAAc,EAAE;QACtB,KAAK,CAAC,eAAe,EAAE;AACvB,QAAA,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE;;IAGlB,MAAM,GAAA;AACJ,QAAA,QACE,EAAC,IAAI,EAAA,EAAA,GAAA,EAAA,0CAAA,EAAA,EACH,CAAQ,CAAA,QAAA,EAAA,EAAA,GAAA,EAAA,0CAAA,EAAA,KAAK,EAAC,gBAAgB,EAAC,QAAQ,EAAE,CAAC,IAAI,CAAC,SAAS,EAAE,OAAO,EAAE,OAAO,EAAE,KAAK,IAAI,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,EAAA,EACzG,CAAA,CAAA,cAAA,EAAA,EAAA,GAAA,EAAA,0CAAA,EAAc,IAAI,EAAC,MAAM,EAAA,CAAgB,CAClC,EACT,CAAQ,CAAA,QAAA,EAAA,EAAA,GAAA,EAAA,0CAAA,EAAA,KAAK,EAAC,gBAAgB,EAAC,QAAQ,EAAE,CAAC,IAAI,CAAC,SAAS,EAAE,OAAO,EAAE,OAAO,EAAE,KAAK,IAAI,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,EAAA,EACzG,CAAA,CAAA,cAAA,EAAA,EAAA,GAAA,EAAA,0CAAA,EAAc,IAAI,EAAC,MAAM,EAAA,CAAgB,CAClC,EAET,CAAK,CAAA,KAAA,EAAA,EAAA,GAAA,EAAA,0CAAA,EAAA,KAAK,EAAC,mBAAmB,EAAO,CAAA,EAErC,CAAQ,CAAA,QAAA,EAAA,EAAA,GAAA,EAAA,0CAAA,EAAA,KAAK,EAAC,gBAAgB,EAAA,EAC5B,CAAA,CAAA,cAAA,EAAA,EAAA,GAAA,EAAA,0CAAA,EAAc,IAAI,EAAC,QAAQ,EAAC,OAAO,EAAE,MAAM,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,GAAiB,CACvE,CACJ;;;;;;;;;;;;;;;;;;;;;;;;;;;","names":["__stencil_proxyCustomElement","HTMLElement"],"sources":["src/components/ui/kritzel-utility-panel/kritzel-utility-panel.css?tag=kritzel-utility-panel&encapsulation=shadow","src/components/ui/kritzel-utility-panel/kritzel-utility-panel.tsx"],"sourcesContent":[":host {\r\n display: flex;\r\n flex-direction: row;\r\n align-items: center;\r\n padding: 4px;\r\n gap: 8px;\r\n border-top-left-radius: 12px;\r\n border-top-right-radius: 12px;\r\n background-color: rgb(226, 226, 226);\r\n width: fit-content;\r\n user-select: none;\r\n}\r\n\r\n.utility-button {\r\n display: flex;\r\n justify-content: center;\r\n align-items: center;\r\n width: 28px;\r\n height: 28px;\r\n padding: 8px 4px;\r\n border: none;\r\n background: none;\r\n cursor: var(--kritzel-pointer-cursor, pointer);\r\n color: #333333;\r\n -webkit-tap-highlight-color: transparent;\r\n border-radius: var(--kritzel-utility-panel-button-border-radius, 8px);\r\n}\r\n\r\n.utility-button:hover,\r\n.utility-button:focus-visible {\r\n background-color: var(--kritzel-controls-control-hover-background-color, hsl(0, 0%, 0%, 4.3%));\r\n}\r\n\r\n.utility-button:disabled {\r\n opacity: 0.4;\r\n cursor: not-allowed;\r\n pointer-events: none;\r\n}\r\n\r\n.utility-separator {\r\n width: 1px;\r\n height: 16px;\r\n background-color: hsl(0, 0%, 0%, 4.3%);\r\n}","import { Component, Host, h, Event, EventEmitter, Prop } from '@stencil/core';\r\nimport { KritzelUndoState } from '../../../interfaces/undo-state.interface';\r\n\r\n@Component({\r\n tag: 'kritzel-utility-panel',\r\n styleUrl: 'kritzel-utility-panel.css',\r\n shadow: true,\r\n})\r\nexport class KritzelUtilityPanel {\r\n @Prop() undoState: KritzelUndoState = null;\r\n\r\n @Event() undo: EventEmitter<void>;\r\n @Event() redo: EventEmitter<void>;\r\n @Event() delete: EventEmitter<void>;\r\n\r\n handleUndo(event: Event) {\r\n if (event.cancelable) {\r\n event.preventDefault();\r\n event.stopPropagation();\r\n this.undo.emit();\r\n }\r\n }\r\n\r\n handleRedo(event: Event) {\r\n event.preventDefault();\r\n event.stopPropagation();\r\n this.redo.emit();\r\n }\r\n\r\n render() {\r\n return (\r\n <Host>\r\n <button class=\"utility-button\" disabled={!this.undoState?.canUndo} onClick={event => this.handleUndo(event)}>\r\n <kritzel-icon name=\"undo\"></kritzel-icon>\r\n </button>\r\n <button class=\"utility-button\" disabled={!this.undoState?.canRedo} onClick={event => this.handleRedo(event)}>\r\n <kritzel-icon name=\"redo\"></kritzel-icon>\r\n </button>\r\n\r\n <div class=\"utility-separator\"></div>\r\n\r\n <button class=\"utility-button\">\r\n <kritzel-icon name=\"delete\" onClick={() => this.delete.emit()}></kritzel-icon>\r\n </button>\r\n </Host>\r\n );\r\n }\r\n}\r\n"],"version":3}
@@ -14951,6 +14951,115 @@ class KritzelTextTool extends KritzelBaseTool {
14951
14951
  }
14952
14952
  }
14953
14953
 
14954
+ class KritzelIconRegistry {
14955
+ static registry = new Map();
14956
+ static register(name, svgContent) {
14957
+ if (this.registry.has(name)) {
14958
+ console.warn(`[IconRegistry] Icon "${name}" is already registered. It will be overwritten.`);
14959
+ }
14960
+ this.registry.set(name, svgContent);
14961
+ }
14962
+ static get(name) {
14963
+ return this.registry.get(name);
14964
+ }
14965
+ static registerIcons(icons) {
14966
+ for (const name in icons) {
14967
+ if (Object.prototype.hasOwnProperty.call(icons, name)) {
14968
+ this.register(name, icons[name]);
14969
+ }
14970
+ }
14971
+ }
14972
+ static has(name) {
14973
+ return this.registry.has(name);
14974
+ }
14975
+ }
14976
+ KritzelIconRegistry.registerIcons({
14977
+ '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>',
14978
+ '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>',
14979
+ '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>',
14980
+ '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>',
14981
+ '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>',
14982
+ '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>',
14983
+ '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>',
14984
+ '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>',
14985
+ '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>',
14986
+ '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>',
14987
+ '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>',
14988
+ '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>',
14989
+ '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>',
14990
+ '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>',
14991
+ '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>',
14992
+ '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>',
14993
+ '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>',
14994
+ '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>',
14995
+ '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>',
14996
+ '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>',
14997
+ '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>',
14998
+ '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>',
14999
+ '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>',
15000
+ '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>',
15001
+ '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>',
15002
+ '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>',
15003
+ '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>'
15004
+ });
15005
+
15006
+ class KritzelCursorHelper {
15007
+ static _pointerCursor = null;
15008
+ /**
15009
+ * Returns the custom pointer cursor CSS value.
15010
+ * This can be used instead of `cursor: pointer` for consistent styling.
15011
+ */
15012
+ static getPointerCursor() {
15013
+ if (!this._pointerCursor) {
15014
+ this._pointerCursor = this.getCursor({ iconName: 'pointer' });
15015
+ }
15016
+ return this._pointerCursor;
15017
+ }
15018
+ /**
15019
+ * Returns a custom cursor CSS value with support for rotation.
15020
+ * The icon is retrieved from the KritzelIconRegistry.
15021
+ */
15022
+ static getCursor(options) {
15023
+ const iconName = options.iconName === 'default' ? 'mouse-pointer' : options.iconName;
15024
+ const iconSvg = KritzelIconRegistry.get(iconName);
15025
+ if (!iconSvg) {
15026
+ console.warn(`Icon "${iconName}" not found in registry.`);
15027
+ return 'auto';
15028
+ }
15029
+ const size = options.size || 24;
15030
+ const rotation = options.rotation || 0;
15031
+ const color = options.color || 'black';
15032
+ // Default cursor (mouse-pointer) has hotspot at (4, 4), others at center
15033
+ const hotspot = options.hotspot || (options.iconName === 'default' ? { x: 4, y: 4 } : { x: size / 2, y: size / 2 });
15034
+ // Modify the SVG string to set size and color
15035
+ // We replace width and height to match the requested size
15036
+ // We replace currentColor with the requested color
15037
+ let content = iconSvg
15038
+ .replace(/width="\d+"/, `width="${size}"`)
15039
+ .replace(/height="\d+"/, `height="${size}"`)
15040
+ .replace(/currentColor/g, color);
15041
+ // Create the SVG string
15042
+ // We rotate around the center of the SVG canvas
15043
+ const center = size / 2;
15044
+ // We use a group to apply the rotation
15045
+ const svg = `
15046
+ <svg xmlns="http://www.w3.org/2000/svg" width="${size}" height="${size}" viewBox="0 0 ${size} ${size}">
15047
+ <g transform="rotate(${rotation} ${center} ${center})">
15048
+ ${content}
15049
+ </g>
15050
+ </svg>
15051
+ `;
15052
+ // Encode the SVG for use in a data URI
15053
+ // We need to be careful with encoding to ensure it works across browsers
15054
+ const encodedSvg = encodeURIComponent(svg.replace(/\s+/g, ' ').trim())
15055
+ .replace(/'/g, '%27')
15056
+ .replace(/"/g, '%22');
15057
+ const dataUri = `data:image/svg+xml;charset=utf-8,${encodedSvg}`;
15058
+ // Return the cursor style string
15059
+ return `url('${dataUri}') ${hotspot.x} ${hotspot.y}, auto`;
15060
+ }
15061
+ }
15062
+
14954
15063
  class KritzelBaseHandler {
14955
15064
  _core;
14956
15065
  constructor(core) {
@@ -15189,39 +15298,40 @@ class KritzelResizeHandler extends KritzelBaseHandler {
15189
15298
  const rotation = selectionGroup.rotation;
15190
15299
  const sin = Math.sin(rotation);
15191
15300
  const cos = Math.cos(rotation);
15192
- const activeScale = selectionGroup.scale || this._core.store.state.scale;
15301
+ const objectScale = selectionGroup.scale || 1;
15302
+ const currentScale = this._core.store.state.scale;
15193
15303
  // Calculate delta in local unrotated space
15194
15304
  // We rotate the screen delta by -rotation to align with the object's axes
15195
- const localDx = dx * cos + dy * sin;
15196
- const localDy = -dx * sin + dy * cos;
15305
+ const localDx = (dx * cos + dy * sin) / currentScale;
15306
+ const localDy = (-dx * sin + dy * cos) / currentScale;
15197
15307
  // Calculate the center of the selection group before resize
15198
- const initialCenterX = this.initialSize.x + this.initialSize.width / activeScale / 2;
15199
- const initialCenterY = this.initialSize.y + this.initialSize.height / activeScale / 2;
15308
+ const initialCenterX = this.initialSize.x + this.initialSize.width / objectScale / 2;
15309
+ const initialCenterY = this.initialSize.y + this.initialSize.height / objectScale / 2;
15200
15310
  // The center moves by half of the screen delta (scaled)
15201
15311
  // This is true regardless of rotation because the resize happens symmetrically around the center
15202
15312
  // relative to the fixed point logic
15203
- const newCenterX = initialCenterX + dx / activeScale / 2;
15204
- const newCenterY = initialCenterY + dy / activeScale / 2;
15313
+ const newCenterX = initialCenterX + dx / currentScale / 2;
15314
+ const newCenterY = initialCenterY + dy / currentScale / 2;
15205
15315
  switch (this._core.store.state.resizeHandleType) {
15206
15316
  case KritzelHandleType.TopLeft:
15207
- this.newSize.width = this.initialSize.width - localDx;
15208
- this.newSize.height = this.initialSize.height - localDy;
15317
+ this.newSize.width = this.initialSize.width - localDx * objectScale;
15318
+ this.newSize.height = this.initialSize.height - localDy * objectScale;
15209
15319
  break;
15210
15320
  case KritzelHandleType.TopRight:
15211
- this.newSize.width = this.initialSize.width + localDx;
15212
- this.newSize.height = this.initialSize.height - localDy;
15321
+ this.newSize.width = this.initialSize.width + localDx * objectScale;
15322
+ this.newSize.height = this.initialSize.height - localDy * objectScale;
15213
15323
  break;
15214
15324
  case KritzelHandleType.BottomLeft:
15215
- this.newSize.width = this.initialSize.width - localDx;
15216
- this.newSize.height = this.initialSize.height + localDy;
15325
+ this.newSize.width = this.initialSize.width - localDx * objectScale;
15326
+ this.newSize.height = this.initialSize.height + localDy * objectScale;
15217
15327
  break;
15218
15328
  case KritzelHandleType.BottomRight:
15219
- this.newSize.width = this.initialSize.width + localDx;
15220
- this.newSize.height = this.initialSize.height + localDy;
15329
+ this.newSize.width = this.initialSize.width + localDx * objectScale;
15330
+ this.newSize.height = this.initialSize.height + localDy * objectScale;
15221
15331
  break;
15222
15332
  }
15223
- this.newSize.x = newCenterX - this.newSize.width / activeScale / 2;
15224
- this.newSize.y = newCenterY - this.newSize.height / activeScale / 2;
15333
+ this.newSize.x = newCenterX - this.newSize.width / objectScale / 2;
15334
+ this.newSize.y = newCenterY - this.newSize.height / objectScale / 2;
15225
15335
  selectionGroup.resize(this.newSize.x, this.newSize.y, this.newSize.width, this.newSize.height);
15226
15336
  }
15227
15337
  }
@@ -15250,33 +15360,40 @@ class KritzelResizeHandler extends KritzelBaseHandler {
15250
15360
  const rotation = selectionGroup.rotation;
15251
15361
  const sin = Math.sin(rotation);
15252
15362
  const cos = Math.cos(rotation);
15253
- const activeScale = selectionGroup.scale || this._core.store.state.scale;
15254
- const localDx = dx * cos + dy * sin;
15255
- const localDy = -dx * sin + dy * cos;
15256
- const initialCenterX = this.initialSize.x + this.initialSize.width / activeScale / 2;
15257
- const initialCenterY = this.initialSize.y + this.initialSize.height / activeScale / 2;
15258
- const newCenterX = initialCenterX + dx / activeScale / 2;
15259
- const newCenterY = initialCenterY + dy / activeScale / 2;
15363
+ const objectScale = selectionGroup.scale || 1;
15364
+ const currentScale = this._core.store.state.scale;
15365
+ // Calculate delta in local unrotated space
15366
+ // We rotate the screen delta by -rotation to align with the object's axes
15367
+ const localDx = (dx * cos + dy * sin) / currentScale;
15368
+ const localDy = (-dx * sin + dy * cos) / currentScale;
15369
+ // Calculate the center of the selection group before resize
15370
+ const initialCenterX = this.initialSize.x + this.initialSize.width / objectScale / 2;
15371
+ const initialCenterY = this.initialSize.y + this.initialSize.height / objectScale / 2;
15372
+ // The center moves by half of the screen delta (scaled)
15373
+ // This is true regardless of rotation because the resize happens symmetrically around the center
15374
+ // relative to the fixed point logic
15375
+ const newCenterX = initialCenterX + dx / currentScale / 2;
15376
+ const newCenterY = initialCenterY + dy / currentScale / 2;
15260
15377
  switch (this._core.store.state.resizeHandleType) {
15261
15378
  case KritzelHandleType.TopLeft:
15262
- this.newSize.width = this.initialSize.width - localDx;
15263
- this.newSize.height = this.initialSize.height - localDy;
15379
+ this.newSize.width = this.initialSize.width - localDx * objectScale;
15380
+ this.newSize.height = this.initialSize.height - localDy * objectScale;
15264
15381
  break;
15265
15382
  case KritzelHandleType.TopRight:
15266
- this.newSize.width = this.initialSize.width + localDx;
15267
- this.newSize.height = this.initialSize.height - localDy;
15383
+ this.newSize.width = this.initialSize.width + localDx * objectScale;
15384
+ this.newSize.height = this.initialSize.height - localDy * objectScale;
15268
15385
  break;
15269
15386
  case KritzelHandleType.BottomLeft:
15270
- this.newSize.width = this.initialSize.width - localDx;
15271
- this.newSize.height = this.initialSize.height + localDy;
15387
+ this.newSize.width = this.initialSize.width - localDx * objectScale;
15388
+ this.newSize.height = this.initialSize.height + localDy * objectScale;
15272
15389
  break;
15273
15390
  case KritzelHandleType.BottomRight:
15274
- this.newSize.width = this.initialSize.width + localDx;
15275
- this.newSize.height = this.initialSize.height + localDy;
15391
+ this.newSize.width = this.initialSize.width + localDx * objectScale;
15392
+ this.newSize.height = this.initialSize.height + localDy * objectScale;
15276
15393
  break;
15277
15394
  }
15278
- this.newSize.x = newCenterX - this.newSize.width / activeScale / 2;
15279
- this.newSize.y = newCenterY - this.newSize.height / activeScale / 2;
15395
+ this.newSize.x = newCenterX - this.newSize.width / objectScale / 2;
15396
+ this.newSize.y = newCenterY - this.newSize.height / objectScale / 2;
15280
15397
  selectionGroup.resize(this.newSize.x, this.newSize.y, this.newSize.width, this.newSize.height);
15281
15398
  }
15282
15399
  }
@@ -15329,8 +15446,9 @@ class KritzelRotationHandler extends KritzelBaseHandler {
15329
15446
  const clientX = event.clientX - this._core.store.offsetX;
15330
15447
  const clientY = event.clientY - this._core.store.offsetY;
15331
15448
  this._core.store.state.isRotating = true;
15332
- const centerX = selectionGroup.translateX + selectionGroup.width / 2 / this._core.store.state.scale;
15333
- const centerY = selectionGroup.translateY + selectionGroup.height / 2 / this._core.store.state.scale;
15449
+ const objectScale = selectionGroup.scale || 1;
15450
+ const centerX = selectionGroup.translateX + selectionGroup.width / 2 / objectScale;
15451
+ const centerY = selectionGroup.translateY + selectionGroup.height / 2 / objectScale;
15334
15452
  const cursorX = (clientX - this._core.store.state.translateX) / this._core.store.state.scale;
15335
15453
  const cursorY = (clientY - this._core.store.state.translateY) / this._core.store.state.scale;
15336
15454
  this.initialSelectionGroupRotation = selectionGroup.rotation;
@@ -15351,8 +15469,9 @@ class KritzelRotationHandler extends KritzelBaseHandler {
15351
15469
  const clientX = Math.round(firstTouch.clientX - this._core.store.offsetX);
15352
15470
  const clientY = Math.round(firstTouch.clientY - this._core.store.offsetY);
15353
15471
  this._core.store.state.isRotating = true;
15354
- const centerX = selectionGroup.translateX + selectionGroup.width / 2 / this._core.store.state.scale;
15355
- const centerY = selectionGroup.translateY + selectionGroup.height / 2 / this._core.store.state.scale;
15472
+ const objectScale = selectionGroup.scale || 1;
15473
+ const centerX = selectionGroup.translateX + selectionGroup.width / 2 / objectScale;
15474
+ const centerY = selectionGroup.translateY + selectionGroup.height / 2 / objectScale;
15356
15475
  const cursorX = (clientX - this._core.store.state.translateX) / this._core.store.state.scale;
15357
15476
  const cursorY = (clientY - this._core.store.state.translateY) / this._core.store.state.scale;
15358
15477
  this.initialSelectionGroupRotation = selectionGroup.rotation;
@@ -15369,8 +15488,9 @@ class KritzelRotationHandler extends KritzelBaseHandler {
15369
15488
  if (this._core.store.state.isRotating && selectionGroup) {
15370
15489
  const clientX = event.clientX - this._core.store.offsetX;
15371
15490
  const clientY = event.clientY - this._core.store.offsetY;
15372
- const groupCenterX = selectionGroup.translateX + selectionGroup.width / 2 / this._core.store.state.scale;
15373
- const groupCenterY = selectionGroup.translateY + selectionGroup.height / 2 / this._core.store.state.scale;
15491
+ const objectScale = selectionGroup.scale || 1;
15492
+ const groupCenterX = selectionGroup.translateX + selectionGroup.width / 2 / objectScale;
15493
+ const groupCenterY = selectionGroup.translateY + selectionGroup.height / 2 / objectScale;
15374
15494
  const cursorX = (clientX - this._core.store.state.translateX) / this._core.store.state.scale;
15375
15495
  const cursorY = (clientY - this._core.store.state.translateY) / this._core.store.state.scale;
15376
15496
  const currentRotation = Math.atan2(groupCenterY - cursorY, groupCenterX - cursorX);
@@ -15388,8 +15508,9 @@ class KritzelRotationHandler extends KritzelBaseHandler {
15388
15508
  if (this._core.store.state.isRotating && selectionGroup) {
15389
15509
  const clientX = Math.round(firstTouch.clientX - this._core.store.offsetX);
15390
15510
  const clientY = Math.round(firstTouch.clientY - this._core.store.offsetY);
15391
- const groupCenterX = selectionGroup.translateX + selectionGroup.width / 2 / this._core.store.state.scale;
15392
- const groupCenterY = selectionGroup.translateY + selectionGroup.height / 2 / this._core.store.state.scale;
15511
+ const objectScale = selectionGroup.scale || 1;
15512
+ const groupCenterX = selectionGroup.translateX + selectionGroup.width / 2 / objectScale;
15513
+ const groupCenterY = selectionGroup.translateY + selectionGroup.height / 2 / objectScale;
15393
15514
  const cursorX = (clientX - this._core.store.state.translateX) / this._core.store.state.scale;
15394
15515
  const cursorY = (clientY - this._core.store.state.translateY) / this._core.store.state.scale;
15395
15516
  const currentRotation = Math.atan2(groupCenterY - cursorY, groupCenterX - cursorX);
@@ -31291,7 +31412,7 @@ const DEFAULT_TEXT_CONFIG = {
31291
31412
  ],
31292
31413
  };
31293
31414
 
31294
- export { Doc as $, isNode as A, min$2 as B, pow as C, HocuspocusProviderWebsocket as D, KritzelPath as E, KritzelImage as F, KritzelBrushTool as G, HocuspocusProvider as H, KritzelEraserTool as I, KritzelImageTool as J, KritzelText as K, KritzelTextTool as L, KritzelSelectionTool as M, IndexedDBSyncProvider as N, Observable$1 as O, KritzelAppStateMap as P, KritzelWorkspace as Q, DEFAULT_BRUSH_CONFIG as R, DEFAULT_TEXT_CONFIG as S, KritzelDevicesHelper as T, KritzelMouseButton as U, KritzelKeyboardHelper as V, KritzelBaseHandler as W, KritzelToolRegistry as X, KritzelSelectionBox as Y, KritzelSelectionGroup as Z, KritzelBaseObject as _, writeVarUint8Array$2 as a, DEFAULT_SYNC_CONFIG as a0, UndoManager as a1, ObjectHelper as a2, KritzelEventHelper as a3, KritzelBaseTool as a4, readVarUint8Array$2 as b, applyUpdate as c, encodeStateVector as d, encodeStateAsUpdate as e, createEncoder$1 as f, createDecoder$1 as g, create$8 as h, fromBase64 as i, toBase64 as j, createUint8ArrayFromArrayBuffer as k, offChange as l, readVarString$2 as m, floor$2 as n, onChange as o, getUnixTime$1 as p, equalityDeep$1 as q, readVarUint$2 as r, setIfUndefined$1 as s, toUint8Array$1 as t, writeVarString$2 as u, varStorage as v, writeVarUint$2 as w, map as x, ObservableV2 as y, length$3 as z };
31295
- //# sourceMappingURL=default-text-tool.config-DzqpOikl.js.map
31415
+ export { KritzelSelectionGroup as $, isNode as A, min$2 as B, pow as C, HocuspocusProviderWebsocket as D, KritzelPath as E, KritzelImage as F, KritzelBrushTool as G, HocuspocusProvider as H, KritzelEraserTool as I, KritzelImageTool as J, KritzelText as K, KritzelTextTool as L, KritzelCursorHelper as M, KritzelSelectionTool as N, Observable$1 as O, IndexedDBSyncProvider as P, KritzelAppStateMap as Q, KritzelWorkspace as R, DEFAULT_BRUSH_CONFIG as S, DEFAULT_TEXT_CONFIG as T, KritzelDevicesHelper as U, KritzelMouseButton as V, KritzelIconRegistry as W, KritzelKeyboardHelper as X, KritzelBaseHandler as Y, KritzelToolRegistry as Z, KritzelSelectionBox as _, writeVarUint8Array$2 as a, KritzelBaseObject as a0, Doc as a1, DEFAULT_SYNC_CONFIG as a2, UndoManager as a3, ObjectHelper as a4, KritzelEventHelper as a5, KritzelBaseTool as a6, readVarUint8Array$2 as b, applyUpdate as c, encodeStateVector as d, encodeStateAsUpdate as e, createEncoder$1 as f, createDecoder$1 as g, create$8 as h, fromBase64 as i, toBase64 as j, createUint8ArrayFromArrayBuffer as k, offChange as l, readVarString$2 as m, floor$2 as n, onChange as o, getUnixTime$1 as p, equalityDeep$1 as q, readVarUint$2 as r, setIfUndefined$1 as s, toUint8Array$1 as t, writeVarString$2 as u, varStorage as v, writeVarUint$2 as w, map as x, ObservableV2 as y, length$3 as z };
31416
+ //# sourceMappingURL=default-text-tool.config-BvCgOiKA.js.map
31296
31417
 
31297
- //# sourceMappingURL=default-text-tool.config-DzqpOikl.js.map
31418
+ //# sourceMappingURL=default-text-tool.config-BvCgOiKA.js.map