emoji-picker-react 4.20.1 → 4.20.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -98,9 +98,11 @@ const Picker = dynamic(() => import('emoji-picker-react'));
98
98
 
99
99
  ## Troubleshooting
100
100
 
101
- ### `global is not defined` (Vite)
101
+ ### `global is not defined` (Vite, versions before 4.20)
102
102
 
103
- Add this to your HTML:
103
+ Since 4.20 the picker is SSR-safe and no longer references the Node-style
104
+ `global`. If you see `global is not defined`, upgrade to the latest version.
105
+ On older versions only, the workaround was adding this to your HTML:
104
106
 
105
107
  ```html
106
108
  <script>
@@ -1,4 +1,3 @@
1
- import { Categories } from '../config/categoryConfig';
2
1
  import { CustomEmoji } from '../config/customEmojiConfig';
3
2
  import { EmojiStyle, SkinTones } from '../types/exposedTypes';
4
3
  import { DataEmoji, DataEmojis, WithName } from './DataTypes';
@@ -7,7 +6,6 @@ export declare function addedIn(emoji: DataEmoji): number;
7
6
  export declare function emojiName(emoji?: WithName): string;
8
7
  export declare function unifiedWithoutSkinTone(unified: string): string;
9
8
  export declare function emojiUnified(emoji: DataEmoji, skinTone?: string): string;
10
- export declare function useGetEmojisByCategory(): (Category: Categories) => DataEmojis;
11
9
  export declare function emojiUrlByUnified(unified: string, emojiStyle: EmojiStyle): string;
12
10
  export declare function emojiVariations(emoji: DataEmoji): string[];
13
11
  export declare function emojiHasVariations(emoji: DataEmoji): boolean;
@@ -26744,15 +26744,57 @@ var defaultEmojiData = {
26744
26744
  emojis: emojis
26745
26745
  };
26746
26746
 
26747
- function useIsMounted() {
26748
- var _React$useState = React.useState(false),
26749
- isMounted = _React$useState[0],
26750
- setIsMounted = _React$useState[1];
26751
- React.useEffect(function () {
26752
- setIsMounted(true);
26753
- }, []);
26754
- return isMounted;
26747
+ // Pure data helpers plus the legacy global registry. This module intentionally
26748
+ function unifiedWithoutSkinTone$1(unified) {
26749
+ var splat = unified.split('-');
26750
+ var _splat$splice = splat.splice(1, 1),
26751
+ skinTone = _splat$splice[0];
26752
+ if (skinTonesMapped[skinTone]) {
26753
+ return splat.join('-');
26754
+ }
26755
+ return unified;
26755
26756
  }
26757
+ function emojiUnified$1(emoji, skinTone) {
26758
+ var _emojiVariationUnifie;
26759
+ var unified = emoji[EmojiProperties.unified];
26760
+ if (!skinTone || !emojiHasVariations$1(emoji)) {
26761
+ return unified;
26762
+ }
26763
+ return (_emojiVariationUnifie = emojiVariationUnified$1(emoji, skinTone)) != null ? _emojiVariationUnifie : unified;
26764
+ }
26765
+ function emojiVariations$1(emoji) {
26766
+ var _emoji$EmojiPropertie2;
26767
+ return (_emoji$EmojiPropertie2 = emoji[EmojiProperties.variations]) != null ? _emoji$EmojiPropertie2 : [];
26768
+ }
26769
+ function emojiHasVariations$1(emoji) {
26770
+ return emojiVariations$1(emoji).length > 0;
26771
+ }
26772
+ function emojiVariationUnified$1(emoji, skinTone) {
26773
+ return skinTone ? emojiVariations$1(emoji).find(function (variation) {
26774
+ return variation.includes(skinTone);
26775
+ }) : emojiUnified$1(emoji);
26776
+ }
26777
+ function emojiByUnified(unified) {
26778
+ if (!unified) {
26779
+ return;
26780
+ }
26781
+ if (allEmojisByUnified[unified]) {
26782
+ return allEmojisByUnified[unified];
26783
+ }
26784
+ var withoutSkinTone = unifiedWithoutSkinTone$1(unified);
26785
+ return allEmojisByUnified[withoutSkinTone];
26786
+ }
26787
+ var allEmojis = /*#__PURE__*/Object.values(defaultEmojiData.emojis).flat();
26788
+ var allEmojisByUnified = {};
26789
+ allEmojis.reduce(function (allEmojis, Emoji) {
26790
+ allEmojis[emojiUnified$1(Emoji)] = Emoji;
26791
+ if (emojiHasVariations$1(Emoji)) {
26792
+ emojiVariations$1(Emoji).forEach(function (variation) {
26793
+ allEmojis[variation] = Emoji;
26794
+ });
26795
+ }
26796
+ return allEmojis;
26797
+ }, allEmojisByUnified);
26756
26798
 
26757
26799
  var SUGGESTED_LS_KEY = 'epr_suggested';
26758
26800
  function getSuggested(mode) {
@@ -26774,8 +26816,8 @@ function getSuggested(mode) {
26774
26816
  }
26775
26817
  function setSuggested(emoji, skinTone) {
26776
26818
  var recent = getSuggested();
26777
- var unified = emojiUnified$1(emoji, skinTone);
26778
- var originalUnified = emojiUnified$1(emoji);
26819
+ var unified = emojiUnified(emoji, skinTone);
26820
+ var originalUnified = emojiUnified(emoji);
26779
26821
  var existing = recent.find(function (_ref) {
26780
26822
  var u = _ref.unified;
26781
26823
  return u === unified;
@@ -26806,99 +26848,14 @@ function setSuggested(emoji, skinTone) {
26806
26848
  }
26807
26849
  }
26808
26850
 
26809
- function emojiNames$1(emoji) {
26810
- var _emoji$EmojiPropertie;
26811
- return (_emoji$EmojiPropertie = emoji[EmojiProperties.name]) != null ? _emoji$EmojiPropertie : [];
26812
- }
26813
- function emojiName$1(emoji) {
26814
- if (!emoji) {
26815
- return '';
26816
- }
26817
- var names = emojiNames$1(emoji);
26818
- return names[names.length - 1];
26819
- }
26820
- function unifiedWithoutSkinTone$1(unified) {
26821
- var splat = unified.split('-');
26822
- var _splat$splice = splat.splice(1, 1),
26823
- skinTone = _splat$splice[0];
26824
- if (skinTonesMapped[skinTone]) {
26825
- return splat.join('-');
26826
- }
26827
- return unified;
26828
- }
26829
- function emojiUnified$1(emoji, skinTone) {
26830
- var _emojiVariationUnifie;
26831
- var unified = emoji[EmojiProperties.unified];
26832
- if (!skinTone || !emojiHasVariations$1(emoji)) {
26833
- return unified;
26834
- }
26835
- return (_emojiVariationUnifie = emojiVariationUnified$1(emoji, skinTone)) != null ? _emojiVariationUnifie : unified;
26836
- }
26837
- function useGetEmojisByCategory() {
26838
- var suggestedEmojisModeConfig = useSuggestedEmojisModeConfig();
26839
- var _useUpdateSuggested = useUpdateSuggested(),
26840
- suggestedUpdated = _useUpdateSuggested[0];
26841
- // Suggestions come from localStorage, which doesn't exist during SSR.
26842
- // Read them only after mount so the first client render matches the server.
26843
- var isMounted = useIsMounted();
26844
- var suggested = React__default.useMemo(function () {
26845
- var _getSuggested;
26846
- if (!isMounted) {
26847
- return [];
26848
- }
26849
- var suggested = (_getSuggested = getSuggested(suggestedEmojisModeConfig)) != null ? _getSuggested : [];
26850
- return suggested.map(function (s) {
26851
- return emojiByUnified(s.unified);
26852
- }).filter(Boolean);
26853
- },
26854
- // eslint-disable-next-line react-hooks/exhaustive-deps
26855
- [isMounted, suggestedUpdated, suggestedEmojisModeConfig]);
26856
- return function getEmojisByCategory(category) {
26857
- var _emojis$emojis$catego;
26858
- if (category === exports.Categories.SUGGESTED) {
26859
- return suggested;
26860
- }
26861
- // @ts-ignore
26862
- return (_emojis$emojis$catego = defaultEmojiData.emojis[category]) != null ? _emojis$emojis$catego : [];
26863
- };
26864
- }
26865
- function emojiVariations$1(emoji) {
26866
- var _emoji$EmojiPropertie2;
26867
- return (_emoji$EmojiPropertie2 = emoji[EmojiProperties.variations]) != null ? _emoji$EmojiPropertie2 : [];
26868
- }
26869
- function emojiHasVariations$1(emoji) {
26870
- return emojiVariations$1(emoji).length > 0;
26871
- }
26872
- function emojiVariationUnified$1(emoji, skinTone) {
26873
- return skinTone ? emojiVariations$1(emoji).find(function (variation) {
26874
- return variation.includes(skinTone);
26875
- }) : emojiUnified$1(emoji);
26876
- }
26877
- function emojiByUnified(unified) {
26878
- if (!unified) {
26879
- return;
26880
- }
26881
- if (allEmojisByUnified[unified]) {
26882
- return allEmojisByUnified[unified];
26883
- }
26884
- var withoutSkinTone = unifiedWithoutSkinTone$1(unified);
26885
- return allEmojisByUnified[withoutSkinTone];
26886
- }
26887
- var allEmojis = /*#__PURE__*/Object.values(defaultEmojiData.emojis).flat();
26888
- var allEmojisByUnified = {};
26889
- allEmojis.reduce(function (allEmojis, Emoji) {
26890
- allEmojis[emojiUnified$1(Emoji)] = Emoji;
26891
- if (emojiHasVariations$1(Emoji)) {
26892
- emojiVariations$1(Emoji).forEach(function (variation) {
26893
- allEmojis[variation] = Emoji;
26894
- });
26895
- }
26896
- return allEmojis;
26897
- }, allEmojisByUnified);
26898
- function activeVariationFromUnified$1(unified) {
26899
- var _unified$split = unified.split('-'),
26900
- suspectedSkinTone = _unified$split[1];
26901
- return skinToneVariations.includes(suspectedSkinTone) ? suspectedSkinTone : null;
26851
+ function useIsMounted() {
26852
+ var _React$useState = React.useState(false),
26853
+ isMounted = _React$useState[0],
26854
+ setIsMounted = _React$useState[1];
26855
+ React.useEffect(function () {
26856
+ setIsMounted(true);
26857
+ }, []);
26858
+ return isMounted;
26902
26859
  }
26903
26860
 
26904
26861
  var PickerDataContext = /*#__PURE__*/React__default.createContext({
@@ -26968,7 +26925,7 @@ function PickerDataProvider(_ref) {
26968
26925
  function usePickerDataContext() {
26969
26926
  return React__default.useContext(PickerDataContext);
26970
26927
  }
26971
- function useGetEmojisByCategory$1() {
26928
+ function useGetEmojisByCategory() {
26972
26929
  var _usePickerDataContext = usePickerDataContext(),
26973
26930
  emojiData = _usePickerDataContext.emojiData,
26974
26931
  emojiByUnified = _usePickerDataContext.emojiByUnified;
@@ -28340,7 +28297,7 @@ function useOnFocus() {
28340
28297
  if (!emoji) {
28341
28298
  return;
28342
28299
  }
28343
- if (emojiHasVariations$1(emoji)) {
28300
+ if (emojiHasVariations(emoji)) {
28344
28301
  preloadEmoji(getEmojiUrl, emoji, emojiStyle);
28345
28302
  }
28346
28303
  }
@@ -28817,7 +28774,7 @@ function useMouseDownHandlers(ContainerRef, mouseEventSource) {
28817
28774
  if (!emoji || !unified) {
28818
28775
  return;
28819
28776
  }
28820
- var skinToneToUse = activeVariationFromUnified$1(unified) || activeSkinTone;
28777
+ var skinToneToUse = activeVariationFromUnified(unified) || activeSkinTone;
28821
28778
  updateSuggested();
28822
28779
  setSuggested(emoji, skinToneToUse);
28823
28780
  onEmojiClick(emojiClickOutput(emoji, skinToneToUse, activeEmojiStyle, getEmojiUrl), event);
@@ -28828,7 +28785,7 @@ function useMouseDownHandlers(ContainerRef, mouseEventSource) {
28828
28785
  }
28829
28786
  var _emojiFromEvent2 = emojiFromEvent(event, emojiByUnified),
28830
28787
  emoji = _emojiFromEvent2[0];
28831
- if (!emoji || !emojiHasVariations$1(emoji)) {
28788
+ if (!emoji || !emojiHasVariations(emoji)) {
28832
28789
  return;
28833
28790
  }
28834
28791
  mouseDownTimerRef.current = setTimeout(function () {
@@ -28894,9 +28851,9 @@ function emojiFromEvent(event, lookupEmojiByUnified) {
28894
28851
  return [emoji, unified != null ? unified : resolvedUnified];
28895
28852
  }
28896
28853
  function emojiClickOutput(emoji, activeSkinTone, activeEmojiStyle, getEmojiUrl) {
28897
- var names = emojiNames$1(emoji);
28854
+ var names = emojiNames(emoji);
28898
28855
  if (isCustomEmoji(emoji)) {
28899
- var _unified = emojiUnified$1(emoji);
28856
+ var _unified = emojiUnified(emoji);
28900
28857
  return {
28901
28858
  activeSkinTone: activeSkinTone,
28902
28859
  emoji: _unified,
@@ -28910,7 +28867,7 @@ function emojiClickOutput(emoji, activeSkinTone, activeEmojiStyle, getEmojiUrl)
28910
28867
  unifiedWithoutSkinTone: _unified
28911
28868
  };
28912
28869
  }
28913
- var unified = emojiUnified$1(emoji, activeSkinTone);
28870
+ var unified = emojiUnified(emoji, activeSkinTone);
28914
28871
  return {
28915
28872
  activeSkinTone: activeSkinTone,
28916
28873
  emoji: parseNativeEmoji(unified),
@@ -28924,7 +28881,7 @@ function emojiClickOutput(emoji, activeSkinTone, activeEmojiStyle, getEmojiUrl)
28924
28881
  isCustom: false,
28925
28882
  names: names,
28926
28883
  unified: unified,
28927
- unifiedWithoutSkinTone: emojiUnified$1(emoji)
28884
+ unifiedWithoutSkinTone: emojiUnified(emoji)
28928
28885
  };
28929
28886
  }
28930
28887
 
@@ -29166,13 +29123,13 @@ function ClickableEmoji(_ref) {
29166
29123
  _ref$noBackground = _ref.noBackground,
29167
29124
  noBackground = _ref$noBackground === void 0 ? false : _ref$noBackground,
29168
29125
  style = _ref.style;
29169
- var hasVariations = emojiHasVariations$1(emoji);
29126
+ var hasVariations = emojiHasVariations(emoji);
29170
29127
  return React.createElement(ClickableEmojiButton, {
29171
29128
  hasVariations: hasVariations,
29172
29129
  showVariations: showVariations,
29173
29130
  hidden: hidden,
29174
29131
  hiddenOnSearch: hiddenOnSearch,
29175
- emojiNames: emojiNames$1(emoji),
29132
+ emojiNames: emojiNames(emoji),
29176
29133
  unified: unified,
29177
29134
  noBackground: noBackground,
29178
29135
  style: style
@@ -29595,7 +29552,7 @@ function MeasureEmoji() {
29595
29552
  }
29596
29553
  var firstCategory = categories[0];
29597
29554
  var dummyEmoji = getEmojisByCategory(categoryFromCategoryConfig(firstCategory))[0];
29598
- var unified = dummyEmoji ? emojiUnified$1(dummyEmoji, activeSkinTone) : '';
29555
+ var unified = dummyEmoji ? emojiUnified(dummyEmoji, activeSkinTone) : '';
29599
29556
  if (!dummyEmoji) {
29600
29557
  return null;
29601
29558
  }
@@ -29629,7 +29586,7 @@ function EmojiList(_ref) {
29629
29586
  categoryHeights = _React$useState[0],
29630
29587
  setCategoryHeights = _React$useState[1];
29631
29588
  var EmojiListRef = useEmojiListRef();
29632
- var getEmojisByCategory = useGetEmojisByCategory$1();
29589
+ var getEmojisByCategory = useGetEmojisByCategory();
29633
29590
  var labelHeight = getLabelHeight(EmojiListRef.current);
29634
29591
  var topOffset = 0;
29635
29592
  return React.createElement("ul", {
@@ -29642,9 +29599,8 @@ function EmojiList(_ref) {
29642
29599
  if (categoryHeight) {
29643
29600
  topOffset += categoryHeight + labelHeight;
29644
29601
  }
29645
- return React.createElement(React.Suspense, {
29646
- key: category
29647
- }, React.createElement(RenderCategory, {
29602
+ return React.createElement(RenderCategory, {
29603
+ key: category,
29648
29604
  categoryEmojis: getEmojisByCategory(category),
29649
29605
  categoryConfig: categoryConfig,
29650
29606
  topOffset: currentOffset,
@@ -29657,7 +29613,7 @@ function EmojiList(_ref) {
29657
29613
  }
29658
29614
  },
29659
29615
  scrollTop: scrollTop
29660
- }));
29616
+ });
29661
29617
  }));
29662
29618
  }
29663
29619
  function RenderCategory(_ref2) {
@@ -29716,7 +29672,7 @@ function EmojiVariationPicker() {
29716
29672
  var getPointerStyle = usePointerStyle(VariationPickerRef);
29717
29673
  var getEmojiUrl = useGetEmojiUrlConfig();
29718
29674
  var button = buttonFromTarget(AnchoredEmojiRef.current);
29719
- var visible = Boolean(emoji && button && emojiHasVariations$1(emoji) && button.classList.contains(ClassNames.emojiHasVariations));
29675
+ var visible = Boolean(emoji && button && emojiHasVariations(emoji) && button.classList.contains(ClassNames.emojiHasVariations));
29720
29676
  React.useEffect(function () {
29721
29677
  if (!visible) {
29722
29678
  return;
@@ -29736,7 +29692,7 @@ function EmojiVariationPicker() {
29736
29692
  style: {
29737
29693
  top: top
29738
29694
  }
29739
- }, visible && emoji ? [emojiUnified$1(emoji)].concat(emojiVariations$1(emoji)).slice(0, 6).map(function (unified) {
29695
+ }, visible && emoji ? [emojiUnified(emoji)].concat(emojiVariations(emoji)).slice(0, 6).map(function (unified) {
29740
29696
  return React.createElement(ClickableEmoji, {
29741
29697
  key: unified,
29742
29698
  emoji: emoji,
@@ -30252,7 +30208,7 @@ function PreviewBody() {
30252
30208
  if (!defaultEmoji) {
30253
30209
  return null;
30254
30210
  }
30255
- var defaultText = variationPickerEmoji ? emojiName$1(variationPickerEmoji) : previewConfig.defaultCaption;
30211
+ var defaultText = variationPickerEmoji ? emojiName(variationPickerEmoji) : previewConfig.defaultCaption;
30256
30212
  return React.createElement(React.Fragment, null, React.createElement("div", null, show ? React.createElement(ViewOnlyEmoji, {
30257
30213
  unified: previewEmoji == null ? void 0 : previewEmoji.unified,
30258
30214
  emoji: emoji,
@@ -30261,7 +30217,7 @@ function PreviewBody() {
30261
30217
  getEmojiUrl: getEmojiUrl,
30262
30218
  className: flairup.cx(styles$e.emoji)
30263
30219
  }) : defaultEmoji ? React.createElement(ViewOnlyEmoji, {
30264
- unified: emojiUnified$1(defaultEmoji),
30220
+ unified: emojiUnified(defaultEmoji),
30265
30221
  emoji: defaultEmoji,
30266
30222
  emojiStyle: emojiStyle,
30267
30223
  size: 45,
@@ -30269,7 +30225,7 @@ function PreviewBody() {
30269
30225
  className: flairup.cx(styles$e.emoji)
30270
30226
  }) : null), React.createElement("div", {
30271
30227
  className: flairup.cx(styles$e.label)
30272
- }, show ? emojiName$1(emoji) : defaultText));
30228
+ }, show ? emojiName(emoji) : defaultText));
30273
30229
  }
30274
30230
  }
30275
30231
  var styles$e = /*#__PURE__*/stylesheet.create({