@carbon/ibm-products 2.4.0 → 2.4.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (31) hide show
  1. package/css/index-full-carbon.css +27 -0
  2. package/css/index-full-carbon.css.map +1 -1
  3. package/css/index-full-carbon.min.css +2 -2
  4. package/css/index-full-carbon.min.css.map +1 -1
  5. package/css/index-without-carbon-released-only.css +16 -0
  6. package/css/index-without-carbon-released-only.css.map +1 -1
  7. package/css/index-without-carbon-released-only.min.css +1 -1
  8. package/css/index-without-carbon-released-only.min.css.map +1 -1
  9. package/css/index-without-carbon.css +27 -0
  10. package/css/index-without-carbon.css.map +1 -1
  11. package/css/index-without-carbon.min.css +2 -2
  12. package/css/index-without-carbon.min.css.map +1 -1
  13. package/css/index.css +23 -0
  14. package/css/index.css.map +1 -1
  15. package/css/index.min.css +2 -2
  16. package/css/index.min.css.map +1 -1
  17. package/es/components/Card/Card.js +11 -1
  18. package/es/components/Card/CardFooter.js +4 -2
  19. package/es/components/Card/CardHeader.js +20 -2
  20. package/es/components/EditUpdateCards/EditUpdateCards.js +66 -4
  21. package/es/components/ProductiveCard/ProductiveCard.js +21 -1
  22. package/lib/components/Card/Card.js +11 -1
  23. package/lib/components/Card/CardFooter.js +4 -2
  24. package/lib/components/Card/CardHeader.js +20 -2
  25. package/lib/components/EditUpdateCards/EditUpdateCards.js +66 -4
  26. package/lib/components/ProductiveCard/ProductiveCard.js +21 -1
  27. package/package.json +2 -2
  28. package/scss/components/Datagrid/_storybook-styles.scss +5 -0
  29. package/scss/components/EditUpdateCards/_edit-update-cards.scss +10 -0
  30. package/scss/components/ProductiveCard/_productive-card.scss +15 -0
  31. package/scss/components/Tearsheet/_tearsheet.scss +6 -0
@@ -1,7 +1,7 @@
1
1
  import _extends from "@babel/runtime/helpers/extends";
2
2
  import _defineProperty from "@babel/runtime/helpers/defineProperty";
3
3
  import _objectWithoutProperties from "@babel/runtime/helpers/objectWithoutProperties";
4
- var _excluded = ["actionIcons", "actionsPlacement", "className", "description", "editChildren", "editMode", "label", "previewChildren", "title", "titleSize"];
4
+ var _excluded = ["actionIcons", "actionsPlacement", "className", "description", "editChildren", "editMode", "label", "onPrimaryButtonClick", "onSecondaryButtonClick", "previewChildren", "title", "titleSize", "primaryButtonIcon", "primaryButtonText", "secondaryButtonIcon", "secondaryButtonText"];
5
5
  /**
6
6
  * Copyright IBM Corp. 2022, 2022
7
7
  *
@@ -56,12 +56,30 @@ export var EditUpdateCards = /*#__PURE__*/React.forwardRef(function (_ref, ref)
56
56
  editChildren = _ref.editChildren,
57
57
  editMode = _ref.editMode,
58
58
  label = _ref.label,
59
+ onPrimaryButtonClick = _ref.onPrimaryButtonClick,
60
+ onSecondaryButtonClick = _ref.onSecondaryButtonClick,
59
61
  previewChildren = _ref.previewChildren,
60
62
  title = _ref.title,
61
63
  titleSize = _ref.titleSize,
64
+ primaryButtonIcon = _ref.primaryButtonIcon,
65
+ primaryButtonText = _ref.primaryButtonText,
66
+ secondaryButtonIcon = _ref.secondaryButtonIcon,
67
+ secondaryButtonText = _ref.secondaryButtonText,
62
68
  rest = _objectWithoutProperties(_ref, _excluded);
63
- // const [editMode, setEditMode] = useState(false);
69
+ // const [editCardMode, setEditCardMode] = useState(editMode);
64
70
 
71
+ var conditionalProps = {
72
+ onPrimaryButtonClick: onPrimaryButtonClick,
73
+ onSecondaryButtonClick: onSecondaryButtonClick,
74
+ primaryButtonIcon: primaryButtonIcon,
75
+ primaryButtonKind: 'ghost',
76
+ primaryButtonPlacement: 'top',
77
+ primaryButtonText: primaryButtonText,
78
+ secondaryButtonIcon: secondaryButtonIcon,
79
+ secondaryButtonKind: 'ghost',
80
+ secondaryButtonPlacement: 'top',
81
+ secondaryButtonText: secondaryButtonText
82
+ };
65
83
  return /*#__PURE__*/React.createElement("div", _extends({}, rest, {
66
84
  className: cx(blockClass,
67
85
  // Apply the block class to the main HTML element
@@ -70,7 +88,7 @@ export var EditUpdateCards = /*#__PURE__*/React.forwardRef(function (_ref, ref)
70
88
  _defineProperty({}, "".concat(blockClass, "__actions-bottom"), actionsPlacement === 'bottom')),
71
89
  ref: ref,
72
90
  role: "main"
73
- }, getDevtoolsProps(componentName)), /*#__PURE__*/React.createElement(ProductiveCard, {
91
+ }, getDevtoolsProps(componentName)), /*#__PURE__*/React.createElement(ProductiveCard, _extends({
74
92
  actionIcons: actionIcons,
75
93
  actionsPlacement: actionsPlacement,
76
94
  className: className,
@@ -78,7 +96,7 @@ export var EditUpdateCards = /*#__PURE__*/React.forwardRef(function (_ref, ref)
78
96
  label: label,
79
97
  title: title,
80
98
  titleSize: titleSize
81
- }, editMode === false && /*#__PURE__*/React.createElement("div", null, previewChildren), editMode && /*#__PURE__*/React.createElement("div", null, editChildren)));
99
+ }, editMode && conditionalProps), editMode === false && /*#__PURE__*/React.createElement("div", null, previewChildren), editMode && /*#__PURE__*/React.createElement("div", null, editChildren)));
82
100
  });
