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