q2-tecton-elements 1.51.2 → 1.51.4

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 (445) hide show
  1. package/dist/cjs/click-elsewhere_2.cjs.entry.js +77 -81
  2. package/dist/cjs/click-elsewhere_2.cjs.entry.js.map +1 -1
  3. package/dist/cjs/{index-9aa4a776.js → index-bdd747a4.js} +30 -18
  4. package/dist/cjs/index-bdd747a4.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 +4 -4
  10. package/dist/cjs/q2-calendar.cjs.entry.js +1 -1
  11. package/dist/cjs/q2-card.cjs.entry.js +1 -1
  12. package/dist/cjs/q2-carousel-pane.cjs.entry.js +3 -3
  13. package/dist/cjs/q2-carousel.cjs.entry.js +1 -1
  14. package/dist/cjs/q2-chart-area.cjs.entry.js +2 -2
  15. package/dist/cjs/q2-chart-bar.cjs.entry.js +2 -2
  16. package/dist/cjs/q2-chart-donut.cjs.entry.js +2 -2
  17. package/dist/cjs/q2-checkbox-group.cjs.entry.js +1 -1
  18. package/dist/cjs/q2-checkbox.cjs.entry.js +1 -1
  19. package/dist/cjs/q2-currency.cjs.entry.js +1 -1
  20. package/dist/cjs/q2-data-table.cjs.entry.js +1 -1
  21. package/dist/cjs/q2-detail.cjs.entry.js +2 -2
  22. package/dist/cjs/q2-dropdown-item.cjs.entry.js +1 -1
  23. package/dist/cjs/q2-dropdown.cjs.entry.js +4 -2
  24. package/dist/cjs/q2-dropdown.cjs.entry.js.map +1 -1
  25. package/dist/cjs/q2-editable-field.cjs.entry.js +1 -1
  26. package/dist/cjs/q2-formatted-text.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 +2 -2
  41. package/dist/cjs/q2-resize-observer.cjs.entry.js +1 -1
  42. package/dist/cjs/q2-section.cjs.entry.js +3 -3
  43. package/dist/cjs/q2-select.cjs.entry.js +134 -17
  44. package/dist/cjs/q2-select.cjs.entry.js.map +1 -1
  45. package/dist/cjs/q2-stepper-pane.cjs.entry.js +1 -1
  46. package/dist/cjs/q2-stepper-vertical.cjs.entry.js +2 -2
  47. package/dist/cjs/q2-stepper.cjs.entry.js +2 -2
  48. package/dist/cjs/q2-tag.cjs.entry.js +2 -2
  49. package/dist/cjs/q2-tecton-elements.cjs.js +1 -1
  50. package/dist/cjs/q2-textarea.cjs.entry.js +2 -2
  51. package/dist/cjs/q2-tooltip.cjs.entry.js +1 -1
  52. package/dist/cjs/tecton-tab-pane.cjs.entry.js +2 -2
  53. package/dist/collection/components/click-elsewhere/click-elsewhere.js.map +1 -1
  54. package/dist/collection/components/click-elsewhere/test/click-elsewhere-test.e2e.js.map +1 -1
  55. package/dist/collection/components/q2-action-group/q2-action-group.js +1 -1
  56. package/dist/collection/components/q2-action-group/q2-action-group.js.map +1 -1
  57. package/dist/collection/components/q2-action-group/test/q2-action-group.e2e.js.map +1 -1
  58. package/dist/collection/components/q2-action-group/test/q2-action-group.spec.js.map +1 -1
  59. package/dist/collection/components/q2-action-sheet/q2-action-sheet.js +1 -1
  60. package/dist/collection/components/q2-action-sheet/q2-action-sheet.js.map +1 -1
  61. package/dist/collection/components/q2-action-sheet/test/q2-action-sheet-test.e2e.js.map +1 -1
  62. package/dist/collection/components/q2-avatar/q2-avatar.js +1 -1
  63. package/dist/collection/components/q2-avatar/q2-avatar.js.map +1 -1
  64. package/dist/collection/components/q2-avatar/test/q2-avatar-test.e2e.js.map +1 -1
  65. package/dist/collection/components/q2-badge/q2-badge.js.map +1 -1
  66. package/dist/collection/components/q2-badge/test/q2-badge-test.e2e.js.map +1 -1
  67. package/dist/collection/components/q2-btn/q2-btn.js.map +1 -1
  68. package/dist/collection/components/q2-btn/test/q2-btn-test.e2e.js.map +1 -1
  69. package/dist/collection/components/q2-calendar/q2-calendar-helpers.js.map +1 -1
  70. package/dist/collection/components/q2-calendar/q2-calendar-types.js.map +1 -1
  71. package/dist/collection/components/q2-calendar/q2-calendar-validation.js.map +1 -1
  72. package/dist/collection/components/q2-calendar/q2-calendar.js.map +1 -1
  73. package/dist/collection/components/q2-calendar/q2-month-picker.js +2 -2
  74. package/dist/collection/components/q2-calendar/q2-month-picker.js.map +1 -1
  75. package/dist/collection/components/q2-calendar/test/helpers-test.e2e.js.map +1 -1
  76. package/dist/collection/components/q2-calendar/test/q2-calendar-month-picker-test.e2e.js.map +1 -1
  77. package/dist/collection/components/q2-calendar/test/q2-calendar-test.e2e.js +2 -2
  78. package/dist/collection/components/q2-calendar/test/q2-calendar-test.e2e.js.map +1 -1
  79. package/dist/collection/components/q2-calendar/test/validation-test.e2e.js.map +1 -1
  80. package/dist/collection/components/q2-card/q2-card.js.map +1 -1
  81. package/dist/collection/components/q2-card/test/q2-card-test.e2e.js.map +1 -1
  82. package/dist/collection/components/q2-carousel/q2-carousel.js.map +1 -1
  83. package/dist/collection/components/q2-carousel/test/q2-carousel-test.e2e.js.map +1 -1
  84. package/dist/collection/components/q2-carousel-pane/q2-carousel-pane.js +2 -2
  85. package/dist/collection/components/q2-carousel-pane/q2-carousel-pane.js.map +1 -1
  86. package/dist/collection/components/q2-carousel-pane/test/q2-carousel-pane-test.e2e.js.map +1 -1
  87. package/dist/collection/components/q2-carousel-pane/test/q2-carousel-pane-test.spec.js.map +1 -1
  88. package/dist/collection/components/q2-chart-area/q2-chart-area.js +1 -1
  89. package/dist/collection/components/q2-chart-area/q2-chart-area.js.map +1 -1
  90. package/dist/collection/components/q2-chart-area/test/q2-chart-area-test.e2e.js.map +1 -1
  91. package/dist/collection/components/q2-chart-bar/q2-chart-bar.js +1 -1
  92. package/dist/collection/components/q2-chart-bar/q2-chart-bar.js.map +1 -1
  93. package/dist/collection/components/q2-chart-bar/test/q2-chart-bar-test.e2e.js.map +1 -1
  94. package/dist/collection/components/q2-chart-donut/q2-chart-donut.js +1 -1
  95. package/dist/collection/components/q2-chart-donut/q2-chart-donut.js.map +1 -1
  96. package/dist/collection/components/q2-chart-donut/test/q2-chart-donut-test.e2e.js.map +1 -1
  97. package/dist/collection/components/q2-checkbox/q2-checkbox.js.map +1 -1
  98. package/dist/collection/components/q2-checkbox/test/q2-checkbox-test.e2e.js.map +1 -1
  99. package/dist/collection/components/q2-checkbox-group/q2-checkbox-group.js.map +1 -1
  100. package/dist/collection/components/q2-checkbox-group/test/q2-checkbox-group-test.e2e.js.map +1 -1
  101. package/dist/collection/components/q2-currency/q2-currency.js +1 -1
  102. package/dist/collection/components/q2-currency/q2-currency.js.map +1 -1
  103. package/dist/collection/components/q2-currency/test/q2-currency-test.e2e.js.map +1 -1
  104. package/dist/collection/components/q2-data-table/q2-data-table.js.map +1 -1
  105. package/dist/collection/components/q2-data-table/test/q2-data-table-test.e2e.js.map +1 -1
  106. package/dist/collection/components/q2-detail/q2-detail.js +1 -1
  107. package/dist/collection/components/q2-detail/q2-detail.js.map +1 -1
  108. package/dist/collection/components/q2-detail/test/q2-detail-test.e2e.js.map +1 -1
  109. package/dist/collection/components/q2-dropdown/q2-dropdown.js +3 -1
  110. package/dist/collection/components/q2-dropdown/q2-dropdown.js.map +1 -1
  111. package/dist/collection/components/q2-dropdown/test/q2-dropdown-test.e2e.js +5 -17
  112. package/dist/collection/components/q2-dropdown/test/q2-dropdown-test.e2e.js.map +1 -1
  113. package/dist/collection/components/q2-dropdown-item/q2-dropdown-item.js.map +1 -1
  114. package/dist/collection/components/q2-dropdown-item/test/q2-dropdown-item-test.e2e.js.map +1 -1
  115. package/dist/collection/components/q2-editable-field/q2-editable-field.js.map +1 -1
  116. package/dist/collection/components/q2-editable-field/test/q2-editable-field-test.e2e.js.map +1 -1
  117. package/dist/collection/components/q2-formatted-text/q2-formatted-text.js +1 -1
  118. package/dist/collection/components/q2-formatted-text/q2-formatted-text.js.map +1 -1
  119. package/dist/collection/components/q2-formatted-text/test/q2-formatted-text-test.e2e.js.map +1 -1
  120. package/dist/collection/components/q2-icon/q2-icon-types.js.map +1 -1
  121. package/dist/collection/components/q2-icon/q2-icon.js.map +1 -1
  122. package/dist/collection/components/q2-icon/test/q2-icon-test.e2e.js.map +1 -1
  123. package/dist/collection/components/q2-input/formatting/alpha.js.map +1 -1
  124. package/dist/collection/components/q2-input/formatting/alphanumeric.js.map +1 -1
  125. package/dist/collection/components/q2-input/formatting/credit-card.js.map +1 -1
  126. package/dist/collection/components/q2-input/formatting/credit-card.spec.js.map +1 -1
  127. package/dist/collection/components/q2-input/formatting/currency.js.map +1 -1
  128. package/dist/collection/components/q2-input/formatting/date.js.map +1 -1
  129. package/dist/collection/components/q2-input/formatting/generic.js.map +1 -1
  130. package/dist/collection/components/q2-input/formatting/number.js.map +1 -1
  131. package/dist/collection/components/q2-input/formatting/numeric.js.map +1 -1
  132. package/dist/collection/components/q2-input/formatting/phone.js.map +1 -1
  133. package/dist/collection/components/q2-input/formatting/postal.js.map +1 -1
  134. package/dist/collection/components/q2-input/formatting/ssn.js.map +1 -1
  135. package/dist/collection/components/q2-input/formatting/tin.js.map +1 -1
  136. package/dist/collection/components/q2-input/q2-input-types.js.map +1 -1
  137. package/dist/collection/components/q2-input/q2-input.js +1 -1
  138. package/dist/collection/components/q2-input/q2-input.js.map +1 -1
  139. package/dist/collection/components/q2-input/test/q2-input-credit-card-test.e2e.js.map +1 -1
  140. package/dist/collection/components/q2-input/test/q2-input-test.e2e.js.map +1 -1
  141. package/dist/collection/components/q2-item/q2-item.js +1 -1
  142. package/dist/collection/components/q2-item/q2-item.js.map +1 -1
  143. package/dist/collection/components/q2-item/test/q2-item-test.e2e.js.map +1 -1
  144. package/dist/collection/components/q2-item/test/q2-item-test.spec.js.map +1 -1
  145. package/dist/collection/components/q2-legend/q2-legend.js +1 -1
  146. package/dist/collection/components/q2-legend/q2-legend.js.map +1 -1
  147. package/dist/collection/components/q2-legend/test/q2-legend-test.e2e.js.map +1 -1
  148. package/dist/collection/components/q2-legend/test/q2-legend-test.spec.js.map +1 -1
  149. package/dist/collection/components/q2-link/q2-link.js.map +1 -1
  150. package/dist/collection/components/q2-link/test/q2-link-test.e2e.js.map +1 -1
  151. package/dist/collection/components/q2-list/q2-list.js +1 -1
  152. package/dist/collection/components/q2-list/q2-list.js.map +1 -1
  153. package/dist/collection/components/q2-list/test/q2-list-test.e2e.js.map +1 -1
  154. package/dist/collection/components/q2-loading/q2-loading.js.map +1 -1
  155. package/dist/collection/components/q2-loading/skeleton/q2-loading-element/index.js.map +1 -1
  156. package/dist/collection/components/q2-loading/skeleton/shapes.js.map +1 -1
  157. package/dist/collection/components/q2-loading/test/q2-loading-element-test.e2e.js.map +1 -1
  158. package/dist/collection/components/q2-loading/test/q2-loading-test.e2e.js.map +1 -1
  159. package/dist/collection/components/q2-loc/q2-loc.js +1 -1
  160. package/dist/collection/components/q2-loc/q2-loc.js.map +1 -1
  161. package/dist/collection/components/q2-loc/test/q2-loc-test.e2e.js.map +1 -1
  162. package/dist/collection/components/q2-message/q2-message.js +1 -1
  163. package/dist/collection/components/q2-message/q2-message.js.map +1 -1
  164. package/dist/collection/components/q2-message/test/q2-message-test.e2e.js.map +1 -1
  165. package/dist/collection/components/q2-optgroup/q2-optgroup.js +1 -1
  166. package/dist/collection/components/q2-optgroup/q2-optgroup.js.map +1 -1
  167. package/dist/collection/components/q2-optgroup/test/q2-optgroup-test.e2e.js.map +1 -1
  168. package/dist/collection/components/q2-option/q2-option.js +1 -1
  169. package/dist/collection/components/q2-option/q2-option.js.map +1 -1
  170. package/dist/collection/components/q2-option/test/q2-option-test.e2e.js.map +1 -1
  171. package/dist/collection/components/q2-option-list/q2-option-list.js.map +1 -1
  172. package/dist/collection/components/q2-option-list/test/q2-option-list-test.e2e.js.map +1 -1
  173. package/dist/collection/components/q2-pagination/q2-pagination.js +2 -2
  174. package/dist/collection/components/q2-pagination/q2-pagination.js.map +1 -1
  175. package/dist/collection/components/q2-pagination/test/q2-pagination-test.e2e.js +1 -0
  176. package/dist/collection/components/q2-pagination/test/q2-pagination-test.e2e.js.map +1 -1
  177. package/dist/collection/components/q2-pill/q2-pill.js +1 -1
  178. package/dist/collection/components/q2-pill/q2-pill.js.map +1 -1
  179. package/dist/collection/components/q2-pill/test/q2-pill-test.e2e.js +1 -1
  180. package/dist/collection/components/q2-pill/test/q2-pill-test.e2e.js.map +1 -1
  181. package/dist/collection/components/q2-popover/q2-popover.css +18 -10
  182. package/dist/collection/components/q2-popover/q2-popover.js +78 -81
  183. package/dist/collection/components/q2-popover/q2-popover.js.map +1 -1
  184. package/dist/collection/components/q2-popover/test/q2-popover-test.e2e.js +1 -83
  185. package/dist/collection/components/q2-popover/test/q2-popover-test.e2e.js.map +1 -1
  186. package/dist/collection/components/q2-popover/test/q2-popover-test.spec.js +902 -511
  187. package/dist/collection/components/q2-popover/test/q2-popover-test.spec.js.map +1 -1
  188. package/dist/collection/components/q2-radio/q2-radio.js.map +1 -1
  189. package/dist/collection/components/q2-radio/test/q2-radio-test.e2e.js.map +1 -1
  190. package/dist/collection/components/q2-radio-group/q2-radio-group.js.map +1 -1
  191. package/dist/collection/components/q2-radio-group/test/q2-radio-group-test.e2e.js.map +1 -1
  192. package/dist/collection/components/q2-relative-time/q2-relative-time.js +1 -1
  193. package/dist/collection/components/q2-relative-time/q2-relative-time.js.map +1 -1
  194. package/dist/collection/components/q2-relative-time/test/q2-relative-time-test.e2e.js.map +1 -1
  195. package/dist/collection/components/q2-resize-observer/q2-resize-observer.js +1 -1
  196. package/dist/collection/components/q2-resize-observer/q2-resize-observer.js.map +1 -1
  197. package/dist/collection/components/q2-resize-observer/test/q2-resize-observer.e2e.js.map +1 -1
  198. package/dist/collection/components/q2-resize-observer/test/q2-resize-observer.spec.js.map +1 -1
  199. package/dist/collection/components/q2-section/q2-section.js +2 -2
  200. package/dist/collection/components/q2-section/q2-section.js.map +1 -1
  201. package/dist/collection/components/q2-section/test/q2-section-test.e2e.js.map +1 -1
  202. package/dist/collection/components/q2-select/q2-select.js +155 -19
  203. package/dist/collection/components/q2-select/q2-select.js.map +1 -1
  204. package/dist/collection/components/q2-select/test/q2-select-test.e2e.js +1 -2
  205. package/dist/collection/components/q2-select/test/q2-select-test.e2e.js.map +1 -1
  206. package/dist/collection/components/q2-select/test/q2-select-test.spec.js +552 -0
  207. package/dist/collection/components/q2-select/test/q2-select-test.spec.js.map +1 -0
  208. package/dist/collection/components/q2-stepper/q2-stepper.js +1 -1
  209. package/dist/collection/components/q2-stepper/q2-stepper.js.map +1 -1
  210. package/dist/collection/components/q2-stepper/test/q2-stepper-test.e2e.js.map +1 -1
  211. package/dist/collection/components/q2-stepper-pane/q2-stepper-pane.js.map +1 -1
  212. package/dist/collection/components/q2-stepper-pane/test/q2-stepper-pane-test.e2e.js.map +1 -1
  213. package/dist/collection/components/q2-stepper-vertical/q2-stepper-vertical.js +1 -1
  214. package/dist/collection/components/q2-stepper-vertical/q2-stepper-vertical.js.map +1 -1
  215. package/dist/collection/components/q2-stepper-vertical/test/q2-stepper-vertical-test.e2e.js.map +1 -1
  216. package/dist/collection/components/q2-tab-container/q2-tab-container.js +1 -1
  217. package/dist/collection/components/q2-tab-container/q2-tab-container.js.map +1 -1
  218. package/dist/collection/components/q2-tab-container/test/q2-tab-container-test.e2e.js.map +1 -1
  219. package/dist/collection/components/q2-tab-container/test/q2-tab-container-test.spec.js.map +1 -1
  220. package/dist/collection/components/q2-tab-pane/q2-tab-pane.js +1 -1
  221. package/dist/collection/components/q2-tab-pane/q2-tab-pane.js.map +1 -1
  222. package/dist/collection/components/q2-tab-pane/test/q2-tab-pane-test.e2e.js.map +1 -1
  223. package/dist/collection/components/q2-tag/q2-tag.js +1 -1
  224. package/dist/collection/components/q2-tag/q2-tag.js.map +1 -1
  225. package/dist/collection/components/q2-tag/test/q2-tag-test.e2e.js +6 -1
  226. package/dist/collection/components/q2-tag/test/q2-tag-test.e2e.js.map +1 -1
  227. package/dist/collection/components/q2-textarea/q2-textarea.js +1 -1
  228. package/dist/collection/components/q2-textarea/q2-textarea.js.map +1 -1
  229. package/dist/collection/components/q2-textarea/test/q2-textarea-test.e2e.js.map +1 -1
  230. package/dist/collection/components/q2-tooltip/q2-tooltip.js.map +1 -1
  231. package/dist/collection/components/q2-tooltip/test/q2-tooltip-test.e2e.js.map +1 -1
  232. package/dist/collection/components/tecton-tab-pane/tecton-tab-pane-types.js.map +1 -1
  233. package/dist/collection/components/tecton-tab-pane/tecton-tab-pane.js +2 -2
  234. package/dist/collection/components/tecton-tab-pane/tecton-tab-pane.js.map +1 -1
  235. package/dist/collection/components/tecton-tab-pane/test/tecton-tab-pane-test.e2e.js.map +1 -1
  236. package/dist/collection/index.js.map +1 -1
  237. package/dist/collection/utils/action-sheet.js.map +1 -1
  238. package/dist/collection/utils/charting.js.map +1 -1
  239. package/dist/collection/utils/helpers.js.map +1 -1
  240. package/dist/collection/utils/index.js +37 -0
  241. package/dist/collection/utils/index.js.map +1 -1
  242. package/dist/collection/utils/sanitize-html-string.js.map +1 -1
  243. package/dist/collection/utils/sanitize-regex-string.js.map +1 -1
  244. package/dist/collection/utils/test/action-sheet-test.e2e.js.map +1 -1
  245. package/dist/collection/utils/test/index.spec.js.map +1 -1
  246. package/dist/components/index2.js +29 -17
  247. package/dist/components/index2.js.map +1 -1
  248. package/dist/components/q2-action-group.js +1 -1
  249. package/dist/components/q2-action-sheet.js +1 -1
  250. package/dist/components/q2-avatar2.js +1 -1
  251. package/dist/components/q2-carousel-pane.js +2 -2
  252. package/dist/components/q2-chart-area.js +1 -1
  253. package/dist/components/q2-chart-bar.js +1 -1
  254. package/dist/components/q2-chart-donut.js +1 -1
  255. package/dist/components/q2-currency.js +1 -1
  256. package/dist/components/q2-detail.js +1 -1
  257. package/dist/components/q2-dropdown.js +3 -1
  258. package/dist/components/q2-dropdown.js.map +1 -1
  259. package/dist/components/q2-formatted-text.js +1 -1
  260. package/dist/components/q2-input2.js +1 -1
  261. package/dist/components/q2-item.js +1 -1
  262. package/dist/components/q2-legend2.js +1 -1
  263. package/dist/components/q2-list.js +1 -1
  264. package/dist/components/q2-loc.js +1 -1
  265. package/dist/components/q2-message2.js +1 -1
  266. package/dist/components/q2-month-picker.js +2 -2
  267. package/dist/components/q2-optgroup2.js +1 -1
  268. package/dist/components/q2-option2.js +1 -1
  269. package/dist/components/q2-pagination.js +2 -2
  270. package/dist/components/q2-pill.js +1 -1
  271. package/dist/components/q2-popover2.js +77 -81
  272. package/dist/components/q2-popover2.js.map +1 -1
  273. package/dist/components/q2-relative-time.js +1 -1
  274. package/dist/components/q2-resize-observer2.js +1 -1
  275. package/dist/components/q2-section.js +2 -2
  276. package/dist/components/q2-select2.js +137 -20
  277. package/dist/components/q2-select2.js.map +1 -1
  278. package/dist/components/q2-stepper-vertical.js +1 -1
  279. package/dist/components/q2-stepper.js +1 -1
  280. package/dist/components/q2-tab-container.js +1 -1
  281. package/dist/components/q2-tab-pane.js +1 -1
  282. package/dist/components/q2-tag.js +1 -1
  283. package/dist/components/q2-textarea.js +1 -1
  284. package/dist/components/tecton-tab-pane.js +2 -2
  285. package/dist/esm/click-elsewhere_2.entry.js +77 -81
  286. package/dist/esm/click-elsewhere_2.entry.js.map +1 -1
  287. package/dist/esm/{index-844fc010.js → index-7409eb95.js} +30 -18
  288. package/dist/esm/index-7409eb95.js.map +1 -0
  289. package/dist/esm/loader.js +1 -1
  290. package/dist/esm/q2-action-group.entry.js +1 -1
  291. package/dist/esm/q2-action-sheet.entry.js +2 -2
  292. package/dist/esm/q2-avatar.entry.js +1 -1
  293. package/dist/esm/q2-badge_7.entry.js +4 -4
  294. package/dist/esm/q2-calendar.entry.js +1 -1
  295. package/dist/esm/q2-card.entry.js +1 -1
  296. package/dist/esm/q2-carousel-pane.entry.js +3 -3
  297. package/dist/esm/q2-carousel.entry.js +1 -1
  298. package/dist/esm/q2-chart-area.entry.js +2 -2
  299. package/dist/esm/q2-chart-bar.entry.js +2 -2
  300. package/dist/esm/q2-chart-donut.entry.js +2 -2
  301. package/dist/esm/q2-checkbox-group.entry.js +1 -1
  302. package/dist/esm/q2-checkbox.entry.js +1 -1
  303. package/dist/esm/q2-currency.entry.js +1 -1
  304. package/dist/esm/q2-data-table.entry.js +1 -1
  305. package/dist/esm/q2-detail.entry.js +2 -2
  306. package/dist/esm/q2-dropdown-item.entry.js +1 -1
  307. package/dist/esm/q2-dropdown.entry.js +4 -2
  308. package/dist/esm/q2-dropdown.entry.js.map +1 -1
  309. package/dist/esm/q2-editable-field.entry.js +1 -1
  310. package/dist/esm/q2-formatted-text.entry.js +1 -1
  311. package/dist/esm/q2-item.entry.js +2 -2
  312. package/dist/esm/q2-legend.entry.js +1 -1
  313. package/dist/esm/q2-list.entry.js +2 -2
  314. package/dist/esm/q2-loc.entry.js +2 -2
  315. package/dist/esm/q2-message.entry.js +2 -2
  316. package/dist/esm/q2-month-picker.entry.js +3 -3
  317. package/dist/esm/q2-optgroup.entry.js +2 -2
  318. package/dist/esm/q2-option-list.entry.js +1 -1
  319. package/dist/esm/q2-option.entry.js +1 -1
  320. package/dist/esm/q2-pagination.entry.js +3 -3
  321. package/dist/esm/q2-pill.entry.js +2 -2
  322. package/dist/esm/q2-radio-group.entry.js +1 -1
  323. package/dist/esm/q2-radio.entry.js +1 -1
  324. package/dist/esm/q2-relative-time.entry.js +2 -2
  325. package/dist/esm/q2-resize-observer.entry.js +1 -1
  326. package/dist/esm/q2-section.entry.js +3 -3
  327. package/dist/esm/q2-select.entry.js +135 -18
  328. package/dist/esm/q2-select.entry.js.map +1 -1
  329. package/dist/esm/q2-stepper-pane.entry.js +1 -1
  330. package/dist/esm/q2-stepper-vertical.entry.js +2 -2
  331. package/dist/esm/q2-stepper.entry.js +2 -2
  332. package/dist/esm/q2-tag.entry.js +2 -2
  333. package/dist/esm/q2-tecton-elements.js +1 -1
  334. package/dist/esm/q2-textarea.entry.js +2 -2
  335. package/dist/esm/q2-tooltip.entry.js +1 -1
  336. package/dist/esm/tecton-tab-pane.entry.js +2 -2
  337. package/dist/jest.setup.js +33 -0
  338. package/dist/jest.setup.js.map +1 -0
  339. package/dist/q2-tecton-elements/p-011a8cb6.js +2 -0
  340. package/dist/{esm/index-844fc010.js.map → q2-tecton-elements/p-011a8cb6.js.map} +1 -1
  341. package/dist/q2-tecton-elements/p-0ab7d3d3.entry.js +2 -0
  342. package/dist/q2-tecton-elements/p-0ab7d3d3.entry.js.map +1 -0
  343. package/dist/q2-tecton-elements/{p-b7de110e.entry.js → p-0b56edea.entry.js} +2 -2
  344. package/dist/q2-tecton-elements/p-11f9deb7.entry.js +2 -0
  345. package/dist/q2-tecton-elements/p-11f9deb7.entry.js.map +1 -0
  346. package/dist/q2-tecton-elements/{p-81fbe718.entry.js → p-12286a4c.entry.js} +2 -2
  347. package/dist/q2-tecton-elements/{p-7c9a0122.entry.js → p-127e2513.entry.js} +2 -2
  348. package/dist/q2-tecton-elements/{p-7c9f8b62.entry.js → p-15383dc8.entry.js} +2 -2
  349. package/dist/q2-tecton-elements/{p-0d50ee56.entry.js → p-2bc82b46.entry.js} +2 -2
  350. package/dist/q2-tecton-elements/{p-f5f23659.entry.js → p-33f52a11.entry.js} +2 -2
  351. package/dist/q2-tecton-elements/{p-a47597dd.entry.js → p-385e6ae1.entry.js} +2 -2
  352. package/dist/q2-tecton-elements/{p-e0ae03c0.entry.js → p-45dc2aab.entry.js} +2 -2
  353. package/dist/q2-tecton-elements/{p-07d1c3ae.entry.js → p-4e4aa30e.entry.js} +2 -2
  354. package/dist/q2-tecton-elements/{p-16910682.entry.js → p-4ecad44e.entry.js} +2 -2
  355. package/dist/q2-tecton-elements/{p-7aef0c08.entry.js → p-4f77b52f.entry.js} +2 -2
  356. package/dist/q2-tecton-elements/{p-20a3d6ed.entry.js → p-5178f2cb.entry.js} +2 -2
  357. package/dist/q2-tecton-elements/{p-188eb162.entry.js → p-52af46d1.entry.js} +3 -3
  358. package/dist/q2-tecton-elements/{p-1c88d057.entry.js → p-5488af98.entry.js} +2 -2
  359. package/dist/q2-tecton-elements/{p-1c760a89.entry.js → p-5706de19.entry.js} +2 -2
  360. package/dist/q2-tecton-elements/{p-8d2b02e1.entry.js → p-5c71d589.entry.js} +2 -2
  361. package/dist/q2-tecton-elements/{p-e216ef3f.entry.js → p-5d809a5d.entry.js} +2 -2
  362. package/dist/q2-tecton-elements/{p-ac6aa392.entry.js → p-6214e9c0.entry.js} +2 -2
  363. package/dist/q2-tecton-elements/{p-3e428290.entry.js → p-6c190e64.entry.js} +2 -2
  364. package/dist/q2-tecton-elements/{p-06701928.entry.js → p-734efa4a.entry.js} +2 -2
  365. package/dist/q2-tecton-elements/{p-490ef8e5.entry.js → p-77de2770.entry.js} +2 -2
  366. package/dist/q2-tecton-elements/{p-4e10550d.entry.js → p-7823fd55.entry.js} +2 -2
  367. package/dist/q2-tecton-elements/{p-c5667d5d.entry.js → p-7c48cd76.entry.js} +2 -2
  368. package/dist/q2-tecton-elements/{p-7903cd15.entry.js → p-8d130707.entry.js} +2 -2
  369. package/dist/q2-tecton-elements/{p-7906f49e.entry.js → p-96bc1deb.entry.js} +2 -2
  370. package/dist/q2-tecton-elements/{p-5637c486.entry.js → p-998d2b5e.entry.js} +2 -2
  371. package/dist/q2-tecton-elements/{p-ad057d10.entry.js → p-9aadc2e6.entry.js} +2 -2
  372. package/dist/q2-tecton-elements/{p-e2c800ef.entry.js → p-9e8e33e4.entry.js} +2 -2
  373. package/dist/q2-tecton-elements/{p-c235ab3f.entry.js → p-a746e0d1.entry.js} +2 -2
  374. package/dist/q2-tecton-elements/{p-50f7328f.entry.js → p-b4f2418c.entry.js} +2 -2
  375. package/dist/q2-tecton-elements/{p-5f99a4a8.entry.js → p-bcc27542.entry.js} +2 -2
  376. package/dist/q2-tecton-elements/{p-5a834214.entry.js → p-bd9559b6.entry.js} +2 -2
  377. package/dist/q2-tecton-elements/{p-2733583e.entry.js → p-c324d1c8.entry.js} +2 -2
  378. package/dist/q2-tecton-elements/{p-b1784be3.entry.js → p-c5fa02eb.entry.js} +2 -2
  379. package/dist/q2-tecton-elements/{p-96b1406c.entry.js → p-d326261a.entry.js} +2 -2
  380. package/dist/q2-tecton-elements/{p-8d07cf91.entry.js → p-dd00b967.entry.js} +2 -2
  381. package/dist/q2-tecton-elements/p-ddada899.entry.js +2 -0
  382. package/dist/q2-tecton-elements/{p-1f0b9209.entry.js.map → p-ddada899.entry.js.map} +1 -1
  383. package/dist/q2-tecton-elements/{p-4774e5b3.entry.js → p-e0a617fd.entry.js} +2 -2
  384. package/dist/q2-tecton-elements/{p-ff8f1a32.entry.js → p-ebc71f10.entry.js} +2 -2
  385. package/dist/q2-tecton-elements/{p-a5d0e252.entry.js → p-eef77a94.entry.js} +2 -2
  386. package/dist/q2-tecton-elements/{p-fff01dc1.entry.js → p-f3101416.entry.js} +2 -2
  387. package/dist/q2-tecton-elements/{p-95a7c042.entry.js → p-fdde906e.entry.js} +2 -2
  388. package/dist/q2-tecton-elements/{p-61d68630.entry.js → p-fdf71eb1.entry.js} +2 -2
  389. package/dist/q2-tecton-elements/q2-tecton-elements.esm.js +1 -1
  390. package/dist/q2-tecton-elements/q2-tecton-elements.esm.js.map +1 -1
  391. package/dist/types/builds/q2e/development/tecton/tecton/packages/q2-tecton-elements/.stencil/jest.setup.d.ts +10 -0
  392. package/dist/types/components/q2-popover/q2-popover.d.ts +4 -5
  393. package/dist/types/components/q2-select/q2-select.d.ts +23 -0
  394. package/dist/types/utils/index.d.ts +3 -0
  395. package/package.json +3 -3
  396. package/dist/cjs/index-9aa4a776.js.map +0 -1
  397. package/dist/q2-tecton-elements/p-15ac45d6.js +0 -2
  398. package/dist/q2-tecton-elements/p-15ac45d6.js.map +0 -1
  399. package/dist/q2-tecton-elements/p-1f0b9209.entry.js +0 -2
  400. package/dist/q2-tecton-elements/p-56df21b0.entry.js +0 -2
  401. package/dist/q2-tecton-elements/p-56df21b0.entry.js.map +0 -1
  402. package/dist/q2-tecton-elements/p-6f5b7571.entry.js +0 -2
  403. package/dist/q2-tecton-elements/p-6f5b7571.entry.js.map +0 -1
  404. /package/dist/q2-tecton-elements/{p-b7de110e.entry.js.map → p-0b56edea.entry.js.map} +0 -0
  405. /package/dist/q2-tecton-elements/{p-81fbe718.entry.js.map → p-12286a4c.entry.js.map} +0 -0
  406. /package/dist/q2-tecton-elements/{p-7c9a0122.entry.js.map → p-127e2513.entry.js.map} +0 -0
  407. /package/dist/q2-tecton-elements/{p-7c9f8b62.entry.js.map → p-15383dc8.entry.js.map} +0 -0
  408. /package/dist/q2-tecton-elements/{p-0d50ee56.entry.js.map → p-2bc82b46.entry.js.map} +0 -0
  409. /package/dist/q2-tecton-elements/{p-f5f23659.entry.js.map → p-33f52a11.entry.js.map} +0 -0
  410. /package/dist/q2-tecton-elements/{p-a47597dd.entry.js.map → p-385e6ae1.entry.js.map} +0 -0
  411. /package/dist/q2-tecton-elements/{p-e0ae03c0.entry.js.map → p-45dc2aab.entry.js.map} +0 -0
  412. /package/dist/q2-tecton-elements/{p-07d1c3ae.entry.js.map → p-4e4aa30e.entry.js.map} +0 -0
  413. /package/dist/q2-tecton-elements/{p-16910682.entry.js.map → p-4ecad44e.entry.js.map} +0 -0
  414. /package/dist/q2-tecton-elements/{p-7aef0c08.entry.js.map → p-4f77b52f.entry.js.map} +0 -0
  415. /package/dist/q2-tecton-elements/{p-20a3d6ed.entry.js.map → p-5178f2cb.entry.js.map} +0 -0
  416. /package/dist/q2-tecton-elements/{p-188eb162.entry.js.map → p-52af46d1.entry.js.map} +0 -0
  417. /package/dist/q2-tecton-elements/{p-1c88d057.entry.js.map → p-5488af98.entry.js.map} +0 -0
  418. /package/dist/q2-tecton-elements/{p-1c760a89.entry.js.map → p-5706de19.entry.js.map} +0 -0
  419. /package/dist/q2-tecton-elements/{p-8d2b02e1.entry.js.map → p-5c71d589.entry.js.map} +0 -0
  420. /package/dist/q2-tecton-elements/{p-e216ef3f.entry.js.map → p-5d809a5d.entry.js.map} +0 -0
  421. /package/dist/q2-tecton-elements/{p-ac6aa392.entry.js.map → p-6214e9c0.entry.js.map} +0 -0
  422. /package/dist/q2-tecton-elements/{p-3e428290.entry.js.map → p-6c190e64.entry.js.map} +0 -0
  423. /package/dist/q2-tecton-elements/{p-06701928.entry.js.map → p-734efa4a.entry.js.map} +0 -0
  424. /package/dist/q2-tecton-elements/{p-490ef8e5.entry.js.map → p-77de2770.entry.js.map} +0 -0
  425. /package/dist/q2-tecton-elements/{p-4e10550d.entry.js.map → p-7823fd55.entry.js.map} +0 -0
  426. /package/dist/q2-tecton-elements/{p-c5667d5d.entry.js.map → p-7c48cd76.entry.js.map} +0 -0
  427. /package/dist/q2-tecton-elements/{p-7903cd15.entry.js.map → p-8d130707.entry.js.map} +0 -0
  428. /package/dist/q2-tecton-elements/{p-7906f49e.entry.js.map → p-96bc1deb.entry.js.map} +0 -0
  429. /package/dist/q2-tecton-elements/{p-5637c486.entry.js.map → p-998d2b5e.entry.js.map} +0 -0
  430. /package/dist/q2-tecton-elements/{p-ad057d10.entry.js.map → p-9aadc2e6.entry.js.map} +0 -0
  431. /package/dist/q2-tecton-elements/{p-e2c800ef.entry.js.map → p-9e8e33e4.entry.js.map} +0 -0
  432. /package/dist/q2-tecton-elements/{p-c235ab3f.entry.js.map → p-a746e0d1.entry.js.map} +0 -0
  433. /package/dist/q2-tecton-elements/{p-50f7328f.entry.js.map → p-b4f2418c.entry.js.map} +0 -0
  434. /package/dist/q2-tecton-elements/{p-5f99a4a8.entry.js.map → p-bcc27542.entry.js.map} +0 -0
  435. /package/dist/q2-tecton-elements/{p-5a834214.entry.js.map → p-bd9559b6.entry.js.map} +0 -0
  436. /package/dist/q2-tecton-elements/{p-2733583e.entry.js.map → p-c324d1c8.entry.js.map} +0 -0
  437. /package/dist/q2-tecton-elements/{p-b1784be3.entry.js.map → p-c5fa02eb.entry.js.map} +0 -0
  438. /package/dist/q2-tecton-elements/{p-96b1406c.entry.js.map → p-d326261a.entry.js.map} +0 -0
  439. /package/dist/q2-tecton-elements/{p-8d07cf91.entry.js.map → p-dd00b967.entry.js.map} +0 -0
  440. /package/dist/q2-tecton-elements/{p-4774e5b3.entry.js.map → p-e0a617fd.entry.js.map} +0 -0
  441. /package/dist/q2-tecton-elements/{p-ff8f1a32.entry.js.map → p-ebc71f10.entry.js.map} +0 -0
  442. /package/dist/q2-tecton-elements/{p-a5d0e252.entry.js.map → p-eef77a94.entry.js.map} +0 -0
  443. /package/dist/q2-tecton-elements/{p-fff01dc1.entry.js.map → p-f3101416.entry.js.map} +0 -0
  444. /package/dist/q2-tecton-elements/{p-95a7c042.entry.js.map → p-fdde906e.entry.js.map} +0 -0
  445. /package/dist/q2-tecton-elements/{p-61d68630.entry.js.map → p-fdf71eb1.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);