83
101
 
84
102
  // Return a placeholder if not released and not enabled by feature flag
@@ -127,10 +145,54 @@ EditUpdateCards.propTypes = {
127
145
  * Optional label for the top of the card
128
146
  */
129
147
  label: PropTypes.string,
148
+ /**
149
+ * Function that's called from the primary button or action icon
150
+ */
151
+ onPrimaryButtonClick: PropTypes.func,
152
+ /**
153
+ * Function that's called from the secondary button or action icon
154
+ */
155
+ onSecondaryButtonClick: PropTypes.func,
130
156
  /**
131
157
  * Preview mode children
132
158
  */
133
159
  previewChildren: PropTypes.node,
160
+ /**
161
+ * Optional prop to allow overriding the icon rendering. Can be a React component class
162
+ */
163
+ primaryButtonIcon: PropTypes.oneOfType([PropTypes.func, PropTypes.object]),
164
+ /**
165
+ * Establishes the kind of button displayed for the primary button
166
+ */
167
+ primaryButtonKind: PropTypes.oneOf(['primary', 'ghost']),
168
+ /**
169
+ * Determines if the primary button is on the top or bottom of the card
170
+ */
171
+ primaryButtonPlacement: PropTypes.oneOf(['top', 'bottom']),
172
+ /**
173
+ * The text that's displayed in the primary button
174
+ */
175
+ primaryButtonText: PropTypes.string,
176
+ /**
177
+ * Optionally specify an href for your Button to become an <a> element
178
+ */
179
+ secondaryButtonHref: PropTypes.string,
180
+ /**
181
+ * Optional prop to allow overriding the icon rendering. Can be a React component class
182
+ */
183
+ secondaryButtonIcon: PropTypes.oneOfType([PropTypes.func, PropTypes.object]),
184
+ /**
185
+ * Establishes the kind of button displayed for the secondary button
186
+ */
187
+ secondaryButtonKind: PropTypes.oneOf(['secondary', 'ghost']),
188
+ /**
189
+ * Determines if the secondary button is on the top or bottom of the card
190
+ */
191
+ secondaryButtonPlacement: PropTypes.oneOf(['top', 'bottom']),
192
+ /**
193
+ * The text that's displayed in the secondary button
194
+ */
195
+ secondaryButtonText: PropTypes.string,
134
196
  /**
135
197
  * Title that's displayed at the top of the card
136
198
  */
@@ -27,7 +27,7 @@ export var ProductiveCard = /*#__PURE__*/forwardRef(function (_ref, ref) {
27
27
  var _ref$actionsPlacement = _ref.actionsPlacement,
28
28
  actionsPlacement = _ref$actionsPlacement === void 0 ? defaults.actionsPlacement : _ref$actionsPlacement,
29
29
  rest = _objectWithoutProperties(_ref, _excluded);
30
- var validProps = prepareProps(rest, ['media', 'mediaPosition', 'onSecondaryButtonClick', 'pictogram', 'primaryButtonClick', 'productive', 'secondaryButtonKind', 'secondaryButtonText']);
30
+ var validProps = prepareProps(rest, ['media', 'mediaPosition', 'pictogram', 'primaryButtonClick', 'productive', 'secondaryButtonKind']);
31
31
  return /*#__PURE__*/React.createElement(Card, _extends({}, _objectSpread(_objectSpread({}, validProps), {}, {
32
32
  actionsPlacement: actionsPlacement,
33
33
  ref: ref
@@ -82,6 +82,10 @@ ProductiveCard.propTypes = {
82
82
  * Function that's called from the primary button or action icon
83
83
  */
84
84
  onPrimaryButtonClick: PropTypes.func,
85
+ /**
86
+ * Function that's called from the secondary button or action icon
87
+ */
88
+ onSecondaryButtonClick: PropTypes.func,
85
89
  /**
86
90
  * Use an overflow menu instead of action icons. Refer to design documentation for implementation guidelines
87
91
  */
@@ -111,6 +115,22 @@ ProductiveCard.propTypes = {
111
115
  * The text that's displayed in the primary button
112
116
  */
113
117
  primaryButtonText: PropTypes.node,
118
+ /**
119
+ * Optionally specify an href for your Button to become an <a> element
120
+ */
121
+ secondaryButtonHref: PropTypes.string,
122
+ /**
123
+ * Optional prop to allow overriding the icon rendering. Can be a React component class
124
+ */
125
+ secondaryButtonIcon: PropTypes.oneOfType([PropTypes.func, PropTypes.object]),
126
+ /**
127
+ * Determines if the secondary button is on the top or bottom of the card
128
+ */
129
+ secondaryButtonPlacement: PropTypes.oneOf(['top', 'bottom']),
130
+ /**
131
+ * The text that's displayed in the secondary button
132
+ */
133
+ secondaryButtonText: PropTypes.node,
114
134
  /**
115
135
  * Title that's displayed at the top of the card
116
136
  */
@@ -16,7 +16,7 @@ var _propTypes = _interopRequireDefault(require("prop-types"));
16
16
  var _CardHeader = require("./CardHeader");
17
17
  var _CardFooter = require("./CardFooter");
18
18
  var _settings = require("../../settings");
19
- var _excluded = ["actionIcons", "actionsPlacement", "children", "className", "clickZone", "description", "label", "media", "mediaPosition", "onClick", "onKeyDown", "onPrimaryButtonClick", "overflowActions", "overflowAriaLabel", "onSecondaryButtonClick", "pictogram", "primaryButtonHref", "primaryButtonIcon", "primaryButtonKind", "primaryButtonPlacement", "primaryButtonText", "productive", "secondaryButtonHref", "secondaryButtonIcon", "secondaryButtonKind", "secondaryButtonText", "title", "titleSize"],
19
+ var _excluded = ["actionIcons", "actionsPlacement", "children", "className", "clickZone", "description", "label", "media", "mediaPosition", "onClick", "onKeyDown", "onPrimaryButtonClick", "overflowActions", "overflowAriaLabel", "onSecondaryButtonClick", "pictogram", "primaryButtonHref", "primaryButtonIcon", "primaryButtonKind", "primaryButtonPlacement", "primaryButtonText", "productive", "secondaryButtonHref", "secondaryButtonIcon", "secondaryButtonKind", "secondaryButtonPlacement", "secondaryButtonText", "title", "titleSize"],
20
20
  _excluded2 = ["id"],
21
21
  _excluded3 = ["id", "icon", "onClick", "iconDescription", "href"]; //
22
22
  // Copyright IBM Corp. 2020, 2023
@@ -41,6 +41,7 @@ var defaults = {
41
41
  primaryButtonPlacement: 'bottom',
42
42
  productive: false,
43
43
  secondaryButtonKind: 'secondary',
44
+ secondaryButtonPlacement: 'bottom',
44
45
  titleSize: 'default'
45
46
  };
46
47
  var Card = /*#__PURE__*/(0, _react.forwardRef)(function (_ref, ref) {
@@ -78,6 +79,8 @@ var Card = /*#__PURE__*/(0, _react.forwardRef)(function (_ref, ref) {
78
79
  secondaryButtonIcon = _ref.secondaryButtonIcon,
79
80
  _ref$secondaryButtonK = _ref.secondaryButtonKind,
80
81
  secondaryButtonKind = _ref$secondaryButtonK === void 0 ? defaults.secondaryButtonKind : _ref$secondaryButtonK,
82
+ _ref$secondaryButtonP = _ref.secondaryButtonPlacement,
83
+ secondaryButtonPlacement = _ref$secondaryButtonP === void 0 ? defaults.secondaryButtonPlacement : _ref$secondaryButtonP,
81
84
  secondaryButtonText = _ref.secondaryButtonText,
82
85
  title = _ref.title,
83
86
  _ref$titleSize = _ref.titleSize,
@@ -182,12 +185,17 @@ var Card = /*#__PURE__*/(0, _react.forwardRef)(function (_ref, ref) {
182
185
  noActionIcons: actionIcons.length > 0 && actionsPlacement === 'top' ? false : true,
183
186
  actionsPlacement: actionsPlacement,
184
187
  onPrimaryButtonClick: onPrimaryButtonClick,
188
+ onSecondaryButtonClick: onSecondaryButtonClick,
185
189
  primaryButtonIcon: primaryButtonIcon,
186
190
  primaryButtonPlacement: primaryButtonPlacement,
187
191
  primaryButtonText: primaryButtonText,
188
192
  description: description,
189
193
  hasActions: hasActions,
190
194
  label: label,
195
+ secondaryButtonHref: secondaryButtonHref,
196
+ secondaryButtonIcon: secondaryButtonIcon,
197
+ secondaryButtonPlacement: secondaryButtonPlacement,
198
+ secondaryButtonText: secondaryButtonText,
191
199
  title: title,
192
200
  titleSize: titleSize
193
201
  };
@@ -216,6 +224,7 @@ var Card = /*#__PURE__*/(0, _react.forwardRef)(function (_ref, ref) {
216
224
  secondaryButtonHref: secondaryButtonHref,
217
225
  secondaryButtonIcon: secondaryButtonIcon,
218
226
  secondaryButtonKind: secondaryButtonKind,
227
+ secondaryButtonPlacement: secondaryButtonPlacement,
219
228
  secondaryButtonText: secondaryButtonText
220
229
  };
221
230
  };
@@ -266,6 +275,7 @@ Card.propTypes = {
266
275
  secondaryButtonHref: _propTypes.default.string,
267
276
  secondaryButtonIcon: _propTypes.default.oneOfType([_propTypes.default.func, _propTypes.default.object]),
268
277
  secondaryButtonKind: _propTypes.default.oneOf(['secondary', 'ghost']),
278
+ secondaryButtonPlacement: _propTypes.default.oneOf(['top', 'bottom']),
269
279
  secondaryButtonText: _propTypes.default.string,
270
280
  title: _propTypes.default.oneOfType([_propTypes.default.string, _propTypes.default.object, _propTypes.default.node]),
271
281
  titleSize: _propTypes.default.oneOf(['default', 'large'])
@@ -44,14 +44,15 @@ var CardFooter = function CardFooter(_ref) {
44
44
  secondaryButtonIcon = _ref.secondaryButtonIcon,
45
45
  _ref$secondaryButtonK = _ref.secondaryButtonKind,
46
46
  secondaryButtonKind = _ref$secondaryButtonK === void 0 ? defaults.secondaryButtonKind : _ref$secondaryButtonK,
47
+ secondaryButtonPlacement = _ref.secondaryButtonPlacement,
47
48
  secondaryButtonText = _ref.secondaryButtonText;
48
49
  var blockClass = "".concat(_settings.pkg.prefix, "--card");
49
50
  var footerClass = "".concat(_settings.pkg.prefix, "--card__footer");
50
51
  var footerClasses = (0, _classnames.default)(footerClass, (0, _defineProperty2.default)({}, "".concat(footerClass, "-no-button"), !hasButton));
51
52
  return /*#__PURE__*/_react.default.createElement("div", {
52
53
  className: footerClasses
53
- }, secondaryButtonText && /*#__PURE__*/_react.default.createElement(_react2.Button, {
54
- kind: secondaryButtonKind,
54
+ }, secondaryButtonText && secondaryButtonPlacement === 'bottom' && /*#__PURE__*/_react.default.createElement(_react2.Button, {
55
+ kind: productive ? 'ghost' : secondaryButtonKind,
55
56
  onClick: onSecondaryButtonClick,
56
57
  size: "md",
57
58
  renderIcon: secondaryButtonIcon,
@@ -82,6 +83,7 @@ CardFooter.propTypes = {
82
83
  secondaryButtonHref: _propTypes.default.string,
83
84
  secondaryButtonIcon: _propTypes.default.oneOfType([_propTypes.default.func, _propTypes.default.object]),
84
85
  secondaryButtonKind: _propTypes.default.oneOf(['secondary', 'ghost']),
86
+ secondaryButtonPlacement: _propTypes.default.oneOf(['top', 'bottom']),
85
87
  secondaryButtonText: _propTypes.default.string
86
88
  };
87
89
  CardFooter.displayName = componentName;
@@ -28,6 +28,7 @@ var CardHeader = function CardHeader(_ref) {
28
28
  var actions = _ref.actions,
29
29
  noActionIcons = _ref.noActionIcons,
30
30
  onPrimaryButtonClick = _ref.onPrimaryButtonClick,
31
+ onSecondaryButtonClick = _ref.onSecondaryButtonClick,
31
32
  primaryButtonIcon = _ref.primaryButtonIcon,
32
33
  primaryButtonPlacement = _ref.primaryButtonPlacement,
33
34
  primaryButtonText = _ref.primaryButtonText,
@@ -35,6 +36,10 @@ var CardHeader = function CardHeader(_ref) {
35
36
  _ref$hasActions = _ref.hasActions,
36
37
  hasActions = _ref$hasActions === void 0 ? defaults.hasActions : _ref$hasActions,
37
38
  label = _ref.label,
39
+ secondaryButtonHref = _ref.secondaryButtonHref,
40
+ secondaryButtonIcon = _ref.secondaryButtonIcon,
41
+ secondaryButtonPlacement = _ref.secondaryButtonPlacement,
42
+ secondaryButtonText = _ref.secondaryButtonText,
38
43
  title = _ref.title,
39
44
  _ref$titleSize = _ref.titleSize,
40
45
  titleSize = _ref$titleSize === void 0 ? defaults.titleSize : _ref$titleSize;
@@ -57,9 +62,16 @@ var CardHeader = function CardHeader(_ref) {
57
62
  className: "".concat(blockClass, "__description")
58
63
  }, description)), hasActions && /*#__PURE__*/_react.default.createElement("div", {
59
64
  className: "".concat(blockClass, "__actions ").concat(blockClass, "__actions-header")
60
- }, actions, primaryButtonText && primaryButtonPlacement === 'top' && /*#__PURE__*/_react.default.createElement(_react2.Button, {
65
+ }, actions, secondaryButtonText && secondaryButtonPlacement === 'top' && /*#__PURE__*/_react.default.createElement(_react2.Button, {
61
66
  kind: "ghost",
62
- size: "small",
67
+ onClick: onSecondaryButtonClick,
68
+ size: "sm",
69
+ renderIcon: secondaryButtonIcon,
70
+ href: secondaryButtonHref,
71
+ className: actionGhostButtonClass
72
+ }, secondaryButtonText), primaryButtonText && primaryButtonPlacement === 'top' && /*#__PURE__*/_react.default.createElement(_react2.Button, {
73
+ kind: "ghost",
74
+ size: "sm",
63
75
  renderIcon: primaryButtonIcon,
64
76
  onClick: onPrimaryButtonClick,
65
77
  className: actionGhostButtonClass
@@ -73,9 +85,15 @@ CardHeader.propTypes = {
73
85
  label: _propTypes.default.string,
74
86
  noActionIcons: _propTypes.default.bool,
75
87
  onPrimaryButtonClick: _propTypes.default.func,
88
+ onSecondaryButtonClick: _propTypes.default.func,
76
89
  primaryButtonIcon: _propTypes.default.oneOfType([_propTypes.default.func, _propTypes.default.object]),
77
90
  primaryButtonPlacement: _propTypes.default.oneOf(['top', 'bottom']),
78
91
  primaryButtonText: _propTypes.default.string,
92
+ secondaryButtonHref: _propTypes.default.string,
93
+ secondaryButtonIcon: _propTypes.default.oneOfType([_propTypes.default.func, _propTypes.default.object]),
94
+ secondaryButtonKind: _propTypes.default.oneOf(['secondary', 'ghost']),
95
+ secondaryButtonPlacement: _propTypes.default.oneOf(['top', 'bottom']),
96
+ secondaryButtonText: _propTypes.default.string,
79
97
  title: _propTypes.default.oneOfType([_propTypes.default.string, _propTypes.default.object, _propTypes.default.node]),
80
98
  titleSize: _propTypes.default.oneOf(['default', 'large'])
81
99
  };
@@ -14,7 +14,7 @@ var _classnames = _interopRequireDefault(require("classnames"));
14
14
  var _devtools = require("../../global/js/utils/devtools");
15
15
  var _settings = require("../../settings");
16
16
  var _ProductiveCard = require("../ProductiveCard");
17
- var _excluded = ["actionIcons", "actionsPlacement", "className", "description", "editChildren", "editMode", "label", "previewChildren", "title", "titleSize"];
17
+ var _excluded = ["actionIcons", "actionsPlacement", "className", "description", "editChildren", "editMode", "label", "onPrimaryButtonClick", "onSecondaryButtonClick", "previewChildren", "title", "titleSize", "primaryButtonIcon", "primaryButtonText", "secondaryButtonIcon", "secondaryButtonText"];
18
18
  /**
19
19
  * Copyright IBM Corp. 2022, 2022
20
20
  *
@@ -59,12 +59,30 @@ var EditUpdateCards = /*#__PURE__*/_react.default.forwardRef(function (_ref, ref
59
59
  editChildren = _ref.editChildren,
60
60
  editMode = _ref.editMode,
61
61
  label = _ref.label,
62
+ onPrimaryButtonClick = _ref.onPrimaryButtonClick,
63
+ onSecondaryButtonClick = _ref.onSecondaryButtonClick,
62
64
  previewChildren = _ref.previewChildren,
63
65
  title = _ref.title,
64
66
  titleSize = _ref.titleSize,
67
+ primaryButtonIcon = _ref.primaryButtonIcon,
68
+ primaryButtonText = _ref.primaryButtonText,
69
+ secondaryButtonIcon = _ref.secondaryButtonIcon,
70
+ secondaryButtonText = _ref.secondaryButtonText,
65
71
  rest = (0, _objectWithoutProperties2.default)(_ref, _excluded);
66
- // const [editMode, setEditMode] = useState(false);
72
+ // const [editCardMode, setEditCardMode] = useState(editMode);
67
73
 
74
+ var conditionalProps = {
75
+ onPrimaryButtonClick: onPrimaryButtonClick,
76
+ onSecondaryButtonClick: onSecondaryButtonClick,
77
+ primaryButtonIcon: primaryButtonIcon,
78
+ primaryButtonKind: 'ghost',
79
+ primaryButtonPlacement: 'top',
80
+ primaryButtonText: primaryButtonText,
81
+ secondaryButtonIcon: secondaryButtonIcon,
82
+ secondaryButtonKind: 'ghost',
83
+ secondaryButtonPlacement: 'top',
84
+ secondaryButtonText: secondaryButtonText
85
+ };
68
86
  return /*#__PURE__*/_react.default.createElement("div", (0, _extends2.default)({}, rest, {
69
87
  className: (0, _classnames.default)(blockClass,
70
88
  // Apply the block class to the main HTML element
@@ -73,7 +91,7 @@ var EditUpdateCards = /*#__PURE__*/_react.default.forwardRef(function (_ref, ref
73
91
  (0, _defineProperty2.default)({}, "".concat(blockClass, "__actions-bottom"), actionsPlacement === 'bottom')),
74
92
  ref: ref,
75
93
  role: "main"
76
- }, (0, _devtools.getDevtoolsProps)(componentName)), /*#__PURE__*/_react.default.createElement(_ProductiveCard.ProductiveCard, {
94
+ }, (0, _devtools.getDevtoolsProps)(componentName)), /*#__PURE__*/_react.default.createElement(_ProductiveCard.ProductiveCard, (0, _extends2.default)({
77
95
  actionIcons: actionIcons,
78
96
  actionsPlacement: actionsPlacement,
79
97
  className: className,
@@ -81,7 +99,7 @@ var EditUpdateCards = /*#__PURE__*/_react.default.forwardRef(function (_ref, ref
81
99
  label: label,
82
100
  title: title,
83
101
  titleSize: titleSize
84
- }, editMode === false && /*#__PURE__*/_react.default.createElement("div", null, previewChildren), editMode && /*#__PURE__*/_react.default.createElement("div", null, editChildren)));
102
+ }, editMode && conditionalProps), editMode === false && /*#__PURE__*/_react.default.createElement("div", null, previewChildren), editMode && /*#__PURE__*/_react.default.createElement("div", null, editChildren)));
85
103
  });
86
104
 
87
105
  // Return a placeholder if not released and not enabled by feature flag
@@ -131,10 +149,54 @@ EditUpdateCards.propTypes = {
131
149
  * Optional label for the top of the card
132
150
  */
133
151
  label: _propTypes.default.string,
152
+ /**
153
+ * Function that's called from the primary button or action icon
154
+ */
155
+ onPrimaryButtonClick: _propTypes.default.func,
156
+ /**
157
+ * Function that's called from the secondary button or action icon
158
+ */
159
+ onSecondaryButtonClick: _propTypes.default.func,
134
160
  /**
135
161
  * Preview mode children
136
162
  */
137
163
  previewChildren: _propTypes.default.node,
164
+ /**
165
+ * Optional prop to allow overriding the icon rendering. Can be a React component class
166
+ */
167
+ primaryButtonIcon: _propTypes.default.oneOfType([_propTypes.default.func, _propTypes.default.object]),
168
+ /**
169
+ * Establishes the kind of button displayed for the primary button
170
+ */
171
+ primaryButtonKind: _propTypes.default.oneOf(['primary', 'ghost']),
172
+ /**
173
+ * Determines if the primary button is on the top or bottom of the card
174
+ */
175
+ primaryButtonPlacement: _propTypes.default.oneOf(['top', 'bottom']),
176
+ /**
177
+ * The text that's displayed in the primary button
178
+ */
179
+ primaryButtonText: _propTypes.default.string,
180
+ /**
181
+ * Optionally specify an href for your Button to become an <a> element
182
+ */
183
+ secondaryButtonHref: _propTypes.default.string,
184
+ /**
185
+ * Optional prop to allow overriding the icon rendering. Can be a React component class
186
+ */
187
+ secondaryButtonIcon: _propTypes.default.oneOfType([_propTypes.default.func, _propTypes.default.object]),
188
+ /**
189
+ * Establishes the kind of button displayed for the secondary button
190
+ */
191
+ secondaryButtonKind: _propTypes.default.oneOf(['secondary', 'ghost']),
192
+ /**
193
+ * Determines if the secondary button is on the top or bottom of the card
194
+ */
195
+ secondaryButtonPlacement: _propTypes.default.oneOf(['top', 'bottom']),
196
+ /**
197
+ * The text that's displayed in the secondary button
198
+ */
199
+ secondaryButtonText: _propTypes.default.string,
138
200
  /**
139
201
  * Title that's displayed at the top of the card
140
202
  */
@@ -35,7 +35,7 @@ var ProductiveCard = /*#__PURE__*/(0, _react.forwardRef)(function (_ref, ref) {
35
35
  var _ref$actionsPlacement = _ref.actionsPlacement,
36
36
  actionsPlacement = _ref$actionsPlacement === void 0 ? defaults.actionsPlacement : _ref$actionsPlacement,
37
37
  rest = (0, _objectWithoutProperties2.default)(_ref, _excluded);
38
- var validProps = (0, _propsHelper.prepareProps)(rest, ['media', 'mediaPosition', 'onSecondaryButtonClick', 'pictogram', 'primaryButtonClick', 'productive', 'secondaryButtonKind', 'secondaryButtonText']);
38
+ var validProps = (0, _propsHelper.prepareProps)(rest, ['media', 'mediaPosition', 'pictogram', 'primaryButtonClick', 'productive', 'secondaryButtonKind']);
39
39
  return /*#__PURE__*/_react.default.createElement(_Card.Card, (0, _extends2.default)({}, _objectSpread(_objectSpread({}, validProps), {}, {
40
40
  actionsPlacement: actionsPlacement,
41
41
  ref: ref
@@ -91,6 +91,10 @@ ProductiveCard.propTypes = {
91
91
  * Function that's called from the primary button or action icon
92
92
  */
93
93
  onPrimaryButtonClick: _propTypes.default.func,
94
+ /**
95
+ * Function that's called from the secondary button or action icon
96
+ */
97
+ onSecondaryButtonClick: _propTypes.default.func,
94
98
  /**
95
99
  * Use an overflow menu instead of action icons. Refer to design documentation for implementation guidelines
96
100
  */
@@ -120,6 +124,22 @@ ProductiveCard.propTypes = {
120
124
  * The text that's displayed in the primary button
121
125
  */
122
126
  primaryButtonText: _propTypes.default.node,
127
+ /**
128
+ * Optionally specify an href for your Button to become an <a> element
129
+ */
130
+ secondaryButtonHref: _propTypes.default.string,
131
+ /**
132
+ * Optional prop to allow overriding the icon rendering. Can be a React component class
133
+ */
134
+ secondaryButtonIcon: _propTypes.default.oneOfType([_propTypes.default.func, _propTypes.default.object]),
135
+ /**
136
+ * Determines if the secondary button is on the top or bottom of the card
137
+ */
138
+ secondaryButtonPlacement: _propTypes.default.oneOf(['top', 'bottom']),
139
+ /**
140
+ * The text that's displayed in the secondary button
141
+ */
142
+ secondaryButtonText: _propTypes.default.node,
123
143
  /**
124
144
  * Title that's displayed at the top of the card
125
145
  */
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@carbon/ibm-products",
3
3
  "description": "Carbon for IBM Products",
4
- "version": "2.4.0",
4
+ "version": "2.4.1",
5
5
  "license": "Apache-2.0",
6
6
  "main": "lib/index.js",
7
7
  "module": "es/index.js",
@@ -94,5 +94,5 @@
94
94
  "react": "^16.8.6 || ^17.0.1",
95
95
  "react-dom": "^16.8.6 || ^17.0.1"
96
96
  },
97
- "gitHead": "ce43460f28f908aeb8ec4bfb2c501dd457d11a58"
97
+ "gitHead": "3e735167a2cc5e2a7e2f87069c4ae1bc31ce0736"
98
98
  }
@@ -54,6 +54,11 @@ $block-class: #{c4p-settings.$pkg-prefix}--datagrid;
54
54
  padding-bottom: $spacing-06;
55
55
  }
56
56
 
57
+ .#{$block-class}__side-panel-link {
58
+ padding-top: $spacing-01;
59
+ padding-bottom: $spacing-06;
60
+ }
61
+
57
62
  .#{$block-class}__side-panel-section-inner {
58
63
  display: flex;
59
64
  padding: $spacing-01 0;
@@ -31,6 +31,9 @@ $block-class: #{c4p-settings.$pkg-prefix}--edit-update-cards;
31
31
  .#{c4p-settings.$pkg-prefix}--card__header,
32
32
  .#{c4p-settings.$pkg-prefix}--card__footer {
33
33
  button {
34
+ // stylelint-disable-next-line carbon/theme-token-use
35
+ color: $white-0;
36
+
34
37
  &:hover {
35
38
  // stylelint-disable-next-line carbon/theme-token-use
36
39
  background-color: $blue-60-hover;
@@ -54,12 +57,14 @@ $block-class: #{c4p-settings.$pkg-prefix}--edit-update-cards;
54
57
  }
55
58
  }
56
59
  }
60
+
57
61
  .#{c4p-settings.$pkg-prefix}--card__footer {
58
62
  // stylelint-disable-next-line carbon/theme-token-use
59
63
  background-color: $blue-60;
60
64
  // stylelint-disable-next-line carbon/theme-token-use
61
65
  color: $white-0;
62
66
  }
67
+
63
68
  .#{c4p-settings.$pkg-prefix}--loading {
64
69
  animation-duration: $duration-slow-02;
65
70
  animation-fill-mode: forwards;
@@ -71,7 +76,12 @@ $block-class: #{c4p-settings.$pkg-prefix}--edit-update-cards;
71
76
  background-color: transparent;
72
77
  }
73
78
  }
79
+
80
+ .#{c4p-settings.$pkg-prefix}--card__header-container {
81
+ align-items: center;
82
+ }
74
83
  }
84
+
75
85
  &:not(.#{$block-class}__actions-bottom) {
76
86
  &##{$block-class}--edit {
77
87
  .#{c4p-settings.$pkg-prefix}--card__header {
@@ -77,6 +77,21 @@ $block-class: #{c4p-settings.$pkg-prefix}--card;
77
77
  &::before {
78
78
  opacity: 0;
79
79
  }
80
+
81
+ + .#{$block-class}__actions-header-ghost-button {
82
+ /* stylelint-disable-next-line max-nesting-depth */
83
+ &::before {
84
+ opacity: 0;
85
+ }
86
+ }
87
+ }
88
+
89
+ /* stylelint-disable-next-line max-nesting-depth */
90
+ &:first-child:not(:last-child) {
91
+ /* stylelint-disable-next-line max-nesting-depth */
92
+ &::before {
93
+ display: none;
94
+ }
80
95
  }
81
96
  }
82
97
 
@@ -127,6 +127,12 @@ $motion-duration: $duration-moderate-02;
127
127
  width: 100%;
128
128
  }
129
129
 
130
+ &.#{$block-class}--wide
131
+ .#{$pkg-prefix}--action-set
132
+ .#{$pkg-prefix}--action-set__action-button.#{$pkg-prefix}--action-set__action-button--expressive {
133
+ height: $spacing-11;
134
+ }
135
+
130
136
  @include breakpoint(md) {
131
137
  &.#{$block-class}--wide .#{$block-class}__container {
132
138
  width: calc(100% - (2 * #{$spacing-10}));