emoji-picker-react 4.14.0-rc.1 → 4.14.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.
@@ -18695,22 +18695,44 @@ function hasModifier(event) {
18695
18695
  return metaKey || ctrlKey || altKey;
18696
18696
  }
18697
18697
 
18698
- function preloadEmoji(getEmojiUrl, emoji, emojiStyle) {
18698
+ // eslint-disable-next-line max-params
18699
+ function preloaEmojidIfNeeded(emoji, emojiStyles, scrollTop, clientHeight, topOffset, style, dimensions, getEmojiUrl) {
18699
18700
  if (!emoji) {
18700
18701
  return;
18701
18702
  }
18702
- if (emojiStyle === exports.EmojiStyle.NATIVE) {
18703
+ if (emojiStyles === exports.EmojiStyle.NATIVE) {
18704
+ return;
18705
+ }
18706
+ var unified = emojiUnified(emoji);
18707
+ if (preloadedEmojs.has(unified)) {
18708
+ return;
18709
+ }
18710
+ // preload only if the emoji is a few rows below the viewport
18711
+ if (!style || !dimensions) {
18712
+ return;
18713
+ }
18714
+ setTimeout(function () {
18715
+ var emojiTop = topOffset + style.top;
18716
+ var viewportBottom = scrollTop + clientHeight;
18717
+ var isJustBelowViewport = emojiTop >= viewportBottom && emojiTop < viewportBottom + dimensions.emojiSize * 2;
18718
+ if (isJustBelowViewport) {
18719
+ preloadEmoji(getEmojiUrl, emoji, emojiStyles);
18720
+ }
18721
+ });
18722
+ }
18723
+ function preloadEmoji(getEmojiUrl, emoji, emojiStyle) {
18724
+ if (!emoji) {
18703
18725
  return;
18704
18726
  }
18705
18727
  var unified = emojiUnified(emoji);
18706
18728
  if (preloadedEmojs.has(unified)) {
18707
18729
  return;
18708
18730
  }
18709
- emojiVariations(emoji).forEach(function (variation) {
18731
+ preloadedEmojs.add(unified);
18732
+ emojiVariations(emoji).concat(unified).forEach(function (variation) {
18710
18733
  var emojiUrl = getEmojiUrl(variation, emojiStyle);
18711
18734
  preloadImage(emojiUrl);
18712
18735
  });
18713
- preloadedEmojs.add(unified);
18714
18736
  }
18715
18737
  var preloadedEmojs = /*#__PURE__*/new Set();
18716
18738
  function preloadImage(url) {
@@ -19706,6 +19728,27 @@ function useOnScroll(BodyRef) {
19706
19728
  return scrollTop;
19707
19729
  }
19708
19730
 
19731
+ function shouldVirtualize(_ref) {
19732
+ var scrollTop = _ref.scrollTop,
19733
+ clientHeight = _ref.clientHeight,
19734
+ topOffset = _ref.topOffset,
19735
+ style = _ref.style,
19736
+ dimensions = _ref.dimensions;
19737
+ if (!style || !dimensions) {
19738
+ return false;
19739
+ }
19740
+ var emojiTop = topOffset + style.top;
19741
+ var emojiBottom = emojiTop + dimensions.emojiSize;
19742
+ var isVisible = emojiBottom + dimensions.emojiSize * 2 >= scrollTop && emojiTop <= scrollTop + clientHeight + dimensions.emojiSize;
19743
+ return !isVisible;
19744
+ }
19745
+ function getEmojiPositionStyle(dimensions, index) {
19746
+ return dimensions ? {
19747
+ top: Math.floor(index / dimensions.emojisPerRow) * dimensions.emojiSize,
19748
+ left: index % dimensions.emojisPerRow * dimensions.emojiSize
19749
+ } : undefined;
19750
+ }
19751
+
19709
19752
  var EMOJI_SIZE_DEFAULT = 32;
19710
19753
  function useCategoryHeight(emojiCount) {
19711
19754
  var EmojiListRef = useEmojiListRef();
@@ -19785,6 +19828,72 @@ function useIsEmojiHidden() {
19785
19828
  };
19786
19829
  }
19787
19830
 
19831
+ function useEmojiVirtualization(_ref) {
19832
+ var categoryEmojis = _ref.categoryEmojis,
19833
+ topOffset = _ref.topOffset,
19834
+ onHeightReady = _ref.onHeightReady,
19835
+ scrollTop = _ref.scrollTop;
19836
+ var isEmojiHidden = useIsEmojiHidden();
19837
+ var lazyLoadEmojis = useLazyLoadEmojisConfig();
19838
+ var emojiStyle = useEmojiStyleConfig();
19839
+ var _useActiveSkinToneSta = useActiveSkinToneState(),
19840
+ activeSkinTone = _useActiveSkinToneSta[0];
19841
+ var isEmojiDisallowed = useIsEmojiDisallowed();
19842
+ var getEmojiUrl = useGetEmojiUrlConfig();
19843
+ var showVariations = !useSkinTonesDisabledConfig();
19844
+ var BodyRef = useBodyRef();
19845
+ var virtualizedCounter = 0;
19846
+ var emojisToPush = categoryEmojis.filter(function (emoji) {
19847
+ var isDisallowed = isEmojiDisallowed(emoji);
19848
+ var _isEmojiHidden = isEmojiHidden(emoji),
19849
+ failedToLoad = _isEmojiHidden.failedToLoad,
19850
+ filteredOut = _isEmojiHidden.filteredOut,
19851
+ hidden = _isEmojiHidden.hidden;
19852
+ return !failedToLoad && !filteredOut && !hidden && !isDisallowed;
19853
+ });
19854
+ var dimensions = useCategoryHeight(emojisToPush.length);
19855
+ React.useEffect(function () {
19856
+ if (dimensions) {
19857
+ onHeightReady(dimensions.categoryHeight);
19858
+ }
19859
+ }, [dimensions, onHeightReady, emojisToPush.length]);
19860
+ var emojis = emojisToPush.reduce(function (accumulator, emoji, index) {
19861
+ var _BodyRef$current$clie, _BodyRef$current;
19862
+ var unified = emojiUnified(emoji, activeSkinTone);
19863
+ var style = getEmojiPositionStyle(dimensions, index);
19864
+ if (dimensions && BodyRef.current && shouldVirtualize({
19865
+ scrollTop: scrollTop,
19866
+ clientHeight: (_BodyRef$current$clie = (_BodyRef$current = BodyRef.current) == null ? void 0 : _BodyRef$current.clientHeight) != null ? _BodyRef$current$clie : 0,
19867
+ topOffset: topOffset,
19868
+ style: style,
19869
+ dimensions: dimensions
19870
+ })) {
19871
+ var _BodyRef$current$clie2, _BodyRef$current2;
19872
+ virtualizedCounter++;
19873
+ preloaEmojidIfNeeded(emoji, emojiStyle, scrollTop, (_BodyRef$current$clie2 = (_BodyRef$current2 = BodyRef.current) == null ? void 0 : _BodyRef$current2.clientHeight) != null ? _BodyRef$current$clie2 : 0, topOffset, style, dimensions, getEmojiUrl);
19874
+ return accumulator;
19875
+ }
19876
+ accumulator.push(React.createElement(ClickableEmoji, {
19877
+ showVariations: showVariations,
19878
+ key: unified,
19879
+ emoji: emoji,
19880
+ unified: unified,
19881
+ emojiStyle: emojiStyle,
19882
+ lazyLoad: lazyLoadEmojis,
19883
+ getEmojiUrl: getEmojiUrl,
19884
+ style: _extends({}, style, {
19885
+ position: 'absolute'
19886
+ })
19887
+ }));
19888
+ return accumulator;
19889
+ }, []);
19890
+ return {
19891
+ virtualizedCounter: virtualizedCounter,
19892
+ emojis: emojis,
19893
+ dimensions: dimensions
19894
+ };
19895
+ }
19896
+
19788
19897
  function EmojiCategory(_ref) {
19789
19898
  var categoryConfig = _ref.categoryConfig,
19790
19899
  children = _ref.children,
@@ -19885,77 +19994,21 @@ function RenderCategory(_ref2) {
19885
19994
  topOffset = _ref2.topOffset,
19886
19995
  onHeightReady = _ref2.onHeightReady,
19887
19996
  scrollTop = _ref2.scrollTop;
19888
- var isEmojiHidden = useIsEmojiHidden();
19889
- var lazyLoadEmojis = useLazyLoadEmojisConfig();
19890
- var emojiStyle = useEmojiStyleConfig();
19891
- var _useActiveSkinToneSta = useActiveSkinToneState(),
19892
- activeSkinTone = _useActiveSkinToneSta[0];
19893
- var isEmojiDisallowed = useIsEmojiDisallowed();
19894
- var getEmojiUrl = useGetEmojiUrlConfig();
19895
- var showVariations = !useSkinTonesDisabledConfig();
19896
- var BodyRef = useBodyRef();
19897
- var hiddenCounter = 0;
19898
- var virtualizedCounter = 0;
19899
- var emojisToPush = categoryEmojis.filter(function (emoji) {
19900
- var _isEmojiHidden = isEmojiHidden(emoji),
19901
- failedToLoad = _isEmojiHidden.failedToLoad,
19902
- filteredOut = _isEmojiHidden.filteredOut,
19903
- hidden = _isEmojiHidden.hidden;
19904
- return !failedToLoad && !filteredOut && !hidden;
19905
- });
19906
- var dimensions = useCategoryHeight(emojisToPush.length);
19907
- React.useEffect(function () {
19908
- if (dimensions) {
19909
- onHeightReady(dimensions.categoryHeight);
19910
- }
19911
- }, [dimensions, onHeightReady, emojisToPush.length]);
19912
- var emojis = emojisToPush.reduce(function (accumulator, emoji, index) {
19913
- var _BodyRef$current$clie, _BodyRef$current;
19914
- var unified = emojiUnified(emoji, activeSkinTone);
19915
- var _isEmojiHidden2 = isEmojiHidden(emoji),
19916
- failedToLoad = _isEmojiHidden2.failedToLoad,
19917
- filteredOut = _isEmojiHidden2.filteredOut,
19918
- hidden = _isEmojiHidden2.hidden;
19919
- var isDisallowed = isEmojiDisallowed(emoji);
19920
- if (hidden || isDisallowed) {
19921
- hiddenCounter++;
19922
- }
19923
- if (isDisallowed || failedToLoad || filteredOut) {
19924
- return accumulator;
19925
- }
19926
- var style = getEmojiPositionStyle(dimensions, index - hiddenCounter);
19927
- if (shouldVirtualize({
19928
- scrollTop: scrollTop,
19929
- clientHeight: (_BodyRef$current$clie = (_BodyRef$current = BodyRef.current) == null ? void 0 : _BodyRef$current.clientHeight) != null ? _BodyRef$current$clie : 0,
19997
+ var _useEmojiVirtualizati = useEmojiVirtualization({
19998
+ categoryEmojis: categoryEmojis,
19930
19999
  topOffset: topOffset,
19931
- style: style,
19932
- dimensions: dimensions
19933
- })) {
19934
- virtualizedCounter++;
19935
- return accumulator;
19936
- }
19937
- accumulator.push(React.createElement(ClickableEmoji, {
19938
- showVariations: showVariations,
19939
- key: unified,
19940
- emoji: emoji,
19941
- unified: unified,
19942
- hidden: failedToLoad,
19943
- hiddenOnSearch: filteredOut,
19944
- emojiStyle: emojiStyle,
19945
- lazyLoad: lazyLoadEmojis,
19946
- getEmojiUrl: getEmojiUrl,
19947
- style: _extends({}, style, {
19948
- position: 'absolute'
19949
- })
19950
- }));
19951
- return accumulator;
19952
- }, []);
20000
+ onHeightReady: onHeightReady,
20001
+ scrollTop: scrollTop
20002
+ }),
20003
+ virtualizedCounter = _useEmojiVirtualizati.virtualizedCounter,
20004
+ emojis = _useEmojiVirtualizati.emojis,
20005
+ dimensions = _useEmojiVirtualizati.dimensions;
19953
20006
  return React.createElement(EmojiCategory, {
19954
20007
  categoryConfig: categoryConfig,
19955
20008
  height: dimensions == null ? void 0 : dimensions.categoryHeight,
19956
20009
  // Indicates that there are no visible emojis
19957
20010
  // Hence, the category should be hidden
19958
- hidden: hiddenCounter === emojis.length && virtualizedCounter === 0
20011
+ hidden: !emojis.length && virtualizedCounter === 0
19959
20012
  }, emojis);
19960
20013
  }
19961
20014
  var styles$8 = /*#__PURE__*/stylesheet.create({
@@ -19966,26 +20019,6 @@ var styles$8 = /*#__PURE__*/stylesheet.create({
19966
20019
  padding: '0'
19967
20020
  }
19968
20021
  });
19969
- function getEmojiPositionStyle(dimensions, index) {
19970
- return dimensions ? {
19971
- top: Math.floor(index / dimensions.emojisPerRow) * dimensions.emojiSize,
19972
- left: index % dimensions.emojisPerRow * dimensions.emojiSize
19973
- } : undefined;
19974
- }
19975
- function shouldVirtualize(_ref3) {
19976
- var scrollTop = _ref3.scrollTop,
19977
- clientHeight = _ref3.clientHeight,
19978
- topOffset = _ref3.topOffset,
19979
- style = _ref3.style,
19980
- dimensions = _ref3.dimensions;
19981
- if (!style || !dimensions) {
19982
- return false;
19983
- }
19984
- var emojiTop = topOffset + style.top;
19985
- var emojiBottom = emojiTop + dimensions.emojiSize;
19986
- var isVisible = emojiBottom + dimensions.emojiSize * 2 >= scrollTop && emojiTop <= scrollTop + clientHeight + dimensions.emojiSize;
19987
- return !isVisible;
19988
- }
19989
20022
 
19990
20023
  var SVGTriangle = 'data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KPCEtLSBHZW5lcmF0b3I6IEFkb2JlIElsbHVzdHJhdG9yIDI2LjMuMSwgU1ZHIEV4cG9ydCBQbHVnLUluIC4gU1ZHIFZlcnNpb246IDYuMDAgQnVpbGQgMCkgIC0tPgo8c3ZnIHZlcnNpb249IjEuMSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIgeD0iMHB4IiB5PSIwcHgiIHdpZHRoPSI1MHB4IgoJIGhlaWdodD0iMTVweCIgdmlld0JveD0iMCAwIDUwIDE1IiBlbmFibGUtYmFja2dyb3VuZD0ibmV3IDAgMCA1MCAxNSIgeG1sOnNwYWNlPSJwcmVzZXJ2ZSI+CjxnIGlkPSJMYXllcl8xIj4KPC9nPgo8ZyBpZD0iTGF5ZXJfMiI+Cgk8cGF0aCBmaWxsPSIjRkZGRkZGIiBzdHJva2U9IiNFOEU3RTciIHN0cm9rZS1taXRlcmxpbWl0PSIxMCIgZD0iTTEuODYtMC40M2w5LjgzLDExLjUzYzAuNTksMC42OSwxLjU2LDAuNjksMi4xNCwwbDkuODMtMTEuNTMiLz4KCTxwYXRoIGZpbGw9IiMwMTAyMDIiIHN0cm9rZT0iIzE1MTYxNyIgc3Ryb2tlLW1pdGVybGltaXQ9IjEwIiBkPSJNMjYuODYtMC40M2w5LjgzLDExLjUzYzAuNTksMC42OSwxLjU2LDAuNjksMi4xNCwwbDkuODMtMTEuNTMiLz4KPC9nPgo8L3N2Zz4=';
19991
20024