@atlaskit/reactions 21.6.2 → 21.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.
Files changed (77) hide show
  1. package/CHANGELOG.md +16 -0
  2. package/dist/cjs/MockReactionsClient.js +3 -1
  3. package/dist/cjs/components/EmojiButton/EmojiButton.js +6 -1
  4. package/dist/cjs/components/Reaction/Reaction.js +8 -5
  5. package/dist/cjs/components/ReactionPicker/ReactionPicker.js +39 -49
  6. package/dist/cjs/components/ReactionPicker/styles.js +3 -1
  7. package/dist/cjs/components/Reactions/Reactions.js +33 -38
  8. package/dist/cjs/components/Reactions/index.js +0 -6
  9. package/dist/cjs/components/ShowMore/ShowMore.js +1 -1
  10. package/dist/cjs/components/Trigger/Trigger.js +21 -7
  11. package/dist/cjs/components/Trigger/index.js +6 -0
  12. package/dist/cjs/components/Trigger/styles.js +10 -4
  13. package/dist/cjs/hooks/useClickAway.js +5 -3
  14. package/dist/cjs/shared/i18n.js +10 -0
  15. package/dist/cjs/types/reaction.js +5 -0
  16. package/dist/cjs/version.json +1 -1
  17. package/dist/es2019/MockReactionsClient.js +1 -1
  18. package/dist/es2019/components/EmojiButton/EmojiButton.js +6 -2
  19. package/dist/es2019/components/Reaction/Reaction.js +8 -6
  20. package/dist/es2019/components/ReactionPicker/ReactionPicker.js +21 -8
  21. package/dist/es2019/components/ReactionPicker/styles.js +3 -1
  22. package/dist/es2019/components/Reactions/Reactions.js +32 -33
  23. package/dist/es2019/components/Reactions/index.js +1 -1
  24. package/dist/es2019/components/ShowMore/ShowMore.js +1 -1
  25. package/dist/es2019/components/Trigger/Trigger.js +17 -5
  26. package/dist/es2019/components/Trigger/index.js +1 -1
  27. package/dist/es2019/components/Trigger/styles.js +10 -5
  28. package/dist/es2019/hooks/useClickAway.js +5 -4
  29. package/dist/es2019/shared/i18n.js +10 -0
  30. package/dist/es2019/types/reaction.js +5 -0
  31. package/dist/es2019/version.json +1 -1
  32. package/dist/esm/MockReactionsClient.js +1 -3
  33. package/dist/esm/components/EmojiButton/EmojiButton.js +6 -2
  34. package/dist/esm/components/Reaction/Reaction.js +8 -6
  35. package/dist/esm/components/ReactionPicker/ReactionPicker.js +38 -49
  36. package/dist/esm/components/ReactionPicker/styles.js +3 -1
  37. package/dist/esm/components/Reactions/Reactions.js +30 -33
  38. package/dist/esm/components/Reactions/index.js +1 -1
  39. package/dist/esm/components/ShowMore/ShowMore.js +1 -1
  40. package/dist/esm/components/Trigger/Trigger.js +18 -6
  41. package/dist/esm/components/Trigger/index.js +1 -1
  42. package/dist/esm/components/Trigger/styles.js +11 -5
  43. package/dist/esm/hooks/useClickAway.js +5 -3
  44. package/dist/esm/shared/i18n.js +10 -0
  45. package/dist/esm/types/reaction.js +5 -0
  46. package/dist/esm/version.json +1 -1
  47. package/dist/types/MockReactionsClient.d.ts +3 -0
  48. package/dist/types/components/FlashAnimation/styles.d.ts +3 -1
  49. package/dist/types/components/ReactionPicker/ReactionPicker.d.ts +2 -5
  50. package/dist/types/components/Reactions/Reactions.d.ts +7 -15
  51. package/dist/types/components/Reactions/index.d.ts +1 -1
  52. package/dist/types/components/Selector/Selector.d.ts +1 -1
  53. package/dist/types/components/Selector/styles.d.ts +3 -1
  54. package/dist/types/components/Trigger/Trigger.d.ts +9 -1
  55. package/dist/types/components/Trigger/index.d.ts +1 -1
  56. package/dist/types/containers/ConnectedReactionsView/ConnectedReactionsView.d.ts +1 -1
  57. package/dist/types/hooks/useClickAway.d.ts +2 -1
  58. package/dist/types/shared/i18n.d.ts +10 -0
  59. package/dist/types/types/Actions.d.ts +2 -2
  60. package/dist/types/types/index.d.ts +1 -1
  61. package/dist/types/types/reaction.d.ts +19 -1
  62. package/dist/types-ts4.0/MockReactionsClient.d.ts +3 -0
  63. package/dist/types-ts4.0/components/FlashAnimation/styles.d.ts +3 -1
  64. package/dist/types-ts4.0/components/ReactionPicker/ReactionPicker.d.ts +2 -5
  65. package/dist/types-ts4.0/components/Reactions/Reactions.d.ts +7 -15
  66. package/dist/types-ts4.0/components/Reactions/index.d.ts +1 -1
  67. package/dist/types-ts4.0/components/Selector/Selector.d.ts +1 -1
  68. package/dist/types-ts4.0/components/Selector/styles.d.ts +3 -1
  69. package/dist/types-ts4.0/components/Trigger/Trigger.d.ts +9 -1
  70. package/dist/types-ts4.0/components/Trigger/index.d.ts +1 -1
  71. package/dist/types-ts4.0/containers/ConnectedReactionsView/ConnectedReactionsView.d.ts +1 -1
  72. package/dist/types-ts4.0/hooks/useClickAway.d.ts +2 -1
  73. package/dist/types-ts4.0/shared/i18n.d.ts +10 -0
  74. package/dist/types-ts4.0/types/Actions.d.ts +2 -2
  75. package/dist/types-ts4.0/types/index.d.ts +1 -1
  76. package/dist/types-ts4.0/types/reaction.d.ts +19 -1
  77. package/package.json +6 -5
