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.
@@ -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 useUpdateSuggested() {
445
+ function useEmojiSizeState() {
443
446
  var _React$useContext13 = useContext(PickerContext),
444
- suggestedUpdateState = _React$useContext13.suggestedUpdateState;
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 = 32;
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
- var emojiSize = (_ref = measured != null ? measured : emojiSizeRef.current) != null ? _ref : EMOJI_SIZE_DEFAULT;
19782
- emojiSizeRef.current = emojiSize;
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 emojis = emojisToPush.reduce(function (accumulator, emoji, index) {
19884
+ var isVirtualized = function isVirtualized(style) {
19874
19885
  var _BodyRef$current$clie, _BodyRef$current;
19875
- var unified = emojiUnified(emoji, activeSkinTone);
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];