@atlaskit/reactions 33.2.9 → 33.2.10

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 (61) hide show
  1. package/CHANGELOG.md +9 -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/afm-townsquare/tsconfig.json +3 -0
  6. package/dist/cjs/analytics/index.js +1 -1
  7. package/dist/cjs/components/ReactionPicker.js +19 -30
  8. package/dist/cjs/components/ReactionPickerNew.compiled.css +11 -0
  9. package/dist/cjs/components/ReactionPickerNew.js +421 -0
  10. package/dist/cjs/components/Reactions.js +4 -1
  11. package/dist/cjs/containers/ConnectedReactionPicker/ConnectedReactionPicker.js +4 -1
  12. package/dist/cjs/index.js +6 -7
  13. package/dist/es2019/analytics/index.js +1 -1
  14. package/dist/es2019/components/ReactionPicker.js +17 -28
  15. package/dist/es2019/components/ReactionPickerNew.compiled.css +11 -0
  16. package/dist/es2019/components/ReactionPickerNew.js +374 -0
  17. package/dist/es2019/components/Reactions.js +4 -1
  18. package/dist/es2019/containers/ConnectedReactionPicker/ConnectedReactionPicker.js +4 -1
  19. package/dist/es2019/index.js +5 -1
  20. package/dist/esm/analytics/index.js +1 -1
  21. package/dist/esm/components/ReactionPicker.js +20 -31
  22. package/dist/esm/components/ReactionPickerNew.compiled.css +11 -0
  23. package/dist/esm/components/ReactionPickerNew.js +412 -0
  24. package/dist/esm/components/Reactions.js +4 -1
  25. package/dist/esm/containers/ConnectedReactionPicker/ConnectedReactionPicker.js +4 -1
  26. package/dist/esm/index.js +5 -1
  27. package/dist/types/components/Counter.d.ts +0 -1
  28. package/dist/types/components/EmojiButton.d.ts +0 -1
  29. package/dist/types/components/Reaction.d.ts +0 -1
  30. package/dist/types/components/ReactionButton.d.ts +0 -1
  31. package/dist/types/components/ReactionParticleEffect.d.ts +0 -1
  32. package/dist/types/components/ReactionPicker.d.ts +0 -7
  33. package/dist/types/components/ReactionPickerNew.d.ts +114 -0
  34. package/dist/types/components/ReactionSummaryButton.d.ts +0 -1
  35. package/dist/types/components/ReactionSummaryView.d.ts +0 -1
  36. package/dist/types/components/ReactionView.d.ts +0 -1
  37. package/dist/types/components/ReactionsDialog.d.ts +0 -1
  38. package/dist/types/components/ReactionsDialogHeader.d.ts +0 -1
  39. package/dist/types/components/ReactionsDialogTrigger.d.ts +0 -1
  40. package/dist/types/components/Selector.d.ts +0 -1
  41. package/dist/types/components/StaticReaction.d.ts +0 -1
  42. package/dist/types/index.d.ts +2 -1
  43. package/dist/types/types/reaction.d.ts +0 -1
  44. package/dist/types-ts4.5/components/Counter.d.ts +0 -1
  45. package/dist/types-ts4.5/components/EmojiButton.d.ts +0 -1
  46. package/dist/types-ts4.5/components/Reaction.d.ts +0 -1
  47. package/dist/types-ts4.5/components/ReactionButton.d.ts +0 -1
  48. package/dist/types-ts4.5/components/ReactionParticleEffect.d.ts +0 -1
  49. package/dist/types-ts4.5/components/ReactionPicker.d.ts +0 -7
  50. package/dist/types-ts4.5/components/ReactionPickerNew.d.ts +114 -0
  51. package/dist/types-ts4.5/components/ReactionSummaryButton.d.ts +0 -1
  52. package/dist/types-ts4.5/components/ReactionSummaryView.d.ts +0 -1
  53. package/dist/types-ts4.5/components/ReactionView.d.ts +0 -1
  54. package/dist/types-ts4.5/components/ReactionsDialog.d.ts +0 -1
  55. package/dist/types-ts4.5/components/ReactionsDialogHeader.d.ts +0 -1
  56. package/dist/types-ts4.5/components/ReactionsDialogTrigger.d.ts +0 -1
  57. package/dist/types-ts4.5/components/Selector.d.ts +0 -1
  58. package/dist/types-ts4.5/components/StaticReaction.d.ts +0 -1
  59. package/dist/types-ts4.5/index.d.ts +2 -1
  60. package/dist/types-ts4.5/types/reaction.d.ts +0 -1
  61. package/package.json +5 -1
@@ -12,7 +12,7 @@ import { Manager, Popper, Reference } from '@atlaskit/popper';
12
12
  import { layers } from '@atlaskit/theme/constants';
