@ukic/web-components 2.10.0 → 2.12.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (516) hide show
  1. package/dist/cjs/core.cjs.js +3 -3
  2. package/dist/cjs/core.cjs.js.map +1 -1
  3. package/dist/cjs/{helpers-3f91f63a.js → helpers-56e80cc9.js} +6 -6
  4. package/dist/cjs/{helpers-3f91f63a.js.map → helpers-56e80cc9.js.map} +1 -1
  5. package/dist/cjs/ic-accordion-group.cjs.entry.js +1 -1
  6. package/dist/cjs/ic-accordion.cjs.entry.js +2 -2
  7. package/dist/cjs/ic-alert.cjs.entry.js +3 -3
  8. package/dist/cjs/ic-alert.cjs.entry.js.map +1 -1
  9. package/dist/cjs/ic-back-to-top.cjs.entry.js +5 -9
  10. package/dist/cjs/ic-back-to-top.cjs.entry.js.map +1 -1
  11. package/dist/cjs/ic-badge.cjs.entry.js +2 -2
  12. package/dist/cjs/ic-breadcrumb-group.cjs.entry.js +2 -2
  13. package/dist/cjs/ic-breadcrumb.cjs.entry.js +2 -2
  14. package/dist/cjs/ic-button_3.cjs.entry.js +62 -33
  15. package/dist/cjs/ic-button_3.cjs.entry.js.map +1 -1
  16. package/dist/cjs/ic-card.cjs.entry.js +2 -2
  17. package/dist/cjs/ic-checkbox-group.cjs.entry.js +2 -2
  18. package/dist/cjs/ic-checkbox.cjs.entry.js +2 -2
  19. package/dist/cjs/ic-chip.cjs.entry.js +2 -2
  20. package/dist/cjs/ic-classification-banner.cjs.entry.js +1 -1
  21. package/dist/cjs/ic-data-entity.cjs.entry.js +1 -1
  22. package/dist/cjs/ic-data-row.cjs.entry.js +2 -2
  23. package/dist/cjs/ic-dialog.cjs.entry.js +2 -2
  24. package/dist/cjs/ic-divider.cjs.entry.js +2 -2
  25. package/dist/cjs/ic-empty-state.cjs.entry.js +2 -2
  26. package/dist/cjs/ic-footer-link-group.cjs.entry.js +2 -2
  27. package/dist/cjs/ic-footer-link.cjs.entry.js +3 -3
  28. package/dist/cjs/ic-footer-link.cjs.entry.js.map +1 -1
  29. package/dist/cjs/ic-footer.cjs.entry.js +3 -3
  30. package/dist/cjs/ic-footer.cjs.entry.js.map +1 -1
  31. package/dist/cjs/ic-hero.cjs.entry.js +2 -2
  32. package/dist/cjs/ic-horizontal-scroll.cjs.entry.js +2 -2
  33. package/dist/cjs/ic-input-component-container_3.cjs.entry.js +2 -2
  34. package/dist/cjs/ic-input-component-container_3.cjs.entry.js.map +1 -1
  35. package/dist/cjs/ic-input-label_2.cjs.entry.js +2 -2
  36. package/dist/cjs/ic-link.cjs.entry.js +2 -2
  37. package/dist/cjs/ic-menu-group.cjs.entry.js +2 -2
  38. package/dist/cjs/ic-menu-item.cjs.entry.js +3 -3
  39. package/dist/cjs/ic-menu-item.cjs.entry.js.map +1 -1
  40. package/dist/cjs/ic-navigation-button.cjs.entry.js +2 -2
  41. package/dist/cjs/ic-navigation-group.cjs.entry.js +6 -9
  42. package/dist/cjs/ic-navigation-group.cjs.entry.js.map +1 -1
  43. package/dist/cjs/ic-navigation-item.cjs.entry.js +2 -2
  44. package/dist/cjs/ic-navigation-item.cjs.entry.js.map +1 -1
  45. package/dist/cjs/ic-navigation-menu.cjs.entry.js +2 -2
  46. package/dist/cjs/ic-page-header.cjs.entry.js +3 -3
  47. package/dist/cjs/ic-page-header.cjs.entry.js.map +1 -1
  48. package/dist/cjs/ic-pagination-item.cjs.entry.js +2 -2
  49. package/dist/cjs/ic-pagination.cjs.entry.js +2 -2
  50. package/dist/cjs/ic-popover-menu.cjs.entry.js +11 -5
  51. package/dist/cjs/ic-popover-menu.cjs.entry.js.map +1 -1
  52. package/dist/cjs/ic-radio-group.cjs.entry.js +2 -2
  53. package/dist/cjs/ic-radio-option.cjs.entry.js +2 -2
  54. package/dist/cjs/ic-search-bar.cjs.entry.js +2 -2
  55. package/dist/cjs/ic-section-container.cjs.entry.js +1 -1
  56. package/dist/cjs/ic-select.cjs.entry.js +2 -2
  57. package/dist/cjs/ic-side-navigation.cjs.entry.js +39 -62
  58. package/dist/cjs/ic-side-navigation.cjs.entry.js.map +1 -1
  59. package/dist/cjs/ic-skeleton.cjs.entry.js +1 -1
  60. package/dist/cjs/ic-status-tag.cjs.entry.js +4 -3
  61. package/dist/cjs/ic-status-tag.cjs.entry.js.map +1 -1
  62. package/dist/cjs/ic-step.cjs.entry.js +2 -2
  63. package/dist/cjs/ic-stepper.cjs.entry.js +2 -2
  64. package/dist/cjs/ic-switch.cjs.entry.js +2 -2
  65. package/dist/cjs/ic-tab-context.cjs.entry.js +1 -1
  66. package/dist/cjs/ic-tab-group.cjs.entry.js +2 -2
  67. package/dist/cjs/ic-tab-panel.cjs.entry.js +2 -2
  68. package/dist/cjs/ic-tab.cjs.entry.js +2 -2
  69. package/dist/cjs/ic-text-field.cjs.entry.js +49 -12
  70. package/dist/cjs/ic-text-field.cjs.entry.js.map +1 -1
  71. package/dist/cjs/ic-theme.cjs.entry.js +2 -2
  72. package/dist/cjs/ic-toast-region.cjs.entry.js +1 -1
  73. package/dist/cjs/ic-toast.cjs.entry.js +13 -16
  74. package/dist/cjs/ic-toast.cjs.entry.js.map +1 -1
  75. package/dist/cjs/ic-toggle-button.cjs.entry.js +69 -0
  76. package/dist/cjs/ic-toggle-button.cjs.entry.js.map +1 -0
  77. package/dist/cjs/ic-top-navigation.cjs.entry.js +4 -3
  78. package/dist/cjs/ic-top-navigation.cjs.entry.js.map +1 -1
  79. package/dist/cjs/ic-typography.cjs.entry.js +2 -2
  80. package/dist/cjs/{index-152d1fe5.js → index-f982899d.js} +6 -12
  81. package/dist/cjs/index-f982899d.js.map +1 -0
  82. package/dist/cjs/loader.cjs.js +2 -2
  83. package/dist/collection/collection-manifest.json +3 -2
  84. package/dist/collection/components/ic-accordion/ic-accordion.js.map +1 -1
  85. package/dist/collection/components/ic-accordion-group/ic-accordion-group.js.map +1 -1
  86. package/dist/collection/components/ic-alert/ic-alert.css +0 -1
  87. package/dist/collection/components/ic-back-to-top/ic-back-to-top.js +3 -7
  88. package/dist/collection/components/ic-back-to-top/ic-back-to-top.js.map +1 -1
  89. package/dist/collection/components/ic-badge/ic-badge.js.map +1 -1
  90. package/dist/collection/components/ic-breadcrumb/ic-breadcrumb.js.map +1 -1
  91. package/dist/collection/components/ic-breadcrumb-group/ic-breadcrumb-group.js.map +1 -1
  92. package/dist/collection/components/ic-button/ic-button.css +11 -1
  93. package/dist/collection/components/ic-button/ic-button.js +28 -3
  94. package/dist/collection/components/ic-button/ic-button.js.map +1 -1
  95. package/dist/collection/components/ic-card/ic-card.js.map +1 -1
  96. package/dist/collection/components/ic-checkbox/ic-checkbox.js.map +1 -1
  97. package/dist/collection/components/ic-checkbox-group/ic-checkbox-group.js.map +1 -1
  98. package/dist/collection/components/ic-chip/ic-chip.js.map +1 -1
  99. package/dist/collection/components/ic-data-entity/ic-data-entity.js.map +1 -1
  100. package/dist/collection/components/ic-data-row/ic-data-row.js.map +1 -1
  101. package/dist/collection/components/ic-dialog/ic-dialog.js.map +1 -1
  102. package/dist/collection/components/ic-footer/ic-footer.js +1 -1
  103. package/dist/collection/components/ic-footer/ic-footer.js.map +1 -1
  104. package/dist/collection/components/ic-footer-link/ic-footer-link.css +2 -3
  105. package/dist/collection/components/ic-footer-link/ic-footer-link.js.map +1 -1
  106. package/dist/collection/components/ic-footer-link-group/ic-footer-link-group.js.map +1 -1
  107. package/dist/collection/components/ic-hero/ic-hero.js.map +1 -1
  108. package/dist/collection/components/ic-horizontal-scroll/ic-horizontal-scroll.js.map +1 -1
  109. package/dist/collection/components/ic-link/ic-link.js.map +1 -1
  110. package/dist/collection/components/ic-loading-indicator/ic-loading-indicator.js.map +1 -1
  111. package/dist/collection/components/ic-menu/ic-menu.js.map +1 -1
  112. package/dist/collection/components/ic-menu-item/ic-menu-item.css +16 -16
  113. package/dist/collection/components/ic-menu-item/ic-menu-item.js.map +1 -1
  114. package/dist/collection/components/ic-navigation-button/ic-navigation-button.js.map +1 -1
  115. package/dist/collection/components/ic-navigation-group/ic-navigation-group.js +4 -7
  116. package/dist/collection/components/ic-navigation-group/ic-navigation-group.js.map +1 -1
  117. package/dist/collection/components/ic-navigation-item/ic-navigation-item.css +28 -7
  118. package/dist/collection/components/ic-navigation-item/ic-navigation-item.js.map +1 -1
  119. package/dist/collection/components/ic-navigation-menu/ic-navigation-menu.js.map +1 -1
  120. package/dist/collection/components/ic-page-header/ic-page-header.css +1 -1
  121. package/dist/collection/components/ic-page-header/ic-page-header.js.map +1 -1
  122. package/dist/collection/components/ic-pagination/ic-pagination.js.map +1 -1
  123. package/dist/collection/components/ic-pagination/test/a11y/ic-pagination.test.a11y.js +8 -1
  124. package/dist/collection/components/ic-pagination/test/a11y/ic-pagination.test.a11y.js.map +1 -1
  125. package/dist/collection/components/ic-popover-menu/ic-popover-menu.js +9 -3
  126. package/dist/collection/components/ic-popover-menu/ic-popover-menu.js.map +1 -1
  127. package/dist/collection/components/ic-popover-menu/test/basic/ic-popover-menu.spec.js +3 -0
  128. package/dist/collection/components/ic-popover-menu/test/basic/ic-popover-menu.spec.js.map +1 -1
  129. package/dist/collection/components/ic-radio-group/ic-radio-group.js.map +1 -1
  130. package/dist/collection/components/ic-radio-option/ic-radio-option.js.map +1 -1
  131. package/dist/collection/components/ic-search-bar/ic-search-bar.js.map +1 -1
  132. package/dist/collection/components/ic-search-bar/test/a11y/ic-search-bar.test.a11y.js +8 -1
  133. package/dist/collection/components/ic-search-bar/test/a11y/ic-search-bar.test.a11y.js.map +1 -1
  134. package/dist/collection/components/ic-search-bar/test/basic/ic-search-bar.e2e.js.map +1 -1
  135. package/dist/collection/components/ic-select/ic-select.js.map +1 -1
  136. package/dist/collection/components/ic-side-navigation/ic-side-navigation.js +41 -61
  137. package/dist/collection/components/ic-side-navigation/ic-side-navigation.js.map +1 -1
  138. package/dist/collection/components/ic-skeleton/ic-skeleton.js.map +1 -1
  139. package/dist/collection/components/ic-status-tag/ic-status-tag.css +9 -0
  140. package/dist/collection/components/ic-status-tag/ic-status-tag.js +1 -0
  141. package/dist/collection/components/ic-status-tag/ic-status-tag.js.map +1 -1
  142. package/dist/collection/components/ic-step/ic-step.js.map +1 -1
  143. package/dist/collection/components/ic-stepper/ic-stepper.js.map +1 -1
  144. package/dist/collection/components/ic-stepper/test/basic/ic-stepper.spec.js.map +1 -1
  145. package/dist/collection/components/ic-switch/ic-switch.js.map +1 -1
  146. package/dist/collection/components/ic-tab/ic-tab.js.map +1 -1
  147. package/dist/collection/components/ic-tab-context/ic-tab-context.js.map +1 -1
  148. package/dist/collection/components/ic-tab-panel/ic-tab-panel.js.map +1 -1
  149. package/dist/collection/components/ic-text-field/ic-text-field.js +87 -11
  150. package/dist/collection/components/ic-text-field/ic-text-field.js.map +1 -1
  151. package/dist/collection/components/ic-text-field/test/basic/ic-text-field.input.spec.js +20 -0
  152. package/dist/collection/components/ic-text-field/test/basic/ic-text-field.input.spec.js.map +1 -1
  153. package/dist/collection/components/ic-theme/ic-theme.js.map +1 -1
  154. package/dist/collection/components/ic-toast/ic-toast.js +11 -14
  155. package/dist/collection/components/ic-toast/ic-toast.js.map +1 -1
  156. package/dist/collection/components/ic-toast-region/ic-toast-region.js.map +1 -1
  157. package/dist/collection/components/ic-toggle-button/ic-toggle-button.css +555 -0
  158. package/dist/collection/components/ic-toggle-button/ic-toggle-button.js +291 -0
  159. package/dist/collection/components/ic-toggle-button/ic-toggle-button.js.map +1 -0
  160. package/dist/collection/components/ic-toggle-button/test/basic/ic-toggle-button.spec.js +116 -0
  161. package/dist/collection/components/ic-toggle-button/test/basic/ic-toggle-button.spec.js.map +1 -0
  162. package/dist/collection/components/ic-tooltip/ic-tooltip.js +32 -27
  163. package/dist/collection/components/ic-tooltip/ic-tooltip.js.map +1 -1
  164. package/dist/collection/components/ic-tooltip/test/basic/ic-tooltip.spec.js +11 -0
  165. package/dist/collection/components/ic-tooltip/test/basic/ic-tooltip.spec.js.map +1 -1
  166. package/dist/collection/components/ic-top-navigation/ic-top-navigation.js +2 -1
  167. package/dist/collection/components/ic-top-navigation/ic-top-navigation.js.map +1 -1
  168. package/dist/collection/components/ic-typography/ic-typography.js.map +1 -1
  169. package/dist/collection/utils/helpers.js +5 -5
  170. package/dist/collection/utils/helpers.js.map +1 -1
  171. package/dist/components/helpers.js +5 -5
  172. package/dist/components/ic-alert2.js +1 -1
  173. package/dist/components/ic-alert2.js.map +1 -1
  174. package/dist/components/ic-back-to-top.js +3 -7
  175. package/dist/components/ic-back-to-top.js.map +1 -1
  176. package/dist/components/ic-button2.js +28 -4
  177. package/dist/components/ic-button2.js.map +1 -1
  178. package/dist/components/ic-footer-link.js +1 -1
  179. package/dist/components/ic-footer-link.js.map +1 -1
  180. package/dist/components/ic-footer.js +1 -1
  181. package/dist/components/ic-footer.js.map +1 -1
  182. package/dist/components/ic-menu-item2.js +1 -1
  183. package/dist/components/ic-menu-item2.js.map +1 -1
  184. package/dist/components/ic-menu2.js.map +1 -1
  185. package/dist/components/ic-navigation-group.js +4 -7
  186. package/dist/components/ic-navigation-group.js.map +1 -1
  187. package/dist/components/ic-navigation-item.js.map +1 -1
  188. package/dist/components/ic-page-header.js +1 -1
  189. package/dist/components/ic-page-header.js.map +1 -1
  190. package/dist/components/ic-popover-menu.js +9 -3
  191. package/dist/components/ic-popover-menu.js.map +1 -1
  192. package/dist/components/ic-side-navigation.js +40 -61
  193. package/dist/components/ic-side-navigation.js.map +1 -1
  194. package/dist/components/ic-status-tag.js +2 -1
  195. package/dist/components/ic-status-tag.js.map +1 -1
  196. package/dist/components/ic-text-field2.js +52 -10
  197. package/dist/components/ic-text-field2.js.map +1 -1
  198. package/dist/components/ic-toast.js +11 -14
  199. package/dist/components/ic-toast.js.map +1 -1
  200. package/dist/components/ic-toggle-button.d.ts +11 -0
  201. package/dist/components/ic-toggle-button.js +117 -0
  202. package/dist/components/ic-toggle-button.js.map +1 -0
  203. package/dist/components/ic-tooltip2.js +32 -27
  204. package/dist/components/ic-tooltip2.js.map +1 -1
  205. package/dist/components/ic-top-navigation.js +2 -1
  206. package/dist/components/ic-top-navigation.js.map +1 -1
  207. package/dist/core/core.esm.js +1 -1
  208. package/dist/core/core.esm.js.map +1 -1
  209. package/dist/core/{p-daebb58a.entry.js → p-003c44bd.entry.js} +2 -2
  210. package/dist/core/{p-b6a575c3.entry.js → p-049bf5e3.entry.js} +2 -2
  211. package/dist/core/p-0713230f.entry.js +2 -0
  212. package/dist/core/p-0713230f.entry.js.map +1 -0
  213. package/dist/core/{p-ea17e371.entry.js → p-0a0b748c.entry.js} +2 -2
  214. package/dist/core/{p-d18450f9.entry.js → p-0d2eb765.entry.js} +2 -2
  215. package/dist/core/{p-6d3f9501.entry.js → p-0ee13da0.entry.js} +2 -2
  216. package/dist/core/{p-15466b42.entry.js → p-1145e33c.entry.js} +2 -2
  217. package/dist/core/{p-056f8a67.entry.js → p-171e25c9.entry.js} +2 -2
  218. package/dist/core/{p-c2452388.entry.js → p-19c28c65.entry.js} +2 -2
  219. package/dist/core/p-19c28c65.entry.js.map +1 -0
  220. package/dist/core/{p-51f9f329.entry.js → p-1e809ecd.entry.js} +2 -2
  221. package/dist/core/p-1e809ecd.entry.js.map +1 -0
  222. package/dist/core/{p-85026377.entry.js → p-23980b58.entry.js} +2 -2
  223. package/dist/core/p-23980b58.entry.js.map +1 -0
  224. package/dist/core/{p-ad36a704.entry.js → p-26334b3a.entry.js} +2 -2
  225. package/dist/core/{p-dbb5b008.entry.js → p-29b812c0.entry.js} +2 -2
  226. package/dist/core/{p-b9736cf4.entry.js → p-2e7f22af.entry.js} +2 -2
  227. package/dist/core/{p-5f9d69ef.entry.js → p-32a480d5.entry.js} +2 -2
  228. package/dist/core/p-32a480d5.entry.js.map +1 -0
  229. package/dist/core/{p-94e88827.entry.js → p-330e1439.entry.js} +2 -2
  230. package/dist/core/p-330e1439.entry.js.map +1 -0
  231. package/dist/core/{p-aa0a9870.entry.js → p-357eaebe.entry.js} +2 -2
  232. package/dist/core/{p-9639e33f.entry.js → p-38bf02aa.entry.js} +2 -2
  233. package/dist/core/{p-b99f9e89.entry.js → p-3c752bca.entry.js} +2 -2
  234. package/dist/core/{p-3a0ef91e.entry.js → p-3cc52cbc.entry.js} +2 -2
  235. package/dist/core/{p-592c783e.entry.js → p-3ebe5fa3.entry.js} +2 -2
  236. package/dist/core/p-3ebe5fa3.entry.js.map +1 -0
  237. package/dist/core/{p-5c7e339f.entry.js → p-3f07c471.entry.js} +2 -2
  238. package/dist/core/p-3f07c471.entry.js.map +1 -0
  239. package/dist/core/{p-c770e7a2.entry.js → p-42c0e318.entry.js} +2 -2
  240. package/dist/core/{p-2b24b4bf.entry.js → p-4421203e.entry.js} +2 -2
  241. package/dist/core/{p-11736fbe.entry.js → p-4f1792a6.entry.js} +2 -2
  242. package/dist/core/{p-b39ecae2.entry.js → p-4f8b7aa3.entry.js} +2 -2
  243. package/dist/core/{p-8a83f391.entry.js → p-525323ab.entry.js} +2 -2
  244. package/dist/core/{p-e9738c74.entry.js → p-59c4bc0a.entry.js} +2 -2
  245. package/dist/core/{p-60c4604f.entry.js → p-5e6ad4a5.entry.js} +2 -2
  246. package/dist/core/{p-60c4604f.entry.js.map → p-5e6ad4a5.entry.js.map} +1 -1
  247. package/dist/core/{p-95a864bf.js → p-671b7cac.js} +1 -1
  248. package/dist/core/p-6b5e91e2.js +3 -0
  249. package/dist/core/p-6b5e91e2.js.map +1 -0
  250. package/dist/core/p-6bbe0550.entry.js +2 -0
  251. package/dist/core/p-6bbe0550.entry.js.map +1 -0
  252. package/dist/core/{p-fdb4b48f.entry.js → p-783c2ced.entry.js} +2 -2
  253. package/dist/core/{p-f2e6b9ef.entry.js → p-7b720034.entry.js} +2 -2
  254. package/dist/core/{p-22c024ee.entry.js → p-7c724f2c.entry.js} +2 -2
  255. package/dist/core/{p-335fc5e4.entry.js → p-8146336b.entry.js} +2 -2
  256. package/dist/core/{p-cd8de4c5.entry.js → p-8931210a.entry.js} +2 -2
  257. package/dist/core/{p-529d8955.entry.js → p-8a66cab4.entry.js} +2 -2
  258. package/dist/core/{p-ca48e97a.entry.js → p-8be3ec3d.entry.js} +2 -2
  259. package/dist/core/{p-180e36b1.entry.js → p-8c2322a9.entry.js} +2 -2
  260. package/dist/core/{p-31969be6.entry.js → p-8f97463f.entry.js} +2 -2
  261. package/dist/core/p-8f97463f.entry.js.map +1 -0
  262. package/dist/core/{p-edd29edc.entry.js → p-9184e385.entry.js} +2 -2
  263. package/dist/core/p-9808f7c9.entry.js +2 -0
  264. package/dist/core/p-9808f7c9.entry.js.map +1 -0
  265. package/dist/core/p-9e4c8a09.entry.js +2 -0
  266. package/dist/core/p-9e4c8a09.entry.js.map +1 -0
  267. package/dist/core/{p-366bcb17.entry.js → p-9ee138e7.entry.js} +2 -2
  268. package/dist/core/{p-15ef0674.entry.js → p-b74f92b6.entry.js} +2 -2
  269. package/dist/core/p-b74f92b6.entry.js.map +1 -0
  270. package/dist/core/{p-e5abfadd.entry.js → p-b7a2e604.entry.js} +2 -2
  271. package/dist/core/p-bb1a0018.entry.js +2 -0
  272. package/dist/core/p-bb1a0018.entry.js.map +1 -0
  273. package/dist/core/{p-b0088956.entry.js → p-bb41b637.entry.js} +2 -2
  274. package/dist/core/{p-a46130c8.entry.js → p-bf93455b.entry.js} +2 -2
  275. package/dist/core/{p-a46130c8.entry.js.map → p-bf93455b.entry.js.map} +1 -1
  276. package/dist/core/p-c1109ec7.entry.js +2 -0
  277. package/dist/core/p-c1109ec7.entry.js.map +1 -0
  278. package/dist/core/{p-cfc930f6.entry.js → p-c75d6022.entry.js} +2 -2
  279. package/dist/core/{p-f0809037.entry.js → p-c786d62f.entry.js} +2 -2
  280. package/dist/core/{p-edec0936.entry.js → p-c7a08024.entry.js} +2 -2
  281. package/dist/core/{p-6eb0421d.entry.js → p-cf798ea7.entry.js} +2 -2
  282. package/dist/core/{p-a908e7a9.entry.js → p-d3e54a29.entry.js} +2 -2
  283. package/dist/core/{p-287ab47c.entry.js → p-de87d585.entry.js} +2 -2
  284. package/dist/core/{p-15624e08.entry.js → p-e4d827d4.entry.js} +2 -2
  285. package/dist/core/{p-765bdd98.entry.js → p-e9723eaa.entry.js} +2 -2
  286. package/dist/core/{p-498eb7ad.entry.js → p-eb2d06c1.entry.js} +2 -2
  287. package/dist/esm/core.js +4 -4
  288. package/dist/esm/core.js.map +1 -1
  289. package/dist/esm/{helpers-c597f246.js → helpers-821dcdf2.js} +6 -6
  290. package/dist/esm/{helpers-c597f246.js.map → helpers-821dcdf2.js.map} +1 -1
  291. package/dist/esm/ic-accordion-group.entry.js +1 -1
  292. package/dist/esm/ic-accordion.entry.js +2 -2
  293. package/dist/esm/ic-alert.entry.js +3 -3
  294. package/dist/esm/ic-alert.entry.js.map +1 -1
  295. package/dist/esm/ic-back-to-top.entry.js +5 -9
  296. package/dist/esm/ic-back-to-top.entry.js.map +1 -1
  297. package/dist/esm/ic-badge.entry.js +2 -2
  298. package/dist/esm/ic-breadcrumb-group.entry.js +2 -2
  299. package/dist/esm/ic-breadcrumb.entry.js +2 -2
  300. package/dist/esm/ic-button_3.entry.js +62 -33
  301. package/dist/esm/ic-button_3.entry.js.map +1 -1
  302. package/dist/esm/ic-card.entry.js +2 -2
  303. package/dist/esm/ic-checkbox-group.entry.js +2 -2
  304. package/dist/esm/ic-checkbox.entry.js +2 -2
  305. package/dist/esm/ic-chip.entry.js +2 -2
  306. package/dist/esm/ic-classification-banner.entry.js +1 -1
  307. package/dist/esm/ic-data-entity.entry.js +1 -1
  308. package/dist/esm/ic-data-row.entry.js +2 -2
  309. package/dist/esm/ic-dialog.entry.js +2 -2
  310. package/dist/esm/ic-divider.entry.js +2 -2
  311. package/dist/esm/ic-empty-state.entry.js +2 -2
  312. package/dist/esm/ic-footer-link-group.entry.js +2 -2
  313. package/dist/esm/ic-footer-link.entry.js +3 -3
  314. package/dist/esm/ic-footer-link.entry.js.map +1 -1
  315. package/dist/esm/ic-footer.entry.js +3 -3
  316. package/dist/esm/ic-footer.entry.js.map +1 -1
  317. package/dist/esm/ic-hero.entry.js +2 -2
  318. package/dist/esm/ic-horizontal-scroll.entry.js +2 -2
  319. package/dist/esm/ic-input-component-container_3.entry.js +2 -2
  320. package/dist/esm/ic-input-component-container_3.entry.js.map +1 -1
  321. package/dist/esm/ic-input-label_2.entry.js +2 -2
  322. package/dist/esm/ic-link.entry.js +2 -2
  323. package/dist/esm/ic-menu-group.entry.js +2 -2
  324. package/dist/esm/ic-menu-item.entry.js +3 -3
  325. package/dist/esm/ic-menu-item.entry.js.map +1 -1
  326. package/dist/esm/ic-navigation-button.entry.js +2 -2
  327. package/dist/esm/ic-navigation-group.entry.js +6 -9
  328. package/dist/esm/ic-navigation-group.entry.js.map +1 -1
  329. package/dist/esm/ic-navigation-item.entry.js +2 -2
  330. package/dist/esm/ic-navigation-item.entry.js.map +1 -1
  331. package/dist/esm/ic-navigation-menu.entry.js +2 -2
  332. package/dist/esm/ic-page-header.entry.js +3 -3
  333. package/dist/esm/ic-page-header.entry.js.map +1 -1
  334. package/dist/esm/ic-pagination-item.entry.js +2 -2
  335. package/dist/esm/ic-pagination.entry.js +2 -2
  336. package/dist/esm/ic-popover-menu.entry.js +11 -5
  337. package/dist/esm/ic-popover-menu.entry.js.map +1 -1
  338. package/dist/esm/ic-radio-group.entry.js +2 -2
  339. package/dist/esm/ic-radio-option.entry.js +2 -2
  340. package/dist/esm/ic-search-bar.entry.js +2 -2
  341. package/dist/esm/ic-section-container.entry.js +1 -1
  342. package/dist/esm/ic-select.entry.js +2 -2
  343. package/dist/esm/ic-side-navigation.entry.js +39 -62
  344. package/dist/esm/ic-side-navigation.entry.js.map +1 -1
  345. package/dist/esm/ic-skeleton.entry.js +1 -1
  346. package/dist/esm/ic-status-tag.entry.js +4 -3
  347. package/dist/esm/ic-status-tag.entry.js.map +1 -1
  348. package/dist/esm/ic-step.entry.js +2 -2
  349. package/dist/esm/ic-stepper.entry.js +2 -2
  350. package/dist/esm/ic-switch.entry.js +2 -2
  351. package/dist/esm/ic-tab-context.entry.js +1 -1
  352. package/dist/esm/ic-tab-group.entry.js +2 -2
  353. package/dist/esm/ic-tab-panel.entry.js +2 -2
  354. package/dist/esm/ic-tab.entry.js +2 -2
  355. package/dist/esm/ic-text-field.entry.js +49 -12
  356. package/dist/esm/ic-text-field.entry.js.map +1 -1
  357. package/dist/esm/ic-theme.entry.js +2 -2
  358. package/dist/esm/ic-toast-region.entry.js +1 -1
  359. package/dist/esm/ic-toast.entry.js +13 -16
  360. package/dist/esm/ic-toast.entry.js.map +1 -1
  361. package/dist/esm/ic-toggle-button.entry.js +65 -0
  362. package/dist/esm/ic-toggle-button.entry.js.map +1 -0
  363. package/dist/esm/ic-top-navigation.entry.js +4 -3
  364. package/dist/esm/ic-top-navigation.entry.js.map +1 -1
  365. package/dist/esm/ic-typography.entry.js +2 -2
  366. package/dist/esm/{index-05003e1c.js → index-d1d2c456.js} +6 -12
  367. package/dist/esm/index-d1d2c456.js.map +1 -0
  368. package/dist/esm/loader.js +3 -3
  369. package/dist/types/components/ic-button/ic-button.d.ts +3 -0
  370. package/dist/types/components/ic-popover-menu/ic-popover-menu.d.ts +4 -0
  371. package/dist/types/components/ic-side-navigation/ic-side-navigation.d.ts +3 -2
  372. package/dist/types/components/ic-text-field/ic-text-field.d.ts +13 -0
  373. package/dist/types/components/ic-toggle-button/ic-toggle-button.d.ts +60 -0
  374. package/dist/types/components.d.ts +134 -2
  375. package/hydrate/index.d.ts +1 -1
  376. package/hydrate/index.js +311 -183
  377. package/package.json +23 -16
  378. package/vscode-data.json +100 -2
  379. package/dist/cjs/index-152d1fe5.js.map +0 -1
  380. package/dist/collection/components/ic-breadcrumb-group/test/a11y/ic-breadcrumb-group.test.a11y.js +0 -21
  381. package/dist/collection/components/ic-breadcrumb-group/test/a11y/ic-breadcrumb-group.test.a11y.js.map +0 -1
  382. package/dist/collection/components/ic-breadcrumb-group/test/basic/ic-breadcrumb-group-test-examples.js +0 -35
  383. package/dist/collection/components/ic-breadcrumb-group/test/basic/ic-breadcrumb-group-test-examples.js.map +0 -1
  384. package/dist/collection/components/ic-breadcrumb-group/test/basic/ic-breadcrumb-group.e2e.js +0 -41
  385. package/dist/collection/components/ic-breadcrumb-group/test/basic/ic-breadcrumb-group.e2e.js.map +0 -1
  386. package/dist/collection/components/ic-button/test/a11y/ic-button.test.a11y.js +0 -11
  387. package/dist/collection/components/ic-button/test/a11y/ic-button.test.a11y.js.map +0 -1
  388. package/dist/collection/components/ic-button/test/basic/ic-button.e2e.js +0 -198
  389. package/dist/collection/components/ic-button/test/basic/ic-button.e2e.js.map +0 -1
  390. package/dist/collection/components/ic-card/test/a11y/ic-card.test.a11y.js +0 -21
  391. package/dist/collection/components/ic-card/test/a11y/ic-card.test.a11y.js.map +0 -1
  392. package/dist/collection/components/ic-card/test/basic/ic-card.e2e.js +0 -23
  393. package/dist/collection/components/ic-card/test/basic/ic-card.e2e.js.map +0 -1
  394. package/dist/collection/components/ic-checkbox-group/test/a11y/ic-checkbox-group.test.a11y.js +0 -16
  395. package/dist/collection/components/ic-checkbox-group/test/a11y/ic-checkbox-group.test.a11y.js.map +0 -1
  396. package/dist/collection/components/ic-checkbox-group/test/basic/ic-checkbox-group.e2e.js +0 -201
  397. package/dist/collection/components/ic-checkbox-group/test/basic/ic-checkbox-group.e2e.js.map +0 -1
  398. package/dist/collection/components/ic-chip/test/a11y/ic-chip.test.a11y.js +0 -11
  399. package/dist/collection/components/ic-chip/test/a11y/ic-chip.test.a11y.js.map +0 -1
  400. package/dist/collection/components/ic-data-entity/test/a11y/ic-data-entity.test.a11y.js +0 -11
  401. package/dist/collection/components/ic-data-entity/test/a11y/ic-data-entity.test.a11y.js.map +0 -1
  402. package/dist/collection/components/ic-dialog/test/a11y/ic-dialog.test.a11y.js +0 -28
  403. package/dist/collection/components/ic-dialog/test/a11y/ic-dialog.test.a11y.js.map +0 -1
  404. package/dist/collection/components/ic-dialog/test/basic/ic-dialog.e2e.js +0 -288
  405. package/dist/collection/components/ic-dialog/test/basic/ic-dialog.e2e.js.map +0 -1
  406. package/dist/collection/components/ic-empty-state/test/a11y/ic-empty-state.test.a11y.js +0 -38
  407. package/dist/collection/components/ic-empty-state/test/a11y/ic-empty-state.test.a11y.js.map +0 -1
  408. package/dist/collection/components/ic-empty-state/test/basic/ic-empty-state.spec.js +0 -86
  409. package/dist/collection/components/ic-empty-state/test/basic/ic-empty-state.spec.js.map +0 -1
  410. package/dist/collection/components/ic-footer/test/a11y/ic-footer.test.a11y.js +0 -23
  411. package/dist/collection/components/ic-footer/test/a11y/ic-footer.test.a11y.js.map +0 -1
  412. package/dist/collection/components/ic-footer/test/basic/ic-footer.e2e.js +0 -50
  413. package/dist/collection/components/ic-footer/test/basic/ic-footer.e2e.js.map +0 -1
  414. package/dist/collection/components/ic-footer-link/test/a11y/ic-footer-link.test.a11y.js +0 -21
  415. package/dist/collection/components/ic-footer-link/test/a11y/ic-footer-link.test.a11y.js.map +0 -1
  416. package/dist/collection/components/ic-footer-link-group/test/a11y/ic-footer-link-group.test.a11y.js +0 -21
  417. package/dist/collection/components/ic-footer-link-group/test/a11y/ic-footer-link-group.test.a11y.js.map +0 -1
  418. package/dist/collection/components/ic-link/test/a11y/ic-link.test.a11y.js +0 -11
  419. package/dist/collection/components/ic-link/test/a11y/ic-link.test.a11y.js.map +0 -1
  420. package/dist/collection/components/ic-select/test/a11y/ic-select.test.a11y.js +0 -28
  421. package/dist/collection/components/ic-select/test/a11y/ic-select.test.a11y.js.map +0 -1
  422. package/dist/collection/components/ic-select/test/basic/ic-select.e2e.js +0 -1825
  423. package/dist/collection/components/ic-select/test/basic/ic-select.e2e.js.map +0 -1
  424. package/dist/collection/components/ic-side-navigation/test/a11y/ic-side-navigation.test.a11y.js +0 -14
  425. package/dist/collection/components/ic-side-navigation/test/a11y/ic-side-navigation.test.a11y.js.map +0 -1
  426. package/dist/collection/components/ic-side-navigation/test/basic/ic-side-navigation-test-examples.js +0 -582
  427. package/dist/collection/components/ic-side-navigation/test/basic/ic-side-navigation-test-examples.js.map +0 -1
  428. package/dist/collection/components/ic-side-navigation/test/basic/ic-side-navigation.e2e.js +0 -475
  429. package/dist/collection/components/ic-side-navigation/test/basic/ic-side-navigation.e2e.js.map +0 -1
  430. package/dist/collection/components/ic-top-navigation/test/a11y/ic-top-navigation.test.a11y.js +0 -32
  431. package/dist/collection/components/ic-top-navigation/test/a11y/ic-top-navigation.test.a11y.js.map +0 -1
  432. package/dist/collection/components/ic-top-navigation/test/basic/ic-top-navigation.e2e.js +0 -61
  433. package/dist/collection/components/ic-top-navigation/test/basic/ic-top-navigation.e2e.js.map +0 -1
  434. package/dist/collection/components/ic-top-navigation/test/basic/ic-top-navigation.mobile.e2e.js +0 -244
  435. package/dist/collection/components/ic-top-navigation/test/basic/ic-top-navigation.mobile.e2e.js.map +0 -1
  436. package/dist/core/p-1338c9df.entry.js +0 -2
  437. package/dist/core/p-1338c9df.entry.js.map +0 -1
  438. package/dist/core/p-15ef0674.entry.js.map +0 -1
  439. package/dist/core/p-31969be6.entry.js.map +0 -1
  440. package/dist/core/p-4d413a72.entry.js +0 -2
  441. package/dist/core/p-4d413a72.entry.js.map +0 -1
  442. package/dist/core/p-51f9f329.entry.js.map +0 -1
  443. package/dist/core/p-52e063d3.js +0 -3
  444. package/dist/core/p-52e063d3.js.map +0 -1
  445. package/dist/core/p-592c783e.entry.js.map +0 -1
  446. package/dist/core/p-5c7e339f.entry.js.map +0 -1
  447. package/dist/core/p-5f9d69ef.entry.js.map +0 -1
  448. package/dist/core/p-776232f4.entry.js +0 -2
  449. package/dist/core/p-776232f4.entry.js.map +0 -1
  450. package/dist/core/p-85026377.entry.js.map +0 -1
  451. package/dist/core/p-94e88827.entry.js.map +0 -1
  452. package/dist/core/p-96da1e85.entry.js +0 -2
  453. package/dist/core/p-96da1e85.entry.js.map +0 -1
  454. package/dist/core/p-9c30720d.entry.js +0 -2
  455. package/dist/core/p-9c30720d.entry.js.map +0 -1
  456. package/dist/core/p-c2452388.entry.js.map +0 -1
  457. package/dist/esm/index-05003e1c.js.map +0 -1
  458. package/dist/types/components/ic-breadcrumb-group/test/a11y/ic-breadcrumb-group.test.a11y.d.ts +0 -1
  459. package/dist/types/components/ic-breadcrumb-group/test/basic/ic-breadcrumb-group-test-examples.d.ts +0 -2
  460. package/dist/types/components/ic-button/test/a11y/ic-button.test.a11y.d.ts +0 -1
  461. package/dist/types/components/ic-card/test/a11y/ic-card.test.a11y.d.ts +0 -1
  462. package/dist/types/components/ic-checkbox-group/test/a11y/ic-checkbox-group.test.a11y.d.ts +0 -1
  463. package/dist/types/components/ic-chip/test/a11y/ic-chip.test.a11y.d.ts +0 -1
  464. package/dist/types/components/ic-data-entity/test/a11y/ic-data-entity.test.a11y.d.ts +0 -1
  465. package/dist/types/components/ic-dialog/test/a11y/ic-dialog.test.a11y.d.ts +0 -1
  466. package/dist/types/components/ic-empty-state/test/a11y/ic-empty-state.test.a11y.d.ts +0 -1
  467. package/dist/types/components/ic-footer/test/a11y/ic-footer.test.a11y.d.ts +0 -1
  468. package/dist/types/components/ic-footer-link/test/a11y/ic-footer-link.test.a11y.d.ts +0 -1
  469. package/dist/types/components/ic-footer-link-group/test/a11y/ic-footer-link-group.test.a11y.d.ts +0 -1
  470. package/dist/types/components/ic-link/test/a11y/ic-link.test.a11y.d.ts +0 -1
  471. package/dist/types/components/ic-select/test/a11y/ic-select.test.a11y.d.ts +0 -1
  472. package/dist/types/components/ic-side-navigation/test/a11y/ic-side-navigation.test.a11y.d.ts +0 -1
  473. package/dist/types/components/ic-side-navigation/test/basic/ic-side-navigation-test-examples.d.ts +0 -8
  474. package/dist/types/components/ic-top-navigation/test/a11y/ic-top-navigation.test.a11y.d.ts +0 -1
  475. /package/dist/core/{p-daebb58a.entry.js.map → p-003c44bd.entry.js.map} +0 -0
  476. /package/dist/core/{p-b6a575c3.entry.js.map → p-049bf5e3.entry.js.map} +0 -0
  477. /package/dist/core/{p-ea17e371.entry.js.map → p-0a0b748c.entry.js.map} +0 -0
  478. /package/dist/core/{p-d18450f9.entry.js.map → p-0d2eb765.entry.js.map} +0 -0
  479. /package/dist/core/{p-6d3f9501.entry.js.map → p-0ee13da0.entry.js.map} +0 -0
  480. /package/dist/core/{p-15466b42.entry.js.map → p-1145e33c.entry.js.map} +0 -0
  481. /package/dist/core/{p-056f8a67.entry.js.map → p-171e25c9.entry.js.map} +0 -0
  482. /package/dist/core/{p-ad36a704.entry.js.map → p-26334b3a.entry.js.map} +0 -0
  483. /package/dist/core/{p-dbb5b008.entry.js.map → p-29b812c0.entry.js.map} +0 -0
  484. /package/dist/core/{p-b9736cf4.entry.js.map → p-2e7f22af.entry.js.map} +0 -0
  485. /package/dist/core/{p-aa0a9870.entry.js.map → p-357eaebe.entry.js.map} +0 -0
  486. /package/dist/core/{p-9639e33f.entry.js.map → p-38bf02aa.entry.js.map} +0 -0
  487. /package/dist/core/{p-b99f9e89.entry.js.map → p-3c752bca.entry.js.map} +0 -0
  488. /package/dist/core/{p-3a0ef91e.entry.js.map → p-3cc52cbc.entry.js.map} +0 -0
  489. /package/dist/core/{p-c770e7a2.entry.js.map → p-42c0e318.entry.js.map} +0 -0
  490. /package/dist/core/{p-2b24b4bf.entry.js.map → p-4421203e.entry.js.map} +0 -0
  491. /package/dist/core/{p-11736fbe.entry.js.map → p-4f1792a6.entry.js.map} +0 -0
  492. /package/dist/core/{p-b39ecae2.entry.js.map → p-4f8b7aa3.entry.js.map} +0 -0
  493. /package/dist/core/{p-8a83f391.entry.js.map → p-525323ab.entry.js.map} +0 -0
  494. /package/dist/core/{p-e9738c74.entry.js.map → p-59c4bc0a.entry.js.map} +0 -0
  495. /package/dist/core/{p-95a864bf.js.map → p-671b7cac.js.map} +0 -0
  496. /package/dist/core/{p-fdb4b48f.entry.js.map → p-783c2ced.entry.js.map} +0 -0
  497. /package/dist/core/{p-f2e6b9ef.entry.js.map → p-7b720034.entry.js.map} +0 -0
  498. /package/dist/core/{p-22c024ee.entry.js.map → p-7c724f2c.entry.js.map} +0 -0
  499. /package/dist/core/{p-335fc5e4.entry.js.map → p-8146336b.entry.js.map} +0 -0
  500. /package/dist/core/{p-cd8de4c5.entry.js.map → p-8931210a.entry.js.map} +0 -0
  501. /package/dist/core/{p-529d8955.entry.js.map → p-8a66cab4.entry.js.map} +0 -0
  502. /package/dist/core/{p-ca48e97a.entry.js.map → p-8be3ec3d.entry.js.map} +0 -0
  503. /package/dist/core/{p-180e36b1.entry.js.map → p-8c2322a9.entry.js.map} +0 -0
  504. /package/dist/core/{p-edd29edc.entry.js.map → p-9184e385.entry.js.map} +0 -0
  505. /package/dist/core/{p-366bcb17.entry.js.map → p-9ee138e7.entry.js.map} +0 -0
  506. /package/dist/core/{p-e5abfadd.entry.js.map → p-b7a2e604.entry.js.map} +0 -0
  507. /package/dist/core/{p-b0088956.entry.js.map → p-bb41b637.entry.js.map} +0 -0
  508. /package/dist/core/{p-cfc930f6.entry.js.map → p-c75d6022.entry.js.map} +0 -0
  509. /package/dist/core/{p-f0809037.entry.js.map → p-c786d62f.entry.js.map} +0 -0
  510. /package/dist/core/{p-edec0936.entry.js.map → p-c7a08024.entry.js.map} +0 -0
  511. /package/dist/core/{p-6eb0421d.entry.js.map → p-cf798ea7.entry.js.map} +0 -0
  512. /package/dist/core/{p-a908e7a9.entry.js.map → p-d3e54a29.entry.js.map} +0 -0
  513. /package/dist/core/{p-287ab47c.entry.js.map → p-de87d585.entry.js.map} +0 -0
  514. /package/dist/core/{p-15624e08.entry.js.map → p-e4d827d4.entry.js.map} +0 -0
  515. /package/dist/core/{p-765bdd98.entry.js.map → p-e9723eaa.entry.js.map} +0 -0
  516. /package/dist/core/{p-498eb7ad.entry.js.map → p-eb2d06c1.entry.js.map} +0 -0
