emoji-picker-react 4.21.0 → 4.21.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/emoji-picker-react.cjs.development.js +19 -2
- 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 +19 -2
- package/dist/emoji-picker-react.esm.js.map +1 -1
- package/package.json +1 -1
- package/src/hooks/useEmojiPreviewEvents.ts +17 -2
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"emoji-picker-react.esm.js","sources":["../src/DomUtils/classNames.ts","../src/Stylesheet/stylesheet.tsx","../src/config/compareConfig.ts","../src/components/Reactions/DEFAULT_REACTIONS.ts","../src/types/exposedTypes.ts","../src/config/cdnUrls.ts","../src/data/skinToneVariations.ts","../src/dataUtils/DataTypes.ts","../src/dataUtils/emojiUtils.ts","../src/config/categoryConfig.ts","../src/config/config.ts","../src/components/context/PickerConfigContext.tsx","../src/hooks/useDebouncedState.ts","../src/dataUtils/emojiSelectors.ts","../src/dataUtils/suggested.ts","../src/hooks/useIsMounted.ts","../src/components/context/PickerDataContext.tsx","../src/hooks/useHideEmojisByUniocode.ts","../src/hooks/useDisallowedEmojis.ts","../src/hooks/useInitialLoad.ts","../src/components/context/PickerContext.tsx","../src/config/mutableConfig.ts","../src/config/useConfig.ts","../src/hooks/useIsSearchMode.ts","../src/DomUtils/focusElement.ts","../src/DomUtils/getActiveElement.ts","../src/components/context/ElementRefContext.tsx","../src/DomUtils/scrollTo.ts","../src/DomUtils/keyboardNavigation.ts","../src/hooks/useCloseAllOpenToggles.ts","../src/hooks/useDisallowMouseMove.ts","../src/hooks/useFocus.ts","../src/hooks/useFilter.ts","../src/hooks/useSetVariationPicker.ts","../src/hooks/useShouldShowSkinTonePicker.ts","../src/hooks/useKeyboardNavigation.ts","../src/hooks/preloadEmoji.ts","../src/hooks/useOnFocus.ts","../src/components/main/PickerMain.tsx","../src/DomUtils/elementPositionInRow.ts","../src/DomUtils/selectors.ts","../src/dataUtils/parseNativeEmoji.ts","../src/typeRefinements/typeRefinements.ts","../src/hooks/useMouseDownHandlers.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/Reactions/BtnPlus.tsx","../src/components/Reactions/Reactions.tsx","../src/hooks/useOnScroll.ts","../src/virtualization/virtualizationHelpers.ts","../src/hooks/useCategoryHeight.ts","../src/hooks/useIsEmojiHidden.ts","../src/hooks/useEmojiVirtualization.tsx","../src/components/body/EmojiCategory.tsx","../src/hooks/useIsomorphicLayoutEffect.ts","../src/components/body/MeasureEmoji.tsx","../src/components/body/EmojiList.tsx","../src/components/body/EmojiVariationPicker.tsx","../src/components/body/Body.tsx","../src/hooks/useEmojiPreviewEvents.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/BtnSkinToneVariation.tsx","../src/components/header/SkinTonePicker/SkinTonePicker.tsx","../src/components/footer/Preview.tsx","../src/DomUtils/categoryNameFromDom.ts","../src/hooks/useActiveCategoryScrollDetection.ts","../src/hooks/useScrollCategoryIntoView.ts","../src/hooks/useShouldHideCustomEmojis.ts","../src/components/navigation/CategoryNavIcon.tsx","../src/components/navigation/CategoryButton.tsx","../src/components/navigation/CategoryNavigation.tsx","../src/components/header/Search/BtnClearSearch.tsx","../src/components/header/Search/IcnSearch.tsx","../src/components/header/Search/Search.tsx","../src/components/header/Header.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 * as React from 'react';\nimport { Styles, createSheet } from 'shipstyles';\n\nimport { ClassNames } from '../DomUtils/classNames';\n\nexport const stylesheet = createSheet('epr', null);\n\nconst hidden = {\n display: 'none',\n opacity: '0',\n pointerEvents: 'none',\n visibility: 'hidden',\n overflow: 'hidden',\n};\n\nexport const commonStyles = stylesheet.create({\n hidden: {\n '.': ClassNames.hidden,\n ...hidden,\n },\n});\n\nexport const PickerStyleTag = React.memo(function PickerStyleTag({\n nonce,\n}: {\n nonce?: string;\n}) {\n return (\n <style\n nonce={nonce}\n suppressHydrationWarning\n dangerouslySetInnerHTML={{ __html: stylesheet.getStyle() }}\n />\n );\n});\n\nexport const commonInteractionStyles = stylesheet.create({\n '.epr-main': {\n ':has(input:not(:placeholder-shown))': {\n categoryBtn: {\n ':hover': {\n opacity: '1',\n color: 'var(--epr-category-icon-active-color, #3371B7)',\n },\n },\n hiddenOnSearch: {\n '.': ClassNames.hiddenOnSearch,\n ...hidden,\n },\n },\n ':has(input:placeholder-shown)': {\n visibleOnSearchOnly: hidden,\n },\n },\n hiddenOnReactions: {\n transition: 'all 0.5s ease-in-out',\n },\n '.epr-reactions': {\n hiddenOnReactions: {\n height: '0px',\n width: '0px',\n opacity: '0',\n pointerEvents: 'none',\n overflow: 'hidden',\n },\n },\n '.EmojiPickerReact:not(.epr-search-active)': {\n categoryBtn: {\n ':hover': {\n opacity: '1',\n color: 'var(--epr-category-icon-active-color, #3371B7)',\n },\n '&.epr-active': {\n opacity: '1',\n color: 'var(--epr-category-icon-active-color, #3371B7)',\n },\n },\n visibleOnSearchOnly: {\n '.': 'epr-visible-on-search-only',\n ...hidden,\n },\n },\n});\n\nexport function darkMode(key: string, value: Styles) {\n return {\n '.epr-dark-theme': {\n [key]: value,\n },\n '.epr-auto-theme': {\n [key]: {\n '@media (prefers-color-scheme: dark)': value,\n },\n },\n };\n}\n","import { PickerConfig } from './config';\n\n// eslint-disable-next-line complexity\nexport function compareConfig(prev: PickerConfig, next: PickerConfig) {\n const prevCustomEmojis = prev.customEmojis ?? [];\n const nextCustomEmojis = next.customEmojis ?? [];\n return (\n prev.open === next.open &&\n prev.emojiVersion === next.emojiVersion &&\n prev.reactionsDefaultOpen === next.reactionsDefaultOpen &&\n prev.searchPlaceHolder === next.searchPlaceHolder &&\n prev.searchPlaceholder === next.searchPlaceholder &&\n prev.searchClearButtonLabel === next.searchClearButtonLabel &&\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 prev.emojiData === next.emojiData\n );\n}\n","export const DEFAULT_REACTIONS = [\n '1f44d', // 👍\n '2764-fe0f', // ❤️\n '1f603', // 😃\n '1f622', // 😢\n '1f64f', // 🙏\n '1f44e', // 👎\n '1f621', // 😡\n];\n","import * as React from 'react';\n\nexport 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 type CategoryConfig = {\n category: Categories;\n name: string;\n icon?: React.ReactNode;\n};\n\nexport type CategoryIcons = Partial<Record<Categories, React.ReactNode>>;\n\nexport type EmojiData = {\n categories: Partial<Record<Categories, CategoryConfig>>;\n emojis: Record<string, DataEmoji[]>;\n};\n\nexport interface DataEmoji {\n n: string[];\n u: string;\n v?: string[];\n a: string;\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 { 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<string, string> =\n skinToneVariations.reduce(\n (mapped, skinTone) =>\n Object.assign(mapped, {\n [skinTone]: skinTone,\n }),\n {},\n );\n\nexport default skinToneVariations;\n","import { Categories } from '../types/exposedTypes';\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 = Categories;\n\nexport type WithName = {\n [EmojiProperties.name]: string[];\n};\n","import { cdnUrl } from '../config/cdnUrls';\nimport { skinTonesMapped } from '../data/skinToneVariations';\nimport { EmojiStyle, SkinTones } from '../types/exposedTypes';\n\nimport { DataEmoji, EmojiProperties, WithName } from './DataTypes';\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] || '0');\n}\n\nexport function emojiName(emoji?: WithName): string {\n if (!emoji) {\n return '';\n }\n\n const names = emojiNames(emoji);\n return names[names.length - 1];\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 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 activeVariationFromUnified(unified: string): SkinTones | null {\n const [, suspectedSkinTone] = unified.split('-') as [string, SkinTones];\n return Object.keys(skinTonesMapped).includes(suspectedSkinTone)\n ? suspectedSkinTone\n : null;\n}\n","import {\n Categories,\n CategoryConfig,\n EmojiData,\n SuggestionMode,\n} 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 UserCategoryConfig = Array<Categories | CategoryConfig>;\n\nexport function mergeCategoriesConfig(\n userCategoriesConfig: UserCategoryConfig = [],\n modifiers: CategoryConfigModifiers = {},\n emojiData?: EmojiData,\n): CategoriesConfig {\n const extra = ((): Record<Categories, CategoryConfig> => {\n // 1. Start with localized categories from emojiData\n const fromData = emojiData?.categories\n ? (Object.fromEntries(\n Object.entries(emojiData.categories).filter(([, config]) => !!config),\n ) as Record<Categories, CategoryConfig>)\n : ({} as Record<Categories, CategoryConfig>);\n\n // 2. Handle \"Recently Used\" override for explicit 'recent' mode\n if (modifiers.suggestionMode === SuggestionMode.RECENT) {\n const recentConfig = (\n emojiData?.categories as Record<string, CategoryConfig | undefined>\n )?.['suggested_recent'];\n fromData[Categories.SUGGESTED] = recentConfig\n ? { category: Categories.SUGGESTED, name: recentConfig.name }\n : SuggestedRecent;\n }\n\n return fromData;\n })();\n\n const base = baseCategoriesConfig(extra);\n\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 * as React from 'react';\n\nimport { DEFAULT_REACTIONS } from '../components/Reactions/DEFAULT_REACTIONS';\nimport { GetEmojiUrl } from '../components/emoji/BaseEmojiProps';\nimport { emojiUrlByUnified } from '../dataUtils/emojiUtils';\nimport {\n CategoryIcons,\n EmojiClickData,\n EmojiData,\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 DEFAULT_SEARCH_CLEAR_BUTTON_LABEL = 'Clear';\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 // Get localized mood from emojiData, fallback to base default\n // Get localized mood from emojiData, fallback to base default\n const localizedMood = (\n userConfig.emojiData?.categories as Record<\n string,\n { name: string } | undefined\n >\n )?.preview_mood?.name;\n\n const previewConfig = {\n ...base.previewConfig,\n // Localized mood is default, but user can override\n ...(localizedMood && !userConfig.previewConfig?.defaultCaption\n ? { defaultCaption: localizedMood }\n : {}),\n ...(userConfig.previewConfig ?? {}),\n };\n\n const config = Object.assign(base, userConfig);\n\n const categories = mergeCategoriesConfig(\n userConfig.categories,\n {\n suggestionMode: config.suggestedEmojisMode,\n },\n userConfig.emojiData,\n );\n\n config.hiddenEmojis.forEach((emoji) => {\n config.unicodeToHide.add(emoji);\n });\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 searchClearButtonLabel: DEFAULT_SEARCH_CLEAR_BUTTON_LABEL,\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 reactionsDefaultOpen: false,\n reactions: DEFAULT_REACTIONS,\n open: true,\n allowExpandReactions: true,\n hiddenEmojis: [],\n emojiData: undefined,\n categoryIcons: {},\n nonce: undefined,\n };\n}\n\nexport type PickerConfigInternal = {\n emojiVersion: string | null;\n searchPlaceHolder: string;\n searchPlaceholder: string;\n searchClearButtonLabel: 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 reactionsDefaultOpen: boolean;\n reactions: string[];\n open: boolean;\n allowExpandReactions: boolean;\n hiddenEmojis: string[];\n emojiData?: EmojiData;\n categoryIcons: CategoryIcons;\n nonce?: string;\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: MouseDownEvent;\n onReactionClick: MouseDownEvent;\n onSkinToneChange: OnSkinToneChange;\n} & Omit<PickerConfigInternal, 'previewConfig' | 'unicodeToHide'>;\n\nexport type PickerConfig = Partial<ConfigExternal>;\n\nexport type PickerDimensions = string | number;\n\nexport type MouseDownEvent = (\n emoji: EmojiClickData,\n event: MouseEvent,\n api?: OnEmojiClickApi,\n) => void;\nexport type OnSkinToneChange = (emoji: SkinTones) => void;\n\ntype OnEmojiClickApi = {\n collapseToReactions: () => void;\n};\n","import * as React from 'react';\n\nimport { compareConfig } from '../../config/compareConfig';\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 =\n React.createContext<PickerConfigInternal>(basePickerConfig());\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 (compareConfig(mergedConfig, config)) {\n return;\n }\n setMergedConfig(mergeConfig(config));\n // not gonna...\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [\n config.customEmojis?.length,\n config.open,\n config.emojiVersion,\n config.reactionsDefaultOpen,\n config.searchPlaceHolder,\n config.searchPlaceholder,\n config.searchClearButtonLabel,\n config.defaultSkinTone,\n config.skinTonesDisabled,\n config.autoFocusSearch,\n config.emojiStyle,\n config.theme,\n config.suggestedEmojisMode,\n config.lazyLoadEmojis,\n config.className,\n config.height,\n config.width,\n config.searchDisabled,\n config.skinTonePickerLocation,\n config.allowExpandReactions,\n config.emojiData,\n ]);\n\n return mergedConfig;\n}\n\nexport function usePickerConfig() {\n return React.useContext(ConfigContext);\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<ReturnType<typeof setTimeout> | 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 = setTimeout(() => {\n setState(value);\n resolve(value);\n }, delay);\n });\n }\n\n return [state, debouncedSetState];\n}\n","// Pure data helpers plus the legacy global registry. This module intentionally\n// imports no React components, hooks, or context providers so it can never\n// form an import cycle with them. Context-aware lookups live in\n// components/context/PickerDataContext instead.\nimport { 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 const names = emojiNames(emoji);\n return names[names.length - 1];\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\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.emojis).flat();\n\nexport function setCustomEmojis(customEmojis: CustomEmoji[]): void {\n emojis.emojis[Categories.CUSTOM].length = 0;\n\n customEmojis.forEach((emoji) => {\n const emojiData = customToRegularEmoji(emoji);\n\n emojis.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\nallEmojis.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\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 { SkinTones, SuggestionMode } from '../types/exposedTypes';\n\nimport { DataEmoji } from './DataTypes';\nimport { emojiUnified } from './emojiUtils';\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 (typeof window === 'undefined' || !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 if (typeof window === 'undefined') {\n return;\n }\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 * as React from 'react';\n\nexport function useIsMounted() {\n const [isMounted, setIsMounted] = React.useState(false);\n\n React.useEffect(() => {\n setIsMounted(true);\n }, []);\n\n return isMounted;\n}\n","import React from 'react';\n\nimport { CustomEmoji } from '../../config/customEmojiConfig';\nimport { useSuggestedEmojisModeConfig } from '../../config/useConfig';\nimport defaultEmojiData from '../../data/emojis';\nimport {\n DataEmoji,\n DataEmojis,\n EmojiProperties,\n EmojiProperties as Keys,\n} from '../../dataUtils/DataTypes';\nimport { emojiByUnified } from '../../dataUtils/emojiSelectors';\nimport {\n activeVariationFromUnified,\n unifiedWithoutSkinTone,\n} from '../../dataUtils/emojiUtils';\nimport { getSuggested } from '../../dataUtils/suggested';\nimport { useIsMounted } from '../../hooks/useIsMounted';\nimport { Categories, EmojiData, SkinTones } from '../../types/exposedTypes';\n\nimport { usePickerConfig } from './PickerConfigContext';\nimport { useUpdateSuggested } from './PickerContext';\n\nexport interface PickerDataContextValue {\n emojiData: EmojiData;\n allEmojis: DataEmojis;\n allEmojisByUnified: Record<string, DataEmoji>;\n searchIndex: Record<string, Record<string, DataEmoji>>;\n emojiByUnified: (unified?: string) => DataEmoji | undefined;\n activeVariationFromUnified: (unified: string) => SkinTones | null;\n}\n\nconst PickerDataContext = React.createContext<PickerDataContextValue>({\n emojiData: {} as EmojiData,\n allEmojis: [],\n allEmojisByUnified: {},\n searchIndex: {},\n emojiByUnified,\n activeVariationFromUnified: () => null,\n});\n\nexport function PickerDataProvider({\n children,\n}: {\n children: React.ReactNode;\n}) {\n const { customEmojis, emojiData: genericEmojiData } = usePickerConfig();\n\n const data = React.useMemo(() => {\n const emojiData = genericEmojiData || (defaultEmojiData as EmojiData);\n\n // Clone to avoid mutation of shared source\n const newData: EmojiData = JSON.parse(JSON.stringify(emojiData));\n\n if (customEmojis && customEmojis.length > 0) {\n newData.emojis[Categories.CUSTOM] =\n customEmojis.map(customToRegularEmoji);\n }\n\n const emojis = newData.emojis || {};\n\n const allEmojis: DataEmojis = Object.values(emojis).flat();\n const allEmojisByUnified: Record<string, DataEmoji> = {};\n const searchIndex: Record<string, Record<string, DataEmoji>> = {};\n\n allEmojis.forEach((emoji) => {\n const unified = emoji[Keys.unified];\n allEmojisByUnified[unified] = emoji;\n\n if (emoji[Keys.variations]) {\n emoji[Keys.variations]?.forEach((variation) => {\n allEmojisByUnified[variation] = emoji;\n });\n }\n\n // Index for search\n // Re-implement indexEmoji logic here to be local\n const joinedNameString = (emoji[Keys.name] || [])\n .join('')\n .toLowerCase()\n .split('');\n\n joinedNameString.forEach((char: string) => {\n searchIndex[char] = searchIndex[char] ?? {};\n searchIndex[char][unified] = emoji;\n });\n });\n\n return {\n emojiData: newData,\n allEmojis,\n allEmojisByUnified,\n searchIndex,\n };\n }, [genericEmojiData, customEmojis]);\n\n const emojiByUnified = React.useCallback(\n (unified?: string): DataEmoji | undefined => {\n if (!unified) return undefined;\n\n const result =\n data.allEmojisByUnified[unified] ??\n data.allEmojisByUnified[unifiedWithoutSkinTone(unified)];\n return result;\n },\n [data.allEmojisByUnified],\n );\n\n return (\n <PickerDataContext.Provider\n value={{\n ...data,\n emojiByUnified,\n activeVariationFromUnified,\n }}\n >\n {children}\n </PickerDataContext.Provider>\n );\n}\n\nexport function usePickerDataContext() {\n return React.useContext(PickerDataContext);\n}\n\nexport function useGetEmojisByCategory() {\n const { emojiData, emojiByUnified } = usePickerDataContext();\n const suggestedEmojisModeConfig = useSuggestedEmojisModeConfig();\n const [suggestedUpdated] = useUpdateSuggested();\n // Suggestions come from localStorage, which doesn't exist during SSR.\n // Read them only after mount so the first client render matches the server.\n const isMounted = useIsMounted();\n\n const suggested = React.useMemo(() => {\n if (!isMounted) {\n return [] as DataEmojis;\n }\n\n const suggested = getSuggested(suggestedEmojisModeConfig) ?? [];\n\n return suggested\n .map((s) => {\n const emoji = emojiByUnified(s.unified);\n if (!emoji) return undefined;\n return {\n ...emoji,\n [Keys.unified]: s.unified,\n };\n })\n .filter(Boolean) as DataEmojis;\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [isMounted, suggestedUpdated, suggestedEmojisModeConfig, emojiByUnified]);\n\n return function getEmojisByCategory(category: Categories): DataEmojis {\n if (category === Categories.SUGGESTED) {\n return suggested;\n }\n\n return emojiData.emojis?.[category] ?? [];\n };\n}\n\nfunction customToRegularEmoji(emoji: CustomEmoji): DataEmoji {\n return {\n [EmojiProperties.name]: emoji.names.map((name: string) =>\n name.toLowerCase(),\n ),\n [EmojiProperties.unified]: emoji.id.toLowerCase(),\n [EmojiProperties.added_in]: '0',\n [EmojiProperties.imgUrl]: emoji.imgUrl,\n };\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 { usePickerDataContext } from '../components/context/PickerDataContext';\nimport { useEmojiVersionConfig } from '../config/useConfig';\nimport { DataEmoji } from '../dataUtils/DataTypes';\nimport {\n addedIn,\n emojiUnified,\n unifiedWithoutSkinTone,\n} from '../dataUtils/emojiUtils';\n\nimport { useIsUnicodeHidden } from './useHideEmojisByUniocode';\n\nexport function useDisallowedEmojis() {\n const DisallowedEmojisRef = useRef<Record<string, boolean>>({});\n const emojiVersionConfig = useEmojiVersionConfig();\n const { allEmojis } = usePickerDataContext();\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, allEmojis]);\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 {\n useDefaultSkinToneConfig,\n useReactionsOpenConfig,\n} from '../../config/useConfig';\nimport { DataEmoji } from '../../dataUtils/DataTypes';\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\nimport { usePickerDataContext } from './PickerDataContext';\n\nexport function PickerContextProvider({ children }: Props) {\n const disallowedEmojis = useDisallowedEmojis();\n const defaultSkinTone = useDefaultSkinToneConfig();\n const reactionsDefaultOpen = useReactionsOpenConfig();\n const { searchIndex } = usePickerDataContext();\n\n // Initialize the filter with the inititial dictionary\n const filterRef = React.useRef<FilterState>(searchIndex);\n\n React.useEffect(() => {\n filterRef.current = searchIndex;\n }, [searchIndex]);\n const disallowClickRef = React.useRef<boolean>(false);\n const disallowMouseRef = React.useRef<boolean>(false);\n const disallowedEmojisRef =\n React.useRef<Record<string, boolean>>(disallowedEmojis);\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 reactionsModeState = useState(reactionsDefaultOpen);\n const [isPastInitialLoad, setIsPastInitialLoad] = useState(false);\n const visibleCategoriesState = useState<string[]>([]);\n const emojiSizeState = useState<number | null>(null);\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 reactionsModeState,\n visibleCategoriesState,\n emojiSizeState,\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 reactionsModeState: ReactState<boolean>;\n visibleCategoriesState: ReactState<Array<string>>;\n emojiSizeState: ReactState<number | null>;\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 reactionsModeState: [false, () => {}],\n visibleCategoriesState: [[], () => []],\n emojiSizeState: [null, () => {}],\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 useReactionsModeState() {\n const { reactionsModeState } = React.useContext(PickerContext);\n return reactionsModeState;\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 useVisibleCategoriesState() {\n const { visibleCategoriesState } = React.useContext(PickerContext);\n return visibleCategoriesState;\n}\n\nexport function useEmojiSizeState() {\n const { emojiSizeState } = React.useContext(PickerContext);\n return emojiSizeState;\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 React from 'react';\n\nimport { MouseDownEvent, OnSkinToneChange } from './config';\n\nexport type MutableConfig = {\n onEmojiClick?: MouseDownEvent;\n onReactionClick?: MouseDownEvent;\n onSkinToneChange?: OnSkinToneChange;\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 onReactionClick: config.onReactionClick || config.onEmojiClick,\n onSkinToneChange: config.onSkinToneChange || emptyFunc,\n });\n\n React.useEffect(() => {\n MutableConfigRef.current.onEmojiClick = config.onEmojiClick || emptyFunc;\n MutableConfigRef.current.onReactionClick =\n config.onReactionClick || config.onEmojiClick;\n }, [config.onEmojiClick, config.onReactionClick]);\n\n React.useEffect(() => {\n MutableConfigRef.current.onSkinToneChange =\n config.onSkinToneChange || emptyFunc;\n }, [config.onSkinToneChange]);\n\n return MutableConfigRef;\n}\n\nfunction emptyFunc() {}\n","import * as React from 'react';\n\nimport { usePickerConfig } from '../components/context/PickerConfigContext';\nimport { useReactionsModeState } from '../components/context/PickerContext';\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 DEFAULT_SEARCH_CLEAR_BUTTON_LABEL,\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 enum MOUSE_EVENT_SOURCE {\n REACTIONS = 'reactions',\n PICKER = 'picker',\n}\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 useSearchClearButtonLabelConfig(): string {\n const { searchClearButtonLabel } = usePickerConfig();\n return searchClearButtonLabel ?? DEFAULT_SEARCH_CLEAR_BUTTON_LABEL;\n}\n\nexport function useDefaultSkinToneConfig(): SkinTones {\n const { defaultSkinTone } = usePickerConfig();\n return defaultSkinTone;\n}\n\nexport function useAllowExpandReactions(): boolean {\n const { allowExpandReactions } = usePickerConfig();\n return allowExpandReactions;\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 useCategoryIconsConfig() {\n const { categoryIcons } = usePickerConfig();\n return categoryIcons;\n}\n\nexport function useCustomEmojisConfig(): CustomEmoji[] {\n const { customEmojis } = usePickerConfig();\n return customEmojis;\n}\n\nexport function useOpenConfig(): boolean {\n const { open } = usePickerConfig();\n return open;\n}\n\nexport function useOnEmojiClickConfig(\n mouseEventSource: MOUSE_EVENT_SOURCE,\n): (emoji: EmojiClickData, event: MouseEvent) => void {\n const { current } = useMutableConfig();\n const [, setReactionsOpen] = useReactionsModeState();\n\n const handler = current.onEmojiClick || (() => {});\n const { onReactionClick } = current;\n\n if (mouseEventSource === MOUSE_EVENT_SOURCE.REACTIONS && onReactionClick) {\n return (...args) =>\n onReactionClick(...args, {\n collapseToReactions: () => {\n setReactionsOpen((o) => o);\n },\n });\n }\n\n return (...args) => {\n handler(...args, {\n collapseToReactions: () => {\n setReactionsOpen(true);\n },\n });\n };\n}\n\nexport function useOnSkinToneChangeConfig(): (skinTone: SkinTones) => void {\n const { current } = useMutableConfig();\n\n return current.onSkinToneChange || (() => {});\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 useReactionsOpenConfig(): boolean {\n const { reactionsDefaultOpen } = usePickerConfig();\n return reactionsDefaultOpen;\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 useReactionsConfig(): string[] {\n const { reactions } = usePickerConfig();\n return reactions;\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 '%n',\n searchResultsCount.toString(),\n )\n : SEARCH_RESULTS_ONE_RESULT_FOUND;\n }\n\n return SEARCH_RESULTS_NO_RESULTS_FOUND;\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 { NullableElement } from './selectors';\n\nexport function focusElement(\n element: NullableElement,\n shouldFocus?: () => boolean,\n) {\n if (!element) {\n return;\n }\n\n requestAnimationFrame(() => {\n // Rechecked here rather than at call time: focus may have moved in the\n // meantime (e.g. hover scheduled focus, then the user tabbed out).\n if (shouldFocus && !shouldFocus()) {\n return;\n }\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 focusElement(first);\n}\n","import { NullableElement } from './selectors';\n\nexport function getActiveElement() {\n return document.activeElement as NullableElement;\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 EmojiListRef = React.useRef<HTMLUListElement>(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 const ReactionsRef = React.useRef<HTMLUListElement>(null);\n\n return (\n <ElementRefContext.Provider\n value={{\n AnchoredEmojiRef,\n BodyRef,\n EmojiListRef,\n CategoryNavigationRef,\n PickerMainRef,\n SearchInputRef,\n SkinTonePickerRef,\n VariationPickerRef,\n ReactionsRef,\n }}\n >\n {children}\n </ElementRefContext.Provider>\n );\n}\n\nexport type ElementRef<E extends HTMLElement = HTMLElement> =\n React.MutableRefObject<E | null>;\n\ntype ElementRefs = {\n PickerMainRef: ElementRef;\n AnchoredEmojiRef: ElementRef;\n EmojiListRef: ElementRef<HTMLUListElement>;\n SkinTonePickerRef: ElementRef<HTMLDivElement>;\n SearchInputRef: ElementRef<HTMLInputElement>;\n BodyRef: ElementRef<HTMLDivElement>;\n CategoryNavigationRef: ElementRef<HTMLDivElement>;\n VariationPickerRef: ElementRef<HTMLDivElement>;\n ReactionsRef: ElementRef<HTMLUListElement>;\n};\n\nconst ElementRefContext = React.createContext<ElementRefs>({\n AnchoredEmojiRef: React.createRef(),\n BodyRef: React.createRef(),\n CategoryNavigationRef: React.createRef(),\n EmojiListRef: React.createRef(),\n PickerMainRef: React.createRef(),\n SearchInputRef: React.createRef(),\n SkinTonePickerRef: React.createRef(),\n VariationPickerRef: React.createRef(),\n ReactionsRef: React.createRef(),\n});\n\nfunction useElementRef() {\n return React.useContext(ElementRefContext);\n}\n\nexport function useEmojiListRef() {\n return useElementRef()['EmojiListRef'];\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 useReactionsRef() {\n return useElementRef()['ReactionsRef'];\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","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;\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 { elementCountInRow } 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 countInRow = elementCountInRow(categoryContent, element);\n\n const emojisInCurrentCategory = allVisibleEmojis(category);\n const currentEmojiIndex = emojisInCurrentCategory.indexOf(element);\n const indexInRow = currentEmojiIndex % countInRow;\n\n if (currentEmojiIndex === -1) {\n return null;\n }\n\n if (emojisInCurrentCategory[currentEmojiIndex - countInRow]) {\n return emojisInCurrentCategory[currentEmojiIndex - countInRow];\n }\n\n const prevVisibleCategory = prevCategory(category);\n\n if (!prevVisibleCategory) {\n return null;\n }\n\n const allPrevEmojis = allVisibleEmojis(prevVisibleCategory);\n\n // if there is an emoji in the same index of `indexInRow` in the previous category, return it\n // for this we need to find the last emoji in the previous category that shares the same indexInRow\n // this is by using the % operator to find the last emoji that matches\n\n const lastIndexInRow = (allPrevEmojis.length % countInRow) - 1;\n\n if (indexInRow > lastIndexInRow) {\n return allPrevEmojis.at(-1);\n }\n\n // otherwise, return the last emoji that shares the same indexInRow\n\n for (let i = allPrevEmojis.length - 1; i >= 0; i--) {\n if (i % countInRow === indexInRow) {\n return allPrevEmojis[i];\n }\n }\n\n return allPrevEmojis.at(-1);\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 countInRow = elementCountInRow(categoryContent, element);\n\n const emojisInCurrentCategory = allVisibleEmojis(category);\n const currentEmojiIndex = emojisInCurrentCategory.indexOf(element);\n\n if (currentEmojiIndex === -1) {\n return null;\n }\n\n // the remainder until the end of the row\n const remainder = countInRow - (currentEmojiIndex % countInRow) - 1;\n const firstInNextRow = currentEmojiIndex + remainder + 1;\n\n if (emojisInCurrentCategory[firstInNextRow]) {\n // if we have a next row, search in the next row for the last available emoji\n for (let p = currentEmojiIndex + countInRow; p % countInRow >= 0; p--) {\n if (emojisInCurrentCategory[p]) {\n return emojisInCurrentCategory[p];\n }\n }\n }\n\n const indexInRow = currentEmojiIndex % countInRow;\n\n const nextVisibleCategory = nextCategory(category);\n const emojisInNextCategory = allVisibleEmojis(nextVisibleCategory);\n\n if (emojisInNextCategory[indexInRow]) {\n return emojisInNextCategory[indexInRow];\n }\n\n return emojisInNextCategory.at(0) ?? null;\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 { 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 { 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/emojiUtils';\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\nexport function 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\nexport function 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\nexport function 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 {\n allUnifiedFromEmojiElement,\n NullableElement,\n} from '../DomUtils/selectors';\nimport { useSetAnchoredEmojiRef } from '../components/context/ElementRefContext';\nimport { useEmojiVariationPickerState } from '../components/context/PickerContext';\nimport { usePickerDataContext } from '../components/context/PickerDataContext';\n\nexport default function useSetVariationPicker() {\n const setAnchoredEmojiRef = useSetAnchoredEmojiRef();\n const [, setEmojiVariationPicker] = useEmojiVariationPickerState();\n // Context-aware lookup: respects the `emojiData` prop (e.g. translations).\n // The legacy global lookup only knows the default English dataset.\n // https://github.com/ealush/emoji-picker-react/issues/503\n const { emojiByUnified } = usePickerDataContext();\n\n return function setVariationPicker(element: NullableElement) {\n const { unified, originalUnified } = allUnifiedFromEmojiElement(element);\n const resolvedUnified = unified ?? originalUnified;\n\n if (!resolvedUnified) {\n return;\n }\n\n const emoji = emojiByUnified(resolvedUnified);\n\n if (emoji) {\n setAnchoredEmojiRef(element);\n setEmojiVariationPicker(emoji);\n }\n };\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 { useCallback, useEffect, useMemo } from 'react';\n\nimport { hasNextElementSibling } from '../DomUtils/elementPositionInRow';\nimport {\n focusElement,\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 useReactionsRef,\n useSearchInputRef,\n useSkinTonePickerRef,\n} from '../components/context/ElementRefContext';\nimport {\n useReactionsModeState,\n useSkinToneFanOpenState,\n} 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 useReactionsKeyboardEvents();\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\n// Arrow keys move between reaction buttons (and the expand button)\n// while the reactions bar has focus. The bar lives outside the scroll\n// body, so the body handler never sees these events.\n// https://github.com/ealush/emoji-picker-react/issues/411\nfunction useReactionsKeyboardEvents() {\n const ReactionsRef = useReactionsRef();\n // The reactions bar mounts late when the user collapses the full\n // picker, so the listener effect must rerun when it opens.\n const [reactionsOpen] = useReactionsModeState();\n\n const onKeyDown = useMemo(\n () =>\n function onKeyDown(event: KeyboardEvent) {\n const { key } = event;\n const current = ReactionsRef.current;\n\n if (!current) {\n return;\n }\n\n const delta = reactionFocusDelta(key);\n\n if (delta !== 0 && focusReactionSibling(current, delta)) {\n event.preventDefault();\n }\n },\n // reactionsOpen: the bar mounts late on collapse, and the new\n // callback identity reinstalls the listener effect below.\n [ReactionsRef, reactionsOpen],\n );\n\n useEffect(() => {\n const current = ReactionsRef.current;\n\n if (!current) {\n return;\n }\n\n current.addEventListener('keydown', onKeyDown);\n\n return () => {\n current.removeEventListener('keydown', onKeyDown);\n };\n }, [ReactionsRef, onKeyDown]);\n}\n\nfunction reactionFocusDelta(key: string): number {\n switch (key) {\n case KeyboardEvents.ArrowRight:\n case KeyboardEvents.ArrowDown:\n return 1;\n case KeyboardEvents.ArrowLeft:\n case KeyboardEvents.ArrowUp:\n return -1;\n default:\n return 0;\n }\n}\n\nfunction focusReactionSibling(root: HTMLElement, delta: number): boolean {\n const buttons = Array.from(root.querySelectorAll('button'));\n const activeIndex = buttons.indexOf(\n getActiveElement() as HTMLButtonElement,\n );\n const sibling = activeIndex === -1 ? null : buttons[activeIndex + delta];\n\n if (!sibling) {\n return false;\n }\n\n focusElement(sibling);\n return true;\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/emojiUtils';\nimport { EmojiStyle } from '../types/exposedTypes';\nimport { Dimensions } from '../virtualization/virtualizationHelpers';\n\n// eslint-disable-next-line max-params\nexport function preloadEmojiIfNeeded(\n emoji: undefined | DataEmoji,\n emojiStyles: EmojiStyle,\n scrollTop: number,\n clientHeight: number,\n topOffset: number,\n style: { top: number } | undefined,\n dimensions: Dimensions,\n getEmojiUrl: GetEmojiUrl,\n): void {\n if (!emoji) {\n return;\n }\n\n if (emojiStyles === EmojiStyle.NATIVE) {\n return;\n }\n\n const unified = emojiUnified(emoji);\n\n if (preloadedEmojs.has(unified)) {\n return;\n }\n\n // preload only if the emoji is a few rows below the viewport\n if (!style || !dimensions) {\n return;\n }\n\n setTimeout(() => {\n const emojiTop = topOffset + style.top;\n const viewportBottom = scrollTop + clientHeight;\n\n const isJustBelowViewport =\n emojiTop >= viewportBottom &&\n emojiTop < viewportBottom + dimensions.emojiSize * 2;\n\n if (isJustBelowViewport) {\n preloadEmoji(getEmojiUrl, emoji, emojiStyles);\n }\n });\n}\n\nexport function preloadEmoji(\n getEmojiUrl: GetEmojiUrl,\n emoji: undefined | DataEmoji,\n emojiStyle: EmojiStyle,\n): void {\n if (!emoji) {\n return;\n }\n\n const unified = emojiUnified(emoji);\n\n if (preloadedEmojs.has(unified)) {\n return;\n }\n preloadedEmojs.add(unified);\n\n emojiVariations(emoji)\n .concat(unified)\n .forEach((variation) => {\n const emojiUrl = getEmojiUrl(variation, emojiStyle);\n preloadImage(emojiUrl);\n });\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/emojiUtils';\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 * as React from 'react';\nimport { cx } from 'shipstyles';\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 {\n PickerContextProvider,\n useReactionsModeState,\n} from '../context/PickerContext';\n\ntype Props = Readonly<{\n children: React.ReactNode;\n}>;\n\nexport const DEFAULT_LABEL_HEIGHT = 40;\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 [reactionsMode] = useReactionsModeState();\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 const { width, height, ...styleProps } = style || {};\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 reactionsMode && styles.reactionsMenu,\n className,\n )}\n ref={PickerMainRef}\n style={{\n ...styleProps,\n ...(!reactionsMode && { height, width }),\n }}\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-hover-bg-color-reduced-opacity':\n 'var(--epr-dark-hover-bg-color-reduced-opacity)',\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-reactions-bg-color': 'var(--epr-dark-reactions-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-category-icon-inactive-color':\n 'var(--epr-dark-category-icon-inactive-color)',\n '--epr-skin-tone-picker-menu-color':\n 'var(--epr-dark-skin-tone-picker-menu-color)',\n '--epr-skin-tone-outer-border-color':\n 'var(--epr-dark-skin-tone-outer-border-color)',\n '--epr-skin-tone-inner-border-color':\n 'var(--epr-dark-skin-tone-inner-border-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 transition: 'height 0.3s ease-in-out, background-color 0.1s ease-in-out',\n '*': {\n boxSizing: 'border-box',\n fontFamily: 'sans-serif',\n },\n },\n baseVariables: {\n '--': {\n '--epr-highlight-color': '#007aeb',\n '--epr-hover-bg-color': '#e5f0fa',\n '--epr-hover-bg-color-reduced-opacity': '#e5f0fa80',\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-reactions-bg-color': '#ffffff90',\n '--epr-category-icon-active-color': '#3371B7',\n '--epr-category-icon-inactive-color': '#868686',\n '--epr-skin-tone-picker-menu-color': '#ffffff95',\n '--epr-skin-tone-outer-border-color': '#555555',\n '--epr-skin-tone-inner-border-color': 'var(--epr-bg-color)',\n\n '--epr-horizontal-padding': '10px',\n\n '--epr-picker-border-radius': '8px',\n\n /* Header */\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 '--epr-search-border-color': 'var(--epr-search-input-bg-color)',\n '--epr-search-border-color-active': 'var(--epr-highlight-color)',\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': `${DEFAULT_LABEL_HEIGHT}px`,\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-hover-bg-color-reduced-opacity': '#36363680',\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-reactions-bg-color': '#22222290',\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': '#6AA9DD',\n '--epr-dark-category-icon-inactive-color': '#C0C0BF',\n '--epr-dark-skin-tone-picker-menu-color': '#22222295',\n '--epr-dark-skin-tone-outer-border-color':\n 'var(--epr-dark-picker-border-color)',\n '--epr-dark-skin-tone-inner-border-color': '#00000000',\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 reactionsMenu: {\n '.': 'epr-reactions',\n height: '50px',\n display: 'inline-flex',\n backgroundColor: 'var(--epr-reactions-bg-color)',\n // @ts-ignore - backdropFilter is not recognized.\n backdropFilter: 'blur(8px)',\n '--': {\n '--epr-picker-border-radius': '50px',\n },\n },\n});\n","import { DEFAULT_LABEL_HEIGHT } from '../components/main/PickerMain';\n\nimport { ClassNames, asSelectors } from './classNames';\nimport { 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 // The virtualized layout positions emojis with a fixed per-row count that\n // is rendered onto the category content element. That count is the single\n // source of truth: deriving it again from fractional rect widths can be\n // off by one (e.g. category padding shrinking the content box), which\n // makes arrow-up/arrow-down drift sideways by a column.\n // https://github.com/ealush/emoji-picker-react/issues/502\n const declared = Number(parent.dataset?.emojisPerRow);\n if (Number.isInteger(declared) && declared > 0) {\n return declared;\n }\n\n const parentWidth = parent.getBoundingClientRect().width;\n const elementWidth = element.getBoundingClientRect().width;\n return Math.floor(parentWidth / elementWidth);\n}\n\nexport function firstVisibleElementInContainer(\n parent: NullableElement,\n elements: HTMLElement[],\n maxVisibilityDiffThreshold = 0,\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 const parentTopWithLabel = parentTop + getLabelHeight(parent);\n\n const visibleElements = elements.find((element) => {\n const elementTop = element.getBoundingClientRect().top;\n const elementBottom = element.getBoundingClientRect().bottom;\n const maxVisibilityDiffPixels =\n element.clientHeight * maxVisibilityDiffThreshold;\n\n const elementTopWithAllowedDiff = elementTop + maxVisibilityDiffPixels;\n const elementBottomWithAllowedDiff =\n elementBottom - maxVisibilityDiffPixels;\n\n if (elementTopWithAllowedDiff < parentTopWithLabel) {\n return false;\n }\n\n return (\n (elementTopWithAllowedDiff >= parentTop &&\n elementTopWithAllowedDiff <= parentBottom) ||\n (elementBottomWithAllowedDiff >= parentTop &&\n elementBottomWithAllowedDiff <= parentBottom)\n );\n });\n\n return visibleElements || null;\n}\n\nexport function hasNextElementSibling(element: HTMLElement) {\n return !!element.nextElementSibling;\n}\n\nexport function getLabelHeight(parentNode: NullableElement) {\n if (!parentNode) {\n return DEFAULT_LABEL_HEIGHT;\n }\n\n const label = parentNode.querySelector(asSelectors(ClassNames.label));\n\n if (label) {\n const height = label.getBoundingClientRect().height;\n if (height > 0) {\n return height;\n }\n }\n\n // fallback to default\n return DEFAULT_LABEL_HEIGHT;\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\nexport function allUnifiedFromEmojiElement(emoji: NullableElement): {\n unified: string | null;\n originalUnified: string | null;\n} {\n if (!emoji) {\n return {\n unified: null,\n originalUnified: null,\n };\n }\n\n return {\n unified: unifiedFromEmojiElement(emoji),\n originalUnified: originalUnifiedFromEmojiElement(emoji),\n };\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, 0.1);\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 { Categories, CustomCategoryConfig } from '../config/categoryConfig';\nimport { CustomEmoji } from '../config/customEmojiConfig';\nimport { DataEmoji } from '../dataUtils/DataTypes';\nimport { CategoryConfig } from '../types/exposedTypes';\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 * as React from 'react';\nimport { useEffect, useRef } from 'react';\n\nimport {\n allUnifiedFromEmojiElement,\n isEmojiElement,\n NullableElement,\n} from '../DomUtils/selectors';\nimport {\n useActiveSkinToneState,\n useDisallowClickRef,\n useEmojiVariationPickerState,\n useUpdateSuggested,\n} from '../components/context/PickerContext';\nimport { usePickerDataContext } from '../components/context/PickerDataContext';\nimport { GetEmojiUrl } from '../components/emoji/BaseEmojiProps';\nimport {\n MOUSE_EVENT_SOURCE,\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/emojiUtils';\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 ContainerRef: React.MutableRefObject<NullableElement>,\n mouseEventSource: MOUSE_EVENT_SOURCE,\n) {\n const mouseDownTimerRef = useRef<ReturnType<typeof setTimeout>>();\n const setVariationPicker = useSetVariationPicker();\n const disallowClickRef = useDisallowClickRef();\n const [, setEmojiVariationPicker] = useEmojiVariationPickerState();\n const closeAllOpenToggles = useCloseAllOpenToggles();\n const [activeSkinTone] = useActiveSkinToneState();\n const onEmojiClick = useOnEmojiClickConfig(mouseEventSource);\n const [, updateSuggested] = useUpdateSuggested();\n const getEmojiUrl = useGetEmojiUrlConfig();\n const activeEmojiStyle = useEmojiStyleConfig();\n const { emojiByUnified } = usePickerDataContext();\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, emojiByUnified);\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 emojiByUnified,\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, emojiByUnified);\n\n if (!emoji || !emojiHasVariations(emoji)) {\n return;\n }\n\n mouseDownTimerRef.current = 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 emojiByUnified,\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 (!ContainerRef.current) {\n return;\n }\n const confainerRef = ContainerRef.current;\n confainerRef.addEventListener('click', onClick, {\n passive: true,\n });\n\n confainerRef.addEventListener('mousedown', onMouseDown, {\n passive: true,\n });\n confainerRef.addEventListener('mouseup', onMouseUp, {\n passive: true,\n });\n\n return () => {\n confainerRef?.removeEventListener('click', onClick);\n confainerRef?.removeEventListener('mousedown', onMouseDown);\n confainerRef?.removeEventListener('mouseup', onMouseUp);\n };\n }, [ContainerRef, onClick, onMouseDown, onMouseUp]);\n}\n\nfunction emojiFromEvent(\n event: MouseEvent,\n lookupEmojiByUnified: (unified?: string) => DataEmoji | undefined,\n): [DataEmoji, string] | [] {\n const target = event?.target as HTMLElement;\n if (!isEmojiElement(target)) {\n return [];\n }\n\n const { unified, originalUnified } = allUnifiedFromEmojiElement(target);\n const resolvedUnified = unified ?? originalUnified;\n if (!resolvedUnified) {\n return [];\n }\n\n const emoji = lookupEmojiByUnified(resolvedUnified);\n if (!emoji) {\n return [];\n }\n\n return [emoji, unified ?? resolvedUnified];\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 * as React from 'react';\nimport { cx } from 'shipstyles';\n\nimport { stylesheet } from '../../Stylesheet/stylesheet';\n\ninterface Props 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 // Longhand, not `background: 'none'`: a shorthand reset shares its\n // conflict keys with every background longhand, so cx() would drop\n // this whole class wherever a later class sets background-image\n // (e.g. the category nav sprite) and the native button face would\n // show through.\n backgroundColor: 'transparent',\n outline: 'none',\n },\n});\n","import * as React from 'react';\nimport { cx } from 'shipstyles';\n\nimport { ClassNames } from '../../DomUtils/classNames';\nimport {\n commonInteractionStyles,\n commonStyles,\n stylesheet,\n} 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 noBackground?: boolean;\n className?: string;\n style?: React.CSSProperties;\n}>;\n\nexport function ClickableEmojiButton({\n emojiNames,\n unified,\n hidden,\n hiddenOnSearch,\n showVariations = true,\n hasVariations,\n children,\n className,\n noBackground = false,\n style,\n}: ClickableEmojiButtonProps) {\n return (\n <Button\n className={cx(\n styles.emoji,\n hidden && commonStyles.hidden,\n hiddenOnSearch && commonInteractionStyles.hiddenOnSearch,\n {\n [ClassNames.visible]: !hidden && !hiddenOnSearch,\n },\n !!(hasVariations && showVariations) && styles.hasVariations,\n noBackground && styles.noBackground,\n className,\n )}\n data-unified={unified}\n aria-label={getAriaLabel(emojiNames)}\n data-full-name={emojiNames}\n style={style}\n >\n {children}\n </Button>\n );\n}\n\nfunction getAriaLabel(emojiNames: string[]) {\n return emojiNames[emojiNames.length - 1];\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 noBackground: {\n background: 'none',\n ':hover': {\n backgroundColor: 'transparent',\n background: 'none',\n },\n ':focus': {\n backgroundColor: 'transparent',\n background: 'none',\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:\n '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 * as React from 'react';\nimport { cx } from 'shipstyles';\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 className,\n}: {\n emojiName: string;\n emojiStyle: EmojiStyle;\n style: React.CSSProperties;\n lazyLoad?: boolean;\n imgUrl: string;\n onError: () => void;\n className?: string;\n}) {\n return (\n <img\n src={imgUrl}\n alt={emojiName}\n className={cx(\n styles.emojiImag,\n emojiStyles.external,\n emojiStyles.common,\n className,\n )}\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 * as React from 'react';\nimport { cx } from 'shipstyles';\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 className,\n}: {\n unified: string;\n style: React.CSSProperties;\n className?: string;\n}) {\n return (\n <span\n className={cx(\n // Order matters: cx() lets the later class win same-property\n // conflicts, so the zeroing reset must come first and the real\n // font-size last — otherwise the emoji renders at 0px.\n emojiStyles.external,\n emojiStyles.common,\n styles.nativeEmoji,\n className,\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 { emojiName, emojiUrlByUnified } from '../../dataUtils/emojiUtils';\nimport { isCustomEmoji } from '../../typeRefinements/typeRefinements';\nimport { EmojiStyle } from '../../types/exposedTypes';\nimport { useEmojisThatFailedToLoadState } from '../context/PickerContext';\nimport { usePickerDataContext } from '../context/PickerDataContext';\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 className,\n}: BaseEmojiProps) {\n const [, setEmojisThatFailedToLoad] = useEmojisThatFailedToLoadState();\n const { emojiByUnified } = usePickerDataContext();\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 className={className}\n />\n );\n }\n\n return (\n <>\n {emojiStyle === EmojiStyle.NATIVE ? (\n <NativeEmoji unified={unified} style={style} className={className} />\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 className={className}\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/emojiUtils';\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 buttonClassName?: string;\n noBackground?: boolean;\n style?: React.CSSProperties;\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 className,\n buttonClassName,\n noBackground = false,\n style,\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 noBackground={noBackground}\n style={style}\n className={buttonClassName}\n >\n <ViewOnlyEmoji\n unified={unified}\n emoji={emoji}\n size={size}\n emojiStyle={emojiStyle}\n lazyLoad={lazyLoad}\n getEmojiUrl={getEmojiUrl}\n className={className}\n />\n </ClickableEmojiButton>\n );\n}\n","import * as React from 'react';\nimport { cx } from 'shipstyles';\n\nimport { darkMode, stylesheet } from '../../Stylesheet/stylesheet';\nimport { Button } from '../atoms/Button';\nimport { useReactionsModeState } from '../context/PickerContext';\n\nimport Plus from './svg/plus.svg';\n\nexport function BtnPlus() {\n const [, setReactionsMode] = useReactionsModeState();\n return (\n <Button\n aria-label=\"Show all Emojis\"\n title=\"Show all Emojis\"\n tabIndex={0}\n className={cx(styles.plusSign)}\n onClick={() => setReactionsMode(false)}\n />\n );\n}\n\nconst styles = stylesheet.create({\n plusSign: {\n fontSize: '20px',\n padding: '17px',\n color: 'var(--epr-text-color)',\n borderRadius: '50%',\n textAlign: 'center',\n lineHeight: '100%',\n width: '20px',\n height: '20px',\n display: 'flex',\n justifyContent: 'center',\n alignItems: 'center',\n transition: 'background-color 0.2s ease-in-out',\n ':after': {\n content: '',\n minWidth: '20px',\n minHeight: '20px',\n backgroundImage: `url(${Plus})`,\n backgroundColor: 'transparent',\n backgroundRepeat: 'no-repeat',\n backgroundSize: '20px',\n backgroundPositionY: '0',\n },\n ':hover': {\n color: 'var(--epr-highlight-color)',\n backgroundColor: 'var(--epr-hover-bg-color-reduced-opacity)',\n ':after': {\n backgroundPositionY: '-20px',\n },\n },\n ':focus': {\n color: 'var(--epr-highlight-color)',\n backgroundColor: 'var(--epr-hover-bg-color-reduced-opacity)',\n ':after': {\n backgroundPositionY: '-40px',\n },\n },\n },\n ...darkMode('plusSign', {\n ':after': { backgroundPositionY: '-40px' },\n ':hover:after': { backgroundPositionY: '-60px' },\n }),\n});\n","import * as React from 'react';\nimport { cx } from 'shipstyles';\n\nimport { commonStyles, stylesheet } from '../../Stylesheet/stylesheet';\nimport {\n MOUSE_EVENT_SOURCE,\n useEmojiStyleConfig,\n useReactionsConfig,\n useAllowExpandReactions,\n useGetEmojiUrlConfig,\n} from '../../config/useConfig';\nimport { DataEmoji } from '../../dataUtils/DataTypes';\nimport { emojiByUnified } from '../../dataUtils/emojiSelectors';\nimport { useMouseDownHandlers } from '../../hooks/useMouseDownHandlers';\nimport { useReactionsRef } from '../context/ElementRefContext';\nimport { useReactionsModeState } from '../context/PickerContext';\nimport { ClickableEmoji } from '../emoji/Emoji';\n\nimport { BtnPlus } from './BtnPlus';\n\nexport function Reactions() {\n const [reactionsOpen] = useReactionsModeState();\n const ReactionsRef = useReactionsRef();\n const reactions = useReactionsConfig();\n useMouseDownHandlers(ReactionsRef, MOUSE_EVENT_SOURCE.REACTIONS);\n const emojiStyle = useEmojiStyleConfig();\n const allowExpandReactions = useAllowExpandReactions();\n const getEmojiUrl = useGetEmojiUrlConfig();\n\n if (!reactionsOpen) {\n return null;\n }\n\n return (\n <ul\n className={cx(styles.list, !reactionsOpen && commonStyles.hidden)}\n ref={ReactionsRef}\n aria-label=\"Reactions\"\n >\n {reactions.map((reaction) => {\n const emoji = emojiByUnified(reaction);\n\n if (!emoji) {\n return null;\n }\n\n return (\n <li key={reaction}>\n <ClickableEmoji\n emoji={emoji as DataEmoji}\n emojiStyle={emojiStyle}\n unified={reaction}\n showVariations={false}\n className={cx(styles.emojiButton)}\n buttonClassName={cx(styles.reactionButton)}\n noBackground\n getEmojiUrl={getEmojiUrl}\n />\n </li>\n );\n })}\n {allowExpandReactions ? (\n <li>\n <BtnPlus />\n </li>\n ) : null}\n </ul>\n );\n}\n\nconst styles = stylesheet.create({\n list: {\n listStyle: 'none',\n margin: '0',\n padding: '0 5px',\n display: 'flex',\n justifyContent: 'space-between',\n alignItems: 'center',\n height: '100%',\n },\n reactionButton: {\n // Every picker button sets outline: none, and reaction buttons also\n // suppress the focus background, so keyboard focus was invisible.\n // Focus mirrors the hover treatment (scale plus a soft circular\n // wash, no outline ring): the scale transform on the inner image\n // alone is clipped by the button's overflow: hidden, and does\n // nothing on inline native emoji, so the button itself carries the\n // effect. Scoped to the reactions bar so grid focus treatment is\n // untouched.\n // https://github.com/ealush/emoji-picker-react/issues/473\n ':focus-visible': {\n transform: 'scale(1.2)',\n transition:\n 'background-color 0.2s, transform 0.2s cubic-bezier(0.175, 0.885, 0.32, 1.5)',\n backgroundColor: 'var(--epr-hover-bg-color-reduced-opacity)',\n borderRadius: '50%',\n outline: 'none',\n },\n },\n emojiButton: {\n ':hover': {\n transform: 'scale(1.2)',\n },\n ':focus': {\n transform: 'scale(1.2)',\n },\n ':active': {\n transform: 'scale(1.1)',\n },\n transition: 'transform 0.2s cubic-bezier(0.175, 0.885, 0.32, 1.5)',\n },\n});\n","import { useEffect, useState } 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 const [scrollTop, setScrollTop] = useState(0);\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 setScrollTop(bodyRef?.scrollTop ?? 0);\n closeAllOpenToggles();\n }\n\n return () => {\n bodyRef?.removeEventListener('scroll', onScroll);\n };\n }, [BodyRef, closeAllOpenToggles]);\n\n return scrollTop;\n}\n","export function shouldVirtualize({\n scrollTop,\n clientHeight,\n topOffset,\n style,\n dimensions,\n}: {\n scrollTop: number;\n clientHeight: number;\n topOffset: number;\n style: { top: number } | undefined;\n dimensions: Dimensions;\n}): boolean {\n if (!style || !dimensions) {\n return false;\n }\n\n const emojiTop = topOffset + style.top;\n const emojiBottom = emojiTop + dimensions.emojiSize;\n\n const isVisible =\n emojiBottom + dimensions.emojiSize * 2 >= scrollTop &&\n emojiTop <= scrollTop + clientHeight + dimensions.emojiSize;\n\n return !isVisible;\n}\n\nexport function getEmojiPositionStyle(dimensions: Dimensions, index: number) {\n return dimensions\n ? {\n top: Math.floor(index / dimensions.emojisPerRow) * dimensions.emojiSize,\n left: (index % dimensions.emojisPerRow) * dimensions.emojiSize,\n }\n : undefined;\n}\n\n// preload emoji if it is one row below viewport\n\nexport type Dimensions =\n | {\n emojiSize: number;\n emojisPerRow: number;\n categoryHeight: number;\n }\n | undefined;\n","import * as React from 'react';\n\nimport { EmojiButtonSelector } from '../DomUtils/selectors';\nimport {\n useEmojiListRef,\n usePickerMainRef,\n} from '../components/context/ElementRefContext';\nimport {\n useReactionsModeState,\n useVisibleCategoriesState,\n useEmojiSizeState,\n} from '../components/context/PickerContext';\n\nconst EMOJI_SIZE_DEFAULT = 40;\n\nexport function useCategoryHeight(emojiCount: number):\n | {\n categoryHeight: number;\n emojisPerRow: number;\n emojiSize: number;\n }\n | undefined {\n const EmojiListRef = useEmojiListRef();\n const [isReactionsMode] = useReactionsModeState();\n const PickerMainRef = usePickerMainRef();\n const emojiSizeRef = React.useRef<number | undefined>();\n const [visibleCategories] = useVisibleCategoriesState();\n const [emojiSizeFromContext] = useEmojiSizeState();\n const [dimensions, setDimensions] = React.useState<{\n categoryHeight: number;\n emojisPerRow: number;\n emojiSize: number;\n }>();\n\n // Helper to compute and store dimensions based on current DOM\n const computeAndSetDimensions = React.useCallback(() => {\n const listEl = EmojiListRef.current;\n if (!listEl) return;\n\n const emojiElement = listEl.querySelector(\n EmojiButtonSelector,\n ) as HTMLElement | null;\n\n const measured = emojiElement?.clientHeight;\n if (measured) {\n emojiSizeRef.current = measured;\n }\n const emojiSize =\n emojiSizeFromContext ||\n measured ||\n emojiSizeRef.current ||\n EMOJI_SIZE_DEFAULT;\n const pickerWidth = listEl.clientWidth;\n\n if (pickerWidth === 0 || emojiSize === 0) return;\n\n const emojisPerRow = Math.max(1, Math.floor(pickerWidth / emojiSize));\n const rowCount = Math.ceil(emojiCount / emojisPerRow);\n const categoryHeight = rowCount * emojiSize;\n\n setDimensions({ categoryHeight, emojisPerRow, emojiSize });\n }, [EmojiListRef, emojiCount, emojiSizeFromContext]);\n\n // Recompute on data-count changes and when reactions mode toggles\n React.useEffect(() => {\n computeAndSetDimensions();\n }, [\n emojiCount,\n isReactionsMode,\n computeAndSetDimensions,\n visibleCategories.length,\n ]);\n\n // Listen to transitionend on the picker root (where height transition occurs)\n React.useEffect(() => {\n const rootEl = PickerMainRef.current;\n if (!rootEl) return;\n\n const handler = (e: Event) => {\n const te = e as TransitionEvent;\n const prop = te.propertyName;\n if (\n prop === 'width' ||\n prop === 'max-width' ||\n prop === 'min-width' ||\n prop === 'height' ||\n prop === 'max-height' ||\n prop === 'min-height'\n ) {\n if (typeof queueMicrotask === 'function') {\n queueMicrotask(() => computeAndSetDimensions());\n } else {\n requestAnimationFrame(() => computeAndSetDimensions());\n }\n }\n };\n\n rootEl.addEventListener('transitionend', handler, {\n passive: true,\n });\n return () => {\n rootEl.removeEventListener('transitionend', handler);\n };\n }, [PickerMainRef, computeAndSetDimensions]);\n\n return dimensions;\n}\n","import { useEmojisThatFailedToLoadState } from '../components/context/PickerContext';\nimport { DataEmoji } from '../dataUtils/DataTypes';\nimport { emojiUnified } from '../dataUtils/emojiUtils';\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 { ReactNode, useEffect } from 'react';\nimport * as React from 'react';\n\nimport { useBodyRef } from '../components/context/ElementRefContext';\nimport { useActiveSkinToneState } from '../components/context/PickerContext';\nimport { ClickableEmoji } from '../components/emoji/Emoji';\nimport {\n useEmojiStyleConfig,\n useGetEmojiUrlConfig,\n useLazyLoadEmojisConfig,\n useSkinTonesDisabledConfig,\n} from '../config/useConfig';\nimport { DataEmojis } from '../dataUtils/DataTypes';\nimport { emojiUnified } from '../dataUtils/emojiUtils';\nimport {\n getEmojiPositionStyle,\n shouldVirtualize,\n} from '../virtualization/virtualizationHelpers';\n\nimport { preloadEmojiIfNeeded } from './preloadEmoji';\nimport { useCategoryHeight } from './useCategoryHeight';\nimport { useIsEmojiDisallowed } from './useDisallowedEmojis';\nimport { useIsEmojiHidden } from './useIsEmojiHidden';\n\nexport function useEmojiVirtualization({\n categoryEmojis,\n topOffset,\n onHeightReady,\n scrollTop,\n isCategoryVisible,\n}: {\n categoryEmojis: DataEmojis;\n topOffset: number;\n onHeightReady: (height: number) => void;\n scrollTop: number;\n isCategoryVisible: boolean;\n}) {\n const isEmojiHidden = useIsEmojiHidden();\n const lazyLoadEmojis = useLazyLoadEmojisConfig();\n const emojiStyle = useEmojiStyleConfig();\n const [activeSkinTone] = useActiveSkinToneState();\n const isEmojiDisallowed = useIsEmojiDisallowed();\n const getEmojiUrl = useGetEmojiUrlConfig();\n const showVariations = !useSkinTonesDisabledConfig();\n const BodyRef = useBodyRef();\n\n let virtualizedCounter = 0;\n\n const emojisToPush = categoryEmojis.filter((emoji) => {\n const isDisallowed = isEmojiDisallowed(emoji);\n const { failedToLoad, filteredOut, hidden } = isEmojiHidden(emoji);\n\n return !failedToLoad && !filteredOut && !hidden && !isDisallowed;\n });\n\n const dimensions = useCategoryHeight(emojisToPush.length);\n\n useEffect(() => {\n if (dimensions) {\n onHeightReady(dimensions.categoryHeight);\n }\n }, [dimensions, onHeightReady, emojisToPush.length]);\n\n const isVirtualized = (style: { top: number; left: number } | undefined) =>\n dimensions &&\n BodyRef.current &&\n shouldVirtualize({\n scrollTop,\n clientHeight: BodyRef.current?.clientHeight ?? 0,\n topOffset,\n style,\n dimensions,\n });\n\n const emojis = emojisToPush.reduce((accumulator, emoji, index) => {\n const unified = emojiUnified(emoji, activeSkinTone);\n const style = getEmojiPositionStyle(dimensions, index);\n\n if (isVirtualized(style)) {\n virtualizedCounter++;\n preloadEmojiIfNeeded(\n emoji,\n emojiStyle,\n scrollTop,\n BodyRef.current?.clientHeight ?? 0,\n topOffset,\n style,\n dimensions,\n getEmojiUrl,\n );\n return accumulator;\n }\n\n if (!isCategoryVisible) {\n virtualizedCounter++;\n return accumulator;\n }\n\n accumulator.push(\n <ClickableEmoji\n showVariations={showVariations}\n key={unified}\n emoji={emoji}\n unified={unified}\n emojiStyle={emojiStyle}\n lazyLoad={lazyLoadEmojis}\n getEmojiUrl={getEmojiUrl}\n style={{\n ...style,\n position: 'absolute',\n }}\n />,\n );\n return accumulator;\n }, [] as ReactNode[]);\n\n return {\n virtualizedCounter,\n emojis,\n dimensions,\n };\n}\n","import * as React from 'react';\nimport { cx } from 'shipstyles';\n\nimport { ClassNames } from '../../DomUtils/classNames';\nimport {\n commonInteractionStyles,\n commonStyles,\n stylesheet,\n} from '../../Stylesheet/stylesheet';\nimport {\n categoryFromCategoryConfig,\n categoryNameFromCategoryConfig,\n} from '../../config/categoryConfig';\nimport { CategoryConfig } from '../../types/exposedTypes';\n\ntype Props = Readonly<{\n categoryConfig: CategoryConfig;\n children?: React.ReactNode;\n hidden?: boolean;\n hiddenOnSearch?: boolean;\n height?: number;\n emojisPerRow?: number;\n}>;\n\nexport function EmojiCategory({\n categoryConfig,\n children,\n hidden,\n hiddenOnSearch,\n height,\n emojisPerRow,\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 && commonInteractionStyles.hiddenOnSearch,\n )}\n data-name={category}\n role=\"rowgroup\"\n aria-label={categoryName}\n >\n <h2 className={cx(styles.label)}>{categoryName}</h2>\n <div\n className={cx(styles.categoryContent)}\n style={{ height }}\n role=\"row\"\n data-emojis-per-row={emojisPerRow}\n >\n {children}\n </div>\n </li>\n );\n}\n\nconst styles = stylesheet.create({\n category: {\n '.': ClassNames.category,\n minHeight:\n 'calc(var(--epr-emoji-fullsize) + var(--epr-category-label-height))',\n position: 'relative',\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-ignore - backdropFilter is not recognized.\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\n// `useLayoutEffect` warns during SSR since it never runs on the server.\n// Fall back to `useEffect` there: measurement only matters on the client.\nexport const useIsomorphicLayoutEffect =\n typeof window !== 'undefined' ? React.useLayoutEffect : React.useEffect;\n","import * as React from 'react';\n\nimport { categoryFromCategoryConfig } from '../../config/categoryConfig';\nimport {\n useCategoriesConfig,\n useEmojiStyleConfig,\n useGetEmojiUrlConfig,\n useLazyLoadEmojisConfig,\n} from '../../config/useConfig';\nimport { emojiUnified } from '../../dataUtils/emojiUtils';\nimport { useIsomorphicLayoutEffect } from '../../hooks/useIsomorphicLayoutEffect';\nimport {\n useActiveSkinToneState,\n useEmojiSizeState,\n} from '../context/PickerContext';\nimport { useGetEmojisByCategory } from '../context/PickerDataContext';\nimport { ClickableEmoji } from '../emoji/Emoji';\n\nexport function MeasureEmoji() {\n const categories = useCategoriesConfig();\n const getEmojisByCategory = useGetEmojisByCategory();\n const emojiStyle = useEmojiStyleConfig();\n const getEmojiUrl = useGetEmojiUrlConfig();\n const lazyLoadEmojis = useLazyLoadEmojisConfig();\n const [activeSkinTone] = useActiveSkinToneState();\n const [emojiSize, setEmojiSize] = useEmojiSizeState();\n const ref = React.useRef<HTMLDivElement>(null);\n\n useIsomorphicLayoutEffect(() => {\n if (ref.current) {\n setEmojiSize(ref.current.clientHeight);\n }\n });\n\n if (emojiSize) {\n return null;\n }\n\n const firstCategory = categories[0];\n const dummyEmoji = getEmojisByCategory(\n categoryFromCategoryConfig(firstCategory),\n )[0];\n const unified = dummyEmoji ? emojiUnified(dummyEmoji, activeSkinTone) : '';\n\n if (!dummyEmoji) {\n return null;\n }\n\n return (\n <div ref={ref}>\n <ClickableEmoji\n emoji={dummyEmoji}\n unified={unified}\n emojiStyle={emojiStyle}\n getEmojiUrl={getEmojiUrl}\n lazyLoad={lazyLoadEmojis}\n showVariations={false}\n hidden={false}\n style={{\n opacity: 0,\n pointerEvents: 'none',\n position: 'absolute',\n top: 0,\n left: 0,\n zIndex: -1,\n height: 'var(--epr-emoji-fullsize)',\n width: 'var(--epr-emoji-fullsize)',\n }}\n />\n </div>\n );\n}\n","import * as React from 'react';\nimport { cx } from 'shipstyles';\n\nimport { ClassNames } from '../../DomUtils/classNames';\nimport { getLabelHeight } from '../../DomUtils/elementPositionInRow';\nimport { stylesheet } from '../../Stylesheet/stylesheet';\nimport { categoryFromCategoryConfig } from '../../config/categoryConfig';\nimport { useCategoriesConfig } from '../../config/useConfig';\nimport { DataEmojis } from '../../dataUtils/DataTypes';\nimport { useEmojiVirtualization } from '../../hooks/useEmojiVirtualization';\nimport { CategoryConfig } from '../../types/exposedTypes';\nimport { useEmojiListRef } from '../context/ElementRefContext';\nimport { useVisibleCategoriesState } from '../context/PickerContext';\nimport { useGetEmojisByCategory } from '../context/PickerDataContext';\n\nimport { EmojiCategory } from './EmojiCategory';\nimport { MeasureEmoji } from './MeasureEmoji';\n\nexport function EmojiList({ scrollTop }: { scrollTop: number }) {\n const categories = useCategoriesConfig();\n const [categoryHeights, setCategoryHeights] = React.useState<{\n [key: string]: number;\n }>({});\n const EmojiListRef = useEmojiListRef();\n const getEmojisByCategory = useGetEmojisByCategory();\n\n const labelHeight = getLabelHeight(EmojiListRef.current);\n\n let topOffset = 0;\n // role=\"grid\" makes screen readers switch out of virtual-cursor mode so\n // arrow keys reach the picker's keyboard handler. Each category is one\n // rowgroup: visual rows shift under virtualization, so the category is\n // the only stable row unit. Emoji buttons intentionally keep their\n // native button role for activation semantics.\n // https://github.com/ealush/emoji-picker-react/issues/508\n // The list markup is kept for a backwards-compatible DOM structure;\n // the grid role override is intentional.\n return (\n // eslint-disable-next-line jsx-a11y/no-noninteractive-element-to-interactive-role\n <ul className={cx(styles.emojiList)} ref={EmojiListRef} role=\"grid\">\n <MeasureEmoji />\n {categories.map((categoryConfig, index) => {\n const category = categoryFromCategoryConfig(categoryConfig);\n\n const currentOffset = topOffset;\n const categoryHeight = categoryHeights[category];\n if (categoryHeight) {\n topOffset += categoryHeight + labelHeight;\n }\n\n return (\n <RenderCategory\n key={category}\n categoryEmojis={getEmojisByCategory(category)}\n categoryConfig={categoryConfig}\n topOffset={currentOffset}\n isFirstCategory={index === 0}\n onHeightReady={(height) => {\n if (categoryHeights[category] !== height) {\n setCategoryHeights((prev) => ({\n ...prev,\n [category]: height,\n }));\n }\n }}\n scrollTop={scrollTop}\n />\n );\n })}\n </ul>\n );\n}\n\nfunction RenderCategory({\n categoryEmojis,\n categoryConfig,\n topOffset,\n onHeightReady,\n scrollTop,\n isFirstCategory,\n}: {\n categoryEmojis: DataEmojis;\n categoryConfig: CategoryConfig;\n topOffset: number;\n onHeightReady: (height: number) => void;\n scrollTop: number;\n isFirstCategory: boolean;\n}) {\n const [visibleCategories] = useVisibleCategoriesState();\n\n // The observer is the only writer of visibleCategories. When it never\n // fires (zero-height container at mount, hidden modal), no category\n // would ever render. The first category paints optimistically to break\n // the deadlock; the observer takes over from there.\n // https://github.com/ealush/emoji-picker-react/issues/469\n // https://github.com/ealush/emoji-picker-react/issues/475\n const isCategoryVisible =\n isFirstCategory || visibleCategories.includes(categoryConfig.category);\n\n const { virtualizedCounter, emojis, dimensions } = useEmojiVirtualization({\n categoryEmojis,\n topOffset,\n onHeightReady,\n scrollTop,\n isCategoryVisible,\n });\n\n return (\n <EmojiCategory\n categoryConfig={categoryConfig}\n height={dimensions?.categoryHeight}\n emojisPerRow={dimensions?.emojisPerRow}\n // Indicates that there are no visible emojis\n // Hence, the category should be hidden\n hidden={!emojis.length && virtualizedCounter === 0}\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 * as React from 'react';\nimport { useEffect } from 'react';\nimport { cx } from 'shipstyles';\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 { darkMode, stylesheet } from '../../Stylesheet/stylesheet';\nimport {\n useEmojiStyleConfig,\n useGetEmojiUrlConfig,\n} from '../../config/useConfig';\nimport {\n emojiHasVariations,\n emojiUnified,\n emojiVariations,\n} from '../../dataUtils/emojiUtils';\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 SVGTriangle from './svg/triangle.svg';\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 } =\n useVariationPickerTop(VariationPickerRef);\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 visible: {\n opacity: '1',\n visibility: 'visible',\n pointerEvents: 'all',\n transform: 'scale(1)',\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 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 backgroundImage: `url(${SVGTriangle})`,\n },\n ...darkMode('pointer', {\n backgroundPosition: '-25px 0',\n }),\n});\n","import * as React from 'react';\nimport { cx } from 'shipstyles';\n\nimport { ClassNames } from '../../DomUtils/classNames';\nimport {\n commonInteractionStyles,\n stylesheet,\n} from '../../Stylesheet/stylesheet';\nimport { MOUSE_EVENT_SOURCE } from '../../config/useConfig';\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 const scrollTop = useOnScroll(BodyRef);\n useMouseDownHandlers(BodyRef, MOUSE_EVENT_SOURCE.PICKER);\n useOnMouseMove();\n\n return (\n <div\n className={cx(styles.body, commonInteractionStyles.hiddenOnReactions)}\n ref={BodyRef}\n >\n <EmojiVariationPicker />\n <EmojiList scrollTop={scrollTop} />\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 allUnifiedFromEmojiElement,\n buttonFromTarget,\n} from '../DomUtils/selectors';\nimport {\n useBodyRef,\n usePickerMainRef,\n} 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 PickerMainRef = usePickerMainRef();\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, originalUnified } = allUnifiedFromEmojiElement(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 return;\n }\n\n const { unified, originalUnified } = allUnifiedFromEmojiElement(button);\n\n if (!unified || !originalUnified) {\n return;\n }\n\n setPreviewEmoji({\n unified,\n originalUnified,\n });\n\n // Let arrow-key navigation continue from the hovered emoji, but only\n // when focus is already inside the picker (or nowhere meaningful).\n // Pulling focus out of an external element steals the caret from\n // host-app inputs (issue #320). The guard runs again inside the\n // deferred callback in case focus moved out after this event.\n if (!isExternalElementFocused()) {\n focusElement(button, () => !isExternalElementFocused());\n }\n }\n\n function isExternalElementFocused(): boolean {\n const active = document.activeElement as HTMLElement | null;\n\n if (!active || active === document.body || active === document.documentElement) {\n return false;\n }\n\n return !PickerMainRef.current?.contains(active);\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 * as React from 'react';\nimport { cx } from 'shipstyles';\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 * as React from 'react';\nimport { cx } from 'shipstyles';\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';\nimport { cx } from 'shipstyles';\n\nimport { stylesheet } from '../../../Stylesheet/stylesheet';\nimport { skinTonesNamed } from '../../../data/skinToneVariations';\nimport { SkinTones } from '../../../types/exposedTypes';\nimport { Button } from '../../atoms/Button';\n\ntype Props = {\n isOpen: boolean;\n onClick: () => void;\n isActive: boolean;\n skinToneVariation: SkinTones;\n style?: React.CSSProperties;\n tabIndex?: number;\n};\n\n// eslint-disable-next-line complexity\nexport function BtnSkinToneVariation({\n isOpen,\n onClick,\n isActive,\n skinToneVariation,\n style,\n tabIndex,\n}: Props) {\n return (\n <Button\n style={style}\n onClick={onClick}\n tabIndex={tabIndex}\n className={cx(\n `epr-tone-${skinToneVariation}`,\n styles.tone,\n !isOpen && styles.closedTone,\n isActive && styles.active,\n )}\n aria-pressed={isActive}\n aria-label={`Skin tone ${skinTonesNamed[skinToneVariation as SkinTones]}`}\n ></Button>\n );\n}\n\nconst styles = stylesheet.create({\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 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 border: '1px solid var(--epr-skin-tone-outer-border-color)',\n boxShadow: 'inset 0px 0px 0 1px var(--epr-skin-tone-inner-border-color)',\n ':hover': {\n boxShadow:\n '0 0 0 3px var(--epr-active-skin-hover-color), inset 0px 0px 0 1px var(--epr-skin-tone-inner-border-color)',\n },\n ':focus': {\n boxShadow: '0 0 0 3px var(--epr-focus-bg-color)',\n },\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","/* eslint-disable complexity */\nimport * as React from 'react';\nimport { cx } from 'shipstyles';\n\nimport { ClassNames } from '../../../DomUtils/classNames';\nimport { stylesheet } from '../../../Stylesheet/stylesheet';\nimport {\n useOnSkinToneChangeConfig,\n useSkinTonesDisabledConfig,\n} from '../../../config/useConfig';\nimport skinToneVariations from '../../../data/skinToneVariations';\nimport { useCloseAllOpenToggles } from '../../../hooks/useCloseAllOpenToggles';\nimport { useFocusSearchInput } from '../../../hooks/useFocus';\nimport Absolute from '../../Layout/Absolute';\nimport Relative from '../../Layout/Relative';\nimport { useSkinTonePickerRef } from '../../context/ElementRefContext';\nimport {\n useActiveSkinToneState,\n useSkinToneFanOpenState,\n} from '../../context/PickerContext';\n\nimport { BtnSkinToneVariation } from './BtnSkinToneVariation';\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 onSkinToneChange = useOnSkinToneChangeConfig();\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 vertical && isOpen && styles.verticalShadow,\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\n return (\n <BtnSkinToneVariation\n key={skinToneVariation}\n skinToneVariation={skinToneVariation}\n isOpen={isOpen}\n // Roving tabindex: when the fan is closed the inactive tones\n // are invisible (opacity: 0, stacked), so they must not be\n // reachable via Tab. The active tone stays tabbable to open\n // the fan from the keyboard.\n // https://github.com/ealush/emoji-picker-react/issues/492\n tabIndex={isOpen || active ? 0 : -1}\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 isActive={active}\n onClick={() => {\n if (isOpen) {\n setActiveSkinTone(skinToneVariation);\n onSkinToneChange(skinToneVariation);\n focusSearchInput();\n } else {\n setIsOpen(true);\n }\n closeAllOpenToggles();\n }}\n />\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: '9px',\n alignItems: 'flex-end',\n flexDirection: 'column',\n borderRadius: '6px',\n border: '1px solid var(--epr-bg-color)',\n },\n verticalShadow: {\n boxShadow: '0px 0 7px var(--epr-picker-border-color)',\n },\n open: {\n // @ts-ignore - backdropFilter is not recognized.\n backdropFilter: 'blur(5px)',\n background: 'var(--epr-skin-tone-picker-menu-color)',\n '.epr-active': {\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 },\n});\n","import * as React from 'react';\nimport { useState } from 'react';\nimport { cx } from 'shipstyles';\n\nimport {\n commonInteractionStyles,\n stylesheet,\n} from '../../Stylesheet/stylesheet';\nimport {\n useEmojiStyleConfig,\n useGetEmojiUrlConfig,\n usePreviewConfig,\n} from '../../config/useConfig';\nimport { emojiName, emojiUnified } from '../../dataUtils/emojiUtils';\nimport { useEmojiPreviewEvents } from '../../hooks/useEmojiPreviewEvents';\nimport { useIsSkinToneInPreview } from '../../hooks/useShouldShowSkinTonePicker';\nimport Flex from '../Layout/Flex';\nimport Space from '../Layout/Space';\nimport {\n useEmojiVariationPickerState,\n useReactionsModeState,\n} from '../context/PickerContext';\nimport { usePickerDataContext } from '../context/PickerDataContext';\nimport { ViewOnlyEmoji } from '../emoji/ViewOnlyEmoji';\nimport { SkinTonePickerMenu } from '../header/SkinTonePicker/SkinTonePicker';\n\nexport function Preview() {\n const previewConfig = usePreviewConfig();\n const isSkinToneInPreview = useIsSkinToneInPreview();\n const [reactionsOpen] = useReactionsModeState();\n\n if (!previewConfig.showPreview) {\n return null;\n }\n\n return (\n <Flex\n className={cx(\n styles.preview,\n commonInteractionStyles.hiddenOnReactions,\n reactionsOpen && styles.hideOnReactions,\n )}\n >\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 const { emojiByUnified } = usePickerDataContext();\n\n useEmojiPreviewEvents(previewConfig.showPreview, setPreviewEmoji);\n\n const emoji = emojiByUnified(\n (previewEmoji?.unified ?? previewEmoji?.originalUnified) as\n | string\n | undefined,\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 className={cx(styles.emoji)}\n />\n ) : defaultEmoji ? (\n <ViewOnlyEmoji\n unified={emojiUnified(defaultEmoji)}\n emoji={defaultEmoji}\n emojiStyle={emojiStyle}\n size={45}\n getEmojiUrl={getEmojiUrl}\n className={cx(styles.emoji)}\n />\n ) : null}\n </div>\n <div className={cx(styles.label)}>\n {show ? emojiName(emoji) : defaultText}\n </div>\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 emoji: {\n padding: '0',\n },\n hideOnReactions: {\n opacity: '0',\n transition: 'opacity 0.5s ease-in-out',\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,\n setVisibleCategories,\n}: {\n setActiveCategory: (category: string) => void;\n setVisibleCategories: (categories: string[]) => void;\n}) {\n const BodyRef = useBodyRef();\n\n useEffect(() => {\n const visibleCategories = new Map<string, number>();\n const intersectingCategories = new Map<string, boolean>();\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\n if (!id) {\n continue;\n }\n\n visibleCategories.set(id, entry.intersectionRatio);\n intersectingCategories.set(id, entry.isIntersecting);\n }\n\n const ratios = Array.from(visibleCategories);\n const visibleCats = ratios\n .filter(([id, ratio]) => ratio > 0 || intersectingCategories.get(id))\n .map(([id]) => id);\n\n setVisibleCategories(visibleCats);\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 root: bodyRef,\n threshold: [0, 1],\n },\n );\n bodyRef\n ?.querySelectorAll(asSelectors(ClassNames.category))\n .forEach((el) => {\n observer.observe(el);\n });\n\n return () => {\n observer.disconnect();\n };\n }, [BodyRef, setActiveCategory, setVisibleCategories]);\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 * as React from 'react';\n\n// Default navigation icons, extracted from the former CategoryNav.svg\n// sprite (row 0). Paint uses currentColor so the fill follows the\n// --epr-category-icon-*-color variables.\n// https://github.com/ealush/emoji-picker-react/issues/399\n\nconst COLUMNS: Record<string, number> = {\n smileys_people: 0,\n animals_nature: 1,\n food_drink: 2,\n travel_places: 3,\n activities: 4,\n objects: 5,\n symbols: 6,\n flags: 7,\n suggested: 8,\n custom: 9,\n};\n\nconst SHAPES: Record<number, React.ReactNode> = {\n 0: (\n <>\n <path\n fill=\"currentColor\"\n stroke=\"currentColor\"\n strokeWidth=\"0.1\"\n strokeMiterlimit=\"10\"\n d=\"M12.8,9.5c0.6,0,1.1-0.5,1.1-1.2\n\t\tc0-0.6-0.5-1.1-1.1-1.1c-0.6,0-1.2,0.5-1.2,1.1S12.2,9.5,12.8,9.5z M12.8,7.9c0.2,0,0.4,0.2,0.4,0.4c0,0.2-0.2,0.4-0.4,0.4\n\t\tc-0.2,0-0.4-0.2-0.4-0.4C12.4,8.1,12.6,7.9,12.8,7.9z\"\n />\n <path\n fill=\"currentColor\"\n stroke=\"currentColor\"\n strokeWidth=\"0.1\"\n strokeMiterlimit=\"10\"\n d=\"M7.2,9.5c0.6,0,1.2-0.5,1.2-1.2\n\t\tc0-0.6-0.5-1.1-1.2-1.1c-0.6,0-1.1,0.5-1.1,1.1S6.6,9.5,7.2,9.5z M7.2,7.9c0.2,0,0.4,0.2,0.4,0.4c0,0.2-0.2,0.4-0.4,0.4\n\t\tC7,8.7,6.8,8.5,6.8,8.3C6.8,8.1,7,7.9,7.2,7.9z\"\n />\n <path\n fill=\"currentColor\"\n stroke=\"currentColor\"\n strokeWidth=\"0.1\"\n strokeMiterlimit=\"10\"\n d=\"M14.6,11.2c-0.1-0.1-0.2-0.2-0.3-0.2H5.7\n\t\tc-0.1,0-0.2,0.1-0.3,0.2c-0.1,0.1-0.1,0.2,0,0.4c0.7,2,2.5,3.3,4.6,3.3s3.9-1.3,4.6-3.3C14.7,11.4,14.7,11.3,14.6,11.2z M10,14.1\n\t\tc-1.6,0-3-0.9-3.7-2.2h7.3C13,13.2,11.6,14.1,10,14.1z\"\n />\n <path\n fill=\"currentColor\"\n stroke=\"currentColor\"\n strokeWidth=\"0.1\"\n strokeMiterlimit=\"10\"\n d=\"M10,3c-3.8,0-7,3.1-7,7s3.1,7,7,7s7-3.1,7-7\n\t\tS13.8,3,10,3z M10,16.2c-3.4,0-6.2-2.8-6.2-6.2S6.6,3.8,10,3.8s6.2,2.8,6.2,6.2S13.4,16.2,10,16.2z\"\n />\n </>\n ),\n 1: (\n <>\n <path\n fill=\"none\"\n stroke=\"currentColor\"\n d=\"M24.2,11V3.5c0.1,0.1,0.8,0.9,2.8,3.1c2.5-1.7,5.6-0.7,6.9,0l2.4-3.1v7.1\n\t\t\tc0,1.2-0.1,2.5-0.9,3.4c-1,1.2-2.7,2.5-5.3,2.5c-2.9,0-4.5-1.5-5.3-2.9C24.2,12.9,24.2,11.9,24.2,11z\"\n />\n <path\n fill=\"none\"\n stroke=\"currentColor\"\n strokeLinecap=\"round\"\n d=\"M21.2,10l5.4,1.2\"\n />\n <path\n fill=\"none\"\n stroke=\"currentColor\"\n strokeLinecap=\"round\"\n d=\"M21.2,14.1l5.4-1.2\"\n />\n <path\n fill=\"none\"\n stroke=\"currentColor\"\n strokeLinecap=\"round\"\n d=\"M38.8,10l-5.4,1.2\"\n />\n <path\n fill=\"none\"\n stroke=\"currentColor\"\n strokeLinecap=\"round\"\n d=\"M38.8,14.1l-5.4-1.2\"\n />\n <path\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n fill=\"currentColor\"\n d=\"M29.5,12.4L29,11.7c-0.2-0.3,0-0.6,0.3-0.6h1.4\n\t\t\tc0.3,0,0.5,0.4,0.3,0.6l-0.7,1l0,0c-0.7,1.2-2.6,1.1-3.1-0.3l-0.1-0.2c-0.1-0.2,0-0.4,0.2-0.5s0.4,0,0.5,0.2l0.1,0.2\n\t\t\tC28.3,12.7,29.1,12.9,29.5,12.4z\"\n />\n <path\n fill=\"none\"\n stroke=\"currentColor\"\n strokeLinecap=\"round\"\n d=\"M32.4,12.1l-0.1,0.2c-0.4,1-1.8,1.1-2.3,0.2\"\n />\n <ellipse fill=\"currentColor\" cx=\"27.6\" cy=\"9.7\" rx=\"0.7\" ry=\"0.7\" />\n <ellipse fill=\"currentColor\" cx=\"32.4\" cy=\"9.7\" rx=\"0.7\" ry=\"0.7\" />\n </>\n ),\n 2: (\n <>\n <path\n fill=\"none\"\n stroke=\"currentColor\"\n d=\"M48.1,3.5h3.7c2.5,0,4.5,2,4.5,4.5c0,0.5-0.4,0.9-0.9,0.9H44.5c-0.5,0-0.9-0.4-0.9-0.9\n\t\t\t\tC43.6,5.5,45.6,3.5,48.1,3.5z\"\n />\n <path\n fill=\"none\"\n stroke=\"currentColor\"\n strokeLinecap=\"round\"\n d=\"M43.5,8.7c-0.2,0.1-0.5,1.2,0,1.5c1.4,0.9,8.5,0.8,11.3,0.6\n\t\t\t\tc0.8-0.1,1.6-0.4,1.7-1.2c0-0.3-0.1-0.6-0.6-0.9\"\n />\n <path\n fill=\"none\"\n stroke=\"currentColor\"\n strokeLinecap=\"round\"\n d=\"M43.5,10.6L43.3,11c-0.2,0.5,0.2,1,0.7,0.9\n\t\t\t\tc0.3-0.1,0.5,0.1,0.7,0.3l0.1,0.2c0.3,0.5,1,0.6,1.5,0.2l0,0c0.3-0.2,0.7-0.3,1-0.2l0.8,0.3c0.4,0.1,0.8,0.1,1.2,0l0.5-0.2\n\t\t\t\tc0.4-0.2,0.9-0.2,1.3,0l0.5,0.2c0.4,0.2,0.8,0.1,1.2-0.1l0.2-0.1c0.3-0.2,0.8-0.1,1.1,0.1l0.2,0.2c0.3,0.3,0.8,0.2,1-0.2l0.1-0.2\n\t\t\t\tc0.1-0.2,0-0.3,0.2-0.4c0.5,0,1.2-0.3,1.1-0.7l-0.4-1.1\"\n />\n <path\n fill=\"none\"\n stroke=\"currentColor\"\n strokeLinecap=\"round\"\n d=\"M43.5,12.1c-0.1,0.2-0.3,0.8,0,1.1c0.3,0.4,3,1.1,6.4,1.1\n\t\t\t\tc2.2,0,4.6-0.3,6-0.6c0.5-0.1,0.9-0.4,0.8-0.9c0-0.2-0.2-0.5-0.4-0.7\"\n />\n <path\n fill=\"none\"\n stroke=\"currentColor\"\n strokeLinecap=\"round\"\n d=\"M43.5,13.3c0,0.5,0.6,2.4,1.3,2.6c1.8,0.8,5.7,0.7,8.1,0.5\n\t\t\t\tc1.3-0.1,2.5-0.7,3.2-1.8c0.3-0.5,0.5-1,0.5-1.4\"\n />\n <ellipse fill=\"currentColor\" cx=\"51.6\" cy=\"6.5\" rx=\"0.3\" ry=\"0.4\" />\n <ellipse fill=\"currentColor\" cx=\"53\" cy=\"4.9\" rx=\"0.3\" ry=\"0.4\" />\n <ellipse fill=\"currentColor\" cx=\"53\" cy=\"7.2\" rx=\"0.3\" ry=\"0.4\" />\n <ellipse fill=\"currentColor\" cx=\"54.3\" cy=\"6.5\" rx=\"0.3\" ry=\"0.4\" />\n <ellipse fill=\"currentColor\" cx=\"50.9\" cy=\"4.9\" rx=\"0.3\" ry=\"0.4\" />\n </>\n ),\n 3: (\n <>\n <path\n fill=\"none\"\n stroke=\"currentColor\"\n d=\"M64.1,13.4l2.3,0c0.2,0,0.4,0.2,0.4,0.4v2.1c0,0.2-0.2,0.4-0.4,0.4h-2.3\n\t\t\t\tc-0.2,0-0.4-0.2-0.4-0.4v-2.1C63.7,13.6,63.8,13.4,64.1,13.4z\"\n />\n <path\n fill=\"none\"\n stroke=\"currentColor\"\n d=\"M73.5,13.4h2.4c0.2,0,0.4,0.2,0.4,0.4v2.1c0,0.2-0.2,0.4-0.4,0.4h-2.4\n\t\t\t\tc-0.2,0-0.4-0.2-0.4-0.4l0-2.1C73.1,13.6,73.3,13.4,73.5,13.4z\"\n />\n <path fill=\"none\" stroke=\"currentColor\" d=\"M63.7,8.4h12.6v5H63.7V8.4z\" />\n <path\n fill=\"none\"\n stroke=\"currentColor\"\n d=\"M65.5,3.6h8.9c1,0,1.9,0.8,1.9,1.9v3.1H63.7V5.5C63.7,4.4,64.5,3.6,65.5,3.6z\"\n />\n <ellipse fill=\"currentColor\" cx=\"66.2\" cy=\"10.9\" rx=\"0.9\" ry=\"0.9\" />\n <ellipse fill=\"currentColor\" cx=\"73.8\" cy=\"10.9\" rx=\"0.9\" ry=\"0.9\" />\n </>\n ),\n 4: (\n <>\n <path\n fill=\"none\"\n stroke=\"currentColor\"\n d=\"M96.4,10c0,3.6-2.9,6.5-6.4,6.5s-6.4-2.9-6.4-6.5s2.9-6.5,6.4-6.5S96.4,6.4,96.4,10z\"\n />\n <path\n fill=\"none\"\n stroke=\"currentColor\"\n d=\"M96.3,8.6c0,0,0,0.1,0,0.1c-0.9,0.1-2.9,0.1-4.6-1.2c-1.1-0.8-2-1.7-2.6-2.5\n\t\t\t\tc-0.3-0.4-0.6-0.8-0.7-1.1c-0.1-0.1-0.1-0.2-0.1-0.2c0.5-0.1,1.2-0.2,2-0.2c1.2,0,2.5,0.3,3.5,1.1c1,0.8,1.7,1.8,2.1,2.8\n\t\t\t\tC96.1,7.9,96.2,8.3,96.3,8.6z\"\n />\n <path\n fill=\"none\"\n stroke=\"currentColor\"\n d=\"M84,12.1c0,0,0-0.1,0-0.1c0.9-0.2,2.9-0.4,4.7,0.6c1.1,0.6,1.9,1.5,2.4,2.3\n\t\t\t\tc0.4,0.5,0.6,1,0.7,1.3c-0.4,0.1-1,0.2-1.7,0.3c-1,0-2.1-0.1-3.2-0.8c-1.1-0.6-1.9-1.6-2.4-2.5C84.2,12.8,84.1,12.4,84,12.1z\"\n />\n </>\n ),\n 5: (\n <>\n <path\n fill=\"none\"\n stroke=\"currentColor\"\n strokeLinecap=\"round\"\n d=\"M116.3,6.8l-1.4,2L114.1,8l-0.6-0.7l0,0.9l-0.1,8.2h-6.8l-0.1-8.2\n\t\t\t\tl0-0.9L105.9,8l-0.8,0.8l-1.4-2l2.6-2.9c0.1-0.1,0.2-0.1,0.3-0.1h1.3l0.4,0.7c0.7,1.3,2.6,1.3,3.3-0.1l0.3-0.6h1.2\n\t\t\t\tc0.1,0,0.2,0,0.3,0.1l0.3-0.3l-0.3,0.3L116.3,6.8z\"\n />\n <path\n fill=\"none\"\n stroke=\"currentColor\"\n d=\"M110.1,7.7h2v0.9c0,0.4-0.4,0.7-1,0.7c-0.6,0-1-0.3-1-0.7L110.1,7.7L110.1,7.7z\"\n />\n </>\n ),\n 6: (\n <>\n <path\n fill=\"none\"\n stroke=\"currentColor\"\n d=\"M126.8,14.3c0,1.2-1,2.2-2.2,2.2s-2.2-1-2.2-2.2s1-2.2,2.2-2.2S126.8,13.1,126.8,14.3z\"\n />\n <path\n fill=\"none\"\n stroke=\"currentColor\"\n d=\"M137.6,14.3c0,1.2-1,2.2-2.2,2.2c-1.2,0-2.2-1-2.2-2.2s1-2.2,2.2-2.2\n\t\t\t\tC136.6,12.1,137.6,13.1,137.6,14.3z\"\n />\n <path fill=\"none\" stroke=\"currentColor\" d=\"M126.8,4.4v9.9\" />\n <path fill=\"none\" stroke=\"currentColor\" d=\"M137.7,4.4v9.9\" />\n <path\n fill=\"none\"\n stroke=\"currentColor\"\n d=\"M126.8,3.5h10.8v2.7h-10.8C126.8,6.2,126.8,3.5,126.8,3.5z\"\n />\n </>\n ),\n 7: (\n <>\n <path\n fill=\"currentColor\"\n stroke=\"currentColor\"\n strokeWidth=\"0.25\"\n strokeMiterlimit=\"10\"\n d=\"M156,4.3c-0.2-0.1-0.4-0.1-0.5,0\n\tc0,0-0.2,0.1-0.9,0.1c-0.7,0-2.4-0.1-3.8-0.6c-0.8-0.3-1.7-0.5-2.5-0.5c-0.2,0-0.4,0-0.5,0c-1.3,0-2.5,0.3-3.6,1\n\tc-0.2,0.1-0.2,0.2-0.2,0.4v11.6c0,0.3,0.1,0.5,0.3,0.5c0.6,0,0.5-0.4,0.5-0.6v-5.7c0.7-0.3,3.2-1.1,5.8-0.1c1.6,0.6,3.5,0.7,4.3,0.7\n\tc0.8,0,1.3-0.3,1.3-0.3c0.2-0.1,0.3-0.2,0.3-0.4V4.7C156.2,4.5,156.1,4.4,156,4.3z M155.6,10.2c-0.1,0-0.7,0.1-1,0.1\n\tc-0.7,0-2.4-0.1-3.8-0.6c-2.5-1-5-0.5-6.2-0.1V4.7c0.9-0.5,2.2-0.7,3.2-0.7c0.1,0,0.3,0,0.4,0c0.7,0,1.5,0.2,2.2,0.4\n\tc1.6,0.6,3.5,0.7,4.3,0.7c0.2,0,0.8,0,1-0.1V10.2z\"\n />\n </>\n ),\n 8: (\n <>\n <path\n fill=\"currentColor\"\n d=\"M170.8,3.1L170.8,3.1c-0.3,0-0.5,0-0.8,0c-2.1,0-4,1-5.3,2.5l-0.1,0l-0.1-0.1l-1-1.2l-0.3,3.4l3.4,0.3\n\t\t\t\tl-1.1-1.3l-0.1-0.1l0.1-0.1c1.1-1.4,3-2.3,5-2.1l0,0c3.2,0.3,5.5,3.1,5.2,6.3c-0.3,3-3.1,5.3-6.1,5.1c-3.1-0.2-5.4-2.9-5.3-6\n\t\t\t\tL163,9.5c-0.2,3.8,2.6,7.1,6.3,7.4c3.9,0.4,7.3-2.6,7.6-6.5C177.2,6.8,174.4,3.5,170.8,3.1z\"\n />\n <path\n fill=\"currentColor\"\n d=\"M170.3,7.4c0-0.3-0.3-0.6-0.6-0.6S169,7.1,169,7.4v3.2c0,0.2,0.1,0.3,0.2,0.4c0.1,0.1,0.3,0.2,0.4,0.2\n\t\t\t\th2.4c0.4,0,0.6-0.3,0.6-0.6s-0.3-0.6-0.6-0.6h-1.6h-0.2V9.8L170.3,7.4L170.3,7.4z\"\n />\n </>\n ),\n 9: (\n <>\n <path\n fill=\"none\"\n stroke=\"currentColor\"\n d=\"M186.2,3.4h7.7c1.5,0,2.7,1.2,2.7,2.7v7.7c0,1.5-1.2,2.7-2.7,2.7h-7.7\n\t\t\t\tc-1.5,0-2.7-1.2-2.7-2.7V6.1C183.4,4.6,184.7,3.4,186.2,3.4z\"\n />\n <ellipse fill=\"currentColor\" cx=\"186\" cy=\"8.9\" rx=\"0.7\" ry=\"0.7\" />\n <ellipse fill=\"currentColor\" cx=\"194\" cy=\"6.7\" rx=\"0.7\" ry=\"0.7\" />\n <path\n fill=\"none\"\n stroke=\"currentColor\"\n strokeLinecap=\"round\"\n d=\"M186,13.3l0.4-0.3c0.4-0.3,1-0.3,1.5-0.1l1,0.4\n\t\t\t\tc0.5,0.2,1,0.2,1.5-0.1l0.8-0.5c0.4-0.3,1-0.3,1.5-0.1l1.8,0.8\"\n />\n </>\n ),\n};\n\nexport function CategoryNavIcon({ category }: { category: string }) {\n const column = COLUMNS[category] ?? 0;\n return (\n <svg\n viewBox={`${column * 20} 0 20 20`}\n width=\"100%\"\n height=\"100%\"\n // Absolutely positioned over the button's padding box, matching the\n // geometry of the former background-image sprite. Percentage sizes\n // alone would resolve against the smaller content box (the button\n // reset carries padding), shrinking the glyph.\n style={{\n display: 'block',\n position: 'absolute',\n top: 0,\n left: 0,\n width: '100%',\n height: '100%',\n }}\n aria-hidden=\"true\"\n >\n {SHAPES[column] ?? null}\n </svg>\n );\n}\n","import * as React from 'react';\nimport { cx } from 'shipstyles';\n\nimport { ClassNames } from '../../DomUtils/classNames';\nimport {\n commonInteractionStyles,\n darkMode,\n stylesheet,\n} from '../../Stylesheet/stylesheet';\nimport { categoryNameFromCategoryConfig } from '../../config/categoryConfig';\nimport { CategoryConfig } from '../../types/exposedTypes';\nimport { Button } from '../atoms/Button';\n\nimport { CategoryNavIcon } from './CategoryNavIcon';\n\ntype Props = {\n isActiveCategory: boolean;\n category: string;\n allowNavigation: boolean;\n onClick: () => void;\n categoryConfig: CategoryConfig;\n customIcon?: React.ReactNode;\n};\n\nexport function CategoryButton({\n isActiveCategory,\n category,\n allowNavigation,\n categoryConfig,\n onClick,\n customIcon,\n}: Props) {\n // Priority: categoryConfig.icon > customIcon prop (from categoryIcons)\n const icon = categoryConfig.icon ?? customIcon;\n const hasCustomIcon = icon != null;\n\n return (\n <Button\n tabIndex={allowNavigation ? 0 : -1}\n className={cx(\n styles.catBtn,\n commonInteractionStyles.categoryBtn,\n hasCustomIcon ? styles.customIcon : `epr-icn-${category}`,\n {\n [ClassNames.active]: isActiveCategory,\n },\n )}\n onClick={onClick}\n aria-label={categoryNameFromCategoryConfig(categoryConfig)}\n aria-selected={isActiveCategory}\n role=\"tab\"\n aria-controls=\"epr-category-nav-id\"\n >\n {hasCustomIcon ? icon : <CategoryNavIcon category={category} />}\n </Button>\n );\n}\n\nconst DarkActiveColor = {\n color: 'var(--epr-category-icon-active-color, #6AA9DD)',\n};\nconst DarkInactiveColor = {\n color: 'var(--epr-category-icon-inactive-color, #C0C0BF)',\n};\n\nconst DarkInactivePosition = {\n ':not(.epr-search-active)': {\n catBtn: {\n ':hover': DarkActiveColor,\n '&.epr-active': DarkActiveColor,\n },\n },\n};\n\nconst styles = stylesheet.create({\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 outline: 'none',\n // Icon glyphs are inline SVGs painted with currentColor, so the fill\n // follows the --epr-category-icon-*-color variables.\n // https://github.com/ealush/emoji-picker-react/issues/399\n color: 'var(--epr-category-icon-inactive-color, #868686)',\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 customIcon: {\n '.': 'epr-cat-btn-custom-icon',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n },\n ...darkMode('catBtn', DarkInactiveColor),\n '.epr-dark-theme': {\n ...DarkInactivePosition,\n },\n '.epr-auto-theme': {\n ...DarkInactivePosition,\n },\n});\n","import * as React from 'react';\nimport { useState } from 'react';\nimport { cx } from 'shipstyles';\n\nimport { stylesheet } from '../../Stylesheet/stylesheet';\nimport { categoryFromCategoryConfig } from '../../config/categoryConfig';\nimport {\n useCategoriesConfig,\n useCategoryIconsConfig,\n} 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 { Categories } from '../../types/exposedTypes';\nimport { useCategoryNavigationRef } from '../context/ElementRefContext';\nimport { useVisibleCategoriesState } from '../context/PickerContext';\n\nimport { CategoryButton } from './CategoryButton';\n\nexport function CategoryNavigation() {\n const [activeCategory, setActiveCategory] = useState<string | null>(null);\n const [, setVisibleCategories] = useVisibleCategoriesState();\n const scrollCategoryIntoView = useScrollCategoryIntoView();\n useActiveCategoryScrollDetection({ setActiveCategory, setVisibleCategories });\n const isSearchMode = useIsSearchMode();\n\n const categoriesConfig = useCategoriesConfig();\n const categoryIcons = useCategoryIconsConfig();\n const CategoryNavigationRef = useCategoryNavigationRef();\n const hideCustomCategory = useShouldHideCustomEmojis();\n\n const visibleCategories = categoriesConfig.filter(\n categoryConfig =>\n !(isCustomCategory(categoryConfig) && hideCustomCategory),\n );\n\n // A single tab navigates nowhere — hide the bar to reclaim its space.\n // https://github.com/ealush/emoji-picker-react/issues/396\n if (visibleCategories.length <= 1) {\n return null;\n }\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 {visibleCategories.map(categoryConfig => {\n const category = categoryFromCategoryConfig(categoryConfig);\n const isActiveCategory = category === activeCategory;\n\n const allowNavigation = !isSearchMode && !isActiveCategory;\n\n return (\n <CategoryButton\n key={category}\n category={category}\n isActiveCategory={isActiveCategory}\n allowNavigation={allowNavigation}\n categoryConfig={categoryConfig}\n customIcon={categoryIcons[category as Categories]}\n onClick={() => {\n scrollCategoryIntoView(category);\n setTimeout(() => {\n setActiveCategory(category);\n }, 10);\n }}\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});\n","import * as React from 'react';\nimport { cx } from 'shipstyles';\n\nimport {\n commonInteractionStyles,\n darkMode,\n stylesheet,\n} from '../../../Stylesheet/stylesheet';\nimport { useSearchClearButtonLabelConfig } from '../../../config/useConfig';\nimport { useClearSearch } from '../../../hooks/useFilter';\nimport { Button } from '../../atoms/Button';\n\nimport SVGTimes from './svg/times.svg';\n\nexport function BtnClearSearch() {\n const clearSearch = useClearSearch();\n const searchClearButtonLabel = useSearchClearButtonLabelConfig();\n\n return (\n <Button\n className={cx(\n styles.btnClearSearch,\n commonInteractionStyles.visibleOnSearchOnly,\n )}\n onClick={clearSearch}\n aria-label={searchClearButtonLabel}\n title={searchClearButtonLabel}\n >\n <div className={cx(styles.icnClearnSearch)} />\n </Button>\n );\n}\n\nconst HoverDark = {\n ':hover': {\n '> .epr-icn-clear-search': {\n backgroundPositionY: '-60px',\n },\n },\n};\n\nconst styles = stylesheet.create({\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 backgroundImage: `url(${SVGTimes})`,\n ':hover': {\n backgroundPositionY: '-20px',\n },\n ':focus': {\n backgroundPositionY: '-20px',\n },\n },\n ...darkMode('icnClearnSearch', {\n backgroundPositionY: '-40px',\n }),\n ...darkMode('btnClearSearch', HoverDark),\n});\n","import * as React from 'react';\nimport { cx } from 'shipstyles';\n\nimport { darkMode, stylesheet } from '../../../Stylesheet/stylesheet';\n\nimport SVGMagnifier from './svg/magnifier.svg';\n\nexport function IcnSearch() {\n return <div className={cx(styles.icnSearch)} />;\n}\n\nconst styles = stylesheet.create({\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 backgroundImage: `url(${SVGMagnifier})`,\n },\n ...darkMode('icnSearch', {\n backgroundPositionY: '-20px',\n }),\n});\n","import * as React from 'react';\nimport { cx } from 'shipstyles';\n\nimport { darkMode, stylesheet } from '../../../Stylesheet/stylesheet';\nimport {\n useAutoFocusSearchConfig,\n useSearchDisabledConfig,\n useSearchPlaceHolderConfig,\n} from '../../../config/useConfig';\nimport { useCloseAllOpenToggles } from '../../../hooks/useCloseAllOpenToggles';\nimport { useFilter } from '../../../hooks/useFilter';\nimport { useIsSkinToneInSearch } from '../../../hooks/useShouldShowSkinTonePicker';\nimport Flex from '../../Layout/Flex';\nimport Relative from '../../Layout/Relative';\nimport { useSearchInputRef } from '../../context/ElementRefContext';\nimport { SkinTonePicker } from '../SkinTonePicker/SkinTonePicker';\n\nimport { BtnClearSearch } from './BtnClearSearch';\nimport { IcnSearch } from './IcnSearch';\nimport SVGTimes from './svg/times.svg';\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 closeAllOpenToggles = useCloseAllOpenToggles();\n const SearchInputRef = useSearchInputRef();\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 <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 onChange(event?.target?.value ?? value);\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 <IcnSearch />\n <BtnClearSearch />\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-border-color)',\n width: '100%',\n ':focus': {\n backgroundColor: 'var(--epr-search-input-bg-color-active)',\n border: '1px solid var(--epr-search-border-color-active)',\n },\n '::placeholder': {\n color: 'var(--epr-search-input-placeholder-color)',\n },\n },\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 backgroundImage: `url(${SVGTimes})`,\n ':hover': {\n backgroundPositionY: '-20px',\n },\n ':focus': {\n backgroundPositionY: '-20px',\n },\n },\n ...darkMode('icnClearnSearch', {\n backgroundPositionY: '-40px',\n }),\n ...darkMode('btnClearSearch', {\n ':hover > .epr-icn-clear-search': {\n backgroundPositionY: '-60px',\n },\n }),\n});\n","import * as React from 'react';\nimport { cx } from 'shipstyles';\n\nimport { commonInteractionStyles } from '../../Stylesheet/stylesheet';\nimport Relative from '../Layout/Relative';\nimport { CategoryNavigation } from '../navigation/CategoryNavigation';\n\nimport { SearchContainer } from './Search/Search';\n\nexport function Header() {\n return (\n <Relative\n className={cx('epr-header', commonInteractionStyles.hiddenOnReactions)}\n >\n <SearchContainer />\n <CategoryNavigation />\n </Relative>\n );\n}\n","import * as React from 'react';\n\nimport { PickerStyleTag } from './Stylesheet/stylesheet';\nimport { Reactions } from './components/Reactions/Reactions';\nimport { Body } from './components/body/Body';\nimport { ElementRefContextProvider } from './components/context/ElementRefContext';\nimport { PickerConfigProvider } from './components/context/PickerConfigContext';\nimport { useReactionsModeState } from './components/context/PickerContext';\nimport { PickerDataProvider } from './components/context/PickerDataContext';\nimport { Preview } from './components/footer/Preview';\nimport { Header } from './components/header/Header';\nimport PickerMain from './components/main/PickerMain';\nimport { compareConfig } from './config/compareConfig';\nimport { useAllowExpandReactions, useOpenConfig } from './config/useConfig';\n\nimport { PickerProps } from './index';\n\nfunction EmojiPicker(props: PickerProps) {\n return (\n <ElementRefContextProvider>\n <PickerStyleTag nonce={props.nonce} />\n <PickerConfigProvider {...props}>\n <PickerDataProvider>\n <ContentControl />\n </PickerDataProvider>\n </PickerConfigProvider>\n </ElementRefContextProvider>\n );\n}\n\nfunction ContentControl() {\n const [reactionsDefaultOpen] = useReactionsModeState();\n const allowExpandReactions = useAllowExpandReactions();\n\n const [renderAll, setRenderAll] = React.useState(!reactionsDefaultOpen);\n const isOpen = useOpenConfig();\n\n React.useEffect(() => {\n if (reactionsDefaultOpen && !allowExpandReactions) {\n return;\n }\n\n if (!renderAll) {\n setRenderAll(true);\n }\n }, [renderAll, allowExpandReactions, reactionsDefaultOpen]);\n\n if (!isOpen) {\n return null;\n }\n\n return (\n <PickerMain>\n <Reactions />\n <ExpandedPickerContent renderAll={renderAll} />\n </PickerMain>\n );\n}\n\nfunction ExpandedPickerContent({ renderAll }: { renderAll: boolean }) {\n if (!renderAll) {\n return null;\n }\n\n return (\n <>\n <Header />\n <Body />\n <Preview />\n </>\n );\n}\n\n// eslint-disable-next-line complexity\nexport default React.memo(EmojiPicker, compareConfig);\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 CategoryIcons,\n CategoryConfig,\n} from './types/exposedTypes';\n\nexport { emojiByUnified } from './dataUtils/emojiSelectors';\n\nexport interface PickerProps extends PickerConfig {}\nexport type Props = PickerProps;\n\nexport default function EmojiPicker(props: PickerProps) {\n const MutableConfigRef = useDefineMutableConfig({\n onEmojiClick: props.onEmojiClick,\n onReactionClick: props.onReactionClick,\n onSkinToneChange: props.onSkinToneChange,\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","hidden","display","opacity","pointerEvents","visibility","overflow","commonStyles","create","_extends","PickerStyleTag","React","_ref","nonce","suppressHydrationWarning","dangerouslySetInnerHTML","__html","getStyle","commonInteractionStyles","categoryBtn","color","hiddenOnSearch","visibleOnSearchOnly","hiddenOnReactions","transition","height","width","darkMode","key","value","_eprDarkTheme","_eprAutoTheme","compareConfig","prev","next","prevCustomEmojis","_prev$customEmojis","customEmojis","nextCustomEmojis","_next$customEmojis","open","emojiVersion","reactionsDefaultOpen","searchPlaceHolder","searchPlaceholder","searchClearButtonLabel","defaultSkinTone","skinTonesDisabled","autoFocusSearch","emojiStyle","theme","suggestedEmojisMode","lazyLoadEmojis","className","style","searchDisabled","skinTonePickerLocation","length","emojiData","DEFAULT_REACTIONS","SuggestionMode","EmojiStyle","Theme","SkinTones","Categories","SkinTonePickerLocation","CDN_URL_APPLE","CDN_URL_FACEBOOK","CDN_URL_TWITTER","CDN_URL_GOOGLE","cdnUrl","TWITTER","GOOGLE","FACEBOOK","APPLE","skinToneVariations","NEUTRAL","LIGHT","MEDIUM_LIGHT","MEDIUM","MEDIUM_DARK","DARK","skinTonesNamed","Object","entries","reduce","acc","skinTonesMapped","mapped","skinTone","_Object$assign","assign","EmojiProperties","emojiNames","emoji","_emoji$EmojiPropertie","name","addedIn","parseFloat","added_in","emojiName","names","unifiedWithoutSkinTone","unified","splat","split","_splat$splice","splice","emojiUnified","emojiHasVariations","_emojiVariationUnifie","emojiVariationUnified","emojiUrlByUnified","emojiVariations","_emoji$EmojiPropertie2","variations","find","variation","includes","activeVariationFromUnified","_unified$split","suspectedSkinTone","keys","categoriesOrdered","SUGGESTED","CUSTOM","SMILEYS_PEOPLE","ANIMALS_NATURE","FOOD_DRINK","TRAVEL_PLACES","ACTIVITIES","OBJECTS","SYMBOLS","FLAGS","SuggestedRecent","category","configByCategory","_configByCategory","baseCategoriesConfig","modifiers","categoryFromCategoryConfig","categoryNameFromCategoryConfig","mergeCategoriesConfig","userCategoriesConfig","extra","fromData","categories","fromEntries","filter","config","suggestionMode","RECENT","_emojiData$categories","recentConfig","base","_userCategoriesConfig","getBaseConfigByCategory","modifier","KNOWN_FAILING_EMOJIS","DEFAULT_SEARCH_PLACEHOLDER","DEFAULT_SEARCH_CLEAR_BUTTON_LABEL","SEARCH_RESULTS_NO_RESULTS_FOUND","SEARCH_RESULTS_SUFFIX","SEARCH_RESULTS_ONE_RESULT_FOUND","SEARCH_RESULTS_MULTIPLE_RESULTS_FOUND","mergeConfig","userConfig","basePickerConfig","localizedMood","_userConfig$emojiData","_userConfig$emojiData2","_userConfig$emojiData3","preview_mood","previewConfig","_userConfig$previewCo","defaultCaption","_userConfig$previewCo2","hiddenEmojis","forEach","unicodeToHide","add","PREVIEW","getEmojiUrl","basePreviewConfig","SEARCH","FREQUENT","Set","reactions","allowExpandReactions","undefined","categoryIcons","defaultEmoji","showPreview","ConfigContext","PickerConfigProvider","children","_objectWithoutPropertiesLoose","_excluded","mergedConfig","useSetConfig","Provider","_React$useState","setMergedConfig","_config$customEmojis","usePickerConfig","useDebouncedState","initialValue","delay","_useState","useState","state","setState","timer","useRef","debouncedSetState","Promise","resolve","current","clearTimeout","setTimeout","emojiByUnified","allEmojisByUnified","withoutSkinTone","allEmojis","values","emojis","flat","Emoji","SUGGESTED_LS_KEY","getSuggested","mode","_window$localStorage$","window","localStorage","recent","JSON","parse","getItem","sort","a","b","count","_unused","setSuggested","originalUnified","existing","u","nextList","concat","i","original","Math","min","setItem","stringify","_unused2","useIsMounted","isMounted","setIsMounted","PickerDataContext","createContext","searchIndex","PickerDataProvider","_usePickerConfig","genericEmojiData","data","useMemo","defaultEmojiData","newData","customToRegularEmoji","Keys","_emoji$Keys$variation","joinedNameString","toLowerCase","char","_searchIndex$_char","useCallback","result","_data$allEmojisByUnif","usePickerDataContext","useContext","useGetEmojisByCategory","_usePickerDataContext","suggestedEmojisModeConfig","useSuggestedEmojisModeConfig","_useUpdateSuggested","useUpdateSuggested","suggestedUpdated","suggested","_getSuggested","s","_extends2","Boolean","getEmojisByCategory","_emojiData$emojis$cat","_emojiData$emojis","_ref2","id","imgUrl","useIsUnicodeHidden","useUnicodeToHide","has","useDisallowedEmojis","DisallowedEmojisRef","emojiVersionConfig","useEmojiVersionConfig","Number","isNaN","disallowedEmojis","addedInNewerVersion","useIsEmojiDisallowed","isUnicodeHidden","isEmojiDisallowed","supportedLevel","useMarkInitialLoad","dispatch","useEffect","PickerContextProvider","useDefaultSkinToneConfig","useReactionsOpenConfig","filterRef","disallowClickRef","disallowMouseRef","disallowedEmojisRef","suggestedUpdateState","Date","now","searchTerm","skinToneFanOpenState","activeSkinTone","activeCategoryState","emojisThatFailedToLoadState","emojiVariationPickerState","reactionsModeState","isPastInitialLoad","setIsPastInitialLoad","visibleCategoriesState","emojiSizeState","PickerContext","useFilterRef","_React$useContext","useDisallowClickRef","_React$useContext2","useDisallowMouseRef","_React$useContext3","useReactionsModeState","_React$useContext4","useSearchTermState","_React$useContext5","useActiveSkinToneState","_React$useContext6","useEmojisThatFailedToLoadState","_React$useContext7","useEmojiVariationPickerState","_React$useContext9","useSkinToneFanOpenState","_React$useContext0","useVisibleCategoriesState","_React$useContext10","useEmojiSizeState","_React$useContext11","_React$useContext12","setsuggestedUpdate","updateSuggested","MutableConfigContext","useMutableConfig","mutableConfig","useDefineMutableConfig","MutableConfigRef","onEmojiClick","emptyFunc","onReactionClick","onSkinToneChange","MOUSE_EVENT_SOURCE","useSearchPlaceHolderConfig","_find","p","useSearchClearButtonLabelConfig","_usePickerConfig2","_usePickerConfig3","useAllowExpandReactions","_usePickerConfig4","useSkinTonesDisabledConfig","_usePickerConfig5","useEmojiStyleConfig","_usePickerConfig6","useAutoFocusSearchConfig","_usePickerConfig7","useCategoriesConfig","_usePickerConfig8","useCategoryIconsConfig","_usePickerConfig9","useCustomEmojisConfig","_usePickerConfig0","useOpenConfig","_usePickerConfig1","useOnEmojiClickConfig","mouseEventSource","_useMutableConfig","_useReactionsModeStat","setReactionsOpen","handler","REACTIONS","args","apply","collapseToReactions","o","_len2","_key2","useOnSkinToneChangeConfig","_useMutableConfig2","usePreviewConfig","_usePickerConfig10","useThemeConfig","_usePickerConfig11","_usePickerConfig12","useLazyLoadEmojisConfig","_usePickerConfig13","useClassNameConfig","_usePickerConfig14","useStyleConfig","_usePickerConfig15","getDimension","_usePickerConfig16","_usePickerConfig17","useSearchDisabledConfig","_usePickerConfig18","useSkinTonePickerLocationConfig","_usePickerConfig19","_usePickerConfig20","useReactionsConfig","_usePickerConfig21","useGetEmojiUrlConfig","_usePickerConfig22","dimensionConfig","useSearchResultsConfig","searchResultsCount","hasResults","isPlural","replace","toString","useIsSearchMode","_useSearchTermState","focusElement","element","shouldFocus","requestAnimationFrame","focus","focusPrevElementSibling","previousElementSibling","focusNextElementSibling","nextElementSibling","focusFirstElementChild","first","firstElementChild","getActiveElement","document","activeElement","ElementRefContextProvider","PickerMainRef","AnchoredEmojiRef","BodyRef","EmojiListRef","SearchInputRef","SkinTonePickerRef","CategoryNavigationRef","VariationPickerRef","ReactionsRef","ElementRefContext","useElementRef","useEmojiListRef","usePickerMainRef","useAnchoredEmojiRef","useSetAnchoredEmojiRef","target","useBodyRef","useReactionsRef","useSearchInputRef","useSkinTonePickerRef","useCategoryNavigationRef","useVariationPickerRef","scrollTo","root","top","$eprBody","queryScrollBody","scrollTop","scrollBy","by","useScrollTo","scrollEmojiAboveLabel","isEmojiBehindLabel","closest","variationPicker","scrollBody","closestScrollBody","emojiDistanceFromScrollTop","categoryLabelHeight","closestCategory","focusFirstVisibleEmoji","parent","firstVisibleEmoji","focusAndClickFirstVisibleEmoji","firstEmoji","click","focusLastVisibleEmoji","lastVisibleEmoji","focusNextVisibleEmoji","nextVisibleEmoji","nextCategory","focusPrevVisibleEmoji","prevVisibleEmoji","prevCategory","focusVisibleEmojiOneRowUp","exitUp","visibleEmojiOneRowUp","focusVisibleEmojiOneRowDown","visibleEmojiOneRowDown","categoryContent","closestCategoryContent","countInRow","elementCountInRow","emojisInCurrentCategory","allVisibleEmojis","currentEmojiIndex","indexOf","indexInRow","prevVisibleCategory","allPrevEmojis","lastIndexInRow","at","remainder","firstInNextRow","nextVisibleCategory","emojisInNextCategory","_emojisInNextCategory","useCloseAllOpenToggles","_useEmojiVariationPic","setVariationPicker","_useSkinToneFanOpenSt","skinToneFanOpen","setSkinToneFanOpen","closeAllOpenToggles","useHasOpenToggles","_useEmojiVariationPic2","_useSkinToneFanOpenSt2","hasOpenToggles","useDisallowMouseMove","DisallowMouseRef","disallowMouseMove","useAllowMouseMove","allowMouseMove","useIsMouseDisallowed","isMouseDisallowed","useOnMouseMove","bodyRef","addEventListener","onMouseMove","passive","removeEventListener","useFocusSearchInput","useFocusSkinTonePicker","useFocusCategoryNavigation","useSetFilterRef","setFilter","setter","useClearSearch","applySearch","useApplySearch","focusSearchInput","clearSearch","useAppendSearch","appendSearch","str","getNormalizedSearchTerm","useFilter","setFilterRef","statusSearchResults","getStatusSearchResults","onChange","inputValue","nextValue","longestMatch","findLongestMatch","filterEmojiObjectByKeyword","_useSearchTermState2","setSearchTerm","then","keyword","filtered","hasMatch","some","useIsEmojiFiltered","_useFilterRef","_useSearchTermState3","isEmojiFilteredBySearchTerm","_filter$searchTerm","dict","longestMatchingKey","trim","filterState","_Object$entries","useSetVariationPicker","setAnchoredEmojiRef","setEmojiVariationPicker","_allUnifiedFromEmojiE","allUnifiedFromEmojiElement","resolvedUnified","useIsSkinToneInSearch","skinTonePickerLocationConfig","useIsSkinToneInPreview","KeyboardEvents","useKeyboardNavigation","usePickerMainKeyboardEvents","useSearchInputKeyboardEvents","useSkinTonePickerKeyboardEvents","useCategoryNavigationKeyboardEvents","useReactionsKeyboardEvents","useBodyKeyboardEvents","onKeyDown","event","Escape","preventDefault","focusSkinTonePicker","setSkinToneFanOpenState","goDownFromSearchInput","useGoDownFromSearchInput","isSkinToneInSearch","ArrowRight","ArrowDown","Enter","isOpen","setIsOpen","isSkinToneInPreview","onType","useOnType","ArrowLeft","focusNextSkinTone","focusPrevSkinTone","ArrowUp","reactionsOpen","delta","reactionFocusDelta","focusReactionSibling","buttons","from","querySelectorAll","activeIndex","sibling","goUpFromBody","useGoUpFromBody","buttonFromTarget","Space","focusCategoryNavigation","isSearchMode","goUpFromEmoji","exitLeft","currentSkinTone","hasNextElementSibling","hasModifier","match","metaKey","ctrlKey","altKey","preloadEmojiIfNeeded","emojiStyles","clientHeight","topOffset","dimensions","NATIVE","preloadedEmojs","emojiTop","viewportBottom","isJustBelowViewport","emojiSize","preloadEmoji","emojiUrl","preloadImage","url","image","Image","src","useOnFocus","onFocus","button","_emojiFromElement","emojiFromElement","DEFAULT_LABEL_HEIGHT","PickerMain","PickerRootElement","reactionsMode","searchModeActive","_ref3","styleProps","cx","styles","main","baseVariables","darkTheme","AUTO","autoThemeDark","_cx","searchActive","reactionsMenu","ref","DarkTheme","emojiPicker","position","flexDirection","borderWidth","borderStyle","borderRadius","borderColor","backgroundColor","boxSizing","fontFamily","autoTheme","backdropFilter","declared","_parent$dataset","dataset","emojisPerRow","isInteger","parentWidth","getBoundingClientRect","elementWidth","floor","firstVisibleElementInContainer","elements","maxVisibilityDiffThreshold","parentTop","parentBottom","bottom","parentTopWithLabel","getLabelHeight","visibleElements","elementTop","elementBottom","maxVisibilityDiffPixels","elementTopWithAllowedDiff","elementBottomWithAllowedDiff","parentNode","label","querySelector","EmojiButtonSelector","VisibleEmojiSelector","visible","emojiElement","_emojiElement$closest","originalUnifiedFromEmojiElement","unifiedFromEmojiElement","isEmojiElement","matches","_element$parentElemen","parentElement","elementHeight","_element$clientHeight","emojiTrueOffsetTop","labelHeight","elementOffsetTop","categoryWithoutLabel","_category$clientHeigh","_categoryWithoutLabel","_closestScrollBody$sc","_closestScrollBody","_element$closest","emojiTruOffsetLeft","elementOffsetLeft","_element$offsetTop","offsetTop","_element$offsetLeft","offsetLeft","_elementDataSetKey","elementDataSetKey","_elementDataSet$key","elementDataSet","_element$dataset","isVisibleEmoji","classList","contains","isHidden","_allEmojis$slice","slice","last","parseNativeEmoji","hex","String","fromCodePoint","parseInt","isCustomCategory","isCustomEmoji","useMouseDownHandlers","ContainerRef","mouseDownTimerRef","_useActiveSkinToneSta","activeEmojiStyle","onClick","_emojiFromEvent","emojiFromEvent","skinToneToUse","emojiClickOutput","onMouseDown","_emojiFromEvent2","onMouseUp","confainerRef","lookupEmojiByUnified","getImageUrl","imageUrl","isCustom","Button","props","type","cursor","border","outline","ClickableEmojiButton","_ref$showVariations","showVariations","hasVariations","_ref$noBackground","noBackground","getAriaLabel","alignItems","justifyContent","maxWidth","maxHeight","background","content","right","borderLeft","borderRight","transform","borderBottom","zIndex","external","fontSize","common","alignSelf","justifySelf","EmojiImg","_ref$lazyLoad","lazyLoad","onError","alt","emojiImag","loading","minWidth","minHeight","padding","NativeEmoji","nativeEmoji","lineHeight","textAlign","letterSpacing","ViewOnlyEmoji","size","_ref$getEmojiUrl","_useEmojisThatFailedT","setEmojisThatFailedToLoad","emojiToRender","ClickableEmoji","buttonClassName","BtnPlus","setReactionsMode","title","tabIndex","plusSign","backgroundImage","Plus","backgroundRepeat","backgroundSize","backgroundPositionY","Reactions","list","reaction","emojiButton","reactionButton","listStyle","margin","useOnScroll","setScrollTop","onScroll","_bodyRef$scrollTop","shouldVirtualize","emojiBottom","isVisible","getEmojiPositionStyle","index","left","EMOJI_SIZE_DEFAULT","useCategoryHeight","emojiCount","isReactionsMode","emojiSizeRef","_useVisibleCategories","visibleCategories","_useEmojiSizeState","emojiSizeFromContext","setDimensions","computeAndSetDimensions","listEl","measured","pickerWidth","clientWidth","max","rowCount","ceil","categoryHeight","rootEl","e","te","prop","propertyName","queueMicrotask","useIsEmojiHidden","emojisThatFailedToLoad","isEmojiFiltered","failedToLoad","filteredOut","useEmojiVirtualization","categoryEmojis","onHeightReady","isCategoryVisible","isEmojiHidden","virtualizedCounter","emojisToPush","isDisallowed","_isEmojiHidden","isVirtualized","_BodyRef$current$clie","_BodyRef$current","accumulator","_BodyRef$current$clie2","_BodyRef$current2","push","EmojiCategory","categoryConfig","categoryName","role","gridGap","gridTemplateColumns","fontWeight","textTransform","useIsomorphicLayoutEffect","MeasureEmoji","setEmojiSize","firstCategory","dummyEmoji","EmojiList","categoryHeights","setCategoryHeights","emojiList","currentOffset","RenderCategory","isFirstCategory","_useEmojiVirtualizati","Direction","EmojiVariationPicker","_useVariationPickerTo","useVariationPickerTop","getTop","getMenuDirection","getPointerStyle","usePointerStyle","pointerStyle","Down","pointingUp","pointer","direction","Up","emojiOffsetTop","buttonHeight","boxShadow","transformOrigin","backgroundPosition","SVGTriangle","Body","PICKER","body","flex","overflowY","overflowX","useEmojiPreviewEvents","allow","setPreviewEmoji","onEscape","onMouseOver","onEnter","onLeave","relatedTarget","_allUnifiedFromEmojiE2","isExternalElementFocused","active","documentElement","_PickerMainRef$curren","FlexDirection","Flex","_ref$style","_ref$direction","ROW","_stylesheet$create","COLUMN","Absolute","Relative","BtnSkinToneVariation","isActive","skinToneVariation","tone","closedTone","ITEM_SIZE","SkinTonePickerMenu","SkinTonePicker","SkinTonePickerDirection","VERTICAL","HORIZONTAL","isDisabled","setActiveSkinTone","fullWidth","expandedSize","vertical","skinTones","verticalShadow","flexBasis","select","Preview","preview","hideOnReactions","PreviewBody","previewEmoji","variationPickerEmoji","_previewEmoji$unified","show","PreviewContent","defaultText","borderTop","categoryNameFromDom","$category","_$category$getAttribu","getAttribute","useActiveCategoryScrollDetection","setActiveCategory","setVisibleCategories","Map","intersectingCategories","observer","IntersectionObserver","_iterator","_createForOfIteratorHelperLoose","_step","done","entry","set","intersectionRatio","isIntersecting","ratios","visibleCats","ratio","get","lastCategory","_i","_ratios","_ratios$_i","threshold","el","observe","disconnect","useScrollCategoryIntoView","scrollCategoryIntoView","useShouldHideCustomEmojis","customCategoryConfig","COLUMNS","smileys_people","animals_nature","food_drink","travel_places","activities","objects","symbols","flags","custom","SHAPES","fill","stroke","strokeWidth","strokeMiterlimit","d","strokeLinecap","fillRule","clipRule","cy","rx","ry","CategoryNavIcon","column","_COLUMNS$category","viewBox","_SHAPES$column","CategoryButton","isActiveCategory","allowNavigation","customIcon","icon","_categoryConfig$icon","hasCustomIcon","catBtn","DarkActiveColor","DarkInactiveColor","DarkInactivePosition","CategoryNavigation","activeCategory","categoriesConfig","hideCustomCategory","nav","BtnClearSearch","btnClearSearch","icnClearnSearch","HoverDark","SVGTimes","IcnSearch","icnSearch","SVGMagnifier","SearchContainer","overlay","Search","placeholder","autoFocus","_useFilter","input","searchContainer","search","_event$target$value","_event$target","visuallyHidden","clip","clipPath","whiteSpace","Header","EmojiPicker","ContentControl","renderAll","setRenderAll","ExpandedPickerContent","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.tsx","../src/config/compareConfig.ts","../src/components/Reactions/DEFAULT_REACTIONS.ts","../src/types/exposedTypes.ts","../src/config/cdnUrls.ts","../src/data/skinToneVariations.ts","../src/dataUtils/DataTypes.ts","../src/dataUtils/emojiUtils.ts","../src/config/categoryConfig.ts","../src/config/config.ts","../src/components/context/PickerConfigContext.tsx","../src/hooks/useDebouncedState.ts","../src/dataUtils/emojiSelectors.ts","../src/dataUtils/suggested.ts","../src/hooks/useIsMounted.ts","../src/components/context/PickerDataContext.tsx","../src/hooks/useHideEmojisByUniocode.ts","../src/hooks/useDisallowedEmojis.ts","../src/hooks/useInitialLoad.ts","../src/components/context/PickerContext.tsx","../src/config/mutableConfig.ts","../src/config/useConfig.ts","../src/hooks/useIsSearchMode.ts","../src/DomUtils/focusElement.ts","../src/DomUtils/getActiveElement.ts","../src/components/context/ElementRefContext.tsx","../src/DomUtils/scrollTo.ts","../src/DomUtils/keyboardNavigation.ts","../src/hooks/useCloseAllOpenToggles.ts","../src/hooks/useDisallowMouseMove.ts","../src/hooks/useFocus.ts","../src/hooks/useFilter.ts","../src/hooks/useSetVariationPicker.ts","../src/hooks/useShouldShowSkinTonePicker.ts","../src/hooks/useKeyboardNavigation.ts","../src/hooks/preloadEmoji.ts","../src/hooks/useOnFocus.ts","../src/components/main/PickerMain.tsx","../src/DomUtils/elementPositionInRow.ts","../src/DomUtils/selectors.ts","../src/dataUtils/parseNativeEmoji.ts","../src/typeRefinements/typeRefinements.ts","../src/hooks/useMouseDownHandlers.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/Reactions/BtnPlus.tsx","../src/components/Reactions/Reactions.tsx","../src/hooks/useOnScroll.ts","../src/virtualization/virtualizationHelpers.ts","../src/hooks/useCategoryHeight.ts","../src/hooks/useIsEmojiHidden.ts","../src/hooks/useEmojiVirtualization.tsx","../src/components/body/EmojiCategory.tsx","../src/hooks/useIsomorphicLayoutEffect.ts","../src/components/body/MeasureEmoji.tsx","../src/components/body/EmojiList.tsx","../src/components/body/EmojiVariationPicker.tsx","../src/components/body/Body.tsx","../src/DomUtils/detectEmojyPartiallyBelowFold.ts","../src/hooks/useEmojiPreviewEvents.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/BtnSkinToneVariation.tsx","../src/components/header/SkinTonePicker/SkinTonePicker.tsx","../src/components/footer/Preview.tsx","../src/DomUtils/categoryNameFromDom.ts","../src/hooks/useActiveCategoryScrollDetection.ts","../src/hooks/useScrollCategoryIntoView.ts","../src/hooks/useShouldHideCustomEmojis.ts","../src/components/navigation/CategoryNavIcon.tsx","../src/components/navigation/CategoryButton.tsx","../src/components/navigation/CategoryNavigation.tsx","../src/components/header/Search/BtnClearSearch.tsx","../src/components/header/Search/IcnSearch.tsx","../src/components/header/Search/Search.tsx","../src/components/header/Header.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 * as React from 'react';\nimport { Styles, createSheet } from 'shipstyles';\n\nimport { ClassNames } from '../DomUtils/classNames';\n\nexport const stylesheet = createSheet('epr', null);\n\nconst hidden = {\n display: 'none',\n opacity: '0',\n pointerEvents: 'none',\n visibility: 'hidden',\n overflow: 'hidden',\n};\n\nexport const commonStyles = stylesheet.create({\n hidden: {\n '.': ClassNames.hidden,\n ...hidden,\n },\n});\n\nexport const PickerStyleTag = React.memo(function PickerStyleTag({\n nonce,\n}: {\n nonce?: string;\n}) {\n return (\n <style\n nonce={nonce}\n suppressHydrationWarning\n dangerouslySetInnerHTML={{ __html: stylesheet.getStyle() }}\n />\n );\n});\n\nexport const commonInteractionStyles = stylesheet.create({\n '.epr-main': {\n ':has(input:not(:placeholder-shown))': {\n categoryBtn: {\n ':hover': {\n opacity: '1',\n color: 'var(--epr-category-icon-active-color, #3371B7)',\n },\n },\n hiddenOnSearch: {\n '.': ClassNames.hiddenOnSearch,\n ...hidden,\n },\n },\n ':has(input:placeholder-shown)': {\n visibleOnSearchOnly: hidden,\n },\n },\n hiddenOnReactions: {\n transition: 'all 0.5s ease-in-out',\n },\n '.epr-reactions': {\n hiddenOnReactions: {\n height: '0px',\n width: '0px',\n opacity: '0',\n pointerEvents: 'none',\n overflow: 'hidden',\n },\n },\n '.EmojiPickerReact:not(.epr-search-active)': {\n categoryBtn: {\n ':hover': {\n opacity: '1',\n color: 'var(--epr-category-icon-active-color, #3371B7)',\n },\n '&.epr-active': {\n opacity: '1',\n color: 'var(--epr-category-icon-active-color, #3371B7)',\n },\n },\n visibleOnSearchOnly: {\n '.': 'epr-visible-on-search-only',\n ...hidden,\n },\n },\n});\n\nexport function darkMode(key: string, value: Styles) {\n return {\n '.epr-dark-theme': {\n [key]: value,\n },\n '.epr-auto-theme': {\n [key]: {\n '@media (prefers-color-scheme: dark)': value,\n },\n },\n };\n}\n","import { PickerConfig } from './config';\n\n// eslint-disable-next-line complexity\nexport function compareConfig(prev: PickerConfig, next: PickerConfig) {\n const prevCustomEmojis = prev.customEmojis ?? [];\n const nextCustomEmojis = next.customEmojis ?? [];\n return (\n prev.open === next.open &&\n prev.emojiVersion === next.emojiVersion &&\n prev.reactionsDefaultOpen === next.reactionsDefaultOpen &&\n prev.searchPlaceHolder === next.searchPlaceHolder &&\n prev.searchPlaceholder === next.searchPlaceholder &&\n prev.searchClearButtonLabel === next.searchClearButtonLabel &&\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 prev.emojiData === next.emojiData\n );\n}\n","export const DEFAULT_REACTIONS = [\n '1f44d', // 👍\n '2764-fe0f', // ❤️\n '1f603', // 😃\n '1f622', // 😢\n '1f64f', // 🙏\n '1f44e', // 👎\n '1f621', // 😡\n];\n","import * as React from 'react';\n\nexport 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 type CategoryConfig = {\n category: Categories;\n name: string;\n icon?: React.ReactNode;\n};\n\nexport type CategoryIcons = Partial<Record<Categories, React.ReactNode>>;\n\nexport type EmojiData = {\n categories: Partial<Record<Categories, CategoryConfig>>;\n emojis: Record<string, DataEmoji[]>;\n};\n\nexport interface DataEmoji {\n n: string[];\n u: string;\n v?: string[];\n a: string;\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 { 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<string, string> =\n skinToneVariations.reduce(\n (mapped, skinTone) =>\n Object.assign(mapped, {\n [skinTone]: skinTone,\n }),\n {},\n );\n\nexport default skinToneVariations;\n","import { Categories } from '../types/exposedTypes';\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 = Categories;\n\nexport type WithName = {\n [EmojiProperties.name]: string[];\n};\n","import { cdnUrl } from '../config/cdnUrls';\nimport { skinTonesMapped } from '../data/skinToneVariations';\nimport { EmojiStyle, SkinTones } from '../types/exposedTypes';\n\nimport { DataEmoji, EmojiProperties, WithName } from './DataTypes';\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] || '0');\n}\n\nexport function emojiName(emoji?: WithName): string {\n if (!emoji) {\n return '';\n }\n\n const names = emojiNames(emoji);\n return names[names.length - 1];\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 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 activeVariationFromUnified(unified: string): SkinTones | null {\n const [, suspectedSkinTone] = unified.split('-') as [string, SkinTones];\n return Object.keys(skinTonesMapped).includes(suspectedSkinTone)\n ? suspectedSkinTone\n : null;\n}\n","import {\n Categories,\n CategoryConfig,\n EmojiData,\n SuggestionMode,\n} 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 UserCategoryConfig = Array<Categories | CategoryConfig>;\n\nexport function mergeCategoriesConfig(\n userCategoriesConfig: UserCategoryConfig = [],\n modifiers: CategoryConfigModifiers = {},\n emojiData?: EmojiData,\n): CategoriesConfig {\n const extra = ((): Record<Categories, CategoryConfig> => {\n // 1. Start with localized categories from emojiData\n const fromData = emojiData?.categories\n ? (Object.fromEntries(\n Object.entries(emojiData.categories).filter(([, config]) => !!config),\n ) as Record<Categories, CategoryConfig>)\n : ({} as Record<Categories, CategoryConfig>);\n\n // 2. Handle \"Recently Used\" override for explicit 'recent' mode\n if (modifiers.suggestionMode === SuggestionMode.RECENT) {\n const recentConfig = (\n emojiData?.categories as Record<string, CategoryConfig | undefined>\n )?.['suggested_recent'];\n fromData[Categories.SUGGESTED] = recentConfig\n ? { category: Categories.SUGGESTED, name: recentConfig.name }\n : SuggestedRecent;\n }\n\n return fromData;\n })();\n\n const base = baseCategoriesConfig(extra);\n\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 * as React from 'react';\n\nimport { DEFAULT_REACTIONS } from '../components/Reactions/DEFAULT_REACTIONS';\nimport { GetEmojiUrl } from '../components/emoji/BaseEmojiProps';\nimport { emojiUrlByUnified } from '../dataUtils/emojiUtils';\nimport {\n CategoryIcons,\n EmojiClickData,\n EmojiData,\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 DEFAULT_SEARCH_CLEAR_BUTTON_LABEL = 'Clear';\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 // Get localized mood from emojiData, fallback to base default\n // Get localized mood from emojiData, fallback to base default\n const localizedMood = (\n userConfig.emojiData?.categories as Record<\n string,\n { name: string } | undefined\n >\n )?.preview_mood?.name;\n\n const previewConfig = {\n ...base.previewConfig,\n // Localized mood is default, but user can override\n ...(localizedMood && !userConfig.previewConfig?.defaultCaption\n ? { defaultCaption: localizedMood }\n : {}),\n ...(userConfig.previewConfig ?? {}),\n };\n\n const config = Object.assign(base, userConfig);\n\n const categories = mergeCategoriesConfig(\n userConfig.categories,\n {\n suggestionMode: config.suggestedEmojisMode,\n },\n userConfig.emojiData,\n );\n\n config.hiddenEmojis.forEach((emoji) => {\n config.unicodeToHide.add(emoji);\n });\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 searchClearButtonLabel: DEFAULT_SEARCH_CLEAR_BUTTON_LABEL,\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 reactionsDefaultOpen: false,\n reactions: DEFAULT_REACTIONS,\n open: true,\n allowExpandReactions: true,\n hiddenEmojis: [],\n emojiData: undefined,\n categoryIcons: {},\n nonce: undefined,\n };\n}\n\nexport type PickerConfigInternal = {\n emojiVersion: string | null;\n searchPlaceHolder: string;\n searchPlaceholder: string;\n searchClearButtonLabel: 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 reactionsDefaultOpen: boolean;\n reactions: string[];\n open: boolean;\n allowExpandReactions: boolean;\n hiddenEmojis: string[];\n emojiData?: EmojiData;\n categoryIcons: CategoryIcons;\n nonce?: string;\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: MouseDownEvent;\n onReactionClick: MouseDownEvent;\n onSkinToneChange: OnSkinToneChange;\n} & Omit<PickerConfigInternal, 'previewConfig' | 'unicodeToHide'>;\n\nexport type PickerConfig = Partial<ConfigExternal>;\n\nexport type PickerDimensions = string | number;\n\nexport type MouseDownEvent = (\n emoji: EmojiClickData,\n event: MouseEvent,\n api?: OnEmojiClickApi,\n) => void;\nexport type OnSkinToneChange = (emoji: SkinTones) => void;\n\ntype OnEmojiClickApi = {\n collapseToReactions: () => void;\n};\n","import * as React from 'react';\n\nimport { compareConfig } from '../../config/compareConfig';\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 =\n React.createContext<PickerConfigInternal>(basePickerConfig());\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 (compareConfig(mergedConfig, config)) {\n return;\n }\n setMergedConfig(mergeConfig(config));\n // not gonna...\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [\n config.customEmojis?.length,\n config.open,\n config.emojiVersion,\n config.reactionsDefaultOpen,\n config.searchPlaceHolder,\n config.searchPlaceholder,\n config.searchClearButtonLabel,\n config.defaultSkinTone,\n config.skinTonesDisabled,\n config.autoFocusSearch,\n config.emojiStyle,\n config.theme,\n config.suggestedEmojisMode,\n config.lazyLoadEmojis,\n config.className,\n config.height,\n config.width,\n config.searchDisabled,\n config.skinTonePickerLocation,\n config.allowExpandReactions,\n config.emojiData,\n ]);\n\n return mergedConfig;\n}\n\nexport function usePickerConfig() {\n return React.useContext(ConfigContext);\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<ReturnType<typeof setTimeout> | 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 = setTimeout(() => {\n setState(value);\n resolve(value);\n }, delay);\n });\n }\n\n return [state, debouncedSetState];\n}\n","// Pure data helpers plus the legacy global registry. This module intentionally\n// imports no React components, hooks, or context providers so it can never\n// form an import cycle with them. Context-aware lookups live in\n// components/context/PickerDataContext instead.\nimport { 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 const names = emojiNames(emoji);\n return names[names.length - 1];\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\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.emojis).flat();\n\nexport function setCustomEmojis(customEmojis: CustomEmoji[]): void {\n emojis.emojis[Categories.CUSTOM].length = 0;\n\n customEmojis.forEach((emoji) => {\n const emojiData = customToRegularEmoji(emoji);\n\n emojis.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\nallEmojis.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\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 { SkinTones, SuggestionMode } from '../types/exposedTypes';\n\nimport { DataEmoji } from './DataTypes';\nimport { emojiUnified } from './emojiUtils';\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 (typeof window === 'undefined' || !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 if (typeof window === 'undefined') {\n return;\n }\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 * as React from 'react';\n\nexport function useIsMounted() {\n const [isMounted, setIsMounted] = React.useState(false);\n\n React.useEffect(() => {\n setIsMounted(true);\n }, []);\n\n return isMounted;\n}\n","import React from 'react';\n\nimport { CustomEmoji } from '../../config/customEmojiConfig';\nimport { useSuggestedEmojisModeConfig } from '../../config/useConfig';\nimport defaultEmojiData from '../../data/emojis';\nimport {\n DataEmoji,\n DataEmojis,\n EmojiProperties,\n EmojiProperties as Keys,\n} from '../../dataUtils/DataTypes';\nimport { emojiByUnified } from '../../dataUtils/emojiSelectors';\nimport {\n activeVariationFromUnified,\n unifiedWithoutSkinTone,\n} from '../../dataUtils/emojiUtils';\nimport { getSuggested } from '../../dataUtils/suggested';\nimport { useIsMounted } from '../../hooks/useIsMounted';\nimport { Categories, EmojiData, SkinTones } from '../../types/exposedTypes';\n\nimport { usePickerConfig } from './PickerConfigContext';\nimport { useUpdateSuggested } from './PickerContext';\n\nexport interface PickerDataContextValue {\n emojiData: EmojiData;\n allEmojis: DataEmojis;\n allEmojisByUnified: Record<string, DataEmoji>;\n searchIndex: Record<string, Record<string, DataEmoji>>;\n emojiByUnified: (unified?: string) => DataEmoji | undefined;\n activeVariationFromUnified: (unified: string) => SkinTones | null;\n}\n\nconst PickerDataContext = React.createContext<PickerDataContextValue>({\n emojiData: {} as EmojiData,\n allEmojis: [],\n allEmojisByUnified: {},\n searchIndex: {},\n emojiByUnified,\n activeVariationFromUnified: () => null,\n});\n\nexport function PickerDataProvider({\n children,\n}: {\n children: React.ReactNode;\n}) {\n const { customEmojis, emojiData: genericEmojiData } = usePickerConfig();\n\n const data = React.useMemo(() => {\n const emojiData = genericEmojiData || (defaultEmojiData as EmojiData);\n\n // Clone to avoid mutation of shared source\n const newData: EmojiData = JSON.parse(JSON.stringify(emojiData));\n\n if (customEmojis && customEmojis.length > 0) {\n newData.emojis[Categories.CUSTOM] =\n customEmojis.map(customToRegularEmoji);\n }\n\n const emojis = newData.emojis || {};\n\n const allEmojis: DataEmojis = Object.values(emojis).flat();\n const allEmojisByUnified: Record<string, DataEmoji> = {};\n const searchIndex: Record<string, Record<string, DataEmoji>> = {};\n\n allEmojis.forEach((emoji) => {\n const unified = emoji[Keys.unified];\n allEmojisByUnified[unified] = emoji;\n\n if (emoji[Keys.variations]) {\n emoji[Keys.variations]?.forEach((variation) => {\n allEmojisByUnified[variation] = emoji;\n });\n }\n\n // Index for search\n // Re-implement indexEmoji logic here to be local\n const joinedNameString = (emoji[Keys.name] || [])\n .join('')\n .toLowerCase()\n .split('');\n\n joinedNameString.forEach((char: string) => {\n searchIndex[char] = searchIndex[char] ?? {};\n searchIndex[char][unified] = emoji;\n });\n });\n\n return {\n emojiData: newData,\n allEmojis,\n allEmojisByUnified,\n searchIndex,\n };\n }, [genericEmojiData, customEmojis]);\n\n const emojiByUnified = React.useCallback(\n (unified?: string): DataEmoji | undefined => {\n if (!unified) return undefined;\n\n const result =\n data.allEmojisByUnified[unified] ??\n data.allEmojisByUnified[unifiedWithoutSkinTone(unified)];\n return result;\n },\n [data.allEmojisByUnified],\n );\n\n return (\n <PickerDataContext.Provider\n value={{\n ...data,\n emojiByUnified,\n activeVariationFromUnified,\n }}\n >\n {children}\n </PickerDataContext.Provider>\n );\n}\n\nexport function usePickerDataContext() {\n return React.useContext(PickerDataContext);\n}\n\nexport function useGetEmojisByCategory() {\n const { emojiData, emojiByUnified } = usePickerDataContext();\n const suggestedEmojisModeConfig = useSuggestedEmojisModeConfig();\n const [suggestedUpdated] = useUpdateSuggested();\n // Suggestions come from localStorage, which doesn't exist during SSR.\n // Read them only after mount so the first client render matches the server.\n const isMounted = useIsMounted();\n\n const suggested = React.useMemo(() => {\n if (!isMounted) {\n return [] as DataEmojis;\n }\n\n const suggested = getSuggested(suggestedEmojisModeConfig) ?? [];\n\n return suggested\n .map((s) => {\n const emoji = emojiByUnified(s.unified);\n if (!emoji) return undefined;\n return {\n ...emoji,\n [Keys.unified]: s.unified,\n };\n })\n .filter(Boolean) as DataEmojis;\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [isMounted, suggestedUpdated, suggestedEmojisModeConfig, emojiByUnified]);\n\n return function getEmojisByCategory(category: Categories): DataEmojis {\n if (category === Categories.SUGGESTED) {\n return suggested;\n }\n\n return emojiData.emojis?.[category] ?? [];\n };\n}\n\nfunction customToRegularEmoji(emoji: CustomEmoji): DataEmoji {\n return {\n [EmojiProperties.name]: emoji.names.map((name: string) =>\n name.toLowerCase(),\n ),\n [EmojiProperties.unified]: emoji.id.toLowerCase(),\n [EmojiProperties.added_in]: '0',\n [EmojiProperties.imgUrl]: emoji.imgUrl,\n };\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 { usePickerDataContext } from '../components/context/PickerDataContext';\nimport { useEmojiVersionConfig } from '../config/useConfig';\nimport { DataEmoji } from '../dataUtils/DataTypes';\nimport {\n addedIn,\n emojiUnified,\n unifiedWithoutSkinTone,\n} from '../dataUtils/emojiUtils';\n\nimport { useIsUnicodeHidden } from './useHideEmojisByUniocode';\n\nexport function useDisallowedEmojis() {\n const DisallowedEmojisRef = useRef<Record<string, boolean>>({});\n const emojiVersionConfig = useEmojiVersionConfig();\n const { allEmojis } = usePickerDataContext();\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, allEmojis]);\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 {\n useDefaultSkinToneConfig,\n useReactionsOpenConfig,\n} from '../../config/useConfig';\nimport { DataEmoji } from '../../dataUtils/DataTypes';\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\nimport { usePickerDataContext } from './PickerDataContext';\n\nexport function PickerContextProvider({ children }: Props) {\n const disallowedEmojis = useDisallowedEmojis();\n const defaultSkinTone = useDefaultSkinToneConfig();\n const reactionsDefaultOpen = useReactionsOpenConfig();\n const { searchIndex } = usePickerDataContext();\n\n // Initialize the filter with the inititial dictionary\n const filterRef = React.useRef<FilterState>(searchIndex);\n\n React.useEffect(() => {\n filterRef.current = searchIndex;\n }, [searchIndex]);\n const disallowClickRef = React.useRef<boolean>(false);\n const disallowMouseRef = React.useRef<boolean>(false);\n const disallowedEmojisRef =\n React.useRef<Record<string, boolean>>(disallowedEmojis);\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 reactionsModeState = useState(reactionsDefaultOpen);\n const [isPastInitialLoad, setIsPastInitialLoad] = useState(false);\n const visibleCategoriesState = useState<string[]>([]);\n const emojiSizeState = useState<number | null>(null);\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 reactionsModeState,\n visibleCategoriesState,\n emojiSizeState,\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 reactionsModeState: ReactState<boolean>;\n visibleCategoriesState: ReactState<Array<string>>;\n emojiSizeState: ReactState<number | null>;\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 reactionsModeState: [false, () => {}],\n visibleCategoriesState: [[], () => []],\n emojiSizeState: [null, () => {}],\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 useReactionsModeState() {\n const { reactionsModeState } = React.useContext(PickerContext);\n return reactionsModeState;\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 useVisibleCategoriesState() {\n const { visibleCategoriesState } = React.useContext(PickerContext);\n return visibleCategoriesState;\n}\n\nexport function useEmojiSizeState() {\n const { emojiSizeState } = React.useContext(PickerContext);\n return emojiSizeState;\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 React from 'react';\n\nimport { MouseDownEvent, OnSkinToneChange } from './config';\n\nexport type MutableConfig = {\n onEmojiClick?: MouseDownEvent;\n onReactionClick?: MouseDownEvent;\n onSkinToneChange?: OnSkinToneChange;\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 onReactionClick: config.onReactionClick || config.onEmojiClick,\n onSkinToneChange: config.onSkinToneChange || emptyFunc,\n });\n\n React.useEffect(() => {\n MutableConfigRef.current.onEmojiClick = config.onEmojiClick || emptyFunc;\n MutableConfigRef.current.onReactionClick =\n config.onReactionClick || config.onEmojiClick;\n }, [config.onEmojiClick, config.onReactionClick]);\n\n React.useEffect(() => {\n MutableConfigRef.current.onSkinToneChange =\n config.onSkinToneChange || emptyFunc;\n }, [config.onSkinToneChange]);\n\n return MutableConfigRef;\n}\n\nfunction emptyFunc() {}\n","import * as React from 'react';\n\nimport { usePickerConfig } from '../components/context/PickerConfigContext';\nimport { useReactionsModeState } from '../components/context/PickerContext';\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 DEFAULT_SEARCH_CLEAR_BUTTON_LABEL,\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 enum MOUSE_EVENT_SOURCE {\n REACTIONS = 'reactions',\n PICKER = 'picker',\n}\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 useSearchClearButtonLabelConfig(): string {\n const { searchClearButtonLabel } = usePickerConfig();\n return searchClearButtonLabel ?? DEFAULT_SEARCH_CLEAR_BUTTON_LABEL;\n}\n\nexport function useDefaultSkinToneConfig(): SkinTones {\n const { defaultSkinTone } = usePickerConfig();\n return defaultSkinTone;\n}\n\nexport function useAllowExpandReactions(): boolean {\n const { allowExpandReactions } = usePickerConfig();\n return allowExpandReactions;\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 useCategoryIconsConfig() {\n const { categoryIcons } = usePickerConfig();\n return categoryIcons;\n}\n\nexport function useCustomEmojisConfig(): CustomEmoji[] {\n const { customEmojis } = usePickerConfig();\n return customEmojis;\n}\n\nexport function useOpenConfig(): boolean {\n const { open } = usePickerConfig();\n return open;\n}\n\nexport function useOnEmojiClickConfig(\n mouseEventSource: MOUSE_EVENT_SOURCE,\n): (emoji: EmojiClickData, event: MouseEvent) => void {\n const { current } = useMutableConfig();\n const [, setReactionsOpen] = useReactionsModeState();\n\n const handler = current.onEmojiClick || (() => {});\n const { onReactionClick } = current;\n\n if (mouseEventSource === MOUSE_EVENT_SOURCE.REACTIONS && onReactionClick) {\n return (...args) =>\n onReactionClick(...args, {\n collapseToReactions: () => {\n setReactionsOpen((o) => o);\n },\n });\n }\n\n return (...args) => {\n handler(...args, {\n collapseToReactions: () => {\n setReactionsOpen(true);\n },\n });\n };\n}\n\nexport function useOnSkinToneChangeConfig(): (skinTone: SkinTones) => void {\n const { current } = useMutableConfig();\n\n return current.onSkinToneChange || (() => {});\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 useReactionsOpenConfig(): boolean {\n const { reactionsDefaultOpen } = usePickerConfig();\n return reactionsDefaultOpen;\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 useReactionsConfig(): string[] {\n const { reactions } = usePickerConfig();\n return reactions;\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 '%n',\n searchResultsCount.toString(),\n )\n : SEARCH_RESULTS_ONE_RESULT_FOUND;\n }\n\n return SEARCH_RESULTS_NO_RESULTS_FOUND;\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 { NullableElement } from './selectors';\n\nexport function focusElement(\n element: NullableElement,\n shouldFocus?: () => boolean,\n) {\n if (!element) {\n return;\n }\n\n requestAnimationFrame(() => {\n // Rechecked here rather than at call time: focus may have moved in the\n // meantime (e.g. hover scheduled focus, then the user tabbed out).\n if (shouldFocus && !shouldFocus()) {\n return;\n }\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 focusElement(first);\n}\n","import { NullableElement } from './selectors';\n\nexport function getActiveElement() {\n return document.activeElement as NullableElement;\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 EmojiListRef = React.useRef<HTMLUListElement>(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 const ReactionsRef = React.useRef<HTMLUListElement>(null);\n\n return (\n <ElementRefContext.Provider\n value={{\n AnchoredEmojiRef,\n BodyRef,\n EmojiListRef,\n CategoryNavigationRef,\n PickerMainRef,\n SearchInputRef,\n SkinTonePickerRef,\n VariationPickerRef,\n ReactionsRef,\n }}\n >\n {children}\n </ElementRefContext.Provider>\n );\n}\n\nexport type ElementRef<E extends HTMLElement = HTMLElement> =\n React.MutableRefObject<E | null>;\n\ntype ElementRefs = {\n PickerMainRef: ElementRef;\n AnchoredEmojiRef: ElementRef;\n EmojiListRef: ElementRef<HTMLUListElement>;\n SkinTonePickerRef: ElementRef<HTMLDivElement>;\n SearchInputRef: ElementRef<HTMLInputElement>;\n BodyRef: ElementRef<HTMLDivElement>;\n CategoryNavigationRef: ElementRef<HTMLDivElement>;\n VariationPickerRef: ElementRef<HTMLDivElement>;\n ReactionsRef: ElementRef<HTMLUListElement>;\n};\n\nconst ElementRefContext = React.createContext<ElementRefs>({\n AnchoredEmojiRef: React.createRef(),\n BodyRef: React.createRef(),\n CategoryNavigationRef: React.createRef(),\n EmojiListRef: React.createRef(),\n PickerMainRef: React.createRef(),\n SearchInputRef: React.createRef(),\n SkinTonePickerRef: React.createRef(),\n VariationPickerRef: React.createRef(),\n ReactionsRef: React.createRef(),\n});\n\nfunction useElementRef() {\n return React.useContext(ElementRefContext);\n}\n\nexport function useEmojiListRef() {\n return useElementRef()['EmojiListRef'];\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 useReactionsRef() {\n return useElementRef()['ReactionsRef'];\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","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;\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 { elementCountInRow } 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 countInRow = elementCountInRow(categoryContent, element);\n\n const emojisInCurrentCategory = allVisibleEmojis(category);\n const currentEmojiIndex = emojisInCurrentCategory.indexOf(element);\n const indexInRow = currentEmojiIndex % countInRow;\n\n if (currentEmojiIndex === -1) {\n return null;\n }\n\n if (emojisInCurrentCategory[currentEmojiIndex - countInRow]) {\n return emojisInCurrentCategory[currentEmojiIndex - countInRow];\n }\n\n const prevVisibleCategory = prevCategory(category);\n\n if (!prevVisibleCategory) {\n return null;\n }\n\n const allPrevEmojis = allVisibleEmojis(prevVisibleCategory);\n\n // if there is an emoji in the same index of `indexInRow` in the previous category, return it\n // for this we need to find the last emoji in the previous category that shares the same indexInRow\n // this is by using the % operator to find the last emoji that matches\n\n const lastIndexInRow = (allPrevEmojis.length % countInRow) - 1;\n\n if (indexInRow > lastIndexInRow) {\n return allPrevEmojis.at(-1);\n }\n\n // otherwise, return the last emoji that shares the same indexInRow\n\n for (let i = allPrevEmojis.length - 1; i >= 0; i--) {\n if (i % countInRow === indexInRow) {\n return allPrevEmojis[i];\n }\n }\n\n return allPrevEmojis.at(-1);\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 countInRow = elementCountInRow(categoryContent, element);\n\n const emojisInCurrentCategory = allVisibleEmojis(category);\n const currentEmojiIndex = emojisInCurrentCategory.indexOf(element);\n\n if (currentEmojiIndex === -1) {\n return null;\n }\n\n // the remainder until the end of the row\n const remainder = countInRow - (currentEmojiIndex % countInRow) - 1;\n const firstInNextRow = currentEmojiIndex + remainder + 1;\n\n if (emojisInCurrentCategory[firstInNextRow]) {\n // if we have a next row, search in the next row for the last available emoji\n for (let p = currentEmojiIndex + countInRow; p % countInRow >= 0; p--) {\n if (emojisInCurrentCategory[p]) {\n return emojisInCurrentCategory[p];\n }\n }\n }\n\n const indexInRow = currentEmojiIndex % countInRow;\n\n const nextVisibleCategory = nextCategory(category);\n const emojisInNextCategory = allVisibleEmojis(nextVisibleCategory);\n\n if (emojisInNextCategory[indexInRow]) {\n return emojisInNextCategory[indexInRow];\n }\n\n return emojisInNextCategory.at(0) ?? null;\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 { 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 { 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/emojiUtils';\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\nexport function 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\nexport function 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\nexport function 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 {\n allUnifiedFromEmojiElement,\n NullableElement,\n} from '../DomUtils/selectors';\nimport { useSetAnchoredEmojiRef } from '../components/context/ElementRefContext';\nimport { useEmojiVariationPickerState } from '../components/context/PickerContext';\nimport { usePickerDataContext } from '../components/context/PickerDataContext';\n\nexport default function useSetVariationPicker() {\n const setAnchoredEmojiRef = useSetAnchoredEmojiRef();\n const [, setEmojiVariationPicker] = useEmojiVariationPickerState();\n // Context-aware lookup: respects the `emojiData` prop (e.g. translations).\n // The legacy global lookup only knows the default English dataset.\n // https://github.com/ealush/emoji-picker-react/issues/503\n const { emojiByUnified } = usePickerDataContext();\n\n return function setVariationPicker(element: NullableElement) {\n const { unified, originalUnified } = allUnifiedFromEmojiElement(element);\n const resolvedUnified = unified ?? originalUnified;\n\n if (!resolvedUnified) {\n return;\n }\n\n const emoji = emojiByUnified(resolvedUnified);\n\n if (emoji) {\n setAnchoredEmojiRef(element);\n setEmojiVariationPicker(emoji);\n }\n };\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 { useCallback, useEffect, useMemo } from 'react';\n\nimport { hasNextElementSibling } from '../DomUtils/elementPositionInRow';\nimport {\n focusElement,\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 useReactionsRef,\n useSearchInputRef,\n useSkinTonePickerRef,\n} from '../components/context/ElementRefContext';\nimport {\n useReactionsModeState,\n useSkinToneFanOpenState,\n} 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 useReactionsKeyboardEvents();\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\n// Arrow keys move between reaction buttons (and the expand button)\n// while the reactions bar has focus. The bar lives outside the scroll\n// body, so the body handler never sees these events.\n// https://github.com/ealush/emoji-picker-react/issues/411\nfunction useReactionsKeyboardEvents() {\n const ReactionsRef = useReactionsRef();\n // The reactions bar mounts late when the user collapses the full\n // picker, so the listener effect must rerun when it opens.\n const [reactionsOpen] = useReactionsModeState();\n\n const onKeyDown = useMemo(\n () =>\n function onKeyDown(event: KeyboardEvent) {\n const { key } = event;\n const current = ReactionsRef.current;\n\n if (!current) {\n return;\n }\n\n const delta = reactionFocusDelta(key);\n\n if (delta !== 0 && focusReactionSibling(current, delta)) {\n event.preventDefault();\n }\n },\n // reactionsOpen: the bar mounts late on collapse, and the new\n // callback identity reinstalls the listener effect below.\n [ReactionsRef, reactionsOpen],\n );\n\n useEffect(() => {\n const current = ReactionsRef.current;\n\n if (!current) {\n return;\n }\n\n current.addEventListener('keydown', onKeyDown);\n\n return () => {\n current.removeEventListener('keydown', onKeyDown);\n };\n }, [ReactionsRef, onKeyDown]);\n}\n\nfunction reactionFocusDelta(key: string): number {\n switch (key) {\n case KeyboardEvents.ArrowRight:\n case KeyboardEvents.ArrowDown:\n return 1;\n case KeyboardEvents.ArrowLeft:\n case KeyboardEvents.ArrowUp:\n return -1;\n default:\n return 0;\n }\n}\n\nfunction focusReactionSibling(root: HTMLElement, delta: number): boolean {\n const buttons = Array.from(root.querySelectorAll('button'));\n const activeIndex = buttons.indexOf(\n getActiveElement() as HTMLButtonElement,\n );\n const sibling = activeIndex === -1 ? null : buttons[activeIndex + delta];\n\n if (!sibling) {\n return false;\n }\n\n focusElement(sibling);\n return true;\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/emojiUtils';\nimport { EmojiStyle } from '../types/exposedTypes';\nimport { Dimensions } from '../virtualization/virtualizationHelpers';\n\n// eslint-disable-next-line max-params\nexport function preloadEmojiIfNeeded(\n emoji: undefined | DataEmoji,\n emojiStyles: EmojiStyle,\n scrollTop: number,\n clientHeight: number,\n topOffset: number,\n style: { top: number } | undefined,\n dimensions: Dimensions,\n getEmojiUrl: GetEmojiUrl,\n): void {\n if (!emoji) {\n return;\n }\n\n if (emojiStyles === EmojiStyle.NATIVE) {\n return;\n }\n\n const unified = emojiUnified(emoji);\n\n if (preloadedEmojs.has(unified)) {\n return;\n }\n\n // preload only if the emoji is a few rows below the viewport\n if (!style || !dimensions) {\n return;\n }\n\n setTimeout(() => {\n const emojiTop = topOffset + style.top;\n const viewportBottom = scrollTop + clientHeight;\n\n const isJustBelowViewport =\n emojiTop >= viewportBottom &&\n emojiTop < viewportBottom + dimensions.emojiSize * 2;\n\n if (isJustBelowViewport) {\n preloadEmoji(getEmojiUrl, emoji, emojiStyles);\n }\n });\n}\n\nexport function preloadEmoji(\n getEmojiUrl: GetEmojiUrl,\n emoji: undefined | DataEmoji,\n emojiStyle: EmojiStyle,\n): void {\n if (!emoji) {\n return;\n }\n\n const unified = emojiUnified(emoji);\n\n if (preloadedEmojs.has(unified)) {\n return;\n }\n preloadedEmojs.add(unified);\n\n emojiVariations(emoji)\n .concat(unified)\n .forEach((variation) => {\n const emojiUrl = getEmojiUrl(variation, emojiStyle);\n preloadImage(emojiUrl);\n });\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/emojiUtils';\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 * as React from 'react';\nimport { cx } from 'shipstyles';\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 {\n PickerContextProvider,\n useReactionsModeState,\n} from '../context/PickerContext';\n\ntype Props = Readonly<{\n children: React.ReactNode;\n}>;\n\nexport const DEFAULT_LABEL_HEIGHT = 40;\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 [reactionsMode] = useReactionsModeState();\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 const { width, height, ...styleProps } = style || {};\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 reactionsMode && styles.reactionsMenu,\n className,\n )}\n ref={PickerMainRef}\n style={{\n ...styleProps,\n ...(!reactionsMode && { height, width }),\n }}\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-hover-bg-color-reduced-opacity':\n 'var(--epr-dark-hover-bg-color-reduced-opacity)',\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-reactions-bg-color': 'var(--epr-dark-reactions-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-category-icon-inactive-color':\n 'var(--epr-dark-category-icon-inactive-color)',\n '--epr-skin-tone-picker-menu-color':\n 'var(--epr-dark-skin-tone-picker-menu-color)',\n '--epr-skin-tone-outer-border-color':\n 'var(--epr-dark-skin-tone-outer-border-color)',\n '--epr-skin-tone-inner-border-color':\n 'var(--epr-dark-skin-tone-inner-border-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 transition: 'height 0.3s ease-in-out, background-color 0.1s ease-in-out',\n '*': {\n boxSizing: 'border-box',\n fontFamily: 'sans-serif',\n },\n },\n baseVariables: {\n '--': {\n '--epr-highlight-color': '#007aeb',\n '--epr-hover-bg-color': '#e5f0fa',\n '--epr-hover-bg-color-reduced-opacity': '#e5f0fa80',\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-reactions-bg-color': '#ffffff90',\n '--epr-category-icon-active-color': '#3371B7',\n '--epr-category-icon-inactive-color': '#868686',\n '--epr-skin-tone-picker-menu-color': '#ffffff95',\n '--epr-skin-tone-outer-border-color': '#555555',\n '--epr-skin-tone-inner-border-color': 'var(--epr-bg-color)',\n\n '--epr-horizontal-padding': '10px',\n\n '--epr-picker-border-radius': '8px',\n\n /* Header */\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 '--epr-search-border-color': 'var(--epr-search-input-bg-color)',\n '--epr-search-border-color-active': 'var(--epr-highlight-color)',\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': `${DEFAULT_LABEL_HEIGHT}px`,\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-hover-bg-color-reduced-opacity': '#36363680',\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-reactions-bg-color': '#22222290',\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': '#6AA9DD',\n '--epr-dark-category-icon-inactive-color': '#C0C0BF',\n '--epr-dark-skin-tone-picker-menu-color': '#22222295',\n '--epr-dark-skin-tone-outer-border-color':\n 'var(--epr-dark-picker-border-color)',\n '--epr-dark-skin-tone-inner-border-color': '#00000000',\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 reactionsMenu: {\n '.': 'epr-reactions',\n height: '50px',\n display: 'inline-flex',\n backgroundColor: 'var(--epr-reactions-bg-color)',\n // @ts-ignore - backdropFilter is not recognized.\n backdropFilter: 'blur(8px)',\n '--': {\n '--epr-picker-border-radius': '50px',\n },\n },\n});\n","import { DEFAULT_LABEL_HEIGHT } from '../components/main/PickerMain';\n\nimport { ClassNames, asSelectors } from './classNames';\nimport { 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 // The virtualized layout positions emojis with a fixed per-row count that\n // is rendered onto the category content element. That count is the single\n // source of truth: deriving it again from fractional rect widths can be\n // off by one (e.g. category padding shrinking the content box), which\n // makes arrow-up/arrow-down drift sideways by a column.\n // https://github.com/ealush/emoji-picker-react/issues/502\n const declared = Number(parent.dataset?.emojisPerRow);\n if (Number.isInteger(declared) && declared > 0) {\n return declared;\n }\n\n const parentWidth = parent.getBoundingClientRect().width;\n const elementWidth = element.getBoundingClientRect().width;\n return Math.floor(parentWidth / elementWidth);\n}\n\nexport function firstVisibleElementInContainer(\n parent: NullableElement,\n elements: HTMLElement[],\n maxVisibilityDiffThreshold = 0,\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 const parentTopWithLabel = parentTop + getLabelHeight(parent);\n\n const visibleElements = elements.find((element) => {\n const elementTop = element.getBoundingClientRect().top;\n const elementBottom = element.getBoundingClientRect().bottom;\n const maxVisibilityDiffPixels =\n element.clientHeight * maxVisibilityDiffThreshold;\n\n const elementTopWithAllowedDiff = elementTop + maxVisibilityDiffPixels;\n const elementBottomWithAllowedDiff =\n elementBottom - maxVisibilityDiffPixels;\n\n if (elementTopWithAllowedDiff < parentTopWithLabel) {\n return false;\n }\n\n return (\n (elementTopWithAllowedDiff >= parentTop &&\n elementTopWithAllowedDiff <= parentBottom) ||\n (elementBottomWithAllowedDiff >= parentTop &&\n elementBottomWithAllowedDiff <= parentBottom)\n );\n });\n\n return visibleElements || null;\n}\n\nexport function hasNextElementSibling(element: HTMLElement) {\n return !!element.nextElementSibling;\n}\n\nexport function getLabelHeight(parentNode: NullableElement) {\n if (!parentNode) {\n return DEFAULT_LABEL_HEIGHT;\n }\n\n const label = parentNode.querySelector(asSelectors(ClassNames.label));\n\n if (label) {\n const height = label.getBoundingClientRect().height;\n if (height > 0) {\n return height;\n }\n }\n\n // fallback to default\n return DEFAULT_LABEL_HEIGHT;\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\nexport function allUnifiedFromEmojiElement(emoji: NullableElement): {\n unified: string | null;\n originalUnified: string | null;\n} {\n if (!emoji) {\n return {\n unified: null,\n originalUnified: null,\n };\n }\n\n return {\n unified: unifiedFromEmojiElement(emoji),\n originalUnified: originalUnifiedFromEmojiElement(emoji),\n };\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, 0.1);\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 { Categories, CustomCategoryConfig } from '../config/categoryConfig';\nimport { CustomEmoji } from '../config/customEmojiConfig';\nimport { DataEmoji } from '../dataUtils/DataTypes';\nimport { CategoryConfig } from '../types/exposedTypes';\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 * as React from 'react';\nimport { useEffect, useRef } from 'react';\n\nimport {\n allUnifiedFromEmojiElement,\n isEmojiElement,\n NullableElement,\n} from '../DomUtils/selectors';\nimport {\n useActiveSkinToneState,\n useDisallowClickRef,\n useEmojiVariationPickerState,\n useUpdateSuggested,\n} from '../components/context/PickerContext';\nimport { usePickerDataContext } from '../components/context/PickerDataContext';\nimport { GetEmojiUrl } from '../components/emoji/BaseEmojiProps';\nimport {\n MOUSE_EVENT_SOURCE,\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/emojiUtils';\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 ContainerRef: React.MutableRefObject<NullableElement>,\n mouseEventSource: MOUSE_EVENT_SOURCE,\n) {\n const mouseDownTimerRef = useRef<ReturnType<typeof setTimeout>>();\n const setVariationPicker = useSetVariationPicker();\n const disallowClickRef = useDisallowClickRef();\n const [, setEmojiVariationPicker] = useEmojiVariationPickerState();\n const closeAllOpenToggles = useCloseAllOpenToggles();\n const [activeSkinTone] = useActiveSkinToneState();\n const onEmojiClick = useOnEmojiClickConfig(mouseEventSource);\n const [, updateSuggested] = useUpdateSuggested();\n const getEmojiUrl = useGetEmojiUrlConfig();\n const activeEmojiStyle = useEmojiStyleConfig();\n const { emojiByUnified } = usePickerDataContext();\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, emojiByUnified);\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 emojiByUnified,\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, emojiByUnified);\n\n if (!emoji || !emojiHasVariations(emoji)) {\n return;\n }\n\n mouseDownTimerRef.current = 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 emojiByUnified,\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 (!ContainerRef.current) {\n return;\n }\n const confainerRef = ContainerRef.current;\n confainerRef.addEventListener('click', onClick, {\n passive: true,\n });\n\n confainerRef.addEventListener('mousedown', onMouseDown, {\n passive: true,\n });\n confainerRef.addEventListener('mouseup', onMouseUp, {\n passive: true,\n });\n\n return () => {\n confainerRef?.removeEventListener('click', onClick);\n confainerRef?.removeEventListener('mousedown', onMouseDown);\n confainerRef?.removeEventListener('mouseup', onMouseUp);\n };\n }, [ContainerRef, onClick, onMouseDown, onMouseUp]);\n}\n\nfunction emojiFromEvent(\n event: MouseEvent,\n lookupEmojiByUnified: (unified?: string) => DataEmoji | undefined,\n): [DataEmoji, string] | [] {\n const target = event?.target as HTMLElement;\n if (!isEmojiElement(target)) {\n return [];\n }\n\n const { unified, originalUnified } = allUnifiedFromEmojiElement(target);\n const resolvedUnified = unified ?? originalUnified;\n if (!resolvedUnified) {\n return [];\n }\n\n const emoji = lookupEmojiByUnified(resolvedUnified);\n if (!emoji) {\n return [];\n }\n\n return [emoji, unified ?? resolvedUnified];\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 * as React from 'react';\nimport { cx } from 'shipstyles';\n\nimport { stylesheet } from '../../Stylesheet/stylesheet';\n\ninterface Props 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 // Longhand, not `background: 'none'`: a shorthand reset shares its\n // conflict keys with every background longhand, so cx() would drop\n // this whole class wherever a later class sets background-image\n // (e.g. the category nav sprite) and the native button face would\n // show through.\n backgroundColor: 'transparent',\n outline: 'none',\n },\n});\n","import * as React from 'react';\nimport { cx } from 'shipstyles';\n\nimport { ClassNames } from '../../DomUtils/classNames';\nimport {\n commonInteractionStyles,\n commonStyles,\n stylesheet,\n} 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 noBackground?: boolean;\n className?: string;\n style?: React.CSSProperties;\n}>;\n\nexport function ClickableEmojiButton({\n emojiNames,\n unified,\n hidden,\n hiddenOnSearch,\n showVariations = true,\n hasVariations,\n children,\n className,\n noBackground = false,\n style,\n}: ClickableEmojiButtonProps) {\n return (\n <Button\n className={cx(\n styles.emoji,\n hidden && commonStyles.hidden,\n hiddenOnSearch && commonInteractionStyles.hiddenOnSearch,\n {\n [ClassNames.visible]: !hidden && !hiddenOnSearch,\n },\n !!(hasVariations && showVariations) && styles.hasVariations,\n noBackground && styles.noBackground,\n className,\n )}\n data-unified={unified}\n aria-label={getAriaLabel(emojiNames)}\n data-full-name={emojiNames}\n style={style}\n >\n {children}\n </Button>\n );\n}\n\nfunction getAriaLabel(emojiNames: string[]) {\n return emojiNames[emojiNames.length - 1];\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 noBackground: {\n background: 'none',\n ':hover': {\n backgroundColor: 'transparent',\n background: 'none',\n },\n ':focus': {\n backgroundColor: 'transparent',\n background: 'none',\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:\n '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 * as React from 'react';\nimport { cx } from 'shipstyles';\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 className,\n}: {\n emojiName: string;\n emojiStyle: EmojiStyle;\n style: React.CSSProperties;\n lazyLoad?: boolean;\n imgUrl: string;\n onError: () => void;\n className?: string;\n}) {\n return (\n <img\n src={imgUrl}\n alt={emojiName}\n className={cx(\n styles.emojiImag,\n emojiStyles.external,\n emojiStyles.common,\n className,\n )}\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 * as React from 'react';\nimport { cx } from 'shipstyles';\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 className,\n}: {\n unified: string;\n style: React.CSSProperties;\n className?: string;\n}) {\n return (\n <span\n className={cx(\n // Order matters: cx() lets the later class win same-property\n // conflicts, so the zeroing reset must come first and the real\n // font-size last — otherwise the emoji renders at 0px.\n emojiStyles.external,\n emojiStyles.common,\n styles.nativeEmoji,\n className,\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 { emojiName, emojiUrlByUnified } from '../../dataUtils/emojiUtils';\nimport { isCustomEmoji } from '../../typeRefinements/typeRefinements';\nimport { EmojiStyle } from '../../types/exposedTypes';\nimport { useEmojisThatFailedToLoadState } from '../context/PickerContext';\nimport { usePickerDataContext } from '../context/PickerDataContext';\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 className,\n}: BaseEmojiProps) {\n const [, setEmojisThatFailedToLoad] = useEmojisThatFailedToLoadState();\n const { emojiByUnified } = usePickerDataContext();\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 className={className}\n />\n );\n }\n\n return (\n <>\n {emojiStyle === EmojiStyle.NATIVE ? (\n <NativeEmoji unified={unified} style={style} className={className} />\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 className={className}\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/emojiUtils';\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 buttonClassName?: string;\n noBackground?: boolean;\n style?: React.CSSProperties;\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 className,\n buttonClassName,\n noBackground = false,\n style,\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 noBackground={noBackground}\n style={style}\n className={buttonClassName}\n >\n <ViewOnlyEmoji\n unified={unified}\n emoji={emoji}\n size={size}\n emojiStyle={emojiStyle}\n lazyLoad={lazyLoad}\n getEmojiUrl={getEmojiUrl}\n className={className}\n />\n </ClickableEmojiButton>\n );\n}\n","import * as React from 'react';\nimport { cx } from 'shipstyles';\n\nimport { darkMode, stylesheet } from '../../Stylesheet/stylesheet';\nimport { Button } from '../atoms/Button';\nimport { useReactionsModeState } from '../context/PickerContext';\n\nimport Plus from './svg/plus.svg';\n\nexport function BtnPlus() {\n const [, setReactionsMode] = useReactionsModeState();\n return (\n <Button\n aria-label=\"Show all Emojis\"\n title=\"Show all Emojis\"\n tabIndex={0}\n className={cx(styles.plusSign)}\n onClick={() => setReactionsMode(false)}\n />\n );\n}\n\nconst styles = stylesheet.create({\n plusSign: {\n fontSize: '20px',\n padding: '17px',\n color: 'var(--epr-text-color)',\n borderRadius: '50%',\n textAlign: 'center',\n lineHeight: '100%',\n width: '20px',\n height: '20px',\n display: 'flex',\n justifyContent: 'center',\n alignItems: 'center',\n transition: 'background-color 0.2s ease-in-out',\n ':after': {\n content: '',\n minWidth: '20px',\n minHeight: '20px',\n backgroundImage: `url(${Plus})`,\n backgroundColor: 'transparent',\n backgroundRepeat: 'no-repeat',\n backgroundSize: '20px',\n backgroundPositionY: '0',\n },\n ':hover': {\n color: 'var(--epr-highlight-color)',\n backgroundColor: 'var(--epr-hover-bg-color-reduced-opacity)',\n ':after': {\n backgroundPositionY: '-20px',\n },\n },\n ':focus': {\n color: 'var(--epr-highlight-color)',\n backgroundColor: 'var(--epr-hover-bg-color-reduced-opacity)',\n ':after': {\n backgroundPositionY: '-40px',\n },\n },\n },\n ...darkMode('plusSign', {\n ':after': { backgroundPositionY: '-40px' },\n ':hover:after': { backgroundPositionY: '-60px' },\n }),\n});\n","import * as React from 'react';\nimport { cx } from 'shipstyles';\n\nimport { commonStyles, stylesheet } from '../../Stylesheet/stylesheet';\nimport {\n MOUSE_EVENT_SOURCE,\n useEmojiStyleConfig,\n useReactionsConfig,\n useAllowExpandReactions,\n useGetEmojiUrlConfig,\n} from '../../config/useConfig';\nimport { DataEmoji } from '../../dataUtils/DataTypes';\nimport { emojiByUnified } from '../../dataUtils/emojiSelectors';\nimport { useMouseDownHandlers } from '../../hooks/useMouseDownHandlers';\nimport { useReactionsRef } from '../context/ElementRefContext';\nimport { useReactionsModeState } from '../context/PickerContext';\nimport { ClickableEmoji } from '../emoji/Emoji';\n\nimport { BtnPlus } from './BtnPlus';\n\nexport function Reactions() {\n const [reactionsOpen] = useReactionsModeState();\n const ReactionsRef = useReactionsRef();\n const reactions = useReactionsConfig();\n useMouseDownHandlers(ReactionsRef, MOUSE_EVENT_SOURCE.REACTIONS);\n const emojiStyle = useEmojiStyleConfig();\n const allowExpandReactions = useAllowExpandReactions();\n const getEmojiUrl = useGetEmojiUrlConfig();\n\n if (!reactionsOpen) {\n return null;\n }\n\n return (\n <ul\n className={cx(styles.list, !reactionsOpen && commonStyles.hidden)}\n ref={ReactionsRef}\n aria-label=\"Reactions\"\n >\n {reactions.map((reaction) => {\n const emoji = emojiByUnified(reaction);\n\n if (!emoji) {\n return null;\n }\n\n return (\n <li key={reaction}>\n <ClickableEmoji\n emoji={emoji as DataEmoji}\n emojiStyle={emojiStyle}\n unified={reaction}\n showVariations={false}\n className={cx(styles.emojiButton)}\n buttonClassName={cx(styles.reactionButton)}\n noBackground\n getEmojiUrl={getEmojiUrl}\n />\n </li>\n );\n })}\n {allowExpandReactions ? (\n <li>\n <BtnPlus />\n </li>\n ) : null}\n </ul>\n );\n}\n\nconst styles = stylesheet.create({\n list: {\n listStyle: 'none',\n margin: '0',\n padding: '0 5px',\n display: 'flex',\n justifyContent: 'space-between',\n alignItems: 'center',\n height: '100%',\n },\n reactionButton: {\n // Every picker button sets outline: none, and reaction buttons also\n // suppress the focus background, so keyboard focus was invisible.\n // Focus mirrors the hover treatment (scale plus a soft circular\n // wash, no outline ring): the scale transform on the inner image\n // alone is clipped by the button's overflow: hidden, and does\n // nothing on inline native emoji, so the button itself carries the\n // effect. Scoped to the reactions bar so grid focus treatment is\n // untouched.\n // https://github.com/ealush/emoji-picker-react/issues/473\n ':focus-visible': {\n transform: 'scale(1.2)',\n transition:\n 'background-color 0.2s, transform 0.2s cubic-bezier(0.175, 0.885, 0.32, 1.5)',\n backgroundColor: 'var(--epr-hover-bg-color-reduced-opacity)',\n borderRadius: '50%',\n outline: 'none',\n },\n },\n emojiButton: {\n ':hover': {\n transform: 'scale(1.2)',\n },\n ':focus': {\n transform: 'scale(1.2)',\n },\n ':active': {\n transform: 'scale(1.1)',\n },\n transition: 'transform 0.2s cubic-bezier(0.175, 0.885, 0.32, 1.5)',\n },\n});\n","import { useEffect, useState } 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 const [scrollTop, setScrollTop] = useState(0);\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 setScrollTop(bodyRef?.scrollTop ?? 0);\n closeAllOpenToggles();\n }\n\n return () => {\n bodyRef?.removeEventListener('scroll', onScroll);\n };\n }, [BodyRef, closeAllOpenToggles]);\n\n return scrollTop;\n}\n","export function shouldVirtualize({\n scrollTop,\n clientHeight,\n topOffset,\n style,\n dimensions,\n}: {\n scrollTop: number;\n clientHeight: number;\n topOffset: number;\n style: { top: number } | undefined;\n dimensions: Dimensions;\n}): boolean {\n if (!style || !dimensions) {\n return false;\n }\n\n const emojiTop = topOffset + style.top;\n const emojiBottom = emojiTop + dimensions.emojiSize;\n\n const isVisible =\n emojiBottom + dimensions.emojiSize * 2 >= scrollTop &&\n emojiTop <= scrollTop + clientHeight + dimensions.emojiSize;\n\n return !isVisible;\n}\n\nexport function getEmojiPositionStyle(dimensions: Dimensions, index: number) {\n return dimensions\n ? {\n top: Math.floor(index / dimensions.emojisPerRow) * dimensions.emojiSize,\n left: (index % dimensions.emojisPerRow) * dimensions.emojiSize,\n }\n : undefined;\n}\n\n// preload emoji if it is one row below viewport\n\nexport type Dimensions =\n | {\n emojiSize: number;\n emojisPerRow: number;\n categoryHeight: number;\n }\n | undefined;\n","import * as React from 'react';\n\nimport { EmojiButtonSelector } from '../DomUtils/selectors';\nimport {\n useEmojiListRef,\n usePickerMainRef,\n} from '../components/context/ElementRefContext';\nimport {\n useReactionsModeState,\n useVisibleCategoriesState,\n useEmojiSizeState,\n} from '../components/context/PickerContext';\n\nconst EMOJI_SIZE_DEFAULT = 40;\n\nexport function useCategoryHeight(emojiCount: number):\n | {\n categoryHeight: number;\n emojisPerRow: number;\n emojiSize: number;\n }\n | undefined {\n const EmojiListRef = useEmojiListRef();\n const [isReactionsMode] = useReactionsModeState();\n const PickerMainRef = usePickerMainRef();\n const emojiSizeRef = React.useRef<number | undefined>();\n const [visibleCategories] = useVisibleCategoriesState();\n const [emojiSizeFromContext] = useEmojiSizeState();\n const [dimensions, setDimensions] = React.useState<{\n categoryHeight: number;\n emojisPerRow: number;\n emojiSize: number;\n }>();\n\n // Helper to compute and store dimensions based on current DOM\n const computeAndSetDimensions = React.useCallback(() => {\n const listEl = EmojiListRef.current;\n if (!listEl) return;\n\n const emojiElement = listEl.querySelector(\n EmojiButtonSelector,\n ) as HTMLElement | null;\n\n const measured = emojiElement?.clientHeight;\n if (measured) {\n emojiSizeRef.current = measured;\n }\n const emojiSize =\n emojiSizeFromContext ||\n measured ||\n emojiSizeRef.current ||\n EMOJI_SIZE_DEFAULT;\n const pickerWidth = listEl.clientWidth;\n\n if (pickerWidth === 0 || emojiSize === 0) return;\n\n const emojisPerRow = Math.max(1, Math.floor(pickerWidth / emojiSize));\n const rowCount = Math.ceil(emojiCount / emojisPerRow);\n const categoryHeight = rowCount * emojiSize;\n\n setDimensions({ categoryHeight, emojisPerRow, emojiSize });\n }, [EmojiListRef, emojiCount, emojiSizeFromContext]);\n\n // Recompute on data-count changes and when reactions mode toggles\n React.useEffect(() => {\n computeAndSetDimensions();\n }, [\n emojiCount,\n isReactionsMode,\n computeAndSetDimensions,\n visibleCategories.length,\n ]);\n\n // Listen to transitionend on the picker root (where height transition occurs)\n React.useEffect(() => {\n const rootEl = PickerMainRef.current;\n if (!rootEl) return;\n\n const handler = (e: Event) => {\n const te = e as TransitionEvent;\n const prop = te.propertyName;\n if (\n prop === 'width' ||\n prop === 'max-width' ||\n prop === 'min-width' ||\n prop === 'height' ||\n prop === 'max-height' ||\n prop === 'min-height'\n ) {\n if (typeof queueMicrotask === 'function') {\n queueMicrotask(() => computeAndSetDimensions());\n } else {\n requestAnimationFrame(() => computeAndSetDimensions());\n }\n }\n };\n\n rootEl.addEventListener('transitionend', handler, {\n passive: true,\n });\n return () => {\n rootEl.removeEventListener('transitionend', handler);\n };\n }, [PickerMainRef, computeAndSetDimensions]);\n\n return dimensions;\n}\n","import { useEmojisThatFailedToLoadState } from '../components/context/PickerContext';\nimport { DataEmoji } from '../dataUtils/DataTypes';\nimport { emojiUnified } from '../dataUtils/emojiUtils';\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 { ReactNode, useEffect } from 'react';\nimport * as React from 'react';\n\nimport { useBodyRef } from '../components/context/ElementRefContext';\nimport { useActiveSkinToneState } from '../components/context/PickerContext';\nimport { ClickableEmoji } from '../components/emoji/Emoji';\nimport {\n useEmojiStyleConfig,\n useGetEmojiUrlConfig,\n useLazyLoadEmojisConfig,\n useSkinTonesDisabledConfig,\n} from '../config/useConfig';\nimport { DataEmojis } from '../dataUtils/DataTypes';\nimport { emojiUnified } from '../dataUtils/emojiUtils';\nimport {\n getEmojiPositionStyle,\n shouldVirtualize,\n} from '../virtualization/virtualizationHelpers';\n\nimport { preloadEmojiIfNeeded } from './preloadEmoji';\nimport { useCategoryHeight } from './useCategoryHeight';\nimport { useIsEmojiDisallowed } from './useDisallowedEmojis';\nimport { useIsEmojiHidden } from './useIsEmojiHidden';\n\nexport function useEmojiVirtualization({\n categoryEmojis,\n topOffset,\n onHeightReady,\n scrollTop,\n isCategoryVisible,\n}: {\n categoryEmojis: DataEmojis;\n topOffset: number;\n onHeightReady: (height: number) => void;\n scrollTop: number;\n isCategoryVisible: boolean;\n}) {\n const isEmojiHidden = useIsEmojiHidden();\n const lazyLoadEmojis = useLazyLoadEmojisConfig();\n const emojiStyle = useEmojiStyleConfig();\n const [activeSkinTone] = useActiveSkinToneState();\n const isEmojiDisallowed = useIsEmojiDisallowed();\n const getEmojiUrl = useGetEmojiUrlConfig();\n const showVariations = !useSkinTonesDisabledConfig();\n const BodyRef = useBodyRef();\n\n let virtualizedCounter = 0;\n\n const emojisToPush = categoryEmojis.filter((emoji) => {\n const isDisallowed = isEmojiDisallowed(emoji);\n const { failedToLoad, filteredOut, hidden } = isEmojiHidden(emoji);\n\n return !failedToLoad && !filteredOut && !hidden && !isDisallowed;\n });\n\n const dimensions = useCategoryHeight(emojisToPush.length);\n\n useEffect(() => {\n if (dimensions) {\n onHeightReady(dimensions.categoryHeight);\n }\n }, [dimensions, onHeightReady, emojisToPush.length]);\n\n const isVirtualized = (style: { top: number; left: number } | undefined) =>\n dimensions &&\n BodyRef.current &&\n shouldVirtualize({\n scrollTop,\n clientHeight: BodyRef.current?.clientHeight ?? 0,\n topOffset,\n style,\n dimensions,\n });\n\n const emojis = emojisToPush.reduce((accumulator, emoji, index) => {\n const unified = emojiUnified(emoji, activeSkinTone);\n const style = getEmojiPositionStyle(dimensions, index);\n\n if (isVirtualized(style)) {\n virtualizedCounter++;\n preloadEmojiIfNeeded(\n emoji,\n emojiStyle,\n scrollTop,\n BodyRef.current?.clientHeight ?? 0,\n topOffset,\n style,\n dimensions,\n getEmojiUrl,\n );\n return accumulator;\n }\n\n if (!isCategoryVisible) {\n virtualizedCounter++;\n return accumulator;\n }\n\n accumulator.push(\n <ClickableEmoji\n showVariations={showVariations}\n key={unified}\n emoji={emoji}\n unified={unified}\n emojiStyle={emojiStyle}\n lazyLoad={lazyLoadEmojis}\n getEmojiUrl={getEmojiUrl}\n style={{\n ...style,\n position: 'absolute',\n }}\n />,\n );\n return accumulator;\n }, [] as ReactNode[]);\n\n return {\n virtualizedCounter,\n emojis,\n dimensions,\n };\n}\n","import * as React from 'react';\nimport { cx } from 'shipstyles';\n\nimport { ClassNames } from '../../DomUtils/classNames';\nimport {\n commonInteractionStyles,\n commonStyles,\n stylesheet,\n} from '../../Stylesheet/stylesheet';\nimport {\n categoryFromCategoryConfig,\n categoryNameFromCategoryConfig,\n} from '../../config/categoryConfig';\nimport { CategoryConfig } from '../../types/exposedTypes';\n\ntype Props = Readonly<{\n categoryConfig: CategoryConfig;\n children?: React.ReactNode;\n hidden?: boolean;\n hiddenOnSearch?: boolean;\n height?: number;\n emojisPerRow?: number;\n}>;\n\nexport function EmojiCategory({\n categoryConfig,\n children,\n hidden,\n hiddenOnSearch,\n height,\n emojisPerRow,\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 && commonInteractionStyles.hiddenOnSearch,\n )}\n data-name={category}\n role=\"rowgroup\"\n aria-label={categoryName}\n >\n <h2 className={cx(styles.label)}>{categoryName}</h2>\n <div\n className={cx(styles.categoryContent)}\n style={{ height }}\n role=\"row\"\n data-emojis-per-row={emojisPerRow}\n >\n {children}\n </div>\n </li>\n );\n}\n\nconst styles = stylesheet.create({\n category: {\n '.': ClassNames.category,\n minHeight:\n 'calc(var(--epr-emoji-fullsize) + var(--epr-category-label-height))',\n position: 'relative',\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-ignore - backdropFilter is not recognized.\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\n// `useLayoutEffect` warns during SSR since it never runs on the server.\n// Fall back to `useEffect` there: measurement only matters on the client.\nexport const useIsomorphicLayoutEffect =\n typeof window !== 'undefined' ? React.useLayoutEffect : React.useEffect;\n","import * as React from 'react';\n\nimport { categoryFromCategoryConfig } from '../../config/categoryConfig';\nimport {\n useCategoriesConfig,\n useEmojiStyleConfig,\n useGetEmojiUrlConfig,\n useLazyLoadEmojisConfig,\n} from '../../config/useConfig';\nimport { emojiUnified } from '../../dataUtils/emojiUtils';\nimport { useIsomorphicLayoutEffect } from '../../hooks/useIsomorphicLayoutEffect';\nimport {\n useActiveSkinToneState,\n useEmojiSizeState,\n} from '../context/PickerContext';\nimport { useGetEmojisByCategory } from '../context/PickerDataContext';\nimport { ClickableEmoji } from '../emoji/Emoji';\n\nexport function MeasureEmoji() {\n const categories = useCategoriesConfig();\n const getEmojisByCategory = useGetEmojisByCategory();\n const emojiStyle = useEmojiStyleConfig();\n const getEmojiUrl = useGetEmojiUrlConfig();\n const lazyLoadEmojis = useLazyLoadEmojisConfig();\n const [activeSkinTone] = useActiveSkinToneState();\n const [emojiSize, setEmojiSize] = useEmojiSizeState();\n const ref = React.useRef<HTMLDivElement>(null);\n\n useIsomorphicLayoutEffect(() => {\n if (ref.current) {\n setEmojiSize(ref.current.clientHeight);\n }\n });\n\n if (emojiSize) {\n return null;\n }\n\n const firstCategory = categories[0];\n const dummyEmoji = getEmojisByCategory(\n categoryFromCategoryConfig(firstCategory),\n )[0];\n const unified = dummyEmoji ? emojiUnified(dummyEmoji, activeSkinTone) : '';\n\n if (!dummyEmoji) {\n return null;\n }\n\n return (\n <div ref={ref}>\n <ClickableEmoji\n emoji={dummyEmoji}\n unified={unified}\n emojiStyle={emojiStyle}\n getEmojiUrl={getEmojiUrl}\n lazyLoad={lazyLoadEmojis}\n showVariations={false}\n hidden={false}\n style={{\n opacity: 0,\n pointerEvents: 'none',\n position: 'absolute',\n top: 0,\n left: 0,\n zIndex: -1,\n height: 'var(--epr-emoji-fullsize)',\n width: 'var(--epr-emoji-fullsize)',\n }}\n />\n </div>\n );\n}\n","import * as React from 'react';\nimport { cx } from 'shipstyles';\n\nimport { ClassNames } from '../../DomUtils/classNames';\nimport { getLabelHeight } from '../../DomUtils/elementPositionInRow';\nimport { stylesheet } from '../../Stylesheet/stylesheet';\nimport { categoryFromCategoryConfig } from '../../config/categoryConfig';\nimport { useCategoriesConfig } from '../../config/useConfig';\nimport { DataEmojis } from '../../dataUtils/DataTypes';\nimport { useEmojiVirtualization } from '../../hooks/useEmojiVirtualization';\nimport { CategoryConfig } from '../../types/exposedTypes';\nimport { useEmojiListRef } from '../context/ElementRefContext';\nimport { useVisibleCategoriesState } from '../context/PickerContext';\nimport { useGetEmojisByCategory } from '../context/PickerDataContext';\n\nimport { EmojiCategory } from './EmojiCategory';\nimport { MeasureEmoji } from './MeasureEmoji';\n\nexport function EmojiList({ scrollTop }: { scrollTop: number }) {\n const categories = useCategoriesConfig();\n const [categoryHeights, setCategoryHeights] = React.useState<{\n [key: string]: number;\n }>({});\n const EmojiListRef = useEmojiListRef();\n const getEmojisByCategory = useGetEmojisByCategory();\n\n const labelHeight = getLabelHeight(EmojiListRef.current);\n\n let topOffset = 0;\n // role=\"grid\" makes screen readers switch out of virtual-cursor mode so\n // arrow keys reach the picker's keyboard handler. Each category is one\n // rowgroup: visual rows shift under virtualization, so the category is\n // the only stable row unit. Emoji buttons intentionally keep their\n // native button role for activation semantics.\n // https://github.com/ealush/emoji-picker-react/issues/508\n // The list markup is kept for a backwards-compatible DOM structure;\n // the grid role override is intentional.\n return (\n // eslint-disable-next-line jsx-a11y/no-noninteractive-element-to-interactive-role\n <ul className={cx(styles.emojiList)} ref={EmojiListRef} role=\"grid\">\n <MeasureEmoji />\n {categories.map((categoryConfig, index) => {\n const category = categoryFromCategoryConfig(categoryConfig);\n\n const currentOffset = topOffset;\n const categoryHeight = categoryHeights[category];\n if (categoryHeight) {\n topOffset += categoryHeight + labelHeight;\n }\n\n return (\n <RenderCategory\n key={category}\n categoryEmojis={getEmojisByCategory(category)}\n categoryConfig={categoryConfig}\n topOffset={currentOffset}\n isFirstCategory={index === 0}\n onHeightReady={(height) => {\n if (categoryHeights[category] !== height) {\n setCategoryHeights((prev) => ({\n ...prev,\n [category]: height,\n }));\n }\n }}\n scrollTop={scrollTop}\n />\n );\n })}\n </ul>\n );\n}\n\nfunction RenderCategory({\n categoryEmojis,\n categoryConfig,\n topOffset,\n onHeightReady,\n scrollTop,\n isFirstCategory,\n}: {\n categoryEmojis: DataEmojis;\n categoryConfig: CategoryConfig;\n topOffset: number;\n onHeightReady: (height: number) => void;\n scrollTop: number;\n isFirstCategory: boolean;\n}) {\n const [visibleCategories] = useVisibleCategoriesState();\n\n // The observer is the only writer of visibleCategories. When it never\n // fires (zero-height container at mount, hidden modal), no category\n // would ever render. The first category paints optimistically to break\n // the deadlock; the observer takes over from there.\n // https://github.com/ealush/emoji-picker-react/issues/469\n // https://github.com/ealush/emoji-picker-react/issues/475\n const isCategoryVisible =\n isFirstCategory || visibleCategories.includes(categoryConfig.category);\n\n const { virtualizedCounter, emojis, dimensions } = useEmojiVirtualization({\n categoryEmojis,\n topOffset,\n onHeightReady,\n scrollTop,\n isCategoryVisible,\n });\n\n return (\n <EmojiCategory\n categoryConfig={categoryConfig}\n height={dimensions?.categoryHeight}\n emojisPerRow={dimensions?.emojisPerRow}\n // Indicates that there are no visible emojis\n // Hence, the category should be hidden\n hidden={!emojis.length && virtualizedCounter === 0}\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 * as React from 'react';\nimport { useEffect } from 'react';\nimport { cx } from 'shipstyles';\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 { darkMode, stylesheet } from '../../Stylesheet/stylesheet';\nimport {\n useEmojiStyleConfig,\n useGetEmojiUrlConfig,\n} from '../../config/useConfig';\nimport {\n emojiHasVariations,\n emojiUnified,\n emojiVariations,\n} from '../../dataUtils/emojiUtils';\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 SVGTriangle from './svg/triangle.svg';\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 } =\n useVariationPickerTop(VariationPickerRef);\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 visible: {\n opacity: '1',\n visibility: 'visible',\n pointerEvents: 'all',\n transform: 'scale(1)',\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 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 backgroundImage: `url(${SVGTriangle})`,\n },\n ...darkMode('pointer', {\n backgroundPosition: '-25px 0',\n }),\n});\n","import * as React from 'react';\nimport { cx } from 'shipstyles';\n\nimport { ClassNames } from '../../DomUtils/classNames';\nimport {\n commonInteractionStyles,\n stylesheet,\n} from '../../Stylesheet/stylesheet';\nimport { MOUSE_EVENT_SOURCE } from '../../config/useConfig';\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 const scrollTop = useOnScroll(BodyRef);\n useMouseDownHandlers(BodyRef, MOUSE_EVENT_SOURCE.PICKER);\n useOnMouseMove();\n\n return (\n <div\n className={cx(styles.body, commonInteractionStyles.hiddenOnReactions)}\n ref={BodyRef}\n >\n <EmojiVariationPicker />\n <EmojiList scrollTop={scrollTop} />\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 { NullableElement } from './selectors';\n\nexport function detectEmojyPartiallyBelowFold(\n button: HTMLButtonElement,\n bodyRef: NullableElement,\n): number {\n if (!button || !bodyRef) {\n return 0;\n }\n\n const buttonRect = button.getBoundingClientRect();\n const bodyRect = bodyRef.getBoundingClientRect();\n\n // If the element is obscured by at least half of its size\n return bodyRect.height - (buttonRect.y - bodyRect.y);\n}\n","import * as React from 'react';\nimport { useEffect } from 'react';\n\nimport { detectEmojyPartiallyBelowFold } from '../DomUtils/detectEmojyPartiallyBelowFold';\nimport { focusElement } from '../DomUtils/focusElement';\nimport {\n allUnifiedFromEmojiElement,\n buttonFromTarget,\n} from '../DomUtils/selectors';\nimport {\n useBodyRef,\n usePickerMainRef,\n} 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 PickerMainRef = usePickerMainRef();\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, originalUnified } = allUnifiedFromEmojiElement(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 return;\n }\n\n const { unified, originalUnified } = allUnifiedFromEmojiElement(button);\n\n if (!unified || !originalUnified) {\n return;\n }\n\n setPreviewEmoji({\n unified,\n originalUnified,\n });\n\n // Let arrow-key navigation continue from the hovered emoji, but only\n // when focus is already inside the picker (or nowhere meaningful).\n // Pulling focus out of an external element steals the caret from\n // host-app inputs (issue #320). The guard runs again inside the\n // deferred callback in case focus moved out after this event.\n // Partially visible buttons are never focused: focusing would make\n // the browser scroll them into view, yanking the scroll position\n // while the user is browsing (see also PR #509).\n if (\n !isExternalElementFocused() &&\n !isPartiallyBelowFold(button, bodyRef)\n ) {\n focusElement(button, () => !isExternalElementFocused());\n }\n }\n\n function isPartiallyBelowFold(\n button: HTMLButtonElement,\n body: HTMLElement | null,\n ): boolean {\n const belowFoldByPx = detectEmojyPartiallyBelowFold(button, body);\n return belowFoldByPx < button.getBoundingClientRect().height;\n }\n\n function isExternalElementFocused(): boolean {\n const active = document.activeElement as HTMLElement | null;\n\n if (!active || active === document.body || active === document.documentElement) {\n return false;\n }\n\n return !PickerMainRef.current?.contains(active);\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, PickerMainRef, allow, setPreviewEmoji, isMouseDisallowed, allowMouseMove]);\n}\n","import * as React from 'react';\nimport { cx } from 'shipstyles';\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 * as React from 'react';\nimport { cx } from 'shipstyles';\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';\nimport { cx } from 'shipstyles';\n\nimport { stylesheet } from '../../../Stylesheet/stylesheet';\nimport { skinTonesNamed } from '../../../data/skinToneVariations';\nimport { SkinTones } from '../../../types/exposedTypes';\nimport { Button } from '../../atoms/Button';\n\ntype Props = {\n isOpen: boolean;\n onClick: () => void;\n isActive: boolean;\n skinToneVariation: SkinTones;\n style?: React.CSSProperties;\n tabIndex?: number;\n};\n\n// eslint-disable-next-line complexity\nexport function BtnSkinToneVariation({\n isOpen,\n onClick,\n isActive,\n skinToneVariation,\n style,\n tabIndex,\n}: Props) {\n return (\n <Button\n style={style}\n onClick={onClick}\n tabIndex={tabIndex}\n className={cx(\n `epr-tone-${skinToneVariation}`,\n styles.tone,\n !isOpen && styles.closedTone,\n isActive && styles.active,\n )}\n aria-pressed={isActive}\n aria-label={`Skin tone ${skinTonesNamed[skinToneVariation as SkinTones]}`}\n ></Button>\n );\n}\n\nconst styles = stylesheet.create({\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 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 border: '1px solid var(--epr-skin-tone-outer-border-color)',\n boxShadow: 'inset 0px 0px 0 1px var(--epr-skin-tone-inner-border-color)',\n ':hover': {\n boxShadow:\n '0 0 0 3px var(--epr-active-skin-hover-color), inset 0px 0px 0 1px var(--epr-skin-tone-inner-border-color)',\n },\n ':focus': {\n boxShadow: '0 0 0 3px var(--epr-focus-bg-color)',\n },\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","/* eslint-disable complexity */\nimport * as React from 'react';\nimport { cx } from 'shipstyles';\n\nimport { ClassNames } from '../../../DomUtils/classNames';\nimport { stylesheet } from '../../../Stylesheet/stylesheet';\nimport {\n useOnSkinToneChangeConfig,\n useSkinTonesDisabledConfig,\n} from '../../../config/useConfig';\nimport skinToneVariations from '../../../data/skinToneVariations';\nimport { useCloseAllOpenToggles } from '../../../hooks/useCloseAllOpenToggles';\nimport { useFocusSearchInput } from '../../../hooks/useFocus';\nimport Absolute from '../../Layout/Absolute';\nimport Relative from '../../Layout/Relative';\nimport { useSkinTonePickerRef } from '../../context/ElementRefContext';\nimport {\n useActiveSkinToneState,\n useSkinToneFanOpenState,\n} from '../../context/PickerContext';\n\nimport { BtnSkinToneVariation } from './BtnSkinToneVariation';\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 onSkinToneChange = useOnSkinToneChangeConfig();\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 vertical && isOpen && styles.verticalShadow,\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\n return (\n <BtnSkinToneVariation\n key={skinToneVariation}\n skinToneVariation={skinToneVariation}\n isOpen={isOpen}\n // Roving tabindex: when the fan is closed the inactive tones\n // are invisible (opacity: 0, stacked), so they must not be\n // reachable via Tab. The active tone stays tabbable to open\n // the fan from the keyboard.\n // https://github.com/ealush/emoji-picker-react/issues/492\n tabIndex={isOpen || active ? 0 : -1}\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 isActive={active}\n onClick={() => {\n if (isOpen) {\n setActiveSkinTone(skinToneVariation);\n onSkinToneChange(skinToneVariation);\n focusSearchInput();\n } else {\n setIsOpen(true);\n }\n closeAllOpenToggles();\n }}\n />\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: '9px',\n alignItems: 'flex-end',\n flexDirection: 'column',\n borderRadius: '6px',\n border: '1px solid var(--epr-bg-color)',\n },\n verticalShadow: {\n boxShadow: '0px 0 7px var(--epr-picker-border-color)',\n },\n open: {\n // @ts-ignore - backdropFilter is not recognized.\n backdropFilter: 'blur(5px)',\n background: 'var(--epr-skin-tone-picker-menu-color)',\n '.epr-active': {\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 },\n});\n","import * as React from 'react';\nimport { useState } from 'react';\nimport { cx } from 'shipstyles';\n\nimport {\n commonInteractionStyles,\n stylesheet,\n} from '../../Stylesheet/stylesheet';\nimport {\n useEmojiStyleConfig,\n useGetEmojiUrlConfig,\n usePreviewConfig,\n} from '../../config/useConfig';\nimport { emojiName, emojiUnified } from '../../dataUtils/emojiUtils';\nimport { useEmojiPreviewEvents } from '../../hooks/useEmojiPreviewEvents';\nimport { useIsSkinToneInPreview } from '../../hooks/useShouldShowSkinTonePicker';\nimport Flex from '../Layout/Flex';\nimport Space from '../Layout/Space';\nimport {\n useEmojiVariationPickerState,\n useReactionsModeState,\n} from '../context/PickerContext';\nimport { usePickerDataContext } from '../context/PickerDataContext';\nimport { ViewOnlyEmoji } from '../emoji/ViewOnlyEmoji';\nimport { SkinTonePickerMenu } from '../header/SkinTonePicker/SkinTonePicker';\n\nexport function Preview() {\n const previewConfig = usePreviewConfig();\n const isSkinToneInPreview = useIsSkinToneInPreview();\n const [reactionsOpen] = useReactionsModeState();\n\n if (!previewConfig.showPreview) {\n return null;\n }\n\n return (\n <Flex\n className={cx(\n styles.preview,\n commonInteractionStyles.hiddenOnReactions,\n reactionsOpen && styles.hideOnReactions,\n )}\n >\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 const { emojiByUnified } = usePickerDataContext();\n\n useEmojiPreviewEvents(previewConfig.showPreview, setPreviewEmoji);\n\n const emoji = emojiByUnified(\n (previewEmoji?.unified ?? previewEmoji?.originalUnified) as\n | string\n | undefined,\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 className={cx(styles.emoji)}\n />\n ) : defaultEmoji ? (\n <ViewOnlyEmoji\n unified={emojiUnified(defaultEmoji)}\n emoji={defaultEmoji}\n emojiStyle={emojiStyle}\n size={45}\n getEmojiUrl={getEmojiUrl}\n className={cx(styles.emoji)}\n />\n ) : null}\n </div>\n <div className={cx(styles.label)}>\n {show ? emojiName(emoji) : defaultText}\n </div>\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 emoji: {\n padding: '0',\n },\n hideOnReactions: {\n opacity: '0',\n transition: 'opacity 0.5s ease-in-out',\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,\n setVisibleCategories,\n}: {\n setActiveCategory: (category: string) => void;\n setVisibleCategories: (categories: string[]) => void;\n}) {\n const BodyRef = useBodyRef();\n\n useEffect(() => {\n const visibleCategories = new Map<string, number>();\n const intersectingCategories = new Map<string, boolean>();\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\n if (!id) {\n continue;\n }\n\n visibleCategories.set(id, entry.intersectionRatio);\n intersectingCategories.set(id, entry.isIntersecting);\n }\n\n const ratios = Array.from(visibleCategories);\n const visibleCats = ratios\n .filter(([id, ratio]) => ratio > 0 || intersectingCategories.get(id))\n .map(([id]) => id);\n\n setVisibleCategories(visibleCats);\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 root: bodyRef,\n threshold: [0, 1],\n },\n );\n bodyRef\n ?.querySelectorAll(asSelectors(ClassNames.category))\n .forEach((el) => {\n observer.observe(el);\n });\n\n return () => {\n observer.disconnect();\n };\n }, [BodyRef, setActiveCategory, setVisibleCategories]);\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 * as React from 'react';\n\n// Default navigation icons, extracted from the former CategoryNav.svg\n// sprite (row 0). Paint uses currentColor so the fill follows the\n// --epr-category-icon-*-color variables.\n// https://github.com/ealush/emoji-picker-react/issues/399\n\nconst COLUMNS: Record<string, number> = {\n smileys_people: 0,\n animals_nature: 1,\n food_drink: 2,\n travel_places: 3,\n activities: 4,\n objects: 5,\n symbols: 6,\n flags: 7,\n suggested: 8,\n custom: 9,\n};\n\nconst SHAPES: Record<number, React.ReactNode> = {\n 0: (\n <>\n <path\n fill=\"currentColor\"\n stroke=\"currentColor\"\n strokeWidth=\"0.1\"\n strokeMiterlimit=\"10\"\n d=\"M12.8,9.5c0.6,0,1.1-0.5,1.1-1.2\n\t\tc0-0.6-0.5-1.1-1.1-1.1c-0.6,0-1.2,0.5-1.2,1.1S12.2,9.5,12.8,9.5z M12.8,7.9c0.2,0,0.4,0.2,0.4,0.4c0,0.2-0.2,0.4-0.4,0.4\n\t\tc-0.2,0-0.4-0.2-0.4-0.4C12.4,8.1,12.6,7.9,12.8,7.9z\"\n />\n <path\n fill=\"currentColor\"\n stroke=\"currentColor\"\n strokeWidth=\"0.1\"\n strokeMiterlimit=\"10\"\n d=\"M7.2,9.5c0.6,0,1.2-0.5,1.2-1.2\n\t\tc0-0.6-0.5-1.1-1.2-1.1c-0.6,0-1.1,0.5-1.1,1.1S6.6,9.5,7.2,9.5z M7.2,7.9c0.2,0,0.4,0.2,0.4,0.4c0,0.2-0.2,0.4-0.4,0.4\n\t\tC7,8.7,6.8,8.5,6.8,8.3C6.8,8.1,7,7.9,7.2,7.9z\"\n />\n <path\n fill=\"currentColor\"\n stroke=\"currentColor\"\n strokeWidth=\"0.1\"\n strokeMiterlimit=\"10\"\n d=\"M14.6,11.2c-0.1-0.1-0.2-0.2-0.3-0.2H5.7\n\t\tc-0.1,0-0.2,0.1-0.3,0.2c-0.1,0.1-0.1,0.2,0,0.4c0.7,2,2.5,3.3,4.6,3.3s3.9-1.3,4.6-3.3C14.7,11.4,14.7,11.3,14.6,11.2z M10,14.1\n\t\tc-1.6,0-3-0.9-3.7-2.2h7.3C13,13.2,11.6,14.1,10,14.1z\"\n />\n <path\n fill=\"currentColor\"\n stroke=\"currentColor\"\n strokeWidth=\"0.1\"\n strokeMiterlimit=\"10\"\n d=\"M10,3c-3.8,0-7,3.1-7,7s3.1,7,7,7s7-3.1,7-7\n\t\tS13.8,3,10,3z M10,16.2c-3.4,0-6.2-2.8-6.2-6.2S6.6,3.8,10,3.8s6.2,2.8,6.2,6.2S13.4,16.2,10,16.2z\"\n />\n </>\n ),\n 1: (\n <>\n <path\n fill=\"none\"\n stroke=\"currentColor\"\n d=\"M24.2,11V3.5c0.1,0.1,0.8,0.9,2.8,3.1c2.5-1.7,5.6-0.7,6.9,0l2.4-3.1v7.1\n\t\t\tc0,1.2-0.1,2.5-0.9,3.4c-1,1.2-2.7,2.5-5.3,2.5c-2.9,0-4.5-1.5-5.3-2.9C24.2,12.9,24.2,11.9,24.2,11z\"\n />\n <path\n fill=\"none\"\n stroke=\"currentColor\"\n strokeLinecap=\"round\"\n d=\"M21.2,10l5.4,1.2\"\n />\n <path\n fill=\"none\"\n stroke=\"currentColor\"\n strokeLinecap=\"round\"\n d=\"M21.2,14.1l5.4-1.2\"\n />\n <path\n fill=\"none\"\n stroke=\"currentColor\"\n strokeLinecap=\"round\"\n d=\"M38.8,10l-5.4,1.2\"\n />\n <path\n fill=\"none\"\n stroke=\"currentColor\"\n strokeLinecap=\"round\"\n d=\"M38.8,14.1l-5.4-1.2\"\n />\n <path\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n fill=\"currentColor\"\n d=\"M29.5,12.4L29,11.7c-0.2-0.3,0-0.6,0.3-0.6h1.4\n\t\t\tc0.3,0,0.5,0.4,0.3,0.6l-0.7,1l0,0c-0.7,1.2-2.6,1.1-3.1-0.3l-0.1-0.2c-0.1-0.2,0-0.4,0.2-0.5s0.4,0,0.5,0.2l0.1,0.2\n\t\t\tC28.3,12.7,29.1,12.9,29.5,12.4z\"\n />\n <path\n fill=\"none\"\n stroke=\"currentColor\"\n strokeLinecap=\"round\"\n d=\"M32.4,12.1l-0.1,0.2c-0.4,1-1.8,1.1-2.3,0.2\"\n />\n <ellipse fill=\"currentColor\" cx=\"27.6\" cy=\"9.7\" rx=\"0.7\" ry=\"0.7\" />\n <ellipse fill=\"currentColor\" cx=\"32.4\" cy=\"9.7\" rx=\"0.7\" ry=\"0.7\" />\n </>\n ),\n 2: (\n <>\n <path\n fill=\"none\"\n stroke=\"currentColor\"\n d=\"M48.1,3.5h3.7c2.5,0,4.5,2,4.5,4.5c0,0.5-0.4,0.9-0.9,0.9H44.5c-0.5,0-0.9-0.4-0.9-0.9\n\t\t\t\tC43.6,5.5,45.6,3.5,48.1,3.5z\"\n />\n <path\n fill=\"none\"\n stroke=\"currentColor\"\n strokeLinecap=\"round\"\n d=\"M43.5,8.7c-0.2,0.1-0.5,1.2,0,1.5c1.4,0.9,8.5,0.8,11.3,0.6\n\t\t\t\tc0.8-0.1,1.6-0.4,1.7-1.2c0-0.3-0.1-0.6-0.6-0.9\"\n />\n <path\n fill=\"none\"\n stroke=\"currentColor\"\n strokeLinecap=\"round\"\n d=\"M43.5,10.6L43.3,11c-0.2,0.5,0.2,1,0.7,0.9\n\t\t\t\tc0.3-0.1,0.5,0.1,0.7,0.3l0.1,0.2c0.3,0.5,1,0.6,1.5,0.2l0,0c0.3-0.2,0.7-0.3,1-0.2l0.8,0.3c0.4,0.1,0.8,0.1,1.2,0l0.5-0.2\n\t\t\t\tc0.4-0.2,0.9-0.2,1.3,0l0.5,0.2c0.4,0.2,0.8,0.1,1.2-0.1l0.2-0.1c0.3-0.2,0.8-0.1,1.1,0.1l0.2,0.2c0.3,0.3,0.8,0.2,1-0.2l0.1-0.2\n\t\t\t\tc0.1-0.2,0-0.3,0.2-0.4c0.5,0,1.2-0.3,1.1-0.7l-0.4-1.1\"\n />\n <path\n fill=\"none\"\n stroke=\"currentColor\"\n strokeLinecap=\"round\"\n d=\"M43.5,12.1c-0.1,0.2-0.3,0.8,0,1.1c0.3,0.4,3,1.1,6.4,1.1\n\t\t\t\tc2.2,0,4.6-0.3,6-0.6c0.5-0.1,0.9-0.4,0.8-0.9c0-0.2-0.2-0.5-0.4-0.7\"\n />\n <path\n fill=\"none\"\n stroke=\"currentColor\"\n strokeLinecap=\"round\"\n d=\"M43.5,13.3c0,0.5,0.6,2.4,1.3,2.6c1.8,0.8,5.7,0.7,8.1,0.5\n\t\t\t\tc1.3-0.1,2.5-0.7,3.2-1.8c0.3-0.5,0.5-1,0.5-1.4\"\n />\n <ellipse fill=\"currentColor\" cx=\"51.6\" cy=\"6.5\" rx=\"0.3\" ry=\"0.4\" />\n <ellipse fill=\"currentColor\" cx=\"53\" cy=\"4.9\" rx=\"0.3\" ry=\"0.4\" />\n <ellipse fill=\"currentColor\" cx=\"53\" cy=\"7.2\" rx=\"0.3\" ry=\"0.4\" />\n <ellipse fill=\"currentColor\" cx=\"54.3\" cy=\"6.5\" rx=\"0.3\" ry=\"0.4\" />\n <ellipse fill=\"currentColor\" cx=\"50.9\" cy=\"4.9\" rx=\"0.3\" ry=\"0.4\" />\n </>\n ),\n 3: (\n <>\n <path\n fill=\"none\"\n stroke=\"currentColor\"\n d=\"M64.1,13.4l2.3,0c0.2,0,0.4,0.2,0.4,0.4v2.1c0,0.2-0.2,0.4-0.4,0.4h-2.3\n\t\t\t\tc-0.2,0-0.4-0.2-0.4-0.4v-2.1C63.7,13.6,63.8,13.4,64.1,13.4z\"\n />\n <path\n fill=\"none\"\n stroke=\"currentColor\"\n d=\"M73.5,13.4h2.4c0.2,0,0.4,0.2,0.4,0.4v2.1c0,0.2-0.2,0.4-0.4,0.4h-2.4\n\t\t\t\tc-0.2,0-0.4-0.2-0.4-0.4l0-2.1C73.1,13.6,73.3,13.4,73.5,13.4z\"\n />\n <path fill=\"none\" stroke=\"currentColor\" d=\"M63.7,8.4h12.6v5H63.7V8.4z\" />\n <path\n fill=\"none\"\n stroke=\"currentColor\"\n d=\"M65.5,3.6h8.9c1,0,1.9,0.8,1.9,1.9v3.1H63.7V5.5C63.7,4.4,64.5,3.6,65.5,3.6z\"\n />\n <ellipse fill=\"currentColor\" cx=\"66.2\" cy=\"10.9\" rx=\"0.9\" ry=\"0.9\" />\n <ellipse fill=\"currentColor\" cx=\"73.8\" cy=\"10.9\" rx=\"0.9\" ry=\"0.9\" />\n </>\n ),\n 4: (\n <>\n <path\n fill=\"none\"\n stroke=\"currentColor\"\n d=\"M96.4,10c0,3.6-2.9,6.5-6.4,6.5s-6.4-2.9-6.4-6.5s2.9-6.5,6.4-6.5S96.4,6.4,96.4,10z\"\n />\n <path\n fill=\"none\"\n stroke=\"currentColor\"\n d=\"M96.3,8.6c0,0,0,0.1,0,0.1c-0.9,0.1-2.9,0.1-4.6-1.2c-1.1-0.8-2-1.7-2.6-2.5\n\t\t\t\tc-0.3-0.4-0.6-0.8-0.7-1.1c-0.1-0.1-0.1-0.2-0.1-0.2c0.5-0.1,1.2-0.2,2-0.2c1.2,0,2.5,0.3,3.5,1.1c1,0.8,1.7,1.8,2.1,2.8\n\t\t\t\tC96.1,7.9,96.2,8.3,96.3,8.6z\"\n />\n <path\n fill=\"none\"\n stroke=\"currentColor\"\n d=\"M84,12.1c0,0,0-0.1,0-0.1c0.9-0.2,2.9-0.4,4.7,0.6c1.1,0.6,1.9,1.5,2.4,2.3\n\t\t\t\tc0.4,0.5,0.6,1,0.7,1.3c-0.4,0.1-1,0.2-1.7,0.3c-1,0-2.1-0.1-3.2-0.8c-1.1-0.6-1.9-1.6-2.4-2.5C84.2,12.8,84.1,12.4,84,12.1z\"\n />\n </>\n ),\n 5: (\n <>\n <path\n fill=\"none\"\n stroke=\"currentColor\"\n strokeLinecap=\"round\"\n d=\"M116.3,6.8l-1.4,2L114.1,8l-0.6-0.7l0,0.9l-0.1,8.2h-6.8l-0.1-8.2\n\t\t\t\tl0-0.9L105.9,8l-0.8,0.8l-1.4-2l2.6-2.9c0.1-0.1,0.2-0.1,0.3-0.1h1.3l0.4,0.7c0.7,1.3,2.6,1.3,3.3-0.1l0.3-0.6h1.2\n\t\t\t\tc0.1,0,0.2,0,0.3,0.1l0.3-0.3l-0.3,0.3L116.3,6.8z\"\n />\n <path\n fill=\"none\"\n stroke=\"currentColor\"\n d=\"M110.1,7.7h2v0.9c0,0.4-0.4,0.7-1,0.7c-0.6,0-1-0.3-1-0.7L110.1,7.7L110.1,7.7z\"\n />\n </>\n ),\n 6: (\n <>\n <path\n fill=\"none\"\n stroke=\"currentColor\"\n d=\"M126.8,14.3c0,1.2-1,2.2-2.2,2.2s-2.2-1-2.2-2.2s1-2.2,2.2-2.2S126.8,13.1,126.8,14.3z\"\n />\n <path\n fill=\"none\"\n stroke=\"currentColor\"\n d=\"M137.6,14.3c0,1.2-1,2.2-2.2,2.2c-1.2,0-2.2-1-2.2-2.2s1-2.2,2.2-2.2\n\t\t\t\tC136.6,12.1,137.6,13.1,137.6,14.3z\"\n />\n <path fill=\"none\" stroke=\"currentColor\" d=\"M126.8,4.4v9.9\" />\n <path fill=\"none\" stroke=\"currentColor\" d=\"M137.7,4.4v9.9\" />\n <path\n fill=\"none\"\n stroke=\"currentColor\"\n d=\"M126.8,3.5h10.8v2.7h-10.8C126.8,6.2,126.8,3.5,126.8,3.5z\"\n />\n </>\n ),\n 7: (\n <>\n <path\n fill=\"currentColor\"\n stroke=\"currentColor\"\n strokeWidth=\"0.25\"\n strokeMiterlimit=\"10\"\n d=\"M156,4.3c-0.2-0.1-0.4-0.1-0.5,0\n\tc0,0-0.2,0.1-0.9,0.1c-0.7,0-2.4-0.1-3.8-0.6c-0.8-0.3-1.7-0.5-2.5-0.5c-0.2,0-0.4,0-0.5,0c-1.3,0-2.5,0.3-3.6,1\n\tc-0.2,0.1-0.2,0.2-0.2,0.4v11.6c0,0.3,0.1,0.5,0.3,0.5c0.6,0,0.5-0.4,0.5-0.6v-5.7c0.7-0.3,3.2-1.1,5.8-0.1c1.6,0.6,3.5,0.7,4.3,0.7\n\tc0.8,0,1.3-0.3,1.3-0.3c0.2-0.1,0.3-0.2,0.3-0.4V4.7C156.2,4.5,156.1,4.4,156,4.3z M155.6,10.2c-0.1,0-0.7,0.1-1,0.1\n\tc-0.7,0-2.4-0.1-3.8-0.6c-2.5-1-5-0.5-6.2-0.1V4.7c0.9-0.5,2.2-0.7,3.2-0.7c0.1,0,0.3,0,0.4,0c0.7,0,1.5,0.2,2.2,0.4\n\tc1.6,0.6,3.5,0.7,4.3,0.7c0.2,0,0.8,0,1-0.1V10.2z\"\n />\n </>\n ),\n 8: (\n <>\n <path\n fill=\"currentColor\"\n d=\"M170.8,3.1L170.8,3.1c-0.3,0-0.5,0-0.8,0c-2.1,0-4,1-5.3,2.5l-0.1,0l-0.1-0.1l-1-1.2l-0.3,3.4l3.4,0.3\n\t\t\t\tl-1.1-1.3l-0.1-0.1l0.1-0.1c1.1-1.4,3-2.3,5-2.1l0,0c3.2,0.3,5.5,3.1,5.2,6.3c-0.3,3-3.1,5.3-6.1,5.1c-3.1-0.2-5.4-2.9-5.3-6\n\t\t\t\tL163,9.5c-0.2,3.8,2.6,7.1,6.3,7.4c3.9,0.4,7.3-2.6,7.6-6.5C177.2,6.8,174.4,3.5,170.8,3.1z\"\n />\n <path\n fill=\"currentColor\"\n d=\"M170.3,7.4c0-0.3-0.3-0.6-0.6-0.6S169,7.1,169,7.4v3.2c0,0.2,0.1,0.3,0.2,0.4c0.1,0.1,0.3,0.2,0.4,0.2\n\t\t\t\th2.4c0.4,0,0.6-0.3,0.6-0.6s-0.3-0.6-0.6-0.6h-1.6h-0.2V9.8L170.3,7.4L170.3,7.4z\"\n />\n </>\n ),\n 9: (\n <>\n <path\n fill=\"none\"\n stroke=\"currentColor\"\n d=\"M186.2,3.4h7.7c1.5,0,2.7,1.2,2.7,2.7v7.7c0,1.5-1.2,2.7-2.7,2.7h-7.7\n\t\t\t\tc-1.5,0-2.7-1.2-2.7-2.7V6.1C183.4,4.6,184.7,3.4,186.2,3.4z\"\n />\n <ellipse fill=\"currentColor\" cx=\"186\" cy=\"8.9\" rx=\"0.7\" ry=\"0.7\" />\n <ellipse fill=\"currentColor\" cx=\"194\" cy=\"6.7\" rx=\"0.7\" ry=\"0.7\" />\n <path\n fill=\"none\"\n stroke=\"currentColor\"\n strokeLinecap=\"round\"\n d=\"M186,13.3l0.4-0.3c0.4-0.3,1-0.3,1.5-0.1l1,0.4\n\t\t\t\tc0.5,0.2,1,0.2,1.5-0.1l0.8-0.5c0.4-0.3,1-0.3,1.5-0.1l1.8,0.8\"\n />\n </>\n ),\n};\n\nexport function CategoryNavIcon({ category }: { category: string }) {\n const column = COLUMNS[category] ?? 0;\n return (\n <svg\n viewBox={`${column * 20} 0 20 20`}\n width=\"100%\"\n height=\"100%\"\n // Absolutely positioned over the button's padding box, matching the\n // geometry of the former background-image sprite. Percentage sizes\n // alone would resolve against the smaller content box (the button\n // reset carries padding), shrinking the glyph.\n style={{\n display: 'block',\n position: 'absolute',\n top: 0,\n left: 0,\n width: '100%',\n height: '100%',\n }}\n aria-hidden=\"true\"\n >\n {SHAPES[column] ?? null}\n </svg>\n );\n}\n","import * as React from 'react';\nimport { cx } from 'shipstyles';\n\nimport { ClassNames } from '../../DomUtils/classNames';\nimport {\n commonInteractionStyles,\n darkMode,\n stylesheet,\n} from '../../Stylesheet/stylesheet';\nimport { categoryNameFromCategoryConfig } from '../../config/categoryConfig';\nimport { CategoryConfig } from '../../types/exposedTypes';\nimport { Button } from '../atoms/Button';\n\nimport { CategoryNavIcon } from './CategoryNavIcon';\n\ntype Props = {\n isActiveCategory: boolean;\n category: string;\n allowNavigation: boolean;\n onClick: () => void;\n categoryConfig: CategoryConfig;\n customIcon?: React.ReactNode;\n};\n\nexport function CategoryButton({\n isActiveCategory,\n category,\n allowNavigation,\n categoryConfig,\n onClick,\n customIcon,\n}: Props) {\n // Priority: categoryConfig.icon > customIcon prop (from categoryIcons)\n const icon = categoryConfig.icon ?? customIcon;\n const hasCustomIcon = icon != null;\n\n return (\n <Button\n tabIndex={allowNavigation ? 0 : -1}\n className={cx(\n styles.catBtn,\n commonInteractionStyles.categoryBtn,\n hasCustomIcon ? styles.customIcon : `epr-icn-${category}`,\n {\n [ClassNames.active]: isActiveCategory,\n },\n )}\n onClick={onClick}\n aria-label={categoryNameFromCategoryConfig(categoryConfig)}\n aria-selected={isActiveCategory}\n role=\"tab\"\n aria-controls=\"epr-category-nav-id\"\n >\n {hasCustomIcon ? icon : <CategoryNavIcon category={category} />}\n </Button>\n );\n}\n\nconst DarkActiveColor = {\n color: 'var(--epr-category-icon-active-color, #6AA9DD)',\n};\nconst DarkInactiveColor = {\n color: 'var(--epr-category-icon-inactive-color, #C0C0BF)',\n};\n\nconst DarkInactivePosition = {\n ':not(.epr-search-active)': {\n catBtn: {\n ':hover': DarkActiveColor,\n '&.epr-active': DarkActiveColor,\n },\n },\n};\n\nconst styles = stylesheet.create({\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 outline: 'none',\n // Icon glyphs are inline SVGs painted with currentColor, so the fill\n // follows the --epr-category-icon-*-color variables.\n // https://github.com/ealush/emoji-picker-react/issues/399\n color: 'var(--epr-category-icon-inactive-color, #868686)',\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 customIcon: {\n '.': 'epr-cat-btn-custom-icon',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n },\n ...darkMode('catBtn', DarkInactiveColor),\n '.epr-dark-theme': {\n ...DarkInactivePosition,\n },\n '.epr-auto-theme': {\n ...DarkInactivePosition,\n },\n});\n","import * as React from 'react';\nimport { useState } from 'react';\nimport { cx } from 'shipstyles';\n\nimport { stylesheet } from '../../Stylesheet/stylesheet';\nimport { categoryFromCategoryConfig } from '../../config/categoryConfig';\nimport {\n useCategoriesConfig,\n useCategoryIconsConfig,\n} 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 { Categories } from '../../types/exposedTypes';\nimport { useCategoryNavigationRef } from '../context/ElementRefContext';\nimport { useVisibleCategoriesState } from '../context/PickerContext';\n\nimport { CategoryButton } from './CategoryButton';\n\nexport function CategoryNavigation() {\n const [activeCategory, setActiveCategory] = useState<string | null>(null);\n const [, setVisibleCategories] = useVisibleCategoriesState();\n const scrollCategoryIntoView = useScrollCategoryIntoView();\n useActiveCategoryScrollDetection({ setActiveCategory, setVisibleCategories });\n const isSearchMode = useIsSearchMode();\n\n const categoriesConfig = useCategoriesConfig();\n const categoryIcons = useCategoryIconsConfig();\n const CategoryNavigationRef = useCategoryNavigationRef();\n const hideCustomCategory = useShouldHideCustomEmojis();\n\n const visibleCategories = categoriesConfig.filter(\n categoryConfig =>\n !(isCustomCategory(categoryConfig) && hideCustomCategory),\n );\n\n // A single tab navigates nowhere — hide the bar to reclaim its space.\n // https://github.com/ealush/emoji-picker-react/issues/396\n if (visibleCategories.length <= 1) {\n return null;\n }\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 {visibleCategories.map(categoryConfig => {\n const category = categoryFromCategoryConfig(categoryConfig);\n const isActiveCategory = category === activeCategory;\n\n const allowNavigation = !isSearchMode && !isActiveCategory;\n\n return (\n <CategoryButton\n key={category}\n category={category}\n isActiveCategory={isActiveCategory}\n allowNavigation={allowNavigation}\n categoryConfig={categoryConfig}\n customIcon={categoryIcons[category as Categories]}\n onClick={() => {\n scrollCategoryIntoView(category);\n setTimeout(() => {\n setActiveCategory(category);\n }, 10);\n }}\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});\n","import * as React from 'react';\nimport { cx } from 'shipstyles';\n\nimport {\n commonInteractionStyles,\n darkMode,\n stylesheet,\n} from '../../../Stylesheet/stylesheet';\nimport { useSearchClearButtonLabelConfig } from '../../../config/useConfig';\nimport { useClearSearch } from '../../../hooks/useFilter';\nimport { Button } from '../../atoms/Button';\n\nimport SVGTimes from './svg/times.svg';\n\nexport function BtnClearSearch() {\n const clearSearch = useClearSearch();\n const searchClearButtonLabel = useSearchClearButtonLabelConfig();\n\n return (\n <Button\n className={cx(\n styles.btnClearSearch,\n commonInteractionStyles.visibleOnSearchOnly,\n )}\n onClick={clearSearch}\n aria-label={searchClearButtonLabel}\n title={searchClearButtonLabel}\n >\n <div className={cx(styles.icnClearnSearch)} />\n </Button>\n );\n}\n\nconst HoverDark = {\n ':hover': {\n '> .epr-icn-clear-search': {\n backgroundPositionY: '-60px',\n },\n },\n};\n\nconst styles = stylesheet.create({\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 backgroundImage: `url(${SVGTimes})`,\n ':hover': {\n backgroundPositionY: '-20px',\n },\n ':focus': {\n backgroundPositionY: '-20px',\n },\n },\n ...darkMode('icnClearnSearch', {\n backgroundPositionY: '-40px',\n }),\n ...darkMode('btnClearSearch', HoverDark),\n});\n","import * as React from 'react';\nimport { cx } from 'shipstyles';\n\nimport { darkMode, stylesheet } from '../../../Stylesheet/stylesheet';\n\nimport SVGMagnifier from './svg/magnifier.svg';\n\nexport function IcnSearch() {\n return <div className={cx(styles.icnSearch)} />;\n}\n\nconst styles = stylesheet.create({\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 backgroundImage: `url(${SVGMagnifier})`,\n },\n ...darkMode('icnSearch', {\n backgroundPositionY: '-20px',\n }),\n});\n","import * as React from 'react';\nimport { cx } from 'shipstyles';\n\nimport { darkMode, stylesheet } from '../../../Stylesheet/stylesheet';\nimport {\n useAutoFocusSearchConfig,\n useSearchDisabledConfig,\n useSearchPlaceHolderConfig,\n} from '../../../config/useConfig';\nimport { useCloseAllOpenToggles } from '../../../hooks/useCloseAllOpenToggles';\nimport { useFilter } from '../../../hooks/useFilter';\nimport { useIsSkinToneInSearch } from '../../../hooks/useShouldShowSkinTonePicker';\nimport Flex from '../../Layout/Flex';\nimport Relative from '../../Layout/Relative';\nimport { useSearchInputRef } from '../../context/ElementRefContext';\nimport { SkinTonePicker } from '../SkinTonePicker/SkinTonePicker';\n\nimport { BtnClearSearch } from './BtnClearSearch';\nimport { IcnSearch } from './IcnSearch';\nimport SVGTimes from './svg/times.svg';\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 closeAllOpenToggles = useCloseAllOpenToggles();\n const SearchInputRef = useSearchInputRef();\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 <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 onChange(event?.target?.value ?? value);\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 <IcnSearch />\n <BtnClearSearch />\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-border-color)',\n width: '100%',\n ':focus': {\n backgroundColor: 'var(--epr-search-input-bg-color-active)',\n border: '1px solid var(--epr-search-border-color-active)',\n },\n '::placeholder': {\n color: 'var(--epr-search-input-placeholder-color)',\n },\n },\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 backgroundImage: `url(${SVGTimes})`,\n ':hover': {\n backgroundPositionY: '-20px',\n },\n ':focus': {\n backgroundPositionY: '-20px',\n },\n },\n ...darkMode('icnClearnSearch', {\n backgroundPositionY: '-40px',\n }),\n ...darkMode('btnClearSearch', {\n ':hover > .epr-icn-clear-search': {\n backgroundPositionY: '-60px',\n },\n }),\n});\n","import * as React from 'react';\nimport { cx } from 'shipstyles';\n\nimport { commonInteractionStyles } from '../../Stylesheet/stylesheet';\nimport Relative from '../Layout/Relative';\nimport { CategoryNavigation } from '../navigation/CategoryNavigation';\n\nimport { SearchContainer } from './Search/Search';\n\nexport function Header() {\n return (\n <Relative\n className={cx('epr-header', commonInteractionStyles.hiddenOnReactions)}\n >\n <SearchContainer />\n <CategoryNavigation />\n </Relative>\n );\n}\n","import * as React from 'react';\n\nimport { PickerStyleTag } from './Stylesheet/stylesheet';\nimport { Reactions } from './components/Reactions/Reactions';\nimport { Body } from './components/body/Body';\nimport { ElementRefContextProvider } from './components/context/ElementRefContext';\nimport { PickerConfigProvider } from './components/context/PickerConfigContext';\nimport { useReactionsModeState } from './components/context/PickerContext';\nimport { PickerDataProvider } from './components/context/PickerDataContext';\nimport { Preview } from './components/footer/Preview';\nimport { Header } from './components/header/Header';\nimport PickerMain from './components/main/PickerMain';\nimport { compareConfig } from './config/compareConfig';\nimport { useAllowExpandReactions, useOpenConfig } from './config/useConfig';\n\nimport { PickerProps } from './index';\n\nfunction EmojiPicker(props: PickerProps) {\n return (\n <ElementRefContextProvider>\n <PickerStyleTag nonce={props.nonce} />\n <PickerConfigProvider {...props}>\n <PickerDataProvider>\n <ContentControl />\n </PickerDataProvider>\n </PickerConfigProvider>\n </ElementRefContextProvider>\n );\n}\n\nfunction ContentControl() {\n const [reactionsDefaultOpen] = useReactionsModeState();\n const allowExpandReactions = useAllowExpandReactions();\n\n const [renderAll, setRenderAll] = React.useState(!reactionsDefaultOpen);\n const isOpen = useOpenConfig();\n\n React.useEffect(() => {\n if (reactionsDefaultOpen && !allowExpandReactions) {\n return;\n }\n\n if (!renderAll) {\n setRenderAll(true);\n }\n }, [renderAll, allowExpandReactions, reactionsDefaultOpen]);\n\n if (!isOpen) {\n return null;\n }\n\n return (\n <PickerMain>\n <Reactions />\n <ExpandedPickerContent renderAll={renderAll} />\n </PickerMain>\n );\n}\n\nfunction ExpandedPickerContent({ renderAll }: { renderAll: boolean }) {\n if (!renderAll) {\n return null;\n }\n\n return (\n <>\n <Header />\n <Body />\n <Preview />\n </>\n );\n}\n\n// eslint-disable-next-line complexity\nexport default React.memo(EmojiPicker, compareConfig);\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 CategoryIcons,\n CategoryConfig,\n} from './types/exposedTypes';\n\nexport { emojiByUnified } from './dataUtils/emojiSelectors';\n\nexport interface PickerProps extends PickerConfig {}\nexport type Props = PickerProps;\n\nexport default function EmojiPicker(props: PickerProps) {\n const MutableConfigRef = useDefineMutableConfig({\n onEmojiClick: props.onEmojiClick,\n onReactionClick: props.onReactionClick,\n onSkinToneChange: props.onSkinToneChange,\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","hidden","display","opacity","pointerEvents","visibility","overflow","commonStyles","create","_extends","PickerStyleTag","React","_ref","nonce","suppressHydrationWarning","dangerouslySetInnerHTML","__html","getStyle","commonInteractionStyles","categoryBtn","color","hiddenOnSearch","visibleOnSearchOnly","hiddenOnReactions","transition","height","width","darkMode","key","value","_eprDarkTheme","_eprAutoTheme","compareConfig","prev","next","prevCustomEmojis","_prev$customEmojis","customEmojis","nextCustomEmojis","_next$customEmojis","open","emojiVersion","reactionsDefaultOpen","searchPlaceHolder","searchPlaceholder","searchClearButtonLabel","defaultSkinTone","skinTonesDisabled","autoFocusSearch","emojiStyle","theme","suggestedEmojisMode","lazyLoadEmojis","className","style","searchDisabled","skinTonePickerLocation","length","emojiData","DEFAULT_REACTIONS","SuggestionMode","EmojiStyle","Theme","SkinTones","Categories","SkinTonePickerLocation","CDN_URL_APPLE","CDN_URL_FACEBOOK","CDN_URL_TWITTER","CDN_URL_GOOGLE","cdnUrl","TWITTER","GOOGLE","FACEBOOK","APPLE","skinToneVariations","NEUTRAL","LIGHT","MEDIUM_LIGHT","MEDIUM","MEDIUM_DARK","DARK","skinTonesNamed","Object","entries","reduce","acc","skinTonesMapped","mapped","skinTone","_Object$assign","assign","EmojiProperties","emojiNames","emoji","_emoji$EmojiPropertie","name","addedIn","parseFloat","added_in","emojiName","names","unifiedWithoutSkinTone","unified","splat","split","_splat$splice","splice","emojiUnified","emojiHasVariations","_emojiVariationUnifie","emojiVariationUnified","emojiUrlByUnified","emojiVariations","_emoji$EmojiPropertie2","variations","find","variation","includes","activeVariationFromUnified","_unified$split","suspectedSkinTone","keys","categoriesOrdered","SUGGESTED","CUSTOM","SMILEYS_PEOPLE","ANIMALS_NATURE","FOOD_DRINK","TRAVEL_PLACES","ACTIVITIES","OBJECTS","SYMBOLS","FLAGS","SuggestedRecent","category","configByCategory","_configByCategory","baseCategoriesConfig","modifiers","categoryFromCategoryConfig","categoryNameFromCategoryConfig","mergeCategoriesConfig","userCategoriesConfig","extra","fromData","categories","fromEntries","filter","config","suggestionMode","RECENT","_emojiData$categories","recentConfig","base","_userCategoriesConfig","getBaseConfigByCategory","modifier","KNOWN_FAILING_EMOJIS","DEFAULT_SEARCH_PLACEHOLDER","DEFAULT_SEARCH_CLEAR_BUTTON_LABEL","SEARCH_RESULTS_NO_RESULTS_FOUND","SEARCH_RESULTS_SUFFIX","SEARCH_RESULTS_ONE_RESULT_FOUND","SEARCH_RESULTS_MULTIPLE_RESULTS_FOUND","mergeConfig","userConfig","basePickerConfig","localizedMood","_userConfig$emojiData","_userConfig$emojiData2","_userConfig$emojiData3","preview_mood","previewConfig","_userConfig$previewCo","defaultCaption","_userConfig$previewCo2","hiddenEmojis","forEach","unicodeToHide","add","PREVIEW","getEmojiUrl","basePreviewConfig","SEARCH","FREQUENT","Set","reactions","allowExpandReactions","undefined","categoryIcons","defaultEmoji","showPreview","ConfigContext","PickerConfigProvider","children","_objectWithoutPropertiesLoose","_excluded","mergedConfig","useSetConfig","Provider","_React$useState","setMergedConfig","_config$customEmojis","usePickerConfig","useDebouncedState","initialValue","delay","_useState","useState","state","setState","timer","useRef","debouncedSetState","Promise","resolve","current","clearTimeout","setTimeout","emojiByUnified","allEmojisByUnified","withoutSkinTone","allEmojis","values","emojis","flat","Emoji","SUGGESTED_LS_KEY","getSuggested","mode","_window$localStorage$","window","localStorage","recent","JSON","parse","getItem","sort","a","b","count","_unused","setSuggested","originalUnified","existing","u","nextList","concat","i","original","Math","min","setItem","stringify","_unused2","useIsMounted","isMounted","setIsMounted","PickerDataContext","createContext","searchIndex","PickerDataProvider","_usePickerConfig","genericEmojiData","data","useMemo","defaultEmojiData","newData","customToRegularEmoji","Keys","_emoji$Keys$variation","joinedNameString","toLowerCase","char","_searchIndex$_char","useCallback","result","_data$allEmojisByUnif","usePickerDataContext","useContext","useGetEmojisByCategory","_usePickerDataContext","suggestedEmojisModeConfig","useSuggestedEmojisModeConfig","_useUpdateSuggested","useUpdateSuggested","suggestedUpdated","suggested","_getSuggested","s","_extends2","Boolean","getEmojisByCategory","_emojiData$emojis$cat","_emojiData$emojis","_ref2","id","imgUrl","useIsUnicodeHidden","useUnicodeToHide","has","useDisallowedEmojis","DisallowedEmojisRef","emojiVersionConfig","useEmojiVersionConfig","Number","isNaN","disallowedEmojis","addedInNewerVersion","useIsEmojiDisallowed","isUnicodeHidden","isEmojiDisallowed","supportedLevel","useMarkInitialLoad","dispatch","useEffect","PickerContextProvider","useDefaultSkinToneConfig","useReactionsOpenConfig","filterRef","disallowClickRef","disallowMouseRef","disallowedEmojisRef","suggestedUpdateState","Date","now","searchTerm","skinToneFanOpenState","activeSkinTone","activeCategoryState","emojisThatFailedToLoadState","emojiVariationPickerState","reactionsModeState","isPastInitialLoad","setIsPastInitialLoad","visibleCategoriesState","emojiSizeState","PickerContext","useFilterRef","_React$useContext","useDisallowClickRef","_React$useContext2","useDisallowMouseRef","_React$useContext3","useReactionsModeState","_React$useContext4","useSearchTermState","_React$useContext5","useActiveSkinToneState","_React$useContext6","useEmojisThatFailedToLoadState","_React$useContext7","useEmojiVariationPickerState","_React$useContext9","useSkinToneFanOpenState","_React$useContext0","useVisibleCategoriesState","_React$useContext10","useEmojiSizeState","_React$useContext11","_React$useContext12","setsuggestedUpdate","updateSuggested","MutableConfigContext","useMutableConfig","mutableConfig","useDefineMutableConfig","MutableConfigRef","onEmojiClick","emptyFunc","onReactionClick","onSkinToneChange","MOUSE_EVENT_SOURCE","useSearchPlaceHolderConfig","_find","p","useSearchClearButtonLabelConfig","_usePickerConfig2","_usePickerConfig3","useAllowExpandReactions","_usePickerConfig4","useSkinTonesDisabledConfig","_usePickerConfig5","useEmojiStyleConfig","_usePickerConfig6","useAutoFocusSearchConfig","_usePickerConfig7","useCategoriesConfig","_usePickerConfig8","useCategoryIconsConfig","_usePickerConfig9","useCustomEmojisConfig","_usePickerConfig0","useOpenConfig","_usePickerConfig1","useOnEmojiClickConfig","mouseEventSource","_useMutableConfig","_useReactionsModeStat","setReactionsOpen","handler","REACTIONS","args","apply","collapseToReactions","o","_len2","_key2","useOnSkinToneChangeConfig","_useMutableConfig2","usePreviewConfig","_usePickerConfig10","useThemeConfig","_usePickerConfig11","_usePickerConfig12","useLazyLoadEmojisConfig","_usePickerConfig13","useClassNameConfig","_usePickerConfig14","useStyleConfig","_usePickerConfig15","getDimension","_usePickerConfig16","_usePickerConfig17","useSearchDisabledConfig","_usePickerConfig18","useSkinTonePickerLocationConfig","_usePickerConfig19","_usePickerConfig20","useReactionsConfig","_usePickerConfig21","useGetEmojiUrlConfig","_usePickerConfig22","dimensionConfig","useSearchResultsConfig","searchResultsCount","hasResults","isPlural","replace","toString","useIsSearchMode","_useSearchTermState","focusElement","element","shouldFocus","requestAnimationFrame","focus","focusPrevElementSibling","previousElementSibling","focusNextElementSibling","nextElementSibling","focusFirstElementChild","first","firstElementChild","getActiveElement","document","activeElement","ElementRefContextProvider","PickerMainRef","AnchoredEmojiRef","BodyRef","EmojiListRef","SearchInputRef","SkinTonePickerRef","CategoryNavigationRef","VariationPickerRef","ReactionsRef","ElementRefContext","useElementRef","useEmojiListRef","usePickerMainRef","useAnchoredEmojiRef","useSetAnchoredEmojiRef","target","useBodyRef","useReactionsRef","useSearchInputRef","useSkinTonePickerRef","useCategoryNavigationRef","useVariationPickerRef","scrollTo","root","top","$eprBody","queryScrollBody","scrollTop","scrollBy","by","useScrollTo","scrollEmojiAboveLabel","isEmojiBehindLabel","closest","variationPicker","scrollBody","closestScrollBody","emojiDistanceFromScrollTop","categoryLabelHeight","closestCategory","focusFirstVisibleEmoji","parent","firstVisibleEmoji","focusAndClickFirstVisibleEmoji","firstEmoji","click","focusLastVisibleEmoji","lastVisibleEmoji","focusNextVisibleEmoji","nextVisibleEmoji","nextCategory","focusPrevVisibleEmoji","prevVisibleEmoji","prevCategory","focusVisibleEmojiOneRowUp","exitUp","visibleEmojiOneRowUp","focusVisibleEmojiOneRowDown","visibleEmojiOneRowDown","categoryContent","closestCategoryContent","countInRow","elementCountInRow","emojisInCurrentCategory","allVisibleEmojis","currentEmojiIndex","indexOf","indexInRow","prevVisibleCategory","allPrevEmojis","lastIndexInRow","at","remainder","firstInNextRow","nextVisibleCategory","emojisInNextCategory","_emojisInNextCategory","useCloseAllOpenToggles","_useEmojiVariationPic","setVariationPicker","_useSkinToneFanOpenSt","skinToneFanOpen","setSkinToneFanOpen","closeAllOpenToggles","useHasOpenToggles","_useEmojiVariationPic2","_useSkinToneFanOpenSt2","hasOpenToggles","useDisallowMouseMove","DisallowMouseRef","disallowMouseMove","useAllowMouseMove","allowMouseMove","useIsMouseDisallowed","isMouseDisallowed","useOnMouseMove","bodyRef","addEventListener","onMouseMove","passive","removeEventListener","useFocusSearchInput","useFocusSkinTonePicker","useFocusCategoryNavigation","useSetFilterRef","setFilter","setter","useClearSearch","applySearch","useApplySearch","focusSearchInput","clearSearch","useAppendSearch","appendSearch","str","getNormalizedSearchTerm","useFilter","setFilterRef","statusSearchResults","getStatusSearchResults","onChange","inputValue","nextValue","longestMatch","findLongestMatch","filterEmojiObjectByKeyword","_useSearchTermState2","setSearchTerm","then","keyword","filtered","hasMatch","some","useIsEmojiFiltered","_useFilterRef","_useSearchTermState3","isEmojiFilteredBySearchTerm","_filter$searchTerm","dict","longestMatchingKey","trim","filterState","_Object$entries","useSetVariationPicker","setAnchoredEmojiRef","setEmojiVariationPicker","_allUnifiedFromEmojiE","allUnifiedFromEmojiElement","resolvedUnified","useIsSkinToneInSearch","skinTonePickerLocationConfig","useIsSkinToneInPreview","KeyboardEvents","useKeyboardNavigation","usePickerMainKeyboardEvents","useSearchInputKeyboardEvents","useSkinTonePickerKeyboardEvents","useCategoryNavigationKeyboardEvents","useReactionsKeyboardEvents","useBodyKeyboardEvents","onKeyDown","event","Escape","preventDefault","focusSkinTonePicker","setSkinToneFanOpenState","goDownFromSearchInput","useGoDownFromSearchInput","isSkinToneInSearch","ArrowRight","ArrowDown","Enter","isOpen","setIsOpen","isSkinToneInPreview","onType","useOnType","ArrowLeft","focusNextSkinTone","focusPrevSkinTone","ArrowUp","reactionsOpen","delta","reactionFocusDelta","focusReactionSibling","buttons","from","querySelectorAll","activeIndex","sibling","goUpFromBody","useGoUpFromBody","buttonFromTarget","Space","focusCategoryNavigation","isSearchMode","goUpFromEmoji","exitLeft","currentSkinTone","hasNextElementSibling","hasModifier","match","metaKey","ctrlKey","altKey","preloadEmojiIfNeeded","emojiStyles","clientHeight","topOffset","dimensions","NATIVE","preloadedEmojs","emojiTop","viewportBottom","isJustBelowViewport","emojiSize","preloadEmoji","emojiUrl","preloadImage","url","image","Image","src","useOnFocus","onFocus","button","_emojiFromElement","emojiFromElement","DEFAULT_LABEL_HEIGHT","PickerMain","PickerRootElement","reactionsMode","searchModeActive","_ref3","styleProps","cx","styles","main","baseVariables","darkTheme","AUTO","autoThemeDark","_cx","searchActive","reactionsMenu","ref","DarkTheme","emojiPicker","position","flexDirection","borderWidth","borderStyle","borderRadius","borderColor","backgroundColor","boxSizing","fontFamily","autoTheme","backdropFilter","declared","_parent$dataset","dataset","emojisPerRow","isInteger","parentWidth","getBoundingClientRect","elementWidth","floor","firstVisibleElementInContainer","elements","maxVisibilityDiffThreshold","parentTop","parentBottom","bottom","parentTopWithLabel","getLabelHeight","visibleElements","elementTop","elementBottom","maxVisibilityDiffPixels","elementTopWithAllowedDiff","elementBottomWithAllowedDiff","parentNode","label","querySelector","EmojiButtonSelector","VisibleEmojiSelector","visible","emojiElement","_emojiElement$closest","originalUnifiedFromEmojiElement","unifiedFromEmojiElement","isEmojiElement","matches","_element$parentElemen","parentElement","elementHeight","_element$clientHeight","emojiTrueOffsetTop","labelHeight","elementOffsetTop","categoryWithoutLabel","_category$clientHeigh","_categoryWithoutLabel","_closestScrollBody$sc","_closestScrollBody","_element$closest","emojiTruOffsetLeft","elementOffsetLeft","_element$offsetTop","offsetTop","_element$offsetLeft","offsetLeft","_elementDataSetKey","elementDataSetKey","_elementDataSet$key","elementDataSet","_element$dataset","isVisibleEmoji","classList","contains","isHidden","_allEmojis$slice","slice","last","parseNativeEmoji","hex","String","fromCodePoint","parseInt","isCustomCategory","isCustomEmoji","useMouseDownHandlers","ContainerRef","mouseDownTimerRef","_useActiveSkinToneSta","activeEmojiStyle","onClick","_emojiFromEvent","emojiFromEvent","skinToneToUse","emojiClickOutput","onMouseDown","_emojiFromEvent2","onMouseUp","confainerRef","lookupEmojiByUnified","getImageUrl","imageUrl","isCustom","Button","props","type","cursor","border","outline","ClickableEmojiButton","_ref$showVariations","showVariations","hasVariations","_ref$noBackground","noBackground","getAriaLabel","alignItems","justifyContent","maxWidth","maxHeight","background","content","right","borderLeft","borderRight","transform","borderBottom","zIndex","external","fontSize","common","alignSelf","justifySelf","EmojiImg","_ref$lazyLoad","lazyLoad","onError","alt","emojiImag","loading","minWidth","minHeight","padding","NativeEmoji","nativeEmoji","lineHeight","textAlign","letterSpacing","ViewOnlyEmoji","size","_ref$getEmojiUrl","_useEmojisThatFailedT","setEmojisThatFailedToLoad","emojiToRender","ClickableEmoji","buttonClassName","BtnPlus","setReactionsMode","title","tabIndex","plusSign","backgroundImage","Plus","backgroundRepeat","backgroundSize","backgroundPositionY","Reactions","list","reaction","emojiButton","reactionButton","listStyle","margin","useOnScroll","setScrollTop","onScroll","_bodyRef$scrollTop","shouldVirtualize","emojiBottom","isVisible","getEmojiPositionStyle","index","left","EMOJI_SIZE_DEFAULT","useCategoryHeight","emojiCount","isReactionsMode","emojiSizeRef","_useVisibleCategories","visibleCategories","_useEmojiSizeState","emojiSizeFromContext","setDimensions","computeAndSetDimensions","listEl","measured","pickerWidth","clientWidth","max","rowCount","ceil","categoryHeight","rootEl","e","te","prop","propertyName","queueMicrotask","useIsEmojiHidden","emojisThatFailedToLoad","isEmojiFiltered","failedToLoad","filteredOut","useEmojiVirtualization","categoryEmojis","onHeightReady","isCategoryVisible","isEmojiHidden","virtualizedCounter","emojisToPush","isDisallowed","_isEmojiHidden","isVirtualized","_BodyRef$current$clie","_BodyRef$current","accumulator","_BodyRef$current$clie2","_BodyRef$current2","push","EmojiCategory","categoryConfig","categoryName","role","gridGap","gridTemplateColumns","fontWeight","textTransform","useIsomorphicLayoutEffect","MeasureEmoji","setEmojiSize","firstCategory","dummyEmoji","EmojiList","categoryHeights","setCategoryHeights","emojiList","currentOffset","RenderCategory","isFirstCategory","_useEmojiVirtualizati","Direction","EmojiVariationPicker","_useVariationPickerTo","useVariationPickerTop","getTop","getMenuDirection","getPointerStyle","usePointerStyle","pointerStyle","Down","pointingUp","pointer","direction","Up","emojiOffsetTop","buttonHeight","boxShadow","transformOrigin","backgroundPosition","SVGTriangle","Body","PICKER","body","flex","overflowY","overflowX","detectEmojyPartiallyBelowFold","buttonRect","bodyRect","y","useEmojiPreviewEvents","allow","setPreviewEmoji","onEscape","onMouseOver","onEnter","onLeave","relatedTarget","_allUnifiedFromEmojiE2","isExternalElementFocused","isPartiallyBelowFold","belowFoldByPx","active","documentElement","_PickerMainRef$curren","FlexDirection","Flex","_ref$style","_ref$direction","ROW","_stylesheet$create","COLUMN","Absolute","Relative","BtnSkinToneVariation","isActive","skinToneVariation","tone","closedTone","ITEM_SIZE","SkinTonePickerMenu","SkinTonePicker","SkinTonePickerDirection","VERTICAL","HORIZONTAL","isDisabled","setActiveSkinTone","fullWidth","expandedSize","vertical","skinTones","verticalShadow","flexBasis","select","Preview","preview","hideOnReactions","PreviewBody","previewEmoji","variationPickerEmoji","_previewEmoji$unified","show","PreviewContent","defaultText","borderTop","categoryNameFromDom","$category","_$category$getAttribu","getAttribute","useActiveCategoryScrollDetection","setActiveCategory","setVisibleCategories","Map","intersectingCategories","observer","IntersectionObserver","_iterator","_createForOfIteratorHelperLoose","_step","done","entry","set","intersectionRatio","isIntersecting","ratios","visibleCats","ratio","get","lastCategory","_i","_ratios","_ratios$_i","threshold","el","observe","disconnect","useScrollCategoryIntoView","scrollCategoryIntoView","useShouldHideCustomEmojis","customCategoryConfig","COLUMNS","smileys_people","animals_nature","food_drink","travel_places","activities","objects","symbols","flags","custom","SHAPES","fill","stroke","strokeWidth","strokeMiterlimit","d","strokeLinecap","fillRule","clipRule","cy","rx","ry","CategoryNavIcon","column","_COLUMNS$category","viewBox","_SHAPES$column","CategoryButton","isActiveCategory","allowNavigation","customIcon","icon","_categoryConfig$icon","hasCustomIcon","catBtn","DarkActiveColor","DarkInactiveColor","DarkInactivePosition","CategoryNavigation","activeCategory","categoriesConfig","hideCustomCategory","nav","BtnClearSearch","btnClearSearch","icnClearnSearch","HoverDark","SVGTimes","IcnSearch","icnSearch","SVGMagnifier","SearchContainer","overlay","Search","placeholder","autoFocus","_useFilter","input","searchContainer","search","_event$target$value","_event$target","visuallyHidden","clip","clipPath","whiteSpace","Header","EmojiPicker","ContentControl","renderAll","setRenderAll","ExpandedPickerContent","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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"}
|