q2-tecton-elements 1.51.1 → 1.51.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 (469) hide show
  1. package/dist/cjs/click-elsewhere_2.cjs.entry.js +66 -71
  2. package/dist/cjs/click-elsewhere_2.cjs.entry.js.map +1 -1
  3. package/dist/cjs/{index-9aa4a776.js → index-c4a56631.js} +1 -21
  4. package/dist/cjs/index-c4a56631.js.map +1 -0
  5. package/dist/cjs/loader.cjs.js +1 -1
  6. package/dist/cjs/q2-action-group.cjs.entry.js +1 -1
  7. package/dist/cjs/q2-action-sheet.cjs.entry.js +2 -2
  8. package/dist/cjs/q2-avatar.cjs.entry.js +1 -1
  9. package/dist/cjs/q2-badge_7.cjs.entry.js +12 -4
  10. package/dist/cjs/q2-badge_7.cjs.entry.js.map +1 -1
  11. package/dist/cjs/q2-calendar.cjs.entry.js +1 -1
  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 +10 -12
  25. package/dist/cjs/q2-dropdown.cjs.entry.js.map +1 -1
  26. package/dist/cjs/q2-editable-field.cjs.entry.js +7 -8
  27. package/dist/cjs/q2-editable-field.cjs.entry.js.map +1 -1
  28. package/dist/cjs/q2-formatted-text.cjs.entry.js +1 -1
  29. package/dist/cjs/q2-item.cjs.entry.js +2 -2
  30. package/dist/cjs/q2-legend.cjs.entry.js +1 -1
  31. package/dist/cjs/q2-list.cjs.entry.js +2 -2
  32. package/dist/cjs/q2-loc.cjs.entry.js +2 -2
  33. package/dist/cjs/q2-message.cjs.entry.js +2 -2
  34. package/dist/cjs/q2-month-picker.cjs.entry.js +3 -3
  35. package/dist/cjs/q2-optgroup.cjs.entry.js +2 -2
  36. package/dist/cjs/q2-option-list.cjs.entry.js +1 -1
  37. package/dist/cjs/q2-option.cjs.entry.js +1 -1
  38. package/dist/cjs/q2-pagination.cjs.entry.js +3 -3
  39. package/dist/cjs/q2-pill.cjs.entry.js +2 -2
  40. package/dist/cjs/q2-radio-group.cjs.entry.js +1 -1
  41. package/dist/cjs/q2-radio.cjs.entry.js +1 -1
  42. package/dist/cjs/q2-relative-time.cjs.entry.js +2 -2
  43. package/dist/cjs/q2-resize-observer.cjs.entry.js +1 -1
  44. package/dist/cjs/q2-section.cjs.entry.js +3 -3
  45. package/dist/cjs/q2-select.cjs.entry.js +93 -16
  46. package/dist/cjs/q2-select.cjs.entry.js.map +1 -1
  47. package/dist/cjs/q2-stepper-pane.cjs.entry.js +1 -1
  48. package/dist/cjs/q2-stepper-vertical.cjs.entry.js +2 -2
  49. package/dist/cjs/q2-stepper.cjs.entry.js +2 -2
  50. package/dist/cjs/q2-tag.cjs.entry.js +2 -2
  51. package/dist/cjs/q2-tecton-elements.cjs.js +1 -1
  52. package/dist/cjs/q2-textarea.cjs.entry.js +3 -2
  53. package/dist/cjs/q2-textarea.cjs.entry.js.map +1 -1
  54. package/dist/cjs/q2-tooltip.cjs.entry.js +1 -1
  55. package/dist/cjs/tecton-tab-pane.cjs.entry.js +2 -2
  56. package/dist/collection/components/click-elsewhere/click-elsewhere.js.map +1 -1
  57. package/dist/collection/components/click-elsewhere/test/click-elsewhere-test.e2e.js.map +1 -1
  58. package/dist/collection/components/q2-action-group/q2-action-group.js +1 -1
  59. package/dist/collection/components/q2-action-group/q2-action-group.js.map +1 -1
  60. package/dist/collection/components/q2-action-group/test/q2-action-group.e2e.js.map +1 -1
  61. package/dist/collection/components/q2-action-group/test/q2-action-group.spec.js.map +1 -1
  62. package/dist/collection/components/q2-action-sheet/q2-action-sheet.js +1 -1
  63. package/dist/collection/components/q2-action-sheet/q2-action-sheet.js.map +1 -1
  64. package/dist/collection/components/q2-action-sheet/test/q2-action-sheet-test.e2e.js.map +1 -1
  65. package/dist/collection/components/q2-avatar/q2-avatar.js +1 -1
  66. package/dist/collection/components/q2-avatar/q2-avatar.js.map +1 -1
  67. package/dist/collection/components/q2-avatar/test/q2-avatar-test.e2e.js.map +1 -1
  68. package/dist/collection/components/q2-badge/q2-badge.js.map +1 -1
  69. package/dist/collection/components/q2-badge/test/q2-badge-test.e2e.js.map +1 -1
  70. package/dist/collection/components/q2-btn/q2-btn.js +4 -0
  71. package/dist/collection/components/q2-btn/q2-btn.js.map +1 -1
  72. package/dist/collection/components/q2-btn/test/q2-btn-test.e2e.js.map +1 -1
  73. package/dist/collection/components/q2-calendar/q2-calendar-helpers.js.map +1 -1
  74. package/dist/collection/components/q2-calendar/q2-calendar-types.js.map +1 -1
  75. package/dist/collection/components/q2-calendar/q2-calendar-validation.js.map +1 -1
  76. package/dist/collection/components/q2-calendar/q2-calendar.js.map +1 -1
  77. package/dist/collection/components/q2-calendar/q2-month-picker.js +2 -2
  78. package/dist/collection/components/q2-calendar/q2-month-picker.js.map +1 -1
  79. package/dist/collection/components/q2-calendar/test/helpers-test.e2e.js.map +1 -1
  80. package/dist/collection/components/q2-calendar/test/q2-calendar-month-picker-test.e2e.js.map +1 -1
  81. package/dist/collection/components/q2-calendar/test/q2-calendar-test.e2e.js +2 -2
  82. package/dist/collection/components/q2-calendar/test/q2-calendar-test.e2e.js.map +1 -1
  83. package/dist/collection/components/q2-calendar/test/validation-test.e2e.js.map +1 -1
  84. package/dist/collection/components/q2-card/q2-card.js.map +1 -1
  85. package/dist/collection/components/q2-card/test/q2-card-test.e2e.js.map +1 -1
  86. package/dist/collection/components/q2-carousel/q2-carousel.js.map +1 -1
  87. package/dist/collection/components/q2-carousel/test/q2-carousel-test.e2e.js.map +1 -1
  88. package/dist/collection/components/q2-carousel-pane/q2-carousel-pane.js +2 -2
  89. package/dist/collection/components/q2-carousel-pane/q2-carousel-pane.js.map +1 -1
  90. package/dist/collection/components/q2-carousel-pane/test/q2-carousel-pane-test.e2e.js.map +1 -1
  91. package/dist/collection/components/q2-carousel-pane/test/q2-carousel-pane-test.spec.js.map +1 -1
  92. package/dist/collection/components/q2-chart-area/q2-chart-area.js +1 -1
  93. package/dist/collection/components/q2-chart-area/q2-chart-area.js.map +1 -1
  94. package/dist/collection/components/q2-chart-area/test/q2-chart-area-test.e2e.js.map +1 -1
  95. package/dist/collection/components/q2-chart-bar/q2-chart-bar.js +1 -1
  96. package/dist/collection/components/q2-chart-bar/q2-chart-bar.js.map +1 -1
  97. package/dist/collection/components/q2-chart-bar/test/q2-chart-bar-test.e2e.js.map +1 -1
  98. package/dist/collection/components/q2-chart-donut/q2-chart-donut.js +1 -1
  99. package/dist/collection/components/q2-chart-donut/q2-chart-donut.js.map +1 -1
  100. package/dist/collection/components/q2-chart-donut/test/q2-chart-donut-test.e2e.js.map +1 -1
  101. package/dist/collection/components/q2-checkbox/q2-checkbox.js.map +1 -1
  102. package/dist/collection/components/q2-checkbox/test/q2-checkbox-test.e2e.js.map +1 -1
  103. package/dist/collection/components/q2-checkbox-group/q2-checkbox-group.js.map +1 -1
  104. package/dist/collection/components/q2-checkbox-group/test/q2-checkbox-group-test.e2e.js.map +1 -1
  105. package/dist/collection/components/q2-currency/q2-currency.js +1 -1
  106. package/dist/collection/components/q2-currency/q2-currency.js.map +1 -1
  107. package/dist/collection/components/q2-currency/test/q2-currency-test.e2e.js.map +1 -1
  108. package/dist/collection/components/q2-data-table/q2-data-table.js.map +1 -1
  109. package/dist/collection/components/q2-data-table/test/q2-data-table-test.e2e.js.map +1 -1
  110. package/dist/collection/components/q2-detail/q2-detail.js +1 -1
  111. package/dist/collection/components/q2-detail/q2-detail.js.map +1 -1
  112. package/dist/collection/components/q2-detail/test/q2-detail-test.e2e.js.map +1 -1
  113. package/dist/collection/components/q2-dropdown/q2-dropdown.js +9 -11
  114. package/dist/collection/components/q2-dropdown/q2-dropdown.js.map +1 -1
  115. package/dist/collection/components/q2-dropdown/test/q2-dropdown-test.e2e.js +5 -17
  116. package/dist/collection/components/q2-dropdown/test/q2-dropdown-test.e2e.js.map +1 -1
  117. package/dist/collection/components/q2-dropdown-item/q2-dropdown-item.js.map +1 -1
  118. package/dist/collection/components/q2-dropdown-item/test/q2-dropdown-item-test.e2e.js.map +1 -1
  119. package/dist/collection/components/q2-editable-field/q2-editable-field.js +12 -7
  120. package/dist/collection/components/q2-editable-field/q2-editable-field.js.map +1 -1
  121. package/dist/collection/components/q2-editable-field/test/q2-editable-field-test.e2e.js.map +1 -1
  122. package/dist/collection/components/q2-formatted-text/q2-formatted-text.js +1 -1
  123. package/dist/collection/components/q2-formatted-text/q2-formatted-text.js.map +1 -1
  124. package/dist/collection/components/q2-formatted-text/test/q2-formatted-text-test.e2e.js.map +1 -1
  125. package/dist/collection/components/q2-icon/q2-icon-types.js.map +1 -1
  126. package/dist/collection/components/q2-icon/q2-icon.js +4 -0
  127. package/dist/collection/components/q2-icon/q2-icon.js.map +1 -1
  128. package/dist/collection/components/q2-icon/test/q2-icon-test.e2e.js.map +1 -1
  129. package/dist/collection/components/q2-input/formatting/alpha.js.map +1 -1
  130. package/dist/collection/components/q2-input/formatting/alphanumeric.js.map +1 -1
  131. package/dist/collection/components/q2-input/formatting/credit-card.js.map +1 -1
  132. package/dist/collection/components/q2-input/formatting/credit-card.spec.js.map +1 -1
  133. package/dist/collection/components/q2-input/formatting/currency.js.map +1 -1
  134. package/dist/collection/components/q2-input/formatting/date.js.map +1 -1
  135. package/dist/collection/components/q2-input/formatting/generic.js.map +1 -1
  136. package/dist/collection/components/q2-input/formatting/number.js.map +1 -1
  137. package/dist/collection/components/q2-input/formatting/numeric.js.map +1 -1
  138. package/dist/collection/components/q2-input/formatting/phone.js.map +1 -1
  139. package/dist/collection/components/q2-input/formatting/postal.js.map +1 -1
  140. package/dist/collection/components/q2-input/formatting/ssn.js.map +1 -1
  141. package/dist/collection/components/q2-input/formatting/tin.js.map +1 -1
  142. package/dist/collection/components/q2-input/q2-input-types.js.map +1 -1
  143. package/dist/collection/components/q2-input/q2-input.js +1 -1
  144. package/dist/collection/components/q2-input/q2-input.js.map +1 -1
  145. package/dist/collection/components/q2-input/test/q2-input-credit-card-test.e2e.js.map +1 -1
  146. package/dist/collection/components/q2-input/test/q2-input-test.e2e.js.map +1 -1
  147. package/dist/collection/components/q2-item/q2-item.js +1 -1
  148. package/dist/collection/components/q2-item/q2-item.js.map +1 -1
  149. package/dist/collection/components/q2-item/test/q2-item-test.e2e.js.map +1 -1
  150. package/dist/collection/components/q2-item/test/q2-item-test.spec.js.map +1 -1
  151. package/dist/collection/components/q2-legend/q2-legend.js +1 -1
  152. package/dist/collection/components/q2-legend/q2-legend.js.map +1 -1
  153. package/dist/collection/components/q2-legend/test/q2-legend-test.e2e.js.map +1 -1
  154. package/dist/collection/components/q2-legend/test/q2-legend-test.spec.js.map +1 -1
  155. package/dist/collection/components/q2-link/q2-link.js.map +1 -1
  156. package/dist/collection/components/q2-link/test/q2-link-test.e2e.js.map +1 -1
  157. package/dist/collection/components/q2-list/q2-list.js +1 -1
  158. package/dist/collection/components/q2-list/q2-list.js.map +1 -1
  159. package/dist/collection/components/q2-list/test/q2-list-test.e2e.js.map +1 -1
  160. package/dist/collection/components/q2-loading/q2-loading.js.map +1 -1
  161. package/dist/collection/components/q2-loading/skeleton/q2-loading-element/index.js.map +1 -1
  162. package/dist/collection/components/q2-loading/skeleton/shapes.js.map +1 -1
  163. package/dist/collection/components/q2-loading/test/q2-loading-element-test.e2e.js.map +1 -1
  164. package/dist/collection/components/q2-loading/test/q2-loading-test.e2e.js.map +1 -1
  165. package/dist/collection/components/q2-loc/q2-loc.js +1 -1
  166. package/dist/collection/components/q2-loc/q2-loc.js.map +1 -1
  167. package/dist/collection/components/q2-loc/test/q2-loc-test.e2e.js.map +1 -1
  168. package/dist/collection/components/q2-message/q2-message.js +1 -1
  169. package/dist/collection/components/q2-message/q2-message.js.map +1 -1
  170. package/dist/collection/components/q2-message/test/q2-message-test.e2e.js.map +1 -1
  171. package/dist/collection/components/q2-optgroup/q2-optgroup.js +1 -1
  172. package/dist/collection/components/q2-optgroup/q2-optgroup.js.map +1 -1
  173. package/dist/collection/components/q2-optgroup/test/q2-optgroup-test.e2e.js.map +1 -1
  174. package/dist/collection/components/q2-option/q2-option.js +1 -1
  175. package/dist/collection/components/q2-option/q2-option.js.map +1 -1
  176. package/dist/collection/components/q2-option/test/q2-option-test.e2e.js.map +1 -1
  177. package/dist/collection/components/q2-option-list/q2-option-list.js.map +1 -1
  178. package/dist/collection/components/q2-option-list/test/q2-option-list-test.e2e.js.map +1 -1
  179. package/dist/collection/components/q2-pagination/q2-pagination.js +2 -2
  180. package/dist/collection/components/q2-pagination/q2-pagination.js.map +1 -1
  181. package/dist/collection/components/q2-pagination/test/q2-pagination-test.e2e.js +1 -0
  182. package/dist/collection/components/q2-pagination/test/q2-pagination-test.e2e.js.map +1 -1
  183. package/dist/collection/components/q2-pill/q2-pill.js +1 -1
  184. package/dist/collection/components/q2-pill/q2-pill.js.map +1 -1
  185. package/dist/collection/components/q2-pill/test/q2-pill-test.e2e.js +1 -1
  186. package/dist/collection/components/q2-pill/test/q2-pill-test.e2e.js.map +1 -1
  187. package/dist/collection/components/q2-popover/q2-popover.css +18 -10
  188. package/dist/collection/components/q2-popover/q2-popover.js +66 -70
  189. package/dist/collection/components/q2-popover/q2-popover.js.map +1 -1
  190. package/dist/collection/components/q2-popover/test/q2-popover-test.e2e.js +1 -83
  191. package/dist/collection/components/q2-popover/test/q2-popover-test.e2e.js.map +1 -1
  192. package/dist/collection/components/q2-popover/test/q2-popover-test.spec.js +743 -435
  193. package/dist/collection/components/q2-popover/test/q2-popover-test.spec.js.map +1 -1
  194. package/dist/collection/components/q2-radio/q2-radio.js.map +1 -1
  195. package/dist/collection/components/q2-radio/test/q2-radio-test.e2e.js.map +1 -1
  196. package/dist/collection/components/q2-radio-group/q2-radio-group.js.map +1 -1
  197. package/dist/collection/components/q2-radio-group/test/q2-radio-group-test.e2e.js.map +1 -1
  198. package/dist/collection/components/q2-relative-time/q2-relative-time.js +1 -1
  199. package/dist/collection/components/q2-relative-time/q2-relative-time.js.map +1 -1
  200. package/dist/collection/components/q2-relative-time/test/q2-relative-time-test.e2e.js.map +1 -1
  201. package/dist/collection/components/q2-resize-observer/q2-resize-observer.js +1 -1
  202. package/dist/collection/components/q2-resize-observer/q2-resize-observer.js.map +1 -1
  203. package/dist/collection/components/q2-resize-observer/test/q2-resize-observer.e2e.js.map +1 -1
  204. package/dist/collection/components/q2-resize-observer/test/q2-resize-observer.spec.js.map +1 -1
  205. package/dist/collection/components/q2-section/q2-section.js +2 -2
  206. package/dist/collection/components/q2-section/q2-section.js.map +1 -1
  207. package/dist/collection/components/q2-section/test/q2-section-test.e2e.js.map +1 -1
  208. package/dist/collection/components/q2-select/q2-select.js +114 -18
  209. package/dist/collection/components/q2-select/q2-select.js.map +1 -1
  210. package/dist/collection/components/q2-select/test/q2-select-test.e2e.js +1 -2
  211. package/dist/collection/components/q2-select/test/q2-select-test.e2e.js.map +1 -1
  212. package/dist/collection/components/q2-select/test/q2-select-test.spec.js +412 -0
  213. package/dist/collection/components/q2-select/test/q2-select-test.spec.js.map +1 -0
  214. package/dist/collection/components/q2-stepper/q2-stepper.js +1 -1
  215. package/dist/collection/components/q2-stepper/q2-stepper.js.map +1 -1
  216. package/dist/collection/components/q2-stepper/test/q2-stepper-test.e2e.js.map +1 -1
  217. package/dist/collection/components/q2-stepper-pane/q2-stepper-pane.js.map +1 -1
  218. package/dist/collection/components/q2-stepper-pane/test/q2-stepper-pane-test.e2e.js.map +1 -1
  219. package/dist/collection/components/q2-stepper-vertical/q2-stepper-vertical.js +1 -1
  220. package/dist/collection/components/q2-stepper-vertical/q2-stepper-vertical.js.map +1 -1
  221. package/dist/collection/components/q2-stepper-vertical/test/q2-stepper-vertical-test.e2e.js.map +1 -1
  222. package/dist/collection/components/q2-tab-container/q2-tab-container.js +1 -1
  223. package/dist/collection/components/q2-tab-container/q2-tab-container.js.map +1 -1
  224. package/dist/collection/components/q2-tab-container/test/q2-tab-container-test.e2e.js.map +1 -1
  225. package/dist/collection/components/q2-tab-container/test/q2-tab-container-test.spec.js.map +1 -1
  226. package/dist/collection/components/q2-tab-pane/q2-tab-pane.js +1 -1
  227. package/dist/collection/components/q2-tab-pane/q2-tab-pane.js.map +1 -1
  228. package/dist/collection/components/q2-tab-pane/test/q2-tab-pane-test.e2e.js.map +1 -1
  229. package/dist/collection/components/q2-tag/q2-tag.js +1 -1
  230. package/dist/collection/components/q2-tag/q2-tag.js.map +1 -1
  231. package/dist/collection/components/q2-tag/test/q2-tag-test.e2e.js +6 -1
  232. package/dist/collection/components/q2-tag/test/q2-tag-test.e2e.js.map +1 -1
  233. package/dist/collection/components/q2-textarea/q2-textarea.js +2 -1
  234. package/dist/collection/components/q2-textarea/q2-textarea.js.map +1 -1
  235. package/dist/collection/components/q2-textarea/test/q2-textarea-test.e2e.js.map +1 -1
  236. package/dist/collection/components/q2-tooltip/q2-tooltip.js.map +1 -1
  237. package/dist/collection/components/q2-tooltip/test/q2-tooltip-test.e2e.js.map +1 -1
  238. package/dist/collection/components/tecton-tab-pane/tecton-tab-pane-types.js.map +1 -1
  239. package/dist/collection/components/tecton-tab-pane/tecton-tab-pane.js +2 -2
  240. package/dist/collection/components/tecton-tab-pane/tecton-tab-pane.js.map +1 -1
  241. package/dist/collection/components/tecton-tab-pane/test/tecton-tab-pane-test.e2e.js.map +1 -1
  242. package/dist/collection/index.js.map +1 -1
  243. package/dist/collection/utils/action-sheet.js.map +1 -1
  244. package/dist/collection/utils/charting.js.map +1 -1
  245. package/dist/collection/utils/helpers.js.map +1 -1
  246. package/dist/collection/utils/index.js.map +1 -1
  247. package/dist/collection/utils/sanitize-html-string.js.map +1 -1
  248. package/dist/collection/utils/sanitize-regex-string.js.map +1 -1
  249. package/dist/collection/utils/test/action-sheet-test.e2e.js.map +1 -1
  250. package/dist/collection/utils/test/index.spec.js.map +1 -1
  251. package/dist/components/index2.js +1 -20
  252. package/dist/components/index2.js.map +1 -1
  253. package/dist/components/q2-action-group.js +1 -1
  254. package/dist/components/q2-action-sheet.js +1 -1
  255. package/dist/components/q2-avatar2.js +1 -1
  256. package/dist/components/q2-btn2.js +4 -0
  257. package/dist/components/q2-btn2.js.map +1 -1
  258. package/dist/components/q2-carousel-pane.js +2 -2
  259. package/dist/components/q2-chart-area.js +1 -1
  260. package/dist/components/q2-chart-bar.js +1 -1
  261. package/dist/components/q2-chart-donut.js +1 -1
  262. package/dist/components/q2-currency.js +1 -1
  263. package/dist/components/q2-detail.js +1 -1
  264. package/dist/components/q2-dropdown.js +9 -11
  265. package/dist/components/q2-dropdown.js.map +1 -1
  266. package/dist/components/q2-editable-field.js +7 -8
  267. package/dist/components/q2-editable-field.js.map +1 -1
  268. package/dist/components/q2-formatted-text.js +1 -1
  269. package/dist/components/q2-icon2.js +4 -0
  270. package/dist/components/q2-icon2.js.map +1 -1
  271. package/dist/components/q2-input2.js +1 -1
  272. package/dist/components/q2-item.js +1 -1
  273. package/dist/components/q2-legend2.js +1 -1
  274. package/dist/components/q2-list.js +1 -1
  275. package/dist/components/q2-loc.js +1 -1
  276. package/dist/components/q2-message2.js +1 -1
  277. package/dist/components/q2-month-picker.js +2 -2
  278. package/dist/components/q2-optgroup2.js +1 -1
  279. package/dist/components/q2-option2.js +1 -1
  280. package/dist/components/q2-pagination.js +2 -2
  281. package/dist/components/q2-pill.js +1 -1
  282. package/dist/components/q2-popover2.js +65 -70
  283. package/dist/components/q2-popover2.js.map +1 -1
  284. package/dist/components/q2-relative-time.js +1 -1
  285. package/dist/components/q2-resize-observer2.js +1 -1
  286. package/dist/components/q2-section.js +2 -2
  287. package/dist/components/q2-select2.js +96 -19
  288. package/dist/components/q2-select2.js.map +1 -1
  289. package/dist/components/q2-stepper-vertical.js +1 -1
  290. package/dist/components/q2-stepper.js +1 -1
  291. package/dist/components/q2-tab-container.js +1 -1
  292. package/dist/components/q2-tab-pane.js +1 -1
  293. package/dist/components/q2-tag.js +1 -1
  294. package/dist/components/q2-textarea.js +2 -1
  295. package/dist/components/q2-textarea.js.map +1 -1
  296. package/dist/components/tecton-tab-pane.js +2 -2
  297. package/dist/esm/click-elsewhere_2.entry.js +66 -71
  298. package/dist/esm/click-elsewhere_2.entry.js.map +1 -1
  299. package/dist/esm/{index-844fc010.js → index-a185b189.js} +2 -21
  300. package/dist/esm/index-a185b189.js.map +1 -0
  301. package/dist/esm/loader.js +1 -1
  302. package/dist/esm/q2-action-group.entry.js +1 -1
  303. package/dist/esm/q2-action-sheet.entry.js +2 -2
  304. package/dist/esm/q2-avatar.entry.js +1 -1
  305. package/dist/esm/q2-badge_7.entry.js +12 -4
  306. package/dist/esm/q2-badge_7.entry.js.map +1 -1
  307. package/dist/esm/q2-calendar.entry.js +1 -1
  308. package/dist/esm/q2-card.entry.js +1 -1
  309. package/dist/esm/q2-carousel-pane.entry.js +3 -3
  310. package/dist/esm/q2-carousel.entry.js +1 -1
  311. package/dist/esm/q2-chart-area.entry.js +2 -2
  312. package/dist/esm/q2-chart-bar.entry.js +2 -2
  313. package/dist/esm/q2-chart-donut.entry.js +2 -2
  314. package/dist/esm/q2-checkbox-group.entry.js +1 -1
  315. package/dist/esm/q2-checkbox.entry.js +1 -1
  316. package/dist/esm/q2-currency.entry.js +1 -1
  317. package/dist/esm/q2-data-table.entry.js +1 -1
  318. package/dist/esm/q2-detail.entry.js +2 -2
  319. package/dist/esm/q2-dropdown-item.entry.js +1 -1
  320. package/dist/esm/q2-dropdown.entry.js +10 -12
  321. package/dist/esm/q2-dropdown.entry.js.map +1 -1
  322. package/dist/esm/q2-editable-field.entry.js +7 -8
  323. package/dist/esm/q2-editable-field.entry.js.map +1 -1
  324. package/dist/esm/q2-formatted-text.entry.js +1 -1
  325. package/dist/esm/q2-item.entry.js +2 -2
  326. package/dist/esm/q2-legend.entry.js +1 -1
  327. package/dist/esm/q2-list.entry.js +2 -2
  328. package/dist/esm/q2-loc.entry.js +2 -2
  329. package/dist/esm/q2-message.entry.js +2 -2
  330. package/dist/esm/q2-month-picker.entry.js +3 -3
  331. package/dist/esm/q2-optgroup.entry.js +2 -2
  332. package/dist/esm/q2-option-list.entry.js +1 -1
  333. package/dist/esm/q2-option.entry.js +1 -1
  334. package/dist/esm/q2-pagination.entry.js +3 -3
  335. package/dist/esm/q2-pill.entry.js +2 -2
  336. package/dist/esm/q2-radio-group.entry.js +1 -1
  337. package/dist/esm/q2-radio.entry.js +1 -1
  338. package/dist/esm/q2-relative-time.entry.js +2 -2
  339. package/dist/esm/q2-resize-observer.entry.js +1 -1
  340. package/dist/esm/q2-section.entry.js +3 -3
  341. package/dist/esm/q2-select.entry.js +94 -17
  342. package/dist/esm/q2-select.entry.js.map +1 -1
  343. package/dist/esm/q2-stepper-pane.entry.js +1 -1
  344. package/dist/esm/q2-stepper-vertical.entry.js +2 -2
  345. package/dist/esm/q2-stepper.entry.js +2 -2
  346. package/dist/esm/q2-tag.entry.js +2 -2
  347. package/dist/esm/q2-tecton-elements.js +1 -1
  348. package/dist/esm/q2-textarea.entry.js +3 -2
  349. package/dist/esm/q2-textarea.entry.js.map +1 -1
  350. package/dist/esm/q2-tooltip.entry.js +1 -1
  351. package/dist/esm/tecton-tab-pane.entry.js +2 -2
  352. package/dist/jest.setup.js +22 -0
  353. package/dist/jest.setup.js.map +1 -0
  354. package/dist/q2-tecton-elements/{p-7c9a0122.entry.js → p-089801c6.entry.js} +2 -2
  355. package/dist/q2-tecton-elements/p-0e63312a.entry.js +2 -0
  356. package/dist/q2-tecton-elements/p-0e63312a.entry.js.map +1 -0
  357. package/dist/q2-tecton-elements/{p-7c9f8b62.entry.js → p-15383dc8.entry.js} +2 -2
  358. package/dist/q2-tecton-elements/{p-7903cd15.entry.js → p-18209f3b.entry.js} +2 -2
  359. package/dist/q2-tecton-elements/{p-ac6aa392.entry.js → p-1f7e9ab9.entry.js} +2 -2
  360. package/dist/q2-tecton-elements/{p-7aef0c08.entry.js → p-29f1f2df.entry.js} +2 -2
  361. package/dist/q2-tecton-elements/{p-8d07cf91.entry.js → p-2a296347.entry.js} +2 -2
  362. package/dist/q2-tecton-elements/{p-4e10550d.entry.js → p-3b075b65.entry.js} +2 -2
  363. package/dist/q2-tecton-elements/{p-c5667d5d.entry.js → p-432869d3.entry.js} +2 -2
  364. package/dist/q2-tecton-elements/{p-f5f23659.entry.js → p-4a399340.entry.js} +2 -2
  365. package/dist/q2-tecton-elements/{p-5f99a4a8.entry.js → p-4cabd4a3.entry.js} +2 -2
  366. package/dist/q2-tecton-elements/{p-07d1c3ae.entry.js → p-4e4aa30e.entry.js} +2 -2
  367. package/dist/q2-tecton-elements/{p-a47597dd.entry.js → p-50f6e95a.entry.js} +2 -2
  368. package/dist/q2-tecton-elements/{p-7906f49e.entry.js → p-53224667.entry.js} +2 -2
  369. package/dist/q2-tecton-elements/p-5df24439.entry.js +2 -0
  370. package/dist/q2-tecton-elements/p-5df24439.entry.js.map +1 -0
  371. package/dist/q2-tecton-elements/{p-b1784be3.entry.js → p-65f60a00.entry.js} +2 -2
  372. package/dist/q2-tecton-elements/{p-188eb162.entry.js → p-7e87cbdf.entry.js} +3 -3
  373. package/dist/q2-tecton-elements/p-85c46278.entry.js +2 -0
  374. package/dist/q2-tecton-elements/p-85c46278.entry.js.map +1 -0
  375. package/dist/q2-tecton-elements/{p-8d2b02e1.entry.js → p-8a75584e.entry.js} +2 -2
  376. package/dist/q2-tecton-elements/{p-5637c486.entry.js → p-998d2b5e.entry.js} +2 -2
  377. package/dist/q2-tecton-elements/{p-e2c800ef.entry.js → p-9e8e33e4.entry.js} +2 -2
  378. package/dist/q2-tecton-elements/{p-1c88d057.entry.js → p-a2793557.entry.js} +2 -2
  379. package/dist/q2-tecton-elements/{p-95a7c042.entry.js → p-a64e521d.entry.js} +2 -2
  380. package/dist/q2-tecton-elements/{p-16910682.entry.js → p-aad42723.entry.js} +2 -2
  381. package/dist/q2-tecton-elements/{p-f135b265.entry.js → p-ac7a3bc1.entry.js} +2 -2
  382. package/dist/q2-tecton-elements/{p-f135b265.entry.js.map → p-ac7a3bc1.entry.js.map} +1 -1
  383. package/dist/q2-tecton-elements/{p-20a3d6ed.entry.js → p-b17e9798.entry.js} +2 -2
  384. package/dist/q2-tecton-elements/{p-5a834214.entry.js → p-bbe24257.entry.js} +2 -2
  385. package/dist/q2-tecton-elements/{p-b7de110e.entry.js → p-bc530c75.entry.js} +2 -2
  386. package/dist/q2-tecton-elements/{p-2733583e.entry.js → p-c324d1c8.entry.js} +2 -2
  387. package/dist/q2-tecton-elements/{p-3e428290.entry.js → p-c3566e7a.entry.js} +2 -2
  388. package/dist/q2-tecton-elements/p-c5445b5e.js +2 -0
  389. package/dist/q2-tecton-elements/p-c5445b5e.js.map +1 -0
  390. package/dist/q2-tecton-elements/{p-e216ef3f.entry.js → p-c6fb83ff.entry.js} +2 -2
  391. package/dist/q2-tecton-elements/{p-1c760a89.entry.js → p-cca5af1f.entry.js} +2 -2
  392. package/dist/q2-tecton-elements/{p-a5d0e252.entry.js → p-cfcec7f4.entry.js} +2 -2
  393. package/dist/q2-tecton-elements/{p-c235ab3f.entry.js → p-d312f179.entry.js} +2 -2
  394. package/dist/q2-tecton-elements/{p-96b1406c.entry.js → p-d326261a.entry.js} +2 -2
  395. package/dist/q2-tecton-elements/{p-06701928.entry.js → p-dc80c2ed.entry.js} +2 -2
  396. package/dist/q2-tecton-elements/{p-4774e5b3.entry.js → p-e0a617fd.entry.js} +2 -2
  397. package/dist/q2-tecton-elements/p-e940ccfb.entry.js +2 -0
  398. package/dist/q2-tecton-elements/p-e940ccfb.entry.js.map +1 -0
  399. package/dist/q2-tecton-elements/{p-50f7328f.entry.js → p-e9dfbb78.entry.js} +2 -2
  400. package/dist/q2-tecton-elements/{p-ff8f1a32.entry.js → p-ebc71f10.entry.js} +2 -2
  401. package/dist/q2-tecton-elements/{p-ad057d10.entry.js → p-f043a9f1.entry.js} +2 -2
  402. package/dist/q2-tecton-elements/{p-fff01dc1.entry.js → p-f51426b0.entry.js} +2 -2
  403. package/dist/q2-tecton-elements/p-f8710843.entry.js +2 -0
  404. package/dist/q2-tecton-elements/p-f8710843.entry.js.map +1 -0
  405. package/dist/q2-tecton-elements/{p-81fbe718.entry.js → p-fa68a890.entry.js} +2 -2
  406. package/dist/q2-tecton-elements/{p-490ef8e5.entry.js → p-fbd6cb9a.entry.js} +2 -2
  407. package/dist/q2-tecton-elements/q2-tecton-elements.esm.js +1 -1
  408. package/dist/q2-tecton-elements/q2-tecton-elements.esm.js.map +1 -1
  409. package/dist/types/builds/q2e/development/tecton/tecton/packages/q2-tecton-elements/.stencil/jest.setup.d.ts +1 -0
  410. package/dist/types/components/q2-btn/q2-btn.d.ts +1 -0
  411. package/dist/types/components/q2-dropdown/q2-dropdown.d.ts +1 -4
  412. package/dist/types/components/q2-editable-field/q2-editable-field.d.ts +2 -2
  413. package/dist/types/components/q2-icon/q2-icon.d.ts +1 -0
  414. package/dist/types/components/q2-popover/q2-popover.d.ts +4 -5
  415. package/dist/types/components/q2-select/q2-select.d.ts +19 -0
  416. package/package.json +3 -3
  417. package/dist/cjs/index-9aa4a776.js.map +0 -1
  418. package/dist/esm/index-844fc010.js.map +0 -1
  419. package/dist/q2-tecton-elements/p-1305f7ca.entry.js +0 -2
  420. package/dist/q2-tecton-elements/p-1305f7ca.entry.js.map +0 -1
  421. package/dist/q2-tecton-elements/p-15ac45d6.js +0 -2
  422. package/dist/q2-tecton-elements/p-15ac45d6.js.map +0 -1
  423. package/dist/q2-tecton-elements/p-56df21b0.entry.js +0 -2
  424. package/dist/q2-tecton-elements/p-56df21b0.entry.js.map +0 -1
  425. package/dist/q2-tecton-elements/p-896c7008.entry.js +0 -2
  426. package/dist/q2-tecton-elements/p-896c7008.entry.js.map +0 -1
  427. package/dist/q2-tecton-elements/p-b0e5e9dc.entry.js +0 -2
  428. package/dist/q2-tecton-elements/p-b0e5e9dc.entry.js.map +0 -1
  429. package/dist/q2-tecton-elements/p-f7867f21.entry.js +0 -2
  430. package/dist/q2-tecton-elements/p-f7867f21.entry.js.map +0 -1
  431. /package/dist/q2-tecton-elements/{p-7c9a0122.entry.js.map → p-089801c6.entry.js.map} +0 -0
  432. /package/dist/q2-tecton-elements/{p-7c9f8b62.entry.js.map → p-15383dc8.entry.js.map} +0 -0
  433. /package/dist/q2-tecton-elements/{p-7903cd15.entry.js.map → p-18209f3b.entry.js.map} +0 -0
  434. /package/dist/q2-tecton-elements/{p-ac6aa392.entry.js.map → p-1f7e9ab9.entry.js.map} +0 -0
  435. /package/dist/q2-tecton-elements/{p-7aef0c08.entry.js.map → p-29f1f2df.entry.js.map} +0 -0
  436. /package/dist/q2-tecton-elements/{p-8d07cf91.entry.js.map → p-2a296347.entry.js.map} +0 -0
  437. /package/dist/q2-tecton-elements/{p-4e10550d.entry.js.map → p-3b075b65.entry.js.map} +0 -0
  438. /package/dist/q2-tecton-elements/{p-c5667d5d.entry.js.map → p-432869d3.entry.js.map} +0 -0
  439. /package/dist/q2-tecton-elements/{p-f5f23659.entry.js.map → p-4a399340.entry.js.map} +0 -0
  440. /package/dist/q2-tecton-elements/{p-5f99a4a8.entry.js.map → p-4cabd4a3.entry.js.map} +0 -0
  441. /package/dist/q2-tecton-elements/{p-07d1c3ae.entry.js.map → p-4e4aa30e.entry.js.map} +0 -0
  442. /package/dist/q2-tecton-elements/{p-a47597dd.entry.js.map → p-50f6e95a.entry.js.map} +0 -0
  443. /package/dist/q2-tecton-elements/{p-7906f49e.entry.js.map → p-53224667.entry.js.map} +0 -0
  444. /package/dist/q2-tecton-elements/{p-b1784be3.entry.js.map → p-65f60a00.entry.js.map} +0 -0
  445. /package/dist/q2-tecton-elements/{p-188eb162.entry.js.map → p-7e87cbdf.entry.js.map} +0 -0
  446. /package/dist/q2-tecton-elements/{p-8d2b02e1.entry.js.map → p-8a75584e.entry.js.map} +0 -0
  447. /package/dist/q2-tecton-elements/{p-5637c486.entry.js.map → p-998d2b5e.entry.js.map} +0 -0
  448. /package/dist/q2-tecton-elements/{p-e2c800ef.entry.js.map → p-9e8e33e4.entry.js.map} +0 -0
  449. /package/dist/q2-tecton-elements/{p-1c88d057.entry.js.map → p-a2793557.entry.js.map} +0 -0
  450. /package/dist/q2-tecton-elements/{p-95a7c042.entry.js.map → p-a64e521d.entry.js.map} +0 -0
  451. /package/dist/q2-tecton-elements/{p-16910682.entry.js.map → p-aad42723.entry.js.map} +0 -0
  452. /package/dist/q2-tecton-elements/{p-20a3d6ed.entry.js.map → p-b17e9798.entry.js.map} +0 -0
  453. /package/dist/q2-tecton-elements/{p-5a834214.entry.js.map → p-bbe24257.entry.js.map} +0 -0
  454. /package/dist/q2-tecton-elements/{p-b7de110e.entry.js.map → p-bc530c75.entry.js.map} +0 -0
  455. /package/dist/q2-tecton-elements/{p-2733583e.entry.js.map → p-c324d1c8.entry.js.map} +0 -0
  456. /package/dist/q2-tecton-elements/{p-3e428290.entry.js.map → p-c3566e7a.entry.js.map} +0 -0
  457. /package/dist/q2-tecton-elements/{p-e216ef3f.entry.js.map → p-c6fb83ff.entry.js.map} +0 -0
  458. /package/dist/q2-tecton-elements/{p-1c760a89.entry.js.map → p-cca5af1f.entry.js.map} +0 -0
  459. /package/dist/q2-tecton-elements/{p-a5d0e252.entry.js.map → p-cfcec7f4.entry.js.map} +0 -0
  460. /package/dist/q2-tecton-elements/{p-c235ab3f.entry.js.map → p-d312f179.entry.js.map} +0 -0
  461. /package/dist/q2-tecton-elements/{p-96b1406c.entry.js.map → p-d326261a.entry.js.map} +0 -0
  462. /package/dist/q2-tecton-elements/{p-06701928.entry.js.map → p-dc80c2ed.entry.js.map} +0 -0
  463. /package/dist/q2-tecton-elements/{p-4774e5b3.entry.js.map → p-e0a617fd.entry.js.map} +0 -0
  464. /package/dist/q2-tecton-elements/{p-50f7328f.entry.js.map → p-e9dfbb78.entry.js.map} +0 -0
  465. /package/dist/q2-tecton-elements/{p-ff8f1a32.entry.js.map → p-ebc71f10.entry.js.map} +0 -0
  466. /package/dist/q2-tecton-elements/{p-ad057d10.entry.js.map → p-f043a9f1.entry.js.map} +0 -0
  467. /package/dist/q2-tecton-elements/{p-fff01dc1.entry.js.map → p-f51426b0.entry.js.map} +0 -0
  468. /package/dist/q2-tecton-elements/{p-81fbe718.entry.js.map → p-fa68a890.entry.js.map} +0 -0
  469. /package/dist/q2-tecton-elements/{p-490ef8e5.entry.js.map → p-fbd6cb9a.entry.js.map} +0 -0
