@atlaskit/emoji 72.2.7 → 72.3.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 (82) hide show
  1. package/CHANGELOG.md +33 -0
  2. package/afm-cc/tsconfig.json +3 -0
  3. package/afm-products/tsconfig.json +3 -0
  4. package/dist/cjs/api/EmojiRepository.js +2 -9
  5. package/dist/cjs/api/EmojiResource.js +2 -11
  6. package/dist/cjs/api/media/SiteEmojiResource.js +10 -40
  7. package/dist/cjs/components/common/AddEmoji.js +2 -11
  8. package/dist/cjs/components/common/DeleteButton.js +2 -11
  9. package/dist/cjs/components/common/Emoji.js +15 -5
  10. package/dist/cjs/components/common/EmojiDeletePreview.js +3 -12
  11. package/dist/cjs/components/common/EmojiErrorMessage.js +2 -11
  12. package/dist/cjs/components/common/EmojiRadioButton.js +3 -2
  13. package/dist/cjs/components/common/EmojiUploadPicker.js +10 -19
  14. package/dist/cjs/components/common/FileChooser.js +3 -12
  15. package/dist/cjs/components/common/ImageEmoji.js +5 -2
  16. package/dist/cjs/components/common/TonePreviewButton.js +2 -1
  17. package/dist/cjs/components/common/ToneSelectorInternal.js +2 -11
  18. package/dist/cjs/components/common/isRefreshEmojiPickerEnabled.js +2 -14
  19. package/dist/cjs/components/picker/CategorySelector.js +7 -15
  20. package/dist/cjs/components/picker/EmojiPickerComponent.js +16 -25
  21. package/dist/cjs/components/picker/EmojiPickerEmojiRow.js +2 -1
  22. package/dist/cjs/components/picker/EmojiPickerFooter.js +2 -12
  23. package/dist/cjs/components/picker/EmojiPickerInternal.js +2 -8
  24. package/dist/cjs/components/picker/EmojiPickerList.js +2 -12
  25. package/dist/cjs/components/picker/EmojiPickerListSearch.js +2 -10
  26. package/dist/cjs/components/picker/VirtualList.js +3 -12
  27. package/dist/cjs/util/analytics/createEvent.js +1 -1
  28. package/dist/cjs/util/teamoji26RefreshEmojiPicker.js +17 -0
  29. package/dist/es2019/api/EmojiRepository.js +2 -9
  30. package/dist/es2019/api/EmojiResource.js +1 -10
  31. package/dist/es2019/api/media/SiteEmojiResource.js +9 -39
  32. package/dist/es2019/components/common/AddEmoji.js +1 -10
  33. package/dist/es2019/components/common/DeleteButton.js +1 -10
  34. package/dist/es2019/components/common/Emoji.js +14 -4
  35. package/dist/es2019/components/common/EmojiDeletePreview.js +1 -10
  36. package/dist/es2019/components/common/EmojiErrorMessage.js +1 -10
  37. package/dist/es2019/components/common/EmojiRadioButton.js +3 -2
  38. package/dist/es2019/components/common/EmojiUploadPicker.js +1 -10
  39. package/dist/es2019/components/common/FileChooser.js +1 -10
  40. package/dist/es2019/components/common/ImageEmoji.js +5 -2
  41. package/dist/es2019/components/common/TonePreviewButton.js +2 -1
  42. package/dist/es2019/components/common/ToneSelectorInternal.js +1 -10
  43. package/dist/es2019/components/common/isRefreshEmojiPickerEnabled.js +2 -13
  44. package/dist/es2019/components/picker/CategorySelector.js +1 -9
  45. package/dist/es2019/components/picker/EmojiPickerComponent.js +1 -10
  46. package/dist/es2019/components/picker/EmojiPickerEmojiRow.js +2 -1
  47. package/dist/es2019/components/picker/EmojiPickerFooter.js +1 -10
  48. package/dist/es2019/components/picker/EmojiPickerInternal.js +2 -8
  49. package/dist/es2019/components/picker/EmojiPickerList.js +1 -11
  50. package/dist/es2019/components/picker/EmojiPickerListSearch.js +1 -9
  51. package/dist/es2019/components/picker/VirtualList.js +1 -10
  52. package/dist/es2019/util/analytics/createEvent.js +1 -1
  53. package/dist/es2019/util/teamoji26RefreshEmojiPicker.js +11 -0
  54. package/dist/esm/api/EmojiRepository.js +2 -9
  55. package/dist/esm/api/EmojiResource.js +1 -10
  56. package/dist/esm/api/media/SiteEmojiResource.js +10 -40
  57. package/dist/esm/components/common/AddEmoji.js +1 -10
  58. package/dist/esm/components/common/DeleteButton.js +1 -10
  59. package/dist/esm/components/common/Emoji.js +15 -5
  60. package/dist/esm/components/common/EmojiDeletePreview.js +1 -10
  61. package/dist/esm/components/common/EmojiErrorMessage.js +1 -10
  62. package/dist/esm/components/common/EmojiRadioButton.js +3 -2
  63. package/dist/esm/components/common/EmojiUploadPicker.js +1 -10
  64. package/dist/esm/components/common/FileChooser.js +1 -10
  65. package/dist/esm/components/common/ImageEmoji.js +5 -2
  66. package/dist/esm/components/common/TonePreviewButton.js +2 -1
  67. package/dist/esm/components/common/ToneSelectorInternal.js +1 -10
  68. package/dist/esm/components/common/isRefreshEmojiPickerEnabled.js +2 -13
  69. package/dist/esm/components/picker/CategorySelector.js +1 -9
  70. package/dist/esm/components/picker/EmojiPickerComponent.js +1 -10
  71. package/dist/esm/components/picker/EmojiPickerEmojiRow.js +2 -1
  72. package/dist/esm/components/picker/EmojiPickerFooter.js +1 -10
  73. package/dist/esm/components/picker/EmojiPickerInternal.js +2 -8
  74. package/dist/esm/components/picker/EmojiPickerList.js +1 -11
  75. package/dist/esm/components/picker/EmojiPickerListSearch.js +1 -9
  76. package/dist/esm/components/picker/VirtualList.js +1 -10
  77. package/dist/esm/util/analytics/createEvent.js +1 -1
  78. package/dist/esm/util/teamoji26RefreshEmojiPicker.js +11 -0
  79. package/dist/types/components/common/Emoji.d.ts +5 -0
  80. package/dist/types/components/common/isRefreshEmojiPickerEnabled.d.ts +0 -4
  81. package/dist/types/util/teamoji26RefreshEmojiPicker.d.ts +4 -0
  82. package/package.json +9 -4
