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,188 @@
1
+ import { setWcsContent } from "../../utils/playwright/test";
2
+ import { test } from "@stencil/playwright";
3
+ import { expect } from "@playwright/test";
4
+ test.describe('breadcrumb collapse', () => {
5
+ test('should hide breadcrumb item and respect default values for itemsBeforeCollapse and itemsAfterCollapse props', async ({ page }) => {
6
+ // Given
7
+ await setWcsContent(page, `
8
+ <wcs-breadcrumb max-items="3">
9
+ <wcs-breadcrumb-item class="home-item">Home</wcs-breadcrumb-item>
10
+ <wcs-breadcrumb-item class="train-item">Train</wcs-breadcrumb-item>
11
+ <wcs-breadcrumb-item class="ticket-item">Tickets</wcs-breadcrumb-item>
12
+ <wcs-breadcrumb-item class="detail-item">Details</wcs-breadcrumb-item>
13
+ </wcs-breadcrumb>
14
+ `);
15
+ const homeItem = page.locator('.home-item');
16
+ const trainItem = page.locator('.train-item');
17
+ const ticketItem = page.locator('.ticket-item');
18
+ const detail = page.locator('.detail-item');
19
+ await expect(homeItem).toHaveAttribute('slot', 'items-before-expand-btn');
20
+ await expect(trainItem).toHaveAttribute('slot', 'hidden-items');
21
+ await expect(ticketItem).toHaveAttribute('slot', 'items-after-expand-btn');
22
+ await expect(detail).toHaveAttribute('slot', 'items-after-expand-btn');
23
+ });
24
+ test('should hide breadcrumb item and respect user values for itemsBeforeCollapse and itemsAfterCollapse props', async ({ page }) => {
25
+ // Given
26
+ await setWcsContent(page, `
27
+ <wcs-breadcrumb max-items="3" items-before-collapse="2" items-after-collapse="1">
28
+ <wcs-breadcrumb-item class="home-item">Home</wcs-breadcrumb-item>
29
+ <wcs-breadcrumb-item class="train-item">Train</wcs-breadcrumb-item>
30
+ <wcs-breadcrumb-item class="ticket-item">Tickets</wcs-breadcrumb-item>
31
+ <wcs-breadcrumb-item class="detail-item">Details</wcs-breadcrumb-item>
32
+ </wcs-breadcrumb>
33
+ `);
34
+ const homeItem = page.locator('.home-item');
35
+ const trainItem = page.locator('.train-item');
36
+ const ticketItem = page.locator('.ticket-item');
37
+ const detail = page.locator('.detail-item');
38
+ await expect(homeItem).toHaveAttribute('slot', 'items-before-expand-btn');
39
+ await expect(trainItem).toHaveAttribute('slot', 'items-before-expand-btn');
40
+ await expect(ticketItem).toHaveAttribute('slot', 'hidden-items');
41
+ await expect(detail).toHaveAttribute('slot', 'items-after-expand-btn');
42
+ });
43
+ test('shouldn\'t hide breadcrumb item if max item attribute is not defined', async ({ page }) => {
44
+ // Given
45
+ await setWcsContent(page, `
46
+ <wcs-breadcrumb>
47
+ <wcs-breadcrumb-item class="home-item">Home</wcs-breadcrumb-item>
48
+ <wcs-breadcrumb-item class="train-item">Train</wcs-breadcrumb-item>
49
+ <wcs-breadcrumb-item class="ticket-item">Tickets</wcs-breadcrumb-item>
50
+ <wcs-breadcrumb-item class="detail-item">Details</wcs-breadcrumb-item>
51
+ </wcs-breadcrumb>
52
+ `);
53
+ const homeItem = page.locator('.home-item');
54
+ const trainItem = page.locator('.train-item');
55
+ const ticketItem = page.locator('.ticket-item');
56
+ const detail = page.locator('.detail-item');
57
+ await expect(homeItem).toHaveAttribute('slot', 'non-collapsed');
58
+ await expect(trainItem).toHaveAttribute('slot', 'non-collapsed');
59
+ await expect(ticketItem).toHaveAttribute('slot', 'non-collapsed');
60
+ await expect(detail).toHaveAttribute('slot', 'non-collapsed');
61
+ });
62
+ test('sould hide appended breadcrumb item', async ({ page }) => {
63
+ // Given
64
+ await setWcsContent(page, `
65
+ <wcs-breadcrumb max-items="3">
66
+ <wcs-breadcrumb-item class="home-item">Home</wcs-breadcrumb-item>
67
+ <wcs-breadcrumb-item class="train-item">Train</wcs-breadcrumb-item>
68
+ <wcs-breadcrumb-item class="ticket-item">Tickets</wcs-breadcrumb-item>
69
+ </wcs-breadcrumb>
70
+ `);
71
+ await page.evaluate(() => {
72
+ const breadcrumbItem = document.createElement('wcs-breadcrumb-item');
73
+ breadcrumbItem.classList.add('detail-item');
74
+ breadcrumbItem.textContent = 'Details';
75
+ const breadcrumb = document.querySelector('wcs-breadcrumb');
76
+ breadcrumb.appendChild(breadcrumbItem);
77
+ });
78
+ const homeItem = page.locator('.home-item');
79
+ const trainItem = page.locator('.train-item');
80
+ const ticketItem = page.locator('.ticket-item');
81
+ const detail = page.locator('.detail-item');
82
+ await expect(homeItem).toHaveAttribute('slot', 'items-before-expand-btn');
83
+ await expect(trainItem).toHaveAttribute('slot', 'hidden-items');
84
+ await expect(ticketItem).toHaveAttribute('slot', 'items-after-expand-btn');
85
+ await expect(detail).toHaveAttribute('slot', 'items-after-expand-btn');
86
+ });
87
+ test('should display all breadcrumb items when the max-items prop is mutated in js', async ({ page }) => {
88
+ // Given
89
+ await setWcsContent(page, `
90
+ <wcs-breadcrumb max-items="3">
91
+ <wcs-breadcrumb-item class="home-item">Home</wcs-breadcrumb-item>
92
+ <wcs-breadcrumb-item class="train-item">Train</wcs-breadcrumb-item>
93
+ <wcs-breadcrumb-item class="ticket-item">Tickets</wcs-breadcrumb-item>
94
+ <wcs-breadcrumb-item class="detail-item">Details</wcs-breadcrumb-item>
95
+ </wcs-breadcrumb>
96
+ `);
97
+ const homeItem = page.locator('.home-item');
98
+ const trainItem = page.locator('.train-item');
99
+ const ticketItem = page.locator('.ticket-item');
100
+ const detail = page.locator('.detail-item');
101
+ await expect(homeItem).toHaveAttribute('slot', 'items-before-expand-btn');
102
+ await expect(trainItem).toHaveAttribute('slot', 'hidden-items');
103
+ await expect(ticketItem).toHaveAttribute('slot', 'items-after-expand-btn');
104
+ await expect(detail).toHaveAttribute('slot', 'items-after-expand-btn');
105
+ const breadcrumb = page.locator('wcs-breadcrumb');
106
+ await breadcrumb.evaluate((el) => el.maxItems = undefined);
107
+ await expect(homeItem).toHaveAttribute('slot', 'non-collapsed');
108
+ await expect(trainItem).toHaveAttribute('slot', 'non-collapsed');
109
+ await expect(ticketItem).toHaveAttribute('slot', 'non-collapsed');
110
+ await expect(detail).toHaveAttribute('slot', 'non-collapsed');
111
+ });
112
+ test('should collapse all breadcrumb items when the max-items prop is mutated in js', async ({ page }) => {
113
+ // Given
114
+ await setWcsContent(page, `
115
+ <wcs-breadcrumb>
116
+ <wcs-breadcrumb-item class="home-item">Home</wcs-breadcrumb-item>
117
+ <wcs-breadcrumb-item class="train-item">Train</wcs-breadcrumb-item>
118
+ <wcs-breadcrumb-item class="ticket-item">Tickets</wcs-breadcrumb-item>
119
+ <wcs-breadcrumb-item class="detail-item">Details</wcs-breadcrumb-item>
120
+ </wcs-breadcrumb>
121
+ `);
122
+ const homeItem = page.locator('.home-item');
123
+ const trainItem = page.locator('.train-item');
124
+ const ticketItem = page.locator('.ticket-item');
125
+ const detail = page.locator('.detail-item');
126
+ await expect(homeItem).toHaveAttribute('slot', 'non-collapsed');
127
+ await expect(trainItem).toHaveAttribute('slot', 'non-collapsed');
128
+ await expect(ticketItem).toHaveAttribute('slot', 'non-collapsed');
129
+ await expect(detail).toHaveAttribute('slot', 'non-collapsed');
130
+ const breadcrumb = page.locator('wcs-breadcrumb');
131
+ await breadcrumb.evaluate((el) => el.maxItems = 3);
132
+ await expect(homeItem).toHaveAttribute('slot', 'items-before-expand-btn');
133
+ await expect(trainItem).toHaveAttribute('slot', 'hidden-items');
134
+ await expect(ticketItem).toHaveAttribute('slot', 'items-after-expand-btn');
135
+ await expect(detail).toHaveAttribute('slot', 'items-after-expand-btn');
136
+ });
137
+ test('should expand collapsed items when user click on expand button', async ({ page }) => {
138
+ // Given
139
+ await setWcsContent(page, `
140
+ <wcs-breadcrumb max-items="3">
141
+ <wcs-breadcrumb-item class="home-item">Home</wcs-breadcrumb-item>
142
+ <wcs-breadcrumb-item class="train-item">Train</wcs-breadcrumb-item>
143
+ <wcs-breadcrumb-item class="ticket-item">Tickets</wcs-breadcrumb-item>
144
+ <wcs-breadcrumb-item class="detail-item">Details</wcs-breadcrumb-item>
145
+ </wcs-breadcrumb>
146
+ `);
147
+ const nav = page.locator('wcs-breadcrumb nav');
148
+ const expandBtn = page.locator(`wcs-breadcrumb wcs-button`);
149
+ await expandBtn.click();
150
+ await page.waitForChanges();
151
+ await expect(nav).toHaveClass(/show-hidden-items/);
152
+ });
153
+ test('should update aria-label attribute after the first render', async ({ page }) => {
154
+ // Given
155
+ await setWcsContent(page, `
156
+ <wcs-breadcrumb>
157
+ <wcs-breadcrumb-item>Home</wcs-breadcrumb-item>
158
+ <wcs-breadcrumb-item>Train</wcs-breadcrumb-item>
159
+ <wcs-breadcrumb-item>Tickets</wcs-breadcrumb-item>
160
+ </wcs-breadcrumb>
161
+ `);
162
+ const wcsBreadcrumb = page.locator('wcs-breadcrumb');
163
+ // When
164
+ await wcsBreadcrumb.evaluate((el) => el.setAriaAttribute('aria-label', 'new label'));
165
+ // Then
166
+ const navEl = page.locator('wcs-breadcrumb nav');
167
+ await expect(navEl).toHaveAttribute('aria-label', 'new label');
168
+ });
169
+ test('should update expand button aria-label attribute', async ({ page }) => {
170
+ // Given
171
+ await setWcsContent(page, `
172
+ <wcs-breadcrumb max-items="3">
173
+ <wcs-breadcrumb-item class="home-item">Home</wcs-breadcrumb-item>
174
+ <wcs-breadcrumb-item class="train-item">Train</wcs-breadcrumb-item>
175
+ <wcs-breadcrumb-item class="ticket-item">Tickets</wcs-breadcrumb-item>
176
+ <wcs-breadcrumb-item class="detail-item">Details</wcs-breadcrumb-item>
177
+ </wcs-breadcrumb>
178
+ `);
179
+ const wcsBreadcrumb = page.locator('wcs-breadcrumb');
180
+ // When
181
+ const newAriaLabelValue = 'New label';
182
+ await wcsBreadcrumb.evaluate((el, value) => el.ariaLabelExpandButton = value, newAriaLabelValue);
183
+ // Then
184
+ const expandBtn = page.locator('wcs-breadcrumb button.wcs-inner-button');
185
+ await expect(expandBtn).toHaveAttribute('aria-label', newAriaLabelValue);
186
+ });
187
+ });
188
+ //# sourceMappingURL=breadcrumb.e2e.playwright.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"breadcrumb.e2e.playwright.js","sourceRoot":"","sources":["../../../src/components/breadcrumb/breadcrumb.e2e.playwright.ts"],"names":[],"mappings":"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","sourcesContent":["import { setWcsContent } from '../../utils/playwright/test';\nimport { test, E2EPage } from \"@stencil/playwright\";\n\nimport { expect } from \"@playwright/test\";\n\ntest.describe('breadcrumb collapse', () => {\n test('should hide breadcrumb item and respect default values for itemsBeforeCollapse and itemsAfterCollapse props', async ({ page }: { page: E2EPage }) => {\n // Given\n await setWcsContent(page, `\n <wcs-breadcrumb max-items=\"3\">\n <wcs-breadcrumb-item class=\"home-item\">Home</wcs-breadcrumb-item>\n <wcs-breadcrumb-item class=\"train-item\">Train</wcs-breadcrumb-item>\n <wcs-breadcrumb-item class=\"ticket-item\">Tickets</wcs-breadcrumb-item>\n <wcs-breadcrumb-item class=\"detail-item\">Details</wcs-breadcrumb-item>\n </wcs-breadcrumb>\n `);\n\n const homeItem = page.locator('.home-item');\n const trainItem = page.locator('.train-item');\n const ticketItem = page.locator('.ticket-item');\n const detail = page.locator('.detail-item');\n\n await expect(homeItem).toHaveAttribute('slot', 'items-before-expand-btn');\n await expect(trainItem).toHaveAttribute('slot', 'hidden-items');\n await expect(ticketItem).toHaveAttribute('slot', 'items-after-expand-btn');\n await expect(detail).toHaveAttribute('slot', 'items-after-expand-btn');\n });\n\n test('should hide breadcrumb item and respect user values for itemsBeforeCollapse and itemsAfterCollapse props', async ({ page }: { page: E2EPage }) => {\n // Given\n await setWcsContent(page, `\n <wcs-breadcrumb max-items=\"3\" items-before-collapse=\"2\" items-after-collapse=\"1\">\n <wcs-breadcrumb-item class=\"home-item\">Home</wcs-breadcrumb-item>\n <wcs-breadcrumb-item class=\"train-item\">Train</wcs-breadcrumb-item>\n <wcs-breadcrumb-item class=\"ticket-item\">Tickets</wcs-breadcrumb-item>\n <wcs-breadcrumb-item class=\"detail-item\">Details</wcs-breadcrumb-item>\n </wcs-breadcrumb>\n `);\n\n const homeItem = page.locator('.home-item');\n const trainItem = page.locator('.train-item');\n const ticketItem = page.locator('.ticket-item');\n const detail = page.locator('.detail-item');\n\n await expect(homeItem).toHaveAttribute('slot', 'items-before-expand-btn');\n await expect(trainItem).toHaveAttribute('slot', 'items-before-expand-btn');\n await expect(ticketItem).toHaveAttribute('slot', 'hidden-items');\n await expect(detail).toHaveAttribute('slot', 'items-after-expand-btn');\n });\n\n test('shouldn\\'t hide breadcrumb item if max item attribute is not defined', async ({ page }: { page: E2EPage }) => {\n // Given\n await setWcsContent(page, `\n <wcs-breadcrumb>\n <wcs-breadcrumb-item class=\"home-item\">Home</wcs-breadcrumb-item>\n <wcs-breadcrumb-item class=\"train-item\">Train</wcs-breadcrumb-item>\n <wcs-breadcrumb-item class=\"ticket-item\">Tickets</wcs-breadcrumb-item>\n <wcs-breadcrumb-item class=\"detail-item\">Details</wcs-breadcrumb-item>\n </wcs-breadcrumb>\n `);\n\n const homeItem = page.locator('.home-item');\n const trainItem = page.locator('.train-item');\n const ticketItem = page.locator('.ticket-item');\n const detail = page.locator('.detail-item');\n\n await expect(homeItem).toHaveAttribute('slot', 'non-collapsed');\n await expect(trainItem).toHaveAttribute('slot', 'non-collapsed');\n await expect(ticketItem).toHaveAttribute('slot', 'non-collapsed');\n await expect(detail).toHaveAttribute('slot', 'non-collapsed');\n });\n\n test('sould hide appended breadcrumb item', async ({ page }: { page: E2EPage }) => {\n // Given\n await setWcsContent(page, `\n <wcs-breadcrumb max-items=\"3\">\n <wcs-breadcrumb-item class=\"home-item\">Home</wcs-breadcrumb-item>\n <wcs-breadcrumb-item class=\"train-item\">Train</wcs-breadcrumb-item>\n <wcs-breadcrumb-item class=\"ticket-item\">Tickets</wcs-breadcrumb-item>\n </wcs-breadcrumb>\n `);\n\n await page.evaluate(() => {\n const breadcrumbItem = document.createElement('wcs-breadcrumb-item');\n breadcrumbItem.classList.add('detail-item');\n breadcrumbItem.textContent = 'Details';\n const breadcrumb = document.querySelector('wcs-breadcrumb');\n breadcrumb!.appendChild(breadcrumbItem);\n });\n\n const homeItem = page.locator('.home-item');\n const trainItem = page.locator('.train-item');\n const ticketItem = page.locator('.ticket-item');\n const detail = page.locator('.detail-item');\n\n await expect(homeItem).toHaveAttribute('slot', 'items-before-expand-btn');\n await expect(trainItem).toHaveAttribute('slot', 'hidden-items');\n await expect(ticketItem).toHaveAttribute('slot', 'items-after-expand-btn');\n await expect(detail).toHaveAttribute('slot', 'items-after-expand-btn');\n });\n\n test('should display all breadcrumb items when the max-items prop is mutated in js', async ({ page }: { page: E2EPage }) => {\n // Given\n await setWcsContent(page, `\n <wcs-breadcrumb max-items=\"3\">\n <wcs-breadcrumb-item class=\"home-item\">Home</wcs-breadcrumb-item>\n <wcs-breadcrumb-item class=\"train-item\">Train</wcs-breadcrumb-item>\n <wcs-breadcrumb-item class=\"ticket-item\">Tickets</wcs-breadcrumb-item>\n <wcs-breadcrumb-item class=\"detail-item\">Details</wcs-breadcrumb-item>\n </wcs-breadcrumb>\n `);\n\n const homeItem = page.locator('.home-item');\n const trainItem = page.locator('.train-item');\n const ticketItem = page.locator('.ticket-item');\n const detail = page.locator('.detail-item');\n\n await expect(homeItem).toHaveAttribute('slot', 'items-before-expand-btn');\n await expect(trainItem).toHaveAttribute('slot', 'hidden-items');\n await expect(ticketItem).toHaveAttribute('slot', 'items-after-expand-btn');\n await expect(detail).toHaveAttribute('slot', 'items-after-expand-btn');\n\n const breadcrumb = page.locator('wcs-breadcrumb');\n await breadcrumb.evaluate((el: any) => el.maxItems = undefined);\n\n await expect(homeItem).toHaveAttribute('slot', 'non-collapsed');\n await expect(trainItem).toHaveAttribute('slot', 'non-collapsed');\n await expect(ticketItem).toHaveAttribute('slot', 'non-collapsed');\n await expect(detail).toHaveAttribute('slot', 'non-collapsed');\n });\n\n test('should collapse all breadcrumb items when the max-items prop is mutated in js', async ({ page }: { page: E2EPage }) => {\n // Given\n await setWcsContent(page, `\n <wcs-breadcrumb>\n <wcs-breadcrumb-item class=\"home-item\">Home</wcs-breadcrumb-item>\n <wcs-breadcrumb-item class=\"train-item\">Train</wcs-breadcrumb-item>\n <wcs-breadcrumb-item class=\"ticket-item\">Tickets</wcs-breadcrumb-item>\n <wcs-breadcrumb-item class=\"detail-item\">Details</wcs-breadcrumb-item>\n </wcs-breadcrumb>\n `);\n\n const homeItem = page.locator('.home-item');\n const trainItem = page.locator('.train-item');\n const ticketItem = page.locator('.ticket-item');\n const detail = page.locator('.detail-item');\n\n await expect(homeItem).toHaveAttribute('slot', 'non-collapsed');\n await expect(trainItem).toHaveAttribute('slot', 'non-collapsed');\n await expect(ticketItem).toHaveAttribute('slot', 'non-collapsed');\n await expect(detail).toHaveAttribute('slot', 'non-collapsed');\n\n const breadcrumb = page.locator('wcs-breadcrumb');\n await breadcrumb.evaluate((el: any) => el.maxItems = 3);\n\n await expect(homeItem).toHaveAttribute('slot', 'items-before-expand-btn');\n await expect(trainItem).toHaveAttribute('slot', 'hidden-items');\n await expect(ticketItem).toHaveAttribute('slot', 'items-after-expand-btn');\n await expect(detail).toHaveAttribute('slot', 'items-after-expand-btn');\n });\n\n test('should expand collapsed items when user click on expand button', async ({ page }: { page: E2EPage }) => {\n // Given\n await setWcsContent(page, `\n <wcs-breadcrumb max-items=\"3\">\n <wcs-breadcrumb-item class=\"home-item\">Home</wcs-breadcrumb-item>\n <wcs-breadcrumb-item class=\"train-item\">Train</wcs-breadcrumb-item>\n <wcs-breadcrumb-item class=\"ticket-item\">Tickets</wcs-breadcrumb-item>\n <wcs-breadcrumb-item class=\"detail-item\">Details</wcs-breadcrumb-item>\n </wcs-breadcrumb>\n `);\n\n const nav = page.locator('wcs-breadcrumb nav');\n const expandBtn = page.locator(`wcs-breadcrumb wcs-button`);\n await expandBtn.click();\n await page.waitForChanges();\n\n await expect(nav).toHaveClass(/show-hidden-items/);\n });\n\n test('should update aria-label attribute after the first render', async ({ page }: { page: E2EPage }) => {\n // Given\n await setWcsContent(page, `\n <wcs-breadcrumb>\n <wcs-breadcrumb-item>Home</wcs-breadcrumb-item>\n <wcs-breadcrumb-item>Train</wcs-breadcrumb-item>\n <wcs-breadcrumb-item>Tickets</wcs-breadcrumb-item>\n </wcs-breadcrumb>\n `);\n\n const wcsBreadcrumb = page.locator('wcs-breadcrumb');\n\n // When\n await wcsBreadcrumb.evaluate((el: any) => el.setAriaAttribute('aria-label', 'new label'));\n\n // Then\n const navEl = page.locator('wcs-breadcrumb nav');\n await expect(navEl).toHaveAttribute('aria-label', 'new label');\n });\n\n test('should update expand button aria-label attribute', async ({ page }: { page: E2EPage }) => {\n // Given\n await setWcsContent(page, `\n <wcs-breadcrumb max-items=\"3\">\n <wcs-breadcrumb-item class=\"home-item\">Home</wcs-breadcrumb-item>\n <wcs-breadcrumb-item class=\"train-item\">Train</wcs-breadcrumb-item>\n <wcs-breadcrumb-item class=\"ticket-item\">Tickets</wcs-breadcrumb-item>\n <wcs-breadcrumb-item class=\"detail-item\">Details</wcs-breadcrumb-item>\n </wcs-breadcrumb>\n `);\n\n const wcsBreadcrumb = page.locator('wcs-breadcrumb');\n\n // When\n const newAriaLabelValue = 'New label';\n await wcsBreadcrumb.evaluate((el: any, value: string) => el.ariaLabelExpandButton = value, newAriaLabelValue);\n\n // Then\n const expandBtn = page.locator('wcs-breadcrumb button.wcs-inner-button');\n await expect(expandBtn).toHaveAttribute('aria-label', newAriaLabelValue);\n });\n});\n"]}
@@ -131,7 +131,7 @@ export class Breadcrumb {
131
131
  }
