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.
- package/dist/DomUtils/classNames.d.ts +2 -1
- package/dist/components/emoji/Emoji.d.ts +2 -1
- package/dist/emoji-picker-react.cjs.development.css +1 -1
- package/dist/emoji-picker-react.cjs.development.js +77 -41
- 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 +78 -43
- package/dist/emoji-picker-react.esm.js.map +1 -1
- package/dist/hooks/preloadEmoji.d.ts +1 -1
- package/dist/hooks/useOnFocus.d.ts +1 -0
- package/dist/index.d.ts +1 -0
- package/package.json +1 -1
- package/src/DomUtils/classNames.ts +2 -1
- package/src/components/emoji/Emoji.css +2 -2
- package/src/components/emoji/Emoji.tsx +13 -4
- package/src/components/main/PickerMain.tsx +2 -0
- package/src/hooks/preloadEmoji.ts +12 -1
- package/src/hooks/useMouseDownHandlers.ts +1 -19
- package/src/hooks/useOnFocus.ts +46 -0
- package/src/index.tsx +2 -0
|
@@ -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)}.
|
|
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
|
|
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
|
-
|
|
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,
|
|
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:
|
|
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:
|
|
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:
|
|
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
|