@atlaskit/smart-card 21.0.2 → 21.0.3

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.
Files changed (46) hide show
  1. package/CHANGELOG.md +6 -0
  2. package/dist/cjs/version.json +1 -1
  3. package/dist/cjs/view/FlexibleCard/components/actions/action/action-button/index.js +87 -0
  4. package/dist/cjs/view/FlexibleCard/components/actions/action/action-button/types.js +5 -0
  5. package/dist/cjs/view/FlexibleCard/components/actions/action/action-dropdown-item/index.js +31 -0
  6. package/dist/cjs/view/FlexibleCard/components/actions/action/action-dropdown-item/types.js +5 -0
  7. package/dist/cjs/view/FlexibleCard/components/actions/action/action-icon/index.js +52 -0
  8. package/dist/cjs/view/FlexibleCard/components/actions/action/action-icon/types.js +5 -0
  9. package/dist/cjs/view/FlexibleCard/components/actions/action/index.js +42 -104
  10. package/dist/cjs/view/FlexibleCard/components/blocks/action-group/index.js +44 -15
  11. package/dist/cjs/view/FlexibleCard/components/blocks/utils.js +12 -1
  12. package/dist/cjs/view/FlexibleCard/components/utils.js +7 -2
  13. package/dist/es2019/version.json +1 -1
  14. package/dist/es2019/view/FlexibleCard/components/actions/action/action-button/index.js +88 -0
  15. package/dist/es2019/view/FlexibleCard/components/actions/action/action-button/types.js +1 -0
  16. package/dist/es2019/view/FlexibleCard/components/actions/action/action-dropdown-item/index.js +18 -0
  17. package/dist/es2019/view/FlexibleCard/components/actions/action/action-dropdown-item/types.js +1 -0
  18. package/dist/es2019/view/FlexibleCard/components/actions/action/action-icon/index.js +35 -0
  19. package/dist/es2019/view/FlexibleCard/components/actions/action/action-icon/types.js +1 -0
  20. package/dist/es2019/view/FlexibleCard/components/actions/action/index.js +26 -110
  21. package/dist/es2019/view/FlexibleCard/components/blocks/action-group/index.js +31 -12
  22. package/dist/es2019/view/FlexibleCard/components/blocks/utils.js +12 -2
  23. package/dist/es2019/view/FlexibleCard/components/utils.js +6 -0
  24. package/dist/esm/version.json +1 -1
  25. package/dist/esm/view/FlexibleCard/components/actions/action/action-button/index.js +67 -0
  26. package/dist/esm/view/FlexibleCard/components/actions/action/action-button/types.js +1 -0
  27. package/dist/esm/view/FlexibleCard/components/actions/action/action-dropdown-item/index.js +19 -0
  28. package/dist/esm/view/FlexibleCard/components/actions/action/action-dropdown-item/types.js +1 -0
  29. package/dist/esm/view/FlexibleCard/components/actions/action/action-icon/index.js +39 -0
  30. package/dist/esm/view/FlexibleCard/components/actions/action/action-icon/types.js +1 -0
  31. package/dist/esm/view/FlexibleCard/components/actions/action/index.js +41 -99
  32. package/dist/esm/view/FlexibleCard/components/blocks/action-group/index.js +44 -16
  33. package/dist/esm/view/FlexibleCard/components/blocks/utils.js +12 -1
  34. package/dist/esm/view/FlexibleCard/components/utils.js +3 -1
  35. package/dist/types/view/FlexibleCard/components/actions/action/action-button/index.d.ts +5 -0
  36. package/dist/types/view/FlexibleCard/components/actions/action/action-button/types.d.ts +8 -0
  37. package/dist/types/view/FlexibleCard/components/actions/action/action-dropdown-item/index.d.ts +4 -0
  38. package/dist/types/view/FlexibleCard/components/actions/action/action-dropdown-item/types.d.ts +8 -0
  39. package/dist/types/view/FlexibleCard/components/actions/action/action-icon/index.d.ts +5 -0
  40. package/dist/types/view/FlexibleCard/components/actions/action/action-icon/types.d.ts +7 -0
  41. package/dist/types/view/FlexibleCard/components/actions/action/index.d.ts +0 -3
  42. package/dist/types/view/FlexibleCard/components/actions/action/types.d.ts +0 -16
  43. package/dist/types/view/FlexibleCard/components/blocks/utils.d.ts +1 -1
  44. package/dist/types/view/FlexibleCard/components/utils.d.ts +2 -0
  45. package/package.json +8 -5
  46. package/report.api.md +32 -2
