@transferwise/components 46.100.1 → 46.100.2
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/avatarLayout/AvatarLayout.js +1 -1
- package/build/avatarLayout/AvatarLayout.js.map +1 -1
- package/build/avatarLayout/AvatarLayout.mjs +1 -1
- package/build/avatarLayout/AvatarLayout.mjs.map +1 -1
- package/build/dateLookup/DateLookup.js +3 -2
- package/build/dateLookup/DateLookup.js.map +1 -1
- package/build/dateLookup/DateLookup.mjs +3 -2
- package/build/dateLookup/DateLookup.mjs.map +1 -1
- package/build/main.css +4 -94
- package/build/styles/accordion/Accordion.css +27 -16
- package/build/styles/avatar/Avatar.css +95 -50
- package/build/styles/inputs/Input.css +37 -21
- package/build/styles/inputs/TextArea.css +35 -20
- package/build/styles/loader/Loader.css +4 -90
- package/build/styles/main.css +4 -94
- package/build/styles/popover/Popover.css +19 -12
- package/build/styles/select/Select.css +131 -68
- package/build/styles/switch/Switch.css +27 -16
- package/build/styles/tile/Tile.css +31 -18
- package/build/types/dateLookup/DateLookup.d.ts +2 -2
- package/build/types/dateLookup/DateLookup.d.ts.map +1 -1
- package/build/types/test-utils/story-config.d.ts +2 -3
- package/build/types/test-utils/story-config.d.ts.map +1 -1
- package/package.json +20 -28
- package/src/accordion/Accordion.css +27 -16
- package/src/accordion/Accordion.story.tsx +1 -1
- package/src/actionButton/ActionButton.story.tsx +3 -2
- package/src/actionOption/ActionOption.story.tsx +2 -2
- package/src/alert/Alert.story.tsx +2 -2
- package/src/alert/Alert.tests.story.tsx +2 -2
- package/src/avatar/Avatar.css +95 -50
- package/src/avatar/Avatar.spec.tsx +1 -1
- package/src/avatar/Avatar.story.tsx +3 -2
- package/src/avatarLayout/AvatarLayout.story.tsx +1 -1
- package/src/avatarLayout/AvatarLayout.tsx +1 -1
- package/src/avatarView/AvatarView.story.tsx +1 -1
- package/src/avatarWrapper/AvatarWrapper.story.tsx +3 -2
- package/src/badge/Badge.story.tsx +49 -28
- package/src/button/Button.accessibility.docs.mdx +1 -1
- package/src/button/Button.story.tsx +2 -2
- package/src/button/Button.tests.story.tsx +2 -2
- package/src/button/LegacyButton.story.tsx +3 -2
- package/src/card/Card.story.tsx +2 -2
- package/src/carousel/Carousel.story.tsx +1 -1
- package/src/checkbox/Checkbox.story.tsx +2 -2
- package/src/checkboxButton/CheckboxButton.story.tsx +2 -2
- package/src/checkboxOption/CheckboxOption.story.tsx +35 -29
- package/src/chevron/Chevron.story.tsx +1 -1
- package/src/chips/Chips.story.tsx +1 -1
- package/src/circularButton/CircularButton.story.tsx +1 -1
- package/src/circularButton/CircularButton.tests.story.tsx +1 -1
- package/src/common/bottomSheet/BottomSheet.story.tsx +2 -2
- package/src/common/card/Card.story.tsx +1 -1
- package/src/common/circle/Circle.story.tsx +2 -2
- package/src/common/locale/index.spec.ts +28 -16
- package/src/common/responsivePanel/ResponsivePanel.spec.js +8 -29
- package/src/criticalBanner/CriticalCommsBanner.story.tsx +1 -1
- package/src/dateInput/DateInput.story.tsx +2 -2
- package/src/dateInput/DateInput.tests.story.tsx +2 -2
- package/src/dateLookup/DateLookup.spec.tsx +5 -5
- package/src/dateLookup/DateLookup.story.tsx +43 -71
- package/src/dateLookup/DateLookup.tests.story.tsx +3 -3
- package/src/dateLookup/DateLookup.tsx +4 -1
- package/src/decision/Decision.story.tsx +24 -49
- package/src/definitionList/DefinitionList.story.tsx +1 -1
- package/src/dimmer/Dimmer.story.tsx +2 -2
- package/src/divider/Divider.accessibility.docs.mdx +1 -1
- package/src/divider/Divider.story.tsx +1 -1
- package/src/drawer/Drawer.story.tsx +13 -7
- package/src/dropFade/DropFade.story.tsx +1 -1
- package/src/emphasis/Emphasis.spec.tsx +8 -8
- package/src/emphasis/Emphasis.story.tsx +1 -1
- package/src/field/Field.story.tsx +3 -3
- package/src/flowNavigation/FlowNavigation.story.tsx +305 -260
- package/src/iconButton/IconButton.story.tsx +2 -2
- package/src/image/Image.story.tsx +27 -54
- package/src/info/Info.story.tsx +2 -2
- package/src/inlineAlert/InlineAlert.story.tsx +1 -1
- package/src/inputWithDisplayFormat/InputWithDisplayFormat.story.tsx +2 -2
- package/src/inputs/Input.css +37 -21
- package/src/inputs/InputGroup.story.tsx +1 -1
- package/src/inputs/SearchInput.story.tsx +1 -1
- package/src/inputs/SelectInput.docs.mdx +1 -1
- package/src/inputs/SelectInput.story.tsx +2 -2
- package/src/inputs/TextArea.css +35 -20
- package/src/instructionsList/InstructionsList.story.tsx +2 -2
- package/src/legacylistItem/LegacyListItem.story.tsx +1 -1
- package/src/loader/Loader.css +4 -90
- package/src/loader/Loader.story.tsx +1 -1
- package/src/logo/Logo.story.tsx +1 -1
- package/src/main.css +4 -94
- package/src/markdown/Markdown.story.tsx +1 -1
- package/src/modal/Modal.story.tsx +2 -2
- package/src/money/Money.story.tsx +1 -1
- package/src/moneyInput/MoneyInput.docs.mdx +1 -1
- package/src/moneyInput/MoneyInput.spec.tsx +8 -5
- package/src/moneyInput/MoneyInput.story.tsx +2 -2
- package/src/moneyInput/currencyFormatting.spec.ts +1 -1
- package/src/navigationOption/NavigationOption.story.tsx +265 -226
- package/src/nudge/Nudge.story.tsx +1 -1
- package/src/overlayHeader/OverlayHeader.story.tsx +32 -24
- package/src/phoneNumberInput/PhoneNumberInput.story.tsx +1 -1
- package/src/phoneNumberInput/utils/setDefaultPrefix/setDefaultPrefix.spec.ts +6 -3
- package/src/popover/Popover.css +19 -12
- package/src/popover/Popover.story.tsx +2 -2
- package/src/primitives/PrimitiveAnchor/stories/PrimitiveAnchor.story.tsx +2 -2
- package/src/primitives/PrimitiveAnchor/stories/PrimitiveAnchor.tests.story.tsx +2 -2
- package/src/primitives/PrimitiveButton/stories/PrimitiveButton.story.tsx +2 -2
- package/src/primitives/PrimitiveButton/stories/PrimitiveButton.tests.story.tsx +2 -2
- package/src/processIndicator/ProcessIndicator.story.tsx +1 -1
- package/src/progress/Progress.story.tsx +1 -1
- package/src/progressBar/ProgressBar.story.tsx +1 -1
- package/src/promoCard/PromoCard.story.tsx +1 -1
- package/src/promoCard/PromoCardGroup.story.tsx +1 -1
- package/src/provider/Provider.spec.tsx +2 -2
- package/src/provider/Provider.story.tsx +1 -1
- package/src/provider/direction/DirectionProvider.spec.tsx +1 -1
- package/src/provider/language/LanguageProvider.spec.tsx +1 -1
- package/src/provider/theme/ThemeProvider.story.tsx +1 -1
- package/src/radio/Radio.story.tsx +59 -42
- package/src/radioGroup/RadioGroup.story.tsx +2 -2
- package/src/radioOption/RadioOption.story.tsx +73 -38
- package/src/segmentedControl/SegmentedControl.story.tsx +1 -1
- package/src/select/Select.css +131 -68
- package/src/select/Select.story.tsx +385 -397
- package/src/slidingPanel/SlidingPanel.story.tsx +30 -13
- package/src/snackbar/Snackbar.story.tsx +50 -36
- package/src/snackbar/Snackbar.tests.story.tsx +3 -2
- package/src/statusIcon/StatusIcon.docs.mdx +1 -1
- package/src/statusIcon/StatusIcon.spec.tsx +8 -5
- package/src/statusIcon/StatusIcon.story.tsx +1 -1
- package/src/stepper/Stepper.story.tsx +2 -2
- package/src/stepper/Stepper.tests.story.tsx +2 -2
- package/src/sticky/Sticky.story.tsx +1 -1
- package/src/summary/Summary.story.tsx +18 -17
- package/src/switch/Switch.css +27 -16
- package/src/switch/Switch.story.tsx +2 -2
- package/src/switchOption/SwitchOption.story.tsx +1 -1
- package/src/table/Table.story.tsx +1 -1
- package/src/test-utils/story-config.ts +9 -6
- package/src/textareaWithDisplayFormat/TextareaWithDisplayFormat.story.tsx +2 -2
- package/src/tile/Tile.css +31 -18
- package/src/tile/Tile.story.tsx +43 -43
- package/src/tooltip/Tooltip.story.tsx +2 -2
- package/src/typeahead/Typeahead.story.tsx +2 -2
- package/src/upload/Upload.story.tsx +2 -2
- package/src/upload/Upload.tests.story.tsx +2 -2
- package/src/upload/utils/isTypeValid/isTypeValid.spec.ts +3 -1
- package/src/uploadInput/UploadInput.story.tsx +1 -1
- package/src/uploadInput/UploadInput.tests.story.tsx +3 -3
- package/src/withId/withId.docs.mdx +1 -1
- package/src/withId/withId.story.tsx +1 -1
- package/src/common/responsivePanel/__snapshots__/ResponsivePanel.spec.js.snap +0 -21
|
@@ -1,32 +1,49 @@
|
|
|
1
|
-
import
|
|
2
|
-
import { useState } from 'react';
|
|
3
|
-
|
|
1
|
+
import React from 'react';
|
|
4
2
|
import Button from '../button';
|
|
5
|
-
|
|
6
|
-
import SlidingPanel from './SlidingPanel';
|
|
3
|
+
import SlidingPanel, { type SlidingPanelProps } from './SlidingPanel';
|
|
7
4
|
|
|
8
5
|
export default {
|
|
9
6
|
component: SlidingPanel,
|
|
10
7
|
title: 'Dialogs/SlidingPanel',
|
|
8
|
+
argTypes: {
|
|
9
|
+
position: {
|
|
10
|
+
control: 'select',
|
|
11
|
+
options: ['left', 'right', 'top', 'bottom'],
|
|
12
|
+
},
|
|
13
|
+
},
|
|
14
|
+
parameters: {
|
|
15
|
+
docs: {
|
|
16
|
+
source: { type: 'code' },
|
|
17
|
+
},
|
|
18
|
+
},
|
|
19
|
+
decorators: [
|
|
20
|
+
(Story: any) => (
|
|
21
|
+
<div style={{ paddingTop: '80px' }}>
|
|
22
|
+
<Story />
|
|
23
|
+
</div>
|
|
24
|
+
),
|
|
25
|
+
],
|
|
11
26
|
};
|
|
12
27
|
|
|
13
|
-
export const Basic = ()
|
|
14
|
-
const [open, setOpen] = useState(false);
|
|
15
|
-
|
|
16
|
-
const position = select('position', ['top', 'right', 'bottom', 'left'], 'top');
|
|
28
|
+
export const Basic = function Render(args: SlidingPanelProps) {
|
|
29
|
+
const [open, setOpen] = React.useState(false);
|
|
17
30
|
|
|
18
31
|
return (
|
|
19
|
-
|
|
20
|
-
<Button v2
|
|
32
|
+
<div>
|
|
33
|
+
<Button v2 block onClick={() => setOpen(!open)}>
|
|
21
34
|
Open Sliding Panel
|
|
22
35
|
</Button>
|
|
23
|
-
|
|
36
|
+
|
|
37
|
+
<SlidingPanel {...args} open={open}>
|
|
24
38
|
<div className="p-y-4 p-x-4 ">
|
|
25
39
|
Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has
|
|
26
40
|
been the industry standard dummy text ever since the 1500s, when an unknown printer took a
|
|
27
41
|
galley of type and scrambled it to
|
|
28
42
|
</div>
|
|
29
43
|
</SlidingPanel>
|
|
30
|
-
|
|
44
|
+
</div>
|
|
31
45
|
);
|
|
32
46
|
};
|
|
47
|
+
Basic.args = {
|
|
48
|
+
position: 'top',
|
|
49
|
+
};
|
|
@@ -1,47 +1,61 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
3
|
-
import type { StoryContext } from '@storybook/react';
|
|
4
|
-
import { userEvent, within } from '@storybook/test';
|
|
1
|
+
import type { Meta, StoryObj } from '@storybook/react-webpack5';
|
|
2
|
+
import { fn, userEvent, within } from 'storybook/test';
|
|
5
3
|
import { wait } from '../test-utils/wait';
|
|
6
|
-
|
|
7
4
|
import Button from '../button';
|
|
8
|
-
|
|
9
5
|
import { Snackbar } from './Snackbar';
|
|
10
6
|
import { SnackbarConsumer } from './SnackbarContext';
|
|
11
7
|
import SnackbarProvider from './SnackbarProvider';
|
|
12
8
|
|
|
13
|
-
|
|
9
|
+
const meta: Meta = {
|
|
14
10
|
component: Snackbar,
|
|
15
11
|
title: 'Dialogs/Snackbar',
|
|
16
12
|
};
|
|
13
|
+
export default meta;
|
|
17
14
|
|
|
18
|
-
export const Basic =
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
15
|
+
export const Basic: StoryObj = {
|
|
16
|
+
parameters: {
|
|
17
|
+
docs: {
|
|
18
|
+
source: {
|
|
19
|
+
type: 'code',
|
|
20
|
+
transform: async (src = '') => {
|
|
21
|
+
const match = /(function Render\(\).*?)(,\s+play:\s+async)/s.exec(src);
|
|
22
|
+
return match?.[1] || src;
|
|
23
|
+
},
|
|
24
|
+
},
|
|
25
|
+
},
|
|
26
|
+
source: {
|
|
27
|
+
type: 'code',
|
|
28
|
+
},
|
|
29
|
+
},
|
|
30
|
+
render: function Render() {
|
|
31
|
+
return (
|
|
32
|
+
<SnackbarProvider>
|
|
33
|
+
<SnackbarConsumer>
|
|
34
|
+
{({ createSnackbar }) => {
|
|
35
|
+
return (
|
|
36
|
+
<Button
|
|
37
|
+
block
|
|
38
|
+
onClick={() => {
|
|
39
|
+
createSnackbar({
|
|
40
|
+
action: {
|
|
41
|
+
label: 'View',
|
|
42
|
+
onClick: fn(),
|
|
43
|
+
},
|
|
44
|
+
text: <span>Some text</span>,
|
|
45
|
+
});
|
|
46
|
+
}}
|
|
47
|
+
>
|
|
48
|
+
Show Snackbar
|
|
49
|
+
</Button>
|
|
50
|
+
);
|
|
51
|
+
}}
|
|
52
|
+
</SnackbarConsumer>
|
|
53
|
+
</SnackbarProvider>
|
|
54
|
+
);
|
|
55
|
+
},
|
|
56
|
+
play: async ({ canvasElement }) => {
|
|
57
|
+
await wait(0);
|
|
58
|
+
const canvas = within(canvasElement);
|
|
59
|
+
await userEvent.click(canvas.getByRole('button'));
|
|
60
|
+
},
|
|
47
61
|
};
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { userEvent, within } from '
|
|
2
|
-
import { action } from '
|
|
1
|
+
import { userEvent, within } from 'storybook/test';
|
|
2
|
+
import { action } from 'storybook/actions';
|
|
3
3
|
import { Mobile as MobileIcon, Theme, Switch, Bulb, Info, Coins, Team } from '@transferwise/icons';
|
|
4
4
|
import { Snackbar, type SnackbarProps } from './Snackbar';
|
|
5
5
|
import { SnackbarConsumer } from './SnackbarContext';
|
|
@@ -13,6 +13,7 @@ export default {
|
|
|
13
13
|
title: 'Dialogs/Snackbar/Tests',
|
|
14
14
|
component: Snackbar,
|
|
15
15
|
argTypes: {},
|
|
16
|
+
tags: ['!autodocs'],
|
|
16
17
|
};
|
|
17
18
|
|
|
18
19
|
const launchSnackbar = async (canvasElement: HTMLElement) => {
|
|
@@ -35,7 +35,7 @@ describe('StatusIcon', () => {
|
|
|
35
35
|
[Sentiment.WARNING, Sentiment.WARNING],
|
|
36
36
|
])(
|
|
37
37
|
"if prop 'sentiment' equals '%s' is passed, renders the status icon with class '%s'",
|
|
38
|
-
(sentiment, expectedClass) => {
|
|
38
|
+
(sentiment: Sentiment | Status, expectedClass: Sentiment | Status) => {
|
|
39
39
|
renderStatusIcon({ sentiment: sentiment as StatusIconSentiment });
|
|
40
40
|
|
|
41
41
|
expect(screen.getByTestId('status-icon')).toHaveClass(expectedClass);
|
|
@@ -79,11 +79,14 @@ describe('StatusIcon', () => {
|
|
|
79
79
|
['Error', Sentiment.ERROR],
|
|
80
80
|
['Information', Sentiment.INFO],
|
|
81
81
|
['Success', Sentiment.SUCCESS],
|
|
82
|
-
])(
|
|
83
|
-
|
|
82
|
+
])(
|
|
83
|
+
"should set '%s' as an accessible name for the '%s' sentiment",
|
|
84
|
+
(label: string, sentiment: Sentiment | Status) => {
|
|
85
|
+
renderStatusIcon({ sentiment: sentiment as StatusIconSentiment });
|
|
84
86
|
|
|
85
|
-
|
|
86
|
-
|
|
87
|
+
expect(screen.getByLabelText(`${label}:`)).toBeInTheDocument();
|
|
88
|
+
},
|
|
89
|
+
);
|
|
87
90
|
|
|
88
91
|
it('should allow for `iconLabel` overrides', () => {
|
|
89
92
|
const iconLabel = 'Custom label';
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { Meta, StoryObj } from '@storybook/react';
|
|
2
|
-
import { fn, within, expect, screen } from '
|
|
1
|
+
import { Meta, StoryObj } from '@storybook/react-webpack5';
|
|
2
|
+
import { fn, within, expect, screen } from 'storybook/test';
|
|
3
3
|
import Stepper from './Stepper';
|
|
4
4
|
|
|
5
5
|
const STEPS = [
|
|
@@ -1,25 +1,26 @@
|
|
|
1
|
-
import
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import { action } from 'storybook/actions';
|
|
2
3
|
import { Home as HomeIcon } from '@transferwise/icons';
|
|
3
|
-
|
|
4
4
|
import { Status } from '../common';
|
|
5
5
|
import { InfoPresentation } from '../info';
|
|
6
|
-
|
|
7
|
-
import Summary from './Summary';
|
|
6
|
+
import Summary, { type Props as SummaryProps } from './Summary';
|
|
8
7
|
|
|
9
8
|
export default {
|
|
10
9
|
component: Summary,
|
|
11
10
|
title: 'Content/Summary',
|
|
11
|
+
argTypes: {
|
|
12
|
+
title: { control: 'text' },
|
|
13
|
+
},
|
|
12
14
|
};
|
|
13
15
|
|
|
14
|
-
export const Basic = () => {
|
|
15
|
-
const actionText =
|
|
16
|
-
|
|
17
|
-
const title = text('Title', 'Verify your address');
|
|
18
|
-
const description = text('Description', '10 Downing Street, Westminster, London SW1A 2AA.');
|
|
16
|
+
export const Basic = (args: SummaryProps) => {
|
|
17
|
+
const actionText = 'Change address';
|
|
18
|
+
const description = '10 Downing Street, Westminster, London SW1A 2AA.';
|
|
19
19
|
|
|
20
20
|
return (
|
|
21
21
|
<ul>
|
|
22
22
|
<Summary
|
|
23
|
+
{...args}
|
|
23
24
|
action={{
|
|
24
25
|
text: actionText,
|
|
25
26
|
href: '#change-address',
|
|
@@ -28,9 +29,10 @@ export const Basic = () => {
|
|
|
28
29
|
as="li"
|
|
29
30
|
description={description}
|
|
30
31
|
icon={<HomeIcon size={24} />}
|
|
31
|
-
title=
|
|
32
|
+
title="Verify your address"
|
|
32
33
|
status={Status.NOT_DONE}
|
|
33
34
|
/>
|
|
35
|
+
|
|
34
36
|
<Summary
|
|
35
37
|
action={{
|
|
36
38
|
text: 'Change address',
|
|
@@ -43,14 +45,13 @@ export const Basic = () => {
|
|
|
43
45
|
title: 'You entered your address',
|
|
44
46
|
content: 'Your address has been verified, no more actions are required.',
|
|
45
47
|
'aria-label': 'Please click here to know more about your address update status',
|
|
46
|
-
onClick: (
|
|
47
|
-
console.log('Summary Info clicked');
|
|
48
|
-
},
|
|
48
|
+
onClick: action('Summary Info clicked'),
|
|
49
49
|
}}
|
|
50
50
|
icon={<HomeIcon size={24} />}
|
|
51
51
|
title="You verified your address"
|
|
52
52
|
status={Status.DONE}
|
|
53
53
|
/>
|
|
54
|
+
|
|
54
55
|
<Summary
|
|
55
56
|
action={{
|
|
56
57
|
text: 'Change address',
|
|
@@ -65,14 +66,13 @@ export const Basic = () => {
|
|
|
65
66
|
'Your address change is currently being processed. Please allow 48 hours for verification.',
|
|
66
67
|
presentation: InfoPresentation.MODAL,
|
|
67
68
|
'aria-label': 'Please click here to know more about your address update status',
|
|
68
|
-
onClick: (
|
|
69
|
-
console.log('Summary Info clicked');
|
|
70
|
-
},
|
|
69
|
+
onClick: action('Summary Info clicked'),
|
|
71
70
|
}}
|
|
72
71
|
icon={<HomeIcon size={24} />}
|
|
73
72
|
title="We’re verifying your address"
|
|
74
73
|
status={Status.PENDING}
|
|
75
74
|
/>
|
|
75
|
+
|
|
76
76
|
<Summary
|
|
77
77
|
action={{
|
|
78
78
|
text: 'Open in new tab',
|
|
@@ -85,6 +85,7 @@ export const Basic = () => {
|
|
|
85
85
|
title="We’re verifying your address"
|
|
86
86
|
status={Status.PENDING}
|
|
87
87
|
/>
|
|
88
|
+
|
|
88
89
|
<Summary
|
|
89
90
|
action={{
|
|
90
91
|
text: actionText,
|
|
@@ -93,7 +94,7 @@ export const Basic = () => {
|
|
|
93
94
|
}}
|
|
94
95
|
as="li"
|
|
95
96
|
description={description}
|
|
96
|
-
title=
|
|
97
|
+
title="Verify your address"
|
|
97
98
|
/>
|
|
98
99
|
</ul>
|
|
99
100
|
);
|
package/src/switch/Switch.css
CHANGED
|
@@ -1,6 +1,4 @@
|
|
|
1
|
-
|
|
2
|
-
}@media (min-width: 768px) {
|
|
3
|
-
}.np-switch {
|
|
1
|
+
.np-switch {
|
|
4
2
|
all: unset;
|
|
5
3
|
box-sizing: border-box;
|
|
6
4
|
display: inline-flex;
|
|
@@ -12,37 +10,50 @@
|
|
|
12
10
|
-moz-user-select: none;
|
|
13
11
|
user-select: none;
|
|
14
12
|
cursor: pointer;
|
|
15
|
-
}
|
|
13
|
+
}
|
|
14
|
+
.np-switch:focus {
|
|
16
15
|
outline: none;
|
|
17
|
-
}
|
|
16
|
+
}
|
|
17
|
+
.np-switch:focus-visible {
|
|
18
18
|
outline: var(--ring-outline-color) solid var(--ring-outline-width);
|
|
19
19
|
outline-offset: var(--ring-outline-offset);
|
|
20
|
-
}
|
|
20
|
+
}
|
|
21
|
+
.np-switch--thumb {
|
|
21
22
|
display: flex;
|
|
22
23
|
transition: transform cubic-bezier(0, 0.94, 0.62, 1) 350ms;
|
|
23
|
-
}
|
|
24
|
+
}
|
|
25
|
+
.np-switch--thumb .tw-icon {
|
|
24
26
|
color: #fff;
|
|
25
|
-
}
|
|
27
|
+
}
|
|
28
|
+
.np-switch--unchecked {
|
|
26
29
|
background: #c9cbce;
|
|
27
30
|
background: var(--color-interactive-secondary);
|
|
28
|
-
}
|
|
31
|
+
}
|
|
32
|
+
.np-switch--unchecked .switch--thumb {
|
|
29
33
|
transform: translateX(0);
|
|
30
|
-
}
|
|
34
|
+
}
|
|
35
|
+
.np-switch--checked {
|
|
31
36
|
background: #00a2dd;
|
|
32
37
|
background: var(--color-interactive-accent);
|
|
33
|
-
}
|
|
38
|
+
}
|
|
39
|
+
.np-switch--checked .np-switch--thumb {
|
|
34
40
|
transform: translateX(20px) ;
|
|
35
|
-
}
|
|
41
|
+
}
|
|
42
|
+
[dir="rtl"] .np-switch--checked .np-switch--thumb {
|
|
36
43
|
transform: translateX(-20px) ;
|
|
37
|
-
}
|
|
44
|
+
}
|
|
45
|
+
.np-switch.disabled {
|
|
38
46
|
filter: grayscale(1);
|
|
39
47
|
opacity: 0.45;
|
|
40
48
|
cursor: not-allowed !important;
|
|
41
|
-
}
|
|
49
|
+
}
|
|
50
|
+
.np-theme-personal .np-switch {
|
|
42
51
|
padding: 1px 2px;
|
|
43
|
-
}
|
|
52
|
+
}
|
|
53
|
+
.np-theme-personal .np-switch--checked {
|
|
44
54
|
background: var(--color-interactive-primary);
|
|
45
|
-
}
|
|
55
|
+
}
|
|
56
|
+
.np-theme-personal .np-switch--thumb {
|
|
46
57
|
width: 20px;
|
|
47
58
|
height: 20px;
|
|
48
59
|
margin: 3px;
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import { useState } from 'react';
|
|
2
|
-
import { fn } from '
|
|
2
|
+
import { fn } from 'storybook/test';
|
|
3
3
|
|
|
4
4
|
import Switch, { SwitchProps } from './Switch';
|
|
5
5
|
import { Field } from '../field/Field';
|
|
6
|
-
import { Meta, StoryObj } from '@storybook/react';
|
|
6
|
+
import { Meta, StoryObj } from '@storybook/react-webpack5';
|
|
7
7
|
import { Label } from '../label';
|
|
8
8
|
|
|
9
9
|
const meta: Meta<typeof Switch> = {
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { MINIMAL_VIEWPORTS } from '
|
|
2
|
-
import { StoryObj } from '@storybook/react';
|
|
1
|
+
import { MINIMAL_VIEWPORTS } from 'storybook/viewport';
|
|
2
|
+
import { StoryObj } from '@storybook/react-webpack5';
|
|
3
3
|
|
|
4
4
|
export const viewports = {
|
|
5
5
|
...MINIMAL_VIEWPORTS,
|
|
@@ -16,7 +16,7 @@ export const viewports = {
|
|
|
16
16
|
},
|
|
17
17
|
};
|
|
18
18
|
|
|
19
|
-
interface StoryConfig {
|
|
19
|
+
export interface StoryConfig {
|
|
20
20
|
/**
|
|
21
21
|
* Creates variations of the component for the current story. Some
|
|
22
22
|
* padding is applied to the variants for spacing.
|
|
@@ -74,14 +74,17 @@ export const storyConfig = <Args>(
|
|
|
74
74
|
parameters: {
|
|
75
75
|
...storyObject.parameters,
|
|
76
76
|
variants,
|
|
77
|
+
// eslint-disable-next-line @typescript-eslint/no-unsafe-assignment
|
|
77
78
|
chromatic: {
|
|
78
79
|
...storyObject.parameters?.chromatic,
|
|
79
80
|
viewports: (isMobile && [mobileViewportWidth]) || (is400Zoom && [zoom400perViewportWidth]),
|
|
80
81
|
},
|
|
82
|
+
},
|
|
83
|
+
globals: {
|
|
84
|
+
// eslint-disable-next-line @typescript-eslint/no-unsafe-assignment
|
|
81
85
|
viewport: {
|
|
82
|
-
...storyObject.
|
|
83
|
-
|
|
84
|
-
defaultViewport: (isMobile && mobileViewportKey) || (is400Zoom && zoom400perViewportKey),
|
|
86
|
+
...storyObject.globals?.viewport,
|
|
87
|
+
value: (isMobile && mobileViewportKey) || (is400Zoom && zoom400perViewportKey),
|
|
85
88
|
},
|
|
86
89
|
},
|
|
87
90
|
};
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { StoryObj } from '@storybook/react';
|
|
2
|
-
import { userEvent, within } from '
|
|
1
|
+
import { StoryObj } from '@storybook/react-webpack5';
|
|
2
|
+
import { userEvent, within } from 'storybook/test';
|
|
3
3
|
|
|
4
4
|
import TextareaWithDisplayFormat from './TextareaWithDisplayFormat';
|
|
5
5
|
import { Field } from '../field/Field';
|
package/src/tile/Tile.css
CHANGED
|
@@ -1,49 +1,62 @@
|
|
|
1
|
-
|
|
2
|
-
}@media (min-width: 768px) {
|
|
3
|
-
}.np-tile {
|
|
1
|
+
.np-tile {
|
|
4
2
|
min-width: 120px;
|
|
5
3
|
border-radius: 10px;
|
|
6
4
|
border-radius: var(--radius-small);
|
|
7
5
|
width: 100%;
|
|
8
|
-
}
|
|
6
|
+
}
|
|
7
|
+
.np-theme-personal .np-tile {
|
|
9
8
|
background-color: rgba(134,167,189,0.10196);
|
|
10
9
|
background-color: var(--color-background-neutral);
|
|
11
|
-
}
|
|
10
|
+
}
|
|
11
|
+
.np-theme-personal .np-tile .tw-avatar .tw-avatar__content {
|
|
12
12
|
background-color: var(--color-contrast);
|
|
13
|
-
}
|
|
13
|
+
}
|
|
14
|
+
.np-tile.decision {
|
|
14
15
|
margin-top: 0;
|
|
15
16
|
border: 1px solid rgba(0,0,0,0.10196);
|
|
16
17
|
border: 1px solid var(--color-border-neutral);
|
|
17
|
-
}
|
|
18
|
+
}
|
|
19
|
+
.np-theme-personal .np-tile.decision {
|
|
18
20
|
border: none;
|
|
19
|
-
}
|
|
21
|
+
}
|
|
22
|
+
.np-theme-personal .np-tile.decision:hover {
|
|
20
23
|
background-color: var(--color-background-neutral-hover);
|
|
21
|
-
}
|
|
24
|
+
}
|
|
25
|
+
.np-theme-personal .np-tile.decision:active {
|
|
22
26
|
background-color: var(--color-background-neutral-active);
|
|
23
|
-
}
|
|
27
|
+
}
|
|
28
|
+
.np-theme-personal .np-tile.decision .np-text-body-default {
|
|
24
29
|
color: #5d7079;
|
|
25
30
|
color: var(--color-content-secondary);
|
|
26
|
-
}
|
|
31
|
+
}
|
|
32
|
+
.np-tile.np-decision__tile--fixed-width {
|
|
27
33
|
width: 300px;
|
|
28
|
-
}
|
|
34
|
+
}
|
|
35
|
+
.np-tile__media {
|
|
29
36
|
width: 100%;
|
|
30
|
-
}
|
|
37
|
+
}
|
|
38
|
+
.np-tile__description {
|
|
31
39
|
color: #5d7079;
|
|
32
40
|
color: var(--color-content-secondary);
|
|
33
41
|
margin-top: 12px;
|
|
34
42
|
margin-top: var(--size-12);
|
|
35
43
|
display: inline-block;
|
|
36
|
-
}
|
|
44
|
+
}
|
|
45
|
+
.np-tile--small.np-decision__tile--fixed-width {
|
|
37
46
|
width: 260px;
|
|
38
|
-
}
|
|
47
|
+
}
|
|
48
|
+
.np-tile--small .np-tile__description {
|
|
39
49
|
margin-top: 4px;
|
|
40
50
|
margin-top: var(--size-4);
|
|
41
|
-
}
|
|
51
|
+
}
|
|
52
|
+
.np-tile:hover .tw-avatar {
|
|
42
53
|
pointer-events: none;
|
|
43
|
-
}
|
|
54
|
+
}
|
|
55
|
+
.np-tile:hover .tw-avatar .tw-avatar__content {
|
|
44
56
|
background-color: #ffffff;
|
|
45
57
|
background-color: var(--color-background-screen);
|
|
46
|
-
}
|
|
58
|
+
}
|
|
59
|
+
.np-tile__description {
|
|
47
60
|
color: #5d7079;
|
|
48
61
|
color: var(--color-content-secondary);
|
|
49
62
|
font-weight: 400;
|
package/src/tile/Tile.story.tsx
CHANGED
|
@@ -1,52 +1,52 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
3
|
-
|
|
1
|
+
import { Meta, StoryObj } from '@storybook/react-webpack5';
|
|
2
|
+
import { action } from 'storybook/actions';
|
|
4
3
|
import { Size } from '../common';
|
|
5
|
-
|
|
6
|
-
import Tile from '.';
|
|
7
4
|
import AvatarView from '../avatarView';
|
|
5
|
+
import Tile from '.';
|
|
6
|
+
import { Illustration, type IllustrationProps } from '@wise/art';
|
|
7
|
+
import Image from '../image';
|
|
8
|
+
|
|
9
|
+
const LabelledIllustration = (props: IllustrationProps) => <Illustration {...props} />;
|
|
10
|
+
LabelledIllustration.displayName = 'Illustration';
|
|
8
11
|
|
|
9
|
-
|
|
12
|
+
const meta: Meta<typeof Tile> = {
|
|
10
13
|
component: Tile,
|
|
11
14
|
title: 'Internal/Tile',
|
|
15
|
+
argTypes: {
|
|
16
|
+
title: { control: 'text' },
|
|
17
|
+
description: { control: 'text' },
|
|
18
|
+
disabled: { control: 'boolean' },
|
|
19
|
+
size: {
|
|
20
|
+
control: 'radio',
|
|
21
|
+
options: [Size.MEDIUM, Size.SMALL],
|
|
22
|
+
},
|
|
23
|
+
media: { control: false },
|
|
24
|
+
href: { control: 'text' },
|
|
25
|
+
onClick: { action: 'onClick' },
|
|
26
|
+
},
|
|
27
|
+
args: {
|
|
28
|
+
media: (
|
|
29
|
+
<Image
|
|
30
|
+
alt="illustration"
|
|
31
|
+
src="https://wise.com/public-resources/assets/bank-details/bank-details-flow/finish.svg"
|
|
32
|
+
/>
|
|
33
|
+
),
|
|
34
|
+
title: 'Hank Miller',
|
|
35
|
+
description: 'Click here to send money to Mr. Miller',
|
|
36
|
+
disabled: false,
|
|
37
|
+
href: '#href1',
|
|
38
|
+
size: Size.MEDIUM,
|
|
39
|
+
onClick: action('onClick'),
|
|
40
|
+
},
|
|
12
41
|
};
|
|
42
|
+
export default meta;
|
|
43
|
+
|
|
44
|
+
type Story = StoryObj<typeof Tile>;
|
|
13
45
|
|
|
14
|
-
export const
|
|
15
|
-
const description = text('Description', 'Click here to send money to Mr. Miller');
|
|
16
|
-
const disabled = boolean('Disabled', false);
|
|
17
|
-
const medium = boolean('Medium', true);
|
|
18
|
-
const title = text('Title', 'Hank Miller');
|
|
46
|
+
export const WithImage: Story = {};
|
|
19
47
|
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
description={description}
|
|
25
|
-
disabled={disabled}
|
|
26
|
-
href="#href1"
|
|
27
|
-
media={
|
|
28
|
-
<img
|
|
29
|
-
src="https://wise.com/public-resources/assets/bank-details/bank-details-flow/finish.svg"
|
|
30
|
-
alt="illustration"
|
|
31
|
-
style={{ width: '100%' }}
|
|
32
|
-
/>
|
|
33
|
-
}
|
|
34
|
-
size={medium ? Size.MEDIUM : Size.SMALL}
|
|
35
|
-
title={title}
|
|
36
|
-
onClick={action('onClick')}
|
|
37
|
-
/>
|
|
38
|
-
</div>
|
|
39
|
-
<div className="m-a-2">
|
|
40
|
-
<Tile
|
|
41
|
-
description={description}
|
|
42
|
-
disabled={disabled}
|
|
43
|
-
href="#href1"
|
|
44
|
-
media={<AvatarView profileName="Henry Morris" />}
|
|
45
|
-
size={medium ? Size.MEDIUM : Size.SMALL}
|
|
46
|
-
title={title}
|
|
47
|
-
onClick={action('onClick')}
|
|
48
|
-
/>
|
|
49
|
-
</div>
|
|
50
|
-
</div>
|
|
51
|
-
);
|
|
48
|
+
export const WithAvatar: Story = {
|
|
49
|
+
args: {
|
|
50
|
+
media: <AvatarView profileName="Henry Morris" />,
|
|
51
|
+
},
|
|
52
52
|
};
|