@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.
- package/build/system/Card/Card.d.ts +9 -1
- package/build/system/Card/Card.js +25 -4
- package/build/system/Card/Card.stories.d.ts +5 -0
- package/build/system/Card/Card.stories.js +34 -2
- package/build/system/Card/Card.test.js +25 -0
- package/build/system/theme/index.d.ts +65 -20
- package/build/system/theme/index.js +30 -3
- package/package.json +1 -1
- package/src/system/Card/Card.stories.tsx +19 -1
- package/src/system/Card/Card.test.tsx +11 -0
- package/src/system/Card/Card.tsx +43 -14
- package/src/system/theme/index.js +30 -3
|
@@ -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?:
|
|
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.
|
|
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: "
|
|
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
|
|
58
|
-
export {
|
|
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
|
-
|
|
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
|
|
1085
|
-
export {
|
|
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
|
|
1104
|
-
export {
|
|
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
|
|
1111
|
-
export {
|
|
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
|
-
|
|
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
|
|
1178
|
-
export {
|
|
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
|
|
1191
|
-
export {
|
|
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
|
|
1242
|
+
export namespace p_6 {
|
|
1198
1243
|
let color_2: string;
|
|
1199
1244
|
export { color_2 as color };
|
|
1200
1245
|
}
|
|
1201
|
-
export {
|
|
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
|
@@ -8,4 +8,22 @@ export default {
|
|
|
8
8
|
component: Card,
|
|
9
9
|
};
|
|
10
10
|
|
|
11
|
-
export const Default = () => <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
|
} );
|
package/src/system/Card/Card.tsx
CHANGED
|
@@ -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?:
|
|
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 }:
|
|
33
|
+
{ variant = 'primary', header, sx = {}, className, children, ...props }: CardProps,
|
|
24
34
|
ref: Ref< HTMLElement >
|
|
25
|
-
) =>
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
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
|
|