q2-tecton-elements 1.50.1 → 1.51.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (578) hide show
  1. package/dist/cjs/click-elsewhere_2.cjs.entry.js +21 -12
  2. package/dist/cjs/click-elsewhere_2.cjs.entry.js.map +1 -1
  3. package/dist/cjs/index-9aa4a776.js +235 -0
  4. package/dist/cjs/index-9aa4a776.js.map +1 -0
  5. package/dist/cjs/{index-43010ce4.js → index-f69742cf.js} +1 -1
  6. package/dist/cjs/{index-43010ce4.js.map → index-f69742cf.js.map} +1 -1
  7. package/dist/cjs/loader.cjs.js +1 -1
  8. package/dist/cjs/q2-action-group.cjs.entry.js +50 -0
  9. package/dist/cjs/q2-action-group.cjs.entry.js.map +1 -0
  10. package/dist/cjs/q2-action-sheet.cjs.entry.js +1364 -3
  11. package/dist/cjs/q2-action-sheet.cjs.entry.js.map +1 -1
  12. package/dist/cjs/q2-avatar.cjs.entry.js +1 -1
  13. package/dist/cjs/q2-badge_7.cjs.entry.js +23 -13
  14. package/dist/cjs/q2-badge_7.cjs.entry.js.map +1 -1
  15. package/dist/cjs/q2-calendar.cjs.entry.js +2 -2
  16. package/dist/cjs/q2-card.cjs.entry.js +1 -1
  17. package/dist/cjs/q2-carousel-pane.cjs.entry.js +3 -3
  18. package/dist/cjs/q2-carousel.cjs.entry.js +1 -1
  19. package/dist/cjs/q2-chart-area.cjs.entry.js +2 -2
  20. package/dist/cjs/q2-chart-area.cjs.entry.js.map +1 -1
  21. package/dist/cjs/q2-chart-bar.cjs.entry.js +2 -2
  22. package/dist/cjs/q2-chart-bar.cjs.entry.js.map +1 -1
  23. package/dist/cjs/q2-chart-donut.cjs.entry.js +16 -16
  24. package/dist/cjs/q2-chart-donut.cjs.entry.js.map +1 -1
  25. package/dist/cjs/q2-checkbox-group.cjs.entry.js +2 -2
  26. package/dist/cjs/q2-checkbox-group.cjs.entry.js.map +1 -1
  27. package/dist/cjs/q2-checkbox.cjs.entry.js +1 -1
  28. package/dist/cjs/q2-currency.cjs.entry.js +1 -1
  29. package/dist/cjs/q2-data-table.cjs.entry.js +62 -62
  30. package/dist/cjs/q2-data-table.cjs.entry.js.map +1 -1
  31. package/dist/cjs/q2-detail.cjs.entry.js +2 -2
  32. package/dist/cjs/q2-dropdown-item.cjs.entry.js +2 -2
  33. package/dist/cjs/q2-dropdown-item.cjs.entry.js.map +1 -1
  34. package/dist/cjs/q2-dropdown.cjs.entry.js +79 -7
  35. package/dist/cjs/q2-dropdown.cjs.entry.js.map +1 -1
  36. package/dist/cjs/q2-editable-field.cjs.entry.js +1 -1
  37. package/dist/cjs/q2-formatted-text.cjs.entry.js +72 -0
  38. package/dist/cjs/q2-formatted-text.cjs.entry.js.map +1 -0
  39. package/dist/cjs/q2-item.cjs.entry.js +2 -2
  40. package/dist/cjs/q2-legend.cjs.entry.js +2 -2
  41. package/dist/cjs/q2-legend.cjs.entry.js.map +1 -1
  42. package/dist/cjs/q2-link.cjs.entry.js +64 -0
  43. package/dist/cjs/q2-link.cjs.entry.js.map +1 -0
  44. package/dist/cjs/q2-list.cjs.entry.js +2 -2
  45. package/dist/cjs/q2-loc.cjs.entry.js +2 -2
  46. package/dist/cjs/q2-message.cjs.entry.js +2 -2
  47. package/dist/cjs/q2-month-picker.cjs.entry.js +3 -3
  48. package/dist/cjs/q2-optgroup.cjs.entry.js +2 -2
  49. package/dist/cjs/q2-option-list.cjs.entry.js +9 -4
  50. package/dist/cjs/q2-option-list.cjs.entry.js.map +1 -1
  51. package/dist/cjs/q2-option.cjs.entry.js +1 -1
  52. package/dist/cjs/q2-pagination.cjs.entry.js +90 -9
  53. package/dist/cjs/q2-pagination.cjs.entry.js.map +1 -1
  54. package/dist/cjs/q2-pill.cjs.entry.js +26 -5
  55. package/dist/cjs/q2-pill.cjs.entry.js.map +1 -1
  56. package/dist/cjs/q2-radio-group.cjs.entry.js +2 -2
  57. package/dist/cjs/q2-radio-group.cjs.entry.js.map +1 -1
  58. package/dist/cjs/q2-radio.cjs.entry.js +1 -1
  59. package/dist/cjs/q2-relative-time.cjs.entry.js +3 -3
  60. package/dist/cjs/q2-resize-observer.cjs.entry.js +96 -0
  61. package/dist/cjs/q2-resize-observer.cjs.entry.js.map +1 -0
  62. package/dist/cjs/q2-section.cjs.entry.js +27 -3
  63. package/dist/cjs/q2-section.cjs.entry.js.map +1 -1
  64. package/dist/cjs/q2-select.cjs.entry.js +7 -6
  65. package/dist/cjs/q2-select.cjs.entry.js.map +1 -1
  66. package/dist/cjs/q2-stepper-pane.cjs.entry.js +1 -1
  67. package/dist/cjs/q2-stepper-vertical.cjs.entry.js +2 -2
  68. package/dist/cjs/q2-stepper.cjs.entry.js +39 -3
  69. package/dist/cjs/q2-stepper.cjs.entry.js.map +1 -1
  70. package/dist/cjs/q2-tag.cjs.entry.js +3 -2
  71. package/dist/cjs/q2-tag.cjs.entry.js.map +1 -1
  72. package/dist/cjs/q2-tecton-elements.cjs.js +1 -1
  73. package/dist/cjs/q2-textarea.cjs.entry.js +46 -11
  74. package/dist/cjs/q2-textarea.cjs.entry.js.map +1 -1
  75. package/dist/cjs/q2-tooltip.cjs.entry.js +2 -2
  76. package/dist/cjs/q2-tooltip.cjs.entry.js.map +1 -1
  77. package/dist/cjs/tecton-tab-pane.cjs.entry.js +2 -2
  78. package/dist/collection/collection-manifest.json +4 -0
  79. package/dist/collection/components/q2-action-group/q2-action-group.css +99 -0
  80. package/dist/collection/components/q2-action-group/q2-action-group.js +120 -0
  81. package/dist/collection/components/q2-action-group/q2-action-group.js.map +1 -0
  82. package/dist/collection/components/q2-action-group/test/q2-action-group.e2e.js +30 -0
  83. package/dist/collection/components/q2-action-group/test/q2-action-group.e2e.js.map +1 -0
  84. package/dist/collection/components/q2-action-group/test/q2-action-group.spec.js +156 -0
  85. package/dist/collection/components/q2-action-group/test/q2-action-group.spec.js.map +1 -0
  86. package/dist/collection/components/q2-action-sheet/q2-action-sheet.js +3 -2
  87. package/dist/collection/components/q2-action-sheet/q2-action-sheet.js.map +1 -1
  88. package/dist/collection/components/q2-avatar/q2-avatar.js +1 -1
  89. package/dist/collection/components/q2-avatar/test/q2-avatar-test.e2e.js +14 -9
  90. package/dist/collection/components/q2-avatar/test/q2-avatar-test.e2e.js.map +1 -1
  91. package/dist/collection/components/q2-badge/test/q2-badge-test.e2e.js +14 -9
  92. package/dist/collection/components/q2-badge/test/q2-badge-test.e2e.js.map +1 -1
  93. package/dist/collection/components/q2-btn/test/q2-btn-test.e2e.js +14 -9
  94. package/dist/collection/components/q2-btn/test/q2-btn-test.e2e.js.map +1 -1
  95. package/dist/collection/components/q2-calendar/q2-month-picker.js +2 -2
  96. package/dist/collection/components/q2-calendar/test/q2-calendar-test.e2e.js +227 -223
  97. package/dist/collection/components/q2-calendar/test/q2-calendar-test.e2e.js.map +1 -1
  98. package/dist/collection/components/q2-card/test/q2-card-test.e2e.js +12 -7
  99. package/dist/collection/components/q2-card/test/q2-card-test.e2e.js.map +1 -1
  100. package/dist/collection/components/q2-carousel/test/q2-carousel-test.e2e.js +49 -45
  101. package/dist/collection/components/q2-carousel/test/q2-carousel-test.e2e.js.map +1 -1
  102. package/dist/collection/components/q2-carousel-pane/q2-carousel-pane.js +2 -2
  103. package/dist/collection/components/q2-chart-area/q2-chart-area.js +2 -2
  104. package/dist/collection/components/q2-chart-area/q2-chart-area.js.map +1 -1
  105. package/dist/collection/components/q2-chart-area/test/q2-chart-area-test.e2e.js +12 -7
  106. package/dist/collection/components/q2-chart-area/test/q2-chart-area-test.e2e.js.map +1 -1
  107. package/dist/collection/components/q2-chart-bar/q2-chart-bar.js +2 -2
  108. package/dist/collection/components/q2-chart-bar/q2-chart-bar.js.map +1 -1
  109. package/dist/collection/components/q2-chart-bar/test/q2-chart-bar-test.e2e.js +16 -11
  110. package/dist/collection/components/q2-chart-bar/test/q2-chart-bar-test.e2e.js.map +1 -1
  111. package/dist/collection/components/q2-chart-donut/q2-chart-donut.js +15 -15
  112. package/dist/collection/components/q2-chart-donut/q2-chart-donut.js.map +1 -1
  113. package/dist/collection/components/q2-chart-donut/test/q2-chart-donut-test.e2e.js +32 -26
  114. package/dist/collection/components/q2-chart-donut/test/q2-chart-donut-test.e2e.js.map +1 -1
  115. package/dist/collection/components/q2-checkbox/test/q2-checkbox-test.e2e.js +12 -7
  116. package/dist/collection/components/q2-checkbox/test/q2-checkbox-test.e2e.js.map +1 -1
  117. package/dist/collection/components/q2-checkbox-group/q2-checkbox-group.js +2 -2
  118. package/dist/collection/components/q2-checkbox-group/q2-checkbox-group.js.map +1 -1
  119. package/dist/collection/components/q2-checkbox-group/test/q2-checkbox-group-test.e2e.js +22 -17
  120. package/dist/collection/components/q2-checkbox-group/test/q2-checkbox-group-test.e2e.js.map +1 -1
  121. package/dist/collection/components/q2-currency/q2-currency.js +1 -1
  122. package/dist/collection/components/q2-currency/test/q2-currency-test.e2e.js +12 -7
  123. package/dist/collection/components/q2-currency/test/q2-currency-test.e2e.js.map +1 -1
  124. package/dist/collection/components/q2-data-table/q2-data-table.js +104 -104
  125. package/dist/collection/components/q2-data-table/q2-data-table.js.map +1 -1
  126. package/dist/collection/components/q2-data-table/test/q2-data-table-test.e2e.js +42 -24
  127. package/dist/collection/components/q2-data-table/test/q2-data-table-test.e2e.js.map +1 -1
  128. package/dist/collection/components/q2-detail/q2-detail.js +1 -1
  129. package/dist/collection/components/q2-detail/test/q2-detail-test.e2e.js +12 -7
  130. package/dist/collection/components/q2-detail/test/q2-detail-test.e2e.js.map +1 -1
  131. package/dist/collection/components/q2-dropdown/q2-dropdown.js +207 -7
  132. package/dist/collection/components/q2-dropdown/q2-dropdown.js.map +1 -1
  133. package/dist/collection/components/q2-dropdown/test/q2-dropdown-test.e2e.js +297 -135
  134. package/dist/collection/components/q2-dropdown/test/q2-dropdown-test.e2e.js.map +1 -1
  135. package/dist/collection/components/q2-dropdown-item/q2-dropdown-item.js +1 -1
  136. package/dist/collection/components/q2-dropdown-item/q2-dropdown-item.js.map +1 -1
  137. package/dist/collection/components/q2-dropdown-item/test/q2-dropdown-item-test.e2e.js +18 -13
  138. package/dist/collection/components/q2-dropdown-item/test/q2-dropdown-item-test.e2e.js.map +1 -1
  139. package/dist/collection/components/q2-editable-field/test/q2-editable-field-test.e2e.js +14 -18
  140. package/dist/collection/components/q2-editable-field/test/q2-editable-field-test.e2e.js.map +1 -1
  141. package/dist/collection/components/q2-formatted-text/q2-formatted-text.css +94 -0
  142. package/dist/collection/components/q2-formatted-text/q2-formatted-text.js +230 -0
  143. package/dist/collection/components/q2-formatted-text/q2-formatted-text.js.map +1 -0
  144. package/dist/collection/components/q2-formatted-text/test/q2-formatted-text-test.e2e.js +430 -0
  145. package/dist/collection/components/q2-formatted-text/test/q2-formatted-text-test.e2e.js.map +1 -0
  146. package/dist/collection/components/q2-icon/test/q2-icon-test.e2e.js +14 -9
  147. package/dist/collection/components/q2-icon/test/q2-icon-test.e2e.js.map +1 -1
  148. package/dist/collection/components/q2-input/q2-input.css +9 -0
  149. package/dist/collection/components/q2-input/q2-input.js +7 -8
  150. package/dist/collection/components/q2-input/q2-input.js.map +1 -1
  151. package/dist/collection/components/q2-input/test/q2-input-test.e2e.js +50 -33
  152. package/dist/collection/components/q2-input/test/q2-input-test.e2e.js.map +1 -1
  153. package/dist/collection/components/q2-item/q2-item.js +1 -1
  154. package/dist/collection/components/q2-item/test/q2-item-test.e2e.js +32 -7
  155. package/dist/collection/components/q2-item/test/q2-item-test.e2e.js.map +1 -1
  156. package/dist/collection/components/q2-legend/q2-legend.css +1 -1
  157. package/dist/collection/components/q2-legend/q2-legend.js +1 -1
  158. package/dist/collection/components/q2-legend/test/q2-legend-test.e2e.js +13 -8
  159. package/dist/collection/components/q2-legend/test/q2-legend-test.e2e.js.map +1 -1
  160. package/dist/collection/components/q2-link/q2-link.css +146 -0
  161. package/dist/collection/components/q2-link/q2-link.js +242 -0
  162. package/dist/collection/components/q2-link/q2-link.js.map +1 -0
  163. package/dist/collection/components/q2-link/test/q2-link-test.e2e.js +145 -0
  164. package/dist/collection/components/q2-link/test/q2-link-test.e2e.js.map +1 -0
  165. package/dist/collection/components/q2-list/q2-list.js +1 -1
  166. package/dist/collection/components/q2-list/test/q2-list-test.e2e.js +12 -7
  167. package/dist/collection/components/q2-list/test/q2-list-test.e2e.js.map +1 -1
  168. package/dist/collection/components/q2-loading/test/q2-loading-element-test.e2e.js +14 -9
  169. package/dist/collection/components/q2-loading/test/q2-loading-element-test.e2e.js.map +1 -1
  170. package/dist/collection/components/q2-loading/test/q2-loading-test.e2e.js +14 -9
  171. package/dist/collection/components/q2-loading/test/q2-loading-test.e2e.js.map +1 -1
  172. package/dist/collection/components/q2-loc/q2-loc.js +1 -1
  173. package/dist/collection/components/q2-loc/test/q2-loc-test.e2e.js +16 -11
  174. package/dist/collection/components/q2-loc/test/q2-loc-test.e2e.js.map +1 -1
  175. package/dist/collection/components/q2-message/q2-message.js +1 -1
  176. package/dist/collection/components/q2-message/test/q2-message-test.e2e.js +14 -9
  177. package/dist/collection/components/q2-message/test/q2-message-test.e2e.js.map +1 -1
  178. package/dist/collection/components/q2-optgroup/q2-optgroup.js +1 -1
  179. package/dist/collection/components/q2-optgroup/test/q2-optgroup-test.e2e.js +20 -13
  180. package/dist/collection/components/q2-optgroup/test/q2-optgroup-test.e2e.js.map +1 -1
  181. package/dist/collection/components/q2-option/q2-option.js +1 -1
  182. package/dist/collection/components/q2-option/test/q2-option-test.e2e.js +28 -12
  183. package/dist/collection/components/q2-option/test/q2-option-test.e2e.js.map +1 -1
  184. package/dist/collection/components/q2-option-list/q2-option-list.js +7 -5
  185. package/dist/collection/components/q2-option-list/q2-option-list.js.map +1 -1
  186. package/dist/collection/components/q2-option-list/test/q2-option-list-test.e2e.js +415 -405
  187. package/dist/collection/components/q2-option-list/test/q2-option-list-test.e2e.js.map +1 -1
  188. package/dist/collection/components/q2-pagination/q2-pagination.js +230 -14
  189. package/dist/collection/components/q2-pagination/q2-pagination.js.map +1 -1
  190. package/dist/collection/components/q2-pagination/test/q2-pagination-test.e2e.js +138 -15
  191. package/dist/collection/components/q2-pagination/test/q2-pagination-test.e2e.js.map +1 -1
  192. package/dist/collection/components/q2-pill/q2-pill.css +12 -0
  193. package/dist/collection/components/q2-pill/q2-pill.js +43 -3
  194. package/dist/collection/components/q2-pill/q2-pill.js.map +1 -1
  195. package/dist/collection/components/q2-pill/test/q2-pill-test.e2e.js +412 -212
  196. package/dist/collection/components/q2-pill/test/q2-pill-test.e2e.js.map +1 -1
  197. package/dist/collection/components/q2-popover/q2-popover.js +37 -11
  198. package/dist/collection/components/q2-popover/q2-popover.js.map +1 -1
  199. package/dist/collection/components/q2-popover/test/q2-popover-test.e2e.js +296 -236
  200. package/dist/collection/components/q2-popover/test/q2-popover-test.e2e.js.map +1 -1
  201. package/dist/collection/components/q2-popover/test/q2-popover-test.spec.js +3 -3
  202. package/dist/collection/components/q2-popover/test/q2-popover-test.spec.js.map +1 -1
  203. package/dist/collection/components/q2-radio/test/q2-radio-test.e2e.js +21 -7
  204. package/dist/collection/components/q2-radio/test/q2-radio-test.e2e.js.map +1 -1
  205. package/dist/collection/components/q2-radio-group/q2-radio-group.js +2 -2
  206. package/dist/collection/components/q2-radio-group/q2-radio-group.js.map +1 -1
  207. package/dist/collection/components/q2-radio-group/test/q2-radio-group-test.e2e.js +32 -26
  208. package/dist/collection/components/q2-radio-group/test/q2-radio-group-test.e2e.js.map +1 -1
  209. package/dist/collection/components/q2-relative-time/q2-relative-time.js +1 -1
  210. package/dist/collection/components/q2-relative-time/test/q2-relative-time-test.e2e.js +12 -7
  211. package/dist/collection/components/q2-relative-time/test/q2-relative-time-test.e2e.js.map +1 -1
  212. package/dist/collection/components/q2-resize-observer/q2-resize-observer.css +71 -0
  213. package/dist/collection/components/q2-resize-observer/q2-resize-observer.js +166 -0
  214. package/dist/collection/components/q2-resize-observer/q2-resize-observer.js.map +1 -0
  215. package/dist/collection/components/q2-resize-observer/test/q2-resize-observer.e2e.js +83 -0
  216. package/dist/collection/components/q2-resize-observer/test/q2-resize-observer.e2e.js.map +1 -0
  217. package/dist/collection/components/q2-resize-observer/test/q2-resize-observer.spec.js +66 -0
  218. package/dist/collection/components/q2-resize-observer/test/q2-resize-observer.spec.js.map +1 -0
  219. package/dist/collection/components/q2-section/q2-section.js +78 -2
  220. package/dist/collection/components/q2-section/q2-section.js.map +1 -1
  221. package/dist/collection/components/q2-section/test/q2-section-test.e2e.js +39 -9
  222. package/dist/collection/components/q2-section/test/q2-section-test.e2e.js.map +1 -1
  223. package/dist/collection/components/q2-select/q2-select.js +23 -5
  224. package/dist/collection/components/q2-select/q2-select.js.map +1 -1
  225. package/dist/collection/components/q2-select/test/q2-select-test.e2e.js +695 -676
  226. package/dist/collection/components/q2-select/test/q2-select-test.e2e.js.map +1 -1
  227. package/dist/collection/components/q2-stepper/q2-stepper.js +76 -2
  228. package/dist/collection/components/q2-stepper/q2-stepper.js.map +1 -1
  229. package/dist/collection/components/q2-stepper/test/q2-stepper-test.e2e.js +183 -87
  230. package/dist/collection/components/q2-stepper/test/q2-stepper-test.e2e.js.map +1 -1
  231. package/dist/collection/components/q2-stepper-pane/q2-stepper-pane.js +2 -2
  232. package/dist/collection/components/q2-stepper-pane/test/q2-stepper-pane-test.e2e.js +20 -9
  233. package/dist/collection/components/q2-stepper-pane/test/q2-stepper-pane-test.e2e.js.map +1 -1
  234. package/dist/collection/components/q2-stepper-vertical/q2-stepper-vertical.js +1 -1
  235. package/dist/collection/components/q2-stepper-vertical/test/q2-stepper-vertical-test.e2e.js +71 -67
  236. package/dist/collection/components/q2-stepper-vertical/test/q2-stepper-vertical-test.e2e.js.map +1 -1
  237. package/dist/collection/components/q2-tab-container/q2-tab-container.js +50 -7
  238. package/dist/collection/components/q2-tab-container/q2-tab-container.js.map +1 -1
  239. package/dist/collection/components/q2-tab-container/test/q2-tab-container-test.e2e.js +89 -65
  240. package/dist/collection/components/q2-tab-container/test/q2-tab-container-test.e2e.js.map +1 -1
  241. package/dist/collection/components/q2-tab-pane/q2-tab-pane.js +1 -1
  242. package/dist/collection/components/q2-tab-pane/test/q2-tab-pane-test.e2e.js +14 -9
  243. package/dist/collection/components/q2-tab-pane/test/q2-tab-pane-test.e2e.js.map +1 -1
  244. package/dist/collection/components/q2-tag/q2-tag.js +19 -1
  245. package/dist/collection/components/q2-tag/q2-tag.js.map +1 -1
  246. package/dist/collection/components/q2-tag/test/q2-tag-test.e2e.js +47 -28
  247. package/dist/collection/components/q2-tag/test/q2-tag-test.e2e.js.map +1 -1
  248. package/dist/collection/components/q2-textarea/q2-textarea.js +51 -13
  249. package/dist/collection/components/q2-textarea/q2-textarea.js.map +1 -1
  250. package/dist/collection/components/q2-textarea/test/q2-textarea-test.e2e.js +31 -10
  251. package/dist/collection/components/q2-textarea/test/q2-textarea-test.e2e.js.map +1 -1
  252. package/dist/collection/components/q2-tooltip/q2-tooltip.css +5 -2
  253. package/dist/collection/components/q2-tooltip/test/q2-tooltip-test.e2e.js +51 -13
  254. package/dist/collection/components/q2-tooltip/test/q2-tooltip-test.e2e.js.map +1 -1
  255. package/dist/collection/components/tecton-tab-pane/tecton-tab-pane.js +2 -2
  256. package/dist/collection/components/tecton-tab-pane/test/tecton-tab-pane-test.e2e.js +18 -13
  257. package/dist/collection/components/tecton-tab-pane/test/tecton-tab-pane-test.e2e.js.map +1 -1
  258. package/dist/collection/utils/helpers.js +65 -0
  259. package/dist/collection/utils/helpers.js.map +1 -1
  260. package/dist/collection/utils/index.js +11 -11
  261. package/dist/collection/utils/index.js.map +1 -1
  262. package/dist/collection/utils/sanitize-html-string.js +10 -0
  263. package/dist/collection/utils/sanitize-html-string.js.map +1 -0
  264. package/dist/collection/utils/sanitize-regex-string.js +4 -0
  265. package/dist/collection/utils/sanitize-regex-string.js.map +1 -0
  266. package/dist/components/index.js +8 -0
  267. package/dist/components/index.js.map +1 -1
  268. package/dist/components/index2.js +11 -1356
  269. package/dist/components/index2.js.map +1 -1
  270. package/dist/components/q2-action-group.d.ts +11 -0
  271. package/dist/components/q2-action-group.js +75 -0
  272. package/dist/components/q2-action-group.js.map +1 -0
  273. package/dist/components/q2-action-sheet.js +1363 -2
  274. package/dist/components/q2-action-sheet.js.map +1 -1
  275. package/dist/components/q2-avatar2.js +1 -1
  276. package/dist/components/q2-btn2.js +1 -1
  277. package/dist/components/q2-carousel-pane.js +2 -2
  278. package/dist/components/q2-chart-area.js +1 -1
  279. package/dist/components/q2-chart-area.js.map +1 -1
  280. package/dist/components/q2-chart-bar.js +1 -1
  281. package/dist/components/q2-chart-bar.js.map +1 -1
  282. package/dist/components/q2-chart-donut.js +15 -15
  283. package/dist/components/q2-chart-donut.js.map +1 -1
  284. package/dist/components/q2-checkbox-group.js +2 -2
  285. package/dist/components/q2-checkbox-group.js.map +1 -1
  286. package/dist/components/q2-currency.js +1 -1
  287. package/dist/components/q2-data-table.js +64 -64
  288. package/dist/components/q2-data-table.js.map +1 -1
  289. package/dist/components/q2-detail.js +1 -1
  290. package/dist/components/q2-dropdown-item2.js +1 -1
  291. package/dist/components/q2-dropdown-item2.js.map +1 -1
  292. package/dist/components/q2-dropdown.js +84 -7
  293. package/dist/components/q2-dropdown.js.map +1 -1
  294. package/dist/components/q2-formatted-text.d.ts +11 -0
  295. package/dist/components/q2-formatted-text.js +101 -0
  296. package/dist/components/q2-formatted-text.js.map +1 -0
  297. package/dist/components/q2-input2.js +4 -5
  298. package/dist/components/q2-input2.js.map +1 -1
  299. package/dist/components/q2-item.js +1 -1
  300. package/dist/components/q2-legend2.js +2 -2
  301. package/dist/components/q2-legend2.js.map +1 -1
  302. package/dist/components/q2-link.d.ts +11 -0
  303. package/dist/components/q2-link.js +93 -0
  304. package/dist/components/q2-link.js.map +1 -0
  305. package/dist/components/q2-list.js +1 -1
  306. package/dist/components/q2-loc.js +1 -1
  307. package/dist/components/q2-message2.js +1 -1
  308. package/dist/components/q2-month-picker.js +2 -2
  309. package/dist/components/q2-optgroup2.js +1 -1
  310. package/dist/components/q2-option-list2.js +8 -3
  311. package/dist/components/q2-option-list2.js.map +1 -1
  312. package/dist/components/q2-option2.js +1 -1
  313. package/dist/components/q2-pagination.js +97 -10
  314. package/dist/components/q2-pagination.js.map +1 -1
  315. package/dist/components/q2-pill.js +29 -5
  316. package/dist/components/q2-pill.js.map +1 -1
  317. package/dist/components/q2-popover2.js +22 -12
  318. package/dist/components/q2-popover2.js.map +1 -1
  319. package/dist/components/q2-radio-group.js +2 -2
  320. package/dist/components/q2-radio-group.js.map +1 -1
  321. package/dist/components/q2-relative-time.js +1 -1
  322. package/dist/components/q2-resize-observer.d.ts +11 -0
  323. package/dist/components/q2-resize-observer.js +8 -0
  324. package/dist/components/q2-resize-observer.js.map +1 -0
  325. package/dist/components/q2-resize-observer2.js +112 -0
  326. package/dist/components/q2-resize-observer2.js.map +1 -0
  327. package/dist/components/q2-section.js +30 -4
  328. package/dist/components/q2-section.js.map +1 -1
  329. package/dist/components/q2-select2.js +7 -5
  330. package/dist/components/q2-select2.js.map +1 -1
  331. package/dist/components/q2-stepper-vertical.js +1 -1
  332. package/dist/components/q2-stepper.js +40 -3
  333. package/dist/components/q2-stepper.js.map +1 -1
  334. package/dist/components/q2-tab-container.js +20 -8
  335. package/dist/components/q2-tab-container.js.map +1 -1
  336. package/dist/components/q2-tab-pane.js +1 -1
  337. package/dist/components/q2-tag.js +3 -1
  338. package/dist/components/q2-tag.js.map +1 -1
  339. package/dist/components/q2-textarea.js +49 -12
  340. package/dist/components/q2-textarea.js.map +1 -1
  341. package/dist/components/q2-tooltip.js +1 -1
  342. package/dist/components/q2-tooltip.js.map +1 -1
  343. package/dist/components/tecton-tab-pane.js +2 -2
  344. package/dist/esm/click-elsewhere_2.entry.js +21 -12
  345. package/dist/esm/click-elsewhere_2.entry.js.map +1 -1
  346. package/dist/esm/{index-c6d74f10.js → index-3184c760.js} +1 -1
  347. package/dist/esm/{index-c6d74f10.js.map → index-3184c760.js.map} +1 -1
  348. package/dist/esm/index-844fc010.js +211 -0
  349. package/dist/esm/index-844fc010.js.map +1 -0
  350. package/dist/esm/loader.js +1 -1
  351. package/dist/esm/q2-action-group.entry.js +46 -0
  352. package/dist/esm/q2-action-group.entry.js.map +1 -0
  353. package/dist/esm/q2-action-sheet.entry.js +1363 -2
  354. package/dist/esm/q2-action-sheet.entry.js.map +1 -1
  355. package/dist/esm/q2-avatar.entry.js +1 -1
  356. package/dist/esm/q2-badge_7.entry.js +23 -13
  357. package/dist/esm/q2-badge_7.entry.js.map +1 -1
  358. package/dist/esm/q2-calendar.entry.js +2 -2
  359. package/dist/esm/q2-card.entry.js +1 -1
  360. package/dist/esm/q2-carousel-pane.entry.js +3 -3
  361. package/dist/esm/q2-carousel.entry.js +1 -1
  362. package/dist/esm/q2-chart-area.entry.js +2 -2
  363. package/dist/esm/q2-chart-area.entry.js.map +1 -1
  364. package/dist/esm/q2-chart-bar.entry.js +2 -2
  365. package/dist/esm/q2-chart-bar.entry.js.map +1 -1
  366. package/dist/esm/q2-chart-donut.entry.js +16 -16
  367. package/dist/esm/q2-chart-donut.entry.js.map +1 -1
  368. package/dist/esm/q2-checkbox-group.entry.js +2 -2
  369. package/dist/esm/q2-checkbox-group.entry.js.map +1 -1
  370. package/dist/esm/q2-checkbox.entry.js +1 -1
  371. package/dist/esm/q2-currency.entry.js +1 -1
  372. package/dist/esm/q2-data-table.entry.js +62 -62
  373. package/dist/esm/q2-data-table.entry.js.map +1 -1
  374. package/dist/esm/q2-detail.entry.js +2 -2
  375. package/dist/esm/q2-dropdown-item.entry.js +2 -2
  376. package/dist/esm/q2-dropdown-item.entry.js.map +1 -1
  377. package/dist/esm/q2-dropdown.entry.js +79 -7
  378. package/dist/esm/q2-dropdown.entry.js.map +1 -1
  379. package/dist/esm/q2-editable-field.entry.js +1 -1
  380. package/dist/esm/q2-formatted-text.entry.js +68 -0
  381. package/dist/esm/q2-formatted-text.entry.js.map +1 -0
  382. package/dist/esm/q2-item.entry.js +2 -2
  383. package/dist/esm/q2-legend.entry.js +2 -2
  384. package/dist/esm/q2-legend.entry.js.map +1 -1
  385. package/dist/esm/q2-link.entry.js +60 -0
  386. package/dist/esm/q2-link.entry.js.map +1 -0
  387. package/dist/esm/q2-list.entry.js +2 -2
  388. package/dist/esm/q2-loc.entry.js +2 -2
  389. package/dist/esm/q2-message.entry.js +2 -2
  390. package/dist/esm/q2-month-picker.entry.js +3 -3
  391. package/dist/esm/q2-optgroup.entry.js +2 -2
  392. package/dist/esm/q2-option-list.entry.js +9 -4
  393. package/dist/esm/q2-option-list.entry.js.map +1 -1
  394. package/dist/esm/q2-option.entry.js +1 -1
  395. package/dist/esm/q2-pagination.entry.js +90 -9
  396. package/dist/esm/q2-pagination.entry.js.map +1 -1
  397. package/dist/esm/q2-pill.entry.js +26 -5
  398. package/dist/esm/q2-pill.entry.js.map +1 -1
  399. package/dist/esm/q2-radio-group.entry.js +2 -2
  400. package/dist/esm/q2-radio-group.entry.js.map +1 -1
  401. package/dist/esm/q2-radio.entry.js +1 -1
  402. package/dist/esm/q2-relative-time.entry.js +3 -3
  403. package/dist/esm/q2-resize-observer.entry.js +92 -0
  404. package/dist/esm/q2-resize-observer.entry.js.map +1 -0
  405. package/dist/esm/q2-section.entry.js +27 -3
  406. package/dist/esm/q2-section.entry.js.map +1 -1
  407. package/dist/esm/q2-select.entry.js +7 -6
  408. package/dist/esm/q2-select.entry.js.map +1 -1
  409. package/dist/esm/q2-stepper-pane.entry.js +1 -1
  410. package/dist/esm/q2-stepper-vertical.entry.js +2 -2
  411. package/dist/esm/q2-stepper.entry.js +39 -3
  412. package/dist/esm/q2-stepper.entry.js.map +1 -1
  413. package/dist/esm/q2-tag.entry.js +3 -2
  414. package/dist/esm/q2-tag.entry.js.map +1 -1
  415. package/dist/esm/q2-tecton-elements.js +1 -1
  416. package/dist/esm/q2-textarea.entry.js +47 -12
  417. package/dist/esm/q2-textarea.entry.js.map +1 -1
  418. package/dist/esm/q2-tooltip.entry.js +2 -2
  419. package/dist/esm/q2-tooltip.entry.js.map +1 -1
  420. package/dist/esm/tecton-tab-pane.entry.js +2 -2
  421. package/dist/q2-tecton-elements/{p-0a3a804a.entry.js → p-06701928.entry.js} +2 -2
  422. package/dist/q2-tecton-elements/{p-0a3a804a.entry.js.map → p-06701928.entry.js.map} +1 -1
  423. package/dist/q2-tecton-elements/{p-5d936af5.entry.js → p-07d1c3ae.entry.js} +2 -2
  424. package/dist/q2-tecton-elements/p-1305f7ca.entry.js +2 -0
  425. package/dist/q2-tecton-elements/p-1305f7ca.entry.js.map +1 -0
  426. package/dist/q2-tecton-elements/p-15ac45d6.js +2 -0
  427. package/dist/q2-tecton-elements/p-15ac45d6.js.map +1 -0
  428. package/dist/q2-tecton-elements/{p-ce4e6b41.entry.js → p-16910682.entry.js} +2 -2
  429. package/dist/q2-tecton-elements/p-16910682.entry.js.map +1 -0
  430. package/dist/q2-tecton-elements/p-188eb162.entry.js +3 -0
  431. package/dist/q2-tecton-elements/p-188eb162.entry.js.map +1 -0
  432. package/dist/q2-tecton-elements/{p-58cafc0d.entry.js → p-1c760a89.entry.js} +2 -2
  433. package/dist/q2-tecton-elements/{p-074ae80c.entry.js → p-1c88d057.entry.js} +2 -2
  434. package/dist/q2-tecton-elements/{p-3b0d3cd4.entry.js → p-20a3d6ed.entry.js} +2 -2
  435. package/dist/q2-tecton-elements/p-20a3d6ed.entry.js.map +1 -0
  436. package/dist/q2-tecton-elements/{p-77a0cc0c.entry.js → p-2733583e.entry.js} +2 -2
  437. package/dist/q2-tecton-elements/{p-4116579f.entry.js → p-3e428290.entry.js} +2 -2
  438. package/dist/q2-tecton-elements/p-3e428290.entry.js.map +1 -0
  439. package/dist/q2-tecton-elements/{p-072c5877.entry.js → p-4774e5b3.entry.js} +2 -2
  440. package/dist/q2-tecton-elements/{p-77272c4c.entry.js → p-490ef8e5.entry.js} +2 -2
  441. package/dist/q2-tecton-elements/{p-0a1dff75.entry.js → p-4e10550d.entry.js} +2 -2
  442. package/dist/q2-tecton-elements/p-4e10550d.entry.js.map +1 -0
  443. package/dist/q2-tecton-elements/{p-2ca6d44f.entry.js → p-50f7328f.entry.js} +2 -2
  444. package/dist/q2-tecton-elements/p-5637c486.entry.js +2 -0
  445. package/dist/q2-tecton-elements/p-5637c486.entry.js.map +1 -0
  446. package/dist/q2-tecton-elements/p-56df21b0.entry.js +2 -0
  447. package/dist/q2-tecton-elements/p-56df21b0.entry.js.map +1 -0
  448. package/dist/q2-tecton-elements/{p-34856c71.entry.js → p-5a834214.entry.js} +2 -2
  449. package/dist/q2-tecton-elements/{p-34856c71.entry.js.map → p-5a834214.entry.js.map} +1 -1
  450. package/dist/q2-tecton-elements/p-5f99a4a8.entry.js +2 -0
  451. package/dist/q2-tecton-elements/p-5f99a4a8.entry.js.map +1 -0
  452. package/dist/q2-tecton-elements/p-72d948b4.entry.js +2 -0
  453. package/dist/q2-tecton-elements/p-72d948b4.entry.js.map +1 -0
  454. package/dist/q2-tecton-elements/{p-3c7be0bb.entry.js → p-7903cd15.entry.js} +2 -2
  455. package/dist/q2-tecton-elements/p-7903cd15.entry.js.map +1 -0
  456. package/dist/q2-tecton-elements/{p-d2e1631a.entry.js → p-7906f49e.entry.js} +2 -2
  457. package/dist/q2-tecton-elements/{p-d2e1631a.entry.js.map → p-7906f49e.entry.js.map} +1 -1
  458. package/dist/q2-tecton-elements/{p-2fcaf2d6.entry.js → p-7aef0c08.entry.js} +2 -2
  459. package/dist/q2-tecton-elements/{p-8a4b106d.entry.js → p-7c9a0122.entry.js} +2 -2
  460. package/dist/q2-tecton-elements/p-7c9f8b62.entry.js +2 -0
  461. package/dist/q2-tecton-elements/p-7c9f8b62.entry.js.map +1 -0
  462. package/dist/q2-tecton-elements/{p-cf32b5db.entry.js → p-81fbe718.entry.js} +2 -2
  463. package/dist/q2-tecton-elements/p-81fbe718.entry.js.map +1 -0
  464. package/dist/q2-tecton-elements/{p-6237c775.entry.js → p-896c7008.entry.js} +2 -2
  465. package/dist/q2-tecton-elements/{p-395904b4.entry.js → p-8d07cf91.entry.js} +2 -2
  466. package/dist/q2-tecton-elements/{p-fffb54e9.entry.js → p-8d2b02e1.entry.js} +2 -2
  467. package/dist/q2-tecton-elements/{p-6e6d9793.entry.js → p-95a7c042.entry.js} +2 -2
  468. package/dist/q2-tecton-elements/{p-45407ecc.entry.js → p-96b1406c.entry.js} +2 -2
  469. package/dist/q2-tecton-elements/{p-cb3f48de.entry.js → p-a47597dd.entry.js} +2 -2
  470. package/dist/q2-tecton-elements/p-a47597dd.entry.js.map +1 -0
  471. package/dist/q2-tecton-elements/p-a5d0e252.entry.js +2 -0
  472. package/dist/q2-tecton-elements/p-a5d0e252.entry.js.map +1 -0
  473. package/dist/q2-tecton-elements/{p-2c26295e.entry.js → p-ac6aa392.entry.js} +2 -2
  474. package/dist/q2-tecton-elements/{p-376a0589.entry.js → p-ad057d10.entry.js} +2 -2
  475. package/dist/q2-tecton-elements/{p-ad998f71.entry.js → p-b0e5e9dc.entry.js} +2 -2
  476. package/dist/q2-tecton-elements/p-b0e5e9dc.entry.js.map +1 -0
  477. package/dist/q2-tecton-elements/{p-34696e3f.entry.js → p-b1784be3.entry.js} +2 -2
  478. package/dist/q2-tecton-elements/{p-259b728a.entry.js → p-b7de110e.entry.js} +2 -2
  479. package/dist/q2-tecton-elements/{p-8111547c.entry.js → p-c235ab3f.entry.js} +2 -2
  480. package/dist/q2-tecton-elements/p-c5667d5d.entry.js +2 -0
  481. package/dist/q2-tecton-elements/p-c5667d5d.entry.js.map +1 -0
  482. package/dist/q2-tecton-elements/{p-c81d299a.entry.js → p-e216ef3f.entry.js} +2 -2
  483. package/dist/q2-tecton-elements/p-e2c800ef.entry.js +2 -0
  484. package/dist/q2-tecton-elements/p-e2c800ef.entry.js.map +1 -0
  485. package/dist/q2-tecton-elements/p-f135b265.entry.js +2 -0
  486. package/dist/q2-tecton-elements/p-f135b265.entry.js.map +1 -0
  487. package/dist/q2-tecton-elements/{p-721365be.js → p-f1e887f5.js} +1 -1
  488. package/dist/q2-tecton-elements/{p-6b7c53a8.entry.js → p-f5f23659.entry.js} +2 -2
  489. package/dist/q2-tecton-elements/p-f7867f21.entry.js +2 -0
  490. package/dist/q2-tecton-elements/p-f7867f21.entry.js.map +1 -0
  491. package/dist/q2-tecton-elements/p-ff8f1a32.entry.js +2 -0
  492. package/dist/q2-tecton-elements/p-ff8f1a32.entry.js.map +1 -0
  493. package/dist/q2-tecton-elements/p-fff01dc1.entry.js +2 -0
  494. package/dist/q2-tecton-elements/p-fff01dc1.entry.js.map +1 -0
  495. package/dist/q2-tecton-elements/q2-tecton-elements.esm.js +1 -1
  496. package/dist/q2-tecton-elements/q2-tecton-elements.esm.js.map +1 -1
  497. package/dist/types/components/q2-action-group/q2-action-group.d.ts +30 -0
  498. package/dist/types/components/q2-chart-area/q2-chart-area.d.ts +1 -1
  499. package/dist/types/components/q2-chart-bar/q2-chart-bar.d.ts +1 -1
  500. package/dist/types/components/q2-chart-donut/q2-chart-donut.d.ts +2 -0
  501. package/dist/types/components/q2-data-table/q2-data-table.d.ts +15 -13
  502. package/dist/types/components/q2-dropdown/q2-dropdown.d.ts +41 -2
  503. package/dist/types/components/q2-formatted-text/q2-formatted-text.d.ts +34 -0
  504. package/dist/types/components/q2-input/q2-input.d.ts +10 -9
  505. package/dist/types/components/q2-legend/q2-legend.d.ts +1 -0
  506. package/dist/types/components/q2-link/q2-link.d.ts +36 -0
  507. package/dist/types/components/q2-pagination/q2-pagination.d.ts +60 -3
  508. package/dist/types/components/q2-pill/q2-pill.d.ts +11 -0
  509. package/dist/types/components/q2-popover/q2-popover.d.ts +7 -1
  510. package/dist/types/components/q2-resize-observer/q2-resize-observer.d.ts +28 -0
  511. package/dist/types/components/q2-section/q2-section.d.ts +12 -0
  512. package/dist/types/components/q2-select/q2-select.d.ts +5 -0
  513. package/dist/types/components/q2-stepper/q2-stepper.d.ts +10 -1
  514. package/dist/types/components/q2-tab-container/q2-tab-container.d.ts +8 -2
  515. package/dist/types/components/q2-tag/q2-tag.d.ts +5 -0
  516. package/dist/types/components/q2-textarea/q2-textarea.d.ts +8 -3
  517. package/dist/types/components.d.ts +396 -18
  518. package/dist/types/utils/helpers.d.ts +28 -0
  519. package/dist/types/utils/index.d.ts +3 -3
  520. package/dist/types/utils/sanitize-html-string.d.ts +1 -0
  521. package/dist/types/utils/sanitize-regex-string.d.ts +1 -0
  522. package/package.json +4 -4
  523. package/dist/cjs/index-64d8b839.js +0 -1580
  524. package/dist/cjs/index-64d8b839.js.map +0 -1
  525. package/dist/esm/index-4a80972c.js +0 -1556
  526. package/dist/esm/index-4a80972c.js.map +0 -1
  527. package/dist/q2-tecton-elements/p-0a1dff75.entry.js.map +0 -1
  528. package/dist/q2-tecton-elements/p-3b0d3cd4.entry.js.map +0 -1
  529. package/dist/q2-tecton-elements/p-3c7be0bb.entry.js.map +0 -1
  530. package/dist/q2-tecton-elements/p-403bf3d4.entry.js +0 -2
  531. package/dist/q2-tecton-elements/p-403bf3d4.entry.js.map +0 -1
  532. package/dist/q2-tecton-elements/p-4116579f.entry.js.map +0 -1
  533. package/dist/q2-tecton-elements/p-661ed976.entry.js +0 -2
  534. package/dist/q2-tecton-elements/p-661ed976.entry.js.map +0 -1
  535. package/dist/q2-tecton-elements/p-9a1a4bc0.js +0 -3
  536. package/dist/q2-tecton-elements/p-9a1a4bc0.js.map +0 -1
  537. package/dist/q2-tecton-elements/p-a7a0b8aa.entry.js +0 -2
  538. package/dist/q2-tecton-elements/p-a7a0b8aa.entry.js.map +0 -1
  539. package/dist/q2-tecton-elements/p-aa57b657.entry.js +0 -2
  540. package/dist/q2-tecton-elements/p-aa57b657.entry.js.map +0 -1
  541. package/dist/q2-tecton-elements/p-ad998f71.entry.js.map +0 -1
  542. package/dist/q2-tecton-elements/p-adec9275.entry.js +0 -2
  543. package/dist/q2-tecton-elements/p-adec9275.entry.js.map +0 -1
  544. package/dist/q2-tecton-elements/p-adf0a7c9.entry.js +0 -2
  545. package/dist/q2-tecton-elements/p-adf0a7c9.entry.js.map +0 -1
  546. package/dist/q2-tecton-elements/p-b72fd065.entry.js +0 -2
  547. package/dist/q2-tecton-elements/p-b72fd065.entry.js.map +0 -1
  548. package/dist/q2-tecton-elements/p-c0c658d1.entry.js +0 -2
  549. package/dist/q2-tecton-elements/p-c0c658d1.entry.js.map +0 -1
  550. package/dist/q2-tecton-elements/p-cb3f48de.entry.js.map +0 -1
  551. package/dist/q2-tecton-elements/p-ce4e6b41.entry.js.map +0 -1
  552. package/dist/q2-tecton-elements/p-cf32b5db.entry.js.map +0 -1
  553. package/dist/q2-tecton-elements/p-cf966a0f.entry.js +0 -2
  554. package/dist/q2-tecton-elements/p-cf966a0f.entry.js.map +0 -1
  555. package/dist/q2-tecton-elements/p-dc77bf66.entry.js +0 -2
  556. package/dist/q2-tecton-elements/p-dc77bf66.entry.js.map +0 -1
  557. /package/dist/q2-tecton-elements/{p-5d936af5.entry.js.map → p-07d1c3ae.entry.js.map} +0 -0
  558. /package/dist/q2-tecton-elements/{p-58cafc0d.entry.js.map → p-1c760a89.entry.js.map} +0 -0
  559. /package/dist/q2-tecton-elements/{p-074ae80c.entry.js.map → p-1c88d057.entry.js.map} +0 -0
  560. /package/dist/q2-tecton-elements/{p-77a0cc0c.entry.js.map → p-2733583e.entry.js.map} +0 -0
  561. /package/dist/q2-tecton-elements/{p-072c5877.entry.js.map → p-4774e5b3.entry.js.map} +0 -0
  562. /package/dist/q2-tecton-elements/{p-77272c4c.entry.js.map → p-490ef8e5.entry.js.map} +0 -0
  563. /package/dist/q2-tecton-elements/{p-2ca6d44f.entry.js.map → p-50f7328f.entry.js.map} +0 -0
  564. /package/dist/q2-tecton-elements/{p-2fcaf2d6.entry.js.map → p-7aef0c08.entry.js.map} +0 -0
  565. /package/dist/q2-tecton-elements/{p-8a4b106d.entry.js.map → p-7c9a0122.entry.js.map} +0 -0
  566. /package/dist/q2-tecton-elements/{p-6237c775.entry.js.map → p-896c7008.entry.js.map} +0 -0
  567. /package/dist/q2-tecton-elements/{p-395904b4.entry.js.map → p-8d07cf91.entry.js.map} +0 -0
  568. /package/dist/q2-tecton-elements/{p-fffb54e9.entry.js.map → p-8d2b02e1.entry.js.map} +0 -0
  569. /package/dist/q2-tecton-elements/{p-6e6d9793.entry.js.map → p-95a7c042.entry.js.map} +0 -0
  570. /package/dist/q2-tecton-elements/{p-45407ecc.entry.js.map → p-96b1406c.entry.js.map} +0 -0
  571. /package/dist/q2-tecton-elements/{p-2c26295e.entry.js.map → p-ac6aa392.entry.js.map} +0 -0
  572. /package/dist/q2-tecton-elements/{p-376a0589.entry.js.map → p-ad057d10.entry.js.map} +0 -0
  573. /package/dist/q2-tecton-elements/{p-34696e3f.entry.js.map → p-b1784be3.entry.js.map} +0 -0
  574. /package/dist/q2-tecton-elements/{p-259b728a.entry.js.map → p-b7de110e.entry.js.map} +0 -0
  575. /package/dist/q2-tecton-elements/{p-8111547c.entry.js.map → p-c235ab3f.entry.js.map} +0 -0
  576. /package/dist/q2-tecton-elements/{p-c81d299a.entry.js.map → p-e216ef3f.entry.js.map} +0 -0
  577. /package/dist/q2-tecton-elements/{p-721365be.js.map → p-f1e887f5.js.map} +0 -0
  578. /package/dist/q2-tecton-elements/{p-6b7c53a8.entry.js.map → p-f5f23659.entry.js.map} +0 -0
