emoji-picker-react 4.4.12 → 4.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 (55) hide show
  1. package/README.md +64 -26
  2. package/dist/components/emoji/BaseEmojiProps.d.ts +12 -0
  3. package/dist/components/emoji/ClickableEmojiButton.d.ts +13 -0
  4. package/dist/components/emoji/Emoji.d.ts +3 -13
  5. package/dist/components/emoji/EmojiImg.d.ts +10 -0
  6. package/dist/components/emoji/ExportedEmoji.d.ts +2 -2
  7. package/dist/components/emoji/NativeEmoji.d.ts +5 -0
  8. package/dist/components/emoji/ViewOnlyEmoji.d.ts +3 -0
  9. package/dist/config/categoryConfig.d.ts +4 -0
  10. package/dist/config/config.d.ts +3 -1
  11. package/dist/config/customEmojiConfig.d.ts +6 -0
  12. package/dist/config/useConfig.d.ts +2 -0
  13. package/dist/data/emojis.d.ts +1 -0
  14. package/dist/dataUtils/DataTypes.d.ts +16 -6
  15. package/dist/dataUtils/alphaNumericEmojiIndex.d.ts +1 -0
  16. package/dist/dataUtils/emojiSelectors.d.ts +5 -3
  17. package/dist/emoji-picker-react.cjs.development.css +2 -2
  18. package/dist/emoji-picker-react.cjs.development.js +284 -184
  19. package/dist/emoji-picker-react.cjs.development.js.map +1 -1
  20. package/dist/emoji-picker-react.cjs.production.min.js +1 -1
  21. package/dist/emoji-picker-react.cjs.production.min.js.map +1 -1
  22. package/dist/emoji-picker-react.esm.js +294 -194
  23. package/dist/emoji-picker-react.esm.js.map +1 -1
  24. package/dist/hooks/preloadEmoji.d.ts +1 -1
  25. package/dist/hooks/useShouldHideCustomEmojis.d.ts +1 -0
  26. package/dist/typeRefinements/typeRefinements.d.ts +5 -0
  27. package/dist/types/exposedTypes.d.ts +1 -0
  28. package/package.json +5 -5
  29. package/src/components/context/PickerConfigContext.tsx +2 -1
  30. package/src/components/emoji/BaseEmojiProps.ts +13 -0
  31. package/src/components/emoji/ClickableEmojiButton.tsx +42 -0
  32. package/src/components/emoji/Emoji.css +2 -0
  33. package/src/components/emoji/Emoji.tsx +15 -125
  34. package/src/components/emoji/EmojiImg.tsx +31 -0
  35. package/src/components/emoji/ExportedEmoji.tsx +3 -2
  36. package/src/components/emoji/NativeEmoji.tsx +23 -0
  37. package/src/components/emoji/ViewOnlyEmoji.tsx +70 -0
  38. package/src/components/footer/Preview.tsx +1 -1
  39. package/src/components/navigation/CategoryNavigation.css +3 -0
  40. package/src/components/navigation/CategoryNavigation.tsx +8 -0
  41. package/src/config/categoryConfig.ts +10 -0
  42. package/src/config/config.ts +10 -2
  43. package/src/config/customEmojiConfig.ts +7 -0
  44. package/src/config/useConfig.ts +8 -2
  45. package/src/data/emojis.json +1 -1
  46. package/src/data/emojis.ts +1 -1
  47. package/src/dataUtils/DataTypes.ts +19 -6
  48. package/src/dataUtils/alphaNumericEmojiIndex.ts +16 -11
  49. package/src/dataUtils/emojiSelectors.ts +30 -11
  50. package/src/hooks/preloadEmoji.ts +1 -1
  51. package/src/hooks/useEmojiPreviewEvents.ts +0 -2
  52. package/src/hooks/useMouseDownHandlers.ts +1 -1
  53. package/src/hooks/useShouldHideCustomEmojis.ts +11 -0
  54. package/src/typeRefinements/typeRefinements.ts +17 -0
  55. package/src/types/exposedTypes.ts +1 -0
