@atlaskit/emoji 69.0.1 → 69.0.3

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 (125) hide show
  1. package/CHANGELOG.md +17 -0
  2. package/afm-cc/tsconfig.json +3 -0
  3. package/afm-jira/tsconfig.json +3 -0
  4. package/afm-post-office/tsconfig.json +3 -0
  5. package/dist/cjs/components/compiled/common/EmojiActions.js +1 -1
  6. package/dist/cjs/components/compiled/common/EmojiPreviewComponent.compiled.css +0 -1
  7. package/dist/cjs/components/compiled/common/EmojiPreviewComponent.js +1 -1
  8. package/dist/cjs/components/compiled/picker/CategorySelector.compiled.css +24 -0
  9. package/dist/cjs/components/compiled/picker/CategorySelector.js +161 -0
  10. package/dist/cjs/components/compiled/picker/EmojiPicker.compiled.css +12 -0
  11. package/dist/cjs/components/compiled/picker/EmojiPicker.js +109 -0
  12. package/dist/cjs/components/compiled/picker/EmojiPickerCategoryHeading.compiled.css +9 -0
  13. package/dist/cjs/components/compiled/picker/EmojiPickerCategoryHeading.js +43 -0
  14. package/dist/cjs/components/compiled/picker/EmojiPickerComponent.compiled.css +20 -0
  15. package/dist/cjs/components/compiled/picker/EmojiPickerComponent.js +574 -0
  16. package/dist/cjs/components/compiled/picker/EmojiPickerEmojiRow.compiled.css +35 -0
  17. package/dist/cjs/components/compiled/picker/EmojiPickerEmojiRow.js +76 -0
  18. package/dist/cjs/components/compiled/picker/EmojiPickerFooter.compiled.css +5 -0
  19. package/dist/cjs/components/compiled/picker/EmojiPickerFooter.js +33 -0
  20. package/dist/cjs/components/compiled/picker/EmojiPickerListSearch.compiled.css +23 -0
  21. package/dist/cjs/components/compiled/picker/EmojiPickerListSearch.js +93 -0
  22. package/dist/cjs/components/compiled/picker/EmojiPickerTabPanel.compiled.css +6 -0
  23. package/dist/cjs/components/compiled/picker/EmojiPickerTabPanel.js +60 -0
  24. package/dist/cjs/components/compiled/picker/EmojiPickerVirtualItems.compiled.css +8 -0
  25. package/dist/cjs/components/compiled/picker/EmojiPickerVirtualItems.js +86 -0
  26. package/dist/cjs/components/compiled/picker/VirtualList.compiled.css +10 -0
  27. package/dist/cjs/components/compiled/picker/VirtualList.js +303 -0
  28. package/dist/cjs/components/picker/EmojiPickerFooter.js +0 -2
  29. package/dist/cjs/components/picker/EmojiPickerList.js +219 -145
  30. package/dist/cjs/components/picker/EmojiPickerTabPanel.js +67 -0
  31. package/dist/cjs/components/picker/styles.js +1 -10
  32. package/dist/cjs/index.js +4 -6
  33. package/dist/cjs/picker.js +5 -7
  34. package/dist/cjs/util/analytics/analytics.js +1 -1
  35. package/dist/es2019/components/compiled/common/EmojiActions.js +1 -1
  36. package/dist/es2019/components/compiled/common/EmojiPreviewComponent.compiled.css +0 -1
  37. package/dist/es2019/components/compiled/common/EmojiPreviewComponent.js +1 -1
  38. package/dist/es2019/components/compiled/picker/CategorySelector.compiled.css +24 -0
  39. package/dist/es2019/components/compiled/picker/CategorySelector.js +136 -0
  40. package/dist/es2019/components/compiled/picker/EmojiPicker.compiled.css +12 -0
  41. package/dist/es2019/components/compiled/picker/EmojiPicker.js +67 -0
  42. package/dist/es2019/components/compiled/picker/EmojiPickerCategoryHeading.compiled.css +9 -0
  43. package/dist/es2019/components/compiled/picker/EmojiPickerCategoryHeading.js +30 -0
  44. package/dist/es2019/components/compiled/picker/EmojiPickerComponent.compiled.css +19 -0
  45. package/dist/es2019/components/compiled/picker/EmojiPickerComponent.js +506 -0
  46. package/dist/es2019/components/compiled/picker/EmojiPickerEmojiRow.compiled.css +35 -0
  47. package/dist/es2019/components/compiled/picker/EmojiPickerEmojiRow.js +69 -0
  48. package/dist/es2019/components/compiled/picker/EmojiPickerFooter.compiled.css +5 -0
  49. package/dist/es2019/components/compiled/picker/EmojiPickerFooter.js +19 -0
  50. package/dist/es2019/components/compiled/picker/EmojiPickerListSearch.compiled.css +23 -0
  51. package/dist/es2019/components/compiled/picker/EmojiPickerListSearch.js +79 -0
  52. package/dist/es2019/components/compiled/picker/EmojiPickerTabPanel.compiled.css +6 -0
  53. package/dist/es2019/components/compiled/picker/EmojiPickerTabPanel.js +39 -0
  54. package/dist/es2019/components/compiled/picker/EmojiPickerVirtualItems.compiled.css +8 -0
  55. package/dist/es2019/components/compiled/picker/EmojiPickerVirtualItems.js +51 -0
  56. package/dist/es2019/components/compiled/picker/VirtualList.compiled.css +10 -0
  57. package/dist/es2019/components/compiled/picker/VirtualList.js +288 -0
  58. package/dist/es2019/components/picker/EmojiPickerFooter.js +1 -1
  59. package/dist/es2019/components/picker/EmojiPickerList.js +186 -114
  60. package/dist/es2019/components/picker/EmojiPickerTabPanel.js +48 -0
  61. package/dist/es2019/components/picker/styles.js +0 -9
  62. package/dist/es2019/index.js +2 -1
  63. package/dist/es2019/picker.js +5 -1
  64. package/dist/es2019/util/analytics/analytics.js +1 -1
  65. package/dist/esm/components/compiled/common/EmojiActions.js +1 -1
  66. package/dist/esm/components/compiled/common/EmojiPreviewComponent.compiled.css +0 -1
  67. package/dist/esm/components/compiled/common/EmojiPreviewComponent.js +1 -1
  68. package/dist/esm/components/compiled/picker/CategorySelector.compiled.css +24 -0
  69. package/dist/esm/components/compiled/picker/CategorySelector.js +151 -0
  70. package/dist/esm/components/compiled/picker/EmojiPicker.compiled.css +12 -0
  71. package/dist/esm/components/compiled/picker/EmojiPicker.js +97 -0
  72. package/dist/esm/components/compiled/picker/EmojiPickerCategoryHeading.compiled.css +9 -0
  73. package/dist/esm/components/compiled/picker/EmojiPickerCategoryHeading.js +34 -0
  74. package/dist/esm/components/compiled/picker/EmojiPickerComponent.compiled.css +20 -0
  75. package/dist/esm/components/compiled/picker/EmojiPickerComponent.js +564 -0
  76. package/dist/esm/components/compiled/picker/EmojiPickerEmojiRow.compiled.css +35 -0
  77. package/dist/esm/components/compiled/picker/EmojiPickerEmojiRow.js +66 -0
  78. package/dist/esm/components/compiled/picker/EmojiPickerFooter.compiled.css +5 -0
  79. package/dist/esm/components/compiled/picker/EmojiPickerFooter.js +24 -0
  80. package/dist/esm/components/compiled/picker/EmojiPickerListSearch.compiled.css +23 -0
  81. package/dist/esm/components/compiled/picker/EmojiPickerListSearch.js +83 -0
  82. package/dist/esm/components/compiled/picker/EmojiPickerTabPanel.compiled.css +6 -0
  83. package/dist/esm/components/compiled/picker/EmojiPickerTabPanel.js +50 -0
  84. package/dist/esm/components/compiled/picker/EmojiPickerVirtualItems.compiled.css +8 -0
  85. package/dist/esm/components/compiled/picker/EmojiPickerVirtualItems.js +76 -0
  86. package/dist/esm/components/compiled/picker/VirtualList.compiled.css +10 -0
  87. package/dist/esm/components/compiled/picker/VirtualList.js +293 -0
  88. package/dist/esm/components/picker/EmojiPickerFooter.js +1 -1
  89. package/dist/esm/components/picker/EmojiPickerList.js +219 -147
  90. package/dist/esm/components/picker/EmojiPickerTabPanel.js +59 -0
  91. package/dist/esm/components/picker/styles.js +0 -9
  92. package/dist/esm/index.js +2 -1
  93. package/dist/esm/picker.js +5 -1
  94. package/dist/esm/util/analytics/analytics.js +1 -1
  95. package/dist/types/components/compiled/picker/CategorySelector.d.ts +17 -0
  96. package/dist/types/components/compiled/picker/EmojiPicker.d.ts +44 -0
  97. package/dist/types/components/compiled/picker/EmojiPickerCategoryHeading.d.ts +13 -0
  98. package/dist/types/components/compiled/picker/EmojiPickerComponent.d.ts +24 -0
  99. package/dist/types/components/compiled/picker/EmojiPickerEmojiRow.d.ts +17 -0
  100. package/dist/types/components/compiled/picker/EmojiPickerFooter.d.ts +8 -0
  101. package/dist/types/components/compiled/picker/EmojiPickerListSearch.d.ts +11 -0
  102. package/dist/types/components/compiled/picker/EmojiPickerTabPanel.d.ts +21 -0
  103. package/dist/types/components/compiled/picker/EmojiPickerVirtualItems.d.ts +35 -0
  104. package/dist/types/components/compiled/picker/VirtualList.d.ts +42 -0
  105. package/dist/types/components/picker/EmojiPickerList.d.ts +1 -6
  106. package/dist/types/components/picker/EmojiPickerTabPanel.d.ts +21 -0
  107. package/dist/types/components/picker/styles.d.ts +0 -1
  108. package/dist/types/index.d.ts +2 -1
  109. package/dist/types/picker.d.ts +3 -1
  110. package/dist/types-ts4.5/components/compiled/picker/CategorySelector.d.ts +17 -0
  111. package/dist/types-ts4.5/components/compiled/picker/EmojiPicker.d.ts +44 -0
  112. package/dist/types-ts4.5/components/compiled/picker/EmojiPickerCategoryHeading.d.ts +13 -0
  113. package/dist/types-ts4.5/components/compiled/picker/EmojiPickerComponent.d.ts +24 -0
  114. package/dist/types-ts4.5/components/compiled/picker/EmojiPickerEmojiRow.d.ts +17 -0
  115. package/dist/types-ts4.5/components/compiled/picker/EmojiPickerFooter.d.ts +8 -0
  116. package/dist/types-ts4.5/components/compiled/picker/EmojiPickerListSearch.d.ts +11 -0
  117. package/dist/types-ts4.5/components/compiled/picker/EmojiPickerTabPanel.d.ts +21 -0
  118. package/dist/types-ts4.5/components/compiled/picker/EmojiPickerVirtualItems.d.ts +35 -0
  119. package/dist/types-ts4.5/components/compiled/picker/VirtualList.d.ts +42 -0
  120. package/dist/types-ts4.5/components/picker/EmojiPickerList.d.ts +1 -6
  121. package/dist/types-ts4.5/components/picker/EmojiPickerTabPanel.d.ts +21 -0
  122. package/dist/types-ts4.5/components/picker/styles.d.ts +0 -1
  123. package/dist/types-ts4.5/index.d.ts +2 -1
  124. package/dist/types-ts4.5/picker.d.ts +3 -1
  125. package/package.json +4 -3