@@ -24,20 +24,6 @@ describe('q2-select', () => {
24
24
  const getFocusedValue = async (page) => {
25
25
  return page.$eval('body', () => document.activeElement.getAttribute('value'));
26
26
  };
27
- describe('[A11y] guideline compliance', () => {
28
- it('Does not have accessibility violations with only label', async () => {
29
- const page = await setup({
30
- html: `
31
- <q2-select label="Test" value="option-1">
32
- <q2-option value="option-1" display="Option Text">Option Text</q2-option>
33
- <q2-option value="option-2" display="Option Text">Option Text</q2-option>
34
- </q2-select>
35
- `,
36
- });
37
- const hasViolations = await evaluateA11y(page);
38
- expect(hasViolations).toBe(false);
39
- });
40
- });
41
27
  it('properly compiles CSS vars and functions', async () => {
42
28
  const page = await setup({ html: '<q2-select></q2-select>' });
43
29
  expect(await getListOfStyleCompilationIssues(page, 'q2-select')).toHaveLength(0);
@@ -1603,6 +1589,21 @@ describe('q2-select', () => {
1603
1589
  expect(await popover.getProperty('mode')).toEqual('legacy');
1604
1590
  });
1605
1591
  });
1592
+ describe('popoverMaxHeight', () => {
1593
+ it('when provided, passes the value to q2-popover', async () => {
1594
+ page = await setup({
1595
+ html: `
1596
+ <q2-select popover-max-height="600">
1597
+ <q2-option value="option-1" display="Option 1 Text">Option 1 Text</q2-option>
1598
+ <q2-option value="option-2" display="Option 2 Text">Option 2 Text</q2-option>
1599
+ <q2-option value="option-3" display="Option 3 Text">Option 3 Text</q2-option>
1600
+ </q2-select>
1601
+ `,
1602
+ });
1603
+ popover = await page.find('q2-select >>> q2-popover');
1604
+ expect(await popover.getProperty('maxHeight')).toEqual(600);
1605
+ });
1606
+ });
1606
1607
  });
