kritzel-stencil 0.0.127 → 0.0.129

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 (293) hide show
  1. package/dist/cjs/{index-BacMQbNR.js → index-C7Read21.js} +165 -82
  2. package/dist/cjs/index-C7Read21.js.map +1 -0
  3. package/dist/cjs/{index-C05uAr89.js → index-CUSIflVf.js} +12 -6
  4. package/dist/cjs/index-CUSIflVf.js.map +1 -0
  5. package/dist/cjs/index.cjs.js +1 -3
  6. package/dist/cjs/{kritzel-brush-style_18.cjs.entry.js → kritzel-brush-style_22.cjs.entry.js} +997 -211
  7. package/dist/cjs/loader.cjs.js +2 -4
  8. package/dist/cjs/stencil.cjs.js +3 -5
  9. package/dist/cjs/stencil.cjs.js.map +1 -1
  10. package/dist/collection/classes/commands/add-object.command.js +5 -2
  11. package/dist/collection/classes/commands/add-object.command.js.map +1 -1
  12. package/dist/collection/classes/commands/add-selection-group.command.js +2 -2
  13. package/dist/collection/classes/commands/add-selection-group.command.js.map +1 -1
  14. package/dist/collection/classes/commands/base.command.js +2 -2
  15. package/dist/collection/classes/commands/base.command.js.map +1 -1
  16. package/dist/collection/classes/commands/batch.command.js +2 -2
  17. package/dist/collection/classes/commands/batch.command.js.map +1 -1
  18. package/dist/collection/classes/commands/move-selection-group.command.js +2 -2
  19. package/dist/collection/classes/commands/move-selection-group.command.js.map +1 -1
  20. package/dist/collection/classes/commands/remove-object.command.js +5 -2
  21. package/dist/collection/classes/commands/remove-object.command.js.map +1 -1
  22. package/dist/collection/classes/commands/remove-selection-group.command.js +2 -2
  23. package/dist/collection/classes/commands/remove-selection-group.command.js.map +1 -1
  24. package/dist/collection/classes/commands/resize-selection-group.command.js +2 -2
  25. package/dist/collection/classes/commands/resize-selection-group.command.js.map +1 -1
  26. package/dist/collection/classes/commands/rotate-selection-group.command.js +2 -2
  27. package/dist/collection/classes/commands/rotate-selection-group.command.js.map +1 -1
  28. package/dist/collection/classes/commands/update-object.command.js +5 -2
  29. package/dist/collection/classes/commands/update-object.command.js.map +1 -1
  30. package/dist/collection/classes/commands/update-viewport.command.js +2 -2
  31. package/dist/collection/classes/commands/update-viewport.command.js.map +1 -1
  32. package/dist/collection/classes/database.class.js +227 -0
  33. package/dist/collection/classes/database.class.js.map +1 -0
  34. package/dist/collection/classes/handlers/key.handler.js +0 -1
  35. package/dist/collection/classes/handlers/key.handler.js.map +1 -1
  36. package/dist/collection/classes/handlers/move.handler.js +18 -2
  37. package/dist/collection/classes/handlers/move.handler.js.map +1 -1
  38. package/dist/collection/classes/handlers/resize.handler.js +10 -2
  39. package/dist/collection/classes/handlers/resize.handler.js.map +1 -1
  40. package/dist/collection/classes/handlers/rotation.handler.js +18 -2
  41. package/dist/collection/classes/handlers/rotation.handler.js.map +1 -1
  42. package/dist/collection/classes/history.class.js +18 -5
  43. package/dist/collection/classes/history.class.js.map +1 -1
  44. package/dist/collection/classes/objects/base-object.class.js +1 -0
  45. package/dist/collection/classes/objects/base-object.class.js.map +1 -1
  46. package/dist/collection/classes/objects/custom-element.class.js +1 -0
  47. package/dist/collection/classes/objects/custom-element.class.js.map +1 -1
  48. package/dist/collection/classes/objects/image.class.js +1 -0
  49. package/dist/collection/classes/objects/image.class.js.map +1 -1
  50. package/dist/collection/classes/objects/path.class.js +1 -0
  51. package/dist/collection/classes/objects/path.class.js.map +1 -1
  52. package/dist/collection/classes/objects/selection-box.class.js +1 -0
  53. package/dist/collection/classes/objects/selection-box.class.js.map +1 -1
  54. package/dist/collection/classes/objects/selection-group.class.js +1 -0
  55. package/dist/collection/classes/objects/selection-group.class.js.map +1 -1
  56. package/dist/collection/classes/objects/text.class.js +7 -4
  57. package/dist/collection/classes/objects/text.class.js.map +1 -1
  58. package/dist/collection/classes/registries/icon-registry.class.js +5 -1
  59. package/dist/collection/classes/registries/icon-registry.class.js.map +1 -1
  60. package/dist/collection/classes/store.class.js +143 -20
  61. package/dist/collection/classes/store.class.js.map +1 -1
  62. package/dist/collection/classes/structures/octree.structure.js +4 -0
  63. package/dist/collection/classes/structures/octree.structure.js.map +1 -1
  64. package/dist/collection/classes/tools/image-tool.class.js +3 -0
  65. package/dist/collection/classes/tools/image-tool.class.js.map +1 -1
  66. package/dist/collection/classes/tools/text-tool.class.js +2 -2
  67. package/dist/collection/classes/tools/text-tool.class.js.map +1 -1
  68. package/dist/collection/classes/viewport.class.js +4 -0
  69. package/dist/collection/classes/viewport.class.js.map +1 -1
  70. package/dist/collection/classes/workspace.class.js +10 -0
  71. package/dist/collection/classes/workspace.class.js.map +1 -0
  72. package/dist/collection/collection-manifest.json +6 -2
  73. package/dist/collection/components/core/kritzel-cursor-trail/kritzel-cursor-trail.js +1 -1
  74. package/dist/collection/components/core/kritzel-editor/kritzel-editor.css +5 -0
  75. package/dist/collection/components/core/kritzel-editor/kritzel-editor.js +14 -16
  76. package/dist/collection/components/core/kritzel-editor/kritzel-editor.js.map +1 -1
  77. package/dist/collection/components/core/kritzel-engine/kritzel-engine.js +235 -39
  78. package/dist/collection/components/core/kritzel-engine/kritzel-engine.js.map +1 -1
  79. package/dist/collection/components/shared/kritzel-color/kritzel-color.js +2 -2
  80. package/dist/collection/components/shared/kritzel-color-palette/kritzel-color-palette.css +1 -1
  81. package/dist/collection/components/shared/kritzel-color-palette/kritzel-color-palette.js +1 -1
  82. package/dist/collection/components/shared/kritzel-font/kritzel-font.js +1 -1
  83. package/dist/collection/components/shared/kritzel-font-family/kritzel-font-family.js +1 -1
  84. package/dist/collection/components/shared/kritzel-font-size/kritzel-font-size.css +1 -1
  85. package/dist/collection/components/shared/kritzel-font-size/kritzel-font-size.js +1 -1
  86. package/dist/collection/components/shared/kritzel-menu/kritzel-menu.css +179 -0
  87. package/dist/collection/components/shared/kritzel-menu/kritzel-menu.js +288 -0
  88. package/dist/collection/components/shared/kritzel-menu/kritzel-menu.js.map +1 -0
  89. package/dist/collection/components/shared/kritzel-portal/kritzel-portal.js +218 -0
  90. package/dist/collection/components/shared/kritzel-portal/kritzel-portal.js.map +1 -0
  91. package/dist/collection/components/shared/kritzel-split-button/kritzel-split-button.css +78 -0
  92. package/dist/collection/components/shared/kritzel-split-button/kritzel-split-button.js +327 -0
  93. package/dist/collection/components/shared/kritzel-split-button/kritzel-split-button.js.map +1 -0
  94. package/dist/collection/components/shared/kritzel-stroke-size/kritzel-stroke-size.css +2 -2
  95. package/dist/collection/components/shared/kritzel-stroke-size/kritzel-stroke-size.js +1 -1
  96. package/dist/collection/components/shared/kritzel-tooltip/kritzel-tooltip.js +4 -4
  97. package/dist/collection/components/ui/kritzel-context-menu/kritzel-context-menu.css +1 -1
  98. package/dist/collection/components/ui/kritzel-context-menu/kritzel-context-menu.js +24 -61
  99. package/dist/collection/components/ui/kritzel-context-menu/kritzel-context-menu.js.map +1 -1
  100. package/dist/collection/components/ui/kritzel-control-brush-config/kritzel-control-brush-config.js +2 -2
  101. package/dist/collection/components/ui/kritzel-control-text-config/kritzel-control-text-config.js +2 -2
  102. package/dist/collection/components/ui/kritzel-controls/kritzel-controls.css +8 -11
  103. package/dist/collection/components/ui/kritzel-controls/kritzel-controls.js +29 -17
  104. package/dist/collection/components/ui/kritzel-controls/kritzel-controls.js.map +1 -1
  105. package/dist/collection/components/ui/kritzel-utility-panel/kritzel-utility-panel.js +1 -1
  106. package/dist/collection/components/ui/kritzel-workspace-manager/kritzel-workspace-manager.css +5 -0
  107. package/dist/collection/components/ui/kritzel-workspace-manager/kritzel-workspace-manager.js +212 -0
  108. package/dist/collection/components/ui/kritzel-workspace-manager/kritzel-workspace-manager.js.map +1 -0
  109. package/dist/collection/configs/default-engine-state.js +5 -2
  110. package/dist/collection/configs/default-engine-state.js.map +1 -1
  111. package/dist/collection/helpers/class.helper.js +1 -1
  112. package/dist/collection/helpers/class.helper.js.map +1 -1
  113. package/dist/collection/helpers/html.helper.js +30 -1
  114. package/dist/collection/helpers/html.helper.js.map +1 -1
  115. package/dist/collection/helpers/object.helper.js +1 -1
  116. package/dist/collection/helpers/object.helper.js.map +1 -1
  117. package/dist/collection/interfaces/command.interface.js.map +1 -1
  118. package/dist/collection/interfaces/debug-info.interface.js.map +1 -1
  119. package/dist/collection/interfaces/engine-state.interface.js.map +1 -1
  120. package/dist/collection/interfaces/menu-item.interface.js +2 -0
  121. package/dist/collection/interfaces/menu-item.interface.js.map +1 -0
  122. package/dist/collection/interfaces/object.interface.js.map +1 -1
  123. package/dist/components/index.d.ts +8 -0
  124. package/dist/components/index.js +7 -3
  125. package/dist/components/index.js.map +1 -1
  126. package/dist/components/kritzel-brush-style.js +1 -1
  127. package/dist/components/kritzel-color-palette.js +1 -1
  128. package/dist/components/kritzel-color.js +1 -1
  129. package/dist/components/kritzel-context-menu.js +1 -1
  130. package/dist/components/kritzel-control-brush-config.js +1 -1
  131. package/dist/components/kritzel-control-text-config.js +1 -1
  132. package/dist/components/kritzel-controls.js +1 -1
  133. package/dist/components/kritzel-cursor-trail.js +1 -1
  134. package/dist/components/kritzel-dropdown.js +1 -1
  135. package/dist/components/kritzel-editor.js +79 -49
  136. package/dist/components/kritzel-editor.js.map +1 -1
  137. package/dist/components/kritzel-engine.js +1 -1
  138. package/dist/components/kritzel-font-family.js +1 -1
  139. package/dist/components/kritzel-font-size.js +1 -1
  140. package/dist/components/kritzel-font.js +1 -1
  141. package/dist/components/kritzel-icon.js +1 -1
  142. package/dist/components/kritzel-menu.d.ts +11 -0
  143. package/dist/components/kritzel-menu.js +9 -0
  144. package/dist/components/kritzel-menu.js.map +1 -0
  145. package/dist/components/kritzel-portal.d.ts +11 -0
  146. package/dist/components/kritzel-portal.js +9 -0
  147. package/dist/components/kritzel-portal.js.map +1 -0
  148. package/dist/components/kritzel-split-button.d.ts +11 -0
  149. package/dist/components/kritzel-split-button.js +9 -0
  150. package/dist/components/kritzel-split-button.js.map +1 -0
  151. package/dist/components/kritzel-stroke-size.js +1 -1
  152. package/dist/components/kritzel-tooltip.js +1 -1
  153. package/dist/components/kritzel-utility-panel.js +1 -1
  154. package/dist/components/kritzel-workspace-manager.d.ts +11 -0
  155. package/dist/components/kritzel-workspace-manager.js +9 -0
  156. package/dist/components/kritzel-workspace-manager.js.map +1 -0
  157. package/dist/components/{p-DfJEh7HZ.js → p-5CJxFNEE.js} +9 -7
  158. package/dist/components/p-5CJxFNEE.js.map +1 -0
  159. package/dist/components/{p-ljdIU3DL.js → p-B7VrEdgP.js} +63 -63
  160. package/dist/components/p-B7VrEdgP.js.map +1 -0
  161. package/dist/components/{p-DJc6_PyL.js → p-BAPUTr3K.js} +10 -8
  162. package/dist/components/p-BAPUTr3K.js.map +1 -0
  163. package/dist/components/{p-CtiROna-.js → p-BLmFBe2a.js} +12 -6
  164. package/dist/components/p-BLmFBe2a.js.map +1 -0
  165. package/dist/components/p-BU2q3PRS.js +84 -0
  166. package/dist/components/p-BU2q3PRS.js.map +1 -0
  167. package/dist/components/{p-Dp8hrISj.js → p-BZ-j_4CK.js} +8 -6
  168. package/dist/components/p-BZ-j_4CK.js.map +1 -0
  169. package/dist/components/{p-BhC-Et5I.js → p-BaKb8ZLg.js} +16 -14
  170. package/dist/components/p-BaKb8ZLg.js.map +1 -0
  171. package/dist/components/p-Bb6od8He.js +42 -0
  172. package/dist/components/p-Bb6od8He.js.map +1 -0
  173. package/dist/components/{p-DcvujuV_.js → p-BcQTDgzV.js} +10 -8
  174. package/dist/components/p-BcQTDgzV.js.map +1 -0
  175. package/dist/components/p-BeVv4o5c.js +14 -0
  176. package/dist/components/p-BeVv4o5c.js.map +1 -0
  177. package/dist/components/p-BmJbJwkH.js +167 -0
  178. package/dist/components/p-BmJbJwkH.js.map +1 -0
  179. package/dist/components/{p-DJN0U8pI.js → p-BqrTPNyu.js} +10 -7
  180. package/dist/components/p-BqrTPNyu.js.map +1 -0
  181. package/dist/components/{p-NZJPrwJV.js → p-BvlGgLAQ.js} +7 -5
  182. package/dist/components/p-BvlGgLAQ.js.map +1 -0
  183. package/dist/components/{p-BOUCnklW.js → p-BzSz74Ci.js} +9 -7
  184. package/dist/components/p-BzSz74Ci.js.map +1 -0
  185. package/dist/components/p-C6OxvITm.js +168 -0
  186. package/dist/components/p-C6OxvITm.js.map +1 -0
  187. package/dist/components/p-CJKA5zIE.js +10 -0
  188. package/dist/components/p-CJKA5zIE.js.map +1 -0
  189. package/dist/components/{p-CudOuOAW.js → p-D-zg05gA.js} +558 -126
  190. package/dist/components/p-D-zg05gA.js.map +1 -0
  191. package/dist/components/p-D8W6LE-c.js.map +1 -1
  192. package/dist/components/p-Dozs0Zfn.js +115 -0
  193. package/dist/components/p-Dozs0Zfn.js.map +1 -0
  194. package/dist/components/{p-EQo4-DJT.js → p-DtmZW6eP.js} +8 -6
  195. package/dist/components/p-DtmZW6eP.js.map +1 -0
  196. package/dist/components/{p-C9usqwb5.js → p-V4ui5aWj.js} +9 -7
  197. package/dist/components/p-V4ui5aWj.js.map +1 -0
  198. package/dist/components/{p-BubFkS0u.js → p-_ntxNi8v.js} +9 -7
  199. package/dist/components/p-_ntxNi8v.js.map +1 -0
  200. package/dist/components/{p-BkFzf8vg.js → p-a7KmQzo4.js} +15 -13
  201. package/dist/components/p-a7KmQzo4.js.map +1 -0
  202. package/dist/components/p-aaxf-h5S.js +159 -0
  203. package/dist/components/p-aaxf-h5S.js.map +1 -0
  204. package/dist/components/{p-CmlcJ8Kw.js → p-jG1e48OE.js} +11 -9
  205. package/dist/components/p-jG1e48OE.js.map +1 -0
  206. package/dist/components/{p-D5a8vnRF.js → p-rQeWFfPG.js} +10 -8
  207. package/dist/components/p-rQeWFfPG.js.map +1 -0
  208. package/dist/components/{p-DSWoCkxm.js → p-yZFrTtMQ.js} +43 -40
  209. package/dist/components/p-yZFrTtMQ.js.map +1 -0
  210. package/dist/esm/{index-D37FADaF.js → index-J4NpPimy.js} +163 -83
  211. package/dist/esm/index-J4NpPimy.js.map +1 -0
  212. package/dist/esm/{index-BGl8znzE.js → index-NiIEUDzj.js} +12 -6
  213. package/dist/esm/index-NiIEUDzj.js.map +1 -0
  214. package/dist/esm/index.js +1 -3
  215. package/dist/esm/{kritzel-brush-style_18.entry.js → kritzel-brush-style_22.entry.js} +987 -205
  216. package/dist/esm/loader.js +3 -5
  217. package/dist/esm/stencil.js +4 -6
  218. package/dist/esm/stencil.js.map +1 -1
  219. package/dist/stencil/index.esm.js +1 -1
  220. package/dist/stencil/p-43202395.entry.js +2 -0
  221. package/dist/stencil/p-43202395.entry.js.map +1 -0
  222. package/dist/stencil/p-J4NpPimy.js +2 -0
  223. package/dist/stencil/p-J4NpPimy.js.map +1 -0
  224. package/dist/stencil/{p-BGl8znzE.js → p-NiIEUDzj.js} +3 -3
  225. package/dist/stencil/p-NiIEUDzj.js.map +1 -0
  226. package/dist/stencil/stencil.esm.js +1 -1
  227. package/dist/stencil/stencil.esm.js.map +1 -1
  228. package/dist/types/classes/commands/add-object.command.d.ts +1 -1
  229. package/dist/types/classes/commands/add-selection-group.command.d.ts +1 -1
  230. package/dist/types/classes/commands/base.command.d.ts +2 -2
  231. package/dist/types/classes/commands/batch.command.d.ts +1 -1
  232. package/dist/types/classes/commands/move-selection-group.command.d.ts +1 -1
  233. package/dist/types/classes/commands/remove-object.command.d.ts +1 -1
  234. package/dist/types/classes/commands/remove-selection-group.command.d.ts +1 -1
  235. package/dist/types/classes/commands/resize-selection-group.command.d.ts +1 -1
  236. package/dist/types/classes/commands/rotate-selection-group.command.d.ts +1 -1
  237. package/dist/types/classes/commands/update-object.command.d.ts +1 -1
  238. package/dist/types/classes/commands/update-viewport.command.d.ts +1 -1
  239. package/dist/types/classes/database.class.d.ts +28 -0
  240. package/dist/types/classes/history.class.d.ts +1 -0
  241. package/dist/types/classes/objects/base-object.class.d.ts +1 -0
  242. package/dist/types/classes/objects/text.class.d.ts +1 -1
  243. package/dist/types/classes/store.class.d.ts +19 -2
  244. package/dist/types/classes/structures/octree.structure.d.ts +1 -0
  245. package/dist/types/classes/workspace.class.d.ts +16 -0
  246. package/dist/types/components/core/kritzel-editor/kritzel-editor.d.ts +6 -1
  247. package/dist/types/components/core/kritzel-engine/kritzel-engine.d.ts +12 -2
  248. package/dist/types/components/shared/kritzel-menu/kritzel-menu.d.ts +26 -0
  249. package/dist/types/components/shared/kritzel-portal/kritzel-portal.d.ts +24 -0
  250. package/dist/types/components/shared/kritzel-split-button/kritzel-split-button.d.ts +25 -0
  251. package/dist/types/components/ui/kritzel-context-menu/kritzel-context-menu.d.ts +3 -4
  252. package/dist/types/components/ui/kritzel-controls/kritzel-controls.d.ts +2 -1
  253. package/dist/types/components/ui/kritzel-workspace-manager/kritzel-workspace-manager.d.ts +25 -0
  254. package/dist/types/components.d.ts +250 -2
  255. package/dist/types/helpers/html.helper.d.ts +3 -1
  256. package/dist/types/interfaces/command.interface.d.ts +1 -1
  257. package/dist/types/interfaces/debug-info.interface.d.ts +1 -0
  258. package/dist/types/interfaces/engine-state.interface.d.ts +3 -0
  259. package/dist/types/interfaces/menu-item.interface.d.ts +9 -0
  260. package/dist/types/interfaces/object.interface.d.ts +1 -0
  261. package/dist/types/stencil-public-runtime.d.ts +21 -0
  262. package/package.json +2 -1
  263. package/dist/cjs/index-BacMQbNR.js.map +0 -1
  264. package/dist/cjs/index-C05uAr89.js.map +0 -1
  265. package/dist/cjs/kritzel-brush-style_18.cjs.entry.js.map +0 -1
  266. package/dist/components/p-2gNwfcSP.js +0 -119
  267. package/dist/components/p-2gNwfcSP.js.map +0 -1
  268. package/dist/components/p-BOUCnklW.js.map +0 -1
  269. package/dist/components/p-BhC-Et5I.js.map +0 -1
  270. package/dist/components/p-BkFzf8vg.js.map +0 -1
  271. package/dist/components/p-BubFkS0u.js.map +0 -1
  272. package/dist/components/p-C9usqwb5.js.map +0 -1
  273. package/dist/components/p-CmlcJ8Kw.js.map +0 -1
  274. package/dist/components/p-CtiROna-.js.map +0 -1
  275. package/dist/components/p-CudOuOAW.js.map +0 -1
  276. package/dist/components/p-D5a8vnRF.js.map +0 -1
  277. package/dist/components/p-DJN0U8pI.js.map +0 -1
  278. package/dist/components/p-DJc6_PyL.js.map +0 -1
  279. package/dist/components/p-DSWoCkxm.js.map +0 -1
  280. package/dist/components/p-DcvujuV_.js.map +0 -1
  281. package/dist/components/p-DfJEh7HZ.js.map +0 -1
  282. package/dist/components/p-Dp8hrISj.js.map +0 -1
  283. package/dist/components/p-EQo4-DJT.js.map +0 -1
  284. package/dist/components/p-NZJPrwJV.js.map +0 -1
  285. package/dist/components/p-ljdIU3DL.js.map +0 -1
  286. package/dist/esm/index-BGl8znzE.js.map +0 -1
  287. package/dist/esm/index-D37FADaF.js.map +0 -1
  288. package/dist/esm/kritzel-brush-style_18.entry.js.map +0 -1
  289. package/dist/stencil/p-BGl8znzE.js.map +0 -1
  290. package/dist/stencil/p-D37FADaF.js +0 -2
  291. package/dist/stencil/p-D37FADaF.js.map +0 -1
  292. package/dist/stencil/p-e6ac7fc6.entry.js +0 -2
  293. package/dist/stencil/p-e6ac7fc6.entry.js.map +0 -1
