wcs-core 7.3.0 → 7.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (251) hide show
  1. package/README.md +11 -9
  2. package/design-tokens/dist/sncf-groupe-root-scoped.css +227 -227
  3. package/design-tokens/dist/sncf-groupe.css +227 -227
  4. package/design-tokens/dist/sncf-holding-root-scoped.css +227 -227
  5. package/design-tokens/dist/sncf-holding.css +227 -227
  6. package/design-tokens/dist/sncf-reseau-root-scoped.css +227 -227
  7. package/design-tokens/dist/sncf-reseau.css +227 -227
  8. package/design-tokens/dist/sncf-voyageurs-root-scoped.css +242 -242
  9. package/design-tokens/dist/sncf-voyageurs.css +242 -242
  10. package/dist/cjs/{popper-8d6e7fca.js → popper-1b61df21.js} +10 -17
  11. package/dist/cjs/popper-1b61df21.js.map +1 -0
  12. package/dist/cjs/wcs-breadcrumb.cjs.entry.js +1 -1
  13. package/dist/cjs/wcs-breadcrumb.cjs.entry.js.map +1 -1
  14. package/dist/cjs/wcs-com-nav-item.cjs.entry.js +1 -1
  15. package/dist/cjs/wcs-com-nav-item.cjs.entry.js.map +1 -1
  16. package/dist/cjs/wcs-com-nav.cjs.entry.js +3 -3
  17. package/dist/cjs/wcs-com-nav.cjs.entry.js.map +1 -1
  18. package/dist/cjs/wcs-dropdown.cjs.entry.js +1 -1
  19. package/dist/cjs/wcs-error_3.cjs.entry.js +1 -1
  20. package/dist/cjs/wcs-error_3.cjs.entry.js.map +1 -1
  21. package/dist/cjs/wcs-galactic-menu.cjs.entry.js +1 -1
  22. package/dist/cjs/wcs-grid.cjs.entry.js +5 -4
  23. package/dist/cjs/wcs-grid.cjs.entry.js.map +1 -1
  24. package/dist/cjs/wcs-horizontal-stepper.cjs.entry.js +3 -2
  25. package/dist/cjs/wcs-horizontal-stepper.cjs.entry.js.map +1 -1
  26. package/dist/cjs/wcs-modal.cjs.entry.js +2 -2
  27. package/dist/cjs/wcs-modal.cjs.entry.js.map +1 -1
  28. package/dist/cjs/wcs-select_2.cjs.entry.js +59 -24
  29. package/dist/cjs/wcs-select_2.cjs.entry.js.map +1 -1
  30. package/dist/cjs/wcs-tabs.cjs.entry.js +1 -1
  31. package/dist/cjs/wcs-tooltip.cjs.entry.js +1 -1
  32. package/dist/collection/components/accordion/{accordion.e2e.js → accordion.e2e.playwright.js} +51 -55
  33. package/dist/collection/components/accordion/accordion.e2e.playwright.js.map +1 -0
  34. package/dist/collection/components/accordion-panel/accordion-panel.js +1 -1
  35. package/dist/collection/components/alert/alert.e2e.playwright.js +125 -0
  36. package/dist/collection/components/alert/alert.e2e.playwright.js.map +1 -0
  37. package/dist/collection/components/alert-drawer/alert-drawer.e2e.playwright.js +107 -0
  38. package/dist/collection/components/alert-drawer/alert-drawer.e2e.playwright.js.map +1 -0
  39. package/dist/collection/components/breadcrumb/breadcrumb.e2e.playwright.js +188 -0
  40. package/dist/collection/components/breadcrumb/breadcrumb.e2e.playwright.js.map +1 -0
  41. package/dist/collection/components/breadcrumb/breadcrumb.js +2 -2
  42. package/dist/collection/components/breadcrumb/breadcrumb.js.map +1 -1
  43. package/dist/collection/components/button/button.e2e.playwright.js +26 -0
  44. package/dist/collection/components/button/button.e2e.playwright.js.map +1 -0
  45. package/dist/collection/components/button/button.js +1 -1
  46. package/dist/collection/components/checkbox/checkbox.e2e.playwright.js +39 -0
  47. package/dist/collection/components/checkbox/checkbox.e2e.playwright.js.map +1 -0
  48. package/dist/collection/components/checkbox/checkbox.js +1 -1
  49. package/dist/collection/components/chip/chip.e2e.playwright.js +190 -0
  50. package/dist/collection/components/chip/chip.e2e.playwright.js.map +1 -0
  51. package/dist/collection/components/com-nav/com-nav.css +15 -0
  52. package/dist/collection/components/com-nav/{com-nav.e2e.js → com-nav.e2e.playwright.js} +60 -44
  53. package/dist/collection/components/com-nav/com-nav.e2e.playwright.js.map +1 -0
  54. package/dist/collection/components/com-nav/com-nav.js +3 -3
  55. package/dist/collection/components/com-nav/com-nav.js.map +1 -1
  56. package/dist/collection/components/com-nav-category/com-nav-category.js +1 -1
  57. package/dist/collection/components/com-nav-item/com-nav-item.css +2 -2
  58. package/dist/collection/components/com-nav-submenu/com-nav-submenu.js +1 -1
  59. package/dist/collection/components/counter/counter.e2e.playwright.js +187 -0
  60. package/dist/collection/components/counter/counter.e2e.playwright.js.map +1 -0
  61. package/dist/collection/components/counter/counter.js +1 -1
  62. package/dist/collection/components/dropdown/dropdown.e2e.playwright.js +320 -0
  63. package/dist/collection/components/dropdown/dropdown.e2e.playwright.js.map +1 -0
  64. package/dist/collection/components/dropdown/dropdown.js +1 -1
  65. package/dist/collection/components/editable-field/editable-field.e2e.playwright.js +156 -0
  66. package/dist/collection/components/editable-field/editable-field.e2e.playwright.js.map +1 -0
  67. package/dist/collection/components/form-field/form-field.e2e.playwright.js +104 -0
  68. package/dist/collection/components/form-field/form-field.e2e.playwright.js.map +1 -0
  69. package/dist/collection/components/galactic-menu/galactic-menu.js +1 -1
  70. package/dist/collection/components/grid/grid.e2e.playwright.js +153 -0
  71. package/dist/collection/components/grid/grid.e2e.playwright.js.map +1 -0
  72. package/dist/collection/components/grid/grid.js +6 -5
  73. package/dist/collection/components/grid/grid.js.map +1 -1
  74. package/dist/collection/components/grid-column/grid-column.js +1 -1
  75. package/dist/collection/components/grid-pagination/grid-pagination.js +1 -1
  76. package/dist/collection/components/header/header.js +1 -1
  77. package/dist/collection/components/horizontal-stepper/horizontal-step.js +2 -1
  78. package/dist/collection/components/horizontal-stepper/horizontal-step.js.map +1 -1
  79. package/dist/collection/components/horizontal-stepper/horizontal-stepper-interface.js.map +1 -1
  80. package/dist/collection/components/horizontal-stepper/horizontal-stepper.js +5 -1
  81. package/dist/collection/components/horizontal-stepper/horizontal-stepper.js.map +1 -1
  82. package/dist/collection/components/icon/icon.js +1 -1
  83. package/dist/collection/components/input/input.e2e.playwright.js +157 -0
  84. package/dist/collection/components/input/input.e2e.playwright.js.map +1 -0
  85. package/dist/collection/components/input/input.js +2 -2
  86. package/dist/collection/components/label/label.css +4 -6
  87. package/dist/collection/components/label/label.js +1 -1
  88. package/dist/collection/components/mat-icon/mat-icon.js +1 -1
  89. package/dist/collection/components/modal/modal.css +4 -0
  90. package/dist/collection/components/modal/modal.e2e.playwright.js +35 -0
  91. package/dist/collection/components/modal/modal.e2e.playwright.js.map +1 -0
  92. package/dist/collection/components/modal/modal.js +2 -2
  93. package/dist/collection/components/modal/modal.js.map +1 -1
  94. package/dist/collection/components/native-select/native-select.js +1 -1
  95. package/dist/collection/components/nav/nav.js +1 -1
  96. package/dist/collection/components/progress-bar/progress-bar.js +1 -1
  97. package/dist/collection/components/progress-radial/progress-radial.js +1 -1
  98. package/dist/collection/components/radio/radio.js +1 -1
  99. package/dist/collection/components/radio-group/radio-group.e2e.playwright.js +231 -0
  100. package/dist/collection/components/radio-group/radio-group.e2e.playwright.js.map +1 -0
  101. package/dist/collection/components/radio-group/radio-group.js +1 -1
  102. package/dist/collection/components/select/select.e2e.playwright.js +1702 -0
  103. package/dist/collection/components/select/select.e2e.playwright.js.map +1 -0
  104. package/dist/collection/components/select/select.js +49 -20
  105. package/dist/collection/components/select/select.js.map +1 -1
  106. package/dist/collection/components/select-option/select-option.js +3 -3
  107. package/dist/collection/components/select-option/select-option.js.map +1 -1
  108. package/dist/collection/components/switch/switch.e2e.playwright.js +40 -0
  109. package/dist/collection/components/switch/switch.e2e.playwright.js.map +1 -0
  110. package/dist/collection/components/switch/switch.js +1 -1
  111. package/dist/collection/components/tabs/tabs.e2e.playwright.js +205 -0
  112. package/dist/collection/components/tabs/tabs.e2e.playwright.js.map +1 -0
  113. package/dist/collection/components/tabs/tabs.js +1 -1
  114. package/dist/collection/components/textarea/textarea.e2e.playwright.js +133 -0
  115. package/dist/collection/components/textarea/textarea.e2e.playwright.js.map +1 -0
  116. package/dist/collection/components/textarea/textarea.js +1 -1
  117. package/dist/collection/utils/playwright/test-expect.js +2 -0
  118. package/dist/collection/utils/playwright/test-expect.js.map +1 -0
  119. package/dist/collection/utils/playwright/test.js +16 -0
  120. package/dist/collection/utils/playwright/test.js.map +1 -0
  121. package/dist/esm/{popper-e491c314.js → popper-ac238961.js} +10 -17
  122. package/dist/esm/popper-ac238961.js.map +1 -0
  123. package/dist/esm/wcs-breadcrumb.entry.js +1 -1
  124. package/dist/esm/wcs-breadcrumb.entry.js.map +1 -1
  125. package/dist/esm/wcs-com-nav-item.entry.js +1 -1
  126. package/dist/esm/wcs-com-nav-item.entry.js.map +1 -1
  127. package/dist/esm/wcs-com-nav.entry.js +3 -3
  128. package/dist/esm/wcs-com-nav.entry.js.map +1 -1
  129. package/dist/esm/wcs-dropdown.entry.js +1 -1
  130. package/dist/esm/wcs-error_3.entry.js +1 -1
  131. package/dist/esm/wcs-error_3.entry.js.map +1 -1
  132. package/dist/esm/wcs-galactic-menu.entry.js +1 -1
  133. package/dist/esm/wcs-grid.entry.js +5 -4
  134. package/dist/esm/wcs-grid.entry.js.map +1 -1
  135. package/dist/esm/wcs-horizontal-stepper.entry.js +3 -2
  136. package/dist/esm/wcs-horizontal-stepper.entry.js.map +1 -1
  137. package/dist/esm/wcs-modal.entry.js +2 -2
  138. package/dist/esm/wcs-modal.entry.js.map +1 -1
  139. package/dist/esm/wcs-select_2.entry.js +59 -24
  140. package/dist/esm/wcs-select_2.entry.js.map +1 -1
  141. package/dist/esm/wcs-tabs.entry.js +1 -1
  142. package/dist/esm/wcs-tooltip.entry.js +1 -1
  143. package/dist/types/components/accordion/accordion.e2e.playwright.d.ts +1 -0
  144. package/dist/types/components/alert/alert.e2e.playwright.d.ts +1 -0
  145. package/dist/types/components/alert-drawer/alert-drawer.e2e.playwright.d.ts +1 -0
  146. package/dist/types/components/breadcrumb/breadcrumb.e2e.playwright.d.ts +1 -0
  147. package/dist/types/components/button/button.e2e.playwright.d.ts +1 -0
  148. package/dist/types/components/checkbox/checkbox.e2e.playwright.d.ts +1 -0
  149. package/dist/types/components/chip/chip.e2e.playwright.d.ts +1 -0
  150. package/dist/types/components/com-nav/com-nav.e2e.playwright.d.ts +1 -0
  151. package/dist/types/components/counter/counter.e2e.playwright.d.ts +1 -0
  152. package/dist/types/components/dropdown/dropdown.e2e.playwright.d.ts +1 -0
  153. package/dist/types/components/editable-field/editable-field.e2e.playwright.d.ts +1 -0
  154. package/dist/types/components/form-field/form-field.e2e.playwright.d.ts +1 -0
  155. package/dist/types/components/grid/grid.e2e.playwright.d.ts +1 -0
  156. package/dist/types/components/horizontal-stepper/horizontal-stepper-interface.d.ts +2 -0
  157. package/dist/types/components/horizontal-stepper/horizontal-stepper.d.ts +4 -0
  158. package/dist/types/components/input/input.e2e.playwright.d.ts +1 -0
  159. package/dist/types/components/modal/modal.e2e.playwright.d.ts +1 -0
  160. package/dist/types/components/radio-group/radio-group.e2e.playwright.d.ts +1 -0
  161. package/dist/types/components/select/select.d.ts +7 -1
  162. package/dist/types/components/select/select.e2e.playwright.d.ts +1 -0
  163. package/dist/types/components/switch/switch.e2e.playwright.d.ts +1 -0
  164. package/dist/types/components/tabs/tabs.e2e.playwright.d.ts +1 -0
  165. package/dist/types/components/textarea/textarea.e2e.playwright.d.ts +1 -0
  166. package/dist/types/components.d.ts +12 -0
  167. package/dist/types/utils/playwright/test-expect.d.ts +33 -0
  168. package/dist/types/utils/playwright/test.d.ts +7 -0
  169. package/dist/wcs/{p-8e9bd0f1.entry.js → p-0326f834.entry.js} +2 -2
  170. package/dist/wcs/{p-8e9bd0f1.entry.js.map → p-0326f834.entry.js.map} +1 -1
  171. package/dist/wcs/p-2221bf0c.entry.js +16 -0
  172. package/dist/wcs/p-2221bf0c.entry.js.map +1 -0
  173. package/dist/wcs/p-4ae08567.entry.js +2 -0
  174. package/dist/wcs/p-4ae08567.entry.js.map +1 -0
  175. package/dist/wcs/p-4e2d6227.entry.js +2 -0
  176. package/dist/wcs/p-4e2d6227.entry.js.map +1 -0
  177. package/dist/wcs/p-8332a7e3.entry.js +2 -0
  178. package/dist/wcs/p-8332a7e3.entry.js.map +1 -0
  179. package/dist/wcs/{p-ec383729.entry.js → p-9b76b8e6.entry.js} +2 -2
  180. package/dist/wcs/{p-ec383729.entry.js.map → p-9b76b8e6.entry.js.map} +1 -1
  181. package/dist/wcs/{p-1f593d06.entry.js → p-abd8d5a0.entry.js} +2 -2
  182. package/dist/wcs/{p-622f7403.entry.js → p-c6f8c45c.entry.js} +2 -2
  183. package/dist/wcs/{p-a94e685c.entry.js → p-db7ba599.entry.js} +2 -2
  184. package/dist/wcs/p-e1fb3625.js +2 -0
  185. package/dist/wcs/p-e1fb3625.js.map +1 -0
  186. package/dist/wcs/{p-a956dc84.entry.js → p-f2f7595e.entry.js} +2 -2
  187. package/dist/wcs/{p-a956dc84.entry.js.map → p-f2f7595e.entry.js.map} +1 -1
  188. package/dist/wcs/p-fbd68522.entry.js +2 -0
  189. package/dist/wcs/p-fbd68522.entry.js.map +1 -0
  190. package/dist/wcs/{p-8c2605fd.entry.js → p-fe303f58.entry.js} +2 -2
  191. package/dist/wcs/wcs.esm.js +1 -1
  192. package/package.json +18 -24
  193. package/dist/cjs/popper-8d6e7fca.js.map +0 -1
  194. package/dist/collection/components/accordion/accordion.e2e.js.map +0 -1
  195. package/dist/collection/components/alert/alert.e2e.js +0 -142
  196. package/dist/collection/components/alert/alert.e2e.js.map +0 -1
  197. package/dist/collection/components/alert-drawer/alert-drawer.e2e.js +0 -111
  198. package/dist/collection/components/alert-drawer/alert-drawer.e2e.js.map +0 -1
  199. package/dist/collection/components/breadcrumb/breadcrumb.e2e.js +0 -223
  200. package/dist/collection/components/breadcrumb/breadcrumb.e2e.js.map +0 -1
  201. package/dist/collection/components/button/button.e2e.js +0 -25
  202. package/dist/collection/components/button/button.e2e.js.map +0 -1
  203. package/dist/collection/components/checkbox/checkbox.e2e.js +0 -45
  204. package/dist/collection/components/checkbox/checkbox.e2e.js.map +0 -1
  205. package/dist/collection/components/chip/chip.e2e.js +0 -209
  206. package/dist/collection/components/chip/chip.e2e.js.map +0 -1
  207. package/dist/collection/components/com-nav/com-nav.e2e.js.map +0 -1
  208. package/dist/collection/components/counter/counter.e2e.js +0 -206
  209. package/dist/collection/components/counter/counter.e2e.js.map +0 -1
  210. package/dist/collection/components/dropdown/dropdown.e2e.js +0 -156
  211. package/dist/collection/components/dropdown/dropdown.e2e.js.map +0 -1
  212. package/dist/collection/components/editable-field/editable-field.e2e.js +0 -176
  213. package/dist/collection/components/editable-field/editable-field.e2e.js.map +0 -1
  214. package/dist/collection/components/form-field/form-field.e2e.js +0 -122
  215. package/dist/collection/components/form-field/form-field.e2e.js.map +0 -1
  216. package/dist/collection/components/grid/grid.e2e.js +0 -147
  217. package/dist/collection/components/grid/grid.e2e.js.map +0 -1
  218. package/dist/collection/components/input/input.e2e.js +0 -152
  219. package/dist/collection/components/input/input.e2e.js.map +0 -1
  220. package/dist/collection/components/modal/modal.e2e.js +0 -36
  221. package/dist/collection/components/modal/modal.e2e.js.map +0 -1
  222. package/dist/collection/components/radio-group/radio-group.e2e.js +0 -239
  223. package/dist/collection/components/radio-group/radio-group.e2e.js.map +0 -1
  224. package/dist/collection/components/select/select.e2e.js +0 -1081
  225. package/dist/collection/components/select/select.e2e.js.map +0 -1
  226. package/dist/collection/components/switch/switch.e2e.js +0 -45
  227. package/dist/collection/components/switch/switch.e2e.js.map +0 -1
  228. package/dist/collection/components/tabs/tabs.e2e.js +0 -207
  229. package/dist/collection/components/tabs/tabs.e2e.js.map +0 -1
  230. package/dist/collection/components/textarea/textarea.e2e.js +0 -132
  231. package/dist/collection/components/textarea/textarea.e2e.js.map +0 -1
  232. package/dist/collection/utils/tests.js +0 -23
  233. package/dist/collection/utils/tests.js.map +0 -1
  234. package/dist/esm/popper-e491c314.js.map +0 -1
  235. package/dist/types/utils/tests.d.ts +0 -4
  236. package/dist/wcs/p-0dd07842.entry.js +0 -2
  237. package/dist/wcs/p-0dd07842.entry.js.map +0 -1
  238. package/dist/wcs/p-0f864e86.js +0 -2
  239. package/dist/wcs/p-0f864e86.js.map +0 -1
  240. package/dist/wcs/p-1244daa0.entry.js +0 -2
  241. package/dist/wcs/p-1244daa0.entry.js.map +0 -1
  242. package/dist/wcs/p-1fbe0328.entry.js +0 -2
  243. package/dist/wcs/p-1fbe0328.entry.js.map +0 -1
  244. package/dist/wcs/p-b94a09b6.entry.js +0 -16
  245. package/dist/wcs/p-b94a09b6.entry.js.map +0 -1
  246. package/dist/wcs/p-fd187bce.entry.js +0 -2
  247. package/dist/wcs/p-fd187bce.entry.js.map +0 -1
  248. /package/dist/wcs/{p-1f593d06.entry.js.map → p-abd8d5a0.entry.js.map} +0 -0
  249. /package/dist/wcs/{p-622f7403.entry.js.map → p-c6f8c45c.entry.js.map} +0 -0
  250. /package/dist/wcs/{p-a94e685c.entry.js.map → p-db7ba599.entry.js.map} +0 -0
  251. /package/dist/wcs/{p-8c2605fd.entry.js.map → p-fe303f58.entry.js.map} +0 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"select.e2e.playwright.js","sourceRoot":"","sources":["../../../src/components/select/select.e2e.playwright.ts"],"names":[],"mappings":"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","sourcesContent":["import { Locator, expect } from '@playwright/test';\nimport { test, E2EPage } from '@stencil/playwright';\nimport { setWcsContent } from '../../utils/playwright/test';\n\nasync function focusAutocompleteInput(select: Locator) {\n await select.click();\n await select.click();\n}\n\ntest.describe('Select component', () => {\n test('Expands when clicked', async ({ page }: { page: E2EPage }) => {\n // Given\n await setWcsContent(page, `\n <wcs-select>\n <wcs-select-option value=\"1\">One</wcs-select-option>\n </wcs-select>\n `);\n const select = page.locator('wcs-select');\n\n // When\n await select.click();\n\n // Then\n await expect(select).toHaveClass(/expanded/);\n });\n\n test('Expands using the open method', async ({ page }: { page: E2EPage }) => {\n // Given\n await setWcsContent(page, `\n <wcs-select>\n <wcs-select-option value=\"1\">One</wcs-select-option>\n </wcs-select>\n `);\n const select = page.locator('wcs-select');\n\n // When\n await select.evaluate((el: any) => el.open());\n\n // Then\n await expect(select).toHaveClass(/expanded/);\n });\n\n test('Closes using the open method', async ({ page }: { page: E2EPage }) => {\n // Given\n await setWcsContent(page, `\n <wcs-select>\n <wcs-select-option value=\"1\">One</wcs-select-option>\n </wcs-select>\n `);\n const select = page.locator('wcs-select');\n\n // When\n await select.click();\n await select.evaluate((el: any) => el.close());\n\n // Then\n await expect(select).not.toHaveClass(/expanded/);\n });\n\n test('Closes when user click outside', async ({ page }: { page: E2EPage }) => {\n // Given\n await setWcsContent(page, `\n <wcs-select>\n <wcs-select-option value=\"1\">One</wcs-select-option>\n </wcs-select>\n <div class=\"outside\" style=\"margin-top: 300px; width: 100px; height: 100px;\"></div>\n `);\n const select = page.locator('wcs-select');\n const outside = page.locator('div.outside');\n\n // When\n await select.click();\n await outside.click();\n\n // Then\n await expect(select).not.toHaveClass(/expanded/);\n });\n\n test('Closes when user click on another select', async ({ page }: { page: E2EPage }) => {\n // Given\n await page.setViewportSize({ width: 1024, height: 1600 });\n await setWcsContent(page, `\n <div style=\"display: flex\">\n <wcs-select id=\"select-1\">\n <wcs-select-option value=\"1\">One</wcs-select-option>\n <wcs-select-option value=\"2\">Two</wcs-select-option>\n <wcs-select-option value=\"3\">Three</wcs-select-option>\n </wcs-select>\n <wcs-select id=\"select-2\">\n <wcs-select-option value=\"1\">One</wcs-select-option>\n <wcs-select-option value=\"2\">Two</wcs-select-option>\n <wcs-select-option value=\"3\">Three</wcs-select-option>\n </wcs-select>\n </div>\n `);\n const select1 = page.locator('#select-1');\n const select2 = page.locator('#select-2');\n\n // When\n await select1.click();\n\n // Then\n await expect(select1).toHaveClass(/expanded/);\n\n await select2.click(); // select another select component in page\n await expect(select1).not.toHaveClass(/expanded/);\n await expect(select2).toHaveClass(/expanded/);\n });\n\n test('Let us select a value and fire event correctly', async ({ page }: { page: E2EPage }) => {\n // Given\n await setWcsContent(page, `\n <wcs-select>\n <wcs-select-option value=\"1\">One</wcs-select-option>\n </wcs-select>\n `);\n const select = page.locator('wcs-select');\n const firstOption = page.locator('wcs-select > wcs-select-option');\n\n const changeSpy = await page.spyOnEvent('wcsChange');\n\n // When\n await select.click();\n await expect(select).toHaveClass(/expanded/);\n await firstOption.click();\n await page.waitForChanges();\n\n // Then\n expect(changeSpy).toHaveReceivedEventTimes(1);\n expect(changeSpy).toHaveReceivedEventDetail({ value: '1' });\n\n // Vérifier le label dans le shadow DOM\n const label = select.locator('label').first();\n await expect(label).toHaveText('One');\n });\n\n test.describe('select event', () => {\n test('should not emit event if we set the value in js', async ({ page }: { page: E2EPage }) => {\n // Given\n await setWcsContent(page, `\n <wcs-select value=\"1\">\n <wcs-select-option value=\"1\">One</wcs-select-option>\n <wcs-select-option value=\"2\">Two</wcs-select-option>\n </wcs-select>\n `);\n const select = page.locator('wcs-select');\n\n const changeSpy = await page.spyOnEvent('wcsChange');\n\n // When\n await select.evaluate((el: any) => el.value = '2');\n await page.waitForChanges();\n\n // Then\n expect(changeSpy).toHaveReceivedEventTimes(0);\n });\n });\n\n test.describe('setSelectedValue', () => {\n test('Let user change selected value programmatically', async ({ page }: { page: E2EPage }) => {\n // Given\n await setWcsContent(page, `\n <wcs-select>\n <wcs-select-option value=\"1\">One</wcs-select-option>\n <wcs-select-option value=\"2\">Two</wcs-select-option>\n </wcs-select>\n `);\n const select = page.locator('wcs-select');\n\n // When\n await select.evaluate((el: any) => el.value = '2');\n\n // Then\n const label = page.locator('label').first();\n await expect(label).toHaveText('Two');\n });\n\n test('Let user change selected values programmatically', async ({ page }: { page: E2EPage }) => {\n // Given\n await setWcsContent(page, `\n <wcs-select multiple>\n <wcs-select-option value=\"1\">One</wcs-select-option>\n <wcs-select-option value=\"2\">Two</wcs-select-option>\n <wcs-select-option value=\"3\">Three</wcs-select-option>\n </wcs-select>\n `);\n const select = page.locator('wcs-select');\n\n // When\n await select.evaluate((el: any) => el.value = ['2', '3']);\n await page.waitForTimeout(50);\n\n // Then\n const label = page.locator('label').first();\n await expect(label).toHaveText('Two, Three');\n });\n });\n\n test('Is focusable', async ({ page }: { page: E2EPage }) => {\n // Given\n await setWcsContent(page, `\n <wcs-select>\n <wcs-select-option value=\"1\">One</wcs-select-option>\n </wcs-select>\n `);\n const select = page.locator('wcs-select');\n\n // When\n await select.focus();\n\n // Then\n await expect(select).toBeFocused();\n });\n\n test.describe('Disabled', () => {\n test('Must not expand when disabled', async ({ page }: { page: E2EPage }) => {\n // Given\n await setWcsContent(page, `\n <wcs-select disabled>\n <wcs-select-option value=\"1\">One</wcs-select-option>\n </wcs-select>\n `);\n const select = page.locator('wcs-select');\n\n // When\n await select.click({ force: true });\n\n // Then\n await expect(select).not.toHaveClass(/expanded/);\n });\n\n test('Is not focusable when disabled', async ({ page }: { page: E2EPage }) => {\n // Given\n await setWcsContent(page, `\n <wcs-select disabled>\n <wcs-select-option value=\"1\">One</wcs-select-option>\n </wcs-select>\n `);\n const select = page.locator('wcs-select');\n\n // When\n await select.focus();\n\n // Then\n await expect(select).not.toBeFocused();\n });\n });\n\n test.describe('Multiple', () => {\n test('Musn\\'t close when we select a value', async ({ page }: { page: E2EPage }) => {\n // Given\n await setWcsContent(page, `\n <wcs-select multiple>\n <wcs-select-option value=\"1\">One</wcs-select-option>\n </wcs-select>\n `);\n const select = page.locator('wcs-select');\n const firstOption = page.locator('wcs-select > wcs-select-option');\n\n // When\n await select.click();\n await expect(select).toHaveClass(/expanded/);\n await firstOption.click();\n await page.waitForChanges();\n\n // Then\n await expect(select).toHaveClass(/expanded/);\n });\n\n test('Allows to select multiple values', async ({ page }: { page: E2EPage }) => {\n // Given\n await setWcsContent(page, `\n <wcs-select multiple>\n <wcs-select-option value=\"1\">One</wcs-select-option>\n <wcs-select-option value=\"2\">Two</wcs-select-option>\n </wcs-select>\n `);\n const select = page.locator('wcs-select');\n const options = page.locator('wcs-select > wcs-select-option');\n\n const changeSpy = await page.spyOnEvent('wcsChange');\n\n // When\n await select.click();\n await expect(select).toHaveClass(/expanded/);\n await options.nth(0).click();\n await page.waitForChanges();\n await options.nth(1).click();\n await page.waitForChanges();\n\n // Then\n expect(changeSpy).toHaveReceivedEventTimes(2);\n expect(changeSpy).toHaveNthReceivedEventDetail(1, { value: ['1', '2'] });\n });\n\n test('Allows to unselect a value', async ({ page }: { page: E2EPage }) => {\n // Given\n await setWcsContent(page, `\n <wcs-select multiple>\n <wcs-select-option value=\"1\">One</wcs-select-option>\n <wcs-select-option value=\"2\">Two</wcs-select-option>\n <wcs-select-option value=\"3\">Three</wcs-select-option>\n </wcs-select>\n `);\n const select = page.locator('wcs-select');\n const options = page.locator('wcs-select > wcs-select-option');\n\n const changeSpy = await page.spyOnEvent('wcsChange');\n\n // When\n await select.click();\n await expect(select).toHaveClass(/expanded/);\n await options.nth(0).click();\n await page.waitForChanges();\n await options.nth(1).click();\n await page.waitForChanges();\n await options.nth(0).click();\n await page.waitForChanges();\n\n // Then\n expect(changeSpy).toHaveReceivedEventTimes(3);\n expect(changeSpy).toHaveNthReceivedEventDetail(2, { value: ['2'] });\n });\n\n test('Displays all values separated by a comma', async ({ page }: { page: E2EPage }) => {\n // Given\n await setWcsContent(page, `\n <wcs-select multiple>\n <wcs-select-option value=\"1\">One</wcs-select-option>\n <wcs-select-option value=\"2\">Two</wcs-select-option>\n <wcs-select-option value=\"3\">Three</wcs-select-option>\n </wcs-select>\n `);\n const select = page.locator('wcs-select');\n const options = page.locator('wcs-select > wcs-select-option');\n\n // When\n await select.click();\n await expect(select).toHaveClass(/expanded/);\n await options.nth(0).click();\n await options.nth(1).click();\n await options.nth(2).click();\n\n // Then\n const label = select.locator('label').first();\n await expect(label).toHaveText('One, Two, Three');\n });\n\n test('Tells the option that they should display as multiple', async ({ page }: { page: E2EPage }) => {\n // Given\n await setWcsContent(page, `\n <wcs-select multiple>\n <wcs-select-option value=\"1\">One</wcs-select-option>\n </wcs-select>\n `);\n const option = page.locator('wcs-select-option').first();\n\n // Then\n await expect(option).toHaveAttribute('multiple');\n });\n\n test('Propagate event when values are select', async ({ page }: { page: E2EPage }) => {\n // Given\n await setWcsContent(page, `\n <wcs-select multiple>\n <wcs-select-option value=\"1\">One</wcs-select-option>\n <wcs-select-option value=\"2\">Two</wcs-select-option>\n </wcs-select>\n `);\n const select = page.locator('wcs-select');\n const options = page.locator('wcs-select > wcs-select-option');\n\n const changeSpy = await page.spyOnEvent('wcsChange');\n\n // When\n await select.click();\n await expect(select).toHaveClass(/expanded/);\n await options.nth(0).click();\n await page.waitForChanges();\n await options.nth(1).click();\n await page.waitForChanges();\n\n // Then\n expect(changeSpy).toHaveReceivedEventTimes(2);\n expect(changeSpy).toHaveNthReceivedEventDetail(1, { value: ['1', '2'] });\n });\n });\n\n test.describe('Keyboard navigation when select is closed and not multiple', () => {\n test('select value of first option enabled on Down Arrow key pressed', async ({ page }: { page: E2EPage }) => {\n // Given\n await setWcsContent(page, `\n <wcs-select>\n <wcs-select-option value=\"option1\" disabled>Option 1</wcs-select-option>\n <wcs-select-option value=\"option2\">Option 2</wcs-select-option>\n <wcs-select-option value=\"option3\">Option 3</wcs-select-option>\n </wcs-select>\n `);\n const select = page.locator('wcs-select');\n\n const changeSpy = await page.spyOnEvent('wcsChange');\n\n // When\n await select.focus();\n await page.keyboard.press('ArrowDown');\n await page.waitForChanges();\n\n // Then\n const label = select.locator('label').first();\n await expect(label).toHaveText('Option 2');\n expect(changeSpy).toHaveReceivedEventTimes(1);\n expect(changeSpy).toHaveFirstReceivedEventDetail({ value: 'option2' });\n });\n\n test('select value of last option enabled on PageDown key pressed', async ({ page }: { page: E2EPage }) => {\n // Given\n await setWcsContent(page, `\n <wcs-select>\n <wcs-select-option value=\"option1\" disabled>Option 1</wcs-select-option>\n <wcs-select-option value=\"option2\">Option 2</wcs-select-option>\n <wcs-select-option value=\"option3\">Option 3</wcs-select-option>\n </wcs-select>\n `);\n const select = page.locator('wcs-select');\n\n const changeSpy = await page.spyOnEvent('wcsChange');\n\n // When\n await select.focus();\n await page.keyboard.press('PageDown');\n await page.waitForChanges();\n\n // Then\n const label = select.locator('label').first();\n await expect(label).toHaveText('Option 3');\n expect(changeSpy).toHaveReceivedEventTimes(1);\n expect(changeSpy).toHaveFirstReceivedEventDetail({ value: 'option3' });\n });\n\n test('select value of first option enabled on PageUp key pressed', async ({ page }: { page: E2EPage }) => {\n // Given\n await setWcsContent(page, `\n <wcs-select>\n <wcs-select-option value=\"option1\" disabled>Option 1</wcs-select-option>\n <wcs-select-option value=\"option2\">Option 2</wcs-select-option>\n <wcs-select-option value=\"option3\">Option 3</wcs-select-option>\n </wcs-select>\n `);\n const select = page.locator('wcs-select');\n\n const changeSpy = await page.spyOnEvent('wcsChange');\n\n // When\n await select.focus();\n await page.keyboard.press('PageUp');\n await page.waitForChanges();\n\n // Then\n const label = select.locator('label').first();\n await expect(label).toHaveText('Option 2');\n expect(changeSpy).toHaveReceivedEventTimes(1);\n expect(changeSpy).toHaveFirstReceivedEventDetail({ value: 'option2' });\n });\n\n test('open the overlay on Enter key press', async ({ page }: { page: E2EPage }) => {\n // Given\n await setWcsContent(page, `\n <wcs-select>\n <wcs-select-option value=\"option1\" disabled>Option 1</wcs-select-option>\n <wcs-select-option value=\"option2\">Option 2</wcs-select-option>\n <wcs-select-option value=\"option3\">Option 3</wcs-select-option>\n </wcs-select>\n `);\n const select = page.locator('wcs-select');\n\n // When\n await select.focus();\n await page.keyboard.press('Enter');\n\n // Then\n await expect(select).toHaveClass(/expanded/);\n });\n\n test('open the overlay on Alt + Down Arrow key pressed', async ({ page }: { page: E2EPage }) => {\n // Given\n await setWcsContent(page, `\n <wcs-select>\n <wcs-select-option value=\"option1\" disabled>Option 1</wcs-select-option>\n <wcs-select-option value=\"option2\">Option 2</wcs-select-option>\n <wcs-select-option value=\"option3\">Option 3</wcs-select-option>\n </wcs-select>\n `);\n const select = page.locator('wcs-select');\n\n // When\n await select.focus();\n await page.keyboard.down('Alt');\n await page.keyboard.press('ArrowDown');\n await page.keyboard.up('Alt');\n\n // Then\n await expect(select).toHaveClass(/expanded/);\n });\n\n test('focuses last selected option when opening with keyboard after programmatic value change', async ({ page }: {\n page: E2EPage\n }) => {\n // Given\n await setWcsContent(page, `\n <wcs-select>\n <wcs-select-option value=\"option1\">Option 1</wcs-select-option>\n <wcs-select-option value=\"option2\">Option 2</wcs-select-option>\n <wcs-select-option value=\"option3\">Option 3</wcs-select-option>\n </wcs-select>\n `);\n const select = page.locator('wcs-select');\n\n // When\n await select.evaluate((el: any) => el.value = 'option2');\n await page.waitForTimeout(50);\n await select.focus();\n await page.keyboard.press('Enter'); // Open select with keyboard\n\n // Then\n const focusedOption = page.locator('wcs-select-option:focus');\n await expect(focusedOption).toHaveAttribute('value', 'option2');\n });\n });\n\n test.describe('Keyboard navigation when select is opened and not multiple', () => {\n test('close the overlay on Escape key pressed and focus select control', async ({ page }: {\n page: E2EPage\n }) => {\n // Given\n await setWcsContent(page, `\n <wcs-select>\n <wcs-select-option value=\"option1\" disabled>Option 1</wcs-select-option>\n <wcs-select-option value=\"option2\">Option 2</wcs-select-option>\n <wcs-select-option value=\"option3\">Option 3</wcs-select-option>\n </wcs-select>\n `);\n const select = page.locator('wcs-select');\n\n // Open the overlay\n await select.focus();\n await page.keyboard.press('Enter');\n await expect(select).toHaveClass(/expanded/);\n\n // When\n await page.keyboard.press('Escape');\n\n // Then\n await expect(select).not.toHaveClass(/expanded/);\n await expect(select).toBeFocused();\n });\n\n test('close the overlay on Alt + ArrowUp keys pressed and focus select control', async ({ page }: {\n page: E2EPage\n }) => {\n // Given\n await setWcsContent(page, `\n <wcs-select>\n <wcs-select-option value=\"option1\" disabled>Option 1</wcs-select-option>\n <wcs-select-option value=\"option2\">Option 2</wcs-select-option>\n <wcs-select-option value=\"option3\">Option 3</wcs-select-option>\n </wcs-select>\n `);\n const select = page.locator('wcs-select');\n\n // Open the overlay\n await select.focus();\n await page.keyboard.press('Enter');\n await expect(select).toHaveClass(/expanded/);\n\n // When\n await page.keyboard.down('Alt');\n await page.keyboard.press('ArrowUp');\n await page.keyboard.up('Alt');\n\n // Then\n await expect(select).not.toHaveClass(/expanded/);\n await expect(select).toBeFocused();\n });\n\n test('close the overlay on Tab key pressed', async ({ page }: { page: E2EPage }) => {\n // Given\n await setWcsContent(page, `\n <wcs-select>\n <wcs-select-option value=\"option1\" disabled>Option 1</wcs-select-option>\n <wcs-select-option value=\"option2\">Option 2</wcs-select-option>\n <wcs-select-option value=\"option3\">Option 3</wcs-select-option>\n </wcs-select>\n `);\n const select = page.locator('wcs-select');\n\n // Open the overlay\n await select.focus();\n await page.keyboard.press('Enter');\n await expect(select).toHaveClass(/expanded/);\n\n // When\n await page.keyboard.press('Tab');\n\n // Then\n await expect(select).not.toHaveClass(/expanded/);\n });\n\n test('close the overlay on Tab + Shift keys pressed', async ({ page }: { page: E2EPage }) => {\n // Given\n await setWcsContent(page, `\n <wcs-select>\n <wcs-select-option value=\"option1\" disabled>Option 1</wcs-select-option>\n <wcs-select-option value=\"option2\">Option 2</wcs-select-option>\n <wcs-select-option value=\"option3\">Option 3</wcs-select-option>\n </wcs-select>\n `);\n const select = page.locator('wcs-select');\n\n // Open the overlay\n await select.focus();\n await page.keyboard.press('Enter');\n await expect(select).toHaveClass(/expanded/);\n\n // When\n await page.keyboard.down('Shift');\n await page.keyboard.press('Tab');\n await page.keyboard.up('Shift');\n\n // Then\n await expect(select).not.toHaveClass(/expanded/);\n });\n\n test('choose the current option on Enter key pressed', async ({ page }: { page: E2EPage }) => {\n // Given\n await setWcsContent(page, `\n <wcs-select>\n <wcs-select-option value=\"option1\" disabled>Option 1</wcs-select-option>\n <wcs-select-option value=\"option2\">Option 2</wcs-select-option>\n <wcs-select-option value=\"option3\">Option 3</wcs-select-option>\n </wcs-select>\n `);\n const select = page.locator('wcs-select');\n\n const changeSpy = await page.spyOnEvent('wcsChange');\n\n // Open the overlay\n await select.focus();\n await page.keyboard.press('Enter');\n await expect(select).toHaveClass(/expanded/);\n\n // When\n await page.keyboard.press('Enter');\n await page.waitForChanges();\n\n // Then\n const label = select.locator('label').first();\n await expect(label).toHaveText('Option 2');\n expect(changeSpy).toHaveReceivedEventTimes(1);\n expect(changeSpy).toHaveFirstReceivedEventDetail({ value: 'option2' });\n });\n\n test('move focus to next option on Down Arrow key down', async ({ page }: { page: E2EPage }) => {\n // Given\n await setWcsContent(page, `\n <wcs-select>\n <wcs-select-option value=\"option1\" disabled>Option 1</wcs-select-option>\n <wcs-select-option value=\"option2\">Option 2</wcs-select-option>\n <wcs-select-option value=\"option3\">Option 3</wcs-select-option>\n </wcs-select>\n `);\n const select = page.locator('wcs-select');\n\n const changeSpy = await page.spyOnEvent('wcsChange');\n\n // Open the overlay\n await select.focus();\n await page.keyboard.press('Enter');\n await expect(select).toHaveClass(/expanded/);\n\n // When\n await page.keyboard.press('ArrowDown');\n\n // Then\n const focusedOption = page.locator('wcs-select-option:focus');\n await expect(focusedOption).toHaveAttribute('value', 'option3');\n await expect(async () => {\n expect(changeSpy).toHaveReceivedEventTimes(0);\n }).toPass();\n });\n });\n\n test.describe('Keyboard navigation when select is closed and multiple', () => {\n test('move focus into the first enabled option on Down Arrow key pressed', async ({ page }: {\n page: E2EPage\n }) => {\n // Given\n await setWcsContent(page, `\n <wcs-select multiple=\"\">\n <wcs-select-option value=\"option1\" disabled>Option 1</wcs-select-option>\n <wcs-select-option value=\"option2\">Option 2</wcs-select-option>\n <wcs-select-option value=\"option3\">Option 3</wcs-select-option>\n </wcs-select>\n `);\n const select = page.locator('wcs-select');\n\n const changeSpy = await page.spyOnEvent('wcsChange');\n\n // When\n await select.focus();\n await page.keyboard.press('ArrowDown');\n\n // Then\n const focusedOption = page.locator('wcs-select-option:focus');\n await expect(focusedOption).toHaveAttribute('value', 'option2');\n await expect(async () => {\n expect(changeSpy).toHaveReceivedEventTimes(0);\n }).toPass();\n });\n\n test('move focus into the first enabled option on Enter key pressed', async ({ page }: { page: E2EPage }) => {\n // Given\n await setWcsContent(page, `\n <wcs-select multiple=\"\">\n <wcs-select-option value=\"option1\" disabled>Option 1</wcs-select-option>\n <wcs-select-option value=\"option2\">Option 2</wcs-select-option>\n <wcs-select-option value=\"option3\">Option 3</wcs-select-option>\n </wcs-select>\n `);\n const select = page.locator('wcs-select');\n\n const changeSpy = await page.spyOnEvent('wcsChange');\n\n // When\n await select.focus();\n await page.keyboard.press('Enter');\n\n // Then\n await expect(select).toHaveClass(/expanded/);\n const focusedOption = page.locator('wcs-select-option:focus');\n await expect(focusedOption).toHaveAttribute('value', 'option2');\n await expect(async () => {\n expect(changeSpy).toHaveReceivedEventTimes(0);\n }).toPass();\n });\n\n test('focuses last selected option when opening with keyboard after programmatic value change', async ({ page }: {\n page: E2EPage\n }) => {\n // Given\n await setWcsContent(page, `\n <wcs-select multiple>\n <wcs-select-option value=\"option1\">Option 1</wcs-select-option>\n <wcs-select-option value=\"option2\">Option 2</wcs-select-option>\n <wcs-select-option value=\"option3\">Option 3</wcs-select-option>\n </wcs-select>\n `);\n const select = page.locator('wcs-select');\n\n // When\n await select.evaluate((el: any) => el.value = ['option1', 'option2']);\n await select.focus();\n await page.keyboard.press('Enter'); // Open select with keyboard\n\n // Then\n await expect(select).toHaveClass(/expanded/);\n const focusedOption = page.locator('wcs-select-option:focus');\n await expect(focusedOption).toHaveAttribute('value', 'option2'); // Should focus the last option in the array\n });\n });\n\n test.describe('Keyboard navigation when select opened and multiple', () => {\n test('close the overlay on Tab key pressed and not focus an checkbox', async ({ page }: { page: E2EPage }) => {\n // Given\n await setWcsContent(page, `\n <wcs-select multiple=\"\">\n <wcs-select-option value=\"option1\" disabled>Option 1</wcs-select-option>\n <wcs-select-option value=\"option2\">Option 2</wcs-select-option>\n <wcs-select-option value=\"option3\">Option 3</wcs-select-option>\n </wcs-select>\n `);\n const select = page.locator('wcs-select');\n\n // Open the overlay\n await select.focus();\n await page.keyboard.press('Enter');\n await expect(select).toHaveClass(/expanded/);\n\n // When\n await page.keyboard.press('Tab');\n\n // Then\n await expect(select).not.toHaveClass(/expanded/);\n });\n });\n\n test.describe('Options', () => {\n test('Adds selected attribute to selected option', async ({ page }: { page: E2EPage }) => {\n // Given\n await setWcsContent(page, `\n <wcs-select>\n <wcs-select-option value=\"1\">One</wcs-select-option>\n </wcs-select>\n `);\n const select = page.locator('wcs-select');\n const option = page.locator('wcs-select > wcs-select-option');\n\n // When\n await select.click();\n await expect(select).toHaveClass(/expanded/);\n await option.click();\n\n // Then\n await expect(option).toHaveAttribute('selected');\n });\n\n test('Removes selected attribute from previously selected options', async ({ page }: { page: E2EPage }) => {\n // Given\n await setWcsContent(page, `\n <wcs-select>\n <wcs-select-option value=\"1\">One</wcs-select-option>\n <wcs-select-option value=\"2\">Two</wcs-select-option>\n </wcs-select>\n `);\n const select = page.locator('wcs-select');\n const options = page.locator('wcs-select > wcs-select-option');\n\n // When\n await select.click();\n await expect(select).toHaveClass(/expanded/);\n await options.nth(0).click();\n await select.click(); // As it is not multiple we need to open it once again\n await expect(select).toHaveClass(/expanded/);\n await options.nth(1).click();\n\n // Then\n await expect(options.nth(0)).not.toHaveAttribute('selected');\n await expect(options.nth(1)).toHaveAttribute('selected');\n });\n\n test('Must not let a user select a disabled option', async ({ page }: { page: E2EPage }) => {\n // Given\n await setWcsContent(page, `\n <wcs-select>\n <wcs-select-option value=\"1\" disabled>One</wcs-select-option>\n </wcs-select>\n `);\n const select = page.locator('wcs-select');\n const option = page.locator('wcs-select > wcs-select-option');\n\n // When\n await select.click();\n await expect(select).toHaveClass(/expanded/);\n // Use dispatchEvent instead of click since disabled options may not be clickable\n await option.dispatchEvent('click');\n\n // Then\n await expect(select).not.toHaveAttribute('value');\n });\n });\n\n test('Propagate wcsSelectChangeEvent when a new value is selected', async ({ page }: { page: E2EPage }) => {\n // Given\n await setWcsContent(page, `\n <wcs-select>\n <wcs-select-option value=\"1\">One</wcs-select-option>\n </wcs-select>\n `);\n const select = page.locator('wcs-select');\n const option = page.locator('wcs-select > wcs-select-option');\n\n const changeSpy = await page.spyOnEvent('wcsChange');\n\n // When\n await select.click();\n await expect(select).toHaveClass(/expanded/);\n await option.click();\n await page.waitForChanges();\n\n // Then\n expect(changeSpy).toHaveReceivedEventTimes(1);\n expect(changeSpy).toHaveFirstReceivedEventDetail({ value: '1' });\n });\n\n test.describe('Focus management', () => {\n test('after selection, focus is on the correct element', async ({ page }: { page: E2EPage }) => {\n // Given\n await setWcsContent(page, `\n <wcs-select>\n <wcs-select-option value=\"1\">One</wcs-select-option>\n <wcs-select-option value=\"2\">Two</wcs-select-option>\n </wcs-select>\n `);\n const select = page.locator('wcs-select');\n\n // When\n await select.focus();\n await page.keyboard.press('Enter');\n await expect(select).toHaveClass(/expanded/);\n await page.keyboard.press('ArrowDown');\n\n // Then\n const focusedOption = page.locator('wcs-select-option:focus');\n await expect(focusedOption).toHaveAttribute('value', '2');\n });\n });\n\n test('[Autocomplete] Input field is focusable', async ({ page }: { page: E2EPage }) => {\n // Given\n await setWcsContent(page, `\n <wcs-select autocomplete=\"true\">\n <wcs-select-option value=\"1\">One</wcs-select-option>\n </wcs-select>\n `);\n const select = page.locator('wcs-select');\n const nativeInput = page.locator('wcs-select input.autocomplete-field');\n\n // When - Click to focus\n await select.click();\n\n // Then\n await expect(nativeInput).toBeFocused();\n });\n\n test('[Autocomplete] filter is cleared when the select value is set to a falsy value', async ({ page }: {\n page: E2EPage\n }) => {\n // Given\n await setWcsContent(page, `\n <wcs-select autocomplete>\n <wcs-select-option value=\"1\">One</wcs-select-option>\n <wcs-select-option value=\"2\">Two</wcs-select-option>\n <wcs-select-option value=\"3\">Three</wcs-select-option>\n <wcs-select-option value=\"4\">Four</wcs-select-option>\n </wcs-select>\n `);\n const select = page.locator('wcs-select');\n\n // When\n await select.click();\n await page.keyboard.type('One');\n\n const firstSelectOption = page.locator('wcs-select > wcs-select-option').first();\n await firstSelectOption.click();\n\n await select.evaluate((el: any) => el.value = '');\n await page.waitForTimeout(50);\n\n // Then\n await select.click();\n await expect(select).toHaveClass(/expanded/);\n const availableOptions = await page.locator('wcs-select > wcs-select-option:not([hidden])').count();\n expect(availableOptions).toBe(4);\n });\n\n test('[Autocomplete] should not opened when initial value is set', async ({ page }: { page: E2EPage }) => {\n // Given - When\n await setWcsContent(page, `\n <wcs-select autocomplete value=\"1\">\n <wcs-select-option value=\"1\">One</wcs-select-option>\n <wcs-select-option value=\"2\">Two</wcs-select-option>\n <wcs-select-option value=\"3\">Three</wcs-select-option>\n <wcs-select-option value=\"4\">Four</wcs-select-option>\n </wcs-select>\n `);\n const select = page.locator('wcs-select');\n\n // Then\n await expect(select).not.toHaveClass(/expanded/);\n });\n\n test('[Autocomplete] should not opened when set value programmatically', async ({ page }: { page: E2EPage }) => {\n // Given - When\n await setWcsContent(page, `\n <wcs-select autocomplete value=\"1\">\n <wcs-select-option value=\"1\">One</wcs-select-option>\n <wcs-select-option value=\"2\">Two</wcs-select-option>\n <wcs-select-option value=\"3\">Three</wcs-select-option>\n <wcs-select-option value=\"4\">Four</wcs-select-option>\n </wcs-select>\n `);\n const select = page.locator('wcs-select');\n\n await select.evaluate((el: any) => el.value = '1');\n await page.waitForTimeout(50);\n\n // Then\n await expect(select).not.toHaveClass(/expanded/);\n });\n\n test('[Autocomplete] should opened when set value with user interaction', async ({ page }: { page: E2EPage }) => {\n // Given\n await setWcsContent(page, `\n <wcs-select autocomplete>\n <wcs-select-option value=\"1\">One</wcs-select-option>\n <wcs-select-option value=\"2\">Two</wcs-select-option>\n <wcs-select-option value=\"3\">Three</wcs-select-option>\n <wcs-select-option value=\"4\">Four</wcs-select-option>\n </wcs-select>\n `);\n const select = page.locator('wcs-select');\n\n // When\n await select.click();\n await page.keyboard.type('O');\n\n // Then\n await expect(select).toHaveClass(/expanded/);\n });\n\n test.describe('[Autocomplete] Keyboard navigation when select closed', () => {\n test('open listbox and move focus into the first enabled option on Arrow Down pressed', async ({ page }: {\n page: E2EPage\n }) => {\n // Given\n await setWcsContent(page, `\n <wcs-select autocomplete=\"\">\n <wcs-select-option value=\"option1\" disabled>Option 1</wcs-select-option>\n <wcs-select-option value=\"option2\">Option 2</wcs-select-option>\n <wcs-select-option value=\"option3\">Option 3</wcs-select-option>\n </wcs-select>\n `);\n const select = page.locator('wcs-select');\n\n // When\n await select.click();\n await page.keyboard.press('ArrowDown');\n\n // Then\n const visuallyFocusedOption = page.locator('wcs-select-option[highlighted]');\n await expect(visuallyFocusedOption).toHaveCount(1);\n await expect(visuallyFocusedOption).toHaveAttribute('value', 'option2');\n await expect(select).toHaveClass(/expanded/);\n });\n\n test('open listbox without moveing on Alt + Arrow Down pressed', async ({ page }: { page: E2EPage }) => {\n // Given\n await setWcsContent(page, `\n <wcs-select autocomplete=\"\">\n <wcs-select-option value=\"option1\" disabled>Option 1</wcs-select-option>\n <wcs-select-option value=\"option2\">Option 2</wcs-select-option>\n <wcs-select-option value=\"option3\">Option 3</wcs-select-option>\n </wcs-select>\n `);\n const select = page.locator('wcs-select');\n\n // When\n await select.click();\n await page.keyboard.down('Alt');\n await page.keyboard.press('ArrowDown');\n await page.keyboard.up('Alt');\n\n // Then\n await expect(select).toHaveClass(/expanded/);\n const anyVisuallyFocusedOption = page.locator('wcs-select-option[highlighted]');\n await expect(anyVisuallyFocusedOption).toHaveCount(0);\n });\n\n test('clear textbox on Escape pressed', async ({ page }: { page: E2EPage }) => {\n // Given\n await setWcsContent(page, `\n <wcs-select autocomplete=\"\">\n <wcs-select-option value=\"option1\" disabled>Option 1</wcs-select-option>\n <wcs-select-option value=\"option2\">Option 2</wcs-select-option>\n <wcs-select-option value=\"option3\">Option 3</wcs-select-option>\n </wcs-select>\n `);\n const select = page.locator('wcs-select');\n\n // When\n await select.click(); // Focus the input (delegate focus)\n await page.keyboard.type('test');\n await page.waitForTimeout(50);\n await page.keyboard.press('Escape'); // Close the listbox\n await page.waitForTimeout(50);\n await expect(select).not.toHaveClass(/expanded/);\n await page.keyboard.press('Escape'); // Clear the textbox\n await page.waitForTimeout(50);\n\n // Then\n const nativeInput = page.locator('wcs-select input.autocomplete-field');\n await expect(nativeInput).toHaveValue('');\n });\n });\n\n test.describe('[Autocomplete] Keyboard navigation when select expanded', () => {\n test('close listbox on Escape', async ({ page }: { page: E2EPage }) => {\n // Given\n await setWcsContent(page, `\n <wcs-select autocomplete=\"\">\n <wcs-select-option value=\"option1\" disabled>Apple</wcs-select-option>\n <wcs-select-option value=\"option2\">Banana</wcs-select-option>\n <wcs-select-option value=\"option3\">Peach</wcs-select-option>\n </wcs-select>\n `);\n const select = page.locator('wcs-select');\n\n // When\n await select.click();\n await expect(select).toHaveClass(/expanded/);\n await page.keyboard.press('Escape');\n\n // Then\n await expect(select).not.toHaveClass(/expanded/);\n });\n\n test('stay opened on Enter when no option are highlighted', async ({ page }: { page: E2EPage }) => {\n // Given\n await setWcsContent(page, `\n <wcs-select autocomplete=\"\">\n <wcs-select-option value=\"option1\" disabled>Apple</wcs-select-option>\n <wcs-select-option value=\"option2\">Banana</wcs-select-option>\n <wcs-select-option value=\"option3\">Peach</wcs-select-option>\n </wcs-select>\n `);\n const select = page.locator('wcs-select');\n\n // When\n await select.click();\n await page.keyboard.press('Enter');\n\n // Then\n await expect(select).toHaveClass(/expanded/);\n });\n\n test('Close overlay when an highlighted option is selected with Enter keypress', async ({ page }: {\n page: E2EPage\n }) => {\n // Given\n await setWcsContent(page, `\n <wcs-select autocomplete=\"\">\n <wcs-select-option value=\"option1\" disabled>Apple</wcs-select-option>\n <wcs-select-option value=\"option2\">Banana</wcs-select-option>\n <wcs-select-option value=\"option3\">Peach</wcs-select-option>\n </wcs-select>\n `);\n const select = page.locator('wcs-select');\n\n // When\n await select.click();\n await page.keyboard.press('ArrowDown');\n await page.keyboard.press('Enter');\n\n // Then\n await expect(select).not.toHaveClass(/expanded/);\n });\n\n test('focus last option on Arrow Up', async ({ page }: { page: E2EPage }) => {\n // Given\n await setWcsContent(page, `\n <wcs-select autocomplete=\"\">\n <wcs-select-option value=\"option1\" disabled>Apple</wcs-select-option>\n <wcs-select-option value=\"option2\">Banana</wcs-select-option>\n <wcs-select-option value=\"option3\">Peach</wcs-select-option>\n </wcs-select>\n `);\n const select = page.locator('wcs-select');\n\n // When\n await focusAutocompleteInput(select);\n await page.keyboard.press('ArrowUp');\n\n // Then\n const lastDisabledSelectOption = page.locator('wcs-select-option:not([disabled])').last();\n await expect(lastDisabledSelectOption).toHaveAttribute('highlighted', '');\n });\n\n test('focus first option on Arrow Down', async ({ page }: { page: E2EPage }) => {\n // Given\n await setWcsContent(page, `\n <wcs-select autocomplete=\"\">\n <wcs-select-option value=\"option1\" disabled>Apple</wcs-select-option>\n <wcs-select-option value=\"option2\">Banana</wcs-select-option>\n <wcs-select-option value=\"option3\">Peach</wcs-select-option>\n </wcs-select>\n `);\n const select = page.locator('wcs-select');\n\n // When\n await select.click();\n await page.keyboard.press('ArrowDown');\n const firstNotDisabledSelectOption = page.locator('wcs-select-option:not([disabled])').first();\n\n // Then\n await expect(select).toHaveClass(/expanded/);\n await expect(firstNotDisabledSelectOption).toHaveAttribute('highlighted', '');\n });\n\n test('replace text, close listbox, focus textbox on Enter', async ({ page }: { page: E2EPage }) => {\n // Given\n await setWcsContent(page, `\n <wcs-select autocomplete=\"\">\n <wcs-select-option value=\"option1\" disabled>Apple</wcs-select-option>\n <wcs-select-option value=\"option2\">Banana</wcs-select-option>\n <wcs-select-option value=\"option3\">Peach</wcs-select-option>\n </wcs-select>\n `);\n const select = page.locator('wcs-select');\n\n // When\n await select.click();\n await page.keyboard.press('ArrowDown');\n await expect(select).toHaveClass(/expanded/);\n const firstNotDisabledSelectOption = page.locator('wcs-select-option:not([disabled])').first();\n await expect(firstNotDisabledSelectOption).toHaveAttribute('highlighted', '');\n await expect(firstNotDisabledSelectOption).toHaveAttribute('value', 'option2');\n await page.keyboard.press('Enter');\n\n // Then\n await expect(select).not.toHaveClass(/expanded/);\n\n const nativeInput = page.locator('wcs-select input.autocomplete-field');\n await expect(nativeInput).toHaveValue('Banana');\n\n // Check input is focused\n await expect(nativeInput).toBeFocused();\n });\n\n test('cycle to next option when Arrow Down', async ({ page }: { page: E2EPage }) => {\n // Given\n await setWcsContent(page, `\n <wcs-select autocomplete=\"\">\n <wcs-select-option value=\"option1\" disabled>Apple</wcs-select-option>\n <wcs-select-option value=\"option2\">Banana</wcs-select-option>\n <wcs-select-option value=\"option3\">Peach</wcs-select-option>\n </wcs-select>\n `);\n const select = page.locator('wcs-select');\n\n // When\n await focusAutocompleteInput(select);\n await page.keyboard.press('ArrowDown'); // Going to option2\n await page.keyboard.press('ArrowDown'); // Going to option3\n await page.keyboard.press('ArrowDown'); // Going back to option2\n\n // Then\n const visuallyFocusedOption = page.locator('wcs-select-option[highlighted]');\n await expect(visuallyFocusedOption).toHaveAttribute('value', 'option2');\n });\n\n test('cycle to previous option when Arrow Up', async ({ page }: { page: E2EPage }) => {\n // Given\n await setWcsContent(page, `\n <wcs-select autocomplete=\"\">\n <wcs-select-option value=\"option1\" disabled>Apple</wcs-select-option>\n <wcs-select-option value=\"option2\">Banana</wcs-select-option>\n <wcs-select-option value=\"option3\">Peach</wcs-select-option>\n </wcs-select>\n `);\n const select = page.locator('wcs-select');\n\n // When\n await focusAutocompleteInput(select);\n const inputAutocomplete = select.locator('input.autocomplete-field');\n await expect(inputAutocomplete).toBeFocused();\n\n await page.keyboard.press('ArrowUp'); // Going to option3\n await page.keyboard.press('ArrowUp'); // Going to option2\n await page.keyboard.press('ArrowUp'); // Going back to option3\n\n // Then\n const visuallyFocusedOption = page.locator('wcs-select-option[highlighted]');\n await expect(visuallyFocusedOption).toHaveAttribute('value', 'option3');\n });\n\n test('focus textbox, filter listbox, remove visual focus from listbox when any printable character', async ({ page }: {\n page: E2EPage\n }) => {\n // Given\n await setWcsContent(page, `\n <wcs-select autocomplete=\"\">\n <wcs-select-option value=\"option1\" disabled>Apple</wcs-select-option>\n <wcs-select-option value=\"option2\">Banana</wcs-select-option>\n <wcs-select-option value=\"option3\">Peach</wcs-select-option>\n </wcs-select>\n `);\n const select = page.locator('wcs-select');\n const inputAutocomplete = select.locator('input.autocomplete-field');\n\n // When\n await select.click();\n await expect(inputAutocomplete).toBeFocused();\n await page.keyboard.press('a');\n\n // Then\n // Check input is focused\n await expect(inputAutocomplete).toBeFocused();\n\n // Check filter is applied (fewer options visible)\n const visibleOptions = await page.locator('wcs-select-option:not([aria-hidden=\"true\"])').count();\n expect(visibleOptions).toBeLessThan(3);\n\n // Check no option is highlighted\n const visuallyFocusedOption = page.locator('wcs-select-option[highlighted]');\n await expect(visuallyFocusedOption).toHaveCount(0);\n });\n\n test('close listbox, focus textbox on Escape', async ({ page }: { page: E2EPage }) => {\n // Given\n await setWcsContent(page, `\n <wcs-select autocomplete=\"\">\n <wcs-select-option value=\"option1\" disabled>Apple</wcs-select-option>\n <wcs-select-option value=\"option2\">Banana</wcs-select-option>\n <wcs-select-option value=\"option3\">Peach</wcs-select-option>\n </wcs-select>\n `);\n const select = page.locator('wcs-select');\n\n // When\n await select.click();\n await expect(select).toHaveClass(/expanded/);\n await page.keyboard.press('Escape');\n\n // Then\n await expect(select).not.toHaveClass(/expanded/);\n const inputAutocomplete = select.locator('input.autocomplete-field');\n await expect(inputAutocomplete).toBeFocused();\n });\n\n test('focus textbox, move cursor when Left or Right Arrow', async ({ page }: { page: E2EPage }) => {\n // Given\n await setWcsContent(page, `\n <wcs-select autocomplete=\"\">\n <wcs-select-option value=\"option1\" disabled>Apple</wcs-select-option>\n <wcs-select-option value=\"option2\">Banana</wcs-select-option>\n <wcs-select-option value=\"option3\">Peach</wcs-select-option>\n </wcs-select>\n `);\n const select = page.locator('wcs-select');\n const inputAutocomplete = select.locator('input.autocomplete-field');\n const typedText = 'test';\n\n // When\n await select.click();\n await expect(select).toHaveClass(/expanded/);\n await page.keyboard.type(typedText);\n await page.keyboard.press('ArrowLeft');\n await page.keyboard.press('ArrowRight');\n\n // Then\n await expect(inputAutocomplete).toBeFocused();\n const cursorPositionAfter = await select.evaluate((el: any) => {\n const input = el.shadowRoot?.querySelector('input.autocomplete-field') as HTMLInputElement;\n return input?.selectionStart;\n });\n expect(cursorPositionAfter).toBe(typedText.length);\n });\n\n test('focus textbox, move cursor to the start of the text when Home pressed', async ({ page }: {\n page: E2EPage\n }) => {\n // Given\n await setWcsContent(page, `\n <wcs-select autocomplete=\"\">\n <wcs-select-option value=\"option1\" disabled>Apple</wcs-select-option>\n <wcs-select-option value=\"option2\">Banana</wcs-select-option>\n <wcs-select-option value=\"option3\">Peach</wcs-select-option>\n </wcs-select>\n `);\n const select = page.locator('wcs-select');\n const inputAutocomplete = select.locator('input.autocomplete-field');\n const typedText = 'test';\n\n // When\n await select.click();\n await page.keyboard.type(typedText);\n await page.keyboard.press('Home');\n\n // Then\n await expect(inputAutocomplete).toBeFocused();\n const cursorPositionAfter = await select.evaluate((el: any) => {\n const input = el.shadowRoot?.querySelector('input.autocomplete-field') as HTMLInputElement;\n return input?.selectionStart;\n });\n expect(cursorPositionAfter).toBe(0);\n });\n\n test('focus textbox, move cursor to the end of the text when End pressed', async ({ page }: {\n page: E2EPage\n }) => {\n // Given\n await setWcsContent(page, `\n <wcs-select autocomplete=\"\">\n <wcs-select-option value=\"option1\" disabled>Apple</wcs-select-option>\n <wcs-select-option value=\"option2\">Banana</wcs-select-option>\n <wcs-select-option value=\"option3\">Peach</wcs-select-option>\n </wcs-select>\n `);\n const select = page.locator('wcs-select');\n const inputAutocomplete = select.locator('input.autocomplete-field');\n const typedText = 'test';\n\n // When\n await select.click();\n await page.keyboard.press('t');\n await page.keyboard.press('e');\n await page.keyboard.press('s');\n await page.keyboard.press('t');\n await page.keyboard.press('End');\n\n // Then\n await expect(inputAutocomplete).toBeFocused();\n const cursorPositionAfter = await select.evaluate((el: any) => {\n const input = el.shadowRoot?.querySelector('input.autocomplete-field') as HTMLInputElement;\n return input?.selectionStart;\n });\n expect(cursorPositionAfter).toBe(typedText.length);\n });\n });\n\n test('Should handle asynchronous options loading with an initial value and update the label', async ({ page }: {\n page: E2EPage\n }) => {\n // Given\n await setWcsContent(page, `\n <wcs-select value=\"2\">\n </wcs-select>\n `);\n const select = page.locator('wcs-select');\n const label = page.locator('label').first();\n\n // Verify no label initially (element exists but has no text content)\n await expect(label).toHaveText('');\n\n // When - Add options dynamically\n await select.evaluate((el: any) => {\n el.innerHTML = `\n <wcs-select-option value=\"1\">One</wcs-select-option>\n <wcs-select-option value=\"2\">Two</wcs-select-option>\n <wcs-select-option value=\"3\">Three</wcs-select-option>\n <wcs-select-option value=\"4\">Four</wcs-select-option>\n `;\n });\n\n // Then - Verify label is updated\n await expect(label).toHaveText('Two');\n });\n\n test('[Multiple] Should handle asynchronous options loading with an initial value and update the label', async ({ page }: {\n page: E2EPage\n }) => {\n // Given\n await setWcsContent(page, `\n <wcs-select multiple>\n </wcs-select>\n `);\n const select = page.locator('wcs-select');\n const label = page.locator('label').first();\n\n await select.evaluate((el: any) => el.value = ['2', '3']);\n\n // Verify no label initially (element exists but has no text content)\n await expect(label).toHaveText('');\n\n // When - Add options dynamically\n await select.evaluate((el: any) => {\n el.innerHTML = `\n <wcs-select-option value=\"1\">One</wcs-select-option>\n <wcs-select-option value=\"2\">Two</wcs-select-option>\n <wcs-select-option value=\"3\">Three</wcs-select-option>\n <wcs-select-option value=\"4\">Four</wcs-select-option>\n `;\n });\n\n // Then - Verify label is updated\n await expect(label).toHaveText('Two, Three');\n });\n\n test('[ServerMode] Should synchronise selected value after slot change', async ({ page }: {\n page: E2EPage\n }) => {\n await setWcsContent(page, `\n <wcs-select autocomplete server-mode value=\"3\">\n <wcs-select-option value=\"1\">One</wcs-select-option>\n <wcs-select-option value=\"2\">Two</wcs-select-option>\n <wcs-select-option value=\"3\">Three</wcs-select-option>\n <wcs-select-option value=\"4\">Four</wcs-select-option>\n </wcs-select>\n `);\n\n const options: ({ value: any; displayText: string })[] = [\n {\n value: '1',\n displayText: 'One'\n },\n {\n value: '2',\n displayText: 'Two'\n },\n {\n value: '3',\n displayText: 'Three'\n },\n {\n value: '4',\n displayText: 'Four'\n }\n ];\n\n const select = page.locator('wcs-select');\n const autocompleteInput = page.locator('input.autocomplete-field'); // initially the value is \"Three\"\n const optionThree = page.locator('wcs-select-option[value=\"3\"]');\n\n await select.evaluate(\n (\n el: HTMLElement,\n options: ({ value: any; displayText: string })[],\n ) => {\n el.addEventListener('wcsFilterChange', (event: any) => {\n const htmlSelectOptions = options\n .filter((o) => o.displayText.toLowerCase().includes(event.detail.value.toLowerCase()))\n .map((o) => `<wcs-select-option value=\"${o.value}\">${o.displayText}</wcs-select-option>`);\n\n el.innerHTML = htmlSelectOptions.join('');\n });\n },\n options,\n );\n\n await autocompleteInput.press('End'); // place at the end of input\n await autocompleteInput.press('Backspace'); // \"Thre\"\n await autocompleteInput.press('Backspace'); // \"Thr\"\n await page.waitForChanges();\n\n await expect(optionThree).toHaveAttribute('selected');\n });\n\n test('[ServerMode] Should not reset displayText if options are changes asynchronously', async ({ page }: {\n page: E2EPage\n }) => {\n await setWcsContent(page, `\n <wcs-select autocomplete server-mode>\n </wcs-select>\n `);\n const select = page.locator('wcs-select');\n await select.evaluate((el: any) => el.value = '2');\n await page.waitForChanges();\n\n const options: ({ value: any; displayText: string })[] = [\n {\n value: '1',\n displayText: 'One'\n },\n {\n value: '2',\n displayText: 'Two'\n },\n {\n value: '3',\n displayText: 'Three'\n },\n {\n value: '4',\n displayText: 'Four'\n }\n ];\n\n await select.evaluate(\n (\n el: HTMLElement,\n options: ({ value: any; displayText: string })[],\n ) => {\n el.addEventListener('wcsFilterChange', (event: any) => {\n const htmlSelectOptions = options\n .filter((o) => o.displayText.toLowerCase().includes(event.detail.value))\n .map((o) => `<wcs-select-option value=\"${o.value}\">${o.displayText}</wcs-select-option>`);\n el.innerHTML = htmlSelectOptions.join('');\n });\n },\n options,\n );\n\n const autocompleteInput = select.locator('input.autocomplete-field');\n // Before options are asynchronously added, the input value should still be empty (no matching option yet)\n await expect(autocompleteInput).toHaveJSProperty('value', '');\n\n // Add options\n await page.$eval('wcs-select', (el: HTMLElement) => {\n el.innerHTML = `\n <wcs-select-option value=\"1\">One</wcs-select-option>\n <wcs-select-option value=\"2\">Two</wcs-select-option>\n <wcs-select-option value=\"3\">Three</wcs-select-option>\n <wcs-select-option value=\"4\">Four</wcs-select-option>\n `;\n });\n await page.waitForChanges();\n\n // After async insertion, the component should have propagated the displayText to the input value\n await expect(autocompleteInput).toHaveJSProperty('value', 'Two');\n\n await autocompleteInput.press('End'); // place at the end of input\n await autocompleteInput.press('Backspace'); // \"Tw\"\n await autocompleteInput.press('Backspace'); // \"T\"\n await autocompleteInput.press('Backspace'); // \"\"\n await autocompleteInput.press('o');\n await autocompleteInput.press('n');\n\n await page.waitForChanges();\n\n await select.evaluate((el: any) => el.value = '3');\n await page.waitForChanges();\n\n await expect(autocompleteInput).toHaveJSProperty('value', 'Three');\n });\n\n test('[ServerMode][Autocomplete] Emits filter change events while typing and when clearing after selection', async ({ page }: {\n page: E2EPage\n }) => {\n await setWcsContent(page, `\n <wcs-select autocomplete server-mode>\n <wcs-select-option value=\"ain\">Ain</wcs-select-option>\n <wcs-select-option value=\"aude\">Aude</wcs-select-option>\n <wcs-select-option value=\"ardeche\">Ardèche</wcs-select-option>\n <wcs-select-option value=\"bas-rhin\">Bas-Rhin</wcs-select-option>\n </wcs-select>\n `);\n const options: ({ value: any; displayText: string })[] = [\n {\n value: 'ain',\n displayText: 'Ain'\n },\n {\n value: 'aude',\n displayText: 'Aude'\n },\n {\n value: 'ardeche',\n displayText: 'Ardèche'\n },\n {\n value: 'bas-rhin',\n displayText: 'Bas-Rhin'\n }\n ];\n\n const select = page.locator('wcs-select');\n\n await select.evaluate((el: any) => el.open());\n await page.waitForChanges();\n\n await select.evaluate(\n (\n el: HTMLElement,\n options: ({ value: any; displayText: string })[],\n ) => {\n el.addEventListener('wcsFilterChange', (event: any) => {\n const htmlSelectOptions = options\n .filter((o) => o.displayText.toLowerCase().includes(event.detail.value.toLowerCase()))\n .map((o) => `<wcs-select-option value=\"${o.value}\">${o.displayText}</wcs-select-option>`);\n el.innerHTML = htmlSelectOptions.join('');\n });\n },\n options,\n );\n\n const filterChangeSpy = await select.spyOnEvent('wcsFilterChange');\n\n const input = page.locator('input.autocomplete-field');\n\n // Type 'ain' to filter\n await input.press('a');\n await input.press('i');\n await input.press('n');\n await page.waitForChanges();\n\n expect(filterChangeSpy).toHaveReceivedEventTimes(3);\n expect(filterChangeSpy).toHaveNthReceivedEventDetail(0, { value: 'a' });\n expect(filterChangeSpy).toHaveNthReceivedEventDetail(1, { value: 'ai' });\n expect(filterChangeSpy).toHaveNthReceivedEventDetail(2, { value: 'ain' });\n\n // Select Ain: find option and click (should emit a filter event)\n const optionAin = page.locator('wcs-select > wcs-select-option[value=\"ain\"]');\n expect(optionAin).not.toBeNull();\n await optionAin.click();\n await page.waitForChanges();\n // We ensure that we receive 3 typing events + 1 event of selection. It's important for consummers\n // in order to re-fetch the value of the selected option\n expect(filterChangeSpy).toHaveReceivedEventTimes(4);\n // Input value replaced by selected option label\n await expect(input).toHaveJSProperty('value', 'Ain');\n expect(filterChangeSpy).toHaveNthReceivedEventDetail(3, { value: 'Ain' });\n\n await input.press('Backspace'); // Ai\n await page.waitForChanges();\n expect(filterChangeSpy).toHaveNthReceivedEventDetail(4, { value: 'Ai' });\n\n await input.press('Backspace'); // A\n await page.waitForChanges();\n expect(filterChangeSpy).toHaveNthReceivedEventDetail(5, { value: 'A' });\n\n await input.press('Backspace'); // vide\n await page.waitForChanges();\n expect(filterChangeSpy).toHaveNthReceivedEventDetail(6, { value: '' });\n\n // Field must stay empty (no hydration after manual clear)\n await expect(input).toHaveJSProperty('value', '');\n });\n\n test('[ServerMode][Autocomplete] Should not override user input with the selected option label when the options list changes', async ({ page }: {\n page: E2EPage\n }) => {\n await setWcsContent(page, `\n <wcs-select autocomplete server-mode>\n <wcs-select-option value=\"ain\">Ain</wcs-select-option>\n <wcs-select-option value=\"aude\">Aude</wcs-select-option>\n <wcs-select-option value=\"ardeche\">Ardèche</wcs-select-option>\n <wcs-select-option value=\"bas-rhin\">Bas-Rhin</wcs-select-option>\n </wcs-select>\n `);\n\n const options: ({ value: any; displayText: string })[] = [\n {\n value: 'ain',\n displayText: 'Ain'\n },\n {\n value: 'aude',\n displayText: 'Aude'\n },\n {\n value: 'ardeche',\n displayText: 'Ardèche'\n },\n {\n value: 'bas-rhin',\n displayText: 'Bas-Rhin'\n }\n ];\n\n const select = page.locator('wcs-select');\n await select.evaluate((el: any) => el.value = 'ain');\n await page.waitForChanges();\n\n await select.evaluate(\n (\n el: HTMLElement,\n options: ({ value: any; displayText: string })[],\n ) => {\n el.addEventListener('wcsFilterChange', (event: any) => {\n const htmlSelectOptions = options\n .filter((o) => o.displayText.includes(event.detail.value))\n .map((o) => `<wcs-select-option value=\"${o.value}\">${o.displayText}</wcs-select-option>`);\n el.innerHTML = htmlSelectOptions.join('');\n });\n },\n options,\n );\n\n const input = page.locator('input.autocomplete-field');\n\n // on sélectionne une valeur => autocomplete = valeur qu'on a sélectionné\n await expect(input).toHaveJSProperty('value', 'Ain');\n\n await input.press('End'); // place at the end of input\n await input.press('Backspace');\n await input.press('Backspace');\n await page.waitForChanges();\n\n await expect(input).toHaveJSProperty('value', 'A');\n });\n\n test('[ServerMode][Autocomplete] should display option label in input when dynamically adding options', async ({ page }: {\n page: E2EPage\n }) => {\n await setWcsContent(page, `\n <wcs-select autocomplete server-mode>\n </wcs-select>\n `);\n\n const select = page.locator('wcs-select');\n const input = page.locator('input.autocomplete-field');\n\n await select.evaluate((el: any) => el.value = '1');\n await page.waitForChanges();\n\n await expect(input).toHaveJSProperty('value', '');\n\n await page.$eval('wcs-select', (el: HTMLElement) => {\n el.innerHTML = `\n <wcs-select-option value=\"1\">Un</wcs-select-option>\n `;\n });\n await page.waitForChanges();\n await expect(input).toHaveJSProperty('value', 'Un');\n\n await input.evaluate((el: any) => el.value = 'Trois');\n\n await select.evaluate((el: any) => el.value = '2');\n await page.waitForChanges();\n await expect(input).toHaveJSProperty('value', '');\n\n await page.$eval('wcs-select', (el: HTMLElement) => {\n el.innerHTML = `\n <wcs-select-option value=\"2\">Deux</wcs-select-option>\n `;\n });\n await expect(input).toHaveJSProperty('value', 'Deux');\n });\n\n test('[ServerMode][Autocomplete] should restore selected option label on blur when current value is not in filtered options', async ({ page }: {\n page: E2EPage\n }) => {\n await setWcsContent(\n page,\n `\n <wcs-select autocomplete server-mode value=\"3\">\n <wcs-select-option value=\"1\">Un</wcs-select-option>\n <wcs-select-option value=\"2\">Deux</wcs-select-option>\n <wcs-select-option value=\"3\">Trois</wcs-select-option>\n <wcs-select-option value=\"4\">Quatre</wcs-select-option>\n <wcs-select-option value=\"5\">Cinq</wcs-select-option>\n </wcs-select>\n <button style=\"margin-top: 600px\">Test</button>\n `\n );\n\n const options: ({ value: number; displayText: string })[] = [\n {\n value: 1,\n displayText: 'Un'\n },\n {\n value: 2,\n displayText: 'Deux'\n },\n {\n value: 3,\n displayText: 'Trois'\n },\n {\n value: 4,\n displayText: 'Quatre'\n },\n {\n value: 5,\n displayText: 'Cinq'\n },\n {\n value: 6,\n displayText: 'Six'\n },\n ];\n\n const select = page.locator('wcs-select');\n const button = page.locator('button');\n const input = page.locator('input.autocomplete-field');\n\n await select.evaluate(\n (\n el: HTMLElement,\n options: ({ value: number; displayText: string })[],\n ) => {\n el.addEventListener('wcsFilterChange', (event: any) => {\n const htmlSelectOptions = options\n .filter((o) => o.displayText.includes(event.detail.value))\n .map((o) => `<wcs-select-option value=\"${o.value}\">${o.displayText}</wcs-select-option>`);\n el.innerHTML = htmlSelectOptions.join('');\n });\n },\n options,\n );\n\n await expect(input).toHaveJSProperty('value', 'Trois');\n\n await input.press('End'); // place at the end of input\n await input.press('Backspace'); // Troi\n await input.press('Backspace'); // tro\n await input.press('Backspace'); // tr\n await input.press('Backspace'); // t\n await input.press('Backspace'); //\n await input.press('u'); // u\n await page.waitForChanges();\n\n await expect(select).toHaveJSProperty('value', '3');\n await expect(input).toHaveJSProperty('value', 'u');\n\n await button.focus();\n await button.click(); // blur the select\n await expect(input).toHaveJSProperty('value', 'Trois');\n });\n\n test('[ServerMode][Autocomplete] should clear and restore input label when value is changed and options are updated during component lifecycle', async ({\n page\n }: {\n page: E2EPage;\n }) => {\n await setWcsContent(\n page,\n `\n <wcs-select autocomplete server-mode value=\"3\">\n </wcs-select>\n <button style=\"margin-top: 600px\">Test</button>\n `\n );\n\n const select = page.locator('wcs-select');\n const button = page.locator('button');\n const input = page.locator('input.autocomplete-field');\n\n await page.$eval('wcs-select', (el: HTMLElement) => {\n el.innerHTML = `\n <wcs-select-option value=\"1\">Un</wcs-select-option>\n <wcs-select-option value=\"2\">Deux</wcs-select-option>\n <wcs-select-option value=\"3\">Trois</wcs-select-option>\n `;\n });\n await page.waitForChanges();\n\n await expect(select).toHaveJSProperty('value', '3');\n await expect(input).toHaveJSProperty('value', 'Trois');\n\n await input.press('End'); // place at the end of input\n await input.press('Backspace'); // Troi\n await input.press('Backspace'); // Tro\n\n await select.evaluate((el: any) => (el.value = '4'));\n\n await page.waitForChanges();\n\n await expect(select).toHaveJSProperty('value', '4');\n await expect(input).toHaveJSProperty('value', '');\n\n await page.$eval('wcs-select', (el: HTMLElement) => {\n el.innerHTML = `\n <wcs-select-option value=\"4\">Quatre</wcs-select-option>\n <wcs-select-option value=\"5\">Cinq</wcs-select-option>\n <wcs-select-option value=\"6\">Six</wcs-select-option>\n `;\n });\n\n await page.waitForChanges();\n\n await expect(select).toHaveJSProperty('value', '4');\n await expect(input).toHaveJSProperty('value', 'Quatre');\n\n await button.focus();\n await expect(input).toHaveJSProperty('value', 'Quatre');\n });\n\n test('[ServerMode][Autocomplete] should assign the filter again and emit the filterChange event when the user reselects the current value after filtering', async ({ page }: {\n page: E2EPage;\n }) => {\n const options: ({ value: number; displayText: string })[] = [{\n value: 1,\n displayText: 'Ain'\n },\n {\n value: 2,\n displayText: 'Aisne'\n },\n {\n value: 3,\n displayText: 'Rhône'\n }\n ];\n\n await setWcsContent(\n page,\n `\n <wcs-select autocomplete server-mode>\n <wcs-select-option value=\"1\">Ain</wcs-select-option>\n <wcs-select-option value=\"2\">Aisne</wcs-select-option>\n <wcs-select-option value=\"3\">Rhône</wcs-select-option>\n </wcs-select>\n `\n );\n\n const select = page.locator('wcs-select');\n const ainOption = page.locator('wcs-select-option[value=\"1\"]');\n const aisneOption = page.locator('wcs-select-option[value=\"2\"]');\n const rhoneOption = page.locator('wcs-select-option[value=\"3\"]');\n const input = page.locator('input.autocomplete-field');\n\n await select.evaluate(\n (\n el: HTMLElement,\n options: ({ value: number; displayText: string })[],\n ) => {\n el.addEventListener('wcsFilterChange', (event: any) => {\n const htmlSelectOptions = options\n .filter((o) => o.displayText.includes(event.detail.value))\n .map((o) => `<wcs-select-option value=\"${o.value}\">${o.displayText}</wcs-select-option>`);\n el.innerHTML = htmlSelectOptions.join('');\n });\n },\n options,\n );\n\n await select.click(); // open\n await aisneOption.click();\n\n await expect(select).toHaveJSProperty('value', '2');\n await expect(input).toHaveJSProperty('value', 'Aisne');\n\n await select.click(); // the select juste close because we select options open\n await page.waitForChanges();\n await expect(ainOption).not.toBeVisible();\n await expect(aisneOption).toBeVisible();\n await expect(rhoneOption).not.toBeVisible();\n\n await input.press('Backspace'); // Aisn\n await input.press('Backspace'); // Ais\n await input.press('Backspace'); // Ai\n await input.press('Backspace'); // A\n await input.press('Backspace'); //\n\n await expect(ainOption).toBeVisible();\n await expect(aisneOption).toBeVisible();\n await expect(rhoneOption).toBeVisible();\n\n await aisneOption.click();\n await select.click();\n await page.waitForChanges();\n\n await expect(ainOption).not.toBeVisible();\n await expect(aisneOption).toBeVisible();\n await expect(rhoneOption).not.toBeVisible();\n });\n\n test('[ServerMode][Autocomplete] should reset autocompleteValue to value when blurring', async ({ page }: { page: E2EPage }) => {\n await setWcsContent(\n page,\n `\n <wcs-select autocomplete server-mode>\n <wcs-select-option value=\"1\">Ain</wcs-select-option>\n <wcs-select-option value=\"2\">Aisne</wcs-select-option>\n <wcs-select-option value=\"3\">Rhône</wcs-select-option>\n </wcs-select>\n\n <button id=\"element-to-blur\" style=\"margin: 500px\">Blur me</button>\n `\n );\n const options: ({ value: number; displayText: string })[] = [{\n value: 1,\n displayText: 'Ain'\n },\n {\n value: 2,\n displayText: 'Aisne'\n },\n {\n value: 3,\n displayText: 'Rhône'\n }\n ];\n\n const select = page.locator('wcs-select');\n const ainOption = page.locator('wcs-select-option[value=\"1\"]');\n const aisneOption = page.locator('wcs-select-option[value=\"2\"]');\n const rhoneOption = page.locator('wcs-select-option[value=\"3\"]');\n const input = page.locator('input.autocomplete-field');\n const blurButton = page.locator('#element-to-blur');\n\n await select.evaluate(\n (\n el: HTMLElement,\n options: ({ value: number; displayText: string })[],\n ) => {\n el.addEventListener('wcsFilterChange', (event: any) => {\n const htmlSelectOptions = options\n .filter((o) => o.displayText.includes(event.detail.value))\n .map((o) => `<wcs-select-option value=\"${o.value}\">${o.displayText}</wcs-select-option>`);\n el.innerHTML = htmlSelectOptions.join('');\n });\n },\n options,\n );\n\n await select.click(); // open\n await aisneOption.click();\n await page.waitForChanges();\n\n await expect(select).toHaveJSProperty('value', '2');\n await expect(input).toHaveJSProperty('value', 'Aisne');\n\n await select.click(); // the select juste close because we select options open\n await page.waitForChanges();\n await expect(ainOption).not.toBeVisible();\n await expect(aisneOption).toBeVisible();\n await expect(rhoneOption).not.toBeVisible();\n\n await input.press('Backspace'); // Aisn\n await input.press('Backspace'); // Ais\n await input.press('Backspace'); // Ai\n await input.press('Backspace'); // A\n await input.press('Backspace'); //\n\n await expect(ainOption).toBeVisible();\n await expect(aisneOption).toBeVisible();\n await expect(rhoneOption).toBeVisible();\n\n await blurButton.click();\n\n await expect(select).toHaveJSProperty('value', '2');\n await expect(input).toHaveJSProperty('value', 'Aisne');\n\n await select.click();\n\n await expect(ainOption).not.toBeVisible();\n await expect(aisneOption).toBeVisible();\n await expect(rhoneOption).not.toBeVisible();\n });\n});\n"]}