package/CHANGELOG.md CHANGED
@@ -1,5 +1,21 @@
1
1
  # @atlaskit/reactions
2
2
 
3
+ ## 21.7.0
4
+
5
+ ### Minor Changes
6
+
7
+ - [`e2635f36d53`](https://bitbucket.org/atlassian/atlassian-frontend/commits/e2635f36d53) - Adds new optional prop to <ReactionPicker /> component to setup the content for the tooltip on the add new reaction element
8
+ [ux] This adds a border around the Add reaction button according with new design requirements
9
+ - [`ce1ceee9114`](https://bitbucket.org/atlassian/atlassian-frontend/commits/ce1ceee9114) - Refactor props of <Reactions /> component to better infer types from quickReactionEmojiIds to quickReactionEmojis
10
+
11
+ ### Patch Changes
12
+
13
+ - [`4b6f775e6c0`](https://bitbucket.org/atlassian/atlassian-frontend/commits/4b6f775e6c0) - update reaction picker position at the edge of window
14
+ - [`b2be1d1c8d2`](https://bitbucket.org/atlassian/atlassian-frontend/commits/b2be1d1c8d2) - removing title of reaction buttons
15
+ - [`458aabb9add`](https://bitbucket.org/atlassian/atlassian-frontend/commits/458aabb9add) - Remove tooltip when reactions are disabled
16
+ - [`a62cf3c2b49`](https://bitbucket.org/atlassian/atlassian-frontend/commits/a62cf3c2b49) - fix emoji upload in reaction picker
17
+ - Updated dependencies
18
+
3
19
  ## 21.6.2
4
20
 
5
21
  ### Patch Changes
@@ -5,7 +5,7 @@ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefau
5
5
  Object.defineProperty(exports, "__esModule", {
6
6
  value: true
7
7
  });
8
- exports.getUser = exports.getReactionSummary = exports.containerAri = exports.ari = exports.MockReactionsClient = void 0;
8
+ exports.mockData = exports.getUser = exports.getReactionSummary = exports.containerAri = exports.ari = exports.MockReactionsClient = void 0;
9
9
 
10
10
  var _regenerator = _interopRequireDefault(require("@babel/runtime/regenerator"));
11
11
 
@@ -61,6 +61,8 @@ var mockData = (0, _defineProperty2.default)({}, getReactionKey(containerAri, ar
61
61
  * Mocked version of the client to fetch user information
62
62
  */
63
63
 
64
+ exports.mockData = mockData;
65
+
64
66
  var MockReactionsClient = /*#__PURE__*/function () {
65
67
  function MockReactionsClient() {
66
68
  var _this = this;
@@ -11,6 +11,8 @@ exports.RENDER_BUTTON_TESTID = exports.EmojiButton = void 0;
11
11
 
12
12
  var _react = _interopRequireDefault(require("react"));
13
13
 
14
+ var _reactIntlNext = require("react-intl-next");
15
+
14
16
  var _core = require("@emotion/core");
15
17
 
16
18
  var _emoji = require("@atlaskit/emoji");
@@ -43,10 +45,13 @@ var EmojiButton = function EmojiButton(_ref) {
43
45
  }
44
46
  };
45
47
 
48
+ var intl = (0, _reactIntlNext.useIntl)();
46
49
  return (0, _core.jsx)("button", {
47
50
  "data-testid": RENDER_BUTTON_TESTID,
48
51
  onClick: onButtonClick,
49
- title: emojiId.shortName,
52
+ "aria-label": intl.formatMessage(_shared.i18n.messages.reactWithEmoji, {
53
+ emoji: emojiId.shortName
54
+ }),
50
55
  type: "button",
51
56
  css: styles.emojiButtonStyle
52
57
  }, (0, _core.jsx)(_emoji.ResourcedEmoji, {
@@ -17,6 +17,8 @@ var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/sli
17
17
 
18
18
  var _react = _interopRequireWildcard(require("react"));
19
19
 
20
+ var _reactIntlNext = require("react-intl-next");
21
+
20
22
  var _core = require("@emotion/core");
21
23
 
22
24
  var _analyticsNext = require("@atlaskit/analytics-next");
@@ -87,10 +89,7 @@ var Reaction = function Reaction(_ref) {
87
89
  case 2:
88
90
  emojiResource = _context.sent;
89
91
  _context.next = 5;
90
- return emojiResource.findByEmojiId({
91
- shortName: '',
92
- id: reaction.emojiId
93
- });
92
+ return emojiResource.findById(reaction.emojiId);
94
93
 
95
94
  case 5:
96
95
  foundEmoji = _context.sent;
@@ -132,14 +131,18 @@ var Reaction = function Reaction(_ref) {
132
131
  onMouseEnter(reaction, event);
133
132
  }
134
133
  }, [createAnalyticsEvent, reaction, onMouseEnter]);
134
+ var intl = (0, _reactIntlNext.useIntl)();
135
135
  return (0, _core.jsx)(_ReactionTooltip.ReactionTooltip, {
136
136
  emojiName: emojiName,
137
137
  reaction: reaction
138
138
  }, (0, _core.jsx)("button", {
139
139
  className: className,
140
140
  css: [styles.reactionStyle, reaction.reacted && styles.reactedStyle],
141
- title: reaction.emojiId,
141
+ "aria-label": intl.formatMessage(_shared.i18n.messages.reactWithEmoji, {
142
+ emoji: emojiName
143
+ }),
142
144
  type: "button",
145
+ "data-emoji-id": reaction.emojiId,
143
146
  "data-testid": RENDER_REACTION_TESTID,
144
147
  onMouseUp: handleMouseUp,
145
148
  onMouseEnter: handleMouseEnter
@@ -9,18 +9,16 @@ Object.defineProperty(exports, "__esModule", {
9
9
  });
10
10
  exports.ReactionPicker = exports.RENDER_REACTIONPICKER_TESTID = void 0;
11
11
 
12
- var _regenerator = _interopRequireDefault(require("@babel/runtime/regenerator"));
13
-
14
12
  var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
15
13
 
16
- var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator"));
17
-
18
14
  var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
19
15
 
20
16
  var _react = _interopRequireWildcard(require("react"));
21
17
 
22
18
  var _core = require("@emotion/core");
23
19
 
20
+ var _reactIntlNext = require("react-intl-next");
21
+
24
22
  var _picker = require("@atlaskit/emoji/picker");
25
23
 
26
24
  var _popper = require("@atlaskit/popper");
@@ -33,6 +31,8 @@ var _Trigger = require("../Trigger");
33
31
 
34
32
  var _analytics = require("../../analytics");
35
33
 
34
+ var _shared = require("../../shared");
35
+
36
36
  var _hooks = require("../../hooks");
37
37
 
38
38
  var styles = _interopRequireWildcard(require("./styles"));
@@ -91,7 +91,9 @@ var ReactionPicker = /*#__PURE__*/_react.default.memo(function (props) {
91
91
  pickerQuickReactionEmojiIds = props.pickerQuickReactionEmojiIds,
92
92
  onShowMore = props.onShowMore,
93
93
  onOpen = props.onOpen,
94
- onCancel = props.onCancel;
94
+ onCancel = props.onCancel,
95
+ _props$tooltipContent = props.tooltipContent,
96
+ tooltipContent = _props$tooltipContent === void 0 ? (0, _core.jsx)(_reactIntlNext.FormattedMessage, _shared.i18n.messages.addReaction) : _props$tooltipContent;
95
97
  /**
96
98
  * Container <div /> reference (used by custom hook to detect click outside)
97
99
  */
@@ -101,9 +103,7 @@ var ReactionPicker = /*#__PURE__*/_react.default.memo(function (props) {
101
103
  * a function you can ask Popper to recompute your tooltip's position. It will directly call the Popper#update method
102
104
  */
103
105
 
104
- var updatePopper = (0, _react.useRef)(function () {
105
- return Promise.resolve();
106
- });
106
+ var updatePopper = (0, _react.useRef)();
107
107
 
108
108
  var _useState = (0, _react.useState)({
109
109
  /**
@@ -130,7 +130,7 @@ var ReactionPicker = /*#__PURE__*/_react.default.memo(function (props) {
130
130
  }
131
131
 
132
132
  close();
133
- });
133
+ }, 'click', true);
134
134
  /**
135
135
  * Event callback when the picker is closed
136
136
  * @param _id Optional id if an emoji button was selected or undefineed if was clicked outside the picker
@@ -155,39 +155,17 @@ var ReactionPicker = /*#__PURE__*/_react.default.memo(function (props) {
155
155
  * @param e event param
156
156
  */
157
157
 
158
- var onSelectMoreClick = (0, _react.useCallback)( /*#__PURE__*/function () {
159
- var _ref = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee(e) {
160
- return _regenerator.default.wrap(function _callee$(_context) {
161
- while (1) {
162
- switch (_context.prev = _context.next) {
163
- case 0:
164
- e.preventDefault();
165
- _context.next = 3;
166
- return updatePopper.current();
167
-
168
- case 3:
169
- // Update popper position
170
- setSettings({
171
- isOpen: true,
172
- showFullPicker: true
173
- });
174
-
175
- if (onShowMore) {
176
- onShowMore();
177
- }
178
-
179
- case 5:
180
- case "end":
181
- return _context.stop();
182
- }
183
- }
184
- }, _callee);
185
- }));
186
-
187
- return function (_x) {
188
- return _ref.apply(this, arguments);
189
- };
190
- }(), [onShowMore]);
158
+ var onSelectMoreClick = (0, _react.useCallback)(function (e) {
159
+ e.preventDefault();
160
+ setSettings({
161
+ isOpen: true,
162
+ showFullPicker: true
163
+ });
164
+
165
+ if (onShowMore) {
166
+ onShowMore();
167
+ }
168
+ }, [onShowMore]);
191
169
  /**
192
170
  * Event callback when an emoji icon is selected
193
171
  * @param item selected item
@@ -222,30 +200,42 @@ var ReactionPicker = /*#__PURE__*/_react.default.memo(function (props) {
222
200
 
223
201
  _analytics.UFO.PickerRender.success();
224
202
  };
203
+ /**
204
+ * When picker is opened, re-calculate the picker position
205
+ */
225
206
 
207
+
208
+ (0, _react.useEffect)(function () {
209
+ if (settings.isOpen) {
210
+ if (updatePopper.current) {
211
+ updatePopper.current();
212
+ }
213
+ }
214
+ }, [settings]);
226
215
  var wrapperClassName = " ".concat(settings.isOpen ? 'isOpen' : '', " ").concat(miniMode ? 'miniMode' : '', " ").concat(className);
227
216
  return (0, _core.jsx)("div", {
228
217
  className: wrapperClassName,
229
218
  css: styles.pickerStyle,
230
219
  ref: wrapperRef,
231
220
  "data-testid": RENDER_REACTIONPICKER_TESTID
232
- }, (0, _core.jsx)(_popper.Manager, null, (0, _core.jsx)(_popper.Reference, null, function (_ref2) {
233
- var popperRef = _ref2.ref;
221
+ }, (0, _core.jsx)(_popper.Manager, null, (0, _core.jsx)(_popper.Reference, null, function (_ref) {
222
+ var popperRef = _ref.ref;
234
223
  return (// Render a button to open the <Selector /> panel
235
224
  (0, _core.jsx)(_Trigger.Trigger, {
236
225
  ref: popperRef,
237
226
  onClick: onTriggerClick,
238
227
  miniMode: miniMode,
239
- disabled: disabled
228
+ disabled: disabled,
229
+ tooltipContent: tooltipContent
240
230
  })
241
231
  );
242
232
  }), (0, _core.jsx)(_popper.Popper, {
243
233
  placement: "bottom-start",
244
234
  modifiers: popperModifiers
245
- }, function (_ref3) {
246
- var ref = _ref3.ref,
247
- style = _ref3.style,
248
- update = _ref3.update;
235
+ }, function (_ref2) {
236
+ var ref = _ref2.ref,
237
+ style = _ref2.style,
238
+ update = _ref2.update;
249
239
  updatePopper.current = update;
250
240
  return (0, _core.jsx)(_react.Fragment, null, settings.isOpen && (0, _core.jsx)("div", {
251
241
  style: _objectSpread({
@@ -31,7 +31,9 @@ var popupStyle = (0, _core.css)({
31
31
  borderRadius: "".concat((0, _constants.borderRadius)(), "px"),
32
32
  boxShadow: (0, _tokens.token)('elevation.shadow.overlay', "0 4px 8px -2px ".concat(_colors.N50A, ", 0 0 1px ").concat(_colors.N60A)),
33
33
  '&> div': {
34
- boxShadow: undefined
34
+ boxShadow: undefined,
35
+ marginTop: '4px',
36
+ marginBottom: '4px'
35
37
  }
36
38
  });
37
39
  exports.popupStyle = popupStyle;
@@ -1,13 +1,12 @@
1
1
  "use strict";
2
2
 
3
- var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
-
5
3
  var _typeof = require("@babel/runtime/helpers/typeof");
6
4
 
7
5
  Object.defineProperty(exports, "__esModule", {
8
6
  value: true
9
7
  });
10
- exports.Reactions = exports.RENDER_TOOLTIP_TESTID = exports.RENDER_REACTIONS_TESTID = void 0;
8
+ exports.Reactions = exports.RENDER_REACTIONS_TESTID = void 0;
9
+ exports.getTooltip = getTooltip;
11
10
 
12
11
  var _react = _interopRequireWildcard(require("react"));
13
12
 
@@ -15,8 +14,6 @@ var _core = require("@emotion/core");
15
14
 
16
15
  var _analyticsNext = require("@atlaskit/analytics-next");
17
16
 
18
- var _tooltip = _interopRequireDefault(require("@atlaskit/tooltip"));
19
-
20
17
  var _reactIntlNext = require("react-intl-next");
21
18
 
22
19
  var _analytics = require("../../analytics");
@@ -41,26 +38,40 @@ function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj &&
41
38
  * Test id for wrapper Reactions div
42
39
  */
43
40
  var RENDER_REACTIONS_TESTID = 'render-reactions';
41
+ exports.RENDER_REACTIONS_TESTID = RENDER_REACTIONS_TESTID;
42
+
44
43
  /**
45
- * Test id for the tooltip
44
+ * Get content of the tooltip
46
45
  */
46
+ function getTooltip(status, errorMessage) {
47
+ switch (status) {
48
+ case _types.ReactionStatus.error:
49
+ return errorMessage || (0, _core.jsx)(_reactIntlNext.FormattedMessage, _shared.i18n.messages.unexpectedError);
50
+ // When reaction is not available don't show any tooltip (e.g. Archive page in Confluence)
47
51
 
48
- exports.RENDER_REACTIONS_TESTID = RENDER_REACTIONS_TESTID;
49
- var RENDER_TOOLTIP_TESTID = 'render-tooltip';
50
- exports.RENDER_TOOLTIP_TESTID = RENDER_TOOLTIP_TESTID;
52
+ case _types.ReactionStatus.disabled:
53
+ return null;
54
+
55
+ case _types.ReactionStatus.notLoaded:
56
+ case _types.ReactionStatus.loading:
57
+ return (0, _core.jsx)(_reactIntlNext.FormattedMessage, _shared.i18n.messages.loadingReactions);
51
58
 
59
+ case _types.ReactionStatus.ready:
60
+ return (0, _core.jsx)(_reactIntlNext.FormattedMessage, _shared.i18n.messages.addReaction);
61
+ }
62
+ }
52
63
  /**
53
64
  * Renders list of reactions
54
65
  */
66
+
67
+
55
68
  var Reactions = /*#__PURE__*/_react.default.memo(function (_ref) {
56
69
  var _ref$flash = _ref.flash,
57
70
  flash = _ref$flash === void 0 ? {} : _ref$flash,
58
71
  status = _ref.status,
59
72
  errorMessage = _ref.errorMessage,
60
73
  loadReaction = _ref.loadReaction,
61
- quickReactionEmojiIds = _ref.quickReactionEmojiIds,
62
- containerAri = _ref.containerAri,
63
- ari = _ref.ari,
74
+ quickReactionEmojis = _ref.quickReactionEmojis,
64
75
  pickerQuickReactionEmojiIds = _ref.pickerQuickReactionEmojiIds,
65
76
  onReactionHover = _ref.onReactionHover,
66
77
  onSelection = _ref.onSelection,
@@ -92,23 +103,6 @@ var Reactions = /*#__PURE__*/_react.default.memo(function (_ref) {
92
103
  renderTime.current = undefined;
93
104
  }
94
105
  }, [createAnalyticsEvent, status]);
95
- /**
96
- * Get content of the tooltip
97
- */
98
-
99
- var getTooltip = function getTooltip() {
100
- switch (status) {
101
- case _types.ReactionStatus.error:
102
- return errorMessage || (0, _core.jsx)(_reactIntlNext.FormattedMessage, _shared.i18n.messages.unexpectedError);
103
-
104
- case _types.ReactionStatus.loading:
105
- case _types.ReactionStatus.notLoaded:
106
- return (0, _core.jsx)(_reactIntlNext.FormattedMessage, _shared.i18n.messages.loadingReactions);
107
-
108
- default:
109
- return undefined;
110
- }
111
- };
112
106
 
113
107
  var handleReactionMouseEnter = function handleReactionMouseEnter(summary) {
114
108
  if (onReactionHover) {
@@ -147,12 +141,15 @@ var Reactions = /*#__PURE__*/_react.default.memo(function (_ref) {
147
141
  /**
148
142
  * If reactions not empty, don't show quick reactions Pre defined emoji or if its empty => return the current list of reactions
149
143
  */
150
- if (reactions.length > 0 || !quickReactionEmojiIds) {
144
+ if (reactions.length > 0 || !quickReactionEmojis) {
151
145
  return reactions;
152
146
  } // add any missing default reactions
153
147
 
154
148
 
155
- var items = quickReactionEmojiIds.filter(function (emojiId) {
149
+ var ari = quickReactionEmojis.ari,
150
+ containerAri = quickReactionEmojis.containerAri,
151
+ emojiIds = quickReactionEmojis.emojiIds;
152
+ var items = emojiIds.filter(function (emojiId) {
156
153
  return !reactions.some(function (reaction) {
157
154
  return reaction.emojiId === emojiId;
158
155
  });
@@ -166,7 +163,7 @@ var Reactions = /*#__PURE__*/_react.default.memo(function (_ref) {
166
163
  };
167
164
  });
168
165
  return reactions.concat(items);
169
- }, [ari, containerAri, quickReactionEmojiIds, reactions]);
166
+ }, [quickReactionEmojis, reactions]);
170
167
  return (0, _core.jsx)("div", {
171
168
  css: styles.wrapperStyle,
172
169
  "data-testid": RENDER_REACTIONS_TESTID
@@ -180,10 +177,7 @@ var Reactions = /*#__PURE__*/_react.default.memo(function (_ref) {
180
177
  onMouseEnter: handleReactionMouseEnter,
181
178
  flash: flash[reaction.emojiId]
182
179
  });
183
- }), (0, _core.jsx)(_tooltip.default, {
184
- testId: RENDER_TOOLTIP_TESTID,
185
- content: getTooltip()
186
- }, (0, _core.jsx)(_ReactionPicker.ReactionPicker, {
180
+ }), (0, _core.jsx)(_ReactionPicker.ReactionPicker, {
187
181
  css: styles.reactionStyle,
188
182
  emojiProvider: emojiProvider,
189
183
  miniMode: true,
@@ -193,8 +187,9 @@ var Reactions = /*#__PURE__*/_react.default.memo(function (_ref) {
193
187
  onSelection: handleOnSelection,
194
188
  onOpen: handlePickerOpen,
195
189
  onCancel: handleOnCancel,
196
- onShowMore: handleOnMore
197
- })));
190
+ onShowMore: handleOnMore,
191
+ tooltipContent: getTooltip(status, errorMessage)
192
+ }));
198
193
  });
199
194
 
200
195
  exports.Reactions = Reactions;
@@ -9,12 +9,6 @@ Object.defineProperty(exports, "RENDER_REACTIONS_TESTID", {
9
9
  return _Reactions.RENDER_REACTIONS_TESTID;
10
10
  }
11
11
  });
12
- Object.defineProperty(exports, "RENDER_TOOLTIP_TESTID", {
13
- enumerable: true,
14
- get: function get() {
15
- return _Reactions.RENDER_TOOLTIP_TESTID;
16
- }
17
- });
18
12
  Object.defineProperty(exports, "Reactions", {
19
13
  enumerable: true,
20
14
  get: function get() {
@@ -57,7 +57,7 @@ var ShowMore = function ShowMore(_ref) {
57
57
  }, (0, _core.jsx)("button", {
58
58
  className: className.button,
59
59
  css: [styles.moreButtonStyle, buttonStyle],
60
- title: _shared.i18n.messages.moreEmoji.defaultMessage,
60
+ "aria-label": _shared.i18n.messages.moreEmoji.defaultMessage,
61
61
  type: "button",
62
62
  style: style.button,
63
63
  onMouseDown: onClick,
@@ -7,7 +7,7 @@ var _typeof = require("@babel/runtime/helpers/typeof");
7
7
  Object.defineProperty(exports, "__esModule", {
8
8
  value: true
9
9
  });
10
- exports.Trigger = void 0;
10
+ exports.Trigger = exports.RENDER_TOOLTIP_TRIGGER_TESTID = void 0;
11
11
 
12
12
  var _react = _interopRequireDefault(require("react"));
13
13
 
@@ -15,6 +15,8 @@ var _core = require("@emotion/core");
15
15
 
16
16
  var _standardButton = _interopRequireDefault(require("@atlaskit/button/standard-button"));
17
17
 
18
+ var _tooltip = _interopRequireDefault(require("@atlaskit/tooltip"));
19
+
18
20
  var _emojiAdd = _interopRequireDefault(require("@atlaskit/icon/glyph/emoji-add"));
19
21
 
20
22
  var styles = _interopRequireWildcard(require("./styles"));
@@ -26,20 +28,32 @@ function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj &&
26
28
  /** @jsx jsx */
27
29
 
28
30
  /**
29
- * Render a button to open the reactions picker
31
+ * Test id for the tooltip
32
+ */
33
+ var RENDER_TOOLTIP_TRIGGER_TESTID = 'render-tooltip-trigger';
34
+ exports.RENDER_TOOLTIP_TRIGGER_TESTID = RENDER_TOOLTIP_TRIGGER_TESTID;
35
+
36
+ /**
37
+ * Render an emoji button to open the reactions select picker
30
38
  */
31
39
  var Trigger = /*#__PURE__*/_react.default.forwardRef(function (props, ref) {
32
- var miniMode = props.miniMode,
40
+ var onClick = props.onClick,
41
+ miniMode = props.miniMode,
42
+ tooltipContent = props.tooltipContent,
33
43
  _props$disabled = props.disabled,
34
44
  disabled = _props$disabled === void 0 ? false : _props$disabled;
35
45
 
36
46
  var handleMouseDown = function handleMouseDown(e, analyticsEvent) {
37
- if (props.onClick && !props.disabled) {
38
- props.onClick(e, analyticsEvent);
47
+ if (onClick && !disabled) {
48
+ onClick(e, analyticsEvent);
39
49
  }
40
50
  };
41
51
 
42
- return (0, _core.jsx)(_standardButton.default, {
52
+ return (0, _core.jsx)(_tooltip.default, {
53
+ testId: RENDER_TOOLTIP_TRIGGER_TESTID,
54
+ content: tooltipContent,
55
+ position: "top"
56
+ }, (0, _core.jsx)(_standardButton.default, {
43
57
  css: styles.triggerStyle({
44
58
  miniMode: miniMode,
45
59
  disabled: disabled
@@ -53,7 +67,7 @@ var Trigger = /*#__PURE__*/_react.default.forwardRef(function (props, ref) {
53
67
  }),
54
68
  spacing: "none",
55
69
  ref: ref
56
- });
70
+ }));
57
71
  });
58
72
 
59
73
  exports.Trigger = Trigger;
@@ -3,6 +3,12 @@
3
3
  Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
+ Object.defineProperty(exports, "RENDER_TOOLTIP_TRIGGER_TESTID", {
7
+ enumerable: true,
8
+ get: function get() {
9
+ return _Trigger.RENDER_TOOLTIP_TRIGGER_TESTID;
10
+ }
11
+ });
6
12
  Object.defineProperty(exports, "Trigger", {
7
13
  enumerable: true,
8
14
  get: function get() {
@@ -27,19 +27,25 @@ var triggerStyle = function triggerStyle(_ref) {
27
27
  miniMode = _ref$miniMode === void 0 ? false : _ref$miniMode,
28
28
  _ref$disabled = _ref.disabled,
29
29
  disabled = _ref$disabled === void 0 ? false : _ref$disabled;
30
- return (0, _core.css)(_objectSpread(_objectSpread({
31
- width: '32px',
30
+ return (0, _core.css)(_objectSpread(_objectSpread(_objectSpread({
31
+ minWidth: '32px',
32
32
  height: '32px',
33
33
  display: 'flex',
34
34
  justifyContent: 'center',
35
35
  alignItems: 'center',
36
36
  lineHeight: '16px'
37
37
  }, miniMode && {
38
- width: '24px',
39
- height: '24px'
38
+ height: '24px',
39
+ padding: 0,
40
+ border: "1px solid ".concat((0, _tokens.token)('color.border', _colors.N40)),
41
+ borderRadius: '20px'
40
42
  }), disabled && {
41
43
  color: DISABLED_BUTTON_COLOR,
42
44
  cursor: 'not-allowed'
45
+ }), {}, {
46
+ '&:hover': {
47
+ background: "".concat((0, _tokens.token)('color.background.neutral.subtle.hovered', _colors.N20))
48
+ }
43
49
  }));
44
50
  };
45
51
 
@@ -12,9 +12,11 @@ var _react = require("react");
12
12
  * @param ref ref object to an html element
13
13
  * @param callback event callback when detected a click outside the ref object
14
14
  * @param type (Optional) type of event to listen to. @default click
15
+ * @param useCapture (Optional) use capture phase of event. @default false
15
16
  */
16
17
  function useClickAway(ref, callback) {
17
18
  var type = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 'click';
19
+ var useCapture = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : false;
18
20
  (0, _react.useEffect)(function () {
19
21
  /**
20
22
  * Alert if clicked on outside of element
@@ -26,10 +28,10 @@ function useClickAway(ref, callback) {
26
28
  } // Bind the event listener
27
29
 
28
30
 
29
- document.addEventListener(type, handleClickOutside);
31
+ document.addEventListener(type, handleClickOutside, useCapture);
30
32
  return function () {
31
33
  // Unbind the event listener on clean up
32
- document.removeEventListener(type, handleClickOutside);
34
+ document.removeEventListener(type, handleClickOutside, useCapture);
33
35
  };
34
- }, [ref, callback, type]);
36
+ }, [ref, callback, type, useCapture]);
35
37
  }
@@ -8,6 +8,11 @@ exports.messages = void 0;
8
8
  var _reactIntlNext = require("react-intl-next");
9
9
 
10
10
  var messages = (0, _reactIntlNext.defineMessages)({
11
+ addReaction: {
12
+ id: 'fabric.reactions.add',
13
+ defaultMessage: 'Add reaction',
14
+ description: 'Message for add reaction button'
15
+ },
11
16
  loadingReactions: {
12
17
  id: 'fabric.reactions.loading',
13
18
  defaultMessage: 'Loading...',
@@ -18,6 +23,11 @@ var messages = (0, _reactIntlNext.defineMessages)({
18
23
  defaultMessage: 'More emojis',
19
24
  description: 'Tooltip of the "show more" button in the quick reaction selector. The full emoji selector is displayed when the user clicks on it.'
20
25
  },
26
+ reactWithEmoji: {
27
+ id: 'fabric.reactions.reactwithemoji',
28
+ defaultMessage: 'React with {emoji} emoji',
29
+ description: 'Aria label on reaction button'
30
+ },
21
31
  unexpectedError: {
22
32
  id: 'fabric.reactions.error.unexpected',
23
33
  defaultMessage: 'Reactions are temporarily unavailable',
@@ -13,6 +13,10 @@ exports.ReactionStatus = void 0;
13
13
  * MetaData for Reaction object
14
14
  */
15
15
 
16
+ /**
17
+ * Metadata for composing a summary of emojis that will be shown in the the primary view even if the reaction count is zero
18
+ */
19
+
16
20
  /**
17
21
  * Event handler for when the user clicks on the reaction
18
22
  * @param id give id for the emoji
@@ -40,4 +44,5 @@ exports.ReactionStatus = ReactionStatus;
40
44
  ReactionStatus["loading"] = "LOADING";
41
45
  ReactionStatus["error"] = "ERROR";
42
46
  ReactionStatus["notLoaded"] = "NOT_LOADED";
47
+ ReactionStatus["disabled"] = "DISABLED";
43
48
  })(ReactionStatus || (exports.ReactionStatus = ReactionStatus = {}));
@@ -1,4 +1,4 @@
1
1
  {
2
2
  "name": "@atlaskit/reactions",
3
- "version": "21.6.2"
3
+ "version": "21.7.0"
4
4
  }
@@ -21,7 +21,7 @@ const getReactionKey = (containerAri, ari) => {
21
21
  };
22
22
 
23
23
  const defaultUsers = [getUser('oscar', 'Oscar Wallhult'), getUser('julien', 'Julien Michel Hoarau'), getUser('craig', 'Craig Petchell'), getUser('jerome', 'Jerome Touffe-Blin'), getUser('esoares', 'Eduardo Soares'), getUser('lpereira', 'Luiz Pereira'), getUser('pcurren', 'Paul Curren'), getUser('ttjandra', 'Tara Tjandra'), getUser('severington', 'Ste Everington'), getUser('sguillope', 'Sylvain Guillope'), getUser('alunnon', 'Alex Lunnon')];
24
- const mockData = {
24
+ export const mockData = {
25
25
  [getReactionKey(containerAri, ari)]: [getReactionSummary(':fire:', 1, true), getReactionSummary(':thumbsup:', 999, false), getReactionSummary(':astonished:', 9, false), getReactionSummary(':heart:', 99, false)]
26
26
  };
27
27
  /**
@@ -1,8 +1,9 @@
1
1
  /** @jsx jsx */
2
2
  import React from 'react';
3
+ import { useIntl } from 'react-intl-next';
3
4
  import { jsx } from '@emotion/core';
4
5
  import { ResourcedEmoji } from '@atlaskit/emoji';
5
- import { utils } from '../../shared';
6
+ import { i18n, utils } from '../../shared';
6
7
  import * as styles from './styles';
7
8
  export const RENDER_BUTTON_TESTID = 'button-emoji-id';
8
9
 
@@ -22,10 +23,13 @@ export const EmojiButton = ({
22
23
  }
23
24
  };
24
25
 
26
+ const intl = useIntl();
25
27
  return jsx("button", {
26
28
  "data-testid": RENDER_BUTTON_TESTID,
27
29
  onClick: onButtonClick,
28
- title: emojiId.shortName,
30
+ "aria-label": intl.formatMessage(i18n.messages.reactWithEmoji, {
31
+ emoji: emojiId.shortName
32
+ }),
29
33
  type: "button",
30
34
  css: styles.emojiButtonStyle
31
35
  }, jsx(ResourcedEmoji, {