@@ -4,6 +4,11 @@
4
4
  user-select: none;
5
5
  }
6
6
 
7
+ :host(.mobile) {
8
+ --kritzel-controls-control-hover-background-color: transparent;
9
+ --kritzel-controls-control-active-background-color: transparent;
10
+ }
11
+
7
12
  .kritzel-controls {
8
13
  display: flex;
9
14
  flex-direction: row;
@@ -15,7 +20,7 @@
15
20
  background-color: var(--kritzel-controls-background-color, #ffffff);
16
21
  border-radius: var(--kritzel-controls-border-radius, 16px);
17
22
  box-shadow: var(--kritzel-controls-box-shadow, 0 0 3px rgba(0, 0, 0, 0.08));
18
- border: var(--kritzel-controls-border, 1px solid #f0f0f0);
23
+ border: var(--kritzel-controls-border, 1px solid #ebebeb);
19
24
  z-index: 10000;
20
25
  position: relative;
21
26
  }
@@ -39,18 +44,10 @@
39
44
  background-color: var(--kritzel-controls-control-hover-background-color, hsl(0, 0%, 0%, 4.3%));
40
45
  }
41
46
 
42
- :host(.mobile) .kritzel-control:hover {
43
- background-color: unset;
44
- }
45
-
46
47
  .kritzel-control:active {
47
48
  background-color: var(--kritzel-controls-control-active-background-color, hsl(0, 0%, 0%, 8.6%));
48
49
  }
49
50
 
50
- :host(.mobile) .kritzel-control:active {
51
- background-color: unset;
52
- }
53
-
54
51
  .kritzel-control.selected,
55
52
  .kritzel-control.selected:hover,
56
53
  .kritzel-control.selected:active {
@@ -92,7 +89,7 @@
92
89
  cursor: pointer;
93
90
  border: 2px solid transparent;
94
91
  box-sizing: border-box;
95
- background-color: var(--kritzel-color-palette-hover-background-color, #f0f0f0);
92
+ background-color: var(--kritzel-color-palette-hover-background-color, #ebebeb);
96
93
  }
97
94
 
98
95
  .font-container {
@@ -105,7 +102,7 @@
105
102
  cursor: pointer;
106
103
  border: 2px solid transparent;
107
104
  box-sizing: border-box;
108
- background-color: var(--kritzel-color-palette-hover-background-color, #f0f0f0);
105
+ background-color: var(--kritzel-color-palette-hover-background-color, #ebebeb);
109
106
  }
110
107
 
111
108
  .no-config {
@@ -12,23 +12,28 @@ export class KritzelControls {
12
12
  this.isTouchDevice = KritzelDevicesHelper.isTouchDevice();
13
13
  this.kritzelEngine = null;
14
14
  }
15
- async handleActiveToolChange(event) {
16
- var _a;
17
- this.activeControl = this.controls.find(control => control.tool === event.detail) || null;
18
- await ((_a = this.kritzelEngine) === null || _a === void 0 ? void 0 : _a.setFocus());
19
- }
20
- handleClick(event) {
15
+ handleDocumentClick(event) {
21
16
  const element = event.target;
22
17
  if (!this.kritzelEngine || element.closest('.kritzel-tooltip')) {
23
18
  return;
24
19
  }
25
20
  this.isTooltipVisible = false;
26
- this.kritzelEngine.enable();
27
21
  }
28
- async closeTooltip() {
22
+ handleKeyDown(event) {
29
23
  var _a;
24
+ if (event.key === 'Escape') {
25
+ event.preventDefault();
26
+ this.closeTooltip();
27
+ (_a = this.kritzelEngine) === null || _a === void 0 ? void 0 : _a.enable();
28
+ }
29
+ }
30
+ async handleActiveToolChange(event) {
31
+ var _a;
32
+ this.activeControl = this.controls.find(control => control.tool === event.detail) || null;
33
+ await ((_a = this.kritzelEngine) === null || _a === void 0 ? void 0 : _a.setFocus());
34
+ }
35
+ async closeTooltip() {
30
36
  this.isTooltipVisible = false;
31
- (_a = this.kritzelEngine) === null || _a === void 0 ? void 0 : _a.enable();
32
37
  }
33
38
  get activeToolAsTextTool() {
34
39
  var _a;
@@ -76,9 +81,10 @@ export class KritzelControls {
76
81
  }
77
82
  }
78
83
  handleConfigClick(event) {
84
+ var _a;
79
85
  event.stopPropagation();
80
86
  this.isTooltipVisible = !this.isTooltipVisible;
81
- this.kritzelEngine.disable();
87
+ (_a = this.kritzelEngine) === null || _a === void 0 ? void 0 : _a.disable();
82
88
  }
83
89
  async handleToolChange(event) {
84
90
  this.activeControl = Object.assign(Object.assign({}, this.activeControl), { tool: event.detail });
@@ -87,13 +93,13 @@ export class KritzelControls {
87
93
  render() {
88
94
  var _a, _b;
89
95
  const hasNoConfig = ((_a = this.activeControl) === null || _a === void 0 ? void 0 : _a.config) === undefined || ((_b = this.activeControl) === null || _b === void 0 ? void 0 : _b.config) === null;
90
- return (h(Host, { key: 'dfb17219cf1d27d86148bc918b8303d74244700c', class: {
96
+ return (h(Host, { key: 'af04746b6eaa04a51482cd9d25ba3ab303d631f1', class: {
91
97
  mobile: this.isTouchDevice,
92
- } }, this.isUtilityPanelVisible && (h("kritzel-utility-panel", { key: 'a5eb7c6b59a193ba0bdde53812882c355a7658d4', style: {
98
+ } }, this.isUtilityPanelVisible && (h("kritzel-utility-panel", { key: 'd6ecb1087a332162f3fc809ed4321fc48f72c3e7', style: {
93
99
  position: 'absolute',
94
100
  bottom: '56px',
95
101
  left: '12px',
96
- }, onUndo: () => { var _a; return (_a = this.kritzelEngine) === null || _a === void 0 ? void 0 : _a.undo(); }, onRedo: () => { var _a; return (_a = this.kritzelEngine) === null || _a === void 0 ? void 0 : _a.redo(); }, onDelete: () => { var _a; return (_a = this.kritzelEngine) === null || _a === void 0 ? void 0 : _a.delete(); } })), h("div", { key: 'b51e49664bf6330f22fb07ef64116459ec3832b3', class: "kritzel-controls" }, this.controls.map(control => {
102
+ }, onUndo: () => { var _a; return (_a = this.kritzelEngine) === null || _a === void 0 ? void 0 : _a.undo(); }, onRedo: () => { var _a; return (_a = this.kritzelEngine) === null || _a === void 0 ? void 0 : _a.redo(); }, onDelete: () => { var _a; return (_a = this.kritzelEngine) === null || _a === void 0 ? void 0 : _a.delete(); } })), h("div", { key: '34723e47249d53fd544848d2d577deba4df1f131', class: "kritzel-controls" }, this.controls.map(control => {
97
103
  var _a, _b, _c, _d, _e, _f, _g, _h;
98
104
  if (control.type === 'tool') {
99
105
  return (h("button", { class: {
@@ -251,14 +257,20 @@ export class KritzelControls {
251
257
  static get elementRef() { return "host"; }
252
258
  static get listeners() {
253
259
  return [{
254
- "name": "activeToolChange",
255
- "method": "handleActiveToolChange",
260
+ "name": "click",
261
+ "method": "handleDocumentClick",
256
262
  "target": "document",
257
263
  "capture": false,
258
264
  "passive": false
259
265
  }, {
260
- "name": "click",
261
- "method": "handleClick",
266
+ "name": "keydown",
267
+ "method": "handleKeyDown",
268
+ "target": "window",
269
+ "capture": false,
270
+ "passive": false
271
+ }, {
272
+ "name": "activeToolChange",
273
+ "method": "handleActiveToolChange",
262
274
  "target": "document",
263
275
  "capture": false,
264
276
  "passive": false
@@ -1 +1 @@
1
- {"version":3,"file":"kritzel-controls.js","sourceRoot":"","sources":["../../../../src/components/ui/kritzel-controls/kritzel-controls.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAgB,MAAM,EAAE,MAAM,eAAe,CAAC;AAC9G,OAAO,EAAE,gBAAgB,EAAE,MAAM,yCAAyC,CAAC;AAC3E,OAAO,EAAE,eAAe,EAAE,MAAM,wCAAwC,CAAC;AAGzE,OAAO,EAAE,oBAAoB,EAAE,MAAM,iCAAiC,CAAC;AAUvE,MAAM,OAAO,eAAe;IAN5B;QAQE,aAAQ,GAA4B,EAAE,CAAC;QAGvC,kBAAa,GAAiC,IAAI,CAAC;QAGnD,0BAAqB,GAAY,IAAI,CAAC;QAMtC,gBAAW,GAAsB,IAAI,CAAC;QAGtC,qBAAgB,GAAY,KAAK,CAAC;QAGlC,kBAAa,GAAY,oBAAoB,CAAC,aAAa,EAAE,CAAC;QA6B9D,kBAAa,GAAoC,IAAI,CAAC;KAoKvD;IA3LC,KAAK,CAAC,sBAAsB,CAAC,KAAkB;;QAC7C,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,OAAO,CAAC,IAAI,KAAK,KAAK,CAAC,MAAM,CAAC,IAAI,IAAI,CAAC;QAC1F,MAAM,CAAA,MAAA,IAAI,CAAC,aAAa,0CAAE,QAAQ,EAAE,CAAA,CAAC;IACvC,CAAC;IAGD,WAAW,CAAC,KAAiB;QAC3B,MAAM,OAAO,GAAG,KAAK,CAAC,MAAqB,CAAC;QAE5C,IAAI,CAAC,IAAI,CAAC,aAAa,IAAI,OAAO,CAAC,OAAO,CAAC,kBAAkB,CAAC,EAAE,CAAC;YAC/D,OAAO;QACT,CAAC;QAED,IAAI,CAAC,gBAAgB,GAAG,KAAK,CAAC;QAC9B,IAAI,CAAC,aAAa,CAAC,MAAM,EAAE,CAAC;IAC9B,CAAC;IAGD,KAAK,CAAC,YAAY;;QAChB,IAAI,CAAC,gBAAgB,GAAG,KAAK,CAAC;QAC9B,MAAA,IAAI,CAAC,aAAa,0CAAE,MAAM,EAAE,CAAC;IAC/B,CAAC;IAID,IAAI,oBAAoB;;QACtB,OAAO,MAAA,IAAI,CAAC,aAAa,0CAAE,IAAuB,CAAC;IACrD,CAAC;IAED,IAAI,qBAAqB;;QACvB,OAAO,MAAA,IAAI,CAAC,aAAa,0CAAE,IAAwB,CAAC;IACtD,CAAC;IAED,KAAK,CAAC,iBAAiB;QACrB,MAAM,IAAI,CAAC,gBAAgB,EAAE,CAAC;QAC9B,MAAM,IAAI,CAAC,eAAe,EAAE,CAAC;QAC7B,IAAI,CAAC,eAAe,CAAC,IAAI,EAAE,CAAC;IAC9B,CAAC;IAEO,KAAK,CAAC,gBAAgB;QAC5B,MAAM,cAAc,CAAC,WAAW,CAAC,gBAAgB,CAAC,CAAC;QACnD,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,aAAa,CAAC,gBAAgB,CAAC,CAAC;QAE7E,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,CAAC;YACxB,MAAM,IAAI,KAAK,CAAC,6CAA6C,CAAC,CAAC;QACjE,CAAC;IACH,CAAC;IAEO,KAAK,CAAC,eAAe;QAC3B,KAAK,MAAM,CAAC,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;YAC9B,IAAI,CAAC,CAAC,IAAI,KAAK,MAAM,IAAI,CAAC,CAAC,IAAI,EAAE,CAAC;gBAChC,CAAC,CAAC,IAAI,GAAG,MAAM,IAAI,CAAC,aAAa,CAAC,YAAY,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC;YAC3E,CAAC;YAED,IAAI,CAAC,CAAC,IAAI,KAAK,MAAM,IAAI,CAAC,CAAC,SAAS,IAAI,CAAC,CAAC,IAAI,EAAE,CAAC;gBAC/C,MAAM,IAAI,CAAC,aAAa,CAAC,gBAAgB,CAAC,CAAC,CAAC,IAAuB,CAAC,CAAC;gBACrE,IAAI,CAAC,aAAa,GAAG,CAAC,CAAC;YACzB,CAAC;YAED,IAAI,CAAC,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;gBACxB,IAAI,IAAI,CAAC,WAAW,KAAK,IAAI,EAAE,CAAC;oBAC9B,IAAI,CAAC,WAAW,GAAG,CAAC,CAAC;gBACvB,CAAC;qBAAM,CAAC;oBACN,OAAO,CAAC,IAAI,CAAC,iEAAiE,CAAC,CAAC;gBAClF,CAAC;YACH,CAAC;QACH,CAAC;IACH,CAAC;IAEO,KAAK,CAAC,kBAAkB,CAAC,OAA8B;QAC7D,IAAI,CAAC,aAAa,GAAG,OAAO,CAAC;QAE7B,IAAI,IAAI,CAAC,aAAa,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;YACvC,MAAM,IAAI,CAAC,aAAa,CAAC,gBAAgB,CAAC,IAAI,CAAC,aAAa,CAAC,IAAuB,CAAC,CAAC;QACxF,CAAC;IACH,CAAC;IAEO,iBAAiB,CAAC,KAAiB;QACzC,KAAK,CAAC,eAAe,EAAE,CAAC;QACxB,IAAI,CAAC,gBAAgB,GAAG,CAAC,IAAI,CAAC,gBAAgB,CAAC;QAC/C,IAAI,CAAC,aAAa,CAAC,OAAO,EAAE,CAAC;IAC/B,CAAC;IAEO,KAAK,CAAC,gBAAgB,CAAC,KAAkB;QAC/C,IAAI,CAAC,aAAa,mCAAQ,IAAI,CAAC,aAAa,KAAE,IAAI,EAAE,KAAK,CAAC,MAAM,GAAE,CAAC;QACnE,MAAM,IAAI,CAAC,aAAa,CAAC,gBAAgB,CAAE,IAAI,CAAC,aAAqB,CAAC,IAAI,CAAC,CAAC;IAC9E,CAAC;IAED,MAAM;;QACJ,MAAM,WAAW,GAAG,CAAA,MAAA,IAAI,CAAC,aAAa,0CAAE,MAAM,MAAK,SAAS,IAAI,CAAA,MAAA,IAAI,CAAC,aAAa,0CAAE,MAAM,MAAK,IAAI,CAAC;QAEpG,OAAO,CACL,EAAC,IAAI,qDACH,KAAK,EAAE;gBACL,MAAM,EAAE,IAAI,CAAC,aAAa;aAC3B;YAEA,IAAI,CAAC,qBAAqB,IAAI,CAC7B,8EACE,KAAK,EAAE;oBACL,QAAQ,EAAE,UAAU;oBACpB,MAAM,EAAE,MAAM;oBACd,IAAI,EAAE,MAAM;iBACb,EACD,MAAM,EAAE,GAAG,EAAE,WAAC,OAAA,MAAA,IAAI,CAAC,aAAa,0CAAE,IAAI,EAAE,CAAA,EAAA,EACxC,MAAM,EAAE,GAAG,EAAE,WAAC,OAAA,MAAA,IAAI,CAAC,aAAa,0CAAE,IAAI,EAAE,CAAA,EAAA,EACxC,QAAQ,EAAE,GAAG,EAAE,WAAC,OAAA,MAAA,IAAI,CAAC,aAAa,0CAAE,MAAM,EAAE,CAAA,EAAA,GACrB,CAC1B;YAED,4DAAK,KAAK,EAAC,kBAAkB,IAC1B,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE;;gBAC3B,IAAI,OAAO,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;oBAC5B,OAAO,CACL,cACE,KAAK,EAAE;4BACL,iBAAiB,EAAE,IAAI;4BACvB,UAAU,EAAE,CAAA,MAAA,IAAI,CAAC,aAAa,0CAAE,IAAI,OAAK,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,IAAI,CAAA;yBACvD,EACD,GAAG,EAAE,OAAO,CAAC,IAAI,EACjB,OAAO,EAAE,MAAM,CAAC,EAAE,WAAC,OAAA,MAAA,IAAI,CAAC,kBAAkB,qDAAG,OAAO,CAAC,CAAA,EAAA;wBAErD,oBAAc,IAAI,EAAE,OAAO,CAAC,IAAI,GAAiB,CAC1C,CACV,CAAC;gBACJ,CAAC;gBAED,IAAI,OAAO,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;oBAC/B,OAAO,WAAK,KAAK,EAAC,iBAAiB,EAAC,GAAG,EAAE,OAAO,CAAC,IAAI,GAAQ,CAAC;gBAChE,CAAC;gBAED,IAAI,OAAO,CAAC,IAAI,KAAK,QAAQ,IAAI,OAAO,CAAC,IAAI,MAAK,MAAA,IAAI,CAAC,WAAW,0CAAE,IAAI,CAAA,IAAI,IAAI,CAAC,aAAa,EAAE,CAAC;oBAC/F,OAAO,CACL,WAAK,KAAK,EAAC,0BAA0B,EAAC,GAAG,EAAE,OAAO,CAAC,IAAI;wBACrD,uBAAiB,SAAS,EAAE,IAAI,CAAC,gBAAgB,EAAE,aAAa,EAAE,MAAA,IAAI,CAAC,IAAI,CAAC,UAAU,0CAAE,aAAa,CAAC,2BAA2B,CAAgB;4BAC/I,WAAK,KAAK,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE;gCAC3C,IAAI,CAAC,aAAa,CAAC,IAAI,KAAK,OAAO,IAAI,CACtC,oCAA8B,IAAI,EAAE,IAAI,CAAC,qBAAqB,EAAE,YAAY,EAAE,KAAK,CAAC,EAAE,WAAC,OAAA,MAAA,IAAI,CAAC,gBAAgB,qDAAG,KAAK,CAAC,CAAA,EAAA,GAAiC,CACvJ;gCAEA,IAAI,CAAC,aAAa,CAAC,IAAI,KAAK,MAAM,IAAI,CACrC,mCAA6B,IAAI,EAAE,IAAI,CAAC,oBAAoB,EAAE,YAAY,EAAE,KAAK,CAAC,EAAE,WAAC,OAAA,MAAA,IAAI,CAAC,gBAAgB,qDAAG,KAAK,CAAC,CAAA,EAAA,GAAgC,CACpJ,CACG,CACU;wBAElB,WACE,KAAK,EAAC,gBAAgB,EACtB,OAAO,EAAE,KAAK,CAAC,EAAE,WAAC,OAAA,MAAA,IAAI,CAAC,iBAAiB,qDAAG,KAAK,CAAC,CAAA,EAAA,EACjD,KAAK,EAAE;gCACL,MAAM,EAAE,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS;gCACzD,aAAa,EAAE,WAAW,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM;6BAC7C;4BAEA,IAAI,CAAC,aAAa,CAAC,IAAI,YAAY,gBAAgB,IAAI,CACtD,WAAK,KAAK,EAAC,iBAAiB;gCAC1B,qBACE,KAAK,EAAE,MAAA,IAAI,CAAC,qBAAqB,0CAAE,KAAK,EACxC,IAAI,EAAE,MAAA,IAAI,CAAC,qBAAqB,0CAAE,IAAI,EACtC,KAAK,EAAE;wCACL,YAAY,EAAE,KAAK;wCACnB,MAAM,EAAE,MAAM;qCACf,GACc,CACb,CACP;4BAEA,IAAI,CAAC,aAAa,CAAC,IAAI,YAAY,eAAe,IAAI,CACrD,WAAK,KAAK,EAAC,gBAAgB;gCACzB,oBACE,UAAU,EAAE,MAAA,IAAI,CAAC,oBAAoB,0CAAE,UAAU,EACjD,IAAI,EAAE,MAAA,IAAI,CAAC,oBAAoB,0CAAE,QAAQ,EACzC,KAAK,EAAE,MAAA,IAAI,CAAC,oBAAoB,0CAAE,SAAS,GAC7B,CACZ,CACP;4BAEA,WAAW,IAAI,WAAK,KAAK,EAAC,WAAW,GAAO,CACzC,CACF,CACP,CAAC;gBACJ,CAAC;YACH,CAAC,CAAC,CACE,CACD,CACR,CAAC;IACJ,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CACF","sourcesContent":["import { Component, h, Prop, State, Element, Host, Listen, Event, EventEmitter, Method } from '@stencil/core';\r\nimport { KritzelBrushTool } from '../../../classes/tools/brush-tool.class';\r\nimport { KritzelTextTool } from '../../../classes/tools/text-tool.class';\r\nimport { KritzelToolbarControl } from '../../../interfaces/toolbar-control.interface';\r\nimport { KritzelBaseTool } from '../../../classes/tools/base-tool.class';\r\nimport { KritzelDevicesHelper } from '../../../helpers/devices.helper';\r\n\r\ntype ToolConfig = Record<string, any>;\r\n\r\n@Component({\r\n tag: 'kritzel-controls',\r\n styleUrl: 'kritzel-controls.css',\r\n shadow: true,\r\n assetsDirs: ['../assets'],\r\n})\r\nexport class KritzelControls {\r\n @Prop()\r\n controls: KritzelToolbarControl[] = [];\r\n\r\n @Prop({ mutable: true })\r\n activeControl: KritzelToolbarControl | null = null;\r\n\r\n @Prop()\r\n isUtilityPanelVisible: boolean = true;\r\n\r\n @Event()\r\n isControlsReady: EventEmitter<void>;\r\n\r\n @State()\r\n firstConfig: ToolConfig | null = null;\r\n\r\n @State()\r\n isTooltipVisible: boolean = false;\r\n\r\n @State()\r\n isTouchDevice: boolean = KritzelDevicesHelper.isTouchDevice();\r\n\r\n @Element()\r\n host!: HTMLElement;\r\n\r\n @Listen('activeToolChange', { target: 'document' })\r\n async handleActiveToolChange(event: CustomEvent) {\r\n this.activeControl = this.controls.find(control => control.tool === event.detail) || null;\r\n await this.kritzelEngine?.setFocus();\r\n }\r\n\r\n @Listen('click', { target: 'document' })\r\n handleClick(event: MouseEvent) {\r\n const element = event.target as HTMLElement;\r\n\r\n if (!this.kritzelEngine || element.closest('.kritzel-tooltip')) {\r\n return;\r\n }\r\n\r\n this.isTooltipVisible = false;\r\n this.kritzelEngine.enable();\r\n }\r\n\r\n @Method()\r\n async closeTooltip() {\r\n this.isTooltipVisible = false;\r\n this.kritzelEngine?.enable();\r\n }\r\n\r\n kritzelEngine: HTMLKritzelEngineElement | null = null;\r\n\r\n get activeToolAsTextTool() {\r\n return this.activeControl?.tool as KritzelTextTool;\r\n }\r\n\r\n get activeToolAsBrushTool() {\r\n return this.activeControl?.tool as KritzelBrushTool;\r\n }\r\n\r\n async componentWillLoad() {\r\n await this.initializeEngine();\r\n await this.initializeTools();\r\n this.isControlsReady.emit();\r\n }\r\n\r\n private async initializeEngine() {\r\n await customElements.whenDefined('kritzel-engine');\r\n this.kritzelEngine = this.host.parentElement.querySelector('kritzel-engine');\r\n\r\n if (!this.kritzelEngine) {\r\n throw new Error('kritzel-engine not found in parent element.');\r\n }\r\n }\r\n\r\n private async initializeTools() {\r\n for (const c of this.controls) {\r\n if (c.type === 'tool' && c.tool) {\r\n c.tool = await this.kritzelEngine.registerTool(c.name, c.tool, c.config);\r\n }\r\n\r\n if (c.type === 'tool' && c.isDefault && c.tool) {\r\n await this.kritzelEngine.changeActiveTool(c.tool as KritzelBaseTool);\r\n this.activeControl = c;\r\n }\r\n\r\n if (c.type === 'config') {\r\n if (this.firstConfig === null) {\r\n this.firstConfig = c;\r\n } else {\r\n console.warn('Only one config control is allowed. The first one will be used.');\r\n }\r\n }\r\n }\r\n }\r\n\r\n private async handleControlClick(control: KritzelToolbarControl) {\r\n this.activeControl = control;\r\n\r\n if (this.activeControl.type === 'tool') {\r\n await this.kritzelEngine.changeActiveTool(this.activeControl.tool as KritzelBaseTool);\r\n }\r\n }\r\n\r\n private handleConfigClick(event: MouseEvent) {\r\n event.stopPropagation();\r\n this.isTooltipVisible = !this.isTooltipVisible;\r\n this.kritzelEngine.disable();\r\n }\r\n\r\n private async handleToolChange(event: CustomEvent) {\r\n this.activeControl = { ...this.activeControl, tool: event.detail };\r\n await this.kritzelEngine.changeActiveTool((this.activeControl as any).tool);\r\n }\r\n\r\n render() {\r\n const hasNoConfig = this.activeControl?.config === undefined || this.activeControl?.config === null;\r\n\r\n return (\r\n <Host\r\n class={{\r\n mobile: this.isTouchDevice,\r\n }}\r\n >\r\n {this.isUtilityPanelVisible && (\r\n <kritzel-utility-panel\r\n style={{\r\n position: 'absolute',\r\n bottom: '56px',\r\n left: '12px',\r\n }}\r\n onUndo={() => this.kritzelEngine?.undo()}\r\n onRedo={() => this.kritzelEngine?.redo()}\r\n onDelete={() => this.kritzelEngine?.delete()}\r\n ></kritzel-utility-panel>\r\n )}\r\n\r\n <div class=\"kritzel-controls\">\r\n {this.controls.map(control => {\r\n if (control.type === 'tool') {\r\n return (\r\n <button\r\n class={{\r\n 'kritzel-control': true,\r\n 'selected': this.activeControl?.name === control?.name,\r\n }}\r\n key={control.name}\r\n onClick={_event => this.handleControlClick?.(control)}\r\n >\r\n <kritzel-icon name={control.icon}></kritzel-icon>\r\n </button>\r\n );\r\n }\r\n\r\n if (control.type === 'divider') {\r\n return <div class=\"kritzel-divider\" key={control.name}></div>;\r\n }\r\n\r\n if (control.type === 'config' && control.name === this.firstConfig?.name && this.activeControl) {\r\n return (\r\n <div class=\"kritzel-config-container\" key={control.name}>\r\n <kritzel-tooltip isVisible={this.isTooltipVisible} anchorElement={this.host.shadowRoot?.querySelector('.kritzel-config-container') as HTMLElement}>\r\n <div style={{ width: '294px', height: '100%' }}>\r\n {this.activeControl.name === 'brush' && (\r\n <kritzel-control-brush-config tool={this.activeToolAsBrushTool} onToolChange={event => this.handleToolChange?.(event)}></kritzel-control-brush-config>\r\n )}\r\n\r\n {this.activeControl.name === 'text' && (\r\n <kritzel-control-text-config tool={this.activeToolAsTextTool} onToolChange={event => this.handleToolChange?.(event)}></kritzel-control-text-config>\r\n )}\r\n </div>\r\n </kritzel-tooltip>\r\n\r\n <div\r\n class=\"kritzel-config\"\r\n onClick={event => this.handleConfigClick?.(event)}\r\n style={{\r\n cursor: this.activeControl.config ? 'pointer' : 'default',\r\n pointerEvents: hasNoConfig ? 'none' : 'auto',\r\n }}\r\n >\r\n {this.activeControl.tool instanceof KritzelBrushTool && (\r\n <div class=\"color-container\">\r\n <kritzel-color\r\n value={this.activeToolAsBrushTool?.color}\r\n size={this.activeToolAsBrushTool?.size}\r\n style={{\r\n borderRadius: '50%',\r\n border: 'none',\r\n }}\r\n ></kritzel-color>\r\n </div>\r\n )}\r\n\r\n {this.activeControl.tool instanceof KritzelTextTool && (\r\n <div class=\"font-container\">\r\n <kritzel-font\r\n fontFamily={this.activeToolAsTextTool?.fontFamily}\r\n size={this.activeToolAsTextTool?.fontSize}\r\n color={this.activeToolAsTextTool?.fontColor}\r\n ></kritzel-font>\r\n </div>\r\n )}\r\n\r\n {hasNoConfig && <div class=\"no-config\"></div>}\r\n </div>\r\n </div>\r\n );\r\n }\r\n })}\r\n </div>\r\n </Host>\r\n );\r\n }\r\n}\r\n"]}
1
+ {"version":3,"file":"kritzel-controls.js","sourceRoot":"","sources":["../../../../src/components/ui/kritzel-controls/kritzel-controls.tsx"],"names":[],"mappings":"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","sourcesContent":["import { Component, h, Prop, State, Element, Host, Listen, Event, EventEmitter, Method } from '@stencil/core';\r\nimport { KritzelBrushTool } from '../../../classes/tools/brush-tool.class';\r\nimport { KritzelTextTool } from '../../../classes/tools/text-tool.class';\r\nimport { KritzelToolbarControl } from '../../../interfaces/toolbar-control.interface';\r\nimport { KritzelBaseTool } from '../../../classes/tools/base-tool.class';\r\nimport { KritzelDevicesHelper } from '../../../helpers/devices.helper';\r\n\r\ntype ToolConfig = Record<string, any>;\r\n\r\n@Component({\r\n tag: 'kritzel-controls',\r\n styleUrl: 'kritzel-controls.css',\r\n shadow: true,\r\n assetsDirs: ['../assets'],\r\n})\r\nexport class KritzelControls {\r\n @Prop()\r\n controls: KritzelToolbarControl[] = [];\r\n\r\n @Prop({ mutable: true })\r\n activeControl: KritzelToolbarControl | null = null;\r\n\r\n @Prop()\r\n isUtilityPanelVisible: boolean = true;\r\n\r\n @Event()\r\n isControlsReady: EventEmitter<void>;\r\n\r\n @State()\r\n firstConfig: ToolConfig | null = null;\r\n\r\n @State()\r\n isTooltipVisible: boolean = false;\r\n\r\n @State()\r\n isTouchDevice: boolean = KritzelDevicesHelper.isTouchDevice();\r\n\r\n @Element()\r\n host!: HTMLElement;\r\n\r\n @Listen('click', { target: 'document' })\r\n handleDocumentClick(event: MouseEvent) {\r\n const element = event.target as HTMLElement;\r\n\r\n if (!this.kritzelEngine || element.closest('.kritzel-tooltip')) {\r\n return;\r\n }\r\n\r\n this.isTooltipVisible = false;\r\n }\r\n\r\n @Listen('keydown', { target: 'window' })\r\n handleKeyDown(event) {\r\n if (event.key === 'Escape') {\r\n event.preventDefault();\r\n this.closeTooltip();\r\n this.kritzelEngine?.enable();\r\n }\r\n }\r\n\r\n @Listen('activeToolChange', { target: 'document' })\r\n async handleActiveToolChange(event: CustomEvent) {\r\n this.activeControl = this.controls.find(control => control.tool === event.detail) || null;\r\n await this.kritzelEngine?.setFocus();\r\n }\r\n\r\n @Method()\r\n async closeTooltip() {\r\n this.isTooltipVisible = false;\r\n }\r\n\r\n kritzelEngine: HTMLKritzelEngineElement | null = null;\r\n\r\n get activeToolAsTextTool() {\r\n return this.activeControl?.tool as KritzelTextTool;\r\n }\r\n\r\n get activeToolAsBrushTool() {\r\n return this.activeControl?.tool as KritzelBrushTool;\r\n }\r\n\r\n async componentWillLoad() {\r\n await this.initializeEngine();\r\n await this.initializeTools();\r\n this.isControlsReady.emit();\r\n }\r\n\r\n private async initializeEngine() {\r\n await customElements.whenDefined('kritzel-engine');\r\n this.kritzelEngine = this.host.parentElement.querySelector('kritzel-engine');\r\n\r\n if (!this.kritzelEngine) {\r\n throw new Error('kritzel-engine not found in parent element.');\r\n }\r\n }\r\n\r\n private async initializeTools() {\r\n for (const c of this.controls) {\r\n if (c.type === 'tool' && c.tool) {\r\n c.tool = await this.kritzelEngine.registerTool(c.name, c.tool, c.config);\r\n }\r\n\r\n if (c.type === 'tool' && c.isDefault && c.tool) {\r\n await this.kritzelEngine.changeActiveTool(c.tool as KritzelBaseTool);\r\n this.activeControl = c;\r\n }\r\n\r\n if (c.type === 'config') {\r\n if (this.firstConfig === null) {\r\n this.firstConfig = c;\r\n } else {\r\n console.warn('Only one config control is allowed. The first one will be used.');\r\n }\r\n }\r\n }\r\n }\r\n\r\n private async handleControlClick(control: KritzelToolbarControl) {\r\n this.activeControl = control;\r\n\r\n if (this.activeControl.type === 'tool') {\r\n await this.kritzelEngine.changeActiveTool(this.activeControl.tool as KritzelBaseTool);\r\n }\r\n }\r\n\r\n private handleConfigClick(event: MouseEvent) {\r\n event.stopPropagation();\r\n this.isTooltipVisible = !this.isTooltipVisible;\r\n this.kritzelEngine?.disable();\r\n }\r\n\r\n private async handleToolChange(event: CustomEvent) {\r\n this.activeControl = { ...this.activeControl, tool: event.detail };\r\n await this.kritzelEngine.changeActiveTool((this.activeControl as any).tool);\r\n }\r\n\r\n render() {\r\n const hasNoConfig = this.activeControl?.config === undefined || this.activeControl?.config === null;\r\n\r\n return (\r\n <Host\r\n class={{\r\n mobile: this.isTouchDevice,\r\n }}\r\n >\r\n {this.isUtilityPanelVisible && (\r\n <kritzel-utility-panel\r\n style={{\r\n position: 'absolute',\r\n bottom: '56px',\r\n left: '12px',\r\n }}\r\n onUndo={() => this.kritzelEngine?.undo()}\r\n onRedo={() => this.kritzelEngine?.redo()}\r\n onDelete={() => this.kritzelEngine?.delete()}\r\n ></kritzel-utility-panel>\r\n )}\r\n\r\n <div class=\"kritzel-controls\">\r\n {this.controls.map(control => {\r\n if (control.type === 'tool') {\r\n return (\r\n <button\r\n class={{\r\n 'kritzel-control': true,\r\n 'selected': this.activeControl?.name === control?.name,\r\n }}\r\n key={control.name}\r\n onClick={_event => this.handleControlClick?.(control)}\r\n >\r\n <kritzel-icon name={control.icon}></kritzel-icon>\r\n </button>\r\n );\r\n }\r\n\r\n if (control.type === 'divider') {\r\n return <div class=\"kritzel-divider\" key={control.name}></div>;\r\n }\r\n\r\n if (control.type === 'config' && control.name === this.firstConfig?.name && this.activeControl) {\r\n return (\r\n <div class=\"kritzel-config-container\" key={control.name}>\r\n <kritzel-tooltip isVisible={this.isTooltipVisible} anchorElement={this.host.shadowRoot?.querySelector('.kritzel-config-container') as HTMLElement}>\r\n <div style={{ width: '294px', height: '100%' }}>\r\n {this.activeControl.name === 'brush' && (\r\n <kritzel-control-brush-config tool={this.activeToolAsBrushTool} onToolChange={event => this.handleToolChange?.(event)}></kritzel-control-brush-config>\r\n )}\r\n\r\n {this.activeControl.name === 'text' && (\r\n <kritzel-control-text-config tool={this.activeToolAsTextTool} onToolChange={event => this.handleToolChange?.(event)}></kritzel-control-text-config>\r\n )}\r\n </div>\r\n </kritzel-tooltip>\r\n\r\n <div\r\n class=\"kritzel-config\"\r\n onClick={event => this.handleConfigClick?.(event)}\r\n style={{\r\n cursor: this.activeControl.config ? 'pointer' : 'default',\r\n pointerEvents: hasNoConfig ? 'none' : 'auto',\r\n }}\r\n >\r\n {this.activeControl.tool instanceof KritzelBrushTool && (\r\n <div class=\"color-container\">\r\n <kritzel-color\r\n value={this.activeToolAsBrushTool?.color}\r\n size={this.activeToolAsBrushTool?.size}\r\n style={{\r\n borderRadius: '50%',\r\n border: 'none',\r\n }}\r\n ></kritzel-color>\r\n </div>\r\n )}\r\n\r\n {this.activeControl.tool instanceof KritzelTextTool && (\r\n <div class=\"font-container\">\r\n <kritzel-font\r\n fontFamily={this.activeToolAsTextTool?.fontFamily}\r\n size={this.activeToolAsTextTool?.fontSize}\r\n color={this.activeToolAsTextTool?.fontColor}\r\n ></kritzel-font>\r\n </div>\r\n )}\r\n\r\n {hasNoConfig && <div class=\"no-config\"></div>}\r\n </div>\r\n </div>\r\n );\r\n }\r\n })}\r\n </div>\r\n </Host>\r\n );\r\n }\r\n}\r\n"]}
@@ -13,7 +13,7 @@ export class KritzelUtilityPanel {
13
13
  this.redo.emit();
14
14
  }
15
15
  render() {
16
- return (h(Host, { key: 'f381fac2cb032ca19c6945ef4f39673ea0bd0cc5' }, h("button", { key: '1f7200672970baf1d0cfcaa116fa3f8f9a39832a', class: "utility-button", onClick: event => this.handleUndo(event) }, h("kritzel-icon", { key: '755d9201d80d8db086f07b38e90a01a06e980b50', name: "undo" })), h("button", { key: '06e4d5c2956f23245c3d48f21c15d54e8bef8119', class: "utility-button", onClick: event => this.handleRedo(event) }, h("kritzel-icon", { key: '13eb6b31c45b67ac399fc7c84b941ddce04c5c86', name: "redo" })), h("div", { key: '7f03a576a37649db679b93604c2654d29cc81da4', class: "utility-separator" }), h("button", { key: '0c40613e9f6a049cec872d71e9f948d685ec1dbe', class: "utility-button" }, h("kritzel-icon", { key: '8cba73bcb02ef8b7c182ba2fd16d98d6855f1c1b', name: "delete", onClick: () => this.delete.emit() }))));
16
+ return (h(Host, { key: 'cf7b5c501b6535fda22b17ea218e90bd60223c6e' }, h("button", { key: '05db2cee7f2e191674167ef503e70718200bf904', class: "utility-button", onClick: event => this.handleUndo(event) }, h("kritzel-icon", { key: '10412c038b9d4e66851c8a0c9b51b99607bac397', name: "undo" })), h("button", { key: 'edf0289de8ce5cddd9341bc1855eae095274226c', class: "utility-button", onClick: event => this.handleRedo(event) }, h("kritzel-icon", { key: '46263e3d3f166b224c9a18ba383085e020fac51a', name: "redo" })), h("div", { key: '3a6c0eca21f44887683d6308ca5741b095eceb77', class: "utility-separator" }), h("button", { key: 'ced83e0c47fc920edabdc5b3379a8805f1827374', class: "utility-button" }, h("kritzel-icon", { key: 'd49c6412d778d34fe21e86482f2114631621106a', name: "delete", onClick: () => this.delete.emit() }))));
17
17
  }
18
18
  static get is() { return "kritzel-utility-panel"; }
19
19
  static get encapsulation() { return "shadow"; }
@@ -0,0 +1,5 @@
1
+ :host {
2
+ display: flex;
3
+ flex-direction: column;
4
+ z-index: 1;
5
+ }
@@ -0,0 +1,212 @@
1
+ import { Host, h } from "@stencil/core";
2
+ import { KritzelWorkspace } from "../../../classes/workspace.class";
3
+ import { ObjectHelper } from "../../../helpers/object.helper";
4
+ export class KritzelWorkspaceManager {
5
+ constructor() {
6
+ this.workspaces = [];
7
+ this.editingIndex = null;
8
+ this.newWorkspace = null;
9
+ this.kritzelEngine = null;
10
+ this.handleNewWorkspace = async () => {
11
+ var _a;
12
+ await ((_a = this.splitButtonRef) === null || _a === void 0 ? void 0 : _a.openMenu());
13
+ requestAnimationFrame(() => {
14
+ this.newWorkspace = new KritzelWorkspace(ObjectHelper.generateUUID(), 'New Workspace');
15
+ this.editingIndex = 0;
16
+ });
17
+ };
18
+ this.handleMenuClosed = () => {
19
+ this.editingIndex = null;
20
+ this.newWorkspace = null;
21
+ };
22
+ this.handleSave = async (item) => {
23
+ const workspace = item.value;
24
+ const updatedWorkspace = Object.assign(Object.assign({}, workspace), { name: item.label });
25
+ if (this.newWorkspace) {
26
+ await this.kritzelEngine.createWorkspace(updatedWorkspace);
27
+ this.editingIndex = null;
28
+ this.newWorkspace = null;
29
+ this.selectWorkspace(updatedWorkspace);
30
+ }
31
+ else {
32
+ await this.kritzelEngine.updateWorkspace(updatedWorkspace);
33
+ this.editingIndex = null;
34
+ this.newWorkspace = null;
35
+ }
36
+ };
37
+ this.handleRename = (index) => {
38
+ this.editingIndex = index;
39
+ };
40
+ this.handleDelete = async (workspaceToDelete) => {
41
+ var _a;
42
+ await this.kritzelEngine.deleteWorkspace(workspaceToDelete);
43
+ if (((_a = this.activeWorkspace) === null || _a === void 0 ? void 0 : _a.id) === workspaceToDelete.id) {
44
+ const newActiveWorkspace = this.sortedWorkspaces.find(w => w.id !== workspaceToDelete.id) || null;
45
+ this.selectWorkspace(newActiveWorkspace);
46
+ }
47
+ };
48
+ }
49
+ get sortedWorkspaces() {
50
+ const uniqueWorkspaces = [...new Map(this.workspaces.map(workspace => [workspace.id, workspace])).values()];
51
+ return [this.newWorkspace, ...uniqueWorkspaces].filter(ws => ws !== null).sort((a, b) => b.createdAt.getTime() - a.createdAt.getTime());
52
+ }
53
+ get activeItemIndex() {
54
+ return this.sortedWorkspaces.findIndex(ws => { var _a; return ws.id === ((_a = this.activeWorkspace) === null || _a === void 0 ? void 0 : _a.id); });
55
+ }
56
+ async componentWillLoad() {
57
+ await this.initializeEngine();
58
+ this.isWorkspaceManagerReady.emit();
59
+ }
60
+ async initializeEngine() {
61
+ await customElements.whenDefined('kritzel-engine');
62
+ this.kritzelEngine = this.host.parentElement.querySelector('kritzel-engine');
63
+ if (!this.kritzelEngine) {
64
+ throw new Error('kritzel-engine not found in parent element.');
65
+ }
66
+ }
67
+ handleSelect(workspace) {
68
+ this.selectWorkspace(workspace);
69
+ }
70
+ selectWorkspace(workspace) {
71
+ debugger;
72
+ if (this.editingIndex !== null)
73
+ return;
74
+ this.activeWorkspace = this.sortedWorkspaces.find(ws => ws.id === workspace.id);
75
+ this.workspaceChange.emit(workspace);
76
+ }
77
+ render() {
78
+ const workspaceSelectionOptions = this.sortedWorkspaces.map((ws, index) => ({
79
+ label: ws.name,
80
+ value: ws,
81
+ select: () => this.handleSelect(ws),
82
+ cancel: this.handleMenuClosed,
83
+ save: this.handleSave,
84
+ children: [
85
+ {
86
+ label: 'Rename',
87
+ value: 'rename',
88
+ select: () => this.handleRename(index),
89
+ },
90
+ {
91
+ label: 'Delete',
92
+ value: 'delete',
93
+ disabled: this.sortedWorkspaces.length <= 1,
94
+ select: () => this.handleDelete(ws),
95
+ },
96
+ ],
97
+ }));
98
+ return (h(Host, { key: '4d060aee853a47ea451f707c6de345b6efcbd678' }, h("kritzel-split-button", { key: 'cb52b41b25c7ddc8584e96a2151efc6406166e99', ref: el => (this.splitButtonRef = el), buttonIcon: "plus", options: workspaceSelectionOptions, activeItemIndex: this.activeItemIndex, editingIndex: this.editingIndex, onButtonClick: this.handleNewWorkspace, onMenuClosed: this.handleMenuClosed })));
99
+ }
100
+ static get is() { return "kritzel-workspace-manager"; }
101
+ static get encapsulation() { return "shadow"; }
102
+ static get originalStyleUrls() {
103
+ return {
104
+ "$": ["kritzel-workspace-manager.css"]
105
+ };
106
+ }
107
+ static get styleUrls() {
108
+ return {
109
+ "$": ["kritzel-workspace-manager.css"]
110
+ };
111
+ }
112
+ static get properties() {
113
+ return {
114
+ "workspaces": {
115
+ "type": "unknown",
116
+ "attribute": "workspaces",
117
+ "mutable": false,
118
+ "complexType": {
119
+ "original": "KritzelWorkspace[]",
120
+ "resolved": "KritzelWorkspace[]",
121
+ "references": {
122
+ "KritzelWorkspace": {
123
+ "location": "import",
124
+ "path": "../../../classes/workspace.class",
125
+ "id": "src/classes/workspace.class.ts::KritzelWorkspace"
126
+ }
127
+ }
128
+ },
129
+ "required": false,
130
+ "optional": false,
131
+ "docs": {
132
+ "tags": [],
133
+ "text": ""
134
+ },
135
+ "getter": false,
136
+ "setter": false,
137
+ "defaultValue": "[]"
138
+ },
139
+ "activeWorkspace": {
140
+ "type": "unknown",
141
+ "attribute": "active-workspace",
142
+ "mutable": true,
143
+ "complexType": {
144
+ "original": "KritzelWorkspace",
145
+ "resolved": "KritzelWorkspace",
146
+ "references": {
147
+ "KritzelWorkspace": {
148
+ "location": "import",
149
+ "path": "../../../classes/workspace.class",
150
+ "id": "src/classes/workspace.class.ts::KritzelWorkspace"
151
+ }
152
+ }
153
+ },
154
+ "required": false,
155
+ "optional": false,
156
+ "docs": {
157
+ "tags": [],
158
+ "text": ""
159
+ },
160
+ "getter": false,
161
+ "setter": false
162
+ }
163
+ };
164
+ }
165
+ static get states() {
166
+ return {
167
+ "editingIndex": {},
168
+ "newWorkspace": {}
169
+ };
170
+ }
171
+ static get events() {
172
+ return [{
173
+ "method": "isWorkspaceManagerReady",
174
+ "name": "isWorkspaceManagerReady",
175
+ "bubbles": true,
176
+ "cancelable": true,
177
+ "composed": true,
178
+ "docs": {
179
+ "tags": [],
180
+ "text": ""
181
+ },
182
+ "complexType": {
183
+ "original": "void",
184
+ "resolved": "void",
185
+ "references": {}
186
+ }
187
+ }, {
188
+ "method": "workspaceChange",
189
+ "name": "workspaceChange",
190
+ "bubbles": true,
191
+ "cancelable": true,
192
+ "composed": true,
193
+ "docs": {
194
+ "tags": [],
195
+ "text": ""
196
+ },
197
+ "complexType": {
198
+ "original": "KritzelWorkspace",
199
+ "resolved": "KritzelWorkspace",
200
+ "references": {
201
+ "KritzelWorkspace": {
202
+ "location": "import",
203
+ "path": "../../../classes/workspace.class",
204
+ "id": "src/classes/workspace.class.ts::KritzelWorkspace"
205
+ }
206
+ }
207
+ }
208
+ }];
209
+ }
210
+ static get elementRef() { return "host"; }
211
+ }
212
+ //# sourceMappingURL=kritzel-workspace-manager.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"kritzel-workspace-manager.js","sourceRoot":"","sources":["../../../../src/components/ui/kritzel-workspace-manager/kritzel-workspace-manager.tsx"],"names":[],"mappings":"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","sourcesContent":["import { Component, Element, Event, EventEmitter, Host, Prop, State, h } from '@stencil/core';\r\nimport { KritzelWorkspace } from '../../../classes/workspace.class';\r\nimport { ObjectHelper } from '../../../helpers/object.helper';\r\nimport { KritzelMenuItem } from '../../../interfaces/menu-item.interface';\r\n\r\n@Component({\r\n tag: 'kritzel-workspace-manager',\r\n styleUrl: 'kritzel-workspace-manager.css',\r\n shadow: true,\r\n})\r\nexport class KritzelWorkspaceManager {\r\n @Prop()\r\n workspaces: KritzelWorkspace[] = [];\r\n\r\n @Prop({ mutable: true })\r\n activeWorkspace: KritzelWorkspace;\r\n\r\n @State()\r\n editingIndex: number | null = null;\r\n\r\n @State()\r\n newWorkspace: KritzelWorkspace | null = null;\r\n\r\n @Event()\r\n isWorkspaceManagerReady: EventEmitter<void>;\r\n\r\n @Event()\r\n workspaceChange: EventEmitter<KritzelWorkspace>;\r\n\r\n @Element()\r\n host!: HTMLElement;\r\n\r\n kritzelEngine: HTMLKritzelEngineElement | null = null;\r\n\r\n splitButtonRef!: HTMLKritzelSplitButtonElement;\r\n\r\n get sortedWorkspaces() {\r\n const uniqueWorkspaces = [...new Map(this.workspaces.map(workspace => [workspace.id, workspace])).values()];\r\n return [this.newWorkspace, ...uniqueWorkspaces].filter(ws => ws !== null).sort((a, b) => b.createdAt.getTime() - a.createdAt.getTime());\r\n }\r\n\r\n get activeItemIndex() {\r\n return this.sortedWorkspaces.findIndex(ws => ws.id === this.activeWorkspace?.id);\r\n }\r\n\r\n async componentWillLoad() {\r\n await this.initializeEngine();\r\n this.isWorkspaceManagerReady.emit();\r\n }\r\n\r\n private async initializeEngine() {\r\n await customElements.whenDefined('kritzel-engine');\r\n this.kritzelEngine = this.host.parentElement.querySelector('kritzel-engine');\r\n\r\n if (!this.kritzelEngine) {\r\n throw new Error('kritzel-engine not found in parent element.');\r\n }\r\n }\r\n\r\n private handleSelect(workspace: KritzelWorkspace) {\r\n this.selectWorkspace(workspace);\r\n }\r\n\r\n private handleNewWorkspace = async () => {\r\n await this.splitButtonRef?.openMenu();\r\n\r\n requestAnimationFrame(() => {\r\n this.newWorkspace = new KritzelWorkspace(ObjectHelper.generateUUID(), 'New Workspace');\r\n this.editingIndex = 0;\r\n });\r\n };\r\n\r\n private handleMenuClosed = () => {\r\n this.editingIndex = null;\r\n this.newWorkspace = null;\r\n };\r\n\r\n private handleSave = async (item: KritzelMenuItem<KritzelWorkspace>) => {\r\n const workspace = item.value;\r\n const updatedWorkspace = { ...workspace, name: item.label };\r\n\r\n if (this.newWorkspace) {\r\n await this.kritzelEngine.createWorkspace(updatedWorkspace);\r\n\r\n this.editingIndex = null;\r\n this.newWorkspace = null;\r\n\r\n this.selectWorkspace(updatedWorkspace);\r\n } else {\r\n await this.kritzelEngine.updateWorkspace(updatedWorkspace);\r\n\r\n this.editingIndex = null;\r\n this.newWorkspace = null;\r\n }\r\n };\r\n\r\n private handleRename = (index: number) => {\r\n this.editingIndex = index;\r\n };\r\n\r\n private handleDelete = async (workspaceToDelete: KritzelWorkspace) => {\r\n await this.kritzelEngine.deleteWorkspace(workspaceToDelete);\r\n\r\n if (this.activeWorkspace?.id === workspaceToDelete.id) {\r\n const newActiveWorkspace = this.sortedWorkspaces.find(w => w.id !== workspaceToDelete.id) || null;\r\n this.selectWorkspace(newActiveWorkspace);\r\n }\r\n };\r\n\r\n private selectWorkspace(workspace: KritzelWorkspace) {\r\n debugger;\r\n if (this.editingIndex !== null) return;\r\n this.activeWorkspace = this.sortedWorkspaces.find(ws => ws.id === workspace.id);\r\n this.workspaceChange.emit(workspace);\r\n }\r\n\r\n render() {\r\n const workspaceSelectionOptions: KritzelMenuItem<KritzelWorkspace>[] = this.sortedWorkspaces.map((ws, index) => ({\r\n label: ws.name,\r\n value: ws,\r\n select: () => this.handleSelect(ws),\r\n cancel: this.handleMenuClosed,\r\n save: this.handleSave,\r\n children: [\r\n {\r\n label: 'Rename',\r\n value: 'rename',\r\n select: () => this.handleRename(index),\r\n },\r\n {\r\n label: 'Delete',\r\n value: 'delete',\r\n disabled: this.sortedWorkspaces.length <= 1,\r\n select: () => this.handleDelete(ws),\r\n },\r\n ],\r\n }));\r\n\r\n return (\r\n <Host>\r\n <kritzel-split-button\r\n ref={el => (this.splitButtonRef = el)}\r\n buttonIcon=\"plus\"\r\n options={workspaceSelectionOptions}\r\n activeItemIndex={this.activeItemIndex}\r\n editingIndex={this.editingIndex}\r\n onButtonClick={this.handleNewWorkspace}\r\n onMenuClosed={this.handleMenuClosed}\r\n ></kritzel-split-button>\r\n </Host>\r\n );\r\n }\r\n}\r\n"]}
@@ -1,4 +1,5 @@
1
1
  export const DEFAULT_ENGINE_STATE = {
2
+ activeWorkspace: null,
2
3
  activeTool: null,
3
4
  activeText: null,
4
5
  currentPath: null,
@@ -32,6 +33,7 @@ export const DEFAULT_ENGINE_STATE = {
32
33
  showObjectInfo: false,
33
34
  showViewportInfo: false,
34
35
  logCommands: false,
36
+ logDatabase: false,
35
37
  },
36
38
  host: null,
37
39
  pointerX: 0,
@@ -39,7 +41,7 @@ export const DEFAULT_ENGINE_STATE = {
39
41
  scale: 1,
40
42
  scaleMax: 1,
41
43
  scaleMin: 1,
42
- scaleStep: 0.05,
44
+ scaleStep: 0.075,
43
45
  startX: 0,
44
46
  startY: 0,
45
47
  translateX: 0,
@@ -53,6 +55,7 @@ export const DEFAULT_ENGINE_STATE = {
53
55
  historyBufferSize: 1000,
54
56
  longTouchTimeout: null,
55
57
  longTouchDelay: 300,
56
- pointers: new Map()
58
+ pointers: new Map(),
59
+ workspaces: [],
57
60
  };
58
61
  //# sourceMappingURL=default-engine-state.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"default-engine-state.js","sourceRoot":"","sources":["../../src/configs/default-engine-state.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,oBAAoB,GAAuB;IACtD,UAAU,EAAE,IAAI;IAChB,UAAU,EAAE,IAAI;IAChB,WAAW,EAAE,IAAI;IACjB,aAAa,EAAE,IAAI;IACnB,aAAa,EAAE,IAAI;IACnB,YAAY,EAAE,IAAI;IAClB,cAAc,EAAE,IAAI;IACpB,gBAAgB,EAAE,IAAI;IACtB,kBAAkB,EAAE,KAAK;IACzB,OAAO,EAAE,KAAK;IACd,SAAS,EAAE,IAAI;IACf,SAAS,EAAE,KAAK;IAChB,SAAS,EAAE,KAAK;IAChB,SAAS,EAAE,KAAK;IAChB,WAAW,EAAE,KAAK;IAClB,UAAU,EAAE,KAAK;IACjB,sBAAsB,EAAE,KAAK;IAC7B,UAAU,EAAE,KAAK;IACjB,wBAAwB,EAAE,KAAK;IAC/B,UAAU,EAAE,KAAK;IACjB,SAAS,EAAE,KAAK;IAChB,SAAS,EAAE,KAAK;IAChB,SAAS,EAAE,KAAK;IAChB,gBAAgB,EAAE,KAAK;IACvB,oBAAoB,EAAE,KAAK;IAC3B,gBAAgB,EAAE,EAAE;IACpB,YAAY,EAAE,CAAC;IACf,YAAY,EAAE,CAAC;IACf,eAAe,EAAE,KAAK;IACtB,SAAS,EAAE;QACT,cAAc,EAAE,KAAK;QACrB,gBAAgB,EAAE,KAAK;QACvB,WAAW,EAAE,KAAK;KACnB;IACD,IAAI,EAAE,IAAI;IACV,QAAQ,EAAE,CAAC;IACX,QAAQ,EAAE,CAAC;IACX,KAAK,EAAE,CAAC;IACR,QAAQ,EAAE,CAAC;IACX,QAAQ,EAAE,CAAC;IACX,SAAS,EAAE,IAAI;IACf,MAAM,EAAE,CAAC;IACT,MAAM,EAAE,CAAC;IACT,UAAU,EAAE,CAAC;IACb,aAAa,EAAE,GAAG;IAClB,aAAa,EAAE,CAAC;IAChB,UAAU,EAAE,CAAC;IACb,aAAa,EAAE,GAAG;IAClB,aAAa,EAAE,CAAC;IAChB,aAAa,EAAE,CAAC;IAChB,cAAc,EAAE,CAAC;IACjB,iBAAiB,EAAE,IAAI;IACvB,gBAAgB,EAAE,IAAI;IACtB,cAAc,EAAE,GAAG;IACnB,QAAQ,EAAE,IAAI,GAAG,EAAwB;CAC1C,CAAC","sourcesContent":["import { KritzelEngineState } from \"../interfaces/engine-state.interface\";\r\n\r\nexport const DEFAULT_ENGINE_STATE: KritzelEngineState = {\r\n activeTool: null,\r\n activeText: null,\r\n currentPath: null,\r\n copiedObjects: null,\r\n objectsOctree: null,\r\n selectionBox: null,\r\n selectionGroup: null,\r\n resizeHandleType: null,\r\n hasViewportChanged: false,\r\n isReady: false,\r\n isEnabled: true,\r\n isScaling: false,\r\n isPanning: false,\r\n isFocused: false,\r\n isSelecting: false,\r\n isResizing: false,\r\n isResizeHandleSelected: false,\r\n isRotating: false,\r\n isRotationHandleSelected: false,\r\n isDragging: false,\r\n isDrawing: false,\r\n isErasing: false,\r\n isWriting: false,\r\n isCtrlKeyPressed: false,\r\n isContextMenuVisible: false,\r\n contextMenuItems: [],\r\n contextMenuX: 0,\r\n contextMenuY: 0,\r\n skipContextMenu: false,\r\n debugInfo: {\r\n showObjectInfo: false,\r\n showViewportInfo: false,\r\n logCommands: false,\r\n },\r\n host: null,\r\n pointerX: 0,\r\n pointerY: 0,\r\n scale: 1,\r\n scaleMax: 1,\r\n scaleMin: 1,\r\n scaleStep: 0.05,\r\n startX: 0,\r\n startY: 0,\r\n translateX: 0,\r\n translateXMax: 400,\r\n translateXMin: 0,\r\n translateY: 0,\r\n translateYMax: 400,\r\n translateYMin: 0,\r\n viewportWidth: 0,\r\n viewportHeight: 0,\r\n historyBufferSize: 1000,\r\n longTouchTimeout: null,\r\n longTouchDelay: 300,\r\n pointers: new Map<number, PointerEvent>()\r\n};"]}
1
+ {"version":3,"file":"default-engine-state.js","sourceRoot":"","sources":["../../src/configs/default-engine-state.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,oBAAoB,GAAuB;IACtD,eAAe,EAAE,IAAI;IACrB,UAAU,EAAE,IAAI;IAChB,UAAU,EAAE,IAAI;IAChB,WAAW,EAAE,IAAI;IACjB,aAAa,EAAE,IAAI;IACnB,aAAa,EAAE,IAAI;IACnB,YAAY,EAAE,IAAI;IAClB,cAAc,EAAE,IAAI;IACpB,gBAAgB,EAAE,IAAI;IACtB,kBAAkB,EAAE,KAAK;IACzB,OAAO,EAAE,KAAK;IACd,SAAS,EAAE,IAAI;IACf,SAAS,EAAE,KAAK;IAChB,SAAS,EAAE,KAAK;IAChB,SAAS,EAAE,KAAK;IAChB,WAAW,EAAE,KAAK;IAClB,UAAU,EAAE,KAAK;IACjB,sBAAsB,EAAE,KAAK;IAC7B,UAAU,EAAE,KAAK;IACjB,wBAAwB,EAAE,KAAK;IAC/B,UAAU,EAAE,KAAK;IACjB,SAAS,EAAE,KAAK;IAChB,SAAS,EAAE,KAAK;IAChB,SAAS,EAAE,KAAK;IAChB,gBAAgB,EAAE,KAAK;IACvB,oBAAoB,EAAE,KAAK;IAC3B,gBAAgB,EAAE,EAAE;IACpB,YAAY,EAAE,CAAC;IACf,YAAY,EAAE,CAAC;IACf,eAAe,EAAE,KAAK;IACtB,SAAS,EAAE;QACT,cAAc,EAAE,KAAK;QACrB,gBAAgB,EAAE,KAAK;QACvB,WAAW,EAAE,KAAK;QAClB,WAAW,EAAE,KAAK;KACnB;IACD,IAAI,EAAE,IAAI;IACV,QAAQ,EAAE,CAAC;IACX,QAAQ,EAAE,CAAC;IACX,KAAK,EAAE,CAAC;IACR,QAAQ,EAAE,CAAC;IACX,QAAQ,EAAE,CAAC;IACX,SAAS,EAAE,KAAK;IAChB,MAAM,EAAE,CAAC;IACT,MAAM,EAAE,CAAC;IACT,UAAU,EAAE,CAAC;IACb,aAAa,EAAE,GAAG;IAClB,aAAa,EAAE,CAAC;IAChB,UAAU,EAAE,CAAC;IACb,aAAa,EAAE,GAAG;IAClB,aAAa,EAAE,CAAC;IAChB,aAAa,EAAE,CAAC;IAChB,cAAc,EAAE,CAAC;IACjB,iBAAiB,EAAE,IAAI;IACvB,gBAAgB,EAAE,IAAI;IACtB,cAAc,EAAE,GAAG;IACnB,QAAQ,EAAE,IAAI,GAAG,EAAwB;IACzC,UAAU,EAAE,EAAE;CACf,CAAC","sourcesContent":["import { KritzelEngineState } from \"../interfaces/engine-state.interface\";\r\n\r\nexport const DEFAULT_ENGINE_STATE: KritzelEngineState = {\r\n activeWorkspace: null,\r\n activeTool: null,\r\n activeText: null,\r\n currentPath: null,\r\n copiedObjects: null,\r\n objectsOctree: null,\r\n selectionBox: null,\r\n selectionGroup: null,\r\n resizeHandleType: null,\r\n hasViewportChanged: false,\r\n isReady: false,\r\n isEnabled: true,\r\n isScaling: false,\r\n isPanning: false,\r\n isFocused: false,\r\n isSelecting: false,\r\n isResizing: false,\r\n isResizeHandleSelected: false,\r\n isRotating: false,\r\n isRotationHandleSelected: false,\r\n isDragging: false,\r\n isDrawing: false,\r\n isErasing: false,\r\n isWriting: false,\r\n isCtrlKeyPressed: false,\r\n isContextMenuVisible: false,\r\n contextMenuItems: [],\r\n contextMenuX: 0,\r\n contextMenuY: 0,\r\n skipContextMenu: false,\r\n debugInfo: {\r\n showObjectInfo: false,\r\n showViewportInfo: false,\r\n logCommands: false,\r\n logDatabase: false,\r\n },\r\n host: null,\r\n pointerX: 0,\r\n pointerY: 0,\r\n scale: 1,\r\n scaleMax: 1,\r\n scaleMin: 1,\r\n scaleStep: 0.075,\r\n startX: 0,\r\n startY: 0,\r\n translateX: 0,\r\n translateXMax: 400,\r\n translateXMin: 0,\r\n translateY: 0,\r\n translateYMax: 400,\r\n translateYMin: 0,\r\n viewportWidth: 0,\r\n viewportHeight: 0,\r\n historyBufferSize: 1000,\r\n longTouchTimeout: null,\r\n longTouchDelay: 300,\r\n pointers: new Map<number, PointerEvent>(),\r\n workspaces: [],\r\n};"]}
@@ -1,6 +1,6 @@
1
1
  export class KritzelClassHelper {
2
2
  static isInstanceOf(object, className) {
3
- return object.__class__ === className;
3
+ return !!object && object.__class__ === className;
4
4
  }
5
5
  }
6
6
  //# sourceMappingURL=class.helper.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"class.helper.js","sourceRoot":"","sources":["../../src/helpers/class.helper.ts"],"names":[],"mappings":"AAAA,MAAM,OAAO,kBAAkB;IAC7B,MAAM,CAAC,YAAY,CAAI,MAAW,EAAE,SAAiB;QACnD,OAAO,MAAM,CAAC,SAAS,KAAK,SAAS,CAAC;IACxC,CAAC;CACF","sourcesContent":["export class KritzelClassHelper {\r\n static isInstanceOf<T>(object: any, className: string): object is T {\r\n return object.__class__ === className;\r\n }\r\n}"]}
1
+ {"version":3,"file":"class.helper.js","sourceRoot":"","sources":["../../src/helpers/class.helper.ts"],"names":[],"mappings":"AAAA,MAAM,OAAO,kBAAkB;IAC7B,MAAM,CAAC,YAAY,CAAI,MAAW,EAAE,SAAiB;QACnD,OAAO,CAAC,CAAC,MAAM,IAAI,MAAM,CAAC,SAAS,KAAK,SAAS,CAAC;IACpD,CAAC;CACF","sourcesContent":["export class KritzelClassHelper {\r\n static isInstanceOf<T>(object: any, className: string): object is T {\r\n return !!object && object.__class__ === className;\r\n }\r\n}"]}
@@ -1,7 +1,36 @@
1
- export class KritzelKeyboardHelper {
1
+ export class KritzelHTMLHelper {
2
2
  static getNumericValueFromStyle(element, property) {
3
3
  const value = window.getComputedStyle(element).getPropertyValue(property);
4
4
  return parseFloat(value) || 0;
5
5
  }
6
+ static getScrollableParent(element) {
7
+ var _a, _b;
8
+ if (!element) {
9
+ return window;
10
+ }
11
+ const parent = (_b = (_a = element.parentNode) === null || _a === void 0 ? void 0 : _a.host) !== null && _b !== void 0 ? _b : element.parentElement;
12
+ if (!parent || parent.tagName === 'BODY') {
13
+ return window;
14
+ }
15
+ const style = window.getComputedStyle(parent);
16
+ if (style.overflow === 'auto' || style.overflowY === 'auto' || style.overflow === 'scroll' || style.overflowY === 'scroll') {
17
+ return parent;
18
+ }
19
+ return this.getScrollableParent(parent);
20
+ }
21
+ static isElementInViewport(element) {
22
+ if (!element) {
23
+ return false;
24
+ }
25
+ const scrollableParent = this.getScrollableParent(element);
26
+ const rect = element.getBoundingClientRect();
27
+ if (scrollableParent === window) {
28
+ const viewportHeight = window.innerHeight || document.documentElement.clientHeight;
29
+ const viewportWidth = window.innerWidth || document.documentElement.clientWidth;
30
+ return rect.top >= 0 && rect.left >= 0 && rect.bottom <= viewportHeight && rect.right <= viewportWidth;
31
+ }
32
+ const parentRect = scrollableParent.getBoundingClientRect();
33
+ return rect.top >= parentRect.top && rect.left >= parentRect.left && rect.bottom <= parentRect.bottom && rect.right <= parentRect.right;
34
+ }
6
35
  }
7
36
  //# sourceMappingURL=html.helper.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"html.helper.js","sourceRoot":"","sources":["../../src/helpers/html.helper.ts"],"names":[],"mappings":"AAAA,MAAM,OAAO,qBAAqB;IACjC,MAAM,CAAC,wBAAwB,CAAC,OAAoB,EAAE,QAAgB;QACpE,MAAM,KAAK,GAAG,MAAM,CAAC,gBAAgB,CAAC,OAAO,CAAC,CAAC,gBAAgB,CAAC,QAAQ,CAAC,CAAC;QAC1E,OAAO,UAAU,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAChC,CAAC;CACD","sourcesContent":["export class KritzelKeyboardHelper {\r\n static getNumericValueFromStyle(element: HTMLElement, property: string): number {\r\n const value = window.getComputedStyle(element).getPropertyValue(property);\r\n return parseFloat(value) || 0;\r\n }\r\n}"]}
1
+ {"version":3,"file":"html.helper.js","sourceRoot":"","sources":["../../src/helpers/html.helper.ts"],"names":[],"mappings":"AAAA,MAAM,OAAO,iBAAiB;IAC7B,MAAM,CAAC,wBAAwB,CAAC,OAAoB,EAAE,QAAgB;QACpE,MAAM,KAAK,GAAG,MAAM,CAAC,gBAAgB,CAAC,OAAO,CAAC,CAAC,gBAAgB,CAAC,QAAQ,CAAC,CAAC;QAC1E,OAAO,UAAU,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAChC,CAAC;IAED,MAAM,CAAC,mBAAmB,CAAC,OAAoB;;QAC5C,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,OAAO,MAAM,CAAC;QAChB,CAAC;QAED,MAAM,MAAM,GAAG,MAAC,MAAC,OAAO,CAAC,UAAyB,0CAAE,IAAoB,mCAAI,OAAO,CAAC,aAAa,CAAC;QAElG,IAAI,CAAC,MAAM,IAAI,MAAM,CAAC,OAAO,KAAK,MAAM,EAAE,CAAC;YACzC,OAAO,MAAM,CAAC;QAChB,CAAC;QAED,MAAM,KAAK,GAAG,MAAM,CAAC,gBAAgB,CAAC,MAAM,CAAC,CAAC;QAC9C,IAAI,KAAK,CAAC,QAAQ,KAAK,MAAM,IAAI,KAAK,CAAC,SAAS,KAAK,MAAM,IAAI,KAAK,CAAC,QAAQ,KAAK,QAAQ,IAAI,KAAK,CAAC,SAAS,KAAK,QAAQ,EAAE,CAAC;YAC3H,OAAO,MAAM,CAAC;QAChB,CAAC;QAED,OAAO,IAAI,CAAC,mBAAmB,CAAC,MAAM,CAAC,CAAC;IAC1C,CAAC;IAED,MAAM,CAAC,mBAAmB,CAAC,OAAoB;QAC7C,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,OAAO,KAAK,CAAC;QACf,CAAC;QAED,MAAM,gBAAgB,GAAG,IAAI,CAAC,mBAAmB,CAAC,OAAO,CAAC,CAAC;QAC3D,MAAM,IAAI,GAAG,OAAO,CAAC,qBAAqB,EAAE,CAAC;QAE7C,IAAI,gBAAgB,KAAK,MAAM,EAAE,CAAC;YAChC,MAAM,cAAc,GAAG,MAAM,CAAC,WAAW,IAAI,QAAQ,CAAC,eAAe,CAAC,YAAY,CAAC;YACnF,MAAM,aAAa,GAAG,MAAM,CAAC,UAAU,IAAI,QAAQ,CAAC,eAAe,CAAC,WAAW,CAAC;YAEhF,OAAO,IAAI,CAAC,GAAG,IAAI,CAAC,IAAI,IAAI,CAAC,IAAI,IAAI,CAAC,IAAI,IAAI,CAAC,MAAM,IAAI,cAAc,IAAI,IAAI,CAAC,KAAK,IAAI,aAAa,CAAC;QACzG,CAAC;QAED,MAAM,UAAU,GAAI,gBAAgC,CAAC,qBAAqB,EAAE,CAAC;QAE7E,OAAO,IAAI,CAAC,GAAG,IAAI,UAAU,CAAC,GAAG,IAAI,IAAI,CAAC,IAAI,IAAI,UAAU,CAAC,IAAI,IAAI,IAAI,CAAC,MAAM,IAAI,UAAU,CAAC,MAAM,IAAI,IAAI,CAAC,KAAK,IAAI,UAAU,CAAC,KAAK,CAAC;IAC1I,CAAC;CACF","sourcesContent":["export class KritzelHTMLHelper {\r\n static getNumericValueFromStyle(element: HTMLElement, property: string): number {\r\n const value = window.getComputedStyle(element).getPropertyValue(property);\r\n return parseFloat(value) || 0;\r\n }\r\n\r\n static getScrollableParent(element: HTMLElement): HTMLElement | Window {\r\n if (!element) {\r\n return window;\r\n }\r\n\r\n const parent = ((element.parentNode as ShadowRoot)?.host as HTMLElement) ?? element.parentElement;\r\n\r\n if (!parent || parent.tagName === 'BODY') {\r\n return window;\r\n }\r\n\r\n const style = window.getComputedStyle(parent);\r\n if (style.overflow === 'auto' || style.overflowY === 'auto' || style.overflow === 'scroll' || style.overflowY === 'scroll') {\r\n return parent;\r\n }\r\n\r\n return this.getScrollableParent(parent);\r\n }\r\n\r\n static isElementInViewport(element: HTMLElement): boolean {\r\n if (!element) {\r\n return false;\r\n }\r\n\r\n const scrollableParent = this.getScrollableParent(element);\r\n const rect = element.getBoundingClientRect();\r\n\r\n if (scrollableParent === window) {\r\n const viewportHeight = window.innerHeight || document.documentElement.clientHeight;\r\n const viewportWidth = window.innerWidth || document.documentElement.clientWidth;\r\n\r\n return rect.top >= 0 && rect.left >= 0 && rect.bottom <= viewportHeight && rect.right <= viewportWidth;\r\n }\r\n\r\n const parentRect = (scrollableParent as HTMLElement).getBoundingClientRect();\r\n\r\n return rect.top >= parentRect.top && rect.left >= parentRect.left && rect.bottom <= parentRect.bottom && rect.right <= parentRect.right;\r\n }\r\n}"]}
@@ -18,7 +18,7 @@ export class ObjectHelper {
18
18
  const cloneObject = (obj) => {
19
19
  const _a = obj, { _store, _elementRef, totalWidth, totalHeight, element } = _a, remainingProps = __rest(_a, ["_store", "_elementRef", "totalWidth", "totalHeight", "element"]);
20
20
  const clonedProps = structuredClone(remainingProps);
21
- if (element && element instanceof HTMLElement) {
21
+ if (element && typeof element === 'object' && 'nodeType' in element && element.nodeType === 1) {
22
22
  clonedProps.element = element.cloneNode(true);
23
23
  }
24
24
  return clonedProps;
@@ -1 +1 @@
1
- {"version":3,"file":"object.helper.js","sourceRoot":"","sources":["../../src/helpers/object.helper.ts"],"names":[],"mappings":";;;;;;;;;;;AAEA,MAAM,OAAO,YAAY;IACvB,MAAM,CAAC,YAAY;QACjB,OAAO,IAAI,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IACjD,CAAC;IAED,MAAM,CAAC,KAAK,CAAC,SAA4D;QACvE,MAAM,WAAW,GAAG,CAAC,GAA2B,EAAE,EAAE;YAClD,MAAM,KAA+E,GAAU,EAAzF,EAAE,MAAM,EAAE,WAAW,EAAE,UAAU,EAAE,WAAW,EAAE,OAAO,OAAkC,EAA7B,cAAc,cAA1E,iEAA4E,CAAa,CAAC;YAEhG,MAAM,WAAW,GAAG,eAAe,CAAC,cAAc,CAAC,CAAC;YAEpD,IAAI,OAAO,IAAI,OAAO,YAAY,WAAW,EAAE,CAAC;gBAC9C,WAAW,CAAC,OAAO,GAAG,OAAO,CAAC,SAAS,CAAC,IAAI,CAAgB,CAAC;YAC/D,CAAC;YAED,OAAO,WAAW,CAAC;QACrB,CAAC,CAAC;QAEF,IAAI,KAAK,CAAC,OAAO,CAAC,SAAS,CAAC,EAAE,CAAC;YAC7B,OAAO,SAAS,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;QACpC,CAAC;QAED,OAAO,WAAW,CAAC,SAAS,CAAC,CAAC;IAChC,CAAC;IAED,MAAM,CAAC,OAAO,CAAC,GAAQ;QACrB,IAAI,GAAG,KAAK,IAAI,IAAI,GAAG,KAAK,SAAS,EAAE,CAAC;YACtC,OAAO,IAAI,CAAC;QACd,CAAC;QACD,OAAO,CAAA,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAE,IAAI,CAAC,GAAG,EAAE,MAAM,MAAK,CAAC,IAAI,CAAA,GAAG,aAAH,GAAG,uBAAH,GAAG,CAAE,WAAW,MAAK,MAAM,CAAC;IACvE,CAAC;CACF","sourcesContent":["import { KritzelBaseObject } from '../classes/objects/base-object.class';\r\n\r\nexport class ObjectHelper {\r\n static generateUUID(): string {\r\n return Math.random().toString(36).substr(2, 9);\r\n }\r\n\r\n static clone(objOrObjs: KritzelBaseObject<any> | KritzelBaseObject<any>[]): any {\r\n const cloneObject = (obj: KritzelBaseObject<any>) => {\r\n const { _store, _elementRef, totalWidth, totalHeight, element, ...remainingProps } = obj as any;\r\n\r\n const clonedProps = structuredClone(remainingProps);\r\n\r\n if (element && element instanceof HTMLElement) {\r\n clonedProps.element = element.cloneNode(true) as HTMLElement;\r\n }\r\n\r\n return clonedProps;\r\n };\r\n\r\n if (Array.isArray(objOrObjs)) {\r\n return objOrObjs.map(cloneObject);\r\n }\r\n\r\n return cloneObject(objOrObjs);\r\n }\r\n\r\n static isEmpty(obj: any): boolean {\r\n if (obj === null || obj === undefined) {\r\n return true;\r\n }\r\n return Object?.keys(obj).length === 0 && obj?.constructor === Object;\r\n }\r\n}\r\n"]}
1
+ {"version":3,"file":"object.helper.js","sourceRoot":"","sources":["../../src/helpers/object.helper.ts"],"names":[],"mappings":";;;;;;;;;;;AAEA,MAAM,OAAO,YAAY;IACvB,MAAM,CAAC,YAAY;QACjB,OAAO,IAAI,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IACjD,CAAC;IAED,MAAM,CAAC,KAAK,CAAC,SAA4D;QACvE,MAAM,WAAW,GAAG,CAAC,GAA2B,EAAE,EAAE;YAClD,MAAM,KAA+E,GAAU,EAAzF,EAAE,MAAM,EAAE,WAAW,EAAE,UAAU,EAAE,WAAW,EAAE,OAAO,OAAkC,EAA7B,cAAc,cAA1E,iEAA4E,CAAa,CAAC;YAEhG,MAAM,WAAW,GAAG,eAAe,CAAC,cAAc,CAAC,CAAC;YAEpD,IAAI,OAAO,IAAI,OAAO,OAAO,KAAK,QAAQ,IAAI,UAAU,IAAI,OAAO,IAAI,OAAO,CAAC,QAAQ,KAAK,CAAC,EAAE,CAAC;gBAC9F,WAAW,CAAC,OAAO,GAAG,OAAO,CAAC,SAAS,CAAC,IAAI,CAAgB,CAAC;YAC/D,CAAC;YAED,OAAO,WAAW,CAAC;QACrB,CAAC,CAAC;QAEF,IAAI,KAAK,CAAC,OAAO,CAAC,SAAS,CAAC,EAAE,CAAC;YAC7B,OAAO,SAAS,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;QACpC,CAAC;QAED,OAAO,WAAW,CAAC,SAAS,CAAC,CAAC;IAChC,CAAC;IAED,MAAM,CAAC,OAAO,CAAC,GAAQ;QACrB,IAAI,GAAG,KAAK,IAAI,IAAI,GAAG,KAAK,SAAS,EAAE,CAAC;YACtC,OAAO,IAAI,CAAC;QACd,CAAC;QACD,OAAO,CAAA,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAE,IAAI,CAAC,GAAG,EAAE,MAAM,MAAK,CAAC,IAAI,CAAA,GAAG,aAAH,GAAG,uBAAH,GAAG,CAAE,WAAW,MAAK,MAAM,CAAC;IACvE,CAAC;CACF","sourcesContent":["import { KritzelBaseObject } from '../classes/objects/base-object.class';\r\n\r\nexport class ObjectHelper {\r\n static generateUUID(): string {\r\n return Math.random().toString(36).substr(2, 9);\r\n }\r\n\r\n static clone(objOrObjs: KritzelBaseObject<any> | KritzelBaseObject<any>[]): any {\r\n const cloneObject = (obj: KritzelBaseObject<any>) => {\r\n const { _store, _elementRef, totalWidth, totalHeight, element, ...remainingProps } = obj as any;\r\n\r\n const clonedProps = structuredClone(remainingProps);\r\n\r\n if (element && typeof element === 'object' && 'nodeType' in element && element.nodeType === 1) {\r\n clonedProps.element = element.cloneNode(true) as HTMLElement;\r\n }\r\n\r\n return clonedProps;\r\n };\r\n\r\n if (Array.isArray(objOrObjs)) {\r\n return objOrObjs.map(cloneObject);\r\n }\r\n\r\n return cloneObject(objOrObjs);\r\n }\r\n\r\n static isEmpty(obj: any): boolean {\r\n if (obj === null || obj === undefined) {\r\n return true;\r\n }\r\n return Object?.keys(obj).length === 0 && obj?.constructor === Object;\r\n }\r\n}\r\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"command.interface.js","sourceRoot":"","sources":["../../src/interfaces/command.interface.ts"],"names":[],"mappings":"","sourcesContent":["export interface KritzelCommand {\r\n initiator: string;\r\n isUndoable: boolean;\r\n execute(): void;\r\n undo?(): void;\r\n}"]}
1
+ {"version":3,"file":"command.interface.js","sourceRoot":"","sources":["../../src/interfaces/command.interface.ts"],"names":[],"mappings":"","sourcesContent":["export interface KritzelCommand {\r\n initiator: string;\r\n skipHistory: boolean;\r\n execute(): void;\r\n undo?(): void;\r\n}"]}
@@ -1 +1 @@
1
- {"version":3,"file":"debug-info.interface.js","sourceRoot":"","sources":["../../src/interfaces/debug-info.interface.ts"],"names":[],"mappings":"","sourcesContent":["export interface KritzelDebugInfo {\r\n showViewportInfo: boolean;\r\n showObjectInfo: boolean;\r\n logCommands: boolean;\r\n}\r\n"]}
1
+ {"version":3,"file":"debug-info.interface.js","sourceRoot":"","sources":["../../src/interfaces/debug-info.interface.ts"],"names":[],"mappings":"","sourcesContent":["export interface KritzelDebugInfo {\r\n showViewportInfo: boolean;\r\n showObjectInfo: boolean;\r\n logCommands: boolean;\r\n logDatabase: boolean;\r\n}\r\n"]}