@@ -1,18 +1,20 @@
1
1
  import { h, } from "@stencil/core";
2
- import { handleDeprecationWarning, waitForNextPaint } from "../../utils";
2
+ import { handleDeprecationWarning, waitForNextPaint, isMobile, isInScrollableContainer } from "../../utils";
3
3
  export class Q2Popover {
4
4
  constructor() {
5
5
  /**
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;
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 - 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 + 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,13 +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);
88
108
  this.containerElement = null;
89
109
  this.contentElement = null;
90
110
  this.controlElement = null;
91
- this.rootElementRect = 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
+ }
92
117
  }
93
118
  componentDidLoad() {
94
119
  this.handleMinHeight();
120
+ if (this.supportsPopoverAPI)
121
+ this.containerElement.addEventListener('toggle', this.handlePopoverToggleEvent);
95
122
  if (this.open)
96
123
  this.determinePopDirection();
97
124
  }
@@ -118,7 +145,6 @@ export class Q2Popover {
118
145
  this.handleMinHeight();
119
146
  }
120
147
  async openChanged(open) {
121
- this.setRootElement();
122
148
  this.popoverStateChanged.emit({ open });
123
149
  if (open) {
124
150
  this.addViewportListeners();
@@ -127,7 +153,12 @@ export class Q2Popover {
127
153
  else {
128
154
  this.removeViewportListeners();
129
155
  this.currentDirection = undefined;
130
- this.show = false;
156
+ if (this.mode === 'legacy' || !this.supportsPopoverAPI) {
157
+ this.show = false;
158
+ }
159
+ else {
160
+ this.containerElement.hidePopover();
161
+ }
131
162
  await waitForNextPaint();
132
163
  this.clearCSSProperties();
133
164
  }
@@ -150,18 +181,18 @@ export class Q2Popover {
150
181
  return undefined;
151
182
  }
152
183
  }
153
- get validatedMaxHeight() {
154
- const { maxHeight } = this;
155
- return isNaN(maxHeight) ? undefined : maxHeight;
184
+ get supportsPopoverAPI() {
185
+ return Object.hasOwn(HTMLElement.prototype, 'popover');
156
186
  }
157
187
  addViewportListeners() {
158
188
  var _a;
159
189
  window.addEventListener('resize', this.viewPortOrientationChanged);
160
- // #region remove when Popover API is supported in iOS
161
- window.addEventListener('scroll', this.viewPortChanged, { passive: true, capture: true });
162
- (_a = screen === null || screen === void 0 ? void 0 : screen.orientation) === null || _a === void 0 ? void 0 : _a.addEventListener('change', this.viewPortOrientationChanged);
190
+ visualViewport === null || visualViewport === void 0 ? void 0 : visualViewport.addEventListener('resize', this.viewPortChanged);
191
+ if (isInScrollableContainer(this.hostElement) && !isMobile()) {
192
+ window.addEventListener('scroll', this.viewPortChanged, { passive: true, capture: true });
193
+ }
194
+ (_a = screen === null || screen === void 0 ? void 0 : screen.orientation) === null || _a === void 0 ? void 0 : _a.addEventListener('orientationchange', this.viewPortOrientationChanged);
163
195
  window.addEventListener('orientationchange', this.viewPortOrientationChanged);
164
- // #endregion
165
196
  }
166
197
  clearCSSProperties() {
167
198
  this.containerElement.style.removeProperty('--comp-pop-max-height');
@@ -187,20 +218,23 @@ export class Q2Popover {
187
218
  let maxSpaceAbove;
188
219
  let maxSpaceBelow;
189
220
  if (isModule) {
190
- const { outletOffset = 0, innerHeight = window.innerHeight } = ((_c = window.Tecton) === null || _c === void 0 ? void 0 : _c.platformDimensions) || {};
191
- const distanceToIframeBottom = window.visualViewport.height - controlBottom;
192
- const viewableSpaceBelow = innerHeight - (outletOffset + controlBottom);
221
+ const { outletOffset = 0, innerHeight = window.innerHeight, top: topBarHeight = 0, bottom: bottomBarHeight = 0, } = ((_c = window.Tecton) === null || _c === void 0 ? void 0 : _c.platformDimensions) || {};
222
+ const distanceToIframeBottom = window.innerHeight - controlBottom;
223
+ // controlElement position visually on the page
224
+ const visualControlTop = outletOffset > 0 ? controlTop : controlTop + outletOffset - topBarHeight;
225
+ const visualControlBottom = outletOffset + controlBottom - topBarHeight;
226
+ // visual space around the controlElement
227
+ const viewableSpaceAbove = visualControlTop;
228
+ const viewableSpaceBelow = innerHeight - bottomBarHeight - visualControlBottom;
229
+ // calculate space above and below controlElement
193
230
  const isIframeShorterThanWindow = distanceToIframeBottom < viewableSpaceBelow;
194
- windowHeight = innerHeight;
195
- // If the top of the module is below the top of the window we just use the controlTop
196
- // Otherwise we need to add the outletOffset to the controlTop
197
- maxSpaceAbove = (outletOffset > 0 ? controlTop : controlTop + outletOffset) - displayBuffer;
231
+ maxSpaceAbove = viewableSpaceAbove - displayBuffer;
198
232
  maxSpaceBelow = isIframeShorterThanWindow
199
233
  ? distanceToIframeBottom - displayBuffer
200
234
  : viewableSpaceBelow - displayBuffer;
201
235
  }
202
236
  else {
203
- windowHeight = window.visualViewport.height;
237
+ windowHeight = window.innerHeight;
204
238
  maxSpaceAbove = controlTop - displayBuffer;
205
239
  maxSpaceBelow = windowHeight - controlBottom - displayBuffer;
206
240
  }
@@ -213,17 +247,13 @@ export class Q2Popover {
213
247
  switch (currentOrDetermineDirection) {
214
248
  case 'up':
215
249
  if (shouldUpdateMaxHeight) {
216
- const priorityMaxHeight = this.validatedMaxHeight || maxSpaceAbove;
217
- const maxHeight = Math.min(maxSpaceAbove, priorityMaxHeight);
218
- containerElement.style.setProperty('--comp-pop-max-height', `${maxHeight}px`);
250
+ containerElement.style.setProperty('--comp-pop-max-height', `${maxSpaceAbove}px`);
219
251
  }
220
252
  this.setDirectionAndShow('up');
221
253
  break;
222
254
  case 'down':
223
255
  if (shouldUpdateMaxHeight) {
224
- const priorityMaxHeight = this.validatedMaxHeight || maxSpaceBelow;
225
- const maxHeight = Math.min(maxSpaceBelow, priorityMaxHeight);
226
- containerElement.style.setProperty('--comp-pop-max-height', `${maxHeight}px`);
256
+ containerElement.style.setProperty('--comp-pop-max-height', `${maxSpaceBelow}px`);
227
257
  }
228
258
  this.setDirectionAndShow('down');
229
259
  break;
@@ -234,72 +264,38 @@ export class Q2Popover {
234
264
  removeViewportListeners() {
235
265
  var _a;
236
266
  window.removeEventListener('resize', this.viewPortOrientationChanged);
237
- // #region remove when Popover API is supported in iOS
267
+ visualViewport === null || visualViewport === void 0 ? void 0 : visualViewport.removeEventListener('resize', this.viewPortChanged);
238
268
  window.removeEventListener('scroll', this.viewPortChanged, { capture: true });
239
- (_a = screen === null || screen === void 0 ? void 0 : screen.orientation) === null || _a === void 0 ? void 0 : _a.removeEventListener('change', this.viewPortOrientationChanged);
269
+ (_a = screen === null || screen === void 0 ? void 0 : screen.orientation) === null || _a === void 0 ? void 0 : _a.removeEventListener('orientationchange', this.viewPortOrientationChanged);
240
270
  window.removeEventListener('orientationchange', this.viewPortOrientationChanged);
241
- // #endregion
242
271
  }
243
272
  setDirectionAndShow(direction) {
244
- this.setRootElement();
245
273
  // Due to some runtime inconsistency across devices/browsers we need to add one more check here because the
246
274
  // popover can be closed between the time the popover is opened and the time the direction is determined
247
275
  const isOpen = this.open;
248
276
  if (!isOpen)
249
277
  return;
250
278
  this.currentDirection = direction;
251
- this.show = true;
252
- if (this.mode === 'legacy') {
279
+ if (this.mode === 'legacy' || !this.supportsPopoverAPI) {
280
+ this.show = true;
253
281
  this.setAbsoluteCSSProperties();
254
282
  }
255
283
  else {
256
- this.setFixedCSSProperties();
257
- }
258
- }
259
- setRootElement() {
260
- let currentElement = this.hostElement;
261
- while (currentElement && currentElement !== document.documentElement) {
262
- const computedStyle = window.getComputedStyle(currentElement);
263
- // Check if the element has any styles applied that create a new containg block
264
- if (computedStyle.transform !== 'none' ||
265
- computedStyle.filter !== 'none' ||
266
- computedStyle.perspective !== 'none' ||
267
- computedStyle.containerType !== 'normal' ||
268
- ['transform', 'perspective', 'filter'].includes(computedStyle.willChange) ||
269
- ['layout', 'paint', 'strict', 'content'].includes(computedStyle.contain)) {
270
- this.rootElementRect = currentElement.getBoundingClientRect();
271
- return;
272
- }
273
- const rootNode = currentElement.getRootNode();
274
- const isRootNodeWebComponent = typeof ShadowRoot !== 'undefined' &&
275
- rootNode instanceof ShadowRoot &&
276
- rootNode.host instanceof HTMLElement;
277
- if (isRootNodeWebComponent) {
278
- currentElement = rootNode.host;
279
- }
280
- else {
281
- currentElement = currentElement.parentElement;
282
- }
284
+ this.setPopoverAPICSSProperties();
285
+ this.containerElement.showPopover();
283
286
  }
284
- // Return the document's bounding rect if no element is found
285
- this.rootElementRect = {
286
- top: 0,
287
- bottom: 0,
288
- left: 0,
289
- right: 0,
290
- height: window.visualViewport.height,
291
- width: window.visualViewport.width,
292
- };
293
287
  }
294
288
  // #endregion
295
289
  // #region Render Methods
296
290
  render() {
297
- const containerClasses = ['container', this.currentDirection];
291
+ const containerClasses = ['container', this.currentDirection, this.align];
298
292
  if (this.show)
299
293
  containerClasses.push('show');
294
+ if (this.block)
295
+ containerClasses.push('block');
300
296
  if (this.mode === 'legacy')
301
297
  containerClasses.push('legacy');
302
- return (h("div", { key: '4cc36b0388e9ca27dfe5ce94863600a5e36bbb14', ref: el => (this.containerElement = el), class: containerClasses.join(' '), "test-id": "outerContainer" }, h("div", { key: 'af9a31c2c8c970d9b80639e2901f477277baf9bb', ref: el => (this.contentElement = el), class: "content" }, h("slot", { key: '16a982acc292f434732ab7242ae5c3c15117e56c' }))));
298
+ return (h("div", { key: 'a75180a8cedcf7f65d661719fd165073ddf66eba', ref: el => (this.containerElement = el), class: containerClasses.join(' '), "test-id": "outerContainer", tabIndex: -1, popover: "manual" }, h("div", { key: '8448932d1b716a1a116e3396fa02c5b9dc882456', ref: el => (this.contentElement = el), class: "content" }, h("slot", { key: 'd6b9cd3b58263bc44eb4bf466c0afe793c119187' }))));
303
299
  }
304
300
  static get is() { return "q2-popover"; }
305
301
  static get encapsulation() { return "shadow"; }
@@ -330,7 +326,8 @@ export class Q2Popover {
330
326
  "text": "Aligns the popover to the left or right side of the control element."
331
327
  },
332
328
  "attribute": "align",
333
- "reflect": true
329
+ "reflect": true,
330
+ "defaultValue": "'left'"
334
331
  },
335
332
  "block": {
336
333
  "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 this.containerElement = null;\n this.contentElement = null;\n this.controlElement = null;\n this.rootElementRect = null;\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, { capture: true });\n screen?.orientation?.removeEventListener('change', 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, 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 /**\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 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"]}
@@ -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
  });