@atlaskit/emoji 70.4.1 → 70.5.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (80) hide show
  1. package/CHANGELOG.md +13 -0
  2. package/dist/cjs/components/common/AddEmoji.compiled.css +5 -0
  3. package/dist/cjs/components/common/AddEmoji.js +37 -0
  4. package/dist/cjs/components/common/EmojiActions.js +40 -13
  5. package/dist/cjs/components/common/EmojiUploadPicker.js +2 -1
  6. package/dist/cjs/components/common/TonePreviewButton.compiled.css +1 -0
  7. package/dist/cjs/components/common/TonePreviewButton.js +22 -1
  8. package/dist/cjs/components/picker/CategorySelector.compiled.css +2 -2
  9. package/dist/cjs/components/picker/CategorySelector.js +6 -3
  10. package/dist/cjs/components/picker/EmojiPickerComponent.js +14 -3
  11. package/dist/cjs/components/picker/EmojiPickerEmojiRow.js +4 -0
  12. package/dist/cjs/components/picker/EmojiPickerFooter.compiled.css +7 -2
  13. package/dist/cjs/components/picker/EmojiPickerFooter.js +24 -2
  14. package/dist/cjs/components/picker/EmojiPickerList.js +5 -3
  15. package/dist/cjs/components/picker/EmojiPickerListSearch.compiled.css +4 -0
  16. package/dist/cjs/components/picker/EmojiPickerListSearch.js +26 -1
  17. package/dist/cjs/components/picker/EmojiPickerSizes.js +1 -0
  18. package/dist/cjs/components/picker/categories.js +13 -13
  19. package/dist/cjs/util/analytics/analytics.js +1 -1
  20. package/dist/cjs/util/constants.js +2 -1
  21. package/dist/es2019/components/common/AddEmoji.compiled.css +5 -0
  22. package/dist/es2019/components/common/AddEmoji.js +28 -0
  23. package/dist/es2019/components/common/EmojiActions.js +40 -14
  24. package/dist/es2019/components/common/EmojiUploadPicker.js +2 -1
  25. package/dist/es2019/components/common/TonePreviewButton.compiled.css +1 -0
  26. package/dist/es2019/components/common/TonePreviewButton.js +22 -1
  27. package/dist/es2019/components/picker/CategorySelector.compiled.css +2 -2
  28. package/dist/es2019/components/picker/CategorySelector.js +3 -2
  29. package/dist/es2019/components/picker/EmojiPickerComponent.js +14 -3
  30. package/dist/es2019/components/picker/EmojiPickerEmojiRow.js +4 -0
  31. package/dist/es2019/components/picker/EmojiPickerFooter.compiled.css +7 -2
  32. package/dist/es2019/components/picker/EmojiPickerFooter.js +31 -7
  33. package/dist/es2019/components/picker/EmojiPickerList.js +7 -3
  34. package/dist/es2019/components/picker/EmojiPickerListSearch.compiled.css +4 -0
  35. package/dist/es2019/components/picker/EmojiPickerListSearch.js +26 -1
  36. package/dist/es2019/components/picker/EmojiPickerSizes.js +2 -1
  37. package/dist/es2019/components/picker/categories.js +13 -13
  38. package/dist/es2019/util/analytics/analytics.js +1 -1
  39. package/dist/es2019/util/constants.js +1 -0
  40. package/dist/esm/components/common/AddEmoji.compiled.css +5 -0
  41. package/dist/esm/components/common/AddEmoji.js +28 -0
  42. package/dist/esm/components/common/EmojiActions.js +40 -13
  43. package/dist/esm/components/common/EmojiUploadPicker.js +2 -1
  44. package/dist/esm/components/common/TonePreviewButton.compiled.css +1 -0
  45. package/dist/esm/components/common/TonePreviewButton.js +22 -1
  46. package/dist/esm/components/picker/CategorySelector.compiled.css +2 -2
  47. package/dist/esm/components/picker/CategorySelector.js +5 -2
  48. package/dist/esm/components/picker/EmojiPickerComponent.js +14 -3
  49. package/dist/esm/components/picker/EmojiPickerEmojiRow.js +4 -0
  50. package/dist/esm/components/picker/EmojiPickerFooter.compiled.css +7 -2
  51. package/dist/esm/components/picker/EmojiPickerFooter.js +24 -2
  52. package/dist/esm/components/picker/EmojiPickerList.js +5 -3
  53. package/dist/esm/components/picker/EmojiPickerListSearch.compiled.css +4 -0
  54. package/dist/esm/components/picker/EmojiPickerListSearch.js +26 -1
  55. package/dist/esm/components/picker/EmojiPickerSizes.js +2 -1
  56. package/dist/esm/components/picker/categories.js +13 -13
  57. package/dist/esm/util/analytics/analytics.js +1 -1
  58. package/dist/esm/util/constants.js +1 -0
  59. package/dist/types/components/common/AddEmoji.d.ts +11 -0
  60. package/dist/types/components/common/EmojiActions.d.ts +2 -0
  61. package/dist/types/components/picker/CategorySelector.d.ts +1 -0
  62. package/dist/types/components/picker/EmojiPickerEmojiRow.d.ts +2 -1
  63. package/dist/types/components/picker/EmojiPickerFooter.d.ts +3 -1
  64. package/dist/types/components/picker/EmojiPickerList.d.ts +1 -0
  65. package/dist/types/components/picker/EmojiPickerSizes.d.ts +1 -0
  66. package/dist/types/util/constants.d.ts +1 -0
  67. package/dist/types-ts4.5/components/common/AddEmoji.d.ts +11 -0
  68. package/dist/types-ts4.5/components/common/EmojiActions.d.ts +2 -0
  69. package/dist/types-ts4.5/components/picker/CategorySelector.d.ts +1 -0
  70. package/dist/types-ts4.5/components/picker/EmojiPickerEmojiRow.d.ts +2 -1
  71. package/dist/types-ts4.5/components/picker/EmojiPickerFooter.d.ts +3 -1
  72. package/dist/types-ts4.5/components/picker/EmojiPickerList.d.ts +1 -0
  73. package/dist/types-ts4.5/components/picker/EmojiPickerSizes.d.ts +1 -0
  74. package/dist/types-ts4.5/util/constants.d.ts +1 -0
  75. package/package.json +4 -4
  76. package/dist/cjs/components/common/messages.js +0 -14
  77. package/dist/es2019/components/common/messages.js +0 -8
  78. package/dist/esm/components/common/messages.js +0 -8
  79. package/dist/types/components/common/messages.d.ts +0 -7
  80. package/dist/types-ts4.5/components/common/messages.d.ts +0 -7
