kritzel-stencil 0.0.130 → 0.0.132

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 (388) hide show
  1. package/dist/cjs/{index-CUSIflVf.js → index-nzUNdMPh.js} +47 -17
  2. package/dist/cjs/index-nzUNdMPh.js.map +1 -0
  3. package/dist/cjs/{index-CfXjPLHb.js → index-ouFX0OVi.js} +891 -802
  4. package/dist/cjs/index-ouFX0OVi.js.map +1 -0
  5. package/dist/cjs/index.cjs.js +2 -1
  6. package/dist/cjs/index.cjs.js.map +1 -1
  7. package/dist/cjs/kritzel-brush-style.cjs.entry.js +32 -0
  8. package/dist/cjs/kritzel-brush-style.entry.cjs.js.map +1 -0
  9. package/dist/cjs/{kritzel-brush-style_23.cjs.entry.js → kritzel-color_22.cjs.entry.js} +1539 -1325
  10. package/dist/cjs/loader.cjs.js +2 -2
  11. package/dist/cjs/stencil.cjs.js +3 -3
  12. package/dist/cjs/stencil.cjs.js.map +1 -1
  13. package/dist/collection/classes/commands/add-object.command.js +7 -7
  14. package/dist/collection/classes/commands/add-object.command.js.map +1 -1
  15. package/dist/collection/classes/commands/add-selection-group.command.js +10 -9
  16. package/dist/collection/classes/commands/add-selection-group.command.js.map +1 -1
  17. package/dist/collection/classes/commands/base.command.js +6 -4
  18. package/dist/collection/classes/commands/base.command.js.map +1 -1
  19. package/dist/collection/classes/commands/batch.command.js +3 -2
  20. package/dist/collection/classes/commands/batch.command.js.map +1 -1
  21. package/dist/collection/classes/commands/move-selection-group.command.js +13 -7
  22. package/dist/collection/classes/commands/move-selection-group.command.js.map +1 -1
  23. package/dist/collection/classes/commands/remove-object.command.js +9 -9
  24. package/dist/collection/classes/commands/remove-object.command.js.map +1 -1
  25. package/dist/collection/classes/commands/remove-selection-group.command.js +8 -7
  26. package/dist/collection/classes/commands/remove-selection-group.command.js.map +1 -1
  27. package/dist/collection/classes/commands/resize-selection-group.command.js +10 -7
  28. package/dist/collection/classes/commands/resize-selection-group.command.js.map +1 -1
  29. package/dist/collection/classes/commands/rotate-selection-group.command.js +15 -12
  30. package/dist/collection/classes/commands/rotate-selection-group.command.js.map +1 -1
  31. package/dist/collection/classes/commands/update-object.command.js +7 -5
  32. package/dist/collection/classes/commands/update-object.command.js.map +1 -1
  33. package/dist/collection/classes/commands/update-viewport.command.js +13 -11
  34. package/dist/collection/classes/commands/update-viewport.command.js.map +1 -1
  35. package/dist/collection/classes/{store.class.js → core/core.class.js} +123 -147
  36. package/dist/collection/classes/core/core.class.js.map +1 -0
  37. package/dist/collection/classes/{database.class.js → core/database.class.js} +34 -25
  38. package/dist/collection/classes/core/database.class.js.map +1 -0
  39. package/dist/collection/classes/core/history.class.js +88 -0
  40. package/dist/collection/classes/core/history.class.js.map +1 -0
  41. package/dist/collection/classes/{reviver.class.js → core/reviver.class.js} +27 -22
  42. package/dist/collection/classes/core/reviver.class.js.map +1 -0
  43. package/dist/collection/classes/core/store.class.js +51 -0
  44. package/dist/collection/classes/core/store.class.js.map +1 -0
  45. package/dist/collection/classes/core/viewport.class.js +165 -0
  46. package/dist/collection/classes/core/viewport.class.js.map +1 -0
  47. package/dist/collection/classes/core/workspace.class.js +42 -0
  48. package/dist/collection/classes/core/workspace.class.js.map +1 -0
  49. package/dist/collection/classes/handlers/base.handler.js +4 -3
  50. package/dist/collection/classes/handlers/base.handler.js.map +1 -1
  51. package/dist/collection/classes/handlers/context-menu.handler.js +26 -21
  52. package/dist/collection/classes/handlers/context-menu.handler.js.map +1 -1
  53. package/dist/collection/classes/handlers/hover.handler.js +5 -5
  54. package/dist/collection/classes/handlers/hover.handler.js.map +1 -1
  55. package/dist/collection/classes/handlers/key.handler.js +38 -44
  56. package/dist/collection/classes/handlers/key.handler.js.map +1 -1
  57. package/dist/collection/classes/handlers/move.handler.js +40 -35
  58. package/dist/collection/classes/handlers/move.handler.js.map +1 -1
  59. package/dist/collection/classes/handlers/resize.handler.js +57 -60
  60. package/dist/collection/classes/handlers/resize.handler.js.map +1 -1
  61. package/dist/collection/classes/handlers/rotation.handler.js +55 -57
  62. package/dist/collection/classes/handlers/rotation.handler.js.map +1 -1
  63. package/dist/collection/classes/handlers/selection.handler.js +78 -75
  64. package/dist/collection/classes/handlers/selection.handler.js.map +1 -1
  65. package/dist/collection/classes/objects/base-object.class.js +49 -31
  66. package/dist/collection/classes/objects/base-object.class.js.map +1 -1
  67. package/dist/collection/classes/objects/custom-element.class.js +6 -5
  68. package/dist/collection/classes/objects/custom-element.class.js.map +1 -1
  69. package/dist/collection/classes/objects/image.class.js +17 -17
  70. package/dist/collection/classes/objects/image.class.js.map +1 -1
  71. package/dist/collection/classes/objects/path.class.js +36 -34
  72. package/dist/collection/classes/objects/path.class.js.map +1 -1
  73. package/dist/collection/classes/objects/selection-box.class.js +6 -9
  74. package/dist/collection/classes/objects/selection-box.class.js.map +1 -1
  75. package/dist/collection/classes/objects/selection-group.class.js +23 -22
  76. package/dist/collection/classes/objects/selection-group.class.js.map +1 -1
  77. package/dist/collection/classes/objects/text.class.js +23 -23
  78. package/dist/collection/classes/objects/text.class.js.map +1 -1
  79. package/dist/collection/classes/registries/icon-registry.class.js +1 -1
  80. package/dist/collection/classes/registries/icon-registry.class.js.map +1 -1
  81. package/dist/collection/classes/registries/tool.registry.js +3 -3
  82. package/dist/collection/classes/registries/tool.registry.js.map +1 -1
  83. package/dist/collection/classes/structures/circular-buffer.structure.js +5 -3
  84. package/dist/collection/classes/structures/circular-buffer.structure.js.map +1 -1
  85. package/dist/collection/classes/structures/object-map.structure.js +1 -0
  86. package/dist/collection/classes/structures/object-map.structure.js.map +1 -1
  87. package/dist/collection/classes/tools/base-tool.class.js +13 -6
  88. package/dist/collection/classes/tools/base-tool.class.js.map +1 -1
  89. package/dist/collection/classes/tools/brush-tool.class.js +64 -60
  90. package/dist/collection/classes/tools/brush-tool.class.js.map +1 -1
  91. package/dist/collection/classes/tools/eraser-tool.class.js +27 -28
  92. package/dist/collection/classes/tools/eraser-tool.class.js.map +1 -1
  93. package/dist/collection/classes/tools/image-tool.class.js +14 -15
  94. package/dist/collection/classes/tools/image-tool.class.js.map +1 -1
  95. package/dist/collection/classes/tools/selection-tool.class.js +48 -43
  96. package/dist/collection/classes/tools/selection-tool.class.js.map +1 -1
  97. package/dist/collection/classes/tools/text-tool.class.js +57 -58
  98. package/dist/collection/classes/tools/text-tool.class.js.map +1 -1
  99. package/dist/collection/collection-manifest.json +1 -1
  100. package/dist/collection/components/core/kritzel-cursor-trail/kritzel-cursor-trail.js +30 -30
  101. package/dist/collection/components/core/kritzel-cursor-trail/kritzel-cursor-trail.js.map +1 -1
  102. package/dist/collection/components/core/kritzel-editor/kritzel-editor.css +7 -9
  103. package/dist/collection/components/core/kritzel-editor/kritzel-editor.js +267 -93
  104. package/dist/collection/components/core/kritzel-editor/kritzel-editor.js.map +1 -1
  105. package/dist/collection/components/core/kritzel-engine/kritzel-engine.js +319 -327
  106. package/dist/collection/components/core/kritzel-engine/kritzel-engine.js.map +1 -1
  107. package/dist/collection/components/shared/kritzel-brush-style/kritzel-brush-style.js +7 -8
  108. package/dist/collection/components/shared/kritzel-brush-style/kritzel-brush-style.js.map +1 -1
  109. package/dist/collection/components/shared/kritzel-color/kritzel-color.js +4 -5
  110. package/dist/collection/components/shared/kritzel-color/kritzel-color.js.map +1 -1
  111. package/dist/collection/components/shared/kritzel-color-palette/kritzel-color-palette.css +5 -0
  112. package/dist/collection/components/shared/kritzel-color-palette/kritzel-color-palette.js +8 -9
  113. package/dist/collection/components/shared/kritzel-color-palette/kritzel-color-palette.js.map +1 -1
  114. package/dist/collection/components/shared/kritzel-dropdown/kritzel-dropdown.js +53 -49
  115. package/dist/collection/components/shared/kritzel-dropdown/kritzel-dropdown.js.map +1 -1
  116. package/dist/collection/components/shared/kritzel-font/kritzel-font.js +4 -6
  117. package/dist/collection/components/shared/kritzel-font/kritzel-font.js.map +1 -1
  118. package/dist/collection/components/shared/kritzel-font-family/kritzel-font-family.js +18 -18
  119. package/dist/collection/components/shared/kritzel-font-family/kritzel-font-family.js.map +1 -1
  120. package/dist/collection/components/shared/kritzel-font-size/kritzel-font-size.js +5 -6
  121. package/dist/collection/components/shared/kritzel-font-size/kritzel-font-size.js.map +1 -1
  122. package/dist/collection/components/shared/kritzel-icon/kritzel-icon.css +1 -0
  123. package/dist/collection/components/shared/kritzel-icon/kritzel-icon.js +3 -3
  124. package/dist/collection/components/shared/kritzel-icon/kritzel-icon.js.map +1 -1
  125. package/dist/collection/components/shared/kritzel-menu/kritzel-menu.css +6 -2
  126. package/dist/collection/components/shared/kritzel-menu/kritzel-menu.js +36 -30
  127. package/dist/collection/components/shared/kritzel-menu/kritzel-menu.js.map +1 -1
  128. package/dist/collection/components/shared/kritzel-menu-item/kritzel-menu-item.css +25 -7
  129. package/dist/collection/components/shared/kritzel-menu-item/kritzel-menu-item.js +61 -40
  130. package/dist/collection/components/shared/kritzel-menu-item/kritzel-menu-item.js.map +1 -1
  131. package/dist/collection/components/shared/kritzel-portal/kritzel-portal.js +22 -61
  132. package/dist/collection/components/shared/kritzel-portal/kritzel-portal.js.map +1 -1
  133. package/dist/collection/components/shared/kritzel-split-button/kritzel-split-button.css +16 -20
  134. package/dist/collection/components/shared/kritzel-split-button/kritzel-split-button.js +104 -53
  135. package/dist/collection/components/shared/kritzel-split-button/kritzel-split-button.js.map +1 -1
  136. package/dist/collection/components/shared/kritzel-stroke-size/kritzel-stroke-size.css +4 -0
  137. package/dist/collection/components/shared/kritzel-stroke-size/kritzel-stroke-size.js +4 -5
  138. package/dist/collection/components/shared/kritzel-stroke-size/kritzel-stroke-size.js.map +1 -1
  139. package/dist/collection/components/shared/kritzel-tooltip/kritzel-tooltip.js +85 -14
  140. package/dist/collection/components/shared/kritzel-tooltip/kritzel-tooltip.js.map +1 -1
  141. package/dist/collection/components/ui/kritzel-context-menu/kritzel-context-menu.js +50 -16
  142. package/dist/collection/components/ui/kritzel-context-menu/kritzel-context-menu.js.map +1 -1
  143. package/dist/collection/components/ui/kritzel-control-brush-config/kritzel-control-brush-config.css +4 -0
  144. package/dist/collection/components/ui/kritzel-control-brush-config/kritzel-control-brush-config.js +7 -7
  145. package/dist/collection/components/ui/kritzel-control-brush-config/kritzel-control-brush-config.js.map +1 -1
  146. package/dist/collection/components/ui/kritzel-control-text-config/kritzel-control-text-config.js +5 -5
  147. package/dist/collection/components/ui/kritzel-control-text-config/kritzel-control-text-config.js.map +1 -1
  148. package/dist/collection/components/ui/kritzel-controls/kritzel-controls.css +12 -1
  149. package/dist/collection/components/ui/kritzel-controls/kritzel-controls.js +41 -32
  150. package/dist/collection/components/ui/kritzel-controls/kritzel-controls.js.map +1 -1
  151. package/dist/collection/components/ui/kritzel-utility-panel/kritzel-utility-panel.css +5 -0
  152. package/dist/collection/components/ui/kritzel-utility-panel/kritzel-utility-panel.js +4 -1
  153. package/dist/collection/components/ui/kritzel-utility-panel/kritzel-utility-panel.js.map +1 -1
  154. package/dist/collection/components/ui/kritzel-workspace-manager/kritzel-workspace-manager.js +40 -28
  155. package/dist/collection/components/ui/kritzel-workspace-manager/kritzel-workspace-manager.js.map +1 -1
  156. package/dist/collection/configs/default-engine-state.js +0 -1
  157. package/dist/collection/configs/default-engine-state.js.map +1 -1
  158. package/dist/collection/helpers/devices.helper.js +20 -0
  159. package/dist/collection/helpers/devices.helper.js.map +1 -1
  160. package/dist/collection/helpers/event.helper.js +2 -6
  161. package/dist/collection/helpers/event.helper.js.map +1 -1
  162. package/dist/collection/helpers/html.helper.js +30 -2
  163. package/dist/collection/helpers/html.helper.js.map +1 -1
  164. package/dist/collection/helpers/object.helper.js +2 -14
  165. package/dist/collection/helpers/object.helper.js.map +1 -1
  166. package/dist/collection/index.js +1 -0
  167. package/dist/collection/index.js.map +1 -1
  168. package/dist/collection/interfaces/engine-state.interface.js.map +1 -1
  169. package/dist/collection/interfaces/serializable.interface.js.map +1 -1
  170. package/dist/collection/types/deep-readonly.type.js +2 -0
  171. package/dist/collection/types/deep-readonly.type.js.map +1 -0
  172. package/dist/components/index.js +4 -3
  173. package/dist/components/index.js.map +1 -1
  174. package/dist/components/kritzel-brush-style.js +59 -1
  175. package/dist/components/kritzel-brush-style.js.map +1 -1
  176. package/dist/components/kritzel-color-palette.js +1 -1
  177. package/dist/components/kritzel-color.js +1 -1
  178. package/dist/components/kritzel-context-menu.js +1 -1
  179. package/dist/components/kritzel-control-brush-config.js +1 -1
  180. package/dist/components/kritzel-control-text-config.js +1 -1
  181. package/dist/components/kritzel-controls.js +1 -1
  182. package/dist/components/kritzel-cursor-trail.js +1 -1
  183. package/dist/components/kritzel-dropdown.js +1 -1
  184. package/dist/components/kritzel-editor.js +172 -124
  185. package/dist/components/kritzel-editor.js.map +1 -1
  186. package/dist/components/kritzel-engine.js +1 -1
  187. package/dist/components/kritzel-font-family.js +1 -1
  188. package/dist/components/kritzel-font-size.js +1 -1
  189. package/dist/components/kritzel-font.js +1 -1
  190. package/dist/components/kritzel-icon.js +1 -1
  191. package/dist/components/kritzel-menu-item.js +1 -1
  192. package/dist/components/kritzel-menu.js +1 -1
  193. package/dist/components/kritzel-portal.js +1 -1
  194. package/dist/components/kritzel-split-button.js +1 -1
  195. package/dist/components/kritzel-stroke-size.js +1 -1
  196. package/dist/components/kritzel-tooltip.js +1 -1
  197. package/dist/components/kritzel-utility-panel.js +1 -1
  198. package/dist/components/kritzel-workspace-manager.js +1 -1
  199. package/dist/components/{p-BGccckxP.js → p-0iJh9Z6m.js} +9 -8
  200. package/dist/components/p-0iJh9Z6m.js.map +1 -0
  201. package/dist/components/{p-C9-70hiF.js → p-B3VQubt_.js} +268 -236
  202. package/dist/components/p-B3VQubt_.js.map +1 -0
  203. package/dist/components/{p-5CJxFNEE.js → p-B7kZ1_RH.js} +7 -6
  204. package/dist/components/p-B7kZ1_RH.js.map +1 -0
  205. package/dist/components/{p-Cb1IUD_g.js → p-B7w19kIk.js} +17 -27
  206. package/dist/components/p-B7w19kIk.js.map +1 -0
  207. package/dist/components/{p-BU2q3PRS.js → p-BGdsAz54.js} +31 -19
  208. package/dist/components/p-BGdsAz54.js.map +1 -0
  209. package/dist/components/{p-BZ-j_4CK.js → p-BM9IjvnD.js} +7 -7
  210. package/dist/components/p-BM9IjvnD.js.map +1 -0
  211. package/dist/components/{p-26poIWa_.js → p-BPsQrpzN.js} +47 -18
  212. package/dist/components/p-BPsQrpzN.js.map +1 -0
  213. package/dist/components/{p-BqrTPNyu.js → p-BYanlgdq.js} +41 -15
  214. package/dist/components/p-BYanlgdq.js.map +1 -0
  215. package/dist/components/{p-D_Uh-xv_.js → p-BiCgeOiJ.js} +60 -56
  216. package/dist/components/p-BiCgeOiJ.js.map +1 -0
  217. package/dist/components/{p-BcQWRzsB.js → p-C1-nvBx9.js} +42 -29
  218. package/dist/components/p-C1-nvBx9.js.map +1 -0
  219. package/dist/components/p-C6qB08BS.js +68 -0
  220. package/dist/components/p-C6qB08BS.js.map +1 -0
  221. package/dist/components/{p-jpGLgpoq.js → p-CTvJDYFQ.js} +26 -64
  222. package/dist/components/p-CTvJDYFQ.js.map +1 -0
  223. package/dist/components/{p-BAPUTr3K.js → p-CsyM5q2M.js} +13 -12
  224. package/dist/components/p-CsyM5q2M.js.map +1 -0
  225. package/dist/components/p-CvmWmUK9.js +149 -0
  226. package/dist/components/p-CvmWmUK9.js.map +1 -0
  227. package/dist/components/{p-fyfT6A5K.js → p-DCx3703u.js} +9 -6
  228. package/dist/components/p-DCx3703u.js.map +1 -0
  229. package/dist/components/{p-BvlGgLAQ.js → p-DFO-6kuA.js} +57 -51
  230. package/dist/components/p-DFO-6kuA.js.map +1 -0
  231. package/dist/components/p-D_907-Wd.js +267 -0
  232. package/dist/components/p-D_907-Wd.js.map +1 -0
  233. package/dist/components/{p-jGaWxggY.js → p-Davd1R_4.js} +1278 -1227
  234. package/dist/components/p-Davd1R_4.js.map +1 -0
  235. package/dist/components/{p-DtmZW6eP.js → p-Db3kxVe2.js} +27 -25
  236. package/dist/components/p-Db3kxVe2.js.map +1 -0
  237. package/dist/components/{p-_ntxNi8v.js → p-Ddlbt3Bj.js} +22 -20
  238. package/dist/components/p-Ddlbt3Bj.js.map +1 -0
  239. package/dist/components/{p-Crni2OI4.js → p-DjU7p3od.js} +15 -13
  240. package/dist/components/p-DjU7p3od.js.map +1 -0
  241. package/dist/components/p-EXPChOF6.js +30 -0
  242. package/dist/components/p-EXPChOF6.js.map +1 -0
  243. package/dist/components/p-YqK8ch2R.js +46 -0
  244. package/dist/components/p-YqK8ch2R.js.map +1 -0
  245. package/dist/components/p-l10It7Nm.js +30 -0
  246. package/dist/components/p-l10It7Nm.js.map +1 -0
  247. package/dist/components/{p-BLmFBe2a.js → p-sq9jgfX0.js} +8 -6
  248. package/dist/components/p-sq9jgfX0.js.map +1 -0
  249. package/dist/components/{p-BcQTDgzV.js → p-sreNwi0N.js} +9 -8
  250. package/dist/components/p-sreNwi0N.js.map +1 -0
  251. package/dist/esm/{index-DqqxAoZI.js → index-C_uHp-ur.js} +891 -803
  252. package/dist/esm/index-C_uHp-ur.js.map +1 -0
  253. package/dist/esm/{index-NiIEUDzj.js → index-oCOlsFCN.js} +47 -17
  254. package/dist/esm/index-oCOlsFCN.js.map +1 -0
  255. package/dist/esm/index.js +1 -1
  256. package/dist/esm/kritzel-brush-style.entry.js +30 -0
  257. package/dist/esm/kritzel-brush-style.entry.js.map +1 -0
  258. package/dist/esm/{kritzel-brush-style_23.entry.js → kritzel-color_22.entry.js} +1538 -1323
  259. package/dist/esm/loader.js +3 -3
  260. package/dist/esm/stencil.js +4 -4
  261. package/dist/esm/stencil.js.map +1 -1
  262. package/dist/stencil/index.esm.js +1 -1
  263. package/dist/stencil/kritzel-brush-style.entry.esm.js.map +1 -0
  264. package/dist/stencil/p-25d1e040.entry.js +2 -0
  265. package/dist/stencil/p-25d1e040.entry.js.map +1 -0
  266. package/dist/stencil/p-C_uHp-ur.js +2 -0
  267. package/dist/stencil/p-C_uHp-ur.js.map +1 -0
  268. package/dist/stencil/p-a6f8283e.entry.js +2 -0
  269. package/dist/stencil/p-a6f8283e.entry.js.map +1 -0
  270. package/dist/stencil/p-oCOlsFCN.js +3 -0
  271. package/dist/stencil/p-oCOlsFCN.js.map +1 -0
  272. package/dist/stencil/stencil.esm.js +1 -1
  273. package/dist/stencil/stencil.esm.js.map +1 -1
  274. package/dist/types/classes/commands/add-object.command.d.ts +2 -2
  275. package/dist/types/classes/commands/add-selection-group.command.d.ts +2 -1
  276. package/dist/types/classes/commands/base.command.d.ts +3 -3
  277. package/dist/types/classes/commands/batch.command.d.ts +2 -1
  278. package/dist/types/classes/commands/move-selection-group.command.d.ts +2 -1
  279. package/dist/types/classes/commands/remove-object.command.d.ts +2 -2
  280. package/dist/types/classes/commands/remove-selection-group.command.d.ts +2 -2
  281. package/dist/types/classes/commands/resize-selection-group.command.d.ts +2 -1
  282. package/dist/types/classes/commands/rotate-selection-group.command.d.ts +2 -1
  283. package/dist/types/classes/commands/update-object.command.d.ts +2 -2
  284. package/dist/types/classes/commands/update-viewport.command.d.ts +2 -1
  285. package/dist/types/classes/{store.class.d.ts → core/core.class.d.ts} +9 -19
  286. package/dist/types/classes/{database.class.d.ts → core/database.class.d.ts} +3 -2
  287. package/dist/types/classes/{history.class.d.ts → core/history.class.d.ts} +5 -5
  288. package/dist/types/classes/core/reviver.class.d.ts +6 -0
  289. package/dist/types/classes/core/store.class.d.ts +17 -0
  290. package/dist/types/classes/{viewport.class.d.ts → core/viewport.class.d.ts} +3 -3
  291. package/dist/types/classes/core/workspace.class.d.ts +24 -0
  292. package/dist/types/classes/handlers/base.handler.d.ts +3 -3
  293. package/dist/types/classes/handlers/context-menu.handler.d.ts +2 -2
  294. package/dist/types/classes/handlers/hover.handler.d.ts +2 -2
  295. package/dist/types/classes/handlers/key.handler.d.ts +2 -2
  296. package/dist/types/classes/handlers/move.handler.d.ts +2 -2
  297. package/dist/types/classes/handlers/resize.handler.d.ts +2 -2
  298. package/dist/types/classes/handlers/rotation.handler.d.ts +2 -2
  299. package/dist/types/classes/handlers/selection.handler.d.ts +2 -2
  300. package/dist/types/classes/objects/base-object.class.d.ts +5 -4
  301. package/dist/types/classes/objects/custom-element.class.d.ts +2 -2
  302. package/dist/types/classes/objects/image.class.d.ts +2 -2
  303. package/dist/types/classes/objects/path.class.d.ts +2 -4
  304. package/dist/types/classes/objects/selection-box.class.d.ts +2 -2
  305. package/dist/types/classes/objects/selection-group.class.d.ts +2 -2
  306. package/dist/types/classes/objects/text.class.d.ts +2 -2
  307. package/dist/types/classes/registries/tool.registry.d.ts +2 -2
  308. package/dist/types/classes/tools/base-tool.class.d.ts +8 -4
  309. package/dist/types/classes/tools/brush-tool.class.d.ts +2 -2
  310. package/dist/types/classes/tools/eraser-tool.class.d.ts +2 -2
  311. package/dist/types/classes/tools/image-tool.class.d.ts +2 -2
  312. package/dist/types/classes/tools/selection-tool.class.d.ts +2 -2
  313. package/dist/types/classes/tools/text-tool.class.d.ts +2 -2
  314. package/dist/types/components/core/kritzel-cursor-trail/kritzel-cursor-trail.d.ts +5 -5
  315. package/dist/types/components/core/kritzel-editor/kritzel-editor.d.ts +13 -3
  316. package/dist/types/components/core/kritzel-engine/kritzel-engine.d.ts +21 -22
  317. package/dist/types/components/shared/kritzel-dropdown/kritzel-dropdown.d.ts +2 -2
  318. package/dist/types/components/shared/kritzel-menu-item/kritzel-menu-item.d.ts +2 -0
  319. package/dist/types/components/shared/kritzel-portal/kritzel-portal.d.ts +0 -1
  320. package/dist/types/components/shared/kritzel-split-button/kritzel-split-button.d.ts +4 -2
  321. package/dist/types/components/shared/kritzel-tooltip/kritzel-tooltip.d.ts +8 -2
  322. package/dist/types/components/ui/kritzel-context-menu/kritzel-context-menu.d.ts +5 -3
  323. package/dist/types/components/ui/kritzel-control-brush-config/kritzel-control-brush-config.d.ts +1 -1
  324. package/dist/types/components/ui/kritzel-controls/kritzel-controls.d.ts +3 -1
  325. package/dist/types/components/ui/kritzel-workspace-manager/kritzel-workspace-manager.d.ts +3 -2
  326. package/dist/types/components.d.ts +41 -12
  327. package/dist/types/helpers/devices.helper.d.ts +4 -0
  328. package/dist/types/helpers/event.helper.d.ts +1 -1
  329. package/dist/types/helpers/html.helper.d.ts +1 -0
  330. package/dist/types/index.d.ts +1 -0
  331. package/dist/types/interfaces/engine-state.interface.d.ts +1 -2
  332. package/dist/types/interfaces/serializable.interface.d.ts +2 -1
  333. package/dist/types/stencil-public-runtime.d.ts +6 -4
  334. package/dist/types/types/deep-readonly.type.d.ts +7 -0
  335. package/package.json +64 -63
  336. package/dist/cjs/index-CUSIflVf.js.map +0 -1
  337. package/dist/cjs/index-CfXjPLHb.js.map +0 -1
  338. package/dist/collection/classes/database.class.js.map +0 -1
  339. package/dist/collection/classes/history.class.js +0 -84
  340. package/dist/collection/classes/history.class.js.map +0 -1
  341. package/dist/collection/classes/reviver.class.js.map +0 -1
  342. package/dist/collection/classes/store.class.js.map +0 -1
  343. package/dist/collection/classes/viewport.class.js +0 -152
  344. package/dist/collection/classes/viewport.class.js.map +0 -1
  345. package/dist/collection/classes/workspace.class.js +0 -10
  346. package/dist/collection/classes/workspace.class.js.map +0 -1
  347. package/dist/components/p-26poIWa_.js.map +0 -1
  348. package/dist/components/p-5CJxFNEE.js.map +0 -1
  349. package/dist/components/p-BAPUTr3K.js.map +0 -1
  350. package/dist/components/p-BGccckxP.js.map +0 -1
  351. package/dist/components/p-BLmFBe2a.js.map +0 -1
  352. package/dist/components/p-BU2q3PRS.js.map +0 -1
  353. package/dist/components/p-BZ-j_4CK.js.map +0 -1
  354. package/dist/components/p-Bb6od8He.js +0 -42
  355. package/dist/components/p-Bb6od8He.js.map +0 -1
  356. package/dist/components/p-BcQTDgzV.js.map +0 -1
  357. package/dist/components/p-BcQWRzsB.js.map +0 -1
  358. package/dist/components/p-BeVv4o5c.js +0 -14
  359. package/dist/components/p-BeVv4o5c.js.map +0 -1
  360. package/dist/components/p-BqrTPNyu.js.map +0 -1
  361. package/dist/components/p-BvlGgLAQ.js.map +0 -1
  362. package/dist/components/p-C-DqsDXz.js +0 -238
  363. package/dist/components/p-C-DqsDXz.js.map +0 -1
  364. package/dist/components/p-C9-70hiF.js.map +0 -1
  365. package/dist/components/p-CJKA5zIE.js +0 -10
  366. package/dist/components/p-CJKA5zIE.js.map +0 -1
  367. package/dist/components/p-CaPdvVd4.js +0 -127
  368. package/dist/components/p-CaPdvVd4.js.map +0 -1
  369. package/dist/components/p-Cb1IUD_g.js.map +0 -1
  370. package/dist/components/p-Crni2OI4.js.map +0 -1
  371. package/dist/components/p-D_Uh-xv_.js.map +0 -1
  372. package/dist/components/p-DtmZW6eP.js.map +0 -1
  373. package/dist/components/p-V4ui5aWj.js +0 -63
  374. package/dist/components/p-V4ui5aWj.js.map +0 -1
  375. package/dist/components/p-_ntxNi8v.js.map +0 -1
  376. package/dist/components/p-fyfT6A5K.js.map +0 -1
  377. package/dist/components/p-jGaWxggY.js.map +0 -1
  378. package/dist/components/p-jpGLgpoq.js.map +0 -1
  379. package/dist/esm/index-DqqxAoZI.js.map +0 -1
  380. package/dist/esm/index-NiIEUDzj.js.map +0 -1
  381. package/dist/stencil/p-DqqxAoZI.js +0 -2
  382. package/dist/stencil/p-DqqxAoZI.js.map +0 -1
  383. package/dist/stencil/p-NiIEUDzj.js +0 -3
  384. package/dist/stencil/p-NiIEUDzj.js.map +0 -1
  385. package/dist/stencil/p-eebdbf65.entry.js +0 -2
  386. package/dist/stencil/p-eebdbf65.entry.js.map +0 -1
  387. package/dist/types/classes/reviver.class.d.ts +0 -6
  388. package/dist/types/classes/workspace.class.d.ts +0 -16
