@atlaskit/reactions 30.0.1 → 30.0.2

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 (88) hide show
  1. package/CHANGELOG.md +8 -0
  2. package/afm-cc/tsconfig.json +3 -0
  3. package/afm-jira/tsconfig.json +3 -0
  4. package/afm-post-office/tsconfig.json +3 -0
  5. package/dist/cjs/analytics/index.js +1 -1
  6. package/dist/cjs/components/ShowMore/ShowMore.js +4 -10
  7. package/dist/cjs/components/compiled/EmojiButton.compiled.css +17 -0
  8. package/dist/cjs/components/compiled/EmojiButton.js +48 -0
  9. package/dist/cjs/components/compiled/ReactionButton.compiled.css +4 -5
  10. package/dist/cjs/components/compiled/ReactionButton.js +5 -3
  11. package/dist/cjs/components/compiled/ReactionPicker.compiled.css +11 -0
  12. package/dist/cjs/components/compiled/ReactionPicker.js +325 -0
  13. package/dist/cjs/components/compiled/ReactionSummaryButton.compiled.css +7 -0
  14. package/dist/cjs/components/compiled/ReactionSummaryButton.js +110 -0
  15. package/dist/cjs/components/compiled/ReactionSummaryView.compiled.css +5 -0
  16. package/dist/cjs/components/compiled/ReactionSummaryView.js +117 -0
  17. package/dist/cjs/components/compiled/Reactions.js +4 -4
  18. package/dist/cjs/components/compiled/Selector.compiled.css +13 -0
  19. package/dist/cjs/components/compiled/Selector.js +81 -0
  20. package/dist/cjs/components/compiled/StaticReaction.compiled.css +3 -1
  21. package/dist/cjs/components/compiled/StaticReaction.js +3 -4
  22. package/dist/cjs/components/compiled/Trigger.compiled.css +34 -0
  23. package/dist/cjs/components/compiled/Trigger.js +100 -0
  24. package/dist/cjs/containers/ConnectedReactionPicker/ConnectedReactionPicker.js +5 -1
  25. package/dist/cjs/index.js +3 -7
  26. package/dist/es2019/analytics/index.js +1 -1
  27. package/dist/es2019/components/ShowMore/ShowMore.js +3 -8
  28. package/dist/es2019/components/compiled/EmojiButton.compiled.css +17 -0
  29. package/dist/es2019/components/compiled/EmojiButton.js +40 -0
  30. package/dist/es2019/components/compiled/ReactionButton.compiled.css +4 -5
  31. package/dist/es2019/components/compiled/ReactionButton.js +5 -3
  32. package/dist/es2019/components/compiled/ReactionPicker.compiled.css +11 -0
  33. package/dist/es2019/components/compiled/ReactionPicker.js +295 -0
  34. package/dist/es2019/components/compiled/ReactionSummaryButton.compiled.css +7 -0
  35. package/dist/es2019/components/compiled/ReactionSummaryButton.js +88 -0
  36. package/dist/es2019/components/compiled/ReactionSummaryView.compiled.css +5 -0
  37. package/dist/es2019/components/compiled/ReactionSummaryView.js +87 -0
  38. package/dist/es2019/components/compiled/Reactions.js +3 -3
  39. package/dist/es2019/components/compiled/Selector.compiled.css +14 -0
  40. package/dist/es2019/components/compiled/Selector.js +69 -0
  41. package/dist/es2019/components/compiled/StaticReaction.compiled.css +3 -1
  42. package/dist/es2019/components/compiled/StaticReaction.js +4 -5
  43. package/dist/es2019/components/compiled/Trigger.compiled.css +34 -0
  44. package/dist/es2019/components/compiled/Trigger.js +90 -0
  45. package/dist/es2019/containers/ConnectedReactionPicker/ConnectedReactionPicker.js +5 -1
  46. package/dist/es2019/index.js +6 -2
  47. package/dist/esm/analytics/index.js +1 -1
  48. package/dist/esm/components/ShowMore/ShowMore.js +4 -9
  49. package/dist/esm/components/compiled/EmojiButton.compiled.css +17 -0
  50. package/dist/esm/components/compiled/EmojiButton.js +39 -0
  51. package/dist/esm/components/compiled/ReactionButton.compiled.css +4 -5
  52. package/dist/esm/components/compiled/ReactionButton.js +5 -3
  53. package/dist/esm/components/compiled/ReactionPicker.compiled.css +11 -0
  54. package/dist/esm/components/compiled/ReactionPicker.js +316 -0
  55. package/dist/esm/components/compiled/ReactionSummaryButton.compiled.css +7 -0
  56. package/dist/esm/components/compiled/ReactionSummaryButton.js +100 -0
  57. package/dist/esm/components/compiled/ReactionSummaryView.compiled.css +5 -0
  58. package/dist/esm/components/compiled/ReactionSummaryView.js +107 -0
  59. package/dist/esm/components/compiled/Reactions.js +3 -3
  60. package/dist/esm/components/compiled/Selector.compiled.css +13 -0
  61. package/dist/esm/components/compiled/Selector.js +71 -0
  62. package/dist/esm/components/compiled/StaticReaction.compiled.css +3 -1
  63. package/dist/esm/components/compiled/StaticReaction.js +4 -5
  64. package/dist/esm/components/compiled/Trigger.compiled.css +34 -0
  65. package/dist/esm/components/compiled/Trigger.js +93 -0
  66. package/dist/esm/containers/ConnectedReactionPicker/ConnectedReactionPicker.js +5 -1
  67. package/dist/esm/index.js +6 -2
  68. package/dist/types/components/ShowMore/ShowMore.d.ts +2 -7
  69. package/dist/types/components/compiled/EmojiButton.d.ts +21 -0
  70. package/dist/types/components/compiled/ReactionButton.d.ts +2 -1
  71. package/dist/types/components/compiled/ReactionPicker.d.ts +100 -0
  72. package/dist/types/components/compiled/ReactionSummaryButton.d.ts +34 -0
  73. package/dist/types/components/compiled/ReactionSummaryView.d.ts +58 -0
  74. package/dist/types/components/compiled/Reactions.d.ts +2 -2
  75. package/dist/types/components/compiled/Selector.d.ts +33 -0
  76. package/dist/types/components/compiled/Trigger.d.ts +64 -0
  77. package/dist/types/index.d.ts +4 -2
  78. package/dist/types-ts4.5/components/ShowMore/ShowMore.d.ts +2 -7
  79. package/dist/types-ts4.5/components/compiled/EmojiButton.d.ts +21 -0
  80. package/dist/types-ts4.5/components/compiled/ReactionButton.d.ts +2 -1
  81. package/dist/types-ts4.5/components/compiled/ReactionPicker.d.ts +100 -0
  82. package/dist/types-ts4.5/components/compiled/ReactionSummaryButton.d.ts +34 -0
  83. package/dist/types-ts4.5/components/compiled/ReactionSummaryView.d.ts +58 -0
  84. package/dist/types-ts4.5/components/compiled/Reactions.d.ts +2 -2
  85. package/dist/types-ts4.5/components/compiled/Selector.d.ts +33 -0
  86. package/dist/types-ts4.5/components/compiled/Trigger.d.ts +64 -0
  87. package/dist/types-ts4.5/index.d.ts +4 -2
  88. package/package.json +2 -1