package/CHANGELOG.md CHANGED
@@ -1,5 +1,11 @@
1
1
  # @atlaskit/smart-card
2
2
 
3
+ ## 21.0.3
4
+
5
+ ### Patch Changes
6
+
7
+ - [`a657fbfe5e1`](https://bitbucket.org/atlassian/atlassian-frontend/commits/a657fbfe5e1) - [ux] Flexible UI: Fix action menu and its tooltip not disappear after an action is clicked
8
+
3
9
  ## 21.0.2
4
10
 
5
11
  ### Patch Changes
@@ -1,5 +1,5 @@
1
1
  {
2
2
  "name": "@atlaskit/smart-card",
3
- "version": "21.0.2",
3
+ "version": "21.0.3",
4
4
  "sideEffects": false
5
5
  }
@@ -0,0 +1,87 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+
5
+ var _typeof = require("@babel/runtime/helpers/typeof");
6
+
7
+ Object.defineProperty(exports, "__esModule", {
8
+ value: true
9
+ });
10
+ exports.default = void 0;
11
+
12
+ var _taggedTemplateLiteral2 = _interopRequireDefault(require("@babel/runtime/helpers/taggedTemplateLiteral"));
13
+
14
+ var _react = _interopRequireWildcard(require("react"));
15
+
16
+ var _core = require("@emotion/core");
17
+
18
+ var _customThemeButton = _interopRequireDefault(require("@atlaskit/button/custom-theme-button"));
19
+
20
+ var _tooltip = _interopRequireDefault(require("@atlaskit/tooltip"));
21
+
22
+ var _constants = require("../../../../../../constants");
23
+
24
+ var _utils = require("../../../utils");
25
+
26
+ var _templateObject, _templateObject2;
27
+
28
+ function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
29
+
30
+ function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || _typeof(obj) !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
31
+
32
+ var getButtonStyle = function getButtonStyle(size, iconOnly) {
33
+ switch (size) {
34
+ case _constants.SmartLinkSize.Large:
35
+ return iconOnly ? (0, _core.css)(_templateObject || (_templateObject = (0, _taggedTemplateLiteral2.default)(["\n button,\n button:hover,\n button:focus,\n button:active {\n padding: 0;\n > span {\n margin: 0;\n }\n }\n "]))) : '';
36
+
37
+ case _constants.SmartLinkSize.Small:
38
+ return (0, _core.css)(_templateObject2 || (_templateObject2 = (0, _taggedTemplateLiteral2.default)(["\n font-size: 0.75rem;\n font-weight: 500;\n line-height: 1rem;\n button,\n button:hover,\n button:focus,\n button:active {\n line-height: 1rem;\n ", "\n }\n "])), iconOnly ? "\n padding: 0.125rem;\n " : "\n padding-left: 0.25rem;\n padding-right: 0.25rem;\n ");
39
+
40
+ case _constants.SmartLinkSize.XLarge:
41
+ case _constants.SmartLinkSize.Medium:
42
+ default:
43
+ return '';
44
+ }
45
+ };
46
+
47
+ var ActionButton = function ActionButton(_ref) {
48
+ var appearance = _ref.appearance,
49
+ content = _ref.content,
50
+ iconAfter = _ref.iconAfter,
51
+ iconBefore = _ref.iconBefore,
52
+ onClick = _ref.onClick,
53
+ overrideCss = _ref.overrideCss,
54
+ size = _ref.size,
55
+ testId = _ref.testId,
56
+ tooltipMessage = _ref.tooltipMessage;
57
+ var iconOnly = !content;
58
+ var onButtonClick = (0, _react.useCallback)(function (handler) {
59
+ return function (e) {
60
+ e.preventDefault();
61
+ handler();
62
+ };
63
+ }, []);
64
+ var onContainerClick = (0, _react.useCallback)(function (e) {
65
+ // Stop button on click event from propagate into parent container.
66
+ e.stopPropagation();
67
+ }, []);
68
+ return (0, _core.jsx)("div", {
69
+ css: [getButtonStyle(size, iconOnly), overrideCss],
70
+ "data-testid": "".concat(testId, "-button-wrapper"),
71
+ onClick: onContainerClick
72
+ }, (0, _core.jsx)(_tooltip.default, {
73
+ content: tooltipMessage,
74
+ hideTooltipOnClick: true,
75
+ testId: "".concat(testId, "-tooltip")
76
+ }, (0, _core.jsx)(_customThemeButton.default, {
77
+ appearance: appearance,
78
+ iconAfter: iconAfter,
79
+ iconBefore: iconBefore,
80
+ onClick: onButtonClick(onClick),
81
+ spacing: _utils.sizeToButtonSpacing[size],
82
+ testId: testId
83
+ }, content)));
84
+ };
85
+
86
+ var _default = ActionButton;
87
+ exports.default = _default;
@@ -0,0 +1,5 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
@@ -0,0 +1,31 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+
5
+ Object.defineProperty(exports, "__esModule", {
6
+ value: true
7
+ });
8
+ exports.default = void 0;
9
+
10
+ var _react = _interopRequireDefault(require("react"));
11
+
12
+ var _dropdownMenu = require("@atlaskit/dropdown-menu");
13
+
14
+ var _utils = require("../../../../../../utils");
15
+
16
+ var ActionDropdownItem = function ActionDropdownItem(_ref) {
17
+ var content = _ref.content,
18
+ iconAfter = _ref.iconAfter,
19
+ iconBefore = _ref.iconBefore,
20
+ onClick = _ref.onClick,
21
+ testId = _ref.testId;
22
+ return /*#__PURE__*/_react.default.createElement(_dropdownMenu.DropdownItem, {
23
+ elemAfter: iconAfter,
24
+ elemBefore: iconBefore,
25
+ onClick: (0, _utils.handleOnClick)(onClick),
26
+ testId: testId
27
+ }, content);
28
+ };
29
+
30
+ var _default = ActionDropdownItem;
31
+ exports.default = _default;
@@ -0,0 +1,5 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
@@ -0,0 +1,52 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+
5
+ Object.defineProperty(exports, "__esModule", {
6
+ value: true
7
+ });
8
+ exports.default = void 0;
9
+
10
+ var _taggedTemplateLiteral2 = _interopRequireDefault(require("@babel/runtime/helpers/taggedTemplateLiteral"));
11
+
12
+ var _react = _interopRequireDefault(require("react"));
13
+
14
+ var _core = require("@emotion/core");
15
+
16
+ var _constants = require("../../../../../../constants");
17
+
18
+ var _token = require("../../../../../../utils/token");
19
+
20
+ var _utils = require("../../../utils");
21
+
22
+ var _templateObject;
23
+
24
+ var getIconWidth = function getIconWidth(size) {
25
+ switch (size) {
26
+ case _constants.SmartLinkSize.XLarge:
27
+ case _constants.SmartLinkSize.Large:
28
+ return '1.5rem';
29
+
30
+ case _constants.SmartLinkSize.Medium:
31
+ case _constants.SmartLinkSize.Small:
32
+ default:
33
+ return '1rem';
34
+ }
35
+ };
36
+
37
+ var getIconStyles = function getIconStyles(size) {
38
+ return (0, _core.css)(_templateObject || (_templateObject = (0, _taggedTemplateLiteral2.default)(["\n color: ", ";\n ", ";\n"])), _token.tokens.actionIcon, (0, _utils.getIconSizeStyles)(getIconWidth(size)));
39
+ };
40
+
41
+ var ActionIcon = function ActionIcon(_ref) {
42
+ var size = _ref.size,
43
+ testId = _ref.testId,
44
+ icon = _ref.icon;
45
+ return (0, _core.jsx)("span", {
46
+ css: getIconStyles(size),
47
+ "data-testid": "".concat(testId, "-icon")
48
+ }, icon);
49
+ };
50
+
51
+ var _default = ActionIcon;
52
+ exports.default = _default;
@@ -0,0 +1,5 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
@@ -5,75 +5,22 @@ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefau
5
5
  Object.defineProperty(exports, "__esModule", {
6
6
  value: true
7
7
  });
8
- exports.sizeToSpacing = exports.default = void 0;
9
-
10
- var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
11
-
12
- var _taggedTemplateLiteral2 = _interopRequireDefault(require("@babel/runtime/helpers/taggedTemplateLiteral"));
8
+ exports.default = void 0;
13
9
 
14
10
  var _react = _interopRequireDefault(require("react"));
15
11
 
16
12
  var _core = require("@emotion/core");
17
13
 
18
- var _customThemeButton = _interopRequireDefault(require("@atlaskit/button/custom-theme-button"));
19
-
20
14
  var _constants = require("../../../../../constants");
21
15
 
22
- var _tooltip = _interopRequireDefault(require("@atlaskit/tooltip"));
23
-
24
- var _dropdownMenu = require("@atlaskit/dropdown-menu");
25
-
26
- var _utils = require("../../utils");
27
-
28
- var _token = require("../../../../../utils/token");
29
-
30
- var _utils2 = require("../../../../../utils");
16
+ var _actionButton = _interopRequireDefault(require("./action-button"));
31
17
 
32
- var _templateObject, _templateObject2, _templateObject3, _sizeToSpacing;
33
-
34
- var getIconWidth = function getIconWidth(size) {
35
- switch (size) {
36
- case _constants.SmartLinkSize.XLarge:
37
- case _constants.SmartLinkSize.Large:
38
- return '1.5rem';
39
-
40
- case _constants.SmartLinkSize.Medium:
41
- case _constants.SmartLinkSize.Small:
42
- default:
43
- return '1rem';
44
- }
45
- };
46
-
47
- var getIconStyles = function getIconStyles(size) {
48
- return (0, _core.css)(_templateObject || (_templateObject = (0, _taggedTemplateLiteral2.default)(["\n color: ", ";\n ", ";\n"])), _token.tokens.actionIcon, (0, _utils.getIconSizeStyles)(getIconWidth(size)));
49
- };
18
+ var _actionDropdownItem = _interopRequireDefault(require("./action-dropdown-item"));
50
19
 
51
- var getButtonStyle = function getButtonStyle(size, iconOnly) {
52
- switch (size) {
53
- case _constants.SmartLinkSize.Large:
54
- return iconOnly ? (0, _core.css)(_templateObject2 || (_templateObject2 = (0, _taggedTemplateLiteral2.default)(["\n button,\n button:hover,\n button:focus,\n button:active {\n padding: 0;\n > span {\n margin: 0;\n }\n }\n "]))) : '';
20
+ var _actionIcon = _interopRequireDefault(require("./action-icon"));
55
21
 
56
- case _constants.SmartLinkSize.Small:
57
- return (0, _core.css)(_templateObject3 || (_templateObject3 = (0, _taggedTemplateLiteral2.default)(["\n font-size: 0.75rem;\n font-weight: 500;\n line-height: 1rem;\n button,\n button:hover,\n button:focus,\n button:active {\n line-height: 1rem;\n ", "\n }\n "])), iconOnly ? "\n padding: 0.125rem;\n " : "\n padding-left: 0.25rem;\n padding-right: 0.25rem;\n ");
22
+ /** @jsx jsx */
58
23
 
59
- case _constants.SmartLinkSize.XLarge:
60
- case _constants.SmartLinkSize.Medium:
61
- default:
62
- return '';
63
- }
64
- };
65
-
66
- var ActionIcon = function ActionIcon(_ref) {
67
- var size = _ref.size,
68
- testId = _ref.testId,
69
- icon = _ref.icon;
70
- return (0, _core.jsx)("span", {
71
- css: getIconStyles(size),
72
- "data-testid": "".concat(testId, "-icon")
73
- }, icon);
74
- };
75
-
76
- var sizeToSpacing = (_sizeToSpacing = {}, (0, _defineProperty2.default)(_sizeToSpacing, _constants.SmartLinkSize.Small, 'none'), (0, _defineProperty2.default)(_sizeToSpacing, _constants.SmartLinkSize.Medium, 'compact'), (0, _defineProperty2.default)(_sizeToSpacing, _constants.SmartLinkSize.Large, 'compact'), (0, _defineProperty2.default)(_sizeToSpacing, _constants.SmartLinkSize.XLarge, 'default'), _sizeToSpacing);
77
24
  /**
78
25
  * A base action that can be triggered with an on click.
79
26
  * @internal
@@ -82,63 +29,54 @@ var sizeToSpacing = (_sizeToSpacing = {}, (0, _defineProperty2.default)(_sizeToS
82
29
  * @see EditAction
83
30
  * @see CustomAction
84
31
  */
85
-
86
- exports.sizeToSpacing = sizeToSpacing;
87
-
88
- var Action = function Action(_ref2) {
89
- var _ref2$appearance = _ref2.appearance,
90
- appearance = _ref2$appearance === void 0 ? 'subtle' : _ref2$appearance,
91
- content = _ref2.content,
92
- onClick = _ref2.onClick,
93
- _ref2$size = _ref2.size,
94
- size = _ref2$size === void 0 ? _constants.SmartLinkSize.Medium : _ref2$size,
95
- _ref2$testId = _ref2.testId,
96
- testId = _ref2$testId === void 0 ? 'smart-action' : _ref2$testId,
97
- icon = _ref2.icon,
98
- _ref2$iconPosition = _ref2.iconPosition,
99
- iconPosition = _ref2$iconPosition === void 0 ? 'before' : _ref2$iconPosition,
100
- tooltipMessage = _ref2.tooltipMessage,
101
- asDropDownItem = _ref2.asDropDownItem,
102
- overrideCss = _ref2.overrideCss;
32
+ var Action = function Action(_ref) {
33
+ var _ref$appearance = _ref.appearance,
34
+ appearance = _ref$appearance === void 0 ? 'subtle' : _ref$appearance,
35
+ content = _ref.content,
36
+ onClick = _ref.onClick,
37
+ _ref$size = _ref.size,
38
+ size = _ref$size === void 0 ? _constants.SmartLinkSize.Medium : _ref$size,
39
+ _ref$testId = _ref.testId,
40
+ testId = _ref$testId === void 0 ? 'smart-action' : _ref$testId,
41
+ icon = _ref.icon,
42
+ _ref$iconPosition = _ref.iconPosition,
43
+ iconPosition = _ref$iconPosition === void 0 ? 'before' : _ref$iconPosition,
44
+ tooltipMessage = _ref.tooltipMessage,
45
+ asDropDownItem = _ref.asDropDownItem,
46
+ overrideCss = _ref.overrideCss;
103
47
 
104
48
  if (!onClick) {
105
49
  return null;
106
50
  }
107
51
 
108
- var iconBefore = icon && iconPosition === 'before' ? (0, _core.jsx)(ActionIcon, {
109
- size: size,
110
- testId: testId,
111
- icon: icon
112
- }) : undefined;
113
- var iconAfter = icon && iconPosition === 'after' ? (0, _core.jsx)(ActionIcon, {
52
+ var actionIcon = icon && (0, _core.jsx)(_actionIcon.default, {
53
+ icon: icon,
114
54
  size: size,
115
- testId: testId,
116
- icon: icon
117
- }) : undefined;
118
- var iconOnly = !content;
55
+ testId: testId
56
+ });
57
+ var iconBefore = icon && iconPosition === 'before' ? actionIcon : undefined;
58
+ var iconAfter = icon && iconPosition === 'after' ? actionIcon : undefined;
119
59
 
120
60
  if (asDropDownItem) {
121
- return (0, _core.jsx)(_dropdownMenu.DropdownItem, {
122
- elemBefore: iconBefore,
123
- elemAfter: iconAfter,
124
- testId: testId,
125
- onClick: (0, _utils2.handleOnClick)(onClick)
126
- }, content);
61
+ return (0, _core.jsx)(_actionDropdownItem.default, {
62
+ content: content,
63
+ iconAfter: iconAfter,
64
+ iconBefore: iconBefore,
65
+ onClick: onClick,
66
+ testId: testId
67
+ });
127
68
  } else {
128
- return (0, _core.jsx)(_tooltip.default, {
129
- content: tooltipMessage,
130
- testId: "".concat(testId, "-tooltip")
131
- }, (0, _core.jsx)("div", {
132
- css: [getButtonStyle(size, iconOnly), overrideCss],
133
- "data-testid": "".concat(testId, "-button-wrapper")
134
- }, (0, _core.jsx)(_customThemeButton.default, {
135
- spacing: sizeToSpacing[size],
69
+ return (0, _core.jsx)(_actionButton.default, {
136
70
  appearance: appearance,
137
- testId: testId,
138
- onClick: (0, _utils2.handleOnClick)(onClick),
71
+ content: content,
72
+ iconAfter: iconAfter,
139
73
  iconBefore: iconBefore,
140
- iconAfter: iconAfter
141
- }, content)));
74
+ onClick: onClick,
75
+ overrideCss: overrideCss,
76
+ size: size,
77
+ testId: testId,
78
+ tooltipMessage: tooltipMessage
79
+ });
142
80
  }
143
81
  };
144
82
 
@@ -11,6 +11,8 @@ var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends")
11
11
 
12
12
  var _objectWithoutProperties2 = _interopRequireDefault(require("@babel/runtime/helpers/objectWithoutProperties"));
13
13
 
14
+ var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
15
+
14
16
  var _taggedTemplateLiteral2 = _interopRequireDefault(require("@babel/runtime/helpers/taggedTemplateLiteral"));
15
17
 
16
18
  var _react = require("react");
@@ -33,7 +35,7 @@ var _standardButton = _interopRequireDefault(require("@atlaskit/button/standard-
33
35
 
34
36
  var _more = _interopRequireDefault(require("@atlaskit/icon/glyph/more"));
35
37
 
36
- var _action = require("../../actions/action");
38
+ var _utils2 = require("../../utils");
37
39
 
38
40
  var _token = require("../../../../../utils/token");
39
41
 
@@ -62,39 +64,66 @@ var ActionGroup = function ActionGroup(_ref) {
62
64
  visibleButtonsNum = _ref$visibleButtonsNu === void 0 ? 2 : _ref$visibleButtonsNu,
63
65
  onDropdownOpenChange = _ref.onDropdownOpenChange,
64
66
  testId = _ref.testId;
65
- var isMoreThenTwoItems = items.length > visibleButtonsNum;
66
- var firstActions = isMoreThenTwoItems ? items.slice(0, visibleButtonsNum - 1) : items;
67
- var restActions = isMoreThenTwoItems ? items.slice(visibleButtonsNum - 1) : []; // Stop AK dropdown menu to propagate event on click.
67
+
68
+ var _useState = (0, _react.useState)(false),
69
+ _useState2 = (0, _slicedToArray2.default)(_useState, 2),
70
+ isOpen = _useState2[0],
71
+ setIsOpen = _useState2[1];
72
+
73
+ var _useMemo = (0, _react.useMemo)(function () {
74
+ var isMoreThenTwoItems = items.length > visibleButtonsNum;
75
+ var buttons = isMoreThenTwoItems ? items.slice(0, visibleButtonsNum - 1) : items;
76
+ var dropdownItems = isMoreThenTwoItems ? items.slice(visibleButtonsNum - 1) : [];
77
+ return [buttons, dropdownItems];
78
+ }, [items, visibleButtonsNum]),
79
+ _useMemo2 = (0, _slicedToArray2.default)(_useMemo, 2),
80
+ buttonActions = _useMemo2[0],
81
+ dropdownItemActions = _useMemo2[1]; // Stop AK dropdown menu to propagate event on click.
82
+
68
83
 
69
84
  var onClick = (0, _react.useCallback)(function (e) {
70
85
  return e.stopPropagation();
71
86
  }, []);
87
+ var onOpenChange = (0, _react.useCallback)(function (attrs) {
88
+ setIsOpen(attrs.isOpen);
89
+
90
+ if (onDropdownOpenChange) {
91
+ onDropdownOpenChange(attrs.isOpen);
92
+ }
93
+ }, [onDropdownOpenChange]);
94
+ var onActionClick = (0, _react.useCallback)(function () {
95
+ if (isOpen) {
96
+ onOpenChange({
97
+ isOpen: false
98
+ });
99
+ }
100
+ }, [isOpen, onOpenChange]);
72
101
  return (0, _core.jsx)("div", {
73
102
  css: styles,
74
103
  className: "actions-button-group",
75
104
  onClick: onClick
76
- }, (0, _core.jsx)(_buttonGroup.default, null, (0, _utils.renderActionItems)(firstActions, size, appearance), restActions.length > 0 ? (0, _core.jsx)(_dropdownMenu.default, {
77
- onOpenChange: function onOpenChange(_ref2) {
78
- var isOpen = _ref2.isOpen;
79
- return onDropdownOpenChange && onDropdownOpenChange(isOpen);
80
- },
81
- trigger: function trigger(_ref3) {
82
- var triggerRef = _ref3.triggerRef,
83
- props = (0, _objectWithoutProperties2.default)(_ref3, _excluded);
105
+ }, (0, _core.jsx)(_buttonGroup.default, null, (0, _utils.renderActionItems)(buttonActions, size, appearance, false, onActionClick), dropdownItemActions.length > 0 ? (0, _core.jsx)(_dropdownMenu.default, {
106
+ isOpen: isOpen,
107
+ onOpenChange: onOpenChange,
108
+ trigger: function trigger(_ref2) {
109
+ var triggerRef = _ref2.triggerRef,
110
+ props = (0, _objectWithoutProperties2.default)(_ref2, _excluded);
84
111
  return (0, _core.jsx)(_tooltip.default, {
85
112
  content: (0, _core.jsx)(_reactIntlNext.FormattedMessage, _messages.messages.more_actions),
113
+ hideTooltipOnClick: true,
86
114
  testId: "action-group-more-button-tooltip",
87
115
  tag: "span"
88
116
  }, (0, _core.jsx)(_standardButton.default, (0, _extends2.default)({}, props, {
89
- spacing: _action.sizeToSpacing[size],
117
+ spacing: _utils2.sizeToButtonSpacing[size],
90
118
  testId: "action-group-more-button",
91
119
  iconBefore: (0, _core.jsx)(_more.default, {
92
120
  label: "more"
93
121
  }),
94
122
  ref: triggerRef
95
123
  })));
96
- }
97
- }, (0, _utils.renderActionItems)(restActions, size, appearance, true)) : null));
124
+ },
125
+ testId: "action-group-dropdown"
126
+ }, (0, _utils.renderActionItems)(dropdownItemActions, size, appearance, true, onActionClick)) : null));
98
127
  };
99
128
 
100
129
  var _default = ActionGroup;
@@ -155,6 +155,7 @@ var renderActionItems = function renderActionItems() {
155
155
  var size = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : _constants.SmartLinkSize.Medium;
156
156
  var appearance = arguments.length > 2 ? arguments[2] : undefined;
157
157
  var asDropDownItems = arguments.length > 3 ? arguments[3] : undefined;
158
+ var onActionItemClick = arguments.length > 4 ? arguments[4] : undefined;
158
159
  var actions = items.reduce(function (acc, curr, idx) {
159
160
  var name = curr.name,
160
161
  hideContent = curr.hideContent,
@@ -174,12 +175,22 @@ var renderActionItems = function renderActionItems() {
174
175
  }
175
176
 
176
177
  if (Action) {
178
+ var handleOnClick = function handleOnClick() {
179
+ if (onActionItemClick) {
180
+ onActionItemClick();
181
+ }
182
+
183
+ if (onClick) {
184
+ onClick();
185
+ }
186
+ };
187
+
177
188
  return [].concat((0, _toConsumableArray2.default)(acc), [/*#__PURE__*/_react.default.createElement(Action, (0, _extends2.default)({
178
189
  asDropDownItem: asDropDownItems,
179
190
  size: size,
180
191
  key: idx,
181
192
  appearance: appearance,
182
- onClick: onClick
193
+ onClick: handleOnClick
183
194
  }, actionProps))]);
184
195
  }
185
196
 
@@ -5,12 +5,14 @@ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefau
5
5
  Object.defineProperty(exports, "__esModule", {
6
6
  value: true
7
7
  });
8
- exports.hasWhiteSpace = exports.getTruncateStyles = exports.getMaxLines = exports.getMaxLineHeight = exports.getLinkSizeStyles = exports.getLinkLineHeight = exports.getIconWidth = exports.getIconSizeStyles = exports.getFormattedMessage = void 0;
8
+ exports.sizeToButtonSpacing = exports.hasWhiteSpace = exports.getTruncateStyles = exports.getMaxLines = exports.getMaxLineHeight = exports.getLinkSizeStyles = exports.getLinkLineHeight = exports.getIconWidth = exports.getIconSizeStyles = exports.getFormattedMessage = void 0;
9
9
 
10
10
  var _taggedTemplateLiteral2 = _interopRequireDefault(require("@babel/runtime/helpers/taggedTemplateLiteral"));
11
11
 
12
12
  var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
13
13
 
14
+ var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
15
+
14
16
  var _react = _interopRequireDefault(require("react"));
15
17
 
16
18
  var _core = require("@emotion/core");
@@ -19,7 +21,10 @@ var _reactIntlNext = require("react-intl-next");
19
21
 
20
22
  var _constants = require("../../../constants");
21
23
 
22
- var _templateObject, _templateObject2, _templateObject3, _templateObject4, _templateObject5, _templateObject6;
24
+ var _sizeToButtonSpacing, _templateObject, _templateObject2, _templateObject3, _templateObject4, _templateObject5, _templateObject6;
25
+
26
+ var sizeToButtonSpacing = (_sizeToButtonSpacing = {}, (0, _defineProperty2.default)(_sizeToButtonSpacing, _constants.SmartLinkSize.Small, 'none'), (0, _defineProperty2.default)(_sizeToButtonSpacing, _constants.SmartLinkSize.Medium, 'compact'), (0, _defineProperty2.default)(_sizeToButtonSpacing, _constants.SmartLinkSize.Large, 'compact'), (0, _defineProperty2.default)(_sizeToButtonSpacing, _constants.SmartLinkSize.XLarge, 'default'), _sizeToButtonSpacing);
27
+ exports.sizeToButtonSpacing = sizeToButtonSpacing;
23
28
 
24
29
  var getFormattedMessage = function getFormattedMessage(message) {
25
30
  if (message) {
@@ -1,5 +1,5 @@
1
1
  {
2
2
  "name": "@atlaskit/smart-card",
3
- "version": "21.0.2",
3
+ "version": "21.0.3",
4
4
  "sideEffects": false
5
5
  }
@@ -0,0 +1,88 @@
1
+ /** @jsx jsx */
2
+ import React, { useCallback } from 'react';
3
+ import { css, jsx } from '@emotion/core';
4
+ import Button from '@atlaskit/button/custom-theme-button';
5
+ import Tooltip from '@atlaskit/tooltip';
6
+ import { SmartLinkSize } from '../../../../../../constants';
7
+ import { sizeToButtonSpacing } from '../../../utils';
8
+
9
+ const getButtonStyle = (size, iconOnly) => {
10
+ switch (size) {
11
+ case SmartLinkSize.Large:
12
+ return iconOnly ? css`
13
+ button,
14
+ button:hover,
15
+ button:focus,
16
+ button:active {
17
+ padding: 0;
18
+ > span {
19
+ margin: 0;
20
+ }
21
+ }
22
+ ` : '';
23
+
24
+ case SmartLinkSize.Small:
25
+ return css`
26
+ font-size: 0.75rem;
27
+ font-weight: 500;
28
+ line-height: 1rem;
29
+ button,
30
+ button:hover,
31
+ button:focus,
32
+ button:active {
33
+ line-height: 1rem;
34
+ ${iconOnly ? `
35
+ padding: 0.125rem;
36
+ ` : `
37
+ padding-left: 0.25rem;
38
+ padding-right: 0.25rem;
39
+ `}
40
+ }
41
+ `;
42
+
43
+ case SmartLinkSize.XLarge:
44
+ case SmartLinkSize.Medium:
45
+ default:
46
+ return '';
47
+ }
48
+ };
49
+
50
+ const ActionButton = ({
51
+ appearance,
52
+ content,
53
+ iconAfter,
54
+ iconBefore,
55
+ onClick,
56
+ overrideCss,
57
+ size,
58
+ testId,
59
+ tooltipMessage
60
+ }) => {
61
+ const iconOnly = !content;
62
+ const onButtonClick = useCallback(handler => e => {
63
+ e.preventDefault();
64
+ handler();
65
+ }, []);
66
+ const onContainerClick = useCallback(e => {
67
+ // Stop button on click event from propagate into parent container.
68
+ e.stopPropagation();
69
+ }, []);
70
+ return jsx("div", {
71
+ css: [getButtonStyle(size, iconOnly), overrideCss],
72
+ "data-testid": `${testId}-button-wrapper`,
73
+ onClick: onContainerClick
74
+ }, jsx(Tooltip, {
75
+ content: tooltipMessage,
76
+ hideTooltipOnClick: true,
77
+ testId: `${testId}-tooltip`
78
+ }, jsx(Button, {
79
+ appearance: appearance,
80
+ iconAfter: iconAfter,
81
+ iconBefore: iconBefore,
82
+ onClick: onButtonClick(onClick),
83
+ spacing: sizeToButtonSpacing[size],
84
+ testId: testId
85
+ }, content)));
86
+ };
87
+
88
+ export default ActionButton;