dimsum-e2e-tests 3.70.0-next.39 → 3.70.0-next.40
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/CHANGELOG.md +6 -0
- package/ds-accordion/DSAccordion.visual.spec.js +6 -0
- package/ds-accordion/DSAccordionCO.js +11 -3
- package/ds-accordion/controlled/DSAccordion.controlled.func.spec.js +23 -0
- package/ds-accordion/header-structure/DSAccordion.header-structure.func.spec.js +49 -0
- package/ds-accordion/input-inside/DSAccordion.input-inside.func.spec.js +17 -0
- package/ds-accordion-native/DSAccordionNative.axe-core.func.spec.js +18 -0
- package/ds-accordion-native/DSAccordionNative.func.spec.js +22 -0
- package/ds-accordion-native/DSAccordionNative.visual.spec.js +46 -19
- package/ds-accordion-native/DSAccordionNativeCO.js +12 -0
- package/ds-accordion-native/QA_NOTES.md +88 -0
- package/ds-accordion-native/aria-disabled/DSAccordionNative.aria-disabled.visual.spec.js +2 -1
- package/ds-accordion-native/controlled/DSAccordionNative.controlled.func.spec.js +22 -0
- package/ds-accordion-native/header-structure/DSAccordionNative.header-structure.func.spec.js +53 -0
- package/ds-accordion-native/input-inside/DSAccordionNative.input-inside.func.spec.js +16 -0
- package/ds-accordion-native/scrollable-content/DSAccordionNative.scrollable-content.visual.spec.js +2 -1
- package/ds-accordion-native/slots/DSAccordionNative.slots.visual.spec.js +4 -1
- package/ds-accordion-native/wrapLabel/DSAccordionNative.wrap-label.visual.spec.js +3 -4
- package/ds-form-date-range-picker/date-segment-aria-labels/DateRangePicker.date-segment-aria-labels.func.spec.js +64 -0
- package/ds-shuttle-v2/DSShuttleV2CO.js +11 -0
- package/ds-shuttle-v2/explicit-selection-ui/DSShuttleV2.explicit-selection-ui.func.spec.js +37 -0
- package/ds-shuttle-v2/explicit-selection-ui/DSShuttleV2.explicit-selection-ui.visual.spec.js +27 -0
- package/package.json +150 -150
- package/paths.js +1 -0
package/CHANGELOG.md
CHANGED
|
@@ -3,6 +3,12 @@
|
|
|
3
3
|
All notable changes to this project will be documented in this file.
|
|
4
4
|
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
|
|
5
5
|
|
|
6
|
+
## 3.70.0-next.40 (2026-06-29)
|
|
7
|
+
|
|
8
|
+
### Features
|
|
9
|
+
|
|
10
|
+
- ds-card-v3:: add theming example story in slots [PUI-17890](https://jira.elliemae.io/browse/PUI-17890) ([#8137](https://git.elliemae.io/platform-ui/dimsum/issues/8137)) ([322a618](https://git.elliemae.io/platform-ui/dimsum/commit/322a618b813f5f5261b423f556baadd60844d945))
|
|
11
|
+
|
|
6
12
|
## 3.70.0-next.39 (2026-06-25)
|
|
7
13
|
|
|
8
14
|
### Features
|
|
@@ -81,6 +81,12 @@ if (!browser.capabilities['ice:options'].isPhone && !browser.capabilities['ice:o
|
|
|
81
81
|
if (errorOnGo) throw errorOnGo;
|
|
82
82
|
});
|
|
83
83
|
it('01: should display accordion with global height, not trimmed', async () => {
|
|
84
|
+
const addRow = await $('[data-testid="add-row"]');
|
|
85
|
+
await addRow.click();
|
|
86
|
+
await addRow.click();
|
|
87
|
+
await addRow.click();
|
|
88
|
+
const content = await DSAccordionCO.getContents(0);
|
|
89
|
+
await content.waitForDisplayed();
|
|
84
90
|
const snapshot = await browser.checkSnapshot(DSAccordionCO.snapshotPath('accordion-globalheight'));
|
|
85
91
|
await expect(snapshot).toEqual(0);
|
|
86
92
|
});
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/* eslint-disable import/no-relative-packages */
|
|
2
|
-
import { PATH_E2E_ACCORDION } from '../paths';
|
|
2
|
+
import { PATH_E2E_ACCORDION, PATH_E2E_ACCORDION_PITFALLS } from '../paths';
|
|
3
3
|
import { PageObject, Urlbuilder, getElementByIndex } from '../helpers';
|
|
4
4
|
|
|
5
5
|
export default class DSAccordionCO extends PageObject {
|
|
@@ -20,7 +20,9 @@ export default class DSAccordionCO extends PageObject {
|
|
|
20
20
|
|
|
21
21
|
static tooltip = new Urlbuilder(PATH_E2E_ACCORDION, 'tooltip');
|
|
22
22
|
|
|
23
|
-
static inputInside = new Urlbuilder(PATH_E2E_ACCORDION, '
|
|
23
|
+
static inputInside = new Urlbuilder(PATH_E2E_ACCORDION, 'pui-9261-input-inside');
|
|
24
|
+
|
|
25
|
+
static controlled = new Urlbuilder(PATH_E2E_ACCORDION, 'controlled-test');
|
|
24
26
|
|
|
25
27
|
static datepickerInside = new Urlbuilder(PATH_E2E_ACCORDION, 'actionable-within');
|
|
26
28
|
|
|
@@ -34,7 +36,7 @@ export default class DSAccordionCO extends PageObject {
|
|
|
34
36
|
|
|
35
37
|
static keepContentURL = new Urlbuilder(PATH_E2E_ACCORDION, 'keep-content-mounted');
|
|
36
38
|
|
|
37
|
-
static focusOnItemURL = new Urlbuilder(
|
|
39
|
+
static focusOnItemURL = new Urlbuilder(PATH_E2E_ACCORDION_PITFALLS, 'focus-on-item-test');
|
|
38
40
|
|
|
39
41
|
static applyAriaDisabled = new Urlbuilder(PATH_E2E_ACCORDION, 'apply-aria-disabled-test');
|
|
40
42
|
|
|
@@ -105,6 +107,12 @@ export default class DSAccordionCO extends PageObject {
|
|
|
105
107
|
static getAccordionItemHeaderContainerByIndex = async (index) =>
|
|
106
108
|
getElementByIndex(this.getAccordionItemHeaderContainers, index);
|
|
107
109
|
|
|
110
|
+
static getAccordionItemHeaderCustomActionsContainers = async () =>
|
|
111
|
+
$$('[data-testid="ds-accordion-item-header-custom-actions-container"]');
|
|
112
|
+
|
|
113
|
+
static getAccordionItemHeaderCustomActionsContainerByIndex = async (index) =>
|
|
114
|
+
getElementByIndex(this.getAccordionItemHeaderCustomActionsContainers, index);
|
|
115
|
+
|
|
108
116
|
// slots
|
|
109
117
|
|
|
110
118
|
static async getAccordionContainerSlotByIndex(index = 0) {
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import DSAccordionCO from '../DSAccordionCO';
|
|
2
|
+
|
|
3
|
+
if (!browser.capabilities['ice:options'].isPhone && !browser.capabilities['ice:options'].isTablet) {
|
|
4
|
+
// New coverage for the ControlledTest story (previously untested).
|
|
5
|
+
describe('PUI-18650 - Accordion, controlled -func', () => {
|
|
6
|
+
before('loading page', async () => {
|
|
7
|
+
const errorOnGo = await DSAccordionCO.controlled.go();
|
|
8
|
+
if (errorOnGo) throw errorOnGo;
|
|
9
|
+
});
|
|
10
|
+
it('01: single-open: opening another item collapses the previously open one', async () => {
|
|
11
|
+
await expect(await DSAccordionCO.getAccordionHeader(0)).toHaveAttribute('aria-expanded', 'true');
|
|
12
|
+
await (await DSAccordionCO.getAccordionHeader(1)).click();
|
|
13
|
+
await expect(await DSAccordionCO.getAccordionHeader(1)).toHaveAttribute('aria-expanded', 'true');
|
|
14
|
+
await expect(await DSAccordionCO.getAccordionHeader(0)).toHaveAttribute('aria-expanded', 'false');
|
|
15
|
+
});
|
|
16
|
+
it('02: multiple-open: opening two items keeps both expanded', async () => {
|
|
17
|
+
await (await DSAccordionCO.getAccordionHeader(3)).click();
|
|
18
|
+
await (await DSAccordionCO.getAccordionHeader(4)).click();
|
|
19
|
+
await expect(await DSAccordionCO.getAccordionHeader(3)).toHaveAttribute('aria-expanded', 'true');
|
|
20
|
+
await expect(await DSAccordionCO.getAccordionHeader(4)).toHaveAttribute('aria-expanded', 'true');
|
|
21
|
+
});
|
|
22
|
+
});
|
|
23
|
+
}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
import DSAccordionCO from '../DSAccordionCO';
|
|
2
|
+
|
|
3
|
+
if (
|
|
4
|
+
(!browser.capabilities['ice:options'].isPhone &&
|
|
5
|
+
!browser.capabilities['ice:options'].isTablet &&
|
|
6
|
+
browser.capabilities.browserName === 'chrome') ||
|
|
7
|
+
browser.capabilities.browserName === 'Chrome'
|
|
8
|
+
) {
|
|
9
|
+
// Tests for the DOM structural fix introduced in PUI-17912
|
|
10
|
+
// (custom action buttons moved out of role="heading" container into a sibling)
|
|
11
|
+
describe('PUI-18621 - DSAccordion:: heading container structure after renderCustomActions fix - func', () => {
|
|
12
|
+
before('loading page', async () => {
|
|
13
|
+
const errorOnGo = await DSAccordionCO.headerControls.go();
|
|
14
|
+
if (errorOnGo) throw errorOnGo;
|
|
15
|
+
});
|
|
16
|
+
|
|
17
|
+
it('01: heading container should contain only the toggle button and no other interactive elements', async () => {
|
|
18
|
+
const headingContainer = await DSAccordionCO.getAccordionItemHeaderContainerByIndex(0);
|
|
19
|
+
await expect(headingContainer).toHaveAttribute('role', 'heading');
|
|
20
|
+
const buttonsInsideHeading = await headingContainer.$$('button');
|
|
21
|
+
await expect(buttonsInsideHeading.length).toBe(1);
|
|
22
|
+
});
|
|
23
|
+
|
|
24
|
+
it('02: custom actions container should exist outside the heading container', async () => {
|
|
25
|
+
const customActionsContainer = await DSAccordionCO.getAccordionItemHeaderCustomActionsContainerByIndex(0);
|
|
26
|
+
await expect(customActionsContainer).toExist();
|
|
27
|
+
});
|
|
28
|
+
|
|
29
|
+
it('03: action buttons in custom actions container should reflect correct enabled/disabled state', async () => {
|
|
30
|
+
const enabledContainer = await DSAccordionCO.getAccordionItemHeaderCustomActionsContainerByIndex(0);
|
|
31
|
+
const enabledButton = await enabledContainer.$('[data-testid="ds-button"]');
|
|
32
|
+
await expect(enabledButton).toBeDisplayed();
|
|
33
|
+
await expect(enabledButton).toBeEnabled();
|
|
34
|
+
|
|
35
|
+
const disabledContainer = await DSAccordionCO.getAccordionItemHeaderCustomActionsContainerByIndex(2);
|
|
36
|
+
const disabledButton = await disabledContainer.$('[data-testid="ds-button"]');
|
|
37
|
+
await expect(disabledButton).toBeDisplayed();
|
|
38
|
+
await expect(disabledButton).not.toBeEnabled();
|
|
39
|
+
});
|
|
40
|
+
|
|
41
|
+
it('04: toolbar trigger in custom actions should open dropdown menu on click', async () => {
|
|
42
|
+
const toolbar = await DSAccordionCO.getToolbarByIndex(0);
|
|
43
|
+
await toolbar.click();
|
|
44
|
+
const firstMenuOption = await $('*=Login');
|
|
45
|
+
await firstMenuOption.waitForDisplayed();
|
|
46
|
+
await expect(firstMenuOption).toBeDisplayed();
|
|
47
|
+
});
|
|
48
|
+
});
|
|
49
|
+
}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import DSAccordionCO from '../DSAccordionCO';
|
|
2
|
+
|
|
3
|
+
if (!browser.capabilities['ice:options'].isPhone && !browser.capabilities['ice:options'].isTablet) {
|
|
4
|
+
// New coverage for the PUI9261InputInside story (previously untested).
|
|
5
|
+
describe('PUI-18651 - Accordion, input inside content -func', () => {
|
|
6
|
+
before('loading page', async () => {
|
|
7
|
+
const errorOnGo = await DSAccordionCO.inputInside.go();
|
|
8
|
+
if (errorOnGo) throw errorOnGo;
|
|
9
|
+
});
|
|
10
|
+
it('01: should type into an input rendered inside the open accordion item', async () => {
|
|
11
|
+
const input = await $('[data-testid="task-name"] input');
|
|
12
|
+
await input.waitForDisplayed();
|
|
13
|
+
await input.setValue('Test task');
|
|
14
|
+
await expect(input).toHaveValue('Test task');
|
|
15
|
+
});
|
|
16
|
+
});
|
|
17
|
+
}
|
|
@@ -22,6 +22,11 @@ if (
|
|
|
22
22
|
const result = await axeCoreCheck();
|
|
23
23
|
expect(result.length).toBe(0);
|
|
24
24
|
});
|
|
25
|
+
it('02: should display accordion with open toolbar and pass axecore scan', async () => {
|
|
26
|
+
await (await DSAccordionNativeCO.getToolbarByIndex(1)).click();
|
|
27
|
+
const result = await axeCoreCheck();
|
|
28
|
+
expect(result.length).toBe(0);
|
|
29
|
+
});
|
|
25
30
|
});
|
|
26
31
|
|
|
27
32
|
describe('PUI-18083 - AccordionNative, basic -AxeCore', () => {
|
|
@@ -114,4 +119,17 @@ if (
|
|
|
114
119
|
expect(result.length).toBe(0);
|
|
115
120
|
});
|
|
116
121
|
});
|
|
122
|
+
|
|
123
|
+
describe('PUI-18083 - AccordionNative, Focus with useRef -a11y', () => {
|
|
124
|
+
before('loading page', async () => {
|
|
125
|
+
const errorOnGo = await DSAccordionNativeCO.focusOnItemURL.go();
|
|
126
|
+
if (errorOnGo) throw errorOnGo;
|
|
127
|
+
});
|
|
128
|
+
it('01: should be a11y compliant with useRef', async () => {
|
|
129
|
+
const secondAccordion = await DSAccordionNativeCO.getAccordionHeader(1);
|
|
130
|
+
await secondAccordion.waitForDisplayed();
|
|
131
|
+
const result = await axeCoreCheck();
|
|
132
|
+
expect(result.length).toBe(0);
|
|
133
|
+
});
|
|
134
|
+
});
|
|
117
135
|
}
|
|
@@ -175,4 +175,26 @@ if (!browser.capabilities['ice:options'].isPhone && !browser.capabilities['ice:o
|
|
|
175
175
|
await expect(accordionContent).toExist();
|
|
176
176
|
});
|
|
177
177
|
});
|
|
178
|
+
|
|
179
|
+
// Native exposes a usable ref on the summary via the `dsAccordionnativeItemSummary` slot
|
|
180
|
+
// (verified: clicking the button focuses item 0's <summary>). Equivalent to the accordion
|
|
181
|
+
// FocusOnItem pattern (`dsAccordionItemHeader={{ innerRef }}`).
|
|
182
|
+
describe('PUI-18083 - AccordionNative, Focus with useRef -a11y', () => {
|
|
183
|
+
before('loading page', async () => {
|
|
184
|
+
const errorOnGo = await DSAccordionNativeCO.focusOnItemURL.go();
|
|
185
|
+
if (errorOnGo) throw errorOnGo;
|
|
186
|
+
});
|
|
187
|
+
it('01: should focus second item manually', async () => {
|
|
188
|
+
const secondAccordion = await DSAccordionNativeCO.getAccordionHeader(1);
|
|
189
|
+
await browser.keys(Key.Tab);
|
|
190
|
+
await browser.keys(Key.Tab);
|
|
191
|
+
await expect(secondAccordion).toBeFocused();
|
|
192
|
+
});
|
|
193
|
+
it('02: should use button to focus the first accordion item via ref', async () => {
|
|
194
|
+
const focusButton = await DSAccordionNativeCO.getButtonsByIndex(0);
|
|
195
|
+
await focusButton.click();
|
|
196
|
+
const firstAccordion = await DSAccordionNativeCO.getAccordionHeader(0);
|
|
197
|
+
await expect(firstAccordion).toBeFocused();
|
|
198
|
+
});
|
|
199
|
+
});
|
|
178
200
|
}
|
|
@@ -1,8 +1,11 @@
|
|
|
1
|
+
import { Key } from 'webdriverio';
|
|
1
2
|
import DSAccordionNativeCO from './DSAccordionNativeCO';
|
|
2
3
|
import { mouseOver } from '../helpers';
|
|
3
4
|
|
|
4
5
|
if (!browser.capabilities['ice:options'].isPhone && !browser.capabilities['ice:options'].isTablet) {
|
|
5
|
-
|
|
6
|
+
// Percy-aligned with ds-accordion (same describe + it titles) so snapshots compare
|
|
7
|
+
// against the accordion baseline. Story content is equivalent. See POC_FINDINGS.md.
|
|
8
|
+
describe('PUI-6111 - Accordion visual tests, basic', () => {
|
|
6
9
|
before('loading page', async () => {
|
|
7
10
|
const errorOnGo = await DSAccordionNativeCO.basicURL.go();
|
|
8
11
|
if (errorOnGo) throw errorOnGo;
|
|
@@ -15,9 +18,7 @@ if (!browser.capabilities['ice:options'].isPhone && !browser.capabilities['ice:o
|
|
|
15
18
|
it('02: should display open first one', async () => {
|
|
16
19
|
await (await DSAccordionNativeCO.getAccordionHeader(1)).waitForDisplayed();
|
|
17
20
|
await (await DSAccordionNativeCO.getAccordionHeader(1)).click();
|
|
18
|
-
const snapshot = await browser.checkSnapshot(
|
|
19
|
-
DSAccordionNativeCO.snapshotPath('accordion-native-one-open'),
|
|
20
|
-
);
|
|
21
|
+
const snapshot = await browser.checkSnapshot(DSAccordionNativeCO.snapshotPath('accordion-native-one-open'));
|
|
21
22
|
await expect(snapshot).toEqual(0);
|
|
22
23
|
});
|
|
23
24
|
it('03: should display focus on the second, hover on third', async () => {
|
|
@@ -29,7 +30,10 @@ if (!browser.capabilities['ice:options'].isPhone && !browser.capabilities['ice:o
|
|
|
29
30
|
});
|
|
30
31
|
});
|
|
31
32
|
|
|
32
|
-
|
|
33
|
+
// Percy-aligned with ds-accordion: the native HeaderControlExamples story now renders the same
|
|
34
|
+
// 3 sections incl. the MiniToolbar (DDmenu), so this snapshot compares against the accordion
|
|
35
|
+
// baseline and surfaces the real layout deltas. See POC_FINDINGS.md.
|
|
36
|
+
describe('PUI-7979 - Accordion, header props -visual', () => {
|
|
33
37
|
before('loading page', async () => {
|
|
34
38
|
const errorOnGo = await DSAccordionNativeCO.headerControls.go();
|
|
35
39
|
if (errorOnGo) throw errorOnGo;
|
|
@@ -39,14 +43,18 @@ if (!browser.capabilities['ice:options'].isPhone && !browser.capabilities['ice:o
|
|
|
39
43
|
await (await DSAccordionNativeCO.getAccordionHeader(1)).click();
|
|
40
44
|
const content = await DSAccordionNativeCO.getContents(1);
|
|
41
45
|
await content.waitForDisplayed();
|
|
42
|
-
const snapshot = await browser.checkSnapshot(
|
|
43
|
-
|
|
44
|
-
|
|
46
|
+
const snapshot = await browser.checkSnapshot(DSAccordionNativeCO.snapshotPath('accordion-native-header-props'));
|
|
47
|
+
await expect(snapshot).toEqual(0);
|
|
48
|
+
});
|
|
49
|
+
it('02: should display accordion with open toolbar', async () => {
|
|
50
|
+
await (await DSAccordionNativeCO.getToolbarByIndex(1)).click();
|
|
51
|
+
const snapshot = await browser.checkSnapshot(DSAccordionNativeCO.snapshotPath('accordion-native-toolbar-props'));
|
|
45
52
|
await expect(snapshot).toEqual(0);
|
|
46
53
|
});
|
|
47
54
|
});
|
|
48
55
|
|
|
49
|
-
|
|
56
|
+
// Percy-aligned with ds-accordion. Story content is equivalent. See POC_FINDINGS.md.
|
|
57
|
+
describe('PUI-7772 - Accordion, custom actions -visual', () => {
|
|
50
58
|
before('loading page', async () => {
|
|
51
59
|
const errorOnGo = await DSAccordionNativeCO.customActions.go();
|
|
52
60
|
if (errorOnGo) throw errorOnGo;
|
|
@@ -67,7 +75,8 @@ if (!browser.capabilities['ice:options'].isPhone && !browser.capabilities['ice:o
|
|
|
67
75
|
});
|
|
68
76
|
});
|
|
69
77
|
|
|
70
|
-
|
|
78
|
+
// Percy-aligned with ds-accordion. Story content is identical. See POC_FINDINGS.md.
|
|
79
|
+
describe('PUI-7982 - Accordion, multiple -visual', () => {
|
|
71
80
|
before('loading page', async () => {
|
|
72
81
|
const errorOnGo = await DSAccordionNativeCO.multipleURL.go();
|
|
73
82
|
if (errorOnGo) throw errorOnGo;
|
|
@@ -79,42 +88,60 @@ if (!browser.capabilities['ice:options'].isPhone && !browser.capabilities['ice:o
|
|
|
79
88
|
const secondContent = await DSAccordionNativeCO.getContents(1);
|
|
80
89
|
await firstContent.waitForDisplayed();
|
|
81
90
|
await secondContent.waitForDisplayed();
|
|
82
|
-
const snapshot = await browser.checkSnapshot(
|
|
83
|
-
DSAccordionNativeCO.snapshotPath('accordion-native-two-expanded'),
|
|
84
|
-
);
|
|
91
|
+
const snapshot = await browser.checkSnapshot(DSAccordionNativeCO.snapshotPath('accordion-native-two-expanded'));
|
|
85
92
|
await expect(snapshot).toEqual(0);
|
|
86
93
|
});
|
|
87
94
|
});
|
|
88
95
|
|
|
89
|
-
|
|
96
|
+
// Percy-aligned with ds-accordion: both stories now render the same deterministic tall content
|
|
97
|
+
// (40 plain rows), so this snapshot compares against the accordion baseline. The accordion story
|
|
98
|
+
// previously used the legacy ds-legacy-datagrids; replaced for determinism + parity. See QA_NOTES.
|
|
99
|
+
describe('PUI-8321 - Accordion, global height -visual', () => {
|
|
90
100
|
before('loading page', async () => {
|
|
91
101
|
const errorOnGo = await DSAccordionNativeCO.globalHeight.go();
|
|
92
102
|
if (errorOnGo) throw errorOnGo;
|
|
93
103
|
});
|
|
94
104
|
it('01: should display accordion with global height, not trimmed', async () => {
|
|
95
|
-
const
|
|
96
|
-
|
|
97
|
-
);
|
|
105
|
+
const addRow = await $('[data-testid="add-row"]');
|
|
106
|
+
await addRow.click();
|
|
107
|
+
await addRow.click();
|
|
108
|
+
await addRow.click();
|
|
109
|
+
const content = await DSAccordionNativeCO.getContents(0);
|
|
110
|
+
await content.waitForDisplayed();
|
|
111
|
+
const snapshot = await browser.checkSnapshot(DSAccordionNativeCO.snapshotPath('accordion-native-globalheight'));
|
|
98
112
|
await expect(snapshot).toEqual(0);
|
|
99
113
|
});
|
|
100
114
|
});
|
|
101
115
|
|
|
102
|
-
|
|
116
|
+
// Percy-aligned with ds-accordion. Interactions restored to match accordion (Tab x2 to focus the
|
|
117
|
+
// input, then open the date picker) so the captured states match. See POC_FINDINGS.md.
|
|
118
|
+
describe('PUI-9964 - Accordion, Actionable within -visual', () => {
|
|
103
119
|
before('loading page', async () => {
|
|
104
120
|
const errorOnGo = await DSAccordionNativeCO.datepickerInside.go();
|
|
105
121
|
if (errorOnGo) throw errorOnGo;
|
|
106
122
|
});
|
|
107
123
|
it('01: should input focused within accordion', async () => {
|
|
108
|
-
await
|
|
124
|
+
await browser.keys(Key.Tab);
|
|
125
|
+
await browser.keys(Key.Tab);
|
|
109
126
|
const snapshot = await browser.checkSnapshot(
|
|
110
127
|
DSAccordionNativeCO.snapshotPath('accordion-native-datepicker-inside'),
|
|
111
128
|
);
|
|
112
129
|
await expect(snapshot).toEqual(0);
|
|
113
130
|
});
|
|
131
|
+
it('02: should opened datepicker', async () => {
|
|
132
|
+
const datepicker = await DSAccordionNativeCO.getDatepickerBtn();
|
|
133
|
+
await datepicker.click();
|
|
134
|
+
const snapshot = await browser.checkSnapshot(
|
|
135
|
+
DSAccordionNativeCO.snapshotPath('accordion-native-datepicker-open'),
|
|
136
|
+
);
|
|
137
|
+
await expect(snapshot).toEqual(0);
|
|
138
|
+
});
|
|
114
139
|
});
|
|
115
140
|
}
|
|
116
141
|
|
|
117
142
|
if (browser.capabilities['ice:options'].isPhone) {
|
|
143
|
+
// Not Percy-aligned: accordion swaps to DSMobileAccordion on phone; native renders itself.
|
|
144
|
+
// Different components. Kept under PUI-18083. See POC_FINDINGS.md.
|
|
118
145
|
describe('PUI-18083 - AccordionNative, desktop to mobile -visual', () => {
|
|
119
146
|
before('loading page', async () => {
|
|
120
147
|
const errorOnGo = await DSAccordionNativeCO.toMobileURL.go();
|
|
@@ -45,6 +45,8 @@ export default class DSAccordionNativeCO extends PageObject {
|
|
|
45
45
|
|
|
46
46
|
static keepContentURL = new Urlbuilder(PATH_E2E_ACCORDION_NATIVE, 'keep-content-mounted');
|
|
47
47
|
|
|
48
|
+
static focusOnItemURL = new Urlbuilder(PATH_E2E_ACCORDION_NATIVE, 'focus-on-item-test');
|
|
49
|
+
|
|
48
50
|
// Snapshots
|
|
49
51
|
static snapshotPath(example = 'basic') {
|
|
50
52
|
return PageObject.getSnapshotPathBuilder('AccordionNative', example, 'ds-accordion-native');
|
|
@@ -102,6 +104,16 @@ export default class DSAccordionNativeCO extends PageObject {
|
|
|
102
104
|
|
|
103
105
|
static getButtonsByIndex = async (index) => getElementByIndex(this.getButtons, index);
|
|
104
106
|
|
|
107
|
+
static async getToolbarTriggers() {
|
|
108
|
+
return $$('[data-testid="ds-mini-toolbar__elipsis"]');
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
static getToolbarByIndex = async (index) => getElementByIndex(this.getToolbarTriggers, index);
|
|
112
|
+
|
|
113
|
+
static async getDatepickerBtn() {
|
|
114
|
+
return $('[data-testid="ds-controlled-date-time-picker-calendar-timewheel-trigger-icon"]');
|
|
115
|
+
}
|
|
116
|
+
|
|
105
117
|
// Slots (data-dimsum-slot attributes)
|
|
106
118
|
static async getAccordionContainerSlotByIndex(index = 0) {
|
|
107
119
|
return $$('[data-dimsum-slot="dsAccordionnativeRoot"]')[index];
|
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
# QA Notes — Native Accordion E2E parity (PUI-18083)
|
|
2
|
+
|
|
3
|
+
Quick map for reviewing results: which scenarios stayed **the same** (compared against accordion),
|
|
4
|
+
which were **modified** (present but NOT comparable), and which are **not covered** (gap, no test).
|
|
5
|
+
|
|
6
|
+
> **Key reading — what `PUI-18083` means in these specs:**
|
|
7
|
+
> In the **visual** specs, `PUI-18083` does NOT mean "untouched". It means the scenario was left
|
|
8
|
+
> **on purpose** under the native PUI because the story **renders something different** from the
|
|
9
|
+
> accordion one, so **Percy does NOT compare it** against accordion (it has its own native
|
|
10
|
+
> baseline). The ones tagged with an accordion PUI (`PUI-6111`, `PUI-7772`, …) **are** compared.
|
|
11
|
+
> In the **functional / axe** specs, all of them are under `PUI-18083` by design: they produce no
|
|
12
|
+
> snapshots and were never part of the Percy comparison.
|
|
13
|
+
|
|
14
|
+
## Master table — VISUAL (what Percy compares)
|
|
15
|
+
|
|
16
|
+
| Scenario (story) | PUI in the test | Percy compares vs accordion? | State | Why |
|
|
17
|
+
| ------------------------------------------------------------- | --------------- | ---------------------------- | ----------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
18
|
+
| **basic** | `PUI-6111` | ✅ Yes | Same | Equivalent story |
|
|
19
|
+
| **custom actions** (RenderCustomActions) | `PUI-7772` | ✅ Yes | Same | Equivalent story |
|
|
20
|
+
| **multiple** | `PUI-7982` | ✅ Yes | Same | Identical story |
|
|
21
|
+
| **aria-disabled** (ApplyAriaDisabled) | `PUI-14324` | ✅ Yes | Same | Identical story |
|
|
22
|
+
| **scrollable-content** | `PUI-17174` | ✅ Yes | Same | Equivalent story — but the expected diff is **NOT cosmetic**: the native slot does not apply style-props → no scroll. Defect **[PUI-18640](https://jira.elliemae.io/browse/PUI-18640)** |
|
|
23
|
+
| **wrapLabel** | `PUI-17178` | ✅ Yes | Same | Equivalent story |
|
|
24
|
+
| **actionable-within** (01 input focused + 02 open datepicker) | `PUI-9964` | ✅ Yes | Same\* | \*`Tab`×2 restored for 01; 02 opens the same `DSControlledDateTimePicker` calendar (`getDatepickerBtn` CO method added). Diff reveals whether focus reaches the input (custom actions are siblings of `<summary>`) |
|
|
25
|
+
| **header props** (HeaderControlExamples) | `PUI-7979` | ✅ Yes | Same | The MiniToolbar (DDmenu) section was added to the native story so it matches accordion (3 sections); the diff now surfaces the real layout deltas |
|
|
26
|
+
| **global height** | `PUI-8321` | ✅ Yes | Same | Both stories: item 0 opened via `activeValue={0}` + an "Add row" button (legacy `ds-legacy-datagrids` removed). The **visual test clicks "Add row" ×3 then snapshots** → verifies the panel grows to fit and looks right (not trimmed) after adding rows |
|
|
27
|
+
| **slots** | `PUI-15348` | ✅ Yes | Same | Native consumes the same `styleOverrides` colors (verified in the DOM); the diff reflects the slot-tree mapping (native `summary/heading/chevron` vs accordion `header/header-container/addon`), not broken theming |
|
|
28
|
+
| **header props 02** (open toolbar) | `PUI-7979` | ✅ Yes | Same | Implemented in native: MiniToolbar section added + `getToolbarByIndex` CO method; the open-dropdown state compares against accordion |
|
|
29
|
+
| **actionable-within 02** (open datepicker) | `PUI-9964` | ✅ Yes | Same | Implemented: native renders the same `DSControlledDateTimePicker`; added `getDatepickerBtn` CO method + the 02 it |
|
|
30
|
+
| **desktop-to-mobile** | `PUI-18083` | ❌ No | Modified | Accordion swaps to `DSMobileAccordion`; native renders itself (different component) |
|
|
31
|
+
| **tooltip** | — | ⬜ Not present | Not covered | Native has no truncation tooltip; default is now wrap. Defect **[PUI-18641](https://jira.elliemae.io/browse/PUI-18641)** |
|
|
32
|
+
| **long content** | — | ⬜ Not present | Not covered | Accordion's PUI-9965 reuses the **Tooltip** story (hover long titles → truncation tooltip). Native has no tooltip → gap. See **[PUI-18641](https://jira.elliemae.io/browse/PUI-18641)** |
|
|
33
|
+
|
|
34
|
+
**How to read the Percy report:** every **✅ row** pairs against an accordion baseline (same snapshot
|
|
35
|
+
name). The only **❌ row** left is **desktop-to-mobile** (`PUI-18083`) — it generates a separate
|
|
36
|
+
native snapshot (different component), so if you see it "without baseline" or as new, that's expected;
|
|
37
|
+
don't compare it. The **⬜** rows generate nothing.
|
|
38
|
+
|
|
39
|
+
## Table — FUNCTIONAL / AXE (native regression, NOT Percy)
|
|
40
|
+
|
|
41
|
+
All under `PUI-18083` by design: they produce no snapshots and are not compared visually. They are
|
|
42
|
+
the regression that proves functionality survives. Here "modified" = the dev **adapted** it to the
|
|
43
|
+
native DOM (correct), not that it is broken.
|
|
44
|
+
|
|
45
|
+
| Scenario | In native? | Note |
|
|
46
|
+
| ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ---------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
47
|
+
| basic, multiple, keyboard-nav, custom-actions-hooks, conditional-render, keep-content, disabled, header-controls, role-heading, slots, aria-disabled, **header-structure**, **controlled**, **input-inside** | ✅ Covered | Several **adapted** to the native DOM (`role=heading`→`<h3>`, id→index, `CellCO`→`data-testid`) — expected to **pass**. `header-structure` mirrors accordion PUI-18621; `controlled` + `input-inside` are new coverage added to **both** suites |
|
|
48
|
+
| **tooltip** (func + axe) | ⬜ Removed | Native has no tooltip — see [PUI-18641](https://jira.elliemae.io/browse/PUI-18641) |
|
|
49
|
+
| **useRef focus** (func + axe) | ✅ Covered | **Verified working in the browser**: passing `dsAccordionnativeItemSummary={{ innerRef }}` forwards a usable ref to the `<summary>` (clicking the button focuses item 0). Native story + func/axe restored. NB: the _item-level_ `innerRef` prop is not exposed, but the **summary slot** path works (native slots use `ds-system styled()` — same machinery as accordion's `dsAccordionItemHeader` innerRef) |
|
|
50
|
+
| **toolbar** (axe header-controls 02) | ✅ Covered | Added: MiniToolbar (DDmenu) in the story + `getToolbarByIndex` CO method; the axe 02 opens the dropdown and scans |
|
|
51
|
+
|
|
52
|
+
## Story coverage parity (vs ds-accordion e2e)
|
|
53
|
+
|
|
54
|
+
All **21** `stories/ds-accordion/e2e` stories have a native counterpart — **no presence gap**. Test
|
|
55
|
+
coverage now matches the accordion suite, with these notes:
|
|
56
|
+
|
|
57
|
+
- **Added for parity:** native **`header-structure`** func (mirrors accordion PUI-18621); **`controlled`**
|
|
58
|
+
and **`input-inside`** func specs in **both** suites. **GlobalHeight** now has an "Add row" button and its
|
|
59
|
+
**visual test clicks it ×3 then snapshots** — the dynamic-growth/looks-right check lives in the visual
|
|
60
|
+
test (not a separate func test), since "global height" is fundamentally a visual concern.
|
|
61
|
+
- **Default-open nuance (documented, not a defect):** `ds-accordion` opens item 0 by default in the
|
|
62
|
+
GlobalHeight story while `ds-accordion-native` opens nothing when uncontrolled (`initialActive = null`).
|
|
63
|
+
Native **does support open-by-default** via `activeValue` (or the item `open` prop) — it just doesn't
|
|
64
|
+
auto-open the first item implicitly. The GlobalHeight stories now set `activeValue={0}` in both, so
|
|
65
|
+
this is moot for the test; a migrating consumer relying on the implicit auto-open would add `activeValue`.
|
|
66
|
+
- **Accordion `controlled` + `input-inside` describes use `PUI-XXXXX` placeholders** → they need new
|
|
67
|
+
JIRA test tickets. (Also fixed the accordion CO `inputInside` URL — it had a wrong-case story id.)
|
|
68
|
+
- **Still gaps (blocked on defects):** `tooltip` / `long-content` ([PUI-18641](https://jira.elliemae.io/browse/PUI-18641), no native tooltip);
|
|
69
|
+
`XstyledpropsInContent` ([PUI-18640](https://jira.elliemae.io/browse/PUI-18640) — content slot drops the `p` padding prop too).
|
|
70
|
+
|
|
71
|
+
## Defects / parity findings
|
|
72
|
+
|
|
73
|
+
| Ticket | Component | Summary | Status |
|
|
74
|
+
| ------------------------------------------------------ | ------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------ |
|
|
75
|
+
| [PUI-18640](https://jira.elliemae.io/browse/PUI-18640) | ds-accordion-native | The `dsAccordionnativeItemContentContainer` slot **does not apply style-props** — `maxHeight`/`overflow` (scrollable-content) **and** padding `p` (XstyledpropsInContent) — the way `ds-accordion` does. Same story → accordion clips/scrolls/pads, native does not. **Breaking change** for consumers that style the content via the slot. Relates to PUI-18083. | Open |
|
|
76
|
+
| [PUI-18641](https://jira.elliemae.io/browse/PUI-18641) | ds-accordion-native | Default title behavior changed from **truncate-with-tooltip** (accordion) to **wrap** (native). With `wrapLabel={false}` the title truncates with an ellipsis but **still shows no tooltip on hover** → the full text cannot be read. No story demonstrates truncate+tooltip. **Backwards-incompatible** default + readability gap. Relates to PUI-18083. | Open |
|
|
77
|
+
| [PUI-18642](https://jira.elliemae.io/browse/PUI-18642) | ds-accordion-native | Arrow Icon visual spec violations (Accordion Draft v1.5.0): **(1)** region width is not the spec'd **20px**; **(2)** when the title wraps the Arrow Icon is **center-aligned instead of top-aligned** (spec: "Fixed Top-aligned — Region A"). Relates to PUI-18083. | Open |
|
|
78
|
+
|
|
79
|
+
> Why PUI-18640 is not a story bug: the native E2E story is a **faithful copy** of the accordion one
|
|
80
|
+
> (same `maxHeight: 100, overflow: 'auto'` passed as bare keys). In accordion it works because the
|
|
81
|
+
> slot interprets style-props; in native it does not. DOM evidence: accordion `max-height: 100px`
|
|
82
|
+
> (via the generated class) / native `max-height: none`. The native `examples/ScrollableContent`
|
|
83
|
+
> uses `style:{}` as a workaround.
|
|
84
|
+
|
|
85
|
+
---
|
|
86
|
+
|
|
87
|
+
_Full detail (A/B/C/D divergence audit, Percy mechanism, and run commands) in
|
|
88
|
+
[`stories/ds-accordion-native/POC_FINDINGS.md`](../../stories/ds-accordion-native/POC_FINDINGS.md)._
|
|
@@ -2,7 +2,8 @@ import { Key } from 'webdriverio';
|
|
|
2
2
|
import DSAccordionNativeCO from '../DSAccordionNativeCO';
|
|
3
3
|
|
|
4
4
|
if (!browser.capabilities['ice:options'].isPhone && !browser.capabilities['ice:options'].isTablet) {
|
|
5
|
-
|
|
5
|
+
// Percy-aligned with ds-accordion (story content identical). See POC_FINDINGS.md.
|
|
6
|
+
describe('PUI-14324 - Accordion:: ApplyAriaDisabled prop - visual tests', () => {
|
|
6
7
|
before('loading page', async () => {
|
|
7
8
|
const errorOnGo = await DSAccordionNativeCO.applyAriaDisabled.go();
|
|
8
9
|
if (errorOnGo) throw errorOnGo;
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import DSAccordionNativeCO from '../DSAccordionNativeCO';
|
|
2
|
+
|
|
3
|
+
if (!browser.capabilities['ice:options'].isPhone && !browser.capabilities['ice:options'].isTablet) {
|
|
4
|
+
describe('PUI-18083 - AccordionNative, controlled -func', () => {
|
|
5
|
+
before('loading page', async () => {
|
|
6
|
+
const errorOnGo = await DSAccordionNativeCO.controlled.go();
|
|
7
|
+
if (errorOnGo) throw errorOnGo;
|
|
8
|
+
});
|
|
9
|
+
it('01: single-open: opening another item collapses the previously open one', async () => {
|
|
10
|
+
await expect(await DSAccordionNativeCO.getAccordionHeader(0)).toHaveAttribute('aria-expanded', 'true');
|
|
11
|
+
await (await DSAccordionNativeCO.getAccordionHeader(1)).click();
|
|
12
|
+
await expect(await DSAccordionNativeCO.getAccordionHeader(1)).toHaveAttribute('aria-expanded', 'true');
|
|
13
|
+
await expect(await DSAccordionNativeCO.getAccordionHeader(0)).toHaveAttribute('aria-expanded', 'false');
|
|
14
|
+
});
|
|
15
|
+
it('02: multiple-open: opening two items keeps both expanded', async () => {
|
|
16
|
+
await (await DSAccordionNativeCO.getAccordionHeader(3)).click();
|
|
17
|
+
await (await DSAccordionNativeCO.getAccordionHeader(4)).click();
|
|
18
|
+
await expect(await DSAccordionNativeCO.getAccordionHeader(3)).toHaveAttribute('aria-expanded', 'true');
|
|
19
|
+
await expect(await DSAccordionNativeCO.getAccordionHeader(4)).toHaveAttribute('aria-expanded', 'true');
|
|
20
|
+
});
|
|
21
|
+
});
|
|
22
|
+
}
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
import DSAccordionNativeCO from '../DSAccordionNativeCO';
|
|
2
|
+
|
|
3
|
+
if (
|
|
4
|
+
(!browser.capabilities['ice:options'].isPhone &&
|
|
5
|
+
!browser.capabilities['ice:options'].isTablet &&
|
|
6
|
+
browser.capabilities.browserName === 'chrome') ||
|
|
7
|
+
browser.capabilities.browserName === 'Chrome'
|
|
8
|
+
) {
|
|
9
|
+
// Native equivalent of the ds-accordion PUI-18621 structural test. In native the heading is a real
|
|
10
|
+
// <h3> inside <summary> and custom actions render as a SIBLING of <details>, so the heading contains
|
|
11
|
+
// NO interactive elements (the toggle IS the <summary>) and the actions live outside it.
|
|
12
|
+
describe('PUI-18083 - AccordionNative:: heading structure (custom actions outside heading) - func', () => {
|
|
13
|
+
before('loading page', async () => {
|
|
14
|
+
const errorOnGo = await DSAccordionNativeCO.headerControls.go();
|
|
15
|
+
if (errorOnGo) throw errorOnGo;
|
|
16
|
+
});
|
|
17
|
+
|
|
18
|
+
it('01: heading (h3) should contain no interactive elements', async () => {
|
|
19
|
+
const heading = await DSAccordionNativeCO.getHeadingByIndex(0);
|
|
20
|
+
await expect(await heading.getTagName()).toBe('h3');
|
|
21
|
+
const buttonsInsideHeading = await heading.$$('button');
|
|
22
|
+
await expect(buttonsInsideHeading.length).toBe(0);
|
|
23
|
+
});
|
|
24
|
+
|
|
25
|
+
it('02: custom actions container should exist outside the heading', async () => {
|
|
26
|
+
const customActionsContainer = await DSAccordionNativeCO.getAccordionItemCustomActionsContainerSlotByIndex(0);
|
|
27
|
+
await expect(customActionsContainer).toExist();
|
|
28
|
+
});
|
|
29
|
+
|
|
30
|
+
it('03: action buttons in custom actions container should reflect correct enabled/disabled state', async () => {
|
|
31
|
+
const enabledContainer = await DSAccordionNativeCO.getAccordionItemCustomActionsContainerSlotByIndex(0);
|
|
32
|
+
const enabledButton = await enabledContainer.$('[data-testid="ds-button"]');
|
|
33
|
+
await expect(enabledButton).toBeDisplayed();
|
|
34
|
+
await expect(enabledButton).toBeEnabled();
|
|
35
|
+
|
|
36
|
+
const disabledContainer = await DSAccordionNativeCO.getAccordionItemCustomActionsContainerSlotByIndex(2);
|
|
37
|
+
const disabledButton = await disabledContainer.$('[data-testid="ds-button"]');
|
|
38
|
+
await expect(disabledButton).toBeDisplayed();
|
|
39
|
+
await expect(disabledButton).not.toBeEnabled();
|
|
40
|
+
});
|
|
41
|
+
|
|
42
|
+
it('04: toolbar trigger in custom actions should open dropdown menu on click', async () => {
|
|
43
|
+
const toolbar = await DSAccordionNativeCO.getToolbarByIndex(0);
|
|
44
|
+
// The native ellipsis sits at the far-right edge of the header (custom actions are a sibling
|
|
45
|
+
// of <details>); a WebDriver coordinate click is flaky there and the menu doesn't open. A
|
|
46
|
+
// direct DOM click reliably toggles the DSDropdownMenuV2 (verified in the rendered DOM).
|
|
47
|
+
await browser.execute((el) => el.click(), toolbar);
|
|
48
|
+
const firstMenuOption = await $('*=Login');
|
|
49
|
+
await firstMenuOption.waitForDisplayed();
|
|
50
|
+
await expect(firstMenuOption).toBeDisplayed();
|
|
51
|
+
});
|
|
52
|
+
});
|
|
53
|
+
}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import DSAccordionNativeCO from '../DSAccordionNativeCO';
|
|
2
|
+
|
|
3
|
+
if (!browser.capabilities['ice:options'].isPhone && !browser.capabilities['ice:options'].isTablet) {
|
|
4
|
+
describe('PUI-18083 - AccordionNative, input inside content -func', () => {
|
|
5
|
+
before('loading page', async () => {
|
|
6
|
+
const errorOnGo = await DSAccordionNativeCO.inputInside.go();
|
|
7
|
+
if (errorOnGo) throw errorOnGo;
|
|
8
|
+
});
|
|
9
|
+
it('01: should type into an input rendered inside the open accordion item', async () => {
|
|
10
|
+
const input = await $('[data-testid="task-name"]');
|
|
11
|
+
await input.waitForDisplayed();
|
|
12
|
+
await input.setValue('Test task');
|
|
13
|
+
await expect(input).toHaveValue('Test task');
|
|
14
|
+
});
|
|
15
|
+
});
|
|
16
|
+
}
|
package/ds-accordion-native/scrollable-content/DSAccordionNative.scrollable-content.visual.spec.js
CHANGED
|
@@ -3,7 +3,8 @@ import { Key } from 'webdriverio';
|
|
|
3
3
|
import DSAccordionNativeCO from '../DSAccordionNativeCO';
|
|
4
4
|
|
|
5
5
|
if (!browser.capabilities['ice:options'].isPhone && !browser.capabilities['ice:options'].isTablet) {
|
|
6
|
-
|
|
6
|
+
// Percy-aligned with ds-accordion (story content equivalent). See POC_FINDINGS.md.
|
|
7
|
+
describe('PUI-17174 - Accordion: Scrollable content -Visual', () => {
|
|
7
8
|
before('loading page', async () => {
|
|
8
9
|
const errorOnGo = await DSAccordionNativeCO.scrollableContent.go();
|
|
9
10
|
if (errorOnGo) throw errorOnGo;
|
|
@@ -1,7 +1,10 @@
|
|
|
1
1
|
import DSAccordionNativeCO from '../DSAccordionNativeCO';
|
|
2
2
|
|
|
3
3
|
if (!browser.capabilities['ice:options'].isPhone && !browser.capabilities['ice:options'].isTablet) {
|
|
4
|
-
|
|
4
|
+
// Percy-aligned with ds-accordion: native consumes the same styleOverrides colors (verified in the
|
|
5
|
+
// DOM). The diff reflects the slot-tree mapping (native summary/heading/chevron vs accordion
|
|
6
|
+
// header/header-container/addon), not broken theming. See QA_NOTES.
|
|
7
|
+
describe('PUI-15348 - Accordion: Slots -Visual', () => {
|
|
5
8
|
before('loading page', async () => {
|
|
6
9
|
const errorOnGo = await DSAccordionNativeCO.slotsURL.go();
|
|
7
10
|
if (errorOnGo) throw errorOnGo;
|
|
@@ -3,7 +3,8 @@ import { Key } from 'webdriverio';
|
|
|
3
3
|
import DSAccordionNativeCO from '../DSAccordionNativeCO';
|
|
4
4
|
|
|
5
5
|
if (!browser.capabilities['ice:options'].isPhone && !browser.capabilities['ice:options'].isTablet) {
|
|
6
|
-
|
|
6
|
+
// Percy-aligned with ds-accordion (story content equivalent). See POC_FINDINGS.md.
|
|
7
|
+
describe('PUI-17178 - Accordion: wrapLabel -Visual', () => {
|
|
7
8
|
before('loading page', async () => {
|
|
8
9
|
const errorOnGo = await DSAccordionNativeCO.wrapLabel.go();
|
|
9
10
|
if (errorOnGo) throw errorOnGo;
|
|
@@ -13,9 +14,7 @@ if (!browser.capabilities['ice:options'].isPhone && !browser.capabilities['ice:o
|
|
|
13
14
|
await (await DSAccordionNativeCO.getAccordionHeader(1)).waitForDisplayed();
|
|
14
15
|
await browser.keys(Key.Tab);
|
|
15
16
|
await browser.keys(Key.Return);
|
|
16
|
-
const snapshot = await browser.eyesCheckSnapshot(
|
|
17
|
-
DSAccordionNativeCO.snapshotPath('accordion-native-wrap-label'),
|
|
18
|
-
);
|
|
17
|
+
const snapshot = await browser.eyesCheckSnapshot(DSAccordionNativeCO.snapshotPath('accordion-native-wrap-label'));
|
|
19
18
|
await expect(snapshot).toEqual(0);
|
|
20
19
|
});
|
|
21
20
|
});
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
import { Key } from 'webdriverio';
|
|
2
|
+
import DateRangePickerCO from '../DateRangePickerCO';
|
|
3
|
+
|
|
4
|
+
// Tests for the fix introduced in PUI-15568 — each day/month/year segment now exposes a
|
|
5
|
+
// name-only aria-label ("day"/"month"/"year") with no native role word and no sibling-field
|
|
6
|
+
// state; per-field state lives on role="spinbutton" + aria-valuetext.
|
|
7
|
+
// Chrome-only: pure DOM-attribute assertions are identical across browsers.
|
|
8
|
+
|
|
9
|
+
// Asserts a single segment input is name-only: aria-label === field name, spinbutton role,
|
|
10
|
+
// empty value-text, and none of the leaked phrases the defect used to inject into the label.
|
|
11
|
+
const assertNameOnlyEmptySegment = async (input, name) => {
|
|
12
|
+
await expect(input).toHaveAttribute('aria-label', name);
|
|
13
|
+
await expect(input).toHaveAttribute('role', 'spinbutton');
|
|
14
|
+
await expect(input).toHaveAttribute('aria-valuetext', 'empty');
|
|
15
|
+
const label = await input.getAttribute('aria-label');
|
|
16
|
+
expect(label).not.toContain('input field');
|
|
17
|
+
expect(label).not.toContain('current values');
|
|
18
|
+
};
|
|
19
|
+
|
|
20
|
+
if (
|
|
21
|
+
(!browser.capabilities['ice:options'].isPhone &&
|
|
22
|
+
!browser.capabilities['ice:options'].isTablet &&
|
|
23
|
+
browser.capabilities.browserName === 'chrome') ||
|
|
24
|
+
browser.capabilities.browserName === 'Chrome'
|
|
25
|
+
) {
|
|
26
|
+
describe('PUI-18653 - DSControlledDateRangePicker:: date segment aria-labels - Func', () => {
|
|
27
|
+
before('loading page', async () => {
|
|
28
|
+
const errorOnGo = await DateRangePickerCO.basic.go();
|
|
29
|
+
if (errorOnGo) throw errorOnGo;
|
|
30
|
+
});
|
|
31
|
+
|
|
32
|
+
// Static reads on the empty initial state — consolidated into one it() (no interaction).
|
|
33
|
+
// index 0 = Start date group, index 1 = End date group.
|
|
34
|
+
it('01: each segment exposes a name-only aria-label, spinbutton role and empty value-text', async () => {
|
|
35
|
+
// Start date group
|
|
36
|
+
await assertNameOnlyEmptySegment(await DateRangePickerCO.getMonthInputByIndex(0), 'month');
|
|
37
|
+
await assertNameOnlyEmptySegment(await DateRangePickerCO.getDayInputByIndex(0), 'day');
|
|
38
|
+
await assertNameOnlyEmptySegment(await DateRangePickerCO.getYearInputByIndex(0), 'year');
|
|
39
|
+
// End date group
|
|
40
|
+
await assertNameOnlyEmptySegment(await DateRangePickerCO.getMonthInputByIndex(1), 'month');
|
|
41
|
+
await assertNameOnlyEmptySegment(await DateRangePickerCO.getDayInputByIndex(1), 'day');
|
|
42
|
+
await assertNameOnlyEmptySegment(await DateRangePickerCO.getYearInputByIndex(1), 'year');
|
|
43
|
+
});
|
|
44
|
+
|
|
45
|
+
it('02: filling one segment does not leak its value into sibling aria-labels', async () => {
|
|
46
|
+
const month = await DateRangePickerCO.getMonthInputByIndex(0);
|
|
47
|
+
await month.click();
|
|
48
|
+
await browser.keys(Key.ArrowUp); // 01 / January
|
|
49
|
+
await browser.keys(Key.ArrowUp); // 02 / February
|
|
50
|
+
|
|
51
|
+
// filled field announces its OWN value via aria-valuetext; label stays name-only
|
|
52
|
+
await expect(month).toHaveAttribute('aria-label', 'month');
|
|
53
|
+
await expect(month).toHaveAttribute('aria-valuetext', 'February');
|
|
54
|
+
|
|
55
|
+
// siblings stay name-only + empty — no "February" leaks into their names
|
|
56
|
+
const day = await DateRangePickerCO.getDayInputByIndex(0);
|
|
57
|
+
const year = await DateRangePickerCO.getYearInputByIndex(0);
|
|
58
|
+
await expect(day).toHaveAttribute('aria-label', 'day');
|
|
59
|
+
await expect(day).toHaveAttribute('aria-valuetext', 'empty');
|
|
60
|
+
await expect(year).toHaveAttribute('aria-label', 'year');
|
|
61
|
+
await expect(year).toHaveAttribute('aria-valuetext', 'empty');
|
|
62
|
+
});
|
|
63
|
+
});
|
|
64
|
+
}
|
|
@@ -12,6 +12,7 @@ const DSShuttleV2DataTestIds = {
|
|
|
12
12
|
ITEM_LABEL_WRAPPER: 'ds-shuttlev2-item-label-wrapper',
|
|
13
13
|
ITEM_MIDSECTION_WRAPPER: 'ds-shuttlev2-item-midsection-wrapper',
|
|
14
14
|
ITEM_SELECTION: 'ds-shuttlev2-item-selection',
|
|
15
|
+
ITEM_SELECTION_CHECKBOX_UI: 'ds-shuttlev2-item-selection-checkbox-ui',
|
|
15
16
|
ITEM_ACTIONS_WRAPPER: 'ds-shuttlev2-item-actions-wrapper',
|
|
16
17
|
ITEM_ACTION_WRAPPER: 'ds-shuttlev2-item-action-wrapper',
|
|
17
18
|
ITEM_ACTION_BTN: 'ds-shuttlev2-item-action-btn',
|
|
@@ -77,6 +78,8 @@ export default class DSShuttleV2CO extends PageObject {
|
|
|
77
78
|
|
|
78
79
|
static insideDialogURL = new Urlbuilder(PATH_E2E_SHUTTLE_V2, 'inside-dialog-test');
|
|
79
80
|
|
|
81
|
+
static explicitSelectionUIURL = new Urlbuilder(PATH_E2E_SHUTTLE_V2, 'explicit-selection-ui-test');
|
|
82
|
+
|
|
80
83
|
// Getter's
|
|
81
84
|
|
|
82
85
|
static getHeaderSearchIcon = async (index = 0) =>
|
|
@@ -103,6 +106,14 @@ export default class DSShuttleV2CO extends PageObject {
|
|
|
103
106
|
|
|
104
107
|
static getItemSelection = async (index = 0) => $$(`[data-testid=${DSShuttleV2DataTestIds.ITEM_SELECTION}]`)[index];
|
|
105
108
|
|
|
109
|
+
static getItemSelectionCheckboxUI = async (index = 0) =>
|
|
110
|
+
$$(`[data-testid=${DSShuttleV2DataTestIds.ITEM_SELECTION_CHECKBOX_UI}]`)[index];
|
|
111
|
+
|
|
112
|
+
static getItemSelections = async () => $$(`[data-testid=${DSShuttleV2DataTestIds.ITEM_SELECTION}]`);
|
|
113
|
+
|
|
114
|
+
static getItemSelectionCheckboxUIs = async () =>
|
|
115
|
+
$$(`[data-testid=${DSShuttleV2DataTestIds.ITEM_SELECTION_CHECKBOX_UI}]`);
|
|
116
|
+
|
|
106
117
|
static getItemsActionsWrapper = async (index = 0) =>
|
|
107
118
|
$$(`[data-testid=${DSShuttleV2DataTestIds.ITEM_ACTIONS_WRAPPER}]`)[index];
|
|
108
119
|
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import DSShuttleV2CO from '../DSShuttleV2CO';
|
|
2
|
+
|
|
3
|
+
// Tests for the WCAG 1.4.1 "Use of Color" fix introduced in PUI-15539:
|
|
4
|
+
// the `explicitSelectionUI` flag swaps the color-only vertical bar for an
|
|
5
|
+
// explicit checkbox as the per-item selection indicator.
|
|
6
|
+
if (!browser.capabilities['ice:options'].isPhone && !browser.capabilities['ice:options'].isTablet) {
|
|
7
|
+
describe('PUI-18638 - DSShuttleV2:: explicitSelectionUI checkbox indicator - func', () => {
|
|
8
|
+
before(async () => {
|
|
9
|
+
const errorOnGo = await DSShuttleV2CO.explicitSelectionUIURL.go();
|
|
10
|
+
if (errorOnGo) throw errorOnGo;
|
|
11
|
+
});
|
|
12
|
+
|
|
13
|
+
it('01: should render an explicit checkbox indicator per item and no color-only vertical bar', async () => {
|
|
14
|
+
const verticalBars = await DSShuttleV2CO.getItemSelections();
|
|
15
|
+
const checkboxUIs = await DSShuttleV2CO.getItemSelectionCheckboxUIs();
|
|
16
|
+
await expect(verticalBars.length).toBe(0);
|
|
17
|
+
await expect(checkboxUIs.length).toBeGreaterThan(0);
|
|
18
|
+
await expect(await DSShuttleV2CO.getItemSelectionCheckboxUI(0)).toBeExisting();
|
|
19
|
+
});
|
|
20
|
+
|
|
21
|
+
it('02: should check the selection indicator after selecting a selectable item', async () => {
|
|
22
|
+
const selectableItem = await DSShuttleV2CO.getItemWrapper(0); // "Source 0.0" — even index, selectable
|
|
23
|
+
const selectableCheckbox = await DSShuttleV2CO.getItemCheckboxByIndex(0);
|
|
24
|
+
await expect(await selectableCheckbox.getAttribute('aria-checked')).toBe('false');
|
|
25
|
+
await selectableItem.click();
|
|
26
|
+
await expect(await selectableCheckbox.getAttribute('aria-checked')).toBe('true');
|
|
27
|
+
});
|
|
28
|
+
|
|
29
|
+
it('03: should keep the selection-prevented item disabled and unchecked after click', async () => {
|
|
30
|
+
const preventedItem = await DSShuttleV2CO.getItemWrapper(1); // "Source 0.1" — odd index, prevented
|
|
31
|
+
const preventedCheckbox = await DSShuttleV2CO.getItemCheckboxByIndex(1);
|
|
32
|
+
await expect(await preventedCheckbox.getAttribute('aria-disabled')).toBe('true');
|
|
33
|
+
await preventedItem.click();
|
|
34
|
+
await expect(await preventedCheckbox.getAttribute('aria-checked')).toBe('false');
|
|
35
|
+
});
|
|
36
|
+
});
|
|
37
|
+
}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import DSShuttleV2CO from '../DSShuttleV2CO';
|
|
2
|
+
|
|
3
|
+
// Visual coverage for the WCAG 1.4.1 "Use of Color" fix (PUI-15539): with
|
|
4
|
+
// `explicitSelectionUI`, items expose unselected, selected and disabled
|
|
5
|
+
// checkbox states as a non-color selection indicator.
|
|
6
|
+
if (!browser.capabilities['ice:options'].isPhone && !browser.capabilities['ice:options'].isTablet) {
|
|
7
|
+
describe('PUI-18639 - DSShuttleV2:: explicitSelectionUI checkbox indicators - visual', () => {
|
|
8
|
+
before(async () => {
|
|
9
|
+
const errorOnGo = await DSShuttleV2CO.explicitSelectionUIURL.go();
|
|
10
|
+
if (errorOnGo) throw errorOnGo;
|
|
11
|
+
});
|
|
12
|
+
|
|
13
|
+
it('01: should display unselected checkboxes and disabled checkboxes on prevented items', async () => {
|
|
14
|
+
const snapshot = await browser.percyCheckScreenshot();
|
|
15
|
+
await expect(snapshot).toEqual(0);
|
|
16
|
+
});
|
|
17
|
+
|
|
18
|
+
it('02: should display checked checkboxes and the BAB after selecting selectable items', async () => {
|
|
19
|
+
const firstSelectable = await DSShuttleV2CO.getItemWrapper(0); // "Source 0.0" — selectable
|
|
20
|
+
await firstSelectable.click();
|
|
21
|
+
const secondSelectable = await DSShuttleV2CO.getItemWrapper(2); // "Source 0.2" — selectable
|
|
22
|
+
await secondSelectable.click();
|
|
23
|
+
const snapshot = await browser.percyCheckScreenshot();
|
|
24
|
+
await expect(snapshot).toEqual(0);
|
|
25
|
+
});
|
|
26
|
+
});
|
|
27
|
+
}
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"type": "module",
|
|
3
3
|
"name": "dimsum-e2e-tests",
|
|
4
|
-
"version": "3.70.0-next.
|
|
4
|
+
"version": "3.70.0-next.40",
|
|
5
5
|
"description": "End-to-end tests for dimsum library",
|
|
6
6
|
"dependencies": {
|
|
7
7
|
"@elliemae/ds-legacy-button": "1.0.16",
|
|
@@ -39,155 +39,155 @@
|
|
|
39
39
|
"@elliemae/ds-legacy-wysiwygeditor": "1.0.16",
|
|
40
40
|
"@elliemae/ds-legacy-zipcode-search": "1.0.16",
|
|
41
41
|
"@elliemae/ds-legacy-zoom": "1.0.16",
|
|
42
|
-
"@elliemae/ds-accessibility": "3.70.0-next.
|
|
43
|
-
"@elliemae/ds-accordion": "3.70.0-next.
|
|
44
|
-
"@elliemae/ds-
|
|
45
|
-
"@elliemae/ds-
|
|
46
|
-
"@elliemae/ds-
|
|
47
|
-
"@elliemae/ds-
|
|
48
|
-
"@elliemae/ds-
|
|
49
|
-
"@elliemae/ds-
|
|
50
|
-
"@elliemae/ds-button-v2": "3.70.0-next.
|
|
51
|
-
"@elliemae/ds-card": "3.70.0-next.
|
|
52
|
-
"@elliemae/ds-card-v1": "3.70.0-next.
|
|
53
|
-
"@elliemae/ds-card-
|
|
54
|
-
"@elliemae/ds-card
|
|
55
|
-
"@elliemae/ds-card-v2
|
|
56
|
-
"@elliemae/ds-card-v2": "3.70.0-next.
|
|
57
|
-
"@elliemae/ds-card-
|
|
58
|
-
"@elliemae/ds-card-v3-poc": "3.70.0-next.
|
|
59
|
-
"@elliemae/ds-
|
|
60
|
-
"@elliemae/ds-
|
|
61
|
-
"@elliemae/ds-chat-
|
|
62
|
-
"@elliemae/ds-chat
|
|
63
|
-
"@elliemae/ds-chat-container
|
|
64
|
-
"@elliemae/ds-chat-empty-state": "3.70.0-next.
|
|
65
|
-
"@elliemae/ds-chat-
|
|
66
|
-
"@elliemae/ds-chat-
|
|
67
|
-
"@elliemae/ds-chat-message-delimeter": "3.70.0-next.
|
|
68
|
-
"@elliemae/ds-chat-sidebar": "3.70.0-next.
|
|
69
|
-
"@elliemae/ds-chat-system-message": "3.70.0-next.
|
|
70
|
-
"@elliemae/ds-chip": "3.70.0-next.
|
|
71
|
-
"@elliemae/ds-
|
|
72
|
-
"@elliemae/ds-
|
|
73
|
-
"@elliemae/ds-
|
|
74
|
-
"@elliemae/ds-
|
|
75
|
-
"@elliemae/ds-
|
|
76
|
-
"@elliemae/ds-
|
|
77
|
-
"@elliemae/ds-
|
|
78
|
-
"@elliemae/ds-
|
|
79
|
-
"@elliemae/ds-data-table-action-cell": "3.70.0-next.
|
|
80
|
-
"@elliemae/ds-data-table-cell": "3.70.0-next.
|
|
81
|
-
"@elliemae/ds-data-table-cell-header": "3.70.0-next.
|
|
82
|
-
"@elliemae/ds-data-table-
|
|
83
|
-
"@elliemae/ds-data-table-
|
|
84
|
-
"@elliemae/ds-data-table-
|
|
85
|
-
"@elliemae/ds-data-table-
|
|
86
|
-
"@elliemae/ds-
|
|
87
|
-
"@elliemae/ds-dataviz
|
|
88
|
-
"@elliemae/ds-
|
|
89
|
-
"@elliemae/ds-date-time-picker": "3.70.0-next.
|
|
90
|
-
"@elliemae/ds-
|
|
91
|
-
"@elliemae/ds-
|
|
92
|
-
"@elliemae/ds-
|
|
93
|
-
"@elliemae/ds-
|
|
94
|
-
"@elliemae/ds-
|
|
95
|
-
"@elliemae/ds-
|
|
96
|
-
"@elliemae/ds-
|
|
97
|
-
"@elliemae/ds-
|
|
98
|
-
"@elliemae/ds-
|
|
99
|
-
"@elliemae/ds-form-
|
|
100
|
-
"@elliemae/ds-form-
|
|
101
|
-
"@elliemae/ds-form-
|
|
102
|
-
"@elliemae/ds-form-helpers-mask-hooks": "3.70.0-next.
|
|
103
|
-
"@elliemae/ds-form-
|
|
104
|
-
"@elliemae/ds-form-input-textarea": "3.70.0-next.
|
|
105
|
-
"@elliemae/ds-form-layout-blocks": "3.70.0-next.
|
|
106
|
-
"@elliemae/ds-form-layout-autocomplete": "3.70.0-next.
|
|
107
|
-
"@elliemae/ds-form-layout-input-group": "3.70.0-next.
|
|
108
|
-
"@elliemae/ds-form-
|
|
109
|
-
"@elliemae/ds-form-
|
|
110
|
-
"@elliemae/ds-form-
|
|
111
|
-
"@elliemae/ds-form-
|
|
112
|
-
"@elliemae/ds-form-
|
|
113
|
-
"@elliemae/ds-form-
|
|
114
|
-
"@elliemae/ds-form-toggle": "3.70.0-next.
|
|
115
|
-
"@elliemae/ds-
|
|
116
|
-
"@elliemae/ds-
|
|
117
|
-
"@elliemae/ds-
|
|
118
|
-
"@elliemae/ds-hooks-
|
|
119
|
-
"@elliemae/ds-hooks-fontsize-
|
|
120
|
-
"@elliemae/ds-
|
|
121
|
-
"@elliemae/ds-hooks-
|
|
122
|
-
"@elliemae/ds-hooks-is-
|
|
123
|
-
"@elliemae/ds-hooks-
|
|
124
|
-
"@elliemae/ds-hooks-
|
|
125
|
-
"@elliemae/ds-hooks-
|
|
126
|
-
"@elliemae/ds-hooks-on-first-focus-in": "3.70.0-next.
|
|
127
|
-
"@elliemae/ds-
|
|
128
|
-
"@elliemae/ds-
|
|
129
|
-
"@elliemae/ds-
|
|
130
|
-
"@elliemae/ds-
|
|
131
|
-
"@elliemae/ds-indeterminate-progress-indicator": "3.70.0-next.
|
|
132
|
-
"@elliemae/ds-layout-provider": "3.70.0-next.
|
|
133
|
-
"@elliemae/ds-left-navigation": "3.70.0-next.
|
|
134
|
-
"@elliemae/ds-
|
|
135
|
-
"@elliemae/ds-menu-
|
|
136
|
-
"@elliemae/ds-
|
|
137
|
-
"@elliemae/ds-menu-items-action": "3.70.0-next.
|
|
138
|
-
"@elliemae/ds-menu-items-commons": "3.70.0-next.
|
|
139
|
-
"@elliemae/ds-menu-items-multi": "3.70.0-next.
|
|
140
|
-
"@elliemae/ds-menu-items-section": "3.70.0-next.
|
|
141
|
-
"@elliemae/ds-menu-items-
|
|
142
|
-
"@elliemae/ds-menu-items-single": "3.70.0-next.
|
|
143
|
-
"@elliemae/ds-menu-items-
|
|
144
|
-
"@elliemae/ds-menu-items-skeleton": "3.70.0-next.
|
|
145
|
-
"@elliemae/ds-menu-items-submenu": "3.70.0-next.
|
|
146
|
-
"@elliemae/ds-
|
|
147
|
-
"@elliemae/ds-mobile": "3.70.0-next.
|
|
148
|
-
"@elliemae/ds-
|
|
149
|
-
"@elliemae/ds-
|
|
150
|
-
"@elliemae/ds-
|
|
151
|
-
"@elliemae/ds-page-header-v1": "3.70.0-next.
|
|
152
|
-
"@elliemae/ds-
|
|
153
|
-
"@elliemae/ds-page-header": "3.70.0-next.
|
|
154
|
-
"@elliemae/ds-
|
|
155
|
-
"@elliemae/ds-
|
|
156
|
-
"@elliemae/ds-pills-v2": "3.70.0-next.
|
|
157
|
-
"@elliemae/ds-
|
|
158
|
-
"@elliemae/ds-
|
|
159
|
-
"@elliemae/ds-
|
|
160
|
-
"@elliemae/ds-
|
|
161
|
-
"@elliemae/ds-
|
|
162
|
-
"@elliemae/ds-
|
|
163
|
-
"@elliemae/ds-
|
|
164
|
-
"@elliemae/ds-
|
|
165
|
-
"@elliemae/ds-
|
|
166
|
-
"@elliemae/ds-
|
|
167
|
-
"@elliemae/ds-
|
|
168
|
-
"@elliemae/ds-
|
|
169
|
-
"@elliemae/ds-
|
|
170
|
-
"@elliemae/ds-
|
|
171
|
-
"@elliemae/ds-slider-v2": "3.70.0-next.
|
|
172
|
-
"@elliemae/ds-
|
|
173
|
-
"@elliemae/ds-
|
|
174
|
-
"@elliemae/ds-
|
|
175
|
-
"@elliemae/ds-system": "3.70.0-next.
|
|
176
|
-
"@elliemae/ds-tabs": "3.70.0-next.
|
|
177
|
-
"@elliemae/ds-
|
|
178
|
-
"@elliemae/ds-
|
|
179
|
-
"@elliemae/ds-toolbar-v1": "3.70.0-next.
|
|
180
|
-
"@elliemae/ds-
|
|
181
|
-
"@elliemae/ds-
|
|
182
|
-
"@elliemae/ds-tree-model": "3.70.0-next.
|
|
183
|
-
"@elliemae/ds-
|
|
184
|
-
"@elliemae/ds-treeview": "3.70.0-next.
|
|
185
|
-
"@elliemae/ds-
|
|
186
|
-
"@elliemae/ds-
|
|
187
|
-
"@elliemae/ds-
|
|
188
|
-
"@elliemae/ds-
|
|
189
|
-
"@elliemae/ds-
|
|
190
|
-
"@elliemae/ds-
|
|
42
|
+
"@elliemae/ds-accessibility": "3.70.0-next.40",
|
|
43
|
+
"@elliemae/ds-accordion": "3.70.0-next.40",
|
|
44
|
+
"@elliemae/ds-backdrop": "3.70.0-next.40",
|
|
45
|
+
"@elliemae/ds-banner": "3.70.0-next.40",
|
|
46
|
+
"@elliemae/ds-accordion-native": "3.70.0-next.40",
|
|
47
|
+
"@elliemae/ds-app-picker": "3.70.0-next.40",
|
|
48
|
+
"@elliemae/ds-basic": "3.70.0-next.40",
|
|
49
|
+
"@elliemae/ds-breadcrumb": "3.70.0-next.40",
|
|
50
|
+
"@elliemae/ds-button-v2": "3.70.0-next.40",
|
|
51
|
+
"@elliemae/ds-card-navigation": "3.70.0-next.40",
|
|
52
|
+
"@elliemae/ds-card-v1-detail": "3.70.0-next.40",
|
|
53
|
+
"@elliemae/ds-card-v1": "3.70.0-next.40",
|
|
54
|
+
"@elliemae/ds-card": "3.70.0-next.40",
|
|
55
|
+
"@elliemae/ds-card-v2": "3.70.0-next.40",
|
|
56
|
+
"@elliemae/ds-card-v2-group": "3.70.0-next.40",
|
|
57
|
+
"@elliemae/ds-card-v2-action-addon": "3.70.0-next.40",
|
|
58
|
+
"@elliemae/ds-card-v3-poc": "3.70.0-next.40",
|
|
59
|
+
"@elliemae/ds-card-v3": "3.70.0-next.40",
|
|
60
|
+
"@elliemae/ds-chat-bubble": "3.70.0-next.40",
|
|
61
|
+
"@elliemae/ds-chat-card": "3.70.0-next.40",
|
|
62
|
+
"@elliemae/ds-chat": "3.70.0-next.40",
|
|
63
|
+
"@elliemae/ds-chat-container": "3.70.0-next.40",
|
|
64
|
+
"@elliemae/ds-chat-empty-state": "3.70.0-next.40",
|
|
65
|
+
"@elliemae/ds-chat-container-header": "3.70.0-next.40",
|
|
66
|
+
"@elliemae/ds-chat-floating-button": "3.70.0-next.40",
|
|
67
|
+
"@elliemae/ds-chat-message-delimeter": "3.70.0-next.40",
|
|
68
|
+
"@elliemae/ds-chat-sidebar": "3.70.0-next.40",
|
|
69
|
+
"@elliemae/ds-chat-system-message": "3.70.0-next.40",
|
|
70
|
+
"@elliemae/ds-chip": "3.70.0-next.40",
|
|
71
|
+
"@elliemae/ds-circular-progress-indicator": "3.70.0-next.40",
|
|
72
|
+
"@elliemae/ds-classnames": "3.70.0-next.40",
|
|
73
|
+
"@elliemae/ds-chat-tile": "3.70.0-next.40",
|
|
74
|
+
"@elliemae/ds-comments": "3.70.0-next.40",
|
|
75
|
+
"@elliemae/ds-codeeditor": "3.70.0-next.40",
|
|
76
|
+
"@elliemae/ds-csv-converter": "3.70.0-next.40",
|
|
77
|
+
"@elliemae/ds-data-table": "3.70.0-next.40",
|
|
78
|
+
"@elliemae/ds-controlled-form": "3.70.0-next.40",
|
|
79
|
+
"@elliemae/ds-data-table-action-cell": "3.70.0-next.40",
|
|
80
|
+
"@elliemae/ds-data-table-cell": "3.70.0-next.40",
|
|
81
|
+
"@elliemae/ds-data-table-cell-header": "3.70.0-next.40",
|
|
82
|
+
"@elliemae/ds-data-table-expand-cell": "3.70.0-next.40",
|
|
83
|
+
"@elliemae/ds-data-table-filters": "3.70.0-next.40",
|
|
84
|
+
"@elliemae/ds-data-table-drag-and-drop-cell": "3.70.0-next.40",
|
|
85
|
+
"@elliemae/ds-data-table-multi-select-cell": "3.70.0-next.40",
|
|
86
|
+
"@elliemae/ds-data-table-single-select-cell": "3.70.0-next.40",
|
|
87
|
+
"@elliemae/ds-dataviz": "3.70.0-next.40",
|
|
88
|
+
"@elliemae/ds-dataviz-pie": "3.70.0-next.40",
|
|
89
|
+
"@elliemae/ds-date-time-picker": "3.70.0-next.40",
|
|
90
|
+
"@elliemae/ds-dialog": "3.70.0-next.40",
|
|
91
|
+
"@elliemae/ds-drag-and-drop": "3.70.0-next.40",
|
|
92
|
+
"@elliemae/ds-decision-graph": "3.70.0-next.40",
|
|
93
|
+
"@elliemae/ds-dropzone": "3.70.0-next.40",
|
|
94
|
+
"@elliemae/ds-dropdownmenu-v2": "3.70.0-next.40",
|
|
95
|
+
"@elliemae/ds-fast-list": "3.70.0-next.40",
|
|
96
|
+
"@elliemae/ds-filter-bar": "3.70.0-next.40",
|
|
97
|
+
"@elliemae/ds-floating-context": "3.70.0-next.40",
|
|
98
|
+
"@elliemae/ds-form-checkbox": "3.70.0-next.40",
|
|
99
|
+
"@elliemae/ds-form-combobox": "3.70.0-next.40",
|
|
100
|
+
"@elliemae/ds-form-date-range-picker": "3.70.0-next.40",
|
|
101
|
+
"@elliemae/ds-form-input-text": "3.70.0-next.40",
|
|
102
|
+
"@elliemae/ds-form-helpers-mask-hooks": "3.70.0-next.40",
|
|
103
|
+
"@elliemae/ds-form-date-time-picker": "3.70.0-next.40",
|
|
104
|
+
"@elliemae/ds-form-input-textarea": "3.70.0-next.40",
|
|
105
|
+
"@elliemae/ds-form-layout-blocks": "3.70.0-next.40",
|
|
106
|
+
"@elliemae/ds-form-layout-autocomplete": "3.70.0-next.40",
|
|
107
|
+
"@elliemae/ds-form-layout-input-group": "3.70.0-next.40",
|
|
108
|
+
"@elliemae/ds-form-layout-label": "3.70.0-next.40",
|
|
109
|
+
"@elliemae/ds-form-multi-combobox": "3.70.0-next.40",
|
|
110
|
+
"@elliemae/ds-form-native-select": "3.70.0-next.40",
|
|
111
|
+
"@elliemae/ds-form-radio": "3.70.0-next.40",
|
|
112
|
+
"@elliemae/ds-form-select": "3.70.0-next.40",
|
|
113
|
+
"@elliemae/ds-form-single-combobox": "3.70.0-next.40",
|
|
114
|
+
"@elliemae/ds-form-toggle": "3.70.0-next.40",
|
|
115
|
+
"@elliemae/ds-global-header": "3.70.0-next.40",
|
|
116
|
+
"@elliemae/ds-grid": "3.70.0-next.40",
|
|
117
|
+
"@elliemae/ds-hooks-focus-stack": "3.70.0-next.40",
|
|
118
|
+
"@elliemae/ds-hooks-focus-trap": "3.70.0-next.40",
|
|
119
|
+
"@elliemae/ds-hooks-fontsize-detector": "3.70.0-next.40",
|
|
120
|
+
"@elliemae/ds-hooks-fontsize-media": "3.70.0-next.40",
|
|
121
|
+
"@elliemae/ds-hooks-headless-tooltip": "3.70.0-next.40",
|
|
122
|
+
"@elliemae/ds-hooks-is-mobile": "3.70.0-next.40",
|
|
123
|
+
"@elliemae/ds-hooks-is-showing-ellipsis": "3.70.0-next.40",
|
|
124
|
+
"@elliemae/ds-hooks-keyboard-navigation": "3.70.0-next.40",
|
|
125
|
+
"@elliemae/ds-hooks-on-blur-out": "3.70.0-next.40",
|
|
126
|
+
"@elliemae/ds-hooks-on-first-focus-in": "3.70.0-next.40",
|
|
127
|
+
"@elliemae/ds-image": "3.70.0-next.40",
|
|
128
|
+
"@elliemae/ds-icon": "3.70.0-next.40",
|
|
129
|
+
"@elliemae/ds-icons": "3.70.0-next.40",
|
|
130
|
+
"@elliemae/ds-imagelibrarymodal": "3.70.0-next.40",
|
|
131
|
+
"@elliemae/ds-indeterminate-progress-indicator": "3.70.0-next.40",
|
|
132
|
+
"@elliemae/ds-layout-provider": "3.70.0-next.40",
|
|
133
|
+
"@elliemae/ds-left-navigation": "3.70.0-next.40",
|
|
134
|
+
"@elliemae/ds-menu-button": "3.70.0-next.40",
|
|
135
|
+
"@elliemae/ds-menu-items": "3.70.0-next.40",
|
|
136
|
+
"@elliemae/ds-loading-indicator": "3.70.0-next.40",
|
|
137
|
+
"@elliemae/ds-menu-items-action": "3.70.0-next.40",
|
|
138
|
+
"@elliemae/ds-menu-items-commons": "3.70.0-next.40",
|
|
139
|
+
"@elliemae/ds-menu-items-multi": "3.70.0-next.40",
|
|
140
|
+
"@elliemae/ds-menu-items-section": "3.70.0-next.40",
|
|
141
|
+
"@elliemae/ds-menu-items-single": "3.70.0-next.40",
|
|
142
|
+
"@elliemae/ds-menu-items-single-with-submenu": "3.70.0-next.40",
|
|
143
|
+
"@elliemae/ds-menu-items-separator": "3.70.0-next.40",
|
|
144
|
+
"@elliemae/ds-menu-items-skeleton": "3.70.0-next.40",
|
|
145
|
+
"@elliemae/ds-menu-items-submenu": "3.70.0-next.40",
|
|
146
|
+
"@elliemae/ds-menu-tree-item": "3.70.0-next.40",
|
|
147
|
+
"@elliemae/ds-mobile": "3.70.0-next.40",
|
|
148
|
+
"@elliemae/ds-modal-slide": "3.70.0-next.40",
|
|
149
|
+
"@elliemae/ds-notification-badge": "3.70.0-next.40",
|
|
150
|
+
"@elliemae/ds-page-header": "3.70.0-next.40",
|
|
151
|
+
"@elliemae/ds-page-header-v1": "3.70.0-next.40",
|
|
152
|
+
"@elliemae/ds-overlay": "3.70.0-next.40",
|
|
153
|
+
"@elliemae/ds-page-header-v2": "3.70.0-next.40",
|
|
154
|
+
"@elliemae/ds-page-layout": "3.70.0-next.40",
|
|
155
|
+
"@elliemae/ds-pagination": "3.70.0-next.40",
|
|
156
|
+
"@elliemae/ds-pills-v2": "3.70.0-next.40",
|
|
157
|
+
"@elliemae/ds-progress-indicator": "3.70.0-next.40",
|
|
158
|
+
"@elliemae/ds-props-helpers": "3.70.0-next.40",
|
|
159
|
+
"@elliemae/ds-portal": "3.70.0-next.40",
|
|
160
|
+
"@elliemae/ds-read-more": "3.70.0-next.40",
|
|
161
|
+
"@elliemae/ds-scrollable-container": "3.70.0-next.40",
|
|
162
|
+
"@elliemae/ds-resizeable-container": "3.70.0-next.40",
|
|
163
|
+
"@elliemae/ds-query-builder": "3.70.0-next.40",
|
|
164
|
+
"@elliemae/ds-separator": "3.70.0-next.40",
|
|
165
|
+
"@elliemae/ds-ribbon": "3.70.0-next.40",
|
|
166
|
+
"@elliemae/ds-shuttle-v2": "3.70.0-next.40",
|
|
167
|
+
"@elliemae/ds-side-panel": "3.70.0-next.40",
|
|
168
|
+
"@elliemae/ds-shared": "3.70.0-next.40",
|
|
169
|
+
"@elliemae/ds-skeleton": "3.70.0-next.40",
|
|
170
|
+
"@elliemae/ds-stepper": "3.70.0-next.40",
|
|
171
|
+
"@elliemae/ds-slider-v2": "3.70.0-next.40",
|
|
172
|
+
"@elliemae/ds-side-panel-header": "3.70.0-next.40",
|
|
173
|
+
"@elliemae/ds-svg": "3.70.0-next.40",
|
|
174
|
+
"@elliemae/ds-square-indicator": "3.70.0-next.40",
|
|
175
|
+
"@elliemae/ds-system": "3.70.0-next.40",
|
|
176
|
+
"@elliemae/ds-tabs": "3.70.0-next.40",
|
|
177
|
+
"@elliemae/ds-test-utils": "3.70.0-next.40",
|
|
178
|
+
"@elliemae/ds-toast": "3.70.0-next.40",
|
|
179
|
+
"@elliemae/ds-toolbar-v1": "3.70.0-next.40",
|
|
180
|
+
"@elliemae/ds-tooltip-v3": "3.70.0-next.40",
|
|
181
|
+
"@elliemae/ds-transition": "3.70.0-next.40",
|
|
182
|
+
"@elliemae/ds-tree-model": "3.70.0-next.40",
|
|
183
|
+
"@elliemae/ds-toolbar-v2": "3.70.0-next.40",
|
|
184
|
+
"@elliemae/ds-treeview": "3.70.0-next.40",
|
|
185
|
+
"@elliemae/ds-typescript-helpers": "3.70.0-next.40",
|
|
186
|
+
"@elliemae/ds-truncated-expandable-text": "3.70.0-next.40",
|
|
187
|
+
"@elliemae/ds-virtual-list": "3.70.0-next.40",
|
|
188
|
+
"@elliemae/ds-typography": "3.70.0-next.40",
|
|
189
|
+
"@elliemae/ds-zustand-helpers": "3.70.0-next.40",
|
|
190
|
+
"@elliemae/ds-wizard": "3.70.0-next.40"
|
|
191
191
|
},
|
|
192
192
|
"publishConfig": {
|
|
193
193
|
"access": "public"
|
package/paths.js
CHANGED
|
@@ -314,6 +314,7 @@ export const PATH_E2E_TOAST = `${PATH_E2E}/Toast`;
|
|
|
314
314
|
export const PATH_E2E_GLOBAL_HEADER = `${PATH_E2E}/Global-Header`;
|
|
315
315
|
export const PATH_E2E_HOOK_FORM = `${PATH_E2E}/React-hook-form`;
|
|
316
316
|
export const PATH_E2E_ACCORDION = `${PATH_E2E}/Accordion`;
|
|
317
|
+
export const PATH_E2E_ACCORDION_PITFALLS = `${PATH_E2E_ACCORDION}/Pitfalls`;
|
|
317
318
|
export const PATH_E2E_ACCORDION_NATIVE = `${PATH_E2E}/AccordionNative`;
|
|
318
319
|
export const PATH_E2E_VIRTUAL_LIST = `${PATH_E2E}/Virtual-list`;
|
|
319
320
|
export const PATH_E2E_COMBOBOX = `${PATH_E2E_END_OF_LIFE}/ComboboxV2`;
|