@@ -1,60 +1,79 @@
1
1
  import { h, Host } from "@stencil/core";
2
2
  import { KritzelDevicesHelper } from "../../../helpers/devices.helper";
3
3
  export class KritzelSplitButton {
4
- constructor() {
5
- this.buttonIcon = 'plus';
6
- this.dropdownIcon = 'chevron-down';
7
- this.items = [];
8
- this.mainButtonDisabled = false;
9
- this.menuButtonDisabled = false;
10
- this.isMenuOpen = false;
11
- this.isTouchDevice = KritzelDevicesHelper.isTouchDevice();
12
- this.handleButtonClick = (event) => {
13
- event.stopPropagation();
14
- this.buttonClick.emit();
15
- };
16
- this.toggleMenu = (event) => {
17
- event.stopPropagation();
18
- if (this.isMenuOpen) {
19
- this.closeMenu();
20
- }
21
- else {
22
- this.openMenu(event);
23
- }
24
- };
25
- this.openMenu = (event) => {
26
- event.stopPropagation();
27
- this.isMenuOpen = true;
28
- this.anchorElement = this.host;
29
- };
30
- this.closeMenu = () => {
31
- this.isMenuOpen = false;
32
- this.anchorElement = null;
33
- this.close.emit();
34
- };
35
- this.handleItemSelect = event => {
36
- this.itemSelect.emit(event.detail);
37
- };
38
- this.handleItemSave = event => {
39
- this.itemSave.emit(event.detail);
40
- };
41
- this.handleItemCancel = event => {
42
- this.itemCancel.emit(event.detail);
43
- };
44
- this.handleItemToggleChildMenu = event => {
45
- this.itemToggleChildMenu.emit(event.detail);
46
- };
47
- this.handleItemCloseChildMenu = event => {
48
- this.itemCloseChildMenu.emit(event.detail);
49
- };
50
- }
4
+ host;
5
+ buttonIcon = 'plus';
6
+ dropdownIcon = 'chevron-down';
7
+ items = [];
8
+ mainButtonDisabled = false;
9
+ menuButtonDisabled = false;
10
+ mainButtonClick;
11
+ itemSelect;
12
+ itemSave;
13
+ itemCancel;
14
+ itemToggleChildMenu;
15
+ itemCloseChildMenu;
16
+ menuOpen;
17
+ menuClose;
18
+ isMenuOpen = false;
19
+ isTouchDevice = KritzelDevicesHelper.isTouchDevice();
20
+ anchorElement;
21
+ splitMenuButtonRef;
22
+ menuRef;
51
23
  async open() {
52
24
  if (this.isMenuOpen)
53
25
  return;
54
- this.openMenu(new MouseEvent('click'));
26
+ this.isMenuOpen = true;
27
+ this.anchorElement = this.host;
28
+ this.menuOpen.emit();
29
+ }
30
+ async focusMenu() {
31
+ if (this.menuRef) {
32
+ await this.menuRef.setFocus();
33
+ }
55
34
  }
35
+ handleButtonClick = (event) => {
36
+ event.stopPropagation();
37
+ this.mainButtonClick.emit();
38
+ };
39
+ toggleMenu = (event) => {
40
+ event.stopPropagation();
41
+ if (this.isMenuOpen) {
42
+ this.closeMenu();
43
+ }
44
+ else {
45
+ this.openMenu(event);
46
+ }
47
+ };
48
+ openMenu = (event) => {
49
+ event.stopPropagation();
50
+ this.isMenuOpen = true;
51
+ this.anchorElement = this.host;
52
+ this.menuOpen.emit();
53
+ };
54
+ closeMenu = () => {
55
+ this.isMenuOpen = false;
56
+ this.anchorElement = null;
57
+ this.splitMenuButtonRef?.blur();
58
+ this.menuClose.emit();
59
+ };
60
+ handleItemSelect = event => {
61
+ this.itemSelect.emit(event.detail);
62
+ };
63
+ handleItemSave = event => {
64
+ this.itemSave.emit(event.detail);
65
+ };
66
+ handleItemCancel = event => {
67
+ this.itemCancel.emit(event.detail);
68
+ };
69
+ handleItemToggleChildMenu = event => {
70
+ this.itemToggleChildMenu.emit(event.detail);
71
+ };
72
+ handleItemCloseChildMenu = event => {
73
+ this.itemCloseChildMenu.emit(event.detail);
74
+ };
56
75
  render() {
57
- return (h(Host, { key: 'be79d702d2c400d1feedeb89eca6fc78559f30f3', class: { mobile: this.isTouchDevice } }, h("button", { key: 'e4a74c56c122ea617f44f1d7e31672d1f913de46', class: "split-main-button", tabIndex: 0, onClick: this.handleButtonClick, disabled: this.mainButtonDisabled }, this.buttonIcon && h("kritzel-icon", { key: '44bd79270e7cc4a17b45133b5c513642013e5a66', name: this.buttonIcon })), h("div", { key: '2392e8c6f75510c529585a69c861b2fcafdef5ce', class: "split-divider" }), h("button", { key: 'bcdf61c2a195271771479de385db3b4982f6cad2', ref: el => (this.splitMenuButtonRef = el), class: "split-menu-button", tabIndex: 0, onClick: this.toggleMenu, disabled: this.menuButtonDisabled }, h("kritzel-icon", { key: '90383a8690111c97054fb8ac93b91cb6644de137', name: this.dropdownIcon })), h("kritzel-portal", { key: 'c6a4c32ab731fede13e1382bff9dbd68794b1103', anchor: this.anchorElement, offsetY: 4, onClose: this.closeMenu }, h("kritzel-menu", { key: '8b792c9a2d4af60ba464bb80551c5358e21bfa96', ref: el => (this.menuRef = el), items: this.items, onItemSelect: this.handleItemSelect, onItemSave: this.handleItemSave, onItemCancel: this.handleItemCancel, onItemToggleChildMenu: this.handleItemToggleChildMenu, onItemCloseChildMenu: this.handleItemCloseChildMenu, onClose: this.closeMenu }))));
76
+ return (h(Host, { key: '2521559224e78ed1984446320a1601e77ccf2843', class: { mobile: this.isTouchDevice } }, h("button", { key: 'a924ad4590506cb5209ef9fa1babca5312ec0513', class: "split-main-button", tabIndex: 0, onClick: this.handleButtonClick, disabled: this.mainButtonDisabled }, this.buttonIcon && h("kritzel-icon", { key: '214565d158d4d3c06ad883559aa7bac2827a593f', name: this.buttonIcon })), h("div", { key: '2f7d189c46c08227c3006d226a0ee3065f241bf4', class: "split-divider" }), h("button", { key: '4d6e2e224e3719fe3685ee289af94680c120abf6', ref: el => (this.splitMenuButtonRef = el), class: "split-menu-button", tabIndex: 0, onClick: this.toggleMenu, disabled: this.menuButtonDisabled }, h("kritzel-icon", { key: 'bc8176681dfedde9d13b9af561d8bdff8613098f', name: this.dropdownIcon })), h("kritzel-portal", { key: 'afb44cd208f52350cbc82e050d6dee0ba734391d', anchor: this.anchorElement, offsetY: 4, onClose: this.closeMenu }, h("kritzel-menu", { key: 'b28f04138daa8777e6c9b2aa7fa3b5f2f62fd914', ref: el => (this.menuRef = el), items: this.items, onItemSelect: this.handleItemSelect, onItemSave: this.handleItemSave, onItemCancel: this.handleItemCancel, onItemToggleChildMenu: this.handleItemToggleChildMenu, onItemCloseChildMenu: this.handleItemCloseChildMenu, onClose: this.closeMenu }))));
58
77
  }
59
78
  static get is() { return "kritzel-split-button"; }
60
79
  static get encapsulation() { return "shadow"; }
@@ -186,8 +205,8 @@ export class KritzelSplitButton {
186
205
  }
187
206
  static get events() {
188
207
  return [{
189
- "method": "buttonClick",
190
- "name": "buttonClick",
208
+ "method": "mainButtonClick",
209
+ "name": "mainButtonClick",
191
210
  "bubbles": true,
192
211
  "cancelable": true,
193
212
  "composed": true,
@@ -306,8 +325,23 @@ export class KritzelSplitButton {
306
325
  }
307
326
  }
308
327
  }, {
309
- "method": "close",
310
- "name": "close",
328
+ "method": "menuOpen",
329
+ "name": "menuOpen",
330
+ "bubbles": true,
331
+ "cancelable": true,
332
+ "composed": true,
333
+ "docs": {
334
+ "tags": [],
335
+ "text": ""
336
+ },
337
+ "complexType": {
338
+ "original": "void",
339
+ "resolved": "void",
340
+ "references": {}
341
+ }
342
+ }, {
343
+ "method": "menuClose",
344
+ "name": "menuClose",
311
345
  "bubbles": true,
312
346
  "cancelable": true,
313
347
  "composed": true,
@@ -340,6 +374,23 @@ export class KritzelSplitButton {
340
374
  "text": "",
341
375
  "tags": []
342
376
  }
377
+ },
378
+ "focusMenu": {
379
+ "complexType": {
380
+ "signature": "() => Promise<void>",
381
+ "parameters": [],
382
+ "references": {
383
+ "Promise": {
384
+ "location": "global",
385
+ "id": "global::Promise"
386
+ }
387
+ },
388
+ "return": "Promise<void>"
389
+ },
390
+ "docs": {
391
+ "text": "",
392
+ "tags": []
393
+ }
343
394
  }
344
395
  };
345
396
  }
