q2-tecton-elements 1.67.0 → 1.67.1

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 (256) hide show
  1. package/dist/bundle-report.json +431 -431
  2. package/dist/cjs/click-elsewhere.q2-option-list.q2-popover.entry.cjs.js.map +1 -1
  3. package/dist/cjs/click-elsewhere_3.cjs.entry.js +41 -14
  4. package/dist/cjs/click-elsewhere_3.cjs.entry.js.map +1 -1
  5. package/dist/cjs/q2-action-group_2.cjs.entry.js +2 -2
  6. package/dist/cjs/q2-action-sheet.cjs.entry.js +1 -1
  7. package/dist/cjs/q2-avatar.cjs.entry.js +1 -1
  8. package/dist/cjs/q2-btn.q2-loading.entry.cjs.js.map +1 -1
  9. package/dist/cjs/q2-btn_2.cjs.entry.js +4 -2
  10. package/dist/cjs/q2-btn_2.cjs.entry.js.map +1 -1
  11. package/dist/cjs/q2-calendar.cjs.entry.js +1 -1
  12. package/dist/cjs/q2-card-image.cjs.entry.js +2 -2
  13. package/dist/cjs/q2-carousel-pane.cjs.entry.js +2 -2
  14. package/dist/cjs/q2-carousel.cjs.entry.js +1 -1
  15. package/dist/cjs/q2-chart-area.cjs.entry.js +1 -1
  16. package/dist/cjs/q2-chart-bar.cjs.entry.js +1 -1
  17. package/dist/cjs/q2-chart-donut.cjs.entry.js +1 -1
  18. package/dist/cjs/q2-checkbox-group.cjs.entry.js +1 -1
  19. package/dist/cjs/q2-checkbox_2.cjs.entry.js +1 -1
  20. package/dist/cjs/q2-context.cjs.entry.js +1 -1
  21. package/dist/cjs/q2-currency.cjs.entry.js +1 -1
  22. package/dist/cjs/q2-data-table.cjs.entry.js +1 -1
  23. package/dist/cjs/q2-detail.cjs.entry.js +1 -1
  24. package/dist/cjs/q2-dropdown.cjs.entry.js +1 -1
  25. package/dist/cjs/q2-editable-field.cjs.entry.js +1 -1
  26. package/dist/cjs/q2-example.cjs.entry.js +1 -1
  27. package/dist/cjs/q2-form.cjs.entry.js +1 -1
  28. package/dist/cjs/q2-formatted-text.cjs.entry.js +1 -1
  29. package/dist/cjs/q2-grid-area.cjs.entry.js +1 -1
  30. package/dist/cjs/q2-grid.cjs.entry.js +1 -1
  31. package/dist/cjs/q2-input.cjs.entry.js +1 -1
  32. package/dist/cjs/q2-item.cjs.entry.js +1 -1
  33. package/dist/cjs/q2-legend.cjs.entry.js +1 -1
  34. package/dist/cjs/q2-link_2.cjs.entry.js +1 -1
  35. package/dist/cjs/q2-message.cjs.entry.js +1 -1
  36. package/dist/cjs/q2-meter.cjs.entry.js +1 -1
  37. package/dist/cjs/q2-modal.cjs.entry.js +1 -1
  38. package/dist/cjs/q2-month-picker.cjs.entry.js +2 -2
  39. package/dist/cjs/q2-mutation-observer.cjs.entry.js +1 -1
  40. package/dist/cjs/q2-optgroup.cjs.entry.js +1 -1
  41. package/dist/cjs/q2-pagination.cjs.entry.js +3 -3
  42. package/dist/cjs/q2-pill.cjs.entry.js +1 -1
  43. package/dist/cjs/q2-radio-group.cjs.entry.js +1 -1
  44. package/dist/cjs/q2-radio.cjs.entry.js +1 -1
  45. package/dist/cjs/q2-relative-time.cjs.entry.js +1 -1
  46. package/dist/cjs/q2-section.cjs.entry.js +2 -2
  47. package/dist/cjs/q2-select.cjs.entry.js +1 -1
  48. package/dist/cjs/q2-stepper-pane.cjs.entry.js +1 -1
  49. package/dist/cjs/q2-stepper.cjs.entry.js +1 -1
  50. package/dist/cjs/q2-textarea.cjs.entry.js +1 -1
  51. package/dist/collection/collection-manifest.json +3 -3
  52. package/dist/collection/components/q2-action-group/q2-action-group.js +1 -1
  53. package/dist/collection/components/q2-action-sheet/q2-action-sheet.js +1 -1
  54. package/dist/collection/components/q2-avatar/q2-avatar.js +1 -1
  55. package/dist/collection/components/q2-btn/q2-btn.js +4 -2
  56. package/dist/collection/components/q2-btn/q2-btn.js.map +1 -1
  57. package/dist/collection/components/q2-calendar/q2-calendar.js +1 -1
  58. package/dist/collection/components/q2-calendar/q2-month-picker.js +2 -2
  59. package/dist/collection/components/q2-card-image/q2-card-image.js +2 -2
  60. package/dist/collection/components/q2-carousel/q2-carousel.js +1 -1
  61. package/dist/collection/components/q2-carousel-pane/q2-carousel-pane.js +2 -2
  62. package/dist/collection/components/q2-chart-area/q2-chart-area.js +1 -1
  63. package/dist/collection/components/q2-chart-bar/q2-chart-bar.js +1 -1
  64. package/dist/collection/components/q2-chart-donut/q2-chart-donut.js +1 -1
  65. package/dist/collection/components/q2-checkbox/q2-checkbox.js +1 -1
  66. package/dist/collection/components/q2-checkbox-group/q2-checkbox-group.js +1 -1
  67. package/dist/collection/components/q2-context/q2-context.js +1 -1
  68. package/dist/collection/components/q2-currency/q2-currency.js +1 -1
  69. package/dist/collection/components/q2-data-table/q2-data-table.js +1 -1
  70. package/dist/collection/components/q2-detail/q2-detail.js +1 -1
  71. package/dist/collection/components/q2-dropdown/q2-dropdown.js +1 -1
  72. package/dist/collection/components/q2-editable-field/q2-editable-field.js +2 -2
  73. package/dist/collection/components/q2-example/q2-example.js +1 -1
  74. package/dist/collection/components/q2-form/q2-form.js +1 -1
  75. package/dist/collection/components/q2-formatted-text/q2-formatted-text.js +1 -1
  76. package/dist/collection/components/q2-grid/q2-grid.js +31 -31
  77. package/dist/collection/components/q2-grid-area/q2-grid-area.js +43 -43
  78. package/dist/collection/components/q2-input/q2-input.js +3 -3
  79. package/dist/collection/components/q2-item/q2-item.js +1 -1
  80. package/dist/collection/components/q2-legend/q2-legend.js +1 -1
  81. package/dist/collection/components/q2-list/q2-list.js +1 -1
  82. package/dist/collection/components/q2-message/q2-message.js +1 -1
  83. package/dist/collection/components/q2-meter/q2-meter.js +1 -1
  84. package/dist/collection/components/q2-modal/q2-modal.js +1 -1
  85. package/dist/collection/components/q2-mutation-observer/q2-mutation-observer.js +1 -1
  86. package/dist/collection/components/q2-optgroup/q2-optgroup.js +1 -1
  87. package/dist/collection/components/q2-option-list/q2-option-list.js +6 -6
  88. package/dist/collection/components/q2-pagination/q2-pagination.js +3 -3
  89. package/dist/collection/components/q2-pill/q2-pill.js +1 -1
  90. package/dist/collection/components/q2-popover/q2-popover.js +40 -13
  91. package/dist/collection/components/q2-popover/q2-popover.js.map +1 -1
  92. package/dist/collection/components/q2-radio/q2-radio.js +1 -1
  93. package/dist/collection/components/q2-radio-group/q2-radio-group.js +1 -1
  94. package/dist/collection/components/q2-relative-time/q2-relative-time.js +1 -1
  95. package/dist/collection/components/q2-resize-observer/q2-resize-observer.js +1 -1
  96. package/dist/collection/components/q2-section/q2-section.js +2 -2
  97. package/dist/collection/components/q2-select/q2-select.js +1 -1
  98. package/dist/collection/components/q2-stepper/q2-stepper.js +1 -1
  99. package/dist/collection/components/q2-stepper-pane/q2-stepper-pane.js +1 -1
  100. package/dist/collection/components/q2-textarea/q2-textarea.js +1 -1
  101. package/dist/components/q2-action-group2.js +1 -1
  102. package/dist/components/q2-action-sheet.js +1 -1
  103. package/dist/components/q2-avatar2.js +1 -1
  104. package/dist/components/q2-btn2.js +4 -2
  105. package/dist/components/q2-btn2.js.map +1 -1
  106. package/dist/components/q2-calendar.js +1 -1
  107. package/dist/components/q2-card-image.js +2 -2
  108. package/dist/components/q2-carousel-pane.js +2 -2
  109. package/dist/components/q2-carousel.js +1 -1
  110. package/dist/components/q2-chart-area.js +1 -1
  111. package/dist/components/q2-chart-bar.js +1 -1
  112. package/dist/components/q2-chart-donut.js +1 -1
  113. package/dist/components/q2-checkbox-group.js +1 -1
  114. package/dist/components/q2-checkbox2.js +1 -1
  115. package/dist/components/q2-context.js +1 -1
  116. package/dist/components/q2-currency.js +1 -1
  117. package/dist/components/q2-data-table.js +1 -1
  118. package/dist/components/q2-detail.js +1 -1
  119. package/dist/components/q2-dropdown.js +1 -1
  120. package/dist/components/q2-editable-field.js +1 -1
  121. package/dist/components/q2-example.js +1 -1
  122. package/dist/components/q2-form.js +1 -1
  123. package/dist/components/q2-formatted-text.js +1 -1
  124. package/dist/components/q2-grid-area.js +1 -1
  125. package/dist/components/q2-grid.js +1 -1
  126. package/dist/components/q2-input2.js +1 -1
  127. package/dist/components/q2-item2.js +1 -1
  128. package/dist/components/q2-legend2.js +1 -1
  129. package/dist/components/q2-list2.js +1 -1
  130. package/dist/components/q2-message2.js +1 -1
  131. package/dist/components/q2-meter.js +1 -1
  132. package/dist/components/q2-modal.js +1 -1
  133. package/dist/components/q2-month-picker.js +2 -2
  134. package/dist/components/q2-mutation-observer.js +1 -1
  135. package/dist/components/q2-optgroup2.js +1 -1
  136. package/dist/components/q2-option-list2.js +1 -1
  137. package/dist/components/q2-pagination.js +3 -3
  138. package/dist/components/q2-pill.js +1 -1
  139. package/dist/components/q2-popover2.js +40 -13
  140. package/dist/components/q2-popover2.js.map +1 -1
  141. package/dist/components/q2-radio-group.js +1 -1
  142. package/dist/components/q2-radio.js +1 -1
  143. package/dist/components/q2-relative-time.js +1 -1
  144. package/dist/components/q2-resize-observer2.js +1 -1
  145. package/dist/components/q2-section.js +2 -2
  146. package/dist/components/q2-select2.js +1 -1
  147. package/dist/components/q2-stepper-pane.js +1 -1
  148. package/dist/components/q2-stepper.js +1 -1
  149. package/dist/components/q2-textarea.js +1 -1
  150. package/dist/esm/click-elsewhere.q2-option-list.q2-popover.entry.js.map +1 -1
  151. package/dist/esm/click-elsewhere_3.entry.js +41 -14
  152. package/dist/esm/click-elsewhere_3.entry.js.map +1 -1
  153. package/dist/esm/q2-action-group_2.entry.js +2 -2
  154. package/dist/esm/q2-action-sheet.entry.js +1 -1
  155. package/dist/esm/q2-avatar.entry.js +1 -1
  156. package/dist/esm/q2-btn.q2-loading.entry.js.map +1 -1
  157. package/dist/esm/q2-btn_2.entry.js +4 -2
  158. package/dist/esm/q2-btn_2.entry.js.map +1 -1
  159. package/dist/esm/q2-calendar.entry.js +1 -1
  160. package/dist/esm/q2-card-image.entry.js +2 -2
  161. package/dist/esm/q2-carousel-pane.entry.js +2 -2
  162. package/dist/esm/q2-carousel.entry.js +1 -1
  163. package/dist/esm/q2-chart-area.entry.js +1 -1
  164. package/dist/esm/q2-chart-bar.entry.js +1 -1
  165. package/dist/esm/q2-chart-donut.entry.js +1 -1
  166. package/dist/esm/q2-checkbox-group.entry.js +1 -1
  167. package/dist/esm/q2-checkbox_2.entry.js +1 -1
  168. package/dist/esm/q2-context.entry.js +1 -1
  169. package/dist/esm/q2-currency.entry.js +1 -1
  170. package/dist/esm/q2-data-table.entry.js +1 -1
  171. package/dist/esm/q2-detail.entry.js +1 -1
  172. package/dist/esm/q2-dropdown.entry.js +1 -1
  173. package/dist/esm/q2-editable-field.entry.js +1 -1
  174. package/dist/esm/q2-example.entry.js +1 -1
  175. package/dist/esm/q2-form.entry.js +1 -1
  176. package/dist/esm/q2-formatted-text.entry.js +1 -1
  177. package/dist/esm/q2-grid-area.entry.js +1 -1
  178. package/dist/esm/q2-grid.entry.js +1 -1
  179. package/dist/esm/q2-input.entry.js +1 -1
  180. package/dist/esm/q2-item.entry.js +1 -1
  181. package/dist/esm/q2-legend.entry.js +1 -1
  182. package/dist/esm/q2-link_2.entry.js +1 -1
  183. package/dist/esm/q2-message.entry.js +1 -1
  184. package/dist/esm/q2-meter.entry.js +1 -1
  185. package/dist/esm/q2-modal.entry.js +1 -1
  186. package/dist/esm/q2-month-picker.entry.js +2 -2
  187. package/dist/esm/q2-mutation-observer.entry.js +1 -1
  188. package/dist/esm/q2-optgroup.entry.js +1 -1
  189. package/dist/esm/q2-pagination.entry.js +3 -3
  190. package/dist/esm/q2-pill.entry.js +1 -1
  191. package/dist/esm/q2-radio-group.entry.js +1 -1
  192. package/dist/esm/q2-radio.entry.js +1 -1
  193. package/dist/esm/q2-relative-time.entry.js +1 -1
  194. package/dist/esm/q2-section.entry.js +2 -2
  195. package/dist/esm/q2-select.entry.js +1 -1
  196. package/dist/esm/q2-stepper-pane.entry.js +1 -1
  197. package/dist/esm/q2-stepper.entry.js +1 -1
  198. package/dist/esm/q2-textarea.entry.js +1 -1
  199. package/dist/q2-tecton-elements/click-elsewhere.q2-option-list.q2-popover.entry.esm.js.map +1 -1
  200. package/dist/q2-tecton-elements/click-elsewhere_3.entry.js +212 -193
  201. package/dist/q2-tecton-elements/click-elsewhere_3.entry.js.map +1 -1
  202. package/dist/q2-tecton-elements/q2-action-group_2.entry.js +4 -4
  203. package/dist/q2-tecton-elements/q2-action-sheet.entry.js +8 -8
  204. package/dist/q2-tecton-elements/q2-avatar.entry.js +8 -8
  205. package/dist/q2-tecton-elements/q2-btn.q2-loading.entry.esm.js.map +1 -1
  206. package/dist/q2-tecton-elements/q2-btn_2.entry.js +4 -2
  207. package/dist/q2-tecton-elements/q2-btn_2.entry.js.map +1 -1
  208. package/dist/q2-tecton-elements/q2-calendar.entry.js +2 -2
  209. package/dist/q2-tecton-elements/q2-card-image.entry.js +2 -2
  210. package/dist/q2-tecton-elements/q2-carousel-pane.entry.js +3 -3
  211. package/dist/q2-tecton-elements/q2-carousel.entry.js +1 -1
  212. package/dist/q2-tecton-elements/q2-chart-area.entry.js +2 -2
  213. package/dist/q2-tecton-elements/q2-chart-bar.entry.js +2 -2
  214. package/dist/q2-tecton-elements/q2-chart-donut.entry.js +14 -14
  215. package/dist/q2-tecton-elements/q2-checkbox-group.entry.js +6 -6
  216. package/dist/q2-tecton-elements/q2-checkbox_2.entry.js +8 -8
  217. package/dist/q2-tecton-elements/q2-context.entry.js +15 -15
  218. package/dist/q2-tecton-elements/q2-currency.entry.js +11 -11
  219. package/dist/q2-tecton-elements/q2-data-table.entry.js +3 -3
  220. package/dist/q2-tecton-elements/q2-detail.entry.js +3 -3
  221. package/dist/q2-tecton-elements/q2-dropdown.entry.js +79 -79
  222. package/dist/q2-tecton-elements/q2-editable-field.entry.js +1 -1
  223. package/dist/q2-tecton-elements/q2-example.entry.js +1 -1
  224. package/dist/q2-tecton-elements/q2-form.entry.js +2 -2
  225. package/dist/q2-tecton-elements/q2-formatted-text.entry.js +2 -2
  226. package/dist/q2-tecton-elements/q2-grid-area.entry.js +2 -2
  227. package/dist/q2-tecton-elements/q2-grid.entry.js +3 -3
  228. package/dist/q2-tecton-elements/q2-input.entry.js +3 -3
  229. package/dist/q2-tecton-elements/q2-item.entry.js +21 -21
  230. package/dist/q2-tecton-elements/q2-legend.entry.js +2 -2
  231. package/dist/q2-tecton-elements/q2-link_2.entry.js +6 -6
  232. package/dist/q2-tecton-elements/q2-message.entry.js +6 -6
  233. package/dist/q2-tecton-elements/q2-meter.entry.js +7 -7
  234. package/dist/q2-tecton-elements/q2-modal.entry.js +50 -50
  235. package/dist/q2-tecton-elements/q2-month-picker.entry.js +66 -66
  236. package/dist/q2-tecton-elements/q2-mutation-observer.entry.js +1 -1
  237. package/dist/q2-tecton-elements/q2-optgroup.entry.js +4 -4
  238. package/dist/q2-tecton-elements/q2-pagination.entry.js +19 -19
  239. package/dist/q2-tecton-elements/q2-pill.entry.js +36 -36
  240. package/dist/q2-tecton-elements/q2-radio-group.entry.js +6 -6
  241. package/dist/q2-tecton-elements/q2-radio.entry.js +8 -8
  242. package/dist/q2-tecton-elements/q2-relative-time.entry.js +1 -1
  243. package/dist/q2-tecton-elements/q2-section.entry.js +22 -22
  244. package/dist/q2-tecton-elements/q2-select.entry.js +1 -1
  245. package/dist/q2-tecton-elements/q2-stepper-pane.entry.js +11 -11
  246. package/dist/q2-tecton-elements/q2-stepper.entry.js +25 -25
  247. package/dist/q2-tecton-elements/q2-textarea.entry.js +2 -2
  248. package/dist/types/components/q2-popover/q2-popover.d.ts +1 -0
  249. package/dist/types/components/q2-stepper-vertical/q2-stepper-vertical.d.ts +1 -1
  250. package/package.json +71 -69
  251. /package/dist/types/{Users/kvanhouten/Documents/Work/tecton_extra → builds/q2e/development/tecton/tecton}/packages/q2-tecton-elements/.stencil/jest.e2e-coverage.d.ts +0 -0
  252. /package/dist/types/{Users/kvanhouten/Documents/Work/tecton_extra → builds/q2e/development/tecton/tecton}/packages/q2-tecton-elements/.stencil/jest.setup.d.ts +0 -0
  253. /package/dist/types/{Users/kvanhouten/Documents/Work/tecton_extra → builds/q2e/development/tecton/tecton}/packages/q2-tecton-elements/.stencil/scripts/docs-generator/index.d.ts +0 -0
  254. /package/dist/types/{Users/kvanhouten/Documents/Work/tecton_extra → builds/q2e/development/tecton/tecton}/packages/q2-tecton-elements/.stencil/scripts/docs-generator/markdown-generator.d.ts +0 -0
  255. /package/dist/types/{Users/kvanhouten/Documents/Work/tecton_extra → builds/q2e/development/tecton/tecton}/packages/q2-tecton-elements/.stencil/scripts/docs-generator/tag-handlers.d.ts +0 -0
  256. /package/dist/types/{Users/kvanhouten/Documents/Work/tecton_extra → builds/q2e/development/tecton/tecton}/packages/q2-tecton-elements/.stencil/scripts/docs-generator/types.d.ts +0 -0
