@automattic/vip-design-system 2.6.1 → 2.7.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.
@@ -1,12 +1,20 @@
1
+ /** @jsxImportSource theme-ui */
1
2
  /// <reference types="react" />
2
3
  /**
3
4
  * External dependencies
4
5
  */
5
6
  import { Argument } from 'classnames';
6
7
  import { BoxProps } from 'theme-ui';
8
+ export declare enum CardVariant {
9
+ 'primary' = 0,
10
+ 'secondary' = 1,
11
+ 'indent' = 2
12
+ }
7
13
  export interface CardProps {
8
- variant?: string;
14
+ variant?: keyof typeof CardVariant;
9
15
  sx?: BoxProps['sx'];
10
16
  className?: Argument;
17
+ header?: React.ReactNode;
18
+ children?: React.ReactNode;
11
19
  }
12
20
  export declare const Card: import("react").ForwardRefExoticComponent<CardProps & BoxProps & import("react").RefAttributes<HTMLElement>>;
@@ -1,12 +1,13 @@
1
1
  "use strict";
2
2
 
3
3
  exports.__esModule = true;
4
- exports.Card = void 0;
4
+ exports.CardVariant = exports.Card = void 0;
5
5
  var _classnames = _interopRequireDefault(require("classnames"));
6
6
  var _react = require("react");
7
7
  var _ = require("..");
8
8
  var _jsxRuntime = require("theme-ui/jsx-runtime");
9
- var _excluded = ["variant", "sx", "className"];
9
+ var _excluded = ["variant", "header", "sx", "className", "children"];
10
+ /** @jsxImportSource theme-ui */
10
11
  /**
11
12
  * External dependencies
12
13
  */
@@ -16,20 +17,40 @@ var _excluded = ["variant", "sx", "className"];
16
17
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }
17
18
  function _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }
18
19
  function _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }
20
+ var CardVariant = exports.CardVariant = /*#__PURE__*/function (CardVariant) {
21
+ CardVariant[CardVariant["primary"] = 0] = "primary";
22
+ CardVariant[CardVariant["secondary"] = 1] = "secondary";
23
+ CardVariant[CardVariant["indent"] = 2] = "indent";
24
+ return CardVariant;
25
+ }({});
19
26
  var Card = exports.Card = /*#__PURE__*/(0, _react.forwardRef)(function (_ref, ref) {
20
27
  var _ref$variant = _ref.variant,
21
28
  variant = _ref$variant === void 0 ? 'primary' : _ref$variant,
29
+ header = _ref.header,
22
30
  _ref$sx = _ref.sx,
23
31
  sx = _ref$sx === void 0 ? {} : _ref$sx,
24
32
  className = _ref.className,
33
+ children = _ref.children,
25
34
  props = _objectWithoutPropertiesLoose(_ref, _excluded);
26
- return (0, _jsxRuntime.jsx)(_.Box, _extends({
35
+ return (0, _jsxRuntime.jsxs)(_.Box, _extends({
27
36
  ref: ref,
28
37
  sx: _extends({
29
38
  // pass variant prop to sx
30
39
  variant: "cards." + variant
31
40
  }, sx),
32
41
  className: (0, _classnames["default"])('vip-card-component', className)
33
- }, props));
42
+ }, props, {
43
+ children: [header && (0, _jsxRuntime.jsx)("div", {
44
+ sx: {
45
+ variant: "cards." + variant + ".header"
46
+ },
47
+ children: header
48
+ }), (0, _jsxRuntime.jsx)("div", {
49
+ sx: {
50
+ variant: "cards." + variant + ".children"
51
+ },
52
+ children: children
53
+ })]
54
+ }));
34
55
  });
35
56
  Card.displayName = 'Card';
@@ -5,3 +5,8 @@ declare const _default: {
5
5
  };
6
6
  export default _default;
7
7
  export declare const Default: () => import("react").JSX.Element;
8
+ export declare const WithHeader: () => import("react").JSX.Element;
9
+ export declare const DefaultSecondary: () => import("react").JSX.Element;
10
+ export declare const WithHeaderSecondary: () => import("react").JSX.Element;
11
+ export declare const DefaultIndent: () => import("react").JSX.Element;
12
+ export declare const WithHeaderIndent: () => import("react").JSX.Element;
@@ -1,7 +1,7 @@
1
1
  "use strict";