@@ -1 +1 @@
1
- {"version":3,"file":"kritzel-split-button.js","sourceRoot":"","sources":["../../../../src/components/shared/kritzel-split-button/kritzel-split-button.tsx"],"names":[],"mappings":"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","sourcesContent":["import { Component, h, Prop, State, Event, EventEmitter, Host, Element, Method } from '@stencil/core';\r\nimport { KritzelDevicesHelper } from '../../../helpers/devices.helper';\r\nimport { IKritzelMenuItem, IKritzelMenuItemSelectEvent, IKritzelMenuItemToggleChildMenuEvent } from '../../../interfaces/menu-item.interface';\r\n\r\n@Component({\r\n tag: 'kritzel-split-button',\r\n styleUrl: 'kritzel-split-button.css',\r\n shadow: true,\r\n})\r\nexport class KritzelSplitButton {\r\n @Element() host!: HTMLElement;\r\n\r\n @Prop() buttonIcon: string = 'plus';\r\n @Prop() dropdownIcon: string = 'chevron-down';\r\n @Prop() items: IKritzelMenuItem[] = [];\r\n @Prop() mainButtonDisabled = false;\r\n @Prop() menuButtonDisabled = false;\r\n\r\n @Event() buttonClick: EventEmitter<void>;\r\n @Event() itemSelect: EventEmitter<IKritzelMenuItemSelectEvent>;\r\n @Event() itemSave: EventEmitter<IKritzelMenuItem>;\r\n @Event() itemCancel: EventEmitter<IKritzelMenuItem>;\r\n @Event() itemToggleChildMenu: EventEmitter<IKritzelMenuItemToggleChildMenuEvent>;\r\n @Event() itemCloseChildMenu: EventEmitter<IKritzelMenuItem>;\r\n @Event() close: EventEmitter<void>;\r\n\r\n @State() isMenuOpen = false;\r\n @State() isTouchDevice: boolean = KritzelDevicesHelper.isTouchDevice();\r\n @State() anchorElement: HTMLElement;\r\n\r\n splitMenuButtonRef: HTMLButtonElement;\r\n menuRef: HTMLKritzelMenuElement;\r\n\r\n @Method()\r\n async open() {\r\n if (this.isMenuOpen) return;\r\n this.openMenu(new MouseEvent('click'));\r\n }\r\n\r\n private handleButtonClick = (event: MouseEvent) => {\r\n event.stopPropagation();\r\n this.buttonClick.emit();\r\n };\r\n\r\n private toggleMenu = (event: MouseEvent) => {\r\n event.stopPropagation();\r\n if (this.isMenuOpen) {\r\n this.closeMenu();\r\n } else {\r\n this.openMenu(event);\r\n }\r\n };\r\n\r\n private openMenu = (event: MouseEvent) => {\r\n event.stopPropagation();\r\n this.isMenuOpen = true;\r\n this.anchorElement = this.host;\r\n };\r\n\r\n private closeMenu = () => {\r\n this.isMenuOpen = false;\r\n this.anchorElement = null;\r\n this.close.emit();\r\n };\r\n\r\n private handleItemSelect = event => {\r\n this.itemSelect.emit(event.detail);\r\n };\r\n\r\n private handleItemSave = event => {\r\n this.itemSave.emit(event.detail);\r\n };\r\n\r\n private handleItemCancel = event => {\r\n this.itemCancel.emit(event.detail);\r\n };\r\n\r\n private handleItemToggleChildMenu = event => {\r\n this.itemToggleChildMenu.emit(event.detail);\r\n };\r\n\r\n private handleItemCloseChildMenu = event => {\r\n this.itemCloseChildMenu.emit(event.detail);\r\n };\r\n\r\n render() {\r\n return (\r\n <Host class={{ mobile: this.isTouchDevice }}>\r\n <button class=\"split-main-button\" tabIndex={0} onClick={this.handleButtonClick} disabled={this.mainButtonDisabled}>\r\n {this.buttonIcon && <kritzel-icon name={this.buttonIcon}></kritzel-icon>}\r\n </button>\r\n\r\n <div class=\"split-divider\"></div>\r\n\r\n <button ref={el => (this.splitMenuButtonRef = el)} class=\"split-menu-button\" tabIndex={0} onClick={this.toggleMenu} disabled={this.menuButtonDisabled}>\r\n <kritzel-icon name={this.dropdownIcon}></kritzel-icon>\r\n </button>\r\n\r\n <kritzel-portal anchor={this.anchorElement} offsetY={4} onClose={this.closeMenu}>\r\n <kritzel-menu\r\n ref={el => (this.menuRef = el)}\r\n items={this.items}\r\n onItemSelect={this.handleItemSelect}\r\n onItemSave={this.handleItemSave}\r\n onItemCancel={this.handleItemCancel}\r\n onItemToggleChildMenu={this.handleItemToggleChildMenu}\r\n onItemCloseChildMenu={this.handleItemCloseChildMenu}\r\n onClose={this.closeMenu}\r\n ></kritzel-menu>\r\n </kritzel-portal>\r\n </Host>\r\n );\r\n }\r\n}\r\n"]}
1
+ {"version":3,"file":"kritzel-split-button.js","sourceRoot":"","sources":["../../../../src/components/shared/kritzel-split-button/kritzel-split-button.tsx"],"names":[],"mappings":"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","sourcesContent":["import { Component, h, Prop, State, Event, EventEmitter, Host, Element, Method } from '@stencil/core';\r\nimport { KritzelDevicesHelper } from '../../../helpers/devices.helper';\r\nimport { IKritzelMenuItem, IKritzelMenuItemSelectEvent, IKritzelMenuItemToggleChildMenuEvent } from '../../../interfaces/menu-item.interface';\r\n\r\n@Component({\r\n tag: 'kritzel-split-button',\r\n styleUrl: 'kritzel-split-button.css',\r\n shadow: true,\r\n})\r\nexport class KritzelSplitButton {\r\n @Element() host!: HTMLElement;\r\n\r\n @Prop() buttonIcon: string = 'plus';\r\n @Prop() dropdownIcon: string = 'chevron-down';\r\n @Prop() items: IKritzelMenuItem[] = [];\r\n @Prop() mainButtonDisabled = false;\r\n @Prop() menuButtonDisabled = false;\r\n\r\n @Event() mainButtonClick: EventEmitter<void>;\r\n @Event() itemSelect: EventEmitter<IKritzelMenuItemSelectEvent>;\r\n @Event() itemSave: EventEmitter<IKritzelMenuItem>;\r\n @Event() itemCancel: EventEmitter<IKritzelMenuItem>;\r\n @Event() itemToggleChildMenu: EventEmitter<IKritzelMenuItemToggleChildMenuEvent>;\r\n @Event() itemCloseChildMenu: EventEmitter<IKritzelMenuItem>;\r\n @Event() menuOpen: EventEmitter<void>;\r\n @Event() menuClose: EventEmitter<void>;\r\n\r\n @State() isMenuOpen = false;\r\n @State() isTouchDevice: boolean = KritzelDevicesHelper.isTouchDevice();\r\n @State() anchorElement: HTMLElement;\r\n\r\n splitMenuButtonRef: HTMLButtonElement;\r\n menuRef: HTMLKritzelMenuElement;\r\n\r\n @Method()\r\n async open() {\r\n if (this.isMenuOpen) return;\r\n this.isMenuOpen = true;\r\n this.anchorElement = this.host;\r\n this.menuOpen.emit();\r\n }\r\n\r\n @Method()\r\n async focusMenu() {\r\n if (this.menuRef) {\r\n await this.menuRef.setFocus();\r\n }\r\n }\r\n\r\n private handleButtonClick = (event: MouseEvent) => {\r\n event.stopPropagation();\r\n this.mainButtonClick.emit();\r\n };\r\n\r\n private toggleMenu = (event: MouseEvent) => {\r\n event.stopPropagation();\r\n if (this.isMenuOpen) {\r\n this.closeMenu();\r\n } else {\r\n this.openMenu(event);\r\n }\r\n };\r\n\r\n private openMenu = (event: MouseEvent) => {\r\n event.stopPropagation();\r\n this.isMenuOpen = true;\r\n this.anchorElement = this.host;\r\n this.menuOpen.emit();\r\n };\r\n\r\n private closeMenu = () => {\r\n this.isMenuOpen = false;\r\n this.anchorElement = null;\r\n this.splitMenuButtonRef?.blur();\r\n this.menuClose.emit();\r\n };\r\n\r\n private handleItemSelect = event => {\r\n this.itemSelect.emit(event.detail);\r\n };\r\n\r\n private handleItemSave = event => {\r\n this.itemSave.emit(event.detail);\r\n };\r\n\r\n private handleItemCancel = event => {\r\n this.itemCancel.emit(event.detail);\r\n };\r\n\r\n private handleItemToggleChildMenu = event => {\r\n this.itemToggleChildMenu.emit(event.detail);\r\n };\r\n\r\n private handleItemCloseChildMenu = event => {\r\n this.itemCloseChildMenu.emit(event.detail);\r\n };\r\n\r\n render() {\r\n return (\r\n <Host class={{ mobile: this.isTouchDevice }}>\r\n <button class=\"split-main-button\" tabIndex={0} onClick={this.handleButtonClick} disabled={this.mainButtonDisabled}>\r\n {this.buttonIcon && <kritzel-icon name={this.buttonIcon}></kritzel-icon>}\r\n </button>\r\n\r\n <div class=\"split-divider\"></div>\r\n\r\n <button ref={el => (this.splitMenuButtonRef = el)} class=\"split-menu-button\" tabIndex={0} onClick={this.toggleMenu} disabled={this.menuButtonDisabled}>\r\n <kritzel-icon name={this.dropdownIcon}></kritzel-icon>\r\n </button>\r\n\r\n <kritzel-portal anchor={this.anchorElement} offsetY={4} onClose={this.closeMenu}>\r\n <kritzel-menu\r\n ref={el => (this.menuRef = el)}\r\n items={this.items}\r\n onItemSelect={this.handleItemSelect}\r\n onItemSave={this.handleItemSave}\r\n onItemCancel={this.handleItemCancel}\r\n onItemToggleChildMenu={this.handleItemToggleChildMenu}\r\n onItemCloseChildMenu={this.handleItemCloseChildMenu}\r\n onClose={this.closeMenu}\r\n ></kritzel-menu>\r\n </kritzel-portal>\r\n </Host>\r\n );\r\n }\r\n}\r\n"]}
@@ -18,6 +18,10 @@
18
18
  box-sizing: border-box;