@@ -1 +1 @@
1
- {"version":3,"names":["ClickElsewhere","constructor","hostRef","this","isCurrentlyFocused","mouseEventList","mouseHandler","event","shadowContains","findActiveElement","aboutToBeFocused","shadowEventTarget","originatesInSlots","target","mirrorEmit","windowBlurHandler","connectedCallback","forEach","eventName","document","addEventListener","window","disconnectedCallback","removeEventListener","componentWillLoad","workingElement","activeElement","shadowRoot","slots","hostElement","querySelectorAll","currentSlot","Array","from","lightNodes","assignedNodes","childNodes","currentNode","contains","child","parentNode","host","composedPath","sanitizeRegexString","regexString","replace","q2OptionListCss","Q2OptionList","keyStore","queue","lastPressedAt","Date","scheduledAfterRender","label","loc","selectedOptions","type","clickHandler","option","closest","selectOption","multiple","popoverState","emit","open","action","externalKeydownHandler","key","modifierOnlyKeys","includes","stopPropagation","activeIndex","customSearch","allOptions","nextIndex","searchString","searchOptions","openDropdownWithActiveElement","setDefaultActiveElement","nextPaint","preventDefault","length","getDefaultActiveIndex","getNextVisibleIndex","Math","max","min","noSelect","setActiveElement","match","focusoutHandler","relatedTarget","isInQ2OptionList","isInLightDom","internalKeydownHandler","allVisibleOptions","shiftKey","newOption","find","element","active","disabled","once","firstVisibleOption","isFirstVisibleOptionActive","undefined","adjustActiveOptionAndScroll","lastVisibleOption","isLastVisibleOptionActive","searchAndFocus","keyValue","shouldSelect","reorder","pivotIndex","list","map","index","slice","buildQueue","now","getTime","push","searchIndex","keyStr","join","sanitizedKeyStr","v","display","RegExp","setFocus","matched","hasValidAncestor","hasOptions","componentDidLoad","overrideFocus","checkOptions","selectedOptionsUpdated","ready","componentDidRender","fn","handleClick","delegateFocus","isEventFromElement","setActiveOption","setFocusedOption","getContents","allContents","getOptions","handleExternalKeydown","updateMultipleOptionAttrs","updateSingleOptionAttrs","showSelectedUpdated","showSelected","_multiSelectHidden","selected","rootSlot","getRootSlot","acceptedTags","Set","filter","has","tagName","contents","extractOptions","elements","reduce","acc","separator","children","hidden","disabledGroup","numToAdd","scrollToActiveOption","optionRole","role","focusSelectedSibling","hasNoSiblings","selectedOptionVisibleIndex","indexOf","nextVisibleSiblingIndex","nextVisibleSibling","nextSiblingIndex","firstSelected","findIndex","firstEnabled","direction","activeOption","visibleActiveOptionIndex","nextVisibleOptionIndex","nextVisibleOption","slot","querySelector","assignedElements","_a","hasAnotherSlot","waitForNextPaint","resetTimer","searchStringTimer","clearTimeout","setTimeout","scrollX","scrollY","scrollIntoView","block","scrollTo","selectedOption","selectedValue","value","displayValue","innerText","trim","valueObject","values","isAlreadySelected","elementIndex","isOptionVisible","isVisible","focus","preventScroll","selectedValues","render","h","Host","class","ref","el","contentElement","onFocusout","onKeyDown","onClick","q2PopoverCss","Q2Popover","displayBuffer","orientationChanged","animationState","currentDirection","show","align","animated","mode","handleMinHeight","minHeight","handleDeprecationWarning","handlePopoverToggleEvent","newState","setAbsoluteCSSProperties","async","controlElement","containerElement","style","setProperty","controlStyle","getComputedStyle","controlSize","parseInt","height","borderTopWidth","borderBottomWidth","setPopoverAPICSSProperties","isModule","top","controlTop","bottom","controlBottom","left","controlLeft","right","controlRight","_b","getBoundingClientRect","call","popoverLeft","popoverRight","_c","visualViewport","width","offsetWidth","isScrollableIframe","isInScrollableContainer","innerHeight","viewPortChanged","determinePopDirection","viewPortOrientationChanged","removeViewportListeners","supportsPopoverAPI","console","warn","popoverStateHandler","detail","scrollContainerTo","options","toggle","minHeightProvided","openChanged","addViewportListeners","Promise","resolve","handleAnimationEnd","hidePopover","clearCSSProperties","isIframe","hasPlatformDimensions","Object","keys","Tecton","platformDimensions","providedDirection","hasOwn","HTMLElement","prototype","validatedMaxHeight","maxHeight","isNaN","isMobile","passive","capture","screen","orientation","removeProperty","windowHeight","maxSpaceAbove","maxSpaceBelow","outletOffset","topBarHeight","bottomBarHeight","distanceToIframeBottom","visualControlTop","visualControlBottom","viewableSpaceAbove","viewableSpaceBelow","isIframeShorterThanWindow","directionWithMostSpace","shouldUpdateMaxHeight","getPropertyValue","currentOrDetermineDirection","priorityMaxHeight","setDirectionAndShow","isOpen","showPopover","containerClasses","tabIndex","popover"],"sources":["src/components/click-elsewhere/click-elsewhere.tsx","src/utils/sanitize-regex-string.ts","src/components/q2-option-list/q2-option-list.scss?tag=q2-option-list&encapsulation=shadow","src/components/q2-option-list/q2-option-list.tsx","src/components/q2-popover/q2-popover.scss?tag=q2-popover&encapsulation=shadow","src/components/q2-popover/q2-popover.tsx"],"sourcesContent":["import { Component, ComponentInterface, Element, Event, EventEmitter } from '@stencil/core';\nimport mirrorEmit from '@/utils/mirror-emit';\n\n@Component({\n tag: 'click-elsewhere',\n shadow: false,\n})\nexport class ClickElsewhere implements ComponentInterface {\n // #region Own Properties\n\n isCurrentlyFocused: boolean = false;\n /**\n * Listens for mouse and window events that happen outside this click-elsewhere element so we can close popovers when users click outside them\n */\n mouseEventList: string[] = ['mousedown', 'dragstart', 'touchstart'];\n\n // #endregion\n // #region Host HTML Element\n\n @Element()\n hostElement: HTMLElement;\n\n // #endregion\n // #region Events\n\n /**\n * Emitted when the user clicks outside the element\n * @deprecated Use 'tctChange' instead\n */\n @Event()\n change: EventEmitter;\n\n /**\n * Emitted when the user clicks outside the element\n */\n @Event()\n tctChange: EventEmitter;\n\n // #endregion\n // #region Component Lifecycle Events\n\n /* tslint:enable:no-empty */\n\n connectedCallback() {\n this.mouseEventList.forEach((eventName: string) => {\n document.addEventListener(eventName, this.mouseHandler);\n });\n window.addEventListener('blur', this.windowBlurHandler);\n }\n\n disconnectedCallback() {\n this.mouseEventList.forEach((eventName: string) => {\n document.removeEventListener(eventName, this.mouseHandler);\n });\n window.removeEventListener('blur', this.windowBlurHandler);\n }\n\n /* TODO: Stencil/Rollup is having issues compiling without this here. Will try to remove in future Stencil upgrade. */\n /* tslint:disable:no-empty */\n componentWillLoad() {}\n\n // #endregion\n // #region Local Methods\n\n findActiveElement(): Element | null {\n let workingElement = document.activeElement!;\n while (true) {\n if (!workingElement || !workingElement.shadowRoot) {\n return workingElement;\n }\n workingElement = workingElement.shadowRoot.activeElement;\n }\n }\n\n mouseHandler = (event: Event): void => {\n const isCurrentlyFocused = this.shadowContains(this.findActiveElement());\n const aboutToBeFocused =\n this.shadowContains(this.shadowEventTarget(event)) || this.originatesInSlots(event.target as Element);\n\n if (!aboutToBeFocused && (this.isCurrentlyFocused || isCurrentlyFocused)) {\n this.isCurrentlyFocused = false;\n mirrorEmit(this, ['change', 'tctChange']);\n return;\n }\n this.isCurrentlyFocused = aboutToBeFocused || isCurrentlyFocused;\n };\n\n originatesInSlots(target: Element): boolean {\n const slots = this.hostElement.querySelectorAll('slot');\n for (const currentSlot of Array.from(slots)) {\n const lightNodes =\n (currentSlot && currentSlot.assignedNodes && currentSlot.assignedNodes()) ||\n this.hostElement.childNodes;\n\n for (const currentNode of Array.from(lightNodes)) {\n if (currentNode.contains(target)) {\n return true;\n }\n }\n }\n return false;\n }\n\n shadowContains(child: any): boolean {\n /**\n * shadow-dom enabled version of Node.contains()\n */\n\n while (true) {\n if (child === this.hostElement) {\n return true;\n }\n if (!child) {\n return false;\n }\n child = child.parentNode || child.host;\n }\n }\n\n shadowEventTarget(event: any): Element {\n return event.composedPath()[0] || event.target;\n }\n\n windowBlurHandler = (): void => {\n this.isCurrentlyFocused = false;\n mirrorEmit(this, ['change', 'tctChange']);\n };\n}\n","export default function sanitizeRegexString(regexString: string) {\n return regexString.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&');\n}\n","@import '../../styles/host.scss';\n@import '../../styles/functions';\n\n:host {\n position: relative;\n width: 100%;\n display: block;\n line-height: var-list(var-prefixer(option-list-line-height),--app-line-height, 1.428571429em);\n}\n\n.content {\n text-align: start;\n\n :host([is-sizeable]) & {\n display: block;\n height: auto;\n }\n}\n","import { hasValidAncestor } from '@/utils/component';\nimport sanitizeRegexString from '@/utils/sanitize-regex-string';\nimport {\n Component,\n Prop,\n h,\n Event,\n State,\n Element,\n ComponentInterface,\n Host,\n EventEmitter,\n Method,\n Watch,\n Listen,\n} from '@stencil/core';\nimport { isEventFromElement, isVisible, loc, nextPaint, overrideFocus, waitForNextPaint } from 'src/utils';\nimport mirrorEmit from '@/utils/mirror-emit';\n\nexport interface OptionValue {\n value: string;\n display?: string;\n}\n\nexport type ValidOptionElements = HTMLQ2OptionElement | HTMLQ2DropdownItemElement;\n\n/**\n * @name Option List\n * @category Forms\n * @summary Use internally by Select and Dropdown for rendering searchable option lists.\n */\n@Component({ tag: 'q2-option-list', shadow: true, styleUrl: 'q2-option-list.scss' })\nexport class Q2OptionList implements ComponentInterface {\n // #region Own Properties\n\n activeIndex: number;\n contentElement: HTMLElement;\n keyStore: {\n queue: string[];\n lastPressedAt: Date;\n } = {\n queue: [],\n lastPressedAt: new Date(),\n };\n pivotIndex: number;\n scheduledAfterRender: (() => void)[] = [];\n searchString: string;\n searchStringTimer: number;\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 hasOptions: boolean;\n\n // #endregion\n // #region Public Property API\n\n @Prop({ reflect: true })\n align: 'left' | 'right';\n\n /** Indicates a custom search is being implemented for the option list. */\n @Prop({ reflect: true })\n customSearch: boolean;\n\n /** Disables the option list. */\n @Prop({ reflect: true })\n disabled: boolean;\n\n /** Determines the label that is applied to the option list for accessibility purposes. */\n @Prop()\n label: string = loc('tecton.element.optionList.label');\n\n /**\n * Enables the multi-select ability for the option list.\n * @info\n * Only applicable when options are provided.\n */\n @Prop({ reflect: true })\n multiple: boolean;\n\n /** Disables the logic that handles selecting and focusing an option in the option list. */\n @Prop({ reflect: true })\n noSelect: boolean;\n\n /** A list of the selected options on the element. */\n @Prop({ mutable: true })\n selectedOptions: OptionValue[] = [];\n\n /** Applies focus to the selected option. */\n @Prop({ reflect: true, mutable: true })\n showSelected: boolean;\n\n /** Translates to the role of the option list */\n @Prop()\n type: 'menu' | 'listbox' = 'listbox';\n\n // #endregion\n // #region Events\n\n /**\n * Emitted when an option is selected or deselected.\n *\n * When the multi-select is enabled, the `value` property will be `undefined` and the `selectedOptions` property\n * will contain the selected option values.\n * @deprecated Use 'tctChange' instead\n */\n @Event()\n change: EventEmitter<{ value: string; values: OptionValue[] }>;\n\n /**\n * Emitted to indicate the intended state of the popover.\n * @private\n */\n @Event()\n popoverState: EventEmitter<{ open: boolean; action: 'close' | 'select' | 'open' }>;\n\n /**\n * Emitted when the component has finished rendering.\n * @private\n */\n @Event({ bubbles: false })\n ready: EventEmitter<undefined>;\n\n /**\n * Emitted when an option is selected or deselected.\n *\n * When the multi-select is enabled, the `value` property will be `undefined` and the `selectedOptions` property\n * will contain the selected option values.\n */\n @Event()\n tctChange: EventEmitter<{ value: string; values: OptionValue[] }>;\n\n // #endregion\n // #region Component Lifecycle Events\n\n componentWillLoad() {\n hasValidAncestor(this.hostElement, 'q2-select, q2-dropdown, q2-pill, q2-popover, q2-action-sheet');\n this.hasOptions = !!this.hostElement.querySelectorAll(\n 'q2-option:not([separator]):not([separator=true]), q2-dropdown-item:not([separator]):not([separator=true])'\n ).length;\n }\n\n componentDidLoad(): void {\n overrideFocus(this.hostElement);\n this.checkOptions();\n this.selectedOptionsUpdated();\n this.ready.emit();\n }\n\n componentDidRender() {\n this.scheduledAfterRender.forEach(fn => fn());\n this.scheduledAfterRender = [];\n }\n\n // #endregion\n // #region Listeners\n\n @Listen('click')\n handleClick(event: MouseEvent) {\n event.stopPropagation();\n }\n\n @Listen('focus')\n delegateFocus(event: FocusEvent) {\n if (!isEventFromElement(event, this.hostElement)) return;\n this.popoverState.emit({ open: true, action: 'open' });\n const { activeIndex } = this;\n if (typeof activeIndex === 'number' && activeIndex > -1) {\n this.setActiveOption();\n this.setFocusedOption();\n } else {\n this.setDefaultActiveElement();\n }\n }\n\n // #endregion\n // #region Public Methods API\n\n @Method()\n async getContents(): Promise<(HTMLQ2OptgroupElement | ValidOptionElements)[]> {\n return this.allContents;\n }\n\n @Method()\n async getOptions(): Promise<ValidOptionElements[]> {\n return this.allOptions;\n }\n\n @Method()\n async handleExternalKeydown(event: KeyboardEvent) {\n this.externalKeydownHandler(event);\n }\n\n @Method()\n async setActiveElement(index: number) {\n this.activeIndex = index;\n this.setActiveOption();\n this.setFocusedOption();\n }\n\n @Method()\n async setDefaultActiveElement() {\n this.activeIndex = this.getDefaultActiveIndex();\n this.setActiveOption();\n this.setFocusedOption();\n }\n\n // #endregion\n // #region Watchers\n\n @Watch('selectedOptions')\n selectedOptionsUpdated() {\n if (this.multiple) {\n this.updateMultipleOptionAttrs();\n } else {\n this.updateSingleOptionAttrs();\n }\n }\n\n @Watch('showSelected')\n showSelectedUpdated(showSelected: boolean) {\n if (showSelected && this.selectedOptions.length === 0) {\n this.showSelected = false;\n return;\n }\n this.allOptions.forEach(option => {\n if (!('_multiSelectHidden' in option)) return;\n option._multiSelectHidden = showSelected ? !option.selected : false;\n });\n }\n\n // #endregion\n // #region Local Methods\n\n get allContents(): (HTMLQ2OptgroupElement | ValidOptionElements)[] {\n const rootSlot = this.getRootSlot(this.hostElement);\n const acceptedTags = new Set(['Q2-OPTGROUP', 'Q2-OPTION', 'Q2-DROPDOWN-ITEM']);\n return rootSlot.filter(element => acceptedTags.has(element.tagName)) as (\n | HTMLQ2OptgroupElement\n | ValidOptionElements\n )[];\n }\n\n get allOptions(): ValidOptionElements[] {\n const contents = this.allContents;\n\n const extractOptions = (\n elements: (HTMLQ2OptgroupElement | ValidOptionElements | Element)[]\n ): ValidOptionElements[] => {\n return elements.reduce((acc, element) => {\n if (element.tagName === 'Q2-OPTION' || element.tagName === 'Q2-DROPDOWN-ITEM') {\n return (element as ValidOptionElements).separator ? acc : [...acc, element];\n } else if (element.tagName === 'Q2-OPTGROUP') {\n return [...acc, ...extractOptions(Array.from(element.children))];\n } else {\n return acc;\n }\n }, []);\n };\n\n return extractOptions(contents);\n }\n\n get allVisibleOptions(): ValidOptionElements[] {\n return this.allOptions.filter(\n option =>\n !option.hidden &&\n (!('_multiSelectHidden' in option) || !option._multiSelectHidden) &&\n !option.disabled &&\n (!('disabledGroup' in option) || !option.disabledGroup)\n );\n }\n\n adjustActiveOptionAndScroll(numToAdd: number) {\n this.activeIndex += numToAdd;\n this.setActiveOption();\n this.setFocusedOption();\n this.scrollToActiveOption();\n }\n\n checkOptions() {\n const { type } = this;\n if (!type) return;\n const optionRole = type === 'menu' ? 'menuitem' : 'option';\n this.allOptions.forEach(option => {\n option.role = optionRole;\n });\n }\n\n clickHandler = (event: Event) => {\n const target = event.target as ValidOptionElements;\n const option = target.closest<ValidOptionElements>(\n 'q2-option:not([separator]):not([separator=true]), q2-dropdown-item:not([separator]):not([separator=true])'\n );\n this.selectOption(option);\n if (this.multiple) return;\n this.popoverState.emit({ open: false, action: 'select' });\n };\n\n /* tslint:disable:cyclomatic-complexity */\n externalKeydownHandler = (event: KeyboardEvent) => {\n const { key } = event;\n\n // Allow modifier-only keys to propagate without being handled\n const modifierOnlyKeys = ['Shift', 'Control', 'Alt', 'Meta'];\n if (modifierOnlyKeys.includes(key)) return;\n\n event.stopPropagation();\n const { activeIndex, customSearch, allOptions } = this;\n\n let nextIndex;\n switch (key) {\n case ' ':\n if (this.searchString) {\n if (customSearch) break;\n\n this.searchOptions(key, true);\n break;\n } else if (this.type === 'menu') {\n this.activeIndex = 0;\n this.openDropdownWithActiveElement(0);\n } else {\n this.setDefaultActiveElement();\n nextPaint(() => this.popoverState.emit({ open: true, action: 'open' }));\n }\n break;\n\n case 'Enter':\n if (this.type === 'menu') {\n this.activeIndex = 0;\n this.openDropdownWithActiveElement(0);\n } else {\n this.setDefaultActiveElement();\n nextPaint(() => this.popoverState.emit({ open: true, action: 'open' }));\n }\n break;\n\n case 'ArrowUp':\n event.preventDefault();\n nextIndex = !!this.selectedOptions.length ? this.getDefaultActiveIndex() : this.getNextVisibleIndex(-1);\n if (nextIndex === -1) break;\n this.openDropdownWithActiveElement(nextIndex);\n break;\n\n case 'ArrowDown':\n event.preventDefault();\n nextIndex = !!this.selectedOptions.length ? this.getDefaultActiveIndex() : this.getNextVisibleIndex(1);\n if (nextIndex === -1) break;\n this.openDropdownWithActiveElement(nextIndex);\n break;\n\n case 'Home':\n event.preventDefault();\n this.openDropdownWithActiveElement(0);\n break;\n\n case 'End':\n event.preventDefault();\n this.openDropdownWithActiveElement(allOptions.length - 1);\n break;\n\n case 'PageUp':\n event.preventDefault();\n this.openDropdownWithActiveElement(Math.max((activeIndex || 0) - 10, 0));\n break;\n\n case 'PageDown':\n event.preventDefault();\n this.openDropdownWithActiveElement(Math.min((activeIndex || 0) + 10, allOptions.length - 1));\n break;\n\n case 'Tab':\n this.popoverState.emit({ open: false, action: 'close' });\n break;\n\n case 'Esc':\n case 'Escape':\n if (this.noSelect) this.setActiveElement(null);\n this.popoverState.emit({ open: false, action: 'close' });\n break;\n\n default:\n if (customSearch) break;\n if (!key.match(/^[\\w]$/)) break;\n\n this.searchOptions(key, true);\n break;\n }\n };\n\n /* tslint:enable:cyclomatic-complexity */\n\n focusoutHandler = (event: FocusEvent) => {\n const { relatedTarget } = event as unknown as { relatedTarget: ValidOptionElements };\n const isInQ2OptionList = this.allOptions.includes(relatedTarget);\n const isInLightDom = !isInQ2OptionList && this.hostElement.contains(relatedTarget);\n if (isInQ2OptionList || isInLightDom) {\n event.stopPropagation();\n }\n };\n\n focusSelectedSibling(option: ValidOptionElements) {\n const { allVisibleOptions, allOptions } = this;\n const hasNoSiblings = allVisibleOptions.length < 2;\n if (hasNoSiblings) {\n this.showSelected = false;\n return;\n }\n\n const selectedOptionVisibleIndex = allVisibleOptions.indexOf(option);\n const nextVisibleSiblingIndex = selectedOptionVisibleIndex\n ? selectedOptionVisibleIndex - 1\n : selectedOptionVisibleIndex + 1;\n const nextVisibleSibling = allVisibleOptions[nextVisibleSiblingIndex];\n const nextSiblingIndex = allOptions.indexOf(nextVisibleSibling);\n\n this.activeIndex = nextSiblingIndex;\n this.setFocusedOption();\n this.scheduledAfterRender.push(() => {\n if (!('_multiSelectHidden' in option)) return;\n option._multiSelectHidden = !option.selected;\n });\n }\n\n getDefaultActiveIndex() {\n const { allOptions } = this;\n const firstSelected = allOptions.findIndex(element => {\n return 'selected' in element && element.selected;\n });\n if (firstSelected > -1) return firstSelected;\n\n const firstEnabled = allOptions.findIndex(element => !element.hidden);\n if (firstEnabled > -1) return firstEnabled;\n\n return 0;\n }\n\n getNextVisibleIndex(direction) {\n const { allVisibleOptions, allOptions, activeIndex } = this;\n const activeOption = allOptions[activeIndex];\n const visibleActiveOptionIndex = allVisibleOptions.indexOf(activeOption);\n let nextVisibleOptionIndex = visibleActiveOptionIndex + direction;\n\n if (nextVisibleOptionIndex < 0) {\n nextVisibleOptionIndex = allVisibleOptions.length - 1;\n } else if (nextVisibleOptionIndex > allVisibleOptions.length - 1) {\n nextVisibleOptionIndex = 0;\n }\n\n const nextVisibleOption = allVisibleOptions[nextVisibleOptionIndex];\n return allOptions.indexOf(nextVisibleOption);\n }\n\n getRootSlot(element: Element): Element[] {\n const slot = element.querySelector('slot');\n const assignedElements = slot?.assignedElements() ?? Array.from(element.children);\n const hasAnotherSlot = !!assignedElements.length && assignedElements[0].tagName === 'SLOT';\n if (hasAnotherSlot) {\n return this.getRootSlot(assignedElements[0]);\n } else {\n return assignedElements;\n }\n }\n\n internalKeydownHandler = (event: KeyboardEvent) => {\n event.stopPropagation();\n const { activeIndex, customSearch, allOptions, allVisibleOptions, multiple } = this;\n const { key, shiftKey } = event;\n\n let newOption: ValidOptionElements;\n switch (key) {\n case ' ':\n if (this.searchString && !this.multiple) {\n if (customSearch) break;\n\n this.searchOptions(key, false);\n break;\n }\n\n newOption = allOptions.find(element => element.active);\n if (!newOption || newOption.disabled) break;\n this.selectOption(newOption);\n if (multiple) break;\n this.hostElement.addEventListener(\n 'tctClick',\n () => {\n this.popoverState.emit({ open: false, action: 'select' });\n },\n { once: true }\n );\n\n break;\n\n case 'Enter':\n newOption = allOptions.find(element => element.active);\n if (!newOption || newOption.disabled) break;\n this.selectOption(newOption);\n if (multiple) break;\n this.hostElement.addEventListener(\n 'tctClick',\n () => {\n this.popoverState.emit({ open: false, action: 'select' });\n },\n { once: true }\n );\n break;\n\n case 'ArrowUp':\n event.preventDefault();\n const firstVisibleOption = allVisibleOptions[0];\n const isFirstVisibleOptionActive = firstVisibleOption.active;\n if (isFirstVisibleOptionActive) break;\n if (activeIndex === undefined) {\n this.setDefaultActiveElement();\n break;\n } else {\n const nextIndex = this.getNextVisibleIndex(-1);\n if (nextIndex === -1) break;\n this.adjustActiveOptionAndScroll(nextIndex - activeIndex);\n break;\n }\n\n case 'ArrowDown':\n event.preventDefault();\n const lastVisibleOption = allVisibleOptions[allVisibleOptions.length - 1];\n const isLastVisibleOptionActive = lastVisibleOption.active;\n if (isLastVisibleOptionActive) break;\n if (activeIndex === undefined) {\n this.setDefaultActiveElement();\n break;\n } else {\n const nextIndex = this.getNextVisibleIndex(1);\n if (nextIndex === -1) break;\n this.adjustActiveOptionAndScroll(nextIndex - activeIndex);\n break;\n }\n\n case 'Home':\n event.preventDefault();\n this.openDropdownWithActiveElement(0);\n break;\n\n case 'End':\n event.preventDefault();\n this.openDropdownWithActiveElement(allOptions.length - 1);\n break;\n\n case 'PageUp':\n event.preventDefault();\n this.openDropdownWithActiveElement(Math.max(activeIndex - 10, 0));\n break;\n\n case 'PageDown':\n event.preventDefault();\n this.openDropdownWithActiveElement(Math.min(activeIndex + 10, allOptions.length - 1));\n break;\n\n case 'Tab':\n if (shiftKey) break;\n if (this.multiple && this.type === 'listbox') break;\n if (this.type === 'menu') {\n this.popoverState.emit({ open: false, action: 'close' });\n break;\n }\n\n newOption = allOptions.find(element => element.active);\n if (!newOption || newOption.disabled) return;\n this.selectOption(newOption);\n break;\n\n case 'Esc':\n case 'Escape':\n if (this.noSelect) this.setActiveElement(null);\n this.popoverState.emit({ open: false, action: 'close' });\n break;\n\n default:\n if (customSearch) break;\n if (!key.match(/^[\\w]$/)) break;\n\n this.searchOptions(key, false);\n break;\n }\n };\n\n async openDropdownWithActiveElement(activeIndex: number) {\n if (this.disabled) return;\n this.popoverState.emit({ open: true, action: 'open' });\n await waitForNextPaint();\n this.activeIndex = activeIndex;\n this.setActiveOption();\n this.setFocusedOption();\n this.scrollToActiveOption();\n }\n\n resetTimer() {\n if (this.searchStringTimer) {\n clearTimeout(this.searchStringTimer);\n }\n\n this.searchStringTimer = window.setTimeout(() => {\n this.searchString = null;\n }, 2000);\n }\n\n scrollToActiveOption() {\n const activeOption = this.allOptions[this.activeIndex];\n if (!activeOption) return;\n const { scrollX, scrollY } = window;\n activeOption.scrollIntoView({ block: 'center' });\n window.scrollTo(scrollX, scrollY);\n }\n\n searchAndFocus = (keyValue: string, shouldSelect: boolean) => {\n // pseudo search in non-searchable select\n const reorder = () => {\n this.pivotIndex = this.pivotIndex === undefined ? 0 : (this.activeIndex || 0) + 1;\n const list = this.allOptions.map((element, index) => ({ element, index }));\n return [...list.slice(this.pivotIndex), ...list.slice(0, this.pivotIndex)];\n };\n\n const buildQueue = () => {\n const now = new Date();\n if (now.getTime() - this.keyStore.lastPressedAt.getTime() > 1000) {\n // empty stored keys if delay > 1s\n this.keyStore.queue.length = 0;\n }\n if (this.keyStore.queue.length !== 1 || this.keyStore.queue[0] !== keyValue) {\n this.keyStore.queue.push(keyValue);\n }\n this.keyStore.lastPressedAt = now;\n };\n\n const searchIndex = (list: any[]) => {\n const keyStr = this.keyStore.queue.join('');\n const sanitizedKeyStr = sanitizeRegexString(keyStr);\n return list.find(v => {\n return (\n !v.element.disabled &&\n v.element.display &&\n (v.element.display.match(new RegExp(`^${sanitizedKeyStr}`, 'i')) ||\n v.element.display.replace(/\\s/g, '').match(new RegExp(`^${sanitizedKeyStr}`, 'i')))\n );\n });\n };\n\n const setFocus = ({ index }) => {\n if (this.multiple) {\n // multiple: should open to make sure that which options are selected\n this.openDropdownWithActiveElement(index);\n } else {\n this.activeIndex = index;\n if (shouldSelect) {\n this.selectOption(this.allOptions[index]);\n this.popoverState.emit({ open: false, action: 'select' });\n } else this.setActiveElement(index);\n }\n };\n\n buildQueue();\n const matched = searchIndex(reorder());\n if (matched) {\n setFocus(matched);\n }\n };\n\n searchOptions(key: string, shouldSelect?: boolean) {\n this.searchString = key;\n this.searchAndFocus(key, shouldSelect);\n }\n\n selectOption(selectedOption: ValidOptionElements) {\n const { multiple, noSelect, showSelected } = this;\n if (\n !selectedOption ||\n selectedOption.disabled ||\n ('disabledGroup' in selectedOption && selectedOption.disabledGroup)\n )\n return;\n const selectedValue = selectedOption.value;\n const displayValue =\n 'display' in selectedOption && selectedOption.display\n ? selectedOption.display\n : selectedOption.innerText.trim();\n const valueObject = {\n value: selectedValue,\n display: displayValue,\n };\n\n let values: OptionValue[] = [];\n if (multiple) {\n const { selectedOptions } = this;\n const isAlreadySelected = selectedOptions.find(option => option.value === selectedValue);\n\n if (isAlreadySelected) {\n values = selectedOptions.filter(({ value }) => value !== selectedValue);\n } else {\n values = [...selectedOptions, valueObject];\n }\n\n if (showSelected) this.focusSelectedSibling(selectedOption);\n } else {\n values = [valueObject];\n }\n\n if (noSelect) this.setActiveElement(null);\n else this.selectedOptions = values;\n\n mirrorEmit(this, ['change', 'tctChange'], { value: selectedValue, values });\n }\n\n setActiveOption() {\n const activeIndex = this.activeIndex;\n\n this.allOptions.forEach((element, elementIndex) => {\n element.active = activeIndex === elementIndex;\n });\n }\n\n setFocusedOption() {\n const option = this.allOptions[this.activeIndex];\n if (!option) return;\n\n const isOptionVisible = isVisible(option);\n if (isOptionVisible) option.focus({ preventScroll: true });\n else nextPaint(() => option.focus({ preventScroll: true }));\n }\n\n updateMultipleOptionAttrs() {\n const { allOptions, selectedOptions } = this;\n const selectedValues = selectedOptions.map(({ value }) => value);\n if (this.noSelect) return;\n allOptions.forEach(element => {\n if (!('selected' in element)) return;\n element.selected = selectedValues.includes(element.value);\n });\n }\n\n updateSingleOptionAttrs() {\n const { allOptions, selectedOptions } = this;\n const selectedValue = selectedOptions[0]?.value || undefined;\n if (this.noSelect) return;\n allOptions.forEach(element => {\n if (!('selected' in element)) return;\n element.selected = element.value === selectedValue;\n });\n }\n\n // #endregion\n // #region Render Methods\n\n render() {\n return (\n <Host>\n <div\n class=\"content\"\n ref={el => (this.contentElement = el)}\n onFocusout={this.focusoutHandler}\n >\n <div\n class=\"options\"\n aria-label={loc('tecton.element.optionList.label', [this.label])}\n aria-multiselectable={this.type === 'menu' ? undefined : `${!!this.multiple}`}\n role={this.type || 'listbox'}\n onKeyDown={this.internalKeydownHandler}\n onClick={this.clickHandler}\n >\n <slot />\n </div>\n </div>\n </Host>\n );\n }\n\n // #endregion\n}\n","@import '../../styles/host.scss';\n@import '../../styles/functions';\n\n.legacy {\n &.container {\n display: none;\n }\n\n &.show {\n display: block;\n z-index: var-list(--tct-popover-z-index, 50);\n }\n}\n\n@keyframes popoverOpen {\n from {\n opacity: 0;\n transform: scale(0.95);\n }\n to {\n opacity: 1;\n transform: scale(1);\n }\n}\n\n@keyframes popoverClose {\n from {\n opacity: 1;\n transform: scale(1);\n }\n to {\n opacity: 0;\n transform: scale(0.95);\n }\n}\n\n:popover-open,\n.show {\n position: absolute;\n margin: 0;\n padding: var-list(--tct-popover-padding, 0);\n overflow: auto;\n background: var-list(--tct-popover-background, --app-white, #ffffff);\n backdrop-filter: var-list(--tct-popover-backdrop-filter, none);\n color: var-list(--tct-popover-font-color, --t-text, #4d4d4d);\n min-width: var-list(--tct-popover-min-width, 135px);\n margin-block: var-list(--tct-popover-margin-block, 0);\n box-shadow: var-list(\n --tct-popover-box-shadow,\n --app-shadow-3,\n unquote('0px 0px 2px rgba(0, 0, 0, 0.12), 0px 2px 4px rgba(0, 0, 0, 0.14)')\n );\n border-width: var-list(--tct-popover-border-width, 0);\n border-style: solid;\n border-color: var-list(--tct-popover-border-color, transparent);\n border-radius: var-list(--tct-popover-border-radius, 0);\n // the --comp variables are set via JS\n max-height: var(--comp-pop-max-height);\n left: var(--comp-pop-left);\n opacity: var(--comp-pop-opacity, 0);\n\n &.animating-open {\n animation-name: popoverOpen;\n animation-duration: var-list(--tct-popover-open-animation-duration, --t-tween-time-in-1, 150ms);\n animation-timing-function: var-list(--tct-popover-open-animation-timing-function, ease-out);\n animation-fill-mode: var-list(--tct-popover-open-animation-fill-mode, forwards);\n }\n\n &.animating-close {\n animation-name: popoverClose;\n animation-duration: var-list(--tct-popover-close-animation-duration, --t-tween-time-out-1, 100ms);\n animation-timing-function: var-list(--tct-popover-close-animation-timing-function, ease-in);\n animation-fill-mode: var-list(--tct-popover-close-animation-fill-mode, forwards);\n }\n\n // Respect user's motion preferences\n @media (prefers-reduced-motion: reduce) {\n &.animating-open,\n &.animating-close {\n animation: none;\n }\n }\n\n &.block {\n right: unset;\n width: var(--comp-pop-width);\n min-width: var-list(--tct-popover-min-width, unset);\n }\n\n &.left {\n left: var(--comp-pop-left);\n right: unset;\n }\n\n &.right {\n right: var(--comp-pop-right);\n left: unset;\n }\n\n &.down {\n top: var-list(--tct-popover-top, --comp-pop-top);\n bottom: unset;\n }\n\n &.up {\n top: unset;\n bottom: var(--comp-pop-bottom);\n }\n\n // Desktop: corner-based transform origin\n &.down.left:not(.mobile) {\n transform-origin: top left;\n }\n\n &.down.right:not(.mobile) {\n transform-origin: top right;\n }\n\n &.up.left:not(.mobile) {\n transform-origin: bottom left;\n }\n\n &.up.right:not(.mobile) {\n transform-origin: bottom right;\n }\n\n // Mobile: center-based transform origin\n &.mobile.down {\n transform-origin: center top;\n }\n\n &.mobile.up {\n transform-origin: center bottom;\n }\n\n @include tiny-scrollbar();\n}\n\nclick-elsewhere {\n position: relative;\n display: block;\n}\n","import {\n Component,\n Prop,\n h,\n ComponentInterface,\n Element,\n Watch,\n Method,\n Listen,\n EventEmitter,\n Event,\n State,\n} from '@stencil/core';\nimport { handleDeprecationWarning, waitForNextPaint, isMobile, isInScrollableContainer } from '../../utils';\nimport mirrorEmit from '@/utils/mirror-emit';\n\n/**\n * ***********\n * * WARNING *\n * ***********\n * Touching this file obligates you to manually test thoroughly, because Puppeteer can't capture every edgecase.\n *\n * Each of the following Scenarios must be tested on each Device, in each Environment.\n *\n * Scenarios:\n * - Q2 Select searchable\n * - Q2 Select non-searchable\n *\n * Orientations:\n * - Portrait\n * - Landscape\n *\n * Devices:\n * - iOS Safari\n * - Android Chrome\n * - MacOS Safari\n * - Chrome\n * - Firefox\n *\n * Environments:\n * - Standard (Outside of Iframe)\n * - SDK Extension (Inside of Iframe)\n */\n\n/**\n * @name Popover\n * @category Display\n * @summary Use for positioning floating content relative to a trigger element.\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 animationState: 'idle' | 'opening' | 'closing' = 'idle';\n\n @State()\n currentDirection: 'down' | 'up' = undefined;\n\n // remove `show` when we transitiong fully to Popover API and get rid of 'legacy' mode\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 /**\n * Controls whether the popover is animated when opening/closing.\n * Default is true (animated). Set to false to disable animations.\n * Animation is also disabled if the user has enabled prefers-reduced-motion.\n */\n @Prop({ reflect: true })\n animated: boolean = true;\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 * @deprecated Use 'tctPopoverStateChanged' instead\n */\n @Event()\n popoverStateChanged: EventEmitter<{ open: boolean }>;\n\n /**\n * Emitted when the popover is opened or closed.\n */\n @Event()\n tctPopoverStateChanged: 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 mirrorEmit(this, ['popoverStateChanged', 'tctPopoverStateChanged'], { open });\n\n if (open) {\n this.animationState = 'opening';\n this.addViewportListeners();\n this.determinePopDirection();\n } else {\n this.animationState = 'closing';\n this.removeViewportListeners();\n\n // Wait for close animation to complete\n if (this.animated) {\n await new Promise<void>(resolve => {\n const handleAnimationEnd = () => {\n this.containerElement.removeEventListener('animationend', handleAnimationEnd);\n resolve();\n };\n this.containerElement.addEventListener('animationend', handleAnimationEnd);\n });\n } else {\n // No animation, proceed immediately\n await waitForNextPaint();\n }\n\n this.currentDirection = undefined;\n this.animationState = 'idle';\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(): boolean {\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 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 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 const isScrollableIframe = isModule && isInScrollableContainer(this.hostElement);\n if (isModule && !isScrollableIframe) {\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 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 handlePopoverToggleEvent = (event: ToggleEvent) => {\n mirrorEmit(this, ['popoverStateChanged', 'tctPopoverStateChanged'], { 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 const isScrollableIframe = isModule && isInScrollableContainer(this.hostElement);\n\n if (currentDirection === 'up') {\n if (isModule && !isScrollableIframe) {\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 && !isScrollableIframe) {\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 (isMobile()) containerClasses.push('mobile');\n if (this.show) containerClasses.push('show');\n if (this.block) containerClasses.push('block');\n if (this.mode === 'legacy') containerClasses.push('legacy');\n if (this.animated && this.animationState === 'opening') containerClasses.push('animating-open');\n if (this.animated && this.animationState === 'closing') containerClasses.push('animating-close');\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"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["ClickElsewhere","constructor","hostRef","this","isCurrentlyFocused","mouseEventList","mouseHandler","event","shadowContains","findActiveElement","aboutToBeFocused","shadowEventTarget","originatesInSlots","target","mirrorEmit","windowBlurHandler","connectedCallback","forEach","eventName","document","addEventListener","window","disconnectedCallback","removeEventListener","componentWillLoad","workingElement","activeElement","shadowRoot","slots","hostElement","querySelectorAll","currentSlot","Array","from","lightNodes","assignedNodes","childNodes","currentNode","contains","child","parentNode","host","composedPath","sanitizeRegexString","regexString","replace","q2OptionListCss","Q2OptionList","keyStore","queue","lastPressedAt","Date","scheduledAfterRender","label","loc","selectedOptions","type","clickHandler","option","closest","selectOption","multiple","popoverState","emit","open","action","externalKeydownHandler","key","modifierOnlyKeys","includes","stopPropagation","activeIndex","customSearch","allOptions","nextIndex","searchString","searchOptions","openDropdownWithActiveElement","setDefaultActiveElement","nextPaint","preventDefault","length","getDefaultActiveIndex","getNextVisibleIndex","Math","max","min","noSelect","setActiveElement","match","focusoutHandler","relatedTarget","isInQ2OptionList","isInLightDom","internalKeydownHandler","allVisibleOptions","shiftKey","newOption","find","element","active","disabled","once","firstVisibleOption","isFirstVisibleOptionActive","undefined","adjustActiveOptionAndScroll","lastVisibleOption","isLastVisibleOptionActive","searchAndFocus","keyValue","shouldSelect","reorder","pivotIndex","list","map","index","slice","buildQueue","now","getTime","push","searchIndex","keyStr","join","sanitizedKeyStr","v","display","RegExp","setFocus","matched","hasValidAncestor","hasOptions","componentDidLoad","overrideFocus","checkOptions","selectedOptionsUpdated","ready","componentDidRender","fn","handleClick","delegateFocus","isEventFromElement","setActiveOption","setFocusedOption","getContents","allContents","getOptions","handleExternalKeydown","updateMultipleOptionAttrs","updateSingleOptionAttrs","showSelectedUpdated","showSelected","_multiSelectHidden","selected","rootSlot","getRootSlot","acceptedTags","Set","filter","has","tagName","contents","extractOptions","elements","reduce","acc","separator","children","hidden","disabledGroup","numToAdd","scrollToActiveOption","optionRole","role","focusSelectedSibling","hasNoSiblings","selectedOptionVisibleIndex","indexOf","nextVisibleSiblingIndex","nextVisibleSibling","nextSiblingIndex","firstSelected","findIndex","firstEnabled","direction","activeOption","visibleActiveOptionIndex","nextVisibleOptionIndex","nextVisibleOption","slot","querySelector","assignedElements","_a","hasAnotherSlot","waitForNextPaint","resetTimer","searchStringTimer","clearTimeout","setTimeout","scrollX","scrollY","scrollIntoView","block","scrollTo","selectedOption","selectedValue","value","displayValue","innerText","trim","valueObject","values","isAlreadySelected","elementIndex","isOptionVisible","isVisible","focus","preventScroll","selectedValues","render","h","Host","class","ref","el","contentElement","onFocusout","onKeyDown","onClick","q2PopoverCss","Q2Popover","displayBuffer","orientationChanged","pendingAnimationResolve","animationState","currentDirection","show","align","animated","mode","handleMinHeight","minHeight","handleDeprecationWarning","handlePopoverToggleEvent","newState","setAbsoluteCSSProperties","async","controlElement","containerElement","style","setProperty","controlStyle","getComputedStyle","controlSize","parseInt","height","borderTopWidth","borderBottomWidth","setPopoverAPICSSProperties","isModule","top","controlTop","bottom","controlBottom","left","controlLeft","right","controlRight","_b","getBoundingClientRect","call","popoverLeft","popoverRight","_c","visualViewport","width","offsetWidth","isScrollableIframe","isInScrollableContainer","innerHeight","viewPortChanged","determinePopDirection","viewPortOrientationChanged","removeViewportListeners","supportsPopoverAPI","console","warn","popoverStateHandler","detail","scrollContainerTo","options","toggle","minHeightProvided","openChanged","addViewportListeners","Promise","resolve","handleAnimationEnd","hidePopover","clearCSSProperties","isIframe","hasPlatformDimensions","Object","keys","Tecton","platformDimensions","providedDirection","hasOwn","HTMLElement","prototype","validatedMaxHeight","maxHeight","isNaN","isMobile","passive","capture","screen","orientation","removeProperty","windowHeight","maxSpaceAbove","maxSpaceBelow","outletOffset","topBarHeight","bottomBarHeight","distanceToIframeBottom","visualControlTop","visualControlBottom","viewableSpaceAbove","viewableSpaceBelow","isIframeShorterThanWindow","directionWithMostSpace","shouldUpdateMaxHeight","getPropertyValue","currentOrDetermineDirection","priorityMaxHeight","setDirectionAndShow","isOpen","showPopover","containerClasses","tabIndex","popover"],"sources":["src/components/click-elsewhere/click-elsewhere.tsx","src/utils/sanitize-regex-string.ts","src/components/q2-option-list/q2-option-list.scss?tag=q2-option-list&encapsulation=shadow","src/components/q2-option-list/q2-option-list.tsx","src/components/q2-popover/q2-popover.scss?tag=q2-popover&encapsulation=shadow","src/components/q2-popover/q2-popover.tsx"],"sourcesContent":["import { Component, ComponentInterface, Element, Event, EventEmitter } from '@stencil/core';\nimport mirrorEmit from '@/utils/mirror-emit';\n\n@Component({\n tag: 'click-elsewhere',\n shadow: false,\n})\nexport class ClickElsewhere implements ComponentInterface {\n // #region Own Properties\n\n isCurrentlyFocused: boolean = false;\n /**\n * Listens for mouse and window events that happen outside this click-elsewhere element so we can close popovers when users click outside them\n */\n mouseEventList: string[] = ['mousedown', 'dragstart', 'touchstart'];\n\n // #endregion\n // #region Host HTML Element\n\n @Element()\n hostElement: HTMLElement;\n\n // #endregion\n // #region Events\n\n /**\n * Emitted when the user clicks outside the element\n * @deprecated Use 'tctChange' instead\n */\n @Event()\n change: EventEmitter;\n\n /**\n * Emitted when the user clicks outside the element\n */\n @Event()\n tctChange: EventEmitter;\n\n // #endregion\n // #region Component Lifecycle Events\n\n /* tslint:enable:no-empty */\n\n connectedCallback() {\n this.mouseEventList.forEach((eventName: string) => {\n document.addEventListener(eventName, this.mouseHandler);\n });\n window.addEventListener('blur', this.windowBlurHandler);\n }\n\n disconnectedCallback() {\n this.mouseEventList.forEach((eventName: string) => {\n document.removeEventListener(eventName, this.mouseHandler);\n });\n window.removeEventListener('blur', this.windowBlurHandler);\n }\n\n /* TODO: Stencil/Rollup is having issues compiling without this here. Will try to remove in future Stencil upgrade. */\n /* tslint:disable:no-empty */\n componentWillLoad() {}\n\n // #endregion\n // #region Local Methods\n\n findActiveElement(): Element | null {\n let workingElement = document.activeElement!;\n while (true) {\n if (!workingElement || !workingElement.shadowRoot) {\n return workingElement;\n }\n workingElement = workingElement.shadowRoot.activeElement;\n }\n }\n\n mouseHandler = (event: Event): void => {\n const isCurrentlyFocused = this.shadowContains(this.findActiveElement());\n const aboutToBeFocused =\n this.shadowContains(this.shadowEventTarget(event)) || this.originatesInSlots(event.target as Element);\n\n if (!aboutToBeFocused && (this.isCurrentlyFocused || isCurrentlyFocused)) {\n this.isCurrentlyFocused = false;\n mirrorEmit(this, ['change', 'tctChange']);\n return;\n }\n this.isCurrentlyFocused = aboutToBeFocused || isCurrentlyFocused;\n };\n\n originatesInSlots(target: Element): boolean {\n const slots = this.hostElement.querySelectorAll('slot');\n for (const currentSlot of Array.from(slots)) {\n const lightNodes =\n (currentSlot && currentSlot.assignedNodes && currentSlot.assignedNodes()) ||\n this.hostElement.childNodes;\n\n for (const currentNode of Array.from(lightNodes)) {\n if (currentNode.contains(target)) {\n return true;\n }\n }\n }\n return false;\n }\n\n shadowContains(child: any): boolean {\n /**\n * shadow-dom enabled version of Node.contains()\n */\n\n while (true) {\n if (child === this.hostElement) {\n return true;\n }\n if (!child) {\n return false;\n }\n child = child.parentNode || child.host;\n }\n }\n\n shadowEventTarget(event: any): Element {\n return event.composedPath()[0] || event.target;\n }\n\n windowBlurHandler = (): void => {\n this.isCurrentlyFocused = false;\n mirrorEmit(this, ['change', 'tctChange']);\n };\n}\n","export default function sanitizeRegexString(regexString: string) {\n return regexString.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&');\n}\n","@import '../../styles/host.scss';\n@import '../../styles/functions';\n\n:host {\n position: relative;\n width: 100%;\n display: block;\n line-height: var-list(var-prefixer(option-list-line-height),--app-line-height, 1.428571429em);\n}\n\n.content {\n text-align: start;\n\n :host([is-sizeable]) & {\n display: block;\n height: auto;\n }\n}\n","import { hasValidAncestor } from '@/utils/component';\nimport sanitizeRegexString from '@/utils/sanitize-regex-string';\nimport {\n Component,\n Prop,\n h,\n Event,\n State,\n Element,\n ComponentInterface,\n Host,\n EventEmitter,\n Method,\n Watch,\n Listen,\n} from '@stencil/core';\nimport { isEventFromElement, isVisible, loc, nextPaint, overrideFocus, waitForNextPaint } from 'src/utils';\nimport mirrorEmit from '@/utils/mirror-emit';\n\nexport interface OptionValue {\n value: string;\n display?: string;\n}\n\nexport type ValidOptionElements = HTMLQ2OptionElement | HTMLQ2DropdownItemElement;\n\n/**\n * @name Option List\n * @category Forms\n * @summary Use internally by Select and Dropdown for rendering searchable option lists.\n */\n@Component({ tag: 'q2-option-list', shadow: true, styleUrl: 'q2-option-list.scss' })\nexport class Q2OptionList implements ComponentInterface {\n // #region Own Properties\n\n activeIndex: number;\n contentElement: HTMLElement;\n keyStore: {\n queue: string[];\n lastPressedAt: Date;\n } = {\n queue: [],\n lastPressedAt: new Date(),\n };\n pivotIndex: number;\n scheduledAfterRender: (() => void)[] = [];\n searchString: string;\n searchStringTimer: number;\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 hasOptions: boolean;\n\n // #endregion\n // #region Public Property API\n\n @Prop({ reflect: true })\n align: 'left' | 'right';\n\n /** Indicates a custom search is being implemented for the option list. */\n @Prop({ reflect: true })\n customSearch: boolean;\n\n /** Disables the option list. */\n @Prop({ reflect: true })\n disabled: boolean;\n\n /** Determines the label that is applied to the option list for accessibility purposes. */\n @Prop()\n label: string = loc('tecton.element.optionList.label');\n\n /**\n * Enables the multi-select ability for the option list.\n * @info\n * Only applicable when options are provided.\n */\n @Prop({ reflect: true })\n multiple: boolean;\n\n /** Disables the logic that handles selecting and focusing an option in the option list. */\n @Prop({ reflect: true })\n noSelect: boolean;\n\n /** A list of the selected options on the element. */\n @Prop({ mutable: true })\n selectedOptions: OptionValue[] = [];\n\n /** Applies focus to the selected option. */\n @Prop({ reflect: true, mutable: true })\n showSelected: boolean;\n\n /** Translates to the role of the option list */\n @Prop()\n type: 'menu' | 'listbox' = 'listbox';\n\n // #endregion\n // #region Events\n\n /**\n * Emitted when an option is selected or deselected.\n *\n * When the multi-select is enabled, the `value` property will be `undefined` and the `selectedOptions` property\n * will contain the selected option values.\n * @deprecated Use 'tctChange' instead\n */\n @Event()\n change: EventEmitter<{ value: string; values: OptionValue[] }>;\n\n /**\n * Emitted to indicate the intended state of the popover.\n * @private\n */\n @Event()\n popoverState: EventEmitter<{ open: boolean; action: 'close' | 'select' | 'open' }>;\n\n /**\n * Emitted when the component has finished rendering.\n * @private\n */\n @Event({ bubbles: false })\n ready: EventEmitter<undefined>;\n\n /**\n * Emitted when an option is selected or deselected.\n *\n * When the multi-select is enabled, the `value` property will be `undefined` and the `selectedOptions` property\n * will contain the selected option values.\n */\n @Event()\n tctChange: EventEmitter<{ value: string; values: OptionValue[] }>;\n\n // #endregion\n // #region Component Lifecycle Events\n\n componentWillLoad() {\n hasValidAncestor(this.hostElement, 'q2-select, q2-dropdown, q2-pill, q2-popover, q2-action-sheet');\n this.hasOptions = !!this.hostElement.querySelectorAll(\n 'q2-option:not([separator]):not([separator=true]), q2-dropdown-item:not([separator]):not([separator=true])'\n ).length;\n }\n\n componentDidLoad(): void {\n overrideFocus(this.hostElement);\n this.checkOptions();\n this.selectedOptionsUpdated();\n this.ready.emit();\n }\n\n componentDidRender() {\n this.scheduledAfterRender.forEach(fn => fn());\n this.scheduledAfterRender = [];\n }\n\n // #endregion\n // #region Listeners\n\n @Listen('click')\n handleClick(event: MouseEvent) {\n event.stopPropagation();\n }\n\n @Listen('focus')\n delegateFocus(event: FocusEvent) {\n if (!isEventFromElement(event, this.hostElement)) return;\n this.popoverState.emit({ open: true, action: 'open' });\n const { activeIndex } = this;\n if (typeof activeIndex === 'number' && activeIndex > -1) {\n this.setActiveOption();\n this.setFocusedOption();\n } else {\n this.setDefaultActiveElement();\n }\n }\n\n // #endregion\n // #region Public Methods API\n\n @Method()\n async getContents(): Promise<(HTMLQ2OptgroupElement | ValidOptionElements)[]> {\n return this.allContents;\n }\n\n @Method()\n async getOptions(): Promise<ValidOptionElements[]> {\n return this.allOptions;\n }\n\n @Method()\n async handleExternalKeydown(event: KeyboardEvent) {\n this.externalKeydownHandler(event);\n }\n\n @Method()\n async setActiveElement(index: number) {\n this.activeIndex = index;\n this.setActiveOption();\n this.setFocusedOption();\n }\n\n @Method()\n async setDefaultActiveElement() {\n this.activeIndex = this.getDefaultActiveIndex();\n this.setActiveOption();\n this.setFocusedOption();\n }\n\n // #endregion\n // #region Watchers\n\n @Watch('selectedOptions')\n selectedOptionsUpdated() {\n if (this.multiple) {\n this.updateMultipleOptionAttrs();\n } else {\n this.updateSingleOptionAttrs();\n }\n }\n\n @Watch('showSelected')\n showSelectedUpdated(showSelected: boolean) {\n if (showSelected && this.selectedOptions.length === 0) {\n this.showSelected = false;\n return;\n }\n this.allOptions.forEach(option => {\n if (!('_multiSelectHidden' in option)) return;\n option._multiSelectHidden = showSelected ? !option.selected : false;\n });\n }\n\n // #endregion\n // #region Local Methods\n\n get allContents(): (HTMLQ2OptgroupElement | ValidOptionElements)[] {\n const rootSlot = this.getRootSlot(this.hostElement);\n const acceptedTags = new Set(['Q2-OPTGROUP', 'Q2-OPTION', 'Q2-DROPDOWN-ITEM']);\n return rootSlot.filter(element => acceptedTags.has(element.tagName)) as (\n | HTMLQ2OptgroupElement\n | ValidOptionElements\n )[];\n }\n\n get allOptions(): ValidOptionElements[] {\n const contents = this.allContents;\n\n const extractOptions = (\n elements: (HTMLQ2OptgroupElement | ValidOptionElements | Element)[]\n ): ValidOptionElements[] => {\n return elements.reduce((acc, element) => {\n if (element.tagName === 'Q2-OPTION' || element.tagName === 'Q2-DROPDOWN-ITEM') {\n return (element as ValidOptionElements).separator ? acc : [...acc, element];\n } else if (element.tagName === 'Q2-OPTGROUP') {\n return [...acc, ...extractOptions(Array.from(element.children))];\n } else {\n return acc;\n }\n }, []);\n };\n\n return extractOptions(contents);\n }\n\n get allVisibleOptions(): ValidOptionElements[] {\n return this.allOptions.filter(\n option =>\n !option.hidden &&\n (!('_multiSelectHidden' in option) || !option._multiSelectHidden) &&\n !option.disabled &&\n (!('disabledGroup' in option) || !option.disabledGroup)\n );\n }\n\n adjustActiveOptionAndScroll(numToAdd: number) {\n this.activeIndex += numToAdd;\n this.setActiveOption();\n this.setFocusedOption();\n this.scrollToActiveOption();\n }\n\n checkOptions() {\n const { type } = this;\n if (!type) return;\n const optionRole = type === 'menu' ? 'menuitem' : 'option';\n this.allOptions.forEach(option => {\n option.role = optionRole;\n });\n }\n\n clickHandler = (event: Event) => {\n const target = event.target as ValidOptionElements;\n const option = target.closest<ValidOptionElements>(\n 'q2-option:not([separator]):not([separator=true]), q2-dropdown-item:not([separator]):not([separator=true])'\n );\n this.selectOption(option);\n if (this.multiple) return;\n this.popoverState.emit({ open: false, action: 'select' });\n };\n\n /* tslint:disable:cyclomatic-complexity */\n externalKeydownHandler = (event: KeyboardEvent) => {\n const { key } = event;\n\n // Allow modifier-only keys to propagate without being handled\n const modifierOnlyKeys = ['Shift', 'Control', 'Alt', 'Meta'];\n if (modifierOnlyKeys.includes(key)) return;\n\n event.stopPropagation();\n const { activeIndex, customSearch, allOptions } = this;\n\n let nextIndex;\n switch (key) {\n case ' ':\n if (this.searchString) {\n if (customSearch) break;\n\n this.searchOptions(key, true);\n break;\n } else if (this.type === 'menu') {\n this.activeIndex = 0;\n this.openDropdownWithActiveElement(0);\n } else {\n this.setDefaultActiveElement();\n nextPaint(() => this.popoverState.emit({ open: true, action: 'open' }));\n }\n break;\n\n case 'Enter':\n if (this.type === 'menu') {\n this.activeIndex = 0;\n this.openDropdownWithActiveElement(0);\n } else {\n this.setDefaultActiveElement();\n nextPaint(() => this.popoverState.emit({ open: true, action: 'open' }));\n }\n break;\n\n case 'ArrowUp':\n event.preventDefault();\n nextIndex = !!this.selectedOptions.length ? this.getDefaultActiveIndex() : this.getNextVisibleIndex(-1);\n if (nextIndex === -1) break;\n this.openDropdownWithActiveElement(nextIndex);\n break;\n\n case 'ArrowDown':\n event.preventDefault();\n nextIndex = !!this.selectedOptions.length ? this.getDefaultActiveIndex() : this.getNextVisibleIndex(1);\n if (nextIndex === -1) break;\n this.openDropdownWithActiveElement(nextIndex);\n break;\n\n case 'Home':\n event.preventDefault();\n this.openDropdownWithActiveElement(0);\n break;\n\n case 'End':\n event.preventDefault();\n this.openDropdownWithActiveElement(allOptions.length - 1);\n break;\n\n case 'PageUp':\n event.preventDefault();\n this.openDropdownWithActiveElement(Math.max((activeIndex || 0) - 10, 0));\n break;\n\n case 'PageDown':\n event.preventDefault();\n this.openDropdownWithActiveElement(Math.min((activeIndex || 0) + 10, allOptions.length - 1));\n break;\n\n case 'Tab':\n this.popoverState.emit({ open: false, action: 'close' });\n break;\n\n case 'Esc':\n case 'Escape':\n if (this.noSelect) this.setActiveElement(null);\n this.popoverState.emit({ open: false, action: 'close' });\n break;\n\n default:\n if (customSearch) break;\n if (!key.match(/^[\\w]$/)) break;\n\n this.searchOptions(key, true);\n break;\n }\n };\n\n /* tslint:enable:cyclomatic-complexity */\n\n focusoutHandler = (event: FocusEvent) => {\n const { relatedTarget } = event as unknown as { relatedTarget: ValidOptionElements };\n const isInQ2OptionList = this.allOptions.includes(relatedTarget);\n const isInLightDom = !isInQ2OptionList && this.hostElement.contains(relatedTarget);\n if (isInQ2OptionList || isInLightDom) {\n event.stopPropagation();\n }\n };\n\n focusSelectedSibling(option: ValidOptionElements) {\n const { allVisibleOptions, allOptions } = this;\n const hasNoSiblings = allVisibleOptions.length < 2;\n if (hasNoSiblings) {\n this.showSelected = false;\n return;\n }\n\n const selectedOptionVisibleIndex = allVisibleOptions.indexOf(option);\n const nextVisibleSiblingIndex = selectedOptionVisibleIndex\n ? selectedOptionVisibleIndex - 1\n : selectedOptionVisibleIndex + 1;\n const nextVisibleSibling = allVisibleOptions[nextVisibleSiblingIndex];\n const nextSiblingIndex = allOptions.indexOf(nextVisibleSibling);\n\n this.activeIndex = nextSiblingIndex;\n this.setFocusedOption();\n this.scheduledAfterRender.push(() => {\n if (!('_multiSelectHidden' in option)) return;\n option._multiSelectHidden = !option.selected;\n });\n }\n\n getDefaultActiveIndex() {\n const { allOptions } = this;\n const firstSelected = allOptions.findIndex(element => {\n return 'selected' in element && element.selected;\n });\n if (firstSelected > -1) return firstSelected;\n\n const firstEnabled = allOptions.findIndex(element => !element.hidden);\n if (firstEnabled > -1) return firstEnabled;\n\n return 0;\n }\n\n getNextVisibleIndex(direction) {\n const { allVisibleOptions, allOptions, activeIndex } = this;\n const activeOption = allOptions[activeIndex];\n const visibleActiveOptionIndex = allVisibleOptions.indexOf(activeOption);\n let nextVisibleOptionIndex = visibleActiveOptionIndex + direction;\n\n if (nextVisibleOptionIndex < 0) {\n nextVisibleOptionIndex = allVisibleOptions.length - 1;\n } else if (nextVisibleOptionIndex > allVisibleOptions.length - 1) {\n nextVisibleOptionIndex = 0;\n }\n\n const nextVisibleOption = allVisibleOptions[nextVisibleOptionIndex];\n return allOptions.indexOf(nextVisibleOption);\n }\n\n getRootSlot(element: Element): Element[] {\n const slot = element.querySelector('slot');\n const assignedElements = slot?.assignedElements() ?? Array.from(element.children);\n const hasAnotherSlot = !!assignedElements.length && assignedElements[0].tagName === 'SLOT';\n if (hasAnotherSlot) {\n return this.getRootSlot(assignedElements[0]);\n } else {\n return assignedElements;\n }\n }\n\n internalKeydownHandler = (event: KeyboardEvent) => {\n event.stopPropagation();\n const { activeIndex, customSearch, allOptions, allVisibleOptions, multiple } = this;\n const { key, shiftKey } = event;\n\n let newOption: ValidOptionElements;\n switch (key) {\n case ' ':\n if (this.searchString && !this.multiple) {\n if (customSearch) break;\n\n this.searchOptions(key, false);\n break;\n }\n\n newOption = allOptions.find(element => element.active);\n if (!newOption || newOption.disabled) break;\n this.selectOption(newOption);\n if (multiple) break;\n this.hostElement.addEventListener(\n 'tctClick',\n () => {\n this.popoverState.emit({ open: false, action: 'select' });\n },\n { once: true }\n );\n\n break;\n\n case 'Enter':\n newOption = allOptions.find(element => element.active);\n if (!newOption || newOption.disabled) break;\n this.selectOption(newOption);\n if (multiple) break;\n this.hostElement.addEventListener(\n 'tctClick',\n () => {\n this.popoverState.emit({ open: false, action: 'select' });\n },\n { once: true }\n );\n break;\n\n case 'ArrowUp':\n event.preventDefault();\n const firstVisibleOption = allVisibleOptions[0];\n const isFirstVisibleOptionActive = firstVisibleOption.active;\n if (isFirstVisibleOptionActive) break;\n if (activeIndex === undefined) {\n this.setDefaultActiveElement();\n break;\n } else {\n const nextIndex = this.getNextVisibleIndex(-1);\n if (nextIndex === -1) break;\n this.adjustActiveOptionAndScroll(nextIndex - activeIndex);\n break;\n }\n\n case 'ArrowDown':\n event.preventDefault();\n const lastVisibleOption = allVisibleOptions[allVisibleOptions.length - 1];\n const isLastVisibleOptionActive = lastVisibleOption.active;\n if (isLastVisibleOptionActive) break;\n if (activeIndex === undefined) {\n this.setDefaultActiveElement();\n break;\n } else {\n const nextIndex = this.getNextVisibleIndex(1);\n if (nextIndex === -1) break;\n this.adjustActiveOptionAndScroll(nextIndex - activeIndex);\n break;\n }\n\n case 'Home':\n event.preventDefault();\n this.openDropdownWithActiveElement(0);\n break;\n\n case 'End':\n event.preventDefault();\n this.openDropdownWithActiveElement(allOptions.length - 1);\n break;\n\n case 'PageUp':\n event.preventDefault();\n this.openDropdownWithActiveElement(Math.max(activeIndex - 10, 0));\n break;\n\n case 'PageDown':\n event.preventDefault();\n this.openDropdownWithActiveElement(Math.min(activeIndex + 10, allOptions.length - 1));\n break;\n\n case 'Tab':\n if (shiftKey) break;\n if (this.multiple && this.type === 'listbox') break;\n if (this.type === 'menu') {\n this.popoverState.emit({ open: false, action: 'close' });\n break;\n }\n\n newOption = allOptions.find(element => element.active);\n if (!newOption || newOption.disabled) return;\n this.selectOption(newOption);\n break;\n\n case 'Esc':\n case 'Escape':\n if (this.noSelect) this.setActiveElement(null);\n this.popoverState.emit({ open: false, action: 'close' });\n break;\n\n default:\n if (customSearch) break;\n if (!key.match(/^[\\w]$/)) break;\n\n this.searchOptions(key, false);\n break;\n }\n };\n\n async openDropdownWithActiveElement(activeIndex: number) {\n if (this.disabled) return;\n this.popoverState.emit({ open: true, action: 'open' });\n await waitForNextPaint();\n this.activeIndex = activeIndex;\n this.setActiveOption();\n this.setFocusedOption();\n this.scrollToActiveOption();\n }\n\n resetTimer() {\n if (this.searchStringTimer) {\n clearTimeout(this.searchStringTimer);\n }\n\n this.searchStringTimer = window.setTimeout(() => {\n this.searchString = null;\n }, 2000);\n }\n\n scrollToActiveOption() {\n const activeOption = this.allOptions[this.activeIndex];\n if (!activeOption) return;\n const { scrollX, scrollY } = window;\n activeOption.scrollIntoView({ block: 'center' });\n window.scrollTo(scrollX, scrollY);\n }\n\n searchAndFocus = (keyValue: string, shouldSelect: boolean) => {\n // pseudo search in non-searchable select\n const reorder = () => {\n this.pivotIndex = this.pivotIndex === undefined ? 0 : (this.activeIndex || 0) + 1;\n const list = this.allOptions.map((element, index) => ({ element, index }));\n return [...list.slice(this.pivotIndex), ...list.slice(0, this.pivotIndex)];\n };\n\n const buildQueue = () => {\n const now = new Date();\n if (now.getTime() - this.keyStore.lastPressedAt.getTime() > 1000) {\n // empty stored keys if delay > 1s\n this.keyStore.queue.length = 0;\n }\n if (this.keyStore.queue.length !== 1 || this.keyStore.queue[0] !== keyValue) {\n this.keyStore.queue.push(keyValue);\n }\n this.keyStore.lastPressedAt = now;\n };\n\n const searchIndex = (list: any[]) => {\n const keyStr = this.keyStore.queue.join('');\n const sanitizedKeyStr = sanitizeRegexString(keyStr);\n return list.find(v => {\n return (\n !v.element.disabled &&\n v.element.display &&\n (v.element.display.match(new RegExp(`^${sanitizedKeyStr}`, 'i')) ||\n v.element.display.replace(/\\s/g, '').match(new RegExp(`^${sanitizedKeyStr}`, 'i')))\n );\n });\n };\n\n const setFocus = ({ index }) => {\n if (this.multiple) {\n // multiple: should open to make sure that which options are selected\n this.openDropdownWithActiveElement(index);\n } else {\n this.activeIndex = index;\n if (shouldSelect) {\n this.selectOption(this.allOptions[index]);\n this.popoverState.emit({ open: false, action: 'select' });\n } else this.setActiveElement(index);\n }\n };\n\n buildQueue();\n const matched = searchIndex(reorder());\n if (matched) {\n setFocus(matched);\n }\n };\n\n searchOptions(key: string, shouldSelect?: boolean) {\n this.searchString = key;\n this.searchAndFocus(key, shouldSelect);\n }\n\n selectOption(selectedOption: ValidOptionElements) {\n const { multiple, noSelect, showSelected } = this;\n if (\n !selectedOption ||\n selectedOption.disabled ||\n ('disabledGroup' in selectedOption && selectedOption.disabledGroup)\n )\n return;\n const selectedValue = selectedOption.value;\n const displayValue =\n 'display' in selectedOption && selectedOption.display\n ? selectedOption.display\n : selectedOption.innerText.trim();\n const valueObject = {\n value: selectedValue,\n display: displayValue,\n };\n\n let values: OptionValue[] = [];\n if (multiple) {\n const { selectedOptions } = this;\n const isAlreadySelected = selectedOptions.find(option => option.value === selectedValue);\n\n if (isAlreadySelected) {\n values = selectedOptions.filter(({ value }) => value !== selectedValue);\n } else {\n values = [...selectedOptions, valueObject];\n }\n\n if (showSelected) this.focusSelectedSibling(selectedOption);\n } else {\n values = [valueObject];\n }\n\n if (noSelect) this.setActiveElement(null);\n else this.selectedOptions = values;\n\n mirrorEmit(this, ['change', 'tctChange'], { value: selectedValue, values });\n }\n\n setActiveOption() {\n const activeIndex = this.activeIndex;\n\n this.allOptions.forEach((element, elementIndex) => {\n element.active = activeIndex === elementIndex;\n });\n }\n\n setFocusedOption() {\n const option = this.allOptions[this.activeIndex];\n if (!option) return;\n\n const isOptionVisible = isVisible(option);\n if (isOptionVisible) option.focus({ preventScroll: true });\n else nextPaint(() => option.focus({ preventScroll: true }));\n }\n\n updateMultipleOptionAttrs() {\n const { allOptions, selectedOptions } = this;\n const selectedValues = selectedOptions.map(({ value }) => value);\n if (this.noSelect) return;\n allOptions.forEach(element => {\n if (!('selected' in element)) return;\n element.selected = selectedValues.includes(element.value);\n });\n }\n\n updateSingleOptionAttrs() {\n const { allOptions, selectedOptions } = this;\n const selectedValue = selectedOptions[0]?.value || undefined;\n if (this.noSelect) return;\n allOptions.forEach(element => {\n if (!('selected' in element)) return;\n element.selected = element.value === selectedValue;\n });\n }\n\n // #endregion\n // #region Render Methods\n\n render() {\n return (\n <Host>\n <div\n class=\"content\"\n ref={el => (this.contentElement = el)}\n onFocusout={this.focusoutHandler}\n >\n <div\n class=\"options\"\n aria-label={loc('tecton.element.optionList.label', [this.label])}\n aria-multiselectable={this.type === 'menu' ? undefined : `${!!this.multiple}`}\n role={this.type || 'listbox'}\n onKeyDown={this.internalKeydownHandler}\n onClick={this.clickHandler}\n >\n <slot />\n </div>\n </div>\n </Host>\n );\n }\n\n // #endregion\n}\n","@import '../../styles/host.scss';\n@import '../../styles/functions';\n\n.legacy {\n &.container {\n display: none;\n }\n\n &.show {\n display: block;\n z-index: var-list(--tct-popover-z-index, 50);\n }\n}\n\n@keyframes popoverOpen {\n from {\n opacity: 0;\n transform: scale(0.95);\n }\n to {\n opacity: 1;\n transform: scale(1);\n }\n}\n\n@keyframes popoverClose {\n from {\n opacity: 1;\n transform: scale(1);\n }\n to {\n opacity: 0;\n transform: scale(0.95);\n }\n}\n\n:popover-open,\n.show {\n position: absolute;\n margin: 0;\n padding: var-list(--tct-popover-padding, 0);\n overflow: auto;\n background: var-list(--tct-popover-background, --app-white, #ffffff);\n backdrop-filter: var-list(--tct-popover-backdrop-filter, none);\n color: var-list(--tct-popover-font-color, --t-text, #4d4d4d);\n min-width: var-list(--tct-popover-min-width, 135px);\n margin-block: var-list(--tct-popover-margin-block, 0);\n box-shadow: var-list(\n --tct-popover-box-shadow,\n --app-shadow-3,\n unquote('0px 0px 2px rgba(0, 0, 0, 0.12), 0px 2px 4px rgba(0, 0, 0, 0.14)')\n );\n border-width: var-list(--tct-popover-border-width, 0);\n border-style: solid;\n border-color: var-list(--tct-popover-border-color, transparent);\n border-radius: var-list(--tct-popover-border-radius, 0);\n // the --comp variables are set via JS\n max-height: var(--comp-pop-max-height);\n left: var(--comp-pop-left);\n opacity: var(--comp-pop-opacity, 0);\n\n &.animating-open {\n animation-name: popoverOpen;\n animation-duration: var-list(--tct-popover-open-animation-duration, --t-tween-time-in-1, 150ms);\n animation-timing-function: var-list(--tct-popover-open-animation-timing-function, ease-out);\n animation-fill-mode: var-list(--tct-popover-open-animation-fill-mode, forwards);\n }\n\n &.animating-close {\n animation-name: popoverClose;\n animation-duration: var-list(--tct-popover-close-animation-duration, --t-tween-time-out-1, 100ms);\n animation-timing-function: var-list(--tct-popover-close-animation-timing-function, ease-in);\n animation-fill-mode: var-list(--tct-popover-close-animation-fill-mode, forwards);\n }\n\n // Respect user's motion preferences\n @media (prefers-reduced-motion: reduce) {\n &.animating-open,\n &.animating-close {\n animation: none;\n }\n }\n\n &.block {\n right: unset;\n width: var(--comp-pop-width);\n min-width: var-list(--tct-popover-min-width, unset);\n }\n\n &.left {\n left: var(--comp-pop-left);\n right: unset;\n }\n\n &.right {\n right: var(--comp-pop-right);\n left: unset;\n }\n\n &.down {\n top: var-list(--tct-popover-top, --comp-pop-top);\n bottom: unset;\n }\n\n &.up {\n top: unset;\n bottom: var(--comp-pop-bottom);\n }\n\n // Desktop: corner-based transform origin\n &.down.left:not(.mobile) {\n transform-origin: top left;\n }\n\n &.down.right:not(.mobile) {\n transform-origin: top right;\n }\n\n &.up.left:not(.mobile) {\n transform-origin: bottom left;\n }\n\n &.up.right:not(.mobile) {\n transform-origin: bottom right;\n }\n\n // Mobile: center-based transform origin\n &.mobile.down {\n transform-origin: center top;\n }\n\n &.mobile.up {\n transform-origin: center bottom;\n }\n\n @include tiny-scrollbar();\n}\n\nclick-elsewhere {\n position: relative;\n display: block;\n}\n","import {\n Component,\n Prop,\n h,\n ComponentInterface,\n Element,\n Watch,\n Method,\n Listen,\n EventEmitter,\n Event,\n State,\n} from '@stencil/core';\nimport { handleDeprecationWarning, waitForNextPaint, isMobile, isInScrollableContainer } from '../../utils';\nimport mirrorEmit from '@/utils/mirror-emit';\n\n/**\n * ***********\n * * WARNING *\n * ***********\n * Touching this file obligates you to manually test thoroughly, because Puppeteer can't capture every edgecase.\n *\n * Each of the following Scenarios must be tested on each Device, in each Environment.\n *\n * Scenarios:\n * - Q2 Select searchable\n * - Q2 Select non-searchable\n *\n * Orientations:\n * - Portrait\n * - Landscape\n *\n * Devices:\n * - iOS Safari\n * - Android Chrome\n * - MacOS Safari\n * - Chrome\n * - Firefox\n *\n * Environments:\n * - Standard (Outside of Iframe)\n * - SDK Extension (Inside of Iframe)\n */\n\n/**\n * @name Popover\n * @category Display\n * @summary Use for positioning floating content relative to a trigger element.\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 pendingAnimationResolve: (() => void) | null = null;\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 animationState: 'idle' | 'opening' | 'closing' = 'idle';\n\n @State()\n currentDirection: 'down' | 'up' = undefined;\n\n // remove `show` when we transitiong fully to Popover API and get rid of 'legacy' mode\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 /**\n * Controls whether the popover is animated when opening/closing.\n * Default is true (animated). Set to false to disable animations.\n * Animation is also disabled if the user has enabled prefers-reduced-motion.\n */\n @Prop({ reflect: true })\n animated: boolean = true;\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 * @deprecated Use 'tctPopoverStateChanged' instead\n */\n @Event()\n popoverStateChanged: EventEmitter<{ open: boolean }>;\n\n /**\n * Emitted when the popover is opened or closed.\n */\n @Event()\n tctPopoverStateChanged: EventEmitter<{ open: boolean }>;\n\n // #endregion\n // #region Component Lifecycle Events\n\n disconnectedCallback() {\n this.removeViewportListeners();\n if (this.pendingAnimationResolve) {\n this.pendingAnimationResolve();\n this.pendingAnimationResolve = null;\n }\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 mirrorEmit(this, ['popoverStateChanged', 'tctPopoverStateChanged'], { open });\n\n if (open) {\n this.animationState = 'opening';\n this.addViewportListeners();\n this.determinePopDirection();\n } else {\n this.animationState = 'closing';\n this.removeViewportListeners();\n\n // Wait for close animation to complete\n if (this.animated) {\n await new Promise<void>(resolve => {\n const handleAnimationEnd = () => {\n this.pendingAnimationResolve = null;\n this.containerElement?.removeEventListener('animationend', handleAnimationEnd);\n resolve();\n };\n this.pendingAnimationResolve = handleAnimationEnd;\n this.containerElement?.addEventListener('animationend', handleAnimationEnd);\n if (!this.containerElement) resolve();\n });\n } else {\n // No animation, proceed immediately\n await waitForNextPaint();\n }\n\n if (!this.containerElement) return;\n\n this.currentDirection = undefined;\n this.animationState = 'idle';\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(): boolean {\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 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 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 if (!this.containerElement) return;\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 if (!this.containerElement) return;\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 const isScrollableIframe = isModule && isInScrollableContainer(this.hostElement);\n if (isModule && !isScrollableIframe) {\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 && containerElement) {\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 && containerElement) {\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 handlePopoverToggleEvent = (event: ToggleEvent) => {\n mirrorEmit(this, ['popoverStateChanged', 'tctPopoverStateChanged'], { 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 if (!containerElement) return;\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 if (this.containerElement) 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 || !this.containerElement) 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 if (!containerElement) return;\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 const isScrollableIframe = isModule && isInScrollableContainer(this.hostElement);\n\n if (currentDirection === 'up') {\n if (isModule && !isScrollableIframe) {\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 && !isScrollableIframe) {\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 if (this.containerElement) 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 (isMobile()) containerClasses.push('mobile');\n if (this.show) containerClasses.push('show');\n if (this.block) containerClasses.push('block');\n if (this.mode === 'legacy') containerClasses.push('legacy');\n if (this.animated && this.animationState === 'opening') containerClasses.push('animating-open');\n if (this.animated && this.animationState === 'closing') containerClasses.push('animating-close');\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"],"mappings":";;;;;;;;MAOaA,IAAc;EAJ3B,WAAAC,CAAAC;;;;;QAOIC,KAAkBC,qBAAY;;;eAI9BD,KAAcE,iBAAa,EAAC,aAAa,aAAa;IA4DtDF,KAAAG,eAAgBC;MACZ,MAAMH,IAAqBD,KAAKK,eAAeL,KAAKM;MACpD,MAAMC,IACFP,KAAKK,eAAeL,KAAKQ,kBAAkBJ,OAAWJ,KAAKS,kBAAkBL,EAAMM;MAEvF,KAAKH,MAAqBP,KAAKC,sBAAsBA,IAAqB;QACtED,KAAKC,qBAAqB;QAC1BU,EAAWX,MAAM,EAAC,UAAU;QAC5B;;MAEJA,KAAKC,qBAAqBM,KAAoBN;AAAkB;IAuCpED,KAAiBY,oBAAG;MAChBZ,KAAKC,qBAAqB;MAC1BU,EAAWX,MAAM,EAAC,UAAU;AAAa;AAEhD;;;;EApFG,iBAAAa;IACIb,KAAKE,eAAeY,SAASC;MACzBC,SAASC,iBAAiBF,GAAWf,KAAKG;AAAa;IAE3De,OAAOD,iBAAiB,QAAQjB,KAAKY;;EAGzC,oBAAAO;IACInB,KAAKE,eAAeY,SAASC;MACzBC,SAASI,oBAAoBL,GAAWf,KAAKG;AAAa;IAE9De,OAAOE,oBAAoB,QAAQpB,KAAKY;;;iCAK5C,iBAAAS,IAAiB;;;EAKjB,iBAAAf;IACI,IAAIgB,IAAiBN,SAASO;IAC9B,OAAO,MAAM;MACT,KAAKD,MAAmBA,EAAeE,YAAY;QAC/C,OAAOF;;MAEXA,IAAiBA,EAAeE,WAAWD;;;EAiBnD,iBAAAd,CAAkBC;IACd,MAAMe,IAAQzB,KAAK0B,YAAYC,iBAAiB;IAChD,KAAK,MAAMC,KAAeC,MAAMC,KAAKL,IAAQ;MACzC,MAAMM,IACDH,KAAeA,EAAYI,iBAAiBJ,EAAYI,mBACzDhC,KAAK0B,YAAYO;MAErB,KAAK,MAAMC,KAAeL,MAAMC,KAAKC,IAAa;QAC9C,IAAIG,EAAYC,SAASzB,IAAS;UAC9B,OAAO;;;;IAInB,OAAO;;EAGX,cAAAL,CAAe+B;;;;IAKX,OAAO,MAAM;MACT,IAAIA,MAAUpC,KAAK0B,aAAa;QAC5B,OAAO;;MAEX,KAAKU,GAAO;QACR,OAAO;;MAEXA,IAAQA,EAAMC,cAAcD,EAAME;;;EAI1C,iBAAA9B,CAAkBJ;IACd,OAAOA,EAAMmC,eAAe,MAAMnC,EAAMM;;;;;;;ACxHxB,SAAA8B,oBAAoBC;EACxC,OAAOA,EAAYC,QAAQ,uBAAuB;AACtD;;ACFA,MAAMC,IAAkB;;MCgCXC,IAAY;EADzB,WAAA9C,CAAAC;;;;;;IAMIC,KAAA6C,WAGI;MACAC,OAAO;MACPC,eAAe,IAAIC;;IAGvBhD,KAAoBiD,uBAAmB;kGAgCvCjD,KAAAkD,QAAgBC,EAAI;6DAgBpBnD,KAAeoD,kBAAkB;wDAQjCpD,KAAIqD,OAAuB;IAmM3BrD,KAAAsD,eAAgBlD;MACZ,MAAMM,IAASN,EAAMM;MACrB,MAAM6C,IAAS7C,EAAO8C,QAClB;MAEJxD,KAAKyD,aAAaF;MAClB,IAAIvD,KAAK0D,UAAU;MACnB1D,KAAK2D,aAAaC,KAAK;QAAEC,MAAM;QAAOC,QAAQ;;AAAW;kDAI7D9D,KAAA+D,yBAA0B3D;MACtB,OAAM4D,KAAEA,KAAQ5D;;YAGhB,MAAM6D,IAAmB,EAAC,SAAS,WAAW,OAAO;MACrD,IAAIA,EAAiBC,SAASF,IAAM;MAEpC5D,EAAM+D;MACN,OAAMC,aAAEA,GAAWC,cAAEA,GAAYC,YAAEA,KAAetE;MAElD,IAAIuE;MACJ,QAAQP;OACJ,KAAK;QACD,IAAIhE,KAAKwE,cAAc;UACnB,IAAIH,GAAc;UAElBrE,KAAKyE,cAAcT,GAAK;UACxB;eACG,IAAIhE,KAAKqD,SAAS,QAAQ;UAC7BrD,KAAKoE,cAAc;UACnBpE,KAAK0E,8BAA8B;eAChC;UACH1E,KAAK2E;UACLC,GAAU,MAAM5E,KAAK2D,aAAaC,KAAK;YAAEC,MAAM;YAAMC,QAAQ;;;QAEjE;;OAEJ,KAAK;QACD,IAAI9D,KAAKqD,SAAS,QAAQ;UACtBrD,KAAKoE,cAAc;UACnBpE,KAAK0E,8BAA8B;eAChC;UACH1E,KAAK2E;UACLC,GAAU,MAAM5E,KAAK2D,aAAaC,KAAK;YAAEC,MAAM;YAAMC,QAAQ;;;QAEjE;;OAEJ,KAAK;QACD1D,EAAMyE;QACNN,MAAcvE,KAAKoD,gBAAgB0B,SAAS9E,KAAK+E,0BAA0B/E,KAAKgF,qBAAoB;QACpG,IAAIT,OAAc,GAAI;QACtBvE,KAAK0E,8BAA8BH;QACnC;;OAEJ,KAAK;QACDnE,EAAMyE;QACNN,MAAcvE,KAAKoD,gBAAgB0B,SAAS9E,KAAK+E,0BAA0B/E,KAAKgF,oBAAoB;QACpG,IAAIT,OAAc,GAAI;QACtBvE,KAAK0E,8BAA8BH;QACnC;;OAEJ,KAAK;QACDnE,EAAMyE;QACN7E,KAAK0E,8BAA8B;QACnC;;OAEJ,KAAK;QACDtE,EAAMyE;QACN7E,KAAK0E,8BAA8BJ,EAAWQ,SAAS;QACvD;;OAEJ,KAAK;QACD1E,EAAMyE;QACN7E,KAAK0E,8BAA8BO,KAAKC,KAAKd,KAAe,KAAK,IAAI;QACrE;;OAEJ,KAAK;QACDhE,EAAMyE;QACN7E,KAAK0E,8BAA8BO,KAAKE,KAAKf,KAAe,KAAK,IAAIE,EAAWQ,SAAS;QACzF;;OAEJ,KAAK;QACD9E,KAAK2D,aAAaC,KAAK;UAAEC,MAAM;UAAOC,QAAQ;;QAC9C;;OAEJ,KAAK;OACL,KAAK;QACD,IAAI9D,KAAKoF,UAAUpF,KAAKqF,iBAAiB;QACzCrF,KAAK2D,aAAaC,KAAK;UAAEC,MAAM;UAAOC,QAAQ;;QAC9C;;OAEJ;QACI,IAAIO,GAAc;QAClB,KAAKL,EAAIsB,MAAM,WAAW;QAE1BtF,KAAKyE,cAAcT,GAAK;QACxB;;;iDAMZhE,KAAAuF,kBAAmBnF;MACf,OAAMoF,eAAEA,KAAkBpF;MAC1B,MAAMqF,IAAmBzF,KAAKsE,WAAWJ,SAASsB;MAClD,MAAME,KAAgBD,KAAoBzF,KAAK0B,YAAYS,SAASqD;MACpE,IAAIC,KAAoBC,GAAc;QAClCtF,EAAM+D;;;IAmEdnE,KAAA2F,yBAA0BvF;MACtBA,EAAM+D;MACN,OAAMC,aAAEA,GAAWC,cAAEA,GAAYC,YAAEA,GAAUsB,mBAAEA,GAAiBlC,UAAEA,KAAa1D;MAC/E,OAAMgE,KAAEA,GAAG6B,UAAEA,KAAazF;MAE1B,IAAI0F;MACJ,QAAQ9B;OACJ,KAAK;QACD,IAAIhE,KAAKwE,iBAAiBxE,KAAK0D,UAAU;UACrC,IAAIW,GAAc;UAElBrE,KAAKyE,cAAcT,GAAK;UACxB;;QAGJ8B,IAAYxB,EAAWyB,MAAKC,KAAWA,EAAQC;QAC/C,KAAKH,KAAaA,EAAUI,UAAU;QACtClG,KAAKyD,aAAaqC;QAClB,IAAIpC,GAAU;QACd1D,KAAK0B,YAAYT,iBACb,aACA;UACIjB,KAAK2D,aAAaC,KAAK;YAAEC,MAAM;YAAOC,QAAQ;;AAAW,YAE7D;UAAEqC,MAAM;;QAGZ;;OAEJ,KAAK;QACDL,IAAYxB,EAAWyB,MAAKC,KAAWA,EAAQC;QAC/C,KAAKH,KAAaA,EAAUI,UAAU;QACtClG,KAAKyD,aAAaqC;QAClB,IAAIpC,GAAU;QACd1D,KAAK0B,YAAYT,iBACb,aACA;UACIjB,KAAK2D,aAAaC,KAAK;YAAEC,MAAM;YAAOC,QAAQ;;AAAW,YAE7D;UAAEqC,MAAM;;QAEZ;;OAEJ,KAAK;QACD/F,EAAMyE;QACN,MAAMuB,IAAqBR,EAAkB;QAC7C,MAAMS,IAA6BD,EAAmBH;QACtD,IAAII,GAA4B;QAChC,IAAIjC,MAAgBkC,WAAW;UAC3BtG,KAAK2E;UACL;eACG;UACH,MAAMJ,IAAYvE,KAAKgF,qBAAoB;UAC3C,IAAIT,OAAc,GAAI;UACtBvE,KAAKuG,4BAA4BhC,IAAYH;UAC7C;;;OAGR,KAAK;QACDhE,EAAMyE;QACN,MAAM2B,IAAoBZ,EAAkBA,EAAkBd,SAAS;QACvE,MAAM2B,IAA4BD,EAAkBP;QACpD,IAAIQ,GAA2B;QAC/B,IAAIrC,MAAgBkC,WAAW;UAC3BtG,KAAK2E;UACL;eACG;UACH,MAAMJ,IAAYvE,KAAKgF,oBAAoB;UAC3C,IAAIT,OAAc,GAAI;UACtBvE,KAAKuG,4BAA4BhC,IAAYH;UAC7C;;;OAGR,KAAK;QACDhE,EAAMyE;QACN7E,KAAK0E,8BAA8B;QACnC;;OAEJ,KAAK;QACDtE,EAAMyE;QACN7E,KAAK0E,8BAA8BJ,EAAWQ,SAAS;QACvD;;OAEJ,KAAK;QACD1E,EAAMyE;QACN7E,KAAK0E,8BAA8BO,KAAKC,IAAId,IAAc,IAAI;QAC9D;;OAEJ,KAAK;QACDhE,EAAMyE;QACN7E,KAAK0E,8BAA8BO,KAAKE,IAAIf,IAAc,IAAIE,EAAWQ,SAAS;QAClF;;OAEJ,KAAK;QACD,IAAIe,GAAU;QACd,IAAI7F,KAAK0D,YAAY1D,KAAKqD,SAAS,WAAW;QAC9C,IAAIrD,KAAKqD,SAAS,QAAQ;UACtBrD,KAAK2D,aAAaC,KAAK;YAAEC,MAAM;YAAOC,QAAQ;;UAC9C;;QAGJgC,IAAYxB,EAAWyB,MAAKC,KAAWA,EAAQC;QAC/C,KAAKH,KAAaA,EAAUI,UAAU;QACtClG,KAAKyD,aAAaqC;QAClB;;OAEJ,KAAK;OACL,KAAK;QACD,IAAI9F,KAAKoF,UAAUpF,KAAKqF,iBAAiB;QACzCrF,KAAK2D,aAAaC,KAAK;UAAEC,MAAM;UAAOC,QAAQ;;QAC9C;;OAEJ;QACI,IAAIO,GAAc;QAClB,KAAKL,EAAIsB,MAAM,WAAW;QAE1BtF,KAAKyE,cAAcT,GAAK;QACxB;;;IAgCZhE,KAAA0G,iBAAiB,CAACC,GAAkBC;;MAEhC,MAAMC,UAAU;QACZ7G,KAAK8G,aAAa9G,KAAK8G,eAAeR,YAAY,KAAKtG,KAAKoE,eAAe,KAAK;QAChF,MAAM2C,IAAO/G,KAAKsE,WAAW0C,KAAI,CAAChB,GAASiB,OAAK;UAAQjB;UAASiB;;QACjE,OAAO,KAAIF,EAAKG,MAAMlH,KAAK8G,gBAAgBC,EAAKG,MAAM,GAAGlH,KAAK8G;AAAY;MAG9E,MAAMK,aAAa;QACf,MAAMC,IAAM,IAAIpE;QAChB,IAAIoE,EAAIC,YAAYrH,KAAK6C,SAASE,cAAcsE,YAAY,KAAM;;UAE9DrH,KAAK6C,SAASC,MAAMgC,SAAS;;QAEjC,IAAI9E,KAAK6C,SAASC,MAAMgC,WAAW,KAAK9E,KAAK6C,SAASC,MAAM,OAAO6D,GAAU;UACzE3G,KAAK6C,SAASC,MAAMwE,KAAKX;;QAE7B3G,KAAK6C,SAASE,gBAAgBqE;AAAG;MAGrC,MAAMG,cAAeR;QACjB,MAAMS,IAASxH,KAAK6C,SAASC,MAAM2E,KAAK;QACxC,MAAMC,IAAkBlF,oBAAoBgF;QAC5C,OAAOT,EAAKhB,MAAK4B,MAERA,EAAE3B,QAAQE,YACXyB,EAAE3B,QAAQ4B,YACTD,EAAE3B,QAAQ4B,QAAQtC,MAAM,IAAIuC,OAAO,IAAIH,KAAmB,SACvDC,EAAE3B,QAAQ4B,QAAQlF,QAAQ,OAAO,IAAI4C,MAAM,IAAIuC,OAAO,IAAIH,KAAmB;AAEvF;MAGN,MAAMI,WAAW,EAAGb;QAChB,IAAIjH,KAAK0D,UAAU;;UAEf1D,KAAK0E,8BAA8BuC;eAChC;UACHjH,KAAKoE,cAAc6C;UACnB,IAAIL,GAAc;YACd5G,KAAKyD,aAAazD,KAAKsE,WAAW2C;YAClCjH,KAAK2D,aAAaC,KAAK;cAAEC,MAAM;cAAOC,QAAQ;;iBAC3C9D,KAAKqF,iBAAiB4B;;;MAIrCE;MACA,MAAMY,IAAUR,YAAYV;MAC5B,IAAIkB,GAAS;QACTD,SAASC;;;AAiHpB;;;EAhoBG,iBAAA1G;IACI2G,EAAiBhI,KAAK0B,aAAa;IACnC1B,KAAKiI,eAAejI,KAAK0B,YAAYC,iBACjC,6GACFmD;;EAGN,gBAAAoD;IACIC,EAAcnI,KAAK0B;IACnB1B,KAAKoI;IACLpI,KAAKqI;IACLrI,KAAKsI,MAAM1E;;EAGf,kBAAA2E;IACIvI,KAAKiD,qBAAqBnC,SAAQ0H,KAAMA;IACxCxI,KAAKiD,uBAAuB;;;;EAOhC,WAAAwF,CAAYrI;IACRA,EAAM+D;;EAIV,aAAAuE,CAActI;IACV,KAAKuI,EAAmBvI,GAAOJ,KAAK0B,cAAc;IAClD1B,KAAK2D,aAAaC,KAAK;MAAEC,MAAM;MAAMC,QAAQ;;IAC7C,OAAMM,aAAEA,KAAgBpE;IACxB,WAAWoE,MAAgB,YAAYA,KAAc,GAAI;MACrDpE,KAAK4I;MACL5I,KAAK6I;WACF;MACH7I,KAAK2E;;;;;EAQb,iBAAMmE;IACF,OAAO9I,KAAK+I;;EAIhB,gBAAMC;IACF,OAAOhJ,KAAKsE;;EAIhB,2BAAM2E,CAAsB7I;IACxBJ,KAAK+D,uBAAuB3D;;EAIhC,sBAAMiF,CAAiB4B;IACnBjH,KAAKoE,cAAc6C;IACnBjH,KAAK4I;IACL5I,KAAK6I;;EAIT,6BAAMlE;IACF3E,KAAKoE,cAAcpE,KAAK+E;IACxB/E,KAAK4I;IACL5I,KAAK6I;;;;EAOT,sBAAAR;IACI,IAAIrI,KAAK0D,UAAU;MACf1D,KAAKkJ;WACF;MACHlJ,KAAKmJ;;;EAKb,mBAAAC,CAAoBC;IAChB,IAAIA,KAAgBrJ,KAAKoD,gBAAgB0B,WAAW,GAAG;MACnD9E,KAAKqJ,eAAe;MACpB;;IAEJrJ,KAAKsE,WAAWxD,SAAQyC;MACpB,MAAM,wBAAwBA,IAAS;MACvCA,EAAO+F,qBAAqBD,KAAgB9F,EAAOgG,WAAW;AAAK;;;;EAO3E,eAAIR;IACA,MAAMS,IAAWxJ,KAAKyJ,YAAYzJ,KAAK0B;IACvC,MAAMgI,IAAe,IAAIC,IAAI,EAAC,eAAe,aAAa;IAC1D,OAAOH,EAASI,QAAO5D,KAAW0D,EAAaG,IAAI7D,EAAQ8D;;EAM/D,cAAIxF;IACA,MAAMyF,IAAW/J,KAAK+I;IAEtB,MAAMiB,iBACFC,KAEOA,EAASC,QAAO,CAACC,GAAKnE;MACzB,IAAIA,EAAQ8D,YAAY,eAAe9D,EAAQ8D,YAAY,oBAAoB;QAC3E,OAAQ9D,EAAgCoE,YAAYD,IAAM,KAAIA,GAAKnE;aAChE,IAAIA,EAAQ8D,YAAY,eAAe;QAC1C,OAAO,KAAIK,MAAQH,eAAenI,MAAMC,KAAKkE,EAAQqE;aAClD;QACH,OAAOF;;QAEZ;IAGP,OAAOH,eAAeD;;EAG1B,qBAAInE;IACA,OAAO5F,KAAKsE,WAAWsF,QACnBrG,MACKA,EAAO+G,aACL,wBAAwB/G,OAAYA,EAAO+F,wBAC7C/F,EAAO2C,eACL,mBAAmB3C,OAAYA,EAAOgH;;EAIrD,2BAAAhE,CAA4BiE;IACxBxK,KAAKoE,eAAeoG;IACpBxK,KAAK4I;IACL5I,KAAK6I;IACL7I,KAAKyK;;EAGT,YAAArC;IACI,OAAM/E,MAAEA,KAASrD;IACjB,KAAKqD,GAAM;IACX,MAAMqH,IAAarH,MAAS,SAAS,aAAa;IAClDrD,KAAKsE,WAAWxD,SAAQyC;MACpBA,EAAOoH,OAAOD;AAAU;;EAoHhC,oBAAAE,CAAqBrH;IACjB,OAAMqC,mBAAEA,GAAiBtB,YAAEA,KAAetE;IAC1C,MAAM6K,IAAgBjF,EAAkBd,SAAS;IACjD,IAAI+F,GAAe;MACf7K,KAAKqJ,eAAe;MACpB;;IAGJ,MAAMyB,IAA6BlF,EAAkBmF,QAAQxH;IAC7D,MAAMyH,IAA0BF,IAC1BA,IAA6B,IAC7BA,IAA6B;IACnC,MAAMG,IAAqBrF,EAAkBoF;IAC7C,MAAME,IAAmB5G,EAAWyG,QAAQE;IAE5CjL,KAAKoE,cAAc8G;IACnBlL,KAAK6I;IACL7I,KAAKiD,qBAAqBqE,MAAK;MAC3B,MAAM,wBAAwB/D,IAAS;MACvCA,EAAO+F,sBAAsB/F,EAAOgG;AAAQ;;EAIpD,qBAAAxE;IACI,OAAMT,YAAEA,KAAetE;IACvB,MAAMmL,IAAgB7G,EAAW8G,WAAUpF,KAChC,cAAcA,KAAWA,EAAQuD;IAE5C,IAAI4B,KAAgB,GAAI,OAAOA;IAE/B,MAAME,IAAe/G,EAAW8G,WAAUpF,MAAYA,EAAQsE;IAC9D,IAAIe,KAAe,GAAI,OAAOA;IAE9B,OAAO;;EAGX,mBAAArG,CAAoBsG;IAChB,OAAM1F,mBAAEA,GAAiBtB,YAAEA,GAAUF,aAAEA,KAAgBpE;IACvD,MAAMuL,IAAejH,EAAWF;IAChC,MAAMoH,IAA2B5F,EAAkBmF,QAAQQ;IAC3D,IAAIE,IAAyBD,IAA2BF;IAExD,IAAIG,IAAyB,GAAG;MAC5BA,IAAyB7F,EAAkBd,SAAS;WACjD,IAAI2G,IAAyB7F,EAAkBd,SAAS,GAAG;MAC9D2G,IAAyB;;IAG7B,MAAMC,IAAoB9F,EAAkB6F;IAC5C,OAAOnH,EAAWyG,QAAQW;;EAG9B,WAAAjC,CAAYzD;;IACR,MAAM2F,IAAO3F,EAAQ4F,cAAc;IACnC,MAAMC,KAAmBC,IAAAH,MAAI,QAAJA,WAAI,aAAJA,EAAME,wBAAsB,QAAAC,WAAA,IAAAA,IAAAjK,MAAMC,KAAKkE,EAAQqE;IACxE,MAAM0B,MAAmBF,EAAiB/G,UAAU+G,EAAiB,GAAG/B,YAAY;IACpF,IAAIiC,GAAgB;MAChB,OAAO/L,KAAKyJ,YAAYoC,EAAiB;WACtC;MACH,OAAOA;;;EA6Hf,mCAAMnH,CAA8BN;IAChC,IAAIpE,KAAKkG,UAAU;IACnBlG,KAAK2D,aAAaC,KAAK;MAAEC,MAAM;MAAMC,QAAQ;;UACvCkI;IACNhM,KAAKoE,cAAcA;IACnBpE,KAAK4I;IACL5I,KAAK6I;IACL7I,KAAKyK;;EAGT,UAAAwB;IACI,IAAIjM,KAAKkM,mBAAmB;MACxBC,aAAanM,KAAKkM;;IAGtBlM,KAAKkM,oBAAoBhL,OAAOkL,YAAW;MACvCpM,KAAKwE,eAAe;AAAI,QACzB;;EAGP,oBAAAiG;IACI,MAAMc,IAAevL,KAAKsE,WAAWtE,KAAKoE;IAC1C,KAAKmH,GAAc;IACnB,OAAMc,SAAEA,GAAOC,SAAEA,KAAYpL;IAC7BqK,EAAagB,eAAe;MAAEC,OAAO;;IACrCtL,OAAOuL,SAASJ,GAASC;;EAwD7B,aAAA7H,CAAcT,GAAa4C;IACvB5G,KAAKwE,eAAeR;IACpBhE,KAAK0G,eAAe1C,GAAK4C;;EAG7B,YAAAnD,CAAaiJ;IACT,OAAMhJ,UAAEA,GAAQ0B,UAAEA,GAAQiE,cAAEA,KAAiBrJ;IAC7C,KACK0M,KACDA,EAAexG,YACd,mBAAmBwG,KAAkBA,EAAenC,eAErD;IACJ,MAAMoC,IAAgBD,EAAeE;IACrC,MAAMC,IACF,aAAaH,KAAkBA,EAAe9E,UACxC8E,EAAe9E,UACf8E,EAAeI,UAAUC;IACnC,MAAMC,IAAc;MAChBJ,OAAOD;MACP/E,SAASiF;;IAGb,IAAII,IAAwB;IAC5B,IAAIvJ,GAAU;MACV,OAAMN,iBAAEA,KAAoBpD;MAC5B,MAAMkN,IAAoB9J,EAAgB2C,MAAKxC,KAAUA,EAAOqJ,UAAUD;MAE1E,IAAIO,GAAmB;QACnBD,IAAS7J,EAAgBwG,QAAO,EAAGgD,cAAYA,MAAUD;aACtD;QACHM,IAAS,KAAI7J,GAAiB4J;;MAGlC,IAAI3D,GAAcrJ,KAAK4K,qBAAqB8B;WACzC;MACHO,IAAS,EAACD;;IAGd,IAAI5H,GAAUpF,KAAKqF,iBAAiB,YAC/BrF,KAAKoD,kBAAkB6J;IAE5BtM,EAAWX,MAAM,EAAC,UAAU,eAAc;MAAE4M,OAAOD;MAAeM;;;EAGtE,eAAArE;IACI,MAAMxE,IAAcpE,KAAKoE;IAEzBpE,KAAKsE,WAAWxD,SAAQ,CAACkF,GAASmH;MAC9BnH,EAAQC,SAAS7B,MAAgB+I;AAAY;;EAIrD,gBAAAtE;IACI,MAAMtF,IAASvD,KAAKsE,WAAWtE,KAAKoE;IACpC,KAAKb,GAAQ;IAEb,MAAM6J,IAAkBC,EAAU9J;IAClC,IAAI6J,GAAiB7J,EAAO+J,MAAM;MAAEC,eAAe;aAC9C3I,GAAU,MAAMrB,EAAO+J,MAAM;MAAEC,eAAe;;;EAGvD,yBAAArE;IACI,OAAM5E,YAAEA,GAAUlB,iBAAEA,KAAoBpD;IACxC,MAAMwN,IAAiBpK,EAAgB4D,KAAI,EAAG4F,cAAYA;IAC1D,IAAI5M,KAAKoF,UAAU;IACnBd,EAAWxD,SAAQkF;MACf,MAAM,cAAcA,IAAU;MAC9BA,EAAQuD,WAAWiE,EAAetJ,SAAS8B,EAAQ4G;AAAM;;EAIjE,uBAAAzD;;IACI,OAAM7E,YAAEA,GAAUlB,iBAAEA,KAAoBpD;IACxC,MAAM2M,MAAgBb,IAAA1I,EAAgB,QAAI,QAAA0I,WAAA,aAAAA,EAAAc,UAAStG;IACnD,IAAItG,KAAKoF,UAAU;IACnBd,EAAWxD,SAAQkF;MACf,MAAM,cAAcA,IAAU;MAC9BA,EAAQuD,WAAWvD,EAAQ4G,UAAUD;AAAa;;;;EAO1D,MAAAc;IACI,OACIC,EAACC,GAAI;MAAA3J,KAAA;OACD0J,EACI;MAAA1J,KAAA;MAAA4J,OAAM;MACNC,KAAKC,KAAO9N,KAAK+N,iBAAiBD;MAClCE,YAAYhO,KAAKuF;OAEjBmI,EACI;MAAA1J,KAAA;MAAA4J,OAAM;MACM,cAAAzK,EAAI,mCAAmC,EAACnD,KAAKkD;MAAO,wBAC1ClD,KAAKqD,SAAS,SAASiD,YAAY,KAAKtG,KAAK0D;MACnEiH,MAAM3K,KAAKqD,QAAQ;MACnB4K,WAAWjO,KAAK2F;MAChBuI,SAASlO,KAAKsD;OAEdoK,EAAA;MAAA1J,KAAA;;;;;;;;;;;;;;;;ACtwBxB,MAAMmK,IAAe;;MCkDRC,IAAS;EADtB,WAAAtO,CAAAC;;;;;;eASIC,KAAaqO,gBAAG;IAChBrO,KAAkBsO,qBAAY;IAC9BtO,KAAuBuO,0BAAwB;;;QAY/CvO,KAAcwO,iBAAmC;IAGjDxO,KAAgByO,mBAAkBnI;;QAIlCtG,KAAI0O,OAAY;;;mFAOhB1O,KAAK2O,QAAqB;;;;;eAQ1B3O,KAAQ4O,WAAY;IA6BpB5O,KAAI6O,OAAa;IAkQjB7O,KAAe8O,kBAAG;MACd,IAAI9O,KAAK+O,WAAW;QAChBC,EAAyBhP,MAAM,aAAa;;;IAIpDA,KAAAiP,2BAA4B7O;MACxBO,EAAWX,MAAM,EAAC,uBAAuB,4BAA2B;QAAE6D,MAAMzD,EAAM8O,aAAa;;AAAS;IAW5GlP,KAAwBmP,2BAAGC;MACvB,OAAMC,gBAAEA,GAAcC,kBAAEA,GAAgBb,kBAAEA,GAAgBE,OAAEA,KAAU3O;MACtE,KAAKsP,GAAkB;MAEvB,IAAIX,MAAU,SAAS;QACnBW,EAAiBC,MAAMC,YAAY,oBAAoB;QACvDF,EAAiBC,MAAMC,YAAY,mBAAmB;aACnD;QACHF,EAAiBC,MAAMC,YAAY,mBAAmB;QACtDF,EAAiBC,MAAMC,YAAY,oBAAoB;;MAG3D,IAAIxP,KAAKwM,OAAO;QACZ8C,EAAiBC,MAAMC,YAAY,oBAAoB;;MAG3D,IAAIf,MAAqB,MAAM;QAC3B,MAAMgB,IAAeC,iBAAiBL;QACtC,MAAMM,IACFC,SAASH,EAAaI,UAAU,OAChCD,SAASH,EAAaK,kBAAkB,OACxCF,SAASH,EAAaM,qBAAqB;QAE/CT,EAAiBC,MAAMC,YAAY,qBAAqB,GAAGG;;;kBAIzD3D;MACN,IAAIhM,KAAKsP,kBAAkBA,EAAiBC,MAAMC,YAAY,sBAAsB;AAAI;IAmB5FxP,KAA0BgQ,6BAAGZ;;MACzB,OAAMC,gBAAEA,GAAcC,kBAAEA,GAAgBb,kBAAEA,GAAgBwB,UAAEA,GAAQtB,OAAEA,KAAU3O;MAChF,KAAKsP,GAAkB;MACvB,OACIY,KAAKC,GACLC,QAAQC,GACRC,MAAMC,GACNC,OAAOC,MACPC,KAAA5E,IAAAuD,MAAc,QAAdA,WAAc,aAAdA,EAAgBsB,2BAAqB,QAAA7E,WAAA,aAAAA,EAAA8E,KAAAvB,QAAQ,QAAAqB,WAAA,IAAAA,IAAA;QAC7CR,KAAK;QACLE,QAAQ;QACRE,MAAM;QACNE,OAAO;;MAGX,MAAMK,IAAsBN;MAC5B,MAAMO,MAAuBC,IAAA7P,WAAA,QAAAA,gBAAA,aAAAA,OAAQ8P,oBAAc,QAAAD,WAAA,aAAAA,EAAEE,SAAQR;MAE7D,IAAI9B,MAAU,SAAS;QACnBW,EAAiBC,MAAMC,YAAY,oBAAoB,GAAGsB,IAAe5P,OAAOmL;QAChFiD,EAAiBC,MAAMC,YAAY,mBAAmB;aACnD;QACHF,EAAiBC,MAAMC,YAAY,mBAAmB,GAAGqB,IAAc3P,OAAOmL;QAC9EiD,EAAiBC,MAAMC,YAAY,oBAAoB;;MAG3D,IAAIxP,KAAKwM,OAAO8C,EAAiBC,MAAMC,YAAY,oBAAoB,IAAGH,MAAc,QAAdA,WAAc,aAAdA,EAAgB6B,gBAAe;MAEzG,MAAMC,IAAqBlB,KAAYmB,EAAwBpR,KAAK0B;MAEpE,IAAI+M,MAAqB,MAAM;QAC3B,IAAIwB,MAAakB,GAAoB;UACjC7B,EAAiBC,MAAMC,YAAY,qBAAqB,GAAGtO,OAAOmQ,cAAclB;eAC7E;UACHb,EAAiBC,MAAMC,YACnB,qBACA,GAAGtO,OAAOmQ,cAAclB,IAAajP,OAAOoL;;;MAKxD,IAAImC,MAAqB,QAAQ;QAC7B,IAAIwB,MAAakB,GAAoB;UACjC7B,EAAiBC,MAAMC,YAAY,kBAAkB,GAAGa;eACrD;UACHf,EAAiBC,MAAMC,YAAY,kBAAkB,GAAGa,IAAgBnP,OAAOoL;;;;kBAKjFN;MACN,IAAIhM,KAAKsP,kBAAkBA,EAAiBC,MAAMC,YAAY,sBAAsB;AAAI;IAG5FxP,KAAesR,kBAAG;MACd,KAAKtR,KAAK6D,MAAM;MAChB7D,KAAKuR;AAAuB;IAGhCvR,KAA0BwR,6BAAG;MACzBxR,KAAKsO,qBAAqB;MAC1BtO,KAAKsR;AAAiB;AAkC7B;;;EAzYG,oBAAAnQ;;IACInB,KAAKyR;IACL,IAAIzR,KAAKuO,yBAAyB;MAC9BvO,KAAKuO;MACLvO,KAAKuO,0BAA0B;;KAEnCzC,IAAA9L,KAAKsP,sBAAgB,QAAAxD,WAAA,aAAAA,EAAE1K,oBAAoB,UAAUpB,KAAKiP;IAC1DjP,KAAKsP,mBAAmB;IACxBtP,KAAK+N,iBAAiB;IACtB/N,KAAKqP,iBAAiB;;EAG1B,iBAAAhO;IACI,KAAKrB,KAAK0R,oBAAoB;MAC1BC,QAAQC,KACJ;MAEJ5R,KAAK6O,OAAO;;;EAIpB,gBAAA3G;;IACIlI,KAAK8O;IACL,IAAI9O,KAAK0R,qBAAoB5F,IAAA9L,KAAKsP,sBAAgB,QAAAxD,WAAA,aAAAA,EAAE7K,iBAAiB,UAAUjB,KAAKiP;IACpF,IAAIjP,KAAK6D,MAAM7D,KAAKuR;;;;EAOxB,mBAAAM,CAAoBzR;IAChB,OACI0R,SAAQjO,MAAEA,MACVzD;IACJ,IAAIyD,MAAS7D,KAAK6D,MAAM;IAExB7D,KAAK6D,OAAOA;IACZzD,EAAM+D;;;;EAOV,uBAAM4N,CAAkBC;;KACpBlG,IAAA9L,KAAKsP,sBAAgB,QAAAxD,WAAA,aAAAA,EAAEW,SAASuF;;EAIpC,YAAMC;IACFjS,KAAK6D,QAAQ7D,KAAK6D;;;;EAOtB,iBAAAqO;IACIlS,KAAK8O;;EAIT,iBAAMqD,CAAYtO;IACdlD,EAAWX,MAAM,EAAC,uBAAuB,4BAA2B;MAAE6D;;IAEtE,IAAIA,GAAM;MACN7D,KAAKwO,iBAAiB;MACtBxO,KAAKoS;MACLpS,KAAKuR;WACF;MACHvR,KAAKwO,iBAAiB;MACtBxO,KAAKyR;;YAGL,IAAIzR,KAAK4O,UAAU;cACT,IAAIyD,SAAcC;;UACpB,MAAMC,qBAAqB;;YACvBvS,KAAKuO,0BAA0B;aAC/BzC,IAAA9L,KAAKsP,sBAAkB,QAAAxD,WAAA,aAAAA,EAAA1K,oBAAoB,gBAAgBmR;YAC3DD;AAAS;UAEbtS,KAAKuO,0BAA0BgE;WAC/BzG,IAAA9L,KAAKsP,sBAAkB,QAAAxD,WAAA,aAAAA,EAAA7K,iBAAiB,gBAAgBsR;UACxD,KAAKvS,KAAKsP,kBAAkBgD;AAAS;aAEtC;;cAEGtG;;MAGV,KAAKhM,KAAKsP,kBAAkB;MAE5BtP,KAAKyO,mBAAmBnI;MACxBtG,KAAKwO,iBAAiB;MACtB,IAAIxO,KAAK6O,SAAS,aAAa7O,KAAK0R,oBAAoB;QACpD1R,KAAK0O,OAAO;aACT;QACH1O,KAAKsP,iBAAiBkD;;YAGpBxG;MACNhM,KAAKyS;;;;;EAOb,YAAIxC;;IACA,MAAMyC,IAAWxR,WAAWA,OAAOgP;IACnC,MAAMyC,IAAwBC,OAAOC,MAAKnC,KAAA5E,IAAA5K,OAAO4R,YAAQ,QAAAhH,WAAA,aAAAA,EAAAiH,wBAAkB,QAAArC,WAAA,IAAAA,IAAI,IAAI5L,SAAS;IAC5F,OAAO4N,KAAYC;;EAGvB,qBAAIK;IACA,OAAM1H,WAAEA,KAActL;IACtB,QAAQsL;KACJ,KAAK;KACL,KAAK;MACD,OAAOA;;KACX;MACI,OAAOhF;;;EAInB,sBAAIoL;IACA,OAAOkB,OAAOK,OAAOC,YAAYC,WAAW;;EAGhD,sBAAIC;IACA,OAAMC,WAAEA,KAAcrT;IACtB,OAAOsT,MAAMD,KAAa/M,YAAY+M;;EAG1C,oBAAAjB;;IACIlR,OAAOD,iBAAiB,UAAUjB,KAAKwR;IACvCR,mBAAA,QAAAA,wBAAA,aAAAA,eAAgB/P,iBAAiB,UAAUjB,KAAKsR;IAChD,IAAIF,EAAwBpR,KAAK0B,iBAAiB6R,KAAY;MAC1DrS,OAAOD,iBAAiB,UAAUjB,KAAKsR,iBAAiB;QAAEkC,SAAS;QAAMC,SAAS;;;KAEtF3H,IAAA4H,WAAA,QAAAA,gBAAA,aAAAA,OAAQC,iBAAW,QAAA7H,WAAA,aAAAA,EAAE7K,iBAAiB,qBAAqBjB,KAAKwR;IAChEtQ,OAAOD,iBAAiB,qBAAqBjB,KAAKwR;;EAGtD,kBAAAiB;IACI,KAAKzS,KAAKsP,kBAAkB;IAC5BtP,KAAKsP,iBAAiBC,MAAMqE,eAAe;IAC3C5T,KAAKsP,iBAAiBC,MAAMqE,eAAe;IAC3C5T,KAAKsP,iBAAiBC,MAAMqE,eAAe;IAC3C5T,KAAKsP,iBAAiBC,MAAMqE,eAAe;IAC3C5T,KAAKsP,iBAAiBC,MAAMqE,eAAe;IAC3C5T,KAAKsP,iBAAiBC,MAAMqE,eAAe;IAC3C5T,KAAKsP,iBAAiBC,MAAMqE,eAAe;;EAG/C,2BAAMrC;;IACF,OAAMjC,kBAAEA,GAAgBD,gBAAEA,GAAc2D,mBAAEA,GAAiB3E,eAAEA,KAAkBrO;IAC/E,IAAIsP,GAAkBA,EAAiBC,MAAM8D,YAAY;UACnDrH;IACN,KAAKhM,KAAKsP,kBAAkB;IAE5B,OAAMW,UAAEA,KAAajQ;IACrB,OAAQkQ,KAAKC,GAAYC,QAAQC,MAAkBK,KAAA5E,IAAAuD,MAAc,QAAdA,WAAc,aAAdA,EAAgBsB,2BAAqB,QAAA7E,WAAA,aAAAA,EAAA8E,KAAAvB,QAAQ,QAAAqB,WAAA,IAAAA,IAAA;MAC5FR,KAAK;MACLE,QAAQ;;IAGZ,IAAIyD;IACJ,IAAIC;IACJ,IAAIC;IACJ,MAAM5C,IAAqBlB,KAAYmB,EAAwBpR,KAAK0B;IACpE,IAAIuO,MAAakB,GAAoB;MACjC,OAAM6C,cACFA,IAAe,GAAC3C,aAChBA,IAAcnQ,OAAOmQ,aACrBnB,KAAK+D,IAAe,GACpB7D,QAAQ8D,IAAkB,OAC1BnD,IAAA7P,OAAO4R,YAAM,QAAA/B,WAAA,aAAAA,EAAEgC,uBAAsB;MAEzC,MAAMoB,IAAyBjT,OAAOmQ,cAAchB;;YAGpD,MAAM+D,IAAmBJ,IAAe,IAAI7D,IAAaA,IAAa6D,IAAeC;MACrF,MAAMI,IAAsBL,IAAe3D,IAAgB4D;;YAG3D,MAAMK,IAAqBF;MAC3B,MAAMG,IAAqBlD,IAAc6C,IAAkBG;;YAG3D,MAAMG,IAA4BL,IAAyBI;MAC3DT,IAAgBQ,IAAqBjG;MACrC0F,IAAgBS,IACVL,IAAyB9F,IACzBkG,IAAqBlG;WACxB;MACHwF,IAAe3S,OAAOmQ;MACtByC,IAAgB3D,IAAa9B;MAC7B0F,IAAgBF,IAAexD,IAAgBhC;;IAGnD,MAAMoG,IAAwCX,IAAgBC,IAAgB,OAAO;;QAGrF,MAAMW,MACDpF,MAAA,QAAAA,WAAgB,aAAhBA,EAAkBC,MAAMoF,iBAAiB,6BAA4B3U,KAAKsO;;QAE/EtO,KAAKsO,qBAAqB;IAC1B,MAAMsG,IAA8B5U,KAAKyO,oBAAoBuE,KAAqByB;IAElF,QAAQG;KACJ,KAAK;MACD,IAAIF,KAAyBpF,GAAkB;QAC3C,MAAMuF,IAAoB7U,KAAKoT,sBAAsBU;QACrD,MAAMT,IAAYpO,KAAKE,IAAI2O,GAAee;QAC1CvF,EAAiBC,MAAMC,YAAY,yBAAyB,GAAG6D;;MAEnErT,KAAK8U,oBAAoB;MACzB;;KACJ,KAAK;MACD,IAAIJ,KAAyBpF,GAAkB;QAC3C,MAAMuF,IAAoB7U,KAAKoT,sBAAsBW;QACrD,MAAMV,IAAYpO,KAAKE,IAAI4O,GAAec;QAC1CvF,EAAiBC,MAAMC,YAAY,yBAAyB,GAAG6D;;MAEnErT,KAAK8U,oBAAoB;MACzB;;;EAgBZ,uBAAArD;;IACIvQ,OAAOE,oBAAoB,UAAUpB,KAAKwR;IAC1CR,mBAAA,QAAAA,wBAAA,aAAAA,eAAgB5P,oBAAoB,UAAUpB,KAAKsR;IACnDpQ,OAAOE,oBAAoB,UAAUpB,KAAKsR,iBAAiB;MAAEmC,SAAS;;KACtE3H,IAAA4H,WAAA,QAAAA,gBAAA,aAAAA,OAAQC,iBAAW,QAAA7H,WAAA,aAAAA,EAAE1K,oBAAoB,qBAAqBpB,KAAKwR;IACnEtQ,OAAOE,oBAAoB,qBAAqBpB,KAAKwR;;EAkCzD,mBAAAsD,CAAoBxJ;;;;QAGhB,MAAMyJ,IAAS/U,KAAK6D;IACpB,KAAKkR,MAAW/U,KAAKsP,kBAAkB;IAEvCtP,KAAKyO,mBAAmBnD;IACxB,IAAItL,KAAK6O,SAAS,aAAa7O,KAAK0R,oBAAoB;MACpD1R,KAAK0O,OAAO;MACZ1O,KAAKmP;WACF;MACHnP,KAAKgQ;OACLlE,IAAA9L,KAAKsP,sBAAkB,QAAAxD,WAAA,aAAAA,EAAAkJ;;;;;EAuE/B,MAAAvH;IACI,MAAMwH,IAAmB,EAAC,aAAajV,KAAKyO,kBAAkBzO,KAAK2O;IACnE,IAAI4E,KAAY0B,EAAiB3N,KAAK;IACtC,IAAItH,KAAK0O,MAAMuG,EAAiB3N,KAAK;IACrC,IAAItH,KAAKwM,OAAOyI,EAAiB3N,KAAK;IACtC,IAAItH,KAAK6O,SAAS,UAAUoG,EAAiB3N,KAAK;IAClD,IAAItH,KAAK4O,YAAY5O,KAAKwO,mBAAmB,WAAWyG,EAAiB3N,KAAK;IAC9E,IAAItH,KAAK4O,YAAY5O,KAAKwO,mBAAmB,WAAWyG,EAAiB3N,KAAK;IAE9E,OACIoG,EAAA;MAAA1J,KAAA;MACI6J,KAAKC,KAAO9N,KAAKsP,mBAAmBxB;MACpCF,OAAOqH,EAAiBxN,KAAK;MACrB;MACRyN,WAAU;MACVC,SAAQ;OAERzH,EAAA;MAAA1J,KAAA;MACI6J,KAAKC,KAAO9N,KAAK+N,iBAAiBD;MAClCF,OAAM;OAENF,EAAQ;MAAA1J,KAAA","ignoreList":[]}
@@ -217,16 +217,16 @@ const s = class {
217
217
  }));
