q2-tecton-elements 1.50.1 → 1.50.3

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 (425) hide show
  1. package/dist/cjs/click-elsewhere_2.cjs.entry.js +87 -79
  2. package/dist/cjs/click-elsewhere_2.cjs.entry.js.map +1 -1
  3. package/dist/cjs/{index-64d8b839.js → index-7f6e3c5a.js} +30 -18
  4. package/dist/cjs/index-7f6e3c5a.js.map +1 -0
  5. package/dist/cjs/{index-43010ce4.js → index-f69742cf.js} +1 -1
  6. package/dist/cjs/{index-43010ce4.js.map → index-f69742cf.js.map} +1 -1
  7. package/dist/cjs/loader.cjs.js +1 -1
  8. package/dist/cjs/q2-action-sheet.cjs.entry.js +2 -2
  9. package/dist/cjs/q2-avatar.cjs.entry.js +1 -1
  10. package/dist/cjs/q2-badge_7.cjs.entry.js +4 -4
  11. package/dist/cjs/q2-calendar.cjs.entry.js +2 -2
  12. package/dist/cjs/q2-card.cjs.entry.js +1 -1
  13. package/dist/cjs/q2-carousel-pane.cjs.entry.js +3 -3
  14. package/dist/cjs/q2-carousel.cjs.entry.js +1 -1
  15. package/dist/cjs/q2-chart-area.cjs.entry.js +2 -2
  16. package/dist/cjs/q2-chart-bar.cjs.entry.js +2 -2
  17. package/dist/cjs/q2-chart-donut.cjs.entry.js +2 -2
  18. package/dist/cjs/q2-checkbox-group.cjs.entry.js +1 -1
  19. package/dist/cjs/q2-checkbox.cjs.entry.js +1 -1
  20. package/dist/cjs/q2-currency.cjs.entry.js +1 -1
  21. package/dist/cjs/q2-data-table.cjs.entry.js +1 -1
  22. package/dist/cjs/q2-detail.cjs.entry.js +2 -2
  23. package/dist/cjs/q2-dropdown-item.cjs.entry.js +1 -1
  24. package/dist/cjs/q2-dropdown.cjs.entry.js +4 -2
  25. package/dist/cjs/q2-dropdown.cjs.entry.js.map +1 -1
  26. package/dist/cjs/q2-editable-field.cjs.entry.js +1 -1
  27. package/dist/cjs/q2-item.cjs.entry.js +2 -2
  28. package/dist/cjs/q2-legend.cjs.entry.js +1 -1
  29. package/dist/cjs/q2-list.cjs.entry.js +2 -2
  30. package/dist/cjs/q2-loc.cjs.entry.js +2 -2
  31. package/dist/cjs/q2-message.cjs.entry.js +2 -2
  32. package/dist/cjs/q2-month-picker.cjs.entry.js +3 -3
  33. package/dist/cjs/q2-optgroup.cjs.entry.js +2 -2
  34. package/dist/cjs/q2-option-list.cjs.entry.js +1 -1
  35. package/dist/cjs/q2-option.cjs.entry.js +1 -1
  36. package/dist/cjs/q2-pagination.cjs.entry.js +3 -3
  37. package/dist/cjs/q2-pill.cjs.entry.js +2 -2
  38. package/dist/cjs/q2-radio-group.cjs.entry.js +1 -1
  39. package/dist/cjs/q2-radio.cjs.entry.js +1 -1
  40. package/dist/cjs/q2-relative-time.cjs.entry.js +3 -3
  41. package/dist/cjs/q2-section.cjs.entry.js +3 -3
  42. package/dist/cjs/q2-select.cjs.entry.js +138 -20
  43. package/dist/cjs/q2-select.cjs.entry.js.map +1 -1
  44. package/dist/cjs/q2-stepper-pane.cjs.entry.js +1 -1
  45. package/dist/cjs/q2-stepper-vertical.cjs.entry.js +2 -2
  46. package/dist/cjs/q2-stepper.cjs.entry.js +2 -2
  47. package/dist/cjs/q2-tag.cjs.entry.js +2 -2
  48. package/dist/cjs/q2-tecton-elements.cjs.js +1 -1
  49. package/dist/cjs/q2-textarea.cjs.entry.js +2 -2
  50. package/dist/cjs/q2-tooltip.cjs.entry.js +1 -1
  51. package/dist/cjs/tecton-tab-pane.cjs.entry.js +2 -2
  52. package/dist/collection/components/click-elsewhere/click-elsewhere.js.map +1 -1
  53. package/dist/collection/components/click-elsewhere/test/click-elsewhere-test.e2e.js.map +1 -1
  54. package/dist/collection/components/q2-action-sheet/q2-action-sheet.js +1 -1
  55. package/dist/collection/components/q2-action-sheet/q2-action-sheet.js.map +1 -1
  56. package/dist/collection/components/q2-action-sheet/test/q2-action-sheet-test.e2e.js.map +1 -1
  57. package/dist/collection/components/q2-avatar/q2-avatar.js +1 -1
  58. package/dist/collection/components/q2-avatar/q2-avatar.js.map +1 -1
  59. package/dist/collection/components/q2-avatar/test/q2-avatar-test.e2e.js.map +1 -1
  60. package/dist/collection/components/q2-badge/q2-badge.js.map +1 -1
  61. package/dist/collection/components/q2-badge/test/q2-badge-test.e2e.js.map +1 -1
  62. package/dist/collection/components/q2-btn/q2-btn.js.map +1 -1
  63. package/dist/collection/components/q2-btn/test/q2-btn-test.e2e.js.map +1 -1
  64. package/dist/collection/components/q2-calendar/q2-calendar-helpers.js.map +1 -1
  65. package/dist/collection/components/q2-calendar/q2-calendar-types.js.map +1 -1
  66. package/dist/collection/components/q2-calendar/q2-calendar-validation.js.map +1 -1
  67. package/dist/collection/components/q2-calendar/q2-calendar.js.map +1 -1
  68. package/dist/collection/components/q2-calendar/q2-month-picker.js +2 -2
  69. package/dist/collection/components/q2-calendar/q2-month-picker.js.map +1 -1
  70. package/dist/collection/components/q2-calendar/test/helpers-test.e2e.js.map +1 -1
  71. package/dist/collection/components/q2-calendar/test/q2-calendar-month-picker-test.e2e.js.map +1 -1
  72. package/dist/collection/components/q2-calendar/test/q2-calendar-test.e2e.js +2 -2
  73. package/dist/collection/components/q2-calendar/test/q2-calendar-test.e2e.js.map +1 -1
  74. package/dist/collection/components/q2-calendar/test/validation-test.e2e.js.map +1 -1
  75. package/dist/collection/components/q2-card/q2-card.js.map +1 -1
  76. package/dist/collection/components/q2-card/test/q2-card-test.e2e.js.map +1 -1
  77. package/dist/collection/components/q2-carousel/q2-carousel.js.map +1 -1
  78. package/dist/collection/components/q2-carousel/test/q2-carousel-test.e2e.js.map +1 -1
  79. package/dist/collection/components/q2-carousel-pane/q2-carousel-pane.js +2 -2
  80. package/dist/collection/components/q2-carousel-pane/q2-carousel-pane.js.map +1 -1
  81. package/dist/collection/components/q2-carousel-pane/test/q2-carousel-pane-test.e2e.js.map +1 -1
  82. package/dist/collection/components/q2-carousel-pane/test/q2-carousel-pane-test.spec.js.map +1 -1
  83. package/dist/collection/components/q2-chart-area/q2-chart-area.js +1 -1
  84. package/dist/collection/components/q2-chart-area/q2-chart-area.js.map +1 -1
  85. package/dist/collection/components/q2-chart-area/test/q2-chart-area-test.e2e.js.map +1 -1
  86. package/dist/collection/components/q2-chart-bar/q2-chart-bar.js +1 -1
  87. package/dist/collection/components/q2-chart-bar/q2-chart-bar.js.map +1 -1
  88. package/dist/collection/components/q2-chart-bar/test/q2-chart-bar-test.e2e.js.map +1 -1
  89. package/dist/collection/components/q2-chart-donut/q2-chart-donut.js +1 -1
  90. package/dist/collection/components/q2-chart-donut/q2-chart-donut.js.map +1 -1
  91. package/dist/collection/components/q2-chart-donut/test/q2-chart-donut-test.e2e.js.map +1 -1
  92. package/dist/collection/components/q2-checkbox/q2-checkbox.js.map +1 -1
  93. package/dist/collection/components/q2-checkbox/test/q2-checkbox-test.e2e.js.map +1 -1
  94. package/dist/collection/components/q2-checkbox-group/q2-checkbox-group.js.map +1 -1
  95. package/dist/collection/components/q2-checkbox-group/test/q2-checkbox-group-test.e2e.js.map +1 -1
  96. package/dist/collection/components/q2-currency/q2-currency.js +1 -1
  97. package/dist/collection/components/q2-currency/q2-currency.js.map +1 -1
  98. package/dist/collection/components/q2-currency/test/q2-currency-test.e2e.js.map +1 -1
  99. package/dist/collection/components/q2-data-table/q2-data-table.js +7 -7
  100. package/dist/collection/components/q2-data-table/q2-data-table.js.map +1 -1
  101. package/dist/collection/components/q2-data-table/test/q2-data-table-test.e2e.js.map +1 -1
  102. package/dist/collection/components/q2-detail/q2-detail.js +1 -1
  103. package/dist/collection/components/q2-detail/q2-detail.js.map +1 -1
  104. package/dist/collection/components/q2-detail/test/q2-detail-test.e2e.js.map +1 -1
  105. package/dist/collection/components/q2-dropdown/q2-dropdown.js +3 -1
  106. package/dist/collection/components/q2-dropdown/q2-dropdown.js.map +1 -1
  107. package/dist/collection/components/q2-dropdown/test/q2-dropdown-test.e2e.js +1 -13
  108. package/dist/collection/components/q2-dropdown/test/q2-dropdown-test.e2e.js.map +1 -1
  109. package/dist/collection/components/q2-dropdown-item/q2-dropdown-item.js.map +1 -1
  110. package/dist/collection/components/q2-dropdown-item/test/q2-dropdown-item-test.e2e.js.map +1 -1
  111. package/dist/collection/components/q2-editable-field/q2-editable-field.js.map +1 -1
  112. package/dist/collection/components/q2-editable-field/test/q2-editable-field-test.e2e.js.map +1 -1
  113. package/dist/collection/components/q2-icon/q2-icon-types.js.map +1 -1
  114. package/dist/collection/components/q2-icon/q2-icon.js.map +1 -1
  115. package/dist/collection/components/q2-icon/test/q2-icon-test.e2e.js.map +1 -1
  116. package/dist/collection/components/q2-input/formatting/alpha.js.map +1 -1
  117. package/dist/collection/components/q2-input/formatting/alphanumeric.js.map +1 -1
  118. package/dist/collection/components/q2-input/formatting/credit-card.js.map +1 -1
  119. package/dist/collection/components/q2-input/formatting/credit-card.spec.js.map +1 -1
  120. package/dist/collection/components/q2-input/formatting/currency.js.map +1 -1
  121. package/dist/collection/components/q2-input/formatting/date.js.map +1 -1
  122. package/dist/collection/components/q2-input/formatting/generic.js.map +1 -1
  123. package/dist/collection/components/q2-input/formatting/number.js.map +1 -1
  124. package/dist/collection/components/q2-input/formatting/numeric.js.map +1 -1
  125. package/dist/collection/components/q2-input/formatting/phone.js.map +1 -1
  126. package/dist/collection/components/q2-input/formatting/postal.js.map +1 -1
  127. package/dist/collection/components/q2-input/formatting/ssn.js.map +1 -1
  128. package/dist/collection/components/q2-input/formatting/tin.js.map +1 -1
  129. package/dist/collection/components/q2-input/q2-input-types.js.map +1 -1
  130. package/dist/collection/components/q2-input/q2-input.js +2 -2
  131. package/dist/collection/components/q2-input/q2-input.js.map +1 -1
  132. package/dist/collection/components/q2-input/test/q2-input-credit-card-test.e2e.js.map +1 -1
  133. package/dist/collection/components/q2-input/test/q2-input-test.e2e.js.map +1 -1
  134. package/dist/collection/components/q2-item/q2-item.js +1 -1
  135. package/dist/collection/components/q2-item/q2-item.js.map +1 -1
  136. package/dist/collection/components/q2-item/test/q2-item-test.e2e.js.map +1 -1
  137. package/dist/collection/components/q2-item/test/q2-item-test.spec.js.map +1 -1
  138. package/dist/collection/components/q2-legend/q2-legend.js +1 -1
  139. package/dist/collection/components/q2-legend/q2-legend.js.map +1 -1
  140. package/dist/collection/components/q2-legend/test/q2-legend-test.e2e.js.map +1 -1
  141. package/dist/collection/components/q2-legend/test/q2-legend-test.spec.js.map +1 -1
  142. package/dist/collection/components/q2-list/q2-list.js +1 -1
  143. package/dist/collection/components/q2-list/q2-list.js.map +1 -1
  144. package/dist/collection/components/q2-list/test/q2-list-test.e2e.js.map +1 -1
  145. package/dist/collection/components/q2-loading/q2-loading.js.map +1 -1
  146. package/dist/collection/components/q2-loading/skeleton/q2-loading-element/index.js.map +1 -1
  147. package/dist/collection/components/q2-loading/skeleton/shapes.js.map +1 -1
  148. package/dist/collection/components/q2-loading/test/q2-loading-element-test.e2e.js.map +1 -1
  149. package/dist/collection/components/q2-loading/test/q2-loading-test.e2e.js.map +1 -1
  150. package/dist/collection/components/q2-loc/q2-loc.js +1 -1
  151. package/dist/collection/components/q2-loc/q2-loc.js.map +1 -1
  152. package/dist/collection/components/q2-loc/test/q2-loc-test.e2e.js.map +1 -1
  153. package/dist/collection/components/q2-message/q2-message.js +1 -1
  154. package/dist/collection/components/q2-message/q2-message.js.map +1 -1
  155. package/dist/collection/components/q2-message/test/q2-message-test.e2e.js.map +1 -1
  156. package/dist/collection/components/q2-optgroup/q2-optgroup.js +1 -1
  157. package/dist/collection/components/q2-optgroup/q2-optgroup.js.map +1 -1
  158. package/dist/collection/components/q2-optgroup/test/q2-optgroup-test.e2e.js.map +1 -1
  159. package/dist/collection/components/q2-option/q2-option.js +1 -1
  160. package/dist/collection/components/q2-option/q2-option.js.map +1 -1
  161. package/dist/collection/components/q2-option/test/q2-option-test.e2e.js.map +1 -1
  162. package/dist/collection/components/q2-option-list/q2-option-list.js +2 -2
  163. package/dist/collection/components/q2-option-list/q2-option-list.js.map +1 -1
  164. package/dist/collection/components/q2-option-list/test/q2-option-list-test.e2e.js.map +1 -1
  165. package/dist/collection/components/q2-pagination/q2-pagination.js +2 -2
  166. package/dist/collection/components/q2-pagination/q2-pagination.js.map +1 -1
  167. package/dist/collection/components/q2-pagination/test/q2-pagination-test.e2e.js +1 -0
  168. package/dist/collection/components/q2-pagination/test/q2-pagination-test.e2e.js.map +1 -1
  169. package/dist/collection/components/q2-pill/q2-pill.js +1 -1
  170. package/dist/collection/components/q2-pill/q2-pill.js.map +1 -1
  171. package/dist/collection/components/q2-pill/test/q2-pill-test.e2e.js +1 -1
  172. package/dist/collection/components/q2-pill/test/q2-pill-test.e2e.js.map +1 -1
  173. package/dist/collection/components/q2-popover/q2-popover.css +18 -10
  174. package/dist/collection/components/q2-popover/q2-popover.js +88 -79
  175. package/dist/collection/components/q2-popover/q2-popover.js.map +1 -1
  176. package/dist/collection/components/q2-popover/test/q2-popover-test.e2e.js +1 -34
  177. package/dist/collection/components/q2-popover/test/q2-popover-test.e2e.js.map +1 -1
  178. package/dist/collection/components/q2-popover/test/q2-popover-test.spec.js +902 -511
  179. package/dist/collection/components/q2-popover/test/q2-popover-test.spec.js.map +1 -1
  180. package/dist/collection/components/q2-radio/q2-radio.js.map +1 -1
  181. package/dist/collection/components/q2-radio/test/q2-radio-test.e2e.js.map +1 -1
  182. package/dist/collection/components/q2-radio-group/q2-radio-group.js.map +1 -1
  183. package/dist/collection/components/q2-radio-group/test/q2-radio-group-test.e2e.js.map +1 -1
  184. package/dist/collection/components/q2-relative-time/q2-relative-time.js +1 -1
  185. package/dist/collection/components/q2-relative-time/q2-relative-time.js.map +1 -1
  186. package/dist/collection/components/q2-relative-time/test/q2-relative-time-test.e2e.js.map +1 -1
  187. package/dist/collection/components/q2-section/q2-section.js +2 -2
  188. package/dist/collection/components/q2-section/q2-section.js.map +1 -1
  189. package/dist/collection/components/q2-section/test/q2-section-test.e2e.js.map +1 -1
  190. package/dist/collection/components/q2-select/q2-select.js +176 -22
  191. package/dist/collection/components/q2-select/q2-select.js.map +1 -1
  192. package/dist/collection/components/q2-select/test/q2-select-test.e2e.js +1 -1
  193. package/dist/collection/components/q2-select/test/q2-select-test.e2e.js.map +1 -1
  194. package/dist/collection/components/q2-select/test/q2-select-test.spec.js +552 -0
  195. package/dist/collection/components/q2-select/test/q2-select-test.spec.js.map +1 -0
  196. package/dist/collection/components/q2-stepper/q2-stepper.js +1 -1
  197. package/dist/collection/components/q2-stepper/q2-stepper.js.map +1 -1
  198. package/dist/collection/components/q2-stepper/test/q2-stepper-test.e2e.js.map +1 -1
  199. package/dist/collection/components/q2-stepper-pane/q2-stepper-pane.js +2 -2
  200. package/dist/collection/components/q2-stepper-pane/q2-stepper-pane.js.map +1 -1
  201. package/dist/collection/components/q2-stepper-pane/test/q2-stepper-pane-test.e2e.js.map +1 -1
  202. package/dist/collection/components/q2-stepper-vertical/q2-stepper-vertical.js +1 -1
  203. package/dist/collection/components/q2-stepper-vertical/q2-stepper-vertical.js.map +1 -1
  204. package/dist/collection/components/q2-stepper-vertical/test/q2-stepper-vertical-test.e2e.js.map +1 -1
  205. package/dist/collection/components/q2-tab-container/q2-tab-container.js +1 -1
  206. package/dist/collection/components/q2-tab-container/q2-tab-container.js.map +1 -1
  207. package/dist/collection/components/q2-tab-container/test/q2-tab-container-test.e2e.js.map +1 -1
  208. package/dist/collection/components/q2-tab-container/test/q2-tab-container-test.spec.js.map +1 -1
  209. package/dist/collection/components/q2-tab-pane/q2-tab-pane.js +1 -1
  210. package/dist/collection/components/q2-tab-pane/q2-tab-pane.js.map +1 -1
  211. package/dist/collection/components/q2-tab-pane/test/q2-tab-pane-test.e2e.js.map +1 -1
  212. package/dist/collection/components/q2-tag/q2-tag.js +1 -1
  213. package/dist/collection/components/q2-tag/q2-tag.js.map +1 -1
  214. package/dist/collection/components/q2-tag/test/q2-tag-test.e2e.js +6 -1
  215. package/dist/collection/components/q2-tag/test/q2-tag-test.e2e.js.map +1 -1
  216. package/dist/collection/components/q2-textarea/q2-textarea.js +1 -1
  217. package/dist/collection/components/q2-textarea/q2-textarea.js.map +1 -1
  218. package/dist/collection/components/q2-textarea/test/q2-textarea-test.e2e.js.map +1 -1
  219. package/dist/collection/components/q2-tooltip/q2-tooltip.js.map +1 -1
  220. package/dist/collection/components/q2-tooltip/test/q2-tooltip-test.e2e.js.map +1 -1
  221. package/dist/collection/components/tecton-tab-pane/tecton-tab-pane-types.js.map +1 -1
  222. package/dist/collection/components/tecton-tab-pane/tecton-tab-pane.js +2 -2
  223. package/dist/collection/components/tecton-tab-pane/tecton-tab-pane.js.map +1 -1
  224. package/dist/collection/components/tecton-tab-pane/test/tecton-tab-pane-test.e2e.js.map +1 -1
  225. package/dist/collection/index.js.map +1 -1
  226. package/dist/collection/utils/action-sheet.js.map +1 -1
  227. package/dist/collection/utils/charting.js.map +1 -1
  228. package/dist/collection/utils/helpers.js.map +1 -1
  229. package/dist/collection/utils/index.js +37 -0
  230. package/dist/collection/utils/index.js.map +1 -1
  231. package/dist/collection/utils/test/action-sheet-test.e2e.js.map +1 -1
  232. package/dist/collection/utils/test/index.spec.js.map +1 -1
  233. package/dist/components/index2.js +29 -17
  234. package/dist/components/index2.js.map +1 -1
  235. package/dist/components/q2-action-sheet.js +1 -1
  236. package/dist/components/q2-avatar2.js +1 -1
  237. package/dist/components/q2-carousel-pane.js +2 -2
  238. package/dist/components/q2-chart-area.js +1 -1
  239. package/dist/components/q2-chart-bar.js +1 -1
  240. package/dist/components/q2-chart-donut.js +1 -1
  241. package/dist/components/q2-currency.js +1 -1
  242. package/dist/components/q2-detail.js +1 -1
  243. package/dist/components/q2-dropdown.js +3 -1
  244. package/dist/components/q2-dropdown.js.map +1 -1
  245. package/dist/components/q2-input2.js +1 -1
  246. package/dist/components/q2-item.js +1 -1
  247. package/dist/components/q2-legend2.js +1 -1
  248. package/dist/components/q2-list.js +1 -1
  249. package/dist/components/q2-loc.js +1 -1
  250. package/dist/components/q2-message2.js +1 -1
  251. package/dist/components/q2-month-picker.js +2 -2
  252. package/dist/components/q2-optgroup2.js +1 -1
  253. package/dist/components/q2-option2.js +1 -1
  254. package/dist/components/q2-pagination.js +2 -2
  255. package/dist/components/q2-pill.js +1 -1
  256. package/dist/components/q2-popover2.js +87 -79
  257. package/dist/components/q2-popover2.js.map +1 -1
  258. package/dist/components/q2-relative-time.js +1 -1
  259. package/dist/components/q2-section.js +2 -2
  260. package/dist/components/q2-select2.js +142 -23
  261. package/dist/components/q2-select2.js.map +1 -1
  262. package/dist/components/q2-stepper-vertical.js +1 -1
  263. package/dist/components/q2-stepper.js +1 -1
  264. package/dist/components/q2-tab-container.js +1 -1
  265. package/dist/components/q2-tab-pane.js +1 -1
  266. package/dist/components/q2-tag.js +1 -1
  267. package/dist/components/q2-textarea.js +1 -1
  268. package/dist/components/tecton-tab-pane.js +2 -2
  269. package/dist/esm/click-elsewhere_2.entry.js +87 -79
  270. package/dist/esm/click-elsewhere_2.entry.js.map +1 -1
  271. package/dist/esm/{index-c6d74f10.js → index-3184c760.js} +1 -1
  272. package/dist/esm/{index-c6d74f10.js.map → index-3184c760.js.map} +1 -1
  273. package/dist/esm/{index-4a80972c.js → index-c8cc7209.js} +30 -18
  274. package/dist/esm/index-c8cc7209.js.map +1 -0
  275. package/dist/esm/loader.js +1 -1
  276. package/dist/esm/q2-action-sheet.entry.js +2 -2
  277. package/dist/esm/q2-avatar.entry.js +1 -1
  278. package/dist/esm/q2-badge_7.entry.js +4 -4
  279. package/dist/esm/q2-calendar.entry.js +2 -2
  280. package/dist/esm/q2-card.entry.js +1 -1
  281. package/dist/esm/q2-carousel-pane.entry.js +3 -3
  282. package/dist/esm/q2-carousel.entry.js +1 -1
  283. package/dist/esm/q2-chart-area.entry.js +2 -2
  284. package/dist/esm/q2-chart-bar.entry.js +2 -2
  285. package/dist/esm/q2-chart-donut.entry.js +2 -2
  286. package/dist/esm/q2-checkbox-group.entry.js +1 -1
  287. package/dist/esm/q2-checkbox.entry.js +1 -1
  288. package/dist/esm/q2-currency.entry.js +1 -1
  289. package/dist/esm/q2-data-table.entry.js +1 -1
  290. package/dist/esm/q2-detail.entry.js +2 -2
  291. package/dist/esm/q2-dropdown-item.entry.js +1 -1
  292. package/dist/esm/q2-dropdown.entry.js +4 -2
  293. package/dist/esm/q2-dropdown.entry.js.map +1 -1
  294. package/dist/esm/q2-editable-field.entry.js +1 -1
  295. package/dist/esm/q2-item.entry.js +2 -2
  296. package/dist/esm/q2-legend.entry.js +1 -1
  297. package/dist/esm/q2-list.entry.js +2 -2
  298. package/dist/esm/q2-loc.entry.js +2 -2
  299. package/dist/esm/q2-message.entry.js +2 -2
  300. package/dist/esm/q2-month-picker.entry.js +3 -3
  301. package/dist/esm/q2-optgroup.entry.js +2 -2
  302. package/dist/esm/q2-option-list.entry.js +1 -1
  303. package/dist/esm/q2-option.entry.js +1 -1
  304. package/dist/esm/q2-pagination.entry.js +3 -3
  305. package/dist/esm/q2-pill.entry.js +2 -2
  306. package/dist/esm/q2-radio-group.entry.js +1 -1
  307. package/dist/esm/q2-radio.entry.js +1 -1
  308. package/dist/esm/q2-relative-time.entry.js +3 -3
  309. package/dist/esm/q2-section.entry.js +3 -3
  310. package/dist/esm/q2-select.entry.js +139 -21
  311. package/dist/esm/q2-select.entry.js.map +1 -1
  312. package/dist/esm/q2-stepper-pane.entry.js +1 -1
  313. package/dist/esm/q2-stepper-vertical.entry.js +2 -2
  314. package/dist/esm/q2-stepper.entry.js +2 -2
  315. package/dist/esm/q2-tag.entry.js +2 -2
  316. package/dist/esm/q2-tecton-elements.js +1 -1
  317. package/dist/esm/q2-textarea.entry.js +2 -2
  318. package/dist/esm/q2-tooltip.entry.js +1 -1
  319. package/dist/esm/tecton-tab-pane.entry.js +2 -2
  320. package/dist/jest.setup.js +33 -0
  321. package/dist/jest.setup.js.map +1 -0
  322. package/dist/q2-tecton-elements/{p-8111547c.entry.js → p-00d5c9c4.entry.js} +2 -2
  323. package/dist/q2-tecton-elements/p-016563e1.entry.js +2 -0
  324. package/dist/q2-tecton-elements/{p-a7a0b8aa.entry.js.map → p-016563e1.entry.js.map} +1 -1
  325. package/dist/q2-tecton-elements/{p-395904b4.entry.js → p-0c77ab7d.entry.js} +2 -2
  326. package/dist/q2-tecton-elements/{p-34696e3f.entry.js → p-0da2dfde.entry.js} +2 -2
  327. package/dist/q2-tecton-elements/{p-2ca6d44f.entry.js → p-1148b992.entry.js} +2 -2
  328. package/dist/q2-tecton-elements/{p-074ae80c.entry.js → p-13630805.entry.js} +2 -2
  329. package/dist/q2-tecton-elements/{p-adec9275.entry.js → p-1465cd9a.entry.js} +2 -2
  330. package/dist/q2-tecton-elements/p-181d0482.entry.js +2 -0
  331. package/dist/q2-tecton-elements/p-181d0482.entry.js.map +1 -0
  332. package/dist/q2-tecton-elements/{p-cf32b5db.entry.js → p-1bcf4fe0.entry.js} +2 -2
  333. package/dist/q2-tecton-elements/{p-0a3a804a.entry.js → p-200084c2.entry.js} +2 -2
  334. package/dist/q2-tecton-elements/{p-8a4b106d.entry.js → p-3927fd62.entry.js} +2 -2
  335. package/dist/q2-tecton-elements/{p-c0c658d1.entry.js → p-3d7f5f4a.entry.js} +2 -2
  336. package/dist/q2-tecton-elements/{p-d2e1631a.entry.js → p-44049830.entry.js} +2 -2
  337. package/dist/q2-tecton-elements/{p-6b7c53a8.entry.js → p-53b0b123.entry.js} +2 -2
  338. package/dist/q2-tecton-elements/{p-c81d299a.entry.js → p-6041e3c3.entry.js} +2 -2
  339. package/dist/q2-tecton-elements/{p-6237c775.entry.js → p-6abfc75e.entry.js} +2 -2
  340. package/dist/q2-tecton-elements/{p-cb3f48de.entry.js → p-7390e3d2.entry.js} +2 -2
  341. package/dist/q2-tecton-elements/{p-661ed976.entry.js → p-7a3c82b1.entry.js} +2 -2
  342. package/dist/q2-tecton-elements/{p-376a0589.entry.js → p-7dc8ad9d.entry.js} +2 -2
  343. package/dist/q2-tecton-elements/{p-5d936af5.entry.js → p-80d6991d.entry.js} +2 -2
  344. package/dist/q2-tecton-elements/{p-34856c71.entry.js → p-8823f132.entry.js} +2 -2
  345. package/dist/q2-tecton-elements/{p-58cafc0d.entry.js → p-90bd6c17.entry.js} +2 -2
  346. package/dist/q2-tecton-elements/{p-fffb54e9.entry.js → p-91586158.entry.js} +2 -2
  347. package/dist/q2-tecton-elements/{p-0a1dff75.entry.js → p-919d614f.entry.js} +2 -2
  348. package/dist/q2-tecton-elements/{p-adf0a7c9.entry.js → p-97c0111f.entry.js} +2 -2
  349. package/dist/q2-tecton-elements/{p-3c7be0bb.entry.js → p-a04337ce.entry.js} +2 -2
  350. package/dist/q2-tecton-elements/{p-2fcaf2d6.entry.js → p-a4dc79c8.entry.js} +2 -2
  351. package/dist/q2-tecton-elements/{p-403bf3d4.entry.js → p-b18c846d.entry.js} +2 -2
  352. package/dist/q2-tecton-elements/{p-77272c4c.entry.js → p-b773fd31.entry.js} +2 -2
  353. package/dist/q2-tecton-elements/{p-4116579f.entry.js → p-c395c46f.entry.js} +2 -2
  354. package/dist/q2-tecton-elements/{p-ce4e6b41.entry.js → p-c620a664.entry.js} +2 -2
  355. package/dist/q2-tecton-elements/{p-259b728a.entry.js → p-c82e2e7f.entry.js} +2 -2
  356. package/dist/q2-tecton-elements/{p-cf966a0f.entry.js → p-c89b40cc.entry.js} +2 -2
  357. package/dist/q2-tecton-elements/{p-072c5877.entry.js → p-e098781c.entry.js} +2 -2
  358. package/dist/q2-tecton-elements/{p-2c26295e.entry.js → p-e13b1b40.entry.js} +2 -2
  359. package/dist/q2-tecton-elements/{p-6e6d9793.entry.js → p-f02deb01.entry.js} +2 -2
  360. package/dist/q2-tecton-elements/{p-77a0cc0c.entry.js → p-f0aca80a.entry.js} +2 -2
  361. package/dist/q2-tecton-elements/{p-721365be.js → p-f1e887f5.js} +1 -1
  362. package/dist/q2-tecton-elements/{p-45407ecc.entry.js → p-f409b668.entry.js} +2 -2
  363. package/dist/q2-tecton-elements/{p-b72fd065.entry.js → p-f50cfb8d.entry.js} +2 -2
  364. package/dist/q2-tecton-elements/{p-3b0d3cd4.entry.js → p-f5ce223b.entry.js} +2 -2
  365. package/dist/q2-tecton-elements/p-f6e6f43e.entry.js +2 -0
  366. package/dist/q2-tecton-elements/p-f6e6f43e.entry.js.map +1 -0
  367. package/dist/q2-tecton-elements/{p-ad998f71.entry.js → p-f8f6acd1.entry.js} +2 -2
  368. package/dist/q2-tecton-elements/{p-9a1a4bc0.js → p-ff8ed604.js} +2 -2
  369. package/dist/q2-tecton-elements/p-ff8ed604.js.map +1 -0
  370. package/dist/q2-tecton-elements/q2-tecton-elements.esm.js +1 -1
  371. package/dist/q2-tecton-elements/q2-tecton-elements.esm.js.map +1 -1
  372. package/dist/types/builds/q2e/development/tecton/tecton/packages/q2-tecton-elements/.stencil/jest.setup.d.ts +10 -0
  373. package/dist/types/components/q2-popover/q2-popover.d.ts +5 -5
  374. package/dist/types/components/q2-select/q2-select.d.ts +28 -0
  375. package/dist/types/components.d.ts +8 -0
  376. package/dist/types/utils/index.d.ts +3 -0
  377. package/package.json +3 -3
  378. package/dist/cjs/index-64d8b839.js.map +0 -1
  379. package/dist/esm/index-4a80972c.js.map +0 -1
  380. package/dist/q2-tecton-elements/p-9a1a4bc0.js.map +0 -1
  381. package/dist/q2-tecton-elements/p-a7a0b8aa.entry.js +0 -2
  382. package/dist/q2-tecton-elements/p-aa57b657.entry.js +0 -2
  383. package/dist/q2-tecton-elements/p-aa57b657.entry.js.map +0 -1
  384. package/dist/q2-tecton-elements/p-dc77bf66.entry.js +0 -2
  385. package/dist/q2-tecton-elements/p-dc77bf66.entry.js.map +0 -1
  386. /package/dist/q2-tecton-elements/{p-8111547c.entry.js.map → p-00d5c9c4.entry.js.map} +0 -0
  387. /package/dist/q2-tecton-elements/{p-395904b4.entry.js.map → p-0c77ab7d.entry.js.map} +0 -0
  388. /package/dist/q2-tecton-elements/{p-34696e3f.entry.js.map → p-0da2dfde.entry.js.map} +0 -0
  389. /package/dist/q2-tecton-elements/{p-2ca6d44f.entry.js.map → p-1148b992.entry.js.map} +0 -0
  390. /package/dist/q2-tecton-elements/{p-074ae80c.entry.js.map → p-13630805.entry.js.map} +0 -0
  391. /package/dist/q2-tecton-elements/{p-adec9275.entry.js.map → p-1465cd9a.entry.js.map} +0 -0
  392. /package/dist/q2-tecton-elements/{p-cf32b5db.entry.js.map → p-1bcf4fe0.entry.js.map} +0 -0
  393. /package/dist/q2-tecton-elements/{p-0a3a804a.entry.js.map → p-200084c2.entry.js.map} +0 -0
  394. /package/dist/q2-tecton-elements/{p-8a4b106d.entry.js.map → p-3927fd62.entry.js.map} +0 -0
  395. /package/dist/q2-tecton-elements/{p-c0c658d1.entry.js.map → p-3d7f5f4a.entry.js.map} +0 -0
  396. /package/dist/q2-tecton-elements/{p-d2e1631a.entry.js.map → p-44049830.entry.js.map} +0 -0
  397. /package/dist/q2-tecton-elements/{p-6b7c53a8.entry.js.map → p-53b0b123.entry.js.map} +0 -0
  398. /package/dist/q2-tecton-elements/{p-c81d299a.entry.js.map → p-6041e3c3.entry.js.map} +0 -0
  399. /package/dist/q2-tecton-elements/{p-6237c775.entry.js.map → p-6abfc75e.entry.js.map} +0 -0
  400. /package/dist/q2-tecton-elements/{p-cb3f48de.entry.js.map → p-7390e3d2.entry.js.map} +0 -0
  401. /package/dist/q2-tecton-elements/{p-661ed976.entry.js.map → p-7a3c82b1.entry.js.map} +0 -0
  402. /package/dist/q2-tecton-elements/{p-376a0589.entry.js.map → p-7dc8ad9d.entry.js.map} +0 -0
  403. /package/dist/q2-tecton-elements/{p-5d936af5.entry.js.map → p-80d6991d.entry.js.map} +0 -0
  404. /package/dist/q2-tecton-elements/{p-34856c71.entry.js.map → p-8823f132.entry.js.map} +0 -0
  405. /package/dist/q2-tecton-elements/{p-58cafc0d.entry.js.map → p-90bd6c17.entry.js.map} +0 -0
  406. /package/dist/q2-tecton-elements/{p-fffb54e9.entry.js.map → p-91586158.entry.js.map} +0 -0
  407. /package/dist/q2-tecton-elements/{p-0a1dff75.entry.js.map → p-919d614f.entry.js.map} +0 -0
  408. /package/dist/q2-tecton-elements/{p-adf0a7c9.entry.js.map → p-97c0111f.entry.js.map} +0 -0
  409. /package/dist/q2-tecton-elements/{p-3c7be0bb.entry.js.map → p-a04337ce.entry.js.map} +0 -0
  410. /package/dist/q2-tecton-elements/{p-2fcaf2d6.entry.js.map → p-a4dc79c8.entry.js.map} +0 -0
  411. /package/dist/q2-tecton-elements/{p-403bf3d4.entry.js.map → p-b18c846d.entry.js.map} +0 -0
  412. /package/dist/q2-tecton-elements/{p-77272c4c.entry.js.map → p-b773fd31.entry.js.map} +0 -0
  413. /package/dist/q2-tecton-elements/{p-4116579f.entry.js.map → p-c395c46f.entry.js.map} +0 -0
  414. /package/dist/q2-tecton-elements/{p-ce4e6b41.entry.js.map → p-c620a664.entry.js.map} +0 -0
  415. /package/dist/q2-tecton-elements/{p-259b728a.entry.js.map → p-c82e2e7f.entry.js.map} +0 -0
  416. /package/dist/q2-tecton-elements/{p-cf966a0f.entry.js.map → p-c89b40cc.entry.js.map} +0 -0
  417. /package/dist/q2-tecton-elements/{p-072c5877.entry.js.map → p-e098781c.entry.js.map} +0 -0
  418. /package/dist/q2-tecton-elements/{p-2c26295e.entry.js.map → p-e13b1b40.entry.js.map} +0 -0
  419. /package/dist/q2-tecton-elements/{p-6e6d9793.entry.js.map → p-f02deb01.entry.js.map} +0 -0
  420. /package/dist/q2-tecton-elements/{p-77a0cc0c.entry.js.map → p-f0aca80a.entry.js.map} +0 -0
  421. /package/dist/q2-tecton-elements/{p-721365be.js.map → p-f1e887f5.js.map} +0 -0
  422. /package/dist/q2-tecton-elements/{p-45407ecc.entry.js.map → p-f409b668.entry.js.map} +0 -0
  423. /package/dist/q2-tecton-elements/{p-b72fd065.entry.js.map → p-f50cfb8d.entry.js.map} +0 -0
  424. /package/dist/q2-tecton-elements/{p-3b0d3cd4.entry.js.map → p-f5ce223b.entry.js.map} +0 -0
  425. /package/dist/q2-tecton-elements/{p-ad998f71.entry.js.map → p-f8f6acd1.entry.js.map} +0 -0
