@transferwise/components 46.128.3 → 46.129.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/build/alert/Alert.js +1 -1
- package/build/alert/Alert.mjs +1 -1
- package/build/common/liveRegion/LiveRegion.js +42 -0
- package/build/common/liveRegion/LiveRegion.js.map +1 -0
- package/build/common/liveRegion/LiveRegion.mjs +40 -0
- package/build/common/liveRegion/LiveRegion.mjs.map +1 -0
- package/build/flowNavigation/FlowNavigation.js +1 -1
- package/build/flowNavigation/FlowNavigation.mjs +1 -1
- package/build/inputs/SelectInput.js +1 -1
- package/build/inputs/SelectInput.js.map +1 -1
- package/build/inputs/SelectInput.mjs +1 -1
- package/build/inputs/SelectInput.mjs.map +1 -1
- package/build/inputs/_ButtonInput.js +2 -2
- package/build/inputs/_ButtonInput.js.map +1 -1
- package/build/inputs/_ButtonInput.mjs +2 -2
- package/build/inputs/_ButtonInput.mjs.map +1 -1
- package/build/main.css +108 -100
- package/build/overlayHeader/OverlayHeader.js +1 -1
- package/build/overlayHeader/OverlayHeader.mjs +1 -1
- package/build/prompt/InfoPrompt/InfoPrompt.js +35 -29
- package/build/prompt/InfoPrompt/InfoPrompt.js.map +1 -1
- package/build/prompt/InfoPrompt/InfoPrompt.mjs +35 -29
- package/build/prompt/InfoPrompt/InfoPrompt.mjs.map +1 -1
- package/build/sentimentSurface/SentimentSurface.js +5 -1
- package/build/sentimentSurface/SentimentSurface.js.map +1 -1
- package/build/sentimentSurface/SentimentSurface.mjs +5 -1
- package/build/sentimentSurface/SentimentSurface.mjs.map +1 -1
- package/build/styles/inputs/SelectInput.css +8 -0
- package/build/styles/main.css +108 -100
- package/build/styles/sentimentSurface/SentimentSurface.css +100 -100
- package/build/types/common/index.d.ts +2 -0
- package/build/types/common/index.d.ts.map +1 -1
- package/build/types/common/liveRegion/LiveRegion.d.ts +23 -0
- package/build/types/common/liveRegion/LiveRegion.d.ts.map +1 -0
- package/build/types/common/liveRegion/index.d.ts +3 -0
- package/build/types/common/liveRegion/index.d.ts.map +1 -0
- package/build/types/inputs/SelectInput.d.ts.map +1 -1
- package/build/types/prompt/InfoPrompt/InfoPrompt.d.ts +11 -2
- package/build/types/prompt/InfoPrompt/InfoPrompt.d.ts.map +1 -1
- package/build/types/sentimentSurface/SentimentSurface.d.ts.map +1 -1
- package/package.json +1 -1
- package/src/common/index.ts +2 -0
- package/src/common/liveRegion/LiveRegion.test.tsx +56 -0
- package/src/common/liveRegion/LiveRegion.tsx +49 -0
- package/src/common/liveRegion/index.ts +2 -0
- package/src/inputs/SelectInput.css +8 -0
- package/src/inputs/SelectInput.story.tsx +2 -2
- package/src/inputs/SelectInput.test.story.tsx +57 -1
- package/src/inputs/SelectInput.test.tsx +33 -1
- package/src/inputs/SelectInput.tsx +2 -1
- package/src/inputs/_ButtonInput.less +8 -0
- package/src/inputs/_ButtonInput.tsx +1 -1
- package/src/main.css +108 -100
- package/src/prompt/InfoPrompt/InfoPrompt.test.story.tsx +119 -0
- package/src/prompt/InfoPrompt/InfoPrompt.tsx +47 -34
- package/src/sentimentSurface/SentimentSurface.css +100 -100
- package/src/sentimentSurface/SentimentSurface.less +50 -50
- package/src/sentimentSurface/SentimentSurface.test.story.tsx +19 -0
- package/src/sentimentSurface/SentimentSurface.tsx +3 -0
|
@@ -1,11 +1,17 @@
|
|
|
1
1
|
import type { Meta, StoryObj } from '@storybook/react-webpack5';
|
|
2
2
|
import { fireEvent, fn, type Mock, screen, userEvent, within } from 'storybook/test';
|
|
3
|
+
import { useState } from 'react';
|
|
3
4
|
|
|
4
5
|
import { allModes } from '../../.storybook/modes';
|
|
5
6
|
import Body from '../body';
|
|
6
7
|
import { Field } from '../field/Field';
|
|
7
8
|
import { lorem5, lorem500 } from '../test-utils';
|
|
8
|
-
import {
|
|
9
|
+
import {
|
|
10
|
+
SelectInput,
|
|
11
|
+
SelectInputOptionContent,
|
|
12
|
+
type SelectInputProps,
|
|
13
|
+
sortByRelevance,
|
|
14
|
+
} from './SelectInput';
|
|
9
15
|
|
|
10
16
|
const meta = {
|
|
11
17
|
title: 'Forms/SelectInput/Tests',
|
|
@@ -1364,3 +1370,53 @@ export const SmoothScrollReset: Story<string> = {
|
|
|
1364
1370
|
},
|
|
1365
1371
|
},
|
|
1366
1372
|
};
|
|
1373
|
+
|
|
1374
|
+
interface OptionWithDescription {
|
|
1375
|
+
id: string;
|
|
1376
|
+
title: string;
|
|
1377
|
+
description?: string;
|
|
1378
|
+
}
|
|
1379
|
+
|
|
1380
|
+
const optionsWithDescription: OptionWithDescription[] = [
|
|
1381
|
+
{ id: '1', title: 'Option One', description: 'This is the first option' },
|
|
1382
|
+
{ id: '2', title: 'Option Two (no description)' },
|
|
1383
|
+
{ id: '3', title: 'Option Three', description: 'This is the third option' },
|
|
1384
|
+
];
|
|
1385
|
+
|
|
1386
|
+
/**
|
|
1387
|
+
* Test story to verify that SelectInput correctly displays an item with a description
|
|
1388
|
+
* when shown in the trigger button. The description should be visible in the trigger
|
|
1389
|
+
* after selection.
|
|
1390
|
+
*/
|
|
1391
|
+
export const TriggerWithDescription: Story<OptionWithDescription> = {
|
|
1392
|
+
args: {
|
|
1393
|
+
items: optionsWithDescription.map((option) => ({
|
|
1394
|
+
type: 'option',
|
|
1395
|
+
value: option,
|
|
1396
|
+
})),
|
|
1397
|
+
defaultValue: optionsWithDescription[0],
|
|
1398
|
+
placeholder: 'Select an option',
|
|
1399
|
+
renderValue: (option, withinTrigger) => (
|
|
1400
|
+
<SelectInputOptionContent
|
|
1401
|
+
title={option.title}
|
|
1402
|
+
description={withinTrigger ? option.description : undefined}
|
|
1403
|
+
/>
|
|
1404
|
+
),
|
|
1405
|
+
},
|
|
1406
|
+
render: function Render({ onChange, ...args }) {
|
|
1407
|
+
const [selectedOption, setSelectedOption] = useState<OptionWithDescription>(
|
|
1408
|
+
optionsWithDescription[0],
|
|
1409
|
+
);
|
|
1410
|
+
|
|
1411
|
+
return (
|
|
1412
|
+
<SelectInput
|
|
1413
|
+
{...args}
|
|
1414
|
+
value={selectedOption}
|
|
1415
|
+
onChange={(option) => {
|
|
1416
|
+
setSelectedOption(option);
|
|
1417
|
+
onChange?.(option);
|
|
1418
|
+
}}
|
|
1419
|
+
/>
|
|
1420
|
+
);
|
|
1421
|
+
},
|
|
1422
|
+
};
|
|
@@ -4,7 +4,12 @@ import { mockAnimationsApi } from 'jsdom-testing-mocks';
|
|
|
4
4
|
|
|
5
5
|
import { render, mockMatchMedia, mockResizeObserver } from '../test-utils';
|
|
6
6
|
|
|
7
|
-
import {
|
|
7
|
+
import {
|
|
8
|
+
SelectInput,
|
|
9
|
+
SelectInputOptionContent,
|
|
10
|
+
type SelectInputOptionItem,
|
|
11
|
+
type SelectInputProps,
|
|
12
|
+
} from './SelectInput';
|
|
8
13
|
import { Field } from '../field/Field';
|
|
9
14
|
|
|
10
15
|
mockMatchMedia();
|
|
@@ -511,6 +516,33 @@ describe('SelectInput', () => {
|
|
|
511
516
|
expect(options[2]).toHaveTextContent('Zambia');
|
|
512
517
|
});
|
|
513
518
|
|
|
519
|
+
it('adds class to description wrapper when description is present', () => {
|
|
520
|
+
interface Currency {
|
|
521
|
+
code: string;
|
|
522
|
+
name: string;
|
|
523
|
+
description: string;
|
|
524
|
+
}
|
|
525
|
+
|
|
526
|
+
const usd: Currency = { code: 'USD', name: 'US Dollar', description: 'United States Dollar' };
|
|
527
|
+
const eur: Currency = { code: 'EUR', name: 'Euro', description: 'European Currency' };
|
|
528
|
+
|
|
529
|
+
render(
|
|
530
|
+
<SelectInput<Currency>
|
|
531
|
+
items={[
|
|
532
|
+
{ type: 'option', value: usd },
|
|
533
|
+
{ type: 'option', value: eur },
|
|
534
|
+
]}
|
|
535
|
+
renderValue={(currency) => (
|
|
536
|
+
<SelectInputOptionContent title={currency.name} description={currency.description} />
|
|
537
|
+
)}
|
|
538
|
+
value={usd}
|
|
539
|
+
/>,
|
|
540
|
+
);
|
|
541
|
+
|
|
542
|
+
const descriptionElement = screen.getByText('United States Dollar');
|
|
543
|
+
expect(descriptionElement).toHaveClass('np-select-input-option-description-in-trigger');
|
|
544
|
+
});
|
|
545
|
+
|
|
514
546
|
describe('listbox label', () => {
|
|
515
547
|
const fieldLabel = 'Fruits';
|
|
516
548
|
const triggerLabel = 'Select fruit';
|
|
@@ -1256,7 +1256,8 @@ export function SelectInputOptionContent({
|
|
|
1256
1256
|
<div
|
|
1257
1257
|
className={clsx(
|
|
1258
1258
|
'np-select-input-option-content-text-secondary np-text-body-default',
|
|
1259
|
-
withinTrigger &&
|
|
1259
|
+
withinTrigger &&
|
|
1260
|
+
'np-select-input-option-content-text-within-trigger np-select-input-option-description-in-trigger',
|
|
1260
1261
|
)}
|
|
1261
1262
|
>
|
|
1262
1263
|
{description}
|
|
@@ -4,4 +4,12 @@
|
|
|
4
4
|
align-content: center;
|
|
5
5
|
border-radius: var(--size-10);
|
|
6
6
|
text-align: start;
|
|
7
|
+
|
|
8
|
+
// Using !important to overwrite styles from .form-control and inputClassNameBase util, which also use !important
|
|
9
|
+
&:has(.np-select-input-option-description-in-trigger) {
|
|
10
|
+
height: auto !important;
|
|
11
|
+
align-content: start;
|
|
12
|
+
padding-top: var(--size-12) !important;
|
|
13
|
+
padding-bottom: var(--size-12) !important;
|
|
14
|
+
}
|
|
7
15
|
}
|
|
@@ -18,7 +18,7 @@ export const ButtonInput = forwardRef(function ButtonInput(
|
|
|
18
18
|
<button
|
|
19
19
|
ref={ref}
|
|
20
20
|
type="button"
|
|
21
|
-
className={clsx(
|
|
21
|
+
className={clsx(inputClassNameBase({ size }), 'np-button-input', className)}
|
|
22
22
|
style={{ ...inputPaddings, ...style }}
|
|
23
23
|
{...restProps}
|
|
24
24
|
/>
|
package/src/main.css
CHANGED
|
@@ -5,11 +5,11 @@
|
|
|
5
5
|
background-color: var(--color-sentiment-background-surface);
|
|
6
6
|
color: var(--color-sentiment-content-primary);
|
|
7
7
|
}
|
|
8
|
-
.np-theme-personal
|
|
9
|
-
.np-theme-business
|
|
10
|
-
.np-theme-platform
|
|
11
|
-
.np-theme-personal--bright-green
|
|
12
|
-
.np-theme-business--bright-green
|
|
8
|
+
.np-theme-personal.wds-sentiment-surface-negative-base,
|
|
9
|
+
.np-theme-business.wds-sentiment-surface-negative-base,
|
|
10
|
+
.np-theme-platform.wds-sentiment-surface-negative-base,
|
|
11
|
+
.np-theme-personal--bright-green.wds-sentiment-surface-negative-base,
|
|
12
|
+
.np-theme-business--bright-green.wds-sentiment-surface-negative-base {
|
|
13
13
|
--color-sentiment-content-primary: #CB272F;
|
|
14
14
|
--color-sentiment-content-primary-hover: #B8232B;
|
|
15
15
|
--color-sentiment-content-primary-active: #A72027;
|
|
@@ -29,11 +29,11 @@
|
|
|
29
29
|
--color-sentiment-background-surface-hover: #F9E1E1;
|
|
30
30
|
--color-sentiment-background-surface-active: #F8D8D8;
|
|
31
31
|
}
|
|
32
|
-
.np-theme-personal
|
|
33
|
-
.np-theme-business
|
|
34
|
-
.np-theme-platform
|
|
35
|
-
.np-theme-personal--bright-green
|
|
36
|
-
.np-theme-business--bright-green
|
|
32
|
+
.np-theme-personal.wds-sentiment-surface-negative-elevated,
|
|
33
|
+
.np-theme-business.wds-sentiment-surface-negative-elevated,
|
|
34
|
+
.np-theme-platform.wds-sentiment-surface-negative-elevated,
|
|
35
|
+
.np-theme-personal--bright-green.wds-sentiment-surface-negative-elevated,
|
|
36
|
+
.np-theme-business--bright-green.wds-sentiment-surface-negative-elevated {
|
|
37
37
|
--color-sentiment-content-primary: #FFFFFF;
|
|
38
38
|
--color-sentiment-content-primary-hover: #F5CCCC;
|
|
39
39
|
--color-sentiment-content-primary-active: #F1B7B7;
|
|
@@ -53,11 +53,11 @@
|
|
|
53
53
|
--color-sentiment-background-surface-hover: #B8232B;
|
|
54
54
|
--color-sentiment-background-surface-active: #A72027;
|
|
55
55
|
}
|
|
56
|
-
.np-theme-personal--dark
|
|
57
|
-
.np-theme-business--dark
|
|
58
|
-
.np-theme-personal--forest-green
|
|
59
|
-
.np-theme-business--forest-green
|
|
60
|
-
.np-theme-platform--forest-green
|
|
56
|
+
.np-theme-personal--dark.wds-sentiment-surface-negative-base,
|
|
57
|
+
.np-theme-business--dark.wds-sentiment-surface-negative-base,
|
|
58
|
+
.np-theme-personal--forest-green.wds-sentiment-surface-negative-base,
|
|
59
|
+
.np-theme-business--forest-green.wds-sentiment-surface-negative-base,
|
|
60
|
+
.np-theme-platform--forest-green.wds-sentiment-surface-negative-base {
|
|
61
61
|
--color-sentiment-content-primary: #FFA8AD;
|
|
62
62
|
--color-sentiment-content-primary-hover: #FFBDC0;
|
|
63
63
|
--color-sentiment-content-primary-active: #FFD1D3;
|
|
@@ -77,11 +77,11 @@
|
|
|
77
77
|
--color-sentiment-background-surface-hover: #641115;
|
|
78
78
|
--color-sentiment-background-surface-active: #761418;
|
|
79
79
|
}
|
|
80
|
-
.np-theme-personal--dark
|
|
81
|
-
.np-theme-business--dark
|
|
82
|
-
.np-theme-personal--forest-green
|
|
83
|
-
.np-theme-business--forest-green
|
|
84
|
-
.np-theme-platform--forest-green
|
|
80
|
+
.np-theme-personal--dark.wds-sentiment-surface-negative-elevated,
|
|
81
|
+
.np-theme-business--dark.wds-sentiment-surface-negative-elevated,
|
|
82
|
+
.np-theme-personal--forest-green.wds-sentiment-surface-negative-elevated,
|
|
83
|
+
.np-theme-business--forest-green.wds-sentiment-surface-negative-elevated,
|
|
84
|
+
.np-theme-platform--forest-green.wds-sentiment-surface-negative-elevated {
|
|
85
85
|
--color-sentiment-content-primary: #410B0D;
|
|
86
86
|
--color-sentiment-content-primary-hover: #641115;
|
|
87
87
|
--color-sentiment-content-primary-active: #761418;
|
|
@@ -101,11 +101,11 @@
|
|
|
101
101
|
--color-sentiment-background-surface-hover: #FFBDC0;
|
|
102
102
|
--color-sentiment-background-surface-active: #FFD1D3;
|
|
103
103
|
}
|
|
104
|
-
.np-theme-personal
|
|
105
|
-
.np-theme-business
|
|
106
|
-
.np-theme-platform
|
|
107
|
-
.np-theme-personal--bright-green
|
|
108
|
-
.np-theme-business--bright-green
|
|
104
|
+
.np-theme-personal.wds-sentiment-surface-warning-base,
|
|
105
|
+
.np-theme-business.wds-sentiment-surface-warning-base,
|
|
106
|
+
.np-theme-platform.wds-sentiment-surface-warning-base,
|
|
107
|
+
.np-theme-personal--bright-green.wds-sentiment-surface-warning-base,
|
|
108
|
+
.np-theme-business--bright-green.wds-sentiment-surface-warning-base {
|
|
109
109
|
--color-sentiment-content-primary: #4A3B1C;
|
|
110
110
|
--color-sentiment-content-primary-hover: #302612;
|
|
111
111
|
--color-sentiment-content-primary-active: #2C2311;
|
|
@@ -125,11 +125,11 @@
|
|
|
125
125
|
--color-sentiment-background-surface-hover: #FFF0B2;
|
|
126
126
|
--color-sentiment-background-surface-active: #FFE98F;
|
|
127
127
|
}
|
|
128
|
-
.np-theme-personal
|
|
129
|
-
.np-theme-business
|
|
130
|
-
.np-theme-platform
|
|
131
|
-
.np-theme-personal--bright-green
|
|
132
|
-
.np-theme-business--bright-green
|
|
128
|
+
.np-theme-personal.wds-sentiment-surface-warning-elevated,
|
|
129
|
+
.np-theme-business.wds-sentiment-surface-warning-elevated,
|
|
130
|
+
.np-theme-platform.wds-sentiment-surface-warning-elevated,
|
|
131
|
+
.np-theme-personal--bright-green.wds-sentiment-surface-warning-elevated,
|
|
132
|
+
.np-theme-business--bright-green.wds-sentiment-surface-warning-elevated {
|
|
133
133
|
--color-sentiment-content-primary: #4A3B1C;
|
|
134
134
|
--color-sentiment-content-primary-hover: #302612;
|
|
135
135
|
--color-sentiment-content-primary-active: #2C2311;
|
|
@@ -149,11 +149,11 @@
|
|
|
149
149
|
--color-sentiment-background-surface-hover: #FFBF0F;
|
|
150
150
|
--color-sentiment-background-surface-active: #FFBB00;
|
|
151
151
|
}
|
|
152
|
-
.np-theme-personal--dark
|
|
153
|
-
.np-theme-business--dark
|
|
154
|
-
.np-theme-personal--forest-green
|
|
155
|
-
.np-theme-business--forest-green
|
|
156
|
-
.np-theme-platform--forest-green
|
|
152
|
+
.np-theme-personal--dark.wds-sentiment-surface-warning-base,
|
|
153
|
+
.np-theme-business--dark.wds-sentiment-surface-warning-base,
|
|
154
|
+
.np-theme-personal--forest-green.wds-sentiment-surface-warning-base,
|
|
155
|
+
.np-theme-business--forest-green.wds-sentiment-surface-warning-base,
|
|
156
|
+
.np-theme-platform--forest-green.wds-sentiment-surface-warning-base {
|
|
157
157
|
--color-sentiment-content-primary: #FADC65;
|
|
158
158
|
--color-sentiment-content-primary-hover: #F9D648;
|
|
159
159
|
--color-sentiment-content-primary-active: #F8CD20;
|
|
@@ -173,11 +173,11 @@
|
|
|
173
173
|
--color-sentiment-background-surface-hover: #504930;
|
|
174
174
|
--color-sentiment-background-surface-active: #665D3D;
|
|
175
175
|
}
|
|
176
|
-
.np-theme-personal--dark
|
|
177
|
-
.np-theme-business--dark
|
|
178
|
-
.np-theme-personal--forest-green
|
|
179
|
-
.np-theme-business--forest-green
|
|
180
|
-
.np-theme-platform--forest-green
|
|
176
|
+
.np-theme-personal--dark.wds-sentiment-surface-warning-elevated,
|
|
177
|
+
.np-theme-business--dark.wds-sentiment-surface-warning-elevated,
|
|
178
|
+
.np-theme-personal--forest-green.wds-sentiment-surface-warning-elevated,
|
|
179
|
+
.np-theme-business--forest-green.wds-sentiment-surface-warning-elevated,
|
|
180
|
+
.np-theme-platform--forest-green.wds-sentiment-surface-warning-elevated {
|
|
181
181
|
--color-sentiment-content-primary: #3A3523;
|
|
182
182
|
--color-sentiment-content-primary-hover: #504930;
|
|
183
183
|
--color-sentiment-content-primary-active: #665D3D;
|
|
@@ -197,11 +197,11 @@
|
|
|
197
197
|
--color-sentiment-background-surface-hover: #F9D648;
|
|
198
198
|
--color-sentiment-background-surface-active: #F8CD20;
|
|
199
199
|
}
|
|
200
|
-
.np-theme-personal
|
|
201
|
-
.np-theme-business
|
|
202
|
-
.np-theme-platform
|
|
203
|
-
.np-theme-personal--bright-green
|
|
204
|
-
.np-theme-business--bright-green
|
|
200
|
+
.np-theme-personal.wds-sentiment-surface-success-base,
|
|
201
|
+
.np-theme-business.wds-sentiment-surface-success-base,
|
|
202
|
+
.np-theme-platform.wds-sentiment-surface-success-base,
|
|
203
|
+
.np-theme-personal--bright-green.wds-sentiment-surface-success-base,
|
|
204
|
+
.np-theme-business--bright-green.wds-sentiment-surface-success-base {
|
|
205
205
|
--color-sentiment-content-primary: #054D28;
|
|
206
206
|
--color-sentiment-content-primary-hover: #043A1E;
|
|
207
207
|
--color-sentiment-content-primary-active: #022614;
|
|
@@ -221,11 +221,11 @@
|
|
|
221
221
|
--color-sentiment-background-surface-hover: #D3F2C0;
|
|
222
222
|
--color-sentiment-background-surface-active: #C5EDAB;
|
|
223
223
|
}
|
|
224
|
-
.np-theme-personal
|
|
225
|
-
.np-theme-business
|
|
226
|
-
.np-theme-platform
|
|
227
|
-
.np-theme-personal--bright-green
|
|
228
|
-
.np-theme-business--bright-green
|
|
224
|
+
.np-theme-personal.wds-sentiment-surface-success-elevated,
|
|
225
|
+
.np-theme-business.wds-sentiment-surface-success-elevated,
|
|
226
|
+
.np-theme-platform.wds-sentiment-surface-success-elevated,
|
|
227
|
+
.np-theme-personal--bright-green.wds-sentiment-surface-success-elevated,
|
|
228
|
+
.np-theme-business--bright-green.wds-sentiment-surface-success-elevated {
|
|
229
229
|
--color-sentiment-content-primary: #E2F6D5;
|
|
230
230
|
--color-sentiment-content-primary-hover: #D3F2C0;
|
|
231
231
|
--color-sentiment-content-primary-active: #C5EDAB;
|
|
@@ -245,11 +245,11 @@
|
|
|
245
245
|
--color-sentiment-background-surface-hover: #043A1E;
|
|
246
246
|
--color-sentiment-background-surface-active: #022614;
|
|
247
247
|
}
|
|
248
|
-
.np-theme-personal--dark
|
|
249
|
-
.np-theme-business--dark
|
|
250
|
-
.np-theme-personal--forest-green
|
|
251
|
-
.np-theme-business--forest-green
|
|
252
|
-
.np-theme-platform--forest-green
|
|
248
|
+
.np-theme-personal--dark.wds-sentiment-surface-success-base,
|
|
249
|
+
.np-theme-business--dark.wds-sentiment-surface-success-base,
|
|
250
|
+
.np-theme-personal--forest-green.wds-sentiment-surface-success-base,
|
|
251
|
+
.np-theme-business--forest-green.wds-sentiment-surface-success-base,
|
|
252
|
+
.np-theme-platform--forest-green.wds-sentiment-surface-success-base {
|
|
253
253
|
--color-sentiment-content-primary: #BAE5A0;
|
|
254
254
|
--color-sentiment-content-primary-hover: #C8EAB3;
|
|
255
255
|
--color-sentiment-content-primary-active: #D6F0C7;
|
|
@@ -269,11 +269,11 @@
|
|
|
269
269
|
--color-sentiment-background-surface-hover: #323B2B;
|
|
270
270
|
--color-sentiment-background-surface-active: #3E4A36;
|
|
271
271
|
}
|
|
272
|
-
.np-theme-personal--dark
|
|
273
|
-
.np-theme-business--dark
|
|
274
|
-
.np-theme-personal--forest-green
|
|
275
|
-
.np-theme-business--forest-green
|
|
276
|
-
.np-theme-platform--forest-green
|
|
272
|
+
.np-theme-personal--dark.wds-sentiment-surface-success-elevated,
|
|
273
|
+
.np-theme-business--dark.wds-sentiment-surface-success-elevated,
|
|
274
|
+
.np-theme-personal--forest-green.wds-sentiment-surface-success-elevated,
|
|
275
|
+
.np-theme-business--forest-green.wds-sentiment-surface-success-elevated,
|
|
276
|
+
.np-theme-platform--forest-green.wds-sentiment-surface-success-elevated {
|
|
277
277
|
--color-sentiment-content-primary: #252C20;
|
|
278
278
|
--color-sentiment-content-primary-hover: #323B2B;
|
|
279
279
|
--color-sentiment-content-primary-active: #3E4A36;
|
|
@@ -293,11 +293,11 @@
|
|
|
293
293
|
--color-sentiment-background-surface-hover: #C8EAB3;
|
|
294
294
|
--color-sentiment-background-surface-active: #D6F0C7;
|
|
295
295
|
}
|
|
296
|
-
.np-theme-personal
|
|
297
|
-
.np-theme-business
|
|
298
|
-
.np-theme-platform
|
|
299
|
-
.np-theme-personal--bright-green
|
|
300
|
-
.np-theme-business--bright-green
|
|
296
|
+
.np-theme-personal.wds-sentiment-surface-neutral-base,
|
|
297
|
+
.np-theme-business.wds-sentiment-surface-neutral-base,
|
|
298
|
+
.np-theme-platform.wds-sentiment-surface-neutral-base,
|
|
299
|
+
.np-theme-personal--bright-green.wds-sentiment-surface-neutral-base,
|
|
300
|
+
.np-theme-business--bright-green.wds-sentiment-surface-neutral-base {
|
|
301
301
|
--color-sentiment-content-primary: #454745;
|
|
302
302
|
--color-sentiment-content-primary-hover: #353635;
|
|
303
303
|
--color-sentiment-content-primary-active: #232423;
|
|
@@ -317,11 +317,11 @@
|
|
|
317
317
|
--color-sentiment-background-surface-hover: rgba(62, 59, 7, 0.12);
|
|
318
318
|
--color-sentiment-background-surface-active: rgba(62, 59, 7, 0.17);
|
|
319
319
|
}
|
|
320
|
-
.np-theme-personal
|
|
321
|
-
.np-theme-business
|
|
322
|
-
.np-theme-platform
|
|
323
|
-
.np-theme-personal--bright-green
|
|
324
|
-
.np-theme-business--bright-green
|
|
320
|
+
.np-theme-personal.wds-sentiment-surface-neutral-elevated,
|
|
321
|
+
.np-theme-business.wds-sentiment-surface-neutral-elevated,
|
|
322
|
+
.np-theme-platform.wds-sentiment-surface-neutral-elevated,
|
|
323
|
+
.np-theme-personal--bright-green.wds-sentiment-surface-neutral-elevated,
|
|
324
|
+
.np-theme-business--bright-green.wds-sentiment-surface-neutral-elevated {
|
|
325
325
|
--color-sentiment-content-primary: #F1F1ED;
|
|
326
326
|
--color-sentiment-content-primary-hover: #E7E7E1;
|
|
327
327
|
--color-sentiment-content-primary-active: #DFDED5;
|
|
@@ -341,11 +341,11 @@
|
|
|
341
341
|
--color-sentiment-background-surface-hover: #353635;
|
|
342
342
|
--color-sentiment-background-surface-active: #232423;
|
|
343
343
|
}
|
|
344
|
-
.np-theme-personal--dark
|
|
345
|
-
.np-theme-business--dark
|
|
346
|
-
.np-theme-personal--forest-green
|
|
347
|
-
.np-theme-business--forest-green
|
|
348
|
-
.np-theme-platform--forest-green
|
|
344
|
+
.np-theme-personal--dark.wds-sentiment-surface-neutral-base,
|
|
345
|
+
.np-theme-business--dark.wds-sentiment-surface-neutral-base,
|
|
346
|
+
.np-theme-personal--forest-green.wds-sentiment-surface-neutral-base,
|
|
347
|
+
.np-theme-business--forest-green.wds-sentiment-surface-neutral-base,
|
|
348
|
+
.np-theme-platform--forest-green.wds-sentiment-surface-neutral-base {
|
|
349
349
|
--color-sentiment-content-primary: #F1F1ED;
|
|
350
350
|
--color-sentiment-content-primary-hover: #E7E7E1;
|
|
351
351
|
--color-sentiment-content-primary-active: #DFDED5;
|
|
@@ -365,11 +365,11 @@
|
|
|
365
365
|
--color-sentiment-background-surface-hover: rgba(255, 255, 255, 0.2);
|
|
366
366
|
--color-sentiment-background-surface-active: rgba(255, 255, 255, 0.3);
|
|
367
367
|
}
|
|
368
|
-
.np-theme-personal--dark
|
|
369
|
-
.np-theme-business--dark
|
|
370
|
-
.np-theme-personal--forest-green
|
|
371
|
-
.np-theme-business--forest-green
|
|
372
|
-
.np-theme-platform--forest-green
|
|
368
|
+
.np-theme-personal--dark.wds-sentiment-surface-neutral-elevated,
|
|
369
|
+
.np-theme-business--dark.wds-sentiment-surface-neutral-elevated,
|
|
370
|
+
.np-theme-personal--forest-green.wds-sentiment-surface-neutral-elevated,
|
|
371
|
+
.np-theme-business--forest-green.wds-sentiment-surface-neutral-elevated,
|
|
372
|
+
.np-theme-platform--forest-green.wds-sentiment-surface-neutral-elevated {
|
|
373
373
|
--color-sentiment-content-primary: #2A2C29;
|
|
374
374
|
--color-sentiment-content-primary-hover: #414441;
|
|
375
375
|
--color-sentiment-content-primary-active: #595B58;
|
|
@@ -389,11 +389,11 @@
|
|
|
389
389
|
--color-sentiment-background-surface-hover: #E7E7E1;
|
|
390
390
|
--color-sentiment-background-surface-active: #DFDED5;
|
|
391
391
|
}
|
|
392
|
-
.np-theme-personal
|
|
393
|
-
.np-theme-business
|
|
394
|
-
.np-theme-platform
|
|
395
|
-
.np-theme-personal--bright-green
|
|
396
|
-
.np-theme-business--bright-green
|
|
392
|
+
.np-theme-personal.wds-sentiment-surface-proposition-base,
|
|
393
|
+
.np-theme-business.wds-sentiment-surface-proposition-base,
|
|
394
|
+
.np-theme-platform.wds-sentiment-surface-proposition-base,
|
|
395
|
+
.np-theme-personal--bright-green.wds-sentiment-surface-proposition-base,
|
|
396
|
+
.np-theme-business--bright-green.wds-sentiment-surface-proposition-base {
|
|
397
397
|
--color-sentiment-content-primary: #0E0F0C;
|
|
398
398
|
--color-sentiment-content-primary-hover: #0A2826;
|
|
399
399
|
--color-sentiment-content-primary-active: #074140;
|
|
@@ -413,11 +413,11 @@
|
|
|
413
413
|
--color-sentiment-background-surface-hover: #CAF1F1;
|
|
414
414
|
--color-sentiment-background-surface-active: #B6ECEC;
|
|
415
415
|
}
|
|
416
|
-
.np-theme-personal
|
|
417
|
-
.np-theme-business
|
|
418
|
-
.np-theme-platform
|
|
419
|
-
.np-theme-personal--bright-green
|
|
420
|
-
.np-theme-business--bright-green
|
|
416
|
+
.np-theme-personal.wds-sentiment-surface-proposition-elevated,
|
|
417
|
+
.np-theme-business.wds-sentiment-surface-proposition-elevated,
|
|
418
|
+
.np-theme-platform.wds-sentiment-surface-proposition-elevated,
|
|
419
|
+
.np-theme-personal--bright-green.wds-sentiment-surface-proposition-elevated,
|
|
420
|
+
.np-theme-business--bright-green.wds-sentiment-surface-proposition-elevated {
|
|
421
421
|
--color-sentiment-content-primary: #FFFFFF;
|
|
422
422
|
--color-sentiment-content-primary-hover: #EAF9F9;
|
|
423
423
|
--color-sentiment-content-primary-active: #D5F4F4;
|
|
@@ -437,11 +437,11 @@
|
|
|
437
437
|
--color-sentiment-background-surface-hover: #043A3A;
|
|
438
438
|
--color-sentiment-background-surface-active: #022626;
|
|
439
439
|
}
|
|
440
|
-
.np-theme-personal--dark
|
|
441
|
-
.np-theme-business--dark
|
|
442
|
-
.np-theme-personal--forest-green
|
|
443
|
-
.np-theme-business--forest-green
|
|
444
|
-
.np-theme-platform--forest-green
|
|
440
|
+
.np-theme-personal--dark.wds-sentiment-surface-proposition-base,
|
|
441
|
+
.np-theme-business--dark.wds-sentiment-surface-proposition-base,
|
|
442
|
+
.np-theme-personal--forest-green.wds-sentiment-surface-proposition-base,
|
|
443
|
+
.np-theme-business--forest-green.wds-sentiment-surface-proposition-base,
|
|
444
|
+
.np-theme-platform--forest-green.wds-sentiment-surface-proposition-base {
|
|
445
445
|
--color-sentiment-content-primary: #FFFFFF;
|
|
446
446
|
--color-sentiment-content-primary-hover: #EAF9F9;
|
|
447
447
|
--color-sentiment-content-primary-active: #D5F4F4;
|
|
@@ -461,11 +461,11 @@
|
|
|
461
461
|
--color-sentiment-background-surface-hover: #124F4C;
|
|
462
462
|
--color-sentiment-background-surface-active: #176460;
|
|
463
463
|
}
|
|
464
|
-
.np-theme-personal--dark
|
|
465
|
-
.np-theme-business--dark
|
|
466
|
-
.np-theme-personal--forest-green
|
|
467
|
-
.np-theme-business--forest-green
|
|
468
|
-
.np-theme-platform--forest-green
|
|
464
|
+
.np-theme-personal--dark.wds-sentiment-surface-proposition-elevated,
|
|
465
|
+
.np-theme-business--dark.wds-sentiment-surface-proposition-elevated,
|
|
466
|
+
.np-theme-personal--forest-green.wds-sentiment-surface-proposition-elevated,
|
|
467
|
+
.np-theme-business--forest-green.wds-sentiment-surface-proposition-elevated,
|
|
468
|
+
.np-theme-platform--forest-green.wds-sentiment-surface-proposition-elevated {
|
|
469
469
|
--color-sentiment-content-primary: #0E0F0C;
|
|
470
470
|
--color-sentiment-content-primary-hover: #0A2826;
|
|
471
471
|
--color-sentiment-content-primary-active: #074140;
|
|
@@ -3930,6 +3930,14 @@ html:not([dir="rtl"]) .np-flow-navigation--sm .np-flow-navigation__stepper {
|
|
|
3930
3930
|
border-radius: var(--size-10);
|
|
3931
3931
|
text-align: start;
|
|
3932
3932
|
}
|
|
3933
|
+
.np-button-input:has(.np-select-input-option-description-in-trigger) {
|
|
3934
|
+
height: auto !important;
|
|
3935
|
+
align-content: start;
|
|
3936
|
+
padding-top: 12px !important;
|
|
3937
|
+
padding-top: var(--size-12) !important;
|
|
3938
|
+
padding-bottom: 12px !important;
|
|
3939
|
+
padding-bottom: var(--size-12) !important;
|
|
3940
|
+
}
|
|
3933
3941
|
.np-popover-v2-container {
|
|
3934
3942
|
z-index: 1060;
|
|
3935
3943
|
display: flex;
|
|
@@ -297,3 +297,122 @@ export const TinyScreen: Story = {
|
|
|
297
297
|
),
|
|
298
298
|
...withVariantConfig(['400%']),
|
|
299
299
|
};
|
|
300
|
+
|
|
301
|
+
/**
|
|
302
|
+
* Test that the default LiveRegion renders with role="status" and aria-live="polite".
|
|
303
|
+
*/
|
|
304
|
+
export const LiveRegionPoliteDefault: Story = {
|
|
305
|
+
play: async ({ canvasElement, step }) => {
|
|
306
|
+
const canvas = within(canvasElement);
|
|
307
|
+
|
|
308
|
+
await step('Verify live region with role="status" exists', async () => {
|
|
309
|
+
await waitFor(async () => {
|
|
310
|
+
const liveRegion = canvas.getByRole('status');
|
|
311
|
+
await expect(liveRegion).toBeInTheDocument();
|
|
312
|
+
await waitFor(async () => expect(liveRegion).toHaveAttribute('aria-live', 'polite'));
|
|
313
|
+
await expect(liveRegion).toHaveAttribute('aria-atomic', 'true');
|
|
314
|
+
});
|
|
315
|
+
});
|
|
316
|
+
|
|
317
|
+
await step('Verify prompt content is inside the live region', async () => {
|
|
318
|
+
const liveRegion = canvas.getByRole('status');
|
|
319
|
+
await expect(within(liveRegion).getByText('Polite announcement')).toBeInTheDocument();
|
|
320
|
+
});
|
|
321
|
+
},
|
|
322
|
+
args: {
|
|
323
|
+
description: 'Polite announcement',
|
|
324
|
+
},
|
|
325
|
+
};
|
|
326
|
+
|
|
327
|
+
/**
|
|
328
|
+
* Test that aria-live="assertive" renders with role="alert".
|
|
329
|
+
*/
|
|
330
|
+
export const LiveRegionAssertive: Story = {
|
|
331
|
+
play: async ({ canvasElement, step }) => {
|
|
332
|
+
const canvas = within(canvasElement);
|
|
333
|
+
|
|
334
|
+
await step('Verify live region with role="alert" exists', async () => {
|
|
335
|
+
await waitFor(async () => {
|
|
336
|
+
const liveRegion = canvas.getByRole('alert');
|
|
337
|
+
await expect(liveRegion).toBeInTheDocument();
|
|
338
|
+
await waitFor(async () => expect(liveRegion).toHaveAttribute('aria-live', 'assertive'));
|
|
339
|
+
await expect(liveRegion).toHaveAttribute('aria-atomic', 'true');
|
|
340
|
+
});
|
|
341
|
+
});
|
|
342
|
+
|
|
343
|
+
await step('Verify prompt content is inside the live region', async () => {
|
|
344
|
+
const liveRegion = canvas.getByRole('alert');
|
|
345
|
+
await expect(within(liveRegion).getByText('Payment failed')).toBeInTheDocument();
|
|
346
|
+
});
|
|
347
|
+
},
|
|
348
|
+
args: {
|
|
349
|
+
sentiment: 'negative',
|
|
350
|
+
description: 'Payment failed',
|
|
351
|
+
'aria-live': 'assertive',
|
|
352
|
+
},
|
|
353
|
+
};
|
|
354
|
+
|
|
355
|
+
/**
|
|
356
|
+
* Test that aria-live="off" renders without a live region wrapper.
|
|
357
|
+
*/
|
|
358
|
+
export const LiveRegionOff: Story = {
|
|
359
|
+
play: async ({ canvasElement, step }) => {
|
|
360
|
+
const canvas = within(canvasElement);
|
|
361
|
+
|
|
362
|
+
await step('Verify no live region wrapper exists', async () => {
|
|
363
|
+
await waitFor(async () => {
|
|
364
|
+
await expect(canvas.queryByRole('status')).not.toBeInTheDocument();
|
|
365
|
+
await expect(canvas.queryByRole('alert')).not.toBeInTheDocument();
|
|
366
|
+
});
|
|
367
|
+
});
|
|
368
|
+
|
|
369
|
+
await step('Verify prompt content still renders', async () => {
|
|
370
|
+
await expect(canvas.getByText('Static info')).toBeInTheDocument();
|
|
371
|
+
});
|
|
372
|
+
},
|
|
373
|
+
args: {
|
|
374
|
+
description: 'Static info',
|
|
375
|
+
'aria-live': 'off',
|
|
376
|
+
},
|
|
377
|
+
};
|
|
378
|
+
|
|
379
|
+
/**
|
|
380
|
+
* Test that a dismissed prompt also removes the live region.
|
|
381
|
+
*/
|
|
382
|
+
export const LiveRegionDismiss: Story = {
|
|
383
|
+
play: async ({ canvasElement, step }) => {
|
|
384
|
+
const canvas = within(canvasElement);
|
|
385
|
+
|
|
386
|
+
await step('Verify live region exists before dismiss', async () => {
|
|
387
|
+
await waitFor(async () => {
|
|
388
|
+
await expect(canvas.getByRole('status')).toBeInTheDocument();
|
|
389
|
+
});
|
|
390
|
+
});
|
|
391
|
+
|
|
392
|
+
await step('Dismiss the prompt', async () => {
|
|
393
|
+
const dismissButton = canvas.getByRole('button', { name: /close/i });
|
|
394
|
+
await userEvent.click(dismissButton);
|
|
395
|
+
});
|
|
396
|
+
|
|
397
|
+
await step('Verify live region is removed', async () => {
|
|
398
|
+
await waitFor(async () => {
|
|
399
|
+
await expect(canvas.queryByRole('status')).not.toBeInTheDocument();
|
|
400
|
+
});
|
|
401
|
+
});
|
|
402
|
+
},
|
|
403
|
+
render: function Render(args: InfoPromptProps) {
|
|
404
|
+
const [isVisible, setIsVisible] = useState(true);
|
|
405
|
+
|
|
406
|
+
if (!isVisible) {
|
|
407
|
+
return <div data-testid="dismissed">Prompt dismissed</div>;
|
|
408
|
+
}
|
|
409
|
+
|
|
410
|
+
return (
|
|
411
|
+
<InfoPrompt
|
|
412
|
+
{...args}
|
|
413
|
+
description="Dismissable live region"
|
|
414
|
+
onDismiss={() => setIsVisible(false)}
|
|
415
|
+
/>
|
|
416
|
+
);
|
|
417
|
+
},
|
|
418
|
+
};
|