q2-tecton-elements 1.67.2 → 1.68.0

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 (807) hide show
  1. package/dist/bundle-report.json +22598 -10670
  2. package/dist/cjs/click-elsewhere.q2-option-list.q2-popover.entry.cjs.js.map +1 -1
  3. package/dist/cjs/click-elsewhere_3.cjs.entry.js +46 -32
  4. package/dist/cjs/click-elsewhere_3.cjs.entry.js.map +1 -1
  5. package/dist/cjs/{component-DRAntnCA.js → component-iASoq6gx.js} +9 -3
  6. package/dist/cjs/component-iASoq6gx.js.map +1 -0
  7. package/dist/cjs/{index-YvKoRT-t.js → index-DmGkqdX2.js} +3 -3
  8. package/dist/cjs/index-DmGkqdX2.js.map +1 -0
  9. package/dist/cjs/loader.cjs.js +1 -1
  10. package/dist/cjs/q2-action-group.q2-resize-observer.entry.cjs.js.map +1 -1
  11. package/dist/cjs/q2-action-group_2.cjs.entry.js +2 -2
  12. package/dist/cjs/q2-action-group_2.cjs.entry.js.map +1 -1
  13. package/dist/cjs/q2-action-sheet.cjs.entry.js +109 -4
  14. package/dist/cjs/q2-action-sheet.cjs.entry.js.map +1 -1
  15. package/dist/cjs/q2-action-sheet.entry.cjs.js.map +1 -1
  16. package/dist/cjs/q2-avatar.cjs.entry.js.map +1 -1
  17. package/dist/cjs/q2-avatar.entry.cjs.js.map +1 -1
  18. package/dist/cjs/q2-badge.cjs.entry.js +1 -1
  19. package/dist/cjs/q2-badge.cjs.entry.js.map +1 -1
  20. package/dist/cjs/q2-badge.entry.cjs.js.map +1 -1
  21. package/dist/cjs/q2-btn.q2-loading.entry.cjs.js.map +1 -1
  22. package/dist/cjs/q2-btn_2.cjs.entry.js +1 -1
  23. package/dist/cjs/q2-btn_2.cjs.entry.js.map +1 -1
  24. package/dist/cjs/q2-calendar.cjs.entry.js +6 -3
  25. package/dist/cjs/q2-calendar.cjs.entry.js.map +1 -1
  26. package/dist/cjs/q2-calendar.entry.cjs.js.map +1 -1
  27. package/dist/cjs/q2-card-image.cjs.entry.js +2 -2
  28. package/dist/cjs/q2-card-image.cjs.entry.js.map +1 -1
  29. package/dist/cjs/q2-card-image.entry.cjs.js.map +1 -1
  30. package/dist/cjs/q2-card.cjs.entry.js +1 -1
  31. package/dist/cjs/q2-card.cjs.entry.js.map +1 -1
  32. package/dist/cjs/q2-card.entry.cjs.js.map +1 -1
  33. package/dist/cjs/q2-carousel-pane.cjs.entry.js +3 -3
  34. package/dist/cjs/q2-carousel-pane.cjs.entry.js.map +1 -1
  35. package/dist/cjs/q2-carousel-pane.entry.cjs.js.map +1 -1
  36. package/dist/cjs/q2-carousel.cjs.entry.js +162 -29
  37. package/dist/cjs/q2-carousel.cjs.entry.js.map +1 -1
  38. package/dist/cjs/q2-carousel.entry.cjs.js.map +1 -1
  39. package/dist/cjs/q2-chart-area.cjs.entry.js +1 -1
  40. package/dist/cjs/q2-chart-bar.cjs.entry.js +1 -1
  41. package/dist/cjs/q2-chart-donut.cjs.entry.js +3 -2
  42. package/dist/cjs/q2-chart-donut.cjs.entry.js.map +1 -1
  43. package/dist/cjs/q2-chart-donut.entry.cjs.js.map +1 -1
  44. package/dist/cjs/q2-checkbox-group.cjs.entry.js +2 -2
  45. package/dist/cjs/q2-checkbox-group.cjs.entry.js.map +1 -1
  46. package/dist/cjs/q2-checkbox-group.entry.cjs.js.map +1 -1
  47. package/dist/cjs/q2-checkbox.q2-tag.entry.cjs.js.map +1 -1
  48. package/dist/cjs/q2-checkbox_2.cjs.entry.js +3 -3
  49. package/dist/cjs/q2-checkbox_2.cjs.entry.js.map +1 -1
  50. package/dist/cjs/q2-context.cjs.entry.js +2 -2
  51. package/dist/cjs/q2-context.cjs.entry.js.map +1 -1
  52. package/dist/cjs/q2-context.entry.cjs.js.map +1 -1
  53. package/dist/cjs/q2-currency.cjs.entry.js +2 -3
  54. package/dist/cjs/q2-currency.cjs.entry.js.map +1 -1
  55. package/dist/cjs/q2-currency.entry.cjs.js.map +1 -1
  56. package/dist/cjs/q2-data-table.cjs.entry.js +2 -2
  57. package/dist/cjs/q2-data-table.cjs.entry.js.map +1 -1
  58. package/dist/cjs/q2-data-table.entry.cjs.js.map +1 -1
  59. package/dist/cjs/q2-detail.cjs.entry.js +2 -2
  60. package/dist/cjs/q2-detail.cjs.entry.js.map +1 -1
  61. package/dist/cjs/q2-detail.entry.cjs.js.map +1 -1
  62. package/dist/cjs/q2-dropdown-item.cjs.entry.js +2 -2
  63. package/dist/cjs/q2-dropdown-item.cjs.entry.js.map +1 -1
  64. package/dist/cjs/q2-dropdown-item.entry.cjs.js.map +1 -1
  65. package/dist/cjs/q2-dropdown.cjs.entry.js +3 -5
  66. package/dist/cjs/q2-dropdown.cjs.entry.js.map +1 -1
  67. package/dist/cjs/q2-dropdown.entry.cjs.js.map +1 -1
  68. package/dist/cjs/q2-editable-field.cjs.entry.js +1 -1
  69. package/dist/cjs/q2-editable-field.cjs.entry.js.map +1 -1
  70. package/dist/cjs/q2-editable-field.entry.cjs.js.map +1 -1
  71. package/dist/cjs/q2-example.cjs.entry.js +1 -1
  72. package/dist/cjs/q2-file-picker.cjs.entry.js +1 -1
  73. package/dist/cjs/q2-file-picker.cjs.entry.js.map +1 -1
  74. package/dist/cjs/q2-file-picker.entry.cjs.js.map +1 -1
  75. package/dist/cjs/q2-form.cjs.entry.js +2 -2
  76. package/dist/cjs/q2-form.cjs.entry.js.map +1 -1
  77. package/dist/cjs/q2-form.entry.cjs.js.map +1 -1
  78. package/dist/cjs/q2-formatted-text.cjs.entry.js +1 -1
  79. package/dist/cjs/q2-formatted-text.cjs.entry.js.map +1 -1
  80. package/dist/cjs/q2-formatted-text.entry.cjs.js.map +1 -1
  81. package/dist/cjs/q2-grid-area.cjs.entry.js +1 -1
  82. package/dist/cjs/q2-grid.cjs.entry.js +32 -8
  83. package/dist/cjs/q2-grid.cjs.entry.js.map +1 -1
  84. package/dist/cjs/q2-grid.entry.cjs.js.map +1 -1
  85. package/dist/cjs/q2-icon.cjs.entry.js +1 -1
  86. package/dist/cjs/q2-icon.cjs.entry.js.map +1 -1
  87. package/dist/cjs/q2-icon.entry.cjs.js.map +1 -1
  88. package/dist/cjs/q2-input.cjs.entry.js +8 -5
  89. package/dist/cjs/q2-input.cjs.entry.js.map +1 -1
  90. package/dist/cjs/q2-input.entry.cjs.js.map +1 -1
  91. package/dist/cjs/q2-item.cjs.entry.js +2 -2
  92. package/dist/cjs/q2-item.cjs.entry.js.map +1 -1
  93. package/dist/cjs/q2-item.entry.cjs.js.map +1 -1
  94. package/dist/cjs/q2-legend.cjs.entry.js +2 -3
  95. package/dist/cjs/q2-legend.cjs.entry.js.map +1 -1
  96. package/dist/cjs/q2-legend.entry.cjs.js.map +1 -1
  97. package/dist/cjs/q2-link.q2-list.entry.cjs.js.map +1 -1
  98. package/dist/cjs/q2-link_2.cjs.entry.js +2 -2
  99. package/dist/cjs/q2-link_2.cjs.entry.js.map +1 -1
  100. package/dist/cjs/q2-loc.cjs.entry.js +1 -1
  101. package/dist/cjs/q2-message.cjs.entry.js +3 -3
  102. package/dist/cjs/q2-message.cjs.entry.js.map +1 -1
  103. package/dist/cjs/q2-message.entry.cjs.js.map +1 -1
  104. package/dist/cjs/q2-meter.cjs.entry.js +2 -2
  105. package/dist/cjs/q2-meter.cjs.entry.js.map +1 -1
  106. package/dist/cjs/q2-meter.entry.cjs.js.map +1 -1
  107. package/dist/cjs/q2-modal.cjs.entry.js +3 -3
  108. package/dist/cjs/q2-modal.cjs.entry.js.map +1 -1
  109. package/dist/cjs/q2-modal.entry.cjs.js.map +1 -1
  110. package/dist/cjs/q2-month-picker.cjs.entry.js +1 -1
  111. package/dist/cjs/q2-mutation-observer.cjs.entry.js +1 -1
  112. package/dist/cjs/q2-optgroup.cjs.entry.js +3 -3
  113. package/dist/cjs/q2-optgroup.cjs.entry.js.map +1 -1
  114. package/dist/cjs/q2-optgroup.entry.cjs.js.map +1 -1
  115. package/dist/cjs/q2-option.cjs.entry.js +3 -3
  116. package/dist/cjs/q2-option.cjs.entry.js.map +1 -1
  117. package/dist/cjs/q2-option.entry.cjs.js.map +1 -1
  118. package/dist/cjs/q2-otp.cjs.entry.js +373 -0
  119. package/dist/cjs/q2-otp.cjs.entry.js.map +1 -0
  120. package/dist/cjs/q2-otp.entry.cjs.js.map +1 -0
  121. package/dist/cjs/q2-pagination.cjs.entry.js +4 -4
  122. package/dist/cjs/q2-pagination.cjs.entry.js.map +1 -1
  123. package/dist/cjs/q2-pagination.entry.cjs.js.map +1 -1
  124. package/dist/cjs/q2-pill.cjs.entry.js +24 -15
  125. package/dist/cjs/q2-pill.cjs.entry.js.map +1 -1
  126. package/dist/cjs/q2-pill.entry.cjs.js.map +1 -1
  127. package/dist/cjs/q2-radio-group.cjs.entry.js +1 -1
  128. package/dist/cjs/q2-radio-group.cjs.entry.js.map +1 -1
  129. package/dist/cjs/q2-radio-group.entry.cjs.js.map +1 -1
  130. package/dist/cjs/q2-radio.cjs.entry.js +3 -3
  131. package/dist/cjs/q2-radio.cjs.entry.js.map +1 -1
  132. package/dist/cjs/q2-radio.entry.cjs.js.map +1 -1
  133. package/dist/cjs/q2-relative-time.cjs.entry.js +2 -2
  134. package/dist/cjs/q2-section-container.cjs.entry.js +1 -1
  135. package/dist/cjs/q2-section.cjs.entry.js +3 -3
  136. package/dist/cjs/q2-section.cjs.entry.js.map +1 -1
  137. package/dist/cjs/q2-section.entry.cjs.js.map +1 -1
  138. package/dist/cjs/q2-select.cjs.entry.js +1 -1
  139. package/dist/cjs/q2-select.cjs.entry.js.map +1 -1
  140. package/dist/cjs/q2-select.entry.cjs.js.map +1 -1
  141. package/dist/cjs/q2-stepper-pane.cjs.entry.js +3 -3
  142. package/dist/cjs/q2-stepper-vertical.cjs.entry.js +2 -2
  143. package/dist/cjs/q2-stepper-vertical.cjs.entry.js.map +1 -1
  144. package/dist/cjs/q2-stepper-vertical.entry.cjs.js.map +1 -1
  145. package/dist/cjs/q2-stepper.cjs.entry.js +2 -2
  146. package/dist/cjs/q2-stepper.cjs.entry.js.map +1 -1
  147. package/dist/cjs/q2-stepper.entry.cjs.js.map +1 -1
  148. package/dist/cjs/q2-tab-container.cjs.entry.js +3 -3
  149. package/dist/cjs/q2-tab-container.cjs.entry.js.map +1 -1
  150. package/dist/cjs/q2-tab-container.entry.cjs.js.map +1 -1
  151. package/dist/cjs/q2-tab-pane.cjs.entry.js +2 -2
  152. package/dist/cjs/q2-tecton-elements.cjs.js +1 -1
  153. package/dist/cjs/q2-textarea.cjs.entry.js +1 -1
  154. package/dist/cjs/q2-textarea.cjs.entry.js.map +1 -1
  155. package/dist/cjs/q2-textarea.entry.cjs.js.map +1 -1
  156. package/dist/cjs/q2-toast.cjs.entry.js +1 -1
  157. package/dist/cjs/q2-toast.cjs.entry.js.map +1 -1
  158. package/dist/cjs/q2-toast.entry.cjs.js.map +1 -1
  159. package/dist/cjs/q2-tooltip.cjs.entry.js +124 -5
  160. package/dist/cjs/q2-tooltip.cjs.entry.js.map +1 -1
  161. package/dist/cjs/q2-tooltip.entry.cjs.js.map +1 -1
  162. package/dist/cjs/{sanitize-html-string-CW6y5624.js → sanitize-html-string-D17Pr7-c.js} +21 -4
  163. package/dist/cjs/{sanitize-html-string-CW6y5624.js.map → sanitize-html-string-D17Pr7-c.js.map} +1 -1
  164. package/dist/cjs/tecton-tab-pane.cjs.entry.js +2 -2
  165. package/dist/collection/collection-manifest.json +1 -0
  166. package/dist/collection/components/click-elsewhere/click-elsewhere.js +2 -0
  167. package/dist/collection/components/click-elsewhere/click-elsewhere.js.map +1 -1
  168. package/dist/collection/components/q2-action-group/q2-action-group.css +14 -0
  169. package/dist/collection/components/q2-action-sheet/q2-action-sheet.css +16 -0
  170. package/dist/collection/components/q2-action-sheet/q2-action-sheet.js +107 -2
  171. package/dist/collection/components/q2-action-sheet/q2-action-sheet.js.map +1 -1
  172. package/dist/collection/components/q2-avatar/q2-avatar.css +24 -0
  173. package/dist/collection/components/q2-avatar/test/q2-avatar-test.vr.js +61 -0
  174. package/dist/collection/components/q2-avatar/test/q2-avatar-test.vr.js.map +1 -0
  175. package/dist/collection/components/q2-badge/q2-badge.css +30 -0
  176. package/dist/collection/components/q2-badge/test/q2-badge-test.vr.js +34 -0
  177. package/dist/collection/components/q2-badge/test/q2-badge-test.vr.js.map +1 -0
  178. package/dist/collection/components/q2-btn/q2-btn.css +279 -0
  179. package/dist/collection/components/q2-btn/test/q2-btn-test.vr.js +80 -0
  180. package/dist/collection/components/q2-btn/test/q2-btn-test.vr.js.map +1 -0
  181. package/dist/collection/components/q2-calendar/q2-calendar.css +36 -0
  182. package/dist/collection/components/q2-calendar/q2-calendar.js +5 -2
  183. package/dist/collection/components/q2-calendar/q2-calendar.js.map +1 -1
  184. package/dist/collection/components/q2-calendar/test/q2-calendar-test.vr.js +170 -0
  185. package/dist/collection/components/q2-calendar/test/q2-calendar-test.vr.js.map +1 -0
  186. package/dist/collection/components/q2-card/q2-card.css +62 -0
  187. package/dist/collection/components/q2-card/test/q2-card-test.vr.js +72 -0
  188. package/dist/collection/components/q2-card/test/q2-card-test.vr.js.map +1 -0
  189. package/dist/collection/components/q2-card-image/q2-card-image.css +74 -13
  190. package/dist/collection/components/q2-card-image/test/q2-card-image-test.vr.js +152 -0
  191. package/dist/collection/components/q2-card-image/test/q2-card-image-test.vr.js.map +1 -0
  192. package/dist/collection/components/q2-carousel/q2-carousel.css +78 -13
  193. package/dist/collection/components/q2-carousel/q2-carousel.js +241 -27
  194. package/dist/collection/components/q2-carousel/q2-carousel.js.map +1 -1
  195. package/dist/collection/components/q2-carousel/test/q2-carousel-test.vr.js +104 -0
  196. package/dist/collection/components/q2-carousel/test/q2-carousel-test.vr.js.map +1 -0
  197. package/dist/collection/components/q2-carousel-pane/q2-carousel-pane.css +26 -1
  198. package/dist/collection/components/q2-chart-area/test/q2-chart-area-test.vr.js +126 -0
  199. package/dist/collection/components/q2-chart-area/test/q2-chart-area-test.vr.js.map +1 -0
  200. package/dist/collection/components/q2-chart-bar/test/q2-chart-bar-test.vr.js +105 -0
  201. package/dist/collection/components/q2-chart-bar/test/q2-chart-bar-test.vr.js.map +1 -0
  202. package/dist/collection/components/q2-chart-donut/q2-chart-donut.css +29 -0
  203. package/dist/collection/components/q2-chart-donut/q2-chart-donut.js +21 -1
  204. package/dist/collection/components/q2-chart-donut/q2-chart-donut.js.map +1 -1
  205. package/dist/collection/components/q2-chart-donut/test/q2-chart-donut-test.vr.js +151 -0
  206. package/dist/collection/components/q2-chart-donut/test/q2-chart-donut-test.vr.js.map +1 -0
  207. package/dist/collection/components/q2-checkbox/q2-checkbox.css +128 -0
  208. package/dist/collection/components/q2-checkbox/test/q2-checkbox-test.vr.js +69 -0
  209. package/dist/collection/components/q2-checkbox/test/q2-checkbox-test.vr.js.map +1 -0
  210. package/dist/collection/components/q2-checkbox-group/q2-checkbox-group.css +21 -0
  211. package/dist/collection/components/q2-checkbox-group/test/q2-checkbox-group-test.vr.js +61 -0
  212. package/dist/collection/components/q2-checkbox-group/test/q2-checkbox-group-test.vr.js.map +1 -0
  213. package/dist/collection/components/q2-context/q2-context.css +16 -0
  214. package/dist/collection/components/q2-context/test/q2-context-test.vr.js +95 -0
  215. package/dist/collection/components/q2-context/test/q2-context-test.vr.js.map +1 -0
  216. package/dist/collection/components/q2-currency/q2-currency.css +31 -0
  217. package/dist/collection/components/q2-currency/q2-currency.js +3 -4
  218. package/dist/collection/components/q2-currency/q2-currency.js.map +1 -1
  219. package/dist/collection/components/q2-currency/test/q2-currency-test.vr.js +79 -0
  220. package/dist/collection/components/q2-currency/test/q2-currency-test.vr.js.map +1 -0
  221. package/dist/collection/components/q2-data-table/q2-data-table.css +51 -0
  222. package/dist/collection/components/q2-data-table/q2-data-table.js +1 -1
  223. package/dist/collection/components/q2-data-table/test/q2-data-table-test.vr.js +79 -0
  224. package/dist/collection/components/q2-data-table/test/q2-data-table-test.vr.js.map +1 -0
  225. package/dist/collection/components/q2-detail/q2-detail.css +42 -0
  226. package/dist/collection/components/q2-detail/q2-detail.js +1 -1
  227. package/dist/collection/components/q2-dropdown/q2-dropdown.css +8 -0
  228. package/dist/collection/components/q2-dropdown/q2-dropdown.js +2 -4
  229. package/dist/collection/components/q2-dropdown/q2-dropdown.js.map +1 -1
  230. package/dist/collection/components/q2-dropdown-item/q2-dropdown-item.css +11 -0
  231. package/dist/collection/components/q2-editable-field/q2-editable-field.css +5 -0
  232. package/dist/collection/components/q2-editable-field/test/q2-editable-field-test.vr.js +89 -0
  233. package/dist/collection/components/q2-editable-field/test/q2-editable-field-test.vr.js.map +1 -0
  234. package/dist/collection/components/q2-example/q2-example.js +1 -1
  235. package/dist/collection/components/q2-file-picker/q2-file-picker.css +64 -0
  236. package/dist/collection/components/q2-file-picker/test/q2-file-picker-test.vr.js +92 -0
  237. package/dist/collection/components/q2-file-picker/test/q2-file-picker-test.vr.js.map +1 -0
  238. package/dist/collection/components/q2-form/q2-form.css +34 -20
  239. package/dist/collection/components/q2-form/q2-form.js +1 -1
  240. package/dist/collection/components/q2-formatted-text/q2-formatted-text.css +14 -0
  241. package/dist/collection/components/q2-formatted-text/q2-formatted-text.js +1 -1
  242. package/dist/collection/components/q2-formatted-text/test/q2-formatted-text-test.vr.js +55 -0
  243. package/dist/collection/components/q2-formatted-text/test/q2-formatted-text-test.vr.js.map +1 -0
  244. package/dist/collection/components/q2-grid/q2-grid.css +13 -0
  245. package/dist/collection/components/q2-grid/q2-grid.js +31 -7
  246. package/dist/collection/components/q2-grid/q2-grid.js.map +1 -1
  247. package/dist/collection/components/q2-icon/assets/standard.symbol.svg +1 -1
  248. package/dist/collection/components/q2-icon/q2-icon.css +15 -0
  249. package/dist/collection/components/q2-icon/test/q2-icon-test.vr.js +55 -0
  250. package/dist/collection/components/q2-icon/test/q2-icon-test.vr.js.map +1 -0
  251. package/dist/collection/components/q2-input/q2-input.css +104 -0
  252. package/dist/collection/components/q2-input/q2-input.js +6 -3
  253. package/dist/collection/components/q2-input/q2-input.js.map +1 -1
  254. package/dist/collection/components/q2-input/test/q2-input-test.vr.js +97 -0
  255. package/dist/collection/components/q2-input/test/q2-input-test.vr.js.map +1 -0
  256. package/dist/collection/components/q2-item/q2-item.css +28 -0
  257. package/dist/collection/components/q2-item/q2-item.js +1 -1
  258. package/dist/collection/components/q2-legend/q2-legend.css +16 -0
  259. package/dist/collection/components/q2-legend/q2-legend.js +21 -3
  260. package/dist/collection/components/q2-legend/q2-legend.js.map +1 -1
  261. package/dist/collection/components/q2-link/q2-link.css +20 -0
  262. package/dist/collection/components/q2-link/test/q2-link-test.vr.js +70 -0
  263. package/dist/collection/components/q2-link/test/q2-link-test.vr.js.map +1 -0
  264. package/dist/collection/components/q2-list/q2-list.css +14 -0
  265. package/dist/collection/components/q2-list/q2-list.js +1 -1
  266. package/dist/collection/components/q2-list/test/q2-list-test.vr.js +58 -0
  267. package/dist/collection/components/q2-list/test/q2-list-test.vr.js.map +1 -0
  268. package/dist/collection/components/q2-loading/q2-loading.css +9 -0
  269. package/dist/collection/components/q2-message/q2-message.css +29 -1
  270. package/dist/collection/components/q2-message/q2-message.js +1 -1
  271. package/dist/collection/components/q2-message/test/q2-message-test.vr.js +57 -0
  272. package/dist/collection/components/q2-message/test/q2-message-test.vr.js.map +1 -0
  273. package/dist/collection/components/q2-meter/q2-meter.css +40 -0
  274. package/dist/collection/components/q2-meter/q2-meter.js +1 -1
  275. package/dist/collection/components/q2-meter/test/q2-meter-test.vr.js +78 -0
  276. package/dist/collection/components/q2-meter/test/q2-meter-test.vr.js.map +1 -0
  277. package/dist/collection/components/q2-modal/q2-modal.css +21 -0
  278. package/dist/collection/components/q2-modal/q2-modal.js +1 -1
  279. package/dist/collection/components/q2-modal/test/q2-modal-test.vr.js +107 -0
  280. package/dist/collection/components/q2-modal/test/q2-modal-test.vr.js.map +1 -0
  281. package/dist/collection/components/q2-mutation-observer/q2-mutation-observer.js +1 -1
  282. package/dist/collection/components/q2-optgroup/q2-optgroup.css +11 -0
  283. package/dist/collection/components/q2-optgroup/q2-optgroup.js +1 -1
  284. package/dist/collection/components/q2-option/q2-option.css +9 -0
  285. package/dist/collection/components/q2-option/q2-option.js +1 -1
  286. package/dist/collection/components/q2-option/q2-option.js.map +1 -1
  287. package/dist/collection/components/q2-option-list/q2-option-list.css +3 -0
  288. package/dist/collection/components/q2-option-list/q2-option-list.js +37 -28
  289. package/dist/collection/components/q2-option-list/q2-option-list.js.map +1 -1
  290. package/dist/collection/components/q2-otp/q2-otp.css +312 -0
  291. package/dist/collection/components/q2-otp/q2-otp.js +873 -0
  292. package/dist/collection/components/q2-otp/q2-otp.js.map +1 -0
  293. package/dist/collection/components/q2-pagination/q2-pagination.css +22 -0
  294. package/dist/collection/components/q2-pagination/q2-pagination.js +3 -3
  295. package/dist/collection/components/q2-pagination/test/q2-pagination-test.vr.js +145 -0
  296. package/dist/collection/components/q2-pagination/test/q2-pagination-test.vr.js.map +1 -0
  297. package/dist/collection/components/q2-pill/q2-pill.css +53 -0
  298. package/dist/collection/components/q2-pill/q2-pill.js +23 -14
  299. package/dist/collection/components/q2-pill/q2-pill.js.map +1 -1
  300. package/dist/collection/components/q2-pill/test/q2-pill-test.vr.js +110 -0
  301. package/dist/collection/components/q2-pill/test/q2-pill-test.vr.js.map +1 -0
  302. package/dist/collection/components/q2-popover/q2-popover.css +20 -0
  303. package/dist/collection/components/q2-popover/q2-popover.js +5 -2
  304. package/dist/collection/components/q2-popover/q2-popover.js.map +1 -1
  305. package/dist/collection/components/q2-radio/q2-radio.css +52 -1
  306. package/dist/collection/components/q2-radio/q2-radio.js +2 -2
  307. package/dist/collection/components/q2-radio/q2-radio.js.map +1 -1
  308. package/dist/collection/components/q2-radio/test/q2-radio-test.vr.js +73 -0
  309. package/dist/collection/components/q2-radio/test/q2-radio-test.vr.js.map +1 -0
  310. package/dist/collection/components/q2-radio-group/q2-radio-group.css +22 -0
  311. package/dist/collection/components/q2-radio-group/test/q2-radio-group-test.vr.js +99 -0
  312. package/dist/collection/components/q2-radio-group/test/q2-radio-group-test.vr.js.map +1 -0
  313. package/dist/collection/components/q2-relative-time/q2-relative-time.js +1 -1
  314. package/dist/collection/components/q2-resize-observer/q2-resize-observer.js +1 -1
  315. package/dist/collection/components/q2-section/q2-section.css +26 -0
  316. package/dist/collection/components/q2-section/q2-section.js +2 -2
  317. package/dist/collection/components/q2-section/test/q2-section-test.vr.js +68 -0
  318. package/dist/collection/components/q2-section/test/q2-section-test.vr.js.map +1 -0
  319. package/dist/collection/components/q2-select/q2-select.css +17 -0
  320. package/dist/collection/components/q2-select/test/q2-select-test.vr.js +107 -0
  321. package/dist/collection/components/q2-select/test/q2-select-test.vr.js.map +1 -0
  322. package/dist/collection/components/q2-stepper/q2-stepper.css +36 -0
  323. package/dist/collection/components/q2-stepper/q2-stepper.js +1 -1
  324. package/dist/collection/components/q2-stepper/test/q2-stepper-test.vr.js +86 -0
  325. package/dist/collection/components/q2-stepper/test/q2-stepper-test.vr.js.map +1 -0
  326. package/dist/collection/components/q2-stepper-pane/q2-stepper-pane.js +1 -1
  327. package/dist/collection/components/q2-stepper-vertical/q2-stepper-vertical.css +31 -0
  328. package/dist/collection/components/q2-stepper-vertical/q2-stepper-vertical.js +1 -1
  329. package/dist/collection/components/q2-stepper-vertical/test/q2-stepper-vertical-test.vr.js +97 -0
  330. package/dist/collection/components/q2-stepper-vertical/test/q2-stepper-vertical-test.vr.js.map +1 -0
  331. package/dist/collection/components/q2-tab-container/q2-tab-container.css +38 -0
  332. package/dist/collection/components/q2-tab-container/q2-tab-container.js +1 -1
  333. package/dist/collection/components/q2-tab-container/test/q2-tab-container-test.vr.js +78 -0
  334. package/dist/collection/components/q2-tab-container/test/q2-tab-container-test.vr.js.map +1 -0
  335. package/dist/collection/components/q2-tab-pane/q2-tab-pane.js +1 -1
  336. package/dist/collection/components/q2-tag/q2-tag.css +30 -1
  337. package/dist/collection/components/q2-tag/q2-tag.js +1 -1
  338. package/dist/collection/components/q2-tag/test/q2-tag-test.vr.js +83 -0
  339. package/dist/collection/components/q2-tag/test/q2-tag-test.vr.js.map +1 -0
  340. package/dist/collection/components/q2-textarea/q2-textarea.css +80 -0
  341. package/dist/collection/components/q2-textarea/test/q2-textarea-test.vr.js +102 -0
  342. package/dist/collection/components/q2-textarea/test/q2-textarea-test.vr.js.map +1 -0
  343. package/dist/collection/components/q2-toast/q2-toast.css +15 -0
  344. package/dist/collection/components/q2-tooltip/q2-tooltip.css +31 -0
  345. package/dist/collection/components/q2-tooltip/q2-tooltip.js +135 -4
  346. package/dist/collection/components/q2-tooltip/q2-tooltip.js.map +1 -1
  347. package/dist/collection/components/q2-tooltip/test/q2-tooltip-test.vr.js +76 -0
  348. package/dist/collection/components/q2-tooltip/test/q2-tooltip-test.vr.js.map +1 -0
  349. package/dist/collection/components/tecton-tab-pane/tecton-tab-pane.js +2 -2
  350. package/dist/collection/utils/component.js +7 -1
  351. package/dist/collection/utils/component.js.map +1 -1
  352. package/dist/collection/utils/index.js +1 -1
  353. package/dist/collection/utils/index.js.map +1 -1
  354. package/dist/collection/utils/sanitize-html-string.js +19 -2
  355. package/dist/collection/utils/sanitize-html-string.js.map +1 -1
  356. package/dist/collection/utils/test/vr-helpers.js +98 -0
  357. package/dist/collection/utils/test/vr-helpers.js.map +1 -0
  358. package/dist/components/click-elsewhere2.js +2 -0
  359. package/dist/components/click-elsewhere2.js.map +1 -1
  360. package/dist/components/component.js +7 -1
  361. package/dist/components/component.js.map +1 -1
  362. package/dist/components/index.js +2 -0
  363. package/dist/components/index.js.map +1 -1
  364. package/dist/components/index2.js +1 -1
  365. package/dist/components/index2.js.map +1 -1
  366. package/dist/components/q2-action-group2.js.map +1 -1
  367. package/dist/components/q2-action-sheet.js +107 -2
  368. package/dist/components/q2-action-sheet.js.map +1 -1
  369. package/dist/components/q2-avatar2.js.map +1 -1
  370. package/dist/components/q2-badge2.js.map +1 -1
  371. package/dist/components/q2-btn2.js.map +1 -1
  372. package/dist/components/q2-calendar.js +5 -2
  373. package/dist/components/q2-calendar.js.map +1 -1
  374. package/dist/components/q2-card-image.js +1 -1
  375. package/dist/components/q2-card-image.js.map +1 -1
  376. package/dist/components/q2-card.js.map +1 -1
  377. package/dist/components/q2-carousel-pane.js +1 -135
  378. package/dist/components/q2-carousel-pane.js.map +1 -1
  379. package/dist/components/q2-carousel-pane2.js +140 -0
  380. package/dist/components/q2-carousel-pane2.js.map +1 -0
  381. package/dist/components/q2-carousel.js +173 -29
  382. package/dist/components/q2-carousel.js.map +1 -1
  383. package/dist/components/q2-chart-donut.js +3 -1
  384. package/dist/components/q2-chart-donut.js.map +1 -1
  385. package/dist/components/q2-checkbox-group.js.map +1 -1
  386. package/dist/components/q2-checkbox2.js.map +1 -1
  387. package/dist/components/q2-context.js +1 -1
  388. package/dist/components/q2-context.js.map +1 -1
  389. package/dist/components/q2-currency.js +3 -4
  390. package/dist/components/q2-currency.js.map +1 -1
  391. package/dist/components/q2-data-table.js +1 -1
  392. package/dist/components/q2-data-table.js.map +1 -1
  393. package/dist/components/q2-detail.js +1 -1
  394. package/dist/components/q2-detail.js.map +1 -1
  395. package/dist/components/q2-dropdown-item2.js.map +1 -1
  396. package/dist/components/q2-dropdown.js +2 -4
  397. package/dist/components/q2-dropdown.js.map +1 -1
  398. package/dist/components/q2-editable-field.js.map +1 -1
  399. package/dist/components/q2-example.js +1 -1
  400. package/dist/components/q2-file-picker.js.map +1 -1
  401. package/dist/components/q2-form.js +2 -2
  402. package/dist/components/q2-form.js.map +1 -1
  403. package/dist/components/q2-formatted-text.js +1 -1
  404. package/dist/components/q2-formatted-text.js.map +1 -1
  405. package/dist/components/q2-grid.js +32 -8
  406. package/dist/components/q2-grid.js.map +1 -1
  407. package/dist/components/q2-icon2.js.map +1 -1
  408. package/dist/components/q2-input2.js +7 -4
  409. package/dist/components/q2-input2.js.map +1 -1
  410. package/dist/components/q2-item2.js +1 -1
  411. package/dist/components/q2-item2.js.map +1 -1
  412. package/dist/components/q2-legend2.js +3 -3
  413. package/dist/components/q2-legend2.js.map +1 -1
  414. package/dist/components/q2-link2.js.map +1 -1
  415. package/dist/components/q2-list2.js +1 -1
  416. package/dist/components/q2-list2.js.map +1 -1
  417. package/dist/components/q2-loading2.js.map +1 -1
  418. package/dist/components/q2-message2.js +2 -2
  419. package/dist/components/q2-message2.js.map +1 -1
  420. package/dist/components/q2-meter.js +1 -1
  421. package/dist/components/q2-meter.js.map +1 -1
  422. package/dist/components/q2-modal.js +1 -1
  423. package/dist/components/q2-modal.js.map +1 -1
  424. package/dist/components/q2-mutation-observer.js +1 -1
  425. package/dist/components/q2-optgroup2.js +1 -1
  426. package/dist/components/q2-optgroup2.js.map +1 -1
  427. package/dist/components/q2-option-list2.js +37 -28
  428. package/dist/components/q2-option-list2.js.map +1 -1
  429. package/dist/components/q2-option2.js +1 -1
  430. package/dist/components/q2-option2.js.map +1 -1
  431. package/dist/components/q2-otp.d.ts +11 -0
  432. package/dist/components/q2-otp.js +439 -0
  433. package/dist/components/q2-otp.js.map +1 -0
  434. package/dist/components/q2-pagination.js +3 -3
  435. package/dist/components/q2-pagination.js.map +1 -1
  436. package/dist/components/q2-pill.js +23 -14
  437. package/dist/components/q2-pill.js.map +1 -1
  438. package/dist/components/q2-popover2.js +5 -2
  439. package/dist/components/q2-popover2.js.map +1 -1
  440. package/dist/components/q2-radio-group.js.map +1 -1
  441. package/dist/components/q2-radio.js +2 -2
  442. package/dist/components/q2-radio.js.map +1 -1
  443. package/dist/components/q2-relative-time.js +1 -1
  444. package/dist/components/q2-resize-observer2.js +1 -1
  445. package/dist/components/q2-section.js +2 -2
  446. package/dist/components/q2-section.js.map +1 -1
  447. package/dist/components/q2-select2.js.map +1 -1
  448. package/dist/components/q2-stepper-pane.js +1 -1
  449. package/dist/components/q2-stepper-vertical.js +1 -1
  450. package/dist/components/q2-stepper-vertical.js.map +1 -1
  451. package/dist/components/q2-stepper.js +1 -1
  452. package/dist/components/q2-stepper.js.map +1 -1
  453. package/dist/components/q2-tab-container.js +1 -1
  454. package/dist/components/q2-tab-container.js.map +1 -1
  455. package/dist/components/q2-tab-pane.js +1 -1
  456. package/dist/components/q2-tag2.js +2 -2
  457. package/dist/components/q2-tag2.js.map +1 -1
  458. package/dist/components/q2-textarea.js.map +1 -1
  459. package/dist/components/q2-toast.js.map +1 -1
  460. package/dist/components/q2-tooltip2.js +124 -5
  461. package/dist/components/q2-tooltip2.js.map +1 -1
  462. package/dist/components/sanitize-html-string.js +19 -2
  463. package/dist/components/sanitize-html-string.js.map +1 -1
  464. package/dist/components/tecton-tab-pane.js +2 -2
  465. package/dist/esm/click-elsewhere.q2-option-list.q2-popover.entry.js.map +1 -1
  466. package/dist/esm/click-elsewhere_3.entry.js +46 -32
  467. package/dist/esm/click-elsewhere_3.entry.js.map +1 -1
  468. package/dist/esm/{component-DVxzK3WH.js → component-DaQM9u3s.js} +9 -3
  469. package/dist/esm/component-DaQM9u3s.js.map +1 -0
  470. package/dist/esm/{index-C4PILj1_.js → index-C5gj0T_3.js} +4 -4
  471. package/dist/esm/index-C5gj0T_3.js.map +1 -0
  472. package/dist/esm/loader.js +1 -1
  473. package/dist/esm/q2-action-group.q2-resize-observer.entry.js.map +1 -1
  474. package/dist/esm/q2-action-group_2.entry.js +2 -2
  475. package/dist/esm/q2-action-group_2.entry.js.map +1 -1
  476. package/dist/esm/q2-action-sheet.entry.js +109 -4
  477. package/dist/esm/q2-action-sheet.entry.js.map +1 -1
  478. package/dist/esm/q2-avatar.entry.js.map +1 -1
  479. package/dist/esm/q2-badge.entry.js +1 -1
  480. package/dist/esm/q2-badge.entry.js.map +1 -1
  481. package/dist/esm/q2-btn.q2-loading.entry.js.map +1 -1
  482. package/dist/esm/q2-btn_2.entry.js +1 -1
  483. package/dist/esm/q2-btn_2.entry.js.map +1 -1
  484. package/dist/esm/q2-calendar.entry.js +6 -3
  485. package/dist/esm/q2-calendar.entry.js.map +1 -1
  486. package/dist/esm/q2-card-image.entry.js +2 -2
  487. package/dist/esm/q2-card-image.entry.js.map +1 -1
  488. package/dist/esm/q2-card.entry.js +1 -1
  489. package/dist/esm/q2-card.entry.js.map +1 -1
  490. package/dist/esm/q2-carousel-pane.entry.js +3 -3
  491. package/dist/esm/q2-carousel-pane.entry.js.map +1 -1
  492. package/dist/esm/q2-carousel.entry.js +162 -29
  493. package/dist/esm/q2-carousel.entry.js.map +1 -1
  494. package/dist/esm/q2-chart-area.entry.js +1 -1
  495. package/dist/esm/q2-chart-bar.entry.js +1 -1
  496. package/dist/esm/q2-chart-donut.entry.js +3 -2
  497. package/dist/esm/q2-chart-donut.entry.js.map +1 -1
  498. package/dist/esm/q2-checkbox-group.entry.js +2 -2
  499. package/dist/esm/q2-checkbox-group.entry.js.map +1 -1
  500. package/dist/esm/q2-checkbox.q2-tag.entry.js.map +1 -1
  501. package/dist/esm/q2-checkbox_2.entry.js +3 -3
  502. package/dist/esm/q2-checkbox_2.entry.js.map +1 -1
  503. package/dist/esm/q2-context.entry.js +2 -2
  504. package/dist/esm/q2-context.entry.js.map +1 -1
  505. package/dist/esm/q2-currency.entry.js +3 -4
  506. package/dist/esm/q2-currency.entry.js.map +1 -1
  507. package/dist/esm/q2-data-table.entry.js +2 -2
  508. package/dist/esm/q2-data-table.entry.js.map +1 -1
  509. package/dist/esm/q2-detail.entry.js +2 -2
  510. package/dist/esm/q2-detail.entry.js.map +1 -1
  511. package/dist/esm/q2-dropdown-item.entry.js +2 -2
  512. package/dist/esm/q2-dropdown-item.entry.js.map +1 -1
  513. package/dist/esm/q2-dropdown.entry.js +3 -5
  514. package/dist/esm/q2-dropdown.entry.js.map +1 -1
  515. package/dist/esm/q2-editable-field.entry.js +1 -1
  516. package/dist/esm/q2-editable-field.entry.js.map +1 -1
  517. package/dist/esm/q2-example.entry.js +1 -1
  518. package/dist/esm/q2-file-picker.entry.js +1 -1
  519. package/dist/esm/q2-file-picker.entry.js.map +1 -1
  520. package/dist/esm/q2-form.entry.js +2 -2
  521. package/dist/esm/q2-form.entry.js.map +1 -1
  522. package/dist/esm/q2-formatted-text.entry.js +1 -1
  523. package/dist/esm/q2-formatted-text.entry.js.map +1 -1
  524. package/dist/esm/q2-grid-area.entry.js +1 -1
  525. package/dist/esm/q2-grid.entry.js +33 -9
  526. package/dist/esm/q2-grid.entry.js.map +1 -1
  527. package/dist/esm/q2-icon.entry.js +1 -1
  528. package/dist/esm/q2-icon.entry.js.map +1 -1
  529. package/dist/esm/q2-input.entry.js +8 -5
  530. package/dist/esm/q2-input.entry.js.map +1 -1
  531. package/dist/esm/q2-item.entry.js +2 -2
  532. package/dist/esm/q2-item.entry.js.map +1 -1
  533. package/dist/esm/q2-legend.entry.js +2 -3
  534. package/dist/esm/q2-legend.entry.js.map +1 -1
  535. package/dist/esm/q2-link.q2-list.entry.js.map +1 -1
  536. package/dist/esm/q2-link_2.entry.js +2 -2
  537. package/dist/esm/q2-link_2.entry.js.map +1 -1
  538. package/dist/esm/q2-loc.entry.js +1 -1
  539. package/dist/esm/q2-message.entry.js +3 -3
  540. package/dist/esm/q2-message.entry.js.map +1 -1
  541. package/dist/esm/q2-meter.entry.js +2 -2
  542. package/dist/esm/q2-meter.entry.js.map +1 -1
  543. package/dist/esm/q2-modal.entry.js +3 -3
  544. package/dist/esm/q2-modal.entry.js.map +1 -1
  545. package/dist/esm/q2-month-picker.entry.js +1 -1
  546. package/dist/esm/q2-mutation-observer.entry.js +1 -1
  547. package/dist/esm/q2-optgroup.entry.js +3 -3
  548. package/dist/esm/q2-optgroup.entry.js.map +1 -1
  549. package/dist/esm/q2-option.entry.js +3 -3
  550. package/dist/esm/q2-option.entry.js.map +1 -1
  551. package/dist/esm/q2-otp.entry.js +371 -0
  552. package/dist/esm/q2-otp.entry.js.map +1 -0
  553. package/dist/esm/q2-pagination.entry.js +4 -4
  554. package/dist/esm/q2-pagination.entry.js.map +1 -1
  555. package/dist/esm/q2-pill.entry.js +24 -15
  556. package/dist/esm/q2-pill.entry.js.map +1 -1
  557. package/dist/esm/q2-radio-group.entry.js +1 -1
  558. package/dist/esm/q2-radio-group.entry.js.map +1 -1
  559. package/dist/esm/q2-radio.entry.js +3 -3
  560. package/dist/esm/q2-radio.entry.js.map +1 -1
  561. package/dist/esm/q2-relative-time.entry.js +2 -2
  562. package/dist/esm/q2-section-container.entry.js +1 -1
  563. package/dist/esm/q2-section.entry.js +3 -3
  564. package/dist/esm/q2-section.entry.js.map +1 -1
  565. package/dist/esm/q2-select.entry.js +1 -1
  566. package/dist/esm/q2-select.entry.js.map +1 -1
  567. package/dist/esm/q2-stepper-pane.entry.js +3 -3
  568. package/dist/esm/q2-stepper-vertical.entry.js +2 -2
  569. package/dist/esm/q2-stepper-vertical.entry.js.map +1 -1
  570. package/dist/esm/q2-stepper.entry.js +2 -2
  571. package/dist/esm/q2-stepper.entry.js.map +1 -1
  572. package/dist/esm/q2-tab-container.entry.js +3 -3
  573. package/dist/esm/q2-tab-container.entry.js.map +1 -1
  574. package/dist/esm/q2-tab-pane.entry.js +2 -2
  575. package/dist/esm/q2-tecton-elements.js +1 -1
  576. package/dist/esm/q2-textarea.entry.js +1 -1
  577. package/dist/esm/q2-textarea.entry.js.map +1 -1
  578. package/dist/esm/q2-toast.entry.js +1 -1
  579. package/dist/esm/q2-toast.entry.js.map +1 -1
  580. package/dist/esm/q2-tooltip.entry.js +124 -5
  581. package/dist/esm/q2-tooltip.entry.js.map +1 -1
  582. package/dist/esm/{sanitize-html-string-B35VmRc9.js → sanitize-html-string-DPHNpMWE.js} +21 -4
  583. package/dist/{q2-tecton-elements/sanitize-html-string-B35VmRc9.js.map → esm/sanitize-html-string-DPHNpMWE.js.map} +1 -1
  584. package/dist/esm/tecton-tab-pane.entry.js +2 -2
  585. package/dist/playwright.config.js +12 -0
  586. package/dist/playwright.config.js.map +1 -0
  587. package/dist/q2-tecton-elements/assets/standard.symbol.svg +1 -1
  588. package/dist/q2-tecton-elements/click-elsewhere.q2-option-list.q2-popover.entry.esm.js.map +1 -1
  589. package/dist/q2-tecton-elements/click-elsewhere_3.entry.js +44 -35
  590. package/dist/q2-tecton-elements/click-elsewhere_3.entry.js.map +1 -1
  591. package/dist/q2-tecton-elements/component-DaQM9u3s.js +46 -0
  592. package/dist/q2-tecton-elements/component-DaQM9u3s.js.map +1 -0
  593. package/dist/q2-tecton-elements/{index-C4PILj1_.js → index-C5gj0T_3.js} +4 -4
  594. package/dist/q2-tecton-elements/index-C5gj0T_3.js.map +1 -0
  595. package/dist/q2-tecton-elements/q2-action-group.q2-resize-observer.entry.esm.js.map +1 -1
  596. package/dist/q2-tecton-elements/q2-action-group_2.entry.js +2 -2
  597. package/dist/q2-tecton-elements/q2-action-group_2.entry.js.map +1 -1
  598. package/dist/q2-tecton-elements/q2-action-sheet.entry.esm.js.map +1 -1
  599. package/dist/q2-tecton-elements/q2-action-sheet.entry.js +166 -70
  600. package/dist/q2-tecton-elements/q2-action-sheet.entry.js.map +1 -1
  601. package/dist/q2-tecton-elements/q2-avatar.entry.esm.js.map +1 -1
  602. package/dist/q2-tecton-elements/q2-avatar.entry.js.map +1 -1
  603. package/dist/q2-tecton-elements/q2-badge.entry.esm.js.map +1 -1
  604. package/dist/q2-tecton-elements/q2-badge.entry.js +1 -1
  605. package/dist/q2-tecton-elements/q2-badge.entry.js.map +1 -1
  606. package/dist/q2-tecton-elements/q2-btn.q2-loading.entry.esm.js.map +1 -1
  607. package/dist/q2-tecton-elements/q2-btn_2.entry.js +1 -1
  608. package/dist/q2-tecton-elements/q2-btn_2.entry.js.map +1 -1
  609. package/dist/q2-tecton-elements/q2-calendar.entry.esm.js.map +1 -1
  610. package/dist/q2-tecton-elements/q2-calendar.entry.js +4 -4
  611. package/dist/q2-tecton-elements/q2-calendar.entry.js.map +1 -1
  612. package/dist/q2-tecton-elements/q2-card-image.entry.esm.js.map +1 -1
  613. package/dist/q2-tecton-elements/q2-card-image.entry.js +2 -2
  614. package/dist/q2-tecton-elements/q2-card-image.entry.js.map +1 -1
  615. package/dist/q2-tecton-elements/q2-card.entry.esm.js.map +1 -1
  616. package/dist/q2-tecton-elements/q2-card.entry.js +1 -1
  617. package/dist/q2-tecton-elements/q2-card.entry.js.map +1 -1
  618. package/dist/q2-tecton-elements/q2-carousel-pane.entry.esm.js.map +1 -1
  619. package/dist/q2-tecton-elements/q2-carousel-pane.entry.js +6 -6
  620. package/dist/q2-tecton-elements/q2-carousel-pane.entry.js.map +1 -1
  621. package/dist/q2-tecton-elements/q2-carousel.entry.esm.js.map +1 -1
  622. package/dist/q2-tecton-elements/q2-carousel.entry.js +402 -271
  623. package/dist/q2-tecton-elements/q2-carousel.entry.js.map +1 -1
  624. package/dist/q2-tecton-elements/q2-chart-area.entry.js +1 -1
  625. package/dist/q2-tecton-elements/q2-chart-bar.entry.js +1 -1
  626. package/dist/q2-tecton-elements/q2-chart-donut.entry.esm.js.map +1 -1
  627. package/dist/q2-tecton-elements/q2-chart-donut.entry.js +18 -16
  628. package/dist/q2-tecton-elements/q2-chart-donut.entry.js.map +1 -1
  629. package/dist/q2-tecton-elements/q2-checkbox-group.entry.esm.js.map +1 -1
  630. package/dist/q2-tecton-elements/q2-checkbox-group.entry.js +2 -2
  631. package/dist/q2-tecton-elements/q2-checkbox-group.entry.js.map +1 -1
  632. package/dist/q2-tecton-elements/q2-checkbox.q2-tag.entry.esm.js.map +1 -1
  633. package/dist/q2-tecton-elements/q2-checkbox_2.entry.js +7 -7
  634. package/dist/q2-tecton-elements/q2-checkbox_2.entry.js.map +1 -1
  635. package/dist/q2-tecton-elements/q2-context.entry.esm.js.map +1 -1
  636. package/dist/q2-tecton-elements/q2-context.entry.js +2 -2
  637. package/dist/q2-tecton-elements/q2-context.entry.js.map +1 -1
  638. package/dist/q2-tecton-elements/q2-currency.entry.esm.js.map +1 -1
  639. package/dist/q2-tecton-elements/q2-currency.entry.js +34 -33
  640. package/dist/q2-tecton-elements/q2-currency.entry.js.map +1 -1
  641. package/dist/q2-tecton-elements/q2-data-table.entry.esm.js.map +1 -1
  642. package/dist/q2-tecton-elements/q2-data-table.entry.js +4 -4
  643. package/dist/q2-tecton-elements/q2-data-table.entry.js.map +1 -1
  644. package/dist/q2-tecton-elements/q2-detail.entry.esm.js.map +1 -1
  645. package/dist/q2-tecton-elements/q2-detail.entry.js +4 -4
  646. package/dist/q2-tecton-elements/q2-detail.entry.js.map +1 -1
  647. package/dist/q2-tecton-elements/q2-dropdown-item.entry.esm.js.map +1 -1
  648. package/dist/q2-tecton-elements/q2-dropdown-item.entry.js +2 -2
  649. package/dist/q2-tecton-elements/q2-dropdown-item.entry.js.map +1 -1
  650. package/dist/q2-tecton-elements/q2-dropdown.entry.esm.js.map +1 -1
  651. package/dist/q2-tecton-elements/q2-dropdown.entry.js +18 -19
  652. package/dist/q2-tecton-elements/q2-dropdown.entry.js.map +1 -1
  653. package/dist/q2-tecton-elements/q2-editable-field.entry.esm.js.map +1 -1
  654. package/dist/q2-tecton-elements/q2-editable-field.entry.js +1 -1
  655. package/dist/q2-tecton-elements/q2-editable-field.entry.js.map +1 -1
  656. package/dist/q2-tecton-elements/q2-example.entry.js +1 -1
  657. package/dist/q2-tecton-elements/q2-file-picker.entry.esm.js.map +1 -1
  658. package/dist/q2-tecton-elements/q2-file-picker.entry.js +1 -1
  659. package/dist/q2-tecton-elements/q2-file-picker.entry.js.map +1 -1
  660. package/dist/q2-tecton-elements/q2-form.entry.esm.js.map +1 -1
  661. package/dist/q2-tecton-elements/q2-form.entry.js +9 -9
  662. package/dist/q2-tecton-elements/q2-form.entry.js.map +1 -1
  663. package/dist/q2-tecton-elements/q2-formatted-text.entry.esm.js.map +1 -1
  664. package/dist/q2-tecton-elements/q2-formatted-text.entry.js +2 -2
  665. package/dist/q2-tecton-elements/q2-formatted-text.entry.js.map +1 -1
  666. package/dist/q2-tecton-elements/q2-grid-area.entry.js +1 -1
  667. package/dist/q2-tecton-elements/q2-grid.entry.esm.js.map +1 -1
  668. package/dist/q2-tecton-elements/q2-grid.entry.js +39 -14
  669. package/dist/q2-tecton-elements/q2-grid.entry.js.map +1 -1
  670. package/dist/q2-tecton-elements/q2-icon.entry.esm.js.map +1 -1
  671. package/dist/q2-tecton-elements/q2-icon.entry.js +52 -52
  672. package/dist/q2-tecton-elements/q2-icon.entry.js.map +1 -1
  673. package/dist/q2-tecton-elements/q2-input.entry.esm.js.map +1 -1
  674. package/dist/q2-tecton-elements/q2-input.entry.js +10 -6
  675. package/dist/q2-tecton-elements/q2-input.entry.js.map +1 -1
  676. package/dist/q2-tecton-elements/q2-item.entry.esm.js.map +1 -1
  677. package/dist/q2-tecton-elements/q2-item.entry.js +14 -14
  678. package/dist/q2-tecton-elements/q2-item.entry.js.map +1 -1
  679. package/dist/q2-tecton-elements/q2-legend.entry.esm.js.map +1 -1
  680. package/dist/q2-tecton-elements/q2-legend.entry.js +4 -5
  681. package/dist/q2-tecton-elements/q2-legend.entry.js.map +1 -1
  682. package/dist/q2-tecton-elements/q2-link.q2-list.entry.esm.js.map +1 -1
  683. package/dist/q2-tecton-elements/q2-link_2.entry.js +7 -7
  684. package/dist/q2-tecton-elements/q2-link_2.entry.js.map +1 -1
  685. package/dist/q2-tecton-elements/q2-loc.entry.js +1 -1
  686. package/dist/q2-tecton-elements/q2-message.entry.esm.js.map +1 -1
  687. package/dist/q2-tecton-elements/q2-message.entry.js +28 -28
  688. package/dist/q2-tecton-elements/q2-message.entry.js.map +1 -1
  689. package/dist/q2-tecton-elements/q2-meter.entry.esm.js.map +1 -1
  690. package/dist/q2-tecton-elements/q2-meter.entry.js +8 -8
  691. package/dist/q2-tecton-elements/q2-meter.entry.js.map +1 -1
  692. package/dist/q2-tecton-elements/q2-modal.entry.esm.js.map +1 -1
  693. package/dist/q2-tecton-elements/q2-modal.entry.js +53 -53
  694. package/dist/q2-tecton-elements/q2-modal.entry.js.map +1 -1
  695. package/dist/q2-tecton-elements/q2-month-picker.entry.js +1 -1
  696. package/dist/q2-tecton-elements/q2-mutation-observer.entry.js +1 -1
  697. package/dist/q2-tecton-elements/q2-optgroup.entry.esm.js.map +1 -1
  698. package/dist/q2-tecton-elements/q2-optgroup.entry.js +6 -6
  699. package/dist/q2-tecton-elements/q2-optgroup.entry.js.map +1 -1
  700. package/dist/q2-tecton-elements/q2-option.entry.esm.js.map +1 -1
  701. package/dist/q2-tecton-elements/q2-option.entry.js +3 -3
  702. package/dist/q2-tecton-elements/q2-option.entry.js.map +1 -1
  703. package/dist/q2-tecton-elements/q2-otp.entry.esm.js.map +1 -0
  704. package/dist/q2-tecton-elements/q2-otp.entry.js +453 -0
  705. package/dist/q2-tecton-elements/q2-otp.entry.js.map +1 -0
  706. package/dist/q2-tecton-elements/q2-pagination.entry.esm.js.map +1 -1
  707. package/dist/q2-tecton-elements/q2-pagination.entry.js +29 -29
  708. package/dist/q2-tecton-elements/q2-pagination.entry.js.map +1 -1
  709. package/dist/q2-tecton-elements/q2-pill.entry.esm.js.map +1 -1
  710. package/dist/q2-tecton-elements/q2-pill.entry.js +43 -28
  711. package/dist/q2-tecton-elements/q2-pill.entry.js.map +1 -1
  712. package/dist/q2-tecton-elements/q2-radio-group.entry.esm.js.map +1 -1
  713. package/dist/q2-tecton-elements/q2-radio-group.entry.js +1 -1
  714. package/dist/q2-tecton-elements/q2-radio-group.entry.js.map +1 -1
  715. package/dist/q2-tecton-elements/q2-radio.entry.esm.js.map +1 -1
  716. package/dist/q2-tecton-elements/q2-radio.entry.js +10 -10
  717. package/dist/q2-tecton-elements/q2-radio.entry.js.map +1 -1
  718. package/dist/q2-tecton-elements/q2-relative-time.entry.js +2 -2
  719. package/dist/q2-tecton-elements/q2-section-container.entry.js +1 -1
  720. package/dist/q2-tecton-elements/q2-section.entry.esm.js.map +1 -1
  721. package/dist/q2-tecton-elements/q2-section.entry.js +21 -21
  722. package/dist/q2-tecton-elements/q2-section.entry.js.map +1 -1
  723. package/dist/q2-tecton-elements/q2-select.entry.esm.js.map +1 -1
  724. package/dist/q2-tecton-elements/q2-select.entry.js +1 -1
  725. package/dist/q2-tecton-elements/q2-select.entry.js.map +1 -1
  726. package/dist/q2-tecton-elements/q2-stepper-pane.entry.js +10 -10
  727. package/dist/q2-tecton-elements/q2-stepper-vertical.entry.esm.js.map +1 -1
  728. package/dist/q2-tecton-elements/q2-stepper-vertical.entry.js +5 -5
  729. package/dist/q2-tecton-elements/q2-stepper-vertical.entry.js.map +1 -1
  730. package/dist/q2-tecton-elements/q2-stepper.entry.esm.js.map +1 -1
  731. package/dist/q2-tecton-elements/q2-stepper.entry.js +33 -33
  732. package/dist/q2-tecton-elements/q2-stepper.entry.js.map +1 -1
  733. package/dist/q2-tecton-elements/q2-tab-container.entry.esm.js.map +1 -1
  734. package/dist/q2-tecton-elements/q2-tab-container.entry.js +14 -14
  735. package/dist/q2-tecton-elements/q2-tab-container.entry.js.map +1 -1
  736. package/dist/q2-tecton-elements/q2-tab-pane.entry.js +6 -6
  737. package/dist/q2-tecton-elements/q2-tecton-elements.esm.js +1 -1
  738. package/dist/q2-tecton-elements/q2-textarea.entry.esm.js.map +1 -1
  739. package/dist/q2-tecton-elements/q2-textarea.entry.js +1 -1
  740. package/dist/q2-tecton-elements/q2-textarea.entry.js.map +1 -1
  741. package/dist/q2-tecton-elements/q2-toast.entry.esm.js.map +1 -1
  742. package/dist/q2-tecton-elements/q2-toast.entry.js +1 -1
  743. package/dist/q2-tecton-elements/q2-toast.entry.js.map +1 -1
  744. package/dist/q2-tecton-elements/q2-tooltip.entry.esm.js.map +1 -1
  745. package/dist/q2-tecton-elements/q2-tooltip.entry.js +136 -20
  746. package/dist/q2-tecton-elements/q2-tooltip.entry.js.map +1 -1
  747. package/dist/q2-tecton-elements/{sanitize-html-string-B35VmRc9.js → sanitize-html-string-DPHNpMWE.js} +147 -142
  748. package/dist/{esm/sanitize-html-string-B35VmRc9.js.map → q2-tecton-elements/sanitize-html-string-DPHNpMWE.js.map} +1 -1
  749. package/dist/q2-tecton-elements/tecton-tab-pane.entry.js +6 -6
  750. package/dist/types/builds/q2e/development/tecton/tecton/packages/q2-tecton-elements/.stencil/playwright.config.d.ts +2 -0
  751. package/dist/types/components/q2-action-sheet/q2-action-sheet.d.ts +22 -0
  752. package/dist/types/components/q2-avatar/test/q2-avatar-test.vr.d.ts +1 -0
  753. package/dist/types/components/q2-badge/test/q2-badge-test.vr.d.ts +1 -0
  754. package/dist/types/components/q2-btn/test/q2-btn-test.vr.d.ts +1 -0
  755. package/dist/types/components/q2-calendar/test/q2-calendar-test.vr.d.ts +1 -0
  756. package/dist/types/components/q2-card/test/q2-card-test.vr.d.ts +1 -0
  757. package/dist/types/components/q2-card-image/test/q2-card-image-test.vr.d.ts +1 -0
  758. package/dist/types/components/q2-carousel/q2-carousel.d.ts +29 -0
  759. package/dist/types/components/q2-carousel/test/q2-carousel-test.vr.d.ts +1 -0
  760. package/dist/types/components/q2-chart-area/test/q2-chart-area-test.vr.d.ts +1 -0
  761. package/dist/types/components/q2-chart-bar/test/q2-chart-bar-test.vr.d.ts +1 -0
  762. package/dist/types/components/q2-chart-donut/q2-chart-donut.d.ts +2 -0
  763. package/dist/types/components/q2-chart-donut/test/q2-chart-donut-test.vr.d.ts +1 -0
  764. package/dist/types/components/q2-checkbox/test/q2-checkbox-test.vr.d.ts +1 -0
  765. package/dist/types/components/q2-checkbox-group/test/q2-checkbox-group-test.vr.d.ts +1 -0
  766. package/dist/types/components/q2-context/test/q2-context-test.vr.d.ts +1 -0
  767. package/dist/types/components/q2-currency/test/q2-currency-test.vr.d.ts +1 -0
  768. package/dist/types/components/q2-data-table/test/q2-data-table-test.vr.d.ts +1 -0
  769. package/dist/types/components/q2-editable-field/test/q2-editable-field-test.vr.d.ts +1 -0
  770. package/dist/types/components/q2-file-picker/test/q2-file-picker-test.vr.d.ts +1 -0
  771. package/dist/types/components/q2-formatted-text/test/q2-formatted-text-test.vr.d.ts +1 -0
  772. package/dist/types/components/q2-grid/q2-grid.d.ts +10 -0
  773. package/dist/types/components/q2-icon/test/q2-icon-test.vr.d.ts +1 -0
  774. package/dist/types/components/q2-input/test/q2-input-test.vr.d.ts +1 -0
  775. package/dist/types/components/q2-legend/q2-legend.d.ts +2 -0
  776. package/dist/types/components/q2-link/test/q2-link-test.vr.d.ts +1 -0
  777. package/dist/types/components/q2-list/test/q2-list-test.vr.d.ts +1 -0
  778. package/dist/types/components/q2-message/test/q2-message-test.vr.d.ts +1 -0
  779. package/dist/types/components/q2-meter/test/q2-meter-test.vr.d.ts +1 -0
  780. package/dist/types/components/q2-modal/test/q2-modal-test.vr.d.ts +1 -0
  781. package/dist/types/components/q2-otp/q2-otp.d.ts +159 -0
  782. package/dist/types/components/q2-pagination/test/q2-pagination-test.vr.d.ts +1 -0
  783. package/dist/types/components/q2-pill/q2-pill.d.ts +5 -2
  784. package/dist/types/components/q2-pill/test/q2-pill-test.vr.d.ts +1 -0
  785. package/dist/types/components/q2-radio/q2-radio.d.ts +1 -1
  786. package/dist/types/components/q2-radio/test/q2-radio-test.vr.d.ts +1 -0
  787. package/dist/types/components/q2-radio-group/test/q2-radio-group-test.vr.d.ts +1 -0
  788. package/dist/types/components/q2-section/test/q2-section-test.vr.d.ts +1 -0
  789. package/dist/types/components/q2-select/test/q2-select-test.vr.d.ts +1 -0
  790. package/dist/types/components/q2-stepper/test/q2-stepper-test.vr.d.ts +1 -0
  791. package/dist/types/components/q2-stepper-vertical/test/q2-stepper-vertical-test.vr.d.ts +1 -0
  792. package/dist/types/components/q2-tab-container/test/q2-tab-container-test.vr.d.ts +1 -0
  793. package/dist/types/components/q2-tag/test/q2-tag-test.vr.d.ts +1 -0
  794. package/dist/types/components/q2-textarea/test/q2-textarea-test.vr.d.ts +1 -0
  795. package/dist/types/components/q2-tooltip/q2-tooltip.d.ts +4 -0
  796. package/dist/types/components/q2-tooltip/test/q2-tooltip-test.vr.d.ts +1 -0
  797. package/dist/types/components.d.ts +306 -2
  798. package/dist/types/utils/component.d.ts +1 -1
  799. package/dist/types/utils/test/vr-helpers.d.ts +14 -0
  800. package/package.json +12 -3
  801. package/dist/cjs/component-DRAntnCA.js.map +0 -1
  802. package/dist/cjs/index-YvKoRT-t.js.map +0 -1
  803. package/dist/esm/component-DVxzK3WH.js.map +0 -1
  804. package/dist/esm/index-C4PILj1_.js.map +0 -1
  805. package/dist/q2-tecton-elements/component-DVxzK3WH.js +0 -40
  806. package/dist/q2-tecton-elements/component-DVxzK3WH.js.map +0 -1
  807. package/dist/q2-tecton-elements/index-C4PILj1_.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"names":["q2SelectCss","Q2Select","constructor","hostRef","this","guid","createGuid","isOrientationUpdate","lastTouchWasInPopover","scheduledAfterRender","hasCustomDisplay","hasPopoverBottom","hasPopoverTop","inputFocused","open","prioritizeSearch","searchText","showSelected","structuredSelectedOptions","disabled","hoist","_a","window","Tecton","useActionSheets","listLabel","loc","minRows","multilineOptions","multiple","optional","popoverMode","readonly","searchable","selectedOptions","addTouchEventListeners","isMobile","popoverElement","addEventListener","handleTouchMove","passive","clickedElsewhere","event","target","localName","stopPropagation","hostElement","getRootNode","nodeName","destroyEventListeners","screen","orientation","removeEventListener","handleOrientationChange","visualViewport","removeTouchEventListeners","isLandscape","isModule","_b","platformDimensions","orientationType","includes","_d","_c","type","originalSearchable","document","activeElement","focus","initEventListeners","initMutationObserver","observer","MutationObserver","onMutationObserved","observe","childList","subtree","mutationObserver","inputBlurHandler","inputChangeHandler","inputClickHandler","async","focusInput","shouldShowActionSheet","executeActionSheet","toggleDropdown","inputFocusHandler","inputInputHandler","eventValue","detail","value","shouldClearValue","clearValue","openDropdownWithoutActiveElement","mirrorEmit","query","inputKeydownHandler","key","shiftKey","isShiftTab","hasSlot","keysForOptionListToHandle","inputField","preventDefault","shouldClearSearchText","clearSearchText","handleOptionListExternalKeydown","onCustomDisplayClick","displaySlot","shadowRoot","querySelector","assignedNodes","length","popTopSlot","topSlotHasNode","popBottomSlot","bottomSlotHasNode","handleMultilineOptionsUpdate","checkSelectedOptions","onOptionListChange","values","showAllOptions","handleSelectionChanges","onPopoverState","action","optionList","setActiveElement","showSelectedOptions","visibilityToggleKeyDown","isRadioControlKey","setDefaultActiveElement","disconnectedCallback","disconnect","componentWillLoad","handleAriaLabel","buildStructuredSelectedOptions","componentDidLoad","overrideFocus","setTimeout","checkSelectedDisplay","setCustomLabel","componentDidRender","forEach","fn","onHostElementChange","onchange","onClearHandler","source","handleSelectedDisplay","display","delegateFocus","isEventFromElement","innerInputField","fromHost","isRelatedTargetWithinHost","clearSelectedDisplay","handleFocusout","relatedTarget","isLeavingHost","contains","closeDropdown","keydownHandler","popoverStateChanged","handleTctClick","name","version","getBrowserInfo","majorVersion","Number","split","isNaN","push","blur","onHostElementInput","oninput","options","optionElements","trim","toLocaleLowerCase","matchedCount","option","hidden","title","firstElementChild","tagName","innerText","searchParams","matched","some","text","statusMessageLocString","count","setStatusMessage","closePopover","_togglePopover","openPopover","searchOptions","dispatchEvent","FocusEvent","InputEvent","setValue","valuesSet","Set","Array","isArray","waitForNextPaint","find","click","ariaLabelObserver","newValue","oldValue","element","multiline","openChanged","isOpen","popoverTopContainer","height","offsetHeight","style","setProperty","removeProperty","searchableChanged","newVal","map","valueUpdated","badgeValue","optionsLength","firstSelectedOptionElement","firstSelectedValue","innerInputContainer","inputId","isIframe","top","hasPlatformDimensions","Object","keys","from","querySelectorAll","popoverMinHeight","firstOption","minHeight","getComputedStyle","parseInt","selectedDisplay","calculateMultiSelectSelectedDisplay","calculateSingleSelectSelectedDisplay","replace","selectedDisplaySlot","wrapperClasses","errors","classes","join","textContent","namedSlot","hasNoValue","selectionClone","cloneNode","remove","clientHeight","outerHTML","replaceChild","createElement","slot","appendChild","checkSelectedDisplayHeight","selected","undefined","tctVModel","result","showActionSheetList","handleExternalKeydown","changeDetails","selectedOptionValues","customLabel","removeChild","message","clearTimeout","statusMessageTimer","statusMessage","renderCustomDisplay","hasSelectedDisplay","h","renderOptionsDropdown","ref","el","controlElement","popoverMaxHeight","direction","popDirection","mode","block","class","id","label","onChange","e","onTctChange","tabindex","renderVisibilityToggle","renderSelectField","Fragment","role","clearable","error","invalid","placeholder","hideLabel","ariaExpanded","ariaControls","ariaHaspopup","iconRight","onClick","onInput","stopImmediatePropagation","onTctInput","onKeyDown","onFocus","onBlur","badgeTheme","_role","_preventEntry","selectedOptionsCount","checked","htmlFor","render"],"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-default-select-margin: #{var-list(var-prefixer(select-margin-top), --app-scale-5x, 25px) 0\n var-list(var-prefixer(select-margin-bottom), --app-scale-5x, 25px)};\n display: block;\n margin: var-list(--tct-select-margin, --comp-default-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 4px\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-visible + 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 Fragment,\n} from '@stencil/core';\nimport type { EventDetail } from 'q2-tecton-common/lib/types/elements';\nimport { Q2InputCustomEvent, Q2OptionListCustomEvent } from 'src/components';\nimport {\n createGuid,\n getBrowserInfo,\n handleAriaLabel,\n isEventFromElement,\n isMobile,\n isRelatedTargetWithinHost,\n loc,\n overrideFocus,\n waitForNextPaint,\n} from '../../utils';\nimport mirrorEmit from '@/utils/mirror-emit';\nimport { OptionValue } from '../q2-option-list/q2-option-list';\nimport { shouldShowActionSheet, showActionSheetList } from 'src/utils/action-sheet';\n\n/**\n * @name Select\n * @category Forms\n * @summary Use for choosing from a list of options with single-select, multi-select, or search.\n * @slot popover-top - An optional slot to display custom content persistently at the top of the popover. This is **not** compatible with the action sheet workflow.\n * @slot popover-bottom - An optional slot to display custom content persistently at the bottom of the popover. This is **not** compatible with the action sheet workflow.\n * @slot q2-select-display - An optional slot to display custom HTML content in the display area.\n */\n@Component({ tag: 'q2-select', shadow: true, styleUrl: 'q2-select.scss' })\nexport class Q2Select implements ComponentInterface {\n // #region Own Properties\n\n guid = createGuid();\n inputField?: HTMLQ2InputElement;\n isOrientationUpdate: boolean = false;\n lastTouchWasInPopover: boolean = false;\n mutationObserver: MutationObserver;\n optionList: HTMLQ2OptionListElement;\n originalSearchable: boolean;\n popoverElement?: HTMLQ2PopoverElement;\n popoverTopContainer?: HTMLDivElement;\n scheduledAfterRender: (() => void)[] = [];\n statusMessageTimer: NodeJS.Timeout;\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 hasCustomDisplay: boolean = false;\n\n @State()\n hasPopoverBottom: boolean = false;\n\n @State()\n hasPopoverTop: boolean = false;\n\n @State()\n inputFocused: boolean = false;\n\n @State()\n open: boolean = false;\n\n /**\n * Determines what text to show in the input field.\n * When `true`, the component will display the search text in the input field\n * When `false`, the component will display the selected option(s) in the input field\n */\n @State()\n prioritizeSearch: boolean = false;\n\n @State()\n searchText: string = '';\n\n @State()\n showSelected: boolean = false;\n\n @State()\n statusMessage: string;\n\n @State()\n structuredSelectedOptions: OptionValue[] = [];\n\n // #endregion\n // #region Public Property API\n\n /** @deprecated */\n @Prop({ reflect: true, mutable: true })\n ariaLabel: string;\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 })\n clearable: boolean;\n\n /** Disables all interaction with the field and leverages the disabled visual style of `q2-input`. */\n @Prop({ reflect: true })\n 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()\n 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 })\n hideLabel: 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/design-system/q2-card/) component since its styling is managed by Tecton.\n */\n @Prop()\n 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 })\n 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 })\n label: string;\n\n /**\n * Determines the label that is applied to the option list for accessibility purposes.\n * @localizable\n */\n @Prop()\n 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()\n 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 })\n multilineOptions: boolean = false;\n\n /** Enables multi-select functionality. */\n @Prop({ reflect: true })\n 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 })\n 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 })\n placeholder: string;\n\n /** @deprecated */\n @Prop({ reflect: true })\n popDirection: '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 popoverMaxHeight: number;\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 })\n 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 })\n readonly: boolean = false;\n\n /** Enables search functionality. */\n @Prop({ reflect: true, mutable: true })\n 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 })\n 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 })\n value: string;\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\n * `undefined` and the `selectedOptions` property will contain the selected\n * option values. Ignore the `tctVModel` property it's only included for Vue\n * v-model compatibility.\n *\n * @deprecated Use 'tctChange' instead\n * @legacyEvent\n */\n @Event()\n change: EventEmitter<{ value: string; selectedOptions: string[]; tctVModel: string | string[] }>;\n\n /**\n * Emitted when the input value changes.\n *\n * Requires the `searchable` prop to be set to `true`.\n *\n * @deprecated Use 'tctInput' instead\n */\n @Event()\n input: EventEmitter<{ query: string }>;\n\n /**\n * Emitted when an option is selected or deselected.\n *\n * When the multi-select is enabled, the `value` property will be\n * `undefined` and the `selectedOptions` property will contain the selected\n * option values. Ignore the `tctVModel` property it's only included for Vue\n * v-model compatibility.\n *\n * @legacyEvent\n */\n @Event()\n tctChange: EventEmitter<{ value: string; selectedOptions: string[]; tctVModel: string | string[] }>;\n\n /**\n * Emitted when the input value changes.\n *\n * Requires the `searchable` prop to be set to `true`.\n */\n @Event()\n tctInput: EventEmitter<{ query: string }>;\n\n // #endregion\n // #region Component Lifecycle Events\n\n disconnectedCallback() {\n this.mutationObserver?.disconnect();\n this.mutationObserver = null;\n this.destroyEventListeners();\n }\n\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 this.setCustomLabel();\n }\n\n componentDidRender() {\n setTimeout(() => {\n this.scheduledAfterRender.forEach(fn => fn());\n this.scheduledAfterRender = [];\n }, 25);\n }\n\n // #endregion\n // #region Listeners\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(event: CustomEvent) {\n // when multiple & searchable, it should not fire clearValue() if the type is `input` (cleared by key input) which is emitted from q2-input's handleDataInput\n if (this.multiple && this.searchable && event?.detail?.source === 'input') return;\n this.clearValue();\n }\n\n @Listen('displayChanged')\n handleSelectedDisplay(event: CustomEvent) {\n if (!this.multiple && !!this.value && this.value === event.detail.value) {\n this.inputField.value = event.detail.display;\n }\n }\n\n @Listen('focus')\n delegateFocus(event: FocusEvent) {\n // Always delegate focus from host to inner input (fixes programmatic focus)\n if (isEventFromElement(event, this.hostElement)) {\n this.innerInputField?.focus();\n }\n\n // Manage display state for searchable selects (preserves existing behavior)\n const fromHost = isRelatedTargetWithinHost(event, this.hostElement);\n this.prioritizeSearch = fromHost && this.searchable;\n\n if (this.prioritizeSearch) {\n this.clearSelectedDisplay();\n }\n }\n\n @Listen('focusout')\n handleFocusout(event: FocusEvent) {\n const relatedTarget = event.relatedTarget as HTMLElement;\n const isLeavingHost =\n !this.popoverElement?.contains(relatedTarget) && !this.hostElement.contains(relatedTarget);\n if (isLeavingHost) this.closeDropdown();\n this.prioritizeSearch = !isLeavingHost && this.searchable;\n }\n\n @Listen('keydown')\n keydownHandler(event: KeyboardEvent) {\n this.inputKeydownHandler(event);\n }\n\n @Listen('popoverStateChanged')\n popoverStateChanged({ detail: { open } }: CustomEvent<{ open: boolean }>) {\n if (this.open !== open) this.open = open;\n }\n\n @Listen('tctClick')\n handleTctClick() {\n const { name, version } = getBrowserInfo();\n const majorVersion = Number(version.split('.')[0]);\n // Only Safari under iOS 18 having issue when searchable\n if (this.searchable && name === 'Safari' && !isNaN(majorVersion) && majorVersion < 18) {\n this.scheduledAfterRender.push(() => this.innerInputField.blur());\n }\n }\n\n @Listen('tctInput')\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 // #endregion\n // #region Public Methods API\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 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 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 /**\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 // #endregion\n // #region Watchers\n\n @Watch('ariaLabel')\n ariaLabelObserver() {\n handleAriaLabel(this);\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 @Watch('searchable')\n searchableChanged(newVal: boolean) {\n if (!this.isOrientationUpdate) {\n this.originalSearchable = newVal;\n }\n }\n\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('value')\n valueUpdated() {\n if (this.multiple) return;\n this.clearSearchText();\n }\n\n // #endregion\n // #region Local Methods\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 firstSelectedOptionElement() {\n const { firstSelectedValue } = this;\n return firstSelectedValue ? this.optionElements.find(({ value }) => value === firstSelectedValue) : null;\n }\n\n get firstSelectedValue() {\n return this.multiple ? this.selectedOptions?.[0] : this.value;\n }\n\n get innerInputContainer(): HTMLElement {\n return this.inputField?.shadowRoot?.querySelector('.input-container');\n }\n\n get innerInputField(): HTMLInputElement | HTMLButtonElement {\n return this.inputField?.shadowRoot?.querySelector('.input-field');\n }\n\n get inputId() {\n return `select-guid-${this.guid}`;\n }\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 optionElements() {\n return Array.from(this.hostElement.querySelectorAll<HTMLQ2OptionElement>('q2-option'));\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 (\n this.multiple ? this.calculateMultiSelectSelectedDisplay() : this.calculateSingleSelectSelectedDisplay()\n )\n .trim()\n .replace(/\\t/g, ' ');\n }\n\n get selectedDisplaySlot() {\n return this.hostElement.querySelector<HTMLElement>('[slot=\"_selected-display\"]');\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 _togglePopover() {\n const { innerInputField } = this;\n innerInputField?.click();\n innerInputField?.focus();\n innerInputField.dispatchEvent(new FocusEvent('focus'));\n }\n\n addTouchEventListeners = () => {\n if (!isMobile() || !this.popoverElement) return;\n\n this.popoverElement.addEventListener('touchmove', this.handleTouchMove, { passive: true });\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 checkSelectedDisplay() {\n // This prevents an undefined property error when the spec tests are run\n try {\n this.hostElement;\n } catch (error) {\n return null;\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 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 clearSearchText() {\n if (!this.searchText) return;\n this.searchText = '';\n mirrorEmit(this, ['input', 'tctInput'], { query: '' });\n }\n\n clearSelectedDisplay() {\n this.selectedDisplaySlot?.remove();\n }\n\n clearValue() {\n const { multiple } = this;\n this.value = '';\n this.selectedOptions = [];\n mirrorEmit(this, ['change', 'tctChange'], {\n value: multiple ? undefined : '',\n selectedOptions: multiple ? [] : undefined,\n tctVModel: multiple ? [] : '',\n });\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\n // close popover only if not nested in a shadow dom\n if (this.hostElement.getRootNode().nodeName !== '#document-fragment') {\n popoverElement.open = false;\n }\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 async executeActionSheet(event: MouseEvent | KeyboardEvent) {\n const result = await showActionSheetList(this, event);\n this.focusInput();\n this.handleSelectionChanges(result);\n }\n\n focusInput() {\n this.inputField?.dispatchEvent(new FocusEvent('focus'));\n }\n\n // Helps with checking for calls to handleExternalKeydown in spec tests\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 this.isOrientationUpdate = true;\n if (isLandscape && this.searchable) this.searchable = false;\n if (!isLandscape) this.searchable = this.originalSearchable;\n this.isOrientationUpdate = false;\n };\n\n handleSelectionChanges(changeDetails: { value?: string; values?: OptionValue[] }) {\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 mirrorEmit(this, ['change', 'tctChange'], {\n value: multiple ? undefined : value,\n selectedOptions: multiple ? selectedOptionValues : undefined,\n tctVModel: multiple ? selectedOptionValues : value,\n });\n }\n\n handleTouchMove = (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 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 inputBlurHandler = () => {\n this.inputFocused = false;\n };\n\n inputChangeHandler = (event: Event) => {\n event.stopPropagation();\n };\n\n inputClickHandler = async (event: MouseEvent) => {\n event.stopPropagation();\n\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 inputFocusHandler = () => {\n this.inputFocused = true;\n };\n\n inputInputHandler = (event: Q2InputCustomEvent<EventDetail> & 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 mirrorEmit(this, ['input', 'tctInput'], { query: eventValue });\n };\n\n inputKeydownHandler = (event: KeyboardEvent) => {\n if (this.readonly || this.disabled) return;\n const { key, shiftKey } = event;\n const isShiftTab = key === 'Tab' && shiftKey;\n const hasSlot = this.hasPopoverTop || this.hasPopoverBottom;\n if ((hasSlot || this.multiple) && (key === 'Tab' || isShiftTab)) return;\n\n // slots are incompatible with action sheet\n if (shouldShowActionSheet(this, event) && !hasSlot) {\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 onCustomDisplayClick = (event: MouseEvent) => {\n event.stopPropagation();\n this.focusInput();\n this.toggleDropdown();\n };\n\n onMutationObserved = () => {\n const { hostElement, hasPopoverTop, hasPopoverBottom } = this;\n const displaySlot = hostElement.shadowRoot?.querySelector<HTMLSlotElement>('slot[name=\"q2-select-display\"]');\n const hasCustomDisplay = displaySlot?.assignedNodes().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 if (this.multilineOptions) this.handleMultilineOptionsUpdate(this.multilineOptions, null);\n this.checkSelectedOptions();\n };\n\n onOptionListChange = (event: Q2OptionListCustomEvent<{ value: string; values: OptionValue[] }>) => {\n event.stopPropagation();\n const { values } = event.detail;\n\n if (values.length === 0) this.showAllOptions();\n this.handleSelectionChanges(event.detail);\n };\n\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 openDropdownWithoutActiveElement() {\n if (this.readonly || this.disabled) return;\n this.optionList.setActiveElement(null);\n this.open = true;\n }\n\n removeTouchEventListeners = () => {\n if (!isMobile() || !this.popoverElement) return;\n\n this.popoverElement.removeEventListener('touchmove', this.handleTouchMove);\n };\n\n setCustomLabel() {\n const customLabel = this.hostElement.querySelector('[slot=\"label\"]');\n if (customLabel) {\n this.inputField?.appendChild(customLabel.cloneNode(true));\n this.hostElement.removeChild(customLabel);\n }\n }\n\n setStatusMessage(message) {\n clearTimeout(this.statusMessageTimer);\n this.statusMessage = '';\n this.statusMessageTimer = setTimeout(() => {\n this.statusMessage = message;\n }, 1000);\n }\n\n shouldClearSearchText(event: KeyboardEvent) {\n return this.searchable && !!this.searchText && event.key === 'Escape';\n }\n\n showAllOptions = () => {\n this.showSelected = false;\n };\n\n showSelectedOptions = () => {\n this.showSelected = true;\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 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 // #endregion\n // #region Render Methods\n\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 renderOptionsDropdown() {\n return (\n <q2-popover\n ref={el => (this.popoverElement = el)}\n controlElement={this.innerInputContainer}\n open={this.open}\n max-height={this.popoverMaxHeight}\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={e => e.stopPropagation()}\n onTctChange={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.renderVisibilityToggle()}\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 renderSelectField() {\n return (\n <Fragment>\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={e => e.stopImmediatePropagation()}\n onTctInput={this.inputInputHandler}\n onKeyDown={this.inputKeydownHandler}\n onFocus={this.inputFocusHandler}\n onBlur={this.inputBlurHandler}\n onChange={e => e.stopPropagation()}\n onTctChange={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.renderOptionsDropdown()}\n </Fragment>\n );\n }\n\n renderVisibilityToggle() {\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 render() {\n return (\n <click-elsewhere\n class={this.wrapperClasses}\n role=\"presentation\"\n onChange={this.clickedElsewhere}\n >\n {this.renderSelectField()}\n </click-elsewhere>\n );\n }\n\n // #endregion\n}\n\n// #endregion\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["q2SelectCss","Q2Select","constructor","hostRef","this","guid","createGuid","isOrientationUpdate","lastTouchWasInPopover","scheduledAfterRender","hasCustomDisplay","hasPopoverBottom","hasPopoverTop","inputFocused","open","prioritizeSearch","searchText","showSelected","structuredSelectedOptions","disabled","hoist","_a","window","Tecton","useActionSheets","listLabel","loc","minRows","multilineOptions","multiple","optional","popoverMode","readonly","searchable","selectedOptions","addTouchEventListeners","isMobile","popoverElement","addEventListener","handleTouchMove","passive","clickedElsewhere","event","target","localName","stopPropagation","hostElement","getRootNode","nodeName","destroyEventListeners","screen","orientation","removeEventListener","handleOrientationChange","visualViewport","removeTouchEventListeners","isLandscape","isModule","_b","platformDimensions","orientationType","includes","_d","_c","type","originalSearchable","document","activeElement","focus","initEventListeners","initMutationObserver","observer","MutationObserver","onMutationObserved","observe","childList","subtree","mutationObserver","inputBlurHandler","inputChangeHandler","inputClickHandler","async","focusInput","shouldShowActionSheet","executeActionSheet","toggleDropdown","inputFocusHandler","inputInputHandler","eventValue","detail","value","shouldClearValue","clearValue","openDropdownWithoutActiveElement","mirrorEmit","query","inputKeydownHandler","key","shiftKey","isShiftTab","hasSlot","keysForOptionListToHandle","inputField","preventDefault","shouldClearSearchText","clearSearchText","handleOptionListExternalKeydown","onCustomDisplayClick","displaySlot","shadowRoot","querySelector","assignedNodes","length","popTopSlot","topSlotHasNode","popBottomSlot","bottomSlotHasNode","handleMultilineOptionsUpdate","checkSelectedOptions","onOptionListChange","values","showAllOptions","handleSelectionChanges","onPopoverState","action","optionList","setActiveElement","showSelectedOptions","visibilityToggleKeyDown","isRadioControlKey","setDefaultActiveElement","disconnectedCallback","disconnect","componentWillLoad","handleAriaLabel","buildStructuredSelectedOptions","componentDidLoad","overrideFocus","setTimeout","checkSelectedDisplay","setCustomLabel","componentDidRender","forEach","fn","onHostElementChange","onchange","onClearHandler","source","handleSelectedDisplay","display","delegateFocus","isEventFromElement","innerInputField","fromHost","isRelatedTargetWithinHost","clearSelectedDisplay","handleFocusout","relatedTarget","isLeavingHost","contains","closeDropdown","keydownHandler","popoverStateChanged","handleTctClick","name","version","getBrowserInfo","majorVersion","Number","split","isNaN","push","blur","onHostElementInput","oninput","options","optionElements","trim","toLocaleLowerCase","matchedCount","option","hidden","title","firstElementChild","tagName","innerText","searchParams","matched","some","text","statusMessageLocString","count","setStatusMessage","closePopover","_togglePopover","openPopover","searchOptions","dispatchEvent","FocusEvent","InputEvent","setValue","valuesSet","Set","Array","isArray","waitForNextPaint","find","click","ariaLabelObserver","newValue","oldValue","element","multiline","openChanged","isOpen","popoverTopContainer","height","offsetHeight","style","setProperty","removeProperty","searchableChanged","newVal","map","valueUpdated","badgeValue","optionsLength","firstSelectedOptionElement","firstSelectedValue","innerInputContainer","inputId","isIframe","top","hasPlatformDimensions","Object","keys","from","querySelectorAll","popoverMinHeight","firstOption","minHeight","getComputedStyle","parseInt","selectedDisplay","calculateMultiSelectSelectedDisplay","calculateSingleSelectSelectedDisplay","replace","selectedDisplaySlot","wrapperClasses","errors","classes","join","textContent","namedSlot","hasNoValue","selectionClone","cloneNode","remove","clientHeight","outerHTML","replaceChild","createElement","slot","appendChild","checkSelectedDisplayHeight","selected","undefined","tctVModel","result","showActionSheetList","handleExternalKeydown","changeDetails","selectedOptionValues","customLabel","removeChild","message","clearTimeout","statusMessageTimer","statusMessage","renderCustomDisplay","hasSelectedDisplay","h","renderOptionsDropdown","ref","el","controlElement","popoverMaxHeight","direction","popDirection","mode","block","class","id","label","onChange","e","onTctChange","tabindex","renderVisibilityToggle","renderSelectField","Fragment","role","clearable","error","invalid","placeholder","hideLabel","ariaExpanded","ariaControls","ariaHaspopup","iconRight","onClick","onInput","stopImmediatePropagation","onTctInput","onKeyDown","onFocus","onBlur","badgeTheme","_role","_preventEntry","selectedOptionsCount","checked","htmlFor","render"],"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@import './variables';\n\n:host {\n --comp-default-select-margin: #{var-list(var-prefixer(select-margin-top), --app-scale-5x, 25px) 0\n var-list(var-prefixer(select-margin-bottom), --app-scale-5x, 25px)};\n display: block;\n margin: var-list(--tct-select-margin, --comp-default-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 4px\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-visible + 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 Fragment,\n} from '@stencil/core';\nimport type { EventDetail } from 'q2-tecton-common/lib/types/elements';\nimport { Q2InputCustomEvent, Q2OptionListCustomEvent } from 'src/components';\nimport {\n createGuid,\n getBrowserInfo,\n handleAriaLabel,\n isEventFromElement,\n isMobile,\n isRelatedTargetWithinHost,\n loc,\n overrideFocus,\n waitForNextPaint,\n} from '../../utils';\nimport mirrorEmit from '@/utils/mirror-emit';\nimport { OptionValue } from '../q2-option-list/q2-option-list';\nimport { shouldShowActionSheet, showActionSheetList } from 'src/utils/action-sheet';\n\n/**\n * @name Select\n * @category Forms\n * @summary Use for choosing from a list of options with single-select, multi-select, or search.\n * @slot popover-top - An optional slot to display custom content persistently at the top of the popover. This is **not** compatible with the action sheet workflow.\n * @slot popover-bottom - An optional slot to display custom content persistently at the bottom of the popover. This is **not** compatible with the action sheet workflow.\n * @slot q2-select-display - An optional slot to display custom HTML content in the display area.\n */\n@Component({ tag: 'q2-select', shadow: true, styleUrl: 'q2-select.scss' })\nexport class Q2Select implements ComponentInterface {\n // #region Own Properties\n\n guid = createGuid();\n inputField?: HTMLQ2InputElement;\n isOrientationUpdate: boolean = false;\n lastTouchWasInPopover: boolean = false;\n mutationObserver: MutationObserver;\n optionList: HTMLQ2OptionListElement;\n originalSearchable: boolean;\n popoverElement?: HTMLQ2PopoverElement;\n popoverTopContainer?: HTMLDivElement;\n scheduledAfterRender: (() => void)[] = [];\n statusMessageTimer: NodeJS.Timeout;\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 hasCustomDisplay: boolean = false;\n\n @State()\n hasPopoverBottom: boolean = false;\n\n @State()\n hasPopoverTop: boolean = false;\n\n @State()\n inputFocused: boolean = false;\n\n @State()\n open: boolean = false;\n\n /**\n * Determines what text to show in the input field.\n * When `true`, the component will display the search text in the input field\n * When `false`, the component will display the selected option(s) in the input field\n */\n @State()\n prioritizeSearch: boolean = false;\n\n @State()\n searchText: string = '';\n\n @State()\n showSelected: boolean = false;\n\n @State()\n statusMessage: string;\n\n @State()\n structuredSelectedOptions: OptionValue[] = [];\n\n // #endregion\n // #region Public Property API\n\n /** @deprecated */\n @Prop({ reflect: true, mutable: true })\n ariaLabel: string;\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 })\n clearable: boolean;\n\n /** Disables all interaction with the field and leverages the disabled visual style of `q2-input`. */\n @Prop({ reflect: true })\n 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()\n 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 })\n hideLabel: 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/design-system/q2-card/) component since its styling is managed by Tecton.\n */\n @Prop()\n 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 })\n 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 })\n label: string;\n\n /**\n * Determines the label that is applied to the option list for accessibility purposes.\n * @localizable\n */\n @Prop()\n 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()\n 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 })\n multilineOptions: boolean = false;\n\n /** Enables multi-select functionality. */\n @Prop({ reflect: true })\n 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 })\n 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 })\n placeholder: string;\n\n /** @deprecated */\n @Prop({ reflect: true })\n popDirection: '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 popoverMaxHeight: number;\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 })\n 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 })\n readonly: boolean = false;\n\n /** Enables search functionality. */\n @Prop({ reflect: true, mutable: true })\n 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 })\n 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 })\n value: string;\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\n * `undefined` and the `selectedOptions` property will contain the selected\n * option values. Ignore the `tctVModel` property it's only included for Vue\n * v-model compatibility.\n *\n * @deprecated Use 'tctChange' instead\n * @legacyEvent\n */\n @Event()\n change: EventEmitter<{ value: string; selectedOptions: string[]; tctVModel: string | string[] }>;\n\n /**\n * Emitted when the input value changes.\n *\n * Requires the `searchable` prop to be set to `true`.\n *\n * @deprecated Use 'tctInput' instead\n */\n @Event()\n input: EventEmitter<{ query: string }>;\n\n /**\n * Emitted when an option is selected or deselected.\n *\n * When the multi-select is enabled, the `value` property will be\n * `undefined` and the `selectedOptions` property will contain the selected\n * option values. Ignore the `tctVModel` property it's only included for Vue\n * v-model compatibility.\n *\n * @legacyEvent\n */\n @Event()\n tctChange: EventEmitter<{ value: string; selectedOptions: string[]; tctVModel: string | string[] }>;\n\n /**\n * Emitted when the input value changes.\n *\n * Requires the `searchable` prop to be set to `true`.\n */\n @Event()\n tctInput: EventEmitter<{ query: string }>;\n\n // #endregion\n // #region Component Lifecycle Events\n\n disconnectedCallback() {\n this.mutationObserver?.disconnect();\n this.mutationObserver = null;\n this.destroyEventListeners();\n }\n\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 this.setCustomLabel();\n }\n\n componentDidRender() {\n setTimeout(() => {\n this.scheduledAfterRender.forEach(fn => fn());\n this.scheduledAfterRender = [];\n }, 25);\n }\n\n // #endregion\n // #region Listeners\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(event: CustomEvent) {\n // when multiple & searchable, it should not fire clearValue() if the type is `input` (cleared by key input) which is emitted from q2-input's handleDataInput\n if (this.multiple && this.searchable && event?.detail?.source === 'input') return;\n this.clearValue();\n }\n\n @Listen('displayChanged')\n handleSelectedDisplay(event: CustomEvent) {\n if (!this.multiple && !!this.value && this.value === event.detail.value) {\n this.inputField.value = event.detail.display;\n }\n }\n\n @Listen('focus')\n delegateFocus(event: FocusEvent) {\n // Always delegate focus from host to inner input (fixes programmatic focus)\n if (isEventFromElement(event, this.hostElement)) {\n this.innerInputField?.focus();\n }\n\n // Manage display state for searchable selects (preserves existing behavior)\n const fromHost = isRelatedTargetWithinHost(event, this.hostElement);\n this.prioritizeSearch = fromHost && this.searchable;\n\n if (this.prioritizeSearch) {\n this.clearSelectedDisplay();\n }\n }\n\n @Listen('focusout')\n handleFocusout(event: FocusEvent) {\n const relatedTarget = event.relatedTarget as HTMLElement;\n const isLeavingHost =\n !this.popoverElement?.contains(relatedTarget) && !this.hostElement.contains(relatedTarget);\n if (isLeavingHost) this.closeDropdown();\n this.prioritizeSearch = !isLeavingHost && this.searchable;\n }\n\n @Listen('keydown')\n keydownHandler(event: KeyboardEvent) {\n this.inputKeydownHandler(event);\n }\n\n @Listen('popoverStateChanged')\n popoverStateChanged({ detail: { open } }: CustomEvent<{ open: boolean }>) {\n if (this.open !== open) this.open = open;\n }\n\n @Listen('tctClick')\n handleTctClick() {\n const { name, version } = getBrowserInfo();\n const majorVersion = Number(version.split('.')[0]);\n // Only Safari under iOS 18 having issue when searchable\n if (this.searchable && name === 'Safari' && !isNaN(majorVersion) && majorVersion < 18) {\n this.scheduledAfterRender.push(() => this.innerInputField.blur());\n }\n }\n\n @Listen('tctInput')\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 // #endregion\n // #region Public Methods API\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 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 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 /**\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 // #endregion\n // #region Watchers\n\n @Watch('ariaLabel')\n ariaLabelObserver() {\n handleAriaLabel(this);\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 @Watch('searchable')\n searchableChanged(newVal: boolean) {\n if (!this.isOrientationUpdate) {\n this.originalSearchable = newVal;\n }\n }\n\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('value')\n valueUpdated() {\n if (this.multiple) return;\n this.clearSearchText();\n }\n\n // #endregion\n // #region Local Methods\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 firstSelectedOptionElement() {\n const { firstSelectedValue } = this;\n return firstSelectedValue ? this.optionElements.find(({ value }) => value === firstSelectedValue) : null;\n }\n\n get firstSelectedValue() {\n return this.multiple ? this.selectedOptions?.[0] : this.value;\n }\n\n get innerInputContainer(): HTMLElement {\n return this.inputField?.shadowRoot?.querySelector('.input-container');\n }\n\n get innerInputField(): HTMLInputElement | HTMLButtonElement {\n return this.inputField?.shadowRoot?.querySelector('.input-field');\n }\n\n get inputId() {\n return `select-guid-${this.guid}`;\n }\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 optionElements() {\n return Array.from(this.hostElement.querySelectorAll<HTMLQ2OptionElement>('q2-option'));\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 (\n this.multiple ? this.calculateMultiSelectSelectedDisplay() : this.calculateSingleSelectSelectedDisplay()\n )\n .trim()\n .replace(/\\t/g, ' ');\n }\n\n get selectedDisplaySlot() {\n return this.hostElement.querySelector<HTMLElement>('[slot=\"_selected-display\"]');\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 _togglePopover() {\n const { innerInputField } = this;\n innerInputField?.click();\n innerInputField?.focus();\n innerInputField.dispatchEvent(new FocusEvent('focus'));\n }\n\n addTouchEventListeners = () => {\n if (!isMobile() || !this.popoverElement) return;\n\n this.popoverElement.addEventListener('touchmove', this.handleTouchMove, { passive: true });\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 checkSelectedDisplay() {\n // This prevents an undefined property error when the spec tests are run\n try {\n this.hostElement;\n } catch (error) {\n return null;\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 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 clearSearchText() {\n if (!this.searchText) return;\n this.searchText = '';\n mirrorEmit(this, ['input', 'tctInput'], { query: '' });\n }\n\n clearSelectedDisplay() {\n this.selectedDisplaySlot?.remove();\n }\n\n clearValue() {\n const { multiple } = this;\n this.value = '';\n this.selectedOptions = [];\n mirrorEmit(this, ['change', 'tctChange'], {\n value: multiple ? undefined : '',\n selectedOptions: multiple ? [] : undefined,\n tctVModel: multiple ? [] : '',\n });\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\n // close popover only if not nested in a shadow dom\n if (this.hostElement.getRootNode().nodeName !== '#document-fragment') {\n popoverElement.open = false;\n }\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 async executeActionSheet(event: MouseEvent | KeyboardEvent) {\n const result = await showActionSheetList(this, event);\n this.focusInput();\n this.handleSelectionChanges(result);\n }\n\n focusInput() {\n this.inputField?.dispatchEvent(new FocusEvent('focus'));\n }\n\n // Helps with checking for calls to handleExternalKeydown in spec tests\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 this.isOrientationUpdate = true;\n if (isLandscape && this.searchable) this.searchable = false;\n if (!isLandscape) this.searchable = this.originalSearchable;\n this.isOrientationUpdate = false;\n };\n\n handleSelectionChanges(changeDetails: { value?: string; values?: OptionValue[] }) {\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 mirrorEmit(this, ['change', 'tctChange'], {\n value: multiple ? undefined : value,\n selectedOptions: multiple ? selectedOptionValues : undefined,\n tctVModel: multiple ? selectedOptionValues : value,\n });\n }\n\n handleTouchMove = (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 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 inputBlurHandler = () => {\n this.inputFocused = false;\n };\n\n inputChangeHandler = (event: Event) => {\n event.stopPropagation();\n };\n\n inputClickHandler = async (event: MouseEvent) => {\n event.stopPropagation();\n\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 inputFocusHandler = () => {\n this.inputFocused = true;\n };\n\n inputInputHandler = (event: Q2InputCustomEvent<EventDetail> & 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 mirrorEmit(this, ['input', 'tctInput'], { query: eventValue });\n };\n\n inputKeydownHandler = (event: KeyboardEvent) => {\n if (this.readonly || this.disabled) return;\n const { key, shiftKey } = event;\n const isShiftTab = key === 'Tab' && shiftKey;\n const hasSlot = this.hasPopoverTop || this.hasPopoverBottom;\n if ((hasSlot || this.multiple) && (key === 'Tab' || isShiftTab)) return;\n\n // slots are incompatible with action sheet\n if (shouldShowActionSheet(this, event) && !hasSlot) {\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 onCustomDisplayClick = (event: MouseEvent) => {\n event.stopPropagation();\n this.focusInput();\n this.toggleDropdown();\n };\n\n onMutationObserved = () => {\n const { hostElement, hasPopoverTop, hasPopoverBottom } = this;\n const displaySlot = hostElement.shadowRoot?.querySelector<HTMLSlotElement>('slot[name=\"q2-select-display\"]');\n const hasCustomDisplay = displaySlot?.assignedNodes().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 if (this.multilineOptions) this.handleMultilineOptionsUpdate(this.multilineOptions, null);\n this.checkSelectedOptions();\n };\n\n onOptionListChange = (event: Q2OptionListCustomEvent<{ value: string; values: OptionValue[] }>) => {\n event.stopPropagation();\n const { values } = event.detail;\n\n if (values.length === 0) this.showAllOptions();\n this.handleSelectionChanges(event.detail);\n };\n\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 openDropdownWithoutActiveElement() {\n if (this.readonly || this.disabled) return;\n this.optionList.setActiveElement(null);\n this.open = true;\n }\n\n removeTouchEventListeners = () => {\n if (!isMobile() || !this.popoverElement) return;\n\n this.popoverElement.removeEventListener('touchmove', this.handleTouchMove);\n };\n\n setCustomLabel() {\n const customLabel = this.hostElement.querySelector('[slot=\"label\"]');\n if (customLabel) {\n this.inputField?.appendChild(customLabel.cloneNode(true));\n this.hostElement.removeChild(customLabel);\n }\n }\n\n setStatusMessage(message) {\n clearTimeout(this.statusMessageTimer);\n this.statusMessage = '';\n this.statusMessageTimer = setTimeout(() => {\n this.statusMessage = message;\n }, 1000);\n }\n\n shouldClearSearchText(event: KeyboardEvent) {\n return this.searchable && !!this.searchText && event.key === 'Escape';\n }\n\n showAllOptions = () => {\n this.showSelected = false;\n };\n\n showSelectedOptions = () => {\n this.showSelected = true;\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 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 // #endregion\n // #region Render Methods\n\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 renderOptionsDropdown() {\n return (\n <q2-popover\n ref={el => (this.popoverElement = el)}\n controlElement={this.innerInputContainer}\n open={this.open}\n max-height={this.popoverMaxHeight}\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={e => e.stopPropagation()}\n onTctChange={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.renderVisibilityToggle()}\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 renderSelectField() {\n return (\n <Fragment>\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={e => e.stopImmediatePropagation()}\n onTctInput={this.inputInputHandler}\n onKeyDown={this.inputKeydownHandler}\n onFocus={this.inputFocusHandler}\n onBlur={this.inputBlurHandler}\n onChange={e => e.stopPropagation()}\n onTctChange={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.renderOptionsDropdown()}\n </Fragment>\n );\n }\n\n renderVisibilityToggle() {\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 render() {\n return (\n <click-elsewhere\n class={this.wrapperClasses}\n role=\"presentation\"\n onChange={this.clickedElsewhere}\n >\n {this.renderSelectField()}\n </click-elsewhere>\n );\n }\n\n // #endregion\n}\n\n// #endregion\n"],"mappings":"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","ignoreList":[]}
@@ -1,8 +1,8 @@
1
1
  import { r as t, c as e, h as i, F as s, H as a, g as n } from "./index-CGkHOjh1.js";
2
2
 
3
- import { b as o } from "./component-DVxzK3WH.js";
3
+ import { b as o } from "./component-DaQM9u3s.js";
4
4
 
5
- import { c as h, n as c, l as r } from "./index-C4PILj1_.js";
5
+ import { c as h, n as c, l as r } from "./index-C5gj0T_3.js";
6
6
 
7
7
  import { m as d } from "./mirror-emit-DUjY_ucm.js";
8
8
 
@@ -79,30 +79,30 @@ const b = class {
79
79
  render() {
80
80
  const {label: t, isActive: e} = this;
81
81
  return i(a, {
82
- key: "390b7605500bc2f04851fbae962543c92f8b9bb4",
82
+ key: "2b2d2ec65ab23f005a4e648e0afc7a90b0530caa",
83
83
  role: "listitem"
84
84
  }, i(s, {
85
- key: "a4835085304254d9b9c390c9bee29b67f6e9e1c4"
85
+ key: "e90487511e6d10527cff42673ebdd46650523069"
86
86
  }, i("div", {
87
- key: "0a8500ab3d69e3b43945451d9b3b310a05e2d67a",
87
+ key: "a96a140d38a8a7a01afbc448cb8f7d5d1fa79397",
88
88
  "aria-label": t && r(t),
89
89
  tabindex: "0",
90
90
  hidden: !e && !(this.isChildActive && this.showWithChildren)
91
91
  }, i("slot", {
92
- key: "3b0622f4661ce6d3737580244dccb33c648238b3"
92
+ key: "379b2102390641f92864a848ffbcefcea5deac11"
93
93
  })), i("div", {
94
- key: "a1ffd3ac9ecedc149bf8da797bafd76dc4c8b3e7",
94
+ key: "4b00ef58d54afa7b011a22fec7a3fa7cb04f387c",
95
95
  hidden: true
96
96
  }, i("slot", {
97
- key: "437c72da16cd6e8f4c216f6a0e3255b45f3853b4",
97
+ key: "7d4896c01b27561fc5e1f46a8c3b81dd9c35477c",
98
98
  name: "label",
99
99
  onSlotchange: () => this.contentChange.emit()
100
100
  }), i("slot", {
101
- key: "b8c9d86ffd8ede0a8203aea50eb175beee077f6a",
101
+ key: "1403e0718cedb039ee33ba01df91e288b7464730",
102
102
  name: "description",
103
103
  onSlotchange: () => this.contentChange.emit()
104
104
  })), i("slot", {
105
- key: "aac91a3bc78567b297f930b5c61178d9d04381bf",
105
+ key: "0d95f987e005b73343ffe8bb38ba86c2671efb1d",
106
106
  name: "children"
107
107
  })));
108
108
  }