@zanichelli/albe-web-components 19.1.3 → 19.2.0

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 (835) hide show
  1. package/CHANGELOG.md +41 -0
  2. package/dist/cjs/iconset-5d47610c.js +1016 -0
  3. package/dist/cjs/iconset-5d47610c.js.map +1 -0
  4. package/dist/cjs/{index-f011b2e3.js → index-1ee051ca.js} +2 -2
  5. package/dist/cjs/{index-f011b2e3.js.map → index-1ee051ca.js.map} +1 -1
  6. package/dist/cjs/{index-09238e31.js → index-43dfc8b2.js} +3 -3
  7. package/dist/cjs/{index-09238e31.js.map → index-43dfc8b2.js.map} +1 -1
  8. package/dist/cjs/{index-1c7cd5df.js → index-5eb95b44.js} +2 -2
  9. package/dist/cjs/{index-1c7cd5df.js.map → index-5eb95b44.js.map} +1 -1
  10. package/dist/cjs/{index-805390c8.js → index-844c7a99.js} +5 -5
  11. package/dist/cjs/{index-805390c8.js.map → index-844c7a99.js.map} +1 -1
  12. package/dist/cjs/{index-62712250.js → index-8770e71a.js} +2 -2
  13. package/dist/cjs/{index-62712250.js.map → index-8770e71a.js.map} +1 -1
  14. package/dist/cjs/index-96af6326.js +14 -2
  15. package/dist/cjs/{index-66928615.js → index-d214a119.js} +3 -3
  16. package/dist/cjs/{index-66928615.js.map → index-d214a119.js.map} +1 -1
  17. package/dist/cjs/{index-97a4c18d.js → index-e30d0503.js} +51 -1
  18. package/dist/cjs/index-e30d0503.js.map +1 -0
  19. package/dist/cjs/index.cjs.js +5 -2
  20. package/dist/cjs/index.cjs.js.map +1 -1
  21. package/dist/cjs/loader.cjs.js +1 -1
  22. package/dist/cjs/{utils-7f9d5a78.js → utils-4f7b4830.js} +2 -2
  23. package/dist/cjs/{utils-7f9d5a78.js.map → utils-4f7b4830.js.map} +1 -1
  24. package/dist/cjs/{utils-5148245a.js → utils-e8b453d5.js} +35 -6
  25. package/dist/cjs/utils-e8b453d5.js.map +1 -0
  26. package/dist/cjs/web-components-library.cjs.js +1 -1
  27. package/dist/cjs/z-accordion.cjs.entry.js +2 -2
  28. package/dist/cjs/z-alert.cjs.entry.js +1 -1
  29. package/dist/cjs/z-anchor-navigation.cjs.entry.js +2 -2
  30. package/dist/cjs/z-app-header-deprecated.cjs.entry.js +2 -2
  31. package/dist/cjs/z-app-header_12.cjs.entry.js +139 -1051
  32. package/dist/cjs/z-app-header_12.cjs.entry.js.map +1 -1
  33. package/dist/cjs/z-aria-alert.cjs.entry.js +2 -2
  34. package/dist/cjs/z-avatar.cjs.entry.js +3 -3
  35. package/dist/cjs/z-book-card-app.cjs.entry.js +2 -2
  36. package/dist/cjs/z-book-card-deprecated.cjs.entry.js +3 -3
  37. package/dist/cjs/z-book-card.cjs.entry.js +1 -1
  38. package/dist/cjs/z-book-cover.cjs.entry.js +1 -1
  39. package/dist/cjs/z-breadcrumb.cjs.entry.js +4 -4
  40. package/dist/cjs/z-button-sort.cjs.entry.js +1 -1
  41. package/dist/cjs/z-card.cjs.entry.js +1 -1
  42. package/dist/cjs/z-carousel.cjs.entry.js +1 -1
  43. package/dist/cjs/z-chip.cjs.entry.js +3 -3
  44. package/dist/cjs/z-color-picker.cjs.entry.js +212 -0
  45. package/dist/cjs/z-color-picker.cjs.entry.js.map +1 -0
  46. package/dist/cjs/z-combobox.cjs.entry.js +3 -3
  47. package/dist/cjs/z-cover-hero.cjs.entry.js +3 -3
  48. package/dist/cjs/z-date-picker.cjs.entry.js +3 -3
  49. package/dist/cjs/z-dragdrop-area_2.cjs.entry.js +7 -7
  50. package/dist/cjs/z-file-upload.cjs.entry.js +1 -1
  51. package/dist/cjs/z-file.cjs.entry.js +2 -2
  52. package/dist/cjs/z-ghost-loading.cjs.entry.js +1 -1
  53. package/dist/cjs/z-info-box.cjs.entry.js +1 -1
  54. package/dist/cjs/z-info-reveal.cjs.entry.js +2 -2
  55. package/dist/cjs/z-logo.cjs.entry.js +1 -1
  56. package/dist/cjs/z-menu-deprecated.cjs.entry.js +1 -1
  57. package/dist/cjs/z-menu-section-deprecated.cjs.entry.js +1 -1
  58. package/dist/cjs/z-menu-section.cjs.entry.js +2 -2
  59. package/dist/cjs/z-menu.cjs.entry.js +2 -2
  60. package/dist/cjs/z-menu.cjs.entry.js.map +1 -1
  61. package/dist/cjs/z-myz-card-alert.cjs.entry.js +2 -2
  62. package/dist/cjs/z-myz-card-dictionary.cjs.entry.js +2 -2
  63. package/dist/cjs/z-myz-card-footer-sections.cjs.entry.js +1 -1
  64. package/dist/cjs/z-myz-card-footer.cjs.entry.js +2 -2
  65. package/dist/cjs/z-myz-card-icon.cjs.entry.js +1 -1
  66. package/dist/cjs/z-myz-card-info.cjs.entry.js +3 -3
  67. package/dist/cjs/z-myz-card-list.cjs.entry.js +1 -1
  68. package/dist/cjs/z-myz-card_4.cjs.entry.js +5 -5
  69. package/dist/cjs/z-myz-list-item.cjs.entry.js +3 -3
  70. package/dist/cjs/z-myz-list.cjs.entry.js +1 -1
  71. package/dist/cjs/z-navigation-tabs.cjs.entry.js +3 -3
  72. package/dist/cjs/z-notification.cjs.entry.js +2 -2
  73. package/dist/cjs/z-notification.cjs.entry.js.map +1 -1
  74. package/dist/cjs/z-otp.cjs.entry.js +3 -3
  75. package/dist/cjs/z-pagination.cjs.entry.js +1 -1
  76. package/dist/cjs/z-panel-elem.cjs.entry.js +2 -2
  77. package/dist/cjs/z-popover.cjs.entry.js +20 -16
  78. package/dist/cjs/z-popover.cjs.entry.js.map +1 -1
  79. package/dist/cjs/z-range-picker.cjs.entry.js +5 -5
  80. package/dist/cjs/z-section-title.cjs.entry.js +2 -2
  81. package/dist/cjs/z-select.cjs.entry.js +3 -3
  82. package/dist/cjs/z-skip-to-content.cjs.entry.js +3 -3
  83. package/dist/cjs/z-slideshow.cjs.entry.js +2 -2
  84. package/dist/cjs/z-stepper-item.cjs.entry.js +1 -1
  85. package/dist/cjs/z-stepper.cjs.entry.js +1 -1
  86. package/dist/cjs/z-table.cjs.entry.js +9 -9
  87. package/dist/cjs/z-tbody.cjs.entry.js +1 -1
  88. package/dist/cjs/z-td.cjs.entry.js +2 -2
  89. package/dist/cjs/z-tfoot.cjs.entry.js +1 -1
  90. package/dist/cjs/z-th.cjs.entry.js +2 -2
  91. package/dist/cjs/z-thead.cjs.entry.js +1 -1
  92. package/dist/cjs/z-toast-notification-list.cjs.entry.js +2 -2
  93. package/dist/cjs/z-toast-notification.cjs.entry.js +2 -2
  94. package/dist/cjs/z-toggle-button.cjs.entry.js +2 -2
  95. package/dist/cjs/z-toggle-switch.cjs.entry.js +5 -5
  96. package/dist/cjs/z-tool.cjs.entry.js +210 -0
  97. package/dist/cjs/z-tool.cjs.entry.js.map +1 -0
  98. package/dist/cjs/z-toolbar.cjs.entry.js +148 -0
  99. package/dist/cjs/z-toolbar.cjs.entry.js.map +1 -0
  100. package/dist/cjs/z-tooltip.cjs.entry.js +3 -2
  101. package/dist/cjs/z-tooltip.cjs.entry.js.map +1 -1
  102. package/dist/cjs/z-tr.cjs.entry.js +5 -5
  103. package/dist/cjs/z-tree-list.cjs.entry.js +2 -2
  104. package/dist/cjs/z-visually-hidden.cjs.entry.js +1 -1
  105. package/dist/collection/beans/index.js +48 -0
  106. package/dist/collection/beans/index.js.map +1 -1
  107. package/dist/collection/collection-manifest.json +3 -0
  108. package/dist/collection/components/book-card/z-book-card-app/index.js +1 -1
  109. package/dist/collection/components/css-components/z-label/styles.css +10 -0
  110. package/dist/collection/components/date-picker/z-date-picker/index.js +1 -1
  111. package/dist/collection/components/date-picker/z-range-picker/index.js +3 -3
  112. package/dist/collection/components/deprecated/z-app-header-deprecated/index.js +1 -1
  113. package/dist/collection/components/deprecated/z-book-card-deprecated/index.js +1 -1
  114. package/dist/collection/components/deprecated/z-menu-deprecated/index.js +1 -1
  115. package/dist/collection/components/deprecated/z-menu-section-deprecated/index.js +1 -1
  116. package/dist/collection/components/deprecated/z-section-title/index.js +1 -1
  117. package/dist/collection/components/file-upload/z-dragdrop-area/index.js +2 -2
  118. package/dist/collection/components/file-upload/z-file/index.js +1 -1
  119. package/dist/collection/components/list/z-list/index.js +1 -1
  120. package/dist/collection/components/list/z-list-element/index.js +1 -1
  121. package/dist/collection/components/list/z-list-group/index.js +2 -2
  122. package/dist/collection/components/list/z-tree-list/index.js +1 -1
  123. package/dist/collection/components/table/cells/z-td/index.js +1 -1
  124. package/dist/collection/components/table/cells/z-th/index.js +1 -1
  125. package/dist/collection/components/table/z-table/index.js +1 -1
  126. package/dist/collection/components/table/z-tbody/index.js +1 -1
  127. package/dist/collection/components/table/z-tfoot/index.js +1 -1
  128. package/dist/collection/components/table/z-thead/index.js +1 -1
  129. package/dist/collection/components/table/z-tr/index.js +1 -1
  130. package/dist/collection/components/z-accordion/index.js +1 -1
  131. package/dist/collection/components/z-anchor-navigation/index.js +1 -1
  132. package/dist/collection/components/z-app-header/index.js +1 -1
  133. package/dist/collection/components/z-app-header/index.js.map +1 -1
  134. package/dist/collection/components/z-app-header/index.stories.js +42 -0
  135. package/dist/collection/components/z-app-header/index.stories.js.map +1 -1
  136. package/dist/collection/components/z-app-header/styles.css +8 -0
  137. package/dist/collection/components/z-aria-alert/index.js +1 -1
  138. package/dist/collection/components/z-avatar/index.js +2 -2
  139. package/dist/collection/components/z-book-cover/index.js +1 -1
  140. package/dist/collection/components/z-breadcrumb/index.js +2 -2
  141. package/dist/collection/components/z-button-sort/index.js +1 -1
  142. package/dist/collection/components/z-chip/index.js +2 -2
  143. package/dist/collection/components/z-color-picker/index.js +367 -0
  144. package/dist/collection/components/z-color-picker/index.js.map +1 -0
  145. package/dist/collection/components/z-color-picker/index.stories.js +34 -0
  146. package/dist/collection/components/z-color-picker/index.stories.js.map +1 -0
  147. package/dist/collection/components/z-color-picker/styles.css +74 -0
  148. package/dist/collection/components/z-combobox/index.js +1 -1
  149. package/dist/collection/components/z-cover-hero/index.js +2 -2
  150. package/dist/collection/components/z-divider/index.js +1 -1
  151. package/dist/collection/components/z-ghost-loading/index.js +1 -1
  152. package/dist/collection/components/z-icon/index.js +40 -9
  153. package/dist/collection/components/z-icon/index.js.map +1 -1
  154. package/dist/collection/components/z-icon/index.stories.js +34 -18
  155. package/dist/collection/components/z-icon/index.stories.js.map +1 -1
  156. package/dist/collection/components/z-icon/styles.css +15 -2
  157. package/dist/collection/components/z-info-box/index.js +1 -1
  158. package/dist/collection/components/z-info-reveal/index.js +1 -1
  159. package/dist/collection/components/z-input/index.js +1 -1
  160. package/dist/collection/components/z-input-message/index.js +1 -1
  161. package/dist/collection/components/z-logo/index.js +1 -1
  162. package/dist/collection/components/z-menu/index.js +1 -1
  163. package/dist/collection/components/z-menu/index.js.map +1 -1
  164. package/dist/collection/components/z-menu-section/index.js +1 -1
  165. package/dist/collection/components/z-modal/index.js +4 -4
  166. package/dist/collection/components/z-navigation-tabs/index.js +2 -2
  167. package/dist/collection/components/z-notification/index.js +1 -1
  168. package/dist/collection/components/z-notification/styles.css +2 -2
  169. package/dist/collection/components/z-offcanvas/index.js +89 -10
  170. package/dist/collection/components/z-offcanvas/index.js.map +1 -1
  171. package/dist/collection/components/z-panel-elem/index.js +2 -2
  172. package/dist/collection/components/z-popover/index.js +31 -21
  173. package/dist/collection/components/z-popover/index.js.map +1 -1
  174. package/dist/collection/components/z-popover/styles.css +18 -3
  175. package/dist/collection/components/z-searchbar/index.js +41 -5
  176. package/dist/collection/components/z-searchbar/index.js.map +1 -1
  177. package/dist/collection/components/z-searchbar/index.stories.js +13 -1
  178. package/dist/collection/components/z-searchbar/index.stories.js.map +1 -1
  179. package/dist/collection/components/z-select/index.js +1 -1
  180. package/dist/collection/components/z-skip-to-content/index.js +1 -1
  181. package/dist/collection/components/z-stepper/index.js +1 -1
  182. package/dist/collection/components/z-stepper-item/index.js +1 -1
  183. package/dist/collection/components/z-tag/index.js +2 -2
  184. package/dist/collection/components/z-toast-notification/index.js +1 -1
  185. package/dist/collection/components/z-toast-notification-list/index.js +1 -1
  186. package/dist/collection/components/z-toggle-button/index.js +2 -2
  187. package/dist/collection/components/z-toggle-switch/index.js +3 -3
  188. package/dist/collection/components/z-tool/index.js +501 -0
  189. package/dist/collection/components/z-tool/index.js.map +1 -0
  190. package/dist/collection/components/z-tool/index.stories.js +147 -0
  191. package/dist/collection/components/z-tool/index.stories.js.map +1 -0
  192. package/dist/collection/components/z-tool/styles.css +90 -0
  193. package/dist/collection/components/z-toolbar/index.js +208 -0
  194. package/dist/collection/components/z-toolbar/index.js.map +1 -0
  195. package/dist/collection/components/z-toolbar/index.stories.js +318 -0
  196. package/dist/collection/components/z-toolbar/index.stories.js.map +1 -0
  197. package/dist/collection/components/z-toolbar/styles.css +46 -0
  198. package/dist/collection/components/z-tooltip/index.js +19 -1
  199. package/dist/collection/components/z-tooltip/index.js.map +1 -1
  200. package/dist/collection/components/z-visually-hidden/index.js +1 -1
  201. package/dist/collection/constants/iconset.js +152 -142
  202. package/dist/collection/constants/iconset.js.map +1 -1
  203. package/dist/collection/index.js +1 -0
  204. package/dist/collection/index.js.map +1 -1
  205. package/dist/collection/snowflakes/myz/card/z-myz-card/index.js +1 -1
  206. package/dist/collection/snowflakes/myz/card/z-myz-card-alert/index.js +1 -1
  207. package/dist/collection/snowflakes/myz/card/z-myz-card-body/index.js +1 -1
  208. package/dist/collection/snowflakes/myz/card/z-myz-card-cover/index.js +1 -1
  209. package/dist/collection/snowflakes/myz/card/z-myz-card-dictionary/index.js +1 -1
  210. package/dist/collection/snowflakes/myz/card/z-myz-card-footer/index.js +1 -1
  211. package/dist/collection/snowflakes/myz/card/z-myz-card-footer-sections/index.js +1 -1
  212. package/dist/collection/snowflakes/myz/card/z-myz-card-header/index.js +1 -1
  213. package/dist/collection/snowflakes/myz/card/z-myz-card-icon/index.js +1 -1
  214. package/dist/collection/snowflakes/myz/card/z-myz-card-info/index.js +1 -1
  215. package/dist/collection/snowflakes/myz/card/z-myz-card-list/index.js +1 -1
  216. package/dist/collection/snowflakes/myz/list/z-myz-list/index.js +1 -1
  217. package/dist/collection/snowflakes/myz/list/z-myz-list-item/index.js +1 -1
  218. package/dist/collection/snowflakes/myz/z-alert/index.js +1 -1
  219. package/dist/collection/snowflakes/myz/z-otp/index.js +2 -2
  220. package/dist/collection/utils/utils.js +33 -4
  221. package/dist/collection/utils/utils.js.map +1 -1
  222. package/dist/components/iconset.js +152 -143
  223. package/dist/components/iconset.js.map +1 -1
  224. package/dist/components/index.d.ts +6 -0
  225. package/dist/components/index.js +5 -1
  226. package/dist/components/index.js.map +1 -1
  227. package/dist/components/index10.js +17 -6
  228. package/dist/components/index10.js.map +1 -1
  229. package/dist/components/index11.js +1 -1
  230. package/dist/components/index12.js +1 -1
  231. package/dist/components/index13.js +1 -1
  232. package/dist/components/index14.js +1 -1
  233. package/dist/components/index15.js +1 -1
  234. package/dist/components/index16.js +2 -2
  235. package/dist/components/index17.js +4 -4
  236. package/dist/components/index18.js +1 -1
  237. package/dist/components/index19.js +1 -1
  238. package/dist/components/index2.js +49 -1
  239. package/dist/components/index2.js.map +1 -1
  240. package/dist/components/index20.js +1 -1
  241. package/dist/components/index21.js +1 -1
  242. package/dist/components/index22.js +1 -1
  243. package/dist/components/index23.js +84 -11
  244. package/dist/components/index23.js.map +1 -1
  245. package/dist/components/index24.js +19 -15
  246. package/dist/components/index24.js.map +1 -1
  247. package/dist/components/index25.js +13 -6
  248. package/dist/components/index25.js.map +1 -1
  249. package/dist/components/index26.js +2 -2
  250. package/dist/components/index27.js +55 -0
  251. package/dist/components/index27.js.map +1 -0
  252. package/dist/components/index3.js +1 -1
  253. package/dist/components/index4.js +1 -1
  254. package/dist/components/index6.js +2 -2
  255. package/dist/components/index7.js +1 -1
  256. package/dist/components/index8.js +2 -2
  257. package/dist/components/index9.js +1 -1
  258. package/dist/components/utils.js +33 -4
  259. package/dist/components/utils.js.map +1 -1
  260. package/dist/components/z-accordion.js +1 -1
  261. package/dist/components/z-anchor-navigation.js +1 -1
  262. package/dist/components/z-app-header-deprecated.js +1 -1
  263. package/dist/components/z-app-header.js +2 -2
  264. package/dist/components/z-app-header.js.map +1 -1
  265. package/dist/components/z-aria-alert.js +1 -1
  266. package/dist/components/z-avatar.js +2 -2
  267. package/dist/components/z-book-card-app.js +1 -1
  268. package/dist/components/z-book-card-deprecated.js +1 -1
  269. package/dist/components/z-breadcrumb.js +2 -2
  270. package/dist/components/z-button-sort.js +1 -1
  271. package/dist/components/z-color-picker.d.ts +11 -0
  272. package/dist/components/z-color-picker.js +234 -0
  273. package/dist/components/z-color-picker.js.map +1 -0
  274. package/dist/components/z-combobox.js +1 -1
  275. package/dist/components/z-cover-hero.js +2 -2
  276. package/dist/components/z-date-picker.js +1 -1
  277. package/dist/components/z-file.js +1 -1
  278. package/dist/components/z-info-box.js +1 -1
  279. package/dist/components/z-logo.js +1 -1
  280. package/dist/components/z-menu-deprecated.js +1 -1
  281. package/dist/components/z-menu-section-deprecated.js +1 -1
  282. package/dist/components/z-menu-section.js +1 -1
  283. package/dist/components/z-menu.js +1 -1
  284. package/dist/components/z-menu.js.map +1 -1
  285. package/dist/components/z-myz-card-alert.js +1 -1
  286. package/dist/components/z-myz-card-dictionary.js +1 -1
  287. package/dist/components/z-myz-card-footer-sections.js +1 -1
  288. package/dist/components/z-myz-card-footer.js +1 -1
  289. package/dist/components/z-myz-card-icon.js +1 -1
  290. package/dist/components/z-myz-card-info.js +1 -1
  291. package/dist/components/z-myz-card-list.js +1 -1
  292. package/dist/components/z-myz-list.js +1 -1
  293. package/dist/components/z-navigation-tabs.js +2 -2
  294. package/dist/components/z-notification.js +2 -2
  295. package/dist/components/z-notification.js.map +1 -1
  296. package/dist/components/z-otp.js +2 -2
  297. package/dist/components/z-panel-elem.js +2 -2
  298. package/dist/components/z-range-picker.js +3 -3
  299. package/dist/components/z-section-title.js +1 -1
  300. package/dist/components/z-select.js +1 -1
  301. package/dist/components/z-skip-to-content.js +1 -1
  302. package/dist/components/z-stepper-item.js +1 -1
  303. package/dist/components/z-stepper.js +1 -1
  304. package/dist/components/z-table.js +1 -1
  305. package/dist/components/z-tbody.js +1 -1
  306. package/dist/components/z-td.js +1 -1
  307. package/dist/components/z-tfoot.js +1 -1
  308. package/dist/components/z-th.js +1 -1
  309. package/dist/components/z-thead.js +1 -1
  310. package/dist/components/z-toast-notification-list.js +1 -1
  311. package/dist/components/z-toast-notification.js +1 -1
  312. package/dist/components/z-toggle-button.js +2 -2
  313. package/dist/components/z-toggle-switch.js +3 -3
  314. package/dist/components/z-tool.d.ts +11 -0
  315. package/dist/components/z-tool.js +260 -0
  316. package/dist/components/z-tool.js.map +1 -0
  317. package/dist/components/z-toolbar.d.ts +11 -0
  318. package/dist/components/z-toolbar.js +165 -0
  319. package/dist/components/z-toolbar.js.map +1 -0
  320. package/dist/components/z-tooltip.js +1 -50
  321. package/dist/components/z-tooltip.js.map +1 -1
  322. package/dist/components/z-tr.js +1 -1
  323. package/dist/components/z-tree-list.js +1 -1
  324. package/dist/components/z-visually-hidden.js +1 -1
  325. package/dist/esm/iconset-d7823b13.js +1013 -0
  326. package/dist/esm/iconset-d7823b13.js.map +1 -0
  327. package/dist/esm/{index-2a6324f8.js → index-106473a8.js} +50 -2
  328. package/dist/esm/index-106473a8.js.map +1 -0
  329. package/dist/esm/{index-0bcacbd3.js → index-21176e80.js} +2 -2
  330. package/dist/esm/{index-0bcacbd3.js.map → index-21176e80.js.map} +1 -1
  331. package/dist/esm/{index-b64ced16.js → index-39a920c4.js} +3 -3
  332. package/dist/esm/{index-b64ced16.js.map → index-39a920c4.js.map} +1 -1
  333. package/dist/esm/{index-36122d8f.js → index-41934729.js} +2 -2
  334. package/dist/esm/{index-36122d8f.js.map → index-41934729.js.map} +1 -1
  335. package/dist/esm/{index-f20179ad.js → index-4845b32f.js} +3 -3
  336. package/dist/esm/{index-f20179ad.js.map → index-4845b32f.js.map} +1 -1
  337. package/dist/esm/{index-0ea3c7c8.js → index-599cd05a.js} +2 -2
  338. package/dist/esm/{index-0ea3c7c8.js.map → index-599cd05a.js.map} +1 -1
  339. package/dist/esm/index-c8ceadeb.js +14 -2
  340. package/dist/esm/{index-8a9f6d27.js → index-d003e5d7.js} +5 -5
  341. package/dist/esm/{index-8a9f6d27.js.map → index-d003e5d7.js.map} +1 -1
  342. package/dist/esm/index.js +3 -2
  343. package/dist/esm/index.js.map +1 -1
  344. package/dist/esm/loader.js +1 -1
  345. package/dist/esm/{utils-e66d94c3.js → utils-1b64bcd9.js} +35 -6
  346. package/dist/esm/utils-1b64bcd9.js.map +1 -0
  347. package/dist/esm/{utils-227ef1c0.js → utils-93ac0e6c.js} +2 -2
  348. package/dist/esm/{utils-227ef1c0.js.map → utils-93ac0e6c.js.map} +1 -1
  349. package/dist/esm/web-components-library.js +1 -1
  350. package/dist/esm/z-accordion.entry.js +2 -2
  351. package/dist/esm/z-alert.entry.js +1 -1
  352. package/dist/esm/z-anchor-navigation.entry.js +2 -2
  353. package/dist/esm/z-app-header-deprecated.entry.js +2 -2
  354. package/dist/esm/z-app-header_12.entry.js +139 -1051
  355. package/dist/esm/z-app-header_12.entry.js.map +1 -1
  356. package/dist/esm/z-aria-alert.entry.js +2 -2
  357. package/dist/esm/z-avatar.entry.js +3 -3
  358. package/dist/esm/z-book-card-app.entry.js +2 -2
  359. package/dist/esm/z-book-card-deprecated.entry.js +3 -3
  360. package/dist/esm/z-book-card.entry.js +1 -1
  361. package/dist/esm/z-book-cover.entry.js +1 -1
  362. package/dist/esm/z-breadcrumb.entry.js +4 -4
  363. package/dist/esm/z-button-sort.entry.js +1 -1
  364. package/dist/esm/z-card.entry.js +1 -1
  365. package/dist/esm/z-carousel.entry.js +1 -1
  366. package/dist/esm/z-chip.entry.js +3 -3
  367. package/dist/esm/z-color-picker.entry.js +208 -0
  368. package/dist/esm/z-color-picker.entry.js.map +1 -0
  369. package/dist/esm/z-combobox.entry.js +3 -3
  370. package/dist/esm/z-cover-hero.entry.js +3 -3
  371. package/dist/esm/z-date-picker.entry.js +3 -3
  372. package/dist/esm/z-dragdrop-area_2.entry.js +7 -7
  373. package/dist/esm/z-file-upload.entry.js +1 -1
  374. package/dist/esm/z-file.entry.js +2 -2
  375. package/dist/esm/z-ghost-loading.entry.js +1 -1
  376. package/dist/esm/z-info-box.entry.js +1 -1
  377. package/dist/esm/z-info-reveal.entry.js +2 -2
  378. package/dist/esm/z-logo.entry.js +1 -1
  379. package/dist/esm/z-menu-deprecated.entry.js +1 -1
  380. package/dist/esm/z-menu-section-deprecated.entry.js +1 -1
  381. package/dist/esm/z-menu-section.entry.js +2 -2
  382. package/dist/esm/z-menu.entry.js +2 -2
  383. package/dist/esm/z-menu.entry.js.map +1 -1
  384. package/dist/esm/z-myz-card-alert.entry.js +2 -2
  385. package/dist/esm/z-myz-card-dictionary.entry.js +2 -2
  386. package/dist/esm/z-myz-card-footer-sections.entry.js +1 -1
  387. package/dist/esm/z-myz-card-footer.entry.js +2 -2
  388. package/dist/esm/z-myz-card-icon.entry.js +1 -1
  389. package/dist/esm/z-myz-card-info.entry.js +3 -3
  390. package/dist/esm/z-myz-card-list.entry.js +1 -1
  391. package/dist/esm/z-myz-card_4.entry.js +5 -5
  392. package/dist/esm/z-myz-list-item.entry.js +3 -3
  393. package/dist/esm/z-myz-list.entry.js +1 -1
  394. package/dist/esm/z-navigation-tabs.entry.js +3 -3
  395. package/dist/esm/z-notification.entry.js +2 -2
  396. package/dist/esm/z-notification.entry.js.map +1 -1
  397. package/dist/esm/z-otp.entry.js +3 -3
  398. package/dist/esm/z-pagination.entry.js +1 -1
  399. package/dist/esm/z-panel-elem.entry.js +2 -2
  400. package/dist/esm/z-popover.entry.js +20 -16
  401. package/dist/esm/z-popover.entry.js.map +1 -1
  402. package/dist/esm/z-range-picker.entry.js +5 -5
  403. package/dist/esm/z-section-title.entry.js +2 -2
  404. package/dist/esm/z-select.entry.js +3 -3
  405. package/dist/esm/z-skip-to-content.entry.js +3 -3
  406. package/dist/esm/z-slideshow.entry.js +2 -2
  407. package/dist/esm/z-stepper-item.entry.js +1 -1
  408. package/dist/esm/z-stepper.entry.js +1 -1
  409. package/dist/esm/z-table.entry.js +9 -9
  410. package/dist/esm/z-tbody.entry.js +1 -1
  411. package/dist/esm/z-td.entry.js +2 -2
  412. package/dist/esm/z-tfoot.entry.js +1 -1
  413. package/dist/esm/z-th.entry.js +2 -2
  414. package/dist/esm/z-thead.entry.js +1 -1
  415. package/dist/esm/z-toast-notification-list.entry.js +2 -2
  416. package/dist/esm/z-toast-notification.entry.js +2 -2
  417. package/dist/esm/z-toggle-button.entry.js +2 -2
  418. package/dist/esm/z-toggle-switch.entry.js +5 -5
  419. package/dist/esm/z-tool.entry.js +206 -0
  420. package/dist/esm/z-tool.entry.js.map +1 -0
  421. package/dist/esm/z-toolbar.entry.js +144 -0
  422. package/dist/esm/z-toolbar.entry.js.map +1 -0
  423. package/dist/esm/z-tooltip.entry.js +4 -3
  424. package/dist/esm/z-tooltip.entry.js.map +1 -1
  425. package/dist/esm/z-tr.entry.js +5 -5
  426. package/dist/esm/z-tree-list.entry.js +2 -2
  427. package/dist/esm/z-visually-hidden.entry.js +1 -1
  428. package/dist/types/beans/index.d.ts +184 -0
  429. package/dist/types/components/z-app-header/index.stories.d.ts +16 -0
  430. package/dist/types/components/z-color-picker/index.d.ts +64 -0
  431. package/dist/types/components/z-color-picker/index.stories.d.ts +33 -0
  432. package/dist/types/components/z-icon/index.d.ts +19 -5
  433. package/dist/types/components/z-icon/index.stories.d.ts +23 -10
  434. package/dist/types/components/z-offcanvas/index.d.ts +24 -0
  435. package/dist/types/components/z-popover/index.d.ts +9 -4
  436. package/dist/types/components/z-searchbar/index.d.ts +4 -0
  437. package/dist/types/components/z-searchbar/index.stories.d.ts +2 -0
  438. package/dist/types/components/z-tool/index.d.ts +103 -0
  439. package/dist/types/components/z-tool/index.stories.d.ts +70 -0
  440. package/dist/types/components/z-toolbar/index.d.ts +46 -0
  441. package/dist/types/components/z-toolbar/index.stories.d.ts +52 -0
  442. package/dist/types/components/z-tooltip/index.d.ts +8 -0
  443. package/dist/types/components.d.ts +338 -19
  444. package/dist/types/constants/iconset.d.ts +281 -141
  445. package/dist/types/index.d.ts +1 -0
  446. package/dist/types/utils/utils.d.ts +3 -2
  447. package/dist/web-components-library/index.esm.js +1 -1
  448. package/dist/web-components-library/index.esm.js.map +1 -1
  449. package/{www/build/p-5a24e268.entry.js → dist/web-components-library/p-03a558ef.entry.js} +2 -2
  450. package/dist/web-components-library/p-0989655c.entry.js +2 -0
  451. package/dist/web-components-library/p-0989655c.entry.js.map +1 -0
  452. package/dist/web-components-library/p-0a192ddf.entry.js +2 -0
  453. package/dist/web-components-library/p-0a192ddf.entry.js.map +1 -0
  454. package/dist/web-components-library/{p-460b2068.entry.js → p-15951fc6.entry.js} +2 -2
  455. package/dist/web-components-library/p-17e2fed2.entry.js +2 -0
  456. package/dist/web-components-library/{p-b7ec2cc4.entry.js → p-19172b2c.entry.js} +2 -2
  457. package/{www/build/p-94916bdf.entry.js → dist/web-components-library/p-1939116a.entry.js} +2 -2
  458. package/dist/web-components-library/p-1a0c206d.js +2 -0
  459. package/dist/web-components-library/p-1a0c206d.js.map +1 -0
  460. package/dist/web-components-library/{p-b71a3f69.entry.js → p-1e0d85d5.entry.js} +2 -2
  461. package/dist/web-components-library/{p-2ffdfbb1.entry.js → p-215b1fa5.entry.js} +2 -2
  462. package/dist/web-components-library/{p-99210133.entry.js → p-2501dd29.entry.js} +2 -2
  463. package/dist/web-components-library/p-2a04c00e.entry.js +2 -0
  464. package/{www/build/p-816fd6dc.entry.js.map → dist/web-components-library/p-2a04c00e.entry.js.map} +1 -1
  465. package/{www/build/p-1fd1cf02.entry.js → dist/web-components-library/p-2bba665d.entry.js} +2 -2
  466. package/dist/web-components-library/{p-5a1f98a2.entry.js → p-2f45f1ff.entry.js} +2 -2
  467. package/dist/web-components-library/{p-86160fe3.entry.js → p-332e0361.entry.js} +2 -2
  468. package/{www/build/p-4cec3345.entry.js → dist/web-components-library/p-3d02ad75.entry.js} +2 -2
  469. package/dist/web-components-library/{p-240de9aa.entry.js → p-3f66654f.entry.js} +2 -2
  470. package/{www/build/p-8c164e0d.entry.js → dist/web-components-library/p-41891d34.entry.js} +2 -2
  471. package/dist/web-components-library/{p-ceeb3e2a.entry.js → p-4df66afe.entry.js} +2 -2
  472. package/dist/web-components-library/{p-748fa3ae.js → p-54cd104c.js} +2 -2
  473. package/dist/web-components-library/{p-01f941c2.entry.js → p-57dcff49.entry.js} +2 -2
  474. package/{www/build/p-b96900bb.entry.js → dist/web-components-library/p-59baa7f5.entry.js} +2 -2
  475. package/dist/web-components-library/{p-4551b0df.entry.js → p-5cdd431e.entry.js} +2 -2
  476. package/dist/web-components-library/{p-f19f12b1.js → p-5f1e17cb.js} +2 -2
  477. package/{www/build/p-c778bf87.entry.js → dist/web-components-library/p-5fda8769.entry.js} +3 -3
  478. package/dist/web-components-library/{p-4affbb99.entry.js → p-661bce1c.entry.js} +2 -2
  479. package/dist/web-components-library/{p-ee695830.entry.js → p-66c0f993.entry.js} +2 -2
  480. package/dist/web-components-library/{p-e9e2ceb4.entry.js → p-684142d7.entry.js} +2 -2
  481. package/dist/web-components-library/p-6af67a60.entry.js +2 -0
  482. package/dist/web-components-library/p-6af67a60.entry.js.map +1 -0
  483. package/dist/web-components-library/p-6c3d141b.entry.js +2 -0
  484. package/dist/web-components-library/{p-22ba2a17.entry.js → p-6d11da08.entry.js} +2 -2
  485. package/dist/web-components-library/{p-b7b972c0.entry.js → p-6d61933f.entry.js} +2 -2
  486. package/dist/web-components-library/{p-dc086eb5.entry.js → p-6ef58a14.entry.js} +2 -2
  487. package/dist/web-components-library/{p-a905df88.entry.js → p-71f62226.entry.js} +2 -2
  488. package/dist/web-components-library/p-76003048.entry.js +2 -0
  489. package/dist/web-components-library/p-76003048.entry.js.map +1 -0
  490. package/dist/web-components-library/{p-0a49dd1c.entry.js → p-7b199026.entry.js} +2 -2
  491. package/dist/web-components-library/p-7d6c4b21.entry.js +2 -0
  492. package/dist/web-components-library/p-7d6c4b21.entry.js.map +1 -0
  493. package/dist/web-components-library/{p-d7f12672.js → p-80285500.js} +2 -2
  494. package/dist/web-components-library/{p-a2e87cec.entry.js → p-80ddecaf.entry.js} +2 -2
  495. package/dist/web-components-library/p-839e2478.entry.js +2 -0
  496. package/{www/build/p-daa1ffe9.entry.js → dist/web-components-library/p-84ed6163.entry.js} +2 -2
  497. package/dist/web-components-library/p-86618221.js +2 -0
  498. package/dist/web-components-library/p-86618221.js.map +1 -0
  499. package/dist/web-components-library/{p-757415e9.entry.js → p-88a9865c.entry.js} +2 -2
  500. package/{www/build/p-1844a4f4.entry.js → dist/web-components-library/p-8a53fefb.entry.js} +2 -2
  501. package/dist/web-components-library/{p-d6a7b7f3.entry.js → p-8b562dca.entry.js} +2 -2
  502. package/dist/web-components-library/{p-28534fb5.entry.js → p-90690d4d.entry.js} +2 -2
  503. package/dist/web-components-library/{p-307c9c33.entry.js → p-9a63ec80.entry.js} +2 -2
  504. package/dist/web-components-library/p-9af837bb.entry.js +2 -0
  505. package/dist/web-components-library/p-a32ebcc3.entry.js +2 -0
  506. package/dist/web-components-library/p-a7bb5e87.js +2 -0
  507. package/{www/build/p-030257b3.js.map → dist/web-components-library/p-a7bb5e87.js.map} +1 -1
  508. package/dist/web-components-library/p-b06af2fc.js +2 -0
  509. package/{www/build/p-817689d5.entry.js → dist/web-components-library/p-b1f2388a.entry.js} +3 -3
  510. package/{www/build/p-342b0eb0.entry.js → dist/web-components-library/p-b421424f.entry.js} +2 -2
  511. package/dist/web-components-library/{p-fb232d07.entry.js → p-b4b264b1.entry.js} +2 -2
  512. package/dist/web-components-library/{p-cc18a2b7.entry.js → p-b8211903.entry.js} +2 -2
  513. package/{www/build/p-b63c8e8b.entry.js → dist/web-components-library/p-b854cc3d.entry.js} +2 -2
  514. package/dist/web-components-library/{p-4a257653.entry.js → p-c03767a4.entry.js} +2 -2
  515. package/dist/web-components-library/{p-2bdac94e.entry.js → p-c0b4f29d.entry.js} +2 -2
  516. package/dist/web-components-library/{p-7a4f6a5b.entry.js → p-c57bb632.entry.js} +2 -2
  517. package/{www/build/p-3f5aa623.entry.js → dist/web-components-library/p-c5d52872.entry.js} +2 -2
  518. package/dist/web-components-library/p-c5d52872.entry.js.map +1 -0
  519. package/dist/web-components-library/p-c5e032de.entry.js +2 -0
  520. package/dist/web-components-library/p-c5e032de.entry.js.map +1 -0
  521. package/{www/build/p-028dd72a.entry.js → dist/web-components-library/p-c645dc11.entry.js} +2 -2
  522. package/dist/web-components-library/p-c93c6135.entry.js +2 -0
  523. package/dist/web-components-library/{p-deb7f8d7.entry.js.map → p-c93c6135.entry.js.map} +1 -1
  524. package/dist/web-components-library/{p-30e42fb1.js → p-cb395500.js} +2 -2
  525. package/dist/web-components-library/{p-5989465b.entry.js → p-cc87d814.entry.js} +2 -2
  526. package/dist/web-components-library/{p-1c7550f9.entry.js → p-d1a04722.entry.js} +2 -2
  527. package/{www/build/p-e3b82454.entry.js → dist/web-components-library/p-d1fe7960.entry.js} +2 -2
  528. package/dist/web-components-library/{p-863fd1c4.entry.js → p-d5ebbfdf.entry.js} +2 -2
  529. package/dist/web-components-library/p-d65aeb54.entry.js +2 -0
  530. package/dist/web-components-library/{p-2612e3a2.entry.js → p-daa442e6.entry.js} +2 -2
  531. package/dist/web-components-library/p-db2c3235.entry.js +2 -0
  532. package/dist/web-components-library/p-db2c3235.entry.js.map +1 -0
  533. package/dist/web-components-library/{p-e0b88075.entry.js → p-dba260f2.entry.js} +2 -2
  534. package/dist/web-components-library/{p-943db3a8.entry.js → p-ddae9016.entry.js} +2 -2
  535. package/dist/web-components-library/p-de313d96.entry.js +2 -0
  536. package/dist/web-components-library/{p-5c5882c6.entry.js → p-e38a5dd2.entry.js} +2 -2
  537. package/dist/web-components-library/p-eb15536d.js +2 -0
  538. package/dist/web-components-library/p-eb15536d.js.map +1 -0
  539. package/{www/build/p-f4bac89b.entry.js → dist/web-components-library/p-eb9161bc.entry.js} +2 -2
  540. package/dist/web-components-library/{p-f487290e.entry.js → p-f0f53bb2.entry.js} +2 -2
  541. package/dist/web-components-library/p-f79010de.js +2 -0
  542. package/{www/build/p-19f5b6a9.entry.js → dist/web-components-library/p-f9e41b2e.entry.js} +2 -2
  543. package/dist/web-components-library/web-components-library.esm.js +1 -1
  544. package/dist/web-components-library/web-components-library.esm.js.map +1 -1
  545. package/package.json +1 -1
  546. package/react/components.d.ts +3 -0
  547. package/react/components.js +5 -2
  548. package/react/components.js.map +1 -1
  549. package/www/build/index.esm.js +1 -1
  550. package/www/build/index.esm.js.map +1 -1
  551. package/{dist/web-components-library/p-5a24e268.entry.js → www/build/p-03a558ef.entry.js} +2 -2
  552. package/www/build/p-0989655c.entry.js +2 -0
  553. package/www/build/p-0989655c.entry.js.map +1 -0
  554. package/www/build/p-0a192ddf.entry.js +2 -0
  555. package/www/build/p-0a192ddf.entry.js.map +1 -0
  556. package/www/build/{p-460b2068.entry.js → p-15951fc6.entry.js} +2 -2
  557. package/www/build/p-17e2fed2.entry.js +2 -0
  558. package/www/build/{p-b7ec2cc4.entry.js → p-19172b2c.entry.js} +2 -2
  559. package/{dist/web-components-library/p-94916bdf.entry.js → www/build/p-1939116a.entry.js} +2 -2
  560. package/www/build/p-1a0c206d.js +2 -0
  561. package/www/build/p-1a0c206d.js.map +1 -0
  562. package/www/build/{p-b71a3f69.entry.js → p-1e0d85d5.entry.js} +2 -2
  563. package/www/build/{p-2ffdfbb1.entry.js → p-215b1fa5.entry.js} +2 -2
  564. package/www/build/{p-99210133.entry.js → p-2501dd29.entry.js} +2 -2
  565. package/www/build/p-2a04c00e.entry.js +2 -0
  566. package/{dist/web-components-library/p-816fd6dc.entry.js.map → www/build/p-2a04c00e.entry.js.map} +1 -1
  567. package/{dist/web-components-library/p-1fd1cf02.entry.js → www/build/p-2bba665d.entry.js} +2 -2
  568. package/www/build/{p-5a1f98a2.entry.js → p-2f45f1ff.entry.js} +2 -2
  569. package/www/build/{p-86160fe3.entry.js → p-332e0361.entry.js} +2 -2
  570. package/www/build/p-385363df.js +2 -0
  571. package/{dist/web-components-library/p-4cec3345.entry.js → www/build/p-3d02ad75.entry.js} +2 -2
  572. package/www/build/{p-240de9aa.entry.js → p-3f66654f.entry.js} +2 -2
  573. package/{dist/web-components-library/p-8c164e0d.entry.js → www/build/p-41891d34.entry.js} +2 -2
  574. package/www/build/{p-ceeb3e2a.entry.js → p-4df66afe.entry.js} +2 -2
  575. package/www/build/{p-748fa3ae.js → p-54cd104c.js} +2 -2
  576. package/www/build/{p-01f941c2.entry.js → p-57dcff49.entry.js} +2 -2
  577. package/{dist/web-components-library/p-b96900bb.entry.js → www/build/p-59baa7f5.entry.js} +2 -2
  578. package/www/build/{p-4551b0df.entry.js → p-5cdd431e.entry.js} +2 -2
  579. package/www/build/{p-f19f12b1.js → p-5f1e17cb.js} +2 -2
  580. package/{dist/web-components-library/p-c778bf87.entry.js → www/build/p-5fda8769.entry.js} +3 -3
  581. package/www/build/{p-4affbb99.entry.js → p-661bce1c.entry.js} +2 -2
  582. package/www/build/{p-ee695830.entry.js → p-66c0f993.entry.js} +2 -2
  583. package/www/build/{p-e9e2ceb4.entry.js → p-684142d7.entry.js} +2 -2
  584. package/www/build/p-6af67a60.entry.js +2 -0
  585. package/www/build/p-6af67a60.entry.js.map +1 -0
  586. package/www/build/p-6c3d141b.entry.js +2 -0
  587. package/www/build/{p-22ba2a17.entry.js → p-6d11da08.entry.js} +2 -2
  588. package/www/build/{p-b7b972c0.entry.js → p-6d61933f.entry.js} +2 -2
  589. package/www/build/{p-dc086eb5.entry.js → p-6ef58a14.entry.js} +2 -2
  590. package/www/build/{p-a905df88.entry.js → p-71f62226.entry.js} +2 -2
  591. package/www/build/p-76003048.entry.js +2 -0
  592. package/www/build/p-76003048.entry.js.map +1 -0
  593. package/www/build/{p-0a49dd1c.entry.js → p-7b199026.entry.js} +2 -2
  594. package/www/build/p-7d6c4b21.entry.js +2 -0
  595. package/www/build/p-7d6c4b21.entry.js.map +1 -0
  596. package/www/build/{p-d7f12672.js → p-80285500.js} +2 -2
  597. package/www/build/{p-a2e87cec.entry.js → p-80ddecaf.entry.js} +2 -2
  598. package/www/build/p-839e2478.entry.js +2 -0
  599. package/{dist/web-components-library/p-daa1ffe9.entry.js → www/build/p-84ed6163.entry.js} +2 -2
  600. package/www/build/p-86618221.js +2 -0
  601. package/www/build/p-86618221.js.map +1 -0
  602. package/www/build/{p-757415e9.entry.js → p-88a9865c.entry.js} +2 -2
  603. package/{dist/web-components-library/p-1844a4f4.entry.js → www/build/p-8a53fefb.entry.js} +2 -2
  604. package/www/build/{p-d6a7b7f3.entry.js → p-8b562dca.entry.js} +2 -2
  605. package/www/build/{p-28534fb5.entry.js → p-90690d4d.entry.js} +2 -2
  606. package/www/build/{p-307c9c33.entry.js → p-9a63ec80.entry.js} +2 -2
  607. package/www/build/p-9af837bb.entry.js +2 -0
  608. package/www/build/p-a32ebcc3.entry.js +2 -0
  609. package/www/build/p-a7bb5e87.js +2 -0
  610. package/{dist/web-components-library/p-030257b3.js.map → www/build/p-a7bb5e87.js.map} +1 -1
  611. package/www/build/p-b06af2fc.js +2 -0
  612. package/{dist/web-components-library/p-817689d5.entry.js → www/build/p-b1f2388a.entry.js} +3 -3
  613. package/{dist/web-components-library/p-342b0eb0.entry.js → www/build/p-b421424f.entry.js} +2 -2
  614. package/www/build/{p-fb232d07.entry.js → p-b4b264b1.entry.js} +2 -2
  615. package/www/build/{p-cc18a2b7.entry.js → p-b8211903.entry.js} +2 -2
  616. package/{dist/web-components-library/p-b63c8e8b.entry.js → www/build/p-b854cc3d.entry.js} +2 -2
  617. package/www/build/{p-4a257653.entry.js → p-c03767a4.entry.js} +2 -2
  618. package/www/build/{p-2bdac94e.entry.js → p-c0b4f29d.entry.js} +2 -2
  619. package/www/build/{p-7a4f6a5b.entry.js → p-c57bb632.entry.js} +2 -2
  620. package/{dist/web-components-library/p-3f5aa623.entry.js → www/build/p-c5d52872.entry.js} +2 -2
  621. package/www/build/p-c5d52872.entry.js.map +1 -0
  622. package/www/build/p-c5e032de.entry.js +2 -0
  623. package/www/build/p-c5e032de.entry.js.map +1 -0
  624. package/{dist/web-components-library/p-028dd72a.entry.js → www/build/p-c645dc11.entry.js} +2 -2
  625. package/www/build/p-c93c6135.entry.js +2 -0
  626. package/www/build/{p-deb7f8d7.entry.js.map → p-c93c6135.entry.js.map} +1 -1
  627. package/www/build/{p-30e42fb1.js → p-cb395500.js} +2 -2
  628. package/www/build/{p-5989465b.entry.js → p-cc87d814.entry.js} +2 -2
  629. package/www/build/{p-1c7550f9.entry.js → p-d1a04722.entry.js} +2 -2
  630. package/{dist/web-components-library/p-e3b82454.entry.js → www/build/p-d1fe7960.entry.js} +2 -2
  631. package/www/build/{p-863fd1c4.entry.js → p-d5ebbfdf.entry.js} +2 -2
  632. package/www/build/p-d65aeb54.entry.js +2 -0
  633. package/www/build/{p-2612e3a2.entry.js → p-daa442e6.entry.js} +2 -2
  634. package/www/build/p-db2c3235.entry.js +2 -0
  635. package/www/build/p-db2c3235.entry.js.map +1 -0
  636. package/www/build/{p-e0b88075.entry.js → p-dba260f2.entry.js} +2 -2
  637. package/www/build/{p-943db3a8.entry.js → p-ddae9016.entry.js} +2 -2
  638. package/www/build/p-de313d96.entry.js +2 -0
  639. package/www/build/{p-5c5882c6.entry.js → p-e38a5dd2.entry.js} +2 -2
  640. package/www/build/p-eb15536d.js +2 -0
  641. package/www/build/p-eb15536d.js.map +1 -0
  642. package/{dist/web-components-library/p-f4bac89b.entry.js → www/build/p-eb9161bc.entry.js} +2 -2
  643. package/www/build/{p-f487290e.entry.js → p-f0f53bb2.entry.js} +2 -2
  644. package/www/build/p-f79010de.js +2 -0
  645. package/{dist/web-components-library/p-19f5b6a9.entry.js → www/build/p-f9e41b2e.entry.js} +2 -2
  646. package/www/build/web-components-library.esm.js +1 -1
  647. package/www/build/web-components-library.esm.js.map +1 -1
  648. package/www/index.html +1 -1
  649. package/dist/cjs/index-97a4c18d.js.map +0 -1
  650. package/dist/cjs/utils-5148245a.js.map +0 -1
  651. package/dist/esm/index-2a6324f8.js.map +0 -1
  652. package/dist/esm/utils-e66d94c3.js.map +0 -1
  653. package/dist/web-components-library/p-030257b3.js +0 -2
  654. package/dist/web-components-library/p-1170826b.js +0 -2
  655. package/dist/web-components-library/p-17af7fb2.js +0 -2
  656. package/dist/web-components-library/p-17af7fb2.js.map +0 -1
  657. package/dist/web-components-library/p-237fcaa9.entry.js +0 -2
  658. package/dist/web-components-library/p-334cba5d.entry.js +0 -2
  659. package/dist/web-components-library/p-334cba5d.entry.js.map +0 -1
  660. package/dist/web-components-library/p-33d2a5db.entry.js +0 -2
  661. package/dist/web-components-library/p-33d2a5db.entry.js.map +0 -1
  662. package/dist/web-components-library/p-3f5aa623.entry.js.map +0 -1
  663. package/dist/web-components-library/p-4c9bf42d.js +0 -2
  664. package/dist/web-components-library/p-6cffbabc.entry.js +0 -2
  665. package/dist/web-components-library/p-6cffbabc.entry.js.map +0 -1
  666. package/dist/web-components-library/p-75e47ecf.entry.js +0 -2
  667. package/dist/web-components-library/p-75e47ecf.entry.js.map +0 -1
  668. package/dist/web-components-library/p-816fd6dc.entry.js +0 -2
  669. package/dist/web-components-library/p-9e3da0b7.entry.js +0 -2
  670. package/dist/web-components-library/p-af5e8524.entry.js +0 -2
  671. package/dist/web-components-library/p-d2035d26.entry.js +0 -2
  672. package/dist/web-components-library/p-d75f8bbb.entry.js +0 -2
  673. package/dist/web-components-library/p-d90d2698.entry.js +0 -2
  674. package/dist/web-components-library/p-deb7f8d7.entry.js +0 -2
  675. package/dist/web-components-library/p-e5407cc1.entry.js +0 -2
  676. package/dist/web-components-library/p-e6778114.js +0 -2
  677. package/dist/web-components-library/p-e6778114.js.map +0 -1
  678. package/www/build/p-030257b3.js +0 -2
  679. package/www/build/p-1170826b.js +0 -2
  680. package/www/build/p-17af7fb2.js +0 -2
  681. package/www/build/p-17af7fb2.js.map +0 -1
  682. package/www/build/p-237fcaa9.entry.js +0 -2
  683. package/www/build/p-334cba5d.entry.js +0 -2
  684. package/www/build/p-334cba5d.entry.js.map +0 -1
  685. package/www/build/p-33d2a5db.entry.js +0 -2
  686. package/www/build/p-33d2a5db.entry.js.map +0 -1
  687. package/www/build/p-3f5aa623.entry.js.map +0 -1
  688. package/www/build/p-4c9bf42d.js +0 -2
  689. package/www/build/p-6cffbabc.entry.js +0 -2
  690. package/www/build/p-6cffbabc.entry.js.map +0 -1
  691. package/www/build/p-75e47ecf.entry.js +0 -2
  692. package/www/build/p-75e47ecf.entry.js.map +0 -1
  693. package/www/build/p-7646bea0.js +0 -2
  694. package/www/build/p-816fd6dc.entry.js +0 -2
  695. package/www/build/p-9e3da0b7.entry.js +0 -2
  696. package/www/build/p-af5e8524.entry.js +0 -2
  697. package/www/build/p-d2035d26.entry.js +0 -2
  698. package/www/build/p-d75f8bbb.entry.js +0 -2
  699. package/www/build/p-d90d2698.entry.js +0 -2
  700. package/www/build/p-deb7f8d7.entry.js +0 -2
  701. package/www/build/p-e5407cc1.entry.js +0 -2
  702. package/www/build/p-e6778114.js +0 -2
  703. package/www/build/p-e6778114.js.map +0 -1
  704. /package/dist/web-components-library/{p-5a24e268.entry.js.map → p-03a558ef.entry.js.map} +0 -0
  705. /package/dist/web-components-library/{p-460b2068.entry.js.map → p-15951fc6.entry.js.map} +0 -0
  706. /package/dist/web-components-library/{p-237fcaa9.entry.js.map → p-17e2fed2.entry.js.map} +0 -0
  707. /package/dist/web-components-library/{p-b7ec2cc4.entry.js.map → p-19172b2c.entry.js.map} +0 -0
  708. /package/dist/web-components-library/{p-94916bdf.entry.js.map → p-1939116a.entry.js.map} +0 -0
  709. /package/dist/web-components-library/{p-b71a3f69.entry.js.map → p-1e0d85d5.entry.js.map} +0 -0
  710. /package/dist/web-components-library/{p-2ffdfbb1.entry.js.map → p-215b1fa5.entry.js.map} +0 -0
  711. /package/dist/web-components-library/{p-99210133.entry.js.map → p-2501dd29.entry.js.map} +0 -0
  712. /package/dist/web-components-library/{p-1fd1cf02.entry.js.map → p-2bba665d.entry.js.map} +0 -0
  713. /package/dist/web-components-library/{p-5a1f98a2.entry.js.map → p-2f45f1ff.entry.js.map} +0 -0
  714. /package/dist/web-components-library/{p-86160fe3.entry.js.map → p-332e0361.entry.js.map} +0 -0
  715. /package/dist/web-components-library/{p-4cec3345.entry.js.map → p-3d02ad75.entry.js.map} +0 -0
  716. /package/dist/web-components-library/{p-240de9aa.entry.js.map → p-3f66654f.entry.js.map} +0 -0
  717. /package/dist/web-components-library/{p-8c164e0d.entry.js.map → p-41891d34.entry.js.map} +0 -0
  718. /package/dist/web-components-library/{p-ceeb3e2a.entry.js.map → p-4df66afe.entry.js.map} +0 -0
  719. /package/dist/web-components-library/{p-748fa3ae.js.map → p-54cd104c.js.map} +0 -0
  720. /package/dist/web-components-library/{p-01f941c2.entry.js.map → p-57dcff49.entry.js.map} +0 -0
  721. /package/dist/web-components-library/{p-b96900bb.entry.js.map → p-59baa7f5.entry.js.map} +0 -0
  722. /package/dist/web-components-library/{p-4551b0df.entry.js.map → p-5cdd431e.entry.js.map} +0 -0
  723. /package/dist/web-components-library/{p-f19f12b1.js.map → p-5f1e17cb.js.map} +0 -0
  724. /package/dist/web-components-library/{p-c778bf87.entry.js.map → p-5fda8769.entry.js.map} +0 -0
  725. /package/dist/web-components-library/{p-4affbb99.entry.js.map → p-661bce1c.entry.js.map} +0 -0
  726. /package/dist/web-components-library/{p-ee695830.entry.js.map → p-66c0f993.entry.js.map} +0 -0
  727. /package/dist/web-components-library/{p-e9e2ceb4.entry.js.map → p-684142d7.entry.js.map} +0 -0
  728. /package/dist/web-components-library/{p-9e3da0b7.entry.js.map → p-6c3d141b.entry.js.map} +0 -0
  729. /package/dist/web-components-library/{p-22ba2a17.entry.js.map → p-6d11da08.entry.js.map} +0 -0
  730. /package/dist/web-components-library/{p-b7b972c0.entry.js.map → p-6d61933f.entry.js.map} +0 -0
  731. /package/dist/web-components-library/{p-dc086eb5.entry.js.map → p-6ef58a14.entry.js.map} +0 -0
  732. /package/dist/web-components-library/{p-a905df88.entry.js.map → p-71f62226.entry.js.map} +0 -0
  733. /package/dist/web-components-library/{p-0a49dd1c.entry.js.map → p-7b199026.entry.js.map} +0 -0
  734. /package/dist/web-components-library/{p-d7f12672.js.map → p-80285500.js.map} +0 -0
  735. /package/dist/web-components-library/{p-a2e87cec.entry.js.map → p-80ddecaf.entry.js.map} +0 -0
  736. /package/dist/web-components-library/{p-d2035d26.entry.js.map → p-839e2478.entry.js.map} +0 -0
  737. /package/dist/web-components-library/{p-daa1ffe9.entry.js.map → p-84ed6163.entry.js.map} +0 -0
  738. /package/dist/web-components-library/{p-757415e9.entry.js.map → p-88a9865c.entry.js.map} +0 -0
  739. /package/dist/web-components-library/{p-1844a4f4.entry.js.map → p-8a53fefb.entry.js.map} +0 -0
  740. /package/dist/web-components-library/{p-d6a7b7f3.entry.js.map → p-8b562dca.entry.js.map} +0 -0
  741. /package/dist/web-components-library/{p-28534fb5.entry.js.map → p-90690d4d.entry.js.map} +0 -0
  742. /package/dist/web-components-library/{p-307c9c33.entry.js.map → p-9a63ec80.entry.js.map} +0 -0
  743. /package/dist/web-components-library/{p-d75f8bbb.entry.js.map → p-9af837bb.entry.js.map} +0 -0
  744. /package/dist/web-components-library/{p-d90d2698.entry.js.map → p-a32ebcc3.entry.js.map} +0 -0
  745. /package/dist/web-components-library/{p-4c9bf42d.js.map → p-b06af2fc.js.map} +0 -0
  746. /package/dist/web-components-library/{p-817689d5.entry.js.map → p-b1f2388a.entry.js.map} +0 -0
  747. /package/dist/web-components-library/{p-342b0eb0.entry.js.map → p-b421424f.entry.js.map} +0 -0
  748. /package/dist/web-components-library/{p-fb232d07.entry.js.map → p-b4b264b1.entry.js.map} +0 -0
  749. /package/dist/web-components-library/{p-cc18a2b7.entry.js.map → p-b8211903.entry.js.map} +0 -0
  750. /package/dist/web-components-library/{p-b63c8e8b.entry.js.map → p-b854cc3d.entry.js.map} +0 -0
  751. /package/dist/web-components-library/{p-4a257653.entry.js.map → p-c03767a4.entry.js.map} +0 -0
  752. /package/dist/web-components-library/{p-2bdac94e.entry.js.map → p-c0b4f29d.entry.js.map} +0 -0
  753. /package/dist/web-components-library/{p-7a4f6a5b.entry.js.map → p-c57bb632.entry.js.map} +0 -0
  754. /package/dist/web-components-library/{p-028dd72a.entry.js.map → p-c645dc11.entry.js.map} +0 -0
  755. /package/dist/web-components-library/{p-30e42fb1.js.map → p-cb395500.js.map} +0 -0
  756. /package/dist/web-components-library/{p-5989465b.entry.js.map → p-cc87d814.entry.js.map} +0 -0
  757. /package/dist/web-components-library/{p-1c7550f9.entry.js.map → p-d1a04722.entry.js.map} +0 -0
  758. /package/dist/web-components-library/{p-e3b82454.entry.js.map → p-d1fe7960.entry.js.map} +0 -0
  759. /package/dist/web-components-library/{p-863fd1c4.entry.js.map → p-d5ebbfdf.entry.js.map} +0 -0
  760. /package/dist/web-components-library/{p-e5407cc1.entry.js.map → p-d65aeb54.entry.js.map} +0 -0
  761. /package/dist/web-components-library/{p-2612e3a2.entry.js.map → p-daa442e6.entry.js.map} +0 -0
  762. /package/dist/web-components-library/{p-e0b88075.entry.js.map → p-dba260f2.entry.js.map} +0 -0
  763. /package/dist/web-components-library/{p-943db3a8.entry.js.map → p-ddae9016.entry.js.map} +0 -0
  764. /package/dist/web-components-library/{p-af5e8524.entry.js.map → p-de313d96.entry.js.map} +0 -0
  765. /package/dist/web-components-library/{p-5c5882c6.entry.js.map → p-e38a5dd2.entry.js.map} +0 -0
  766. /package/dist/web-components-library/{p-f4bac89b.entry.js.map → p-eb9161bc.entry.js.map} +0 -0
  767. /package/dist/web-components-library/{p-f487290e.entry.js.map → p-f0f53bb2.entry.js.map} +0 -0
  768. /package/dist/web-components-library/{p-1170826b.js.map → p-f79010de.js.map} +0 -0
  769. /package/dist/web-components-library/{p-19f5b6a9.entry.js.map → p-f9e41b2e.entry.js.map} +0 -0
  770. /package/www/build/{p-5a24e268.entry.js.map → p-03a558ef.entry.js.map} +0 -0
  771. /package/www/build/{p-460b2068.entry.js.map → p-15951fc6.entry.js.map} +0 -0
  772. /package/www/build/{p-237fcaa9.entry.js.map → p-17e2fed2.entry.js.map} +0 -0
  773. /package/www/build/{p-b7ec2cc4.entry.js.map → p-19172b2c.entry.js.map} +0 -0
  774. /package/www/build/{p-94916bdf.entry.js.map → p-1939116a.entry.js.map} +0 -0
  775. /package/www/build/{p-b71a3f69.entry.js.map → p-1e0d85d5.entry.js.map} +0 -0
  776. /package/www/build/{p-2ffdfbb1.entry.js.map → p-215b1fa5.entry.js.map} +0 -0
  777. /package/www/build/{p-99210133.entry.js.map → p-2501dd29.entry.js.map} +0 -0
  778. /package/www/build/{p-1fd1cf02.entry.js.map → p-2bba665d.entry.js.map} +0 -0
  779. /package/www/build/{p-5a1f98a2.entry.js.map → p-2f45f1ff.entry.js.map} +0 -0
  780. /package/www/build/{p-86160fe3.entry.js.map → p-332e0361.entry.js.map} +0 -0
  781. /package/www/build/{p-4cec3345.entry.js.map → p-3d02ad75.entry.js.map} +0 -0
  782. /package/www/build/{p-240de9aa.entry.js.map → p-3f66654f.entry.js.map} +0 -0
  783. /package/www/build/{p-8c164e0d.entry.js.map → p-41891d34.entry.js.map} +0 -0
  784. /package/www/build/{p-ceeb3e2a.entry.js.map → p-4df66afe.entry.js.map} +0 -0
  785. /package/www/build/{p-748fa3ae.js.map → p-54cd104c.js.map} +0 -0
  786. /package/www/build/{p-01f941c2.entry.js.map → p-57dcff49.entry.js.map} +0 -0
  787. /package/www/build/{p-b96900bb.entry.js.map → p-59baa7f5.entry.js.map} +0 -0
  788. /package/www/build/{p-4551b0df.entry.js.map → p-5cdd431e.entry.js.map} +0 -0
  789. /package/www/build/{p-f19f12b1.js.map → p-5f1e17cb.js.map} +0 -0
  790. /package/www/build/{p-c778bf87.entry.js.map → p-5fda8769.entry.js.map} +0 -0
  791. /package/www/build/{p-4affbb99.entry.js.map → p-661bce1c.entry.js.map} +0 -0
  792. /package/www/build/{p-ee695830.entry.js.map → p-66c0f993.entry.js.map} +0 -0
  793. /package/www/build/{p-e9e2ceb4.entry.js.map → p-684142d7.entry.js.map} +0 -0
  794. /package/www/build/{p-9e3da0b7.entry.js.map → p-6c3d141b.entry.js.map} +0 -0
  795. /package/www/build/{p-22ba2a17.entry.js.map → p-6d11da08.entry.js.map} +0 -0
  796. /package/www/build/{p-b7b972c0.entry.js.map → p-6d61933f.entry.js.map} +0 -0
  797. /package/www/build/{p-dc086eb5.entry.js.map → p-6ef58a14.entry.js.map} +0 -0
  798. /package/www/build/{p-a905df88.entry.js.map → p-71f62226.entry.js.map} +0 -0
  799. /package/www/build/{p-0a49dd1c.entry.js.map → p-7b199026.entry.js.map} +0 -0
  800. /package/www/build/{p-d7f12672.js.map → p-80285500.js.map} +0 -0
  801. /package/www/build/{p-a2e87cec.entry.js.map → p-80ddecaf.entry.js.map} +0 -0
  802. /package/www/build/{p-d2035d26.entry.js.map → p-839e2478.entry.js.map} +0 -0
  803. /package/www/build/{p-daa1ffe9.entry.js.map → p-84ed6163.entry.js.map} +0 -0
  804. /package/www/build/{p-757415e9.entry.js.map → p-88a9865c.entry.js.map} +0 -0
  805. /package/www/build/{p-1844a4f4.entry.js.map → p-8a53fefb.entry.js.map} +0 -0
  806. /package/www/build/{p-d6a7b7f3.entry.js.map → p-8b562dca.entry.js.map} +0 -0
  807. /package/www/build/{p-28534fb5.entry.js.map → p-90690d4d.entry.js.map} +0 -0
  808. /package/www/build/{p-307c9c33.entry.js.map → p-9a63ec80.entry.js.map} +0 -0
  809. /package/www/build/{p-d75f8bbb.entry.js.map → p-9af837bb.entry.js.map} +0 -0
  810. /package/www/build/{p-d90d2698.entry.js.map → p-a32ebcc3.entry.js.map} +0 -0
  811. /package/www/build/{p-4c9bf42d.js.map → p-b06af2fc.js.map} +0 -0
  812. /package/www/build/{p-817689d5.entry.js.map → p-b1f2388a.entry.js.map} +0 -0
  813. /package/www/build/{p-342b0eb0.entry.js.map → p-b421424f.entry.js.map} +0 -0
  814. /package/www/build/{p-fb232d07.entry.js.map → p-b4b264b1.entry.js.map} +0 -0
  815. /package/www/build/{p-cc18a2b7.entry.js.map → p-b8211903.entry.js.map} +0 -0
  816. /package/www/build/{p-b63c8e8b.entry.js.map → p-b854cc3d.entry.js.map} +0 -0
  817. /package/www/build/{p-4a257653.entry.js.map → p-c03767a4.entry.js.map} +0 -0
  818. /package/www/build/{p-2bdac94e.entry.js.map → p-c0b4f29d.entry.js.map} +0 -0
  819. /package/www/build/{p-7a4f6a5b.entry.js.map → p-c57bb632.entry.js.map} +0 -0
  820. /package/www/build/{p-028dd72a.entry.js.map → p-c645dc11.entry.js.map} +0 -0
  821. /package/www/build/{p-30e42fb1.js.map → p-cb395500.js.map} +0 -0
  822. /package/www/build/{p-5989465b.entry.js.map → p-cc87d814.entry.js.map} +0 -0
  823. /package/www/build/{p-1c7550f9.entry.js.map → p-d1a04722.entry.js.map} +0 -0
  824. /package/www/build/{p-e3b82454.entry.js.map → p-d1fe7960.entry.js.map} +0 -0
  825. /package/www/build/{p-863fd1c4.entry.js.map → p-d5ebbfdf.entry.js.map} +0 -0
  826. /package/www/build/{p-e5407cc1.entry.js.map → p-d65aeb54.entry.js.map} +0 -0
  827. /package/www/build/{p-2612e3a2.entry.js.map → p-daa442e6.entry.js.map} +0 -0
  828. /package/www/build/{p-e0b88075.entry.js.map → p-dba260f2.entry.js.map} +0 -0
  829. /package/www/build/{p-943db3a8.entry.js.map → p-ddae9016.entry.js.map} +0 -0
  830. /package/www/build/{p-af5e8524.entry.js.map → p-de313d96.entry.js.map} +0 -0
  831. /package/www/build/{p-5c5882c6.entry.js.map → p-e38a5dd2.entry.js.map} +0 -0
  832. /package/www/build/{p-f4bac89b.entry.js.map → p-eb9161bc.entry.js.map} +0 -0
  833. /package/www/build/{p-f487290e.entry.js.map → p-f0f53bb2.entry.js.map} +0 -0
  834. /package/www/build/{p-1170826b.js.map → p-f79010de.js.map} +0 -0
  835. /package/www/build/{p-19f5b6a9.entry.js.map → p-f9e41b2e.entry.js.map} +0 -0
