@atlaskit/emoji 71.4.6 → 71.4.7

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 (50) hide show
  1. package/CHANGELOG.md +7 -0
  2. package/dist/cjs/api/EmojiRepository.js +14 -5
  3. package/dist/cjs/components/common/DeleteButton.js +11 -2
  4. package/dist/cjs/components/common/EmojiActions.js +15 -6
  5. package/dist/cjs/components/common/EmojiDeletePreview.js +11 -2
  6. package/dist/cjs/components/common/EmojiErrorMessage.js +11 -2
  7. package/dist/cjs/components/common/EmojiUploadPicker.js +18 -9
  8. package/dist/cjs/components/common/FileChooser.js +12 -3
  9. package/dist/cjs/components/common/ToneSelector.js +11 -2
  10. package/dist/cjs/components/picker/CategorySelector.js +16 -7
  11. package/dist/cjs/components/picker/EmojiPicker.js +11 -2
  12. package/dist/cjs/components/picker/EmojiPickerComponent.js +24 -15
  13. package/dist/cjs/components/picker/EmojiPickerFooter.js +12 -2
  14. package/dist/cjs/components/picker/EmojiPickerList.js +11 -2
  15. package/dist/cjs/components/picker/EmojiPickerListSearch.js +11 -2
  16. package/dist/cjs/components/picker/VirtualList.js +12 -3
  17. package/dist/cjs/util/analytics/analytics.js +1 -1
  18. package/dist/es2019/api/EmojiRepository.js +14 -5
  19. package/dist/es2019/components/common/DeleteButton.js +11 -2
  20. package/dist/es2019/components/common/EmojiActions.js +15 -6
  21. package/dist/es2019/components/common/EmojiDeletePreview.js +11 -2
  22. package/dist/es2019/components/common/EmojiErrorMessage.js +11 -2
  23. package/dist/es2019/components/common/EmojiUploadPicker.js +18 -9
  24. package/dist/es2019/components/common/FileChooser.js +12 -3
  25. package/dist/es2019/components/common/ToneSelector.js +11 -2
  26. package/dist/es2019/components/picker/CategorySelector.js +15 -6
  27. package/dist/es2019/components/picker/EmojiPicker.js +11 -2
  28. package/dist/es2019/components/picker/EmojiPickerComponent.js +24 -15
  29. package/dist/es2019/components/picker/EmojiPickerFooter.js +11 -2
  30. package/dist/es2019/components/picker/EmojiPickerList.js +11 -2
  31. package/dist/es2019/components/picker/EmojiPickerListSearch.js +11 -2
  32. package/dist/es2019/components/picker/VirtualList.js +12 -3
  33. package/dist/es2019/util/analytics/analytics.js +1 -1
  34. package/dist/esm/api/EmojiRepository.js +14 -5
  35. package/dist/esm/components/common/DeleteButton.js +11 -2
  36. package/dist/esm/components/common/EmojiActions.js +15 -6
  37. package/dist/esm/components/common/EmojiDeletePreview.js +11 -2
  38. package/dist/esm/components/common/EmojiErrorMessage.js +11 -2
  39. package/dist/esm/components/common/EmojiUploadPicker.js +18 -9
  40. package/dist/esm/components/common/FileChooser.js +12 -3
  41. package/dist/esm/components/common/ToneSelector.js +11 -2
  42. package/dist/esm/components/picker/CategorySelector.js +16 -7
  43. package/dist/esm/components/picker/EmojiPicker.js +11 -2
  44. package/dist/esm/components/picker/EmojiPickerComponent.js +24 -15
  45. package/dist/esm/components/picker/EmojiPickerFooter.js +11 -2
  46. package/dist/esm/components/picker/EmojiPickerList.js +11 -2
  47. package/dist/esm/components/picker/EmojiPickerListSearch.js +11 -2
  48. package/dist/esm/components/picker/VirtualList.js +12 -3
  49. package/dist/esm/util/analytics/analytics.js +1 -1
  50. package/package.json +1 -1
@@ -6,7 +6,16 @@ import Button from '@atlaskit/button/new';
6
6
  import UploadIcon from '@atlaskit/icon/core/upload';
7
7
  import { dropTargetForExternal } from '@atlaskit/pragmatic-drag-and-drop/external/adapter';
8
8
  import { containsFiles, getFiles } from '@atlaskit/pragmatic-drag-and-drop/external/file';
9
- import { expVal } from '@atlaskit/tmp-editor-statsig/expVal';
9
+ import FeatureGates from '@atlaskit/feature-gate-js-client';
10
+ const isRefreshEmojiPickerEnabled = () => {
11
+ if (!FeatureGates.initializeCompleted()) {
12
+ return false;
13
+ }
14
+
15
+ // eslint-disable-next-line @atlaskit/platform/use-recommended-utils
16
+ const isEnabled = FeatureGates.getExperimentValue('platform_teamoji_26_refresh_emoji_picker', 'isEnabled', false);
17
+ return isEnabled;
18
+ };
10
19
  export const chooseFileButtonTestId = 'choose-file-button';
11
20
  export const fileUploadInputTestId = 'file-upload';
12
21
  export const dropzoneTestId = 'file-dropzone';
@@ -60,7 +69,7 @@ const FileChooser = props => {
60
69
  }, [onChange]);