218
218
  this.handleFullWidth(!!n);
219
219
  return i("q2-resize-observer", {
220
- key: "1f234887657142b616d3c3a448c6bfe69deabb81",
220
+ key: "90c4038fda5346ea144fbe3bc2c5b77ab7e883cc",
221
221
  onTctResize: this.handleResize,
222
222
  disabled: t
223
223
  }, i("div", {
224
- key: "0298fbe6f835d81f3949dbc593e49f9127dc8869",
224
+ key: "acfc1be2dac34f29bdb3c9a9ff723b0810ac0705",
225
225
  ref: t => this.container = t,
226
226
  class: r.join(" "),
227
227
  role: "group"
228
228
  }, i("slot", {
229
- key: "20a11efddeae42e71a0c08804176c2ce9f6ef017"
229
+ key: "ec63003e0b662ec70d5882efdfef7760699954b9"
230
230
  })));
231
231
  }
232
232
  get hostElement() {
@@ -321,7 +321,7 @@ const l = class {
321
321
  // #region Render Methods
322
322
  render() {
323
323
  return i("slot", {
324
- key: "2cf512a7e20957cca3fa7339875f2015effe829e",
324
+ key: "f415d8b1adcb2cdfd6e76d09e9865fbfbeb2371e",
325
325
  onSlotchange: this.handleSlotChange
326
326
  });
327
327
  }
@@ -226,32 +226,32 @@ const h = class {
226
226
  const s = (o === null || o === void 0 ? void 0 : o.appearance) || "slot";
227
227
  const n = `interior is-${s}`;
228
228
  return i("dialog", {
229
- key: "94fc384fe3294c65180803cba588b2a62a49134e",
229
+ key: "077f6e7ab0a5a6102cabf09ab4d80059759f24e4",
230
230
  ref: t => this.dialogElement = t,
231
231
  class: a,
232
232
  onClick: this.onClick
233
233
  }, i("div", {
234
- key: "0a9f4c75b07a2fe561e470466eae7afee5cec939",
234
+ key: "43ee070fa56554f895e8d1ff86c81699cd69e3ef",
235
235
  class: n
236
236
  }, e && i("header", {
237
- key: "1ae290edbfbfd146867a19b9a926bfd596cfe4e8"
237
+ key: "6a846ed9be91c7d6f2892d8ed6d38327a9f8f15a"
238
238
  }, i("div", {
239
- key: "e297191a3d9a4b351c8f3527174b6823e5bc9b1b",
239
+ key: "f4a3b768f9ad448f05f4745d38f1598a4a3b3886",
240
240
  class: "title"
241
241
  }, (o === null || o === void 0 ? void 0 : o.title) || this.title), !this.hideClose && i("q2-btn", {
242
- key: "3b8caf287bbfb9d2faa3de15a987a30a4d6487eb",
242
+ key: "5e51264235990b96ad0ccdfe73d9dc0ac3d03267",
243
243
  class: "btn-close",
244
244
  "test-id": "btnClose",
245
245
  onClick: this.onCancel,
246
246
  label: "tecton.element.actionSheet.close",
247
247
  "hide-label": true
248
248
  }, i("q2-icon", {
249
- key: "6b5d8c410bef11176960292f90d51f9176c62d1c",
249
+ key: "8c049f7b79abddf1552dd265d4a9654b9e8aa9c1",
250
250
  type: "close"
251
251
  }))), ((t = this.data) === null || t === void 0 ? void 0 : t.description) && i("p", {
252
- key: "2fe29408f3a3af7ac25f3af9d6ae495ae113846c"
252
+ key: "bc3ab1f5cfe359ccad839f46eaf5b5eef5975322"
253
253
  }, o.description), r && i(r, {
254
- key: "c1494556026b26cf295f322d885787698ed7e8c9",
254
+ key: "5225ff71d47bc8ef4f4963246976b94420daf1b3",
255
255
  data: this.data
256
256
  })));
257
257
  }
@@ -83,16 +83,16 @@ const i = class {
83
83
  const i = (this.name || this.initials) && (!this.src || this.badSrc);
84
84
  const o = !this.name && !this.initials && (!this.src || this.badSrc);
85
85
  return t("div", {
86
- key: "0b0763459eef36a6c1b732ffe072ddea6ad7068f",
86
+ key: "bdce1116b87a48c861e7ba66e0dccd13829d3819",
87
87
  class: `avatar-wrapper size-${this.size}`
88
88
  }, this.hasDecorator && t("div", {
89
- key: "4d2f13a0aeb738b77b9b4fd1e9295b39ee2902e0",
89
+ key: "461db5f2062faa3c4d7f43105c84c51aabc179d8",
90
90
  class: "decorator"
91
91
  }, t("slot", {
92
- key: "fdace597ad36d65c598ec8e769c60d7216b20d6c",
92
+ key: "673a93a53a752514bce15687f5791682fdf3b0b7",
93
93
  name: "decorator"
94
94
  })), r && t("img", {
95
- key: "171f2a32c21251cab74c48906708c2519ecdccd9",
95
+ key: "fa881cb161c7f2bf64dabc1cf888d465e4698cb9",
96
96
  class: `${e ? "avatar-img" : "avatar-img-default"}`,
97
97
  "test-id": "userImage",
98
98
  src: this.src,
@@ -100,7 +100,7 @@ const i = class {
100
100
  onLoad: this.onLoad,
101
101
  alt: this.name || ""
102
102
  }), i && t("svg", {
103
- key: "bdbdbf84cdae92c7267a30f85ac705505843e8ba",
103
+ key: "6d8707c833fed056813f81b9014e82584444fa54",
104
104
  viewBox: "0 0 100 100",
105
105
  preserveAspectRatio: "xMidYMid meet",
106
106
  "test-id": "userInitials",
@@ -108,18 +108,18 @@ const i = class {
108
108
  "aria-label": this.name,
109
109
  "aria-hidden": !this.name && "true"
110
110
  }, t("text", {
111
- key: "ae24a23a880a1f39dd760e90f81e3923769ca518",
111
+ key: "ae99c0b68abaa70e9517dee3dfe6dfdccdad13d6",
112
112
  x: "50",
113
113
  y: "50",
114
114
  "dominant-baseline": "central",
115
115
  "text-anchor": "middle",
116
116
  "aria-hidden": "true"
117
117
  }, a)), o && t("div", {
118
- key: "f80ef047816ad7c16017e9f0c0f5d983f3a69011",
118
+ key: "df92213216e69c7d933fdfcd4ba1664cee793e14",
119
119
  "test-id": "fallbackIcon",
120
120
  class: "fallback"
121
121
  }, t("q2-icon", {
122
- key: "b2e96f1431ef35b35811937b6008badd4c415f97",
122
+ key: "373a344abc59c1e8ea07472d932d5417265582d3",
123
123
  type: this.icon
124
124
  })));
125
125
  }