2
2
 
3
3
  exports.__esModule = true;
4
- exports["default"] = exports.Default = void 0;
4
+ exports["default"] = exports.WithHeaderSecondary = exports.WithHeaderIndent = exports.WithHeader = exports.DefaultSecondary = exports.DefaultIndent = exports.Default = void 0;
5
5
  var _ = require("..");
6
6
  var _jsxRuntime = require("theme-ui/jsx-runtime");
7
7
  /**
@@ -13,6 +13,38 @@ var _default = exports["default"] = {
13
13
  };
14
14
  var Default = exports.Default = function Default() {
15
15
  return (0, _jsxRuntime.jsx)(_.Card, {
16
- children: " Hello "
16
+ children: "Hello"
17
+ });
18
+ };
19
+ var WithHeader = exports.WithHeader = function WithHeader() {
20
+ return (0, _jsxRuntime.jsx)(_.Card, {
21
+ header: "Header",
22
+ children: "This is a card with a header."
23
+ });
24
+ };
25
+ var DefaultSecondary = exports.DefaultSecondary = function DefaultSecondary() {
26
+ return (0, _jsxRuntime.jsx)(_.Card, {
27
+ variant: "secondary",
28
+ children: "Hello"
29
+ });
30
+ };
31
+ var WithHeaderSecondary = exports.WithHeaderSecondary = function WithHeaderSecondary() {
32
+ return (0, _jsxRuntime.jsx)(_.Card, {
33
+ header: "Header",
34
+ variant: "secondary",
35
+ children: "This is a card with a header."
36
+ });
37
+ };
38
+ var DefaultIndent = exports.DefaultIndent = function DefaultIndent() {
39
+ return (0, _jsxRuntime.jsx)(_.Card, {
40
+ variant: "indent",
41
+ children: "Hello"
42
+ });
43
+ };
44
+ var WithHeaderIndent = exports.WithHeaderIndent = function WithHeaderIndent() {
45
+ return (0, _jsxRuntime.jsx)(_.Card, {
46
+ header: "Header",
47
+ variant: "indent",
48
+ children: "This is a card with a header."
17
49
  });
18
50
  };
@@ -61,4 +61,29 @@ describe('<Card />', function () {
61
61
  }
62
62
  }, _callee2);
63
63
  })));
64
+ it('renders the Card component with a header', /*#__PURE__*/_asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee3() {
65
+ var _render3, container;
66
+ return _regeneratorRuntime().wrap(function _callee3$(_context3) {
67
+ while (1) switch (_context3.prev = _context3.next) {
68
+ case 0:
69
+ _render3 = (0, _react.render)((0, _jsxRuntime.jsx)(_Card.Card, {
70
+ header: "Card Header",
71
+ children: "Card text"
72
+ })), container = _render3.container;
73
+ expect(_react.screen.getByText('Card Header')).toBeInTheDocument();
74
+ expect(_react.screen.getByText('Card text')).toBeInTheDocument();
75
+
76
+ // Check for accessibility issues
77
+ _context3.t0 = expect;
78
+ _context3.next = 6;
79
+ return (0, _jestAxe.axe)(container);
80
+ case 6:
81
+ _context3.t1 = _context3.sent;
82
+ (0, _context3.t0)(_context3.t1).toHaveNoViolations();
83
+ case 8:
84
+ case "end":
85
+ return _context3.stop();
86
+ }
87
+ }, _callee3);
88
+ })));
64
89
  });
@@ -33,29 +33,72 @@ declare namespace _default {
33
33
  }
