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.
@@ -0,0 +1,2 @@
1
+ /// <reference types="react" />
2
+ export declare function MeasureEmoji(): JSX.Element | null;
@@ -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 useUpdateSuggested() {
446
+ function useEmojiSizeState() {
444
447
  var _React$useContext13 = React.useContext(PickerContext),
445
- suggestedUpdateState = _React$useContext13.suggestedUpdateState;
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 = 32;
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
- var emojiSize = (_ref = measured != null ? measured : emojiSizeRef.current) != null ? _ref : EMOJI_SIZE_DEFAULT;
19783
- emojiSizeRef.current = emojiSize;
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 emojis = emojisToPush.reduce(function (accumulator, emoji, index) {
19885
+ var isVirtualized = function isVirtualized(style) {
19875
19886
  var _BodyRef$current$clie, _BodyRef$current;
19876
- var unified = emojiUnified(emoji, activeSkinTone);
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];