@automattic/vip-design-system 0.10.3 → 0.12.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/.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 +2 -1
- package/.storybook/preview.js +5 -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/Form/Toggle.js +45 -72
- package/build/system/Form/Toggle.stories.js +63 -0
- package/build/system/Form/Toggle.test.js +55 -0
- 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.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 +10 -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 +37 -65
- package/src/system/Form/Toggle.stories.jsx +42 -0
- package/src/system/Form/Toggle.test.js +23 -0
- 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 +5 -5
- 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/Form/MultiSelect.js +0 -38
- package/build/system/UsageChart/UsageChart.js +0 -60
- package/build/system/UsageChart/UsageChart.stories.js +0 -20
- package/build/system/UsageChart/index.js +0 -7
|
@@ -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
|
|
|
@@ -8,11 +8,11 @@ import classNames from 'classnames';
|
|
|
8
8
|
|
|
9
9
|
const Table = ( { sx, className, ...props } ) => (
|
|
10
10
|
<table
|
|
11
|
-
sx={{ width: '100%', minWidth: 1024, ...sx }}
|
|
12
|
-
cellPadding={0}
|
|
13
|
-
cellSpacing={0}
|
|
14
|
-
className={classNames( 'vip-table-component', className )}
|
|
15
|
-
{...props}
|
|
11
|
+
sx={ { width: '100%', minWidth: 1024, ...sx } }
|
|
12
|
+
cellPadding={ 0 }
|
|
13
|
+
cellSpacing={ 0 }
|
|
14
|
+
className={ classNames( 'vip-table-component', className ) }
|
|
15
|
+
{ ...props }
|
|
16
16
|
/>
|
|
17
17
|
);
|
|
18
18
|
|
|
@@ -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 };
|
|
@@ -9,9 +9,9 @@ import PropTypes from 'prop-types';
|
|
|
9
9
|
/**
|
|
10
10
|
* Internal dependencies
|
|
11
11
|
*/
|
|
12
|
-
import {
|
|
12
|
+
import { TableCell } from './TableCell';
|
|
13
13
|
|
|
14
|
-
const TableRow = ( { onClick, head = false,
|
|
14
|
+
const TableRow = ( { onClick, head = false, cells = [], children } ) => {
|
|
15
15
|
const hoverStyles = onClick
|
|
16
16
|
? { cursor: 'pointer', '&:hover': { bg: 'hover', borderRadius: 2 } }
|
|
17
17
|
: {};
|
|
@@ -30,58 +30,21 @@ const TableRow = ( { onClick, head = false, rowHead = false, cells } ) => {
|
|
|
30
30
|
onKeyDown={ handleKeyPress }
|
|
31
31
|
>
|
|
32
32
|
{ cells.map( ( cell, index ) => (
|
|
33
|
-
<TableCell key={ index }
|
|
33
|
+
<TableCell key={ index } head={ head }>
|
|
34
|
+
{ cell }
|
|
35
|
+
</TableCell>
|
|
34
36
|
) ) }
|
|
35
|
-
</tr>
|
|
36
|
-
);
|
|
37
|
-
};
|
|
38
37
|
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
if ( head ) {
|
|
42
|
-
scope = 'col';
|
|
43
|
-
} else if ( isRowHead ) {
|
|
44
|
-
scope = 'row';
|
|
45
|
-
}
|
|
46
|
-
return (
|
|
47
|
-
<Box
|
|
48
|
-
as={ isRowHead || head ? 'th' : 'td' }
|
|
49
|
-
scope={ scope }
|
|
50
|
-
sx={ {
|
|
51
|
-
px: 3,
|
|
52
|
-
py: 2,
|
|
53
|
-
textAlign: 'left',
|
|
54
|
-
borderBottom: '1px solid',
|
|
55
|
-
fontWeight: 'body',
|
|
56
|
-
borderTop: head ? '1px solid' : 'none',
|
|
57
|
-
borderColor: 'border',
|
|
58
|
-
'&:first-of-type': {
|
|
59
|
-
pl: 5,
|
|
60
|
-
},
|
|
61
|
-
} }
|
|
62
|
-
>
|
|
63
|
-
{ head ? (
|
|
64
|
-
<Heading variant="caps" as="div" sx={ { mb: 0 } }>
|
|
65
|
-
{ cell }
|
|
66
|
-
</Heading>
|
|
67
|
-
) : (
|
|
68
|
-
cell
|
|
69
|
-
) }
|
|
70
|
-
</Box>
|
|
38
|
+
{ children }
|
|
39
|
+
</tr>
|
|
71
40
|
);
|
|
72
41
|
};
|
|
73
42
|
|
|
74
|
-
TableCell.propTypes = {
|
|
75
|
-
head: PropTypes.bool,
|
|
76
|
-
isRowHead: PropTypes.bool,
|
|
77
|
-
cell: PropTypes.node,
|
|
78
|
-
};
|
|
79
|
-
|
|
80
43
|
TableRow.propTypes = {
|
|
81
|
-
onClick: PropTypes.func,
|
|
82
|
-
head: PropTypes.bool,
|
|
83
44
|
cells: PropTypes.array,
|
|
84
|
-
|
|
45
|
+
children: PropTypes.node,
|
|
46
|
+
head: PropTypes.bool,
|
|
47
|
+
onClick: PropTypes.func,
|
|
85
48
|
};
|
|
86
49
|
|
|
87
50
|
export { TableRow };
|
package/src/system/Tabs/Tabs.js
CHANGED
|
@@ -14,15 +14,15 @@ import { Flex } from '..';
|
|
|
14
14
|
const Tabs = ( { className = null, sx, ...props } ) => (
|
|
15
15
|
<Flex
|
|
16
16
|
className={ classNames( 'vip-tabs-component', className ) }
|
|
17
|
-
sx={{
|
|
17
|
+
sx={ {
|
|
18
18
|
borderBottom: '1px solid',
|
|
19
19
|
borderColor: 'border',
|
|
20
20
|
listStyleType: 'none',
|
|
21
21
|
margin: 0,
|
|
22
22
|
padding: 0,
|
|
23
23
|
...sx,
|
|
24
|
-
}}
|
|
25
|
-
{...props}
|
|
24
|
+
} }
|
|
25
|
+
{ ...props }
|
|
26
26
|
/>
|
|
27
27
|
);
|
|
28
28
|
|
package/src/system/Tabs/index.js
CHANGED
package/src/system/Text/Text.js
CHANGED
|
@@ -10,13 +10,13 @@ import classNames from 'classnames';
|
|
|
10
10
|
const Text = ( { sx, className = null, ...props } ) => (
|
|
11
11
|
<ThemeText
|
|
12
12
|
as="p"
|
|
13
|
-
sx={{
|
|
13
|
+
sx={ {
|
|
14
14
|
lineHeight: 1.5,
|
|
15
15
|
marginBottom: 2,
|
|
16
16
|
...sx,
|
|
17
|
-
}}
|
|
17
|
+
} }
|
|
18
18
|
className={ classNames( 'vip-text-component', className ) }
|
|
19
|
-
{...props}
|
|
19
|
+
{ ...props }
|
|
20
20
|
/>
|
|
21
21
|
);
|
|
22
22
|
|
|
@@ -10,11 +10,9 @@ export default {
|
|
|
10
10
|
|
|
11
11
|
export const Default = () => (
|
|
12
12
|
<Text>
|
|
13
|
-
Apparently we had reached a great height in the atmosphere, for the sky
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
car seemed to float in the middle of an immense dark sphere, whose upper
|
|
18
|
-
half was strewn with silver.{' '}
|
|
13
|
+
Apparently we had reached a great height in the atmosphere, for the sky was a dead black, and
|
|
14
|
+
the stars had ceased to twinkle. By the same illusion which lifts the horizon of the sea to the
|
|
15
|
+
level of the spectator on a hillside, the sable cloud beneath was dished out, and the car seemed
|
|
16
|
+
to float in the middle of an immense dark sphere, whose upper half was strewn with silver.{ ' ' }
|
|
19
17
|
</Text>
|
|
20
18
|
);
|
package/src/system/Text/index.js
CHANGED
|
@@ -17,16 +17,12 @@ export const Default = () => (
|
|
|
17
17
|
<React.Fragment>
|
|
18
18
|
<Grid gap={ 2 } columns={ [ 2, '100px 300px' ] } sx={ { mb: '20px' } }>
|
|
19
19
|
<Time time="7pm" />
|
|
20
|
-
<Box>
|
|
21
|
-
It looks like everything is recovered now. You can forget about the last event.
|
|
22
|
-
</Box>
|
|
20
|
+
<Box>It looks like everything is recovered now. You can forget about the last event.</Box>
|
|
23
21
|
</Grid>
|
|
24
22
|
|
|
25
23
|
<Grid gap={ 2 } columns={ [ 2, '100px 200px' ] }>
|
|
26
24
|
<Time time="6pm" />
|
|
27
|
-
<Box>
|
|
28
|
-
At this particular moment in the day, something happened with your environment.
|
|
29
|
-
</Box>
|
|
25
|
+
<Box>At this particular moment in the day, something happened with your environment.</Box>
|
|
30
26
|
</Grid>
|
|
31
27
|
</React.Fragment>
|
|
32
28
|
);
|
package/src/system/Time/index.js
CHANGED
|
@@ -44,19 +44,19 @@ const Time = ( { time, relativeTime = false, timeOnly = false, className = null,
|
|
|
44
44
|
|
|
45
45
|
return (
|
|
46
46
|
<Text
|
|
47
|
-
title={time.toLocaleString( 'sv', { timeZoneName: 'short' } )}
|
|
48
|
-
datetime={time}
|
|
47
|
+
title={ time.toLocaleString( 'sv', { timeZoneName: 'short' } ) }
|
|
48
|
+
datetime={ time }
|
|
49
49
|
as="time"
|
|
50
50
|
className={ classNames( 'vip-time-component', className ) }
|
|
51
|
-
{...props}
|
|
51
|
+
{ ...props }
|
|
52
52
|
>
|
|
53
|
-
{formattedTime}
|
|
53
|
+
{ formattedTime }
|
|
54
54
|
</Text>
|
|
55
55
|
);
|
|
56
56
|
};
|
|
57
57
|
|
|
58
58
|
Time.propTypes = {
|
|
59
|
-
time: PropTypes.string,
|
|
59
|
+
time: PropTypes.oneOfType( [ PropTypes.string, PropTypes.instanceOf( Date ) ] ),
|
|
60
60
|
timeOnly: PropTypes.bool,
|
|
61
61
|
relativeTime: PropTypes.bool,
|
|
62
62
|
className: PropTypes.any,
|