@@ -1,5 +1,5 @@
1
1
  import { h, Host } from "@stencil/core";
2
- import { OffCanvasVariant, TransitionDirection } from "../../beans";
2
+ import { KeyboardCode, OffCanvasVariant, TransitionDirection } from "../../beans";
3
3
  /**
4
4
  * @slot canvasContent - Slot for the offcanvas content.
5
5
  * @cssprop --z-offcanvas--top-space - Top offset of the offcanvas, for `overlay` variant. Useful when there is some fixed element above the offcanvas. Default: `0`.
@@ -8,6 +8,8 @@ import { OffCanvasVariant, TransitionDirection } from "../../beans";
8
8
  */
9
9
  export class ZOffcanvas {
10
10
  constructor() {
11
+ this.allFocusableElements = [];
12
+ this.previouslyFocusedElement = null;
11
13
  this.variant = OffCanvasVariant.PUSHCONTENT;
12
14
  this.open = false;
13
15
  this.transitiondirection = TransitionDirection.LEFT;
@@ -15,6 +17,65 @@ export class ZOffcanvas {
15
17
  this.showBackdrop = true;
16
18
  this.skipAnimation = false;
17
19
  }
20
+ /**
21
+ * Returns all focusable elements inside the offcanvas content.
22
+ * Elements are considered focusable if:
23
+ * - They are not disabled
24
+ * - They are visible in the layout
25
+ * - They have a non-negative tabIndex or an explicit tabindex="0"
26
+ */
27
+ getFocusableElements() {
28
+ if (!this.canvasContent) {
29
+ return [];
30
+ }
31
+ const all = Array.from(this.canvasContent.querySelectorAll("*"));
32
+ return all.filter((el) => {
33
+ const tabindex = el.getAttribute("tabindex");
34
+ const isDisabled = el.hasAttribute("disabled");
35
+ const isHidden = el.offsetParent === null;
36
+ return !isDisabled && !isHidden && (el.tabIndex >= 0 || tabindex === "0");
37
+ });
38
+ }
39
+ /**
40
+ * Keeps keyboard navigation trapped inside the offcanvas when it is open.
41
+ * Implements circular tab navigation:
42
+ * - If Shift + Tab is pressed on the first focusable element, move focus to the last.
43
+ * - If Tab is pressed on the last focusable element, move focus to the first.
44
+ */
45
+ trapFocus(event) {
46
+ if (!this.allFocusableElements.length) {
47
+ return;
48
+ }
49
+ const first = this.allFocusableElements[0];
50
+ const last = this.allFocusableElements[this.allFocusableElements.length - 1];
51
+ const active = document.activeElement;
52
+ if (event.shiftKey && active === first) {
53
+ event.preventDefault();
54
+ last.focus();
55
+ }
56
+ if (!event.shiftKey && active === last) {
57
+ event.preventDefault();
58
+ first.focus();
59
+ }
60
+ }
61
+ /**
62
+ * Handles keyboard interactions when the offcanvas is open.
63
+ * - Closes the offcanvas when the Escape key is pressed.
64
+ * - Traps focus inside the component when the Tab key is used.
65
+ */
66
+ handleKeyDown(event) {
67
+ if (!this.open) {
68
+ return;
69
+ }
70
+ if (event.key === KeyboardCode.ESC) {
71
+ event.preventDefault();
72
+ this.open = false;
73
+ return;
74
+ }
75
+ if (event.key === KeyboardCode.TAB) {
76
+ this.trapFocus(event);
77
+ }
78
+ }
18
79
  /**
19
80
  * Stop the event default behavior and propagation when the offcanvas is closed.
20
81
  */
@@ -35,18 +96,29 @@ export class ZOffcanvas {
35
96
  document.body.style[overflow] = this.open ? "hidden" : "";
36
97
  }
37
98
  onOpenChanged() {
38
- var _a;
99
+ var _a, _b, _c;
39
100
  this.canvasOpenStatusChanged.emit(this.open);
40
- if (!this.open) {
41
- // when the offcanvas is closing, wait for the transitionend event to end before handling the body overflow
101
+ if (this.open) {
102
+ // Store the element that was focused before the offcanvas opens, this allows restoring the focus when the offcanvas closes.
103
+ this.previouslyFocusedElement = document.activeElement;
104
+ // Move focus inside the offcanvas once it is rendered.
105
+ if (this.allFocusableElements.length > 0) {
106
+ this.allFocusableElements[0].focus();
107
+ }
108
+ else {
109
+ (_a = this.canvasContent) === null || _a === void 0 ? void 0 : _a.focus();
110
+ }
111
+ this.handlePageOverflow();
112
+ }
113
+ else {
114
+ // Restore focus to the element that was focused before the offcanvas was opened.
115
+ (_b = this.previouslyFocusedElement) === null || _b === void 0 ? void 0 : _b.focus();
116
+ // When the offcanvas is closing, wait for the transitionend event before restoring the page overflow.
42
117
  const listenerCallback = () => {
43
118
  this.handlePageOverflow();
44
119
  this.canvasContainer.removeEventListener("transitionend", listenerCallback);
45
120
  };
46
- (_a = this.canvasContainer) === null || _a === void 0 ? void 0 : _a.addEventListener("transitionend", listenerCallback);
47
- }
48
- else {
49
- this.handlePageOverflow();
121
+ (_c = this.canvasContainer) === null || _c === void 0 ? void 0 : _c.addEventListener("transitionend", listenerCallback);
50
122
  }
51
123
  }
52
124
  componentWillLoad() {
@@ -59,6 +131,7 @@ export class ZOffcanvas {
59
131
  }
60
132
  componentDidRender() {
61
133
  this.skipAnimation = false;
134
+ this.allFocusableElements = this.getFocusableElements();
62
135
  }
63
136
  connectedCallback() {
64
137
  this.handlePageOverflow();
@@ -67,8 +140,8 @@ export class ZOffcanvas {
67
140
  this.open = false;
68
141
  }
69
142
  render() {
70
- return (h(Host, { key: '52ce71415709ffe342802b789448fe168eef9d3d', "skip-animation": this.skipAnimation, "aria-hidden": !this.open ? "true" : null }, h("div", { key: '93173c6176acd24a8f02541b5becd3dfd7f98ac3', class: "canvas-container", role: "presentation", ref: (el) => (this.canvasContainer = el) }, h("div", { key: '82b36a24cbf7856d8f8ee17952e0cf733529f7ae', class: "canvas-content z-scrollbar", role: "presentation" }, h("slot", { key: 'e5281598686c2d0de459045ceaa81c1c31dbcd22', name: "canvasContent" }))), (this.variant == OffCanvasVariant.OVERLAY || this.transitiondirection === TransitionDirection.UP) &&
71
- this.showBackdrop && (h("div", { key: 'b912144f9bf525114394cd03f84f38f810c8cb29', class: "backdrop", onClick: () => (this.open = false) }))));
143
+ return (h(Host, { key: '8d7045110c92bf5ef1ef2f8d60ddaf1af55ace92', "skip-animation": this.skipAnimation, "aria-hidden": !this.open ? "true" : null }, h("div", { key: 'ef823ffd39a7f63aae8ef95333da611ec4485292', class: "canvas-container", role: "presentation", ref: (el) => (this.canvasContainer = el) }, h("div", { key: '7a6586d273275f1686fe0b1406d71e782d5d71c3', class: "canvas-content z-scrollbar", role: "presentation", ref: (el) => (this.canvasContent = el) }, h("slot", { key: '5930bb55687c9dd286828dc262c1f2cb18ebdd75', name: "canvasContent" }))), (this.variant == OffCanvasVariant.OVERLAY || this.transitiondirection === TransitionDirection.UP) &&
144
+ this.showBackdrop && (h("div", { key: 'a65de1a8b0e92e0520d410a88c98edfe5bb56100', class: "backdrop", onClick: () => (this.open = false) }))));
72
145
  }
73
146
  static get is() { return "z-offcanvas"; }
74
147
  static get encapsulation() { return "scoped"; }
@@ -225,6 +298,12 @@ export class ZOffcanvas {
225
298
  }
226
299
  static get listeners() {
227
300
  return [{
301
+ "name": "keydown",
302
+ "method": "handleKeyDown",
303
+ "target": "document",
304
+ "capture": false,
305
+ "passive": false
306
+ }, {
228
307
  "name": "click",
229
308
  "method": "stopEvent",
230
309
  "target": undefined,
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/components/z-offcanvas/index.tsx"],"names":[],"mappings":"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","sourcesContent":["import {Component, Event, EventEmitter, h, Host, Listen, Prop, State, Watch} from \"@stencil/core\";\nimport {OffCanvasVariant, TransitionDirection} from \"../../beans\";\n\n/**\n * @slot canvasContent - Slot for the offcanvas content.\n * @cssprop --z-offcanvas--top-space - Top offset of the offcanvas, for `overlay` variant. Useful when there is some fixed element above the offcanvas. Default: `0`.\n * @cssprop --z-offcanvas--container-width - Width of the offcanvas for `left` and `right` direction. Default: `375px`.\n * @cssprop --z-offcanvas--container-height - Height of the offcanvas for `up` direction. Default: `90%`.\n */\n@Component({\n tag: \"z-offcanvas\",\n styleUrl: \"styles.css\",\n shadow: false,\n scoped: true,\n})\nexport class ZOffcanvas {\n /**\n * Offcanvas variant.\n * - `overlay`: The offcanvas covers the page content putting an overlay.\n * - `pushcontent`: The offcanvas isn't absolutely positioned and \"pushes\" the page content.\n * > NB: `pushcontent` variant may need some extra style tuning of the context around the component to work properly.\n * Also, the `pushcontent` variant doesn't have the open/close transition.\n */\n @Prop({reflect: true})\n variant?: OffCanvasVariant = OffCanvasVariant.PUSHCONTENT;\n\n /** Whether the offcanvas is open. Default: false */\n @Prop({reflect: true, mutable: true})\n open = false;\n\n /**\n * Open the content transitioning to a specified direction.\n * The `up` direction always show the `overlay`, also when the variant is `pushcontent`.\n */\n @Prop({reflect: true})\n transitiondirection?: TransitionDirection = TransitionDirection.LEFT;\n\n /**\n * Skip the opening transition when the offcanvas is already open at the first render.\n * @deprecated This prop is not needed anymore, the component will automatically skip the transition\n * when it starts with `open` set to `true`. Only exists for Typescript backward compatibility.\n */\n @Prop()\n skipLoadAnimation = false;\n\n /** Whether to show the backdrop when the offcanvas is open. Default: true */\n @Prop()\n showBackdrop = true;\n\n /** emitted when `open` prop changes */\n @Event()\n canvasOpenStatusChanged: EventEmitter;\n\n /** Used to skip the opening transition when the offcanvas is already open at the first render. */\n @State()\n private skipAnimation = false;\n\n private canvasContainer: HTMLElement;\n\n /**\n * Stop the event default behavior and propagation when the offcanvas is closed.\n */\n @Listen(\"click\", {capture: true})\n @Listen(\"focusin\", {capture: true})\n stopEvent(event: Event): void {\n if (this.open) {\n return;\n }\n\n event.preventDefault();\n event.stopPropagation();\n }\n\n /**\n * Hide the body overflow when the offcanvas is open.\n */\n @Watch(\"variant\")\n private handlePageOverflow(): void {\n const overflow =\n this.variant === OffCanvasVariant.OVERLAY || this.transitiondirection === TransitionDirection.UP\n ? \"overflow-y\"\n : \"overflow-x\";\n\n document.body.style[overflow] = this.open ? \"hidden\" : \"\";\n }\n\n @Watch(\"open\")\n onOpenChanged(): void {\n this.canvasOpenStatusChanged.emit(this.open);\n\n if (!this.open) {\n // when the offcanvas is closing, wait for the transitionend event to end before handling the body overflow\n const listenerCallback = (): void => {\n this.handlePageOverflow();\n this.canvasContainer.removeEventListener(\"transitionend\", listenerCallback);\n };\n\n this.canvasContainer?.addEventListener(\"transitionend\", listenerCallback);\n } else {\n this.handlePageOverflow();\n }\n }\n\n componentWillLoad(): void {\n if (this.open) {\n this.skipAnimation = true;\n }\n }\n\n componentDidLoad(): void {\n this.handlePageOverflow();\n }\n\n componentDidRender(): void {\n this.skipAnimation = false;\n }\n\n connectedCallback(): void {\n this.handlePageOverflow();\n }\n\n disconnectedCallback(): void {\n this.open = false;\n }\n\n render(): HTMLZOffcanvasElement {\n return (\n <Host\n skip-animation={this.skipAnimation}\n aria-hidden={!this.open ? \"true\" : null}\n >\n <div\n class=\"canvas-container\"\n role=\"presentation\"\n ref={(el) => (this.canvasContainer = el)}\n >\n <div\n class=\"canvas-content z-scrollbar\"\n role=\"presentation\"\n >\n <slot name=\"canvasContent\"></slot>\n </div>\n </div>\n {(this.variant == OffCanvasVariant.OVERLAY || this.transitiondirection === TransitionDirection.UP) &&\n this.showBackdrop && (\n <div\n class=\"backdrop\"\n onClick={() => (this.open = false)}\n ></div>\n )}\n </Host>\n );\n }\n}\n"]}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/components/z-offcanvas/index.tsx"],"names":[],"mappings":"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","sourcesContent":["import {Component, Event, EventEmitter, h, Host, Listen, Prop, State, Watch} from \"@stencil/core\";\nimport {KeyboardCode, OffCanvasVariant, TransitionDirection} from \"../../beans\";\n\n/**\n * @slot canvasContent - Slot for the offcanvas content.\n * @cssprop --z-offcanvas--top-space - Top offset of the offcanvas, for `overlay` variant. Useful when there is some fixed element above the offcanvas. Default: `0`.\n * @cssprop --z-offcanvas--container-width - Width of the offcanvas for `left` and `right` direction. Default: `375px`.\n * @cssprop --z-offcanvas--container-height - Height of the offcanvas for `up` direction. Default: `90%`.\n */\n@Component({\n tag: \"z-offcanvas\",\n styleUrl: \"styles.css\",\n shadow: false,\n scoped: true,\n})\nexport class ZOffcanvas {\n /**\n * Offcanvas variant.\n * - `overlay`: The offcanvas covers the page content putting an overlay.\n * - `pushcontent`: The offcanvas isn't absolutely positioned and \"pushes\" the page content.\n * > NB: `pushcontent` variant may need some extra style tuning of the context around the component to work properly.\n * Also, the `pushcontent` variant doesn't have the open/close transition.\n */\n @Prop({reflect: true})\n variant?: OffCanvasVariant = OffCanvasVariant.PUSHCONTENT;\n\n /** Whether the offcanvas is open. Default: false */\n @Prop({reflect: true, mutable: true})\n open = false;\n\n /**\n * Open the content transitioning to a specified direction.\n * The `up` direction always show the `overlay`, also when the variant is `pushcontent`.\n */\n @Prop({reflect: true})\n transitiondirection?: TransitionDirection = TransitionDirection.LEFT;\n\n /**\n * Skip the opening transition when the offcanvas is already open at the first render.\n * @deprecated This prop is not needed anymore, the component will automatically skip the transition\n * when it starts with `open` set to `true`. Only exists for Typescript backward compatibility.\n */\n @Prop()\n skipLoadAnimation = false;\n\n /** Whether to show the backdrop when the offcanvas is open. Default: true */\n @Prop()\n showBackdrop = true;\n\n /** emitted when `open` prop changes */\n @Event()\n canvasOpenStatusChanged: EventEmitter;\n\n /** Used to skip the opening transition when the offcanvas is already open at the first render. */\n @State()\n private skipAnimation = false;\n\n private canvasContainer: HTMLElement;\n\n private canvasContent: HTMLElement;\n\n private allFocusableElements: HTMLElement[] = [];\n\n private previouslyFocusedElement: HTMLElement | null = null;\n\n /**\n * Returns all focusable elements inside the offcanvas content.\n * Elements are considered focusable if:\n * - They are not disabled\n * - They are visible in the layout\n * - They have a non-negative tabIndex or an explicit tabindex=\"0\"\n */\n private getFocusableElements(): HTMLElement[] {\n if (!this.canvasContent) {\n return [];\n }\n\n const all = Array.from(this.canvasContent.querySelectorAll<HTMLElement>(\"*\"));\n\n return all.filter((el) => {\n const tabindex = el.getAttribute(\"tabindex\");\n const isDisabled = el.hasAttribute(\"disabled\");\n const isHidden = el.offsetParent === null;\n\n return !isDisabled && !isHidden && (el.tabIndex >= 0 || tabindex === \"0\");\n });\n }\n\n /**\n * Keeps keyboard navigation trapped inside the offcanvas when it is open.\n * Implements circular tab navigation:\n * - If Shift + Tab is pressed on the first focusable element, move focus to the last.\n * - If Tab is pressed on the last focusable element, move focus to the first.\n */\n private trapFocus(event: KeyboardEvent): void {\n if (!this.allFocusableElements.length) {\n return;\n }\n\n const first = this.allFocusableElements[0];\n const last = this.allFocusableElements[this.allFocusableElements.length - 1];\n const active = document.activeElement as HTMLElement;\n\n if (event.shiftKey && active === first) {\n event.preventDefault();\n last.focus();\n }\n\n if (!event.shiftKey && active === last) {\n event.preventDefault();\n first.focus();\n }\n }\n\n /**\n * Handles keyboard interactions when the offcanvas is open.\n * - Closes the offcanvas when the Escape key is pressed.\n * - Traps focus inside the component when the Tab key is used.\n */\n @Listen(\"keydown\", {target: \"document\"})\n handleKeyDown(event: KeyboardEvent): void {\n if (!this.open) {\n return;\n }\n\n if (event.key === KeyboardCode.ESC) {\n event.preventDefault();\n this.open = false;\n\n return;\n }\n\n if (event.key === KeyboardCode.TAB) {\n this.trapFocus(event);\n }\n }\n\n /**\n * Stop the event default behavior and propagation when the offcanvas is closed.\n */\n @Listen(\"click\", {capture: true})\n @Listen(\"focusin\", {capture: true})\n stopEvent(event: Event): void {\n if (this.open) {\n return;\n }\n\n event.preventDefault();\n event.stopPropagation();\n }\n\n /**\n * Hide the body overflow when the offcanvas is open.\n */\n @Watch(\"variant\")\n private handlePageOverflow(): void {\n const overflow =\n this.variant === OffCanvasVariant.OVERLAY || this.transitiondirection === TransitionDirection.UP\n ? \"overflow-y\"\n : \"overflow-x\";\n\n document.body.style[overflow] = this.open ? \"hidden\" : \"\";\n }\n\n @Watch(\"open\")\n onOpenChanged(): void {\n this.canvasOpenStatusChanged.emit(this.open);\n\n if (this.open) {\n // Store the element that was focused before the offcanvas opens, this allows restoring the focus when the offcanvas closes.\n this.previouslyFocusedElement = document.activeElement as HTMLElement;\n\n // Move focus inside the offcanvas once it is rendered.\n if (this.allFocusableElements.length > 0) {\n this.allFocusableElements[0].focus();\n } else {\n this.canvasContent?.focus();\n }\n\n this.handlePageOverflow();\n } else {\n // Restore focus to the element that was focused before the offcanvas was opened.\n this.previouslyFocusedElement?.focus();\n\n // When the offcanvas is closing, wait for the transitionend event before restoring the page overflow.\n const listenerCallback = (): void => {\n this.handlePageOverflow();\n this.canvasContainer.removeEventListener(\"transitionend\", listenerCallback);\n };\n\n this.canvasContainer?.addEventListener(\"transitionend\", listenerCallback);\n }\n }\n\n componentWillLoad(): void {\n if (this.open) {\n this.skipAnimation = true;\n }\n }\n\n componentDidLoad(): void {\n this.handlePageOverflow();\n }\n\n componentDidRender(): void {\n this.skipAnimation = false;\n this.allFocusableElements = this.getFocusableElements();\n }\n\n connectedCallback(): void {\n this.handlePageOverflow();\n }\n\n disconnectedCallback(): void {\n this.open = false;\n }\n\n render(): HTMLZOffcanvasElement {\n return (\n <Host\n skip-animation={this.skipAnimation}\n aria-hidden={!this.open ? \"true\" : null}\n >\n <div\n class=\"canvas-container\"\n role=\"presentation\"\n ref={(el) => (this.canvasContainer = el)}\n >\n <div\n class=\"canvas-content z-scrollbar\"\n role=\"presentation\"\n ref={(el) => (this.canvasContent = el)}\n >\n <slot name=\"canvasContent\"></slot>\n </div>\n </div>\n {(this.variant == OffCanvasVariant.OVERLAY || this.transitiondirection === TransitionDirection.UP) &&\n this.showBackdrop && (\n <div\n class=\"backdrop\"\n onClick={() => (this.open = false)}\n ></div>\n )}\n </Host>\n );\n }\n}\n"]}
@@ -16,12 +16,12 @@ export class ZPanelElem {
16
16
  }
17
17
  render() {
18
18
  const elemId = this.elemid ? this.elemid : "";
19
- return (h("div", { key: '7ccde7a594052fb877c381d8f2db8df80d64e96e', class: "panel-elem-container" }, (this.imgurl || this.imgalt) && (h("div", { key: 'f925fb70d03baa4a8a7f96006c515c9116785ff7', "aria-hidden": "true", class: "panel-elem-icon" }, h("img", { key: 'b0349cf006ded4cc02f686e1ea1adfbd76550fb8', src: this.imgurl, alt: this.imgalt }))), h("div", { key: 'c9393757ba1c849c8558dc668189f6f27b232e94', class: "panel-elem-link" }, h("a", { key: '7c552ae67030c9bf12a6e52e8d8f6f82df88b4a2', class: {
19
+ return (h("div", { key: '28f5d98850bf13270b4ddf9585722c39f87ee12e', class: "panel-elem-container" }, (this.imgurl || this.imgalt) && (h("div", { key: '065c198cfef6d982df79871d084454f425e0d57d', "aria-hidden": "true", class: "panel-elem-icon" }, h("img", { key: '5b42b99982e78dea89cf144a717e619b65904ab9', src: this.imgurl, alt: this.imgalt }))), h("div", { key: 'd15c0e008ca2f5172228217b5418d263a59af932', class: "panel-elem-link" }, h("a", { key: 'ca5a726f71b2dd8de6ddf1f32864bc2cdd823730', class: {
20
20
  "z-link": true,
21
21
  "z-link-disabled": this.isdisabled,
22
22
  "z-link-icon": true,
23
23
  "z-link-blue": true,
24
- }, id: elemId + "link_id", href: this.url, target: this.target }, h("z-icon", { key: 'f72a6a2634b41803ea7eaf8d51ba3439f095457a', height: 14, width: 14, name: this.linkicon }), this.linklabel)), this.descrSlotName && (h("div", { key: '6cd08ffd2e65f13d500f88682724f4f762c1f118', class: "panel-elem-desc" }, h("slot", { key: '01f55703602ee64f92eed8bc918ac5032927850c', name: this.descrSlotName })))));
24
+ }, id: elemId + "link_id", href: this.url, target: this.target }, h("z-icon", { key: 'b8f07a80e9260bb0a142037d3f6a64a64acebafb', height: 14, width: 14, name: this.linkicon }), this.linklabel)), this.descrSlotName && (h("div", { key: '8d6524f5e8b70798cd846d4c99a2631161ae265d', class: "panel-elem-desc" }, h("slot", { key: 'b122e24bbb3ee418a393b348157f54fad3a6f1a9', name: this.descrSlotName })))));
25
25
  }
26
26
  static get is() { return "z-panel-elem"; }
27
27
  static get encapsulation() { return "scoped"; }
@@ -28,6 +28,7 @@ export class ZPopover {
28
28
  }
29
29
  closePopoverWithKeyboard(e) {
30
30
  if (this.closable && e.key === KeyboardCode.ESC) {
31
+ e.stopPropagation();
31
32
  this.open = false;
32
33
  }
33
34
  }
@@ -258,7 +259,7 @@ export class ZPopover {
258
259
  if (parent === element.ownerDocument.documentElement) {
259
260
  return parent;
260
261
  }
261
- const style = window.getComputedStyle(parent);
262
+ const style = getComputedStyle(parent);
262
263
  const { overflow, overflowX, overflowY } = style;
263
264
  const hasHiddenOverflow = overflow === "hidden" || overflowY === "hidden" || overflowX === "hidden";
264
265
  const isScrollable = (parent.scrollHeight > parent.clientHeight && overflow !== "visible" && overflowY !== "visible") ||
@@ -360,11 +361,14 @@ export class ZPopover {
360
361
  const boundElementWidth = this.boundElement.offsetWidth;
361
362
  const boundElementHeight = this.boundElement.offsetHeight;
362
363
  const offsetModifier = this.offsetModifier;
363
- /** Distance between the arrow center and the popover edge. Needed to align the center of the arrow with the center of the bound element when `showArrow` and `center` are enabled. */
364
+ /**
365
+ * Distance between the arrow center and the popover edge.
366
+ * Needed to align the center of the arrow with the center of the bound element when `showArrow` and `center` are enabled.
367
+ */
364
368
  const arrowModifier = this.showArrow && this.center ? 8 : 0;
365
369
  const hostStyle = this.host.style;
366
- /** Gap between the popover and the bound element. */
367
- const distanceFromBound = parseInt(hostStyle.getPropertyValue("--space-unit")) || 8;
370
+ /** Gap between the popover and the bound element, set as margin in CSS. */
371
+ const distanceFromBound = parseFloat(getComputedStyle(this.host).marginTop.replace("px", "")) || 0;
368
372
  const positionOffsets = this.computePositionOffsets();
369
373
  /**
370
374
  * Precomputed bases to reduce repeated arithmetic in the switch below.
@@ -381,7 +385,7 @@ export class ZPopover {
381
385
  switch (position) {
382
386
  case PopoverPosition.TOP:
383
387
  case PopoverPosition.TOP_RIGHT:
384
- hostStyle.bottom = `${bottomBase + distanceFromBound}px`;
388
+ hostStyle.bottom = `${bottomBase}px`;
385
389
  hostStyle.left = `${leftBase - (position === PopoverPosition.TOP_RIGHT ? arrowModifier : 0)}px`;
386
390
  maxHeight = availableSpace.top - distanceFromBound;
387
391
  if (position === PopoverPosition.TOP_RIGHT) {
@@ -390,13 +394,13 @@ export class ZPopover {
390
394
  break;
391
395
  case PopoverPosition.TOP_LEFT:
392
396
  hostStyle.right = `${rightBase - arrowModifier}px`;
393
- hostStyle.bottom = `${bottomBase + distanceFromBound}px`;
397
+ hostStyle.bottom = `${bottomBase}px`;
394
398
  maxWidth = availableSpace.left + boundElementWidth * offsetModifier;
395
399
  maxHeight = availableSpace.top - distanceFromBound;
396
400
  break;
397
401
  case PopoverPosition.BOTTOM:
398
402
  case PopoverPosition.BOTTOM_RIGHT:
399
- hostStyle.top = `${topBase + distanceFromBound}px`;
403
+ hostStyle.top = `${topBase}px`;
400
404
  hostStyle.left = `${leftBase - (position === PopoverPosition.BOTTOM_RIGHT ? arrowModifier : 0)}px`;
401
405
  maxHeight = availableSpace.bottom - distanceFromBound;
402
406
  if (position === PopoverPosition.BOTTOM_RIGHT) {
@@ -404,7 +408,7 @@ export class ZPopover {
404
408
  }
405
409
  break;
406
410
  case PopoverPosition.BOTTOM_LEFT:
407
- hostStyle.top = `${topBase + distanceFromBound}px`;
411
+ hostStyle.top = `${topBase}px`;
408
412
  hostStyle.right = `${rightBase - arrowModifier}px`;
409
413
  maxWidth = availableSpace.left + boundElementWidth * offsetModifier;
410
414
  maxHeight = availableSpace.bottom - distanceFromBound;
@@ -412,7 +416,7 @@ export class ZPopover {
412
416
  case PopoverPosition.RIGHT:
413
417
  case PopoverPosition.RIGHT_BOTTOM:
414
418
  hostStyle.top = `${sideTopBase - (position === PopoverPosition.RIGHT_BOTTOM ? arrowModifier : 0)}px`;
415
- hostStyle.left = `${positionOffsets.left + boundElementWidth + distanceFromBound}px`;
419
+ hostStyle.left = `${positionOffsets.left + boundElementWidth}px`;
416
420
  maxWidth = availableSpace.right - distanceFromBound;
417
421
  if (position === PopoverPosition.RIGHT) {
418
422
  maxHeight = availableSpace.top + availableSpace.bottom + boundElementHeight;
@@ -423,21 +427,21 @@ export class ZPopover {
423
427
  break;
424
428
  case PopoverPosition.RIGHT_TOP:
425
429
  hostStyle.bottom = `${sideBottomBase - arrowModifier}px`;
426
- hostStyle.left = `${positionOffsets.left + boundElementWidth + distanceFromBound}px`;
430
+ hostStyle.left = `${positionOffsets.left + boundElementWidth}px`;
427
431
  maxWidth = availableSpace.right - distanceFromBound;
428
432
  maxHeight = availableSpace.top + boundElementHeight * offsetModifier;
429
433
  break;
430
434
  case PopoverPosition.LEFT:
431
435
  case PopoverPosition.LEFT_BOTTOM:
432
436
  hostStyle.top = `${sideTopBase - (position === PopoverPosition.LEFT_BOTTOM ? arrowModifier : 0)}px`;
433
- hostStyle.right = `${positionOffsets.right + boundElementWidth + distanceFromBound}px`;
437
+ hostStyle.right = `${positionOffsets.right + boundElementWidth}px`;
434
438
  maxWidth = availableSpace.left - distanceFromBound;
435
439
  if (position === PopoverPosition.LEFT_BOTTOM) {
436
440
  maxHeight = availableSpace.bottom + boundElementHeight * offsetModifier;
437
441
  }
438
442
  break;
439
443
  case PopoverPosition.LEFT_TOP:
440
- hostStyle.right = `${positionOffsets.right + boundElementWidth + distanceFromBound}px`;
444
+ hostStyle.right = `${positionOffsets.right + boundElementWidth}px`;
441
445
  hostStyle.bottom = `${sideBottomBase - arrowModifier}px`;
442
446
  maxWidth = availableSpace.left - distanceFromBound;
443
447
  maxHeight = availableSpace.top + boundElementHeight * offsetModifier;
@@ -493,7 +497,7 @@ export class ZPopover {
493
497
  cancelAnimationFrame(this.animationFrameRequestId);
494
498
  }
495
499
  render() {
496
- return (h(Host, { key: 'a778d9679d27ca18fe92eab0f596a86cb904a49f', "current-position": this.currentPosition }, h("slot", { key: 'de51304770f9f501a10ca26232448a31482da68d' })));
500
+ return (h(Host, { key: '83d24ed11a01f0ff29486a6c2e3a3716960d44a1', "current-position": this.currentPosition }, h("slot", { key: '7c048c564bc76ee6dda7df4dfb55eb80c5b5ebae' })));
497
501
  }
498
502
  static get is() { return "z-popover"; }
499
503
  static get encapsulation() { return "shadow"; }
@@ -621,7 +625,7 @@ export class ZPopover {
621
625
  "optional": false,
622
626
  "docs": {
623
627
  "tags": [],
624
- "text": "If true, the popover can be closed by clicking outside of it or pressing the escape key.\nOtherwise, it will be closed only programmatically (by setting `open` to `false`)."
628
+ "text": "Whether the popover can be closed by clicking outside of it or pressing the escape key.\nOtherwise, it will be closed only programmatically (by setting `open` to `false`).\nDefault: `true`."
625
629
  },
626
630
  "attribute": "closable",
627
631
  "reflect": false,
@@ -646,9 +650,15 @@ export class ZPopover {
646
650
  "text": "Fired when the position changes."
647
651
  },
648
652
  "complexType": {
649
- "original": "any",
650
- "resolved": "any",
651
- "references": {}
653
+ "original": "{position: PopoverPosition}",
654
+ "resolved": "{ position: PopoverPosition; }",
655
+ "references": {
656
+ "PopoverPosition": {
657
+ "location": "import",
658
+ "path": "../../beans",
659
+ "id": "src/beans/index.tsx::PopoverPosition"
660
+ }
661
+ }
652
662
  }
653
663
  }, {
654
664
  "method": "openChange",
@@ -658,11 +668,11 @@ export class ZPopover {
658
668
  "composed": true,
659
669
  "docs": {
660
670
  "tags": [],
661
- "text": "Open change event."
671
+ "text": "Event emitted when the open state of the popover changes (e.g. when the user clicks outside the popover to close it, if `closable` is true)."
662
672
  },
663
673
  "complexType": {
664
- "original": "any",
665
- "resolved": "any",
674
+ "original": "{open: boolean}",
675
+ "resolved": "{ open: boolean; }",
666
676
  "references": {}
667
677
  }
668
678
  }];
@@ -685,7 +695,7 @@ export class ZPopover {
685
695
  "name": "keyup",
686
696
  "method": "closePopoverWithKeyboard",
687
697
  "target": "window",
688
- "capture": false,
698
+ "capture": true,
689
699
  "passive": false
690
700
  }, {
691
701
  "name": "click",
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/components/z-popover/index.tsx"],"names":[],"mappings":"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","sourcesContent":["import {Component, Element, Event, EventEmitter, Host, Listen, Prop, State, Watch, h} from \"@stencil/core\";\nimport {Device, KeyboardCode, PopoverPosition} from \"../../beans\";\nimport {\n containsElement,\n findContainingBlockAncestor,\n getDevice,\n getParentElement,\n isElementVisibleInContainer,\n} from \"../../utils/utils\";\n\n/** Centering offset modifier. 0 for no offset, 0.5 for centering. */\ntype OffsetModifier = 0 | 0.5;\ntype Offsets = {top: number; right: number; bottom: number; left: number};\n\n/**\n * Popover component.\n * This component displays a popover bound to an element.\n * It supports various positions and can automatically adjust it based on available space, accounting for scrollable containers.\n *\n * Notes:\n * - If positioning has an odd behavior, consider manually adjusting the size of the slotted elements (using `width`, `height`, `max-width`, `max-height`, etc...) when its content is \"fluid\" (like text), because it can interfere with the position calculation (for example a long text on one single line can be bigger than the available space, letting the algorithm think the popover doesn't fits).\n *\n * @cssprop --z-popover-theme--surface - background color of the popover.\n * @cssprop --z-popover-theme--text - foreground color of the popover.\n * @cssprop --z-popover-padding - padding of the popover.\n * @cssprop --z-popover-shadow-filter - drop-shadow filter of the popover. Defaults to `drop-shadow(0 1px 2px var(--shadow-color-base))`.\n */\n@Component({\n tag: \"z-popover\",\n styleUrl: \"styles.css\",\n shadow: true,\n})\nexport class ZPopover {\n /**\n * The preferred position to render the popover.\n * The popover will automatically search another position if not enough space is available for the preferred position.\n * If the preferred position is not available, it will try to find the best position starting from `TOP` and going clockwise.\n */\n @Prop({reflect: true, mutable: true})\n position?: PopoverPosition = PopoverPosition.TOP;\n\n /**\n * The initial open state of the popover.\n * Internal changes of this prop are emitted through the `openChange` event.\n * Make sure to listen to that event if you need the updated state of the popover from the outside, to avoid inconsistent values.\n */\n @Prop({reflect: true, mutable: true})\n open = false;\n\n /**\n * The selector or the element bound with the popover.\n * If string css selector is provided make sure to use a valid selector.\n */\n @Prop()\n bindTo?: string | HTMLElement;\n\n /** Whether to show popover's arrow. */\n @Prop({reflect: true})\n showArrow = false;\n\n /** Whether to center the popup on the main side (according to \"position\"). */\n @Prop({reflect: true})\n center = false;\n\n /**\n * If true, the popover can be closed by clicking outside of it or pressing the escape key.\n * Otherwise, it will be closed only programmatically (by setting `open` to `false`).\n */\n @Prop()\n closable = true;\n\n /**\n * The current position of the popover.\n * It differs from `position` only when calculated automatically for space reasons.\n */\n @State()\n currentPosition?: PopoverPosition;\n\n @Element() host: HTMLZPopoverElement;\n\n // Clockwise order of positions.\n private static readonly positionOrder: PopoverPosition[] = [\n PopoverPosition.TOP,\n PopoverPosition.TOP_RIGHT,\n PopoverPosition.TOP_LEFT,\n PopoverPosition.RIGHT,\n PopoverPosition.RIGHT_BOTTOM,\n PopoverPosition.RIGHT_TOP,\n PopoverPosition.BOTTOM,\n PopoverPosition.BOTTOM_LEFT,\n PopoverPosition.BOTTOM_RIGHT,\n PopoverPosition.LEFT,\n PopoverPosition.LEFT_TOP,\n PopoverPosition.LEFT_BOTTOM,\n ] as const;\n\n private animationFrameRequestId?: number;\n\n /** space tolerance for space calculations */\n private readonly spaceTolerance = 3;\n\n /** The element bound to the popover. */\n private boundElement?: HTMLElement;\n\n /** Cached available space around the bound element to avoid unnecessary recalculations */\n private cachedAvailableSpace?: Offsets;\n\n /** Last bounding rect of the bound element to detect changes and eventually invalidate the caches. */\n private lastBoundRect?: DOMRect;\n\n /** Fired when the position changes. */\n @Event()\n positionChange: EventEmitter;\n\n /** Open change event. */\n @Event()\n openChange: EventEmitter;\n\n @Listen(\"keyup\", {target: \"window\"})\n closePopoverWithKeyboard(e: KeyboardEvent): void {\n if (this.closable && e.key === KeyboardCode.ESC) {\n this.open = false;\n }\n }\n\n /**\n * Close the popover when clicking outside of its content.\n * Stop event propagation if the click was fired by popover's trigger element,\n * to prevent close and reopen glitches.\n */\n @Listen(\"click\", {target: \"body\", capture: true})\n handleOutsideClick(e: MouseEvent): void {\n const target = e.target as Element;\n if (!this.closable || !this.open || containsElement(this.host, target)) {\n return;\n }\n\n if (containsElement(this.boundElement, target)) {\n // stop propagation if the click was on the trigger element to prevent close and reopen glitches\n e.stopPropagation();\n }\n this.open = false;\n }\n\n @Watch(\"position\")\n validatePosition(newValue: PopoverPosition): void {\n if (!Object.values(PopoverPosition).includes(newValue as PopoverPosition) || newValue === PopoverPosition.AUTO) {\n newValue = PopoverPosition.TOP;\n this.position = newValue;\n }\n this.currentPosition = newValue;\n if (this.open) {\n this.setPosition();\n }\n }\n\n /** Setup popover behaviors when `open` changes. */\n @Watch(\"open\")\n onOpen(): void {\n cancelAnimationFrame(this.animationFrameRequestId);\n this.openChange.emit({open: this.open});\n if (!this.open) {\n Object.assign(this.host.style, {\n // Reset all positioning properties\n top: \"auto\",\n right: \"auto\",\n bottom: \"auto\",\n left: \"auto\",\n maxWidth: \"\",\n maxHeight: \"\",\n // Set initial visibility to hidden while calculating position...\n visibility: \"hidden\",\n });\n this.currentPosition = undefined;\n\n return;\n }\n\n const updatePositionLoop = (): void => {\n if (!this.open) {\n return;\n }\n\n this.setPosition();\n this.animationFrameRequestId = requestAnimationFrame(updatePositionLoop);\n };\n\n // call `setPosition` after a tick to ensure the DOM is ready and sizes are available\n setTimeout(() => {\n updatePositionLoop();\n }, 0);\n }\n\n @Watch(\"bindTo\")\n onBindingChange(): void {\n this.findBoundElement();\n }\n\n /** Returns the offset modifier to use in calculations to align the popover with the bound element. */\n private get offsetModifier(): OffsetModifier {\n return this.center ? 0.5 : 0;\n }\n\n private findBoundElement(): void {\n if (typeof this.bindTo === \"string\") {\n this.boundElement = this.host.ownerDocument.querySelector(this.bindTo) as HTMLElement;\n } else if (this.bindTo) {\n this.boundElement = this.bindTo;\n } else {\n this.boundElement = getParentElement(this.host) as HTMLElement;\n if (this.boundElement.tagName.toLowerCase() === \"z-tooltip\") {\n // If the popover is used inside a tooltip without a specified `bindTo`, bind it to the parent of the tooltip.\n this.boundElement = getParentElement(this.boundElement) as HTMLElement;\n }\n }\n }\n\n /**\n * Check if element has enough space to the right and left to be centered.\n * Used for `TOP` and `BOTTOM` position.\n * When `center` is not enabled, only one side needs to be checked and `RIGHT` is the default.\n */\n private hasCenteredHorizontalSpace(\n availableLeft: number,\n availableRight: number,\n hostWidth: number,\n boundElementWidth: number\n ): boolean {\n const requiredSideSpace = (hostWidth - boundElementWidth) * (1 - this.offsetModifier);\n\n if (!this.center) {\n return availableRight >= requiredSideSpace - this.spaceTolerance;\n }\n\n return (\n availableRight >= requiredSideSpace - this.spaceTolerance &&\n availableLeft >= requiredSideSpace - this.spaceTolerance\n );\n }\n\n /**\n * Check if element has enough space to the top and bottom to be centered.\n * Used for `RIGHT` and `LEFT` position.\n * When `center` is not enabled, only one side needs to be checked and `BOTTOM` is the default.\n */\n private hasCenteredVerticalSpace(\n availableTop: number,\n availableBottom: number,\n hostHeight: number,\n boundElementHeight: number\n ): boolean {\n const requiredSideSpace = (hostHeight - boundElementHeight) * (1 - this.offsetModifier);\n\n if (!this.center) {\n return availableBottom >= requiredSideSpace - this.spaceTolerance;\n }\n\n return (\n availableTop >= requiredSideSpace - this.spaceTolerance &&\n availableBottom >= requiredSideSpace - this.spaceTolerance\n );\n }\n\n /**\n * Check if there is enough space in the given direction to fit the popover.\n * Used for composed positions like TOP_RIGHT, LEFT_BOTTOM, etc.\n */\n private hasEnoughSideSpace(\n availableSpace: number,\n hostSize: number,\n boundElementSize: number,\n offsetModifier: OffsetModifier\n ): boolean {\n return availableSpace >= hostSize - boundElementSize * (1 - offsetModifier) - this.spaceTolerance;\n }\n\n /**\n * Given a desired position and available space around the bound element, returns the best position\n * that fits the popover, trying all positions if needed.\n * Takes into account offsetModifier for centering.\n * @param desiredPosition The desired position of the popover.\n * @param availableSpace The available space around the bound element.\n */\n private getOptimalPopoverPosition(desiredPosition: PopoverPosition, availableSpace: Offsets): PopoverPosition {\n const hostWidth = this.host.offsetWidth;\n const hostHeight = this.host.offsetHeight;\n const boundElementWidth = this.boundElement.getBoundingClientRect().width;\n const boundElementHeight = this.boundElement.getBoundingClientRect().height;\n const offsetModifier = this.offsetModifier;\n\n /** Check if there is enough space to fit the popover in the desired position */\n const fits = (pos: PopoverPosition): boolean => {\n switch (pos) {\n case PopoverPosition.TOP:\n return (\n availableSpace.top >= hostHeight - this.spaceTolerance &&\n this.hasCenteredHorizontalSpace(availableSpace.left, availableSpace.right, hostWidth, boundElementWidth)\n );\n case PopoverPosition.TOP_RIGHT:\n return (\n availableSpace.top >= hostHeight &&\n this.hasEnoughSideSpace(availableSpace.right, hostWidth, boundElementWidth, offsetModifier)\n );\n case PopoverPosition.TOP_LEFT:\n return (\n availableSpace.top >= hostHeight &&\n this.hasEnoughSideSpace(availableSpace.left, hostWidth, boundElementWidth, offsetModifier)\n );\n case PopoverPosition.RIGHT:\n return (\n availableSpace.right >= hostWidth &&\n this.hasCenteredVerticalSpace(availableSpace.top, availableSpace.bottom, hostHeight, boundElementHeight)\n );\n case PopoverPosition.RIGHT_BOTTOM:\n return (\n availableSpace.right >= hostWidth &&\n this.hasEnoughSideSpace(availableSpace.bottom, hostHeight, boundElementHeight, offsetModifier)\n );\n case PopoverPosition.RIGHT_TOP:\n return (\n availableSpace.right >= hostWidth &&\n this.hasEnoughSideSpace(availableSpace.top, hostHeight, boundElementHeight, offsetModifier)\n );\n case PopoverPosition.BOTTOM:\n return (\n availableSpace.bottom >= hostHeight &&\n this.hasCenteredHorizontalSpace(availableSpace.left, availableSpace.right, hostWidth, boundElementWidth)\n );\n case PopoverPosition.BOTTOM_LEFT:\n return (\n availableSpace.bottom >= hostHeight &&\n this.hasEnoughSideSpace(availableSpace.left, hostWidth, boundElementWidth, offsetModifier)\n );\n case PopoverPosition.BOTTOM_RIGHT:\n return (\n availableSpace.bottom >= hostHeight &&\n this.hasEnoughSideSpace(availableSpace.right, hostWidth, boundElementWidth, offsetModifier)\n );\n case PopoverPosition.LEFT:\n return (\n availableSpace.left >= hostWidth &&\n this.hasCenteredVerticalSpace(availableSpace.top, availableSpace.bottom, hostHeight, boundElementHeight)\n );\n case PopoverPosition.LEFT_TOP:\n return (\n availableSpace.left >= hostWidth &&\n this.hasEnoughSideSpace(availableSpace.top, hostHeight, boundElementHeight, offsetModifier)\n );\n case PopoverPosition.LEFT_BOTTOM:\n return (\n availableSpace.left >= hostWidth &&\n this.hasEnoughSideSpace(availableSpace.bottom, hostHeight, boundElementHeight, offsetModifier)\n );\n\n default:\n return false;\n }\n };\n\n // Check desired position first\n if (fits(desiredPosition)) {\n return desiredPosition;\n }\n\n // Find position index and create rotation starting from next position\n const positions = ZPopover.positionOrder;\n const startIndex = positions.indexOf(desiredPosition);\n\n if (startIndex === -1) {\n return desiredPosition; // fallback if position not found\n }\n\n // Try all other positions starting from the next one\n for (let i = 1; i < positions.length; i++) {\n const posIndex = (startIndex + i) % positions.length;\n const pos = positions[posIndex];\n if (fits(pos)) {\n return pos;\n }\n }\n\n return this.findBestFallbackPosition(availableSpace);\n }\n\n /** Find the best fallback position based on available space when no position fits perfectly. */\n private findBestFallbackPosition(availableSpace: Offsets): PopoverPosition {\n // Determine which horizontal and vertical direction has the most available space\n const bestHorizontalDirection =\n availableSpace.right >= availableSpace.left ? PopoverPosition.RIGHT : PopoverPosition.LEFT;\n\n const bestVerticalDirection =\n availableSpace.bottom >= availableSpace.top ? PopoverPosition.BOTTOM : PopoverPosition.TOP;\n\n // Choose the main direction based on which axis has more space overall\n const maxHorizontalSpace = Math.max(availableSpace.right, availableSpace.left);\n const maxVerticalSpace = Math.max(availableSpace.bottom, availableSpace.top);\n\n const mainDirection = maxVerticalSpace >= maxHorizontalSpace ? bestVerticalDirection : bestHorizontalDirection;\n\n // Decide if a secondary direction is needed\n // Only add a secondary direction if the difference between min and max in that axis is at least double\n let needsSecondaryDirection = false;\n\n if (mainDirection === bestVerticalDirection) {\n // If main direction is vertical, check horizontal space difference\n const minHorizontalSpace = Math.min(availableSpace.right, availableSpace.left);\n needsSecondaryDirection = maxHorizontalSpace >= minHorizontalSpace * 2;\n } else {\n // If main direction is horizontal, check vertical space difference\n const minVerticalSpace = Math.min(availableSpace.bottom, availableSpace.top);\n needsSecondaryDirection = maxVerticalSpace >= minVerticalSpace * 2;\n }\n\n if (!needsSecondaryDirection) {\n return mainDirection;\n }\n\n const secondaryDirection =\n mainDirection === bestVerticalDirection ? bestHorizontalDirection : bestVerticalDirection;\n\n // Return a combined position (e.g., \"bottom_right\")\n return `${mainDirection}_${secondaryDirection}` as PopoverPosition;\n }\n\n /**\n * Find the nearest scrollable ancestor of an element to take as a reference for positioning.\n * The ancestor is considered scrollable if it doesn't have `overflow` property set to `hidden` and its scroll size is bigger than its client size.\n */\n private findScrollableAncestor(element: HTMLElement): HTMLElement {\n let parent = getParentElement(element);\n\n while (parent) {\n if (parent === element.ownerDocument.documentElement) {\n return parent as HTMLElement;\n }\n\n const style = window.getComputedStyle(parent);\n const {overflow, overflowX, overflowY} = style;\n const hasHiddenOverflow = overflow === \"hidden\" || overflowY === \"hidden\" || overflowX === \"hidden\";\n const isScrollable =\n (parent.scrollHeight > parent.clientHeight && overflow !== \"visible\" && overflowY !== \"visible\") ||\n (parent.scrollWidth > parent.clientWidth && overflow !== \"visible\" && overflowX !== \"visible\");\n\n if (!hasHiddenOverflow && isScrollable) {\n return parent as HTMLElement;\n }\n\n parent = getParentElement(parent);\n }\n\n return element.ownerDocument.documentElement;\n }\n\n /**\n * Calculate available space around the element bound with the popover, based on its nearest scrollable ancestor.\n *\n * Calculations for `right` and `bottom` can be a little bit confusing because `boundingRect.right` and `bottom` may not be what you expect...\n * For more information see the explanation in the docs.\n * @link https://developer.mozilla.org/en-US/docs/Web/API/Element/getBoundingClientRect#return_value\n */\n private calculateAvailableSpace(): Offsets {\n const boundElementRect = this.boundElement.getBoundingClientRect();\n\n if (\n this.lastBoundRect &&\n this.lastBoundRect.x === boundElementRect.x &&\n this.lastBoundRect.y === boundElementRect.y &&\n this.lastBoundRect.width === boundElementRect.width &&\n this.lastBoundRect.height === boundElementRect.height &&\n this.cachedAvailableSpace\n ) {\n // If the bound element's rect hasn't changed, return the cached rect\n return this.cachedAvailableSpace;\n }\n\n this.lastBoundRect = boundElementRect;\n const scrollableAncestor = this.findScrollableAncestor(this.boundElement);\n const scrollableAncestorRect = scrollableAncestor.getBoundingClientRect();\n const isScrollableAncestorNested = scrollableAncestor !== this.boundElement.ownerDocument.documentElement;\n const documentWidth = this.boundElement.ownerDocument.documentElement.clientWidth;\n const documentHeight = this.boundElement.ownerDocument.documentElement.clientHeight;\n const safeSpace = 8; // extra space to avoid popover being too close to the edges\n\n // These deltas represent the offset between the scrollable ancestor and the viewport.\n // They are used to adjust the available space calculations when the scrollable ancestor is not the document or body,\n // to try to fit the popover inside the scrollable ancestor.\n const deltaTop = isScrollableAncestorNested ? scrollableAncestorRect.top : 0;\n const deltaRight = isScrollableAncestorNested ? documentWidth - scrollableAncestorRect.right : 0;\n const deltaBottom = isScrollableAncestorNested ? documentHeight - scrollableAncestorRect.bottom : 0;\n const deltaLeft = isScrollableAncestorNested ? scrollableAncestorRect.left : 0;\n\n this.cachedAvailableSpace = {\n top: boundElementRect.top - deltaTop - safeSpace,\n right: documentWidth - boundElementRect.right - deltaRight - safeSpace,\n bottom: documentHeight - boundElementRect.bottom - deltaBottom - safeSpace,\n left: boundElementRect.left - deltaLeft - safeSpace,\n };\n\n return this.cachedAvailableSpace;\n }\n\n /** Calculate the space around the bound element relative to the viewport. */\n private getBoundElementOffsets(): Offsets {\n const elementRect = this.boundElement.getBoundingClientRect();\n const documentWidth = this.boundElement.ownerDocument.documentElement.clientWidth;\n const documentHeight = this.boundElement.ownerDocument.documentElement.clientHeight;\n\n return {\n top: elementRect.top,\n right: documentWidth - elementRect.right,\n bottom: documentHeight - elementRect.bottom,\n left: elementRect.left,\n };\n }\n\n /** Compute positioning offsets in the appropriate coordinate space, accounting for transformed containing blocks and scroll. */\n private computePositionOffsets(): Offsets {\n const boundElementOffsets = this.getBoundElementOffsets();\n const containingBlockAncestor = findContainingBlockAncestor(this.host);\n const isDocumentElement = containingBlockAncestor === this.host.ownerDocument.documentElement;\n\n if (isDocumentElement) {\n return boundElementOffsets;\n }\n\n const containingBlockRect = containingBlockAncestor.getBoundingClientRect();\n const containingBlockStyle = getComputedStyle(containingBlockAncestor);\n /** Padding box of the containing block, accounting for borders. */\n const paddingBox = {\n top: containingBlockRect.top + parseFloat(containingBlockStyle.borderTopWidth),\n right: containingBlockRect.right - parseFloat(containingBlockStyle.borderRightWidth),\n bottom: containingBlockRect.bottom - parseFloat(containingBlockStyle.borderBottomWidth),\n left: containingBlockRect.left + parseFloat(containingBlockStyle.borderLeftWidth),\n };\n\n const boundElementRect = this.boundElement.getBoundingClientRect();\n /** Bound element offsets relative to the containing block padding box. */\n const relativeOffsets = {\n top: boundElementRect.top - paddingBox.top,\n right: paddingBox.right - boundElementRect.right,\n bottom: paddingBox.bottom - boundElementRect.bottom,\n left: boundElementRect.left - paddingBox.left,\n };\n\n /** Account for scroll to keep the popover aligned while the containing block scrolls. */\n return {\n top: relativeOffsets.top + containingBlockAncestor.scrollTop,\n right: relativeOffsets.right - containingBlockAncestor.scrollLeft,\n bottom: relativeOffsets.bottom - containingBlockAncestor.scrollTop,\n left: relativeOffsets.left + containingBlockAncestor.scrollLeft,\n };\n }\n\n /** Apply positioning styles based on `position` parameter. */\n private applyPositionStyles(position: PopoverPosition, availableSpace: Offsets): void {\n const boundElementWidth = this.boundElement.offsetWidth;\n const boundElementHeight = this.boundElement.offsetHeight;\n const offsetModifier = this.offsetModifier;\n /** Distance between the arrow center and the popover edge. Needed to align the center of the arrow with the center of the bound element when `showArrow` and `center` are enabled. */\n const arrowModifier = this.showArrow && this.center ? 8 : 0;\n const hostStyle = this.host.style;\n /** Gap between the popover and the bound element. */\n const distanceFromBound = parseInt(hostStyle.getPropertyValue(\"--space-unit\")) || 8;\n const positionOffsets = this.computePositionOffsets();\n\n /**\n * Precomputed bases to reduce repeated arithmetic in the switch below.\n * They represent the bound element edges plus optional centering offsets.\n */\n const leftBase = positionOffsets.left + boundElementWidth * offsetModifier;\n const rightBase = positionOffsets.right + boundElementWidth * offsetModifier;\n const topBase = positionOffsets.top + boundElementHeight;\n const bottomBase = positionOffsets.bottom + boundElementHeight;\n const sideTopBase = positionOffsets.top + boundElementHeight * offsetModifier;\n const sideBottomBase = positionOffsets.bottom + boundElementHeight * offsetModifier;\n\n let maxWidth: number;\n let maxHeight: number;\n\n switch (position) {\n case PopoverPosition.TOP:\n case PopoverPosition.TOP_RIGHT:\n hostStyle.bottom = `${bottomBase + distanceFromBound}px`;\n hostStyle.left = `${leftBase - (position === PopoverPosition.TOP_RIGHT ? arrowModifier : 0)}px`;\n maxHeight = availableSpace.top - distanceFromBound;\n if (position === PopoverPosition.TOP_RIGHT) {\n maxWidth = availableSpace.right + boundElementWidth * offsetModifier;\n }\n break;\n\n case PopoverPosition.TOP_LEFT:\n hostStyle.right = `${rightBase - arrowModifier}px`;\n hostStyle.bottom = `${bottomBase + distanceFromBound}px`;\n maxWidth = availableSpace.left + boundElementWidth * offsetModifier;\n maxHeight = availableSpace.top - distanceFromBound;\n break;\n\n case PopoverPosition.BOTTOM:\n case PopoverPosition.BOTTOM_RIGHT:\n hostStyle.top = `${topBase + distanceFromBound}px`;\n hostStyle.left = `${leftBase - (position === PopoverPosition.BOTTOM_RIGHT ? arrowModifier : 0)}px`;\n maxHeight = availableSpace.bottom - distanceFromBound;\n if (position === PopoverPosition.BOTTOM_RIGHT) {\n maxWidth = availableSpace.right + boundElementWidth * offsetModifier;\n }\n break;\n\n case PopoverPosition.BOTTOM_LEFT:\n hostStyle.top = `${topBase + distanceFromBound}px`;\n hostStyle.right = `${rightBase - arrowModifier}px`;\n maxWidth = availableSpace.left + boundElementWidth * offsetModifier;\n maxHeight = availableSpace.bottom - distanceFromBound;\n break;\n\n case PopoverPosition.RIGHT:\n case PopoverPosition.RIGHT_BOTTOM:\n hostStyle.top = `${sideTopBase - (position === PopoverPosition.RIGHT_BOTTOM ? arrowModifier : 0)}px`;\n hostStyle.left = `${positionOffsets.left + boundElementWidth + distanceFromBound}px`;\n maxWidth = availableSpace.right - distanceFromBound;\n if (position === PopoverPosition.RIGHT) {\n maxHeight = availableSpace.top + availableSpace.bottom + boundElementHeight;\n } else {\n maxHeight = availableSpace.bottom + boundElementHeight * offsetModifier;\n }\n break;\n\n case PopoverPosition.RIGHT_TOP:\n hostStyle.bottom = `${sideBottomBase - arrowModifier}px`;\n hostStyle.left = `${positionOffsets.left + boundElementWidth + distanceFromBound}px`;\n maxWidth = availableSpace.right - distanceFromBound;\n maxHeight = availableSpace.top + boundElementHeight * offsetModifier;\n break;\n\n case PopoverPosition.LEFT:\n case PopoverPosition.LEFT_BOTTOM:\n hostStyle.top = `${sideTopBase - (position === PopoverPosition.LEFT_BOTTOM ? arrowModifier : 0)}px`;\n hostStyle.right = `${positionOffsets.right + boundElementWidth + distanceFromBound}px`;\n maxWidth = availableSpace.left - distanceFromBound;\n if (position === PopoverPosition.LEFT_BOTTOM) {\n maxHeight = availableSpace.bottom + boundElementHeight * offsetModifier;\n }\n break;\n\n case PopoverPosition.LEFT_TOP:\n hostStyle.right = `${positionOffsets.right + boundElementWidth + distanceFromBound}px`;\n hostStyle.bottom = `${sideBottomBase - arrowModifier}px`;\n maxWidth = availableSpace.left - distanceFromBound;\n maxHeight = availableSpace.top + boundElementHeight * offsetModifier;\n break;\n }\n\n if (getDevice() !== Device.MOBILE) {\n // Only force max sizes on non-mobile viewports\n Object.assign(hostStyle, {\n maxWidth: maxWidth ? `${maxWidth}px` : \"\",\n maxHeight: maxHeight ? `${maxHeight}px` : \"\",\n });\n }\n }\n\n /** Set the position of the popover. */\n private setPosition(): void {\n if (!this.boundElement) {\n return;\n }\n\n if (!isElementVisibleInContainer(this.boundElement, this.findScrollableAncestor(this.boundElement))) {\n // If the bound element is not visible, hide the popover too\n this.open = false;\n\n return;\n }\n\n Object.assign(this.host.style, {\n // Reset all positioning properties\n top: \"auto\",\n right: \"auto\",\n bottom: \"auto\",\n left: \"auto\",\n maxWidth: \"\",\n maxHeight: \"\",\n // Set initial visibility to hidden while calculating position...\n visibility: \"hidden\",\n });\n\n const availableSpace = this.calculateAvailableSpace();\n const position = this.getOptimalPopoverPosition(this.position, availableSpace);\n\n this.applyPositionStyles(position, availableSpace);\n this.currentPosition = position;\n this.positionChange.emit({position: this.currentPosition});\n\n // ...then restore the visibility\n this.host.style.visibility = \"visible\";\n }\n\n componentWillLoad(): void {\n this.validatePosition(this.position);\n }\n\n componentDidLoad(): void {\n this.findBoundElement();\n if (this.open) {\n this.onOpen();\n }\n }\n\n disconnectedCallback(): void {\n cancelAnimationFrame(this.animationFrameRequestId);\n }\n\n render(): HTMLZPopoverElement {\n return (\n <Host current-position={this.currentPosition}>\n <slot></slot>\n </Host>\n );\n }\n}\n"]}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/components/z-popover/index.tsx"],"names":[],"mappings":"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","sourcesContent":["import {Component, Element, Event, EventEmitter, Host, Listen, Prop, State, Watch, h} from \"@stencil/core\";\nimport {Device, KeyboardCode, PopoverPosition} from \"../../beans\";\nimport {\n containsElement,\n findContainingBlockAncestor,\n getDevice,\n getParentElement,\n isElementVisibleInContainer,\n} from \"../../utils/utils\";\n\n/** Centering offset modifier. 0 for no offset, 0.5 for centering. */\ntype OffsetModifier = 0 | 0.5;\ntype Offsets = {top: number; right: number; bottom: number; left: number};\n\n/**\n * Popover component.\n * This component displays a popover bound to an element.\n * It supports various positions and can automatically adjust it based on available space, accounting for scrollable containers.\n *\n * Notes:\n * - If positioning has an odd behavior, consider manually adjusting the size of the slotted elements (using `width`, `height`, `max-width`, `max-height`, etc...) when its content is \"fluid\" (like text), because it can interfere with the position calculation (for example a long text on one single line can be bigger than the available space, letting the algorithm think the popover doesn't fits).\n *\n * @cssprop --z-popover-theme--surface - background color of the popover.\n * @cssprop --z-popover-theme--text - foreground color of the popover.\n * @cssprop --z-popover-padding - padding of the popover.\n * @cssprop --z-popover-shadow-filter - drop-shadow filter of the popover. Defaults to `drop-shadow(0 1px 2px var(--shadow-color-base))`.\n */\n@Component({\n tag: \"z-popover\",\n styleUrl: \"styles.css\",\n shadow: true,\n})\nexport class ZPopover {\n /**\n * The preferred position to render the popover.\n * The popover will automatically search another position if not enough space is available for the preferred position.\n * If the preferred position is not available, it will try to find the best position starting from `TOP` and going clockwise.\n */\n @Prop({reflect: true, mutable: true})\n position?: PopoverPosition = PopoverPosition.TOP;\n\n /**\n * The initial open state of the popover.\n * Internal changes of this prop are emitted through the `openChange` event.\n * Make sure to listen to that event if you need the updated state of the popover from the outside, to avoid inconsistent values.\n */\n @Prop({reflect: true, mutable: true})\n open = false;\n\n /**\n * The selector or the element bound with the popover.\n * If string css selector is provided make sure to use a valid selector.\n */\n @Prop()\n bindTo?: string | HTMLElement;\n\n /** Whether to show popover's arrow. */\n @Prop({reflect: true})\n showArrow = false;\n\n /** Whether to center the popup on the main side (according to \"position\"). */\n @Prop({reflect: true})\n center = false;\n\n /**\n * Whether the popover can be closed by clicking outside of it or pressing the escape key.\n * Otherwise, it will be closed only programmatically (by setting `open` to `false`).\n * Default: `true`.\n */\n @Prop()\n closable = true;\n\n /**\n * The current position of the popover.\n * It differs from `position` only when calculated automatically for space reasons.\n */\n @State()\n currentPosition?: PopoverPosition;\n\n @Element() host: HTMLZPopoverElement;\n\n // Clockwise order of positions.\n private static readonly positionOrder: PopoverPosition[] = [\n PopoverPosition.TOP,\n PopoverPosition.TOP_RIGHT,\n PopoverPosition.TOP_LEFT,\n PopoverPosition.RIGHT,\n PopoverPosition.RIGHT_BOTTOM,\n PopoverPosition.RIGHT_TOP,\n PopoverPosition.BOTTOM,\n PopoverPosition.BOTTOM_LEFT,\n PopoverPosition.BOTTOM_RIGHT,\n PopoverPosition.LEFT,\n PopoverPosition.LEFT_TOP,\n PopoverPosition.LEFT_BOTTOM,\n ] as const;\n\n private animationFrameRequestId?: number;\n\n /** space tolerance for space calculations */\n private readonly spaceTolerance = 3;\n\n /** The element bound to the popover. */\n private boundElement?: HTMLElement;\n\n /** Cached available space around the bound element to avoid unnecessary recalculations */\n private cachedAvailableSpace?: Offsets;\n\n /** Last bounding rect of the bound element to detect changes and eventually invalidate the caches. */\n private lastBoundRect?: DOMRect;\n\n /** Fired when the position changes. */\n @Event()\n positionChange: EventEmitter<{position: PopoverPosition}>;\n\n /** Event emitted when the open state of the popover changes (e.g. when the user clicks outside the popover to close it, if `closable` is true). */\n @Event()\n openChange: EventEmitter<{open: boolean}>;\n\n @Listen(\"keyup\", {target: \"window\", capture: true})\n closePopoverWithKeyboard(e: KeyboardEvent): void {\n if (this.closable && e.key === KeyboardCode.ESC) {\n e.stopPropagation();\n this.open = false;\n }\n }\n\n /**\n * Close the popover when clicking outside of its content.\n * Stop event propagation if the click was fired by popover's trigger element,\n * to prevent close and reopen glitches.\n */\n @Listen(\"click\", {target: \"body\", capture: true})\n handleOutsideClick(e: MouseEvent): void {\n const target = e.target as Element;\n if (!this.closable || !this.open || containsElement(this.host, target)) {\n return;\n }\n\n if (containsElement(this.boundElement, target)) {\n // stop propagation if the click was on the trigger element to prevent close and reopen glitches\n e.stopPropagation();\n }\n this.open = false;\n }\n\n @Watch(\"position\")\n validatePosition(newValue: PopoverPosition): void {\n if (!Object.values(PopoverPosition).includes(newValue as PopoverPosition) || newValue === PopoverPosition.AUTO) {\n newValue = PopoverPosition.TOP;\n this.position = newValue;\n }\n this.currentPosition = newValue;\n if (this.open) {\n this.setPosition();\n }\n }\n\n /** Setup popover behaviors when `open` changes. */\n @Watch(\"open\")\n onOpen(): void {\n cancelAnimationFrame(this.animationFrameRequestId);\n this.openChange.emit({open: this.open});\n if (!this.open) {\n Object.assign(this.host.style, {\n // Reset all positioning properties\n top: \"auto\",\n right: \"auto\",\n bottom: \"auto\",\n left: \"auto\",\n maxWidth: \"\",\n maxHeight: \"\",\n // Set initial visibility to hidden while calculating position...\n visibility: \"hidden\",\n });\n this.currentPosition = undefined;\n\n return;\n }\n\n const updatePositionLoop = (): void => {\n if (!this.open) {\n return;\n }\n\n this.setPosition();\n this.animationFrameRequestId = requestAnimationFrame(updatePositionLoop);\n };\n\n // call `setPosition` after a tick to ensure the DOM is ready and sizes are available\n setTimeout(() => {\n updatePositionLoop();\n }, 0);\n }\n\n @Watch(\"bindTo\")\n onBindingChange(): void {\n this.findBoundElement();\n }\n\n /** Returns the offset modifier to use in calculations to align the popover with the bound element. */\n private get offsetModifier(): OffsetModifier {\n return this.center ? 0.5 : 0;\n }\n\n private findBoundElement(): void {\n if (typeof this.bindTo === \"string\") {\n this.boundElement = this.host.ownerDocument.querySelector(this.bindTo) as HTMLElement;\n } else if (this.bindTo) {\n this.boundElement = this.bindTo;\n } else {\n this.boundElement = getParentElement(this.host) as HTMLElement;\n if (this.boundElement.tagName.toLowerCase() === \"z-tooltip\") {\n // If the popover is used inside a tooltip without a specified `bindTo`, bind it to the parent of the tooltip.\n this.boundElement = getParentElement(this.boundElement) as HTMLElement;\n }\n }\n }\n\n /**\n * Check if element has enough space to the right and left to be centered.\n * Used for `TOP` and `BOTTOM` position.\n * When `center` is not enabled, only one side needs to be checked and `RIGHT` is the default.\n */\n private hasCenteredHorizontalSpace(\n availableLeft: number,\n availableRight: number,\n hostWidth: number,\n boundElementWidth: number\n ): boolean {\n const requiredSideSpace = (hostWidth - boundElementWidth) * (1 - this.offsetModifier);\n\n if (!this.center) {\n return availableRight >= requiredSideSpace - this.spaceTolerance;\n }\n\n return (\n availableRight >= requiredSideSpace - this.spaceTolerance &&\n availableLeft >= requiredSideSpace - this.spaceTolerance\n );\n }\n\n /**\n * Check if element has enough space to the top and bottom to be centered.\n * Used for `RIGHT` and `LEFT` position.\n * When `center` is not enabled, only one side needs to be checked and `BOTTOM` is the default.\n */\n private hasCenteredVerticalSpace(\n availableTop: number,\n availableBottom: number,\n hostHeight: number,\n boundElementHeight: number\n ): boolean {\n const requiredSideSpace = (hostHeight - boundElementHeight) * (1 - this.offsetModifier);\n\n if (!this.center) {\n return availableBottom >= requiredSideSpace - this.spaceTolerance;\n }\n\n return (\n availableTop >= requiredSideSpace - this.spaceTolerance &&\n availableBottom >= requiredSideSpace - this.spaceTolerance\n );\n }\n\n /**\n * Check if there is enough space in the given direction to fit the popover.\n * Used for composed positions like TOP_RIGHT, LEFT_BOTTOM, etc.\n */\n private hasEnoughSideSpace(\n availableSpace: number,\n hostSize: number,\n boundElementSize: number,\n offsetModifier: OffsetModifier\n ): boolean {\n return availableSpace >= hostSize - boundElementSize * (1 - offsetModifier) - this.spaceTolerance;\n }\n\n /**\n * Given a desired position and available space around the bound element, returns the best position\n * that fits the popover, trying all positions if needed.\n * Takes into account offsetModifier for centering.\n * @param desiredPosition The desired position of the popover.\n * @param availableSpace The available space around the bound element.\n */\n private getOptimalPopoverPosition(desiredPosition: PopoverPosition, availableSpace: Offsets): PopoverPosition {\n const hostWidth = this.host.offsetWidth;\n const hostHeight = this.host.offsetHeight;\n const boundElementWidth = this.boundElement.getBoundingClientRect().width;\n const boundElementHeight = this.boundElement.getBoundingClientRect().height;\n const offsetModifier = this.offsetModifier;\n\n /** Check if there is enough space to fit the popover in the desired position */\n const fits = (pos: PopoverPosition): boolean => {\n switch (pos) {\n case PopoverPosition.TOP:\n return (\n availableSpace.top >= hostHeight - this.spaceTolerance &&\n this.hasCenteredHorizontalSpace(availableSpace.left, availableSpace.right, hostWidth, boundElementWidth)\n );\n case PopoverPosition.TOP_RIGHT:\n return (\n availableSpace.top >= hostHeight &&\n this.hasEnoughSideSpace(availableSpace.right, hostWidth, boundElementWidth, offsetModifier)\n );\n case PopoverPosition.TOP_LEFT:\n return (\n availableSpace.top >= hostHeight &&\n this.hasEnoughSideSpace(availableSpace.left, hostWidth, boundElementWidth, offsetModifier)\n );\n case PopoverPosition.RIGHT:\n return (\n availableSpace.right >= hostWidth &&\n this.hasCenteredVerticalSpace(availableSpace.top, availableSpace.bottom, hostHeight, boundElementHeight)\n );\n case PopoverPosition.RIGHT_BOTTOM:\n return (\n availableSpace.right >= hostWidth &&\n this.hasEnoughSideSpace(availableSpace.bottom, hostHeight, boundElementHeight, offsetModifier)\n );\n case PopoverPosition.RIGHT_TOP:\n return (\n availableSpace.right >= hostWidth &&\n this.hasEnoughSideSpace(availableSpace.top, hostHeight, boundElementHeight, offsetModifier)\n );\n case PopoverPosition.BOTTOM:\n return (\n availableSpace.bottom >= hostHeight &&\n this.hasCenteredHorizontalSpace(availableSpace.left, availableSpace.right, hostWidth, boundElementWidth)\n );\n case PopoverPosition.BOTTOM_LEFT:\n return (\n availableSpace.bottom >= hostHeight &&\n this.hasEnoughSideSpace(availableSpace.left, hostWidth, boundElementWidth, offsetModifier)\n );\n case PopoverPosition.BOTTOM_RIGHT:\n return (\n availableSpace.bottom >= hostHeight &&\n this.hasEnoughSideSpace(availableSpace.right, hostWidth, boundElementWidth, offsetModifier)\n );\n case PopoverPosition.LEFT:\n return (\n availableSpace.left >= hostWidth &&\n this.hasCenteredVerticalSpace(availableSpace.top, availableSpace.bottom, hostHeight, boundElementHeight)\n );\n case PopoverPosition.LEFT_TOP:\n return (\n availableSpace.left >= hostWidth &&\n this.hasEnoughSideSpace(availableSpace.top, hostHeight, boundElementHeight, offsetModifier)\n );\n case PopoverPosition.LEFT_BOTTOM:\n return (\n availableSpace.left >= hostWidth &&\n this.hasEnoughSideSpace(availableSpace.bottom, hostHeight, boundElementHeight, offsetModifier)\n );\n\n default:\n return false;\n }\n };\n\n // Check desired position first\n if (fits(desiredPosition)) {\n return desiredPosition;\n }\n\n // Find position index and create rotation starting from next position\n const positions = ZPopover.positionOrder;\n const startIndex = positions.indexOf(desiredPosition);\n\n if (startIndex === -1) {\n return desiredPosition; // fallback if position not found\n }\n\n // Try all other positions starting from the next one\n for (let i = 1; i < positions.length; i++) {\n const posIndex = (startIndex + i) % positions.length;\n const pos = positions[posIndex];\n if (fits(pos)) {\n return pos;\n }\n }\n\n return this.findBestFallbackPosition(availableSpace);\n }\n\n /** Find the best fallback position based on available space when no position fits perfectly. */\n private findBestFallbackPosition(availableSpace: Offsets): PopoverPosition {\n // Determine which horizontal and vertical direction has the most available space\n const bestHorizontalDirection =\n availableSpace.right >= availableSpace.left ? PopoverPosition.RIGHT : PopoverPosition.LEFT;\n\n const bestVerticalDirection =\n availableSpace.bottom >= availableSpace.top ? PopoverPosition.BOTTOM : PopoverPosition.TOP;\n\n // Choose the main direction based on which axis has more space overall\n const maxHorizontalSpace = Math.max(availableSpace.right, availableSpace.left);\n const maxVerticalSpace = Math.max(availableSpace.bottom, availableSpace.top);\n\n const mainDirection = maxVerticalSpace >= maxHorizontalSpace ? bestVerticalDirection : bestHorizontalDirection;\n\n // Decide if a secondary direction is needed\n // Only add a secondary direction if the difference between min and max in that axis is at least double\n let needsSecondaryDirection = false;\n\n if (mainDirection === bestVerticalDirection) {\n // If main direction is vertical, check horizontal space difference\n const minHorizontalSpace = Math.min(availableSpace.right, availableSpace.left);\n needsSecondaryDirection = maxHorizontalSpace >= minHorizontalSpace * 2;\n } else {\n // If main direction is horizontal, check vertical space difference\n const minVerticalSpace = Math.min(availableSpace.bottom, availableSpace.top);\n needsSecondaryDirection = maxVerticalSpace >= minVerticalSpace * 2;\n }\n\n if (!needsSecondaryDirection) {\n return mainDirection;\n }\n\n const secondaryDirection =\n mainDirection === bestVerticalDirection ? bestHorizontalDirection : bestVerticalDirection;\n\n // Return a combined position (e.g., \"bottom_right\")\n return `${mainDirection}_${secondaryDirection}` as PopoverPosition;\n }\n\n /**\n * Find the nearest scrollable ancestor of an element to take as a reference for positioning.\n * The ancestor is considered scrollable if it doesn't have `overflow` property set to `hidden` and its scroll size is bigger than its client size.\n */\n private findScrollableAncestor(element: HTMLElement): HTMLElement {\n let parent = getParentElement(element);\n\n while (parent) {\n if (parent === element.ownerDocument.documentElement) {\n return parent as HTMLElement;\n }\n\n const style = getComputedStyle(parent);\n const {overflow, overflowX, overflowY} = style;\n const hasHiddenOverflow = overflow === \"hidden\" || overflowY === \"hidden\" || overflowX === \"hidden\";\n const isScrollable =\n (parent.scrollHeight > parent.clientHeight && overflow !== \"visible\" && overflowY !== \"visible\") ||\n (parent.scrollWidth > parent.clientWidth && overflow !== \"visible\" && overflowX !== \"visible\");\n\n if (!hasHiddenOverflow && isScrollable) {\n return parent as HTMLElement;\n }\n\n parent = getParentElement(parent);\n }\n\n return element.ownerDocument.documentElement;\n }\n\n /**\n * Calculate available space around the element bound with the popover, based on its nearest scrollable ancestor.\n *\n * Calculations for `right` and `bottom` can be a little bit confusing because `boundingRect.right` and `bottom` may not be what you expect...\n * For more information see the explanation in the docs.\n * @link https://developer.mozilla.org/en-US/docs/Web/API/Element/getBoundingClientRect#return_value\n */\n private calculateAvailableSpace(): Offsets {\n const boundElementRect = this.boundElement.getBoundingClientRect();\n\n if (\n this.lastBoundRect &&\n this.lastBoundRect.x === boundElementRect.x &&\n this.lastBoundRect.y === boundElementRect.y &&\n this.lastBoundRect.width === boundElementRect.width &&\n this.lastBoundRect.height === boundElementRect.height &&\n this.cachedAvailableSpace\n ) {\n // If the bound element's rect hasn't changed, return the cached rect\n return this.cachedAvailableSpace;\n }\n\n this.lastBoundRect = boundElementRect;\n const scrollableAncestor = this.findScrollableAncestor(this.boundElement);\n const scrollableAncestorRect = scrollableAncestor.getBoundingClientRect();\n const isScrollableAncestorNested = scrollableAncestor !== this.boundElement.ownerDocument.documentElement;\n const documentWidth = this.boundElement.ownerDocument.documentElement.clientWidth;\n const documentHeight = this.boundElement.ownerDocument.documentElement.clientHeight;\n const safeSpace = 8; // extra space to avoid popover being too close to the edges\n\n // These deltas represent the offset between the scrollable ancestor and the viewport.\n // They are used to adjust the available space calculations when the scrollable ancestor is not the document or body,\n // to try to fit the popover inside the scrollable ancestor.\n const deltaTop = isScrollableAncestorNested ? scrollableAncestorRect.top : 0;\n const deltaRight = isScrollableAncestorNested ? documentWidth - scrollableAncestorRect.right : 0;\n const deltaBottom = isScrollableAncestorNested ? documentHeight - scrollableAncestorRect.bottom : 0;\n const deltaLeft = isScrollableAncestorNested ? scrollableAncestorRect.left : 0;\n\n this.cachedAvailableSpace = {\n top: boundElementRect.top - deltaTop - safeSpace,\n right: documentWidth - boundElementRect.right - deltaRight - safeSpace,\n bottom: documentHeight - boundElementRect.bottom - deltaBottom - safeSpace,\n left: boundElementRect.left - deltaLeft - safeSpace,\n };\n\n return this.cachedAvailableSpace;\n }\n\n /** Calculate the space around the bound element relative to the viewport. */\n private getBoundElementOffsets(): Offsets {\n const elementRect = this.boundElement.getBoundingClientRect();\n const documentWidth = this.boundElement.ownerDocument.documentElement.clientWidth;\n const documentHeight = this.boundElement.ownerDocument.documentElement.clientHeight;\n\n return {\n top: elementRect.top,\n right: documentWidth - elementRect.right,\n bottom: documentHeight - elementRect.bottom,\n left: elementRect.left,\n };\n }\n\n /** Compute positioning offsets in the appropriate coordinate space, accounting for transformed containing blocks and scroll. */\n private computePositionOffsets(): Offsets {\n const boundElementOffsets = this.getBoundElementOffsets();\n const containingBlockAncestor = findContainingBlockAncestor(this.host);\n const isDocumentElement = containingBlockAncestor === this.host.ownerDocument.documentElement;\n\n if (isDocumentElement) {\n return boundElementOffsets;\n }\n\n const containingBlockRect = containingBlockAncestor.getBoundingClientRect();\n const containingBlockStyle = getComputedStyle(containingBlockAncestor);\n /** Padding box of the containing block, accounting for borders. */\n const paddingBox = {\n top: containingBlockRect.top + parseFloat(containingBlockStyle.borderTopWidth),\n right: containingBlockRect.right - parseFloat(containingBlockStyle.borderRightWidth),\n bottom: containingBlockRect.bottom - parseFloat(containingBlockStyle.borderBottomWidth),\n left: containingBlockRect.left + parseFloat(containingBlockStyle.borderLeftWidth),\n };\n\n const boundElementRect = this.boundElement.getBoundingClientRect();\n /** Bound element offsets relative to the containing block padding box. */\n const relativeOffsets = {\n top: boundElementRect.top - paddingBox.top,\n right: paddingBox.right - boundElementRect.right,\n bottom: paddingBox.bottom - boundElementRect.bottom,\n left: boundElementRect.left - paddingBox.left,\n };\n\n /** Account for scroll to keep the popover aligned while the containing block scrolls. */\n return {\n top: relativeOffsets.top + containingBlockAncestor.scrollTop,\n right: relativeOffsets.right - containingBlockAncestor.scrollLeft,\n bottom: relativeOffsets.bottom - containingBlockAncestor.scrollTop,\n left: relativeOffsets.left + containingBlockAncestor.scrollLeft,\n };\n }\n\n /** Apply positioning styles based on `position` parameter. */\n private applyPositionStyles(position: PopoverPosition, availableSpace: Offsets): void {\n const boundElementWidth = this.boundElement.offsetWidth;\n const boundElementHeight = this.boundElement.offsetHeight;\n const offsetModifier = this.offsetModifier;\n /**\n * Distance between the arrow center and the popover edge.\n * Needed to align the center of the arrow with the center of the bound element when `showArrow` and `center` are enabled.\n */\n const arrowModifier = this.showArrow && this.center ? 8 : 0;\n const hostStyle = this.host.style;\n /** Gap between the popover and the bound element, set as margin in CSS. */\n const distanceFromBound = parseFloat(getComputedStyle(this.host).marginTop.replace(\"px\", \"\")) || 0;\n const positionOffsets = this.computePositionOffsets();\n\n /**\n * Precomputed bases to reduce repeated arithmetic in the switch below.\n * They represent the bound element edges plus optional centering offsets.\n */\n const leftBase = positionOffsets.left + boundElementWidth * offsetModifier;\n const rightBase = positionOffsets.right + boundElementWidth * offsetModifier;\n const topBase = positionOffsets.top + boundElementHeight;\n const bottomBase = positionOffsets.bottom + boundElementHeight;\n const sideTopBase = positionOffsets.top + boundElementHeight * offsetModifier;\n const sideBottomBase = positionOffsets.bottom + boundElementHeight * offsetModifier;\n\n let maxWidth: number;\n let maxHeight: number;\n\n switch (position) {\n case PopoverPosition.TOP:\n case PopoverPosition.TOP_RIGHT:\n hostStyle.bottom = `${bottomBase}px`;\n hostStyle.left = `${leftBase - (position === PopoverPosition.TOP_RIGHT ? arrowModifier : 0)}px`;\n maxHeight = availableSpace.top - distanceFromBound;\n if (position === PopoverPosition.TOP_RIGHT) {\n maxWidth = availableSpace.right + boundElementWidth * offsetModifier;\n }\n break;\n\n case PopoverPosition.TOP_LEFT:\n hostStyle.right = `${rightBase - arrowModifier}px`;\n hostStyle.bottom = `${bottomBase}px`;\n maxWidth = availableSpace.left + boundElementWidth * offsetModifier;\n maxHeight = availableSpace.top - distanceFromBound;\n break;\n\n case PopoverPosition.BOTTOM:\n case PopoverPosition.BOTTOM_RIGHT:\n hostStyle.top = `${topBase}px`;\n hostStyle.left = `${leftBase - (position === PopoverPosition.BOTTOM_RIGHT ? arrowModifier : 0)}px`;\n maxHeight = availableSpace.bottom - distanceFromBound;\n if (position === PopoverPosition.BOTTOM_RIGHT) {\n maxWidth = availableSpace.right + boundElementWidth * offsetModifier;\n }\n break;\n\n case PopoverPosition.BOTTOM_LEFT:\n hostStyle.top = `${topBase}px`;\n hostStyle.right = `${rightBase - arrowModifier}px`;\n maxWidth = availableSpace.left + boundElementWidth * offsetModifier;\n maxHeight = availableSpace.bottom - distanceFromBound;\n break;\n\n case PopoverPosition.RIGHT:\n case PopoverPosition.RIGHT_BOTTOM:\n hostStyle.top = `${sideTopBase - (position === PopoverPosition.RIGHT_BOTTOM ? arrowModifier : 0)}px`;\n hostStyle.left = `${positionOffsets.left + boundElementWidth}px`;\n maxWidth = availableSpace.right - distanceFromBound;\n if (position === PopoverPosition.RIGHT) {\n maxHeight = availableSpace.top + availableSpace.bottom + boundElementHeight;\n } else {\n maxHeight = availableSpace.bottom + boundElementHeight * offsetModifier;\n }\n break;\n\n case PopoverPosition.RIGHT_TOP:\n hostStyle.bottom = `${sideBottomBase - arrowModifier}px`;\n hostStyle.left = `${positionOffsets.left + boundElementWidth}px`;\n maxWidth = availableSpace.right - distanceFromBound;\n maxHeight = availableSpace.top + boundElementHeight * offsetModifier;\n break;\n\n case PopoverPosition.LEFT:\n case PopoverPosition.LEFT_BOTTOM:\n hostStyle.top = `${sideTopBase - (position === PopoverPosition.LEFT_BOTTOM ? arrowModifier : 0)}px`;\n hostStyle.right = `${positionOffsets.right + boundElementWidth}px`;\n maxWidth = availableSpace.left - distanceFromBound;\n if (position === PopoverPosition.LEFT_BOTTOM) {\n maxHeight = availableSpace.bottom + boundElementHeight * offsetModifier;\n }\n break;\n\n case PopoverPosition.LEFT_TOP:\n hostStyle.right = `${positionOffsets.right + boundElementWidth}px`;\n hostStyle.bottom = `${sideBottomBase - arrowModifier}px`;\n maxWidth = availableSpace.left - distanceFromBound;\n maxHeight = availableSpace.top + boundElementHeight * offsetModifier;\n break;\n }\n\n if (getDevice() !== Device.MOBILE) {\n // Only force max sizes on non-mobile viewports\n Object.assign(hostStyle, {\n maxWidth: maxWidth ? `${maxWidth}px` : \"\",\n maxHeight: maxHeight ? `${maxHeight}px` : \"\",\n });\n }\n }\n\n /** Set the position of the popover. */\n private setPosition(): void {\n if (!this.boundElement) {\n return;\n }\n\n if (!isElementVisibleInContainer(this.boundElement, this.findScrollableAncestor(this.boundElement))) {\n // If the bound element is not visible, hide the popover too\n this.open = false;\n\n return;\n }\n\n Object.assign(this.host.style, {\n // Reset all positioning properties\n top: \"auto\",\n right: \"auto\",\n bottom: \"auto\",\n left: \"auto\",\n maxWidth: \"\",\n maxHeight: \"\",\n // Set initial visibility to hidden while calculating position...\n visibility: \"hidden\",\n });\n\n const availableSpace = this.calculateAvailableSpace();\n const position = this.getOptimalPopoverPosition(this.position, availableSpace);\n\n this.applyPositionStyles(position, availableSpace);\n this.currentPosition = position;\n this.positionChange.emit({position: this.currentPosition});\n\n // ...then restore the visibility\n this.host.style.visibility = \"visible\";\n }\n\n componentWillLoad(): void {\n this.validatePosition(this.position);\n }\n\n componentDidLoad(): void {\n this.findBoundElement();\n if (this.open) {\n this.onOpen();\n }\n }\n\n disconnectedCallback(): void {\n cancelAnimationFrame(this.animationFrameRequestId);\n }\n\n render(): HTMLZPopoverElement {\n return (\n <Host current-position={this.currentPosition}>\n <slot></slot>\n </Host>\n );\n }\n}\n"]}