@@ -0,0 +1,28 @@
1
+ /* AddEmoji.tsx generated by @compiled/babel-plugin v0.39.1 */
2
+ import "./AddEmoji.compiled.css";
3
+ import * as React from 'react';
4
+ import { ax, ix } from "@compiled/react/runtime";
5
+ import { Fragment } from 'react';
6
+ import { FormattedMessage } from 'react-intl';
7
+ import { messages } from '../i18n';
8
+ import Button from '@atlaskit/button/new';
9
+ export var emojiActionsTestId = 'emoji-actions';
10
+ export var uploadEmojiTestId = 'upload-emoji';
11
+ var addCustomEmoji = null;
12
+
13
+ // Generic Type for the wrapped functional component
14
+
15
+ export var AddOwnEmoji = function AddOwnEmoji(props) {
16
+ var onOpenUpload = props.onOpenUpload,
17
+ uploadEnabled = props.uploadEnabled;
18
+ return /*#__PURE__*/React.createElement(Fragment, null, uploadEnabled && /*#__PURE__*/React.createElement("div", {
19
+ "data-testid": uploadEmojiTestId,
20
+ className: ax(["_1wpz1h6o _19pkutpp _2hwxutpp _otyrutpp _18u0utpp"])
21
+ }, /*#__PURE__*/React.createElement(FormattedMessage, messages.addCustomEmojiLabel, function (label) {
22
+ return /*#__PURE__*/React.createElement(Button, {
23
+ onClick: onOpenUpload,
24
+ tabIndex: 0,
25
+ id: "add-custom-emoji"
26
+ }, label);
27
+ })));
28
+ };
@@ -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 } from 'react';
8
8
  import { fg } from '@atlaskit/platform-feature-flags';
9
- import { FormattedMessage, injectIntl, useIntl } from 'react-intl';
9
+ import { FormattedMessage, injectIntl } from 'react-intl';
10
10
  import EmojiDeletePreview from './EmojiDeletePreview';
11
11
  import EmojiUploadPicker from './EmojiUploadPicker';
12
12
  import TonePreviewButton from './TonePreviewButton';
@@ -15,7 +15,6 @@ import { EmojiPickerListSearch } from '../picker/EmojiPickerListSearch';
15
15
  import { messages } from '../i18n';
16
16
  import AkButton from '@atlaskit/button/standard-button';
17
17
  import AddIcon from '@atlaskit/icon/core/add';
18
- import EmojiAddIcon from '@atlaskit/icon/core/emoji-add';
19
18
  import { setSkinToneAriaLabelText } from './setSkinToneAriaLabelText';
20
19
  import { emojiPickerAddEmoji } from './styles';
21
20
  import { DEFAULT_TONE } from '../../util/constants';
@@ -28,28 +27,24 @@ var addCustomEmojiButton = null;
28
27
  var emojiActionsWrapper = null;
29
28
  var emojiToneSelectorContainer = null;
30
29
  var previewFooter = null;
30
+ var previewFooterNew = null;
31
31
  export var emojiActionsTestId = 'emoji-actions';
32
32
  export var uploadEmojiTestId = 'upload-emoji';
33
33
 
34
34
  // Generic Type for the wrapped functional component
35
35
 
