emoji-picker-react 4.0.0-rc.20 → 4.0.0-rc.21

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,5 +1,6 @@
1
1
  import { NullableElement } from './selectors';
2
2
  export declare function focusFirstVisibleEmoji(parent: NullableElement): void;
3
+ export declare function focusAndClickFirstVisibleEmoji(parent: NullableElement): void;
3
4
  export declare function focusLastVisibleEmoji(parent: NullableElement): void;
4
5
  export declare function focusNextVisibleEmoji(element: NullableElement): void;
5
6
  export declare function focusPrevVisibleEmoji(element: NullableElement): void;
@@ -1,5 +1,5 @@
1
1
  .EmojiPickerReact button.epr-emoji{border-radius:8px;padding:var(--epr-emoji-padding);position:relative}.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:0;content:"";display:block;height:0;position:absolute;right:-2px;transform:rotate(135deg);width:0;z-index:var(--epr-emoji-variations-indictator-z-index)}.EmojiPickerReact button.epr-emoji>*{display:block;height:var(--epr-emoji-size);width:var(--epr-emoji-size)}.EmojiPickerReact button.epr-emoji.epr-emoji-has-variations:hover:after{border-bottom:4px solid var(--epr-emoji-variation-indicator-color-hover)}.EmojiPickerReact button.epr-emoji>.epr-emoji-img{font-size:0}.EmojiPickerReact button.epr-emoji>.epr-emoji-native{font-family:Noto Color Emoji,Apple Color Emoji,Segoe UI Emoji,Times,Symbola,Aegyptus,Code2000,Code2001,Code2002,Musica,serif,LastResort;font-size:var(--epr-emoji-size);line-height:100%}.EmojiPickerReact button.epr-emoji:hover{background-color:var(--epr-emoji-hover-color)}.EmojiPickerReact button.epr-emoji:focus-visible{background-color:var(--epr-focus-bg-color)}
2
- .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)}.EmojiPickerReact.epr-search-active li.epr-emoji-category>.epr-emoji-category-label{opacity:.4;position:relative}.EmojiPickerReact li.epr-emoji-category{display:flex;flex-direction:row;flex-wrap:wrap;justify-content:space-around;padding:var(--epr-category-padding);position:relative}.EmojiPickerReact li.epr-emoji-category:after{content:"";display:inline-block;flex:1}.EmojiPickerReact li.epr-emoji-category:not(:has(.epr-visible)){display:none}
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;padding: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)}.EmojiPickerReact.epr-search-active li.epr-emoji-category>.epr-emoji-category-label{opacity:.4;position:relative}
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:5px;opacity:0;padding:5px;pointer-events:none;position:absolute;right:5px;top:0;top:-100%;visibility:hidden;z-index:var(--epr-skin-variation-picker-z-index)}.EmojiPickerReact .epr-emoji-variation-picker.visible{opacity:1;pointer-events:all;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(-7px)}.EmojiPickerReact .epr-emoji-variation-picker .epr-emoji-pointer.pointing-up{top:0;transform:rotate(180deg) translateY(100%) translateX(7px)}
5
5
  .EmojiPickerReact .epr-body{flex:1;overflow-x:hidden;overflow-y:scroll;position:relative}