@@ -65,14 +65,17 @@ button {
65
65
  visibility: hidden;
66
66
  }
67
67
 
68
- .container {
68
+ .legacy.container {
69
69
  display: none;
70
70
  }
71
-
72
- .show {
71
+ .legacy.show {
73
72
  display: block;
74
- position: fixed;
75
73
  z-index: var(--tct-popover-z-index, 50);
74
+ }
75
+
76
+ :popover-open,
77
+ .show {
78
+ position: absolute;
76
79
  margin: 0;
77
80
  padding: 0;
78
81
  overflow: auto;
@@ -94,39 +97,44 @@ button {
94
97
  scrollbar-width: thin;
95
98
  scrollbar-color: var(--comp-scrollbar-color) transparent;
96
99
  }
97
- :host([block]) .show {
100
+ :popover-open.block,
101
+ .show.block {
98
102
  right: unset;
99
103
  width: var(--comp-pop-width);
100
104
  min-width: var(--tct-popover-min-width, unset);
101
105
  }
102
- :host([align=left]) .show {
106
+ :popover-open.left,
107
+ .show.left {
103
108
  left: var(--comp-pop-left);
104
109
  right: unset;
105
110
  }
106
- :host([align=right]) .show {
111
+ :popover-open.right,
112
+ .show.right {
107
113
  right: var(--comp-pop-right);
108
114
  left: unset;
109
115
  }
116
+ :popover-open.down,
110
117
  .show.down {
111
118
  top: var(--tct-popover-top, var(--comp-pop-top));
112
119
  bottom: unset;
113
120
  }
121
+ :popover-open.up,
114
122
  .show.up {
115
123
  top: unset;
116
124
  bottom: var(--comp-pop-bottom);
117
125
  }
118
- .show.legacy {
119
- position: absolute;
120
- }
126
+ :popover-open::-webkit-scrollbar,
121
127
  .show::-webkit-scrollbar {
122
128
  width: var(--comp-scrollbar-size);
123
129
  height: var(--comp-scrollbar-size);
124
130
  margin: 5px;
125
131
  }
132
+ :popover-open::-webkit-scrollbar-thumb,
126
133
  .show::-webkit-scrollbar-thumb {
127
134
  background: var(--comp-scrollbar-color);
128
135
  border-radius: var(--comp-scrollbar-border-radius);
129
136
  }
137
+ :popover-open::-webkit-scrollbar-track,
130
138
  .show::-webkit-scrollbar-track {
131
139
  background: transparent;
132
140
  border-radius: var(--comp-scrollbar-border-radius);
@@ -6,13 +6,15 @@ export class Q2Popover {
6
6
  * The number of pixels to leave between the popover and the edge of the viewport
7
7
  */
8
8
  this.displayBuffer = 10;
9
- /** remove when Popover API is supported in iOS */
10
9
  this.orientationChanged = false;
11
10
  this.handleMinHeight = () => {
12
11
  if (this.minHeight) {
13
12
  handleDeprecationWarning(this, 'minHeight', 'prop');
14
13
  }
15
14
  };
15
+ this.handlePopoverToggleEvent = (event) => {
16
+ this.popoverStateChanged.emit({ open: event.newState === 'open' });
17
+ };
16
18
  this.setAbsoluteCSSProperties = async () => {
17
19
  const { controlElement, containerElement, currentDirection, align } = this;
18
20
  if (align === 'right') {
@@ -37,25 +39,42 @@ export class Q2Popover {
37
39
  await waitForNextPaint();
38
40
  containerElement.style.setProperty('--comp-pop-opacity', '1');
39
41
  };
40
- this.setFixedCSSProperties = async () => {
41
- var _a, _b;
42
- const { controlElement, containerElement, currentDirection, rootElementRect } = this;
42
+ this.setPopoverAPICSSProperties = async () => {
43
+ var _a, _b, _c, _d, _e, _f;
44
+ const { controlElement, containerElement, currentDirection, isModule, align } = this;
43
45
  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 : {
44
46
  top: 0,
45
47
  bottom: 0,
46
48
  left: 0,
47
49
  right: 0,
48
50
  };
49
- const popoverLeft = controlLeft - rootElementRect.left;
51
+ const popoverLeft = controlLeft;
52
+ const popoverRight = ((_c = window === null || window === void 0 ? void 0 : window.visualViewport) === null || _c === void 0 ? void 0 : _c.width) - controlRight;
53
+ if (align === 'right') {
54
+ containerElement.style.setProperty('--comp-pop-right', `${popoverRight - window.scrollX}px`);
55
+ containerElement.style.setProperty('--comp-pop-left', 'unset');
56
+ }
57
+ else {
58
+ containerElement.style.setProperty('--comp-pop-left', `${popoverLeft + window.scrollX}px`);
59
+ containerElement.style.setProperty('--comp-pop-right', 'unset');
60
+ }
50
61
  if (this.block)
51
- containerElement.style.setProperty('--comp-pop-width', `${controlElement.offsetWidth || 0}px`);
52
- containerElement.style.setProperty('--comp-pop-left', `${popoverLeft}px`);
53
- containerElement.style.setProperty('--comp-pop-right', `${rootElementRect.width + rootElementRect.left - controlRight}px`);
62
+ containerElement.style.setProperty('--comp-pop-width', `${(controlElement === null || controlElement === void 0 ? void 0 : controlElement.offsetWidth) || 0}px`);
54
63
  if (currentDirection === 'up') {
55
- containerElement.style.setProperty('--comp-pop-bottom', `${rootElementRect.height + rootElementRect.top - controlTop}px`);
64
+ if (isModule) {
65
+ containerElement.style.setProperty('--comp-pop-bottom', `${window.innerHeight - controlTop}px`);
66
+ }
67
+ else {
68
+ containerElement.style.setProperty('--comp-pop-bottom', `${window.innerHeight - controlTop - ((_d = window === null || window === void 0 ? void 0 : window.visualViewport) === null || _d === void 0 ? void 0 : _d.offsetTop) - window.scrollY}px`);
69
+ }
56
70
  }
57
71
  if (currentDirection === 'down') {
58
- containerElement.style.setProperty('--comp-pop-top', `${controlBottom - rootElementRect.top}px`);
72
+ if (isModule) {
73
+ containerElement.style.setProperty('--comp-pop-top', `${controlBottom}px`);
74
+ }
75
+ else {
76
+ containerElement.style.setProperty('--comp-pop-top', `${controlBottom + ((_f = (_e = window === null || window === void 0 ? void 0 : window.visualViewport) === null || _e === void 0 ? void 0 : _e.offsetTop) !== null && _f !== void 0 ? _f : 0) + window.scrollY}px`);
77
+ }
59
78
  }
60
79
  // Wait for one paint to prevent layout thrashing
61
80
  await waitForNextPaint();
@@ -72,7 +91,7 @@ export class Q2Popover {
72
91
  };
73
92
  this.currentDirection = undefined;
74
93
  this.show = false;
75
- this.align = undefined;
94
+ this.align = 'left';
76
95
  this.block = undefined;
77
96
  this.controlElement = undefined;
78
97
  this.direction = undefined;
@@ -85,9 +104,21 @@ export class Q2Popover {
85
104
  // #region Component Lifecycle Events
86
105
  disconnectedCallback() {
87
106
  this.removeViewportListeners();
107
+ this.containerElement.removeEventListener('toggle', this.handlePopoverToggleEvent);
108
+ this.containerElement = null;
109
+ this.contentElement = null;
110
+ this.controlElement = null;
111
+ }
112
+ componentWillLoad() {
113
+ if (!this.supportsPopoverAPI) {
114
+ 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.');
115
+ this.mode = 'legacy';
116
+ }
88
117
  }
89
118
  componentDidLoad() {
90
119
  this.handleMinHeight();
120
+ if (this.supportsPopoverAPI)
121
+ this.containerElement.addEventListener('toggle', this.handlePopoverToggleEvent);
91
122
  if (this.open)
92
123
  this.determinePopDirection();
93
124
  }
@@ -114,7 +145,6 @@ export class Q2Popover {
114
145
  this.handleMinHeight();
115
146
  }
116
147
  async openChanged(open) {
117
- this.setRootElement();
118
148
  this.popoverStateChanged.emit({ open });
119
149
  if (open) {
120
150
  this.addViewportListeners();
@@ -123,7 +153,12 @@ export class Q2Popover {
123
153
  else {
124
154
  this.removeViewportListeners();
125
155
  this.currentDirection = undefined;
126
- this.show = false;
156
+ if (this.mode === 'legacy' || !this.supportsPopoverAPI) {
157
+ this.show = false;
158
+ }
159
+ else {
160
+ this.containerElement.hidePopover();
161
+ }
127
162
  await waitForNextPaint();
128
163
  this.clearCSSProperties();
129
164
  }
@@ -146,18 +181,16 @@ export class Q2Popover {
146
181
  return undefined;
147
182
  }
148
183
  }
149
- get validatedMaxHeight() {
150
- const { maxHeight } = this;
151
- return isNaN(maxHeight) ? undefined : maxHeight;
184
+ get supportsPopoverAPI() {
185
+ return Object.hasOwn(HTMLElement.prototype, 'popover');
152
186
  }
153
187
  addViewportListeners() {
154
188
  var _a;
155
189
  window.addEventListener('resize', this.viewPortOrientationChanged);
156
- // #region remove when Popover API is supported in iOS
190
+ visualViewport === null || visualViewport === void 0 ? void 0 : visualViewport.addEventListener('resize', this.viewPortChanged);
157
191
  window.addEventListener('scroll', this.viewPortChanged, { passive: true, capture: true });
158
- (_a = screen === null || screen === void 0 ? void 0 : screen.orientation) === null || _a === void 0 ? void 0 : _a.addEventListener('change', this.viewPortOrientationChanged);
192
+ (_a = screen === null || screen === void 0 ? void 0 : screen.orientation) === null || _a === void 0 ? void 0 : _a.addEventListener('orientationchange', this.viewPortOrientationChanged);
159
193
  window.addEventListener('orientationchange', this.viewPortOrientationChanged);
160
- // #endregion
161
194
  }
162
195
  clearCSSProperties() {
163
196
  this.containerElement.style.removeProperty('--comp-pop-max-height');
@@ -209,17 +242,13 @@ export class Q2Popover {
209
242
  switch (currentOrDetermineDirection) {
210
243
  case 'up':
211
244
  if (shouldUpdateMaxHeight) {
212
- const priorityMaxHeight = this.validatedMaxHeight || maxSpaceAbove;
213
- const maxHeight = Math.min(maxSpaceAbove, priorityMaxHeight);
214
- containerElement.style.setProperty('--comp-pop-max-height', `${maxHeight}px`);
245
+ containerElement.style.setProperty('--comp-pop-max-height', `${maxSpaceAbove}px`);
215
246
  }
216
247
  this.setDirectionAndShow('up');
217
248
  break;
218
249
  case 'down':
219
250
  if (shouldUpdateMaxHeight) {
220
- const priorityMaxHeight = this.validatedMaxHeight || maxSpaceBelow;
221
- const maxHeight = Math.min(maxSpaceBelow, priorityMaxHeight);
222
- containerElement.style.setProperty('--comp-pop-max-height', `${maxHeight}px`);
251
+ containerElement.style.setProperty('--comp-pop-max-height', `${maxSpaceBelow}px`);
223
252
  }
224
253
  this.setDirectionAndShow('down');
225
254
  break;
@@ -230,72 +259,38 @@ export class Q2Popover {
230
259
  removeViewportListeners() {
231
260
  var _a;
232
261
  window.removeEventListener('resize', this.viewPortOrientationChanged);
233
- // #region remove when Popover API is supported in iOS
234
- window.removeEventListener('scroll', this.viewPortChanged);
262
+ visualViewport === null || visualViewport === void 0 ? void 0 : visualViewport.removeEventListener('resize', this.viewPortChanged);
263
+ window.removeEventListener('scroll', this.viewPortChanged, { capture: true });
235
264
  (_a = screen === null || screen === void 0 ? void 0 : screen.orientation) === null || _a === void 0 ? void 0 : _a.removeEventListener('orientationchange', this.viewPortOrientationChanged);
236
265
  window.removeEventListener('orientationchange', this.viewPortOrientationChanged);
237
- // #endregion
238
266
  }
239
267
  setDirectionAndShow(direction) {
240
- this.setRootElement();
241
268
  // Due to some runtime inconsistency across devices/browsers we need to add one more check here because the
242
269
  // popover can be closed between the time the popover is opened and the time the direction is determined
243
270
  const isOpen = this.open;
244
271
  if (!isOpen)
245
272
  return;
246
273
  this.currentDirection = direction;
247
- this.show = true;
248
- if (this.mode === 'legacy') {
274
+ if (this.mode === 'legacy' || !this.supportsPopoverAPI) {
275
+ this.show = true;
249
276
  this.setAbsoluteCSSProperties();
250
277
  }
251
278
  else {
252
- this.setFixedCSSProperties();
279
+ this.setPopoverAPICSSProperties();
280
+ this.containerElement.showPopover();
253
281
  }
254
282
  }
255
- setRootElement() {
256
- let currentElement = this.hostElement;
257
- while (currentElement && currentElement !== document.documentElement) {
258
- const computedStyle = window.getComputedStyle(currentElement);
259
- // Check if the element has any styles applied that create a new containg block
260
- if (computedStyle.transform !== 'none' ||
261
- computedStyle.filter !== 'none' ||
262
- computedStyle.perspective !== 'none' ||
263
- computedStyle.containerType !== 'normal' ||
264
- ['transform', 'perspective', 'filter'].includes(computedStyle.willChange) ||
265
- ['layout', 'paint', 'strict', 'content'].includes(computedStyle.contain)) {
266
- this.rootElementRect = currentElement.getBoundingClientRect();
267
- return;
268
- }
269
- const rootNode = currentElement.getRootNode();
270
- const isRootNodeWebComponent = typeof ShadowRoot !== 'undefined' &&
271
- rootNode instanceof ShadowRoot &&
272
- rootNode.host instanceof HTMLElement;
273
- if (isRootNodeWebComponent) {
274
- currentElement = rootNode.host;
275
- }
276
- else {
277
- currentElement = currentElement.parentElement;
278
- }
279
- }
280
- // Return the document's bounding rect if no element is found
281
- this.rootElementRect = {
282
- top: 0,
283
- bottom: 0,
284
- left: 0,
285
- right: 0,
286
- height: window.visualViewport.height,
287
- width: window.visualViewport.width,
288
- };
289
- }
290
283
  // #endregion
291
284
  // #region Render Methods
292
285
  render() {
293
- const containerClasses = ['container', this.currentDirection];
286
+ const containerClasses = ['container', this.currentDirection, this.align];
294
287
  if (this.show)
295
288
  containerClasses.push('show');
289
+ if (this.block)
290
+ containerClasses.push('block');
296
291
  if (this.mode === 'legacy')
297
292
  containerClasses.push('legacy');
298
- return (h("div", { key: '859d756319e8db9fc5e28f15c172a675c220f217', ref: el => (this.containerElement = el), class: containerClasses.join(' '), "test-id": "outerContainer" }, h("div", { key: '6928f830953fe36fa76fbd8da81f6bde70689ffe', ref: el => (this.contentElement = el), class: "content" }, h("slot", { key: '36be03972c41ec02cefff9b0aa61526e66a49084' }))));
293
+ return (h("div", { key: '25c64e3cebb5b2c332adc6f7d99be5f014ed5ce5', ref: el => (this.containerElement = el), class: containerClasses.join(' '), "test-id": "outerContainer", tabIndex: -1, popover: "auto" }, h("div", { key: '29f0674224cab236bb4c71adb5695d2fce5f5470', ref: el => (this.contentElement = el), class: "content" }, h("slot", { key: '3492361127d9dfc838e94cba14ceb5c12e123286' }))));
299
294
  }
300
295
  static get is() { return "q2-popover"; }
301
296
  static get encapsulation() { return "shadow"; }
@@ -326,7 +321,8 @@ export class Q2Popover {
326
321
  "text": "Aligns the popover to the left or right side of the control element."
327
322
  },
328
323
  "attribute": "align",
329
- "reflect": true
324
+ "reflect": true,
325
+ "defaultValue": "'left'"
330
326
  },
331
327
  "block": {
332
328
  "type": "boolean",
@@ -1 +1 @@
1
- {"version":3,"file":"q2-popover.js","sourceRoot":"","sources":["../../../src/components/q2-popover/q2-popover.tsx"],"names":[],"mappings":"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","sourcesContent":["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 /**\n * Force the maximum height of the popover. This value will be interpreted as pixels.\n * If no value is passed, or the value exceeds available space, the component will auto-detect the maximum height based on available space.\n */\n @Prop()\n maxHeight: number;\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 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 validatedMaxHeight(): number | undefined {\n const { maxHeight } = this;\n return isNaN(maxHeight) ? undefined : maxHeight;\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, providedDirection, 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 || providedDirection || directionWithMostSpace;\n\n switch (currentOrDetermineDirection) {\n case 'up':\n if (shouldUpdateMaxHeight) {\n const priorityMaxHeight = this.validatedMaxHeight || maxSpaceAbove;\n const maxHeight = Math.min(maxSpaceAbove, priorityMaxHeight);\n containerElement.style.setProperty('--comp-pop-max-height', `${maxHeight}px`);\n }\n this.setDirectionAndShow('up');\n break;\n case 'down':\n if (shouldUpdateMaxHeight) {\n const priorityMaxHeight = this.validatedMaxHeight || maxSpaceBelow;\n const maxHeight = Math.min(maxSpaceBelow, priorityMaxHeight);\n containerElement.style.setProperty('--comp-pop-max-height', `${maxHeight}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"]}
1
+ {"version":3,"file":"q2-popover.js","sourceRoot":"","sources":["../../../../src/components/q2-popover/q2-popover.tsx"],"names":[],"mappings":"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","sourcesContent":["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 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 /**\n * Force the maximum height of the popover. This value will be interpreted as pixels.\n * If no value is passed, or the value exceeds available space, the component will auto-detect the maximum height based on available space.\n */\n @Prop()\n maxHeight: number;\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 window.addEventListener('scroll', this.viewPortChanged, { passive: true, capture: true });\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\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 || 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?.visualViewport?.offsetTop - 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(\n '--comp-pop-top',\n `${controlBottom + (window?.visualViewport?.offsetTop ?? 0) + window.scrollY}px`\n );\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=\"auto\"\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"]}
@@ -118,55 +118,6 @@ describe('q2-popover', () => {
118
118
  });
119
119
  });
120
120
  });
121
- describe('maxHeight', () => {
122
- beforeEach(async () => {
123
- page = await setup({
124
- html: `
125
- <q2-popover>
126
- <div style="height: 400px; width: 200px"></div>
127
- </q2-popover>
128
- `,
129
- });
130
- await page.setViewport({ width: 800, height: 400 });
131
- await page.waitForChanges();
132
- popover = await page.find('q2-popover');
133
- popoverContainer = await page.find('q2-popover >>> .container');
134
- });
135
- describe('when provided value is smaller than the available space', () => {
136
- it('implements the provided value', async () => {
137
- popover.setProperty('maxHeight', '200px');
138
- await page.waitForChanges();
139
- expect((await popoverContainer.getComputedStyle()).display).toEqual('none');
140
- await dispatchPopoverState({ open: true });
141
- await page.waitForChanges();
142
- expect((await popoverContainer.getComputedStyle()).display).toEqual('block');
143
- expect(popover).toHaveAttribute('open');
144
- expect(await getPopProperty('--comp-pop-max-height')).toBe('200px');
145
- });
146
- });
147
- describe('when provided value is larger than the available space', () => {
148
- it('implements the available space', async () => {
149
- popover.setProperty('maxHeight', '500px');
150
- await page.waitForChanges();
151
- expect((await popoverContainer.getComputedStyle()).display).toEqual('none');
152
- await dispatchPopoverState({ open: true });
153
- await page.waitForChanges();
154
- expect((await popoverContainer.getComputedStyle()).display).toEqual('block');
155
- expect(popover).toHaveAttribute('open');
156
- expect(await getPopProperty('--comp-pop-max-height')).toBe('390px');
157
- });
158
- });
159
- describe('when value is not provided', () => {
160
- it('implements the available space', async () => {
161
- expect((await popoverContainer.getComputedStyle()).display).toEqual('none');
162
- await dispatchPopoverState({ open: true });
163
- await page.waitForChanges();
164
- expect((await popoverContainer.getComputedStyle()).display).toEqual('block');
165
- expect(popover).toHaveAttribute('open');
166
- expect(await getPopProperty('--comp-pop-max-height')).toBe('390px');
167
- });
168
- });
169
- });
170
121
  describe('Events', () => {
171
122
  describe('popoverState', () => {
172
123
  it('opens the popover when open is passed as true', async () => {
@@ -449,37 +400,6 @@ describe('q2-popover', () => {
449
400
  });
450
401
  describe('Regressions', () => {
451
402
  describe('TCT-2699', () => {
452
- it('calls viewportChanged when document is scrolled', async () => {
453
- page = await setup({
454
- html: `
455
- <div style="height: 3000px">
456
- <div style="height: 50px;" id="control"></div>
457
- <q2-popover>
458
- <q2-option-list>
459
- <q2-option value="1">Account 1</q2-option>
460
- <q2-option value="2">Account 2</q2-option>
461
- <q2-option value="3">Account 3</q2-option>
462
- </q2-option-list>
463
- <q2-popover>
464
- </div>
465
- `,
466
- });
467
- popover = await page.find('q2-popover');
468
- popoverContainer = await page.find('q2-popover >>> .container');
469
- await page.$eval('q2-popover', (element) => {
470
- const controlElement = document.querySelector('#control');
471
- element.controlElement = controlElement;
472
- });
473
- await page.waitForChanges();
474
- await popover.setProperty('open', true);
475
- await page.waitForChanges();
476
- expect(popoverContainer).toHaveClass('down');
477
- expect(await getPopProperty('--comp-pop-top')).toEqual('58px');
478
- await page.$eval('body', () => window.scrollTo(0, 300));
479
- await page.waitForChanges();
480
- expect(popoverContainer).toHaveClass('down');
481
- expect(await getPopProperty('--comp-pop-top')).toEqual('-242px');
482
- });
483
403
  it('calls viewportChanged when another element is scrolled', async () => {
484
404
  page = await setup({
485
405
  html: `
@@ -601,14 +521,12 @@ describe('q2-popover', () => {
601
521
  element.controlElement = controlElement;
602
522
  });
603
523
  await page.waitForChanges();
604
- await popover.setProperty('open', true);
524
+ popover.setProperty('open', true);
605
525
  await page.waitForChanges();
606
526
  expect(popoverContainer).toHaveClass('up');
607
- expect(await getPopProperty('--comp-pop-bottom')).toEqual('200px');
608
527
  await page.$eval('body', () => window.scrollTo(0, 300));
609
528
  await page.waitForChanges();
610
529
  expect(popoverContainer).toHaveClass('up');
611
- expect(await getPopProperty('--comp-pop-bottom')).toEqual('500px');
612
530
  });
613
531
  });
614
532
  });