q2-tecton-elements 1.48.2 → 1.48.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 (193) hide show
  1. package/dist/cjs/click-elsewhere_2.cjs.entry.js +1 -1
  2. package/dist/cjs/{index-3f1498f7.js → index-f70484ba.js} +36 -1
  3. package/dist/cjs/index-f70484ba.js.map +1 -0
  4. package/dist/cjs/loader.cjs.js +1 -1
  5. package/dist/cjs/q2-action-sheet.cjs.entry.js +1 -1
  6. package/dist/cjs/q2-btn_2.cjs.entry.js +1 -1
  7. package/dist/cjs/q2-calendar.cjs.entry.js +1 -1
  8. package/dist/cjs/q2-card.cjs.entry.js +1 -1
  9. package/dist/cjs/q2-carousel-pane.cjs.entry.js +1 -1
  10. package/dist/cjs/q2-carousel.cjs.entry.js +1 -1
  11. package/dist/cjs/q2-chart-area.cjs.entry.js +1 -1
  12. package/dist/cjs/q2-chart-bar.cjs.entry.js +1 -1
  13. package/dist/cjs/q2-chart-donut.cjs.entry.js +1 -1
  14. package/dist/cjs/q2-checkbox-group.cjs.entry.js +1 -1
  15. package/dist/cjs/q2-checkbox.cjs.entry.js +1 -1
  16. package/dist/cjs/q2-data-table.cjs.entry.js +1 -1
  17. package/dist/cjs/q2-detail.cjs.entry.js +1 -1
  18. package/dist/cjs/q2-dropdown-item.cjs.entry.js +1 -1
  19. package/dist/cjs/q2-dropdown.cjs.entry.js +1 -1
  20. package/dist/cjs/q2-editable-field.cjs.entry.js +1 -1
  21. package/dist/cjs/q2-icon.cjs.entry.js +1 -1
  22. package/dist/cjs/q2-input.cjs.entry.js +1 -1
  23. package/dist/cjs/q2-item.cjs.entry.js +1 -1
  24. package/dist/cjs/q2-list.cjs.entry.js +1 -1
  25. package/dist/cjs/q2-loc.cjs.entry.js +1 -1
  26. package/dist/cjs/q2-message.cjs.entry.js +1 -1
  27. package/dist/cjs/q2-month-picker.cjs.entry.js +1 -1
  28. package/dist/cjs/q2-optgroup.cjs.entry.js +1 -1
  29. package/dist/cjs/q2-option-list.cjs.entry.js +1 -1
  30. package/dist/cjs/q2-pagination.cjs.entry.js +1 -1
  31. package/dist/cjs/q2-pill.cjs.entry.js +1 -1
  32. package/dist/cjs/q2-radio-group.cjs.entry.js +1 -1
  33. package/dist/cjs/q2-radio.cjs.entry.js +1 -1
  34. package/dist/cjs/q2-relative-time.cjs.entry.js +1 -1
  35. package/dist/cjs/q2-section.cjs.entry.js +1 -1
  36. package/dist/cjs/q2-select.cjs.entry.js +14 -7
  37. package/dist/cjs/q2-select.cjs.entry.js.map +1 -1
  38. package/dist/cjs/q2-stepper-pane.cjs.entry.js +1 -1
  39. package/dist/cjs/q2-stepper-vertical.cjs.entry.js +1 -1
  40. package/dist/cjs/q2-stepper.cjs.entry.js +1 -1
  41. package/dist/cjs/q2-tab-container.cjs.entry.js +1 -1
  42. package/dist/cjs/q2-tag.cjs.entry.js +1 -1
  43. package/dist/cjs/q2-tecton-elements.cjs.js +1 -1
  44. package/dist/cjs/q2-textarea.cjs.entry.js +1 -1
  45. package/dist/cjs/q2-tooltip.cjs.entry.js +1 -1
  46. package/dist/collection/components/q2-select/q2-select.js +20 -7
  47. package/dist/collection/components/q2-select/q2-select.js.map +1 -1
  48. package/dist/collection/utils/index.js +34 -0
  49. package/dist/collection/utils/index.js.map +1 -1
  50. package/dist/components/index2.js +35 -1
  51. package/dist/components/index2.js.map +1 -1
  52. package/dist/components/q2-select2.js +15 -8
  53. package/dist/components/q2-select2.js.map +1 -1
  54. package/dist/esm/click-elsewhere_2.entry.js +1 -1
  55. package/dist/esm/{index-58266aeb.js → index-c14ec4b5.js} +36 -2
  56. package/dist/esm/index-c14ec4b5.js.map +1 -0
  57. package/dist/esm/loader.js +1 -1
  58. package/dist/esm/q2-action-sheet.entry.js +1 -1
  59. package/dist/esm/q2-btn_2.entry.js +1 -1
  60. package/dist/esm/q2-calendar.entry.js +1 -1
  61. package/dist/esm/q2-card.entry.js +1 -1
  62. package/dist/esm/q2-carousel-pane.entry.js +1 -1
  63. package/dist/esm/q2-carousel.entry.js +1 -1
  64. package/dist/esm/q2-chart-area.entry.js +1 -1
  65. package/dist/esm/q2-chart-bar.entry.js +1 -1
  66. package/dist/esm/q2-chart-donut.entry.js +1 -1
  67. package/dist/esm/q2-checkbox-group.entry.js +1 -1
  68. package/dist/esm/q2-checkbox.entry.js +1 -1
  69. package/dist/esm/q2-data-table.entry.js +1 -1
  70. package/dist/esm/q2-detail.entry.js +1 -1
  71. package/dist/esm/q2-dropdown-item.entry.js +1 -1
  72. package/dist/esm/q2-dropdown.entry.js +1 -1
  73. package/dist/esm/q2-editable-field.entry.js +1 -1
  74. package/dist/esm/q2-icon.entry.js +1 -1
  75. package/dist/esm/q2-input.entry.js +1 -1
  76. package/dist/esm/q2-item.entry.js +1 -1
  77. package/dist/esm/q2-list.entry.js +1 -1
  78. package/dist/esm/q2-loc.entry.js +1 -1
  79. package/dist/esm/q2-message.entry.js +1 -1
  80. package/dist/esm/q2-month-picker.entry.js +1 -1
  81. package/dist/esm/q2-optgroup.entry.js +1 -1
  82. package/dist/esm/q2-option-list.entry.js +1 -1
  83. package/dist/esm/q2-pagination.entry.js +1 -1
  84. package/dist/esm/q2-pill.entry.js +1 -1
  85. package/dist/esm/q2-radio-group.entry.js +1 -1
  86. package/dist/esm/q2-radio.entry.js +1 -1
  87. package/dist/esm/q2-relative-time.entry.js +1 -1
  88. package/dist/esm/q2-section.entry.js +1 -1
  89. package/dist/esm/q2-select.entry.js +14 -7
  90. package/dist/esm/q2-select.entry.js.map +1 -1
  91. package/dist/esm/q2-stepper-pane.entry.js +1 -1
  92. package/dist/esm/q2-stepper-vertical.entry.js +1 -1
  93. package/dist/esm/q2-stepper.entry.js +1 -1
  94. package/dist/esm/q2-tab-container.entry.js +1 -1
  95. package/dist/esm/q2-tag.entry.js +1 -1
  96. package/dist/esm/q2-tecton-elements.js +1 -1
  97. package/dist/esm/q2-textarea.entry.js +1 -1
  98. package/dist/esm/q2-tooltip.entry.js +1 -1
  99. package/dist/q2-tecton-elements/{p-d238dc6b.entry.js → p-037f1f28.entry.js} +2 -2
  100. package/dist/q2-tecton-elements/p-0a608d4a.entry.js +2 -0
  101. package/dist/q2-tecton-elements/p-0a608d4a.entry.js.map +1 -0
  102. package/dist/q2-tecton-elements/{p-5538d1df.entry.js → p-23b4ee5c.entry.js} +2 -2
  103. package/dist/q2-tecton-elements/{p-cd225920.entry.js → p-2d10b3c4.entry.js} +2 -2
  104. package/dist/q2-tecton-elements/{p-3876d25b.entry.js → p-2fa050ba.entry.js} +2 -2
  105. package/dist/q2-tecton-elements/{p-65e7dab0.entry.js → p-326ea4b1.entry.js} +2 -2
  106. package/dist/q2-tecton-elements/{p-7fe8e174.entry.js → p-32fc4088.entry.js} +2 -2
  107. package/dist/q2-tecton-elements/p-34eff2c8.js +2 -0
  108. package/dist/q2-tecton-elements/p-34eff2c8.js.map +1 -0
  109. package/dist/q2-tecton-elements/{p-3d6e350e.entry.js → p-3530e050.entry.js} +2 -2
  110. package/dist/q2-tecton-elements/{p-abf27f97.entry.js → p-363e4e72.entry.js} +2 -2
  111. package/dist/q2-tecton-elements/{p-9c129294.entry.js → p-39c66aa0.entry.js} +2 -2
  112. package/dist/q2-tecton-elements/{p-5d339d72.entry.js → p-3c22599b.entry.js} +2 -2
  113. package/dist/q2-tecton-elements/{p-b85b6bc1.entry.js → p-4bb841ca.entry.js} +2 -2
  114. package/dist/q2-tecton-elements/{p-cdfe6e9d.entry.js → p-4f04df58.entry.js} +2 -2
  115. package/dist/q2-tecton-elements/{p-8a2b4f10.entry.js → p-546a1b35.entry.js} +2 -2
  116. package/dist/q2-tecton-elements/{p-0f9d4d30.entry.js → p-562bc5d7.entry.js} +2 -2
  117. package/dist/q2-tecton-elements/{p-4ce69e38.entry.js → p-66c66bb3.entry.js} +2 -2
  118. package/dist/q2-tecton-elements/{p-a99e1dc6.entry.js → p-69a18ec3.entry.js} +2 -2
  119. package/dist/q2-tecton-elements/{p-7c5ee4aa.entry.js → p-6a66ff01.entry.js} +2 -2
  120. package/dist/q2-tecton-elements/{p-2cbb1756.entry.js → p-6bf4d0e7.entry.js} +2 -2
  121. package/dist/q2-tecton-elements/{p-8764a131.entry.js → p-6d80a94c.entry.js} +2 -2
  122. package/dist/q2-tecton-elements/{p-803a5897.entry.js → p-7c701caa.entry.js} +2 -2
  123. package/dist/q2-tecton-elements/{p-48ecbcc9.entry.js → p-82bfca30.entry.js} +2 -2
  124. package/dist/q2-tecton-elements/{p-e08c6b8f.entry.js → p-83ccd9e7.entry.js} +2 -2
  125. package/dist/q2-tecton-elements/{p-63f9a5e5.entry.js → p-8683c826.entry.js} +2 -2
  126. package/dist/q2-tecton-elements/{p-e4241b1a.entry.js → p-8b5639df.entry.js} +2 -2
  127. package/dist/q2-tecton-elements/{p-50476216.entry.js → p-8cd46d16.entry.js} +2 -2
  128. package/dist/q2-tecton-elements/{p-646214e2.entry.js → p-917a8c98.entry.js} +2 -2
  129. package/dist/q2-tecton-elements/{p-b998e684.entry.js → p-a1aa64d9.entry.js} +2 -2
  130. package/dist/q2-tecton-elements/{p-c782a1d6.entry.js → p-a57750a2.entry.js} +2 -2
  131. package/dist/q2-tecton-elements/{p-97774780.entry.js → p-aa7e150c.entry.js} +2 -2
  132. package/dist/q2-tecton-elements/{p-871bad24.entry.js → p-ab844234.entry.js} +2 -2
  133. package/dist/q2-tecton-elements/{p-3468d85d.entry.js → p-bcd6b43b.entry.js} +2 -2
  134. package/dist/q2-tecton-elements/{p-e41f47bc.entry.js → p-bea623bd.entry.js} +2 -2
  135. package/dist/q2-tecton-elements/{p-05f5d0ab.entry.js → p-cd1fb170.entry.js} +2 -2
  136. package/dist/q2-tecton-elements/{p-c37fff1e.entry.js → p-cd72a928.entry.js} +2 -2
  137. package/dist/q2-tecton-elements/{p-414c5d4e.entry.js → p-d7a3301b.entry.js} +2 -2
  138. package/dist/q2-tecton-elements/{p-4e58e187.entry.js → p-df2ed4f8.entry.js} +2 -2
  139. package/dist/q2-tecton-elements/{p-c30c53dc.entry.js → p-e3b49661.entry.js} +2 -2
  140. package/dist/q2-tecton-elements/{p-5234ced7.entry.js → p-fa42284d.entry.js} +2 -2
  141. package/dist/q2-tecton-elements/{p-af3a383f.entry.js → p-fa43dced.entry.js} +2 -2
  142. package/dist/q2-tecton-elements/q2-tecton-elements.esm.js +1 -1
  143. package/dist/q2-tecton-elements/q2-tecton-elements.esm.js.map +1 -1
  144. package/dist/test/elements/q2-select-test.spec.js +8 -12
  145. package/dist/test/elements/q2-select-test.spec.js.map +1 -1
  146. package/dist/types/components/q2-select/q2-select.d.ts +2 -1
  147. package/dist/types/utils/index.d.ts +4 -0
  148. package/package.json +3 -3
  149. package/dist/cjs/index-3f1498f7.js.map +0 -1
  150. package/dist/esm/index-58266aeb.js.map +0 -1
  151. package/dist/q2-tecton-elements/p-139926a3.entry.js +0 -2
  152. package/dist/q2-tecton-elements/p-139926a3.entry.js.map +0 -1
  153. package/dist/q2-tecton-elements/p-7ea95f38.js +0 -2
  154. package/dist/q2-tecton-elements/p-7ea95f38.js.map +0 -1
  155. /package/dist/q2-tecton-elements/{p-d238dc6b.entry.js.map → p-037f1f28.entry.js.map} +0 -0
  156. /package/dist/q2-tecton-elements/{p-5538d1df.entry.js.map → p-23b4ee5c.entry.js.map} +0 -0
  157. /package/dist/q2-tecton-elements/{p-cd225920.entry.js.map → p-2d10b3c4.entry.js.map} +0 -0
  158. /package/dist/q2-tecton-elements/{p-3876d25b.entry.js.map → p-2fa050ba.entry.js.map} +0 -0
  159. /package/dist/q2-tecton-elements/{p-65e7dab0.entry.js.map → p-326ea4b1.entry.js.map} +0 -0
  160. /package/dist/q2-tecton-elements/{p-7fe8e174.entry.js.map → p-32fc4088.entry.js.map} +0 -0
  161. /package/dist/q2-tecton-elements/{p-3d6e350e.entry.js.map → p-3530e050.entry.js.map} +0 -0
  162. /package/dist/q2-tecton-elements/{p-abf27f97.entry.js.map → p-363e4e72.entry.js.map} +0 -0
  163. /package/dist/q2-tecton-elements/{p-9c129294.entry.js.map → p-39c66aa0.entry.js.map} +0 -0
  164. /package/dist/q2-tecton-elements/{p-5d339d72.entry.js.map → p-3c22599b.entry.js.map} +0 -0
  165. /package/dist/q2-tecton-elements/{p-b85b6bc1.entry.js.map → p-4bb841ca.entry.js.map} +0 -0
  166. /package/dist/q2-tecton-elements/{p-cdfe6e9d.entry.js.map → p-4f04df58.entry.js.map} +0 -0
  167. /package/dist/q2-tecton-elements/{p-8a2b4f10.entry.js.map → p-546a1b35.entry.js.map} +0 -0
  168. /package/dist/q2-tecton-elements/{p-0f9d4d30.entry.js.map → p-562bc5d7.entry.js.map} +0 -0
  169. /package/dist/q2-tecton-elements/{p-4ce69e38.entry.js.map → p-66c66bb3.entry.js.map} +0 -0
  170. /package/dist/q2-tecton-elements/{p-a99e1dc6.entry.js.map → p-69a18ec3.entry.js.map} +0 -0
  171. /package/dist/q2-tecton-elements/{p-7c5ee4aa.entry.js.map → p-6a66ff01.entry.js.map} +0 -0
  172. /package/dist/q2-tecton-elements/{p-2cbb1756.entry.js.map → p-6bf4d0e7.entry.js.map} +0 -0
  173. /package/dist/q2-tecton-elements/{p-8764a131.entry.js.map → p-6d80a94c.entry.js.map} +0 -0
  174. /package/dist/q2-tecton-elements/{p-803a5897.entry.js.map → p-7c701caa.entry.js.map} +0 -0
  175. /package/dist/q2-tecton-elements/{p-48ecbcc9.entry.js.map → p-82bfca30.entry.js.map} +0 -0
  176. /package/dist/q2-tecton-elements/{p-e08c6b8f.entry.js.map → p-83ccd9e7.entry.js.map} +0 -0
  177. /package/dist/q2-tecton-elements/{p-63f9a5e5.entry.js.map → p-8683c826.entry.js.map} +0 -0
  178. /package/dist/q2-tecton-elements/{p-e4241b1a.entry.js.map → p-8b5639df.entry.js.map} +0 -0
  179. /package/dist/q2-tecton-elements/{p-50476216.entry.js.map → p-8cd46d16.entry.js.map} +0 -0
  180. /package/dist/q2-tecton-elements/{p-646214e2.entry.js.map → p-917a8c98.entry.js.map} +0 -0
  181. /package/dist/q2-tecton-elements/{p-b998e684.entry.js.map → p-a1aa64d9.entry.js.map} +0 -0
  182. /package/dist/q2-tecton-elements/{p-c782a1d6.entry.js.map → p-a57750a2.entry.js.map} +0 -0
  183. /package/dist/q2-tecton-elements/{p-97774780.entry.js.map → p-aa7e150c.entry.js.map} +0 -0
  184. /package/dist/q2-tecton-elements/{p-871bad24.entry.js.map → p-ab844234.entry.js.map} +0 -0
  185. /package/dist/q2-tecton-elements/{p-3468d85d.entry.js.map → p-bcd6b43b.entry.js.map} +0 -0
  186. /package/dist/q2-tecton-elements/{p-e41f47bc.entry.js.map → p-bea623bd.entry.js.map} +0 -0
  187. /package/dist/q2-tecton-elements/{p-05f5d0ab.entry.js.map → p-cd1fb170.entry.js.map} +0 -0
  188. /package/dist/q2-tecton-elements/{p-c37fff1e.entry.js.map → p-cd72a928.entry.js.map} +0 -0
  189. /package/dist/q2-tecton-elements/{p-414c5d4e.entry.js.map → p-d7a3301b.entry.js.map} +0 -0
  190. /package/dist/q2-tecton-elements/{p-4e58e187.entry.js.map → p-df2ed4f8.entry.js.map} +0 -0
  191. /package/dist/q2-tecton-elements/{p-c30c53dc.entry.js.map → p-e3b49661.entry.js.map} +0 -0
  192. /package/dist/q2-tecton-elements/{p-5234ced7.entry.js.map → p-fa42284d.entry.js.map} +0 -0
  193. /package/dist/q2-tecton-elements/{p-af3a383f.entry.js.map → p-fa43dced.entry.js.map} +0 -0