@@ -3,7 +3,7 @@
3
3
  Object.defineProperty(exports, '__esModule', { value: true });
4
4
 
5
5
  const index = require('./index-14c3693c.js');
6
- const index$1 = require('./index-64d8b839.js');
6
+ const index$1 = require('./index-7f6e3c5a.js');
7
7
 
8
8
  const ClickElsewhere = class {
9
9
  constructor(hostRef) {
@@ -92,7 +92,7 @@ const ClickElsewhere = class {
92
92
  get hostElement() { return index.getElement(this); }
93
93
  };
94
94
 
95
- const q2PopoverCss = "*{box-sizing:border-box}*:active{outline:none}*:focus{outline:none;box-shadow:var(--const-double-focus-ring, 0 0 0 2px #ffffff, 0 0 0 4px #0066cc)}:host{box-shadow:none !important}::-moz-focus-inner{border:none}input,textarea,button{font-family:inherit;font-size:inherit;font-stretch:inherit}:host(.sr),:host(.sr) button{border:0;clip:rect(0 0 0 0);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px;white-space:nowrap}.sr,.sr button{border:0;clip:rect(0 0 0 0);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px;white-space:nowrap}.hidden{display:none}:host([hidden]){display:none}.invisible{visibility:hidden}.container{display:none}.show{display:block;position:fixed;z-index:var(--tct-popover-z-index, 50);margin:0;padding:0;overflow:auto;background:var(--tct-popover-background, var(--app-white, #ffffff));color:var(--tct-popover-font-color, var(--t-text, #4d4d4d));min-width:var(--tct-popover-min-width, 135px);margin-block:var(--tct-popover-margin-block, 0);box-shadow:var(--tct-popover-box-shadow, var(--app-shadow-1, 0px 0px 2px rgba(0, 0, 0, 0.12), 0px 2px 4px rgba(0, 0, 0, 0.14)));border-width:var(--tct-popover-border-width, 0);border-style:solid;border-color:var(--tct-popover-border-color, transparent);border-radius:var(--tct-popover-border-radius, 0);max-height:var(--comp-pop-max-height);left:var(--comp-pop-left);opacity:var(--comp-pop-opacity, 0);--comp-scrollbar-size:var(--tct-scrollbar-size, var(--t-scrollbar-size, var(--app-scale-1x, 5px)));--comp-scrollbar-border-radius:var(--tct-scrollbar-border-radius, var(--t-scrollbar-border-radius, var(--app-border-radius-1, 4px)));--comp-scrollbar-color:var(--tct-scrollbar-color, var(--t-scrollbar-color, var(--t-a11y-gray-color, #747474)));scrollbar-width:thin;scrollbar-color:var(--comp-scrollbar-color) transparent}:host([block]) .show{right:unset;width:var(--comp-pop-width);min-width:var(--tct-popover-min-width, unset)}:host([align=left]) .show{left:var(--comp-pop-left);right:unset}:host([align=right]) .show{right:var(--comp-pop-right);left:unset}.show.down{top:var(--tct-popover-top, var(--comp-pop-top));bottom:unset}.show.up{top:unset;bottom:var(--comp-pop-bottom)}.show.legacy{position:absolute}.show::-webkit-scrollbar{width:var(--comp-scrollbar-size);height:var(--comp-scrollbar-size);margin:5px}.show::-webkit-scrollbar-thumb{background:var(--comp-scrollbar-color);border-radius:var(--comp-scrollbar-border-radius)}.show::-webkit-scrollbar-track{background:transparent;border-radius:var(--comp-scrollbar-border-radius)}click-elsewhere{position:relative;display:block}";
95
+ const q2PopoverCss = "*{box-sizing:border-box}*:active{outline:none}*:focus{outline:none;box-shadow:var(--const-double-focus-ring, 0 0 0 2px #ffffff, 0 0 0 4px #0066cc)}:host{box-shadow:none !important}::-moz-focus-inner{border:none}input,textarea,button{font-family:inherit;font-size:inherit;font-stretch:inherit}:host(.sr),:host(.sr) button{border:0;clip:rect(0 0 0 0);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px;white-space:nowrap}.sr,.sr button{border:0;clip:rect(0 0 0 0);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px;white-space:nowrap}.hidden{display:none}:host([hidden]){display:none}.invisible{visibility:hidden}.legacy.container{display:none}.legacy.show{display:block;z-index:var(--tct-popover-z-index, 50)}:popover-open,.show{position:absolute;margin:0;padding:0;overflow:auto;background:var(--tct-popover-background, var(--app-white, #ffffff));color:var(--tct-popover-font-color, var(--t-text, #4d4d4d));min-width:var(--tct-popover-min-width, 135px);margin-block:var(--tct-popover-margin-block, 0);box-shadow:var(--tct-popover-box-shadow, var(--app-shadow-1, 0px 0px 2px rgba(0, 0, 0, 0.12), 0px 2px 4px rgba(0, 0, 0, 0.14)));border-width:var(--tct-popover-border-width, 0);border-style:solid;border-color:var(--tct-popover-border-color, transparent);border-radius:var(--tct-popover-border-radius, 0);max-height:var(--comp-pop-max-height);left:var(--comp-pop-left);opacity:var(--comp-pop-opacity, 0);--comp-scrollbar-size:var(--tct-scrollbar-size, var(--t-scrollbar-size, var(--app-scale-1x, 5px)));--comp-scrollbar-border-radius:var(--tct-scrollbar-border-radius, var(--t-scrollbar-border-radius, var(--app-border-radius-1, 4px)));--comp-scrollbar-color:var(--tct-scrollbar-color, var(--t-scrollbar-color, var(--t-a11y-gray-color, #747474)));scrollbar-width:thin;scrollbar-color:var(--comp-scrollbar-color) transparent}:popover-open.block,.show.block{right:unset;width:var(--comp-pop-width);min-width:var(--tct-popover-min-width, unset)}:popover-open.left,.show.left{left:var(--comp-pop-left);right:unset}:popover-open.right,.show.right{right:var(--comp-pop-right);left:unset}:popover-open.down,.show.down{top:var(--tct-popover-top, var(--comp-pop-top));bottom:unset}:popover-open.up,.show.up{top:unset;bottom:var(--comp-pop-bottom)}:popover-open::-webkit-scrollbar,.show::-webkit-scrollbar{width:var(--comp-scrollbar-size);height:var(--comp-scrollbar-size);margin:5px}:popover-open::-webkit-scrollbar-thumb,.show::-webkit-scrollbar-thumb{background:var(--comp-scrollbar-color);border-radius:var(--comp-scrollbar-border-radius)}:popover-open::-webkit-scrollbar-track,.show::-webkit-scrollbar-track{background:transparent;border-radius:var(--comp-scrollbar-border-radius)}click-elsewhere{position:relative;display:block}";
96
96
  const Q2PopoverStyle0 = q2PopoverCss;
97
97
 
98
98
  const Q2Popover = class {
@@ -103,13 +103,15 @@ const Q2Popover = class {
103
103
  * The number of pixels to leave between the popover and the edge of the viewport
104
104
  */
105
105
  this.displayBuffer = 10;
106
- /** remove when Popover API is supported in iOS */
107
106
  this.orientationChanged = false;
108
107
  this.handleMinHeight = () => {
109
108
  if (this.minHeight) {
110
109
  index$1.handleDeprecationWarning(this, 'minHeight', 'prop');
111
110
  }
112
111
  };
112
+ this.handlePopoverToggleEvent = (event) => {
113
+ this.popoverStateChanged.emit({ open: event.newState === 'open' });
114
+ };
113
115
  this.setAbsoluteCSSProperties = async () => {
114
116
  const { controlElement, containerElement, currentDirection, align } = this;
115
117
  if (align === 'right') {
@@ -134,25 +136,42 @@ const Q2Popover = class {
134
136
  await index$1.waitForNextPaint();
135
137
  containerElement.style.setProperty('--comp-pop-opacity', '1');
136
138
  };
137
- this.setFixedCSSProperties = async () => {
138
- var _a, _b;
139
- const { controlElement, containerElement, currentDirection, rootElementRect } = this;
139
+ this.setPopoverAPICSSProperties = async () => {
140
+ var _a, _b, _c;
141
+ const { controlElement, containerElement, currentDirection, isModule, align } = this;
140
142
  const { top: controlTop, bottom: controlBottom, left: controlLeft, right: controlRight, } = (_b = (_a = controlElement === null || controlElement === void 0 ? void 0 : controlElement.getBoundingClientRect) === null || _a === void 0 ? void 0 : _a.call(controlElement)) !== null && _b !== void 0 ? _b : {
141
143
  top: 0,
142
144
  bottom: 0,
143
145
  left: 0,
144
146
  right: 0,
145
147
  };
146
- const popoverLeft = controlLeft - rootElementRect.left;
148
+ const popoverLeft = controlLeft;
149
+ const popoverRight = ((_c = window === null || window === void 0 ? void 0 : window.visualViewport) === null || _c === void 0 ? void 0 : _c.width) - controlRight;
150
+ if (align === 'right') {
151
+ containerElement.style.setProperty('--comp-pop-right', `${popoverRight - window.scrollX}px`);
152
+ containerElement.style.setProperty('--comp-pop-left', 'unset');
153
+ }
154
+ else {
155
+ containerElement.style.setProperty('--comp-pop-left', `${popoverLeft + window.scrollX}px`);
156
+ containerElement.style.setProperty('--comp-pop-right', 'unset');
157
+ }
147
158
  if (this.block)
148
- containerElement.style.setProperty('--comp-pop-width', `${controlElement.offsetWidth || 0}px`);
149
- containerElement.style.setProperty('--comp-pop-left', `${popoverLeft}px`);
150
- containerElement.style.setProperty('--comp-pop-right', `${rootElementRect.width + rootElementRect.left - controlRight}px`);
159
+ containerElement.style.setProperty('--comp-pop-width', `${(controlElement === null || controlElement === void 0 ? void 0 : controlElement.offsetWidth) || 0}px`);
151
160
  if (currentDirection === 'up') {
152
- containerElement.style.setProperty('--comp-pop-bottom', `${rootElementRect.height + rootElementRect.top - controlTop}px`);
161
+ if (isModule) {
162
+ containerElement.style.setProperty('--comp-pop-bottom', `${window.innerHeight - controlTop}px`);
163
+ }
164
+ else {
165
+ containerElement.style.setProperty('--comp-pop-bottom', `${window.innerHeight - controlTop - window.scrollY}px`);
166
+ }
153
167
  }
154
168
  if (currentDirection === 'down') {
155
- containerElement.style.setProperty('--comp-pop-top', `${controlBottom - rootElementRect.top}px`);
169
+ if (isModule) {
170
+ containerElement.style.setProperty('--comp-pop-top', `${controlBottom}px`);
171
+ }
172
+ else {
173
+ containerElement.style.setProperty('--comp-pop-top', `${controlBottom + window.scrollY}px`);
174
+ }
156
175
  }
157
176
  // Wait for one paint to prevent layout thrashing
158
177
  await index$1.waitForNextPaint();
@@ -169,7 +188,7 @@ const Q2Popover = class {
169
188
  };
170
189
  this.currentDirection = undefined;
171
190
  this.show = false;
172
- this.align = undefined;
191
+ this.align = 'left';
173
192
  this.block = undefined;
174
193
  this.controlElement = undefined;
175
194
  this.direction = undefined;
@@ -181,9 +200,21 @@ const Q2Popover = class {
181
200
  // #region Component Lifecycle Events
182
201
  disconnectedCallback() {
183
202
  this.removeViewportListeners();
203
+ this.containerElement.removeEventListener('toggle', this.handlePopoverToggleEvent);
204
+ this.containerElement = null;
205
+ this.contentElement = null;
206
+ this.controlElement = null;
207
+ }
208
+ componentWillLoad() {
209
+ if (!this.supportsPopoverAPI) {
210
+ console.warn('The Popover API is not supported in this browser. Please update your browser to the latest version. The component will use legacy mode.');
211
+ this.mode = 'legacy';
212
+ }
184
213
  }
185
214
  componentDidLoad() {
186
215
  this.handleMinHeight();
216
+ if (this.supportsPopoverAPI)
217
+ this.containerElement.addEventListener('toggle', this.handlePopoverToggleEvent);
187
218
  if (this.open)
188
219
  this.determinePopDirection();
189
220
  }
@@ -210,7 +241,6 @@ const Q2Popover = class {
210
241
  this.handleMinHeight();
211
242
  }
212
243
  async openChanged(open) {
213
- this.setRootElement();
214
244
  this.popoverStateChanged.emit({ open });
215
245
  if (open) {
216
246
  this.addViewportListeners();
@@ -219,14 +249,25 @@ const Q2Popover = class {
219
249
  else {
220
250
  this.removeViewportListeners();
221
251
  this.currentDirection = undefined;
222
- this.show = false;
252
+ if (this.mode === 'legacy' || !this.supportsPopoverAPI) {
253
+ this.show = false;
254
+ }
255
+ else {
256
+ this.containerElement.hidePopover();
257
+ }
223
258
  await index$1.waitForNextPaint();
224
259
  this.clearCSSProperties();
225
260
  }
226
261
  }
227
262
  // #endregion
228
263
  // #region Local Methods
229
- get actualDirection() {
264
+ get isModule() {
265
+ var _a, _b;
266
+ const isIframe = window !== window.top;
267
+ const hasPlatformDimensions = Object.keys((_b = (_a = window.Tecton) === null || _a === void 0 ? void 0 : _a.platformDimensions) !== null && _b !== void 0 ? _b : {}).length > 0;
268
+ return isIframe && hasPlatformDimensions;
269
+ }
270
+ get providedDirection() {
230
271
  const { direction } = this;
231
272
  switch (direction) {
232
273
  case 'up':
@@ -236,20 +277,18 @@ const Q2Popover = class {
236
277
  return undefined;
237
278
  }
238
279
  }
239
- get isModule() {
240
- var _a, _b;
241
- const isIframe = window !== window.top;
242
- const hasPlatformDimensions = Object.keys((_b = (_a = window.Tecton) === null || _a === void 0 ? void 0 : _a.platformDimensions) !== null && _b !== void 0 ? _b : {}).length > 0;
243
- return isIframe && hasPlatformDimensions;
280
+ get supportsPopoverAPI() {
281
+ return Object.hasOwn(HTMLElement.prototype, 'popover');
244
282
  }
245
283
  addViewportListeners() {
246
284
  var _a;
247
285
  window.addEventListener('resize', this.viewPortOrientationChanged);
248
- // #region remove when Popover API is supported in iOS
249
- window.addEventListener('scroll', this.viewPortChanged, { passive: true, capture: true });
250
- (_a = screen === null || screen === void 0 ? void 0 : screen.orientation) === null || _a === void 0 ? void 0 : _a.addEventListener('change', this.viewPortOrientationChanged);
286
+ visualViewport === null || visualViewport === void 0 ? void 0 : visualViewport.addEventListener('resize', this.viewPortChanged);
287
+ if (index$1.isInScrollableContainer(this.hostElement) && !index$1.isMobile()) {
288
+ window.addEventListener('scroll', this.viewPortChanged, { passive: true, capture: true });
289
+ }
290
+ (_a = screen === null || screen === void 0 ? void 0 : screen.orientation) === null || _a === void 0 ? void 0 : _a.addEventListener('orientationchange', this.viewPortOrientationChanged);
251
291
  window.addEventListener('orientationchange', this.viewPortOrientationChanged);
252
- // #endregion
253
292
  }
254
293
  clearCSSProperties() {
255
294
  this.containerElement.style.removeProperty('--comp-pop-max-height');
@@ -262,7 +301,7 @@ const Q2Popover = class {
262
301
  }
263
302
  async determinePopDirection() {
264
303
  var _a, _b, _c;
265
- const { containerElement, controlElement, actualDirection, displayBuffer } = this;
304
+ const { containerElement, controlElement, providedDirection, displayBuffer } = this;
266
305
  if (containerElement)
267
306
  containerElement.style.maxHeight = null;
268
307
  await index$1.waitForNextPaint();
@@ -275,20 +314,23 @@ const Q2Popover = class {
275
314
  let maxSpaceAbove;
276
315
  let maxSpaceBelow;
277
316
  if (isModule) {
278
- const { outletOffset = 0, innerHeight = window.innerHeight } = ((_c = window.Tecton) === null || _c === void 0 ? void 0 : _c.platformDimensions) || {};
279
- const distanceToIframeBottom = window.visualViewport.height - controlBottom;
280
- const viewableSpaceBelow = innerHeight - (outletOffset + controlBottom);
317
+ const { outletOffset = 0, innerHeight = window.innerHeight, top: topBarHeight = 0, bottom: bottomBarHeight = 0, } = ((_c = window.Tecton) === null || _c === void 0 ? void 0 : _c.platformDimensions) || {};
318
+ const distanceToIframeBottom = window.innerHeight - controlBottom;
319
+ // controlElement position visually on the page
320
+ const visualControlTop = outletOffset > 0 ? controlTop : controlTop + outletOffset - topBarHeight;
321
+ const visualControlBottom = outletOffset + controlBottom - topBarHeight;
322
+ // visual space around the controlElement
323
+ const viewableSpaceAbove = visualControlTop;
324
+ const viewableSpaceBelow = innerHeight - bottomBarHeight - visualControlBottom;
325
+ // calculate space above and below controlElement
281
326
  const isIframeShorterThanWindow = distanceToIframeBottom < viewableSpaceBelow;
282
- windowHeight = innerHeight;
283
- // If the top of the module is below the top of the window we just use the controlTop
284
- // Otherwise we need to add the outletOffset to the controlTop
285
- maxSpaceAbove = (outletOffset > 0 ? controlTop : controlTop + outletOffset) - displayBuffer;
327
+ maxSpaceAbove = viewableSpaceAbove - displayBuffer;
286
328
  maxSpaceBelow = isIframeShorterThanWindow
287
329
  ? distanceToIframeBottom - displayBuffer
288
330
  : viewableSpaceBelow - displayBuffer;
289
331
  }
290
332
  else {
291
- windowHeight = window.visualViewport.height;
333
+ windowHeight = window.innerHeight;
292
334
  maxSpaceAbove = controlTop - displayBuffer;
293
335
  maxSpaceBelow = windowHeight - controlBottom - displayBuffer;
294
336
  }
@@ -297,7 +339,7 @@ const Q2Popover = class {
297
339
  const shouldUpdateMaxHeight = !containerElement.style.getPropertyValue('--comp-pop-max-height') || this.orientationChanged;
298
340
  // we do not want to constantly update the max-height after an orientation change, so we switch this back to false
299
341
  this.orientationChanged = false;
300
- const currentOrDetermineDirection = this.currentDirection || actualDirection || directionWithMostSpace;
342
+ const currentOrDetermineDirection = this.currentDirection || providedDirection || directionWithMostSpace;
301
343
  switch (currentOrDetermineDirection) {
302
344
  case 'up':
303
345
  if (shouldUpdateMaxHeight) {
@@ -316,72 +358,38 @@ const Q2Popover = class {
316
358
  removeViewportListeners() {
317
359
  var _a;
318
360
  window.removeEventListener('resize', this.viewPortOrientationChanged);
319
- // #region remove when Popover API is supported in iOS
320
- window.removeEventListener('scroll', this.viewPortChanged);
361
+ visualViewport === null || visualViewport === void 0 ? void 0 : visualViewport.removeEventListener('resize', this.viewPortChanged);
362
+ window.removeEventListener('scroll', this.viewPortChanged, { capture: true });
321
363
  (_a = screen === null || screen === void 0 ? void 0 : screen.orientation) === null || _a === void 0 ? void 0 : _a.removeEventListener('orientationchange', this.viewPortOrientationChanged);
322
364
  window.removeEventListener('orientationchange', this.viewPortOrientationChanged);
323
- // #endregion
324
365
  }
325
366
  setDirectionAndShow(direction) {
326
- this.setRootElement();
327
367
  // Due to some runtime inconsistency across devices/browsers we need to add one more check here because the
328
368
  // popover can be closed between the time the popover is opened and the time the direction is determined
329
369
  const isOpen = this.open;
330
370
  if (!isOpen)
331
371
  return;
332
372
  this.currentDirection = direction;
333
- this.show = true;
334
- if (this.mode === 'legacy') {
373
+ if (this.mode === 'legacy' || !this.supportsPopoverAPI) {
374
+ this.show = true;
335
375
  this.setAbsoluteCSSProperties();
336
376
  }
337
377
  else {
338
- this.setFixedCSSProperties();
378
+ this.setPopoverAPICSSProperties();
379
+ this.containerElement.showPopover();
339
380
  }
340
381
  }
341
- setRootElement() {
342
- let currentElement = this.hostElement;
343
- while (currentElement && currentElement !== document.documentElement) {
344
- const computedStyle = window.getComputedStyle(currentElement);
345
- // Check if the element has any styles applied that create a new containg block
346
- if (computedStyle.transform !== 'none' ||
347
- computedStyle.filter !== 'none' ||
348
- computedStyle.perspective !== 'none' ||
349
- computedStyle.containerType !== 'normal' ||
350
- ['transform', 'perspective', 'filter'].includes(computedStyle.willChange) ||
351
- ['layout', 'paint', 'strict', 'content'].includes(computedStyle.contain)) {
352
- this.rootElementRect = currentElement.getBoundingClientRect();
353
- return;
354
- }
355
- const rootNode = currentElement.getRootNode();
356
- const isRootNodeWebComponent = typeof ShadowRoot !== 'undefined' &&
357
- rootNode instanceof ShadowRoot &&
358
- rootNode.host instanceof HTMLElement;
359
- if (isRootNodeWebComponent) {
360
- currentElement = rootNode.host;
361
- }
362
- else {
363
- currentElement = currentElement.parentElement;
364
- }
365
- }
366
- // Return the document's bounding rect if no element is found
367
- this.rootElementRect = {
368
- top: 0,
369
- bottom: 0,
370
- left: 0,
371
- right: 0,
372
- height: window.visualViewport.height,
373
- width: window.visualViewport.width,
374
- };
375
- }
376
382
  // #endregion
377
383
  // #region Render Methods
378
384
  render() {
379
- const containerClasses = ['container', this.currentDirection];
385
+ const containerClasses = ['container', this.currentDirection, this.align];
380
386
  if (this.show)
381
387
  containerClasses.push('show');
388
+ if (this.block)
389
+ containerClasses.push('block');
382
390
  if (this.mode === 'legacy')
383
391
  containerClasses.push('legacy');
384
- return (index.h("div", { key: '570cccbfa3c4830d4b9d52c9564c5355ed357e4f', ref: el => (this.containerElement = el), class: containerClasses.join(' '), "test-id": "outerContainer" }, index.h("div", { key: '7729d8f39d61e866de0cf3fe6d65fa8205af8a18', ref: el => (this.contentElement = el), class: "content" }, index.h("slot", { key: '315ce34d31a84a0a0d6688982567d2267452161c' }))));
392
+ return (index.h("div", { key: '9e0d1d581cb24bf6189b289fbe4e77e21064b275', ref: el => (this.containerElement = el), class: containerClasses.join(' '), "test-id": "outerContainer", tabIndex: -1, popover: "manual" }, index.h("div", { key: '8eff792ebb66e3f23985755e6884e8e3ce8ce9b3', ref: el => (this.contentElement = el), class: "content" }, index.h("slot", { key: '68e641a22f00c6f9e8dbb8900dd22db5fb3f3c6b' }))));
385
393
  }
386
394
  get hostElement() { return index.getElement(this); }
387
395
  static get watchers() { return {
@@ -1 +1 @@
1
- {"file":"click-elsewhere.q2-popover.entry.cjs.js","mappings":"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","names":["handleDeprecationWarning","waitForNextPaint","h"],"sources":["src/components/click-elsewhere/click-elsewhere.tsx","src/components/q2-popover/q2-popover.scss?tag=q2-popover&encapsulation=shadow","src/components/q2-popover/q2-popover.tsx"],"sourcesContent":["import { Component, ComponentInterface, Element, Event, EventEmitter } from '@stencil/core';\n\n@Component({\n tag: 'click-elsewhere',\n shadow: false,\n})\nexport class ClickElsewhere implements ComponentInterface {\n // #region Own Properties\n\n isCurrentlyFocused: boolean = false;\n /**\n * Listens for mouse and window events that happen outside this click-elsewhere element so we can close popovers when users click outside them\n */\n mouseEventList: string[] = ['mousedown', 'dragstart', 'touchstart'];\n\n // #endregion\n // #region Host HTML Element\n\n @Element()\n hostElement: HTMLElement;\n\n // #endregion\n // #region Events\n\n /**\n * Emitted when the user clicks outside the element\n */\n @Event()\n change: EventEmitter;\n\n // #endregion\n // #region Component Lifecycle Events\n\n /* tslint:enable:no-empty */\n\n connectedCallback() {\n this.mouseEventList.forEach((eventName: string) => {\n document.addEventListener(eventName, this.mouseHandler);\n });\n window.addEventListener('blur', this.windowBlurHandler);\n }\n\n disconnectedCallback() {\n this.mouseEventList.forEach((eventName: string) => {\n document.removeEventListener(eventName, this.mouseHandler);\n });\n window.removeEventListener('blur', this.windowBlurHandler);\n }\n\n /* TODO: Stencil/Rollup is having issues compiling without this here. Will try to remove in future Stencil upgrade. */\n /* tslint:disable:no-empty */\n componentWillLoad() {}\n\n // #endregion\n // #region Local Methods\n\n findActiveElement(): Element | null {\n let workingElement = document.activeElement!;\n while (true) {\n if (!workingElement || !workingElement.shadowRoot) {\n return workingElement;\n }\n workingElement = workingElement.shadowRoot.activeElement;\n }\n }\n\n mouseHandler = (event: Event): void => {\n const isCurrentlyFocused = this.shadowContains(this.findActiveElement());\n const aboutToBeFocused =\n this.shadowContains(this.shadowEventTarget(event)) || this.originatesInSlots(event.target as Element);\n\n if (!aboutToBeFocused && (this.isCurrentlyFocused || isCurrentlyFocused)) {\n this.isCurrentlyFocused = false;\n this.change.emit();\n return;\n }\n this.isCurrentlyFocused = aboutToBeFocused || isCurrentlyFocused;\n };\n\n originatesInSlots(target: Element): boolean {\n const slots = this.hostElement.querySelectorAll('slot');\n for (const currentSlot of Array.from(slots)) {\n const lightNodes =\n (currentSlot && currentSlot.assignedNodes && currentSlot.assignedNodes()) ||\n this.hostElement.childNodes;\n\n for (const currentNode of Array.from(lightNodes)) {\n if (currentNode.contains(target)) {\n return true;\n }\n }\n }\n return false;\n }\n\n shadowContains(child: any): boolean {\n /**\n * shadow-dom enabled version of Node.contains()\n */\n\n while (true) {\n if (child === this.hostElement) {\n return true;\n }\n if (!child) {\n return false;\n }\n child = child.parentNode || child.host;\n }\n }\n\n shadowEventTarget(event: any): Element {\n return event.composedPath()[0] || event.target;\n }\n\n windowBlurHandler = (): void => {\n this.isCurrentlyFocused = false;\n this.change.emit();\n };\n}\n","@import '../../styles/host.scss';\n@import '../../styles/functions';\n\n.container {\n display: none;\n}\n\n.show {\n display: block;\n position: fixed;\n z-index: var-list(--tct-popover-z-index, 50);\n margin: 0;\n padding: 0;\n overflow: auto;\n background: var-list(--tct-popover-background, --app-white, #ffffff);\n color: var-list(--tct-popover-font-color, --t-text, #4d4d4d);\n min-width: var-list(--tct-popover-min-width, 135px);\n margin-block: var-list(--tct-popover-margin-block, 0);\n box-shadow: var-list(--tct-popover-box-shadow, --app-shadow-1, unquote(\"0px 0px 2px rgba(0, 0, 0, 0.12), 0px 2px 4px rgba(0, 0, 0, 0.14)\"));\n border-width: var-list(--tct-popover-border-width, 0);\n border-style: solid;\n border-color: var-list(--tct-popover-border-color, transparent);\n border-radius: var-list(--tct-popover-border-radius, 0);\n // the following --comp variables are set via JS\n max-height: var(--comp-pop-max-height);\n left: var(--comp-pop-left);\n opacity: var(--comp-pop-opacity, 0);\n\n :host([block]) & {\n right: unset;\n width: var(--comp-pop-width);\n min-width: var-list(--tct-popover-min-width, unset);\n }\n\n :host([align='left']) & {\n left: var(--comp-pop-left);\n right: unset;\n }\n\n :host([align='right']) & {\n right: var(--comp-pop-right);\n left: unset;\n }\n\n &.down {\n top: var-list(--tct-popover-top, --comp-pop-top);\n bottom: unset;\n }\n\n &.up {\n top: unset;\n bottom: var(--comp-pop-bottom);\n }\n\n &.legacy {\n position: absolute;\n }\n\n @include tiny-scrollbar();\n}\n\nclick-elsewhere {\n position: relative;\n display: block;\n}\n","import {\n Component,\n Prop,\n h,\n ComponentInterface,\n Element,\n Watch,\n Method,\n Listen,\n EventEmitter,\n Event,\n State,\n} from '@stencil/core';\nimport { handleDeprecationWarning, waitForNextPaint } from '../../utils';\n\n@Component({ tag: 'q2-popover', shadow: true, styleUrl: 'q2-popover.scss' })\nexport class Q2Popover implements ComponentInterface {\n // #region Own Properties\n\n containerElement: HTMLDivElement;\n contentElement: HTMLDivElement;\n /**\n * The number of pixels to leave between the popover and the edge of the viewport\n */\n displayBuffer = 10;\n /** remove when Popover API is supported in iOS */\n orientationChanged: boolean = false;\n rootElementRect: DOMRect;\n\n // #endregion\n // #region Host HTML Element\n\n @Element()\n hostElement: HTMLElement;\n\n // #endregion\n // #region State Properties\n\n @State()\n currentDirection: 'down' | 'up' = undefined;\n\n // remove `show` when Popover API is supported in iOS\n @State()\n show: boolean = false;\n\n // #endregion\n // #region Public Property API\n\n /** Aligns the popover to the left or right side of the control element. */\n @Prop({ reflect: true })\n align: 'left' | 'right';\n\n /** Indicates the popover will match the width of its parent element. */\n @Prop({ reflect: true })\n block: boolean;\n\n /** The element that controls the popover's behavior. */\n @Prop()\n controlElement: HTMLElement;\n\n /**\n * Force the direction of the popover when it opens.\n * If no value is passed, the component will auto-detect the direction based on available space.\n */\n @Prop({ reflect: true })\n direction: 'up' | 'down';\n\n /** @deprecated */\n @Prop()\n minHeight: number;\n\n @Prop()\n mode: 'legacy' = null;\n\n /** Controls whether the popover is open or closed. */\n @Prop({ reflect: true, mutable: true })\n open: boolean;\n\n // #endregion\n // #region Events\n\n /**\n * Emitted when the popover is opened or closed.\n */\n @Event()\n popoverStateChanged: EventEmitter<{ open: boolean }>;\n\n // #endregion\n // #region Component Lifecycle Events\n\n disconnectedCallback() {\n this.removeViewportListeners();\n }\n\n componentDidLoad() {\n this.handleMinHeight();\n if (this.open) this.determinePopDirection();\n }\n\n // #endregion\n // #region Listeners\n\n @Listen('popoverState')\n popoverStateHandler(event: CustomEvent<{ open: boolean }>) {\n const {\n detail: { open },\n } = event;\n if (open === this.open) return;\n\n this.open = open;\n event.stopPropagation();\n }\n\n // #endregion\n // #region Public Methods API\n\n @Method()\n async scrollContainerTo(options: ScrollToOptions) {\n this.containerElement.scrollTo(options);\n }\n\n @Method()\n async toggle() {\n this.open = !this.open;\n }\n\n // #endregion\n // #region Watchers\n\n @Watch('minHeight')\n minHeightProvided() {\n this.handleMinHeight();\n }\n\n @Watch('open')\n async openChanged(open: boolean) {\n this.setRootElement();\n this.popoverStateChanged.emit({ open });\n\n if (open) {\n this.addViewportListeners();\n this.determinePopDirection();\n } else {\n this.removeViewportListeners();\n this.currentDirection = undefined;\n this.show = false;\n await waitForNextPaint();\n this.clearCSSProperties();\n }\n }\n\n // #endregion\n // #region Local Methods\n\n get actualDirection(): 'up' | 'down' | undefined {\n const { direction } = this;\n switch (direction) {\n case 'up':\n case 'down':\n return direction;\n default:\n return undefined;\n }\n }\n\n get isModule() {\n const isIframe = window !== window.top;\n const hasPlatformDimensions = Object.keys(window.Tecton?.platformDimensions ?? {}).length > 0;\n return isIframe && hasPlatformDimensions;\n }\n\n addViewportListeners() {\n window.addEventListener('resize', this.viewPortOrientationChanged);\n // #region remove when Popover API is supported in iOS\n window.addEventListener('scroll', this.viewPortChanged, { passive: true, capture: true });\n screen?.orientation?.addEventListener('change', this.viewPortOrientationChanged);\n window.addEventListener('orientationchange', this.viewPortOrientationChanged);\n\n // #endregion\n }\n\n clearCSSProperties() {\n this.containerElement.style.removeProperty('--comp-pop-max-height');\n this.containerElement.style.removeProperty('--comp-pop-top');\n this.containerElement.style.removeProperty('--comp-pop-bottom');\n this.containerElement.style.removeProperty('--comp-pop-left');\n this.containerElement.style.removeProperty('--comp-pop-right');\n this.containerElement.style.removeProperty('--comp-pop-width');\n this.containerElement.style.removeProperty('--comp-pop-opacity');\n }\n\n async determinePopDirection() {\n const { containerElement, controlElement, actualDirection, displayBuffer } = this;\n if (containerElement) containerElement.style.maxHeight = null;\n\n await waitForNextPaint();\n\n const { isModule } = this;\n const { top: controlTop, bottom: controlBottom } = controlElement?.getBoundingClientRect?.() ?? {\n top: 0,\n bottom: 0,\n };\n\n let windowHeight: number;\n let maxSpaceAbove: number;\n let maxSpaceBelow: number;\n\n if (isModule) {\n const { outletOffset = 0, innerHeight = window.innerHeight } = window.Tecton?.platformDimensions || {};\n const distanceToIframeBottom = window.visualViewport.height - controlBottom;\n const viewableSpaceBelow = innerHeight - (outletOffset + controlBottom);\n const isIframeShorterThanWindow = distanceToIframeBottom < viewableSpaceBelow;\n windowHeight = innerHeight;\n // If the top of the module is below the top of the window we just use the controlTop\n // Otherwise we need to add the outletOffset to the controlTop\n maxSpaceAbove = (outletOffset > 0 ? controlTop : controlTop + outletOffset) - displayBuffer;\n maxSpaceBelow = isIframeShorterThanWindow\n ? distanceToIframeBottom - displayBuffer\n : viewableSpaceBelow - displayBuffer;\n } else {\n windowHeight = window.visualViewport.height;\n maxSpaceAbove = controlTop - displayBuffer;\n maxSpaceBelow = windowHeight - controlBottom - displayBuffer;\n }\n\n const directionWithMostSpace: 'up' | 'down' = maxSpaceAbove > maxSpaceBelow ? 'up' : 'down';\n\n // We do not want to update the max height once the popover is open unless the page orientation shifts (resize or mobile use cases)\n const shouldUpdateMaxHeight =\n !containerElement.style.getPropertyValue('--comp-pop-max-height') || this.orientationChanged;\n // we do not want to constantly update the max-height after an orientation change, so we switch this back to false\n this.orientationChanged = false;\n const currentOrDetermineDirection = this.currentDirection || actualDirection || directionWithMostSpace;\n\n switch (currentOrDetermineDirection) {\n case 'up':\n if (shouldUpdateMaxHeight) {\n containerElement.style.setProperty('--comp-pop-max-height', `${maxSpaceAbove}px`);\n }\n this.setDirectionAndShow('up');\n break;\n case 'down':\n if (shouldUpdateMaxHeight) {\n containerElement.style.setProperty('--comp-pop-max-height', `${maxSpaceBelow}px`);\n }\n this.setDirectionAndShow('down');\n break;\n default:\n break;\n }\n }\n\n handleMinHeight = () => {\n if (this.minHeight) {\n handleDeprecationWarning(this, 'minHeight', 'prop');\n }\n };\n\n removeViewportListeners() {\n window.removeEventListener('resize', this.viewPortOrientationChanged);\n // #region remove when Popover API is supported in iOS\n window.removeEventListener('scroll', this.viewPortChanged);\n screen?.orientation?.removeEventListener('orientationchange', this.viewPortOrientationChanged);\n window.removeEventListener('orientationchange', this.viewPortOrientationChanged);\n\n // #endregion\n }\n\n setAbsoluteCSSProperties = async () => {\n const { controlElement, containerElement, currentDirection, align } = this;\n\n if (align === 'right') {\n containerElement.style.setProperty('--comp-pop-right', '0');\n containerElement.style.setProperty('--comp-pop-left', 'unset');\n } else {\n containerElement.style.setProperty('--comp-pop-left', '0');\n containerElement.style.setProperty('--comp-pop-right', 'unset');\n }\n\n if (this.block) {\n containerElement.style.setProperty('--comp-pop-width', '100%');\n }\n\n if (currentDirection === 'up') {\n const controlStyle = getComputedStyle(controlElement);\n const controlSize =\n parseInt(controlStyle.height || '0') +\n parseInt(controlStyle.borderTopWidth || '0') +\n parseInt(controlStyle.borderBottomWidth || '0');\n\n containerElement.style.setProperty('--comp-pop-bottom', `${controlSize}px`);\n }\n\n // Wait for one paint to prevent layout thrashing\n await waitForNextPaint();\n containerElement.style.setProperty('--comp-pop-opacity', '1');\n };\n\n setDirectionAndShow(direction: 'up' | 'down') {\n this.setRootElement();\n // Due to some runtime inconsistency across devices/browsers we need to add one more check here because the\n // popover can be closed between the time the popover is opened and the time the direction is determined\n const isOpen = this.open;\n if (!isOpen) return;\n\n this.currentDirection = direction;\n this.show = true;\n if (this.mode === 'legacy') {\n this.setAbsoluteCSSProperties();\n } else {\n this.setFixedCSSProperties();\n }\n }\n\n setFixedCSSProperties = async () => {\n const { controlElement, containerElement, currentDirection, rootElementRect } = this;\n const {\n top: controlTop,\n bottom: controlBottom,\n left: controlLeft,\n right: controlRight,\n } = controlElement?.getBoundingClientRect?.() ?? {\n top: 0,\n bottom: 0,\n left: 0,\n right: 0,\n };\n const popoverLeft: number = controlLeft - rootElementRect.left;\n\n if (this.block) containerElement.style.setProperty('--comp-pop-width', `${controlElement.offsetWidth || 0}px`);\n containerElement.style.setProperty('--comp-pop-left', `${popoverLeft}px`);\n containerElement.style.setProperty(\n '--comp-pop-right',\n `${rootElementRect.width + rootElementRect.left - controlRight}px`\n );\n\n if (currentDirection === 'up') {\n containerElement.style.setProperty(\n '--comp-pop-bottom',\n `${rootElementRect.height + rootElementRect.top - controlTop}px`\n );\n }\n if (currentDirection === 'down') {\n containerElement.style.setProperty('--comp-pop-top', `${controlBottom - rootElementRect.top}px`);\n }\n\n // Wait for one paint to prevent layout thrashing\n await waitForNextPaint();\n containerElement.style.setProperty('--comp-pop-opacity', '1');\n };\n\n setRootElement() {\n let currentElement: HTMLElement = this.hostElement;\n\n while (currentElement && currentElement !== document.documentElement) {\n const computedStyle = window.getComputedStyle(currentElement);\n\n // Check if the element has any styles applied that create a new containg block\n if (\n computedStyle.transform !== 'none' ||\n computedStyle.filter !== 'none' ||\n computedStyle.perspective !== 'none' ||\n computedStyle.containerType !== 'normal' ||\n ['transform', 'perspective', 'filter'].includes(computedStyle.willChange) ||\n ['layout', 'paint', 'strict', 'content'].includes(computedStyle.contain)\n ) {\n this.rootElementRect = currentElement.getBoundingClientRect();\n return;\n }\n\n const rootNode = currentElement.getRootNode();\n const isRootNodeWebComponent =\n typeof ShadowRoot !== 'undefined' &&\n rootNode instanceof ShadowRoot &&\n rootNode.host instanceof HTMLElement;\n if (isRootNodeWebComponent) {\n currentElement = rootNode.host;\n } else {\n currentElement = currentElement.parentElement;\n }\n }\n\n // Return the document's bounding rect if no element is found\n this.rootElementRect = {\n top: 0,\n bottom: 0,\n left: 0,\n right: 0,\n height: window.visualViewport.height,\n width: window.visualViewport.width,\n } as DOMRect;\n }\n\n viewPortChanged = () => {\n if (!this.open) return;\n this.determinePopDirection();\n };\n\n viewPortOrientationChanged = () => {\n this.orientationChanged = true;\n this.viewPortChanged();\n };\n\n // #endregion\n // #region Render Methods\n\n render() {\n const containerClasses = ['container', this.currentDirection];\n if (this.show) containerClasses.push('show');\n if (this.mode === 'legacy') containerClasses.push('legacy');\n\n return (\n <div\n ref={el => (this.containerElement = el)}\n class={containerClasses.join(' ')}\n test-id=\"outerContainer\"\n >\n <div\n ref={el => (this.contentElement = el)}\n class=\"content\"\n >\n <slot />\n </div>\n </div>\n );\n }\n\n // #endregion\n}\n"],"version":3}
1
+ {"file":"click-elsewhere.q2-popover.entry.cjs.js","mappings":"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","names":["handleDeprecationWarning","waitForNextPaint","isInScrollableContainer","isMobile","h"],"sources":["src/components/click-elsewhere/click-elsewhere.tsx","src/components/q2-popover/q2-popover.scss?tag=q2-popover&encapsulation=shadow","src/components/q2-popover/q2-popover.tsx"],"sourcesContent":["import { Component, ComponentInterface, Element, Event, EventEmitter } from '@stencil/core';\n\n@Component({\n tag: 'click-elsewhere',\n shadow: false,\n})\nexport class ClickElsewhere implements ComponentInterface {\n // #region Own Properties\n\n isCurrentlyFocused: boolean = false;\n /**\n * Listens for mouse and window events that happen outside this click-elsewhere element so we can close popovers when users click outside them\n */\n mouseEventList: string[] = ['mousedown', 'dragstart', 'touchstart'];\n\n // #endregion\n // #region Host HTML Element\n\n @Element()\n hostElement: HTMLElement;\n\n // #endregion\n // #region Events\n\n /**\n * Emitted when the user clicks outside the element\n */\n @Event()\n change: EventEmitter;\n\n // #endregion\n // #region Component Lifecycle Events\n\n /* tslint:enable:no-empty */\n\n connectedCallback() {\n this.mouseEventList.forEach((eventName: string) => {\n document.addEventListener(eventName, this.mouseHandler);\n });\n window.addEventListener('blur', this.windowBlurHandler);\n }\n\n disconnectedCallback() {\n this.mouseEventList.forEach((eventName: string) => {\n document.removeEventListener(eventName, this.mouseHandler);\n });\n window.removeEventListener('blur', this.windowBlurHandler);\n }\n\n /* TODO: Stencil/Rollup is having issues compiling without this here. Will try to remove in future Stencil upgrade. */\n /* tslint:disable:no-empty */\n componentWillLoad() {}\n\n // #endregion\n // #region Local Methods\n\n findActiveElement(): Element | null {\n let workingElement = document.activeElement!;\n while (true) {\n if (!workingElement || !workingElement.shadowRoot) {\n return workingElement;\n }\n workingElement = workingElement.shadowRoot.activeElement;\n }\n }\n\n mouseHandler = (event: Event): void => {\n const isCurrentlyFocused = this.shadowContains(this.findActiveElement());\n const aboutToBeFocused =\n this.shadowContains(this.shadowEventTarget(event)) || this.originatesInSlots(event.target as Element);\n\n if (!aboutToBeFocused && (this.isCurrentlyFocused || isCurrentlyFocused)) {\n this.isCurrentlyFocused = false;\n this.change.emit();\n return;\n }\n this.isCurrentlyFocused = aboutToBeFocused || isCurrentlyFocused;\n };\n\n originatesInSlots(target: Element): boolean {\n const slots = this.hostElement.querySelectorAll('slot');\n for (const currentSlot of Array.from(slots)) {\n const lightNodes =\n (currentSlot && currentSlot.assignedNodes && currentSlot.assignedNodes()) ||\n this.hostElement.childNodes;\n\n for (const currentNode of Array.from(lightNodes)) {\n if (currentNode.contains(target)) {\n return true;\n }\n }\n }\n return false;\n }\n\n shadowContains(child: any): boolean {\n /**\n * shadow-dom enabled version of Node.contains()\n */\n\n while (true) {\n if (child === this.hostElement) {\n return true;\n }\n if (!child) {\n return false;\n }\n child = child.parentNode || child.host;\n }\n }\n\n shadowEventTarget(event: any): Element {\n return event.composedPath()[0] || event.target;\n }\n\n windowBlurHandler = (): void => {\n this.isCurrentlyFocused = false;\n this.change.emit();\n };\n}\n","@import '../../styles/host.scss';\n@import '../../styles/functions';\n\n.legacy {\n &.container {\n display: none;\n }\n\n &.show {\n display: block;\n z-index: var-list(--tct-popover-z-index, 50);\n }\n}\n\n:popover-open,\n.show {\n position: absolute;\n margin: 0;\n padding: 0;\n overflow: auto;\n background: var-list(--tct-popover-background, --app-white, #ffffff);\n color: var-list(--tct-popover-font-color, --t-text, #4d4d4d);\n min-width: var-list(--tct-popover-min-width, 135px);\n margin-block: var-list(--tct-popover-margin-block, 0);\n box-shadow: var-list(\n --tct-popover-box-shadow,\n --app-shadow-1,\n unquote('0px 0px 2px rgba(0, 0, 0, 0.12), 0px 2px 4px rgba(0, 0, 0, 0.14)')\n );\n border-width: var-list(--tct-popover-border-width, 0);\n border-style: solid;\n border-color: var-list(--tct-popover-border-color, transparent);\n border-radius: var-list(--tct-popover-border-radius, 0);\n // the --comp variables are set via JS\n max-height: var(--comp-pop-max-height);\n left: var(--comp-pop-left);\n opacity: var(--comp-pop-opacity, 0);\n\n &.block {\n right: unset;\n width: var(--comp-pop-width);\n min-width: var-list(--tct-popover-min-width, unset);\n }\n\n &.left {\n left: var(--comp-pop-left);\n right: unset;\n }\n\n &.right {\n right: var(--comp-pop-right);\n left: unset;\n }\n\n &.down {\n top: var-list(--tct-popover-top, --comp-pop-top);\n bottom: unset;\n }\n\n &.up {\n top: unset;\n bottom: var(--comp-pop-bottom);\n }\n\n @include tiny-scrollbar();\n}\n\nclick-elsewhere {\n position: relative;\n display: block;\n}\n","import {\n Component,\n Prop,\n h,\n ComponentInterface,\n Element,\n Watch,\n Method,\n Listen,\n EventEmitter,\n Event,\n State,\n} from '@stencil/core';\nimport { handleDeprecationWarning, waitForNextPaint, isMobile, isInScrollableContainer } from '../../utils';\n\n@Component({ tag: 'q2-popover', shadow: true, styleUrl: 'q2-popover.scss' })\nexport class Q2Popover implements ComponentInterface {\n // #region Own Properties\n\n containerElement: HTMLDivElement;\n contentElement: HTMLDivElement;\n /**\n * The number of pixels to leave between the popover and the edge of the viewport\n */\n displayBuffer = 10;\n orientationChanged: boolean = false;\n\n // #endregion\n // #region Host HTML Element\n\n @Element()\n hostElement: HTMLElement;\n\n // #endregion\n // #region State Properties\n\n @State()\n currentDirection: 'down' | 'up' = undefined;\n\n // remove `show` when Popover API is supported in iOS\n @State()\n show: boolean = false;\n\n // #endregion\n // #region Public Property API\n\n /** Aligns the popover to the left or right side of the control element. */\n @Prop({ reflect: true })\n align: 'left' | 'right' = 'left';\n\n /** Indicates the popover will match the width of its parent element. */\n @Prop({ reflect: true })\n block: boolean;\n\n /** The element that controls the popover's behavior. */\n @Prop()\n controlElement: HTMLElement;\n\n /**\n * Force the direction of the popover when it opens.\n * If no value is passed, the component will auto-detect the direction based on available space.\n */\n @Prop({ reflect: true })\n direction: 'up' | 'down';\n\n /** @deprecated */\n @Prop()\n minHeight: number;\n\n @Prop()\n mode: 'legacy' = null;\n\n /** Controls whether the popover is open or closed. */\n @Prop({ reflect: true, mutable: true })\n open: boolean;\n\n // #endregion\n // #region Events\n\n /**\n * Emitted when the popover is opened or closed.\n */\n @Event()\n popoverStateChanged: EventEmitter<{ open: boolean }>;\n\n // #endregion\n // #region Component Lifecycle Events\n\n disconnectedCallback() {\n this.removeViewportListeners();\n this.containerElement.removeEventListener('toggle', this.handlePopoverToggleEvent);\n this.containerElement = null;\n this.contentElement = null;\n this.controlElement = null;\n }\n\n componentWillLoad() {\n if (!this.supportsPopoverAPI) {\n console.warn(\n 'The Popover API is not supported in this browser. Please update your browser to the latest version. The component will use legacy mode.'\n );\n this.mode = 'legacy';\n }\n }\n\n componentDidLoad() {\n this.handleMinHeight();\n if (this.supportsPopoverAPI) this.containerElement.addEventListener('toggle', this.handlePopoverToggleEvent);\n if (this.open) this.determinePopDirection();\n }\n\n // #endregion\n // #region Listeners\n\n @Listen('popoverState')\n popoverStateHandler(event: CustomEvent<{ open: boolean }>) {\n const {\n detail: { open },\n } = event;\n if (open === this.open) return;\n\n this.open = open;\n event.stopPropagation();\n }\n\n // #endregion\n // #region Public Methods API\n\n @Method()\n async scrollContainerTo(options: ScrollToOptions) {\n this.containerElement.scrollTo(options);\n }\n\n @Method()\n async toggle() {\n this.open = !this.open;\n }\n\n // #endregion\n // #region Watchers\n\n @Watch('minHeight')\n minHeightProvided() {\n this.handleMinHeight();\n }\n\n @Watch('open')\n async openChanged(open: boolean) {\n this.popoverStateChanged.emit({ open });\n\n if (open) {\n this.addViewportListeners();\n this.determinePopDirection();\n } else {\n this.removeViewportListeners();\n this.currentDirection = undefined;\n if (this.mode === 'legacy' || !this.supportsPopoverAPI) {\n this.show = false;\n } else {\n this.containerElement.hidePopover();\n }\n\n await waitForNextPaint();\n this.clearCSSProperties();\n }\n }\n\n // #endregion\n // #region Local Methods\n\n get isModule() {\n const isIframe = window !== window.top;\n const hasPlatformDimensions = Object.keys(window.Tecton?.platformDimensions ?? {}).length > 0;\n return isIframe && hasPlatformDimensions;\n }\n\n get providedDirection(): 'up' | 'down' | undefined {\n const { direction } = this;\n switch (direction) {\n case 'up':\n case 'down':\n return direction;\n default:\n return undefined;\n }\n }\n\n get supportsPopoverAPI(): boolean {\n return Object.hasOwn(HTMLElement.prototype, 'popover');\n }\n\n addViewportListeners() {\n window.addEventListener('resize', this.viewPortOrientationChanged);\n visualViewport?.addEventListener('resize', this.viewPortChanged);\n if (isInScrollableContainer(this.hostElement) && !isMobile()) {\n window.addEventListener('scroll', this.viewPortChanged, { passive: true, capture: true });\n }\n screen?.orientation?.addEventListener('orientationchange', this.viewPortOrientationChanged);\n window.addEventListener('orientationchange', this.viewPortOrientationChanged);\n }\n\n clearCSSProperties() {\n this.containerElement.style.removeProperty('--comp-pop-max-height');\n this.containerElement.style.removeProperty('--comp-pop-top');\n this.containerElement.style.removeProperty('--comp-pop-bottom');\n this.containerElement.style.removeProperty('--comp-pop-left');\n this.containerElement.style.removeProperty('--comp-pop-right');\n this.containerElement.style.removeProperty('--comp-pop-width');\n this.containerElement.style.removeProperty('--comp-pop-opacity');\n }\n\n async determinePopDirection() {\n const { containerElement, controlElement, providedDirection, displayBuffer } = this;\n if (containerElement) containerElement.style.maxHeight = null;\n await waitForNextPaint();\n\n const { isModule } = this;\n const { top: controlTop, bottom: controlBottom } = controlElement?.getBoundingClientRect?.() ?? {\n top: 0,\n bottom: 0,\n };\n\n let windowHeight: number;\n let maxSpaceAbove: number;\n let maxSpaceBelow: number;\n if (isModule) {\n const {\n outletOffset = 0,\n innerHeight = window.innerHeight,\n top: topBarHeight = 0,\n bottom: bottomBarHeight = 0,\n } = window.Tecton?.platformDimensions || {};\n\n const distanceToIframeBottom = window.innerHeight - controlBottom;\n\n // controlElement position visually on the page\n const visualControlTop = outletOffset > 0 ? controlTop : controlTop + outletOffset - topBarHeight;\n const visualControlBottom = outletOffset + controlBottom - topBarHeight;\n\n // visual space around the controlElement\n const viewableSpaceAbove = visualControlTop;\n const viewableSpaceBelow = innerHeight - bottomBarHeight - visualControlBottom;\n\n // calculate space above and below controlElement\n const isIframeShorterThanWindow = distanceToIframeBottom < viewableSpaceBelow;\n maxSpaceAbove = viewableSpaceAbove - displayBuffer;\n maxSpaceBelow = isIframeShorterThanWindow\n ? distanceToIframeBottom - displayBuffer\n : viewableSpaceBelow - displayBuffer;\n } else {\n windowHeight = window.innerHeight;\n maxSpaceAbove = controlTop - displayBuffer;\n maxSpaceBelow = windowHeight - controlBottom - displayBuffer;\n }\n\n const directionWithMostSpace: 'up' | 'down' = maxSpaceAbove > maxSpaceBelow ? 'up' : 'down';\n\n // We do not want to update the max height once the popover is open unless the page orientation shifts (resize or mobile use cases)\n const shouldUpdateMaxHeight =\n !containerElement.style.getPropertyValue('--comp-pop-max-height') || this.orientationChanged;\n // we do not want to constantly update the max-height after an orientation change, so we switch this back to false\n this.orientationChanged = false;\n const currentOrDetermineDirection = this.currentDirection || providedDirection || directionWithMostSpace;\n\n switch (currentOrDetermineDirection) {\n case 'up':\n if (shouldUpdateMaxHeight) {\n containerElement.style.setProperty('--comp-pop-max-height', `${maxSpaceAbove}px`);\n }\n this.setDirectionAndShow('up');\n break;\n case 'down':\n if (shouldUpdateMaxHeight) {\n containerElement.style.setProperty('--comp-pop-max-height', `${maxSpaceBelow}px`);\n }\n this.setDirectionAndShow('down');\n break;\n default:\n break;\n }\n }\n\n handleMinHeight = () => {\n if (this.minHeight) {\n handleDeprecationWarning(this, 'minHeight', 'prop');\n }\n };\n\n handlePopoverToggleEvent = (event: ToggleEvent) => {\n this.popoverStateChanged.emit({ open: event.newState === 'open' });\n };\n\n removeViewportListeners() {\n window.removeEventListener('resize', this.viewPortOrientationChanged);\n visualViewport?.removeEventListener('resize', this.viewPortChanged);\n window.removeEventListener('scroll', this.viewPortChanged, { capture: true });\n screen?.orientation?.removeEventListener('orientationchange', this.viewPortOrientationChanged);\n window.removeEventListener('orientationchange', this.viewPortOrientationChanged);\n }\n\n setAbsoluteCSSProperties = async () => {\n const { controlElement, containerElement, currentDirection, align } = this;\n\n if (align === 'right') {\n containerElement.style.setProperty('--comp-pop-right', '0');\n containerElement.style.setProperty('--comp-pop-left', 'unset');\n } else {\n containerElement.style.setProperty('--comp-pop-left', '0');\n containerElement.style.setProperty('--comp-pop-right', 'unset');\n }\n\n if (this.block) {\n containerElement.style.setProperty('--comp-pop-width', '100%');\n }\n\n if (currentDirection === 'up') {\n const controlStyle = getComputedStyle(controlElement);\n const controlSize =\n parseInt(controlStyle.height || '0') +\n parseInt(controlStyle.borderTopWidth || '0') +\n parseInt(controlStyle.borderBottomWidth || '0');\n\n containerElement.style.setProperty('--comp-pop-bottom', `${controlSize}px`);\n }\n\n // Wait for one paint to prevent layout thrashing\n await waitForNextPaint();\n containerElement.style.setProperty('--comp-pop-opacity', '1');\n };\n\n setDirectionAndShow(direction: 'up' | 'down') {\n // Due to some runtime inconsistency across devices/browsers we need to add one more check here because the\n // popover can be closed between the time the popover is opened and the time the direction is determined\n const isOpen = this.open;\n if (!isOpen) return;\n\n this.currentDirection = direction;\n if (this.mode === 'legacy' || !this.supportsPopoverAPI) {\n this.show = true;\n this.setAbsoluteCSSProperties();\n } else {\n this.setPopoverAPICSSProperties();\n this.containerElement.showPopover();\n }\n }\n\n setPopoverAPICSSProperties = async () => {\n const { controlElement, containerElement, currentDirection, isModule, align } = this;\n const {\n top: controlTop,\n bottom: controlBottom,\n left: controlLeft,\n right: controlRight,\n } = controlElement?.getBoundingClientRect?.() ?? {\n top: 0,\n bottom: 0,\n left: 0,\n right: 0,\n };\n\n const popoverLeft: number = controlLeft;\n const popoverRight: number = window?.visualViewport?.width - controlRight;\n\n if (align === 'right') {\n containerElement.style.setProperty('--comp-pop-right', `${popoverRight - window.scrollX}px`);\n containerElement.style.setProperty('--comp-pop-left', 'unset');\n } else {\n containerElement.style.setProperty('--comp-pop-left', `${popoverLeft + window.scrollX}px`);\n containerElement.style.setProperty('--comp-pop-right', 'unset');\n }\n\n if (this.block) containerElement.style.setProperty('--comp-pop-width', `${controlElement?.offsetWidth || 0}px`);\n\n if (currentDirection === 'up') {\n if (isModule) {\n containerElement.style.setProperty('--comp-pop-bottom', `${window.innerHeight - controlTop}px`);\n } else {\n containerElement.style.setProperty(\n '--comp-pop-bottom',\n `${window.innerHeight - controlTop - window.scrollY}px`\n );\n }\n }\n\n if (currentDirection === 'down') {\n if (isModule) {\n containerElement.style.setProperty('--comp-pop-top', `${controlBottom}px`);\n } else {\n containerElement.style.setProperty('--comp-pop-top', `${controlBottom + window.scrollY}px`);\n }\n }\n\n // Wait for one paint to prevent layout thrashing\n await waitForNextPaint();\n containerElement.style.setProperty('--comp-pop-opacity', '1');\n };\n\n viewPortChanged = () => {\n if (!this.open) return;\n this.determinePopDirection();\n };\n\n viewPortOrientationChanged = () => {\n this.orientationChanged = true;\n this.viewPortChanged();\n };\n\n // #endregion\n // #region Render Methods\n\n render() {\n const containerClasses = ['container', this.currentDirection, this.align];\n if (this.show) containerClasses.push('show');\n if (this.block) containerClasses.push('block');\n if (this.mode === 'legacy') containerClasses.push('legacy');\n\n return (\n <div\n ref={el => (this.containerElement = el)}\n class={containerClasses.join(' ')}\n test-id=\"outerContainer\"\n tabIndex={-1}\n popover=\"manual\"\n >\n <div\n ref={el => (this.contentElement = el)}\n class=\"content\"\n >\n <slot />\n </div>\n </div>\n );\n }\n\n // #endregion\n}\n"],"version":3}
@@ -1351,24 +1351,36 @@ const DOMPurify = purify.exports;
1351
1351
  function isMobile() {
1352
1352
  return /Android|webOS|iPhone|iPad|iPod|BlackBerry|Mobile|IEMobile|Windows Phone|Opera Mini/i.test(navigator.userAgent);
1353
1353
  }
1354
- function isHostLosingFocus(event, hostElement) {
1355
- const type = event.type;
1356
- const focusInTypes = ['focusin', 'focus'];
1357
- const isFocusIn = focusInTypes.includes(type);
1358
- // on focusin: `target` is element losing focus, `relatedTarget` is element gaining focus
1359
- // on focusout: `target` is element gaining focus, `relatedTarget` is element losing focus
1360
- const elementGainingFocus = isFocusIn ? event.target : event.relatedTarget;
1361
- const isElementNestedInHostElement = (element) => {
1362
- if (element === hostElement)
1354
+ function isInScrollableContainer(element) {
1355
+ let current = element;
1356
+ while (current && current !== document.body && current !== document.documentElement) {
1357
+ // Move to parent
1358
+ if (current.parentElement) {
1359
+ current = current.parentElement;
1360
+ }
1361
+ else {
1362
+ // Try to cross shadow DOM boundary
1363
+ const root = current.getRootNode();
1364
+ if (root && root.host) {
1365
+ current = root.host;
1366
+ }
1367
+ else {
1368
+ break;
1369
+ }
1370
+ }
1371
+ const style = window.getComputedStyle(current);
1372
+ const hasScrollableOverflow = style.overflow === 'scroll' ||
1373
+ style.overflow === 'auto' ||
1374
+ style.overflowX === 'scroll' ||
1375
+ style.overflowX === 'auto' ||
1376
+ style.overflowY === 'scroll' ||
1377
+ style.overflowY === 'auto';
1378
+ const hasOverflowingContent = current.scrollHeight > current.clientHeight || current.scrollWidth > current.clientWidth;
1379
+ if (hasScrollableOverflow && hasOverflowingContent) {
1363
1380
  return true;
1364
- if (element.parentElement) {
1365
- return isElementNestedInHostElement(element.parentElement);
1366
1381
  }
1367
- return false;
1368
- };
1369
- if (!(elementGainingFocus instanceof HTMLElement))
1370
- return true;
1371
- return !isElementNestedInHostElement(elementGainingFocus);
1382
+ }
1383
+ return false;
1372
1384
  }
1373
1385
  function isRelatedTargetWithinHost(event, element) {
1374
1386
  return event.relatedTarget !== element && !element.contains(event.relatedTarget);
@@ -1562,7 +1574,7 @@ exports.handleRenamedProp = handleRenamedProp;
1562
1574
  exports.hasSlotContent = hasSlotContent;
1563
1575
  exports.isEventFromElement = isEventFromElement;
1564
1576
  exports.isFirefox = isFirefox;
1565
- exports.isHostLosingFocus = isHostLosingFocus;
1577
+ exports.isInScrollableContainer = isInScrollableContainer;
1566
1578
  exports.isMobile = isMobile;
1567
1579
  exports.isRelatedTargetWithinHost = isRelatedTargetWithinHost;
1568
1580
  exports.isTouchDevice = isTouchDevice;
@@ -1577,4 +1589,4 @@ exports.sanitizeHTMLString = sanitizeHTMLString;
1577
1589
  exports.setMessageHeight = setMessageHeight;
1578
1590
  exports.waitForNextPaint = waitForNextPaint;
1579
1591
 
1580
- //# sourceMappingURL=index-64d8b839.js.map
1592
+ //# sourceMappingURL=index-7f6e3c5a.js.map