36
- var AddOwnEmoji = function AddOwnEmoji(props) {
36
+ export var AddOwnEmoji = function AddOwnEmoji(props) {
37
37
  var onOpenUpload = props.onOpenUpload,
38
38
  uploadEnabled = props.uploadEnabled;
39
- var _useIntl = useIntl(),
40
- formatMessage = _useIntl.formatMessage;
41
39
  return /*#__PURE__*/React.createElement(Fragment, null, uploadEnabled && /*#__PURE__*/React.createElement("div", {
42
40
  "data-testid": uploadEmojiTestId,
43
41
  className: ax(["_1wpz1h6o _18u019bv _otyr19bv"])
44
- }, /*#__PURE__*/React.createElement(FormattedMessage, fg('platform_emoji_picker_refresh') ? messages.addEmojiLabel : messages.addCustomEmojiLabel, function (label) {
42
+ }, /*#__PURE__*/React.createElement(FormattedMessage, messages.addCustomEmojiLabel, function (label) {
45
43
  return /*#__PURE__*/React.createElement(AkButton, {
46
44
  onClick: onOpenUpload,
47
45
  iconBefore: /*#__PURE__*/React.createElement(Box, {
48
46
  xcss: styles.icon
49
- }, fg('platform_emoji_picker_refresh') ? /*#__PURE__*/React.createElement(EmojiAddIcon, {
50
- color: "currentColor",
51
- label: formatMessage(messages.addCustomEmojiLabel)
52
- }) : /*#__PURE__*/React.createElement(AddIcon, {
47
+ }, /*#__PURE__*/React.createElement(AddIcon, {
53
48
  color: "currentColor",
54
49
  label: ""
55
50
  })),
@@ -123,6 +118,7 @@ var TonesWrapper = function TonesWrapper(props) {
123
118
  isVisible: !showToneSelector
124
119
  }));
125
120
  };
121
+ // TODO: remove this on cleanup of platform_emoji_picker_refresh
126
122
  export var EmojiActions = function EmojiActions(props) {
127
123
  var onToneSelected = props.onToneSelected,
128
124
  onToneSelectorCancelled = props.onToneSelectorCancelled,
@@ -162,7 +158,15 @@ export var EmojiActions = function EmojiActions(props) {
162
158
  setShowToneSelector(false);
163
159
  }, [showToneSelector, onToneSelectorCancelled]);
164
160
  if (uploading) {
165
- return /*#__PURE__*/React.createElement("div", {
161
+ return fg('platform_emoji_picker_refresh') ? /*#__PURE__*/React.createElement("div", {
162
+ className: ax(["_16jlidpf _1o9zidpf _i0dl1wug"])
163
+ }, /*#__PURE__*/React.createElement(EmojiUploadPicker, {
164
+ onUploadCancelled: onUploadCancelled,
165
+ onUploadEmoji: onUploadEmoji,
166
+ onFileChooserClicked: onFileChooserClicked,
167
+ errorMessage: uploadErrorMessage,
168
+ initialUploadName: initialUploadName
169
+ })) : /*#__PURE__*/React.createElement("div", {
166
170
  className: ax(["_16jlidpf _1o9zidpf _i0dl1wug _n7zl1uh4 _16qsjgpa"])
167
171
  }, /*#__PURE__*/React.createElement(EmojiUploadPicker, {
168
172
  onUploadCancelled: onUploadCancelled,
@@ -173,7 +177,13 @@ export var EmojiActions = function EmojiActions(props) {
173
177
  }));
174
178
  }
175
179
  if (emojiToDelete) {
176
- return /*#__PURE__*/React.createElement("div", {
180
+ return fg('platform_emoji_picker_refresh') ? /*#__PURE__*/React.createElement("div", {
181
+ className: ax(["_16jlidpf _1o9zidpf _i0dl1wug"])
182
+ }, /*#__PURE__*/React.createElement(EmojiDeletePreview, {
183
+ emoji: emojiToDelete,
184
+ onDeleteEmoji: onDeleteEmoji,
185
+ onCloseDelete: onCloseDelete
186
+ })) : /*#__PURE__*/React.createElement("div", {
177
187
  className: ax(["_16jlidpf _1o9zidpf _i0dl1wug _n7zl1uh4 _16qsjgpa"])
178
188
  }, /*#__PURE__*/React.createElement(EmojiDeletePreview, {
179
189
  emoji: emojiToDelete,
@@ -181,7 +191,24 @@ export var EmojiActions = function EmojiActions(props) {
181
191
  onCloseDelete: onCloseDelete
182
192
  }));
183
193
  }
184
- return /*#__PURE__*/React.createElement("div", {
194
+ return fg('platform_emoji_picker_refresh') ? /*#__PURE__*/React.createElement("div", {
195
+ "data-testid": emojiActionsTestId,
196
+ onMouseLeave: onMouseLeaveHandler,
197
+ onBlur: fg('platform_suppression_removal_fix_reactions') ? onMouseLeaveHandler : undefined,
198
+ className: ax(["_16jlidpf _1o9zidpf _i0dl1wug"])
199
+ }, /*#__PURE__*/React.createElement("div", {
200
+ className: ax(["_1e0c1txw _1bahesu3 _4cvr1h6o"])
201
+ }, /*#__PURE__*/React.createElement(EmojiPickerListSearch, {
202
+ onChange: onChange,
203
+ query: query,
204
+ resultsCount: resultsCount,
205
+ isVisible: !showToneSelector
206
+ }), /*#__PURE__*/React.createElement(TonesWrapper, _extends({}, props, {
207
+ onToneOpen: onToneOpenHandler,
208
+ onToneClose: onToneCloseHandler,
209
+ onToneSelected: onToneSelectedHandler,
210
+ showToneSelector: showToneSelector
211
+ })))) : /*#__PURE__*/React.createElement("div", {
185
212
  "data-testid": emojiActionsTestId,
186
213
  onMouseLeave: onMouseLeaveHandler,
187
214
  onBlur: fg('platform_suppression_removal_fix_reactions') ? onMouseLeaveHandler : undefined,
@@ -87,7 +87,8 @@ var ChooseEmojiFile = /*#__PURE__*/memo(function (props) {
87
87
  appearance: "subtle",
88
88
  spacing: "none",
89
89
  shouldFitContainer: true,
90
- testId: cancelEmojiUploadPickerTestId
90
+ testId: cancelEmojiUploadPickerTestId,
91
+ name: messages.addCustomEmojiLabel.defaultMessage
91
92
  }, /*#__PURE__*/React.createElement(CrossIcon, {
92
93
  color: "currentColor",
93
94
  label: cancelLabel
@@ -1,4 +1,5 @@
1
1
 
2
+ ._19itia51{border:var(--ds-border-width,1px) solid var(--ds-border,#0b120e24)}
2
3
  ._19itidpf{border:0}
3
4
  ._2rkofajl{border-radius:var(--ds-radius-small,3px)}._11bcidpf::-moz-focus-inner{border-width:0}
4
5
  ._dqozglyw::-moz-focus-inner{border-style:none}
@@ -3,10 +3,12 @@ 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 { fg } from '@atlaskit/platform-feature-flags';
6
7
  import Emoji from './Emoji';
7
8
  export var tonePreviewTestId = 'tone-preview';
8
9
  var emojiButton = null;
9
10
  var hidden = null;
11
+ var emojiButtonOutline = null;
10
12
  export var TonePreviewButton = /*#__PURE__*/forwardRef(function (props, ref) {
11
13
  var emoji = props.emoji,
12
14
  selectOnHover = props.selectOnHover,
@@ -15,7 +17,26 @@ export var TonePreviewButton = /*#__PURE__*/forwardRef(function (props, ref) {
15
17
  onSelected = props.onSelected,
16
18
  _props$isVisible = props.isVisible,
17
19
  isVisible = _props$isVisible === void 0 ? true : _props$isVisible;
18
- return /*#__PURE__*/React.createElement("button", {
20
+ return fg('platform_emoji_picker_refresh') ? /*#__PURE__*/React.createElement("button", {
21
+ ref: ref,
22
+ onClick: onSelected,
23
+ "aria-label": ariaLabelText,
24
+ "aria-expanded": ariaExpanded,
25
+ "aria-controls": "emoji-picker-tone-selector"
26
+ // eslint-disable-next-line @atlaskit/ui-styling-standard/enforce-style-prop -- Ignored via go/DSP-18766
27
+ ,
28
+ style: {
29
+ overflow: 'hidden'
30
+ },
31
+ "data-testid": tonePreviewTestId,
32
+ type: "button",
33
+ className: ax(["_19itidpf _2rkofajl _ca0qidpf _u5f3idpf _n3tdidpf _19bvidpf _bfhk1j28 _80omtlke _kqswh2mm _1e0c1o8l _lev4idpf _1cx6idpf _tyukidpf _2ewlidpf _11bcidpf _dqozglyw _1at812x7 _1cjo12x7 _1yg612x7 _hjaq12x7 _hlt21tcg _1s3c1tcg _1i911tcg _1ye71tcg _nt751r31 _49pcglyw _1hvw1o36 _7ehi1y54 _491113zc", !isVisible && "_tzy4idpf _3um015vq _1e0cglyw", "_19itia51"])
34
+ }, /*#__PURE__*/React.createElement(Emoji, {
35
+ emoji: emoji,
36
+ selectOnHover: selectOnHover,
37
+ shouldBeInteractive: false,
38
+ "aria-hidden": true
39
+ })) : /*#__PURE__*/React.createElement("button", {
19
40
  ref: ref,
20
41
  onClick: onSelected,
21
42
  "aria-label": ariaLabelText,
@@ -22,12 +22,12 @@
22
22
  ._bfhksm61{background-color:var(--ds-background-neutral-subtle,#00000000)}
23
23
  ._bfhkvuon{background-color:var(--ds-surface,#fff)}
24
24
  ._ca0q12x7{padding-top:var(--ds-space-075,6px)}
25
- ._ca0qpxbi{padding-top:var(--ds-space-200,1pc)}
25
+ ._ca0qu2gc{padding-top:var(--ds-space-100,8px)}
26
26
  ._ca0qze3t{padding-top:var(--ds-space-0,0)}
27
27
  ._dpd31txw button{display:flex}
28
28
  ._i0dl1wug{flex-basis:auto}
29
29
  ._n3td12x7{padding-bottom:var(--ds-space-075,6px)}
30
- ._n3tdpxbi{padding-bottom:var(--ds-space-200,1pc)}
30
+ ._n3tdu2gc{padding-bottom:var(--ds-space-100,8px)}
31
31
  ._n3tdze3t{padding-bottom:var(--ds-space-0,0)}
32
32
  ._syaz1rpy{color:var(--ds-text-subtlest,#6b6e76)}
33
33
  ._syaz6x5g{color:var(--ds-text-selected,#1868db)}
@@ -16,7 +16,7 @@ import { usePrevious } from '../../hooks/usePrevious';
16
16
  import { RENDER_EMOJI_PICKER_LIST_TESTID } from './EmojiPickerList';
17
17
  var styles = {
18
18
  commonCategory: "_2rko12b0 _v564h5h4 _189eidpf _bfhksm61 _ca0qze3t _n3tdze3t _19bvze3t _u5f3ze3t",
19
- commonCategoryNew: "_v564h5h4 _189eidpf _bfhksm61 _ca0qpxbi _n3tdpxbi _19bv12x7 _u5f312x7 _1e0c1txw _4cvr1h6o _1bah1h6o",
19
+ commonCategoryNew: "_v564h5h4 _189eidpf _bfhksm61 _ca0qu2gc _n3tdu2gc _19bv12x7 _u5f312x7 _1e0c1txw _4cvr1h6o _1bah1h6o",
20
20
  defaultCategory: "_syaz1rpy _30l36x5g",
21
21
  defaultCategoryNew: "_syaz1rpy _1doc1dm9 _1il9nqa1 _1o3i1j28 _30l31rpy _1jc41ihb",
22
22
  activeCategory: "_syaz6x5g _30l36x5g",
@@ -30,13 +30,16 @@ var categorySelectorTablistNew = null;
30
30
  export var sortCategories = function sortCategories(c1, c2) {
31
31
  return CategoryDescriptionMap[c1].order - CategoryDescriptionMap[c2].order;
32
32
  };
33
+ export var sortCategoriesNew = function sortCategoriesNew(c1, c2) {
34
+ return CategoryDescriptionMapNew[c1].order - CategoryDescriptionMapNew[c2].order;
35
+ };
33
36
  var addNewCategories = function addNewCategories(oldCategories, newCategories) {
34
37
  if (!newCategories) {
35
38
  return oldCategories;
36
39
  }
37
40
  return oldCategories.concat(newCategories.filter(function (category) {
38
41
  return !!(fg('platform_emoji_picker_refresh') ? CategoryDescriptionMapNew : CategoryDescriptionMap)[category];
39
- })).sort(sortCategories);
42
+ })).sort(fg('platform_emoji_picker_refresh') ? sortCategoriesNew : sortCategories);
40
43
  };
41
44
  export var categorySelectorComponentTestId = 'category-selector-component';
42
45
  export var categorySelectorCategoryTestId = function categorySelectorCategoryTestId(categoryId) {
@@ -134,6 +134,11 @@ var EmojiPickerComponent = function EmojiPickerComponent(_ref) {
134
134
  setSelectedEmoji(emoji);
135
135
  }
136
136
  }, [selectedEmoji]);
137
+ var onEmojiLeave = useCallback(function () {
138
+ if (fg('platform_emoji_picker_refresh')) {
139
+ setSelectedEmoji(undefined);
140
+ }
141
+ }, []);
137
142
  var onCategoryActivated = useCallback(function (category) {
138
143
  // Ignore scroll-driven category changes while a programmatic reveal()
139
144
  // scroll is in progress — they would flicker the indicator through
@@ -500,7 +505,7 @@ var EmojiPickerComponent = function EmojiPickerComponent(_ref) {
500
505
  emojiProvider.unsubscribe(onProviderChange);
501
506
  };
502
507
  }, [emojiProvider, onProviderChange]);
503
- var showPreview = selectedEmoji && !uploading;
508
+ var showPreview = fg('platform_emoji_picker_refresh') ? !uploading : selectedEmoji && !uploading;
504
509
  if (fg('platform_no_noninteractive_emojis_reactions')) {
505
510
  return /*#__PURE__*/React.createElement("div", {
506
511
  ref: onPickerRef,
@@ -529,6 +534,7 @@ var EmojiPickerComponent = function EmojiPickerComponent(_ref) {
529
534
  currentUser: currentUser,
530
535
  onEmojiSelected: recordUsageOnSelection,
531
536
  onEmojiActive: onEmojiActive,
537
+ onEmojiLeave: onEmojiLeave,
532
538
  onEmojiDelete: onTriggerDelete,
533
539
  onCategoryActivated: onCategoryActivated,
534
540
  onSearch: onSearch,
@@ -553,7 +559,9 @@ var EmojiPickerComponent = function EmojiPickerComponent(_ref) {
553
559
  size: size,
554
560
  activeCategoryId: activeCategory
555
561
  }), showPreview && /*#__PURE__*/React.createElement(EmojiPickerFooter, {
556
- selectedEmoji: selectedEmoji
562
+ selectedEmoji: selectedEmoji,
563
+ uploadEnabled: isUploadSupported && !uploading,
564
+ onOpenUpload: onOpenUpload
557
565
  })));
558
566
  }
559
567
  return /*#__PURE__*/React.createElement("div", {
@@ -580,6 +588,7 @@ var EmojiPickerComponent = function EmojiPickerComponent(_ref) {
580
588
  currentUser: currentUser,
581
589
  onEmojiSelected: recordUsageOnSelection,
582
590
  onEmojiActive: onEmojiActive,
591
+ onEmojiLeave: onEmojiLeave,
583
592
  onEmojiDelete: onTriggerDelete,
584
593
  onCategoryActivated: onCategoryActivated,
585
594
  onSearch: onSearch,
@@ -604,7 +613,9 @@ var EmojiPickerComponent = function EmojiPickerComponent(_ref) {
604
613
  size: size,
605
614
  activeCategoryId: activeCategory
606
615
  }), showPreview && /*#__PURE__*/React.createElement(EmojiPickerFooter, {
607
- selectedEmoji: selectedEmoji
616
+ selectedEmoji: selectedEmoji,
617
+ uploadEnabled: isUploadSupported && !uploading,
618
+ onOpenUpload: onOpenUpload
608
619
  }));
609
620
  };
610
621
  var _default_1 = /*#__PURE__*/memo(EmojiPickerComponent);
@@ -13,6 +13,7 @@ var EmojiPickerEmojiRow = function EmojiPickerEmojiRow(_ref) {
13
13
  var emojis = _ref.emojis,
14
14
  onSelected = _ref.onSelected,
15
15
  onMouseMove = _ref.onMouseMove,
16
+ onMouseLeave = _ref.onMouseLeave,
16
17
  onFocus = _ref.onFocus,
17
18
  title = _ref.title,
18
19
  showDelete = _ref.showDelete,
@@ -46,6 +47,9 @@ var EmojiPickerEmojiRow = function EmojiPickerEmojiRow(_ref) {
46
47
  role: "gridcell",
47
48
  "aria-colindex": index + 1 // aria-colindex is 1 based
48
49
  ,
50
+ onMouseLeave: onMouseLeave,
51
+ onBlur: onMouseLeave,
52
+ tabIndex: 0,
49
53
  className: ax(["_1e0c1o8l _y3gn1h6o _1bsb1ylp _1wcg1qi0 _1678tlke _7b50u2gc _1rf4u2gc _b4kiu2gc _bm9mu2gc _1lvc1tcg _1cf71tcg _8vlfze3t _1909ze3t _1tcfze3t _n7xcze3t _4ubfu2gc _18x3u2gc _fw9su2gc _29jju2gc _qpkw1tcg _elsp1tcg _vtzrze3t _w2q0ze3t _o5kcze3t _1mc3ze3t _115ch2mm _yrst1ssb _85ft1ssb _5mfndbra _1k8z1tcg _17dz1tcg _zdyf1ule _1mn81tcg _u5ah1tcg"])
50
54
  }, /*#__PURE__*/React.createElement(CachingEmoji, {
51
55
  emoji: emoji,
@@ -1,5 +1,10 @@
1
1
 
2
- ._x3do1uh4{border-top:var(--ds-border-width-selected,2px) solid var(--ds-border,#0b120e24)}._16jlidpf{flex-grow:0}
2
+ ._x3do1uh4{border-top:var(--ds-border-width-selected,2px) solid var(--ds-border,#0b120e24)}
3
+ ._x3doia51{border-top:var(--ds-border-width,1px) solid var(--ds-border,#0b120e24)}._16jlidpf{flex-grow:0}
3
4
  ._16qsvjqj{box-shadow:0 -1px 1px 0 var(--ds-border,#0b120e24)}
5
+ ._19bvv77o{padding-left:var(--ds-space-025,2px)}
4
6
  ._1o9zidpf{flex-shrink:0}
5
- ._i0dl1wug{flex-basis:auto}
7
+ ._ca0qv77o{padding-top:var(--ds-space-025,2px)}
8
+ ._i0dl1wug{flex-basis:auto}
9
+ ._n3tdv77o{padding-bottom:var(--ds-space-025,2px)}
10
+ ._u5f3v77o{padding-right:var(--ds-space-025,2px)}
@@ -3,13 +3,35 @@ import "./EmojiPickerFooter.compiled.css";
3
3
  import * as React from 'react';
4
4
  import { ax, ix } from "@compiled/react/runtime";
5
5
  import { memo } from 'react';
6
+ import { useIntl } from 'react-intl';
7
+ import { fg } from '@atlaskit/platform-feature-flags';
8
+ import { Box } from '@atlaskit/primitives/compiled';
6
9
  import { EmojiPreviewComponent } from '../common/EmojiPreviewComponent';
10
+ import { AddOwnEmoji } from '../common/AddEmoji';
7
11
  var emojiPickerFooter = null;
8
12
  var emojiPickerFooterWithTopShadow = null;
13
+ var emojiPickerFooterWithTopShadowNew = null;
14
+ var emojiPreviewContainerStyles = {
15
+ emojiPreviewContainer: "_ca0qv77o _u5f3v77o _n3tdv77o _19bvv77o"
16
+ };
9
17
  export var emojiPickerFooterTestId = 'emoji-picker-footer';
10
18
  var EmojiPickerFooter = function EmojiPickerFooter(_ref) {
11
- var selectedEmoji = _ref.selectedEmoji;
12
- return /*#__PURE__*/React.createElement("div", {
19
+ var selectedEmoji = _ref.selectedEmoji,
20
+ onOpenUpload = _ref.onOpenUpload,
21
+ uploadEnabled = _ref.uploadEnabled;
22
+ var intl = useIntl();
23
+ return fg('platform_emoji_picker_refresh') ? /*#__PURE__*/React.createElement("div", {
24
+ "data-testid": emojiPickerFooterTestId,
25
+ className: ax(["_16jlidpf _1o9zidpf _i0dl1wug", "_x3doia51"])
26
+ }, selectedEmoji ? /*#__PURE__*/React.createElement(Box, {
27
+ xcss: emojiPreviewContainerStyles.emojiPreviewContainer
28
+ }, /*#__PURE__*/React.createElement(EmojiPreviewComponent, {
29
+ emoji: selectedEmoji
30
+ })) : /*#__PURE__*/React.createElement(AddOwnEmoji, {
31
+ onOpenUpload: onOpenUpload,
32
+ uploadEnabled: uploadEnabled,
33
+ intl: intl
34
+ })) : /*#__PURE__*/React.createElement("div", {
13
35
  "data-testid": emojiPickerFooterTestId,
14
36
  className: ax(["_16jlidpf _1o9zidpf _i0dl1wug", "_x3do1uh4 _16qsvjqj"])
15
37
  }, selectedEmoji && /*#__PURE__*/React.createElement(EmojiPreviewComponent, {
@@ -33,6 +33,7 @@ export var EmojiPickerVirtualListInternal = /*#__PURE__*/React.forwardRef(functi
33
33
  onEmojiSelected = _props$onEmojiSelecte === void 0 ? function () {} : _props$onEmojiSelecte,
34
34
  _props$onEmojiActive = props.onEmojiActive,
35
35
  onEmojiActive = _props$onEmojiActive === void 0 ? function () {} : _props$onEmojiActive,
36
+ onEmojiLeave = props.onEmojiLeave,
36
37
  _props$onEmojiDelete = props.onEmojiDelete,
37
38
  onEmojiDelete = _props$onEmojiDelete === void 0 ? function () {} : _props$onEmojiDelete,
38
39
  _props$onCategoryActi = props.onCategoryActivated,
@@ -162,11 +163,12 @@ export var EmojiPickerVirtualListInternal = /*#__PURE__*/React.forwardRef(functi
162
163
  onSelected: onEmojiSelected,
163
164
  onDelete: onEmojiDelete,
164
165
  onMouseMove: onEmojiActive,
165
- onFocus: onEmojiActive
166
+ onFocus: onEmojiActive,
167
+ onMouseLeave: fg('platform_emoji_picker_refresh') ? onEmojiLeave : undefined
166
168
  }));
167
169
  }
168
170
  return items;
169
- }, [onEmojiSelected, onEmojiDelete, onEmojiActive]);
171
+ }, [onEmojiSelected, onEmojiDelete, onEmojiActive, onEmojiLeave]);
170
172
  var buildVirtualItems = useCallback(function () {
171
173
  var items = [];
172
174
  var prevFirstCategory = categoryTracker.getFirstCategory();
@@ -317,7 +319,7 @@ export var EmojiPickerVirtualListInternal = /*#__PURE__*/React.forwardRef(functi
317
319
  // eslint-disable-next-line react-hooks/exhaustive-deps
318
320
  }, [virtualItems, categoriesChanged]);
319
321
  var virtualListHeight = useMemo(function () {
320
- return sizes.listHeight + emojiPickerHeightOffset(size);
322
+ return fg('platform_emoji_picker_refresh') ? sizes.listHeightNew + emojiPickerHeightOffset(size) : sizes.listHeight + emojiPickerHeightOffset(size);
321
323
  }, [size]);
322
324
  return /*#__PURE__*/React.createElement(EmojiPickerTabPanel, {
323
325
  showSearchResults: !!query
@@ -1,13 +1,16 @@
1
1
  ._11c8fhey{font:var(--ds-font-body,normal 400 14px/20px "Atlassian Sans",ui-sans-serif,-apple-system,BlinkMacSystemFont,"Segoe UI",Ubuntu,"Helvetica Neue",sans-serif)}
2
+ ._n6341l7x [data-ds--text-field--container]{border-color:var(--ds-border,#0b120e24)}
2
3
  ._12ji1r31{outline-color:currentColor}
3
4
  ._12y31o36{outline-width:medium}
4
5
  ._13xeglyw:invalid{box-shadow:none}
5
6
  ._18u01i6y{margin-left:var(--ds-space-negative-025,-2px)}
7
+ ._18z11b66 [data-ds--text-field--container]{padding-top:var(--ds-space-050,4px)}
6
8
  ._19bvutpp{padding-left:var(--ds-space-150,9pt)}
7
9
  ._1bsb1osq{width:100%}
8
10
  ._1e0cglyw{display:none}
9
11
  ._1goxglyw::-ms-clear{display:none}
10
12
  ._1q51t94y{padding-block-start:1px}
13
+ ._1q51yh40{padding-block-start:2px}
11
14
  ._1qu2glyw{outline-style:none}
12
15
  ._3um015vq{visibility:hidden}
13
16
  ._80om1kw7{cursor:inherit}
@@ -15,6 +18,7 @@
15
18
  ._bozg12x7{padding-inline-start:var(--ds-space-075,6px)}
16
19
  ._ca0qutpp{padding-top:var(--ds-space-150,9pt)}
17
20
  ._n3tdutpp{padding-bottom:var(--ds-space-150,9pt)}
21
+ ._otyr1i6y{margin-bottom:var(--ds-space-negative-025,-2px)}
18
22
  ._syaz1kw7{color:inherit}
19
23
  ._tzy4105o{opacity:.5}
20
24
  ._tzy4idpf{opacity:0}
@@ -5,14 +5,18 @@ import { ax, ix } from "@compiled/react/runtime";
5
5
  import SearchIcon from '@atlaskit/icon/core/search';
6
6
  import TextField from '@atlaskit/textfield';
7
7
  import VisuallyHidden from '@atlaskit/visually-hidden';
8
+ import { fg } from '@atlaskit/platform-feature-flags';
8
9
  import React, { useLayoutEffect, useRef, useState } from 'react';
9
10
  import { useIntl } from 'react-intl';
10
11
  import { useDebouncedCallback } from 'use-debounce';
11
12
  import { EMOJI_SEARCH_DEBOUNCE } from '../../util/constants';
12
13
  import { messages } from '../i18n';
13
14
  var input = null;
15
+ var inputNew = null;
16
+ var textFieldWrapperNew = null;
14
17
  var pickerSearch = null;
15
18
  var searchIcon = null;
19
+ var searchIconNew = null;
16
20
  var hidden = null;
17
21
  export var emojiPickerSearchTestId = 'emoji-picker-search';
18
22
  export var EmojiPickerListSearch = function EmojiPickerListSearch(props) {
@@ -58,7 +62,28 @@ export var EmojiPickerListSearch = function EmojiPickerListSearch(props) {
58
62
  role: "status"
59
63
  }, dirty ? query === '' ? formatMessage(messages.searchResultsStatusSeeAll) : formatMessage(messages.searchResultsStatus, {
60
64
  count: resultsCount
61
- }) : null), /*#__PURE__*/React.createElement(TextField, {
65
+ }) : null), fg('platform_emoji_picker_refresh') ? /*#__PURE__*/React.createElement("div", {
66
+ className: ax(["_n6341l7x _18z11b66"])
67
+ }, /*#__PURE__*/React.createElement(TextField, {
68
+ role: "searchbox",
69
+ "aria-label": formatMessage(messages.searchLabel),
70
+ autoComplete: "off",
71
+ name: "search",
72
+ placeholder: "".concat(formatMessage(messages.searchPlaceholder), "..."),
73
+ defaultValue: query || '',
74
+ onChange: handleOnChange,
75
+ elemBeforeInput: /*#__PURE__*/React.createElement("span", {
76
+ className: ax(["_tzy4105o _18u01i6y _otyr1i6y"])
77
+ }, /*#__PURE__*/React.createElement(SearchIcon, {
78
+ color: "currentColor",
79
+ spacing: "spacious",
80
+ label: ""
81
+ })),
82
+ testId: emojiPickerSearchTestId,
83
+ ref: textRef,
84
+ isCompact: true,
85
+ className: ax(["_11c8fhey _12ji1r31 _1qu2glyw _12y31o36 _vchhusvi _syaz1kw7 _80om1kw7 _1q51yh40 _y4tize3t _85i5v77o _bozg12x7 _1bsb1osq _13xeglyw _1goxglyw"])
86
+ })) : /*#__PURE__*/React.createElement(TextField, {
62
87
  role: "searchbox",
63
88
  "aria-label": formatMessage(messages.searchLabel),
64
89
  autoComplete: "off",
@@ -1,6 +1,7 @@
1
- import { emojiPickerListHeight, emojiPickerWidth } from '../../util/constants';
1
+ import { emojiPickerListHeight, emojiPickerListHeightNew, emojiPickerWidth } from '../../util/constants';
2
2
  export var sizes = {
3
3
  listHeight: emojiPickerListHeight,
4
+ listHeightNew: emojiPickerListHeightNew,
4
5
  listWidth: emojiPickerWidth,
5
6
  searchHeight: 52,
6
7
  // 32px height + 10px padding top/bottom
@@ -106,58 +106,58 @@ export var CategoryDescriptionMapNew = {
106
106
  icon: ClockIcon,
107
107
  order: 1
108
108
  },
109
+ ATLASSIAN: {
110
+ id: 'ATLASSIAN',
111
+ name: 'productivityCategory',
112
+ icon: CheckCircleIcon,
113
+ order: 2
114
+ },
109
115
  PEOPLE: {
110
116
  id: 'PEOPLE',
111
117
  name: 'peopleCategory',
112
118
  icon: EmojiIcon,
113
- order: 2
119
+ order: 3
114
120
  },
115
121
  NATURE: {
116
122
  id: 'NATURE',
117
123
  name: 'natureCategory',
118
124
  icon: TreeIcon,
119
- order: 3
125
+ order: 4
120
126
  },
121
127
  FOODS: {
122
128
  id: 'FOODS',
123
129
  name: 'foodsCategory',
124
130
  icon: TakeoutFoodIcon,
125
- order: 4
131
+ order: 5
126
132
  },
127
133
  ACTIVITY: {
128
134
  id: 'ACTIVITY',
129
135
  name: 'activityCategory',
130
136
  icon: BasketballIcon,
131
- order: 5
137
+ order: 6
132
138
  },
133
139
  PLACES: {
134
140
  id: 'PLACES',
135
141
  name: 'placesCategory',
136
142
  icon: VehicleCarIcon,
137
- order: 6
143
+ order: 7
138
144
  },
139
145
  OBJECTS: {
140
146
  id: 'OBJECTS',
141
147
  name: 'objectsCategory',
142
148
  icon: LightbulbIcon,
143
- order: 7
149
+ order: 8
144
150
  },
145
151
  SYMBOLS: {
146
152
  id: 'SYMBOLS',
147
153
  name: 'symbolsCategory',
148
154
  icon: HeartIcon,
149
- order: 8
155
+ order: 9
150
156
  },
151
157
  FLAGS: {
152
158
  id: 'FLAGS',
153
159
  name: 'flagsCategory',
154
160
  icon: FlagIcon,
155
- order: 9
156
- },
157
- ATLASSIAN: {
158
- id: 'ATLASSIAN',
159
- name: 'productivityCategory',
160
- icon: CheckCircleIcon,
161
161
  order: 10
162
162
  },
163
163
  USER_CUSTOM: {
@@ -14,7 +14,7 @@ var createEvent = function createEvent(eventType, action, actionSubject, actionS
14
14
  actionSubjectId: actionSubjectId,
15
15
  attributes: _objectSpread({
16
16
  packageName: "@atlaskit/emoji",
17
- packageVersion: "0.0.0-development"
17
+ packageVersion: "70.4.2"
18
18
  }, attributes)
19
19
  };
20
20
  };
@@ -30,6 +30,7 @@ export var defaultEmojiPickerSize = 'medium';
30
30
  export var emojiPickerMinHeight = 260;
31
31
  export var emojiPickerHeight = 295;
32
32
  export var emojiPickerListHeight = emojiPickerHeight - 58; // picker height - actions height
33
+ export var emojiPickerListHeightNew = emojiPickerHeight - 102; // picker height - actions height - preview height
33
34
 
34
35
  export var emojiPickerPreviewHeight = 54;
35
36
  export var emojiPickerHeightWithPreview = emojiPickerHeight + emojiPickerPreviewHeight;
@@ -0,0 +1,11 @@
1
+ import { type WrappedComponentProps } from 'react-intl';
2
+ export declare const emojiActionsTestId = "emoji-actions";
3
+ export declare const uploadEmojiTestId = "upload-emoji";
4
+ type Props = {
5
+ onOpenUpload: () => void;
6
+ uploadEnabled: boolean;
7
+ };
8
+ type PropsWithWrappedComponentPropsType = Props & WrappedComponentProps;
9
+ type AddOwnEmojiProps = PropsWithWrappedComponentPropsType;
10
+ export declare const AddOwnEmoji: (props: AddOwnEmojiProps) => JSX.Element;
11
+ export {};
@@ -30,6 +30,8 @@ export interface Props {
30
30
  export declare const emojiActionsTestId = "emoji-actions";
31
31
  export declare const uploadEmojiTestId = "upload-emoji";
32
32
  type PropsWithWrappedComponentPropsType = Props & WrappedComponentProps;
33
+ type AddOwnEmojiProps = PropsWithWrappedComponentPropsType;
34
+ export declare const AddOwnEmoji: (props: AddOwnEmojiProps) => JSX.Element;
33
35
  type EmojiActionsProps = PropsWithWrappedComponentPropsType;
34
36
  export declare const EmojiActions: (props: EmojiActionsProps) => JSX.Element;
35
37
  declare const _default_1: FC<WithIntlProps<Props & WrappedComponentProps>> & {
@@ -10,6 +10,7 @@ export type CategoryMap = {
10
10
  [id: string]: CategoryDescription;
11
11
  };
12
12
  export declare const sortCategories: (c1: CategoryGroupKey, c2: CategoryGroupKey) => number;
13
+ export declare const sortCategoriesNew: (c1: CategoryGroupKey, c2: CategoryGroupKey) => number;
13
14
  export declare const categorySelectorComponentTestId = "category-selector-component";
14
15
  export declare const categorySelectorCategoryTestId: (categoryId: string) => string;
15
16
  declare const CategorySelector: (props: Props) => JSX.Element;
@@ -11,11 +11,12 @@ export interface Props {
11
11
  emojis: EmojiDescription[];
12
12
  onDelete?: OnEmojiEvent;
13
13
  onFocus?: OnEmojiEvent;
14
+ onMouseLeave?: () => void;
14
15
  onMouseMove?: OnEmojiEvent;
15
16
  onSelected?: OnEmojiEvent;
16
17
  showDelete: boolean;
17
18
  title: string;
18
19
  virtualItemContext?: VirtualItemContext;
19
20
  }
20
- declare const _default_1: MemoExoticComponent<({ emojis, onSelected, onMouseMove, onFocus, title, showDelete, onDelete, virtualItemContext, }: Props) => JSX.Element>;
21
+ declare const _default_1: MemoExoticComponent<({ emojis, onSelected, onMouseMove, onMouseLeave, onFocus, title, showDelete, onDelete, virtualItemContext, }: Props) => JSX.Element>;
21
22
  export default _default_1;
@@ -5,8 +5,10 @@
5
5
  import { type MemoExoticComponent } from 'react';
6
6
  import type { EmojiDescription } from '../../types';
7
7
  export interface Props {
8
+ onOpenUpload: () => void;
8
9
  selectedEmoji?: EmojiDescription;
10
+ uploadEnabled: boolean;
9
11
  }
10
12
  export declare const emojiPickerFooterTestId = "emoji-picker-footer";
11
- declare const _default_1: MemoExoticComponent<({ selectedEmoji }: Props) => JSX.Element>;
13
+ declare const _default_1: MemoExoticComponent<({ selectedEmoji, onOpenUpload, uploadEnabled }: Props) => JSX.Element>;
12
14
  export default _default_1;