@@ -1 +0,0 @@
1
- {"version":3,"names":["q2SelectCss","Q2SelectStyle0","Q2Select","this","lastTouchWasInPopover","scheduledAfterRender","addTouchEventListeners","isMobile","popoverElement","addEventListener","handleTouchStart","passive","initEventListeners","_a","screen","orientation","handleOrientationChange","window","visualViewport","initMutationObserver","observer","MutationObserver","onMutationObserved","observe","hostElement","childList","subtree","mutationObserver","showSelectedOptions","showSelected","showAllOptions","hasPopoverTop","hasPopoverBottom","slotContainer","querySelector","displaySlot","shadowRoot","hasCustomDisplay","assignedNodes","length","children","popTopSlot","topSlotHasNode","popBottomSlot","bottomSlotHasNode","checkSelectedOptions","onOptionListChange","event","stopPropagation","values","detail","handleSelectionChanges","destroyEventListeners","removeEventListener","removeTouchEventListeners","isLandscape","isModule","Tecton","platformDimensions","orientationType","includes","_c","_b","type","searchable","originalSearchable","document","activeElement","target","inputFocused","focus","onPopoverState","open","action","searchText","optionList","setActiveElement","inputField","inputKeydownHandler","readonly","disabled","key","hasSlot","isShiftTab","shiftKey","shouldShowActionSheet","executeActionSheet","keysForOptionListToHandle","value","preventDefault","openDropdownWithoutActiveElement","shouldClearSearchText","clearSearchText","handleOptionListExternalKeydown","visibilityToggleKeyDown","isRadioControlKey","setDefaultActiveElement","inputClickHandler","async","focusInput","toggleDropdown","inputInputHandler","eventValue","shouldClearValue","clearValue","prioritizeSearch","input","emit","query","inputFocusHandler","inputBlurHandler","inputChangeHandler","clickedElsewhere","localName","innerInputField","blur","onCustomDisplayClick","useActionSheets","loc","componentWillLoad","handleAriaLabel","buildStructuredSelectedOptions","handleMultilineOptionsUpdate","multilineOptions","componentDidLoad","overrideFocus","setTimeout","checkSelectedDisplay","componentDidRender","forEach","fn","disconnectedCallback","disconnect","isIframe","top","hasPlatformDimensions","Object","keys","innerInputContainer","badgeValue","multiple","optionsLength","selectedOptions","popoverMinHeight","minRows","firstOption","minHeight","getComputedStyle","parseInt","selectedDisplay","calculateMultiSelectSelectedDisplay","calculateSingleSelectSelectedDisplay","selectedDisplaySlot","firstSelectedValue","firstSelectedOptionElement","optionElements","find","Array","from","querySelectorAll","wrapperClasses","errors","classes","isArray","push","join","structuredSelectedOptions","map","option","ariaLabelObserver","valueUpdated","newValue","oldValue","element","multiline","openChanged","isOpen","waitForNextPaint","popoverTopContainer","height","offsetHeight","style","setProperty","removeProperty","_togglePopover","click","dispatchEvent","FocusEvent","openPopover","closePopover","setValue","options","valuesSet","Set","searchOptions","InputEvent","keydownHandler","onHostElementChange","onchange","onClearHandler","onHostElementInput","oninput","trim","toLocaleLowerCase","matchedCount","hidden","title","firstElementChild","tagName","display","innerText","searchParams","matched","some","text","statusMessageLocString","count","setStatusMessage","delegateFocus","fromHost","isRelatedTargetWithinHost","clearSelectedDisplay","isEventFromElement","handleFocusout","isLeavingHost","isHostLosingFocus","closeDropdown","handleSelectedDisplay","result","showActionSheetList","changeDetails","selectedOptionValues","change","undefined","textContent","handleExternalKeydown","message","clearTimeout","statusMessageTimer","statusMessage","selected","remove","namedSlot","hasNoValue","selectionClone","cloneNode","clientHeight","outerHTML","replaceChild","createElement","slot","appendChild","checkSelectedDisplayHeight","renderCustomDisplay","hasSelectedDisplay","h","name","render","class","onChange","role","ref","el","label","clearable","error","invalid","optional","placeholder","hideLabel","ariaExpanded","ariaControls","ariaHaspopup","iconRight","onClick","onInput","onKeyDown","onFocus","onBlur","badgeTheme","_role","_preventEntry","optionsDropdown","controlElement","direction","popDirection","mode","popoverMode","block","id","listLabel","tabindex","visibilityToggle","selectedOptionsCount","checked","htmlFor"],"sources":["src/components/q2-select/q2-select.scss?tag=q2-select&encapsulation=shadow","src/components/q2-select/q2-select.tsx"],"sourcesContent":["@import '../../styles/host.scss';\n@import '../../styles/functions';\n@import '../../styles/dropdowns';\n\n:host {\n --comp-select-margin: #{var-list(\n --tct-select-margin,\n unquote(\n '#{var-list(var-prefixer(select-margin-top), --app-scale-4, 30px)} 0 #{var-list(var-prefixer(select-margin-bottom), --app-scale-4, 30px)}'\n )\n )};\n display: block;\n margin: var(--comp-select-margin);\n}\n\n.q2-select-container {\n position: relative;\n display: block;\n}\n\n.q2-select-input {\n margin: 0;\n\n --tct-input-min-height: #{var-list(var-prefixer(select-input-min-height))};\n --tct-input-max-height: #{var-list(var-prefixer(select-input-max-height), none)};\n}\n\n::slotted([slot='_selected-display']) {\n width: 100%;\n min-height: var(--comp-selected-display-height, 44px);\n}\n\n.custom-display-content {\n position: absolute;\n bottom: 0;\n left: calc(var-list(--tct-scale-2, --app-scale-2x, 10px) + 1px);\n height: 44px;\n width: calc(100% - 34px - var-list(--tct-scale-3, --app-scale-3x, 15px));\n overflow: hidden;\n cursor: pointer;\n transition: left var-list(--tct-tween-2, --app-tween-1, unquote('0.2s ease'));\n}\n\n.custom-display-content:not([hidden]) {\n display: flex;\n align-items: center;\n}\n\n.is-searchable.is-focused .custom-display-content,\n.is-searchable .custom-display-content:active {\n left: calc(var-list(--tct-scale-3, --app-scale-3x, 15px) + 1px);\n}\n\n.has-error .custom-display-content {\n width: calc(100% - 68px - var-list(--tct-scale-3, --app-scale-3x, 15px));\n}\n\n.popover-content {\n display: flex;\n flex-direction: column-reverse;\n}\n\n.popover-bottom-container {\n position: sticky;\n bottom: 0;\n z-index: 5;\n}\n\n.popover-top-container {\n position: sticky;\n top: 0;\n z-index: 5;\n .multi-select-header {\n padding: var(--tct-scale-2, var(--app-scale-2x, 10px)) var(--tct-scale-2, var(--app-scale-2x, 10px));\n background: var(--app-white);\n display: flex;\n gap: var-list(--app-scale-2x, 10px);\n align-items: center;\n\n fieldset {\n margin: 0;\n padding: 0;\n border: 0;\n display: flex;\n gap: var-list(--app-scale-2x, 10px);\n }\n\n legend {\n padding: 0;\n float: left;\n }\n\n label {\n cursor: pointer;\n padding: var-list(\n var-prefixer(select-multi-select-option-padding),\n var-prefixer(btn-badge-padding),\n unquote('2px 5px')\n );\n font-size: var-list(\n var-prefixer(select-multi-select-option-font-size),\n var-prefixer(btn-badge-font-size),\n inherit\n );\n border-radius: var-list(\n var-prefixer(select-multi-select-option-radius),\n var-prefixer(btn-badge-border-radius),\n --app-border-radius-1,\n 3px\n );\n background: var-list(\n --tct-select-multi-select-option-background,\n var-prefixer(select-multi-select-option-bg),\n --tct-badge-background,\n var-prefixer(btn-badge-bg),\n transparent\n );\n color: var-list(\n var-prefixer(select-multi-select-option-color),\n var-prefixer(btn-badge-font-color),\n inherit\n );\n\n &:hover {\n background: var-list(\n --tct-select-multi-select-option-hover-background,\n var-prefixer(select-multi-select-option-hover-background-color),\n var-prefixer(btn-badge-hover-bg),\n var-prefixer(gray-14),\n --app-gray-l3,\n #f2f2f2\n );\n color: var-list(\n --tct-select-multi-select-option-hover-color,\n var-prefixer(select-multi-select-option-color),\n var-prefixer(btn-badge-hover-font-color),\n var-prefixer(gray-5),\n --app-gray-d2,\n #404040\n );\n }\n }\n\n input {\n &:checked + label {\n &,\n &:enabled:hover {\n background: var-list(\n --tct-select-multi-select-option-active-background,\n var-prefixer(select-multi-select-option-active-background-color),\n var-prefixer(btn-primary-bg),\n #2e2e2e\n );\n color: var-list(\n var-prefixer(select-multi-select-option-active-color),\n var-prefixer(btn-primary-font-color),\n --app-white,\n #ffffff\n );\n }\n }\n\n &:disabled + label {\n opacity: var-list(\n var-prefixer(select-multi-select-option-disabled-opacity),\n var-prefixer(btn-disabled-opacity),\n --app-disabled-opacity,\n 0.4\n );\n cursor: not-allowed;\n }\n\n &:focus + label {\n box-shadow: var(--const-double-focus-ring);\n }\n }\n }\n}\n","import {\n Component,\n Prop,\n Element,\n h,\n Listen,\n State,\n EventEmitter,\n Event,\n ComponentInterface,\n Watch,\n Method,\n} from '@stencil/core';\nimport { IEventDetail, Q2InputCustomEvent, Q2OptionListCustomEvent } from 'src/components';\nimport {\n handleAriaLabel,\n isEventFromElement,\n isHostLosingFocus,\n isRelatedTargetWithinHost,\n loc,\n overrideFocus,\n waitForNextPaint,\n isMobile,\n} from '../../utils';\nimport { IOptionValue } from '../q2-option-list/q2-option-list';\nimport { shouldShowActionSheet, showActionSheetList } from 'src/utils/action-sheet';\n\n@Component({ tag: 'q2-select', shadow: true, styleUrl: 'q2-select.scss' })\nexport class Q2Select implements ComponentInterface {\n /** Disables all interaction with the field and leverages the disabled visual style of `q2-input`. */\n @Prop({ reflect: true }) disabled: boolean = false;\n\n /**\n * The presence of `errors` will mark the field as invalid, putting it into an error state.\n * @localizable\n */\n @Prop() errors: string[];\n\n /**\n * Hide's the field's `<label>` element from view.\n * @warning\n * Only use when a visible label is impractical.\n */\n @Prop({ reflect: true, mutable: true }) hideLabel: boolean;\n\n /** Renders an icon button when the field is non-empty. Pressing the button clears all input from the field. */\n @Prop({ reflect: true }) clearable: boolean;\n\n /**\n * Instructs the component to use the action sheet workflow for displaying its options.\n *\n * For more information, see [Action Sheets](https://tecton.q2developer.com/guides/action-sheets/).\n * @warning\n * If your `q2-select` renders inside of an iframe, and you are using multiline/robust content options,\n * any custom CSS you apply to your options will not get passed up to the platform which displays the action sheet.\n * For this reason, we strongly suggest using the [q2-card](https://tecton.q2developer.com/ui/q2-card/) component since its styling is managed by Tecton.\n */\n @Prop() hoist: boolean = !!window.Tecton?.useActionSheets;\n\n /** Determines whether to show an error state. Its primary use-case is for an unfilled field. */\n @Prop({ reflect: true }) invalid: boolean;\n\n /**\n * The text that will be used as the label for the field.\n * @localizable\n */\n @Prop({ reflect: true, mutable: true }) label: string;\n\n /**\n * Determines the label that is applied to the option list for accessibility purposes.\n * @localizable\n */\n @Prop() listLabel: string = loc('tecton.element.select.listLabel');\n\n /** The minimum number of rows the component will try to display below or above the component when opened. */\n @Prop() minRows: number = 3;\n\n /** Enables text wrapping for `q2-option` elements. When `false`, the text truncates and does not wrap. */\n @Prop({ reflect: true }) multilineOptions: boolean = false;\n\n /** Enables multi-select functionality. */\n @Prop({ reflect: true }) multiple: boolean = false;\n\n /** Appends \"(optional)\" to the field label, and sets `aria-required` on the nested input tag to `false`. */\n @Prop({ reflect: true }) optional: boolean = false;\n\n /**\n * Text that appears within the field when it is blurred and empty.\n * Placeholder text disappears when the user selects an option.\n * @localizable\n */\n @Prop({ reflect: true }) placeholder: string;\n\n /** @deprecated */\n @Prop({ reflect: true }) popDirection: 'up' | 'down';\n\n /**\n * Determines the display mode of the popover.\n *\n * Providing a value of `legacy` instructs the popover to use absolute positioning instead of fixed positioning.\n *\n * @info\n * This is a temporary solution to work around styling issues related to using fixed positioning for the popover\n * when nested inside of elements with transform properties. This will be removed once the popover API is available\n * for use.\n */\n @Prop({ mutable: true }) popoverMode: 'legacy' = null;\n\n /**\n * Appends \"(read only)\" to the field label, and field becomes unusable, but remains focusable.\n * Takes priority over `optional` if both are `true`.\n */\n @Prop({ reflect: true }) readonly: boolean = false;\n\n /** Enables search functionality. */\n @Prop({ reflect: true, mutable: true }) searchable: boolean = false;\n\n /**\n * Each item in this array should correspond to the value of a `q2-option` element.\n * This property is only relevant for `multiple` (i.e., multi-select) implementations.\n */\n @Prop({ mutable: true }) selectedOptions: string[] = [];\n\n /**\n * The current value for the select. This should correspond to the value of a nested q2-option element.\n * This property is only relevant for single-select implementations.\n */\n @Prop({ mutable: true }) value: string;\n\n /** @deprecated */\n @Prop({ reflect: true, mutable: true }) ariaLabel: string;\n\n @Element() hostElement: HTMLElement;\n\n @State() open: boolean = false;\n @State() showSelected: boolean = false;\n @State() searchText: string = '';\n @State() hasCustomDisplay: boolean = false;\n @State() hasPopoverTop: boolean = false;\n @State() hasPopoverBottom: boolean = false;\n @State() inputFocused: boolean = false;\n @State() statusMessage: string;\n @State() prioritizeSearch: boolean = false;\n @State() structuredSelectedOptions: IOptionValue[] = [];\n\n inputField?: HTMLQ2InputElement;\n lastTouchWasInPopover: boolean = false;\n optionList: HTMLQ2OptionListElement;\n popoverElement?: HTMLQ2PopoverElement;\n popoverTopContainer?: HTMLDivElement;\n scheduledAfterRender: (() => void)[] = [];\n mutationObserver: MutationObserver;\n originalSearchable: boolean;\n\n /// Lifecycle Hooks ///\n componentWillLoad() {\n this.originalSearchable = this.searchable;\n handleAriaLabel(this);\n this.handleOrientationChange();\n this.buildStructuredSelectedOptions();\n this.handleMultilineOptionsUpdate(this.multilineOptions, false);\n }\n\n componentDidLoad() {\n this.initMutationObserver();\n this.initEventListeners();\n overrideFocus(this.hostElement);\n setTimeout(() => this.checkSelectedDisplay(), 0);\n }\n\n componentDidRender() {\n setTimeout(() => {\n this.scheduledAfterRender.forEach(fn => fn());\n this.scheduledAfterRender = [];\n }, 25);\n }\n\n disconnectedCallback() {\n this.mutationObserver?.disconnect();\n this.mutationObserver = null;\n this.destroyEventListeners();\n }\n\n /// Getters ///\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 innerInputField(): HTMLInputElement | HTMLButtonElement {\n return this.inputField?.shadowRoot?.querySelector('.input-field');\n }\n\n get innerInputContainer(): HTMLElement {\n return this.inputField?.shadowRoot?.querySelector('.input-container');\n }\n\n get badgeValue(): string {\n if (!this.multiple) return null;\n const optionsLength = this.selectedOptions?.length ?? 0;\n if (this.open && this.searchable) return optionsLength ? `${optionsLength}` : null;\n else return optionsLength > 1 ? `+${optionsLength - 1}` : null;\n }\n\n get popoverMinHeight() {\n const { minRows } = this;\n const firstOption = this.hostElement.querySelector<HTMLQ2OptionElement>('q2-option:not([hidden])');\n let minHeight = firstOption && window.getComputedStyle(firstOption).minHeight;\n\n // Safari doesn't return a min-height for non-visible items\n if (!minHeight || minHeight === '0px') minHeight = '44px';\n\n return minRows * parseInt(minHeight);\n }\n\n get selectedDisplay() {\n if (this.prioritizeSearch || this.searchText) return this.searchText;\n if (this.hasCustomDisplay) return '';\n return this.multiple ? this.calculateMultiSelectSelectedDisplay() : this.calculateSingleSelectSelectedDisplay();\n }\n\n get selectedDisplaySlot() {\n return this.hostElement.querySelector<HTMLElement>('[slot=\"_selected-display\"]');\n }\n\n get firstSelectedValue() {\n return this.multiple ? this.selectedOptions?.[0] : this.value;\n }\n\n get firstSelectedOptionElement() {\n const { firstSelectedValue } = this;\n return firstSelectedValue ? this.optionElements.find(({ value }) => value === firstSelectedValue) : null;\n }\n\n get optionElements() {\n return Array.from(this.hostElement.querySelectorAll<HTMLQ2OptionElement>('q2-option'));\n }\n\n get wrapperClasses() {\n const { errors } = this;\n const classes = ['q2-select-container'];\n if (Array.isArray(errors) && errors.length > 0) classes.push('has-error');\n if (this.inputFocused) classes.push('is-focused');\n if (this.searchable) classes.push('is-searchable');\n return classes.join(' ');\n }\n\n /// Watchers ///\n @Watch('value')\n @Watch('selectedOptions')\n buildStructuredSelectedOptions() {\n const { multiple, selectedOptions, value } = this;\n if (multiple) {\n this.structuredSelectedOptions = !!selectedOptions?.length\n ? selectedOptions.map(option => (typeof option === 'string' ? { value: option } : option))\n : [];\n } else {\n this.structuredSelectedOptions = value ? [{ value }] : [];\n }\n }\n\n @Watch('ariaLabel')\n ariaLabelObserver() {\n handleAriaLabel(this);\n }\n\n @Watch('value')\n valueUpdated() {\n if (this.multiple) return;\n this.clearSearchText();\n }\n\n @Watch('multilineOptions')\n handleMultilineOptionsUpdate(newValue, oldValue) {\n if (newValue === oldValue) return;\n this.optionElements.forEach(element => (element.multiline = newValue));\n }\n\n @Watch('open')\n openChanged(isOpen: boolean) {\n if (isOpen) {\n this.addTouchEventListeners();\n } else {\n this.removeTouchEventListeners();\n }\n this.scheduledAfterRender.push(async () => {\n await waitForNextPaint();\n const { popoverTopContainer, popoverElement } = this;\n const height = (isOpen && popoverTopContainer?.offsetHeight) || 0;\n if (height) {\n popoverElement.style.setProperty('--comp-popover-top-container-height', `${height}px`);\n } else {\n popoverElement.style.removeProperty('--comp-popover-top-container-height');\n }\n });\n }\n\n /// Events ///\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 * @legacyEvent\n */\n @Event() change: EventEmitter<{ value: string; selectedOptions: string[] }>;\n\n /**\n * Emitted when the input value changes.\n *\n * Requires the `searchable` prop to be set to `true`.\n */\n @Event() input: EventEmitter<{ query: string }>;\n\n /// Methods ///\n _togglePopover() {\n const { innerInputField } = this;\n innerInputField?.click();\n innerInputField?.focus();\n innerInputField.dispatchEvent(new FocusEvent('focus'));\n }\n\n /**\n * Emulates clicking the `<input>` to display the popover if it is hidden.\n *\n * @testOnly\n */\n @Method()\n async openPopover() {\n if (this.open || this.disabled) return;\n this._togglePopover();\n }\n\n /**\n * Emulates clicking the `<input>` to hide the popover if it is visible.\n *\n * @testOnly\n */\n @Method()\n async closePopover() {\n if (!this.open || this.disabled) return;\n this._togglePopover();\n }\n\n /**\n * Emulates clicking the `<input>` to display the popover and selecting the option(s) with the specified value(s).\n *\n * If the multi-select is enabled and the `closePopover` argument is `true` (default), the popover will be closed\n * after the option(s) are selected.\n *\n * @testOnly\n */\n @Method()\n async setValue(values: string | string[], options: { closePopover?: boolean } = { closePopover: true }) {\n const valuesSet = new Set(Array.isArray(values) ? values : [values]);\n if (!this.open) {\n await this.openPopover();\n await waitForNextPaint();\n }\n\n valuesSet.forEach(value => {\n this.optionElements.find(option => option.value === value)?.click();\n });\n\n if (options.closePopover) {\n await this.closePopover();\n await waitForNextPaint();\n }\n }\n\n /**\n * Emulates focusing the `<input>`, entering the provided value, and emitting an `input` event.\n *\n * @warning\n * Only applicable when the input is searchable.\n *\n * @testOnly\n */\n @Method()\n searchOptions(query: string) {\n if (!this.searchable) return;\n\n const { innerInputField } = this;\n innerInputField.focus();\n innerInputField.dispatchEvent(new FocusEvent('focus'));\n innerInputField.value = query;\n innerInputField.dispatchEvent(new InputEvent('input'));\n }\n\n /// Listeners ///\n @Listen('keydown')\n keydownHandler(event: KeyboardEvent) {\n this.inputKeydownHandler(event);\n }\n\n @Listen('change')\n onHostElementChange(event: CustomEvent<{ value: string; selectedOptions: string[] }>) {\n if (this.readonly || this.disabled) return;\n if (event.target !== this.hostElement || this.hostElement.onchange) return;\n if (this.multiple) {\n this.value = null;\n this.selectedOptions = event.detail.selectedOptions;\n } else {\n this.value = event.detail.value;\n this.selectedOptions = [];\n }\n }\n\n @Listen('clear')\n onClearHandler() {\n this.clearValue();\n }\n\n @Listen('input')\n onHostElementInput(event: CustomEvent) {\n if (!this.searchable || event.target !== this.hostElement || this.hostElement.oninput) return;\n const options = this.optionElements;\n const query = this.searchText.trim().toLocaleLowerCase();\n let matchedCount = 0;\n options.forEach(option => {\n if (query === '') {\n option.hidden = false;\n return;\n }\n\n const title =\n option.firstElementChild?.tagName === 'Q2-CARD'\n ? (option.firstElementChild as HTMLQ2CardElement).title\n : null;\n const { display = '', innerText = '' } = option;\n const searchParams = [display, title, innerText];\n const matched = searchParams.some(text => text?.toLocaleLowerCase().includes(query) ?? false);\n\n option.hidden = !matched;\n if (matched) matchedCount++;\n });\n\n const statusMessageLocString = query\n ? 'tecton.element.select.searchable.results'\n : 'tecton.element.select.allOptions';\n const count = query ? matchedCount : options.length;\n this.setStatusMessage(loc(statusMessageLocString, [count]));\n }\n\n @Listen('focus')\n delegateFocus(event: FocusEvent) {\n const fromHost = isRelatedTargetWithinHost(event, this.hostElement);\n const prioritizeSearch = (this.prioritizeSearch = fromHost && this.searchable);\n if (prioritizeSearch) {\n this.clearSelectedDisplay();\n } else if (isEventFromElement(event, this.hostElement)) {\n this.innerInputField.focus();\n }\n }\n\n @Listen('focusout')\n handleFocusout(event: FocusEvent) {\n const isLeavingHost = isHostLosingFocus(event, this.hostElement);\n if (isLeavingHost) this.closeDropdown();\n this.prioritizeSearch = !isLeavingHost && this.searchable;\n }\n\n @Listen('displayChanged')\n handleSelectedDisplay(event: CustomEvent) {\n if (this.multiple) return;\n this.inputField.value = event.detail.display;\n }\n\n /// Helpers ///\n async executeActionSheet(event: MouseEvent | KeyboardEvent) {\n const result = await showActionSheetList(this, event);\n this.handleSelectionChanges(result);\n }\n\n addTouchEventListeners = () => {\n if (!isMobile() || !this.popoverElement) return;\n\n this.popoverElement.addEventListener('touchstart', this.handleTouchStart, { passive: true });\n };\n\n handleSelectionChanges(changeDetails: { value?: string; values?: IOptionValue[] }) {\n const { value = '', values = [] } = changeDetails;\n const selectedOptionValues = values.map(value => value.value);\n const { multiple } = this;\n if (!this.hostElement.onchange) {\n this.selectedOptions = selectedOptionValues;\n }\n\n this.change.emit({\n value: multiple ? undefined : value,\n selectedOptions: multiple ? selectedOptionValues : undefined,\n });\n }\n\n initEventListeners = () => {\n if (!isMobile()) return;\n screen?.orientation?.addEventListener('change', this.handleOrientationChange);\n window.addEventListener('resize', this.handleOrientationChange);\n visualViewport?.addEventListener('resize', this.handleOrientationChange);\n };\n\n initMutationObserver = () => {\n const observer = new MutationObserver(this.onMutationObserved);\n observer.observe(this.hostElement, { childList: true, subtree: true });\n this.mutationObserver = observer;\n this.onMutationObserved();\n };\n\n showSelectedOptions = () => {\n this.showSelected = true;\n };\n\n showAllOptions = () => {\n this.showSelected = false;\n };\n\n clearValue() {\n const { multiple } = this;\n this.value = '';\n this.selectedOptions = [];\n this.change.emit({ value: multiple ? undefined : '', selectedOptions: multiple ? [] : undefined });\n }\n\n calculateMultiSelectSelectedDisplay() {\n const { firstSelectedOptionElement, firstSelectedValue, multilineOptions } = this;\n if (!firstSelectedValue) return '';\n if (firstSelectedOptionElement?.display) return loc(firstSelectedOptionElement.display);\n if (multilineOptions && this.searchable) return this.searchText;\n if (multilineOptions) return '';\n return (\n firstSelectedOptionElement?.textContent?.trim() ?? firstSelectedOptionElement?.value ?? firstSelectedValue\n );\n }\n\n calculateSingleSelectSelectedDisplay() {\n const { firstSelectedOptionElement, multilineOptions } = this;\n if (multilineOptions) {\n return (firstSelectedOptionElement?.display && loc(firstSelectedOptionElement.display)) || this.value || '';\n } else {\n return (\n (firstSelectedOptionElement?.display && loc(firstSelectedOptionElement.display)) ||\n firstSelectedOptionElement?.textContent?.trim() ||\n this.value ||\n ''\n );\n }\n }\n\n onMutationObserved = () => {\n const { hostElement, hasPopoverTop, hasPopoverBottom } = this;\n const slotContainer = hostElement.querySelector('.custom-display-content');\n const displaySlot = hostElement.shadowRoot.querySelector<HTMLSlotElement>('slot[name=\"q2-select-display\"]');\n const hasCustomDisplay = !!displaySlot\n ? displaySlot.assignedNodes().length > 0\n : slotContainer.children.length > 0;\n\n if (this.hasCustomDisplay !== hasCustomDisplay) {\n this.hasCustomDisplay = hasCustomDisplay;\n }\n\n const popTopSlot = hostElement.shadowRoot.querySelector<HTMLSlotElement>('slot[name=\"popover-top\"]');\n const topSlotHasNode = popTopSlot.assignedNodes().length > 0;\n if (hasPopoverTop !== topSlotHasNode) {\n this.hasPopoverTop = topSlotHasNode;\n }\n\n const popBottomSlot = hostElement.shadowRoot.querySelector<HTMLSlotElement>('slot[name=\"popover-bottom\"]');\n const bottomSlotHasNode = popBottomSlot.assignedNodes().length > 0;\n if (hasPopoverBottom !== bottomSlotHasNode) {\n this.hasPopoverBottom = bottomSlotHasNode;\n }\n\n this.checkSelectedOptions();\n };\n\n onOptionListChange = (event: Q2OptionListCustomEvent<{ value: string; values: IOptionValue[] }>) => {\n event.stopPropagation();\n const { values } = event.detail;\n\n if (values.length === 0) this.showAllOptions();\n this.handleSelectionChanges(event.detail);\n };\n\n openDropdownWithoutActiveElement() {\n if (this.readonly || this.disabled) return;\n this.optionList.setActiveElement(null);\n this.open = true;\n }\n\n closeDropdown() {\n this.open = false;\n this.lastTouchWasInPopover = false;\n this.clearSearchText();\n }\n\n destroyEventListeners = () => {\n if (!isMobile()) return;\n screen?.orientation?.removeEventListener('change', this.handleOrientationChange);\n window.removeEventListener('resize', this.handleOrientationChange);\n visualViewport?.removeEventListener('resize', this.handleOrientationChange);\n this.removeTouchEventListeners();\n };\n\n clearSearchText() {\n if (!this.searchText) return;\n this.searchText = '';\n this.input.emit({ query: '' });\n }\n\n toggleDropdown() {\n if (this.readonly || this.disabled) return;\n\n if (this.open && !this.searchText) {\n this.closeDropdown();\n } else {\n this.openDropdownWithoutActiveElement();\n }\n }\n\n focusInput() {\n this.inputField?.dispatchEvent(new FocusEvent('focus'));\n }\n\n handleOptionListExternalKeydown(event: KeyboardEvent) {\n this.optionList.handleExternalKeydown(event);\n }\n\n handleOrientationChange = () => {\n if (!isMobile()) return;\n\n let isLandscape: boolean;\n if (this.isModule) {\n isLandscape = window.Tecton?.platformDimensions.orientationType.includes('landscape');\n } else {\n isLandscape = screen?.orientation?.type?.includes('landscape');\n }\n if (isLandscape && this.searchable) this.searchable = false;\n if (!isLandscape) this.searchable = this.originalSearchable;\n };\n\n handleTouchStart = (event: TouchEvent) => {\n if (document.activeElement === this.hostElement) {\n const target = event.target as HTMLElement;\n if (target && target !== this.hostElement) {\n this.inputFocused = false;\n this.lastTouchWasInPopover = true;\n target.focus();\n }\n }\n };\n\n statusMessageTimer: NodeJS.Timeout;\n setStatusMessage(message) {\n clearTimeout(this.statusMessageTimer);\n this.statusMessage = '';\n this.statusMessageTimer = setTimeout(() => {\n this.statusMessage = message;\n }, 1000);\n }\n\n checkSelectedOptions() {\n const { multiple, selectedOptions, value } = this;\n this.optionElements.forEach(option => {\n if (multiple) {\n option.selected = selectedOptions.includes(option.value);\n } else {\n option.selected = option.value === value;\n }\n });\n }\n\n clearSelectedDisplay() {\n this.selectedDisplaySlot?.remove();\n }\n\n checkSelectedDisplay() {\n // This prevents a an undefined property error when the spec tests are run\n try {\n this.hostElement;\n } catch (error) {\n return null;\n }\n\n let namedSlot = this.selectedDisplaySlot;\n const { value, multiple, selectedOptions, multilineOptions, firstSelectedOptionElement, prioritizeSearch } =\n this;\n const hasNoValue = !value && multiple && !selectedOptions?.length;\n if (prioritizeSearch || !multilineOptions || hasNoValue) return this.clearSelectedDisplay();\n\n if (!firstSelectedOptionElement || firstSelectedOptionElement.display) return this.clearSelectedDisplay();\n\n // Clone selected option and remove elements with hide-on-select attribute\n const selectionClone = firstSelectedOptionElement.firstElementChild.cloneNode(true) as HTMLElement;\n selectionClone.querySelectorAll('[hide-on-select]').forEach(element => element.remove());\n\n if (namedSlot) {\n const height = namedSlot.clientHeight === 0 ? 'auto' : `${namedSlot.clientHeight}px`;\n namedSlot.style.setProperty('--comp-selected-display-height', height);\n if (namedSlot.firstElementChild.outerHTML !== selectionClone.outerHTML) {\n namedSlot.replaceChild(selectionClone, namedSlot.firstElementChild);\n }\n } else {\n namedSlot = document.createElement('div');\n namedSlot.slot = '_selected-display';\n namedSlot.appendChild(selectionClone);\n this.hostElement.appendChild(namedSlot);\n }\n return namedSlot;\n }\n\n checkSelectedDisplayHeight() {\n const { selectedDisplaySlot } = this;\n if (!selectedDisplaySlot) return;\n selectedDisplaySlot.style.setProperty('--comp-selected-display-height', '44px');\n }\n\n /// Event handlers ///\n onPopoverState = ({\n detail: { open, action },\n }: CustomEvent<{ open: boolean; action: 'close' | 'select' | 'open' }>) => {\n if (!open || this.searchText) {\n if (action !== 'select') {\n this.optionList.setActiveElement(null);\n }\n this.inputField.focus();\n }\n\n if (this.open === open) return;\n this.open = open;\n };\n\n inputKeydownHandler = (event: KeyboardEvent) => {\n if (this.readonly || this.disabled) return;\n const key = event.key;\n const hasSlot = this.hasPopoverTop || this.hasPopoverBottom;\n const isShiftTab = key === 'Tab' && event.shiftKey;\n if (hasSlot && (key === 'Tab' || key === 'Enter' || isShiftTab)) return;\n if (shouldShowActionSheet(this, event)) {\n return this.executeActionSheet(event);\n }\n\n const keysForOptionListToHandle = [\n 'ArrowDown',\n 'ArrowUp',\n 'PageDown',\n 'PageUp',\n 'Home',\n 'End',\n 'Escape',\n 'Tab',\n ];\n\n if (this.searchable && (key === ' ' || key === 'Enter') && this.inputField.value == '') {\n event.preventDefault();\n if (!this.open) this.openDropdownWithoutActiveElement();\n }\n\n if (this.searchable && !keysForOptionListToHandle.includes(key)) return;\n if (this.shouldClearSearchText(event)) this.clearSearchText();\n\n // Prevent click event from firing when spacebar is pressed\n if (key === ' ') event.preventDefault();\n\n this.handleOptionListExternalKeydown(event);\n };\n\n shouldClearSearchText(event: KeyboardEvent) {\n return this.searchable && !!this.searchText && event.key === 'Escape';\n }\n\n visibilityToggleKeyDown = (event: KeyboardEvent) => {\n const key = event.key;\n const isShiftTab = key === 'Tab' && event.shiftKey;\n const isRadioControlKey = ['ArrowLeft', 'ArrowRight', 'ArrowUp', 'ArrowDown'].includes(key);\n if (isRadioControlKey) event.stopPropagation();\n if (isShiftTab) {\n event.stopPropagation();\n // allows shift+tab keys to select the top slot when present\n if (this.hasPopoverTop) return;\n\n this.optionList.setDefaultActiveElement();\n }\n };\n\n inputClickHandler = async (event: MouseEvent) => {\n event.stopPropagation();\n // Check if the last interaction was a touch within the popover\n // If so, don't toggle the dropdown as the user is likely continuing to interact\n if (this.lastTouchWasInPopover && this.open && this.searchable) {\n // Reset the flag and don't toggle\n this.lastTouchWasInPopover = false;\n this.focusInput();\n return;\n }\n\n // Reset the flag for any other click\n this.lastTouchWasInPopover = false;\n\n if (shouldShowActionSheet(this)) {\n return this.executeActionSheet(event);\n }\n this.toggleDropdown();\n this.focusInput();\n };\n\n inputInputHandler = (event: Q2InputCustomEvent<IEventDetail> & InputEvent) => {\n event.stopPropagation();\n const eventValue = event.detail.value;\n const shouldClearValue = !!this.value;\n\n if (shouldClearValue) this.clearValue();\n if (!this.open) this.openDropdownWithoutActiveElement();\n\n this.prioritizeSearch = true;\n this.searchText = eventValue;\n this.input.emit({ query: eventValue });\n };\n\n inputFocusHandler = () => {\n this.inputFocused = true;\n };\n\n inputBlurHandler = () => {\n this.inputFocused = false;\n };\n\n inputChangeHandler = (event: Event) => {\n event.stopPropagation();\n };\n\n clickedElsewhere = (event: CustomEvent) => {\n const target = event.target as HTMLClickElsewhereElement;\n if (target.localName !== 'click-elsewhere') return;\n event.stopPropagation();\n const { popoverElement } = this;\n if (!popoverElement) return;\n popoverElement.open = false;\n this.innerInputField.blur();\n };\n\n onCustomDisplayClick = (event: MouseEvent) => {\n event.stopPropagation();\n this.focusInput();\n this.toggleDropdown();\n };\n\n removeTouchEventListeners = () => {\n if (!isMobile() || !this.popoverElement) return;\n\n this.popoverElement.removeEventListener('touchstart', this.handleTouchStart);\n };\n\n /// DOM ///\n renderCustomDisplay() {\n const hasSelectedDisplay = this.checkSelectedDisplay();\n if (!hasSelectedDisplay) return;\n this.checkSelectedDisplayHeight();\n\n return (\n <slot\n name=\"_selected-display\"\n slot=\"custom-display\"\n />\n );\n }\n\n render() {\n return (\n <click-elsewhere\n class={this.wrapperClasses}\n onChange={this.clickedElsewhere}\n >\n <div\n aria-live=\"polite\"\n aria-atomic=\"true\"\n role=\"status\"\n class=\"sr\"\n >\n {this.statusMessage}\n </div>\n <q2-input\n ref={el => (this.inputField = el)}\n class=\"q2-select-input\"\n label={(this.label && loc(this.label)) || ''}\n value={this.selectedDisplay}\n clearable={(this.clearable && (!!this.value || !!this.selectedOptions?.length)) || undefined}\n errors={\n (Array.isArray(this.errors) &&\n this.errors.length > 0 &&\n this.errors.map(error => loc(error))) ||\n (this.invalid && ['tecton.element.select.invalid']) ||\n []\n }\n disabled={this.disabled}\n optional={this.optional}\n readonly={!!this.readonly}\n placeholder={this.placeholder || undefined}\n hideLabel={this.hideLabel}\n ariaExpanded={`${this.open}`}\n ariaControls=\"option-list\"\n ariaHaspopup=\"listbox\"\n test-id=\"toggleDropdown\"\n hide-messages\n iconRight=\"chevron-down\"\n onClick={this.inputClickHandler}\n onInput={this.inputInputHandler}\n onKeyDown={this.inputKeydownHandler}\n onFocus={this.inputFocusHandler}\n onBlur={this.inputBlurHandler}\n onChange={this.inputChangeHandler}\n badgeValue={this.badgeValue}\n badgeTheme={this.inputFocused ? 'primary' : undefined}\n _role=\"combobox\"\n _preventEntry={!this.searchable}\n >\n {this.renderCustomDisplay()}\n </q2-input>\n <div\n class=\"custom-display-content\"\n hidden={!this.hasCustomDisplay || !!this.searchText}\n onClick={this.onCustomDisplayClick}\n >\n <slot name=\"q2-select-display\" />\n </div>\n {this.optionsDropdown()}\n </click-elsewhere>\n );\n }\n\n optionsDropdown() {\n return (\n <q2-popover\n ref={el => (this.popoverElement = el)}\n controlElement={this.innerInputContainer}\n open={this.open}\n minHeight={this.popoverMinHeight}\n direction={this.popDirection}\n mode={this.popoverMode || undefined}\n block\n >\n <div class=\"popover-content\">\n <q2-option-list\n onPopoverState={this.onPopoverState}\n ref={el => (this.optionList = el)}\n type=\"listbox\"\n id=\"option-list\"\n show-selected={this.showSelected}\n label={this.listLabel}\n multiple={this.multiple}\n selectedOptions={this.structuredSelectedOptions}\n onChange={this.onOptionListChange}\n >\n <slot />\n </q2-option-list>\n <div\n class=\"popover-top-container\"\n ref={el => (this.popoverTopContainer = el)}\n hidden={!this.multiple && !this.hasPopoverTop}\n tabindex=\"-1\"\n >\n <slot name=\"popover-top\"></slot>\n {this.multiple && this.visibilityToggle()}\n </div>\n </div>\n <div\n class=\"popover-bottom-container\"\n hidden={!this.hasPopoverBottom}\n tabindex=\"-1\"\n >\n <slot name=\"popover-bottom\" />\n </div>\n </q2-popover>\n );\n }\n\n visibilityToggle() {\n const selectedOptionsCount = this.selectedOptions?.length ?? 0;\n const { showSelected } = this;\n return (\n <div class=\"multi-select-header\">\n <fieldset>\n <legend aria-label={loc('tecton.element.select.multiHeader.showing')}>\n {loc('tecton.element.select.multiHeader.showing')}\n </legend>\n <div>\n <input\n class=\"sr\"\n type=\"radio\"\n id=\"all\"\n name=\"viewDisplay\"\n value=\"all\"\n checked={!showSelected}\n aria-label={loc('tecton.element.select.multiHeader.allAriaLabel')}\n test-id=\"allOptionsButton\"\n onClick={this.showAllOptions}\n onKeyDown={this.visibilityToggleKeyDown}\n />\n <label htmlFor=\"all\">{loc('tecton.element.select.multiHeader.all')}</label>\n </div>\n\n <div>\n <input\n class=\"sr\"\n type=\"radio\"\n id=\"selected\"\n disabled={selectedOptionsCount === 0}\n name=\"viewDisplay\"\n value=\"selected\"\n aria-label={loc('tecton.element.select.multiHeader.selectedAriaLabel', [\n selectedOptionsCount,\n ])}\n checked={showSelected}\n test-id=\"selectedOptionsButton\"\n onClick={this.showSelectedOptions}\n onKeyDown={this.visibilityToggleKeyDown}\n />\n <label htmlFor=\"selected\">\n {loc('tecton.element.select.multiHeader.selected', [selectedOptionsCount])}\n </label>\n </div>\n </fieldset>\n </div>\n );\n }\n}\n"],"mappings":"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"}
@@ -1,2 +0,0 @@
1
- import{h as e}from"./p-a5f18e27.js";function n(){return/Android|webOS|iPhone|iPad|iPod|BlackBerry|Mobile|IEMobile|Windows Phone|Opera Mini/i.test(navigator.userAgent)}function o(e){let n=e;while(n&&n!==document.body&&n!==document.documentElement){if(n.parentElement){n=n.parentElement}else{const e=n.getRootNode();if(e&&e.host){n=e.host}else{break}}const e=window.getComputedStyle(n);const o=e.overflow==="scroll"||e.overflow==="auto"||e.overflowX==="scroll"||e.overflowX==="auto"||e.overflowY==="scroll"||e.overflowY==="auto";const i=n.scrollHeight>n.clientHeight||n.scrollWidth>n.clientWidth;if(o&&i){return true}}return false}function i(e,n){const o=e.type;const i=["focusin","focus"];const t=i.includes(o);const r=t?e.target:e.relatedTarget;const a=e=>{if(e===n)return true;if(e.parentElement){return a(e.parentElement)}return false};if(!(r instanceof HTMLElement))return true;return!a(r)}function t(e,n){return e.relatedTarget!==n&&!n.contains(e.relatedTarget)}function r(e,n){var o;return((o=e.composedPath)===null||o===void 0?void 0:o.call(e)[0])===n}function a(e){e.focus=()=>e===null||e===void 0?void 0:e.dispatchEvent(new FocusEvent("focus",{bubbles:false}))}function s(){const e=navigator.userAgent.toLowerCase();return e.includes("firefox")}function l(){return"ontouchstart"in window||navigator.maxTouchPoints>0}function u(e,n){if(e===undefined)return e;if(!n)return e!=="Symbol()"?e:undefined;return n.includes(e)||e===""?e:undefined}let c=1e3;function d(){return c++}function f(e){requestAnimationFrame((()=>{requestAnimationFrame(e)}))}function m(e){return e.offsetWidth>0||e.offsetHeight>0||e.getClientRects().length>0}function p(){return new Promise((e=>f(e)))}function b(e,n){var o,i,t;if(!e)return"";if(((o=window.Tecton)===null||o===void 0?void 0:o.noStrings)===true){return e}return(t=(i=window===null||window===void 0?void 0:window.TectonElements)===null||i===void 0?void 0:i.loc(e,n))!==null&&t!==void 0?t:e}function v(n){const{label:o,hideLabel:i,optional:t,readonly:r}=n;const a=["input-label"];let s="";let l=i;if(!l){const e=n.hostElement.querySelectorAll('[slot="label"]');const i=e.length>0;const t=!!o;l=t||i?false:true}if(l)a.push("sr");if(t){s=e("span",{class:"optional-tag"},b("tecton.element.input.optional"))}if(r){s=e("span",{class:"optional-tag"},b("tecton.element.input.readonly"));a.push("readonly-field")}return e("label",{htmlFor:n.inputId,class:a.join(" ")},e("slot",{name:"label"},o?b(o):undefined,s))}function w(e,n){return e.querySelector(`[slot="${n}"]`)!==null}function h(e){const{ariaLabel:n}=e;if(!n)return;const o=Symbol().toString();if(n===o){e.ariaLabel=undefined;return}if("hideLabel"in e)e.hideLabel=true;e.label=b(n);e.ariaLabel=undefined}function g(e,n,o,i){if(typeof e[n]==="undefined")return;if(e[n]){y(e,n,"prop")}e[o]=e[n];if(i){delete e[n]}}function y(e,n,o){if(window.location.hostname==="localhost"||window.location.host==="stack.q2developer.com"){if(e[n]==="undefined")return;const i=e.constructor.name.toLowerCase().slice(2);switch(o){case"prop":if(n==="size"&&i==="btn"){console.warn(`The property of size in q2-btn should not be typeof number, or typeof string containing a number. This functionality will be deprecated in an upcoming release. Instead, please use the value 'undefined', or typeof string with any of the following values: "small" / "medium" / "large" `)}else{console.warn(`The property ${n} in q2-${i} has been marked for deprecation and will be removed in an upcoming major release.`)}break;case"function":console.warn(`The function ${n} in ${i} has been marked for deprecation and will be removed in an upcoming major release.`);break;case"method":console.warn(`The method ${n} in ${i} has been marked for deprecation and will be removed in an upcoming major release.`);break;case"event":console.warn(`The event ${n} in ${i} has been marked for deprecation and will be removed in an upcoming major release.`);break;default:console.error(`handleDeprecationWarning --\x3e No type found for desired deprecation: ${n} in q2-${i}: deprecatedItemType = ${n}`)}}}function $(n){const o=n.hasError?"danger":"info";return e("div",{class:"messages-container"},e("q2-message",{appearance:"minimal",description:true,type:o,"test-id":"message"},e("ul",{id:n.inputDescribedBy},n.messages.map((n=>e("li",{"test-id":"messageListItem"},b(n)))))))}function k(e){const n=e.hostElement.shadowRoot.querySelector(".messages-container");const o=n.querySelector("q2-message");f((()=>{const i=e.showMessages&&e.hasFocus?o.getBoundingClientRect().height:0;if(n.style.getPropertyValue("height")===`${i}px`)return;if(i===0){o.classList.add("invisible");n.style.removeProperty("height")}else{o.classList.remove("invisible");n.style.setProperty("height",`${i}px`)}}))}const q=()=>{var e,n;return(n=(e=window.TectonElements)===null||e===void 0?void 0:e.resizeIframe)===null||n===void 0?void 0:n.call(e)};const T=e=>{if(!e.intent&&["primary","secondary"].includes(e.color)){e.intent=`workflow-${e.color}`;e.color=undefined}};export{g as a,l as b,d as c,n as d,v as e,w as f,t as g,h,r as i,i as j,s as k,b as l,$ as m,f as n,a as o,u as p,m as q,q as r,k as s,y as t,o as u,T as v,p as w};
2
- //# sourceMappingURL=p-7ea95f38.js.map
@@ -1 +0,0 @@
1
- {"version":3,"names":["isMobile","test","navigator","userAgent","isInScrollableContainer","element","current","document","body","documentElement","parentElement","root","getRootNode","host","style","window","getComputedStyle","hasScrollableOverflow","overflow","overflowX","overflowY","hasOverflowingContent","scrollHeight","clientHeight","scrollWidth","clientWidth","isHostLosingFocus","event","hostElement","type","focusInTypes","isFocusIn","includes","elementGainingFocus","target","relatedTarget","isElementNestedInHostElement","HTMLElement","isRelatedTargetWithinHost","contains","isEventFromElement","_a","composedPath","call","overrideFocus","focus","dispatchEvent","FocusEvent","bubbles","isFirefox","toLowerCase","isTouchDevice","maxTouchPoints","getAriaValueFromProp","prop","validValues","undefined","guid","createGuid","nextPaint","fn","requestAnimationFrame","isVisible","offsetWidth","offsetHeight","getClientRects","length","waitForNextPaint","Promise","resolve","loc","key","subs","Tecton","noStrings","_c","_b","TectonElements","labelDOM","label","hideLabel","optional","readonly","labelClasses","helpText","shouldHideLabel","labelSlotElements","querySelectorAll","hasSlotContent","hasLabel","push","h","class","htmlFor","inputId","join","name","slotName","querySelector","handleAriaLabel","ariaLabel","FW_WRAPPERS_EMPTY_PROP","Symbol","toString","handleRenamedProp","oldProp","newProp","removeOldProp","handleDeprecationWarning","deprecatedItemName","deprecatedItemType","location","hostname","componentName","constructor","slice","console","warn","error","messagesDOM","hasError","appearance","description","id","inputDescribedBy","messages","map","message","setMessageHeight","messageContainer","shadowRoot","q2Message","height","showMessages","hasFocus","getBoundingClientRect","getPropertyValue","classList","add","removeProperty","remove","setProperty","resizeIframe","handleColor","intent","color"],"sources":["src/utils/index.tsx"],"sourcesContent":["import { h } from '@stencil/core';\nimport { Q2Btn } from 'src/components/q2-btn/q2-btn';\nimport { Q2Calendar } from 'src/components/q2-calendar/q2-calendar';\nimport { Q2Carousel } from 'src/components/q2-carousel/q2-carousel';\nimport { Q2Checkbox } from 'src/components/q2-checkbox/q2-checkbox';\nimport { Q2CheckboxGroup } from 'src/components/q2-checkbox-group/q2-checkbox-group';\nimport { Q2RadioGroup } from 'src/components/q2-radio-group/q2-radio-group';\nimport { Q2Dropdown } from 'src/components/q2-dropdown/q2-dropdown';\nimport { Q2DropdownItem } from 'src/components/q2-dropdown-item/q2-dropdown-item';\nimport { Q2EditableField } from 'src/components/q2-editable-field/q2-editable-field';\nimport { Q2Input } from 'src/components/q2-input/q2-input';\nimport { Q2Loading } from 'src/components/q2-loading/q2-loading';\nimport { Q2Radio } from 'src/components/q2-radio/q2-radio';\nimport { Q2Select } from 'src/components/q2-select/q2-select';\nimport { FormFieldTypes, IDict } from 'src/util';\n\nexport function isMobile(): boolean {\n return /Android|webOS|iPhone|iPad|iPod|BlackBerry|Mobile|IEMobile|Windows Phone|Opera Mini/i.test(\n navigator.userAgent\n );\n}\n\nexport function isInScrollableContainer(element) {\n let current = element;\n\n while (current && current !== document.body && current !== document.documentElement) {\n // Move to parent\n if (current.parentElement) {\n current = current.parentElement;\n } else {\n // Try to cross shadow DOM boundary\n const root = current.getRootNode();\n if (root && root.host) {\n current = root.host;\n } else {\n break;\n }\n }\n\n const style = window.getComputedStyle(current);\n const hasScrollableOverflow =\n style.overflow === 'scroll' ||\n style.overflow === 'auto' ||\n style.overflowX === 'scroll' ||\n style.overflowX === 'auto' ||\n style.overflowY === 'scroll' ||\n style.overflowY === 'auto';\n\n const hasOverflowingContent =\n current.scrollHeight > current.clientHeight || current.scrollWidth > current.clientWidth;\n\n if (hasScrollableOverflow && hasOverflowingContent) {\n return true;\n }\n }\n\n return false;\n}\n\nexport function isHostLosingFocus(event: FocusEvent, hostElement: HTMLElement) {\n const type = event.type;\n const focusInTypes = ['focusin', 'focus'];\n const isFocusIn = focusInTypes.includes(type);\n\n // on focusin: `target` is element losing focus, `relatedTarget` is element gaining focus\n // on focusout: `target` is element gaining focus, `relatedTarget` is element losing focus\n const elementGainingFocus = isFocusIn ? event.target : event.relatedTarget;\n\n const isElementNestedInHostElement = (element: HTMLElement) => {\n if (element === hostElement) return true;\n if (element.parentElement) {\n return isElementNestedInHostElement(element.parentElement);\n }\n return false;\n };\n\n if (!(elementGainingFocus instanceof HTMLElement)) return true;\n return !isElementNestedInHostElement(elementGainingFocus);\n}\n\nexport function isRelatedTargetWithinHost(event: FocusEvent, element: HTMLElement) {\n return event.relatedTarget !== element && !element.contains(event.relatedTarget as Node);\n}\n\nexport function isEventFromElement(event: Event, element: HTMLElement): boolean {\n return event.composedPath?.()[0] === element;\n}\n\nexport function overrideFocus(hostElement: HTMLElement) {\n hostElement.focus = () => hostElement?.dispatchEvent(new FocusEvent('focus', { bubbles: false }));\n}\n\nexport function isFirefox() {\n const userAgent = navigator.userAgent.toLowerCase();\n return userAgent.includes('firefox');\n}\n\nexport function isTouchDevice() {\n return 'ontouchstart' in window || navigator.maxTouchPoints > 0;\n}\n\nexport function isSafari() {\n const userAgent = navigator.userAgent.toLowerCase();\n return userAgent.includes('safari') && !userAgent.includes('chrome');\n}\n\n/**\n * Returns the value of a prop if it is defined and included in the `validValues`\n * array. This is used primarily to prevent Vue wrappers from setting aria props\n * to \"Symbol()\" when the prop is not set.\n */\nexport function getAriaValueFromProp(prop: string, validValues?: string[]) {\n if (prop === undefined) return prop;\n if (!validValues) return prop !== 'Symbol()' ? prop : undefined;\n return validValues.includes(prop) || prop === '' ? prop : undefined;\n}\n\nlet guid: number = 1000;\nexport function createGuid(): number {\n return guid++;\n}\n\nexport function nextPaint(fn: (value?: unknown) => void) {\n requestAnimationFrame(() => {\n requestAnimationFrame(fn);\n });\n}\n\nexport function isVisible(element: HTMLElement) {\n return element.offsetWidth > 0 || element.offsetHeight > 0 || element.getClientRects().length > 0;\n}\n\nexport function waitForNextPaint() {\n return new Promise(resolve => nextPaint(resolve));\n}\n\nexport function capitalize(value: string) {\n return `${value.charAt(0).toUpperCase()}${value.slice(1)}`;\n}\n\nexport function pick(props: string[]): (obj: object) => object {\n return obj => {\n return props.reduce((memo, prop) => {\n return {\n ...memo,\n [prop]: obj[prop],\n };\n }, {});\n };\n}\n\nexport function loc(key: string, subs?: IDict<any> | string[]) {\n if (!key) return '';\n if (window.Tecton?.noStrings === true) {\n return key;\n }\n return window?.TectonElements?.loc(key, subs) ?? key;\n}\n\nexport function labelDOM(target: FormFieldTypes | Q2RadioGroup | Q2CheckboxGroup) {\n const { label, hideLabel, optional, readonly } = target;\n const labelClasses: string[] = ['input-label'];\n let helpText = '';\n\n let shouldHideLabel = hideLabel;\n if (!shouldHideLabel) {\n const labelSlotElements = target.hostElement.querySelectorAll<HTMLSlotElement>('[slot=\"label\"]');\n const hasSlotContent = labelSlotElements.length > 0;\n const hasLabel = !!label;\n\n shouldHideLabel = hasLabel || hasSlotContent ? false : true;\n }\n\n if (shouldHideLabel) labelClasses.push('sr');\n if (optional) {\n helpText = <span class=\"optional-tag\">{loc('tecton.element.input.optional')}</span>;\n }\n if (readonly) {\n helpText = <span class=\"optional-tag\">{loc('tecton.element.input.readonly')}</span>;\n labelClasses.push('readonly-field');\n }\n return (\n <label\n htmlFor={target.inputId}\n class={labelClasses.join(' ')}\n >\n <slot name=\"label\">\n {label ? loc(label) : undefined}\n {helpText}\n </slot>\n </label>\n );\n}\n\nexport function hasSlotContent(target: HTMLElement, slotName: string) {\n return target.querySelector(`[slot=\"${slotName}\"]`) !== null;\n}\n\nexport function handleAriaLabel(\n target:\n | Q2Input\n | Q2Select\n | Q2Radio\n | Q2Checkbox\n | Q2EditableField\n | Q2Dropdown\n | Q2DropdownItem\n | Q2Loading\n | Q2Carousel\n | Q2Calendar\n | Q2Btn\n) {\n const { ariaLabel } = target;\n if (!ariaLabel) return;\n\n // If empty ariaLabel prop is set to primitive symbol by framework wrapper, set ariaLabel to undefined and return\n const FW_WRAPPERS_EMPTY_PROP = Symbol().toString();\n if (ariaLabel === FW_WRAPPERS_EMPTY_PROP) {\n target.ariaLabel = undefined;\n return;\n }\n\n // If ariaLabel is set, set hideLabel to true and set label to ariaLabel\n if ('hideLabel' in target) target.hideLabel = true;\n target.label = loc(ariaLabel);\n target.ariaLabel = undefined;\n}\n\n/**\n * Handles when a prop has been renamed on a component without introducing a breaking change.\n */\nexport function handleRenamedProp(target: object, oldProp: string, newProp: string, removeOldProp?: boolean) {\n if (typeof target[oldProp] === 'undefined') return;\n\n // If old prop has value, aka set in component, call handleDeprecationWarning()\n if (target[oldProp]) {\n handleDeprecationWarning(target, oldProp, 'prop');\n }\n\n target[newProp] = target[oldProp];\n\n if (removeOldProp) {\n delete target[oldProp];\n }\n}\n\nexport function handleDeprecationWarning(\n target: object,\n deprecatedItemName: string,\n deprecatedItemType: 'function' | 'prop' | 'method' | 'event'\n) {\n if (window.location.hostname === 'localhost' || window.location.host === 'stack.q2developer.com') {\n if (target[deprecatedItemName] === 'undefined') return;\n\n const componentName = target.constructor.name.toLowerCase().slice(2);\n\n switch (deprecatedItemType) {\n case 'prop':\n if (deprecatedItemName === 'size' && componentName === 'btn') {\n console.warn(\n `The property of size in q2-btn should not be typeof number, or typeof string containing a number. This functionality will be deprecated in an upcoming release. Instead, please use the value 'undefined', or typeof string with any of the following values: \"small\" / \"medium\" / \"large\" `\n );\n } else {\n console.warn(\n `The property ${deprecatedItemName} in q2-${componentName} has been marked for deprecation and will be removed in an upcoming major release.`\n );\n }\n break;\n\n case 'function':\n console.warn(\n `The function ${deprecatedItemName} in ${componentName} has been marked for deprecation and will be removed in an upcoming major release.`\n );\n break;\n\n case 'method':\n console.warn(\n `The method ${deprecatedItemName} in ${componentName} has been marked for deprecation and will be removed in an upcoming major release.`\n );\n break;\n\n case 'event':\n console.warn(\n `The event ${deprecatedItemName} in ${componentName} has been marked for deprecation and will be removed in an upcoming major release.`\n );\n break;\n\n default:\n console.error(\n `handleDeprecationWarning --> No type found for desired deprecation: ${deprecatedItemName} in q2-${componentName}: deprecatedItemType = ${deprecatedItemName}`\n );\n }\n }\n}\n\nexport function messagesDOM(target: FormFieldTypes) {\n const type = target.hasError ? 'danger' : 'info';\n\n return (\n <div class=\"messages-container\">\n <q2-message\n appearance=\"minimal\"\n description\n type={type}\n test-id=\"message\"\n >\n <ul id={target.inputDescribedBy}>\n {target.messages.map(message => (\n <li test-id=\"messageListItem\">{loc(message)}</li>\n ))}\n </ul>\n </q2-message>\n </div>\n );\n}\n\nexport function setMessageHeight(target: FormFieldTypes) {\n const messageContainer = (target.hostElement.shadowRoot as ShadowRoot).querySelector<HTMLDivElement>(\n '.messages-container'\n );\n const q2Message = messageContainer.querySelector('q2-message');\n nextPaint(() => {\n const height = target.showMessages && target.hasFocus ? q2Message.getBoundingClientRect().height : 0;\n\n if (messageContainer.style.getPropertyValue('height') === `${height}px`) return;\n\n if (height === 0) {\n q2Message.classList.add('invisible');\n messageContainer.style.removeProperty('height');\n } else {\n q2Message.classList.remove('invisible');\n messageContainer.style.setProperty('height', `${height}px`);\n }\n });\n}\n\nexport const resizeIframe = () => {\n return window.TectonElements?.resizeIframe?.();\n};\n\n// Handling color attribute (deprecated)\nexport const handleColor = (target: Q2Btn) => {\n if (!target.intent && ['primary', 'secondary'].includes(target.color)) {\n target.intent = `workflow-${target.color}` as HTMLQ2BtnElement['intent'];\n target.color = undefined;\n }\n};\n"],"mappings":"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"}