emoji-picker-react 4.15.1 → 4.16.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/components/body/MeasureEmoji.d.ts +2 -0
- package/dist/components/context/PickerContext.d.ts +1 -0
- package/dist/emoji-picker-react.cjs.development.js +79 -15
- 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 +80 -16
- package/dist/emoji-picker-react.esm.js.map +1 -1
- package/package.json +2 -2
- package/src/components/body/EmojiCategory.tsx +2 -0
- package/src/components/body/EmojiList.tsx +2 -0
- package/src/components/body/MeasureEmoji.tsx +74 -0
- package/src/components/context/PickerContext.tsx +11 -2
- package/src/hooks/useCategoryHeight.ts +18 -12
- package/src/hooks/useEmojiVirtualization.tsx +15 -12
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import React__default, { memo, createElement, useState, useRef, useMemo, useEffect, createContext, useContext, createRef, useCallback, Fragment, Suspense, Component } from 'react';
|
|
1
|
+
import React__default, { memo, createElement, useState, useRef, useMemo, useEffect, createContext, useContext, createRef, useCallback, Fragment, useLayoutEffect, Suspense, Component } from 'react';
|
|
2
2
|
import { createSheet, cx } from 'flairup';
|
|
3
3
|
|
|
4
4
|
function _extends() {
|
|
@@ -339,6 +339,7 @@ function PickerContextProvider(_ref) {
|
|
|
339
339
|
isPastInitialLoad = _useState[0],
|
|
340
340
|
setIsPastInitialLoad = _useState[1];
|
|
341
341
|
var visibleCategoriesState = useState([]);
|
|
342
|
+
var emojiSizeState = useState(null);
|
|
342
343
|
useMarkInitialLoad(setIsPastInitialLoad);
|
|
343
344
|
return createElement(PickerContext.Provider, {
|
|
344
345
|
value: {
|
|
@@ -355,7 +356,8 @@ function PickerContextProvider(_ref) {
|
|
|
355
356
|
skinToneFanOpenState: skinToneFanOpenState,
|
|
356
357
|
suggestedUpdateState: suggestedUpdateState,
|
|
357
358
|
reactionsModeState: reactionsModeState,
|
|
358
|
-
visibleCategoriesState: visibleCategoriesState
|
|
359
|
+
visibleCategoriesState: visibleCategoriesState,
|
|
360
|
+
emojiSizeState: emojiSizeState
|
|
359
361
|
}
|
|
360
362
|
}, children);
|
|
361
363
|
}
|
|
@@ -387,7 +389,8 @@ var PickerContext = /*#__PURE__*/createContext({
|
|
|
387
389
|
reactionsModeState: [false, function () {}],
|
|
388
390
|
visibleCategoriesState: [[], function () {
|
|
389
391
|
return [];
|
|
390
|
-
}]
|
|
392
|
+
}],
|
|
393
|
+
emojiSizeState: [null, function () {}]
|
|
391
394
|
});
|
|
392
395
|
function useFilterRef() {
|
|
393
396
|
var _React$useContext = useContext(PickerContext),
|
|
@@ -439,9 +442,14 @@ function useVisibleCategoriesState() {
|
|
|
439
442
|
visibleCategoriesState = _React$useContext12.visibleCategoriesState;
|
|
440
443
|
return visibleCategoriesState;
|
|
441
444
|
}
|
|
442
|
-
function
|
|
445
|
+
function useEmojiSizeState() {
|
|
443
446
|
var _React$useContext13 = useContext(PickerContext),
|
|
444
|
-
|
|
447
|
+
emojiSizeState = _React$useContext13.emojiSizeState;
|
|
448
|
+
return emojiSizeState;
|
|
449
|
+
}
|
|
450
|
+
function useUpdateSuggested() {
|
|
451
|
+
var _React$useContext14 = useContext(PickerContext),
|
|
452
|
+
suggestedUpdateState = _React$useContext14.suggestedUpdateState;
|
|
445
453
|
var suggestedUpdated = suggestedUpdateState[0],
|
|
446
454
|
setsuggestedUpdate = suggestedUpdateState[1];
|
|
447
455
|
return [suggestedUpdated, function updateSuggested() {
|
|
@@ -19759,7 +19767,7 @@ function getEmojiPositionStyle(dimensions, index) {
|
|
|
19759
19767
|
} : undefined;
|
|
19760
19768
|
}
|
|
19761
19769
|
|
|
19762
|
-
var EMOJI_SIZE_DEFAULT =
|
|
19770
|
+
var EMOJI_SIZE_DEFAULT = 40;
|
|
19763
19771
|
function useCategoryHeight(emojiCount) {
|
|
19764
19772
|
var EmojiListRef = useEmojiListRef();
|
|
19765
19773
|
var _useReactionsModeStat = useReactionsModeState(),
|
|
@@ -19768,18 +19776,21 @@ function useCategoryHeight(emojiCount) {
|
|
|
19768
19776
|
var emojiSizeRef = useRef();
|
|
19769
19777
|
var _useVisibleCategories = useVisibleCategoriesState(),
|
|
19770
19778
|
visibleCategories = _useVisibleCategories[0];
|
|
19779
|
+
var _useEmojiSizeState = useEmojiSizeState(),
|
|
19780
|
+
emojiSizeFromContext = _useEmojiSizeState[0];
|
|
19771
19781
|
var _React$useState = useState(),
|
|
19772
19782
|
dimensions = _React$useState[0],
|
|
19773
19783
|
setDimensions = _React$useState[1];
|
|
19774
19784
|
// Helper to compute and store dimensions based on current DOM
|
|
19775
19785
|
var computeAndSetDimensions = useCallback(function () {
|
|
19776
|
-
var _ref;
|
|
19777
19786
|
var listEl = EmojiListRef.current;
|
|
19778
19787
|
if (!listEl) return;
|
|
19779
19788
|
var emojiElement = listEl.querySelector(EmojiButtonSelector);
|
|
19780
19789
|
var measured = emojiElement == null ? void 0 : emojiElement.clientHeight;
|
|
19781
|
-
|
|
19782
|
-
|
|
19790
|
+
if (measured) {
|
|
19791
|
+
emojiSizeRef.current = measured;
|
|
19792
|
+
}
|
|
19793
|
+
var emojiSize = emojiSizeFromContext || measured || emojiSizeRef.current || EMOJI_SIZE_DEFAULT;
|
|
19783
19794
|
var pickerWidth = listEl.clientWidth;
|
|
19784
19795
|
if (pickerWidth === 0 || emojiSize === 0) return;
|
|
19785
19796
|
var emojisPerRow = Math.max(1, Math.floor(pickerWidth / emojiSize));
|
|
@@ -19790,7 +19801,7 @@ function useCategoryHeight(emojiCount) {
|
|
|
19790
19801
|
emojisPerRow: emojisPerRow,
|
|
19791
19802
|
emojiSize: emojiSize
|
|
19792
19803
|
});
|
|
19793
|
-
}, [EmojiListRef, emojiCount]);
|
|
19804
|
+
}, [EmojiListRef, emojiCount, emojiSizeFromContext]);
|
|
19794
19805
|
// Recompute on data-count changes and when reactions mode toggles
|
|
19795
19806
|
useEffect(function () {
|
|
19796
19807
|
computeAndSetDimensions();
|
|
@@ -19870,17 +19881,20 @@ function useEmojiVirtualization(_ref) {
|
|
|
19870
19881
|
onHeightReady(dimensions.categoryHeight);
|
|
19871
19882
|
}
|
|
19872
19883
|
}, [dimensions, onHeightReady, emojisToPush.length]);
|
|
19873
|
-
var
|
|
19884
|
+
var isVirtualized = function isVirtualized(style) {
|
|
19874
19885
|
var _BodyRef$current$clie, _BodyRef$current;
|
|
19875
|
-
|
|
19876
|
-
var style = getEmojiPositionStyle(dimensions, index);
|
|
19877
|
-
if (dimensions && BodyRef.current && shouldVirtualize({
|
|
19886
|
+
return dimensions && BodyRef.current && shouldVirtualize({
|
|
19878
19887
|
scrollTop: scrollTop,
|
|
19879
19888
|
clientHeight: (_BodyRef$current$clie = (_BodyRef$current = BodyRef.current) == null ? void 0 : _BodyRef$current.clientHeight) != null ? _BodyRef$current$clie : 0,
|
|
19880
19889
|
topOffset: topOffset,
|
|
19881
19890
|
style: style,
|
|
19882
19891
|
dimensions: dimensions
|
|
19883
|
-
})
|
|
19892
|
+
});
|
|
19893
|
+
};
|
|
19894
|
+
var emojis = emojisToPush.reduce(function (accumulator, emoji, index) {
|
|
19895
|
+
var unified = emojiUnified(emoji, activeSkinTone);
|
|
19896
|
+
var style = getEmojiPositionStyle(dimensions, index);
|
|
19897
|
+
if (isVirtualized(style)) {
|
|
19884
19898
|
var _BodyRef$current$clie2, _BodyRef$current2;
|
|
19885
19899
|
virtualizedCounter++;
|
|
19886
19900
|
preloadEmojiIfNeeded(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);
|
|
@@ -19935,6 +19949,7 @@ function EmojiCategory(_ref) {
|
|
|
19935
19949
|
var styles$7 = /*#__PURE__*/stylesheet.create({
|
|
19936
19950
|
category: {
|
|
19937
19951
|
'.': ClassNames.category,
|
|
19952
|
+
minHeight: 'calc(var(--epr-emoji-fullsize) + var(--epr-category-label-height))',
|
|
19938
19953
|
position: 'relative'
|
|
19939
19954
|
},
|
|
19940
19955
|
categoryContent: {
|
|
@@ -19967,6 +19982,55 @@ var styles$7 = /*#__PURE__*/stylesheet.create({
|
|
|
19967
19982
|
}
|
|
19968
19983
|
});
|
|
19969
19984
|
|
|
19985
|
+
function MeasureEmoji() {
|
|
19986
|
+
var categories = useCategoriesConfig();
|
|
19987
|
+
var getEmojisByCategory = useGetEmojisByCategory();
|
|
19988
|
+
var emojiStyle = useEmojiStyleConfig();
|
|
19989
|
+
var getEmojiUrl = useGetEmojiUrlConfig();
|
|
19990
|
+
var lazyLoadEmojis = useLazyLoadEmojisConfig();
|
|
19991
|
+
var _useActiveSkinToneSta = useActiveSkinToneState(),
|
|
19992
|
+
activeSkinTone = _useActiveSkinToneSta[0];
|
|
19993
|
+
var _useEmojiSizeState = useEmojiSizeState(),
|
|
19994
|
+
emojiSize = _useEmojiSizeState[0],
|
|
19995
|
+
setEmojiSize = _useEmojiSizeState[1];
|
|
19996
|
+
var ref = useRef(null);
|
|
19997
|
+
useLayoutEffect(function () {
|
|
19998
|
+
if (ref.current) {
|
|
19999
|
+
setEmojiSize(ref.current.clientHeight);
|
|
20000
|
+
}
|
|
20001
|
+
});
|
|
20002
|
+
if (emojiSize) {
|
|
20003
|
+
return null;
|
|
20004
|
+
}
|
|
20005
|
+
var firstCategory = categories[0];
|
|
20006
|
+
var dummyEmoji = getEmojisByCategory(categoryFromCategoryConfig(firstCategory))[0];
|
|
20007
|
+
var unified = dummyEmoji ? emojiUnified(dummyEmoji, activeSkinTone) : '';
|
|
20008
|
+
if (!dummyEmoji) {
|
|
20009
|
+
return null;
|
|
20010
|
+
}
|
|
20011
|
+
return createElement("div", {
|
|
20012
|
+
ref: ref
|
|
20013
|
+
}, createElement(ClickableEmoji, {
|
|
20014
|
+
emoji: dummyEmoji,
|
|
20015
|
+
unified: unified,
|
|
20016
|
+
emojiStyle: emojiStyle,
|
|
20017
|
+
getEmojiUrl: getEmojiUrl,
|
|
20018
|
+
lazyLoad: lazyLoadEmojis,
|
|
20019
|
+
showVariations: false,
|
|
20020
|
+
hidden: false,
|
|
20021
|
+
style: {
|
|
20022
|
+
opacity: 0,
|
|
20023
|
+
pointerEvents: 'none',
|
|
20024
|
+
position: 'absolute',
|
|
20025
|
+
top: 0,
|
|
20026
|
+
left: 0,
|
|
20027
|
+
zIndex: -1,
|
|
20028
|
+
height: 'var(--epr-emoji-fullsize)',
|
|
20029
|
+
width: 'var(--epr-emoji-fullsize)'
|
|
20030
|
+
}
|
|
20031
|
+
}));
|
|
20032
|
+
}
|
|
20033
|
+
|
|
19970
20034
|
function EmojiList(_ref) {
|
|
19971
20035
|
var scrollTop = _ref.scrollTop;
|
|
19972
20036
|
var categories = useCategoriesConfig();
|
|
@@ -19980,7 +20044,7 @@ function EmojiList(_ref) {
|
|
|
19980
20044
|
return createElement("ul", {
|
|
19981
20045
|
className: cx(styles$8.emojiList),
|
|
19982
20046
|
ref: EmojiListRef
|
|
19983
|
-
}, categories.map(function (categoryConfig) {
|
|
20047
|
+
}, createElement(MeasureEmoji, null), categories.map(function (categoryConfig) {
|
|
19984
20048
|
var category = categoryFromCategoryConfig(categoryConfig);
|
|
19985
20049
|
var currentOffset = topOffset;
|
|
19986
20050
|
var categoryHeight = categoryHeights[category];
|