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.
- package/README.md +11 -9
- package/design-tokens/dist/sncf-groupe-root-scoped.css +227 -227
- package/design-tokens/dist/sncf-groupe.css +227 -227
- package/design-tokens/dist/sncf-holding-root-scoped.css +227 -227
- package/design-tokens/dist/sncf-holding.css +227 -227
- package/design-tokens/dist/sncf-reseau-root-scoped.css +227 -227
- package/design-tokens/dist/sncf-reseau.css +227 -227
- package/design-tokens/dist/sncf-voyageurs-root-scoped.css +242 -242
- package/design-tokens/dist/sncf-voyageurs.css +242 -242
- package/dist/cjs/{popper-8d6e7fca.js → popper-1b61df21.js} +10 -17
- package/dist/cjs/popper-1b61df21.js.map +1 -0
- package/dist/cjs/wcs-breadcrumb.cjs.entry.js +1 -1
- package/dist/cjs/wcs-breadcrumb.cjs.entry.js.map +1 -1
- package/dist/cjs/wcs-com-nav-item.cjs.entry.js +1 -1
- package/dist/cjs/wcs-com-nav-item.cjs.entry.js.map +1 -1
- package/dist/cjs/wcs-com-nav.cjs.entry.js +3 -3
- package/dist/cjs/wcs-com-nav.cjs.entry.js.map +1 -1
- package/dist/cjs/wcs-dropdown.cjs.entry.js +1 -1
- package/dist/cjs/wcs-error_3.cjs.entry.js +1 -1
- package/dist/cjs/wcs-error_3.cjs.entry.js.map +1 -1
- package/dist/cjs/wcs-galactic-menu.cjs.entry.js +1 -1
- package/dist/cjs/wcs-grid.cjs.entry.js +5 -4
- package/dist/cjs/wcs-grid.cjs.entry.js.map +1 -1
- package/dist/cjs/wcs-horizontal-stepper.cjs.entry.js +3 -2
- package/dist/cjs/wcs-horizontal-stepper.cjs.entry.js.map +1 -1
- package/dist/cjs/wcs-modal.cjs.entry.js +2 -2
- package/dist/cjs/wcs-modal.cjs.entry.js.map +1 -1
- package/dist/cjs/wcs-select_2.cjs.entry.js +59 -24
- package/dist/cjs/wcs-select_2.cjs.entry.js.map +1 -1
- package/dist/cjs/wcs-tabs.cjs.entry.js +1 -1
- package/dist/cjs/wcs-tooltip.cjs.entry.js +1 -1
- package/dist/collection/components/accordion/{accordion.e2e.js → accordion.e2e.playwright.js} +51 -55
- package/dist/collection/components/accordion/accordion.e2e.playwright.js.map +1 -0
- package/dist/collection/components/accordion-panel/accordion-panel.js +1 -1
- package/dist/collection/components/alert/alert.e2e.playwright.js +125 -0
- package/dist/collection/components/alert/alert.e2e.playwright.js.map +1 -0
- package/dist/collection/components/alert-drawer/alert-drawer.e2e.playwright.js +107 -0
- package/dist/collection/components/alert-drawer/alert-drawer.e2e.playwright.js.map +1 -0
- package/dist/collection/components/breadcrumb/breadcrumb.e2e.playwright.js +188 -0
- package/dist/collection/components/breadcrumb/breadcrumb.e2e.playwright.js.map +1 -0
- package/dist/collection/components/breadcrumb/breadcrumb.js +2 -2
- package/dist/collection/components/breadcrumb/breadcrumb.js.map +1 -1
- package/dist/collection/components/button/button.e2e.playwright.js +26 -0
- package/dist/collection/components/button/button.e2e.playwright.js.map +1 -0
- package/dist/collection/components/button/button.js +1 -1
- package/dist/collection/components/checkbox/checkbox.e2e.playwright.js +39 -0
- package/dist/collection/components/checkbox/checkbox.e2e.playwright.js.map +1 -0
- package/dist/collection/components/checkbox/checkbox.js +1 -1
- package/dist/collection/components/chip/chip.e2e.playwright.js +190 -0
- package/dist/collection/components/chip/chip.e2e.playwright.js.map +1 -0
- package/dist/collection/components/com-nav/com-nav.css +15 -0
- package/dist/collection/components/com-nav/{com-nav.e2e.js → com-nav.e2e.playwright.js} +60 -44
- package/dist/collection/components/com-nav/com-nav.e2e.playwright.js.map +1 -0
- package/dist/collection/components/com-nav/com-nav.js +3 -3
- package/dist/collection/components/com-nav/com-nav.js.map +1 -1
- package/dist/collection/components/com-nav-category/com-nav-category.js +1 -1
- package/dist/collection/components/com-nav-item/com-nav-item.css +2 -2
- package/dist/collection/components/com-nav-submenu/com-nav-submenu.js +1 -1
- package/dist/collection/components/counter/counter.e2e.playwright.js +187 -0
- package/dist/collection/components/counter/counter.e2e.playwright.js.map +1 -0
- package/dist/collection/components/counter/counter.js +1 -1
- package/dist/collection/components/dropdown/dropdown.e2e.playwright.js +320 -0
- package/dist/collection/components/dropdown/dropdown.e2e.playwright.js.map +1 -0
- package/dist/collection/components/dropdown/dropdown.js +1 -1
- package/dist/collection/components/editable-field/editable-field.e2e.playwright.js +156 -0
- package/dist/collection/components/editable-field/editable-field.e2e.playwright.js.map +1 -0
- package/dist/collection/components/form-field/form-field.e2e.playwright.js +104 -0
- package/dist/collection/components/form-field/form-field.e2e.playwright.js.map +1 -0
- package/dist/collection/components/galactic-menu/galactic-menu.js +1 -1
- package/dist/collection/components/grid/grid.e2e.playwright.js +153 -0
- package/dist/collection/components/grid/grid.e2e.playwright.js.map +1 -0
- package/dist/collection/components/grid/grid.js +6 -5
- package/dist/collection/components/grid/grid.js.map +1 -1
- package/dist/collection/components/grid-column/grid-column.js +1 -1
- package/dist/collection/components/grid-pagination/grid-pagination.js +1 -1
- package/dist/collection/components/header/header.js +1 -1
- package/dist/collection/components/horizontal-stepper/horizontal-step.js +2 -1
- package/dist/collection/components/horizontal-stepper/horizontal-step.js.map +1 -1
- package/dist/collection/components/horizontal-stepper/horizontal-stepper-interface.js.map +1 -1
- package/dist/collection/components/horizontal-stepper/horizontal-stepper.js +5 -1
- package/dist/collection/components/horizontal-stepper/horizontal-stepper.js.map +1 -1
- package/dist/collection/components/icon/icon.js +1 -1
- package/dist/collection/components/input/input.e2e.playwright.js +157 -0
- package/dist/collection/components/input/input.e2e.playwright.js.map +1 -0
- package/dist/collection/components/input/input.js +2 -2
- package/dist/collection/components/label/label.css +4 -6
- package/dist/collection/components/label/label.js +1 -1
- package/dist/collection/components/mat-icon/mat-icon.js +1 -1
- package/dist/collection/components/modal/modal.css +4 -0
- package/dist/collection/components/modal/modal.e2e.playwright.js +35 -0
- package/dist/collection/components/modal/modal.e2e.playwright.js.map +1 -0
- package/dist/collection/components/modal/modal.js +2 -2
- package/dist/collection/components/modal/modal.js.map +1 -1
- package/dist/collection/components/native-select/native-select.js +1 -1
- package/dist/collection/components/nav/nav.js +1 -1
- package/dist/collection/components/progress-bar/progress-bar.js +1 -1
- package/dist/collection/components/progress-radial/progress-radial.js +1 -1
- package/dist/collection/components/radio/radio.js +1 -1
- package/dist/collection/components/radio-group/radio-group.e2e.playwright.js +231 -0
- package/dist/collection/components/radio-group/radio-group.e2e.playwright.js.map +1 -0
- package/dist/collection/components/radio-group/radio-group.js +1 -1
- package/dist/collection/components/select/select.e2e.playwright.js +1702 -0
- package/dist/collection/components/select/select.e2e.playwright.js.map +1 -0
- package/dist/collection/components/select/select.js +49 -20
- package/dist/collection/components/select/select.js.map +1 -1
- package/dist/collection/components/select-option/select-option.js +3 -3
- package/dist/collection/components/select-option/select-option.js.map +1 -1
- package/dist/collection/components/switch/switch.e2e.playwright.js +40 -0
- package/dist/collection/components/switch/switch.e2e.playwright.js.map +1 -0
- package/dist/collection/components/switch/switch.js +1 -1
- package/dist/collection/components/tabs/tabs.e2e.playwright.js +205 -0
- package/dist/collection/components/tabs/tabs.e2e.playwright.js.map +1 -0
- package/dist/collection/components/tabs/tabs.js +1 -1
- package/dist/collection/components/textarea/textarea.e2e.playwright.js +133 -0
- package/dist/collection/components/textarea/textarea.e2e.playwright.js.map +1 -0
- package/dist/collection/components/textarea/textarea.js +1 -1
- package/dist/collection/utils/playwright/test-expect.js +2 -0
- package/dist/collection/utils/playwright/test-expect.js.map +1 -0
- package/dist/collection/utils/playwright/test.js +16 -0
- package/dist/collection/utils/playwright/test.js.map +1 -0
- package/dist/esm/{popper-e491c314.js → popper-ac238961.js} +10 -17
- package/dist/esm/popper-ac238961.js.map +1 -0
- package/dist/esm/wcs-breadcrumb.entry.js +1 -1
- package/dist/esm/wcs-breadcrumb.entry.js.map +1 -1
- package/dist/esm/wcs-com-nav-item.entry.js +1 -1
- package/dist/esm/wcs-com-nav-item.entry.js.map +1 -1
- package/dist/esm/wcs-com-nav.entry.js +3 -3
- package/dist/esm/wcs-com-nav.entry.js.map +1 -1
- package/dist/esm/wcs-dropdown.entry.js +1 -1
- package/dist/esm/wcs-error_3.entry.js +1 -1
- package/dist/esm/wcs-error_3.entry.js.map +1 -1
- package/dist/esm/wcs-galactic-menu.entry.js +1 -1
- package/dist/esm/wcs-grid.entry.js +5 -4
- package/dist/esm/wcs-grid.entry.js.map +1 -1
- package/dist/esm/wcs-horizontal-stepper.entry.js +3 -2
- package/dist/esm/wcs-horizontal-stepper.entry.js.map +1 -1
- package/dist/esm/wcs-modal.entry.js +2 -2
- package/dist/esm/wcs-modal.entry.js.map +1 -1
- package/dist/esm/wcs-select_2.entry.js +59 -24
- package/dist/esm/wcs-select_2.entry.js.map +1 -1
- package/dist/esm/wcs-tabs.entry.js +1 -1
- package/dist/esm/wcs-tooltip.entry.js +1 -1
- package/dist/types/components/accordion/accordion.e2e.playwright.d.ts +1 -0
- package/dist/types/components/alert/alert.e2e.playwright.d.ts +1 -0
- package/dist/types/components/alert-drawer/alert-drawer.e2e.playwright.d.ts +1 -0
- package/dist/types/components/breadcrumb/breadcrumb.e2e.playwright.d.ts +1 -0
- package/dist/types/components/button/button.e2e.playwright.d.ts +1 -0
- package/dist/types/components/checkbox/checkbox.e2e.playwright.d.ts +1 -0
- package/dist/types/components/chip/chip.e2e.playwright.d.ts +1 -0
- package/dist/types/components/com-nav/com-nav.e2e.playwright.d.ts +1 -0
- package/dist/types/components/counter/counter.e2e.playwright.d.ts +1 -0
- package/dist/types/components/dropdown/dropdown.e2e.playwright.d.ts +1 -0
- package/dist/types/components/editable-field/editable-field.e2e.playwright.d.ts +1 -0
- package/dist/types/components/form-field/form-field.e2e.playwright.d.ts +1 -0
- package/dist/types/components/grid/grid.e2e.playwright.d.ts +1 -0
- package/dist/types/components/horizontal-stepper/horizontal-stepper-interface.d.ts +2 -0
- package/dist/types/components/horizontal-stepper/horizontal-stepper.d.ts +4 -0
- package/dist/types/components/input/input.e2e.playwright.d.ts +1 -0
- package/dist/types/components/modal/modal.e2e.playwright.d.ts +1 -0
- package/dist/types/components/radio-group/radio-group.e2e.playwright.d.ts +1 -0
- package/dist/types/components/select/select.d.ts +7 -1
- package/dist/types/components/select/select.e2e.playwright.d.ts +1 -0
- package/dist/types/components/switch/switch.e2e.playwright.d.ts +1 -0
- package/dist/types/components/tabs/tabs.e2e.playwright.d.ts +1 -0
- package/dist/types/components/textarea/textarea.e2e.playwright.d.ts +1 -0
- package/dist/types/components.d.ts +12 -0
- package/dist/types/utils/playwright/test-expect.d.ts +33 -0
- package/dist/types/utils/playwright/test.d.ts +7 -0
- package/dist/wcs/{p-8e9bd0f1.entry.js → p-0326f834.entry.js} +2 -2
- package/dist/wcs/{p-8e9bd0f1.entry.js.map → p-0326f834.entry.js.map} +1 -1
- package/dist/wcs/p-2221bf0c.entry.js +16 -0
- package/dist/wcs/p-2221bf0c.entry.js.map +1 -0
- package/dist/wcs/p-4ae08567.entry.js +2 -0
- package/dist/wcs/p-4ae08567.entry.js.map +1 -0
- package/dist/wcs/p-4e2d6227.entry.js +2 -0
- package/dist/wcs/p-4e2d6227.entry.js.map +1 -0
- package/dist/wcs/p-8332a7e3.entry.js +2 -0
- package/dist/wcs/p-8332a7e3.entry.js.map +1 -0
- package/dist/wcs/{p-ec383729.entry.js → p-9b76b8e6.entry.js} +2 -2
- package/dist/wcs/{p-ec383729.entry.js.map → p-9b76b8e6.entry.js.map} +1 -1
- package/dist/wcs/{p-1f593d06.entry.js → p-abd8d5a0.entry.js} +2 -2
- package/dist/wcs/{p-622f7403.entry.js → p-c6f8c45c.entry.js} +2 -2
- package/dist/wcs/{p-a94e685c.entry.js → p-db7ba599.entry.js} +2 -2
- package/dist/wcs/p-e1fb3625.js +2 -0
- package/dist/wcs/p-e1fb3625.js.map +1 -0
- package/dist/wcs/{p-a956dc84.entry.js → p-f2f7595e.entry.js} +2 -2
- package/dist/wcs/{p-a956dc84.entry.js.map → p-f2f7595e.entry.js.map} +1 -1
- package/dist/wcs/p-fbd68522.entry.js +2 -0
- package/dist/wcs/p-fbd68522.entry.js.map +1 -0
- package/dist/wcs/{p-8c2605fd.entry.js → p-fe303f58.entry.js} +2 -2
- package/dist/wcs/wcs.esm.js +1 -1
- package/package.json +18 -24
- package/dist/cjs/popper-8d6e7fca.js.map +0 -1
- package/dist/collection/components/accordion/accordion.e2e.js.map +0 -1
- package/dist/collection/components/alert/alert.e2e.js +0 -142
- package/dist/collection/components/alert/alert.e2e.js.map +0 -1
- package/dist/collection/components/alert-drawer/alert-drawer.e2e.js +0 -111
- package/dist/collection/components/alert-drawer/alert-drawer.e2e.js.map +0 -1
- package/dist/collection/components/breadcrumb/breadcrumb.e2e.js +0 -223
- package/dist/collection/components/breadcrumb/breadcrumb.e2e.js.map +0 -1
- package/dist/collection/components/button/button.e2e.js +0 -25
- package/dist/collection/components/button/button.e2e.js.map +0 -1
- package/dist/collection/components/checkbox/checkbox.e2e.js +0 -45
- package/dist/collection/components/checkbox/checkbox.e2e.js.map +0 -1
- package/dist/collection/components/chip/chip.e2e.js +0 -209
- package/dist/collection/components/chip/chip.e2e.js.map +0 -1
- package/dist/collection/components/com-nav/com-nav.e2e.js.map +0 -1
- package/dist/collection/components/counter/counter.e2e.js +0 -206
- package/dist/collection/components/counter/counter.e2e.js.map +0 -1
- package/dist/collection/components/dropdown/dropdown.e2e.js +0 -156
- package/dist/collection/components/dropdown/dropdown.e2e.js.map +0 -1
- package/dist/collection/components/editable-field/editable-field.e2e.js +0 -176
- package/dist/collection/components/editable-field/editable-field.e2e.js.map +0 -1
- package/dist/collection/components/form-field/form-field.e2e.js +0 -122
- package/dist/collection/components/form-field/form-field.e2e.js.map +0 -1
- package/dist/collection/components/grid/grid.e2e.js +0 -147
- package/dist/collection/components/grid/grid.e2e.js.map +0 -1
- package/dist/collection/components/input/input.e2e.js +0 -152
- package/dist/collection/components/input/input.e2e.js.map +0 -1
- package/dist/collection/components/modal/modal.e2e.js +0 -36
- package/dist/collection/components/modal/modal.e2e.js.map +0 -1
- package/dist/collection/components/radio-group/radio-group.e2e.js +0 -239
- package/dist/collection/components/radio-group/radio-group.e2e.js.map +0 -1
- package/dist/collection/components/select/select.e2e.js +0 -1081
- package/dist/collection/components/select/select.e2e.js.map +0 -1
- package/dist/collection/components/switch/switch.e2e.js +0 -45
- package/dist/collection/components/switch/switch.e2e.js.map +0 -1
- package/dist/collection/components/tabs/tabs.e2e.js +0 -207
- package/dist/collection/components/tabs/tabs.e2e.js.map +0 -1
- package/dist/collection/components/textarea/textarea.e2e.js +0 -132
- package/dist/collection/components/textarea/textarea.e2e.js.map +0 -1
- package/dist/collection/utils/tests.js +0 -23
- package/dist/collection/utils/tests.js.map +0 -1
- package/dist/esm/popper-e491c314.js.map +0 -1
- package/dist/types/utils/tests.d.ts +0 -4
- package/dist/wcs/p-0dd07842.entry.js +0 -2
- package/dist/wcs/p-0dd07842.entry.js.map +0 -1
- package/dist/wcs/p-0f864e86.js +0 -2
- package/dist/wcs/p-0f864e86.js.map +0 -1
- package/dist/wcs/p-1244daa0.entry.js +0 -2
- package/dist/wcs/p-1244daa0.entry.js.map +0 -1
- package/dist/wcs/p-1fbe0328.entry.js +0 -2
- package/dist/wcs/p-1fbe0328.entry.js.map +0 -1
- package/dist/wcs/p-b94a09b6.entry.js +0 -16
- package/dist/wcs/p-b94a09b6.entry.js.map +0 -1
- package/dist/wcs/p-fd187bce.entry.js +0 -2
- package/dist/wcs/p-fd187bce.entry.js.map +0 -1
- /package/dist/wcs/{p-1f593d06.entry.js.map → p-abd8d5a0.entry.js.map} +0 -0
- /package/dist/wcs/{p-622f7403.entry.js.map → p-c6f8c45c.entry.js.map} +0 -0
- /package/dist/wcs/{p-a94e685c.entry.js.map → p-db7ba599.entry.js.map} +0 -0
- /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": "
|
|
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": "
|
|
702
|
+
"type": "`aria-${string}` | \"role\"",
|
|
703
703
|
"docs": ""
|
|
704
704
|
}, {
|
|
705
705
|
"name": "value",
|
|
@@ -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
|
-
});
|
|
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 (
|
|
1763
|
-
var name =
|
|
1764
|
-
|
|
1765
|
-
options =
|
|
1766
|
-
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-
|
|
1794
|
+
//# sourceMappingURL=popper-ac238961.js.map
|