13
13
  import { Box } from '@atlaskit/primitives/compiled';
14
14
  import { fg } from '@atlaskit/platform-feature-flags';
15
- import { useCloseManagerV2 } from '../hooks/useCloseManager';
15
+ import { useCloseManager } from '../hooks/useCloseManager';
16
16
  import { useDelayedState } from '../hooks/useDelayedState';
17
17
  import { useFocusTrap } from '../hooks/useFocusTrap';
18
18
  import { messages } from '../shared/i18n';
@@ -21,7 +21,6 @@ import { Selector } from './Selector';
21
21
  import { Trigger } from './Trigger';
22
22
  import { RepositionOnUpdate } from './RepositionOnUpdate';
23
23
  import { N0, N50A, N60A } from '@atlaskit/theme/colors';
24
- import Portal from '@atlaskit/portal';
25
24
  var pickerStyle = null;
26
25
  var popupWrapperStyle = null;
27
26
  var popupStyle = null;
@@ -148,6 +147,19 @@ export var ReactionPicker = /*#__PURE__*/React.memo(function (props) {
148
147
  settings = _useState10[0],
149
148
  setSettings = _useState10[1];
150
149
 
150
+ /**
151
+ * Custom hook triggers when user clicks outside the reactions picker
152
+ */
153
+ useCloseManager(wrapperRef, function (callbackType) {
154
+ close();
155
+ onCancel();
156
+ if (triggerRef && callbackType === 'ESCAPE') {
157
+ requestAnimationFrame(function () {
158
+ return triggerRef.focus();
159
+ });
160
+ }
161
+ }, true, isPopupTrayOpen);
162
+
151
163
  /**
152
164
  * Event callback when the picker is closed
153
165
  * @param _id Optional id if an emoji button was selected or undefineed if was clicked outside the picker
@@ -266,10 +278,6 @@ export var ReactionPicker = /*#__PURE__*/React.memo(function (props) {
266
278
  var _updatePopper$current;
267
279
  (_updatePopper$current = updatePopper.current) === null || _updatePopper$current === void 0 || _updatePopper$current.call(updatePopper);
268
280
  }, [settings]);
269
- var onClose = function onClose() {
270
- close();
271
- onCancel();
272
- };
273
281
  return /*#__PURE__*/React.createElement("div", {
274
282
  // eslint-disable-next-line @atlaskit/ui-styling-standard/no-classname-prop -- Ignored via go/DSP-18766
275
283
  className: ax(["_s7n4nkob _1pra1o8l", wrapperClassName]),
@@ -311,14 +319,9 @@ export var ReactionPicker = /*#__PURE__*/React.memo(function (props) {
311
319
  isListItem: isListItem
312
320
  }))
313
321
  );
314
- }), isPopupTrayOpen && /*#__PURE__*/React.createElement(Portal, {
315
- zIndex: layers.layer()
316
- }, /*#__PURE__*/React.createElement(PopperWrapper, {
322
+ }), isPopupTrayOpen && /*#__PURE__*/React.createElement(PopperWrapper, {
317
323
  settings: settings,
318
- popperModifiers: popperModifiers,
319
- isOpen: isPopupTrayOpen,
320
- onClose: onClose,
321
- triggerRef: triggerRef
324
+ popperModifiers: popperModifiers
322
325
  }, settings.showFullPicker || hoverableReactionPicker && isHoverableReactionPickerEmojiPickerOpen ? /*#__PURE__*/React.createElement(EmojiPicker, {
323
326
  emojiProvider: emojiProvider,
324
327
  onSelection: onEmojiSelected,
@@ -334,13 +337,10 @@ export var ReactionPicker = /*#__PURE__*/React.memo(function (props) {
334
337
  onMoreClick: onSelectMoreClick,
335
338
  pickerQuickReactionEmojiIds: pickerQuickReactionEmojiIds,
336
339
  hoverableReactionPickerSelector: hoverableReactionPicker
337
- }))))));
340
+ })))));
338
341
  });
339
342
  export var PopperWrapper = function PopperWrapper(props) {
340
- var triggerRef = props.triggerRef,
341
- settings = props.settings,
342
- isOpen = props.isOpen,
343
- onClose = props.onClose,
343
+ var settings = props.settings,
344
344
  children = props.children,
345
345
  popperModifiers = props.popperModifiers;
346
346
  var _useState11 = useState(null),
@@ -356,21 +356,10 @@ export var PopperWrapper = function PopperWrapper(props) {
356
356
  initialFocusRef: null,
357
357
  targetRef: popupRef
358
358
  });