@@ -10,4 +10,4 @@
10
10
  .EmojiPickerReact .epr-skin-tones{--epr-skin-tone-size:16px;align-items:center;display:flex;flex-basis:30px;justify-content:flex-end;transition:all .3s ease-in-out}.EmojiPickerReact .epr-skin-tones.open{flex-basis:170px}.EmojiPickerReact .epr-skin-tone-select{height:var(--epr-skin-tone-size);position:relative;width:var(--epr-skin-tone-size)}.EmojiPickerReact .epr-skin-tones.open .epr-tone{transition:transform .3s ease-in-out,opacity .3s ease-in-out}.EmojiPickerReact .epr-skin-tones:not(.open) .epr-tone{opacity:0;z-index:0}.EmojiPickerReact .epr-skin-tones .epr-tone{border-radius:4px;box-shadow:0 0 0 0 var(--epr-active-skin-hover-color);cursor:pointer;display:block;height:var(--epr-skin-tone-size);position:absolute;right:0;transition:transform .3s ease-in-out,opacity .5s ease-in-out;width:var(--epr-skin-tone-size);z-index:1}.EmojiPickerReact .epr-skin-tones .epr-tone:hover{box-shadow:0 0 0 5px var(--epr-active-skin-hover-color)}.EmojiPickerReact .epr-skin-tones .epr-tone:focus-visible{box-shadow:0 0 0 5px var(--epr-focus-bg-color)}.EmojiPickerReact .epr-skin-tones.open .epr-skin-tone-select .epr-tone.epr-active:after{border:1px solid var(--epr-active-skin-tone-indicator-border-color);border-radius:5px;bottom:-2px;content:"";left:-2px;position:absolute;right:-2px;top:-2px}.EmojiPickerReact .epr-skin-tones .epr-tone.epr-active{opacity:1;z-index:1}.EmojiPickerReact .epr-skin-tones .epr-tone.epr-tone-neutral{background-color:#ffd225}.EmojiPickerReact .epr-skin-tones .epr-tone.epr-tone-1f3fb{background-color:#ffdfbd}.EmojiPickerReact .epr-skin-tones .epr-tone.epr-tone-1f3fc{background-color:#e9c197}.EmojiPickerReact .epr-skin-tones .epr-tone.epr-tone-1f3fd{background-color:#c88e62}.EmojiPickerReact .epr-skin-tones .epr-tone.epr-tone-1f3fe{background-color:#a86637}.EmojiPickerReact .epr-skin-tones .epr-tone.epr-tone-1f3ff{background-color:#60463a}
11
11
  .EmojiPickerReact .epr-header .epr-header-overlay{padding:var(--epr-header-padding);z-index:var(--epr-header-overlay-z-index)}
12
12
  aside.EmojiPickerReact.epr-main{border-color:var(--epr-picker-border-color);border-radius:var(--epr-picker-border-radius);border-style:solid;border-width:1px;display:flex;flex-direction:column;height:var(--epr-picker-height);position:relative;width:var(--epr-picker-width)}
13
- .EmojiPickerReact{--epr-highlight-color:#007aeb;--epr-hover-bg-color:#f1f8ff;--epr-focus-bg-color:#e0f0ff;--epr-text-color:#858585;--epr-search-input-bg-color:#f6f6f6;--epr-picker-border-color:#e7e7e7;--epr-bg-color:#fff;--epr-category-icon-active-color:#6aa8de;--epr-horizontal-padding:10px;--epr-picker-width:350px;--epr-picker-height:450px;--epr-picker-border-radius:8px;--epr-search-border-color:var(--epr-highlight-color);--epr-header-padding:15px var(--epr-horizontal-padding);--epr-active-skin-tone-indicator-border-color:var(--epr-highlight-color);--epr-active-skin-hover-color:var(--epr-hover-bg-color);--epr-search-input-bg-color-active:var(--epr-search-input-bg-color);--epr-search-input-padding:0 30px;--epr-search-input-border-radius:8px;--epr-search-input-height:40px;--epr-search-input-text-color:var(--epr-text-color);--epr-search-input-placeholder-color:var(--epr-text-color);--epr-search-bar-inner-padding:var(--epr-horizontal-padding);--epr-category-navigation-button-size:30px;--epr-emoji-variation-picker-height:55px;--epr-emoji-variation-picker-bg-color:var(--epr-bg-color);--epr-preview-height:70px;--epr-preview-text-size:14px;--epr-preview-text-padding:0 var(--epr-horizontal-padding);--epr-preview-border-color:var(--epr-picker-border-color);--epr-preview-text-color:var(--epr-text-color);--epr-category-padding:0 var(--epr-horizontal-padding);--epr-category-label-bg-color:#ffffffe6;--epr-category-label-text-color:var(--epr-text-color);--epr-category-label-padding:0 var(--epr-horizontal-padding);--epr-category-label-height:40px;--epr-emoji-size:30px;--epr-emoji-padding:5px;--epr-emoji-hover-color:var(--epr-hover-bg-color);--epr-emoji-variation-indicator-color:var(--epr-picker-border-color);--epr-emoji-variation-indicator-color-hover:var(--epr-text-color);--epr-header-overlay-z-index:3;--epr-emoji-variations-indictator-z-index:1;--epr-category-label-z-index:2;--epr-skin-variation-picker-z-index:5}.EmojiPickerReact.epr-dark-theme{--epr-dark:#000;--epr-emoji-variation-picker-bg-color:var(--epr-dark);--epr-highlight-color:silver;--epr-text-color:var(--epr-highlight-color);--epr-hover-bg-color:#363636f6;--epr-focus-bg-color:#474747;--epr-search-input-bg-color:#333;--epr-category-label-bg-color:#222222e6;--epr-picker-border-color:#151617;--epr-bg-color:#222;--epr-search-input-bg-color-active:var(--epr-dark);--epr-emoji-variation-indicator-color:#444;--epr-category-icon-active-color:#3271b7}.EmojiPickerReact{background-color:var(--epr-bg-color);overflow:hidden}.EmojiPickerReact .epr-hidden,.EmojiPickerReact.epr-search-active .epr-hidden-on-search{display:none!important;opacity:0!important;pointer-events:none!important;visibility:hidden!important}.EmojiPickerReact *{box-sizing:border-box;font-family:sans-serif}.EmojiPickerReact button{background:none;border:0;cursor:pointer;outline:none}
13
+ .EmojiPickerReact{--epr-highlight-color:#007aeb;--epr-hover-bg-color:#f1f8ff;--epr-focus-bg-color:#e0f0ff;--epr-text-color:#858585;--epr-search-input-bg-color:#f6f6f6;--epr-picker-border-color:#e7e7e7;--epr-bg-color:#fff;--epr-category-icon-active-color:#6aa8de;--epr-horizontal-padding:10px;--epr-picker-width:350px;--epr-picker-height:450px;--epr-picker-border-radius:8px;--epr-search-border-color:var(--epr-highlight-color);--epr-header-padding:15px var(--epr-horizontal-padding);--epr-active-skin-tone-indicator-border-color:var(--epr-highlight-color);--epr-active-skin-hover-color:var(--epr-hover-bg-color);--epr-search-input-bg-color-active:var(--epr-search-input-bg-color);--epr-search-input-padding:0 30px;--epr-search-input-border-radius:8px;--epr-search-input-height:40px;--epr-search-input-text-color:var(--epr-text-color);--epr-search-input-placeholder-color:var(--epr-text-color);--epr-search-bar-inner-padding:var(--epr-horizontal-padding);--epr-category-navigation-button-size:30px;--epr-emoji-variation-picker-height:55px;--epr-emoji-variation-picker-bg-color:var(--epr-bg-color);--epr-preview-height:70px;--epr-preview-text-size:14px;--epr-preview-text-padding:0 var(--epr-horizontal-padding);--epr-preview-border-color:var(--epr-picker-border-color);--epr-preview-text-color:var(--epr-text-color);--epr-category-padding:0 var(--epr-horizontal-padding);--epr-category-label-bg-color:#ffffffe6;--epr-category-label-text-color:var(--epr-text-color);--epr-category-label-padding:0 var(--epr-horizontal-padding);--epr-category-label-height:40px;--epr-emoji-size:30px;--epr-emoji-padding:5px;--epr-emoji-fullsize:calc(var(--epr-emoji-size) + var(--epr-emoji-padding)*2);--epr-emoji-hover-color:var(--epr-hover-bg-color);--epr-emoji-variation-indicator-color:var(--epr-picker-border-color);--epr-emoji-variation-indicator-color-hover:var(--epr-text-color);--epr-header-overlay-z-index:3;--epr-emoji-variations-indictator-z-index:1;--epr-category-label-z-index:2;--epr-skin-variation-picker-z-index:5}.EmojiPickerReact.epr-dark-theme{--epr-dark:#000;--epr-emoji-variation-picker-bg-color:var(--epr-dark);--epr-highlight-color:silver;--epr-text-color:var(--epr-highlight-color);--epr-hover-bg-color:#363636f6;--epr-focus-bg-color:#474747;--epr-search-input-bg-color:#333;--epr-category-label-bg-color:#222222e6;--epr-picker-border-color:#151617;--epr-bg-color:#222;--epr-search-input-bg-color-active:var(--epr-dark);--epr-emoji-variation-indicator-color:#444;--epr-category-icon-active-color:#3271b7}.EmojiPickerReact{background-color:var(--epr-bg-color);overflow:hidden}.EmojiPickerReact .epr-hidden,.EmojiPickerReact.epr-search-active .epr-hidden-on-search{display:none!important;opacity:0!important;pointer-events:none!important;visibility:hidden!important}.EmojiPickerReact *{box-sizing:border-box;font-family:sans-serif}.EmojiPickerReact button{background:none;border:0;cursor:pointer;outline:none}
@@ -15289,9 +15289,99 @@ function useActiveCategoryScrollDetection(bodyRef) {
15289
15289
  }, [bodyRef, setActiveCategory]);
15290
15290
  }
15291
15291
 
15292
- function lastElementChild(element) {
15293
- if (!element) return null;
15294
- return element.lastElementChild;
15292
+ function elementCountInRow(parent, element) {
15293
+ if (!parent || !element) {
15294
+ return 0;
15295
+ }
15296
+
15297
+ var parentWidth = parent.getBoundingClientRect().width;
15298
+ var elementWidth = element.getBoundingClientRect().width;
15299
+ return Math.floor(parentWidth / elementWidth);
15300
+ }
15301
+ function elementIndexInRow(parent, element) {
15302
+ if (!parent || !element) {
15303
+ return 0;
15304
+ }
15305
+
15306
+ var elementWidth = element.getBoundingClientRect().width;
15307
+ var elementLeft = element.getBoundingClientRect().left;
15308
+ var parentLeft = parent.getBoundingClientRect().left;
15309
+ return Math.floor((elementLeft - parentLeft) / elementWidth);
15310
+ }
15311
+ function rowNumber(parent, element) {
15312
+ if (!parent || !element) {
15313
+ return 0;
15314
+ }
15315
+
15316
+ var elementHeight = element.getBoundingClientRect().height;
15317
+ var elementTop = element.getBoundingClientRect().top;
15318
+ var parentTop = parent.getBoundingClientRect().top;
15319
+ return Math.floor((elementTop - parentTop) / elementHeight) - 1;
15320
+ }
15321
+ function hasNextRow(parent, element) {
15322
+ if (!parent || !element) {
15323
+ return false;
15324
+ }
15325
+
15326
+ var elementHeight = element.getBoundingClientRect().height;
15327
+ var elementTop = element.getBoundingClientRect().top;
15328
+ var parentTop = parent.getBoundingClientRect().top;
15329
+ var parentHeight = parent.getBoundingClientRect().height;
15330
+ return elementTop - parentTop + elementHeight < parentHeight;
15331
+ }
15332
+
15333
+ function getRowElements(elements, row, elementsInRow) {
15334
+ if (row === -1) {
15335
+ var lastRow = Math.floor(elements.length / elementsInRow);
15336
+ var firstElementIndex = lastRow * elementsInRow;
15337
+ var lastElementIndex = elements.length - 1;
15338
+ return elements.slice(firstElementIndex, lastElementIndex + 1);
15339
+ }
15340
+
15341
+ return elements.slice(row * elementsInRow, (row + 1) * elementsInRow);
15342
+ }
15343
+
15344
+ function getNextRowElements(allElements, currentRow, elementsInRow) {
15345
+ var nextRow = currentRow + 1;
15346
+
15347
+ if (nextRow * elementsInRow > allElements.length) {
15348
+ return [];
15349
+ }
15350
+
15351
+ return getRowElements(allElements, nextRow, elementsInRow);
15352
+ }
15353
+
15354
+ function getElementInRow(elements, row, elementsInRow, indexInRow) {
15355
+ var rowElements = getRowElements(elements, row, elementsInRow); // get element, default to last
15356
+
15357
+ return rowElements[indexInRow] || rowElements[rowElements.length - 1] || null;
15358
+ }
15359
+ function getElementInNextRow(allElements, currentRow, elementsInRow, index) {
15360
+ var nextRowElements = getNextRowElements(allElements, currentRow, elementsInRow); // return item in index, or last item in row
15361
+
15362
+ return nextRowElements[index] || nextRowElements[nextRowElements.length - 1] || null;
15363
+ }
15364
+ function getElementInPrevRow(allElements, currentRow, elementsInRow, index) {
15365
+ var prevRowElements = getRowElements(allElements, currentRow - 1, elementsInRow); // default to last
15366
+
15367
+ return prevRowElements[index] || prevRowElements[prevRowElements.length - 1] || null;
15368
+ }
15369
+ function firstVisibleElementInContainer(parent, elements) {
15370
+ if (!parent || !elements.length) {
15371
+ return null;
15372
+ }
15373
+
15374
+ var parentTop = parent.getBoundingClientRect().top;
15375
+ var parentBottom = parent.getBoundingClientRect().bottom;
15376
+ var visibleElements = elements.find(function (element) {
15377
+ var elementTop = element.getBoundingClientRect().top;
15378
+ var elementBottom = element.getBoundingClientRect().bottom;
15379
+ return elementTop >= parentTop && elementTop <= parentBottom || elementBottom >= parentTop && elementBottom <= parentBottom;
15380
+ });
15381
+ return visibleElements || null;
15382
+ }
15383
+ function hasNextElementSibling(element) {
15384
+ return !!element.nextElementSibling;
15295
15385
  }
15296
15386
 
15297
15387
  var EmojiButtonSelector = "button" + /*#__PURE__*/asSelectors(ClassNames.emoji);
@@ -15393,7 +15483,10 @@ function allVisibleEmojis(parent) {
15393
15483
  }
15394
15484
  function lastVisibleEmoji(element) {
15395
15485
  if (!element) return null;
15396
- var last = lastElementChild(element);
15486
+ var allEmojis = allVisibleEmojis(element);
15487
+
15488
+ var _allEmojis$slice = allEmojis.slice(-1),
15489
+ last = _allEmojis$slice[0];
15397
15490
 
15398
15491
  if (!last) {
15399
15492
  return null;
@@ -15436,8 +15529,8 @@ function firstVisibleEmoji(parent) {
15436
15529
  return null;
15437
15530
  }
15438
15531
 
15439
- var emoji = parent.querySelector(VisibleEmojiSelector);
15440
- return emoji;
15532
+ var allEmojis = allVisibleEmojis(parent);
15533
+ return firstVisibleElementInContainer(parent, allEmojis);
15441
15534
  }
15442
15535
  function prevCategory(element) {
15443
15536
  var category = closestCategory(element);
@@ -15801,14 +15894,29 @@ function useClearSearch() {
15801
15894
  setSearchTerm('');
15802
15895
  };
15803
15896
  }
15897
+ function useAppendSearch() {
15898
+ var SearchInputRef = useSearchInputRef();
15899
+
15900
+ var _useSearchTermState2 = useSearchTermState(),
15901
+ setSearchTerm = _useSearchTermState2[1];
15902
+
15903
+ return function appendSearch(str) {
15904
+ if (SearchInputRef.current) {
15905
+ SearchInputRef.current.value = SearchInputRef.current.value + str;
15906
+ setSearchTerm(SearchInputRef.current.value);
15907
+ }
15908
+
15909
+ setSearchTerm(str);
15910
+ };
15911
+ }
15804
15912
  function useFilter() {
15805
15913
  var SearchInputRef = useSearchInputRef();
15806
15914
  var filterRef = useFilterRef();
15807
15915
  var setFilterRef = useSetFilterRef();
15808
15916
 
15809
- var _useSearchTermState2 = useSearchTermState(),
15810
- searchTerm = _useSearchTermState2[0],
15811
- setSearchTerm = _useSearchTermState2[1];
15917
+ var _useSearchTermState3 = useSearchTermState(),
15918
+ searchTerm = _useSearchTermState3[0],
15919
+ setSearchTerm = _useSearchTermState3[1];
15812
15920
 
15813
15921
  var PickerMainRef = usePickerMainRef();
15814
15922
  return {
@@ -15891,8 +15999,8 @@ function useIsEmojiFiltered() {
15891
15999
  var _useFilterRef = useFilterRef(),
15892
16000
  filter = _useFilterRef.current;
15893
16001
 
15894
- var _useSearchTermState3 = useSearchTermState(),
15895
- searchTerm = _useSearchTermState3[0];
16002
+ var _useSearchTermState4 = useSearchTermState(),
16003
+ searchTerm = _useSearchTermState4[0];
15896
16004
 
15897
16005
  return function (unified) {
15898
16006
  return isEmojiFilteredBySearchTerm(unified, filter, searchTerm);
@@ -16028,7 +16136,9 @@ function EmojiCategory(_ref) {
16028
16136
  "data-name": category
16029
16137
  }, React.createElement("div", {
16030
16138
  className: "epr-emoji-category-label"
16031
- }, categoryName), children);
16139
+ }, categoryName), React.createElement("div", {
16140
+ className: "epr-emoji-category-content"
16141
+ }, children));
16032
16142
  }
16033
16143
 
16034
16144
  function Suggested(_ref) {
@@ -16308,6 +16418,9 @@ function useEmojiPreviewEvents(allow, setPreviewEmoji) {
16308
16418
  }
16309
16419
 
16310
16420
  var bodyRef = BodyRef.current;
16421
+ bodyRef == null ? void 0 : bodyRef.addEventListener('keydown', onEscape, {
16422
+ passive: true
16423
+ });
16311
16424
  bodyRef == null ? void 0 : bodyRef.addEventListener('mouseover', onMouseOver, {
16312
16425
  passive: true
16313
16426
  });
@@ -16337,15 +16450,30 @@ function useEmojiPreviewEvents(allow, setPreviewEmoji) {
16337
16450
  });
16338
16451
  }
16339
16452
 
16340
- function onLeave() {
16453
+ function onLeave(e) {
16454
+ if (e) {
16455
+ var button = buttonFromTarget(e.target);
16456
+
16457
+ if (button) {
16458
+ return;
16459
+ }
16460
+ }
16461
+
16341
16462
  setPreviewEmoji(null);
16342
16463
  }
16343
16464
 
16465
+ function onEscape(e) {
16466
+ if (e.key === 'Escape') {
16467
+ setPreviewEmoji(null);
16468
+ }
16469
+ }
16470
+
16344
16471
  return function () {
16345
16472
  bodyRef == null ? void 0 : bodyRef.removeEventListener('mouseover', onMouseOver);
16346
16473
  bodyRef == null ? void 0 : bodyRef.removeEventListener('mouseout', onLeave);
16347
16474
  bodyRef == null ? void 0 : bodyRef.removeEventListener('focus', onEnter, true);
16348
16475
  bodyRef == null ? void 0 : bodyRef.removeEventListener('blur', onLeave, true);
16476
+ bodyRef == null ? void 0 : bodyRef.removeEventListener('keydown', onEscape);
16349
16477
  };
16350
16478
  }, [BodyRef, allow, setPreviewEmoji]);