19
19
  }
20
20
 
21
+ .size-container:focus-visible {
22
+ outline: var(--kritzel-stroke-size-focus-outline, 2px auto #e3e3e3);
23
+ }
24
+
21
25
  .size-container:hover {
22
26
  background-color: var(--kritzel-stroke-size-hover-background-color, #ebebeb);
23
27
  }
@@ -1,15 +1,14 @@
1
1
  import { Host, h } from "@stencil/core";
2
2
  export class KritzelStrokeSize {
3
- constructor() {
4
- this.sizes = [4, 6, 8, 12, 16, 24];
5
- this.selectedSize = null;
6
- }
3
+ sizes = [4, 6, 8, 12, 16, 24];
4
+ selectedSize = null;
5
+ sizeChange;
7
6
  handleSizeClick(size) {
8
7
  this.selectedSize = size;
9
8
  this.sizeChange.emit(size);
10
9
  }
11
10
  render() {
12
- return (h(Host, { key: 'f9f0fe49963655a2beeffe5c369ccbe018c8aa5e' }, this.sizes.map(size => (h("div", { class: {
11
+ return (h(Host, { key: '001a0ef8408d19532b57a521929c0cba54e99c52' }, this.sizes.map(size => (h("div", { tabIndex: 0, class: {
13
12
  'size-container': true,
14
13
  'selected': this.selectedSize === size,
15
14
  }, onClick: () => this.handleSizeClick(size) }, h("kritzel-color", { value: '#000000', size: size }))))));
@@ -1 +1 @@
1
- {"version":3,"file":"kritzel-stroke-size.js","sourceRoot":"","sources":["../../../../src/components/shared/kritzel-stroke-size/kritzel-stroke-size.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,EAAE,IAAI,EAAE,KAAK,EAAgB,MAAM,eAAe,CAAC;AAO9E,MAAM,OAAO,iBAAiB;IAL9B;QAOE,UAAK,GAAa,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;QAGxC,iBAAY,GAAkB,IAAI,CAAC;KA2BpC;IAtBS,eAAe,CAAC,IAAY;QAClC,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC;QACzB,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC7B,CAAC;IAED,MAAM;QACJ,OAAO,CACL,EAAC,IAAI,uDACF,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CACtB,WACE,KAAK,EAAE;gBACL,gBAAgB,EAAE,IAAI;gBACtB,UAAU,EAAE,IAAI,CAAC,YAAY,KAAK,IAAI;aACvC,EACD,OAAO,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC;YAEzC,qBAAe,KAAK,EAAC,SAAS,EAAC,IAAI,EAAE,IAAI,GAAkB,CACvD,CACP,CAAC,CACG,CACR,CAAC;IACJ,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CACF","sourcesContent":["import { Component, Host, h, Prop, Event, EventEmitter } from '@stencil/core';\r\n\r\n@Component({\r\n tag: 'kritzel-stroke-size',\r\n styleUrl: 'kritzel-stroke-size.css',\r\n shadow: true,\r\n})\r\nexport class KritzelStrokeSize {\r\n @Prop() \r\n sizes: number[] = [4, 6, 8, 12, 16, 24];\r\n\r\n @Prop({ mutable: true }) \r\n selectedSize: number | null = null;\r\n\r\n @Event() \r\n sizeChange: EventEmitter<number>;\r\n\r\n private handleSizeClick(size: number) {\r\n this.selectedSize = size;\r\n this.sizeChange.emit(size);\r\n }\r\n\r\n render() {\r\n return (\r\n <Host>\r\n {this.sizes.map(size => (\r\n <div\r\n class={{\r\n 'size-container': true,\r\n 'selected': this.selectedSize === size,\r\n }}\r\n onClick={() => this.handleSizeClick(size)}\r\n >\r\n <kritzel-color value='#000000' size={size}></kritzel-color>\r\n </div>\r\n ))}\r\n </Host>\r\n );\r\n }\r\n}\r\n"]}
1
+ {"version":3,"file":"kritzel-stroke-size.js","sourceRoot":"","sources":["../../../../src/components/shared/kritzel-stroke-size/kritzel-stroke-size.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,EAAE,IAAI,EAAE,KAAK,EAAgB,MAAM,eAAe,CAAC;AAO9E,MAAM,OAAO,iBAAiB;IACpB,KAAK,GAAa,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;IACvB,YAAY,GAAkB,IAAI,CAAC;IAEnD,UAAU,CAAuB;IAElC,eAAe,CAAC,IAAY;QAClC,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC;QACzB,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC7B,CAAC;IAED,MAAM;QACJ,OAAO,CACL,EAAC,IAAI,uDACF,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CACtB,WACE,QAAQ,EAAE,CAAC,EACX,KAAK,EAAE;gBACL,gBAAgB,EAAE,IAAI;gBACtB,UAAU,EAAE,IAAI,CAAC,YAAY,KAAK,IAAI;aACvC,EACD,OAAO,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC;YAEzC,qBAAe,KAAK,EAAC,SAAS,EAAC,IAAI,EAAE,IAAI,GAAkB,CACvD,CACP,CAAC,CACG,CACR,CAAC;IACJ,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CACF","sourcesContent":["import { Component, Host, h, Prop, Event, EventEmitter } from '@stencil/core';\r\n\r\n@Component({\r\n tag: 'kritzel-stroke-size',\r\n styleUrl: 'kritzel-stroke-size.css',\r\n shadow: true,\r\n})\r\nexport class KritzelStrokeSize {\r\n @Prop() sizes: number[] = [4, 6, 8, 12, 16, 24];\r\n @Prop({ mutable: true }) selectedSize: number | null = null;\r\n\r\n @Event() sizeChange: EventEmitter<number>;\r\n\r\n private handleSizeClick(size: number) {\r\n this.selectedSize = size;\r\n this.sizeChange.emit(size);\r\n }\r\n\r\n render() {\r\n return (\r\n <Host>\r\n {this.sizes.map(size => (\r\n <div\r\n tabIndex={0}\r\n class={{\r\n 'size-container': true,\r\n 'selected': this.selectedSize === size,\r\n }}\r\n onClick={() => this.handleSizeClick(size)}\r\n >\r\n <kritzel-color value='#000000' size={size}></kritzel-color>\r\n </div>\r\n ))}\r\n </Host>\r\n );\r\n }\r\n}\r\n"]}
@@ -1,18 +1,37 @@
1
1
  import { Host, h } from "@stencil/core";
2
+ import { KritzelHTMLHelper } from "../../../helpers/html.helper";
2
3
  const MOBILE_BREAKPOINT = 768;
3
4
  export class KritzelTooltip {
4
- constructor() {
5
- this.isVisible = false;
6
- this.arrowSize = 8;
7
- this.offsetY = 24;
8
- this.positionX = 0;
9
- this.arrowOffset = '0px';
10
- this.isMobileView = window.innerWidth < MOBILE_BREAKPOINT;
5
+ host;
6
+ isVisible = false;
7
+ anchorElement;
8
+ arrowSize = 8;
9
+ offsetY = 24;
10
+ tooltipClosed;
11
+ positionX = 0;
12
+ arrowOffset = '0px';
13
+ isMobileView = window.innerWidth < MOBILE_BREAKPOINT;
14
+ handleOutsideClick(event) {
15
+ if (!this.isVisible)
16
+ return;
17
+ const target = event.target;
18
+ if (!this.host.contains(target)) {
19
+ this.tooltipClosed.emit();
20
+ }
11
21
  }
12
22
  handleWindowResize() {
13
23
  this.isMobileView = window.innerWidth < MOBILE_BREAKPOINT;
14
24
  this.calculateAdjustedPosition();
15
25
  }
26
+ async focusContent() {
27
+ const focusableElements = KritzelHTMLHelper.getFocusableElements(this.host);
28
+ if (focusableElements.length > 0) {
29
+ focusableElements[0].focus();
30
+ }
31
+ }
32
+ componentDidLoad() {
33
+ this.focusSlottedContent();
34
+ }
16
35
  componentWillLoad() {
17
36
  this.isMobileView = window.innerWidth < MOBILE_BREAKPOINT;
18
37
  this.calculateAdjustedPosition();
@@ -20,11 +39,18 @@ export class KritzelTooltip {
20
39
  componentWillUpdate() {
21
40
  this.calculateAdjustedPosition();
22
41
  }
42
+ focusSlottedContent() {
43
+ const slot = this.host.shadowRoot?.querySelector('slot');
44
+ const assignedElements = slot?.assignedElements() || [];
45
+ if (assignedElements.length > 0) {
46
+ const firstElement = assignedElements[0];
47
+ firstElement.focus();
48
+ }
49
+ }
23
50
  calculateAdjustedPosition() {
24
- var _a;
25
51
  if (this.isVisible && this.anchorElement) {
26
52
  const anchorRect = this.anchorElement.getBoundingClientRect();
27
- const tooltipContent = (_a = this.el.shadowRoot) === null || _a === void 0 ? void 0 : _a.querySelector('.tooltip-content');
53
+ const tooltipContent = this.host.shadowRoot?.querySelector('.tooltip-content');
28
54
  if (!this.isMobileView) {
29
55
  this.positionX = anchorRect.left + anchorRect.width / 2;
30
56
  this.arrowOffset = `calc(${50}% - ${this.arrowSize}px)`;
@@ -37,23 +63,23 @@ export class KritzelTooltip {
37
63
  }
38
64
  }
39
65
  render() {
40
- return (h(Host, { key: '6eb67bcfd08234affe3724dff4d94ddf7907a1a7', style: {
66
+ return (h(Host, { key: '8c3aeff60625f43f129afa70367cdb7a68a4b271', style: {
41
67
  position: 'fixed',
42
68
  zIndex: '9999',
43
69
  transition: 'opacity 0.3s ease-in-out, transform 0.3s ease-in-out',
44
70
  visibility: this.isVisible ? 'visible' : 'hidden',
45
71
  left: !this.isMobileView ? `${this.positionX}px` : '50%',
46
72
  marginBottom: `${this.offsetY + this.arrowSize}px`,
47
- } }, h("div", { key: '9314b30b71200776e3728027b2ac7332cf4ab669', class: "tooltip-content", onClick: event => event.stopPropagation() }, h("slot", { key: '80cb8d0a8a91d9c816580cedc02fc9382fb07f8c' }), h("div", { key: '87fb2399463a0eb7beb1ca0f2c2867d8ff033f3a', class: "tooltip-arrow-wrapper", style: {
73
+ } }, h("div", { key: 'b22b606c2a836c2c9bbe21c6b470754753ccb309', class: "tooltip-content", onClick: event => event.stopPropagation() }, h("slot", { key: '783403f4b5560012c9f6bd184a8c5eb26428e148' }), h("div", { key: 'bb98400edc5c6e05fd4ed2a476a5821f93964b8e', class: "tooltip-arrow-wrapper", style: {
48
74
  position: 'fixed',
49
75
  left: this.arrowOffset,
50
76
  bottom: `-${this.arrowSize * 2}px`,
51
- } }, h("div", { key: 'fc3953ad9b6aa5a4b2228653573fc3a7e37c0487', class: "tooltip-arrow", style: {
77
+ } }, h("div", { key: '850a058d635113a7870f25fa288a6447394c53ed', class: "tooltip-arrow", style: {
52
78
  borderLeft: `${this.arrowSize}px solid transparent`,
53
79
  borderRight: `${this.arrowSize}px solid transparent`,
54
80
  borderTop: `${this.arrowSize}px solid var(--kritzel-controls-tooltip-background-color, #ffffff)`,
55
81
  filter: 'drop-shadow(0 2px 4px rgba(0, 0, 0, 0.2))',
56
- } }), h("div", { key: '5b8e4e3eb90c4c47c47fa47dc96e4149794e1732', class: "tooltip-arrow-rect", style: {
82
+ } }), h("div", { key: 'bbb3dc2673e2dfe4443ad80540dfc9e5a25c6c06', class: "tooltip-arrow-rect", style: {
57
83
  position: 'relative',
58
84
  width: `${this.arrowSize * 2}px`,
59
85
  height: `${this.arrowSize}px`,
@@ -167,9 +193,54 @@ export class KritzelTooltip {
167
193
  "isMobileView": {}
168
194
  };
169
195
  }
170
- static get elementRef() { return "el"; }
196
+ static get events() {
197
+ return [{
198
+ "method": "tooltipClosed",
199
+ "name": "tooltipClosed",
200
+ "bubbles": true,
201
+ "cancelable": true,
202
+ "composed": true,
203
+ "docs": {
204
+ "tags": [],
205
+ "text": ""
206
+ },
207
+ "complexType": {
208
+ "original": "void",
209
+ "resolved": "void",
210
+ "references": {}
211
+ }
212
+ }];
213
+ }
214
+ static get methods() {
215
+ return {
216
+ "focusContent": {
217
+ "complexType": {
218
+ "signature": "() => Promise<void>",
219
+ "parameters": [],
220
+ "references": {
221
+ "Promise": {
222
+ "location": "global",
223
+ "id": "global::Promise"
224
+ }
225
+ },
226
+ "return": "Promise<void>"
227
+ },
228
+ "docs": {
229
+ "text": "",
230
+ "tags": []
231
+ }
232
+ }
233
+ };
234
+ }
235
+ static get elementRef() { return "host"; }
171
236
  static get listeners() {
172
237
  return [{
238
+ "name": "click",
239
+ "method": "handleOutsideClick",
240
+ "target": "document",
241
+ "capture": false,
242
+ "passive": false
243
+ }, {
173
244
  "name": "resize",
174
245
  "method": "handleWindowResize",
175
246
  "target": "window",
@@ -1 +1 @@
1
- {"version":3,"file":"kritzel-tooltip.js","sourceRoot":"","sources":["../../../../src/components/shared/kritzel-tooltip/kritzel-tooltip.tsx"],"names":[],"mappings":"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","sourcesContent":["import { Component, Host, Prop, h, Element, State, Listen } from '@stencil/core';\r\n\r\nconst MOBILE_BREAKPOINT = 768;\r\n\r\n@Component({\r\n tag: 'kritzel-tooltip',\r\n styleUrl: 'kritzel-tooltip.css',\r\n shadow: true,\r\n})\r\nexport class KritzelTooltip {\r\n @Prop()\r\n isVisible: boolean = false;\r\n\r\n @Prop()\r\n anchorElement: HTMLElement;\r\n\r\n @Prop()\r\n arrowSize: number = 8;\r\n\r\n @Prop()\r\n offsetY: number = 24;\r\n\r\n @Element()\r\n el: HTMLElement;\r\n\r\n @State()\r\n positionX: number = 0;\r\n\r\n @State()\r\n arrowOffset: string = '0px';\r\n\r\n @State()\r\n private isMobileView: boolean = window.innerWidth < MOBILE_BREAKPOINT;\r\n\r\n @Listen('resize', { target: 'window' })\r\n handleWindowResize() {\r\n this.isMobileView = window.innerWidth < MOBILE_BREAKPOINT;\r\n this.calculateAdjustedPosition();\r\n }\r\n\r\n componentWillLoad() {\r\n this.isMobileView = window.innerWidth < MOBILE_BREAKPOINT;\r\n this.calculateAdjustedPosition();\r\n }\r\n\r\n componentWillUpdate() {\r\n this.calculateAdjustedPosition();\r\n }\r\n\r\n private calculateAdjustedPosition() {\r\n if (this.isVisible && this.anchorElement) {\r\n const anchorRect = this.anchorElement.getBoundingClientRect();\r\n const tooltipContent = this.el.shadowRoot?.querySelector('.tooltip-content') as HTMLElement;\r\n\r\n if (!this.isMobileView) {\r\n this.positionX = anchorRect.left + anchorRect.width / 2;\r\n this.arrowOffset = `calc(${50}% - ${this.arrowSize}px)`; \r\n } else {\r\n const tooltipRect = tooltipContent.getBoundingClientRect();\r\n this.positionX = anchorRect.left + anchorRect.width / 2 - tooltipRect.width / 2;\r\n this.arrowOffset = `${anchorRect.left + anchorRect.width / 2 - tooltipRect.left - this.arrowSize}px`;\r\n }\r\n }\r\n }\r\n\r\n render() {\r\n return (\r\n <Host\r\n style={{\r\n position: 'fixed',\r\n zIndex: '9999',\r\n transition: 'opacity 0.3s ease-in-out, transform 0.3s ease-in-out',\r\n visibility: this.isVisible ? 'visible' : 'hidden',\r\n left: !this.isMobileView ? `${this.positionX}px` : '50%',\r\n marginBottom: `${this.offsetY + this.arrowSize}px`,\r\n }}\r\n >\r\n <div class=\"tooltip-content\" onClick={event => event.stopPropagation()}>\r\n <slot></slot>\r\n <div\r\n class=\"tooltip-arrow-wrapper\"\r\n style={{\r\n position: 'fixed',\r\n left: this.arrowOffset,\r\n bottom: `-${this.arrowSize * 2}px`,\r\n }}\r\n >\r\n <div\r\n class=\"tooltip-arrow\"\r\n style={{\r\n borderLeft: `${this.arrowSize}px solid transparent`,\r\n borderRight: `${this.arrowSize}px solid transparent`,\r\n borderTop: `${this.arrowSize}px solid var(--kritzel-controls-tooltip-background-color, #ffffff)`,\r\n filter: 'drop-shadow(0 2px 4px rgba(0, 0, 0, 0.2))',\r\n }}\r\n ></div>\r\n <div\r\n class=\"tooltip-arrow-rect\"\r\n style={{\r\n position: 'relative',\r\n width: `${this.arrowSize * 2}px`,\r\n height: `${this.arrowSize}px`,\r\n backgroundColor: 'var(--kritzel-controls-tooltip-background-color, #ffffff)',\r\n bottom: `${this.arrowSize * 2}px`,\r\n }}\r\n ></div>\r\n </div>\r\n </div>\r\n </Host>\r\n );\r\n }\r\n}\r\n"]}
1
+ {"version":3,"file":"kritzel-tooltip.js","sourceRoot":"","sources":["../../../../src/components/shared/kritzel-tooltip/kritzel-tooltip.tsx"],"names":[],"mappings":"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","sourcesContent":["import { Component, Host, Prop, h, Element, State, Listen, Method, Event, EventEmitter } from '@stencil/core';\r\nimport { KritzelHTMLHelper } from '../../../helpers/html.helper';\r\n\r\nconst MOBILE_BREAKPOINT = 768;\r\n\r\n@Component({\r\n tag: 'kritzel-tooltip',\r\n styleUrl: 'kritzel-tooltip.css',\r\n shadow: true,\r\n})\r\nexport class KritzelTooltip {\r\n @Element() host: HTMLElement;\r\n\r\n @Prop() isVisible: boolean = false;\r\n @Prop() anchorElement: HTMLElement;\r\n @Prop() arrowSize: number = 8;\r\n @Prop() offsetY: number = 24;\r\n\r\n @Event() tooltipClosed: EventEmitter<void>;\r\n\r\n @State() positionX: number = 0;\r\n @State() arrowOffset: string = '0px';\r\n @State() isMobileView: boolean = window.innerWidth < MOBILE_BREAKPOINT;\r\n\r\n @Listen('click', { target: 'document' })\r\n handleOutsideClick(event: MouseEvent) {\r\n if( !this.isVisible ) return;\r\n const target = event.target as HTMLElement;\r\n if (!this.host.contains(target)) {\r\n this.tooltipClosed.emit();\r\n }\r\n }\r\n\r\n @Listen('resize', { target: 'window' })\r\n handleWindowResize() {\r\n this.isMobileView = window.innerWidth < MOBILE_BREAKPOINT;\r\n this.calculateAdjustedPosition();\r\n }\r\n\r\n @Method()\r\n async focusContent() {\r\n const focusableElements = KritzelHTMLHelper.getFocusableElements(this.host);\r\n if (focusableElements.length > 0) {\r\n focusableElements[0].focus();\r\n }\r\n }\r\n\r\n componentDidLoad() {\r\n this.focusSlottedContent();\r\n }\r\n\r\n componentWillLoad() {\r\n this.isMobileView = window.innerWidth < MOBILE_BREAKPOINT;\r\n this.calculateAdjustedPosition();\r\n }\r\n\r\n componentWillUpdate() {\r\n this.calculateAdjustedPosition();\r\n }\r\n\r\n private focusSlottedContent() {\r\n const slot = this.host.shadowRoot?.querySelector('slot');\r\n const assignedElements = slot?.assignedElements() || [];\r\n if (assignedElements.length > 0) {\r\n const firstElement = assignedElements[0] as HTMLElement;\r\n firstElement.focus();\r\n }\r\n }\r\n\r\n private calculateAdjustedPosition() {\r\n if (this.isVisible && this.anchorElement) {\r\n const anchorRect = this.anchorElement.getBoundingClientRect();\r\n const tooltipContent = this.host.shadowRoot?.querySelector('.tooltip-content') as HTMLElement;\r\n\r\n if (!this.isMobileView) {\r\n this.positionX = anchorRect.left + anchorRect.width / 2;\r\n this.arrowOffset = `calc(${50}% - ${this.arrowSize}px)`; \r\n } else {\r\n const tooltipRect = tooltipContent.getBoundingClientRect();\r\n this.positionX = anchorRect.left + anchorRect.width / 2 - tooltipRect.width / 2;\r\n this.arrowOffset = `${anchorRect.left + anchorRect.width / 2 - tooltipRect.left - this.arrowSize}px`;\r\n }\r\n }\r\n }\r\n\r\n render() {\r\n return (\r\n <Host\r\n style={{\r\n position: 'fixed',\r\n zIndex: '9999',\r\n transition: 'opacity 0.3s ease-in-out, transform 0.3s ease-in-out',\r\n visibility: this.isVisible ? 'visible' : 'hidden',\r\n left: !this.isMobileView ? `${this.positionX}px` : '50%',\r\n marginBottom: `${this.offsetY + this.arrowSize}px`,\r\n }}\r\n >\r\n <div class=\"tooltip-content\" onClick={event => event.stopPropagation()}>\r\n <slot></slot>\r\n <div\r\n class=\"tooltip-arrow-wrapper\"\r\n style={{\r\n position: 'fixed',\r\n left: this.arrowOffset,\r\n bottom: `-${this.arrowSize * 2}px`,\r\n }}\r\n >\r\n <div\r\n class=\"tooltip-arrow\"\r\n style={{\r\n borderLeft: `${this.arrowSize}px solid transparent`,\r\n borderRight: `${this.arrowSize}px solid transparent`,\r\n borderTop: `${this.arrowSize}px solid var(--kritzel-controls-tooltip-background-color, #ffffff)`,\r\n filter: 'drop-shadow(0 2px 4px rgba(0, 0, 0, 0.2))',\r\n }}\r\n ></div>\r\n <div\r\n class=\"tooltip-arrow-rect\"\r\n style={{\r\n position: 'relative',\r\n width: `${this.arrowSize * 2}px`,\r\n height: `${this.arrowSize}px`,\r\n backgroundColor: 'var(--kritzel-controls-tooltip-background-color, #ffffff)',\r\n bottom: `${this.arrowSize * 2}px`,\r\n }}\r\n ></div>\r\n </div>\r\n </div>\r\n </Host>\r\n );\r\n }\r\n}\r\n"]}
@@ -1,12 +1,22 @@
1
1
  import { Host, h } from "@stencil/core";
2
2
  export class KritzelContextMenu {
3
- constructor() {
4
- this.processedItems = [];
5
- }
6
- componentWillLoad() {
3
+ host;
4
+ items;
5
+ onItemsChanged() {
7
6
  this.updateMenuItems();
8
7
  }
9
- onItemsChanged() {
8
+ objects;
9
+ actionSelected;
10
+ close;
11
+ processedItems = [];
12
+ handleOutsideClick(event) {
13
+ event.preventDefault();
14
+ const path = event.composedPath();
15
+ if (!path.includes(this.host)) {
16
+ this.close.emit();
17
+ }
18
+ }
19
+ componentWillLoad() {
10
20
  this.updateMenuItems();
11
21
  }
12
22
  handleItemClick(item, isDisabled) {
@@ -14,15 +24,6 @@ export class KritzelContextMenu {
14
24
  this.actionSelected.emit(item);
15
25
  }
16
26
  }
17
- async evaluateProperty(value, defaultValue) {
18
- if (typeof value === 'boolean') {
19
- return value;
20
- }
21
- if (typeof value === 'function') {
22
- return await Promise.resolve(value(null, this.objects));
23
- }
24
- return defaultValue;
25
- }
26
27
  async updateMenuItems() {
27
28
  const processed = [];
28
29
  for (const item of this.items) {
@@ -34,8 +35,17 @@ export class KritzelContextMenu {
34
35
  }
35
36
  this.processedItems = processed;
36
37
  }
38
+ async evaluateProperty(value, defaultValue) {
39
+ if (typeof value === 'boolean') {
40
+ return value;
41
+ }
42
+ if (typeof value === 'function') {
43
+ return await Promise.resolve(value(null, this.objects));
44
+ }
45
+ return defaultValue;
46
+ }
37
47
  render() {
38
- return (h(Host, { key: '96569454f806a6d17380315b4d0200236fe22550' }, h("div", { key: '0e5899a2901e1e9ab9d657824e105121ce785bdc', class: "menu-container" }, this.processedItems.map(({ item, isDisabled }, index) => (h("button", { key: `${item.label}-${index}`, class: { 'menu-item': true, disabled: isDisabled }, onClick: () => this.handleItemClick(item, isDisabled), onTouchStart: () => this.handleItemClick(item, isDisabled), disabled: isDisabled }, item.icon && h("kritzel-icon", { name: item.icon, size: 16 }), h("span", { class: "label" }, item.label)))))));
48
+ return (h(Host, { key: 'ff72bd31f6c0f3193674710bccab829f14e011d3' }, h("div", { key: '80cd7a99dc9bb1fb9ec4edb09a9bacde70dde7c3', class: "menu-container" }, this.processedItems.map(({ item, isDisabled }, index) => (h("button", { key: `${item.label}-${index}`, class: { 'menu-item': true, 'disabled': isDisabled }, onClick: () => this.handleItemClick(item, isDisabled), disabled: isDisabled }, item.icon && h("kritzel-icon", { name: item.icon, size: 16 }), h("span", { class: "label" }, item.label)))))));
39
49
  }
40
50
  static get is() { return "kritzel-context-menu"; }
41
51
  static get encapsulation() { return "shadow"; }
@@ -128,14 +138,38 @@ export class KritzelContextMenu {
128
138
  }
129
139
  }
130
140
  }
141
+ }, {
142
+ "method": "close",
143
+ "name": "close",
144
+ "bubbles": true,
145
+ "cancelable": true,
146
+ "composed": true,
147
+ "docs": {
148
+ "tags": [],
149
+ "text": ""
150
+ },
151
+ "complexType": {
152
+ "original": "void",
153
+ "resolved": "void",
154
+ "references": {}
155
+ }
131
156
  }];
132
157
  }
133
- static get elementRef() { return "hostElement"; }
158
+ static get elementRef() { return "host"; }
134
159
  static get watchers() {
135
160
  return [{
136
161
  "propName": "items",
137
162
  "methodName": "onItemsChanged"
138
163
  }];
139
164
  }
165
+ static get listeners() {
166
+ return [{
167
+ "name": "pointerdown",
168
+ "method": "handleOutsideClick",
169
+ "target": "window",
170
+ "capture": false,
171
+ "passive": true
172
+ }];
173
+ }
140
174
  }
141
175
  //# sourceMappingURL=kritzel-context-menu.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"kritzel-context-menu.js","sourceRoot":"","sources":["../../../../src/components/ui/kritzel-context-menu/kritzel-context-menu.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,EAAE,IAAI,EAAE,KAAK,EAAgB,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,eAAe,CAAC;AAcrG,MAAM,OAAO,kBAAkB;IAL/B;QAmBU,mBAAc,GAAwB,EAAE,CAAC;KAgElD;IA9DC,iBAAiB;QACf,IAAI,CAAC,eAAe,EAAE,CAAC;IACzB,CAAC;IAGD,cAAc;QACZ,IAAI,CAAC,eAAe,EAAE,CAAC;IACzB,CAAC;IAEO,eAAe,CAAC,IAAqB,EAAE,UAAmB;QAChE,IAAI,CAAC,UAAU,EAAE,CAAC;YAChB,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACjC,CAAC;IACH,CAAC;IAEO,KAAK,CAAC,gBAAgB,CAC5B,KAAoG,EACpG,YAAqB;QAErB,IAAI,OAAO,KAAK,KAAK,SAAS,EAAE,CAAC;YAC/B,OAAO,KAAK,CAAC;QACf,CAAC;QACD,IAAI,OAAO,KAAK,KAAK,UAAU,EAAE,CAAC;YAChC,OAAO,MAAM,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC;QAC1D,CAAC;QACD,OAAO,YAAY,CAAC;IACtB,CAAC;IAEO,KAAK,CAAC,eAAe;QAC3B,MAAM,SAAS,GAAwB,EAAE,CAAC;QAE1C,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;YAC9B,MAAM,SAAS,GAAG,MAAM,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;YAClE,IAAI,SAAS,EAAE,CAAC;gBACd,MAAM,UAAU,GAAG,MAAM,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;gBACrE,SAAS,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,UAAU,EAAE,CAAC,CAAC;YACvC,CAAC;QACH,CAAC;QAED,IAAI,CAAC,cAAc,GAAG,SAAS,CAAC;IAClC,CAAC;IAED,MAAM;QACJ,OAAO,CACL,EAAC,IAAI;YACH,4DAAK,KAAK,EAAC,gBAAgB,IACxB,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,EAAE,UAAU,EAAE,EAAE,KAAK,EAAE,EAAE,CAAC,CACxD,cACE,GAAG,EAAE,GAAG,IAAI,CAAC,KAAK,IAAI,KAAK,EAAE,EAC7B,KAAK,EAAE,EAAE,WAAW,EAAE,IAAI,EAAE,QAAQ,EAAE,UAAU,EAAE,EAClD,OAAO,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,eAAe,CAAC,IAAI,EAAE,UAAU,CAAC,EACrD,YAAY,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,eAAe,CAAC,IAAI,EAAE,UAAU,CAAC,EAC1D,QAAQ,EAAE,UAAU;gBAEnB,IAAI,CAAC,IAAI,IAAI,oBAAc,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,IAAI,EAAE,EAAE,GAAiB;gBACtE,YAAM,KAAK,EAAC,OAAO,IAAE,IAAI,CAAC,KAAK,CAAQ,CAChC,CACV,CAAC,CACE,CACD,CACR,CAAC;IACJ,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CACF","sourcesContent":["import { Component, Host, h, Prop, Event, EventEmitter, Element, State, Watch } from '@stencil/core';\r\nimport { ContextMenuItem } from '../../../interfaces/context-menu-item.interface';\r\nimport { KritzelBaseObject } from '../../../classes/objects/base-object.class';\r\n\r\ninterface ProcessedMenuItem {\r\n item: ContextMenuItem;\r\n isDisabled: boolean;\r\n}\r\n\r\n@Component({\r\n tag: 'kritzel-context-menu',\r\n styleUrl: 'kritzel-context-menu.css',\r\n shadow: true,\r\n})\r\nexport class KritzelContextMenu {\r\n @Prop()\r\n items: ContextMenuItem[];\r\n\r\n @Prop()\r\n objects: KritzelBaseObject[];\r\n\r\n @Event()\r\n actionSelected: EventEmitter<ContextMenuItem>;\r\n\r\n @Element()\r\n hostElement: HTMLElement;\r\n\r\n @State()\r\n private processedItems: ProcessedMenuItem[] = [];\r\n\r\n componentWillLoad() {\r\n this.updateMenuItems();\r\n }\r\n\r\n @Watch('items')\r\n onItemsChanged() {\r\n this.updateMenuItems();\r\n }\r\n\r\n private handleItemClick(item: ContextMenuItem, isDisabled: boolean) {\r\n if (!isDisabled) {\r\n this.actionSelected.emit(item);\r\n }\r\n }\r\n\r\n private async evaluateProperty(\r\n value: boolean | ((obj: KritzelBaseObject, objs: KritzelBaseObject[]) => boolean | Promise<boolean>),\r\n defaultValue: boolean,\r\n ): Promise<boolean> {\r\n if (typeof value === 'boolean') {\r\n return value;\r\n }\r\n if (typeof value === 'function') {\r\n return await Promise.resolve(value(null, this.objects));\r\n }\r\n return defaultValue;\r\n }\r\n\r\n private async updateMenuItems() {\r\n const processed: ProcessedMenuItem[] = [];\r\n\r\n for (const item of this.items) {\r\n const isVisible = await this.evaluateProperty(item.visible, true);\r\n if (isVisible) {\r\n const isDisabled = await this.evaluateProperty(item.disabled, false);\r\n processed.push({ item, isDisabled });\r\n }\r\n }\r\n\r\n this.processedItems = processed;\r\n }\r\n\r\n render() {\r\n return (\r\n <Host>\r\n <div class=\"menu-container\">\r\n {this.processedItems.map(({ item, isDisabled }, index) => (\r\n <button\r\n key={`${item.label}-${index}`} \r\n class={{ 'menu-item': true, disabled: isDisabled }}\r\n onClick={() => this.handleItemClick(item, isDisabled)}\r\n onTouchStart={() => this.handleItemClick(item, isDisabled)}\r\n disabled={isDisabled}\r\n >\r\n {item.icon && <kritzel-icon name={item.icon} size={16}></kritzel-icon>}\r\n <span class=\"label\">{item.label}</span>\r\n </button>\r\n ))}\r\n </div>\r\n </Host>\r\n );\r\n }\r\n}\r\n"]}
1
+ {"version":3,"file":"kritzel-context-menu.js","sourceRoot":"","sources":["../../../../src/components/ui/kritzel-context-menu/kritzel-context-menu.tsx"],"names":[],"mappings":"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","sourcesContent":["import { Component, Host, h, Prop, Event, EventEmitter, State, Watch, Listen, Element } from '@stencil/core';\r\nimport { ContextMenuItem } from '../../../interfaces/context-menu-item.interface';\r\nimport { KritzelBaseObject } from '../../../classes/objects/base-object.class';\r\n\r\ninterface ProcessedMenuItem {\r\n item: ContextMenuItem;\r\n isDisabled: boolean;\r\n}\r\n\r\n@Component({\r\n tag: 'kritzel-context-menu',\r\n styleUrl: 'kritzel-context-menu.css',\r\n shadow: true,\r\n})\r\nexport class KritzelContextMenu {\r\n @Element() host: HTMLElement;\r\n\r\n @Prop() items: ContextMenuItem[];\r\n @Watch('items')\r\n onItemsChanged() {\r\n this.updateMenuItems();\r\n }\r\n\r\n @Prop() objects: KritzelBaseObject[];\r\n\r\n @Event() actionSelected: EventEmitter<ContextMenuItem>;\r\n @Event() close: EventEmitter<void>;\r\n\r\n @State() private processedItems: ProcessedMenuItem[] = [];\r\n\r\n @Listen('pointerdown', { target: 'window' })\r\n handleOutsideClick(event: MouseEvent) {\r\n event.preventDefault();\r\n const path = event.composedPath();\r\n if (!path.includes(this.host)) {\r\n this.close.emit();\r\n }\r\n }\r\n\r\n componentWillLoad() {\r\n this.updateMenuItems();\r\n }\r\n\r\n private handleItemClick(item: ContextMenuItem, isDisabled: boolean) {\r\n if (!isDisabled) {\r\n this.actionSelected.emit(item);\r\n }\r\n }\r\n\r\n private async updateMenuItems() {\r\n const processed: ProcessedMenuItem[] = [];\r\n\r\n for (const item of this.items) {\r\n const isVisible = await this.evaluateProperty(item.visible, true);\r\n if (isVisible) {\r\n const isDisabled = await this.evaluateProperty(item.disabled, false);\r\n processed.push({ item, isDisabled });\r\n }\r\n }\r\n\r\n this.processedItems = processed;\r\n }\r\n\r\n private async evaluateProperty(value: boolean | ((obj: KritzelBaseObject, objs: KritzelBaseObject[]) => boolean | Promise<boolean>), defaultValue: boolean): Promise<boolean> {\r\n if (typeof value === 'boolean') {\r\n return value;\r\n }\r\n if (typeof value === 'function') {\r\n return await Promise.resolve(value(null, this.objects));\r\n }\r\n return defaultValue;\r\n }\r\n\r\n render() {\r\n return (\r\n <Host>\r\n <div class=\"menu-container\">\r\n {this.processedItems.map(({ item, isDisabled }, index) => (\r\n <button\r\n key={`${item.label}-${index}`}\r\n class={{ 'menu-item': true, 'disabled': isDisabled }}\r\n onClick={() => this.handleItemClick(item, isDisabled)}\r\n disabled={isDisabled}\r\n >\r\n {item.icon && <kritzel-icon name={item.icon} size={16}></kritzel-icon>}\r\n <span class=\"label\">{item.label}</span>\r\n </button>\r\n ))}\r\n </div>\r\n </Host>\r\n );\r\n }\r\n}\r\n"]}
@@ -14,6 +14,10 @@
14
14
  color: var(--kritzel-color-palette-expand-toggle-color, #666666);
15
15
  }
16
16
 
17
+ .expand-toggle:focus-visible {
18
+ outline: var(--kritzel-color-palette-focus-outline, 2px auto #e3e3e3);
19
+ }
20
+
17
21
  .expand-toggle:hover {
18
22
  color: var(--kritzel-color-palette-expand-toggle-hover-color, #333333);
19
23
  }