359
-
360
- /**
361
- * Custom hook triggers when user clicks outside the reactions picker
362
- */
363
- useCloseManagerV2(popupRef, triggerRef, function (callbackType) {
364
- onClose();
365
- if (popupRef && callbackType === 'ESCAPE') {
366
- requestAnimationFrame(function () {
367
- return triggerRef === null || triggerRef === void 0 ? void 0 : triggerRef.focus();
368
- });
369
- }
370
- }, true, isOpen);
371
359
  return /*#__PURE__*/React.createElement(Popper, {
372
360
  placement: settings.popperPlacement,
373
- modifiers: popperModifiers
361
+ modifiers: popperModifiers,
362
+ strategy: "absolute"
374
363
  }, function (_ref3) {
375
364
  var _ref4 = _ref3.ref,
376
365
  style = _ref3.style,
@@ -0,0 +1,11 @@
1
+
2
+ ._2rko1sit{border-radius:var(--ds-border-radius,3px)}._16qs1a23{box-shadow:var(--_3t1odq)}
3
+ ._1bch1b66>div{margin-top:var(--ds-space-050,4px)}
4
+ ._1e0c1txw{display:flex}
5
+ ._1pra1o8l.miniMode{display:inline-block}
6
+ ._79pa1b66>div{margin-bottom:var(--ds-space-050,4px)}
7
+ ._bfhk13b4{background-color:var(--_1f6rtr1)}
8
+ ._s7n4nkob{vertical-align:middle}
9
+ ._1hvw1o36:focus{outline-width:medium}
10
+ ._49pcglyw:focus{outline-style:none}
11
+ ._nt751r31:focus{outline-color:currentColor}
@@ -0,0 +1,412 @@
1
+ /* ReactionPickerNew.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 "./ReactionPickerNew.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, useIntl } 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 { Box } from '@atlaskit/primitives/compiled';
14
+ import { fg } from '@atlaskit/platform-feature-flags';
15
+ import { useCloseManagerV2 } from '../hooks/useCloseManager';
16
+ import { useDelayedState } from '../hooks/useDelayedState';
17
+ import { useFocusTrap } from '../hooks/useFocusTrap';
18
+ import { messages } from '../shared/i18n';
19
+ import { PickerRender } from '../ufo';
20
+ import { Selector } from './Selector';
21
+ import { Trigger } from './Trigger';
22
+ import { RepositionOnUpdate } from './RepositionOnUpdate';
23
+ import { N0, N50A, N60A } from '@atlaskit/theme/colors';
24
+ import Portal from '@atlaskit/portal';
25
+ var pickerStyle = null;
26
+ var popupWrapperStyle = null;
27
+ var popupStyle = null;
28
+ var popupStyleWithMarginTop = null;
29
+ var additionalStyles = {
30
+ selectorContainer: "_1e0c1txw"
31
+ };
32
+
33
+ /**
34
+ * Test id for wrapper ReactionPicker div
35
+ */
36
+ export var RENDER_REACTIONPICKER_TESTID = 'reactionPicker-testid';
37
+
38
+ /**
39
+ * Test id for ReactionPicker panel div
40
+ */
41
+ export var RENDER_REACTIONPICKERPANEL_TESTID = 'reactionPickerPanel-testid';
42
+
43
+ /**
44
+ * Emoji Picker Controller Id for Accessibility Labels
45
+ */
46
+ var PICKER_CONTROL_ID = 'emoji-picker';
47
+ /**
48
+ * Picker component for adding reactions
49
+ */
50
+ export var ReactionPicker = /*#__PURE__*/React.memo(function (props) {
51
+ var miniMode = props.miniMode,
52
+ className = props.className,
53
+ emojiProvider = props.emojiProvider,
54
+ onSelection = props.onSelection,
55
+ allowAllEmojis = props.allowAllEmojis,
56
+ disabled = props.disabled,
57
+ pickerQuickReactionEmojiIds = props.pickerQuickReactionEmojiIds,
58
+ _props$onShowMore = props.onShowMore,
59
+ onShowMore = _props$onShowMore === void 0 ? function () {} : _props$onShowMore,
60
+ _props$onOpen = props.onOpen,
61
+ onOpen = _props$onOpen === void 0 ? function () {} : _props$onOpen,
62
+ _props$onCancel = props.onCancel,
63
+ onCancel = _props$onCancel === void 0 ? function () {} : _props$onCancel,
64
+ _props$tooltipContent = props.tooltipContent,
65
+ tooltipContent = _props$tooltipContent === void 0 ? /*#__PURE__*/React.createElement(FormattedMessage, messages.addReaction) : _props$tooltipContent,
66
+ emojiPickerSize = props.emojiPickerSize,
67
+ _props$showOpaqueBack = props.showOpaqueBackground,
68
+ showOpaqueBackground = _props$showOpaqueBack === void 0 ? false : _props$showOpaqueBack,
69
+ _props$subtleReaction = props.subtleReactionsSummaryAndPicker,
70
+ subtleReactionsSummaryAndPicker = _props$subtleReaction === void 0 ? false : _props$subtleReaction,
71
+ _props$showAddReactio = props.showAddReactionText,
72
+ showAddReactionText = _props$showAddReactio === void 0 ? false : _props$showAddReactio,
73
+ reactionPickerTriggerIcon = props.reactionPickerTriggerIcon,
74
+ reactionPickerTriggerText = props.reactionPickerTriggerText,
75
+ reactionPickerPlacement = props.reactionPickerPlacement,
76
+ _props$isListItem = props.isListItem,
77
+ isListItem = _props$isListItem === void 0 ? false : _props$isListItem,
78
+ _props$hoverableReact = props.hoverableReactionPicker,
79
+ hoverableReactionPicker = _props$hoverableReact === void 0 ? false : _props$hoverableReact,
80
+ _props$hoverableReact2 = props.hoverableReactionPickerDelay,
81
+ hoverableReactionPickerDelay = _props$hoverableReact2 === void 0 ? 0 : _props$hoverableReact2;
82
+ var _useState = useState(null),
83
+ _useState2 = _slicedToArray(_useState, 2),
84
+ triggerRef = _useState2[0],
85
+ setTriggerRef = _useState2[1];
86
+ var _useState3 = useState(false),
87
+ _useState4 = _slicedToArray(_useState3, 2),
88
+ isHoverableReactionPickerEmojiPickerOpen = _useState4[0],
89
+ setIsHoverableReactionPickerEmojiPickerOpen = _useState4[1];
90
+ var _useState5 = useState(false),
91
+ _useState6 = _slicedToArray(_useState5, 2),
92
+ isHoveringTrigger = _useState6[0],
93
+ setIsHoveringTrigger = _useState6[1];
94
+ var _useState7 = useState(false),
95
+ _useState8 = _slicedToArray(_useState7, 2),
96
+ isHoveringPopup = _useState8[0],
97
+ setIsHoveringPopup = _useState8[1];
98
+ var _useState9 = useState(false),
99
+ _useState0 = _slicedToArray(_useState9, 2),
100
+ isTriggerClicked = _useState0[0],
101
+ setIsTriggerClicked = _useState0[1];
102
+ var _useDelayedState = useDelayedState(false, hoverableReactionPickerDelay),
103
+ _useDelayedState2 = _slicedToArray(_useDelayedState, 2),
104
+ isPopupTrayOpen = _useDelayedState2[0],
105
+ setIsPopupTrayOpen = _useDelayedState2[1];
106
+
107
+ /**
108
+ * Container <div /> reference (used by custom hook to detect click outside)
109
+ */
110
+ var wrapperRef = useRef(null);
111
+ var updatePopper = useRef();
112
+ var popperPlacement = reactionPickerPlacement || 'bottom-start';
113
+ var popperModifiers = [
114
+ /**
115
+ Removing this applyStyle modifier as it throws client errors ref:
116
+ https://popper.js.org/docs/v1/#modifiers
117
+ https://popper.js.org/docs/v1/#modifiers..applyStyle
118
+ { name: 'applyStyle', enabled: false },
119
+ */
120
+ {
121
+ name: 'hide',
122
+ enabled: false
123
+ }, {
124
+ name: 'offset',
125
+ enabled: true,
126
+ options: {
127
+ offset: [0, fg('platform-reactions-offset-based-popper') ? 4 : 0]
128
+ }
129
+ }, {
130
+ name: 'flip',
131
+ enabled: true,
132
+ options: {
133
+ flipVariations: true,
134
+ boundariesElement: 'scrollParent'
135
+ }
136
+ }];
137
+ var _useState1 = useState({
138
+ /**
139
+ * Show the full custom emoji list picker or the default list of emojis
140
+ */
141
+ showFullPicker: !!allowAllEmojis && Array.isArray(pickerQuickReactionEmojiIds) && pickerQuickReactionEmojiIds.length === 0,
142
+ /**
143
+ * Use placement for popper based on reactionPickerPlacement prop
144
+ */
145
+ popperPlacement: popperPlacement
146
+ }),
147
+ _useState10 = _slicedToArray(_useState1, 2),
148
+ settings = _useState10[0],
149
+ setSettings = _useState10[1];
150
+
151
+ /**
152
+ * Event callback when the picker is closed
153
+ * @param _id Optional id if an emoji button was selected or undefineed if was clicked outside the picker
154
+ */
155
+ var close = useCallback(function (_id) {
156
+ setIsPopupTrayOpen(false, true);
157
+ // ufo abort reaction experience
158
+ PickerRender.abort({
159
+ metadata: {
160
+ emojiId: _id,
161
+ source: 'ReactionPicker',
162
+ reason: 'close dialog'
163
+ }
164
+ });
165
+ if (hoverableReactionPicker) {
166
+ setIsHoverableReactionPickerEmojiPickerOpen(false);
167
+ setIsTriggerClicked(false);
168
+ setIsHoveringTrigger(false);
169
+ setIsHoveringPopup(false);
170
+ }
171
+ }, [setIsPopupTrayOpen, setIsHoverableReactionPickerEmojiPickerOpen, hoverableReactionPicker, setIsTriggerClicked, setIsHoveringTrigger, setIsHoveringPopup]);
172
+
173
+ /**
174
+ * Event handle rwhen selecting to show the custom emoji icons picker
175
+ * @param e event param
176
+ */
177
+ var onSelectMoreClick = useCallback(function (e) {
178
+ e.preventDefault();
179
+ setSettings({
180
+ showFullPicker: hoverableReactionPicker ? settings.showFullPicker : true,
181
+ popperPlacement: popperPlacement
182
+ });
183
+ setIsPopupTrayOpen(true);
184
+ if (hoverableReactionPicker) {
185
+ setIsHoverableReactionPickerEmojiPickerOpen(!isHoverableReactionPickerEmojiPickerOpen);
186
+ setIsTriggerClicked(false);
187
+ }
188
+ onShowMore();
189
+ }, [settings.showFullPicker, setIsPopupTrayOpen, onShowMore, popperPlacement, hoverableReactionPicker, setIsHoverableReactionPickerEmojiPickerOpen, isHoverableReactionPickerEmojiPickerOpen]);
190
+
191
+ /**
192
+ * Event callback when an emoji icon is selected
193
+ * @param item selected item
194
+ */
195
+ var onEmojiSelected = useCallback(function (item) {
196
+ // no emoji was selected
197
+ if (!item.id) {
198
+ return;
199
+ }
200
+ onSelection(item.id, settings.showFullPicker || hoverableReactionPicker && isHoverableReactionPickerEmojiPickerOpen ? 'emojiPicker' : 'quickSelector');
201
+ close(item.id);
202
+ }, [close, onSelection, settings.showFullPicker, hoverableReactionPicker, isHoverableReactionPickerEmojiPickerOpen]);
203
+
204
+ /**
205
+ * Event handler when the emoji icon to open the custom picker is selected
206
+ */
207
+ var onTriggerClick = useCallback(function () {
208
+ // ufo start reactions picker open experience
209
+ PickerRender.start();
210
+ setSettings(_objectSpread(_objectSpread({}, settings), {}, {
211
+ popperPlacement: popperPlacement
212
+ }));
213
+ if (hoverableReactionPicker) {
214
+ if (isHoverableReactionPickerEmojiPickerOpen || isTriggerClicked) {
215
+ // if either the emoji picker is open or the trigger was clicked, close the popup and reset the state
216
+ setIsTriggerClicked(false);
217
+ setIsPopupTrayOpen(false, true);
218
+ } else {
219
+ // if neither condition is true, open the popup and set the state
220
+ setIsTriggerClicked(true);
221
+ setIsPopupTrayOpen(true, true);
222
+ }
223
+ // close the emoji picker
224
+ setIsHoverableReactionPickerEmojiPickerOpen(false);
225
+ } else {
226
+ setIsPopupTrayOpen(!isPopupTrayOpen);
227
+ }
228
+ onOpen();
229
+ // ufo reactions picker opened success
230
+ PickerRender.success();
231
+ }, [hoverableReactionPicker, isPopupTrayOpen, setIsPopupTrayOpen, isTriggerClicked, setIsTriggerClicked, isHoverableReactionPickerEmojiPickerOpen, onOpen, settings, popperPlacement]);
232
+ var handleTriggerMouseEnter = useCallback(function () {
233
+ if (hoverableReactionPicker) {
234
+ setIsHoveringTrigger(true);
235
+ if (!isHoverableReactionPickerEmojiPickerOpen) {
236
+ setIsPopupTrayOpen(true);
237
+ }
238
+ }
239
+ }, [hoverableReactionPicker, isHoverableReactionPickerEmojiPickerOpen, setIsPopupTrayOpen]);
240
+ var handleTriggerMouseLeave = useCallback(function () {
241
+ if (hoverableReactionPicker) {
242
+ setIsHoveringTrigger(false);
243
+ if (!isHoveringPopup && !isHoverableReactionPickerEmojiPickerOpen && !isTriggerClicked) {
244
+ setIsPopupTrayOpen(false);
245
+ }
246
+ }
247
+ }, [hoverableReactionPicker, isHoveringPopup, isHoverableReactionPickerEmojiPickerOpen, setIsPopupTrayOpen, isTriggerClicked]);
248
+ var handlePopupMouseEnter = useCallback(function () {
249
+ if (hoverableReactionPicker) {
250
+ setIsHoveringPopup(true);
251
+ if (!isHoverableReactionPickerEmojiPickerOpen) {
252
+ setIsPopupTrayOpen(true);
253
+ }
254
+ }
255
+ }, [hoverableReactionPicker, isHoverableReactionPickerEmojiPickerOpen, setIsPopupTrayOpen]);
256
+ var handlePopupMouseLeave = useCallback(function () {
257
+ if (hoverableReactionPicker) {
258
+ setIsHoveringPopup(false);
259
+ if (!isHoveringTrigger && !isHoverableReactionPickerEmojiPickerOpen && !isTriggerClicked) {
260
+ setIsPopupTrayOpen(false);
261
+ }
262
+ }
263
+ }, [hoverableReactionPicker, isHoveringTrigger, isHoverableReactionPickerEmojiPickerOpen, setIsPopupTrayOpen, isTriggerClicked]);
264
+ var wrapperClassName = " ".concat(isPopupTrayOpen ? 'isOpen' : '', " ").concat(miniMode ? 'miniMode' : '', " ").concat(className);
265
+ useLayoutEffect(function () {
266
+ var _updatePopper$current;
267
+ (_updatePopper$current = updatePopper.current) === null || _updatePopper$current === void 0 || _updatePopper$current.call(updatePopper);
268
+ }, [settings]);
269
+ var onClose = function onClose() {
270
+ close();
271
+ onCancel();
272
+ };
273
+ return /*#__PURE__*/React.createElement("div", {
274
+ // eslint-disable-next-line @atlaskit/ui-styling-standard/no-classname-prop -- Ignored via go/DSP-18766
275
+ className: ax(["_s7n4nkob _1pra1o8l", wrapperClassName]),
276
+ "data-testid": RENDER_REACTIONPICKER_TESTID,
277
+ ref: wrapperRef
278
+ }, /*#__PURE__*/React.createElement(Manager, null, /*#__PURE__*/React.createElement(Reference, null, function (_ref) {
279
+ var _ref2 = _ref.ref;
280
+ return (
281
+ /*#__PURE__*/
282
+ // Render a button to open the <Selector /> panel
283
+ React.createElement(Box, {
284
+ onMouseEnter: handleTriggerMouseEnter,
285
+ onMouseLeave: handleTriggerMouseLeave
286
+ }, /*#__PURE__*/React.createElement(Trigger, {
287
+ ariaAttributes: {
288
+ 'aria-expanded': isPopupTrayOpen,
289
+ 'aria-controls': PICKER_CONTROL_ID
290
+ },
291
+ ref: function ref(node) {
292
+ if (node && isPopupTrayOpen) {
293
+ if (typeof _ref2 === 'function') {
294
+ _ref2(node);
295
+ } else {
296
+ _ref2.current = node;
297
+ }
298
+ setTriggerRef(node);
299
+ }
300
+ },
301
+ isSelected: isPopupTrayOpen,
302
+ onClick: onTriggerClick,
303
+ miniMode: miniMode,
304
+ disabled: disabled,
305
+ tooltipContent: isPopupTrayOpen ? null : tooltipContent,
306
+ showOpaqueBackground: showOpaqueBackground,
307
+ showAddReactionText: showAddReactionText,
308
+ subtleReactionsSummaryAndPicker: subtleReactionsSummaryAndPicker,
309
+ reactionPickerTriggerIcon: reactionPickerTriggerIcon,
310
+ reactionPickerTriggerText: reactionPickerTriggerText,
311
+ isListItem: isListItem
312
+ }))
313
+ );
314
+ }), isPopupTrayOpen && /*#__PURE__*/React.createElement(Portal, {
315
+ zIndex: layers.layer()
316
+ }, /*#__PURE__*/React.createElement(PopperWrapper, {
317
+ settings: settings,
318
+ popperModifiers: popperModifiers,
319
+ isOpen: isPopupTrayOpen,
320
+ onClose: onClose,
321
+ triggerRef: triggerRef
322
+ }, settings.showFullPicker || hoverableReactionPicker && isHoverableReactionPickerEmojiPickerOpen ? /*#__PURE__*/React.createElement(EmojiPicker, {
323
+ emojiProvider: emojiProvider,
324
+ onSelection: onEmojiSelected,
325
+ size: emojiPickerSize
326
+ }) : /*#__PURE__*/React.createElement(Box, {
327
+ xcss: additionalStyles.selectorContainer,
328
+ onMouseEnter: handlePopupMouseEnter,
329
+ onMouseLeave: handlePopupMouseLeave
330
+ }, /*#__PURE__*/React.createElement(Selector, {
331
+ emojiProvider: emojiProvider,
332
+ onSelection: onEmojiSelected,
333
+ showMore: allowAllEmojis,
334
+ onMoreClick: onSelectMoreClick,
335
+ pickerQuickReactionEmojiIds: pickerQuickReactionEmojiIds,
336
+ hoverableReactionPickerSelector: hoverableReactionPicker
337
+ }))))));
338
+ });
339
+ export var PopperWrapper = function PopperWrapper(props) {
340
+ var triggerRef = props.triggerRef,
341
+ settings = props.settings,
342
+ isOpen = props.isOpen,
343
+ onClose = props.onClose,
344
+ children = props.children,
345
+ popperModifiers = props.popperModifiers;
346
+ var _useState11 = useState(null),
347
+ _useState12 = _slicedToArray(_useState11, 2),
348
+ popupRef = _useState12[0],
349
+ setPopupRef = _useState12[1];
350
+ var _useIntl = useIntl(),
351
+ formatMessage = _useIntl.formatMessage;
352
+ /**
353
+ * add focus lock to popup
354
+ */
355
+ useFocusTrap({
356
+ initialFocusRef: null,
357
+ targetRef: popupRef
358
+ });
359
+
360
+ /**
361
+ * Custom hook triggers when user clicks outside the reactions picker
362
+ */
363
+ useCloseManagerV2(popupRef, triggerRef, function (callbackType) {
364
+ onClose();
365
+ if (popupRef && callbackType === 'ESCAPE') {
366
+ requestAnimationFrame(function () {
367
+ return triggerRef === null || triggerRef === void 0 ? void 0 : triggerRef.focus();
368
+ });
369
+ }
370
+ }, true, isOpen);
371
+ return /*#__PURE__*/React.createElement(Popper, {
372
+ placement: settings.popperPlacement,
373
+ modifiers: popperModifiers
374
+ }, function (_ref3) {
375
+ var _ref4 = _ref3.ref,
376
+ style = _ref3.style,
377
+ update = _ref3.update;
378
+ return /*#__PURE__*/React.createElement("div", {
379
+ role: "group",
380
+ "aria-label": formatMessage(messages.popperWrapperLabel),
381
+ id: PICKER_CONTROL_ID,
382
+ "data-testid": RENDER_REACTIONPICKERPANEL_TESTID
383
+ // eslint-disable-next-line @atlaskit/ui-styling-standard/enforce-style-prop -- Ignored via go/DSP-18766
384
+ ,
385
+ style: _objectSpread({
386
+ zIndex: layers.layer()
387
+ }, style),
388
+ ref: function ref(node) {
389
+ if (node) {
390
+ if (typeof _ref4 === 'function') {
391
+ _ref4(node);
392
+ } else {
393
+ _ref4.current = node;
394
+ }
395
+ setPopupRef(node);
396
+ }
397
+ },
398
+ // eslint-disable-next-line jsx-a11y/no-noninteractive-tabindex
399
+ tabIndex: 0,
400
+ className: ax(["_nt751r31 _49pcglyw _1hvw1o36"])
401
+ }, /*#__PURE__*/React.createElement(RepositionOnUpdate, {
402
+ update: update,
403
+ settings: settings
404
+ }, /*#__PURE__*/React.createElement("div", {
405
+ className: ax(["_2rko1sit _bfhk13b4 _16qs1a23 _79pa1b66", !fg('platform-reactions-offset-based-popper') && "_1bch1b66"]),
406
+ style: {
407
+ "--_1f6rtr1": ix("var(--ds-surface-overlay, ".concat(N0, ")")),
408
+ "--_3t1odq": ix("var(--ds-shadow-overlay, ".concat("0 4px 8px -2px ".concat(N50A, ", 0 0 1px ").concat(N60A), ")"))
409
+ }
410
+ }, children)));
411
+ });
412
+ };
@@ -15,8 +15,11 @@ import { ReactionStatus } from '../types';
15
15
  import { ReactionDialogOpened, ReactionDialogSelectedReactionChanged } from '../ufo';
16
16
  import { Reaction } from './Reaction';
17
17
  import { ReactionsDialog } from './ReactionsDialog';
18
- import { ReactionPicker } from './ReactionPicker';
18
+ import { ReactionPicker as ReactionPickerOld } from './ReactionPicker';
19
+ import { ReactionPicker as ReactionPickerNew } from './ReactionPickerNew';
19
20
  import { ReactionSummaryView } from './ReactionSummaryView';
21
+ import { componentWithFG } from '@atlaskit/platform-feature-flags-react';
22
+ var ReactionPicker = componentWithFG('platform_editor_reactions_picker_fix', ReactionPickerNew, ReactionPickerOld);
20
23
  var wrapperStyle = null;
21
24
  var noFlexWrapStyles = null;
22
25
  var noContainerPositionStyles = null;
@@ -4,7 +4,10 @@ import _regeneratorRuntime from "@babel/runtime/regenerator";
4
4
  import React from 'react';
5
5
  import { UfoErrorBoundary } from '../../components';
6
6
  import { PickerRender } from '../../ufo';
7
- import { ReactionPicker } from '../../components/ReactionPicker';
7
+ import { ReactionPicker as ReactionPickerOld } from '../../components/ReactionPicker';
8
+ import { ReactionPicker as ReactionPickerNew } from '../../components/ReactionPickerNew';
9
+ import { componentWithFG } from '@atlaskit/platform-feature-flags-react';
10
+ var ReactionPicker = componentWithFG('platform_editor_reactions_picker_fix', ReactionPickerNew, ReactionPickerOld);
8
11
  /**
9
12
  * Reaction Picker component
10
13
  */
package/dist/esm/index.js CHANGED
@@ -1,8 +1,12 @@
1
1
  import { DefaultReactions, DefaultReactionsByShortName, ExtendedReactions, ExtendedReactionsByShortName, NUMBER_OF_REACTIONS_TO_DISPLAY, SAMPLING_RATE_REACTIONS_RENDERED_EXP, TOOLTIP_USERS_LIMIT } from './shared/constants';
2
2
  import { ComponentName, ExperienceName, PickerRender, ReactionsAdd, ReactionDetailsFetch, ReactionDialogOpened, ReactionDialogSelectedReactionChanged, ReactionsRemove, ReactionsRendered, sampledReactionsRendered } from './ufo';
3
+ import { ReactionPicker as ReactionPickerLegacy } from './components/ReactionPicker';
4
+ import { ReactionPicker as ReactionPickerNew } from './components/ReactionPickerNew';
5
+ import { componentWithFG } from '@atlaskit/platform-feature-flags-react';
6
+ var ReactionPicker = componentWithFG('platform_editor_reactions_picker_fix', ReactionPickerNew, ReactionPickerLegacy);
3
7
  export { ReactionServiceClient } from './client';
4
8
  export { Reaction } from './components/Reaction';
5
- export { ReactionPicker } from './components/ReactionPicker';
9
+ export { ReactionPicker };
6
10
  export { Reactions } from './components/Reactions';
7
11
  export { useCloseManager } from './hooks/useCloseManager';
8
12
  export { ConnectedReactionPicker, ConnectedReactionsView } from './containers';
@@ -1,4 +1,3 @@
1
- /// <reference types="react" />
2
1
  import { type Durations } from '@atlaskit/motion';
3
2
  /**
4
3
  * Test id for component top level div
@@ -1,4 +1,3 @@
1
- /// <reference types="react" />
2
1
  import { type EmojiId, type OnEmojiEvent, type EmojiProvider } from '@atlaskit/emoji';
3
2
  export declare const RENDER_BUTTON_TESTID = "button-emoji-id";
4
3
  export interface EmojiButtonProps {
@@ -1,4 +1,3 @@
1
- /// <reference types="react" />
2
1
  import { type EmojiProvider } from '@atlaskit/emoji';
3
2
  import { type ReactionSummary, type ReactionClick, type ReactionMouseEnter } from '../types';
4
3
  import { type ReactionFocused } from '../types/reaction';
@@ -1,4 +1,3 @@
1
- /// <reference types="react" />
2
1
  import { type ReactionProps } from './Reaction';
3
2
  interface ReactionButtonProps extends Pick<ReactionProps, 'flash'> {
4
3
  onClick: (event: React.MouseEvent<HTMLButtonElement>) => void;
@@ -1,4 +1,3 @@
1
- /// <reference types="react" />
2
1
  /**
3
2
  * @jsxRuntime classic
4
3
  * @jsx jsx
@@ -92,23 +92,16 @@ export interface ReactionPickerProps extends Pick<SelectorProps, 'pickerQuickRea
92
92
  * Optional prop to set a delay for the reaction picker when it opens/closes on hover
93
93
  */
94
94
  hoverableReactionPickerDelay?: number;
95
- /**
96
- * Optional prop to set the strategy of the reaction picker popup
97
- */
98
- reactionPickerStrategy?: PopperProps<{}>['strategy'];
99
95
  }
100
96
  /**
101
97
  * Picker component for adding reactions
102
98
  */
103
99
  export declare const ReactionPicker: React.MemoExoticComponent<(props: ReactionPickerProps) => JSX.Element>;
104
100
  export interface PopperWrapperProps {
105
- triggerRef: HTMLDivElement | HTMLButtonElement | null;
106
101
  settings: {
107
102
  showFullPicker: boolean;
108
103
  popperPlacement: Placement;
109
104
  };
110
- isOpen: boolean;
111
- onClose: () => void;
112
105
  popperModifiers?: PopperProps<{}>['modifiers'];
113
106
  }
114
107
  export declare const PopperWrapper: (props: PropsWithChildren<PopperWrapperProps>) => JSX.Element;