@@ -0,0 +1,316 @@
1
+ /* ReactionPicker.tsx generated by @compiled/babel-plugin v0.36.1 */
2
+ import _defineProperty from "@babel/runtime/helpers/defineProperty";
3
+ import _slicedToArray from "@babel/runtime/helpers/slicedToArray";
4
+ import "./ReactionPicker.compiled.css";
5
+ import { ax, ix } from "@compiled/react/runtime";
6
+ function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
7
+ function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
8
+ import React, { useCallback, useLayoutEffect, useRef, useState } from 'react';
9
+ import { FormattedMessage } from 'react-intl-next';
10
+ import { EmojiPicker } from '@atlaskit/emoji/picker';
11
+ import { Manager, Popper, Reference } from '@atlaskit/popper';
12
+ import { layers } from '@atlaskit/theme/constants';
13
+ import { useCloseManager } from '../../hooks/useCloseManager';
14
+ import { useFocusTrap } from '../../hooks/useFocusTrap';
15
+ import { messages } from '../../shared/i18n';
16
+ import { PickerRender } from '../../ufo';
17
+ import { Selector } from './Selector';
18
+ import { Trigger } from './Trigger';
19
+ import { N0, N50A, N60A } from '@atlaskit/theme/colors';
20
+ var pickerStyle = null;
21
+ var contentStyle = null;
22
+ var popupWrapperStyle = null;
23
+ var popupStyle = null;
24
+ import { RepositionOnUpdate } from '../ReactionPicker/RepositionOnUpdate';
25
+
26
+ /**
27
+ * Test id for wrapper ReactionPicker div
28
+ */
29
+ export var RENDER_REACTIONPICKER_TESTID = 'reactionPicker-testid';
30
+
31
+ /**
32
+ * Test id for ReactionPicker panel div
33
+ */
34
+ export var RENDER_REACTIONPICKERPANEL_TESTID = 'reactionPickerPanel-testid';
35
+
36
+ /**
37
+ * Emoji Picker Controller Id for Accessibility Labels
38
+ */
39
+ var PICKER_CONTROL_ID = 'emoji-picker';
40
+ /**
41
+ * Picker component for adding reactions
42
+ */
43
+ export var ReactionPicker = /*#__PURE__*/React.memo(function (props) {
44
+ var miniMode = props.miniMode,
45
+ className = props.className,
46
+ emojiProvider = props.emojiProvider,
47
+ onSelection = props.onSelection,
48
+ allowAllEmojis = props.allowAllEmojis,
49
+ disabled = props.disabled,
50
+ pickerQuickReactionEmojiIds = props.pickerQuickReactionEmojiIds,
51
+ _props$onShowMore = props.onShowMore,
52
+ onShowMore = _props$onShowMore === void 0 ? function () {} : _props$onShowMore,
53
+ _props$onOpen = props.onOpen,
54
+ onOpen = _props$onOpen === void 0 ? function () {} : _props$onOpen,
55
+ _props$onCancel = props.onCancel,
56
+ onCancel = _props$onCancel === void 0 ? function () {} : _props$onCancel,
57
+ _props$tooltipContent = props.tooltipContent,
58
+ tooltipContent = _props$tooltipContent === void 0 ? /*#__PURE__*/React.createElement(FormattedMessage, messages.addReaction) : _props$tooltipContent,
59
+ emojiPickerSize = props.emojiPickerSize,
60
+ _props$showOpaqueBack = props.showOpaqueBackground,
61
+ showOpaqueBackground = _props$showOpaqueBack === void 0 ? false : _props$showOpaqueBack,
62
+ _props$subtleReaction = props.subtleReactionsSummaryAndPicker,
63
+ subtleReactionsSummaryAndPicker = _props$subtleReaction === void 0 ? false : _props$subtleReaction,
64
+ _props$showAddReactio = props.showAddReactionText,
65
+ showAddReactionText = _props$showAddReactio === void 0 ? false : _props$showAddReactio,
66
+ _props$showRoundTrigg = props.showRoundTrigger,
67
+ showRoundTrigger = _props$showRoundTrigg === void 0 ? false : _props$showRoundTrigg,
68
+ reactionPickerTriggerIcon = props.reactionPickerTriggerIcon,
69
+ reactionPickerPlacement = props.reactionPickerPlacement,
70
+ reactionsPickerPreventOverflowOptions = props.reactionsPickerPreventOverflowOptions;
71
+ var _useState = useState(null),
72
+ _useState2 = _slicedToArray(_useState, 2),
73
+ triggerRef = _useState2[0],
74
+ setTriggerRef = _useState2[1];
75
+
76
+ /**
77
+ * Container <div /> reference (used by custom hook to detect click outside)
78
+ */
79
+ var wrapperRef = useRef(null);
80
+ var updatePopper = useRef();
81
+ var popperPlacement = showRoundTrigger ? 'left' : reactionPickerPlacement || 'bottom-start';
82
+ var popperModifiers = [
83
+ /**
84
+ Removing this applyStyle modifier as it throws client errors ref:
85
+ https://popper.js.org/docs/v1/#modifiers
86
+ https://popper.js.org/docs/v1/#modifiers..applyStyle
87
+ { name: 'applyStyle', enabled: false },
88
+ */
89
+ {
90
+ name: 'hide',
91
+ enabled: false
92
+ }, {
93
+ name: 'offset',
94
+ enabled: true,
95
+ options: {
96
+ offset: [0, 0]
97
+ }
98
+ }, {
99
+ name: 'flip',
100
+ enabled: true,
101
+ options: {
102
+ flipVariations: true,
103
+ boundariesElement: 'scrollParent'
104
+ }
105
+ }, _objectSpread({
106
+ name: 'preventOverflow',
107
+ enabled: true
108
+ }, reactionsPickerPreventOverflowOptions && {
109
+ options: reactionsPickerPreventOverflowOptions
110
+ })];
111
+ var _useState3 = useState({
112
+ /**
113
+ * Show the picker floating panel
114
+ */
115
+ isOpen: false,
116
+ /**
117
+ * Show the full custom emoji list picker or the default list of emojis
118
+ */
119
+ showFullPicker: !!allowAllEmojis && Array.isArray(pickerQuickReactionEmojiIds) && pickerQuickReactionEmojiIds.length === 0,
120
+ /**
121
+ * Use left placement for popper - using value based on showRoundTrigger for now since it needs the left placement
122
+ */
123
+ popperPlacement: popperPlacement
124
+ }),
125
+ _useState4 = _slicedToArray(_useState3, 2),
126
+ settings = _useState4[0],
127
+ setSettings = _useState4[1];
128
+
129
+ /**
130
+ * Custom hook triggers when user clicks outside the reactions picker
131
+ */
132
+ useCloseManager(wrapperRef, function (callbackType) {
133
+ close();
134
+ onCancel();
135
+ if (triggerRef && callbackType === 'ESCAPE') {
136
+ requestAnimationFrame(function () {
137
+ return triggerRef.focus();
138
+ });
139
+ }
140
+ }, true, settings.isOpen);
141
+
142
+ /**
143
+ * Event callback when the picker is closed
144
+ * @param _id Optional id if an emoji button was selected or undefineed if was clicked outside the picker
145
+ */
146
+ var close = useCallback(function (_id) {
147
+ setSettings(_objectSpread(_objectSpread({}, settings), {}, {
148
+ isOpen: false
149
+ }));
150
+ // ufo abort reaction experience
151
+ PickerRender.abort({
152
+ metadata: {
153
+ emojiId: _id,
154
+ source: 'ReactionPicker',
155
+ reason: 'close dialog'
156
+ }
157
+ });
158
+ }, [settings]);
159
+
160
+ /**
161
+ * Event handle rwhen selecting to show the custom emoji icons picker
162
+ * @param e event param
163
+ */
164
+ var onSelectMoreClick = useCallback(function (e) {
165
+ e.preventDefault();
166
+ setSettings({
167
+ isOpen: true,
168
+ showFullPicker: true,
169
+ popperPlacement: popperPlacement
170
+ });
171
+ onShowMore();
172
+ }, [onShowMore, popperPlacement]);
173
+
174
+ /**
175
+ * Event callback when an emoji icon is selected
176
+ * @param item selected item
177
+ */
178
+ var onEmojiSelected = useCallback(function (item) {
179
+ // no emoji was selected
180
+ if (!item.id) {
181
+ return;
182
+ }
183
+ onSelection(item.id, settings.showFullPicker ? 'emojiPicker' : 'quickSelector');
184
+ close(item.id);
185
+ }, [close, onSelection, settings.showFullPicker]);
186
+
187
+ /**
188
+ * Event handler when the emoji icon to open the custom picker is selected
189
+ */
190
+ var onTriggerClick = function onTriggerClick() {
191
+ // ufo start reactions picker open experience
192
+ PickerRender.start();
193
+ setSettings({
194
+ isOpen: !settings.isOpen,
195
+ showFullPicker: !!allowAllEmojis && Array.isArray(pickerQuickReactionEmojiIds) && pickerQuickReactionEmojiIds.length === 0,
196
+ popperPlacement: popperPlacement
197
+ });
198
+ onOpen();
199
+ // ufo reactions picker opened success
200
+ PickerRender.success();
201
+ };
202
+ var wrapperClassName = " ".concat(settings.isOpen ? 'isOpen' : '', " ").concat(miniMode ? 'miniMode' : '', " ").concat(className);
203
+ useLayoutEffect(function () {
204
+ var _updatePopper$current;
205
+ (_updatePopper$current = updatePopper.current) === null || _updatePopper$current === void 0 || _updatePopper$current.call(updatePopper);
206
+ }, [settings]);
207
+ return /*#__PURE__*/React.createElement("div", {
208
+ // eslint-disable-next-line @atlaskit/ui-styling-standard/no-classname-prop -- Ignored via go/DSP-18766
209
+ className: ax(["_s7n4nkob _1pra1o8l", wrapperClassName]),
210
+ "data-testid": RENDER_REACTIONPICKER_TESTID,
211
+ ref: wrapperRef
212
+ }, /*#__PURE__*/React.createElement(Manager, null, /*#__PURE__*/React.createElement(Reference, null, function (_ref) {
213
+ var _ref2 = _ref.ref;
214
+ return (
215
+ /*#__PURE__*/
216
+ // Render a button to open the <Selector /> panel
217
+ React.createElement(Trigger, {
218
+ ariaAttributes: {
219
+ 'aria-expanded': settings.isOpen,
220
+ 'aria-controls': PICKER_CONTROL_ID
221
+ },
222
+ ref: function ref(node) {
223
+ if (node && settings.isOpen) {
224
+ if (typeof _ref2 === 'function') {
225
+ _ref2(node);
226
+ } else {
227
+ _ref2.current = node;
228
+ }
229
+ setTriggerRef(node);
230
+ }
231
+ },
232
+ isSelected: settings.isOpen,
233
+ onClick: onTriggerClick,
234
+ miniMode: miniMode,
235
+ disabled: disabled,
236
+ tooltipContent: settings.isOpen ? null : tooltipContent,
237
+ showOpaqueBackground: showOpaqueBackground,
238
+ showAddReactionText: showAddReactionText,
239
+ subtleReactionsSummaryAndPicker: subtleReactionsSummaryAndPicker,
240
+ showRoundTrigger: showRoundTrigger,
241
+ reactionPickerTriggerIcon: reactionPickerTriggerIcon
242
+ })
243
+ );
244
+ }), settings.isOpen && /*#__PURE__*/React.createElement(PopperWrapper, {
245
+ settings: settings,
246
+ popperModifiers: popperModifiers
247
+ }, settings.showFullPicker ? /*#__PURE__*/React.createElement(EmojiPicker, {
248
+ emojiProvider: emojiProvider,
249
+ onSelection: onEmojiSelected,
250
+ size: emojiPickerSize
251
+ }) : /*#__PURE__*/React.createElement("div", {
252
+ className: ax(["_1e0c1txw"])
253
+ }, /*#__PURE__*/React.createElement(Selector, {
254
+ emojiProvider: emojiProvider,
255
+ onSelection: onEmojiSelected,
256
+ showMore: allowAllEmojis,
257
+ onMoreClick: onSelectMoreClick,
258
+ pickerQuickReactionEmojiIds: pickerQuickReactionEmojiIds
259
+ })))));
260
+ });
261
+ export var PopperWrapper = function PopperWrapper(props) {
262
+ var settings = props.settings,
263
+ children = props.children,
264
+ popperModifiers = props.popperModifiers;
265
+ var _useState5 = useState(null),
266
+ _useState6 = _slicedToArray(_useState5, 2),
267
+ popupRef = _useState6[0],
268
+ setPopupRef = _useState6[1];
269
+ /**
270
+ * add focus lock to popup
271
+ */
272
+ useFocusTrap({
273
+ initialFocusRef: null,
274
+ targetRef: popupRef
275
+ });
276
+ return /*#__PURE__*/React.createElement(Popper, {
277
+ placement: settings.popperPlacement,
278
+ modifiers: popperModifiers,
279
+ strategy: "absolute"
280
+ }, function (_ref3) {
281
+ var _ref4 = _ref3.ref,
282
+ style = _ref3.style,
283
+ update = _ref3.update;
284
+ return /*#__PURE__*/React.createElement("div", {
285
+ id: PICKER_CONTROL_ID,
286
+ "data-testid": RENDER_REACTIONPICKERPANEL_TESTID
287
+ // eslint-disable-next-line @atlaskit/ui-styling-standard/enforce-style-prop -- Ignored via go/DSP-18766
288
+ ,
289
+ style: _objectSpread({
290
+ zIndex: layers.layer()
291
+ }, style),
292
+ ref: function ref(node) {
293
+ if (node) {
294
+ if (typeof _ref4 === 'function') {
295
+ _ref4(node);
296
+ } else {
297
+ _ref4.current = node;
298
+ }
299
+ setPopupRef(node);
300
+ }
301
+ },
302
+ // eslint-disable-next-line jsx-a11y/no-noninteractive-tabindex
303
+ tabIndex: 0,
304
+ className: ax(["_nt751r31 _49pcglyw _1hvw1o36"])
305
+ }, /*#__PURE__*/React.createElement(RepositionOnUpdate, {
306
+ update: update,
307
+ settings: settings
308
+ }, /*#__PURE__*/React.createElement("div", {
309
+ className: ax(["_2rko1sit _bfhk13b4 _16qs1a23 _1bch1b66 _79pa1b66"]),
310
+ style: {
311
+ "--_1f6rtr1": ix("var(--ds-surface-overlay, ".concat(N0, ")")),
312
+ "--_3t1odq": ix("var(--ds-shadow-overlay, ".concat("0 4px 8px -2px ".concat(N50A, ", 0 0 1px ").concat(N60A), ")"))
313
+ }
314
+ }, children)));
315
+ });
316
+ };
@@ -0,0 +1,7 @@
1
+ ._19bvu2gc{padding-left:var(--ds-space-100,8px)}
2
+ ._8hrz1nam{transform-origin:center center 0}
3
+ ._ca0q1b66{padding-top:var(--ds-space-050,4px)}
4
+ ._ca0qv77o{padding-top:var(--ds-space-025,2px)}
5
+ ._kqswh2mm{position:relative}
6
+ ._n3td1b66{padding-bottom:var(--ds-space-050,4px)}
7
+ ._u5f31b66{padding-right:var(--ds-space-050,4px)}
@@ -0,0 +1,100 @@
1
+ /* ReactionSummaryButton.tsx generated by @compiled/babel-plugin v0.36.1 */
2
+ import _toConsumableArray from "@babel/runtime/helpers/toConsumableArray";
3
+ import "./ReactionSummaryButton.compiled.css";
4
+ import * as React from 'react';
5
+ import { ax, ix } from "@compiled/react/runtime";
6
+ import { forwardRef, useMemo } from 'react';
7
+ import { useIntl } from 'react-intl-next';
8
+ import { ResourcedEmoji } from '@atlaskit/emoji';
9
+ import { messages } from '../../shared/i18n';
10
+ import { Counter } from './Counter';
11
+ import { ReactionButton } from './ReactionButton';
12
+ import { Box, Flex, Inline } from '@atlaskit/primitives/compiled';
13
+ import { cx } from '@compiled/react';
14
+ var styles = {
15
+ emoji: "_8hrz1nam",
16
+ button: "_ca0q1b66 _u5f31b66 _n3td1b66 _19bvu2gc",
17
+ compactPadding: "_ca0qv77o",
18
+ container: "_kqswh2mm"
19
+ };
20
+ /**
21
+ * Test id for summary reaction wrapper button
22
+ */
23
+ export var RENDER_SUMMARY_BUTTON_TESTID = 'reaction-summary-button';
24
+
25
+ /**
26
+ * Test id for emojis displayed inside summary button. All emoji's in the summary button will have this test id
27
+ */
28
+ export var RENDER_SUMMARY_EMOJI_TESTID = 'summary-emoji-display';
29
+
30
+ // forwardRef is used here so that the parent popup component can properly interact with the button
31
+ export var ReactionSummaryButton = /*#__PURE__*/forwardRef(function (_ref, ref) {
32
+ var emojiProvider = _ref.emojiProvider,
33
+ _ref$reactions = _ref.reactions,
34
+ reactions = _ref$reactions === void 0 ? [] : _ref$reactions,
35
+ _ref$emojisToShow = _ref.emojisToShow,
36
+ emojisToShow = _ref$emojisToShow === void 0 ? 3 : _ref$emojisToShow,
37
+ onClick = _ref.onClick,
38
+ _ref$showOpaqueBackgr = _ref.showOpaqueBackground,
39
+ showOpaqueBackground = _ref$showOpaqueBackgr === void 0 ? false : _ref$showOpaqueBackgr,
40
+ _ref$subtleReactionsS = _ref.subtleReactionsSummaryAndPicker,
41
+ subtleReactionsSummaryAndPicker = _ref$subtleReactionsS === void 0 ? false : _ref$subtleReactionsS,
42
+ _ref$useCompactStyles = _ref.useCompactStyles,
43
+ useCompactStyles = _ref$useCompactStyles === void 0 ? false : _ref$useCompactStyles,
44
+ _ref$useButtonAlignme = _ref.useButtonAlignmentStyling,
45
+ useButtonAlignmentStyling = _ref$useButtonAlignme === void 0 ? false : _ref$useButtonAlignme;
46
+ var intl = useIntl();
47
+
48
+ // Helper function to sort reactions by count and return top N
49
+ var getTopReactions = function getTopReactions(reactions, topN) {
50
+ return _toConsumableArray(reactions).sort(function (a, b) {
51
+ return b.count - a.count;
52
+ }).slice(0, topN);
53
+ };
54
+ var totalReactionsCount = useMemo(function () {
55
+ return reactions.reduce(function (accum, current) {
56
+ return accum += (current === null || current === void 0 ? void 0 : current.count) || 0;
57
+ }, 0);
58
+ }, [reactions]);
59
+ var topReactions = useMemo(function () {
60
+ return getTopReactions(reactions, emojisToShow);
61
+ }, [emojisToShow, reactions]);
62
+ return /*#__PURE__*/React.createElement(Flex, {
63
+ xcss: styles.container,
64
+ ref: ref,
65
+ alignItems: "center",
66
+ justifyContent: "center"
67
+ }, /*#__PURE__*/React.createElement(ReactionButton, {
68
+ onClick: onClick,
69
+ testId: RENDER_SUMMARY_BUTTON_TESTID,
70
+ ariaLabel: intl.formatMessage(messages.summary),
71
+ useCompactStyles: useCompactStyles,
72
+ showSubtleStyle: subtleReactionsSummaryAndPicker,
73
+ showOpaqueBackground: showOpaqueBackground
74
+ }, /*#__PURE__*/React.createElement(Inline, {
75
+ space: "space.050",
76
+ xcss: cx(styles.button, useCompactStyles && styles.compactPadding),
77
+ testId: "reaction-summary-wrapper"
78
+ }, topReactions.map(function (reaction) {
79
+ return /*#__PURE__*/React.createElement(Box, {
80
+ xcss: styles.emoji,
81
+ testId: RENDER_SUMMARY_EMOJI_TESTID,
82
+ style: {
83
+ // eslint-disable-next-line @atlaskit/ui-styling-standard/enforce-style-prop, @atlaskit/design-system/use-tokens-typography
84
+ lineHeight: '12px'
85
+ }
86
+ }, /*#__PURE__*/React.createElement(ResourcedEmoji, {
87
+ key: reaction.emojiId,
88
+ emojiProvider: emojiProvider,
89
+ emojiId: {
90
+ id: reaction.emojiId,
91
+ shortName: ''
92
+ },
93
+ fitToHeight: useCompactStyles ? 12 : 16
94
+ }));
95
+ })), /*#__PURE__*/React.createElement(Counter, {
96
+ value: totalReactionsCount,
97
+ useDarkerFont: useCompactStyles || useButtonAlignmentStyling,
98
+ useUpdatedStyles: !useCompactStyles && useButtonAlignmentStyling
99
+ })));
100
+ });
@@ -0,0 +1,5 @@
1
+ ._19bvu2gc{padding-left:var(--ds-space-100,8px)}
2
+ ._ca0q1b66{padding-top:var(--ds-space-050,4px)}
3
+ ._n3tdu2gc{padding-bottom:var(--ds-space-100,8px)}
4
+ ._p12foiq5{max-width:325px}
5
+ ._u5f3u2gc{padding-right:var(--ds-space-100,8px)}
@@ -0,0 +1,107 @@
1
+ /* ReactionSummaryView.tsx generated by @compiled/babel-plugin v0.36.1 */
2
+ import _extends from "@babel/runtime/helpers/extends";
3
+ import _slicedToArray from "@babel/runtime/helpers/slicedToArray";
4
+ import "./ReactionSummaryView.compiled.css";
5
+ import * as React from 'react';
6
+ import { ax, ix } from "@compiled/react/runtime";
7
+ import { useCallback, useState } from 'react';
8
+ import Popup from '@atlaskit/popup';
9
+ import { Reaction } from './Reaction';
10
+ import { ReactionSummaryViewEmojiPicker } from '../ReactionSummary/ReactionSummaryViewEmojiPicker';
11
+ import { ReactionSummaryButton } from './ReactionSummaryButton';
12
+ import { Inline } from '@atlaskit/primitives/compiled';
13
+ var styles = {
14
+ summaryPopup: "_ca0q1b66 _u5f3u2gc _n3tdu2gc _19bvu2gc _p12foiq5"
15
+ };
16
+
17
+ /**
18
+ * Test id for the Reactions summary view popup
19
+ */
20
+ export var RENDER_SUMMARY_VIEW_POPUP_TESTID = 'render-summary-view-popup';
21
+ export var ReactionSummaryView = function ReactionSummaryView(_ref) {
22
+ var emojiProvider = _ref.emojiProvider,
23
+ _ref$reactions = _ref.reactions,
24
+ reactions = _ref$reactions === void 0 ? [] : _ref$reactions,
25
+ _ref$flash = _ref.flash,
26
+ flash = _ref$flash === void 0 ? {} : _ref$flash,
27
+ _ref$particleEffectBy = _ref.particleEffectByEmoji,
28
+ particleEffectByEmoji = _ref$particleEffectBy === void 0 ? {} : _ref$particleEffectBy,
29
+ _ref$placement = _ref.placement,
30
+ placement = _ref$placement === void 0 ? 'auto-start' : _ref$placement,
31
+ onReactionClick = _ref.onReactionClick,
32
+ onReactionFocused = _ref.onReactionFocused,
33
+ onReactionMouseEnter = _ref.onReactionMouseEnter,
34
+ _ref$showOpaqueBackgr = _ref.showOpaqueBackground,
35
+ showOpaqueBackground = _ref$showOpaqueBackgr === void 0 ? false : _ref$showOpaqueBackgr,
36
+ _ref$subtleReactionsS = _ref.subtleReactionsSummaryAndPicker,
37
+ subtleReactionsSummaryAndPicker = _ref$subtleReactionsS === void 0 ? false : _ref$subtleReactionsS,
38
+ allowUserDialog = _ref.allowUserDialog,
39
+ handleOpenReactionsDialog = _ref.handleOpenReactionsDialog,
40
+ _ref$isViewOnly = _ref.isViewOnly,
41
+ isViewOnly = _ref$isViewOnly === void 0 ? false : _ref$isViewOnly,
42
+ allowSelectFromSummaryView = _ref.allowSelectFromSummaryView,
43
+ disabled = _ref.disabled,
44
+ emojiPickerSize = _ref.emojiPickerSize,
45
+ onSelection = _ref.onSelection,
46
+ tooltipContent = _ref.tooltipContent,
47
+ reactionPickerTriggerIcon = _ref.reactionPickerTriggerIcon,
48
+ onOpen = _ref.onOpen,
49
+ useButtonAlignmentStyling = _ref.useButtonAlignmentStyling;
50
+ var _useState = useState(false),
51
+ _useState2 = _slicedToArray(_useState, 2),
52
+ isSummaryPopupOpen = _useState2[0],
53
+ setSummaryPopupOpen = _useState2[1];
54
+ var handlePopupClose = useCallback(function () {
55
+ return setSummaryPopupOpen(false);
56
+ }, []);
57
+ var handleSummaryClick = useCallback(function () {
58
+ return setSummaryPopupOpen(!isSummaryPopupOpen);
59
+ }, [isSummaryPopupOpen]);
60
+ return /*#__PURE__*/React.createElement(Popup, {
61
+ placement: placement,
62
+ content: function content() {
63
+ return /*#__PURE__*/React.createElement(Inline, {
64
+ xcss: styles.summaryPopup,
65
+ testId: RENDER_SUMMARY_VIEW_POPUP_TESTID,
66
+ space: "space.025",
67
+ shouldWrap: true,
68
+ alignBlock: "center"
69
+ }, reactions.map(function (reaction) {
70
+ return /*#__PURE__*/React.createElement(Reaction, {
71
+ key: reaction.emojiId,
72
+ reaction: reaction,
73
+ emojiProvider: emojiProvider,
74
+ onClick: onReactionClick,
75
+ onFocused: onReactionFocused,
76
+ onMouseEnter: onReactionMouseEnter,
77
+ flash: flash[reaction.emojiId],
78
+ showParticleEffect: particleEffectByEmoji[reaction.emojiId],
79
+ allowUserDialog: allowUserDialog,
80
+ handleOpenReactionsDialog: handleOpenReactionsDialog,
81
+ isViewOnly: isViewOnly
82
+ });
83
+ }), allowSelectFromSummaryView && /*#__PURE__*/React.createElement(ReactionSummaryViewEmojiPicker, {
84
+ emojiProvider: emojiProvider,
85
+ disabled: disabled,
86
+ onSelection: onSelection,
87
+ emojiPickerSize: emojiPickerSize,
88
+ tooltipContent: tooltipContent,
89
+ reactionPickerTriggerIcon: reactionPickerTriggerIcon,
90
+ onOpen: onOpen
91
+ }));
92
+ },
93
+ isOpen: isSummaryPopupOpen,
94
+ onClose: handlePopupClose,
95
+ trigger: function trigger(triggerProps) {
96
+ return /*#__PURE__*/React.createElement(ReactionSummaryButton, _extends({}, triggerProps, {
97
+ emojiProvider: emojiProvider,
98
+ reactions: reactions,
99
+ onClick: handleSummaryClick,
100
+ showOpaqueBackground: showOpaqueBackground,
101
+ subtleReactionsSummaryAndPicker: subtleReactionsSummaryAndPicker,
102
+ useCompactStyles: allowSelectFromSummaryView,
103
+ useButtonAlignmentStyling: useButtonAlignmentStyling
104
+ }));
105
+ }
106
+ });
107
+ };
@@ -16,8 +16,8 @@ import { ReactionStatus } from '../../types';
16
16
  import { ReactionDialogOpened, ReactionDialogSelectedReactionChanged } from '../../ufo';