16351
16479
 
@@ -16558,108 +16686,17 @@ function useIsSearchMode() {
16558
16686
  return !!searchTerm;
16559
16687
  }
16560
16688
 
16561
- function elementCountInRow(parent, element) {
16562
- if (!parent || !element) {
16563
- return 0;
16564
- }
16565
-
16566
- var parentWidth = parent.getBoundingClientRect().width;
16567
- var elementWidth = element.getBoundingClientRect().width;
16568
- return Math.floor(parentWidth / elementWidth);
16569
- }
16570
- function elementIndexInRow(parent, element) {
16571
- if (!parent || !element) {
16572
- return 0;
16573
- }
16574
-
16575
- var elementWidth = element.getBoundingClientRect().width;
16576
- var elementLeft = element.getBoundingClientRect().left;
16577
- var parentLeft = parent.getBoundingClientRect().left;
16578
- return Math.floor((elementLeft - parentLeft) / elementWidth);
16579
- }
16580
- function rowNumber(parent, element) {
16581
- if (!parent || !element) {
16582
- return 0;
16583
- }
16584
-
16585
- var elementHeight = element.getBoundingClientRect().height;
16586
- var elementTop = element.getBoundingClientRect().top;
16587
- var parentTop = parent.getBoundingClientRect().top;
16588
- return Math.floor((elementTop - parentTop) / elementHeight) - 1;
16589
- }
16590
- function hasNextRow(parent, element) {
16591
- if (!parent || !element) {
16592
- return false;
16593
- }
16594
-
16595
- var elementHeight = element.getBoundingClientRect().height;
16596
- var elementTop = element.getBoundingClientRect().top;
16597
- var parentTop = parent.getBoundingClientRect().top;
16598
- var parentHeight = parent.getBoundingClientRect().height;
16599
- return elementTop - parentTop + elementHeight < parentHeight;
16600
- }
16601
-
16602
- function getRowElements(elements, row, elementsInRow) {
16603
- if (row === -1) {
16604
- var lastRow = Math.floor(elements.length / elementsInRow);
16605
- var firstElementIndex = lastRow * elementsInRow;
16606
- var lastElementIndex = elements.length - 1;
16607
- return elements.slice(firstElementIndex, lastElementIndex + 1);
16608
- }
16609
-
16610
- return elements.slice(row * elementsInRow, (row + 1) * elementsInRow);
16611
- }
16612
-
16613
- function getNextRowElements(allElements, currentRow, elementsInRow) {
16614
- var nextRow = currentRow + 1;
16615
-
16616
- if (nextRow * elementsInRow > allElements.length) {
16617
- return [];
16618
- }
16619
-
16620
- return getRowElements(allElements, nextRow, elementsInRow);
16621
- }
16622
-
16623
- function getElementInRow(elements, row, elementsInRow, indexInRow) {
16624
- var rowElements = getRowElements(elements, row, elementsInRow); // get element, default to last
16625
-
16626
- return rowElements[indexInRow] || rowElements[rowElements.length - 1] || null;
16627
- }
16628
- function getElementInNextRow(allElements, currentRow, elementsInRow, index) {
16629
- var nextRowElements = getNextRowElements(allElements, currentRow, elementsInRow); // return item in index, or last item in row
16630
-
16631
- return nextRowElements[index] || nextRowElements[nextRowElements.length - 1] || null;
16632
- }
16633
- function getElementInPrevRow(allElements, currentRow, elementsInRow, index) {
16634
- var prevRowElements = getRowElements(allElements, currentRow - 1, elementsInRow); // default to last
16635
-
16636
- return prevRowElements[index] || prevRowElements[prevRowElements.length - 1] || null;
16637
- }
16638
- function firstVisibleElementInContainer(parent, elements) {
16639
- if (!parent || !elements.length) {
16640
- return null;
16641
- }
16642
-
16643
- var parentTop = parent.getBoundingClientRect().top;
16644
- var parentBottom = parent.getBoundingClientRect().bottom;
16645
- var visibleElements = elements.find(function (element) {
16646
- var elementTop = element.getBoundingClientRect().top;
16647
- var elementBottom = element.getBoundingClientRect().bottom;
16648
- return elementTop >= parentTop && elementTop <= parentBottom || elementBottom >= parentTop && elementBottom <= parentBottom;
16649
- });
16650
- return visibleElements || null;
16651
- }
16652
- function hasNextElementSibling(element) {
16653
- return !!element.nextElementSibling;
16654
- }
16655
-
16656
16689
  function getActiveElement() {
16657
16690
  return document.activeElement;
16658
16691
  }
