kritzel-stencil 0.0.140 → 0.0.142

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (217) hide show
  1. package/dist/cjs/{index-nzUNdMPh.js → index-DcTwXs_q.js} +47 -22
  2. package/dist/cjs/index-DcTwXs_q.js.map +1 -0
  3. package/dist/cjs/index-SaGfCHX3.js +16452 -0
  4. package/dist/cjs/index-SaGfCHX3.js.map +1 -0
  5. package/dist/cjs/index.cjs.js +1 -1
  6. package/dist/cjs/kritzel-brush-style.cjs.entry.js +1 -1
  7. package/dist/cjs/kritzel-color_22.cjs.entry.js +134 -96
  8. package/dist/cjs/loader.cjs.js +2 -2
  9. package/dist/cjs/stencil.cjs.js +3 -3
  10. package/dist/cjs/stencil.cjs.js.map +1 -1
  11. package/dist/collection/classes/commands/add-object.command.js +1 -0
  12. package/dist/collection/classes/commands/add-object.command.js.map +1 -1
  13. package/dist/collection/classes/commands/base.command.js +2 -0
  14. package/dist/collection/classes/commands/base.command.js.map +1 -1
  15. package/dist/collection/classes/commands/remove-object.command.js +1 -3
  16. package/dist/collection/classes/commands/remove-object.command.js.map +1 -1
  17. package/dist/collection/classes/commands/update-object.command.js +2 -0
  18. package/dist/collection/classes/commands/update-object.command.js.map +1 -1
  19. package/dist/collection/classes/core/command-manager.class.js +51 -0
  20. package/dist/collection/classes/core/command-manager.class.js.map +1 -0
  21. package/dist/collection/classes/core/core.class.js +30 -14
  22. package/dist/collection/classes/core/core.class.js.map +1 -1
  23. package/dist/collection/classes/core/history.class.js +2 -40
  24. package/dist/collection/classes/core/history.class.js.map +1 -1
  25. package/dist/collection/classes/core/viewport.class.js +16 -5
  26. package/dist/collection/classes/core/viewport.class.js.map +1 -1
  27. package/dist/collection/classes/handlers/context-menu.handler.js +1 -1
  28. package/dist/collection/classes/handlers/context-menu.handler.js.map +1 -1
  29. package/dist/collection/classes/handlers/key.handler.js +2 -2
  30. package/dist/collection/classes/handlers/key.handler.js.map +1 -1
  31. package/dist/collection/classes/handlers/move.handler.js +11 -6
  32. package/dist/collection/classes/handlers/move.handler.js.map +1 -1
  33. package/dist/collection/classes/handlers/resize.handler.js +29 -5
  34. package/dist/collection/classes/handlers/resize.handler.js.map +1 -1
  35. package/dist/collection/classes/handlers/rotation.handler.js +2 -2
  36. package/dist/collection/classes/handlers/rotation.handler.js.map +1 -1
  37. package/dist/collection/classes/handlers/selection.handler.js +4 -4
  38. package/dist/collection/classes/handlers/selection.handler.js.map +1 -1
  39. package/dist/collection/classes/objects/base-object.class.js +15 -14
  40. package/dist/collection/classes/objects/base-object.class.js.map +1 -1
  41. package/dist/collection/classes/objects/custom-element.class.js +7 -1
  42. package/dist/collection/classes/objects/custom-element.class.js.map +1 -1
  43. package/dist/collection/classes/objects/text.class.js +189 -82
  44. package/dist/collection/classes/objects/text.class.js.map +1 -1
  45. package/dist/collection/classes/tools/brush-tool.class.js +2 -2
  46. package/dist/collection/classes/tools/brush-tool.class.js.map +1 -1
  47. package/dist/collection/classes/tools/eraser-tool.class.js +2 -2
  48. package/dist/collection/classes/tools/eraser-tool.class.js.map +1 -1
  49. package/dist/collection/classes/tools/image-tool.class.js +1 -1
  50. package/dist/collection/classes/tools/image-tool.class.js.map +1 -1
  51. package/dist/collection/classes/tools/selection-tool.class.js +2 -2
  52. package/dist/collection/classes/tools/selection-tool.class.js.map +1 -1
  53. package/dist/collection/classes/tools/text-tool.class.js +17 -13
  54. package/dist/collection/classes/tools/text-tool.class.js.map +1 -1
  55. package/dist/collection/collection-manifest.json +2 -2
  56. package/dist/collection/components/core/kritzel-cursor-trail/kritzel-cursor-trail.js +0 -1
  57. package/dist/collection/components/core/kritzel-cursor-trail/kritzel-cursor-trail.js.map +1 -1
  58. package/dist/collection/components/core/kritzel-editor/kritzel-editor.js +4 -8
  59. package/dist/collection/components/core/kritzel-editor/kritzel-editor.js.map +1 -1
  60. package/dist/collection/components/core/kritzel-engine/kritzel-engine.css +21 -8
  61. package/dist/collection/components/core/kritzel-engine/kritzel-engine.js +33 -37
  62. package/dist/collection/components/core/kritzel-engine/kritzel-engine.js.map +1 -1
  63. package/dist/collection/components/shared/kritzel-brush-style/kritzel-brush-style.js +1 -2
  64. package/dist/collection/components/shared/kritzel-brush-style/kritzel-brush-style.js.map +1 -1
  65. package/dist/collection/components/shared/kritzel-color/kritzel-color.js +3 -3
  66. package/dist/collection/components/shared/kritzel-color-palette/kritzel-color-palette.js +3 -4
  67. package/dist/collection/components/shared/kritzel-color-palette/kritzel-color-palette.js.map +1 -1
  68. package/dist/collection/components/shared/kritzel-dropdown/kritzel-dropdown.js +5 -6
  69. package/dist/collection/components/shared/kritzel-dropdown/kritzel-dropdown.js.map +1 -1
  70. package/dist/collection/components/shared/kritzel-font/kritzel-font.js +3 -3
  71. package/dist/collection/components/shared/kritzel-font-family/kritzel-font-family.js +2 -3
  72. package/dist/collection/components/shared/kritzel-font-family/kritzel-font-family.js.map +1 -1
  73. package/dist/collection/components/shared/kritzel-font-size/kritzel-font-size.js +2 -3
  74. package/dist/collection/components/shared/kritzel-font-size/kritzel-font-size.js.map +1 -1
  75. package/dist/collection/components/shared/kritzel-icon/kritzel-icon.js +5 -5
  76. package/dist/collection/components/shared/kritzel-menu/kritzel-menu.js +0 -2
  77. package/dist/collection/components/shared/kritzel-menu/kritzel-menu.js.map +1 -1
  78. package/dist/collection/components/shared/kritzel-menu-item/kritzel-menu-item.js +0 -2
  79. package/dist/collection/components/shared/kritzel-menu-item/kritzel-menu-item.js.map +1 -1
  80. package/dist/collection/components/shared/kritzel-portal/kritzel-portal.js +5 -6
  81. package/dist/collection/components/shared/kritzel-portal/kritzel-portal.js.map +1 -1
  82. package/dist/collection/components/shared/kritzel-split-button/kritzel-split-button.js +4 -5
  83. package/dist/collection/components/shared/kritzel-split-button/kritzel-split-button.js.map +1 -1
  84. package/dist/collection/components/shared/kritzel-stroke-size/kritzel-stroke-size.js +1 -2
  85. package/dist/collection/components/shared/kritzel-stroke-size/kritzel-stroke-size.js.map +1 -1
  86. package/dist/collection/components/shared/kritzel-tooltip/kritzel-tooltip.js +3 -4
  87. package/dist/collection/components/shared/kritzel-tooltip/kritzel-tooltip.js.map +1 -1
  88. package/dist/collection/components/ui/kritzel-context-menu/kritzel-context-menu.js +0 -2
  89. package/dist/collection/components/ui/kritzel-context-menu/kritzel-context-menu.js.map +1 -1
  90. package/dist/collection/components/ui/kritzel-control-brush-config/kritzel-control-brush-config.js +1 -2
  91. package/dist/collection/components/ui/kritzel-control-brush-config/kritzel-control-brush-config.js.map +1 -1
  92. package/dist/collection/components/ui/kritzel-control-text-config/kritzel-control-text-config.js +1 -2
  93. package/dist/collection/components/ui/kritzel-control-text-config/kritzel-control-text-config.js.map +1 -1
  94. package/dist/collection/components/ui/kritzel-controls/kritzel-controls.js +1 -3
  95. package/dist/collection/components/ui/kritzel-controls/kritzel-controls.js.map +1 -1
  96. package/dist/collection/components/ui/kritzel-workspace-manager/kritzel-workspace-manager.js +0 -2
  97. package/dist/collection/components/ui/kritzel-workspace-manager/kritzel-workspace-manager.js.map +1 -1
  98. package/dist/collection/interfaces/object.interface.js.map +1 -1
  99. package/dist/components/index.js +3 -3
  100. package/dist/components/kritzel-brush-style.js +4 -4
  101. package/dist/components/kritzel-color-palette.js +1 -1
  102. package/dist/components/kritzel-color.js +1 -1
  103. package/dist/components/kritzel-context-menu.js +1 -1
  104. package/dist/components/kritzel-control-brush-config.js +1 -1
  105. package/dist/components/kritzel-control-text-config.js +1 -1
  106. package/dist/components/kritzel-controls.js +1 -1
  107. package/dist/components/kritzel-cursor-trail.js +1 -1
  108. package/dist/components/kritzel-dropdown.js +1 -1
  109. package/dist/components/kritzel-editor.js +25 -25
  110. package/dist/components/kritzel-engine.js +1 -1
  111. package/dist/components/kritzel-font-family.js +1 -1
  112. package/dist/components/kritzel-font-size.js +1 -1
  113. package/dist/components/kritzel-font.js +1 -1
  114. package/dist/components/kritzel-icon.js +1 -1
  115. package/dist/components/kritzel-menu-item.js +1 -1
  116. package/dist/components/kritzel-menu.js +1 -1
  117. package/dist/components/kritzel-portal.js +1 -1
  118. package/dist/components/kritzel-split-button.js +1 -1
  119. package/dist/components/kritzel-stroke-size.js +1 -1
  120. package/dist/components/kritzel-tooltip.js +1 -1
  121. package/dist/components/kritzel-utility-panel.js +1 -1
  122. package/dist/components/kritzel-workspace-manager.js +1 -1
  123. package/dist/components/{p-BQJhnpY3.js → p-BEKicPnH.js} +3 -3
  124. package/dist/components/{p-BQJhnpY3.js.map → p-BEKicPnH.js.map} +1 -1
  125. package/dist/components/{p-D6FeQRzi.js → p-BFNwskCY.js} +4 -4
  126. package/dist/components/{p-D6FeQRzi.js.map → p-BFNwskCY.js.map} +1 -1
  127. package/dist/components/{p-sHDCqDbD.js → p-BJbN3vca.js} +6 -6
  128. package/dist/components/{p-sHDCqDbD.js.map → p-BJbN3vca.js.map} +1 -1
  129. package/dist/components/{p-bC64Ng59.js → p-ByAzDzS5.js} +3 -3
  130. package/dist/components/{p-bC64Ng59.js.map → p-ByAzDzS5.js.map} +1 -1
  131. package/dist/components/{p-CE_sOMS2.js → p-BycHaC-9.js} +4 -4
  132. package/dist/components/{p-CE_sOMS2.js.map → p-BycHaC-9.js.map} +1 -1
  133. package/dist/components/{p-SKH0G2nM.js → p-C8calcQF.js} +17 -17
  134. package/dist/components/{p-SKH0G2nM.js.map → p-C8calcQF.js.map} +1 -1
  135. package/dist/components/{p-BYanlgdq.js → p-C9hrbrUN.js} +27 -14
  136. package/dist/components/p-C9hrbrUN.js.map +1 -0
  137. package/dist/components/{p-JYqCBcMd.js → p-CEn1WeG3.js} +8 -8
  138. package/dist/components/{p-JYqCBcMd.js.map → p-CEn1WeG3.js.map} +1 -1
  139. package/dist/components/{p-C7UWRUAy.js → p-CGb-8cK4.js} +3 -3
  140. package/dist/components/{p-C7UWRUAy.js.map → p-CGb-8cK4.js.map} +1 -1
  141. package/dist/components/p-CZk591FE.js +14739 -0
  142. package/dist/components/p-CZk591FE.js.map +1 -0
  143. package/dist/components/{p-BJZudenH.js → p-C_hSH2nN.js} +3 -3
  144. package/dist/components/{p-BJZudenH.js.map → p-C_hSH2nN.js.map} +1 -1
  145. package/dist/components/{p-D2eJXNMx.js → p-CieOx1XL.js} +4 -4
  146. package/dist/components/{p-D2eJXNMx.js.map → p-CieOx1XL.js.map} +1 -1
  147. package/dist/components/{p-BFLXutiB.js → p-Co5lU_7h.js} +10 -10
  148. package/dist/components/{p-BFLXutiB.js.map → p-Co5lU_7h.js.map} +1 -1
  149. package/dist/components/{p-BV5iL9W6.js → p-CziwfEQh.js} +253 -181
  150. package/dist/components/p-CziwfEQh.js.map +1 -0
  151. package/dist/components/{p-sq9jgfX0.js → p-D27d2rKT.js} +3 -3
  152. package/dist/components/{p-sq9jgfX0.js.map → p-D27d2rKT.js.map} +1 -1
  153. package/dist/components/{p-DFO-6kuA.js → p-DPxzgBs0.js} +3 -3
  154. package/dist/components/{p-DFO-6kuA.js.map → p-DPxzgBs0.js.map} +1 -1
  155. package/dist/components/{p-vNnVlsJt.js → p-D_RcVGj0.js} +4 -4
  156. package/dist/components/{p-vNnVlsJt.js.map → p-D_RcVGj0.js.map} +1 -1
  157. package/dist/components/{p-C-ozL_Es.js → p-DqsgZIHC.js} +4 -4
  158. package/dist/components/{p-C-ozL_Es.js.map → p-DqsgZIHC.js.map} +1 -1
  159. package/dist/components/{p-Dh61W3GT.js → p-DzyZA2GT.js} +5 -5
  160. package/dist/components/{p-Dh61W3GT.js.map → p-DzyZA2GT.js.map} +1 -1
  161. package/dist/components/{p-DbmQ5DrU.js → p-dcR2uxM3.js} +5 -5
  162. package/dist/components/{p-DbmQ5DrU.js.map → p-dcR2uxM3.js.map} +1 -1
  163. package/dist/components/{p-BLc8TzcU.js → p-fiFoOjv0.js} +7 -7
  164. package/dist/components/{p-BLc8TzcU.js.map → p-fiFoOjv0.js.map} +1 -1
  165. package/dist/components/{p-IgPm36bH.js → p-gCHmJzc2.js} +4 -4
  166. package/dist/components/{p-IgPm36bH.js.map → p-gCHmJzc2.js.map} +1 -1
  167. package/dist/esm/{index-oCOlsFCN.js → index-Cw77zP6g.js} +47 -22
  168. package/dist/esm/index-Cw77zP6g.js.map +1 -0
  169. package/dist/esm/index-SIM_s7ed.js +16424 -0
  170. package/dist/esm/index-SIM_s7ed.js.map +1 -0
  171. package/dist/esm/index.js +1 -1
  172. package/dist/esm/kritzel-brush-style.entry.js +1 -1
  173. package/dist/esm/kritzel-color_22.entry.js +134 -96
  174. package/dist/esm/loader.js +3 -3
  175. package/dist/esm/stencil.js +4 -4
  176. package/dist/esm/stencil.js.map +1 -1
  177. package/dist/stencil/index.esm.js +1 -1
  178. package/dist/stencil/{p-25d1e040.entry.js → p-8b831c94.entry.js} +2 -2
  179. package/dist/stencil/p-Cw77zP6g.js +3 -0
  180. package/dist/stencil/p-Cw77zP6g.js.map +1 -0
  181. package/dist/stencil/p-SIM_s7ed.js +2 -0
  182. package/dist/stencil/p-SIM_s7ed.js.map +1 -0
  183. package/dist/stencil/p-b697b2c1.entry.js +2 -0
  184. package/dist/stencil/p-b697b2c1.entry.js.map +1 -0
  185. package/dist/stencil/stencil.esm.js +1 -1
  186. package/dist/stencil/stencil.esm.js.map +1 -1
  187. package/dist/types/classes/commands/add-object.command.d.ts +2 -2
  188. package/dist/types/classes/commands/base.command.d.ts +2 -1
  189. package/dist/types/classes/commands/remove-object.command.d.ts +2 -2
  190. package/dist/types/classes/commands/update-object.command.d.ts +2 -2
  191. package/dist/types/classes/core/command-manager.class.d.ts +16 -0
  192. package/dist/types/classes/core/core.class.d.ts +4 -0
  193. package/dist/types/classes/core/history.class.d.ts +0 -8
  194. package/dist/types/classes/core/viewport.class.d.ts +2 -0
  195. package/dist/types/classes/handlers/resize.handler.d.ts +1 -0
  196. package/dist/types/classes/objects/base-object.class.d.ts +6 -4
  197. package/dist/types/classes/objects/text.class.d.ts +33 -12
  198. package/dist/types/interfaces/object.interface.d.ts +1 -3
  199. package/dist/types/stencil-public-runtime.d.ts +36 -12
  200. package/package.json +7 -2
  201. package/dist/cjs/index-Clh2g9JM.js +0 -2850
  202. package/dist/cjs/index-Clh2g9JM.js.map +0 -1
  203. package/dist/cjs/index-nzUNdMPh.js.map +0 -1
  204. package/dist/components/p-BV5iL9W6.js.map +0 -1
  205. package/dist/components/p-BYanlgdq.js.map +0 -1
  206. package/dist/components/p-C5sTCwe3.js +0 -1171
  207. package/dist/components/p-C5sTCwe3.js.map +0 -1
  208. package/dist/esm/index-BAbkwyRx.js +0 -2822
  209. package/dist/esm/index-BAbkwyRx.js.map +0 -1
  210. package/dist/esm/index-oCOlsFCN.js.map +0 -1
  211. package/dist/stencil/p-BAbkwyRx.js +0 -2
  212. package/dist/stencil/p-BAbkwyRx.js.map +0 -1
  213. package/dist/stencil/p-fe465059.entry.js +0 -2
  214. package/dist/stencil/p-fe465059.entry.js.map +0 -1
  215. package/dist/stencil/p-oCOlsFCN.js +0 -3
  216. package/dist/stencil/p-oCOlsFCN.js.map +0 -1
  217. /package/dist/stencil/{p-25d1e040.entry.js.map → p-8b831c94.entry.js.map} +0 -0