132
132
  render() {
133
133
  const showExpandBtn = this.shouldCollapseItems() && !this.showHiddenItems;
134
- return (h(Host, { key: 'f1c0ed14b8806df5c1ba717f6354d2e4c201dcd1' }, h("nav", Object.assign({ key: 'ae39ce6d5af6868105c1cb349d70d04da9931274', class: `wcs-breadcrumb-container${this.showHiddenItems ? ' show-hidden-items' : ''}`, "aria-label": NAV_ARIA_LABEL_DEFAULT }, this.inheritedAttributes, { ref: (el) => this.navEl = el }), h("div", { key: '82f4a76da057076e5d7299df7972bb918220b6ac', role: "list" }, h("slot", { key: 'e3180e059e1467c9821e5d10b0694f39194ce4f4', onSlotchange: this.handleSlotChange.bind(this) }), h("slot", { key: 'e865695a1082a503321d519193f47c54f2d86ba5', name: "non-collapsed" }), h("slot", { key: '53a846e67fe320236a8f0b80216c72fa676304bb', name: "items-before-expand-btn" }), h("slot", { key: 'a6f9243e94d5f4e05e6e3ca89a574ac37128689a', name: "hidden-items" }), showExpandBtn && this.renderExpandAllButton(), h("slot", { key: '0ca62fc184565b82a12d1314bdfb51161934775b', name: "items-after-expand-btn" })))));
134
+ return (h(Host, { key: '1707e6c3ee0cc621c75f85f927b543dea1af4342' }, h("nav", Object.assign({ key: 'b326c58b86feed5092f8a6c5d46c3cf2dd06a783', class: `wcs-breadcrumb-container${this.showHiddenItems ? ' show-hidden-items' : ''}`, "aria-label": NAV_ARIA_LABEL_DEFAULT }, this.inheritedAttributes, { ref: (el) => this.navEl = el }), h("div", { key: '9a4395f63e0895bca1918d7236a01dd9d0437f26', role: "list" }, h("slot", { key: 'b74aa1fc77ddfc892f0ba79bceffceab10e49c1f', onSlotchange: this.handleSlotChange.bind(this) }), h("slot", { key: 'c616f6281282a7088073ceb131f12f93d1126c8b', name: "non-collapsed" }), h("slot", { key: '0db22f440bc3956219c343e4dac60bfe09581d73', name: "items-before-expand-btn" }), h("slot", { key: 'a29809c5122d539d11c1e53e591ed4342c338810', name: "hidden-items" }), showExpandBtn && this.renderExpandAllButton(), h("slot", { key: 'aa906ec3b5805f78136b39e5d56937cdca7a7f38', name: "items-after-expand-btn" })))));
135
135
  }