16659
16692
 
16660
16693
  function focusFirstVisibleEmoji(parent) {
16661
- var allEmojis = allVisibleEmojis(parent);
16662
- focusElement(firstVisibleElementInContainer(parent, allEmojis));
16694
+ focusElement(firstVisibleEmoji(parent));
16695
+ }
16696
+ function focusAndClickFirstVisibleEmoji(parent) {
16697
+ var firstEmoji = firstVisibleEmoji(parent);
16698
+ focusElement(firstEmoji);
16699
+ firstEmoji == null ? void 0 : firstEmoji.click();
16663
16700
  }
16664
16701
  function focusLastVisibleEmoji(parent) {
16665
16702
  focusElement(lastVisibleEmoji(parent));
@@ -16795,6 +16832,7 @@ var KeyboardEvents;
16795
16832
  KeyboardEvents["ArrowLeft"] = "ArrowLeft";
16796
16833
  KeyboardEvents["ArrowRight"] = "ArrowRight";
16797
16834
  KeyboardEvents["Escape"] = "Escape";
16835
+ KeyboardEvents["Enter"] = "Enter";
16798
16836
  })(KeyboardEvents || (KeyboardEvents = {}));
16799
16837
 
16800
16838
  function useKeyboardNavigation() {
@@ -16816,7 +16854,7 @@ function usePickerMainKeyboardEvents() {
16816
16854
  return function onKeyDown(event) {
16817
16855
  var key = event.key;
16818
16856
 
16819
- if (key === 'Escape') {
16857
+ if (key === KeyboardEvents.Escape) {
16820
16858
  event.preventDefault();
16821
16859
  clearSearch();
16822
16860
  closeAllOpenToggles();
@@ -16842,6 +16880,7 @@ function usePickerMainKeyboardEvents() {
16842
16880
  function useSearchInputKeyboardEvents() {
16843
16881
  var focusSkinTonePicker = useFocusSkinTonePicker();
16844
16882
  var PickerMainRef = usePickerMainRef();
16883
+ var BodyRef = useBodyRef();
16845
16884
  var SearchInputRef = useSearchInputRef();
16846
16885
 
16847
16886
  var _useSkinToneFanOpenSt = useSkinToneFanOpenState(),
@@ -16863,9 +16902,14 @@ function useSearchInputKeyboardEvents() {
16863
16902
  event.preventDefault();
16864
16903
  goDownFromSearchInput();
16865
16904
  break;
16905
+
16906
+ case KeyboardEvents.Enter:
16907
+ event.preventDefault();
16908
+ focusAndClickFirstVisibleEmoji(BodyRef.current);
16909
+ break;
16866
16910
  }
16867
16911
  };
16868
- }, [focusSkinTonePicker, goDownFromSearchInput, setSkinToneFanOpenState]);
16912
+ }, [focusSkinTonePicker, goDownFromSearchInput, setSkinToneFanOpenState, BodyRef]);
16869
16913
  React.useEffect(function () {
16870
16914
  var current = SearchInputRef.current;
16871
16915
 
@@ -16890,6 +16934,7 @@ function useSkinTonePickerKeyboardEvents() {
16890
16934
  isOpen = _useSkinToneFanOpenSt2[0],
16891
16935
  setIsOpen = _useSkinToneFanOpenSt2[1];
16892
16936
 
16937
+ var onType = useOnType();
16893
16938
  var onKeyDown = React.useMemo(function () {
16894
16939
  return function onKeyDown(event) {
16895
16940
  var key = event.key;
@@ -16924,9 +16969,13 @@ function useSkinTonePickerKeyboardEvents() {
16924
16969
 
16925
16970
  goDownFromSearchInput();
16926
16971
  break;
16972
+
16973
+ default:
16974
+ onType(event);
16975
+ break;
16927
16976
  }
16928
16977
  };
16929
- }, [isOpen, focusSearchInput, setIsOpen, goDownFromSearchInput]);
16978
+ }, [isOpen, focusSearchInput, setIsOpen, goDownFromSearchInput, onType]);
16930
16979
  React.useEffect(function () {
16931
16980
  var current = SkinTonePickerRef.current;
16932
16981
 
@@ -16945,6 +16994,7 @@ function useCategoryNavigationKeyboardEvents() {
16945
16994
  var focusSearchInput = useFocusSearchInput();
16946
16995
  var CategoryNavigationRef = useCategoryNavigationRef();
16947
16996
  var BodyRef = useBodyRef();
16997
+ var onType = useOnType();
16948
16998
  var onKeyDown = React.useMemo(function () {
16949
16999
  return function onKeyDown(event) {
16950
17000
  var key = event.key;
@@ -16969,9 +17019,13 @@ function useCategoryNavigationKeyboardEvents() {
16969
17019
  event.preventDefault();
16970
17020
  focusFirstVisibleEmoji(BodyRef.current);
16971
17021
  break;
17022
+
17023
+ default:
17024
+ onType(event);
17025
+ break;
16972
17026
  }
16973
17027
  };
16974
- }, [BodyRef, focusSearchInput]);
17028
+ }, [BodyRef, focusSearchInput, onType]);
16975
17029
  React.useEffect(function () {
16976
17030
  var current = CategoryNavigationRef.current;
16977
17031
 
@@ -16989,6 +17043,7 @@ function useCategoryNavigationKeyboardEvents() {
16989
17043
  function useBodyKeyboardEvents() {
16990
17044
  var BodyRef = useBodyRef();
16991
17045
  var goUpFromBody = useGoUpFromBody();
17046
+ var onType = useOnType();
16992
17047
  var onKeyDown = React.useMemo(function () {
16993
17048
  return function onKeyDown(event) {
16994
17049
  var key = event.key;
@@ -17014,9 +17069,13 @@ function useBodyKeyboardEvents() {
17014
17069
  event.preventDefault();
17015
17070
  focusVisibleEmojiOneRowUp(activeElement, goUpFromBody);
17016
17071
  break;
17072
+
17073
+ default:
17074
+ onType(event);
17075
+ break;
17017
17076
  }
17018
17077
  };
17019
- }, [goUpFromBody]);
17078
+ }, [goUpFromBody, onType]);
17020
17079
  React.useEffect(function () {
17021
17080
  var current = BodyRef.current;
17022
17081
 
@@ -17081,6 +17140,33 @@ function focusPrevSkinTone() {
17081
17140
  focusPrevElementSibling(currentSkinTone);
17082
17141
  }
17083
17142
 
17143
+ function useOnType() {
17144
+ var appendSearch = useAppendSearch();
17145
+ var focusSearchInput = useFocusSearchInput();
17146
+ var closeAllOpenToggles = useCloseAllOpenToggles();
17147
+ return function onType(event) {
17148
+ var key = event.key;
17149
+
17150
+ if (hasModifier(event)) {
17151
+ return;
17152
+ }
17153
+
17154
+ if (key.match(/(^[a-zA-Z0-9]$){1}/)) {
17155
+ event.preventDefault();
17156
+ closeAllOpenToggles();
17157
+ focusSearchInput();
17158
+ appendSearch(key);
17159
+ }
17160
+ };
17161
+ }
17162
+
17163
+ function hasModifier(event) {
17164
+ var metaKey = event.metaKey,
17165
+ ctrlKey = event.ctrlKey,
17166
+ altKey = event.altKey;
17167
+ return metaKey || ctrlKey || altKey;
17168
+ }
17169
+
17084
17170
  function PickerMain(_ref) {
17085
17171
  var children = _ref.children;
17086
17172
  return React.createElement(PickerContextProvider, null, React.createElement(PickerRootElement, null, children));