34
34
  export namespace cards {
35
35
  namespace primary {
36
- let padding: number;
37
36
  let borderRadius: number;
38
37
  let backgroundColor: string;
39
38
  let boxShadow: string;
39
+ namespace header {
40
+ let backgroundColor_1: string;
41
+ export { backgroundColor_1 as backgroundColor };
42
+ export let borderTopLeftRadius: number;
43
+ export let borderTopRightRadius: number;
44
+ export let p: number;
45
+ export let fontWeight: string;
46
+ export let display: string;
47
+ }
48
+ namespace children {
49
+ let p_1: number;
50
+ export { p_1 as p };
51
+ }
40
52
  }
41
53
  namespace secondary {
42
54
  let borderRadius_1: number;
43
55
  export { borderRadius_1 as borderRadius };
44
- export let p: number;
45
56
  let boxShadow_1: string;
46
57
  export { boxShadow_1 as boxShadow };
47
58
  export let border: string;
48
59
  export let borderColor: string;
60
+ export namespace header_1 {
61
+ let backgroundColor_2: string;
62
+ export { backgroundColor_2 as backgroundColor };
63
+ let borderTopLeftRadius_1: number;
64
+ export { borderTopLeftRadius_1 as borderTopLeftRadius };
65
+ let borderTopRightRadius_1: number;
66
+ export { borderTopRightRadius_1 as borderTopRightRadius };
67
+ let p_2: number;
68
+ export { p_2 as p };
69
+ let fontWeight_1: string;
70
+ export { fontWeight_1 as fontWeight };
71
+ let display_1: string;
72
+ export { display_1 as display };
73
+ }
74
+ export { header_1 as header };
75
+ export namespace children_1 {
76
+ let p_3: number;
77
+ export { p_3 as p };
78
+ }
79
+ export { children_1 as children };
49
80
  }
50
81
  namespace indent {
51
82
  let borderRadius_2: number;
52
83
  export { borderRadius_2 as borderRadius };
53
- let p_1: number;
54
- export { p_1 as p };
55
84
  let boxShadow_2: string;
56
85
  export { boxShadow_2 as boxShadow };
57
- let backgroundColor_1: string;
58
- export { backgroundColor_1 as backgroundColor };
86
+ let backgroundColor_3: string;
87
+ export { backgroundColor_3 as backgroundColor };
88
+ export namespace header_2 {
89
+ let display_2: string;
90
+ export { display_2 as display };
91
+ let fontWeight_2: string;
92
+ export { fontWeight_2 as fontWeight };
93
+ let p_4: number;
94
+ export { p_4 as p };
95
+ }
96
+ export { header_2 as header };
97
+ export namespace children_2 {
98
+ let p_5: number;
99
+ export { p_5 as p };
100
+ }
101
+ export { children_2 as children };
59
102
  }
60
103
  }
61
104
  export namespace buttons {
@@ -112,7 +155,7 @@ declare namespace _default {
112
155
  borderColor: string;
113
156
  };
114
157
  };