@@ -0,0 +1,574 @@
1
+ /* EmojiPickerComponent.tsx generated by @compiled/babel-plugin v0.36.1 */
2
+ "use strict";
3
+
4
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
5
+ var _typeof = require("@babel/runtime/helpers/typeof");
6
+ Object.defineProperty(exports, "__esModule", {
7
+ value: true
8
+ });
9
+ exports.default = void 0;
10
+ require("./EmojiPickerComponent.compiled.css");
11
+ var _react = _interopRequireWildcard(require("react"));
12
+ var React = _react;
13
+ var _runtime = require("@compiled/react/runtime");
14
+ var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
15
+ var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime/helpers/toConsumableArray"));
16
+ var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
17
+ var _colors = require("@atlaskit/theme/colors");
18
+ var _reactDom = require("react-dom");
19
+ var _reactIntlNext = require("react-intl-next");
20
+ var _EmojiRepository = require("../../../api/EmojiRepository");
21
+ var _EmojiResource = require("../../../api/EmojiResource");
22
+ var _constants = require("../../../util/constants");
23
+ var _typeHelpers = require("../../../util/type-helpers");
24
+ var _types = require("../../../types");
25
+ var _filters = require("../../../util/filters");
26
+ var _UploadEmoji = require("../../common/UploadEmoji");
27
+ var _RecordSelectionDefault = require("../../common/RecordSelectionDefault");
28
+ var _CategorySelector = _interopRequireDefault(require("./CategorySelector"));
29
+ var _EmojiPickerFooter = _interopRequireDefault(require("./EmojiPickerFooter"));
30
+ var _EmojiPickerList = require("../../picker/EmojiPickerList");
31
+ var _analytics = require("../../../util/analytics");
32
+ var _useEmoji2 = require("../../../hooks/useEmoji");
33
+ var _useIsMounted = require("../../../hooks/useIsMounted");
34
+ var _i18n = require("../../i18n");
35
+ var _platformFeatureFlags = require("@atlaskit/platform-feature-flags");
36
+ function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(e) { return e ? t : r; })(e); }
37
+ function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != _typeof(e) && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && {}.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n.default = e, t && t.set(e, n), n; }
38
+ 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; }
39
+ 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) { (0, _defineProperty2.default)(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; }
40
+ var emojiPickerBoxShadow = "var(--ds-shadow-overlay, 0 3px 6px rgba(0, 0, 0, 0.2))";
41
+ var emojiPickerHeight = 295;
42
+ var emojiPickerHeightWithPreview = 349; // emojiPickerHeight + emojiPickerPreviewHeight;
43
+ var emojiPickerWidth = 350;
44
+ var emojiPickerMinHeight = 260;
45
+ var heightOffset = 80;
46
+ var emojiPicker = null;
47
+ var withPreviewHeight = {
48
+ small: "_4t3ivixp _1tkegx0z",
49
+ medium: "_4t3i2300 _1tke5x59",
50
+ large: "_4t3ixt2k _1tke1pna"
51
+ };
52
+ var withoutPreviewHeight = {
53
+ small: "_4t3iaq3k _1tkegx0z",
54
+ medium: "_4t3iixjv _1tke5x59",
55
+ large: "_4t3i1ckg _1tke1pna"
56
+ };
57
+ var FREQUENTLY_USED_MAX = 16;
58
+ var EmojiPickerComponent = function EmojiPickerComponent(_ref) {
59
+ var onSelection = _ref.onSelection,
60
+ onPickerRef = _ref.onPickerRef,
61
+ hideToneSelector = _ref.hideToneSelector,
62
+ createAnalyticsEvent = _ref.createAnalyticsEvent,
63
+ _ref$size = _ref.size,
64
+ size = _ref$size === void 0 ? _constants.defaultEmojiPickerSize : _ref$size;
65
+ var _useIntl = (0, _reactIntlNext.useIntl)(),
66
+ formatMessage = _useIntl.formatMessage;
67
+ var _useEmoji = (0, _useEmoji2.useEmoji)(),
68
+ emojiProvider = _useEmoji.emojiProvider,
69
+ isUploadSupported = _useEmoji.isUploadSupported;
70
+ var _useState = (0, _react.useState)([]),
71
+ _useState2 = (0, _slicedToArray2.default)(_useState, 2),
72
+ filteredEmojis = _useState2[0],
73
+ setFilteredEmojis = _useState2[1];
74
+ var _useState3 = (0, _react.useState)([]),
75
+ _useState4 = (0, _slicedToArray2.default)(_useState3, 2),
76
+ searchEmojis = _useState4[0],
77
+ setSearchEmojis = _useState4[1];
78
+ var _useState5 = (0, _react.useState)([]),
79
+ _useState6 = (0, _slicedToArray2.default)(_useState5, 2),
80
+ frequentlyUsedEmojis = _useState6[0],
81
+ setFrequentlyUsedEmojis = _useState6[1];
82
+ var _useState7 = (0, _react.useState)(''),
83
+ _useState8 = (0, _slicedToArray2.default)(_useState7, 2),
84
+ query = _useState8[0],
85
+ setQuery = _useState8[1];
86
+ var _useState9 = (0, _react.useState)([]),
87
+ _useState10 = (0, _slicedToArray2.default)(_useState9, 2),
88
+ dynamicCategories = _useState10[0],
89
+ setDynamicCategories = _useState10[1];
90
+ var _useState11 = (0, _react.useState)(!hideToneSelector ? emojiProvider.getSelectedTone() : undefined),
91
+ _useState12 = (0, _slicedToArray2.default)(_useState11, 2),
92
+ selectedTone = _useState12[0],
93
+ setSelectedTone = _useState12[1];
94
+ var _useState13 = (0, _react.useState)(true),
95
+ _useState14 = (0, _slicedToArray2.default)(_useState13, 2),
96
+ loading = _useState14[0],
97
+ setLoading = _useState14[1];
98
+ var _useState15 = (0, _react.useState)(false),
99
+ _useState16 = (0, _slicedToArray2.default)(_useState15, 2),
100
+ uploading = _useState16[0],
101
+ setUploading = _useState16[1];
102
+ var _useState17 = (0, _react.useState)(),
103
+ _useState18 = (0, _slicedToArray2.default)(_useState17, 2),
104
+ selectedEmoji = _useState18[0],
105
+ setSelectedEmoji = _useState18[1];
106
+ var _useState19 = (0, _react.useState)(null),
107
+ _useState20 = (0, _slicedToArray2.default)(_useState19, 2),
108
+ activeCategory = _useState20[0],
109
+ setActiveCategory = _useState20[1];
110
+ var _useState21 = (0, _react.useState)(false),
111
+ _useState22 = (0, _slicedToArray2.default)(_useState21, 2),
112
+ disableCategories = _useState22[0],
113
+ setDisableCategories = _useState22[1];
114
+ var _useState23 = (0, _react.useState)(),
115
+ _useState24 = (0, _slicedToArray2.default)(_useState23, 2),
116
+ uploadErrorMessage = _useState24[0],
117
+ setUploadErrorMessage = _useState24[1];
118
+ var _useState25 = (0, _react.useState)(),
119
+ _useState26 = (0, _slicedToArray2.default)(_useState25, 2),
120
+ emojiToDelete = _useState26[0],
121
+ setEmojiToDelete = _useState26[1];
122
+ var _useState27 = (0, _react.useState)(),
123
+ _useState28 = (0, _slicedToArray2.default)(_useState27, 2),
124
+ toneEmoji = _useState28[0],
125
+ setToneEmoji = _useState28[1];
126
+ var emojiPickerList = (0, _react.useMemo)(function () {
127
+ return (0, _platformFeatureFlags.fg)('platform_editor_react18_elements_emoji') ? /*#__PURE__*/(0, _react.createRef)() : /*#__PURE__*/(0, _react.createRef)();
128
+ }, []);
129
+ var openTime = (0, _react.useRef)(0);
130
+ var isMounting = (0, _react.useRef)(true);
131
+ var previousEmojiProvider = (0, _react.useRef)(emojiProvider);
132
+ var currentUser = (0, _react.useMemo)(function () {
133
+ return emojiProvider.getCurrentUser();
134
+ }, [emojiProvider]);
135
+ var isMounted = (0, _useIsMounted.useIsMounted)();
136
+ var fireAnalytics = (0, _react.useCallback)(function (analyticsEvent) {
137
+ if (createAnalyticsEvent) {
138
+ (0, _analytics.createAndFireEventInElementsChannel)(analyticsEvent)(createAnalyticsEvent);
139
+ }
140
+ }, [createAnalyticsEvent]);
141
+ var onEmojiActive = (0, _react.useCallback)(function (emojiId, emoji) {
142
+ if (!selectedEmoji || selectedEmoji.id !== (emojiId === null || emojiId === void 0 ? void 0 : emojiId.id)) {
143
+ setSelectedEmoji(emoji);
144
+ }
145
+ }, [selectedEmoji]);
146
+ var onCategoryActivated = (0, _react.useCallback)(function (category) {
147
+ if (activeCategory !== category) {
148
+ setActiveCategory(category);
149
+ }
150
+ }, [activeCategory]);
151
+ var calculateElapsedTime = function calculateElapsedTime() {
152
+ return Date.now() - openTime.current;
153
+ };
154
+ var onDynamicCategoryChange = (0, _react.useCallback)(function (categories) {
155
+ setDynamicCategories(categories);
156
+ }, []);
157
+ var onUploadCancelled = (0, _react.useCallback)(function () {
158
+ (0, _reactDom.unstable_batchedUpdates)(function () {
159
+ setUploading(false);
160
+ setUploadErrorMessage(undefined);
161
+ });
162
+ fireAnalytics((0, _analytics.uploadCancelButton)());
163
+ }, [fireAnalytics]);
164
+ var getDynamicCategories = (0, _react.useCallback)(function () {
165
+ if (!emojiProvider.calculateDynamicCategories) {
166
+ return Promise.resolve([]);
167
+ }
168
+ return emojiProvider.calculateDynamicCategories();
169
+ }, [emojiProvider]);
170
+
171
+ /**
172
+ * Calculate and set the new state of the component in response to the list of emoji changing for some reason (a search has returned
173
+ * or the frequently used emoji have updated.)
174
+ */
175
+ var setStateAfterEmojiChange = (0, _react.useCallback)(function (_ref2) {
176
+ var searchQuery = _ref2.searchQuery,
177
+ emojiToRender = _ref2.emojiToRender,
178
+ searchEmoji = _ref2.searchEmoji,
179
+ frequentEmoji = _ref2.frequentEmoji;
180
+ // Only enable categories for full emoji list (non-search)
181
+ var disableCategories = !!searchQuery;
182
+ if (!disableCategories && emojiToRender && emojiToRender.length !== filteredEmojis.length) {
183
+ getDynamicCategories().then(function (categories) {
184
+ onDynamicCategoryChange(categories);
185
+ });
186
+ }
187
+ if (emojiToRender && !(0, _typeHelpers.containsEmojiId)(emojiToRender, selectedEmoji)) {
188
+ (0, _reactDom.unstable_batchedUpdates)(function () {
189
+ setSelectedEmoji(undefined);
190
+ });
191
+ }
192
+ (0, _reactDom.unstable_batchedUpdates)(function () {
193
+ if (emojiToRender) {
194
+ setFilteredEmojis(emojiToRender);
195
+ }
196
+ if (searchEmoji) {
197
+ setSearchEmojis(searchEmoji);
198
+ }
199
+ if (frequentEmoji) {
200
+ setFrequentlyUsedEmojis(frequentEmoji);
201
+ }
202
+ setLoading(false);
203
+ setDisableCategories(disableCategories);
204
+ });
205
+ }, [filteredEmojis.length, getDynamicCategories, onDynamicCategoryChange, selectedEmoji]);
206
+ var onFrequentEmojiResult = (0, _react.useCallback)(function (frequentEmoji) {
207
+ // change the category of each of the featured emoji
208
+ var recategorised = frequentEmoji.map(function (emoji) {
209
+ var clone = JSON.parse(JSON.stringify(emoji));
210
+ clone.category = _constants.frequentCategory;
211
+ return clone;
212
+ });
213
+ setStateAfterEmojiChange({
214
+ frequentEmoji: recategorised
215
+ });
216
+ }, [setStateAfterEmojiChange]);
217
+ var onSearchResult = (0, _react.useCallback)(function (searchResults) {
218
+ var frequentlyUsedEmoji = frequentlyUsedEmojis || [];
219
+ var searchQuery = searchResults.query || '';
220
+
221
+ /**
222
+ * If there is no user search in the EmojiPicker then it should display all emoji received from the EmojiRepository and should
223
+ * also include a special category of most frequently used emoji (if there are any). This method decides if we are in this 'no search'
224
+ * state and appends the frequent emoji if necessary.
225
+ */
226
+ var emojiToRender;
227
+ if (!frequentlyUsedEmoji.length || query) {
228
+ emojiToRender = searchResults.emojis;
229
+ } else {
230
+ emojiToRender = [].concat((0, _toConsumableArray2.default)(searchResults.emojis), (0, _toConsumableArray2.default)(frequentlyUsedEmoji));
231
+ }
232
+ setStateAfterEmojiChange({
233
+ searchQuery: searchQuery,
234
+ emojiToRender: emojiToRender,
235
+ searchEmoji: searchResults.emojis
236
+ });
237
+ fireAnalytics((0, _analytics.pickerSearchedEvent)({
238
+ queryLength: searchQuery.length,
239
+ numMatches: searchResults.emojis.length
240
+ }));
241
+ }, [frequentlyUsedEmojis, query, setStateAfterEmojiChange, fireAnalytics]);
242
+ var onProviderChange = (0, _react.useMemo)(function () {
243
+ return {
244
+ result: onSearchResult
245
+ };
246
+ }, [onSearchResult]);
247
+
248
+ /**
249
+ * Updates the emoji displayed by the picker. If there is no query specified then we expect to retrieve all emoji for display,
250
+ * by category, in the picker. This differs from when there is a query in which case we expect to receive a sorted result matching
251
+ * the search.
252
+ */
253
+ var updateEmojis = (0, _react.useCallback)(function (query, options) {
254
+ // if the query is empty then we want the emoji to be in service defined order, unless specified otherwise
255
+ // and we want emoji for the 'frequently used' category to be refreshed as well.
256
+ if (!query) {
257
+ if (!options) {
258
+ options = {};
259
+ }
260
+ if (!options.sort) {
261
+ options.sort = _types.SearchSort.None;
262
+ }
263
+
264
+ // take a copy of search options so that the frequently used can be limited to 16 without affecting the full emoji query
265
+ var frequentOptions = _objectSpread(_objectSpread({}, options), {}, {
266
+ sort: _types.SearchSort.None,
267
+ limit: FREQUENTLY_USED_MAX
268
+ });
269
+ emojiProvider.getFrequentlyUsed(frequentOptions).then(onFrequentEmojiResult);
270
+ }
271
+ emojiProvider.filter(query, options);
272
+ }, [emojiProvider, onFrequentEmojiResult]);
273
+ var onToneSelected = (0, _react.useCallback)(function (toneValue) {
274
+ emojiProvider.setSelectedTone(toneValue);
275
+ updateEmojis(query, {
276
+ skinTone: toneValue
277
+ });
278
+ setSelectedTone(toneValue);
279
+ }, [emojiProvider, query, updateEmojis]);
280
+ var onToneSelectorCancelled = (0, _react.useCallback)(function () {
281
+ fireAnalytics((0, _analytics.toneSelectorClosedEvent)());
282
+ }, [fireAnalytics]);
283
+ var onSelectWrapper = (0, _react.useCallback)(function (emojiId, emoji, event) {
284
+ if (onSelection) {
285
+ onSelection(emojiId, emoji, event);
286
+ fireAnalytics((0, _analytics.pickerClickedEvent)({
287
+ duration: calculateElapsedTime(),
288
+ emojiId: (emojiId === null || emojiId === void 0 ? void 0 : emojiId.id) || '',
289
+ category: emoji && emoji.category || '',
290
+ type: emoji && emoji.type || '',
291
+ queryLength: query && query.length || 0
292
+ }));
293
+ }
294
+ }, [fireAnalytics, onSelection, query]);
295
+ var onCategorySelected = (0, _react.useCallback)(function (categoryId) {
296
+ if (!categoryId) {
297
+ return;
298
+ }
299
+ emojiProvider.findInCategory(categoryId).then(function (emojisInCategory) {
300
+ if (!disableCategories) {
301
+ var newSelectedEmoji;
302
+ if (emojisInCategory && emojisInCategory.length > 0) {
303
+ newSelectedEmoji = (0, _EmojiRepository.getEmojiVariation)(emojisInCategory[0], {
304
+ skinTone: selectedTone
305
+ });
306
+ }
307
+ if (emojiPickerList.current) {
308
+ emojiPickerList.current.reveal(categoryId);
309
+ }
310
+ (0, _reactDom.unstable_batchedUpdates)(function () {
311
+ setActiveCategory(categoryId);
312
+ setSelectedEmoji(newSelectedEmoji);
313
+ });
314
+ fireAnalytics((0, _analytics.categoryClickedEvent)({
315
+ category: categoryId
316
+ }));
317
+ }
318
+ });
319
+ }, [disableCategories, emojiPickerList, emojiProvider, fireAnalytics, selectedTone]);
320
+ var recordUsageOnSelection = (0, _react.useMemo)(function () {
321
+ return (0, _RecordSelectionDefault.createRecordSelectionDefault)(emojiProvider, onSelectWrapper, function (analytic) {
322
+ return fireAnalytics(analytic(_types.SearchSourceTypes.PICKER));
323
+ });
324
+ }, [emojiProvider, fireAnalytics, onSelectWrapper]);
325
+ var formattedErrorMessage = (0, _react.useMemo)(function () {
326
+ return uploadErrorMessage ? /*#__PURE__*/React.createElement(_reactIntlNext.FormattedMessage, uploadErrorMessage) : null;
327
+ }, [uploadErrorMessage]);
328
+ var onFileChooserClicked = (0, _react.useCallback)(function () {
329
+ fireAnalytics((0, _analytics.selectedFileEvent)());
330
+ }, [fireAnalytics]);
331
+ var scrollToTopOfList = (0, _react.useCallback)(function () {
332
+ var _emojiPickerList$curr;
333
+ (_emojiPickerList$curr = emojiPickerList.current) === null || _emojiPickerList$curr === void 0 || _emojiPickerList$curr.scrollToTop();
334
+ }, [emojiPickerList]);
335
+ var onSearch = (0, _react.useCallback)(function (searchQuery) {
336
+ var options = {
337
+ skinTone: selectedTone,
338
+ source: _types.SearchSourceTypes.PICKER
339
+ };
340
+ if (searchQuery !== query) {
341
+ setQuery(searchQuery);
342
+ }
343
+ updateEmojis(searchQuery, options);
344
+ if (filteredEmojis.length > 0) {
345
+ // scroll to top when search, which is search results section
346
+ scrollToTopOfList();
347
+ }
348
+ }, [query, filteredEmojis, selectedTone, updateEmojis, scrollToTopOfList]);
349
+ var onOpenUpload = (0, _react.useCallback)(function () {
350
+ // Prime upload token so it's ready when the user adds
351
+ if ((0, _EmojiResource.supportsUploadFeature)(emojiProvider)) {
352
+ emojiProvider.prepareForUpload();
353
+ }
354
+ (0, _reactDom.unstable_batchedUpdates)(function () {
355
+ setUploadErrorMessage(undefined);
356
+ setUploading(true);
357
+ });
358
+ fireAnalytics((0, _analytics.uploadBeginButton)());
359
+ }, [emojiProvider, fireAnalytics]);
360
+ var scrollToUploadedEmoji = (0, _react.useCallback)(function (emojiDescription) {
361
+ if (emojiPickerList.current) {
362
+ // Wait a tick to ensure repaint and updated height for picker list
363
+ window.setTimeout(function () {
364
+ var _emojiPickerList$curr2;
365
+ (_emojiPickerList$curr2 = emojiPickerList.current) === null || _emojiPickerList$curr2 === void 0 || _emojiPickerList$curr2.scrollToRecentlyUploaded(emojiDescription);
366
+ }, 0);
367
+ }
368
+ }, [emojiPickerList]);
369
+ var onUploadEmoji = (0, _react.useCallback)(function (upload, retry) {
370
+ fireAnalytics((0, _analytics.uploadConfirmButton)({
371
+ retry: retry
372
+ }));
373
+ var errorSetter = function errorSetter(message) {
374
+ setUploadErrorMessage(message);
375
+ };
376
+ var onSuccess = function onSuccess(emojiDescription) {
377
+ (0, _reactDom.unstable_batchedUpdates)(function () {
378
+ setActiveCategory(_constants.customCategory);
379
+ setSelectedEmoji(emojiDescription);
380
+ setUploading(false);
381
+ });
382
+ scrollToUploadedEmoji(emojiDescription);
383
+ };
384
+ (0, _UploadEmoji.uploadEmoji)(upload, emojiProvider, errorSetter, onSuccess, fireAnalytics, retry);
385
+ }, [emojiProvider, fireAnalytics, scrollToUploadedEmoji]);
386
+ var onTriggerDelete = (0, _react.useCallback)(function (_emojiId, emoji) {
387
+ if (_emojiId) {
388
+ fireAnalytics((0, _analytics.deleteBeginEvent)({
389
+ emojiId: _emojiId.id
390
+ }));
391
+ setEmojiToDelete(emoji);
392
+ }
393
+ }, [fireAnalytics]);
394
+ var onCloseDelete = (0, _react.useCallback)(function () {
395
+ fireAnalytics((0, _analytics.deleteCancelEvent)({
396
+ emojiId: emojiToDelete && emojiToDelete.id
397
+ }));
398
+ setEmojiToDelete(undefined);
399
+ }, [emojiToDelete, fireAnalytics]);
400
+ var onDeleteEmoji = (0, _react.useCallback)(function (emoji) {
401
+ fireAnalytics((0, _analytics.deleteConfirmEvent)({
402
+ emojiId: emojiToDelete && emojiToDelete.id
403
+ }));
404
+ return emojiProvider.deleteSiteEmoji(emoji).then(function (success) {
405
+ if (success) {
406
+ updateEmojis(query, {
407
+ skinTone: selectedTone
408
+ });
409
+ }
410
+ return success;
411
+ });
412
+ }, [emojiProvider, emojiToDelete, fireAnalytics, query, selectedTone, updateEmojis]);
413
+ var onComponentDidMount = (0, _react.useCallback)(function () {
414
+ emojiProvider.subscribe(onProviderChange);
415
+ onSearch(query);
416
+ if (!hideToneSelector) {
417
+ var _toneEmoji = (0, _filters.getToneEmoji)(emojiProvider);
418
+ if ((0, _typeHelpers.isPromise)(_toneEmoji)) {
419
+ _toneEmoji.then(function (emoji) {
420
+ return setToneEmoji(emoji);
421
+ });
422
+ } else if (_toneEmoji === undefined || (0, _typeHelpers.isEmojiDescription)(_toneEmoji)) {
423
+ setToneEmoji(_toneEmoji);
424
+ }
425
+ }
426
+ }, [emojiProvider, hideToneSelector, onProviderChange, onSearch, query]);
427
+ if (isMounting.current) {
428
+ // componentWillMount equivalent
429
+ _analytics.ufoExperiences['emoji-picker-opened'].success();
430
+ openTime.current = Date.now();
431
+ fireAnalytics((0, _analytics.openedPickerEvent)());
432
+ isMounting.current = false;
433
+ }
434
+
435
+ // stop all key propagation to other event listeners
436
+ var suppressKeyPress = function suppressKeyPress(e) {
437
+ e.stopPropagation();
438
+ // We prevent default for enter keypresses
439
+ // since products like Bitbucket might have parent forms
440
+ // that listen for keydown events to trigger form submission
441
+ // https://product-fabric.atlassian.net/browse/ED-19532
442
+ if (e.key === _constants.KeyboardKeys.Enter) {
443
+ e.preventDefault();
444
+ }
445
+ };
446
+ (0, _react.useEffect)(function () {
447
+ // componentDidMount logic
448
+ if (!isMounted) {
449
+ onComponentDidMount();
450
+ }
451
+ }, [onComponentDidMount, isMounted]);
452
+ (0, _react.useEffect)(function () {
453
+ previousEmojiProvider.current.unsubscribe(onProviderChange);
454
+ previousEmojiProvider.current = emojiProvider;
455
+ emojiProvider.subscribe(onProviderChange);
456
+ return function () {
457
+ emojiProvider.unsubscribe(onProviderChange);
458
+ };
459
+ }, [emojiProvider, onProviderChange]);
460
+ (0, _react.useEffect)(function () {
461
+ if (!frequentlyUsedEmojis.length || query) {
462
+ setFilteredEmojis(searchEmojis);
463
+ } else {
464
+ setFilteredEmojis([].concat((0, _toConsumableArray2.default)(searchEmojis), (0, _toConsumableArray2.default)(frequentlyUsedEmojis)));
465
+ }
466
+ }, [frequentlyUsedEmojis, query, searchEmojis]);
467
+ (0, _react.useEffect)(function () {
468
+ // Fire analytics on component unmount
469
+ return function () {
470
+ fireAnalytics((0, _analytics.closedPickerEvent)({
471
+ duration: calculateElapsedTime()
472
+ }));
473
+ _analytics.ufoExperiences['emoji-picker-opened'].abort({
474
+ metadata: {
475
+ source: 'EmojiPickerComponent',
476
+ reason: 'unmount'
477
+ }
478
+ });
479
+ _analytics.ufoExperiences['emoji-searched'].abort({
480
+ metadata: {
481
+ source: 'EmojiPickerComponent',
482
+ reason: 'unmount'
483
+ }
484
+ });
485
+ };
486
+ }, [fireAnalytics]);
487
+ (0, _react.useEffect)(function () {
488
+ // Unsubscribe emojiProvider on component unmount
489
+ return function () {
490
+ emojiProvider.unsubscribe(onProviderChange);
491
+ };
492
+ }, [emojiProvider, onProviderChange]);
493
+ var showPreview = selectedEmoji && !uploading;
494
+ return /*#__PURE__*/React.createElement("div", {
495
+ ref: onPickerRef,
496
+ "data-emoji-picker-container": true,
497
+ role: "dialog",
498
+ "aria-label": formatMessage(_i18n.messages.emojiPickerTitle),
499
+ "aria-modal": true,
500
+ onKeyPress: suppressKeyPress,
501
+ onKeyUp: suppressKeyPress,
502
+ onKeyDown: suppressKeyPress,
503
+ className: (0, _runtime.ax)(["_19itbw7i _2rkosqtm _1e0c1txw _2lx21bp4 _1bah1yb4 _bfhk1bhr _16qsp2xt _4t3iuxo9 _1bsb10mj _1ul910mj _c71l1y6z", showPreview && withPreviewHeight[size], !showPreview && withoutPreviewHeight[size]]),
504
+ style: {
505
+ "--_t8mjz6": (0, _runtime.ix)("".concat("var(--ds-border, ".concat(_colors.N40, ")"), " 1px solid")),
506
+ "--_19dn98e": (0, _runtime.ix)("".concat(emojiPickerHeight, "px")),
507
+ "--_gsvyy7": (0, _runtime.ix)("".concat(emojiPickerWidth, "px"))
508
+ }
509
+ }, /*#__PURE__*/React.createElement(_CategorySelector.default, {
510
+ activeCategoryId: activeCategory,
511
+ dynamicCategories: dynamicCategories,
512
+ disableCategories: disableCategories,
513
+ onCategorySelected: onCategorySelected
514
+ }), (0, _platformFeatureFlags.fg)('platform_editor_react18_elements_emoji') ? /*#__PURE__*/React.createElement(_EmojiPickerList.EmojiPickerVirtualListInternalNew, {
515
+ emojis: filteredEmojis,
516
+ currentUser: currentUser,
517
+ onEmojiSelected: recordUsageOnSelection,
518
+ onEmojiActive: onEmojiActive,
519
+ onEmojiDelete: onTriggerDelete,
520
+ onCategoryActivated: onCategoryActivated,
521
+ onSearch: onSearch,
522
+ query: query,
523
+ selectedTone: selectedTone,
524
+ loading: loading,
525
+ ref: emojiPickerList,
526
+ initialUploadName: query,
527
+ onToneSelected: onToneSelected,
528
+ onToneSelectorCancelled: onToneSelectorCancelled,
529
+ toneEmoji: toneEmoji,
530
+ uploading: uploading,
531
+ emojiToDelete: emojiToDelete,
532
+ uploadErrorMessage: formattedErrorMessage,
533
+ uploadEnabled: isUploadSupported && !uploading,
534
+ onUploadEmoji: onUploadEmoji,
535
+ onUploadCancelled: onUploadCancelled,
536
+ onDeleteEmoji: onDeleteEmoji,
537
+ onCloseDelete: onCloseDelete,
538
+ onFileChooserClicked: onFileChooserClicked,
539
+ onOpenUpload: onOpenUpload,
540
+ size: size,
541
+ activeCategoryId: activeCategory
542
+ }) : /*#__PURE__*/React.createElement(_EmojiPickerList.EmojiPickerVirtualListInternalOld, {
543
+ emojis: filteredEmojis,
544
+ currentUser: currentUser,
545
+ onEmojiSelected: recordUsageOnSelection,
546
+ onEmojiActive: onEmojiActive,
547
+ onEmojiDelete: onTriggerDelete,
548
+ onCategoryActivated: onCategoryActivated,
549
+ onSearch: onSearch,
550
+ query: query,
551
+ selectedTone: selectedTone,
552
+ loading: loading,
553
+ ref: emojiPickerList,
554
+ initialUploadName: query,
555
+ onToneSelected: onToneSelected,
556
+ onToneSelectorCancelled: onToneSelectorCancelled,
557
+ toneEmoji: toneEmoji,
558
+ uploading: uploading,
559
+ emojiToDelete: emojiToDelete,
560
+ uploadErrorMessage: formattedErrorMessage,
561
+ uploadEnabled: isUploadSupported && !uploading,
562
+ onUploadEmoji: onUploadEmoji,
563
+ onUploadCancelled: onUploadCancelled,
564
+ onDeleteEmoji: onDeleteEmoji,
565
+ onCloseDelete: onCloseDelete,
566
+ onFileChooserClicked: onFileChooserClicked,
567
+ onOpenUpload: onOpenUpload,
568
+ size: size,
569
+ activeCategoryId: activeCategory
570
+ }), showPreview && /*#__PURE__*/React.createElement(_EmojiPickerFooter.default, {
571
+ selectedEmoji: selectedEmoji
572
+ }));
573
+ };
574
+ var _default = exports.default = /*#__PURE__*/(0, _react.memo)(EmojiPickerComponent);
@@ -0,0 +1,35 @@
1
+
2
+ ._1wcg14y2 .emoji-common-node{border-radius:5px}._115ch2mm .emoji-common-node>img{position:relative}
3
+ ._1678tlke .emoji-common-node{cursor:pointer}
4
+ ._17dz1tcg .emoji-common-node>img{max-width:24px}
5
+ ._18u0u2gc{margin-left:var(--ds-space-100,8px)}
6
+ ._18x3u2gc .emoji-common-placeholder{margin-right:var(--ds-space-100,8px)}
7
+ ._1909ze3t .emoji-common-placeholder{padding-right:var(--ds-space-0,0)}
8
+ ._1bsb1ylp{width:40px}
9
+ ._1cf71tcg .emoji-common-node{height:24px}
10
+ ._1e0c1o8l{display:inline-block}
11
+ ._1k8z1tcg .emoji-common-node>img{max-height:24px}
12
+ ._1lvc1tcg .emoji-common-node{width:24px}
13
+ ._1mc3ze3t .emoji-common-node .emoji-common-placeholder{margin-left:var(--ds-space-0,0)}
14
+ ._1mn81tcg .emoji-common-node>.emoji-common-emoji-sprite{height:24px}
15
+ ._1rf4u2gc .emoji-common-node{padding-right:var(--ds-space-100,8px)}
16
+ ._1tcfze3t .emoji-common-placeholder{padding-bottom:var(--ds-space-0,0)}
17
+ ._29jju2gc .emoji-common-placeholder{margin-left:var(--ds-space-100,8px)}
18
+ ._4ubfu2gc .emoji-common-placeholder{margin-top:var(--ds-space-100,8px)}
19
+ ._5mfndbra .emoji-common-node>img{transform:translateX(-50%) translateY(-50%)}
20
+ ._7b50u2gc .emoji-common-node{padding-top:var(--ds-space-100,8px)}
21
+ ._85ft1ssb .emoji-common-node>img{top:50%}
22
+ ._8vlfze3t .emoji-common-placeholder{padding-top:var(--ds-space-0,0)}
23
+ ._b4kiu2gc .emoji-common-node{padding-bottom:var(--ds-space-100,8px)}
24
+ ._bm9mu2gc .emoji-common-node{padding-left:var(--ds-space-100,8px)}
25
+ ._elsp1tcg .emoji-common-placeholder{max-width:24px}
26
+ ._fw9su2gc .emoji-common-placeholder{margin-bottom:var(--ds-space-100,8px)}
27
+ ._n7xcze3t .emoji-common-placeholder{padding-left:var(--ds-space-0,0)}
28
+ ._o5kcze3t .emoji-common-node .emoji-common-placeholder{margin-bottom:var(--ds-space-0,0)}
29
+ ._qpkw1tcg .emoji-common-placeholder{min-width:24px}
30
+ ._u5ah1tcg .emoji-common-node>.emoji-common-emoji-sprite{width:24px}
31
+ ._vtzrze3t .emoji-common-node .emoji-common-placeholder{margin-top:var(--ds-space-0,0)}
32
+ ._w2q0ze3t .emoji-common-node .emoji-common-placeholder{margin-right:var(--ds-space-0,0)}
33
+ ._y3gn1h6o{text-align:center}
34
+ ._yrst1ssb .emoji-common-node>img{left:50%}
35
+ ._zdyf1ule .emoji-common-node>img{display:block}
@@ -0,0 +1,76 @@
1
+ /* EmojiPickerEmojiRow.tsx generated by @compiled/babel-plugin v0.36.1 */
2
+ "use strict";
3
+
4
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
5
+ var _typeof = require("@babel/runtime/helpers/typeof");
6
+ Object.defineProperty(exports, "__esModule", {
7
+ value: true
8
+ });
9
+ exports.default = void 0;
10
+ require("./EmojiPickerEmojiRow.compiled.css");
11
+ var _react = _interopRequireWildcard(require("react"));
12
+ var React = _react;
13
+ var _runtime = require("@compiled/react/runtime");
14
+ var _reactIntlNext = require("react-intl-next");
15
+ var _CachingEmoji = _interopRequireDefault(require("../../common/CachingEmoji"));
16
+ var _useEmojiPickerListContext = require("../../../hooks/useEmojiPickerListContext");
17
+ var _i18n = require("../../i18n");
18
+ function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(e) { return e ? t : r; })(e); }
19
+ function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != _typeof(e) && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && {}.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n.default = e, t && t.set(e, n), n; }
20
+ var emojiItem = null;
21
+ var emojiPickerRow = null;
22
+ var EmojiPickerEmojiRow = function EmojiPickerEmojiRow(_ref) {
23
+ var emojis = _ref.emojis,
24
+ onSelected = _ref.onSelected,
25
+ onMouseMove = _ref.onMouseMove,
26
+ onFocus = _ref.onFocus,
27
+ title = _ref.title,
28
+ showDelete = _ref.showDelete,
29
+ onDelete = _ref.onDelete,
30
+ virtualItemContext = _ref.virtualItemContext;
31
+ var _useEmojiPickerListCo = (0, _useEmojiPickerListContext.useEmojiPickerListContext)(),
32
+ currentEmojisFocus = _useEmojiPickerListCo.currentEmojisFocus,
33
+ setEmojisFocus = _useEmojiPickerListCo.setEmojisFocus;
34
+ var rowIndex = (virtualItemContext === null || virtualItemContext === void 0 ? void 0 : virtualItemContext.index) || 0;
35
+ var _useIntl = (0, _reactIntlNext.useIntl)(),
36
+ formatMessage = _useIntl.formatMessage;
37
+ var handleFocus = function handleFocus(index) {
38
+ return function (emojiId, emoji, event) {
39
+ setEmojisFocus({
40
+ rowIndex: rowIndex,
41
+ columnIndex: index
42
+ });
43
+ onFocus && onFocus(emojiId, emoji, event);
44
+ };
45
+ };
46
+ return /*#__PURE__*/React.createElement("div", {
47
+ role: "presentation",
48
+ className: (0, _runtime.ax)(["_18u0u2gc"])
49
+ }, emojis.map(function (emoji, index) {
50
+ var shortName = emoji.shortName,
51
+ id = emoji.id;
52
+ var key = id ? "".concat(id, "-").concat(title) : "".concat(shortName, "-").concat(title);
53
+ var focus = currentEmojisFocus.rowIndex === rowIndex && currentEmojisFocus.columnIndex === index;
54
+ return /*#__PURE__*/React.createElement("span", {
55
+ key: key,
56
+ role: "gridcell",
57
+ "aria-colindex": index + 1 // aria-colindex is 1 based
58
+ ,
59
+ className: (0, _runtime.ax)(["_1e0c1o8l _y3gn1h6o _1bsb1ylp _1wcg14y2 _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"])
60
+ }, /*#__PURE__*/React.createElement(_CachingEmoji.default, {
61
+ emoji: emoji,
62
+ selectOnHover: true,
63
+ onSelected: onSelected,
64
+ onMouseMove: onMouseMove,
65
+ onFocus: handleFocus(index),
66
+ showDelete: showDelete,
67
+ onDelete: onDelete,
68
+ placeholderSize: 24,
69
+ "data-focus-index": "".concat(rowIndex, "-").concat(index),
70
+ tabIndex: focus ? 0 : -1,
71
+ "aria-roledescription": formatMessage(_i18n.messages.emojiButtonRoleDescription),
72
+ shouldBeInteractive: true
73
+ }));
74
+ }));
75
+ };
76
+ var _default = exports.default = /*#__PURE__*/(0, _react.memo)(EmojiPickerEmojiRow);