q2-tecton-elements 1.57.2 → 1.57.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (238) hide show
  1. package/dist/bundle-report.json +440 -434
  2. package/dist/cjs/app-globals-V2Kpy_OQ.js +8 -0
  3. package/dist/cjs/app-globals-V2Kpy_OQ.js.map +1 -0
  4. package/dist/cjs/click-elsewhere.cjs.entry.js +1 -1
  5. package/dist/cjs/{index-zMAVnBYO.js → index-JnAD7tEB.js} +24 -147
  6. package/dist/cjs/index-JnAD7tEB.js.map +1 -0
  7. package/dist/cjs/{index-DRPUzMCR.js → index-rwi7bp0v.js} +35 -3
  8. package/dist/cjs/index-rwi7bp0v.js.map +1 -0
  9. package/dist/cjs/loader.cjs.js +3 -2
  10. package/dist/cjs/loader.cjs.js.map +1 -1
  11. package/dist/cjs/q2-action-group_2.cjs.entry.js +2 -2
  12. package/dist/cjs/q2-action-sheet.cjs.entry.js +2 -2
  13. package/dist/cjs/q2-avatar.cjs.entry.js +1 -1
  14. package/dist/cjs/q2-badge_7.cjs.entry.js +3 -3
  15. package/dist/cjs/q2-calendar.cjs.entry.js +2 -2
  16. package/dist/cjs/q2-card.cjs.entry.js +2 -2
  17. package/dist/cjs/q2-carousel-pane.cjs.entry.js +2 -2
  18. package/dist/cjs/q2-carousel.cjs.entry.js +2 -2
  19. package/dist/cjs/q2-chart-area.cjs.entry.js +2 -2
  20. package/dist/cjs/q2-chart-bar.cjs.entry.js +2 -2
  21. package/dist/cjs/q2-chart-donut.cjs.entry.js +2 -2
  22. package/dist/cjs/q2-checkbox-group.cjs.entry.js +2 -2
  23. package/dist/cjs/q2-checkbox.cjs.entry.js +2 -2
  24. package/dist/cjs/q2-context.cjs.entry.js +2 -2
  25. package/dist/cjs/q2-currency.cjs.entry.js +1 -1
  26. package/dist/cjs/q2-data-table.cjs.entry.js +2 -2
  27. package/dist/cjs/q2-detail.cjs.entry.js +2 -2
  28. package/dist/cjs/q2-dropdown-item.cjs.entry.js +2 -2
  29. package/dist/cjs/q2-dropdown.cjs.entry.js +5 -3
  30. package/dist/cjs/q2-dropdown.cjs.entry.js.map +1 -1
  31. package/dist/cjs/q2-dropdown.entry.cjs.js.map +1 -1
  32. package/dist/cjs/q2-editable-field.cjs.entry.js +2 -2
  33. package/dist/cjs/q2-example.cjs.entry.js +1 -1
  34. package/dist/cjs/q2-file-picker.cjs.entry.js +2 -2
  35. package/dist/cjs/q2-form.cjs.entry.js +1 -1
  36. package/dist/cjs/q2-formatted-text.cjs.entry.js +1 -1
  37. package/dist/cjs/q2-grid-area.cjs.entry.js +1 -1
  38. package/dist/cjs/q2-grid.cjs.entry.js +1 -1
  39. package/dist/cjs/q2-item.cjs.entry.js +2 -2
  40. package/dist/cjs/q2-legend.cjs.entry.js +1 -1
  41. package/dist/cjs/q2-link_2.cjs.entry.js +2 -2
  42. package/dist/cjs/q2-loading-element.cjs.entry.js +2 -2
  43. package/dist/cjs/q2-loc.cjs.entry.js +2 -2
  44. package/dist/cjs/q2-message.cjs.entry.js +2 -2
  45. package/dist/cjs/q2-modal.cjs.entry.js +2 -2
  46. package/dist/cjs/q2-month-picker.cjs.entry.js +2 -2
  47. package/dist/cjs/q2-optgroup.cjs.entry.js +2 -2
  48. package/dist/cjs/q2-option-list.q2-popover.entry.cjs.js.map +1 -1
  49. package/dist/cjs/q2-option-list_2.cjs.entry.js +20 -15
  50. package/dist/cjs/q2-option-list_2.cjs.entry.js.map +1 -1
  51. package/dist/cjs/q2-option.cjs.entry.js +2 -2
  52. package/dist/cjs/q2-pagination.cjs.entry.js +2 -2
  53. package/dist/cjs/q2-pill.cjs.entry.js +2 -2
  54. package/dist/cjs/q2-radio-group.cjs.entry.js +2 -2
  55. package/dist/cjs/q2-radio.cjs.entry.js +2 -2
  56. package/dist/cjs/q2-relative-time.cjs.entry.js +2 -2
  57. package/dist/cjs/q2-section.cjs.entry.js +2 -2
  58. package/dist/cjs/q2-select.cjs.entry.js +44 -4
  59. package/dist/cjs/q2-select.cjs.entry.js.map +1 -1
  60. package/dist/cjs/q2-select.entry.cjs.js.map +1 -1
  61. package/dist/cjs/q2-stepper-pane.cjs.entry.js +2 -2
  62. package/dist/cjs/q2-stepper-vertical.cjs.entry.js +2 -2
  63. package/dist/cjs/q2-stepper.cjs.entry.js +2 -2
  64. package/dist/cjs/q2-tag.cjs.entry.js +2 -2
  65. package/dist/cjs/q2-tecton-elements.cjs.js +4 -24
  66. package/dist/cjs/q2-tecton-elements.cjs.js.map +1 -1
  67. package/dist/cjs/q2-textarea.cjs.entry.js +2 -2
  68. package/dist/cjs/q2-tooltip.cjs.entry.js +2 -2
  69. package/dist/cjs/{shapes-DDw2Fhwn.js → shapes-CUFxQAvI.js} +3 -3
  70. package/dist/cjs/{shapes-DDw2Fhwn.js.map → shapes-CUFxQAvI.js.map} +1 -1
  71. package/dist/cjs/tecton-tab-pane.cjs.entry.js +1 -1
  72. package/dist/collection/collection-manifest.json +1 -1
  73. package/dist/collection/components/q2-dropdown/q2-dropdown.js +3 -1
  74. package/dist/collection/components/q2-dropdown/q2-dropdown.js.map +1 -1
  75. package/dist/collection/components/q2-popover/q2-popover.js +19 -14
  76. package/dist/collection/components/q2-popover/q2-popover.js.map +1 -1
  77. package/dist/collection/components/q2-select/q2-select.js +42 -2
  78. package/dist/collection/components/q2-select/q2-select.js.map +1 -1
  79. package/dist/collection/utils/index.js +34 -0
  80. package/dist/collection/utils/index.js.map +1 -1
  81. package/dist/components/index2.js +32 -1
  82. package/dist/components/index2.js.map +1 -1
  83. package/dist/components/q2-dropdown.js +3 -1
  84. package/dist/components/q2-dropdown.js.map +1 -1
  85. package/dist/components/q2-popover2.js +19 -14
  86. package/dist/components/q2-popover2.js.map +1 -1
  87. package/dist/components/q2-select2.js +43 -3
  88. package/dist/components/q2-select2.js.map +1 -1
  89. package/dist/esm/app-globals-DQuL1Twl.js +6 -0
  90. package/dist/esm/app-globals-DQuL1Twl.js.map +1 -0
  91. package/dist/esm/click-elsewhere.entry.js +1 -1
  92. package/dist/esm/{index-C7zSUT3M.js → index-COzomxjJ.js} +25 -146
  93. package/dist/esm/index-COzomxjJ.js.map +1 -0
  94. package/dist/esm/{index-y0xcWkDl.js → index-EcLnUn1d.js} +35 -4
  95. package/dist/esm/index-EcLnUn1d.js.map +1 -0
  96. package/dist/esm/loader.js +3 -2
  97. package/dist/esm/loader.js.map +1 -1
  98. package/dist/esm/q2-action-group_2.entry.js +2 -2
  99. package/dist/esm/q2-action-sheet.entry.js +2 -2
  100. package/dist/esm/q2-avatar.entry.js +1 -1
  101. package/dist/esm/q2-badge_7.entry.js +3 -3
  102. package/dist/esm/q2-calendar.entry.js +2 -2
  103. package/dist/esm/q2-card.entry.js +2 -2
  104. package/dist/esm/q2-carousel-pane.entry.js +2 -2
  105. package/dist/esm/q2-carousel.entry.js +2 -2
  106. package/dist/esm/q2-chart-area.entry.js +2 -2
  107. package/dist/esm/q2-chart-bar.entry.js +2 -2
  108. package/dist/esm/q2-chart-donut.entry.js +2 -2
  109. package/dist/esm/q2-checkbox-group.entry.js +2 -2
  110. package/dist/esm/q2-checkbox.entry.js +2 -2
  111. package/dist/esm/q2-context.entry.js +2 -2
  112. package/dist/esm/q2-currency.entry.js +1 -1
  113. package/dist/esm/q2-data-table.entry.js +2 -2
  114. package/dist/esm/q2-detail.entry.js +2 -2
  115. package/dist/esm/q2-dropdown-item.entry.js +2 -2
  116. package/dist/esm/q2-dropdown.entry.js +5 -3
  117. package/dist/esm/q2-dropdown.entry.js.map +1 -1
  118. package/dist/esm/q2-editable-field.entry.js +2 -2
  119. package/dist/esm/q2-example.entry.js +1 -1
  120. package/dist/esm/q2-file-picker.entry.js +2 -2
  121. package/dist/esm/q2-form.entry.js +1 -1
  122. package/dist/esm/q2-formatted-text.entry.js +1 -1
  123. package/dist/esm/q2-grid-area.entry.js +1 -1
  124. package/dist/esm/q2-grid.entry.js +1 -1
  125. package/dist/esm/q2-item.entry.js +2 -2
  126. package/dist/esm/q2-legend.entry.js +1 -1
  127. package/dist/esm/q2-link_2.entry.js +2 -2
  128. package/dist/esm/q2-loading-element.entry.js +2 -2
  129. package/dist/esm/q2-loc.entry.js +2 -2
  130. package/dist/esm/q2-message.entry.js +2 -2
  131. package/dist/esm/q2-modal.entry.js +2 -2
  132. package/dist/esm/q2-month-picker.entry.js +2 -2
  133. package/dist/esm/q2-optgroup.entry.js +2 -2
  134. package/dist/esm/q2-option-list.q2-popover.entry.js.map +1 -1
  135. package/dist/esm/q2-option-list_2.entry.js +20 -15
  136. package/dist/esm/q2-option-list_2.entry.js.map +1 -1
  137. package/dist/esm/q2-option.entry.js +2 -2
  138. package/dist/esm/q2-pagination.entry.js +2 -2
  139. package/dist/esm/q2-pill.entry.js +2 -2
  140. package/dist/esm/q2-radio-group.entry.js +2 -2
  141. package/dist/esm/q2-radio.entry.js +2 -2
  142. package/dist/esm/q2-relative-time.entry.js +2 -2
  143. package/dist/esm/q2-section.entry.js +2 -2
  144. package/dist/esm/q2-select.entry.js +44 -4
  145. package/dist/esm/q2-select.entry.js.map +1 -1
  146. package/dist/esm/q2-stepper-pane.entry.js +2 -2
  147. package/dist/esm/q2-stepper-vertical.entry.js +2 -2
  148. package/dist/esm/q2-stepper.entry.js +2 -2
  149. package/dist/esm/q2-tag.entry.js +2 -2
  150. package/dist/esm/q2-tecton-elements.js +4 -24
  151. package/dist/esm/q2-tecton-elements.js.map +1 -1
  152. package/dist/esm/q2-textarea.entry.js +2 -2
  153. package/dist/esm/q2-tooltip.entry.js +2 -2
  154. package/dist/esm/{shapes-DO0UnuKe.js → shapes-BrIjALih.js} +3 -3
  155. package/dist/esm/{shapes-DO0UnuKe.js.map → shapes-BrIjALih.js.map} +1 -1
  156. package/dist/esm/tecton-tab-pane.entry.js +1 -1
  157. package/dist/jest.setup.js +11 -0
  158. package/dist/jest.setup.js.map +1 -1
  159. package/dist/q2-tecton-elements/app-globals-DQuL1Twl.js +5 -0
  160. package/dist/q2-tecton-elements/app-globals-DQuL1Twl.js.map +1 -0
  161. package/dist/q2-tecton-elements/click-elsewhere.entry.js +1 -1
  162. package/dist/q2-tecton-elements/{index-C7zSUT3M.js → index-COzomxjJ.js} +465 -585
  163. package/dist/q2-tecton-elements/index-COzomxjJ.js.map +1 -0
  164. package/dist/q2-tecton-elements/{index-y0xcWkDl.js → index-EcLnUn1d.js} +72 -47
  165. package/dist/q2-tecton-elements/index-EcLnUn1d.js.map +1 -0
  166. package/dist/q2-tecton-elements/loader.esm.js.map +1 -1
  167. package/dist/q2-tecton-elements/q2-action-group_2.entry.js +2 -2
  168. package/dist/q2-tecton-elements/q2-action-sheet.entry.js +2 -2
  169. package/dist/q2-tecton-elements/q2-avatar.entry.js +1 -1
  170. package/dist/q2-tecton-elements/q2-badge_7.entry.js +54 -54
  171. package/dist/q2-tecton-elements/q2-calendar.entry.js +2 -2
  172. package/dist/q2-tecton-elements/q2-card.entry.js +35 -35
  173. package/dist/q2-tecton-elements/q2-carousel-pane.entry.js +2 -2
  174. package/dist/q2-tecton-elements/q2-carousel.entry.js +2 -2
  175. package/dist/q2-tecton-elements/q2-chart-area.entry.js +2 -2
  176. package/dist/q2-tecton-elements/q2-chart-bar.entry.js +2 -2
  177. package/dist/q2-tecton-elements/q2-chart-donut.entry.js +10 -10
  178. package/dist/q2-tecton-elements/q2-checkbox-group.entry.js +2 -2
  179. package/dist/q2-tecton-elements/q2-checkbox.entry.js +2 -2
  180. package/dist/q2-tecton-elements/q2-context.entry.js +2 -2
  181. package/dist/q2-tecton-elements/q2-currency.entry.js +1 -1
  182. package/dist/q2-tecton-elements/q2-data-table.entry.js +2 -2
  183. package/dist/q2-tecton-elements/q2-detail.entry.js +2 -2
  184. package/dist/q2-tecton-elements/q2-dropdown-item.entry.js +5 -5
  185. package/dist/q2-tecton-elements/q2-dropdown.entry.esm.js.map +1 -1
  186. package/dist/q2-tecton-elements/q2-dropdown.entry.js +16 -14
  187. package/dist/q2-tecton-elements/q2-dropdown.entry.js.map +1 -1
  188. package/dist/q2-tecton-elements/q2-editable-field.entry.js +2 -2
  189. package/dist/q2-tecton-elements/q2-example.entry.js +1 -1
  190. package/dist/q2-tecton-elements/q2-file-picker.entry.js +2 -2
  191. package/dist/q2-tecton-elements/q2-form.entry.js +1 -1
  192. package/dist/q2-tecton-elements/q2-formatted-text.entry.js +1 -1
  193. package/dist/q2-tecton-elements/q2-grid-area.entry.js +1 -1
  194. package/dist/q2-tecton-elements/q2-grid.entry.js +1 -1
  195. package/dist/q2-tecton-elements/q2-item.entry.js +2 -2
  196. package/dist/q2-tecton-elements/q2-legend.entry.js +1 -1
  197. package/dist/q2-tecton-elements/q2-link_2.entry.js +2 -2
  198. package/dist/q2-tecton-elements/q2-loading-element.entry.js +2 -2
  199. package/dist/q2-tecton-elements/q2-loc.entry.js +2 -2
  200. package/dist/q2-tecton-elements/q2-message.entry.js +16 -16
  201. package/dist/q2-tecton-elements/q2-modal.entry.js +2 -2
  202. package/dist/q2-tecton-elements/q2-month-picker.entry.js +2 -2
  203. package/dist/q2-tecton-elements/q2-optgroup.entry.js +2 -2
  204. package/dist/q2-tecton-elements/q2-option-list.q2-popover.entry.esm.js.map +1 -1
  205. package/dist/q2-tecton-elements/q2-option-list_2.entry.js +57 -52
  206. package/dist/q2-tecton-elements/q2-option-list_2.entry.js.map +1 -1
  207. package/dist/q2-tecton-elements/q2-option.entry.js +2 -2
  208. package/dist/q2-tecton-elements/q2-pagination.entry.js +2 -2
  209. package/dist/q2-tecton-elements/q2-pill.entry.js +2 -2
  210. package/dist/q2-tecton-elements/q2-radio-group.entry.js +24 -24
  211. package/dist/q2-tecton-elements/q2-radio.entry.js +5 -5
  212. package/dist/q2-tecton-elements/q2-relative-time.entry.js +5 -5
  213. package/dist/q2-tecton-elements/q2-section.entry.js +2 -2
  214. package/dist/q2-tecton-elements/q2-select.entry.esm.js.map +1 -1
  215. package/dist/q2-tecton-elements/q2-select.entry.js +43 -4
  216. package/dist/q2-tecton-elements/q2-select.entry.js.map +1 -1
  217. package/dist/q2-tecton-elements/q2-stepper-pane.entry.js +2 -2
  218. package/dist/q2-tecton-elements/q2-stepper-vertical.entry.js +2 -2
  219. package/dist/q2-tecton-elements/q2-stepper.entry.js +2 -2
  220. package/dist/q2-tecton-elements/q2-tag.entry.js +2 -2
  221. package/dist/q2-tecton-elements/q2-tecton-elements.esm.js +11 -31
  222. package/dist/q2-tecton-elements/q2-tecton-elements.esm.js.map +1 -1
  223. package/dist/q2-tecton-elements/q2-textarea.entry.js +2 -2
  224. package/dist/q2-tecton-elements/q2-tooltip.entry.js +2 -2
  225. package/dist/q2-tecton-elements/{shapes-DO0UnuKe.js → shapes-BrIjALih.js} +3 -3
  226. package/dist/q2-tecton-elements/{shapes-DO0UnuKe.js.map → shapes-BrIjALih.js.map} +1 -1
  227. package/dist/q2-tecton-elements/tecton-tab-pane.entry.js +1 -1
  228. package/dist/types/builds/q2e/development/tecton/tecton/packages/q2-tecton-elements/.stencil/jest.setup.d.ts +9 -0
  229. package/dist/types/components/q2-select/q2-select.d.ts +4 -0
  230. package/dist/types/stencil-public-runtime.d.ts +1 -1
  231. package/dist/types/utils/index.d.ts +2 -0
  232. package/package.json +4 -4
  233. package/dist/cjs/index-DRPUzMCR.js.map +0 -1
  234. package/dist/cjs/index-zMAVnBYO.js.map +0 -1
  235. package/dist/esm/index-C7zSUT3M.js.map +0 -1
  236. package/dist/esm/index-y0xcWkDl.js.map +0 -1
  237. package/dist/q2-tecton-elements/index-C7zSUT3M.js.map +0 -1
  238. package/dist/q2-tecton-elements/index-y0xcWkDl.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"names":["sanitizeRegexString","regexString","replace","q2OptionListCss","Q2OptionList","constructor","hostRef","this","keyStore","queue","lastPressedAt","Date","scheduledAfterRender","label","loc","selectedOptions","type","clickHandler","event","target","option","closest","selectOption","multiple","popoverState","emit","open","action","externalKeydownHandler","stopPropagation","activeIndex","customSearch","allOptions","key","nextIndex","searchString","searchOptions","openDropdownWithActiveElement","setDefaultActiveElement","nextPaint","preventDefault","length","getDefaultActiveIndex","getNextVisibleIndex","Math","max","min","noSelect","setActiveElement","match","focusoutHandler","relatedTarget","isInQ2OptionList","includes","isInLightDom","hostElement","contains","internalKeydownHandler","allVisibleOptions","shiftKey","newOption","find","element","active","disabled","addEventListener","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","componentWillLoad","hasOptions","querySelectorAll","componentDidLoad","overrideFocus","checkOptions","selectedOptionsUpdated","ready","componentDidRender","forEach","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","Array","from","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","window","setTimeout","scrollIntoView","block","selectedOption","selectedValue","value","displayValue","innerText","trim","valueObject","values","isAlreadySelected","change","elementIndex","isOptionVisible","isVisible","focus","selectedValues","render","h","Host","class","ref","el","contentElement","onFocusout","onKeyDown","onClick","q2PopoverCss","Q2Popover","displayBuffer","orientationChanged","currentDirection","show","align","mode","handleMinHeight","minHeight","handleDeprecationWarning","handlePopoverToggleEvent","popoverStateChanged","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","scrollX","offsetWidth","innerHeight","_d","offsetTop","scrollY","_f","_e","viewPortChanged","determinePopDirection","viewPortOrientationChanged","disconnectedCallback","removeViewportListeners","removeEventListener","supportsPopoverAPI","console","warn","popoverStateHandler","detail","scrollContainerTo","options","scrollTo","toggle","minHeightProvided","openChanged","addViewportListeners","hidePopover","clearCSSProperties","isIframe","hasPlatformDimensions","Object","keys","Tecton","platformDimensions","providedDirection","hasOwn","HTMLElement","prototype","validatedMaxHeight","maxHeight","isNaN","passive","capture","screen","orientation","removeProperty","windowHeight","maxSpaceAbove","maxSpaceBelow","outletOffset","distanceToIframeBottom","viewableSpaceBelow","isIframeShorterThanWindow","directionWithMostSpace","shouldUpdateMaxHeight","getPropertyValue","currentOrDetermineDirection","priorityMaxHeight","setDirectionAndShow","isOpen","showPopover","containerClasses","tabIndex","popover"],"sources":["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":["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 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';\n\nexport interface IOptionValue {\n value: string;\n display?: string;\n}\n\nexport type ValidOptionElements = HTMLQ2OptionElement | HTMLQ2DropdownItemElement;\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: IOptionValue[] = [];\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 */\n @Event()\n change: EventEmitter<{ value: string; values: IOptionValue[] }>;\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 // #endregion\n // #region Component Lifecycle Events\n\n componentWillLoad() {\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 event.stopPropagation();\n const { activeIndex, customSearch, allOptions } = this;\n const { key } = event;\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 activeOption?.scrollIntoView({ block: 'center' });\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: IOptionValue[] = [];\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 this.change.emit({ 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();\n else nextPaint(() => option.focus());\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.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:popover-open,\n.show {\n position: absolute;\n margin: 0;\n padding: 0;\n overflow: auto;\n background: var-list(--tct-popover-background, --app-white, #ffffff);\n color: var-list(--tct-popover-font-color, --t-text, #4d4d4d);\n min-width: var-list(--tct-popover-min-width, 135px);\n margin-block: var-list(--tct-popover-margin-block, 0);\n box-shadow: var-list(\n --tct-popover-box-shadow,\n --app-shadow-1,\n unquote('0px 0px 2px rgba(0, 0, 0, 0.12), 0px 2px 4px rgba(0, 0, 0, 0.14)')\n );\n border-width: var-list(--tct-popover-border-width, 0);\n border-style: solid;\n border-color: var-list(--tct-popover-border-color, transparent);\n border-radius: var-list(--tct-popover-border-radius, 0);\n // the --comp variables are set via JS\n max-height: var(--comp-pop-max-height);\n left: var(--comp-pop-left);\n opacity: var(--comp-pop-opacity, 0);\n\n &.block {\n right: unset;\n width: var(--comp-pop-width);\n min-width: var-list(--tct-popover-min-width, unset);\n }\n\n &.left {\n left: var(--comp-pop-left);\n right: unset;\n }\n\n &.right {\n right: var(--comp-pop-right);\n left: unset;\n }\n\n &.down {\n top: var-list(--tct-popover-top, --comp-pop-top);\n bottom: unset;\n }\n\n &.up {\n top: unset;\n bottom: var(--comp-pop-bottom);\n }\n\n @include tiny-scrollbar();\n}\n\nclick-elsewhere {\n position: relative;\n display: block;\n}\n","import {\n Component,\n Prop,\n h,\n ComponentInterface,\n Element,\n Watch,\n Method,\n Listen,\n EventEmitter,\n Event,\n State,\n} from '@stencil/core';\nimport { handleDeprecationWarning, waitForNextPaint } from '../../utils';\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 non-typeable\n * - Q2 Select typeable\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@Component({ tag: 'q2-popover', shadow: true, styleUrl: 'q2-popover.scss' })\nexport class Q2Popover implements ComponentInterface {\n // #region Own Properties\n\n containerElement: HTMLDivElement;\n contentElement: HTMLDivElement;\n /**\n * The number of pixels to leave between the popover and the edge of the viewport\n */\n displayBuffer = 10;\n orientationChanged: boolean = false;\n\n // #endregion\n // #region Host HTML Element\n\n @Element()\n hostElement: HTMLElement;\n\n // #endregion\n // #region State Properties\n\n @State()\n currentDirection: 'down' | 'up' = undefined;\n\n // remove `show` when Popover API is supported in iOS\n @State()\n show: boolean = false;\n\n // #endregion\n // #region Public Property API\n\n /** Aligns the popover to the left or right side of the control element. */\n @Prop({ reflect: true })\n align: 'left' | 'right' = 'left';\n\n /** Indicates the popover will match the width of its parent element. */\n @Prop({ reflect: true })\n block: boolean;\n\n /** The element that controls the popover's behavior. */\n @Prop()\n controlElement: HTMLElement;\n\n /**\n * Force the direction of the popover when it opens.\n * If no value is passed, the component will auto-detect the direction based on available space.\n */\n @Prop({ reflect: true })\n direction: 'up' | 'down';\n\n /**\n * Force the maximum height of the popover. This value will be interpreted as pixels.\n * If no value is passed, or the value exceeds available space, the component will auto-detect the maximum height based on available space.\n */\n @Prop()\n maxHeight: number;\n\n /** @deprecated */\n @Prop()\n minHeight: number;\n\n @Prop()\n mode: 'legacy' = null;\n\n /** Controls whether the popover is open or closed. */\n @Prop({ reflect: true, mutable: true })\n open: boolean;\n\n // #endregion\n // #region Events\n\n /**\n * Emitted when the popover is opened or closed.\n */\n @Event()\n popoverStateChanged: EventEmitter<{ open: boolean }>;\n\n // #endregion\n // #region Component Lifecycle Events\n\n disconnectedCallback() {\n this.removeViewportListeners();\n this.containerElement.removeEventListener('toggle', this.handlePopoverToggleEvent);\n this.containerElement = null;\n this.contentElement = null;\n this.controlElement = null;\n }\n\n componentWillLoad() {\n if (!this.supportsPopoverAPI) {\n console.warn(\n 'The Popover API is not supported in this browser. Please update your browser to the latest version. The component will use legacy mode.'\n );\n this.mode = 'legacy';\n }\n }\n\n componentDidLoad() {\n this.handleMinHeight();\n if (this.supportsPopoverAPI) this.containerElement.addEventListener('toggle', this.handlePopoverToggleEvent);\n if (this.open) this.determinePopDirection();\n }\n\n // #endregion\n // #region Listeners\n\n @Listen('popoverState')\n popoverStateHandler(event: CustomEvent<{ open: boolean }>) {\n const {\n detail: { open },\n } = event;\n if (open === this.open) return;\n\n this.open = open;\n event.stopPropagation();\n }\n\n // #endregion\n // #region Public Methods API\n\n @Method()\n async scrollContainerTo(options: ScrollToOptions) {\n this.containerElement.scrollTo(options);\n }\n\n @Method()\n async toggle() {\n this.open = !this.open;\n }\n\n // #endregion\n // #region Watchers\n\n @Watch('minHeight')\n minHeightProvided() {\n this.handleMinHeight();\n }\n\n @Watch('open')\n async openChanged(open: boolean) {\n this.popoverStateChanged.emit({ open });\n\n if (open) {\n this.addViewportListeners();\n this.determinePopDirection();\n } else {\n this.removeViewportListeners();\n this.currentDirection = undefined;\n if (this.mode === 'legacy' || !this.supportsPopoverAPI) {\n this.show = false;\n } else {\n this.containerElement.hidePopover();\n }\n\n await waitForNextPaint();\n this.clearCSSProperties();\n }\n }\n\n // #endregion\n // #region Local Methods\n\n get isModule() {\n const isIframe = window !== window.top;\n const hasPlatformDimensions = Object.keys(window.Tecton?.platformDimensions ?? {}).length > 0;\n return isIframe && hasPlatformDimensions;\n }\n\n get providedDirection(): 'up' | 'down' | undefined {\n const { direction } = this;\n switch (direction) {\n case 'up':\n case 'down':\n return direction;\n default:\n return undefined;\n }\n }\n\n get supportsPopoverAPI(): boolean {\n return Object.hasOwn(HTMLElement.prototype, 'popover');\n }\n\n 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 window.addEventListener('scroll', this.viewPortChanged, { passive: true, capture: true });\n screen?.orientation?.addEventListener('orientationchange', this.viewPortOrientationChanged);\n window.addEventListener('orientationchange', this.viewPortOrientationChanged);\n }\n\n clearCSSProperties() {\n this.containerElement.style.removeProperty('--comp-pop-max-height');\n this.containerElement.style.removeProperty('--comp-pop-top');\n this.containerElement.style.removeProperty('--comp-pop-bottom');\n this.containerElement.style.removeProperty('--comp-pop-left');\n this.containerElement.style.removeProperty('--comp-pop-right');\n this.containerElement.style.removeProperty('--comp-pop-width');\n this.containerElement.style.removeProperty('--comp-pop-opacity');\n }\n\n async determinePopDirection() {\n const { containerElement, controlElement, providedDirection, displayBuffer } = this;\n if (containerElement) containerElement.style.maxHeight = null;\n\n await waitForNextPaint();\n\n const { isModule } = this;\n const { top: controlTop, bottom: controlBottom } = controlElement?.getBoundingClientRect?.() ?? {\n top: 0,\n bottom: 0,\n };\n\n let windowHeight: number;\n let maxSpaceAbove: number;\n let maxSpaceBelow: number;\n\n if (isModule) {\n const { outletOffset = 0, innerHeight = window.innerHeight } = window.Tecton?.platformDimensions || {};\n const distanceToIframeBottom = window.visualViewport.height - controlBottom;\n const viewableSpaceBelow = innerHeight - (outletOffset + controlBottom);\n const isIframeShorterThanWindow = distanceToIframeBottom < viewableSpaceBelow;\n windowHeight = innerHeight;\n // If the top of the module is below the top of the window we just use the controlTop\n // Otherwise we need to add the outletOffset to the controlTop\n maxSpaceAbove = (outletOffset > 0 ? controlTop : controlTop + outletOffset) - displayBuffer;\n maxSpaceBelow = isIframeShorterThanWindow\n ? distanceToIframeBottom - displayBuffer\n : viewableSpaceBelow - displayBuffer;\n } else {\n windowHeight = window.visualViewport.height;\n maxSpaceAbove = controlTop - displayBuffer;\n maxSpaceBelow = windowHeight - controlBottom - displayBuffer;\n }\n\n const directionWithMostSpace: 'up' | 'down' = maxSpaceAbove > maxSpaceBelow ? 'up' : 'down';\n\n // We do not want to update the max height once the popover is open unless the page orientation shifts (resize or mobile use cases)\n const shouldUpdateMaxHeight =\n !containerElement.style.getPropertyValue('--comp-pop-max-height') || this.orientationChanged;\n // we do not want to constantly update the max-height after an orientation change, so we switch this back to false\n this.orientationChanged = false;\n const currentOrDetermineDirection = this.currentDirection || providedDirection || directionWithMostSpace;\n\n switch (currentOrDetermineDirection) {\n case 'up':\n if (shouldUpdateMaxHeight) {\n 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 this.popoverStateChanged.emit({ open: event.newState === 'open' });\n };\n\n removeViewportListeners() {\n window.removeEventListener('resize', this.viewPortOrientationChanged);\n visualViewport?.removeEventListener('resize', this.viewPortChanged);\n window.removeEventListener('scroll', this.viewPortChanged, { capture: true });\n screen?.orientation?.removeEventListener('orientationchange', this.viewPortOrientationChanged);\n window.removeEventListener('orientationchange', this.viewPortOrientationChanged);\n }\n\n setAbsoluteCSSProperties = async () => {\n const { controlElement, containerElement, currentDirection, align } = this;\n\n if (align === 'right') {\n containerElement.style.setProperty('--comp-pop-right', '0');\n containerElement.style.setProperty('--comp-pop-left', 'unset');\n } else {\n containerElement.style.setProperty('--comp-pop-left', '0');\n containerElement.style.setProperty('--comp-pop-right', 'unset');\n }\n\n if (this.block) {\n containerElement.style.setProperty('--comp-pop-width', '100%');\n }\n\n if (currentDirection === 'up') {\n const controlStyle = getComputedStyle(controlElement);\n const controlSize =\n parseInt(controlStyle.height || '0') +\n parseInt(controlStyle.borderTopWidth || '0') +\n parseInt(controlStyle.borderBottomWidth || '0');\n\n containerElement.style.setProperty('--comp-pop-bottom', `${controlSize}px`);\n }\n\n // Wait for one paint to prevent layout thrashing\n await waitForNextPaint();\n containerElement.style.setProperty('--comp-pop-opacity', '1');\n };\n\n setDirectionAndShow(direction: 'up' | 'down') {\n // Due to some runtime inconsistency across devices/browsers we need to add one more check here because the\n // popover can be closed between the time the popover is opened and the time the direction is determined\n const isOpen = this.open;\n if (!isOpen) return;\n\n this.currentDirection = direction;\n if (this.mode === 'legacy' || !this.supportsPopoverAPI) {\n this.show = true;\n this.setAbsoluteCSSProperties();\n } else {\n this.setPopoverAPICSSProperties();\n this.containerElement.showPopover();\n }\n }\n\n setPopoverAPICSSProperties = async () => {\n const { controlElement, containerElement, currentDirection, isModule, align } = this;\n const {\n top: controlTop,\n bottom: controlBottom,\n left: controlLeft,\n right: controlRight,\n } = controlElement?.getBoundingClientRect?.() ?? {\n top: 0,\n bottom: 0,\n left: 0,\n right: 0,\n };\n\n const popoverLeft: number = controlLeft;\n const popoverRight: number = window?.visualViewport?.width - controlRight;\n\n if (align === 'right') {\n containerElement.style.setProperty('--comp-pop-right', `${popoverRight - window.scrollX}px`);\n containerElement.style.setProperty('--comp-pop-left', 'unset');\n } else {\n containerElement.style.setProperty('--comp-pop-left', `${popoverLeft + window.scrollX}px`);\n containerElement.style.setProperty('--comp-pop-right', 'unset');\n }\n\n if (this.block) containerElement.style.setProperty('--comp-pop-width', `${controlElement?.offsetWidth || 0}px`);\n\n if (currentDirection === 'up') {\n if (isModule) {\n containerElement.style.setProperty('--comp-pop-bottom', `${window.innerHeight - controlTop}px`);\n } else {\n containerElement.style.setProperty(\n '--comp-pop-bottom',\n `${window.innerHeight - controlTop - window?.visualViewport?.offsetTop - window.scrollY}px`\n );\n }\n }\n\n if (currentDirection === 'down') {\n if (isModule) {\n containerElement.style.setProperty('--comp-pop-top', `${controlBottom}px`);\n } else {\n containerElement.style.setProperty(\n '--comp-pop-top',\n `${controlBottom + (window?.visualViewport?.offsetTop ?? 0) + window.scrollY}px`\n );\n }\n }\n\n // Wait for one paint to prevent layout thrashing\n await waitForNextPaint();\n containerElement.style.setProperty('--comp-pop-opacity', '1');\n };\n\n viewPortChanged = () => {\n if (!this.open) return;\n this.determinePopDirection();\n };\n\n viewPortOrientationChanged = () => {\n this.orientationChanged = true;\n this.viewPortChanged();\n };\n\n // #endregion\n // #region Render Methods\n\n render() {\n const containerClasses = ['container', this.currentDirection, this.align];\n if (this.show) containerClasses.push('show');\n if (this.block) containerClasses.push('block');\n if (this.mode === 'legacy') containerClasses.push('legacy');\n\n return (\n <div\n ref={el => (this.containerElement = el)}\n class={containerClasses.join(' ')}\n test-id=\"outerContainer\"\n tabIndex={-1}\n popover=\"auto\"\n >\n <div\n ref={el => (this.contentElement = el)}\n class=\"content\"\n >\n <slot />\n </div>\n </div>\n );\n }\n\n // #endregion\n}\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["sanitizeRegexString","regexString","replace","q2OptionListCss","Q2OptionList","constructor","hostRef","this","keyStore","queue","lastPressedAt","Date","scheduledAfterRender","label","loc","selectedOptions","type","clickHandler","event","target","option","closest","selectOption","multiple","popoverState","emit","open","action","externalKeydownHandler","stopPropagation","activeIndex","customSearch","allOptions","key","nextIndex","searchString","searchOptions","openDropdownWithActiveElement","setDefaultActiveElement","nextPaint","preventDefault","length","getDefaultActiveIndex","getNextVisibleIndex","Math","max","min","noSelect","setActiveElement","match","focusoutHandler","relatedTarget","isInQ2OptionList","includes","isInLightDom","hostElement","contains","internalKeydownHandler","allVisibleOptions","shiftKey","newOption","find","element","active","disabled","addEventListener","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","componentWillLoad","hasOptions","querySelectorAll","componentDidLoad","overrideFocus","checkOptions","selectedOptionsUpdated","ready","componentDidRender","forEach","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","Array","from","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","window","setTimeout","scrollIntoView","block","selectedOption","selectedValue","value","displayValue","innerText","trim","valueObject","values","isAlreadySelected","change","elementIndex","isOptionVisible","isVisible","focus","selectedValues","render","h","Host","class","ref","el","contentElement","onFocusout","onKeyDown","onClick","q2PopoverCss","Q2Popover","displayBuffer","orientationChanged","currentDirection","show","align","mode","handleMinHeight","minHeight","handleDeprecationWarning","handlePopoverToggleEvent","popoverStateChanged","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","scrollX","offsetWidth","innerHeight","scrollY","viewPortChanged","determinePopDirection","viewPortOrientationChanged","disconnectedCallback","removeViewportListeners","removeEventListener","supportsPopoverAPI","console","warn","popoverStateHandler","detail","scrollContainerTo","options","scrollTo","toggle","minHeightProvided","openChanged","addViewportListeners","hidePopover","clearCSSProperties","isIframe","hasPlatformDimensions","Object","keys","Tecton","platformDimensions","providedDirection","hasOwn","HTMLElement","prototype","validatedMaxHeight","maxHeight","isNaN","isInScrollableContainer","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/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":["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 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';\n\nexport interface IOptionValue {\n value: string;\n display?: string;\n}\n\nexport type ValidOptionElements = HTMLQ2OptionElement | HTMLQ2DropdownItemElement;\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: IOptionValue[] = [];\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 */\n @Event()\n change: EventEmitter<{ value: string; values: IOptionValue[] }>;\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 // #endregion\n // #region Component Lifecycle Events\n\n componentWillLoad() {\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 event.stopPropagation();\n const { activeIndex, customSearch, allOptions } = this;\n const { key } = event;\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 activeOption?.scrollIntoView({ block: 'center' });\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: IOptionValue[] = [];\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 this.change.emit({ 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();\n else nextPaint(() => option.focus());\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.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:popover-open,\n.show {\n position: absolute;\n margin: 0;\n padding: 0;\n overflow: auto;\n background: var-list(--tct-popover-background, --app-white, #ffffff);\n color: var-list(--tct-popover-font-color, --t-text, #4d4d4d);\n min-width: var-list(--tct-popover-min-width, 135px);\n margin-block: var-list(--tct-popover-margin-block, 0);\n box-shadow: var-list(\n --tct-popover-box-shadow,\n --app-shadow-1,\n unquote('0px 0px 2px rgba(0, 0, 0, 0.12), 0px 2px 4px rgba(0, 0, 0, 0.14)')\n );\n border-width: var-list(--tct-popover-border-width, 0);\n border-style: solid;\n border-color: var-list(--tct-popover-border-color, transparent);\n border-radius: var-list(--tct-popover-border-radius, 0);\n // the --comp variables are set via JS\n max-height: var(--comp-pop-max-height);\n left: var(--comp-pop-left);\n opacity: var(--comp-pop-opacity, 0);\n\n &.block {\n right: unset;\n width: var(--comp-pop-width);\n min-width: var-list(--tct-popover-min-width, unset);\n }\n\n &.left {\n left: var(--comp-pop-left);\n right: unset;\n }\n\n &.right {\n right: var(--comp-pop-right);\n left: unset;\n }\n\n &.down {\n top: var-list(--tct-popover-top, --comp-pop-top);\n bottom: unset;\n }\n\n &.up {\n top: unset;\n bottom: var(--comp-pop-bottom);\n }\n\n @include tiny-scrollbar();\n}\n\nclick-elsewhere {\n position: relative;\n display: block;\n}\n","import {\n Component,\n Prop,\n h,\n ComponentInterface,\n Element,\n Watch,\n Method,\n Listen,\n EventEmitter,\n Event,\n State,\n} from '@stencil/core';\nimport { handleDeprecationWarning, waitForNextPaint, isMobile, isInScrollableContainer } from '../../utils';\n\n/**\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 non-typeable\n * - Q2 Select typeable\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@Component({ tag: 'q2-popover', shadow: true, styleUrl: 'q2-popover.scss' })\nexport class Q2Popover implements ComponentInterface {\n // #region Own Properties\n\n containerElement: HTMLDivElement;\n contentElement: HTMLDivElement;\n /**\n * The number of pixels to leave between the popover and the edge of the viewport\n */\n displayBuffer = 10;\n orientationChanged: boolean = false;\n\n // #endregion\n // #region Host HTML Element\n\n @Element()\n hostElement: HTMLElement;\n\n // #endregion\n // #region State Properties\n\n @State()\n currentDirection: 'down' | 'up' = undefined;\n\n // remove `show` when Popover API is supported in iOS\n @State()\n show: boolean = false;\n\n // #endregion\n // #region Public Property API\n\n /** Aligns the popover to the left or right side of the control element. */\n @Prop({ reflect: true })\n align: 'left' | 'right' = 'left';\n\n /** Indicates the popover will match the width of its parent element. */\n @Prop({ reflect: true })\n block: boolean;\n\n /** The element that controls the popover's behavior. */\n @Prop()\n controlElement: HTMLElement;\n\n /**\n * Force the direction of the popover when it opens.\n * If no value is passed, the component will auto-detect the direction based on available space.\n */\n @Prop({ reflect: true })\n direction: 'up' | 'down';\n\n /**\n * Force the maximum height of the popover. This value will be interpreted as pixels.\n * If no value is passed, or the value exceeds available space, the component will auto-detect the maximum height based on available space.\n */\n @Prop()\n maxHeight: number;\n\n /** @deprecated */\n @Prop()\n minHeight: number;\n\n @Prop()\n mode: 'legacy' = null;\n\n /** Controls whether the popover is open or closed. */\n @Prop({ reflect: true, mutable: true })\n open: boolean;\n\n // #endregion\n // #region Events\n\n /**\n * Emitted when the popover is opened or closed.\n */\n @Event()\n popoverStateChanged: EventEmitter<{ open: boolean }>;\n\n // #endregion\n // #region Component Lifecycle Events\n\n disconnectedCallback() {\n this.removeViewportListeners();\n this.containerElement.removeEventListener('toggle', this.handlePopoverToggleEvent);\n this.containerElement = null;\n this.contentElement = null;\n this.controlElement = null;\n }\n\n componentWillLoad() {\n if (!this.supportsPopoverAPI) {\n console.warn(\n 'The Popover API is not supported in this browser. Please update your browser to the latest version. The component will use legacy mode.'\n );\n this.mode = 'legacy';\n }\n }\n\n componentDidLoad() {\n this.handleMinHeight();\n if (this.supportsPopoverAPI) this.containerElement.addEventListener('toggle', this.handlePopoverToggleEvent);\n if (this.open) this.determinePopDirection();\n }\n\n // #endregion\n // #region Listeners\n\n @Listen('popoverState')\n popoverStateHandler(event: CustomEvent<{ open: boolean }>) {\n const {\n detail: { open },\n } = event;\n if (open === this.open) return;\n\n this.open = open;\n event.stopPropagation();\n }\n\n // #endregion\n // #region Public Methods API\n\n @Method()\n async scrollContainerTo(options: ScrollToOptions) {\n this.containerElement.scrollTo(options);\n }\n\n @Method()\n async toggle() {\n this.open = !this.open;\n }\n\n // #endregion\n // #region Watchers\n\n @Watch('minHeight')\n minHeightProvided() {\n this.handleMinHeight();\n }\n\n @Watch('open')\n async openChanged(open: boolean) {\n this.popoverStateChanged.emit({ open });\n\n if (open) {\n this.addViewportListeners();\n this.determinePopDirection();\n } else {\n this.removeViewportListeners();\n this.currentDirection = undefined;\n if (this.mode === 'legacy' || !this.supportsPopoverAPI) {\n this.show = false;\n } else {\n this.containerElement.hidePopover();\n }\n\n await waitForNextPaint();\n this.clearCSSProperties();\n }\n }\n\n // #endregion\n // #region Local Methods\n\n get isModule() {\n const isIframe = window !== window.top;\n const hasPlatformDimensions = Object.keys(window.Tecton?.platformDimensions ?? {}).length > 0;\n return isIframe && hasPlatformDimensions;\n }\n\n get providedDirection(): 'up' | 'down' | undefined {\n const { direction } = this;\n switch (direction) {\n case 'up':\n case 'down':\n return direction;\n default:\n return undefined;\n }\n }\n\n get supportsPopoverAPI(): boolean {\n return Object.hasOwn(HTMLElement.prototype, 'popover');\n }\n\n 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 if (isModule) {\n const {\n outletOffset = 0,\n innerHeight = window.innerHeight,\n top: topBarHeight = 0,\n bottom: bottomBarHeight = 0,\n } = window.Tecton?.platformDimensions || {};\n\n const distanceToIframeBottom = window.innerHeight - controlBottom;\n\n // controlElement position visually on the page\n const visualControlTop = outletOffset > 0 ? controlTop : controlTop + outletOffset - topBarHeight;\n const visualControlBottom = outletOffset + controlBottom - topBarHeight;\n\n // visual space around the controlElement\n const viewableSpaceAbove = visualControlTop;\n const viewableSpaceBelow = innerHeight - bottomBarHeight - visualControlBottom;\n\n // calculate space above and below controlElement\n const isIframeShorterThanWindow = distanceToIframeBottom < viewableSpaceBelow;\n maxSpaceAbove = viewableSpaceAbove - displayBuffer;\n maxSpaceBelow = isIframeShorterThanWindow\n ? distanceToIframeBottom - displayBuffer\n : viewableSpaceBelow - displayBuffer;\n } else {\n windowHeight = window.innerHeight;\n maxSpaceAbove = controlTop - displayBuffer;\n maxSpaceBelow = windowHeight - controlBottom - displayBuffer;\n }\n\n const directionWithMostSpace: 'up' | 'down' = maxSpaceAbove > maxSpaceBelow ? 'up' : 'down';\n\n // We do not want to update the max height once the popover is open unless the page orientation shifts (resize or mobile use cases)\n const shouldUpdateMaxHeight =\n !containerElement.style.getPropertyValue('--comp-pop-max-height') || this.orientationChanged;\n // we do not want to constantly update the max-height after an orientation change, so we switch this back to false\n this.orientationChanged = false;\n const currentOrDetermineDirection = this.currentDirection || providedDirection || directionWithMostSpace;\n\n switch (currentOrDetermineDirection) {\n case 'up':\n if (shouldUpdateMaxHeight) {\n 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 this.popoverStateChanged.emit({ open: event.newState === 'open' });\n };\n\n removeViewportListeners() {\n window.removeEventListener('resize', this.viewPortOrientationChanged);\n visualViewport?.removeEventListener('resize', this.viewPortChanged);\n window.removeEventListener('scroll', this.viewPortChanged, { capture: true });\n screen?.orientation?.removeEventListener('orientationchange', this.viewPortOrientationChanged);\n window.removeEventListener('orientationchange', this.viewPortOrientationChanged);\n }\n\n setAbsoluteCSSProperties = async () => {\n const { controlElement, containerElement, currentDirection, align } = this;\n\n if (align === 'right') {\n containerElement.style.setProperty('--comp-pop-right', '0');\n containerElement.style.setProperty('--comp-pop-left', 'unset');\n } else {\n containerElement.style.setProperty('--comp-pop-left', '0');\n containerElement.style.setProperty('--comp-pop-right', 'unset');\n }\n\n if (this.block) {\n containerElement.style.setProperty('--comp-pop-width', '100%');\n }\n\n if (currentDirection === 'up') {\n const controlStyle = getComputedStyle(controlElement);\n const controlSize =\n parseInt(controlStyle.height || '0') +\n parseInt(controlStyle.borderTopWidth || '0') +\n parseInt(controlStyle.borderBottomWidth || '0');\n\n containerElement.style.setProperty('--comp-pop-bottom', `${controlSize}px`);\n }\n\n // Wait for one paint to prevent layout thrashing\n await waitForNextPaint();\n containerElement.style.setProperty('--comp-pop-opacity', '1');\n };\n\n setDirectionAndShow(direction: 'up' | 'down') {\n // Due to some runtime inconsistency across devices/browsers we need to add one more check here because the\n // popover can be closed between the time the popover is opened and the time the direction is determined\n const isOpen = this.open;\n if (!isOpen) return;\n\n this.currentDirection = direction;\n if (this.mode === 'legacy' || !this.supportsPopoverAPI) {\n this.show = true;\n this.setAbsoluteCSSProperties();\n } else {\n this.setPopoverAPICSSProperties();\n this.containerElement.showPopover();\n }\n }\n\n setPopoverAPICSSProperties = async () => {\n const { controlElement, containerElement, currentDirection, isModule, align } = this;\n const {\n top: controlTop,\n bottom: controlBottom,\n left: controlLeft,\n right: controlRight,\n } = controlElement?.getBoundingClientRect?.() ?? {\n top: 0,\n bottom: 0,\n left: 0,\n right: 0,\n };\n\n const popoverLeft: number = controlLeft;\n const popoverRight: number = window?.visualViewport?.width - controlRight;\n\n if (align === 'right') {\n containerElement.style.setProperty('--comp-pop-right', `${popoverRight - window.scrollX}px`);\n containerElement.style.setProperty('--comp-pop-left', 'unset');\n } else {\n containerElement.style.setProperty('--comp-pop-left', `${popoverLeft + window.scrollX}px`);\n containerElement.style.setProperty('--comp-pop-right', 'unset');\n }\n\n if (this.block) containerElement.style.setProperty('--comp-pop-width', `${controlElement?.offsetWidth || 0}px`);\n\n if (currentDirection === 'up') {\n if (isModule) {\n containerElement.style.setProperty('--comp-pop-bottom', `${window.innerHeight - controlTop}px`);\n } else {\n containerElement.style.setProperty(\n '--comp-pop-bottom',\n `${window.innerHeight - controlTop - window.scrollY}px`\n );\n }\n }\n\n if (currentDirection === 'down') {\n if (isModule) {\n containerElement.style.setProperty('--comp-pop-top', `${controlBottom}px`);\n } else {\n containerElement.style.setProperty('--comp-pop-top', `${controlBottom + window.scrollY}px`);\n }\n }\n\n // Wait for one paint to prevent layout thrashing\n await waitForNextPaint();\n containerElement.style.setProperty('--comp-pop-opacity', '1');\n };\n\n viewPortChanged = () => {\n if (!this.open) return;\n this.determinePopDirection();\n };\n\n viewPortOrientationChanged = () => {\n this.orientationChanged = true;\n this.viewPortChanged();\n };\n\n // #endregion\n // #region Render Methods\n\n render() {\n const containerClasses = ['container', this.currentDirection, this.align];\n if (this.show) containerClasses.push('show');\n if (this.block) containerClasses.push('block');\n if (this.mode === 'legacy') containerClasses.push('legacy');\n\n return (\n <div\n ref={el => (this.containerElement = el)}\n class={containerClasses.join(' ')}\n test-id=\"outerContainer\"\n tabIndex={-1}\n popover=\"manual\"\n >\n <div\n ref={el => (this.contentElement = el)}\n class=\"content\"\n >\n <slot />\n </div>\n </div>\n );\n }\n\n // #endregion\n}\n"],"mappings":"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","ignoreList":[]}
@@ -1,6 +1,6 @@
1
- import { r as t, c as e, h as i, d as o, a } from "./index-C7zSUT3M.js";
1
+ import { r as t, c as e, h as i, H as o, g as a } from "./index-COzomxjJ.js";
2
2
 
3
- import { p as s, l as r } from "./index-y0xcWkDl.js";
3
+ import { p as s, l as r } from "./index-EcLnUn1d.js";
4
4
 
5
5
  const n = '*{box-sizing:border-box}*:active{outline:none}*:focus-visible{outline:none;box-shadow:var(--const-double-focus-ring, 0 0 0 2px #ffffff, 0 0 0 4px #0066cc)}:host{box-shadow:none !important}::-moz-focus-inner{border:none}input,textarea,button{font-family:inherit;font-size:inherit;font-stretch:inherit}:host(.sr),:host(.sr) button{border:0;clip:rect(0 0 0 0);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px;white-space:nowrap}.sr,.sr button{border:0;clip:rect(0 0 0 0);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px;white-space:nowrap}.hidden{display:none}:host([hidden]){display:none}.invisible{visibility:hidden}:host(:not([separator]):not([separator=false])){--comp-padding:0 var(--app-scale-2x, 10px);--comp-selected-icon-size:var(--tct-option-selected-icon-size, var(--t-option-selected-icon-size, var(--tct-scale-3, var(--app-scale-3x, 15px))));padding:var(--tct-option-padding, var(--t-option-padding, var(--comp-padding)));min-height:44px;align-items:center;cursor:pointer;grid-template-columns:var(--comp-selected-icon-size) 1fr;align-items:center;grid-template-areas:"icon content";gap:var(--tct-scale-1, var(--app-scale-1x, 5px))}:host(:focus),:host(:not([separator]):not([separator=false]):hover),:host([active]){position:relative;z-index:1}:host([multiline]){--comp-padding:var(--app-scale-2, 10px) var(--app-scale-2, 10px);--comp-selected-icon-size:var(--tct-option-selected-multiline-icon-size, var(--t-option-selected-multiline-icon-size, var(--tct-option-selected-icon-size, var(--t-option-selected-icon-size, 26px))))}:host([_no-select]){grid-template-columns:1fr;grid-template-areas:"content"}:host([aria-disabled]){cursor:not-allowed;opacity:var(--tct-disabled-opacity, var(--app-disabled-opacity, 0.4));pointer-events:none}:host([aria-hidden]){display:none}:host(:not([hidden]):not([aria-hidden])){display:grid}:host(:not([aria-disabled]):not([separator]):not([separator=false]):hover),:host([active]),:host(:focus){background:var(--tct-option-active-background, var(--tct-option-active-bg, var(--tct-gray-14, var(--t-gray-14, var(--tct-gray-l3, var(--app-gray-l3, #f2f2f2))))));color:var(--tct-option-active-color, inherit)}:host(:focus-visible){box-shadow:var(--tct-option-focus-box-shadow, var(--const-inset-double-focus-ring, inset var(--const-global-focus, 0 0 0 2px var(--const-focus-color, #0066CC)))) !important}q2-icon{grid-area:icon;--tct-icon-size:var(--comp-selected-icon-size)}.content{display:block;grid-area:content}:host(:not([multiline])) .content{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.separator{--comp-default-separator-margin:0 var(--tct-scale-1, var(--app-scale-3x, 15px));margin:var(--tct-dropdown-separator-margin, var(--t-dropdown-separator-margin, var(--comp-default-separator-margin)));border-bottom:1px solid var(--tct-dropdown-item-separator-color, var(--t-gray-11, #cccccc))}';
6
6
 
@@ -1,6 +1,6 @@
1
- import { r as t, c as e, h as i, a as n } from "./index-C7zSUT3M.js";
1
+ import { r as t, c as e, h as i, g as n } from "./index-COzomxjJ.js";
2
2
 
3
- import { n as a, o, a as s, l as r } from "./index-y0xcWkDl.js";
3
+ import { n as a, o, a as s, l as r } from "./index-EcLnUn1d.js";
4
4
 
5
5
  const c = "*{box-sizing:border-box}*:active{outline:none}*:focus-visible{outline:none;box-shadow:var(--const-double-focus-ring, 0 0 0 2px #ffffff, 0 0 0 4px #0066cc)}:host{box-shadow:none !important}::-moz-focus-inner{border:none}input,textarea,button{font-family:inherit;font-size:inherit;font-stretch:inherit}:host(.sr),:host(.sr) button{border:0;clip:rect(0 0 0 0);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px;white-space:nowrap}.sr,.sr button{border:0;clip:rect(0 0 0 0);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px;white-space:nowrap}.hidden{display:none}:host([hidden]){display:none}.invisible{visibility:hidden}:host{display:flex;width:100%;justify-content:flex-end}:host([alignment=center]){justify-content:center}:host([alignment=left]){justify-content:flex-start}:host([hidden]){display:none}.container{display:inline-flex;column-gap:var(--tct-pagination-column-gap, var(--t-pagination-column-gap, var(--app-scale-2x, 10px)));align-items:center;height:var(--tct-pagination-height, var(--t-pagination-height, 44px))}.btn-group{display:flex;gap:var(--tct-pagination-btn-gap, var(--t-pagination-btn-gap, 0))}.description,.controls{white-space:nowrap}.controls{display:grid;grid-template-columns:auto 50px auto;align-items:center;gap:var(--tct-pagination-controls-gap, var(--t-pagination-controls-gap, var(--app-scale-1x, 5px)))}.controls[hidden]{display:none}.input-wrapper{height:var(--tct-pagination-height, var(--t-pagination-height, 44px));display:flex;align-items:center}q2-btn{--tct-btn-border-radius:var(--tct-pagination-btn-border-radius, var(--t-pagination-btn-border-radius));--tct-btn-border:var(--tct-pagination-btn-border, var(--t-pagination-btn-border))}q2-icon{--tct-icon-size:var(--tct-pagination-icon-size, var(--t-pagination-icon-size, 12px));color:var(--tct-pagination-icon-color, var(--t-pagination-icon-color, var(--t-text, #4d4d4d)))}q2-input{--tct-input-margin-top:0;--tct-input-margin-bottom:0;--tct-input-height:var(--tct-pagination-input-height, var(--t-pagination-input-height, 30px));--tct-input-min-height:var(--tct-input-height);--tct-input-align:center}q2-select{--tct-select-input-min-height:var(--tct-pagination-select-height, var(--t-pagination-select-height, 30px));--tct-select-input-max-height:var(--tct-pagination-select-height, var(--t-pagination-select-height, 30px));width:var(--tct-pagination-perpage-width, var(--t-pagination-perpage-width, 100%));min-width:var(--tct-pagination-perpage-min-width, var(--t-pagination-perpage-min-width, 110px))}";
6
6
 
@@ -1,6 +1,6 @@
1
- import { r as t, c as i, h as o, a as e } from "./index-C7zSUT3M.js";
1
+ import { r as t, c as i, h as o, g as e } from "./index-COzomxjJ.js";
2
2
 
3
- import { b as r, o as a, a as n, w as c, l as s } from "./index-y0xcWkDl.js";
3
+ import { b as r, o as a, a as n, w as c, l as s } from "./index-EcLnUn1d.js";
4
4
 
5
5
  import { a as l, s as p } from "./action-sheet-D3xPdhm8.js";
6
6
 
@@ -1,12 +1,12 @@
1
- import { r as t, c as i, h as a, F as r, a as o } from "./index-C7zSUT3M.js";
1
+ import { r as t, c as i, h as r, F as a, g as o } from "./index-COzomxjJ.js";
2
2
 
3
- import { c as e, o as n, a as s, r as d } from "./index-y0xcWkDl.js";
3
+ import { c as e, o as n, a as s, r as d } from "./index-EcLnUn1d.js";
4
4
 
5
5
  const l = '*{box-sizing:border-box}*:active{outline:none}*:focus-visible{outline:none;box-shadow:var(--const-double-focus-ring, 0 0 0 2px #ffffff, 0 0 0 4px #0066cc)}:host{box-shadow:none !important}::-moz-focus-inner{border:none}input,textarea,button{font-family:inherit;font-size:inherit;font-stretch:inherit}:host(.sr),:host(.sr) button{border:0;clip:rect(0 0 0 0);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px;white-space:nowrap}.sr,.sr button{border:0;clip:rect(0 0 0 0);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px;white-space:nowrap}.hidden{display:none}:host([hidden]){display:none}.invisible{visibility:hidden}:host{--comp-default-radio-group-margin:var(--tct-radio-group-margin-top, var(--t-radio-group-margin-top, var(--app-scale-5x, 25px))) 0 var(--tct-radio-group-margin-bottom, var(--t-radio-group-margin-bottom, var(--app-scale-5x, 25px)));display:block;margin:var(--tct-radio-group-margin, var(--comp-default-radio-group-margin))}fieldset{padding:var(--tct-radio-group-fieldset-padding, 0);margin:0;border:0;position:relative}.label-row{display:grid;grid-template-columns:1fr 24px;grid-template-areas:"label icon";column-gap:var(--tct-radio-group-label-column-gap, var(--app-scale-2x, 10px))}.label-row q2-icon{grid-area:icon;margin-top:-2px;margin-bottom:-2px}.group-legend{font-weight:600}legend.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;border:0}.optional-tag{margin-left:var(--tct-radio-group-label-optional-margin-left, var(--app-scale-1x, 5px));color:var(--tct-radio-group-label-optional-color, var(--t-radio-group-label-optional-color, var(--tct-a11y-color, var(--t-a11y-color, var(--tct-a11y-gray-color, var(--t-a11y-gray-color, var(--tct-gray-7, var(--t-gray-7, var(--tct-gray-d1, var(--t-gray-d1, var(--app-gray-d1, rgba(77, 77, 77, 0.77))))))))))));font-size:var(--tct-radio-group-label-optional-font-size, var(--t-radio-group-label-optional-font-size, 12px));font-weight:var(--tct-radio-group-label-optional-font-weight, var(--t-radio-group-label-optional-font-weight, 400))}.tile-container,.tile-container .options-container{display:flex;align-items:center;justify-content:center;flex-wrap:wrap;flex-grow:1}.options-container{--comp-default-margin:var(--app-scale-1x, 5px) 0;--comp-options-margin:var(--tct-radio-group-options-margin, var(--t-radio-group-options-margin, var(--comp-default-margin, 5px 0)));margin:var(--comp-options-margin);padding:var(--tct-radio-group-options-padding, var(--t-radio-group-options-padding, var(--app-scale-0x, 0px)));border-width:1px;border-color:transparent;border-style:solid;border-radius:var(--tct-radio-group-border-radius, var(--app-border-radius-1, 4px))}:host([has-error]) .options-container{border-color:var(--tct-radio-group-error-border-color, var(--const-stoplight-alert, #d20a0a))}:host([has-error=false]) .options-container{border-color:transparent}.tile-container.left{justify-content:start}.tile-container.right{justify-content:end}.tile-container .options-container{gap:var(--tct-radio-group-tile-gap, var(--t-radio-group-tile-gap, var(--app-scale-2x, 10px)));justify-content:inherit}';
6
6
 
7
7
  const p = class {
8
- constructor(a) {
9
- t(this, a);
8
+ constructor(r) {
9
+ t(this, r);
10
10
  this.change = i(this, "change", 7);
11
11
  // #region Own Properties
12
12
  this._id = `radio-group-${e()}`;
@@ -73,29 +73,29 @@ const p = class {
73
73
  }
74
74
  keydownHandler(t) {
75
75
  const i = t.target.getAttribute("value") || this.value;
76
- let a = this.radioElements.findIndex((a => a === t.target || a.getAttribute("value") === i));
77
- let r = 0;
76
+ let r = this.radioElements.findIndex((r => r === t.target || r.getAttribute("value") === i));
77
+ let a = 0;
78
78
  switch (t.key) {
79
79
  case "ArrowLeft":
80
80
  case "ArrowUp":
81
- r = -1;
81
+ a = -1;
82
82
  break;
83
83
 
84
84
  case "ArrowRight":
85
85
  case "ArrowDown":
86
- r = 1;
86
+ a = 1;
87
87
  break;
88
88
  }
89
- if (a === -1 || r === 0) {
89
+ if (r === -1 || a === 0) {
90
90
  return;
91
91
  }
92
- a += r;
93
- a = r < 0 ? Math.max(0, a) : Math.min(this.radioElements.length - 1, a);
92
+ r += a;
93
+ r = a < 0 ? Math.max(0, r) : Math.min(this.radioElements.length - 1, r);
94
94
  t.preventDefault();
95
95
  if (!this.readonly) {
96
- this.value = this.radioElements[a].value;
96
+ this.value = this.radioElements[r].value;
97
97
  }
98
- this.radioElements[a].dispatchEvent(new FocusEvent("focus"));
98
+ this.radioElements[r].dispatchEvent(new FocusEvent("focus"));
99
99
  }
100
100
  // #endregion
101
101
  // #region Public Methods API
@@ -160,15 +160,15 @@ const p = class {
160
160
  if (this.tileLayout) {
161
161
  const {tileAlignment: t} = this;
162
162
  const i = [ "left", "center", "right" ].includes(t) ? t : "center";
163
- return a("div", {
163
+ return r("div", {
164
164
  class: `tile-container ${i}`
165
- }, a("div", {
165
+ }, r("div", {
166
166
  class: "options-container"
167
- }, a("slot", null)));
167
+ }, r("slot", null)));
168
168
  } else {
169
- return a("div", {
169
+ return r("div", {
170
170
  class: "options-container"
171
- }, a("slot", null));
171
+ }, r("slot", null));
172
172
  }
173
173
  }
174
174
  // #endregion
@@ -177,23 +177,23 @@ const p = class {
177
177
  const t = this.label || this.optional || this.readonly;
178
178
  const {hasError: i} = this;
179
179
  const o = t && !this.hideLabel || i;
180
- return a(r, {
180
+ return r(a, {
181
181
  key: "d96af26ee95e438ad99e1ca79b8badee70aa903c"
182
- }, o && a("div", {
182
+ }, o && r("div", {
183
183
  key: "642204bf8eb9650aea78e1d7fd763473d6e35b8f",
184
184
  class: "label-row"
185
- }, t && !this.hideLabel && a("div", {
185
+ }, t && !this.hideLabel && r("div", {
186
186
  key: "af8059074c6abc628d4185cd8ad77099db64fa2c",
187
187
  class: "group-legend"
188
- }, d(this)), i && a("q2-icon", {
188
+ }, d(this)), i && r("q2-icon", {
189
189
  key: "e444f535c38920906289b3030dd14a360c197d04",
190
190
  type: "error",
191
191
  "test-id": "iconError"
192
- })), a("fieldset", {
192
+ })), r("fieldset", {
193
193
  key: "8ebc82bd13fd41c14ddea75c5cb6025f6dff1c2f",
194
194
  onChange: this.onInnerRadioChange,
195
195
  "aria-invalid": i ? `${i}` : undefined
196
- }, t && a("legend", {
196
+ }, t && r("legend", {
197
197
  key: "3b7fd0a58f9332b4bae1a1b79250e980c668569d",
198
198
  class: "sr-only"
199
199
  }, d(this)), this.inputDom()));
@@ -1,10 +1,10 @@
1
- import { r, c as t, h as e, a as o } from "./index-C7zSUT3M.js";
1
+ import { r, c as t, h as e, g as o } from "./index-COzomxjJ.js";
2
2
 
3
- import { c as a, e as i, o as c, l } from "./index-y0xcWkDl.js";
3
+ import { c as a, e as i, o as c, l } from "./index-EcLnUn1d.js";
4
4
 
5
5
  const n = '*{box-sizing:border-box}*:active{outline:none}*:focus-visible{outline:none;box-shadow:var(--const-double-focus-ring, 0 0 0 2px #ffffff, 0 0 0 4px #0066cc)}:host{box-shadow:none !important}::-moz-focus-inner{border:none}input,textarea,button{font-family:inherit;font-size:inherit;font-stretch:inherit}:host(.sr),:host(.sr) button{border:0;clip:rect(0 0 0 0);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px;white-space:nowrap}.sr,.sr button{border:0;clip:rect(0 0 0 0);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px;white-space:nowrap}.hidden{display:none}:host([hidden]){display:none}.invisible{visibility:hidden}:host{display:block}.radio-container{--comp-radio-margin:var(--tct-radio-margin, var(--tct-radio-margin-vertical, var(--tct-scale-2, 10px)) var(--tct-radio-margin-horizontal, var(--tct-scale-3, 15px)));margin:var(--comp-radio-margin)}.radio-container label[for]{color:var(--tct-radio-label-color, inherit);font-weight:var(--tct-radio-font-weight, var(--tct-checkbox-font-weight, 400));align-items:center;cursor:pointer;margin-right:var(--tct-radio-label-margin-right, 1rem);display:grid;grid-template-columns:18px 1fr;gap:var(--tct-scale-1, var(--app-scale-1x, 5px))}.radio-container label[for].label-hidden{grid-template-columns:var(--tct-radio-label-hidden-columns, 18px 1fr)}.radio-container svg{border-radius:50%;transition:box-shadow var(--tct-tween-1, var(--app-tween-1, 0.2s ease));outline:0;width:100%}.radio-container circle:nth-child(1){stroke-width:2;stroke:var(--tct-radio-stroke-color, var(--t-a11y-gray-color-AA, #949494));fill:var(--tct-radio-background-fill, transparent)}.radio-container input:checked+label circle:nth-child(1){fill:var(--tct-radio-checked-background-fill, var(--tct-radio-checked-bg, transparent));stroke:var(--tct-radio-checked-stroke-color, var(--tct-radio-stroke-color, var(--t-a11y-gray-color-AA, #949494)))}.radio-container input:checked+label .label-content{font-weight:var(--tct-radio-checked-label-font-weight, var(--tct-checkbox-selected-font-weight, 600));letter-spacing:var(--tct-radio-checked-label-letter-spacing, var(--tct-checkbox-selected-letter-spacing, 0.25));color:var(--tct-radio-checked-label-font-color, var(--tct-radio-checked-label-color, inherit))}.radio-container input:checked+label circle:nth-child(2){fill:var(--tct-radio-checked-fill, var(--tct-checkbox-check-stroke-color, var(--t-checkbox-fill, #2e2e2e)))}.radio-container input:hover+label circle:nth-child(1){fill:var(--tct-radio-hover-background-fill, transparent);stroke:var(--tct-radio-hover-stroke-color, var(--tct-radio-stroke-color, var(--t-a11y-gray-color-AA, #949494)))}.radio-container input:hover+label .label-content{color:var(--tct-radio-hover-label-color, inherit)}.radio-container input:focus+label circle:nth-child(1){fill:var(--tct-radio-focus-background-fill, transparent);stroke:var(--tct-radio-focus-stroke-color, var(--tct-checkbox-check-stroke-color, var(--t-checkbox-fill, #2e2e2e)))}.radio-container input:focus+label .label-content{color:var(--tct-radio-focus-label-color, var(--tct-radio-checked-label-color, inherit))}.radio-container input:focus-visible+label svg{box-shadow:var(--const-double-focus-ring)}.radio-tile{flex-basis:100px;flex-grow:0;flex-wrap:wrap}.radio-tile label[for]{color:var(--tct-radio-label-font-color, var(--tct-radio-label-color, inherit));align-items:center;border-radius:3px;border:2px solid var(--tct-radio-stroke-color, var(--t-a11y-gray-color-AA, #949494));background:var(--tct-radio-background-fill, transparent);cursor:pointer;display:block;padding:10px;position:relative;text-align:center;transition:border-color var(--tct-tween-1, var(--app-tween-1, 0.2s ease));white-space:nowrap}.radio-tile input:checked+label{border-color:var(--tct-radio-checked-stroke-color, var(--tct-checkbox-check-stroke-color, var(--t-checkbox-check-stroke-color, var(--t-checkbox-fill, #2e2e2e))));box-shadow:inset 0 0 0 2px #ffffff;background:var(--tct-radio-checked-background-fill, transparent);color:var(--tct-radio-checked-label-color, inherit)}.radio-tile input:checked+label:after{border-bottom-width:3px;border-bottom:5px solid var(--tct-radio-checked-stroke-color, var(--tct-checkbox-check-stroke-color, var(--t-checkbox-check-stroke-color, var(--t-checkbox-fill, #2e2e2e))));border-left-width:5px;border-left:8px solid transparent;border-right-width:5px;border-right:8px solid transparent;bottom:0;content:"";height:0;left:50%;margin-left:-5px;position:absolute;width:0}.radio-tile input:hover+label{border-color:var(--tct-radio-hover-stroke-color, var(--tct-radio-stroke-color, var(--t-a11y-gray-color-AA, #949494)));background:var(--tct-radio-hover-background-fill, transparent);color:var(--tct-radio-hover-label-color, var(--tct-radio-label-color, inherit))}.radio-tile input:focus+label,.radio-tile input:focus:checked+label{border-color:var(--tct-radio-focus-stroke-color, var(--tct-checkbox-check-stroke-color, var(--t-checkbox-check-stroke-color, var(--t-checkbox-fill, #2e2e2e))));background:var(--tct-radio-focus-background-fill, transparent);box-shadow:var(--const-double-focus-ring), var(--tct-global-focus, 0 0 0 2px #33b4ff);color:var(--tct-radio-focus-label-color, var(--tct-radio-checked-label-color, inherit))}input:disabled+label[for]{cursor:not-allowed;opacity:var(--tct-disabled-opacity, var(--app-disabled-opacity, 0.4))}';
6
6
 
7
- const s = class {
7
+ const d = class {
8
8
  constructor(e) {
9
9
  r(this, e);
10
10
  this.change = t(this, "change", 7);
@@ -139,8 +139,8 @@ const s = class {
139
139
  }
140
140
  };
141
141
 
142
- s.style = n;
142
+ d.style = n;
143
143
 
144
- export { s as q2_radio };
144
+ export { d as q2_radio };
145
145
  //# sourceMappingURL=q2-radio.entry.esm.js.map
146
146
  //# sourceMappingURL=q2-radio.entry.js.map
@@ -1,8 +1,8 @@
1
- import { r as e, h as t, F as i, a as s } from "./index-C7zSUT3M.js";
1
+ import { r as e, h as t, F as i, g as s } from "./index-COzomxjJ.js";
2
2
 
3
3
  import { d as a } from "./index-O1A-ZSZs.js";
4
4
 
5
- import { l as n } from "./index-y0xcWkDl.js";
5
+ import { l as n } from "./index-EcLnUn1d.js";
6
6
 
7
7
  const r = "*{box-sizing:border-box}*:active{outline:none}*:focus-visible{outline:none;box-shadow:var(--const-double-focus-ring, 0 0 0 2px #ffffff, 0 0 0 4px #0066cc)}:host{box-shadow:none !important}::-moz-focus-inner{border:none}input,textarea,button{font-family:inherit;font-size:inherit;font-stretch:inherit}:host(.sr),:host(.sr) button{border:0;clip:rect(0 0 0 0);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px;white-space:nowrap}.sr,.sr button{border:0;clip:rect(0 0 0 0);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px;white-space:nowrap}.hidden{display:none}:host([hidden]){display:none}.invisible{visibility:hidden}:host{display:inline}";
8
8
 
@@ -60,7 +60,7 @@ const o = class {
60
60
  // #endregion
61
61
  // #region Watchers
62
62
  updateMessage() {
63
- const {isValidDate: e, isBaseDateProvided: t, isValidBaseDate: i, dateObject: s, baseDateObject: r, locale: o, handleNumeric: d, messageFormat: l, isValidUnit: h, unit: u, trimSuffix: c} = this;
63
+ const {isValidDate: e, isBaseDateProvided: t, isValidBaseDate: i, dateObject: s, baseDateObject: r, locale: o, handleNumeric: d, messageFormat: h, isValidUnit: l, unit: u, trimSuffix: c} = this;
64
64
  if (!e || t && !i) {
65
65
  this.sync = false;
66
66
  this.displayedMessage = n("tecton.element.relativeTime.invalidDate");
@@ -70,8 +70,8 @@ const o = class {
70
70
  locale: o,
71
71
  localeMatcher: "best fit",
72
72
  numeric: d,
73
- style: l,
74
- unit: h ? u : null
73
+ style: h,
74
+ unit: l ? u : null
75
75
  });
76
76
  if (c) {
77
77
  this.displayedMessage = this.trimMessage(p);
@@ -1,6 +1,6 @@
1
- import { r as t, c as e, h as i, a as n } from "./index-C7zSUT3M.js";
1
+ import { r as t, c as e, h as i, g as n } from "./index-COzomxjJ.js";
2
2
 
3
- import { b as s, o as a, a as r, n as o, l as c } from "./index-y0xcWkDl.js";
3
+ import { b as s, o as a, a as r, n as o, l as c } from "./index-EcLnUn1d.js";
4
4
 
5
5
  const d = "*{box-sizing:border-box}*:active{outline:none}*:focus-visible{outline:none;box-shadow:var(--const-double-focus-ring, 0 0 0 2px #ffffff, 0 0 0 4px #0066cc)}:host{box-shadow:none !important}::-moz-focus-inner{border:none}input,textarea,button{font-family:inherit;font-size:inherit;font-stretch:inherit}:host(.sr),:host(.sr) button{border:0;clip:rect(0 0 0 0);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px;white-space:nowrap}.sr,.sr button{border:0;clip:rect(0 0 0 0);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px;white-space:nowrap}.hidden{display:none}:host([hidden]){display:none}.invisible{visibility:hidden}:host{display:block;background:var(--tct-section-background, var(--tct-section-background-color, var(--t-section-background-color, var(--tct-section-bg, var(--t-section-bg, var(--app-white, #ffffff))))));color:var(--tct-section-font-color, var(--t-section-font-color, var(--t-text, #4d4d4d)));border-radius:var(--tct-section-border-radius, var(--t-section-border-radius, var(--app-border-radius-1, 4px)));margin:var(--tct-section-margin, var(--t-section-margin, var(--app-scale-3x, 15px)));border-width:var(--tct-section-border-width, 0);border-style:var(--tct-section-border-style, solid);border-color:var(--tct-section-border-color, none)}@media screen and (max-width: 767px){:host{--comp-default-margin:var(--app-scale-3x, 15px) 0;margin:var(--tct-section-margin, var(--t-section-margin, var(--comp-default-margin)))}}@media print{:host{--comp-default-print-margin:var(--app-scale-3x, 15px) 0;margin:var(--tct-section-print-margin, var(--comp-default-print-margin))}}.wrapper{--comp-tween:var(--tct-section-tween, var(--t-section-tween, var(--app-tween-1, 0.2s ease)));--comp-default-wrapper-padding:var(--app-scale-1x, 5px) 0;display:block;padding:var(--tct-section-wrapper-padding, var(--t-section-wrapper-padding, var(--comp-default-wrapper-padding)))}.wrapper:hover{box-shadow:var(--tct-section-wrapper-hover-box-shadow, var(--t-section-wrapper-hover-box-shadow, inherit))}:host([collapsible]) .wrapper{--comp-tween:var(--tct-section-tween, var(--t-section-tween, var(--app-tween-2, 0.4s ease)))}header{--comp-default-header-padding:0 var(--app-scale-3x, 15px);padding:var(--tct-section-header-padding, var(--t-section-header-padding, var(--comp-default-header-padding)));display:flex}@media print{header{padding:var(--tct-section-header-print-padding, 0)}}header.has-header{min-height:var(--tct-section-header-min-height, var(--t-section-header-min-height, 44px))}.header-content{flex:1 1 100%;min-width:0;align-self:center}:host([collapsible]) .header-content{cursor:pointer}.title{margin:var(--tct-section-title-margin, 0);font-size:var(--tct-section-title-font-size, 20px);font-weight:var(--tct-section-title-font-weight, 600);text-transform:var(--tct-section-title-text-transform, none);letter-spacing:var(--tct-section-title-letter-spacing, inherit)}q2-icon{transition:transform var(--comp-tween)}:host(:not([expanded])) q2-icon,:host([expanded=false]) q2-icon{transform:rotate(180deg)}.content-wrapper{height:auto}.content-wrapper.is-closed{display:none;overflow:hidden}.content-wrapper.is-transitioning{overflow:hidden}:host([collapsible]) .content-wrapper{transition:height var(--comp-tween)}.content{--comp-default-content-padding:var(--app-scale-2x, 10px) var(--app-scale-3x, 15px);padding:var(--tct-section-content-padding, var(--t-section-content-padding, var(--comp-default-content-padding)))}@media print{.content{padding:var(--tct-section-content-print-padding, 0)}}.content:focus{box-shadow:none}:host([collapsible]) :host(:not([expanded])) .content{visibility:hidden}";
6
6