115
- export let display: {
158
+ let display_3: {
116
159
  variant: string;
117
160
  color: string;
118
161
  bg: string;
@@ -125,6 +168,7 @@ declare namespace _default {
125
168
  borderColor: string;
126
169
  };
127
170
  };
171
+ export { display_3 as display };
128
172
  export let ghost: {
129
173
  variant: string;
130
174
  color: string;
@@ -1081,8 +1125,8 @@ declare namespace _default {
1081
1125
  export let top: string;
1082
1126
  export let left: string;
1083
1127
  export let maxWidth: string;
1084
- let backgroundColor_2: string;
1085
- export { backgroundColor_2 as backgroundColor };
1128
+ let backgroundColor_4: string;
1129
+ export { backgroundColor_4 as backgroundColor };
1086
1130
  let boxShadow_3: string;
1087
1131
  export { boxShadow_3 as boxShadow };
1088
1132
  }
@@ -1100,15 +1144,15 @@ declare namespace _default {
1100
1144
  export { borderRadius_3 as borderRadius };
1101
1145
  let boxShadow_4: string;
1102
1146
  export { boxShadow_4 as boxShadow };
1103
- let backgroundColor_3: string;
1104
- export { backgroundColor_3 as backgroundColor };
1147
+ let backgroundColor_5: string;
1148
+ export { backgroundColor_5 as backgroundColor };
1105
1149
  }
1106
1150
  export { sidebar_1 as sidebar };
1107
1151
  export namespace cover {
1108
1152
  let position_2: string;
1109
1153
  export { position_2 as position };
1110
- let backgroundColor_4: string;
1111
- export { backgroundColor_4 as backgroundColor };
1154
+ let backgroundColor_6: string;
1155
+ export { backgroundColor_6 as backgroundColor };
1112
1156
  export let width: string;
1113
1157
  let left_2: number;
1114
1158
  export { left_2 as left };
@@ -1171,11 +1215,12 @@ declare namespace _default {
1171
1215
  namespace root {
1172
1216
  export let fontFamily: string;
1173
1217
  export let lineHeight: string;
1174
- export let fontWeight: string;
1218
+ let fontWeight_3: string;
1219
+ export { fontWeight_3 as fontWeight };
1175
1220
  let color_1: string;
1176
1221
  export { color_1 as color };
1177
- let backgroundColor_5: string;
1178
- export { backgroundColor_5 as backgroundColor };
1222
+ let backgroundColor_7: string;
1223
+ export { backgroundColor_7 as backgroundColor };
1179
1224
  export let webkitFontSmoothing: string;
1180
1225
  export let mozOsxFontmoothing: string;
1181
1226
  export let a: {
@@ -1187,18 +1232,18 @@ declare namespace _default {
1187
1232
  };
1188
1233
  export namespace svg {
1189
1234
  export let fill: string;
1190
- let display_1: string;
1191
- export { display_1 as display };
1235
+ let display_4: string;
1236
+ export { display_4 as display };
1192
1237
  }
1193
1238
  export namespace pre {
1194
1239
  let fontFamily_1: string;
1195
1240
  export { fontFamily_1 as fontFamily };
1196
1241
  }
1197
- export namespace p_2 {
1242
+ export namespace p_6 {
1198
1243
  let color_2: string;
1199
1244
  export { color_2 as color };
1200
1245
  }
1201
- export { p_2 as p };
1246
+ export { p_6 as p };
1202
1247
  }
1203
1248
  }
1204
1249
  }
@@ -250,23 +250,50 @@ export default {
250
250
 
251
251
  cards: {
252
252
  primary: {
253
- padding: 3,
254
253
  borderRadius: 2,
255
254
  backgroundColor: 'layer.2',
256
255
  boxShadow: 'low',
256
+ header: {
257
+ backgroundColor: 'layer.1',
258
+ borderTopLeftRadius: 2,
259
+ borderTopRightRadius: 2,
260
+ p: 3,
261
+ fontWeight: 'bold',
262
+ display: 'flex',
263
+ },
264
+ children: {
265
+ p: 3,
266
+ },
257
267
  },
258
268
  secondary: {
259
269
  borderRadius: 2,
260
- p: 3,
261
270
  boxShadow: 'none',
262
271
  border: '1px solid',
263
272
  borderColor: 'borders.2',
273
+ header: {
274
+ backgroundColor: 'layer.1',
275
+ borderTopLeftRadius: 2,
276
+ borderTopRightRadius: 2,
277
+ p: 3,
278
+ fontWeight: 'bold',
279
+ display: 'flex',
280
+ },
281
+ children: {
282
+ p: 3,
283
+ },
264
284
  },
265
285
  indent: {
266
286
  borderRadius: 2,
267
- p: 3,
268
287
  boxShadow: 'none',
269
288
  backgroundColor: 'backgroundMuted',
289
+ header: {
290
+ display: 'flex',
291
+ fontWeight: 'bold',
292
+ p: 3,
293
+ },
294
+ children: {
295
+ p: 3,
296
+ },
270
297
  },
271
298
  },
272
299
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@automattic/vip-design-system",
3
- "version": "2.6.1",
3
+ "version": "2.7.0",
4
4
  "main": "build/system/index.js",
5
5
  "scripts": {
6
6
  "build-storybook": "storybook build",
@@ -8,4 +8,22 @@ export default {
8
8
  component: Card,
9
9
  };
10
10
 
11
- export const Default = () => <Card> Hello </Card>;
11
+ export const Default = () => <Card>Hello</Card>;
12
+
13
+ export const WithHeader = () => <Card header="Header">This is a card with a header.</Card>;
14
+
15
+ export const DefaultSecondary = () => <Card variant="secondary">Hello</Card>;
16
+
17
+ export const WithHeaderSecondary = () => (
18
+ <Card header="Header" variant="secondary">
19
+ This is a card with a header.
20
+ </Card>
21
+ );
22
+
23
+ export const DefaultIndent = () => <Card variant="indent">Hello</Card>;
24
+
25
+ export const WithHeaderIndent = () => (
26
+ <Card header="Header" variant="indent">
27
+ This is a card with a header.
28
+ </Card>
29
+ );
@@ -29,4 +29,15 @@ describe( '<Card />', () => {
29
29
  // Check for accessibility issues
30
30
  expect( await axe( container ) ).toHaveNoViolations();
31
31
  } );
32
+
33
+ it( 'renders the Card component with a header', async () => {
34
+ const { container } = render( <Card header="Card Header">Card text</Card> );
35
+
36
+ expect( screen.getByText( 'Card Header' ) ).toBeInTheDocument();
37
+
38
+ expect( screen.getByText( 'Card text' ) ).toBeInTheDocument();
39
+
40
+ // Check for accessibility issues
41
+ expect( await axe( container ) ).toHaveNoViolations();
42
+ } );
32
43
  } );
@@ -1,3 +1,5 @@
1
+ /** @jsxImportSource theme-ui */
2
+
1
3
  /**
2
4
  * External dependencies
3
5
  */
@@ -10,30 +12,57 @@ import { BoxProps } from 'theme-ui';
10
12
  */
11
13
  import { Box } from '..';
12
14
 
15
+ export enum CardVariant {
16
+ 'primary',
17
+ 'secondary',
18
+ 'indent',
19
+ }
20
+
13
21
  export interface CardProps {
14
- variant?: string;
22
+ variant?: keyof typeof CardVariant;
15
23
  sx?: BoxProps[ 'sx' ];
16
24
  className?: Argument;
25
+ header?: React.ReactNode;
26
+ children?: React.ReactNode;
17
27
  }
18
28
 
19
29
  type CardBoxProps = CardProps & BoxProps;
20
30
 
21
31
  export const Card = forwardRef< HTMLElement, CardBoxProps >(
22
32
  (
23
- { variant = 'primary', sx = {}, className, ...props }: CardBoxProps,
33
+ { variant = 'primary', header, sx = {}, className, children, ...props }: CardProps,
24
34
  ref: Ref< HTMLElement >
25
- ) => (
26
- <Box
27
- ref={ ref }
28
- sx={ {
29
- // pass variant prop to sx
30
- variant: `cards.${ variant }`,
31
- ...sx,
32
- } }
33
- className={ classNames( 'vip-card-component', className ) }
34
- { ...props }
35
- />
36
- )
35
+ ) => {
36
+ return (
37
+ <Box
38
+ ref={ ref }
39
+ sx={ {
40
+ // pass variant prop to sx
41
+ variant: `cards.${ variant }`,
42
+ ...sx,
43
+ } }
44
+ className={ classNames( 'vip-card-component', className ) }
45
+ { ...props }
46
+ >
47
+ { header && (
48
+ <div
49
+ sx={ {
50
+ variant: `cards.${ variant }.header`,
51
+ } }
52
+ >
53
+ { header }
54
+ </div>
55
+ ) }
56
+ <div
57
+ sx={ {
58
+ variant: `cards.${ variant }.children`,
59
+ } }
60
+ >
61
+ { children }
62
+ </div>
63
+ </Box>
64
+ );
65
+ }
37
66
  );
38
67
 
39
68
  Card.displayName = 'Card';
@@ -250,23 +250,50 @@ export default {
250
250
 
251
251
  cards: {
252
252
  primary: {
253
- padding: 3,
254
253
  borderRadius: 2,
255
254
  backgroundColor: 'layer.2',
256
255
  boxShadow: 'low',
256
+ header: {
257
+ backgroundColor: 'layer.1',
258
+ borderTopLeftRadius: 2,
259
+ borderTopRightRadius: 2,
260
+ p: 3,
261
+ fontWeight: 'bold',
262
+ display: 'flex',
263
+ },
264
+ children: {
265
+ p: 3,
266
+ },
257
267
  },
258
268
  secondary: {
259
269
  borderRadius: 2,
260
- p: 3,
261
270
  boxShadow: 'none',
262
271
  border: '1px solid',
263
272
  borderColor: 'borders.2',
273
+ header: {
274
+ backgroundColor: 'layer.1',
275
+ borderTopLeftRadius: 2,
276
+ borderTopRightRadius: 2,
277
+ p: 3,
278
+ fontWeight: 'bold',
279
+ display: 'flex',
280
+ },
281
+ children: {
282
+ p: 3,
283
+ },
264
284
  },
265
285
  indent: {
266
286
  borderRadius: 2,
267
- p: 3,
268
287
  boxShadow: 'none',
269
288
  backgroundColor: 'backgroundMuted',
289
+ header: {
290
+ display: 'flex',
291
+ fontWeight: 'bold',
292
+ p: 3,
293
+ },
294
+ children: {
295
+ p: 3,
296
+ },
270
297
  },
271
298
  },
272
299