61
70
  useEffect(() => {
62
71
  const element = dropzoneRef.current;
63
- if (!element || !expVal('platform_teamoji_26_refresh_emoji_picker', 'isEnabled', false)) {
72
+ if (!element || !isRefreshEmojiPickerEnabled()) {
64
73
  return;
65
74
  }
66
75
  const suppressNativeFileDrop = event => {
@@ -161,7 +170,7 @@ const FileChooser = props => {
161
170
  },
162
171
  "data-testid": fileUploadInputTestId
163
172
  });
164
- if (expVal('platform_teamoji_26_refresh_emoji_picker', 'isEnabled', false)) {
173
+ if (isRefreshEmojiPickerEnabled()) {
165
174
  return /*#__PURE__*/React.createElement("div", {
166
175
  ref: dropzoneRef,
167
176
  "data-testid": dropzoneTestId,
@@ -1,7 +1,7 @@
1
1
  /* ToneSelector.tsx generated by @compiled/babel-plugin v0.39.1 */
2
2
  import "./ToneSelector.compiled.css";
3
3
  import { ax, ix } from "@compiled/react/runtime";
4
- import { expVal } from '@atlaskit/tmp-editor-statsig/expVal';
4
+ import FeatureGates from '@atlaskit/feature-gate-js-client';
5
5
  import React, { memo, useCallback, useEffect, useMemo, useRef } from 'react';
6
6
  import { withAnalyticsEvents } from '@atlaskit/analytics-next';
7
7
  import { createAndFireEventInElementsChannel, toneSelectedEvent, toneSelectorOpenedEvent } from '../../util/analytics';
@@ -9,6 +9,15 @@ import { setSkinToneAriaLabelText } from './setSkinToneAriaLabelText';
9
9
  import EmojiRadioButton from './EmojiRadioButton';
10
10
  import { useIntl } from 'react-intl';
11
11
  import { messages } from '../i18n';
12
+ const isRefreshEmojiPickerEnabled = () => {
13
+ if (!FeatureGates.initializeCompleted()) {
14
+ return false;
15
+ }
16
+
17
+ // eslint-disable-next-line @atlaskit/platform/use-recommended-utils
18
+ const isEnabled = FeatureGates.getExperimentValue('platform_teamoji_26_refresh_emoji_picker', 'isEnabled', false);
19
+ return isEnabled;
20
+ };
12
21
  const hidden = null;
13
22
  export const toneSelectorTestId = 'tone-selector';
14
23
  const extractAllTones = emoji => {
@@ -92,7 +101,7 @@ export const ToneSelectorInternal = props => {
92
101
  "aria-label": formatMessage(messages.emojiSelectSkinToneListAriaLabelText),
93
102
  className: ax([!isVisible && "_tzy4idpf _3um015vq _1e0cglyw"])
94
103
  }, emojiToneCollection.map((tone, renderIndex) => {
95
- return expVal('platform_teamoji_26_refresh_emoji_picker', 'isEnabled', false) ? /*#__PURE__*/React.createElement(EmojiRadioButton, {
104
+ return isRefreshEmojiPickerEnabled() ? /*#__PURE__*/React.createElement(EmojiRadioButton, {
96
105
  ref: el => {
97
106
  radioRefs.current[renderIndex] = el;
98
107
  if (tone.isSelected && selectedToneRadioRef) {
@@ -7,12 +7,21 @@ import { cx } from '@atlaskit/css';
7
7
  import { useIntl } from 'react-intl';
8
8
  import { Pressable } from '@atlaskit/primitives/compiled';
9
9
  import Tooltip from '@atlaskit/tooltip';
10
- import { expVal } from '@atlaskit/tmp-editor-statsig/expVal';
10
+ import FeatureGates from '@atlaskit/feature-gate-js-client';
11
11
  import { CATEGORYSELECTOR_KEYBOARD_KEYS_SUPPORTED, defaultCategories, KeyboardKeys } from '../../util/constants';
12
12
  import { messages } from '../i18n';
13
13
  import { CategoryDescriptionMap, CategoryDescriptionMapNew } from './categories';
14
14
  import { usePrevious } from '../../hooks/usePrevious';
15
15
  import { RENDER_EMOJI_PICKER_LIST_TESTID } from './EmojiPickerList';
16
+ const isRefreshEmojiPickerEnabled = () => {
17
+ if (!FeatureGates.initializeCompleted()) {
18
+ return false;
19
+ }
20
+
21
+ // eslint-disable-next-line @atlaskit/platform/use-recommended-utils
22
+ const isEnabled = FeatureGates.getExperimentValue('platform_teamoji_26_refresh_emoji_picker', 'isEnabled', false);
23
+ return isEnabled;
24
+ };
16
25
  const styles = {
17
26
  commonCategory: "_2rko12b0 _v564h5h4 _189eidpf _bfhksm61 _ca0qze3t _n3tdze3t _19bvze3t _u5f3ze3t",
18
27
  commonCategoryNew: "_v564h5h4 _189eidpf _bfhksm61 _ca0qu2gc _n3tdu2gc _19bv12x7 _u5f312x7 _1e0c1txw _4cvr1h6o _1bah1h6o",
@@ -32,7 +41,7 @@ const addNewCategories = (oldCategories, newCategories) => {
32
41
  if (!newCategories) {
33
42
  return oldCategories;
34
43
  }
35
- return oldCategories.concat(newCategories.filter(category => !!(expVal('platform_teamoji_26_refresh_emoji_picker', 'isEnabled', false) ? CategoryDescriptionMapNew : CategoryDescriptionMap)[category])).sort(expVal('platform_teamoji_26_refresh_emoji_picker', 'isEnabled', false) ? sortCategoriesNew : sortCategories);
44
+ return oldCategories.concat(newCategories.filter(category => !!(isRefreshEmojiPickerEnabled() ? CategoryDescriptionMapNew : CategoryDescriptionMap)[category])).sort(isRefreshEmojiPickerEnabled() ? sortCategoriesNew : sortCategories);
36
45
  };
37
46
  export const categorySelectorComponentTestId = 'category-selector-component';
38
47
  export const categorySelectorCategoryTestId = categoryId => `category-selector-${categoryId}`;
@@ -103,14 +112,14 @@ const CategorySelector = props => {
103
112
  };
104
113
  let categoriesSection;
105
114
  if (categories) {
106
- categoriesSection = expVal('platform_teamoji_26_refresh_emoji_picker', 'isEnabled', false) ? /*#__PURE__*/React.createElement("div", {
115
+ categoriesSection = isRefreshEmojiPickerEnabled() ? /*#__PURE__*/React.createElement("div", {
107
116
  role: "tablist",
108
117
  "aria-label": formatMessage(messages.categoriesSelectorLabel),
109
118
  "data-testid": categorySelectorComponentTestId,
110
119
  ref: categoryRef,
111
120
  className: ax(["_ca0qze3t _n3tdze3t _19bvu2gc _u5f3u2gc _1e0c1txw _2lx2vrvc _1bah1b1v _4cvr1fhb"])
112
121
  }, categories.map((categoryId, index) => {
113
- const category = expVal('platform_teamoji_26_refresh_emoji_picker', 'isEnabled', false) ? CategoryDescriptionMapNew[categoryId] : CategoryDescriptionMap[categoryId];
122
+ const category = isRefreshEmojiPickerEnabled() ? CategoryDescriptionMapNew[categoryId] : CategoryDescriptionMap[categoryId];
114
123
  const Icon = category.icon;
115
124
  const categoryName = formatMessage(messages[category.name]);
116
125
  return /*#__PURE__*/React.createElement(Tooltip, {
@@ -140,7 +149,7 @@ const CategorySelector = props => {
140
149
  ref: categoryRef,
141
150
  className: ax(["_ca0q12x7 _n3td12x7 _19bvu2gc _u5f3u2gc _1e0c1txw _2lx2vrvc _1bah1b1v _4cvr1h6o"])
142
151
  }, categories.map((categoryId, index) => {
143
- const category = expVal('platform_teamoji_26_refresh_emoji_picker', 'isEnabled', false) ? CategoryDescriptionMapNew[categoryId] : CategoryDescriptionMap[categoryId];
152
+ const category = isRefreshEmojiPickerEnabled() ? CategoryDescriptionMapNew[categoryId] : CategoryDescriptionMap[categoryId];
144
153
  const Icon = category.icon;
145
154
  const categoryName = formatMessage(messages[category.name]);
146
155
  return /*#__PURE__*/React.createElement(Tooltip, {
@@ -165,7 +174,7 @@ const CategorySelector = props => {
165
174
  })));
166
175
  }));
167
176
  }
168
- return expVal('platform_teamoji_26_refresh_emoji_picker', 'isEnabled', false) ? /*#__PURE__*/React.createElement("div", {
177
+ return isRefreshEmojiPickerEnabled() ? /*#__PURE__*/React.createElement("div", {
169
178
  className: ax(["_16jlidpf _1o9zidpf _i0dl1wug _bfhkvuon _13li1mok _qrwq1mok _ca0qze3t _n3tdze3t _1doce4h9 _1il9nqa1 _1o3i1l7x _dpd31txw"])
170
179
  }, categoriesSection) : /*#__PURE__*/React.createElement("div", {
171
180
  className: ax(["_16jlidpf _1o9zidpf _i0dl1wug _bfhkhfxm _dpd31txw"])
@@ -5,12 +5,21 @@ import { ax, ix } from "@compiled/react/runtime";
5
5
  import React from 'react';
6
6
  import { withAnalyticsEvents } from '@atlaskit/analytics-next';
7
7
  import { ufoExperiences } from '../../util/analytics';
8
- import { expVal } from '@atlaskit/tmp-editor-statsig/expVal';
8
+ import FeatureGates from '@atlaskit/feature-gate-js-client';
9
9
  import LoadingEmojiComponent from '../common/LoadingEmojiComponent';
10
10
  import { LoadingItem } from './EmojiPickerVirtualItems';
11
11
  import { UfoErrorBoundary } from '../common/UfoErrorBoundary';
12
12
  import { defaultEmojiPickerSize } from '../../util/constants';
13
13
  import { EmojiCommonProvider } from '../../context/EmojiCommonProvider';
14
+ const isRefreshEmojiPickerEnabled = () => {
15
+ if (!FeatureGates.initializeCompleted()) {
16
+ return false;
17
+ }
18
+
19
+ // eslint-disable-next-line @atlaskit/platform/use-recommended-utils
20
+ const isEnabled = FeatureGates.getExperimentValue('platform_teamoji_26_refresh_emoji_picker', 'isEnabled', false);
21
+ return isEnabled;
22
+ };
14
23
  const emojiPicker = null;
15
24
  const emojiPickerNew = null;
16
25
  const emojiPickerModuleLoader = () => import( /* webpackChunkName:"@atlaskit-internal_emojiPickerComponent" */'./EmojiPickerComponent');
@@ -42,7 +51,7 @@ export class EmojiPickerInternal extends LoadingEmojiComponent {
42
51
  }
43
52
  };
44
53
  ufoExperiences['emoji-picker-opened'].markFMP();
45
- return expVal('platform_teamoji_26_refresh_emoji_picker', 'isEnabled', false) ? /*#__PURE__*/React.createElement("div", {
54
+ return isRefreshEmojiPickerEnabled() ? /*#__PURE__*/React.createElement("div", {
46
55
  ref: handlePickerRef,
47
56
  className: ax(["_19itahnd _2rko1mok _1e0c1txw _2lx21bp4 _1bah1yb4 _bfhk1bhr _16qs130s _4t3iixjv _1bsb1edt _1ul91edt _1tke5x59 _c71l1y6z"])
48
57
  }, item.renderItem()) : /*#__PURE__*/React.createElement("div", {
@@ -2,7 +2,7 @@
2
2
  import "./EmojiPickerComponent.compiled.css";
3
3
  import * as React from 'react';
4
4
  import { ax, ix } from "@compiled/react/runtime";
5
- import { expVal } from '@atlaskit/tmp-editor-statsig/expVal';
5
+ import FeatureGates from '@atlaskit/feature-gate-js-client';
6
6
  import { useCallback, useEffect, useMemo, useRef, useState, createRef, memo } from 'react';
7
7
  import { getDocument } from '@atlaskit/browser-apis';
8
8
  import { dropTargetForExternal, monitorForExternal } from '@atlaskit/pragmatic-drag-and-drop/external/adapter';
@@ -28,6 +28,15 @@ import { useIsMounted } from '../../hooks/useIsMounted';
28
28
  import { messages } from '../i18n';
29
29
  import { defaultProductivityColor, getStoredProductivityColor, storeProductivityColor } from '../../util/productivity-colors';
30
30
  import { filterHiddenEmojis } from '../../util/hidden-emojis';
31
+ const isRefreshEmojiPickerEnabled = () => {
32
+ if (!FeatureGates.initializeCompleted()) {
33
+ return false;
34
+ }
35
+
36
+ // eslint-disable-next-line @atlaskit/platform/use-recommended-utils
37
+ const isEnabled = FeatureGates.getExperimentValue('platform_teamoji_26_refresh_emoji_picker', 'isEnabled', false);
38
+ return isEnabled;
39
+ };
31
40
  const emojiPickerBoxShadow = "var(--ds-shadow-overlay, 0px 8px 12px #1E1F2126, 0px 0px 1px #1E1F214f)";
32
41
  const emojiPickerHeight = 295;
33
42
  const emojiPickerHeightWithPreview = 349; // emojiPickerHeight + emojiPickerPreviewHeight;
@@ -80,7 +89,7 @@ const EmojiPickerComponent = ({
80
89
  emojiProvider,
81
90
  isUploadSupported
82
91
  } = useEmoji();
83
- const isTeamojiExperimentEnabled = expVal('platform_teamoji_26_refresh_emoji_picker', 'isEnabled', false);
92
+ const isTeamojiExperimentEnabled = isRefreshEmojiPickerEnabled();
84
93
  const [filteredEmojis, setFilteredEmojis] = useState([]);
85
94
  const [searchEmojis, setSearchEmojis] = useState([]);
86
95
  const [frequentlyUsedEmojis, setFrequentlyUsedEmojis] = useState([]);
@@ -124,7 +133,7 @@ const EmojiPickerComponent = ({
124
133
  }
125
134
  }, [selectedEmoji]);
126
135
  const onEmojiLeave = useCallback(() => {
127
- if (expVal('platform_teamoji_26_refresh_emoji_picker', 'isEnabled', false)) {
136
+ if (isRefreshEmojiPickerEnabled()) {
128
137
  setSelectedEmoji(undefined);
129
138
  }
130
139
  }, []);
@@ -132,16 +141,16 @@ const EmojiPickerComponent = ({
132
141
  // Ignore scroll-driven category changes while a programmatic reveal()
133
142
  // scroll is in progress — they would flicker the indicator through
134
143
  // intermediate categories before landing on the correct one.
135
- if (isProgrammaticScroll.current && expVal('platform_teamoji_26_refresh_emoji_picker', 'isEnabled', false)) {
144
+ if (isProgrammaticScroll.current && isRefreshEmojiPickerEnabled()) {
136
145
  return;
137
146
  }
138
147
  // Ignore scroll-driven category changes while the upload or delete screen is open
139
- if ((uploading || emojiToDelete) && expVal('platform_teamoji_26_refresh_emoji_picker', 'isEnabled', false)) {
148
+ if ((uploading || emojiToDelete) && isRefreshEmojiPickerEnabled()) {
140
149
  return;
141
150
  }
142
151
  if (activeCategory !== category) {
143
152
  setActiveCategory(category);
144
- if (!query && expVal('platform_teamoji_26_refresh_emoji_picker', 'isEnabled', false)) {
153
+ if (!query && isRefreshEmojiPickerEnabled()) {
145
154
  lastNonSearchCategory.current = category;
146
155
  }
147
156
  }
@@ -158,7 +167,7 @@ const EmojiPickerComponent = ({
158
167
  setUploadErrorMessage(undefined);
159
168
  });
160
169
  fireAnalytics(uploadCancelButton());
161
- if (expVal('platform_teamoji_26_refresh_emoji_picker', 'isEnabled', false)) {
170
+ if (isRefreshEmojiPickerEnabled()) {
162
171
  setTimeout(() => {
163
172
  var _getDocument, _getDocument$getEleme;
164
173
  (_getDocument = getDocument()) === null || _getDocument === void 0 ? void 0 : (_getDocument$getEleme = _getDocument.getElementById('add-custom-emoji')) === null || _getDocument$getEleme === void 0 ? void 0 : _getDocument$getEleme.focus();
@@ -310,7 +319,7 @@ const EmojiPickerComponent = ({
310
319
  }
311
320
 
312
321
  // If the upload or delete screen is open, close it when a category is selected
313
- if (expVal('platform_teamoji_26_refresh_emoji_picker', 'isEnabled', false)) {
322
+ if (isRefreshEmojiPickerEnabled()) {
314
323
  if (uploading) {
315
324
  setUploading(false);
316
325
  setUploadErrorMessage(undefined);
@@ -366,7 +375,7 @@ const EmojiPickerComponent = ({
366
375
  };
367
376
  if (searchQuery !== query) {
368
377
  // Capture the active category before entering search so we can keep it highlighted
369
- if (!query && searchQuery && expVal('platform_teamoji_26_refresh_emoji_picker', 'isEnabled', false)) {
378
+ if (!query && searchQuery && isRefreshEmojiPickerEnabled()) {
370
379
  lastNonSearchCategory.current = activeCategory;
371
380
  }
372
381
  setQuery(searchQuery);
@@ -382,7 +391,7 @@ const EmojiPickerComponent = ({
382
391
  // cannot reach underlying page drop handlers (e.g. the Confluence editor).
383
392
  useEffect(() => {
384
393
  var _getDocument2;
385
- if (!uploading || !expVal('platform_teamoji_26_refresh_emoji_picker', 'isEnabled', false)) {
394
+ if (!uploading || !isRefreshEmojiPickerEnabled()) {
386
395
  return;
387
396
  }
388
397
  const body = (_getDocument2 = getDocument()) === null || _getDocument2 === void 0 ? void 0 : _getDocument2.body;
@@ -442,7 +451,7 @@ const EmojiPickerComponent = ({
442
451
  });
443
452
  scrollToUploadedEmoji(emojiDescription);
444
453
  };
445
- if (expVal('platform_teamoji_26_refresh_emoji_picker', 'isEnabled', false)) {
454
+ if (isRefreshEmojiPickerEnabled()) {
446
455
  const uploadShortName = `:${upload.name.toLowerCase()}:`;
447
456
  const existing = await emojiProvider.findByShortName(uploadShortName);
448
457
  if (existing) {
@@ -561,14 +570,14 @@ const EmojiPickerComponent = ({
561
570
  emojiProvider.unsubscribe(onProviderChange);
562
571
  };
563
572
  }, [emojiProvider, onProviderChange]);
564
- const showPreview = expVal('platform_teamoji_26_refresh_emoji_picker', 'isEnabled', false) ? !uploading : selectedEmoji && !uploading;
573
+ const showPreview = isRefreshEmojiPickerEnabled() ? !uploading : selectedEmoji && !uploading;
565
574
  return /*#__PURE__*/React.createElement("div", {
566
575
  ref: setPickerRef,
567
576
  "data-emoji-picker-container": true,
568
577
  role: "dialog",
569
578
  "aria-label": formatMessage(messages.emojiPickerTitle),
570
579
  "aria-modal": true,
571
- className: ax([expVal('platform_teamoji_26_refresh_emoji_picker', 'isEnabled', false) ? "_19itahnd _2rko1mok _1e0c1txw _2lx21bp4 _1bah1yb4 _bfhk1bhr _16qs130s _4t3iaq3k _1bsb1edt _1ul91edt _c71l1y6z _kqswh2mm" : "_19itahnd _2rkofajl _1e0c1txw _2lx21bp4 _1bah1yb4 _bfhk1bhr _16qs130s _4t3iaq3k _1bsb1edt _1ul91edt _c71l1y6z _kqswh2mm", !!emojiToDelete && expVal('platform_teamoji_26_refresh_emoji_picker', 'isEnabled', false) ? withDeleteRefreshHeight[size] : uploading && expVal('platform_teamoji_26_refresh_emoji_picker', 'isEnabled', false) ? withUploadRefreshHeight[size] : query && filteredEmojis.length === 0 && expVal('platform_teamoji_26_refresh_emoji_picker', 'isEnabled', false) ? withNoResultsRefreshHeight[size] : showPreview ? withPreviewHeight[size] : withoutPreviewHeight[size]])
580
+ className: ax([isRefreshEmojiPickerEnabled() ? "_19itahnd _2rko1mok _1e0c1txw _2lx21bp4 _1bah1yb4 _bfhk1bhr _16qs130s _4t3iaq3k _1bsb1edt _1ul91edt _c71l1y6z _kqswh2mm" : "_19itahnd _2rkofajl _1e0c1txw _2lx21bp4 _1bah1yb4 _bfhk1bhr _16qs130s _4t3iaq3k _1bsb1edt _1ul91edt _c71l1y6z _kqswh2mm", !!emojiToDelete && isRefreshEmojiPickerEnabled() ? withDeleteRefreshHeight[size] : uploading && isRefreshEmojiPickerEnabled() ? withUploadRefreshHeight[size] : query && filteredEmojis.length === 0 && isRefreshEmojiPickerEnabled() ? withNoResultsRefreshHeight[size] : showPreview ? withPreviewHeight[size] : withoutPreviewHeight[size]])
572
581
  }, /*#__PURE__*/React.createElement("div", {
573
582
  role: "presentation",
574
583
  onKeyPress: suppressKeyPress,
@@ -576,7 +585,7 @@ const EmojiPickerComponent = ({
576
585
  onKeyDown: suppressKeyPress,
577
586
  className: ax(["_16jlkb7n _1o9zkb7n _i0dlf1ug _1reo15vq _18m915vq _1e0c1txw _2lx21bp4 _1bah1yb4 _1tkeidpf"])
578
587
  }, /*#__PURE__*/React.createElement(CategorySelector, {
579
- activeCategoryId: (uploading || emojiToDelete) && expVal('platform_teamoji_26_refresh_emoji_picker', 'isEnabled', false) ? null : activeCategory,
588
+ activeCategoryId: (uploading || emojiToDelete) && isRefreshEmojiPickerEnabled() ? null : activeCategory,
580
589
  dynamicCategories: dynamicCategories,
581
590
  disableCategories: disableCategories,
582
591
  onCategorySelected: onCategorySelected
@@ -611,7 +620,7 @@ const EmojiPickerComponent = ({
611
620
  onOpenUpload: onOpenUpload,
612
621
  size: size,
613
622
  activeCategoryId: activeCategory
614
- }), showPreview && !(emojiToDelete && expVal('platform_teamoji_26_refresh_emoji_picker', 'isEnabled', false)) && !(query && filteredEmojis.length === 0 && expVal('platform_teamoji_26_refresh_emoji_picker', 'isEnabled', false)) && /*#__PURE__*/React.createElement(EmojiPickerFooter, {
623
+ }), showPreview && !(emojiToDelete && isRefreshEmojiPickerEnabled()) && !(query && filteredEmojis.length === 0 && isRefreshEmojiPickerEnabled()) && /*#__PURE__*/React.createElement(EmojiPickerFooter, {
615
624
  selectedEmoji: selectedEmoji,
616
625
  uploadEnabled: isUploadSupported && !uploading,
617
626
  onOpenUpload: onOpenUpload
@@ -7,7 +7,16 @@ import { useIntl } from 'react-intl';
7
7
  import { Box } from '@atlaskit/primitives/compiled';
8
8
  import { EmojiPreviewComponent } from '../common/EmojiPreviewComponent';
9
9
  import { AddOwnEmoji } from '../common/AddEmoji';
10
- import { expVal } from '@atlaskit/tmp-editor-statsig/expVal';
10
+ import FeatureGates from '@atlaskit/feature-gate-js-client';
11
+ const isRefreshEmojiPickerEnabled = () => {
12
+ if (!FeatureGates.initializeCompleted()) {
13
+ return false;
14
+ }
15
+
16
+ // eslint-disable-next-line @atlaskit/platform/use-recommended-utils
17
+ const isEnabled = FeatureGates.getExperimentValue('platform_teamoji_26_refresh_emoji_picker', 'isEnabled', false);
18
+ return isEnabled;
19
+ };
11
20
  const emojiPickerFooter = null;
12
21
  const emojiPickerFooterWithTopShadow = null;
13
22
  const emojiPickerFooterWithTopShadowNew = null;
@@ -21,7 +30,7 @@ const EmojiPickerFooter = ({
21
30
  uploadEnabled
22
31
  }) => {
23
32
  const intl = useIntl();
24
- return expVal('platform_teamoji_26_refresh_emoji_picker', 'isEnabled', false) ? /*#__PURE__*/React.createElement("div", {
33
+ return isRefreshEmojiPickerEnabled() ? /*#__PURE__*/React.createElement("div", {
25
34
  "data-testid": emojiPickerFooterTestId,
26
35
  className: ax(["_16jlidpf _1o9zidpf _i0dl1wug", "_x3doia51"])
27
36
  }, selectedEmoji ? /*#__PURE__*/React.createElement(Box, {
@@ -1,5 +1,5 @@
1
1
  import { useIntl } from 'react-intl';
2
- import { expVal } from '@atlaskit/tmp-editor-statsig/expVal';
2
+ import FeatureGates from '@atlaskit/feature-gate-js-client';
3
3
  import React, { useCallback, useEffect, useImperativeHandle, useMemo, useRef, useState } from 'react';
4
4
  import { customCategory, defaultEmojiPickerSize, frequentCategory, searchCategory, userCustomTitle, yourUploadsCategory } from '../../util/constants';
5
5
  import { filterProductivityEmojisByColor, getProductivityColorPreviewEmojis } from '../../util/productivity-colors';
@@ -21,6 +21,15 @@ import { messages } from '../i18n';
21
21
  export const RENDER_EMOJI_PICKER_LIST_TESTID = 'render-emoji-picker-list';
22
22
  const categoryClassname = 'emoji-category';
23
23
  const teamojiRefreshExperimentName = 'platform_teamoji_26_refresh_emoji_picker';
24
+ const isRefreshEmojiPickerEnabled = () => {
25
+ if (!FeatureGates.initializeCompleted()) {
26
+ return false;
27
+ }
28
+
29
+ // eslint-disable-next-line @atlaskit/platform/use-recommended-utils
30
+ const isEnabled = FeatureGates.getExperimentValue(teamojiRefreshExperimentName, 'isEnabled', false);
31
+ return isEnabled;
32
+ };
24
33
  const atlassianCategory = 'ATLASSIAN';
25
34
  const atlassianSubcategoryOrder = ['Faces', 'Hands', 'Reactions', 'Objects', 'Productivity', 'Logos'];
26
35
 
@@ -77,7 +86,7 @@ export const EmojiPickerVirtualListInternal = /*#__PURE__*/React.forwardRef((pro
77
86
  const [lastYourUploadsRow, setLastYourUploadsRow] = useState(0);
78
87
  const categoryTracker = useMemo(() => new CategoryTracker(), []);
79
88
  const [categoriesChanged, setCategoriesChanged] = useState(false);
80
- const isTeamojiExperimentEnabled = expVal(teamojiRefreshExperimentName, 'isEnabled', false);
89
+ const isTeamojiExperimentEnabled = isRefreshEmojiPickerEnabled();
81
90
  const visibleEmojis = useMemo(() => isTeamojiExperimentEnabled ? filterHiddenEmojis(emojis) : emojis, [emojis, isTeamojiExperimentEnabled]);
82
91
  const productivityColorPreviewEmojis = useMemo(() => isTeamojiExperimentEnabled ? getProductivityColorPreviewEmojis(visibleEmojis) : {}, [isTeamojiExperimentEnabled, visibleEmojis]);
83
92
  const addToCategoryMap = useCallback((categoryToGroupMap, emoji, category) => {
@@ -9,7 +9,16 @@ import { useIntl } from 'react-intl';
9
9
  import { useDebouncedCallback } from 'use-debounce';
10
10
  import { EMOJI_SEARCH_DEBOUNCE } from '../../util/constants';
11
11
  import { messages } from '../i18n';
12
- import { expVal } from '@atlaskit/tmp-editor-statsig/expVal';
12
+ import FeatureGates from '@atlaskit/feature-gate-js-client';
13
+ const isRefreshEmojiPickerEnabled = () => {
14
+ if (!FeatureGates.initializeCompleted()) {
15
+ return false;
16
+ }
17
+
18
+ // eslint-disable-next-line @atlaskit/platform/use-recommended-utils
19
+ const isEnabled = FeatureGates.getExperimentValue('platform_teamoji_26_refresh_emoji_picker', 'isEnabled', false);
20
+ return isEnabled;
21
+ };
13
22
  const input = null;
14
23
  const inputNew = null;
15
24
  const textFieldWrapperNew = null;
@@ -58,7 +67,7 @@ export const EmojiPickerListSearch = props => {
58
67
  role: "status"
59
68
  }, dirty ? query === '' ? formatMessage(messages.searchResultsStatusSeeAll) : formatMessage(messages.searchResultsStatus, {
60
69
  count: resultsCount
61
- }) : null), expVal('platform_teamoji_26_refresh_emoji_picker', 'isEnabled', false) ? /*#__PURE__*/React.createElement("div", {
70
+ }) : null), isRefreshEmojiPickerEnabled() ? /*#__PURE__*/React.createElement("div", {
62
71
  className: ax(["_n6341l7x _18z11b66"])
63
72
  }, /*#__PURE__*/React.createElement(TextField, {
64
73
  role: "searchbox",
@@ -5,9 +5,18 @@ import { ax, ix } from "@compiled/react/runtime";
5
5
  import React, { useCallback, useImperativeHandle } from 'react';
6
6
  import { useVirtualizer } from '@tanstack/react-virtual';
7
7
  import { fg } from '@atlaskit/platform-feature-flags';
8
- import { expVal } from '@atlaskit/tmp-editor-statsig/expVal';
8
+ import FeatureGates from '@atlaskit/feature-gate-js-client';
9
9
  import { useEmojiPickerListContext } from '../../hooks/useEmojiPickerListContext';
10
10
  import { EMOJIPICKERLIST_KEYBOARD_KEYS_SUPPORTED, EMOJI_LIST_COLUMNS, EMOJI_LIST_PAGE_COUNT, KeyboardNavigationDirection, KeyboardKeys } from '../../util/constants';
11
+ const isRefreshEmojiPickerEnabled = () => {
12
+ if (!FeatureGates.initializeCompleted()) {
13
+ return false;
14
+ }
15
+
16
+ // eslint-disable-next-line @atlaskit/platform/use-recommended-utils
17
+ const isEnabled = FeatureGates.getExperimentValue('platform_teamoji_26_refresh_emoji_picker', 'isEnabled', false);
18
+ return isEnabled;
19
+ };
11
20
  const virtualList = null;
12
21
  const virtualRowStyle = null;
13
22
  export const virtualListScrollContainerTestId = 'virtual-list-scroll-container';
@@ -56,7 +65,7 @@ export const VirtualList = /*#__PURE__*/React.forwardRef((props, ref) => {
56
65
  const elemBottom = elementRect.bottom;
57
66
  const parentTop = parentRect.top;
58
67
  const parentBottom = parentRect.bottom;
59
- const isVisible = expVal('platform_teamoji_26_refresh_emoji_picker', 'isEnabled', false) ? elemTop >= parentTop && elemBottom <= parentBottom : elemBottom > parentTop && elemTop < parentBottom;
68
+ const isVisible = isRefreshEmojiPickerEnabled() ? elemTop >= parentTop && elemBottom <= parentBottom : elemBottom > parentTop && elemTop < parentBottom;
60
69
  return isVisible;
61
70
  };
62
71
  const getFirstVisibleListElementIndex = useCallback(() => {
@@ -73,7 +82,7 @@ export const VirtualList = /*#__PURE__*/React.forwardRef((props, ref) => {
73
82
  var _virtualList$firstVis;
74
83
  return ((_virtualList$firstVis = virtualList[firstVisibleIndex]) === null || _virtualList$firstVis === void 0 ? void 0 : _virtualList$firstVis.index) || 0;
75
84
  }
76
- return expVal('platform_teamoji_26_refresh_emoji_picker', 'isEnabled', false) ? ((_virtualList$ = virtualList[0]) === null || _virtualList$ === void 0 ? void 0 : _virtualList$.index) || 0 : 0;
85
+ return isRefreshEmojiPickerEnabled() ? ((_virtualList$ = virtualList[0]) === null || _virtualList$ === void 0 ? void 0 : _virtualList$.index) || 0 : 0;
77
86
  }, [rowVirtualizer]);
78
87
 
79
88
  /**
@@ -9,7 +9,7 @@ const createEvent = (eventType, action, actionSubject, actionSubjectId, attribut
9
9
  actionSubjectId,
10
10
  attributes: {
11
11
  packageName: "@atlaskit/emoji",
12
- packageVersion: "71.4.5",
12
+ packageVersion: "71.4.6",
13
13
  ...attributes
14
14
  }
15
15
  });
@@ -10,7 +10,7 @@ import { tokenizerRegex } from './EmojiRepositoryRegex';
10
10
  import { createSearchEmojiComparator, createUsageOnlyEmojiComparator } from './internal/Comparators';
11
11
  import { UsageFrequencyTracker } from './internal/UsageFrequencyTracker';
12
12
  import { fg } from '@atlaskit/platform-feature-flags';
13
- import { expVal } from '@atlaskit/tmp-editor-statsig/expVal';
13
+ import FeatureGates from '@atlaskit/feature-gate-js-client';
14
14
  // FS-1097 - duplicated in mentions - extract at some point into a shared library
15
15
  var Tokenizer = /*#__PURE__*/function () {
16
16
  function Tokenizer() {
@@ -109,6 +109,15 @@ var findEmojiIndex = function findEmojiIndex(emojis, toFind) {
109
109
  return match;
110
110
  };
111
111
  var teamojiRefreshExperimentName = 'platform_teamoji_26_refresh_emoji_picker';
112
+ var isRefreshEmojiPickerEnabled = function isRefreshEmojiPickerEnabled() {
113
+ if (!FeatureGates.initializeCompleted()) {
114
+ return false;
115
+ }
116
+
117
+ // eslint-disable-next-line @atlaskit/platform/use-recommended-utils
118
+ var isEnabled = FeatureGates.getExperimentValue(teamojiRefreshExperimentName, 'isEnabled', false);
119
+ return isEnabled;
120
+ };
112
121
  var EmojiRepository = /*#__PURE__*/function () {
113
122
  // protected to allow subclasses to access (for testing and storybooks).
114
123
 
@@ -198,7 +207,7 @@ var EmojiRepository = /*#__PURE__*/function () {
198
207
  value: function findInCategory(categoryId) {
199
208
  if (categoryId === frequentCategory) {
200
209
  return this.getFrequentlyUsed();
201
- } else if (expVal(teamojiRefreshExperimentName, 'isEnabled', false) && categoryId === 'ATLASSIAN') {
210
+ } else if (isRefreshEmojiPickerEnabled() && categoryId === 'ATLASSIAN') {
202
211
  return this.all().emojis.filter(function (emoji) {
203
212
  return emoji.type === 'ATLASSIAN';
204
213
  });
@@ -351,7 +360,7 @@ var EmojiRepository = /*#__PURE__*/function () {
351
360
  this.asciiMap = new Map();
352
361
  var categorySet = new Set();
353
362
  this.emojis.forEach(function (emoji) {
354
- categorySet.add(_this3.getDynamicCategoryForEmoji(emoji, expVal(teamojiRefreshExperimentName, 'isEnabled', false)));
363
+ categorySet.add(_this3.getDynamicCategoryForEmoji(emoji, isRefreshEmojiPickerEnabled()));
355
364
  _this3.addToMaps(emoji);
356
365
  });
357
366
  if (this.usageTracker.getOrder().length) {
@@ -369,7 +378,7 @@ var EmojiRepository = /*#__PURE__*/function () {
369
378
  this.fullSearch.searchIndex = new UnorderedSearchIndex();
370
379
  this.fullSearch.addIndex('name');
371
380
  this.fullSearch.addIndex('shortName');
372
- if (expVal(teamojiRefreshExperimentName, 'isEnabled', false)) {
381
+ if (isRefreshEmojiPickerEnabled()) {
373
382
  this.fullSearch.addIndex('keywords');
374
383
  }
375
384
  this.fullSearch.addDocuments(this.getAllSearchableEmojis());
@@ -416,7 +425,7 @@ var EmojiRepository = /*#__PURE__*/function () {
416
425
  }, {
417
426
  key: "addToDynamicCategories",
418
427
  value: function addToDynamicCategories(emoji) {
419
- var category = this.getDynamicCategoryForEmoji(emoji, expVal(teamojiRefreshExperimentName, 'isEnabled', false));
428
+ var category = this.getDynamicCategoryForEmoji(emoji, isRefreshEmojiPickerEnabled());
420
429
  if (defaultCategories.indexOf(category) === -1 && this.dynamicCategoryList.indexOf(category) === -1) {
421
430
  this.dynamicCategoryList.push(category);
422
431
  }
@@ -7,7 +7,16 @@ import CrossCircleIcon from '@atlaskit/icon/core/cross-circle';
7
7
  import { deleteEmojiLabel } from '../../util/constants';
8
8
  import { emojiDeleteButton } from './styles';
9
9
  import { Box } from '@atlaskit/primitives/compiled';
10
- import { expVal } from '@atlaskit/tmp-editor-statsig/expVal';
10
+ import FeatureGates from '@atlaskit/feature-gate-js-client';
11
+ var isRefreshEmojiPickerEnabled = function isRefreshEmojiPickerEnabled() {
12
+ if (!FeatureGates.initializeCompleted()) {
13
+ return false;
14
+ }
15
+
16
+ // eslint-disable-next-line @atlaskit/platform/use-recommended-utils
17
+ var isEnabled = FeatureGates.getExperimentValue('platform_teamoji_26_refresh_emoji_picker', 'isEnabled', false);
18
+ return isEnabled;
19
+ };
11
20
  var styles = {
12
21
  boxWrapperStyle: "_1bsbf6fq _4t3if6fq"
13
22
  };
@@ -19,7 +28,7 @@ var refreshedDeleteButton = null;
19
28
  */
20
29
  export var RENDER_EMOJI_DELETE_BUTTON_TESTID = 'render-emoji-delete-button';
21
30
  var DeleteButton = function DeleteButton(props) {
22
- var isRefreshEnabled = expVal('platform_teamoji_26_refresh_emoji_picker', 'isEnabled', false);
31
+ var isRefreshEnabled = isRefreshEmojiPickerEnabled();
23
32
  return /*#__PURE__*/React.createElement("span", {
24
33
  // eslint-disable-next-line @atlaskit/ui-styling-standard/no-classname-prop -- Ignored via go/DSP-18766
25
34
  className: ax(["_3um015vq _1e0c1txw _kqswstnw _154ix0bf _1xi2x0bf _1pbykb7n _13t3idpf", isRefreshEnabled && "_154ir5cr _1xi2r5cr", emojiDeleteButton]),
@@ -6,7 +6,7 @@ import * as React from 'react';
6
6
  import { ax, ix } from "@compiled/react/runtime";
7
7
  import { Fragment, useState, useRef, memo, useLayoutEffect, useCallback, useEffect } from 'react';
8
8
  import { fg } from '@atlaskit/platform-feature-flags';
9
- import { expVal } from '@atlaskit/tmp-editor-statsig/expVal';
9
+ import FeatureGates from '@atlaskit/feature-gate-js-client';
10
10
  import { FormattedMessage, injectIntl } from 'react-intl';
11
11
  import EmojiDeletePreview from './EmojiDeletePreview';
12
12
  import EmojiUploadPicker from './EmojiUploadPicker';
@@ -23,6 +23,15 @@ import { emojiPickerAddEmoji } from './styles';
23
23
  import { DEFAULT_TONE } from '../../util/constants';
24
24
  import { Box } from '@atlaskit/primitives/compiled';
25
25
  import { layers } from '@atlaskit/theme/constants';
26
+ var isRefreshEmojiPickerEnabled = function isRefreshEmojiPickerEnabled() {
27
+ if (!FeatureGates.initializeCompleted()) {
28
+ return false;
29
+ }
30
+
31
+ // eslint-disable-next-line @atlaskit/platform/use-recommended-utils
32
+ var isEnabled = FeatureGates.getExperimentValue('platform_teamoji_26_refresh_emoji_picker', 'isEnabled', false);
33
+ return isEnabled;
34
+ };
26
35
  var styles = {
27
36
  icon: "_18u0r5cr _2hwx1i6y"
28
37
  };
@@ -131,7 +140,7 @@ var TonesWrapper = function TonesWrapper(props) {
131
140
  openProductivityColorSelectorWithKeyboard.current = true;
132
141
  }
133
142
  }, []);
134
- var shouldShowProductivityColorSelector = !!(activeCategoryId === 'ATLASSIAN' && productivityColorPreviewEmojis && selectedProductivityColor && onProductivityColorSelected && expVal('platform_teamoji_26_refresh_emoji_picker', 'isEnabled', false));
143
+ var shouldShowProductivityColorSelector = !!(activeCategoryId === 'ATLASSIAN' && productivityColorPreviewEmojis && selectedProductivityColor && onProductivityColorSelected && isRefreshEmojiPickerEnabled());
135
144
  if (shouldShowProductivityColorSelector) {
136
145
  var previewEmoji = (productivityColorPreviewEmojis === null || productivityColorPreviewEmojis === void 0 ? void 0 : productivityColorPreviewEmojis[selectedProductivityColor]) || Object.values(productivityColorPreviewEmojis || {})[0];
137
146
  if (!previewEmoji) {
@@ -212,7 +221,7 @@ export var EmojiActions = function EmojiActions(props) {
212
221
  showToneSelector = _useState6[0],
213
222
  setShowToneSelector = _useState6[1];
214
223
  var wasProductivityColorSelectorOpen = useRef(false);
215
- var shouldUseProductivityColorControl = !!(props.activeCategoryId === 'ATLASSIAN' && props.productivityColorPreviewEmojis && props.selectedProductivityColor && props.onProductivityColorSelected && expVal('platform_teamoji_26_refresh_emoji_picker', 'isEnabled', false));
224
+ var shouldUseProductivityColorControl = !!(props.activeCategoryId === 'ATLASSIAN' && props.productivityColorPreviewEmojis && props.selectedProductivityColor && props.onProductivityColorSelected && isRefreshEmojiPickerEnabled());
216
225
  var onToneOpenHandler = useCallback(function () {
217
226
  return setShowToneSelector(true);
218
227
  }, []);
@@ -250,7 +259,7 @@ export var EmojiActions = function EmojiActions(props) {
250
259
  }
251
260
  }, [shouldUseProductivityColorControl, showToneSelector]);
252
261
  if (uploading) {
253
- return expVal('platform_teamoji_26_refresh_emoji_picker', 'isEnabled', false) ? /*#__PURE__*/React.createElement("div", {
262
+ return isRefreshEmojiPickerEnabled() ? /*#__PURE__*/React.createElement("div", {
254
263
  className: ax(["_16jlidpf _1o9zidpf _i0dl1wug"])
255
264
  }, /*#__PURE__*/React.createElement(EmojiUploadPicker, {
256
265
  onUploadCancelled: onUploadCancelled,
@@ -269,7 +278,7 @@ export var EmojiActions = function EmojiActions(props) {
269
278
  }));
270
279
  }
271
280
  if (emojiToDelete) {
272
- return expVal('platform_teamoji_26_refresh_emoji_picker', 'isEnabled', false) ? /*#__PURE__*/React.createElement("div", {
281
+ return isRefreshEmojiPickerEnabled() ? /*#__PURE__*/React.createElement("div", {
273
282
  className: ax(["_16jlidpf _1o9zidpf _i0dl1wug"])
274
283
  }, /*#__PURE__*/React.createElement(EmojiDeletePreview, {
275
284
  emoji: emojiToDelete,
@@ -283,7 +292,7 @@ export var EmojiActions = function EmojiActions(props) {
283
292
  onCloseDelete: onCloseDelete
284
293
  }));
285
294
  }
286
- return expVal('platform_teamoji_26_refresh_emoji_picker', 'isEnabled', false) ? /*#__PURE__*/React.createElement("div", {
295
+ return isRefreshEmojiPickerEnabled() ? /*#__PURE__*/React.createElement("div", {
287
296
  "data-testid": emojiActionsTestId,
288
297
  onMouseLeave: onMouseLeaveHandler,
289
298
  onBlur: fg('platform_suppression_removal_fix_reactions') ? onMouseLeaveHandler : undefined,