@@ -9,7 +9,6 @@ import _regeneratorRuntime from "@babel/runtime/regenerator";
9
9
  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; }
10
10
  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; }
11
11
  import { getMediaClient } from '@atlaskit/media-client-react/get-media-client';
12
- import { fg } from '@atlaskit/platform-feature-flags/fg';
13
12
  import { utils as serviceUtils } from '@atlaskit/util-service-support';
14
13
  import { buildEmojiDescriptionWithAltRepresentation } from '../../util/build-emoji-description-with-alt-representation';
15
14
  import { convertImageToMediaRepresentation } from '../../util/convert-image-to-media-representation';
@@ -188,41 +187,10 @@ var SiteEmojiResource = /*#__PURE__*/function () {
188
187
  },
189
188
  useSha256ForUploads: true
190
189
  });
191
- if (fg('add_emoji_media_size_to_media_file_upload_request')) {
192
- mediaClient.file.uploadExternal(upload.dataURL, collectionName, undefined, true).then(function (_ref3) {
193
- var uploadableFileUpfrontIds = _ref3.uploadableFileUpfrontIds;
194
- var subscription = mediaClient.file.getFileState(uploadableFileUpfrontIds.id, {
195
- collectionName: collectionName
196
- }).subscribe({
197
- next: function next(state) {
198
- if (state.status === 'uploading' && progressCallback) {
199
- progressCallback({
200
- percent: state.progress * mediaProportionOfProgress
201
- });
202
- } else if (state.status === 'processing' || state.status === 'processed') {
203
- subscription.unsubscribe();
204
- var totalUploadTime = Date.now() - startTime;
205
- var mediaUploadTime = totalUploadTime - tokenLoadTime;
206
- debug('total upload / media upload times', totalUploadTime, mediaUploadTime);
207
- _this2.postToEmojiService(upload, uploadableFileUpfrontIds.id).then(function (emoji) {
208
- resolve(emoji);
209
- }).catch(function (httpError) {
210
- reject(httpError.reason || httpError);
211
- });
212
- }
213
- },
214
- error: function error(_error) {
215
- reject(_error);
216
- }
217
- });
218
- }).catch(function (error) {
219
- reject(error);
220
- });
221
- } else {
222
- var subscription = mediaClient.file.upload({
223
- content: upload.dataURL,
224
- name: upload.filename,
225
- collection: collectionName
190
+ mediaClient.file.uploadExternal(upload.dataURL, collectionName, undefined, true).then(function (_ref3) {
191
+ var uploadableFileUpfrontIds = _ref3.uploadableFileUpfrontIds;
192
+ var subscription = mediaClient.file.getFileState(uploadableFileUpfrontIds.id, {
193
+ collectionName: collectionName
226
194
  }).subscribe({
227
195
  next: function next(state) {
228
196
  if (state.status === 'uploading' && progressCallback) {
@@ -234,18 +202,20 @@ var SiteEmojiResource = /*#__PURE__*/function () {
234
202
  var totalUploadTime = Date.now() - startTime;
235
203
  var mediaUploadTime = totalUploadTime - tokenLoadTime;
236
204
  debug('total upload / media upload times', totalUploadTime, mediaUploadTime);
237
- _this2.postToEmojiService(upload, state.id).then(function (emoji) {
205
+ _this2.postToEmojiService(upload, uploadableFileUpfrontIds.id).then(function (emoji) {
238
206
  resolve(emoji);
239
207
  }).catch(function (httpError) {
240
208
  reject(httpError.reason || httpError);
241
209
  });
242
210
  }
243
211
  },
244
- error: function error(_error2) {
245
- reject(_error2);
212
+ error: function error(_error) {
213
+ reject(_error);
246
214
  }
247
215
  });
248
- }
216
+ }).catch(function (error) {
217
+ reject(error);
218
+ });
249
219
  });
250
220
  });
251
221
  }
@@ -4,21 +4,12 @@ import * as React from 'react';
4
4
  import { ax, ix } from "@compiled/react/runtime";
5
5
  import { Fragment, useCallback } from 'react';
6
6
  import { fg } from '@atlaskit/platform-feature-flags/fg';
7
- import FeatureGates from '@atlaskit/feature-gate-js-client/feature-gates';
8
7
  import { FormattedMessage } from 'react-intl';
9
8
  import { messages } from '../i18n';
10
9
  import Button from '@atlaskit/button/default/button';
10
+ import { isRefreshEmojiPickerEnabled } from './isRefreshEmojiPickerEnabled';
11
11
  export var emojiActionsTestId = 'emoji-actions';
12
12
  export var uploadEmojiTestId = 'upload-emoji';
13
- var isRefreshEmojiPickerEnabled = function isRefreshEmojiPickerEnabled() {
14
- if (!FeatureGates.initializeCompleted()) {
15
- return false;
16
- }
17
-
18
- // eslint-disable-next-line @atlaskit/platform/use-recommended-utils
19
- var isEnabled = FeatureGates.getExperimentValue('platform_teamoji_26_refresh_emoji_picker', 'isEnabled', false);
20
- return isEnabled;
21
- };
22
13
  var addCustomEmoji = null;
23
14
 
24
15
  // Generic Type for the wrapped functional component
@@ -7,16 +7,7 @@ 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 FeatureGates from '@atlaskit/feature-gate-js-client/feature-gates';
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
- };
10
+ import { isRefreshEmojiPickerEnabled } from './isRefreshEmojiPickerEnabled';
20
11
  var styles = {
21
12
  boxWrapperStyle: "_1bsbf6fq _4t3if6fq"
22
13
  };
