@automattic/vip-design-system 0.9.6 → 0.10.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/.eslintrc.json +2 -5
- package/.storybook/decorators/withBoundingBox.jsx +15 -0
- package/.storybook/decorators/withColorMode.jsx +45 -0
- package/.storybook/decorators/withThemeProvider.jsx +18 -0
- package/.storybook/main.js +7 -8
- package/.storybook/preview.js +13 -32
- package/README.md +4 -4
- package/babel.config.js +2 -3
- package/build/system/Avatar/Avatar.js +17 -12
- package/build/system/Avatar/Avatar.stories.js +1 -9
- package/build/system/Avatar/Avatar.test.js +16 -7
- package/build/system/Badge/Badge.js +18 -13
- package/build/system/Badge/Badge.stories.js +1 -9
- package/build/system/Badge/Badge.test.js +16 -7
- package/build/system/BlankState/BlankState.js +10 -4
- package/build/system/BlankState/BlankState.stories.js +1 -9
- package/build/system/BlankState/BlankState.test.js +26 -17
- package/build/system/Box/Box.js +19 -4
- package/build/system/Box/Box.stories.js +1 -9
- package/build/system/Button/Button.js +15 -12
- package/build/system/Button/Button.stories.js +3 -3
- package/build/system/Button/Button.test.js +14 -5
- package/build/system/Card/Card.js +17 -13
- package/build/system/Card/Card.stories.js +1 -9
- package/build/system/Card/Card.test.js +19 -10
- package/build/system/Code/Code.js +16 -12
- package/build/system/Code/Code.stories.js +17 -5
- package/build/system/Code/Code.test.js +29 -20
- package/build/system/ConfirmationDialog/ConfirmationDialog.js +16 -10
- package/build/system/ConfirmationDialog/ConfirmationDialog.stories.js +1 -9
- package/build/system/Dialog/Dialog.js +9 -8
- package/build/system/Dialog/Dialog.stories.js +1 -9
- package/build/system/Dialog/DialogButton.js +8 -9
- package/build/system/Dialog/DialogContent.js +11 -12
- package/build/system/Dialog/DialogDivider.js +5 -3
- package/build/system/Dialog/DialogMenu.js +5 -3
- package/build/system/Dialog/DialogMenuItem.js +8 -9
- package/build/system/Dialog/DialogTrigger.js +9 -2
- package/build/system/Flex/Flex.js +9 -2
- package/build/system/Flex/Flex.stories.js +1 -9
- package/build/system/Form/AsyncSearchSelect.js +8 -10
- package/build/system/Form/Checkbox.js +10 -11
- package/build/system/Form/InlineSelect.js +12 -14
- package/build/system/Form/Input.js +8 -9
- package/build/system/Form/Input.stories.js +2 -8
- package/build/system/Form/Label.js +9 -2
- package/build/system/Form/Radio.js +8 -9
- package/build/system/Form/RadioBoxGroup.js +8 -9
- package/build/system/Form/RadioBoxGroup.stories.js +53 -0
- package/build/system/Form/SearchSelect.js +15 -18
- package/build/system/Form/Select.js +10 -10
- package/build/system/Form/Select.stories.js +96 -10
- package/build/system/Form/Select.test.js +14 -5
- package/build/system/Form/Textarea.js +8 -9
- package/build/system/Form/Toggle.js +18 -13
- package/build/system/Form/ToggleGroup.js +8 -9
- package/build/system/Form/ToggleGroup.stories.js +50 -0
- package/build/system/Form/ToggleRow.js +9 -10
- package/build/system/Form/Validation.js +8 -9
- package/build/system/Grid/Grid.js +9 -2
- package/build/system/Grid/Grid.stories.js +1 -9
- package/build/system/Heading/Heading.js +18 -13
- package/build/system/Heading/Heading.stories.js +1 -9
- package/build/system/Link/Link.js +9 -10
- package/build/system/Link/Link.stories.js +1 -9
- package/build/system/Notice/Notice.js +18 -13
- package/build/system/Notice/Notice.stories.js +20 -3
- package/build/system/Notification/Notification.js +3 -2
- package/build/system/Notification/Notification.stories.js +1 -9
- package/build/system/OptionRow/OptionRow.js +26 -16
- package/build/system/OptionRow/OptionRow.stories.js +12 -12
- package/build/system/OptionRow/OptionRow.test.js +93 -0
- package/build/system/Progress/Progress.js +17 -12
- package/build/system/Progress/Progress.stories.js +1 -9
- package/build/system/ResourceList/ResourceItem.js +2 -2
- package/build/system/ResourceList/ResourceList.js +14 -4
- package/build/system/ResourceList/ResourceList.stories.js +377 -0
- package/build/system/Spinner/Spinner.js +17 -12
- package/build/system/Spinner/Spinner.stories.js +1 -9
- package/build/system/Table/Table.js +10 -13
- package/build/system/Table/Table.stories.js +1 -9
- package/build/system/Table/TableRow.js +2 -2
- package/build/system/Tabs/TabItem.js +10 -10
- package/build/system/Tabs/Tabs.js +19 -14
- package/build/system/Tabs/Tabs.stories.js +1 -9
- package/build/system/Text/Text.js +18 -13
- package/build/system/Text/Text.stories.js +1 -9
- package/build/system/Time/Time.stories.js +52 -0
- package/build/system/Time/index.js +17 -13
- package/build/system/Timeline/Timeline.js +17 -11
- package/build/system/Timeline/Timeline.stories.js +16 -22
- package/build/system/Tooltip/Tooltip.js +10 -11
- package/build/system/Tooltip/Tooltip.stories.js +1 -9
- package/build/system/UsageChart/UsageChart.stories.js +20 -0
- package/build/system/Wizard/Wizard.js +18 -11
- package/build/system/Wizard/Wizard.stories.js +5 -4
- package/build/system/Wizard/WizardStep.js +8 -4
- package/build/system/Wizard/WizardStepHorizontal.js +8 -4
- package/build/system/index.js +3 -3
- package/build/system/theme/colors.js +1 -1
- package/build/system/theme/index.js +10 -5
- package/package.json +25 -13
- package/src/system/Avatar/Avatar.js +4 -0
- package/src/system/Avatar/{Avatar.stories.js → Avatar.stories.jsx} +0 -0
- package/src/system/Badge/Badge.js +4 -1
- package/src/system/Badge/{Badge.stories.js → Badge.stories.jsx} +0 -0
- package/src/system/BlankState/BlankState.js +4 -1
- package/src/system/BlankState/{BlankState.stories.js → BlankState.stories.jsx} +0 -0
- package/src/system/BlankState/BlankState.test.js +23 -22
- package/src/system/Box/Box.js +6 -1
- package/src/system/Box/{Box.stories.js → Box.stories.jsx} +0 -0
- package/src/system/Button/Button.js +3 -0
- package/src/system/Button/{Button.stories.js → Button.stories.jsx} +0 -0
- package/src/system/Card/Card.js +4 -1
- package/src/system/Card/{Card.stories.js → Card.stories.jsx} +0 -0
- package/src/system/Code/Code.js +4 -1
- package/src/system/Code/{Code.stories.js → Code.stories.jsx} +0 -0
- package/src/system/ConfirmationDialog/ConfirmationDialog.js +4 -2
- package/src/system/ConfirmationDialog/{ConfirmationDialog.stories.js → ConfirmationDialog.stories.jsx} +0 -0
- package/src/system/Dialog/Dialog.js +1 -1
- package/src/system/Dialog/{Dialog.stories.js → Dialog.stories.jsx} +0 -0
- package/src/system/Flex/{Flex.stories.js → Flex.stories.jsx} +0 -0
- package/src/system/Form/{Input.stories.js → Input.stories.jsx} +0 -0
- package/src/system/Form/{RadioBoxGroup.stories.js → RadioBoxGroup.stories.jsx} +0 -0
- package/src/system/Form/Select.js +1 -1
- package/src/system/Form/{Select.stories.js → Select.stories.jsx} +0 -0
- package/src/system/Form/Toggle.js +4 -2
- package/src/system/Form/{ToggleGroup.stories.js → ToggleGroup.stories.jsx} +0 -0
- package/src/system/Grid/{Grid.stories.js → Grid.stories.jsx} +0 -0
- package/src/system/Heading/Heading.js +4 -1
- package/src/system/Heading/{Heading.stories.js → Heading.stories.jsx} +0 -0
- package/src/system/Link/{Link.stories.js → Link.stories.jsx} +0 -0
- package/src/system/Notice/Notice.js +4 -1
- package/src/system/Notice/{Notice.stories.js → Notice.stories.jsx} +0 -0
- package/src/system/Notification/Notification.js +1 -0
- package/src/system/Notification/{Notification.stories.js → Notification.stories.jsx} +0 -0
- package/src/system/OptionRow/OptionRow.js +11 -2
- package/src/system/OptionRow/{OptionRow.stories.js → OptionRow.stories.jsx} +9 -0
- package/src/system/OptionRow/OptionRow.test.js +49 -0
- package/src/system/Progress/Progress.js +4 -1
- package/src/system/Progress/{Progress.stories.js → Progress.stories.jsx} +0 -0
- package/src/system/ResourceList/ResourceList.js +1 -1
- package/src/system/ResourceList/{ResourceList.stories.js → ResourceList.stories.jsx} +0 -0
- package/src/system/Spinner/Spinner.js +4 -1
- package/src/system/Spinner/{Spinner.stories.js → Spinner.stories.jsx} +0 -0
- package/src/system/Table/Table.js +1 -1
- package/src/system/Table/{Table.stories.js → Table.stories.jsx} +0 -0
- package/src/system/Tabs/TabItem.js +1 -0
- package/src/system/Tabs/Tabs.js +5 -2
- package/src/system/Tabs/{Tabs.stories.js → Tabs.stories.jsx} +0 -0
- package/src/system/Text/Text.js +4 -1
- package/src/system/Text/{Text.stories.js → Text.stories.jsx} +0 -0
- package/src/system/Time/{Time.stories.js → Time.stories.jsx} +0 -0
- package/src/system/Time/index.js +4 -1
- package/src/system/Timeline/Timeline.js +4 -2
- package/src/system/Timeline/{Timeline.stories.js → Timeline.stories.jsx} +0 -0
- package/src/system/Tooltip/{Tooltip.stories.js → Tooltip.stories.jsx} +0 -0
- package/src/system/Wizard/Wizard.js +6 -2
- package/src/system/Wizard/{Wizard.stories.js → Wizard.stories.jsx} +1 -1
- package/src/system/Wizard/WizardStep.js +5 -2
- package/src/system/Wizard/WizardStepHorizontal.js +4 -1
|
@@ -3,6 +3,7 @@
|
|
|
3
3
|
/**
|
|
4
4
|
* External dependencies
|
|
5
5
|
*/
|
|
6
|
+
import classNames from 'classnames';
|
|
6
7
|
import PropTypes from 'prop-types';
|
|
7
8
|
import React from 'react';
|
|
8
9
|
|
|
@@ -11,8 +12,8 @@ import React from 'react';
|
|
|
11
12
|
*/
|
|
12
13
|
import { Dialog, Box, Heading, Text, Flex, Button } from '../';
|
|
13
14
|
|
|
14
|
-
const ConfirmationDialogContent = ( { title, body, onClose, label = 'Confirm', onConfirm } ) => (
|
|
15
|
-
<Box p={ 4 }>
|
|
15
|
+
const ConfirmationDialogContent = ( { title, body, onClose, label = 'Confirm', onConfirm, className = null } ) => (
|
|
16
|
+
<Box p={ 4 } className={ classNames( 'vip-confirmation-dialog-component', className ) }>
|
|
16
17
|
<Heading variant="h3" sx={ { mb: 2 } }>
|
|
17
18
|
{ title }
|
|
18
19
|
</Heading>
|
|
@@ -40,6 +41,7 @@ ConfirmationDialogContent.propTypes = {
|
|
|
40
41
|
label: PropTypes.string,
|
|
41
42
|
onClose: PropTypes.func,
|
|
42
43
|
onConfirm: PropTypes.func,
|
|
44
|
+
className: PropTypes.any,
|
|
43
45
|
};
|
|
44
46
|
|
|
45
47
|
const ConfirmationDialog = ( { trigger, onConfirm, needsConfirm = true, ...props } ) => {
|
|
File without changes
|
|
@@ -46,7 +46,7 @@ const Dialog = ( { trigger, position = 'left', startOpen = false, content, disab
|
|
|
46
46
|
};
|
|
47
47
|
|
|
48
48
|
return (
|
|
49
|
-
<div onClick={ e => e.stopPropagation() } sx={ { position: 'relative' } } ref={ dialogRef }>
|
|
49
|
+
<div onClick={ e => e.stopPropagation() } sx={ { position: 'relative' } } ref={ dialogRef } className="vip-dialog-component">
|
|
50
50
|
<DialogTrigger
|
|
51
51
|
tabIndex="0"
|
|
52
52
|
sx={ { display: 'inline' } }
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
@@ -36,7 +36,7 @@ const Select = ( { isMulti = false, isInline, isAsync, options, label, isSearch,
|
|
|
36
36
|
break;
|
|
37
37
|
}
|
|
38
38
|
|
|
39
|
-
return <div ref={selectRef}><Component isMulti={isMulti} label={label} options={options} {...portalProps} {...props} /></div>;
|
|
39
|
+
return <div ref={selectRef} className="vip-select-component"><Component isMulti={isMulti} label={label} options={options} {...portalProps} {...props} /></div>;
|
|
40
40
|
};
|
|
41
41
|
|
|
42
42
|
Select.propTypes = {
|
|
File without changes
|
|
@@ -3,10 +3,11 @@
|
|
|
3
3
|
/**
|
|
4
4
|
* External dependencies
|
|
5
5
|
*/
|
|
6
|
+
import classNames from 'classnames';
|
|
6
7
|
import PropTypes from 'prop-types';
|
|
7
8
|
|
|
8
|
-
const Toggle = ( { name = 'toggle', ...props } ) => (
|
|
9
|
-
<CheckBoxWrapper>
|
|
9
|
+
const Toggle = ( { name = 'toggle', className = null, ...props } ) => (
|
|
10
|
+
<CheckBoxWrapper className={ classNames( 'vip-checkbox-component', className ) }>
|
|
10
11
|
<CheckBox name={name} id={name} type="checkbox" {...props} />
|
|
11
12
|
<CheckBoxLabel htmlFor={name} />
|
|
12
13
|
</CheckBoxWrapper>
|
|
@@ -14,6 +15,7 @@ const Toggle = ( { name = 'toggle', ...props } ) => (
|
|
|
14
15
|
|
|
15
16
|
Toggle.propTypes = {
|
|
16
17
|
name: PropTypes.string,
|
|
18
|
+
className: PropTypes.any,
|
|
17
19
|
};
|
|
18
20
|
|
|
19
21
|
export { Toggle };
|
|
File without changes
|
|
File without changes
|
|
@@ -5,8 +5,9 @@
|
|
|
5
5
|
*/
|
|
6
6
|
import { Heading as ThemeHeading } from 'theme-ui';
|
|
7
7
|
import PropTypes from 'prop-types';
|
|
8
|
+
import classNames from 'classnames';
|
|
8
9
|
|
|
9
|
-
const Heading = ( { variant = 'h3', sx, ...props } ) => (
|
|
10
|
+
const Heading = ( { variant = 'h3', sx, className = null, ...props } ) => (
|
|
10
11
|
<ThemeHeading
|
|
11
12
|
as={variant}
|
|
12
13
|
sx={{
|
|
@@ -15,6 +16,7 @@ const Heading = ( { variant = 'h3', sx, ...props } ) => (
|
|
|
15
16
|
variant: `text.${ variant }`,
|
|
16
17
|
...sx,
|
|
17
18
|
}}
|
|
19
|
+
className={ classNames( 'vip-heading-component', className ) }
|
|
18
20
|
{...props}
|
|
19
21
|
/>
|
|
20
22
|
);
|
|
@@ -22,6 +24,7 @@ const Heading = ( { variant = 'h3', sx, ...props } ) => (
|
|
|
22
24
|
Heading.propTypes = {
|
|
23
25
|
variant: PropTypes.string,
|
|
24
26
|
sx: PropTypes.object,
|
|
27
|
+
className: PropTypes.any,
|
|
25
28
|
};
|
|
26
29
|
|
|
27
30
|
export { Heading };
|
|
File without changes
|
|
File without changes
|
|
@@ -3,6 +3,7 @@
|
|
|
3
3
|
/**
|
|
4
4
|
* External dependencies
|
|
5
5
|
*/
|
|
6
|
+
import classNames from 'classnames';
|
|
6
7
|
import PropTypes from 'prop-types';
|
|
7
8
|
import { MdError, MdWarning, MdCheckCircle, MdInfo } from 'react-icons/md';
|
|
8
9
|
|
|
@@ -36,7 +37,7 @@ NoticeIcon.propTypes = {
|
|
|
36
37
|
variant: PropTypes.string,
|
|
37
38
|
};
|
|
38
39
|
|
|
39
|
-
const Notice = ( { variant = 'warning', inline = false, children, title, sx = {}, ...props } ) => {
|
|
40
|
+
const Notice = ( { variant = 'warning', inline = false, children, title, sx = {}, className = null, ...props } ) => {
|
|
40
41
|
let color = 'yellow';
|
|
41
42
|
|
|
42
43
|
switch ( variant ) {
|
|
@@ -66,6 +67,7 @@ const Notice = ( { variant = 'warning', inline = false, children, title, sx = {}
|
|
|
66
67
|
},
|
|
67
68
|
...sx,
|
|
68
69
|
} }
|
|
70
|
+
className={ classNames( 'vip-notice-component', className ) }
|
|
69
71
|
{ ...props }
|
|
70
72
|
>
|
|
71
73
|
<Flex sx={ {
|
|
@@ -93,6 +95,7 @@ Notice.propTypes = {
|
|
|
93
95
|
sx: PropTypes.object,
|
|
94
96
|
title: PropTypes.node,
|
|
95
97
|
variant: PropTypes.string,
|
|
98
|
+
className: PropTypes.any,
|
|
96
99
|
};
|
|
97
100
|
|
|
98
101
|
export { Notice };
|
|
File without changes
|
|
File without changes
|
|
@@ -11,6 +11,7 @@ import PropTypes from 'prop-types';
|
|
|
11
11
|
* Internal dependencies
|
|
12
12
|
*/
|
|
13
13
|
import { Badge, Box, Grid, Heading, Text } from '..';
|
|
14
|
+
import classNames from 'classnames';
|
|
14
15
|
|
|
15
16
|
const OptionRow = ( {
|
|
16
17
|
image,
|
|
@@ -24,6 +25,8 @@ const OptionRow = ( {
|
|
|
24
25
|
to,
|
|
25
26
|
small = false,
|
|
26
27
|
disabled = false,
|
|
28
|
+
order = null,
|
|
29
|
+
className = null,
|
|
27
30
|
...props
|
|
28
31
|
} ) => {
|
|
29
32
|
const mergedCard = disabled
|
|
@@ -53,13 +56,15 @@ const OptionRow = ( {
|
|
|
53
56
|
to={to}
|
|
54
57
|
columns={[ 1, 1, 'auto 1fr auto' ]}
|
|
55
58
|
gap={[ 3, 3, `${ small ? 3 : 4 }` ]}
|
|
59
|
+
data-order={ order || undefined }
|
|
60
|
+
className={ classNames( 'vip-option-row-component', className ) }
|
|
56
61
|
{...props}
|
|
57
62
|
sx={{
|
|
58
63
|
alignItems: 'center',
|
|
59
64
|
cursor: disabled ? 'auto' : 'pointer',
|
|
60
65
|
textDecoration: 'none',
|
|
61
66
|
color: 'inherit',
|
|
62
|
-
'&:hover': {
|
|
67
|
+
'&:hover': ! disabled && {
|
|
63
68
|
backgroundColor: 'hover',
|
|
64
69
|
},
|
|
65
70
|
...inlineStyles,
|
|
@@ -102,7 +107,9 @@ const OptionRow = ( {
|
|
|
102
107
|
{subTitle && <Text sx={{ mb: 1, color: 'muted' }}>{subTitle}</Text>}
|
|
103
108
|
{body && <Text sx={{ mb: 0 }}>{body}</Text>}
|
|
104
109
|
</Box>
|
|
105
|
-
|
|
110
|
+
{ ( false !== meta && '' !== meta ) && (
|
|
111
|
+
<Box data-testid="meta">{ meta ? meta : <MdArrowForward size={24} /> }</Box>
|
|
112
|
+
) }
|
|
106
113
|
</Grid>
|
|
107
114
|
);
|
|
108
115
|
};
|
|
@@ -119,6 +126,8 @@ OptionRow.propTypes = {
|
|
|
119
126
|
to: PropTypes.string,
|
|
120
127
|
small: PropTypes.bool,
|
|
121
128
|
disabled: PropTypes.bool,
|
|
129
|
+
order: PropTypes.number,
|
|
130
|
+
className: PropTypes.any,
|
|
122
131
|
};
|
|
123
132
|
|
|
124
133
|
export { OptionRow };
|
|
@@ -26,6 +26,15 @@ export const Default = () => (
|
|
|
26
26
|
label="Option Row"
|
|
27
27
|
subTitle="Mostly used to link off to other pages."
|
|
28
28
|
as="a"
|
|
29
|
+
order={ 2 }
|
|
30
|
+
/>
|
|
31
|
+
<OptionRow
|
|
32
|
+
image={image2}
|
|
33
|
+
label="Option Row – Disabled"
|
|
34
|
+
subTitle="Mostly used to link off to other pages."
|
|
35
|
+
as={ Box }
|
|
36
|
+
disabled
|
|
37
|
+
meta=""
|
|
29
38
|
/>
|
|
30
39
|
</Box>
|
|
31
40
|
);
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* External dependencies
|
|
3
|
+
*/
|
|
4
|
+
import { render, screen } from '@testing-library/react';
|
|
5
|
+
import { axe } from 'jest-axe';
|
|
6
|
+
|
|
7
|
+
/**
|
|
8
|
+
* Internal dependencies
|
|
9
|
+
*/
|
|
10
|
+
import { OptionRow } from './OptionRow';
|
|
11
|
+
|
|
12
|
+
describe( '<OptionRow />', () => {
|
|
13
|
+
it( 'renders the OptionRow', async () => {
|
|
14
|
+
const { container } = render(
|
|
15
|
+
<OptionRow
|
|
16
|
+
label="Option Row"
|
|
17
|
+
subTitle="Mostly used to link off to other pages."
|
|
18
|
+
as="a"
|
|
19
|
+
/>
|
|
20
|
+
);
|
|
21
|
+
|
|
22
|
+
expect( screen.getByText( 'Mostly used to link off to other pages.' ) ).toBeInTheDocument();
|
|
23
|
+
|
|
24
|
+
// Check for accessibility issues
|
|
25
|
+
await expect( await axe( container ) ).toHaveNoViolations();
|
|
26
|
+
} );
|
|
27
|
+
|
|
28
|
+
it( 'renders a disabled OptionRow', async () => {
|
|
29
|
+
// eslint-disable-next-line max-len
|
|
30
|
+
const image1 = "data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='79' height='79' viewBox='0 0 79 79' fill='none' %3E%3Cpath d='M71.4 15.3L54.2 4.2C54 4 53.7 4 53.4 4H26.4C26.1 4 25.8 4.1 25.6 4.2L8.29997 15.3C7.89997 15.6 7.59998 16 7.59998 16.5V32.1V63C7.59998 63.5 7.89997 64 8.29997 64.2L25.5 75.3C25.5 75.3 25.6 75.3 25.6 75.4C25.6 75.4 25.7 75.4 25.7 75.5C25.9 75.6 26 75.6 26.2 75.6H53.2C53.4 75.6 53.5 75.6 53.7 75.5C53.8 75.5 53.8 75.5 53.8 75.4C53.8 75.4 53.9 75.4 53.9 75.3L71.4 64.2C71.5 64.1 71.7 64 71.8 63.8C71.8 63.8 71.8 63.7 71.9 63.7C72 63.6 72.1 63.4 72.1 63.2V63.1C72.1 63 72.1 62.9 72.1 62.8V32.1V16.5C72.1 16 71.8 15.6 71.4 15.3ZM24.9 71.4L10.6 62.2V34.8L24.9 44V71.4ZM51.9 72.6H27.8V44.7H51.9V72.6ZM69.1 31.3L52.9 41.7H26.8L10.6 31.3V17.3L26.8 6.9H52.9L69.1 17.3V31.3Z' fill='%23BD9D70' /%3E%3C/svg%3E";
|
|
31
|
+
|
|
32
|
+
const { container } = render(
|
|
33
|
+
<OptionRow
|
|
34
|
+
image={image1}
|
|
35
|
+
label="Option Row"
|
|
36
|
+
subTitle="Mostly used to link off to other pages."
|
|
37
|
+
as="a"
|
|
38
|
+
disabled
|
|
39
|
+
meta=""
|
|
40
|
+
/>
|
|
41
|
+
);
|
|
42
|
+
|
|
43
|
+
expect( screen.getByAltText( 'Image representing the list item' ).closest( 'div' ) ).toHaveStyle( { background: 'none' } );
|
|
44
|
+
expect( screen.queryByTestId( 'meta' ) ).not.toBeInTheDocument();
|
|
45
|
+
|
|
46
|
+
// Check for accessibility issues
|
|
47
|
+
await expect( await axe( container ) ).toHaveNoViolations();
|
|
48
|
+
} );
|
|
49
|
+
} );
|
|
@@ -11,10 +11,12 @@ import PropTypes from 'prop-types';
|
|
|
11
11
|
*/
|
|
12
12
|
import { Spinner } from '../Spinner';
|
|
13
13
|
import { Box, Heading, Text, Flex } from '../';
|
|
14
|
+
import classNames from 'classnames';
|
|
14
15
|
|
|
15
|
-
const Progress = ( { steps, activeStep, sx, ...props } ) => (
|
|
16
|
+
const Progress = ( { steps, activeStep, sx, className, ...props } ) => (
|
|
16
17
|
<Box>
|
|
17
18
|
<ThemeProgress
|
|
19
|
+
className={ classNames( 'vip-progress-component', className ) }
|
|
18
20
|
{ ...props }
|
|
19
21
|
sx={ {
|
|
20
22
|
color: 'primary',
|
|
@@ -39,6 +41,7 @@ Progress.propTypes = {
|
|
|
39
41
|
steps: PropTypes.array,
|
|
40
42
|
activeStep: PropTypes.number,
|
|
41
43
|
sx: PropTypes.object,
|
|
44
|
+
className: PropTypes.any,
|
|
42
45
|
};
|
|
43
46
|
|
|
44
47
|
export { Progress };
|
|
File without changes
|
|
@@ -59,7 +59,7 @@ const ResourceList = ( { groupedByDay = false, items, renderItem, dateKey } ) =>
|
|
|
59
59
|
itemsList.map( ( item, index ) => <StyledListItem key={index}>{renderItem( item )}</StyledListItem> );
|
|
60
60
|
|
|
61
61
|
return (
|
|
62
|
-
<Box as="ul" sx={{ listStyleType: 'none', m: 0, p: 0 }}>
|
|
62
|
+
<Box as="ul" sx={{ listStyleType: 'none', m: 0, p: 0 }} className="vip-resource-list-component">
|
|
63
63
|
{groupedByDay
|
|
64
64
|
? Object.keys( groupedItems ).map( ( groupName, index ) => (
|
|
65
65
|
<Box sx={{ mb: 4 }} key={index}>
|
|
File without changes
|
|
@@ -5,20 +5,23 @@
|
|
|
5
5
|
*/
|
|
6
6
|
import { Spinner as ThemeSpinner } from 'theme-ui';
|
|
7
7
|
import PropTypes from 'prop-types';
|
|
8
|
+
import classNames from 'classnames';
|
|
8
9
|
|
|
9
|
-
const Spinner = ( { sx, ...props } ) => (
|
|
10
|
+
const Spinner = ( { sx, className = null, ...props } ) => (
|
|
10
11
|
<ThemeSpinner
|
|
11
12
|
strokeWidth={2}
|
|
12
13
|
sx={{
|
|
13
14
|
fill: 'none',
|
|
14
15
|
color: 'primary',
|
|
15
16
|
}}
|
|
17
|
+
className={ classNames( 'vip-spinner-component', className ) }
|
|
16
18
|
{...props}
|
|
17
19
|
/>
|
|
18
20
|
);
|
|
19
21
|
|
|
20
22
|
Spinner.propTypes = {
|
|
21
23
|
sx: PropTypes.object,
|
|
24
|
+
className: PropTypes.any,
|
|
22
25
|
};
|
|
23
26
|
|
|
24
27
|
export { Spinner };
|
|
File without changes
|
|
File without changes
|
package/src/system/Tabs/Tabs.js
CHANGED
|
@@ -3,6 +3,7 @@
|
|
|
3
3
|
/**
|
|
4
4
|
* External dependencies
|
|
5
5
|
*/
|
|
6
|
+
import classNames from 'classnames';
|
|
6
7
|
import PropTypes from 'prop-types';
|
|
7
8
|
|
|
8
9
|
/**
|
|
@@ -10,8 +11,9 @@ import PropTypes from 'prop-types';
|
|
|
10
11
|
*/
|
|
11
12
|
import { Flex } from '..';
|
|
12
13
|
|
|
13
|
-
const Tabs = ( { sx, ...props } ) => (
|
|
14
|
+
const Tabs = ( { className = null, sx, ...props } ) => (
|
|
14
15
|
<Flex
|
|
16
|
+
className={ classNames( 'vip-tabs-component', className ) }
|
|
15
17
|
sx={{
|
|
16
18
|
borderBottom: '1px solid',
|
|
17
19
|
borderColor: 'border',
|
|
@@ -25,8 +27,9 @@ const Tabs = ( { sx, ...props } ) => (
|
|
|
25
27
|
);
|
|
26
28
|
|
|
27
29
|
Tabs.propTypes = {
|
|
28
|
-
|
|
30
|
+
className: PropTypes.any,
|
|
29
31
|
sx: PropTypes.object,
|
|
32
|
+
variant: PropTypes.string,
|
|
30
33
|
};
|
|
31
34
|
|
|
32
35
|
export { Tabs };
|
|
File without changes
|
package/src/system/Text/Text.js
CHANGED
|
@@ -5,8 +5,9 @@
|
|
|
5
5
|
*/
|
|
6
6
|
import { Text as ThemeText } from 'theme-ui';
|
|
7
7
|
import PropTypes from 'prop-types';
|
|
8
|
+
import classNames from 'classnames';
|
|
8
9
|
|
|
9
|
-
const Text = ( { sx, ...props } ) => (
|
|
10
|
+
const Text = ( { sx, className = null, ...props } ) => (
|
|
10
11
|
<ThemeText
|
|
11
12
|
as="p"
|
|
12
13
|
sx={{
|
|
@@ -14,12 +15,14 @@ const Text = ( { sx, ...props } ) => (
|
|
|
14
15
|
marginBottom: 2,
|
|
15
16
|
...sx,
|
|
16
17
|
}}
|
|
18
|
+
className={ classNames( 'vip-text-component', className ) }
|
|
17
19
|
{...props}
|
|
18
20
|
/>
|
|
19
21
|
);
|
|
20
22
|
|
|
21
23
|
Text.propTypes = {
|
|
22
24
|
sx: PropTypes.object,
|
|
25
|
+
className: PropTypes.any,
|
|
23
26
|
};
|
|
24
27
|
|
|
25
28
|
export { Text };
|
|
File without changes
|
|
File without changes
|
package/src/system/Time/index.js
CHANGED
|
@@ -5,6 +5,7 @@
|
|
|
5
5
|
*/
|
|
6
6
|
import { Text } from 'theme-ui';
|
|
7
7
|
import PropTypes from 'prop-types';
|
|
8
|
+
import classNames from 'classnames';
|
|
8
9
|
|
|
9
10
|
const formatter = new Intl.RelativeTimeFormat( undefined, {
|
|
10
11
|
numeric: 'auto',
|
|
@@ -31,7 +32,7 @@ function formatTimeAgo( date ) {
|
|
|
31
32
|
}
|
|
32
33
|
}
|
|
33
34
|
|
|
34
|
-
const Time = ( { time, relativeTime = false, timeOnly = false, ...props } ) => {
|
|
35
|
+
const Time = ( { time, relativeTime = false, timeOnly = false, className = null, ...props } ) => {
|
|
35
36
|
let formattedTime;
|
|
36
37
|
if ( relativeTime ) {
|
|
37
38
|
formattedTime = formatTimeAgo( time );
|
|
@@ -46,6 +47,7 @@ const Time = ( { time, relativeTime = false, timeOnly = false, ...props } ) => {
|
|
|
46
47
|
title={time.toLocaleString( 'sv', { timeZoneName: 'short' } )}
|
|
47
48
|
datetime={time}
|
|
48
49
|
as="time"
|
|
50
|
+
className={ classNames( 'vip-time-component', className ) }
|
|
49
51
|
{...props}
|
|
50
52
|
>
|
|
51
53
|
{formattedTime}
|
|
@@ -57,6 +59,7 @@ Time.propTypes = {
|
|
|
57
59
|
time: PropTypes.string,
|
|
58
60
|
timeOnly: PropTypes.bool,
|
|
59
61
|
relativeTime: PropTypes.bool,
|
|
62
|
+
className: PropTypes.any,
|
|
60
63
|
};
|
|
61
64
|
|
|
62
65
|
export { Time };
|
|
@@ -6,6 +6,7 @@
|
|
|
6
6
|
import { Flex } from 'theme-ui';
|
|
7
7
|
import { MdWatchLater } from 'react-icons/md';
|
|
8
8
|
import PropTypes from 'prop-types';
|
|
9
|
+
import classNames from 'classnames';
|
|
9
10
|
|
|
10
11
|
const VerticalLine = () => {
|
|
11
12
|
return (
|
|
@@ -20,8 +21,8 @@ const VerticalLine = () => {
|
|
|
20
21
|
);
|
|
21
22
|
};
|
|
22
23
|
|
|
23
|
-
const Timeline = ( { time, first = false, last = false, ...props } ) => (
|
|
24
|
-
<Flex { ...props }>
|
|
24
|
+
const Timeline = ( { time, first = false, last = false, className = null, ...props } ) => (
|
|
25
|
+
<Flex className={ classNames( 'vip-timeline-component', className ) } { ...props }>
|
|
25
26
|
<Flex sx={ { flexDirection: 'column', justifyContent: 'space-evenly', alignItems: 'center' } }>
|
|
26
27
|
{ ! first && (
|
|
27
28
|
<VerticalLine />
|
|
@@ -41,6 +42,7 @@ Timeline.propTypes = {
|
|
|
41
42
|
first: PropTypes.bool,
|
|
42
43
|
time: PropTypes.node,
|
|
43
44
|
last: PropTypes.bool,
|
|
45
|
+
className: PropTypes.any,
|
|
44
46
|
};
|
|
45
47
|
|
|
46
48
|
export { Timeline };
|
|
File without changes
|
|
File without changes
|
|
@@ -5,6 +5,7 @@
|
|
|
5
5
|
*/
|
|
6
6
|
import React from 'react';
|
|
7
7
|
import PropTypes from 'prop-types';
|
|
8
|
+
import classNames from 'classnames';
|
|
8
9
|
import { MdArrowForward } from 'react-icons/md';
|
|
9
10
|
|
|
10
11
|
/**
|
|
@@ -12,9 +13,9 @@ import { MdArrowForward } from 'react-icons/md';
|
|
|
12
13
|
*/
|
|
13
14
|
import { Box, WizardStep, Flex, WizardStepHorizontal } from '..';
|
|
14
15
|
|
|
15
|
-
const Wizard = ( { steps, activeStep, variant, completed = [], ...props } ) => {
|
|
16
|
+
const Wizard = ( { steps, activeStep, variant, completed = [], className = null, ...props } ) => {
|
|
16
17
|
return (
|
|
17
|
-
<Box>
|
|
18
|
+
<Box className={ classNames( 'vip-wizard-component', className ) }>
|
|
18
19
|
{variant === 'horizontal' ? (
|
|
19
20
|
<Box>
|
|
20
21
|
<Flex
|
|
@@ -26,6 +27,7 @@ const Wizard = ( { steps, activeStep, variant, completed = [], ...props } ) => {
|
|
|
26
27
|
{steps.map( ( { title, subTitle }, index ) => (
|
|
27
28
|
<React.Fragment key={index}>
|
|
28
29
|
<WizardStepHorizontal
|
|
30
|
+
order={index + 1}
|
|
29
31
|
active={index === activeStep}
|
|
30
32
|
title={title}
|
|
31
33
|
subTitle={subTitle}
|
|
@@ -44,6 +46,7 @@ const Wizard = ( { steps, activeStep, variant, completed = [], ...props } ) => {
|
|
|
44
46
|
subTitle={subTitle}
|
|
45
47
|
complete={completed.includes( index )}
|
|
46
48
|
key={index}
|
|
49
|
+
order={index + 1}
|
|
47
50
|
>
|
|
48
51
|
{children}
|
|
49
52
|
</WizardStep>
|
|
@@ -58,6 +61,7 @@ Wizard.propTypes = {
|
|
|
58
61
|
activeStep: PropTypes.number,
|
|
59
62
|
variant: PropTypes.string,
|
|
60
63
|
completed: PropTypes.array,
|
|
64
|
+
className: PropTypes.any,
|
|
61
65
|
};
|
|
62
66
|
|
|
63
67
|
export { Wizard };
|
|
@@ -11,7 +11,7 @@ import PropTypes from 'prop-types';
|
|
|
11
11
|
*/
|
|
12
12
|
import { Card, Heading, Text } from '..';
|
|
13
13
|
|
|
14
|
-
const WizardStep = ( { title, subTitle, complete = false, children, active } ) => {
|
|
14
|
+
const WizardStep = ( { title, subTitle, complete = false, children, active, order } ) => {
|
|
15
15
|
let borderLeftColor = 'border';
|
|
16
16
|
|
|
17
17
|
if ( complete ) {
|
|
@@ -44,6 +44,8 @@ const WizardStep = ( { title, subTitle, complete = false, children, active } ) =
|
|
|
44
44
|
borderColor: active ? 'primary' : 'border',
|
|
45
45
|
borderLeftColor: borderLeftColor,
|
|
46
46
|
}}
|
|
47
|
+
data-step={ order }
|
|
48
|
+
data-active={ active || undefined }
|
|
47
49
|
>
|
|
48
50
|
<Heading
|
|
49
51
|
variant="h4"
|
|
@@ -69,7 +71,8 @@ WizardStep.propTypes = {
|
|
|
69
71
|
subTitle: PropTypes.node,
|
|
70
72
|
complete: PropTypes.bool,
|
|
71
73
|
active: PropTypes.bool,
|
|
72
|
-
children: PropTypes.node
|
|
74
|
+
children: PropTypes.node,
|
|
75
|
+
order: PropTypes.number.isRequired,
|
|
73
76
|
};
|
|
74
77
|
|
|
75
78
|
export { WizardStep };
|
|
@@ -11,7 +11,7 @@ import PropTypes from 'prop-types';
|
|
|
11
11
|
*/
|
|
12
12
|
import { Heading } from '..';
|
|
13
13
|
|
|
14
|
-
const WizardStepHorizontal = ( { title, active } ) => {
|
|
14
|
+
const WizardStepHorizontal = ( { title, active, order } ) => {
|
|
15
15
|
return (
|
|
16
16
|
<Heading
|
|
17
17
|
variant="h4"
|
|
@@ -21,6 +21,8 @@ const WizardStepHorizontal = ( { title, active } ) => {
|
|
|
21
21
|
alignItems: 'center',
|
|
22
22
|
color: active ? 'heading' : 'muted',
|
|
23
23
|
}}
|
|
24
|
+
data-step={ order }
|
|
25
|
+
data-active={ active || undefined }
|
|
24
26
|
>
|
|
25
27
|
<MdCheckCircle sx={{ mr: 2 }} />
|
|
26
28
|
{title}
|
|
@@ -32,6 +34,7 @@ WizardStepHorizontal.propTypes = {
|
|
|
32
34
|
title: PropTypes.node,
|
|
33
35
|
subTitle: PropTypes.node,
|
|
34
36
|
active: PropTypes.bool,
|
|
37
|
+
order: PropTypes.number.isRequired,
|
|
35
38
|
};
|
|
36
39
|
|
|
37
40
|
export { WizardStepHorizontal };
|