emoji-picker-react 4.7.11 → 4.7.13

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.
@@ -1,4 +1,4 @@
1
- import React__default, { memo, createElement, useState, useEffect, createContext, useContext, useRef, useMemo, useCallback, createRef, Fragment, Component } from 'react';
1
+ import React__default, { memo, createElement, useState, useEffect, useContext, createContext, useRef, useMemo, useCallback, createRef, Fragment, Component } from 'react';
2
2
  import { createSheet, cx } from 'flairup';
3
3
 
4
4
  function _extends() {
@@ -180,6 +180,14 @@ function darkMode(key, value) {
180
180
  };
181
181
  }
182
182
 
183
+ // eslint-disable-next-line complexity
184
+ function compareConfig(prev, next) {
185
+ var _prev$customEmojis, _next$customEmojis;
186
+ var prevCustomEmojis = (_prev$customEmojis = prev.customEmojis) != null ? _prev$customEmojis : [];
187
+ var nextCustomEmojis = (_next$customEmojis = next.customEmojis) != null ? _next$customEmojis : [];
188
+ return prev.open === next.open && prev.emojiVersion === next.emojiVersion && prev.reactionsDefaultOpen === next.reactionsDefaultOpen && prev.searchPlaceHolder === next.searchPlaceHolder && prev.searchPlaceholder === next.searchPlaceholder && prev.defaultSkinTone === next.defaultSkinTone && prev.skinTonesDisabled === next.skinTonesDisabled && prev.autoFocusSearch === next.autoFocusSearch && prev.emojiStyle === next.emojiStyle && prev.theme === next.theme && prev.suggestedEmojisMode === next.suggestedEmojisMode && prev.lazyLoadEmojis === next.lazyLoadEmojis && prev.className === next.className && prev.height === next.height && prev.width === next.width && prev.style === next.style && prev.searchDisabled === next.searchDisabled && prev.skinTonePickerLocation === next.skinTonePickerLocation && prevCustomEmojis.length === nextCustomEmojis.length;
189
+ }
190
+
183
191
  var DEFAULT_REACTIONS = ['1f44d', '2764-fe0f', '1f603', '1f622', '1f64f', '1f44e', '1f621' // 😡
184
192
  ];
185
193
 
@@ -16834,7 +16842,8 @@ function basePickerConfig() {
16834
16842
  unicodeToHide: new Set(KNOWN_FAILING_EMOJIS),
16835
16843
  width: 350,
16836
16844
  reactionsDefaultOpen: false,
16837
- reactions: DEFAULT_REACTIONS
16845
+ reactions: DEFAULT_REACTIONS,
16846
+ open: true
16838
16847
  };
16839
16848
  }
16840
16849
  var basePreviewConfig = {
@@ -16854,20 +16863,20 @@ function PickerConfigProvider(_ref) {
16854
16863
  }, children);
16855
16864
  }
16856
16865
  function useSetConfig(config) {
16857
- var _config$customEmojis2;
16866
+ var _config$customEmojis;
16858
16867
  var _React$useState = useState(function () {
16859
16868
  return mergeConfig(config);
16860
16869
  }),
16861
16870
  mergedConfig = _React$useState[0],
16862
16871
  setMergedConfig = _React$useState[1];
16863
16872
  useEffect(function () {
16864
- var _config$customEmojis, _mergedConfig$customE;
16865
- if (((_config$customEmojis = config.customEmojis) == null ? void 0 : _config$customEmojis.length) !== ((_mergedConfig$customE = mergedConfig.customEmojis) == null ? void 0 : _mergedConfig$customE.length)) {
16866
- setMergedConfig(mergeConfig(config));
16873
+ if (compareConfig(mergedConfig, config)) {
16874
+ return;
16867
16875
  }
16876
+ setMergedConfig(mergeConfig(config));
16868
16877
  // not gonna...
16869
16878
  // eslint-disable-next-line react-hooks/exhaustive-deps
16870
- }, [(_config$customEmojis2 = config.customEmojis) == null ? void 0 : _config$customEmojis2.length]);
16879
+ }, [(_config$customEmojis = config.customEmojis) == null ? void 0 : _config$customEmojis.length, config.open, config.emojiVersion, config.reactionsDefaultOpen, config.searchPlaceHolder, config.searchPlaceholder, config.defaultSkinTone, config.skinTonesDisabled, config.autoFocusSearch, config.emojiStyle, config.theme, config.suggestedEmojisMode, config.lazyLoadEmojis, config.className, config.height, config.width, config.searchDisabled, config.skinTonePickerLocation]);
16871
16880
  return mergedConfig;
