emoji-picker-react 4.0.0-rc.32 → 4.0.0-rc.33

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.
@@ -8,6 +8,7 @@ export declare enum ClassNames {
8
8
  category = "epr-emoji-category",
9
9
  label = "epr-emoji-category-label",
10
10
  categoryContent = "epr-emoji-category-content",
11
- emojiHasVariatios = "epr-emoji-has-variations"
11
+ emojiHasVariatios = "epr-emoji-has-variations",
12
+ external = "__EmojiPicker__"
12
13
  }
13
14
  export declare function asSelectors(...classNames: ClassNames[]): string;
@@ -8,10 +8,11 @@ declare type ClickableEmojiProps = Readonly<BaseProps & {
8
8
  showVariations?: boolean;
9
9
  emojiRef?: EmojiRef;
10
10
  hiddenOnSearch?: boolean;
11
+ emoji: DataEmoji;
11
12
  }>;
12
13
  declare type BaseProps = {
14
+ emoji?: DataEmoji;
13
15
  emojiStyle: EmojiStyle;
14
- emoji: DataEmoji;
15
16
  unified: string;
16
17
  size?: number;
17
18
  lazyLoad?: boolean;
@@ -1,4 +1,4 @@
1
- .EmojiPickerReact button.epr-emoji{align-items:center;border-radius:8px;box-sizing:border-box;display:flex;height:var(--epr-emoji-fullsize);justify-content:center;max-height:var(--epr-emoji-fullsize);max-width:var(--epr-emoji-fullsize);overflow:hidden;position:relative;width:var(--epr-emoji-fullsize)}.EmojiPickerReact button.epr-emoji.epr-emoji-has-variations:after{border-bottom:4px solid var(--epr-emoji-variation-indicator-color);border-left:4px solid transparent;border-right:4px solid transparent;bottom:1px;content:"";display:block;height:0;position:absolute;right:0;transform:rotate(135deg);width:0;z-index:var(--epr-emoji-variations-indictator-z-index)}.EmojiPickerReact button.epr-emoji .epr-emoji-img{max-height:var(--epr-emoji-fullsize);max-width:var(--epr-emoji-fullsize);padding:var(--epr-emoji-padding)}.EmojiPickerReact button.epr-emoji .epr-emoji-native{padding:var(--epr-emoji-padding)}.EmojiPickerReact button.epr-emoji>*{align-self:center;display:block;justify-self:center}.EmojiPickerReact button.epr-emoji.epr-emoji-has-variations:hover:after{border-bottom:4px solid var(--epr-emoji-variation-indicator-color-hover)}.EmojiPickerReact .epr-emoji-img{font-size:0}.EmojiPickerReact .epr-emoji-native{align-self:center;font-family:Segoe UI Emoji,Segoe UI Symbol,Segoe UI,Apple Color Emoji,Twemoji Mozilla,Noto Color Emoji,Android Emoji,Times,Symbola,Aegyptus,Code2000,Code2001,Code2002,Musica,serif,LastResort;font-size:var(--epr-emoji-size);justify-self:center;letter-spacing:0;line-height:100%;position:relative;text-align:center}.EmojiPickerReact button.epr-emoji:hover>*{background-color:var(--epr-emoji-hover-color)}.EmojiPickerReact button.epr-emoji:focus>*{background-color:var(--epr-focus-bg-color)}
1
+ .EmojiPickerReact button.epr-emoji{align-items:center;border-radius:8px;box-sizing:border-box;display:flex;height:var(--epr-emoji-fullsize);justify-content:center;max-height:var(--epr-emoji-fullsize);max-width:var(--epr-emoji-fullsize);overflow:hidden;position:relative;width:var(--epr-emoji-fullsize)}.EmojiPickerReact button.epr-emoji.epr-emoji-has-variations:after{border-bottom:4px solid var(--epr-emoji-variation-indicator-color);border-left:4px solid transparent;border-right:4px solid transparent;bottom:1px;content:"";display:block;height:0;position:absolute;right:0;transform:rotate(135deg);width:0;z-index:var(--epr-emoji-variations-indictator-z-index)}.EmojiPickerReact button.epr-emoji .epr-emoji-img{max-height:var(--epr-emoji-fullsize);max-width:var(--epr-emoji-fullsize);padding:var(--epr-emoji-padding)}.EmojiPickerReact button.epr-emoji .epr-emoji-native{padding:var(--epr-emoji-padding)}.EmojiPickerReact button.epr-emoji>*{align-self:center;display:block;justify-self:center}.EmojiPickerReact button.epr-emoji.epr-emoji-has-variations:hover:after{border-bottom:4px solid var(--epr-emoji-variation-indicator-color-hover)}.__EmojiPicker__.epr-emoji-img{font-size:0}.__EmojiPicker__.epr-emoji-native{align-self:center;font-family:Segoe UI Emoji,Segoe UI Symbol,Segoe UI,Apple Color Emoji,Twemoji Mozilla,Noto Color Emoji,Android Emoji,Times,Symbola,Aegyptus,Code2000,Code2001,Code2002,Musica,serif,LastResort;font-size:var(--epr-emoji-size);justify-self:center;letter-spacing:0;line-height:100%;position:relative;text-align:center}.EmojiPickerReact button.epr-emoji:hover>*{background-color:var(--epr-emoji-hover-color)}.EmojiPickerReact button.epr-emoji:focus>*{background-color:var(--epr-focus-bg-color)}
2
2
  .EmojiPickerReact li.epr-emoji-category>.epr-emoji-category-content{grid-gap:0;display:grid;grid-template-columns:repeat(auto-fill,var(--epr-emoji-fullsize));justify-content:space-between;margin:var(--epr-category-padding);position:relative}.EmojiPickerReact li.epr-emoji-category:not(:has(.epr-visible)){display:none}.EmojiPickerReact li.epr-emoji-category>.epr-emoji-category-label{align-items:center;-webkit-backdrop-filter:blur(3px);backdrop-filter:blur(3px);background-color:var(--epr-category-label-bg-color);color:var(--epr-category-label-text-color);display:flex;font-weight:700;height:var(--epr-category-label-height);padding:var(--epr-category-label-padding);position:-webkit-sticky;position:sticky;text-transform:capitalize;top:0;width:100%;z-index:var(--epr-category-label-z-index)}
3
3
  .EmojiPickerReact ul.epr-emoji-list{list-style:none;margin:0;padding:0}
4
4
  .EmojiPickerReact .epr-emoji-variation-picker{align-items:center;background:var(--epr-emoji-variation-picker-bg-color);border:1px solid var(--epr-picker-border-color);border-radius:3px;box-shadow:0 2px 5px rgba(0,0,0,.2);display:flex;height:0;height:var(--epr-emoji-variation-picker-height);justify-content:space-around;left:15px;opacity:0;padding:5px;pointer-events:none;position:absolute;right:15px;top:0;top:-100%;transform:scale(.9);transition:transform .1s ease-out,opacity .2s ease-out;visibility:hidden;z-index:var(--epr-skin-variation-picker-z-index)}.EmojiPickerReact .epr-emoji-variation-picker.pointing-up{transform:scale(.9);transform-origin:center 0}.EmojiPickerReact .epr-emoji-variation-picker.visible{opacity:1;pointer-events:all;transform:scale(1);visibility:visible}.EmojiPickerReact .epr-emoji-variation-picker .EmojiPickerReact .epr-emoji-variation-picker button.epr-emoji:hover{background:none}.EmojiPickerReact .epr-emoji-variation-picker .epr-emoji-pointer{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='50' height='15' xml:space='preserve'%3E%3Cg stroke-miterlimit='10'%3E%3Cpath fill='%23FFF' stroke='%23E8E7E7' d='m1.86-.43 9.83 11.53c.59.69 1.56.69 2.14 0L23.66-.43'/%3E%3Cpath fill='%23010202' stroke='%23151617' d='m26.86-.43 9.83 11.53c.59.69 1.56.69 2.14 0L48.66-.43'/%3E%3C/g%3E%3C/svg%3E");background-position:0 0;background-repeat:no-repeat;background-size:50px 15px;content:"";height:15px;position:absolute;top:-10px;width:25px}.EmojiPickerReact.epr-dark-theme .epr-emoji-variation-picker .epr-emoji-pointer{background-position:-25px 0}.EmojiPickerReact .epr-emoji-variation-picker .epr-emoji-pointer{top:100%;transform:translateX(-18px)}.EmojiPickerReact .epr-emoji-variation-picker.pointing-up .epr-emoji-pointer{top:0;transform:rotate(180deg) translateY(100%) translateX(18px)}
@@ -15232,6 +15232,7 @@ var ClassNames;
15232
15232
  ClassNames["label"] = "epr-emoji-category-label";
15233
15233
  ClassNames["categoryContent"] = "epr-emoji-category-content";
15234
15234
  ClassNames["emojiHasVariatios"] = "epr-emoji-has-variations";
15235
+ ClassNames["external"] = "__EmojiPicker__";
15235
15236
  })(ClassNames || (ClassNames = {}));