@@ -142,7 +142,7 @@ export class Select {
142
142
  * @param resetIfNoValue - When true and no value is provided, the select component will be reset
143
143
  * Defaults to true
144
144
  */
145
- updateSelectedValue(value, resetIfNoValue = true) {
145
+ updateSelectedValue(value, resetIfNoValue = true, shouldEmitFilterChangeEvent = true) {
146
146
  var _a;
147
147
  // If no value is passed, the select is reset.
148
148
  if (!value && resetIfNoValue) {
@@ -209,17 +209,26 @@ export class Select {
209
209
  : undefined;
210
210
  }
211
211
  else {
212
+ let hasFoundCurrentValueInOptionList = false;
212
213
  this.options.forEach((opt) => {
213
214
  const isSelected = this.compareWith(opt.value, value);
214
215
  if (isSelected) {
216
+ hasFoundCurrentValueInOptionList = true;
215
217
  this.displayText = opt.innerText;
216
218
  this.lastModifiedOptionElement = opt;
217
219
  if (this.autocomplete) {
218
- this.setAutocompleteValue(opt.innerText);
220
+ this.setAutocompleteValue(opt.innerText, false, false, shouldEmitFilterChangeEvent);
219
221
  }
220
222
  }
221
223
  opt.selected = isSelected;
222
224
  });
225
+ // we are in server mode and the current select value hasn't been found, we set the AutocompleteValue (filter) to undefined
226
+ // This is important to preserve the same state logic as when a value change and we set the filter to that value
227
+ // Not doing that implies the displayText is not updated because of the check in le slot change handler
228
+ if (this.serverMode && !hasFoundCurrentValueInOptionList) {
229
+ this.setAutocompleteValue('', false, false, shouldEmitFilterChangeEvent);
230
+ this.displayText = '';
231
+ }
223
232
  }
224
233
  }
225
234
  /**
@@ -392,6 +401,9 @@ export class Select {
392
401
  }
393
402
  this.focused = true;
394
403
  }
404
+ if (this.autocomplete && this.displayText && this.multiple === false) {
405
+ this.setAutocompleteValue(this.displayText);
406
+ }
395
407
  }
396
408
  this.expanded = false;
397
409
  },
@@ -411,7 +423,8 @@ export class Select {
411
423
  });
412
424
  }
413
425
  else {
414
- this.autocompleteValue = event.value.option.displayText;
426
+ // Emit the filter change immediately so that server-side filtering can refresh options.
427
+ this.setAutocompleteValue(event.value.option.displayText);
415
428
  }
416
429
  }
417
430
  this.emitChange(this.value);
@@ -527,7 +540,7 @@ export class Select {
527
540
  }
528
541
  break;
529
542
  case "ClearAutocompleteInput":
530
- this.autocompleteValue = '';
543
+ this.setAutocompleteValue('', false, false);
531
544
  break;
532
545
  case "ClearHighlight":
533
546
  this.clearHighlightOnLastHighlightedOption();
@@ -693,10 +706,15 @@ export class Select {
693
706
  this.stateService.send({ type: 'OPTION_SELECTED', value: { option: event, fromKeyboard } });
694
707
  }
695
708
  onSlotchange() {
696
- // We call updateSelectedValue to update the selected options when the slot changes to keep the selected options in sync with the current value.
697
- // This also update the displayText value according to the options data.
698
- // Finally, this update the internal models for multiple mode and handle the server mode correctly.
699
- this.updateSelectedValue(this.value, false);
709
+ if (!this.serverMode || (this.autocomplete && this.displayText === this.autocompleteValue)) {
710
+ // We call updateSelectedValue to update the selected options when the slot changes to keep the selected options in sync with the current value.
711
+ // This also update the displayText value according to the options data.
712
+ // Finally, this update the internal models for multiple mode and handle the server mode correctly.
713
+ this.updateSelectedValue(this.value, false, false);
714
+ }
715
+ else {
716
+ this.syncOptionsElementsStateWithCurrentSelectedValue();
717
+ }
700
718
  // Server-mode only : "no result" slot should be visible dynamically if no option is present in the slot
701
719
  if (this.autocomplete && this.serverMode) {
702
720
  this.showNoResultFoundLabel = this.options.length < 1;
@@ -706,6 +724,17 @@ export class Select {
706
724
  .forEach((opt) => opt.multiple = true);
707
725
  }
708
726
  }
727
+ /**
728
+ * This method only affect the option's selected state
729
+ *
730
+ * Set the selected state of each option to match the current selected value of the select
731
+ */
732
+ syncOptionsElementsStateWithCurrentSelectedValue() {
733
+ this.options.forEach((opt) => {
734
+ const isSelected = this.compareWith(opt.value, this.value);
735
+ opt.selected = isSelected;
736
+ });
737
+ }
709
738
  removeChip(v) {
710
739
  this.options
711
740
  .forEach(opt => {
@@ -761,9 +790,10 @@ export class Select {
761
790
  * @param filter - The new filter value
762
791
  * @param isReset - If true, the filter is reset and the select is closed
763
792
  * @param fromUserInteraction - If true, the change comes from user interaction (typing), if false it's programmatic
793
+ * @param shouldEmitFilterChangeEvent
764
794
  * @private
765
795
  */
766
- setAutocompleteValue(filter, isReset = false, fromUserInteraction = false) {
796
+ setAutocompleteValue(filter, isReset = false, fromUserInteraction = false, shouldEmitFilterChangeEvent = true) {
767
797
  var _a, _b;
768
798
  this.clearHighlightOnLastHighlightedOption();
769
799
  const newValueIsDifferentFromLastModifiedOption = this.lastModifiedOptionElement == null || ((_a = this.lastModifiedOptionElement) === null || _a === void 0 ? void 0 : _a.textContent) !== this.autocompleteValue;
@@ -795,8 +825,12 @@ export class Select {
795
825
  });
796
826
  }
797
827
  }
798
- if (this.autocompleteValue !== filter) {
799
- this.autocompleteValue = filter !== null && filter !== void 0 ? filter : '';
828
+ const newAutocompleteValue = filter !== null && filter !== void 0 ? filter : '';
829
+ const valueHasChanged = this.autocompleteValue !== newAutocompleteValue;
830
+ if (valueHasChanged) {
831
+ this.autocompleteValue = newAutocompleteValue;
832
+ }
833
+ if (shouldEmitFilterChangeEvent && valueHasChanged) {
800
834
  this.wcsFilterChange.emit({
801
835
  value: filter,
802
836
  });
@@ -828,23 +862,18 @@ export class Select {
828
862
  focusedAttributes() {
829
863
  return !this.disabled ? { tabIndex: 0 } : {};
830
864
  }
831
- onAutocompleteFieldBlur(_e) {
832
- if (this.multiple === false && this.autocomplete === true && this.hasValue) {
833
- this.autocompleteValue = this.displayText;
834
- }
835
- }
836
865
  render() {
837
866
  var _a;
838
867
  const ariaLabelValue = `${this.labelElement ? this.labelElement.innerText : ''} ${this.hasValue ? this.displayText : ''}`.trimEnd();
839
868
  const noResultContainerId = 'no-result-container';
840
- return (h(Host, Object.assign({ key: '71154caab9c0b2244716f5c5626cc0de3ed7d327', class: this.expanded ? 'expanded ' : '', overlayDirection: this.overlayDirection }, this.focusedAttributes(), { role: !this.autocomplete ? "combobox" : null, "aria-haspopup": !this.autocomplete ? "listbox" : null, "aria-owns": !this.autocomplete ? this.optionsId : null, "aria-controls": !this.autocomplete ? this.optionsId : null, "aria-disabled": !this.autocomplete ? (this.disabled ? 'true' : null) : null, "aria-required": !this.autocomplete ? (this.required ? 'true' : 'false') : null, "aria-expanded": !this.autocomplete ? (this.expanded ? 'true' : 'false') : null, "aria-multiselectable": !this.autocomplete ? (this.multiple ? 'true' : 'false') : null, "aria-label": !this.autocomplete ? ariaLabelValue : null }), h("div", { key: '2dff342eb864a28ac960583102de88cfd7f63d98', class: "wcs-select-control" }, h("div", { key: '0f2028f2eb8245fa08da06ccebbfbac880d0e090', class: "wcs-select-value-container" }, this.hasValue
869
+ return (h(Host, Object.assign({ key: '5da08e1418d8e8a2f65295a86a4868357ac676cb', class: this.expanded ? 'expanded ' : '', overlayDirection: this.overlayDirection }, this.focusedAttributes(), { role: !this.autocomplete ? "combobox" : null, "aria-haspopup": !this.autocomplete ? "listbox" : null, "aria-owns": !this.autocomplete ? this.optionsId : null, "aria-controls": !this.autocomplete ? this.optionsId : null, "aria-disabled": !this.autocomplete ? (this.disabled ? 'true' : null) : null, "aria-required": !this.autocomplete ? (this.required ? 'true' : 'false') : null, "aria-expanded": !this.autocomplete ? (this.expanded ? 'true' : 'false') : null, "aria-multiselectable": !this.autocomplete ? (this.multiple ? 'true' : 'false') : null, "aria-label": !this.autocomplete ? ariaLabelValue : null }), h("div", { key: '64bb5c04992a0ecf451a6ea5114bcb631f936555', class: "wcs-select-control" }, h("div", { key: '9279627148ef9bf1e8113df1dd97ab9d721f2f06', class: "wcs-select-value-container" }, this.hasValue
841
870
  ?
842
871
  (this.chips ?
843
872
  this.values.map((option) => h(SelectChips, { disabled: this.disabled, option: option, onRemove: this.removeChip.bind(this) }))
844
873
  : (!this.autocomplete || this.autocomplete && this.multiple) &&
845
874
  h("label", { class: "wcs-select-value" }, this.displayText))
846
- : !this.autocomplete && h("label", { class: "wcs-select-placeholder" }, this.placeholder), this.autocomplete && h("input", Object.assign({ key: '000f05300690b402f77b210b4e6808e73647d607', class: "autocomplete-field", value: this.autocompleteValue, role: "combobox", "aria-haspopup": "listbox", "aria-label": ariaLabelValue, "aria-describedby": noResultContainerId, "aria-disabled": this.disabled ? 'true' : null, "aria-expanded": this.expanded ? 'true' : 'false', "aria-controls": this.optionsId, "aria-owns": this.optionsId, "aria-multiselectable": this.multiple ? 'true' : 'false', "aria-autocomplete": "list", autocomplete: "off", disabled: this.disabled, required: this.required, onBlur: (e) => this.onAutocompleteFieldBlur(e), placeholder: ((_a = this.values) === null || _a === void 0 ? void 0 : _a.length) ? null : this.placeholder, onInput: (e) => this.onAutocompleteInputEvent(e), ref: el => this.autocompleteInput = el }, this.inheritedAttributes))), h(SelectArrow, { key: 'cbbb2ef8b0c49b69c2a3509e6444f52d114efd23', up: this.expanded })), h("div", { key: '9330811ed0b8e0a2380692cdca34f2196b087466', class: "wcs-select-options", id: this.optionsId, role: "listbox" }, h("slot", { key: '9efd1b1d83e7bc1af1733909060854025c21df07', name: "options", onSlotchange: this.onSlotchange.bind(this) }), (this.autocomplete && this.showNoResultFoundLabel) &&
847
- h("div", { key: 'a8438df62c26f1d4cfcd25c43d5636031138c71f', role: "alert", id: noResultContainerId, class: "noresult-container" }, h("slot", { key: '95397947cdef93512fec2c168ca42893500950ba', name: "filter-no-result" }, h("span", { key: 'd5fc78e9ba099a017f6ed3116b23aa929c34dcb9' }, "Aucun r\u00E9sultat"))))));
875
+ : !this.autocomplete && h("label", { class: "wcs-select-placeholder" }, this.placeholder), this.autocomplete && h("input", Object.assign({ key: '97732eba53ac636b9f9e231ad6c86903599dd21b', class: "autocomplete-field", value: this.autocompleteValue, role: "combobox", "aria-haspopup": "listbox", "aria-label": ariaLabelValue, "aria-describedby": noResultContainerId, "aria-disabled": this.disabled ? 'true' : null, "aria-expanded": this.expanded ? 'true' : 'false', "aria-controls": this.optionsId, "aria-owns": this.optionsId, "aria-multiselectable": this.multiple ? 'true' : 'false', "aria-autocomplete": "list", autocomplete: "off", disabled: this.disabled, required: this.required, placeholder: ((_a = this.values) === null || _a === void 0 ? void 0 : _a.length) ? null : this.placeholder, onInput: (e) => this.onAutocompleteInputEvent(e), ref: el => this.autocompleteInput = el }, this.inheritedAttributes))), h(SelectArrow, { key: '4546d670d107ad9bb496844ef6b4d2b1e7d333c4', up: this.expanded })), h("div", { key: '75eda1298dab81575144d561120290d804d84cce', class: "wcs-select-options", id: this.optionsId, role: "listbox" }, h("slot", { key: '4de8ebd148df28d68c4163026562669ebfbc37b3', name: "options", onSlotchange: this.onSlotchange.bind(this) }), (this.autocomplete && this.showNoResultFoundLabel) &&
876
+ h("div", { key: '6ebeb7af554a9f3799658e7e3d58f0c1ac25f9f2', role: "alert", id: noResultContainerId, class: "noresult-container" }, h("slot", { key: '2c34abe1a89dc797f80944809457710e66d0336d', name: "filter-no-result" }, h("span", { key: '6e51c2870b926c593dbd53d87a99ef1beb989343' }, "Aucun r\u00E9sultat"))))));
848
877
  }
849
878
  static get is() { return "wcs-select"; }
850
879
  static get encapsulation() { return "shadow"; }
@@ -1218,7 +1247,7 @@ export class Select {
1218
1247
  "signature": "(attr: AriaAttributeName, value: string | null | undefined) => Promise<void>",
1219
1248
  "parameters": [{
1220
1249
  "name": "attr",
1221
- "type": "\"role\" | `aria-${string}`",
1250
+ "type": "`aria-${string}` | \"role\"",
1222
1251
  "docs": ""
1223
1252
  }, {
1224
1253
  "name": "value",