emoji-picker-react 4.6.8 → 4.6.9
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/Stylesheet/stylesheet.d.ts +3 -5
- package/dist/components/header/SkinTonePicker.d.ts +0 -1
- package/dist/emoji-picker-react.cjs.development.css +1 -2
- package/dist/emoji-picker-react.cjs.development.js +203 -25
- 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 +209 -34
- package/dist/emoji-picker-react.esm.js.map +1 -1
- package/package.json +2 -2
- package/src/Stylesheet/stylesheet.ts +24 -0
- package/src/components/header/Search.tsx +0 -3
- package/src/components/header/SkinTonePicker.tsx +108 -10
- package/src/components/navigation/CategoryNavigation.css +0 -77
- package/src/components/navigation/CategoryNavigation.tsx +94 -4
- package/src/components/header/SkinTonePicker.css +0 -103
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"emoji-picker-react.esm.js","sources":["../src/DomUtils/classNames.ts","../src/Stylesheet/stylesheet.ts","../src/DomUtils/focusElement.ts","../src/components/context/ElementRefContext.tsx","../src/types/exposedTypes.ts","../src/config/categoryConfig.ts","../src/config/cdnUrls.ts","../src/data/skinToneVariations.ts","../src/dataUtils/DataTypes.ts","../src/dataUtils/alphaNumericEmojiIndex.ts","../src/dataUtils/emojiSelectors.ts","../src/config/config.ts","../src/components/context/PickerConfigContext.tsx","../src/config/mutableConfig.ts","../src/config/useConfig.ts","../src/hooks/useDebouncedState.ts","../src/hooks/useHideEmojisByUniocode.ts","../src/hooks/useDisallowedEmojis.ts","../src/hooks/useInitialLoad.ts","../src/components/context/PickerContext.tsx","../src/hooks/useDisallowMouseMove.ts","../src/DomUtils/elementPositionInRow.ts","../src/DomUtils/selectors.ts","../src/dataUtils/parseNativeEmoji.ts","../src/dataUtils/suggested.ts","../src/typeRefinements/typeRefinements.ts","../src/hooks/useCloseAllOpenToggles.ts","../src/hooks/useSetVariationPicker.ts","../src/hooks/useMouseDownHandlers.ts","../src/hooks/useOnScroll.ts","../src/DomUtils/scrollTo.ts","../src/hooks/useFocus.ts","../src/hooks/useFilter.ts","../src/hooks/useIsEmojiHidden.ts","../src/components/atoms/Button.tsx","../src/components/emoji/ClickableEmojiButton.tsx","../src/components/emoji/emojiStyles.ts","../src/components/emoji/EmojiImg.tsx","../src/components/emoji/NativeEmoji.tsx","../src/components/emoji/ViewOnlyEmoji.tsx","../src/components/emoji/Emoji.tsx","../src/components/body/EmojiCategory.tsx","../src/components/body/Suggested.tsx","../src/components/body/EmojiList.tsx","../src/DomUtils/keyboardNavigation.ts","../node_modules/style-inject/dist/style-inject.es.js","../src/components/body/EmojiVariationPicker.tsx","../src/components/body/Body.tsx","../src/hooks/useEmojiPreviewEvents.ts","../src/hooks/useShouldShowSkinTonePicker.ts","../src/components/Layout/Flex.tsx","../src/components/Layout/Space.tsx","../src/components/Layout/Absolute.tsx","../src/components/Layout/Relative.tsx","../src/components/header/SkinTonePicker.tsx","../src/components/footer/Preview.tsx","../src/DomUtils/categoryNameFromDom.ts","../src/hooks/useActiveCategoryScrollDetection.ts","../src/hooks/useIsSearchMode.ts","../src/hooks/useScrollCategoryIntoView.ts","../src/hooks/useShouldHideCustomEmojis.ts","../src/components/navigation/CategoryNavigation.tsx","../src/components/header/CssSearch.tsx","../src/components/header/Search.tsx","../src/components/header/Header.tsx","../src/DomUtils/getActiveElement.ts","../src/hooks/useKeyboardNavigation.ts","../src/hooks/preloadEmoji.ts","../src/hooks/useOnFocus.ts","../src/components/main/PickerMain.tsx","../src/EmojiPickerReact.tsx","../src/components/ErrorBoundary.tsx","../src/components/emoji/ExportedEmoji.tsx","../src/index.tsx"],"sourcesContent":["export enum ClassNames {\n hiddenOnSearch = 'epr-hidden-on-search',\n searchActive = 'epr-search-active',\n hidden = 'epr-hidden',\n visible = 'epr-visible',\n active = 'epr-active',\n emoji = 'epr-emoji',\n category = 'epr-emoji-category',\n label = 'epr-emoji-category-label',\n categoryContent = 'epr-emoji-category-content',\n emojiHasVariations = 'epr-emoji-has-variations',\n scrollBody = 'epr-body',\n emojiList = 'epr-emoji-list',\n external = '__EmojiPicker__',\n emojiPicker = 'EmojiPickerReact',\n open = 'epr-open',\n vertical = 'epr-vertical',\n horizontal = 'epr-horizontal',\n variationPicker = 'epr-emoji-variation-picker',\n darkTheme = 'epr-dark-theme',\n autoTheme = 'epr-auto-theme'\n}\n\nexport function asSelectors(...classNames: ClassNames[]): string {\n return classNames.map(c => `.${c}`).join('');\n}\n","import { createSheet } from 'flairup';\n\nimport { ClassNames } from '../DomUtils/classNames';\n\nexport const stylesheet = createSheet('epr');\n\nexport const commonStyles = stylesheet.create({\n hidden: {\n '.': ClassNames.hidden,\n display: 'none',\n opacity: '0',\n pointerEvents: 'none',\n visibility: 'hidden'\n },\n hiddenOnSearch: {\n display: 'none',\n opacity: '0',\n pointerEvents: 'none',\n visibility: 'hidden'\n }\n});\n","import { NullableElement } from './selectors';\n\nexport function focusElement(element: NullableElement) {\n if (!element) {\n return;\n }\n\n requestAnimationFrame(() => {\n element.focus();\n });\n}\n\nexport function focusPrevElementSibling(element: NullableElement) {\n if (!element) return;\n\n const prev = element.previousElementSibling as HTMLElement;\n\n focusElement(prev);\n}\n\nexport function focusNextElementSibling(element: NullableElement) {\n if (!element) return;\n\n const next = element.nextElementSibling as HTMLElement;\n\n focusElement(next);\n}\n\nexport function focusFirstElementChild(element: NullableElement) {\n if (!element) return;\n\n const first = element.firstElementChild as HTMLElement;\n\n focusElement(first);\n}\n","import * as React from 'react';\n\nimport { focusElement } from '../../DomUtils/focusElement';\nimport { NullableElement } from '../../DomUtils/selectors';\n\nexport function ElementRefContextProvider({\n children\n}: {\n children: React.ReactNode;\n}) {\n const PickerMainRef = React.useRef<HTMLElement>(null);\n const AnchoredEmojiRef = React.useRef<HTMLElement>(null);\n const BodyRef = React.useRef<HTMLDivElement>(null);\n const SearchInputRef = React.useRef<HTMLInputElement>(null);\n const SkinTonePickerRef = React.useRef<HTMLDivElement>(null);\n const CategoryNavigationRef = React.useRef<HTMLDivElement>(null);\n const VariationPickerRef = React.useRef<HTMLDivElement>(null);\n\n return (\n <ElementRefContext.Provider\n value={{\n AnchoredEmojiRef,\n BodyRef,\n CategoryNavigationRef,\n PickerMainRef,\n SearchInputRef,\n SkinTonePickerRef,\n VariationPickerRef\n }}\n >\n {children}\n </ElementRefContext.Provider>\n );\n}\n\nexport type ElementRef<\n E extends HTMLElement = HTMLElement\n> = React.MutableRefObject<E | null>;\n\ntype ElementRefs = {\n PickerMainRef: ElementRef;\n AnchoredEmojiRef: ElementRef;\n SkinTonePickerRef: ElementRef<HTMLDivElement>;\n SearchInputRef: ElementRef<HTMLInputElement>;\n BodyRef: ElementRef<HTMLDivElement>;\n CategoryNavigationRef: ElementRef<HTMLDivElement>;\n VariationPickerRef: ElementRef<HTMLDivElement>;\n};\n\nconst ElementRefContext = React.createContext<ElementRefs>({\n AnchoredEmojiRef: React.createRef(),\n BodyRef: React.createRef(),\n CategoryNavigationRef: React.createRef(),\n PickerMainRef: React.createRef(),\n SearchInputRef: React.createRef(),\n SkinTonePickerRef: React.createRef(),\n VariationPickerRef: React.createRef()\n});\n\nfunction useElementRef() {\n return React.useContext(ElementRefContext);\n}\n\nexport function usePickerMainRef() {\n return useElementRef()['PickerMainRef'];\n}\n\nexport function useAnchoredEmojiRef() {\n return useElementRef()['AnchoredEmojiRef'];\n}\n\nexport function useSetAnchoredEmojiRef(): (target: NullableElement) => void {\n const AnchoredEmojiRef = useAnchoredEmojiRef();\n return (target: NullableElement) => {\n if (target === null && AnchoredEmojiRef.current !== null) {\n focusElement(AnchoredEmojiRef.current);\n }\n\n AnchoredEmojiRef.current = target;\n };\n}\n\nexport function useBodyRef() {\n return useElementRef()['BodyRef'];\n}\n\nexport function useSearchInputRef() {\n return useElementRef()['SearchInputRef'];\n}\n\nexport function useSkinTonePickerRef() {\n return useElementRef()['SkinTonePickerRef'];\n}\n\nexport function useCategoryNavigationRef() {\n return useElementRef()['CategoryNavigationRef'];\n}\n\nexport function useVariationPickerRef() {\n return useElementRef()['VariationPickerRef'];\n}\n","export type EmojiClickData = {\n activeSkinTone: SkinTones;\n unified: string;\n unifiedWithoutSkinTone: string;\n emoji: string;\n names: string[];\n imageUrl: string;\n getImageUrl: (emojiStyle?: EmojiStyle) => string;\n isCustom: boolean;\n};\n\nexport enum SuggestionMode {\n RECENT = 'recent',\n FREQUENT = 'frequent'\n}\n\nexport enum EmojiStyle {\n NATIVE = 'native',\n APPLE = 'apple',\n TWITTER = 'twitter',\n GOOGLE = 'google',\n FACEBOOK = 'facebook'\n}\n\nexport enum Theme {\n DARK = 'dark',\n LIGHT = 'light',\n AUTO = 'auto'\n}\n\nexport enum SkinTones {\n NEUTRAL = 'neutral',\n LIGHT = '1f3fb',\n MEDIUM_LIGHT = '1f3fc',\n MEDIUM = '1f3fd',\n MEDIUM_DARK = '1f3fe',\n DARK = '1f3ff'\n}\n\nexport enum Categories {\n SUGGESTED = 'suggested',\n CUSTOM = 'custom',\n SMILEYS_PEOPLE = 'smileys_people',\n ANIMALS_NATURE = 'animals_nature',\n FOOD_DRINK = 'food_drink',\n TRAVEL_PLACES = 'travel_places',\n ACTIVITIES = 'activities',\n OBJECTS = 'objects',\n SYMBOLS = 'symbols',\n FLAGS = 'flags'\n}\n\nexport enum SkinTonePickerLocation {\n SEARCH = 'SEARCH',\n PREVIEW = 'PREVIEW'\n}\n","import { Categories, SuggestionMode } from '../types/exposedTypes';\n\nexport { Categories };\n\nconst categoriesOrdered: Categories[] = [\n Categories.SUGGESTED,\n Categories.CUSTOM,\n Categories.SMILEYS_PEOPLE,\n Categories.ANIMALS_NATURE,\n Categories.FOOD_DRINK,\n Categories.TRAVEL_PLACES,\n Categories.ACTIVITIES,\n Categories.OBJECTS,\n Categories.SYMBOLS,\n Categories.FLAGS\n];\n\nexport const SuggestedRecent: CategoryConfig = {\n name: 'Recently Used',\n category: Categories.SUGGESTED\n};\n\nexport type CustomCategoryConfig = {\n category: Categories.CUSTOM;\n name: string;\n};\n\nconst configByCategory: Record<Categories, CategoryConfig> = {\n [Categories.SUGGESTED]: {\n category: Categories.SUGGESTED,\n name: 'Frequently Used'\n },\n [Categories.CUSTOM]: {\n category: Categories.CUSTOM,\n name: 'Custom Emojis'\n },\n [Categories.SMILEYS_PEOPLE]: {\n category: Categories.SMILEYS_PEOPLE,\n name: 'Smileys & People'\n },\n [Categories.ANIMALS_NATURE]: {\n category: Categories.ANIMALS_NATURE,\n name: 'Animals & Nature'\n },\n [Categories.FOOD_DRINK]: {\n category: Categories.FOOD_DRINK,\n name: 'Food & Drink'\n },\n [Categories.TRAVEL_PLACES]: {\n category: Categories.TRAVEL_PLACES,\n name: 'Travel & Places'\n },\n [Categories.ACTIVITIES]: {\n category: Categories.ACTIVITIES,\n name: 'Activities'\n },\n [Categories.OBJECTS]: {\n category: Categories.OBJECTS,\n name: 'Objects'\n },\n [Categories.SYMBOLS]: {\n category: Categories.SYMBOLS,\n name: 'Symbols'\n },\n [Categories.FLAGS]: {\n category: Categories.FLAGS,\n name: 'Flags'\n }\n};\n\nexport function baseCategoriesConfig(\n modifiers?: Record<Categories, CategoryConfig>\n): CategoriesConfig {\n return categoriesOrdered.map(category => {\n return {\n ...configByCategory[category],\n ...(modifiers && modifiers[category] && modifiers[category])\n };\n });\n}\n\nexport function categoryFromCategoryConfig(category: CategoryConfig) {\n return category.category;\n}\n\nexport function categoryNameFromCategoryConfig(category: CategoryConfig) {\n return category.name;\n}\n\nexport type CategoriesConfig = CategoryConfig[];\n\nexport type CategoryConfig = {\n category: Categories;\n name: string;\n};\n\nexport type UserCategoryConfig = Array<Categories | CategoryConfig>;\n\nexport function mergeCategoriesConfig(\n userCategoriesConfig: UserCategoryConfig = [],\n modifiers: CategoryConfigModifiers = {}\n): CategoriesConfig {\n const extra = {} as Record<Categories, CategoryConfig>;\n\n if (modifiers.suggestionMode === SuggestionMode.RECENT) {\n extra[Categories.SUGGESTED] = SuggestedRecent;\n }\n\n const base = baseCategoriesConfig(extra);\n if (!userCategoriesConfig?.length) {\n return base;\n }\n\n return userCategoriesConfig.map(category => {\n if (typeof category === 'string') {\n return getBaseConfigByCategory(category, extra[category]);\n }\n\n return {\n ...getBaseConfigByCategory(category.category, extra[category.category]),\n ...category\n };\n });\n}\n\nfunction getBaseConfigByCategory(\n category: Categories,\n modifier: CategoryConfig = {} as CategoryConfig\n) {\n return Object.assign(configByCategory[category], modifier);\n}\n\ntype CategoryConfigModifiers = {\n suggestionMode?: SuggestionMode;\n};\n","import { EmojiStyle } from '../types/exposedTypes';\n\nconst CDN_URL_APPLE =\n 'https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/';\nconst CDN_URL_FACEBOOK =\n 'https://cdn.jsdelivr.net/npm/emoji-datasource-facebook/img/facebook/64/';\nconst CDN_URL_TWITTER =\n 'https://cdn.jsdelivr.net/npm/emoji-datasource-twitter/img/twitter/64/';\nconst CDN_URL_GOOGLE =\n 'https://cdn.jsdelivr.net/npm/emoji-datasource-google/img/google/64/';\n\nexport function cdnUrl(emojiStyle: EmojiStyle): string {\n switch (emojiStyle) {\n case EmojiStyle.TWITTER:\n return CDN_URL_TWITTER;\n case EmojiStyle.GOOGLE:\n return CDN_URL_GOOGLE;\n case EmojiStyle.FACEBOOK:\n return CDN_URL_FACEBOOK;\n case EmojiStyle.APPLE:\n default:\n return CDN_URL_APPLE;\n }\n}\n","import { SkinTones } from '../types/exposedTypes';\n\nconst skinToneVariations = [\n SkinTones.NEUTRAL,\n SkinTones.LIGHT,\n SkinTones.MEDIUM_LIGHT,\n SkinTones.MEDIUM,\n SkinTones.MEDIUM_DARK,\n SkinTones.DARK\n];\n\nexport const skinTonesNamed = Object.entries(SkinTones).reduce(\n (acc, [key, value]) => {\n acc[value] = key;\n return acc;\n },\n {} as Record<string, string>\n);\n\nexport const skinTonesMapped: Record<\n string,\n string\n> = skinToneVariations.reduce(\n (mapped, skinTone) =>\n Object.assign(mapped, {\n [skinTone]: skinTone\n }),\n {}\n);\n\nexport default skinToneVariations;\n","import emojis from '../data/emojis';\n\nexport enum EmojiProperties {\n name = 'n',\n unified = 'u',\n variations = 'v',\n added_in = 'a',\n imgUrl = 'imgUrl'\n}\n\nexport interface DataEmoji extends WithName {\n [EmojiProperties.unified]: string;\n [EmojiProperties.variations]?: string[];\n [EmojiProperties.added_in]: string;\n [EmojiProperties.imgUrl]?: string;\n}\n\nexport type DataEmojis = DataEmoji[];\n\nexport type DataGroups = keyof typeof emojis;\n\nexport type WithName = {\n [EmojiProperties.name]: string[];\n};\n","import { DataEmoji } from './DataTypes';\nimport { allEmojis, emojiNames, emojiUnified } from './emojiSelectors';\n\nexport const alphaNumericEmojiIndex: BaseIndex = {};\n\nsetTimeout(() => {\n allEmojis.reduce((searchIndex, emoji) => {\n indexEmoji(emoji);\n return searchIndex;\n }, alphaNumericEmojiIndex as BaseIndex);\n});\n\ntype BaseIndex = Record<string, Record<string, DataEmoji>>;\n\nexport function indexEmoji(emoji: DataEmoji): void {\n const joinedNameString = emojiNames(emoji)\n .flat()\n .join('')\n .toLowerCase()\n .replace(/[^a-zA-Z\\d]/g, '')\n .split('');\n\n joinedNameString.forEach(char => {\n alphaNumericEmojiIndex[char] = alphaNumericEmojiIndex[char] ?? {};\n\n alphaNumericEmojiIndex[char][emojiUnified(emoji)] = emoji;\n });\n}\n","import { Categories } from '../config/categoryConfig';\nimport { cdnUrl } from '../config/cdnUrls';\nimport { CustomEmoji } from '../config/customEmojiConfig';\nimport emojis from '../data/emojis';\nimport skinToneVariations, {\n skinTonesMapped\n} from '../data/skinToneVariations';\nimport { EmojiStyle, SkinTones } from '../types/exposedTypes';\n\nimport { DataEmoji, DataEmojis, EmojiProperties, WithName } from './DataTypes';\nimport { indexEmoji } from './alphaNumericEmojiIndex';\n\nexport function emojiNames(emoji: WithName): string[] {\n return emoji[EmojiProperties.name] ?? [];\n}\n\nexport function addedIn(emoji: DataEmoji): number {\n return parseFloat(emoji[EmojiProperties.added_in]);\n}\n\nexport function emojiName(emoji?: WithName): string {\n if (!emoji) {\n return '';\n }\n\n return emojiNames(emoji)[0];\n}\n\nexport function unifiedWithoutSkinTone(unified: string): string {\n const splat = unified.split('-');\n const [skinTone] = splat.splice(1, 1);\n\n if (skinTonesMapped[skinTone]) {\n return splat.join('-');\n }\n\n return unified;\n}\n\nexport function emojiUnified(emoji: DataEmoji, skinTone?: string): string {\n const unified = emoji[EmojiProperties.unified];\n\n if (!skinTone || !emojiHasVariations(emoji)) {\n return unified;\n }\n\n return emojiVariationUnified(emoji, skinTone) ?? unified;\n}\n\nexport function emojisByCategory(category: Categories): DataEmojis {\n // @ts-ignore\n return emojis?.[category] ?? [];\n}\n\n// WARNING: DO NOT USE DIRECTLY\nexport function emojiUrlByUnified(\n unified: string,\n emojiStyle: EmojiStyle\n): string {\n return `${cdnUrl(emojiStyle)}${unified}.png`;\n}\n\nexport function emojiVariations(emoji: DataEmoji): string[] {\n return emoji[EmojiProperties.variations] ?? [];\n}\n\nexport function emojiHasVariations(emoji: DataEmoji): boolean {\n return emojiVariations(emoji).length > 0;\n}\n\nexport function emojiVariationUnified(\n emoji: DataEmoji,\n skinTone?: string\n): string | undefined {\n return skinTone\n ? emojiVariations(emoji).find(variation => variation.includes(skinTone))\n : emojiUnified(emoji);\n}\n\nexport function emojiByUnified(unified?: string): DataEmoji | undefined {\n if (!unified) {\n return;\n }\n\n if (allEmojisByUnified[unified]) {\n return allEmojisByUnified[unified];\n }\n\n const withoutSkinTone = unifiedWithoutSkinTone(unified);\n return allEmojisByUnified[withoutSkinTone];\n}\n\nexport const allEmojis: DataEmojis = Object.values(emojis).flat();\n\nexport function setCustomEmojis(customEmojis: CustomEmoji[]): void {\n emojis[Categories.CUSTOM].length = 0;\n\n customEmojis.forEach(emoji => {\n const emojiData = customToRegularEmoji(emoji);\n\n emojis[Categories.CUSTOM].push(emojiData as never);\n\n if (allEmojisByUnified[emojiData[EmojiProperties.unified]]) {\n return;\n }\n\n allEmojis.push(emojiData);\n allEmojisByUnified[emojiData[EmojiProperties.unified]] = emojiData;\n indexEmoji(emojiData);\n });\n}\n\nfunction customToRegularEmoji(emoji: CustomEmoji): DataEmoji {\n return {\n [EmojiProperties.name]: emoji.names.map(name => name.toLowerCase()),\n [EmojiProperties.unified]: emoji.id.toLowerCase(),\n [EmojiProperties.added_in]: '0',\n [EmojiProperties.imgUrl]: emoji.imgUrl\n };\n}\n\nconst allEmojisByUnified: {\n [unified: string]: DataEmoji;\n} = {};\n\nsetTimeout(() => {\n allEmojis.reduce((allEmojis, Emoji) => {\n allEmojis[emojiUnified(Emoji)] = Emoji;\n\n if (emojiHasVariations(Emoji)) {\n emojiVariations(Emoji).forEach(variation => {\n allEmojis[variation] = Emoji;\n });\n }\n\n return allEmojis;\n }, allEmojisByUnified);\n});\n\nexport function activeVariationFromUnified(unified: string): SkinTones | null {\n const [, suspectedSkinTone] = unified.split('-') as [string, SkinTones];\n return skinToneVariations.includes(suspectedSkinTone)\n ? suspectedSkinTone\n : null;\n}\n","import * as React from 'react'\n\nimport { GetEmojiUrl } from '../components/emoji/BaseEmojiProps';\nimport {\n setCustomEmojis,\n emojiUrlByUnified\n} from '../dataUtils/emojiSelectors';\nimport {\n EmojiClickData,\n EmojiStyle,\n SkinTonePickerLocation,\n SkinTones,\n SuggestionMode,\n Theme\n} from '../types/exposedTypes';\n\nimport {\n CategoriesConfig,\n baseCategoriesConfig,\n mergeCategoriesConfig\n} from './categoryConfig';\nimport { CustomEmoji } from './customEmojiConfig';\n\nconst KNOWN_FAILING_EMOJIS = ['2640-fe0f', '2642-fe0f', '2695-fe0f'];\n\nexport const DEFAULT_SEARCH_PLACEHOLDER = 'Search';\nexport const SEARCH_RESULTS_NO_RESULTS_FOUND = 'No results found';\nexport const SEARCH_RESULTS_SUFFIX =\n ' found. Use up and down arrow keys to navigate.';\nexport const SEARCH_RESULTS_ONE_RESULT_FOUND =\n '1 result' + SEARCH_RESULTS_SUFFIX;\nexport const SEARCH_RESULTS_MULTIPLE_RESULTS_FOUND =\n '%n results' + SEARCH_RESULTS_SUFFIX;\n\nexport function mergeConfig(\n userConfig: PickerConfig = {}\n): PickerConfigInternal {\n const base = basePickerConfig();\n\n const previewConfig = Object.assign(\n base.previewConfig,\n userConfig.previewConfig ?? {}\n );\n const config = Object.assign(base, userConfig);\n\n const categories = mergeCategoriesConfig(userConfig.categories, {\n suggestionMode: config.suggestedEmojisMode\n });\n\n setCustomEmojis(config.customEmojis ?? []);\n\n const skinTonePickerLocation = config.searchDisabled\n ? SkinTonePickerLocation.PREVIEW\n : config.skinTonePickerLocation;\n\n return {\n ...config,\n categories,\n previewConfig,\n skinTonePickerLocation\n };\n}\n\nexport function basePickerConfig(): PickerConfigInternal {\n return {\n autoFocusSearch: true,\n categories: baseCategoriesConfig(),\n className: '',\n customEmojis: [],\n defaultSkinTone: SkinTones.NEUTRAL,\n emojiStyle: EmojiStyle.APPLE,\n emojiVersion: null,\n getEmojiUrl: emojiUrlByUnified,\n height: 450,\n lazyLoadEmojis: false,\n previewConfig: {\n ...basePreviewConfig\n },\n searchDisabled: false,\n searchPlaceHolder: DEFAULT_SEARCH_PLACEHOLDER,\n searchPlaceholder: DEFAULT_SEARCH_PLACEHOLDER,\n skinTonePickerLocation: SkinTonePickerLocation.SEARCH,\n skinTonesDisabled: false,\n style: {},\n suggestedEmojisMode: SuggestionMode.FREQUENT,\n theme: Theme.LIGHT,\n unicodeToHide: new Set<string>(KNOWN_FAILING_EMOJIS),\n width: 350\n };\n}\n\nexport type PickerConfigInternal = {\n emojiVersion: string | null;\n searchPlaceHolder: string;\n searchPlaceholder: string;\n defaultSkinTone: SkinTones;\n skinTonesDisabled: boolean;\n autoFocusSearch: boolean;\n emojiStyle: EmojiStyle;\n categories: CategoriesConfig;\n theme: Theme;\n suggestedEmojisMode: SuggestionMode;\n lazyLoadEmojis: boolean;\n previewConfig: PreviewConfig;\n className: string;\n height: PickerDimensions;\n width: PickerDimensions;\n style: React.CSSProperties;\n getEmojiUrl: GetEmojiUrl;\n searchDisabled: boolean;\n skinTonePickerLocation: SkinTonePickerLocation;\n unicodeToHide: Set<string>;\n customEmojis: CustomEmoji[];\n};\n\nexport type PreviewConfig = {\n defaultEmoji: string;\n defaultCaption: string;\n showPreview: boolean;\n};\n\nconst basePreviewConfig: PreviewConfig = {\n defaultEmoji: '1f60a',\n defaultCaption: \"What's your mood?\",\n showPreview: true\n};\n\ntype ConfigExternal = {\n previewConfig: Partial<PreviewConfig>;\n onEmojiClick: (emoji: EmojiClickData, event: MouseEvent) => void;\n} & Omit<PickerConfigInternal, 'previewConfig' | 'unicodeToHide'>;\n\nexport type PickerConfig = Partial<ConfigExternal>;\n\nexport type PickerDimensions = string | number;\n","import * as React from 'react';\n\nimport {\n basePickerConfig,\n mergeConfig,\n PickerConfig,\n PickerConfigInternal\n} from '../../config/config';\n\ntype Props = PickerConfig &\n Readonly<{\n children: React.ReactNode;\n }>;\n\nconst ConfigContext = React.createContext<PickerConfigInternal>(\n basePickerConfig()\n);\n\nexport function PickerConfigProvider({ children, ...config }: Props) {\n const mergedConfig = useSetConfig(config);\n\n return (\n <ConfigContext.Provider value={mergedConfig}>\n {children}\n </ConfigContext.Provider>\n );\n}\n\nexport function useSetConfig(config: PickerConfig) {\n const [mergedConfig, setMergedConfig] = React.useState(() =>\n mergeConfig(config)\n );\n\n React.useEffect(() => {\n if (config.customEmojis?.length !== mergedConfig.customEmojis?.length) {\n setMergedConfig(mergeConfig(config));\n }\n // not gonna...\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [config.customEmojis?.length]);\n\n return mergedConfig;\n}\n\nexport function usePickerConfig() {\n return React.useContext(ConfigContext);\n}\n","import React from 'react';\n\nimport { EmojiClickData } from '../types/exposedTypes';\n\nexport type MutableConfig = {\n onEmojiClick?: (emoji: EmojiClickData, event: MouseEvent) => void;\n};\n\nexport const MutableConfigContext = React.createContext<\n React.MutableRefObject<MutableConfig>\n>({} as React.MutableRefObject<MutableConfig>);\n\nexport function useMutableConfig(): React.MutableRefObject<MutableConfig> {\n const mutableConfig = React.useContext(MutableConfigContext);\n return mutableConfig;\n}\n\nexport function useDefineMutableConfig(\n config: MutableConfig\n): React.MutableRefObject<MutableConfig> {\n const MutableConfigRef = React.useRef<MutableConfig>({\n onEmojiClick: config.onEmojiClick || emptyFunc\n });\n\n React.useEffect(() => {\n MutableConfigRef.current.onEmojiClick = config.onEmojiClick || emptyFunc;\n }, [config.onEmojiClick]);\n\n return MutableConfigRef;\n}\n\nfunction emptyFunc() {}\n","import * as React from 'react';\n\nimport { usePickerConfig } from '../components/context/PickerConfigContext';\nimport {\n EmojiClickData,\n EmojiStyle,\n SkinTonePickerLocation,\n SkinTones,\n SuggestionMode,\n Theme\n} from '../types/exposedTypes';\n\nimport { CategoriesConfig } from './categoryConfig';\nimport {\n DEFAULT_SEARCH_PLACEHOLDER,\n SEARCH_RESULTS_NO_RESULTS_FOUND,\n SEARCH_RESULTS_ONE_RESULT_FOUND,\n SEARCH_RESULTS_MULTIPLE_RESULTS_FOUND,\n PickerDimensions,\n PreviewConfig\n} from './config';\nimport { CustomEmoji } from './customEmojiConfig';\nimport { useMutableConfig } from './mutableConfig';\n\nexport function useSearchPlaceHolderConfig(): string {\n const { searchPlaceHolder, searchPlaceholder } = usePickerConfig();\n return (\n [searchPlaceHolder, searchPlaceholder].find(\n p => p !== DEFAULT_SEARCH_PLACEHOLDER\n ) ?? DEFAULT_SEARCH_PLACEHOLDER\n );\n}\n\nexport function useDefaultSkinToneConfig(): SkinTones {\n const { defaultSkinTone } = usePickerConfig();\n return defaultSkinTone;\n}\n\nexport function useSkinTonesDisabledConfig(): boolean {\n const { skinTonesDisabled } = usePickerConfig();\n return skinTonesDisabled;\n}\n\nexport function useEmojiStyleConfig(): EmojiStyle {\n const { emojiStyle } = usePickerConfig();\n return emojiStyle;\n}\n\nexport function useAutoFocusSearchConfig(): boolean {\n const { autoFocusSearch } = usePickerConfig();\n return autoFocusSearch;\n}\n\nexport function useCategoriesConfig(): CategoriesConfig {\n const { categories } = usePickerConfig();\n return categories;\n}\n\nexport function useCustomEmojisConfig(): CustomEmoji[] {\n const { customEmojis } = usePickerConfig();\n return customEmojis;\n}\n\nexport function useOnEmojiClickConfig(): (\n emoji: EmojiClickData,\n event: MouseEvent\n) => void {\n const { current } = useMutableConfig();\n return current.onEmojiClick || (() => {});\n}\n\nexport function usePreviewConfig(): PreviewConfig {\n const { previewConfig } = usePickerConfig();\n return previewConfig;\n}\n\nexport function useThemeConfig(): Theme {\n const { theme } = usePickerConfig();\n\n return theme;\n}\n\nexport function useSuggestedEmojisModeConfig(): SuggestionMode {\n const { suggestedEmojisMode } = usePickerConfig();\n return suggestedEmojisMode;\n}\n\nexport function useLazyLoadEmojisConfig(): boolean {\n const { lazyLoadEmojis } = usePickerConfig();\n return lazyLoadEmojis;\n}\n\nexport function useClassNameConfig(): string {\n const { className } = usePickerConfig();\n return className;\n}\n\nexport function useStyleConfig(): React.CSSProperties {\n const { height, width, style } = usePickerConfig();\n return { height: getDimension(height), width: getDimension(width), ...style };\n}\n\nexport function useEmojiVersionConfig(): string | null {\n const { emojiVersion } = usePickerConfig();\n return emojiVersion;\n}\n\nexport function useSearchDisabledConfig(): boolean {\n const { searchDisabled } = usePickerConfig();\n return searchDisabled;\n}\n\nexport function useSkinTonePickerLocationConfig(): SkinTonePickerLocation {\n const { skinTonePickerLocation } = usePickerConfig();\n return skinTonePickerLocation;\n}\n\nexport function useUnicodeToHide() {\n const { unicodeToHide } = usePickerConfig();\n return unicodeToHide;\n}\n\nexport function useGetEmojiUrlConfig(): (\n unified: string,\n style: EmojiStyle\n) => string {\n const { getEmojiUrl } = usePickerConfig();\n return getEmojiUrl;\n}\n\nfunction getDimension(dimensionConfig: PickerDimensions): PickerDimensions {\n return typeof dimensionConfig === 'number'\n ? `${dimensionConfig}px`\n : dimensionConfig;\n}\n\nexport function useSearchResultsConfig(searchResultsCount: number): string {\n const hasResults = searchResultsCount > 0;\n const isPlural = searchResultsCount > 1;\n\n if (hasResults) {\n return isPlural ?\n SEARCH_RESULTS_MULTIPLE_RESULTS_FOUND.replace('%n', searchResultsCount.toString())\n : SEARCH_RESULTS_ONE_RESULT_FOUND;\n }\n\n return SEARCH_RESULTS_NO_RESULTS_FOUND;\n}\n","import { useRef, useState } from 'react';\n\nexport function useDebouncedState<T>(\n initialValue: T,\n delay: number = 0\n): [T, (value: T) => Promise<T>] {\n const [state, setState] = useState<T>(initialValue);\n const timer = useRef<number | null>(null);\n\n function debouncedSetState(value: T) {\n return new Promise<T>(resolve => {\n if (timer.current) {\n clearTimeout(timer.current);\n }\n\n timer.current = window?.setTimeout(() => {\n setState(value);\n resolve(value);\n }, delay);\n });\n }\n\n return [state, debouncedSetState];\n}\n","import { useUnicodeToHide } from \"../config/useConfig\";\n\nexport function useIsUnicodeHidden() {\n const unicodeToHide = useUnicodeToHide();\n return (emojiUnified: string) => unicodeToHide.has(emojiUnified);\n }\n","import { useRef, useMemo } from 'react';\n\nimport { useEmojiVersionConfig } from '../config/useConfig';\nimport { DataEmoji } from '../dataUtils/DataTypes';\nimport {\n addedIn,\n allEmojis,\n emojiUnified,\n unifiedWithoutSkinTone\n} from '../dataUtils/emojiSelectors';\n\nimport { useIsUnicodeHidden } from './useHideEmojisByUniocode';\n\nexport function useDisallowedEmojis() {\n const DisallowedEmojisRef = useRef<Record<string, boolean>>({});\n const emojiVersionConfig = useEmojiVersionConfig();\n\n return useMemo(() => {\n const emojiVersion = parseFloat(`${emojiVersionConfig}`);\n\n if (!emojiVersionConfig || Number.isNaN(emojiVersion)) {\n return DisallowedEmojisRef.current;\n }\n\n return allEmojis.reduce((disallowedEmojis, emoji) => {\n if (addedInNewerVersion(emoji, emojiVersion)) {\n disallowedEmojis[emojiUnified(emoji)] = true;\n }\n\n return disallowedEmojis;\n }, DisallowedEmojisRef.current);\n }, [emojiVersionConfig]);\n}\n\nexport function useIsEmojiDisallowed() {\n const disallowedEmojis = useDisallowedEmojis();\n const isUnicodeHidden = useIsUnicodeHidden();\n\n return function isEmojiDisallowed(emoji: DataEmoji) {\n const unified = unifiedWithoutSkinTone(emojiUnified(emoji));\n\n return Boolean(disallowedEmojis[unified] || isUnicodeHidden(unified));\n };\n}\n\nfunction addedInNewerVersion(\n emoji: DataEmoji,\n supportedLevel: number\n): boolean {\n return addedIn(emoji) > supportedLevel;\n}\n","import { useEffect } from 'react';\nimport * as React from 'react';\n\nexport function useMarkInitialLoad(\n dispatch: React.Dispatch<React.SetStateAction<boolean>>\n) {\n useEffect(() => {\n dispatch(true);\n }, [dispatch]);\n}\n","import * as React from 'react';\nimport { useState } from 'react';\n\nimport { useDefaultSkinToneConfig } from '../../config/useConfig';\nimport { DataEmoji } from '../../dataUtils/DataTypes';\nimport { alphaNumericEmojiIndex } from '../../dataUtils/alphaNumericEmojiIndex';\nimport { useDebouncedState } from '../../hooks/useDebouncedState';\nimport { useDisallowedEmojis } from '../../hooks/useDisallowedEmojis';\nimport { FilterDict } from '../../hooks/useFilter';\nimport { useMarkInitialLoad } from '../../hooks/useInitialLoad';\nimport { SkinTones } from '../../types/exposedTypes';\n\nexport function PickerContextProvider({ children }: Props) {\n const disallowedEmojis = useDisallowedEmojis();\n const defaultSkinTone = useDefaultSkinToneConfig();\n\n // Initialize the filter with the inititial dictionary\n const filterRef = React.useRef<FilterState>(alphaNumericEmojiIndex);\n const disallowClickRef = React.useRef<boolean>(false);\n const disallowMouseRef = React.useRef<boolean>(false);\n const disallowedEmojisRef = React.useRef<Record<string, boolean>>(\n disallowedEmojis\n );\n\n const suggestedUpdateState = useDebouncedState(Date.now(), 200);\n const searchTerm = useDebouncedState('', 100);\n const skinToneFanOpenState = useState<boolean>(false);\n const activeSkinTone = useState<SkinTones>(defaultSkinTone);\n const activeCategoryState = useState<ActiveCategoryState>(null);\n const emojisThatFailedToLoadState = useState<Set<string>>(new Set());\n const emojiVariationPickerState = useState<DataEmoji | null>(null);\n const [isPastInitialLoad, setIsPastInitialLoad] = useState(false);\n\n useMarkInitialLoad(setIsPastInitialLoad);\n\n return (\n <PickerContext.Provider\n value={{\n activeCategoryState,\n activeSkinTone,\n disallowClickRef,\n disallowMouseRef,\n disallowedEmojisRef,\n emojiVariationPickerState,\n emojisThatFailedToLoadState,\n filterRef,\n isPastInitialLoad,\n searchTerm,\n skinToneFanOpenState,\n suggestedUpdateState\n }}\n >\n {children}\n </PickerContext.Provider>\n );\n}\n\ntype ReactState<T> = [T, React.Dispatch<React.SetStateAction<T>>];\n\nconst PickerContext = React.createContext<{\n searchTerm: [string, (term: string) => Promise<string>];\n suggestedUpdateState: [number, (term: number) => void];\n activeCategoryState: ReactState<ActiveCategoryState>;\n activeSkinTone: ReactState<SkinTones>;\n emojisThatFailedToLoadState: ReactState<Set<string>>;\n isPastInitialLoad: boolean;\n emojiVariationPickerState: ReactState<DataEmoji | null>;\n skinToneFanOpenState: ReactState<boolean>;\n filterRef: React.MutableRefObject<FilterState>;\n disallowClickRef: React.MutableRefObject<boolean>;\n disallowMouseRef: React.MutableRefObject<boolean>;\n disallowedEmojisRef: React.MutableRefObject<Record<string, boolean>>;\n}>({\n activeCategoryState: [null, () => {}],\n activeSkinTone: [SkinTones.NEUTRAL, () => {}],\n disallowClickRef: { current: false },\n disallowMouseRef: { current: false },\n disallowedEmojisRef: { current: {} },\n emojiVariationPickerState: [null, () => {}],\n emojisThatFailedToLoadState: [new Set(), () => {}],\n filterRef: { current: {} },\n isPastInitialLoad: true,\n searchTerm: ['', () => new Promise<string>(() => undefined)],\n skinToneFanOpenState: [false, () => {}],\n suggestedUpdateState: [Date.now(), () => {}]\n});\n\ntype Props = Readonly<{\n children: React.ReactNode;\n}>;\n\nexport function useFilterRef() {\n const { filterRef } = React.useContext(PickerContext);\n return filterRef;\n}\n\nexport function useDisallowClickRef() {\n const { disallowClickRef } = React.useContext(PickerContext);\n return disallowClickRef;\n}\n\nexport function useDisallowMouseRef() {\n const { disallowMouseRef } = React.useContext(PickerContext);\n return disallowMouseRef;\n}\n\nexport function useSearchTermState() {\n const { searchTerm } = React.useContext(PickerContext);\n return searchTerm;\n}\n\nexport function useActiveSkinToneState(): [\n SkinTones,\n (skinTone: SkinTones) => void\n] {\n const { activeSkinTone } = React.useContext(PickerContext);\n return activeSkinTone;\n}\n\nexport function useEmojisThatFailedToLoadState() {\n const { emojisThatFailedToLoadState } = React.useContext(PickerContext);\n return emojisThatFailedToLoadState;\n}\n\nexport function useIsPastInitialLoad(): boolean {\n const { isPastInitialLoad } = React.useContext(PickerContext);\n return isPastInitialLoad;\n}\n\nexport function useEmojiVariationPickerState() {\n const { emojiVariationPickerState } = React.useContext(PickerContext);\n return emojiVariationPickerState;\n}\n\nexport function useSkinToneFanOpenState() {\n const { skinToneFanOpenState } = React.useContext(PickerContext);\n return skinToneFanOpenState;\n}\n\nexport function useDisallowedEmojisRef() {\n const { disallowedEmojisRef } = React.useContext(PickerContext);\n return disallowedEmojisRef;\n}\n\nexport function useUpdateSuggested(): [number, () => void] {\n const { suggestedUpdateState } = React.useContext(PickerContext);\n\n const [suggestedUpdated, setsuggestedUpdate] = suggestedUpdateState;\n return [\n suggestedUpdated,\n function updateSuggested() {\n setsuggestedUpdate(Date.now());\n }\n ];\n}\n\nexport type FilterState = Record<string, FilterDict>;\n\ntype ActiveCategoryState = null | string;\n","import { useEffect } from 'react';\n\nimport { useBodyRef } from '../components/context/ElementRefContext';\nimport { useDisallowMouseRef } from '../components/context/PickerContext';\n\nexport function useDisallowMouseMove() {\n const DisallowMouseRef = useDisallowMouseRef();\n return function disallowMouseMove() {\n DisallowMouseRef.current = true;\n };\n}\n\nexport function useAllowMouseMove() {\n const DisallowMouseRef = useDisallowMouseRef();\n return function allowMouseMove() {\n DisallowMouseRef.current = false;\n };\n}\n\nexport function useIsMouseDisallowed() {\n const DisallowMouseRef = useDisallowMouseRef();\n return function isMouseDisallowed() {\n return DisallowMouseRef.current;\n };\n}\n\nexport function useOnMouseMove() {\n const BodyRef = useBodyRef();\n const allowMouseMove = useAllowMouseMove();\n const isMouseDisallowed = useIsMouseDisallowed();\n\n useEffect(() => {\n const bodyRef = BodyRef.current;\n bodyRef?.addEventListener('mousemove', onMouseMove, {\n passive: true\n });\n\n function onMouseMove() {\n if (isMouseDisallowed()) {\n allowMouseMove();\n }\n }\n return () => {\n bodyRef?.removeEventListener('mousemove', onMouseMove);\n };\n }, [BodyRef, allowMouseMove, isMouseDisallowed]);\n}\n","import { NullableElement } from './selectors';\n\nexport function elementCountInRow(\n parent: NullableElement,\n element: NullableElement\n): number {\n if (!parent || !element) {\n return 0;\n }\n\n const parentWidth = parent.getBoundingClientRect().width;\n const elementWidth = element.getBoundingClientRect().width;\n return Math.floor(parentWidth / elementWidth);\n}\n\nexport function elementIndexInRow(\n parent: NullableElement,\n element: NullableElement\n): number {\n if (!parent || !element) {\n return 0;\n }\n\n const elementWidth = element.getBoundingClientRect().width;\n const elementLeft = element.getBoundingClientRect().left;\n const parentLeft = parent.getBoundingClientRect().left;\n\n return Math.floor((elementLeft - parentLeft) / elementWidth);\n}\n\nexport function rowNumber(\n parent: NullableElement,\n element: NullableElement\n): number {\n if (!parent || !element) {\n return 0;\n }\n\n const elementHeight = element.getBoundingClientRect().height;\n const elementTop = element.getBoundingClientRect().top;\n const parentTop = parent.getBoundingClientRect().top;\n return Math.round((elementTop - parentTop) / elementHeight);\n}\n\nexport function hasNextRow(\n parent: NullableElement,\n element: NullableElement\n): boolean {\n if (!parent || !element) {\n return false;\n }\n\n const elementHeight = element.getBoundingClientRect().height;\n const elementTop = element.getBoundingClientRect().top;\n const parentTop = parent.getBoundingClientRect().top;\n const parentHeight = parent.getBoundingClientRect().height;\n\n return Math.round(elementTop - parentTop + elementHeight) < parentHeight;\n}\n\nfunction getRowElements(\n elements: HTMLElement[],\n row: number,\n elementsInRow: number\n): HTMLElement[] {\n if (row === -1) {\n const lastRow = Math.floor((elements.length - 1) / elementsInRow);\n const firstElementIndex = lastRow * elementsInRow;\n const lastElementIndex = elements.length - 1;\n return elements.slice(firstElementIndex, lastElementIndex + 1);\n }\n\n return elements.slice(row * elementsInRow, (row + 1) * elementsInRow);\n}\n\nfunction getNextRowElements(\n allElements: HTMLElement[],\n currentRow: number,\n elementsInRow: number\n): HTMLElement[] {\n const nextRow = currentRow + 1;\n\n if (nextRow * elementsInRow > allElements.length) {\n return [];\n }\n\n return getRowElements(allElements, nextRow, elementsInRow);\n}\n\nexport function getElementInRow(\n elements: HTMLElement[],\n row: number,\n elementsInRow: number,\n indexInRow: number\n): NullableElement {\n const rowElements = getRowElements(elements, row, elementsInRow);\n // get element, default to last\n return rowElements[indexInRow] || rowElements[rowElements.length - 1] || null;\n}\n\nexport function getElementInNextRow(\n allElements: HTMLElement[],\n currentRow: number,\n elementsInRow: number,\n index: number\n): NullableElement {\n const nextRowElements = getNextRowElements(\n allElements,\n currentRow,\n elementsInRow\n );\n\n // return item in index, or last item in row\n return (\n nextRowElements[index] ||\n nextRowElements[nextRowElements.length - 1] ||\n null\n );\n}\n\nexport function getElementInPrevRow(\n allElements: HTMLElement[],\n currentRow: number,\n elementsInRow: number,\n index: number\n): NullableElement {\n const prevRowElements = getRowElements(\n allElements,\n currentRow - 1,\n elementsInRow\n );\n\n // default to last\n return (\n prevRowElements[index] ||\n prevRowElements[prevRowElements.length - 1] ||\n null\n );\n}\n\nexport function firstVisibleElementInContainer(\n parent: NullableElement,\n elements: HTMLElement[]\n): NullableElement {\n if (!parent || !elements.length) {\n return null;\n }\n\n const parentTop = parent.getBoundingClientRect().top;\n const parentBottom = parent.getBoundingClientRect().bottom;\n\n const visibleElements = elements.find(element => {\n const elementTop = element.getBoundingClientRect().top;\n const elementBottom = element.getBoundingClientRect().bottom;\n\n return (\n (elementTop >= parentTop && elementTop <= parentBottom) ||\n (elementBottom >= parentTop && elementBottom <= parentBottom)\n );\n });\n\n return visibleElements || null;\n}\n\nexport function hasNextElementSibling(element: HTMLElement) {\n return !!element.nextElementSibling;\n}\n","import { DataEmoji } from '../dataUtils/DataTypes';\nimport {\n emojiByUnified,\n unifiedWithoutSkinTone\n} from '../dataUtils/emojiSelectors';\n\nimport { asSelectors, ClassNames } from './classNames';\nimport { firstVisibleElementInContainer } from './elementPositionInRow';\n\nexport type NullableElement = HTMLElement | null;\n\nexport const EmojiButtonSelector = `button${asSelectors(ClassNames.emoji)}`;\nexport const VisibleEmojiSelector = [\n EmojiButtonSelector,\n asSelectors(ClassNames.visible),\n `:not(${asSelectors(ClassNames.hidden)})`\n].join('');\n\nexport function buttonFromTarget(\n emojiElement: NullableElement\n): HTMLButtonElement | null {\n return emojiElement?.closest(EmojiButtonSelector) ?? null;\n}\n\nexport function isEmojiButton(element: NullableElement): boolean {\n if (!element) {\n return false;\n }\n\n return element.matches(EmojiButtonSelector);\n}\n\nexport function emojiFromElement(\n element: NullableElement\n): [DataEmoji, string] | [] {\n const originalUnified = originalUnifiedFromEmojiElement(element);\n const unified = unifiedFromEmojiElement(element);\n\n if (!originalUnified) {\n return [];\n }\n\n const emoji = emojiByUnified(unified ?? originalUnified);\n\n if (!emoji) {\n return [];\n }\n\n return [emoji, unified as string];\n}\n\nexport function isEmojiElement(element: NullableElement): boolean {\n return Boolean(\n element?.matches(EmojiButtonSelector) ||\n element?.parentElement?.matches(EmojiButtonSelector)\n );\n}\n\nexport function categoryLabelFromCategory(\n category: NullableElement\n): NullableElement {\n return category?.querySelector(asSelectors(ClassNames.label)) ?? null;\n}\n\nexport function closestCategoryLabel(\n element: NullableElement\n): NullableElement {\n const category = closestCategory(element);\n return categoryLabelFromCategory(category);\n}\n\nexport function elementHeight(element: NullableElement): number {\n return element?.clientHeight ?? 0;\n}\n\nexport function emojiTrueOffsetTop(element: NullableElement): number {\n if (!element) {\n return 0;\n }\n\n const button = buttonFromTarget(element);\n const category = closestCategory(button);\n\n // compensate for the label height\n const labelHeight = categoryLabelHeight(category);\n\n return elementOffsetTop(button) + elementOffsetTop(category) + labelHeight;\n}\n\nexport function categoryLabelHeight(category: NullableElement): number {\n if (!category) {\n return 0;\n }\n\n const categoryWithoutLabel = category.querySelector(\n asSelectors(ClassNames.categoryContent)\n );\n\n return (\n (category?.clientHeight ?? 0) - (categoryWithoutLabel?.clientHeight ?? 0)\n );\n}\n\nexport function isEmojiBehindLabel(emoji: NullableElement): boolean {\n if (!emoji) {\n return false;\n }\n\n return (\n emojiDistanceFromScrollTop(emoji) <\n categoryLabelHeight(closestCategory(emoji))\n );\n}\n\nexport function queryScrollBody(root: NullableElement): NullableElement {\n if (!root) return null;\n\n return root.matches(asSelectors(ClassNames.scrollBody))\n ? root\n : root.querySelector(asSelectors(ClassNames.scrollBody));\n}\n\nexport function emojiDistanceFromScrollTop(emoji: NullableElement): number {\n if (!emoji) {\n return 0;\n }\n\n return emojiTrueOffsetTop(emoji) - (closestScrollBody(emoji)?.scrollTop ?? 0);\n}\n\nexport function closestScrollBody(element: NullableElement): NullableElement {\n if (!element) {\n return null;\n }\n\n return element.closest(asSelectors(ClassNames.scrollBody)) ?? null;\n}\n\nexport function emojiTruOffsetLeft(element: NullableElement): number {\n const button = buttonFromTarget(element);\n const category = closestCategory(button);\n\n return elementOffsetLeft(button) + elementOffsetLeft(category);\n}\n\nfunction elementOffsetTop(element: NullableElement): number {\n return element?.offsetTop ?? 0;\n}\n\nfunction elementOffsetLeft(element: NullableElement): number {\n return element?.offsetLeft ?? 0;\n}\n\nexport function unifiedFromEmojiElement(emoji: NullableElement): string | null {\n return elementDataSetKey(buttonFromTarget(emoji), 'unified') ?? null;\n}\n\nexport function originalUnifiedFromEmojiElement(\n emoji: NullableElement\n): string | null {\n const unified = unifiedFromEmojiElement(emoji);\n\n if (unified) {\n return unifiedWithoutSkinTone(unified);\n }\n return null;\n}\n\nfunction elementDataSetKey(\n element: NullableElement,\n key: string\n): string | null {\n return elementDataSet(element)[key] ?? null;\n}\n\nfunction elementDataSet(element: NullableElement): DOMStringMap {\n return element?.dataset ?? {};\n}\n\nexport function isVisibleEmoji(element: HTMLElement) {\n return element.classList.contains(ClassNames.visible);\n}\n\nexport function isHidden(element: NullableElement) {\n if (!element) return true;\n\n return element.classList.contains(ClassNames.hidden);\n}\n\nexport function allVisibleEmojis(parent: NullableElement) {\n if (!parent) {\n return [];\n }\n\n return Array.from(\n parent.querySelectorAll(VisibleEmojiSelector)\n ) as HTMLElement[];\n}\n\nexport function lastVisibleEmoji(element: NullableElement): NullableElement {\n if (!element) return null;\n\n const allEmojis = allVisibleEmojis(element);\n const [last] = allEmojis.slice(-1);\n if (!last) {\n return null;\n }\n\n if (!isVisibleEmoji(last)) {\n return prevVisibleEmoji(last);\n }\n\n return last;\n}\n\nexport function nextVisibleEmoji(element: HTMLElement): NullableElement {\n const next = element.nextElementSibling as HTMLElement;\n\n if (!next) {\n return firstVisibleEmoji(nextCategory(element));\n }\n\n if (!isVisibleEmoji(next)) {\n return nextVisibleEmoji(next);\n }\n\n return next;\n}\n\nexport function prevVisibleEmoji(element: HTMLElement): NullableElement {\n const prev = element.previousElementSibling as HTMLElement;\n\n if (!prev) {\n return lastVisibleEmoji(prevCategory(element));\n }\n\n if (!isVisibleEmoji(prev)) {\n return prevVisibleEmoji(prev);\n }\n\n return prev;\n}\n\nexport function firstVisibleEmoji(parent: NullableElement) {\n if (!parent) {\n return null;\n }\n\n const allEmojis = allVisibleEmojis(parent);\n\n return firstVisibleElementInContainer(parent, allEmojis);\n}\n\nexport function prevCategory(element: NullableElement): NullableElement {\n const category = closestCategory(element);\n\n if (!category) {\n return null;\n }\n\n const prev = category.previousElementSibling as HTMLElement;\n\n if (!prev) {\n return null;\n }\n\n if (isHidden(prev)) {\n return prevCategory(prev);\n }\n\n return prev;\n}\n\nexport function nextCategory(element: NullableElement): NullableElement {\n const category = closestCategory(element);\n\n if (!category) {\n return null;\n }\n\n const next = category.nextElementSibling as HTMLElement;\n\n if (!next) {\n return null;\n }\n\n if (isHidden(next)) {\n return nextCategory(next);\n }\n\n return next;\n}\n\nexport function closestCategory(element: NullableElement) {\n if (!element) {\n return null;\n }\n return element.closest(asSelectors(ClassNames.category)) as HTMLElement;\n}\n\nexport function closestCategoryContent(element: NullableElement) {\n if (!element) {\n return null;\n }\n return element.closest(\n asSelectors(ClassNames.categoryContent)\n ) as HTMLElement;\n}\n","export function parseNativeEmoji(unified: string): string {\n return unified\n .split('-')\n .map(hex => String.fromCodePoint(parseInt(hex, 16)))\n .join('');\n}\n","import { SkinTones, SuggestionMode } from '../types/exposedTypes';\n\nimport { DataEmoji } from './DataTypes';\nimport { emojiUnified } from './emojiSelectors';\n\nconst SUGGESTED_LS_KEY = 'epr_suggested';\n\ntype SuggestedItem = {\n unified: string;\n original: string;\n count: number;\n};\n\ntype Suggested = SuggestedItem[];\n\nexport function getSuggested(mode?: SuggestionMode): Suggested {\n try {\n if (!window?.localStorage) {\n return [];\n }\n const recent = JSON.parse(\n window?.localStorage.getItem(SUGGESTED_LS_KEY) ?? '[]'\n ) as Suggested;\n\n if (mode === SuggestionMode.FREQUENT) {\n return recent.sort((a, b) => b.count - a.count);\n }\n\n return recent;\n } catch {\n return [];\n }\n}\n\nexport function setSuggested(emoji: DataEmoji, skinTone: SkinTones) {\n const recent = getSuggested();\n\n const unified = emojiUnified(emoji, skinTone);\n const originalUnified = emojiUnified(emoji);\n\n let existing = recent.find(({ unified: u }) => u === unified);\n\n let nextList: SuggestedItem[];\n\n if (existing) {\n nextList = [existing].concat(recent.filter(i => i !== existing));\n } else {\n existing = {\n unified,\n original: originalUnified,\n count: 0\n };\n nextList = [existing, ...recent];\n }\n\n existing.count++;\n\n nextList.length = Math.min(nextList.length, 14);\n\n try {\n window?.localStorage.setItem(SUGGESTED_LS_KEY, JSON.stringify(nextList));\n // Prevents the change from being seen immediately.\n } catch {\n // ignore\n }\n}\n","import {\n Categories,\n CategoryConfig,\n CustomCategoryConfig\n} from '../config/categoryConfig';\nimport { CustomEmoji } from '../config/customEmojiConfig';\nimport { DataEmoji } from '../dataUtils/DataTypes';\n\nexport function isCustomCategory(\n category: CategoryConfig | CustomCategoryConfig\n): category is CustomCategoryConfig {\n return category.category === Categories.CUSTOM;\n}\n\nexport function isCustomEmoji(emoji: Partial<DataEmoji>): emoji is CustomEmoji {\n return emoji.imgUrl !== undefined;\n}\n","import { useCallback } from 'react';\n\nimport {\n useEmojiVariationPickerState,\n useSkinToneFanOpenState\n} from '../components/context/PickerContext';\n\nexport function useCloseAllOpenToggles() {\n const [variationPicker, setVariationPicker] = useEmojiVariationPickerState();\n const [skinToneFanOpen, setSkinToneFanOpen] = useSkinToneFanOpenState();\n\n const closeAllOpenToggles = useCallback(() => {\n if (variationPicker) {\n setVariationPicker(null);\n }\n\n if (skinToneFanOpen) {\n setSkinToneFanOpen(false);\n }\n }, [\n variationPicker,\n skinToneFanOpen,\n setVariationPicker,\n setSkinToneFanOpen\n ]);\n\n return closeAllOpenToggles;\n}\n\nexport function useHasOpenToggles() {\n const [variationPicker] = useEmojiVariationPickerState();\n const [skinToneFanOpen] = useSkinToneFanOpenState();\n\n return function hasOpenToggles() {\n return !!variationPicker || skinToneFanOpen;\n };\n}\n","import { emojiFromElement, NullableElement } from '../DomUtils/selectors';\nimport { useSetAnchoredEmojiRef } from '../components/context/ElementRefContext';\nimport { useEmojiVariationPickerState } from '../components/context/PickerContext';\n\nexport default function useSetVariationPicker() {\n const setAnchoredEmojiRef = useSetAnchoredEmojiRef();\n const [, setEmojiVariationPicker] = useEmojiVariationPickerState();\n\n return function setVariationPicker(element: NullableElement) {\n const [emoji] = emojiFromElement(element);\n\n if (emoji) {\n setAnchoredEmojiRef(element);\n setEmojiVariationPicker(emoji);\n }\n };\n}\n","import * as React from 'react';\nimport { useEffect, useRef } from 'react';\n\nimport {\n emojiFromElement,\n isEmojiElement,\n NullableElement\n} from '../DomUtils/selectors';\nimport {\n useActiveSkinToneState,\n useDisallowClickRef,\n useEmojiVariationPickerState,\n useUpdateSuggested\n} from '../components/context/PickerContext';\nimport { GetEmojiUrl } from '../components/emoji/BaseEmojiProps';\nimport {\n useEmojiStyleConfig,\n useGetEmojiUrlConfig,\n useOnEmojiClickConfig\n} from '../config/useConfig';\nimport { DataEmoji } from '../dataUtils/DataTypes';\nimport {\n activeVariationFromUnified,\n emojiHasVariations,\n emojiNames,\n emojiUnified\n} from '../dataUtils/emojiSelectors';\nimport { parseNativeEmoji } from '../dataUtils/parseNativeEmoji';\nimport { setSuggested } from '../dataUtils/suggested';\nimport { isCustomEmoji } from '../typeRefinements/typeRefinements';\nimport { EmojiClickData, SkinTones, EmojiStyle } from '../types/exposedTypes';\n\nimport { useCloseAllOpenToggles } from './useCloseAllOpenToggles';\nimport useSetVariationPicker from './useSetVariationPicker';\n\nexport function useMouseDownHandlers(\n BodyRef: React.MutableRefObject<NullableElement>\n) {\n const mouseDownTimerRef = useRef<undefined | number>();\n const setVariationPicker = useSetVariationPicker();\n const disallowClickRef = useDisallowClickRef();\n const [, setEmojiVariationPicker] = useEmojiVariationPickerState();\n const closeAllOpenToggles = useCloseAllOpenToggles();\n const [activeSkinTone] = useActiveSkinToneState();\n const onEmojiClick = useOnEmojiClickConfig();\n const [, updateSuggested] = useUpdateSuggested();\n const getEmojiUrl = useGetEmojiUrlConfig();\n const activeEmojiStyle = useEmojiStyleConfig();\n\n const onClick = React.useCallback(\n function onClick(event: MouseEvent) {\n if (disallowClickRef.current) {\n return;\n }\n\n closeAllOpenToggles();\n\n const [emoji, unified] = emojiFromEvent(event);\n\n if (!emoji || !unified) {\n return;\n }\n\n const skinToneToUse =\n activeVariationFromUnified(unified) || activeSkinTone;\n\n updateSuggested();\n setSuggested(emoji, skinToneToUse);\n onEmojiClick(\n emojiClickOutput(emoji, skinToneToUse, activeEmojiStyle, getEmojiUrl),\n event\n );\n },\n [\n activeSkinTone,\n closeAllOpenToggles,\n disallowClickRef,\n onEmojiClick,\n updateSuggested,\n getEmojiUrl,\n activeEmojiStyle\n ]\n );\n\n const onMouseDown = React.useCallback(\n function onMouseDown(event: MouseEvent) {\n if (mouseDownTimerRef.current) {\n clearTimeout(mouseDownTimerRef.current);\n }\n\n const [emoji] = emojiFromEvent(event);\n\n if (!emoji || !emojiHasVariations(emoji)) {\n return;\n }\n\n mouseDownTimerRef.current = window?.setTimeout(() => {\n disallowClickRef.current = true;\n mouseDownTimerRef.current = undefined;\n closeAllOpenToggles();\n setVariationPicker(event.target as HTMLElement);\n setEmojiVariationPicker(emoji);\n }, 500);\n },\n [\n disallowClickRef,\n closeAllOpenToggles,\n setVariationPicker,\n setEmojiVariationPicker\n ]\n );\n const onMouseUp = React.useCallback(\n function onMouseUp() {\n if (mouseDownTimerRef.current) {\n clearTimeout(mouseDownTimerRef.current);\n mouseDownTimerRef.current = undefined;\n } else if (disallowClickRef.current) {\n // The problem we're trying to overcome here\n // is that the emoji has both mouseup and click events\n // and when releasing a mouseup event\n // the click gets triggered too\n // So we're disallowing the click event for a short time\n\n requestAnimationFrame(() => {\n disallowClickRef.current = false;\n });\n }\n },\n [disallowClickRef]\n );\n\n useEffect(() => {\n if (!BodyRef.current) {\n return;\n }\n const bodyRef = BodyRef.current;\n bodyRef.addEventListener('click', onClick, {\n passive: true\n });\n\n bodyRef.addEventListener('mousedown', onMouseDown, {\n passive: true\n });\n bodyRef.addEventListener('mouseup', onMouseUp, {\n passive: true\n });\n\n return () => {\n bodyRef?.removeEventListener('click', onClick);\n bodyRef?.removeEventListener('mousedown', onMouseDown);\n bodyRef?.removeEventListener('mouseup', onMouseUp);\n };\n }, [BodyRef, onClick, onMouseDown, onMouseUp]);\n}\n\nfunction emojiFromEvent(event: MouseEvent): [DataEmoji, string] | [] {\n const target = event?.target as HTMLElement;\n if (!isEmojiElement(target)) {\n return [];\n }\n\n return emojiFromElement(target);\n}\n\nfunction emojiClickOutput(\n emoji: DataEmoji,\n activeSkinTone: SkinTones,\n activeEmojiStyle: EmojiStyle,\n getEmojiUrl: GetEmojiUrl\n): EmojiClickData {\n const names = emojiNames(emoji);\n\n if (isCustomEmoji(emoji)) {\n const unified = emojiUnified(emoji);\n return {\n activeSkinTone,\n emoji: unified,\n getImageUrl() {\n return emoji.imgUrl;\n },\n imageUrl: emoji.imgUrl,\n isCustom: true,\n names,\n unified,\n unifiedWithoutSkinTone: unified\n };\n }\n const unified = emojiUnified(emoji, activeSkinTone);\n\n return {\n activeSkinTone,\n emoji: parseNativeEmoji(unified),\n getImageUrl(emojiStyle: EmojiStyle = activeEmojiStyle ?? EmojiStyle.APPLE) {\n return getEmojiUrl(unified, emojiStyle);\n },\n imageUrl: getEmojiUrl(unified, activeEmojiStyle ?? EmojiStyle.APPLE),\n isCustom: false,\n names,\n unified,\n unifiedWithoutSkinTone: emojiUnified(emoji)\n };\n}\n","import { useEffect } from 'react';\n\nimport { ElementRef } from '../components/context/ElementRefContext';\n\nimport { useCloseAllOpenToggles } from './useCloseAllOpenToggles';\n\nexport function useOnScroll(BodyRef: ElementRef) {\n const closeAllOpenToggles = useCloseAllOpenToggles();\n\n useEffect(() => {\n const bodyRef = BodyRef.current;\n if (!bodyRef) {\n return;\n }\n\n bodyRef.addEventListener('scroll', onScroll, {\n passive: true\n });\n\n function onScroll() {\n closeAllOpenToggles();\n }\n\n return () => {\n bodyRef?.removeEventListener('scroll', onScroll);\n };\n }, [BodyRef, closeAllOpenToggles]);\n}\n","import { useCallback } from 'react';\n\nimport { useBodyRef } from '../components/context/ElementRefContext';\n\nimport { asSelectors, ClassNames } from './classNames';\nimport {\n categoryLabelHeight,\n closestCategory,\n closestScrollBody,\n emojiDistanceFromScrollTop,\n isEmojiBehindLabel,\n NullableElement,\n queryScrollBody\n} from './selectors';\n\nexport function scrollTo(root: NullableElement, top: number = 0) {\n const $eprBody = queryScrollBody(root);\n\n if (!$eprBody) {\n return;\n }\n\n requestAnimationFrame(() => {\n $eprBody.scrollTop = top + 1;\n });\n}\n\nexport function scrollBy(root: NullableElement, by: number): void {\n const $eprBody = queryScrollBody(root);\n\n if (!$eprBody) {\n return;\n }\n\n requestAnimationFrame(() => {\n $eprBody.scrollTop = $eprBody.scrollTop + by;\n });\n}\n\nexport function useScrollTo() {\n const BodyRef = useBodyRef();\n\n return useCallback(\n (top: number) => {\n requestAnimationFrame(() => {\n if (BodyRef.current) {\n BodyRef.current.scrollTop = top;\n }\n });\n },\n [BodyRef]\n );\n}\n\nexport function scrollEmojiAboveLabel(emoji: NullableElement) {\n if (!emoji || !isEmojiBehindLabel(emoji)) {\n return;\n }\n\n if (emoji.closest(asSelectors(ClassNames.variationPicker))) {\n return;\n }\n\n const scrollBody = closestScrollBody(emoji);\n const by = emojiDistanceFromScrollTop(emoji);\n scrollBy(scrollBody, -(categoryLabelHeight(closestCategory(emoji)) - by));\n}\n","import { useCallback } from 'react';\n\nimport { focusElement, focusFirstElementChild } from '../DomUtils/focusElement';\nimport {\n useCategoryNavigationRef,\n useSearchInputRef,\n useSkinTonePickerRef\n} from '../components/context/ElementRefContext';\n\nexport function useFocusSearchInput() {\n const SearchInputRef = useSearchInputRef();\n\n return useCallback(() => {\n focusElement(SearchInputRef.current);\n }, [SearchInputRef]);\n}\n\nexport function useFocusSkinTonePicker() {\n const SkinTonePickerRef = useSkinTonePickerRef();\n\n return useCallback(() => {\n if (!SkinTonePickerRef.current) {\n return;\n }\n\n focusFirstElementChild(SkinTonePickerRef.current);\n }, [SkinTonePickerRef]);\n}\n\nexport function useFocusCategoryNavigation() {\n const CategoryNavigationRef = useCategoryNavigationRef();\n\n return useCallback(() => {\n if (!CategoryNavigationRef.current) {\n return;\n }\n\n focusFirstElementChild(CategoryNavigationRef.current);\n }, [CategoryNavigationRef]);\n}\n","import { scrollTo } from '../DomUtils/scrollTo';\nimport {\n usePickerMainRef,\n useSearchInputRef\n} from '../components/context/ElementRefContext';\nimport {\n FilterState,\n useFilterRef,\n useSearchTermState\n} from '../components/context/PickerContext';\nimport { useSearchResultsConfig } from '../config/useConfig';\nimport { DataEmoji } from '../dataUtils/DataTypes';\nimport { emojiNames } from '../dataUtils/emojiSelectors';\n\nimport { useFocusSearchInput } from './useFocus';\n\nfunction useSetFilterRef() {\n const filterRef = useFilterRef();\n\n return function setFilter(\n setter: FilterState | ((current: FilterState) => FilterState)\n ): void {\n if (typeof setter === 'function') {\n return setFilter(setter(filterRef.current));\n }\n\n filterRef.current = setter;\n };\n}\n\nexport function useClearSearch() {\n const applySearch = useApplySearch();\n const SearchInputRef = useSearchInputRef();\n const focusSearchInput = useFocusSearchInput();\n\n return function clearSearch() {\n if (SearchInputRef.current) {\n SearchInputRef.current.value = '';\n }\n\n applySearch('');\n focusSearchInput();\n };\n}\n\nexport function useAppendSearch() {\n const SearchInputRef = useSearchInputRef();\n const applySearch = useApplySearch();\n\n return function appendSearch(str: string) {\n if (SearchInputRef.current) {\n SearchInputRef.current.value = `${SearchInputRef.current.value}${str}`;\n applySearch(getNormalizedSearchTerm(SearchInputRef.current.value));\n } else {\n applySearch(getNormalizedSearchTerm(str));\n }\n };\n}\n\nexport function useFilter() {\n const SearchInputRef = useSearchInputRef();\n const filterRef = useFilterRef();\n const setFilterRef = useSetFilterRef();\n const applySearch = useApplySearch();\n\n const [searchTerm] = useSearchTermState();\n const statusSearchResults = getStatusSearchResults(\n filterRef.current,\n searchTerm\n );\n\n return {\n onChange,\n searchTerm,\n SearchInputRef,\n statusSearchResults\n };\n\n function onChange(inputValue: string) {\n const filter = filterRef.current;\n\n const nextValue = inputValue.toLowerCase();\n\n if (filter?.[nextValue] || nextValue.length <= 1) {\n return applySearch(nextValue);\n }\n\n const longestMatch = findLongestMatch(nextValue, filter);\n\n if (!longestMatch) {\n // Can we even get here?\n // If so, we need to search among all emojis\n return applySearch(nextValue);\n }\n\n setFilterRef(current =>\n Object.assign(current, {\n [nextValue]: filterEmojiObjectByKeyword(longestMatch, nextValue)\n })\n );\n applySearch(nextValue);\n }\n}\n\nfunction useApplySearch() {\n const [, setSearchTerm] = useSearchTermState();\n const PickerMainRef = usePickerMainRef();\n\n return function applySearch(searchTerm: string) {\n requestAnimationFrame(() => {\n setSearchTerm(searchTerm ? searchTerm?.toLowerCase() : searchTerm).then(\n () => {\n scrollTo(PickerMainRef.current, 0);\n }\n );\n });\n };\n}\n\nfunction filterEmojiObjectByKeyword(\n emojis: FilterDict,\n keyword: string\n): FilterDict {\n const filtered: FilterDict = {};\n\n for (const unified in emojis) {\n const emoji = emojis[unified];\n\n if (hasMatch(emoji, keyword)) {\n filtered[unified] = emoji;\n }\n }\n\n return filtered;\n}\n\nfunction hasMatch(emoji: DataEmoji, keyword: string): boolean {\n return emojiNames(emoji).some(name => name.includes(keyword));\n}\n\nexport function useIsEmojiFiltered(): (unified: string) => boolean {\n const { current: filter } = useFilterRef();\n const [searchTerm] = useSearchTermState();\n\n return unified => isEmojiFilteredBySearchTerm(unified, filter, searchTerm);\n}\n\nfunction isEmojiFilteredBySearchTerm(\n unified: string,\n filter: FilterState,\n searchTerm: string\n): boolean {\n if (!filter || !searchTerm) {\n return false;\n }\n\n return !filter[searchTerm]?.[unified];\n}\n\nexport type FilterDict = Record<string, DataEmoji>;\n\nfunction findLongestMatch(\n keyword: string,\n dict: Record<string, FilterDict> | null\n): FilterDict | null {\n if (!dict) {\n return null;\n }\n\n if (dict[keyword]) {\n return dict[keyword];\n }\n\n const longestMatchingKey = Object.keys(dict)\n .sort((a, b) => b.length - a.length)\n .find(key => keyword.includes(key));\n\n if (longestMatchingKey) {\n return dict[longestMatchingKey];\n }\n\n return null;\n}\n\nexport function getNormalizedSearchTerm(str: string): string {\n if (!str || typeof str !== 'string') {\n return '';\n }\n\n return str.trim().toLowerCase();\n}\n\nfunction getStatusSearchResults(\n filterState: FilterState,\n searchTerm: string\n): string {\n if (!filterState?.[searchTerm]) return '';\n\n const searchResultsCount =\n Object.entries(filterState?.[searchTerm])?.length || 0;\n // eslint-disable-next-line react-hooks/rules-of-hooks\n return useSearchResultsConfig(searchResultsCount);\n}\n","import { useEmojisThatFailedToLoadState } from '../components/context/PickerContext';\nimport { DataEmoji } from '../dataUtils/DataTypes';\nimport { emojiUnified } from '../dataUtils/emojiSelectors';\n\nimport { useIsEmojiFiltered } from './useFilter';\n\nexport function useIsEmojiHidden(): (emoji: DataEmoji) => IsHiddenReturn {\n const [emojisThatFailedToLoad] = useEmojisThatFailedToLoadState();\n const isEmojiFiltered = useIsEmojiFiltered();\n\n return (emoji: DataEmoji): IsHiddenReturn => {\n const unified = emojiUnified(emoji);\n\n const failedToLoad = emojisThatFailedToLoad.has(unified);\n const filteredOut = isEmojiFiltered(unified);\n\n return {\n failedToLoad,\n filteredOut,\n hidden: failedToLoad || filteredOut\n };\n };\n}\n\ntype IsHiddenReturn = {\n failedToLoad: boolean;\n filteredOut: boolean;\n hidden: boolean;\n};\n","import { cx } from 'flairup';\nimport * as React from 'react';\n\nimport { stylesheet } from '../../Stylesheet/stylesheet';\n\ninterface Props\n extends React.DetailedHTMLProps<\n React.ButtonHTMLAttributes<HTMLButtonElement>,\n HTMLButtonElement\n > {\n className?: string;\n}\n\nexport function Button(props: Props) {\n return (\n <button\n type=\"button\"\n {...props}\n className={cx(styles.button, props.className)}\n >\n {props.children}\n </button>\n );\n}\n\nconst styles = stylesheet.create({\n button: {\n '.': 'epr-btn',\n cursor: 'pointer',\n border: '0',\n background: 'none',\n outline: 'none'\n }\n});\n","import { cx } from 'flairup';\nimport * as React from 'react';\n\nimport { ClassNames } from '../../DomUtils/classNames';\nimport { commonStyles, stylesheet } from '../../Stylesheet/stylesheet';\nimport { Button } from '../atoms/Button';\n\ntype ClickableEmojiButtonProps = Readonly<{\n hidden?: boolean;\n showVariations?: boolean;\n hiddenOnSearch?: boolean;\n emojiNames: string[];\n children: React.ReactNode;\n hasVariations: boolean;\n unified?: string;\n}>;\n\nexport function ClickableEmojiButton({\n emojiNames,\n unified,\n hidden,\n hiddenOnSearch,\n showVariations = true,\n hasVariations,\n children\n}: ClickableEmojiButtonProps) {\n return (\n <Button\n className={cx(\n styles.emoji,\n hidden && commonStyles.hidden,\n hiddenOnSearch && commonStyles.hiddenOnSearch,\n {\n [ClassNames.visible]: !hidden && !hiddenOnSearch\n },\n !!(hasVariations && showVariations) && styles.hasVariations\n )}\n data-unified={unified}\n aria-label={emojiNames[0]}\n data-full-name={emojiNames}\n >\n {children}\n </Button>\n );\n}\n\nconst styles = stylesheet.create({\n emoji: {\n '.': ClassNames.emoji,\n position: 'relative',\n width: 'var(--epr-emoji-fullsize)',\n height: 'var(--epr-emoji-fullsize)',\n boxSizing: 'border-box',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n maxWidth: 'var(--epr-emoji-fullsize)',\n maxHeight: 'var(--epr-emoji-fullsize)',\n borderRadius: '8px',\n overflow: 'hidden',\n transition: 'background-color 0.2s',\n ':hover': {\n backgroundColor: 'var(--epr-emoji-hover-color)'\n },\n ':focus': {\n backgroundColor: 'var(--epr-focus-bg-color)'\n }\n },\n hasVariations: {\n '.': ClassNames.emojiHasVariations,\n ':after': {\n content: '',\n display: 'block',\n width: '0',\n height: '0',\n right: '0px',\n bottom: '1px',\n position: 'absolute',\n borderLeft: '4px solid transparent',\n borderRight: '4px solid transparent',\n transform: 'rotate(135deg)',\n borderBottom: '4px solid var(--epr-emoji-variation-indicator-color)',\n zIndex: 'var(--epr-emoji-variations-indictator-z-index)'\n },\n ':hover:after': {\n borderBottom: '4px solid var(--epr-emoji-variation-indicator-color-hover)'\n }\n }\n});\n","import { ClassNames } from '../../DomUtils/classNames';\nimport { stylesheet } from '../../Stylesheet/stylesheet';\n\nexport const emojiStyles = stylesheet.create({\n external: {\n '.': ClassNames.external,\n fontSize: '0'\n },\n common: {\n alignSelf: 'center',\n justifySelf: 'center',\n display: 'block'\n }\n});\n","import { cx } from 'flairup';\nimport * as React from 'react';\n\nimport { stylesheet } from '../../Stylesheet/stylesheet';\nimport { EmojiStyle } from '../../types/exposedTypes';\n\nimport { emojiStyles } from './emojiStyles';\n\nexport function EmojiImg({\n emojiName,\n style,\n lazyLoad = false,\n imgUrl,\n onError\n}: {\n emojiName: string;\n emojiStyle: EmojiStyle;\n style: React.CSSProperties;\n lazyLoad?: boolean;\n imgUrl: string;\n onError: () => void;\n}) {\n return (\n <img\n src={imgUrl}\n alt={emojiName}\n className={cx(styles.emojiImag, emojiStyles.external, emojiStyles.common)}\n loading={lazyLoad ? 'lazy' : 'eager'}\n onError={onError}\n style={style}\n />\n );\n}\n\nconst styles = stylesheet.create({\n emojiImag: {\n '.': 'epr-emoji-img',\n maxWidth: 'var(--epr-emoji-fullsize)',\n maxHeight: 'var(--epr-emoji-fullsize)',\n minWidth: 'var(--epr-emoji-fullsize)',\n minHeight: 'var(--epr-emoji-fullsize)',\n padding: 'var(--epr-emoji-padding)'\n }\n});\n","import { cx } from 'flairup';\nimport * as React from 'react';\n\nimport { stylesheet } from '../../Stylesheet/stylesheet';\nimport { parseNativeEmoji } from '../../dataUtils/parseNativeEmoji';\n\nimport { emojiStyles } from './emojiStyles';\n\nexport function NativeEmoji({\n unified,\n style\n}: {\n unified: string;\n style: React.CSSProperties;\n}) {\n return (\n <span\n className={cx(\n styles.nativeEmoji,\n emojiStyles.common,\n emojiStyles.external\n )}\n data-unified={unified}\n style={style}\n >\n {parseNativeEmoji(unified)}\n </span>\n );\n}\n\nconst styles = stylesheet.create({\n nativeEmoji: {\n '.': 'epr-emoji-native',\n fontFamily:\n '\"Segoe UI Emoji\", \"Segoe UI Symbol\", \"Segoe UI\", \"Apple Color Emoji\", \"Twemoji Mozilla\", \"Noto Color Emoji\", \"EmojiOne Color\", \"Android Emoji\"!important',\n position: 'relative',\n lineHeight: '100%',\n fontSize: 'var(--epr-emoji-size)',\n textAlign: 'center',\n alignSelf: 'center',\n justifySelf: 'center',\n letterSpacing: '0',\n padding: 'var(--epr-emoji-padding)'\n }\n});\n","import * as React from 'react';\n\nimport {\n emojiByUnified,\n emojiName,\n emojiUrlByUnified\n} from '../../dataUtils/emojiSelectors';\nimport { isCustomEmoji } from '../../typeRefinements/typeRefinements';\nimport { EmojiStyle } from '../../types/exposedTypes';\nimport { useEmojisThatFailedToLoadState } from '../context/PickerContext';\n\nimport { BaseEmojiProps } from './BaseEmojiProps';\nimport { EmojiImg } from './EmojiImg';\nimport { NativeEmoji } from './NativeEmoji';\n\nexport function ViewOnlyEmoji({\n emoji,\n unified,\n emojiStyle,\n size,\n lazyLoad,\n getEmojiUrl = emojiUrlByUnified\n}: BaseEmojiProps) {\n const [, setEmojisThatFailedToLoad] = useEmojisThatFailedToLoadState();\n\n const style = {} as React.CSSProperties;\n if (size) {\n style.width = style.height = style.fontSize = `${size}px`;\n }\n\n const emojiToRender = emoji ? emoji : emojiByUnified(unified);\n\n if (!emojiToRender) {\n return null;\n }\n\n if (isCustomEmoji(emojiToRender)) {\n return (\n <EmojiImg\n style={style}\n emojiName={unified}\n emojiStyle={EmojiStyle.NATIVE}\n lazyLoad={lazyLoad}\n imgUrl={emojiToRender.imgUrl}\n onError={onError}\n />\n );\n }\n\n return (\n <>\n {emojiStyle === EmojiStyle.NATIVE ? (\n <NativeEmoji unified={unified} style={style} />\n ) : (\n <EmojiImg\n style={style}\n emojiName={emojiName(emojiToRender)}\n emojiStyle={emojiStyle}\n lazyLoad={lazyLoad}\n imgUrl={getEmojiUrl(unified, emojiStyle)}\n onError={onError}\n />\n )}\n </>\n );\n\n function onError() {\n setEmojisThatFailedToLoad(prev => new Set(prev).add(unified));\n }\n}\n","import * as React from 'react';\n\nimport { DataEmoji } from '../../dataUtils/DataTypes';\nimport { emojiHasVariations, emojiNames } from '../../dataUtils/emojiSelectors';\n\nimport { BaseEmojiProps } from './BaseEmojiProps';\nimport { ClickableEmojiButton } from './ClickableEmojiButton';\nimport { ViewOnlyEmoji } from './ViewOnlyEmoji';\n\ntype ClickableEmojiProps = Readonly<\n BaseEmojiProps & {\n hidden?: boolean;\n showVariations?: boolean;\n hiddenOnSearch?: boolean;\n emoji: DataEmoji;\n className?: string;\n }\n>;\n\nexport function ClickableEmoji({\n emoji,\n unified,\n hidden,\n hiddenOnSearch,\n emojiStyle,\n showVariations = true,\n size,\n lazyLoad,\n getEmojiUrl\n}: ClickableEmojiProps) {\n const hasVariations = emojiHasVariations(emoji);\n\n return (\n <ClickableEmojiButton\n hasVariations={hasVariations}\n showVariations={showVariations}\n hidden={hidden}\n hiddenOnSearch={hiddenOnSearch}\n emojiNames={emojiNames(emoji)}\n unified={unified}\n >\n <ViewOnlyEmoji\n unified={unified}\n emoji={emoji}\n size={size}\n emojiStyle={emojiStyle}\n lazyLoad={lazyLoad}\n getEmojiUrl={getEmojiUrl}\n />\n </ClickableEmojiButton>\n );\n}\n","import { cx } from 'flairup';\nimport * as React from 'react';\n\nimport { ClassNames } from '../../DomUtils/classNames';\nimport { commonStyles, stylesheet } from '../../Stylesheet/stylesheet';\nimport {\n CategoryConfig,\n categoryFromCategoryConfig,\n categoryNameFromCategoryConfig\n} from '../../config/categoryConfig';\n\ntype Props = Readonly<{\n categoryConfig: CategoryConfig;\n children?: React.ReactNode;\n hidden?: boolean;\n hiddenOnSearch?: boolean;\n}>;\n\nexport function EmojiCategory({\n categoryConfig,\n children,\n hidden,\n hiddenOnSearch\n}: Props) {\n const category = categoryFromCategoryConfig(categoryConfig);\n const categoryName = categoryNameFromCategoryConfig(categoryConfig);\n\n return (\n <li\n className={cx(\n styles.category,\n hidden && commonStyles.hidden,\n hiddenOnSearch && commonStyles.hiddenOnSearch\n )}\n data-name={category}\n aria-label={categoryName}\n >\n <h2 className={cx(styles.label)}>{categoryName}</h2>\n <div className={cx(styles.categoryContent)}>{children}</div>\n </li>\n );\n}\n\nconst styles = stylesheet.create({\n category: {\n '.': ClassNames.category,\n ':not(:has(.epr-visible))': {\n display: 'none'\n }\n },\n categoryContent: {\n '.': ClassNames.categoryContent,\n display: 'grid',\n gridGap: '0',\n gridTemplateColumns: 'repeat(auto-fill, var(--epr-emoji-fullsize))',\n justifyContent: 'space-between',\n margin: 'var(--epr-category-padding)',\n position: 'relative'\n },\n label: {\n '.': ClassNames.label,\n alignItems: 'center',\n // @ts-expect-error - backdropFilter is a valid CSS property\n backdropFilter: 'blur(3px)',\n backgroundColor: 'var(--epr-category-label-bg-color)',\n color: 'var(--epr-category-label-text-color)',\n display: 'flex',\n fontSize: '16px',\n fontWeight: 'bold',\n height: 'var(--epr-category-label-height)',\n margin: '0',\n padding: 'var(--epr-category-label-padding)',\n position: 'sticky',\n textTransform: 'capitalize',\n top: '0',\n width: '100%',\n zIndex: 'var(--epr-category-label-z-index)'\n }\n});\n","import * as React from 'react';\n\nimport { CategoryConfig } from '../../config/categoryConfig';\nimport {\n useEmojiStyleConfig,\n useGetEmojiUrlConfig,\n useSuggestedEmojisModeConfig,\n} from '../../config/useConfig';\nimport { emojiByUnified } from '../../dataUtils/emojiSelectors';\nimport { getSuggested } from '../../dataUtils/suggested';\nimport { useUpdateSuggested } from '../context/PickerContext';\nimport { ClickableEmoji } from '../emoji/Emoji';\n\nimport { EmojiCategory } from './EmojiCategory';\n\ntype Props = Readonly<{\n categoryConfig: CategoryConfig;\n}>;\n\nexport function Suggested({ categoryConfig }: Props) {\n const [suggestedUpdated] = useUpdateSuggested();\n const suggestedEmojisModeConfig = useSuggestedEmojisModeConfig();\n const getEmojiUrl = useGetEmojiUrlConfig();\n const suggested = React.useMemo(\n () => getSuggested(suggestedEmojisModeConfig) ?? [],\n // eslint-disable-next-line react-hooks/exhaustive-deps\n [suggestedUpdated, suggestedEmojisModeConfig]\n );\n const emojiStyle = useEmojiStyleConfig();\n\n return (\n <EmojiCategory\n categoryConfig={categoryConfig}\n hiddenOnSearch\n hidden={suggested.length === 0}\n >\n {suggested.map((suggestedItem) => {\n const emoji = emojiByUnified(suggestedItem.original);\n\n if (!emoji) {\n return null;\n }\n\n return (\n <ClickableEmoji\n showVariations={false}\n unified={suggestedItem.unified}\n emojiStyle={emojiStyle}\n emoji={emoji}\n key={suggestedItem.unified}\n getEmojiUrl={getEmojiUrl}\n />\n );\n })}\n </EmojiCategory>\n );\n}\n","import { cx } from 'flairup';\nimport * as React from 'react';\n\nimport { ClassNames } from '../../DomUtils/classNames';\nimport { stylesheet } from '../../Stylesheet/stylesheet';\nimport {\n Categories,\n CategoryConfig,\n categoryFromCategoryConfig\n} from '../../config/categoryConfig';\nimport {\n useCategoriesConfig,\n useEmojiStyleConfig,\n useGetEmojiUrlConfig,\n useLazyLoadEmojisConfig,\n useSkinTonesDisabledConfig\n} from '../../config/useConfig';\nimport { emojisByCategory, emojiUnified } from '../../dataUtils/emojiSelectors';\nimport { useIsEmojiDisallowed } from '../../hooks/useDisallowedEmojis';\nimport { useIsEmojiHidden } from '../../hooks/useIsEmojiHidden';\nimport {\n useActiveSkinToneState,\n useIsPastInitialLoad\n} from '../context/PickerContext';\nimport { ClickableEmoji } from '../emoji/Emoji';\n\nimport { EmojiCategory } from './EmojiCategory';\nimport { Suggested } from './Suggested';\n\nexport function EmojiList() {\n const categories = useCategoriesConfig();\n const renderdCategoriesCountRef = React.useRef(0);\n\n return (\n <ul className={cx(styles.emojiList)}>\n {categories.map(categoryConfig => {\n const category = categoryFromCategoryConfig(categoryConfig);\n\n if (category === Categories.SUGGESTED) {\n return <Suggested key={category} categoryConfig={categoryConfig} />;\n }\n\n return (\n <RenderCategory\n key={category}\n category={category}\n categoryConfig={categoryConfig}\n renderdCategoriesCountRef={renderdCategoriesCountRef}\n />\n );\n })}\n </ul>\n );\n}\n\nfunction RenderCategory({\n category,\n categoryConfig,\n renderdCategoriesCountRef\n}: {\n category: Categories;\n categoryConfig: CategoryConfig;\n renderdCategoriesCountRef: React.MutableRefObject<number>;\n}) {\n const isEmojiHidden = useIsEmojiHidden();\n const lazyLoadEmojis = useLazyLoadEmojisConfig();\n const emojiStyle = useEmojiStyleConfig();\n const isPastInitialLoad = useIsPastInitialLoad();\n const [activeSkinTone] = useActiveSkinToneState();\n const isEmojiDisallowed = useIsEmojiDisallowed();\n const getEmojiUrl = useGetEmojiUrlConfig();\n const showVariations = !useSkinTonesDisabledConfig();\n\n // Small trick to defer the rendering of all emoji categories until the first category is visible\n // This way the user gets to actually see something and not wait for the whole picker to render.\n const emojisToPush =\n !isPastInitialLoad && renderdCategoriesCountRef.current > 0\n ? []\n : emojisByCategory(category);\n\n if (emojisToPush.length > 0) {\n renderdCategoriesCountRef.current++;\n }\n\n let hiddenCounter = 0;\n\n const emojis = emojisToPush.map(emoji => {\n const unified = emojiUnified(emoji, activeSkinTone);\n const { failedToLoad, filteredOut, hidden } = isEmojiHidden(emoji);\n\n const isDisallowed = isEmojiDisallowed(emoji);\n\n if (hidden || isDisallowed) {\n hiddenCounter++;\n }\n\n if (isDisallowed) {\n return null;\n }\n\n return (\n <ClickableEmoji\n showVariations={showVariations}\n key={unified}\n emoji={emoji}\n unified={unified}\n hidden={failedToLoad}\n hiddenOnSearch={filteredOut}\n emojiStyle={emojiStyle}\n lazyLoad={lazyLoadEmojis}\n getEmojiUrl={getEmojiUrl}\n />\n );\n });\n\n return (\n <EmojiCategory\n categoryConfig={categoryConfig}\n // Indicates that there are no visible emojis\n // Hence, the category should be hidden\n hidden={hiddenCounter === emojis.length}\n >\n {emojis}\n </EmojiCategory>\n );\n}\n\nconst styles = stylesheet.create({\n emojiList: {\n '.': ClassNames.emojiList,\n listStyle: 'none',\n margin: '0',\n padding: '0'\n }\n});\n","import {\n elementCountInRow,\n elementIndexInRow,\n getElementInNextRow,\n getElementInPrevRow,\n getElementInRow,\n hasNextRow,\n rowNumber\n} from './elementPositionInRow';\nimport { focusElement } from './focusElement';\nimport { scrollEmojiAboveLabel } from './scrollTo';\nimport {\n allVisibleEmojis,\n closestCategory,\n firstVisibleEmoji,\n lastVisibleEmoji,\n nextCategory,\n nextVisibleEmoji,\n NullableElement,\n prevCategory,\n prevVisibleEmoji,\n closestCategoryContent\n} from './selectors';\n\nexport function focusFirstVisibleEmoji(parent: NullableElement) {\n const emoji = firstVisibleEmoji(parent);\n focusElement(emoji);\n scrollEmojiAboveLabel(emoji);\n}\n\nexport function focusAndClickFirstVisibleEmoji(parent: NullableElement) {\n const firstEmoji = firstVisibleEmoji(parent);\n\n focusElement(firstEmoji);\n firstEmoji?.click();\n}\n\nexport function focusLastVisibleEmoji(parent: NullableElement) {\n focusElement(lastVisibleEmoji(parent));\n}\n\nexport function focusNextVisibleEmoji(element: NullableElement) {\n if (!element) {\n return;\n }\n\n const next = nextVisibleEmoji(element);\n\n if (!next) {\n return focusFirstVisibleEmoji(nextCategory(element));\n }\n\n focusElement(next);\n scrollEmojiAboveLabel(next);\n}\n\nexport function focusPrevVisibleEmoji(element: NullableElement) {\n if (!element) {\n return;\n }\n\n const prev = prevVisibleEmoji(element);\n\n if (!prev) {\n return focusLastVisibleEmoji(prevCategory(element));\n }\n\n focusElement(prev);\n scrollEmojiAboveLabel(prev);\n}\n\nexport function focusVisibleEmojiOneRowUp(\n element: NullableElement,\n exitUp: () => void\n) {\n if (!element) {\n return;\n }\n\n const prev = visibleEmojiOneRowUp(element);\n\n if (!prev) {\n return exitUp();\n }\n\n focusElement(prev);\n scrollEmojiAboveLabel(prev);\n}\n\nexport function focusVisibleEmojiOneRowDown(element: NullableElement) {\n if (!element) {\n return;\n }\n\n const next = visibleEmojiOneRowDown(element);\n\n return focusElement(next);\n}\n\nfunction visibleEmojiOneRowUp(element: HTMLElement) {\n if (!element) {\n return null;\n }\n\n const categoryContent = closestCategoryContent(element);\n const category = closestCategory(categoryContent);\n const indexInRow = elementIndexInRow(categoryContent, element);\n const row = rowNumber(categoryContent, element);\n const countInRow = elementCountInRow(categoryContent, element);\n\n if (row === 0) {\n const prevVisibleCategory = prevCategory(category);\n\n if (!prevVisibleCategory) {\n return null;\n }\n\n return getElementInRow(\n allVisibleEmojis(prevVisibleCategory),\n -1, // last row\n countInRow,\n indexInRow\n );\n }\n\n return getElementInPrevRow(\n allVisibleEmojis(categoryContent),\n row,\n countInRow,\n indexInRow\n );\n}\n\nfunction visibleEmojiOneRowDown(element: HTMLElement) {\n if (!element) {\n return null;\n }\n\n const categoryContent = closestCategoryContent(element);\n const category = closestCategory(categoryContent);\n const indexInRow = elementIndexInRow(categoryContent, element);\n const row = rowNumber(categoryContent, element);\n const countInRow = elementCountInRow(categoryContent, element);\n if (!hasNextRow(categoryContent, element)) {\n const nextVisibleCategory = nextCategory(category);\n\n if (!nextVisibleCategory) {\n return null;\n }\n\n return getElementInRow(\n allVisibleEmojis(nextVisibleCategory),\n 0,\n countInRow,\n indexInRow\n );\n }\n\n const itemInNextRow = getElementInNextRow(\n allVisibleEmojis(categoryContent),\n row,\n countInRow,\n indexInRow\n );\n\n return itemInNextRow;\n}\n","function styleInject(css, ref) {\n if ( ref === void 0 ) ref = {};\n var insertAt = ref.insertAt;\n\n if (!css || typeof document === 'undefined') { return; }\n\n var head = document.head || document.getElementsByTagName('head')[0];\n var style = document.createElement('style');\n style.type = 'text/css';\n\n if (insertAt === 'top') {\n if (head.firstChild) {\n head.insertBefore(style, head.firstChild);\n } else {\n head.appendChild(style);\n }\n } else {\n head.appendChild(style);\n }\n\n if (style.styleSheet) {\n style.styleSheet.cssText = css;\n } else {\n style.appendChild(document.createTextNode(css));\n }\n}\n\nexport default styleInject;\n","import { cx } from 'flairup';\nimport * as React from 'react';\nimport { useEffect } from 'react';\n\nimport { ClassNames } from '../../DomUtils/classNames';\nimport { focusFirstVisibleEmoji } from '../../DomUtils/keyboardNavigation';\nimport {\n buttonFromTarget,\n elementHeight,\n emojiTrueOffsetTop,\n emojiTruOffsetLeft\n} from '../../DomUtils/selectors';\nimport { stylesheet } from '../../Stylesheet/stylesheet';\nimport {\n useEmojiStyleConfig,\n useGetEmojiUrlConfig\n} from '../../config/useConfig';\nimport {\n emojiHasVariations,\n emojiUnified,\n emojiVariations\n} from '../../dataUtils/emojiSelectors';\nimport {\n useAnchoredEmojiRef,\n useBodyRef,\n useSetAnchoredEmojiRef,\n useVariationPickerRef\n} from '../context/ElementRefContext';\nimport { useEmojiVariationPickerState } from '../context/PickerContext';\nimport { ClickableEmoji } from '../emoji/Emoji';\n\nimport './EmojiVariationPicker.css';\n\nenum Direction {\n Up,\n Down\n}\n\n// eslint-disable-next-line complexity\nexport function EmojiVariationPicker() {\n const AnchoredEmojiRef = useAnchoredEmojiRef();\n const VariationPickerRef = useVariationPickerRef();\n const [emoji] = useEmojiVariationPickerState();\n const emojiStyle = useEmojiStyleConfig();\n\n const { getTop, getMenuDirection } = useVariationPickerTop(\n VariationPickerRef\n );\n const setAnchoredEmojiRef = useSetAnchoredEmojiRef();\n const getPointerStyle = usePointerStyle(VariationPickerRef);\n const getEmojiUrl = useGetEmojiUrlConfig();\n\n const button = buttonFromTarget(AnchoredEmojiRef.current);\n\n const visible = Boolean(\n emoji &&\n button &&\n emojiHasVariations(emoji) &&\n button.classList.contains(ClassNames.emojiHasVariations)\n );\n\n useEffect(() => {\n if (!visible) {\n return;\n }\n\n focusFirstVisibleEmoji(VariationPickerRef.current);\n }, [VariationPickerRef, visible, AnchoredEmojiRef]);\n\n let top, pointerStyle;\n\n if (!visible && AnchoredEmojiRef.current) {\n setAnchoredEmojiRef(null);\n } else {\n top = getTop();\n pointerStyle = getPointerStyle();\n }\n\n return (\n <div\n ref={VariationPickerRef}\n className={cx(\n styles.variationPicker,\n getMenuDirection() === Direction.Down && styles.pointingUp,\n visible && styles.visible\n )}\n style={{ top }}\n >\n {visible && emoji\n ? [emojiUnified(emoji)]\n .concat(emojiVariations(emoji))\n .slice(0, 6)\n .map(unified => (\n <ClickableEmoji\n key={unified}\n emoji={emoji}\n unified={unified}\n emojiStyle={emojiStyle}\n showVariations={false}\n getEmojiUrl={getEmojiUrl}\n />\n ))\n : null}\n <div className={cx(styles.pointer)} style={pointerStyle} />\n </div>\n );\n}\n\nfunction usePointerStyle(VariationPickerRef: React.RefObject<HTMLElement>) {\n const AnchoredEmojiRef = useAnchoredEmojiRef();\n return function getPointerStyle() {\n const style: React.CSSProperties = {};\n if (!VariationPickerRef.current) {\n return style;\n }\n\n if (AnchoredEmojiRef.current) {\n const button = buttonFromTarget(AnchoredEmojiRef.current);\n\n const offsetLeft = emojiTruOffsetLeft(button);\n\n if (!button) {\n return style;\n }\n\n // half of the button\n style.left = offsetLeft + button?.clientWidth / 2;\n }\n\n return style;\n };\n}\n\nfunction useVariationPickerTop(\n VariationPickerRef: React.RefObject<HTMLElement>\n) {\n const AnchoredEmojiRef = useAnchoredEmojiRef();\n const BodyRef = useBodyRef();\n let direction = Direction.Up;\n\n return {\n getMenuDirection,\n getTop\n };\n\n function getMenuDirection() {\n return direction;\n }\n\n function getTop() {\n direction = Direction.Up;\n let emojiOffsetTop = 0;\n\n if (!VariationPickerRef.current) {\n return 0;\n }\n\n const height = elementHeight(VariationPickerRef.current);\n\n if (AnchoredEmojiRef.current) {\n const bodyRef = BodyRef.current;\n const button = buttonFromTarget(AnchoredEmojiRef.current);\n\n const buttonHeight = elementHeight(button);\n\n emojiOffsetTop = emojiTrueOffsetTop(button);\n\n const scrollTop = bodyRef?.scrollTop ?? 0;\n\n if (scrollTop > emojiOffsetTop - height) {\n direction = Direction.Down;\n emojiOffsetTop += buttonHeight + height;\n }\n }\n\n return emojiOffsetTop - height;\n }\n}\n\nconst styles = stylesheet.create({\n variationPicker: {\n '.': ClassNames.variationPicker,\n position: 'absolute',\n right: '15px',\n left: '15px',\n padding: '5px',\n boxShadow: '0px 2px 5px rgba(0, 0, 0, 0.2)',\n borderRadius: '3px',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'space-around',\n opacity: '0',\n visibility: 'hidden',\n pointerEvents: 'none',\n top: '-100%',\n border: '1px solid var(--epr-picker-border-color)',\n height: 'var(--epr-emoji-variation-picker-height)',\n zIndex: 'var(--epr-skin-variation-picker-z-index)',\n background: 'var(--epr-emoji-variation-picker-bg-color)',\n transform: 'scale(0.9)',\n transition: 'transform 0.1s ease-out, opacity 0.2s ease-out'\n },\n pointingUp: {\n '.': 'pointing-up',\n transformOrigin: 'center 0%',\n transform: 'scale(0.9)'\n },\n '.pointing-up': {\n pointer: {\n top: '0',\n transform: 'rotate(180deg) translateY(100%) translateX(18px)'\n }\n },\n visible: {\n opacity: '1',\n visibility: 'visible',\n pointerEvents: 'all',\n transform: 'scale(1)'\n },\n pointer: {\n '.': 'epr-emoji-pointer',\n content: '',\n position: 'absolute',\n width: '25px',\n height: '15px',\n backgroundRepeat: 'no-repeat',\n backgroundPosition: '0 0',\n backgroundSize: '50px 15px',\n top: '100%',\n transform: 'translateX(-18px)'\n },\n '.epr-dark-theme': {\n pointer: {\n backgroundPosition: '-25px 0'\n }\n },\n '.epr-auto-theme': {\n pointer: {\n // @ts-ignore\n '@media (prefers-color-scheme: dark)': {\n backgroundPosition: '-25px 0'\n }\n }\n }\n});\n","import { cx } from 'flairup';\nimport * as React from 'react';\n\nimport { ClassNames } from '../../DomUtils/classNames';\nimport { stylesheet } from '../../Stylesheet/stylesheet';\nimport { useOnMouseMove } from '../../hooks/useDisallowMouseMove';\nimport { useMouseDownHandlers } from '../../hooks/useMouseDownHandlers';\nimport { useOnScroll } from '../../hooks/useOnScroll';\nimport { useBodyRef } from '../context/ElementRefContext';\n\nimport { EmojiList } from './EmojiList';\nimport { EmojiVariationPicker } from './EmojiVariationPicker';\n\nexport function Body() {\n const BodyRef = useBodyRef();\n useOnScroll(BodyRef);\n useMouseDownHandlers(BodyRef);\n useOnMouseMove();\n\n return (\n <div className={cx(styles.body)} ref={BodyRef}>\n <EmojiVariationPicker />\n <EmojiList />\n </div>\n );\n}\n\nconst styles = stylesheet.create({\n body: {\n '.': ClassNames.scrollBody,\n flex: '1',\n overflowY: 'scroll',\n overflowX: 'hidden',\n position: 'relative'\n }\n});\n","import * as React from 'react';\nimport { useEffect } from 'react';\n\nimport { focusElement } from '../DomUtils/focusElement';\nimport {\n buttonFromTarget,\n originalUnifiedFromEmojiElement,\n unifiedFromEmojiElement\n} from '../DomUtils/selectors';\nimport { useBodyRef } from '../components/context/ElementRefContext';\nimport { PreviewEmoji } from '../components/footer/Preview';\n\nimport {\n useAllowMouseMove,\n useIsMouseDisallowed\n} from './useDisallowMouseMove';\n\nexport function useEmojiPreviewEvents(\n allow: boolean,\n setPreviewEmoji: React.Dispatch<React.SetStateAction<PreviewEmoji>>\n) {\n const BodyRef = useBodyRef();\n const isMouseDisallowed = useIsMouseDisallowed();\n const allowMouseMove = useAllowMouseMove();\n\n useEffect(() => {\n if (!allow) {\n return;\n }\n const bodyRef = BodyRef.current;\n\n bodyRef?.addEventListener('keydown', onEscape, {\n passive: true\n });\n\n bodyRef?.addEventListener('mouseover', onMouseOver, true);\n\n bodyRef?.addEventListener('focus', onEnter, true);\n\n bodyRef?.addEventListener('mouseout', onLeave, {\n passive: true\n });\n bodyRef?.addEventListener('blur', onLeave, true);\n\n function onEnter(e: FocusEvent) {\n const button = buttonFromTarget(e.target as HTMLElement);\n\n if (!button) {\n return onLeave();\n }\n\n const unified = unifiedFromEmojiElement(button);\n const originalUnified = originalUnifiedFromEmojiElement(button);\n\n if (!unified || !originalUnified) {\n return onLeave();\n }\n\n setPreviewEmoji({\n unified,\n originalUnified\n });\n }\n function onLeave(e?: FocusEvent | MouseEvent) {\n if (e) {\n const relatedTarget = e.relatedTarget as HTMLElement;\n\n if (!buttonFromTarget(relatedTarget)) {\n return setPreviewEmoji(null);\n }\n }\n\n setPreviewEmoji(null);\n }\n function onEscape(e: KeyboardEvent) {\n if (e.key === 'Escape') {\n setPreviewEmoji(null);\n }\n }\n\n function onMouseOver(e: MouseEvent) {\n if (isMouseDisallowed()) {\n return;\n }\n\n const button = buttonFromTarget(e.target as HTMLElement);\n\n if (button) {\n focusElement(button);\n }\n }\n\n return () => {\n bodyRef?.removeEventListener('mouseover', onMouseOver);\n bodyRef?.removeEventListener('mouseout', onLeave);\n bodyRef?.removeEventListener('focus', onEnter, true);\n bodyRef?.removeEventListener('blur', onLeave, true);\n bodyRef?.removeEventListener('keydown', onEscape);\n };\n }, [BodyRef, allow, setPreviewEmoji, isMouseDisallowed, allowMouseMove]);\n}\n","import { useSkinTonePickerLocationConfig } from '../config/useConfig';\nimport { SkinTonePickerLocation } from '../types/exposedTypes';\n\nexport function useShouldShowSkinTonePicker() {\n const skinTonePickerLocationConfig = useSkinTonePickerLocationConfig();\n\n return function shouldShowSkinTonePicker(location: SkinTonePickerLocation) {\n return skinTonePickerLocationConfig === location;\n };\n}\n\nexport function useIsSkinToneInSearch() {\n const skinTonePickerLocationConfig = useSkinTonePickerLocationConfig();\n\n return skinTonePickerLocationConfig === SkinTonePickerLocation.SEARCH;\n}\n\nexport function useIsSkinToneInPreview() {\n const skinTonePickerLocationConfig = useSkinTonePickerLocationConfig();\n\n return skinTonePickerLocationConfig === SkinTonePickerLocation.PREVIEW;\n}\n","import { cx } from 'flairup';\nimport * as React from 'react';\n\nimport { stylesheet } from '../../Stylesheet/stylesheet';\n\nexport enum FlexDirection {\n ROW = 'FlexRow',\n COLUMN = 'FlexColumn'\n}\n\ntype Props = Readonly<{\n children: React.ReactNode;\n className?: string;\n style?: React.CSSProperties;\n direction?: FlexDirection;\n}>;\n\nexport default function Flex({\n children,\n className,\n style = {},\n direction = FlexDirection.ROW\n}: Props) {\n return (\n <div\n style={{ ...style }}\n className={cx(styles.flex, className, styles[direction])}\n >\n {children}\n </div>\n );\n}\n\nconst styles = stylesheet.create({\n flex: {\n display: 'flex'\n },\n [FlexDirection.ROW]: {\n flexDirection: 'row'\n },\n [FlexDirection.COLUMN]: {\n flexDirection: 'column'\n }\n});\n","import { cx } from 'flairup';\nimport * as React from 'react';\n\n\ntype Props = Readonly<{\n className?: string;\n style?: React.CSSProperties;\n}>;\n\nexport default function Space({ className, style = {} }: Props) {\n return <div style={{ flex: 1, ...style }} className={cx(className)} />;\n}\n","import * as React from 'react';\n\ntype Props = Readonly<{\n children: React.ReactNode;\n className?: string;\n style?: React.CSSProperties;\n}>;\n\nexport default function Absolute({ children, className, style }: Props) {\n return (\n <div style={{ ...style, position: 'absolute' }} className={className}>\n {children}\n </div>\n );\n}\n","import * as React from 'react';\n\ntype Props = Readonly<{\n children: React.ReactNode;\n className?: string;\n style?: React.CSSProperties;\n}>;\n\nexport default function Relative({ children, className, style }: Props) {\n return (\n <div style={{ ...style, position: 'relative' }} className={className}>\n {children}\n </div>\n );\n}\n","import * as React from 'react';\n\nimport { ClassNames } from '../../DomUtils/classNames';\nimport { useSkinTonesDisabledConfig } from '../../config/useConfig';\nimport skinToneVariations, {\n skinTonesNamed\n} from '../../data/skinToneVariations';\nimport { useCloseAllOpenToggles } from '../../hooks/useCloseAllOpenToggles';\nimport { useFocusSearchInput } from '../../hooks/useFocus';\nimport { SkinTones } from '../../types/exposedTypes';\nimport Absolute from '../Layout/Absolute';\nimport Relative from '../Layout/Relative';\nimport { Button } from '../atoms/Button';\nimport { useSkinTonePickerRef } from '../context/ElementRefContext';\nimport {\n useActiveSkinToneState,\n useSkinToneFanOpenState\n} from '../context/PickerContext';\n\nimport './SkinTonePicker.css';\nimport { cx } from 'flairup';\n\nconst ITEM_SIZE = 28;\n\ntype Props = {\n direction?: SkinTonePickerDirection;\n};\n\nexport function SkinTonePickerMenu() {\n return (\n <Relative style={{ height: ITEM_SIZE }}>\n <Absolute style={{ bottom: 0, right: 0 }}>\n <SkinTonePicker direction={SkinTonePickerDirection.VERTICAL} />\n </Absolute>\n </Relative>\n );\n}\n\nexport function SkinTonePicker({\n direction = SkinTonePickerDirection.HORIZONTAL\n}: Props) {\n const SkinTonePickerRef = useSkinTonePickerRef();\n const isDisabled = useSkinTonesDisabledConfig();\n const [isOpen, setIsOpen] = useSkinToneFanOpenState();\n const [activeSkinTone, setActiveSkinTone] = useActiveSkinToneState();\n const closeAllOpenToggles = useCloseAllOpenToggles();\n const focusSearchInput = useFocusSearchInput();\n\n if (isDisabled) {\n return null;\n }\n\n const fullWidth = `${ITEM_SIZE * skinToneVariations.length}px`;\n\n const expandedSize = isOpen ? fullWidth : ITEM_SIZE + 'px';\n\n const vertical = direction === SkinTonePickerDirection.VERTICAL;\n\n return (\n <Relative\n className={cx('epr-skin-tones', direction, {\n [ClassNames.open]: isOpen\n })}\n style={\n vertical\n ? { flexBasis: expandedSize, height: expandedSize }\n : { flexBasis: expandedSize }\n }\n >\n <div className=\"epr-skin-tone-select\" ref={SkinTonePickerRef}>\n {skinToneVariations.map((skinToneVariation, i) => {\n const active = skinToneVariation === activeSkinTone;\n return (\n <Button\n style={{\n transform: cx(\n vertical\n ? `translateY(-${i * (isOpen ? ITEM_SIZE : 0)}px)`\n : `translateX(-${i * (isOpen ? ITEM_SIZE : 0)}px)`,\n isOpen && active && 'scale(1.3)'\n )\n }}\n onClick={() => {\n if (isOpen) {\n setActiveSkinTone(skinToneVariation);\n focusSearchInput();\n } else {\n setIsOpen(true);\n }\n closeAllOpenToggles();\n }}\n key={skinToneVariation}\n className={cx(`epr-tone-${skinToneVariation}`, 'epr-tone', {\n [ClassNames.active]: active\n })}\n tabIndex={isOpen ? 0 : -1}\n aria-pressed={active}\n aria-label={`Skin tone ${\n skinTonesNamed[skinToneVariation as SkinTones]\n }`}\n ></Button>\n );\n })}\n </div>\n </Relative>\n );\n}\n\nexport enum SkinTonePickerDirection {\n VERTICAL = ClassNames.vertical,\n HORIZONTAL = ClassNames.horizontal\n}\n","import { cx } from 'flairup';\nimport * as React from 'react';\nimport { useState } from 'react';\n\nimport { stylesheet } from '../../Stylesheet/stylesheet';\nimport {\n useEmojiStyleConfig,\n useGetEmojiUrlConfig,\n usePreviewConfig\n} from '../../config/useConfig';\nimport {\n emojiByUnified,\n emojiName,\n emojiUnified\n} from '../../dataUtils/emojiSelectors';\nimport { useEmojiPreviewEvents } from '../../hooks/useEmojiPreviewEvents';\nimport { useIsSkinToneInPreview } from '../../hooks/useShouldShowSkinTonePicker';\nimport Flex from '../Layout/Flex';\nimport Space from '../Layout/Space';\nimport { useEmojiVariationPickerState } from '../context/PickerContext';\nimport { ViewOnlyEmoji } from '../emoji/ViewOnlyEmoji';\nimport { SkinTonePickerMenu } from '../header/SkinTonePicker';\n\nexport function Preview() {\n const previewConfig = usePreviewConfig();\n const isSkinToneInPreview = useIsSkinToneInPreview();\n\n if (!previewConfig.showPreview) {\n return null;\n }\n\n return (\n <Flex className={cx(styles.preview)}>\n <PreviewBody />\n <Space />\n {isSkinToneInPreview ? <SkinTonePickerMenu /> : null}\n </Flex>\n );\n}\n\nexport function PreviewBody() {\n const previewConfig = usePreviewConfig();\n const [previewEmoji, setPreviewEmoji] = useState<PreviewEmoji>(null);\n const emojiStyle = useEmojiStyleConfig();\n const [variationPickerEmoji] = useEmojiVariationPickerState();\n const getEmojiUrl = useGetEmojiUrlConfig();\n\n useEmojiPreviewEvents(previewConfig.showPreview, setPreviewEmoji);\n\n const emoji = emojiByUnified(\n previewEmoji?.unified ?? previewEmoji?.originalUnified\n );\n\n const show = emoji != null && previewEmoji != null;\n\n return <PreviewContent />;\n\n function PreviewContent() {\n const defaultEmoji =\n variationPickerEmoji ?? emojiByUnified(previewConfig.defaultEmoji);\n if (!defaultEmoji) {\n return null;\n }\n const defaultText = variationPickerEmoji\n ? emojiName(variationPickerEmoji)\n : previewConfig.defaultCaption;\n\n return (\n <>\n <div>\n {show ? (\n <ViewOnlyEmoji\n unified={previewEmoji?.unified as string}\n emoji={emoji}\n emojiStyle={emojiStyle}\n size={45}\n getEmojiUrl={getEmojiUrl}\n />\n ) : defaultEmoji ? (\n <ViewOnlyEmoji\n unified={emojiUnified(defaultEmoji)}\n emoji={defaultEmoji}\n emojiStyle={emojiStyle}\n size={45}\n getEmojiUrl={getEmojiUrl}\n />\n ) : null}\n </div>\n {show ? (\n <div className={cx(styles.label)}>{emojiName(emoji)}</div>\n ) : (\n <div className={cx(styles.label)}>{defaultText}</div>\n )}\n </>\n );\n }\n}\n\nexport type PreviewEmoji = null | {\n unified: string;\n originalUnified: string;\n};\n\nconst styles = stylesheet.create({\n preview: {\n alignItems: 'center',\n borderTop: '1px solid var(--epr-preview-border-color)',\n height: 'var(--epr-preview-height)',\n padding: '0 var(--epr-horizontal-padding)',\n position: 'relative',\n zIndex: 'var(--epr-preview-z-index)'\n },\n label: {\n color: 'var(--epr-preview-text-color)',\n fontSize: 'var(--epr-preview-text-size)',\n padding: 'var(--epr-preview-text-padding)',\n textTransform: 'capitalize'\n }\n});\n","export function categoryNameFromDom($category: Element | null): string | null {\n return $category?.getAttribute('data-name') ?? null;\n}\n","import { useEffect } from 'react';\n\nimport { categoryNameFromDom } from '../DomUtils/categoryNameFromDom';\nimport { asSelectors, ClassNames } from '../DomUtils/classNames';\nimport { useBodyRef } from '../components/context/ElementRefContext';\n\nexport function useActiveCategoryScrollDetection(\n setActiveCategory: (category: string) => void\n) {\n const BodyRef = useBodyRef();\n\n useEffect(() => {\n const visibleCategories = new Map();\n const bodyRef = BodyRef.current;\n const observer = new IntersectionObserver(\n entries => {\n if (!bodyRef) {\n return;\n }\n\n for (const entry of entries) {\n const id = categoryNameFromDom(entry.target);\n visibleCategories.set(id, entry.intersectionRatio);\n }\n\n const ratios = Array.from(visibleCategories);\n const lastCategory = ratios[ratios.length - 1];\n\n if (lastCategory[1] == 1) {\n return setActiveCategory(lastCategory[0]);\n }\n\n for (const [id, ratio] of ratios) {\n if (ratio) {\n setActiveCategory(id);\n break;\n }\n }\n },\n {\n threshold: [0, 1]\n }\n );\n bodyRef?.querySelectorAll(asSelectors(ClassNames.category)).forEach(el => {\n observer.observe(el);\n });\n }, [BodyRef, setActiveCategory]);\n}\n","import { useSearchTermState } from '../components/context/PickerContext';\n\nexport default function useIsSearchMode(): boolean {\n const [searchTerm] = useSearchTermState();\n\n return !!searchTerm;\n}\n","import { scrollTo } from '../DomUtils/scrollTo';\nimport { NullableElement } from '../DomUtils/selectors';\nimport {\n useBodyRef,\n usePickerMainRef\n} from '../components/context/ElementRefContext';\n\nexport function useScrollCategoryIntoView() {\n const BodyRef = useBodyRef();\n const PickerMainRef = usePickerMainRef();\n\n return function scrollCategoryIntoView(category: string): void {\n if (!BodyRef.current) {\n return;\n }\n const $category = BodyRef.current?.querySelector(\n `[data-name=\"${category}\"]`\n ) as NullableElement;\n\n if (!$category) {\n return;\n }\n\n const offsetTop = $category.offsetTop || 0;\n\n scrollTo(PickerMainRef.current, offsetTop);\n };\n}\n","import { useCustomEmojisConfig } from '../config/useConfig';\n\nexport function useShouldHideCustomEmojis() {\n const customCategoryConfig = useCustomEmojisConfig();\n\n if (!customCategoryConfig) {\n return false;\n }\n\n return customCategoryConfig.length === 0;\n}\n","import { cx } from 'flairup';\nimport * as React from 'react';\nimport { useState } from 'react';\nimport './CategoryNavigation.css';\n\nimport { ClassNames } from '../../DomUtils/classNames';\nimport { stylesheet } from '../../Stylesheet/stylesheet';\nimport {\n categoryFromCategoryConfig,\n categoryNameFromCategoryConfig\n} from '../../config/categoryConfig';\nimport { useCategoriesConfig } from '../../config/useConfig';\nimport { useActiveCategoryScrollDetection } from '../../hooks/useActiveCategoryScrollDetection';\nimport useIsSearchMode from '../../hooks/useIsSearchMode';\nimport { useScrollCategoryIntoView } from '../../hooks/useScrollCategoryIntoView';\nimport { useShouldHideCustomEmojis } from '../../hooks/useShouldHideCustomEmojis';\nimport { isCustomCategory } from '../../typeRefinements/typeRefinements';\nimport { Button } from '../atoms/Button';\nimport { useCategoryNavigationRef } from '../context/ElementRefContext';\n\nexport function CategoryNavigation() {\n const [activeCategory, setActiveCategory] = useState<string | null>(null);\n const scrollCategoryIntoView = useScrollCategoryIntoView();\n useActiveCategoryScrollDetection(setActiveCategory);\n const isSearchMode = useIsSearchMode();\n\n const categoriesConfig = useCategoriesConfig();\n const CategoryNavigationRef = useCategoryNavigationRef();\n const hideCustomCategory = useShouldHideCustomEmojis();\n\n return (\n <div\n className={cx(styles.nav)}\n role=\"tablist\"\n aria-label=\"Category navigation\"\n id=\"epr-category-nav-id\"\n ref={CategoryNavigationRef}\n >\n {categoriesConfig.map(categoryConfig => {\n const category = categoryFromCategoryConfig(categoryConfig);\n const isActiveCategory = category === activeCategory;\n\n if (isCustomCategory(categoryConfig) && hideCustomCategory) {\n return null;\n }\n\n return (\n <Button\n tabIndex={isSearchMode || isActiveCategory ? -1 : 0}\n className={cx(styles.catBtn, `epr-icn-${category}`, {\n [ClassNames.active]: isActiveCategory\n })}\n key={category}\n onClick={() => {\n setActiveCategory(category);\n scrollCategoryIntoView(category);\n }}\n aria-label={categoryNameFromCategoryConfig(categoryConfig)}\n aria-selected={isActiveCategory}\n role=\"tab\"\n aria-controls=\"epr-category-nav-id\"\n />\n );\n })}\n </div>\n );\n}\n\nconst styles = stylesheet.create({\n nav: {\n '.': 'epr-category-nav',\n display: 'flex',\n flexDirection: 'row',\n justifyContent: 'space-around',\n padding: 'var(--epr-header-padding)'\n },\n '.epr-search-active': {\n nav: {\n opacity: '0.3',\n cursor: 'default',\n pointerEvents: 'none'\n }\n },\n '.epr-main:has(input:not(:placeholder-shown))': {\n nav: {\n opacity: '0.3',\n cursor: 'default',\n pointerEvents: 'none'\n }\n },\n catBtn: {\n '.': 'epr-cat-btn',\n display: 'inline-block',\n transition: 'opacity 0.2s ease-in-out',\n position: 'relative',\n height: 'var(--epr-category-navigation-button-size)',\n width: 'var(--epr-category-navigation-button-size)',\n backgroundSize: 'calc(var(--epr-category-navigation-button-size) * 10)',\n outline: 'none',\n backgroundPosition: '0 0',\n ':focus:before': {\n content: '',\n position: 'absolute',\n top: '-2px',\n left: '-2px',\n right: '-2px',\n bottom: '-2px',\n border: '2px solid var(--epr-category-icon-active-color)',\n borderRadius: '50%'\n }\n }\n});\n","import * as React from 'react';\n\nimport { ClassNames, asSelectors } from '../../DomUtils/classNames';\nimport { getNormalizedSearchTerm } from '../../hooks/useFilter';\n\nconst SCOPE = `${asSelectors(ClassNames.emojiPicker)} ${asSelectors(\n ClassNames.emojiList\n)}`;\n\nconst EMOJI_BUTTON = ['button', asSelectors(ClassNames.emoji)].join('');\nconst CATEGORY = asSelectors(ClassNames.category);\n\nexport function CssSearch({ value }: { value: undefined | string }) {\n if (!value) {\n return null;\n }\n\n const q = genQuery(value);\n\n return (\n <style>{`\n ${SCOPE} ${EMOJI_BUTTON} {\n display: none;\n }\n\n\n ${SCOPE} ${q} {\n display: flex;\n }\n\n ${SCOPE} ${CATEGORY}:not(:has(${q})) {\n display: none;\n }\n `}</style>\n );\n}\n\nfunction genQuery(value: string): string {\n return [\n EMOJI_BUTTON,\n '[data-full-name*=\"',\n getNormalizedSearchTerm(value),\n '\"]'\n ].join('');\n}\n","import { cx } from 'flairup';\nimport * as React from 'react';\nimport { useState } from 'react';\n\nimport { stylesheet } from '../../Stylesheet/stylesheet';\nimport {\n useAutoFocusSearchConfig,\n useSearchDisabledConfig,\n useSearchPlaceHolderConfig\n} from '../../config/useConfig';\nimport { useCloseAllOpenToggles } from '../../hooks/useCloseAllOpenToggles';\nimport { useClearSearch, useFilter } from '../../hooks/useFilter';\nimport { useIsSkinToneInSearch } from '../../hooks/useShouldShowSkinTonePicker';\nimport Flex from '../Layout/Flex';\nimport Relative from '../Layout/Relative';\nimport { Button } from '../atoms/Button';\nimport { useSearchInputRef } from '../context/ElementRefContext';\n\nimport './Search.css';\nimport { CssSearch } from './CssSearch';\nimport { SkinTonePicker } from './SkinTonePicker';\n\nexport function SearchContainer() {\n const searchDisabled = useSearchDisabledConfig();\n\n const isSkinToneInSearch = useIsSkinToneInSearch();\n\n if (searchDisabled) {\n return null;\n }\n\n return (\n <Flex className={cx(styles.overlay)}>\n <Search />\n\n {isSkinToneInSearch ? <SkinTonePicker /> : null}\n </Flex>\n );\n}\n\nexport function Search() {\n const [inc, setInc] = useState(0);\n const closeAllOpenToggles = useCloseAllOpenToggles();\n const SearchInputRef = useSearchInputRef();\n const clearSearch = useClearSearch();\n const placeholder = useSearchPlaceHolderConfig();\n const autoFocus = useAutoFocusSearchConfig();\n const { statusSearchResults, searchTerm, onChange } = useFilter();\n\n const input = SearchInputRef?.current;\n const value = input?.value;\n\n return (\n <Relative className={cx(styles.searchContainer)}>\n <CssSearch value={value} />\n <input\n // eslint-disable-next-line jsx-a11y/no-autofocus\n autoFocus={autoFocus}\n aria-label={'Type to search for an emoji'}\n onFocus={closeAllOpenToggles}\n className={cx(styles.search)}\n type=\"text\"\n aria-controls=\"epr-search-id\"\n placeholder={placeholder}\n onChange={event => {\n setInc(inc + 1);\n setTimeout(() => {\n onChange(event?.target?.value ?? value);\n });\n }}\n ref={SearchInputRef}\n />\n {searchTerm ? (\n <div\n role=\"status\"\n className={cx('epr-status-search-results', styles.visuallyHidden)}\n aria-live=\"polite\"\n id=\"epr-search-id\"\n aria-atomic=\"true\"\n >\n {statusSearchResults}\n </div>\n ) : null}\n <div className={cx(styles.icnSearch)} />\n <Button\n className={cx(styles.btnClearSearch, 'epr-visible-on-search-only')}\n onClick={clearSearch}\n aria-label=\"Clear\"\n title=\"Clear\"\n >\n <div className={cx(styles.icnClearnSearch)} />\n </Button>\n </Relative>\n );\n}\n\nconst styles = stylesheet.create({\n overlay: {\n padding: 'var(--epr-header-padding)',\n zIndex: 'var(--epr-header-overlay-z-index)'\n },\n searchContainer: {\n '.': 'epr-search-container',\n flex: '1',\n display: 'block',\n minWidth: '0'\n },\n visuallyHidden: {\n clip: 'rect(0 0 0 0)',\n clipPath: 'inset(50%)',\n height: '1px',\n overflow: 'hidden',\n position: 'absolute',\n whiteSpace: 'nowrap',\n width: '1px'\n },\n search: {\n outline: 'none',\n transition: 'all 0.2s ease-in-out',\n color: 'var(--epr-search-input-text-color)',\n borderRadius: 'var(--epr-search-input-border-radius)',\n padding: 'var(--epr-search-input-padding)',\n height: 'var(--epr-search-input-height)',\n backgroundColor: 'var(--epr-search-input-bg-color)',\n border: '1px solid var(--epr-search-input-bg-color)',\n width: '100%',\n ':focus': {\n backgroundColor: 'var(--epr-search-input-bg-color-active)',\n border: '1px solid var(--epr-search-border-color)'\n },\n '::placeholder': {\n color: 'var(--epr-search-input-placeholder-color)'\n }\n },\n icnSearch: {\n '.': 'epr-icn-search',\n content: '',\n position: 'absolute',\n top: '50%',\n left: 'var(--epr-search-bar-inner-padding)',\n transform: 'translateY(-50%)',\n width: '20px',\n height: '20px',\n backgroundRepeat: 'no-repeat',\n backgroundPosition: '0 0',\n backgroundSize: '20px'\n },\n btnClearSearch: {\n '.': 'epr-btn-clear-search',\n position: 'absolute',\n right: 'var(--epr-search-bar-inner-padding)',\n height: '30px',\n width: '30px',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n top: '50%',\n transform: 'translateY(-50%)',\n padding: '0',\n borderRadius: '50%',\n ':hover': {\n background: 'var(--epr-hover-bg-color)'\n },\n ':focus': {\n background: 'var(--epr-hover-bg-color)'\n }\n },\n icnClearnSearch: {\n '.': 'epr-icn-clear-search',\n backgroundColor: 'transparent',\n backgroundRepeat: 'no-repeat',\n backgroundSize: '20px',\n height: '20px',\n width: '20px',\n ':hover': {\n backgroundPositionY: '-20px'\n },\n ':focus': {\n backgroundPositionY: '-20px'\n }\n },\n '.epr-dark-theme': {\n icnSearch: {\n backgroundPositionY: '-20px'\n },\n icnClearnSearch: {\n backgroundPositionY: '-40px'\n },\n btnClearSearch: {\n ':hover > .epr-icn-clear-search': {\n backgroundPositionY: '-60px'\n }\n }\n },\n '.epr-auto-theme': {\n icnSearch: {\n // @ts-ignore\n '@media (prefers-color-scheme: dark)': {\n backgroundPositionY: '-20px'\n }\n },\n icnClearnSearch: {\n // @ts-ignore\n '@media (prefers-color-scheme: dark)': {\n backgroundPositionY: '-40px'\n }\n },\n btnClearSearch: {\n // @ts-ignore\n '@media (prefers-color-scheme: dark)': {\n // @ts-ignore\n ':hover > .epr-icn-clear-search': {\n backgroundPositionY: '-60px'\n }\n }\n }\n }\n});\n","import * as React from 'react';\n\nimport Relative from '../Layout/Relative';\nimport { CategoryNavigation } from '../navigation/CategoryNavigation';\n\nimport { SearchContainer } from './Search';\n\nexport function Header() {\n return (\n <Relative className=\"epr-header\">\n <SearchContainer />\n <CategoryNavigation />\n </Relative>\n );\n}\n","import { NullableElement } from './selectors';\n\nexport function getActiveElement() {\n return document.activeElement as NullableElement;\n}\n","import { useCallback, useEffect, useMemo } from 'react';\n\nimport { hasNextElementSibling } from '../DomUtils/elementPositionInRow';\nimport {\n focusNextElementSibling,\n focusPrevElementSibling\n} from '../DomUtils/focusElement';\nimport { getActiveElement } from '../DomUtils/getActiveElement';\nimport {\n focusAndClickFirstVisibleEmoji,\n focusFirstVisibleEmoji,\n focusNextVisibleEmoji,\n focusPrevVisibleEmoji,\n focusVisibleEmojiOneRowDown,\n focusVisibleEmojiOneRowUp\n} from '../DomUtils/keyboardNavigation';\nimport { useScrollTo } from '../DomUtils/scrollTo';\nimport { buttonFromTarget } from '../DomUtils/selectors';\nimport {\n useBodyRef,\n useCategoryNavigationRef,\n usePickerMainRef,\n useSearchInputRef,\n useSkinTonePickerRef\n} from '../components/context/ElementRefContext';\nimport { useSkinToneFanOpenState } from '../components/context/PickerContext';\nimport { useSearchDisabledConfig } from '../config/useConfig';\n\nimport {\n useCloseAllOpenToggles,\n useHasOpenToggles\n} from './useCloseAllOpenToggles';\nimport { useDisallowMouseMove } from './useDisallowMouseMove';\nimport { useAppendSearch, useClearSearch } from './useFilter';\nimport {\n useFocusCategoryNavigation,\n useFocusSearchInput,\n useFocusSkinTonePicker\n} from './useFocus';\nimport useIsSearchMode from './useIsSearchMode';\nimport useSetVariationPicker from './useSetVariationPicker';\nimport {\n useIsSkinToneInPreview,\n useIsSkinToneInSearch\n} from './useShouldShowSkinTonePicker';\n\nenum KeyboardEvents {\n ArrowDown = 'ArrowDown',\n ArrowUp = 'ArrowUp',\n ArrowLeft = 'ArrowLeft',\n ArrowRight = 'ArrowRight',\n Escape = 'Escape',\n Enter = 'Enter',\n Space = ' '\n}\n\nexport function useKeyboardNavigation() {\n usePickerMainKeyboardEvents();\n useSearchInputKeyboardEvents();\n useSkinTonePickerKeyboardEvents();\n useCategoryNavigationKeyboardEvents();\n useBodyKeyboardEvents();\n}\n\nfunction usePickerMainKeyboardEvents() {\n const PickerMainRef = usePickerMainRef();\n const clearSearch = useClearSearch();\n const scrollTo = useScrollTo();\n const SearchInputRef = useSearchInputRef();\n const focusSearchInput = useFocusSearchInput();\n const hasOpenToggles = useHasOpenToggles();\n const disallowMouseMove = useDisallowMouseMove();\n\n const closeAllOpenToggles = useCloseAllOpenToggles();\n\n const onKeyDown = useMemo(\n () =>\n function onKeyDown(event: KeyboardEvent) {\n const { key } = event;\n\n disallowMouseMove();\n switch (key) {\n // eslint-disable-next-line no-fallthrough\n case KeyboardEvents.Escape:\n event.preventDefault();\n if (hasOpenToggles()) {\n closeAllOpenToggles();\n return;\n }\n clearSearch();\n scrollTo(0);\n focusSearchInput();\n break;\n }\n },\n [\n scrollTo,\n clearSearch,\n closeAllOpenToggles,\n focusSearchInput,\n hasOpenToggles,\n disallowMouseMove\n ]\n );\n\n useEffect(() => {\n const current = PickerMainRef.current;\n\n if (!current) {\n return;\n }\n\n current.addEventListener('keydown', onKeyDown);\n\n return () => {\n current.removeEventListener('keydown', onKeyDown);\n };\n }, [PickerMainRef, SearchInputRef, scrollTo, onKeyDown]);\n}\n\nfunction useSearchInputKeyboardEvents() {\n const focusSkinTonePicker = useFocusSkinTonePicker();\n const PickerMainRef = usePickerMainRef();\n const BodyRef = useBodyRef();\n const SearchInputRef = useSearchInputRef();\n const [, setSkinToneFanOpenState] = useSkinToneFanOpenState();\n const goDownFromSearchInput = useGoDownFromSearchInput();\n const isSkinToneInSearch = useIsSkinToneInSearch();\n\n const onKeyDown = useMemo(\n () =>\n function onKeyDown(event: KeyboardEvent) {\n const { key } = event;\n\n switch (key) {\n case KeyboardEvents.ArrowRight:\n if (!isSkinToneInSearch) {\n return;\n }\n event.preventDefault();\n setSkinToneFanOpenState(true);\n focusSkinTonePicker();\n break;\n case KeyboardEvents.ArrowDown:\n event.preventDefault();\n goDownFromSearchInput();\n break;\n case KeyboardEvents.Enter:\n event.preventDefault();\n focusAndClickFirstVisibleEmoji(BodyRef.current);\n break;\n }\n },\n [\n focusSkinTonePicker,\n goDownFromSearchInput,\n setSkinToneFanOpenState,\n BodyRef,\n isSkinToneInSearch\n ]\n );\n\n useEffect(() => {\n const current = SearchInputRef.current;\n\n if (!current) {\n return;\n }\n\n current.addEventListener('keydown', onKeyDown);\n\n return () => {\n current.removeEventListener('keydown', onKeyDown);\n };\n }, [PickerMainRef, SearchInputRef, onKeyDown]);\n}\n\nfunction useSkinTonePickerKeyboardEvents() {\n const SkinTonePickerRef = useSkinTonePickerRef();\n const focusSearchInput = useFocusSearchInput();\n const SearchInputRef = useSearchInputRef();\n const goDownFromSearchInput = useGoDownFromSearchInput();\n const [isOpen, setIsOpen] = useSkinToneFanOpenState();\n const isSkinToneInPreview = useIsSkinToneInPreview();\n const isSkinToneInSearch = useIsSkinToneInSearch();\n const onType = useOnType();\n\n const onKeyDown = useMemo(\n () =>\n // eslint-disable-next-line complexity\n function onKeyDown(event: KeyboardEvent) {\n const { key } = event;\n\n if (isSkinToneInSearch) {\n switch (key) {\n case KeyboardEvents.ArrowLeft:\n event.preventDefault();\n if (!isOpen) {\n return focusSearchInput();\n }\n focusNextSkinTone(focusSearchInput);\n break;\n case KeyboardEvents.ArrowRight:\n event.preventDefault();\n if (!isOpen) {\n return focusSearchInput();\n }\n focusPrevSkinTone();\n break;\n case KeyboardEvents.ArrowDown:\n event.preventDefault();\n if (isOpen) {\n setIsOpen(false);\n }\n goDownFromSearchInput();\n break;\n default:\n onType(event);\n break;\n }\n }\n\n if (isSkinToneInPreview) {\n switch (key) {\n case KeyboardEvents.ArrowUp:\n event.preventDefault();\n if (!isOpen) {\n return focusSearchInput();\n }\n focusNextSkinTone(focusSearchInput);\n break;\n case KeyboardEvents.ArrowDown:\n event.preventDefault();\n if (!isOpen) {\n return focusSearchInput();\n }\n focusPrevSkinTone();\n break;\n default:\n onType(event);\n break;\n }\n }\n },\n [\n isOpen,\n focusSearchInput,\n setIsOpen,\n goDownFromSearchInput,\n onType,\n isSkinToneInPreview,\n isSkinToneInSearch\n ]\n );\n\n useEffect(() => {\n const current = SkinTonePickerRef.current;\n\n if (!current) {\n return;\n }\n\n current.addEventListener('keydown', onKeyDown);\n\n return () => {\n current.removeEventListener('keydown', onKeyDown);\n };\n }, [SkinTonePickerRef, SearchInputRef, isOpen, onKeyDown]);\n}\n\nfunction useCategoryNavigationKeyboardEvents() {\n const focusSearchInput = useFocusSearchInput();\n const CategoryNavigationRef = useCategoryNavigationRef();\n const BodyRef = useBodyRef();\n const onType = useOnType();\n\n const onKeyDown = useMemo(\n () =>\n function onKeyDown(event: KeyboardEvent) {\n const { key } = event;\n\n switch (key) {\n case KeyboardEvents.ArrowUp:\n event.preventDefault();\n focusSearchInput();\n break;\n case KeyboardEvents.ArrowRight:\n event.preventDefault();\n focusNextElementSibling(getActiveElement());\n break;\n case KeyboardEvents.ArrowLeft:\n event.preventDefault();\n focusPrevElementSibling(getActiveElement());\n break;\n case KeyboardEvents.ArrowDown:\n event.preventDefault();\n focusFirstVisibleEmoji(BodyRef.current);\n break;\n default:\n onType(event);\n break;\n }\n },\n [BodyRef, focusSearchInput, onType]\n );\n\n useEffect(() => {\n const current = CategoryNavigationRef.current;\n\n if (!current) {\n return;\n }\n\n current.addEventListener('keydown', onKeyDown);\n\n return () => {\n current.removeEventListener('keydown', onKeyDown);\n };\n }, [CategoryNavigationRef, BodyRef, onKeyDown]);\n}\n\nfunction useBodyKeyboardEvents() {\n const BodyRef = useBodyRef();\n const goUpFromBody = useGoUpFromBody();\n const setVariationPicker = useSetVariationPicker();\n const hasOpenToggles = useHasOpenToggles();\n const closeAllOpenToggles = useCloseAllOpenToggles();\n\n const onType = useOnType();\n\n const onKeyDown = useMemo(\n () =>\n // eslint-disable-next-line complexity\n function onKeyDown(event: KeyboardEvent) {\n const { key } = event;\n\n const activeElement = buttonFromTarget(getActiveElement());\n\n switch (key) {\n case KeyboardEvents.ArrowRight:\n event.preventDefault();\n focusNextVisibleEmoji(activeElement);\n break;\n case KeyboardEvents.ArrowLeft:\n event.preventDefault();\n focusPrevVisibleEmoji(activeElement);\n break;\n case KeyboardEvents.ArrowDown:\n event.preventDefault();\n if (hasOpenToggles()) {\n closeAllOpenToggles();\n break;\n }\n focusVisibleEmojiOneRowDown(activeElement);\n break;\n case KeyboardEvents.ArrowUp:\n event.preventDefault();\n if (hasOpenToggles()) {\n closeAllOpenToggles();\n break;\n }\n focusVisibleEmojiOneRowUp(activeElement, goUpFromBody);\n break;\n case KeyboardEvents.Space:\n event.preventDefault();\n setVariationPicker(event.target as HTMLElement);\n break;\n default:\n onType(event);\n break;\n }\n },\n [\n goUpFromBody,\n onType,\n setVariationPicker,\n hasOpenToggles,\n closeAllOpenToggles\n ]\n );\n\n useEffect(() => {\n const current = BodyRef.current;\n\n if (!current) {\n return;\n }\n\n current.addEventListener('keydown', onKeyDown);\n\n return () => {\n current.removeEventListener('keydown', onKeyDown);\n };\n }, [BodyRef, onKeyDown]);\n}\n\nfunction useGoDownFromSearchInput() {\n const focusCategoryNavigation = useFocusCategoryNavigation();\n const isSearchMode = useIsSearchMode();\n const BodyRef = useBodyRef();\n\n return useCallback(\n function goDownFromSearchInput() {\n if (isSearchMode) {\n return focusFirstVisibleEmoji(BodyRef.current);\n }\n return focusCategoryNavigation();\n },\n [BodyRef, focusCategoryNavigation, isSearchMode]\n );\n}\n\nfunction useGoUpFromBody() {\n const focusSearchInput = useFocusSearchInput();\n const focusCategoryNavigation = useFocusCategoryNavigation();\n const isSearchMode = useIsSearchMode();\n\n return useCallback(\n function goUpFromEmoji() {\n if (isSearchMode) {\n return focusSearchInput();\n }\n return focusCategoryNavigation();\n },\n [focusSearchInput, isSearchMode, focusCategoryNavigation]\n );\n}\n\nfunction focusNextSkinTone(exitLeft: () => void) {\n const currentSkinTone = getActiveElement();\n\n if (!currentSkinTone) {\n return;\n }\n\n if (!hasNextElementSibling(currentSkinTone)) {\n exitLeft();\n }\n\n focusNextElementSibling(currentSkinTone);\n}\n\nfunction focusPrevSkinTone() {\n const currentSkinTone = getActiveElement();\n\n if (!currentSkinTone) {\n return;\n }\n\n focusPrevElementSibling(currentSkinTone);\n}\n\nfunction useOnType() {\n const appendSearch = useAppendSearch();\n const focusSearchInput = useFocusSearchInput();\n const searchDisabled = useSearchDisabledConfig();\n const closeAllOpenToggles = useCloseAllOpenToggles();\n\n return function onType(event: KeyboardEvent) {\n const { key } = event;\n\n if (hasModifier(event) || searchDisabled) {\n return;\n }\n\n if (key.match(/(^[a-zA-Z0-9]$){1}/)) {\n event.preventDefault();\n closeAllOpenToggles();\n focusSearchInput();\n appendSearch(key);\n }\n };\n}\n\nfunction hasModifier(event: KeyboardEvent): boolean {\n const { metaKey, ctrlKey, altKey } = event;\n\n return metaKey || ctrlKey || altKey;\n}\n","import { GetEmojiUrl } from '../components/emoji/BaseEmojiProps';\nimport { DataEmoji } from '../dataUtils/DataTypes';\nimport { emojiUnified, emojiVariations } from '../dataUtils/emojiSelectors';\nimport { EmojiStyle } from '../types/exposedTypes';\n\nexport function preloadEmoji(\n getEmojiUrl: GetEmojiUrl,\n emoji: undefined | DataEmoji,\n emojiStyle: EmojiStyle\n): void {\n if (!emoji) {\n return;\n }\n\n if (emojiStyle === EmojiStyle.NATIVE) {\n return;\n }\n\n const unified = emojiUnified(emoji);\n\n if (preloadedEmojs.has(unified)) {\n return;\n }\n\n emojiVariations(emoji).forEach((variation) => {\n const emojiUrl = getEmojiUrl(variation, emojiStyle);\n preloadImage(emojiUrl);\n });\n\n preloadedEmojs.add(unified);\n}\n\nexport const preloadedEmojs: Set<string> = new Set();\n\nfunction preloadImage(url: string): void {\n const image = new Image();\n image.src = url;\n}\n","import { useEffect } from 'react';\n\nimport { buttonFromTarget, emojiFromElement } from '../DomUtils/selectors';\nimport { useBodyRef } from '../components/context/ElementRefContext';\nimport { useEmojiStyleConfig, useGetEmojiUrlConfig } from '../config/useConfig';\nimport { emojiHasVariations } from '../dataUtils/emojiSelectors';\nimport { EmojiStyle } from '../types/exposedTypes';\n\nimport { preloadEmoji } from './preloadEmoji';\n\nexport function useOnFocus() {\n const BodyRef = useBodyRef();\n const emojiStyle = useEmojiStyleConfig();\n const getEmojiUrl = useGetEmojiUrlConfig();\n\n useEffect(() => {\n if (emojiStyle === EmojiStyle.NATIVE) {\n return;\n }\n\n const bodyRef = BodyRef.current;\n\n bodyRef?.addEventListener('focusin', onFocus);\n\n return () => {\n bodyRef?.removeEventListener('focusin', onFocus);\n };\n\n function onFocus(event: FocusEvent) {\n const button = buttonFromTarget(event.target as HTMLElement);\n\n if (!button) {\n return;\n }\n\n const [emoji] = emojiFromElement(button);\n\n if (!emoji) {\n return;\n }\n\n if (emojiHasVariations(emoji)) {\n preloadEmoji(getEmojiUrl, emoji, emojiStyle);\n }\n }\n }, [BodyRef, emojiStyle, getEmojiUrl]);\n}\n","import { cx } from 'flairup';\nimport * as React from 'react';\n\nimport { ClassNames } from '../../DomUtils/classNames';\nimport { stylesheet } from '../../Stylesheet/stylesheet';\nimport {\n useClassNameConfig,\n useStyleConfig,\n useThemeConfig\n} from '../../config/useConfig';\nimport useIsSearchMode from '../../hooks/useIsSearchMode';\nimport { useKeyboardNavigation } from '../../hooks/useKeyboardNavigation';\nimport { useOnFocus } from '../../hooks/useOnFocus';\nimport { Theme } from '../../types/exposedTypes';\nimport { usePickerMainRef } from '../context/ElementRefContext';\nimport { PickerContextProvider } from '../context/PickerContext';\n\ntype Props = Readonly<{\n children: React.ReactNode;\n}>;\n\nexport default function PickerMain({ children }: Props) {\n return (\n <PickerContextProvider>\n <PickerRootElement>{children}</PickerRootElement>\n </PickerContextProvider>\n );\n}\n\ntype RootProps = Readonly<{\n className?: string;\n style?: React.CSSProperties;\n children: React.ReactNode;\n}>;\n\nfunction PickerRootElement({ children }: RootProps) {\n const theme = useThemeConfig();\n const searchModeActive = useIsSearchMode();\n const PickerMainRef = usePickerMainRef();\n const className = useClassNameConfig();\n const style = useStyleConfig();\n\n useKeyboardNavigation();\n useOnFocus();\n\n return (\n <aside\n className={cx(\n styles.main,\n styles.baseVariables,\n theme === Theme.DARK && styles.darkTheme,\n theme === Theme.AUTO && styles.autoThemeDark,\n {\n [ClassNames.searchActive]: searchModeActive\n },\n className\n )}\n ref={PickerMainRef}\n style={style}\n >\n {children}\n </aside>\n );\n}\n\nconst DarkTheme = {\n '--epr-emoji-variation-picker-bg-color':\n 'var(--epr-dark-emoji-variation-picker-bg-color)',\n '--epr-highlight-color': 'var(--epr-dark-highlight-color)',\n '--epr-text-color': 'var(--epr-dark-text-color)',\n '--epr-hover-bg-color': 'var(--epr-dark-hover-bg-color)',\n '--epr-focus-bg-color': 'var(--epr-dark-focus-bg-color)',\n '--epr-search-input-bg-color': 'var(--epr-dark-search-input-bg-color)',\n '--epr-category-label-bg-color': 'var(--epr-dark-category-label-bg-color)',\n '--epr-picker-border-color': 'var(--epr-dark-picker-border-color)',\n '--epr-bg-color': 'var(--epr-dark-bg-color)',\n '--epr-search-input-bg-color-active':\n 'var(--epr-dark-search-input-bg-color-active)',\n '--epr-emoji-variation-indicator-color':\n 'var(--epr-dark-emoji-variation-indicator-color)',\n '--epr-category-icon-active-color':\n 'var(--epr-dark-category-icon-active-color)',\n '--epr-skin-tone-picker-menu-color':\n 'var(--epr-dark-skin-tone-picker-menu-color)'\n};\n\nconst styles = stylesheet.create({\n main: {\n '.': ['epr-main', ClassNames.emojiPicker],\n position: 'relative',\n display: 'flex',\n flexDirection: 'column',\n borderWidth: '1px',\n borderStyle: 'solid',\n borderRadius: 'var(--epr-picker-border-radius)',\n borderColor: 'var(--epr-picker-border-color)',\n backgroundColor: 'var(--epr-bg-color)',\n overflow: 'hidden'\n },\n baseVariables: {\n '--': {\n '--epr-highlight-color': '#007aeb',\n '--epr-hover-bg-color': '#f1f8ff',\n '--epr-focus-bg-color': '#e0f0ff',\n '--epr-text-color': '#858585',\n '--epr-search-input-bg-color': '#f6f6f6',\n '--epr-picker-border-color': '#e7e7e7',\n '--epr-bg-color': '#fff',\n '--epr-category-icon-active-color': '#6aa8de',\n '--epr-skin-tone-picker-menu-color': '#ffffff95',\n\n '--epr-horizontal-padding': '10px',\n\n '--epr-picker-border-radius': '8px',\n\n /* Header */\n '--epr-search-border-color': 'var(--epr-highlight-color)',\n '--epr-header-padding': '15px var(--epr-horizontal-padding)',\n\n /* Skin Tone Picker */\n '--epr-active-skin-tone-indicator-border-color':\n 'var(--epr-highlight-color)',\n '--epr-active-skin-hover-color': 'var(--epr-hover-bg-color)',\n\n /* Search */\n '--epr-search-input-bg-color-active': 'var(--epr-search-input-bg-color)',\n '--epr-search-input-padding': '0 30px',\n '--epr-search-input-border-radius': '8px',\n '--epr-search-input-height': '40px',\n '--epr-search-input-text-color': 'var(--epr-text-color)',\n '--epr-search-input-placeholder-color': 'var(--epr-text-color)',\n '--epr-search-bar-inner-padding': 'var(--epr-horizontal-padding)',\n\n /* Category Navigation */\n '--epr-category-navigation-button-size': '30px',\n\n /* Variation Picker */\n '--epr-emoji-variation-picker-height': '45px',\n '--epr-emoji-variation-picker-bg-color': 'var(--epr-bg-color)',\n\n /* Preview */\n '--epr-preview-height': '70px',\n '--epr-preview-text-size': '14px',\n '--epr-preview-text-padding': '0 var(--epr-horizontal-padding)',\n '--epr-preview-border-color': 'var(--epr-picker-border-color)',\n '--epr-preview-text-color': 'var(--epr-text-color)',\n\n /* Category */\n '--epr-category-padding': '0 var(--epr-horizontal-padding)',\n\n /* Category Label */\n '--epr-category-label-bg-color': '#ffffffe6',\n '--epr-category-label-text-color': 'var(--epr-text-color)',\n '--epr-category-label-padding': '0 var(--epr-horizontal-padding)',\n '--epr-category-label-height': '40px',\n\n /* Emoji */\n '--epr-emoji-size': '30px',\n '--epr-emoji-padding': '5px',\n '--epr-emoji-fullsize':\n 'calc(var(--epr-emoji-size) + var(--epr-emoji-padding) * 2)',\n '--epr-emoji-hover-color': 'var(--epr-hover-bg-color)',\n '--epr-emoji-variation-indicator-color': 'var(--epr-picker-border-color)',\n '--epr-emoji-variation-indicator-color-hover': 'var(--epr-text-color)',\n\n /* Z-Index */\n '--epr-header-overlay-z-index': '3',\n '--epr-emoji-variations-indictator-z-index': '1',\n '--epr-category-label-z-index': '2',\n '--epr-skin-variation-picker-z-index': '5',\n '--epr-preview-z-index': '6',\n\n /* Dark Theme Variables */\n '--epr-dark': '#000',\n '--epr-dark-emoji-variation-picker-bg-color': 'var(--epr-dark)',\n '--epr-dark-highlight-color': '#c0c0c0',\n '--epr-dark-text-color': 'var(--epr-highlight-color)',\n '--epr-dark-hover-bg-color': '#363636f6',\n '--epr-dark-focus-bg-color': '#474747',\n '--epr-dark-search-input-bg-color': '#333333',\n '--epr-dark-category-label-bg-color': '#222222e6',\n '--epr-dark-picker-border-color': '#151617',\n '--epr-dark-bg-color': '#222222',\n '--epr-dark-search-input-bg-color-active': 'var(--epr-dark)',\n '--epr-dark-emoji-variation-indicator-color': '#444',\n '--epr-dark-category-icon-active-color': '#3271b7',\n '--epr-dark-skin-tone-picker-menu-color': '#22222295'\n }\n },\n autoThemeDark: {\n '.': ClassNames.autoTheme,\n '@media (prefers-color-scheme: dark)': {\n '--': DarkTheme\n }\n },\n darkTheme: {\n '.': ClassNames.darkTheme,\n '--': DarkTheme\n }\n});\n","import * as React from 'react';\n\nimport { Body } from './components/body/Body';\nimport { ElementRefContextProvider } from './components/context/ElementRefContext';\nimport { PickerConfigProvider } from './components/context/PickerConfigContext';\nimport { Preview } from './components/footer/Preview';\nimport { Header } from './components/header/Header';\nimport PickerMain from './components/main/PickerMain';\n\nimport './EmojiPickerReact.css';\nimport { PickerProps } from './index';\n\nfunction EmojiPicker(props: PickerProps) {\n return (\n <ElementRefContextProvider>\n <PickerConfigProvider {...props}>\n <PickerMain>\n <Header />\n <Body />\n <Preview />\n </PickerMain>\n </PickerConfigProvider>\n </ElementRefContextProvider>\n );\n}\n\n// eslint-disable-next-line complexity\nexport default React.memo(EmojiPicker, (prev, next) => {\n const prevCustomEmojis = prev.customEmojis ?? [];\n const nextCustomEmojis = next.customEmojis ?? [];\n return (\n prev.emojiVersion === next.emojiVersion &&\n prev.searchPlaceHolder === next.searchPlaceHolder &&\n prev.searchPlaceholder === next.searchPlaceholder &&\n prev.defaultSkinTone === next.defaultSkinTone &&\n prev.skinTonesDisabled === next.skinTonesDisabled &&\n prev.autoFocusSearch === next.autoFocusSearch &&\n prev.emojiStyle === next.emojiStyle &&\n prev.theme === next.theme &&\n prev.suggestedEmojisMode === next.suggestedEmojisMode &&\n prev.lazyLoadEmojis === next.lazyLoadEmojis &&\n prev.className === next.className &&\n prev.height === next.height &&\n prev.width === next.width &&\n prev.style === next.style &&\n prev.searchDisabled === next.searchDisabled &&\n prev.skinTonePickerLocation === next.skinTonePickerLocation &&\n prevCustomEmojis.length === nextCustomEmojis.length\n );\n});\n","import * as React from 'react';\n\nexport default class ErrorBoundary extends React.Component<\n { children: React.ReactNode },\n { hasError: boolean }\n> {\n constructor(props: { children: React.ReactNode }) {\n super(props);\n this.state = { hasError: false };\n }\n\n static getDerivedStateFromError() {\n return { hasError: true };\n }\n\n componentDidCatch(error: Error, errorInfo: any) {\n // eslint-disable-next-line no-console\n console.error('Emoji Picker React failed to render:', error, errorInfo);\n }\n\n render() {\n if (this.state.hasError) {\n return null;\n }\n\n return this.props.children;\n }\n}\n","import * as React from 'react';\n\nimport { EmojiStyle } from '../../types/exposedTypes';\n\nimport { GetEmojiUrl } from './BaseEmojiProps';\nimport { ViewOnlyEmoji } from './ViewOnlyEmoji';\n\nexport function ExportedEmoji({\n unified,\n size = 32,\n emojiStyle = EmojiStyle.APPLE,\n lazyLoad = false,\n getEmojiUrl,\n emojiUrl\n}: {\n unified: string;\n emojiStyle?: EmojiStyle;\n size?: number;\n lazyLoad?: boolean;\n getEmojiUrl?: GetEmojiUrl;\n emojiUrl?: string;\n}) {\n if (!unified && !emojiUrl && !getEmojiUrl) {\n return null;\n }\n\n return (\n <ViewOnlyEmoji\n unified={unified}\n size={size}\n emojiStyle={emojiStyle}\n lazyLoad={lazyLoad}\n getEmojiUrl={emojiUrl ? () => emojiUrl : getEmojiUrl}\n />\n );\n}\n","import * as React from 'react';\n\nimport EmojiPickerReact from './EmojiPickerReact';\nimport ErrorBoundary from './components/ErrorBoundary';\nimport { PickerConfig } from './config/config';\nimport {\n MutableConfigContext,\n useDefineMutableConfig\n} from './config/mutableConfig';\n\nexport { ExportedEmoji as Emoji } from './components/emoji/ExportedEmoji';\n\nexport {\n EmojiStyle,\n SkinTones,\n Theme,\n Categories,\n EmojiClickData,\n SuggestionMode,\n SkinTonePickerLocation\n} from './types/exposedTypes';\n\nexport interface PickerProps extends PickerConfig {}\n\nexport default function EmojiPicker(props: PickerProps) {\n const MutableConfigRef = useDefineMutableConfig({\n onEmojiClick: props.onEmojiClick\n });\n\n return (\n <ErrorBoundary>\n <MutableConfigContext.Provider value={MutableConfigRef}>\n <EmojiPickerReact {...props} />\n </MutableConfigContext.Provider>\n </ErrorBoundary>\n );\n}\n"],"names":["ClassNames","asSelectors","classNames","Array","_len","_key","arguments","map","c","join","stylesheet","createSheet","commonStyles","create","hidden","display","opacity","pointerEvents","visibility","hiddenOnSearch","focusElement","element","requestAnimationFrame","focus","focusPrevElementSibling","prev","previousElementSibling","focusNextElementSibling","next","nextElementSibling","focusFirstElementChild","first","firstElementChild","ElementRefContextProvider","_ref","children","PickerMainRef","React","AnchoredEmojiRef","BodyRef","SearchInputRef","SkinTonePickerRef","CategoryNavigationRef","VariationPickerRef","ElementRefContext","Provider","value","useElementRef","usePickerMainRef","useAnchoredEmojiRef","useSetAnchoredEmojiRef","target","current","useBodyRef","useSearchInputRef","useSkinTonePickerRef","useCategoryNavigationRef","useVariationPickerRef","SuggestionMode","EmojiStyle","Theme","SkinTones","Categories","SkinTonePickerLocation","categoriesOrdered","SUGGESTED","CUSTOM","SMILEYS_PEOPLE","ANIMALS_NATURE","FOOD_DRINK","TRAVEL_PLACES","ACTIVITIES","OBJECTS","SYMBOLS","FLAGS","SuggestedRecent","name","category","configByCategory","_configByCategory","baseCategoriesConfig","modifiers","_extends","categoryFromCategoryConfig","categoryNameFromCategoryConfig","mergeCategoriesConfig","userCategoriesConfig","extra","suggestionMode","RECENT","base","_userCategoriesConfig","length","getBaseConfigByCategory","modifier","Object","assign","CDN_URL_APPLE","CDN_URL_FACEBOOK","CDN_URL_TWITTER","CDN_URL_GOOGLE","cdnUrl","emojiStyle","TWITTER","GOOGLE","FACEBOOK","APPLE","skinToneVariations","NEUTRAL","LIGHT","MEDIUM_LIGHT","MEDIUM","MEDIUM_DARK","DARK","skinTonesNamed","entries","reduce","acc","key","skinTonesMapped","mapped","skinTone","_Object$assign","EmojiProperties","alphaNumericEmojiIndex","setTimeout","allEmojis","searchIndex","emoji","indexEmoji","joinedNameString","emojiNames","flat","toLowerCase","replace","split","forEach","char","_alphaNumericEmojiInd","emojiUnified","_emoji$EmojiPropertie","addedIn","parseFloat","added_in","emojiName","unifiedWithoutSkinTone","unified","splat","_splat$splice","splice","emojiHasVariations","_emojiVariationUnifie","emojiVariationUnified","emojisByCategory","_emojis$category","emojis","emojiUrlByUnified","emojiVariations","_emoji$EmojiPropertie2","variations","find","variation","includes","emojiByUnified","allEmojisByUnified","withoutSkinTone","values","setCustomEmojis","customEmojis","emojiData","customToRegularEmoji","push","names","id","imgUrl","Emoji","activeVariationFromUnified","_unified$split","suspectedSkinTone","KNOWN_FAILING_EMOJIS","DEFAULT_SEARCH_PLACEHOLDER","SEARCH_RESULTS_NO_RESULTS_FOUND","SEARCH_RESULTS_SUFFIX","SEARCH_RESULTS_ONE_RESULT_FOUND","SEARCH_RESULTS_MULTIPLE_RESULTS_FOUND","mergeConfig","userConfig","basePickerConfig","previewConfig","_userConfig$previewCo","config","categories","suggestedEmojisMode","_config$customEmojis","skinTonePickerLocation","searchDisabled","PREVIEW","autoFocusSearch","className","defaultSkinTone","emojiVersion","getEmojiUrl","height","lazyLoadEmojis","basePreviewConfig","searchPlaceHolder","searchPlaceholder","SEARCH","skinTonesDisabled","style","FREQUENT","theme","unicodeToHide","Set","width","defaultEmoji","defaultCaption","showPreview","ConfigContext","PickerConfigProvider","_objectWithoutPropertiesLoose","_excluded","mergedConfig","useSetConfig","_React$useState","setMergedConfig","_mergedConfig$customE","_config$customEmojis2","usePickerConfig","MutableConfigContext","createContext","useMutableConfig","mutableConfig","useContext","useDefineMutableConfig","MutableConfigRef","useRef","onEmojiClick","emptyFunc","useEffect","useSearchPlaceHolderConfig","_usePickerConfig","_find","p","useDefaultSkinToneConfig","_usePickerConfig2","useSkinTonesDisabledConfig","_usePickerConfig3","useEmojiStyleConfig","_usePickerConfig4","useAutoFocusSearchConfig","_usePickerConfig5","useCategoriesConfig","_usePickerConfig6","useCustomEmojisConfig","_usePickerConfig7","useOnEmojiClickConfig","_useMutableConfig","usePreviewConfig","_usePickerConfig8","useThemeConfig","_usePickerConfig9","useSuggestedEmojisModeConfig","_usePickerConfig10","useLazyLoadEmojisConfig","_usePickerConfig11","useClassNameConfig","_usePickerConfig12","useStyleConfig","_usePickerConfig13","getDimension","useEmojiVersionConfig","_usePickerConfig14","useSearchDisabledConfig","_usePickerConfig15","useSkinTonePickerLocationConfig","_usePickerConfig16","useUnicodeToHide","_usePickerConfig17","useGetEmojiUrlConfig","_usePickerConfig18","dimensionConfig","useSearchResultsConfig","searchResultsCount","hasResults","isPlural","toString","useDebouncedState","initialValue","delay","_useState","useState","state","setState","timer","debouncedSetState","Promise","resolve","clearTimeout","_window","window","useIsUnicodeHidden","has","useDisallowedEmojis","DisallowedEmojisRef","emojiVersionConfig","useMemo","Number","isNaN","disallowedEmojis","addedInNewerVersion","useIsEmojiDisallowed","isUnicodeHidden","isEmojiDisallowed","Boolean","supportedLevel","useMarkInitialLoad","dispatch","PickerContextProvider","filterRef","disallowClickRef","disallowMouseRef","disallowedEmojisRef","suggestedUpdateState","Date","now","searchTerm","skinToneFanOpenState","activeSkinTone","activeCategoryState","emojisThatFailedToLoadState","emojiVariationPickerState","isPastInitialLoad","setIsPastInitialLoad","PickerContext","undefined","useFilterRef","_React$useContext","useDisallowClickRef","_React$useContext2","useDisallowMouseRef","_React$useContext3","useSearchTermState","_React$useContext4","useActiveSkinToneState","_React$useContext5","useEmojisThatFailedToLoadState","_React$useContext6","useIsPastInitialLoad","_React$useContext7","useEmojiVariationPickerState","_React$useContext8","useSkinToneFanOpenState","_React$useContext9","useUpdateSuggested","_React$useContext11","suggestedUpdated","setsuggestedUpdate","updateSuggested","useDisallowMouseMove","DisallowMouseRef","disallowMouseMove","useAllowMouseMove","allowMouseMove","useIsMouseDisallowed","isMouseDisallowed","useOnMouseMove","bodyRef","addEventListener","onMouseMove","passive","removeEventListener","elementCountInRow","parent","parentWidth","getBoundingClientRect","elementWidth","Math","floor","elementIndexInRow","elementLeft","left","parentLeft","rowNumber","elementHeight","elementTop","top","parentTop","round","hasNextRow","parentHeight","getRowElements","elements","row","elementsInRow","lastRow","firstElementIndex","lastElementIndex","slice","getNextRowElements","allElements","currentRow","nextRow","getElementInRow","indexInRow","rowElements","getElementInNextRow","index","nextRowElements","getElementInPrevRow","prevRowElements","firstVisibleElementInContainer","parentBottom","bottom","visibleElements","elementBottom","hasNextElementSibling","EmojiButtonSelector","VisibleEmojiSelector","visible","buttonFromTarget","emojiElement","_emojiElement$closest","closest","emojiFromElement","originalUnified","originalUnifiedFromEmojiElement","unifiedFromEmojiElement","isEmojiElement","matches","_element$parentElemen","parentElement","_element$clientHeight","clientHeight","emojiTrueOffsetTop","button","closestCategory","labelHeight","categoryLabelHeight","elementOffsetTop","categoryWithoutLabel","querySelector","categoryContent","_category$clientHeigh","_categoryWithoutLabel","isEmojiBehindLabel","emojiDistanceFromScrollTop","queryScrollBody","root","scrollBody","_closestScrollBody$sc","_closestScrollBody","closestScrollBody","scrollTop","_element$closest","emojiTruOffsetLeft","elementOffsetLeft","_element$offsetTop","offsetTop","_element$offsetLeft","offsetLeft","_elementDataSetKey","elementDataSetKey","_elementDataSet$key","elementDataSet","_element$dataset","dataset","isVisibleEmoji","classList","contains","isHidden","allVisibleEmojis","from","querySelectorAll","lastVisibleEmoji","_allEmojis$slice","last","prevVisibleEmoji","nextVisibleEmoji","firstVisibleEmoji","nextCategory","prevCategory","closestCategoryContent","parseNativeEmoji","hex","String","fromCodePoint","parseInt","SUGGESTED_LS_KEY","getSuggested","mode","_window$localStorage$","_window2","localStorage","recent","JSON","parse","getItem","sort","a","b","count","_unused","setSuggested","existing","u","nextList","concat","filter","i","original","min","_window3","setItem","stringify","_unused2","isCustomCategory","isCustomEmoji","useCloseAllOpenToggles","_useEmojiVariationPic","variationPicker","setVariationPicker","_useSkinToneFanOpenSt","skinToneFanOpen","setSkinToneFanOpen","closeAllOpenToggles","useCallback","useHasOpenToggles","_useEmojiVariationPic2","_useSkinToneFanOpenSt2","hasOpenToggles","useSetVariationPicker","setAnchoredEmojiRef","setEmojiVariationPicker","_emojiFromElement","useMouseDownHandlers","mouseDownTimerRef","_useActiveSkinToneSta","_useUpdateSuggested","activeEmojiStyle","onClick","event","_emojiFromEvent","emojiFromEvent","skinToneToUse","emojiClickOutput","onMouseDown","_emojiFromEvent2","onMouseUp","getImageUrl","imageUrl","isCustom","useOnScroll","onScroll","scrollTo","$eprBody","scrollBy","by","useScrollTo","scrollEmojiAboveLabel","useFocusSearchInput","useFocusSkinTonePicker","useFocusCategoryNavigation","useSetFilterRef","setFilter","setter","useClearSearch","applySearch","useApplySearch","focusSearchInput","clearSearch","useAppendSearch","appendSearch","str","getNormalizedSearchTerm","useFilter","setFilterRef","_useSearchTermState","statusSearchResults","getStatusSearchResults","onChange","inputValue","nextValue","longestMatch","findLongestMatch","filterEmojiObjectByKeyword","_useSearchTermState2","setSearchTerm","then","keyword","filtered","hasMatch","some","useIsEmojiFiltered","_useFilterRef","_useSearchTermState3","isEmojiFilteredBySearchTerm","_filter$searchTerm","dict","longestMatchingKey","keys","trim","filterState","_Object$entries","useIsEmojiHidden","_useEmojisThatFailedT","emojisThatFailedToLoad","isEmojiFiltered","failedToLoad","filteredOut","Button","props","type","cx","styles","cursor","border","background","outline","ClickableEmojiButton","_ref$showVariations","showVariations","hasVariations","_cx","position","boxSizing","alignItems","justifyContent","maxWidth","maxHeight","borderRadius","overflow","transition","backgroundColor","content","right","borderLeft","borderRight","transform","borderBottom","zIndex","emojiStyles","external","fontSize","common","alignSelf","justifySelf","EmojiImg","_ref$lazyLoad","lazyLoad","onError","src","alt","emojiImag","loading","minWidth","minHeight","padding","NativeEmoji","nativeEmoji","fontFamily","lineHeight","textAlign","letterSpacing","ViewOnlyEmoji","size","_ref$getEmojiUrl","setEmojisThatFailedToLoad","emojiToRender","NATIVE","add","ClickableEmoji","EmojiCategory","categoryConfig","categoryName","label","gridGap","gridTemplateColumns","margin","backdropFilter","color","fontWeight","textTransform","Suggested","suggestedEmojisModeConfig","suggested","_getSuggested","suggestedItem","EmojiList","renderdCategoriesCountRef","emojiList","RenderCategory","isEmojiHidden","emojisToPush","hiddenCounter","_isEmojiHidden","isDisallowed","listStyle","focusFirstVisibleEmoji","focusAndClickFirstVisibleEmoji","firstEmoji","click","focusLastVisibleEmoji","focusNextVisibleEmoji","focusPrevVisibleEmoji","focusVisibleEmojiOneRowUp","exitUp","visibleEmojiOneRowUp","focusVisibleEmojiOneRowDown","visibleEmojiOneRowDown","countInRow","prevVisibleCategory","nextVisibleCategory","itemInNextRow","Direction","EmojiVariationPicker","_useVariationPickerTo","useVariationPickerTop","getTop","getMenuDirection","getPointerStyle","usePointerStyle","pointerStyle","ref","Down","pointingUp","pointer","clientWidth","direction","Up","emojiOffsetTop","_bodyRef$scrollTop","buttonHeight","boxShadow","transformOrigin","backgroundRepeat","backgroundPosition","backgroundSize","Body","body","flex","overflowY","overflowX","useEmojiPreviewEvents","allow","setPreviewEmoji","onEscape","onMouseOver","onEnter","onLeave","e","relatedTarget","useIsSkinToneInSearch","skinTonePickerLocationConfig","useIsSkinToneInPreview","FlexDirection","Flex","_ref$style","_ref$direction","ROW","_stylesheet$create","flexDirection","COLUMN","Space","Absolute","Relative","ITEM_SIZE","SkinTonePickerMenu","SkinTonePicker","SkinTonePickerDirection","VERTICAL","HORIZONTAL","isDisabled","isOpen","setIsOpen","setActiveSkinTone","fullWidth","expandedSize","vertical","open","flexBasis","skinToneVariation","active","_cx2","tabIndex","Preview","isSkinToneInPreview","preview","PreviewBody","previewEmoji","variationPickerEmoji","_previewEmoji$unified","show","PreviewContent","defaultText","borderTop","categoryNameFromDom","$category","_$category$getAttribu","getAttribute","useActiveCategoryScrollDetection","setActiveCategory","visibleCategories","Map","observer","IntersectionObserver","_iterator","_createForOfIteratorHelperLoose","_step","done","entry","set","intersectionRatio","ratios","lastCategory","_i","_ratios","_ratios$_i","ratio","threshold","el","observe","useIsSearchMode","useScrollCategoryIntoView","scrollCategoryIntoView","_BodyRef$current","useShouldHideCustomEmojis","customCategoryConfig","CategoryNavigation","activeCategory","isSearchMode","categoriesConfig","hideCustomCategory","nav","role","isActiveCategory","catBtn","SCOPE","emojiPicker","EMOJI_BUTTON","CATEGORY","CssSearch","q","genQuery","SearchContainer","isSkinToneInSearch","overlay","Search","inc","setInc","placeholder","autoFocus","_useFilter","input","searchContainer","onFocus","search","_event$target$value","_event$target","visuallyHidden","icnSearch","btnClearSearch","title","icnClearnSearch","clip","clipPath","whiteSpace","backgroundPositionY","Header","getActiveElement","document","activeElement","KeyboardEvents","useKeyboardNavigation","usePickerMainKeyboardEvents","useSearchInputKeyboardEvents","useSkinTonePickerKeyboardEvents","useCategoryNavigationKeyboardEvents","useBodyKeyboardEvents","onKeyDown","Escape","preventDefault","focusSkinTonePicker","setSkinToneFanOpenState","goDownFromSearchInput","useGoDownFromSearchInput","ArrowRight","ArrowDown","Enter","onType","useOnType","ArrowLeft","focusNextSkinTone","focusPrevSkinTone","ArrowUp","goUpFromBody","useGoUpFromBody","focusCategoryNavigation","goUpFromEmoji","exitLeft","currentSkinTone","hasModifier","match","metaKey","ctrlKey","altKey","preloadEmoji","preloadedEmojs","emojiUrl","preloadImage","url","image","Image","useOnFocus","PickerMain","PickerRootElement","_ref2","searchModeActive","main","baseVariables","darkTheme","AUTO","autoThemeDark","searchActive","DarkTheme","borderWidth","borderStyle","borderColor","autoTheme","EmojiPicker","prevCustomEmojis","_prev$customEmojis","nextCustomEmojis","_next$customEmojis","ErrorBoundary","_React$Component","_inheritsLoose","_this","call","hasError","getDerivedStateFromError","_proto","prototype","componentDidCatch","error","errorInfo","console","render","ExportedEmoji","_ref$size","_ref$emojiStyle","EmojiPickerReact"],"mappings":"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;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;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"}
|
|
1
|
+
{"version":3,"file":"emoji-picker-react.esm.js","sources":["../src/DomUtils/classNames.ts","../src/Stylesheet/stylesheet.ts","../src/DomUtils/focusElement.ts","../src/components/context/ElementRefContext.tsx","../src/types/exposedTypes.ts","../src/config/categoryConfig.ts","../src/config/cdnUrls.ts","../src/data/skinToneVariations.ts","../src/dataUtils/DataTypes.ts","../src/dataUtils/alphaNumericEmojiIndex.ts","../src/dataUtils/emojiSelectors.ts","../src/config/config.ts","../src/components/context/PickerConfigContext.tsx","../src/config/mutableConfig.ts","../src/config/useConfig.ts","../src/hooks/useDebouncedState.ts","../src/hooks/useHideEmojisByUniocode.ts","../src/hooks/useDisallowedEmojis.ts","../src/hooks/useInitialLoad.ts","../src/components/context/PickerContext.tsx","../src/hooks/useDisallowMouseMove.ts","../src/DomUtils/elementPositionInRow.ts","../src/DomUtils/selectors.ts","../src/dataUtils/parseNativeEmoji.ts","../src/dataUtils/suggested.ts","../src/typeRefinements/typeRefinements.ts","../src/hooks/useCloseAllOpenToggles.ts","../src/hooks/useSetVariationPicker.ts","../src/hooks/useMouseDownHandlers.ts","../src/hooks/useOnScroll.ts","../src/DomUtils/scrollTo.ts","../src/hooks/useFocus.ts","../src/hooks/useFilter.ts","../src/hooks/useIsEmojiHidden.ts","../src/components/atoms/Button.tsx","../src/components/emoji/ClickableEmojiButton.tsx","../src/components/emoji/emojiStyles.ts","../src/components/emoji/EmojiImg.tsx","../src/components/emoji/NativeEmoji.tsx","../src/components/emoji/ViewOnlyEmoji.tsx","../src/components/emoji/Emoji.tsx","../src/components/body/EmojiCategory.tsx","../src/components/body/Suggested.tsx","../src/components/body/EmojiList.tsx","../src/DomUtils/keyboardNavigation.ts","../node_modules/style-inject/dist/style-inject.es.js","../src/components/body/EmojiVariationPicker.tsx","../src/components/body/Body.tsx","../src/hooks/useEmojiPreviewEvents.ts","../src/hooks/useShouldShowSkinTonePicker.ts","../src/components/Layout/Flex.tsx","../src/components/Layout/Space.tsx","../src/components/Layout/Absolute.tsx","../src/components/Layout/Relative.tsx","../src/components/header/SkinTonePicker.tsx","../src/components/footer/Preview.tsx","../src/DomUtils/categoryNameFromDom.ts","../src/hooks/useActiveCategoryScrollDetection.ts","../src/hooks/useIsSearchMode.ts","../src/hooks/useScrollCategoryIntoView.ts","../src/hooks/useShouldHideCustomEmojis.ts","../src/components/navigation/CategoryNavigation.tsx","../src/components/header/CssSearch.tsx","../src/components/header/Search.tsx","../src/components/header/Header.tsx","../src/DomUtils/getActiveElement.ts","../src/hooks/useKeyboardNavigation.ts","../src/hooks/preloadEmoji.ts","../src/hooks/useOnFocus.ts","../src/components/main/PickerMain.tsx","../src/EmojiPickerReact.tsx","../src/components/ErrorBoundary.tsx","../src/components/emoji/ExportedEmoji.tsx","../src/index.tsx"],"sourcesContent":["export enum ClassNames {\n hiddenOnSearch = 'epr-hidden-on-search',\n searchActive = 'epr-search-active',\n hidden = 'epr-hidden',\n visible = 'epr-visible',\n active = 'epr-active',\n emoji = 'epr-emoji',\n category = 'epr-emoji-category',\n label = 'epr-emoji-category-label',\n categoryContent = 'epr-emoji-category-content',\n emojiHasVariations = 'epr-emoji-has-variations',\n scrollBody = 'epr-body',\n emojiList = 'epr-emoji-list',\n external = '__EmojiPicker__',\n emojiPicker = 'EmojiPickerReact',\n open = 'epr-open',\n vertical = 'epr-vertical',\n horizontal = 'epr-horizontal',\n variationPicker = 'epr-emoji-variation-picker',\n darkTheme = 'epr-dark-theme',\n autoTheme = 'epr-auto-theme'\n}\n\nexport function asSelectors(...classNames: ClassNames[]): string {\n return classNames.map(c => `.${c}`).join('');\n}\n","import { createSheet } from 'flairup';\n\nimport { ClassNames } from '../DomUtils/classNames';\n\nexport const stylesheet = createSheet('epr');\n\nexport const commonStyles = stylesheet.create({\n hidden: {\n '.': ClassNames.hidden,\n display: 'none',\n opacity: '0',\n pointerEvents: 'none',\n visibility: 'hidden'\n },\n hiddenOnSearch: {\n display: 'none',\n opacity: '0',\n pointerEvents: 'none',\n visibility: 'hidden'\n }\n});\n\nexport const commonInteractionStyles = stylesheet.create({\n '.epr-main:has(input:not(:placeholder-shown))': {\n categoryBtn: {\n ':hover': {\n opacity: '1',\n backgroundPositionY: 'var(--epr-category-navigation-button-size)'\n }\n }\n },\n '.EmojiPickerReact:not(.epr-search-active)': {\n categoryBtn: {\n ':hover': {\n opacity: '1',\n backgroundPositionY: 'var(--epr-category-navigation-button-size)'\n },\n // @ts-ignore\n '&.epr-active': {\n opacity: '1',\n backgroundPositionY: 'var(--epr-category-navigation-button-size)'\n }\n }\n }\n});\n","import { NullableElement } from './selectors';\n\nexport function focusElement(element: NullableElement) {\n if (!element) {\n return;\n }\n\n requestAnimationFrame(() => {\n element.focus();\n });\n}\n\nexport function focusPrevElementSibling(element: NullableElement) {\n if (!element) return;\n\n const prev = element.previousElementSibling as HTMLElement;\n\n focusElement(prev);\n}\n\nexport function focusNextElementSibling(element: NullableElement) {\n if (!element) return;\n\n const next = element.nextElementSibling as HTMLElement;\n\n focusElement(next);\n}\n\nexport function focusFirstElementChild(element: NullableElement) {\n if (!element) return;\n\n const first = element.firstElementChild as HTMLElement;\n\n focusElement(first);\n}\n","import * as React from 'react';\n\nimport { focusElement } from '../../DomUtils/focusElement';\nimport { NullableElement } from '../../DomUtils/selectors';\n\nexport function ElementRefContextProvider({\n children\n}: {\n children: React.ReactNode;\n}) {\n const PickerMainRef = React.useRef<HTMLElement>(null);\n const AnchoredEmojiRef = React.useRef<HTMLElement>(null);\n const BodyRef = React.useRef<HTMLDivElement>(null);\n const SearchInputRef = React.useRef<HTMLInputElement>(null);\n const SkinTonePickerRef = React.useRef<HTMLDivElement>(null);\n const CategoryNavigationRef = React.useRef<HTMLDivElement>(null);\n const VariationPickerRef = React.useRef<HTMLDivElement>(null);\n\n return (\n <ElementRefContext.Provider\n value={{\n AnchoredEmojiRef,\n BodyRef,\n CategoryNavigationRef,\n PickerMainRef,\n SearchInputRef,\n SkinTonePickerRef,\n VariationPickerRef\n }}\n >\n {children}\n </ElementRefContext.Provider>\n );\n}\n\nexport type ElementRef<\n E extends HTMLElement = HTMLElement\n> = React.MutableRefObject<E | null>;\n\ntype ElementRefs = {\n PickerMainRef: ElementRef;\n AnchoredEmojiRef: ElementRef;\n SkinTonePickerRef: ElementRef<HTMLDivElement>;\n SearchInputRef: ElementRef<HTMLInputElement>;\n BodyRef: ElementRef<HTMLDivElement>;\n CategoryNavigationRef: ElementRef<HTMLDivElement>;\n VariationPickerRef: ElementRef<HTMLDivElement>;\n};\n\nconst ElementRefContext = React.createContext<ElementRefs>({\n AnchoredEmojiRef: React.createRef(),\n BodyRef: React.createRef(),\n CategoryNavigationRef: React.createRef(),\n PickerMainRef: React.createRef(),\n SearchInputRef: React.createRef(),\n SkinTonePickerRef: React.createRef(),\n VariationPickerRef: React.createRef()\n});\n\nfunction useElementRef() {\n return React.useContext(ElementRefContext);\n}\n\nexport function usePickerMainRef() {\n return useElementRef()['PickerMainRef'];\n}\n\nexport function useAnchoredEmojiRef() {\n return useElementRef()['AnchoredEmojiRef'];\n}\n\nexport function useSetAnchoredEmojiRef(): (target: NullableElement) => void {\n const AnchoredEmojiRef = useAnchoredEmojiRef();\n return (target: NullableElement) => {\n if (target === null && AnchoredEmojiRef.current !== null) {\n focusElement(AnchoredEmojiRef.current);\n }\n\n AnchoredEmojiRef.current = target;\n };\n}\n\nexport function useBodyRef() {\n return useElementRef()['BodyRef'];\n}\n\nexport function useSearchInputRef() {\n return useElementRef()['SearchInputRef'];\n}\n\nexport function useSkinTonePickerRef() {\n return useElementRef()['SkinTonePickerRef'];\n}\n\nexport function useCategoryNavigationRef() {\n return useElementRef()['CategoryNavigationRef'];\n}\n\nexport function useVariationPickerRef() {\n return useElementRef()['VariationPickerRef'];\n}\n","export type EmojiClickData = {\n activeSkinTone: SkinTones;\n unified: string;\n unifiedWithoutSkinTone: string;\n emoji: string;\n names: string[];\n imageUrl: string;\n getImageUrl: (emojiStyle?: EmojiStyle) => string;\n isCustom: boolean;\n};\n\nexport enum SuggestionMode {\n RECENT = 'recent',\n FREQUENT = 'frequent'\n}\n\nexport enum EmojiStyle {\n NATIVE = 'native',\n APPLE = 'apple',\n TWITTER = 'twitter',\n GOOGLE = 'google',\n FACEBOOK = 'facebook'\n}\n\nexport enum Theme {\n DARK = 'dark',\n LIGHT = 'light',\n AUTO = 'auto'\n}\n\nexport enum SkinTones {\n NEUTRAL = 'neutral',\n LIGHT = '1f3fb',\n MEDIUM_LIGHT = '1f3fc',\n MEDIUM = '1f3fd',\n MEDIUM_DARK = '1f3fe',\n DARK = '1f3ff'\n}\n\nexport enum Categories {\n SUGGESTED = 'suggested',\n CUSTOM = 'custom',\n SMILEYS_PEOPLE = 'smileys_people',\n ANIMALS_NATURE = 'animals_nature',\n FOOD_DRINK = 'food_drink',\n TRAVEL_PLACES = 'travel_places',\n ACTIVITIES = 'activities',\n OBJECTS = 'objects',\n SYMBOLS = 'symbols',\n FLAGS = 'flags'\n}\n\nexport enum SkinTonePickerLocation {\n SEARCH = 'SEARCH',\n PREVIEW = 'PREVIEW'\n}\n","import { Categories, SuggestionMode } from '../types/exposedTypes';\n\nexport { Categories };\n\nconst categoriesOrdered: Categories[] = [\n Categories.SUGGESTED,\n Categories.CUSTOM,\n Categories.SMILEYS_PEOPLE,\n Categories.ANIMALS_NATURE,\n Categories.FOOD_DRINK,\n Categories.TRAVEL_PLACES,\n Categories.ACTIVITIES,\n Categories.OBJECTS,\n Categories.SYMBOLS,\n Categories.FLAGS\n];\n\nexport const SuggestedRecent: CategoryConfig = {\n name: 'Recently Used',\n category: Categories.SUGGESTED\n};\n\nexport type CustomCategoryConfig = {\n category: Categories.CUSTOM;\n name: string;\n};\n\nconst configByCategory: Record<Categories, CategoryConfig> = {\n [Categories.SUGGESTED]: {\n category: Categories.SUGGESTED,\n name: 'Frequently Used'\n },\n [Categories.CUSTOM]: {\n category: Categories.CUSTOM,\n name: 'Custom Emojis'\n },\n [Categories.SMILEYS_PEOPLE]: {\n category: Categories.SMILEYS_PEOPLE,\n name: 'Smileys & People'\n },\n [Categories.ANIMALS_NATURE]: {\n category: Categories.ANIMALS_NATURE,\n name: 'Animals & Nature'\n },\n [Categories.FOOD_DRINK]: {\n category: Categories.FOOD_DRINK,\n name: 'Food & Drink'\n },\n [Categories.TRAVEL_PLACES]: {\n category: Categories.TRAVEL_PLACES,\n name: 'Travel & Places'\n },\n [Categories.ACTIVITIES]: {\n category: Categories.ACTIVITIES,\n name: 'Activities'\n },\n [Categories.OBJECTS]: {\n category: Categories.OBJECTS,\n name: 'Objects'\n },\n [Categories.SYMBOLS]: {\n category: Categories.SYMBOLS,\n name: 'Symbols'\n },\n [Categories.FLAGS]: {\n category: Categories.FLAGS,\n name: 'Flags'\n }\n};\n\nexport function baseCategoriesConfig(\n modifiers?: Record<Categories, CategoryConfig>\n): CategoriesConfig {\n return categoriesOrdered.map(category => {\n return {\n ...configByCategory[category],\n ...(modifiers && modifiers[category] && modifiers[category])\n };\n });\n}\n\nexport function categoryFromCategoryConfig(category: CategoryConfig) {\n return category.category;\n}\n\nexport function categoryNameFromCategoryConfig(category: CategoryConfig) {\n return category.name;\n}\n\nexport type CategoriesConfig = CategoryConfig[];\n\nexport type CategoryConfig = {\n category: Categories;\n name: string;\n};\n\nexport type UserCategoryConfig = Array<Categories | CategoryConfig>;\n\nexport function mergeCategoriesConfig(\n userCategoriesConfig: UserCategoryConfig = [],\n modifiers: CategoryConfigModifiers = {}\n): CategoriesConfig {\n const extra = {} as Record<Categories, CategoryConfig>;\n\n if (modifiers.suggestionMode === SuggestionMode.RECENT) {\n extra[Categories.SUGGESTED] = SuggestedRecent;\n }\n\n const base = baseCategoriesConfig(extra);\n if (!userCategoriesConfig?.length) {\n return base;\n }\n\n return userCategoriesConfig.map(category => {\n if (typeof category === 'string') {\n return getBaseConfigByCategory(category, extra[category]);\n }\n\n return {\n ...getBaseConfigByCategory(category.category, extra[category.category]),\n ...category\n };\n });\n}\n\nfunction getBaseConfigByCategory(\n category: Categories,\n modifier: CategoryConfig = {} as CategoryConfig\n) {\n return Object.assign(configByCategory[category], modifier);\n}\n\ntype CategoryConfigModifiers = {\n suggestionMode?: SuggestionMode;\n};\n","import { EmojiStyle } from '../types/exposedTypes';\n\nconst CDN_URL_APPLE =\n 'https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/';\nconst CDN_URL_FACEBOOK =\n 'https://cdn.jsdelivr.net/npm/emoji-datasource-facebook/img/facebook/64/';\nconst CDN_URL_TWITTER =\n 'https://cdn.jsdelivr.net/npm/emoji-datasource-twitter/img/twitter/64/';\nconst CDN_URL_GOOGLE =\n 'https://cdn.jsdelivr.net/npm/emoji-datasource-google/img/google/64/';\n\nexport function cdnUrl(emojiStyle: EmojiStyle): string {\n switch (emojiStyle) {\n case EmojiStyle.TWITTER:\n return CDN_URL_TWITTER;\n case EmojiStyle.GOOGLE:\n return CDN_URL_GOOGLE;\n case EmojiStyle.FACEBOOK:\n return CDN_URL_FACEBOOK;\n case EmojiStyle.APPLE:\n default:\n return CDN_URL_APPLE;\n }\n}\n","import { SkinTones } from '../types/exposedTypes';\n\nconst skinToneVariations = [\n SkinTones.NEUTRAL,\n SkinTones.LIGHT,\n SkinTones.MEDIUM_LIGHT,\n SkinTones.MEDIUM,\n SkinTones.MEDIUM_DARK,\n SkinTones.DARK\n];\n\nexport const skinTonesNamed = Object.entries(SkinTones).reduce(\n (acc, [key, value]) => {\n acc[value] = key;\n return acc;\n },\n {} as Record<string, string>\n);\n\nexport const skinTonesMapped: Record<\n string,\n string\n> = skinToneVariations.reduce(\n (mapped, skinTone) =>\n Object.assign(mapped, {\n [skinTone]: skinTone\n }),\n {}\n);\n\nexport default skinToneVariations;\n","import emojis from '../data/emojis';\n\nexport enum EmojiProperties {\n name = 'n',\n unified = 'u',\n variations = 'v',\n added_in = 'a',\n imgUrl = 'imgUrl'\n}\n\nexport interface DataEmoji extends WithName {\n [EmojiProperties.unified]: string;\n [EmojiProperties.variations]?: string[];\n [EmojiProperties.added_in]: string;\n [EmojiProperties.imgUrl]?: string;\n}\n\nexport type DataEmojis = DataEmoji[];\n\nexport type DataGroups = keyof typeof emojis;\n\nexport type WithName = {\n [EmojiProperties.name]: string[];\n};\n","import { DataEmoji } from './DataTypes';\nimport { allEmojis, emojiNames, emojiUnified } from './emojiSelectors';\n\nexport const alphaNumericEmojiIndex: BaseIndex = {};\n\nsetTimeout(() => {\n allEmojis.reduce((searchIndex, emoji) => {\n indexEmoji(emoji);\n return searchIndex;\n }, alphaNumericEmojiIndex as BaseIndex);\n});\n\ntype BaseIndex = Record<string, Record<string, DataEmoji>>;\n\nexport function indexEmoji(emoji: DataEmoji): void {\n const joinedNameString = emojiNames(emoji)\n .flat()\n .join('')\n .toLowerCase()\n .replace(/[^a-zA-Z\\d]/g, '')\n .split('');\n\n joinedNameString.forEach(char => {\n alphaNumericEmojiIndex[char] = alphaNumericEmojiIndex[char] ?? {};\n\n alphaNumericEmojiIndex[char][emojiUnified(emoji)] = emoji;\n });\n}\n","import { Categories } from '../config/categoryConfig';\nimport { cdnUrl } from '../config/cdnUrls';\nimport { CustomEmoji } from '../config/customEmojiConfig';\nimport emojis from '../data/emojis';\nimport skinToneVariations, {\n skinTonesMapped\n} from '../data/skinToneVariations';\nimport { EmojiStyle, SkinTones } from '../types/exposedTypes';\n\nimport { DataEmoji, DataEmojis, EmojiProperties, WithName } from './DataTypes';\nimport { indexEmoji } from './alphaNumericEmojiIndex';\n\nexport function emojiNames(emoji: WithName): string[] {\n return emoji[EmojiProperties.name] ?? [];\n}\n\nexport function addedIn(emoji: DataEmoji): number {\n return parseFloat(emoji[EmojiProperties.added_in]);\n}\n\nexport function emojiName(emoji?: WithName): string {\n if (!emoji) {\n return '';\n }\n\n return emojiNames(emoji)[0];\n}\n\nexport function unifiedWithoutSkinTone(unified: string): string {\n const splat = unified.split('-');\n const [skinTone] = splat.splice(1, 1);\n\n if (skinTonesMapped[skinTone]) {\n return splat.join('-');\n }\n\n return unified;\n}\n\nexport function emojiUnified(emoji: DataEmoji, skinTone?: string): string {\n const unified = emoji[EmojiProperties.unified];\n\n if (!skinTone || !emojiHasVariations(emoji)) {\n return unified;\n }\n\n return emojiVariationUnified(emoji, skinTone) ?? unified;\n}\n\nexport function emojisByCategory(category: Categories): DataEmojis {\n // @ts-ignore\n return emojis?.[category] ?? [];\n}\n\n// WARNING: DO NOT USE DIRECTLY\nexport function emojiUrlByUnified(\n unified: string,\n emojiStyle: EmojiStyle\n): string {\n return `${cdnUrl(emojiStyle)}${unified}.png`;\n}\n\nexport function emojiVariations(emoji: DataEmoji): string[] {\n return emoji[EmojiProperties.variations] ?? [];\n}\n\nexport function emojiHasVariations(emoji: DataEmoji): boolean {\n return emojiVariations(emoji).length > 0;\n}\n\nexport function emojiVariationUnified(\n emoji: DataEmoji,\n skinTone?: string\n): string | undefined {\n return skinTone\n ? emojiVariations(emoji).find(variation => variation.includes(skinTone))\n : emojiUnified(emoji);\n}\n\nexport function emojiByUnified(unified?: string): DataEmoji | undefined {\n if (!unified) {\n return;\n }\n\n if (allEmojisByUnified[unified]) {\n return allEmojisByUnified[unified];\n }\n\n const withoutSkinTone = unifiedWithoutSkinTone(unified);\n return allEmojisByUnified[withoutSkinTone];\n}\n\nexport const allEmojis: DataEmojis = Object.values(emojis).flat();\n\nexport function setCustomEmojis(customEmojis: CustomEmoji[]): void {\n emojis[Categories.CUSTOM].length = 0;\n\n customEmojis.forEach(emoji => {\n const emojiData = customToRegularEmoji(emoji);\n\n emojis[Categories.CUSTOM].push(emojiData as never);\n\n if (allEmojisByUnified[emojiData[EmojiProperties.unified]]) {\n return;\n }\n\n allEmojis.push(emojiData);\n allEmojisByUnified[emojiData[EmojiProperties.unified]] = emojiData;\n indexEmoji(emojiData);\n });\n}\n\nfunction customToRegularEmoji(emoji: CustomEmoji): DataEmoji {\n return {\n [EmojiProperties.name]: emoji.names.map(name => name.toLowerCase()),\n [EmojiProperties.unified]: emoji.id.toLowerCase(),\n [EmojiProperties.added_in]: '0',\n [EmojiProperties.imgUrl]: emoji.imgUrl\n };\n}\n\nconst allEmojisByUnified: {\n [unified: string]: DataEmoji;\n} = {};\n\nsetTimeout(() => {\n allEmojis.reduce((allEmojis, Emoji) => {\n allEmojis[emojiUnified(Emoji)] = Emoji;\n\n if (emojiHasVariations(Emoji)) {\n emojiVariations(Emoji).forEach(variation => {\n allEmojis[variation] = Emoji;\n });\n }\n\n return allEmojis;\n }, allEmojisByUnified);\n});\n\nexport function activeVariationFromUnified(unified: string): SkinTones | null {\n const [, suspectedSkinTone] = unified.split('-') as [string, SkinTones];\n return skinToneVariations.includes(suspectedSkinTone)\n ? suspectedSkinTone\n : null;\n}\n","import * as React from 'react'\n\nimport { GetEmojiUrl } from '../components/emoji/BaseEmojiProps';\nimport {\n setCustomEmojis,\n emojiUrlByUnified\n} from '../dataUtils/emojiSelectors';\nimport {\n EmojiClickData,\n EmojiStyle,\n SkinTonePickerLocation,\n SkinTones,\n SuggestionMode,\n Theme\n} from '../types/exposedTypes';\n\nimport {\n CategoriesConfig,\n baseCategoriesConfig,\n mergeCategoriesConfig\n} from './categoryConfig';\nimport { CustomEmoji } from './customEmojiConfig';\n\nconst KNOWN_FAILING_EMOJIS = ['2640-fe0f', '2642-fe0f', '2695-fe0f'];\n\nexport const DEFAULT_SEARCH_PLACEHOLDER = 'Search';\nexport const SEARCH_RESULTS_NO_RESULTS_FOUND = 'No results found';\nexport const SEARCH_RESULTS_SUFFIX =\n ' found. Use up and down arrow keys to navigate.';\nexport const SEARCH_RESULTS_ONE_RESULT_FOUND =\n '1 result' + SEARCH_RESULTS_SUFFIX;\nexport const SEARCH_RESULTS_MULTIPLE_RESULTS_FOUND =\n '%n results' + SEARCH_RESULTS_SUFFIX;\n\nexport function mergeConfig(\n userConfig: PickerConfig = {}\n): PickerConfigInternal {\n const base = basePickerConfig();\n\n const previewConfig = Object.assign(\n base.previewConfig,\n userConfig.previewConfig ?? {}\n );\n const config = Object.assign(base, userConfig);\n\n const categories = mergeCategoriesConfig(userConfig.categories, {\n suggestionMode: config.suggestedEmojisMode\n });\n\n setCustomEmojis(config.customEmojis ?? []);\n\n const skinTonePickerLocation = config.searchDisabled\n ? SkinTonePickerLocation.PREVIEW\n : config.skinTonePickerLocation;\n\n return {\n ...config,\n categories,\n previewConfig,\n skinTonePickerLocation\n };\n}\n\nexport function basePickerConfig(): PickerConfigInternal {\n return {\n autoFocusSearch: true,\n categories: baseCategoriesConfig(),\n className: '',\n customEmojis: [],\n defaultSkinTone: SkinTones.NEUTRAL,\n emojiStyle: EmojiStyle.APPLE,\n emojiVersion: null,\n getEmojiUrl: emojiUrlByUnified,\n height: 450,\n lazyLoadEmojis: false,\n previewConfig: {\n ...basePreviewConfig\n },\n searchDisabled: false,\n searchPlaceHolder: DEFAULT_SEARCH_PLACEHOLDER,\n searchPlaceholder: DEFAULT_SEARCH_PLACEHOLDER,\n skinTonePickerLocation: SkinTonePickerLocation.SEARCH,\n skinTonesDisabled: false,\n style: {},\n suggestedEmojisMode: SuggestionMode.FREQUENT,\n theme: Theme.LIGHT,\n unicodeToHide: new Set<string>(KNOWN_FAILING_EMOJIS),\n width: 350\n };\n}\n\nexport type PickerConfigInternal = {\n emojiVersion: string | null;\n searchPlaceHolder: string;\n searchPlaceholder: string;\n defaultSkinTone: SkinTones;\n skinTonesDisabled: boolean;\n autoFocusSearch: boolean;\n emojiStyle: EmojiStyle;\n categories: CategoriesConfig;\n theme: Theme;\n suggestedEmojisMode: SuggestionMode;\n lazyLoadEmojis: boolean;\n previewConfig: PreviewConfig;\n className: string;\n height: PickerDimensions;\n width: PickerDimensions;\n style: React.CSSProperties;\n getEmojiUrl: GetEmojiUrl;\n searchDisabled: boolean;\n skinTonePickerLocation: SkinTonePickerLocation;\n unicodeToHide: Set<string>;\n customEmojis: CustomEmoji[];\n};\n\nexport type PreviewConfig = {\n defaultEmoji: string;\n defaultCaption: string;\n showPreview: boolean;\n};\n\nconst basePreviewConfig: PreviewConfig = {\n defaultEmoji: '1f60a',\n defaultCaption: \"What's your mood?\",\n showPreview: true\n};\n\ntype ConfigExternal = {\n previewConfig: Partial<PreviewConfig>;\n onEmojiClick: (emoji: EmojiClickData, event: MouseEvent) => void;\n} & Omit<PickerConfigInternal, 'previewConfig' | 'unicodeToHide'>;\n\nexport type PickerConfig = Partial<ConfigExternal>;\n\nexport type PickerDimensions = string | number;\n","import * as React from 'react';\n\nimport {\n basePickerConfig,\n mergeConfig,\n PickerConfig,\n PickerConfigInternal\n} from '../../config/config';\n\ntype Props = PickerConfig &\n Readonly<{\n children: React.ReactNode;\n }>;\n\nconst ConfigContext = React.createContext<PickerConfigInternal>(\n basePickerConfig()\n);\n\nexport function PickerConfigProvider({ children, ...config }: Props) {\n const mergedConfig = useSetConfig(config);\n\n return (\n <ConfigContext.Provider value={mergedConfig}>\n {children}\n </ConfigContext.Provider>\n );\n}\n\nexport function useSetConfig(config: PickerConfig) {\n const [mergedConfig, setMergedConfig] = React.useState(() =>\n mergeConfig(config)\n );\n\n React.useEffect(() => {\n if (config.customEmojis?.length !== mergedConfig.customEmojis?.length) {\n setMergedConfig(mergeConfig(config));\n }\n // not gonna...\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [config.customEmojis?.length]);\n\n return mergedConfig;\n}\n\nexport function usePickerConfig() {\n return React.useContext(ConfigContext);\n}\n","import React from 'react';\n\nimport { EmojiClickData } from '../types/exposedTypes';\n\nexport type MutableConfig = {\n onEmojiClick?: (emoji: EmojiClickData, event: MouseEvent) => void;\n};\n\nexport const MutableConfigContext = React.createContext<\n React.MutableRefObject<MutableConfig>\n>({} as React.MutableRefObject<MutableConfig>);\n\nexport function useMutableConfig(): React.MutableRefObject<MutableConfig> {\n const mutableConfig = React.useContext(MutableConfigContext);\n return mutableConfig;\n}\n\nexport function useDefineMutableConfig(\n config: MutableConfig\n): React.MutableRefObject<MutableConfig> {\n const MutableConfigRef = React.useRef<MutableConfig>({\n onEmojiClick: config.onEmojiClick || emptyFunc\n });\n\n React.useEffect(() => {\n MutableConfigRef.current.onEmojiClick = config.onEmojiClick || emptyFunc;\n }, [config.onEmojiClick]);\n\n return MutableConfigRef;\n}\n\nfunction emptyFunc() {}\n","import * as React from 'react';\n\nimport { usePickerConfig } from '../components/context/PickerConfigContext';\nimport {\n EmojiClickData,\n EmojiStyle,\n SkinTonePickerLocation,\n SkinTones,\n SuggestionMode,\n Theme\n} from '../types/exposedTypes';\n\nimport { CategoriesConfig } from './categoryConfig';\nimport {\n DEFAULT_SEARCH_PLACEHOLDER,\n SEARCH_RESULTS_NO_RESULTS_FOUND,\n SEARCH_RESULTS_ONE_RESULT_FOUND,\n SEARCH_RESULTS_MULTIPLE_RESULTS_FOUND,\n PickerDimensions,\n PreviewConfig\n} from './config';\nimport { CustomEmoji } from './customEmojiConfig';\nimport { useMutableConfig } from './mutableConfig';\n\nexport function useSearchPlaceHolderConfig(): string {\n const { searchPlaceHolder, searchPlaceholder } = usePickerConfig();\n return (\n [searchPlaceHolder, searchPlaceholder].find(\n p => p !== DEFAULT_SEARCH_PLACEHOLDER\n ) ?? DEFAULT_SEARCH_PLACEHOLDER\n );\n}\n\nexport function useDefaultSkinToneConfig(): SkinTones {\n const { defaultSkinTone } = usePickerConfig();\n return defaultSkinTone;\n}\n\nexport function useSkinTonesDisabledConfig(): boolean {\n const { skinTonesDisabled } = usePickerConfig();\n return skinTonesDisabled;\n}\n\nexport function useEmojiStyleConfig(): EmojiStyle {\n const { emojiStyle } = usePickerConfig();\n return emojiStyle;\n}\n\nexport function useAutoFocusSearchConfig(): boolean {\n const { autoFocusSearch } = usePickerConfig();\n return autoFocusSearch;\n}\n\nexport function useCategoriesConfig(): CategoriesConfig {\n const { categories } = usePickerConfig();\n return categories;\n}\n\nexport function useCustomEmojisConfig(): CustomEmoji[] {\n const { customEmojis } = usePickerConfig();\n return customEmojis;\n}\n\nexport function useOnEmojiClickConfig(): (\n emoji: EmojiClickData,\n event: MouseEvent\n) => void {\n const { current } = useMutableConfig();\n return current.onEmojiClick || (() => {});\n}\n\nexport function usePreviewConfig(): PreviewConfig {\n const { previewConfig } = usePickerConfig();\n return previewConfig;\n}\n\nexport function useThemeConfig(): Theme {\n const { theme } = usePickerConfig();\n\n return theme;\n}\n\nexport function useSuggestedEmojisModeConfig(): SuggestionMode {\n const { suggestedEmojisMode } = usePickerConfig();\n return suggestedEmojisMode;\n}\n\nexport function useLazyLoadEmojisConfig(): boolean {\n const { lazyLoadEmojis } = usePickerConfig();\n return lazyLoadEmojis;\n}\n\nexport function useClassNameConfig(): string {\n const { className } = usePickerConfig();\n return className;\n}\n\nexport function useStyleConfig(): React.CSSProperties {\n const { height, width, style } = usePickerConfig();\n return { height: getDimension(height), width: getDimension(width), ...style };\n}\n\nexport function useEmojiVersionConfig(): string | null {\n const { emojiVersion } = usePickerConfig();\n return emojiVersion;\n}\n\nexport function useSearchDisabledConfig(): boolean {\n const { searchDisabled } = usePickerConfig();\n return searchDisabled;\n}\n\nexport function useSkinTonePickerLocationConfig(): SkinTonePickerLocation {\n const { skinTonePickerLocation } = usePickerConfig();\n return skinTonePickerLocation;\n}\n\nexport function useUnicodeToHide() {\n const { unicodeToHide } = usePickerConfig();\n return unicodeToHide;\n}\n\nexport function useGetEmojiUrlConfig(): (\n unified: string,\n style: EmojiStyle\n) => string {\n const { getEmojiUrl } = usePickerConfig();\n return getEmojiUrl;\n}\n\nfunction getDimension(dimensionConfig: PickerDimensions): PickerDimensions {\n return typeof dimensionConfig === 'number'\n ? `${dimensionConfig}px`\n : dimensionConfig;\n}\n\nexport function useSearchResultsConfig(searchResultsCount: number): string {\n const hasResults = searchResultsCount > 0;\n const isPlural = searchResultsCount > 1;\n\n if (hasResults) {\n return isPlural ?\n SEARCH_RESULTS_MULTIPLE_RESULTS_FOUND.replace('%n', searchResultsCount.toString())\n : SEARCH_RESULTS_ONE_RESULT_FOUND;\n }\n\n return SEARCH_RESULTS_NO_RESULTS_FOUND;\n}\n","import { useRef, useState } from 'react';\n\nexport function useDebouncedState<T>(\n initialValue: T,\n delay: number = 0\n): [T, (value: T) => Promise<T>] {\n const [state, setState] = useState<T>(initialValue);\n const timer = useRef<number | null>(null);\n\n function debouncedSetState(value: T) {\n return new Promise<T>(resolve => {\n if (timer.current) {\n clearTimeout(timer.current);\n }\n\n timer.current = window?.setTimeout(() => {\n setState(value);\n resolve(value);\n }, delay);\n });\n }\n\n return [state, debouncedSetState];\n}\n","import { useUnicodeToHide } from \"../config/useConfig\";\n\nexport function useIsUnicodeHidden() {\n const unicodeToHide = useUnicodeToHide();\n return (emojiUnified: string) => unicodeToHide.has(emojiUnified);\n }\n","import { useRef, useMemo } from 'react';\n\nimport { useEmojiVersionConfig } from '../config/useConfig';\nimport { DataEmoji } from '../dataUtils/DataTypes';\nimport {\n addedIn,\n allEmojis,\n emojiUnified,\n unifiedWithoutSkinTone\n} from '../dataUtils/emojiSelectors';\n\nimport { useIsUnicodeHidden } from './useHideEmojisByUniocode';\n\nexport function useDisallowedEmojis() {\n const DisallowedEmojisRef = useRef<Record<string, boolean>>({});\n const emojiVersionConfig = useEmojiVersionConfig();\n\n return useMemo(() => {\n const emojiVersion = parseFloat(`${emojiVersionConfig}`);\n\n if (!emojiVersionConfig || Number.isNaN(emojiVersion)) {\n return DisallowedEmojisRef.current;\n }\n\n return allEmojis.reduce((disallowedEmojis, emoji) => {\n if (addedInNewerVersion(emoji, emojiVersion)) {\n disallowedEmojis[emojiUnified(emoji)] = true;\n }\n\n return disallowedEmojis;\n }, DisallowedEmojisRef.current);\n }, [emojiVersionConfig]);\n}\n\nexport function useIsEmojiDisallowed() {\n const disallowedEmojis = useDisallowedEmojis();\n const isUnicodeHidden = useIsUnicodeHidden();\n\n return function isEmojiDisallowed(emoji: DataEmoji) {\n const unified = unifiedWithoutSkinTone(emojiUnified(emoji));\n\n return Boolean(disallowedEmojis[unified] || isUnicodeHidden(unified));\n };\n}\n\nfunction addedInNewerVersion(\n emoji: DataEmoji,\n supportedLevel: number\n): boolean {\n return addedIn(emoji) > supportedLevel;\n}\n","import { useEffect } from 'react';\nimport * as React from 'react';\n\nexport function useMarkInitialLoad(\n dispatch: React.Dispatch<React.SetStateAction<boolean>>\n) {\n useEffect(() => {\n dispatch(true);\n }, [dispatch]);\n}\n","import * as React from 'react';\nimport { useState } from 'react';\n\nimport { useDefaultSkinToneConfig } from '../../config/useConfig';\nimport { DataEmoji } from '../../dataUtils/DataTypes';\nimport { alphaNumericEmojiIndex } from '../../dataUtils/alphaNumericEmojiIndex';\nimport { useDebouncedState } from '../../hooks/useDebouncedState';\nimport { useDisallowedEmojis } from '../../hooks/useDisallowedEmojis';\nimport { FilterDict } from '../../hooks/useFilter';\nimport { useMarkInitialLoad } from '../../hooks/useInitialLoad';\nimport { SkinTones } from '../../types/exposedTypes';\n\nexport function PickerContextProvider({ children }: Props) {\n const disallowedEmojis = useDisallowedEmojis();\n const defaultSkinTone = useDefaultSkinToneConfig();\n\n // Initialize the filter with the inititial dictionary\n const filterRef = React.useRef<FilterState>(alphaNumericEmojiIndex);\n const disallowClickRef = React.useRef<boolean>(false);\n const disallowMouseRef = React.useRef<boolean>(false);\n const disallowedEmojisRef = React.useRef<Record<string, boolean>>(\n disallowedEmojis\n );\n\n const suggestedUpdateState = useDebouncedState(Date.now(), 200);\n const searchTerm = useDebouncedState('', 100);\n const skinToneFanOpenState = useState<boolean>(false);\n const activeSkinTone = useState<SkinTones>(defaultSkinTone);\n const activeCategoryState = useState<ActiveCategoryState>(null);\n const emojisThatFailedToLoadState = useState<Set<string>>(new Set());\n const emojiVariationPickerState = useState<DataEmoji | null>(null);\n const [isPastInitialLoad, setIsPastInitialLoad] = useState(false);\n\n useMarkInitialLoad(setIsPastInitialLoad);\n\n return (\n <PickerContext.Provider\n value={{\n activeCategoryState,\n activeSkinTone,\n disallowClickRef,\n disallowMouseRef,\n disallowedEmojisRef,\n emojiVariationPickerState,\n emojisThatFailedToLoadState,\n filterRef,\n isPastInitialLoad,\n searchTerm,\n skinToneFanOpenState,\n suggestedUpdateState\n }}\n >\n {children}\n </PickerContext.Provider>\n );\n}\n\ntype ReactState<T> = [T, React.Dispatch<React.SetStateAction<T>>];\n\nconst PickerContext = React.createContext<{\n searchTerm: [string, (term: string) => Promise<string>];\n suggestedUpdateState: [number, (term: number) => void];\n activeCategoryState: ReactState<ActiveCategoryState>;\n activeSkinTone: ReactState<SkinTones>;\n emojisThatFailedToLoadState: ReactState<Set<string>>;\n isPastInitialLoad: boolean;\n emojiVariationPickerState: ReactState<DataEmoji | null>;\n skinToneFanOpenState: ReactState<boolean>;\n filterRef: React.MutableRefObject<FilterState>;\n disallowClickRef: React.MutableRefObject<boolean>;\n disallowMouseRef: React.MutableRefObject<boolean>;\n disallowedEmojisRef: React.MutableRefObject<Record<string, boolean>>;\n}>({\n activeCategoryState: [null, () => {}],\n activeSkinTone: [SkinTones.NEUTRAL, () => {}],\n disallowClickRef: { current: false },\n disallowMouseRef: { current: false },\n disallowedEmojisRef: { current: {} },\n emojiVariationPickerState: [null, () => {}],\n emojisThatFailedToLoadState: [new Set(), () => {}],\n filterRef: { current: {} },\n isPastInitialLoad: true,\n searchTerm: ['', () => new Promise<string>(() => undefined)],\n skinToneFanOpenState: [false, () => {}],\n suggestedUpdateState: [Date.now(), () => {}]\n});\n\ntype Props = Readonly<{\n children: React.ReactNode;\n}>;\n\nexport function useFilterRef() {\n const { filterRef } = React.useContext(PickerContext);\n return filterRef;\n}\n\nexport function useDisallowClickRef() {\n const { disallowClickRef } = React.useContext(PickerContext);\n return disallowClickRef;\n}\n\nexport function useDisallowMouseRef() {\n const { disallowMouseRef } = React.useContext(PickerContext);\n return disallowMouseRef;\n}\n\nexport function useSearchTermState() {\n const { searchTerm } = React.useContext(PickerContext);\n return searchTerm;\n}\n\nexport function useActiveSkinToneState(): [\n SkinTones,\n (skinTone: SkinTones) => void\n] {\n const { activeSkinTone } = React.useContext(PickerContext);\n return activeSkinTone;\n}\n\nexport function useEmojisThatFailedToLoadState() {\n const { emojisThatFailedToLoadState } = React.useContext(PickerContext);\n return emojisThatFailedToLoadState;\n}\n\nexport function useIsPastInitialLoad(): boolean {\n const { isPastInitialLoad } = React.useContext(PickerContext);\n return isPastInitialLoad;\n}\n\nexport function useEmojiVariationPickerState() {\n const { emojiVariationPickerState } = React.useContext(PickerContext);\n return emojiVariationPickerState;\n}\n\nexport function useSkinToneFanOpenState() {\n const { skinToneFanOpenState } = React.useContext(PickerContext);\n return skinToneFanOpenState;\n}\n\nexport function useDisallowedEmojisRef() {\n const { disallowedEmojisRef } = React.useContext(PickerContext);\n return disallowedEmojisRef;\n}\n\nexport function useUpdateSuggested(): [number, () => void] {\n const { suggestedUpdateState } = React.useContext(PickerContext);\n\n const [suggestedUpdated, setsuggestedUpdate] = suggestedUpdateState;\n return [\n suggestedUpdated,\n function updateSuggested() {\n setsuggestedUpdate(Date.now());\n }\n ];\n}\n\nexport type FilterState = Record<string, FilterDict>;\n\ntype ActiveCategoryState = null | string;\n","import { useEffect } from 'react';\n\nimport { useBodyRef } from '../components/context/ElementRefContext';\nimport { useDisallowMouseRef } from '../components/context/PickerContext';\n\nexport function useDisallowMouseMove() {\n const DisallowMouseRef = useDisallowMouseRef();\n return function disallowMouseMove() {\n DisallowMouseRef.current = true;\n };\n}\n\nexport function useAllowMouseMove() {\n const DisallowMouseRef = useDisallowMouseRef();\n return function allowMouseMove() {\n DisallowMouseRef.current = false;\n };\n}\n\nexport function useIsMouseDisallowed() {\n const DisallowMouseRef = useDisallowMouseRef();\n return function isMouseDisallowed() {\n return DisallowMouseRef.current;\n };\n}\n\nexport function useOnMouseMove() {\n const BodyRef = useBodyRef();\n const allowMouseMove = useAllowMouseMove();\n const isMouseDisallowed = useIsMouseDisallowed();\n\n useEffect(() => {\n const bodyRef = BodyRef.current;\n bodyRef?.addEventListener('mousemove', onMouseMove, {\n passive: true\n });\n\n function onMouseMove() {\n if (isMouseDisallowed()) {\n allowMouseMove();\n }\n }\n return () => {\n bodyRef?.removeEventListener('mousemove', onMouseMove);\n };\n }, [BodyRef, allowMouseMove, isMouseDisallowed]);\n}\n","import { NullableElement } from './selectors';\n\nexport function elementCountInRow(\n parent: NullableElement,\n element: NullableElement\n): number {\n if (!parent || !element) {\n return 0;\n }\n\n const parentWidth = parent.getBoundingClientRect().width;\n const elementWidth = element.getBoundingClientRect().width;\n return Math.floor(parentWidth / elementWidth);\n}\n\nexport function elementIndexInRow(\n parent: NullableElement,\n element: NullableElement\n): number {\n if (!parent || !element) {\n return 0;\n }\n\n const elementWidth = element.getBoundingClientRect().width;\n const elementLeft = element.getBoundingClientRect().left;\n const parentLeft = parent.getBoundingClientRect().left;\n\n return Math.floor((elementLeft - parentLeft) / elementWidth);\n}\n\nexport function rowNumber(\n parent: NullableElement,\n element: NullableElement\n): number {\n if (!parent || !element) {\n return 0;\n }\n\n const elementHeight = element.getBoundingClientRect().height;\n const elementTop = element.getBoundingClientRect().top;\n const parentTop = parent.getBoundingClientRect().top;\n return Math.round((elementTop - parentTop) / elementHeight);\n}\n\nexport function hasNextRow(\n parent: NullableElement,\n element: NullableElement\n): boolean {\n if (!parent || !element) {\n return false;\n }\n\n const elementHeight = element.getBoundingClientRect().height;\n const elementTop = element.getBoundingClientRect().top;\n const parentTop = parent.getBoundingClientRect().top;\n const parentHeight = parent.getBoundingClientRect().height;\n\n return Math.round(elementTop - parentTop + elementHeight) < parentHeight;\n}\n\nfunction getRowElements(\n elements: HTMLElement[],\n row: number,\n elementsInRow: number\n): HTMLElement[] {\n if (row === -1) {\n const lastRow = Math.floor((elements.length - 1) / elementsInRow);\n const firstElementIndex = lastRow * elementsInRow;\n const lastElementIndex = elements.length - 1;\n return elements.slice(firstElementIndex, lastElementIndex + 1);\n }\n\n return elements.slice(row * elementsInRow, (row + 1) * elementsInRow);\n}\n\nfunction getNextRowElements(\n allElements: HTMLElement[],\n currentRow: number,\n elementsInRow: number\n): HTMLElement[] {\n const nextRow = currentRow + 1;\n\n if (nextRow * elementsInRow > allElements.length) {\n return [];\n }\n\n return getRowElements(allElements, nextRow, elementsInRow);\n}\n\nexport function getElementInRow(\n elements: HTMLElement[],\n row: number,\n elementsInRow: number,\n indexInRow: number\n): NullableElement {\n const rowElements = getRowElements(elements, row, elementsInRow);\n // get element, default to last\n return rowElements[indexInRow] || rowElements[rowElements.length - 1] || null;\n}\n\nexport function getElementInNextRow(\n allElements: HTMLElement[],\n currentRow: number,\n elementsInRow: number,\n index: number\n): NullableElement {\n const nextRowElements = getNextRowElements(\n allElements,\n currentRow,\n elementsInRow\n );\n\n // return item in index, or last item in row\n return (\n nextRowElements[index] ||\n nextRowElements[nextRowElements.length - 1] ||\n null\n );\n}\n\nexport function getElementInPrevRow(\n allElements: HTMLElement[],\n currentRow: number,\n elementsInRow: number,\n index: number\n): NullableElement {\n const prevRowElements = getRowElements(\n allElements,\n currentRow - 1,\n elementsInRow\n );\n\n // default to last\n return (\n prevRowElements[index] ||\n prevRowElements[prevRowElements.length - 1] ||\n null\n );\n}\n\nexport function firstVisibleElementInContainer(\n parent: NullableElement,\n elements: HTMLElement[]\n): NullableElement {\n if (!parent || !elements.length) {\n return null;\n }\n\n const parentTop = parent.getBoundingClientRect().top;\n const parentBottom = parent.getBoundingClientRect().bottom;\n\n const visibleElements = elements.find(element => {\n const elementTop = element.getBoundingClientRect().top;\n const elementBottom = element.getBoundingClientRect().bottom;\n\n return (\n (elementTop >= parentTop && elementTop <= parentBottom) ||\n (elementBottom >= parentTop && elementBottom <= parentBottom)\n );\n });\n\n return visibleElements || null;\n}\n\nexport function hasNextElementSibling(element: HTMLElement) {\n return !!element.nextElementSibling;\n}\n","import { DataEmoji } from '../dataUtils/DataTypes';\nimport {\n emojiByUnified,\n unifiedWithoutSkinTone\n} from '../dataUtils/emojiSelectors';\n\nimport { asSelectors, ClassNames } from './classNames';\nimport { firstVisibleElementInContainer } from './elementPositionInRow';\n\nexport type NullableElement = HTMLElement | null;\n\nexport const EmojiButtonSelector = `button${asSelectors(ClassNames.emoji)}`;\nexport const VisibleEmojiSelector = [\n EmojiButtonSelector,\n asSelectors(ClassNames.visible),\n `:not(${asSelectors(ClassNames.hidden)})`\n].join('');\n\nexport function buttonFromTarget(\n emojiElement: NullableElement\n): HTMLButtonElement | null {\n return emojiElement?.closest(EmojiButtonSelector) ?? null;\n}\n\nexport function isEmojiButton(element: NullableElement): boolean {\n if (!element) {\n return false;\n }\n\n return element.matches(EmojiButtonSelector);\n}\n\nexport function emojiFromElement(\n element: NullableElement\n): [DataEmoji, string] | [] {\n const originalUnified = originalUnifiedFromEmojiElement(element);\n const unified = unifiedFromEmojiElement(element);\n\n if (!originalUnified) {\n return [];\n }\n\n const emoji = emojiByUnified(unified ?? originalUnified);\n\n if (!emoji) {\n return [];\n }\n\n return [emoji, unified as string];\n}\n\nexport function isEmojiElement(element: NullableElement): boolean {\n return Boolean(\n element?.matches(EmojiButtonSelector) ||\n element?.parentElement?.matches(EmojiButtonSelector)\n );\n}\n\nexport function categoryLabelFromCategory(\n category: NullableElement\n): NullableElement {\n return category?.querySelector(asSelectors(ClassNames.label)) ?? null;\n}\n\nexport function closestCategoryLabel(\n element: NullableElement\n): NullableElement {\n const category = closestCategory(element);\n return categoryLabelFromCategory(category);\n}\n\nexport function elementHeight(element: NullableElement): number {\n return element?.clientHeight ?? 0;\n}\n\nexport function emojiTrueOffsetTop(element: NullableElement): number {\n if (!element) {\n return 0;\n }\n\n const button = buttonFromTarget(element);\n const category = closestCategory(button);\n\n // compensate for the label height\n const labelHeight = categoryLabelHeight(category);\n\n return elementOffsetTop(button) + elementOffsetTop(category) + labelHeight;\n}\n\nexport function categoryLabelHeight(category: NullableElement): number {\n if (!category) {\n return 0;\n }\n\n const categoryWithoutLabel = category.querySelector(\n asSelectors(ClassNames.categoryContent)\n );\n\n return (\n (category?.clientHeight ?? 0) - (categoryWithoutLabel?.clientHeight ?? 0)\n );\n}\n\nexport function isEmojiBehindLabel(emoji: NullableElement): boolean {\n if (!emoji) {\n return false;\n }\n\n return (\n emojiDistanceFromScrollTop(emoji) <\n categoryLabelHeight(closestCategory(emoji))\n );\n}\n\nexport function queryScrollBody(root: NullableElement): NullableElement {\n if (!root) return null;\n\n return root.matches(asSelectors(ClassNames.scrollBody))\n ? root\n : root.querySelector(asSelectors(ClassNames.scrollBody));\n}\n\nexport function emojiDistanceFromScrollTop(emoji: NullableElement): number {\n if (!emoji) {\n return 0;\n }\n\n return emojiTrueOffsetTop(emoji) - (closestScrollBody(emoji)?.scrollTop ?? 0);\n}\n\nexport function closestScrollBody(element: NullableElement): NullableElement {\n if (!element) {\n return null;\n }\n\n return element.closest(asSelectors(ClassNames.scrollBody)) ?? null;\n}\n\nexport function emojiTruOffsetLeft(element: NullableElement): number {\n const button = buttonFromTarget(element);\n const category = closestCategory(button);\n\n return elementOffsetLeft(button) + elementOffsetLeft(category);\n}\n\nfunction elementOffsetTop(element: NullableElement): number {\n return element?.offsetTop ?? 0;\n}\n\nfunction elementOffsetLeft(element: NullableElement): number {\n return element?.offsetLeft ?? 0;\n}\n\nexport function unifiedFromEmojiElement(emoji: NullableElement): string | null {\n return elementDataSetKey(buttonFromTarget(emoji), 'unified') ?? null;\n}\n\nexport function originalUnifiedFromEmojiElement(\n emoji: NullableElement\n): string | null {\n const unified = unifiedFromEmojiElement(emoji);\n\n if (unified) {\n return unifiedWithoutSkinTone(unified);\n }\n return null;\n}\n\nfunction elementDataSetKey(\n element: NullableElement,\n key: string\n): string | null {\n return elementDataSet(element)[key] ?? null;\n}\n\nfunction elementDataSet(element: NullableElement): DOMStringMap {\n return element?.dataset ?? {};\n}\n\nexport function isVisibleEmoji(element: HTMLElement) {\n return element.classList.contains(ClassNames.visible);\n}\n\nexport function isHidden(element: NullableElement) {\n if (!element) return true;\n\n return element.classList.contains(ClassNames.hidden);\n}\n\nexport function allVisibleEmojis(parent: NullableElement) {\n if (!parent) {\n return [];\n }\n\n return Array.from(\n parent.querySelectorAll(VisibleEmojiSelector)\n ) as HTMLElement[];\n}\n\nexport function lastVisibleEmoji(element: NullableElement): NullableElement {\n if (!element) return null;\n\n const allEmojis = allVisibleEmojis(element);\n const [last] = allEmojis.slice(-1);\n if (!last) {\n return null;\n }\n\n if (!isVisibleEmoji(last)) {\n return prevVisibleEmoji(last);\n }\n\n return last;\n}\n\nexport function nextVisibleEmoji(element: HTMLElement): NullableElement {\n const next = element.nextElementSibling as HTMLElement;\n\n if (!next) {\n return firstVisibleEmoji(nextCategory(element));\n }\n\n if (!isVisibleEmoji(next)) {\n return nextVisibleEmoji(next);\n }\n\n return next;\n}\n\nexport function prevVisibleEmoji(element: HTMLElement): NullableElement {\n const prev = element.previousElementSibling as HTMLElement;\n\n if (!prev) {\n return lastVisibleEmoji(prevCategory(element));\n }\n\n if (!isVisibleEmoji(prev)) {\n return prevVisibleEmoji(prev);\n }\n\n return prev;\n}\n\nexport function firstVisibleEmoji(parent: NullableElement) {\n if (!parent) {\n return null;\n }\n\n const allEmojis = allVisibleEmojis(parent);\n\n return firstVisibleElementInContainer(parent, allEmojis);\n}\n\nexport function prevCategory(element: NullableElement): NullableElement {\n const category = closestCategory(element);\n\n if (!category) {\n return null;\n }\n\n const prev = category.previousElementSibling as HTMLElement;\n\n if (!prev) {\n return null;\n }\n\n if (isHidden(prev)) {\n return prevCategory(prev);\n }\n\n return prev;\n}\n\nexport function nextCategory(element: NullableElement): NullableElement {\n const category = closestCategory(element);\n\n if (!category) {\n return null;\n }\n\n const next = category.nextElementSibling as HTMLElement;\n\n if (!next) {\n return null;\n }\n\n if (isHidden(next)) {\n return nextCategory(next);\n }\n\n return next;\n}\n\nexport function closestCategory(element: NullableElement) {\n if (!element) {\n return null;\n }\n return element.closest(asSelectors(ClassNames.category)) as HTMLElement;\n}\n\nexport function closestCategoryContent(element: NullableElement) {\n if (!element) {\n return null;\n }\n return element.closest(\n asSelectors(ClassNames.categoryContent)\n ) as HTMLElement;\n}\n","export function parseNativeEmoji(unified: string): string {\n return unified\n .split('-')\n .map(hex => String.fromCodePoint(parseInt(hex, 16)))\n .join('');\n}\n","import { SkinTones, SuggestionMode } from '../types/exposedTypes';\n\nimport { DataEmoji } from './DataTypes';\nimport { emojiUnified } from './emojiSelectors';\n\nconst SUGGESTED_LS_KEY = 'epr_suggested';\n\ntype SuggestedItem = {\n unified: string;\n original: string;\n count: number;\n};\n\ntype Suggested = SuggestedItem[];\n\nexport function getSuggested(mode?: SuggestionMode): Suggested {\n try {\n if (!window?.localStorage) {\n return [];\n }\n const recent = JSON.parse(\n window?.localStorage.getItem(SUGGESTED_LS_KEY) ?? '[]'\n ) as Suggested;\n\n if (mode === SuggestionMode.FREQUENT) {\n return recent.sort((a, b) => b.count - a.count);\n }\n\n return recent;\n } catch {\n return [];\n }\n}\n\nexport function setSuggested(emoji: DataEmoji, skinTone: SkinTones) {\n const recent = getSuggested();\n\n const unified = emojiUnified(emoji, skinTone);\n const originalUnified = emojiUnified(emoji);\n\n let existing = recent.find(({ unified: u }) => u === unified);\n\n let nextList: SuggestedItem[];\n\n if (existing) {\n nextList = [existing].concat(recent.filter(i => i !== existing));\n } else {\n existing = {\n unified,\n original: originalUnified,\n count: 0\n };\n nextList = [existing, ...recent];\n }\n\n existing.count++;\n\n nextList.length = Math.min(nextList.length, 14);\n\n try {\n window?.localStorage.setItem(SUGGESTED_LS_KEY, JSON.stringify(nextList));\n // Prevents the change from being seen immediately.\n } catch {\n // ignore\n }\n}\n","import {\n Categories,\n CategoryConfig,\n CustomCategoryConfig\n} from '../config/categoryConfig';\nimport { CustomEmoji } from '../config/customEmojiConfig';\nimport { DataEmoji } from '../dataUtils/DataTypes';\n\nexport function isCustomCategory(\n category: CategoryConfig | CustomCategoryConfig\n): category is CustomCategoryConfig {\n return category.category === Categories.CUSTOM;\n}\n\nexport function isCustomEmoji(emoji: Partial<DataEmoji>): emoji is CustomEmoji {\n return emoji.imgUrl !== undefined;\n}\n","import { useCallback } from 'react';\n\nimport {\n useEmojiVariationPickerState,\n useSkinToneFanOpenState\n} from '../components/context/PickerContext';\n\nexport function useCloseAllOpenToggles() {\n const [variationPicker, setVariationPicker] = useEmojiVariationPickerState();\n const [skinToneFanOpen, setSkinToneFanOpen] = useSkinToneFanOpenState();\n\n const closeAllOpenToggles = useCallback(() => {\n if (variationPicker) {\n setVariationPicker(null);\n }\n\n if (skinToneFanOpen) {\n setSkinToneFanOpen(false);\n }\n }, [\n variationPicker,\n skinToneFanOpen,\n setVariationPicker,\n setSkinToneFanOpen\n ]);\n\n return closeAllOpenToggles;\n}\n\nexport function useHasOpenToggles() {\n const [variationPicker] = useEmojiVariationPickerState();\n const [skinToneFanOpen] = useSkinToneFanOpenState();\n\n return function hasOpenToggles() {\n return !!variationPicker || skinToneFanOpen;\n };\n}\n","import { emojiFromElement, NullableElement } from '../DomUtils/selectors';\nimport { useSetAnchoredEmojiRef } from '../components/context/ElementRefContext';\nimport { useEmojiVariationPickerState } from '../components/context/PickerContext';\n\nexport default function useSetVariationPicker() {\n const setAnchoredEmojiRef = useSetAnchoredEmojiRef();\n const [, setEmojiVariationPicker] = useEmojiVariationPickerState();\n\n return function setVariationPicker(element: NullableElement) {\n const [emoji] = emojiFromElement(element);\n\n if (emoji) {\n setAnchoredEmojiRef(element);\n setEmojiVariationPicker(emoji);\n }\n };\n}\n","import * as React from 'react';\nimport { useEffect, useRef } from 'react';\n\nimport {\n emojiFromElement,\n isEmojiElement,\n NullableElement\n} from '../DomUtils/selectors';\nimport {\n useActiveSkinToneState,\n useDisallowClickRef,\n useEmojiVariationPickerState,\n useUpdateSuggested\n} from '../components/context/PickerContext';\nimport { GetEmojiUrl } from '../components/emoji/BaseEmojiProps';\nimport {\n useEmojiStyleConfig,\n useGetEmojiUrlConfig,\n useOnEmojiClickConfig\n} from '../config/useConfig';\nimport { DataEmoji } from '../dataUtils/DataTypes';\nimport {\n activeVariationFromUnified,\n emojiHasVariations,\n emojiNames,\n emojiUnified\n} from '../dataUtils/emojiSelectors';\nimport { parseNativeEmoji } from '../dataUtils/parseNativeEmoji';\nimport { setSuggested } from '../dataUtils/suggested';\nimport { isCustomEmoji } from '../typeRefinements/typeRefinements';\nimport { EmojiClickData, SkinTones, EmojiStyle } from '../types/exposedTypes';\n\nimport { useCloseAllOpenToggles } from './useCloseAllOpenToggles';\nimport useSetVariationPicker from './useSetVariationPicker';\n\nexport function useMouseDownHandlers(\n BodyRef: React.MutableRefObject<NullableElement>\n) {\n const mouseDownTimerRef = useRef<undefined | number>();\n const setVariationPicker = useSetVariationPicker();\n const disallowClickRef = useDisallowClickRef();\n const [, setEmojiVariationPicker] = useEmojiVariationPickerState();\n const closeAllOpenToggles = useCloseAllOpenToggles();\n const [activeSkinTone] = useActiveSkinToneState();\n const onEmojiClick = useOnEmojiClickConfig();\n const [, updateSuggested] = useUpdateSuggested();\n const getEmojiUrl = useGetEmojiUrlConfig();\n const activeEmojiStyle = useEmojiStyleConfig();\n\n const onClick = React.useCallback(\n function onClick(event: MouseEvent) {\n if (disallowClickRef.current) {\n return;\n }\n\n closeAllOpenToggles();\n\n const [emoji, unified] = emojiFromEvent(event);\n\n if (!emoji || !unified) {\n return;\n }\n\n const skinToneToUse =\n activeVariationFromUnified(unified) || activeSkinTone;\n\n updateSuggested();\n setSuggested(emoji, skinToneToUse);\n onEmojiClick(\n emojiClickOutput(emoji, skinToneToUse, activeEmojiStyle, getEmojiUrl),\n event\n );\n },\n [\n activeSkinTone,\n closeAllOpenToggles,\n disallowClickRef,\n onEmojiClick,\n updateSuggested,\n getEmojiUrl,\n activeEmojiStyle\n ]\n );\n\n const onMouseDown = React.useCallback(\n function onMouseDown(event: MouseEvent) {\n if (mouseDownTimerRef.current) {\n clearTimeout(mouseDownTimerRef.current);\n }\n\n const [emoji] = emojiFromEvent(event);\n\n if (!emoji || !emojiHasVariations(emoji)) {\n return;\n }\n\n mouseDownTimerRef.current = window?.setTimeout(() => {\n disallowClickRef.current = true;\n mouseDownTimerRef.current = undefined;\n closeAllOpenToggles();\n setVariationPicker(event.target as HTMLElement);\n setEmojiVariationPicker(emoji);\n }, 500);\n },\n [\n disallowClickRef,\n closeAllOpenToggles,\n setVariationPicker,\n setEmojiVariationPicker\n ]\n );\n const onMouseUp = React.useCallback(\n function onMouseUp() {\n if (mouseDownTimerRef.current) {\n clearTimeout(mouseDownTimerRef.current);\n mouseDownTimerRef.current = undefined;\n } else if (disallowClickRef.current) {\n // The problem we're trying to overcome here\n // is that the emoji has both mouseup and click events\n // and when releasing a mouseup event\n // the click gets triggered too\n // So we're disallowing the click event for a short time\n\n requestAnimationFrame(() => {\n disallowClickRef.current = false;\n });\n }\n },\n [disallowClickRef]\n );\n\n useEffect(() => {\n if (!BodyRef.current) {\n return;\n }\n const bodyRef = BodyRef.current;\n bodyRef.addEventListener('click', onClick, {\n passive: true\n });\n\n bodyRef.addEventListener('mousedown', onMouseDown, {\n passive: true\n });\n bodyRef.addEventListener('mouseup', onMouseUp, {\n passive: true\n });\n\n return () => {\n bodyRef?.removeEventListener('click', onClick);\n bodyRef?.removeEventListener('mousedown', onMouseDown);\n bodyRef?.removeEventListener('mouseup', onMouseUp);\n };\n }, [BodyRef, onClick, onMouseDown, onMouseUp]);\n}\n\nfunction emojiFromEvent(event: MouseEvent): [DataEmoji, string] | [] {\n const target = event?.target as HTMLElement;\n if (!isEmojiElement(target)) {\n return [];\n }\n\n return emojiFromElement(target);\n}\n\nfunction emojiClickOutput(\n emoji: DataEmoji,\n activeSkinTone: SkinTones,\n activeEmojiStyle: EmojiStyle,\n getEmojiUrl: GetEmojiUrl\n): EmojiClickData {\n const names = emojiNames(emoji);\n\n if (isCustomEmoji(emoji)) {\n const unified = emojiUnified(emoji);\n return {\n activeSkinTone,\n emoji: unified,\n getImageUrl() {\n return emoji.imgUrl;\n },\n imageUrl: emoji.imgUrl,\n isCustom: true,\n names,\n unified,\n unifiedWithoutSkinTone: unified\n };\n }\n const unified = emojiUnified(emoji, activeSkinTone);\n\n return {\n activeSkinTone,\n emoji: parseNativeEmoji(unified),\n getImageUrl(emojiStyle: EmojiStyle = activeEmojiStyle ?? EmojiStyle.APPLE) {\n return getEmojiUrl(unified, emojiStyle);\n },\n imageUrl: getEmojiUrl(unified, activeEmojiStyle ?? EmojiStyle.APPLE),\n isCustom: false,\n names,\n unified,\n unifiedWithoutSkinTone: emojiUnified(emoji)\n };\n}\n","import { useEffect } from 'react';\n\nimport { ElementRef } from '../components/context/ElementRefContext';\n\nimport { useCloseAllOpenToggles } from './useCloseAllOpenToggles';\n\nexport function useOnScroll(BodyRef: ElementRef) {\n const closeAllOpenToggles = useCloseAllOpenToggles();\n\n useEffect(() => {\n const bodyRef = BodyRef.current;\n if (!bodyRef) {\n return;\n }\n\n bodyRef.addEventListener('scroll', onScroll, {\n passive: true\n });\n\n function onScroll() {\n closeAllOpenToggles();\n }\n\n return () => {\n bodyRef?.removeEventListener('scroll', onScroll);\n };\n }, [BodyRef, closeAllOpenToggles]);\n}\n","import { useCallback } from 'react';\n\nimport { useBodyRef } from '../components/context/ElementRefContext';\n\nimport { asSelectors, ClassNames } from './classNames';\nimport {\n categoryLabelHeight,\n closestCategory,\n closestScrollBody,\n emojiDistanceFromScrollTop,\n isEmojiBehindLabel,\n NullableElement,\n queryScrollBody\n} from './selectors';\n\nexport function scrollTo(root: NullableElement, top: number = 0) {\n const $eprBody = queryScrollBody(root);\n\n if (!$eprBody) {\n return;\n }\n\n requestAnimationFrame(() => {\n $eprBody.scrollTop = top + 1;\n });\n}\n\nexport function scrollBy(root: NullableElement, by: number): void {\n const $eprBody = queryScrollBody(root);\n\n if (!$eprBody) {\n return;\n }\n\n requestAnimationFrame(() => {\n $eprBody.scrollTop = $eprBody.scrollTop + by;\n });\n}\n\nexport function useScrollTo() {\n const BodyRef = useBodyRef();\n\n return useCallback(\n (top: number) => {\n requestAnimationFrame(() => {\n if (BodyRef.current) {\n BodyRef.current.scrollTop = top;\n }\n });\n },\n [BodyRef]\n );\n}\n\nexport function scrollEmojiAboveLabel(emoji: NullableElement) {\n if (!emoji || !isEmojiBehindLabel(emoji)) {\n return;\n }\n\n if (emoji.closest(asSelectors(ClassNames.variationPicker))) {\n return;\n }\n\n const scrollBody = closestScrollBody(emoji);\n const by = emojiDistanceFromScrollTop(emoji);\n scrollBy(scrollBody, -(categoryLabelHeight(closestCategory(emoji)) - by));\n}\n","import { useCallback } from 'react';\n\nimport { focusElement, focusFirstElementChild } from '../DomUtils/focusElement';\nimport {\n useCategoryNavigationRef,\n useSearchInputRef,\n useSkinTonePickerRef\n} from '../components/context/ElementRefContext';\n\nexport function useFocusSearchInput() {\n const SearchInputRef = useSearchInputRef();\n\n return useCallback(() => {\n focusElement(SearchInputRef.current);\n }, [SearchInputRef]);\n}\n\nexport function useFocusSkinTonePicker() {\n const SkinTonePickerRef = useSkinTonePickerRef();\n\n return useCallback(() => {\n if (!SkinTonePickerRef.current) {\n return;\n }\n\n focusFirstElementChild(SkinTonePickerRef.current);\n }, [SkinTonePickerRef]);\n}\n\nexport function useFocusCategoryNavigation() {\n const CategoryNavigationRef = useCategoryNavigationRef();\n\n return useCallback(() => {\n if (!CategoryNavigationRef.current) {\n return;\n }\n\n focusFirstElementChild(CategoryNavigationRef.current);\n }, [CategoryNavigationRef]);\n}\n","import { scrollTo } from '../DomUtils/scrollTo';\nimport {\n usePickerMainRef,\n useSearchInputRef\n} from '../components/context/ElementRefContext';\nimport {\n FilterState,\n useFilterRef,\n useSearchTermState\n} from '../components/context/PickerContext';\nimport { useSearchResultsConfig } from '../config/useConfig';\nimport { DataEmoji } from '../dataUtils/DataTypes';\nimport { emojiNames } from '../dataUtils/emojiSelectors';\n\nimport { useFocusSearchInput } from './useFocus';\n\nfunction useSetFilterRef() {\n const filterRef = useFilterRef();\n\n return function setFilter(\n setter: FilterState | ((current: FilterState) => FilterState)\n ): void {\n if (typeof setter === 'function') {\n return setFilter(setter(filterRef.current));\n }\n\n filterRef.current = setter;\n };\n}\n\nexport function useClearSearch() {\n const applySearch = useApplySearch();\n const SearchInputRef = useSearchInputRef();\n const focusSearchInput = useFocusSearchInput();\n\n return function clearSearch() {\n if (SearchInputRef.current) {\n SearchInputRef.current.value = '';\n }\n\n applySearch('');\n focusSearchInput();\n };\n}\n\nexport function useAppendSearch() {\n const SearchInputRef = useSearchInputRef();\n const applySearch = useApplySearch();\n\n return function appendSearch(str: string) {\n if (SearchInputRef.current) {\n SearchInputRef.current.value = `${SearchInputRef.current.value}${str}`;\n applySearch(getNormalizedSearchTerm(SearchInputRef.current.value));\n } else {\n applySearch(getNormalizedSearchTerm(str));\n }\n };\n}\n\nexport function useFilter() {\n const SearchInputRef = useSearchInputRef();\n const filterRef = useFilterRef();\n const setFilterRef = useSetFilterRef();\n const applySearch = useApplySearch();\n\n const [searchTerm] = useSearchTermState();\n const statusSearchResults = getStatusSearchResults(\n filterRef.current,\n searchTerm\n );\n\n return {\n onChange,\n searchTerm,\n SearchInputRef,\n statusSearchResults\n };\n\n function onChange(inputValue: string) {\n const filter = filterRef.current;\n\n const nextValue = inputValue.toLowerCase();\n\n if (filter?.[nextValue] || nextValue.length <= 1) {\n return applySearch(nextValue);\n }\n\n const longestMatch = findLongestMatch(nextValue, filter);\n\n if (!longestMatch) {\n // Can we even get here?\n // If so, we need to search among all emojis\n return applySearch(nextValue);\n }\n\n setFilterRef(current =>\n Object.assign(current, {\n [nextValue]: filterEmojiObjectByKeyword(longestMatch, nextValue)\n })\n );\n applySearch(nextValue);\n }\n}\n\nfunction useApplySearch() {\n const [, setSearchTerm] = useSearchTermState();\n const PickerMainRef = usePickerMainRef();\n\n return function applySearch(searchTerm: string) {\n requestAnimationFrame(() => {\n setSearchTerm(searchTerm ? searchTerm?.toLowerCase() : searchTerm).then(\n () => {\n scrollTo(PickerMainRef.current, 0);\n }\n );\n });\n };\n}\n\nfunction filterEmojiObjectByKeyword(\n emojis: FilterDict,\n keyword: string\n): FilterDict {\n const filtered: FilterDict = {};\n\n for (const unified in emojis) {\n const emoji = emojis[unified];\n\n if (hasMatch(emoji, keyword)) {\n filtered[unified] = emoji;\n }\n }\n\n return filtered;\n}\n\nfunction hasMatch(emoji: DataEmoji, keyword: string): boolean {\n return emojiNames(emoji).some(name => name.includes(keyword));\n}\n\nexport function useIsEmojiFiltered(): (unified: string) => boolean {\n const { current: filter } = useFilterRef();\n const [searchTerm] = useSearchTermState();\n\n return unified => isEmojiFilteredBySearchTerm(unified, filter, searchTerm);\n}\n\nfunction isEmojiFilteredBySearchTerm(\n unified: string,\n filter: FilterState,\n searchTerm: string\n): boolean {\n if (!filter || !searchTerm) {\n return false;\n }\n\n return !filter[searchTerm]?.[unified];\n}\n\nexport type FilterDict = Record<string, DataEmoji>;\n\nfunction findLongestMatch(\n keyword: string,\n dict: Record<string, FilterDict> | null\n): FilterDict | null {\n if (!dict) {\n return null;\n }\n\n if (dict[keyword]) {\n return dict[keyword];\n }\n\n const longestMatchingKey = Object.keys(dict)\n .sort((a, b) => b.length - a.length)\n .find(key => keyword.includes(key));\n\n if (longestMatchingKey) {\n return dict[longestMatchingKey];\n }\n\n return null;\n}\n\nexport function getNormalizedSearchTerm(str: string): string {\n if (!str || typeof str !== 'string') {\n return '';\n }\n\n return str.trim().toLowerCase();\n}\n\nfunction getStatusSearchResults(\n filterState: FilterState,\n searchTerm: string\n): string {\n if (!filterState?.[searchTerm]) return '';\n\n const searchResultsCount =\n Object.entries(filterState?.[searchTerm])?.length || 0;\n // eslint-disable-next-line react-hooks/rules-of-hooks\n return useSearchResultsConfig(searchResultsCount);\n}\n","import { useEmojisThatFailedToLoadState } from '../components/context/PickerContext';\nimport { DataEmoji } from '../dataUtils/DataTypes';\nimport { emojiUnified } from '../dataUtils/emojiSelectors';\n\nimport { useIsEmojiFiltered } from './useFilter';\n\nexport function useIsEmojiHidden(): (emoji: DataEmoji) => IsHiddenReturn {\n const [emojisThatFailedToLoad] = useEmojisThatFailedToLoadState();\n const isEmojiFiltered = useIsEmojiFiltered();\n\n return (emoji: DataEmoji): IsHiddenReturn => {\n const unified = emojiUnified(emoji);\n\n const failedToLoad = emojisThatFailedToLoad.has(unified);\n const filteredOut = isEmojiFiltered(unified);\n\n return {\n failedToLoad,\n filteredOut,\n hidden: failedToLoad || filteredOut\n };\n };\n}\n\ntype IsHiddenReturn = {\n failedToLoad: boolean;\n filteredOut: boolean;\n hidden: boolean;\n};\n","import { cx } from 'flairup';\nimport * as React from 'react';\n\nimport { stylesheet } from '../../Stylesheet/stylesheet';\n\ninterface Props\n extends React.DetailedHTMLProps<\n React.ButtonHTMLAttributes<HTMLButtonElement>,\n HTMLButtonElement\n > {\n className?: string;\n}\n\nexport function Button(props: Props) {\n return (\n <button\n type=\"button\"\n {...props}\n className={cx(styles.button, props.className)}\n >\n {props.children}\n </button>\n );\n}\n\nconst styles = stylesheet.create({\n button: {\n '.': 'epr-btn',\n cursor: 'pointer',\n border: '0',\n background: 'none',\n outline: 'none'\n }\n});\n","import { cx } from 'flairup';\nimport * as React from 'react';\n\nimport { ClassNames } from '../../DomUtils/classNames';\nimport { commonStyles, stylesheet } from '../../Stylesheet/stylesheet';\nimport { Button } from '../atoms/Button';\n\ntype ClickableEmojiButtonProps = Readonly<{\n hidden?: boolean;\n showVariations?: boolean;\n hiddenOnSearch?: boolean;\n emojiNames: string[];\n children: React.ReactNode;\n hasVariations: boolean;\n unified?: string;\n}>;\n\nexport function ClickableEmojiButton({\n emojiNames,\n unified,\n hidden,\n hiddenOnSearch,\n showVariations = true,\n hasVariations,\n children\n}: ClickableEmojiButtonProps) {\n return (\n <Button\n className={cx(\n styles.emoji,\n hidden && commonStyles.hidden,\n hiddenOnSearch && commonStyles.hiddenOnSearch,\n {\n [ClassNames.visible]: !hidden && !hiddenOnSearch\n },\n !!(hasVariations && showVariations) && styles.hasVariations\n )}\n data-unified={unified}\n aria-label={emojiNames[0]}\n data-full-name={emojiNames}\n >\n {children}\n </Button>\n );\n}\n\nconst styles = stylesheet.create({\n emoji: {\n '.': ClassNames.emoji,\n position: 'relative',\n width: 'var(--epr-emoji-fullsize)',\n height: 'var(--epr-emoji-fullsize)',\n boxSizing: 'border-box',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n maxWidth: 'var(--epr-emoji-fullsize)',\n maxHeight: 'var(--epr-emoji-fullsize)',\n borderRadius: '8px',\n overflow: 'hidden',\n transition: 'background-color 0.2s',\n ':hover': {\n backgroundColor: 'var(--epr-emoji-hover-color)'\n },\n ':focus': {\n backgroundColor: 'var(--epr-focus-bg-color)'\n }\n },\n hasVariations: {\n '.': ClassNames.emojiHasVariations,\n ':after': {\n content: '',\n display: 'block',\n width: '0',\n height: '0',\n right: '0px',\n bottom: '1px',\n position: 'absolute',\n borderLeft: '4px solid transparent',\n borderRight: '4px solid transparent',\n transform: 'rotate(135deg)',\n borderBottom: '4px solid var(--epr-emoji-variation-indicator-color)',\n zIndex: 'var(--epr-emoji-variations-indictator-z-index)'\n },\n ':hover:after': {\n borderBottom: '4px solid var(--epr-emoji-variation-indicator-color-hover)'\n }\n }\n});\n","import { ClassNames } from '../../DomUtils/classNames';\nimport { stylesheet } from '../../Stylesheet/stylesheet';\n\nexport const emojiStyles = stylesheet.create({\n external: {\n '.': ClassNames.external,\n fontSize: '0'\n },\n common: {\n alignSelf: 'center',\n justifySelf: 'center',\n display: 'block'\n }\n});\n","import { cx } from 'flairup';\nimport * as React from 'react';\n\nimport { stylesheet } from '../../Stylesheet/stylesheet';\nimport { EmojiStyle } from '../../types/exposedTypes';\n\nimport { emojiStyles } from './emojiStyles';\n\nexport function EmojiImg({\n emojiName,\n style,\n lazyLoad = false,\n imgUrl,\n onError\n}: {\n emojiName: string;\n emojiStyle: EmojiStyle;\n style: React.CSSProperties;\n lazyLoad?: boolean;\n imgUrl: string;\n onError: () => void;\n}) {\n return (\n <img\n src={imgUrl}\n alt={emojiName}\n className={cx(styles.emojiImag, emojiStyles.external, emojiStyles.common)}\n loading={lazyLoad ? 'lazy' : 'eager'}\n onError={onError}\n style={style}\n />\n );\n}\n\nconst styles = stylesheet.create({\n emojiImag: {\n '.': 'epr-emoji-img',\n maxWidth: 'var(--epr-emoji-fullsize)',\n maxHeight: 'var(--epr-emoji-fullsize)',\n minWidth: 'var(--epr-emoji-fullsize)',\n minHeight: 'var(--epr-emoji-fullsize)',\n padding: 'var(--epr-emoji-padding)'\n }\n});\n","import { cx } from 'flairup';\nimport * as React from 'react';\n\nimport { stylesheet } from '../../Stylesheet/stylesheet';\nimport { parseNativeEmoji } from '../../dataUtils/parseNativeEmoji';\n\nimport { emojiStyles } from './emojiStyles';\n\nexport function NativeEmoji({\n unified,\n style\n}: {\n unified: string;\n style: React.CSSProperties;\n}) {\n return (\n <span\n className={cx(\n styles.nativeEmoji,\n emojiStyles.common,\n emojiStyles.external\n )}\n data-unified={unified}\n style={style}\n >\n {parseNativeEmoji(unified)}\n </span>\n );\n}\n\nconst styles = stylesheet.create({\n nativeEmoji: {\n '.': 'epr-emoji-native',\n fontFamily:\n '\"Segoe UI Emoji\", \"Segoe UI Symbol\", \"Segoe UI\", \"Apple Color Emoji\", \"Twemoji Mozilla\", \"Noto Color Emoji\", \"EmojiOne Color\", \"Android Emoji\"!important',\n position: 'relative',\n lineHeight: '100%',\n fontSize: 'var(--epr-emoji-size)',\n textAlign: 'center',\n alignSelf: 'center',\n justifySelf: 'center',\n letterSpacing: '0',\n padding: 'var(--epr-emoji-padding)'\n }\n});\n","import * as React from 'react';\n\nimport {\n emojiByUnified,\n emojiName,\n emojiUrlByUnified\n} from '../../dataUtils/emojiSelectors';\nimport { isCustomEmoji } from '../../typeRefinements/typeRefinements';\nimport { EmojiStyle } from '../../types/exposedTypes';\nimport { useEmojisThatFailedToLoadState } from '../context/PickerContext';\n\nimport { BaseEmojiProps } from './BaseEmojiProps';\nimport { EmojiImg } from './EmojiImg';\nimport { NativeEmoji } from './NativeEmoji';\n\nexport function ViewOnlyEmoji({\n emoji,\n unified,\n emojiStyle,\n size,\n lazyLoad,\n getEmojiUrl = emojiUrlByUnified\n}: BaseEmojiProps) {\n const [, setEmojisThatFailedToLoad] = useEmojisThatFailedToLoadState();\n\n const style = {} as React.CSSProperties;\n if (size) {\n style.width = style.height = style.fontSize = `${size}px`;\n }\n\n const emojiToRender = emoji ? emoji : emojiByUnified(unified);\n\n if (!emojiToRender) {\n return null;\n }\n\n if (isCustomEmoji(emojiToRender)) {\n return (\n <EmojiImg\n style={style}\n emojiName={unified}\n emojiStyle={EmojiStyle.NATIVE}\n lazyLoad={lazyLoad}\n imgUrl={emojiToRender.imgUrl}\n onError={onError}\n />\n );\n }\n\n return (\n <>\n {emojiStyle === EmojiStyle.NATIVE ? (\n <NativeEmoji unified={unified} style={style} />\n ) : (\n <EmojiImg\n style={style}\n emojiName={emojiName(emojiToRender)}\n emojiStyle={emojiStyle}\n lazyLoad={lazyLoad}\n imgUrl={getEmojiUrl(unified, emojiStyle)}\n onError={onError}\n />\n )}\n </>\n );\n\n function onError() {\n setEmojisThatFailedToLoad(prev => new Set(prev).add(unified));\n }\n}\n","import * as React from 'react';\n\nimport { DataEmoji } from '../../dataUtils/DataTypes';\nimport { emojiHasVariations, emojiNames } from '../../dataUtils/emojiSelectors';\n\nimport { BaseEmojiProps } from './BaseEmojiProps';\nimport { ClickableEmojiButton } from './ClickableEmojiButton';\nimport { ViewOnlyEmoji } from './ViewOnlyEmoji';\n\ntype ClickableEmojiProps = Readonly<\n BaseEmojiProps & {\n hidden?: boolean;\n showVariations?: boolean;\n hiddenOnSearch?: boolean;\n emoji: DataEmoji;\n className?: string;\n }\n>;\n\nexport function ClickableEmoji({\n emoji,\n unified,\n hidden,\n hiddenOnSearch,\n emojiStyle,\n showVariations = true,\n size,\n lazyLoad,\n getEmojiUrl\n}: ClickableEmojiProps) {\n const hasVariations = emojiHasVariations(emoji);\n\n return (\n <ClickableEmojiButton\n hasVariations={hasVariations}\n showVariations={showVariations}\n hidden={hidden}\n hiddenOnSearch={hiddenOnSearch}\n emojiNames={emojiNames(emoji)}\n unified={unified}\n >\n <ViewOnlyEmoji\n unified={unified}\n emoji={emoji}\n size={size}\n emojiStyle={emojiStyle}\n lazyLoad={lazyLoad}\n getEmojiUrl={getEmojiUrl}\n />\n </ClickableEmojiButton>\n );\n}\n","import { cx } from 'flairup';\nimport * as React from 'react';\n\nimport { ClassNames } from '../../DomUtils/classNames';\nimport { commonStyles, stylesheet } from '../../Stylesheet/stylesheet';\nimport {\n CategoryConfig,\n categoryFromCategoryConfig,\n categoryNameFromCategoryConfig\n} from '../../config/categoryConfig';\n\ntype Props = Readonly<{\n categoryConfig: CategoryConfig;\n children?: React.ReactNode;\n hidden?: boolean;\n hiddenOnSearch?: boolean;\n}>;\n\nexport function EmojiCategory({\n categoryConfig,\n children,\n hidden,\n hiddenOnSearch\n}: Props) {\n const category = categoryFromCategoryConfig(categoryConfig);\n const categoryName = categoryNameFromCategoryConfig(categoryConfig);\n\n return (\n <li\n className={cx(\n styles.category,\n hidden && commonStyles.hidden,\n hiddenOnSearch && commonStyles.hiddenOnSearch\n )}\n data-name={category}\n aria-label={categoryName}\n >\n <h2 className={cx(styles.label)}>{categoryName}</h2>\n <div className={cx(styles.categoryContent)}>{children}</div>\n </li>\n );\n}\n\nconst styles = stylesheet.create({\n category: {\n '.': ClassNames.category,\n ':not(:has(.epr-visible))': {\n display: 'none'\n }\n },\n categoryContent: {\n '.': ClassNames.categoryContent,\n display: 'grid',\n gridGap: '0',\n gridTemplateColumns: 'repeat(auto-fill, var(--epr-emoji-fullsize))',\n justifyContent: 'space-between',\n margin: 'var(--epr-category-padding)',\n position: 'relative'\n },\n label: {\n '.': ClassNames.label,\n alignItems: 'center',\n // @ts-expect-error - backdropFilter is a valid CSS property\n backdropFilter: 'blur(3px)',\n backgroundColor: 'var(--epr-category-label-bg-color)',\n color: 'var(--epr-category-label-text-color)',\n display: 'flex',\n fontSize: '16px',\n fontWeight: 'bold',\n height: 'var(--epr-category-label-height)',\n margin: '0',\n padding: 'var(--epr-category-label-padding)',\n position: 'sticky',\n textTransform: 'capitalize',\n top: '0',\n width: '100%',\n zIndex: 'var(--epr-category-label-z-index)'\n }\n});\n","import * as React from 'react';\n\nimport { CategoryConfig } from '../../config/categoryConfig';\nimport {\n useEmojiStyleConfig,\n useGetEmojiUrlConfig,\n useSuggestedEmojisModeConfig,\n} from '../../config/useConfig';\nimport { emojiByUnified } from '../../dataUtils/emojiSelectors';\nimport { getSuggested } from '../../dataUtils/suggested';\nimport { useUpdateSuggested } from '../context/PickerContext';\nimport { ClickableEmoji } from '../emoji/Emoji';\n\nimport { EmojiCategory } from './EmojiCategory';\n\ntype Props = Readonly<{\n categoryConfig: CategoryConfig;\n}>;\n\nexport function Suggested({ categoryConfig }: Props) {\n const [suggestedUpdated] = useUpdateSuggested();\n const suggestedEmojisModeConfig = useSuggestedEmojisModeConfig();\n const getEmojiUrl = useGetEmojiUrlConfig();\n const suggested = React.useMemo(\n () => getSuggested(suggestedEmojisModeConfig) ?? [],\n // eslint-disable-next-line react-hooks/exhaustive-deps\n [suggestedUpdated, suggestedEmojisModeConfig]\n );\n const emojiStyle = useEmojiStyleConfig();\n\n return (\n <EmojiCategory\n categoryConfig={categoryConfig}\n hiddenOnSearch\n hidden={suggested.length === 0}\n >\n {suggested.map((suggestedItem) => {\n const emoji = emojiByUnified(suggestedItem.original);\n\n if (!emoji) {\n return null;\n }\n\n return (\n <ClickableEmoji\n showVariations={false}\n unified={suggestedItem.unified}\n emojiStyle={emojiStyle}\n emoji={emoji}\n key={suggestedItem.unified}\n getEmojiUrl={getEmojiUrl}\n />\n );\n })}\n </EmojiCategory>\n );\n}\n","import { cx } from 'flairup';\nimport * as React from 'react';\n\nimport { ClassNames } from '../../DomUtils/classNames';\nimport { stylesheet } from '../../Stylesheet/stylesheet';\nimport {\n Categories,\n CategoryConfig,\n categoryFromCategoryConfig\n} from '../../config/categoryConfig';\nimport {\n useCategoriesConfig,\n useEmojiStyleConfig,\n useGetEmojiUrlConfig,\n useLazyLoadEmojisConfig,\n useSkinTonesDisabledConfig\n} from '../../config/useConfig';\nimport { emojisByCategory, emojiUnified } from '../../dataUtils/emojiSelectors';\nimport { useIsEmojiDisallowed } from '../../hooks/useDisallowedEmojis';\nimport { useIsEmojiHidden } from '../../hooks/useIsEmojiHidden';\nimport {\n useActiveSkinToneState,\n useIsPastInitialLoad\n} from '../context/PickerContext';\nimport { ClickableEmoji } from '../emoji/Emoji';\n\nimport { EmojiCategory } from './EmojiCategory';\nimport { Suggested } from './Suggested';\n\nexport function EmojiList() {\n const categories = useCategoriesConfig();\n const renderdCategoriesCountRef = React.useRef(0);\n\n return (\n <ul className={cx(styles.emojiList)}>\n {categories.map(categoryConfig => {\n const category = categoryFromCategoryConfig(categoryConfig);\n\n if (category === Categories.SUGGESTED) {\n return <Suggested key={category} categoryConfig={categoryConfig} />;\n }\n\n return (\n <RenderCategory\n key={category}\n category={category}\n categoryConfig={categoryConfig}\n renderdCategoriesCountRef={renderdCategoriesCountRef}\n />\n );\n })}\n </ul>\n );\n}\n\nfunction RenderCategory({\n category,\n categoryConfig,\n renderdCategoriesCountRef\n}: {\n category: Categories;\n categoryConfig: CategoryConfig;\n renderdCategoriesCountRef: React.MutableRefObject<number>;\n}) {\n const isEmojiHidden = useIsEmojiHidden();\n const lazyLoadEmojis = useLazyLoadEmojisConfig();\n const emojiStyle = useEmojiStyleConfig();\n const isPastInitialLoad = useIsPastInitialLoad();\n const [activeSkinTone] = useActiveSkinToneState();\n const isEmojiDisallowed = useIsEmojiDisallowed();\n const getEmojiUrl = useGetEmojiUrlConfig();\n const showVariations = !useSkinTonesDisabledConfig();\n\n // Small trick to defer the rendering of all emoji categories until the first category is visible\n // This way the user gets to actually see something and not wait for the whole picker to render.\n const emojisToPush =\n !isPastInitialLoad && renderdCategoriesCountRef.current > 0\n ? []\n : emojisByCategory(category);\n\n if (emojisToPush.length > 0) {\n renderdCategoriesCountRef.current++;\n }\n\n let hiddenCounter = 0;\n\n const emojis = emojisToPush.map(emoji => {\n const unified = emojiUnified(emoji, activeSkinTone);\n const { failedToLoad, filteredOut, hidden } = isEmojiHidden(emoji);\n\n const isDisallowed = isEmojiDisallowed(emoji);\n\n if (hidden || isDisallowed) {\n hiddenCounter++;\n }\n\n if (isDisallowed) {\n return null;\n }\n\n return (\n <ClickableEmoji\n showVariations={showVariations}\n key={unified}\n emoji={emoji}\n unified={unified}\n hidden={failedToLoad}\n hiddenOnSearch={filteredOut}\n emojiStyle={emojiStyle}\n lazyLoad={lazyLoadEmojis}\n getEmojiUrl={getEmojiUrl}\n />\n );\n });\n\n return (\n <EmojiCategory\n categoryConfig={categoryConfig}\n // Indicates that there are no visible emojis\n // Hence, the category should be hidden\n hidden={hiddenCounter === emojis.length}\n >\n {emojis}\n </EmojiCategory>\n );\n}\n\nconst styles = stylesheet.create({\n emojiList: {\n '.': ClassNames.emojiList,\n listStyle: 'none',\n margin: '0',\n padding: '0'\n }\n});\n","import {\n elementCountInRow,\n elementIndexInRow,\n getElementInNextRow,\n getElementInPrevRow,\n getElementInRow,\n hasNextRow,\n rowNumber\n} from './elementPositionInRow';\nimport { focusElement } from './focusElement';\nimport { scrollEmojiAboveLabel } from './scrollTo';\nimport {\n allVisibleEmojis,\n closestCategory,\n firstVisibleEmoji,\n lastVisibleEmoji,\n nextCategory,\n nextVisibleEmoji,\n NullableElement,\n prevCategory,\n prevVisibleEmoji,\n closestCategoryContent\n} from './selectors';\n\nexport function focusFirstVisibleEmoji(parent: NullableElement) {\n const emoji = firstVisibleEmoji(parent);\n focusElement(emoji);\n scrollEmojiAboveLabel(emoji);\n}\n\nexport function focusAndClickFirstVisibleEmoji(parent: NullableElement) {\n const firstEmoji = firstVisibleEmoji(parent);\n\n focusElement(firstEmoji);\n firstEmoji?.click();\n}\n\nexport function focusLastVisibleEmoji(parent: NullableElement) {\n focusElement(lastVisibleEmoji(parent));\n}\n\nexport function focusNextVisibleEmoji(element: NullableElement) {\n if (!element) {\n return;\n }\n\n const next = nextVisibleEmoji(element);\n\n if (!next) {\n return focusFirstVisibleEmoji(nextCategory(element));\n }\n\n focusElement(next);\n scrollEmojiAboveLabel(next);\n}\n\nexport function focusPrevVisibleEmoji(element: NullableElement) {\n if (!element) {\n return;\n }\n\n const prev = prevVisibleEmoji(element);\n\n if (!prev) {\n return focusLastVisibleEmoji(prevCategory(element));\n }\n\n focusElement(prev);\n scrollEmojiAboveLabel(prev);\n}\n\nexport function focusVisibleEmojiOneRowUp(\n element: NullableElement,\n exitUp: () => void\n) {\n if (!element) {\n return;\n }\n\n const prev = visibleEmojiOneRowUp(element);\n\n if (!prev) {\n return exitUp();\n }\n\n focusElement(prev);\n scrollEmojiAboveLabel(prev);\n}\n\nexport function focusVisibleEmojiOneRowDown(element: NullableElement) {\n if (!element) {\n return;\n }\n\n const next = visibleEmojiOneRowDown(element);\n\n return focusElement(next);\n}\n\nfunction visibleEmojiOneRowUp(element: HTMLElement) {\n if (!element) {\n return null;\n }\n\n const categoryContent = closestCategoryContent(element);\n const category = closestCategory(categoryContent);\n const indexInRow = elementIndexInRow(categoryContent, element);\n const row = rowNumber(categoryContent, element);\n const countInRow = elementCountInRow(categoryContent, element);\n\n if (row === 0) {\n const prevVisibleCategory = prevCategory(category);\n\n if (!prevVisibleCategory) {\n return null;\n }\n\n return getElementInRow(\n allVisibleEmojis(prevVisibleCategory),\n -1, // last row\n countInRow,\n indexInRow\n );\n }\n\n return getElementInPrevRow(\n allVisibleEmojis(categoryContent),\n row,\n countInRow,\n indexInRow\n );\n}\n\nfunction visibleEmojiOneRowDown(element: HTMLElement) {\n if (!element) {\n return null;\n }\n\n const categoryContent = closestCategoryContent(element);\n const category = closestCategory(categoryContent);\n const indexInRow = elementIndexInRow(categoryContent, element);\n const row = rowNumber(categoryContent, element);\n const countInRow = elementCountInRow(categoryContent, element);\n if (!hasNextRow(categoryContent, element)) {\n const nextVisibleCategory = nextCategory(category);\n\n if (!nextVisibleCategory) {\n return null;\n }\n\n return getElementInRow(\n allVisibleEmojis(nextVisibleCategory),\n 0,\n countInRow,\n indexInRow\n );\n }\n\n const itemInNextRow = getElementInNextRow(\n allVisibleEmojis(categoryContent),\n row,\n countInRow,\n indexInRow\n );\n\n return itemInNextRow;\n}\n","function styleInject(css, ref) {\n if ( ref === void 0 ) ref = {};\n var insertAt = ref.insertAt;\n\n if (!css || typeof document === 'undefined') { return; }\n\n var head = document.head || document.getElementsByTagName('head')[0];\n var style = document.createElement('style');\n style.type = 'text/css';\n\n if (insertAt === 'top') {\n if (head.firstChild) {\n head.insertBefore(style, head.firstChild);\n } else {\n head.appendChild(style);\n }\n } else {\n head.appendChild(style);\n }\n\n if (style.styleSheet) {\n style.styleSheet.cssText = css;\n } else {\n style.appendChild(document.createTextNode(css));\n }\n}\n\nexport default styleInject;\n","import { cx } from 'flairup';\nimport * as React from 'react';\nimport { useEffect } from 'react';\n\nimport { ClassNames } from '../../DomUtils/classNames';\nimport { focusFirstVisibleEmoji } from '../../DomUtils/keyboardNavigation';\nimport {\n buttonFromTarget,\n elementHeight,\n emojiTrueOffsetTop,\n emojiTruOffsetLeft\n} from '../../DomUtils/selectors';\nimport { stylesheet } from '../../Stylesheet/stylesheet';\nimport {\n useEmojiStyleConfig,\n useGetEmojiUrlConfig\n} from '../../config/useConfig';\nimport {\n emojiHasVariations,\n emojiUnified,\n emojiVariations\n} from '../../dataUtils/emojiSelectors';\nimport {\n useAnchoredEmojiRef,\n useBodyRef,\n useSetAnchoredEmojiRef,\n useVariationPickerRef\n} from '../context/ElementRefContext';\nimport { useEmojiVariationPickerState } from '../context/PickerContext';\nimport { ClickableEmoji } from '../emoji/Emoji';\n\nimport './EmojiVariationPicker.css';\n\nenum Direction {\n Up,\n Down\n}\n\n// eslint-disable-next-line complexity\nexport function EmojiVariationPicker() {\n const AnchoredEmojiRef = useAnchoredEmojiRef();\n const VariationPickerRef = useVariationPickerRef();\n const [emoji] = useEmojiVariationPickerState();\n const emojiStyle = useEmojiStyleConfig();\n\n const { getTop, getMenuDirection } = useVariationPickerTop(\n VariationPickerRef\n );\n const setAnchoredEmojiRef = useSetAnchoredEmojiRef();\n const getPointerStyle = usePointerStyle(VariationPickerRef);\n const getEmojiUrl = useGetEmojiUrlConfig();\n\n const button = buttonFromTarget(AnchoredEmojiRef.current);\n\n const visible = Boolean(\n emoji &&\n button &&\n emojiHasVariations(emoji) &&\n button.classList.contains(ClassNames.emojiHasVariations)\n );\n\n useEffect(() => {\n if (!visible) {\n return;\n }\n\n focusFirstVisibleEmoji(VariationPickerRef.current);\n }, [VariationPickerRef, visible, AnchoredEmojiRef]);\n\n let top, pointerStyle;\n\n if (!visible && AnchoredEmojiRef.current) {\n setAnchoredEmojiRef(null);\n } else {\n top = getTop();\n pointerStyle = getPointerStyle();\n }\n\n return (\n <div\n ref={VariationPickerRef}\n className={cx(\n styles.variationPicker,\n getMenuDirection() === Direction.Down && styles.pointingUp,\n visible && styles.visible\n )}\n style={{ top }}\n >\n {visible && emoji\n ? [emojiUnified(emoji)]\n .concat(emojiVariations(emoji))\n .slice(0, 6)\n .map(unified => (\n <ClickableEmoji\n key={unified}\n emoji={emoji}\n unified={unified}\n emojiStyle={emojiStyle}\n showVariations={false}\n getEmojiUrl={getEmojiUrl}\n />\n ))\n : null}\n <div className={cx(styles.pointer)} style={pointerStyle} />\n </div>\n );\n}\n\nfunction usePointerStyle(VariationPickerRef: React.RefObject<HTMLElement>) {\n const AnchoredEmojiRef = useAnchoredEmojiRef();\n return function getPointerStyle() {\n const style: React.CSSProperties = {};\n if (!VariationPickerRef.current) {\n return style;\n }\n\n if (AnchoredEmojiRef.current) {\n const button = buttonFromTarget(AnchoredEmojiRef.current);\n\n const offsetLeft = emojiTruOffsetLeft(button);\n\n if (!button) {\n return style;\n }\n\n // half of the button\n style.left = offsetLeft + button?.clientWidth / 2;\n }\n\n return style;\n };\n}\n\nfunction useVariationPickerTop(\n VariationPickerRef: React.RefObject<HTMLElement>\n) {\n const AnchoredEmojiRef = useAnchoredEmojiRef();\n const BodyRef = useBodyRef();\n let direction = Direction.Up;\n\n return {\n getMenuDirection,\n getTop\n };\n\n function getMenuDirection() {\n return direction;\n }\n\n function getTop() {\n direction = Direction.Up;\n let emojiOffsetTop = 0;\n\n if (!VariationPickerRef.current) {\n return 0;\n }\n\n const height = elementHeight(VariationPickerRef.current);\n\n if (AnchoredEmojiRef.current) {\n const bodyRef = BodyRef.current;\n const button = buttonFromTarget(AnchoredEmojiRef.current);\n\n const buttonHeight = elementHeight(button);\n\n emojiOffsetTop = emojiTrueOffsetTop(button);\n\n const scrollTop = bodyRef?.scrollTop ?? 0;\n\n if (scrollTop > emojiOffsetTop - height) {\n direction = Direction.Down;\n emojiOffsetTop += buttonHeight + height;\n }\n }\n\n return emojiOffsetTop - height;\n }\n}\n\nconst styles = stylesheet.create({\n variationPicker: {\n '.': ClassNames.variationPicker,\n position: 'absolute',\n right: '15px',\n left: '15px',\n padding: '5px',\n boxShadow: '0px 2px 5px rgba(0, 0, 0, 0.2)',\n borderRadius: '3px',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'space-around',\n opacity: '0',\n visibility: 'hidden',\n pointerEvents: 'none',\n top: '-100%',\n border: '1px solid var(--epr-picker-border-color)',\n height: 'var(--epr-emoji-variation-picker-height)',\n zIndex: 'var(--epr-skin-variation-picker-z-index)',\n background: 'var(--epr-emoji-variation-picker-bg-color)',\n transform: 'scale(0.9)',\n transition: 'transform 0.1s ease-out, opacity 0.2s ease-out'\n },\n pointingUp: {\n '.': 'pointing-up',\n transformOrigin: 'center 0%',\n transform: 'scale(0.9)'\n },\n '.pointing-up': {\n pointer: {\n top: '0',\n transform: 'rotate(180deg) translateY(100%) translateX(18px)'\n }\n },\n visible: {\n opacity: '1',\n visibility: 'visible',\n pointerEvents: 'all',\n transform: 'scale(1)'\n },\n pointer: {\n '.': 'epr-emoji-pointer',\n content: '',\n position: 'absolute',\n width: '25px',\n height: '15px',\n backgroundRepeat: 'no-repeat',\n backgroundPosition: '0 0',\n backgroundSize: '50px 15px',\n top: '100%',\n transform: 'translateX(-18px)'\n },\n '.epr-dark-theme': {\n pointer: {\n backgroundPosition: '-25px 0'\n }\n },\n '.epr-auto-theme': {\n pointer: {\n // @ts-ignore\n '@media (prefers-color-scheme: dark)': {\n backgroundPosition: '-25px 0'\n }\n }\n }\n});\n","import { cx } from 'flairup';\nimport * as React from 'react';\n\nimport { ClassNames } from '../../DomUtils/classNames';\nimport { stylesheet } from '../../Stylesheet/stylesheet';\nimport { useOnMouseMove } from '../../hooks/useDisallowMouseMove';\nimport { useMouseDownHandlers } from '../../hooks/useMouseDownHandlers';\nimport { useOnScroll } from '../../hooks/useOnScroll';\nimport { useBodyRef } from '../context/ElementRefContext';\n\nimport { EmojiList } from './EmojiList';\nimport { EmojiVariationPicker } from './EmojiVariationPicker';\n\nexport function Body() {\n const BodyRef = useBodyRef();\n useOnScroll(BodyRef);\n useMouseDownHandlers(BodyRef);\n useOnMouseMove();\n\n return (\n <div className={cx(styles.body)} ref={BodyRef}>\n <EmojiVariationPicker />\n <EmojiList />\n </div>\n );\n}\n\nconst styles = stylesheet.create({\n body: {\n '.': ClassNames.scrollBody,\n flex: '1',\n overflowY: 'scroll',\n overflowX: 'hidden',\n position: 'relative'\n }\n});\n","import * as React from 'react';\nimport { useEffect } from 'react';\n\nimport { focusElement } from '../DomUtils/focusElement';\nimport {\n buttonFromTarget,\n originalUnifiedFromEmojiElement,\n unifiedFromEmojiElement\n} from '../DomUtils/selectors';\nimport { useBodyRef } from '../components/context/ElementRefContext';\nimport { PreviewEmoji } from '../components/footer/Preview';\n\nimport {\n useAllowMouseMove,\n useIsMouseDisallowed\n} from './useDisallowMouseMove';\n\nexport function useEmojiPreviewEvents(\n allow: boolean,\n setPreviewEmoji: React.Dispatch<React.SetStateAction<PreviewEmoji>>\n) {\n const BodyRef = useBodyRef();\n const isMouseDisallowed = useIsMouseDisallowed();\n const allowMouseMove = useAllowMouseMove();\n\n useEffect(() => {\n if (!allow) {\n return;\n }\n const bodyRef = BodyRef.current;\n\n bodyRef?.addEventListener('keydown', onEscape, {\n passive: true\n });\n\n bodyRef?.addEventListener('mouseover', onMouseOver, true);\n\n bodyRef?.addEventListener('focus', onEnter, true);\n\n bodyRef?.addEventListener('mouseout', onLeave, {\n passive: true\n });\n bodyRef?.addEventListener('blur', onLeave, true);\n\n function onEnter(e: FocusEvent) {\n const button = buttonFromTarget(e.target as HTMLElement);\n\n if (!button) {\n return onLeave();\n }\n\n const unified = unifiedFromEmojiElement(button);\n const originalUnified = originalUnifiedFromEmojiElement(button);\n\n if (!unified || !originalUnified) {\n return onLeave();\n }\n\n setPreviewEmoji({\n unified,\n originalUnified\n });\n }\n function onLeave(e?: FocusEvent | MouseEvent) {\n if (e) {\n const relatedTarget = e.relatedTarget as HTMLElement;\n\n if (!buttonFromTarget(relatedTarget)) {\n return setPreviewEmoji(null);\n }\n }\n\n setPreviewEmoji(null);\n }\n function onEscape(e: KeyboardEvent) {\n if (e.key === 'Escape') {\n setPreviewEmoji(null);\n }\n }\n\n function onMouseOver(e: MouseEvent) {\n if (isMouseDisallowed()) {\n return;\n }\n\n const button = buttonFromTarget(e.target as HTMLElement);\n\n if (button) {\n focusElement(button);\n }\n }\n\n return () => {\n bodyRef?.removeEventListener('mouseover', onMouseOver);\n bodyRef?.removeEventListener('mouseout', onLeave);\n bodyRef?.removeEventListener('focus', onEnter, true);\n bodyRef?.removeEventListener('blur', onLeave, true);\n bodyRef?.removeEventListener('keydown', onEscape);\n };\n }, [BodyRef, allow, setPreviewEmoji, isMouseDisallowed, allowMouseMove]);\n}\n","import { useSkinTonePickerLocationConfig } from '../config/useConfig';\nimport { SkinTonePickerLocation } from '../types/exposedTypes';\n\nexport function useShouldShowSkinTonePicker() {\n const skinTonePickerLocationConfig = useSkinTonePickerLocationConfig();\n\n return function shouldShowSkinTonePicker(location: SkinTonePickerLocation) {\n return skinTonePickerLocationConfig === location;\n };\n}\n\nexport function useIsSkinToneInSearch() {\n const skinTonePickerLocationConfig = useSkinTonePickerLocationConfig();\n\n return skinTonePickerLocationConfig === SkinTonePickerLocation.SEARCH;\n}\n\nexport function useIsSkinToneInPreview() {\n const skinTonePickerLocationConfig = useSkinTonePickerLocationConfig();\n\n return skinTonePickerLocationConfig === SkinTonePickerLocation.PREVIEW;\n}\n","import { cx } from 'flairup';\nimport * as React from 'react';\n\nimport { stylesheet } from '../../Stylesheet/stylesheet';\n\nexport enum FlexDirection {\n ROW = 'FlexRow',\n COLUMN = 'FlexColumn'\n}\n\ntype Props = Readonly<{\n children: React.ReactNode;\n className?: string;\n style?: React.CSSProperties;\n direction?: FlexDirection;\n}>;\n\nexport default function Flex({\n children,\n className,\n style = {},\n direction = FlexDirection.ROW\n}: Props) {\n return (\n <div\n style={{ ...style }}\n className={cx(styles.flex, className, styles[direction])}\n >\n {children}\n </div>\n );\n}\n\nconst styles = stylesheet.create({\n flex: {\n display: 'flex'\n },\n [FlexDirection.ROW]: {\n flexDirection: 'row'\n },\n [FlexDirection.COLUMN]: {\n flexDirection: 'column'\n }\n});\n","import { cx } from 'flairup';\nimport * as React from 'react';\n\n\ntype Props = Readonly<{\n className?: string;\n style?: React.CSSProperties;\n}>;\n\nexport default function Space({ className, style = {} }: Props) {\n return <div style={{ flex: 1, ...style }} className={cx(className)} />;\n}\n","import * as React from 'react';\n\ntype Props = Readonly<{\n children: React.ReactNode;\n className?: string;\n style?: React.CSSProperties;\n}>;\n\nexport default function Absolute({ children, className, style }: Props) {\n return (\n <div style={{ ...style, position: 'absolute' }} className={className}>\n {children}\n </div>\n );\n}\n","import * as React from 'react';\n\ntype Props = Readonly<{\n children: React.ReactNode;\n className?: string;\n style?: React.CSSProperties;\n}>;\n\nexport default function Relative({ children, className, style }: Props) {\n return (\n <div style={{ ...style, position: 'relative' }} className={className}>\n {children}\n </div>\n );\n}\n","/* eslint-disable complexity */\nimport { cx } from 'flairup';\nimport * as React from 'react';\n\nimport { ClassNames } from '../../DomUtils/classNames';\nimport { stylesheet } from '../../Stylesheet/stylesheet';\nimport { useSkinTonesDisabledConfig } from '../../config/useConfig';\nimport skinToneVariations, {\n skinTonesNamed\n} from '../../data/skinToneVariations';\nimport { useCloseAllOpenToggles } from '../../hooks/useCloseAllOpenToggles';\nimport { useFocusSearchInput } from '../../hooks/useFocus';\nimport { SkinTones } from '../../types/exposedTypes';\nimport Absolute from '../Layout/Absolute';\nimport Relative from '../Layout/Relative';\nimport { Button } from '../atoms/Button';\nimport { useSkinTonePickerRef } from '../context/ElementRefContext';\nimport {\n useActiveSkinToneState,\n useSkinToneFanOpenState\n} from '../context/PickerContext';\n\nconst ITEM_SIZE = 28;\n\ntype Props = {\n direction?: SkinTonePickerDirection;\n};\n\nexport function SkinTonePickerMenu() {\n return (\n <Relative style={{ height: ITEM_SIZE }}>\n <Absolute style={{ bottom: 0, right: 0 }}>\n <SkinTonePicker direction={SkinTonePickerDirection.VERTICAL} />\n </Absolute>\n </Relative>\n );\n}\n\nexport function SkinTonePicker({\n direction = SkinTonePickerDirection.HORIZONTAL\n}: Props) {\n const SkinTonePickerRef = useSkinTonePickerRef();\n const isDisabled = useSkinTonesDisabledConfig();\n const [isOpen, setIsOpen] = useSkinToneFanOpenState();\n const [activeSkinTone, setActiveSkinTone] = useActiveSkinToneState();\n const closeAllOpenToggles = useCloseAllOpenToggles();\n const focusSearchInput = useFocusSearchInput();\n\n if (isDisabled) {\n return null;\n }\n\n const fullWidth = `${ITEM_SIZE * skinToneVariations.length}px`;\n\n const expandedSize = isOpen ? fullWidth : ITEM_SIZE + 'px';\n\n const vertical = direction === SkinTonePickerDirection.VERTICAL;\n\n return (\n <Relative\n className={cx(\n styles.skinTones,\n vertical && styles.vertical,\n isOpen && styles.open\n )}\n style={\n vertical\n ? { flexBasis: expandedSize, height: expandedSize }\n : { flexBasis: expandedSize }\n }\n >\n <div className={cx(styles.select)} ref={SkinTonePickerRef}>\n {skinToneVariations.map((skinToneVariation, i) => {\n const active = skinToneVariation === activeSkinTone;\n return (\n <Button\n style={{\n transform: cx(\n vertical\n ? `translateY(-${i * (isOpen ? ITEM_SIZE : 0)}px)`\n : `translateX(-${i * (isOpen ? ITEM_SIZE : 0)}px)`,\n isOpen && active && 'scale(1.3)'\n )\n }}\n onClick={() => {\n if (isOpen) {\n setActiveSkinTone(skinToneVariation);\n focusSearchInput();\n } else {\n setIsOpen(true);\n }\n closeAllOpenToggles();\n }}\n key={skinToneVariation}\n className={cx(\n `epr-tone-${skinToneVariation}`,\n styles.tone,\n !isOpen && styles.closedTone,\n active && styles.active\n )}\n tabIndex={isOpen ? 0 : -1}\n aria-pressed={active}\n aria-label={`Skin tone ${\n skinTonesNamed[skinToneVariation as SkinTones]\n }`}\n ></Button>\n );\n })}\n </div>\n </Relative>\n );\n}\n\nexport enum SkinTonePickerDirection {\n VERTICAL = ClassNames.vertical,\n HORIZONTAL = ClassNames.horizontal\n}\n\nconst styles = stylesheet.create({\n skinTones: {\n '.': 'epr-skin-tones',\n '--': {\n '--epr-skin-tone-size': '15px'\n },\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'flex-end',\n transition: 'all 0.3s ease-in-out',\n padding: '10px 0'\n },\n vertical: {\n padding: '5px',\n alignItems: 'flex-end',\n flexDirection: 'column',\n borderRadius: '6px',\n border: '1px solid var(--epr-bg-color)'\n },\n open: {\n // @ts-ignore\n backdropFilter: 'blur(5px)',\n background: 'var(--epr-skin-tone-picker-menu-color)',\n // @ts-ignore\n '&.epr-active:after': {\n content: '',\n position: 'absolute',\n top: '-2px',\n left: '-2px',\n right: '-2px',\n bottom: '-2px',\n borderRadius: '5px',\n border: '1px solid var(--epr-active-skin-tone-indicator-border-color)'\n }\n },\n select: {\n '.': 'epr-skin-tone-select',\n position: 'relative',\n width: 'var(--epr-skin-tone-size)',\n height: 'var(--epr-skin-tone-size)',\n // @ts-ignore\n '> button': {\n width: 'var(--epr-skin-tone-size)',\n display: 'block',\n cursor: 'pointer',\n borderRadius: '4px',\n height: 'var(--epr-skin-tone-size)',\n position: 'absolute',\n right: '0',\n transition: 'transform 0.3s ease-in-out, opacity 0.35s ease-in-out',\n zIndex: '0',\n boxShadow: '0 0 0 0px var(--epr-active-skin-hover-color)'\n }\n },\n closedTone: {\n opacity: '0',\n zIndex: '0'\n },\n active: {\n '.': 'epr-active',\n zIndex: '1',\n opacity: '1'\n },\n tone: {\n '.': 'epr-tone',\n ':hover': {\n boxShadow: '0 0 0 3px var(--epr-active-skin-hover-color)'\n },\n ':focus': {\n boxShadow: '0 0 0 3px var(--epr-focus-bg-color)'\n },\n // @ts-ignore\n '&.epr-tone-neutral': {\n backgroundColor: '#ffd225'\n },\n '&.epr-tone-1f3fb': {\n backgroundColor: '#ffdfbd'\n },\n '&.epr-tone-1f3fc': {\n backgroundColor: '#e9c197'\n },\n '&.epr-tone-1f3fd': {\n backgroundColor: '#c88e62'\n },\n '&.epr-tone-1f3fe': {\n backgroundColor: '#a86637'\n },\n '&.epr-tone-1f3ff': {\n backgroundColor: '#60463a'\n }\n }\n});\n","import { cx } from 'flairup';\nimport * as React from 'react';\nimport { useState } from 'react';\n\nimport { stylesheet } from '../../Stylesheet/stylesheet';\nimport {\n useEmojiStyleConfig,\n useGetEmojiUrlConfig,\n usePreviewConfig\n} from '../../config/useConfig';\nimport {\n emojiByUnified,\n emojiName,\n emojiUnified\n} from '../../dataUtils/emojiSelectors';\nimport { useEmojiPreviewEvents } from '../../hooks/useEmojiPreviewEvents';\nimport { useIsSkinToneInPreview } from '../../hooks/useShouldShowSkinTonePicker';\nimport Flex from '../Layout/Flex';\nimport Space from '../Layout/Space';\nimport { useEmojiVariationPickerState } from '../context/PickerContext';\nimport { ViewOnlyEmoji } from '../emoji/ViewOnlyEmoji';\nimport { SkinTonePickerMenu } from '../header/SkinTonePicker';\n\nexport function Preview() {\n const previewConfig = usePreviewConfig();\n const isSkinToneInPreview = useIsSkinToneInPreview();\n\n if (!previewConfig.showPreview) {\n return null;\n }\n\n return (\n <Flex className={cx(styles.preview)}>\n <PreviewBody />\n <Space />\n {isSkinToneInPreview ? <SkinTonePickerMenu /> : null}\n </Flex>\n );\n}\n\nexport function PreviewBody() {\n const previewConfig = usePreviewConfig();\n const [previewEmoji, setPreviewEmoji] = useState<PreviewEmoji>(null);\n const emojiStyle = useEmojiStyleConfig();\n const [variationPickerEmoji] = useEmojiVariationPickerState();\n const getEmojiUrl = useGetEmojiUrlConfig();\n\n useEmojiPreviewEvents(previewConfig.showPreview, setPreviewEmoji);\n\n const emoji = emojiByUnified(\n previewEmoji?.unified ?? previewEmoji?.originalUnified\n );\n\n const show = emoji != null && previewEmoji != null;\n\n return <PreviewContent />;\n\n function PreviewContent() {\n const defaultEmoji =\n variationPickerEmoji ?? emojiByUnified(previewConfig.defaultEmoji);\n if (!defaultEmoji) {\n return null;\n }\n const defaultText = variationPickerEmoji\n ? emojiName(variationPickerEmoji)\n : previewConfig.defaultCaption;\n\n return (\n <>\n <div>\n {show ? (\n <ViewOnlyEmoji\n unified={previewEmoji?.unified as string}\n emoji={emoji}\n emojiStyle={emojiStyle}\n size={45}\n getEmojiUrl={getEmojiUrl}\n />\n ) : defaultEmoji ? (\n <ViewOnlyEmoji\n unified={emojiUnified(defaultEmoji)}\n emoji={defaultEmoji}\n emojiStyle={emojiStyle}\n size={45}\n getEmojiUrl={getEmojiUrl}\n />\n ) : null}\n </div>\n {show ? (\n <div className={cx(styles.label)}>{emojiName(emoji)}</div>\n ) : (\n <div className={cx(styles.label)}>{defaultText}</div>\n )}\n </>\n );\n }\n}\n\nexport type PreviewEmoji = null | {\n unified: string;\n originalUnified: string;\n};\n\nconst styles = stylesheet.create({\n preview: {\n alignItems: 'center',\n borderTop: '1px solid var(--epr-preview-border-color)',\n height: 'var(--epr-preview-height)',\n padding: '0 var(--epr-horizontal-padding)',\n position: 'relative',\n zIndex: 'var(--epr-preview-z-index)'\n },\n label: {\n color: 'var(--epr-preview-text-color)',\n fontSize: 'var(--epr-preview-text-size)',\n padding: 'var(--epr-preview-text-padding)',\n textTransform: 'capitalize'\n }\n});\n","export function categoryNameFromDom($category: Element | null): string | null {\n return $category?.getAttribute('data-name') ?? null;\n}\n","import { useEffect } from 'react';\n\nimport { categoryNameFromDom } from '../DomUtils/categoryNameFromDom';\nimport { asSelectors, ClassNames } from '../DomUtils/classNames';\nimport { useBodyRef } from '../components/context/ElementRefContext';\n\nexport function useActiveCategoryScrollDetection(\n setActiveCategory: (category: string) => void\n) {\n const BodyRef = useBodyRef();\n\n useEffect(() => {\n const visibleCategories = new Map();\n const bodyRef = BodyRef.current;\n const observer = new IntersectionObserver(\n entries => {\n if (!bodyRef) {\n return;\n }\n\n for (const entry of entries) {\n const id = categoryNameFromDom(entry.target);\n visibleCategories.set(id, entry.intersectionRatio);\n }\n\n const ratios = Array.from(visibleCategories);\n const lastCategory = ratios[ratios.length - 1];\n\n if (lastCategory[1] == 1) {\n return setActiveCategory(lastCategory[0]);\n }\n\n for (const [id, ratio] of ratios) {\n if (ratio) {\n setActiveCategory(id);\n break;\n }\n }\n },\n {\n threshold: [0, 1]\n }\n );\n bodyRef?.querySelectorAll(asSelectors(ClassNames.category)).forEach(el => {\n observer.observe(el);\n });\n }, [BodyRef, setActiveCategory]);\n}\n","import { useSearchTermState } from '../components/context/PickerContext';\n\nexport default function useIsSearchMode(): boolean {\n const [searchTerm] = useSearchTermState();\n\n return !!searchTerm;\n}\n","import { scrollTo } from '../DomUtils/scrollTo';\nimport { NullableElement } from '../DomUtils/selectors';\nimport {\n useBodyRef,\n usePickerMainRef\n} from '../components/context/ElementRefContext';\n\nexport function useScrollCategoryIntoView() {\n const BodyRef = useBodyRef();\n const PickerMainRef = usePickerMainRef();\n\n return function scrollCategoryIntoView(category: string): void {\n if (!BodyRef.current) {\n return;\n }\n const $category = BodyRef.current?.querySelector(\n `[data-name=\"${category}\"]`\n ) as NullableElement;\n\n if (!$category) {\n return;\n }\n\n const offsetTop = $category.offsetTop || 0;\n\n scrollTo(PickerMainRef.current, offsetTop);\n };\n}\n","import { useCustomEmojisConfig } from '../config/useConfig';\n\nexport function useShouldHideCustomEmojis() {\n const customCategoryConfig = useCustomEmojisConfig();\n\n if (!customCategoryConfig) {\n return false;\n }\n\n return customCategoryConfig.length === 0;\n}\n","import { cx } from 'flairup';\nimport * as React from 'react';\nimport { useState } from 'react';\nimport './CategoryNavigation.css';\n\nimport { ClassNames } from '../../DomUtils/classNames';\nimport {\n commonInteractionStyles,\n stylesheet\n} from '../../Stylesheet/stylesheet';\nimport {\n categoryFromCategoryConfig,\n categoryNameFromCategoryConfig\n} from '../../config/categoryConfig';\nimport { useCategoriesConfig } from '../../config/useConfig';\nimport { useActiveCategoryScrollDetection } from '../../hooks/useActiveCategoryScrollDetection';\nimport useIsSearchMode from '../../hooks/useIsSearchMode';\nimport { useScrollCategoryIntoView } from '../../hooks/useScrollCategoryIntoView';\nimport { useShouldHideCustomEmojis } from '../../hooks/useShouldHideCustomEmojis';\nimport { isCustomCategory } from '../../typeRefinements/typeRefinements';\nimport { Button } from '../atoms/Button';\nimport { useCategoryNavigationRef } from '../context/ElementRefContext';\n\nexport function CategoryNavigation() {\n const [activeCategory, setActiveCategory] = useState<string | null>(null);\n const scrollCategoryIntoView = useScrollCategoryIntoView();\n useActiveCategoryScrollDetection(setActiveCategory);\n const isSearchMode = useIsSearchMode();\n\n const categoriesConfig = useCategoriesConfig();\n const CategoryNavigationRef = useCategoryNavigationRef();\n const hideCustomCategory = useShouldHideCustomEmojis();\n\n return (\n <div\n className={cx(styles.nav)}\n role=\"tablist\"\n aria-label=\"Category navigation\"\n id=\"epr-category-nav-id\"\n ref={CategoryNavigationRef}\n >\n {categoriesConfig.map(categoryConfig => {\n const category = categoryFromCategoryConfig(categoryConfig);\n const isActiveCategory = category === activeCategory;\n\n if (isCustomCategory(categoryConfig) && hideCustomCategory) {\n return null;\n }\n\n return (\n <Button\n tabIndex={isSearchMode || isActiveCategory ? -1 : 0}\n className={cx(\n styles.catBtn,\n commonInteractionStyles.categoryBtn,\n `epr-icn-${category}`,\n {\n [ClassNames.active]: isActiveCategory\n }\n )}\n key={category}\n onClick={() => {\n setActiveCategory(category);\n scrollCategoryIntoView(category);\n }}\n aria-label={categoryNameFromCategoryConfig(categoryConfig)}\n aria-selected={isActiveCategory}\n role=\"tab\"\n aria-controls=\"epr-category-nav-id\"\n />\n );\n })}\n </div>\n );\n}\n\nconst styles = stylesheet.create({\n nav: {\n '.': 'epr-category-nav',\n display: 'flex',\n flexDirection: 'row',\n justifyContent: 'space-around',\n padding: 'var(--epr-header-padding)'\n },\n '.epr-search-active': {\n nav: {\n opacity: '0.3',\n cursor: 'default',\n pointerEvents: 'none'\n }\n },\n '.epr-main:has(input:not(:placeholder-shown))': {\n nav: {\n opacity: '0.3',\n cursor: 'default',\n pointerEvents: 'none'\n }\n },\n catBtn: {\n '.': 'epr-cat-btn',\n display: 'inline-block',\n transition: 'opacity 0.2s ease-in-out',\n position: 'relative',\n height: 'var(--epr-category-navigation-button-size)',\n width: 'var(--epr-category-navigation-button-size)',\n backgroundSize: 'calc(var(--epr-category-navigation-button-size) * 10)',\n outline: 'none',\n backgroundPosition: '0 0',\n ':focus:before': {\n content: '',\n position: 'absolute',\n top: '-2px',\n left: '-2px',\n right: '-2px',\n bottom: '-2px',\n border: '2px solid var(--epr-category-icon-active-color)',\n borderRadius: '50%'\n },\n // @ts-ignore\n '&.epr-icn-suggested': {\n backgroundPositionX:\n 'calc(var(--epr-category-navigation-button-size) * -8)'\n },\n '&.epr-icn-custom': {\n backgroundPositionX:\n 'calc(var(--epr-category-navigation-button-size) * -9)'\n },\n '&.epr-icn-activities': {\n backgroundPositionX:\n 'calc(var(--epr-category-navigation-button-size) * -4)'\n },\n '&.epr-icn-animals_nature': {\n backgroundPositionX:\n 'calc(var(--epr-category-navigation-button-size) * -1)'\n },\n '&.epr-icn-flags': {\n backgroundPositionX:\n 'calc(var(--epr-category-navigation-button-size) * -7)'\n },\n '&.epr-icn-food_drink': {\n backgroundPositionX:\n 'calc(var(--epr-category-navigation-button-size) * -2)'\n },\n '&.epr-icn-objects': {\n backgroundPositionX:\n 'calc(var(--epr-category-navigation-button-size) * -5)'\n },\n '&.epr-icn-smileys_people': {\n backgroundPositionX: '0px'\n },\n '&.epr-icn-symbols': {\n backgroundPositionX:\n 'calc(var(--epr-category-navigation-button-size) * -6)'\n },\n '&.epr-icn-travel_places': {\n backgroundPositionX:\n 'calc(var(--epr-category-navigation-button-size) * -3)'\n }\n },\n '.epr-dark-theme': {\n catBtn: {\n backgroundPositionY:\n 'calc(var(--epr-category-navigation-button-size) * 2)'\n }\n },\n '.epr-auto-theme': {\n catBtn: {\n '@media (prefers-color-scheme: dark)': {\n backgroundPositionY:\n 'calc(var(--epr-category-navigation-button-size) * 2)'\n }\n }\n },\n '.epr-auto-theme:not(.epr-search-active)': {\n catBtn: {\n '@media (prefers-color-scheme: dark)': {\n ':hover': {\n backgroundPositionY:\n 'calc(var(--epr-category-navigation-button-size) * 3)'\n },\n // @ts-ignore\n '&.epr-active': {\n backgroundPositionY:\n 'calc(var(--epr-category-navigation-button-size) * 3)'\n }\n }\n }\n },\n '.epr-dark-theme:not(.epr-search-active)': {\n catBtn: {\n ':hover': {\n backgroundPositionY:\n 'calc(var(--epr-category-navigation-button-size) * 3)'\n },\n // @ts-ignore\n '&.epr-active': {\n backgroundPositionY:\n 'calc(var(--epr-category-navigation-button-size) * 3)'\n }\n }\n }\n});\n","import * as React from 'react';\n\nimport { ClassNames, asSelectors } from '../../DomUtils/classNames';\nimport { getNormalizedSearchTerm } from '../../hooks/useFilter';\n\nconst SCOPE = `${asSelectors(ClassNames.emojiPicker)} ${asSelectors(\n ClassNames.emojiList\n)}`;\n\nconst EMOJI_BUTTON = ['button', asSelectors(ClassNames.emoji)].join('');\nconst CATEGORY = asSelectors(ClassNames.category);\n\nexport function CssSearch({ value }: { value: undefined | string }) {\n if (!value) {\n return null;\n }\n\n const q = genQuery(value);\n\n return (\n <style>{`\n ${SCOPE} ${EMOJI_BUTTON} {\n display: none;\n }\n\n\n ${SCOPE} ${q} {\n display: flex;\n }\n\n ${SCOPE} ${CATEGORY}:not(:has(${q})) {\n display: none;\n }\n `}</style>\n );\n}\n\nfunction genQuery(value: string): string {\n return [\n EMOJI_BUTTON,\n '[data-full-name*=\"',\n getNormalizedSearchTerm(value),\n '\"]'\n ].join('');\n}\n","import { cx } from 'flairup';\nimport * as React from 'react';\nimport { useState } from 'react';\n\nimport { stylesheet } from '../../Stylesheet/stylesheet';\nimport {\n useAutoFocusSearchConfig,\n useSearchDisabledConfig,\n useSearchPlaceHolderConfig\n} from '../../config/useConfig';\nimport { useCloseAllOpenToggles } from '../../hooks/useCloseAllOpenToggles';\nimport { useClearSearch, useFilter } from '../../hooks/useFilter';\nimport { useIsSkinToneInSearch } from '../../hooks/useShouldShowSkinTonePicker';\nimport Flex from '../Layout/Flex';\nimport Relative from '../Layout/Relative';\nimport { Button } from '../atoms/Button';\nimport { useSearchInputRef } from '../context/ElementRefContext';\n\nimport './Search.css';\nimport { CssSearch } from './CssSearch';\nimport { SkinTonePicker } from './SkinTonePicker';\n\nexport function SearchContainer() {\n const searchDisabled = useSearchDisabledConfig();\n\n const isSkinToneInSearch = useIsSkinToneInSearch();\n\n if (searchDisabled) {\n return null;\n }\n\n return (\n <Flex className={cx(styles.overlay)}>\n <Search />\n\n {isSkinToneInSearch ? <SkinTonePicker /> : null}\n </Flex>\n );\n}\n\nexport function Search() {\n const [inc, setInc] = useState(0);\n const closeAllOpenToggles = useCloseAllOpenToggles();\n const SearchInputRef = useSearchInputRef();\n const clearSearch = useClearSearch();\n const placeholder = useSearchPlaceHolderConfig();\n const autoFocus = useAutoFocusSearchConfig();\n const { statusSearchResults, searchTerm, onChange } = useFilter();\n\n const input = SearchInputRef?.current;\n const value = input?.value;\n\n return (\n <Relative className={cx(styles.searchContainer)}>\n <CssSearch value={value} />\n <input\n // eslint-disable-next-line jsx-a11y/no-autofocus\n autoFocus={autoFocus}\n aria-label={'Type to search for an emoji'}\n onFocus={closeAllOpenToggles}\n className={cx(styles.search)}\n type=\"text\"\n aria-controls=\"epr-search-id\"\n placeholder={placeholder}\n onChange={event => {\n setInc(inc + 1);\n setTimeout(() => {\n onChange(event?.target?.value ?? value);\n });\n }}\n ref={SearchInputRef}\n />\n {searchTerm ? (\n <div\n role=\"status\"\n className={cx('epr-status-search-results', styles.visuallyHidden)}\n aria-live=\"polite\"\n id=\"epr-search-id\"\n aria-atomic=\"true\"\n >\n {statusSearchResults}\n </div>\n ) : null}\n <div className={cx(styles.icnSearch)} />\n <Button\n className={cx(styles.btnClearSearch, 'epr-visible-on-search-only')}\n onClick={clearSearch}\n aria-label=\"Clear\"\n title=\"Clear\"\n >\n <div className={cx(styles.icnClearnSearch)} />\n </Button>\n </Relative>\n );\n}\n\nconst styles = stylesheet.create({\n overlay: {\n padding: 'var(--epr-header-padding)',\n zIndex: 'var(--epr-header-overlay-z-index)'\n },\n searchContainer: {\n '.': 'epr-search-container',\n flex: '1',\n display: 'block',\n minWidth: '0'\n },\n visuallyHidden: {\n clip: 'rect(0 0 0 0)',\n clipPath: 'inset(50%)',\n height: '1px',\n overflow: 'hidden',\n position: 'absolute',\n whiteSpace: 'nowrap',\n width: '1px'\n },\n search: {\n outline: 'none',\n transition: 'all 0.2s ease-in-out',\n color: 'var(--epr-search-input-text-color)',\n borderRadius: 'var(--epr-search-input-border-radius)',\n padding: 'var(--epr-search-input-padding)',\n height: 'var(--epr-search-input-height)',\n backgroundColor: 'var(--epr-search-input-bg-color)',\n border: '1px solid var(--epr-search-input-bg-color)',\n width: '100%',\n ':focus': {\n backgroundColor: 'var(--epr-search-input-bg-color-active)',\n border: '1px solid var(--epr-search-border-color)'\n },\n '::placeholder': {\n color: 'var(--epr-search-input-placeholder-color)'\n }\n },\n icnSearch: {\n '.': 'epr-icn-search',\n content: '',\n position: 'absolute',\n top: '50%',\n left: 'var(--epr-search-bar-inner-padding)',\n transform: 'translateY(-50%)',\n width: '20px',\n height: '20px',\n backgroundRepeat: 'no-repeat',\n backgroundPosition: '0 0',\n backgroundSize: '20px'\n },\n btnClearSearch: {\n '.': 'epr-btn-clear-search',\n position: 'absolute',\n right: 'var(--epr-search-bar-inner-padding)',\n height: '30px',\n width: '30px',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n top: '50%',\n transform: 'translateY(-50%)',\n padding: '0',\n borderRadius: '50%',\n ':hover': {\n background: 'var(--epr-hover-bg-color)'\n },\n ':focus': {\n background: 'var(--epr-hover-bg-color)'\n }\n },\n icnClearnSearch: {\n '.': 'epr-icn-clear-search',\n backgroundColor: 'transparent',\n backgroundRepeat: 'no-repeat',\n backgroundSize: '20px',\n height: '20px',\n width: '20px',\n ':hover': {\n backgroundPositionY: '-20px'\n },\n ':focus': {\n backgroundPositionY: '-20px'\n }\n },\n '.epr-dark-theme': {\n icnSearch: {\n backgroundPositionY: '-20px'\n },\n icnClearnSearch: {\n backgroundPositionY: '-40px'\n },\n btnClearSearch: {\n ':hover > .epr-icn-clear-search': {\n backgroundPositionY: '-60px'\n }\n }\n },\n '.epr-auto-theme': {\n icnSearch: {\n '@media (prefers-color-scheme: dark)': {\n backgroundPositionY: '-20px'\n }\n },\n icnClearnSearch: {\n '@media (prefers-color-scheme: dark)': {\n backgroundPositionY: '-40px'\n }\n },\n btnClearSearch: {\n '@media (prefers-color-scheme: dark)': {\n // @ts-ignore\n ':hover > .epr-icn-clear-search': {\n backgroundPositionY: '-60px'\n }\n }\n }\n }\n});\n","import * as React from 'react';\n\nimport Relative from '../Layout/Relative';\nimport { CategoryNavigation } from '../navigation/CategoryNavigation';\n\nimport { SearchContainer } from './Search';\n\nexport function Header() {\n return (\n <Relative className=\"epr-header\">\n <SearchContainer />\n <CategoryNavigation />\n </Relative>\n );\n}\n","import { NullableElement } from './selectors';\n\nexport function getActiveElement() {\n return document.activeElement as NullableElement;\n}\n","import { useCallback, useEffect, useMemo } from 'react';\n\nimport { hasNextElementSibling } from '../DomUtils/elementPositionInRow';\nimport {\n focusNextElementSibling,\n focusPrevElementSibling\n} from '../DomUtils/focusElement';\nimport { getActiveElement } from '../DomUtils/getActiveElement';\nimport {\n focusAndClickFirstVisibleEmoji,\n focusFirstVisibleEmoji,\n focusNextVisibleEmoji,\n focusPrevVisibleEmoji,\n focusVisibleEmojiOneRowDown,\n focusVisibleEmojiOneRowUp\n} from '../DomUtils/keyboardNavigation';\nimport { useScrollTo } from '../DomUtils/scrollTo';\nimport { buttonFromTarget } from '../DomUtils/selectors';\nimport {\n useBodyRef,\n useCategoryNavigationRef,\n usePickerMainRef,\n useSearchInputRef,\n useSkinTonePickerRef\n} from '../components/context/ElementRefContext';\nimport { useSkinToneFanOpenState } from '../components/context/PickerContext';\nimport { useSearchDisabledConfig } from '../config/useConfig';\n\nimport {\n useCloseAllOpenToggles,\n useHasOpenToggles\n} from './useCloseAllOpenToggles';\nimport { useDisallowMouseMove } from './useDisallowMouseMove';\nimport { useAppendSearch, useClearSearch } from './useFilter';\nimport {\n useFocusCategoryNavigation,\n useFocusSearchInput,\n useFocusSkinTonePicker\n} from './useFocus';\nimport useIsSearchMode from './useIsSearchMode';\nimport useSetVariationPicker from './useSetVariationPicker';\nimport {\n useIsSkinToneInPreview,\n useIsSkinToneInSearch\n} from './useShouldShowSkinTonePicker';\n\nenum KeyboardEvents {\n ArrowDown = 'ArrowDown',\n ArrowUp = 'ArrowUp',\n ArrowLeft = 'ArrowLeft',\n ArrowRight = 'ArrowRight',\n Escape = 'Escape',\n Enter = 'Enter',\n Space = ' '\n}\n\nexport function useKeyboardNavigation() {\n usePickerMainKeyboardEvents();\n useSearchInputKeyboardEvents();\n useSkinTonePickerKeyboardEvents();\n useCategoryNavigationKeyboardEvents();\n useBodyKeyboardEvents();\n}\n\nfunction usePickerMainKeyboardEvents() {\n const PickerMainRef = usePickerMainRef();\n const clearSearch = useClearSearch();\n const scrollTo = useScrollTo();\n const SearchInputRef = useSearchInputRef();\n const focusSearchInput = useFocusSearchInput();\n const hasOpenToggles = useHasOpenToggles();\n const disallowMouseMove = useDisallowMouseMove();\n\n const closeAllOpenToggles = useCloseAllOpenToggles();\n\n const onKeyDown = useMemo(\n () =>\n function onKeyDown(event: KeyboardEvent) {\n const { key } = event;\n\n disallowMouseMove();\n switch (key) {\n // eslint-disable-next-line no-fallthrough\n case KeyboardEvents.Escape:\n event.preventDefault();\n if (hasOpenToggles()) {\n closeAllOpenToggles();\n return;\n }\n clearSearch();\n scrollTo(0);\n focusSearchInput();\n break;\n }\n },\n [\n scrollTo,\n clearSearch,\n closeAllOpenToggles,\n focusSearchInput,\n hasOpenToggles,\n disallowMouseMove\n ]\n );\n\n useEffect(() => {\n const current = PickerMainRef.current;\n\n if (!current) {\n return;\n }\n\n current.addEventListener('keydown', onKeyDown);\n\n return () => {\n current.removeEventListener('keydown', onKeyDown);\n };\n }, [PickerMainRef, SearchInputRef, scrollTo, onKeyDown]);\n}\n\nfunction useSearchInputKeyboardEvents() {\n const focusSkinTonePicker = useFocusSkinTonePicker();\n const PickerMainRef = usePickerMainRef();\n const BodyRef = useBodyRef();\n const SearchInputRef = useSearchInputRef();\n const [, setSkinToneFanOpenState] = useSkinToneFanOpenState();\n const goDownFromSearchInput = useGoDownFromSearchInput();\n const isSkinToneInSearch = useIsSkinToneInSearch();\n\n const onKeyDown = useMemo(\n () =>\n function onKeyDown(event: KeyboardEvent) {\n const { key } = event;\n\n switch (key) {\n case KeyboardEvents.ArrowRight:\n if (!isSkinToneInSearch) {\n return;\n }\n event.preventDefault();\n setSkinToneFanOpenState(true);\n focusSkinTonePicker();\n break;\n case KeyboardEvents.ArrowDown:\n event.preventDefault();\n goDownFromSearchInput();\n break;\n case KeyboardEvents.Enter:\n event.preventDefault();\n focusAndClickFirstVisibleEmoji(BodyRef.current);\n break;\n }\n },\n [\n focusSkinTonePicker,\n goDownFromSearchInput,\n setSkinToneFanOpenState,\n BodyRef,\n isSkinToneInSearch\n ]\n );\n\n useEffect(() => {\n const current = SearchInputRef.current;\n\n if (!current) {\n return;\n }\n\n current.addEventListener('keydown', onKeyDown);\n\n return () => {\n current.removeEventListener('keydown', onKeyDown);\n };\n }, [PickerMainRef, SearchInputRef, onKeyDown]);\n}\n\nfunction useSkinTonePickerKeyboardEvents() {\n const SkinTonePickerRef = useSkinTonePickerRef();\n const focusSearchInput = useFocusSearchInput();\n const SearchInputRef = useSearchInputRef();\n const goDownFromSearchInput = useGoDownFromSearchInput();\n const [isOpen, setIsOpen] = useSkinToneFanOpenState();\n const isSkinToneInPreview = useIsSkinToneInPreview();\n const isSkinToneInSearch = useIsSkinToneInSearch();\n const onType = useOnType();\n\n const onKeyDown = useMemo(\n () =>\n // eslint-disable-next-line complexity\n function onKeyDown(event: KeyboardEvent) {\n const { key } = event;\n\n if (isSkinToneInSearch) {\n switch (key) {\n case KeyboardEvents.ArrowLeft:\n event.preventDefault();\n if (!isOpen) {\n return focusSearchInput();\n }\n focusNextSkinTone(focusSearchInput);\n break;\n case KeyboardEvents.ArrowRight:\n event.preventDefault();\n if (!isOpen) {\n return focusSearchInput();\n }\n focusPrevSkinTone();\n break;\n case KeyboardEvents.ArrowDown:\n event.preventDefault();\n if (isOpen) {\n setIsOpen(false);\n }\n goDownFromSearchInput();\n break;\n default:\n onType(event);\n break;\n }\n }\n\n if (isSkinToneInPreview) {\n switch (key) {\n case KeyboardEvents.ArrowUp:\n event.preventDefault();\n if (!isOpen) {\n return focusSearchInput();\n }\n focusNextSkinTone(focusSearchInput);\n break;\n case KeyboardEvents.ArrowDown:\n event.preventDefault();\n if (!isOpen) {\n return focusSearchInput();\n }\n focusPrevSkinTone();\n break;\n default:\n onType(event);\n break;\n }\n }\n },\n [\n isOpen,\n focusSearchInput,\n setIsOpen,\n goDownFromSearchInput,\n onType,\n isSkinToneInPreview,\n isSkinToneInSearch\n ]\n );\n\n useEffect(() => {\n const current = SkinTonePickerRef.current;\n\n if (!current) {\n return;\n }\n\n current.addEventListener('keydown', onKeyDown);\n\n return () => {\n current.removeEventListener('keydown', onKeyDown);\n };\n }, [SkinTonePickerRef, SearchInputRef, isOpen, onKeyDown]);\n}\n\nfunction useCategoryNavigationKeyboardEvents() {\n const focusSearchInput = useFocusSearchInput();\n const CategoryNavigationRef = useCategoryNavigationRef();\n const BodyRef = useBodyRef();\n const onType = useOnType();\n\n const onKeyDown = useMemo(\n () =>\n function onKeyDown(event: KeyboardEvent) {\n const { key } = event;\n\n switch (key) {\n case KeyboardEvents.ArrowUp:\n event.preventDefault();\n focusSearchInput();\n break;\n case KeyboardEvents.ArrowRight:\n event.preventDefault();\n focusNextElementSibling(getActiveElement());\n break;\n case KeyboardEvents.ArrowLeft:\n event.preventDefault();\n focusPrevElementSibling(getActiveElement());\n break;\n case KeyboardEvents.ArrowDown:\n event.preventDefault();\n focusFirstVisibleEmoji(BodyRef.current);\n break;\n default:\n onType(event);\n break;\n }\n },\n [BodyRef, focusSearchInput, onType]\n );\n\n useEffect(() => {\n const current = CategoryNavigationRef.current;\n\n if (!current) {\n return;\n }\n\n current.addEventListener('keydown', onKeyDown);\n\n return () => {\n current.removeEventListener('keydown', onKeyDown);\n };\n }, [CategoryNavigationRef, BodyRef, onKeyDown]);\n}\n\nfunction useBodyKeyboardEvents() {\n const BodyRef = useBodyRef();\n const goUpFromBody = useGoUpFromBody();\n const setVariationPicker = useSetVariationPicker();\n const hasOpenToggles = useHasOpenToggles();\n const closeAllOpenToggles = useCloseAllOpenToggles();\n\n const onType = useOnType();\n\n const onKeyDown = useMemo(\n () =>\n // eslint-disable-next-line complexity\n function onKeyDown(event: KeyboardEvent) {\n const { key } = event;\n\n const activeElement = buttonFromTarget(getActiveElement());\n\n switch (key) {\n case KeyboardEvents.ArrowRight:\n event.preventDefault();\n focusNextVisibleEmoji(activeElement);\n break;\n case KeyboardEvents.ArrowLeft:\n event.preventDefault();\n focusPrevVisibleEmoji(activeElement);\n break;\n case KeyboardEvents.ArrowDown:\n event.preventDefault();\n if (hasOpenToggles()) {\n closeAllOpenToggles();\n break;\n }\n focusVisibleEmojiOneRowDown(activeElement);\n break;\n case KeyboardEvents.ArrowUp:\n event.preventDefault();\n if (hasOpenToggles()) {\n closeAllOpenToggles();\n break;\n }\n focusVisibleEmojiOneRowUp(activeElement, goUpFromBody);\n break;\n case KeyboardEvents.Space:\n event.preventDefault();\n setVariationPicker(event.target as HTMLElement);\n break;\n default:\n onType(event);\n break;\n }\n },\n [\n goUpFromBody,\n onType,\n setVariationPicker,\n hasOpenToggles,\n closeAllOpenToggles\n ]\n );\n\n useEffect(() => {\n const current = BodyRef.current;\n\n if (!current) {\n return;\n }\n\n current.addEventListener('keydown', onKeyDown);\n\n return () => {\n current.removeEventListener('keydown', onKeyDown);\n };\n }, [BodyRef, onKeyDown]);\n}\n\nfunction useGoDownFromSearchInput() {\n const focusCategoryNavigation = useFocusCategoryNavigation();\n const isSearchMode = useIsSearchMode();\n const BodyRef = useBodyRef();\n\n return useCallback(\n function goDownFromSearchInput() {\n if (isSearchMode) {\n return focusFirstVisibleEmoji(BodyRef.current);\n }\n return focusCategoryNavigation();\n },\n [BodyRef, focusCategoryNavigation, isSearchMode]\n );\n}\n\nfunction useGoUpFromBody() {\n const focusSearchInput = useFocusSearchInput();\n const focusCategoryNavigation = useFocusCategoryNavigation();\n const isSearchMode = useIsSearchMode();\n\n return useCallback(\n function goUpFromEmoji() {\n if (isSearchMode) {\n return focusSearchInput();\n }\n return focusCategoryNavigation();\n },\n [focusSearchInput, isSearchMode, focusCategoryNavigation]\n );\n}\n\nfunction focusNextSkinTone(exitLeft: () => void) {\n const currentSkinTone = getActiveElement();\n\n if (!currentSkinTone) {\n return;\n }\n\n if (!hasNextElementSibling(currentSkinTone)) {\n exitLeft();\n }\n\n focusNextElementSibling(currentSkinTone);\n}\n\nfunction focusPrevSkinTone() {\n const currentSkinTone = getActiveElement();\n\n if (!currentSkinTone) {\n return;\n }\n\n focusPrevElementSibling(currentSkinTone);\n}\n\nfunction useOnType() {\n const appendSearch = useAppendSearch();\n const focusSearchInput = useFocusSearchInput();\n const searchDisabled = useSearchDisabledConfig();\n const closeAllOpenToggles = useCloseAllOpenToggles();\n\n return function onType(event: KeyboardEvent) {\n const { key } = event;\n\n if (hasModifier(event) || searchDisabled) {\n return;\n }\n\n if (key.match(/(^[a-zA-Z0-9]$){1}/)) {\n event.preventDefault();\n closeAllOpenToggles();\n focusSearchInput();\n appendSearch(key);\n }\n };\n}\n\nfunction hasModifier(event: KeyboardEvent): boolean {\n const { metaKey, ctrlKey, altKey } = event;\n\n return metaKey || ctrlKey || altKey;\n}\n","import { GetEmojiUrl } from '../components/emoji/BaseEmojiProps';\nimport { DataEmoji } from '../dataUtils/DataTypes';\nimport { emojiUnified, emojiVariations } from '../dataUtils/emojiSelectors';\nimport { EmojiStyle } from '../types/exposedTypes';\n\nexport function preloadEmoji(\n getEmojiUrl: GetEmojiUrl,\n emoji: undefined | DataEmoji,\n emojiStyle: EmojiStyle\n): void {\n if (!emoji) {\n return;\n }\n\n if (emojiStyle === EmojiStyle.NATIVE) {\n return;\n }\n\n const unified = emojiUnified(emoji);\n\n if (preloadedEmojs.has(unified)) {\n return;\n }\n\n emojiVariations(emoji).forEach((variation) => {\n const emojiUrl = getEmojiUrl(variation, emojiStyle);\n preloadImage(emojiUrl);\n });\n\n preloadedEmojs.add(unified);\n}\n\nexport const preloadedEmojs: Set<string> = new Set();\n\nfunction preloadImage(url: string): void {\n const image = new Image();\n image.src = url;\n}\n","import { useEffect } from 'react';\n\nimport { buttonFromTarget, emojiFromElement } from '../DomUtils/selectors';\nimport { useBodyRef } from '../components/context/ElementRefContext';\nimport { useEmojiStyleConfig, useGetEmojiUrlConfig } from '../config/useConfig';\nimport { emojiHasVariations } from '../dataUtils/emojiSelectors';\nimport { EmojiStyle } from '../types/exposedTypes';\n\nimport { preloadEmoji } from './preloadEmoji';\n\nexport function useOnFocus() {\n const BodyRef = useBodyRef();\n const emojiStyle = useEmojiStyleConfig();\n const getEmojiUrl = useGetEmojiUrlConfig();\n\n useEffect(() => {\n if (emojiStyle === EmojiStyle.NATIVE) {\n return;\n }\n\n const bodyRef = BodyRef.current;\n\n bodyRef?.addEventListener('focusin', onFocus);\n\n return () => {\n bodyRef?.removeEventListener('focusin', onFocus);\n };\n\n function onFocus(event: FocusEvent) {\n const button = buttonFromTarget(event.target as HTMLElement);\n\n if (!button) {\n return;\n }\n\n const [emoji] = emojiFromElement(button);\n\n if (!emoji) {\n return;\n }\n\n if (emojiHasVariations(emoji)) {\n preloadEmoji(getEmojiUrl, emoji, emojiStyle);\n }\n }\n }, [BodyRef, emojiStyle, getEmojiUrl]);\n}\n","import { cx } from 'flairup';\nimport * as React from 'react';\n\nimport { ClassNames } from '../../DomUtils/classNames';\nimport { stylesheet } from '../../Stylesheet/stylesheet';\nimport {\n useClassNameConfig,\n useStyleConfig,\n useThemeConfig\n} from '../../config/useConfig';\nimport useIsSearchMode from '../../hooks/useIsSearchMode';\nimport { useKeyboardNavigation } from '../../hooks/useKeyboardNavigation';\nimport { useOnFocus } from '../../hooks/useOnFocus';\nimport { Theme } from '../../types/exposedTypes';\nimport { usePickerMainRef } from '../context/ElementRefContext';\nimport { PickerContextProvider } from '../context/PickerContext';\n\ntype Props = Readonly<{\n children: React.ReactNode;\n}>;\n\nexport default function PickerMain({ children }: Props) {\n return (\n <PickerContextProvider>\n <PickerRootElement>{children}</PickerRootElement>\n </PickerContextProvider>\n );\n}\n\ntype RootProps = Readonly<{\n className?: string;\n style?: React.CSSProperties;\n children: React.ReactNode;\n}>;\n\nfunction PickerRootElement({ children }: RootProps) {\n const theme = useThemeConfig();\n const searchModeActive = useIsSearchMode();\n const PickerMainRef = usePickerMainRef();\n const className = useClassNameConfig();\n const style = useStyleConfig();\n\n useKeyboardNavigation();\n useOnFocus();\n\n return (\n <aside\n className={cx(\n styles.main,\n styles.baseVariables,\n theme === Theme.DARK && styles.darkTheme,\n theme === Theme.AUTO && styles.autoThemeDark,\n {\n [ClassNames.searchActive]: searchModeActive\n },\n className\n )}\n ref={PickerMainRef}\n style={style}\n >\n {children}\n </aside>\n );\n}\n\nconst DarkTheme = {\n '--epr-emoji-variation-picker-bg-color':\n 'var(--epr-dark-emoji-variation-picker-bg-color)',\n '--epr-highlight-color': 'var(--epr-dark-highlight-color)',\n '--epr-text-color': 'var(--epr-dark-text-color)',\n '--epr-hover-bg-color': 'var(--epr-dark-hover-bg-color)',\n '--epr-focus-bg-color': 'var(--epr-dark-focus-bg-color)',\n '--epr-search-input-bg-color': 'var(--epr-dark-search-input-bg-color)',\n '--epr-category-label-bg-color': 'var(--epr-dark-category-label-bg-color)',\n '--epr-picker-border-color': 'var(--epr-dark-picker-border-color)',\n '--epr-bg-color': 'var(--epr-dark-bg-color)',\n '--epr-search-input-bg-color-active':\n 'var(--epr-dark-search-input-bg-color-active)',\n '--epr-emoji-variation-indicator-color':\n 'var(--epr-dark-emoji-variation-indicator-color)',\n '--epr-category-icon-active-color':\n 'var(--epr-dark-category-icon-active-color)',\n '--epr-skin-tone-picker-menu-color':\n 'var(--epr-dark-skin-tone-picker-menu-color)'\n};\n\nconst styles = stylesheet.create({\n main: {\n '.': ['epr-main', ClassNames.emojiPicker],\n position: 'relative',\n display: 'flex',\n flexDirection: 'column',\n borderWidth: '1px',\n borderStyle: 'solid',\n borderRadius: 'var(--epr-picker-border-radius)',\n borderColor: 'var(--epr-picker-border-color)',\n backgroundColor: 'var(--epr-bg-color)',\n overflow: 'hidden'\n },\n baseVariables: {\n '--': {\n '--epr-highlight-color': '#007aeb',\n '--epr-hover-bg-color': '#f1f8ff',\n '--epr-focus-bg-color': '#e0f0ff',\n '--epr-text-color': '#858585',\n '--epr-search-input-bg-color': '#f6f6f6',\n '--epr-picker-border-color': '#e7e7e7',\n '--epr-bg-color': '#fff',\n '--epr-category-icon-active-color': '#6aa8de',\n '--epr-skin-tone-picker-menu-color': '#ffffff95',\n\n '--epr-horizontal-padding': '10px',\n\n '--epr-picker-border-radius': '8px',\n\n /* Header */\n '--epr-search-border-color': 'var(--epr-highlight-color)',\n '--epr-header-padding': '15px var(--epr-horizontal-padding)',\n\n /* Skin Tone Picker */\n '--epr-active-skin-tone-indicator-border-color':\n 'var(--epr-highlight-color)',\n '--epr-active-skin-hover-color': 'var(--epr-hover-bg-color)',\n\n /* Search */\n '--epr-search-input-bg-color-active': 'var(--epr-search-input-bg-color)',\n '--epr-search-input-padding': '0 30px',\n '--epr-search-input-border-radius': '8px',\n '--epr-search-input-height': '40px',\n '--epr-search-input-text-color': 'var(--epr-text-color)',\n '--epr-search-input-placeholder-color': 'var(--epr-text-color)',\n '--epr-search-bar-inner-padding': 'var(--epr-horizontal-padding)',\n\n /* Category Navigation */\n '--epr-category-navigation-button-size': '30px',\n\n /* Variation Picker */\n '--epr-emoji-variation-picker-height': '45px',\n '--epr-emoji-variation-picker-bg-color': 'var(--epr-bg-color)',\n\n /* Preview */\n '--epr-preview-height': '70px',\n '--epr-preview-text-size': '14px',\n '--epr-preview-text-padding': '0 var(--epr-horizontal-padding)',\n '--epr-preview-border-color': 'var(--epr-picker-border-color)',\n '--epr-preview-text-color': 'var(--epr-text-color)',\n\n /* Category */\n '--epr-category-padding': '0 var(--epr-horizontal-padding)',\n\n /* Category Label */\n '--epr-category-label-bg-color': '#ffffffe6',\n '--epr-category-label-text-color': 'var(--epr-text-color)',\n '--epr-category-label-padding': '0 var(--epr-horizontal-padding)',\n '--epr-category-label-height': '40px',\n\n /* Emoji */\n '--epr-emoji-size': '30px',\n '--epr-emoji-padding': '5px',\n '--epr-emoji-fullsize':\n 'calc(var(--epr-emoji-size) + var(--epr-emoji-padding) * 2)',\n '--epr-emoji-hover-color': 'var(--epr-hover-bg-color)',\n '--epr-emoji-variation-indicator-color': 'var(--epr-picker-border-color)',\n '--epr-emoji-variation-indicator-color-hover': 'var(--epr-text-color)',\n\n /* Z-Index */\n '--epr-header-overlay-z-index': '3',\n '--epr-emoji-variations-indictator-z-index': '1',\n '--epr-category-label-z-index': '2',\n '--epr-skin-variation-picker-z-index': '5',\n '--epr-preview-z-index': '6',\n\n /* Dark Theme Variables */\n '--epr-dark': '#000',\n '--epr-dark-emoji-variation-picker-bg-color': 'var(--epr-dark)',\n '--epr-dark-highlight-color': '#c0c0c0',\n '--epr-dark-text-color': 'var(--epr-highlight-color)',\n '--epr-dark-hover-bg-color': '#363636f6',\n '--epr-dark-focus-bg-color': '#474747',\n '--epr-dark-search-input-bg-color': '#333333',\n '--epr-dark-category-label-bg-color': '#222222e6',\n '--epr-dark-picker-border-color': '#151617',\n '--epr-dark-bg-color': '#222222',\n '--epr-dark-search-input-bg-color-active': 'var(--epr-dark)',\n '--epr-dark-emoji-variation-indicator-color': '#444',\n '--epr-dark-category-icon-active-color': '#3271b7',\n '--epr-dark-skin-tone-picker-menu-color': '#22222295'\n }\n },\n autoThemeDark: {\n '.': ClassNames.autoTheme,\n '@media (prefers-color-scheme: dark)': {\n '--': DarkTheme\n }\n },\n darkTheme: {\n '.': ClassNames.darkTheme,\n '--': DarkTheme\n }\n});\n","import * as React from 'react';\n\nimport { Body } from './components/body/Body';\nimport { ElementRefContextProvider } from './components/context/ElementRefContext';\nimport { PickerConfigProvider } from './components/context/PickerConfigContext';\nimport { Preview } from './components/footer/Preview';\nimport { Header } from './components/header/Header';\nimport PickerMain from './components/main/PickerMain';\n\nimport './EmojiPickerReact.css';\nimport { PickerProps } from './index';\n\nfunction EmojiPicker(props: PickerProps) {\n return (\n <ElementRefContextProvider>\n <PickerConfigProvider {...props}>\n <PickerMain>\n <Header />\n <Body />\n <Preview />\n </PickerMain>\n </PickerConfigProvider>\n </ElementRefContextProvider>\n );\n}\n\n// eslint-disable-next-line complexity\nexport default React.memo(EmojiPicker, (prev, next) => {\n const prevCustomEmojis = prev.customEmojis ?? [];\n const nextCustomEmojis = next.customEmojis ?? [];\n return (\n prev.emojiVersion === next.emojiVersion &&\n prev.searchPlaceHolder === next.searchPlaceHolder &&\n prev.searchPlaceholder === next.searchPlaceholder &&\n prev.defaultSkinTone === next.defaultSkinTone &&\n prev.skinTonesDisabled === next.skinTonesDisabled &&\n prev.autoFocusSearch === next.autoFocusSearch &&\n prev.emojiStyle === next.emojiStyle &&\n prev.theme === next.theme &&\n prev.suggestedEmojisMode === next.suggestedEmojisMode &&\n prev.lazyLoadEmojis === next.lazyLoadEmojis &&\n prev.className === next.className &&\n prev.height === next.height &&\n prev.width === next.width &&\n prev.style === next.style &&\n prev.searchDisabled === next.searchDisabled &&\n prev.skinTonePickerLocation === next.skinTonePickerLocation &&\n prevCustomEmojis.length === nextCustomEmojis.length\n );\n});\n","import * as React from 'react';\n\nexport default class ErrorBoundary extends React.Component<\n { children: React.ReactNode },\n { hasError: boolean }\n> {\n constructor(props: { children: React.ReactNode }) {\n super(props);\n this.state = { hasError: false };\n }\n\n static getDerivedStateFromError() {\n return { hasError: true };\n }\n\n componentDidCatch(error: Error, errorInfo: any) {\n // eslint-disable-next-line no-console\n console.error('Emoji Picker React failed to render:', error, errorInfo);\n }\n\n render() {\n if (this.state.hasError) {\n return null;\n }\n\n return this.props.children;\n }\n}\n","import * as React from 'react';\n\nimport { EmojiStyle } from '../../types/exposedTypes';\n\nimport { GetEmojiUrl } from './BaseEmojiProps';\nimport { ViewOnlyEmoji } from './ViewOnlyEmoji';\n\nexport function ExportedEmoji({\n unified,\n size = 32,\n emojiStyle = EmojiStyle.APPLE,\n lazyLoad = false,\n getEmojiUrl,\n emojiUrl\n}: {\n unified: string;\n emojiStyle?: EmojiStyle;\n size?: number;\n lazyLoad?: boolean;\n getEmojiUrl?: GetEmojiUrl;\n emojiUrl?: string;\n}) {\n if (!unified && !emojiUrl && !getEmojiUrl) {\n return null;\n }\n\n return (\n <ViewOnlyEmoji\n unified={unified}\n size={size}\n emojiStyle={emojiStyle}\n lazyLoad={lazyLoad}\n getEmojiUrl={emojiUrl ? () => emojiUrl : getEmojiUrl}\n />\n );\n}\n","import * as React from 'react';\n\nimport EmojiPickerReact from './EmojiPickerReact';\nimport ErrorBoundary from './components/ErrorBoundary';\nimport { PickerConfig } from './config/config';\nimport {\n MutableConfigContext,\n useDefineMutableConfig\n} from './config/mutableConfig';\n\nexport { ExportedEmoji as Emoji } from './components/emoji/ExportedEmoji';\n\nexport {\n EmojiStyle,\n SkinTones,\n Theme,\n Categories,\n EmojiClickData,\n SuggestionMode,\n SkinTonePickerLocation\n} from './types/exposedTypes';\n\nexport interface PickerProps extends PickerConfig {}\n\nexport default function EmojiPicker(props: PickerProps) {\n const MutableConfigRef = useDefineMutableConfig({\n onEmojiClick: props.onEmojiClick\n });\n\n return (\n <ErrorBoundary>\n <MutableConfigContext.Provider value={MutableConfigRef}>\n <EmojiPickerReact {...props} />\n </MutableConfigContext.Provider>\n </ErrorBoundary>\n );\n}\n"],"names":["ClassNames","asSelectors","classNames","Array","_len","_key","arguments","map","c","join","stylesheet","createSheet","commonStyles","create","hidden","display","opacity","pointerEvents","visibility","hiddenOnSearch","commonInteractionStyles","categoryBtn","backgroundPositionY","focusElement","element","requestAnimationFrame","focus","focusPrevElementSibling","prev","previousElementSibling","focusNextElementSibling","next","nextElementSibling","focusFirstElementChild","first","firstElementChild","ElementRefContextProvider","_ref","children","PickerMainRef","React","AnchoredEmojiRef","BodyRef","SearchInputRef","SkinTonePickerRef","CategoryNavigationRef","VariationPickerRef","ElementRefContext","Provider","value","useElementRef","usePickerMainRef","useAnchoredEmojiRef","useSetAnchoredEmojiRef","target","current","useBodyRef","useSearchInputRef","useSkinTonePickerRef","useCategoryNavigationRef","useVariationPickerRef","SuggestionMode","EmojiStyle","Theme","SkinTones","Categories","SkinTonePickerLocation","categoriesOrdered","SUGGESTED","CUSTOM","SMILEYS_PEOPLE","ANIMALS_NATURE","FOOD_DRINK","TRAVEL_PLACES","ACTIVITIES","OBJECTS","SYMBOLS","FLAGS","SuggestedRecent","name","category","configByCategory","_configByCategory","baseCategoriesConfig","modifiers","_extends","categoryFromCategoryConfig","categoryNameFromCategoryConfig","mergeCategoriesConfig","userCategoriesConfig","extra","suggestionMode","RECENT","base","_userCategoriesConfig","length","getBaseConfigByCategory","modifier","Object","assign","CDN_URL_APPLE","CDN_URL_FACEBOOK","CDN_URL_TWITTER","CDN_URL_GOOGLE","cdnUrl","emojiStyle","TWITTER","GOOGLE","FACEBOOK","APPLE","skinToneVariations","NEUTRAL","LIGHT","MEDIUM_LIGHT","MEDIUM","MEDIUM_DARK","DARK","skinTonesNamed","entries","reduce","acc","key","skinTonesMapped","mapped","skinTone","_Object$assign","EmojiProperties","alphaNumericEmojiIndex","setTimeout","allEmojis","searchIndex","emoji","indexEmoji","joinedNameString","emojiNames","flat","toLowerCase","replace","split","forEach","char","_alphaNumericEmojiInd","emojiUnified","_emoji$EmojiPropertie","addedIn","parseFloat","added_in","emojiName","unifiedWithoutSkinTone","unified","splat","_splat$splice","splice","emojiHasVariations","_emojiVariationUnifie","emojiVariationUnified","emojisByCategory","_emojis$category","emojis","emojiUrlByUnified","emojiVariations","_emoji$EmojiPropertie2","variations","find","variation","includes","emojiByUnified","allEmojisByUnified","withoutSkinTone","values","setCustomEmojis","customEmojis","emojiData","customToRegularEmoji","push","names","id","imgUrl","Emoji","activeVariationFromUnified","_unified$split","suspectedSkinTone","KNOWN_FAILING_EMOJIS","DEFAULT_SEARCH_PLACEHOLDER","SEARCH_RESULTS_NO_RESULTS_FOUND","SEARCH_RESULTS_SUFFIX","SEARCH_RESULTS_ONE_RESULT_FOUND","SEARCH_RESULTS_MULTIPLE_RESULTS_FOUND","mergeConfig","userConfig","basePickerConfig","previewConfig","_userConfig$previewCo","config","categories","suggestedEmojisMode","_config$customEmojis","skinTonePickerLocation","searchDisabled","PREVIEW","autoFocusSearch","className","defaultSkinTone","emojiVersion","getEmojiUrl","height","lazyLoadEmojis","basePreviewConfig","searchPlaceHolder","searchPlaceholder","SEARCH","skinTonesDisabled","style","FREQUENT","theme","unicodeToHide","Set","width","defaultEmoji","defaultCaption","showPreview","ConfigContext","PickerConfigProvider","_objectWithoutPropertiesLoose","_excluded","mergedConfig","useSetConfig","_React$useState","setMergedConfig","_mergedConfig$customE","_config$customEmojis2","usePickerConfig","MutableConfigContext","createContext","useMutableConfig","mutableConfig","useContext","useDefineMutableConfig","MutableConfigRef","useRef","onEmojiClick","emptyFunc","useEffect","useSearchPlaceHolderConfig","_usePickerConfig","_find","p","useDefaultSkinToneConfig","_usePickerConfig2","useSkinTonesDisabledConfig","_usePickerConfig3","useEmojiStyleConfig","_usePickerConfig4","useAutoFocusSearchConfig","_usePickerConfig5","useCategoriesConfig","_usePickerConfig6","useCustomEmojisConfig","_usePickerConfig7","useOnEmojiClickConfig","_useMutableConfig","usePreviewConfig","_usePickerConfig8","useThemeConfig","_usePickerConfig9","useSuggestedEmojisModeConfig","_usePickerConfig10","useLazyLoadEmojisConfig","_usePickerConfig11","useClassNameConfig","_usePickerConfig12","useStyleConfig","_usePickerConfig13","getDimension","useEmojiVersionConfig","_usePickerConfig14","useSearchDisabledConfig","_usePickerConfig15","useSkinTonePickerLocationConfig","_usePickerConfig16","useUnicodeToHide","_usePickerConfig17","useGetEmojiUrlConfig","_usePickerConfig18","dimensionConfig","useSearchResultsConfig","searchResultsCount","hasResults","isPlural","toString","useDebouncedState","initialValue","delay","_useState","useState","state","setState","timer","debouncedSetState","Promise","resolve","clearTimeout","_window","window","useIsUnicodeHidden","has","useDisallowedEmojis","DisallowedEmojisRef","emojiVersionConfig","useMemo","Number","isNaN","disallowedEmojis","addedInNewerVersion","useIsEmojiDisallowed","isUnicodeHidden","isEmojiDisallowed","Boolean","supportedLevel","useMarkInitialLoad","dispatch","PickerContextProvider","filterRef","disallowClickRef","disallowMouseRef","disallowedEmojisRef","suggestedUpdateState","Date","now","searchTerm","skinToneFanOpenState","activeSkinTone","activeCategoryState","emojisThatFailedToLoadState","emojiVariationPickerState","isPastInitialLoad","setIsPastInitialLoad","PickerContext","undefined","useFilterRef","_React$useContext","useDisallowClickRef","_React$useContext2","useDisallowMouseRef","_React$useContext3","useSearchTermState","_React$useContext4","useActiveSkinToneState","_React$useContext5","useEmojisThatFailedToLoadState","_React$useContext6","useIsPastInitialLoad","_React$useContext7","useEmojiVariationPickerState","_React$useContext8","useSkinToneFanOpenState","_React$useContext9","useUpdateSuggested","_React$useContext11","suggestedUpdated","setsuggestedUpdate","updateSuggested","useDisallowMouseMove","DisallowMouseRef","disallowMouseMove","useAllowMouseMove","allowMouseMove","useIsMouseDisallowed","isMouseDisallowed","useOnMouseMove","bodyRef","addEventListener","onMouseMove","passive","removeEventListener","elementCountInRow","parent","parentWidth","getBoundingClientRect","elementWidth","Math","floor","elementIndexInRow","elementLeft","left","parentLeft","rowNumber","elementHeight","elementTop","top","parentTop","round","hasNextRow","parentHeight","getRowElements","elements","row","elementsInRow","lastRow","firstElementIndex","lastElementIndex","slice","getNextRowElements","allElements","currentRow","nextRow","getElementInRow","indexInRow","rowElements","getElementInNextRow","index","nextRowElements","getElementInPrevRow","prevRowElements","firstVisibleElementInContainer","parentBottom","bottom","visibleElements","elementBottom","hasNextElementSibling","EmojiButtonSelector","VisibleEmojiSelector","visible","buttonFromTarget","emojiElement","_emojiElement$closest","closest","emojiFromElement","originalUnified","originalUnifiedFromEmojiElement","unifiedFromEmojiElement","isEmojiElement","matches","_element$parentElemen","parentElement","_element$clientHeight","clientHeight","emojiTrueOffsetTop","button","closestCategory","labelHeight","categoryLabelHeight","elementOffsetTop","categoryWithoutLabel","querySelector","categoryContent","_category$clientHeigh","_categoryWithoutLabel","isEmojiBehindLabel","emojiDistanceFromScrollTop","queryScrollBody","root","scrollBody","_closestScrollBody$sc","_closestScrollBody","closestScrollBody","scrollTop","_element$closest","emojiTruOffsetLeft","elementOffsetLeft","_element$offsetTop","offsetTop","_element$offsetLeft","offsetLeft","_elementDataSetKey","elementDataSetKey","_elementDataSet$key","elementDataSet","_element$dataset","dataset","isVisibleEmoji","classList","contains","isHidden","allVisibleEmojis","from","querySelectorAll","lastVisibleEmoji","_allEmojis$slice","last","prevVisibleEmoji","nextVisibleEmoji","firstVisibleEmoji","nextCategory","prevCategory","closestCategoryContent","parseNativeEmoji","hex","String","fromCodePoint","parseInt","SUGGESTED_LS_KEY","getSuggested","mode","_window$localStorage$","_window2","localStorage","recent","JSON","parse","getItem","sort","a","b","count","_unused","setSuggested","existing","u","nextList","concat","filter","i","original","min","_window3","setItem","stringify","_unused2","isCustomCategory","isCustomEmoji","useCloseAllOpenToggles","_useEmojiVariationPic","variationPicker","setVariationPicker","_useSkinToneFanOpenSt","skinToneFanOpen","setSkinToneFanOpen","closeAllOpenToggles","useCallback","useHasOpenToggles","_useEmojiVariationPic2","_useSkinToneFanOpenSt2","hasOpenToggles","useSetVariationPicker","setAnchoredEmojiRef","setEmojiVariationPicker","_emojiFromElement","useMouseDownHandlers","mouseDownTimerRef","_useActiveSkinToneSta","_useUpdateSuggested","activeEmojiStyle","onClick","event","_emojiFromEvent","emojiFromEvent","skinToneToUse","emojiClickOutput","onMouseDown","_emojiFromEvent2","onMouseUp","getImageUrl","imageUrl","isCustom","useOnScroll","onScroll","scrollTo","$eprBody","scrollBy","by","useScrollTo","scrollEmojiAboveLabel","useFocusSearchInput","useFocusSkinTonePicker","useFocusCategoryNavigation","useSetFilterRef","setFilter","setter","useClearSearch","applySearch","useApplySearch","focusSearchInput","clearSearch","useAppendSearch","appendSearch","str","getNormalizedSearchTerm","useFilter","setFilterRef","_useSearchTermState","statusSearchResults","getStatusSearchResults","onChange","inputValue","nextValue","longestMatch","findLongestMatch","filterEmojiObjectByKeyword","_useSearchTermState2","setSearchTerm","then","keyword","filtered","hasMatch","some","useIsEmojiFiltered","_useFilterRef","_useSearchTermState3","isEmojiFilteredBySearchTerm","_filter$searchTerm","dict","longestMatchingKey","keys","trim","filterState","_Object$entries","useIsEmojiHidden","_useEmojisThatFailedT","emojisThatFailedToLoad","isEmojiFiltered","failedToLoad","filteredOut","Button","props","type","cx","styles","cursor","border","background","outline","ClickableEmojiButton","_ref$showVariations","showVariations","hasVariations","_cx","position","boxSizing","alignItems","justifyContent","maxWidth","maxHeight","borderRadius","overflow","transition","backgroundColor","content","right","borderLeft","borderRight","transform","borderBottom","zIndex","emojiStyles","external","fontSize","common","alignSelf","justifySelf","EmojiImg","_ref$lazyLoad","lazyLoad","onError","src","alt","emojiImag","loading","minWidth","minHeight","padding","NativeEmoji","nativeEmoji","fontFamily","lineHeight","textAlign","letterSpacing","ViewOnlyEmoji","size","_ref$getEmojiUrl","setEmojisThatFailedToLoad","emojiToRender","NATIVE","add","ClickableEmoji","EmojiCategory","categoryConfig","categoryName","label","gridGap","gridTemplateColumns","margin","backdropFilter","color","fontWeight","textTransform","Suggested","suggestedEmojisModeConfig","suggested","_getSuggested","suggestedItem","EmojiList","renderdCategoriesCountRef","emojiList","RenderCategory","isEmojiHidden","emojisToPush","hiddenCounter","_isEmojiHidden","isDisallowed","listStyle","focusFirstVisibleEmoji","focusAndClickFirstVisibleEmoji","firstEmoji","click","focusLastVisibleEmoji","focusNextVisibleEmoji","focusPrevVisibleEmoji","focusVisibleEmojiOneRowUp","exitUp","visibleEmojiOneRowUp","focusVisibleEmojiOneRowDown","visibleEmojiOneRowDown","countInRow","prevVisibleCategory","nextVisibleCategory","itemInNextRow","Direction","EmojiVariationPicker","_useVariationPickerTo","useVariationPickerTop","getTop","getMenuDirection","getPointerStyle","usePointerStyle","pointerStyle","ref","Down","pointingUp","pointer","clientWidth","direction","Up","emojiOffsetTop","_bodyRef$scrollTop","buttonHeight","boxShadow","transformOrigin","backgroundRepeat","backgroundPosition","backgroundSize","Body","body","flex","overflowY","overflowX","useEmojiPreviewEvents","allow","setPreviewEmoji","onEscape","onMouseOver","onEnter","onLeave","e","relatedTarget","useIsSkinToneInSearch","skinTonePickerLocationConfig","useIsSkinToneInPreview","FlexDirection","Flex","_ref$style","_ref$direction","ROW","_stylesheet$create","flexDirection","COLUMN","Space","Absolute","Relative","ITEM_SIZE","SkinTonePickerMenu","SkinTonePicker","SkinTonePickerDirection","VERTICAL","HORIZONTAL","isDisabled","isOpen","setIsOpen","setActiveSkinTone","fullWidth","expandedSize","vertical","skinTones","open","flexBasis","select","skinToneVariation","active","tone","closedTone","tabIndex","Preview","isSkinToneInPreview","preview","PreviewBody","previewEmoji","variationPickerEmoji","_previewEmoji$unified","show","PreviewContent","defaultText","borderTop","categoryNameFromDom","$category","_$category$getAttribu","getAttribute","useActiveCategoryScrollDetection","setActiveCategory","visibleCategories","Map","observer","IntersectionObserver","_iterator","_createForOfIteratorHelperLoose","_step","done","entry","set","intersectionRatio","ratios","lastCategory","_i","_ratios","_ratios$_i","ratio","threshold","el","observe","useIsSearchMode","useScrollCategoryIntoView","scrollCategoryIntoView","_BodyRef$current","useShouldHideCustomEmojis","customCategoryConfig","CategoryNavigation","activeCategory","isSearchMode","categoriesConfig","hideCustomCategory","nav","role","isActiveCategory","catBtn","backgroundPositionX","SCOPE","emojiPicker","EMOJI_BUTTON","CATEGORY","CssSearch","q","genQuery","SearchContainer","isSkinToneInSearch","overlay","Search","inc","setInc","placeholder","autoFocus","_useFilter","input","searchContainer","onFocus","search","_event$target$value","_event$target","visuallyHidden","icnSearch","btnClearSearch","title","icnClearnSearch","clip","clipPath","whiteSpace","Header","getActiveElement","document","activeElement","KeyboardEvents","useKeyboardNavigation","usePickerMainKeyboardEvents","useSearchInputKeyboardEvents","useSkinTonePickerKeyboardEvents","useCategoryNavigationKeyboardEvents","useBodyKeyboardEvents","onKeyDown","Escape","preventDefault","focusSkinTonePicker","setSkinToneFanOpenState","goDownFromSearchInput","useGoDownFromSearchInput","ArrowRight","ArrowDown","Enter","onType","useOnType","ArrowLeft","focusNextSkinTone","focusPrevSkinTone","ArrowUp","goUpFromBody","useGoUpFromBody","focusCategoryNavigation","goUpFromEmoji","exitLeft","currentSkinTone","hasModifier","match","metaKey","ctrlKey","altKey","preloadEmoji","preloadedEmojs","emojiUrl","preloadImage","url","image","Image","useOnFocus","PickerMain","PickerRootElement","_ref2","searchModeActive","main","baseVariables","darkTheme","AUTO","autoThemeDark","searchActive","DarkTheme","borderWidth","borderStyle","borderColor","autoTheme","EmojiPicker","prevCustomEmojis","_prev$customEmojis","nextCustomEmojis","_next$customEmojis","ErrorBoundary","_React$Component","_inheritsLoose","_this","call","hasError","getDerivedStateFromError","_proto","prototype","componentDidCatch","error","errorInfo","console","render","ExportedEmoji","_ref$size","_ref$emojiStyle","EmojiPickerReact"],"mappings":"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;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;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"}
|