15236
15237
 
15237
15238
  function asSelectors() {
@@ -15613,26 +15614,6 @@ function setsuggested(emoji, skinTone) {
15613
15614
  }
15614
15615
  }
15615
15616
 
15616
- function preloadEmoji(emoji, emojiStyle) {
15617
- var unified = emojiUnified(emoji);
15618
-
15619
- if (preloadedEmojs.has(unified)) {
15620
- return;
15621
- }
15622
-
15623
- emojiVariations(emoji).forEach(function (variation) {
15624
- var emojiUrl = emojiUrlByUnified(emojiStyle, variation);
15625
- preloadImage(emojiUrl);
15626
- });
15627
- preloadedEmojs.add(unified);
15628
- }
15629
- var preloadedEmojs = /*#__PURE__*/new Set();
15630
-
15631
- function preloadImage(url) {
15632
- var image = new Image();
15633
- image.src = url;
15634
- }
15635
-
15636
15617
  function useCloseAllOpenToggles() {
15637
15618
  var _useEmojiVariationPic = useEmojiVariationPickerState(),
15638
15619
  variationPicker = _useEmojiVariationPic[0],
@@ -15824,7 +15805,6 @@ function useSetVariationPicker() {
15824
15805
 
15825
15806
  function useMouseDownHandlers(BodyRef) {
15826
15807
  var mouseDownTimerRef = React.useRef();
15827
- var preloading = React.useRef(false);
15828
15808
  var setVariationPicker = useSetVariationPicker();
15829
15809
  var disallowClickRef = useDisallowClickRef();
15830
15810
 
@@ -15837,7 +15817,6 @@ function useMouseDownHandlers(BodyRef) {
15837
15817
  activeSkinTone = _useActiveSkinToneSta[0];
15838
15818
 
15839
15819
  var onEmojiClick = useOnEmojiClickConfig();
15840
- var emojiStyle = useEmojiStyleConfig();
15841
15820
 
15842
15821
  var _useUpdateSuggested = useUpdateSuggested(),
15843
15822
  updateSuggested = _useUpdateSuggested[1];
@@ -15863,7 +15842,7 @@ function useMouseDownHandlers(BodyRef) {
15863
15842
  onEmojiClick(emojiClickOutput(emoji, skinToneToUse), event);
15864
15843
  }, [activeSkinTone, closeAllOpenToggles, disallowClickRef, onEmojiClick, updateSuggested]);
15865
15844
  var onMouseDown = React.useCallback(function onMouseDown(event) {
15866
- var _window, _window2;
15845
+ var _window;
15867
15846
 
15868
15847
  if (mouseDownTimerRef.current) {
15869
15848
  clearTimeout(mouseDownTimerRef.current);
@@ -15876,24 +15855,15 @@ function useMouseDownHandlers(BodyRef) {
15876
15855
  return;
15877
15856
  }
15878
15857
 
15879
- preloading.current = true;
15880
- (_window = window) == null ? void 0 : _window.setTimeout(function () {
15881
- if (preloading.current) {
15882
- preloadEmoji(emoji, emojiStyle);
15883
- preloading.current = false;
15884
- }
15885
- }, 50);
15886
- mouseDownTimerRef.current = (_window2 = window) == null ? void 0 : _window2.setTimeout(function () {
15858
+ mouseDownTimerRef.current = (_window = window) == null ? void 0 : _window.setTimeout(function () {
15887
15859
  disallowClickRef.current = true;
15888
15860
  mouseDownTimerRef.current = undefined;
15889
15861
  closeAllOpenToggles();
15890
15862
  setVariationPicker(event.target);
15891
15863
  setEmojiVariationPicker(emoji);
15892
15864
  }, 500);
15893
- }, [disallowClickRef, closeAllOpenToggles, setVariationPicker, emojiStyle, setEmojiVariationPicker]);
15865
+ }, [disallowClickRef, closeAllOpenToggles, setVariationPicker, setEmojiVariationPicker]);
15894
15866
  var onMouseUp = React.useCallback(function onMouseUp() {
15895
- preloading.current = false;
15896
-
15897
15867
  if (mouseDownTimerRef.current) {
15898
15868
  clearTimeout(mouseDownTimerRef.current);
15899
15869
  mouseDownTimerRef.current = undefined;
@@ -16231,6 +16201,10 @@ function useIsEmojiHidden() {
16231
16201
  };
16232
16202
  }
16233
16203
 
16204
+ function asEmoji(emoji) {
16205
+ return emoji;
16206
+ }
16207
+
16234
16208
  function ClickableEmoji(_ref) {
16235
16209
  var _clsx;
16236
16210
 
@@ -16271,13 +16245,14 @@ function ViewOnlyEmoji(_ref2) {
16271
16245
  style.width = style.height = style.fontSize = size + "px";
16272
16246
  }
16273
16247
 
16248
+ var emojiToRender = emoji ? emoji : emojiByUnified(unified);
16274
16249
  return React.createElement(React.Fragment, null, emojiStyle === exports.EmojiStyle.NATIVE ? React.createElement(NativeEmoji, {
16275
16250
  unified: unified,
16276
16251
  style: style
16277
16252
  }) : React.createElement(EmojiImg, {
16278
16253
  unified: unified,
16279
16254
  style: style,
16280
- emoji: emoji,
16255
+ emoji: asEmoji(emojiToRender),
16281
16256
  emojiStyle: emojiStyle,
16282
16257
  lazyLoad: lazyLoad
16283
16258
  }));
@@ -16287,7 +16262,7 @@ function NativeEmoji(_ref3) {
16287
16262
  var unified = _ref3.unified,
16288
16263
  style = _ref3.style;
16289
16264
  return React.createElement("span", {
16290
- className: "epr-emoji-native",
16265
+ className: clsx(ClassNames.external, 'epr-emoji-native'),
16291
16266
  "data-unified": unified,
16292
16267
  style: style
16293
16268
  }, parseNativeEmoji(unified));
@@ -16307,7 +16282,7 @@ function EmojiImg(_ref4) {
16307
16282
  return React.createElement("img", {
16308
16283
  src: emojiUrlByUnified(emojiStyle, unified),
16309
16284
  alt: emojiName(emoji),
16310
- className: "epr-emoji-img",
16285
+ className: clsx(ClassNames.external, 'epr-emoji-img'),
16311
16286
  loading: lazyLoad ? 'lazy' : 'eager',
16312
16287
  onError: onError,
16313
16288
  style: style
@@ -16447,10 +16422,6 @@ function RenderCategory(_ref) {
16447
16422
  }, emojis);
16448
16423
  }
16449
16424
 
16450
- function asEmoji(emoji) {
16451
- return emoji;
16452
- }
16453
-
16454
16425
  var Direction;
16455
16426
 
16456
16427
  (function (Direction) {
@@ -17372,6 +17343,69 @@ function hasModifier(event) {
17372
17343
  return metaKey || ctrlKey || altKey;
17373
17344
  }
17374
17345
 
17346
+ function preloadEmoji(emoji, emojiStyle) {
17347
+ if (!emoji) {
17348
+ return;
17349
+ }
17350
+
17351
+ if (emojiStyle === exports.EmojiStyle.NATIVE) {
17352
+ return;
17353
+ }
17354
+
17355
+ var unified = emojiUnified(emoji);
17356
+
17357
+ if (preloadedEmojs.has(unified)) {
17358
+ return;
17359
+ }
17360
+
17361
+ emojiVariations(emoji).forEach(function (variation) {
17362
+ var emojiUrl = emojiUrlByUnified(emojiStyle, variation);
17363
+ preloadImage(emojiUrl);
17364
+ });
17365
+ preloadedEmojs.add(unified);
17366
+ }
17367
+ var preloadedEmojs = /*#__PURE__*/new Set();
17368
+
17369
+ function preloadImage(url) {
17370
+ var image = new Image();
17371
+ image.src = url;
17372
+ }
17373
+
17374
+ function useOnFocus() {
17375
+ var BodyRef = useBodyRef();
17376
+ var emojiStyle = useEmojiStyleConfig();
17377
+ React.useEffect(function () {
17378
+ if (emojiStyle === exports.EmojiStyle.NATIVE) {
17379
+ return;
17380
+ }
17381
+
17382
+ var bodyRef = BodyRef.current;
17383
+ bodyRef == null ? void 0 : bodyRef.addEventListener('focusin', onFocus);
17384
+ return function () {
17385
+ bodyRef == null ? void 0 : bodyRef.removeEventListener('focusin', onFocus);
17386
+ };
17387
+
17388
+ function onFocus(event) {
17389
+ var button = buttonFromTarget(event.target);
17390
+
17391
+ if (!button) {
17392
+ return;
17393
+ }
17394
+
17395
+ var _emojiFromElement = emojiFromElement(button),
17396
+ emoji = _emojiFromElement[0];
17397
+
17398
+ if (!emoji) {
17399
+ return;
17400
+ }
17401
+
17402
+ if (emojiHasVariations(emoji)) {
17403
+ preloadEmoji(emoji, emojiStyle);
17404
+ }
17405
+ }
17406
+ }, [BodyRef, emojiStyle]);
17407
+ }
17408
+
17375
17409
  function PickerMain(_ref) {
17376
17410
  var children = _ref.children;
17377
17411
  return React.createElement(PickerContextProvider, null, React.createElement(PickerRootElement, null, children));
@@ -17385,6 +17419,7 @@ function PickerRootElement(_ref2) {
17385
17419
  var searchModeActive = useIsSearchMode();
17386
17420
  var PickerMainRef = usePickerMainRef();
17387
17421
  useKeyboardNavigation();
17422
+ useOnFocus();
17388
17423
  return React.createElement("aside", {
17389
17424
  className: clsx('EmojiPickerReact', 'epr-main', (_clsx = {}, _clsx[ClassNames.searchActive] = searchModeActive, _clsx['epr-dark-theme'] = theme === exports.Theme.DARK, _clsx)),
17390
17425
  ref: PickerMainRef
@@ -17436,5 +17471,6 @@ function EmojiPicker$1(props) {
17436
17471
  return React.createElement(ErrorBoundary, null, React.createElement(EmojiPicker, Object.assign({}, props)));
17437
17472
  }
17438
17473
 
17474
+ exports.Emoji = ViewOnlyEmoji;
17439
17475
  exports.default = EmojiPicker$1;
17440
17476
  //# sourceMappingURL=emoji-picker-react.cjs.development.js.map