1607
1608
  describe('robust content', () => {
1608
1609
  beforeEach(async () => {
@@ -1837,278 +1838,366 @@ describe('q2-select', () => {
1837
1838
  });
1838
1839
  });
1839
1840
  });
1840
- describe('Keyboard', () => {
1841
- let options;
1842
- const isInputFocused = async (page) => {
1843
- return page.$eval('body', () => document.activeElement.shadowRoot.activeElement.tagName === 'Q2-INPUT');
1844
- };
1845
- const isBodyFocused = async (page) => {
1846
- return page.$eval('body', () => document.activeElement.tagName === 'BODY');
1847
- };
1848
- beforeEach(async () => {
1849
- jest.setTimeout(5000);
1850
- page = await setup({
1851
- html: `
1852
- <q2-select>
1853
- <q2-option value="1" display="Option 1">Option 1</q2-option>
1854
- <q2-option value="2" display="Option 2">Option 2</q2-option>
1855
- <q2-option value="3" display="Option 3">Option 3</q2-option>
1856
- <q2-option value="4" display="Option 4">Option 4</q2-option>
1857
- <q2-option value="5" display="Option 5">Option 5</q2-option>
1858
- <q2-option value="6" display="Option 6">Option 6</q2-option>
1859
- <q2-option value="7" display="Option 7">Option 7</q2-option>
1860
- <q2-option value="8" display="Option 8">Option 8</q2-option>
1861
- <q2-option value="9" display="Option 9">Option 9</q2-option>
1862
- <q2-option value="10" display="Option 10">Option 10</q2-option>
1863
- <q2-option value="11" display="Option 11">Option 11</q2-option>
1864
- <q2-option value="12" display="Option 12">Option 12</q2-option>
1865
- <q2-option value="13" display="Option 13">Option 13</q2-option>
1866
- <q2-option value="14" display="Option 14">Option 14</q2-option>
1867
- <q2-option value="15" display="Option 15">Option 15</q2-option>
1868
- </q2-select>`,
1869
- });
1870
- await page.waitForChanges();
1871
- select = await page.find('q2-select');
1872
- input = await page.find('q2-select >>> q2-input');
1873
- popover = await page.find('q2-select >>> q2-popover');
1874
- options = await page.findAll('q2-option');
1875
- });
1876
- describe('when input has focus', () => {
1877
- beforeEach(async () => {
1878
- await input.focus();
1841
+ describe('Updating option list', () => {
1842
+ describe('when multiple is false', () => {
1843
+ it('does not modify the value when the selected option is removed', async () => {
1844
+ page = await setup({
1845
+ html: `
1846
+ <q2-select label="States" value="AK">
1847
+ <q2-option value="AL" display="Alabama">Alabama</q2-option>
1848
+ <q2-option value="AZ" display="Arizona">Arizona</q2-option>
1849
+ <q2-option value="AR" display="Arkansas">Arkansas</q2-option>
1850
+ <q2-option value="AK" display="Alaska" selected>Alaska</q2-option>
1851
+ </q2-select>
1852
+ `,
1853
+ });
1854
+ select = await page.find('q2-select');
1855
+ input = await page.find('q2-select >>> q2-input');
1856
+ const alaskaSelector = 'q2-option[value="AK"]';
1857
+ let option = await page.find(alaskaSelector);
1858
+ expect(option).toHaveAttribute('selected');
1859
+ expect(await select.getProperty('value')).toEqual('AK');
1860
+ expect(await input.getProperty('value')).toEqual('Alaska');
1861
+ await page.$eval(alaskaSelector, element => element.remove());
1862
+ await page.waitForChanges();
1863
+ option = await page.find(alaskaSelector);
1864
+ expect(option).toBeNull();
1865
+ expect(await select.getProperty('value')).toEqual('AK');
1866
+ expect(await input.getProperty('value')).toEqual('Alaska');
1879
1867
  });
1880
- it('opens the dropdown, and moves focus to default option on ArrowDown', async () => {
1881
- expect(await popover.getProperty('open')).toBe(false);
1882
- await input.press('ArrowDown');
1883
- expect(await popover.getProperty('open')).toBe(true);
1884
- const firstOption = options[0];
1885
- expect(firstOption).toHaveAttribute('active');
1886
- expect(await getFocusedOptionValue(page)).toEqual(firstOption.getAttribute('value'));
1868
+ it('marks a newly added option as selected if it matches the value', async () => {
1869
+ page = await setup({
1870
+ html: `
1871
+ <q2-select label="States" value="CA">
1872
+ <q2-option value="AL" display="Alabama">Alabama</q2-option>
1873
+ <q2-option value="AZ" display="Arizona">Arizona</q2-option>
1874
+ <q2-option value="AR" display="Arkansas">Arkansas</q2-option>
1875
+ <q2-option value="AK" display="Alaska" selected>Alaska</q2-option>
1876
+ </q2-select>
1877
+ `,
1878
+ });
1879
+ await page.waitForChanges();
1880
+ select = await page.find('q2-select');
1881
+ input = await page.find('q2-select >>> q2-input');
1882
+ await page.waitForChanges();
1883
+ expect(await select.getProperty('value')).toEqual('CA');
1884
+ expect(await input.getProperty('value')).toEqual('CA');
1885
+ await page.evaluate(() => {
1886
+ const option = document.createElement('q2-option');
1887
+ option.value = 'CA';
1888
+ option.display = 'California';
1889
+ option.textContent = 'California';
1890
+ return document.querySelector('q2-select').appendChild(option);
1891
+ });
1892
+ await page.waitForChanges();
1893
+ const californiaSelector = 'q2-option[value="CA"]';
1894
+ const option = await page.find(californiaSelector);
1895
+ expect(option).toHaveAttribute('selected');
1896
+ expect(await select.getProperty('value')).toEqual('CA');
1897
+ expect(await input.getProperty('value')).toEqual('CA');
1887
1898
  });
1888
- it('opens the dropdown, and moves focus to last option on ArrowUp', async () => {
1889
- expect(await popover.getProperty('open')).toBe(false);
1890
- await input.press('ArrowUp');
1899
+ });
1900
+ describe('when multiple is true', () => {
1901
+ it('does not modify selectedOptions when a selected option is removed', async () => {
1902
+ page = await setup({
1903
+ html: `
1904
+ <q2-select label="States" multiple>
1905
+ <q2-option value="AL" display="Alabama">Alabama</q2-option>
1906
+ <q2-option value="AZ" display="Arizona">Arizona</q2-option>
1907
+ <q2-option value="AR" display="Arkansas">Arkansas</q2-option>
1908
+ <q2-option value="AK" display="Alaska">Alaska</q2-option>
1909
+ </q2-select>
1910
+ `,
1911
+ });
1912
+ select = await page.find('q2-select');
1913
+ input = await page.find('q2-select >>> q2-input');
1914
+ options = await page.findAll('q2-option');
1915
+ await select.setProperty('selectedOptions', ['AL', 'AZ']);
1891
1916
  await page.waitForChanges();
1892
- expect(await popover.getProperty('open')).toBe(true);
1893
- const lastOption = options[options.length - 1];
1894
- expect(lastOption).toHaveAttribute('active');
1895
- expect(await getFocusedOptionValue(page)).toEqual(lastOption.getAttribute('value'));
1917
+ let selectedOptions = await page.findAll('q2-option[selected]');
1918
+ expect(selectedOptions.length).toBe(2);
1919
+ expect(options.length).toBe(4);
1920
+ expect(await input.getProperty('value')).toEqual('Alabama');
1921
+ const alabamaSelector = 'q2-option[value="AL"]';
1922
+ await page.$eval(alabamaSelector, element => element.remove());
1923
+ await page.waitForChanges();
1924
+ const alabamaOption = await page.find(alabamaSelector);
1925
+ expect(alabamaOption).toBeNull();
1926
+ expect(await select.getProperty('selectedOptions')).toEqual(['AL', 'AZ']);
1927
+ expect(await input.getProperty('value')).toEqual('Alabama');
1928
+ options = await page.findAll('q2-option');
1929
+ expect(options.length).toBe(3);
1930
+ selectedOptions = await page.findAll('q2-option[selected]');
1931
+ expect(selectedOptions.length).toBe(1);
1896
1932
  });
1897
- it('opens the dropdown on Space', async () => {
1898
- expect(await popover.getProperty('open')).toBe(false);
1899
- await input.press('Space');
1933
+ it('marks a newly added option as selected if it matches a selectedOptions value', async () => {
1934
+ page = await setup({
1935
+ html: `
1936
+ <q2-select label="States" multiple>
1937
+ <q2-option value="AL" display="Alabama">Alabama</q2-option>
1938
+ <q2-option value="AZ" display="Arizona">Arizona</q2-option>
1939
+ <q2-option value="AR" display="Arkansas">Arkansas</q2-option>
1940
+ <q2-option value="AK" display="Alaska" selected>Alaska</q2-option>
1941
+ </q2-select>
1942
+ `,
1943
+ });
1944
+ select = await page.find('q2-select');
1945
+ input = await page.find('q2-select >>> q2-input');
1946
+ options = await page.findAll('q2-option');
1947
+ await select.setProperty('selectedOptions', ['AL', 'CA']);
1900
1948
  await page.waitForChanges();
1901
- expect(await popover.getProperty('open')).toBe(true);
1949
+ let selectedOptions = await page.findAll('q2-option[selected]');
1950
+ expect(selectedOptions.length).toBe(1);
1951
+ expect(options.length).toBe(4);
1952
+ expect(await input.getProperty('value')).toEqual('Alabama');
1953
+ await page.evaluate(() => {
1954
+ const option = document.createElement('q2-option');
1955
+ option.value = 'CA';
1956
+ option.display = 'California';
1957
+ option.textContent = 'California';
1958
+ return document.querySelector('q2-select').appendChild(option);
1959
+ });
1960
+ await page.waitForChanges();
1961
+ const californiaSelector = 'q2-option[value="CA"]';
1962
+ const option = await page.find(californiaSelector);
1963
+ expect(option).toHaveAttribute('selected');
1964
+ expect(await select.getProperty('selectedOptions')).toEqual(['AL', 'CA']);
1965
+ expect(await input.getProperty('value')).toEqual('Alabama');
1966
+ options = await page.findAll('q2-option');
1967
+ expect(options.length).toBe(5);
1968
+ selectedOptions = await page.findAll('q2-option[selected]');
1969
+ expect(selectedOptions.length).toBe(2);
1902
1970
  });
1903
- it('opens the dropdown, and focuses first option on Home', async () => {
1904
- expect(await popover.getProperty('open')).toBe(false);
1905
- await input.press('Home');
1906
- expect(await popover.getProperty('open')).toBe(true);
1907
- const firstOption = options[0];
1908
- expect(firstOption).toHaveAttribute('active');
1909
- expect(await getFocusedOptionValue(page)).toEqual(firstOption.getAttribute('value'));
1971
+ });
1972
+ });
1973
+ describe('Accessibility', () => {
1974
+ describe('aXe DevTools', () => {
1975
+ it('does not have accessibility violations', async () => {
1976
+ const page = await setup({
1977
+ html: `
1978
+ <q2-select label="Test" value="option-1">
1979
+ <q2-option value="option-1" display="Option Text">Option Text</q2-option>
1980
+ <q2-option value="option-2" display="Option Text">Option Text</q2-option>
1981
+ </q2-select>
1982
+ `,
1983
+ });
1984
+ const hasViolations = await evaluateA11y(page);
1985
+ expect(hasViolations).toBe(false);
1910
1986
  });
1911
- it('opens the dropdown and focuses last option on End', async () => {
1912
- expect(await popover.getProperty('open')).toBe(false);
1913
- await input.press('End');
1914
- expect(await popover.getProperty('open')).toBe(true);
1915
- const lastOption = options[options.length - 1];
1916
- expect(lastOption).toHaveAttribute('active');
1917
- expect(await getFocusedOptionValue(page)).toEqual(lastOption.getAttribute('value'));
1987
+ });
1988
+ describe('Accessibility Tree', () => {
1989
+ it("option-list should have a role of 'listbox' and the options a role of 'option'", async () => {
1990
+ page = await setup({
1991
+ html: `
1992
+ <q2-select label="My select">
1993
+ <q2-option value="option-1" display="Option 1">Option 1</q2-option>
1994
+ <q2-option value="option-2" display="Option 2">Option 2</q2-option>
1995
+ <q2-option value="option-3" display="Option 3">Option 3</q2-option>
1996
+ </q2-select>
1997
+ `,
1998
+ });
1999
+ input = await page.find('q2-select >>> q2-input');
2000
+ await input.click();
2001
+ await page.waitForChanges();
2002
+ popover = await page.find('q2-select >>> q2-popover');
2003
+ expect(await popover.getProperty('open')).toEqual(true);
2004
+ const snapshot = await page.accessibility.snapshot();
2005
+ const optionList = snapshot.children[2];
2006
+ expect(optionList.role).toEqual('listbox');
2007
+ expect(optionList.children).toHaveLength(3);
2008
+ optionList.children.forEach(child => {
2009
+ expect(child.role).toEqual('option');
2010
+ expect(child.name).toBeTruthy();
2011
+ });
1918
2012
  });
1919
- it('pseudo-searches for option if printable character is pressed', async () => {
2013
+ });
2014
+ describe('Keyboard Controls', () => {
2015
+ let options;
2016
+ const isInputFocused = async (page) => {
2017
+ return page.$eval('body', () => document.activeElement.shadowRoot.activeElement.tagName === 'Q2-INPUT');
2018
+ };
2019
+ const isBodyFocused = async (page) => {
2020
+ return page.$eval('body', () => document.activeElement.tagName === 'BODY');
2021
+ };
2022
+ beforeEach(async () => {
2023
+ jest.setTimeout(5000);
1920
2024
  page = await setup({
1921
2025
  html: `
1922
2026
  <q2-select>
1923
- <q2-option display="Nebraska" value="NE">Nebraska</q2-option>
1924
- <q2-option display="Nevada" value="NV">Nevada</q2-option>
1925
- <q2-option display="New Hampshire" value="NH">New Hampshire</q2-option>
1926
- <q2-option display="New Jersey" value="NJ">New Jersey</q2-option>
1927
- <q2-option display="New Mexico" value="NM">New Mexico</q2-option>
1928
- <q2-option display="New York" value="NY">New York</q2-option>
1929
- <q2-option display="North Carolina" value="NC">North Carolina</q2-option>
1930
- <q2-option display="North Dakota" value="ND">North Dakota</q2-option>
1931
- <q2-option display="Ohio" value="OH">Ohio</q2-option>
1932
- <q2-option display="Oklahoma" value="OK">Oklahoma</q2-option>
1933
- <q2-option display="Oregon" value="OR">Oregon</q2-option>
1934
- <q2-option display="Pennsylvania" value="PA">Pennsylvania</q2-option>
1935
- <q2-option display="Rhode Island" value="RI">Rhode Island</q2-option>
2027
+ <q2-option value="1" display="Option 1">Option 1</q2-option>
2028
+ <q2-option value="2" display="Option 2">Option 2</q2-option>
2029
+ <q2-option value="3" display="Option 3">Option 3</q2-option>
2030
+ <q2-option value="4" display="Option 4">Option 4</q2-option>
2031
+ <q2-option value="5" display="Option 5">Option 5</q2-option>
2032
+ <q2-option value="6" display="Option 6">Option 6</q2-option>
2033
+ <q2-option value="7" display="Option 7">Option 7</q2-option>
2034
+ <q2-option value="8" display="Option 8">Option 8</q2-option>
2035
+ <q2-option value="9" display="Option 9">Option 9</q2-option>
2036
+ <q2-option value="10" display="Option 10">Option 10</q2-option>
2037
+ <q2-option value="11" display="Option 11">Option 11</q2-option>
2038
+ <q2-option value="12" display="Option 12">Option 12</q2-option>
2039
+ <q2-option value="13" display="Option 13">Option 13</q2-option>
2040
+ <q2-option value="14" display="Option 14">Option 14</q2-option>
2041
+ <q2-option value="15" display="Option 15">Option 15</q2-option>
1936
2042
  </q2-select>
1937
2043
  `,
1938
2044
  });
2045
+ await page.waitForChanges();
2046
+ select = await page.find('q2-select');
1939
2047
  input = await page.find('q2-select >>> q2-input');
1940
- await input.type('o');
1941
- const q2Select = await page.find('q2-select');
1942
- const selectInput = await page.find('q2-select >>> q2-input');
1943
- expect(await selectInput.getProperty('value')).toEqual('Ohio');
1944
- expect(await q2Select.getProperty('value')).toEqual('OH');
1945
- await input.type('k');
1946
- expect(await selectInput.getProperty('value')).toEqual('Oklahoma');
1947
- expect(await q2Select.getProperty('value')).toEqual('OK');
1948
- // Wait for debounce
1949
- await waitForTimeout(2000);
1950
- await input.type('New J');
1951
- expect(await selectInput.getProperty('value')).toEqual('New Jersey');
1952
- expect(await q2Select.getProperty('value')).toEqual('NJ');
1953
- });
1954
- describe('when value is present', () => {
2048
+ popover = await page.find('q2-select >>> q2-popover');
2049
+ options = await page.findAll('q2-option');
2050
+ });
2051
+ describe('when input has focus', () => {
1955
2052
  beforeEach(async () => {
1956
- await select.setProperty('value', '3');
1957
- await page.waitForChanges();
2053
+ await input.focus();
1958
2054
  });
1959
- it('opens the dropdown, and moves focus to first selected option on ArrowDown', async () => {
2055
+ it('opens the dropdown, and moves focus to default option on ArrowDown', async () => {
1960
2056
  expect(await popover.getProperty('open')).toBe(false);
1961
2057
  await input.press('ArrowDown');
1962
2058
  expect(await popover.getProperty('open')).toBe(true);
1963
- const selectedOption = options[2];
1964
- expect(selectedOption).toHaveAttribute('active');
1965
- expect(await getFocusedOptionValue(page)).toEqual(selectedOption.getAttribute('value'));
2059
+ const firstOption = options[0];
2060
+ expect(firstOption).toHaveAttribute('active');
2061
+ expect(await getFocusedOptionValue(page)).toEqual(firstOption.getAttribute('value'));
1966
2062
  });
1967
- it('opens the dropdown, and moves focus to first selected option on ArrowUp', async () => {
2063
+ it('opens the dropdown, and moves focus to last option on ArrowUp', async () => {
1968
2064
  expect(await popover.getProperty('open')).toBe(false);
1969
2065
  await input.press('ArrowUp');
2066
+ await page.waitForChanges();
1970
2067
  expect(await popover.getProperty('open')).toBe(true);
1971
- const selectedOption = options[2];
1972
- expect(selectedOption).toHaveAttribute('active');
1973
- expect(await getFocusedOptionValue(page)).toEqual(selectedOption.getAttribute('value'));
2068
+ const lastOption = options[options.length - 1];
2069
+ expect(lastOption).toHaveAttribute('active');
2070
+ expect(await getFocusedOptionValue(page)).toEqual(lastOption.getAttribute('value'));
1974
2071
  });
1975
- });
1976
- });
1977
- it('pseudo-searches for next matching option if same character is pressed 3 times', async () => {
1978
- page = await setup({
1979
- html: `
1980
- <q2-select>
1981
- <q2-option display="Nebraska" value="NE">Nebraska</q2-option>
1982
- <q2-option display="Ohio" value="OH">Ohio</q2-option>
1983
- <q2-option display="Nevada" value="NV">Nevada</q2-option>
1984
- <q2-option display="Oklahoma" value="OK">Oklahoma</q2-option>
1985
- <q2-option display="New Hampshire" value="NH">New Hampshire</q2-option>
1986
- </q2-select>
1987
- `,
1988
- });
1989
- input = await page.find('q2-select >>> q2-input');
1990
- await input.press('n');
1991
- await page.waitForChanges();
1992
- const q2Select = await page.find('q2-select');
1993
- const selectInput = await page.find('q2-select >>> q2-input');
1994
- expect(await selectInput.getProperty('value')).toEqual('Nebraska');
1995
- expect(await q2Select.getProperty('value')).toEqual('NE');
1996
- await input.press('n');
1997
- await page.waitForChanges();
1998
- expect(await selectInput.getProperty('value')).toEqual('Nevada');
1999
- expect(await q2Select.getProperty('value')).toEqual('NV');
2000
- await input.press('n');
2001
- await page.waitForChanges();
2002
- expect(await selectInput.getProperty('value')).toEqual('New Hampshire');
2003
- expect(await q2Select.getProperty('value')).toEqual('NH');
2004
- });
2005
- describe('focus', () => {
2006
- let page;
2007
- let select;
2008
- beforeEach(async () => {
2009
- page = await setup({ html: `<q2-select></q2-select>` });
2010
- select = await page.find('q2-select');
2011
- expect(await innerActiveTestId(page)).toBeUndefined();
2012
- });
2013
- const innerActiveTestId = async (page) => {
2014
- return page.$eval('q2-select', el => { var _a; return (_a = el.shadowRoot.activeElement) === null || _a === void 0 ? void 0 : _a.getAttribute('test-id'); });
2015
- };
2016
- it('focuses inner button when focus event is dispatched', async () => {
2017
- await select.triggerEvent('focus');
2018
- await page.waitForChanges();
2019
- expect(await innerActiveTestId(page)).toEqual('toggleDropdown');
2020
- });
2021
- it('focuses inner button when element.focus() is called', async () => {
2022
- await select.focus();
2023
- await page.waitForChanges();
2024
- expect(await innerActiveTestId(page)).toEqual('toggleDropdown');
2025
- });
2026
- });
2027
- describe('when dropdown has focus', () => {
2028
- beforeEach(async () => {
2029
- await dispatchEvent(page, ['q2-select', 'q2-input'], 'keydown', {
2030
- key: 'ArrowDown',
2072
+ it('opens the dropdown on Space', async () => {
2073
+ expect(await popover.getProperty('open')).toBe(false);
2074
+ await input.press('Space');
2075
+ await page.waitForChanges();
2076
+ expect(await popover.getProperty('open')).toBe(true);
2077
+ });
2078
+ it('opens the dropdown, and focuses first option on Home', async () => {
2079
+ expect(await popover.getProperty('open')).toBe(false);
2080
+ await input.press('Home');
2081
+ expect(await popover.getProperty('open')).toBe(true);
2082
+ const firstOption = options[0];
2083
+ expect(firstOption).toHaveAttribute('active');
2084
+ expect(await getFocusedOptionValue(page)).toEqual(firstOption.getAttribute('value'));
2085
+ });
2086
+ it('opens the dropdown and focuses last option on End', async () => {
2087
+ expect(await popover.getProperty('open')).toBe(false);
2088
+ await input.press('End');
2089
+ expect(await popover.getProperty('open')).toBe(true);
2090
+ const lastOption = options[options.length - 1];
2091
+ expect(lastOption).toHaveAttribute('active');
2092
+ expect(await getFocusedOptionValue(page)).toEqual(lastOption.getAttribute('value'));
2093
+ });
2094
+ it('pseudo-searches for option if printable character is pressed', async () => {
2095
+ page = await setup({
2096
+ html: `
2097
+ <q2-select>
2098
+ <q2-option display="Nebraska" value="NE">Nebraska</q2-option>
2099
+ <q2-option display="Nevada" value="NV">Nevada</q2-option>
2100
+ <q2-option display="New Hampshire" value="NH">New Hampshire</q2-option>
2101
+ <q2-option display="New Jersey" value="NJ">New Jersey</q2-option>
2102
+ <q2-option display="New Mexico" value="NM">New Mexico</q2-option>
2103
+ <q2-option display="New York" value="NY">New York</q2-option>
2104
+ <q2-option display="North Carolina" value="NC">North Carolina</q2-option>
2105
+ <q2-option display="North Dakota" value="ND">North Dakota</q2-option>
2106
+ <q2-option display="Ohio" value="OH">Ohio</q2-option>
2107
+ <q2-option display="Oklahoma" value="OK">Oklahoma</q2-option>
2108
+ <q2-option display="Oregon" value="OR">Oregon</q2-option>
2109
+ <q2-option display="Pennsylvania" value="PA">Pennsylvania</q2-option>
2110
+ <q2-option display="Rhode Island" value="RI">Rhode Island</q2-option>
2111
+ </q2-select>
2112
+ `,
2113
+ });
2114
+ input = await page.find('q2-select >>> q2-input');
2115
+ await input.type('o');
2116
+ const q2Select = await page.find('q2-select');
2117
+ const selectInput = await page.find('q2-select >>> q2-input');
2118
+ expect(await selectInput.getProperty('value')).toEqual('Ohio');
2119
+ expect(await q2Select.getProperty('value')).toEqual('OH');
2120
+ await input.type('k');
2121
+ expect(await selectInput.getProperty('value')).toEqual('Oklahoma');
2122
+ expect(await q2Select.getProperty('value')).toEqual('OK');
2123
+ // Wait for debounce
2124
+ await waitForTimeout(2000);
2125
+ await input.type('New J');
2126
+ expect(await selectInput.getProperty('value')).toEqual('New Jersey');
2127
+ expect(await q2Select.getProperty('value')).toEqual('NJ');
2128
+ });
2129
+ describe('when value is present', () => {
2130
+ beforeEach(async () => {
2131
+ await select.setProperty('value', '3');
2132
+ await page.waitForChanges();
2133
+ });
2134
+ it('opens the dropdown, and moves focus to first selected option on ArrowDown', async () => {
2135
+ expect(await popover.getProperty('open')).toBe(false);
2136
+ await input.press('ArrowDown');
2137
+ expect(await popover.getProperty('open')).toBe(true);
2138
+ const selectedOption = options[2];
2139
+ expect(selectedOption).toHaveAttribute('active');
2140
+ expect(await getFocusedOptionValue(page)).toEqual(selectedOption.getAttribute('value'));
2141
+ });
2142
+ it('opens the dropdown, and moves focus to first selected option on ArrowUp', async () => {
2143
+ expect(await popover.getProperty('open')).toBe(false);
2144
+ await input.press('ArrowUp');
2145
+ expect(await popover.getProperty('open')).toBe(true);
2146
+ const selectedOption = options[2];
2147
+ expect(selectedOption).toHaveAttribute('active');
2148
+ expect(await getFocusedOptionValue(page)).toEqual(selectedOption.getAttribute('value'));
2149
+ });
2031
2150
  });
2032
- expect(await popover.getProperty('open')).toBe(true);
2033
- expect(options[0]).toHaveAttribute('active');
2034
- });
2035
- it('sets the value, closes the dropdown, and focuses input on Enter', async () => {
2036
- await popover.press('Enter');
2037
- expect(await select.getProperty('value')).toEqual('1');
2038
- expect(await popover.getProperty('open')).toBe(false);
2039
- expect(await isInputFocused(page)).toBe(true);
2040
- });
2041
- it('sets the value, closes the dropdown, and focuses input on Space', async () => {
2042
- await popover.press(' ');
2043
- expect(await select.getProperty('value')).toEqual('1');
2044
- expect(await popover.getProperty('open')).toBe(false);
2045
- expect(await isInputFocused(page)).toBe(true);
2046
- });
2047
- it('sets the value, closes the dropdown, and move to next element on Tab', async () => {
2048
- await popover.press('Tab');
2049
- expect(await select.getProperty('value')).toEqual('1');
2050
- expect(await popover.getProperty('open')).toBe(false);
2051
- expect(await isBodyFocused(page)).toBe(true);
2052
- });
2053
- it('closes dropdown, and focuses input on Escape', async () => {
2054
- await popover.press('Escape');
2055
- expect(await select.getProperty('value')).toBeUndefined();
2056
- expect(await popover.getProperty('open')).toBe(false);
2057
- expect(await isInputFocused(page)).toBe(true);
2058
- });
2059
- it('focuses next option on ArrowDown', async () => {
2060
- await popover.press('ArrowDown');
2061
- expect(await popover.getProperty('open')).toBe(true);
2062
- expect(await getFocusedOptionValue(page)).toBe(options[1].getAttribute('value'));
2063
- });
2064
- it('focuses previous option on ArrowUp', async () => {
2065
- await popover.press('ArrowDown');
2066
- expect(options[1]).toHaveAttribute('active');
2067
- await popover.press('ArrowUp');
2068
- expect(await popover.getProperty('open')).toBe(true);
2069
- expect(options[0]).toHaveAttribute('active');
2070
- expect(await getFocusedOptionValue(page)).toBe(options[0].getAttribute('value'));
2071
- });
2072
- it('focuses first option on Home', async () => {
2073
- await popover.press('ArrowDown');
2074
- expect(options[1]).toHaveAttribute('active');
2075
- await popover.press('Home');
2076
- expect(await popover.getProperty('open')).toBe(true);
2077
- expect(options[0]).toHaveAttribute('active');
2078
- expect(await getFocusedOptionValue(page)).toBe(options[0].getAttribute('value'));
2079
- });
2080
- it('focuses last option on End', async () => {
2081
- await popover.press('ArrowDown');
2082
- expect(options[1]).toHaveAttribute('active');
2083
- await popover.press('End');
2084
- expect(await popover.getProperty('open')).toBe(true);
2085
- expect(options[14]).toHaveAttribute('active');
2086
- expect(await getFocusedOptionValue(page)).toBe(options[14].getAttribute('value'));
2087
- });
2088
- it('jumps focus forward 10 options on PageDown', async () => {
2089
- await popover.press('PageDown');
2090
- expect(options[10]).toHaveAttribute('active');
2091
- await popover.press('PageDown');
2092
- expect(options[14]).toHaveAttribute('active');
2093
- });
2094
- it('jumps focus back 10 options on PageUp', async () => {
2095
- await popover.press('End');
2096
- expect(options[14]).toHaveAttribute('active');
2097
- await popover.press('PageUp');
2098
- expect(options[4]).toHaveAttribute('active');
2099
- await popover.press('PageUp');
2100
- expect(options[0]).toHaveAttribute('active');
2101
2151
  });
2102
- });
2103
- describe('when input has value', () => {
2104
- beforeEach(async () => {
2105
- await select.setAttribute('value', '2');
2152
+ it('pseudo-searches for next matching option if same character is pressed 3 times', async () => {
2153
+ page = await setup({
2154
+ html: `
2155
+ <q2-select>
2156
+ <q2-option display="Nebraska" value="NE">Nebraska</q2-option>
2157
+ <q2-option display="Ohio" value="OH">Ohio</q2-option>
2158
+ <q2-option display="Nevada" value="NV">Nevada</q2-option>
2159
+ <q2-option display="Oklahoma" value="OK">Oklahoma</q2-option>
2160
+ <q2-option display="New Hampshire" value="NH">New Hampshire</q2-option>
2161
+ </q2-select>
2162
+ `,
2163
+ });
2164
+ input = await page.find('q2-select >>> q2-input');
2165
+ await input.press('n');
2106
2166
  await page.waitForChanges();
2107
- expect(options[1]).toHaveAttribute('selected');
2108
- expect(await popover.getProperty('open')).toBe(false);
2109
- changeSpy = await select.spyOnEvent('change');
2110
- inputSpy = await select.spyOnEvent('input');
2111
- expect(await input.getProperty('value')).toEqual('Option 2');
2167
+ const q2Select = await page.find('q2-select');
2168
+ const selectInput = await page.find('q2-select >>> q2-input');
2169
+ expect(await selectInput.getProperty('value')).toEqual('Nebraska');
2170
+ expect(await q2Select.getProperty('value')).toEqual('NE');
2171
+ await input.press('n');
2172
+ await page.waitForChanges();
2173
+ expect(await selectInput.getProperty('value')).toEqual('Nevada');
2174
+ expect(await q2Select.getProperty('value')).toEqual('NV');
2175
+ await input.press('n');
2176
+ await page.waitForChanges();
2177
+ expect(await selectInput.getProperty('value')).toEqual('New Hampshire');
2178
+ expect(await q2Select.getProperty('value')).toEqual('NH');
2179
+ });
2180
+ describe('focus', () => {
2181
+ let page;
2182
+ let select;
2183
+ beforeEach(async () => {
2184
+ page = await setup({ html: `<q2-select></q2-select>` });
2185
+ select = await page.find('q2-select');
2186
+ expect(await innerActiveTestId(page)).toBeUndefined();
2187
+ });
2188
+ const innerActiveTestId = async (page) => {
2189
+ return page.$eval('q2-select', el => { var _a; return (_a = el.shadowRoot.activeElement) === null || _a === void 0 ? void 0 : _a.getAttribute('test-id'); });
2190
+ };
2191
+ it('focuses inner button when focus event is dispatched', async () => {
2192
+ await select.triggerEvent('focus');
2193
+ await page.waitForChanges();
2194
+ expect(await innerActiveTestId(page)).toEqual('toggleDropdown');
2195
+ });
2196
+ it('focuses inner button when element.focus() is called', async () => {
2197
+ await select.focus();
2198
+ await page.waitForChanges();
2199
+ expect(await innerActiveTestId(page)).toEqual('toggleDropdown');
2200
+ });
2112
2201
  });
2113
2202
  describe('when dropdown has focus', () => {
2114
2203
  beforeEach(async () => {
@@ -2116,64 +2205,79 @@ describe('q2-select', () => {
2116
2205
  key: 'ArrowDown',
2117
2206
  });
2118
2207
  expect(await popover.getProperty('open')).toBe(true);
2119
- expect(options[1]).toHaveAttribute('active');
2208
+ expect(options[0]).toHaveAttribute('active');
2209
+ });
2210
+ it('sets the value, closes the dropdown, and focuses input on Enter', async () => {
2211
+ await popover.press('Enter');
2212
+ expect(await select.getProperty('value')).toEqual('1');
2213
+ expect(await popover.getProperty('open')).toBe(false);
2214
+ expect(await isInputFocused(page)).toBe(true);
2120
2215
  });
2121
- it('closes dropdown, maintains values, and focuses input on Escape', async () => {
2216
+ it('sets the value, closes the dropdown, and focuses input on Space', async () => {
2217
+ await popover.press(' ');
2218
+ expect(await select.getProperty('value')).toEqual('1');
2219
+ expect(await popover.getProperty('open')).toBe(false);
2220
+ expect(await isInputFocused(page)).toBe(true);
2221
+ });
2222
+ it('sets the value, closes the dropdown, and move to next element on Tab', async () => {
2223
+ await popover.press('Tab');
2224
+ expect(await select.getProperty('value')).toEqual('1');
2225
+ expect(await popover.getProperty('open')).toBe(false);
2226
+ expect(await isBodyFocused(page)).toBe(true);
2227
+ });
2228
+ it('closes dropdown, and focuses input on Escape', async () => {
2122
2229
  await popover.press('Escape');
2123
- expect(await select.getProperty('value')).toEqual('2');
2230
+ expect(await select.getProperty('value')).toBeUndefined();
2124
2231
  expect(await popover.getProperty('open')).toBe(false);
2125
2232
  expect(await isInputFocused(page)).toBe(true);
2126
2233
  });
2127
- });
2128
- });
2129
- describe('when searchable', () => {
2130
- beforeEach(async () => {
2131
- select.setAttribute('searchable', true);
2132
- await page.waitForChanges();
2133
- });
2134
- describe('when search query is typed', () => {
2135
- it('ArrowDown: focuses first option in search results', async () => {
2136
- await input.press('3');
2137
- await input.press('ArrowDown');
2138
- expect(options[2]).toHaveAttribute('active');
2139
- expect(await getFocusedValue(page)).toBe(options[2].getAttribute('value'));
2234
+ it('focuses next option on ArrowDown', async () => {
2235
+ await popover.press('ArrowDown');
2236
+ expect(await popover.getProperty('open')).toBe(true);
2237
+ expect(await getFocusedOptionValue(page)).toBe(options[1].getAttribute('value'));
2140
2238
  });
2141
- it('ArrowUp: focuses last option in search results', async () => {
2142
- await input.press('3');
2143
- await input.press('ArrowUp');
2144
- expect(options[12]).toHaveAttribute('active');
2145
- expect(await getFocusedValue(page)).toBe(options[12].getAttribute('value'));
2239
+ it('focuses previous option on ArrowUp', async () => {
2240
+ await popover.press('ArrowDown');
2241
+ expect(options[1]).toHaveAttribute('active');
2242
+ await popover.press('ArrowUp');
2243
+ expect(await popover.getProperty('open')).toBe(true);
2244
+ expect(options[0]).toHaveAttribute('active');
2245
+ expect(await getFocusedOptionValue(page)).toBe(options[0].getAttribute('value'));
2146
2246
  });
2147
- });
2148
- describe('when options are populated with `q2-card` elements', () => {
2149
- beforeEach(async () => {
2150
- page = await setup({
2151
- html: `
2152
- <q2-select searchable>
2153
- <q2-option value="1">
2154
- <q2-card title="Foo"></q2-card>
2155
- </q2-option>
2156
- <q2-option value="2">
2157
- <q2-card title="Bar"></q2-card>
2158
- </q2-option>
2159
- <q2-option value="3">
2160
- <q2-card title="Baz"></q2-card>
2161
- </q2-option>
2162
- </q2-select>
2163
- `,
2164
- });
2165
- input = await page.find('q2-select >>> q2-input');
2247
+ it('focuses first option on Home', async () => {
2248
+ await popover.press('ArrowDown');
2249
+ expect(options[1]).toHaveAttribute('active');
2250
+ await popover.press('Home');
2251
+ expect(await popover.getProperty('open')).toBe(true);
2252
+ expect(options[0]).toHaveAttribute('active');
2253
+ expect(await getFocusedOptionValue(page)).toBe(options[0].getAttribute('value'));
2166
2254
  });
2167
- it('can search based of the `q2-card` title attribute', async () => {
2168
- await input.focus();
2169
- await input.type('Bar');
2170
- options = await page.findAll('q2-option:not([hidden])');
2171
- expect(options).toHaveLength(1);
2255
+ it('focuses last option on End', async () => {
2256
+ await popover.press('ArrowDown');
2257
+ expect(options[1]).toHaveAttribute('active');
2258
+ await popover.press('End');
2259
+ expect(await popover.getProperty('open')).toBe(true);
2260
+ expect(options[14]).toHaveAttribute('active');
2261
+ expect(await getFocusedOptionValue(page)).toBe(options[14].getAttribute('value'));
2262
+ });
2263
+ it('jumps focus forward 10 options on PageDown', async () => {
2264
+ await popover.press('PageDown');
2265
+ expect(options[10]).toHaveAttribute('active');
2266
+ await popover.press('PageDown');
2267
+ expect(options[14]).toHaveAttribute('active');
2268
+ });
2269
+ it('jumps focus back 10 options on PageUp', async () => {
2270
+ await popover.press('End');
2271
+ expect(options[14]).toHaveAttribute('active');
2272
+ await popover.press('PageUp');
2273
+ expect(options[4]).toHaveAttribute('active');
2274
+ await popover.press('PageUp');
2275
+ expect(options[0]).toHaveAttribute('active');
2172
2276
  });
2173
2277
  });
2174
2278
  describe('when input has value', () => {
2175
2279
  beforeEach(async () => {
2176
- select.setAttribute('value', '2');
2280
+ await select.setAttribute('value', '2');
2177
2281
  await page.waitForChanges();
2178
2282
  expect(options[1]).toHaveAttribute('selected');
2179
2283
  expect(await popover.getProperty('open')).toBe(false);
@@ -2181,418 +2285,333 @@ describe('q2-select', () => {
2181
2285
  inputSpy = await select.spyOnEvent('input');
2182
2286
  expect(await input.getProperty('value')).toEqual('Option 2');
2183
2287
  });
2184
- it('clears the input on focus', async () => {
2185
- await input.focus();
2186
- await page.waitForChanges();
2187
- expect(await input.getProperty('value')).toEqual('');
2188
- await input.press('5');
2189
- expect(await input.getProperty('value')).toEqual('5');
2190
- expect(await popover.getProperty('open')).toBe(true);
2191
- expect(await page.findAll('q2-option:not([hidden])')).toHaveLength(2);
2192
- });
2193
- it('clears the input on focus without emitting events', async () => {
2194
- await input.focus();
2195
- expect(await input.getProperty('value')).toEqual('');
2196
- expect(changeSpy).not.toHaveReceivedEvent();
2197
- expect(inputSpy).not.toHaveReceivedEvent();
2198
- });
2199
- describe('when input has focus', () => {
2200
- it('clears the value on keypress and emits change and input events', async () => {
2201
- await input.focus();
2202
- expect(await input.getProperty('value')).toEqual('');
2203
- await input.press('X');
2204
- expect(changeSpy).toHaveReceivedEventDetail({ value: '' });
2205
- expect(inputSpy).toHaveReceivedEventDetail({ query: 'X' });
2206
- expect(await popover.getProperty('open')).toBe(true);
2207
- expect(await select.getProperty('value')).toEqual('');
2208
- expect(await input.getProperty('value')).toEqual('X');
2209
- const firstOption = options[1];
2210
- expect(firstOption).not.toHaveAttribute('selected');
2211
- });
2212
- it('opens the dropdown, and focuses next option on ArrowDown', async () => {
2213
- await input.press('ArrowDown');
2214
- expect(await popover.getProperty('open')).toBe(true);
2215
- const firstOption = options[1];
2216
- expect(firstOption).toHaveAttribute('active');
2217
- expect(await getFocusedOptionValue(page)).toEqual(firstOption.getAttribute('value'));
2218
- });
2219
- it('opens the dropdown, and focuses first option on ArrowUp', async () => {
2220
- await input.press('ArrowUp');
2288
+ describe('when dropdown has focus', () => {
2289
+ beforeEach(async () => {
2290
+ await dispatchEvent(page, ['q2-select', 'q2-input'], 'keydown', {
2291
+ key: 'ArrowDown',
2292
+ });
2221
2293
  expect(await popover.getProperty('open')).toBe(true);
2222
- const firstOption = options[1];
2223
- expect(firstOption).toHaveAttribute('active');
2224
- expect(await getFocusedOptionValue(page)).toEqual(firstOption.getAttribute('value'));
2294
+ expect(options[1]).toHaveAttribute('active');
2225
2295
  });
2226
- it('closes dropdown if open on Escape', async () => {
2227
- await input.press('ArrowDown');
2228
- expect(await popover.getProperty('open')).toBe(true);
2229
- await input.press('Escape');
2296
+ it('closes dropdown, maintains values, and focuses input on Escape', async () => {
2297
+ await popover.press('Escape');
2298
+ expect(await select.getProperty('value')).toEqual('2');
2230
2299
  expect(await popover.getProperty('open')).toBe(false);
2300
+ expect(await isInputFocused(page)).toBe(true);
2231
2301
  });
2232
2302
  });
2233
2303
  });
2234
- describe('when input is empty', () => {
2235
- it('opens the dropdown on Space', async () => {
2236
- await dispatchEvent(page, ['q2-select', 'q2-input'], 'keydown', {
2237
- key: ' ',
2238
- });
2239
- expect(await popover.getProperty('open')).toBe(true);
2304
+ describe('when searchable', () => {
2305
+ beforeEach(async () => {
2306
+ select.setAttribute('searchable', true);
2307
+ await page.waitForChanges();
2240
2308
  });
2241
- it('opens the dropdown on Enter', async () => {
2242
- await dispatchEvent(page, ['q2-select', 'q2-input'], 'keydown', {
2243
- key: 'Enter',
2309
+ describe('when search query is typed', () => {
2310
+ it('ArrowDown: focuses first option in search results', async () => {
2311
+ await input.press('3');
2312
+ await input.press('ArrowDown');
2313
+ expect(options[2]).toHaveAttribute('active');
2314
+ expect(await getFocusedValue(page)).toBe(options[2].getAttribute('value'));
2244
2315
  });
2245
- expect(await popover.getProperty('open')).toBe(true);
2246
- });
2247
- it('opens the dropdown, and focuses first option on ArrowDown', async () => {
2248
- await dispatchEvent(page, ['q2-select', 'q2-input'], 'keydown', {
2249
- key: 'ArrowDown',
2316
+ it('ArrowUp: focuses last option in search results', async () => {
2317
+ await input.press('3');
2318
+ await input.press('ArrowUp');
2319
+ expect(options[12]).toHaveAttribute('active');
2320
+ expect(await getFocusedValue(page)).toBe(options[12].getAttribute('value'));
2250
2321
  });
2251
- expect(await popover.getProperty('open')).toBe(true);
2252
- const firstOption = options[0];
2253
- expect(firstOption).toHaveAttribute('active');
2254
- expect(await getFocusedOptionValue(page)).toEqual(firstOption.getAttribute('value'));
2255
2322
  });
2256
- it('opens the dropdown, and focuses last option on ArrowUp', async () => {
2257
- await dispatchEvent(page, ['q2-select', 'q2-input'], 'keydown', {
2258
- key: 'ArrowUp',
2323
+ describe('when options are populated with `q2-card` elements', () => {
2324
+ beforeEach(async () => {
2325
+ page = await setup({
2326
+ html: `
2327
+ <q2-select searchable>
2328
+ <q2-option value="1">
2329
+ <q2-card title="Foo"></q2-card>
2330
+ </q2-option>
2331
+ <q2-option value="2">
2332
+ <q2-card title="Bar"></q2-card>
2333
+ </q2-option>
2334
+ <q2-option value="3">
2335
+ <q2-card title="Baz"></q2-card>
2336
+ </q2-option>
2337
+ </q2-select>
2338
+ `,
2339
+ });
2340
+ input = await page.find('q2-select >>> q2-input');
2341
+ });
2342
+ it('can search based of the `q2-card` title attribute', async () => {
2343
+ await input.focus();
2344
+ await input.type('Bar');
2345
+ options = await page.findAll('q2-option:not([hidden])');
2346
+ expect(options).toHaveLength(1);
2259
2347
  });
2260
- expect(await popover.getProperty('open')).toBe(true);
2261
- const lastOption = options[options.length - 1];
2262
- expect(lastOption).toHaveAttribute('active');
2263
- expect(await getFocusedOptionValue(page)).toEqual(lastOption.getAttribute('value'));
2264
2348
  });
2265
- it("clears typed value if dropdown isn't open on Escape", async () => {
2266
- await input.focus();
2267
- await input.type('Option');
2268
- await page.waitForChanges();
2269
- expect(await input.getProperty('value')).toEqual('Option');
2270
- await input.press('Escape');
2271
- expect(await input.getProperty('value')).toEqual('');
2349
+ describe('when input has value', () => {
2350
+ beforeEach(async () => {
2351
+ select.setAttribute('value', '2');
2352
+ await page.waitForChanges();
2353
+ expect(options[1]).toHaveAttribute('selected');
2354
+ expect(await popover.getProperty('open')).toBe(false);
2355
+ changeSpy = await select.spyOnEvent('change');
2356
+ inputSpy = await select.spyOnEvent('input');
2357
+ expect(await input.getProperty('value')).toEqual('Option 2');
2358
+ });
2359
+ it('clears the input on focus', async () => {
2360
+ await input.focus();
2361
+ await page.waitForChanges();
2362
+ expect(await input.getProperty('value')).toEqual('');
2363
+ await input.press('5');
2364
+ expect(await input.getProperty('value')).toEqual('5');
2365
+ expect(await popover.getProperty('open')).toBe(true);
2366
+ expect(await page.findAll('q2-option:not([hidden])')).toHaveLength(2);
2367
+ });
2368
+ it('clears the input on focus without emitting events', async () => {
2369
+ await input.focus();
2370
+ expect(await input.getProperty('value')).toEqual('');
2371
+ expect(changeSpy).not.toHaveReceivedEvent();
2372
+ expect(inputSpy).not.toHaveReceivedEvent();
2373
+ });
2374
+ describe('when input has focus', () => {
2375
+ it('clears the value on keypress and emits change and input events', async () => {
2376
+ await input.focus();
2377
+ expect(await input.getProperty('value')).toEqual('');
2378
+ await input.press('X');
2379
+ expect(changeSpy).toHaveReceivedEventDetail({ value: '' });
2380
+ expect(inputSpy).toHaveReceivedEventDetail({ query: 'X' });
2381
+ expect(await popover.getProperty('open')).toBe(true);
2382
+ expect(await select.getProperty('value')).toEqual('');
2383
+ expect(await input.getProperty('value')).toEqual('X');
2384
+ const firstOption = options[1];
2385
+ expect(firstOption).not.toHaveAttribute('selected');
2386
+ });
2387
+ it('opens the dropdown, and focuses next option on ArrowDown', async () => {
2388
+ await input.press('ArrowDown');
2389
+ expect(await popover.getProperty('open')).toBe(true);
2390
+ const firstOption = options[1];
2391
+ expect(firstOption).toHaveAttribute('active');
2392
+ expect(await getFocusedOptionValue(page)).toEqual(firstOption.getAttribute('value'));
2393
+ });
2394
+ it('opens the dropdown, and focuses first option on ArrowUp', async () => {
2395
+ await input.press('ArrowUp');
2396
+ expect(await popover.getProperty('open')).toBe(true);
2397
+ const firstOption = options[1];
2398
+ expect(firstOption).toHaveAttribute('active');
2399
+ expect(await getFocusedOptionValue(page)).toEqual(firstOption.getAttribute('value'));
2400
+ });
2401
+ it('closes dropdown if open on Escape', async () => {
2402
+ await input.press('ArrowDown');
2403
+ expect(await popover.getProperty('open')).toBe(true);
2404
+ await input.press('Escape');
2405
+ expect(await popover.getProperty('open')).toBe(false);
2406
+ });
2407
+ });
2272
2408
  });
2273
- describe('when printable character is pressed', () => {
2274
- it('searches for option', async () => {
2275
- const eventData = {
2276
- key: 'n',
2277
- detail: {
2278
- value: 'option 2',
2279
- },
2280
- };
2281
- await dispatchEvent(page, ['q2-select', 'q2-input'], 'keydown', eventData);
2282
- await dispatchEvent(page, ['q2-select', 'q2-input'], 'input', eventData);
2283
- await dispatchEvent(page, ['q2-select', 'q2-input'], 'keyup', eventData);
2409
+ describe('when input is empty', () => {
2410
+ it('opens the dropdown on Space', async () => {
2411
+ await dispatchEvent(page, ['q2-select', 'q2-input'], 'keydown', {
2412
+ key: ' ',
2413
+ });
2284
2414
  expect(await popover.getProperty('open')).toBe(true);
2285
- expect(options[0]).toHaveAttribute('hidden');
2286
- expect(options[1]).not.toHaveAttribute('hidden');
2287
- expect(options[2]).toHaveAttribute('hidden');
2288
- });
2289
- it('enters dropdown on Arrow Down', async () => {
2290
- const eventData = {
2291
- key: 'n',
2292
- detail: {
2293
- value: 'option 2',
2294
- },
2295
- };
2296
- await dispatchEvent(page, ['q2-select', 'q2-input'], 'keydown', eventData);
2297
- await dispatchEvent(page, ['q2-select', 'q2-input'], 'input', eventData);
2298
- await dispatchEvent(page, ['q2-select', 'q2-input'], 'keyup', eventData);
2415
+ });
2416
+ it('opens the dropdown on Enter', async () => {
2417
+ await dispatchEvent(page, ['q2-select', 'q2-input'], 'keydown', {
2418
+ key: 'Enter',
2419
+ });
2299
2420
  expect(await popover.getProperty('open')).toBe(true);
2421
+ });
2422
+ it('opens the dropdown, and focuses first option on ArrowDown', async () => {
2300
2423
  await dispatchEvent(page, ['q2-select', 'q2-input'], 'keydown', {
2301
2424
  key: 'ArrowDown',
2302
2425
  });
2303
- const visibleOption = options[1];
2304
- expect(await getFocusedOptionValue(page)).toEqual(visibleOption.getAttribute('value'));
2426
+ expect(await popover.getProperty('open')).toBe(true);
2427
+ const firstOption = options[0];
2428
+ expect(firstOption).toHaveAttribute('active');
2429
+ expect(await getFocusedOptionValue(page)).toEqual(firstOption.getAttribute('value'));
2305
2430
  });
2306
- });
2307
- describe('when multiple', () => {
2308
- beforeEach(async () => {
2309
- select.setProperty('multiple', true);
2431
+ it('opens the dropdown, and focuses last option on ArrowUp', async () => {
2432
+ await dispatchEvent(page, ['q2-select', 'q2-input'], 'keydown', {
2433
+ key: 'ArrowUp',
2434
+ });
2435
+ expect(await popover.getProperty('open')).toBe(true);
2436
+ const lastOption = options[options.length - 1];
2437
+ expect(lastOption).toHaveAttribute('active');
2438
+ expect(await getFocusedOptionValue(page)).toEqual(lastOption.getAttribute('value'));
2439
+ });
2440
+ it("clears typed value if dropdown isn't open on Escape", async () => {
2441
+ await input.focus();
2442
+ await input.type('Option');
2310
2443
  await page.waitForChanges();
2444
+ expect(await input.getProperty('value')).toEqual('Option');
2445
+ await input.press('Escape');
2446
+ expect(await input.getProperty('value')).toEqual('');
2311
2447
  });
2312
- it('does not show an indicator of total selected options', async () => {
2313
- expect(await popover.getProperty('open')).toBe(false);
2314
- await input.press('ArrowDown');
2315
- expect(await popover.getProperty('open')).toBe(true);
2316
- input = await page.find('q2-select >>> q2-input');
2317
- expect(input).not.toHaveAttribute('badge-value');
2448
+ describe('when printable character is pressed', () => {
2449
+ it('searches for option', async () => {
2450
+ const eventData = {
2451
+ key: 'n',
2452
+ detail: {
2453
+ value: 'option 2',
2454
+ },
2455
+ };
2456
+ await dispatchEvent(page, ['q2-select', 'q2-input'], 'keydown', eventData);
2457
+ await dispatchEvent(page, ['q2-select', 'q2-input'], 'input', eventData);
2458
+ await dispatchEvent(page, ['q2-select', 'q2-input'], 'keyup', eventData);
2459
+ expect(await popover.getProperty('open')).toBe(true);
2460
+ expect(options[0]).toHaveAttribute('hidden');
2461
+ expect(options[1]).not.toHaveAttribute('hidden');
2462
+ expect(options[2]).toHaveAttribute('hidden');
2463
+ });
2464
+ it('enters dropdown on Arrow Down', async () => {
2465
+ const eventData = {
2466
+ key: 'n',
2467
+ detail: {
2468
+ value: 'option 2',
2469
+ },
2470
+ };
2471
+ await dispatchEvent(page, ['q2-select', 'q2-input'], 'keydown', eventData);
2472
+ await dispatchEvent(page, ['q2-select', 'q2-input'], 'input', eventData);
2473
+ await dispatchEvent(page, ['q2-select', 'q2-input'], 'keyup', eventData);
2474
+ expect(await popover.getProperty('open')).toBe(true);
2475
+ await dispatchEvent(page, ['q2-select', 'q2-input'], 'keydown', {
2476
+ key: 'ArrowDown',
2477
+ });
2478
+ const visibleOption = options[1];
2479
+ expect(await getFocusedOptionValue(page)).toEqual(visibleOption.getAttribute('value'));
2480
+ });
2481
+ });
2482
+ describe('when multiple', () => {
2483
+ beforeEach(async () => {
2484
+ select.setProperty('multiple', true);
2485
+ await page.waitForChanges();
2486
+ });
2487
+ it('does not show an indicator of total selected options', async () => {
2488
+ expect(await popover.getProperty('open')).toBe(false);
2489
+ await input.press('ArrowDown');
2490
+ expect(await popover.getProperty('open')).toBe(true);
2491
+ input = await page.find('q2-select >>> q2-input');
2492
+ expect(input).not.toHaveAttribute('badge-value');
2493
+ });
2318
2494
  });
2319
2495
  });
2320
2496
  });
2321
- });
2322
- describe('when multiple', () => {
2323
- beforeEach(async () => {
2324
- await select.setProperty('multiple', true);
2325
- });
2326
- describe('when visibility controls are focused', () => {
2327
- let allOptionsRadio;
2497
+ describe('when multiple', () => {
2328
2498
  beforeEach(async () => {
2329
- await dispatchEvent(page, ['q2-select', 'q2-input'], 'keydown', {
2330
- key: 'ArrowDown',
2331
- });
2332
- expect(await popover.getProperty('open')).toBe(true);
2333
- await popover.press('Space');
2334
- expect(options[0]).toHaveAttribute('selected');
2335
- allOptionsRadio = await page.find('q2-select >>> [test-id=allOptionsButton]');
2336
- selectedOptionsRadio = await page.find('q2-select >>> [test-id=selectedOptionsButton]');
2337
- selectedOptionsRadioLabel = await page.find('q2-select >>> [test-id=selectedOptionsButton] + label');
2338
- allOptionsRadioLabel = await page.find('q2-select >>> [test-id=allOptionsButton] + label');
2339
- await allOptionsRadio.focus();
2340
- expect(options[0]).toHaveAttribute('active');
2341
- expect(await popover.getProperty('open')).toBe(true);
2499
+ await select.setProperty('multiple', true);
2342
2500
  });
2343
- describe('when all options button is focused', () => {
2501
+ describe('when visibility controls are focused', () => {
2502
+ let allOptionsRadio;
2344
2503
  beforeEach(async () => {
2345
- await allOptionsRadioLabel.click();
2346
- await page.waitForChanges();
2347
- expect(await allOptionsRadio.getProperty('checked')).toEqual(true);
2504
+ await dispatchEvent(page, ['q2-select', 'q2-input'], 'keydown', {
2505
+ key: 'ArrowDown',
2506
+ });
2507
+ expect(await popover.getProperty('open')).toBe(true);
2508
+ await popover.press('Space');
2509
+ expect(options[0]).toHaveAttribute('selected');
2510
+ allOptionsRadio = await page.find('q2-select >>> [test-id=allOptionsButton]');
2511
+ selectedOptionsRadio = await page.find('q2-select >>> [test-id=selectedOptionsButton]');
2512
+ selectedOptionsRadioLabel = await page.find('q2-select >>> [test-id=selectedOptionsButton] + label');
2513
+ allOptionsRadioLabel = await page.find('q2-select >>> [test-id=allOptionsButton] + label');
2514
+ await allOptionsRadio.focus();
2515
+ expect(options[0]).toHaveAttribute('active');
2516
+ expect(await popover.getProperty('open')).toBe(true);
2348
2517
  });
2349
- it('moves focus to first option on ArrowDown', async () => {
2350
- await allOptionsRadio.press('ArrowDown');
2351
- expect(await selectedOptionsRadio.getProperty('checked')).toEqual(true);
2518
+ describe('when all options button is focused', () => {
2519
+ beforeEach(async () => {
2520
+ await allOptionsRadioLabel.click();
2521
+ await page.waitForChanges();
2522
+ expect(await allOptionsRadio.getProperty('checked')).toEqual(true);
2523
+ });
2524
+ it('moves focus to first option on ArrowDown', async () => {
2525
+ await allOptionsRadio.press('ArrowDown');
2526
+ expect(await selectedOptionsRadio.getProperty('checked')).toEqual(true);
2527
+ });
2528
+ it('moves focus to first option on ArrowUp', async () => {
2529
+ await allOptionsRadio.press('ArrowUp');
2530
+ expect(await selectedOptionsRadio.getProperty('checked')).toEqual(true);
2531
+ });
2532
+ });
2533
+ describe('when selected options button is focused', () => {
2534
+ beforeEach(async () => {
2535
+ await selectedOptionsRadioLabel.click();
2536
+ await page.waitForChanges();
2537
+ expect(await selectedOptionsRadio.getProperty('checked')).toEqual(true);
2538
+ });
2539
+ it('moves focus to first option on ArrowDown', async () => {
2540
+ await selectedOptionsRadio.press('ArrowDown');
2541
+ expect(await allOptionsRadio.getProperty('checked')).toEqual(true);
2542
+ });
2543
+ it('moves focus to all options radio on ArrowUp', async () => {
2544
+ await selectedOptionsRadio.press('ArrowUp');
2545
+ expect(await allOptionsRadio.getProperty('checked')).toEqual(true);
2546
+ });
2352
2547
  });
2353
- it('moves focus to first option on ArrowUp', async () => {
2354
- await allOptionsRadio.press('ArrowUp');
2548
+ it('selects on Click', async () => {
2549
+ expect(await selectedOptionsRadio.getProperty('checked')).toEqual(false);
2550
+ await selectedOptionsRadioLabel.click();
2355
2551
  expect(await selectedOptionsRadio.getProperty('checked')).toEqual(true);
2552
+ expect(options[0]).toHaveAttribute('active');
2356
2553
  });
2357
2554
  });
2358
- describe('when selected options button is focused', () => {
2555
+ describe('when dropdown has focus', () => {
2359
2556
  beforeEach(async () => {
2360
- await selectedOptionsRadioLabel.click();
2557
+ await dispatchEvent(page, ['q2-select', 'q2-input'], 'keydown', {
2558
+ key: 'ArrowDown',
2559
+ });
2361
2560
  await page.waitForChanges();
2362
- expect(await selectedOptionsRadio.getProperty('checked')).toEqual(true);
2561
+ expect(await popover.getProperty('open')).toBe(true);
2562
+ expect(options[0]).toHaveAttribute('active');
2363
2563
  });
2364
- it('moves focus to first option on ArrowDown', async () => {
2365
- await selectedOptionsRadio.press('ArrowDown');
2366
- expect(await allOptionsRadio.getProperty('checked')).toEqual(true);
2564
+ const selectAndDeselectMultipleOptions = async (key) => {
2565
+ // Selecting second option
2566
+ await popover.press('ArrowDown');
2567
+ await page.waitForChanges();
2568
+ expect(options[1]).not.toHaveAttribute('selected');
2569
+ await popover.press(key);
2570
+ expect(options[1]).toHaveAttribute('selected');
2571
+ expect(await popover.getProperty('open')).toBe(true);
2572
+ expect(await input.getProperty('value')).toEqual('Option 2');
2573
+ expect(await select.getProperty('selectedOptions')).toEqual(['2']);
2574
+ expect(input).not.toHaveAttribute('badge-value');
2575
+ // Selecting fourth option
2576
+ await popover.press('ArrowDown');
2577
+ await popover.press('ArrowDown');
2578
+ expect(options[3]).toHaveAttribute('active');
2579
+ expect(options[3]).not.toHaveAttribute('selected');
2580
+ await popover.press(key);
2581
+ expect(options[3]).toHaveAttribute('selected');
2582
+ expect(options[3]).toHaveAttribute('active');
2583
+ expect(await popover.getProperty('open')).toBe(true);
2584
+ expect(await input.getProperty('value')).toEqual('Option 2');
2585
+ expect(await select.getProperty('selectedOptions')).toEqual(['2', '4']);
2586
+ expect(input).toEqualAttribute('badge-value', '+1');
2587
+ // Deselecting fourth option
2588
+ await popover.press(key);
2589
+ expect(options[3]).not.toHaveAttribute('selected');
2590
+ expect(options[3]).toHaveAttribute('active');
2591
+ expect(await popover.getProperty('open')).toBe(true);
2592
+ expect(await input.getProperty('value')).toEqual('Option 2');
2593
+ expect(await select.getProperty('selectedOptions')).toEqual(['2']);
2594
+ expect(input).not.toHaveAttribute('badge-value');
2595
+ // Selecting fifth option
2596
+ await popover.press('ArrowDown');
2597
+ expect(options[4]).toHaveAttribute('active');
2598
+ expect(options[4]).not.toHaveAttribute('selected');
2599
+ await popover.press(key);
2600
+ expect(options[4]).toHaveAttribute('selected');
2601
+ expect(await input.getProperty('value')).toEqual('Option 2');
2602
+ expect(await select.getProperty('selectedOptions')).toEqual(['2', '5']);
2603
+ expect(input).toEqualAttribute('badge-value', '+1');
2604
+ };
2605
+ it('can select and deselect multiple options via Space without closing dropdown', async () => {
2606
+ await selectAndDeselectMultipleOptions('Space');
2367
2607
  });
2368
- it('moves focus to all options radio on ArrowUp', async () => {
2369
- await selectedOptionsRadio.press('ArrowUp');
2370
- expect(await allOptionsRadio.getProperty('checked')).toEqual(true);
2608
+ it('selects and deselects option on Enter, without closing dropdown', async () => {
2609
+ await selectAndDeselectMultipleOptions('Enter');
2371
2610
  });
2372
2611
  });
2373
- it('selects on Click', async () => {
2374
- expect(await selectedOptionsRadio.getProperty('checked')).toEqual(false);
2375
- await selectedOptionsRadioLabel.click();
2376
- expect(await selectedOptionsRadio.getProperty('checked')).toEqual(true);
2377
- expect(options[0]).toHaveAttribute('active');
2378
- });
2379
- });
2380
- describe('when dropdown has focus', () => {
2381
- beforeEach(async () => {
2382
- await dispatchEvent(page, ['q2-select', 'q2-input'], 'keydown', {
2383
- key: 'ArrowDown',
2384
- });
2385
- await page.waitForChanges();
2386
- expect(await popover.getProperty('open')).toBe(true);
2387
- expect(options[0]).toHaveAttribute('active');
2388
- });
2389
- const selectAndDeselectMultipleOptions = async (key) => {
2390
- // Selecting second option
2391
- await popover.press('ArrowDown');
2392
- await page.waitForChanges();
2393
- expect(options[1]).not.toHaveAttribute('selected');
2394
- await popover.press(key);
2395
- expect(options[1]).toHaveAttribute('selected');
2396
- expect(await popover.getProperty('open')).toBe(true);
2397
- expect(await input.getProperty('value')).toEqual('Option 2');
2398
- expect(await select.getProperty('selectedOptions')).toEqual(['2']);
2399
- expect(input).not.toHaveAttribute('badge-value');
2400
- // Selecting fourth option
2401
- await popover.press('ArrowDown');
2402
- await popover.press('ArrowDown');
2403
- expect(options[3]).toHaveAttribute('active');
2404
- expect(options[3]).not.toHaveAttribute('selected');
2405
- await popover.press(key);
2406
- expect(options[3]).toHaveAttribute('selected');
2407
- expect(options[3]).toHaveAttribute('active');
2408
- expect(await popover.getProperty('open')).toBe(true);
2409
- expect(await input.getProperty('value')).toEqual('Option 2');
2410
- expect(await select.getProperty('selectedOptions')).toEqual(['2', '4']);
2411
- expect(input).toEqualAttribute('badge-value', '+1');
2412
- // Deselecting fourth option
2413
- await popover.press(key);
2414
- expect(options[3]).not.toHaveAttribute('selected');
2415
- expect(options[3]).toHaveAttribute('active');
2416
- expect(await popover.getProperty('open')).toBe(true);
2417
- expect(await input.getProperty('value')).toEqual('Option 2');
2418
- expect(await select.getProperty('selectedOptions')).toEqual(['2']);
2419
- expect(input).not.toHaveAttribute('badge-value');
2420
- // Selecting fifth option
2421
- await popover.press('ArrowDown');
2422
- expect(options[4]).toHaveAttribute('active');
2423
- expect(options[4]).not.toHaveAttribute('selected');
2424
- await popover.press(key);
2425
- expect(options[4]).toHaveAttribute('selected');
2426
- expect(await input.getProperty('value')).toEqual('Option 2');
2427
- expect(await select.getProperty('selectedOptions')).toEqual(['2', '5']);
2428
- expect(input).toEqualAttribute('badge-value', '+1');
2429
- };
2430
- it('can select and deselect multiple options via Space without closing dropdown', async () => {
2431
- await selectAndDeselectMultipleOptions('Space');
2432
- });
2433
- it('selects and deselects option on Enter, without closing dropdown', async () => {
2434
- await selectAndDeselectMultipleOptions('Enter');
2435
- });
2436
- });
2437
- });
2438
- });
2439
- describe('Updating option list', () => {
2440
- describe('when multiple is false', () => {
2441
- it('does not modify the value when the selected option is removed', async () => {
2442
- page = await setup({
2443
- html: `
2444
- <q2-select label="States" value="AK">
2445
- <q2-option value="AL" display="Alabama">Alabama</q2-option>
2446
- <q2-option value="AZ" display="Arizona">Arizona</q2-option>
2447
- <q2-option value="AR" display="Arkansas">Arkansas</q2-option>
2448
- <q2-option value="AK" display="Alaska" selected>Alaska</q2-option>
2449
- </q2-select>
2450
- `,
2451
- });
2452
- select = await page.find('q2-select');
2453
- input = await page.find('q2-select >>> q2-input');
2454
- const alaskaSelector = 'q2-option[value="AK"]';
2455
- let option = await page.find(alaskaSelector);
2456
- expect(option).toHaveAttribute('selected');
2457
- expect(await select.getProperty('value')).toEqual('AK');
2458
- expect(await input.getProperty('value')).toEqual('Alaska');
2459
- await page.$eval(alaskaSelector, element => element.remove());
2460
- await page.waitForChanges();
2461
- option = await page.find(alaskaSelector);
2462
- expect(option).toBeNull();
2463
- expect(await select.getProperty('value')).toEqual('AK');
2464
- expect(await input.getProperty('value')).toEqual('Alaska');
2465
- });
2466
- it('marks a newly added option as selected if it matches the value', async () => {
2467
- page = await setup({
2468
- html: `
2469
- <q2-select label="States" value="CA">
2470
- <q2-option value="AL" display="Alabama">Alabama</q2-option>
2471
- <q2-option value="AZ" display="Arizona">Arizona</q2-option>
2472
- <q2-option value="AR" display="Arkansas">Arkansas</q2-option>
2473
- <q2-option value="AK" display="Alaska" selected>Alaska</q2-option>
2474
- </q2-select>
2475
- `,
2476
- });
2477
- await page.waitForChanges();
2478
- select = await page.find('q2-select');
2479
- input = await page.find('q2-select >>> q2-input');
2480
- await page.waitForChanges();
2481
- expect(await select.getProperty('value')).toEqual('CA');
2482
- expect(await input.getProperty('value')).toEqual('CA');
2483
- await page.evaluate(() => {
2484
- const option = document.createElement('q2-option');
2485
- option.value = 'CA';
2486
- option.display = 'California';
2487
- option.textContent = 'California';
2488
- return document.querySelector('q2-select').appendChild(option);
2489
- });
2490
- await page.waitForChanges();
2491
- const californiaSelector = 'q2-option[value="CA"]';
2492
- const option = await page.find(californiaSelector);
2493
- expect(option).toHaveAttribute('selected');
2494
- expect(await select.getProperty('value')).toEqual('CA');
2495
- expect(await input.getProperty('value')).toEqual('CA');
2496
- });
2497
- });
2498
- describe('when multiple is true', () => {
2499
- it('does not modify selectedOptions when a selected option is removed', async () => {
2500
- page = await setup({
2501
- html: `
2502
- <q2-select label="States" multiple>
2503
- <q2-option value="AL" display="Alabama">Alabama</q2-option>
2504
- <q2-option value="AZ" display="Arizona">Arizona</q2-option>
2505
- <q2-option value="AR" display="Arkansas">Arkansas</q2-option>
2506
- <q2-option value="AK" display="Alaska">Alaska</q2-option>
2507
- </q2-select>
2508
- `,
2509
- });
2510
- select = await page.find('q2-select');
2511
- input = await page.find('q2-select >>> q2-input');
2512
- options = await page.findAll('q2-option');
2513
- await select.setProperty('selectedOptions', ['AL', 'AZ']);
2514
- await page.waitForChanges();
2515
- let selectedOptions = await page.findAll('q2-option[selected]');
2516
- expect(selectedOptions.length).toBe(2);
2517
- expect(options.length).toBe(4);
2518
- expect(await input.getProperty('value')).toEqual('Alabama');
2519
- const alabamaSelector = 'q2-option[value="AL"]';
2520
- await page.$eval(alabamaSelector, element => element.remove());
2521
- await page.waitForChanges();
2522
- const alabamaOption = await page.find(alabamaSelector);
2523
- expect(alabamaOption).toBeNull();
2524
- expect(await select.getProperty('selectedOptions')).toEqual(['AL', 'AZ']);
2525
- expect(await input.getProperty('value')).toEqual('Alabama');
2526
- options = await page.findAll('q2-option');
2527
- expect(options.length).toBe(3);
2528
- selectedOptions = await page.findAll('q2-option[selected]');
2529
- expect(selectedOptions.length).toBe(1);
2530
- });
2531
- it('marks a newly added option as selected if it matches a selectedOptions value', async () => {
2532
- page = await setup({
2533
- html: `
2534
- <q2-select label="States" multiple>
2535
- <q2-option value="AL" display="Alabama">Alabama</q2-option>
2536
- <q2-option value="AZ" display="Arizona">Arizona</q2-option>
2537
- <q2-option value="AR" display="Arkansas">Arkansas</q2-option>
2538
- <q2-option value="AK" display="Alaska" selected>Alaska</q2-option>
2539
- </q2-select>
2540
- `,
2541
- });
2542
- select = await page.find('q2-select');
2543
- input = await page.find('q2-select >>> q2-input');
2544
- options = await page.findAll('q2-option');
2545
- await select.setProperty('selectedOptions', ['AL', 'CA']);
2546
- await page.waitForChanges();
2547
- let selectedOptions = await page.findAll('q2-option[selected]');
2548
- expect(selectedOptions.length).toBe(1);
2549
- expect(options.length).toBe(4);
2550
- expect(await input.getProperty('value')).toEqual('Alabama');
2551
- await page.evaluate(() => {
2552
- const option = document.createElement('q2-option');
2553
- option.value = 'CA';
2554
- option.display = 'California';
2555
- option.textContent = 'California';
2556
- return document.querySelector('q2-select').appendChild(option);
2557
- });
2558
- await page.waitForChanges();
2559
- const californiaSelector = 'q2-option[value="CA"]';
2560
- const option = await page.find(californiaSelector);
2561
- expect(option).toHaveAttribute('selected');
2562
- expect(await select.getProperty('selectedOptions')).toEqual(['AL', 'CA']);
2563
- expect(await input.getProperty('value')).toEqual('Alabama');
2564
- options = await page.findAll('q2-option');
2565
- expect(options.length).toBe(5);
2566
- selectedOptions = await page.findAll('q2-option[selected]');
2567
- expect(selectedOptions.length).toBe(2);
2568
- });
2569
- });
2570
- });
2571
- describe('Accessibility', () => {
2572
- it("option-list should have a role of 'listbox' and the options a role of 'option'", async () => {
2573
- page = await setup({
2574
- html: `
2575
- <q2-select label="My select">
2576
- <q2-option value="option-1" display="Option 1">Option 1</q2-option>
2577
- <q2-option value="option-2" display="Option 2">Option 2</q2-option>
2578
- <q2-option value="option-3" display="Option 3">Option 3</q2-option>
2579
- </q2-select>
2580
- `,
2581
- });
2582
- input = await page.find('q2-select >>> q2-input');
2583
- await input.click();
2584
- await page.waitForChanges();
2585
- popover = await page.find('q2-select >>> q2-popover');
2586
- expect(await popover.getProperty('open')).toEqual(true);
2587
- const snapshot = await page.accessibility.snapshot();
2588
- const optionList = snapshot.children[2];
2589
- expect(optionList.role).toEqual('listbox');
2590
- expect(optionList.children).toHaveLength(3);
2591
- optionList.children.forEach(child => {
2592
- expect(child.role).toEqual('option');
2593
- expect(child.name).toBeTruthy();
2594
2612
  });
2595
2613
  });
2614
+ describe('Other', () => { });
2596
2615
  });
2597
2616
  });
2598
2617
  //# sourceMappingURL=q2-select-test.e2e.js.map