136
136
  static get is() { return "wcs-breadcrumb"; }
137
137
  static get encapsulation() { return "shadow"; }
@@ -232,7 +232,7 @@ export class Breadcrumb {
232
232
  "signature": "(attr: AriaAttributeName, value: string | null | undefined) => Promise<void>",
233
233
  "parameters": [{
234
234
  "name": "attr",
235
- "type": "\"role\" | `aria-${string}`",
235
+ "type": "`aria-${string}` | \"role\"",
236
236
  "docs": ""
237
237
  }, {
238
238
  "name": "value",
@@ -1 +1 @@
1
- {"version":3,"file":"breadcrumb.js","sourceRoot":"","sources":["../../../src/components/breadcrumb/breadcrumb.tsx"],"names":[],"mappings":"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","sourcesContent":["import {\n Component,\n ComponentInterface,\n Element, forceUpdate,\n h,\n Host,\n Method,\n Prop,\n State,\n Watch\n} from '@stencil/core';\n\nimport { inheritAttributes, inheritAriaAttributes, setOrRemoveAttribute } from '../../utils/helpers';\nimport { AriaAttributeName, MutableAriaAttribute } from '../../utils/mutable-aria-attribute';\nimport {\n ICONS_FONT_CHEVRON_UNICODE,\n NAV_ARIA_LABEL_DEFAULT,\n EXPAND_BTN_ARIA_LABEL_DEFAULT\n} from './breadcrumb-constants';\n\nconst BREADCRUMB_INHERITED_ATTRS = [];\n\n/**\n * A breadcrumb trail consists of a list of links to the parent pages of the current page in hierarchical order. \n * It helps users find their place within a website or web application. Breadcrumbs are often placed horizontally before a page's main content.\n *\n * ## Accessibility guidelines 💡\n * > - If the last item is a link to the current page, you must set the `aria-current` attribute to `page` on `wcs-breadcrumb-item`.\n * > - If the element representing the current page is not a link, `aria-current` is optional.\n * > - You can set the attribute `aria-label` on `wcs-breadcrumb`, it will be passed to the native `nav` element located inside its shadow DOM. \n * > You can find the `aria-label` default value in the table below. If your application is in English, you can set it to `Breadcrumb`.\n * > - You can do the same thing for the `aria-label` of the expand button when the breadcrumb is collapsed. You can find its default value\n * > in the table below too. \n * > - If you need to **dynamically change the `aria-label` attribute of `wcs-breadcrumb` after the first render**, you can use the \n * > `setAriaAttribute` JS method (example below). For the expand button however, you can update the prop `ariaLabelExpandButton`. \n * > Note: we're working on updating the component automatically when attributes change. \n *\n * > ```javascript\n * > const wcsButton = document.querySelector('wcs-button');\n * > await wcsButton.setAriaAttribute('aria-label', 'new label');\n * > ```\n * \n * @cssprop --wcs-breadcrumb-icon-color - Icon color\n * @cssprop --wcs-breadcrumb-icon-font-size - Icon font size\n * @cssprop --wcs-breadcrumb-gap - Gap between breadcrumb items\n */\n@Component({\n tag: 'wcs-breadcrumb',\n styleUrl: 'breadcrumb.scss',\n shadow: true,\n})\nexport class Breadcrumb implements ComponentInterface, MutableAriaAttribute {\n @Element() private el: HTMLElement;\n private navEl?: HTMLElement;\n private expandBtnEl: HTMLWcsButtonElement;\n\n private inheritedAttributes: { [k: string]: any } = {};\n\n /**\n * If the number of breadcrumb items exceeds this maximum,\n * the breadcrumb will collapse and show an expand button. \n * If this prop is `undefined`, breadcrumb items will never collapse.\n */\n @Prop() maxItems?: number;\n /**\n * The number of breadcrumb items to show before the expand button.\n * If `itemsBeforeCollapse` + `itemsAfterCollapse` is greater than `maxItems`,\n * the breadcrumb will not be collapsed.\n */\n @Prop() itemsBeforeCollapse: number = 1;\n /**\n * The number of breadcrumb items to show after the expand button.\n * If `itemsBeforeCollapse` + `itemsAfterCollapse` is greater than `maxItems`,\n * the breadcrumb will not be collapsed.\n */\n @Prop() itemsAfterCollapse: number = 2;\n /** Set `aria-label` for the expand button when the breadcrumb is collapsed. */\n @Prop() ariaLabelExpandButton?: string = EXPAND_BTN_ARIA_LABEL_DEFAULT;\n\n /**\n * Show breadcrumb items that are inside the hidden-items slot.\n */\n @State() private showHiddenItems: boolean = false;\n\n @Watch('maxItems')\n @Watch('itemsBeforeCollapse')\n @Watch('itemsAfterCollapse')\n handleCollapsePropsChange() {\n this.updateCollapsedViewMode();\n }\n\n @Watch('ariaLabelExpandButton')\n handleAriaLabelExpandBtnChange(newValue: string) {\n this.expandBtnEl?.setAriaAttribute('aria-label', newValue);\n }\n\n componentWillLoad(): Promise<void> | void {\n this.inheritedAttributes = {\n ...inheritAriaAttributes(this.el),\n ...inheritAttributes(this.el, BREADCRUMB_INHERITED_ATTRS),\n };\n this.updateCollapsedViewMode();\n }\n\n componentDidLoad(): void {\n this.expandBtnEl?.setAriaAttribute('aria-label', this.ariaLabelExpandButton);\n }\n\n @Method()\n async setAriaAttribute(attr: AriaAttributeName, value: string | null | undefined) {\n setOrRemoveAttribute(this.navEl, attr, value);\n }\n\n private getBreadcrumbItems(): HTMLWcsBreadcrumbItemElement[] {\n return Array.from(this.el.querySelectorAll('wcs-breadcrumb-item'));\n }\n\n private shouldCollapseItems(): boolean {\n return (\n !!this.maxItems &&\n this.getBreadcrumbItems().length > this.maxItems &&\n this.itemsBeforeCollapse + this.itemsAfterCollapse <= this.maxItems\n );\n }\n\n private updateCollapsedViewMode(): void {\n if (this.shouldCollapseItems()) {\n this.assignSlotNamesForCollapsedViewMode();\n } else {\n this.assignSlotNamesForNonCollapsedViewMode();\n }\n }\n\n /**\n * Setting slot names on breadcrumb items allows to leverage JSX in the render method.\n */\n private assignSlotNamesForCollapsedViewMode(): void {\n const breadcrumbItems = this.getBreadcrumbItems();\n const itemBeforeExpandBtnIndex = this.itemsBeforeCollapse - 1;\n const itemAfterExpandBtnIndex = breadcrumbItems.length - this.itemsAfterCollapse;\n\n breadcrumbItems.forEach((breadcrumbItem, index) => {\n if (index <= itemBeforeExpandBtnIndex) {\n breadcrumbItem.slot = 'items-before-expand-btn';\n breadcrumbItem.last = false;\n } else if (index > itemBeforeExpandBtnIndex && index < itemAfterExpandBtnIndex) {\n breadcrumbItem.slot = 'hidden-items';\n breadcrumbItem.last = false;\n } else {\n breadcrumbItem.slot = 'items-after-expand-btn';\n breadcrumbItem.last = index === breadcrumbItems.length - 1;\n }\n });\n }\n \n private assignSlotNamesForNonCollapsedViewMode(): void {\n const breadcrumbItems = this.getBreadcrumbItems();\n breadcrumbItems.forEach((breadcrumbItem, index) => {\n breadcrumbItem.slot = 'non-collapsed';\n breadcrumbItem.last = index === breadcrumbItems.length - 1;\n });\n }\n\n private handleSlotChange(): void {\n this.updateCollapsedViewMode();\n this.showHiddenItems = false;\n forceUpdate(this);\n }\n\n private handleOnExpandBtnClick(): void {\n // We leave the breadcrumb items in the hidden-items slot, without passing them to\n // the non-collapsed slot, so that we know which items to hide again later if needed.\n // For future implementations, the expand button could show or hide hidden items on click,\n // with a wcs-dropdown for example.\n this.showHiddenItems = true;\n // We wait for the first hidden item to be visible in the DOM again\n // to be able to focus it.\n requestAnimationFrame(() => this.setFocusToFirstHiddenItem());\n }\n\n /**\n * Avoid losing focus after clicking the expand button.\n * We need to give focus back to the first breadcrumb item link that was hidden before.\n */\n private setFocusToFirstHiddenItem(): void {\n const breadcrumbItems = this.getBreadcrumbItems();\n const firstHiddenItemIndex = this.itemsBeforeCollapse;\n const firstHiddenItem = breadcrumbItems[firstHiddenItemIndex];\n const firstHiddenItemSlot =\n firstHiddenItem.shadowRoot.querySelector('slot') as HTMLSlotElement;\n const breadcrumbItemLinkToFocus =\n firstHiddenItemSlot.assignedElements()[0] as HTMLAnchorElement;\n breadcrumbItemLinkToFocus?.focus();\n }\n\n private renderExpandAllButton(): JSX.Element {\n const expandBtnIsLastItem = this.itemsAfterCollapse === 0;\n return (\n <div role=\"listitem\" class=\"item-not-slotted\">\n <wcs-button\n mode=\"clear\"\n shape=\"square\"\n size=\"s\"\n onClick={this.handleOnExpandBtnClick.bind(this)}\n ref={(el) => this.expandBtnEl = el}\n >\n <wcs-mat-icon icon=\"more_horiz\" />\n </wcs-button>\n {!expandBtnIsLastItem && (\n <span class=\"item-icon\" aria-hidden=\"true\">\n {ICONS_FONT_CHEVRON_UNICODE}\n </span>\n )}\n </div>\n );\n }\n\n render() {\n const showExpandBtn = this.shouldCollapseItems() && !this.showHiddenItems;\n return (\n <Host>\n <nav\n class={`wcs-breadcrumb-container${this.showHiddenItems ? ' show-hidden-items' : ''}`}\n aria-label={NAV_ARIA_LABEL_DEFAULT}\n {...this.inheritedAttributes}\n ref={(el) => this.navEl = el}\n >\n {/*\n * We use aria roles here instead of an <ol> tag\n * so that the list can be browsed correctly on Firefox with screen readers.\n * There seems to be an issue with Firefox and the Shadow DOM.\n */}\n <div role=\"list\">\n {/* Only the main slot shoud be used by consumers. */}\n <slot onSlotchange={this.handleSlotChange.bind(this)} />\n {/* Non collapsed view mode */}\n <slot name=\"non-collapsed\"></slot>\n {/* Collapsed view mode */}\n <slot name=\"items-before-expand-btn\" />\n <slot name=\"hidden-items\" />\n {showExpandBtn && this.renderExpandAllButton()}\n <slot name=\"items-after-expand-btn\" />\n </div>\n </nav>\n </Host>\n );\n }\n}\n"]}
1
+ {"version":3,"file":"breadcrumb.js","sourceRoot":"","sources":["../../../src/components/breadcrumb/breadcrumb.tsx"],"names":[],"mappings":"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","sourcesContent":["import {\n Component,\n ComponentInterface,\n Element, forceUpdate,\n h,\n Host,\n Method,\n Prop,\n State,\n Watch\n} from '@stencil/core';\n\nimport { inheritAttributes, inheritAriaAttributes, setOrRemoveAttribute } from '../../utils/helpers';\nimport { AriaAttributeName, MutableAriaAttribute } from '../../utils/mutable-aria-attribute';\nimport {\n ICONS_FONT_CHEVRON_UNICODE,\n NAV_ARIA_LABEL_DEFAULT,\n EXPAND_BTN_ARIA_LABEL_DEFAULT\n} from './breadcrumb-constants';\n\nconst BREADCRUMB_INHERITED_ATTRS = [];\n\n/**\n * A breadcrumb trail consists of a list of links to the parent pages of the current page in hierarchical order. \n * It helps users find their place within a website or web application. Breadcrumbs are often placed horizontally before a page's main content.\n *\n * ## Accessibility guidelines 💡\n * > - If the last item is a link to the current page, you must set the `aria-current` attribute to `page` on `wcs-breadcrumb-item`.\n * > - If the element representing the current page is not a link, `aria-current` is optional.\n * > - You can set the attribute `aria-label` on `wcs-breadcrumb`, it will be passed to the native `nav` element located inside its shadow DOM. \n * > You can find the `aria-label` default value in the table below. If your application is in English, you can set it to `Breadcrumb`.\n * > - You can do the same thing for the `aria-label` of the expand button when the breadcrumb is collapsed. You can find its default value\n * > in the table below too. \n * > - If you need to **dynamically change the `aria-label` attribute of `wcs-breadcrumb` after the first render**, you can use the \n * > `setAriaAttribute` JS method (example below). For the expand button however, you can update the prop `ariaLabelExpandButton`. \n * > Note: we're working on updating the component automatically when attributes change. \n *\n * > ```javascript\n * > const wcsButton = document.querySelector('wcs-button');\n * > await wcsButton.setAriaAttribute('aria-label', 'new label');\n * > ```\n * \n * @cssprop --wcs-breadcrumb-icon-color - Icon color\n * @cssprop --wcs-breadcrumb-icon-font-size - Icon font size\n * @cssprop --wcs-breadcrumb-gap - Gap between breadcrumb items\n */\n@Component({\n tag: 'wcs-breadcrumb',\n styleUrl: 'breadcrumb.scss',\n shadow: true,\n})\nexport class Breadcrumb implements ComponentInterface, MutableAriaAttribute {\n @Element() private el: HTMLElement;\n private navEl?: HTMLElement;\n private expandBtnEl: HTMLWcsButtonElement;\n\n private inheritedAttributes: { [k: string]: any } = {};\n\n /**\n * If the number of breadcrumb items exceeds this maximum,\n * the breadcrumb will collapse and show an expand button. \n * If this prop is `undefined`, breadcrumb items will never collapse.\n */\n @Prop() maxItems?: number;\n /**\n * The number of breadcrumb items to show before the expand button.\n * If `itemsBeforeCollapse` + `itemsAfterCollapse` is greater than `maxItems`,\n * the breadcrumb will not be collapsed.\n */\n @Prop() itemsBeforeCollapse: number = 1;\n /**\n * The number of breadcrumb items to show after the expand button.\n * If `itemsBeforeCollapse` + `itemsAfterCollapse` is greater than `maxItems`,\n * the breadcrumb will not be collapsed.\n */\n @Prop() itemsAfterCollapse: number = 2;\n /** Set `aria-label` for the expand button when the breadcrumb is collapsed. */\n @Prop() ariaLabelExpandButton?: string = EXPAND_BTN_ARIA_LABEL_DEFAULT;\n\n /**\n * Show breadcrumb items that are inside the hidden-items slot.\n */\n @State() private showHiddenItems: boolean = false;\n\n @Watch('maxItems')\n @Watch('itemsBeforeCollapse')\n @Watch('itemsAfterCollapse')\n handleCollapsePropsChange() {\n this.updateCollapsedViewMode();\n }\n\n @Watch('ariaLabelExpandButton')\n handleAriaLabelExpandBtnChange(newValue: string) {\n this.expandBtnEl?.setAriaAttribute('aria-label', newValue);\n }\n\n componentWillLoad(): Promise<void> | void {\n this.inheritedAttributes = {\n ...inheritAriaAttributes(this.el),\n ...inheritAttributes(this.el, BREADCRUMB_INHERITED_ATTRS),\n };\n this.updateCollapsedViewMode();\n }\n\n componentDidLoad(): void {\n this.expandBtnEl?.setAriaAttribute('aria-label', this.ariaLabelExpandButton);\n }\n\n @Method()\n async setAriaAttribute(attr: AriaAttributeName, value: string | null | undefined) {\n setOrRemoveAttribute(this.navEl, attr, value);\n }\n\n private getBreadcrumbItems(): HTMLWcsBreadcrumbItemElement[] {\n return Array.from(this.el.querySelectorAll('wcs-breadcrumb-item'));\n }\n\n private shouldCollapseItems(): boolean {\n return (\n !!this.maxItems &&\n this.getBreadcrumbItems().length > this.maxItems &&\n this.itemsBeforeCollapse + this.itemsAfterCollapse <= this.maxItems\n );\n }\n\n private updateCollapsedViewMode(): void {\n if (this.shouldCollapseItems()) {\n this.assignSlotNamesForCollapsedViewMode();\n } else {\n this.assignSlotNamesForNonCollapsedViewMode();\n }\n }\n\n /**\n * Setting slot names on breadcrumb items allows to leverage JSX in the render method.\n */\n private assignSlotNamesForCollapsedViewMode(): void {\n const breadcrumbItems = this.getBreadcrumbItems();\n const itemBeforeExpandBtnIndex = this.itemsBeforeCollapse - 1;\n const itemAfterExpandBtnIndex = breadcrumbItems.length - this.itemsAfterCollapse;\n\n breadcrumbItems.forEach((breadcrumbItem, index) => {\n if (index <= itemBeforeExpandBtnIndex) {\n breadcrumbItem.slot = 'items-before-expand-btn';\n breadcrumbItem.last = false;\n } else if (index > itemBeforeExpandBtnIndex && index < itemAfterExpandBtnIndex) {\n breadcrumbItem.slot = 'hidden-items';\n breadcrumbItem.last = false;\n } else {\n breadcrumbItem.slot = 'items-after-expand-btn';\n breadcrumbItem.last = index === breadcrumbItems.length - 1;\n }\n });\n }\n \n private assignSlotNamesForNonCollapsedViewMode(): void {\n const breadcrumbItems = this.getBreadcrumbItems();\n breadcrumbItems.forEach((breadcrumbItem, index) => {\n breadcrumbItem.slot = 'non-collapsed';\n breadcrumbItem.last = index === breadcrumbItems.length - 1;\n });\n }\n\n private handleSlotChange(): void {\n this.updateCollapsedViewMode();\n this.showHiddenItems = false;\n forceUpdate(this);\n }\n\n private handleOnExpandBtnClick(): void {\n // We leave the breadcrumb items in the hidden-items slot, without passing them to\n // the non-collapsed slot, so that we know which items to hide again later if needed.\n // For future implementations, the expand button could show or hide hidden items on click,\n // with a wcs-dropdown for example.\n this.showHiddenItems = true;\n // We wait for the first hidden item to be visible in the DOM again\n // to be able to focus it.\n requestAnimationFrame(() => this.setFocusToFirstHiddenItem());\n }\n\n /**\n * Avoid losing focus after clicking the expand button.\n * We need to give focus back to the first breadcrumb item link that was hidden before.\n */\n private setFocusToFirstHiddenItem(): void {\n const breadcrumbItems = this.getBreadcrumbItems();\n const firstHiddenItemIndex = this.itemsBeforeCollapse;\n const firstHiddenItem = breadcrumbItems[firstHiddenItemIndex];\n const firstHiddenItemSlot =\n firstHiddenItem.shadowRoot.querySelector('slot') as HTMLSlotElement;\n const breadcrumbItemLinkToFocus =\n firstHiddenItemSlot.assignedElements()[0] as HTMLAnchorElement;\n breadcrumbItemLinkToFocus?.focus();\n }\n\n private renderExpandAllButton() {\n const expandBtnIsLastItem = this.itemsAfterCollapse === 0;\n return (\n <div role=\"listitem\" class=\"item-not-slotted\">\n <wcs-button\n mode=\"clear\"\n shape=\"square\"\n size=\"s\"\n onClick={this.handleOnExpandBtnClick.bind(this)}\n ref={(el) => this.expandBtnEl = el}\n >\n <wcs-mat-icon icon=\"more_horiz\" />\n </wcs-button>\n {!expandBtnIsLastItem && (\n <span class=\"item-icon\" aria-hidden=\"true\">\n {ICONS_FONT_CHEVRON_UNICODE}\n </span>\n )}\n </div>\n );\n }\n\n render() {\n const showExpandBtn = this.shouldCollapseItems() && !this.showHiddenItems;\n return (\n <Host>\n <nav\n class={`wcs-breadcrumb-container${this.showHiddenItems ? ' show-hidden-items' : ''}`}\n aria-label={NAV_ARIA_LABEL_DEFAULT}\n {...this.inheritedAttributes}\n ref={(el) => this.navEl = el}\n >\n {/*\n * We use aria roles here instead of an <ol> tag\n * so that the list can be browsed correctly on Firefox with screen readers.\n * There seems to be an issue with Firefox and the Shadow DOM.\n */}\n <div role=\"list\">\n {/* Only the main slot shoud be used by consumers. */}\n <slot onSlotchange={this.handleSlotChange.bind(this)} />\n {/* Non collapsed view mode */}\n <slot name=\"non-collapsed\"></slot>\n {/* Collapsed view mode */}\n <slot name=\"items-before-expand-btn\" />\n <slot name=\"hidden-items\" />\n {showExpandBtn && this.renderExpandAllButton()}\n <slot name=\"items-after-expand-btn\" />\n </div>\n </nav>\n </Host>\n );\n }\n}\n"]}
@@ -0,0 +1,26 @@
1
+ import { setWcsContent } from "../../utils/playwright/test";
2
+ import { test } from "@stencil/playwright";
3
+ import { expect } from "@playwright/test";
4
+ test.describe('button', () => {
5
+ test('should trigger submit when in a form', async ({ page }) => {
6
+ // Given
7
+ await setWcsContent(page, `
8
+ <form>
9
+ <wcs-button class="wcs-primary" type="wcs-submit"></wcs-button>
10
+ </form>
11
+ `);
12
+ const form = page.locator('form');
13
+ await form.evaluate((el) => {
14
+ el.addEventListener('submit', (e) => {
15
+ e.preventDefault(); // avoid page reload
16
+ });
17
+ });
18
+ const submitEventSpy = await form.spyOnEvent('submit');
19
+ // When
20
+ await page.locator('wcs-button').click();
21
+ await page.waitForChanges();
22
+ // Then
23
+ expect(submitEventSpy).toHaveReceivedEventTimes(1);
24
+ });
25
+ });
26
+ //# sourceMappingURL=button.e2e.playwright.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"button.e2e.playwright.js","sourceRoot":"","sources":["../../../src/components/button/button.e2e.playwright.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,6BAA6B,CAAC;AAC5D,OAAO,EAAE,IAAI,EAAW,MAAM,qBAAqB,CAAC;AAEpD,OAAO,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAE1C,IAAI,CAAC,QAAQ,CAAC,QAAQ,EAAE,GAAG,EAAE;IACzB,IAAI,CAAC,sCAAsC,EAAE,KAAK,EAAE,EAAE,IAAI,EAAqB,EAAE,EAAE;QAC/E,QAAQ;QACR,MAAM,aAAa,CAAC,IAAI,EAAE;;;;SAIzB,CAAC,CAAC;QACH,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;QAClC,MAAM,IAAI,CAAC,QAAQ,CAAC,CAAC,EAAE,EAAE,EAAE;YACvB,EAAE,CAAC,gBAAgB,CAAC,QAAQ,EAAE,CAAC,CAAC,EAAE,EAAE;gBAChC,CAAC,CAAC,cAAc,EAAE,CAAC,CAAC,oBAAoB;YAC5C,CAAC,CAAC,CAAC;QACP,CAAC,CAAC,CAAC;QAEH,MAAM,cAAc,GAAG,MAAM,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;QAEvD,OAAO;QACP,MAAM,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC,KAAK,EAAE,CAAC;QACzC,MAAM,IAAI,CAAC,cAAc,EAAE,CAAC;QAE5B,OAAO;QACP,MAAM,CAAC,cAAc,CAAC,CAAC,wBAAwB,CAAC,CAAC,CAAC,CAAC;IACvD,CAAC,CAAC,CAAC;AACP,CAAC,CAAC,CAAC","sourcesContent":["import { setWcsContent } from '../../utils/playwright/test';\nimport { test, E2EPage } from \"@stencil/playwright\";\n\nimport { expect } from \"@playwright/test\";\n\ntest.describe('button', () => {\n test('should trigger submit when in a form', async ({ page }: { page: E2EPage }) => {\n // Given\n await setWcsContent(page, `\n <form>\n <wcs-button class=\"wcs-primary\" type=\"wcs-submit\"></wcs-button>\n </form>\n `);\n const form = page.locator('form');\n await form.evaluate((el) => {\n el.addEventListener('submit', (e) => {\n e.preventDefault(); // avoid page reload\n });\n });\n\n const submitEventSpy = await form.spyOnEvent('submit');\n\n // When\n await page.locator('wcs-button').click();\n await page.waitForChanges();\n\n // Then\n expect(submitEventSpy).toHaveReceivedEventTimes(1);\n });\n});\n"]}
@@ -331,7 +331,7 @@ export class Button {
331
331
  "signature": "(attr: AriaAttributeName, value: string | null | undefined) => Promise<void>",
332
332
  "parameters": [{
333
333
  "name": "attr",
334
- "type": "\"role\" | `aria-${string}`",
334
+ "type": "`aria-${string}` | \"role\"",
335
335
  "docs": ""
336
336
  }, {
337
337
  "name": "value",
@@ -0,0 +1,39 @@
1
+ import { setWcsContent } from "../../utils/playwright/test";
2
+ import { test } from "@stencil/playwright";
3
+ import { expect } from "@playwright/test";
4
+ test.describe('Checkbox component', () => {
5
+ test.describe('Events', () => {
6
+ test('should emit a wcsChange event when clicked on wcs-checkbox', async ({ page }) => {
7
+ // Given
8
+ await setWcsContent(page, `
9
+ <wcs-checkbox name="checkbox-id">
10
+ Checkbox
11
+ </wcs-checkbox>
12
+ `);
13
+ const checkbox = page.locator('wcs-checkbox');
14
+ const wcsChangeEventSpy = await checkbox.spyOnEvent('wcsChange');
15
+ // When
16
+ await checkbox.click();
17
+ await page.waitForChanges();
18
+ // Then
19
+ expect(wcsChangeEventSpy).toHaveReceivedEventTimes(1);
20
+ expect(wcsChangeEventSpy).toHaveReceivedEventDetail({ checked: true });
21
+ });
22
+ test('should emit a wcsChange event when space pressed on wcs-checkbox', async ({ page }) => {
23
+ // Given
24
+ await setWcsContent(page, `
25
+ <wcs-checkbox name="checkbox-id">
26
+ Checkbox
27
+ </wcs-checkbox>
28
+ `);
29
+ const checkbox = page.locator('wcs-checkbox');
30
+ const wcsChangeEventSpy = await checkbox.spyOnEvent('wcsChange');
31
+ // When
32
+ await checkbox.press('Space');
33
+ // Then
34
+ expect(wcsChangeEventSpy).toHaveReceivedEventTimes(1);
35
+ expect(wcsChangeEventSpy).toHaveReceivedEventDetail({ checked: true });
36
+ });
37
+ });
38
+ });
39
+ //# sourceMappingURL=checkbox.e2e.playwright.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"checkbox.e2e.playwright.js","sourceRoot":"","sources":["../../../src/components/checkbox/checkbox.e2e.playwright.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,6BAA6B,CAAC;AAC5D,OAAO,EAAE,IAAI,EAAW,MAAM,qBAAqB,CAAC;AAEpD,OAAO,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAE1C,IAAI,CAAC,QAAQ,CAAC,oBAAoB,EAAE,GAAG,EAAE;IACrC,IAAI,CAAC,QAAQ,CAAC,QAAQ,EAAE,GAAG,EAAE;QACzB,IAAI,CAAC,4DAA4D,EAAE,KAAK,EAAE,EAAE,IAAI,EAAqB,EAAE,EAAE;YACrG,QAAQ;YACR,MAAM,aAAa,CAAC,IAAI,EAAE;;;;aAIzB,CAAC,CAAC;YAEH,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC;YAC9C,MAAM,iBAAiB,GAAG,MAAM,QAAQ,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC;YAEjE,OAAO;YACP,MAAM,QAAQ,CAAC,KAAK,EAAE,CAAC;YACvB,MAAM,IAAI,CAAC,cAAc,EAAE,CAAC;YAE5B,OAAO;YACP,MAAM,CAAC,iBAAiB,CAAC,CAAC,wBAAwB,CAAC,CAAC,CAAC,CAAC;YACtD,MAAM,CAAC,iBAAiB,CAAC,CAAC,yBAAyB,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC;QAC3E,CAAC,CAAC,CAAC;QAEH,IAAI,CAAC,kEAAkE,EAAE,KAAK,EAAE,EAAE,IAAI,EAAqB,EAAE,EAAE;YAC3G,QAAQ;YACR,MAAM,aAAa,CAAC,IAAI,EAAE;;;;aAIzB,CAAC,CAAC;YAEH,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC;YAC9C,MAAM,iBAAiB,GAAG,MAAM,QAAQ,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC;YAEjE,OAAO;YACP,MAAM,QAAQ,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;YAE9B,OAAO;YACP,MAAM,CAAC,iBAAiB,CAAC,CAAC,wBAAwB,CAAC,CAAC,CAAC,CAAC;YACtD,MAAM,CAAC,iBAAiB,CAAC,CAAC,yBAAyB,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC;QAC3E,CAAC,CAAC,CAAC;IACP,CAAC,CAAC,CAAC;AACP,CAAC,CAAC,CAAC","sourcesContent":["import { setWcsContent } from '../../utils/playwright/test';\nimport { test, E2EPage } from \"@stencil/playwright\";\n\nimport { expect } from \"@playwright/test\";\n\ntest.describe('Checkbox component', () => {\n test.describe('Events', () => {\n test('should emit a wcsChange event when clicked on wcs-checkbox', async ({ page }: { page: E2EPage }) => {\n // Given\n await setWcsContent(page, `\n <wcs-checkbox name=\"checkbox-id\">\n Checkbox\n </wcs-checkbox>\n `);\n\n const checkbox = page.locator('wcs-checkbox');\n const wcsChangeEventSpy = await checkbox.spyOnEvent('wcsChange');\n\n // When\n await checkbox.click();\n await page.waitForChanges();\n\n // Then\n expect(wcsChangeEventSpy).toHaveReceivedEventTimes(1);\n expect(wcsChangeEventSpy).toHaveReceivedEventDetail({ checked: true });\n });\n\n test('should emit a wcsChange event when space pressed on wcs-checkbox', async ({ page }: { page: E2EPage }) => {\n // Given\n await setWcsContent(page, `\n <wcs-checkbox name=\"checkbox-id\">\n Checkbox\n </wcs-checkbox>\n `);\n\n const checkbox = page.locator('wcs-checkbox');\n const wcsChangeEventSpy = await checkbox.spyOnEvent('wcsChange');\n\n // When\n await checkbox.press('Space');\n\n // Then\n expect(wcsChangeEventSpy).toHaveReceivedEventTimes(1);\n expect(wcsChangeEventSpy).toHaveReceivedEventDetail({ checked: true });\n });\n });\n});\n"]}
@@ -322,7 +322,7 @@ export class Checkbox {
322
322
  "signature": "(attr: AriaAttributeName, value: string | null | undefined) => Promise<void>",
323
323
  "parameters": [{
324
324
  "name": "attr",
325
- "type": "\"role\" | `aria-${string}`",
325
+ "type": "`aria-${string}` | \"role\"",
326
326
  "docs": ""
327
327
  }, {
328
328
  "name": "value",
@@ -0,0 +1,190 @@
1
+ import { setWcsContent } from "../../utils/playwright/test";
2
+ import { test } from "@stencil/playwright";
3
+ import { expect } from "@playwright/test";
4
+ test.describe('Chip component', () => {
5
+ test.describe('Events', () => {
6
+ test('should emit wcsChipSelectChange with selected=true on click (selectable by default)', async ({ page }) => {
7
+ // Given
8
+ await setWcsContent(page, `
9
+ <wcs-chip value="chip-id" label="Chip"></wcs-chip>
10
+ `);
11
+ const chip = page.locator('wcs-chip');
12
+ const wcsChipSelectChangeEventSpy = await chip.spyOnEvent('wcsChipSelectChange');
13
+ // When
14
+ await chip.click();
15
+ await page.waitForChanges();
16
+ // Then
17
+ expect(wcsChipSelectChangeEventSpy).toHaveReceivedEventDetail({ value: 'chip-id', selected: true });
18
+ });
19
+ test('should toggle selection and emit on Space/Enter (selectable)', async ({ page }) => {
20
+ // Given
21
+ await setWcsContent(page, `
22
+ <wcs-chip value="chip-id" label="Chip"></wcs-chip>
23
+ `);
24
+ const chip = page.locator('wcs-chip');
25
+ const wcsChipSelectChangeEventSpy = await chip.spyOnEvent('wcsChipSelectChange');
26
+ // When - Space selects
27
+ await chip.focus();
28
+ await chip.press('Space');
29
+ // When - Enter toggles back
30
+ await chip.press('Enter');
31
+ await page.waitForChanges();
32
+ // Then
33
+ expect(wcsChipSelectChangeEventSpy).toHaveReceivedEventTimes(2);
34
+ expect(wcsChipSelectChangeEventSpy).toHaveNthReceivedEventDetail(1, { value: 'chip-id', selected: false });
35
+ });
36
+ test('should emit wcsChipDismiss when clicking dismiss button (dismissible)', async ({ page }) => {
37
+ // Given
38
+ await setWcsContent(page, `
39
+ <wcs-chip mode="dismissible" value="chip-id" label="Chip"></wcs-chip>
40
+ `);
41
+ const chip = page.locator('wcs-chip');
42
+ const wcsChipDismissEventSpy = await chip.spyOnEvent('wcsChipDismiss');
43
+ const dismissBtn = page.locator('wcs-chip button');
44
+ // When
45
+ await dismissBtn.click();
46
+ await page.waitForChanges();
47
+ // Then
48
+ expect(wcsChipDismissEventSpy).toHaveReceivedEventDetail({ value: 'chip-id' });
49
+ // open prop should be false -> attribute removed
50
+ await expect(chip).not.toHaveAttribute('open');
51
+ });
52
+ });
53
+ test.describe('Keyboard', () => {
54
+ test('Delete/Backspace on dismiss button dismisses the chip', async ({ page }) => {
55
+ // Given
56
+ await setWcsContent(page, `
57
+ <wcs-chip mode="dismissible" value="chip-id" label="Chip"></wcs-chip>
58
+ `);
59
+ const chip = page.locator('wcs-chip');
60
+ const wcsChipDismissEventSpy = await chip.spyOnEvent('wcsChipDismiss');
61
+ const dismissBtn = page.locator('wcs-chip button');
62
+ // When
63
+ await dismissBtn.focus();
64
+ await page.keyboard.press('Delete');
65
+ await page.waitForChanges();
66
+ // Then
67
+ await expect(wcsChipDismissEventSpy).toHaveReceivedEventTimes(1);
68
+ await expect(chip).not.toHaveAttribute('open');
69
+ });
70
+ });
71
+ test.describe('Accessibility', () => {
72
+ test('exposes proper ARIA for selectable: role=checkbox, aria-checked toggles, tabindex respects disabled', async ({ page }) => {
73
+ // Given
74
+ await setWcsContent(page, `
75
+ <wcs-chip value="chip-id" label="Chip"></wcs-chip>
76
+ `);
77
+ const chip = page.locator('wcs-chip');
78
+ // Then default
79
+ await expect(chip).toHaveAttribute('role', 'checkbox');
80
+ await expect(chip).toHaveAttribute('aria-checked', 'false');
81
+ await expect(chip).toHaveAttribute('tabindex', '0');
82
+ // When
83
+ await chip.click();
84
+ await page.waitForChanges();
85
+ // Then toggled
86
+ await expect(chip).toHaveAttribute('aria-checked', 'true');
87
+ });
88
+ test('exposes proper ARIA/disabled for dismissible: button has label and respects disabled', async ({ page }) => {
89
+ // Given
90
+ await setWcsContent(page, `
91
+ <wcs-chip mode="dismissible" value="chip-id" label="Chip"></wcs-chip>
92
+ `);
93
+ const chip = page.locator('wcs-chip');
94
+ const btn = page.locator('wcs-chip button');
95
+ // Then
96
+ await expect(btn).toHaveAttribute('aria-label', 'Supprimer Chip');
97
+ // When disabled
98
+ await chip.evaluate((el) => el.disabled = true);
99
+ await page.waitForChanges();
100
+ // Then
101
+ await expect(chip).toHaveAttribute('aria-disabled', 'true');
102
+ await expect(btn).toBeDisabled();
103
+ });
104
+ });
105
+ test.describe('Disabled state', () => {
106
+ test('does not emit select event when disabled (click and Space)', async ({ page }) => {
107
+ // Given
108
+ await setWcsContent(page, `
109
+ <wcs-chip disabled value="chip-id" label="Chip"></wcs-chip>
110
+ `);
111
+ const chip = page.locator('wcs-chip');
112
+ const wcsChipSelectChangeEventSpy = await chip.spyOnEvent('wcsChipSelectChange');
113
+ // When
114
+ await chip.click({ force: true });
115
+ await chip.press('Space');
116
+ await page.waitForChanges();
117
+ // Then
118
+ expect(wcsChipSelectChangeEventSpy).toHaveReceivedEventTimes(0);
119
+ await expect(chip).toHaveAttribute('tabindex', '-1');
120
+ await expect(chip).toHaveAttribute('aria-checked', 'false');
121
+ });
122
+ test('does not emit dismiss event when disabled', async ({ page }) => {
123
+ // Given
124
+ await setWcsContent(page, `
125
+ <wcs-chip disabled mode="dismissible" value="chip-id" label="Chip"></wcs-chip>
126
+ `);
127
+ const chip = page.locator('wcs-chip');
128
+ const wcsChipDismissEventSpy = await chip.spyOnEvent('wcsChipDismiss');
129
+ const btn = page.locator('wcs-chip button');
130
+ // When
131
+ await btn.click({ force: true });
132
+ await page.waitForChanges();
133
+ // Then
134
+ expect(wcsChipDismissEventSpy).toHaveReceivedEventTimes(0);
135
+ await expect(chip).toHaveAttribute('open', '');
136
+ });
137
+ });
138
+ test.describe('Focus management', () => {
139
+ test('after dismiss, focus moves to next actionable chip (selectable host)', async ({ page }) => {
140
+ // Given
141
+ await setWcsContent(page, `
142
+ <div>
143
+ <wcs-chip id="c1" mode="dismissible" value="c1" label="One"></wcs-chip>
144
+ <wcs-chip id="c2" value="c2" label="Two"></wcs-chip>
145
+ </div>
146
+ `);
147
+ const btn = page.locator('#c1 button');
148
+ // When
149
+ await btn.click();
150
+ await page.waitForChanges();
151
+ // Then
152
+ const c2 = page.locator('#c2');
153
+ await expect(c2).toBeFocused();
154
+ });
155
+ test('after dismiss, focus moves to next actionable chip (dismissable host)', async ({ page }) => {
156
+ // Given
157
+ await setWcsContent(page, `
158
+ <div>
159
+ <wcs-chip id="c1" mode="dismissible" value="c1" label="One"></wcs-chip>
160
+ <wcs-chip id="c2" mode="dismissible" value="c2" label="Two"></wcs-chip>
161
+ </div>
162
+ `);
163
+ const c1 = page.locator('#c1 button');
164
+ // When
165
+ await c1.click();
166
+ await page.waitForChanges();
167
+ // Then
168
+ const c2 = page.locator('#c2');
169
+ await expect(c2).toBeFocused();
170
+ });
171
+ test('skips disabled chips when moving focus after dismiss', async ({ page }) => {
172
+ // Given
173
+ await setWcsContent(page, `
174
+ <div>
175
+ <wcs-chip id="c1" mode="dismissible" value="c1" label="One"></wcs-chip>
176
+ <wcs-chip id="c2" disabled value="c2" label="Two"></wcs-chip>
177
+ <wcs-chip id="c3" value="c3" label="Three"></wcs-chip>
178
+ </div>
179
+ `);
180
+ const btn = page.locator('#c1 button');
181
+ // When
182
+ await btn.click();
183
+ await page.waitForChanges();
184
+ // Then
185
+ const c3 = page.locator('#c3');
186
+ await expect(c3).toBeFocused();
187
+ });
188
+ });
189
+ });
190
+ //# sourceMappingURL=chip.e2e.playwright.js.map