@@ -1,7 +1,7 @@
1
1
  /* Emoji.tsx generated by @compiled/babel-plugin v2.0.0 */
2
2
  import _extends from "@babel/runtime/helpers/extends";
3
3
  import _objectWithoutProperties from "@babel/runtime/helpers/objectWithoutProperties";
4
- var _excluded = ["emoji", "fitToHeight", "selected", "selectOnHover", "className", "showTooltip", "showDelete", "shouldBeInteractive", "tabIndex", "onSelected", "onMouseMove", "onFocus", "onDelete", "onLoadError", "onLoadSuccess", "disableLazyLoad", "autoWidth", "children", "type", "editorEmoji", "renderUnicodeEmojiAsImage"];
4
+ var _excluded = ["emoji", "fitToHeight", "selected", "selectOnHover", "className", "showTooltip", "showDelete", "shouldBeInteractive", "tabIndex", "onSelected", "onMouseMove", "onFocus", "onDelete", "onLoadError", "onLoadSuccess", "disableLazyLoad", "autoWidth", "children", "type", "editorEmoji", "renderUnicodeEmojiAsImage", "isDecorative"];
5
5
  import "./Emoji.compiled.css";
6
6
  import { ax, ix } from "@compiled/react/runtime";
7
7
  import React, { useEffect, useContext, forwardRef } from 'react';
@@ -23,6 +23,7 @@ import { handleDelete } from './handleDelete';
23
23
  import { ImageEmoji } from './ImageEmoji';
24
24
  import { SpriteEmoji } from './SpriteEmoji';
25
25
  import { UnicodeEmoji } from './UnicodeEmoji';
26
+ import { fg } from '@atlaskit/platform-feature-flags/fg';
26
27
  var emojiSpriteContainer = null;
27
28
  var emojiImageContainer = null;
28
29
 
@@ -75,7 +76,6 @@ var handleFocus = function handleFocus(props, event) {
75
76
  }
76
77
  };