@@ -1,1825 +0,0 @@
1
- import { newE2EPage } from "@stencil/core/testing";
2
- beforeAll(() => {
3
- jest.spyOn(console, "warn").mockImplementation(jest.fn());
4
- });
5
- const options = `[
6
- { label: 'Test label 1', value: 'Test value 1' },
7
- { label: 'Test label 2', value: 'Test value 2' },
8
- { label: 'Test label 3', value: 'Test value 3' },
9
- ]`;
10
- const optionsWithDuplicate = `[
11
- { label: 'Test label 1', value: 'Test value 1' },
12
- { label: 'Test label 2', value: 'Test value 2' },
13
- { label: 'Test label 3', value: 'Test value 3' },
14
- { label: 'Parent',
15
- children: [
16
- { label: 'Test label 1', value: 'Test value 1' },
17
- { label: 'Test label 2', value: 'Test value 2' },
18
- { label: 'Test label 4', value: 'Test value 4' },
19
- ]
20
- },
21
- { label: 'Test label 3', value: 'Test value 3' },
22
- { label: 'Test label 3 diff label', value: 'Test value 3' },
23
- ]`;
24
- const largeOptions = `[
25
- { label: 'Test label 1', value: 'Test value 1' },
26
- { label: 'Test label 2', value: 'Test value 2' },
27
- { label: 'Test label 3', value: 'Test value 3' },
28
- { label: 'Test label 4', value: 'Test value 4' },
29
- { label: 'Test label 5', value: 'Test value 5' },
30
- { label: 'Test label 6', value: 'Test value 6' },
31
- { label: 'Test label 7', value: 'Test value 7' },
32
- { label: 'Test label 8', value: 'Test value 8' },
33
- { label: 'Test label 9', value: 'Test value 9' },
34
- { label: 'Test label 10', value: 'Test value 10' },
35
- ]`;
36
- const searchableOptions = `[
37
- { label: "Cappuccino", value: "Cap" },
38
- { label: "Latte", value: "Lat" },
39
- { label: "Americano", value: "Ame" },
40
- { label: "Filter", value: "Fil" },
41
- { label: "Flat white", value: "Fla" },
42
- { label: "Mocha", value: "Moc" },
43
- { label: "Macchiato", value: "Mac" },
44
- ]`;
45
- const getTestSelect = (options) => `<ic-select label="IC Select Test"></ic-select>
46
- <script>
47
- var select = document.querySelector('ic-select');
48
- select.options = ${options};
49
- select.addEventListener('icChange', function (event) {
50
- option = event.detail.value;
51
- select.value = option;
52
- });
53
- </script>`;
54
- const getTestSelectFormReset = (options) => `<form><ic-select label="IC Select Test"></ic-select><button type="reset" id="resetButton">Reset</button></form>
55
- <script>
56
- var select = document.querySelector('ic-select');
57
- select.options = ${options};
58
- select.addEventListener('icChange', function (event) {
59
- option = event.detail.value;
60
- select.value = option;
61
- });
62
- </script>`;
63
- const getTestSelectSearchableFormReset = (options) => `<form><ic-select label="IC Select Test" searchable></ic-select><button type="reset" id="resetButton">Reset</button></form>
64
- <script>
65
- var select = document.querySelector('ic-select');
66
- select.options = ${options};
67
- select.value = 'Test value 1';
68
- select.addEventListener('icChange', function (event) {
69
- option = event.detail.value;
70
- select.value = option;
71
- });
72
- </script>`;
73
- const getTestSearchableSelect = (options) => `<ic-select label="IC Select Test" searchable></ic-select><button>Button</button>
74
- <script>
75
- var select = document.querySelector('ic-select');
76
- select.options = ${options};
77
- </script>`;
78
- const getTestSearchableSelectAsync = () => `<ic-select label="IC Select Test" searchable disable-filter="true" value="Test value"></ic-select>
79
- <script>
80
- var select = document.querySelector('ic-select');
81
- select.options = [];
82
- window.setTimeout(() => {
83
- select.options = []
84
- }, 800)
85
- </script>`;
86
- const getTestSelectAsync = (firstDataset, secondDataset) => `<ic-select label="IC Select Test" value="Test value"></ic-select>
87
- <script>
88
- var select = document.querySelector('ic-select');
89
- select.options = ${firstDataset};
90
- window.setTimeout(() => {
91
- select.options = ${secondDataset}
92
- }, 1500)
93
- </script>`;
94
- const getMenuVisibility = async (page) => {
95
- return await page.evaluate(() => {
96
- const menu = document
97
- .querySelector("ic-select")
98
- .shadowRoot.querySelector("ic-menu #ic-select-input-0-menu");
99
- return window.getComputedStyle(menu).visibility;
100
- });
101
- };
102
- const focusAndTypeIntoInput = async (value, page) => {
103
- await page.$eval("ic-select", (el) => {
104
- const input = el.shadowRoot.querySelector("input");
105
- input.focus();
106
- });
107
- value.split("").forEach(async (char) => {
108
- await page.keyboard.press(char);
109
- });
110
- };
111
- describe("ic-select", () => {
112
- describe("custom", () => {
113
- it("should render", async () => {
114
- const page = await newE2EPage();
115
- await page.setContent(getTestSelect(options));
116
- await page.waitForChanges();
117
- const select = await page.find("ic-select");
118
- expect(select).not.toBeNull();
119
- });
120
- it("should render when no options are provided", async () => {
121
- const page = await newE2EPage();
122
- await page.setContent(`<ic-select label="IC Select Test"></ic-select>`);
123
- await page.waitForChanges();
124
- const select = await page.find("ic-select");
125
- expect(select).not.toBeNull();
126
- });
127
- it("should open, set focus on menu and set aria-expanded to 'true' when input clicked", async () => {
128
- const page = await newE2EPage();
129
- await page.setContent(getTestSelect(options));
130
- await page.waitForChanges();
131
- expect(await getMenuVisibility(page)).toBe("hidden");
132
- const select = await page.find("ic-select >>> #ic-select-input-0");
133
- await select.click();
134
- await page.waitForChanges();
135
- expect(await getMenuVisibility(page)).toBe("visible");
136
- expect(select.getAttribute("aria-expanded")).toBeTruthy();
137
- const activeElId = await page.$eval("ic-select", (el) => el.shadowRoot.activeElement.id);
138
- expect(activeElId).toBe("ic-select-input-0-menu");
139
- });
140
- it("should render options correctly", async () => {
141
- const page = await newE2EPage();
142
- await page.setContent(getTestSelect(options));
143
- await page.waitForChanges();
144
- const select = await page.find("ic-select >>> #ic-select-input-0");
145
- await select.click();
146
- await page.waitForChanges();
147
- const menu = await page.find("ic-select >>> #ic-select-input-0-menu");
148
- const menuOptions = await menu.findAll("li");
149
- expect(menuOptions).toHaveLength(3);
150
- expect(menuOptions[0]).toEqualText("Test label 1");
151
- expect(menuOptions[1]).toEqualText("Test label 2");
152
- expect(menuOptions[2]).toEqualText("Test label 3");
153
- });
154
- it("should deduplicate options and warn about duplicate", async () => {
155
- const page = await newE2EPage();
156
- await page.setContent(getTestSelect(optionsWithDuplicate));
157
- await page.waitForChanges();
158
- const select = await page.find("ic-select >>> #ic-select-input-0");
159
- await select.click();
160
- await page.waitForChanges();
161
- const menu = await page.find("ic-select >>> #ic-select-input-0-menu");
162
- const menuOptions = await menu.findAll("li");
163
- expect(menuOptions).toHaveLength(4);
164
- expect(menuOptions[0]).toEqualText("Test label 1");
165
- expect(menuOptions[1]).toEqualText("Test label 2");
166
- expect(menuOptions[2]).toEqualText("Test label 3");
167
- expect(menuOptions[3]).toEqualText("Test label 4");
168
- // We can't test for ic-warn being called because it's already called seven times over 'hiddeninputvalue' changing
169
- });
170
- it("should call icChange when the selected option is changed", async () => {
171
- const page = await newE2EPage();
172
- await page.setContent(getTestSelect(options));
173
- await page.waitForChanges();
174
- const icChange = await page.spyOnEvent("icChange");
175
- const select = await page.find("ic-select >>> #ic-select-input-0");
176
- await select.press("ArrowDown");
177
- await select.press("Enter");
178
- await page.waitForChanges();
179
- expect(icChange).toHaveReceivedEventDetail({
180
- value: "Test value 1",
181
- });
182
- });
183
- describe("when no option is selected", () => {
184
- it("should open menu, apply focus style on first option and set as value when Down Arrow is pressed", async () => {
185
- const page = await newE2EPage();
186
- await page.setContent(getTestSelect(options));
187
- await page.waitForChanges();
188
- const select = await page.find("ic-select >>> #ic-select-input-0");
189
- await select.press("ArrowDown");
190
- await page.waitForChanges();
191
- const menu = await page.find("ic-select >>> #ic-select-input-0-menu");
192
- expect(await getMenuVisibility(page)).toBe("visible");
193
- const firstOption = await menu.findAll("li");
194
- expect(firstOption[0]).toHaveClass("focused-option");
195
- expect(select).toEqualText("Test label 1");
196
- });
197
- it("should open menu when Space is pressed", async () => {
198
- const page = await newE2EPage();
199
- await page.setContent(getTestSelect(options));
200
- await page.waitForChanges();
201
- const select = await page.find("ic-select >>> #ic-select-input-0");
202
- await select.press(" ");
203
- await page.waitForChanges();
204
- expect(await getMenuVisibility(page)).toBe("visible");
205
- });
206
- it("should open menu when Enter is pressed", async () => {
207
- const page = await newE2EPage();
208
- await page.setContent(getTestSelect(options));
209
- await page.waitForChanges();
210
- const select = await page.find("ic-select >>> #ic-select-input-0");
211
- await select.press("Enter");
212
- await page.waitForChanges();
213
- await page.waitForTimeout(1000);
214
- expect(await getMenuVisibility(page)).toBe("visible");
215
- });
216
- it("should open menu, apply focus style on last option and set as value when Up Arrow is pressed", async () => {
217
- const page = await newE2EPage();
218
- await page.setContent(getTestSelect(options));
219
- await page.waitForChanges();
220
- const select = await page.find("ic-select >>> #ic-select-input-0");
221
- await select.press("ArrowUp");
222
- await page.waitForChanges();
223
- const menu = await page.find("ic-select >>> #ic-select-input-0-menu");
224
- expect(await getMenuVisibility(page)).toBe("visible");
225
- const lastOption = await menu.findAll("li");
226
- expect(lastOption[2]).toHaveClass("focused-option");
227
- expect(select).toEqualText("Test label 3");
228
- });
229
- it("should keep menu closed when Backspace, Home, End and Escape are pressed", async () => {
230
- const page = await newE2EPage();
231
- await page.setContent(getTestSelect(options));
232
- await page.waitForChanges();
233
- const select = await page.find("ic-select >>> #ic-select-input-0");
234
- await select.press("Backspace");
235
- await page.waitForChanges();
236
- expect(await getMenuVisibility(page)).toBe("hidden");
237
- await select.press("Home");
238
- await page.waitForChanges();
239
- expect(await getMenuVisibility(page)).toBe("hidden");
240
- await select.press("End");
241
- await page.waitForChanges();
242
- expect(await getMenuVisibility(page)).toBe("hidden");
243
- await select.press("Escape");
244
- await page.waitForChanges();
245
- expect(await getMenuVisibility(page)).toBe("hidden");
246
- });
247
- });
248
- describe("when an option is selected", () => {
249
- it("should move focus to next option and set as value when Down Arrow is pressed", async () => {
250
- const page = await newE2EPage();
251
- await page.setContent(getTestSelect(options));
252
- await page.waitForChanges();
253
- const select = await page.find("ic-select >>> #ic-select-input-0");
254
- await select.press("ArrowDown");
255
- await select.press("ArrowDown");
256
- await page.waitForChanges();
257
- const menu = await page.find("ic-select >>> #ic-select-input-0-menu");
258
- const secondOption = await menu.findAll("li");
259
- expect(secondOption[1]).toHaveClass("focused-option");
260
- expect(select).toEqualText("Test label 2");
261
- });
262
- it("should move focus to first option and set as value when focus is on last option and Down Arrow is pressed", async () => {
263
- const page = await newE2EPage();
264
- await page.setContent(getTestSelect(options));
265
- await page.waitForChanges();
266
- const select = await page.find("ic-select >>> #ic-select-input-0");
267
- await select.press("ArrowUp");
268
- await select.press("ArrowDown");
269
- await page.waitForChanges();
270
- const menu = await page.find("ic-select >>> #ic-select-input-0-menu");
271
- const firstOption = await menu.findAll("li");
272
- expect(firstOption[0]).toHaveClass("focused-option");
273
- expect(select).toEqualText("Test label 1");
274
- });
275
- it("should move focus to previous option and set as value when Up Arrow is pressed", async () => {
276
- const page = await newE2EPage();
277
- await page.setContent(getTestSelect(options));
278
- await page.waitForChanges();
279
- const select = await page.find("ic-select >>> #ic-select-input-0");
280
- await select.press("ArrowUp");
281
- await select.press("ArrowUp");
282
- await page.waitForChanges();
283
- const menu = await page.find("ic-select >>> #ic-select-input-0-menu");
284
- const secondOption = await menu.findAll("li");
285
- expect(secondOption[1]).toHaveClass("focused-option");
286
- expect(select).toEqualText("Test label 2");
287
- });
288
- it("should move focus to last option and set as value when focus is on first option and Up Arrow is pressed", async () => {
289
- const page = await newE2EPage();
290
- await page.setContent(getTestSelect(options));
291
- await page.waitForChanges();
292
- const select = await page.find("ic-select >>> #ic-select-input-0");
293
- await select.press("ArrowDown");
294
- await select.press("ArrowUp");
295
- await page.waitForChanges();
296
- const menu = await page.find("ic-select >>> #ic-select-input-0-menu");
297
- const lastOption = await menu.findAll("li");
298
- expect(lastOption[2]).toHaveClass("focused-option");
299
- expect(select).toEqualText("Test label 3");
300
- });
301
- it("should move focus to first option and set as value when Home is pressed", async () => {
302
- const page = await newE2EPage();
303
- await page.setContent(getTestSelect(options));
304
- await page.waitForChanges();
305
- const select = await page.find("ic-select >>> #ic-select-input-0");
306
- await select.press("ArrowUp");
307
- await page.keyboard.press("Home");
308
- await page.waitForChanges();
309
- const menu = await page.find("ic-select >>> #ic-select-input-0-menu");
310
- const firstOption = await menu.findAll("li");
311
- expect(firstOption[0]).toHaveClass("focused-option");
312
- expect(select).toEqualText("Test label 1");
313
- });
314
- it("should move focus to last option and set as value when End is pressed", async () => {
315
- const page = await newE2EPage();
316
- await page.setContent(getTestSelect(options));
317
- await page.waitForChanges();
318
- const select = await page.find("ic-select >>> #ic-select-input-0");
319
- await select.press("ArrowDown");
320
- await page.keyboard.press("End");
321
- await page.waitForChanges();
322
- const menu = await page.find("ic-select >>> #ic-select-input-0-menu");
323
- const lastOption = await menu.findAll("li");
324
- expect(lastOption[2]).toHaveClass("focused-option");
325
- expect(select).toEqualText("Test label 3");
326
- });
327
- it("should display a check next to the selected option and set aria-selected", async () => {
328
- const page = await newE2EPage();
329
- await page.setContent(getTestSelect(options));
330
- await page.waitForChanges();
331
- const select = await page.find("ic-select >>> #ic-select-input-0");
332
- await select.press("ArrowDown");
333
- await page.waitForChanges();
334
- const menu = await page.find("ic-select >>> #ic-select-input-0-menu");
335
- const firstOption = await menu.findAll("li");
336
- expect(firstOption[0]).toHaveAttribute("aria-selected");
337
- expect(await firstOption[0].find(".check-icon")).not.toBeNull;
338
- expect(firstOption[1]).not.toHaveAttribute("aria-selected");
339
- expect(await firstOption[1].find(".check-icon")).toBeNull;
340
- });
341
- it("should display a check next to the selected option and set aria-selected when a default value is applied", async () => {
342
- const page = await newE2EPage();
343
- await page.setContent(getTestSelect(options));
344
- await page.waitForChanges();
345
- const icSelect = await page.find("ic-select");
346
- icSelect.setAttribute("value", "Test value 1");
347
- await page.waitForChanges();
348
- const menu = await page.find("ic-select >>> #ic-select-input-0-menu");
349
- const firstOption = await menu.findAll("li");
350
- expect(firstOption[0]).toHaveAttribute("aria-selected");
351
- expect(await firstOption[0].find(".check-icon")).not.toBeNull;
352
- });
353
- it("should display clear button if the 'show-clear-button' prop is supplied and an option is selected", async () => {
354
- const page = await newE2EPage();
355
- await page.setContent(getTestSelect(options));
356
- let clearButton = await page.find("ic-select >>> .clear-button");
357
- expect(clearButton).toBeNull();
358
- const icSelect = await page.find("ic-select");
359
- icSelect.setAttribute("show-clear-button", true);
360
- await page.waitForChanges();
361
- clearButton = await page.find("ic-select >>> .clear-button");
362
- expect(clearButton).toBeNull();
363
- const select = await page.find("ic-select >>> #ic-select-input-0");
364
- await select.press("ArrowDown");
365
- await page.keyboard.press("Enter");
366
- await page.waitForChanges();
367
- clearButton = await page.find("ic-select >>> .clear-button");
368
- expect(clearButton).not.toBeNull();
369
- });
370
- it("should clear the input if the clear button is clicked", async () => {
371
- const page = await newE2EPage();
372
- await page.setContent(getTestSelect(options));
373
- const icSelect = await page.find("ic-select");
374
- icSelect.setAttribute("show-clear-button", true);
375
- await page.waitForChanges();
376
- const icChange = await page.spyOnEvent("icChange");
377
- const select = await page.find("ic-select >>> #ic-select-input-0");
378
- await select.press("ArrowDown");
379
- await page.keyboard.press("Enter");
380
- await page.waitForChanges();
381
- let clearButton = await page.find("ic-select >>> .clear-button");
382
- await clearButton.click();
383
- await page.waitForChanges();
384
- expect(select).toEqualText("Select an option");
385
- expect(icChange).toHaveReceivedEventDetail({
386
- value: null,
387
- });
388
- clearButton = await page.find("ic-select >>> .clear-button");
389
- expect(clearButton).toBeNull;
390
- });
391
- });
392
- it("should close menu when input is clicked while open and set focus on it", async () => {
393
- const page = await newE2EPage();
394
- await page.setContent(getTestSelect(options));
395
- await page.waitForChanges();
396
- const select = await page.find("ic-select >>> #ic-select-input-0");
397
- await select.click();
398
- await page.waitForChanges();
399
- await select.click();
400
- await page.waitForChanges();
401
- await page.waitForTimeout(1000);
402
- expect(await getMenuVisibility(page)).toBe("hidden");
403
- const activeElId = await page.$eval("ic-select", (el) => el.shadowRoot.activeElement.id);
404
- expect(activeElId).toBe("ic-select-input-0");
405
- });
406
- it("should close menu when an option is clicked, set as value and move focus onto the input", async () => {
407
- const page = await newE2EPage();
408
- await page.setContent(getTestSelect(options));
409
- await page.waitForChanges();
410
- const select = await page.find("ic-select >>> #ic-select-input-0");
411
- await select.click();
412
- await page.waitForChanges();
413
- const icChange = await page.spyOnEvent("icChange");
414
- const menu = await page.find("ic-select >>> #ic-select-input-0-menu");
415
- await menu.click();
416
- await page.waitForChanges();
417
- await page.waitForTimeout(1000);
418
- expect(await getMenuVisibility(page)).toBe("hidden");
419
- expect(icChange).toHaveReceivedEventDetail({
420
- value: "Test value 2",
421
- });
422
- expect(select).toEqualText("Test label 2");
423
- const activeElId = await page.$eval("ic-select", (el) => el.shadowRoot.activeElement.id);
424
- expect(activeElId).toBe("ic-select-input-0");
425
- });
426
- it("should close menu when Space is pressed and move focus to the input", async () => {
427
- const page = await newE2EPage();
428
- await page.setContent(getTestSelect(options));
429
- await page.waitForChanges();
430
- const select = await page.find("ic-select >>> #ic-select-input-0");
431
- await select.press("ArrowDown");
432
- await page.waitForChanges();
433
- await page.keyboard.press(" ");
434
- await page.waitForChanges();
435
- await page.waitForTimeout(1000);
436
- expect(await getMenuVisibility(page)).toBe("hidden");
437
- const activeElId = await page.$eval("ic-select", (el) => el.shadowRoot.activeElement.id);
438
- expect(activeElId).toBe("ic-select-input-0");
439
- });
440
- it("should close menu when Enter is pressed and set focus to the input", async () => {
441
- const page = await newE2EPage();
442
- await page.setContent(getTestSelect(options));
443
- await page.waitForChanges();
444
- const select = await page.find("ic-select >>> #ic-select-input-0");
445
- await select.press("ArrowDown");
446
- await page.waitForChanges();
447
- await page.keyboard.press("Enter");
448
- await page.waitForChanges();
449
- await page.waitForTimeout(1000);
450
- expect(await getMenuVisibility(page)).toBe("hidden");
451
- const activeElId = await page.$eval("ic-select", (el) => el.shadowRoot.activeElement.id);
452
- expect(activeElId).toBe("ic-select-input-0");
453
- });
454
- it("should close menu when Escape is pressed and set focus to the input", async () => {
455
- const page = await newE2EPage();
456
- await page.setContent(getTestSelect(options));
457
- await page.waitForChanges();
458
- const select = await page.find("ic-select >>> #ic-select-input-0");
459
- await select.press("ArrowDown");
460
- await page.waitForChanges();
461
- await page.keyboard.press("Escape");
462
- await page.waitForChanges();
463
- await page.waitForTimeout(1000);
464
- expect(await getMenuVisibility(page)).toBe("hidden");
465
- const activeElId = await page.$eval("ic-select", (el) => el.shadowRoot.activeElement.id);
466
- expect(activeElId).toBe("ic-select-input-0");
467
- });
468
- it("should close menu when another element on the page is clicked", async () => {
469
- const page = await newE2EPage();
470
- await page.setContent(`${getTestSelect(options)}<button>Test button</button>`);
471
- await page.waitForChanges();
472
- const select = await page.find("ic-select >>> #ic-select-input-0");
473
- await select.press("ArrowDown");
474
- await page.waitForChanges();
475
- const button = await page.find("button");
476
- await button.click();
477
- await page.waitForChanges();
478
- await page.waitForTimeout(1000);
479
- expect(await getMenuVisibility(page)).toBe("hidden");
480
- });
481
- it("should close menu when Tab is pressed to move focus onto the next element on the page", async () => {
482
- const page = await newE2EPage();
483
- await page.setContent(`${getTestSelect(options)}<button>Test button</button>`);
484
- await page.waitForChanges();
485
- const select = await page.find("ic-select >>> #ic-select-input-0");
486
- await select.press("ArrowDown");
487
- await page.waitForChanges();
488
- await page.keyboard.press("Tab");
489
- await page.waitForChanges();
490
- await page.waitForTimeout(1000);
491
- expect(await getMenuVisibility(page)).toBe("hidden");
492
- });
493
- it("should close menu when Shift + Tab is pressed to move focus onto the input", async () => {
494
- const page = await newE2EPage();
495
- await page.setContent(`${getTestSelect(options)}`);
496
- await page.waitForChanges();
497
- const select = await page.find("ic-select >>> #ic-select-input-0");
498
- await select.press("ArrowDown");
499
- await page.waitForChanges();
500
- await page.waitForTimeout(1000);
501
- await page.keyboard.down("Shift");
502
- await page.keyboard.press("Tab");
503
- await page.waitForChanges();
504
- await page.keyboard.up("Shift");
505
- await page.waitForChanges();
506
- await page.waitForTimeout(1000);
507
- expect(await getMenuVisibility(page)).toBe("hidden");
508
- const activeElId = await page.$eval("ic-select", (el) => el.shadowRoot.activeElement.id);
509
- expect(activeElId).toBe("ic-select-input-0");
510
- });
511
- it("should display the label of the value passed in using the 'value' prop as the selected option", async () => {
512
- const page = await newE2EPage();
513
- await page.setContent(getTestSelect(options));
514
- const icSelect = await page.find("ic-select");
515
- icSelect.setAttribute("value", "Test value 2");
516
- await page.waitForChanges();
517
- const select = await page.find("ic-select >>> #ic-select-input-0");
518
- expect(select).toEqualText("Test label 2");
519
- });
520
- it("should render options with descriptions", async () => {
521
- const page = await newE2EPage();
522
- const optionsWithDescription = `[
523
- { label: 'Test label 1', value: 'Test value 1', description: 'Test description 1' },
524
- { label: 'Test label 2', value: 'Test value 2' },
525
- { label: 'Test label 3', value: 'Test value 3' },
526
- ]`;
527
- await page.setContent(getTestSelect(optionsWithDescription));
528
- await page.waitForChanges();
529
- const select = await page.find("ic-select >>> #ic-select-input-0");
530
- await select.press("ArrowDown");
531
- await page.waitForChanges();
532
- const menu = await page.find("ic-select >>> #ic-select-input-0-menu");
533
- const firstOptionDescription = await menu.find("li .option-description");
534
- expect(firstOptionDescription).toEqualText("Test description 1");
535
- });
536
- it("should render the placeholder", async () => {
537
- const page = await newE2EPage();
538
- await page.setContent(getTestSelect(options));
539
- const icSelect = await page.find("ic-select");
540
- icSelect.setAttribute("placeholder", "Test placeholder");
541
- await page.waitForChanges();
542
- const select = await page.find("ic-select >>> #ic-select-input-0");
543
- expect(select).toEqualText("Test placeholder");
544
- });
545
- it("should render as disabled correctly", async () => {
546
- const page = await newE2EPage();
547
- await page.setContent(getTestSelect(options));
548
- const icSelect = await page.find("ic-select");
549
- icSelect.setAttribute("disabled", true);
550
- await page.waitForChanges();
551
- const select = await page.find("ic-select >>> #ic-select-input-0");
552
- expect(select).toHaveAttribute("disabled");
553
- await select.click();
554
- await page.waitForChanges();
555
- expect(await getMenuVisibility(page)).toBe("hidden");
556
- });
557
- it("should prevent click on disabled options", async () => {
558
- const page = await newE2EPage();
559
- const optionsWithDisabled = `[
560
- { label: 'Test label 1', value: 'Test value 1' },
561
- { label: 'Test label 2', value: 'Test value 2', disabled: true },
562
- { label: 'Test label 3', value: 'Test value 3' },
563
- ]`;
564
- await page.setContent(getTestSelect(optionsWithDisabled));
565
- await page.waitForChanges();
566
- const select = await page.find("ic-select >>> #ic-select-input-0");
567
- await select.press("ArrowDown");
568
- await page.waitForChanges();
569
- const menu = await page.find("ic-select >>> #ic-select-input-0-menu");
570
- await menu.click();
571
- await page.waitForChanges();
572
- expect(await getMenuVisibility(page)).toBe("visible");
573
- });
574
- it("should set aria-disabled and skip focus when option disabled", async () => {
575
- const page = await newE2EPage();
576
- const optionsWithDisabled = `[
577
- { label: 'Test label 1', value: 'Test value 1', disabled: true },
578
- { label: 'Test label 2', value: 'Test value 2' },
579
- { label: 'Test label 3', value: 'Test value 3' },
580
- ]`;
581
- await page.setContent(getTestSelect(optionsWithDisabled));
582
- await page.waitForChanges();
583
- const select = await page.find("ic-select >>> #ic-select-input-0");
584
- await select.press("ArrowDown");
585
- await page.waitForChanges();
586
- const menu = await page.find("ic-select >>> #ic-select-input-0-menu");
587
- const menuOptions = await menu.findAll("li");
588
- expect(menuOptions[0]).toHaveAttribute("aria-disabled");
589
- expect(menuOptions[1]).toHaveClass("focused-option");
590
- });
591
- it("should render as required correctly", async () => {
592
- const page = await newE2EPage();
593
- await page.setContent(getTestSelect(options));
594
- const icSelect = await page.find("ic-select");
595
- icSelect.setAttribute("required", true);
596
- await page.waitForChanges();
597
- const label = await page.find("ic-select >>> ic-input-label");
598
- expect(label).toEqualText("IC Select Test *");
599
- const select = await page.find("ic-select >>> #ic-select-input-0");
600
- expect(select.getAttribute("aria-label").includes("required")).toBeTruthy();
601
- });
602
- it("should render selected value as text when read-only", async () => {
603
- const page = await newE2EPage();
604
- await page.setContent(getTestSelect(options));
605
- const icSelect = await page.find("ic-select");
606
- icSelect.setAttribute("value", "Test value 1");
607
- icSelect.setAttribute("readonly", true);
608
- await page.waitForChanges();
609
- const select = await page.find("ic-select >>> #ic-select-input-0");
610
- const typography = await page.evaluate(() => Array.from(document
611
- .querySelector("ic-select")
612
- .shadowRoot.querySelectorAll("ic-typography"), (typography) => typography.innerText));
613
- expect(select).toBe(null);
614
- expect(typography[1]).toBe("Test label 1");
615
- });
616
- it("should render options as groups if they have children", async () => {
617
- const page = await newE2EPage();
618
- const groupedOptions = `[
619
- {
620
- label: 'Test group',
621
- children: [
622
- { label: 'Test label 1', value: 'Test value 1' },
623
- { label: 'Test label 2', value: 'Test value 2' },
624
- { label: 'Test label 3', value: 'Test value 3' },
625
- ],
626
- },
627
- ]`;
628
- await page.setContent(getTestSelect(groupedOptions));
629
- await page.waitForChanges();
630
- const select = await page.find("ic-select >>> #ic-select-input-0");
631
- await select.press("ArrowDown");
632
- await page.waitForChanges();
633
- const optionGroupTitle = await page.find("ic-select >>> ic-menu >>> .option-group-title");
634
- expect(optionGroupTitle).not.toBeNull();
635
- const optionsText = await page.evaluate(() => Array.from(document
636
- .querySelector("ic-select")
637
- .shadowRoot.querySelectorAll("ic-menu ic-typography"), (typography) => typography.innerText));
638
- expect(optionsText[0]).toBe("Test group");
639
- });
640
- it("should render and focus child options correctly", async () => {
641
- const page = await newE2EPage();
642
- const groupedOptions = `[
643
- {
644
- label: 'Test group',
645
- children: [
646
- { label: 'Test label 1', value: 'Test value 1' },
647
- { label: 'Test label 2', value: 'Test value 2' },
648
- { label: 'Test label 3', value: 'Test value 3' },
649
- ],
650
- },
651
- ]`;
652
- await page.setContent(getTestSelect(groupedOptions));
653
- await page.waitForChanges();
654
- const select = await page.find("ic-select >>> #ic-select-input-0");
655
- await select.press("ArrowDown");
656
- await page.waitForChanges();
657
- const menu = await page.find("ic-select >>> #ic-select-input-0-menu");
658
- const childOptions = await menu.findAll("li");
659
- expect(childOptions).toHaveLength(3);
660
- expect(childOptions[0]).toEqualText("Test label 1");
661
- expect(childOptions[1]).toEqualText("Test label 2");
662
- expect(childOptions[2]).toEqualText("Test label 3");
663
- expect(childOptions[0]).toHaveClass("focused-option");
664
- });
665
- it("should render options at the top of the menu if they are recommended", async () => {
666
- const page = await newE2EPage();
667
- const optionsWithDisabled = `[
668
- { label: 'Test label 1', value: 'Test value 1' },
669
- { label: 'Test label 2', value: 'Test value 2', recommended: true },
670
- { label: 'Test label 3', value: 'Test value 3' },
671
- ]`;
672
- await page.setContent(getTestSelect(optionsWithDisabled));
673
- await page.waitForChanges();
674
- const select = await page.find("ic-select >>> #ic-select-input-0");
675
- await select.press("ArrowDown");
676
- await page.waitForChanges();
677
- const menu = await page.find("ic-select >>> #ic-select-input-0-menu");
678
- const firstOption = await menu.findAll("li");
679
- expect(firstOption[0]).toEqualText("Test label 2");
680
- });
681
- it("should set aria-invalid if validation status is 'error'", async () => {
682
- const page = await newE2EPage();
683
- await page.setContent(getTestSelect(options));
684
- const icSelect = await page.find("ic-select");
685
- icSelect.setAttribute("validation-status", "error");
686
- await page.waitForChanges();
687
- const select = await page.find("ic-select >>> #ic-select-input-0");
688
- expect(select).toHaveAttribute("aria-invalid");
689
- });
690
- it("should set the aria-label correctly if an option has a description", async () => {
691
- const page = await newE2EPage();
692
- const optionsWithDescription = `[
693
- { label: 'Test label 1', value: 'Test value 1', description: 'Test description 1' },
694
- { label: 'Test label 2', value: 'Test value 2' },
695
- { label: 'Test label 3', value: 'Test value 3' },
696
- ]`;
697
- await page.setContent(getTestSelect(optionsWithDescription));
698
- await page.waitForChanges();
699
- const select = await page.find("ic-select >>> #ic-select-input-0");
700
- await select.press("ArrowDown");
701
- await page.waitForChanges();
702
- const menu = await page.find("ic-select >>> #ic-select-input-0-menu");
703
- const firstOption = await menu.findAll("li");
704
- expect(firstOption[0].getAttribute("aria-label")).toBe("Test label 1, Test description 1");
705
- });
706
- it("should set the aria-label correctly if an option is within a group", async () => {
707
- const page = await newE2EPage();
708
- const optionsWithDescription = `[
709
- {
710
- label: 'Test group',
711
- children: [
712
- { label: 'Test label 1', value: 'Test value 1' },
713
- { label: 'Test label 2', value: 'Test value 2' },
714
- { label: 'Test label 3', value: 'Test value 3' },
715
- ],
716
- },
717
- ]`;
718
- await page.setContent(getTestSelect(optionsWithDescription));
719
- await page.waitForChanges();
720
- const select = await page.find("ic-select >>> #ic-select-input-0");
721
- await select.press("ArrowDown");
722
- await page.waitForChanges();
723
- const menu = await page.find("ic-select >>> #ic-select-input-0-menu");
724
- const firstOption = await menu.findAll("li");
725
- expect(firstOption[0].getAttribute("aria-label")).toBe("Test label 1, Test group group");
726
- });
727
- it("should set the aria-label correctly if an option has a description and is within a group", async () => {
728
- const page = await newE2EPage();
729
- const optionsWithDescription = `[
730
- {
731
- label: 'Test group',
732
- children: [
733
- { label: 'Test label 1', value: 'Test value 1', description: 'Test description 1' },
734
- { label: 'Test label 2', value: 'Test value 2' },
735
- { label: 'Test label 3', value: 'Test value 3' },
736
- ],
737
- },
738
- ]`;
739
- await page.setContent(getTestSelect(optionsWithDescription));
740
- await page.waitForChanges();
741
- const select = await page.find("ic-select >>> #ic-select-input-0");
742
- await select.press("ArrowDown");
743
- await page.waitForChanges();
744
- const menu = await page.find("ic-select >>> #ic-select-input-0-menu");
745
- const firstOption = await menu.findAll("li");
746
- expect(firstOption[0].getAttribute("aria-label")).toBe("Test label 1, Test description 1, Test group group");
747
- });
748
- it("should call icFocus when focused", async () => {
749
- const page = await newE2EPage();
750
- await page.setContent(`<button>Test button</button>${getTestSelect(options)}`);
751
- await page.waitForChanges();
752
- const button = await page.find("button");
753
- await button.focus();
754
- await page.waitForChanges();
755
- const icFocus = await page.spyOnEvent("icFocus");
756
- await page.keyboard.down("Tab");
757
- await page.waitForChanges();
758
- expect(icFocus).toHaveReceivedEvent();
759
- });
760
- it("should call icBlur when it loses focus", async () => {
761
- const page = await newE2EPage();
762
- await page.setContent(getTestSelect(options));
763
- await page.waitForChanges();
764
- const icBlur = await page.spyOnEvent("icBlur");
765
- await page.keyboard.down("Tab");
766
- await page.keyboard.down("Tab");
767
- await page.waitForChanges();
768
- expect(icBlur).toHaveReceivedEvent();
769
- });
770
- describe("loading", () => {
771
- it("should display a loading message and then the options when fetching options externally", async () => {
772
- const page = await newE2EPage();
773
- await page.setContent(`<ic-select label="IC Select Test" loading="true"></ic-select>
774
- <script>
775
- var select = document.querySelector('ic-select');
776
- select.options = [];
777
- select.addEventListener('icChange', function (event) {
778
- option = event.detail.value;
779
- select.value = option;
780
- });
781
- setTimeout(() => {
782
- select.options = [
783
- { label: 'Test label 1', value: 'Test value 1' },
784
- { label: 'Test label 2', value: 'Test value 2' },
785
- { label: 'Test label 3', value: 'Test value 3' },
786
- ];
787
- }, 1000);
788
- </script>`);
789
- await page.waitForChanges();
790
- let firstOption = await page.find("ic-select >>> #ic-select-input-0-menu li");
791
- expect(firstOption).toEqualText("Loading...");
792
- await page.waitForTimeout(1500);
793
- firstOption = await page.find("ic-select >>> #ic-select-input-0-menu li");
794
- expect(firstOption).toEqualText("Test label 1");
795
- const icSelect = await page.find("ic-select");
796
- expect(icSelect.getAttribute("loading")).toBeFalsy;
797
- });
798
- it("should display a retry button and a custom loading error when it times out and should not update the options", async () => {
799
- const page = await newE2EPage();
800
- await page.setContent(`<ic-select label="IC Select Test" loading="true" timeout="500" options="[]" loading-error-label="Error"></ic-select>`);
801
- await page.waitForChanges();
802
- let firstOption = await page.find("ic-select >>> #ic-select-input-0-menu li");
803
- expect(firstOption).toEqualText("Loading...");
804
- await page.waitForTimeout(560);
805
- firstOption = await page.find("ic-select >>> #ic-select-input-0-menu li ic-typography");
806
- expect(firstOption).toEqualText("Error");
807
- const retryButton = await page.find("ic-select >>> #retry-button");
808
- expect(retryButton).not.toBeNull;
809
- await page.waitForTimeout(1500);
810
- firstOption = await page.find("ic-select >>> #ic-select-input-0-menu li ic-typography");
811
- expect(firstOption).toEqualText("Error");
812
- });
813
- it("should focus the retry button on tab and emit icBlur and close the menu when blurring", async () => {
814
- const page = await newE2EPage();
815
- await page.setContent(`<ic-select label="IC Select Test" loading="true" timeout="500" options="[]" loading-error-label="Error"></ic-select>`);
816
- await page.waitForChanges();
817
- await page.waitForTimeout(560);
818
- const select = await page.find("ic-select >>> #ic-select-input-0");
819
- await select.click();
820
- await page.waitForChanges();
821
- await page.keyboard.press("Tab");
822
- await page.waitForChanges();
823
- const icBlur = await page.spyOnEvent("icBlur");
824
- expect(icBlur).not.toHaveReceivedEvent();
825
- const activeElId = await page.$eval("ic-select", (el) => el.shadowRoot.activeElement.id);
826
- expect(activeElId).toBe("retry-button");
827
- await page.keyboard.press("Tab");
828
- await page.waitForChanges();
829
- expect(icBlur).toHaveReceivedEvent();
830
- });
831
- it("should retry loading and keep the menu open when retry button is clicked", async () => {
832
- const page = await newE2EPage();
833
- await page.setContent(`<ic-select label="IC Select Test" loading="true" timeout="500"></ic-select>
834
- <script>
835
- var select = document.querySelector('ic-select');
836
- select.options = [];
837
- select.addEventListener('icChange', function (event) {
838
- option = event.detail.value;
839
- select.value = option;
840
- });
841
- select.addEventListener('icRetryLoad', function () {
842
- select.loading = true;
843
- });
844
- </script>`);
845
- await page.waitForChanges();
846
- const icRetryLoad = await page.spyOnEvent("icRetryLoad");
847
- await page.waitForTimeout(560);
848
- let firstOption = await page.find("ic-select >>> #ic-select-input-0-menu li ic-typography");
849
- expect(firstOption).toEqualText("Loading Error");
850
- const select = await page.find("ic-select >>> #ic-select-input-0");
851
- await select.click();
852
- await page.waitForChanges();
853
- const retryButton = await page.find("ic-select >>> #retry-button");
854
- await retryButton.click();
855
- await page.waitForChanges();
856
- expect(icRetryLoad).toHaveReceivedEvent;
857
- firstOption = await page.find("ic-select >>> #ic-select-input-0-menu li");
858
- expect(firstOption).toEqualText("Loading...");
859
- expect(await getMenuVisibility(page)).toBe("visible");
860
- });
861
- it("should retry loading and keep the menu open when retry button is pressed with Enter", async () => {
862
- const page = await newE2EPage();
863
- await page.setContent(`<ic-select label="IC Select Test" loading="true" options="[]" timeout="500"></ic-select>`);
864
- await page.waitForChanges();
865
- const icRetryLoad = await page.spyOnEvent("icRetryLoad");
866
- await page.waitForTimeout(560);
867
- const firstOption = await page.find("ic-select >>> #ic-select-input-0-menu li ic-typography");
868
- expect(firstOption).toEqualText("Loading Error");
869
- const select = await page.find("ic-select >>> #ic-select-input-0");
870
- await select.click();
871
- await page.waitForChanges();
872
- const retryButton = await page.find("ic-select >>> #retry-button");
873
- await retryButton.press("Enter");
874
- await page.waitForChanges();
875
- expect(icRetryLoad).toHaveReceivedEvent;
876
- expect(await getMenuVisibility(page)).toBe("visible");
877
- });
878
- it("should render a No results message if no options are provided on render", async () => {
879
- const page = await newE2EPage();
880
- await page.setContent(getTestSelect(`[]`));
881
- await page.waitForChanges();
882
- const select = await page.find("ic-select >>> #ic-select-input-0");
883
- await select.click();
884
- await page.waitForChanges();
885
- const menu = await page.find("ic-select >>> #ic-select-input-0-menu");
886
- const menuOptions = await menu.findAll("li");
887
- expect(menuOptions).toHaveLength(1);
888
- expect(menuOptions[0]).toEqualText("No results found");
889
- });
890
- });
891
- });
892
- describe("searchable", () => {
893
- it("should open menu when character is entered in input field and filter options", async () => {
894
- const page = await newE2EPage();
895
- await page.setContent(getTestSearchableSelect(searchableOptions));
896
- await page.waitForChanges();
897
- const select = await page.find("ic-select >>> #ic-select-input-0");
898
- await select.press("c");
899
- await page.waitForChanges();
900
- expect(await getMenuVisibility(page)).toBe("visible");
901
- const menu = await page.find("ic-select >>> #ic-select-input-0-menu");
902
- const menuOptions = await menu.findAll("li");
903
- expect(menuOptions).toHaveLength(4);
904
- expect(menuOptions[0]).toEqualText("Cappuccino");
905
- expect(menuOptions[1]).toEqualText("Americano");
906
- expect(menuOptions[2]).toEqualText("Mocha");
907
- expect(menuOptions[3]).toEqualText("Macchiato");
908
- });
909
- it("should keep the same options when characters are entered and the menu is reopened", async () => {
910
- const page = await newE2EPage();
911
- await page.setContent(getTestSearchableSelect(searchableOptions));
912
- await page.waitForChanges();
913
- await focusAndTypeIntoInput("foo", page);
914
- await page.waitForChanges();
915
- const menu = await page.find("ic-select >>> #ic-select-input-0-menu");
916
- let menuOptions = await menu.findAll("li");
917
- expect(menuOptions).toHaveLength(1);
918
- expect(menuOptions[0]).toEqualText("No results found");
919
- const select = await page.find("ic-select >>> #ic-select-input-0");
920
- select.click();
921
- await page.waitForChanges();
922
- expect(await getMenuVisibility(page)).toBe("hidden");
923
- select.click();
924
- await page.waitForChanges();
925
- expect(await getMenuVisibility(page)).toBe("visible");
926
- menuOptions = await menu.findAll("li");
927
- expect(menuOptions).toHaveLength(1);
928
- expect(menuOptions[0]).toEqualText("No results found");
929
- });
930
- it("should display no results state when search term matches none of the options", async () => {
931
- const page = await newE2EPage();
932
- await page.setContent(getTestSearchableSelect(searchableOptions));
933
- await page.waitForChanges();
934
- const select = await page.find("ic-select >>> #ic-select-input-0");
935
- await select.press("z");
936
- await page.waitForChanges();
937
- const menu = await page.find("ic-select >>> #ic-select-input-0-menu");
938
- const menuOptions = await menu.findAll("li");
939
- expect(menuOptions).toHaveLength(1);
940
- expect(menuOptions[0]).toEqualText("No results found");
941
- });
942
- it("should filter options accordingly when Backspace is pressed", async () => {
943
- const page = await newE2EPage();
944
- await page.setContent(getTestSearchableSelect(searchableOptions));
945
- await page.waitForChanges();
946
- const select = await page.find("ic-select >>> #ic-select-input-0");
947
- await select.press("f");
948
- await page.waitForChanges();
949
- await select.press("i");
950
- await page.waitForChanges();
951
- const menu = await page.find("ic-select >>> #ic-select-input-0-menu");
952
- let menuOptions = await menu.findAll("li");
953
- expect(menuOptions).toHaveLength(1);
954
- await select.press("Backspace");
955
- await page.waitForChanges();
956
- menuOptions = await menu.findAll("li");
957
- expect(menuOptions).toHaveLength(2);
958
- expect(menuOptions[0]).toEqualText("Filter");
959
- expect(menuOptions[1]).toEqualText("Flat white");
960
- });
961
- it("should filter options when search match position is set to start", async () => {
962
- const page = await newE2EPage();
963
- await page.setContent(getTestSearchableSelect(searchableOptions));
964
- const icSelect = await page.find("ic-select");
965
- icSelect.setAttribute("search-match-position", "start");
966
- await page.waitForChanges();
967
- const select = await page.find("ic-select >>> #ic-select-input-0");
968
- await select.press("c");
969
- await page.waitForChanges();
970
- const menu = await page.find("ic-select >>> #ic-select-input-0-menu");
971
- const menuOptions = await menu.findAll("li");
972
- expect(menuOptions).toHaveLength(1);
973
- expect(menuOptions[0]).toEqualText("Cappuccino");
974
- });
975
- it("should include option descriptions in search", async () => {
976
- const page = await newE2EPage();
977
- const optionsWithDescription = `[
978
- { label: "Cappuccino", value: "Cap" },
979
- { label: "Latte", value: "Lat", description: "A milkier coffee than a cappuccino" },
980
- { label: "Americano", value: "Ame" },
981
- { label: "Filter", value: "Fil" },
982
- { label: "Flat white", value: "Fla" },
983
- { label: "Mocha", value: "Moc" },
984
- { label: "Macchiato", value: "Mac" },
985
- ]`;
986
- await page.setContent(getTestSearchableSelect(optionsWithDescription));
987
- const icSelect = await page.find("ic-select");
988
- icSelect.setAttribute("include-descriptions-in-search", true);
989
- await page.waitForChanges();
990
- const select = await page.find("ic-select >>> #ic-select-input-0");
991
- await select.press("m");
992
- await page.waitForChanges();
993
- await select.press("i");
994
- await page.waitForChanges();
995
- const menu = await page.find("ic-select >>> #ic-select-input-0-menu");
996
- const menuOptions = await menu.findAll("li");
997
- expect(menuOptions).toHaveLength(1);
998
- expect(menuOptions[0].textContent.substring(0, 5)).toEqualText("Latte");
999
- });
1000
- it("should not include group titles in search", async () => {
1001
- const page = await newE2EPage();
1002
- const groupedOptions = `[
1003
- {
1004
- label: "Fancy",
1005
- children: [
1006
- { label: "Cappuccino", value: "Cap" },
1007
- { label: "Flat white", value: "Flat" },
1008
- ],
1009
- },
1010
- {
1011
- label: "Boring",
1012
- children: [
1013
- { label: "Filter", value: "Fil" },
1014
- { label: "Latte", value: "Lat" },
1015
- ],
1016
- },
1017
- ]`;
1018
- await page.setContent(getTestSearchableSelect(groupedOptions));
1019
- await page.waitForChanges();
1020
- const select = await page.find("ic-select >>> #ic-select-input-0");
1021
- await select.press("b");
1022
- await page.waitForChanges();
1023
- const menu = await page.find("ic-select >>> #ic-select-input-0-menu");
1024
- const menuOptions = await menu.findAll("li");
1025
- expect(menuOptions).toHaveLength(1);
1026
- expect(menuOptions[0]).toEqualText("No results found");
1027
- });
1028
- it("should display whole group when group titles included in search", async () => {
1029
- const page = await newE2EPage();
1030
- const groupedOptions = `[
1031
- {
1032
- label: "Fancy",
1033
- children: [
1034
- { label: "Cappuccino", value: "Cap" },
1035
- { label: "Flat white", value: "Flat" },
1036
- ],
1037
- },
1038
- {
1039
- label: "Boring",
1040
- children: [
1041
- { label: "Filter", value: "Fil" },
1042
- { label: "Latte", value: "Lat" },
1043
- ],
1044
- },
1045
- ]`;
1046
- await page.setContent(getTestSearchableSelect(groupedOptions));
1047
- const icSelect = await page.find("ic-select");
1048
- icSelect.setAttribute("include-group-titles-in-search", true);
1049
- await page.waitForChanges();
1050
- const select = await page.find("ic-select >>> #ic-select-input-0");
1051
- await select.press("b");
1052
- await page.waitForChanges();
1053
- const menu = await page.find("ic-select >>> #ic-select-input-0-menu");
1054
- const menuOptions = await menu.findAll("li");
1055
- expect(menuOptions).toHaveLength(2);
1056
- expect(menuOptions[0]).toEqualText("Filter");
1057
- expect(menuOptions[1]).toEqualText("Latte");
1058
- });
1059
- it("should display a clear button which clears the input when clicked", async () => {
1060
- const page = await newE2EPage();
1061
- await page.setContent(getTestSearchableSelect(searchableOptions));
1062
- await page.waitForChanges();
1063
- const icChange = await page.spyOnEvent("icChange");
1064
- let clearButton = await page.find("ic-select >>> .clear-button");
1065
- expect(clearButton).toBeNull();
1066
- const select = await page.find("ic-select >>> #ic-select-input-0");
1067
- await select.press("a");
1068
- await page.waitForChanges();
1069
- clearButton = await page.find("ic-select >>> .clear-button");
1070
- expect(clearButton).not.toBeNull();
1071
- await clearButton.click();
1072
- expect(select.textContent).toBe("");
1073
- expect(icChange).toHaveReceivedEventDetail({
1074
- value: null,
1075
- });
1076
- });
1077
- it("should emit the value as null when the input is changed after selecting an option", async () => {
1078
- const page = await newE2EPage();
1079
- await page.setContent(getTestSearchableSelect(searchableOptions));
1080
- await page.waitForChanges();
1081
- const icChange = await page.spyOnEvent("icChange");
1082
- const select = await page.find("ic-select >>> #ic-select-input-0");
1083
- await select.press("ArrowDown");
1084
- await page.waitForChanges();
1085
- await select.press("Enter");
1086
- await page.waitForChanges();
1087
- expect(icChange).toHaveReceivedEventDetail({
1088
- value: "Cap",
1089
- });
1090
- const clearButton = await page.find("ic-select >>> .clear-button");
1091
- await clearButton.click();
1092
- await page.waitForChanges();
1093
- expect(icChange).toHaveReceivedEventDetail({
1094
- value: null,
1095
- });
1096
- });
1097
- it("should still filter the options when the input is changed after selecting an option", async () => {
1098
- const page = await newE2EPage();
1099
- await page.setContent(getTestSearchableSelect(searchableOptions));
1100
- await page.waitForChanges();
1101
- const icChange = await page.spyOnEvent("icChange");
1102
- const select = await page.find("ic-select >>> #ic-select-input-0");
1103
- await select.press("ArrowDown");
1104
- await page.waitForChanges();
1105
- await select.press("Enter");
1106
- await page.waitForChanges();
1107
- expect(icChange).toHaveReceivedEventDetail({
1108
- value: "Cap",
1109
- });
1110
- for (let i = 0; i <= 7; i++) {
1111
- select.press("Backspace");
1112
- await page.waitForChanges();
1113
- }
1114
- const menu = await page.find("ic-select >>> #ic-select-input-0-menu");
1115
- const menuOptions = await menu.findAll("li");
1116
- await page.waitForChanges();
1117
- expect(menuOptions).toHaveLength(2);
1118
- expect(menuOptions[0]).toEqualText("Cappuccino");
1119
- expect(menuOptions[1]).toEqualText("Americano");
1120
- });
1121
- it("should close menu on blur", async () => {
1122
- const page = await newE2EPage();
1123
- await page.setContent(getTestSearchableSelect(searchableOptions));
1124
- await page.waitForChanges();
1125
- const select = await page.find("ic-select >>> #ic-select-input-0");
1126
- await select.click();
1127
- await page.waitForChanges();
1128
- expect(await getMenuVisibility(page)).toBe("visible");
1129
- await select.press("Tab");
1130
- expect(await getMenuVisibility(page)).toBe("hidden");
1131
- });
1132
- it("should emit icChange on delay", async () => {
1133
- const page = await newE2EPage();
1134
- await page.setContent(`<ic-select label="IC Select Test" debounce="500" searchable></ic-select>`);
1135
- await page.waitForChanges();
1136
- const icChange = await page.spyOnEvent("icChange");
1137
- await focusAndTypeIntoInput("foo", page);
1138
- await page.waitForTimeout(600);
1139
- expect(icChange).toHaveReceivedEventDetail({
1140
- value: "foo",
1141
- });
1142
- await focusAndTypeIntoInput("bar", page);
1143
- await page.waitForChanges();
1144
- await page.waitForTimeout(100);
1145
- expect(icChange).toHaveReceivedEventDetail({
1146
- value: "foo",
1147
- });
1148
- await page.waitForTimeout(500);
1149
- expect(icChange).toHaveReceivedEventDetail({
1150
- value: "foobar",
1151
- });
1152
- });
1153
- it("should update hidden input to value typed in select searchable input", async () => {
1154
- const page = await newE2EPage();
1155
- await page.setContent(getTestSearchableSelect(searchableOptions));
1156
- await page.waitForChanges();
1157
- await focusAndTypeIntoInput("bar", page);
1158
- await page.waitForChanges();
1159
- const hiddenInput = await page.find("input[type='hidden']");
1160
- expect(hiddenInput.getAttribute("value")).toBe("bar");
1161
- });
1162
- it("should keep typed in hidden input value when highlighting menu options", async () => {
1163
- const page = await newE2EPage();
1164
- await page.setContent(getTestSearchableSelect(searchableOptions));
1165
- await page.waitForChanges();
1166
- await focusAndTypeIntoInput("cap", page);
1167
- await page.waitForChanges();
1168
- let hiddenInput = await page.find("input[type='hidden']");
1169
- expect(hiddenInput.getAttribute("value")).toBe("cap");
1170
- await page.keyboard.press("ArrowDown");
1171
- await page.waitForChanges();
1172
- const menuListItems = await page.findAll("ic-select >>> ic-menu > ul > li");
1173
- expect(menuListItems[0]).toHaveClass("focused-option");
1174
- hiddenInput = await page.find("input[type='hidden']");
1175
- expect(hiddenInput.getAttribute("value")).toBe("cap");
1176
- });
1177
- it("should update hidden value from typed to selected", async () => {
1178
- const page = await newE2EPage();
1179
- await page.setContent(getTestSearchableSelect(searchableOptions));
1180
- await page.waitForChanges();
1181
- await focusAndTypeIntoInput("o", page);
1182
- await page.waitForChanges();
1183
- const hiddenInput = await page.find("input[type='hidden']");
1184
- expect(hiddenInput.getAttribute("value")).toBe("o");
1185
- await page.keyboard.press("ArrowDown");
1186
- await page.waitForChanges();
1187
- const menuListItems = await page.findAll("ic-select >>> ic-menu > ul > li");
1188
- expect(menuListItems[0]).toHaveClass("focused-option");
1189
- await page.keyboard.press("Enter");
1190
- await page.waitForChanges();
1191
- expect(hiddenInput.getAttribute("value")).toBe("Cap");
1192
- });
1193
- it("should update hidden value from typed to selected to typed", async () => {
1194
- const page = await newE2EPage();
1195
- await page.setContent(getTestSearchableSelect(searchableOptions));
1196
- await page.waitForChanges();
1197
- await focusAndTypeIntoInput("o", page);
1198
- await page.waitForChanges();
1199
- const hiddenInput = await page.find("input[type='hidden']");
1200
- expect(hiddenInput.getAttribute("value")).toBe("o");
1201
- await page.keyboard.press("ArrowDown");
1202
- await page.waitForChanges();
1203
- const menuListItems = await page.findAll("ic-select >>> ic-menu > ul > li");
1204
- expect(menuListItems[0]).toHaveClass("focused-option");
1205
- await page.keyboard.press("Enter");
1206
- await page.waitForChanges();
1207
- expect(hiddenInput.getAttribute("value")).toBe("Cap");
1208
- await page.keyboard.press("1");
1209
- await page.waitForChanges();
1210
- expect(hiddenInput.getAttribute("value")).toBe("Cappuccino1");
1211
- });
1212
- it("should update the value of the input and options when passing the value directly", async () => {
1213
- const page = await newE2EPage();
1214
- await page.setContent(getTestSearchableSelect(searchableOptions));
1215
- await page.waitForChanges();
1216
- const select = await page.find("ic-select");
1217
- select.setAttribute("value", "foo");
1218
- await page.waitForChanges();
1219
- const selectInput = await page.find('ic-select >>> input[role="combobox"]');
1220
- expect(await selectInput.getProperty("value")).toBe("foo");
1221
- });
1222
- it("should trigger icChange on input for each typed value", async () => {
1223
- const page = await newE2EPage();
1224
- await page.setContent(getTestSearchableSelect(searchableOptions));
1225
- await page.waitForChanges();
1226
- const select = await page.find("ic-select");
1227
- const icChange = await select.spyOnEvent("icChange");
1228
- await focusAndTypeIntoInput("f", page);
1229
- await page.waitForChanges();
1230
- expect(icChange).toHaveReceivedEventDetail({
1231
- value: "f",
1232
- });
1233
- await focusAndTypeIntoInput("o", page);
1234
- await page.waitForChanges();
1235
- expect(icChange).toHaveReceivedEventDetail({
1236
- value: "fo",
1237
- });
1238
- await focusAndTypeIntoInput("o", page);
1239
- await page.waitForChanges();
1240
- expect(icChange).toHaveReceivedEventDetail({
1241
- value: "foo",
1242
- });
1243
- });
1244
- it("should not trigger icChange on highlighting menu items", async () => {
1245
- const page = await newE2EPage();
1246
- await page.setContent(getTestSearchableSelect(searchableOptions));
1247
- await page.waitForChanges();
1248
- const select = await page.find("ic-select");
1249
- const icChange = await select.spyOnEvent("icChange");
1250
- await page.$eval("ic-select", (el) => {
1251
- const input = el.shadowRoot.querySelector("input");
1252
- input.focus();
1253
- });
1254
- await page.waitForChanges();
1255
- await page.keyboard.press("ArrowDown");
1256
- await page.waitForChanges();
1257
- expect(icChange).not.toHaveReceivedEvent();
1258
- await page.keyboard.press("ArrowDown");
1259
- await page.waitForChanges();
1260
- expect(icChange).not.toHaveReceivedEvent();
1261
- });
1262
- it("should not select a menu option when typing into the searchable input field", async () => {
1263
- const page = await newE2EPage();
1264
- await page.setContent(getTestSearchableSelect(searchableOptions));
1265
- await page.waitForChanges();
1266
- await focusAndTypeIntoInput("Cap", page);
1267
- await page.waitForChanges();
1268
- const menu = await page.find("ic-select >>> #ic-select-input-0-menu");
1269
- expect(await getMenuVisibility(page)).toBe("visible");
1270
- const firstOption = await menu.findAll("li");
1271
- expect(firstOption[0]).not.toHaveClass("aria-selected");
1272
- });
1273
- it("should not selet a menu option when one has previously been set and backspace is pressed", async () => {
1274
- const page = await newE2EPage();
1275
- await page.setContent(getTestSearchableSelect(searchableOptions));
1276
- await page.waitForChanges();
1277
- await focusAndTypeIntoInput("Lat", page);
1278
- await page.waitForChanges();
1279
- const menu = await page.find("ic-select >>> #ic-select-input-0-menu");
1280
- expect(await getMenuVisibility(page)).toBe("visible");
1281
- await page.keyboard.press("ArrowDown");
1282
- await page.waitForChanges();
1283
- await page.keyboard.press("Enter");
1284
- await page.waitForChanges();
1285
- const inputValue = await page.$eval("ic-select", (el) => {
1286
- const input = el.shadowRoot.querySelector("input");
1287
- return input.value;
1288
- });
1289
- expect(inputValue).toBe("Latte");
1290
- await page.keyboard.press("Backspace");
1291
- await page.waitForChanges();
1292
- await page.keyboard.press("Backspace");
1293
- await page.waitForChanges();
1294
- const options = await menu.findAll("li");
1295
- options.forEach((option) => {
1296
- expect(option).not.toHaveClass("aria-selected");
1297
- });
1298
- });
1299
- it("should display selected option when selecting a menu option and then opening and closing the menu", async () => {
1300
- const page = await newE2EPage();
1301
- await page.setContent(getTestSearchableSelect(searchableOptions));
1302
- await page.waitForChanges();
1303
- await focusAndTypeIntoInput("Lat", page);
1304
- await page.waitForChanges();
1305
- const menu = await page.find("ic-select >>> #ic-select-input-0-menu");
1306
- expect(await getMenuVisibility(page)).toBe("visible");
1307
- await page.keyboard.press("ArrowDown");
1308
- await page.waitForChanges();
1309
- await page.keyboard.press("Enter");
1310
- await page.waitForChanges();
1311
- const inputValue = await page.$eval("ic-select", (el) => {
1312
- const input = el.shadowRoot.querySelector("input");
1313
- return input.value;
1314
- });
1315
- expect(inputValue).toBe("Latte");
1316
- await page.evaluate(() => {
1317
- const button = document.querySelector("button");
1318
- button.focus();
1319
- });
1320
- await page.waitForChanges();
1321
- expect(await getMenuVisibility(page)).toBe("hidden");
1322
- const select = await page.find("ic-select");
1323
- await select.click();
1324
- await page.keyboard.press("ArrowDown");
1325
- await page.waitForChanges();
1326
- const latteOption = await menu.find("li[data-value='Lat']");
1327
- expect(latteOption).toHaveAttribute("aria-selected");
1328
- });
1329
- it("hidden input value when on initial load with default value", async () => {
1330
- const page = await newE2EPage();
1331
- await page.setContent(getTestSelectSearchableFormReset(options));
1332
- await page.waitForChanges();
1333
- const hiddenInput = await page.find("ic-select > [name*='ic-select-input-0']");
1334
- expect(hiddenInput.getAttribute("value")).toBe("Test value 1");
1335
- });
1336
- it("should submit hidden input value when updating value, pressing reset to initial value and then submitting", async () => {
1337
- const page = await newE2EPage();
1338
- await page.setContent(getTestSelectSearchableFormReset(options));
1339
- await page.waitForChanges();
1340
- const hiddenInput = await page.find("ic-select > [name*='ic-select-input-0']");
1341
- expect(hiddenInput.getAttribute("value")).toBe("Test value 1");
1342
- const select = await page.find("ic-select >>> #ic-select-input-0");
1343
- await select.press("Backspace");
1344
- await page.waitForChanges();
1345
- expect(await getMenuVisibility(page)).toBe("visible");
1346
- await page.keyboard.press("ArrowDown");
1347
- await page.waitForChanges();
1348
- await page.keyboard.press("ArrowDown");
1349
- await page.waitForChanges();
1350
- await page.keyboard.press("Enter");
1351
- await page.waitForChanges();
1352
- expect(hiddenInput.getAttribute("value")).toBe("Test value 2");
1353
- await page.$eval("#resetButton", (el) => {
1354
- const reset = el;
1355
- reset.click();
1356
- });
1357
- await page.waitForChanges();
1358
- expect(hiddenInput.getAttribute("value")).toBe("Test value 1");
1359
- });
1360
- it("should scroll menu", async () => {
1361
- const page = await newE2EPage();
1362
- await page.setContent(getTestSearchableSelect(largeOptions));
1363
- await page.waitForChanges();
1364
- await focusAndTypeIntoInput("Test", page);
1365
- await page.waitForChanges();
1366
- expect(await getMenuVisibility(page)).toBe("visible");
1367
- await page.keyboard.press("ArrowDown");
1368
- await page.waitForChanges();
1369
- let menuScrollTop = await page.$eval("ic-select", (el) => {
1370
- const menu = el.shadowRoot.querySelector("ic-menu ul");
1371
- return menu.scrollTop;
1372
- });
1373
- expect(menuScrollTop).toBe(0);
1374
- await page.keyboard.press("Enter");
1375
- await page.waitForChanges();
1376
- const inputValue = await page.$eval("ic-select", (el) => {
1377
- const input = el.shadowRoot.querySelector("input");
1378
- return input.value;
1379
- });
1380
- expect(inputValue).toBe("Test label 1");
1381
- await page.$eval("ic-select", (el) => {
1382
- const input = el.shadowRoot.querySelector("input");
1383
- input.focus();
1384
- });
1385
- await page.waitForChanges();
1386
- await page.keyboard.press("ArrowUp");
1387
- await page.waitForChanges();
1388
- menuScrollTop = await page.$eval("ic-select", (el) => {
1389
- const menu = el.shadowRoot.querySelector("ic-menu ul");
1390
- return menu.scrollTop;
1391
- });
1392
- expect(menuScrollTop).not.toBe(0);
1393
- });
1394
- it("should only highlight and select enabled options in searchable with arrowDown", async () => {
1395
- const optionsWithDisabled = `[
1396
- { label: 'Test label 1', value: 'Test value 1', disabled: true },
1397
- { label: 'Test label 2', value: 'Test value 2' },
1398
- { label: 'Test label 3', value: 'Test value 3', disabled: true },
1399
- { label: 'Test label 4', value: 'Test value 4', disabled: true },
1400
- { label: 'Test label 5', value: 'Test value 5' },
1401
- ]`;
1402
- const page = await newE2EPage();
1403
- await page.setContent(getTestSearchableSelect(optionsWithDisabled));
1404
- await page.waitForChanges();
1405
- await focusAndTypeIntoInput("Test", page);
1406
- await page.waitForChanges();
1407
- expect(await getMenuVisibility(page)).toBe("visible");
1408
- await page.keyboard.press("ArrowDown");
1409
- await page.waitForChanges();
1410
- const menu = await page.find("ic-select >>> #ic-select-input-0-menu");
1411
- const menuItems = await menu.findAll("li");
1412
- expect(menuItems[0]).not.toHaveClass("focused-option");
1413
- expect(menuItems[1]).toHaveClass("focused-option");
1414
- await page.keyboard.press("Enter");
1415
- await page.waitForChanges();
1416
- let inputValue = await page.$eval("ic-select", (el) => {
1417
- const input = el.shadowRoot.querySelector("input");
1418
- return input.value;
1419
- });
1420
- expect(inputValue).toBe("Test label 2");
1421
- await page.keyboard.press("ArrowDown");
1422
- await page.waitForChanges();
1423
- await page.keyboard.press("ArrowDown");
1424
- await page.waitForChanges();
1425
- await page.keyboard.press("Enter");
1426
- await page.waitForChanges();
1427
- inputValue = await page.$eval("ic-select", (el) => {
1428
- const input = el.shadowRoot.querySelector("input");
1429
- return input.value;
1430
- });
1431
- expect(inputValue).toBe("Test label 5");
1432
- });
1433
- it("should only highlight and select enabled options in searchable with arrowUp", async () => {
1434
- const optionsWithDisabled = `[
1435
- { label: 'Test label 1', value: 'Test value 1', disabled: true },
1436
- { label: 'Test label 2', value: 'Test value 2' },
1437
- { label: 'Test label 3', value: 'Test value 3', disabled: true },
1438
- { label: 'Test label 4', value: 'Test value 4', disabled: true },
1439
- { label: 'Test label 5', value: 'Test value 5' },
1440
- ]`;
1441
- const page = await newE2EPage();
1442
- await page.setContent(getTestSearchableSelect(optionsWithDisabled));
1443
- await page.waitForChanges();
1444
- await focusAndTypeIntoInput("Test", page);
1445
- await page.waitForChanges();
1446
- expect(await getMenuVisibility(page)).toBe("visible");
1447
- await page.keyboard.press("ArrowUp");
1448
- await page.waitForChanges();
1449
- const menu = await page.find("ic-select >>> #ic-select-input-0-menu");
1450
- const menuItems = await menu.findAll("li");
1451
- expect(menuItems[menuItems.length - 1]).toHaveClass("focused-option");
1452
- expect(menuItems[menuItems.length - 2]).not.toHaveClass("focused-option");
1453
- await page.keyboard.press("Enter");
1454
- await page.waitForChanges();
1455
- let inputValue = await page.$eval("ic-select", (el) => {
1456
- const input = el.shadowRoot.querySelector("input");
1457
- return input.value;
1458
- });
1459
- expect(inputValue).toBe("Test label 5");
1460
- await page.keyboard.press("ArrowUp");
1461
- await page.waitForChanges();
1462
- await page.keyboard.press("ArrowUp");
1463
- await page.waitForChanges();
1464
- await page.keyboard.press("Enter");
1465
- await page.waitForChanges();
1466
- inputValue = await page.$eval("ic-select", (el) => {
1467
- const input = el.shadowRoot.querySelector("input");
1468
- return input.value;
1469
- });
1470
- expect(inputValue).toBe("Test label 2");
1471
- });
1472
- describe("loading", () => {
1473
- it("should retry loading and keep the menu open when retry button is pressed with Spacebar", async () => {
1474
- const page = await newE2EPage();
1475
- await page.setContent(`<ic-select label="IC Select Test" searchable="true" options="[]" loading="true" timeout="500"></ic-select>`);
1476
- await page.waitForChanges();
1477
- const icRetryLoad = await page.spyOnEvent("icRetryLoad");
1478
- await page.waitForTimeout(560);
1479
- const firstOption = await page.find("ic-select >>> #ic-select-input-0-menu li ic-typography");
1480
- expect(firstOption).toEqualText("Loading Error");
1481
- const select = await page.find("ic-select >>> #ic-select-input-0");
1482
- await select.click();
1483
- await page.waitForChanges();
1484
- const retryButton = await page.find("ic-select >>> #retry-button");
1485
- await retryButton.press(" ");
1486
- await page.waitForChanges();
1487
- expect(icRetryLoad).toHaveReceivedEvent;
1488
- expect(await getMenuVisibility(page)).toBe("visible");
1489
- });
1490
- it("should cancel loading if the clear button is pressed mid-load", async () => {
1491
- const page = await newE2EPage();
1492
- await page.setContent(`<ic-select label="IC Select Test" searchable="true" timeout="500"></ic-select>
1493
- <script>
1494
- var select = document.querySelector("ic-select");
1495
- select.options = [];
1496
- select.addEventListener("icChange", function() {
1497
- select.loading = "true";
1498
- });
1499
- </script>`);
1500
- await page.waitForChanges();
1501
- const select = await page.find("ic-select >>> #ic-select-input-0");
1502
- await select.press("c");
1503
- await page.waitForChanges();
1504
- let firstOption = await page.find("ic-select >>> #ic-select-input-0-menu li");
1505
- expect(firstOption).toEqualText("Loading...");
1506
- const clearButton = await page.find("ic-select >>> .clear-button");
1507
- await clearButton.click();
1508
- await page.waitForChanges();
1509
- await page.waitForTimeout(560);
1510
- firstOption = await page.find("ic-select >>> #ic-select-input-0-menu li");
1511
- expect(firstOption).toBeNull;
1512
- });
1513
- it("should render a No results message if no options are provided on render", async () => {
1514
- const page = await newE2EPage();
1515
- await page.setContent(getTestSearchableSelect(`[]`));
1516
- await page.waitForChanges();
1517
- const select = await page.find("ic-select >>> #ic-select-input-0");
1518
- await select.click();
1519
- await page.waitForChanges();
1520
- const menu = await page.find("ic-select >>> #ic-select-input-0-menu");
1521
- const menuOptions = await menu.findAll("li");
1522
- expect(menuOptions).toHaveLength(1);
1523
- expect(menuOptions[0]).toEqualText("No results found");
1524
- });
1525
- });
1526
- });
1527
- it("should reset to initial value on form reset", async () => {
1528
- const page = await newE2EPage();
1529
- await page.setContent(getTestSelectFormReset(options));
1530
- await page.waitForChanges();
1531
- let value = await page.$eval("ic-select", (el) => {
1532
- const select = el;
1533
- return select.value;
1534
- });
1535
- expect(value).toBe(undefined);
1536
- const select = await page.find("ic-select >>> #ic-select-input-0");
1537
- await select.press("Enter");
1538
- await page.waitForChanges();
1539
- await select.press("ArrowDown");
1540
- await page.waitForChanges();
1541
- value = await page.$eval("ic-select", (el) => {
1542
- const select = el;
1543
- return select.value;
1544
- });
1545
- expect(value).toBe("Test value 1");
1546
- await page.$eval("#resetButton", (el) => {
1547
- const reset = el;
1548
- reset.click();
1549
- });
1550
- await page.waitForChanges();
1551
- value = await page.$eval("ic-select", (el) => {
1552
- const select = el;
1553
- return select.value;
1554
- });
1555
- expect(value).toBe(undefined);
1556
- });
1557
- it("menu should not be visible on initial load if setting default value and disable filter is set", async () => {
1558
- const page = await newE2EPage();
1559
- await page.setContent(getTestSearchableSelectAsync());
1560
- await page.waitForChanges();
1561
- await page.waitForTimeout(900);
1562
- expect(await getMenuVisibility(page)).toBe("hidden");
1563
- });
1564
- it("should reset to initial value on form reset with searchable", async () => {
1565
- const page = await newE2EPage();
1566
- await page.setContent(getTestSelectSearchableFormReset(options));
1567
- await page.waitForChanges();
1568
- let value = await page.$eval("ic-select", (el) => {
1569
- const select = el;
1570
- return select.value;
1571
- });
1572
- expect(value).toBe("Test value 1");
1573
- const select = await page.find("ic-select >>> #ic-select-input-0");
1574
- await select.press("ArrowDown");
1575
- await page.waitForChanges();
1576
- await select.press("ArrowDown");
1577
- await page.waitForChanges();
1578
- await select.press("Enter");
1579
- await page.waitForChanges();
1580
- value = await page.$eval("ic-select", (el) => {
1581
- const select = el;
1582
- return select.value;
1583
- });
1584
- expect(value).toBe("Test value 2");
1585
- await page.$eval("#resetButton", (el) => {
1586
- const reset = el;
1587
- reset.click();
1588
- });
1589
- await page.waitForChanges();
1590
- value = await page.$eval("ic-select", (el) => {
1591
- const select = el;
1592
- return select.value;
1593
- });
1594
- expect(value).toBe("Test value 1");
1595
- });
1596
- let page;
1597
- describe("native", () => {
1598
- beforeEach(async () => {
1599
- page = await newE2EPage();
1600
- await page.setUserAgent("Mozilla/5.0 (iPhone; CPU iPhone OS 11_0 like Mac OS X) AppleWebKit/604.1.38 (KHTML, like Gecko) Version/11.0 Mobile/15A372 Safari/604.1");
1601
- await page.setViewport({
1602
- width: 375,
1603
- height: 667,
1604
- isMobile: true,
1605
- hasTouch: true,
1606
- });
1607
- });
1608
- it("should render", async () => {
1609
- await page.setContent(getTestSelect(options));
1610
- await page.waitForChanges();
1611
- const select = await page.find("ic-select >>> select");
1612
- expect(select).not.toBeNull();
1613
- });
1614
- it("should render a native select when searchable is applied on mobile", async () => {
1615
- await page.setContent(getTestSearchableSelect(options));
1616
- await page.waitForChanges();
1617
- const select = await page.find("ic-select >>> select");
1618
- expect(select).not.toBeNull();
1619
- });
1620
- it("should render when no options are provided", async () => {
1621
- await page.setContent(`<ic-select label="IC Select Test"></ic-select>`);
1622
- await page.waitForChanges();
1623
- const select = await page.find("ic-select >>> select");
1624
- expect(select).not.toBeNull();
1625
- });
1626
- it("should disable options correctly", async () => {
1627
- const optionsWithDisabled = `[
1628
- { label: 'Test label 1', value: 'Test value 1', disabled: true },
1629
- { label: 'Test label 2', value: 'Test value 2' },
1630
- { label: 'Test label 3', value: 'Test value 3' },
1631
- ]`;
1632
- await page.setContent(getTestSelect(optionsWithDisabled));
1633
- await page.waitForChanges();
1634
- const optionsDisabled = await page.evaluate(() => Array.from(document
1635
- .querySelector("ic-select")
1636
- .shadowRoot.querySelectorAll("option"), (option) => option.disabled));
1637
- expect(optionsDisabled[0]).toBe(true);
1638
- });
1639
- it("should render options as <optgroup>s if they have children", async () => {
1640
- const groupedOptions = `[
1641
- {
1642
- label: 'Test group',
1643
- children: [
1644
- { label: 'Test label 1', value: 'Test value 1' },
1645
- { label: 'Test label 2', value: 'Test value 2' },
1646
- { label: 'Test label 3', value: 'Test value 3' },
1647
- ],
1648
- },
1649
- ]`;
1650
- await page.setContent(getTestSelect(groupedOptions));
1651
- await page.waitForChanges();
1652
- const optGroup = await page.evaluate(() => document.querySelector("ic-select").shadowRoot.querySelector("optgroup"));
1653
- expect(optGroup).toBeTruthy();
1654
- });
1655
- it("should render a required <select> when required", async () => {
1656
- await page.setContent(getTestSelect(options));
1657
- const icSelect = await page.find("ic-select");
1658
- icSelect.setAttribute("required", true);
1659
- await page.waitForChanges();
1660
- const select = await page.find("ic-select >>> select");
1661
- expect(select).toHaveAttribute("required");
1662
- });
1663
- it("should not render a label when the 'hide-label' prop is supplied", async () => {
1664
- await page.setContent(getTestSelect(options));
1665
- const icSelect = await page.find("ic-select");
1666
- icSelect.setAttribute("hide-label", true);
1667
- await page.waitForChanges();
1668
- const label = await page.find("ic-select >>> ic-input-label");
1669
- expect(label).toBeNull();
1670
- });
1671
- it("should render a disabled <select> when the 'disabled' prop is supplied", async () => {
1672
- await page.setContent(getTestSelect(options));
1673
- const icSelect = await page.find("ic-select");
1674
- icSelect.setAttribute("disabled", true);
1675
- await page.waitForChanges();
1676
- const select = await page.find("ic-select >>> select");
1677
- expect(select).toHaveAttribute("disabled");
1678
- });
1679
- it("should render the selected value as text instead of rendering a <select> when read-only", async () => {
1680
- await page.setContent(getTestSelect(options));
1681
- const icSelect = await page.find("ic-select");
1682
- icSelect.setAttribute("value", "Test value 1");
1683
- icSelect.setAttribute("readonly", true);
1684
- await page.waitForChanges();
1685
- const select = await page.find("ic-select >>> select");
1686
- const typography = await page.evaluate(() => Array.from(document
1687
- .querySelector("ic-select")
1688
- .shadowRoot.querySelectorAll("ic-typography"), (typography) => typography.innerText));
1689
- expect(select).toBe(null);
1690
- expect(typography[1]).toBe("Test label 1");
1691
- });
1692
- it("should render the correct placeholder", async () => {
1693
- await page.setContent(getTestSelect(options));
1694
- const icSelect = await page.find("ic-select");
1695
- icSelect.setAttribute("placeholder", "Test placeholder");
1696
- await page.waitForChanges();
1697
- const optionLabels = await page.evaluate(() => Array.from(document
1698
- .querySelector("ic-select")
1699
- .shadowRoot.querySelectorAll("option"), (option) => option.innerText));
1700
- expect(optionLabels[0]).toEqual("Test placeholder");
1701
- });
1702
- it("should set aria-invalid if validation status is 'error'", async () => {
1703
- await page.setContent(getTestSelect(options));
1704
- const icSelect = await page.find("ic-select");
1705
- icSelect.setAttribute("validation-status", "error");
1706
- await page.waitForChanges();
1707
- const select = await page.find("ic-select >>> select");
1708
- expect(select).toHaveAttribute("aria-invalid");
1709
- });
1710
- it("should display the value passed in using the 'value' prop as the selected option", async () => {
1711
- await page.setContent(getTestSelect(options));
1712
- const icSelect = await page.find("ic-select");
1713
- icSelect.setAttribute("value", "Test value 1");
1714
- await page.waitForChanges();
1715
- const optionsSelected = await page.evaluate(() => Array.from(document
1716
- .querySelector("ic-select")
1717
- .shadowRoot.querySelectorAll("option"), (option) => option.selected));
1718
- expect(optionsSelected[1]).toBe(true);
1719
- });
1720
- it("should set the correct name on the hidden input", async () => {
1721
- await page.setContent(getTestSelect(options));
1722
- const icSelect = await page.find("ic-select");
1723
- icSelect.setAttribute("name", "Test name");
1724
- await page.waitForChanges();
1725
- const hiddenInput = await page.find("input");
1726
- const hiddenInputName = await hiddenInput.getProperty("name");
1727
- expect(hiddenInputName).toEqual("Test name");
1728
- });
1729
- it("should call icChange when the selected option is changed", async () => {
1730
- await page.setContent(getTestSelect(options));
1731
- await page.waitForChanges();
1732
- const icChange = await page.spyOnEvent("icChange");
1733
- const select = await page.find("ic-select >>> select");
1734
- await select.press("ArrowDown");
1735
- await select.press("Enter");
1736
- await page.waitForChanges();
1737
- expect(icChange).toHaveReceivedEventDetail({
1738
- value: "Test value 1",
1739
- });
1740
- });
1741
- it("should call icFocus when focused", async () => {
1742
- await page.setContent(getTestSelect(options));
1743
- await page.waitForChanges();
1744
- const icFocus = await page.spyOnEvent("icFocus");
1745
- await page.keyboard.down("Tab");
1746
- await page.waitForChanges();
1747
- expect(icFocus).toHaveReceivedEvent();
1748
- });
1749
- it("should call icBlur when it loses focus", async () => {
1750
- await page.setContent(getTestSelect(options));
1751
- await page.waitForChanges();
1752
- const icBlur = await page.spyOnEvent("icBlur");
1753
- await page.keyboard.down("Tab");
1754
- await page.keyboard.down("Tab");
1755
- await page.waitForChanges();
1756
- expect(icBlur).toHaveReceivedEvent();
1757
- });
1758
- it("should set the 'placeholder' class name if no option is selected", async () => {
1759
- await page.setContent(getTestSelect(options));
1760
- await page.waitForChanges();
1761
- const selectClassName = await page.evaluate(() => document.querySelector("ic-select").shadowRoot.querySelector("select")
1762
- .className);
1763
- expect(selectClassName).toBe("placeholder");
1764
- });
1765
- it("should set the text colour to the primary text colour if an option is selected", async () => {
1766
- await page.setContent(getTestSelect(options));
1767
- const icSelect = await page.find("ic-select");
1768
- icSelect.setAttribute("value", "Test value 1");
1769
- await page.waitForChanges();
1770
- const selectClassName = await page.evaluate(() => document.querySelector("ic-select").shadowRoot.querySelector("select")
1771
- .className);
1772
- expect(selectClassName).toBe("select-option-selected");
1773
- });
1774
- it("should change the text colour to the primary text colour when an option is selected", async () => {
1775
- await page.setContent(getTestSelect(options));
1776
- await page.waitForChanges();
1777
- const select = await page.find("ic-select >>> select");
1778
- await select.press("ArrowDown");
1779
- await select.press("Enter");
1780
- await page.waitForChanges();
1781
- const selectClassName = await page.evaluate(() => document.querySelector("ic-select").shadowRoot.querySelector("select")
1782
- .className);
1783
- expect(selectClassName).toBe("select-option-selected");
1784
- });
1785
- it("should add .menu-scroll to menu components when options height is over 320", async () => {
1786
- const page = await newE2EPage();
1787
- await page.setContent(getTestSelect(largeOptions));
1788
- await page.waitForChanges();
1789
- const select = await page.find("ic-select >>> button.select-input");
1790
- await select.click();
1791
- await page.waitForChanges();
1792
- const menuClasses = await page.evaluate(() => {
1793
- const menu = document
1794
- .querySelector("ic-select")
1795
- .shadowRoot.querySelector("ic-menu .menu");
1796
- return menu.classList;
1797
- });
1798
- expect(Object.values(menuClasses).includes("menu-scroll")).toBeTruthy();
1799
- });
1800
- it("should add .menu-scroll to menu components when options are initially set and then populated with large data set", async () => {
1801
- const page = await newE2EPage();
1802
- await page.setContent(getTestSelectAsync(options, largeOptions));
1803
- await page.waitForChanges();
1804
- const select = await page.find("ic-select >>> button.select-input");
1805
- await select.click();
1806
- await page.waitForChanges();
1807
- let menuClasses = await page.evaluate(() => {
1808
- const menu = document
1809
- .querySelector("ic-select")
1810
- .shadowRoot.querySelector("ic-menu .menu");
1811
- return menu.classList;
1812
- });
1813
- expect(Object.values(menuClasses).includes("menu-scroll")).toBeFalsy();
1814
- await page.waitForTimeout(1200);
1815
- menuClasses = await page.evaluate(() => {
1816
- const menu = document
1817
- .querySelector("ic-select")
1818
- .shadowRoot.querySelector("ic-menu .menu");
1819
- return menu.classList;
1820
- });
1821
- expect(Object.values(menuClasses).includes("menu-scroll")).toBeTruthy();
1822
- });
1823
- });
1824
- });
1825
- //# sourceMappingURL=ic-select.e2e.js.map