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.
- package/dist/emoji-picker-react.cjs.development.js +122 -89
- package/dist/emoji-picker-react.cjs.development.js.map +1 -1
- package/dist/emoji-picker-react.cjs.production.min.js +1 -1
- package/dist/emoji-picker-react.cjs.production.min.js.map +1 -1
- package/dist/emoji-picker-react.esm.js +122 -89
- package/dist/emoji-picker-react.esm.js.map +1 -1
- package/dist/hooks/preloadEmoji.d.ts +4 -0
- package/dist/hooks/useEmojiVirtualization.d.ts +16 -0
- package/dist/virtualization/virtualizationHelpers.d.ts +18 -0
- package/package.json +2 -1
- package/src/components/body/EmojiList.tsx +10 -136
- package/src/hooks/preloadEmoji.ts +49 -7
- package/src/hooks/useEmojiVirtualization.tsx +112 -0
- package/src/virtualization/virtualizationHelpers.ts +45 -0
|
@@ -18695,22 +18695,44 @@ function hasModifier(event) {
|
|
|
18695
18695
|
return metaKey || ctrlKey || altKey;
|
|
18696
18696
|
}
|
|
18697
18697
|
|
|
18698
|
-
|
|
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 (
|
|
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
|
-
|
|
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
|
|
19889
|
-
|
|
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
|
-
|
|
19932
|
-
|
|
19933
|
-
})
|
|
19934
|
-
|
|
19935
|
-
|
|
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:
|
|
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
|
|