dimsum-e2e-tests 3.80.0-next.14 → 3.80.0-next.19
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 +20 -0
- package/ds-progress-indicator/DSProgressIndicator.axe-core.func.spec.js +8 -5
- package/ds-progress-indicator/DSProgressIndicator.func.spec.js +18 -4
- package/ds-progress-indicator/DSProgressIndicator.visual.spec.js +14 -6
- package/ds-progress-indicator/DSProgressIndicatorCO.js +80 -9
- package/ds-progress-indicator/aria-contract/DSProgressIndicator.aria-contract.func.spec.js +104 -0
- package/ds-progress-indicator/slots/DSProgressIndicator.slots.axe-core.func.spec.js +31 -0
- package/ds-progress-indicator/slots/DSProgressIndicator.slots.func.spec.js +87 -0
- package/ds-progress-indicator/slots/DSProgressIndicator.slots.visual.spec.js +26 -0
- package/package.json +148 -148
package/CHANGELOG.md
CHANGED
|
@@ -3,6 +3,26 @@
|
|
|
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.80.0-next.19](/github.com/intcx/PLATFORM-UI/compare/v3.80.0-next.18...v3.80.0-next.19) (2026-09-28)
|
|
7
|
+
|
|
8
|
+
**Note:** Version bump only for package dimsum-e2e-tests
|
|
9
|
+
|
|
10
|
+
## [3.80.0-next.18](/github.com/intcx/PLATFORM-UI/compare/v3.80.0-next.17...v3.80.0-next.18) (2026-09-25)
|
|
11
|
+
|
|
12
|
+
**Note:** Version bump only for package dimsum-e2e-tests
|
|
13
|
+
|
|
14
|
+
## [3.80.0-next.17](/github.com/intcx/PLATFORM-UI/compare/v3.80.0-next.16...v3.80.0-next.17) (2026-09-25)
|
|
15
|
+
|
|
16
|
+
**Note:** Version bump only for package dimsum-e2e-tests
|
|
17
|
+
|
|
18
|
+
## 3.80.0-next.16 (2026-09-25)
|
|
19
|
+
|
|
20
|
+
**Note:** Version bump only for package dimsum-e2e-tests
|
|
21
|
+
|
|
22
|
+
## 3.80.0-next.15 (2026-09-25)
|
|
23
|
+
|
|
24
|
+
**Note:** Version bump only for package dimsum-e2e-tests
|
|
25
|
+
|
|
6
26
|
## 3.80.0-next.14 (2026-09-24)
|
|
7
27
|
|
|
8
28
|
### Features
|
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
/* eslint-disable wdio/no-pause */
|
|
2
1
|
import DSProgressIndicatorCO from './DSProgressIndicatorCO';
|
|
3
2
|
import { axeCoreCheck } from '../helpers';
|
|
4
3
|
|
|
@@ -8,24 +7,28 @@ if (
|
|
|
8
7
|
browser.capabilities.browserName === 'chrome') ||
|
|
9
8
|
browser.capabilities.browserName === 'Chrome'
|
|
10
9
|
) {
|
|
11
|
-
describe('PUI-17521
|
|
10
|
+
describe('PUI-17521 - DSProgressIndicator:: Basic - Axe-Core', () => {
|
|
12
11
|
before('loading page', async () => {
|
|
13
12
|
const errorOnGo = await DSProgressIndicatorCO.basicURL.go();
|
|
14
13
|
if (errorOnGo) throw errorOnGo;
|
|
15
14
|
});
|
|
16
15
|
it('01: should display basic progress indicator and pass axe-core', async () => {
|
|
17
|
-
await (await DSProgressIndicatorCO.
|
|
18
|
-
|
|
16
|
+
await (await DSProgressIndicatorCO.getTitle()).waitForDisplayed();
|
|
17
|
+
|
|
19
18
|
const result = await axeCoreCheck();
|
|
20
19
|
expect(result.length).toBe(0);
|
|
21
20
|
});
|
|
22
21
|
});
|
|
23
|
-
|
|
22
|
+
|
|
23
|
+
describe('PUI-17524 - DSProgressIndicator:: Others Test - Axe-Core', () => {
|
|
24
24
|
before('loading page', async () => {
|
|
25
25
|
const errorOnGo = await DSProgressIndicatorCO.othersURL.go();
|
|
26
26
|
if (errorOnGo) throw errorOnGo;
|
|
27
27
|
});
|
|
28
28
|
it('01: should display progress indicator and pass axe-core', async () => {
|
|
29
|
+
// Replaces a blind browser.pause(500): the story animates, so wait on the real end state.
|
|
30
|
+
await DSProgressIndicatorCO.waitForAnimatedCountersToSettle();
|
|
31
|
+
|
|
29
32
|
const result = await axeCoreCheck();
|
|
30
33
|
expect(result.length).toBe(0);
|
|
31
34
|
});
|
|
@@ -6,14 +6,28 @@ if (
|
|
|
6
6
|
browser.capabilities.browserName === 'chrome') ||
|
|
7
7
|
browser.capabilities.browserName === 'Chrome'
|
|
8
8
|
) {
|
|
9
|
-
describe('PUI-17522 -
|
|
9
|
+
describe('PUI-17522 - DSProgressIndicator:: Basic - Func', () => {
|
|
10
10
|
before('loading page', async () => {
|
|
11
11
|
const errorOnGo = await DSProgressIndicatorCO.basicURL.go();
|
|
12
12
|
if (errorOnGo) throw errorOnGo;
|
|
13
13
|
});
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
14
|
+
|
|
15
|
+
// The naming, aria-valuetext and invalid-range contracts live in the aria-contract spec; this
|
|
16
|
+
// one stays on the Basic story's own value contract.
|
|
17
|
+
it('01: should show basic progress indicator with a valid progressbar value range', async () => {
|
|
18
|
+
const title = await DSProgressIndicatorCO.getTitle();
|
|
19
|
+
await expect(title).toBeDisplayed();
|
|
20
|
+
await expect(title).toHaveText('upload');
|
|
21
|
+
|
|
22
|
+
const root = await DSProgressIndicatorCO.getRoot();
|
|
23
|
+
await expect(root).toHaveAttribute('aria-disabled', 'false');
|
|
24
|
+
|
|
25
|
+
const progress = await DSProgressIndicatorCO.getProgress();
|
|
26
|
+
await expect(progress).toHaveAttribute('role', 'progressbar');
|
|
27
|
+
await expect(progress).toHaveAttribute('aria-valuenow', '50');
|
|
28
|
+
await expect(progress).toHaveAttribute('aria-valuemin', '0');
|
|
29
|
+
await expect(progress).toHaveAttribute('aria-valuemax', '100');
|
|
30
|
+
await expect(await progress.getAttribute('style')).toContain('width: 50%');
|
|
17
31
|
});
|
|
18
32
|
});
|
|
19
33
|
}
|
|
@@ -1,24 +1,32 @@
|
|
|
1
1
|
import DSProgressIndicatorCO from './DSProgressIndicatorCO';
|
|
2
2
|
|
|
3
|
-
|
|
4
|
-
|
|
3
|
+
// Migrated off the pre-Percy browser.checkSnapshot API as part of the PUI-18856 compliance work,
|
|
4
|
+
// which rewrote the class system these baselines were taken against.
|
|
5
|
+
if (!browser.capabilities['ice:options'].isPhone && !browser.capabilities['ice:options'].isTablet) {
|
|
6
|
+
describe('PUI-17520 - DSProgressIndicator:: Basic - Visual', () => {
|
|
5
7
|
before('loading page', async () => {
|
|
6
8
|
const errorOnGo = await DSProgressIndicatorCO.basicURL.go();
|
|
7
9
|
if (errorOnGo) throw errorOnGo;
|
|
8
10
|
});
|
|
9
11
|
it('01: should display basic progress indicator', async () => {
|
|
10
|
-
await (await DSProgressIndicatorCO.
|
|
11
|
-
|
|
12
|
+
await (await DSProgressIndicatorCO.getTitle()).waitForDisplayed();
|
|
13
|
+
|
|
14
|
+
const snapshot = await browser.percyCheckScreenshot();
|
|
12
15
|
await expect(snapshot).toEqual(0);
|
|
13
16
|
});
|
|
14
17
|
});
|
|
15
|
-
|
|
18
|
+
|
|
19
|
+
describe('PUI-17523 - DSProgressIndicator:: Others Test - Visual', () => {
|
|
16
20
|
before('loading page', async () => {
|
|
17
21
|
const errorOnGo = await DSProgressIndicatorCO.othersURL.go();
|
|
18
22
|
if (errorOnGo) throw errorOnGo;
|
|
19
23
|
});
|
|
20
24
|
it('01: should display progress indicator', async () => {
|
|
21
|
-
|
|
25
|
+
// Two of the four indicators are driven by setInterval and only stop once their counters
|
|
26
|
+
// reach the maximum. Snapshotting before that lands produces a different image every run.
|
|
27
|
+
await DSProgressIndicatorCO.waitForAnimatedCountersToSettle();
|
|
28
|
+
|
|
29
|
+
const snapshot = await browser.percyCheckScreenshot();
|
|
22
30
|
await expect(snapshot).toEqual(0);
|
|
23
31
|
});
|
|
24
32
|
});
|
|
@@ -1,26 +1,97 @@
|
|
|
1
1
|
import { PATH_E2E_PROGRESS_INDICATOR } from '../paths';
|
|
2
2
|
import { PageObject, Urlbuilder } from '../helpers';
|
|
3
3
|
|
|
4
|
+
// Slot testids owned by the component (packages/atom/ds-progress-indicator/src/constants/index.ts).
|
|
5
|
+
// Note the lowercase `i` in "progressindicator": it comes from DSProgressIndicatorName.
|
|
6
|
+
const SLOT_TESTID = {
|
|
7
|
+
ROOT: 'ds-progressindicator-root',
|
|
8
|
+
TITLE: 'ds-progressindicator-title',
|
|
9
|
+
COUNTER: 'ds-progressindicator-counter',
|
|
10
|
+
PROGRESS_BAR: 'ds-progressindicator-progress-bar',
|
|
11
|
+
PROGRESS: 'ds-progressindicator-progress',
|
|
12
|
+
};
|
|
13
|
+
|
|
14
|
+
// In segmented mode every segment reuses the PROGRESS testid, and the stories render several
|
|
15
|
+
// indicators per page, so selectors are scoped by the story's per-scenario `*-case` wrapper.
|
|
16
|
+
// Omit `caseTestId` for single-indicator stories such as BasicTest.
|
|
17
|
+
const scoped = (testId, caseTestId) =>
|
|
18
|
+
caseTestId ? `[data-testid="${caseTestId}"] [data-testid="${testId}"]` : `[data-testid="${testId}"]`;
|
|
19
|
+
|
|
4
20
|
export default class DSProgressIndicatorCO extends PageObject {
|
|
5
21
|
// Desktop
|
|
6
22
|
static basicURL = new Urlbuilder(PATH_E2E_PROGRESS_INDICATOR, 'basic-test');
|
|
7
23
|
|
|
8
24
|
static othersURL = new Urlbuilder(PATH_E2E_PROGRESS_INDICATOR, 'others-test');
|
|
9
25
|
|
|
10
|
-
static
|
|
11
|
-
|
|
26
|
+
static ariaContractURL = new Urlbuilder(PATH_E2E_PROGRESS_INDICATOR, 'aria-contract-test');
|
|
27
|
+
|
|
28
|
+
static slotsURL = new Urlbuilder(PATH_E2E_PROGRESS_INDICATOR, 'slots-test');
|
|
29
|
+
|
|
30
|
+
static SLOT_TESTID = SLOT_TESTID;
|
|
31
|
+
|
|
32
|
+
// selectors
|
|
33
|
+
static async getRoot(caseTestId) {
|
|
34
|
+
return $(scoped(SLOT_TESTID.ROOT, caseTestId));
|
|
12
35
|
}
|
|
13
36
|
|
|
14
|
-
static async
|
|
15
|
-
return $(
|
|
37
|
+
static async getTitle(caseTestId) {
|
|
38
|
+
return $(scoped(SLOT_TESTID.TITLE, caseTestId));
|
|
16
39
|
}
|
|
17
40
|
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
41
|
+
static async getCounter(caseTestId) {
|
|
42
|
+
return $(scoped(SLOT_TESTID.COUNTER, caseTestId));
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
static async getProgressBar(caseTestId) {
|
|
46
|
+
return $(scoped(SLOT_TESTID.PROGRESS_BAR, caseTestId));
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
// First (or only) progressbar of a case. Use getProgressBars for the segmented ones.
|
|
50
|
+
static async getProgress(caseTestId) {
|
|
51
|
+
return $(scoped(SLOT_TESTID.PROGRESS, caseTestId));
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
static async getProgressBars(caseTestId) {
|
|
55
|
+
return $$(scoped(SLOT_TESTID.PROGRESS, caseTestId));
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
// Slot-level lookups, for asserting the data-dimsum-slot contract independently of the testids.
|
|
59
|
+
static async getSlot(slotName, caseTestId) {
|
|
60
|
+
const prefix = caseTestId ? `[data-testid="${caseTestId}"] ` : '';
|
|
61
|
+
return $(`${prefix}[data-dimsum-slot="${slotName}"]`);
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
static async getSlots(slotName, caseTestId) {
|
|
65
|
+
const prefix = caseTestId ? `[data-testid="${caseTestId}"] ` : '';
|
|
66
|
+
return $$(`${prefix}[data-dimsum-slot="${slotName}"]`);
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
// aria-labelledby points at a React.useId() value containing ":", which is not a valid CSS id
|
|
70
|
+
// selector, so the target has to be resolved through the attribute selector instead of "#id".
|
|
71
|
+
static async getByIdAttribute(id) {
|
|
72
|
+
return $(`[id="${id}"]`);
|
|
21
73
|
}
|
|
22
74
|
|
|
23
|
-
// selectors
|
|
24
|
-
// actions
|
|
25
75
|
// utils
|
|
76
|
+
// OthersTest drives two indicators with setInterval counters. They stop once each counter reaches
|
|
77
|
+
// its max, so the story is only deterministic after both have landed on their final totals.
|
|
78
|
+
//
|
|
79
|
+
// The texts are read in a single browser.execute rather than by mapping over $$: WebdriverIO's
|
|
80
|
+
// element array overrides .map() to return a Promise, so Promise.all(list.map(...)) throws
|
|
81
|
+
// "object is not iterable". One round trip per poll is also cheaper than four.
|
|
82
|
+
static async waitForAnimatedCountersToSettle() {
|
|
83
|
+
await browser.waitUntil(
|
|
84
|
+
async () => {
|
|
85
|
+
const texts = await browser.execute(
|
|
86
|
+
(testId) => Array.from(document.querySelectorAll(`[data-testid="${testId}"]`), (el) => el.textContent),
|
|
87
|
+
SLOT_TESTID.COUNTER,
|
|
88
|
+
);
|
|
89
|
+
return texts.length >= 4 && texts[1] === '400 of 400' && texts[2] === '330 of 330';
|
|
90
|
+
},
|
|
91
|
+
{
|
|
92
|
+
timeout: 15000,
|
|
93
|
+
timeoutMsg: 'animated progress indicators never reached their final value',
|
|
94
|
+
},
|
|
95
|
+
);
|
|
96
|
+
}
|
|
26
97
|
}
|
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
import DSProgressIndicatorCO from '../DSProgressIndicatorCO';
|
|
2
|
+
|
|
3
|
+
// Coverage for the accessibility remediation shipped in PUI-18856 (PR #8353):
|
|
4
|
+
// PUI-18671 the progressbar used to carry a hardcoded aria-label="progress bar". It is now named
|
|
5
|
+
// by the visible title through aria-labelledby, and that string survives only as the
|
|
6
|
+
// fallback for an untitled indicator.
|
|
7
|
+
// PUI-18673 aria-valuetext now mirrors whatever the visible counter renders, default or custom.
|
|
8
|
+
// PUI-18675 each segment accepts a `label` that becomes its own accessible name. Only the Dimsum
|
|
9
|
+
// half of that defect is assertable here; the visible non-colour alternative is the
|
|
10
|
+
// consumer's, see stories/docs/principles/a11y/tradesoff.
|
|
11
|
+
// PUI-18672 an invalid `max` no longer produces width: NaN% and an inverted ARIA range. `max` was
|
|
12
|
+
// deliberately NOT made required (KNOWN_INTENTIONAL_DEVIATIONS.md, deviation 6), so what
|
|
13
|
+
// is asserted below is the shipped fail-safe: an indeterminate progressbar.
|
|
14
|
+
//
|
|
15
|
+
// Every assertion is a DOM attribute, which is identical across engines, so this runs Chrome only.
|
|
16
|
+
// The `|| 'Chrome'` branch is mandatory: BrowserStack reports the capitalised name and a
|
|
17
|
+
// lowercase-only guard would register zero tests while still exiting 0.
|
|
18
|
+
if (
|
|
19
|
+
(!browser.capabilities['ice:options'].isPhone &&
|
|
20
|
+
!browser.capabilities['ice:options'].isTablet &&
|
|
21
|
+
browser.capabilities.browserName === 'chrome') ||
|
|
22
|
+
browser.capabilities.browserName === 'Chrome'
|
|
23
|
+
) {
|
|
24
|
+
describe('PUI-19209 - DSProgressIndicator:: progressbar ARIA contract - Func', () => {
|
|
25
|
+
before('loading page', async () => {
|
|
26
|
+
const errorOnGo = await DSProgressIndicatorCO.ariaContractURL.go();
|
|
27
|
+
if (errorOnGo) throw errorOnGo;
|
|
28
|
+
});
|
|
29
|
+
|
|
30
|
+
it('01: should name the progressbar from the visible title and fall back when untitled', async () => {
|
|
31
|
+
const titled = await DSProgressIndicatorCO.getProgress('titled-case');
|
|
32
|
+
await titled.waitForDisplayed();
|
|
33
|
+
await expect(titled).not.toHaveAttribute('aria-label');
|
|
34
|
+
|
|
35
|
+
// The id is generated with React.useId(), so it is resolved at runtime rather than hardcoded.
|
|
36
|
+
const labelledBy = await titled.getAttribute('aria-labelledby');
|
|
37
|
+
const title = await DSProgressIndicatorCO.getTitle('titled-case');
|
|
38
|
+
await expect(await title.getAttribute('id')).toEqual(labelledBy);
|
|
39
|
+
await expect(await DSProgressIndicatorCO.getByIdAttribute(labelledBy)).toHaveText('Uploading documents');
|
|
40
|
+
|
|
41
|
+
const titleless = await DSProgressIndicatorCO.getProgress('titleless-case');
|
|
42
|
+
await expect(titleless).toHaveAttribute('aria-label', 'progress bar');
|
|
43
|
+
await expect(titleless).not.toHaveAttribute('aria-labelledby');
|
|
44
|
+
});
|
|
45
|
+
|
|
46
|
+
it('02: should mirror the visible counter in aria-valuetext for default and custom renderers', async () => {
|
|
47
|
+
const defaultCounter = await DSProgressIndicatorCO.getCounter('titled-case');
|
|
48
|
+
await expect(defaultCounter).toHaveText('50 of 100');
|
|
49
|
+
const defaultBar = await DSProgressIndicatorCO.getProgress('titled-case');
|
|
50
|
+
await expect(defaultBar).toHaveAttribute('aria-valuetext', '50 of 100');
|
|
51
|
+
|
|
52
|
+
const customCounter = await DSProgressIndicatorCO.getCounter('custom-counter-case');
|
|
53
|
+
await expect(customCounter).toHaveText('3 files remaining');
|
|
54
|
+
const customBar = await DSProgressIndicatorCO.getProgress('custom-counter-case');
|
|
55
|
+
await expect(customBar).toHaveAttribute('aria-valuetext', '3 files remaining');
|
|
56
|
+
});
|
|
57
|
+
|
|
58
|
+
it('03: should give each labelled segment its own accessible name', async () => {
|
|
59
|
+
const labelled = await DSProgressIndicatorCO.getProgressBars('labelled-segments-case');
|
|
60
|
+
await expect(labelled).toBeElementsArrayOfSize(2);
|
|
61
|
+
|
|
62
|
+
// A segment label wins over the indicator title, so aria-labelledby is dropped entirely.
|
|
63
|
+
await expect(labelled[0]).toHaveAttribute('aria-label', 'Approved documents');
|
|
64
|
+
await expect(labelled[0]).not.toHaveAttribute('aria-labelledby');
|
|
65
|
+
await expect(labelled[1]).toHaveAttribute('aria-label', 'Rejected documents');
|
|
66
|
+
await expect(labelled[1]).not.toHaveAttribute('aria-labelledby');
|
|
67
|
+
|
|
68
|
+
// Each segment reports its own range rather than the aggregate shown by the counter.
|
|
69
|
+
await expect(labelled[0]).toHaveAttribute('aria-valuetext', '50 of 100');
|
|
70
|
+
await expect(labelled[1]).toHaveAttribute('aria-valuetext', '100 of 200');
|
|
71
|
+
|
|
72
|
+
// An unlabelled segment still falls back to the indicator title.
|
|
73
|
+
const mixed = await DSProgressIndicatorCO.getProgressBars('mixed-segments-case');
|
|
74
|
+
await expect(mixed).toBeElementsArrayOfSize(2);
|
|
75
|
+
await expect(mixed[0]).toHaveAttribute('aria-label', 'Completed');
|
|
76
|
+
await expect(mixed[1]).not.toHaveAttribute('aria-label');
|
|
77
|
+
const fallbackId = await mixed[1].getAttribute('aria-labelledby');
|
|
78
|
+
await expect(await DSProgressIndicatorCO.getByIdAttribute(fallbackId)).toHaveText('Batch upload');
|
|
79
|
+
});
|
|
80
|
+
|
|
81
|
+
it('04: should render indeterminate for an invalid max and clamp an overflowing value', async () => {
|
|
82
|
+
const expectIndeterminate = async (caseId) => {
|
|
83
|
+
const bar = await DSProgressIndicatorCO.getProgress(caseId);
|
|
84
|
+
await expect(bar).toHaveAttribute('role', 'progressbar');
|
|
85
|
+
await expect(bar).not.toHaveAttribute('aria-valuenow');
|
|
86
|
+
await expect(bar).not.toHaveAttribute('aria-valuemin');
|
|
87
|
+
await expect(bar).not.toHaveAttribute('aria-valuemax');
|
|
88
|
+
await expect(bar).not.toHaveAttribute('aria-valuetext');
|
|
89
|
+
// The pre-fix behaviour was width: NaN%; the guard now yields a valid zero-length fill.
|
|
90
|
+
await expect(await bar.getAttribute('style')).toContain('width: 0%');
|
|
91
|
+
// The indicator is still named, so the invalid range degrades without losing the label.
|
|
92
|
+
await expect(bar).toHaveAttribute('aria-labelledby');
|
|
93
|
+
};
|
|
94
|
+
|
|
95
|
+
await expectIndeterminate('omitted-max-case');
|
|
96
|
+
await expectIndeterminate('zero-max-case');
|
|
97
|
+
|
|
98
|
+
const overflow = await DSProgressIndicatorCO.getProgress('overflow-case');
|
|
99
|
+
await expect(overflow).toHaveAttribute('aria-valuenow', '100');
|
|
100
|
+
await expect(overflow).toHaveAttribute('aria-valuemax', '100');
|
|
101
|
+
await expect(await overflow.getAttribute('style')).toContain('width: 100%');
|
|
102
|
+
});
|
|
103
|
+
});
|
|
104
|
+
}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import DSProgressIndicatorCO from '../DSProgressIndicatorCO';
|
|
2
|
+
import { axeCoreCheck } from '../../helpers';
|
|
3
|
+
|
|
4
|
+
// SlotsTest is the only ProgressIndicator story that overrides color/backgroundColor, so it is the
|
|
5
|
+
// one place where the test code itself can introduce a contrast regression. This run is what makes
|
|
6
|
+
// the WCAG 2 AA pairs in the story load-bearing rather than advisory. It also guards the
|
|
7
|
+
// consumer-supplied slot aria-label against colliding with the component's own naming.
|
|
8
|
+
//
|
|
9
|
+
// Chrome only: axe-core results do not vary by engine. The `|| 'Chrome'` branch is mandatory,
|
|
10
|
+
// BrowserStack reports the capitalised name and a lowercase-only guard registers zero tests.
|
|
11
|
+
if (
|
|
12
|
+
(!browser.capabilities['ice:options'].isPhone &&
|
|
13
|
+
!browser.capabilities['ice:options'].isTablet &&
|
|
14
|
+
browser.capabilities.browserName === 'chrome') ||
|
|
15
|
+
browser.capabilities.browserName === 'Chrome'
|
|
16
|
+
) {
|
|
17
|
+
describe('PUI-19212 - DSProgressIndicator:: slot theming - Axe-Core', () => {
|
|
18
|
+
before('loading page', async () => {
|
|
19
|
+
const errorOnGo = await DSProgressIndicatorCO.slotsURL.go();
|
|
20
|
+
if (errorOnGo) throw errorOnGo;
|
|
21
|
+
});
|
|
22
|
+
|
|
23
|
+
it('01: should have no accessibility violations with custom slot theming', async () => {
|
|
24
|
+
const root = await DSProgressIndicatorCO.getSlot('dsProgressindicatorRoot', 'segmented-slots-case');
|
|
25
|
+
await root.waitForDisplayed();
|
|
26
|
+
|
|
27
|
+
const result = await axeCoreCheck();
|
|
28
|
+
expect(result.length).toBe(0);
|
|
29
|
+
});
|
|
30
|
+
});
|
|
31
|
+
}
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
import DSProgressIndicatorCO from '../DSProgressIndicatorCO';
|
|
2
|
+
|
|
3
|
+
// Slot contract coverage for the compliance migration in PUI-18856 / PUI-18941. The package dropped
|
|
4
|
+
// ds-classnames/aggregatedClasses for the native slot system, so each visual element must now be
|
|
5
|
+
// addressable through data-dimsum-slot and must accept consumer slot props.
|
|
6
|
+
//
|
|
7
|
+
// The consumer's `data-testid` REPLACES the component default, which is why this spec addresses the
|
|
8
|
+
// elements through data-dimsum-slot and then asserts the overridden testid, rather than the other
|
|
9
|
+
// way round.
|
|
10
|
+
//
|
|
11
|
+
// Slot attribute pass-through is engine-independent, so this runs Chrome only. The `|| 'Chrome'`
|
|
12
|
+
// branch is mandatory: BrowserStack reports the capitalised name and a lowercase-only guard would
|
|
13
|
+
// register zero tests while still exiting 0.
|
|
14
|
+
if (
|
|
15
|
+
(!browser.capabilities['ice:options'].isPhone &&
|
|
16
|
+
!browser.capabilities['ice:options'].isTablet &&
|
|
17
|
+
browser.capabilities.browserName === 'chrome') ||
|
|
18
|
+
browser.capabilities.browserName === 'Chrome'
|
|
19
|
+
) {
|
|
20
|
+
describe('PUI-19210 - DSProgressIndicator:: slot contract and slot prop forwarding - Func', () => {
|
|
21
|
+
before('loading page', async () => {
|
|
22
|
+
const errorOnGo = await DSProgressIndicatorCO.slotsURL.go();
|
|
23
|
+
if (errorOnGo) throw errorOnGo;
|
|
24
|
+
});
|
|
25
|
+
|
|
26
|
+
it('01: should expose the five slots on both the single and the segmented indicator', async () => {
|
|
27
|
+
const expectFiveSlots = async (caseId) => {
|
|
28
|
+
const [root, title, counter, progressBar, progress] = await Promise.all([
|
|
29
|
+
DSProgressIndicatorCO.getSlot('dsProgressindicatorRoot', caseId),
|
|
30
|
+
DSProgressIndicatorCO.getSlot('dsProgressindicatorTitle', caseId),
|
|
31
|
+
DSProgressIndicatorCO.getSlot('dsProgressindicatorCounter', caseId),
|
|
32
|
+
DSProgressIndicatorCO.getSlot('dsProgressindicatorProgressBar', caseId),
|
|
33
|
+
DSProgressIndicatorCO.getSlot('dsProgressindicatorProgress', caseId),
|
|
34
|
+
]);
|
|
35
|
+
|
|
36
|
+
await root.waitForDisplayed();
|
|
37
|
+
await expect(root).toHaveAttribute('data-testid', 'custom-root-data');
|
|
38
|
+
await expect(title).toHaveAttribute('data-testid', 'custom-title-data');
|
|
39
|
+
await expect(counter).toHaveAttribute('data-testid', 'custom-counter-data');
|
|
40
|
+
await expect(progressBar).toHaveAttribute('data-testid', 'custom-progress-bar-data');
|
|
41
|
+
await expect(progress).toHaveAttribute('data-testid', 'custom-progress-data');
|
|
42
|
+
};
|
|
43
|
+
|
|
44
|
+
await expectFiveSlots('single-slots-case');
|
|
45
|
+
await expectFiveSlots('segmented-slots-case');
|
|
46
|
+
});
|
|
47
|
+
|
|
48
|
+
it('02: should forward consumer slot props to every slot and to each segment', async () => {
|
|
49
|
+
const [title, counter, progress] = await Promise.all([
|
|
50
|
+
DSProgressIndicatorCO.getSlot('dsProgressindicatorTitle', 'single-slots-case'),
|
|
51
|
+
DSProgressIndicatorCO.getSlot('dsProgressindicatorCounter', 'single-slots-case'),
|
|
52
|
+
DSProgressIndicatorCO.getSlot('dsProgressindicatorProgress', 'single-slots-case'),
|
|
53
|
+
]);
|
|
54
|
+
|
|
55
|
+
await expect(title).toHaveAttribute('lang', 'en');
|
|
56
|
+
await expect(counter).toHaveAttribute('title', 'custom counter title');
|
|
57
|
+
|
|
58
|
+
// The progress slot carries role="progressbar", so a slot-level aria-label is legal there and
|
|
59
|
+
// is forwarded. It does not become the accessible name though: the component also emits its
|
|
60
|
+
// own aria-labelledby pointing at the title, and aria-labelledby outranks aria-label. Chrome's
|
|
61
|
+
// accessibility tree names these bars after their title, not "custom progress aria".
|
|
62
|
+
//
|
|
63
|
+
// That is the intended outcome, not a gap. Keeping the name tied to the visible title is the
|
|
64
|
+
// WCAG 2.5.3 Label in Name principle, and localisation is handled by passing a translated
|
|
65
|
+
// `title` rather than by overriding the label. The slot-level aria-label only takes effect on
|
|
66
|
+
// a titleless indicator, where the component would otherwise fall back to "progress bar".
|
|
67
|
+
// Asserting both attributes here pins the forwarding contract without implying the override
|
|
68
|
+
// wins the name.
|
|
69
|
+
await expect(progress).toHaveAttribute('role', 'progressbar');
|
|
70
|
+
await expect(progress).toHaveAttribute('aria-label', 'custom progress aria');
|
|
71
|
+
await expect(progress).toHaveAttribute('aria-labelledby');
|
|
72
|
+
|
|
73
|
+
// Slot props must reach every segment, not just the first one. The segments are addressed by
|
|
74
|
+
// index rather than with .map(): WebdriverIO's element array overrides .map() to return a
|
|
75
|
+
// Promise, so Promise.all(segments.map(...)) throws "object is not iterable".
|
|
76
|
+
const segments = await DSProgressIndicatorCO.getSlots('dsProgressindicatorProgress', 'segmented-slots-case');
|
|
77
|
+
await expect(segments).toBeElementsArrayOfSize(3);
|
|
78
|
+
|
|
79
|
+
await expect(segments[0]).toHaveAttribute('data-testid', 'custom-progress-data');
|
|
80
|
+
await expect(segments[0]).toHaveAttribute('aria-label', 'custom progress aria');
|
|
81
|
+
await expect(segments[1]).toHaveAttribute('data-testid', 'custom-progress-data');
|
|
82
|
+
await expect(segments[1]).toHaveAttribute('aria-label', 'custom progress aria');
|
|
83
|
+
await expect(segments[2]).toHaveAttribute('data-testid', 'custom-progress-data');
|
|
84
|
+
await expect(segments[2]).toHaveAttribute('aria-label', 'custom progress aria');
|
|
85
|
+
});
|
|
86
|
+
});
|
|
87
|
+
}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import DSProgressIndicatorCO from '../DSProgressIndicatorCO';
|
|
2
|
+
|
|
3
|
+
// Visual half of the PUI-18856 slot migration: proves the styleOverrides payload actually reaches
|
|
4
|
+
// each slot after the move off ds-classnames. The functional spec covers the attribute contract, so
|
|
5
|
+
// this only needs the rendered appearance.
|
|
6
|
+
//
|
|
7
|
+
// Known gap this snapshot records rather than hides: the `progress-bar` slot keeps the grey legacy
|
|
8
|
+
// track colour. Its styleOverride is emitted but loses the cascade to the retained SCSS rule
|
|
9
|
+
// `.em-ds-determinate-progress-indicator .em-ds-progress-bar` (two classes beat the single
|
|
10
|
+
// styled-components class). The other four slots take their overrides.
|
|
11
|
+
if (!browser.capabilities['ice:options'].isPhone && !browser.capabilities['ice:options'].isTablet) {
|
|
12
|
+
describe('PUI-19211 - DSProgressIndicator:: slot theming - Visual', () => {
|
|
13
|
+
before('loading page', async () => {
|
|
14
|
+
const errorOnGo = await DSProgressIndicatorCO.slotsURL.go();
|
|
15
|
+
if (errorOnGo) throw errorOnGo;
|
|
16
|
+
});
|
|
17
|
+
|
|
18
|
+
it('01: should display the single and segmented indicators with slot theming applied', async () => {
|
|
19
|
+
const root = await DSProgressIndicatorCO.getSlot('dsProgressindicatorRoot', 'segmented-slots-case');
|
|
20
|
+
await root.waitForDisplayed();
|
|
21
|
+
|
|
22
|
+
const snapshot = await browser.percyCheckScreenshot();
|
|
23
|
+
await expect(snapshot).toEqual(0);
|
|
24
|
+
});
|
|
25
|
+
});
|
|
26
|
+
}
|
package/package.json
CHANGED
|
@@ -1,9 +1,100 @@
|
|
|
1
1
|
{
|
|
2
2
|
"type": "module",
|
|
3
3
|
"name": "dimsum-e2e-tests",
|
|
4
|
-
"version": "3.80.0-next.
|
|
4
|
+
"version": "3.80.0-next.19",
|
|
5
5
|
"description": "End-to-end tests for dimsum library",
|
|
6
6
|
"dependencies": {
|
|
7
|
+
"@elliemae/ds-accessibility": "3.80.0-next.19",
|
|
8
|
+
"@elliemae/ds-accordion": "3.80.0-next.19",
|
|
9
|
+
"@elliemae/ds-app-picker": "3.80.0-next.19",
|
|
10
|
+
"@elliemae/ds-backdrop": "3.80.0-next.19",
|
|
11
|
+
"@elliemae/ds-banner": "3.80.0-next.19",
|
|
12
|
+
"@elliemae/ds-basic": "3.80.0-next.19",
|
|
13
|
+
"@elliemae/ds-breadcrumb": "3.80.0-next.19",
|
|
14
|
+
"@elliemae/ds-button-v2": "3.80.0-next.19",
|
|
15
|
+
"@elliemae/ds-card": "3.80.0-next.19",
|
|
16
|
+
"@elliemae/ds-card-navigation": "3.80.0-next.19",
|
|
17
|
+
"@elliemae/ds-card-v1": "3.80.0-next.19",
|
|
18
|
+
"@elliemae/ds-card-v1-detail": "3.80.0-next.19",
|
|
19
|
+
"@elliemae/ds-card-v2": "3.80.0-next.19",
|
|
20
|
+
"@elliemae/ds-card-v2-action-addon": "3.80.0-next.19",
|
|
21
|
+
"@elliemae/ds-card-v2-group": "3.80.0-next.19",
|
|
22
|
+
"@elliemae/ds-card-v3": "3.80.0-next.19",
|
|
23
|
+
"@elliemae/ds-card-v3-poc": "3.80.0-next.19",
|
|
24
|
+
"@elliemae/ds-chat": "3.80.0-next.19",
|
|
25
|
+
"@elliemae/ds-chat-bubble": "3.80.0-next.19",
|
|
26
|
+
"@elliemae/ds-chat-card": "3.80.0-next.19",
|
|
27
|
+
"@elliemae/ds-chat-container": "3.80.0-next.19",
|
|
28
|
+
"@elliemae/ds-chat-container-header": "3.80.0-next.19",
|
|
29
|
+
"@elliemae/ds-chat-empty-state": "3.80.0-next.19",
|
|
30
|
+
"@elliemae/ds-chat-floating-button": "3.80.0-next.19",
|
|
31
|
+
"@elliemae/ds-chat-message-delimeter": "3.80.0-next.19",
|
|
32
|
+
"@elliemae/ds-chat-sidebar": "3.80.0-next.19",
|
|
33
|
+
"@elliemae/ds-chat-system-message": "3.80.0-next.19",
|
|
34
|
+
"@elliemae/ds-chat-tile": "3.80.0-next.19",
|
|
35
|
+
"@elliemae/ds-chip": "3.80.0-next.19",
|
|
36
|
+
"@elliemae/ds-circular-progress-indicator": "3.80.0-next.19",
|
|
37
|
+
"@elliemae/ds-classnames": "3.80.0-next.19",
|
|
38
|
+
"@elliemae/ds-codeeditor": "3.80.0-next.19",
|
|
39
|
+
"@elliemae/ds-comments": "3.80.0-next.19",
|
|
40
|
+
"@elliemae/ds-controlled-form": "3.80.0-next.19",
|
|
41
|
+
"@elliemae/ds-csv-converter": "3.80.0-next.19",
|
|
42
|
+
"@elliemae/ds-data-table": "3.80.0-next.19",
|
|
43
|
+
"@elliemae/ds-data-table-action-cell": "3.80.0-next.19",
|
|
44
|
+
"@elliemae/ds-data-table-cell": "3.80.0-next.19",
|
|
45
|
+
"@elliemae/ds-data-table-cell-header": "3.80.0-next.19",
|
|
46
|
+
"@elliemae/ds-data-table-drag-and-drop-cell": "3.80.0-next.19",
|
|
47
|
+
"@elliemae/ds-data-table-expand-cell": "3.80.0-next.19",
|
|
48
|
+
"@elliemae/ds-data-table-filters": "3.80.0-next.19",
|
|
49
|
+
"@elliemae/ds-data-table-multi-select-cell": "3.80.0-next.19",
|
|
50
|
+
"@elliemae/ds-data-table-single-select-cell": "3.80.0-next.19",
|
|
51
|
+
"@elliemae/ds-dataviz": "3.80.0-next.19",
|
|
52
|
+
"@elliemae/ds-dataviz-pie": "3.80.0-next.19",
|
|
53
|
+
"@elliemae/ds-date-time-picker": "3.80.0-next.19",
|
|
54
|
+
"@elliemae/ds-decision-graph": "3.80.0-next.19",
|
|
55
|
+
"@elliemae/ds-dialog": "3.80.0-next.19",
|
|
56
|
+
"@elliemae/ds-drag-and-drop": "3.80.0-next.19",
|
|
57
|
+
"@elliemae/ds-dropdownmenu-v2": "3.80.0-next.19",
|
|
58
|
+
"@elliemae/ds-dropzone": "3.80.0-next.19",
|
|
59
|
+
"@elliemae/ds-fast-list": "3.80.0-next.19",
|
|
60
|
+
"@elliemae/ds-filter-bar": "3.80.0-next.19",
|
|
61
|
+
"@elliemae/ds-floating-context": "3.80.0-next.19",
|
|
62
|
+
"@elliemae/ds-form-checkbox": "3.80.0-next.19",
|
|
63
|
+
"@elliemae/ds-form-combobox": "3.80.0-next.19",
|
|
64
|
+
"@elliemae/ds-form-date-range-picker": "3.80.0-next.19",
|
|
65
|
+
"@elliemae/ds-form-date-time-picker": "3.80.0-next.19",
|
|
66
|
+
"@elliemae/ds-form-helpers-mask-hooks": "3.80.0-next.19",
|
|
67
|
+
"@elliemae/ds-form-input-text": "3.80.0-next.19",
|
|
68
|
+
"@elliemae/ds-form-input-textarea": "3.80.0-next.19",
|
|
69
|
+
"@elliemae/ds-form-layout-autocomplete": "3.80.0-next.19",
|
|
70
|
+
"@elliemae/ds-form-layout-blocks": "3.80.0-next.19",
|
|
71
|
+
"@elliemae/ds-form-layout-input-group": "3.80.0-next.19",
|
|
72
|
+
"@elliemae/ds-form-layout-label": "3.80.0-next.19",
|
|
73
|
+
"@elliemae/ds-form-multi-combobox": "3.80.0-next.19",
|
|
74
|
+
"@elliemae/ds-form-native-select": "3.80.0-next.19",
|
|
75
|
+
"@elliemae/ds-form-radio": "3.80.0-next.19",
|
|
76
|
+
"@elliemae/ds-form-select": "3.80.0-next.19",
|
|
77
|
+
"@elliemae/ds-form-single-combobox": "3.80.0-next.19",
|
|
78
|
+
"@elliemae/ds-form-toggle": "3.80.0-next.19",
|
|
79
|
+
"@elliemae/ds-global-header": "3.80.0-next.19",
|
|
80
|
+
"@elliemae/ds-grid": "3.80.0-next.19",
|
|
81
|
+
"@elliemae/ds-hooks-focus-stack": "3.80.0-next.19",
|
|
82
|
+
"@elliemae/ds-hooks-focus-trap": "3.80.0-next.19",
|
|
83
|
+
"@elliemae/ds-hooks-fontsize-detector": "3.80.0-next.19",
|
|
84
|
+
"@elliemae/ds-hooks-fontsize-media": "3.80.0-next.19",
|
|
85
|
+
"@elliemae/ds-hooks-headless-tooltip": "3.80.0-next.19",
|
|
86
|
+
"@elliemae/ds-hooks-is-mobile": "3.80.0-next.19",
|
|
87
|
+
"@elliemae/ds-hooks-is-showing-ellipsis": "3.80.0-next.19",
|
|
88
|
+
"@elliemae/ds-hooks-keyboard-navigation": "3.80.0-next.19",
|
|
89
|
+
"@elliemae/ds-hooks-on-blur-out": "3.80.0-next.19",
|
|
90
|
+
"@elliemae/ds-hooks-on-first-focus-in": "3.80.0-next.19",
|
|
91
|
+
"@elliemae/ds-icon": "3.80.0-next.19",
|
|
92
|
+
"@elliemae/ds-icons": "3.80.0-next.19",
|
|
93
|
+
"@elliemae/ds-image": "3.80.0-next.19",
|
|
94
|
+
"@elliemae/ds-imagelibrarymodal": "3.80.0-next.19",
|
|
95
|
+
"@elliemae/ds-indeterminate-progress-indicator": "3.80.0-next.19",
|
|
96
|
+
"@elliemae/ds-layout-provider": "3.80.0-next.19",
|
|
97
|
+
"@elliemae/ds-left-navigation": "3.80.0-next.19",
|
|
7
98
|
"@elliemae/ds-legacy-button": "1.0.16",
|
|
8
99
|
"@elliemae/ds-legacy-button-group": "1.0.16",
|
|
9
100
|
"@elliemae/ds-legacy-button-v1": "1.0.16",
|
|
@@ -38,153 +129,62 @@
|
|
|
38
129
|
"@elliemae/ds-legacy-wysiwygeditor": "1.0.16",
|
|
39
130
|
"@elliemae/ds-legacy-zipcode-search": "1.0.16",
|
|
40
131
|
"@elliemae/ds-legacy-zoom": "1.0.16",
|
|
41
|
-
"@elliemae/ds-
|
|
42
|
-
"@elliemae/ds-
|
|
43
|
-
"@elliemae/ds-
|
|
44
|
-
"@elliemae/ds-
|
|
45
|
-
"@elliemae/ds-
|
|
46
|
-
"@elliemae/ds-
|
|
47
|
-
"@elliemae/ds-
|
|
48
|
-
"@elliemae/ds-
|
|
49
|
-
"@elliemae/ds-
|
|
50
|
-
"@elliemae/ds-
|
|
51
|
-
"@elliemae/ds-
|
|
52
|
-
"@elliemae/ds-
|
|
53
|
-
"@elliemae/ds-
|
|
54
|
-
"@elliemae/ds-
|
|
55
|
-
"@elliemae/ds-
|
|
56
|
-
"@elliemae/ds-
|
|
57
|
-
"@elliemae/ds-
|
|
58
|
-
"@elliemae/ds-
|
|
59
|
-
"@elliemae/ds-
|
|
60
|
-
"@elliemae/ds-
|
|
61
|
-
"@elliemae/ds-
|
|
62
|
-
"@elliemae/ds-
|
|
63
|
-
"@elliemae/ds-
|
|
64
|
-
"@elliemae/ds-
|
|
65
|
-
"@elliemae/ds-
|
|
66
|
-
"@elliemae/ds-
|
|
67
|
-
"@elliemae/ds-
|
|
68
|
-
"@elliemae/ds-
|
|
69
|
-
"@elliemae/ds-
|
|
70
|
-
"@elliemae/ds-
|
|
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-
|
|
80
|
-
"@elliemae/ds-
|
|
81
|
-
"@elliemae/ds-
|
|
82
|
-
"@elliemae/ds-
|
|
83
|
-
"@elliemae/ds-
|
|
84
|
-
"@elliemae/ds-
|
|
85
|
-
"@elliemae/ds-
|
|
86
|
-
"@elliemae/ds-
|
|
87
|
-
"@elliemae/ds-
|
|
88
|
-
"@elliemae/ds-
|
|
89
|
-
"@elliemae/ds-
|
|
90
|
-
"@elliemae/ds-
|
|
91
|
-
"@elliemae/ds-
|
|
92
|
-
"@elliemae/ds-
|
|
93
|
-
"@elliemae/ds-
|
|
94
|
-
"@elliemae/ds-
|
|
95
|
-
"@elliemae/ds-
|
|
96
|
-
"@elliemae/ds-
|
|
97
|
-
"@elliemae/ds-form-date-time-picker": "3.80.0-next.14",
|
|
98
|
-
"@elliemae/ds-form-date-range-picker": "3.80.0-next.14",
|
|
99
|
-
"@elliemae/ds-form-input-text": "3.80.0-next.14",
|
|
100
|
-
"@elliemae/ds-form-input-textarea": "3.80.0-next.14",
|
|
101
|
-
"@elliemae/ds-form-layout-blocks": "3.80.0-next.14",
|
|
102
|
-
"@elliemae/ds-form-layout-autocomplete": "3.80.0-next.14",
|
|
103
|
-
"@elliemae/ds-form-layout-label": "3.80.0-next.14",
|
|
104
|
-
"@elliemae/ds-form-layout-input-group": "3.80.0-next.14",
|
|
105
|
-
"@elliemae/ds-form-multi-combobox": "3.80.0-next.14",
|
|
106
|
-
"@elliemae/ds-form-native-select": "3.80.0-next.14",
|
|
107
|
-
"@elliemae/ds-form-radio": "3.80.0-next.14",
|
|
108
|
-
"@elliemae/ds-form-select": "3.80.0-next.14",
|
|
109
|
-
"@elliemae/ds-form-single-combobox": "3.80.0-next.14",
|
|
110
|
-
"@elliemae/ds-form-toggle": "3.80.0-next.14",
|
|
111
|
-
"@elliemae/ds-global-header": "3.80.0-next.14",
|
|
112
|
-
"@elliemae/ds-form-helpers-mask-hooks": "3.80.0-next.14",
|
|
113
|
-
"@elliemae/ds-hooks-focus-trap": "3.80.0-next.14",
|
|
114
|
-
"@elliemae/ds-hooks-focus-stack": "3.80.0-next.14",
|
|
115
|
-
"@elliemae/ds-hooks-fontsize-media": "3.80.0-next.14",
|
|
116
|
-
"@elliemae/ds-hooks-fontsize-detector": "3.80.0-next.14",
|
|
117
|
-
"@elliemae/ds-hooks-headless-tooltip": "3.80.0-next.14",
|
|
118
|
-
"@elliemae/ds-hooks-is-mobile": "3.80.0-next.14",
|
|
119
|
-
"@elliemae/ds-hooks-keyboard-navigation": "3.80.0-next.14",
|
|
120
|
-
"@elliemae/ds-hooks-is-showing-ellipsis": "3.80.0-next.14",
|
|
121
|
-
"@elliemae/ds-hooks-on-blur-out": "3.80.0-next.14",
|
|
122
|
-
"@elliemae/ds-icon": "3.80.0-next.14",
|
|
123
|
-
"@elliemae/ds-hooks-on-first-focus-in": "3.80.0-next.14",
|
|
124
|
-
"@elliemae/ds-icons": "3.80.0-next.14",
|
|
125
|
-
"@elliemae/ds-image": "3.80.0-next.14",
|
|
126
|
-
"@elliemae/ds-imagelibrarymodal": "3.80.0-next.14",
|
|
127
|
-
"@elliemae/ds-grid": "3.80.0-next.14",
|
|
128
|
-
"@elliemae/ds-left-navigation": "3.80.0-next.14",
|
|
129
|
-
"@elliemae/ds-indeterminate-progress-indicator": "3.80.0-next.14",
|
|
130
|
-
"@elliemae/ds-loading-indicator": "3.80.0-next.14",
|
|
131
|
-
"@elliemae/ds-menu-button": "3.80.0-next.14",
|
|
132
|
-
"@elliemae/ds-menu-items": "3.80.0-next.14",
|
|
133
|
-
"@elliemae/ds-menu-items-action": "3.80.0-next.14",
|
|
134
|
-
"@elliemae/ds-menu-items-commons": "3.80.0-next.14",
|
|
135
|
-
"@elliemae/ds-menu-items-section": "3.80.0-next.14",
|
|
136
|
-
"@elliemae/ds-menu-items-multi": "3.80.0-next.14",
|
|
137
|
-
"@elliemae/ds-menu-items-single": "3.80.0-next.14",
|
|
138
|
-
"@elliemae/ds-menu-items-separator": "3.80.0-next.14",
|
|
139
|
-
"@elliemae/ds-menu-items-single-with-submenu": "3.80.0-next.14",
|
|
140
|
-
"@elliemae/ds-menu-items-skeleton": "3.80.0-next.14",
|
|
141
|
-
"@elliemae/ds-menu-items-submenu": "3.80.0-next.14",
|
|
142
|
-
"@elliemae/ds-menu-tree-item": "3.80.0-next.14",
|
|
143
|
-
"@elliemae/ds-modal-slide": "3.80.0-next.14",
|
|
144
|
-
"@elliemae/ds-notification-badge": "3.80.0-next.14",
|
|
145
|
-
"@elliemae/ds-page-header": "3.80.0-next.14",
|
|
146
|
-
"@elliemae/ds-page-header-v2": "3.80.0-next.14",
|
|
147
|
-
"@elliemae/ds-overlay": "3.80.0-next.14",
|
|
148
|
-
"@elliemae/ds-page-header-v1": "3.80.0-next.14",
|
|
149
|
-
"@elliemae/ds-page-layout": "3.80.0-next.14",
|
|
150
|
-
"@elliemae/ds-pagination": "3.80.0-next.14",
|
|
151
|
-
"@elliemae/ds-progress-indicator": "3.80.0-next.14",
|
|
152
|
-
"@elliemae/ds-dropdownmenu-v2": "3.80.0-next.14",
|
|
153
|
-
"@elliemae/ds-layout-provider": "3.80.0-next.14",
|
|
154
|
-
"@elliemae/ds-pills-v2": "3.80.0-next.14",
|
|
155
|
-
"@elliemae/ds-portal": "3.80.0-next.14",
|
|
156
|
-
"@elliemae/ds-read-more": "3.80.0-next.14",
|
|
157
|
-
"@elliemae/ds-query-builder": "3.80.0-next.14",
|
|
158
|
-
"@elliemae/ds-props-helpers": "3.80.0-next.14",
|
|
159
|
-
"@elliemae/ds-separator": "3.80.0-next.14",
|
|
160
|
-
"@elliemae/ds-ribbon": "3.80.0-next.14",
|
|
161
|
-
"@elliemae/ds-scrollable-container": "3.80.0-next.14",
|
|
162
|
-
"@elliemae/ds-resizeable-container": "3.80.0-next.14",
|
|
163
|
-
"@elliemae/ds-shared": "3.80.0-next.14",
|
|
164
|
-
"@elliemae/ds-side-panel-header": "3.80.0-next.14",
|
|
165
|
-
"@elliemae/ds-shuttle-v2": "3.80.0-next.14",
|
|
166
|
-
"@elliemae/ds-side-panel": "3.80.0-next.14",
|
|
167
|
-
"@elliemae/ds-slider-v2": "3.80.0-next.14",
|
|
168
|
-
"@elliemae/ds-skeleton": "3.80.0-next.14",
|
|
169
|
-
"@elliemae/ds-svg": "3.80.0-next.14",
|
|
170
|
-
"@elliemae/ds-stepper": "3.80.0-next.14",
|
|
171
|
-
"@elliemae/ds-square-indicator": "3.80.0-next.14",
|
|
172
|
-
"@elliemae/ds-system": "3.80.0-next.14",
|
|
173
|
-
"@elliemae/ds-tabs": "3.80.0-next.14",
|
|
174
|
-
"@elliemae/ds-test-utils": "3.80.0-next.14",
|
|
175
|
-
"@elliemae/ds-toast": "3.80.0-next.14",
|
|
176
|
-
"@elliemae/ds-toolbar-v1": "3.80.0-next.14",
|
|
177
|
-
"@elliemae/ds-transition": "3.80.0-next.14",
|
|
178
|
-
"@elliemae/ds-tooltip-v3": "3.80.0-next.14",
|
|
179
|
-
"@elliemae/ds-tree-model": "3.80.0-next.14",
|
|
180
|
-
"@elliemae/ds-toolbar-v2": "3.80.0-next.14",
|
|
181
|
-
"@elliemae/ds-truncated-expandable-text": "3.80.0-next.14",
|
|
182
|
-
"@elliemae/ds-typescript-helpers": "3.80.0-next.14",
|
|
183
|
-
"@elliemae/ds-typography": "3.80.0-next.14",
|
|
184
|
-
"@elliemae/ds-virtual-list": "3.80.0-next.14",
|
|
185
|
-
"@elliemae/ds-treeview": "3.80.0-next.14",
|
|
186
|
-
"@elliemae/ds-wizard": "3.80.0-next.14",
|
|
187
|
-
"@elliemae/ds-zustand-helpers": "3.80.0-next.14"
|
|
132
|
+
"@elliemae/ds-loading-indicator": "3.80.0-next.19",
|
|
133
|
+
"@elliemae/ds-menu-button": "3.80.0-next.19",
|
|
134
|
+
"@elliemae/ds-menu-items": "3.80.0-next.19",
|
|
135
|
+
"@elliemae/ds-menu-items-action": "3.80.0-next.19",
|
|
136
|
+
"@elliemae/ds-menu-items-commons": "3.80.0-next.19",
|
|
137
|
+
"@elliemae/ds-menu-items-multi": "3.80.0-next.19",
|
|
138
|
+
"@elliemae/ds-menu-items-section": "3.80.0-next.19",
|
|
139
|
+
"@elliemae/ds-menu-items-separator": "3.80.0-next.19",
|
|
140
|
+
"@elliemae/ds-menu-items-single": "3.80.0-next.19",
|
|
141
|
+
"@elliemae/ds-menu-items-single-with-submenu": "3.80.0-next.19",
|
|
142
|
+
"@elliemae/ds-menu-items-skeleton": "3.80.0-next.19",
|
|
143
|
+
"@elliemae/ds-menu-items-submenu": "3.80.0-next.19",
|
|
144
|
+
"@elliemae/ds-menu-tree-item": "3.80.0-next.19",
|
|
145
|
+
"@elliemae/ds-modal-slide": "3.80.0-next.19",
|
|
146
|
+
"@elliemae/ds-notification-badge": "3.80.0-next.19",
|
|
147
|
+
"@elliemae/ds-overlay": "3.80.0-next.19",
|
|
148
|
+
"@elliemae/ds-page-header": "3.80.0-next.19",
|
|
149
|
+
"@elliemae/ds-page-header-v1": "3.80.0-next.19",
|
|
150
|
+
"@elliemae/ds-page-header-v2": "3.80.0-next.19",
|
|
151
|
+
"@elliemae/ds-page-layout": "3.80.0-next.19",
|
|
152
|
+
"@elliemae/ds-pagination": "3.80.0-next.19",
|
|
153
|
+
"@elliemae/ds-pills-v2": "3.80.0-next.19",
|
|
154
|
+
"@elliemae/ds-portal": "3.80.0-next.19",
|
|
155
|
+
"@elliemae/ds-progress-indicator": "3.80.0-next.19",
|
|
156
|
+
"@elliemae/ds-props-helpers": "3.80.0-next.19",
|
|
157
|
+
"@elliemae/ds-query-builder": "3.80.0-next.19",
|
|
158
|
+
"@elliemae/ds-read-more": "3.80.0-next.19",
|
|
159
|
+
"@elliemae/ds-resizeable-container": "3.80.0-next.19",
|
|
160
|
+
"@elliemae/ds-ribbon": "3.80.0-next.19",
|
|
161
|
+
"@elliemae/ds-scrollable-container": "3.80.0-next.19",
|
|
162
|
+
"@elliemae/ds-separator": "3.80.0-next.19",
|
|
163
|
+
"@elliemae/ds-shared": "3.80.0-next.19",
|
|
164
|
+
"@elliemae/ds-shuttle-v2": "3.80.0-next.19",
|
|
165
|
+
"@elliemae/ds-side-panel": "3.80.0-next.19",
|
|
166
|
+
"@elliemae/ds-side-panel-header": "3.80.0-next.19",
|
|
167
|
+
"@elliemae/ds-skeleton": "3.80.0-next.19",
|
|
168
|
+
"@elliemae/ds-slider-v2": "3.80.0-next.19",
|
|
169
|
+
"@elliemae/ds-square-indicator": "3.80.0-next.19",
|
|
170
|
+
"@elliemae/ds-stepper": "3.80.0-next.19",
|
|
171
|
+
"@elliemae/ds-svg": "3.80.0-next.19",
|
|
172
|
+
"@elliemae/ds-system": "3.80.0-next.19",
|
|
173
|
+
"@elliemae/ds-tabs": "3.80.0-next.19",
|
|
174
|
+
"@elliemae/ds-test-utils": "3.80.0-next.19",
|
|
175
|
+
"@elliemae/ds-toast": "3.80.0-next.19",
|
|
176
|
+
"@elliemae/ds-toolbar-v1": "3.80.0-next.19",
|
|
177
|
+
"@elliemae/ds-toolbar-v2": "3.80.0-next.19",
|
|
178
|
+
"@elliemae/ds-tooltip-v3": "3.80.0-next.19",
|
|
179
|
+
"@elliemae/ds-transition": "3.80.0-next.19",
|
|
180
|
+
"@elliemae/ds-tree-model": "3.80.0-next.19",
|
|
181
|
+
"@elliemae/ds-treeview": "3.80.0-next.19",
|
|
182
|
+
"@elliemae/ds-truncated-expandable-text": "3.80.0-next.19",
|
|
183
|
+
"@elliemae/ds-typescript-helpers": "3.80.0-next.19",
|
|
184
|
+
"@elliemae/ds-typography": "3.80.0-next.19",
|
|
185
|
+
"@elliemae/ds-virtual-list": "3.80.0-next.19",
|
|
186
|
+
"@elliemae/ds-wizard": "3.80.0-next.19",
|
|
187
|
+
"@elliemae/ds-zustand-helpers": "3.80.0-next.19"
|
|
188
188
|
},
|
|
189
189
|
"publishConfig": {
|
|
190
190
|
"access": "public"
|