16872
16881
  }
16873
16882
  function usePickerConfig() {
@@ -16886,7 +16895,8 @@ function useDefineMutableConfig(config) {
16886
16895
  });
16887
16896
  React__default.useEffect(function () {
16888
16897
  MutableConfigRef.current.onEmojiClick = config.onEmojiClick || emptyFunc;
16889
- }, [config.onEmojiClick]);
16898
+ MutableConfigRef.current.onReactionClick = config.onReactionClick || config.onEmojiClick;
16899
+ }, [config.onEmojiClick, config.onReactionClick]);
16890
16900
  return MutableConfigRef;
16891
16901
  }
16892
16902
  function emptyFunc() {}
@@ -16935,6 +16945,11 @@ function useCustomEmojisConfig() {
16935
16945
  customEmojis = _usePickerConfig7.customEmojis;
16936
16946
  return customEmojis;
16937
16947
  }
16948
+ function useOpenConfig() {
16949
+ var _usePickerConfig8 = usePickerConfig(),
16950
+ open = _usePickerConfig8.open;
16951
+ return open;
16952
+ }
16938
16953
  function useOnEmojiClickConfig(mouseEventSource) {
16939
16954
  var _ref;
16940
16955
  var _useMutableConfig = useMutableConfig(),
@@ -16943,73 +16958,73 @@ function useOnEmojiClickConfig(mouseEventSource) {
16943
16958
  return handler || function () {};
16944
16959
  }
16945
16960
  function usePreviewConfig() {
16946
- var _usePickerConfig8 = usePickerConfig(),
16947
- previewConfig = _usePickerConfig8.previewConfig;
16961
+ var _usePickerConfig9 = usePickerConfig(),
16962
+ previewConfig = _usePickerConfig9.previewConfig;
16948
16963
  return previewConfig;
16949
16964
  }
16950
16965
  function useThemeConfig() {
16951
- var _usePickerConfig9 = usePickerConfig(),
16952
- theme = _usePickerConfig9.theme;
16966
+ var _usePickerConfig10 = usePickerConfig(),
16967
+ theme = _usePickerConfig10.theme;
16953
16968
  return theme;
16954
16969
  }
16955
16970
  function useSuggestedEmojisModeConfig() {
16956
- var _usePickerConfig10 = usePickerConfig(),
16957
- suggestedEmojisMode = _usePickerConfig10.suggestedEmojisMode;
16971
+ var _usePickerConfig11 = usePickerConfig(),
16972
+ suggestedEmojisMode = _usePickerConfig11.suggestedEmojisMode;
16958
16973
  return suggestedEmojisMode;
16959
16974
  }
16960
16975
  function useLazyLoadEmojisConfig() {
16961
- var _usePickerConfig11 = usePickerConfig(),
16962
- lazyLoadEmojis = _usePickerConfig11.lazyLoadEmojis;
16976
+ var _usePickerConfig12 = usePickerConfig(),
16977
+ lazyLoadEmojis = _usePickerConfig12.lazyLoadEmojis;
16963
16978
  return lazyLoadEmojis;
16964
16979
  }
16965
16980
  function useClassNameConfig() {
16966
- var _usePickerConfig12 = usePickerConfig(),
16967
- className = _usePickerConfig12.className;
16981
+ var _usePickerConfig13 = usePickerConfig(),
16982
+ className = _usePickerConfig13.className;
16968
16983
  return className;
16969
16984
  }
16970
16985
  function useStyleConfig() {
16971
- var _usePickerConfig13 = usePickerConfig(),
16972
- height = _usePickerConfig13.height,
16973
- width = _usePickerConfig13.width,
16974
- style = _usePickerConfig13.style;
16986
+ var _usePickerConfig14 = usePickerConfig(),
16987
+ height = _usePickerConfig14.height,
16988
+ width = _usePickerConfig14.width,
16989
+ style = _usePickerConfig14.style;
16975
16990
  return _extends({
16976
16991
  height: getDimension(height),
16977
16992
  width: getDimension(width)
16978
16993
  }, style);
16979
16994
  }
16980
16995
  function useReactionsOpenConfig() {
16981
- var _usePickerConfig14 = usePickerConfig(),
16982
- reactionsDefaultOpen = _usePickerConfig14.reactionsDefaultOpen;
16996
+ var _usePickerConfig15 = usePickerConfig(),
16997
+ reactionsDefaultOpen = _usePickerConfig15.reactionsDefaultOpen;
16983
16998
  return reactionsDefaultOpen;
16984
16999
  }
16985
17000
  function useEmojiVersionConfig() {
16986
- var _usePickerConfig15 = usePickerConfig(),
16987
- emojiVersion = _usePickerConfig15.emojiVersion;
17001
+ var _usePickerConfig16 = usePickerConfig(),
17002
+ emojiVersion = _usePickerConfig16.emojiVersion;
16988
17003
  return emojiVersion;
16989
17004
  }
16990
17005
  function useSearchDisabledConfig() {
16991
- var _usePickerConfig16 = usePickerConfig(),
16992
- searchDisabled = _usePickerConfig16.searchDisabled;
17006
+ var _usePickerConfig17 = usePickerConfig(),
17007
+ searchDisabled = _usePickerConfig17.searchDisabled;
16993
17008
  return searchDisabled;
16994
17009
  }
16995
17010
  function useSkinTonePickerLocationConfig() {
16996
- var _usePickerConfig17 = usePickerConfig(),
16997
- skinTonePickerLocation = _usePickerConfig17.skinTonePickerLocation;
17011
+ var _usePickerConfig18 = usePickerConfig(),
17012
+ skinTonePickerLocation = _usePickerConfig18.skinTonePickerLocation;
16998
17013
  return skinTonePickerLocation;
16999
17014
  }
17000
17015
  function useUnicodeToHide() {
17001
- var _usePickerConfig18 = usePickerConfig(),
17002
- unicodeToHide = _usePickerConfig18.unicodeToHide;
17016
+ var _usePickerConfig19 = usePickerConfig(),
17017
+ unicodeToHide = _usePickerConfig19.unicodeToHide;
17003
17018
  return unicodeToHide;
17004
17019
  }
17005
17020
  function useReactionsConfig() {
17006
- var _usePickerConfig19 = usePickerConfig(),
17007
- reactions = _usePickerConfig19.reactions;
17021
+ var _usePickerConfig20 = usePickerConfig(),
17022
+ reactions = _usePickerConfig20.reactions;
17008
17023
  return reactions;
17009
17024
  }
17010
17025
  function useGetEmojiUrlConfig() {
17011
- var _usePickerConfig20 = usePickerConfig(),
17012
- getEmojiUrl = _usePickerConfig20.getEmojiUrl;
17026
+ var _usePickerConfig21 = usePickerConfig(),
17027
+ getEmojiUrl = _usePickerConfig21.getEmojiUrl;
17013
17028
  return getEmojiUrl;
17014
17029
  }
17015
17030
  function getDimension(dimensionConfig) {
@@ -18916,6 +18931,16 @@ var styles$9 = /*#__PURE__*/stylesheet.create({
18916
18931
  }
18917
18932
  });
18918
18933
 
18934
+ function detectEmojyPartiallyBelowFold(button, bodyRef) {
18935
+ if (!button || !bodyRef) {
18936
+ return 0;
18937
+ }
18938
+ var buttonRect = button.getBoundingClientRect();
18939
+ var bodyRect = bodyRef.getBoundingClientRect();
18940
+ // If the element is obscured by at least half of its size
18941
+ return bodyRect.height - (buttonRect.y - bodyRect.y);
18942
+ }
18943
+
18919
18944
  function useEmojiPreviewEvents(allow, setPreviewEmoji) {
18920
18945
  var BodyRef = useBodyRef();
18921
18946
  var isMouseDisallowed = useIsMouseDisallowed();
@@ -18969,6 +18994,18 @@ function useEmojiPreviewEvents(allow, setPreviewEmoji) {
18969
18994
  }
18970
18995
  var button = buttonFromTarget(e.target);
18971
18996
  if (button) {
18997
+ var belowFoldByPx = detectEmojyPartiallyBelowFold(button, bodyRef);
18998
+ var buttonHeight = button.getBoundingClientRect().height;
18999
+ if (belowFoldByPx < buttonHeight / 2) {
19000
+ return;
19001
+ }
19002
+ if (belowFoldByPx < buttonHeight) {
19003
+ button.scrollIntoView({
19004
+ behavior: 'smooth',
19005
+ block: 'end'
19006
+ });
19007
+ return;
19008
+ }
18972
19009
  focusElement(button);
18973
19010
  }
18974
19011
  }
@@ -20182,7 +20219,7 @@ function useOnFocus() {
20182
20219
  var _excluded$1 = ["width", "height"];
20183
20220
  function PickerMain(_ref) {
20184
20221
  var children = _ref.children;
20185
- return createElement(PickerContextProvider, null, createElement(PickerStyleTag, null), createElement(PickerRootElement, null, children));
20222
+ return createElement(PickerContextProvider, null, createElement(PickerRootElement, null, children));
20186
20223
  }
20187
20224
  function PickerRootElement(_ref2) {
20188
20225
  var _cx;
@@ -20348,7 +20385,7 @@ var styles$j = /*#__PURE__*/stylesheet.create({
20348
20385
  });
20349
20386
 
20350
20387
  function EmojiPicker(props) {
20351
- return createElement(ElementRefContextProvider, null, createElement(PickerConfigProvider, Object.assign({}, props), createElement(ContentControl, null)));
20388
+ return createElement(ElementRefContextProvider, null, createElement(PickerStyleTag, null), createElement(PickerConfigProvider, Object.assign({}, props), createElement(ContentControl, null)));
20352
20389
  }
20353
20390
  function ContentControl() {
20354
20391
  var _useReactionsModeStat = useReactionsModeState(),
@@ -20356,20 +20393,19 @@ function ContentControl() {
20356
20393
  var _React$useState = useState(!reactionsDefaultOpen),
20357
20394
  renderAll = _React$useState[0],
20358
20395
  setRenderAll = _React$useState[1];
20396
+ var isOpen = useOpenConfig();
20359
20397
  useEffect(function () {
20360
20398
  if (!renderAll) {
20361
20399
  setRenderAll(true);
20362
20400
  }
20363
20401
  }, [renderAll]);
20402
+ if (!isOpen) {
20403
+ return null;
20404
+ }
20364
20405
  return createElement(PickerMain, null, createElement(Reactions, null), renderAll ? createElement(Fragment, null, createElement(Header, null), createElement(Body, null), createElement(Preview, null)) : null);
20365
20406
  }
20366
20407
  // eslint-disable-next-line complexity
20367
- var EmojiPickerReact = /*#__PURE__*/memo(EmojiPicker, function (prev, next) {
20368
- var _prev$customEmojis, _next$customEmojis;
20369
- var prevCustomEmojis = (_prev$customEmojis = prev.customEmojis) != null ? _prev$customEmojis : [];
20370
- var nextCustomEmojis = (_next$customEmojis = next.customEmojis) != null ? _next$customEmojis : [];
20371
- return prev.emojiVersion === next.emojiVersion && prev.reactionsDefaultOpen === next.reactionsDefaultOpen && prev.searchPlaceHolder === next.searchPlaceHolder && prev.searchPlaceholder === next.searchPlaceholder && prev.defaultSkinTone === next.defaultSkinTone && prev.skinTonesDisabled === next.skinTonesDisabled && prev.autoFocusSearch === next.autoFocusSearch && prev.emojiStyle === next.emojiStyle && prev.theme === next.theme && prev.suggestedEmojisMode === next.suggestedEmojisMode && prev.lazyLoadEmojis === next.lazyLoadEmojis && prev.className === next.className && prev.height === next.height && prev.width === next.width && prev.style === next.style && prev.searchDisabled === next.searchDisabled && prev.skinTonePickerLocation === next.skinTonePickerLocation && prevCustomEmojis.length === nextCustomEmojis.length;
20372
- });
20408
+ var EmojiPickerReact = /*#__PURE__*/memo(EmojiPicker, compareConfig);
20373
20409
 
20374
20410
  var ErrorBoundary = /*#__PURE__*/function (_React$Component) {
20375
20411
  _inheritsLoose(ErrorBoundary, _React$Component);