emoji-picker-react 4.22.3 → 5.0.1
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/README.md +331 -49
- package/dist/DomUtils/categoryNameFromDom.d.ts +1 -1
- package/dist/DomUtils/classNames.d.ts +23 -23
- package/dist/DomUtils/detectEmojyPartiallyBelowFold.d.ts +2 -2
- package/dist/DomUtils/elementPositionInRow.d.ts +5 -5
- package/dist/DomUtils/eventBelongsToPicker.d.ts +2 -0
- package/dist/DomUtils/focusElement.d.ts +5 -5
- package/dist/DomUtils/getActiveElement.d.ts +2 -2
- package/dist/DomUtils/isJsdom.d.ts +1 -0
- package/dist/DomUtils/isRtl.d.ts +1 -0
- package/dist/DomUtils/keyboardNavigation.d.ts +15 -8
- package/dist/DomUtils/scrollTo.d.ts +4 -5
- package/dist/DomUtils/selectors.d.ts +31 -35
- package/dist/EmojiPickerReact.d.ts +5 -5
- package/dist/Stylesheet/DedupedStyle.d.ts +13 -0
- package/dist/Stylesheet/stylesheet.d.ts +40 -37
- package/dist/components/ErrorBoundary.d.ts +15 -15
- package/dist/components/Layout/Absolute.d.ts +8 -8
- package/dist/components/Layout/Flex.d.ts +13 -13
- package/dist/components/Layout/Relative.d.ts +8 -8
- package/dist/components/Layout/Space.d.ts +7 -7
- package/dist/components/Reactions/BtnPlus.d.ts +2 -2
- package/dist/components/Reactions/DEFAULT_REACTIONS.d.ts +1 -1
- package/dist/components/Reactions/Reactions.d.ts +3 -2
- package/dist/components/atoms/Button.d.ts +11 -6
- package/dist/components/body/EmojiCategory.d.ts +13 -12
- package/dist/components/body/EmojiList.d.ts +7 -4
- package/dist/components/body/EmojiVariationPicker.d.ts +2 -2
- package/dist/components/body/MeasureEmoji.d.ts +2 -2
- package/dist/components/body/listComponents.d.ts +47 -0
- package/dist/components/context/ElementRefContext.d.ts +18 -16
- package/dist/components/context/PickerConfigContext.d.ts +14 -9
- package/dist/components/context/PickerContext.d.ts +57 -25
- package/dist/components/context/PickerDataContext.d.ts +23 -17
- package/dist/components/emoji/BaseEmojiProps.d.ts +14 -13
- package/dist/components/emoji/ClickableEmojiButton.d.ts +23 -15
- package/dist/components/emoji/Emoji.d.ts +18 -15
- package/dist/components/emoji/EmojiImg.d.ts +11 -11
- package/dist/components/emoji/ExportedEmoji.d.ts +11 -11
- package/dist/components/emoji/NativeEmoji.d.ts +6 -6
- package/dist/components/emoji/ViewOnlyEmoji.d.ts +3 -3
- package/dist/components/emoji/emojiStyles.d.ts +6 -1
- package/dist/components/footer/Preview.d.ts +7 -7
- package/dist/components/header/Header.d.ts +2 -2
- package/dist/components/header/Search/BtnClearSearch.d.ts +2 -2
- package/dist/components/header/Search/IcnSearch.d.ts +2 -2
- package/dist/components/header/Search/Search.d.ts +11 -3
- package/dist/components/header/SkinTonePicker/BtnSkinToneVariation.d.ts +12 -12
- package/dist/components/header/SkinTonePicker/SkinTonePicker.d.ts +11 -11
- package/dist/components/icons/svgIcons.d.ts +4 -0
- package/dist/components/main/PickerMainBehaviors.d.ts +4 -0
- package/dist/components/main/defaultAppearance.d.ts +12 -0
- package/dist/components/main/labelHeight.d.ts +1 -0
- package/dist/components/navigation/CategoryButton.d.ts +12 -12
- package/dist/components/navigation/CategoryNavIcon.d.ts +4 -4
- package/dist/components/navigation/CategoryNavigation.d.ts +19 -2
- package/dist/config/categoryConfig.d.ts +34 -34
- package/dist/config/cdnUrls.d.ts +2 -2
- package/dist/config/compareConfig.d.ts +10 -2
- package/dist/config/config.d.ts +166 -64
- package/dist/config/customEmojiConfig.d.ts +14 -14
- package/dist/config/defaultPickerConfiguration.d.ts +10 -0
- package/dist/config/mutableConfig.d.ts +32 -10
- package/dist/config/useConfig.d.ts +48 -36
- package/dist/data/defaultEmojiData.d.ts +9 -0
- package/dist/data/defaultEmojiData.js +40 -0
- package/dist/data/emojis-bn.d.mts +39 -0
- package/dist/data/emojis-bn.d.ts +38 -2
- package/dist/data/emojis-bn.js +25 -2
- package/dist/data/emojis-bn.mjs +2 -0
- package/dist/data/emojis-da.d.mts +39 -0
- package/dist/data/emojis-da.d.ts +38 -2
- package/dist/data/emojis-da.js +25 -2
- package/dist/data/emojis-da.mjs +2 -0
- package/dist/data/emojis-de.d.mts +39 -0
- package/dist/data/emojis-de.d.ts +38 -2
- package/dist/data/emojis-de.js +25 -2
- package/dist/data/emojis-de.mjs +2 -0
- package/dist/data/emojis-en-gb.d.mts +39 -0
- package/dist/data/emojis-en-gb.d.ts +38 -2
- package/dist/data/emojis-en-gb.js +25 -2
- package/dist/data/emojis-en-gb.mjs +2 -0
- package/dist/data/emojis-en.d.mts +39 -0
- package/dist/data/emojis-en.d.ts +38 -2
- package/dist/data/emojis-en.js +25 -2
- package/dist/data/emojis-en.mjs +2 -0
- package/dist/data/emojis-es-mx.d.mts +39 -0
- package/dist/data/emojis-es-mx.d.ts +38 -2
- package/dist/data/emojis-es-mx.js +25 -2
- package/dist/data/emojis-es-mx.mjs +2 -0
- package/dist/data/emojis-es.d.mts +39 -0
- package/dist/data/emojis-es.d.ts +38 -2
- package/dist/data/emojis-es.js +25 -2
- package/dist/data/emojis-es.mjs +2 -0
- package/dist/data/emojis-et.d.mts +39 -0
- package/dist/data/emojis-et.d.ts +38 -2
- package/dist/data/emojis-et.js +25 -2
- package/dist/data/emojis-et.mjs +2 -0
- package/dist/data/emojis-fi.d.mts +39 -0
- package/dist/data/emojis-fi.d.ts +38 -2
- package/dist/data/emojis-fi.js +25 -2
- package/dist/data/emojis-fi.mjs +2 -0
- package/dist/data/emojis-fr.d.mts +39 -0
- package/dist/data/emojis-fr.d.ts +38 -2
- package/dist/data/emojis-fr.js +25 -2
- package/dist/data/emojis-fr.mjs +2 -0
- package/dist/data/emojis-hi.d.mts +39 -0
- package/dist/data/emojis-hi.d.ts +38 -2
- package/dist/data/emojis-hi.js +25 -2
- package/dist/data/emojis-hi.mjs +2 -0
- package/dist/data/emojis-hu.d.mts +39 -0
- package/dist/data/emojis-hu.d.ts +38 -2
- package/dist/data/emojis-hu.js +25 -2
- package/dist/data/emojis-hu.mjs +2 -0
- package/dist/data/emojis-it.d.mts +39 -0
- package/dist/data/emojis-it.d.ts +38 -2
- package/dist/data/emojis-it.js +25 -2
- package/dist/data/emojis-it.mjs +2 -0
- package/dist/data/emojis-ja.d.mts +39 -0
- package/dist/data/emojis-ja.d.ts +38 -2
- package/dist/data/emojis-ja.js +25 -2
- package/dist/data/emojis-ja.mjs +2 -0
- package/dist/data/emojis-ko.d.mts +39 -0
- package/dist/data/emojis-ko.d.ts +38 -2
- package/dist/data/emojis-ko.js +25 -2
- package/dist/data/emojis-ko.mjs +2 -0
- package/dist/data/emojis-lt.d.mts +39 -0
- package/dist/data/emojis-lt.d.ts +38 -2
- package/dist/data/emojis-lt.js +25 -2
- package/dist/data/emojis-lt.mjs +2 -0
- package/dist/data/emojis-ms.d.mts +39 -0
- package/dist/data/emojis-ms.d.ts +38 -2
- package/dist/data/emojis-ms.js +25 -2
- package/dist/data/emojis-ms.mjs +2 -0
- package/dist/data/emojis-nb.d.mts +39 -0
- package/dist/data/emojis-nb.d.ts +38 -2
- package/dist/data/emojis-nb.js +25 -2
- package/dist/data/emojis-nb.mjs +2 -0
- package/dist/data/emojis-nl.d.mts +39 -0
- package/dist/data/emojis-nl.d.ts +38 -2
- package/dist/data/emojis-nl.js +25 -2
- package/dist/data/emojis-nl.mjs +2 -0
- package/dist/data/emojis-pl.d.mts +39 -0
- package/dist/data/emojis-pl.d.ts +38 -2
- package/dist/data/emojis-pl.js +25 -2
- package/dist/data/emojis-pl.mjs +2 -0
- package/dist/data/emojis-pt.d.mts +39 -0
- package/dist/data/emojis-pt.d.ts +38 -2
- package/dist/data/emojis-pt.js +25 -2
- package/dist/data/emojis-pt.mjs +2 -0
- package/dist/data/emojis-ru.d.mts +39 -0
- package/dist/data/emojis-ru.d.ts +38 -2
- package/dist/data/emojis-ru.js +25 -2
- package/dist/data/emojis-ru.mjs +2 -0
- package/dist/data/emojis-sv.d.mts +39 -0
- package/dist/data/emojis-sv.d.ts +38 -2
- package/dist/data/emojis-sv.js +25 -2
- package/dist/data/emojis-sv.mjs +2 -0
- package/dist/data/emojis-th.d.mts +39 -0
- package/dist/data/emojis-th.d.ts +38 -2
- package/dist/data/emojis-th.js +25 -2
- package/dist/data/emojis-th.mjs +2 -0
- package/dist/data/emojis-uk.d.mts +39 -0
- package/dist/data/emojis-uk.d.ts +38 -2
- package/dist/data/emojis-uk.js +25 -2
- package/dist/data/emojis-uk.mjs +2 -0
- package/dist/data/emojis-vi.d.mts +39 -0
- package/dist/data/emojis-vi.d.ts +38 -2
- package/dist/data/emojis-vi.js +25 -2
- package/dist/data/emojis-vi.mjs +2 -0
- package/dist/data/emojis-zh-hant.d.mts +39 -0
- package/dist/data/emojis-zh-hant.d.ts +38 -2
- package/dist/data/emojis-zh-hant.js +25 -2
- package/dist/data/emojis-zh-hant.mjs +2 -0
- package/dist/data/emojis-zh.d.mts +39 -0
- package/dist/data/emojis-zh.d.ts +38 -2
- package/dist/data/emojis-zh.js +25 -2
- package/dist/data/emojis-zh.mjs +2 -0
- package/dist/data/index.js +1 -0
- package/dist/data/registerDefaultEmojiData.d.ts +1 -0
- package/dist/data/registerDefaultEmojiData.js +3 -0
- package/dist/data/skinToneVariations.js +2 -2
- package/dist/data/skinToneVariations.ts +8 -7
- package/dist/data-core/pickerData.d.ts +12 -0
- package/dist/data-core/prepare.d.ts +23 -0
- package/dist/data-core/search.d.ts +13 -0
- package/dist/data-core/types.d.ts +23 -0
- package/dist/data.d.mts +72 -0
- package/dist/data.d.ts +72 -0
- package/dist/dataUtils/DataTypes.d.ts +23 -19
- package/dist/dataUtils/emojiSelectors.d.ts +15 -16
- package/dist/dataUtils/emojiUtils.d.ts +1 -12
- package/dist/dataUtils/nativeEmojiSequenceSupport.d.ts +10 -0
- package/dist/dataUtils/nativeEmojiSupport.d.ts +40 -0
- package/dist/dataUtils/parseNativeEmoji.d.ts +1 -1
- package/dist/dataUtils/suggested.d.ts +11 -11
- package/dist/dataUtils/suggestedEmojis.d.ts +7 -0
- package/dist/esm/chunks/chunk-7ZGTUZFB.mjs +8025 -0
- package/dist/esm/chunks/chunk-ACXAQEKG.mjs +149 -0
- package/dist/esm/chunks/chunk-F2KS7DCA.mjs +6735 -0
- package/dist/esm/chunks/chunk-L5W4PFRJ.mjs +14 -0
- package/dist/esm/chunks/chunk-LO4TPPLH.mjs +33 -0
- package/dist/esm/chunks/emojis-6L3GRBAP.mjs +7 -0
- package/dist/esm/data.mjs +11 -0
- package/dist/esm/index.mjs +279 -0
- package/dist/esm/primitives/index.mjs +8 -0
- package/dist/hooks/preloadEmoji.d.ts +5 -9
- package/dist/hooks/useActiveCategoryScrollDetection.d.ts +11 -11
- package/dist/hooks/useCategoryHeight.d.ts +7 -5
- package/dist/hooks/useCloseAllOpenToggles.d.ts +2 -2
- package/dist/hooks/useDataIdentityStabilityWarning.d.ts +13 -0
- package/dist/hooks/useDebouncedState.d.ts +1 -1
- package/dist/hooks/useDisallowMouseMove.d.ts +4 -4
- package/dist/hooks/useDisallowedEmojis.d.ts +2 -3
- package/dist/hooks/useEmojiPreviewEvents.d.ts +3 -3
- package/dist/hooks/useEmojiVirtualization.d.ts +22 -17
- package/dist/hooks/useFilter.d.ts +10 -16
- package/dist/hooks/useFocus.d.ts +3 -3
- package/dist/hooks/useInitialLoad.d.ts +2 -2
- package/dist/hooks/useIsEmojiHidden.d.ts +8 -8
- package/dist/hooks/useIsMounted.d.ts +1 -1
- package/dist/hooks/useIsSearchMode.d.ts +1 -1
- package/dist/hooks/useIsomorphicLayoutEffect.d.ts +2 -2
- package/dist/hooks/useKeyboardNavigation.d.ts +3 -1
- package/dist/hooks/useMouseDownHandlers.d.ts +8 -4
- package/dist/hooks/useOnFocus.d.ts +1 -1
- package/dist/hooks/useOnScroll.d.ts +2 -2
- package/dist/hooks/useReactionsFocus.d.ts +1 -0
- package/dist/hooks/useRegisterRegion.d.ts +24 -0
- package/dist/hooks/useResolvedEmojiData.d.ts +37 -0
- package/dist/hooks/useScrollCategoryIntoView.d.ts +1 -1
- package/dist/hooks/useSearchController.d.ts +17 -0
- package/dist/hooks/useSearchResults.d.ts +8 -0
- package/dist/hooks/useSetVariationPicker.d.ts +2 -2
- package/dist/hooks/useShouldHideCustomEmojis.d.ts +1 -1
- package/dist/hooks/useShouldShowSkinTonePicker.d.ts +4 -4
- package/dist/index.d.mts +376 -0
- package/dist/index.d.ts +376 -9
- package/dist/index.js +2 -8
- package/dist/primitives/CategoryNav.d.ts +4 -0
- package/dist/primitives/Empty.d.ts +6 -0
- package/dist/primitives/List.d.ts +4 -0
- package/dist/primitives/LoadError.d.ts +8 -0
- package/dist/primitives/Loading.d.ts +4 -0
- package/dist/primitives/Panel.d.ts +3 -0
- package/dist/primitives/Preview.d.ts +3 -0
- package/dist/primitives/Reactions.d.ts +2 -0
- package/dist/primitives/Root.d.ts +26 -0
- package/dist/primitives/Search.d.ts +5 -0
- package/dist/primitives/SearchInput.d.ts +3 -0
- package/dist/primitives/SkinTone.d.ts +4 -0
- package/dist/primitives/Viewport.d.ts +19 -0
- package/dist/primitives/appearance.d.ts +3 -0
- package/dist/primitives/components.d.ts +27 -0
- package/dist/primitives/hooks.d.ts +48 -0
- package/dist/primitives/index.d.mts +561 -0
- package/dist/primitives/index.d.ts +561 -0
- package/dist/primitives/index.js +2 -0
- package/dist/primitives/nativeProps.d.ts +15 -0
- package/dist/primitives/scope.d.ts +13 -0
- package/dist/primitives/structuralStyles.d.ts +16 -0
- package/dist/primitives/tokens.d.ts +18 -0
- package/dist/primitives/types.d.ts +85 -0
- package/dist/state/activeEmojiStore.d.ts +7 -0
- package/dist/state/navigationRegistry.d.ts +61 -0
- package/dist/state/regionTraversal.d.ts +20 -0
- package/dist/typeRefinements/typeRefinements.d.ts +6 -6
- package/dist/types/exposedTypes.d.ts +16 -6
- package/dist/types/exposedTypes.js +5 -0
- package/dist/virtualization/virtualizationHelpers.d.ts +22 -18
- package/llms-full.txt +3683 -0
- package/llms.txt +66 -480
- package/package.json +180 -66
- package/src/DomUtils/categoryNameFromDom.ts +1 -1
- package/src/DomUtils/classNames.ts +1 -4
- package/src/DomUtils/elementPositionInRow.ts +28 -6
- package/src/DomUtils/eventBelongsToPicker.ts +17 -0
- package/src/DomUtils/getActiveElement.ts +7 -1
- package/src/DomUtils/isJsdom.ts +12 -0
- package/src/DomUtils/isRtl.ts +5 -0
- package/src/DomUtils/keyboardNavigation.ts +164 -144
- package/src/DomUtils/scrollTo.ts +20 -18
- package/src/DomUtils/selectors.ts +30 -127
- package/src/EmojiPickerReact.tsx +155 -48
- package/src/Stylesheet/DedupedStyle.tsx +80 -0
- package/src/Stylesheet/stylesheet.tsx +128 -59
- package/src/components/Layout/Flex.tsx +12 -11
- package/src/components/Reactions/BtnPlus.tsx +61 -51
- package/src/components/Reactions/Reactions.tsx +113 -55
- package/src/components/atoms/Button.tsx +18 -15
- package/src/components/body/EmojiCategory.tsx +77 -40
- package/src/components/body/EmojiList.tsx +107 -44
- package/src/components/body/EmojiVariationPicker.tsx +113 -66
- package/src/components/body/MeasureEmoji.tsx +9 -2
- package/src/components/body/listComponents.tsx +79 -0
- package/src/components/context/ElementRefContext.tsx +46 -35
- package/src/components/context/PickerConfigContext.tsx +55 -40
- package/src/components/context/PickerContext.tsx +567 -92
- package/src/components/context/PickerDataContext.tsx +114 -99
- package/src/components/emoji/BaseEmojiProps.ts +5 -4
- package/src/components/emoji/ClickableEmojiButton.tsx +148 -63
- package/src/components/emoji/Emoji.tsx +24 -2
- package/src/components/emoji/EmojiImg.tsx +13 -12
- package/src/components/emoji/ExportedEmoji.tsx +5 -4
- package/src/components/emoji/NativeEmoji.tsx +19 -16
- package/src/components/emoji/ViewOnlyEmoji.tsx +55 -30
- package/src/components/emoji/emojiStyles.ts +12 -11
- package/src/components/footer/Preview.tsx +86 -91
- package/src/components/header/Header.tsx +21 -6
- package/src/components/header/Search/BtnClearSearch.tsx +69 -55
- package/src/components/header/Search/IcnSearch.tsx +21 -21
- package/src/components/header/Search/Search.tsx +79 -137
- package/src/components/header/SkinTonePicker/BtnSkinToneVariation.tsx +99 -62
- package/src/components/header/SkinTonePicker/SkinTonePicker.tsx +84 -46
- package/src/components/icons/svgIcons.ts +17 -0
- package/src/components/main/PickerMainBehaviors.tsx +163 -0
- package/src/components/main/defaultAppearance.tsx +189 -0
- package/src/components/main/labelHeight.ts +5 -0
- package/src/components/navigation/CategoryButton.tsx +83 -57
- package/src/components/navigation/CategoryNavIcon.tsx +73 -194
- package/src/components/navigation/CategoryNavigation.tsx +118 -46
- package/src/config/categoryConfig.ts +7 -3
- package/src/config/cdnUrls.ts +11 -21
- package/src/config/compareConfig.ts +128 -30
- package/src/config/config.ts +228 -24
- package/src/config/defaultPickerConfiguration.ts +7 -0
- package/src/config/mutableConfig.ts +44 -20
- package/src/config/useConfig.ts +130 -37
- package/src/data/defaultEmojiData.ts +49 -0
- package/src/data/registerDefaultEmojiData.ts +8 -0
- package/src/data/skinToneVariations.ts +8 -7
- package/src/data-core/pickerData.ts +171 -0
- package/src/data-core/prepare.ts +163 -0
- package/src/data-core/search.ts +122 -0
- package/src/data-core/types.ts +36 -0
- package/src/data.ts +10 -0
- package/src/dataUtils/DataTypes.ts +4 -0
- package/src/dataUtils/emojiSelectors.ts +59 -63
- package/src/dataUtils/emojiUtils.ts +17 -74
- package/src/dataUtils/nativeEmojiSequenceSupport.ts +116 -0
- package/src/dataUtils/nativeEmojiSupport.ts +160 -0
- package/src/dataUtils/parseNativeEmoji.ts +3 -4
- package/src/dataUtils/suggested.ts +8 -4
- package/src/dataUtils/suggestedEmojis.ts +92 -0
- package/src/env.d.ts +4 -0
- package/src/hooks/preloadEmoji.ts +2 -47
- package/src/hooks/useActiveCategoryScrollDetection.ts +28 -16
- package/src/hooks/useCategoryHeight.ts +116 -10
- package/src/hooks/useDataIdentityStabilityWarning.ts +86 -0
- package/src/hooks/useDebouncedState.ts +13 -1
- package/src/hooks/useDisallowedEmojis.ts +31 -42
- package/src/hooks/useEmojiPreviewEvents.ts +43 -10
- package/src/hooks/useEmojiVirtualization.tsx +112 -52
- package/src/hooks/useFilter.ts +92 -132
- package/src/hooks/useFocus.ts +14 -24
- package/src/hooks/useIsEmojiHidden.ts +22 -14
- package/src/hooks/useKeyboardNavigation.ts +412 -432
- package/src/hooks/useMouseDownHandlers.ts +91 -16
- package/src/hooks/useOnFocus.ts +12 -3
- package/src/hooks/useOnScroll.ts +18 -2
- package/src/hooks/useReactionsFocus.ts +118 -0
- package/src/hooks/useRegisterRegion.ts +92 -0
- package/src/hooks/useResolvedEmojiData.ts +200 -0
- package/src/hooks/useScrollCategoryIntoView.ts +74 -12
- package/src/hooks/useSearchController.ts +369 -0
- package/src/hooks/useSearchResults.ts +51 -0
- package/src/hooks/useSetVariationPicker.ts +4 -1
- package/src/index.tsx +67 -5
- package/src/primitives/CategoryNav.tsx +40 -0
- package/src/primitives/Empty.tsx +68 -0
- package/src/primitives/List.tsx +61 -0
- package/src/primitives/LoadError.tsx +38 -0
- package/src/primitives/Loading.tsx +60 -0
- package/src/primitives/Panel.tsx +47 -0
- package/src/primitives/Preview.tsx +38 -0
- package/src/primitives/Reactions.tsx +2 -0
- package/src/primitives/Root.tsx +398 -0
- package/src/primitives/Search.tsx +41 -0
- package/src/primitives/SearchInput.tsx +110 -0
- package/src/primitives/SkinTone.tsx +76 -0
- package/src/primitives/Viewport.tsx +204 -0
- package/src/primitives/appearance.tsx +7 -0
- package/src/primitives/components.tsx +30 -0
- package/src/primitives/hooks.ts +165 -0
- package/src/primitives/index.ts +94 -0
- package/src/primitives/nativeProps.ts +90 -0
- package/src/primitives/scope.tsx +109 -0
- package/src/primitives/structuralStyles.tsx +136 -0
- package/src/primitives/tokens.ts +150 -0
- package/src/primitives/types.ts +192 -0
- package/src/state/activeEmojiStore.ts +39 -0
- package/src/state/navigationRegistry.ts +209 -0
- package/src/state/regionTraversal.ts +116 -0
- package/src/svg.d.ts +2 -2
- package/src/types/exposedTypes.ts +28 -1
- package/src/virtualization/virtualizationHelpers.ts +29 -8
- package/dist/components/body/Body.d.ts +0 -2
- package/dist/components/main/PickerMain.d.ts +0 -7
- package/dist/dataUtils/alphaNumericEmojiIndex.d.ts +0 -5
- package/dist/emoji-picker-react.cjs.development.js +0 -31413
- package/dist/emoji-picker-react.cjs.development.js.map +0 -1
- package/dist/emoji-picker-react.cjs.production.min.js +0 -2
- package/dist/emoji-picker-react.cjs.production.min.js.map +0 -1
- package/dist/emoji-picker-react.esm.js +0 -31411
- package/dist/emoji-picker-react.esm.js.map +0 -1
- package/dist/hooks/useHideEmojisByUniocode.d.ts +0 -1
- package/src/components/body/Body.tsx +0 -43
- package/src/components/main/PickerMain.tsx +0 -249
- package/src/dataUtils/alphaNumericEmojiIndex.ts +0 -21
package/package.json
CHANGED
|
@@ -1,15 +1,76 @@
|
|
|
1
1
|
{
|
|
2
|
-
"version": "
|
|
2
|
+
"version": "5.0.1",
|
|
3
3
|
"license": "MIT",
|
|
4
4
|
"main": "dist/index.js",
|
|
5
5
|
"typings": "dist/index.d.ts",
|
|
6
|
+
"exports": {
|
|
7
|
+
".": {
|
|
8
|
+
"import": {
|
|
9
|
+
"types": "./dist/index.d.mts",
|
|
10
|
+
"default": "./dist/esm/index.mjs"
|
|
11
|
+
},
|
|
12
|
+
"require": {
|
|
13
|
+
"types": "./dist/index.d.ts",
|
|
14
|
+
"default": "./dist/index.js"
|
|
15
|
+
},
|
|
16
|
+
"default": "./dist/index.js"
|
|
17
|
+
},
|
|
18
|
+
"./primitives": {
|
|
19
|
+
"import": {
|
|
20
|
+
"types": "./dist/primitives/index.d.mts",
|
|
21
|
+
"default": "./dist/esm/primitives/index.mjs"
|
|
22
|
+
},
|
|
23
|
+
"require": {
|
|
24
|
+
"types": "./dist/primitives/index.d.ts",
|
|
25
|
+
"default": "./dist/primitives/index.js"
|
|
26
|
+
},
|
|
27
|
+
"default": "./dist/primitives/index.js"
|
|
28
|
+
},
|
|
29
|
+
"./data": {
|
|
30
|
+
"import": {
|
|
31
|
+
"types": "./dist/data.d.mts",
|
|
32
|
+
"default": "./dist/esm/data.mjs"
|
|
33
|
+
},
|
|
34
|
+
"require": {
|
|
35
|
+
"types": "./dist/data.d.ts",
|
|
36
|
+
"default": "./dist/data/index.js"
|
|
37
|
+
},
|
|
38
|
+
"default": "./dist/data/index.js"
|
|
39
|
+
},
|
|
40
|
+
"./data/emojis-*": {
|
|
41
|
+
"import": {
|
|
42
|
+
"types": "./dist/data/emojis-*.d.mts",
|
|
43
|
+
"default": "./dist/data/emojis-*.mjs"
|
|
44
|
+
},
|
|
45
|
+
"require": {
|
|
46
|
+
"types": "./dist/data/emojis-*.d.ts",
|
|
47
|
+
"default": "./dist/data/emojis-*.js"
|
|
48
|
+
},
|
|
49
|
+
"default": "./dist/data/emojis-*.js"
|
|
50
|
+
},
|
|
51
|
+
"./dist/data/emojis-*.json": "./dist/data/emojis-*.json",
|
|
52
|
+
"./dist/data/emojis-*": {
|
|
53
|
+
"import": {
|
|
54
|
+
"types": "./dist/data/emojis-*.d.mts",
|
|
55
|
+
"default": "./dist/data/emojis-*.mjs"
|
|
56
|
+
},
|
|
57
|
+
"require": {
|
|
58
|
+
"types": "./dist/data/emojis-*.d.ts",
|
|
59
|
+
"default": "./dist/data/emojis-*.js"
|
|
60
|
+
},
|
|
61
|
+
"default": "./dist/data/emojis-*.js"
|
|
62
|
+
},
|
|
63
|
+
"./src/data/*.json": "./src/data/*.json",
|
|
64
|
+
"./package.json": "./package.json"
|
|
65
|
+
},
|
|
6
66
|
"homepage": "https://ealush.com/emoji-picker-react",
|
|
7
67
|
"files": [
|
|
8
68
|
"dist",
|
|
9
69
|
"src",
|
|
10
|
-
"llms.txt"
|
|
70
|
+
"llms.txt",
|
|
71
|
+
"llms-full.txt"
|
|
11
72
|
],
|
|
12
|
-
"description": "
|
|
73
|
+
"description": "React emoji picker: batteries included, or BYOD (bring your own design, design language and design library). Shared keyboard navigation, localization and virtualization across styled, unstyled and composed UIs.",
|
|
13
74
|
"keywords": [
|
|
14
75
|
"emoji-picker",
|
|
15
76
|
"react-emoji-picker",
|
|
@@ -17,14 +78,33 @@
|
|
|
17
78
|
"emojis",
|
|
18
79
|
"reactions",
|
|
19
80
|
"reactions-picker",
|
|
20
|
-
"emoji-reactions"
|
|
81
|
+
"emoji-reactions",
|
|
82
|
+
"emoji picker",
|
|
83
|
+
"react emoji picker",
|
|
84
|
+
"design-system",
|
|
85
|
+
"bring-your-own-styles",
|
|
86
|
+
"plug-and-play",
|
|
87
|
+
"unstyled",
|
|
88
|
+
"headless",
|
|
89
|
+
"composable",
|
|
90
|
+
"tailwind",
|
|
91
|
+
"shadcn",
|
|
92
|
+
"accessible",
|
|
93
|
+
"a11y",
|
|
94
|
+
"typescript",
|
|
95
|
+
"nextjs",
|
|
96
|
+
"react-19",
|
|
97
|
+
"skin-tones",
|
|
98
|
+
"emoji-search",
|
|
99
|
+
"i18n",
|
|
100
|
+
"llms.txt"
|
|
21
101
|
],
|
|
22
102
|
"engines": {
|
|
23
|
-
"node": ">=
|
|
103
|
+
"node": ">=18"
|
|
24
104
|
},
|
|
25
105
|
"repository": {
|
|
26
106
|
"type": "git",
|
|
27
|
-
"url": "https://github.com/ealush/emoji-picker-react.git"
|
|
107
|
+
"url": "git+https://github.com/ealush/emoji-picker-react.git"
|
|
28
108
|
},
|
|
29
109
|
"funding": [
|
|
30
110
|
{
|
|
@@ -51,32 +131,43 @@
|
|
|
51
131
|
}
|
|
52
132
|
},
|
|
53
133
|
"scripts": {
|
|
54
|
-
"start": "
|
|
55
|
-
"build": "npm run build:data:src && npm run type-check &&
|
|
134
|
+
"start": "npm run storybook",
|
|
135
|
+
"build": "npm run check:scripts && npm run clean && npm run build:data:src && npm run type-check && npm run build:data:dist && tsx ./scripts/build.ts && npm run docs:llms",
|
|
56
136
|
"type-check": "tsc --noEmit --incremental --pretty --project tsconfig.json",
|
|
137
|
+
"check:contracts": "tsc --project test/v5-contract/tsconfig.json --noEmit && tsx ./scripts/checkApiDocs.ts",
|
|
57
138
|
"test": "vitest run",
|
|
58
139
|
"test:watch": "vitest",
|
|
59
140
|
"test:visual": "playwright test",
|
|
60
|
-
"lint": "eslint
|
|
61
|
-
"prepare": "npm run build",
|
|
141
|
+
"lint": "eslint src",
|
|
142
|
+
"prepare": "husky && npm run build",
|
|
62
143
|
"size": "size-limit",
|
|
63
144
|
"analyze": "size-limit --why",
|
|
64
145
|
"build:data:src": "tsc --project ./scripts/tsconfig.build.json && node ./scripts/dist/prepare.js",
|
|
65
|
-
"build:data:dist": "tsc --project tsconfig.data.json &&
|
|
146
|
+
"build:data:dist": "tsc --project tsconfig.data.json && tsx ./scripts/copyData.ts && tsx ./scripts/buildDataTwins.ts",
|
|
66
147
|
"build:data": "npm run build:data:src && npm run build:data:dist",
|
|
67
|
-
"storybook": "npm run build:data && storybook dev -p 6006",
|
|
148
|
+
"storybook": "npm run build:data && storybook dev --host 0.0.0.0 -p 6006",
|
|
68
149
|
"build-storybook": "storybook build",
|
|
69
|
-
"docs:llms": "
|
|
70
|
-
"check:react-floor": "
|
|
150
|
+
"docs:llms": "tsx ./scripts/generateLlmsTxt.ts",
|
|
151
|
+
"check:react-floor": "tsx ./scripts/checkReactApiFloor.ts",
|
|
152
|
+
"check:react16": "tsx ./scripts/react16-fixture/run.ts",
|
|
153
|
+
"check:package": "tsx ./scripts/package-check/run.ts",
|
|
154
|
+
"check:compat": "tsc --project ./compat/v4-usage/tsconfig.json --noEmit && tsc --project ./test/v5-contract/tsconfig.json --noEmit && tsc --project ./compat/exports-map/tsconfig.json --noEmit",
|
|
155
|
+
"check:perf": "tsx ./bench/run.ts",
|
|
156
|
+
"clean": "tsx ./scripts/clean.ts",
|
|
157
|
+
"recipes": "tsx ./scripts/generateRecipes.mts",
|
|
158
|
+
"designs": "tsx ./scripts/portDesigns.mts",
|
|
159
|
+
"registry": "tsx ./scripts/generateRegistry.mts",
|
|
160
|
+
"check:scripts": "tsc --project scripts/tsconfig.json",
|
|
161
|
+
"icons": "tsx ./scripts/buildIcons.ts",
|
|
162
|
+
"check:data-package": "tsx ./scripts/checkDataPackage.ts",
|
|
163
|
+
"check:tooling": "tsc --project tsconfig.tooling.json --noEmit",
|
|
164
|
+
"check:docs": "tsx ./scripts/checkDocsLinks.ts",
|
|
165
|
+
"check:storybook-hosts": "tsx ./scripts/checkStorybookHosts.ts",
|
|
166
|
+
"check:node18": "tsx ./scripts/node18-fixture/run.ts"
|
|
71
167
|
},
|
|
72
168
|
"peerDependencies": {
|
|
73
169
|
"react": ">=16.8"
|
|
74
170
|
},
|
|
75
|
-
"husky": {
|
|
76
|
-
"hooks": {
|
|
77
|
-
"pre-commit": "npm run lint"
|
|
78
|
-
}
|
|
79
|
-
},
|
|
80
171
|
"prettier": {
|
|
81
172
|
"printWidth": 80,
|
|
82
173
|
"semi": true,
|
|
@@ -84,71 +175,94 @@
|
|
|
84
175
|
},
|
|
85
176
|
"name": "emoji-picker-react",
|
|
86
177
|
"author": "ealush",
|
|
87
|
-
"module": "dist/
|
|
178
|
+
"module": "dist/esm/index.mjs",
|
|
88
179
|
"size-limit": [
|
|
89
180
|
{
|
|
90
|
-
"path": "dist/
|
|
91
|
-
"limit": "
|
|
181
|
+
"path": "dist/index.js",
|
|
182
|
+
"limit": "76 KB"
|
|
183
|
+
},
|
|
184
|
+
{
|
|
185
|
+
"path": "dist/esm/index.mjs",
|
|
186
|
+
"limit": "75 KB"
|
|
92
187
|
},
|
|
93
188
|
{
|
|
94
|
-
"path": "dist/
|
|
95
|
-
"limit": "
|
|
189
|
+
"path": "dist/esm/primitives/index.mjs",
|
|
190
|
+
"limit": "75 KB"
|
|
191
|
+
},
|
|
192
|
+
{
|
|
193
|
+
"path": "dist/esm/data.mjs",
|
|
194
|
+
"limit": "42 KB"
|
|
96
195
|
}
|
|
97
196
|
],
|
|
98
197
|
"devDependencies": {
|
|
99
|
-
"@
|
|
100
|
-
"@
|
|
101
|
-
"@
|
|
102
|
-
"@
|
|
198
|
+
"@axe-core/playwright": "^4.13.0",
|
|
199
|
+
"@emotion/react": "^11.14.0",
|
|
200
|
+
"@emotion/styled": "^11.14.1",
|
|
201
|
+
"@eslint/js": "^9.39.5",
|
|
202
|
+
"@mui/material": "^9.4.0",
|
|
203
|
+
"@playwright/test": "^1.63.0",
|
|
204
|
+
"@radix-ui/react-popover": "^1.1.23",
|
|
103
205
|
"@semantic-release/changelog": "^7.0.0",
|
|
104
206
|
"@semantic-release/git": "^11.0.1",
|
|
105
207
|
"@semantic-release/github": "^12.0.9",
|
|
106
208
|
"@semantic-release/npm": "^13.1.5",
|
|
107
|
-
"@size-limit/preset-small-lib": "^
|
|
108
|
-
"@storybook/addon-
|
|
109
|
-
"@storybook/addon-
|
|
110
|
-
"@storybook/
|
|
111
|
-
"@
|
|
112
|
-
"@
|
|
113
|
-
"@
|
|
114
|
-
"@testing-library/
|
|
115
|
-
"@testing-library/
|
|
116
|
-
"@
|
|
117
|
-
"@
|
|
118
|
-
"@types/react": "^
|
|
119
|
-
"@types/react-dom": "^
|
|
120
|
-
"
|
|
121
|
-
"@typescript-eslint/parser": "^5.36.2",
|
|
122
|
-
"autoprefixer": "^10.4.8",
|
|
123
|
-
"babel-loader": "^8.2.5",
|
|
209
|
+
"@size-limit/preset-small-lib": "^14.1.0",
|
|
210
|
+
"@storybook/addon-docs": "^10.6.1",
|
|
211
|
+
"@storybook/addon-links": "^10.6.1",
|
|
212
|
+
"@storybook/react-vite": "^10.6.1",
|
|
213
|
+
"@tailwindcss/vite": "^4.3.3",
|
|
214
|
+
"@testing-library/dom": "^10.4.2",
|
|
215
|
+
"@testing-library/jest-dom": "^7.0.1",
|
|
216
|
+
"@testing-library/react": "^16.3.3",
|
|
217
|
+
"@testing-library/user-event": "^14.6.7",
|
|
218
|
+
"@types/jsdom": "^21.1.7",
|
|
219
|
+
"@types/node": "^24.19.1",
|
|
220
|
+
"@types/react": "^19.3.0",
|
|
221
|
+
"@types/react-dom": "^19.3.0",
|
|
222
|
+
"clsx": "^2.1.1",
|
|
124
223
|
"conventional-changelog-conventionalcommits": "^9.3.1",
|
|
125
|
-
"cssnano": "^5.1.13",
|
|
126
224
|
"emoji-datasource": "^16.0.0",
|
|
127
225
|
"emojibase-data": "^17.0.0",
|
|
128
|
-
"
|
|
129
|
-
"eslint
|
|
130
|
-
"eslint-
|
|
131
|
-
"eslint-plugin-
|
|
132
|
-
"eslint-plugin-
|
|
133
|
-
"
|
|
134
|
-
"
|
|
135
|
-
"
|
|
136
|
-
"
|
|
137
|
-
"
|
|
138
|
-
"
|
|
139
|
-
"
|
|
140
|
-
"react
|
|
141
|
-
"
|
|
226
|
+
"esbuild": "^0.28.2",
|
|
227
|
+
"eslint": "^9.39.5",
|
|
228
|
+
"eslint-import-resolver-typescript": "^4.4.5",
|
|
229
|
+
"eslint-plugin-import": "^2.32.0",
|
|
230
|
+
"eslint-plugin-jsx-a11y": "^6.10.2",
|
|
231
|
+
"eslint-plugin-react": "^7.37.5",
|
|
232
|
+
"eslint-plugin-react-hooks": "^5.2.0",
|
|
233
|
+
"globals": "^17.13.0",
|
|
234
|
+
"husky": "^9.1.7",
|
|
235
|
+
"jsdom": "^30.1.1",
|
|
236
|
+
"postcss": "^8.5.28",
|
|
237
|
+
"prettier": "^3.9.9",
|
|
238
|
+
"react": "^19.3.0",
|
|
239
|
+
"react-dom": "^19.3.0",
|
|
240
|
+
"rollup": "^4.64.0",
|
|
241
|
+
"rollup-plugin-dts": "^6.5.1",
|
|
142
242
|
"semantic-release": "^25.0.9",
|
|
143
|
-
"size-limit": "^
|
|
144
|
-
"storybook": "
|
|
145
|
-
"
|
|
146
|
-
"
|
|
243
|
+
"size-limit": "^14.1.0",
|
|
244
|
+
"storybook": "^10.6.1",
|
|
245
|
+
"styled-components": "^6.5.3",
|
|
246
|
+
"tailwind-merge": "^3.7.0",
|
|
247
|
+
"tailwindcss": "^4.3.3",
|
|
248
|
+
"terser": "5.31.0",
|
|
147
249
|
"tslib": "^2.4.0",
|
|
148
|
-
"
|
|
149
|
-
"
|
|
250
|
+
"tsx": "^4.23.15",
|
|
251
|
+
"typescript": "5.9",
|
|
252
|
+
"typescript-eslint": "^8.71.0",
|
|
253
|
+
"vite": "^8.3.2",
|
|
254
|
+
"vitest": "^5.0.3"
|
|
150
255
|
},
|
|
151
256
|
"dependencies": {
|
|
152
257
|
"shipstyles": "1.0.0"
|
|
258
|
+
},
|
|
259
|
+
"directories": {
|
|
260
|
+
"doc": "docs",
|
|
261
|
+
"example": "example",
|
|
262
|
+
"test": "test"
|
|
263
|
+
},
|
|
264
|
+
"type": "commonjs",
|
|
265
|
+
"bugs": {
|
|
266
|
+
"url": "https://github.com/ealush/emoji-picker-react/issues"
|
|
153
267
|
}
|
|
154
268
|
}
|
|
@@ -13,6 +13,7 @@ export enum ClassNames {
|
|
|
13
13
|
emojiList = 'epr-emoji-list',
|
|
14
14
|
external = '__EmojiPicker__',
|
|
15
15
|
emojiPicker = 'EmojiPickerReact',
|
|
16
|
+
reactions = 'epr-reactions',
|
|
16
17
|
open = 'epr-open',
|
|
17
18
|
vertical = 'epr-vertical',
|
|
18
19
|
horizontal = 'epr-horizontal',
|
|
@@ -20,7 +21,3 @@ export enum ClassNames {
|
|
|
20
21
|
darkTheme = 'epr-dark-theme',
|
|
21
22
|
autoTheme = 'epr-auto-theme',
|
|
22
23
|
}
|
|
23
|
-
|
|
24
|
-
export function asSelectors(...classNames: ClassNames[]): string {
|
|
25
|
-
return classNames.map((c) => `.${c}`).join('');
|
|
26
|
-
}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import { DEFAULT_LABEL_HEIGHT } from '../components/main/
|
|
1
|
+
import { DEFAULT_LABEL_HEIGHT } from '../components/main/labelHeight';
|
|
2
2
|
|
|
3
|
-
import { ClassNames
|
|
3
|
+
import { ClassNames } from './classNames';
|
|
4
4
|
import { NullableElement } from './selectors';
|
|
5
5
|
|
|
6
6
|
export function elementCountInRow(
|
|
@@ -17,7 +17,7 @@ export function elementCountInRow(
|
|
|
17
17
|
// off by one (e.g. category padding shrinking the content box), which
|
|
18
18
|
// makes arrow-up/arrow-down drift sideways by a column.
|
|
19
19
|
// https://github.com/ealush/emoji-picker-react/issues/502
|
|
20
|
-
const declared = Number(parent.dataset?.
|
|
20
|
+
const declared = Number(parent.dataset?.eprEmojisPerRow);
|
|
21
21
|
if (Number.isInteger(declared) && declared > 0) {
|
|
22
22
|
return declared;
|
|
23
23
|
}
|
|
@@ -74,15 +74,37 @@ export function getLabelHeight(parentNode: NullableElement) {
|
|
|
74
74
|
return DEFAULT_LABEL_HEIGHT;
|
|
75
75
|
}
|
|
76
76
|
|
|
77
|
-
const label = parentNode.querySelector(
|
|
77
|
+
const label = parentNode.querySelector(`.${ClassNames.label}`);
|
|
78
78
|
|
|
79
79
|
if (label) {
|
|
80
80
|
const height = label.getBoundingClientRect().height;
|
|
81
81
|
if (height > 0) {
|
|
82
82
|
return height;
|
|
83
83
|
}
|
|
84
|
+
// A design that hides category titles takes no label space; falling
|
|
85
|
+
// back to the default here would offset every virtualization window
|
|
86
|
+
// by a phantom label per category.
|
|
87
|
+
if (isDisplayNone(label)) {
|
|
88
|
+
return 0;
|
|
89
|
+
}
|
|
84
90
|
}
|
|
85
91
|
|
|
86
|
-
//
|
|
87
|
-
|
|
92
|
+
// Not laid out yet: use the documented token, then the default.
|
|
93
|
+
const token = readPxToken(parentNode, '--epr-category-label-height');
|
|
94
|
+
return token ?? DEFAULT_LABEL_HEIGHT;
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
function isDisplayNone(element: Element): boolean {
|
|
98
|
+
return (
|
|
99
|
+
typeof getComputedStyle === 'function' &&
|
|
100
|
+
getComputedStyle(element).display === 'none'
|
|
101
|
+
);
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
function readPxToken(element: Element, name: string): number | null {
|
|
105
|
+
if (typeof getComputedStyle !== 'function') {
|
|
106
|
+
return null;
|
|
107
|
+
}
|
|
108
|
+
const value = parseFloat(getComputedStyle(element).getPropertyValue(name));
|
|
109
|
+
return Number.isFinite(value) ? value : null;
|
|
88
110
|
}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
/** Ignore delegated events from a picker nested inside this picker. */
|
|
2
|
+
export function eventBelongsToPicker(
|
|
3
|
+
event: Event,
|
|
4
|
+
container: Element | null,
|
|
5
|
+
): boolean {
|
|
6
|
+
// At window/document capture the browser retargets a shadow-root event
|
|
7
|
+
// to its host. The original composed target still identifies the picker.
|
|
8
|
+
const target = (event.composedPath?.()[0] ?? event.target) as Element | null;
|
|
9
|
+
// Inspect the target rather than a global Element constructor: realms
|
|
10
|
+
// (iframes) and DOM test environments may have different constructors.
|
|
11
|
+
return (
|
|
12
|
+
typeof target?.closest === 'function' &&
|
|
13
|
+
!!container &&
|
|
14
|
+
target.closest('[data-epr-part="root"]') ===
|
|
15
|
+
container.closest('[data-epr-part="root"]')
|
|
16
|
+
);
|
|
17
|
+
}
|
|
@@ -1,5 +1,11 @@
|
|
|
1
1
|
import { NullableElement } from './selectors';
|
|
2
2
|
|
|
3
3
|
export function getActiveElement() {
|
|
4
|
-
|
|
4
|
+
// document.activeElement is the host when a consumer renders the picker
|
|
5
|
+
// inside an open shadow root. Grid movement needs the focused input/cell.
|
|
6
|
+
let active = document.activeElement;
|
|
7
|
+
while (active?.shadowRoot?.activeElement) {
|
|
8
|
+
active = active.shadowRoot.activeElement;
|
|
9
|
+
}
|
|
10
|
+
return active as NullableElement;
|
|
5
11
|
}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
// jsdom lacks parts of the platform the picker relies on (canvas, CSS
|
|
2
|
+
// cascade layers). Read the user agent from the document's window: on
|
|
3
|
+
// Node >= 21 the global `navigator` is Node's own, not jsdom's.
|
|
4
|
+
export function isJsdom(): boolean {
|
|
5
|
+
if (typeof document === 'undefined') {
|
|
6
|
+
return false;
|
|
7
|
+
}
|
|
8
|
+
const userAgent =
|
|
9
|
+
document.defaultView?.navigator?.userAgent ??
|
|
10
|
+
(typeof navigator !== 'undefined' ? navigator.userAgent : '');
|
|
11
|
+
return /jsdom/i.test(userAgent);
|
|
12
|
+
}
|