@@ -255,6 +255,7 @@ function _createForOfIteratorHelperLoose(o, allowArrayLike) {
255
255
 
256
256
  (function (Categories) {
257
257
  Categories["SUGGESTED"] = "suggested";
258
+ Categories["CUSTOM"] = "custom";
258
259
  Categories["SMILEYS_PEOPLE"] = "smileys_people";
259
260
  Categories["ANIMALS_NATURE"] = "animals_nature";
260
261
  Categories["FOOD_DRINK"] = "food_drink";
@@ -270,6 +271,94 @@ function _createForOfIteratorHelperLoose(o, allowArrayLike) {
270
271
  SkinTonePickerLocation["PREVIEW"] = "PREVIEW";
271
272
  })(exports.SkinTonePickerLocation || (exports.SkinTonePickerLocation = {}));
272
273
 
274
+ var _configByCategory;
275
+ var categoriesOrdered = [exports.Categories.SUGGESTED, exports.Categories.CUSTOM, exports.Categories.SMILEYS_PEOPLE, exports.Categories.ANIMALS_NATURE, exports.Categories.FOOD_DRINK, exports.Categories.TRAVEL_PLACES, exports.Categories.ACTIVITIES, exports.Categories.OBJECTS, exports.Categories.SYMBOLS, exports.Categories.FLAGS];
276
+ var SuggestedRecent = {
277
+ name: 'Recently Used',
278
+ category: exports.Categories.SUGGESTED
279
+ };
280
+ var configByCategory = (_configByCategory = {}, _configByCategory[exports.Categories.SUGGESTED] = {
281
+ category: exports.Categories.SUGGESTED,
282
+ name: 'Frequently Used'
283
+ }, _configByCategory[exports.Categories.CUSTOM] = {
284
+ category: exports.Categories.CUSTOM,
285
+ name: 'Custom Emojis'
286
+ }, _configByCategory[exports.Categories.SMILEYS_PEOPLE] = {
287
+ category: exports.Categories.SMILEYS_PEOPLE,
288
+ name: 'Smileys & People'
289
+ }, _configByCategory[exports.Categories.ANIMALS_NATURE] = {
290
+ category: exports.Categories.ANIMALS_NATURE,
291
+ name: 'Animals & Nature'
292
+ }, _configByCategory[exports.Categories.FOOD_DRINK] = {
293
+ category: exports.Categories.FOOD_DRINK,
294
+ name: 'Food & Drink'
295
+ }, _configByCategory[exports.Categories.TRAVEL_PLACES] = {
296
+ category: exports.Categories.TRAVEL_PLACES,
297
+ name: 'Travel & Places'
298
+ }, _configByCategory[exports.Categories.ACTIVITIES] = {
299
+ category: exports.Categories.ACTIVITIES,
300
+ name: 'Activities'
301
+ }, _configByCategory[exports.Categories.OBJECTS] = {
302
+ category: exports.Categories.OBJECTS,
303
+ name: 'Objects'
304
+ }, _configByCategory[exports.Categories.SYMBOLS] = {
305
+ category: exports.Categories.SYMBOLS,
306
+ name: 'Symbols'
307
+ }, _configByCategory[exports.Categories.FLAGS] = {
308
+ category: exports.Categories.FLAGS,
309
+ name: 'Flags'
310
+ }, _configByCategory);
311
+ function baseCategoriesConfig(modifiers) {
312
+ return categoriesOrdered.map(function (category) {
313
+ return _extends({}, configByCategory[category], modifiers && modifiers[category] && modifiers[category]);
314
+ });
315
+ }
316
+ function categoryFromCategoryConfig(category) {
317
+ return category.category;
318
+ }
319
+ function categoryNameFromCategoryConfig(category) {
320
+ return category.name;
321
+ }
322
+ function mergeCategoriesConfig(userCategoriesConfig, modifiers) {
323
+ var _userCategoriesConfig;
324
+
325
+ if (userCategoriesConfig === void 0) {
326
+ userCategoriesConfig = [];
327
+ }
328
+
329
+ if (modifiers === void 0) {
330
+ modifiers = {};
331
+ }
332
+
333
+ var extra = {};
334
+
335
+ if (modifiers.suggestionMode === exports.SuggestionMode.RECENT) {
336
+ extra[exports.Categories.SUGGESTED] = SuggestedRecent;
337
+ }
338
+
339
+ var base = baseCategoriesConfig(extra);
340
+
341
+ if (!((_userCategoriesConfig = userCategoriesConfig) != null && _userCategoriesConfig.length)) {
342
+ return base;
343
+ }
344
+
345
+ return userCategoriesConfig.map(function (category) {
346
+ if (typeof category === 'string') {
347
+ return getBaseConfigByCategory(category, extra[category]);
348
+ }
349
+
350
+ return _extends({}, getBaseConfigByCategory(category.category, extra[category.category]), category);
351
+ });
352
+ }
353
+
354
+ function getBaseConfigByCategory(category, modifier) {
355
+ if (modifier === void 0) {
356
+ modifier = {};
357
+ }
358
+
359
+ return Object.assign(configByCategory[category], modifier);
360
+ }
361
+
273
362
  var CDN_URL_APPLE = 'https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/';
274
363
  var CDN_URL_FACEBOOK = 'https://cdn.jsdelivr.net/npm/emoji-datasource-facebook/img/facebook/64/';
275
364
  var CDN_URL_TWITTER = 'https://cdn.jsdelivr.net/npm/emoji-datasource-twitter/img/twitter/64/';
@@ -291,6 +380,8 @@ function cdnUrl(emojiStyle) {
291
380
  }
292
381
  }
293
382
 
383
+ var custom = [
384
+ ];
294
385
  var smileys_people = [
295
386
  {
296
387
  n: [
@@ -16601,6 +16692,7 @@ var flags = [
16601
16692
  }
16602
16693
  ];
16603
16694
  var emojis = {
16695
+ custom: custom,
16604
16696
  smileys_people: smileys_people,
16605
16697
  animals_nature: animals_nature,
16606
16698
  food_drink: food_drink,
@@ -16631,8 +16723,26 @@ var EmojiProperties;
16631
16723
  EmojiProperties["unified"] = "u";
16632
16724
  EmojiProperties["variations"] = "v";
16633
16725
  EmojiProperties["added_in"] = "a";
16726
+ EmojiProperties["imgUrl"] = "imgUrl";
16634
16727
  })(EmojiProperties || (EmojiProperties = {}));
16635
16728
 
16729
+ var alphaNumericEmojiIndex = {};
16730
+ setTimeout(function () {
16731
+ allEmojis.reduce(function (searchIndex, emoji) {
16732
+ indexEmoji(emoji);
16733
+ return searchIndex;
16734
+ }, alphaNumericEmojiIndex);
16735
+ });
16736
+ function indexEmoji(emoji) {
16737
+ var joinedNameString = emojiNames(emoji).flat().join('').toLowerCase().replace(/[^a-zA-Z\d]/g, '').split('');
16738
+ joinedNameString.forEach(function (_char) {
16739
+ var _alphaNumericEmojiInd;
16740
+
16741
+ alphaNumericEmojiIndex[_char] = (_alphaNumericEmojiInd = alphaNumericEmojiIndex[_char]) != null ? _alphaNumericEmojiInd : {};
16742
+ alphaNumericEmojiIndex[_char][emojiUnified(emoji)] = emoji;
16743
+ });
16744
+ }
16745
+
16636
16746
  function emojiNames(emoji) {
16637
16747
  var _emoji$EmojiPropertie;
16638
16748
 
@@ -16707,6 +16817,29 @@ function emojiByUnified(unified) {
16707
16817
  return allEmojisByUnified[withoutSkinTone];
16708
16818
  }
16709
16819
  var allEmojis = /*#__PURE__*/Object.values(emojis).flat();
16820
+ function addCustomEmojis(customEmojis) {
16821
+ customEmojis.forEach(function (emoji) {
16822
+ var emojiData = customToRegularEmoji(emoji);
16823
+
16824
+ if (allEmojisByUnified[emojiData[EmojiProperties.unified]]) {
16825
+ return;
16826
+ }
16827
+
16828
+ allEmojis.push(emojiData);
16829
+ allEmojisByUnified[emojiData[EmojiProperties.unified]] = emojiData;
16830
+ emojis[exports.Categories.CUSTOM].push(emojiData);
16831
+ indexEmoji(emojiData);
16832
+ });
16833
+ }
16834
+
16835
+ function customToRegularEmoji(emoji) {
16836
+ var _ref;
16837
+
16838
+ return _ref = {}, _ref[EmojiProperties.name] = emoji.names.map(function (name) {
16839
+ return name.toLowerCase();
16840
+ }), _ref[EmojiProperties.unified] = emoji.id.toLowerCase(), _ref[EmojiProperties.added_in] = '0', _ref[EmojiProperties.imgUrl] = emoji.imgUrl, _ref;
16841
+ }
16842
+
16710
16843
  var allEmojisByUnified = {};
16711
16844
  setTimeout(function () {
16712
16845
  allEmojis.reduce(function (allEmojis, Emoji) {
@@ -16721,95 +16854,10 @@ function activeVariationFromUnified(unified) {
16721
16854
  return skinToneVariations.includes(suspectedSkinTone) ? suspectedSkinTone : null;
16722
16855
  }
16723
16856
 
16724
- var _configByCategory;
16725
- var categoriesOrdered = [exports.Categories.SUGGESTED, exports.Categories.SMILEYS_PEOPLE, exports.Categories.ANIMALS_NATURE, exports.Categories.FOOD_DRINK, exports.Categories.TRAVEL_PLACES, exports.Categories.ACTIVITIES, exports.Categories.OBJECTS, exports.Categories.SYMBOLS, exports.Categories.FLAGS];
16726
- var SuggestedRecent = {
16727
- name: 'Recently Used',
16728
- category: exports.Categories.SUGGESTED
16729
- };
16730
- var configByCategory = (_configByCategory = {}, _configByCategory[exports.Categories.SUGGESTED] = {
16731
- category: exports.Categories.SUGGESTED,
16732
- name: 'Frequently Used'
16733
- }, _configByCategory[exports.Categories.SMILEYS_PEOPLE] = {
16734
- category: exports.Categories.SMILEYS_PEOPLE,
16735
- name: 'Smileys & People'
16736
- }, _configByCategory[exports.Categories.ANIMALS_NATURE] = {
16737
- category: exports.Categories.ANIMALS_NATURE,
16738
- name: 'Animals & Nature'
16739
- }, _configByCategory[exports.Categories.FOOD_DRINK] = {
16740
- category: exports.Categories.FOOD_DRINK,
16741
- name: 'Food & Drink'
16742
- }, _configByCategory[exports.Categories.TRAVEL_PLACES] = {
16743
- category: exports.Categories.TRAVEL_PLACES,
16744
- name: 'Travel & Places'
16745
- }, _configByCategory[exports.Categories.ACTIVITIES] = {
16746
- category: exports.Categories.ACTIVITIES,
16747
- name: 'Activities'
16748
- }, _configByCategory[exports.Categories.OBJECTS] = {
16749
- category: exports.Categories.OBJECTS,
16750
- name: 'Objects'
16751
- }, _configByCategory[exports.Categories.SYMBOLS] = {
16752
- category: exports.Categories.SYMBOLS,
16753
- name: 'Symbols'
16754
- }, _configByCategory[exports.Categories.FLAGS] = {
16755
- category: exports.Categories.FLAGS,
16756
- name: 'Flags'
16757
- }, _configByCategory);
16758
- function baseCategoriesConfig(modifiers) {
16759
- return categoriesOrdered.map(function (category) {
16760
- return _extends({}, configByCategory[category], modifiers && modifiers[category] && modifiers[category]);
16761
- });
16762
- }
16763
- function categoryFromCategoryConfig(category) {
16764
- return category.category;
16765
- }
16766
- function categoryNameFromCategoryConfig(category) {
16767
- return category.name;
16768
- }
16769
- function mergeCategoriesConfig(userCategoriesConfig, modifiers) {
16770
- var _userCategoriesConfig;
16771
-
16772
- if (userCategoriesConfig === void 0) {
16773
- userCategoriesConfig = [];
16774
- }
16775
-
16776
- if (modifiers === void 0) {
16777
- modifiers = {};
16778
- }
16779
-
16780
- var extra = {};
16781
-
16782
- if (modifiers.suggestionMode === exports.SuggestionMode.RECENT) {
16783
- extra[exports.Categories.SUGGESTED] = SuggestedRecent;
16784
- }
16785
-
16786
- var base = baseCategoriesConfig(extra);
16787
-
16788
- if (!((_userCategoriesConfig = userCategoriesConfig) != null && _userCategoriesConfig.length)) {
16789
- return base;
16790
- }
16791
-
16792
- return userCategoriesConfig.map(function (category) {
16793
- if (typeof category === 'string') {
16794
- return getBaseConfigByCategory(category, extra[category]);
16795
- }
16796
-
16797
- return _extends({}, getBaseConfigByCategory(category.category, extra[category.category]), category);
16798
- });
16799
- }
16800
-
16801
- function getBaseConfigByCategory(category, modifier) {
16802
- if (modifier === void 0) {
16803
- modifier = {};
16804
- }
16805
-
16806
- return Object.assign(configByCategory[category], modifier);
16807
- }
16808
-
16809
16857
  var KNOWN_FAILING_EMOJIS = ['2640-fe0f', '2642-fe0f', '2695-fe0f'];
16810
16858
  var DEFAULT_SEARCH_PLACEHOLDER = 'Search';
16811
16859
  function mergeConfig(userConfig) {
16812
- var _userConfig$previewCo;
16860
+ var _userConfig$previewCo, _config$customEmojis;
16813
16861
 
16814
16862
  if (userConfig === void 0) {
16815
16863
  userConfig = {};
@@ -16821,6 +16869,7 @@ function mergeConfig(userConfig) {
16821
16869
  var categories = mergeCategoriesConfig(userConfig.categories, {
16822
16870
  suggestionMode: config.suggestedEmojisMode
16823
16871
  });
16872
+ addCustomEmojis((_config$customEmojis = config.customEmojis) != null ? _config$customEmojis : []);
16824
16873
  var skinTonePickerLocation = config.searchDisabled ? exports.SkinTonePickerLocation.PREVIEW : config.skinTonePickerLocation;
16825
16874
  return _extends({}, config, {
16826
16875
  categories: categories,
@@ -16832,6 +16881,7 @@ function basePickerConfig() {
16832
16881
  return {
16833
16882
  autoFocusSearch: true,
16834
16883
  categories: baseCategoriesConfig(),
16884
+ customEmojis: [],
16835
16885
  defaultSkinTone: exports.SkinTones.NEUTRAL,
16836
16886
  emojiStyle: exports.EmojiStyle.APPLE,
16837
16887
  emojiVersion: null,
@@ -16867,8 +16917,13 @@ function PickerConfigProvider(_ref) {
16867
16917
  var children = _ref.children,
16868
16918
  config = _objectWithoutPropertiesLoose(_ref, _excluded);
16869
16919
 
16920
+ var _React$useState = React.useState(function () {
16921
+ return mergeConfig(config);
16922
+ }),
16923
+ mergedConfig = _React$useState[0];
16924
+
16870
16925
  return React.createElement(ConfigContext.Provider, {
16871
- value: mergeConfig(config)
16926
+ value: mergedConfig
16872
16927
  }, children);
16873
16928
  }
16874
16929
  function usePickerConfig() {
@@ -16916,21 +16971,27 @@ function useCategoriesConfig() {
16916
16971
 
16917
16972
  return categories;
16918
16973
  }
16919
- function useOnEmojiClickConfig() {
16974
+ function useCustomEmojisConfig() {
16920
16975
  var _usePickerConfig7 = usePickerConfig(),
16921
- onEmojiClick = _usePickerConfig7.onEmojiClick;
16976
+ customEmojis = _usePickerConfig7.customEmojis;
16977
+
16978
+ return customEmojis;
16979
+ }
16980
+ function useOnEmojiClickConfig() {
16981
+ var _usePickerConfig8 = usePickerConfig(),
16982
+ onEmojiClick = _usePickerConfig8.onEmojiClick;
16922
16983
 
16923
16984
  return onEmojiClick;
16924
16985
  }
16925
16986
  function usePreviewConfig() {
16926
- var _usePickerConfig8 = usePickerConfig(),
16927
- previewConfig = _usePickerConfig8.previewConfig;
16987
+ var _usePickerConfig9 = usePickerConfig(),
16988
+ previewConfig = _usePickerConfig9.previewConfig;
16928
16989
 
16929
16990
  return previewConfig;
16930
16991
  }
16931
16992
  function useThemeConfig() {
16932
- var _usePickerConfig9 = usePickerConfig(),
16933
- theme = _usePickerConfig9.theme;
16993
+ var _usePickerConfig10 = usePickerConfig(),
16994
+ theme = _usePickerConfig10.theme;
16934
16995
 
16935
16996
  if (theme === exports.Theme.AUTO) {
16936
16997
  return isSystemDarkTheme() ? exports.Theme.DARK : exports.Theme.LIGHT;
@@ -16939,21 +17000,21 @@ function useThemeConfig() {
16939
17000
  return theme;
16940
17001
  }
16941
17002
  function useSuggestedEmojisModeConfig() {
16942
- var _usePickerConfig10 = usePickerConfig(),
16943
- suggestedEmojisMode = _usePickerConfig10.suggestedEmojisMode;
17003
+ var _usePickerConfig11 = usePickerConfig(),
17004
+ suggestedEmojisMode = _usePickerConfig11.suggestedEmojisMode;
16944
17005
 
16945
17006
  return suggestedEmojisMode;
16946
17007
  }
16947
17008
  function useLazyLoadEmojisConfig() {
16948
- var _usePickerConfig11 = usePickerConfig(),
16949
- lazyLoadEmojis = _usePickerConfig11.lazyLoadEmojis;
17009
+ var _usePickerConfig12 = usePickerConfig(),
17010
+ lazyLoadEmojis = _usePickerConfig12.lazyLoadEmojis;
16950
17011
 
16951
17012
  return lazyLoadEmojis;
16952
17013
  }
16953
17014
  function usePickerSizeConfig() {
16954
- var _usePickerConfig12 = usePickerConfig(),
16955
- height = _usePickerConfig12.height,
16956
- width = _usePickerConfig12.width;
17015
+ var _usePickerConfig13 = usePickerConfig(),
17016
+ height = _usePickerConfig13.height,
17017
+ width = _usePickerConfig13.width;
16957
17018
 
16958
17019
  return {
16959
17020
  height: getDimension(height),
@@ -16961,32 +17022,32 @@ function usePickerSizeConfig() {
16961
17022
  };
16962
17023
  }
16963
17024
  function useEmojiVersionConfig() {
16964
- var _usePickerConfig13 = usePickerConfig(),
16965
- emojiVersion = _usePickerConfig13.emojiVersion;
17025
+ var _usePickerConfig14 = usePickerConfig(),
17026
+ emojiVersion = _usePickerConfig14.emojiVersion;
16966
17027
 
16967
17028
  return emojiVersion;
16968
17029
  }
16969
17030
  function useSearchDisabledConfig() {
16970
- var _usePickerConfig14 = usePickerConfig(),
16971
- searchDisabled = _usePickerConfig14.searchDisabled;
17031
+ var _usePickerConfig15 = usePickerConfig(),
17032
+ searchDisabled = _usePickerConfig15.searchDisabled;
16972
17033
 
16973
17034
  return searchDisabled;
16974
17035
  }
16975
17036
  function useSkinTonePickerLocationConfig() {
16976
- var _usePickerConfig15 = usePickerConfig(),
16977
- skinTonePickerLocation = _usePickerConfig15.skinTonePickerLocation;
17037
+ var _usePickerConfig16 = usePickerConfig(),
17038
+ skinTonePickerLocation = _usePickerConfig16.skinTonePickerLocation;
16978
17039
 
16979
17040
  return skinTonePickerLocation;
16980
17041
  }
16981
17042
  function useUnicodeToHide() {
16982
- var _usePickerConfig16 = usePickerConfig(),
16983
- unicodeToHide = _usePickerConfig16.unicodeToHide;
17043
+ var _usePickerConfig17 = usePickerConfig(),
17044
+ unicodeToHide = _usePickerConfig17.unicodeToHide;
16984
17045
 
16985
17046
  return unicodeToHide;
16986
17047
  }
16987
17048
  function useGetEmojiUrlConfig() {
16988
- var _usePickerConfig17 = usePickerConfig(),
16989
- getEmojiUrl = _usePickerConfig17.getEmojiUrl;
17049
+ var _usePickerConfig18 = usePickerConfig(),
17050
+ getEmojiUrl = _usePickerConfig18.getEmojiUrl;
16990
17051
 
16991
17052
  return getEmojiUrl;
16992
17053
  }
@@ -16995,20 +17056,6 @@ function getDimension(dimensionConfig) {
16995
17056
  return typeof dimensionConfig === 'number' ? dimensionConfig + "px" : dimensionConfig;
16996
17057
  }
16997
17058
 
16998
- var alphaNumericEmojiIndex = {};
16999
- setTimeout(function () {
17000
- allEmojis.reduce(function (searchIndex, emoji) {
17001
- var joinedNameString = emojiNames(emoji).flat().join('').replace(/[^a-zA-Z\d]/g, '').split('');
17002
- joinedNameString.forEach(function (_char) {
17003
- var _searchIndex$_char;
17004
-
17005
- searchIndex[_char] = (_searchIndex$_char = searchIndex[_char]) != null ? _searchIndex$_char : {};
17006
- searchIndex[_char][emojiUnified(emoji)] = emoji;
17007
- });
17008
- return searchIndex;
17009
- }, alphaNumericEmojiIndex);
17010
- });
17011
-
17012
17059
  function useDebouncedState(initialValue, delay) {
17013
17060
  if (delay === void 0) {
17014
17061
  delay = 0;
@@ -18115,42 +18162,71 @@ function Button(props) {
18115
18162
  }), props.children);
18116
18163
  }
18117
18164
 
18118
- function ClickableEmoji(_ref) {
18165
+ function ClickableEmojiButton(_ref) {
18119
18166
  var _clsx;
18120
18167
 
18121
- var emoji = _ref.emoji,
18168
+ var emojiNames = _ref.emojiNames,
18122
18169
  unified = _ref.unified,
18123
18170
  hidden = _ref.hidden,
18124
18171
  hiddenOnSearch = _ref.hiddenOnSearch,
18125
- emojiStyle = _ref.emojiStyle,
18126
18172
  _ref$showVariations = _ref.showVariations,
18127
18173
  showVariations = _ref$showVariations === void 0 ? true : _ref$showVariations,
18128
- size = _ref.size,
18129
- lazyLoad = _ref.lazyLoad,
18130
- getEmojiUrl = _ref.getEmojiUrl;
18131
- var hasVariations = emojiHasVariations(emoji);
18174
+ hasVariations = _ref.hasVariations,
18175
+ children = _ref.children;
18132
18176
  return React.createElement(Button, {
18133
18177
  className: clsx(ClassNames.emoji, (_clsx = {}, _clsx[ClassNames.hidden] = hidden, _clsx[ClassNames.hiddenOnSearch] = hiddenOnSearch, _clsx[ClassNames.visible] = !hidden && !hiddenOnSearch, _clsx[ClassNames.emojiHasVariations] = hasVariations && showVariations, _clsx)),
18134
18178
  "data-unified": unified,
18135
- "aria-label": emojiName(emoji),
18136
- "data-full-name": emojiNames(emoji)
18137
- }, React.createElement(ViewOnlyEmoji, {
18138
- unified: unified,
18139
- emoji: emoji,
18140
- size: size,
18141
- emojiStyle: emojiStyle,
18142
- lazyLoad: lazyLoad,
18143
- getEmojiUrl: getEmojiUrl
18144
- }));
18179
+ "aria-label": emojiNames[0],
18180
+ "data-full-name": emojiNames
18181
+ }, children);
18182
+ }
18183
+
18184
+ function isCustomCategory(category) {
18185
+ return category.category === exports.Categories.CUSTOM;
18186
+ }
18187
+ function isCustomEmoji(emoji) {
18188
+ return emoji.imgUrl !== undefined;
18189
+ }
18190
+
18191
+ function EmojiImg(_ref) {
18192
+ var emojiName = _ref.emojiName,
18193
+ style = _ref.style,
18194
+ _ref$lazyLoad = _ref.lazyLoad,
18195
+ lazyLoad = _ref$lazyLoad === void 0 ? false : _ref$lazyLoad,
18196
+ imgUrl = _ref.imgUrl,
18197
+ onError = _ref.onError;
18198
+ return React.createElement("img", {
18199
+ src: imgUrl,
18200
+ alt: emojiName,
18201
+ className: clsx(ClassNames.external, 'epr-emoji-img'),
18202
+ loading: lazyLoad ? 'lazy' : 'eager',
18203
+ onError: onError,
18204
+ style: style
18205
+ });
18145
18206
  }
18146
- function ViewOnlyEmoji(_ref2) {
18147
- var emoji = _ref2.emoji,
18148
- unified = _ref2.unified,
18149
- emojiStyle = _ref2.emojiStyle,
18150
- size = _ref2.size,
18151
- lazyLoad = _ref2.lazyLoad,
18152
- _ref2$getEmojiUrl = _ref2.getEmojiUrl,
18153
- getEmojiUrl = _ref2$getEmojiUrl === void 0 ? emojiUrlByUnified : _ref2$getEmojiUrl;
18207
+
18208
+ function NativeEmoji(_ref) {
18209
+ var unified = _ref.unified,
18210
+ style = _ref.style;
18211
+ return React.createElement("span", {
18212
+ className: clsx(ClassNames.external, 'epr-emoji-native'),
18213
+ "data-unified": unified,
18214
+ style: style
18215
+ }, parseNativeEmoji(unified));
18216
+ }
18217
+
18218
+ function ViewOnlyEmoji(_ref) {
18219
+ var emoji = _ref.emoji,
18220
+ unified = _ref.unified,
18221
+ emojiStyle = _ref.emojiStyle,
18222
+ size = _ref.size,
18223
+ lazyLoad = _ref.lazyLoad,
18224
+ _ref$getEmojiUrl = _ref.getEmojiUrl,
18225
+ getEmojiUrl = _ref$getEmojiUrl === void 0 ? emojiUrlByUnified : _ref$getEmojiUrl;
18226
+
18227
+ var _useEmojisThatFailedT = useEmojisThatFailedToLoadState(),
18228
+ setEmojisThatFailedToLoad = _useEmojisThatFailedT[1];
18229
+
18154
18230
  var style = {};
18155
18231
 
18156
18232
  if (size) {
@@ -18163,49 +18239,28 @@ function ViewOnlyEmoji(_ref2) {
18163
18239
  return null;
18164
18240
  }
18165
18241
 
18242
+ if (isCustomEmoji(emojiToRender)) {
18243
+ return React.createElement(EmojiImg, {
18244
+ style: style,
18245
+ emojiName: unified,
18246
+ emojiStyle: emojiStyle,
18247
+ lazyLoad: lazyLoad,
18248
+ imgUrl: emojiToRender.imgUrl,
18249
+ onError: onError
18250
+ });
18251
+ }
18252
+
18166
18253
  return React.createElement(React.Fragment, null, emojiStyle === exports.EmojiStyle.NATIVE ? React.createElement(NativeEmoji, {
18167
18254
  unified: unified,
18168
18255
  style: style
18169
18256
  }) : React.createElement(EmojiImg, {
18170
- unified: unified,
18171
18257
  style: style,
18172
- emoji: emojiToRender,
18258
+ emojiName: emojiName(emojiToRender),
18173
18259
  emojiStyle: emojiStyle,
18174
18260
  lazyLoad: lazyLoad,
18175
- getEmojiUrl: getEmojiUrl
18261
+ imgUrl: getEmojiUrl(unified, emojiStyle),
18262
+ onError: onError
18176
18263
  }));
18177
- }
18178
-
18179
- function NativeEmoji(_ref3) {
18180
- var unified = _ref3.unified,
18181
- style = _ref3.style;
18182
- return React.createElement("span", {
18183
- className: clsx(ClassNames.external, 'epr-emoji-native'),
18184
- "data-unified": unified,
18185
- style: style
18186
- }, parseNativeEmoji(unified));
18187
- }
18188
-
18189
- function EmojiImg(_ref4) {
18190
- var emoji = _ref4.emoji,
18191
- unified = _ref4.unified,
18192
- emojiStyle = _ref4.emojiStyle,
18193
- style = _ref4.style,
18194
- _ref4$lazyLoad = _ref4.lazyLoad,
18195
- lazyLoad = _ref4$lazyLoad === void 0 ? false : _ref4$lazyLoad,
18196
- getEmojiUrl = _ref4.getEmojiUrl;
18197
-
18198
- var _useEmojisThatFailedT = useEmojisThatFailedToLoadState(),
18199
- setEmojisThatFailedToLoad = _useEmojisThatFailedT[1];
18200
-
18201
- return React.createElement("img", {
18202
- src: getEmojiUrl(unified, emojiStyle),
18203
- alt: emojiName(emoji),
18204
- className: clsx(ClassNames.external, 'epr-emoji-img'),
18205
- loading: lazyLoad ? 'lazy' : 'eager',
18206
- onError: onError,
18207
- style: style
18208
- });
18209
18264
 
18210
18265
  function onError() {
18211
18266
  setEmojisThatFailedToLoad(function (prev) {
@@ -18214,6 +18269,35 @@ function EmojiImg(_ref4) {
18214
18269
  }
18215
18270
  }
18216
18271
 
18272
+ function ClickableEmoji(_ref) {
18273
+ var emoji = _ref.emoji,
18274
+ unified = _ref.unified,
18275
+ hidden = _ref.hidden,
18276
+ hiddenOnSearch = _ref.hiddenOnSearch,
18277
+ emojiStyle = _ref.emojiStyle,
18278
+ _ref$showVariations = _ref.showVariations,
18279
+ showVariations = _ref$showVariations === void 0 ? true : _ref$showVariations,
18280
+ size = _ref.size,
18281
+ lazyLoad = _ref.lazyLoad,
18282
+ getEmojiUrl = _ref.getEmojiUrl;
18283
+ var hasVariations = emojiHasVariations(emoji);
18284
+ return React.createElement(ClickableEmojiButton, {
18285
+ hasVariations: hasVariations,
18286
+ showVariations: showVariations,
18287
+ hidden: hidden,
18288
+ hiddenOnSearch: hiddenOnSearch,
18289
+ emojiNames: emojiNames(emoji),
18290
+ unified: unified
18291
+ }, React.createElement(ViewOnlyEmoji, {
18292
+ unified: unified,
18293
+ emoji: emoji,
18294
+ size: size,
18295
+ emojiStyle: emojiStyle,
18296
+ lazyLoad: lazyLoad,
18297
+ getEmojiUrl: getEmojiUrl
18298
+ }));
18299
+ }
18300
+
18217
18301
  function EmojiCategory(_ref) {
18218
18302
  var _clsx;
18219
18303
 
@@ -18974,6 +19058,16 @@ function useScrollCategoryIntoView() {
18974
19058
  };
18975
19059
  }
18976
19060
 
19061
+ function useShouldHideCustomEmojis() {
19062
+ var customCategoryConfig = useCustomEmojisConfig();
19063
+
19064
+ if (!customCategoryConfig) {
19065
+ return false;
19066
+ }
19067
+
19068
+ return customCategoryConfig.length === 0;
19069
+ }
19070
+
18977
19071
  function CategoryNavigation() {
18978
19072
  var _useState = React.useState(null),
18979
19073
  activeCategory = _useState[0],
@@ -18984,6 +19078,7 @@ function CategoryNavigation() {
18984
19078
  var isSearchMode = useIsSearchMode();
18985
19079
  var categoriesConfig = useCategoriesConfig();
18986
19080
  var CategoryNavigationRef = useCategoryNavigationRef();
19081
+ var hideCustomCategory = useShouldHideCustomEmojis();
18987
19082
  return React.createElement("div", {
18988
19083
  className: "epr-category-nav",
18989
19084
  ref: CategoryNavigationRef
@@ -18991,6 +19086,11 @@ function CategoryNavigation() {
18991
19086
  var _clsx;
18992
19087
 
18993
19088
  var category = categoryFromCategoryConfig(categoryConfig);
19089
+
19090
+ if (isCustomCategory(categoryConfig) && hideCustomCategory) {
19091
+ return null;
19092
+ }
19093
+
18994
19094
  return React.createElement(Button, {
18995
19095
  tabIndex: isSearchMode ? -1 : 0,
18996
19096
  className: clsx('epr-cat-btn', "epr-icn-" + category, (_clsx = {}, _clsx[ClassNames.active] = category === activeCategory, _clsx)),