@@ -20,6 +20,7 @@ export class KritzelEngine {
20
20
  workspace;
21
21
  onWorkspaceChange(newWorkspace) {
22
22
  if (this.core.store.state.activeWorkspace !== newWorkspace) {
23
+ this.core.beforeWorkspaceChange();
23
24
  this.core.initializeWorkspace(newWorkspace);
24
25
  }
25
26
  }
@@ -205,19 +206,19 @@ export class KritzelEngine {
205
206
  object.scale = object.scale ? object.scale : this.core.store.state.scale;
206
207
  object.zIndex = this.core.store.currentZIndex;
207
208
  const command = new AddObjectCommand(this.core, this, object);
208
- this.core.history.executeCommand(command);
209
+ this.core.commandManager.executeCommand(command);
209
210
  return object;
210
211
  }
211
212
  async updateObject(object, updatedProperties) {
212
213
  this.core.deselectAllObjects();
213
214
  const command = new UpdateObjectCommand(this.core, this, object, updatedProperties);
214
- this.core.history.executeCommand(command);
215
+ this.core.commandManager.executeCommand(command);
215
216
  return object;
216
217
  }
217
218
  async removeObject(object) {
218
219
  this.core.deselectAllObjects();
219
220
  const command = new RemoveObjectCommand(this.core, this, object);
220
- this.core.history.executeCommand(command);
221
+ this.core.commandManager.executeCommand(command);
221
222
  return object;
222
223
  }
223
224
  async getSelectedObjects() {
@@ -241,7 +242,7 @@ export class KritzelEngine {
241
242
  async centerObjectInViewport(object) {
242
243
  object.centerInViewport();
243
244
  const command = new UpdateObjectCommand(this.core, this, object, object);
244
- this.core.history.executeCommand(command);
245
+ this.core.commandManager.executeCommand(command);
245
246
  return object;
246
247
  }
247
248
  async getCopiedObjects() {
@@ -303,20 +304,25 @@ export class KritzelEngine {
303
304
  _handleActiveToolChange(activeTool) {
304
305
  if (!(activeTool instanceof KritzelSelectionTool)) {
305
306
  this.core.clearSelection();
307
+ this.core.store.state.selectionBox = null;
308
+ this.core.store.state.isSelecting = false;
309
+ this.core.store.state.isResizeHandleSelected = false;
310
+ this.core.store.state.isRotationHandleSelected = false;
306
311
  }
307
312
  this.core.store.state.skipContextMenu = false;
308
313
  this.core.store.state.copiedObjects = null;
309
314
  this.activeToolChange.emit(activeTool);
310
315
  KritzelKeyboardHelper.forceHideKeyboard();
316
+ this.core.rerender();
311
317
  }
312
318
  render() {
313
319
  const computedStyle = window.getComputedStyle(this.host);
314
320
  const baseHandleSizePx = computedStyle.getPropertyValue('--kritzel-selection-handle-size').trim() || '6px';
315
321
  const baseHandleSize = parseFloat(baseHandleSizePx);
316
322
  const baseHandleTouchSize = baseHandleSize * 2 < 14 ? 14 : baseHandleSize;
317
- const viewportCenterX = (this.core.store.state.viewportWidth / 2) + this.core.store.state.translateX;
318
- const viewportCenterY = (this.core.store.state.viewportHeight / 2) + this.core.store.state.translateY;
319
- return (h(Host, { key: 'e14b9b0d5ece944a28dbdfd55cd15d3889d344ca' }, h("div", { key: '5bb0cf225392a46c81ccc3fc9cecf08ccf5451dd', class: "debug-panel", style: { display: this.core.store.state.debugInfo.showViewportInfo ? 'block' : 'none' } }, h("div", { key: '49c54b5c2cf67a3bf98319a87cc6bf43738e260a' }, "ActiveWorkspaceId: ", this.core.store.state?.activeWorkspace?.id), h("div", { key: 'c094fbdee828a5699901e5ba09981fdd2970533a' }, "ActiveWorkspaceName: ", this.core.store.state?.activeWorkspace?.name), h("div", { key: '0b260c50045a2dc90f5131bdec5007c5260f435f' }, "TranslateX: ", this.core.store.state?.translateX), h("div", { key: '36ac3660b4dbc902cc6ec4c042f63b03a8b5f38e' }, "TranslateY: ", this.core.store.state?.translateY), h("div", { key: '4d74e2b8b8df35a8f2423e8210662d614e98c9f3' }, "ViewportWidth: ", this.core.store.state?.viewportWidth), h("div", { key: '2c583b35f9b975191bd30f5bcc44a847d442a75b' }, "ViewportHeight: ", this.core.store.state?.viewportHeight), h("div", { key: 'b8f4de7566c250e637f7fb161ee5d4afcf55a862' }, "Scale: ", this.core.store.state?.scale), h("div", { key: '615063733b8a598d24c090397cbda94196f77861' }, "ActiveTool: ", this.core.store.state?.activeTool?.name), h("div", { key: '66f5d805c6a824bccef568b137a4674007050a1e' }, "HasViewportChanged: ", this.core.store.state?.hasViewportChanged ? 'true' : 'false'), h("div", { key: '91f0313f2cfbc7f123be53d8611d0e5f3cfadfae' }, "IsEnabled: ", this.core.store.state?.isEnabled ? 'true' : 'false'), h("div", { key: '944af3ec28b0e7dcf4696477adbd3182d2371196' }, "IsScaling: ", this.core.store.state?.isScaling ? 'true' : 'false'), h("div", { key: '82cfb1b949a3612f786a2d41074286996c9b18e7' }, "IsPanning: ", this.core.store.state?.isPanning ? 'true' : 'false'), h("div", { key: '743ced0847a98b34c404216e888fc24445e291d5' }, "IsSelecting: ", this.isSelecting ? 'true' : 'false'), h("div", { key: '56f7de0f7eb99ee11f4e9c30f14b961c6498415a' }, "IsSelectionActive: ", this.isSelectionActive ? 'true' : 'false'), h("div", { key: '41c55a52a4a3cb1a04e0bb0249e7095a57c52f78' }, "IsResizeHandleSelected: ", this.core.store.state.isResizeHandleSelected ? 'true' : 'false'), h("div", { key: 'f02fbeae6e0e0cb9aca887314f4a5753712373fa' }, "IsRotationHandleSelected: ", this.core.store.state.isRotationHandleSelected ? 'true' : 'false'), h("div", { key: '1ff7b7f138a51c5cc16894483c908f7bde31be40' }, "IsDrawing: ", this.core.store.state.isDrawing ? 'true' : 'false'), h("div", { key: '25b4a1c609dc968e70636fcf73d330996a137342' }, "IsWriting: ", this.core.store.state.isWriting ? 'true' : 'false'), h("div", { key: 'd9de8d6553664633a0462130ee71fbbb80984ff4' }, "PointerX: ", this.core.store.state?.pointerX), h("div", { key: '3f7d3604c3da89fc3c98fb4704474d41773a51fa' }, "PointerY: ", this.core.store.state?.pointerY), h("div", { key: 'e32a4265b7ca234766e4ceb5d98c7898917423ef' }, "SelectedObjects: ", this.core.store.state.selectionGroup?.objects.length || 0), h("div", { key: 'c0d4bd0aab851c1ab4c1b1d2fd99db7397538dcd' }, "ViewportCenter: (", viewportCenterX.toFixed(2), ", ", viewportCenterY.toFixed(2), ")")), h("div", { key: '47cdf9bd5ae9e88ac39376852b4fcf8ebbf44626', id: "origin", class: "origin", style: {
323
+ const viewportCenterX = this.core.store.state.viewportWidth / 2 + this.core.store.state.translateX;
324
+ const viewportCenterY = this.core.store.state.viewportHeight / 2 + this.core.store.state.translateY;
325
+ return (h(Host, { key: 'f7fc3c4c6a91ccdabb83832671e36ebf49ce56c0' }, h("div", { key: 'f6a2ce9e78a1d0e9ea0590035f5b8811f62c8633', class: "debug-panel", style: { display: this.core.store.state.debugInfo.showViewportInfo ? 'block' : 'none' } }, h("div", { key: '5752045746f275223bd42c16dd7e848adaaae9f2' }, "ActiveWorkspaceId: ", this.core.store.state?.activeWorkspace?.id), h("div", { key: 'd99595b135243a7b69a583be33f7b195908ec716' }, "ActiveWorkspaceName: ", this.core.store.state?.activeWorkspace?.name), h("div", { key: '7cecdccad47d3957370ea923f3dfbcd618b5d28e' }, "TranslateX: ", this.core.store.state?.translateX), h("div", { key: '3a5ed989f2343eda92c7c81855c785dbf58fa770' }, "TranslateY: ", this.core.store.state?.translateY), h("div", { key: 'b78074a29463276300ce498b2ddb328cef9026cd' }, "ViewportWidth: ", this.core.store.state?.viewportWidth), h("div", { key: 'd4c8dcfddfa1984eedf695d74f9401fc3284c60b' }, "ViewportHeight: ", this.core.store.state?.viewportHeight), h("div", { key: '566b6dc9afd904ee49e59587ed664e5f46decead' }, "Scale: ", this.core.store.state?.scale), h("div", { key: 'd3feb7a11727c4337ca75a26b3275a0b5d639961' }, "ActiveTool: ", this.core.store.state?.activeTool?.name), h("div", { key: '3991c34df53c7d6fd97c83b0d4b8c9fb438c88fc' }, "HasViewportChanged: ", this.core.store.state?.hasViewportChanged ? 'true' : 'false'), h("div", { key: '5a4244b43871f96d08144483352064804f04e538' }, "IsEnabled: ", this.core.store.state?.isEnabled ? 'true' : 'false'), h("div", { key: '197655c09e24d624ea4dcd312169aeb449ed57ce' }, "IsScaling: ", this.core.store.state?.isScaling ? 'true' : 'false'), h("div", { key: 'a3e4a75a9853c8cee1485cbf8621377466babf90' }, "IsPanning: ", this.core.store.state?.isPanning ? 'true' : 'false'), h("div", { key: '171e0df3e1856e9fe8cd18be5c258c7472317453' }, "IsSelecting: ", this.isSelecting ? 'true' : 'false'), h("div", { key: '66f5a56333dbac1da34e01f5ee1f577e1a964701' }, "IsSelectionActive: ", this.isSelectionActive ? 'true' : 'false'), h("div", { key: 'b869e07b76c2fa21ab5383788e81a40ffdad1b2c' }, "IsResizeHandleSelected: ", this.core.store.state.isResizeHandleSelected ? 'true' : 'false'), h("div", { key: 'd936326f8ea675e170d418f4e97a5d46057bc385' }, "IsRotationHandleSelected: ", this.core.store.state.isRotationHandleSelected ? 'true' : 'false'), h("div", { key: '8594489402204ae4a9cd1bc7795169dbfa2d633d' }, "IsDrawing: ", this.core.store.state.isDrawing ? 'true' : 'false'), h("div", { key: 'f7a254dc35bfe6d42c32d25d0f277b211d86b03f' }, "IsWriting: ", this.core.store.state.isWriting ? 'true' : 'false'), h("div", { key: '053ebd21504bfa3622e4b3e965e39f707c19794d' }, "PointerX: ", this.core.store.state?.pointerX), h("div", { key: 'f330c65821326062874441355352134927760d61' }, "PointerY: ", this.core.store.state?.pointerY), h("div", { key: 'f6c6902562f3e74afa3a0426e72b0c803977250b' }, "SelectedObjects: ", this.core.store.state.selectionGroup?.objects.length || 0), h("div", { key: '99a2d4280d5e79d7dd9a7a27d809e70f90eac38b' }, "ViewportCenter: (", viewportCenterX.toFixed(2), ", ", viewportCenterY.toFixed(2), ")")), h("div", { key: 'dac21fa0ac9487b74c89ac7408e80d9fb89b4558', id: "origin", class: "origin", style: {
320
326
  transform: `matrix(${this.core.store.state?.scale}, 0, 0, ${this.core.store.state?.scale}, ${this.core.store.state?.translateX}, ${this.core.store.state?.translateY})`,
321
327
  } }, this.core.store.state.objectsMap.allObjects()?.map(object => {
322
328
  return (h("div", { key: object.id, style: {
@@ -344,42 +350,36 @@ export class KritzelEngine {
344
350
  borderStyle: 'solid',
345
351
  padding: object.padding + 'px',
346
352
  overflow: 'visible',
347
- } }, KritzelClassHelper.isInstanceOf(object, 'KritzelPath') && (h("svg", { ref: el => (el ? object.mount(el) : object.unmount()), xmlns: "http://www.w3.org/2000/svg", style: {
353
+ } }, KritzelClassHelper.isInstanceOf(object, 'KritzelPath') && (h("svg", { ref: el => object.mount(el), xmlns: "http://www.w3.org/2000/svg", style: {
348
354
  height: object?.height.toString(),
349
355
  width: object?.width.toString(),
350
356
  position: 'absolute',
351
357
  overflow: 'visible',
352
- }, viewBox: object?.viewBox }, h("path", { d: object?.d, fill: object.fill, stroke: object?.stroke }))), KritzelClassHelper.isInstanceOf(object, 'KritzelImage') && (h("img", { ref: el => (el ? object.mount(el) : object.unmount()), src: object.src, style: {
358
+ }, viewBox: object?.viewBox }, h("path", { d: object?.d, fill: object.fill, stroke: object?.stroke }))), KritzelClassHelper.isInstanceOf(object, 'KritzelImage') && (h("img", { ref: el => object.mount(el), src: object.src, style: {
353
359
  width: '100%',
354
360
  height: '100%',
355
361
  userSelect: 'none',
356
362
  pointerEvents: 'none',
357
- }, draggable: false, onDragStart: e => e.preventDefault() })), KritzelClassHelper.isInstanceOf(object, 'KritzelText') && (h("textarea", { ref: el => (el ? object.mount(el) : object.unmount()), value: object.value, onKeyDown: event => object.handleKeyDown(event), onInput: event => object.handleInput(event), rows: object.rows, style: {
358
- width: '100%',
359
- height: '100%',
360
- color: object.fontColor,
361
- fontSize: object.fontSize?.toString() + 'px',
362
- fontFamily: object.fontFamily,
363
- border: 'none',
364
- outline: 'none',
365
- resize: 'none',
366
- overflow: 'hidden',
367
- display: 'block',
368
- padding: '1px',
369
- whiteSpace: 'nowrap',
370
- pointerEvents: object.isReadonly ? 'none' : 'auto',
371
- cursor: object.isReadonly ? 'default' : 'text',
372
- caretColor: object.isReadonly ? 'transparent' : 'auto',
373
- } })), KritzelClassHelper.isInstanceOf(object, 'KritzelCustomElement') && (h("div", { ref: el => (el ? object.mount(el) : object.unmount()), style: {
363
+ }, draggable: false, onDragStart: e => e.preventDefault() })), KritzelClassHelper.isInstanceOf(object, 'KritzelText') && (h("div", { ref: el => object.mount(el), onPointerDown: e => object.handlePointerDown(e), onPointerMove: e => object.handlePointerMove(e), onPointerUp: e => object.handlePointerUp(e), style: {
364
+ minWidth: object.initialWidth + 'px',
365
+ minHeight: object.initialHeight + 'px',
366
+ maxWidth: '500px',
367
+ height: 'auto',
368
+ width: 'max-content',
369
+ transformOrigin: 'top left',
370
+ transform: `scale(${object.scaleFactor})`,
371
+ backgroundColor: object.backgroundColor,
372
+ overflow: 'visible',
373
+ } })), KritzelClassHelper.isInstanceOf(object, 'KritzelCustomElement') && (h("div", { ref: el => object.mount(el), style: {
374
374
  width: '100%',
375
375
  height: '100%',
376
376
  pointerEvents: 'auto',
377
377
  overflow: 'hidden',
378
378
  display: 'block',
379
- } })), KritzelClassHelper.isInstanceOf(object, 'KritzelSelectionGroup') && (h("div", { ref: el => (el ? object.mount(el) : object.unmount()), style: {
379
+ } })), KritzelClassHelper.isInstanceOf(object, 'KritzelSelectionGroup') && (h("div", { ref: el => object.mount(el), style: {
380
380
  width: '100%',
381
381
  height: '100%',
382
- } })), KritzelClassHelper.isInstanceOf(object, 'KrtizelSelectionBox') && (h("div", { ref: el => (el ? object.mount(el) : object.unmount()), style: {
382
+ } })), KritzelClassHelper.isInstanceOf(object, 'KrtizelSelectionBox') && (h("div", { ref: el => object.mount(el), style: {
383
383
  width: '100%',
384
384
  height: '100%',
385
385
  backgroundColor: KritzelDevicesHelper.isFirefox() ? object.backgroundColor : 'transparent',
@@ -426,7 +426,7 @@ export class KritzelEngine {
426
426
  }, visibility: object.isSelected && !this.isSelecting ? 'visible' : 'hidden' }), h("circle", { class: "rotation-handle-overlay", cx: object.totalWidth / 2, cy: -((15 * object.scale) / this.core.store.state?.scale), r: `${(baseHandleTouchSize * object.scale) / this.core.store.state?.scale}`, style: {
427
427
  fill: 'transparent',
428
428
  cursor: 'grab',
429
- }, visibility: object.isSelected && !this.isSelecting ? 'visible' : 'hidden' }), h("g", { style: { display: this.core.store.state.debugInfo.showObjectInfo ? 'block' : 'none', pointerEvents: 'none' } }, h("foreignObject", { x: object.totalWidth.toString(), y: "0", width: "400px", height: "160px", style: { minHeight: '0', minWidth: '0', display: object.isDebugInfoVisible ? 'block' : 'none' } }, h("div", { style: { width: '100%', height: '100%' } }, h("div", { style: { whiteSpace: 'nowrap' } }, "zIndex: ", object.zIndex), h("div", { style: { whiteSpace: 'nowrap' } }, "translateX: ", object.translateX), h("div", { style: { whiteSpace: 'nowrap' } }, "translateY: ", object.translateY), h("div", { style: { whiteSpace: 'nowrap' } }, "width: ", object.width), h("div", { style: { whiteSpace: 'nowrap' } }, "height: ", object.height), h("div", { style: { whiteSpace: 'nowrap' } }, "scale: ", object.scale), h("div", { style: { whiteSpace: 'nowrap' } }, "rotation: ", object.rotation), h("div", { style: { whiteSpace: 'nowrap' } }, "x: ", object.x), h("div", { style: { whiteSpace: 'nowrap' } }, "y: ", object.y)))))));
429
+ }, visibility: object.isSelected && !this.isSelecting ? 'visible' : 'hidden' }), h("g", { style: { display: this.core.store.state.debugInfo.showObjectInfo ? 'block' : 'none', pointerEvents: 'none' } }, h("foreignObject", { x: object.totalWidth.toString(), y: "0", width: "400px", height: "160px", style: { minHeight: '0', minWidth: '0', display: object.isDebugInfoVisible ? 'block' : 'none' } }, h("div", { style: { width: '100%', height: '100%' } }, h("div", { style: { whitespace: 'nowrap' } }, "Id: ", object.id), h("div", { style: { whiteSpace: 'nowrap' } }, "width: ", object.width), h("div", { style: { whiteSpace: 'nowrap' } }, "height: ", object.height)))))));
430
430
  }), h("svg", { key: "current-path", class: "object", xmlns: "http://www.w3.org/2000/svg", width: this.core.store.state.currentPath?.width, height: this.core.store.state.currentPath?.height, style: {
431
431
  left: '0',
432
432
  top: '0',
@@ -435,7 +435,7 @@ export class KritzelEngine {
435
435
  transform: this.core.store.state.currentPath?.transformationMatrix,
436
436
  transformOrigin: 'top left',
437
437
  overflow: 'visible',
438
- }, viewBox: this.core.store.state.currentPath?.viewBox }, h("path", { key: '318e360ef363dd90e613e2bc35233d6b045fe6df', d: this.core.store.state.currentPath?.d, fill: this.core.store.state.currentPath?.fill, stroke: this.core.store.state.currentPath?.stroke }))), this.core.store.state.isContextMenuVisible && (h("kritzel-context-menu", { key: '455cd5c01932246ef318e83934b7869edd063a99', class: "context-menu", ref: el => (this.contextMenuElement = el), items: this.core.store.state.contextMenuItems, objects: this.core.store.state.selectionGroup?.objects || [], style: {
438
+ }, viewBox: this.core.store.state.currentPath?.viewBox }, h("path", { key: 'f3aaf24804430eeb0308a15ae4a38df302d0566f', d: this.core.store.state.currentPath?.d, fill: this.core.store.state.currentPath?.fill, stroke: this.core.store.state.currentPath?.stroke }))), this.core.store.state.isContextMenuVisible && (h("kritzel-context-menu", { key: 'd99a76a11b613167d5723d1c16e9289e45eee8a3', class: "context-menu", ref: el => (this.contextMenuElement = el), items: this.core.store.state.contextMenuItems, objects: this.core.store.state.selectionGroup?.objects || [], style: {
439
439
  position: 'fixed',
440
440
  left: `${this.core.store.state.contextMenuX}px`,
441
441
  top: `${this.core.store.state.contextMenuY}px`,
@@ -446,7 +446,7 @@ export class KritzelEngine {
446
446
  y: (-this.core.store.state.translateY + this.core.store.state.contextMenuY) / this.core.store.state.scale,
447
447
  }, this.core.store.state.selectionGroup?.objects);
448
448
  this.hideContextMenu();
449
- }, onClose: () => this.hideContextMenu() })), this.core.store.state?.activeTool instanceof KritzelEraserTool && !this.core.store.state.isScaling && h("kritzel-cursor-trail", { key: 'a70d8765402f0938e9df4c1cc2f8c9a13dfa4445', core: this.core })));
449
+ }, onClose: () => this.hideContextMenu() })), this.core.store.state?.activeTool instanceof KritzelEraserTool && !this.core.store.state.isScaling && h("kritzel-cursor-trail", { key: 'fc7c474156442dfb5c057ef4ed4f0e5f015c2502', core: this.core })));
450
450
  }
451
451
  static get is() { return "kritzel-engine"; }
452
452
  static get encapsulation() { return "shadow"; }
@@ -464,7 +464,6 @@ export class KritzelEngine {
464
464
  return {
465
465
  "workspace": {
466
466
  "type": "unknown",
467
- "attribute": "workspace",
468
467
  "mutable": false,
469
468
  "complexType": {
470
469
  "original": "KritzelWorkspace",
@@ -488,7 +487,6 @@ export class KritzelEngine {
488
487
  },
489
488
  "activeTool": {
490
489
  "type": "unknown",
491
- "attribute": "active-tool",
492
490
  "mutable": false,
493
491
  "complexType": {
494
492
  "original": "KritzelTool",
@@ -512,7 +510,6 @@ export class KritzelEngine {
512
510
  },
513
511
  "globalContextMenuItems": {
514
512
  "type": "unknown",
515
- "attribute": "global-context-menu-items",
516
513
  "mutable": false,
517
514
  "complexType": {
518
515
  "original": "ContextMenuItem[]",
@@ -536,7 +533,6 @@ export class KritzelEngine {
536
533
  },
537
534
  "objectContextMenuItems": {
538
535
  "type": "unknown",
539
- "attribute": "object-context-menu-items",
540
536
  "mutable": false,
541
537
  "complexType": {
542
538
  "original": "ContextMenuItem[]",
@@ -560,7 +556,6 @@ export class KritzelEngine {
560
556
  },
561
557
  "scaleMax": {
562
558
  "type": "number",
563
- "attribute": "scale-max",
564
559
  "mutable": true,
565
560
  "complexType": {
566
561
  "original": "number",
@@ -576,11 +571,11 @@ export class KritzelEngine {
576
571
  "getter": false,
577
572
  "setter": false,
578
573
  "reflect": false,
574
+ "attribute": "scale-max",
579
575
  "defaultValue": "ABSOLUTE_SCALE_MAX"
580
576
  },
581
577
  "scaleMin": {
582
578
  "type": "number",
583
- "attribute": "scale-min",
584
579
  "mutable": true,
585
580
  "complexType": {
586
581
  "original": "number",
@@ -596,6 +591,7 @@ export class KritzelEngine {
596
591
  "getter": false,
597
592
  "setter": false,
598
593
  "reflect": false,
594
+ "attribute": "scale-min",
599
595
  "defaultValue": "ABSOLUTE_SCALE_MIN"
600
596
  }
601
597
  };
@@ -1 +1 @@
1
- {"version":3,"file":"kritzel-engine.js","sourceRoot":"","sources":["../../../../src/components/core/kritzel-engine/kritzel-engine.tsx"],"names":[],"mappings":"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","sourcesContent":["import { Component, Host, h, Listen, Element, Prop, Method, State, Event, EventEmitter, Watch } from '@stencil/core';\r\nimport { KritzelTool } from '../../../interfaces/tool.interface';\r\nimport { KritzelViewport } from '../../../classes/core/viewport.class';\r\nimport { KritzelPath } from '../../../classes/objects/path.class';\r\nimport { KritzelSelectionTool } from '../../../classes/tools/selection-tool.class';\r\nimport { KritzelImage } from '../../../classes/objects/image.class';\r\nimport { KritzelText } from '../../../classes/objects/text.class';\r\nimport { KritzelSelectionGroup } from '../../../classes/objects/selection-group.class';\r\nimport { KrtizelSelectionBox } from '../../../classes/objects/selection-box.class';\r\nimport { KritzelKeyHandler } from '../../../classes/handlers/key.handler';\r\nimport { KritzelBaseTool } from '../../../classes/tools/base-tool.class';\r\nimport { ContextMenuItem } from '../../../interfaces/context-menu-item.interface';\r\nimport { KritzelEraserTool } from '../../../classes/tools/eraser-tool.class';\r\nimport { KritzelBrushToolConfig, KritzelTextToolConfig } from '../../../interfaces/toolbar-control.interface';\r\nimport { KritzelKeyboardHelper } from '../../../helpers/keyboard.helper';\r\nimport { KritzelContextMenuHandler } from '../../../classes/handlers/context-menu.handler';\r\nimport { AddObjectCommand } from '../../../classes/commands/add-object.command';\r\nimport { KritzelBaseObject } from '../../../classes/objects/base-object.class';\r\nimport { UpdateObjectCommand } from '../../../classes/commands/update-object.command';\r\nimport { RemoveObjectCommand } from '../../../classes/commands/remove-object.command';\r\nimport { KritzelToolRegistry } from '../../../classes/registries/tool.registry';\r\nimport { KritzelEventHelper } from '../../../helpers/event.helper';\r\nimport { KritzelClassHelper } from '../../../helpers/class.helper';\r\nimport { ABSOLUTE_SCALE_MAX, ABSOLUTE_SCALE_MIN } from '../../../constants/engine.constants';\r\nimport { KritzelCustomElement } from '../../../classes/objects/custom-element.class';\r\nimport { KritzelWorkspace } from '../../../classes/core/workspace.class';\r\nimport { KritzelEngineState } from '../../../interfaces/engine-state.interface';\r\nimport { KritzelCore } from '../../../classes/core/core.class';\r\nimport { KritzelDevicesHelper } from '../../../helpers/devices.helper';\r\n\r\n@Component({\r\n tag: 'kritzel-engine',\r\n styleUrl: 'kritzel-engine.css',\r\n shadow: true,\r\n})\r\nexport class KritzelEngine {\r\n @Element() host: HTMLElement;\r\n\r\n @Prop() workspace?: KritzelWorkspace;\r\n @Watch('workspace')\r\n onWorkspaceChange(newWorkspace: KritzelWorkspace | null) {\r\n if (this.core.store.state.activeWorkspace !== newWorkspace) {\r\n this.core.initializeWorkspace(newWorkspace);\r\n }\r\n }\r\n @Prop() activeTool: KritzelTool;\r\n @Prop() globalContextMenuItems: ContextMenuItem[];\r\n @Prop() objectContextMenuItems: ContextMenuItem[];\r\n @Prop({ mutable: true }) scaleMax: number = ABSOLUTE_SCALE_MAX;\r\n @Watch('scaleMax')\r\n validateScaleMax(newValue: number) {\r\n if (newValue > ABSOLUTE_SCALE_MAX) {\r\n console.warn(`scaleMax cannot be greater than ${ABSOLUTE_SCALE_MAX}.`);\r\n this.scaleMax = ABSOLUTE_SCALE_MAX;\r\n this.core.store.state.scaleMax = this.scaleMax;\r\n } else {\r\n this.core.store.state.scaleMax = newValue;\r\n }\r\n }\r\n @Prop({ mutable: true }) scaleMin: number = ABSOLUTE_SCALE_MIN;\r\n @Watch('scaleMin')\r\n validateScaleMin(newValue: number) {\r\n if (newValue < ABSOLUTE_SCALE_MIN) {\r\n console.warn(`scaleMin cannot be less than ${ABSOLUTE_SCALE_MIN}.`);\r\n this.scaleMin = ABSOLUTE_SCALE_MIN;\r\n this.core.store.state.scaleMin = this.scaleMin;\r\n } else {\r\n this.core.store.state.scaleMin = newValue;\r\n }\r\n }\r\n\r\n @Event() isEngineReady: EventEmitter<KritzelEngineState>;\r\n @Event() activeToolChange: EventEmitter<KritzelBaseTool>;\r\n @Event() workspacesChange: EventEmitter<KritzelWorkspace[]>;\r\n @Event() longpress: EventEmitter<PointerEvent>;\r\n\r\n @State() forceUpdate: number = 0;\r\n\r\n @Listen('wheel', { passive: false })\r\n handleWheel(ev) {\r\n if (this.core.store.isDisabled) {\r\n return;\r\n }\r\n\r\n if (this.core.store.state.isContextMenuVisible) {\r\n this.hideContextMenu();\r\n }\r\n\r\n this.viewport.handleWheel(ev);\r\n this.core.store.state?.activeTool?.handleWheel(ev);\r\n }\r\n\r\n @Listen('pointerdown', { passive: false })\r\n handlePointerDown(ev: PointerEvent) {\r\n if (this.core.store.isDisabled) {\r\n return;\r\n }\r\n\r\n if (KritzelDevicesHelper.isTouchDevice()) {\r\n KritzelEventHelper.onLongPress(ev, (event: PointerEvent) => this.longpress.emit(event));\r\n }\r\n\r\n this.host.setPointerCapture(ev.pointerId);\r\n this.core.store.state.pointers.set(ev.pointerId, ev);\r\n\r\n this.viewport.handlePointerDown(ev);\r\n this.core.store.state?.activeTool?.handlePointerDown(ev);\r\n }\r\n\r\n @Listen('pointermove', { passive: false })\r\n handlePointerMove(ev: PointerEvent) {\r\n if (this.core.store.isDisabled) {\r\n return;\r\n }\r\n\r\n this.core.store.state.pointers.set(ev.pointerId, ev);\r\n\r\n this.viewport.handlePointerMove(ev);\r\n this.core.store.state?.activeTool?.handlePointerMove(ev);\r\n }\r\n\r\n @Listen('pointerup', { passive: false })\r\n handlePointerUp(ev: PointerEvent) {\r\n if (this.core.store.isDisabled) {\r\n return;\r\n }\r\n\r\n this.core.store.state.pointers.delete(ev.pointerId);\r\n this.host.releasePointerCapture(ev.pointerId);\r\n\r\n this.viewport.handlePointerUp(ev);\r\n this.core.store.state?.activeTool?.handlePointerUp(ev);\r\n }\r\n\r\n @Listen('pointercancel', { passive: false })\r\n handlePointerCancel(ev: PointerEvent) {\r\n if (this.core.store.isDisabled) {\r\n return;\r\n }\r\n\r\n this.host.releasePointerCapture(ev.pointerId);\r\n this.core.store.state.pointers.delete(ev.pointerId);\r\n\r\n this.viewport.handlePointerUp(ev);\r\n this.core.store.state?.activeTool?.handlePointerUp(ev);\r\n }\r\n\r\n @Listen('longpress', { passive: false })\r\n handleLongPress(ev: CustomEvent<PointerEvent>) {\r\n this.contextMenuHandler.handleContextMenu(ev.detail);\r\n }\r\n\r\n @Listen('contextmenu', { capture: false })\r\n handleContextMenu(ev: PointerEvent) {\r\n ev.preventDefault();\r\n\r\n if (this.core.store.isDisabled) {\r\n return;\r\n }\r\n\r\n if (ev.pointerType === 'touch') {\r\n return;\r\n }\r\n\r\n this.contextMenuHandler.handleContextMenu(ev);\r\n }\r\n\r\n @Listen('resize', { target: 'window' })\r\n handleResize() {\r\n this.viewport.handleResize();\r\n }\r\n\r\n @Listen('keydown', { target: 'window' })\r\n handleKeyDown(ev) {\r\n if (this.core.store.isDisabled) {\r\n return;\r\n }\r\n\r\n this.keyHandler.handleKeyDown(ev);\r\n }\r\n\r\n @Listen('keyup', { target: 'window' })\r\n handleKeyUp(ev) {\r\n if (this.core.store.isDisabled) {\r\n return;\r\n }\r\n\r\n this.keyHandler.handleKeyUp(ev);\r\n }\r\n\r\n @Listen('dblclick', { target: 'document' })\r\n preventDoubleTapZoomOnTouchDevices(ev: MouseEvent) {\r\n ev.preventDefault();\r\n }\r\n\r\n @Method()\r\n async registerTool(toolName: string, toolClass: any, toolConfig?: KritzelTextToolConfig | KritzelBrushToolConfig): Promise<KritzelBaseTool> {\r\n if (typeof toolClass !== 'function' || !(toolClass.prototype instanceof KritzelBaseTool)) {\r\n console.error(`Failed to register tool \"${toolName}\": Tool class must be a constructor function`);\r\n return null;\r\n }\r\n\r\n const registeredTool = KritzelToolRegistry.registerTool(toolName, toolClass, this.core);\r\n\r\n if (toolConfig) {\r\n Object.entries(toolConfig).forEach(([key, value]) => {\r\n registeredTool[key] = value;\r\n });\r\n }\r\n\r\n return Promise.resolve(registeredTool);\r\n }\r\n\r\n @Method()\r\n async changeActiveTool(tool: KritzelBaseTool) {\r\n this.core.store.state.activeTool?.onDeactivate();\r\n this.core.store.setState('activeTool', tool);\r\n this.core.deselectAllObjects();\r\n tool?.onActivate();\r\n }\r\n\r\n @Method()\r\n async disable() {\r\n this.core.store.state.isEnabled = false;\r\n this.core.rerender();\r\n }\r\n\r\n @Method()\r\n async enable() {\r\n this.core.store.state.isEnabled = true;\r\n this.core.rerender();\r\n }\r\n\r\n @Method()\r\n async delete() {\r\n this.core.delete();\r\n }\r\n\r\n @Method()\r\n async copy() {\r\n this.core.copy();\r\n }\r\n\r\n @Method()\r\n async paste(x: number, y: number) {\r\n this.core.paste(x, y);\r\n }\r\n\r\n @Method()\r\n async bringForward(object?: KritzelBaseObject<any>) {\r\n this.core.bringForward(object);\r\n }\r\n\r\n @Method()\r\n async sendBackward(object?: KritzelBaseObject<any>) {\r\n this.core.sendBackward(object);\r\n }\r\n\r\n @Method()\r\n async bringToFront(object?: KritzelBaseObject<any>) {\r\n this.core.bringToFront(object);\r\n }\r\n\r\n @Method()\r\n async sendToBack(object?: KritzelBaseObject<any>) {\r\n this.core.sendToBack(object);\r\n }\r\n\r\n @Method()\r\n async undo() {\r\n this.core.history.undo();\r\n }\r\n\r\n @Method()\r\n async redo() {\r\n this.core.history.redo();\r\n }\r\n\r\n @Method()\r\n async hideContextMenu() {\r\n this.core.store.state.pointers.clear();\r\n this.core.store.state.isContextMenuVisible = false;\r\n this.core.store.state.selectionBox = null;\r\n this.core.store.state.isSelecting = false;\r\n this.core.store.state.isEnabled = true;\r\n this.core.rerender();\r\n }\r\n\r\n @Method()\r\n async getObjectById<T extends KritzelBaseObject>(id: string): Promise<T | null> {\r\n const object = this.core.store.allObjects.find(obj => obj.id === id) as T | undefined;\r\n return object || null;\r\n }\r\n\r\n @Method()\r\n async addObject<T extends KritzelBaseObject>(object: T): Promise<T | null> {\r\n this.core.deselectAllObjects();\r\n\r\n object.id = object.generateId();\r\n object._core = this.core;\r\n object.scale = object.scale ? object.scale : this.core.store.state.scale;\r\n object.zIndex = this.core.store.currentZIndex;\r\n\r\n const command = new AddObjectCommand(this.core, this, object);\r\n this.core.history.executeCommand(command);\r\n\r\n return object;\r\n }\r\n\r\n @Method()\r\n async updateObject<T extends KritzelBaseObject>(object: T, updatedProperties: Partial<T>): Promise<T | null> {\r\n this.core.deselectAllObjects();\r\n\r\n const command = new UpdateObjectCommand(this.core, this, object, updatedProperties);\r\n this.core.history.executeCommand(command);\r\n\r\n return object;\r\n }\r\n\r\n @Method()\r\n async removeObject<T extends KritzelBaseObject>(object: T): Promise<T | null> {\r\n this.core.deselectAllObjects();\r\n\r\n const command = new RemoveObjectCommand(this.core, this, object);\r\n this.core.history.executeCommand(command);\r\n\r\n return object;\r\n }\r\n\r\n @Method()\r\n async getSelectedObjects(): Promise<KritzelBaseObject<any>[]> {\r\n return this.core.store.state.selectionGroup ? this.core.store.state.selectionGroup.objects : [];\r\n }\r\n\r\n @Method()\r\n async selectObjects(objects: KritzelBaseObject[]) {\r\n this.core.store.state.activeTool?.onDeactivate();\r\n this.core.store.setState('activeTool', KritzelToolRegistry.getTool('selection'));\r\n this.core.deselectAllObjects();\r\n this.core.selectObjects(objects);\r\n }\r\n\r\n @Method()\r\n async selectAllObjectsInViewport() {\r\n this.core.store.state.activeTool?.onDeactivate();\r\n this.core.store.setState('activeTool', KritzelToolRegistry.getTool('selection'));\r\n this.core.deselectAllObjects();\r\n this.core.selectAllObjectsInViewport();\r\n }\r\n\r\n @Method()\r\n async clearSelection() {\r\n this.core.clearSelection();\r\n }\r\n\r\n @Method()\r\n async centerObjectInViewport(object: KritzelBaseObject) {\r\n object.centerInViewport();\r\n\r\n const command = new UpdateObjectCommand(this.core, this, object, object);\r\n this.core.history.executeCommand(command);\r\n\r\n return object;\r\n }\r\n\r\n @Method()\r\n async getCopiedObjects(): Promise<KritzelBaseObject[]> {\r\n return this.core.store.state.copiedObjects?.objects || [];\r\n }\r\n\r\n @Method()\r\n async createWorkspace(workspace: KritzelWorkspace): Promise<KritzelWorkspace | null> {\r\n workspace._core = this.core;\r\n await this.core.createWorkspace(workspace);\r\n this.workspacesChange.emit(this.core.store.state.workspaces);\r\n return workspace;\r\n }\r\n\r\n @Method()\r\n async updateWorkspace(workspace: KritzelWorkspace): Promise<void> {\r\n await this.core.updateWorkspace(workspace);\r\n this.workspacesChange.emit(this.core.store.state.workspaces);\r\n }\r\n\r\n @Method()\r\n async deleteWorkspace(workspace: KritzelWorkspace): Promise<void> {\r\n await this.core.deleteWorkspace(workspace);\r\n this.workspacesChange.emit(this.core.store.state.workspaces);\r\n }\r\n\r\n @Method()\r\n async getWorkspaces(): Promise<KritzelWorkspace[]> {\r\n return this.core.getWorkspaces();\r\n }\r\n\r\n @Method()\r\n async getActiveWorkspace(): Promise<KritzelWorkspace> {\r\n return this.core.store.state.activeWorkspace;\r\n }\r\n\r\n core: KritzelCore;\r\n viewport: KritzelViewport;\r\n contextMenuHandler: KritzelContextMenuHandler;\r\n keyHandler: KritzelKeyHandler;\r\n contextMenuElement: HTMLKritzelContextMenuElement | null = null;\r\n\r\n get isSelecting() {\r\n return this.core.store.state.activeTool instanceof KritzelSelectionTool && this.core.store.state.isSelecting;\r\n }\r\n\r\n get isSelectionActive() {\r\n return this.core.store.state.activeTool instanceof KritzelSelectionTool && this.core.store.state.selectionGroup !== null;\r\n }\r\n\r\n constructor() {\r\n this.core = new KritzelCore(this);\r\n }\r\n\r\n componentWillLoad() {\r\n this.validateScaleMax(this.scaleMax);\r\n this.validateScaleMin(this.scaleMin);\r\n }\r\n\r\n async componentDidLoad() {\r\n this.contextMenuHandler = new KritzelContextMenuHandler(this.core, this.globalContextMenuItems, this.objectContextMenuItems);\r\n this.keyHandler = new KritzelKeyHandler(this.core);\r\n this.viewport = new KritzelViewport(this.core, this.host);\r\n\r\n await this.core.initializeDatabase();\r\n await this.core.initializeWorkspace(this.workspace);\r\n\r\n this._registerStateChangeListeners();\r\n\r\n if (this.core.store.state.isReady === false) {\r\n this.core.store.state.isReady = true;\r\n this.isEngineReady.emit(this.core.store.state);\r\n }\r\n }\r\n\r\n private _registerStateChangeListeners() {\r\n this.core.store.onStateChange('activeTool', this._handleActiveToolChange.bind(this));\r\n }\r\n\r\n private _handleActiveToolChange(activeTool: KritzelBaseTool) {\r\n if (!(activeTool instanceof KritzelSelectionTool)) {\r\n this.core.clearSelection();\r\n }\r\n\r\n this.core.store.state.skipContextMenu = false;\r\n this.core.store.state.copiedObjects = null;\r\n this.activeToolChange.emit(activeTool);\r\n KritzelKeyboardHelper.forceHideKeyboard();\r\n }\r\n\r\n render() {\r\n const computedStyle = window.getComputedStyle(this.host);\r\n const baseHandleSizePx = computedStyle.getPropertyValue('--kritzel-selection-handle-size').trim() || '6px';\r\n const baseHandleSize = parseFloat(baseHandleSizePx);\r\n const baseHandleTouchSize = baseHandleSize * 2 < 14 ? 14 : baseHandleSize;\r\n const viewportCenterX = (this.core.store.state.viewportWidth / 2) + this.core.store.state.translateX;\r\n const viewportCenterY = (this.core.store.state.viewportHeight / 2) + this.core.store.state.translateY;\r\n\r\n return (\r\n <Host>\r\n <div class=\"debug-panel\" style={{ display: this.core.store.state.debugInfo.showViewportInfo ? 'block' : 'none' }}>\r\n <div>ActiveWorkspaceId: {this.core.store.state?.activeWorkspace?.id}</div>\r\n <div>ActiveWorkspaceName: {this.core.store.state?.activeWorkspace?.name}</div>\r\n <div>TranslateX: {this.core.store.state?.translateX}</div>\r\n <div>TranslateY: {this.core.store.state?.translateY}</div>\r\n <div>ViewportWidth: {this.core.store.state?.viewportWidth}</div>\r\n <div>ViewportHeight: {this.core.store.state?.viewportHeight}</div>\r\n <div>Scale: {this.core.store.state?.scale}</div>\r\n <div>ActiveTool: {this.core.store.state?.activeTool?.name}</div>\r\n <div>HasViewportChanged: {this.core.store.state?.hasViewportChanged ? 'true' : 'false'}</div>\r\n <div>IsEnabled: {this.core.store.state?.isEnabled ? 'true' : 'false'}</div>\r\n <div>IsScaling: {this.core.store.state?.isScaling ? 'true' : 'false'}</div>\r\n <div>IsPanning: {this.core.store.state?.isPanning ? 'true' : 'false'}</div>\r\n <div>IsSelecting: {this.isSelecting ? 'true' : 'false'}</div>\r\n <div>IsSelectionActive: {this.isSelectionActive ? 'true' : 'false'}</div>\r\n <div>IsResizeHandleSelected: {this.core.store.state.isResizeHandleSelected ? 'true' : 'false'}</div>\r\n <div>IsRotationHandleSelected: {this.core.store.state.isRotationHandleSelected ? 'true' : 'false'}</div>\r\n <div>IsDrawing: {this.core.store.state.isDrawing ? 'true' : 'false'}</div>\r\n <div>IsWriting: {this.core.store.state.isWriting ? 'true' : 'false'}</div>\r\n <div>PointerX: {this.core.store.state?.pointerX}</div>\r\n <div>PointerY: {this.core.store.state?.pointerY}</div>\r\n <div>SelectedObjects: {this.core.store.state.selectionGroup?.objects.length || 0}</div>\r\n <div>\r\n ViewportCenter: ({viewportCenterX.toFixed(2)}, {viewportCenterY.toFixed(2)})\r\n </div>\r\n </div>\r\n\r\n <div\r\n id=\"origin\"\r\n class=\"origin\"\r\n style={{\r\n transform: `matrix(${this.core.store.state?.scale}, 0, 0, ${this.core.store.state?.scale}, ${this.core.store.state?.translateX}, ${this.core.store.state?.translateY})`,\r\n }}\r\n >\r\n {this.core.store.state.objectsMap.allObjects()?.map(object => {\r\n return (\r\n <div\r\n key={object.id}\r\n style={{\r\n display: object.isInViewport() ? 'block' : 'none',\r\n transform: object?.transformationMatrix,\r\n transformOrigin: 'top left',\r\n zIndex: object.zIndex.toString(),\r\n position: 'absolute',\r\n }}\r\n >\r\n <svg\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n id={object.id}\r\n class=\"object\"\r\n style={{\r\n height: object?.totalHeight.toString(),\r\n width: object?.totalWidth.toString(),\r\n left: '0',\r\n top: '0',\r\n position: 'absolute',\r\n transform: `rotate(${object.rotationDegrees}deg)`,\r\n transformOrigin: 'center',\r\n opacity: object.markedForRemoval ? '0.5' : object.opacity.toString(),\r\n pointerEvents: object.markedForRemoval ? 'none' : 'auto',\r\n }}\r\n >\r\n <foreignObject\r\n x=\"0\"\r\n y=\"0\"\r\n width={object.totalWidth.toString()}\r\n height={object.totalHeight.toString()}\r\n style={{\r\n minHeight: '0',\r\n minWidth: '0',\r\n backgroundColor: object.backgroundColor,\r\n borderColor: object.borderColor,\r\n borderWidth: object.borderWidth + 'px',\r\n borderStyle: 'solid',\r\n padding: object.padding + 'px',\r\n overflow: 'visible',\r\n }}\r\n >\r\n {KritzelClassHelper.isInstanceOf<KritzelPath>(object, 'KritzelPath') && (\r\n <svg\r\n ref={el => (el ? object.mount(el) : object.unmount())}\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n style={{\r\n height: object?.height.toString(),\r\n width: object?.width.toString(),\r\n position: 'absolute',\r\n overflow: 'visible',\r\n }}\r\n viewBox={object?.viewBox}\r\n >\r\n <path d={object?.d} fill={object.fill} stroke={object?.stroke} />\r\n </svg>\r\n )}\r\n\r\n {KritzelClassHelper.isInstanceOf<KritzelImage>(object, 'KritzelImage') && (\r\n <img\r\n ref={el => (el ? object.mount(el) : object.unmount())}\r\n src={object.src}\r\n style={{\r\n width: '100%',\r\n height: '100%',\r\n userSelect: 'none',\r\n pointerEvents: 'none',\r\n }}\r\n draggable={false}\r\n onDragStart={e => e.preventDefault()}\r\n />\r\n )}\r\n\r\n {KritzelClassHelper.isInstanceOf<KritzelText>(object, 'KritzelText') && (\r\n <textarea\r\n ref={el => (el ? object.mount(el) : object.unmount())}\r\n value={object.value}\r\n onKeyDown={event => object.handleKeyDown(event)}\r\n onInput={event => object.handleInput(event)}\r\n rows={object.rows}\r\n style={{\r\n width: '100%',\r\n height: '100%',\r\n color: object.fontColor,\r\n fontSize: object.fontSize?.toString() + 'px',\r\n fontFamily: object.fontFamily,\r\n border: 'none',\r\n outline: 'none',\r\n resize: 'none',\r\n overflow: 'hidden',\r\n display: 'block',\r\n padding: '1px',\r\n whiteSpace: 'nowrap',\r\n pointerEvents: object.isReadonly ? 'none' : 'auto',\r\n cursor: object.isReadonly ? 'default' : 'text',\r\n caretColor: object.isReadonly ? 'transparent' : 'auto',\r\n }}\r\n ></textarea>\r\n )}\r\n\r\n {KritzelClassHelper.isInstanceOf<KritzelCustomElement>(object, 'KritzelCustomElement') && (\r\n <div\r\n ref={el => (el ? object.mount(el) : object.unmount())}\r\n style={{\r\n width: '100%',\r\n height: '100%',\r\n pointerEvents: 'auto',\r\n overflow: 'hidden',\r\n display: 'block',\r\n }}\r\n ></div>\r\n )}\r\n\r\n {KritzelClassHelper.isInstanceOf<KritzelSelectionGroup>(object, 'KritzelSelectionGroup') && (\r\n <div\r\n ref={el => (el ? object.mount(el) : object.unmount())}\r\n style={{\r\n width: '100%',\r\n height: '100%',\r\n }}\r\n ></div>\r\n )}\r\n\r\n {KritzelClassHelper.isInstanceOf<KrtizelSelectionBox>(object, 'KrtizelSelectionBox') && (\r\n <div\r\n ref={el => (el ? object.mount(el) : object.unmount())}\r\n style={{\r\n width: '100%',\r\n height: '100%',\r\n backgroundColor: KritzelDevicesHelper.isFirefox() ? object.backgroundColor : 'transparent',\r\n borderWidth: KritzelDevicesHelper.isFirefox() ? object.borderWidth + 'px' : '0',\r\n borderStyle: KritzelDevicesHelper.isFirefox() ? 'solid' : 'none',\r\n borderColor: KritzelDevicesHelper.isFirefox() ? object.borderColor : 'transparent',\r\n }}\r\n ></div>\r\n )}\r\n </foreignObject>\r\n\r\n <line\r\n x1=\"0\"\r\n y1=\"0\"\r\n x2={object.totalWidth}\r\n y2=\"0\"\r\n style={{\r\n stroke: 'var(--kritzel-selection-border-color, #007AFF)',\r\n strokeWidth: `calc(var(--kritzel-selection-border-width, 2px) * ${object.scale} / ${this.core.store.state?.scale})`,\r\n strokeLinecap: 'square',\r\n }}\r\n visibility={object.isSelected ? 'visible' : 'hidden'}\r\n />\r\n <line\r\n x1=\"0\"\r\n y1=\"0\"\r\n x2=\"0\"\r\n y2={object.totalHeight}\r\n style={{\r\n stroke: 'var(--kritzel-selection-border-color, #007AFF)',\r\n strokeWidth: `calc(var(--kritzel-selection-border-width, 2px) * ${object.scale} / ${this.core.store.state?.scale})`,\r\n strokeLinecap: 'square',\r\n }}\r\n visibility={object.isSelected ? 'visible' : 'hidden'}\r\n />\r\n <line\r\n x1=\"0\"\r\n y1={object.totalHeight}\r\n x2={object.totalWidth}\r\n y2={object.totalHeight}\r\n style={{\r\n stroke: 'var(--kritzel-selection-border-color, #007AFF)',\r\n strokeWidth: `calc(var(--kritzel-selection-border-width, 2px) * ${object.scale} / ${this.core.store.state?.scale})`,\r\n strokeLinecap: 'square',\r\n }}\r\n visibility={object.isSelected ? 'visible' : 'hidden'}\r\n />\r\n <line\r\n x1={object.totalWidth}\r\n y1=\"0\"\r\n x2={object.totalWidth}\r\n y2={object.totalHeight}\r\n style={{\r\n stroke: 'var(--kritzel-selection-border-color, #007AFF)',\r\n strokeWidth: `calc(var(--kritzel-selection-border-width, 2px) * ${object.scale} / ${this.core.store.state?.scale})`,\r\n strokeLinecap: 'square',\r\n }}\r\n visibility={object.isSelected ? 'visible' : 'hidden'}\r\n />\r\n\r\n <circle\r\n class=\"resize-handle top-left\"\r\n cx=\"0\"\r\n cy=\"0\"\r\n r={`${(baseHandleSize * object.scale) / this.core.store.state?.scale}`}\r\n style={{\r\n fill: 'var(--kritzel-selection-handle-color, #000000)',\r\n }}\r\n visibility={object.isSelected && !this.isSelecting ? 'visible' : 'hidden'}\r\n />\r\n <circle\r\n class=\"resize-handle-overlay top-left\"\r\n cx=\"0\"\r\n cy=\"0\"\r\n r={`${(baseHandleTouchSize * object.scale) / this.core.store.state?.scale}`}\r\n style={{\r\n fill: 'transparent',\r\n }}\r\n visibility={object.isSelected && !this.isSelecting ? 'visible' : 'hidden'}\r\n />\r\n\r\n <circle\r\n class=\"resize-handle top-right\"\r\n cx={object.totalWidth}\r\n cy=\"0\"\r\n r={`${(baseHandleSize * object.scale) / this.core.store.state?.scale}`}\r\n style={{\r\n fill: 'var(--kritzel-selection-handle-color, #000000)',\r\n }}\r\n visibility={object.isSelected && !this.isSelecting ? 'visible' : 'hidden'}\r\n />\r\n <circle\r\n class=\"resize-handle-overlay top-right\"\r\n cx={object.totalWidth}\r\n cy=\"0\"\r\n r={`${(baseHandleTouchSize * object.scale) / this.core.store.state?.scale}`}\r\n style={{\r\n fill: 'transparent',\r\n }}\r\n visibility={object.isSelected && !this.isSelecting ? 'visible' : 'hidden'}\r\n />\r\n\r\n <circle\r\n class=\"resize-handle bottom-left\"\r\n cx=\"0\"\r\n cy={object.totalHeight}\r\n r={`${(baseHandleSize * object.scale) / this.core.store.state?.scale}`}\r\n style={{\r\n fill: 'var(--kritzel-selection-handle-color, #000000)',\r\n }}\r\n visibility={object.isSelected && !this.isSelecting ? 'visible' : 'hidden'}\r\n />\r\n <circle\r\n class=\"resize-handle-overlay bottom-left\"\r\n cx=\"0\"\r\n cy={object.totalHeight}\r\n r={`${(baseHandleTouchSize * object.scale) / this.core.store.state?.scale}`}\r\n style={{\r\n fill: 'transparent',\r\n }}\r\n visibility={object.isSelected && !this.isSelecting ? 'visible' : 'hidden'}\r\n />\r\n\r\n <circle\r\n class=\"resize-handle bottom-right\"\r\n cx={object.totalWidth}\r\n cy={object.totalHeight}\r\n r={`${(baseHandleSize * object.scale) / this.core.store.state?.scale}`}\r\n style={{\r\n fill: 'var(--kritzel-selection-handle-color, #000000)',\r\n }}\r\n visibility={object.isSelected && !this.isSelecting ? 'visible' : 'hidden'}\r\n />\r\n <circle\r\n class=\"resize-handle-overlay bottom-right\"\r\n cx={object.totalWidth}\r\n cy={object.totalHeight}\r\n r={`${(baseHandleTouchSize * object.scale) / this.core.store.state?.scale}`}\r\n style={{\r\n fill: 'transparent',\r\n }}\r\n visibility={object.isSelected && !this.isSelecting ? 'visible' : 'hidden'}\r\n />\r\n\r\n <line\r\n x1={object.totalWidth / 2}\r\n y1=\"0\"\r\n x2={object.totalWidth / 2}\r\n y2={-((15 * object.scale) / this.core.store.state?.scale)}\r\n style={{\r\n stroke: 'var(--kritzel-selection-border-color, #007AFF)',\r\n strokeWidth: `calc(var(--kritzel-selection-border-width, 2px) * ${object.scale} / ${this.core.store.state?.scale})`,\r\n }}\r\n visibility={object.isSelected && !this.isSelecting ? 'visible' : 'hidden'}\r\n />\r\n <circle\r\n class=\"rotation-handle\"\r\n cx={object.totalWidth / 2}\r\n cy={-((15 * object.scale) / this.core.store.state?.scale)}\r\n r={`${(baseHandleSize * object.scale) / this.core.store.state?.scale}`}\r\n style={{\r\n fill: 'var(--kritzel-selection-handle-color, #000000)',\r\n }}\r\n visibility={object.isSelected && !this.isSelecting ? 'visible' : 'hidden'}\r\n />\r\n <circle\r\n class=\"rotation-handle-overlay\"\r\n cx={object.totalWidth / 2}\r\n cy={-((15 * object.scale) / this.core.store.state?.scale)}\r\n r={`${(baseHandleTouchSize * object.scale) / this.core.store.state?.scale}`}\r\n style={{\r\n fill: 'transparent',\r\n cursor: 'grab',\r\n }}\r\n visibility={object.isSelected && !this.isSelecting ? 'visible' : 'hidden'}\r\n />\r\n\r\n <g style={{ display: this.core.store.state.debugInfo.showObjectInfo ? 'block' : 'none', pointerEvents: 'none' }}>\r\n <foreignObject\r\n x={object.totalWidth.toString()}\r\n y=\"0\"\r\n width=\"400px\"\r\n height=\"160px\"\r\n style={{ minHeight: '0', minWidth: '0', display: object.isDebugInfoVisible ? 'block' : 'none' }}\r\n >\r\n <div style={{ width: '100%', height: '100%' }}>\r\n <div style={{ whiteSpace: 'nowrap' }}>zIndex: {object.zIndex}</div>\r\n <div style={{ whiteSpace: 'nowrap' }}>translateX: {object.translateX}</div>\r\n <div style={{ whiteSpace: 'nowrap' }}>translateY: {object.translateY}</div>\r\n <div style={{ whiteSpace: 'nowrap' }}>width: {object.width}</div>\r\n <div style={{ whiteSpace: 'nowrap' }}>height: {object.height}</div>\r\n <div style={{ whiteSpace: 'nowrap' }}>scale: {object.scale}</div>\r\n <div style={{ whiteSpace: 'nowrap' }}>rotation: {object.rotation}</div>\r\n <div style={{ whiteSpace: 'nowrap' }}>x: {object.x}</div>\r\n <div style={{ whiteSpace: 'nowrap' }}>y: {object.y}</div>\r\n </div>\r\n </foreignObject>\r\n </g>\r\n </svg>\r\n </div>\r\n );\r\n })}\r\n\r\n <svg\r\n key=\"current-path\"\r\n class=\"object\"\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n width={this.core.store.state.currentPath?.width}\r\n height={this.core.store.state.currentPath?.height}\r\n style={{\r\n left: '0',\r\n top: '0',\r\n zIndex: this.core.store.state.currentPath?.zIndex.toString(),\r\n position: 'absolute',\r\n transform: this.core.store.state.currentPath?.transformationMatrix,\r\n transformOrigin: 'top left',\r\n overflow: 'visible',\r\n }}\r\n viewBox={this.core.store.state.currentPath?.viewBox}\r\n >\r\n <path d={this.core.store.state.currentPath?.d} fill={this.core.store.state.currentPath?.fill} stroke={this.core.store.state.currentPath?.stroke} />\r\n </svg>\r\n </div>\r\n\r\n {this.core.store.state.isContextMenuVisible && (\r\n <kritzel-context-menu\r\n class=\"context-menu\"\r\n ref={el => (this.contextMenuElement = el)}\r\n items={this.core.store.state.contextMenuItems}\r\n objects={this.core.store.state.selectionGroup?.objects || []}\r\n style={{\r\n position: 'fixed',\r\n left: `${this.core.store.state.contextMenuX}px`,\r\n top: `${this.core.store.state.contextMenuY}px`,\r\n zIndex: '10000',\r\n }}\r\n onActionSelected={event => {\r\n event.detail.action(\r\n {\r\n x: (-this.core.store.state.translateX + this.core.store.state.contextMenuX) / this.core.store.state.scale,\r\n y: (-this.core.store.state.translateY + this.core.store.state.contextMenuY) / this.core.store.state.scale,\r\n },\r\n this.core.store.state.selectionGroup?.objects,\r\n );\r\n this.hideContextMenu();\r\n }}\r\n onClose={() => this.hideContextMenu()}\r\n ></kritzel-context-menu>\r\n )}\r\n\r\n {this.core.store.state?.activeTool instanceof KritzelEraserTool && !this.core.store.state.isScaling && <kritzel-cursor-trail core={this.core}></kritzel-cursor-trail>}\r\n </Host>\r\n );\r\n }\r\n}\r\n"]}
1
+ {"version":3,"file":"kritzel-engine.js","sourceRoot":"","sources":["../../../../src/components/core/kritzel-engine/kritzel-engine.tsx"],"names":[],"mappings":"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;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CACF","sourcesContent":["import { Component, Host, h, Listen, Element, Prop, Method, State, Event, EventEmitter, Watch } from '@stencil/core';\r\nimport { KritzelTool } from '../../../interfaces/tool.interface';\r\nimport { KritzelViewport } from '../../../classes/core/viewport.class';\r\nimport { KritzelPath } from '../../../classes/objects/path.class';\r\nimport { KritzelSelectionTool } from '../../../classes/tools/selection-tool.class';\r\nimport { KritzelImage } from '../../../classes/objects/image.class';\r\nimport { KritzelText } from '../../../classes/objects/text.class';\r\nimport { KritzelSelectionGroup } from '../../../classes/objects/selection-group.class';\r\nimport { KrtizelSelectionBox } from '../../../classes/objects/selection-box.class';\r\nimport { KritzelKeyHandler } from '../../../classes/handlers/key.handler';\r\nimport { KritzelBaseTool } from '../../../classes/tools/base-tool.class';\r\nimport { ContextMenuItem } from '../../../interfaces/context-menu-item.interface';\r\nimport { KritzelEraserTool } from '../../../classes/tools/eraser-tool.class';\r\nimport { KritzelBrushToolConfig, KritzelTextToolConfig } from '../../../interfaces/toolbar-control.interface';\r\nimport { KritzelKeyboardHelper } from '../../../helpers/keyboard.helper';\r\nimport { KritzelContextMenuHandler } from '../../../classes/handlers/context-menu.handler';\r\nimport { AddObjectCommand } from '../../../classes/commands/add-object.command';\r\nimport { KritzelBaseObject } from '../../../classes/objects/base-object.class';\r\nimport { UpdateObjectCommand } from '../../../classes/commands/update-object.command';\r\nimport { RemoveObjectCommand } from '../../../classes/commands/remove-object.command';\r\nimport { KritzelToolRegistry } from '../../../classes/registries/tool.registry';\r\nimport { KritzelEventHelper } from '../../../helpers/event.helper';\r\nimport { KritzelClassHelper } from '../../../helpers/class.helper';\r\nimport { ABSOLUTE_SCALE_MAX, ABSOLUTE_SCALE_MIN } from '../../../constants/engine.constants';\r\nimport { KritzelCustomElement } from '../../../classes/objects/custom-element.class';\r\nimport { KritzelWorkspace } from '../../../classes/core/workspace.class';\r\nimport { KritzelEngineState } from '../../../interfaces/engine-state.interface';\r\nimport { KritzelCore } from '../../../classes/core/core.class';\r\nimport { KritzelDevicesHelper } from '../../../helpers/devices.helper';\r\n\r\n@Component({\r\n tag: 'kritzel-engine',\r\n styleUrl: 'kritzel-engine.css',\r\n shadow: true,\r\n})\r\nexport class KritzelEngine {\r\n @Element() host: HTMLElement;\r\n\r\n @Prop() workspace?: KritzelWorkspace;\r\n @Watch('workspace')\r\n onWorkspaceChange(newWorkspace: KritzelWorkspace | null) {\r\n if (this.core.store.state.activeWorkspace !== newWorkspace) {\r\n this.core.beforeWorkspaceChange();\r\n this.core.initializeWorkspace(newWorkspace);\r\n }\r\n }\r\n @Prop() activeTool: KritzelTool;\r\n @Prop() globalContextMenuItems: ContextMenuItem[];\r\n @Prop() objectContextMenuItems: ContextMenuItem[];\r\n @Prop({ mutable: true }) scaleMax: number = ABSOLUTE_SCALE_MAX;\r\n @Watch('scaleMax')\r\n validateScaleMax(newValue: number) {\r\n if (newValue > ABSOLUTE_SCALE_MAX) {\r\n console.warn(`scaleMax cannot be greater than ${ABSOLUTE_SCALE_MAX}.`);\r\n this.scaleMax = ABSOLUTE_SCALE_MAX;\r\n this.core.store.state.scaleMax = this.scaleMax;\r\n } else {\r\n this.core.store.state.scaleMax = newValue;\r\n }\r\n }\r\n @Prop({ mutable: true }) scaleMin: number = ABSOLUTE_SCALE_MIN;\r\n @Watch('scaleMin')\r\n validateScaleMin(newValue: number) {\r\n if (newValue < ABSOLUTE_SCALE_MIN) {\r\n console.warn(`scaleMin cannot be less than ${ABSOLUTE_SCALE_MIN}.`);\r\n this.scaleMin = ABSOLUTE_SCALE_MIN;\r\n this.core.store.state.scaleMin = this.scaleMin;\r\n } else {\r\n this.core.store.state.scaleMin = newValue;\r\n }\r\n }\r\n\r\n @Event() isEngineReady: EventEmitter<KritzelEngineState>;\r\n @Event() activeToolChange: EventEmitter<KritzelBaseTool>;\r\n @Event() workspacesChange: EventEmitter<KritzelWorkspace[]>;\r\n @Event() longpress: EventEmitter<PointerEvent>;\r\n\r\n @State() forceUpdate: number = 0;\r\n\r\n @Listen('wheel', { passive: false })\r\n handleWheel(ev) {\r\n if (this.core.store.isDisabled) {\r\n return;\r\n }\r\n\r\n if (this.core.store.state.isContextMenuVisible) {\r\n this.hideContextMenu();\r\n }\r\n\r\n this.viewport.handleWheel(ev);\r\n this.core.store.state?.activeTool?.handleWheel(ev);\r\n }\r\n\r\n @Listen('pointerdown', { passive: false })\r\n handlePointerDown(ev: PointerEvent) {\r\n if (this.core.store.isDisabled) {\r\n return;\r\n }\r\n\r\n if (KritzelDevicesHelper.isTouchDevice()) {\r\n KritzelEventHelper.onLongPress(ev, (event: PointerEvent) => this.longpress.emit(event));\r\n }\r\n\r\n this.host.setPointerCapture(ev.pointerId);\r\n this.core.store.state.pointers.set(ev.pointerId, ev);\r\n\r\n this.viewport.handlePointerDown(ev);\r\n this.core.store.state?.activeTool?.handlePointerDown(ev);\r\n }\r\n\r\n @Listen('pointermove', { passive: false })\r\n handlePointerMove(ev: PointerEvent) {\r\n if (this.core.store.isDisabled) {\r\n return;\r\n }\r\n\r\n this.core.store.state.pointers.set(ev.pointerId, ev);\r\n\r\n this.viewport.handlePointerMove(ev);\r\n this.core.store.state?.activeTool?.handlePointerMove(ev);\r\n }\r\n\r\n @Listen('pointerup', { passive: false })\r\n handlePointerUp(ev: PointerEvent) {\r\n if (this.core.store.isDisabled) {\r\n return;\r\n }\r\n\r\n this.core.store.state.pointers.delete(ev.pointerId);\r\n this.host.releasePointerCapture(ev.pointerId);\r\n\r\n this.viewport.handlePointerUp(ev);\r\n this.core.store.state?.activeTool?.handlePointerUp(ev);\r\n }\r\n\r\n @Listen('pointercancel', { passive: false })\r\n handlePointerCancel(ev: PointerEvent) {\r\n if (this.core.store.isDisabled) {\r\n return;\r\n }\r\n\r\n this.host.releasePointerCapture(ev.pointerId);\r\n this.core.store.state.pointers.delete(ev.pointerId);\r\n\r\n this.viewport.handlePointerUp(ev);\r\n this.core.store.state?.activeTool?.handlePointerUp(ev);\r\n }\r\n\r\n @Listen('longpress', { passive: false })\r\n handleLongPress(ev: CustomEvent<PointerEvent>) {\r\n this.contextMenuHandler.handleContextMenu(ev.detail);\r\n }\r\n\r\n @Listen('contextmenu', { capture: false })\r\n handleContextMenu(ev: PointerEvent) {\r\n ev.preventDefault();\r\n\r\n if (this.core.store.isDisabled) {\r\n return;\r\n }\r\n\r\n if (ev.pointerType === 'touch') {\r\n return;\r\n }\r\n\r\n this.contextMenuHandler.handleContextMenu(ev);\r\n }\r\n\r\n @Listen('resize', { target: 'window' })\r\n handleResize() {\r\n this.viewport.handleResize();\r\n }\r\n\r\n @Listen('keydown', { target: 'window' })\r\n handleKeyDown(ev) {\r\n if (this.core.store.isDisabled) {\r\n return;\r\n }\r\n\r\n this.keyHandler.handleKeyDown(ev);\r\n }\r\n\r\n @Listen('keyup', { target: 'window' })\r\n handleKeyUp(ev) {\r\n if (this.core.store.isDisabled) {\r\n return;\r\n }\r\n\r\n this.keyHandler.handleKeyUp(ev);\r\n }\r\n\r\n @Listen('dblclick', { target: 'document' })\r\n preventDoubleTapZoomOnTouchDevices(ev: MouseEvent) {\r\n ev.preventDefault();\r\n }\r\n\r\n @Method()\r\n async registerTool(toolName: string, toolClass: any, toolConfig?: KritzelTextToolConfig | KritzelBrushToolConfig): Promise<KritzelBaseTool> {\r\n if (typeof toolClass !== 'function' || !(toolClass.prototype instanceof KritzelBaseTool)) {\r\n console.error(`Failed to register tool \"${toolName}\": Tool class must be a constructor function`);\r\n return null;\r\n }\r\n\r\n const registeredTool = KritzelToolRegistry.registerTool(toolName, toolClass, this.core);\r\n\r\n if (toolConfig) {\r\n Object.entries(toolConfig).forEach(([key, value]) => {\r\n registeredTool[key] = value;\r\n });\r\n }\r\n\r\n return Promise.resolve(registeredTool);\r\n }\r\n\r\n @Method()\r\n async changeActiveTool(tool: KritzelBaseTool) {\r\n this.core.store.state.activeTool?.onDeactivate();\r\n this.core.store.setState('activeTool', tool);\r\n this.core.deselectAllObjects();\r\n tool?.onActivate();\r\n }\r\n\r\n @Method()\r\n async disable() {\r\n this.core.store.state.isEnabled = false;\r\n this.core.rerender();\r\n }\r\n\r\n @Method()\r\n async enable() {\r\n this.core.store.state.isEnabled = true;\r\n this.core.rerender();\r\n }\r\n\r\n @Method()\r\n async delete() {\r\n this.core.delete();\r\n }\r\n\r\n @Method()\r\n async copy() {\r\n this.core.copy();\r\n }\r\n\r\n @Method()\r\n async paste(x: number, y: number) {\r\n this.core.paste(x, y);\r\n }\r\n\r\n @Method()\r\n async bringForward(object?: KritzelBaseObject<any>) {\r\n this.core.bringForward(object);\r\n }\r\n\r\n @Method()\r\n async sendBackward(object?: KritzelBaseObject<any>) {\r\n this.core.sendBackward(object);\r\n }\r\n\r\n @Method()\r\n async bringToFront(object?: KritzelBaseObject<any>) {\r\n this.core.bringToFront(object);\r\n }\r\n\r\n @Method()\r\n async sendToBack(object?: KritzelBaseObject<any>) {\r\n this.core.sendToBack(object);\r\n }\r\n\r\n @Method()\r\n async undo() {\r\n this.core.history.undo();\r\n }\r\n\r\n @Method()\r\n async redo() {\r\n this.core.history.redo();\r\n }\r\n\r\n @Method()\r\n async hideContextMenu() {\r\n this.core.store.state.pointers.clear();\r\n this.core.store.state.isContextMenuVisible = false;\r\n this.core.store.state.selectionBox = null;\r\n this.core.store.state.isSelecting = false;\r\n this.core.store.state.isEnabled = true;\r\n this.core.rerender();\r\n }\r\n\r\n @Method()\r\n async getObjectById<T extends KritzelBaseObject>(id: string): Promise<T | null> {\r\n const object = this.core.store.allObjects.find(obj => obj.id === id) as T | undefined;\r\n return object || null;\r\n }\r\n\r\n @Method()\r\n async addObject<T extends KritzelBaseObject>(object: T): Promise<T | null> {\r\n this.core.deselectAllObjects();\r\n\r\n object.id = object.generateId();\r\n object._core = this.core;\r\n object.scale = object.scale ? object.scale : this.core.store.state.scale;\r\n object.zIndex = this.core.store.currentZIndex;\r\n\r\n const command = new AddObjectCommand(this.core, this, object);\r\n this.core.commandManager.executeCommand(command);\r\n\r\n return object;\r\n }\r\n\r\n @Method()\r\n async updateObject<T extends KritzelBaseObject>(object: T, updatedProperties: Partial<T>): Promise<T | null> {\r\n this.core.deselectAllObjects();\r\n\r\n const command = new UpdateObjectCommand(this.core, this, object, updatedProperties);\r\n this.core.commandManager.executeCommand(command);\r\n\r\n return object;\r\n }\r\n\r\n @Method()\r\n async removeObject<T extends KritzelBaseObject>(object: T): Promise<T | null> {\r\n this.core.deselectAllObjects();\r\n\r\n const command = new RemoveObjectCommand(this.core, this, object);\r\n this.core.commandManager.executeCommand(command);\r\n\r\n return object;\r\n }\r\n\r\n @Method()\r\n async getSelectedObjects(): Promise<KritzelBaseObject<any>[]> {\r\n return this.core.store.state.selectionGroup ? this.core.store.state.selectionGroup.objects : [];\r\n }\r\n\r\n @Method()\r\n async selectObjects(objects: KritzelBaseObject[]) {\r\n this.core.store.state.activeTool?.onDeactivate();\r\n this.core.store.setState('activeTool', KritzelToolRegistry.getTool('selection'));\r\n this.core.deselectAllObjects();\r\n this.core.selectObjects(objects);\r\n }\r\n\r\n @Method()\r\n async selectAllObjectsInViewport() {\r\n this.core.store.state.activeTool?.onDeactivate();\r\n this.core.store.setState('activeTool', KritzelToolRegistry.getTool('selection'));\r\n this.core.deselectAllObjects();\r\n this.core.selectAllObjectsInViewport();\r\n }\r\n\r\n @Method()\r\n async clearSelection() {\r\n this.core.clearSelection();\r\n }\r\n\r\n @Method()\r\n async centerObjectInViewport(object: KritzelBaseObject) {\r\n object.centerInViewport();\r\n\r\n const command = new UpdateObjectCommand(this.core, this, object, object);\r\n this.core.commandManager.executeCommand(command);\r\n\r\n return object;\r\n }\r\n\r\n @Method()\r\n async getCopiedObjects(): Promise<KritzelBaseObject[]> {\r\n return this.core.store.state.copiedObjects?.objects || [];\r\n }\r\n\r\n @Method()\r\n async createWorkspace(workspace: KritzelWorkspace): Promise<KritzelWorkspace | null> {\r\n workspace._core = this.core;\r\n await this.core.createWorkspace(workspace);\r\n this.workspacesChange.emit(this.core.store.state.workspaces);\r\n return workspace;\r\n }\r\n\r\n @Method()\r\n async updateWorkspace(workspace: KritzelWorkspace): Promise<void> {\r\n await this.core.updateWorkspace(workspace);\r\n this.workspacesChange.emit(this.core.store.state.workspaces);\r\n }\r\n\r\n @Method()\r\n async deleteWorkspace(workspace: KritzelWorkspace): Promise<void> {\r\n await this.core.deleteWorkspace(workspace);\r\n this.workspacesChange.emit(this.core.store.state.workspaces);\r\n }\r\n\r\n @Method()\r\n async getWorkspaces(): Promise<KritzelWorkspace[]> {\r\n return this.core.getWorkspaces();\r\n }\r\n\r\n @Method()\r\n async getActiveWorkspace(): Promise<KritzelWorkspace> {\r\n return this.core.store.state.activeWorkspace;\r\n }\r\n\r\n core: KritzelCore;\r\n viewport: KritzelViewport;\r\n contextMenuHandler: KritzelContextMenuHandler;\r\n keyHandler: KritzelKeyHandler;\r\n contextMenuElement: HTMLKritzelContextMenuElement | null = null;\r\n\r\n get isSelecting() {\r\n return this.core.store.state.activeTool instanceof KritzelSelectionTool && this.core.store.state.isSelecting;\r\n }\r\n\r\n get isSelectionActive() {\r\n return this.core.store.state.activeTool instanceof KritzelSelectionTool && this.core.store.state.selectionGroup !== null;\r\n }\r\n\r\n constructor() {\r\n this.core = new KritzelCore(this);\r\n }\r\n\r\n componentWillLoad() {\r\n this.validateScaleMax(this.scaleMax);\r\n this.validateScaleMin(this.scaleMin);\r\n }\r\n\r\n async componentDidLoad() {\r\n this.contextMenuHandler = new KritzelContextMenuHandler(this.core, this.globalContextMenuItems, this.objectContextMenuItems);\r\n this.keyHandler = new KritzelKeyHandler(this.core);\r\n this.viewport = new KritzelViewport(this.core, this.host);\r\n\r\n await this.core.initializeDatabase();\r\n await this.core.initializeWorkspace(this.workspace);\r\n\r\n this._registerStateChangeListeners();\r\n\r\n if (this.core.store.state.isReady === false) {\r\n this.core.store.state.isReady = true;\r\n this.isEngineReady.emit(this.core.store.state);\r\n }\r\n }\r\n\r\n private _registerStateChangeListeners() {\r\n this.core.store.onStateChange('activeTool', this._handleActiveToolChange.bind(this));\r\n }\r\n\r\n private _handleActiveToolChange(activeTool: KritzelBaseTool) {\r\n if (!(activeTool instanceof KritzelSelectionTool)) {\r\n this.core.clearSelection();\r\n this.core.store.state.selectionBox = null;\r\n this.core.store.state.isSelecting = false;\r\n this.core.store.state.isResizeHandleSelected = false;\r\n this.core.store.state.isRotationHandleSelected = false;\r\n }\r\n\r\n this.core.store.state.skipContextMenu = false;\r\n this.core.store.state.copiedObjects = null;\r\n this.activeToolChange.emit(activeTool);\r\n KritzelKeyboardHelper.forceHideKeyboard();\r\n\r\n this.core.rerender();\r\n }\r\n\r\n render() {\r\n const computedStyle = window.getComputedStyle(this.host);\r\n const baseHandleSizePx = computedStyle.getPropertyValue('--kritzel-selection-handle-size').trim() || '6px';\r\n const baseHandleSize = parseFloat(baseHandleSizePx);\r\n const baseHandleTouchSize = baseHandleSize * 2 < 14 ? 14 : baseHandleSize;\r\n const viewportCenterX = this.core.store.state.viewportWidth / 2 + this.core.store.state.translateX;\r\n const viewportCenterY = this.core.store.state.viewportHeight / 2 + this.core.store.state.translateY;\r\n\r\n return (\r\n <Host>\r\n <div class=\"debug-panel\" style={{ display: this.core.store.state.debugInfo.showViewportInfo ? 'block' : 'none' }}>\r\n <div>ActiveWorkspaceId: {this.core.store.state?.activeWorkspace?.id}</div>\r\n <div>ActiveWorkspaceName: {this.core.store.state?.activeWorkspace?.name}</div>\r\n <div>TranslateX: {this.core.store.state?.translateX}</div>\r\n <div>TranslateY: {this.core.store.state?.translateY}</div>\r\n <div>ViewportWidth: {this.core.store.state?.viewportWidth}</div>\r\n <div>ViewportHeight: {this.core.store.state?.viewportHeight}</div>\r\n <div>Scale: {this.core.store.state?.scale}</div>\r\n <div>ActiveTool: {this.core.store.state?.activeTool?.name}</div>\r\n <div>HasViewportChanged: {this.core.store.state?.hasViewportChanged ? 'true' : 'false'}</div>\r\n <div>IsEnabled: {this.core.store.state?.isEnabled ? 'true' : 'false'}</div>\r\n <div>IsScaling: {this.core.store.state?.isScaling ? 'true' : 'false'}</div>\r\n <div>IsPanning: {this.core.store.state?.isPanning ? 'true' : 'false'}</div>\r\n <div>IsSelecting: {this.isSelecting ? 'true' : 'false'}</div>\r\n <div>IsSelectionActive: {this.isSelectionActive ? 'true' : 'false'}</div>\r\n <div>IsResizeHandleSelected: {this.core.store.state.isResizeHandleSelected ? 'true' : 'false'}</div>\r\n <div>IsRotationHandleSelected: {this.core.store.state.isRotationHandleSelected ? 'true' : 'false'}</div>\r\n <div>IsDrawing: {this.core.store.state.isDrawing ? 'true' : 'false'}</div>\r\n <div>IsWriting: {this.core.store.state.isWriting ? 'true' : 'false'}</div>\r\n <div>PointerX: {this.core.store.state?.pointerX}</div>\r\n <div>PointerY: {this.core.store.state?.pointerY}</div>\r\n <div>SelectedObjects: {this.core.store.state.selectionGroup?.objects.length || 0}</div>\r\n <div>\r\n ViewportCenter: ({viewportCenterX.toFixed(2)}, {viewportCenterY.toFixed(2)})\r\n </div>\r\n </div>\r\n\r\n <div\r\n id=\"origin\"\r\n class=\"origin\"\r\n style={{\r\n transform: `matrix(${this.core.store.state?.scale}, 0, 0, ${this.core.store.state?.scale}, ${this.core.store.state?.translateX}, ${this.core.store.state?.translateY})`,\r\n }}\r\n >\r\n {this.core.store.state.objectsMap.allObjects()?.map(object => {\r\n return (\r\n <div\r\n key={object.id}\r\n style={{\r\n display: object.isInViewport() ? 'block' : 'none',\r\n transform: object?.transformationMatrix,\r\n transformOrigin: 'top left',\r\n zIndex: object.zIndex.toString(),\r\n position: 'absolute',\r\n }}\r\n >\r\n <svg\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n id={object.id}\r\n class=\"object\"\r\n style={{\r\n height: object?.totalHeight.toString(),\r\n width: object?.totalWidth.toString(),\r\n left: '0',\r\n top: '0',\r\n position: 'absolute',\r\n transform: `rotate(${object.rotationDegrees}deg)`,\r\n transformOrigin: 'center',\r\n opacity: object.markedForRemoval ? '0.5' : object.opacity.toString(),\r\n pointerEvents: object.markedForRemoval ? 'none' : 'auto',\r\n }}\r\n >\r\n <foreignObject\r\n x=\"0\"\r\n y=\"0\"\r\n width={object.totalWidth.toString()}\r\n height={object.totalHeight.toString()}\r\n style={{\r\n minHeight: '0',\r\n minWidth: '0',\r\n backgroundColor: object.backgroundColor,\r\n borderColor: object.borderColor,\r\n borderWidth: object.borderWidth + 'px',\r\n borderStyle: 'solid',\r\n padding: object.padding + 'px',\r\n overflow: 'visible',\r\n }}\r\n >\r\n {KritzelClassHelper.isInstanceOf<KritzelPath>(object, 'KritzelPath') && (\r\n <svg\r\n ref={el => object.mount(el)}\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n style={{\r\n height: object?.height.toString(),\r\n width: object?.width.toString(),\r\n position: 'absolute',\r\n overflow: 'visible',\r\n }}\r\n viewBox={object?.viewBox}\r\n >\r\n <path d={object?.d} fill={object.fill} stroke={object?.stroke} />\r\n </svg>\r\n )}\r\n\r\n {KritzelClassHelper.isInstanceOf<KritzelImage>(object, 'KritzelImage') && (\r\n <img\r\n ref={el => object.mount(el)}\r\n src={object.src}\r\n style={{\r\n width: '100%',\r\n height: '100%',\r\n userSelect: 'none',\r\n pointerEvents: 'none',\r\n }}\r\n draggable={false}\r\n onDragStart={e => e.preventDefault()}\r\n />\r\n )}\r\n\r\n {KritzelClassHelper.isInstanceOf<KritzelText>(object, 'KritzelText') && (\r\n <div\r\n ref={el => object.mount(el)}\r\n onPointerDown={e => object.handlePointerDown(e)}\r\n onPointerMove={e => object.handlePointerMove(e)}\r\n onPointerUp={e => object.handlePointerUp(e)}\r\n style={{\r\n minWidth: object.initialWidth + 'px',\r\n minHeight: object.initialHeight + 'px',\r\n maxWidth: '500px',\r\n height: 'auto',\r\n width: 'max-content',\r\n transformOrigin: 'top left',\r\n transform: `scale(${object.scaleFactor})`,\r\n backgroundColor: object.backgroundColor,\r\n overflow: 'visible',\r\n }}\r\n ></div>\r\n )}\r\n\r\n {KritzelClassHelper.isInstanceOf<KritzelCustomElement>(object, 'KritzelCustomElement') && (\r\n <div\r\n ref={el => object.mount(el)}\r\n style={{\r\n width: '100%',\r\n height: '100%',\r\n pointerEvents: 'auto',\r\n overflow: 'hidden',\r\n display: 'block',\r\n }}\r\n ></div>\r\n )}\r\n\r\n {KritzelClassHelper.isInstanceOf<KritzelSelectionGroup>(object, 'KritzelSelectionGroup') && (\r\n <div\r\n ref={el => object.mount(el)}\r\n style={{\r\n width: '100%',\r\n height: '100%',\r\n }}\r\n ></div>\r\n )}\r\n\r\n {KritzelClassHelper.isInstanceOf<KrtizelSelectionBox>(object, 'KrtizelSelectionBox') && (\r\n <div\r\n ref={el => object.mount(el)}\r\n style={{\r\n width: '100%',\r\n height: '100%',\r\n backgroundColor: KritzelDevicesHelper.isFirefox() ? object.backgroundColor : 'transparent',\r\n borderWidth: KritzelDevicesHelper.isFirefox() ? object.borderWidth + 'px' : '0',\r\n borderStyle: KritzelDevicesHelper.isFirefox() ? 'solid' : 'none',\r\n borderColor: KritzelDevicesHelper.isFirefox() ? object.borderColor : 'transparent',\r\n }}\r\n ></div>\r\n )}\r\n </foreignObject>\r\n\r\n <line\r\n x1=\"0\"\r\n y1=\"0\"\r\n x2={object.totalWidth}\r\n y2=\"0\"\r\n style={{\r\n stroke: 'var(--kritzel-selection-border-color, #007AFF)',\r\n strokeWidth: `calc(var(--kritzel-selection-border-width, 2px) * ${object.scale} / ${this.core.store.state?.scale})`,\r\n strokeLinecap: 'square',\r\n }}\r\n visibility={object.isSelected ? 'visible' : 'hidden'}\r\n />\r\n <line\r\n x1=\"0\"\r\n y1=\"0\"\r\n x2=\"0\"\r\n y2={object.totalHeight}\r\n style={{\r\n stroke: 'var(--kritzel-selection-border-color, #007AFF)',\r\n strokeWidth: `calc(var(--kritzel-selection-border-width, 2px) * ${object.scale} / ${this.core.store.state?.scale})`,\r\n strokeLinecap: 'square',\r\n }}\r\n visibility={object.isSelected ? 'visible' : 'hidden'}\r\n />\r\n <line\r\n x1=\"0\"\r\n y1={object.totalHeight}\r\n x2={object.totalWidth}\r\n y2={object.totalHeight}\r\n style={{\r\n stroke: 'var(--kritzel-selection-border-color, #007AFF)',\r\n strokeWidth: `calc(var(--kritzel-selection-border-width, 2px) * ${object.scale} / ${this.core.store.state?.scale})`,\r\n strokeLinecap: 'square',\r\n }}\r\n visibility={object.isSelected ? 'visible' : 'hidden'}\r\n />\r\n <line\r\n x1={object.totalWidth}\r\n y1=\"0\"\r\n x2={object.totalWidth}\r\n y2={object.totalHeight}\r\n style={{\r\n stroke: 'var(--kritzel-selection-border-color, #007AFF)',\r\n strokeWidth: `calc(var(--kritzel-selection-border-width, 2px) * ${object.scale} / ${this.core.store.state?.scale})`,\r\n strokeLinecap: 'square',\r\n }}\r\n visibility={object.isSelected ? 'visible' : 'hidden'}\r\n />\r\n\r\n <circle\r\n class=\"resize-handle top-left\"\r\n cx=\"0\"\r\n cy=\"0\"\r\n r={`${(baseHandleSize * object.scale) / this.core.store.state?.scale}`}\r\n style={{\r\n fill: 'var(--kritzel-selection-handle-color, #000000)',\r\n }}\r\n visibility={object.isSelected && !this.isSelecting ? 'visible' : 'hidden'}\r\n />\r\n <circle\r\n class=\"resize-handle-overlay top-left\"\r\n cx=\"0\"\r\n cy=\"0\"\r\n r={`${(baseHandleTouchSize * object.scale) / this.core.store.state?.scale}`}\r\n style={{\r\n fill: 'transparent',\r\n }}\r\n visibility={object.isSelected && !this.isSelecting ? 'visible' : 'hidden'}\r\n />\r\n\r\n <circle\r\n class=\"resize-handle top-right\"\r\n cx={object.totalWidth}\r\n cy=\"0\"\r\n r={`${(baseHandleSize * object.scale) / this.core.store.state?.scale}`}\r\n style={{\r\n fill: 'var(--kritzel-selection-handle-color, #000000)',\r\n }}\r\n visibility={object.isSelected && !this.isSelecting ? 'visible' : 'hidden'}\r\n />\r\n <circle\r\n class=\"resize-handle-overlay top-right\"\r\n cx={object.totalWidth}\r\n cy=\"0\"\r\n r={`${(baseHandleTouchSize * object.scale) / this.core.store.state?.scale}`}\r\n style={{\r\n fill: 'transparent',\r\n }}\r\n visibility={object.isSelected && !this.isSelecting ? 'visible' : 'hidden'}\r\n />\r\n\r\n <circle\r\n class=\"resize-handle bottom-left\"\r\n cx=\"0\"\r\n cy={object.totalHeight}\r\n r={`${(baseHandleSize * object.scale) / this.core.store.state?.scale}`}\r\n style={{\r\n fill: 'var(--kritzel-selection-handle-color, #000000)',\r\n }}\r\n visibility={object.isSelected && !this.isSelecting ? 'visible' : 'hidden'}\r\n />\r\n <circle\r\n class=\"resize-handle-overlay bottom-left\"\r\n cx=\"0\"\r\n cy={object.totalHeight}\r\n r={`${(baseHandleTouchSize * object.scale) / this.core.store.state?.scale}`}\r\n style={{\r\n fill: 'transparent',\r\n }}\r\n visibility={object.isSelected && !this.isSelecting ? 'visible' : 'hidden'}\r\n />\r\n\r\n <circle\r\n class=\"resize-handle bottom-right\"\r\n cx={object.totalWidth}\r\n cy={object.totalHeight}\r\n r={`${(baseHandleSize * object.scale) / this.core.store.state?.scale}`}\r\n style={{\r\n fill: 'var(--kritzel-selection-handle-color, #000000)',\r\n }}\r\n visibility={object.isSelected && !this.isSelecting ? 'visible' : 'hidden'}\r\n />\r\n <circle\r\n class=\"resize-handle-overlay bottom-right\"\r\n cx={object.totalWidth}\r\n cy={object.totalHeight}\r\n r={`${(baseHandleTouchSize * object.scale) / this.core.store.state?.scale}`}\r\n style={{\r\n fill: 'transparent',\r\n }}\r\n visibility={object.isSelected && !this.isSelecting ? 'visible' : 'hidden'}\r\n />\r\n\r\n <line\r\n x1={object.totalWidth / 2}\r\n y1=\"0\"\r\n x2={object.totalWidth / 2}\r\n y2={-((15 * object.scale) / this.core.store.state?.scale)}\r\n style={{\r\n stroke: 'var(--kritzel-selection-border-color, #007AFF)',\r\n strokeWidth: `calc(var(--kritzel-selection-border-width, 2px) * ${object.scale} / ${this.core.store.state?.scale})`,\r\n }}\r\n visibility={object.isSelected && !this.isSelecting ? 'visible' : 'hidden'}\r\n />\r\n <circle\r\n class=\"rotation-handle\"\r\n cx={object.totalWidth / 2}\r\n cy={-((15 * object.scale) / this.core.store.state?.scale)}\r\n r={`${(baseHandleSize * object.scale) / this.core.store.state?.scale}`}\r\n style={{\r\n fill: 'var(--kritzel-selection-handle-color, #000000)',\r\n }}\r\n visibility={object.isSelected && !this.isSelecting ? 'visible' : 'hidden'}\r\n />\r\n <circle\r\n class=\"rotation-handle-overlay\"\r\n cx={object.totalWidth / 2}\r\n cy={-((15 * object.scale) / this.core.store.state?.scale)}\r\n r={`${(baseHandleTouchSize * object.scale) / this.core.store.state?.scale}`}\r\n style={{\r\n fill: 'transparent',\r\n cursor: 'grab',\r\n }}\r\n visibility={object.isSelected && !this.isSelecting ? 'visible' : 'hidden'}\r\n />\r\n\r\n <g style={{ display: this.core.store.state.debugInfo.showObjectInfo ? 'block' : 'none', pointerEvents: 'none' }}>\r\n <foreignObject\r\n x={object.totalWidth.toString()}\r\n y=\"0\"\r\n width=\"400px\"\r\n height=\"160px\"\r\n style={{ minHeight: '0', minWidth: '0', display: object.isDebugInfoVisible ? 'block' : 'none' }}\r\n >\r\n <div style={{ width: '100%', height: '100%' }}>\r\n <div style={{ whitespace: 'nowrap' }}>Id: {object.id}</div>\r\n <div style={{ whiteSpace: 'nowrap' }}>width: {object.width}</div>\r\n <div style={{ whiteSpace: 'nowrap' }}>height: {object.height}</div>\r\n {/* <div style={{ whiteSpace: 'nowrap' }}>zIndex: {object.zIndex}</div>\r\n <div style={{ whiteSpace: 'nowrap' }}>translateX: {object.translateX}</div>\r\n <div style={{ whiteSpace: 'nowrap' }}>translateY: {object.translateY}</div>\r\n <div style={{ whiteSpace: 'nowrap' }}>scale: {object.scale}</div>\r\n <div style={{ whiteSpace: 'nowrap' }}>rotation: {object.rotation}</div>\r\n <div style={{ whiteSpace: 'nowrap' }}>x: {object.x}</div>\r\n <div style={{ whiteSpace: 'nowrap' }}>y: {object.y}</div> */}\r\n </div>\r\n </foreignObject>\r\n </g>\r\n </svg>\r\n </div>\r\n );\r\n })}\r\n\r\n <svg\r\n key=\"current-path\"\r\n class=\"object\"\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n width={this.core.store.state.currentPath?.width}\r\n height={this.core.store.state.currentPath?.height}\r\n style={{\r\n left: '0',\r\n top: '0',\r\n zIndex: this.core.store.state.currentPath?.zIndex.toString(),\r\n position: 'absolute',\r\n transform: this.core.store.state.currentPath?.transformationMatrix,\r\n transformOrigin: 'top left',\r\n overflow: 'visible',\r\n }}\r\n viewBox={this.core.store.state.currentPath?.viewBox}\r\n >\r\n <path d={this.core.store.state.currentPath?.d} fill={this.core.store.state.currentPath?.fill} stroke={this.core.store.state.currentPath?.stroke} />\r\n </svg>\r\n </div>\r\n\r\n {this.core.store.state.isContextMenuVisible && (\r\n <kritzel-context-menu\r\n class=\"context-menu\"\r\n ref={el => (this.contextMenuElement = el)}\r\n items={this.core.store.state.contextMenuItems}\r\n objects={this.core.store.state.selectionGroup?.objects || []}\r\n style={{\r\n position: 'fixed',\r\n left: `${this.core.store.state.contextMenuX}px`,\r\n top: `${this.core.store.state.contextMenuY}px`,\r\n zIndex: '10000',\r\n }}\r\n onActionSelected={event => {\r\n event.detail.action(\r\n {\r\n x: (-this.core.store.state.translateX + this.core.store.state.contextMenuX) / this.core.store.state.scale,\r\n y: (-this.core.store.state.translateY + this.core.store.state.contextMenuY) / this.core.store.state.scale,\r\n },\r\n this.core.store.state.selectionGroup?.objects,\r\n );\r\n this.hideContextMenu();\r\n }}\r\n onClose={() => this.hideContextMenu()}\r\n ></kritzel-context-menu>\r\n )}\r\n\r\n {this.core.store.state?.activeTool instanceof KritzelEraserTool && !this.core.store.state.isScaling && <kritzel-cursor-trail core={this.core}></kritzel-cursor-trail>}\r\n </Host>\r\n );\r\n }\r\n}\r\n"]}
@@ -32,7 +32,6 @@ export class KritzelBrushStyle {
32
32
  return {
33
33
  "type": {
34
34
  "type": "string",
35
- "attribute": "type",
36
35
  "mutable": false,
37
36
  "complexType": {
38
37
  "original": "'pen' | 'highlighter'",
@@ -48,11 +47,11 @@ export class KritzelBrushStyle {
48
47
  "getter": false,
49
48
  "setter": false,
50
49
  "reflect": false,
50
+ "attribute": "type",
51
51
  "defaultValue": "'pen'"
52
52
  },
53
53
  "brushOptions": {
54
54
  "type": "unknown",
55
- "attribute": "brush-options",
56
55
  "mutable": false,
57
56
  "complexType": {
58
57
  "original": "BrushStyleOption[]",
@@ -1 +1 @@
1
- {"version":3,"file":"kritzel-brush-style.js","sourceRoot":"","sources":["../../../../src/components/shared/kritzel-brush-style/kritzel-brush-style.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,EAAE,IAAI,EAAgB,KAAK,EAAE,MAAM,eAAe,CAAC;AAU9E,MAAM,OAAO,iBAAiB;IACpB,IAAI,GAA0B,KAAK,CAAC;IACpC,YAAY,GAAuB;QACzC,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE;QAC9B,EAAE,KAAK,EAAE,aAAa,EAAE,KAAK,EAAE,aAAa,EAAE;KAC/C,CAAC;IAEO,UAAU,CAAsC;IAEzD,yBAAyB,CAAC,KAA0B;QAClD,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,MAA+B,CAAC,CAAC;IAC9D,CAAC;IAED,MAAM;QACJ,MAAM,eAAe,GAAqB,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;YACzE,KAAK,EAAE,MAAM,CAAC,KAAK;YACnB,KAAK,EAAE,MAAM,CAAC,KAAK;SACpB,CAAC,CAAC,CAAC;QAEJ,OAAO,CACL,EAAC,IAAI;YACH,yEAAkB,OAAO,EAAE,eAAe,EAAE,KAAK,EAAE,IAAI,CAAC,IAAI,EAAE,cAAc,EAAE,KAAK,CAAC,EAAE,CAAC,IAAI,CAAC,yBAAyB,CAAC,KAAK,CAAC;gBAC1H,+DAAQ,KAAK,EAAC,oBAAoB,EAAC,IAAI,EAAC,QAAQ;oBAC9C,qEAAc,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,IAAI,EAAE,EAAE,GAAiB,CACjD,CACQ,CACd,CACR,CAAC;IACJ,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CACF","sourcesContent":["import { Component, Host, h, Prop, EventEmitter, Event } from '@stencil/core';\r\nimport { DropdownOption } from '../kritzel-dropdown/kritzel-dropdown'; // Import DropdownOption\r\n\r\nexport interface BrushStyleOption extends DropdownOption {}\r\n\r\n@Component({\r\n tag: 'kritzel-brush-style',\r\n styleUrl: 'kritzel-brush-style.css',\r\n shadow: true,\r\n})\r\nexport class KritzelBrushStyle {\r\n @Prop() type: 'pen' | 'highlighter' = 'pen';\r\n @Prop() brushOptions: BrushStyleOption[] = [\r\n { value: 'pen', label: 'Pen' },\r\n { value: 'highlighter', label: 'Highlighter' },\r\n ];\r\n\r\n @Event() typeChange: EventEmitter<'pen' | 'highlighter'>;\r\n\r\n handleDropdownValueChange(event: CustomEvent<string>) {\r\n this.typeChange.emit(event.detail as 'pen' | 'highlighter');\r\n }\r\n\r\n render() {\r\n const dropdownOptions: DropdownOption[] = this.brushOptions.map(option => ({\r\n value: option.value,\r\n label: option.label,\r\n }));\r\n\r\n return (\r\n <Host>\r\n <kritzel-dropdown options={dropdownOptions} value={this.type} onValueChanged={event => this.handleDropdownValueChange(event)}>\r\n <button class=\"brush-style-button\" slot=\"prefix\">\r\n <kritzel-icon name={this.type} size={16}></kritzel-icon>\r\n </button>\r\n </kritzel-dropdown>\r\n </Host>\r\n );\r\n }\r\n}\r\n"]}
1
+ {"version":3,"file":"kritzel-brush-style.js","sourceRoot":"","sources":["../../../../src/components/shared/kritzel-brush-style/kritzel-brush-style.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,EAAE,IAAI,EAAgB,KAAK,EAAE,MAAM,eAAe,CAAC;AAU9E,MAAM,OAAO,iBAAiB;IACpB,IAAI,GAA0B,KAAK,CAAC;IACpC,YAAY,GAAuB;QACzC,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE;QAC9B,EAAE,KAAK,EAAE,aAAa,EAAE,KAAK,EAAE,aAAa,EAAE;KAC/C,CAAC;IAEO,UAAU,CAAsC;IAEzD,yBAAyB,CAAC,KAA0B;QAClD,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,MAA+B,CAAC,CAAC;IAC9D,CAAC;IAED,MAAM;QACJ,MAAM,eAAe,GAAqB,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;YACzE,KAAK,EAAE,MAAM,CAAC,KAAK;YACnB,KAAK,EAAE,MAAM,CAAC,KAAK;SACpB,CAAC,CAAC,CAAC;QAEJ,OAAO,CACL,EAAC,IAAI;YACH,yEAAkB,OAAO,EAAE,eAAe,EAAE,KAAK,EAAE,IAAI,CAAC,IAAI,EAAE,cAAc,EAAE,KAAK,CAAC,EAAE,CAAC,IAAI,CAAC,yBAAyB,CAAC,KAAK,CAAC;gBAC1H,+DAAQ,KAAK,EAAC,oBAAoB,EAAC,IAAI,EAAC,QAAQ;oBAC9C,qEAAc,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,IAAI,EAAE,EAAE,GAAiB,CACjD,CACQ,CACd,CACR,CAAC;IACJ,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CACF","sourcesContent":["import { Component, Host, h, Prop, EventEmitter, Event } from '@stencil/core';\r\nimport { DropdownOption } from '../kritzel-dropdown/kritzel-dropdown'; // Import DropdownOption\r\n\r\nexport interface BrushStyleOption extends DropdownOption {}\r\n\r\n@Component({\r\n tag: 'kritzel-brush-style',\r\n styleUrl: 'kritzel-brush-style.css',\r\n shadow: true,\r\n})\r\nexport class KritzelBrushStyle {\r\n @Prop() type: 'pen' | 'highlighter' = 'pen';\r\n @Prop() brushOptions: BrushStyleOption[] = [\r\n { value: 'pen', label: 'Pen' },\r\n { value: 'highlighter', label: 'Highlighter' },\r\n ];\r\n\r\n @Event() typeChange: EventEmitter<'pen' | 'highlighter'>;\r\n\r\n handleDropdownValueChange(event: CustomEvent<string>) {\r\n this.typeChange.emit(event.detail as 'pen' | 'highlighter');\r\n }\r\n\r\n render() {\r\n const dropdownOptions: DropdownOption[] = this.brushOptions.map(option => ({\r\n value: option.value,\r\n label: option.label,\r\n }));\r\n\r\n return (\r\n <Host>\r\n <kritzel-dropdown options={dropdownOptions} value={this.type} onValueChanged={event => this.handleDropdownValueChange(event)}>\r\n <button class=\"brush-style-button\" slot=\"prefix\">\r\n <kritzel-icon name={this.type} size={16}></kritzel-icon>\r\n </button>\r\n </kritzel-dropdown>\r\n </Host>\r\n );\r\n }\r\n}\r\n"]}