@automattic/vip-design-system 0.10.2 → 0.11.1
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/.eslines.json +8 -8
- package/.eslintrc.json +9 -4
- package/.github/PULL_REQUEST_TEMPLATE.md +1 -1
- package/.github/workflows/nodejs.yaml +14 -14
- package/.prettierrc +1 -2
- package/.storybook/main.js +1 -1
- package/.storybook/preview.js +4 -8
- package/README.md +1 -0
- package/babel.config.js +1 -1
- package/build/system/Avatar/Avatar.js +2 -1
- package/build/system/BlankState/BlankState.stories.js +3 -3
- package/build/system/BlankState/BlankState.test.js +2 -2
- package/build/system/Card/Card.test.js +0 -2
- package/build/system/Code/Code.js +7 -2
- package/build/system/Code/Code.test.js +22 -57
- package/build/system/Form/Select.stories.js +3 -4
- package/build/system/Form/Select.test.js +2 -2
- package/build/system/Notification/Notification.js +24 -15
- package/build/system/Notification/Notification.stories.js +14 -4
- package/build/system/OptionRow/OptionRow.js +23 -17
- package/build/system/OptionRow/OptionRow.stories.js +5 -5
- package/build/system/OptionRow/OptionRow.test.js +4 -4
- package/build/system/ResourceList/ResourceList.js +34 -25
- package/build/system/ResourceList/ResourceList.stories.js +2 -0
- package/build/system/ScreenReaderText/ScreenReader.test.js +37 -0
- package/build/system/ScreenReaderText/ScreenReaderText.js +49 -0
- package/build/system/ScreenReaderText/index.js +7 -0
- package/build/system/Table/Table.js +15 -15
- package/build/system/Table/Table.stories.js +46 -3
- package/build/system/Table/TableCell.js +57 -0
- package/build/system/Table/TableRow.js +12 -57
- package/build/system/Table/index.js +5 -1
- package/build/system/Time/index.js +1 -1
- package/build/system/Wizard/Wizard.stories.js +1 -1
- package/build/system/index.js +1 -0
- package/package.json +8 -4
- package/src/system/Avatar/Avatar.js +1 -0
- package/src/system/Avatar/index.js +0 -1
- package/src/system/Badge/index.js +0 -1
- package/src/system/BlankState/BlankState.js +8 -5
- package/src/system/BlankState/BlankState.stories.jsx +5 -4
- package/src/system/BlankState/BlankState.test.js +21 -21
- package/src/system/BlankState/index.js +0 -1
- package/src/system/Box/Box.js +7 -1
- package/src/system/Box/index.js +0 -1
- package/src/system/Button/Button.js +3 -3
- package/src/system/Button/Button.stories.jsx +2 -2
- package/src/system/Button/index.js +0 -1
- package/src/system/Card/Card.js +4 -4
- package/src/system/Card/Card.test.js +1 -2
- package/src/system/Card/index.js +0 -1
- package/src/system/Code/Code.js +6 -2
- package/src/system/Code/Code.stories.jsx +10 -5
- package/src/system/Code/Code.test.js +3 -16
- package/src/system/ConfirmationDialog/ConfirmationDialog.js +8 -1
- package/src/system/Dialog/Dialog.js +17 -8
- package/src/system/Dialog/Dialog.stories.jsx +9 -13
- package/src/system/Dialog/DialogButton.js +18 -14
- package/src/system/Dialog/DialogDivider.js +1 -1
- package/src/system/Dialog/DialogMenu.js +1 -5
- package/src/system/Dialog/DialogMenuItem.js +4 -8
- package/src/system/Dialog/DialogTrigger.js +1 -1
- package/src/system/Dialog/index.js +0 -1
- package/src/system/Flex/Flex.js +1 -1
- package/src/system/Flex/index.js +0 -1
- package/src/system/Form/AsyncSearchSelect.js +3 -7
- package/src/system/Form/Checkbox.js +32 -28
- package/src/system/Form/InlineSelect.js +21 -17
- package/src/system/Form/Input.js +43 -45
- package/src/system/Form/Label.js +2 -2
- package/src/system/Form/RadioBoxGroup.js +34 -32
- package/src/system/Form/RadioBoxGroup.stories.jsx +8 -1
- package/src/system/Form/SearchSelect.js +7 -7
- package/src/system/Form/Select.js +21 -2
- package/src/system/Form/Select.stories.jsx +31 -34
- package/src/system/Form/Select.test.js +3 -8
- package/src/system/Form/Textarea.js +38 -40
- package/src/system/Form/Toggle.js +9 -11
- package/src/system/Form/ToggleGroup.js +29 -31
- package/src/system/Form/ToggleGroup.stories.jsx +8 -1
- package/src/system/Form/ToggleRow.js +6 -1
- package/src/system/Form/Validation.js +6 -1
- package/src/system/Form/index.js +13 -1
- package/src/system/Grid/Grid.js +1 -1
- package/src/system/Grid/index.js +0 -1
- package/src/system/Heading/Heading.js +4 -4
- package/src/system/Heading/index.js +0 -1
- package/src/system/Link/index.js +0 -1
- package/src/system/Notice/Notice.js +27 -13
- package/src/system/Notice/Notice.stories.jsx +6 -8
- package/src/system/Notice/index.js +0 -1
- package/src/system/Notification/Notification.js +25 -20
- package/src/system/Notification/Notification.stories.jsx +4 -4
- package/src/system/Notification/index.js +0 -1
- package/src/system/OptionRow/OptionRow.js +46 -44
- package/src/system/OptionRow/OptionRow.stories.jsx +10 -8
- package/src/system/OptionRow/OptionRow.test.js +12 -11
- package/src/system/OptionRow/index.js +0 -1
- package/src/system/Progress/Progress.js +3 -1
- package/src/system/Progress/Progress.stories.jsx +4 -4
- package/src/system/Progress/index.js +0 -1
- package/src/system/ResourceList/ResourceItem.js +15 -15
- package/src/system/ResourceList/ResourceList.js +28 -16
- package/src/system/ResourceList/ResourceList.stories.jsx +77 -71
- package/src/system/ScreenReaderText/ScreenReader.test.js +22 -0
- package/src/system/ScreenReaderText/ScreenReaderText.js +40 -0
- package/src/system/ScreenReaderText/index.js +7 -0
- package/src/system/Spinner/Spinner.js +4 -4
- package/src/system/Spinner/index.js +0 -1
- package/src/system/Table/Table.js +10 -9
- package/src/system/Table/Table.stories.jsx +39 -9
- package/src/system/Table/TableCell.js +48 -0
- package/src/system/Table/TableRow.js +10 -47
- package/src/system/Table/index.js +2 -2
- package/src/system/Tabs/Tabs.js +3 -3
- package/src/system/Tabs/index.js +0 -1
- package/src/system/Text/Text.js +3 -3
- package/src/system/Text/Text.stories.jsx +4 -6
- package/src/system/Text/index.js +0 -1
- package/src/system/Time/Time.stories.jsx +2 -6
- package/src/system/Time/index.js +5 -5
- package/src/system/Timeline/Timeline.js +6 -12
- package/src/system/Timeline/Timeline.stories.jsx +3 -12
- package/src/system/Timeline/index.js +0 -1
- package/src/system/Tooltip/Tooltip.js +4 -8
- package/src/system/Wizard/Wizard.js +23 -21
- package/src/system/Wizard/Wizard.stories.jsx +7 -12
- package/src/system/Wizard/WizardStep.js +8 -8
- package/src/system/Wizard/WizardStepHorizontal.js +4 -4
- package/src/system/Wizard/index.js +0 -1
- package/src/system/index.js +2 -1
- package/src/system/theme/index.js +3 -4
- package/tokens/valet-color.json +1919 -0
- package/build/system/UsageChart/UsageChart.stories.js +0 -20
|
@@ -21,33 +21,33 @@ const ResourceItem = ( {
|
|
|
21
21
|
} ) => {
|
|
22
22
|
return (
|
|
23
23
|
<Flex
|
|
24
|
-
sx={{
|
|
24
|
+
sx={ {
|
|
25
25
|
alignItems: 'center',
|
|
26
26
|
gap: 3,
|
|
27
|
-
}}
|
|
27
|
+
} }
|
|
28
28
|
>
|
|
29
|
-
{icon}
|
|
30
|
-
<Box sx={{ flex: '1 1 auto' }}>{children}</Box>
|
|
29
|
+
{ icon }
|
|
30
|
+
<Box sx={ { flex: '1 1 auto' } }>{ children }</Box>
|
|
31
31
|
<Flex
|
|
32
|
-
sx={{
|
|
32
|
+
sx={ {
|
|
33
33
|
flex: '0 0 auto',
|
|
34
34
|
alignItems: 'center',
|
|
35
35
|
gap: 3,
|
|
36
|
-
}}
|
|
36
|
+
} }
|
|
37
37
|
>
|
|
38
38
|
<Time
|
|
39
39
|
className="time"
|
|
40
|
-
relativeTime={relativeTime}
|
|
41
|
-
timeOnly={timeOnly}
|
|
42
|
-
time={item[ dateKey ]}
|
|
43
|
-
sx={{ color: 'muted', mb: 0, textAlign: 'right', flex: '0 0 auto' }}
|
|
40
|
+
relativeTime={ relativeTime }
|
|
41
|
+
timeOnly={ timeOnly }
|
|
42
|
+
time={ item[ dateKey ] }
|
|
43
|
+
sx={ { color: 'muted', mb: 0, textAlign: 'right', flex: '0 0 auto' } }
|
|
44
44
|
/>
|
|
45
|
-
{renderActions && (
|
|
46
|
-
<Flex className="actions" sx={{ alignItems: 'center', gap: 3 }}>
|
|
47
|
-
<Box sx={{ width: 4, height: 4, borderRadius: 4, bg: 'border' }} />
|
|
48
|
-
{renderActions( item )}
|
|
45
|
+
{ renderActions && (
|
|
46
|
+
<Flex className="actions" sx={ { alignItems: 'center', gap: 3 } }>
|
|
47
|
+
<Box sx={ { width: 4, height: 4, borderRadius: 4, bg: 'border' } } />
|
|
48
|
+
{ renderActions( item ) }
|
|
49
49
|
</Flex>
|
|
50
|
-
)}
|
|
50
|
+
) }
|
|
51
51
|
</Flex>
|
|
52
52
|
</Flex>
|
|
53
53
|
);
|
|
@@ -4,6 +4,7 @@
|
|
|
4
4
|
* External dependencies
|
|
5
5
|
*/
|
|
6
6
|
import PropTypes from 'prop-types';
|
|
7
|
+
import { useMemo } from 'react';
|
|
7
8
|
|
|
8
9
|
/**
|
|
9
10
|
* Internal dependencies
|
|
@@ -29,15 +30,15 @@ const formatDate = date => {
|
|
|
29
30
|
const StyledListItem = props => (
|
|
30
31
|
<Box
|
|
31
32
|
as="li"
|
|
32
|
-
sx={{
|
|
33
|
+
sx={ {
|
|
33
34
|
py: 2,
|
|
34
35
|
borderBottom: '1px solid',
|
|
35
36
|
borderColor: 'border',
|
|
36
37
|
listStyleType: 'none',
|
|
37
38
|
margin: 0,
|
|
38
39
|
px: 0,
|
|
39
|
-
}}
|
|
40
|
-
{...props}
|
|
40
|
+
} }
|
|
41
|
+
{ ...props }
|
|
41
42
|
/>
|
|
42
43
|
);
|
|
43
44
|
|
|
@@ -56,31 +57,42 @@ const ResourceList = ( { groupedByDay = false, items, renderItem, dateKey } ) =>
|
|
|
56
57
|
}
|
|
57
58
|
|
|
58
59
|
const renderItemList = itemsList =>
|
|
59
|
-
itemsList.map( ( item, index ) =>
|
|
60
|
+
itemsList.map( ( item, index ) => (
|
|
61
|
+
<StyledListItem key={ index }>{ renderItem( item ) }</StyledListItem>
|
|
62
|
+
) );
|
|
60
63
|
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
<Box sx={{ mb: 4 }} key={index}>
|
|
66
|
-
<Heading variant="h4" as="h4" sx={{ mb: 3 }}>
|
|
67
|
-
{groupName}
|
|
64
|
+
const renderGoupedItems = () =>
|
|
65
|
+
useMemo(
|
|
66
|
+
() =>
|
|
67
|
+
Object.keys( groupedItems ).map( ( groupName, index ) => (
|
|
68
|
+
<Box sx={ { mb: 4 } } key={ index } as="li">
|
|
69
|
+
<Heading variant="h4" as="h4" sx={ { mb: 3 } }>
|
|
70
|
+
{ groupName }
|
|
68
71
|
</Heading>
|
|
69
72
|
<Box
|
|
70
73
|
as="ul"
|
|
71
|
-
sx={{
|
|
74
|
+
sx={ {
|
|
72
75
|
listStyleType: 'none',
|
|
73
76
|
m: 0,
|
|
74
77
|
p: 0,
|
|
75
78
|
borderTop: '1px solid',
|
|
76
79
|
borderColor: 'border',
|
|
77
|
-
}}
|
|
80
|
+
} }
|
|
78
81
|
>
|
|
79
|
-
{renderItemList( groupedItems[ groupName ] )}
|
|
82
|
+
{ renderItemList( groupedItems[ groupName ] ) }
|
|
80
83
|
</Box>
|
|
81
84
|
</Box>
|
|
82
|
-
) )
|
|
83
|
-
|
|
85
|
+
) ),
|
|
86
|
+
[ groupedItems ]
|
|
87
|
+
);
|
|
88
|
+
|
|
89
|
+
return (
|
|
90
|
+
<Box
|
|
91
|
+
as="ul"
|
|
92
|
+
sx={ { listStyleType: 'none', m: 0, p: 0 } }
|
|
93
|
+
className="vip-resource-list-component"
|
|
94
|
+
>
|
|
95
|
+
{ groupedByDay ? renderGoupedItems( groupedItems ) : renderItemList( items ) }
|
|
84
96
|
</Box>
|
|
85
97
|
);
|
|
86
98
|
};
|
|
@@ -56,62 +56,65 @@ const logs = [
|
|
|
56
56
|
];
|
|
57
57
|
|
|
58
58
|
export const Grouped = () => (
|
|
59
|
-
<Box sx={{ p: 5, pt: 2 }}>
|
|
60
|
-
<Heading sx={{ mb: 2 }}>Audit Log</Heading>
|
|
61
|
-
<Text sx={{ mb: 4 }}>A live trail of system and human events.</Text>
|
|
59
|
+
<Box sx={ { p: 5, pt: 2 } }>
|
|
60
|
+
<Heading sx={ { mb: 2 } }>Audit Log</Heading>
|
|
61
|
+
<Text sx={ { mb: 4 } }>A live trail of system and human events.</Text>
|
|
62
62
|
<ResourceList
|
|
63
|
-
items={logs}
|
|
63
|
+
items={ logs }
|
|
64
64
|
dateKey="date"
|
|
65
|
-
groupedByDay={true}
|
|
66
|
-
renderItem={item => (
|
|
65
|
+
groupedByDay={ true }
|
|
66
|
+
renderItem={ item => (
|
|
67
67
|
<ResourceItem
|
|
68
|
-
item={item}
|
|
69
|
-
icon={<BiGlobe sx={{ color: 'red' }} />}
|
|
70
|
-
dateKey={'date'}
|
|
71
|
-
relativeTime={true}
|
|
72
|
-
timeOnly={true}
|
|
68
|
+
item={ item }
|
|
69
|
+
icon={ <BiGlobe sx={ { color: 'red' } } /> }
|
|
70
|
+
dateKey={ 'date' }
|
|
71
|
+
relativeTime={ true }
|
|
72
|
+
timeOnly={ true }
|
|
73
73
|
>
|
|
74
|
-
<Flex sx={{ alignItems: 'center', gap: 3 }}>
|
|
74
|
+
<Flex sx={ { alignItems: 'center', gap: 3 } }>
|
|
75
75
|
<Avatar
|
|
76
|
-
name={item.actor}
|
|
76
|
+
name={ item.actor }
|
|
77
77
|
src="https://uifaces.co/our-content/donated/1H_7AxP0.jpg"
|
|
78
|
-
size={16}
|
|
78
|
+
size={ 16 }
|
|
79
79
|
/>
|
|
80
|
-
<Heading variant="h4" as="p" sx={{ mb: 0, fontWeight: 'normal' }}>
|
|
81
|
-
{item.actor}{' '}
|
|
82
|
-
<Text as="span" sx={{ color: 'muted', mb: 0 }}>
|
|
83
|
-
{item.action}
|
|
84
|
-
</Text>{' '}
|
|
85
|
-
{item.object}
|
|
80
|
+
<Heading variant="h4" as="p" sx={ { mb: 0, fontWeight: 'normal' } }>
|
|
81
|
+
{ item.actor }{ ' ' }
|
|
82
|
+
<Text as="span" sx={ { color: 'muted', mb: 0 } }>
|
|
83
|
+
{ item.action }
|
|
84
|
+
</Text>{ ' ' }
|
|
85
|
+
{ item.object }
|
|
86
86
|
</Heading>
|
|
87
87
|
</Flex>
|
|
88
|
-
{item.showObject && (
|
|
88
|
+
{ item.showObject && (
|
|
89
89
|
<Box
|
|
90
90
|
variant="indent"
|
|
91
|
-
sx={{ mt: 2, display: 'flex', flexWrap: 'wrap', gap: 3, alignItems: 'center' }}
|
|
91
|
+
sx={ { mt: 2, display: 'flex', flexWrap: 'wrap', gap: 3, alignItems: 'center' } }
|
|
92
92
|
>
|
|
93
|
-
<Heading variant="h5" as="div" sx={{ mb: 0 }}>
|
|
94
|
-
Merge pull request{' '}
|
|
95
|
-
<Text as="span" sx={{ color: 'muted' }}>
|
|
93
|
+
<Heading variant="h5" as="div" sx={ { mb: 0 } }>
|
|
94
|
+
Merge pull request{ ' ' }
|
|
95
|
+
<Text as="span" sx={ { color: 'muted' } }>
|
|
96
96
|
#443
|
|
97
97
|
</Text>
|
|
98
98
|
</Heading>
|
|
99
|
-
<Text
|
|
99
|
+
<Text
|
|
100
|
+
as="div"
|
|
101
|
+
sx={ { mb: 0, fontSize: 1, display: 'flex', alignItems: 'center', gap: 1 } }
|
|
102
|
+
>
|
|
100
103
|
<Avatar
|
|
101
|
-
name={item.actor}
|
|
104
|
+
name={ item.actor }
|
|
102
105
|
src="https://uifaces.co/our-content/donated/n4Ngwvi7.jpg"
|
|
103
|
-
size={16}
|
|
106
|
+
size={ 16 }
|
|
104
107
|
/>
|
|
105
|
-
{item.actor}
|
|
108
|
+
{ item.actor }
|
|
106
109
|
</Text>
|
|
107
|
-
<Text sx={{ mb: 0, fontSize: 1, display: 'flex', alignItems: 'center', gap: 1 }}>
|
|
108
|
-
<BiCheckCircle size={16} />
|
|
110
|
+
<Text sx={ { mb: 0, fontSize: 1, display: 'flex', alignItems: 'center', gap: 1 } }>
|
|
111
|
+
<BiCheckCircle size={ 16 } />
|
|
109
112
|
Deployed in 31s
|
|
110
113
|
</Text>
|
|
111
114
|
</Box>
|
|
112
|
-
)}
|
|
115
|
+
) }
|
|
113
116
|
</ResourceItem>
|
|
114
|
-
)}
|
|
117
|
+
) }
|
|
115
118
|
/>
|
|
116
119
|
</Box>
|
|
117
120
|
);
|
|
@@ -218,83 +221,86 @@ const deploys = [
|
|
|
218
221
|
];
|
|
219
222
|
|
|
220
223
|
export const Relative = () => (
|
|
221
|
-
<Box sx={{ p: 5, pt: 2 }}>
|
|
222
|
-
<Heading sx={{ mb: 2 }}>Deploys</Heading>
|
|
223
|
-
<Text sx={{ mb: 4 }}>View and manage application deployments.</Text>
|
|
224
|
-
<Card variant="indent" sx={{ mb: 4, display: 'flex', flexDirection: 'row-reverse', gap: 1 }}>
|
|
225
|
-
{deploys.map( ( deploy, index ) => (
|
|
224
|
+
<Box sx={ { p: 5, pt: 2 } }>
|
|
225
|
+
<Heading sx={ { mb: 2 } }>Deploys</Heading>
|
|
226
|
+
<Text sx={ { mb: 4 } }>View and manage application deployments.</Text>
|
|
227
|
+
<Card variant="indent" sx={ { mb: 4, display: 'flex', flexDirection: 'row-reverse', gap: 1 } }>
|
|
228
|
+
{ deploys.map( ( deploy, index ) => (
|
|
226
229
|
<Box
|
|
227
|
-
key={index}
|
|
228
|
-
sx={{
|
|
230
|
+
key={ index }
|
|
231
|
+
sx={ {
|
|
229
232
|
flex: '1 1 auto',
|
|
230
233
|
width: 10,
|
|
231
234
|
height: 4,
|
|
232
235
|
backgroundColor: deploy.status === 'running' ? 'blue.50' : 'green.50',
|
|
233
236
|
borderRadius: 1,
|
|
234
|
-
}}
|
|
237
|
+
} }
|
|
235
238
|
></Box>
|
|
236
|
-
) )}
|
|
239
|
+
) ) }
|
|
237
240
|
</Card>
|
|
238
241
|
<ResourceList
|
|
239
|
-
items={deploys}
|
|
242
|
+
items={ deploys }
|
|
240
243
|
dateKey="date"
|
|
241
|
-
groupedByDay={false}
|
|
242
|
-
renderItem={item => (
|
|
244
|
+
groupedByDay={ false }
|
|
245
|
+
renderItem={ item => (
|
|
243
246
|
<ResourceItem
|
|
244
|
-
item={item}
|
|
245
|
-
dateKey={'date'}
|
|
246
|
-
relativeTime={true}
|
|
247
|
-
timeOnly={true}
|
|
248
|
-
renderActions={() => (
|
|
249
|
-
<Flex sx={{ alignItems: 'center' }}>
|
|
250
|
-
<Button variant="secondary" sx={{ fontSize: 1 }}>
|
|
247
|
+
item={ item }
|
|
248
|
+
dateKey={ 'date' }
|
|
249
|
+
relativeTime={ true }
|
|
250
|
+
timeOnly={ true }
|
|
251
|
+
renderActions={ () => (
|
|
252
|
+
<Flex sx={ { alignItems: 'center' } }>
|
|
253
|
+
<Button variant="secondary" sx={ { fontSize: 1 } }>
|
|
251
254
|
Rollback
|
|
252
255
|
</Button>
|
|
253
256
|
</Flex>
|
|
254
|
-
)}
|
|
257
|
+
) }
|
|
255
258
|
>
|
|
256
|
-
<Flex sx={{ alignItems: 'center', gap: 4 }}>
|
|
257
|
-
<Flex sx={{ alignItems: 'center', gap: 3, minWidth: 300 }}>
|
|
258
|
-
<Heading variant="h4" as="p" sx={{ mb: 0, fontWeight: 'normal' }}>
|
|
259
|
-
{item.title}{' '}
|
|
260
|
-
<Text as="span" sx={{ color: 'muted', mb: 0 }}>
|
|
261
|
-
{item.id}
|
|
259
|
+
<Flex sx={ { alignItems: 'center', gap: 4 } }>
|
|
260
|
+
<Flex sx={ { alignItems: 'center', gap: 3, minWidth: 300 } }>
|
|
261
|
+
<Heading variant="h4" as="p" sx={ { mb: 0, fontWeight: 'normal' } }>
|
|
262
|
+
{ item.title }{ ' ' }
|
|
263
|
+
<Text as="span" sx={ { color: 'muted', mb: 0 } }>
|
|
264
|
+
{ item.id }
|
|
262
265
|
</Text>
|
|
263
266
|
</Heading>
|
|
264
|
-
{item.status === 'running' && <Badge sx={{ mb: 0 }}>Running</Badge>}
|
|
267
|
+
{ item.status === 'running' && <Badge sx={ { mb: 0 } }>Running</Badge> }
|
|
265
268
|
</Flex>
|
|
266
|
-
<Text
|
|
269
|
+
<Text
|
|
270
|
+
as="div"
|
|
271
|
+
sx={ { mb: 0, color: 'muted', display: 'flex', alignItems: 'center', gap: 2 } }
|
|
272
|
+
>
|
|
267
273
|
<Avatar
|
|
268
|
-
name={item.author}
|
|
269
|
-
size={16}
|
|
274
|
+
name={ item.author }
|
|
275
|
+
size={ 16 }
|
|
270
276
|
src="https://randomuser.me/api/portraits/men/46.jpg"
|
|
271
277
|
/>
|
|
272
|
-
{item.author}
|
|
278
|
+
{ item.author }
|
|
273
279
|
</Text>
|
|
274
280
|
<Text
|
|
275
|
-
sx={{
|
|
281
|
+
sx={ {
|
|
276
282
|
mb: 0,
|
|
277
283
|
color: item.status === 'running' ? 'blue.60' : 'muted',
|
|
278
284
|
display: 'flex',
|
|
279
285
|
alignItems: 'center',
|
|
280
286
|
gap: 1,
|
|
281
|
-
}}
|
|
287
|
+
} }
|
|
282
288
|
>
|
|
283
|
-
{item.status === 'running' ? (
|
|
289
|
+
{ item.status === 'running' ? (
|
|
284
290
|
<React.Fragment>
|
|
285
|
-
<BiRevision size={16} />
|
|
291
|
+
<BiRevision size={ 16 } />
|
|
286
292
|
Running for 31s
|
|
287
293
|
</React.Fragment>
|
|
288
294
|
) : (
|
|
289
295
|
<React.Fragment>
|
|
290
|
-
<BiCheckCircle size={16} />
|
|
296
|
+
<BiCheckCircle size={ 16 } />
|
|
291
297
|
Deployed in 31s
|
|
292
298
|
</React.Fragment>
|
|
293
|
-
)}
|
|
299
|
+
) }
|
|
294
300
|
</Text>
|
|
295
301
|
</Flex>
|
|
296
302
|
</ResourceItem>
|
|
297
|
-
)}
|
|
303
|
+
) }
|
|
298
304
|
/>
|
|
299
305
|
</Box>
|
|
300
306
|
);
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* External dependencies
|
|
3
|
+
*/
|
|
4
|
+
import { render, screen } from '@testing-library/react';
|
|
5
|
+
import '@testing-library/jest-dom';
|
|
6
|
+
/**
|
|
7
|
+
* Internal dependencies
|
|
8
|
+
*/
|
|
9
|
+
import ScreenReaderText from './ScreenReaderText';
|
|
10
|
+
|
|
11
|
+
describe( '<ScreenReaderText />', () => {
|
|
12
|
+
it( 'should render correctly', () => {
|
|
13
|
+
const props = {};
|
|
14
|
+
const text = 'Hello there';
|
|
15
|
+
const { container } = render( <ScreenReaderText { ...props }>{ text }</ScreenReaderText> );
|
|
16
|
+
// we're using the querySelector to ensure the class is rendered since it affects the A11Y
|
|
17
|
+
// in case it's removed it could compromise the A11Y of the components using it.
|
|
18
|
+
expect( container.querySelector( '.screen-reader-text' ) ).toBeInTheDocument();
|
|
19
|
+
|
|
20
|
+
expect( screen.queryByText( text ) ).toBeInTheDocument();
|
|
21
|
+
} );
|
|
22
|
+
} );
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
/** @jsxImportSource theme-ui */
|
|
2
|
+
/**
|
|
3
|
+
* External dependencies
|
|
4
|
+
*/
|
|
5
|
+
|
|
6
|
+
import PropTypes from 'prop-types';
|
|
7
|
+
|
|
8
|
+
/**
|
|
9
|
+
* Internal dependencies
|
|
10
|
+
*/
|
|
11
|
+
|
|
12
|
+
export default function ScreenReaderText( props ) {
|
|
13
|
+
return (
|
|
14
|
+
<span
|
|
15
|
+
className="screen-reader-text"
|
|
16
|
+
sx={ {
|
|
17
|
+
border: 'none',
|
|
18
|
+
clip: 'rect(1px, 1px, 1px, 1px)',
|
|
19
|
+
clipPath: 'inset(50%)',
|
|
20
|
+
height: '1px',
|
|
21
|
+
margin: '-1px',
|
|
22
|
+
overflow: 'hidden',
|
|
23
|
+
padding: '0',
|
|
24
|
+
position: 'absolute',
|
|
25
|
+
width: '1px',
|
|
26
|
+
wordWrap: 'normal !important',
|
|
27
|
+
} }
|
|
28
|
+
{ ...props }
|
|
29
|
+
>
|
|
30
|
+
{ props.children }
|
|
31
|
+
</span>
|
|
32
|
+
);
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
/**
|
|
36
|
+
* propTypes
|
|
37
|
+
*/
|
|
38
|
+
ScreenReaderText.propTypes = {
|
|
39
|
+
children: PropTypes.node.isRequired,
|
|
40
|
+
};
|
|
@@ -9,13 +9,13 @@ import classNames from 'classnames';
|
|
|
9
9
|
|
|
10
10
|
const Spinner = ( { sx, className = null, ...props } ) => (
|
|
11
11
|
<ThemeSpinner
|
|
12
|
-
strokeWidth={2}
|
|
13
|
-
sx={{
|
|
12
|
+
strokeWidth={ 2 }
|
|
13
|
+
sx={ {
|
|
14
14
|
fill: 'none',
|
|
15
15
|
color: 'primary',
|
|
16
|
-
}}
|
|
16
|
+
} }
|
|
17
17
|
className={ classNames( 'vip-spinner-component', className ) }
|
|
18
|
-
{...props}
|
|
18
|
+
{ ...props }
|
|
19
19
|
/>
|
|
20
20
|
);
|
|
21
21
|
|
|
@@ -4,20 +4,21 @@
|
|
|
4
4
|
* External dependencies
|
|
5
5
|
*/
|
|
6
6
|
import PropTypes from 'prop-types';
|
|
7
|
+
import classNames from 'classnames';
|
|
7
8
|
|
|
8
|
-
const Table = ( { sx, ...props } ) => (
|
|
9
|
-
<
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
</div>
|
|
9
|
+
const Table = ( { sx, className, ...props } ) => (
|
|
10
|
+
<table
|
|
11
|
+
sx={ { width: '100%', minWidth: 1024, ...sx } }
|
|
12
|
+
cellPadding={ 0 }
|
|
13
|
+
cellSpacing={ 0 }
|
|
14
|
+
className={ classNames( 'vip-table-component', className ) }
|
|
15
|
+
{ ...props }
|
|
16
|
+
/>
|
|
17
17
|
);
|
|
18
18
|
|
|
19
19
|
Table.propTypes = {
|
|
20
20
|
sx: PropTypes.object,
|
|
21
|
+
className: PropTypes.any,
|
|
21
22
|
};
|
|
22
23
|
|
|
23
24
|
export { Table };
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Internal dependencies
|
|
3
3
|
*/
|
|
4
|
-
import { Table, TableRow, Flex, Heading, Text } from '..';
|
|
4
|
+
import { Table, TableRow, Flex, Heading, Text, TableCell } from '..';
|
|
5
5
|
|
|
6
6
|
export default {
|
|
7
7
|
title: 'Table',
|
|
@@ -11,29 +11,59 @@ export default {
|
|
|
11
11
|
export const Default = () => (
|
|
12
12
|
<Table>
|
|
13
13
|
<thead>
|
|
14
|
-
<TableRow head cells={[ 'User', 'Command', 'Duration', 'Time' ]} />
|
|
14
|
+
<TableRow head cells={ [ 'User', 'Command', 'Duration', 'Time' ] } />
|
|
15
15
|
</thead>
|
|
16
16
|
<tbody>
|
|
17
17
|
<TableRow
|
|
18
|
-
cells={[
|
|
19
|
-
<Flex sx={{ alignItems: 'center' }} key="user">
|
|
20
|
-
<Heading variant="h4" sx={{ mb: 0 }}>
|
|
18
|
+
cells={ [
|
|
19
|
+
<Flex sx={ { alignItems: 'center' } } key="user">
|
|
20
|
+
<Heading variant="h4" sx={ { mb: 0 } }>
|
|
21
21
|
kwaves
|
|
22
22
|
</Heading>
|
|
23
23
|
</Flex>,
|
|
24
24
|
<Heading
|
|
25
25
|
variant="h4"
|
|
26
26
|
key="command"
|
|
27
|
-
sx={{ mb: 0, display: 'flex', alignItems: 'center' }}
|
|
27
|
+
sx={ { mb: 0, display: 'flex', alignItems: 'center' } }
|
|
28
28
|
>
|
|
29
29
|
wp rewrite flush
|
|
30
30
|
</Heading>,
|
|
31
|
-
<Text sx={{ mb: 0 }} key="duration">
|
|
32
|
-
|
|
31
|
+
<Text sx={ { mb: 0 } } key="duration">
|
|
32
|
+
2s
|
|
33
|
+
</Text>,
|
|
34
|
+
<Text sx={ { mb: 0, color: 'muted' } } key="time">
|
|
33
35
|
11th Mar 2020, 16:49:22
|
|
34
36
|
</Text>,
|
|
35
|
-
]}
|
|
37
|
+
] }
|
|
36
38
|
/>
|
|
39
|
+
<TableRow>
|
|
40
|
+
<TableCell sx={ { backgroundColor: 'lightgray' } }>
|
|
41
|
+
<Flex sx={ { alignItems: 'center' } } key="user">
|
|
42
|
+
<Heading variant="h4" sx={ { mb: 0 } }>
|
|
43
|
+
simon
|
|
44
|
+
</Heading>
|
|
45
|
+
</Flex>
|
|
46
|
+
</TableCell>
|
|
47
|
+
<TableCell>
|
|
48
|
+
<Heading
|
|
49
|
+
variant="h4"
|
|
50
|
+
key="command"
|
|
51
|
+
sx={ { mb: 0, display: 'flex', alignItems: 'center' } }
|
|
52
|
+
>
|
|
53
|
+
wp posts list
|
|
54
|
+
</Heading>
|
|
55
|
+
</TableCell>
|
|
56
|
+
<TableCell>
|
|
57
|
+
<Text sx={ { mb: 0 } } key="duration">
|
|
58
|
+
3s
|
|
59
|
+
</Text>
|
|
60
|
+
</TableCell>
|
|
61
|
+
<TableCell>
|
|
62
|
+
<Text sx={ { mb: 0, color: 'muted' } } key="time">
|
|
63
|
+
3rd May 2021, 13:22:13
|
|
64
|
+
</Text>
|
|
65
|
+
</TableCell>
|
|
66
|
+
</TableRow>
|
|
37
67
|
</tbody>
|
|
38
68
|
</Table>
|
|
39
69
|
);
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
/** @jsxImportSource theme-ui */
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* External dependencies
|
|
5
|
+
*/
|
|
6
|
+
|
|
7
|
+
import PropTypes from 'prop-types';
|
|
8
|
+
|
|
9
|
+
/**
|
|
10
|
+
* Internal dependencies
|
|
11
|
+
*/
|
|
12
|
+
import { Heading, Box } from '../';
|
|
13
|
+
|
|
14
|
+
const TableCell = ( { head, children, ...rest } ) => {
|
|
15
|
+
const sx = {
|
|
16
|
+
borderBottom: '1px solid',
|
|
17
|
+
borderTop: head ? '1px solid' : 'none',
|
|
18
|
+
// borderColor should come after borderTop so it can override it
|
|
19
|
+
borderColor: 'border',
|
|
20
|
+
fontWeight: 'body',
|
|
21
|
+
px: 3,
|
|
22
|
+
py: 2,
|
|
23
|
+
textAlign: 'left',
|
|
24
|
+
'&:first-of-type': {
|
|
25
|
+
pl: 5,
|
|
26
|
+
},
|
|
27
|
+
...rest.sx,
|
|
28
|
+
};
|
|
29
|
+
|
|
30
|
+
return (
|
|
31
|
+
<Box as={ head ? 'th' : 'td' } { ...{ ...rest, sx } }>
|
|
32
|
+
{ head ? (
|
|
33
|
+
<Heading variant="caps" as="div" sx={ { mb: 0 } }>
|
|
34
|
+
{ children }
|
|
35
|
+
</Heading>
|
|
36
|
+
) : (
|
|
37
|
+
children
|
|
38
|
+
) }
|
|
39
|
+
</Box>
|
|
40
|
+
);
|
|
41
|
+
};
|
|
42
|
+
|
|
43
|
+
TableCell.propTypes = {
|
|
44
|
+
children: PropTypes.node,
|
|
45
|
+
head: PropTypes.bool,
|
|
46
|
+
};
|
|
47
|
+
|
|
48
|
+
export { TableCell };
|