77
78
  export var EmojiNodeWrapper = /*#__PURE__*/forwardRef(function (props, ref) {
78
- var _emoji$name;
79
79
  var emoji = props.emoji,
80
80
  fitToHeight = props.fitToHeight,
81
81
  selected = props.selected,
@@ -98,11 +98,21 @@ export var EmojiNodeWrapper = /*#__PURE__*/forwardRef(function (props, ref) {
98
98
  type = props.type,
99
99
  editorEmoji = props.editorEmoji,
100
100
  renderUnicodeEmojiAsImage = props.renderUnicodeEmojiAsImage,
101
+ isDecorative = props.isDecorative,
101
102
  other = _objectWithoutProperties(props, _excluded);
102
103
  var intl = useContext(IntlContext);
103
- var ariaLabel = editorEmoji ? undefined : intl ? intl.formatMessage(messages.changeEmojiShortnameButtonLabel, {
104
- shortName: (_emoji$name = emoji.name) !== null && _emoji$name !== void 0 ? _emoji$name : emoji.shortName
105
- }) : emoji.shortName;
104
+ var isAriaLabelEmpty = editorEmoji || isDecorative && fg('emoji_decorative_label');
105
+ var ariaLabel;
106
+ if (isAriaLabelEmpty) {
107
+ ariaLabel = undefined;
108
+ } else if (intl) {
109
+ var _emoji$name;
110
+ ariaLabel = intl.formatMessage(messages.changeEmojiShortnameButtonLabel, {
111
+ shortName: (_emoji$name = emoji.name) !== null && _emoji$name !== void 0 ? _emoji$name : emoji.shortName
112
+ });
113
+ } else {
114
+ ariaLabel = emoji.shortName;
115
+ }
106
116
  var tooltipContent = showTooltip && expValEquals('platform_editor_emoji_hover_show_tooltip', 'isEnabled', true) ? emoji.shortName || emoji.name || undefined : undefined;
107
117
  var emojiSpan = /*#__PURE__*/React.createElement("span", _extends({
108
118
  role: editorEmoji ? undefined : shouldBeInteractive ? 'button' : ariaLabel ? 'img' : 'presentation',
@@ -12,7 +12,6 @@ import { ax, ix } from "@compiled/react/runtime";
12
12
  function _callSuper(t, o, e) { return o = _getPrototypeOf(o), _possibleConstructorReturn(t, _isNativeReflectConstruct() ? Reflect.construct(o, e || [], _getPrototypeOf(t).constructor) : o.apply(t, e)); }
13
13
  function _isNativeReflectConstruct() { try { var t = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); } catch (t) {} return (_isNativeReflectConstruct = function _isNativeReflectConstruct() { return !!t; })(); }
14
14
  import { Component } from 'react';
15
- import FeatureGates from '@atlaskit/feature-gate-js-client/feature-gates';
16
15
  import { FormattedMessage, injectIntl } from 'react-intl';
17
16
  import AkButton from '@atlaskit/button/default/button';
18
17
  import Heading from '@atlaskit/heading/heading';
@@ -23,15 +22,7 @@ import CachingEmoji from './CachingEmoji';
23
22
  import EmojiErrorMessage, { emojiErrorScreenreaderTestId } from './EmojiErrorMessage';
24
23
  import RetryableButton from './RetryableButton';
25
24
  import VisuallyHidden from '@atlaskit/visually-hidden/visually-hidden';
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
- };
25
+ import { isRefreshEmojiPickerEnabled } from './isRefreshEmojiPickerEnabled';
35
26
  var deleteFooter = null;
36
27
  var deletePreview = null;
37
28
  var deleteText = null;
@@ -6,17 +6,8 @@ import Tooltip from '@atlaskit/tooltip/Tooltip';
6
6
  import ErrorIcon from '@atlaskit/icon/core/status-error';
7
7
  import { ErrorMessage } from '@atlaskit/form/error-message';
8
8
  import { useIntl } from 'react-intl';
9
- import FeatureGates from '@atlaskit/feature-gate-js-client/feature-gates';
10
9
  import { messages } from '../i18n';
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
- };
10
+ import { isRefreshEmojiPickerEnabled } from './isRefreshEmojiPickerEnabled';
20
11
  var errorMessageStyles = {
21
12
  chooseFile: "_1e0c1txw _syaz1tmw _u5f319bv _1bah1y6m",
22
13
  delete: "_1e0c1txw _syaz1tmw _4cvr1h6o _1bahesu3 _u5f31b66",
@@ -4,6 +4,7 @@ import { ax, ix } from "@compiled/react/runtime";
4
4
  import React, { memo, forwardRef } from 'react';
5
5
  import Emoji from './Emoji';
6
6
  import { TONESELECTOR_KEYBOARD_KEYS_SUPPORTED } from '../../util/constants';
7
+ import { isTeamoji26RefreshEmojiPickerEnabledNoExposure } from '../../util/teamoji26RefreshEmojiPicker';
7
8
  import VisuallyHidden from '@atlaskit/visually-hidden/visually-hidden';
8
9
  import { expValEqualsNoExposure } from '@atlaskit/tmp-editor-statsig/exp-val-equals-no-exposure';
9
10
  var emojiButton = null;
@@ -11,7 +12,7 @@ var emojiRadio = {
11
12
  default: "_tzy4idpf _kqswstnw _154i14id _1ltv14id _3y8mfajl _157z1r31 _1dzmglyw _1sqm1o36 _fh6w1y54 _1i1213zc"
12
13
  };
13
14
  var handleKeyDown = function handleKeyDown(props, event) {
14
- if ((event.key === 'ArrowLeft' || event.key === 'ArrowRight') && expValEqualsNoExposure('platform_teamoji_26_refresh_emoji_picker', 'isEnabled', true)) {
15
+ if ((event.key === 'ArrowLeft' || event.key === 'ArrowRight') && isTeamoji26RefreshEmojiPickerEnabledNoExposure()) {
15
16
  var _props$onArrowKey;
16
17
  event.preventDefault();
17
18
  event.stopPropagation();
@@ -48,7 +49,7 @@ export var EmojiRadioButton = /*#__PURE__*/forwardRef(function (props, ref) {
48
49
  onKeyDown: function onKeyDown(event) {
49
50
  return handleKeyDown(props, event);
50
51
  },
51
- onChange: expValEqualsNoExposure('platform_teamoji_26_refresh_emoji_picker', 'isEnabled', true) ? function (e) {
52
+ onChange: isTeamoji26RefreshEmojiPickerEnabledNoExposure() ? function (e) {
52
53
  return e.preventDefault();
53
54
  } : undefined,
54
55
  className: ax([emojiRadio.default])
@@ -21,20 +21,11 @@ import EmojiUploadPreview from './EmojiUploadPreview';
21
21
  import FileChooser from './FileChooser';
22
22
  import { UploadStatus } from './internal-types';
23
23
  import { fg } from '@atlaskit/platform-feature-flags/fg';
24
- import FeatureGates from '@atlaskit/feature-gate-js-client/feature-gates';
25
24
  import { expValEquals } from '@atlaskit/tmp-editor-statsig/exp-val-equals';
26
25
  import Button from '@atlaskit/button/default/button';
27
26
  import { Box } from '@atlaskit/primitives/compiled';
28
27
  import { getDocument } from '@atlaskit/browser-apis';
29
- var isRefreshEmojiPickerEnabled = function isRefreshEmojiPickerEnabled() {
30
- if (!FeatureGates.initializeCompleted()) {
31
- return false;
32
- }
33
-
34
- // eslint-disable-next-line @atlaskit/platform/use-recommended-utils
35
- var isEnabled = FeatureGates.getExperimentValue('platform_teamoji_26_refresh_emoji_picker', 'isEnabled', false);
36
- return isEnabled;
37
- };
28
+ import { isRefreshEmojiPickerEnabled } from './isRefreshEmojiPickerEnabled';
38
29
  var closeEmojiUploadButton = null;
39
30
  var uploadAddRowNew = null;
40
31
  var emojiUpload = null;
@@ -8,16 +8,7 @@ import UploadIcon from '@atlaskit/icon/core/upload';
8
8
  import { dropTargetForExternal } from '@atlaskit/pragmatic-drag-and-drop/adapter/drop-target-for-external';
9
9
  import { containsFiles } from '@atlaskit/pragmatic-drag-and-drop/utils/contains-files';
10
10
  import { getFiles } from '@atlaskit/pragmatic-drag-and-drop/utils/get-files';
11
- import FeatureGates from '@atlaskit/feature-gate-js-client/feature-gates';
12
- var isRefreshEmojiPickerEnabled = function isRefreshEmojiPickerEnabled() {
13
- if (!FeatureGates.initializeCompleted()) {
14
- return false;
15
- }
16
-
17
- // eslint-disable-next-line @atlaskit/platform/use-recommended-utils
18
- var isEnabled = FeatureGates.getExperimentValue('platform_teamoji_26_refresh_emoji_picker', 'isEnabled', false);
19
- return isEnabled;
20
- };
11
+ import { isRefreshEmojiPickerEnabled } from './isRefreshEmojiPickerEnabled';
21
12
  export var chooseFileButtonTestId = 'choose-file-button';
22
13
  export var fileUploadInputTestId = 'file-upload';
23
14
  export var dropzoneTestId = 'file-dropzone';
@@ -20,6 +20,7 @@ import DeleteButton from './DeleteButton';
20
20
  import { EmojiNodeWrapper } from './Emoji';
21
21
  import { handleDelete } from './handleDelete';
22
22
  import { emojiNodeStyles, commonSelectedStyles, selectOnHoverStyles, emojiMainStyle, emojiImage, deletableEmoji } from './styles';
23
+ import { fg } from '@atlaskit/platform-feature-flags/fg';
23
24
  var handleImageError = function handleImageError(props, event) {
24
25
  var emoji = props.emoji,
25
26
  onLoadError = props.onLoadError;
@@ -44,7 +45,8 @@ export var ImageEmoji = function ImageEmoji(props) {
44
45
  showDelete = props.showDelete,
45
46
  onLoadSuccess = props.onLoadSuccess,
46
47
  disableLazyLoad = props.disableLazyLoad,
47
- autoWidth = props.autoWidth;
48
+ autoWidth = props.autoWidth,
49
+ isDecorative = props.isDecorative;
48
50
  var _useInView = useInView({
49
51
  triggerOnce: true
50
52
  }),
@@ -131,11 +133,12 @@ export var ImageEmoji = function ImageEmoji(props) {
131
133
  onBeforeLoad();
132
134
  }
133
135
  }, [inView, onBeforeLoad]);
136
+ var imgAlt = isDecorative && fg('emoji_decorative_label') ? '' : emoji.name || emoji.shortName || '';
134
137
  var emojiNode = /*#__PURE__*/React.createElement("img", _extends({
135
138
  loading: disableLazyLoad ? 'eager' : 'lazy',
136
139
  src: src,
137
140
  key: src,
138
- alt: emoji.name || emoji.shortName || '',
141
+ alt: imgAlt,
139
142
  "data-emoji-short-name": emoji.shortName,
140
143
  "data-emoji-id": emoji.id,
141
144
  "data-emoji-text": emoji.fallback || emoji.shortName
@@ -3,6 +3,7 @@ import "./TonePreviewButton.compiled.css";
3
3
  import * as React from 'react';
4
4
  import { ax, ix } from "@compiled/react/runtime";
5
5
  import { forwardRef, memo } from 'react';
6
+ import { isTeamoji26RefreshEmojiPickerEnabledNoExposure } from '../../util/teamoji26RefreshEmojiPicker';
6
7
  import Emoji from './Emoji';
7
8
  import { expValEqualsNoExposure } from '@atlaskit/tmp-editor-statsig/exp-val-equals-no-exposure';
8
9
  export var tonePreviewTestId = 'tone-preview';
@@ -22,7 +23,7 @@ export var TonePreviewButton = /*#__PURE__*/forwardRef(function (props, ref) {
22
23
  _props$isVisible = props.isVisible,
23
24
  isVisible = _props$isVisible === void 0 ? true : _props$isVisible;
24
25
  var fitToHeight = expValEqualsNoExposure('platform_use_unicode_emojis', 'isEnabled', true) ? 24 : undefined;
25
- return expValEqualsNoExposure('platform_teamoji_26_refresh_emoji_picker', 'isEnabled', true) ? /*#__PURE__*/React.createElement("button", {
26
+ return isTeamoji26RefreshEmojiPickerEnabledNoExposure() ? /*#__PURE__*/React.createElement("button", {
26
27
  ref: ref,
27
28
  onClick: onSelected,
28
29
  onKeyDown: onKeyDown,
@@ -7,7 +7,6 @@ function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbol
7
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
8
  import React, { useCallback, useEffect, useMemo, useRef } from 'react';
9
9
  import { useIntl } from 'react-intl';
10
- import FeatureGates from '@atlaskit/feature-gate-js-client/feature-gates';
11
10
  import { createAndFireEventInElementsChannel } from '../../util/analytics/analytics';
12
11
  import { toneSelectedEvent } from '../../util/analytics/toneSelectedEvent';
13
12
  import { toneSelectorOpenedEvent } from '../../util/analytics/toneSelectorOpenedEvent';
@@ -15,15 +14,7 @@ import { messages } from '../i18n';
15
14
  import EmojiRadioButton from './EmojiRadioButton';
16
15
  import { toneSelectorTestId } from './ToneSelector';
17
16
  import { setSkinToneAriaLabelText } from './setSkinToneAriaLabelText';
18
- var isRefreshEmojiPickerEnabled = function isRefreshEmojiPickerEnabled() {
19
- if (!FeatureGates.initializeCompleted()) {
20
- return false;
21
- }
22
-
23
- // eslint-disable-next-line @atlaskit/platform/use-recommended-utils
24
- var isEnabled = FeatureGates.getExperimentValue('platform_teamoji_26_refresh_emoji_picker', 'isEnabled', false);
25
- return isEnabled;
26
- };
17
+ import { isRefreshEmojiPickerEnabled } from './isRefreshEmojiPickerEnabled';
27
18
  var hidden = null;
28
19
  var extractAllTones = function extractAllTones(emoji) {
29
20
  if (emoji.skinVariations) {
@@ -1,15 +1,4 @@
1
- /**
2
- * @jsxRuntime classic
3
- * @jsx jsx
4
- */
5
-
6
- import FeatureGates from '@atlaskit/feature-gate-js-client/feature-gates';
1
+ import { isTeamoji26RefreshEmojiPickerEnabled } from '../../util/teamoji26RefreshEmojiPicker';
7
2
  export var isRefreshEmojiPickerEnabled = function isRefreshEmojiPickerEnabled() {
8
- if (!FeatureGates.initializeCompleted()) {
9
- return false;
10
- }
11
-
12
- // eslint-disable-next-line @atlaskit/platform/use-recommended-utils
13
- var isEnabled = FeatureGates.getExperimentValue('platform_teamoji_26_refresh_emoji_picker', 'isEnabled', false);
14
- return isEnabled;
3
+ return isTeamoji26RefreshEmojiPickerEnabled();
15
4
  };
@@ -17,15 +17,7 @@ import { categorySelectorCategoryTestId } from './categorySelectorCategoryTestId
17
17
  import { RENDER_EMOJI_PICKER_LIST_TESTID } from './EmojiPickerList';
18
18
  import { sortCategories } from './sortCategories';
19
19
  import { sortCategoriesNew } from './sortCategoriesNew';
20
- var isRefreshEmojiPickerEnabled = function isRefreshEmojiPickerEnabled() {
21
- if (!FeatureGates.initializeCompleted()) {
22
- return false;
23
- }
24
-
25
- // eslint-disable-next-line @atlaskit/platform/use-recommended-utils
26
- var isEnabled = FeatureGates.getExperimentValue('platform_teamoji_26_refresh_emoji_picker', 'isEnabled', false);
27
- return isEnabled;
28
- };
20
+ import { isRefreshEmojiPickerEnabled } from '../common/isRefreshEmojiPickerEnabled';
29
21
  var isEmojiPickerInitialFocusFixEnabled = function isEmojiPickerInitialFocusFixEnabled() {
30
22
  if (!FeatureGates.initializeCompleted()) {
31
23
  return false;
@@ -13,7 +13,6 @@ import { useCallback, useEffect, useMemo, useRef, useState, createRef, memo } fr
13
13
  import { unstable_batchedUpdates as batchedUpdates } from 'react-dom';
14
14
  import { FormattedMessage, useIntl } from 'react-intl';
15
15
  import { getDocument } from '@atlaskit/browser-apis';
16
- import FeatureGates from '@atlaskit/feature-gate-js-client/feature-gates';
17
16
  import { combine } from '@atlaskit/pragmatic-drag-and-drop/utils/combine';
18
17
  import { dropTargetForExternal } from '@atlaskit/pragmatic-drag-and-drop/adapter/drop-target-for-external';
19
18
  import { monitorForExternal } from '@atlaskit/pragmatic-drag-and-drop/adapter/monitor-for-external';
@@ -49,19 +48,11 @@ import { isPromise } from '../../util/is-promise';
49
48
  import { defaultProductivityColor, getStoredProductivityColor, storeProductivityColor } from '../../util/productivity-colors';
50
49
  import { createRecordSelectionDefault } from '../common/RecordSelectionDefault';
51
50
  import { uploadEmoji } from '../common/UploadEmoji';
51
+ import { isRefreshEmojiPickerEnabled } from '../common/isRefreshEmojiPickerEnabled';
52
52
  import { messages } from '../i18n';
53
53
  import CategorySelector from './CategorySelector';
54
54
  import EmojiPickerFooter from './EmojiPickerFooter';
55
55
  import { EmojiPickerVirtualListInternal as EmojiPickerList } from './EmojiPickerList';
56
- var isRefreshEmojiPickerEnabled = function isRefreshEmojiPickerEnabled() {
57
- if (!FeatureGates.initializeCompleted()) {
58
- return false;
59
- }
60
-
61
- // eslint-disable-next-line @atlaskit/platform/use-recommended-utils
62
- var isEnabled = FeatureGates.getExperimentValue('platform_teamoji_26_refresh_emoji_picker', 'isEnabled', false);
63
- return isEnabled;
64
- };
65
56
  var emojiPickerBoxShadow = "var(--ds-shadow-overlay, 0px 8px 12px #1E1F2126, 0px 0px 1px #1E1F214f)";
66
57
  var emojiPickerHeight = 295;
67
58
  var emojiPickerHeightWithPreview = 349; // emojiPickerHeight + emojiPickerPreviewHeight;
@@ -6,6 +6,7 @@ import { memo } from 'react';
6
6
  import { useIntl } from 'react-intl';
7
7
  import CachingEmoji from '../common/CachingEmoji';
8
8
  import { useEmojiPickerListContext } from '../../hooks/useEmojiPickerListContext';
9
+ import { isTeamoji26RefreshEmojiPickerEnabledNoExposure } from '../../util/teamoji26RefreshEmojiPicker';
9
10
  import { expValEqualsNoExposure } from '@atlaskit/tmp-editor-statsig/exp-val-equals-no-exposure';
10
11
  import { messages } from '../i18n';
11
12
  var emojiItem = null;
@@ -27,7 +28,7 @@ var EmojiPickerEmojiRow = function EmojiPickerEmojiRow(_ref) {
27
28
  var _useIntl = useIntl(),
28
29
  formatMessage = _useIntl.formatMessage;
29
30
  var fitToHeight = expValEqualsNoExposure('platform_use_unicode_emojis', 'isEnabled', true) ? 24 : undefined;
30
- var preventFocusOnMouseDown = expValEqualsNoExposure('platform_teamoji_26_refresh_emoji_picker', 'isEnabled', true);
31
+ var preventFocusOnMouseDown = isTeamoji26RefreshEmojiPickerEnabledNoExposure();
31
32
  var handleFocus = function handleFocus(index) {
32
33
  return function (emojiId, emoji, event) {
33
34
  setEmojisFocus({
@@ -7,16 +7,7 @@ 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 FeatureGates from '@atlaskit/feature-gate-js-client/feature-gates';
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
- };
10
+ import { isRefreshEmojiPickerEnabled } from '../common/isRefreshEmojiPickerEnabled';
20
11
  var emojiPickerFooter = null;
21
12
  var emojiPickerFooterWithTopShadow = null;
22
13
  var emojiPickerFooterWithTopShadowNew = null;
@@ -12,22 +12,16 @@ import { ax, ix } from "@compiled/react/runtime";
12
12
  function _callSuper(t, o, e) { return o = _getPrototypeOf(o), _possibleConstructorReturn(t, _isNativeReflectConstruct() ? Reflect.construct(o, e || [], _getPrototypeOf(t).constructor) : o.apply(t, e)); }
13
13
  function _isNativeReflectConstruct() { try { var t = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); } catch (t) {} return (_isNativeReflectConstruct = function _isNativeReflectConstruct() { return !!t; })(); }
14
14
  import React from 'react';
15
- import FeatureGates from '@atlaskit/feature-gate-js-client/feature-gates';
16
15
  import { EmojiCommonProvider } from '../../context/EmojiCommonProvider';
17
16
  import { ufoExperiences } from '../../util/analytics/ufoExperiences';
18
17
  import { defaultEmojiPickerSize } from '../../util/constants';
18
+ import { isTeamoji26RefreshEmojiPickerEnabled } from '../../util/teamoji26RefreshEmojiPicker';
19
19
  import LoadingEmojiComponent from '../common/LoadingEmojiComponent';
20
20
  import { UfoErrorBoundary } from '../common/UfoErrorBoundary';
21
21
  import { LoadingItem } from './LoadingItem';
22
22
  import { emojiPickerLoader } from './emojiPickerLoader';
23
23
  var isRefreshEmojiPickerEnabled = function isRefreshEmojiPickerEnabled() {
24
- if (!FeatureGates.initializeCompleted()) {
25
- return false;
26
- }
27
-
28
- // eslint-disable-next-line @atlaskit/platform/use-recommended-utils
29
- var isEnabled = FeatureGates.getExperimentValue('platform_teamoji_26_refresh_emoji_picker', 'isEnabled', false);
30
- return isEnabled;
24
+ return isTeamoji26RefreshEmojiPickerEnabled();
31
25
  };
32
26
  var emojiPicker = null;
33
27
  var emojiPickerNew = null;
@@ -2,12 +2,12 @@ import _toConsumableArray from "@babel/runtime/helpers/toConsumableArray";
2
2
  import _slicedToArray from "@babel/runtime/helpers/slicedToArray";
3
3
  import React, { useCallback, useEffect, useImperativeHandle, useMemo, useRef, useState } from 'react';
4
4
  import { useIntl } from 'react-intl';
5
- import FeatureGates from '@atlaskit/feature-gate-js-client/feature-gates';
6
5
  import { EmojiPickerListContextProvider } from '../../context/EmojiPickerListContext';
7
6
  import { customCategory, defaultEmojiPickerSize, emojiPickerPreviewHeight, frequentCategory, searchCategory, userCustomTitle, yourUploadsCategory } from '../../util/constants';
8
7
  import { filterHiddenEmojis } from '../../util/filter-hidden-emojis';
9
8
  import { filterProductivityEmojisByColor, getProductivityColorPreviewEmojis } from '../../util/productivity-colors';
10
9
  import EmojiActions from '../common/EmojiActions';
10
+ import { isRefreshEmojiPickerEnabled } from '../common/isRefreshEmojiPickerEnabled';
11
11
  import { messages } from '../i18n';
12
12
  import { CategoryDescriptionMap, CategoryDescriptionMapNew } from './categories';
13
13
  import { CategoryHeadingItem } from './CategoryHeadingItem';
@@ -27,16 +27,6 @@ import { virtualItemRenderer } from './virtualItemRenderer';
27
27
  */
28
28
  export var RENDER_EMOJI_PICKER_LIST_TESTID = 'render-emoji-picker-list';
29
29
  var categoryClassname = 'emoji-category';
30
- var teamojiRefreshExperimentName = 'platform_teamoji_26_refresh_emoji_picker';
31
- var isRefreshEmojiPickerEnabled = function isRefreshEmojiPickerEnabled() {
32
- if (!FeatureGates.initializeCompleted()) {
33
- return false;
34
- }
35
-
36
- // eslint-disable-next-line @atlaskit/platform/use-recommended-utils
37
- var isEnabled = FeatureGates.getExperimentValue(teamojiRefreshExperimentName, 'isEnabled', false);
38
- return isEnabled;
39
- };
40
30
  var atlassianCategory = 'ATLASSIAN';
41
31
  var productivityAtlassianSubcategory = 'Productivity';
42
32
  var atlassianSubcategoryOrder = ['Faces', 'Hands', 'Reactions', 'Objects', productivityAtlassianSubcategory, 'Logos'];
@@ -11,15 +11,7 @@ import { useDebouncedCallback } from 'use-debounce';
11
11
  import { EMOJI_SEARCH_DEBOUNCE } from '../../util/constants';
12
12
  import { messages } from '../i18n';
13
13
  import FeatureGates from '@atlaskit/feature-gate-js-client/feature-gates';
14
- var isRefreshEmojiPickerEnabled = function isRefreshEmojiPickerEnabled() {
15
- if (!FeatureGates.initializeCompleted()) {
16
- return false;
17
- }
18
-
19
- // eslint-disable-next-line @atlaskit/platform/use-recommended-utils
20
- var isEnabled = FeatureGates.getExperimentValue('platform_teamoji_26_refresh_emoji_picker', 'isEnabled', false);
21
- return isEnabled;
22
- };
14
+ import { isRefreshEmojiPickerEnabled } from '../common/isRefreshEmojiPickerEnabled';
23
15
  var isEmojiPickerInitialFocusFixEnabled = function isEmojiPickerInitialFocusFixEnabled() {
24
16
  if (!FeatureGates.initializeCompleted()) {
25
17
  return false;
@@ -6,18 +6,9 @@ function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbol
6
6
  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; }
7
7
  import React, { useCallback, useImperativeHandle } from 'react';
8
8
  import { useVirtualizer } from '@tanstack/react-virtual';
9
- import FeatureGates from '@atlaskit/feature-gate-js-client/feature-gates';
10
9
  import { useEmojiPickerListContext } from '../../hooks/useEmojiPickerListContext';
11
10
  import { EMOJIPICKERLIST_KEYBOARD_KEYS_SUPPORTED, EMOJI_LIST_COLUMNS, EMOJI_LIST_PAGE_COUNT, KeyboardNavigationDirection, KeyboardKeys } from '../../util/constants';
12
- var isRefreshEmojiPickerEnabled = function isRefreshEmojiPickerEnabled() {
13
- if (!FeatureGates.initializeCompleted()) {
14
- return false;
15
- }
16
-
17
- // eslint-disable-next-line @atlaskit/platform/use-recommended-utils
18
- var isEnabled = FeatureGates.getExperimentValue('platform_teamoji_26_refresh_emoji_picker', 'isEnabled', false);
19
- return isEnabled;
20
- };
11
+ import { isRefreshEmojiPickerEnabled } from '../common/isRefreshEmojiPickerEnabled';
21
12
  var virtualList = null;
22
13
  var virtualRowStyle = null;
23
14
  export var virtualListScrollContainerTestId = 'virtual-list-scroll-container';
@@ -12,7 +12,7 @@ export var createEvent = function createEvent(eventType, action, actionSubject,
12
12
  actionSubjectId: actionSubjectId,
13
13
  attributes: _objectSpread({
14
14
  packageName: "@atlaskit/emoji",
15
- packageVersion: "72.2.6"
15
+ packageVersion: "72.3.1"
16
16
  }, attributes)
17
17
  };
18
18
  };
@@ -0,0 +1,11 @@
1
+ import { isExperimentEnabled } from '@atlaskit/platform-feature-experiments/is-experiment-enabled';
2
+ import { UNSAFE_expValNoExposure } from '@atlaskit/platform-feature-experiments/unsafe-exp-val-no-exposure';
3
+ import { fg } from '@atlaskit/platform-feature-flags/fg';
4
+ export var teamoji26RefreshEmojiPickerExperimentName = 'platform_teamoji_26_refresh_emoji_picker';
5
+ export var teamoji26RefreshEmojiPickerUserIdGateName = 'platform_teamoji_26_refresh_emoji_picker_user_id';
6
+ export var isTeamoji26RefreshEmojiPickerEnabled = function isTeamoji26RefreshEmojiPickerEnabled() {
7
+ return isExperimentEnabled(teamoji26RefreshEmojiPickerExperimentName) || fg(teamoji26RefreshEmojiPickerUserIdGateName);
8
+ };
9
+ export var isTeamoji26RefreshEmojiPickerEnabledNoExposure = function isTeamoji26RefreshEmojiPickerEnabledNoExposure() {
10
+ return UNSAFE_expValNoExposure(teamoji26RefreshEmojiPickerExperimentName, 'isEnabled', false) === true || fg(teamoji26RefreshEmojiPickerUserIdGateName);
11
+ };
@@ -35,6 +35,11 @@ export interface Props extends Omit<React.HTMLAttributes<HTMLSpanElement>, 'onMo
35
35
  * Fits emoji to height in pixels, keeping aspect ratio
36
36
  */
37
37
  fitToHeight?: number;
38
+ /**
39
+ * When true, the emoji is treated as decorative (purely visual).
40
+ * This removes the aria-label so screen readers will skip the emoji.
41
+ */
42
+ isDecorative?: boolean;
38
43
  /**
39
44
  * Called when an emoji is deleted
40
45
  */
@@ -1,5 +1 @@
1
- /**
2
- * @jsxRuntime classic
3
- * @jsx jsx
4
- */
5
1
  export declare const isRefreshEmojiPickerEnabled: () => boolean;
@@ -0,0 +1,4 @@
1
+ export declare const teamoji26RefreshEmojiPickerExperimentName = "platform_teamoji_26_refresh_emoji_picker";
2
+ export declare const teamoji26RefreshEmojiPickerUserIdGateName = "platform_teamoji_26_refresh_emoji_picker_user_id";
3
+ export declare const isTeamoji26RefreshEmojiPickerEnabled: () => boolean;
4
+ export declare const isTeamoji26RefreshEmojiPickerEnabledNoExposure: () => boolean;