17
17
  import { Reaction } from './Reaction';
18
18
  import { ReactionsDialog } from './ReactionsDialog';
19
- import { ReactionPicker } from '../ReactionPicker';
20
- import { ReactionSummaryView } from '../ReactionSummary/';
19
+ import { ReactionPicker } from './ReactionPicker';
20
+ import { ReactionSummaryView } from './ReactionSummaryView';
21
21
  var wrapperStyle = null;
22
22
  var noFlexWrapStyles = null;
23
23
  var noContainerPositionStyles = null;
@@ -131,7 +131,7 @@ export var Reactions = /*#__PURE__*/React.memo(function (_ref) {
131
131
  allowSelectFromSummaryView = _ref$allowSelectFromS === void 0 ? false : _ref$allowSelectFromS,
132
132
  _ref$useButtonAlignme = _ref.useButtonAlignmentStyling,
133
133
  useButtonAlignmentStyling = _ref$useButtonAlignme === void 0 ? false : _ref$useButtonAlignme;
134
- var _useState = useState(),
134
+ var _useState = useState(''),
135
135
  _useState2 = _slicedToArray(_useState, 2),
136
136
  selectedEmojiId = _useState2[0],
137
137
  setSelectedEmojiId = _useState2[1];
@@ -0,0 +1,13 @@
1
+
2
+ ._y44vlcmg{animation:var(--_1m4wxxu)}._12l2u2gc{margin-inline-end:var(--ds-space-100,8px)}
3
+ ._19bv1b66{padding-left:var(--ds-space-050,4px)}
4
+ ._1e0c1o8l{display:inline-block}
5
+ ._1p3lnqa1{border-left-style:solid}
6
+ ._4t3i1tcg{height:24px}
7
+ ._5wramuej{border-left-color:var(--ds-border,#091e4224)}
8
+ ._ahbq1b66{margin-inline-start:var(--ds-space-050,4px)}
9
+ ._ca0q1b66{padding-top:var(--ds-space-050,4px)}
10
+ ._n3td1b66{padding-bottom:var(--ds-space-050,4px)}
11
+ ._t6vde4h9{border-left-width:var(--ds-border-width,1px)}
12
+ ._tzy4idpf{opacity:0}
13
+ ._u5f31b66{padding-right:var(--ds-space-050,4px)}
@@ -0,0 +1,71 @@
1
+ /* Selector.tsx generated by @compiled/babel-plugin v0.36.1 */
2
+ import "./Selector.compiled.css";
3
+ import * as React from 'react';
4
+ import { ax, ix } from "@compiled/react/runtime";
5
+ import { Fragment } from 'react';
6
+ import Tooltip from '@atlaskit/tooltip';
7
+ import { DefaultReactions } from '../../shared/constants';
8
+ import { EmojiButton } from './EmojiButton';
9
+ import { ShowMore } from '../ShowMore';
10
+ import { Box, Inline } from '@atlaskit/primitives/compiled';
11
+ var styles = {
12
+ container: "_ca0q1b66 _u5f31b66 _n3td1b66 _19bv1b66",
13
+ separator: "_t6vde4h9 _5wramuej _1p3lnqa1 _ahbq1b66 _12l2u2gc _4t3i1tcg _1e0c1o8l"
14
+ };
15
+ var revealAnimation = null;
16
+ var revealStyle = null;
17
+
18
+ /**
19
+ * Test id for wrapper Selector div
20
+ */
21
+ export var RENDER_SELECTOR_TESTID = 'render-selector';
22
+ var Reveal = function Reveal(_ref) {
23
+ var children = _ref.children,
24
+ testId = _ref.testId;
25
+ return /*#__PURE__*/React.createElement("div", {
26
+ "data-testid": testId,
27
+ className: ax(["_y44vlcmg _tzy4idpf"]),
28
+ style: {
29
+ "--_1m4wxxu": ix("".concat(revealAnimation, " 150ms ease-in-out forwards"))
30
+ }
31
+ }, children);
32
+ };
33
+
34
+ /**
35
+ * Reactions picker panel part of the <ReactionPicker /> component
36
+ */
37
+ export var Selector = function Selector(_ref2) {
38
+ var emojiProvider = _ref2.emojiProvider,
39
+ onMoreClick = _ref2.onMoreClick,
40
+ onSelection = _ref2.onSelection,
41
+ showMore = _ref2.showMore,
42
+ _ref2$pickerQuickReac = _ref2.pickerQuickReactionEmojiIds,
43
+ pickerQuickReactionEmojiIds = _ref2$pickerQuickReac === void 0 ? DefaultReactions : _ref2$pickerQuickReac;
44
+ /**
45
+ * Render the default emoji icon
46
+ * @param emoji emoji item
47
+ * @param index location of the emoji in the array
48
+ */
49
+ var renderEmoji = function renderEmoji(emoji, index) {
50
+ var _emoji$id;
51
+ return /*#__PURE__*/React.createElement(Reveal, {
52
+ key: (_emoji$id = emoji.id) !== null && _emoji$id !== void 0 ? _emoji$id : emoji.shortName,
53
+ testId: RENDER_SELECTOR_TESTID
54
+ }, /*#__PURE__*/React.createElement(Tooltip, {
55
+ content: emoji.shortName
56
+ }, /*#__PURE__*/React.createElement(EmojiButton, {
57
+ emojiId: emoji,
58
+ emojiProvider: emojiProvider,
59
+ onClick: onSelection
60
+ })));
61
+ };
62
+ return /*#__PURE__*/React.createElement(Inline, {
63
+ alignBlock: "center",
64
+ xcss: styles.container
65
+ }, pickerQuickReactionEmojiIds ? pickerQuickReactionEmojiIds.map(renderEmoji) : null, showMore ? /*#__PURE__*/React.createElement(Fragment, null, /*#__PURE__*/React.createElement(Box, {
66
+ xcss: styles.separator
67
+ }), /*#__PURE__*/React.createElement(Reveal, null, /*#__PURE__*/React.createElement(ShowMore, {
68
+ key: "more",
69
+ onClick: onMoreClick
70
+ }))) : null);
71
+ };
@@ -10,8 +10,10 @@
10
10
  ._2lx2vrvc{flex-direction:row}
11
11
  ._4cvr1y6m{align-items:flex-start}
12
12
  ._4t3i1tcg{height:24px}
13
+ ._bfhksm61{background-color:var(--ds-background-neutral-subtle,#00000000)}
13
14
  ._ca0qze3t{padding-top:var(--ds-space-0,0)}
14
15
  ._n3tdze3t{padding-bottom:var(--ds-space-0,0)}
15
16
  ._syaz1gjq{color:var(--ds-text-subtle,#44546f)}
16
17
  ._u5f3ze3t{padding-right:var(--ds-space-0,0)}
17
- ._d0al73ad:hover{cursor:default}
18
+ ._d0al73ad:hover{cursor:default}
19
+ ._irr3166n:hover{background-color:var(--ds-background-neutral-subtle-hovered,#091e420f)}