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,205 @@
1
+ import { setWcsContent } from "../../utils/playwright/test";
2
+ import { test } from "@stencil/playwright";
3
+ import { expect } from "@playwright/test";
4
+ test.describe('Tabs component', () => {
5
+ test('Display only first tab if none are preselected', async ({ page }) => {
6
+ // Given
7
+ await setWcsContent(page, `
8
+ <wcs-tabs>
9
+ <wcs-tab header="1">One</wcs-tab>
10
+ <wcs-tab header="2">Two</wcs-tab>
11
+ </wcs-tabs>
12
+ `);
13
+ const tab1 = page.locator('wcs-tab').nth(0);
14
+ const tab2 = page.locator('wcs-tab').nth(1);
15
+ // Then
16
+ await expect(tab1).toBeVisible();
17
+ await expect(tab2).not.toBeVisible();
18
+ });
19
+ test('Display only second tab if users click on its header', async ({ page }) => {
20
+ // Given
21
+ await setWcsContent(page, `
22
+ <wcs-tabs>
23
+ <wcs-tab header="1">One</wcs-tab>
24
+ <wcs-tab header="2">Two</wcs-tab>
25
+ </wcs-tabs>
26
+ `);
27
+ const tab1 = page.locator('wcs-tab').nth(0);
28
+ const tab2 = page.locator('wcs-tab').nth(1);
29
+ const tabh2 = page.locator('wcs-tabs .wcs-tab-header').nth(1);
30
+ // When
31
+ await tabh2.click();
32
+ // Then
33
+ await expect(tab1).not.toBeVisible();
34
+ await expect(tab2).toBeVisible();
35
+ });
36
+ test('Accept and render new tabs after creation', async ({ page }) => {
37
+ // Given
38
+ await setWcsContent(page, `
39
+ <wcs-tabs>
40
+ <wcs-tab header="1">One</wcs-tab>
41
+ <wcs-tab header="2">Two</wcs-tab>
42
+ </wcs-tabs>
43
+ `);
44
+ // When
45
+ await page.evaluate(async () => {
46
+ const tab = document.createElement('wcs-tab');
47
+ const text = document.createTextNode('Three');
48
+ const tabsEl = document.querySelector('wcs-tabs');
49
+ tab.setAttribute('header', '3');
50
+ tab.appendChild(text);
51
+ tabsEl.appendChild(tab);
52
+ });
53
+ const h3 = page.locator('wcs-tabs .wcs-tab-header').nth(2);
54
+ const t3 = page.locator('wcs-tab').nth(2);
55
+ // Expect
56
+ await expect(h3).toBeVisible();
57
+ await expect(t3).toHaveText('Three');
58
+ });
59
+ test.describe('SelectedKey prop', () => {
60
+ test('should accept a default selected key', async ({ page }) => {
61
+ await setWcsContent(page, `
62
+ <wcs-tabs selected-key="custom-2">
63
+ <wcs-tab item-key="custom-1">One</wcs-tab>
64
+ <wcs-tab item-key="custom-2">Two</wcs-tab>
65
+ </wcs-tabs>
66
+ `);
67
+ const tab1 = page.locator('wcs-tab').nth(0);
68
+ const tab2 = page.locator('wcs-tab').nth(1);
69
+ await expect(tab1).not.toBeVisible();
70
+ await expect(tab2).toBeVisible();
71
+ });
72
+ test('Allows to change selected tab via prop after creation', async ({ page }) => {
73
+ // Given
74
+ await setWcsContent(page, `
75
+ <wcs-tabs selected-key="a">
76
+ <wcs-tab item-key="a">One</wcs-tab>
77
+ <wcs-tab item-key="b">Two</wcs-tab>
78
+ </wcs-tabs>
79
+ `);
80
+ const tabs = page.locator('wcs-tabs');
81
+ const tab1 = page.locator('wcs-tab').nth(0);
82
+ const tab2 = page.locator('wcs-tab').nth(1);
83
+ // When
84
+ await tabs.evaluate((el) => el.selectedKey = 'b');
85
+ // Then
86
+ await expect(tab1).not.toBeVisible();
87
+ await expect(tab2).toBeVisible();
88
+ });
89
+ });
90
+ test.describe('SelectedIndex prop', () => {
91
+ test('Accept a default selected tab', async ({ page }) => {
92
+ // Given
93
+ await setWcsContent(page, `
94
+ <wcs-tabs selected-index="1">
95
+ <wcs-tab header="1">One</wcs-tab>
96
+ <wcs-tab header="2">Two</wcs-tab>
97
+ </wcs-tabs>
98
+ `);
99
+ const tab1 = page.locator('wcs-tab').nth(0);
100
+ const tab2 = page.locator('wcs-tab').nth(1);
101
+ // Then
102
+ await expect(tab1).not.toBeVisible();
103
+ await expect(tab2).toBeVisible();
104
+ });
105
+ test('Allows to change selected tab via prop after creation', async ({ page }) => {
106
+ // Given
107
+ await setWcsContent(page, `
108
+ <wcs-tabs selected-index="1">
109
+ <wcs-tab header="1">One</wcs-tab>
110
+ <wcs-tab header="2">Two</wcs-tab>
111
+ </wcs-tabs>
112
+ `);
113
+ const tabs = page.locator('wcs-tabs');
114
+ const tab1 = page.locator('wcs-tab').nth(0);
115
+ const tab2 = page.locator('wcs-tab').nth(1);
116
+ // When
117
+ await tabs.evaluate((el) => el.selectedIndex = 0);
118
+ // Then
119
+ await expect(tab1).toBeVisible();
120
+ await expect(tab2).not.toBeVisible();
121
+ });
122
+ });
123
+ test.describe('Tab change event', () => {
124
+ test('Fires when user clicks on a header', async ({ page }) => {
125
+ // Given
126
+ await setWcsContent(page, `
127
+ <wcs-tabs>
128
+ <wcs-tab header="1">One</wcs-tab>
129
+ <wcs-tab header="2">Two</wcs-tab>
130
+ </wcs-tabs>
131
+ `);
132
+ const tabs = page.locator('wcs-tabs');
133
+ const tabChangeSpy = await tabs.spyOnEvent('tabChange');
134
+ const tabh2 = page.locator('wcs-tabs .wcs-tab-header').nth(1);
135
+ // When
136
+ await tabh2.click();
137
+ await page.waitForChanges();
138
+ // Then
139
+ expect(tabChangeSpy).toHaveReceivedEventTimes(1);
140
+ expect(tabChangeSpy).toHaveReceivedEventDetail({ tabName: '2', tabIndex: 1, selectedKey: undefined });
141
+ });
142
+ });
143
+ test.describe('Keyboard navigation', () => {
144
+ test('Change selected tab with enter', async ({ page }) => {
145
+ // Given
146
+ await setWcsContent(page, `
147
+ <wcs-tabs>
148
+ <wcs-tab header="1">One</wcs-tab>
149
+ <wcs-tab header="2">Two</wcs-tab>
150
+ </wcs-tabs>
151
+ `);
152
+ const tabs = page.locator('wcs-tabs');
153
+ const tabChangeEnterSpy = await tabs.spyOnEvent('tabChange');
154
+ const h2 = page.locator('wcs-tabs .wcs-tab-header').nth(1);
155
+ // When
156
+ await h2.focus();
157
+ await page.keyboard.press('Enter');
158
+ await page.waitForChanges();
159
+ // Then
160
+ expect(tabChangeEnterSpy).toHaveReceivedEventTimes(1);
161
+ expect(tabChangeEnterSpy).toHaveReceivedEventDetail({ tabName: '2', tabIndex: 1, selectedKey: undefined });
162
+ });
163
+ test('Change selected tab with space', async ({ page }) => {
164
+ // Given
165
+ await setWcsContent(page, `
166
+ <wcs-tabs>
167
+ <wcs-tab header="1">One</wcs-tab>
168
+ <wcs-tab header="2">Two</wcs-tab>
169
+ </wcs-tabs>
170
+ `);
171
+ const tabs = page.locator('wcs-tabs');
172
+ const tabChangeSpaceSpy = await tabs.spyOnEvent('tabChange');
173
+ const h2 = page.locator('wcs-tabs .wcs-tab-header').nth(1);
174
+ // When
175
+ await h2.focus();
176
+ await page.keyboard.press('Space');
177
+ await page.waitForChanges();
178
+ // Then
179
+ expect(tabChangeSpaceSpy).toHaveReceivedEventTimes(1);
180
+ expect(tabChangeSpaceSpy).toHaveReceivedEventDetail({ tabName: '2', tabIndex: 1, selectedKey: undefined });
181
+ });
182
+ test('Move focus with keyboard arrows', async ({ page }) => {
183
+ // Given
184
+ await setWcsContent(page, `
185
+ <wcs-tabs>
186
+ <wcs-tab header="1">One</wcs-tab>
187
+ <wcs-tab header="2">Two</wcs-tab>
188
+ </wcs-tabs>
189
+ `);
190
+ const h1 = page.locator('wcs-tabs .wcs-tab-header').nth(0);
191
+ // When
192
+ await h1.focus();
193
+ await h1.press('ArrowRight');
194
+ // Then - verify second header is focused by checking it matches activeElement in shadow root
195
+ const isFocused = await page.evaluate(() => {
196
+ var _a, _b;
197
+ const tabs = document.querySelector('wcs-tabs');
198
+ const secondHeader = (_a = tabs === null || tabs === void 0 ? void 0 : tabs.shadowRoot) === null || _a === void 0 ? void 0 : _a.querySelectorAll('.wcs-tab-header')[1];
199
+ return ((_b = tabs === null || tabs === void 0 ? void 0 : tabs.shadowRoot) === null || _b === void 0 ? void 0 : _b.activeElement) === secondHeader;
200
+ });
201
+ expect(isFocused).toBe(true);
202
+ });
203
+ });
204
+ });
205
+ //# sourceMappingURL=tabs.e2e.playwright.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tabs.e2e.playwright.js","sourceRoot":"","sources":["../../../src/components/tabs/tabs.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('Tabs component', () => {\n test('Display only first tab if none are preselected', async ({ page }: { page: E2EPage }) => {\n // Given\n await setWcsContent(page, `\n <wcs-tabs>\n <wcs-tab header=\"1\">One</wcs-tab>\n <wcs-tab header=\"2\">Two</wcs-tab>\n </wcs-tabs>\n `);\n\n const tab1 = page.locator('wcs-tab').nth(0);\n const tab2 = page.locator('wcs-tab').nth(1);\n\n // Then\n await expect(tab1).toBeVisible();\n await expect(tab2).not.toBeVisible();\n });\n\n test('Display only second tab if users click on its header', async ({ page }: { page: E2EPage }) => {\n // Given\n await setWcsContent(page, `\n <wcs-tabs>\n <wcs-tab header=\"1\">One</wcs-tab>\n <wcs-tab header=\"2\">Two</wcs-tab>\n </wcs-tabs>\n `);\n\n const tab1 = page.locator('wcs-tab').nth(0);\n const tab2 = page.locator('wcs-tab').nth(1);\n const tabh2 = page.locator('wcs-tabs .wcs-tab-header').nth(1);\n\n // When\n await tabh2.click();\n\n // Then\n await expect(tab1).not.toBeVisible();\n await expect(tab2).toBeVisible();\n });\n\n test('Accept and render new tabs after creation', async ({ page }: { page: E2EPage }) => {\n // Given\n await setWcsContent(page, `\n <wcs-tabs>\n <wcs-tab header=\"1\">One</wcs-tab>\n <wcs-tab header=\"2\">Two</wcs-tab>\n </wcs-tabs>\n `);\n\n // When\n await page.evaluate(async () => {\n const tab = document.createElement('wcs-tab');\n const text = document.createTextNode('Three');\n const tabsEl = document.querySelector('wcs-tabs');\n tab.setAttribute('header', '3');\n tab.appendChild(text);\n tabsEl!.appendChild(tab);\n });\n\n const h3 = page.locator('wcs-tabs .wcs-tab-header').nth(2);\n const t3 = page.locator('wcs-tab').nth(2);\n\n // Expect\n await expect(h3).toBeVisible();\n await expect(t3).toHaveText('Three');\n });\n\n test.describe('SelectedKey prop', () => {\n test('should accept a default selected key', async ({ page }: { page: E2EPage }) => {\n await setWcsContent(page, `\n <wcs-tabs selected-key=\"custom-2\">\n <wcs-tab item-key=\"custom-1\">One</wcs-tab>\n <wcs-tab item-key=\"custom-2\">Two</wcs-tab>\n </wcs-tabs>\n `);\n\n const tab1 = page.locator('wcs-tab').nth(0);\n const tab2 = page.locator('wcs-tab').nth(1);\n\n await expect(tab1).not.toBeVisible();\n await expect(tab2).toBeVisible();\n });\n\n test('Allows to change selected tab via prop after creation', async ({ page }: { page: E2EPage }) => {\n // Given\n await setWcsContent(page, `\n <wcs-tabs selected-key=\"a\">\n <wcs-tab item-key=\"a\">One</wcs-tab>\n <wcs-tab item-key=\"b\">Two</wcs-tab>\n </wcs-tabs>\n `);\n\n const tabs = page.locator('wcs-tabs');\n const tab1 = page.locator('wcs-tab').nth(0);\n const tab2 = page.locator('wcs-tab').nth(1);\n\n // When\n await tabs.evaluate((el: any) => el.selectedKey = 'b');\n\n // Then\n await expect(tab1).not.toBeVisible();\n await expect(tab2).toBeVisible();\n });\n });\n\n test.describe('SelectedIndex prop', () => {\n test('Accept a default selected tab', async ({ page }: { page: E2EPage }) => {\n // Given\n await setWcsContent(page, `\n <wcs-tabs selected-index=\"1\">\n <wcs-tab header=\"1\">One</wcs-tab>\n <wcs-tab header=\"2\">Two</wcs-tab>\n </wcs-tabs>\n `);\n\n const tab1 = page.locator('wcs-tab').nth(0);\n const tab2 = page.locator('wcs-tab').nth(1);\n\n // Then\n await expect(tab1).not.toBeVisible();\n await expect(tab2).toBeVisible();\n });\n\n test('Allows to change selected tab via prop after creation', async ({ page }: { page: E2EPage }) => {\n // Given\n await setWcsContent(page, `\n <wcs-tabs selected-index=\"1\">\n <wcs-tab header=\"1\">One</wcs-tab>\n <wcs-tab header=\"2\">Two</wcs-tab>\n </wcs-tabs>\n `);\n\n const tabs = page.locator('wcs-tabs');\n const tab1 = page.locator('wcs-tab').nth(0);\n const tab2 = page.locator('wcs-tab').nth(1);\n\n // When\n await tabs.evaluate((el: any) => el.selectedIndex = 0);\n\n // Then\n await expect(tab1).toBeVisible();\n await expect(tab2).not.toBeVisible();\n });\n });\n\n test.describe('Tab change event', () => {\n test('Fires when user clicks on a header', async ({ page }: { page: E2EPage }) => {\n // Given\n await setWcsContent(page, `\n <wcs-tabs>\n <wcs-tab header=\"1\">One</wcs-tab>\n <wcs-tab header=\"2\">Two</wcs-tab>\n </wcs-tabs>\n `);\n\n const tabs = page.locator('wcs-tabs');\n const tabChangeSpy = await tabs.spyOnEvent('tabChange');\n\n const tabh2 = page.locator('wcs-tabs .wcs-tab-header').nth(1);\n\n // When\n await tabh2.click();\n await page.waitForChanges();\n\n // Then\n expect(tabChangeSpy).toHaveReceivedEventTimes(1);\n expect(tabChangeSpy).toHaveReceivedEventDetail({ tabName: '2', tabIndex: 1, selectedKey: undefined });\n });\n });\n\n test.describe('Keyboard navigation', () => {\n test('Change selected tab with enter', async ({ page }: { page: E2EPage }) => {\n // Given\n await setWcsContent(page, `\n <wcs-tabs>\n <wcs-tab header=\"1\">One</wcs-tab>\n <wcs-tab header=\"2\">Two</wcs-tab>\n </wcs-tabs>\n `);\n\n const tabs = page.locator('wcs-tabs');\n const tabChangeEnterSpy = await tabs.spyOnEvent('tabChange');\n\n const h2 = page.locator('wcs-tabs .wcs-tab-header').nth(1);\n\n // When\n await h2.focus();\n await page.keyboard.press('Enter');\n await page.waitForChanges();\n\n // Then\n expect(tabChangeEnterSpy).toHaveReceivedEventTimes(1);\n expect(tabChangeEnterSpy).toHaveReceivedEventDetail({ tabName: '2', tabIndex: 1, selectedKey: undefined });\n });\n\n test('Change selected tab with space', async ({ page }: { page: E2EPage }) => {\n // Given\n await setWcsContent(page, `\n <wcs-tabs>\n <wcs-tab header=\"1\">One</wcs-tab>\n <wcs-tab header=\"2\">Two</wcs-tab>\n </wcs-tabs>\n `);\n\n const tabs = page.locator('wcs-tabs');\n const tabChangeSpaceSpy = await tabs.spyOnEvent('tabChange');\n\n const h2 = page.locator('wcs-tabs .wcs-tab-header').nth(1);\n\n // When\n await h2.focus();\n await page.keyboard.press('Space');\n await page.waitForChanges();\n\n // Then\n expect(tabChangeSpaceSpy).toHaveReceivedEventTimes(1);\n expect(tabChangeSpaceSpy).toHaveReceivedEventDetail({ tabName: '2', tabIndex: 1, selectedKey: undefined });\n });\n\n test('Move focus with keyboard arrows', async ({ page }: { page: E2EPage }) => {\n // Given\n await setWcsContent(page, `\n <wcs-tabs>\n <wcs-tab header=\"1\">One</wcs-tab>\n <wcs-tab header=\"2\">Two</wcs-tab>\n </wcs-tabs>\n `);\n\n const h1 = page.locator('wcs-tabs .wcs-tab-header').nth(0);\n\n // When\n await h1.focus();\n await h1.press('ArrowRight');\n\n // Then - verify second header is focused by checking it matches activeElement in shadow root\n const isFocused = await page.evaluate(() => {\n const tabs = document.querySelector('wcs-tabs');\n const secondHeader = tabs?.shadowRoot?.querySelectorAll('.wcs-tab-header')[1];\n return tabs?.shadowRoot?.activeElement === secondHeader;\n });\n expect(isFocused).toBe(true);\n });\n });\n});\n"]}
@@ -529,7 +529,7 @@ export class Tabs {
529
529
  "signature": "(attr: AriaAttributeName, value: string | null | undefined) => Promise<void>",
530
530
  "parameters": [{
531
531
  "name": "attr",
532
- "type": "\"role\" | `aria-${string}`",
532
+ "type": "`aria-${string}` | \"role\"",
533
533
  "docs": ""
534
534
  }, {
535
535
  "name": "value",
@@ -0,0 +1,133 @@
1
+ import { setWcsContent } from "../../utils/playwright/test";
2
+ import { test } from "@stencil/playwright";
3
+ import { expect } from "@playwright/test";
4
+ test.describe('Textarea component', () => {
5
+ test('Should fire wcsInput event once when user typing one char', async ({ page }) => {
6
+ // Given
7
+ await setWcsContent(page, `
8
+ <wcs-textarea name="wcs-textarea-1" />
9
+ `);
10
+ const inputSpy = await page.spyOnEvent('wcsInput');
11
+ const textarea = page.locator('wcs-textarea');
12
+ // When
13
+ await textarea.click();
14
+ await textarea.press('B');
15
+ await page.waitForChanges();
16
+ // Then
17
+ expect(inputSpy).toHaveReceivedEventTimes(1);
18
+ });
19
+ test('Should fire wcsInput event multiple times when user typing multiple chars', async ({ page }) => {
20
+ // Given
21
+ await setWcsContent(page, `
22
+ <wcs-textarea name="wcs-textarea-1" />
23
+ `);
24
+ const inputSpy = await page.spyOnEvent('wcsInput');
25
+ const textarea = page.locator('wcs-textarea');
26
+ // When
27
+ await textarea.click();
28
+ await textarea.press('B');
29
+ await page.waitForChanges();
30
+ await textarea.press('o');
31
+ await page.waitForChanges();
32
+ await textarea.press('n');
33
+ await page.waitForChanges();
34
+ await textarea.press('j');
35
+ await page.waitForChanges();
36
+ await textarea.press('o');
37
+ await page.waitForChanges();
38
+ await textarea.press('u');
39
+ await page.waitForChanges();
40
+ await textarea.press('r');
41
+ await page.waitForChanges();
42
+ // Then
43
+ expect(inputSpy).toHaveReceivedEventTimes(7);
44
+ });
45
+ test('Should fire wcsChange event when user commit change with blur (tab)', async ({ page }) => {
46
+ // Given
47
+ await setWcsContent(page, `
48
+ <wcs-textarea name="wcs-textarea-1"></wcs-textarea>
49
+ <button>Focus</button>
50
+ `);
51
+ const changeSpy = await page.spyOnEvent('wcsChange');
52
+ const textarea = page.locator('wcs-textarea');
53
+ const button = page.locator('button');
54
+ // When
55
+ await textarea.click();
56
+ await textarea.pressSequentially('Blur');
57
+ await button.focus(); // blur native textArea
58
+ await page.waitForChanges();
59
+ // Then - wait for the event to be received
60
+ expect(changeSpy).toHaveReceivedEventTimes(1);
61
+ expect(changeSpy).toHaveReceivedEventDetail({ value: 'Blur' });
62
+ });
63
+ test('Should fire wcsChange event when user commit change with blur (click)', async ({ page }) => {
64
+ // Given
65
+ await setWcsContent(page, `
66
+ <wcs-textarea name="wcs-textarea-1"></wcs-textarea>
67
+ <button>Focus</button>
68
+ `);
69
+ const changeSpy = await page.spyOnEvent('wcsChange');
70
+ const textarea = page.locator('wcs-textarea');
71
+ const button = page.locator('button');
72
+ // When
73
+ await textarea.click();
74
+ await textarea.press('B');
75
+ await textarea.press('l');
76
+ await textarea.press('u');
77
+ await textarea.press('r');
78
+ await button.focus();
79
+ await page.waitForChanges();
80
+ // Then
81
+ expect(changeSpy).toHaveReceivedEventTimes(1);
82
+ expect(changeSpy).toHaveReceivedEventDetail({ value: 'Blur' });
83
+ });
84
+ test('Should not fire wcsChange event when value is programmatically set', async ({ page }) => {
85
+ // Given
86
+ await setWcsContent(page, `
87
+ <wcs-textarea name="wcs-textarea-1" />
88
+ `);
89
+ const changeSpy = await page.spyOnEvent('wcsChange');
90
+ const textarea = page.locator('wcs-textarea');
91
+ // When
92
+ await textarea.evaluate((el) => el.value = 'Programmatically set value');
93
+ await page.waitForChanges();
94
+ // Then
95
+ expect(changeSpy).toHaveReceivedEventTimes(0);
96
+ });
97
+ test('Should not fire wcsInput event when value is programmatically set', async ({ page }) => {
98
+ // Given
99
+ await setWcsContent(page, `
100
+ <wcs-textarea name="wcs-textarea-1" />
101
+ `);
102
+ const inputSpy = await page.spyOnEvent('wcsInput');
103
+ const textarea = page.locator('wcs-textarea');
104
+ // When
105
+ await textarea.evaluate((el) => el.value = 'Programmatically set value');
106
+ await page.waitForChanges();
107
+ // Then
108
+ expect(inputSpy).toHaveReceivedEventTimes(0);
109
+ });
110
+ test('Should have a default value when value attribute is set', async ({ page }) => {
111
+ // Given
112
+ await setWcsContent(page, `
113
+ <wcs-textarea name="wcs-textarea-1" value="Default value" />
114
+ `);
115
+ const textarea = page.locator('wcs-textarea');
116
+ // Then
117
+ await expect(textarea).toHaveJSProperty('value', 'Default value');
118
+ await expect(page.locator('wcs-textarea textarea')).toHaveJSProperty('value', 'Default value');
119
+ });
120
+ test('Should have a default value when value property is set', async ({ page }) => {
121
+ // Given
122
+ await setWcsContent(page, `
123
+ <wcs-textarea name="wcs-textarea-1" />
124
+ `);
125
+ const textarea = page.locator('wcs-textarea');
126
+ // When
127
+ await textarea.evaluate((el) => el.value = 'Default value');
128
+ // Then
129
+ await expect(textarea).toHaveJSProperty('value', 'Default value');
130
+ await expect(page.locator('wcs-textarea textarea')).toHaveJSProperty('value', 'Default value');
131
+ });
132
+ });
133
+ //# sourceMappingURL=textarea.e2e.playwright.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"textarea.e2e.playwright.js","sourceRoot":"","sources":["../../../src/components/textarea/textarea.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('Textarea component', () => {\n test('Should fire wcsInput event once when user typing one char', async ({ page }: { page: E2EPage }) => {\n // Given\n await setWcsContent(page, `\n <wcs-textarea name=\"wcs-textarea-1\" />\n `);\n\n const inputSpy = await page.spyOnEvent('wcsInput');\n\n const textarea = page.locator('wcs-textarea');\n\n // When\n await textarea.click();\n await textarea.press('B');\n await page.waitForChanges();\n\n // Then\n expect(inputSpy).toHaveReceivedEventTimes(1);\n });\n\n test('Should fire wcsInput event multiple times when user typing multiple chars', async ({ page }: { page: E2EPage }) => {\n // Given\n await setWcsContent(page, `\n <wcs-textarea name=\"wcs-textarea-1\" />\n `);\n\n const inputSpy = await page.spyOnEvent('wcsInput');\n\n const textarea = page.locator('wcs-textarea');\n\n // When\n await textarea.click();\n await textarea.press('B');\n await page.waitForChanges();\n await textarea.press('o');\n await page.waitForChanges();\n await textarea.press('n');\n await page.waitForChanges();\n await textarea.press('j');\n await page.waitForChanges();\n await textarea.press('o');\n await page.waitForChanges();\n await textarea.press('u');\n await page.waitForChanges();\n await textarea.press('r');\n await page.waitForChanges();\n\n // Then\n expect(inputSpy).toHaveReceivedEventTimes(7);\n });\n\n test('Should fire wcsChange event when user commit change with blur (tab)', async ({ page }: { page: E2EPage }) => {\n // Given\n await setWcsContent(page, `\n <wcs-textarea name=\"wcs-textarea-1\"></wcs-textarea>\n <button>Focus</button>\n `);\n\n const changeSpy = await page.spyOnEvent('wcsChange');\n\n const textarea = page.locator('wcs-textarea');\n const button = page.locator('button');\n\n // When\n await textarea.click();\n await textarea.pressSequentially('Blur');\n await button.focus(); // blur native textArea\n await page.waitForChanges();\n\n // Then - wait for the event to be received\n expect(changeSpy).toHaveReceivedEventTimes(1);\n expect(changeSpy).toHaveReceivedEventDetail({ value: 'Blur' });\n });\n\n test('Should fire wcsChange event when user commit change with blur (click)', async ({ page }: { page: E2EPage }) => {\n // Given\n await setWcsContent(page, `\n <wcs-textarea name=\"wcs-textarea-1\"></wcs-textarea>\n <button>Focus</button>\n `);\n\n const changeSpy = await page.spyOnEvent('wcsChange');\n\n const textarea = page.locator('wcs-textarea');\n const button = page.locator('button');\n\n // When\n await textarea.click();\n await textarea.press('B');\n await textarea.press('l');\n await textarea.press('u');\n await textarea.press('r');\n await button.focus();\n await page.waitForChanges();\n\n // Then\n expect(changeSpy).toHaveReceivedEventTimes(1);\n expect(changeSpy).toHaveReceivedEventDetail({ value: 'Blur' });\n });\n\n test('Should not fire wcsChange event when value is programmatically set', async ({ page }: { page: E2EPage }) => {\n // Given\n await setWcsContent(page, `\n <wcs-textarea name=\"wcs-textarea-1\" />\n `);\n\n const changeSpy = await page.spyOnEvent('wcsChange');\n\n const textarea = page.locator('wcs-textarea');\n\n // When\n await textarea.evaluate((el: any) => el.value = 'Programmatically set value');\n await page.waitForChanges();\n\n // Then\n expect(changeSpy).toHaveReceivedEventTimes(0);\n });\n\n test('Should not fire wcsInput event when value is programmatically set', async ({ page }: { page: E2EPage }) => {\n // Given\n await setWcsContent(page, `\n <wcs-textarea name=\"wcs-textarea-1\" />\n `);\n\n const inputSpy = await page.spyOnEvent('wcsInput');\n\n const textarea = page.locator('wcs-textarea');\n\n // When\n await textarea.evaluate((el: any) => el.value = 'Programmatically set value');\n await page.waitForChanges();\n\n // Then\n expect(inputSpy).toHaveReceivedEventTimes(0);\n });\n\n test('Should have a default value when value attribute is set', async ({ page }: { page: E2EPage }) => {\n // Given\n await setWcsContent(page, `\n <wcs-textarea name=\"wcs-textarea-1\" value=\"Default value\" />\n `);\n\n const textarea = page.locator('wcs-textarea');\n\n // Then\n await expect(textarea).toHaveJSProperty('value', 'Default value');\n await expect(page.locator('wcs-textarea textarea')).toHaveJSProperty('value', 'Default value');\n });\n\n test('Should have a default value when value property is set', async ({ page }: { page: E2EPage }) => {\n // Given\n await setWcsContent(page, `\n <wcs-textarea name=\"wcs-textarea-1\" />\n `);\n\n const textarea = page.locator('wcs-textarea');\n\n // When\n await textarea.evaluate((el: any) => el.value = 'Default value');\n\n // Then\n await expect(textarea).toHaveJSProperty('value', 'Default value');\n await expect(page.locator('wcs-textarea textarea')).toHaveJSProperty('value', 'Default value');\n });\n});\n"]}
@@ -699,7 +699,7 @@ export class Textarea {
699
699
  "signature": "(attr: AriaAttributeName, value: string | null | undefined) => Promise<void>",
700
700
  "parameters": [{
701
701
  "name": "attr",
702
- "type": "\"role\" | `aria-${string}`",
702
+ "type": "`aria-${string}` | \"role\"",
703
703
  "docs": ""
704
704
  }, {
705
705
  "name": "value",
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=test-expect.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"test-expect.js","sourceRoot":"","sources":["../../../src/utils/playwright/test-expect.ts"],"names":[],"mappings":"AAAA,8JAA8J","sourcesContent":["// TODO: to delete when we update to version of @stencil/playwright that includes forged matchers definition (https://github.com/stenciljs/playwright/pull/54)\n\ninterface CustomMatchers<R = unknown> {\n /**\n * Will check if the event spy received the expected event.\n */\n toHaveReceivedEvent(): R;\n\n /**\n * Will check if the event spy received the expected event with the expected detail.\n * @param eventDetail The expected detail of the event.\n */\n toHaveReceivedEventDetail(eventDetail: any): R;\n\n /**\n * Will check if the event spy received the expected event at the given index with the expected detail.\n * @param index position of the event in the received events array.\n * @param eventDetail The expected detail of the event.\n */\n toHaveNthReceivedEventDetail(index: number, eventDetail: any): R;\n\n /**\n * Will check if the event spy received the expected event with the expected detail on the first received event.\n * @param eventDetail The expected detail of the event.\n */\n toHaveFirstReceivedEventDetail(eventDetail: any): R;\n\n /**\n * Will check how many times the event has been received.\n */\n toHaveReceivedEventTimes(count: number): R;\n}\n\ndeclare global {\n // eslint-disable-next-line @typescript-eslint/no-namespace\n namespace PlaywrightTest {\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n interface Matchers<R> extends CustomMatchers<R> {}\n }\n}\n\nexport {};\n"]}
@@ -0,0 +1,16 @@
1
+ /**
2
+ * @see stencil.config.ts expose dev web server
3
+ * @param page
4
+ * @param content
5
+ */
6
+ export async function setWcsContent(page, content) {
7
+ await page.setContent(content);
8
+ await page.evaluate(() => {
9
+ document.body.classList.add('sncf-holding');
10
+ });
11
+ await page.addStyleTag({
12
+ url: '/design-tokens/sncf-holding.css',
13
+ });
14
+ await page.waitForChanges();
15
+ }
16
+ //# sourceMappingURL=test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"test.js","sourceRoot":"","sources":["../../../src/utils/playwright/test.ts"],"names":[],"mappings":"AAEA;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,aAAa,CAAC,IAAa,EAAE,OAAe;IAC9D,MAAM,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;IAC/B,MAAM,IAAI,CAAC,QAAQ,CAAC,GAAG,EAAE;QACrB,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC;IAChD,CAAC,CAAC,CAAA;IACF,MAAM,IAAI,CAAC,WAAW,CAAC;QACnB,GAAG,EAAE,iCAAiC;KACzC,CAAC,CAAC;IACH,MAAM,IAAI,CAAC,cAAc,EAAE,CAAC;AAChC,CAAC","sourcesContent":["import { E2EPage } from '@stencil/playwright';\n\n/**\n * @see stencil.config.ts expose dev web server\n * @param page\n * @param content\n */\nexport async function setWcsContent(page: E2EPage, content: string) {\n await page.setContent(content);\n await page.evaluate(() => {\n document.body.classList.add('sncf-holding');\n })\n await page.addStyleTag({\n url: '/design-tokens/sncf-holding.css',\n });\n await page.waitForChanges();\n}\n"]}
@@ -161,7 +161,7 @@ var round = Math.round;
161
161
  function getUAString() {
162
162
  var uaData = navigator.userAgentData;
163
163
 
164
- if (uaData != null && uaData.brands) {
164
+ if (uaData != null && uaData.brands && Array.isArray(uaData.brands)) {
165
165
  return uaData.brands.map(function (item) {
166
166
  return item.brand + "/" + item.version;
167
167
  }).join(' ');
@@ -449,7 +449,6 @@ function effect$1(_ref2) {
449
449
  }
450
450
 
451
451
  if (!contains(state.elements.popper, arrowElement)) {
452
-
453
452
  return;
454
453
  }
455
454
 
@@ -480,10 +479,9 @@ var unsetSides = {
480
479
  // Zooming can change the DPR, but it seems to report a value that will
481
480
  // cleanly divide the values into the appropriate subpixels.
482
481
 
483
- function roundOffsetsByDPR(_ref) {
482
+ function roundOffsetsByDPR(_ref, win) {
484
483
  var x = _ref.x,
485
484
  y = _ref.y;
486
- var win = window;
487
485
  var dpr = win.devicePixelRatio || 1;
488
486
  return {
489
487
  x: round(x * dpr) / dpr || 0,
@@ -566,7 +564,7 @@ function mapToStyles(_ref2) {
566
564
  var _ref4 = roundOffsets === true ? roundOffsetsByDPR({
567
565
  x: x,
568
566
  y: y
569
- }) : {
567
+ }, getWindow(popper)) : {
570
568
  x: x,
571
569
  y: y
572
570
  };
@@ -592,7 +590,6 @@ function computeStyles(_ref5) {
592
590
  adaptive = _options$adaptive === void 0 ? true : _options$adaptive,
593
591
  _options$roundOffsets = options.roundOffsets,
594
592
  roundOffsets = _options$roundOffsets === void 0 ? true : _options$roundOffsets;
595
-
596
593
  var commonStyles = {
597
594
  placement: getBasePlacement(state.placement),
598
595
  variation: getVariation(state.placement),
@@ -1660,8 +1657,7 @@ function popperGenerator(generatorOptions) {
1660
1657
 
1661
1658
  state.orderedModifiers = orderedModifiers.filter(function (m) {
1662
1659
  return m.enabled;
1663
- }); // Validate the provided modifiers so that the consumer will get warned
1664
-
1660
+ });
1665
1661
  runModifierEffects();
1666
1662
  return instance.update();
1667
1663
  },
@@ -1681,7 +1677,6 @@ function popperGenerator(generatorOptions) {
1681
1677
  // anymore
1682
1678
 
1683
1679
  if (!areValidElements(reference, popper)) {
1684
-
1685
1680
  return;
1686
1681
  } // Store the reference and popper rects to be read by modifiers
1687
1682
 
@@ -1706,7 +1701,6 @@ function popperGenerator(generatorOptions) {
1706
1701
  });
1707
1702
 
1708
1703
  for (var index = 0; index < state.orderedModifiers.length; index++) {
1709
-
1710
1704
  if (state.reset === true) {
1711
1705
  state.reset = false;
1712
1706
  index = -1;
@@ -1744,7 +1738,6 @@ function popperGenerator(generatorOptions) {
1744
1738
  };
1745
1739
 
1746
1740
  if (!areValidElements(reference, popper)) {
1747
-
1748
1741
  return instance;
1749
1742
  }
1750
1743
 
@@ -1759,11 +1752,11 @@ function popperGenerator(generatorOptions) {
1759
1752
  // one.
1760
1753
 
1761
1754
  function runModifierEffects() {
1762
- state.orderedModifiers.forEach(function (_ref3) {
1763
- var name = _ref3.name,
1764
- _ref3$options = _ref3.options,
1765
- options = _ref3$options === void 0 ? {} : _ref3$options,
1766
- effect = _ref3.effect;
1755
+ state.orderedModifiers.forEach(function (_ref) {
1756
+ var name = _ref.name,
1757
+ _ref$options = _ref.options,
1758
+ options = _ref$options === void 0 ? {} : _ref$options,
1759
+ effect = _ref.effect;
1767
1760
 
1768
1761
  if (typeof effect === 'function') {
1769
1762
  var cleanupFn = effect({
@@ -1798,4 +1791,4 @@ var createPopper = /*#__PURE__*/popperGenerator({
1798
1791
 
1799
1792
  export { applyStyles$1 as a, createPopper as c };
1800
1793
 
1801
- //# sourceMappingURL=popper-e491c314.js.map
1794
+ //# sourceMappingURL=popper-ac238961.js.map