emoji-picker-react 4.4.2 → 4.4.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -1
- package/dist/DomUtils/classNames.d.ts +2 -1
- package/dist/emoji-picker-react.cjs.development.js +200 -192
- 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 +200 -192
- package/dist/emoji-picker-react.esm.js.map +1 -1
- package/package.json +1 -1
- package/src/DomUtils/classNames.ts +2 -1
- package/src/DomUtils/scrollTo.ts +6 -1
- package/src/components/body/EmojiVariationPicker.tsx +21 -10
- package/src/hooks/useKeyboardNavigation.ts +2 -1
- package/src/hooks/useSetVariationPicker.ts +1 -10
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"emoji-picker-react.cjs.development.js","sources":["../src/DomUtils/classNames.ts","../src/components/context/ElementRefContext.tsx","../src/DomUtils/isDarkTheme.ts","../src/types/exposedTypes.ts","../src/config/cdnUrls.ts","../src/data/skinToneVariations.ts","../src/dataUtils/emojiSelectors.ts","../src/config/categoryConfig.ts","../src/config/config.ts","../src/components/context/PickerConfigContext.tsx","../src/config/useConfig.ts","../src/dataUtils/alphaNumericEmojiIndex.ts","../src/hooks/useDebouncedState.ts","../src/hooks/useDisallowedEmojis.ts","../src/hooks/useInitialLoad.ts","../src/components/context/PickerContext.tsx","../src/hooks/useDisallowMouseMove.ts","../src/DomUtils/elementPositionInRow.ts","../src/DomUtils/selectors.ts","../src/dataUtils/parseNativeEmoji.ts","../src/dataUtils/suggested.ts","../src/hooks/useCloseAllOpenToggles.ts","../src/DomUtils/focusElement.ts","../src/DomUtils/scrollTo.ts","../src/DomUtils/keyboardNavigation.ts","../src/hooks/useSetVariationPicker.ts","../src/hooks/useMouseDownHandlers.ts","../src/hooks/useOnScroll.ts","../src/hooks/useFocus.ts","../src/hooks/useFilter.ts","../src/hooks/useIsEmojiHidden.ts","../src/dataUtils/asEmoji.ts","../src/components/atoms/Button.tsx","../src/components/emoji/Emoji.tsx","../src/components/body/EmojiCategory.tsx","../src/components/body/Suggested.tsx","../src/components/body/EmojiList.tsx","../src/components/body/EmojiVariationPicker.tsx","../src/components/body/Body.tsx","../src/hooks/useEmojiPreviewEvents.ts","../src/hooks/useShouldShowSkinTonePicker.ts","../src/components/Layout/Flex.tsx","../src/components/Layout/Space.tsx","../src/components/Layout/Absolute.tsx","../src/components/Layout/Relative.tsx","../src/components/header/SkinTonePicker.tsx","../src/components/footer/Preview.tsx","../src/DomUtils/categoryNameFromDom.ts","../src/hooks/useActiveCategoryScrollDetection.ts","../src/hooks/useIsSearchMode.ts","../src/hooks/useScrollCategoryIntoView.ts","../src/components/navigation/CategoryNavigation.tsx","../src/components/header/Search.tsx","../src/components/header/Header.tsx","../src/DomUtils/getActiveElement.ts","../src/hooks/useKeyboardNavigation.ts","../src/hooks/preloadEmoji.ts","../src/hooks/useOnFocus.ts","../src/components/main/PickerMain.tsx","../src/EmojiPickerReact.tsx","../src/components/ErrorBoundary.tsx","../src/components/emoji/ExportedEmoji.tsx","../src/index.tsx"],"sourcesContent":["export enum ClassNames {\n hiddenOnSearch = 'epr-hidden-on-search',\n searchActive = 'epr-search-active',\n hidden = 'epr-hidden',\n visible = 'epr-visible',\n active = 'epr-active',\n emoji = 'epr-emoji',\n category = 'epr-emoji-category',\n label = 'epr-emoji-category-label',\n categoryContent = 'epr-emoji-category-content',\n emojiHasVariatios = '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}\n\nexport function asSelectors(...classNames: ClassNames[]): string {\n return classNames.map(c => `.${c}`).join('');\n}\n","import * as React from 'react';\n\nimport { NullableElement } from '../../DomUtils/selectors';\n\nexport function ElementRefContextProvider({\n children\n}: {\n children: React.ReactNode;\n}) {\n const PickerMainRef = React.useRef<HTMLElement>(null);\n const AnchoredEmojiRef = React.useRef<HTMLElement>(null);\n const BodyRef = React.useRef<HTMLDivElement>(null);\n const SearchInputRef = React.useRef<HTMLInputElement>(null);\n const SkinTonePickerRef = React.useRef<HTMLDivElement>(null);\n const CategoryNavigationRef = React.useRef<HTMLDivElement>(null);\n const VariationPickerRef = React.useRef<HTMLDivElement>(null);\n\n return (\n <ElementRefContext.Provider\n value={{\n AnchoredEmojiRef,\n BodyRef,\n CategoryNavigationRef,\n PickerMainRef,\n SearchInputRef,\n SkinTonePickerRef,\n VariationPickerRef\n }}\n >\n {children}\n </ElementRefContext.Provider>\n );\n}\n\nexport type ElementRef<\n E extends HTMLElement = HTMLElement\n> = React.MutableRefObject<E | null>;\n\ntype ElementRefs = {\n PickerMainRef: ElementRef;\n AnchoredEmojiRef: ElementRef;\n SkinTonePickerRef: ElementRef<HTMLDivElement>;\n SearchInputRef: ElementRef<HTMLInputElement>;\n BodyRef: ElementRef<HTMLDivElement>;\n CategoryNavigationRef: ElementRef<HTMLDivElement>;\n VariationPickerRef: ElementRef<HTMLDivElement>;\n};\n\nconst ElementRefContext = React.createContext<ElementRefs>({\n AnchoredEmojiRef: React.createRef(),\n BodyRef: React.createRef(),\n CategoryNavigationRef: React.createRef(),\n PickerMainRef: React.createRef(),\n SearchInputRef: React.createRef(),\n SkinTonePickerRef: React.createRef(),\n VariationPickerRef: React.createRef()\n});\n\nfunction useElementRef() {\n return React.useContext(ElementRefContext);\n}\n\nexport function usePickerMainRef() {\n return useElementRef()['PickerMainRef'];\n}\n\nexport function useAnchoredEmojiRef() {\n return useElementRef()['AnchoredEmojiRef'];\n}\n\nexport function useSetAnchoredEmojiRef(): (target: NullableElement) => void {\n const AnchoredEmojiRef = useAnchoredEmojiRef();\n return (target: NullableElement) => {\n AnchoredEmojiRef.current = target;\n };\n}\n\nexport function useBodyRef() {\n return useElementRef()['BodyRef'];\n}\n\nexport function useSearchInputRef() {\n return useElementRef()['SearchInputRef'];\n}\n\nexport function useSkinTonePickerRef() {\n return useElementRef()['SkinTonePickerRef'];\n}\n\nexport function useCategoryNavigationRef() {\n return useElementRef()['CategoryNavigationRef'];\n}\n\nexport function useVariationPickerRef() {\n return useElementRef()['VariationPickerRef'];\n}\n","export function isSystemDarkTheme(): boolean {\n if (typeof window === 'undefined') {\n return false;\n }\n\n return !!window.matchMedia('(prefers-color-scheme: dark)').matches;\n}\n","export type EmojiClickData = {\n activeSkinTone: SkinTones;\n unified: string;\n unifiedWithoutSkinTone: string;\n emoji: string;\n names: string[];\n getImageUrl: (emojiStyle: EmojiStyle) => 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 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<\n string,\n string\n> = skinToneVariations.reduce(\n (mapped, skinTone) =>\n Object.assign(mapped, {\n [skinTone]: skinTone\n }),\n {}\n);\n\nexport default skinToneVariations;\n","import { Categories } from '../config/categoryConfig';\nimport { cdnUrl } from '../config/cdnUrls';\nimport emojis from '../data/emojis';\nimport skinToneVariations, {\n skinTonesMapped,\n} from '../data/skinToneVariations';\nimport { EmojiStyle, SkinTones } from '../types/exposedTypes';\n\nimport { DataEmoji, DataEmojis } from './DataTypes';\n\nenum EmojiProperties {\n name = 'n',\n unified = 'u',\n variations = 'v',\n added_in = 'a',\n}\n\nexport function emojiNames(emoji: DataEmoji): 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: DataEmoji): string {\n return emojiNames(emoji)[0];\n}\n\nexport function unifiedWithoutSkinTone(unified: string): string {\n const splat = unified.split('-');\n const [skinTone] = splat.splice(1, 1);\n\n if (skinTonesMapped[skinTone]) {\n return splat.join('-');\n }\n\n return unified;\n}\n\nexport function emojiUnified(emoji: DataEmoji, skinTone?: string): string {\n const unified = emoji[EmojiProperties.unified];\n\n if (!skinTone || !emojiHasVariations(emoji)) {\n return unified;\n }\n\n return emojiVariationUnified(emoji, skinTone) ?? unified;\n}\n\nexport function emojisByCategory(category: Categories): DataEmojis {\n // @ts-ignore\n return emojis?.[category] ?? [];\n}\n\n// WARNING: DO NOT USE DIRECTLY\nexport function emojiUrlByUnified(\n unified: string,\n emojiStyle: EmojiStyle\n): string {\n return `${cdnUrl(emojiStyle)}${unified}.png`;\n}\n\nexport function emojiVariations(emoji: DataEmoji): string[] {\n return emoji[EmojiProperties.variations] ?? [];\n}\n\nexport function emojiHasVariations(emoji: DataEmoji): boolean {\n return emojiVariations(emoji).length > 0;\n}\n\nexport function emojiVariationUnified(\n emoji: DataEmoji,\n skinTone?: string\n): string | undefined {\n return skinTone\n ? emojiVariations(emoji).find((variation) => variation.includes(skinTone))\n : emojiUnified(emoji);\n}\n\nexport function emojiByUnified(unified?: string): DataEmoji | undefined {\n if (!unified) {\n return;\n }\n\n if (allEmojisByUnified[unified]) {\n return allEmojisByUnified[unified];\n }\n\n const withoutSkinTone = unifiedWithoutSkinTone(unified);\n return allEmojisByUnified[withoutSkinTone];\n}\n\nexport const allEmojis: DataEmojis = Object.values(emojis).flat();\n\nconst allEmojisByUnified: {\n [unified: string]: DataEmoji;\n} = {};\n\nsetTimeout(() => {\n allEmojis.reduce((allEmojis, Emoji) => {\n allEmojis[emojiUnified(Emoji)] = Emoji;\n return allEmojis;\n }, allEmojisByUnified);\n});\n\nexport function activeVariationFromUnified(unified: string): SkinTones | null {\n const [, suspectedSkinTone] = unified.split('-') as [string, SkinTones];\n return skinToneVariations.includes(suspectedSkinTone)\n ? suspectedSkinTone\n : null;\n}\n","import { Categories, SuggestionMode } from '../types/exposedTypes';\n\nexport { Categories };\n\nconst categoriesOrdered: Categories[] = [\n Categories.SUGGESTED,\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\nconst configByCategory: Record<Categories, CategoryConfig> = {\n [Categories.SUGGESTED]: {\n category: Categories.SUGGESTED,\n name: 'Frequently Used'\n },\n [Categories.SMILEYS_PEOPLE]: {\n category: Categories.SMILEYS_PEOPLE,\n name: 'Smileys & People'\n },\n [Categories.ANIMALS_NATURE]: {\n category: Categories.ANIMALS_NATURE,\n name: 'Animals & Nature'\n },\n [Categories.FOOD_DRINK]: {\n category: Categories.FOOD_DRINK,\n name: 'Food & Drink'\n },\n [Categories.TRAVEL_PLACES]: {\n category: Categories.TRAVEL_PLACES,\n name: 'Travel & Places'\n },\n [Categories.ACTIVITIES]: {\n category: Categories.ACTIVITIES,\n name: 'Activities'\n },\n [Categories.OBJECTS]: {\n category: Categories.OBJECTS,\n name: 'Objects'\n },\n [Categories.SYMBOLS]: {\n category: Categories.SYMBOLS,\n name: 'Symbols'\n },\n [Categories.FLAGS]: {\n category: Categories.FLAGS,\n name: 'Flags'\n }\n};\n\nexport function baseCategoriesConfig(\n modifiers?: Record<Categories, CategoryConfig>\n): CategoriesConfig {\n return categoriesOrdered.map(category => {\n return {\n ...configByCategory[category],\n ...(modifiers && modifiers[category] && modifiers[category])\n };\n });\n}\n\nexport function categoryFromCategoryConfig(category: CategoryConfig) {\n return category.category;\n}\n\nexport function categoryNameFromCategoryConfig(category: CategoryConfig) {\n return category.name;\n}\n\nexport type CategoriesConfig = CategoryConfig[];\n\nexport type CategoryConfig = {\n category: Categories;\n name: string;\n};\n\nexport type UserCategoryConfig = Array<Categories | CategoryConfig>;\n\nexport function mergeCategoriesConfig(\n userCategoriesConfig: UserCategoryConfig = [],\n modifiers: CategoryConfigModifiers = {}\n): CategoriesConfig {\n const extra = {} as Record<Categories, CategoryConfig>;\n\n if (modifiers.suggestionMode === SuggestionMode.RECENT) {\n extra[Categories.SUGGESTED] = SuggestedRecent;\n }\n\n const base = baseCategoriesConfig(extra);\n if (!userCategoriesConfig?.length) {\n return base;\n }\n\n return userCategoriesConfig.map(category => {\n if (typeof category === 'string') {\n return getBaseConfigByCategory(category, extra[category]);\n }\n\n return {\n ...getBaseConfigByCategory(category.category, extra[category.category]),\n ...category\n };\n });\n}\n\nfunction getBaseConfigByCategory(\n category: Categories,\n modifier: CategoryConfig = {} as CategoryConfig\n) {\n return Object.assign(configByCategory[category], modifier);\n}\n\ntype CategoryConfigModifiers = {\n suggestionMode?: SuggestionMode;\n};\n","import { GetEmojiUrl } from '../components/emoji/Emoji';\nimport { emojiUrlByUnified } from '../dataUtils/emojiSelectors';\nimport {\n EmojiClickData,\n EmojiStyle,\n SkinTonePickerLocation,\n SkinTones,\n SuggestionMode,\n Theme\n} from '../types/exposedTypes';\n\nimport {\n CategoriesConfig,\n baseCategoriesConfig,\n mergeCategoriesConfig\n} from './categoryConfig';\n\nexport function mergeConfig(\n userConfig: PickerConfig = {}\n): PickerConfigInternal {\n const base = basePickerConfig();\n\n const previewConfig = Object.assign(\n base.previewConfig,\n userConfig.previewConfig ?? {}\n );\n const config = Object.assign(base, userConfig);\n\n const categories = mergeCategoriesConfig(userConfig.categories, {\n suggestionMode: config.suggestedEmojisMode\n });\n\n 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 defaultSkinTone: SkinTones.NEUTRAL,\n emojiStyle: EmojiStyle.APPLE,\n emojiVersion: null,\n getEmojiUrl: emojiUrlByUnified,\n height: 450,\n lazyLoadEmojis: false,\n onEmojiClick: function defaultOnClickHandler(\n // @ts-ignore\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n emoji: EmojiClickData,\n // @ts-ignore\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n event: MouseEvent\n ) {},\n previewConfig: {\n ...basePreviewConfig\n },\n searchDisabled: false,\n searchPlaceHolder: 'Search',\n skinTonePickerLocation: SkinTonePickerLocation.SEARCH,\n skinTonesDisabled: false,\n suggestedEmojisMode: SuggestionMode.FREQUENT,\n theme: Theme.LIGHT,\n width: 350\n };\n}\n\nexport type PickerConfigInternal = {\n emojiVersion: string | null;\n searchPlaceHolder: string;\n defaultSkinTone: SkinTones;\n skinTonesDisabled: boolean;\n autoFocusSearch: boolean;\n emojiStyle: EmojiStyle;\n categories: CategoriesConfig;\n onEmojiClick: (emoji: EmojiClickData, event: MouseEvent) => void;\n theme: Theme;\n suggestedEmojisMode: SuggestionMode;\n lazyLoadEmojis: boolean;\n previewConfig: PreviewConfig;\n height: PickerDimensions;\n width: PickerDimensions;\n getEmojiUrl: GetEmojiUrl;\n searchDisabled: boolean;\n skinTonePickerLocation: SkinTonePickerLocation;\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} & Omit<PickerConfigInternal, 'previewConfig'>;\n\nexport type PickerConfig = Partial<ConfigExternal>;\n\nexport type PickerDimensions = string | number;\n","import * as React from 'react';\n\nimport {\n basePickerConfig,\n mergeConfig,\n PickerConfig,\n PickerConfigInternal\n} from '../../config/config';\n\ntype Props = PickerConfig &\n Readonly<{\n children: React.ReactNode;\n }>;\n\nconst ConfigContext = React.createContext<PickerConfigInternal>(\n basePickerConfig()\n);\n\nexport function PickerConfigProvider({ children, ...config }: Props) {\n return (\n <ConfigContext.Provider value={mergeConfig(config)}>\n {children}\n </ConfigContext.Provider>\n );\n}\n\nexport function usePickerConfig() {\n return React.useContext(ConfigContext);\n}\n","import { isSystemDarkTheme } from '../DomUtils/isDarkTheme';\nimport { usePickerConfig } from '../components/context/PickerConfigContext';\nimport {\n EmojiClickData,\n EmojiStyle,\n SkinTonePickerLocation,\n SkinTones,\n SuggestionMode,\n Theme\n} from '../types/exposedTypes';\n\nimport { CategoriesConfig } from './categoryConfig';\nimport { PickerDimensions, PreviewConfig } from './config';\n\nexport function useSearchPlaceHolderConfig(): string {\n const { searchPlaceHolder } = usePickerConfig();\n return searchPlaceHolder;\n}\n\nexport function useDefaultSkinToneConfig(): SkinTones {\n const { defaultSkinTone } = usePickerConfig();\n return defaultSkinTone;\n}\n\nexport function useSkinTonesDisabledConfig(): boolean {\n const { skinTonesDisabled } = usePickerConfig();\n return skinTonesDisabled;\n}\n\nexport function useEmojiStyleConfig(): EmojiStyle {\n const { emojiStyle } = usePickerConfig();\n return emojiStyle;\n}\n\nexport function useAutoFocusSearchConfig(): boolean {\n const { autoFocusSearch } = usePickerConfig();\n return autoFocusSearch;\n}\n\nexport function useCategoriesConfig(): CategoriesConfig {\n const { categories } = usePickerConfig();\n return categories;\n}\n\nexport function useOnEmojiClickConfig(): (\n emoji: EmojiClickData,\n event: MouseEvent\n) => void {\n const { onEmojiClick } = usePickerConfig();\n return onEmojiClick;\n}\n\nexport function usePreviewConfig(): PreviewConfig {\n const { previewConfig } = usePickerConfig();\n return previewConfig;\n}\n\nexport function useThemeConfig(): Theme {\n const { theme } = usePickerConfig();\n\n if (theme === Theme.AUTO) {\n return isSystemDarkTheme() ? Theme.DARK : Theme.LIGHT;\n }\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 usePickerSizeConfig(): {\n height: PickerDimensions;\n width: PickerDimensions;\n} {\n const { height, width } = usePickerConfig();\n return { height: getDimension(height), width: getDimension(width) };\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 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","import { DataEmoji } from './DataTypes';\nimport { allEmojis, emojiNames, emojiUnified } from './emojiSelectors';\n\nexport const alphaNumericEmojiIndex: BaseIndex = {};\n\nsetTimeout(() => {\n allEmojis.reduce((searchIndex, emoji) => {\n const joinedNameString = emojiNames(emoji)\n .flat()\n .join('')\n .replace(/[^a-zA-Z\\d]/g, '')\n .split('');\n\n joinedNameString.forEach(char => {\n searchIndex[char] = searchIndex[char] ?? {};\n\n searchIndex[char][emojiUnified(emoji)] = emoji;\n });\n return searchIndex;\n }, alphaNumericEmojiIndex as BaseIndex);\n});\n\ntype BaseIndex = Record<string, Record<string, DataEmoji>>;\n","import { useRef, useState } from 'react';\n\nexport function useDebouncedState<T>(\n initialValue: T,\n delay: number = 0\n): [T, (value: T) => Promise<T>] {\n const [state, setState] = useState<T>(initialValue);\n const timer = useRef<number | null>(null);\n\n function debouncedSetState(value: T) {\n return new Promise<T>(resolve => {\n if (timer.current) {\n clearTimeout(timer.current);\n }\n\n timer.current = window?.setTimeout(() => {\n setState(value);\n resolve(value);\n }, delay);\n });\n }\n\n return [state, debouncedSetState];\n}\n","import { useRef, useMemo } from 'react';\n\nimport { useEmojiVersionConfig } from '../config/useConfig';\nimport { DataEmoji } from '../dataUtils/DataTypes';\nimport {\n addedIn,\n allEmojis,\n emojiUnified,\n unifiedWithoutSkinTone\n} from '../dataUtils/emojiSelectors';\n\nexport function useDisallowedEmojis() {\n const DisallowedEmojisRef = useRef<Record<string, boolean>>({});\n const emojiVersionConfig = useEmojiVersionConfig();\n\n return useMemo(() => {\n const emojiVersion = parseFloat(`${emojiVersionConfig}`);\n\n if (!emojiVersionConfig || Number.isNaN(emojiVersion)) {\n return DisallowedEmojisRef.current;\n }\n\n return allEmojis.reduce((disallowedEmojis, emoji) => {\n if (addedInNewerVersion(emoji, emojiVersion)) {\n disallowedEmojis[emojiUnified(emoji)] = true;\n }\n\n return disallowedEmojis;\n }, DisallowedEmojisRef.current);\n }, [emojiVersionConfig]);\n}\n\nexport function useIsEmojiDisallowed() {\n const disallowedEmojis = useDisallowedEmojis();\n\n return function isEmojiDisallowed(emoji: DataEmoji) {\n const unified = unifiedWithoutSkinTone(emojiUnified(emoji));\n\n return Boolean(disallowedEmojis[unified]);\n };\n}\n\nfunction addedInNewerVersion(\n emoji: DataEmoji,\n supportedLevel: number\n): boolean {\n return addedIn(emoji) > supportedLevel;\n}\n","import { useEffect } from 'react';\nimport * as React from 'react';\n\nexport function useMarkInitialLoad(\n dispatch: React.Dispatch<React.SetStateAction<boolean>>\n) {\n useEffect(() => {\n dispatch(true);\n }, [dispatch]);\n}\n","import * as React from 'react';\nimport { useState } from 'react';\n\nimport { useDefaultSkinToneConfig } from '../../config/useConfig';\nimport { DataEmoji } from '../../dataUtils/DataTypes';\nimport { alphaNumericEmojiIndex } from '../../dataUtils/alphaNumericEmojiIndex';\nimport { useDebouncedState } from '../../hooks/useDebouncedState';\nimport { useDisallowedEmojis } from '../../hooks/useDisallowedEmojis';\nimport { FilterDict } from '../../hooks/useFilter';\nimport { useMarkInitialLoad } from '../../hooks/useInitialLoad';\nimport { SkinTones } from '../../types/exposedTypes';\n\nexport function PickerContextProvider({ children }: Props) {\n const disallowedEmojis = useDisallowedEmojis();\n const defaultSkinTone = useDefaultSkinToneConfig();\n\n // Initialize the filter with the inititial dictionary\n const filterRef = React.useRef<FilterState>(alphaNumericEmojiIndex);\n const disallowClickRef = React.useRef<boolean>(false);\n const disallowMouseRef = React.useRef<boolean>(false);\n const disallowedEmojisRef = React.useRef<Record<string, boolean>>(\n disallowedEmojis\n );\n\n const suggestedUpdateState = useDebouncedState(Date.now(), 200);\n const searchTerm = useDebouncedState('', 100);\n const skinToneFanOpenState = useState<boolean>(false);\n const activeSkinTone = useState<SkinTones>(defaultSkinTone);\n const activeCategoryState = useState<ActiveCategoryState>(null);\n const emojisThatFailedToLoadState = useState<Set<string>>(new Set());\n const emojiVariationPickerState = useState<DataEmoji | null>(null);\n const [isPastInitialLoad, setIsPastInitialLoad] = useState(false);\n\n useMarkInitialLoad(setIsPastInitialLoad);\n\n return (\n <PickerContext.Provider\n value={{\n activeCategoryState,\n activeSkinTone,\n disallowClickRef,\n disallowMouseRef,\n emojiVariationPickerState,\n emojisThatFailedToLoadState,\n filterRef,\n isPastInitialLoad,\n searchTerm,\n skinToneFanOpenState,\n suggestedUpdateState,\n disallowedEmojisRef,\n }}\n >\n {children}\n </PickerContext.Provider>\n );\n}\n\ntype ReactState<T> = [T, React.Dispatch<React.SetStateAction<T>>];\n\nconst PickerContext = React.createContext<{\n searchTerm: [string, (term: string) => Promise<string>];\n suggestedUpdateState: [number, (term: number) => void];\n activeCategoryState: ReactState<ActiveCategoryState>;\n activeSkinTone: ReactState<SkinTones>;\n emojisThatFailedToLoadState: ReactState<Set<string>>;\n isPastInitialLoad: boolean;\n emojiVariationPickerState: ReactState<DataEmoji | null>;\n skinToneFanOpenState: ReactState<boolean>;\n filterRef: React.MutableRefObject<FilterState>;\n disallowClickRef: React.MutableRefObject<boolean>;\n disallowMouseRef: React.MutableRefObject<boolean>;\n disallowedEmojisRef: React.MutableRefObject<Record<string, boolean>>;\n}>({\n activeCategoryState: [null, () => {}],\n activeSkinTone: [SkinTones.NEUTRAL, () => {}],\n disallowClickRef: { current: false },\n disallowMouseRef: { current: false },\n disallowedEmojisRef: { current: {} },\n emojiVariationPickerState: [null, () => {}],\n emojisThatFailedToLoadState: [new Set(), () => {}],\n filterRef: { current: {} },\n isPastInitialLoad: true,\n searchTerm: ['', () => new Promise<string>(() => undefined)],\n skinToneFanOpenState: [false, () => {}],\n suggestedUpdateState: [Date.now(), () => {}],\n});\n\ntype Props = Readonly<{\n children: React.ReactNode;\n}>;\n\nexport function useFilterRef() {\n const { filterRef } = React.useContext(PickerContext);\n return filterRef;\n}\n\nexport function useDisallowClickRef() {\n const { disallowClickRef } = React.useContext(PickerContext);\n return disallowClickRef;\n}\n\nexport function useDisallowMouseRef() {\n const { disallowMouseRef } = React.useContext(PickerContext);\n return disallowMouseRef;\n}\n\nexport function useSearchTermState() {\n const { searchTerm } = React.useContext(PickerContext);\n return searchTerm;\n}\n\nexport function useActiveSkinToneState(): [\n SkinTones,\n (skinTone: SkinTones) => void\n] {\n const { activeSkinTone } = React.useContext(PickerContext);\n return activeSkinTone;\n}\n\nexport function useEmojisThatFailedToLoadState() {\n const { emojisThatFailedToLoadState } = React.useContext(PickerContext);\n return emojisThatFailedToLoadState;\n}\n\nexport function useIsPastInitialLoad(): boolean {\n const { isPastInitialLoad } = React.useContext(PickerContext);\n return isPastInitialLoad;\n}\n\nexport function useEmojiVariationPickerState() {\n const { emojiVariationPickerState } = React.useContext(PickerContext);\n return emojiVariationPickerState;\n}\n\nexport function useSkinToneFanOpenState() {\n const { skinToneFanOpenState } = React.useContext(PickerContext);\n return skinToneFanOpenState;\n}\n\nexport function useDisallowedEmojisRef() {\n const { disallowedEmojisRef } = React.useContext(PickerContext);\n return disallowedEmojisRef;\n}\n\nexport function useUpdateSuggested(): [number, () => void] {\n const { suggestedUpdateState } = React.useContext(PickerContext);\n\n const [suggestedUpdated, setsuggestedUpdate] = suggestedUpdateState;\n return [\n suggestedUpdated,\n function updateSuggested() {\n setsuggestedUpdate(Date.now());\n },\n ];\n}\n\nexport type FilterState = Record<string, FilterDict>;\n\ntype ActiveCategoryState = null | string;\n","import { useEffect } from 'react';\n\nimport { useBodyRef } from '../components/context/ElementRefContext';\nimport { useDisallowMouseRef } from '../components/context/PickerContext';\n\nexport function useDisallowMouseMove() {\n const DisallowMouseRef = useDisallowMouseRef();\n return function disallowMouseMove() {\n DisallowMouseRef.current = true;\n };\n}\n\nexport function useAllowMouseMove() {\n const DisallowMouseRef = useDisallowMouseRef();\n return function allowMouseMove() {\n DisallowMouseRef.current = false;\n };\n}\n\nexport function useIsMouseDisallowed() {\n const DisallowMouseRef = useDisallowMouseRef();\n return function isMouseDisallowed() {\n return DisallowMouseRef.current;\n };\n}\n\nexport function useOnMouseMove() {\n const BodyRef = useBodyRef();\n const allowMouseMove = useAllowMouseMove();\n const isMouseDisallowed = useIsMouseDisallowed();\n\n useEffect(() => {\n const bodyRef = BodyRef.current;\n bodyRef?.addEventListener('mousemove', onMouseMove, {\n passive: true\n });\n\n function onMouseMove() {\n if (isMouseDisallowed()) {\n allowMouseMove();\n }\n }\n return () => {\n bodyRef?.removeEventListener('mousemove', onMouseMove);\n };\n }, [BodyRef, allowMouseMove, isMouseDisallowed]);\n}\n","import { NullableElement } from './selectors';\n\nexport function elementCountInRow(\n parent: NullableElement,\n element: NullableElement\n): number {\n if (!parent || !element) {\n return 0;\n }\n\n const parentWidth = parent.getBoundingClientRect().width;\n const elementWidth = element.getBoundingClientRect().width;\n return Math.floor(parentWidth / elementWidth);\n}\n\nexport function elementIndexInRow(\n parent: NullableElement,\n element: NullableElement\n): number {\n if (!parent || !element) {\n return 0;\n }\n\n const elementWidth = element.getBoundingClientRect().width;\n const elementLeft = element.getBoundingClientRect().left;\n const parentLeft = parent.getBoundingClientRect().left;\n\n return Math.floor((elementLeft - parentLeft) / elementWidth);\n}\n\nexport function rowNumber(\n parent: NullableElement,\n element: NullableElement\n): number {\n if (!parent || !element) {\n return 0;\n }\n\n const elementHeight = element.getBoundingClientRect().height;\n const elementTop = element.getBoundingClientRect().top;\n const parentTop = parent.getBoundingClientRect().top;\n return Math.round((elementTop - parentTop) / elementHeight);\n}\n\nexport function hasNextRow(\n parent: NullableElement,\n element: NullableElement\n): boolean {\n if (!parent || !element) {\n return false;\n }\n\n const elementHeight = element.getBoundingClientRect().height;\n const elementTop = element.getBoundingClientRect().top;\n const parentTop = parent.getBoundingClientRect().top;\n const parentHeight = parent.getBoundingClientRect().height;\n\n return Math.round(elementTop - parentTop + elementHeight) < parentHeight;\n}\n\nfunction getRowElements(\n elements: HTMLElement[],\n row: number,\n elementsInRow: number\n): HTMLElement[] {\n if (row === -1) {\n const lastRow = Math.floor((elements.length - 1) / elementsInRow);\n const firstElementIndex = lastRow * elementsInRow;\n const lastElementIndex = elements.length - 1;\n return elements.slice(firstElementIndex, lastElementIndex + 1);\n }\n\n return elements.slice(row * elementsInRow, (row + 1) * elementsInRow);\n}\n\nfunction getNextRowElements(\n allElements: HTMLElement[],\n currentRow: number,\n elementsInRow: number\n): HTMLElement[] {\n const nextRow = currentRow + 1;\n\n if (nextRow * elementsInRow > allElements.length) {\n return [];\n }\n\n return getRowElements(allElements, nextRow, elementsInRow);\n}\n\nexport function getElementInRow(\n elements: HTMLElement[],\n row: number,\n elementsInRow: number,\n indexInRow: number\n): NullableElement {\n const rowElements = getRowElements(elements, row, elementsInRow);\n // get element, default to last\n return rowElements[indexInRow] || rowElements[rowElements.length - 1] || null;\n}\n\nexport function getElementInNextRow(\n allElements: HTMLElement[],\n currentRow: number,\n elementsInRow: number,\n index: number\n): NullableElement {\n const nextRowElements = getNextRowElements(\n allElements,\n currentRow,\n elementsInRow\n );\n\n // return item in index, or last item in row\n return (\n nextRowElements[index] ||\n nextRowElements[nextRowElements.length - 1] ||\n null\n );\n}\n\nexport function getElementInPrevRow(\n allElements: HTMLElement[],\n currentRow: number,\n elementsInRow: number,\n index: number\n): NullableElement {\n const prevRowElements = getRowElements(\n allElements,\n currentRow - 1,\n elementsInRow\n );\n\n // default to last\n return (\n prevRowElements[index] ||\n prevRowElements[prevRowElements.length - 1] ||\n null\n );\n}\n\nexport function firstVisibleElementInContainer(\n parent: NullableElement,\n elements: HTMLElement[]\n): NullableElement {\n if (!parent || !elements.length) {\n return null;\n }\n\n const parentTop = parent.getBoundingClientRect().top;\n const parentBottom = parent.getBoundingClientRect().bottom;\n\n const visibleElements = elements.find(element => {\n const elementTop = element.getBoundingClientRect().top;\n const elementBottom = element.getBoundingClientRect().bottom;\n\n return (\n (elementTop >= parentTop && elementTop <= parentBottom) ||\n (elementBottom >= parentTop && elementBottom <= parentBottom)\n );\n });\n\n return visibleElements || null;\n}\n\nexport function hasNextElementSibling(element: HTMLElement) {\n return !!element.nextElementSibling;\n}\n","import { DataEmoji } from '../dataUtils/DataTypes';\nimport {\n emojiByUnified,\n unifiedWithoutSkinTone,\n} from '../dataUtils/emojiSelectors';\n\nimport { asSelectors, ClassNames } from './classNames';\nimport { firstVisibleElementInContainer } from './elementPositionInRow';\n\nexport type NullableElement = HTMLElement | null;\n\nexport const EmojiButtonSelector = `button${asSelectors(ClassNames.emoji)}`;\nexport const VisibleEmojiSelector = [\n EmojiButtonSelector,\n asSelectors(ClassNames.visible),\n `:not(${asSelectors(ClassNames.hidden)})`,\n].join('');\n\nexport function buttonFromTarget(\n emojiElement: NullableElement\n): HTMLButtonElement | null {\n return emojiElement?.closest(EmojiButtonSelector) ?? null;\n}\n\nexport function isEmojiButton(element: NullableElement): boolean {\n if (!element) {\n return false;\n }\n\n return element.matches(EmojiButtonSelector);\n}\n\nexport function emojiFromElement(\n element: NullableElement\n): [DataEmoji, string] | [] {\n const originalUnified = originalUnifiedFromEmojiElement(element);\n const unified = unifiedFromEmojiElement(element);\n\n if (!originalUnified) {\n return [];\n }\n\n const emoji = emojiByUnified(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 return root\n ? root.matches(asSelectors(ClassNames.scrollBody))\n ? root\n : root.querySelector(asSelectors(ClassNames.scrollBody))\n : null;\n}\n\nexport function emojiDistanceFromScrollTop(emoji: NullableElement): number {\n if (!emoji) {\n return 0;\n }\n\n return emojiTrueOffsetTop(emoji) - (closestScrollBody(emoji)?.scrollTop ?? 0);\n}\n\nexport function closestScrollBody(element: NullableElement): NullableElement {\n if (!element) {\n return null;\n }\n\n return element.closest(asSelectors(ClassNames.scrollBody)) ?? null;\n}\n\nexport function emojiTruOffsetLeft(element: NullableElement): number {\n const button = buttonFromTarget(element);\n const category = closestCategory(button);\n\n return elementOffsetLeft(button) + elementOffsetLeft(category);\n}\n\nfunction elementOffsetTop(element: NullableElement): number {\n return element?.offsetTop ?? 0;\n}\n\nfunction elementOffsetLeft(element: NullableElement): number {\n return element?.offsetLeft ?? 0;\n}\n\nexport function unifiedFromEmojiElement(emoji: NullableElement): string | null {\n return elementDataSetKey(buttonFromTarget(emoji), 'unified') ?? null;\n}\n\nexport function originalUnifiedFromEmojiElement(\n emoji: NullableElement\n): string | null {\n const unified = unifiedFromEmojiElement(emoji);\n\n if (unified) {\n return unifiedWithoutSkinTone(unified);\n }\n return null;\n}\n\nfunction elementDataSetKey(\n element: NullableElement,\n key: string\n): string | null {\n return elementDataSet(element)[key] ?? null;\n}\n\nfunction elementDataSet(element: NullableElement): DOMStringMap {\n return element?.dataset ?? {};\n}\n\nexport function isVisibleEmoji(element: HTMLElement) {\n return element.classList.contains(ClassNames.visible);\n}\n\nexport function isHidden(element: NullableElement) {\n if (!element) return true;\n\n return element.classList.contains(ClassNames.hidden);\n}\n\nexport function allVisibleEmojis(parent: NullableElement) {\n if (!parent) {\n return [];\n }\n\n return Array.from(\n parent.querySelectorAll(VisibleEmojiSelector)\n ) as HTMLElement[];\n}\n\nexport function lastVisibleEmoji(element: NullableElement): NullableElement {\n if (!element) return null;\n\n const allEmojis = allVisibleEmojis(element);\n const [last] = allEmojis.slice(-1);\n if (!last) {\n return null;\n }\n\n if (!isVisibleEmoji(last)) {\n return prevVisibleEmoji(last);\n }\n\n return last;\n}\n\nexport function nextVisibleEmoji(element: HTMLElement): NullableElement {\n const next = element.nextElementSibling as HTMLElement;\n\n if (!next) {\n return firstVisibleEmoji(nextCategory(element));\n }\n\n if (!isVisibleEmoji(next)) {\n return nextVisibleEmoji(next);\n }\n\n return next;\n}\n\nexport function prevVisibleEmoji(element: HTMLElement): NullableElement {\n const prev = element.previousElementSibling as HTMLElement;\n\n if (!prev) {\n return lastVisibleEmoji(prevCategory(element));\n }\n\n if (!isVisibleEmoji(prev)) {\n return prevVisibleEmoji(prev);\n }\n\n return prev;\n}\n\nexport function firstVisibleEmoji(parent: NullableElement) {\n if (!parent) {\n return null;\n }\n\n const allEmojis = allVisibleEmojis(parent);\n\n return firstVisibleElementInContainer(parent, allEmojis);\n}\n\nexport function prevCategory(element: NullableElement): NullableElement {\n const category = closestCategory(element);\n\n if (!category) {\n return null;\n }\n\n const prev = category.previousElementSibling as HTMLElement;\n\n if (!prev) {\n return null;\n }\n\n if (isHidden(prev)) {\n return prevCategory(prev);\n }\n\n return prev;\n}\n\nexport function nextCategory(element: NullableElement): NullableElement {\n const category = closestCategory(element);\n\n if (!category) {\n return null;\n }\n\n const next = category.nextElementSibling as HTMLElement;\n\n if (!next) {\n return null;\n }\n\n if (isHidden(next)) {\n return nextCategory(next);\n }\n\n return next;\n}\n\nexport function closestCategory(element: NullableElement) {\n if (!element) {\n return null;\n }\n return element.closest(asSelectors(ClassNames.category)) as HTMLElement;\n}\n\nexport function closestCategoryContent(element: NullableElement) {\n if (!element) {\n return null;\n }\n return element.closest(\n asSelectors(ClassNames.categoryContent)\n ) as HTMLElement;\n}\n","export function parseNativeEmoji(unified: string): string {\n return unified\n .split('-')\n .map(hex => String.fromCodePoint(parseInt(hex, 16)))\n .join('');\n}\n","import { SkinTones, SuggestionMode } from '../types/exposedTypes';\n\nimport { DataEmoji } from './DataTypes';\nimport { emojiUnified } from './emojiSelectors';\n\nconst SUGGESTED_LS_KEY = 'epr_suggested';\n\ntype SuggestedItem = {\n unified: string;\n original: string;\n count: number;\n};\n\ntype Suggested = SuggestedItem[];\n\nexport function getsuggested(mode?: SuggestionMode): Suggested {\n try {\n if (!window?.localStorage) {\n return [];\n }\n const recent = JSON.parse(\n window?.localStorage.getItem(SUGGESTED_LS_KEY) ?? '[]'\n ) as Suggested;\n\n if (mode === SuggestionMode.FREQUENT) {\n return recent.sort((a, b) => b.count - a.count);\n }\n\n return recent;\n } catch {\n return [];\n }\n}\n\nexport function setsuggested(emoji: DataEmoji, skinTone: SkinTones) {\n const recent = getsuggested();\n\n const unified = emojiUnified(emoji, skinTone);\n const originalUnified = emojiUnified(emoji);\n\n let existing = recent.find(({ unified: u }) => u === unified);\n\n let nextList: SuggestedItem[];\n\n if (existing) {\n nextList = [existing].concat(recent.filter(i => i !== existing));\n } else {\n existing = {\n unified,\n original: originalUnified,\n count: 0\n };\n nextList = [existing, ...recent];\n }\n\n existing.count++;\n\n nextList.length = Math.min(nextList.length, 14);\n\n try {\n window?.localStorage.setItem(SUGGESTED_LS_KEY, JSON.stringify(nextList));\n // Prevents the change from being seen immediately.\n } catch {\n // ignore\n }\n}\n","import { 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 { NullableElement } from './selectors';\n\nexport function focusElement(element: NullableElement) {\n if (!element) {\n return;\n }\n\n requestAnimationFrame(() => {\n element.focus();\n });\n}\n\nexport function focusPrevElementSibling(element: NullableElement) {\n if (!element) return;\n\n const prev = element.previousElementSibling as HTMLElement;\n\n focusElement(prev);\n}\n\nexport function focusNextElementSibling(element: NullableElement) {\n if (!element) return;\n\n const next = element.nextElementSibling as HTMLElement;\n\n focusElement(next);\n}\n\nexport function focusFirstElementChild(element: NullableElement) {\n if (!element) return;\n\n const first = element.firstElementChild as HTMLElement;\n\n focusElement(first);\n}\n","import { useCallback } from 'react';\n\nimport { useBodyRef } from '../components/context/ElementRefContext';\n\nimport {\n categoryLabelHeight,\n closestCategory,\n closestScrollBody,\n emojiDistanceFromScrollTop,\n isEmojiBehindLabel,\n NullableElement,\n queryScrollBody\n} from './selectors';\n\nexport function scrollTo(root: NullableElement, top: number = 0) {\n const $eprBody = queryScrollBody(root);\n\n if (!$eprBody) {\n return;\n }\n\n requestAnimationFrame(() => {\n $eprBody.scrollTop = top + 1;\n });\n}\n\nexport function scrollBy(root: NullableElement, by: number): void {\n const $eprBody = queryScrollBody(root);\n\n if (!$eprBody) {\n return;\n }\n\n requestAnimationFrame(() => {\n $eprBody.scrollTop = $eprBody.scrollTop + by;\n });\n}\n\nexport function useScrollTo() {\n const BodyRef = useBodyRef();\n\n return useCallback(\n (top: number) => {\n requestAnimationFrame(() => {\n if (BodyRef.current) {\n BodyRef.current.scrollTop = top;\n }\n });\n },\n [BodyRef]\n );\n}\n\nexport function scrollEmojiAboveLabel(emoji: NullableElement) {\n if (!isEmojiBehindLabel(emoji)) {\n return;\n }\n\n const scrollBody = closestScrollBody(emoji);\n const by = emojiDistanceFromScrollTop(emoji);\n scrollBy(scrollBody, -(categoryLabelHeight(closestCategory(emoji)) - by));\n}\n","import {\n elementCountInRow,\n elementIndexInRow,\n getElementInNextRow,\n getElementInPrevRow,\n getElementInRow,\n hasNextRow,\n rowNumber\n} from './elementPositionInRow';\nimport { focusElement } from './focusElement';\nimport { scrollEmojiAboveLabel } from './scrollTo';\nimport {\n allVisibleEmojis,\n closestCategory,\n firstVisibleEmoji,\n lastVisibleEmoji,\n nextCategory,\n nextVisibleEmoji,\n NullableElement,\n prevCategory,\n prevVisibleEmoji,\n closestCategoryContent\n} from './selectors';\n\nexport function focusFirstVisibleEmoji(parent: NullableElement) {\n const emoji = firstVisibleEmoji(parent);\n focusElement(emoji);\n scrollEmojiAboveLabel(emoji);\n}\n\nexport function focusAndClickFirstVisibleEmoji(parent: NullableElement) {\n const firstEmoji = firstVisibleEmoji(parent);\n\n focusElement(firstEmoji);\n firstEmoji?.click();\n}\n\nexport function focusLastVisibleEmoji(parent: NullableElement) {\n focusElement(lastVisibleEmoji(parent));\n}\n\nexport function focusNextVisibleEmoji(element: NullableElement) {\n if (!element) {\n return;\n }\n\n const next = nextVisibleEmoji(element);\n\n if (!next) {\n return focusFirstVisibleEmoji(nextCategory(element));\n }\n\n focusElement(next);\n scrollEmojiAboveLabel(next);\n}\n\nexport function focusPrevVisibleEmoji(element: NullableElement) {\n if (!element) {\n return;\n }\n\n const prev = prevVisibleEmoji(element);\n\n if (!prev) {\n return focusLastVisibleEmoji(prevCategory(element));\n }\n\n focusElement(prev);\n scrollEmojiAboveLabel(prev);\n}\n\nexport function focusVisibleEmojiOneRowUp(\n element: NullableElement,\n exitUp: () => void\n) {\n if (!element) {\n return;\n }\n\n const prev = visibleEmojiOneRowUp(element);\n\n if (!prev) {\n return exitUp();\n }\n\n focusElement(prev);\n scrollEmojiAboveLabel(prev);\n}\n\nexport function focusVisibleEmojiOneRowDown(element: NullableElement) {\n if (!element) {\n return;\n }\n\n const next = visibleEmojiOneRowDown(element);\n\n return focusElement(next);\n}\n\nfunction visibleEmojiOneRowUp(element: HTMLElement) {\n if (!element) {\n return null;\n }\n\n const categoryContent = closestCategoryContent(element);\n const category = closestCategory(categoryContent);\n const indexInRow = elementIndexInRow(categoryContent, element);\n const row = rowNumber(categoryContent, element);\n const countInRow = elementCountInRow(categoryContent, element);\n\n if (row === 0) {\n const prevVisibleCategory = prevCategory(category);\n\n if (!prevVisibleCategory) {\n return null;\n }\n\n return getElementInRow(\n allVisibleEmojis(prevVisibleCategory),\n -1, // last row\n countInRow,\n indexInRow\n );\n }\n\n return getElementInPrevRow(\n allVisibleEmojis(categoryContent),\n row,\n countInRow,\n indexInRow\n );\n}\n\nfunction visibleEmojiOneRowDown(element: HTMLElement) {\n if (!element) {\n return null;\n }\n\n const categoryContent = closestCategoryContent(element);\n const category = closestCategory(categoryContent);\n const indexInRow = elementIndexInRow(categoryContent, element);\n const row = rowNumber(categoryContent, element);\n const countInRow = elementCountInRow(categoryContent, element);\n if (!hasNextRow(categoryContent, element)) {\n const nextVisibleCategory = nextCategory(category);\n\n if (!nextVisibleCategory) {\n return null;\n }\n\n return getElementInRow(\n allVisibleEmojis(nextVisibleCategory),\n 0,\n countInRow,\n indexInRow\n );\n }\n\n const itemInNextRow = getElementInNextRow(\n allVisibleEmojis(categoryContent),\n row,\n countInRow,\n indexInRow\n );\n\n return itemInNextRow;\n}\n","import { focusFirstVisibleEmoji } from '../DomUtils/keyboardNavigation';\nimport { emojiFromElement, NullableElement } from '../DomUtils/selectors';\nimport {\n useSetAnchoredEmojiRef,\n useVariationPickerRef\n} from '../components/context/ElementRefContext';\nimport { useEmojiVariationPickerState } from '../components/context/PickerContext';\n\nexport default function useSetVariationPicker() {\n const setAnchoredEmojiRef = useSetAnchoredEmojiRef();\n const [, setEmojiVariationPicker] = useEmojiVariationPickerState();\n const VariationPickerRef = useVariationPickerRef();\n\n return function setVariationPicker(element: NullableElement) {\n const [emoji] = emojiFromElement(element);\n\n if (!emoji) {\n return;\n }\n\n setAnchoredEmojiRef(element);\n setEmojiVariationPicker(emoji);\n\n requestAnimationFrame(() => {\n focusFirstVisibleEmoji(VariationPickerRef.current);\n });\n };\n}\n","import * as React from 'react';\nimport { useEffect, useRef } from 'react';\n\nimport {\n emojiFromElement,\n isEmojiElement,\n NullableElement,\n} from '../DomUtils/selectors';\nimport {\n useActiveSkinToneState,\n useDisallowClickRef,\n useEmojiVariationPickerState,\n useUpdateSuggested,\n} from '../components/context/PickerContext';\nimport { GetEmojiUrl } from '../components/emoji/Emoji';\nimport {\n useGetEmojiUrlConfig,\n useOnEmojiClickConfig,\n} from '../config/useConfig';\nimport { DataEmoji } from '../dataUtils/DataTypes';\nimport {\n activeVariationFromUnified,\n emojiHasVariations,\n emojiNames,\n emojiUnified,\n} from '../dataUtils/emojiSelectors';\nimport { parseNativeEmoji } from '../dataUtils/parseNativeEmoji';\nimport { setsuggested } from '../dataUtils/suggested';\nimport { EmojiClickData, EmojiStyle, SkinTones } from '../types/exposedTypes';\n\nimport { useCloseAllOpenToggles } from './useCloseAllOpenToggles';\nimport useSetVariationPicker from './useSetVariationPicker';\n\nexport function useMouseDownHandlers(\n BodyRef: React.MutableRefObject<NullableElement>\n) {\n const mouseDownTimerRef = useRef<undefined | number>();\n const setVariationPicker = useSetVariationPicker();\n const disallowClickRef = useDisallowClickRef();\n const [, setEmojiVariationPicker] = useEmojiVariationPickerState();\n const closeAllOpenToggles = useCloseAllOpenToggles();\n const [activeSkinTone] = useActiveSkinToneState();\n const onEmojiClick = useOnEmojiClickConfig();\n const [, updateSuggested] = useUpdateSuggested();\n const getEmojiUrl = useGetEmojiUrlConfig();\n\n const onClick = React.useCallback(\n function onClick(event: MouseEvent) {\n if (disallowClickRef.current) {\n return;\n }\n\n closeAllOpenToggles();\n\n const [emoji, unified] = emojiFromEvent(event);\n\n if (!emoji || !unified) {\n return;\n }\n\n const skinToneToUse =\n activeVariationFromUnified(unified) || activeSkinTone;\n\n updateSuggested();\n setsuggested(emoji, skinToneToUse);\n onEmojiClick(emojiClickOutput(emoji, skinToneToUse, getEmojiUrl), event);\n },\n [\n activeSkinTone,\n closeAllOpenToggles,\n disallowClickRef,\n onEmojiClick,\n updateSuggested,\n getEmojiUrl,\n ]\n );\n\n const onMouseDown = React.useCallback(\n function onMouseDown(event: MouseEvent) {\n if (mouseDownTimerRef.current) {\n clearTimeout(mouseDownTimerRef.current);\n }\n\n const [emoji] = emojiFromEvent(event);\n\n if (!emoji || !emojiHasVariations(emoji)) {\n return;\n }\n\n mouseDownTimerRef.current = window?.setTimeout(() => {\n disallowClickRef.current = true;\n mouseDownTimerRef.current = undefined;\n closeAllOpenToggles();\n setVariationPicker(event.target as HTMLElement);\n setEmojiVariationPicker(emoji);\n }, 500);\n },\n [\n disallowClickRef,\n closeAllOpenToggles,\n setVariationPicker,\n setEmojiVariationPicker,\n ]\n );\n const onMouseUp = React.useCallback(\n function onMouseUp() {\n if (mouseDownTimerRef.current) {\n clearTimeout(mouseDownTimerRef.current);\n mouseDownTimerRef.current = undefined;\n } else if (disallowClickRef.current) {\n // The problem we're trying to overcome here\n // is that the emoji has both mouseup and click events\n // and when releasing a mouseup event\n // the click gets triggered too\n // So we're disallowing the click event for a short time\n\n requestAnimationFrame(() => {\n disallowClickRef.current = false;\n });\n }\n },\n [disallowClickRef]\n );\n\n useEffect(() => {\n if (!BodyRef.current) {\n return;\n }\n const bodyRef = BodyRef.current;\n bodyRef.addEventListener('click', onClick, {\n passive: true,\n });\n\n bodyRef.addEventListener('mousedown', onMouseDown, {\n passive: true,\n });\n bodyRef.addEventListener('mouseup', onMouseUp, {\n passive: true,\n });\n\n return () => {\n bodyRef?.removeEventListener('click', onClick);\n bodyRef?.removeEventListener('mousedown', onMouseDown);\n bodyRef?.removeEventListener('mouseup', onMouseUp);\n };\n }, [BodyRef, onClick, onMouseDown, onMouseUp]);\n}\n\nfunction emojiFromEvent(event: MouseEvent): [DataEmoji, string] | [] {\n const target = event?.target as HTMLElement;\n if (!isEmojiElement(target)) {\n return [];\n }\n\n return emojiFromElement(target);\n}\n\nfunction emojiClickOutput(\n emoji: DataEmoji,\n activeSkinTone: SkinTones,\n getEmojiUrl: GetEmojiUrl\n): EmojiClickData {\n const unified = emojiUnified(emoji, activeSkinTone);\n return {\n activeSkinTone,\n emoji: parseNativeEmoji(unified),\n getImageUrl(emojiStyle: EmojiStyle) {\n return getEmojiUrl(unified, emojiStyle);\n },\n names: emojiNames(emoji),\n unified,\n unifiedWithoutSkinTone: emojiUnified(emoji),\n };\n}\n","import { useEffect } from 'react';\n\nimport { ElementRef } from '../components/context/ElementRefContext';\n\nimport { useCloseAllOpenToggles } from './useCloseAllOpenToggles';\n\nexport function useOnScroll(BodyRef: ElementRef) {\n const closeAllOpenToggles = useCloseAllOpenToggles();\n\n useEffect(() => {\n const bodyRef = BodyRef.current;\n if (!bodyRef) {\n return;\n }\n\n bodyRef.addEventListener('scroll', onScroll, {\n passive: true\n });\n\n function onScroll() {\n closeAllOpenToggles();\n }\n\n return () => {\n bodyRef?.removeEventListener('scroll', onScroll);\n };\n }, [BodyRef, closeAllOpenToggles]);\n}\n","import { useCallback } from 'react';\n\nimport { 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 { DataEmoji } from '../dataUtils/DataTypes';\nimport { emojiNames } from '../dataUtils/emojiSelectors';\n\nimport { useFocusSearchInput } from './useFocus';\n\nfunction useSetFilterRef() {\n const filterRef = useFilterRef();\n\n return function setFilter(\n setter: FilterState | ((current: FilterState) => FilterState)\n ): void {\n if (typeof setter === 'function') {\n return setFilter(setter(filterRef.current));\n }\n\n filterRef.current = setter;\n };\n}\n\nexport function useClearSearch() {\n const applySearch = useApplySearch();\n const SearchInputRef = useSearchInputRef();\n const focusSearchInput = useFocusSearchInput();\n\n return function clearSearch() {\n if (SearchInputRef.current) {\n SearchInputRef.current.value = '';\n }\n\n applySearch('');\n focusSearchInput();\n };\n}\n\nexport function useAppendSearch() {\n const SearchInputRef = useSearchInputRef();\n const applySearch = useApplySearch();\n\n return function appendSearch(str: string) {\n if (SearchInputRef.current) {\n SearchInputRef.current.value = `${SearchInputRef.current.value}${str}`;\n applySearch(getNormalizedSearchTerm(SearchInputRef.current.value));\n } else {\n applySearch(getNormalizedSearchTerm(str));\n }\n };\n}\n\nexport function useFilter() {\n const SearchInputRef = useSearchInputRef();\n const filterRef = useFilterRef();\n const setFilterRef = useSetFilterRef();\n const applySearch = useApplySearch();\n\n const [searchTerm] = useSearchTermState();\n\n return {\n onChange,\n searchTerm,\n SearchInputRef,\n };\n\n function onChange(inputValue: string) {\n const filter = filterRef.current;\n\n const nextValue = inputValue.toLowerCase();\n\n if (filter?.[nextValue] || nextValue.length <= 1) {\n return applySearch(nextValue);\n }\n\n const longestMatch = findLongestMatch(nextValue, filter);\n\n if (!longestMatch) {\n // Can we even get here?\n // If so, we need to search among all emojis\n return applySearch(nextValue);\n }\n\n setFilterRef((current) =>\n Object.assign(current, {\n [nextValue]: filterEmojiObjectByKeyword(longestMatch, nextValue),\n })\n );\n applySearch(nextValue);\n }\n}\n\nfunction useApplySearch() {\n const [, setSearchTerm] = useSearchTermState();\n const PickerMainRef = usePickerMainRef();\n\n return function applySearch(searchTerm: string) {\n requestAnimationFrame(() => {\n setSearchTerm(searchTerm ? searchTerm?.toLowerCase() : searchTerm).then(\n () => {\n scrollTo(PickerMainRef.current, 0);\n }\n );\n });\n };\n}\n\nfunction filterEmojiObjectByKeyword(\n emojis: FilterDict,\n keyword: string\n): FilterDict {\n const filtered: FilterDict = {};\n\n for (const unified in emojis) {\n const emoji = emojis[unified];\n\n if (hasMatch(emoji, keyword)) {\n filtered[unified] = emoji;\n }\n }\n\n return filtered;\n}\n\nfunction hasMatch(emoji: DataEmoji, keyword: string): boolean {\n return emojiNames(emoji).some((name) => name.includes(keyword));\n}\n\nexport function useIsEmojiFiltered(): (unified: string) => boolean {\n const { current: filter } = useFilterRef();\n const [searchTerm] = useSearchTermState();\n\n return (unified) => isEmojiFilteredBySearchTerm(unified, filter, searchTerm);\n}\n\nfunction isEmojiFilteredBySearchTerm(\n unified: string,\n filter: FilterState,\n searchTerm: string\n): boolean {\n if (!filter || !searchTerm) {\n return false;\n }\n\n return !filter[searchTerm]?.[unified];\n}\n\nexport type FilterDict = Record<string, DataEmoji>;\n\nfunction findLongestMatch(\n keyword: string,\n dict: Record<string, FilterDict> | null\n): FilterDict | null {\n if (!dict) {\n return null;\n }\n\n if (dict[keyword]) {\n return dict[keyword];\n }\n\n const longestMatchingKey = Object.keys(dict)\n .sort((a, b) => b.length - a.length)\n .find((key) => keyword.includes(key));\n\n if (longestMatchingKey) {\n return dict[longestMatchingKey];\n }\n\n return null;\n}\n\nexport function getNormalizedSearchTerm(str: string): string {\n if (!str || typeof str !== 'string') {\n return '';\n }\n\n return str.trim().toLowerCase();\n}\n","import { useEmojisThatFailedToLoadState } from '../components/context/PickerContext';\nimport { DataEmoji } from '../dataUtils/DataTypes';\nimport { emojiUnified } from '../dataUtils/emojiSelectors';\n\nimport { useIsEmojiFiltered } from './useFilter';\n\nexport function useIsEmojiHidden(): (emoji: DataEmoji) => IsHiddenReturn {\n const [emojisThatFailedToLoad] = useEmojisThatFailedToLoadState();\n const isEmojiFiltered = useIsEmojiFiltered();\n\n return (emoji: DataEmoji): IsHiddenReturn => {\n const unified = emojiUnified(emoji);\n\n const failedToLoad = emojisThatFailedToLoad.has(unified);\n const filteredOut = isEmojiFiltered(unified);\n\n return {\n failedToLoad,\n filteredOut,\n hidden: failedToLoad || filteredOut\n };\n };\n}\n\ntype IsHiddenReturn = {\n failedToLoad: boolean;\n filteredOut: boolean;\n hidden: boolean;\n};\n","import { DataEmoji } from './DataTypes';\n\nexport function asEmoji(emoji: DataEmoji | undefined | null): DataEmoji {\n return emoji as DataEmoji;\n}\n","import clsx from 'clsx';\nimport * as React from 'react';\n\ninterface Props\n extends React.DetailedHTMLProps<\n React.ButtonHTMLAttributes<HTMLButtonElement>,\n HTMLButtonElement\n > {\n className?: string;\n}\n\nexport function Button(props: Props) {\n return (\n <button\n type=\"button\"\n {...props}\n className={clsx('epr-btn', props.className)}\n >\n {props.children}\n </button>\n );\n}\n","import clsx from 'clsx';\nimport * as React from 'react';\n\nimport { ClassNames } from '../../DomUtils/classNames';\nimport { DataEmoji } from '../../dataUtils/DataTypes';\nimport { asEmoji } from '../../dataUtils/asEmoji';\nimport {\n emojiByUnified,\n emojiHasVariations,\n emojiName,\n emojiNames,\n emojiUrlByUnified,\n} from '../../dataUtils/emojiSelectors';\nimport { parseNativeEmoji } from '../../dataUtils/parseNativeEmoji';\nimport { EmojiStyle } from '../../types/exposedTypes';\nimport { Button } from '../atoms/Button';\nimport { useEmojisThatFailedToLoadState } from '../context/PickerContext';\nimport './Emoji.css';\n\ntype ClickableEmojiProps = Readonly<\n BaseProps & {\n hidden?: boolean;\n showVariations?: boolean;\n hiddenOnSearch?: boolean;\n emoji: DataEmoji;\n }\n>;\n\ntype BaseProps = {\n emoji?: DataEmoji;\n emojiStyle: EmojiStyle;\n unified: string;\n size?: number;\n lazyLoad?: boolean;\n getEmojiUrl?: GetEmojiUrl;\n};\n\nexport function ClickableEmoji({\n emoji,\n unified,\n hidden,\n hiddenOnSearch,\n emojiStyle,\n showVariations = true,\n size,\n lazyLoad,\n getEmojiUrl,\n}: ClickableEmojiProps) {\n const hasVariations = emojiHasVariations(emoji);\n\n return (\n <Button\n className={clsx(ClassNames.emoji, {\n [ClassNames.hidden]: hidden,\n [ClassNames.hiddenOnSearch]: hiddenOnSearch,\n [ClassNames.visible]: !hidden && !hiddenOnSearch,\n [ClassNames.emojiHasVariatios]: hasVariations && showVariations,\n })}\n data-unified={unified}\n // @ts-ignore - let's ignore the fact this is not a real react ref, ok?\n aria-label={emojiName(emoji)}\n data-full-name={emojiNames(emoji)}\n >\n <ViewOnlyEmoji\n unified={unified}\n emoji={emoji}\n size={size}\n emojiStyle={emojiStyle}\n lazyLoad={lazyLoad}\n getEmojiUrl={getEmojiUrl}\n />\n </Button>\n );\n}\n\nexport function ViewOnlyEmoji({\n emoji,\n unified,\n emojiStyle,\n size,\n lazyLoad,\n getEmojiUrl = emojiUrlByUnified,\n}: BaseProps) {\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 return (\n <>\n {emojiStyle === EmojiStyle.NATIVE ? (\n <NativeEmoji unified={unified} style={style} />\n ) : (\n <EmojiImg\n unified={unified}\n style={style}\n emoji={asEmoji(emojiToRender)}\n emojiStyle={emojiStyle}\n lazyLoad={lazyLoad}\n getEmojiUrl={getEmojiUrl}\n />\n )}\n </>\n );\n}\n\nfunction NativeEmoji({\n unified,\n style,\n}: {\n unified: string;\n style: React.CSSProperties;\n}) {\n return (\n <span\n className={clsx(ClassNames.external, 'epr-emoji-native')}\n data-unified={unified}\n style={style}\n >\n {parseNativeEmoji(unified)}\n </span>\n );\n}\n\nfunction EmojiImg({\n emoji,\n unified,\n emojiStyle,\n style,\n lazyLoad = false,\n getEmojiUrl,\n}: {\n emoji: DataEmoji;\n unified: string;\n emojiStyle: EmojiStyle;\n style: React.CSSProperties;\n lazyLoad?: boolean;\n getEmojiUrl: GetEmojiUrl;\n}) {\n const [, setEmojisThatFailedToLoad] = useEmojisThatFailedToLoadState();\n\n return (\n <img\n src={getEmojiUrl(unified, emojiStyle)}\n alt={emojiName(emoji)}\n className={clsx(ClassNames.external, 'epr-emoji-img')}\n loading={lazyLoad ? 'lazy' : 'eager'}\n onError={onError}\n style={style}\n />\n );\n\n function onError() {\n setEmojisThatFailedToLoad((prev) => new Set(prev).add(unified));\n }\n}\n\nexport type GetEmojiUrl = (unified: string, style: EmojiStyle) => string;\n","import clsx from 'clsx';\nimport * as React from 'react';\n\nimport { ClassNames } from '../../DomUtils/classNames';\nimport {\n CategoryConfig,\n categoryFromCategoryConfig,\n categoryNameFromCategoryConfig\n} from '../../config/categoryConfig';\nimport './EmojiCategory.css';\n\ntype Props = Readonly<{\n categoryConfig: CategoryConfig;\n children?: React.ReactNode;\n hidden?: boolean;\n hiddenOnSearch?: boolean;\n}>;\n\nexport function EmojiCategory({\n categoryConfig,\n children,\n hidden,\n hiddenOnSearch\n}: Props) {\n const category = categoryFromCategoryConfig(categoryConfig);\n const categoryName = categoryNameFromCategoryConfig(categoryConfig);\n\n return (\n <li\n className={clsx(ClassNames.category, {\n [ClassNames.hidden]: hidden,\n [ClassNames.hiddenOnSearch]: hiddenOnSearch\n })}\n data-name={category}\n aria-label={categoryName}\n >\n <div className={ClassNames.label}>{categoryName}</div>\n <div className={ClassNames.categoryContent}>{children}</div>\n </li>\n );\n}\n","import * as React from 'react';\n\nimport { CategoryConfig } from '../../config/categoryConfig';\nimport {\n useEmojiStyleConfig,\n useGetEmojiUrlConfig,\n useSuggestedEmojisModeConfig,\n} from '../../config/useConfig';\nimport { emojiByUnified } from '../../dataUtils/emojiSelectors';\nimport { getsuggested } from '../../dataUtils/suggested';\nimport { useUpdateSuggested } from '../context/PickerContext';\nimport { ClickableEmoji } from '../emoji/Emoji';\n\nimport { EmojiCategory } from './EmojiCategory';\n\ntype Props = Readonly<{\n categoryConfig: CategoryConfig;\n}>;\n\nexport function Suggested({ categoryConfig }: Props) {\n const [suggestedUpdated] = useUpdateSuggested();\n const suggestedEmojisModeConfig = useSuggestedEmojisModeConfig();\n const getEmojiUrl = useGetEmojiUrlConfig();\n const suggested = React.useMemo(\n () => getsuggested(suggestedEmojisModeConfig) ?? [],\n // eslint-disable-next-line react-hooks/exhaustive-deps\n [suggestedUpdated, suggestedEmojisModeConfig]\n );\n const emojiStyle = useEmojiStyleConfig();\n\n return (\n <EmojiCategory\n categoryConfig={categoryConfig}\n hiddenOnSearch\n hidden={suggested.length === 0}\n >\n {suggested.map((suggestedItem) => {\n const emoji = emojiByUnified(suggestedItem.original);\n\n if (!emoji) {\n return null;\n }\n\n return (\n <ClickableEmoji\n showVariations={false}\n unified={suggestedItem.unified}\n emojiStyle={emojiStyle}\n emoji={emoji}\n key={suggestedItem.unified}\n getEmojiUrl={getEmojiUrl}\n />\n );\n })}\n </EmojiCategory>\n );\n}\n","import * as React from 'react';\n\nimport { ClassNames } from '../../DomUtils/classNames';\nimport {\n Categories,\n CategoryConfig,\n categoryFromCategoryConfig\n} from '../../config/categoryConfig';\nimport {\n useCategoriesConfig,\n useEmojiStyleConfig,\n useGetEmojiUrlConfig,\n useLazyLoadEmojisConfig\n} from '../../config/useConfig';\nimport { emojisByCategory, emojiUnified } from '../../dataUtils/emojiSelectors';\nimport { useIsEmojiDisallowed } from '../../hooks/useDisallowedEmojis';\nimport { useIsEmojiHidden } from '../../hooks/useIsEmojiHidden';\nimport {\n useActiveSkinToneState,\n useIsPastInitialLoad\n} from '../context/PickerContext';\nimport { ClickableEmoji } from '../emoji/Emoji';\n\nimport { EmojiCategory } from './EmojiCategory';\nimport { Suggested } from './Suggested';\n\nimport './EmojiList.css';\n\nexport function EmojiList() {\n const categories = useCategoriesConfig();\n\n return (\n <ul className={ClassNames.emojiList}>\n {categories.map((categoryConfig, index) => {\n const category = categoryFromCategoryConfig(categoryConfig);\n\n if (category === Categories.SUGGESTED) {\n return <Suggested key={category} categoryConfig={categoryConfig} />;\n }\n\n return (\n <RenderCategory\n key={category}\n index={index}\n category={category}\n categoryConfig={categoryConfig}\n />\n );\n })}\n </ul>\n );\n}\n\nfunction RenderCategory({\n index,\n category,\n categoryConfig\n}: {\n index: number;\n category: Categories;\n categoryConfig: CategoryConfig;\n}) {\n const isEmojiHidden = useIsEmojiHidden();\n const lazyLoadEmojis = useLazyLoadEmojisConfig();\n const emojiStyle = useEmojiStyleConfig();\n const isPastInitialLoad = useIsPastInitialLoad();\n const [activeSkinTone] = useActiveSkinToneState();\n const isEmojiDisallowed = useIsEmojiDisallowed();\n const getEmojiUrl = useGetEmojiUrlConfig();\n\n // Small trick to defer the rendering of all emoji categories until the first category is visible\n // This way the user gets to actually see something and not wait for the whole picker to render.\n const emojisToPush =\n !isPastInitialLoad && index > 1 ? [] : emojisByCategory(category);\n\n let hiddenCounter = 0;\n\n const emojis = emojisToPush.map(emoji => {\n const unified = emojiUnified(emoji, activeSkinTone);\n const { failedToLoad, filteredOut, hidden } = isEmojiHidden(emoji);\n\n const isDisallowed = isEmojiDisallowed(emoji);\n\n if (hidden || isDisallowed) {\n hiddenCounter++;\n }\n\n if (isDisallowed) {\n return null;\n }\n\n return (\n <ClickableEmoji\n key={unified}\n emoji={emoji}\n unified={unified}\n hidden={failedToLoad}\n hiddenOnSearch={filteredOut}\n emojiStyle={emojiStyle}\n lazyLoad={lazyLoadEmojis}\n getEmojiUrl={getEmojiUrl}\n />\n );\n });\n\n return (\n <EmojiCategory\n categoryConfig={categoryConfig}\n // Indicates that there are no visible emojis\n // Hence, the category should be hidden\n hidden={hiddenCounter === emojis.length}\n >\n {emojis}\n </EmojiCategory>\n );\n}\n","import clsx from 'clsx';\nimport * as React from 'react';\n\nimport { ClassNames } from '../../DomUtils/classNames';\nimport { focusElement } from '../../DomUtils/focusElement';\nimport {\n buttonFromTarget,\n elementHeight,\n emojiTrueOffsetTop,\n emojiTruOffsetLeft,\n} from '../../DomUtils/selectors';\nimport {\n useEmojiStyleConfig,\n useGetEmojiUrlConfig,\n} from '../../config/useConfig';\nimport { asEmoji } from '../../dataUtils/asEmoji';\nimport {\n emojiHasVariations,\n emojiUnified,\n emojiVariations,\n} from '../../dataUtils/emojiSelectors';\nimport {\n useAnchoredEmojiRef,\n useBodyRef,\n useSetAnchoredEmojiRef,\n useVariationPickerRef,\n} from '../context/ElementRefContext';\nimport { useEmojiVariationPickerState } from '../context/PickerContext';\nimport { ClickableEmoji } from '../emoji/Emoji';\nimport './EmojiVariationPicker.css';\n\nenum Direction {\n Up,\n Down,\n}\n\nexport function EmojiVariationPicker() {\n const AnchoredEmojiRef = useAnchoredEmojiRef();\n const VariationPickerRef = useVariationPickerRef();\n const [emoji] = useEmojiVariationPickerState();\n const emojiStyle = useEmojiStyleConfig();\n const { getTop, getMenuDirection } = useVariationPickerTop(\n VariationPickerRef\n );\n const setAnchoredEmojiRef = useSetAnchoredEmojiRef();\n const getPointerStyle = usePointerStyle(VariationPickerRef);\n const getEmojiUrl = useGetEmojiUrlConfig();\n\n const button = buttonFromTarget(AnchoredEmojiRef.current);\n\n const visible =\n emoji &&\n button &&\n emojiHasVariations(emoji) &&\n button.classList.contains(ClassNames.emojiHasVariatios);\n\n let top, pointerStyle;\n\n if (!visible && AnchoredEmojiRef.current) {\n focusElement(AnchoredEmojiRef.current);\n setAnchoredEmojiRef(null);\n } else {\n top = getTop();\n pointerStyle = getPointerStyle();\n }\n\n const safeEmoji = asEmoji(emoji);\n\n return (\n <div\n ref={VariationPickerRef}\n className={clsx('epr-emoji-variation-picker', {\n visible,\n 'pointing-up': getMenuDirection() === Direction.Down,\n })}\n style={{ top }}\n >\n {visible\n ? [emojiUnified(safeEmoji)]\n .concat(emojiVariations(safeEmoji))\n .slice(0, 6)\n .map((unified) => (\n <ClickableEmoji\n key={unified}\n emoji={safeEmoji}\n unified={unified}\n emojiStyle={emojiStyle}\n showVariations={false}\n getEmojiUrl={getEmojiUrl}\n />\n ))\n : null}\n <div className=\"epr-emoji-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","import * as React from 'react';\n\nimport { ClassNames } from '../../DomUtils/classNames';\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\nimport './Body.css';\n\nexport function Body() {\n const BodyRef = useBodyRef();\n useOnScroll(BodyRef);\n useMouseDownHandlers(BodyRef);\n useOnMouseMove();\n\n return (\n <div className={ClassNames.scrollBody} ref={BodyRef}>\n <EmojiVariationPicker />\n <EmojiList />\n </div>\n );\n}\n","import * as React from 'react';\nimport { useEffect } from 'react';\n\nimport { focusElement } from '../DomUtils/focusElement';\nimport {\n buttonFromTarget,\n originalUnifiedFromEmojiElement,\n unifiedFromEmojiElement\n} from '../DomUtils/selectors';\nimport { useBodyRef } from '../components/context/ElementRefContext';\nimport { PreviewEmoji } from '../components/footer/Preview';\n\nimport {\n useAllowMouseMove,\n useIsMouseDisallowed\n} from './useDisallowMouseMove';\n\nexport function useEmojiPreviewEvents(\n allow: boolean,\n setPreviewEmoji: React.Dispatch<React.SetStateAction<PreviewEmoji>>\n) {\n const BodyRef = useBodyRef();\n const isMouseDisallowed = useIsMouseDisallowed();\n const allowMouseMove = useAllowMouseMove();\n\n useEffect(() => {\n if (!allow) {\n return;\n }\n const bodyRef = BodyRef.current;\n\n bodyRef?.addEventListener('keydown', onEscape, {\n passive: true\n });\n\n bodyRef?.addEventListener('mouseover', onMouseOver, true);\n\n bodyRef?.addEventListener('focus', onEnter, true);\n\n bodyRef?.addEventListener('mouseout', onLeave, {\n passive: true\n });\n bodyRef?.addEventListener('blur', onLeave, true);\n\n\n function onEnter(e: FocusEvent) {\n const button = buttonFromTarget(e.target as HTMLElement);\n\n if (!button) {\n return onLeave();\n }\n\n const unified = unifiedFromEmojiElement(button);\n const originalUnified = originalUnifiedFromEmojiElement(button);\n\n if (!unified || !originalUnified) {\n return onLeave();\n }\n\n setPreviewEmoji({\n unified,\n originalUnified\n });\n }\n function onLeave(e?: FocusEvent | MouseEvent) {\n if (e) {\n const relatedTarget = e.relatedTarget as HTMLElement;\n\n if (!buttonFromTarget(relatedTarget)) {\n return setPreviewEmoji(null);\n }\n }\n\n setPreviewEmoji(null);\n }\n function onEscape(e: KeyboardEvent) {\n if (e.key === 'Escape') {\n setPreviewEmoji(null);\n }\n }\n\n function onMouseOver(e: MouseEvent) {\n if (isMouseDisallowed()) {\n return;\n }\n\n const button = buttonFromTarget(e.target as HTMLElement);\n\n if (button) {\n focusElement(button);\n }\n }\n\n\n return () => {\n bodyRef?.removeEventListener('mouseover', onMouseOver);\n bodyRef?.removeEventListener('mouseout', onLeave);\n bodyRef?.removeEventListener('focus', onEnter, true);\n bodyRef?.removeEventListener('blur', onLeave, true);\n bodyRef?.removeEventListener('keydown', onEscape);\n };\n }, [BodyRef, allow, setPreviewEmoji, isMouseDisallowed, allowMouseMove]);\n}\n","import { useSkinTonePickerLocationConfig } from '../config/useConfig';\nimport { SkinTonePickerLocation } from '../types/exposedTypes';\n\nexport function useShouldShowSkinTonePicker() {\n const skinTonePickerLocationConfig = useSkinTonePickerLocationConfig();\n\n return function shouldShowSkinTonePicker(location: SkinTonePickerLocation) {\n return skinTonePickerLocationConfig === location;\n };\n}\n\nexport function useIsSkinToneInSearch() {\n const skinTonePickerLocationConfig = useSkinTonePickerLocationConfig();\n\n return skinTonePickerLocationConfig === SkinTonePickerLocation.SEARCH;\n}\n\nexport function useIsSkinToneInPreview() {\n const skinTonePickerLocationConfig = useSkinTonePickerLocationConfig();\n\n return skinTonePickerLocationConfig === SkinTonePickerLocation.PREVIEW;\n}\n","import clsx from 'clsx';\nimport * as React from 'react';\nimport './Flex.css';\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 style={{ ...style }} className={clsx('Flex', className, direction)}>\n {children}\n </div>\n );\n}\n","import clsx from 'clsx';\nimport * as React from 'react';\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={clsx(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 clsx from 'clsx';\nimport * as React from 'react';\n\nimport { ClassNames } from '../../DomUtils/classNames';\nimport { useSkinTonesDisabledConfig } from '../../config/useConfig';\nimport skinToneVariations, {\n skinTonesNamed\n} from '../../data/skinToneVariations';\nimport { useCloseAllOpenToggles } from '../../hooks/useCloseAllOpenToggles';\nimport { useFocusSearchInput } from '../../hooks/useFocus';\nimport { SkinTones } from '../../types/exposedTypes';\nimport Absolute from '../Layout/Absolute';\nimport Relative from '../Layout/Relative';\nimport { Button } from '../atoms/Button';\nimport { useSkinTonePickerRef } from '../context/ElementRefContext';\nimport {\n useActiveSkinToneState,\n useSkinToneFanOpenState\n} from '../context/PickerContext';\nimport './SkinTonePicker.css';\n\nconst ITEM_SIZE = 28;\n\ntype Props = {\n direction?: SkinTonePickerDirection;\n};\n\nexport function SkinTonePickerMenu() {\n return (\n <Relative style={{ height: ITEM_SIZE }}>\n <Absolute style={{ bottom: 0, right: 0 }}>\n <SkinTonePicker direction={SkinTonePickerDirection.VERTICAL} />\n </Absolute>\n </Relative>\n );\n}\n\nexport function SkinTonePicker({\n direction = SkinTonePickerDirection.HORIZONTAL\n}: Props) {\n const SkinTonePickerRef = useSkinTonePickerRef();\n const isDisabled = useSkinTonesDisabledConfig();\n const [isOpen, setIsOpen] = useSkinToneFanOpenState();\n const [activeSkinTone, setActiveSkinTone] = useActiveSkinToneState();\n const closeAllOpenToggles = useCloseAllOpenToggles();\n const focusSearchInput = useFocusSearchInput();\n\n if (isDisabled) {\n return null;\n }\n\n const fullWidth = `${ITEM_SIZE * skinToneVariations.length}px`;\n\n const expandedSize = isOpen ? fullWidth : ITEM_SIZE + 'px';\n\n const vertical = direction === SkinTonePickerDirection.VERTICAL;\n\n return (\n <Relative\n className={clsx('epr-skin-tones', direction, {\n [ClassNames.open]: isOpen\n })}\n style={\n vertical\n ? { flexBasis: expandedSize, height: expandedSize }\n : { flexBasis: expandedSize }\n }\n >\n <div className=\"epr-skin-tone-select\" ref={SkinTonePickerRef}>\n {skinToneVariations.map((skinToneVariation, i) => {\n const active = skinToneVariation === activeSkinTone;\n return (\n <Button\n style={{\n transform: clsx(\n vertical\n ? `translateY(-${i * (isOpen ? ITEM_SIZE : 0)}px)`\n : `translateX(-${i * (isOpen ? ITEM_SIZE : 0)}px)`,\n isOpen && active && 'scale(1.3)'\n )\n }}\n onClick={() => {\n if (isOpen) {\n setActiveSkinTone(skinToneVariation);\n focusSearchInput();\n } else {\n setIsOpen(true);\n }\n closeAllOpenToggles();\n }}\n key={skinToneVariation}\n className={clsx(`epr-tone-${skinToneVariation}`, 'epr-tone', {\n [ClassNames.active]: active\n })}\n tabIndex={isOpen ? 0 : -1}\n aria-pressed={active}\n aria-label={`Skin tone ${\n skinTonesNamed[skinToneVariation as SkinTones]\n }`}\n ></Button>\n );\n })}\n </div>\n </Relative>\n );\n}\n\nexport enum SkinTonePickerDirection {\n VERTICAL = ClassNames.vertical,\n HORIZONTAL = ClassNames.horizontal\n}\n","import * as React from 'react';\nimport { useState } from 'react';\n\nimport {\n useEmojiStyleConfig,\n useGetEmojiUrlConfig,\n usePreviewConfig\n} from '../../config/useConfig';\nimport { asEmoji } from '../../dataUtils/asEmoji';\nimport {\n emojiByUnified,\n emojiName,\n emojiUnified\n} from '../../dataUtils/emojiSelectors';\nimport { useEmojiPreviewEvents } from '../../hooks/useEmojiPreviewEvents';\nimport { useIsSkinToneInPreview } from '../../hooks/useShouldShowSkinTonePicker';\nimport Flex from '../Layout/Flex';\nimport Space from '../Layout/Space';\nimport { useEmojiVariationPickerState } from '../context/PickerContext';\nimport { ViewOnlyEmoji } from '../emoji/Emoji';\nimport './Preview.css';\nimport { SkinTonePickerMenu } from '../header/SkinTonePicker';\n\nexport function Preview() {\n const previewConfig = usePreviewConfig();\n const isSkinToneInPreview = useIsSkinToneInPreview();\n\n if (!previewConfig.showPreview) {\n return null;\n }\n\n return (\n <Flex className=\"epr-preview\">\n <PreviewBody />\n <Space />\n {isSkinToneInPreview ? <SkinTonePickerMenu /> : null}\n </Flex>\n );\n}\n\nexport function PreviewBody() {\n const previewConfig = usePreviewConfig();\n const [previewEmoji, setPreviewEmoji] = useState<PreviewEmoji>(null);\n const emojiStyle = useEmojiStyleConfig();\n const [variationPickerEmoji] = useEmojiVariationPickerState();\n const getEmojiUrl = useGetEmojiUrlConfig();\n\n useEmojiPreviewEvents(previewConfig.showPreview, setPreviewEmoji);\n\n const emoji = emojiByUnified(previewEmoji?.originalUnified);\n\n const show = emoji != null && previewEmoji != null;\n\n return <PreviewContent />;\n\n function PreviewContent() {\n const defaultEmoji = asEmoji(\n variationPickerEmoji ?? emojiByUnified(previewConfig.defaultEmoji)\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={asEmoji(emoji)}\n emojiStyle={emojiStyle}\n size={45}\n getEmojiUrl={getEmojiUrl}\n />\n ) : defaultEmoji ? (\n <ViewOnlyEmoji\n unified={emojiUnified(defaultEmoji)}\n emoji={defaultEmoji}\n emojiStyle={emojiStyle}\n size={45}\n getEmojiUrl={getEmojiUrl}\n />\n ) : null}\n </div>\n {show ? (\n <div className=\"epr-preview-emoji-label\">\n {emojiName(asEmoji(emoji))}\n </div>\n ) : (\n <div className=\"epr-preview-emoji-label\">{defaultText}</div>\n )}\n </>\n );\n }\n}\n\nexport type PreviewEmoji = null | {\n unified: string;\n originalUnified: string;\n};\n","export function categoryNameFromDom($category: Element | null): string | null {\n return $category?.getAttribute('data-name') ?? null;\n}\n","import { useEffect } from 'react';\n\nimport { categoryNameFromDom } from '../DomUtils/categoryNameFromDom';\nimport { asSelectors, ClassNames } from '../DomUtils/classNames';\nimport { useBodyRef } from '../components/context/ElementRefContext';\n\nexport function useActiveCategoryScrollDetection(\n setActiveCategory: (category: string) => void\n) {\n const BodyRef = useBodyRef();\n\n useEffect(() => {\n const visibleCategories = new Map();\n const bodyRef = BodyRef.current;\n const observer = new IntersectionObserver(\n entries => {\n if (!bodyRef) {\n return;\n }\n\n for (const entry of entries) {\n const id = categoryNameFromDom(entry.target);\n visibleCategories.set(id, entry.intersectionRatio);\n }\n\n const ratios = Array.from(visibleCategories);\n const lastCategory = ratios[ratios.length - 1];\n\n if (lastCategory[1] == 1) {\n return setActiveCategory(lastCategory[0]);\n }\n\n for (const [id, ratio] of ratios) {\n if (ratio) {\n setActiveCategory(id);\n break;\n }\n }\n },\n {\n threshold: [0, 1]\n }\n );\n bodyRef?.querySelectorAll(asSelectors(ClassNames.category)).forEach(el => {\n observer.observe(el);\n });\n }, [BodyRef, setActiveCategory]);\n}\n","import { useSearchTermState } from '../components/context/PickerContext';\n\nexport default function useIsSearchMode(): boolean {\n const [searchTerm] = useSearchTermState();\n\n return !!searchTerm;\n}\n","import { scrollTo } from '../DomUtils/scrollTo';\nimport { NullableElement } from '../DomUtils/selectors';\nimport {\n useBodyRef,\n usePickerMainRef\n} from '../components/context/ElementRefContext';\n\nexport function useScrollCategoryIntoView() {\n const BodyRef = useBodyRef();\n const PickerMainRef = usePickerMainRef();\n\n return function scrollCategoryIntoView(category: string): void {\n if (!BodyRef.current) {\n return;\n }\n const $category = BodyRef.current?.querySelector(\n `[data-name=\"${category}\"]`\n ) as NullableElement;\n\n if (!$category) {\n return;\n }\n\n const offsetTop = $category.offsetTop || 0;\n\n scrollTo(PickerMainRef.current, offsetTop);\n };\n}\n","import clsx from 'clsx';\nimport * as React from 'react';\nimport { useState } from 'react';\nimport './CategoryNavigation.css';\n\nimport { ClassNames } from '../../DomUtils/classNames';\nimport {\n categoryFromCategoryConfig,\n categoryNameFromCategoryConfig\n} from '../../config/categoryConfig';\nimport { useCategoriesConfig } from '../../config/useConfig';\nimport { useActiveCategoryScrollDetection } from '../../hooks/useActiveCategoryScrollDetection';\nimport useIsSearchMode from '../../hooks/useIsSearchMode';\nimport { useScrollCategoryIntoView } from '../../hooks/useScrollCategoryIntoView';\nimport { Button } from '../atoms/Button';\nimport { useCategoryNavigationRef } from '../context/ElementRefContext';\n\nexport function CategoryNavigation() {\n const [activeCategory, setActiveCategory] = useState<string | null>(null);\n const scrollCategoryIntoView = useScrollCategoryIntoView();\n useActiveCategoryScrollDetection(setActiveCategory);\n const isSearchMode = useIsSearchMode();\n\n const categoriesConfig = useCategoriesConfig();\n const CategoryNavigationRef = useCategoryNavigationRef();\n\n return (\n <div className=\"epr-category-nav\" ref={CategoryNavigationRef}>\n {categoriesConfig.map(categoryConfig => {\n const category = categoryFromCategoryConfig(categoryConfig);\n return (\n <Button\n tabIndex={isSearchMode ? -1 : 0}\n className={clsx('epr-cat-btn', `epr-icn-${category}`, {\n [ClassNames.active]: category === activeCategory\n })}\n key={category}\n onClick={() => {\n setActiveCategory(category);\n scrollCategoryIntoView(category);\n }}\n aria-label={categoryNameFromCategoryConfig(categoryConfig)}\n />\n );\n })}\n </div>\n );\n}\n","import clsx from 'clsx';\nimport * as React from 'react';\nimport { useState } from 'react';\n\nimport { asSelectors, ClassNames } from '../../DomUtils/classNames';\nimport {\n useAutoFocusSearchConfig,\n useSearchDisabledConfig,\n useSearchPlaceHolderConfig\n} from '../../config/useConfig';\nimport { useCloseAllOpenToggles } from '../../hooks/useCloseAllOpenToggles';\nimport {\n getNormalizedSearchTerm,\n useClearSearch,\n useFilter\n} from '../../hooks/useFilter';\nimport { useIsSkinToneInSearch } from '../../hooks/useShouldShowSkinTonePicker';\nimport Flex from '../Layout/Flex';\nimport Relative from '../Layout/Relative';\nimport { Button } from '../atoms/Button';\nimport { useSearchInputRef } from '../context/ElementRefContext';\n\nimport './Search.css';\nimport { SkinTonePicker } from './SkinTonePicker';\n\nexport function SearchContainer() {\n const searchDisabled = useSearchDisabledConfig();\n\n const isSkinToneInSearch = useIsSkinToneInSearch();\n\n if (searchDisabled) {\n return null;\n }\n\n return (\n <Flex className=\"epr-header-overlay\">\n <Search />\n\n {isSkinToneInSearch ? <SkinTonePicker /> : null}\n </Flex>\n );\n}\n\nexport function Search() {\n const [inc, setInc] = useState(0);\n const closeAllOpenToggles = useCloseAllOpenToggles();\n const SearchInputRef = useSearchInputRef();\n const clearSearch = useClearSearch();\n const placeholder = useSearchPlaceHolderConfig();\n const autoFocus = useAutoFocusSearchConfig();\n const { onChange } = useFilter();\n\n const input = SearchInputRef?.current;\n const value = input?.value;\n\n return (\n <Relative className=\"epr-search-container\">\n <CssSearch value={value} />\n <input\n // eslint-disable-next-line jsx-a11y/no-autofocus\n autoFocus={autoFocus}\n aria-label={'Type to search for an emoji'}\n onFocus={closeAllOpenToggles}\n className=\"epr-search\"\n type=\"text\"\n placeholder={placeholder}\n onChange={event => {\n setInc(inc + 1);\n setTimeout(() => {\n onChange(event?.target?.value ?? value);\n });\n }}\n ref={SearchInputRef}\n />\n <div className=\"epr-icn-search\" />\n <Button\n className={clsx('epr-btn-clear-search', 'epr-visible-on-search-only')}\n onClick={clearSearch}\n >\n <div className=\"epr-icn-clear-search\" />\n </Button>\n </Relative>\n );\n}\n\nconst CSS_SEARCH_SELECTOR = `${asSelectors(\n ClassNames.emojiPicker\n)} ${asSelectors(ClassNames.emojiList)}`;\n\nfunction CssSearch({ value }: { value: undefined | string }) {\n if (!value) {\n return null;\n }\n\n const searchQuery = `button[data-full-name*=\"${getNormalizedSearchTerm(\n value\n )}\"]`;\n\n return (\n <style>{`\n ${CSS_SEARCH_SELECTOR} ${asSelectors(\n ClassNames.category\n )}:not(:has(${searchQuery})) {\n display: none;\n }\n\n ${CSS_SEARCH_SELECTOR} button${asSelectors(\n ClassNames.emoji\n )}:not(${searchQuery}) {\n display: none;\n }\n `}</style>\n );\n}\n","import * as React from 'react';\n\nimport Relative from '../Layout/Relative';\nimport { CategoryNavigation } from '../navigation/CategoryNavigation';\n\nimport './Header.css';\nimport { SearchContainer } from './Search';\n\nexport function Header() {\n return (\n <Relative className=\"epr-header\">\n <SearchContainer />\n <CategoryNavigation />\n </Relative>\n );\n}\n","import { NullableElement } from './selectors';\n\nexport function getActiveElement() {\n return document.activeElement as NullableElement;\n}\n","import { useCallback, useEffect, useMemo } from 'react';\n\nimport { hasNextElementSibling } from '../DomUtils/elementPositionInRow';\nimport {\n focusNextElementSibling,\n focusPrevElementSibling\n} from '../DomUtils/focusElement';\nimport { getActiveElement } from '../DomUtils/getActiveElement';\nimport {\n focusAndClickFirstVisibleEmoji,\n focusFirstVisibleEmoji,\n focusNextVisibleEmoji,\n focusPrevVisibleEmoji,\n focusVisibleEmojiOneRowDown,\n focusVisibleEmojiOneRowUp\n} from '../DomUtils/keyboardNavigation';\nimport { useScrollTo } from '../DomUtils/scrollTo';\nimport { buttonFromTarget } from '../DomUtils/selectors';\nimport {\n useBodyRef,\n useCategoryNavigationRef,\n usePickerMainRef,\n useSearchInputRef,\n useSkinTonePickerRef\n} from '../components/context/ElementRefContext';\nimport { useSkinToneFanOpenState } from '../components/context/PickerContext';\n\nimport {\n useCloseAllOpenToggles,\n useHasOpenToggles\n} from './useCloseAllOpenToggles';\nimport { useDisallowMouseMove } from './useDisallowMouseMove';\nimport { useAppendSearch, useClearSearch } from './useFilter';\nimport {\n useFocusCategoryNavigation,\n useFocusSearchInput,\n useFocusSkinTonePicker\n} from './useFocus';\nimport useIsSearchMode from './useIsSearchMode';\nimport useSetVariationPicker from './useSetVariationPicker';\nimport {\n useIsSkinToneInPreview,\n useIsSkinToneInSearch\n} from './useShouldShowSkinTonePicker';\n\nenum KeyboardEvents {\n ArrowDown = 'ArrowDown',\n ArrowUp = 'ArrowUp',\n ArrowLeft = 'ArrowLeft',\n ArrowRight = 'ArrowRight',\n Escape = 'Escape',\n Enter = 'Enter',\n Space = ' '\n}\n\nexport function useKeyboardNavigation() {\n usePickerMainKeyboardEvents();\n useSearchInputKeyboardEvents();\n useSkinTonePickerKeyboardEvents();\n useCategoryNavigationKeyboardEvents();\n useBodyKeyboardEvents();\n}\n\nfunction usePickerMainKeyboardEvents() {\n const PickerMainRef = usePickerMainRef();\n const clearSearch = useClearSearch();\n const scrollTo = useScrollTo();\n const SearchInputRef = useSearchInputRef();\n const focusSearchInput = useFocusSearchInput();\n const hasOpenToggles = useHasOpenToggles();\n const disallowMouseMove = useDisallowMouseMove();\n\n const closeAllOpenToggles = useCloseAllOpenToggles();\n\n const onKeyDown = useMemo(\n () =>\n function onKeyDown(event: KeyboardEvent) {\n const { key } = event;\n\n disallowMouseMove();\n switch (key) {\n // eslint-disable-next-line no-fallthrough\n case KeyboardEvents.Escape:\n event.preventDefault();\n if (hasOpenToggles()) {\n closeAllOpenToggles();\n return;\n }\n clearSearch();\n scrollTo(0);\n focusSearchInput();\n break;\n }\n },\n [\n scrollTo,\n clearSearch,\n closeAllOpenToggles,\n focusSearchInput,\n hasOpenToggles,\n disallowMouseMove\n ]\n );\n\n useEffect(() => {\n const current = PickerMainRef.current;\n\n if (!current) {\n return;\n }\n\n current.addEventListener('keydown', onKeyDown);\n\n return () => {\n current.removeEventListener('keydown', onKeyDown);\n };\n }, [PickerMainRef, SearchInputRef, scrollTo, onKeyDown]);\n}\n\nfunction useSearchInputKeyboardEvents() {\n const focusSkinTonePicker = useFocusSkinTonePicker();\n const PickerMainRef = usePickerMainRef();\n const BodyRef = useBodyRef();\n const SearchInputRef = useSearchInputRef();\n const [, setSkinToneFanOpenState] = useSkinToneFanOpenState();\n const goDownFromSearchInput = useGoDownFromSearchInput();\n const isSkinToneInSearch = useIsSkinToneInSearch();\n\n const onKeyDown = useMemo(\n () =>\n function onKeyDown(event: KeyboardEvent) {\n const { key } = event;\n\n switch (key) {\n case KeyboardEvents.ArrowRight:\n if (!isSkinToneInSearch) {\n return;\n }\n event.preventDefault();\n setSkinToneFanOpenState(true);\n focusSkinTonePicker();\n break;\n case KeyboardEvents.ArrowDown:\n event.preventDefault();\n goDownFromSearchInput();\n break;\n case KeyboardEvents.Enter:\n event.preventDefault();\n focusAndClickFirstVisibleEmoji(BodyRef.current);\n break;\n }\n },\n [\n focusSkinTonePicker,\n goDownFromSearchInput,\n setSkinToneFanOpenState,\n BodyRef\n ]\n );\n\n useEffect(() => {\n const current = SearchInputRef.current;\n\n if (!current) {\n return;\n }\n\n current.addEventListener('keydown', onKeyDown);\n\n return () => {\n current.removeEventListener('keydown', onKeyDown);\n };\n }, [PickerMainRef, SearchInputRef, onKeyDown]);\n}\n\nfunction useSkinTonePickerKeyboardEvents() {\n const SkinTonePickerRef = useSkinTonePickerRef();\n const focusSearchInput = useFocusSearchInput();\n const SearchInputRef = useSearchInputRef();\n const goDownFromSearchInput = useGoDownFromSearchInput();\n const [isOpen, setIsOpen] = useSkinToneFanOpenState();\n const isSkinToneInPreview = useIsSkinToneInPreview();\n const isSkinToneInSearch = useIsSkinToneInSearch();\n const onType = useOnType();\n\n const onKeyDown = useMemo(\n () =>\n // eslint-disable-next-line complexity\n function onKeyDown(event: KeyboardEvent) {\n const { key } = event;\n\n if (isSkinToneInSearch) {\n switch (key) {\n case KeyboardEvents.ArrowLeft:\n event.preventDefault();\n if (!isOpen) {\n return focusSearchInput();\n }\n focusNextSkinTone(focusSearchInput);\n break;\n case KeyboardEvents.ArrowRight:\n event.preventDefault();\n if (!isOpen) {\n return focusSearchInput();\n }\n focusPrevSkinTone();\n break;\n case KeyboardEvents.ArrowDown:\n event.preventDefault();\n if (isOpen) {\n setIsOpen(false);\n }\n goDownFromSearchInput();\n break;\n default:\n onType(event);\n break;\n }\n }\n\n if (isSkinToneInPreview) {\n switch (key) {\n case KeyboardEvents.ArrowUp:\n event.preventDefault();\n if (!isOpen) {\n return focusSearchInput();\n }\n focusNextSkinTone(focusSearchInput);\n break;\n case KeyboardEvents.ArrowDown:\n event.preventDefault();\n if (!isOpen) {\n return focusSearchInput();\n }\n focusPrevSkinTone();\n break;\n default:\n onType(event);\n break;\n }\n }\n },\n [\n isOpen,\n focusSearchInput,\n setIsOpen,\n goDownFromSearchInput,\n onType,\n isSkinToneInPreview,\n isSkinToneInSearch\n ]\n );\n\n useEffect(() => {\n const current = SkinTonePickerRef.current;\n\n if (!current) {\n return;\n }\n\n current.addEventListener('keydown', onKeyDown);\n\n return () => {\n current.removeEventListener('keydown', onKeyDown);\n };\n }, [SkinTonePickerRef, SearchInputRef, isOpen, onKeyDown]);\n}\n\nfunction useCategoryNavigationKeyboardEvents() {\n const focusSearchInput = useFocusSearchInput();\n const CategoryNavigationRef = useCategoryNavigationRef();\n const BodyRef = useBodyRef();\n const onType = useOnType();\n\n const onKeyDown = useMemo(\n () =>\n function onKeyDown(event: KeyboardEvent) {\n const { key } = event;\n\n switch (key) {\n case KeyboardEvents.ArrowUp:\n event.preventDefault();\n focusSearchInput();\n break;\n case KeyboardEvents.ArrowRight:\n event.preventDefault();\n focusNextElementSibling(getActiveElement());\n break;\n case KeyboardEvents.ArrowLeft:\n event.preventDefault();\n focusPrevElementSibling(getActiveElement());\n break;\n case KeyboardEvents.ArrowDown:\n event.preventDefault();\n focusFirstVisibleEmoji(BodyRef.current);\n break;\n default:\n onType(event);\n break;\n }\n },\n [BodyRef, focusSearchInput, onType]\n );\n\n useEffect(() => {\n const current = CategoryNavigationRef.current;\n\n if (!current) {\n return;\n }\n\n current.addEventListener('keydown', onKeyDown);\n\n return () => {\n current.removeEventListener('keydown', onKeyDown);\n };\n }, [CategoryNavigationRef, BodyRef, onKeyDown]);\n}\n\nfunction useBodyKeyboardEvents() {\n const BodyRef = useBodyRef();\n const goUpFromBody = useGoUpFromBody();\n const setVariationPicker = useSetVariationPicker();\n const hasOpenToggles = useHasOpenToggles();\n const closeAllOpenToggles = useCloseAllOpenToggles();\n\n const onType = useOnType();\n\n const onKeyDown = useMemo(\n () =>\n // eslint-disable-next-line complexity\n function onKeyDown(event: KeyboardEvent) {\n const { key } = event;\n\n const activeElement = buttonFromTarget(getActiveElement());\n\n switch (key) {\n case KeyboardEvents.ArrowRight:\n event.preventDefault();\n focusNextVisibleEmoji(activeElement);\n break;\n case KeyboardEvents.ArrowLeft:\n event.preventDefault();\n focusPrevVisibleEmoji(activeElement);\n break;\n case KeyboardEvents.ArrowDown:\n event.preventDefault();\n if (hasOpenToggles()) {\n closeAllOpenToggles();\n break;\n }\n focusVisibleEmojiOneRowDown(activeElement);\n break;\n case KeyboardEvents.ArrowUp:\n event.preventDefault();\n if (hasOpenToggles()) {\n closeAllOpenToggles();\n break;\n }\n focusVisibleEmojiOneRowUp(activeElement, goUpFromBody);\n break;\n case KeyboardEvents.Space:\n event.preventDefault();\n setVariationPicker(event.target as HTMLElement);\n break;\n default:\n onType(event);\n break;\n }\n },\n [\n goUpFromBody,\n onType,\n setVariationPicker,\n hasOpenToggles,\n closeAllOpenToggles\n ]\n );\n\n useEffect(() => {\n const current = BodyRef.current;\n\n if (!current) {\n return;\n }\n\n current.addEventListener('keydown', onKeyDown);\n\n return () => {\n current.removeEventListener('keydown', onKeyDown);\n };\n }, [BodyRef, onKeyDown]);\n}\n\nfunction useGoDownFromSearchInput() {\n const focusCategoryNavigation = useFocusCategoryNavigation();\n const isSearchMode = useIsSearchMode();\n const BodyRef = useBodyRef();\n\n return useCallback(\n function goDownFromSearchInput() {\n if (isSearchMode) {\n return focusFirstVisibleEmoji(BodyRef.current);\n }\n return focusCategoryNavigation();\n },\n [BodyRef, focusCategoryNavigation, isSearchMode]\n );\n}\n\nfunction useGoUpFromBody() {\n const focusSearchInput = useFocusSearchInput();\n const focusCategoryNavigation = useFocusCategoryNavigation();\n const isSearchMode = useIsSearchMode();\n\n return useCallback(\n function goUpFromEmoji() {\n if (isSearchMode) {\n return focusSearchInput();\n }\n return focusCategoryNavigation();\n },\n [focusSearchInput, isSearchMode, focusCategoryNavigation]\n );\n}\n\nfunction focusNextSkinTone(exitLeft: () => void) {\n const currentSkinTone = getActiveElement();\n\n if (!currentSkinTone) {\n return;\n }\n\n if (!hasNextElementSibling(currentSkinTone)) {\n exitLeft();\n }\n\n focusNextElementSibling(currentSkinTone);\n}\n\nfunction focusPrevSkinTone() {\n const currentSkinTone = getActiveElement();\n\n if (!currentSkinTone) {\n return;\n }\n\n focusPrevElementSibling(currentSkinTone);\n}\n\nfunction useOnType() {\n const appendSearch = useAppendSearch();\n const focusSearchInput = useFocusSearchInput();\n const closeAllOpenToggles = useCloseAllOpenToggles();\n\n return function onType(event: KeyboardEvent) {\n const { key } = event;\n\n if (hasModifier(event)) {\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/Emoji';\nimport { DataEmoji } from '../dataUtils/DataTypes';\nimport { emojiUnified, emojiVariations } from '../dataUtils/emojiSelectors';\nimport { EmojiStyle } from '../types/exposedTypes';\n\nexport function preloadEmoji(\n getEmojiUrl: GetEmojiUrl,\n emoji: undefined | DataEmoji,\n emojiStyle: EmojiStyle\n): void {\n if (!emoji) {\n return;\n }\n\n if (emojiStyle === EmojiStyle.NATIVE) {\n return;\n }\n\n const unified = emojiUnified(emoji);\n\n if (preloadedEmojs.has(unified)) {\n return;\n }\n\n emojiVariations(emoji).forEach((variation) => {\n const emojiUrl = getEmojiUrl(variation, emojiStyle);\n preloadImage(emojiUrl);\n });\n\n preloadedEmojs.add(unified);\n}\n\nexport const preloadedEmojs: Set<string> = new Set();\n\nfunction preloadImage(url: string): void {\n const image = new Image();\n image.src = url;\n}\n","import { useEffect } from 'react';\n\nimport { buttonFromTarget, emojiFromElement } from '../DomUtils/selectors';\nimport { useBodyRef } from '../components/context/ElementRefContext';\nimport { useEmojiStyleConfig, useGetEmojiUrlConfig } from '../config/useConfig';\nimport { emojiHasVariations } from '../dataUtils/emojiSelectors';\nimport { EmojiStyle } from '../types/exposedTypes';\n\nimport { preloadEmoji } from './preloadEmoji';\n\nexport function useOnFocus() {\n const BodyRef = useBodyRef();\n const emojiStyle = useEmojiStyleConfig();\n const getEmojiUrl = useGetEmojiUrlConfig();\n\n useEffect(() => {\n if (emojiStyle === EmojiStyle.NATIVE) {\n return;\n }\n\n const bodyRef = BodyRef.current;\n\n bodyRef?.addEventListener('focusin', onFocus);\n\n return () => {\n bodyRef?.removeEventListener('focusin', onFocus);\n };\n\n function onFocus(event: FocusEvent) {\n const button = buttonFromTarget(event.target as HTMLElement);\n\n if (!button) {\n return;\n }\n\n const [emoji] = emojiFromElement(button);\n\n if (!emoji) {\n return;\n }\n\n if (emojiHasVariations(emoji)) {\n preloadEmoji(getEmojiUrl, emoji, emojiStyle);\n }\n }\n }, [BodyRef, emojiStyle, getEmojiUrl]);\n}\n","import clsx from 'clsx';\nimport * as React from 'react';\n\nimport { ClassNames } from '../../DomUtils/classNames';\nimport { usePickerSizeConfig, useThemeConfig } from '../../config/useConfig';\nimport useIsSearchMode from '../../hooks/useIsSearchMode';\nimport { useKeyboardNavigation } from '../../hooks/useKeyboardNavigation';\nimport { useOnFocus } from '../../hooks/useOnFocus';\nimport { Theme } from '../../types/exposedTypes';\nimport { usePickerMainRef } from '../context/ElementRefContext';\nimport { PickerContextProvider } from '../context/PickerContext';\nimport './PickerMain.css';\n\ntype Props = Readonly<{\n children: React.ReactNode;\n}>;\n\nexport default function PickerMain({ children }: Props) {\n return (\n <PickerContextProvider>\n <PickerRootElement>{children}</PickerRootElement>\n </PickerContextProvider>\n );\n}\n\ntype RootProps = Readonly<{\n children: React.ReactNode;\n}>;\n\nfunction PickerRootElement({ children }: RootProps) {\n const theme = useThemeConfig();\n const searchModeActive = useIsSearchMode();\n const PickerMainRef = usePickerMainRef();\n const { height, width } = usePickerSizeConfig();\n\n useKeyboardNavigation();\n useOnFocus();\n\n const style = {\n height,\n width\n };\n\n return (\n <aside\n className={clsx(ClassNames.emojiPicker, 'epr-main', {\n [ClassNames.searchActive]: searchModeActive,\n 'epr-dark-theme': theme === Theme.DARK\n })}\n ref={PickerMainRef}\n style={style}\n >\n {children}\n </aside>\n );\n}\n","import * as React from 'react';\n\nimport { Body } from './components/body/Body';\nimport { ElementRefContextProvider } from './components/context/ElementRefContext';\nimport { PickerConfigProvider } from './components/context/PickerConfigContext';\nimport { Preview } from './components/footer/Preview';\nimport { Header } from './components/header/Header';\nimport PickerMain from './components/main/PickerMain';\nimport { PickerConfig } from './config/config';\nimport './EmojiPickerReact.css';\n\nexport interface Props extends PickerConfig {}\n\nexport default function EmojiPicker(props: Props) {\n return (\n <ElementRefContextProvider>\n <PickerConfigProvider {...props}>\n <PickerMain>\n <Header />\n <Body />\n <Preview />\n </PickerMain>\n </PickerConfigProvider>\n </ElementRefContextProvider>\n );\n}\n","import * as React from 'react';\n\nexport default class ErrorBoundary extends React.Component<\n { children: React.ReactNode },\n { hasError: boolean }\n> {\n constructor(props: { children: React.ReactNode }) {\n super(props);\n this.state = { hasError: false };\n }\n\n static getDerivedStateFromError() {\n return { hasError: true };\n }\n\n componentDidCatch(error: Error, errorInfo: any) {\n // eslint-disable-next-line no-console\n console.error('Emoji Picker React failed to render:', error, errorInfo);\n }\n\n render() {\n if (this.state.hasError) {\n return null;\n }\n\n return this.props.children;\n }\n}\n","import * as React from 'react';\n\nimport { EmojiStyle } from '../../types/exposedTypes';\n\nimport { GetEmojiUrl, ViewOnlyEmoji } from './Emoji';\n\nexport function ExportedEmoji({\n unified,\n size = 32,\n emojiStyle = EmojiStyle.APPLE,\n lazyLoad = false,\n getEmojiUrl,\n}: {\n unified: string;\n emojiStyle?: EmojiStyle;\n size?: number;\n lazyLoad?: boolean;\n getEmojiUrl?: GetEmojiUrl;\n}) {\n if (!unified) {\n return null;\n }\n\n return (\n <ViewOnlyEmoji\n unified={unified}\n size={size}\n emojiStyle={emojiStyle}\n lazyLoad={lazyLoad}\n getEmojiUrl={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';\n\nexport { ExportedEmoji as Emoji } from './components/emoji/ExportedEmoji';\n\nexport {\n EmojiStyle,\n SkinTones,\n Theme,\n Categories,\n EmojiClickData,\n SuggestionMode,\n SkinTonePickerLocation\n} from './types/exposedTypes';\n\nexport interface Props extends PickerConfig {}\n\nexport default function EmojiPicker(props: Props) {\n return (\n <ErrorBoundary>\n <EmojiPickerReact {...props} />\n </ErrorBoundary>\n );\n}\n"],"names":["ClassNames","asSelectors","classNames","map","c","join","ElementRefContextProvider","children","PickerMainRef","React","AnchoredEmojiRef","BodyRef","SearchInputRef","SkinTonePickerRef","CategoryNavigationRef","VariationPickerRef","ElementRefContext","Provider","value","useElementRef","usePickerMainRef","useAnchoredEmojiRef","useSetAnchoredEmojiRef","target","current","useBodyRef","useSearchInputRef","useSkinTonePickerRef","useCategoryNavigationRef","useVariationPickerRef","isSystemDarkTheme","window","matchMedia","matches","SuggestionMode","EmojiStyle","Theme","SkinTones","Categories","SkinTonePickerLocation","CDN_URL_APPLE","CDN_URL_FACEBOOK","CDN_URL_TWITTER","CDN_URL_GOOGLE","cdnUrl","emojiStyle","TWITTER","GOOGLE","FACEBOOK","APPLE","skinToneVariations","NEUTRAL","LIGHT","MEDIUM_LIGHT","MEDIUM","MEDIUM_DARK","DARK","skinTonesNamed","Object","entries","reduce","acc","key","skinTonesMapped","mapped","skinTone","assign","EmojiProperties","emojiNames","emoji","name","addedIn","parseFloat","added_in","emojiName","unifiedWithoutSkinTone","unified","splat","split","splice","emojiUnified","emojiHasVariations","emojiVariationUnified","emojisByCategory","category","emojis","emojiUrlByUnified","emojiVariations","variations","length","find","variation","includes","emojiByUnified","allEmojisByUnified","withoutSkinTone","allEmojis","values","flat","setTimeout","Emoji","activeVariationFromUnified","suspectedSkinTone","categoriesOrdered","SUGGESTED","SMILEYS_PEOPLE","ANIMALS_NATURE","FOOD_DRINK","TRAVEL_PLACES","ACTIVITIES","OBJECTS","SYMBOLS","FLAGS","SuggestedRecent","configByCategory","baseCategoriesConfig","modifiers","categoryFromCategoryConfig","categoryNameFromCategoryConfig","mergeCategoriesConfig","userCategoriesConfig","extra","suggestionMode","RECENT","base","getBaseConfigByCategory","modifier","mergeConfig","userConfig","basePickerConfig","previewConfig","config","categories","suggestedEmojisMode","skinTonePickerLocation","searchDisabled","PREVIEW","autoFocusSearch","defaultSkinTone","emojiVersion","getEmojiUrl","height","lazyLoadEmojis","onEmojiClick","defaultOnClickHandler","event","basePreviewConfig","searchPlaceHolder","SEARCH","skinTonesDisabled","FREQUENT","theme","width","defaultEmoji","defaultCaption","showPreview","ConfigContext","PickerConfigProvider","usePickerConfig","useSearchPlaceHolderConfig","useDefaultSkinToneConfig","useSkinTonesDisabledConfig","useEmojiStyleConfig","useAutoFocusSearchConfig","useCategoriesConfig","useOnEmojiClickConfig","usePreviewConfig","useThemeConfig","AUTO","useSuggestedEmojisModeConfig","useLazyLoadEmojisConfig","usePickerSizeConfig","getDimension","useEmojiVersionConfig","useSearchDisabledConfig","useSkinTonePickerLocationConfig","useGetEmojiUrlConfig","dimensionConfig","alphaNumericEmojiIndex","searchIndex","joinedNameString","replace","forEach","char","useDebouncedState","initialValue","delay","useState","state","setState","timer","useRef","debouncedSetState","Promise","resolve","clearTimeout","useDisallowedEmojis","DisallowedEmojisRef","emojiVersionConfig","useMemo","Number","isNaN","disallowedEmojis","addedInNewerVersion","useIsEmojiDisallowed","isEmojiDisallowed","Boolean","supportedLevel","useMarkInitialLoad","dispatch","useEffect","PickerContextProvider","filterRef","disallowClickRef","disallowMouseRef","disallowedEmojisRef","suggestedUpdateState","Date","now","searchTerm","skinToneFanOpenState","activeSkinTone","activeCategoryState","emojisThatFailedToLoadState","Set","emojiVariationPickerState","isPastInitialLoad","setIsPastInitialLoad","PickerContext","undefined","useFilterRef","useDisallowClickRef","useDisallowMouseRef","useSearchTermState","useActiveSkinToneState","useEmojisThatFailedToLoadState","useIsPastInitialLoad","useEmojiVariationPickerState","useSkinToneFanOpenState","useUpdateSuggested","suggestedUpdated","setsuggestedUpdate","updateSuggested","useDisallowMouseMove","DisallowMouseRef","disallowMouseMove","useAllowMouseMove","allowMouseMove","useIsMouseDisallowed","isMouseDisallowed","useOnMouseMove","bodyRef","addEventListener","onMouseMove","passive","removeEventListener","elementCountInRow","parent","element","parentWidth","getBoundingClientRect","elementWidth","Math","floor","elementIndexInRow","elementLeft","left","parentLeft","rowNumber","elementHeight","elementTop","top","parentTop","round","hasNextRow","parentHeight","getRowElements","elements","row","elementsInRow","lastRow","firstElementIndex","lastElementIndex","slice","getNextRowElements","allElements","currentRow","nextRow","getElementInRow","indexInRow","rowElements","getElementInNextRow","index","nextRowElements","getElementInPrevRow","prevRowElements","firstVisibleElementInContainer","parentBottom","bottom","visibleElements","elementBottom","hasNextElementSibling","nextElementSibling","EmojiButtonSelector","VisibleEmojiSelector","visible","hidden","buttonFromTarget","emojiElement","closest","emojiFromElement","originalUnified","originalUnifiedFromEmojiElement","unifiedFromEmojiElement","isEmojiElement","parentElement","clientHeight","emojiTrueOffsetTop","button","closestCategory","labelHeight","categoryLabelHeight","elementOffsetTop","categoryWithoutLabel","querySelector","categoryContent","isEmojiBehindLabel","emojiDistanceFromScrollTop","queryScrollBody","root","scrollBody","closestScrollBody","scrollTop","emojiTruOffsetLeft","elementOffsetLeft","offsetTop","offsetLeft","elementDataSetKey","elementDataSet","dataset","isVisibleEmoji","classList","contains","isHidden","allVisibleEmojis","Array","from","querySelectorAll","lastVisibleEmoji","last","prevVisibleEmoji","nextVisibleEmoji","next","firstVisibleEmoji","nextCategory","prev","previousElementSibling","prevCategory","closestCategoryContent","parseNativeEmoji","hex","String","fromCodePoint","parseInt","SUGGESTED_LS_KEY","getsuggested","mode","localStorage","recent","JSON","parse","getItem","sort","a","b","count","setsuggested","existing","u","nextList","concat","filter","i","original","min","setItem","stringify","useCloseAllOpenToggles","variationPicker","setVariationPicker","skinToneFanOpen","setSkinToneFanOpen","closeAllOpenToggles","useCallback","useHasOpenToggles","hasOpenToggles","focusElement","requestAnimationFrame","focus","focusPrevElementSibling","focusNextElementSibling","focusFirstElementChild","first","firstElementChild","scrollTo","$eprBody","scrollBy","by","useScrollTo","scrollEmojiAboveLabel","focusFirstVisibleEmoji","focusAndClickFirstVisibleEmoji","firstEmoji","click","focusLastVisibleEmoji","focusNextVisibleEmoji","focusPrevVisibleEmoji","focusVisibleEmojiOneRowUp","exitUp","visibleEmojiOneRowUp","focusVisibleEmojiOneRowDown","visibleEmojiOneRowDown","countInRow","prevVisibleCategory","nextVisibleCategory","itemInNextRow","useSetVariationPicker","setAnchoredEmojiRef","setEmojiVariationPicker","useMouseDownHandlers","mouseDownTimerRef","onClick","emojiFromEvent","skinToneToUse","emojiClickOutput","onMouseDown","onMouseUp","getImageUrl","names","useOnScroll","onScroll","useFocusSearchInput","useFocusSkinTonePicker","useFocusCategoryNavigation","useSetFilterRef","setFilter","setter","useClearSearch","applySearch","useApplySearch","focusSearchInput","clearSearch","useAppendSearch","appendSearch","str","getNormalizedSearchTerm","useFilter","setFilterRef","onChange","inputValue","nextValue","toLowerCase","longestMatch","findLongestMatch","filterEmojiObjectByKeyword","setSearchTerm","then","keyword","filtered","hasMatch","some","useIsEmojiFiltered","isEmojiFilteredBySearchTerm","dict","longestMatchingKey","keys","trim","useIsEmojiHidden","emojisThatFailedToLoad","isEmojiFiltered","failedToLoad","has","filteredOut","asEmoji","Button","props","type","className","clsx","ClickableEmoji","hiddenOnSearch","showVariations","size","lazyLoad","hasVariations","emojiHasVariatios","ViewOnlyEmoji","style","fontSize","emojiToRender","NATIVE","NativeEmoji","EmojiImg","external","setEmojisThatFailedToLoad","src","alt","loading","onError","add","EmojiCategory","categoryConfig","categoryName","label","Suggested","suggestedEmojisModeConfig","suggested","suggestedItem","EmojiList","emojiList","RenderCategory","isEmojiHidden","emojisToPush","hiddenCounter","isDisallowed","Direction","EmojiVariationPicker","useVariationPickerTop","getTop","getMenuDirection","getPointerStyle","usePointerStyle","pointerStyle","safeEmoji","ref","Down","clientWidth","direction","Up","emojiOffsetTop","buttonHeight","Body","useEmojiPreviewEvents","allow","setPreviewEmoji","onEscape","onMouseOver","onEnter","onLeave","e","relatedTarget","useIsSkinToneInSearch","skinTonePickerLocationConfig","useIsSkinToneInPreview","FlexDirection","Flex","ROW","Space","flex","Absolute","position","Relative","ITEM_SIZE","SkinTonePickerMenu","right","SkinTonePicker","SkinTonePickerDirection","VERTICAL","HORIZONTAL","isDisabled","isOpen","setIsOpen","setActiveSkinTone","fullWidth","expandedSize","vertical","open","flexBasis","skinToneVariation","active","transform","tabIndex","Preview","isSkinToneInPreview","PreviewBody","previewEmoji","variationPickerEmoji","show","PreviewContent","defaultText","categoryNameFromDom","$category","getAttribute","useActiveCategoryScrollDetection","setActiveCategory","visibleCategories","Map","observer","IntersectionObserver","entry","id","set","intersectionRatio","ratios","lastCategory","ratio","threshold","el","observe","useIsSearchMode","useScrollCategoryIntoView","scrollCategoryIntoView","CategoryNavigation","activeCategory","isSearchMode","categoriesConfig","SearchContainer","isSkinToneInSearch","Search","inc","setInc","placeholder","autoFocus","input","CssSearch","onFocus","CSS_SEARCH_SELECTOR","emojiPicker","searchQuery","Header","getActiveElement","document","activeElement","KeyboardEvents","useKeyboardNavigation","usePickerMainKeyboardEvents","useSearchInputKeyboardEvents","useSkinTonePickerKeyboardEvents","useCategoryNavigationKeyboardEvents","useBodyKeyboardEvents","onKeyDown","Escape","preventDefault","focusSkinTonePicker","setSkinToneFanOpenState","goDownFromSearchInput","useGoDownFromSearchInput","ArrowRight","ArrowDown","Enter","onType","useOnType","ArrowLeft","focusNextSkinTone","focusPrevSkinTone","ArrowUp","goUpFromBody","useGoUpFromBody","focusCategoryNavigation","goUpFromEmoji","exitLeft","currentSkinTone","hasModifier","match","metaKey","ctrlKey","altKey","preloadEmoji","preloadedEmojs","emojiUrl","preloadImage","url","image","Image","useOnFocus","PickerMain","PickerRootElement","searchModeActive","searchActive","EmojiPicker","ErrorBoundary","hasError","getDerivedStateFromError","componentDidCatch","error","errorInfo","console","render","ExportedEmoji","EmojiPickerReact"],"mappings":"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;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;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"}
|
|
1
|
+
{"version":3,"file":"emoji-picker-react.cjs.development.js","sources":["../src/DomUtils/classNames.ts","../src/components/context/ElementRefContext.tsx","../src/DomUtils/isDarkTheme.ts","../src/types/exposedTypes.ts","../src/config/cdnUrls.ts","../src/data/skinToneVariations.ts","../src/dataUtils/emojiSelectors.ts","../src/config/categoryConfig.ts","../src/config/config.ts","../src/components/context/PickerConfigContext.tsx","../src/config/useConfig.ts","../src/dataUtils/alphaNumericEmojiIndex.ts","../src/hooks/useDebouncedState.ts","../src/hooks/useDisallowedEmojis.ts","../src/hooks/useInitialLoad.ts","../src/components/context/PickerContext.tsx","../src/hooks/useDisallowMouseMove.ts","../src/DomUtils/elementPositionInRow.ts","../src/DomUtils/selectors.ts","../src/dataUtils/parseNativeEmoji.ts","../src/dataUtils/suggested.ts","../src/hooks/useCloseAllOpenToggles.ts","../src/hooks/useSetVariationPicker.ts","../src/hooks/useMouseDownHandlers.ts","../src/hooks/useOnScroll.ts","../src/DomUtils/scrollTo.ts","../src/DomUtils/focusElement.ts","../src/hooks/useFocus.ts","../src/hooks/useFilter.ts","../src/hooks/useIsEmojiHidden.ts","../src/dataUtils/asEmoji.ts","../src/components/atoms/Button.tsx","../src/components/emoji/Emoji.tsx","../src/components/body/EmojiCategory.tsx","../src/components/body/Suggested.tsx","../src/components/body/EmojiList.tsx","../src/DomUtils/keyboardNavigation.ts","../src/components/body/EmojiVariationPicker.tsx","../src/components/body/Body.tsx","../src/hooks/useEmojiPreviewEvents.ts","../src/hooks/useShouldShowSkinTonePicker.ts","../src/components/Layout/Flex.tsx","../src/components/Layout/Space.tsx","../src/components/Layout/Absolute.tsx","../src/components/Layout/Relative.tsx","../src/components/header/SkinTonePicker.tsx","../src/components/footer/Preview.tsx","../src/DomUtils/categoryNameFromDom.ts","../src/hooks/useActiveCategoryScrollDetection.ts","../src/hooks/useIsSearchMode.ts","../src/hooks/useScrollCategoryIntoView.ts","../src/components/navigation/CategoryNavigation.tsx","../src/components/header/Search.tsx","../src/components/header/Header.tsx","../src/DomUtils/getActiveElement.ts","../src/hooks/useKeyboardNavigation.ts","../src/hooks/preloadEmoji.ts","../src/hooks/useOnFocus.ts","../src/components/main/PickerMain.tsx","../src/EmojiPickerReact.tsx","../src/components/ErrorBoundary.tsx","../src/components/emoji/ExportedEmoji.tsx","../src/index.tsx"],"sourcesContent":["export enum ClassNames {\n hiddenOnSearch = 'epr-hidden-on-search',\n searchActive = 'epr-search-active',\n hidden = 'epr-hidden',\n visible = 'epr-visible',\n active = 'epr-active',\n emoji = 'epr-emoji',\n category = 'epr-emoji-category',\n label = 'epr-emoji-category-label',\n categoryContent = 'epr-emoji-category-content',\n emojiHasVariatios = '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}\n\nexport function asSelectors(...classNames: ClassNames[]): string {\n return classNames.map(c => `.${c}`).join('');\n}\n","import * as React from 'react';\n\nimport { NullableElement } from '../../DomUtils/selectors';\n\nexport function ElementRefContextProvider({\n children\n}: {\n children: React.ReactNode;\n}) {\n const PickerMainRef = React.useRef<HTMLElement>(null);\n const AnchoredEmojiRef = React.useRef<HTMLElement>(null);\n const BodyRef = React.useRef<HTMLDivElement>(null);\n const SearchInputRef = React.useRef<HTMLInputElement>(null);\n const SkinTonePickerRef = React.useRef<HTMLDivElement>(null);\n const CategoryNavigationRef = React.useRef<HTMLDivElement>(null);\n const VariationPickerRef = React.useRef<HTMLDivElement>(null);\n\n return (\n <ElementRefContext.Provider\n value={{\n AnchoredEmojiRef,\n BodyRef,\n CategoryNavigationRef,\n PickerMainRef,\n SearchInputRef,\n SkinTonePickerRef,\n VariationPickerRef\n }}\n >\n {children}\n </ElementRefContext.Provider>\n );\n}\n\nexport type ElementRef<\n E extends HTMLElement = HTMLElement\n> = React.MutableRefObject<E | null>;\n\ntype ElementRefs = {\n PickerMainRef: ElementRef;\n AnchoredEmojiRef: ElementRef;\n SkinTonePickerRef: ElementRef<HTMLDivElement>;\n SearchInputRef: ElementRef<HTMLInputElement>;\n BodyRef: ElementRef<HTMLDivElement>;\n CategoryNavigationRef: ElementRef<HTMLDivElement>;\n VariationPickerRef: ElementRef<HTMLDivElement>;\n};\n\nconst ElementRefContext = React.createContext<ElementRefs>({\n AnchoredEmojiRef: React.createRef(),\n BodyRef: React.createRef(),\n CategoryNavigationRef: React.createRef(),\n PickerMainRef: React.createRef(),\n SearchInputRef: React.createRef(),\n SkinTonePickerRef: React.createRef(),\n VariationPickerRef: React.createRef()\n});\n\nfunction useElementRef() {\n return React.useContext(ElementRefContext);\n}\n\nexport function usePickerMainRef() {\n return useElementRef()['PickerMainRef'];\n}\n\nexport function useAnchoredEmojiRef() {\n return useElementRef()['AnchoredEmojiRef'];\n}\n\nexport function useSetAnchoredEmojiRef(): (target: NullableElement) => void {\n const AnchoredEmojiRef = useAnchoredEmojiRef();\n return (target: NullableElement) => {\n AnchoredEmojiRef.current = target;\n };\n}\n\nexport function useBodyRef() {\n return useElementRef()['BodyRef'];\n}\n\nexport function useSearchInputRef() {\n return useElementRef()['SearchInputRef'];\n}\n\nexport function useSkinTonePickerRef() {\n return useElementRef()['SkinTonePickerRef'];\n}\n\nexport function useCategoryNavigationRef() {\n return useElementRef()['CategoryNavigationRef'];\n}\n\nexport function useVariationPickerRef() {\n return useElementRef()['VariationPickerRef'];\n}\n","export function isSystemDarkTheme(): boolean {\n if (typeof window === 'undefined') {\n return false;\n }\n\n return !!window.matchMedia('(prefers-color-scheme: dark)').matches;\n}\n","export type EmojiClickData = {\n activeSkinTone: SkinTones;\n unified: string;\n unifiedWithoutSkinTone: string;\n emoji: string;\n names: string[];\n getImageUrl: (emojiStyle: EmojiStyle) => 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 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<\n string,\n string\n> = skinToneVariations.reduce(\n (mapped, skinTone) =>\n Object.assign(mapped, {\n [skinTone]: skinTone\n }),\n {}\n);\n\nexport default skinToneVariations;\n","import { Categories } from '../config/categoryConfig';\nimport { cdnUrl } from '../config/cdnUrls';\nimport emojis from '../data/emojis';\nimport skinToneVariations, {\n skinTonesMapped,\n} from '../data/skinToneVariations';\nimport { EmojiStyle, SkinTones } from '../types/exposedTypes';\n\nimport { DataEmoji, DataEmojis } from './DataTypes';\n\nenum EmojiProperties {\n name = 'n',\n unified = 'u',\n variations = 'v',\n added_in = 'a',\n}\n\nexport function emojiNames(emoji: DataEmoji): 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: DataEmoji): string {\n return emojiNames(emoji)[0];\n}\n\nexport function unifiedWithoutSkinTone(unified: string): string {\n const splat = unified.split('-');\n const [skinTone] = splat.splice(1, 1);\n\n if (skinTonesMapped[skinTone]) {\n return splat.join('-');\n }\n\n return unified;\n}\n\nexport function emojiUnified(emoji: DataEmoji, skinTone?: string): string {\n const unified = emoji[EmojiProperties.unified];\n\n if (!skinTone || !emojiHasVariations(emoji)) {\n return unified;\n }\n\n return emojiVariationUnified(emoji, skinTone) ?? unified;\n}\n\nexport function emojisByCategory(category: Categories): DataEmojis {\n // @ts-ignore\n return emojis?.[category] ?? [];\n}\n\n// WARNING: DO NOT USE DIRECTLY\nexport function emojiUrlByUnified(\n unified: string,\n emojiStyle: EmojiStyle\n): string {\n return `${cdnUrl(emojiStyle)}${unified}.png`;\n}\n\nexport function emojiVariations(emoji: DataEmoji): string[] {\n return emoji[EmojiProperties.variations] ?? [];\n}\n\nexport function emojiHasVariations(emoji: DataEmoji): boolean {\n return emojiVariations(emoji).length > 0;\n}\n\nexport function emojiVariationUnified(\n emoji: DataEmoji,\n skinTone?: string\n): string | undefined {\n return skinTone\n ? emojiVariations(emoji).find((variation) => variation.includes(skinTone))\n : emojiUnified(emoji);\n}\n\nexport function emojiByUnified(unified?: string): DataEmoji | undefined {\n if (!unified) {\n return;\n }\n\n if (allEmojisByUnified[unified]) {\n return allEmojisByUnified[unified];\n }\n\n const withoutSkinTone = unifiedWithoutSkinTone(unified);\n return allEmojisByUnified[withoutSkinTone];\n}\n\nexport const allEmojis: DataEmojis = Object.values(emojis).flat();\n\nconst allEmojisByUnified: {\n [unified: string]: DataEmoji;\n} = {};\n\nsetTimeout(() => {\n allEmojis.reduce((allEmojis, Emoji) => {\n allEmojis[emojiUnified(Emoji)] = Emoji;\n return allEmojis;\n }, allEmojisByUnified);\n});\n\nexport function activeVariationFromUnified(unified: string): SkinTones | null {\n const [, suspectedSkinTone] = unified.split('-') as [string, SkinTones];\n return skinToneVariations.includes(suspectedSkinTone)\n ? suspectedSkinTone\n : null;\n}\n","import { Categories, SuggestionMode } from '../types/exposedTypes';\n\nexport { Categories };\n\nconst categoriesOrdered: Categories[] = [\n Categories.SUGGESTED,\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\nconst configByCategory: Record<Categories, CategoryConfig> = {\n [Categories.SUGGESTED]: {\n category: Categories.SUGGESTED,\n name: 'Frequently Used'\n },\n [Categories.SMILEYS_PEOPLE]: {\n category: Categories.SMILEYS_PEOPLE,\n name: 'Smileys & People'\n },\n [Categories.ANIMALS_NATURE]: {\n category: Categories.ANIMALS_NATURE,\n name: 'Animals & Nature'\n },\n [Categories.FOOD_DRINK]: {\n category: Categories.FOOD_DRINK,\n name: 'Food & Drink'\n },\n [Categories.TRAVEL_PLACES]: {\n category: Categories.TRAVEL_PLACES,\n name: 'Travel & Places'\n },\n [Categories.ACTIVITIES]: {\n category: Categories.ACTIVITIES,\n name: 'Activities'\n },\n [Categories.OBJECTS]: {\n category: Categories.OBJECTS,\n name: 'Objects'\n },\n [Categories.SYMBOLS]: {\n category: Categories.SYMBOLS,\n name: 'Symbols'\n },\n [Categories.FLAGS]: {\n category: Categories.FLAGS,\n name: 'Flags'\n }\n};\n\nexport function baseCategoriesConfig(\n modifiers?: Record<Categories, CategoryConfig>\n): CategoriesConfig {\n return categoriesOrdered.map(category => {\n return {\n ...configByCategory[category],\n ...(modifiers && modifiers[category] && modifiers[category])\n };\n });\n}\n\nexport function categoryFromCategoryConfig(category: CategoryConfig) {\n return category.category;\n}\n\nexport function categoryNameFromCategoryConfig(category: CategoryConfig) {\n return category.name;\n}\n\nexport type CategoriesConfig = CategoryConfig[];\n\nexport type CategoryConfig = {\n category: Categories;\n name: string;\n};\n\nexport type UserCategoryConfig = Array<Categories | CategoryConfig>;\n\nexport function mergeCategoriesConfig(\n userCategoriesConfig: UserCategoryConfig = [],\n modifiers: CategoryConfigModifiers = {}\n): CategoriesConfig {\n const extra = {} as Record<Categories, CategoryConfig>;\n\n if (modifiers.suggestionMode === SuggestionMode.RECENT) {\n extra[Categories.SUGGESTED] = SuggestedRecent;\n }\n\n const base = baseCategoriesConfig(extra);\n if (!userCategoriesConfig?.length) {\n return base;\n }\n\n return userCategoriesConfig.map(category => {\n if (typeof category === 'string') {\n return getBaseConfigByCategory(category, extra[category]);\n }\n\n return {\n ...getBaseConfigByCategory(category.category, extra[category.category]),\n ...category\n };\n });\n}\n\nfunction getBaseConfigByCategory(\n category: Categories,\n modifier: CategoryConfig = {} as CategoryConfig\n) {\n return Object.assign(configByCategory[category], modifier);\n}\n\ntype CategoryConfigModifiers = {\n suggestionMode?: SuggestionMode;\n};\n","import { GetEmojiUrl } from '../components/emoji/Emoji';\nimport { emojiUrlByUnified } from '../dataUtils/emojiSelectors';\nimport {\n EmojiClickData,\n EmojiStyle,\n SkinTonePickerLocation,\n SkinTones,\n SuggestionMode,\n Theme\n} from '../types/exposedTypes';\n\nimport {\n CategoriesConfig,\n baseCategoriesConfig,\n mergeCategoriesConfig\n} from './categoryConfig';\n\nexport function mergeConfig(\n userConfig: PickerConfig = {}\n): PickerConfigInternal {\n const base = basePickerConfig();\n\n const previewConfig = Object.assign(\n base.previewConfig,\n userConfig.previewConfig ?? {}\n );\n const config = Object.assign(base, userConfig);\n\n const categories = mergeCategoriesConfig(userConfig.categories, {\n suggestionMode: config.suggestedEmojisMode\n });\n\n 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 defaultSkinTone: SkinTones.NEUTRAL,\n emojiStyle: EmojiStyle.APPLE,\n emojiVersion: null,\n getEmojiUrl: emojiUrlByUnified,\n height: 450,\n lazyLoadEmojis: false,\n onEmojiClick: function defaultOnClickHandler(\n // @ts-ignore\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n emoji: EmojiClickData,\n // @ts-ignore\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n event: MouseEvent\n ) {},\n previewConfig: {\n ...basePreviewConfig\n },\n searchDisabled: false,\n searchPlaceHolder: 'Search',\n skinTonePickerLocation: SkinTonePickerLocation.SEARCH,\n skinTonesDisabled: false,\n suggestedEmojisMode: SuggestionMode.FREQUENT,\n theme: Theme.LIGHT,\n width: 350\n };\n}\n\nexport type PickerConfigInternal = {\n emojiVersion: string | null;\n searchPlaceHolder: string;\n defaultSkinTone: SkinTones;\n skinTonesDisabled: boolean;\n autoFocusSearch: boolean;\n emojiStyle: EmojiStyle;\n categories: CategoriesConfig;\n onEmojiClick: (emoji: EmojiClickData, event: MouseEvent) => void;\n theme: Theme;\n suggestedEmojisMode: SuggestionMode;\n lazyLoadEmojis: boolean;\n previewConfig: PreviewConfig;\n height: PickerDimensions;\n width: PickerDimensions;\n getEmojiUrl: GetEmojiUrl;\n searchDisabled: boolean;\n skinTonePickerLocation: SkinTonePickerLocation;\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} & Omit<PickerConfigInternal, 'previewConfig'>;\n\nexport type PickerConfig = Partial<ConfigExternal>;\n\nexport type PickerDimensions = string | number;\n","import * as React from 'react';\n\nimport {\n basePickerConfig,\n mergeConfig,\n PickerConfig,\n PickerConfigInternal\n} from '../../config/config';\n\ntype Props = PickerConfig &\n Readonly<{\n children: React.ReactNode;\n }>;\n\nconst ConfigContext = React.createContext<PickerConfigInternal>(\n basePickerConfig()\n);\n\nexport function PickerConfigProvider({ children, ...config }: Props) {\n return (\n <ConfigContext.Provider value={mergeConfig(config)}>\n {children}\n </ConfigContext.Provider>\n );\n}\n\nexport function usePickerConfig() {\n return React.useContext(ConfigContext);\n}\n","import { isSystemDarkTheme } from '../DomUtils/isDarkTheme';\nimport { usePickerConfig } from '../components/context/PickerConfigContext';\nimport {\n EmojiClickData,\n EmojiStyle,\n SkinTonePickerLocation,\n SkinTones,\n SuggestionMode,\n Theme\n} from '../types/exposedTypes';\n\nimport { CategoriesConfig } from './categoryConfig';\nimport { PickerDimensions, PreviewConfig } from './config';\n\nexport function useSearchPlaceHolderConfig(): string {\n const { searchPlaceHolder } = usePickerConfig();\n return searchPlaceHolder;\n}\n\nexport function useDefaultSkinToneConfig(): SkinTones {\n const { defaultSkinTone } = usePickerConfig();\n return defaultSkinTone;\n}\n\nexport function useSkinTonesDisabledConfig(): boolean {\n const { skinTonesDisabled } = usePickerConfig();\n return skinTonesDisabled;\n}\n\nexport function useEmojiStyleConfig(): EmojiStyle {\n const { emojiStyle } = usePickerConfig();\n return emojiStyle;\n}\n\nexport function useAutoFocusSearchConfig(): boolean {\n const { autoFocusSearch } = usePickerConfig();\n return autoFocusSearch;\n}\n\nexport function useCategoriesConfig(): CategoriesConfig {\n const { categories } = usePickerConfig();\n return categories;\n}\n\nexport function useOnEmojiClickConfig(): (\n emoji: EmojiClickData,\n event: MouseEvent\n) => void {\n const { onEmojiClick } = usePickerConfig();\n return onEmojiClick;\n}\n\nexport function usePreviewConfig(): PreviewConfig {\n const { previewConfig } = usePickerConfig();\n return previewConfig;\n}\n\nexport function useThemeConfig(): Theme {\n const { theme } = usePickerConfig();\n\n if (theme === Theme.AUTO) {\n return isSystemDarkTheme() ? Theme.DARK : Theme.LIGHT;\n }\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 usePickerSizeConfig(): {\n height: PickerDimensions;\n width: PickerDimensions;\n} {\n const { height, width } = usePickerConfig();\n return { height: getDimension(height), width: getDimension(width) };\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 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","import { DataEmoji } from './DataTypes';\nimport { allEmojis, emojiNames, emojiUnified } from './emojiSelectors';\n\nexport const alphaNumericEmojiIndex: BaseIndex = {};\n\nsetTimeout(() => {\n allEmojis.reduce((searchIndex, emoji) => {\n const joinedNameString = emojiNames(emoji)\n .flat()\n .join('')\n .replace(/[^a-zA-Z\\d]/g, '')\n .split('');\n\n joinedNameString.forEach(char => {\n searchIndex[char] = searchIndex[char] ?? {};\n\n searchIndex[char][emojiUnified(emoji)] = emoji;\n });\n return searchIndex;\n }, alphaNumericEmojiIndex as BaseIndex);\n});\n\ntype BaseIndex = Record<string, Record<string, DataEmoji>>;\n","import { useRef, useState } from 'react';\n\nexport function useDebouncedState<T>(\n initialValue: T,\n delay: number = 0\n): [T, (value: T) => Promise<T>] {\n const [state, setState] = useState<T>(initialValue);\n const timer = useRef<number | null>(null);\n\n function debouncedSetState(value: T) {\n return new Promise<T>(resolve => {\n if (timer.current) {\n clearTimeout(timer.current);\n }\n\n timer.current = window?.setTimeout(() => {\n setState(value);\n resolve(value);\n }, delay);\n });\n }\n\n return [state, debouncedSetState];\n}\n","import { useRef, useMemo } from 'react';\n\nimport { useEmojiVersionConfig } from '../config/useConfig';\nimport { DataEmoji } from '../dataUtils/DataTypes';\nimport {\n addedIn,\n allEmojis,\n emojiUnified,\n unifiedWithoutSkinTone\n} from '../dataUtils/emojiSelectors';\n\nexport function useDisallowedEmojis() {\n const DisallowedEmojisRef = useRef<Record<string, boolean>>({});\n const emojiVersionConfig = useEmojiVersionConfig();\n\n return useMemo(() => {\n const emojiVersion = parseFloat(`${emojiVersionConfig}`);\n\n if (!emojiVersionConfig || Number.isNaN(emojiVersion)) {\n return DisallowedEmojisRef.current;\n }\n\n return allEmojis.reduce((disallowedEmojis, emoji) => {\n if (addedInNewerVersion(emoji, emojiVersion)) {\n disallowedEmojis[emojiUnified(emoji)] = true;\n }\n\n return disallowedEmojis;\n }, DisallowedEmojisRef.current);\n }, [emojiVersionConfig]);\n}\n\nexport function useIsEmojiDisallowed() {\n const disallowedEmojis = useDisallowedEmojis();\n\n return function isEmojiDisallowed(emoji: DataEmoji) {\n const unified = unifiedWithoutSkinTone(emojiUnified(emoji));\n\n return Boolean(disallowedEmojis[unified]);\n };\n}\n\nfunction addedInNewerVersion(\n emoji: DataEmoji,\n supportedLevel: number\n): boolean {\n return addedIn(emoji) > supportedLevel;\n}\n","import { useEffect } from 'react';\nimport * as React from 'react';\n\nexport function useMarkInitialLoad(\n dispatch: React.Dispatch<React.SetStateAction<boolean>>\n) {\n useEffect(() => {\n dispatch(true);\n }, [dispatch]);\n}\n","import * as React from 'react';\nimport { useState } from 'react';\n\nimport { useDefaultSkinToneConfig } from '../../config/useConfig';\nimport { DataEmoji } from '../../dataUtils/DataTypes';\nimport { alphaNumericEmojiIndex } from '../../dataUtils/alphaNumericEmojiIndex';\nimport { useDebouncedState } from '../../hooks/useDebouncedState';\nimport { useDisallowedEmojis } from '../../hooks/useDisallowedEmojis';\nimport { FilterDict } from '../../hooks/useFilter';\nimport { useMarkInitialLoad } from '../../hooks/useInitialLoad';\nimport { SkinTones } from '../../types/exposedTypes';\n\nexport function PickerContextProvider({ children }: Props) {\n const disallowedEmojis = useDisallowedEmojis();\n const defaultSkinTone = useDefaultSkinToneConfig();\n\n // Initialize the filter with the inititial dictionary\n const filterRef = React.useRef<FilterState>(alphaNumericEmojiIndex);\n const disallowClickRef = React.useRef<boolean>(false);\n const disallowMouseRef = React.useRef<boolean>(false);\n const disallowedEmojisRef = React.useRef<Record<string, boolean>>(\n disallowedEmojis\n );\n\n const suggestedUpdateState = useDebouncedState(Date.now(), 200);\n const searchTerm = useDebouncedState('', 100);\n const skinToneFanOpenState = useState<boolean>(false);\n const activeSkinTone = useState<SkinTones>(defaultSkinTone);\n const activeCategoryState = useState<ActiveCategoryState>(null);\n const emojisThatFailedToLoadState = useState<Set<string>>(new Set());\n const emojiVariationPickerState = useState<DataEmoji | null>(null);\n const [isPastInitialLoad, setIsPastInitialLoad] = useState(false);\n\n useMarkInitialLoad(setIsPastInitialLoad);\n\n return (\n <PickerContext.Provider\n value={{\n activeCategoryState,\n activeSkinTone,\n disallowClickRef,\n disallowMouseRef,\n emojiVariationPickerState,\n emojisThatFailedToLoadState,\n filterRef,\n isPastInitialLoad,\n searchTerm,\n skinToneFanOpenState,\n suggestedUpdateState,\n disallowedEmojisRef,\n }}\n >\n {children}\n </PickerContext.Provider>\n );\n}\n\ntype ReactState<T> = [T, React.Dispatch<React.SetStateAction<T>>];\n\nconst PickerContext = React.createContext<{\n searchTerm: [string, (term: string) => Promise<string>];\n suggestedUpdateState: [number, (term: number) => void];\n activeCategoryState: ReactState<ActiveCategoryState>;\n activeSkinTone: ReactState<SkinTones>;\n emojisThatFailedToLoadState: ReactState<Set<string>>;\n isPastInitialLoad: boolean;\n emojiVariationPickerState: ReactState<DataEmoji | null>;\n skinToneFanOpenState: ReactState<boolean>;\n filterRef: React.MutableRefObject<FilterState>;\n disallowClickRef: React.MutableRefObject<boolean>;\n disallowMouseRef: React.MutableRefObject<boolean>;\n disallowedEmojisRef: React.MutableRefObject<Record<string, boolean>>;\n}>({\n activeCategoryState: [null, () => {}],\n activeSkinTone: [SkinTones.NEUTRAL, () => {}],\n disallowClickRef: { current: false },\n disallowMouseRef: { current: false },\n disallowedEmojisRef: { current: {} },\n emojiVariationPickerState: [null, () => {}],\n emojisThatFailedToLoadState: [new Set(), () => {}],\n filterRef: { current: {} },\n isPastInitialLoad: true,\n searchTerm: ['', () => new Promise<string>(() => undefined)],\n skinToneFanOpenState: [false, () => {}],\n suggestedUpdateState: [Date.now(), () => {}],\n});\n\ntype Props = Readonly<{\n children: React.ReactNode;\n}>;\n\nexport function useFilterRef() {\n const { filterRef } = React.useContext(PickerContext);\n return filterRef;\n}\n\nexport function useDisallowClickRef() {\n const { disallowClickRef } = React.useContext(PickerContext);\n return disallowClickRef;\n}\n\nexport function useDisallowMouseRef() {\n const { disallowMouseRef } = React.useContext(PickerContext);\n return disallowMouseRef;\n}\n\nexport function useSearchTermState() {\n const { searchTerm } = React.useContext(PickerContext);\n return searchTerm;\n}\n\nexport function useActiveSkinToneState(): [\n SkinTones,\n (skinTone: SkinTones) => void\n] {\n const { activeSkinTone } = React.useContext(PickerContext);\n return activeSkinTone;\n}\n\nexport function useEmojisThatFailedToLoadState() {\n const { emojisThatFailedToLoadState } = React.useContext(PickerContext);\n return emojisThatFailedToLoadState;\n}\n\nexport function useIsPastInitialLoad(): boolean {\n const { isPastInitialLoad } = React.useContext(PickerContext);\n return isPastInitialLoad;\n}\n\nexport function useEmojiVariationPickerState() {\n const { emojiVariationPickerState } = React.useContext(PickerContext);\n return emojiVariationPickerState;\n}\n\nexport function useSkinToneFanOpenState() {\n const { skinToneFanOpenState } = React.useContext(PickerContext);\n return skinToneFanOpenState;\n}\n\nexport function useDisallowedEmojisRef() {\n const { disallowedEmojisRef } = React.useContext(PickerContext);\n return disallowedEmojisRef;\n}\n\nexport function useUpdateSuggested(): [number, () => void] {\n const { suggestedUpdateState } = React.useContext(PickerContext);\n\n const [suggestedUpdated, setsuggestedUpdate] = suggestedUpdateState;\n return [\n suggestedUpdated,\n function updateSuggested() {\n setsuggestedUpdate(Date.now());\n },\n ];\n}\n\nexport type FilterState = Record<string, FilterDict>;\n\ntype ActiveCategoryState = null | string;\n","import { useEffect } from 'react';\n\nimport { useBodyRef } from '../components/context/ElementRefContext';\nimport { useDisallowMouseRef } from '../components/context/PickerContext';\n\nexport function useDisallowMouseMove() {\n const DisallowMouseRef = useDisallowMouseRef();\n return function disallowMouseMove() {\n DisallowMouseRef.current = true;\n };\n}\n\nexport function useAllowMouseMove() {\n const DisallowMouseRef = useDisallowMouseRef();\n return function allowMouseMove() {\n DisallowMouseRef.current = false;\n };\n}\n\nexport function useIsMouseDisallowed() {\n const DisallowMouseRef = useDisallowMouseRef();\n return function isMouseDisallowed() {\n return DisallowMouseRef.current;\n };\n}\n\nexport function useOnMouseMove() {\n const BodyRef = useBodyRef();\n const allowMouseMove = useAllowMouseMove();\n const isMouseDisallowed = useIsMouseDisallowed();\n\n useEffect(() => {\n const bodyRef = BodyRef.current;\n bodyRef?.addEventListener('mousemove', onMouseMove, {\n passive: true\n });\n\n function onMouseMove() {\n if (isMouseDisallowed()) {\n allowMouseMove();\n }\n }\n return () => {\n bodyRef?.removeEventListener('mousemove', onMouseMove);\n };\n }, [BodyRef, allowMouseMove, isMouseDisallowed]);\n}\n","import { NullableElement } from './selectors';\n\nexport function elementCountInRow(\n parent: NullableElement,\n element: NullableElement\n): number {\n if (!parent || !element) {\n return 0;\n }\n\n const parentWidth = parent.getBoundingClientRect().width;\n const elementWidth = element.getBoundingClientRect().width;\n return Math.floor(parentWidth / elementWidth);\n}\n\nexport function elementIndexInRow(\n parent: NullableElement,\n element: NullableElement\n): number {\n if (!parent || !element) {\n return 0;\n }\n\n const elementWidth = element.getBoundingClientRect().width;\n const elementLeft = element.getBoundingClientRect().left;\n const parentLeft = parent.getBoundingClientRect().left;\n\n return Math.floor((elementLeft - parentLeft) / elementWidth);\n}\n\nexport function rowNumber(\n parent: NullableElement,\n element: NullableElement\n): number {\n if (!parent || !element) {\n return 0;\n }\n\n const elementHeight = element.getBoundingClientRect().height;\n const elementTop = element.getBoundingClientRect().top;\n const parentTop = parent.getBoundingClientRect().top;\n return Math.round((elementTop - parentTop) / elementHeight);\n}\n\nexport function hasNextRow(\n parent: NullableElement,\n element: NullableElement\n): boolean {\n if (!parent || !element) {\n return false;\n }\n\n const elementHeight = element.getBoundingClientRect().height;\n const elementTop = element.getBoundingClientRect().top;\n const parentTop = parent.getBoundingClientRect().top;\n const parentHeight = parent.getBoundingClientRect().height;\n\n return Math.round(elementTop - parentTop + elementHeight) < parentHeight;\n}\n\nfunction getRowElements(\n elements: HTMLElement[],\n row: number,\n elementsInRow: number\n): HTMLElement[] {\n if (row === -1) {\n const lastRow = Math.floor((elements.length - 1) / elementsInRow);\n const firstElementIndex = lastRow * elementsInRow;\n const lastElementIndex = elements.length - 1;\n return elements.slice(firstElementIndex, lastElementIndex + 1);\n }\n\n return elements.slice(row * elementsInRow, (row + 1) * elementsInRow);\n}\n\nfunction getNextRowElements(\n allElements: HTMLElement[],\n currentRow: number,\n elementsInRow: number\n): HTMLElement[] {\n const nextRow = currentRow + 1;\n\n if (nextRow * elementsInRow > allElements.length) {\n return [];\n }\n\n return getRowElements(allElements, nextRow, elementsInRow);\n}\n\nexport function getElementInRow(\n elements: HTMLElement[],\n row: number,\n elementsInRow: number,\n indexInRow: number\n): NullableElement {\n const rowElements = getRowElements(elements, row, elementsInRow);\n // get element, default to last\n return rowElements[indexInRow] || rowElements[rowElements.length - 1] || null;\n}\n\nexport function getElementInNextRow(\n allElements: HTMLElement[],\n currentRow: number,\n elementsInRow: number,\n index: number\n): NullableElement {\n const nextRowElements = getNextRowElements(\n allElements,\n currentRow,\n elementsInRow\n );\n\n // return item in index, or last item in row\n return (\n nextRowElements[index] ||\n nextRowElements[nextRowElements.length - 1] ||\n null\n );\n}\n\nexport function getElementInPrevRow(\n allElements: HTMLElement[],\n currentRow: number,\n elementsInRow: number,\n index: number\n): NullableElement {\n const prevRowElements = getRowElements(\n allElements,\n currentRow - 1,\n elementsInRow\n );\n\n // default to last\n return (\n prevRowElements[index] ||\n prevRowElements[prevRowElements.length - 1] ||\n null\n );\n}\n\nexport function firstVisibleElementInContainer(\n parent: NullableElement,\n elements: HTMLElement[]\n): NullableElement {\n if (!parent || !elements.length) {\n return null;\n }\n\n const parentTop = parent.getBoundingClientRect().top;\n const parentBottom = parent.getBoundingClientRect().bottom;\n\n const visibleElements = elements.find(element => {\n const elementTop = element.getBoundingClientRect().top;\n const elementBottom = element.getBoundingClientRect().bottom;\n\n return (\n (elementTop >= parentTop && elementTop <= parentBottom) ||\n (elementBottom >= parentTop && elementBottom <= parentBottom)\n );\n });\n\n return visibleElements || null;\n}\n\nexport function hasNextElementSibling(element: HTMLElement) {\n return !!element.nextElementSibling;\n}\n","import { DataEmoji } from '../dataUtils/DataTypes';\nimport {\n emojiByUnified,\n unifiedWithoutSkinTone,\n} from '../dataUtils/emojiSelectors';\n\nimport { asSelectors, ClassNames } from './classNames';\nimport { firstVisibleElementInContainer } from './elementPositionInRow';\n\nexport type NullableElement = HTMLElement | null;\n\nexport const EmojiButtonSelector = `button${asSelectors(ClassNames.emoji)}`;\nexport const VisibleEmojiSelector = [\n EmojiButtonSelector,\n asSelectors(ClassNames.visible),\n `:not(${asSelectors(ClassNames.hidden)})`,\n].join('');\n\nexport function buttonFromTarget(\n emojiElement: NullableElement\n): HTMLButtonElement | null {\n return emojiElement?.closest(EmojiButtonSelector) ?? null;\n}\n\nexport function isEmojiButton(element: NullableElement): boolean {\n if (!element) {\n return false;\n }\n\n return element.matches(EmojiButtonSelector);\n}\n\nexport function emojiFromElement(\n element: NullableElement\n): [DataEmoji, string] | [] {\n const originalUnified = originalUnifiedFromEmojiElement(element);\n const unified = unifiedFromEmojiElement(element);\n\n if (!originalUnified) {\n return [];\n }\n\n const emoji = emojiByUnified(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 return root\n ? root.matches(asSelectors(ClassNames.scrollBody))\n ? root\n : root.querySelector(asSelectors(ClassNames.scrollBody))\n : null;\n}\n\nexport function emojiDistanceFromScrollTop(emoji: NullableElement): number {\n if (!emoji) {\n return 0;\n }\n\n return emojiTrueOffsetTop(emoji) - (closestScrollBody(emoji)?.scrollTop ?? 0);\n}\n\nexport function closestScrollBody(element: NullableElement): NullableElement {\n if (!element) {\n return null;\n }\n\n return element.closest(asSelectors(ClassNames.scrollBody)) ?? null;\n}\n\nexport function emojiTruOffsetLeft(element: NullableElement): number {\n const button = buttonFromTarget(element);\n const category = closestCategory(button);\n\n return elementOffsetLeft(button) + elementOffsetLeft(category);\n}\n\nfunction elementOffsetTop(element: NullableElement): number {\n return element?.offsetTop ?? 0;\n}\n\nfunction elementOffsetLeft(element: NullableElement): number {\n return element?.offsetLeft ?? 0;\n}\n\nexport function unifiedFromEmojiElement(emoji: NullableElement): string | null {\n return elementDataSetKey(buttonFromTarget(emoji), 'unified') ?? null;\n}\n\nexport function originalUnifiedFromEmojiElement(\n emoji: NullableElement\n): string | null {\n const unified = unifiedFromEmojiElement(emoji);\n\n if (unified) {\n return unifiedWithoutSkinTone(unified);\n }\n return null;\n}\n\nfunction elementDataSetKey(\n element: NullableElement,\n key: string\n): string | null {\n return elementDataSet(element)[key] ?? null;\n}\n\nfunction elementDataSet(element: NullableElement): DOMStringMap {\n return element?.dataset ?? {};\n}\n\nexport function isVisibleEmoji(element: HTMLElement) {\n return element.classList.contains(ClassNames.visible);\n}\n\nexport function isHidden(element: NullableElement) {\n if (!element) return true;\n\n return element.classList.contains(ClassNames.hidden);\n}\n\nexport function allVisibleEmojis(parent: NullableElement) {\n if (!parent) {\n return [];\n }\n\n return Array.from(\n parent.querySelectorAll(VisibleEmojiSelector)\n ) as HTMLElement[];\n}\n\nexport function lastVisibleEmoji(element: NullableElement): NullableElement {\n if (!element) return null;\n\n const allEmojis = allVisibleEmojis(element);\n const [last] = allEmojis.slice(-1);\n if (!last) {\n return null;\n }\n\n if (!isVisibleEmoji(last)) {\n return prevVisibleEmoji(last);\n }\n\n return last;\n}\n\nexport function nextVisibleEmoji(element: HTMLElement): NullableElement {\n const next = element.nextElementSibling as HTMLElement;\n\n if (!next) {\n return firstVisibleEmoji(nextCategory(element));\n }\n\n if (!isVisibleEmoji(next)) {\n return nextVisibleEmoji(next);\n }\n\n return next;\n}\n\nexport function prevVisibleEmoji(element: HTMLElement): NullableElement {\n const prev = element.previousElementSibling as HTMLElement;\n\n if (!prev) {\n return lastVisibleEmoji(prevCategory(element));\n }\n\n if (!isVisibleEmoji(prev)) {\n return prevVisibleEmoji(prev);\n }\n\n return prev;\n}\n\nexport function firstVisibleEmoji(parent: NullableElement) {\n if (!parent) {\n return null;\n }\n\n const allEmojis = allVisibleEmojis(parent);\n\n return firstVisibleElementInContainer(parent, allEmojis);\n}\n\nexport function prevCategory(element: NullableElement): NullableElement {\n const category = closestCategory(element);\n\n if (!category) {\n return null;\n }\n\n const prev = category.previousElementSibling as HTMLElement;\n\n if (!prev) {\n return null;\n }\n\n if (isHidden(prev)) {\n return prevCategory(prev);\n }\n\n return prev;\n}\n\nexport function nextCategory(element: NullableElement): NullableElement {\n const category = closestCategory(element);\n\n if (!category) {\n return null;\n }\n\n const next = category.nextElementSibling as HTMLElement;\n\n if (!next) {\n return null;\n }\n\n if (isHidden(next)) {\n return nextCategory(next);\n }\n\n return next;\n}\n\nexport function closestCategory(element: NullableElement) {\n if (!element) {\n return null;\n }\n return element.closest(asSelectors(ClassNames.category)) as HTMLElement;\n}\n\nexport function closestCategoryContent(element: NullableElement) {\n if (!element) {\n return null;\n }\n return element.closest(\n asSelectors(ClassNames.categoryContent)\n ) as HTMLElement;\n}\n","export function parseNativeEmoji(unified: string): string {\n return unified\n .split('-')\n .map(hex => String.fromCodePoint(parseInt(hex, 16)))\n .join('');\n}\n","import { SkinTones, SuggestionMode } from '../types/exposedTypes';\n\nimport { DataEmoji } from './DataTypes';\nimport { emojiUnified } from './emojiSelectors';\n\nconst SUGGESTED_LS_KEY = 'epr_suggested';\n\ntype SuggestedItem = {\n unified: string;\n original: string;\n count: number;\n};\n\ntype Suggested = SuggestedItem[];\n\nexport function getsuggested(mode?: SuggestionMode): Suggested {\n try {\n if (!window?.localStorage) {\n return [];\n }\n const recent = JSON.parse(\n window?.localStorage.getItem(SUGGESTED_LS_KEY) ?? '[]'\n ) as Suggested;\n\n if (mode === SuggestionMode.FREQUENT) {\n return recent.sort((a, b) => b.count - a.count);\n }\n\n return recent;\n } catch {\n return [];\n }\n}\n\nexport function setsuggested(emoji: DataEmoji, skinTone: SkinTones) {\n const recent = getsuggested();\n\n const unified = emojiUnified(emoji, skinTone);\n const originalUnified = emojiUnified(emoji);\n\n let existing = recent.find(({ unified: u }) => u === unified);\n\n let nextList: SuggestedItem[];\n\n if (existing) {\n nextList = [existing].concat(recent.filter(i => i !== existing));\n } else {\n existing = {\n unified,\n original: originalUnified,\n count: 0\n };\n nextList = [existing, ...recent];\n }\n\n existing.count++;\n\n nextList.length = Math.min(nextList.length, 14);\n\n try {\n window?.localStorage.setItem(SUGGESTED_LS_KEY, JSON.stringify(nextList));\n // Prevents the change from being seen immediately.\n } catch {\n // ignore\n }\n}\n","import { useCallback } from 'react';\n\nimport {\n useEmojiVariationPickerState,\n useSkinToneFanOpenState\n} from '../components/context/PickerContext';\n\nexport function useCloseAllOpenToggles() {\n const [variationPicker, setVariationPicker] = useEmojiVariationPickerState();\n const [skinToneFanOpen, setSkinToneFanOpen] = useSkinToneFanOpenState();\n\n const closeAllOpenToggles = useCallback(() => {\n if (variationPicker) {\n setVariationPicker(null);\n }\n\n if (skinToneFanOpen) {\n setSkinToneFanOpen(false);\n }\n }, [\n variationPicker,\n skinToneFanOpen,\n setVariationPicker,\n setSkinToneFanOpen\n ]);\n\n return closeAllOpenToggles;\n}\n\nexport function useHasOpenToggles() {\n const [variationPicker] = useEmojiVariationPickerState();\n const [skinToneFanOpen] = useSkinToneFanOpenState();\n\n return function hasOpenToggles() {\n return !!variationPicker || skinToneFanOpen;\n };\n}\n","import { emojiFromElement, NullableElement } from '../DomUtils/selectors';\nimport { useSetAnchoredEmojiRef } from '../components/context/ElementRefContext';\nimport { useEmojiVariationPickerState } from '../components/context/PickerContext';\n\nexport default function useSetVariationPicker() {\n const setAnchoredEmojiRef = useSetAnchoredEmojiRef();\n const [, setEmojiVariationPicker] = useEmojiVariationPickerState();\n\n return function setVariationPicker(element: NullableElement) {\n const [emoji] = emojiFromElement(element);\n\n if (!emoji) {\n return;\n }\n\n setAnchoredEmojiRef(element);\n setEmojiVariationPicker(emoji);\n };\n}\n","import * as React from 'react';\nimport { useEffect, useRef } from 'react';\n\nimport {\n emojiFromElement,\n isEmojiElement,\n NullableElement,\n} from '../DomUtils/selectors';\nimport {\n useActiveSkinToneState,\n useDisallowClickRef,\n useEmojiVariationPickerState,\n useUpdateSuggested,\n} from '../components/context/PickerContext';\nimport { GetEmojiUrl } from '../components/emoji/Emoji';\nimport {\n useGetEmojiUrlConfig,\n useOnEmojiClickConfig,\n} from '../config/useConfig';\nimport { DataEmoji } from '../dataUtils/DataTypes';\nimport {\n activeVariationFromUnified,\n emojiHasVariations,\n emojiNames,\n emojiUnified,\n} from '../dataUtils/emojiSelectors';\nimport { parseNativeEmoji } from '../dataUtils/parseNativeEmoji';\nimport { setsuggested } from '../dataUtils/suggested';\nimport { EmojiClickData, EmojiStyle, SkinTones } from '../types/exposedTypes';\n\nimport { useCloseAllOpenToggles } from './useCloseAllOpenToggles';\nimport useSetVariationPicker from './useSetVariationPicker';\n\nexport function useMouseDownHandlers(\n BodyRef: React.MutableRefObject<NullableElement>\n) {\n const mouseDownTimerRef = useRef<undefined | number>();\n const setVariationPicker = useSetVariationPicker();\n const disallowClickRef = useDisallowClickRef();\n const [, setEmojiVariationPicker] = useEmojiVariationPickerState();\n const closeAllOpenToggles = useCloseAllOpenToggles();\n const [activeSkinTone] = useActiveSkinToneState();\n const onEmojiClick = useOnEmojiClickConfig();\n const [, updateSuggested] = useUpdateSuggested();\n const getEmojiUrl = useGetEmojiUrlConfig();\n\n const onClick = React.useCallback(\n function onClick(event: MouseEvent) {\n if (disallowClickRef.current) {\n return;\n }\n\n closeAllOpenToggles();\n\n const [emoji, unified] = emojiFromEvent(event);\n\n if (!emoji || !unified) {\n return;\n }\n\n const skinToneToUse =\n activeVariationFromUnified(unified) || activeSkinTone;\n\n updateSuggested();\n setsuggested(emoji, skinToneToUse);\n onEmojiClick(emojiClickOutput(emoji, skinToneToUse, getEmojiUrl), event);\n },\n [\n activeSkinTone,\n closeAllOpenToggles,\n disallowClickRef,\n onEmojiClick,\n updateSuggested,\n getEmojiUrl,\n ]\n );\n\n const onMouseDown = React.useCallback(\n function onMouseDown(event: MouseEvent) {\n if (mouseDownTimerRef.current) {\n clearTimeout(mouseDownTimerRef.current);\n }\n\n const [emoji] = emojiFromEvent(event);\n\n if (!emoji || !emojiHasVariations(emoji)) {\n return;\n }\n\n mouseDownTimerRef.current = window?.setTimeout(() => {\n disallowClickRef.current = true;\n mouseDownTimerRef.current = undefined;\n closeAllOpenToggles();\n setVariationPicker(event.target as HTMLElement);\n setEmojiVariationPicker(emoji);\n }, 500);\n },\n [\n disallowClickRef,\n closeAllOpenToggles,\n setVariationPicker,\n setEmojiVariationPicker,\n ]\n );\n const onMouseUp = React.useCallback(\n function onMouseUp() {\n if (mouseDownTimerRef.current) {\n clearTimeout(mouseDownTimerRef.current);\n mouseDownTimerRef.current = undefined;\n } else if (disallowClickRef.current) {\n // The problem we're trying to overcome here\n // is that the emoji has both mouseup and click events\n // and when releasing a mouseup event\n // the click gets triggered too\n // So we're disallowing the click event for a short time\n\n requestAnimationFrame(() => {\n disallowClickRef.current = false;\n });\n }\n },\n [disallowClickRef]\n );\n\n useEffect(() => {\n if (!BodyRef.current) {\n return;\n }\n const bodyRef = BodyRef.current;\n bodyRef.addEventListener('click', onClick, {\n passive: true,\n });\n\n bodyRef.addEventListener('mousedown', onMouseDown, {\n passive: true,\n });\n bodyRef.addEventListener('mouseup', onMouseUp, {\n passive: true,\n });\n\n return () => {\n bodyRef?.removeEventListener('click', onClick);\n bodyRef?.removeEventListener('mousedown', onMouseDown);\n bodyRef?.removeEventListener('mouseup', onMouseUp);\n };\n }, [BodyRef, onClick, onMouseDown, onMouseUp]);\n}\n\nfunction emojiFromEvent(event: MouseEvent): [DataEmoji, string] | [] {\n const target = event?.target as HTMLElement;\n if (!isEmojiElement(target)) {\n return [];\n }\n\n return emojiFromElement(target);\n}\n\nfunction emojiClickOutput(\n emoji: DataEmoji,\n activeSkinTone: SkinTones,\n getEmojiUrl: GetEmojiUrl\n): EmojiClickData {\n const unified = emojiUnified(emoji, activeSkinTone);\n return {\n activeSkinTone,\n emoji: parseNativeEmoji(unified),\n getImageUrl(emojiStyle: EmojiStyle) {\n return getEmojiUrl(unified, emojiStyle);\n },\n names: emojiNames(emoji),\n unified,\n unifiedWithoutSkinTone: emojiUnified(emoji),\n };\n}\n","import { useEffect } from 'react';\n\nimport { ElementRef } from '../components/context/ElementRefContext';\n\nimport { useCloseAllOpenToggles } from './useCloseAllOpenToggles';\n\nexport function useOnScroll(BodyRef: ElementRef) {\n const closeAllOpenToggles = useCloseAllOpenToggles();\n\n useEffect(() => {\n const bodyRef = BodyRef.current;\n if (!bodyRef) {\n return;\n }\n\n bodyRef.addEventListener('scroll', onScroll, {\n passive: true\n });\n\n function onScroll() {\n closeAllOpenToggles();\n }\n\n return () => {\n bodyRef?.removeEventListener('scroll', onScroll);\n };\n }, [BodyRef, closeAllOpenToggles]);\n}\n","import { useCallback } from 'react';\n\nimport { useBodyRef } from '../components/context/ElementRefContext';\n\nimport { asSelectors, ClassNames } from './classNames';\nimport {\n categoryLabelHeight,\n closestCategory,\n closestScrollBody,\n emojiDistanceFromScrollTop,\n isEmojiBehindLabel,\n NullableElement,\n queryScrollBody\n} from './selectors';\n\nexport function scrollTo(root: NullableElement, top: number = 0) {\n const $eprBody = queryScrollBody(root);\n\n if (!$eprBody) {\n return;\n }\n\n requestAnimationFrame(() => {\n $eprBody.scrollTop = top + 1;\n });\n}\n\nexport function scrollBy(root: NullableElement, by: number): void {\n const $eprBody = queryScrollBody(root);\n\n if (!$eprBody) {\n return;\n }\n\n requestAnimationFrame(() => {\n $eprBody.scrollTop = $eprBody.scrollTop + by;\n });\n}\n\nexport function useScrollTo() {\n const BodyRef = useBodyRef();\n\n return useCallback(\n (top: number) => {\n requestAnimationFrame(() => {\n if (BodyRef.current) {\n BodyRef.current.scrollTop = top;\n }\n });\n },\n [BodyRef]\n );\n}\n\nexport function scrollEmojiAboveLabel(emoji: NullableElement) {\n if (!emoji || !isEmojiBehindLabel(emoji)) {\n return;\n }\n\n if (emoji.closest(asSelectors(ClassNames.variationPicker))) {\n return;\n }\n\n const scrollBody = closestScrollBody(emoji);\n const by = emojiDistanceFromScrollTop(emoji);\n scrollBy(scrollBody, -(categoryLabelHeight(closestCategory(emoji)) - by));\n}\n","import { NullableElement } from './selectors';\n\nexport function focusElement(element: NullableElement) {\n if (!element) {\n return;\n }\n\n requestAnimationFrame(() => {\n element.focus();\n });\n}\n\nexport function focusPrevElementSibling(element: NullableElement) {\n if (!element) return;\n\n const prev = element.previousElementSibling as HTMLElement;\n\n focusElement(prev);\n}\n\nexport function focusNextElementSibling(element: NullableElement) {\n if (!element) return;\n\n const next = element.nextElementSibling as HTMLElement;\n\n focusElement(next);\n}\n\nexport function focusFirstElementChild(element: NullableElement) {\n if (!element) return;\n\n const first = element.firstElementChild as HTMLElement;\n\n focusElement(first);\n}\n","import { 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 { DataEmoji } from '../dataUtils/DataTypes';\nimport { emojiNames } from '../dataUtils/emojiSelectors';\n\nimport { useFocusSearchInput } from './useFocus';\n\nfunction useSetFilterRef() {\n const filterRef = useFilterRef();\n\n return function setFilter(\n setter: FilterState | ((current: FilterState) => FilterState)\n ): void {\n if (typeof setter === 'function') {\n return setFilter(setter(filterRef.current));\n }\n\n filterRef.current = setter;\n };\n}\n\nexport function useClearSearch() {\n const applySearch = useApplySearch();\n const SearchInputRef = useSearchInputRef();\n const focusSearchInput = useFocusSearchInput();\n\n return function clearSearch() {\n if (SearchInputRef.current) {\n SearchInputRef.current.value = '';\n }\n\n applySearch('');\n focusSearchInput();\n };\n}\n\nexport function useAppendSearch() {\n const SearchInputRef = useSearchInputRef();\n const applySearch = useApplySearch();\n\n return function appendSearch(str: string) {\n if (SearchInputRef.current) {\n SearchInputRef.current.value = `${SearchInputRef.current.value}${str}`;\n applySearch(getNormalizedSearchTerm(SearchInputRef.current.value));\n } else {\n applySearch(getNormalizedSearchTerm(str));\n }\n };\n}\n\nexport function useFilter() {\n const SearchInputRef = useSearchInputRef();\n const filterRef = useFilterRef();\n const setFilterRef = useSetFilterRef();\n const applySearch = useApplySearch();\n\n const [searchTerm] = useSearchTermState();\n\n return {\n onChange,\n searchTerm,\n SearchInputRef,\n };\n\n function onChange(inputValue: string) {\n const filter = filterRef.current;\n\n const nextValue = inputValue.toLowerCase();\n\n if (filter?.[nextValue] || nextValue.length <= 1) {\n return applySearch(nextValue);\n }\n\n const longestMatch = findLongestMatch(nextValue, filter);\n\n if (!longestMatch) {\n // Can we even get here?\n // If so, we need to search among all emojis\n return applySearch(nextValue);\n }\n\n setFilterRef((current) =>\n Object.assign(current, {\n [nextValue]: filterEmojiObjectByKeyword(longestMatch, nextValue),\n })\n );\n applySearch(nextValue);\n }\n}\n\nfunction useApplySearch() {\n const [, setSearchTerm] = useSearchTermState();\n const PickerMainRef = usePickerMainRef();\n\n return function applySearch(searchTerm: string) {\n requestAnimationFrame(() => {\n setSearchTerm(searchTerm ? searchTerm?.toLowerCase() : searchTerm).then(\n () => {\n scrollTo(PickerMainRef.current, 0);\n }\n );\n });\n };\n}\n\nfunction filterEmojiObjectByKeyword(\n emojis: FilterDict,\n keyword: string\n): FilterDict {\n const filtered: FilterDict = {};\n\n for (const unified in emojis) {\n const emoji = emojis[unified];\n\n if (hasMatch(emoji, keyword)) {\n filtered[unified] = emoji;\n }\n }\n\n return filtered;\n}\n\nfunction hasMatch(emoji: DataEmoji, keyword: string): boolean {\n return emojiNames(emoji).some((name) => name.includes(keyword));\n}\n\nexport function useIsEmojiFiltered(): (unified: string) => boolean {\n const { current: filter } = useFilterRef();\n const [searchTerm] = useSearchTermState();\n\n return (unified) => isEmojiFilteredBySearchTerm(unified, filter, searchTerm);\n}\n\nfunction isEmojiFilteredBySearchTerm(\n unified: string,\n filter: FilterState,\n searchTerm: string\n): boolean {\n if (!filter || !searchTerm) {\n return false;\n }\n\n return !filter[searchTerm]?.[unified];\n}\n\nexport type FilterDict = Record<string, DataEmoji>;\n\nfunction findLongestMatch(\n keyword: string,\n dict: Record<string, FilterDict> | null\n): FilterDict | null {\n if (!dict) {\n return null;\n }\n\n if (dict[keyword]) {\n return dict[keyword];\n }\n\n const longestMatchingKey = Object.keys(dict)\n .sort((a, b) => b.length - a.length)\n .find((key) => keyword.includes(key));\n\n if (longestMatchingKey) {\n return dict[longestMatchingKey];\n }\n\n return null;\n}\n\nexport function getNormalizedSearchTerm(str: string): string {\n if (!str || typeof str !== 'string') {\n return '';\n }\n\n return str.trim().toLowerCase();\n}\n","import { useEmojisThatFailedToLoadState } from '../components/context/PickerContext';\nimport { DataEmoji } from '../dataUtils/DataTypes';\nimport { emojiUnified } from '../dataUtils/emojiSelectors';\n\nimport { useIsEmojiFiltered } from './useFilter';\n\nexport function useIsEmojiHidden(): (emoji: DataEmoji) => IsHiddenReturn {\n const [emojisThatFailedToLoad] = useEmojisThatFailedToLoadState();\n const isEmojiFiltered = useIsEmojiFiltered();\n\n return (emoji: DataEmoji): IsHiddenReturn => {\n const unified = emojiUnified(emoji);\n\n const failedToLoad = emojisThatFailedToLoad.has(unified);\n const filteredOut = isEmojiFiltered(unified);\n\n return {\n failedToLoad,\n filteredOut,\n hidden: failedToLoad || filteredOut\n };\n };\n}\n\ntype IsHiddenReturn = {\n failedToLoad: boolean;\n filteredOut: boolean;\n hidden: boolean;\n};\n","import { DataEmoji } from './DataTypes';\n\nexport function asEmoji(emoji: DataEmoji | undefined | null): DataEmoji {\n return emoji as DataEmoji;\n}\n","import clsx from 'clsx';\nimport * as React from 'react';\n\ninterface Props\n extends React.DetailedHTMLProps<\n React.ButtonHTMLAttributes<HTMLButtonElement>,\n HTMLButtonElement\n > {\n className?: string;\n}\n\nexport function Button(props: Props) {\n return (\n <button\n type=\"button\"\n {...props}\n className={clsx('epr-btn', props.className)}\n >\n {props.children}\n </button>\n );\n}\n","import clsx from 'clsx';\nimport * as React from 'react';\n\nimport { ClassNames } from '../../DomUtils/classNames';\nimport { DataEmoji } from '../../dataUtils/DataTypes';\nimport { asEmoji } from '../../dataUtils/asEmoji';\nimport {\n emojiByUnified,\n emojiHasVariations,\n emojiName,\n emojiNames,\n emojiUrlByUnified,\n} from '../../dataUtils/emojiSelectors';\nimport { parseNativeEmoji } from '../../dataUtils/parseNativeEmoji';\nimport { EmojiStyle } from '../../types/exposedTypes';\nimport { Button } from '../atoms/Button';\nimport { useEmojisThatFailedToLoadState } from '../context/PickerContext';\nimport './Emoji.css';\n\ntype ClickableEmojiProps = Readonly<\n BaseProps & {\n hidden?: boolean;\n showVariations?: boolean;\n hiddenOnSearch?: boolean;\n emoji: DataEmoji;\n }\n>;\n\ntype BaseProps = {\n emoji?: DataEmoji;\n emojiStyle: EmojiStyle;\n unified: string;\n size?: number;\n lazyLoad?: boolean;\n getEmojiUrl?: GetEmojiUrl;\n};\n\nexport function ClickableEmoji({\n emoji,\n unified,\n hidden,\n hiddenOnSearch,\n emojiStyle,\n showVariations = true,\n size,\n lazyLoad,\n getEmojiUrl,\n}: ClickableEmojiProps) {\n const hasVariations = emojiHasVariations(emoji);\n\n return (\n <Button\n className={clsx(ClassNames.emoji, {\n [ClassNames.hidden]: hidden,\n [ClassNames.hiddenOnSearch]: hiddenOnSearch,\n [ClassNames.visible]: !hidden && !hiddenOnSearch,\n [ClassNames.emojiHasVariatios]: hasVariations && showVariations,\n })}\n data-unified={unified}\n // @ts-ignore - let's ignore the fact this is not a real react ref, ok?\n aria-label={emojiName(emoji)}\n data-full-name={emojiNames(emoji)}\n >\n <ViewOnlyEmoji\n unified={unified}\n emoji={emoji}\n size={size}\n emojiStyle={emojiStyle}\n lazyLoad={lazyLoad}\n getEmojiUrl={getEmojiUrl}\n />\n </Button>\n );\n}\n\nexport function ViewOnlyEmoji({\n emoji,\n unified,\n emojiStyle,\n size,\n lazyLoad,\n getEmojiUrl = emojiUrlByUnified,\n}: BaseProps) {\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 return (\n <>\n {emojiStyle === EmojiStyle.NATIVE ? (\n <NativeEmoji unified={unified} style={style} />\n ) : (\n <EmojiImg\n unified={unified}\n style={style}\n emoji={asEmoji(emojiToRender)}\n emojiStyle={emojiStyle}\n lazyLoad={lazyLoad}\n getEmojiUrl={getEmojiUrl}\n />\n )}\n </>\n );\n}\n\nfunction NativeEmoji({\n unified,\n style,\n}: {\n unified: string;\n style: React.CSSProperties;\n}) {\n return (\n <span\n className={clsx(ClassNames.external, 'epr-emoji-native')}\n data-unified={unified}\n style={style}\n >\n {parseNativeEmoji(unified)}\n </span>\n );\n}\n\nfunction EmojiImg({\n emoji,\n unified,\n emojiStyle,\n style,\n lazyLoad = false,\n getEmojiUrl,\n}: {\n emoji: DataEmoji;\n unified: string;\n emojiStyle: EmojiStyle;\n style: React.CSSProperties;\n lazyLoad?: boolean;\n getEmojiUrl: GetEmojiUrl;\n}) {\n const [, setEmojisThatFailedToLoad] = useEmojisThatFailedToLoadState();\n\n return (\n <img\n src={getEmojiUrl(unified, emojiStyle)}\n alt={emojiName(emoji)}\n className={clsx(ClassNames.external, 'epr-emoji-img')}\n loading={lazyLoad ? 'lazy' : 'eager'}\n onError={onError}\n style={style}\n />\n );\n\n function onError() {\n setEmojisThatFailedToLoad((prev) => new Set(prev).add(unified));\n }\n}\n\nexport type GetEmojiUrl = (unified: string, style: EmojiStyle) => string;\n","import clsx from 'clsx';\nimport * as React from 'react';\n\nimport { ClassNames } from '../../DomUtils/classNames';\nimport {\n CategoryConfig,\n categoryFromCategoryConfig,\n categoryNameFromCategoryConfig\n} from '../../config/categoryConfig';\nimport './EmojiCategory.css';\n\ntype Props = Readonly<{\n categoryConfig: CategoryConfig;\n children?: React.ReactNode;\n hidden?: boolean;\n hiddenOnSearch?: boolean;\n}>;\n\nexport function EmojiCategory({\n categoryConfig,\n children,\n hidden,\n hiddenOnSearch\n}: Props) {\n const category = categoryFromCategoryConfig(categoryConfig);\n const categoryName = categoryNameFromCategoryConfig(categoryConfig);\n\n return (\n <li\n className={clsx(ClassNames.category, {\n [ClassNames.hidden]: hidden,\n [ClassNames.hiddenOnSearch]: hiddenOnSearch\n })}\n data-name={category}\n aria-label={categoryName}\n >\n <div className={ClassNames.label}>{categoryName}</div>\n <div className={ClassNames.categoryContent}>{children}</div>\n </li>\n );\n}\n","import * as React from 'react';\n\nimport { CategoryConfig } from '../../config/categoryConfig';\nimport {\n useEmojiStyleConfig,\n useGetEmojiUrlConfig,\n useSuggestedEmojisModeConfig,\n} from '../../config/useConfig';\nimport { emojiByUnified } from '../../dataUtils/emojiSelectors';\nimport { getsuggested } from '../../dataUtils/suggested';\nimport { useUpdateSuggested } from '../context/PickerContext';\nimport { ClickableEmoji } from '../emoji/Emoji';\n\nimport { EmojiCategory } from './EmojiCategory';\n\ntype Props = Readonly<{\n categoryConfig: CategoryConfig;\n}>;\n\nexport function Suggested({ categoryConfig }: Props) {\n const [suggestedUpdated] = useUpdateSuggested();\n const suggestedEmojisModeConfig = useSuggestedEmojisModeConfig();\n const getEmojiUrl = useGetEmojiUrlConfig();\n const suggested = React.useMemo(\n () => getsuggested(suggestedEmojisModeConfig) ?? [],\n // eslint-disable-next-line react-hooks/exhaustive-deps\n [suggestedUpdated, suggestedEmojisModeConfig]\n );\n const emojiStyle = useEmojiStyleConfig();\n\n return (\n <EmojiCategory\n categoryConfig={categoryConfig}\n hiddenOnSearch\n hidden={suggested.length === 0}\n >\n {suggested.map((suggestedItem) => {\n const emoji = emojiByUnified(suggestedItem.original);\n\n if (!emoji) {\n return null;\n }\n\n return (\n <ClickableEmoji\n showVariations={false}\n unified={suggestedItem.unified}\n emojiStyle={emojiStyle}\n emoji={emoji}\n key={suggestedItem.unified}\n getEmojiUrl={getEmojiUrl}\n />\n );\n })}\n </EmojiCategory>\n );\n}\n","import * as React from 'react';\n\nimport { ClassNames } from '../../DomUtils/classNames';\nimport {\n Categories,\n CategoryConfig,\n categoryFromCategoryConfig\n} from '../../config/categoryConfig';\nimport {\n useCategoriesConfig,\n useEmojiStyleConfig,\n useGetEmojiUrlConfig,\n useLazyLoadEmojisConfig\n} from '../../config/useConfig';\nimport { emojisByCategory, emojiUnified } from '../../dataUtils/emojiSelectors';\nimport { useIsEmojiDisallowed } from '../../hooks/useDisallowedEmojis';\nimport { useIsEmojiHidden } from '../../hooks/useIsEmojiHidden';\nimport {\n useActiveSkinToneState,\n useIsPastInitialLoad\n} from '../context/PickerContext';\nimport { ClickableEmoji } from '../emoji/Emoji';\n\nimport { EmojiCategory } from './EmojiCategory';\nimport { Suggested } from './Suggested';\n\nimport './EmojiList.css';\n\nexport function EmojiList() {\n const categories = useCategoriesConfig();\n\n return (\n <ul className={ClassNames.emojiList}>\n {categories.map((categoryConfig, index) => {\n const category = categoryFromCategoryConfig(categoryConfig);\n\n if (category === Categories.SUGGESTED) {\n return <Suggested key={category} categoryConfig={categoryConfig} />;\n }\n\n return (\n <RenderCategory\n key={category}\n index={index}\n category={category}\n categoryConfig={categoryConfig}\n />\n );\n })}\n </ul>\n );\n}\n\nfunction RenderCategory({\n index,\n category,\n categoryConfig\n}: {\n index: number;\n category: Categories;\n categoryConfig: CategoryConfig;\n}) {\n const isEmojiHidden = useIsEmojiHidden();\n const lazyLoadEmojis = useLazyLoadEmojisConfig();\n const emojiStyle = useEmojiStyleConfig();\n const isPastInitialLoad = useIsPastInitialLoad();\n const [activeSkinTone] = useActiveSkinToneState();\n const isEmojiDisallowed = useIsEmojiDisallowed();\n const getEmojiUrl = useGetEmojiUrlConfig();\n\n // Small trick to defer the rendering of all emoji categories until the first category is visible\n // This way the user gets to actually see something and not wait for the whole picker to render.\n const emojisToPush =\n !isPastInitialLoad && index > 1 ? [] : emojisByCategory(category);\n\n let hiddenCounter = 0;\n\n const emojis = emojisToPush.map(emoji => {\n const unified = emojiUnified(emoji, activeSkinTone);\n const { failedToLoad, filteredOut, hidden } = isEmojiHidden(emoji);\n\n const isDisallowed = isEmojiDisallowed(emoji);\n\n if (hidden || isDisallowed) {\n hiddenCounter++;\n }\n\n if (isDisallowed) {\n return null;\n }\n\n return (\n <ClickableEmoji\n key={unified}\n emoji={emoji}\n unified={unified}\n hidden={failedToLoad}\n hiddenOnSearch={filteredOut}\n emojiStyle={emojiStyle}\n lazyLoad={lazyLoadEmojis}\n getEmojiUrl={getEmojiUrl}\n />\n );\n });\n\n return (\n <EmojiCategory\n categoryConfig={categoryConfig}\n // Indicates that there are no visible emojis\n // Hence, the category should be hidden\n hidden={hiddenCounter === emojis.length}\n >\n {emojis}\n </EmojiCategory>\n );\n}\n","import {\n elementCountInRow,\n elementIndexInRow,\n getElementInNextRow,\n getElementInPrevRow,\n getElementInRow,\n hasNextRow,\n rowNumber\n} from './elementPositionInRow';\nimport { focusElement } from './focusElement';\nimport { scrollEmojiAboveLabel } from './scrollTo';\nimport {\n allVisibleEmojis,\n closestCategory,\n firstVisibleEmoji,\n lastVisibleEmoji,\n nextCategory,\n nextVisibleEmoji,\n NullableElement,\n prevCategory,\n prevVisibleEmoji,\n closestCategoryContent\n} from './selectors';\n\nexport function focusFirstVisibleEmoji(parent: NullableElement) {\n const emoji = firstVisibleEmoji(parent);\n focusElement(emoji);\n scrollEmojiAboveLabel(emoji);\n}\n\nexport function focusAndClickFirstVisibleEmoji(parent: NullableElement) {\n const firstEmoji = firstVisibleEmoji(parent);\n\n focusElement(firstEmoji);\n firstEmoji?.click();\n}\n\nexport function focusLastVisibleEmoji(parent: NullableElement) {\n focusElement(lastVisibleEmoji(parent));\n}\n\nexport function focusNextVisibleEmoji(element: NullableElement) {\n if (!element) {\n return;\n }\n\n const next = nextVisibleEmoji(element);\n\n if (!next) {\n return focusFirstVisibleEmoji(nextCategory(element));\n }\n\n focusElement(next);\n scrollEmojiAboveLabel(next);\n}\n\nexport function focusPrevVisibleEmoji(element: NullableElement) {\n if (!element) {\n return;\n }\n\n const prev = prevVisibleEmoji(element);\n\n if (!prev) {\n return focusLastVisibleEmoji(prevCategory(element));\n }\n\n focusElement(prev);\n scrollEmojiAboveLabel(prev);\n}\n\nexport function focusVisibleEmojiOneRowUp(\n element: NullableElement,\n exitUp: () => void\n) {\n if (!element) {\n return;\n }\n\n const prev = visibleEmojiOneRowUp(element);\n\n if (!prev) {\n return exitUp();\n }\n\n focusElement(prev);\n scrollEmojiAboveLabel(prev);\n}\n\nexport function focusVisibleEmojiOneRowDown(element: NullableElement) {\n if (!element) {\n return;\n }\n\n const next = visibleEmojiOneRowDown(element);\n\n return focusElement(next);\n}\n\nfunction visibleEmojiOneRowUp(element: HTMLElement) {\n if (!element) {\n return null;\n }\n\n const categoryContent = closestCategoryContent(element);\n const category = closestCategory(categoryContent);\n const indexInRow = elementIndexInRow(categoryContent, element);\n const row = rowNumber(categoryContent, element);\n const countInRow = elementCountInRow(categoryContent, element);\n\n if (row === 0) {\n const prevVisibleCategory = prevCategory(category);\n\n if (!prevVisibleCategory) {\n return null;\n }\n\n return getElementInRow(\n allVisibleEmojis(prevVisibleCategory),\n -1, // last row\n countInRow,\n indexInRow\n );\n }\n\n return getElementInPrevRow(\n allVisibleEmojis(categoryContent),\n row,\n countInRow,\n indexInRow\n );\n}\n\nfunction visibleEmojiOneRowDown(element: HTMLElement) {\n if (!element) {\n return null;\n }\n\n const categoryContent = closestCategoryContent(element);\n const category = closestCategory(categoryContent);\n const indexInRow = elementIndexInRow(categoryContent, element);\n const row = rowNumber(categoryContent, element);\n const countInRow = elementCountInRow(categoryContent, element);\n if (!hasNextRow(categoryContent, element)) {\n const nextVisibleCategory = nextCategory(category);\n\n if (!nextVisibleCategory) {\n return null;\n }\n\n return getElementInRow(\n allVisibleEmojis(nextVisibleCategory),\n 0,\n countInRow,\n indexInRow\n );\n }\n\n const itemInNextRow = getElementInNextRow(\n allVisibleEmojis(categoryContent),\n row,\n countInRow,\n indexInRow\n );\n\n return itemInNextRow;\n}\n","import clsx from 'clsx';\nimport * as React from 'react';\nimport { useEffect } from 'react';\n\nimport { ClassNames } from '../../DomUtils/classNames';\nimport { focusElement } from '../../DomUtils/focusElement';\nimport { focusFirstVisibleEmoji } from '../../DomUtils/keyboardNavigation';\nimport {\n buttonFromTarget,\n elementHeight,\n emojiTrueOffsetTop,\n emojiTruOffsetLeft\n} from '../../DomUtils/selectors';\nimport {\n useEmojiStyleConfig,\n useGetEmojiUrlConfig\n} from '../../config/useConfig';\nimport { asEmoji } from '../../dataUtils/asEmoji';\nimport {\n emojiHasVariations,\n emojiUnified,\n emojiVariations\n} from '../../dataUtils/emojiSelectors';\nimport {\n useAnchoredEmojiRef,\n useBodyRef,\n useSetAnchoredEmojiRef,\n useVariationPickerRef\n} from '../context/ElementRefContext';\nimport { useEmojiVariationPickerState } from '../context/PickerContext';\nimport { ClickableEmoji } from '../emoji/Emoji';\nimport './EmojiVariationPicker.css';\n\nenum Direction {\n Up,\n Down\n}\n\nexport function EmojiVariationPicker() {\n const AnchoredEmojiRef = useAnchoredEmojiRef();\n const VariationPickerRef = useVariationPickerRef();\n const [emoji] = useEmojiVariationPickerState();\n const emojiStyle = useEmojiStyleConfig();\n\n const { getTop, getMenuDirection } = useVariationPickerTop(\n VariationPickerRef\n );\n const setAnchoredEmojiRef = useSetAnchoredEmojiRef();\n const getPointerStyle = usePointerStyle(VariationPickerRef);\n const getEmojiUrl = useGetEmojiUrlConfig();\n\n const button = buttonFromTarget(AnchoredEmojiRef.current);\n\n const visible =\n emoji &&\n button &&\n emojiHasVariations(emoji) &&\n button.classList.contains(ClassNames.emojiHasVariatios);\n\n useEffect(() => {\n if (!visible) {\n focusElement(AnchoredEmojiRef.current);\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 const safeEmoji = asEmoji(emoji);\n\n return (\n <div\n ref={VariationPickerRef}\n className={clsx(ClassNames.variationPicker, {\n visible,\n 'pointing-up': getMenuDirection() === Direction.Down\n })}\n style={{ top }}\n >\n {visible\n ? [emojiUnified(safeEmoji)]\n .concat(emojiVariations(safeEmoji))\n .slice(0, 6)\n .map(unified => (\n <ClickableEmoji\n key={unified}\n emoji={safeEmoji}\n unified={unified}\n emojiStyle={emojiStyle}\n showVariations={false}\n getEmojiUrl={getEmojiUrl}\n />\n ))\n : null}\n <div className=\"epr-emoji-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","import * as React from 'react';\n\nimport { ClassNames } from '../../DomUtils/classNames';\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\nimport './Body.css';\n\nexport function Body() {\n const BodyRef = useBodyRef();\n useOnScroll(BodyRef);\n useMouseDownHandlers(BodyRef);\n useOnMouseMove();\n\n return (\n <div className={ClassNames.scrollBody} ref={BodyRef}>\n <EmojiVariationPicker />\n <EmojiList />\n </div>\n );\n}\n","import * as React from 'react';\nimport { useEffect } from 'react';\n\nimport { focusElement } from '../DomUtils/focusElement';\nimport {\n buttonFromTarget,\n originalUnifiedFromEmojiElement,\n unifiedFromEmojiElement\n} from '../DomUtils/selectors';\nimport { useBodyRef } from '../components/context/ElementRefContext';\nimport { PreviewEmoji } from '../components/footer/Preview';\n\nimport {\n useAllowMouseMove,\n useIsMouseDisallowed\n} from './useDisallowMouseMove';\n\nexport function useEmojiPreviewEvents(\n allow: boolean,\n setPreviewEmoji: React.Dispatch<React.SetStateAction<PreviewEmoji>>\n) {\n const BodyRef = useBodyRef();\n const isMouseDisallowed = useIsMouseDisallowed();\n const allowMouseMove = useAllowMouseMove();\n\n useEffect(() => {\n if (!allow) {\n return;\n }\n const bodyRef = BodyRef.current;\n\n bodyRef?.addEventListener('keydown', onEscape, {\n passive: true\n });\n\n bodyRef?.addEventListener('mouseover', onMouseOver, true);\n\n bodyRef?.addEventListener('focus', onEnter, true);\n\n bodyRef?.addEventListener('mouseout', onLeave, {\n passive: true\n });\n bodyRef?.addEventListener('blur', onLeave, true);\n\n\n function onEnter(e: FocusEvent) {\n const button = buttonFromTarget(e.target as HTMLElement);\n\n if (!button) {\n return onLeave();\n }\n\n const unified = unifiedFromEmojiElement(button);\n const originalUnified = originalUnifiedFromEmojiElement(button);\n\n if (!unified || !originalUnified) {\n return onLeave();\n }\n\n setPreviewEmoji({\n unified,\n originalUnified\n });\n }\n function onLeave(e?: FocusEvent | MouseEvent) {\n if (e) {\n const relatedTarget = e.relatedTarget as HTMLElement;\n\n if (!buttonFromTarget(relatedTarget)) {\n return setPreviewEmoji(null);\n }\n }\n\n setPreviewEmoji(null);\n }\n function onEscape(e: KeyboardEvent) {\n if (e.key === 'Escape') {\n setPreviewEmoji(null);\n }\n }\n\n function onMouseOver(e: MouseEvent) {\n if (isMouseDisallowed()) {\n return;\n }\n\n const button = buttonFromTarget(e.target as HTMLElement);\n\n if (button) {\n focusElement(button);\n }\n }\n\n\n return () => {\n bodyRef?.removeEventListener('mouseover', onMouseOver);\n bodyRef?.removeEventListener('mouseout', onLeave);\n bodyRef?.removeEventListener('focus', onEnter, true);\n bodyRef?.removeEventListener('blur', onLeave, true);\n bodyRef?.removeEventListener('keydown', onEscape);\n };\n }, [BodyRef, allow, setPreviewEmoji, isMouseDisallowed, allowMouseMove]);\n}\n","import { useSkinTonePickerLocationConfig } from '../config/useConfig';\nimport { SkinTonePickerLocation } from '../types/exposedTypes';\n\nexport function useShouldShowSkinTonePicker() {\n const skinTonePickerLocationConfig = useSkinTonePickerLocationConfig();\n\n return function shouldShowSkinTonePicker(location: SkinTonePickerLocation) {\n return skinTonePickerLocationConfig === location;\n };\n}\n\nexport function useIsSkinToneInSearch() {\n const skinTonePickerLocationConfig = useSkinTonePickerLocationConfig();\n\n return skinTonePickerLocationConfig === SkinTonePickerLocation.SEARCH;\n}\n\nexport function useIsSkinToneInPreview() {\n const skinTonePickerLocationConfig = useSkinTonePickerLocationConfig();\n\n return skinTonePickerLocationConfig === SkinTonePickerLocation.PREVIEW;\n}\n","import clsx from 'clsx';\nimport * as React from 'react';\nimport './Flex.css';\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 style={{ ...style }} className={clsx('Flex', className, direction)}>\n {children}\n </div>\n );\n}\n","import clsx from 'clsx';\nimport * as React from 'react';\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={clsx(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 clsx from 'clsx';\nimport * as React from 'react';\n\nimport { ClassNames } from '../../DomUtils/classNames';\nimport { useSkinTonesDisabledConfig } from '../../config/useConfig';\nimport skinToneVariations, {\n skinTonesNamed\n} from '../../data/skinToneVariations';\nimport { useCloseAllOpenToggles } from '../../hooks/useCloseAllOpenToggles';\nimport { useFocusSearchInput } from '../../hooks/useFocus';\nimport { SkinTones } from '../../types/exposedTypes';\nimport Absolute from '../Layout/Absolute';\nimport Relative from '../Layout/Relative';\nimport { Button } from '../atoms/Button';\nimport { useSkinTonePickerRef } from '../context/ElementRefContext';\nimport {\n useActiveSkinToneState,\n useSkinToneFanOpenState\n} from '../context/PickerContext';\nimport './SkinTonePicker.css';\n\nconst ITEM_SIZE = 28;\n\ntype Props = {\n direction?: SkinTonePickerDirection;\n};\n\nexport function SkinTonePickerMenu() {\n return (\n <Relative style={{ height: ITEM_SIZE }}>\n <Absolute style={{ bottom: 0, right: 0 }}>\n <SkinTonePicker direction={SkinTonePickerDirection.VERTICAL} />\n </Absolute>\n </Relative>\n );\n}\n\nexport function SkinTonePicker({\n direction = SkinTonePickerDirection.HORIZONTAL\n}: Props) {\n const SkinTonePickerRef = useSkinTonePickerRef();\n const isDisabled = useSkinTonesDisabledConfig();\n const [isOpen, setIsOpen] = useSkinToneFanOpenState();\n const [activeSkinTone, setActiveSkinTone] = useActiveSkinToneState();\n const closeAllOpenToggles = useCloseAllOpenToggles();\n const focusSearchInput = useFocusSearchInput();\n\n if (isDisabled) {\n return null;\n }\n\n const fullWidth = `${ITEM_SIZE * skinToneVariations.length}px`;\n\n const expandedSize = isOpen ? fullWidth : ITEM_SIZE + 'px';\n\n const vertical = direction === SkinTonePickerDirection.VERTICAL;\n\n return (\n <Relative\n className={clsx('epr-skin-tones', direction, {\n [ClassNames.open]: isOpen\n })}\n style={\n vertical\n ? { flexBasis: expandedSize, height: expandedSize }\n : { flexBasis: expandedSize }\n }\n >\n <div className=\"epr-skin-tone-select\" ref={SkinTonePickerRef}>\n {skinToneVariations.map((skinToneVariation, i) => {\n const active = skinToneVariation === activeSkinTone;\n return (\n <Button\n style={{\n transform: clsx(\n vertical\n ? `translateY(-${i * (isOpen ? ITEM_SIZE : 0)}px)`\n : `translateX(-${i * (isOpen ? ITEM_SIZE : 0)}px)`,\n isOpen && active && 'scale(1.3)'\n )\n }}\n onClick={() => {\n if (isOpen) {\n setActiveSkinTone(skinToneVariation);\n focusSearchInput();\n } else {\n setIsOpen(true);\n }\n closeAllOpenToggles();\n }}\n key={skinToneVariation}\n className={clsx(`epr-tone-${skinToneVariation}`, 'epr-tone', {\n [ClassNames.active]: active\n })}\n tabIndex={isOpen ? 0 : -1}\n aria-pressed={active}\n aria-label={`Skin tone ${\n skinTonesNamed[skinToneVariation as SkinTones]\n }`}\n ></Button>\n );\n })}\n </div>\n </Relative>\n );\n}\n\nexport enum SkinTonePickerDirection {\n VERTICAL = ClassNames.vertical,\n HORIZONTAL = ClassNames.horizontal\n}\n","import * as React from 'react';\nimport { useState } from 'react';\n\nimport {\n useEmojiStyleConfig,\n useGetEmojiUrlConfig,\n usePreviewConfig\n} from '../../config/useConfig';\nimport { asEmoji } from '../../dataUtils/asEmoji';\nimport {\n emojiByUnified,\n emojiName,\n emojiUnified\n} from '../../dataUtils/emojiSelectors';\nimport { useEmojiPreviewEvents } from '../../hooks/useEmojiPreviewEvents';\nimport { useIsSkinToneInPreview } from '../../hooks/useShouldShowSkinTonePicker';\nimport Flex from '../Layout/Flex';\nimport Space from '../Layout/Space';\nimport { useEmojiVariationPickerState } from '../context/PickerContext';\nimport { ViewOnlyEmoji } from '../emoji/Emoji';\nimport './Preview.css';\nimport { SkinTonePickerMenu } from '../header/SkinTonePicker';\n\nexport function Preview() {\n const previewConfig = usePreviewConfig();\n const isSkinToneInPreview = useIsSkinToneInPreview();\n\n if (!previewConfig.showPreview) {\n return null;\n }\n\n return (\n <Flex className=\"epr-preview\">\n <PreviewBody />\n <Space />\n {isSkinToneInPreview ? <SkinTonePickerMenu /> : null}\n </Flex>\n );\n}\n\nexport function PreviewBody() {\n const previewConfig = usePreviewConfig();\n const [previewEmoji, setPreviewEmoji] = useState<PreviewEmoji>(null);\n const emojiStyle = useEmojiStyleConfig();\n const [variationPickerEmoji] = useEmojiVariationPickerState();\n const getEmojiUrl = useGetEmojiUrlConfig();\n\n useEmojiPreviewEvents(previewConfig.showPreview, setPreviewEmoji);\n\n const emoji = emojiByUnified(previewEmoji?.originalUnified);\n\n const show = emoji != null && previewEmoji != null;\n\n return <PreviewContent />;\n\n function PreviewContent() {\n const defaultEmoji = asEmoji(\n variationPickerEmoji ?? emojiByUnified(previewConfig.defaultEmoji)\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={asEmoji(emoji)}\n emojiStyle={emojiStyle}\n size={45}\n getEmojiUrl={getEmojiUrl}\n />\n ) : defaultEmoji ? (\n <ViewOnlyEmoji\n unified={emojiUnified(defaultEmoji)}\n emoji={defaultEmoji}\n emojiStyle={emojiStyle}\n size={45}\n getEmojiUrl={getEmojiUrl}\n />\n ) : null}\n </div>\n {show ? (\n <div className=\"epr-preview-emoji-label\">\n {emojiName(asEmoji(emoji))}\n </div>\n ) : (\n <div className=\"epr-preview-emoji-label\">{defaultText}</div>\n )}\n </>\n );\n }\n}\n\nexport type PreviewEmoji = null | {\n unified: string;\n originalUnified: string;\n};\n","export function categoryNameFromDom($category: Element | null): string | null {\n return $category?.getAttribute('data-name') ?? null;\n}\n","import { useEffect } from 'react';\n\nimport { categoryNameFromDom } from '../DomUtils/categoryNameFromDom';\nimport { asSelectors, ClassNames } from '../DomUtils/classNames';\nimport { useBodyRef } from '../components/context/ElementRefContext';\n\nexport function useActiveCategoryScrollDetection(\n setActiveCategory: (category: string) => void\n) {\n const BodyRef = useBodyRef();\n\n useEffect(() => {\n const visibleCategories = new Map();\n const bodyRef = BodyRef.current;\n const observer = new IntersectionObserver(\n entries => {\n if (!bodyRef) {\n return;\n }\n\n for (const entry of entries) {\n const id = categoryNameFromDom(entry.target);\n visibleCategories.set(id, entry.intersectionRatio);\n }\n\n const ratios = Array.from(visibleCategories);\n const lastCategory = ratios[ratios.length - 1];\n\n if (lastCategory[1] == 1) {\n return setActiveCategory(lastCategory[0]);\n }\n\n for (const [id, ratio] of ratios) {\n if (ratio) {\n setActiveCategory(id);\n break;\n }\n }\n },\n {\n threshold: [0, 1]\n }\n );\n bodyRef?.querySelectorAll(asSelectors(ClassNames.category)).forEach(el => {\n observer.observe(el);\n });\n }, [BodyRef, setActiveCategory]);\n}\n","import { useSearchTermState } from '../components/context/PickerContext';\n\nexport default function useIsSearchMode(): boolean {\n const [searchTerm] = useSearchTermState();\n\n return !!searchTerm;\n}\n","import { scrollTo } from '../DomUtils/scrollTo';\nimport { NullableElement } from '../DomUtils/selectors';\nimport {\n useBodyRef,\n usePickerMainRef\n} from '../components/context/ElementRefContext';\n\nexport function useScrollCategoryIntoView() {\n const BodyRef = useBodyRef();\n const PickerMainRef = usePickerMainRef();\n\n return function scrollCategoryIntoView(category: string): void {\n if (!BodyRef.current) {\n return;\n }\n const $category = BodyRef.current?.querySelector(\n `[data-name=\"${category}\"]`\n ) as NullableElement;\n\n if (!$category) {\n return;\n }\n\n const offsetTop = $category.offsetTop || 0;\n\n scrollTo(PickerMainRef.current, offsetTop);\n };\n}\n","import clsx from 'clsx';\nimport * as React from 'react';\nimport { useState } from 'react';\nimport './CategoryNavigation.css';\n\nimport { ClassNames } from '../../DomUtils/classNames';\nimport {\n categoryFromCategoryConfig,\n categoryNameFromCategoryConfig\n} from '../../config/categoryConfig';\nimport { useCategoriesConfig } from '../../config/useConfig';\nimport { useActiveCategoryScrollDetection } from '../../hooks/useActiveCategoryScrollDetection';\nimport useIsSearchMode from '../../hooks/useIsSearchMode';\nimport { useScrollCategoryIntoView } from '../../hooks/useScrollCategoryIntoView';\nimport { Button } from '../atoms/Button';\nimport { useCategoryNavigationRef } from '../context/ElementRefContext';\n\nexport function CategoryNavigation() {\n const [activeCategory, setActiveCategory] = useState<string | null>(null);\n const scrollCategoryIntoView = useScrollCategoryIntoView();\n useActiveCategoryScrollDetection(setActiveCategory);\n const isSearchMode = useIsSearchMode();\n\n const categoriesConfig = useCategoriesConfig();\n const CategoryNavigationRef = useCategoryNavigationRef();\n\n return (\n <div className=\"epr-category-nav\" ref={CategoryNavigationRef}>\n {categoriesConfig.map(categoryConfig => {\n const category = categoryFromCategoryConfig(categoryConfig);\n return (\n <Button\n tabIndex={isSearchMode ? -1 : 0}\n className={clsx('epr-cat-btn', `epr-icn-${category}`, {\n [ClassNames.active]: category === activeCategory\n })}\n key={category}\n onClick={() => {\n setActiveCategory(category);\n scrollCategoryIntoView(category);\n }}\n aria-label={categoryNameFromCategoryConfig(categoryConfig)}\n />\n );\n })}\n </div>\n );\n}\n","import clsx from 'clsx';\nimport * as React from 'react';\nimport { useState } from 'react';\n\nimport { asSelectors, ClassNames } from '../../DomUtils/classNames';\nimport {\n useAutoFocusSearchConfig,\n useSearchDisabledConfig,\n useSearchPlaceHolderConfig\n} from '../../config/useConfig';\nimport { useCloseAllOpenToggles } from '../../hooks/useCloseAllOpenToggles';\nimport {\n getNormalizedSearchTerm,\n useClearSearch,\n useFilter\n} from '../../hooks/useFilter';\nimport { useIsSkinToneInSearch } from '../../hooks/useShouldShowSkinTonePicker';\nimport Flex from '../Layout/Flex';\nimport Relative from '../Layout/Relative';\nimport { Button } from '../atoms/Button';\nimport { useSearchInputRef } from '../context/ElementRefContext';\n\nimport './Search.css';\nimport { SkinTonePicker } from './SkinTonePicker';\n\nexport function SearchContainer() {\n const searchDisabled = useSearchDisabledConfig();\n\n const isSkinToneInSearch = useIsSkinToneInSearch();\n\n if (searchDisabled) {\n return null;\n }\n\n return (\n <Flex className=\"epr-header-overlay\">\n <Search />\n\n {isSkinToneInSearch ? <SkinTonePicker /> : null}\n </Flex>\n );\n}\n\nexport function Search() {\n const [inc, setInc] = useState(0);\n const closeAllOpenToggles = useCloseAllOpenToggles();\n const SearchInputRef = useSearchInputRef();\n const clearSearch = useClearSearch();\n const placeholder = useSearchPlaceHolderConfig();\n const autoFocus = useAutoFocusSearchConfig();\n const { onChange } = useFilter();\n\n const input = SearchInputRef?.current;\n const value = input?.value;\n\n return (\n <Relative className=\"epr-search-container\">\n <CssSearch value={value} />\n <input\n // eslint-disable-next-line jsx-a11y/no-autofocus\n autoFocus={autoFocus}\n aria-label={'Type to search for an emoji'}\n onFocus={closeAllOpenToggles}\n className=\"epr-search\"\n type=\"text\"\n placeholder={placeholder}\n onChange={event => {\n setInc(inc + 1);\n setTimeout(() => {\n onChange(event?.target?.value ?? value);\n });\n }}\n ref={SearchInputRef}\n />\n <div className=\"epr-icn-search\" />\n <Button\n className={clsx('epr-btn-clear-search', 'epr-visible-on-search-only')}\n onClick={clearSearch}\n >\n <div className=\"epr-icn-clear-search\" />\n </Button>\n </Relative>\n );\n}\n\nconst CSS_SEARCH_SELECTOR = `${asSelectors(\n ClassNames.emojiPicker\n)} ${asSelectors(ClassNames.emojiList)}`;\n\nfunction CssSearch({ value }: { value: undefined | string }) {\n if (!value) {\n return null;\n }\n\n const searchQuery = `button[data-full-name*=\"${getNormalizedSearchTerm(\n value\n )}\"]`;\n\n return (\n <style>{`\n ${CSS_SEARCH_SELECTOR} ${asSelectors(\n ClassNames.category\n )}:not(:has(${searchQuery})) {\n display: none;\n }\n\n ${CSS_SEARCH_SELECTOR} button${asSelectors(\n ClassNames.emoji\n )}:not(${searchQuery}) {\n display: none;\n }\n `}</style>\n );\n}\n","import * as React from 'react';\n\nimport Relative from '../Layout/Relative';\nimport { CategoryNavigation } from '../navigation/CategoryNavigation';\n\nimport './Header.css';\nimport { SearchContainer } from './Search';\n\nexport function Header() {\n return (\n <Relative className=\"epr-header\">\n <SearchContainer />\n <CategoryNavigation />\n </Relative>\n );\n}\n","import { NullableElement } from './selectors';\n\nexport function getActiveElement() {\n return document.activeElement as NullableElement;\n}\n","import { useCallback, useEffect, useMemo } from 'react';\n\nimport { hasNextElementSibling } from '../DomUtils/elementPositionInRow';\nimport {\n focusNextElementSibling,\n focusPrevElementSibling\n} from '../DomUtils/focusElement';\nimport { getActiveElement } from '../DomUtils/getActiveElement';\nimport {\n focusAndClickFirstVisibleEmoji,\n focusFirstVisibleEmoji,\n focusNextVisibleEmoji,\n focusPrevVisibleEmoji,\n focusVisibleEmojiOneRowDown,\n focusVisibleEmojiOneRowUp\n} from '../DomUtils/keyboardNavigation';\nimport { useScrollTo } from '../DomUtils/scrollTo';\nimport { buttonFromTarget } from '../DomUtils/selectors';\nimport {\n useBodyRef,\n useCategoryNavigationRef,\n usePickerMainRef,\n useSearchInputRef,\n useSkinTonePickerRef\n} from '../components/context/ElementRefContext';\nimport { useSkinToneFanOpenState } from '../components/context/PickerContext';\n\nimport {\n useCloseAllOpenToggles,\n useHasOpenToggles\n} from './useCloseAllOpenToggles';\nimport { useDisallowMouseMove } from './useDisallowMouseMove';\nimport { useAppendSearch, useClearSearch } from './useFilter';\nimport {\n useFocusCategoryNavigation,\n useFocusSearchInput,\n useFocusSkinTonePicker\n} from './useFocus';\nimport useIsSearchMode from './useIsSearchMode';\nimport useSetVariationPicker from './useSetVariationPicker';\nimport {\n useIsSkinToneInPreview,\n useIsSkinToneInSearch\n} from './useShouldShowSkinTonePicker';\n\nenum KeyboardEvents {\n ArrowDown = 'ArrowDown',\n ArrowUp = 'ArrowUp',\n ArrowLeft = 'ArrowLeft',\n ArrowRight = 'ArrowRight',\n Escape = 'Escape',\n Enter = 'Enter',\n Space = ' '\n}\n\nexport function useKeyboardNavigation() {\n usePickerMainKeyboardEvents();\n useSearchInputKeyboardEvents();\n useSkinTonePickerKeyboardEvents();\n useCategoryNavigationKeyboardEvents();\n useBodyKeyboardEvents();\n}\n\nfunction usePickerMainKeyboardEvents() {\n const PickerMainRef = usePickerMainRef();\n const clearSearch = useClearSearch();\n const scrollTo = useScrollTo();\n const SearchInputRef = useSearchInputRef();\n const focusSearchInput = useFocusSearchInput();\n const hasOpenToggles = useHasOpenToggles();\n const disallowMouseMove = useDisallowMouseMove();\n\n const closeAllOpenToggles = useCloseAllOpenToggles();\n\n const onKeyDown = useMemo(\n () =>\n function onKeyDown(event: KeyboardEvent) {\n const { key } = event;\n\n disallowMouseMove();\n switch (key) {\n // eslint-disable-next-line no-fallthrough\n case KeyboardEvents.Escape:\n event.preventDefault();\n if (hasOpenToggles()) {\n closeAllOpenToggles();\n return;\n }\n clearSearch();\n scrollTo(0);\n focusSearchInput();\n break;\n }\n },\n [\n scrollTo,\n clearSearch,\n closeAllOpenToggles,\n focusSearchInput,\n hasOpenToggles,\n disallowMouseMove\n ]\n );\n\n useEffect(() => {\n const current = PickerMainRef.current;\n\n if (!current) {\n return;\n }\n\n current.addEventListener('keydown', onKeyDown);\n\n return () => {\n current.removeEventListener('keydown', onKeyDown);\n };\n }, [PickerMainRef, SearchInputRef, scrollTo, onKeyDown]);\n}\n\nfunction useSearchInputKeyboardEvents() {\n const focusSkinTonePicker = useFocusSkinTonePicker();\n const PickerMainRef = usePickerMainRef();\n const BodyRef = useBodyRef();\n const SearchInputRef = useSearchInputRef();\n const [, setSkinToneFanOpenState] = useSkinToneFanOpenState();\n const goDownFromSearchInput = useGoDownFromSearchInput();\n const isSkinToneInSearch = useIsSkinToneInSearch();\n\n const onKeyDown = useMemo(\n () =>\n function onKeyDown(event: KeyboardEvent) {\n const { key } = event;\n\n switch (key) {\n case KeyboardEvents.ArrowRight:\n if (!isSkinToneInSearch) {\n return;\n }\n event.preventDefault();\n setSkinToneFanOpenState(true);\n focusSkinTonePicker();\n break;\n case KeyboardEvents.ArrowDown:\n event.preventDefault();\n goDownFromSearchInput();\n break;\n case KeyboardEvents.Enter:\n event.preventDefault();\n focusAndClickFirstVisibleEmoji(BodyRef.current);\n break;\n }\n },\n [\n focusSkinTonePicker,\n goDownFromSearchInput,\n setSkinToneFanOpenState,\n BodyRef,\n isSkinToneInSearch\n ]\n );\n\n useEffect(() => {\n const current = SearchInputRef.current;\n\n if (!current) {\n return;\n }\n\n current.addEventListener('keydown', onKeyDown);\n\n return () => {\n current.removeEventListener('keydown', onKeyDown);\n };\n }, [PickerMainRef, SearchInputRef, onKeyDown]);\n}\n\nfunction useSkinTonePickerKeyboardEvents() {\n const SkinTonePickerRef = useSkinTonePickerRef();\n const focusSearchInput = useFocusSearchInput();\n const SearchInputRef = useSearchInputRef();\n const goDownFromSearchInput = useGoDownFromSearchInput();\n const [isOpen, setIsOpen] = useSkinToneFanOpenState();\n const isSkinToneInPreview = useIsSkinToneInPreview();\n const isSkinToneInSearch = useIsSkinToneInSearch();\n const onType = useOnType();\n\n const onKeyDown = useMemo(\n () =>\n // eslint-disable-next-line complexity\n function onKeyDown(event: KeyboardEvent) {\n const { key } = event;\n\n if (isSkinToneInSearch) {\n switch (key) {\n case KeyboardEvents.ArrowLeft:\n event.preventDefault();\n if (!isOpen) {\n return focusSearchInput();\n }\n focusNextSkinTone(focusSearchInput);\n break;\n case KeyboardEvents.ArrowRight:\n event.preventDefault();\n if (!isOpen) {\n return focusSearchInput();\n }\n focusPrevSkinTone();\n break;\n case KeyboardEvents.ArrowDown:\n event.preventDefault();\n if (isOpen) {\n setIsOpen(false);\n }\n goDownFromSearchInput();\n break;\n default:\n onType(event);\n break;\n }\n }\n\n if (isSkinToneInPreview) {\n switch (key) {\n case KeyboardEvents.ArrowUp:\n event.preventDefault();\n if (!isOpen) {\n return focusSearchInput();\n }\n focusNextSkinTone(focusSearchInput);\n break;\n case KeyboardEvents.ArrowDown:\n event.preventDefault();\n if (!isOpen) {\n return focusSearchInput();\n }\n focusPrevSkinTone();\n break;\n default:\n onType(event);\n break;\n }\n }\n },\n [\n isOpen,\n focusSearchInput,\n setIsOpen,\n goDownFromSearchInput,\n onType,\n isSkinToneInPreview,\n isSkinToneInSearch\n ]\n );\n\n useEffect(() => {\n const current = SkinTonePickerRef.current;\n\n if (!current) {\n return;\n }\n\n current.addEventListener('keydown', onKeyDown);\n\n return () => {\n current.removeEventListener('keydown', onKeyDown);\n };\n }, [SkinTonePickerRef, SearchInputRef, isOpen, onKeyDown]);\n}\n\nfunction useCategoryNavigationKeyboardEvents() {\n const focusSearchInput = useFocusSearchInput();\n const CategoryNavigationRef = useCategoryNavigationRef();\n const BodyRef = useBodyRef();\n const onType = useOnType();\n\n const onKeyDown = useMemo(\n () =>\n function onKeyDown(event: KeyboardEvent) {\n const { key } = event;\n\n switch (key) {\n case KeyboardEvents.ArrowUp:\n event.preventDefault();\n focusSearchInput();\n break;\n case KeyboardEvents.ArrowRight:\n event.preventDefault();\n focusNextElementSibling(getActiveElement());\n break;\n case KeyboardEvents.ArrowLeft:\n event.preventDefault();\n focusPrevElementSibling(getActiveElement());\n break;\n case KeyboardEvents.ArrowDown:\n event.preventDefault();\n focusFirstVisibleEmoji(BodyRef.current);\n break;\n default:\n onType(event);\n break;\n }\n },\n [BodyRef, focusSearchInput, onType]\n );\n\n useEffect(() => {\n const current = CategoryNavigationRef.current;\n\n if (!current) {\n return;\n }\n\n current.addEventListener('keydown', onKeyDown);\n\n return () => {\n current.removeEventListener('keydown', onKeyDown);\n };\n }, [CategoryNavigationRef, BodyRef, onKeyDown]);\n}\n\nfunction useBodyKeyboardEvents() {\n const BodyRef = useBodyRef();\n const goUpFromBody = useGoUpFromBody();\n const setVariationPicker = useSetVariationPicker();\n const hasOpenToggles = useHasOpenToggles();\n const closeAllOpenToggles = useCloseAllOpenToggles();\n\n const onType = useOnType();\n\n const onKeyDown = useMemo(\n () =>\n // eslint-disable-next-line complexity\n function onKeyDown(event: KeyboardEvent) {\n const { key } = event;\n\n const activeElement = buttonFromTarget(getActiveElement());\n\n switch (key) {\n case KeyboardEvents.ArrowRight:\n event.preventDefault();\n focusNextVisibleEmoji(activeElement);\n break;\n case KeyboardEvents.ArrowLeft:\n event.preventDefault();\n focusPrevVisibleEmoji(activeElement);\n break;\n case KeyboardEvents.ArrowDown:\n event.preventDefault();\n if (hasOpenToggles()) {\n closeAllOpenToggles();\n break;\n }\n focusVisibleEmojiOneRowDown(activeElement);\n break;\n case KeyboardEvents.ArrowUp:\n event.preventDefault();\n if (hasOpenToggles()) {\n closeAllOpenToggles();\n break;\n }\n focusVisibleEmojiOneRowUp(activeElement, goUpFromBody);\n break;\n case KeyboardEvents.Space:\n event.preventDefault();\n setVariationPicker(event.target as HTMLElement);\n break;\n default:\n onType(event);\n break;\n }\n },\n [\n goUpFromBody,\n onType,\n setVariationPicker,\n hasOpenToggles,\n closeAllOpenToggles\n ]\n );\n\n useEffect(() => {\n const current = BodyRef.current;\n\n if (!current) {\n return;\n }\n\n current.addEventListener('keydown', onKeyDown);\n\n return () => {\n current.removeEventListener('keydown', onKeyDown);\n };\n }, [BodyRef, onKeyDown]);\n}\n\nfunction useGoDownFromSearchInput() {\n const focusCategoryNavigation = useFocusCategoryNavigation();\n const isSearchMode = useIsSearchMode();\n const BodyRef = useBodyRef();\n\n return useCallback(\n function goDownFromSearchInput() {\n if (isSearchMode) {\n return focusFirstVisibleEmoji(BodyRef.current);\n }\n return focusCategoryNavigation();\n },\n [BodyRef, focusCategoryNavigation, isSearchMode]\n );\n}\n\nfunction useGoUpFromBody() {\n const focusSearchInput = useFocusSearchInput();\n const focusCategoryNavigation = useFocusCategoryNavigation();\n const isSearchMode = useIsSearchMode();\n\n return useCallback(\n function goUpFromEmoji() {\n if (isSearchMode) {\n return focusSearchInput();\n }\n return focusCategoryNavigation();\n },\n [focusSearchInput, isSearchMode, focusCategoryNavigation]\n );\n}\n\nfunction focusNextSkinTone(exitLeft: () => void) {\n const currentSkinTone = getActiveElement();\n\n if (!currentSkinTone) {\n return;\n }\n\n if (!hasNextElementSibling(currentSkinTone)) {\n exitLeft();\n }\n\n focusNextElementSibling(currentSkinTone);\n}\n\nfunction focusPrevSkinTone() {\n const currentSkinTone = getActiveElement();\n\n if (!currentSkinTone) {\n return;\n }\n\n focusPrevElementSibling(currentSkinTone);\n}\n\nfunction useOnType() {\n const appendSearch = useAppendSearch();\n const focusSearchInput = useFocusSearchInput();\n const closeAllOpenToggles = useCloseAllOpenToggles();\n\n return function onType(event: KeyboardEvent) {\n const { key } = event;\n\n if (hasModifier(event)) {\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/Emoji';\nimport { DataEmoji } from '../dataUtils/DataTypes';\nimport { emojiUnified, emojiVariations } from '../dataUtils/emojiSelectors';\nimport { EmojiStyle } from '../types/exposedTypes';\n\nexport function preloadEmoji(\n getEmojiUrl: GetEmojiUrl,\n emoji: undefined | DataEmoji,\n emojiStyle: EmojiStyle\n): void {\n if (!emoji) {\n return;\n }\n\n if (emojiStyle === EmojiStyle.NATIVE) {\n return;\n }\n\n const unified = emojiUnified(emoji);\n\n if (preloadedEmojs.has(unified)) {\n return;\n }\n\n emojiVariations(emoji).forEach((variation) => {\n const emojiUrl = getEmojiUrl(variation, emojiStyle);\n preloadImage(emojiUrl);\n });\n\n preloadedEmojs.add(unified);\n}\n\nexport const preloadedEmojs: Set<string> = new Set();\n\nfunction preloadImage(url: string): void {\n const image = new Image();\n image.src = url;\n}\n","import { useEffect } from 'react';\n\nimport { buttonFromTarget, emojiFromElement } from '../DomUtils/selectors';\nimport { useBodyRef } from '../components/context/ElementRefContext';\nimport { useEmojiStyleConfig, useGetEmojiUrlConfig } from '../config/useConfig';\nimport { emojiHasVariations } from '../dataUtils/emojiSelectors';\nimport { EmojiStyle } from '../types/exposedTypes';\n\nimport { preloadEmoji } from './preloadEmoji';\n\nexport function useOnFocus() {\n const BodyRef = useBodyRef();\n const emojiStyle = useEmojiStyleConfig();\n const getEmojiUrl = useGetEmojiUrlConfig();\n\n useEffect(() => {\n if (emojiStyle === EmojiStyle.NATIVE) {\n return;\n }\n\n const bodyRef = BodyRef.current;\n\n bodyRef?.addEventListener('focusin', onFocus);\n\n return () => {\n bodyRef?.removeEventListener('focusin', onFocus);\n };\n\n function onFocus(event: FocusEvent) {\n const button = buttonFromTarget(event.target as HTMLElement);\n\n if (!button) {\n return;\n }\n\n const [emoji] = emojiFromElement(button);\n\n if (!emoji) {\n return;\n }\n\n if (emojiHasVariations(emoji)) {\n preloadEmoji(getEmojiUrl, emoji, emojiStyle);\n }\n }\n }, [BodyRef, emojiStyle, getEmojiUrl]);\n}\n","import clsx from 'clsx';\nimport * as React from 'react';\n\nimport { ClassNames } from '../../DomUtils/classNames';\nimport { usePickerSizeConfig, useThemeConfig } from '../../config/useConfig';\nimport useIsSearchMode from '../../hooks/useIsSearchMode';\nimport { useKeyboardNavigation } from '../../hooks/useKeyboardNavigation';\nimport { useOnFocus } from '../../hooks/useOnFocus';\nimport { Theme } from '../../types/exposedTypes';\nimport { usePickerMainRef } from '../context/ElementRefContext';\nimport { PickerContextProvider } from '../context/PickerContext';\nimport './PickerMain.css';\n\ntype Props = Readonly<{\n children: React.ReactNode;\n}>;\n\nexport default function PickerMain({ children }: Props) {\n return (\n <PickerContextProvider>\n <PickerRootElement>{children}</PickerRootElement>\n </PickerContextProvider>\n );\n}\n\ntype RootProps = Readonly<{\n children: React.ReactNode;\n}>;\n\nfunction PickerRootElement({ children }: RootProps) {\n const theme = useThemeConfig();\n const searchModeActive = useIsSearchMode();\n const PickerMainRef = usePickerMainRef();\n const { height, width } = usePickerSizeConfig();\n\n useKeyboardNavigation();\n useOnFocus();\n\n const style = {\n height,\n width\n };\n\n return (\n <aside\n className={clsx(ClassNames.emojiPicker, 'epr-main', {\n [ClassNames.searchActive]: searchModeActive,\n 'epr-dark-theme': theme === Theme.DARK\n })}\n ref={PickerMainRef}\n style={style}\n >\n {children}\n </aside>\n );\n}\n","import * as React from 'react';\n\nimport { Body } from './components/body/Body';\nimport { ElementRefContextProvider } from './components/context/ElementRefContext';\nimport { PickerConfigProvider } from './components/context/PickerConfigContext';\nimport { Preview } from './components/footer/Preview';\nimport { Header } from './components/header/Header';\nimport PickerMain from './components/main/PickerMain';\nimport { PickerConfig } from './config/config';\nimport './EmojiPickerReact.css';\n\nexport interface Props extends PickerConfig {}\n\nexport default function EmojiPicker(props: Props) {\n return (\n <ElementRefContextProvider>\n <PickerConfigProvider {...props}>\n <PickerMain>\n <Header />\n <Body />\n <Preview />\n </PickerMain>\n </PickerConfigProvider>\n </ElementRefContextProvider>\n );\n}\n","import * as React from 'react';\n\nexport default class ErrorBoundary extends React.Component<\n { children: React.ReactNode },\n { hasError: boolean }\n> {\n constructor(props: { children: React.ReactNode }) {\n super(props);\n this.state = { hasError: false };\n }\n\n static getDerivedStateFromError() {\n return { hasError: true };\n }\n\n componentDidCatch(error: Error, errorInfo: any) {\n // eslint-disable-next-line no-console\n console.error('Emoji Picker React failed to render:', error, errorInfo);\n }\n\n render() {\n if (this.state.hasError) {\n return null;\n }\n\n return this.props.children;\n }\n}\n","import * as React from 'react';\n\nimport { EmojiStyle } from '../../types/exposedTypes';\n\nimport { GetEmojiUrl, ViewOnlyEmoji } from './Emoji';\n\nexport function ExportedEmoji({\n unified,\n size = 32,\n emojiStyle = EmojiStyle.APPLE,\n lazyLoad = false,\n getEmojiUrl,\n}: {\n unified: string;\n emojiStyle?: EmojiStyle;\n size?: number;\n lazyLoad?: boolean;\n getEmojiUrl?: GetEmojiUrl;\n}) {\n if (!unified) {\n return null;\n }\n\n return (\n <ViewOnlyEmoji\n unified={unified}\n size={size}\n emojiStyle={emojiStyle}\n lazyLoad={lazyLoad}\n getEmojiUrl={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';\n\nexport { ExportedEmoji as Emoji } from './components/emoji/ExportedEmoji';\n\nexport {\n EmojiStyle,\n SkinTones,\n Theme,\n Categories,\n EmojiClickData,\n SuggestionMode,\n SkinTonePickerLocation\n} from './types/exposedTypes';\n\nexport interface Props extends PickerConfig {}\n\nexport default function EmojiPicker(props: Props) {\n return (\n <ErrorBoundary>\n <EmojiPickerReact {...props} />\n </ErrorBoundary>\n );\n}\n"],"names":["ClassNames","asSelectors","classNames","map","c","join","ElementRefContextProvider","children","PickerMainRef","React","AnchoredEmojiRef","BodyRef","SearchInputRef","SkinTonePickerRef","CategoryNavigationRef","VariationPickerRef","ElementRefContext","Provider","value","useElementRef","usePickerMainRef","useAnchoredEmojiRef","useSetAnchoredEmojiRef","target","current","useBodyRef","useSearchInputRef","useSkinTonePickerRef","useCategoryNavigationRef","useVariationPickerRef","isSystemDarkTheme","window","matchMedia","matches","SuggestionMode","EmojiStyle","Theme","SkinTones","Categories","SkinTonePickerLocation","CDN_URL_APPLE","CDN_URL_FACEBOOK","CDN_URL_TWITTER","CDN_URL_GOOGLE","cdnUrl","emojiStyle","TWITTER","GOOGLE","FACEBOOK","APPLE","skinToneVariations","NEUTRAL","LIGHT","MEDIUM_LIGHT","MEDIUM","MEDIUM_DARK","DARK","skinTonesNamed","Object","entries","reduce","acc","key","skinTonesMapped","mapped","skinTone","assign","EmojiProperties","emojiNames","emoji","name","addedIn","parseFloat","added_in","emojiName","unifiedWithoutSkinTone","unified","splat","split","splice","emojiUnified","emojiHasVariations","emojiVariationUnified","emojisByCategory","category","emojis","emojiUrlByUnified","emojiVariations","variations","length","find","variation","includes","emojiByUnified","allEmojisByUnified","withoutSkinTone","allEmojis","values","flat","setTimeout","Emoji","activeVariationFromUnified","suspectedSkinTone","categoriesOrdered","SUGGESTED","SMILEYS_PEOPLE","ANIMALS_NATURE","FOOD_DRINK","TRAVEL_PLACES","ACTIVITIES","OBJECTS","SYMBOLS","FLAGS","SuggestedRecent","configByCategory","baseCategoriesConfig","modifiers","categoryFromCategoryConfig","categoryNameFromCategoryConfig","mergeCategoriesConfig","userCategoriesConfig","extra","suggestionMode","RECENT","base","getBaseConfigByCategory","modifier","mergeConfig","userConfig","basePickerConfig","previewConfig","config","categories","suggestedEmojisMode","skinTonePickerLocation","searchDisabled","PREVIEW","autoFocusSearch","defaultSkinTone","emojiVersion","getEmojiUrl","height","lazyLoadEmojis","onEmojiClick","defaultOnClickHandler","event","basePreviewConfig","searchPlaceHolder","SEARCH","skinTonesDisabled","FREQUENT","theme","width","defaultEmoji","defaultCaption","showPreview","ConfigContext","PickerConfigProvider","usePickerConfig","useSearchPlaceHolderConfig","useDefaultSkinToneConfig","useSkinTonesDisabledConfig","useEmojiStyleConfig","useAutoFocusSearchConfig","useCategoriesConfig","useOnEmojiClickConfig","usePreviewConfig","useThemeConfig","AUTO","useSuggestedEmojisModeConfig","useLazyLoadEmojisConfig","usePickerSizeConfig","getDimension","useEmojiVersionConfig","useSearchDisabledConfig","useSkinTonePickerLocationConfig","useGetEmojiUrlConfig","dimensionConfig","alphaNumericEmojiIndex","searchIndex","joinedNameString","replace","forEach","char","useDebouncedState","initialValue","delay","useState","state","setState","timer","useRef","debouncedSetState","Promise","resolve","clearTimeout","useDisallowedEmojis","DisallowedEmojisRef","emojiVersionConfig","useMemo","Number","isNaN","disallowedEmojis","addedInNewerVersion","useIsEmojiDisallowed","isEmojiDisallowed","Boolean","supportedLevel","useMarkInitialLoad","dispatch","useEffect","PickerContextProvider","filterRef","disallowClickRef","disallowMouseRef","disallowedEmojisRef","suggestedUpdateState","Date","now","searchTerm","skinToneFanOpenState","activeSkinTone","activeCategoryState","emojisThatFailedToLoadState","Set","emojiVariationPickerState","isPastInitialLoad","setIsPastInitialLoad","PickerContext","undefined","useFilterRef","useDisallowClickRef","useDisallowMouseRef","useSearchTermState","useActiveSkinToneState","useEmojisThatFailedToLoadState","useIsPastInitialLoad","useEmojiVariationPickerState","useSkinToneFanOpenState","useUpdateSuggested","suggestedUpdated","setsuggestedUpdate","updateSuggested","useDisallowMouseMove","DisallowMouseRef","disallowMouseMove","useAllowMouseMove","allowMouseMove","useIsMouseDisallowed","isMouseDisallowed","useOnMouseMove","bodyRef","addEventListener","onMouseMove","passive","removeEventListener","elementCountInRow","parent","element","parentWidth","getBoundingClientRect","elementWidth","Math","floor","elementIndexInRow","elementLeft","left","parentLeft","rowNumber","elementHeight","elementTop","top","parentTop","round","hasNextRow","parentHeight","getRowElements","elements","row","elementsInRow","lastRow","firstElementIndex","lastElementIndex","slice","getNextRowElements","allElements","currentRow","nextRow","getElementInRow","indexInRow","rowElements","getElementInNextRow","index","nextRowElements","getElementInPrevRow","prevRowElements","firstVisibleElementInContainer","parentBottom","bottom","visibleElements","elementBottom","hasNextElementSibling","nextElementSibling","EmojiButtonSelector","VisibleEmojiSelector","visible","hidden","buttonFromTarget","emojiElement","closest","emojiFromElement","originalUnified","originalUnifiedFromEmojiElement","unifiedFromEmojiElement","isEmojiElement","parentElement","clientHeight","emojiTrueOffsetTop","button","closestCategory","labelHeight","categoryLabelHeight","elementOffsetTop","categoryWithoutLabel","querySelector","categoryContent","isEmojiBehindLabel","emojiDistanceFromScrollTop","queryScrollBody","root","scrollBody","closestScrollBody","scrollTop","emojiTruOffsetLeft","elementOffsetLeft","offsetTop","offsetLeft","elementDataSetKey","elementDataSet","dataset","isVisibleEmoji","classList","contains","isHidden","allVisibleEmojis","Array","from","querySelectorAll","lastVisibleEmoji","last","prevVisibleEmoji","nextVisibleEmoji","next","firstVisibleEmoji","nextCategory","prev","previousElementSibling","prevCategory","closestCategoryContent","parseNativeEmoji","hex","String","fromCodePoint","parseInt","SUGGESTED_LS_KEY","getsuggested","mode","localStorage","recent","JSON","parse","getItem","sort","a","b","count","setsuggested","existing","u","nextList","concat","filter","i","original","min","setItem","stringify","useCloseAllOpenToggles","variationPicker","setVariationPicker","skinToneFanOpen","setSkinToneFanOpen","closeAllOpenToggles","useCallback","useHasOpenToggles","hasOpenToggles","useSetVariationPicker","setAnchoredEmojiRef","setEmojiVariationPicker","useMouseDownHandlers","mouseDownTimerRef","onClick","emojiFromEvent","skinToneToUse","emojiClickOutput","onMouseDown","onMouseUp","requestAnimationFrame","getImageUrl","names","useOnScroll","onScroll","scrollTo","$eprBody","scrollBy","by","useScrollTo","scrollEmojiAboveLabel","focusElement","focus","focusPrevElementSibling","focusNextElementSibling","focusFirstElementChild","first","firstElementChild","useFocusSearchInput","useFocusSkinTonePicker","useFocusCategoryNavigation","useSetFilterRef","setFilter","setter","useClearSearch","applySearch","useApplySearch","focusSearchInput","clearSearch","useAppendSearch","appendSearch","str","getNormalizedSearchTerm","useFilter","setFilterRef","onChange","inputValue","nextValue","toLowerCase","longestMatch","findLongestMatch","filterEmojiObjectByKeyword","setSearchTerm","then","keyword","filtered","hasMatch","some","useIsEmojiFiltered","isEmojiFilteredBySearchTerm","dict","longestMatchingKey","keys","trim","useIsEmojiHidden","emojisThatFailedToLoad","isEmojiFiltered","failedToLoad","has","filteredOut","asEmoji","Button","props","type","className","clsx","ClickableEmoji","hiddenOnSearch","showVariations","size","lazyLoad","hasVariations","emojiHasVariatios","ViewOnlyEmoji","style","fontSize","emojiToRender","NATIVE","NativeEmoji","EmojiImg","external","setEmojisThatFailedToLoad","src","alt","loading","onError","add","EmojiCategory","categoryConfig","categoryName","label","Suggested","suggestedEmojisModeConfig","suggested","suggestedItem","EmojiList","emojiList","RenderCategory","isEmojiHidden","emojisToPush","hiddenCounter","isDisallowed","focusFirstVisibleEmoji","focusAndClickFirstVisibleEmoji","firstEmoji","click","focusLastVisibleEmoji","focusNextVisibleEmoji","focusPrevVisibleEmoji","focusVisibleEmojiOneRowUp","exitUp","visibleEmojiOneRowUp","focusVisibleEmojiOneRowDown","visibleEmojiOneRowDown","countInRow","prevVisibleCategory","nextVisibleCategory","itemInNextRow","Direction","EmojiVariationPicker","useVariationPickerTop","getTop","getMenuDirection","getPointerStyle","usePointerStyle","pointerStyle","safeEmoji","ref","Down","clientWidth","direction","Up","emojiOffsetTop","buttonHeight","Body","useEmojiPreviewEvents","allow","setPreviewEmoji","onEscape","onMouseOver","onEnter","onLeave","e","relatedTarget","useIsSkinToneInSearch","skinTonePickerLocationConfig","useIsSkinToneInPreview","FlexDirection","Flex","ROW","Space","flex","Absolute","position","Relative","ITEM_SIZE","SkinTonePickerMenu","right","SkinTonePicker","SkinTonePickerDirection","VERTICAL","HORIZONTAL","isDisabled","isOpen","setIsOpen","setActiveSkinTone","fullWidth","expandedSize","vertical","open","flexBasis","skinToneVariation","active","transform","tabIndex","Preview","isSkinToneInPreview","PreviewBody","previewEmoji","variationPickerEmoji","show","PreviewContent","defaultText","categoryNameFromDom","$category","getAttribute","useActiveCategoryScrollDetection","setActiveCategory","visibleCategories","Map","observer","IntersectionObserver","entry","id","set","intersectionRatio","ratios","lastCategory","ratio","threshold","el","observe","useIsSearchMode","useScrollCategoryIntoView","scrollCategoryIntoView","CategoryNavigation","activeCategory","isSearchMode","categoriesConfig","SearchContainer","isSkinToneInSearch","Search","inc","setInc","placeholder","autoFocus","input","CssSearch","onFocus","CSS_SEARCH_SELECTOR","emojiPicker","searchQuery","Header","getActiveElement","document","activeElement","KeyboardEvents","useKeyboardNavigation","usePickerMainKeyboardEvents","useSearchInputKeyboardEvents","useSkinTonePickerKeyboardEvents","useCategoryNavigationKeyboardEvents","useBodyKeyboardEvents","onKeyDown","Escape","preventDefault","focusSkinTonePicker","setSkinToneFanOpenState","goDownFromSearchInput","useGoDownFromSearchInput","ArrowRight","ArrowDown","Enter","onType","useOnType","ArrowLeft","focusNextSkinTone","focusPrevSkinTone","ArrowUp","goUpFromBody","useGoUpFromBody","focusCategoryNavigation","goUpFromEmoji","exitLeft","currentSkinTone","hasModifier","match","metaKey","ctrlKey","altKey","preloadEmoji","preloadedEmojs","emojiUrl","preloadImage","url","image","Image","useOnFocus","PickerMain","PickerRootElement","searchModeActive","searchActive","EmojiPicker","ErrorBoundary","hasError","getDerivedStateFromError","componentDidCatch","error","errorInfo","console","render","ExportedEmoji","EmojiPickerReact"],"mappings":"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;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACrBD,IAAMU,kBAAkB,GAAG,CACzBb,iBAAS,CAACc,OADe,EAEzBd,iBAAS,CAACe,KAFe,EAGzBf,iBAAS,CAACgB,YAHe,EAIzBhB,iBAAS,CAACiB,MAJe,EAKzBjB,iBAAS,CAACkB,WALe,EAMzBlB,iBAAS,CAACmB,IANe,CAA3B;AASA,AAAO,IAAMC,cAAc,gBAAGC,MAAM,CAACC,OAAP,CAAetB,iBAAf,EAA0BuB,MAA1B,CAC5B,UAACC,GAAD;MAAOC;MAAK5C;EACV2C,GAAG,CAAC3C,KAAD,CAAH,GAAa4C,GAAb;EACA,OAAOD,GAAP;AACD,CAJ2B,EAK5B,EAL4B,CAAvB;AAQP,AAAO,IAAME,eAAe,gBAGxBb,kBAAkB,CAACU,MAAnB,CACF,UAACI,MAAD,EAASC,QAAT;EAAA;;EAAA,OACEP,MAAM,CAACQ,MAAP,CAAcF,MAAd,uCACGC,QADH,IACcA,QADd,kBADF;AAAA,CADE,EAKF,EALE,CAHG;;ACTP,IAAKE,eAAL;;AAAA,WAAKA;EACHA,uBAAA,MAAA;EACAA,0BAAA,MAAA;EACAA,6BAAA,MAAA;EACAA,2BAAA,MAAA;AACD,CALD,EAAKA,eAAe,KAAfA,eAAe,KAAA,CAApB;;AAOA,SAAgBC,WAAWC;;;EACzB,gCAAOA,KAAK,CAACF,eAAe,CAACG,IAAjB,CAAZ,oCAAsC,EAAtC;AACD;AAED,SAAgBC,QAAQF;EACtB,OAAOG,UAAU,CAACH,KAAK,CAACF,eAAe,CAACM,QAAjB,CAAN,CAAjB;AACD;AAED,SAAgBC,UAAUL;EACxB,OAAOD,UAAU,CAACC,KAAD,CAAV,CAAkB,CAAlB,CAAP;AACD;AAED,SAAgBM,uBAAuBC;EACrC,IAAMC,KAAK,GAAGD,OAAO,CAACE,KAAR,CAAc,GAAd,CAAd;;EACA,oBAAmBD,KAAK,CAACE,MAAN,CAAa,CAAb,EAAgB,CAAhB,CAAnB;MAAOd,QAAP;;EAEA,IAAIF,eAAe,CAACE,QAAD,CAAnB,EAA+B;IAC7B,OAAOY,KAAK,CAACxE,IAAN,CAAW,GAAX,CAAP;;;EAGF,OAAOuE,OAAP;AACD;AAED,SAAgBI,aAAaX,OAAkBJ;;;EAC7C,IAAMW,OAAO,GAAGP,KAAK,CAACF,eAAe,CAACS,OAAjB,CAArB;;EAEA,IAAI,CAACX,QAAD,IAAa,CAACgB,kBAAkB,CAACZ,KAAD,CAApC,EAA6C;IAC3C,OAAOO,OAAP;;;EAGF,gCAAOM,qBAAqB,CAACb,KAAD,EAAQJ,QAAR,CAA5B,oCAAiDW,OAAjD;AACD;AAED,SAAgBO,iBAAiBC;;;;EAE/B,2BAAOC,MAAP,oBAAOA,MAAM,CAAGD,QAAH,CAAb,+BAA6B,EAA7B;AACD;;AAGD,SAAgBE,kBACdV,SACA/B;EAEA,YAAUD,MAAM,CAACC,UAAD,CAAhB,GAA+B+B,OAA/B;AACD;AAED,SAAgBW,gBAAgBlB;;;EAC9B,iCAAOA,KAAK,CAACF,eAAe,CAACqB,UAAjB,CAAZ,qCAA4C,EAA5C;AACD;AAED,SAAgBP,mBAAmBZ;EACjC,OAAOkB,eAAe,CAAClB,KAAD,CAAf,CAAuBoB,MAAvB,GAAgC,CAAvC;AACD;AAED,SAAgBP,sBACdb,OACAJ;EAEA,OAAOA,QAAQ,GACXsB,eAAe,CAAClB,KAAD,CAAf,CAAuBqB,IAAvB,CAA4B,UAACC,SAAD;IAAA,OAAeA,SAAS,CAACC,QAAV,CAAmB3B,QAAnB,CAAf;GAA5B,CADW,GAEXe,YAAY,CAACX,KAAD,CAFhB;AAGD;AAED,SAAgBwB,eAAejB;EAC7B,IAAI,CAACA,OAAL,EAAc;IACZ;;;EAGF,IAAIkB,kBAAkB,CAAClB,OAAD,CAAtB,EAAiC;IAC/B,OAAOkB,kBAAkB,CAAClB,OAAD,CAAzB;;;EAGF,IAAMmB,eAAe,GAAGpB,sBAAsB,CAACC,OAAD,CAA9C;EACA,OAAOkB,kBAAkB,CAACC,eAAD,CAAzB;AACD;AAED,AAAO,IAAMC,SAAS,gBAAetC,MAAM,CAACuC,MAAP,CAAcZ,MAAd,EAAsBa,IAAtB,EAA9B;AAEP,IAAMJ,kBAAkB,GAEpB,EAFJ;AAIAK,UAAU,CAAC;EACTH,SAAS,CAACpC,MAAV,CAAiB,UAACoC,SAAD,EAAYI,KAAZ;IACfJ,SAAS,CAAChB,YAAY,CAACoB,KAAD,CAAb,CAAT,GAAiCA,KAAjC;IACA,OAAOJ,SAAP;GAFF,EAGGF,kBAHH;AAID,CALS,CAAV;AAOA,SAAgBO,2BAA2BzB;EACzC,qBAA8BA,OAAO,CAACE,KAAR,CAAc,GAAd,CAA9B;MAASwB,iBAAT;;EACA,OAAOpD,kBAAkB,CAAC0C,QAAnB,CAA4BU,iBAA5B,IACHA,iBADG,GAEH,IAFJ;AAGD;;;AC3GD,IAAMC,iBAAiB,GAAiB,CACtCjE,kBAAU,CAACkE,SAD2B,EAEtClE,kBAAU,CAACmE,cAF2B,EAGtCnE,kBAAU,CAACoE,cAH2B,EAItCpE,kBAAU,CAACqE,UAJ2B,EAKtCrE,kBAAU,CAACsE,aAL2B,EAMtCtE,kBAAU,CAACuE,UAN2B,EAOtCvE,kBAAU,CAACwE,OAP2B,EAQtCxE,kBAAU,CAACyE,OAR2B,EAStCzE,kBAAU,CAAC0E,KAT2B,CAAxC;AAYA,AAAO,IAAMC,eAAe,GAAmB;EAC7C3C,IAAI,EAAE,eADuC;EAE7Cc,QAAQ,EAAE9C,kBAAU,CAACkE;AAFwB,CAAxC;AAKP,IAAMU,gBAAgB,8CACnB5E,kBAAU,CAACkE,SADQ,IACI;EACtBpB,QAAQ,EAAE9C,kBAAU,CAACkE,SADC;EAEtBlC,IAAI,EAAE;AAFgB,CADJ,oBAKnBhC,kBAAU,CAACmE,cALQ,IAKS;EAC3BrB,QAAQ,EAAE9C,kBAAU,CAACmE,cADM;EAE3BnC,IAAI,EAAE;AAFqB,CALT,oBASnBhC,kBAAU,CAACoE,cATQ,IASS;EAC3BtB,QAAQ,EAAE9C,kBAAU,CAACoE,cADM;EAE3BpC,IAAI,EAAE;AAFqB,CATT,oBAanBhC,kBAAU,CAACqE,UAbQ,IAaK;EACvBvB,QAAQ,EAAE9C,kBAAU,CAACqE,UADE;EAEvBrC,IAAI,EAAE;AAFiB,CAbL,oBAiBnBhC,kBAAU,CAACsE,aAjBQ,IAiBQ;EAC1BxB,QAAQ,EAAE9C,kBAAU,CAACsE,aADK;EAE1BtC,IAAI,EAAE;AAFoB,CAjBR,oBAqBnBhC,kBAAU,CAACuE,UArBQ,IAqBK;EACvBzB,QAAQ,EAAE9C,kBAAU,CAACuE,UADE;EAEvBvC,IAAI,EAAE;AAFiB,CArBL,oBAyBnBhC,kBAAU,CAACwE,OAzBQ,IAyBE;EACpB1B,QAAQ,EAAE9C,kBAAU,CAACwE,OADD;EAEpBxC,IAAI,EAAE;AAFc,CAzBF,oBA6BnBhC,kBAAU,CAACyE,OA7BQ,IA6BE;EACpB3B,QAAQ,EAAE9C,kBAAU,CAACyE,OADD;EAEpBzC,IAAI,EAAE;AAFc,CA7BF,oBAiCnBhC,kBAAU,CAAC0E,KAjCQ,IAiCA;EAClB5B,QAAQ,EAAE9C,kBAAU,CAAC0E,KADH;EAElB1C,IAAI,EAAE;AAFY,CAjCA,oBAAtB;AAuCA,SAAgB6C,qBACdC;EAEA,OAAOb,iBAAiB,CAACpG,GAAlB,CAAsB,UAAAiF,QAAQ;IACnC,oBACK8B,gBAAgB,CAAC9B,QAAD,CADrB,EAEMgC,SAAS,IAAIA,SAAS,CAAChC,QAAD,CAAtB,IAAoCgC,SAAS,CAAChC,QAAD,CAFnD;GADK,CAAP;AAMD;AAED,SAAgBiC,2BAA2BjC;EACzC,OAAOA,QAAQ,CAACA,QAAhB;AACD;AAED,SAAgBkC,+BAA+BlC;EAC7C,OAAOA,QAAQ,CAACd,IAAhB;AACD;AAWD,SAAgBiD,sBACdC,sBACAJ;;;MADAI;IAAAA,uBAA2C;;;MAC3CJ;IAAAA,YAAqC;;;EAErC,IAAMK,KAAK,GAAG,EAAd;;EAEA,IAAIL,SAAS,CAACM,cAAV,KAA6BxF,sBAAc,CAACyF,MAAhD,EAAwD;IACtDF,KAAK,CAACnF,kBAAU,CAACkE,SAAZ,CAAL,GAA8BS,eAA9B;;;EAGF,IAAMW,IAAI,GAAGT,oBAAoB,CAACM,KAAD,CAAjC;;EACA,IAAI,2BAACD,oBAAD,aAAC,sBAAsB/B,MAAvB,CAAJ,EAAmC;IACjC,OAAOmC,IAAP;;;EAGF,OAAOJ,oBAAoB,CAACrH,GAArB,CAAyB,UAAAiF,QAAQ;IACtC,IAAI,OAAOA,QAAP,KAAoB,QAAxB,EAAkC;MAChC,OAAOyC,uBAAuB,CAACzC,QAAD,EAAWqC,KAAK,CAACrC,QAAD,CAAhB,CAA9B;;;IAGF,oBACKyC,uBAAuB,CAACzC,QAAQ,CAACA,QAAV,EAAoBqC,KAAK,CAACrC,QAAQ,CAACA,QAAV,CAAzB,CAD5B,EAEKA,QAFL;GALK,CAAP;AAUD;;AAED,SAASyC,uBAAT,CACEzC,QADF,EAEE0C,QAFF;MAEEA;IAAAA,WAA2B;;;EAE3B,OAAOpE,MAAM,CAACQ,MAAP,CAAcgD,gBAAgB,CAAC9B,QAAD,CAA9B,EAA0C0C,QAA1C,CAAP;AACD;;SCvGeC,YACdC;;;MAAAA;IAAAA,aAA2B;;;EAE3B,IAAMJ,IAAI,GAAGK,gBAAgB,EAA7B;EAEA,IAAMC,aAAa,GAAGxE,MAAM,CAACQ,MAAP,CACpB0D,IAAI,CAACM,aADe,2BAEpBF,UAAU,CAACE,aAFS,oCAEQ,EAFR,CAAtB;EAIA,IAAMC,MAAM,GAAGzE,MAAM,CAACQ,MAAP,CAAc0D,IAAd,EAAoBI,UAApB,CAAf;EAEA,IAAMI,UAAU,GAAGb,qBAAqB,CAACS,UAAU,CAACI,UAAZ,EAAwB;IAC9DV,cAAc,EAAES,MAAM,CAACE;GADe,CAAxC;EAIA,IAAMC,sBAAsB,GAAGH,MAAM,CAACI,cAAP,GAC3BhG,8BAAsB,CAACiG,OADI,GAE3BL,MAAM,CAACG,sBAFX;EAIA,oBACKH,MADL;IAEEC,UAAU,EAAVA,UAFF;IAGEF,aAAa,EAAbA,aAHF;IAIEI,sBAAsB,EAAtBA;;AAEH;AAED,SAAgBL;EACd,OAAO;IACLQ,eAAe,EAAE,IADZ;IAELL,UAAU,EAAEjB,oBAAoB,EAF3B;IAGLuB,eAAe,EAAErG,iBAAS,CAACc,OAHtB;IAILN,UAAU,EAAEV,kBAAU,CAACc,KAJlB;IAKL0F,YAAY,EAAE,IALT;IAMLC,WAAW,EAAEtD,iBANR;IAOLuD,MAAM,EAAE,GAPH;IAQLC,cAAc,EAAE,KARX;IASLC,YAAY,EAAE,SAASC,qBAAT;;IAGZ3E,KAHY;;IAMZ4E,KANY,IATT;IAiBLf,aAAa,eACRgB,iBADQ,CAjBR;IAoBLX,cAAc,EAAE,KApBX;IAqBLY,iBAAiB,EAAE,QArBd;IAsBLb,sBAAsB,EAAE/F,8BAAsB,CAAC6G,MAtB1C;IAuBLC,iBAAiB,EAAE,KAvBd;IAwBLhB,mBAAmB,EAAEnG,sBAAc,CAACoH,QAxB/B;IAyBLC,KAAK,EAAEnH,aAAK,CAACgB,KAzBR;IA0BLoG,KAAK,EAAE;GA1BT;AA4BD;AA4BD,IAAMN,iBAAiB,GAAkB;EACvCO,YAAY,EAAE,OADyB;EAEvCC,cAAc,EAAE,mBAFuB;EAGvCC,WAAW,EAAE;AAH0B,CAAzC;;;ACrGA,AAcA,IAAMC,aAAa,gBAAGnJ,mBAAA,eACpBwH,gBAAgB,EADI,CAAtB;AAIA,SAAgB4B;MAAuBtJ,gBAAAA;MAAa4H;;EAClD,OACE1H,mBAAA,CAACmJ,aAAa,CAAC3I,QAAf;IAAwBC,KAAK,EAAE6G,WAAW,CAACI,MAAD;GAA1C,EACG5H,QADH,CADF;AAKD;AAED,SAAgBuJ;EACd,OAAOrJ,gBAAA,CAAiBmJ,aAAjB,CAAP;AACD;;SCdeG;EACd,uBAA8BD,eAAe,EAA7C;MAAQX,iBAAR,oBAAQA,iBAAR;;EACA,OAAOA,iBAAP;AACD;AAED,SAAgBa;EACd,wBAA4BF,eAAe,EAA3C;MAAQpB,eAAR,qBAAQA,eAAR;;EACA,OAAOA,eAAP;AACD;AAED,SAAgBuB;EACd,wBAA8BH,eAAe,EAA7C;MAAQT,iBAAR,qBAAQA,iBAAR;;EACA,OAAOA,iBAAP;AACD;AAED,SAAgBa;EACd,wBAAuBJ,eAAe,EAAtC;MAAQjH,UAAR,qBAAQA,UAAR;;EACA,OAAOA,UAAP;AACD;AAED,SAAgBsH;EACd,wBAA4BL,eAAe,EAA3C;MAAQrB,eAAR,qBAAQA,eAAR;;EACA,OAAOA,eAAP;AACD;AAED,SAAgB2B;EACd,wBAAuBN,eAAe,EAAtC;MAAQ1B,UAAR,qBAAQA,UAAR;;EACA,OAAOA,UAAP;AACD;AAED,SAAgBiC;EAId,wBAAyBP,eAAe,EAAxC;MAAQf,YAAR,qBAAQA,YAAR;;EACA,OAAOA,YAAP;AACD;AAED,SAAgBuB;EACd,wBAA0BR,eAAe,EAAzC;MAAQ5B,aAAR,qBAAQA,aAAR;;EACA,OAAOA,aAAP;AACD;AAED,SAAgBqC;EACd,wBAAkBT,eAAe,EAAjC;MAAQP,KAAR,qBAAQA,KAAR;;EAEA,IAAIA,KAAK,KAAKnH,aAAK,CAACoI,IAApB,EAA0B;IACxB,OAAO1I,iBAAiB,KAAKM,aAAK,CAACoB,IAAX,GAAkBpB,aAAK,CAACgB,KAAhD;;;EAGF,OAAOmG,KAAP;AACD;AAED,SAAgBkB;EACd,yBAAgCX,eAAe,EAA/C;MAAQzB,mBAAR,sBAAQA,mBAAR;;EACA,OAAOA,mBAAP;AACD;AAED,SAAgBqC;EACd,yBAA2BZ,eAAe,EAA1C;MAAQhB,cAAR,sBAAQA,cAAR;;EACA,OAAOA,cAAP;AACD;AAED,SAAgB6B;EAId,yBAA0Bb,eAAe,EAAzC;MAAQjB,MAAR,sBAAQA,MAAR;MAAgBW,KAAhB,sBAAgBA,KAAhB;;EACA,OAAO;IAAEX,MAAM,EAAE+B,YAAY,CAAC/B,MAAD,CAAtB;IAAgCW,KAAK,EAAEoB,YAAY,CAACpB,KAAD;GAA1D;AACD;AAED,SAAgBqB;EACd,yBAAyBf,eAAe,EAAxC;MAAQnB,YAAR,sBAAQA,YAAR;;EACA,OAAOA,YAAP;AACD;AAED,SAAgBmC;EACd,yBAA2BhB,eAAe,EAA1C;MAAQvB,cAAR,sBAAQA,cAAR;;EACA,OAAOA,cAAP;AACD;AAED,SAAgBwC;EACd,yBAAmCjB,eAAe,EAAlD;MAAQxB,sBAAR,sBAAQA,sBAAR;;EACA,OAAOA,sBAAP;AACD;AAED,SAAgB0C;EAId,yBAAwBlB,eAAe,EAAvC;MAAQlB,WAAR,sBAAQA,WAAR;;EACA,OAAOA,WAAP;AACD;;AAED,SAASgC,YAAT,CAAsBK,eAAtB;EACE,OAAO,OAAOA,eAAP,KAA2B,QAA3B,GACAA,eADA,UAEHA,eAFJ;AAGD;;AC7GM,IAAMC,sBAAsB,GAAc,EAA1C;AAEP/E,UAAU,CAAC;EACTH,SAAS,CAACpC,MAAV,CAAiB,UAACuH,WAAD,EAAc9G,KAAd;IACf,IAAM+G,gBAAgB,GAAGhH,UAAU,CAACC,KAAD,CAAV,CACtB6B,IADsB,GAEtB7F,IAFsB,CAEjB,EAFiB,EAGtBgL,OAHsB,CAGd,cAHc,EAGE,EAHF,EAItBvG,KAJsB,CAIhB,EAJgB,CAAzB;IAMAsG,gBAAgB,CAACE,OAAjB,CAAyB,UAAAC,KAAI;;;MAC3BJ,WAAW,CAACI,KAAD,CAAX,yBAAoBJ,WAAW,CAACI,KAAD,CAA/B,iCAAyC,EAAzC;MAEAJ,WAAW,CAACI,KAAD,CAAX,CAAkBvG,YAAY,CAACX,KAAD,CAA9B,IAAyCA,KAAzC;KAHF;IAKA,OAAO8G,WAAP;GAZF,EAaGD,sBAbH;AAcD,CAfS,CAAV;;SCHgBM,kBACdC,cACAC;MAAAA;IAAAA,QAAgB;;;EAEhB,gBAA0BC,cAAQ,CAAIF,YAAJ,CAAlC;MAAOG,KAAP;MAAcC,QAAd;;EACA,IAAMC,KAAK,GAAGC,YAAM,CAAgB,IAAhB,CAApB;;EAEA,SAASC,iBAAT,CAA2B9K,KAA3B;IACE,OAAO,IAAI+K,OAAJ,CAAe,UAAAC,OAAO;;;MAC3B,IAAIJ,KAAK,CAACtK,OAAV,EAAmB;QACjB2K,YAAY,CAACL,KAAK,CAACtK,OAAP,CAAZ;;;MAGFsK,KAAK,CAACtK,OAAN,cAAgBO,MAAhB,qBAAgB,QAAQoE,UAAR,CAAmB;QACjC0F,QAAQ,CAAC3K,KAAD,CAAR;QACAgL,OAAO,CAAChL,KAAD,CAAP;OAFc,EAGbwK,KAHa,CAAhB;KALK,CAAP;;;EAYF,OAAO,CAACE,KAAD,EAAQI,iBAAR,CAAP;AACD;;SCZeI;EACd,IAAMC,mBAAmB,GAAGN,YAAM,CAA0B,EAA1B,CAAlC;EACA,IAAMO,kBAAkB,GAAGzB,qBAAqB,EAAhD;EAEA,OAAO0B,aAAO,CAAC;IACb,IAAM5D,YAAY,GAAGnE,UAAU,MAAI8H,kBAAJ,CAA/B;;IAEA,IAAI,CAACA,kBAAD,IAAuBE,MAAM,CAACC,KAAP,CAAa9D,YAAb,CAA3B,EAAuD;MACrD,OAAO0D,mBAAmB,CAAC7K,OAA3B;;;IAGF,OAAOwE,SAAS,CAACpC,MAAV,CAAiB,UAAC8I,gBAAD,EAAmBrI,KAAnB;MACtB,IAAIsI,mBAAmB,CAACtI,KAAD,EAAQsE,YAAR,CAAvB,EAA8C;QAC5C+D,gBAAgB,CAAC1H,YAAY,CAACX,KAAD,CAAb,CAAhB,GAAwC,IAAxC;;;MAGF,OAAOqI,gBAAP;KALK,EAMJL,mBAAmB,CAAC7K,OANhB,CAAP;GAPY,EAcX,CAAC8K,kBAAD,CAdW,CAAd;AAeD;AAED,SAAgBM;EACd,IAAMF,gBAAgB,GAAGN,mBAAmB,EAA5C;EAEA,OAAO,SAASS,iBAAT,CAA2BxI,KAA3B;IACL,IAAMO,OAAO,GAAGD,sBAAsB,CAACK,YAAY,CAACX,KAAD,CAAb,CAAtC;IAEA,OAAOyI,OAAO,CAACJ,gBAAgB,CAAC9H,OAAD,CAAjB,CAAd;GAHF;AAKD;;AAED,SAAS+H,mBAAT,CACEtI,KADF,EAEE0I,cAFF;EAIE,OAAOxI,OAAO,CAACF,KAAD,CAAP,GAAiB0I,cAAxB;AACD;;SC5CeC,mBACdC;EAEAC,eAAS,CAAC;IACRD,QAAQ,CAAC,IAAD,CAAR;GADO,EAEN,CAACA,QAAD,CAFM,CAAT;AAGD;;SCGeE;MAAwB5M,gBAAAA;EACtC,IAAMmM,gBAAgB,GAAGN,mBAAmB,EAA5C;EACA,IAAM1D,eAAe,GAAGsB,wBAAwB,EAAhD;;EAGA,IAAMoD,SAAS,GAAG3M,YAAA,CAA0ByK,sBAA1B,CAAlB;EACA,IAAMmC,gBAAgB,GAAG5M,YAAA,CAAsB,KAAtB,CAAzB;EACA,IAAM6M,gBAAgB,GAAG7M,YAAA,CAAsB,KAAtB,CAAzB;EACA,IAAM8M,mBAAmB,GAAG9M,YAAA,CAC1BiM,gBAD0B,CAA5B;EAIA,IAAMc,oBAAoB,GAAGhC,iBAAiB,CAACiC,IAAI,CAACC,GAAL,EAAD,EAAa,GAAb,CAA9C;EACA,IAAMC,UAAU,GAAGnC,iBAAiB,CAAC,EAAD,EAAK,GAAL,CAApC;EACA,IAAMoC,oBAAoB,GAAGjC,cAAQ,CAAU,KAAV,CAArC;EACA,IAAMkC,cAAc,GAAGlC,cAAQ,CAAYjD,eAAZ,CAA/B;EACA,IAAMoF,mBAAmB,GAAGnC,cAAQ,CAAsB,IAAtB,CAApC;EACA,IAAMoC,2BAA2B,GAAGpC,cAAQ,CAAc,IAAIqC,GAAJ,EAAd,CAA5C;EACA,IAAMC,yBAAyB,GAAGtC,cAAQ,CAAmB,IAAnB,CAA1C;;EACA,gBAAkDA,cAAQ,CAAC,KAAD,CAA1D;MAAOuC,iBAAP;MAA0BC,oBAA1B;;EAEAnB,kBAAkB,CAACmB,oBAAD,CAAlB;EAEA,OACE1N,mBAAA,CAAC2N,aAAa,CAACnN,QAAf;IACEC,KAAK,EAAE;MACL4M,mBAAmB,EAAnBA,mBADK;MAELD,cAAc,EAAdA,cAFK;MAGLR,gBAAgB,EAAhBA,gBAHK;MAILC,gBAAgB,EAAhBA,gBAJK;MAKLW,yBAAyB,EAAzBA,yBALK;MAMLF,2BAA2B,EAA3BA,2BANK;MAOLX,SAAS,EAATA,SAPK;MAQLc,iBAAiB,EAAjBA,iBARK;MASLP,UAAU,EAAVA,UATK;MAULC,oBAAoB,EAApBA,oBAVK;MAWLJ,oBAAoB,EAApBA,oBAXK;MAYLD,mBAAmB,EAAnBA;;GAbJ,EAgBGhN,QAhBH,CADF;AAoBD;AAID,IAAM6N,aAAa,gBAAG3N,mBAAA,CAanB;EACDqN,mBAAmB,EAAE,CAAC,IAAD,EAAO,cAAP,CADpB;EAEDD,cAAc,EAAE,CAACxL,iBAAS,CAACc,OAAX,EAAoB,cAApB,CAFf;EAGDkK,gBAAgB,EAAE;IAAE7L,OAAO,EAAE;GAH5B;EAID8L,gBAAgB,EAAE;IAAE9L,OAAO,EAAE;GAJ5B;EAKD+L,mBAAmB,EAAE;IAAE/L,OAAO,EAAE;GAL/B;EAMDyM,yBAAyB,EAAE,CAAC,IAAD,EAAO,cAAP,CAN1B;EAODF,2BAA2B,EAAE,cAAC,IAAIC,GAAJ,EAAD,EAAY,cAAZ,CAP5B;EAQDZ,SAAS,EAAE;IAAE5L,OAAO,EAAE;GARrB;EASD0M,iBAAiB,EAAE,IATlB;EAUDP,UAAU,EAAE,CAAC,EAAD,EAAK;IAAA,OAAM,IAAI1B,OAAJ,CAAoB;MAAA,OAAMoC,SAAN;KAApB,CAAN;GAAL,CAVX;EAWDT,oBAAoB,EAAE,CAAC,KAAD,EAAQ,cAAR,CAXrB;EAYDJ,oBAAoB,EAAE,cAACC,IAAI,CAACC,GAAL,EAAD,EAAa,cAAb;AAZrB,CAbmB,CAAtB;AAgCA,SAAgBY;EACd,wBAAsB7N,gBAAA,CAAiB2N,aAAjB,CAAtB;MAAQhB,SAAR,qBAAQA,SAAR;;EACA,OAAOA,SAAP;AACD;AAED,SAAgBmB;EACd,yBAA6B9N,gBAAA,CAAiB2N,aAAjB,CAA7B;MAAQf,gBAAR,sBAAQA,gBAAR;;EACA,OAAOA,gBAAP;AACD;AAED,SAAgBmB;EACd,yBAA6B/N,gBAAA,CAAiB2N,aAAjB,CAA7B;MAAQd,gBAAR,sBAAQA,gBAAR;;EACA,OAAOA,gBAAP;AACD;AAED,SAAgBmB;EACd,yBAAuBhO,gBAAA,CAAiB2N,aAAjB,CAAvB;MAAQT,UAAR,sBAAQA,UAAR;;EACA,OAAOA,UAAP;AACD;AAED,SAAgBe;EAId,yBAA2BjO,gBAAA,CAAiB2N,aAAjB,CAA3B;MAAQP,cAAR,sBAAQA,cAAR;;EACA,OAAOA,cAAP;AACD;AAED,SAAgBc;EACd,yBAAwClO,gBAAA,CAAiB2N,aAAjB,CAAxC;MAAQL,2BAAR,sBAAQA,2BAAR;;EACA,OAAOA,2BAAP;AACD;AAED,SAAgBa;EACd,yBAA8BnO,gBAAA,CAAiB2N,aAAjB,CAA9B;MAAQF,iBAAR,sBAAQA,iBAAR;;EACA,OAAOA,iBAAP;AACD;AAED,SAAgBW;EACd,yBAAsCpO,gBAAA,CAAiB2N,aAAjB,CAAtC;MAAQH,yBAAR,sBAAQA,yBAAR;;EACA,OAAOA,yBAAP;AACD;AAED,SAAgBa;EACd,yBAAiCrO,gBAAA,CAAiB2N,aAAjB,CAAjC;MAAQR,oBAAR,sBAAQA,oBAAR;;EACA,OAAOA,oBAAP;AACD;AAED,SAKgBmB;EACd,0BAAiCtO,gBAAA,CAAiB2N,aAAjB,CAAjC;MAAQZ,oBAAR,uBAAQA,oBAAR;;EAEA,IAAOwB,gBAAP,GAA+CxB,oBAA/C;MAAyByB,kBAAzB,GAA+CzB,oBAA/C;EACA,OAAO,CACLwB,gBADK,EAEL,SAASE,eAAT;IACED,kBAAkB,CAACxB,IAAI,CAACC,GAAL,EAAD,CAAlB;GAHG,CAAP;AAMD;;SCrJeyB;EACd,IAAMC,gBAAgB,GAAGZ,mBAAmB,EAA5C;EACA,OAAO,SAASa,iBAAT;IACLD,gBAAgB,CAAC5N,OAAjB,GAA2B,IAA3B;GADF;AAGD;AAED,SAAgB8N;EACd,IAAMF,gBAAgB,GAAGZ,mBAAmB,EAA5C;EACA,OAAO,SAASe,cAAT;IACLH,gBAAgB,CAAC5N,OAAjB,GAA2B,KAA3B;GADF;AAGD;AAED,SAAgBgO;EACd,IAAMJ,gBAAgB,GAAGZ,mBAAmB,EAA5C;EACA,OAAO,SAASiB,iBAAT;IACL,OAAOL,gBAAgB,CAAC5N,OAAxB;GADF;AAGD;AAED,SAAgBkO;EACd,IAAM/O,OAAO,GAAGc,UAAU,EAA1B;EACA,IAAM8N,cAAc,GAAGD,iBAAiB,EAAxC;EACA,IAAMG,iBAAiB,GAAGD,oBAAoB,EAA9C;EAEAtC,eAAS,CAAC;IACR,IAAMyC,OAAO,GAAGhP,OAAO,CAACa,OAAxB;IACAmO,OAAO,QAAP,YAAAA,OAAO,CAAEC,gBAAT,CAA0B,WAA1B,EAAuCC,WAAvC,EAAoD;MAClDC,OAAO,EAAE;KADX;;IAIA,SAASD,WAAT;MACE,IAAIJ,iBAAiB,EAArB,EAAyB;QACvBF,cAAc;;;;IAGlB,OAAO;MACLI,OAAO,QAAP,YAAAA,OAAO,CAAEI,mBAAT,CAA6B,WAA7B,EAA0CF,WAA1C;KADF;GAXO,EAcN,CAAClP,OAAD,EAAU4O,cAAV,EAA0BE,iBAA1B,CAdM,CAAT;AAeD;;SC5CeO,kBACdC,QACAC;EAEA,IAAI,CAACD,MAAD,IAAW,CAACC,OAAhB,EAAyB;IACvB,OAAO,CAAP;;;EAGF,IAAMC,WAAW,GAAGF,MAAM,CAACG,qBAAP,GAA+B5G,KAAnD;EACA,IAAM6G,YAAY,GAAGH,OAAO,CAACE,qBAAR,GAAgC5G,KAArD;EACA,OAAO8G,IAAI,CAACC,KAAL,CAAWJ,WAAW,GAAGE,YAAzB,CAAP;AACD;AAED,SAAgBG,kBACdP,QACAC;EAEA,IAAI,CAACD,MAAD,IAAW,CAACC,OAAhB,EAAyB;IACvB,OAAO,CAAP;;;EAGF,IAAMG,YAAY,GAAGH,OAAO,CAACE,qBAAR,GAAgC5G,KAArD;EACA,IAAMiH,WAAW,GAAGP,OAAO,CAACE,qBAAR,GAAgCM,IAApD;EACA,IAAMC,UAAU,GAAGV,MAAM,CAACG,qBAAP,GAA+BM,IAAlD;EAEA,OAAOJ,IAAI,CAACC,KAAL,CAAW,CAACE,WAAW,GAAGE,UAAf,IAA6BN,YAAxC,CAAP;AACD;AAED,SAAgBO,UACdX,QACAC;EAEA,IAAI,CAACD,MAAD,IAAW,CAACC,OAAhB,EAAyB;IACvB,OAAO,CAAP;;;EAGF,IAAMW,aAAa,GAAGX,OAAO,CAACE,qBAAR,GAAgCvH,MAAtD;EACA,IAAMiI,UAAU,GAAGZ,OAAO,CAACE,qBAAR,GAAgCW,GAAnD;EACA,IAAMC,SAAS,GAAGf,MAAM,CAACG,qBAAP,GAA+BW,GAAjD;EACA,OAAOT,IAAI,CAACW,KAAL,CAAW,CAACH,UAAU,GAAGE,SAAd,IAA2BH,aAAtC,CAAP;AACD;AAED,SAAgBK,WACdjB,QACAC;EAEA,IAAI,CAACD,MAAD,IAAW,CAACC,OAAhB,EAAyB;IACvB,OAAO,KAAP;;;EAGF,IAAMW,aAAa,GAAGX,OAAO,CAACE,qBAAR,GAAgCvH,MAAtD;EACA,IAAMiI,UAAU,GAAGZ,OAAO,CAACE,qBAAR,GAAgCW,GAAnD;EACA,IAAMC,SAAS,GAAGf,MAAM,CAACG,qBAAP,GAA+BW,GAAjD;EACA,IAAMI,YAAY,GAAGlB,MAAM,CAACG,qBAAP,GAA+BvH,MAApD;EAEA,OAAOyH,IAAI,CAACW,KAAL,CAAWH,UAAU,GAAGE,SAAb,GAAyBH,aAApC,IAAqDM,YAA5D;AACD;;AAED,SAASC,cAAT,CACEC,QADF,EAEEC,GAFF,EAGEC,aAHF;EAKE,IAAID,GAAG,KAAK,CAAC,CAAb,EAAgB;IACd,IAAME,OAAO,GAAGlB,IAAI,CAACC,KAAL,CAAW,CAACc,QAAQ,CAAC5L,MAAT,GAAkB,CAAnB,IAAwB8L,aAAnC,CAAhB;IACA,IAAME,iBAAiB,GAAGD,OAAO,GAAGD,aAApC;IACA,IAAMG,gBAAgB,GAAGL,QAAQ,CAAC5L,MAAT,GAAkB,CAA3C;IACA,OAAO4L,QAAQ,CAACM,KAAT,CAAeF,iBAAf,EAAkCC,gBAAgB,GAAG,CAArD,CAAP;;;EAGF,OAAOL,QAAQ,CAACM,KAAT,CAAeL,GAAG,GAAGC,aAArB,EAAoC,CAACD,GAAG,GAAG,CAAP,IAAYC,aAAhD,CAAP;AACD;;AAED,SAASK,kBAAT,CACEC,WADF,EAEEC,UAFF,EAGEP,aAHF;EAKE,IAAMQ,OAAO,GAAGD,UAAU,GAAG,CAA7B;;EAEA,IAAIC,OAAO,GAAGR,aAAV,GAA0BM,WAAW,CAACpM,MAA1C,EAAkD;IAChD,OAAO,EAAP;;;EAGF,OAAO2L,cAAc,CAACS,WAAD,EAAcE,OAAd,EAAuBR,aAAvB,CAArB;AACD;;AAED,SAAgBS,gBACdX,UACAC,KACAC,eACAU;EAEA,IAAMC,WAAW,GAAGd,cAAc,CAACC,QAAD,EAAWC,GAAX,EAAgBC,aAAhB,CAAlC;;EAEA,OAAOW,WAAW,CAACD,UAAD,CAAX,IAA2BC,WAAW,CAACA,WAAW,CAACzM,MAAZ,GAAqB,CAAtB,CAAtC,IAAkE,IAAzE;AACD;AAED,SAAgB0M,oBACdN,aACAC,YACAP,eACAa;EAEA,IAAMC,eAAe,GAAGT,kBAAkB,CACxCC,WADwC,EAExCC,UAFwC,EAGxCP,aAHwC,CAA1C;;EAOA,OACEc,eAAe,CAACD,KAAD,CAAf,IACAC,eAAe,CAACA,eAAe,CAAC5M,MAAhB,GAAyB,CAA1B,CADf,IAEA,IAHF;AAKD;AAED,SAAgB6M,oBACdT,aACAC,YACAP,eACAa;EAEA,IAAMG,eAAe,GAAGnB,cAAc,CACpCS,WADoC,EAEpCC,UAAU,GAAG,CAFuB,EAGpCP,aAHoC,CAAtC;;EAOA,OACEgB,eAAe,CAACH,KAAD,CAAf,IACAG,eAAe,CAACA,eAAe,CAAC9M,MAAhB,GAAyB,CAA1B,CADf,IAEA,IAHF;AAKD;AAED,SAAgB+M,+BACdvC,QACAoB;EAEA,IAAI,CAACpB,MAAD,IAAW,CAACoB,QAAQ,CAAC5L,MAAzB,EAAiC;IAC/B,OAAO,IAAP;;;EAGF,IAAMuL,SAAS,GAAGf,MAAM,CAACG,qBAAP,GAA+BW,GAAjD;EACA,IAAM0B,YAAY,GAAGxC,MAAM,CAACG,qBAAP,GAA+BsC,MAApD;EAEA,IAAMC,eAAe,GAAGtB,QAAQ,CAAC3L,IAAT,CAAc,UAAAwK,OAAO;IAC3C,IAAMY,UAAU,GAAGZ,OAAO,CAACE,qBAAR,GAAgCW,GAAnD;IACA,IAAM6B,aAAa,GAAG1C,OAAO,CAACE,qBAAR,GAAgCsC,MAAtD;IAEA,OACG5B,UAAU,IAAIE,SAAd,IAA2BF,UAAU,IAAI2B,YAA1C,IACCG,aAAa,IAAI5B,SAAjB,IAA8B4B,aAAa,IAAIH,YAFlD;GAJsB,CAAxB;EAUA,OAAOE,eAAe,IAAI,IAA1B;AACD;AAED,SAAgBE,sBAAsB3C;EACpC,OAAO,CAAC,CAACA,OAAO,CAAC4C,kBAAjB;AACD;;AC3JM,IAAMC,mBAAmB,2BAAY9S,WAAW,CAACD,UAAU,CAACqE,KAAZ,CAAhD;AACP,AAAO,IAAM2O,oBAAoB,gBAAG,CAClCD,mBADkC,EAElC9S,WAAW,CAACD,UAAU,CAACiT,OAAZ,CAFuB,YAG1BhT,WAAW,CAACD,UAAU,CAACkT,MAAZ,CAHe,QAIlC7S,IAJkC,CAI7B,EAJ6B,CAA7B;AAMP,SAAgB8S,iBACdC;;;EAEA,gCAAOA,YAAP,oBAAOA,YAAY,CAAEC,OAAd,CAAsBN,mBAAtB,CAAP,oCAAqD,IAArD;AACD;AAED,SAQgBO,iBACdpD;EAEA,IAAMqD,eAAe,GAAGC,+BAA+B,CAACtD,OAAD,CAAvD;EACA,IAAMtL,OAAO,GAAG6O,uBAAuB,CAACvD,OAAD,CAAvC;;EAEA,IAAI,CAACqD,eAAL,EAAsB;IACpB,OAAO,EAAP;;;EAGF,IAAMlP,KAAK,GAAGwB,cAAc,CAAC0N,eAAD,CAA5B;;EAEA,IAAI,CAAClP,KAAL,EAAY;IACV,OAAO,EAAP;;;EAGF,OAAO,CAACA,KAAD,EAAQO,OAAR,CAAP;AACD;AAED,SAAgB8O,eAAexD;;;EAC7B,OAAOpD,OAAO,CACZ,CAAAoD,OAAO,QAAP,YAAAA,OAAO,CAAEjO,OAAT,CAAiB8Q,mBAAjB,OACE7C,OADF,6CACEA,OAAO,CAAEyD,aADX,qBACE,sBAAwB1R,OAAxB,CAAgC8Q,mBAAhC,CADF,CADY,CAAd;AAID;AAED,SAagBlC,cAAcX;;;EAC5B,gCAAOA,OAAP,oBAAOA,OAAO,CAAE0D,YAAhB,oCAAgC,CAAhC;AACD;AAED,SAAgBC,mBAAmB3D;EACjC,IAAI,CAACA,OAAL,EAAc;IACZ,OAAO,CAAP;;;EAGF,IAAM4D,MAAM,GAAGX,gBAAgB,CAACjD,OAAD,CAA/B;EACA,IAAM9K,QAAQ,GAAG2O,eAAe,CAACD,MAAD,CAAhC;;EAGA,IAAME,WAAW,GAAGC,mBAAmB,CAAC7O,QAAD,CAAvC;EAEA,OAAO8O,gBAAgB,CAACJ,MAAD,CAAhB,GAA2BI,gBAAgB,CAAC9O,QAAD,CAA3C,GAAwD4O,WAA/D;AACD;AAED,SAAgBC,oBAAoB7O;;;EAClC,IAAI,CAACA,QAAL,EAAe;IACb,OAAO,CAAP;;;EAGF,IAAM+O,oBAAoB,GAAG/O,QAAQ,CAACgP,aAAT,CAC3BnU,WAAW,CAACD,UAAU,CAACqU,eAAZ,CADgB,CAA7B;EAIA,OACE,0BAACjP,QAAD,oBAACA,QAAQ,CAAEwO,YAAX,oCAA2B,CAA3B,8BAAiCO,oBAAjC,oBAAiCA,oBAAoB,CAAEP,YAAvD,oCAAuE,CAAvE,CADF;AAGD;AAED,SAAgBU,mBAAmBjQ;EACjC,IAAI,CAACA,KAAL,EAAY;IACV,OAAO,KAAP;;;EAGF,OACEkQ,0BAA0B,CAAClQ,KAAD,CAA1B,GACA4P,mBAAmB,CAACF,eAAe,CAAC1P,KAAD,CAAhB,CAFrB;AAID;AAED,SAAgBmQ,gBAAgBC;EAC9B,OAAOA,IAAI,GACPA,IAAI,CAACxS,OAAL,CAAahC,WAAW,CAACD,UAAU,CAAC0U,UAAZ,CAAxB,IACED,IADF,GAEEA,IAAI,CAACL,aAAL,CAAmBnU,WAAW,CAACD,UAAU,CAAC0U,UAAZ,CAA9B,CAHK,GAIP,IAJJ;AAKD;AAED,SAAgBH,2BAA2BlQ;;;EACzC,IAAI,CAACA,KAAL,EAAY;IACV,OAAO,CAAP;;;EAGF,OAAOwP,kBAAkB,CAACxP,KAAD,CAAlB,mDAA6BsQ,iBAAiB,CAACtQ,KAAD,CAA9C,qBAA6B,mBAA0BuQ,SAAvD,oCAAoE,CAApE,CAAP;AACD;AAED,SAAgBD,kBAAkBzE;;;EAChC,IAAI,CAACA,OAAL,EAAc;IACZ,OAAO,IAAP;;;EAGF,2BAAOA,OAAO,CAACmD,OAAR,CAAgBpT,WAAW,CAACD,UAAU,CAAC0U,UAAZ,CAA3B,CAAP,+BAA8D,IAA9D;AACD;AAED,SAAgBG,mBAAmB3E;EACjC,IAAM4D,MAAM,GAAGX,gBAAgB,CAACjD,OAAD,CAA/B;EACA,IAAM9K,QAAQ,GAAG2O,eAAe,CAACD,MAAD,CAAhC;EAEA,OAAOgB,iBAAiB,CAAChB,MAAD,CAAjB,GAA4BgB,iBAAiB,CAAC1P,QAAD,CAApD;AACD;;AAED,SAAS8O,gBAAT,CAA0BhE,OAA1B;;;EACE,6BAAOA,OAAP,oBAAOA,OAAO,CAAE6E,SAAhB,iCAA6B,CAA7B;AACD;;AAED,SAASD,iBAAT,CAA2B5E,OAA3B;;;EACE,8BAAOA,OAAP,oBAAOA,OAAO,CAAE8E,UAAhB,kCAA8B,CAA9B;AACD;;AAED,SAAgBvB,wBAAwBpP;;;EACtC,6BAAO4Q,iBAAiB,CAAC9B,gBAAgB,CAAC9O,KAAD,CAAjB,EAA0B,SAA1B,CAAxB,iCAAgE,IAAhE;AACD;AAED,SAAgBmP,gCACdnP;EAEA,IAAMO,OAAO,GAAG6O,uBAAuB,CAACpP,KAAD,CAAvC;;EAEA,IAAIO,OAAJ,EAAa;IACX,OAAOD,sBAAsB,CAACC,OAAD,CAA7B;;;EAEF,OAAO,IAAP;AACD;;AAED,SAASqQ,iBAAT,CACE/E,OADF,EAEEpM,GAFF;;;EAIE,8BAAOoR,cAAc,CAAChF,OAAD,CAAd,CAAwBpM,GAAxB,CAAP,kCAAuC,IAAvC;AACD;;AAED,SAASoR,cAAT,CAAwBhF,OAAxB;;;EACE,2BAAOA,OAAP,oBAAOA,OAAO,CAAEiF,OAAhB,+BAA2B,EAA3B;AACD;;AAED,SAAgBC,eAAelF;EAC7B,OAAOA,OAAO,CAACmF,SAAR,CAAkBC,QAAlB,CAA2BtV,UAAU,CAACiT,OAAtC,CAAP;AACD;AAED,SAAgBsC,SAASrF;EACvB,IAAI,CAACA,OAAL,EAAc,OAAO,IAAP;EAEd,OAAOA,OAAO,CAACmF,SAAR,CAAkBC,QAAlB,CAA2BtV,UAAU,CAACkT,MAAtC,CAAP;AACD;AAED,SAAgBsC,iBAAiBvF;EAC/B,IAAI,CAACA,MAAL,EAAa;IACX,OAAO,EAAP;;;EAGF,OAAOwF,KAAK,CAACC,IAAN,CACLzF,MAAM,CAAC0F,gBAAP,CAAwB3C,oBAAxB,CADK,CAAP;AAGD;AAED,SAAgB4C,iBAAiB1F;EAC/B,IAAI,CAACA,OAAL,EAAc,OAAO,IAAP;EAEd,IAAMlK,SAAS,GAAGwP,gBAAgB,CAACtF,OAAD,CAAlC;;EACA,uBAAelK,SAAS,CAAC2L,KAAV,CAAgB,CAAC,CAAjB,CAAf;MAAOkE,IAAP;;EACA,IAAI,CAACA,IAAL,EAAW;IACT,OAAO,IAAP;;;EAGF,IAAI,CAACT,cAAc,CAACS,IAAD,CAAnB,EAA2B;IACzB,OAAOC,gBAAgB,CAACD,IAAD,CAAvB;;;EAGF,OAAOA,IAAP;AACD;AAED,SAAgBE,iBAAiB7F;EAC/B,IAAM8F,IAAI,GAAG9F,OAAO,CAAC4C,kBAArB;;EAEA,IAAI,CAACkD,IAAL,EAAW;IACT,OAAOC,iBAAiB,CAACC,YAAY,CAAChG,OAAD,CAAb,CAAxB;;;EAGF,IAAI,CAACkF,cAAc,CAACY,IAAD,CAAnB,EAA2B;IACzB,OAAOD,gBAAgB,CAACC,IAAD,CAAvB;;;EAGF,OAAOA,IAAP;AACD;AAED,SAAgBF,iBAAiB5F;EAC/B,IAAMiG,IAAI,GAAGjG,OAAO,CAACkG,sBAArB;;EAEA,IAAI,CAACD,IAAL,EAAW;IACT,OAAOP,gBAAgB,CAACS,YAAY,CAACnG,OAAD,CAAb,CAAvB;;;EAGF,IAAI,CAACkF,cAAc,CAACe,IAAD,CAAnB,EAA2B;IACzB,OAAOL,gBAAgB,CAACK,IAAD,CAAvB;;;EAGF,OAAOA,IAAP;AACD;AAED,SAAgBF,kBAAkBhG;EAChC,IAAI,CAACA,MAAL,EAAa;IACX,OAAO,IAAP;;;EAGF,IAAMjK,SAAS,GAAGwP,gBAAgB,CAACvF,MAAD,CAAlC;EAEA,OAAOuC,8BAA8B,CAACvC,MAAD,EAASjK,SAAT,CAArC;AACD;AAED,SAAgBqQ,aAAanG;EAC3B,IAAM9K,QAAQ,GAAG2O,eAAe,CAAC7D,OAAD,CAAhC;;EAEA,IAAI,CAAC9K,QAAL,EAAe;IACb,OAAO,IAAP;;;EAGF,IAAM+Q,IAAI,GAAG/Q,QAAQ,CAACgR,sBAAtB;;EAEA,IAAI,CAACD,IAAL,EAAW;IACT,OAAO,IAAP;;;EAGF,IAAIZ,QAAQ,CAACY,IAAD,CAAZ,EAAoB;IAClB,OAAOE,YAAY,CAACF,IAAD,CAAnB;;;EAGF,OAAOA,IAAP;AACD;AAED,SAAgBD,aAAahG;EAC3B,IAAM9K,QAAQ,GAAG2O,eAAe,CAAC7D,OAAD,CAAhC;;EAEA,IAAI,CAAC9K,QAAL,EAAe;IACb,OAAO,IAAP;;;EAGF,IAAM4Q,IAAI,GAAG5Q,QAAQ,CAAC0N,kBAAtB;;EAEA,IAAI,CAACkD,IAAL,EAAW;IACT,OAAO,IAAP;;;EAGF,IAAIT,QAAQ,CAACS,IAAD,CAAZ,EAAoB;IAClB,OAAOE,YAAY,CAACF,IAAD,CAAnB;;;EAGF,OAAOA,IAAP;AACD;AAED,SAAgBjC,gBAAgB7D;EAC9B,IAAI,CAACA,OAAL,EAAc;IACZ,OAAO,IAAP;;;EAEF,OAAOA,OAAO,CAACmD,OAAR,CAAgBpT,WAAW,CAACD,UAAU,CAACoF,QAAZ,CAA3B,CAAP;AACD;AAED,SAAgBkR,uBAAuBpG;EACrC,IAAI,CAACA,OAAL,EAAc;IACZ,OAAO,IAAP;;;EAEF,OAAOA,OAAO,CAACmD,OAAR,CACLpT,WAAW,CAACD,UAAU,CAACqU,eAAZ,CADN,CAAP;AAGD;;SCnTekC,iBAAiB3R;EAC/B,OAAOA,OAAO,CACXE,KADI,CACE,GADF,EAEJ3E,GAFI,CAEA,UAAAqW,GAAG;IAAA,OAAIC,MAAM,CAACC,aAAP,CAAqBC,QAAQ,CAACH,GAAD,EAAM,EAAN,CAA7B,CAAJ;GAFH,EAGJnW,IAHI,CAGC,EAHD,CAAP;AAID;;ACAD,IAAMuW,gBAAgB,GAAG,eAAzB;AAUA,SAAgBC,aAAaC;EAC3B,IAAI;IAAA;;IACF,IAAI,aAAC/U,MAAD,aAAC,QAAQgV,YAAT,CAAJ,EAA2B;MACzB,OAAO,EAAP;;;IAEF,IAAMC,MAAM,GAAGC,IAAI,CAACC,KAAL,sCACbnV,MADa,qBACb,SAAQgV,YAAR,CAAqBI,OAArB,CAA6BP,gBAA7B,CADa,oCACqC,IADrC,CAAf;;IAIA,IAAIE,IAAI,KAAK5U,sBAAc,CAACoH,QAA5B,EAAsC;MACpC,OAAO0N,MAAM,CAACI,IAAP,CAAY,UAACC,CAAD,EAAIC,CAAJ;QAAA,OAAUA,CAAC,CAACC,KAAF,GAAUF,CAAC,CAACE,KAAtB;OAAZ,CAAP;;;IAGF,OAAOP,MAAP;GAZF,CAaE,gBAAM;IACN,OAAO,EAAP;;AAEH;AAED,SAAgBQ,aAAanT,OAAkBJ;EAC7C,IAAM+S,MAAM,GAAGH,YAAY,EAA3B;EAEA,IAAMjS,OAAO,GAAGI,YAAY,CAACX,KAAD,EAAQJ,QAAR,CAA5B;EACA,IAAMsP,eAAe,GAAGvO,YAAY,CAACX,KAAD,CAApC;EAEA,IAAIoT,QAAQ,GAAGT,MAAM,CAACtR,IAAP,CAAY;IAAA,IAAYgS,CAAZ,QAAG9S,OAAH;IAAA,OAAoB8S,CAAC,KAAK9S,OAA1B;GAAZ,CAAf;EAEA,IAAI+S,QAAJ;;EAEA,IAAIF,QAAJ,EAAc;IACZE,QAAQ,GAAG,CAACF,QAAD,EAAWG,MAAX,CAAkBZ,MAAM,CAACa,MAAP,CAAc,UAAAC,CAAC;MAAA,OAAIA,CAAC,KAAKL,QAAV;KAAf,CAAlB,CAAX;GADF,MAEO;IACLA,QAAQ,GAAG;MACT7S,OAAO,EAAPA,OADS;MAETmT,QAAQ,EAAExE,eAFD;MAGTgE,KAAK,EAAE;KAHT;IAKAI,QAAQ,IAAIF,QAAJ,SAAiBT,MAAjB,CAAR;;;EAGFS,QAAQ,CAACF,KAAT;EAEAI,QAAQ,CAAClS,MAAT,GAAkB6K,IAAI,CAAC0H,GAAL,CAASL,QAAQ,CAAClS,MAAlB,EAA0B,EAA1B,CAAlB;;EAEA,IAAI;IAAA;;IACF,YAAA1D,MAAM,SAAN,qBAAQgV,YAAR,CAAqBkB,OAArB,CAA6BrB,gBAA7B,EAA+CK,IAAI,CAACiB,SAAL,CAAeP,QAAf,CAA/C,EADE;GAAJ,CAGE,iBAAM;;AAGT;;SC1DeQ;EACd,4BAA8CtJ,4BAA4B,EAA1E;MAAOuJ,eAAP;MAAwBC,kBAAxB;;EACA,4BAA8CvJ,uBAAuB,EAArE;MAAOwJ,eAAP;MAAwBC,kBAAxB;;EAEA,IAAMC,mBAAmB,GAAGC,iBAAW,CAAC;IACtC,IAAIL,eAAJ,EAAqB;MACnBC,kBAAkB,CAAC,IAAD,CAAlB;;;IAGF,IAAIC,eAAJ,EAAqB;MACnBC,kBAAkB,CAAC,KAAD,CAAlB;;GANmC,EAQpC,CACDH,eADC,EAEDE,eAFC,EAGDD,kBAHC,EAIDE,kBAJC,CARoC,CAAvC;EAeA,OAAOC,mBAAP;AACD;AAED,SAAgBE;EACd,6BAA0B7J,4BAA4B,EAAtD;MAAOuJ,eAAP;;EACA,6BAA0BtJ,uBAAuB,EAAjD;MAAOwJ,eAAP;;EAEA,OAAO,SAASK,cAAT;IACL,OAAO,CAAC,CAACP,eAAF,IAAqBE,eAA5B;GADF;AAGD;;SChCuBM;EACtB,IAAMC,mBAAmB,GAAGvX,sBAAsB,EAAlD;;EACA,4BAAoCuN,4BAA4B,EAAhE;MAASiK,uBAAT;;EAEA,OAAO,SAAST,kBAAT,CAA4BnI,OAA5B;IACL,wBAAgBoD,gBAAgB,CAACpD,OAAD,CAAhC;QAAO7L,KAAP;;IAEA,IAAI,CAACA,KAAL,EAAY;MACV;;;IAGFwU,mBAAmB,CAAC3I,OAAD,CAAnB;IACA4I,uBAAuB,CAACzU,KAAD,CAAvB;GARF;AAUD;;SCee0U,qBACdpY;EAEA,IAAMqY,iBAAiB,GAAGjN,YAAM,EAAhC;EACA,IAAMsM,kBAAkB,GAAGO,qBAAqB,EAAhD;EACA,IAAMvL,gBAAgB,GAAGkB,mBAAmB,EAA5C;;EACA,4BAAoCM,4BAA4B,EAAhE;MAASiK,uBAAT;;EACA,IAAMN,mBAAmB,GAAGL,sBAAsB,EAAlD;;EACA,4BAAyBzJ,sBAAsB,EAA/C;MAAOb,cAAP;;EACA,IAAM9E,YAAY,GAAGsB,qBAAqB,EAA1C;;EACA,0BAA4B0E,kBAAkB,EAA9C;MAASG,eAAT;;EACA,IAAMtG,WAAW,GAAGoC,oBAAoB,EAAxC;EAEA,IAAMiO,OAAO,GAAGxY,iBAAA,CACd,SAASwY,OAAT,CAAiBhQ,KAAjB;IACE,IAAIoE,gBAAgB,CAAC7L,OAArB,EAA8B;MAC5B;;;IAGFgX,mBAAmB;;IAEnB,sBAAyBU,cAAc,CAACjQ,KAAD,CAAvC;QAAO5E,KAAP;QAAcO,OAAd;;IAEA,IAAI,CAACP,KAAD,IAAU,CAACO,OAAf,EAAwB;MACtB;;;IAGF,IAAMuU,aAAa,GACjB9S,0BAA0B,CAACzB,OAAD,CAA1B,IAAuCiJ,cADzC;IAGAqB,eAAe;IACfsI,YAAY,CAACnT,KAAD,EAAQ8U,aAAR,CAAZ;IACApQ,YAAY,CAACqQ,gBAAgB,CAAC/U,KAAD,EAAQ8U,aAAR,EAAuBvQ,WAAvB,CAAjB,EAAsDK,KAAtD,CAAZ;GAnBY,EAqBd,CACE4E,cADF,EAEE2K,mBAFF,EAGEnL,gBAHF,EAIEtE,YAJF,EAKEmG,eALF,EAMEtG,WANF,CArBc,CAAhB;EA+BA,IAAMyQ,WAAW,GAAG5Y,iBAAA,CAClB,SAAS4Y,WAAT,CAAqBpQ,KAArB;;;IACE,IAAI+P,iBAAiB,CAACxX,OAAtB,EAA+B;MAC7B2K,YAAY,CAAC6M,iBAAiB,CAACxX,OAAnB,CAAZ;;;IAGF,uBAAgB0X,cAAc,CAACjQ,KAAD,CAA9B;QAAO5E,KAAP;;IAEA,IAAI,CAACA,KAAD,IAAU,CAACY,kBAAkB,CAACZ,KAAD,CAAjC,EAA0C;MACxC;;;IAGF2U,iBAAiB,CAACxX,OAAlB,cAA4BO,MAA5B,qBAA4B,QAAQoE,UAAR,CAAmB;MAC7CkH,gBAAgB,CAAC7L,OAAjB,GAA2B,IAA3B;MACAwX,iBAAiB,CAACxX,OAAlB,GAA4B6M,SAA5B;MACAmK,mBAAmB;MACnBH,kBAAkB,CAACpP,KAAK,CAAC1H,MAAP,CAAlB;MACAuX,uBAAuB,CAACzU,KAAD,CAAvB;KAL0B,EAMzB,GANyB,CAA5B;GAZgB,EAoBlB,CACEgJ,gBADF,EAEEmL,mBAFF,EAGEH,kBAHF,EAIES,uBAJF,CApBkB,CAApB;EA2BA,IAAMQ,SAAS,GAAG7Y,iBAAA,CAChB,SAAS6Y,SAAT;IACE,IAAIN,iBAAiB,CAACxX,OAAtB,EAA+B;MAC7B2K,YAAY,CAAC6M,iBAAiB,CAACxX,OAAnB,CAAZ;MACAwX,iBAAiB,CAACxX,OAAlB,GAA4B6M,SAA5B;KAFF,MAGO,IAAIhB,gBAAgB,CAAC7L,OAArB,EAA8B;;;;;;MAOnC+X,qBAAqB,CAAC;QACpBlM,gBAAgB,CAAC7L,OAAjB,GAA2B,KAA3B;OADmB,CAArB;;GAZY,EAiBhB,CAAC6L,gBAAD,CAjBgB,CAAlB;EAoBAH,eAAS,CAAC;IACR,IAAI,CAACvM,OAAO,CAACa,OAAb,EAAsB;MACpB;;;IAEF,IAAMmO,OAAO,GAAGhP,OAAO,CAACa,OAAxB;IACAmO,OAAO,CAACC,gBAAR,CAAyB,OAAzB,EAAkCqJ,OAAlC,EAA2C;MACzCnJ,OAAO,EAAE;KADX;IAIAH,OAAO,CAACC,gBAAR,CAAyB,WAAzB,EAAsCyJ,WAAtC,EAAmD;MACjDvJ,OAAO,EAAE;KADX;IAGAH,OAAO,CAACC,gBAAR,CAAyB,SAAzB,EAAoC0J,SAApC,EAA+C;MAC7CxJ,OAAO,EAAE;KADX;IAIA,OAAO;MACLH,OAAO,QAAP,YAAAA,OAAO,CAAEI,mBAAT,CAA6B,OAA7B,EAAsCkJ,OAAtC;MACAtJ,OAAO,QAAP,YAAAA,OAAO,CAAEI,mBAAT,CAA6B,WAA7B,EAA0CsJ,WAA1C;MACA1J,OAAO,QAAP,YAAAA,OAAO,CAAEI,mBAAT,CAA6B,SAA7B,EAAwCuJ,SAAxC;KAHF;GAhBO,EAqBN,CAAC3Y,OAAD,EAAUsY,OAAV,EAAmBI,WAAnB,EAAgCC,SAAhC,CArBM,CAAT;AAsBD;;AAED,SAASJ,cAAT,CAAwBjQ,KAAxB;EACE,IAAM1H,MAAM,GAAG0H,KAAH,oBAAGA,KAAK,CAAE1H,MAAtB;;EACA,IAAI,CAACmS,cAAc,CAACnS,MAAD,CAAnB,EAA6B;IAC3B,OAAO,EAAP;;;EAGF,OAAO+R,gBAAgB,CAAC/R,MAAD,CAAvB;AACD;;AAED,SAAS6X,gBAAT,CACE/U,KADF,EAEEwJ,cAFF,EAGEjF,WAHF;EAKE,IAAMhE,OAAO,GAAGI,YAAY,CAACX,KAAD,EAAQwJ,cAAR,CAA5B;EACA,OAAO;IACLA,cAAc,EAAdA,cADK;IAELxJ,KAAK,EAAEkS,gBAAgB,CAAC3R,OAAD,CAFlB;IAGL4U,WAHK,uBAGO3W,UAHP;MAIH,OAAO+F,WAAW,CAAChE,OAAD,EAAU/B,UAAV,CAAlB;KAJG;IAML4W,KAAK,EAAErV,UAAU,CAACC,KAAD,CANZ;IAOLO,OAAO,EAAPA,OAPK;IAQLD,sBAAsB,EAAEK,YAAY,CAACX,KAAD;GARtC;AAUD;;SCvKeqV,YAAY/Y;EAC1B,IAAM6X,mBAAmB,GAAGL,sBAAsB,EAAlD;EAEAjL,eAAS,CAAC;IACR,IAAMyC,OAAO,GAAGhP,OAAO,CAACa,OAAxB;;IACA,IAAI,CAACmO,OAAL,EAAc;MACZ;;;IAGFA,OAAO,CAACC,gBAAR,CAAyB,QAAzB,EAAmC+J,QAAnC,EAA6C;MAC3C7J,OAAO,EAAE;KADX;;IAIA,SAAS6J,QAAT;MACEnB,mBAAmB;;;IAGrB,OAAO;MACL7I,OAAO,QAAP,YAAAA,OAAO,CAAEI,mBAAT,CAA6B,QAA7B,EAAuC4J,QAAvC;KADF;GAdO,EAiBN,CAAChZ,OAAD,EAAU6X,mBAAV,CAjBM,CAAT;AAkBD;;SCZeoB,SAASnF,MAAuB1D;MAAAA;IAAAA,MAAc;;;EAC5D,IAAM8I,QAAQ,GAAGrF,eAAe,CAACC,IAAD,CAAhC;;EAEA,IAAI,CAACoF,QAAL,EAAe;IACb;;;EAGFN,qBAAqB,CAAC;IACpBM,QAAQ,CAACjF,SAAT,GAAqB7D,GAAG,GAAG,CAA3B;GADmB,CAArB;AAGD;AAED,SAAgB+I,SAASrF,MAAuBsF;EAC9C,IAAMF,QAAQ,GAAGrF,eAAe,CAACC,IAAD,CAAhC;;EAEA,IAAI,CAACoF,QAAL,EAAe;IACb;;;EAGFN,qBAAqB,CAAC;IACpBM,QAAQ,CAACjF,SAAT,GAAqBiF,QAAQ,CAACjF,SAAT,GAAqBmF,EAA1C;GADmB,CAArB;AAGD;AAED,SAAgBC;EACd,IAAMrZ,OAAO,GAAGc,UAAU,EAA1B;EAEA,OAAOgX,iBAAW,CAChB,UAAC1H,GAAD;IACEwI,qBAAqB,CAAC;MACpB,IAAI5Y,OAAO,CAACa,OAAZ,EAAqB;QACnBb,OAAO,CAACa,OAAR,CAAgBoT,SAAhB,GAA4B7D,GAA5B;;KAFiB,CAArB;GAFc,EAQhB,CAACpQ,OAAD,CARgB,CAAlB;AAUD;AAED,SAAgBsZ,sBAAsB5V;EACpC,IAAI,CAACA,KAAD,IAAU,CAACiQ,kBAAkB,CAACjQ,KAAD,CAAjC,EAA0C;IACxC;;;EAGF,IAAIA,KAAK,CAACgP,OAAN,CAAcpT,WAAW,CAACD,UAAU,CAACoY,eAAZ,CAAzB,CAAJ,EAA4D;IAC1D;;;EAGF,IAAM1D,UAAU,GAAGC,iBAAiB,CAACtQ,KAAD,CAApC;EACA,IAAM0V,EAAE,GAAGxF,0BAA0B,CAAClQ,KAAD,CAArC;EACAyV,QAAQ,CAACpF,UAAD,EAAa,EAAET,mBAAmB,CAACF,eAAe,CAAC1P,KAAD,CAAhB,CAAnB,GAA8C0V,EAAhD,CAAb,CAAR;AACD;;SChEeG,aAAahK;EAC3B,IAAI,CAACA,OAAL,EAAc;IACZ;;;EAGFqJ,qBAAqB,CAAC;IACpBrJ,OAAO,CAACiK,KAAR;GADmB,CAArB;AAGD;AAED,SAAgBC,wBAAwBlK;EACtC,IAAI,CAACA,OAAL,EAAc;EAEd,IAAMiG,IAAI,GAAGjG,OAAO,CAACkG,sBAArB;EAEA8D,YAAY,CAAC/D,IAAD,CAAZ;AACD;AAED,SAAgBkE,wBAAwBnK;EACtC,IAAI,CAACA,OAAL,EAAc;EAEd,IAAM8F,IAAI,GAAG9F,OAAO,CAAC4C,kBAArB;EAEAoH,YAAY,CAAClE,IAAD,CAAZ;AACD;AAED,SAAgBsE,uBAAuBpK;EACrC,IAAI,CAACA,OAAL,EAAc;EAEd,IAAMqK,KAAK,GAAGrK,OAAO,CAACsK,iBAAtB;EAEAN,YAAY,CAACK,KAAD,CAAZ;AACD;;SCzBeE;EACd,IAAM7Z,cAAc,GAAGc,iBAAiB,EAAxC;EAEA,OAAO+W,iBAAW,CAAC;IACjByB,YAAY,CAACtZ,cAAc,CAACY,OAAhB,CAAZ;GADgB,EAEf,CAACZ,cAAD,CAFe,CAAlB;AAGD;AAED,SAAgB8Z;EACd,IAAM7Z,iBAAiB,GAAGc,oBAAoB,EAA9C;EAEA,OAAO8W,iBAAW,CAAC;IACjB,IAAI,CAAC5X,iBAAiB,CAACW,OAAvB,EAAgC;MAC9B;;;IAGF8Y,sBAAsB,CAACzZ,iBAAiB,CAACW,OAAnB,CAAtB;GALgB,EAMf,CAACX,iBAAD,CANe,CAAlB;AAOD;AAED,SAAgB8Z;EACd,IAAM7Z,qBAAqB,GAAGc,wBAAwB,EAAtD;EAEA,OAAO6W,iBAAW,CAAC;IACjB,IAAI,CAAC3X,qBAAqB,CAACU,OAA3B,EAAoC;MAClC;;;IAGF8Y,sBAAsB,CAACxZ,qBAAqB,CAACU,OAAvB,CAAtB;GALgB,EAMf,CAACV,qBAAD,CANe,CAAlB;AAOD;;ACxBD,SAAS8Z,eAAT;EACE,IAAMxN,SAAS,GAAGkB,YAAY,EAA9B;EAEA,OAAO,SAASuM,SAAT,CACLC,MADK;IAGL,IAAI,OAAOA,MAAP,KAAkB,UAAtB,EAAkC;MAChC,OAAOD,SAAS,CAACC,MAAM,CAAC1N,SAAS,CAAC5L,OAAX,CAAP,CAAhB;;;IAGF4L,SAAS,CAAC5L,OAAV,GAAoBsZ,MAApB;GAPF;AASD;;AAED,SAAgBC;EACd,IAAMC,WAAW,GAAGC,cAAc,EAAlC;EACA,IAAMra,cAAc,GAAGc,iBAAiB,EAAxC;EACA,IAAMwZ,gBAAgB,GAAGT,mBAAmB,EAA5C;EAEA,OAAO,SAASU,WAAT;IACL,IAAIva,cAAc,CAACY,OAAnB,EAA4B;MAC1BZ,cAAc,CAACY,OAAf,CAAuBN,KAAvB,GAA+B,EAA/B;;;IAGF8Z,WAAW,CAAC,EAAD,CAAX;IACAE,gBAAgB;GANlB;AAQD;AAED,SAAgBE;EACd,IAAMxa,cAAc,GAAGc,iBAAiB,EAAxC;EACA,IAAMsZ,WAAW,GAAGC,cAAc,EAAlC;EAEA,OAAO,SAASI,YAAT,CAAsBC,GAAtB;IACL,IAAI1a,cAAc,CAACY,OAAnB,EAA4B;MAC1BZ,cAAc,CAACY,OAAf,CAAuBN,KAAvB,QAAkCN,cAAc,CAACY,OAAf,CAAuBN,KAAzD,GAAiEoa,GAAjE;MACAN,WAAW,CAACO,uBAAuB,CAAC3a,cAAc,CAACY,OAAf,CAAuBN,KAAxB,CAAxB,CAAX;KAFF,MAGO;MACL8Z,WAAW,CAACO,uBAAuB,CAACD,GAAD,CAAxB,CAAX;;GALJ;AAQD;AAED,SAAgBE;EACd,IAAM5a,cAAc,GAAGc,iBAAiB,EAAxC;EACA,IAAM0L,SAAS,GAAGkB,YAAY,EAA9B;EACA,IAAMmN,YAAY,GAAGb,eAAe,EAApC;EACA,IAAMI,WAAW,GAAGC,cAAc,EAAlC;;EAEA,0BAAqBxM,kBAAkB,EAAvC;MAAOd,UAAP;;EAEA,OAAO;IACL+N,QAAQ,EAARA,QADK;IAEL/N,UAAU,EAAVA,UAFK;IAGL/M,cAAc,EAAdA;GAHF;;EAMA,SAAS8a,QAAT,CAAkBC,UAAlB;IACE,IAAM9D,MAAM,GAAGzK,SAAS,CAAC5L,OAAzB;IAEA,IAAMoa,SAAS,GAAGD,UAAU,CAACE,WAAX,EAAlB;;IAEA,IAAIhE,MAAM,QAAN,IAAAA,MAAM,CAAG+D,SAAH,CAAN,IAAuBA,SAAS,CAACnW,MAAV,IAAoB,CAA/C,EAAkD;MAChD,OAAOuV,WAAW,CAACY,SAAD,CAAlB;;;IAGF,IAAME,YAAY,GAAGC,gBAAgB,CAACH,SAAD,EAAY/D,MAAZ,CAArC;;IAEA,IAAI,CAACiE,YAAL,EAAmB;;;MAGjB,OAAOd,WAAW,CAACY,SAAD,CAAlB;;;IAGFH,YAAY,CAAC,UAACja,OAAD;MAAA;;MAAA,OACXkC,MAAM,CAACQ,MAAP,CAAc1C,OAAd,uCACGoa,SADH,IACeI,0BAA0B,CAACF,YAAD,EAAeF,SAAf,CADzC,kBADW;KAAD,CAAZ;IAKAZ,WAAW,CAACY,SAAD,CAAX;;AAEH;;AAED,SAASX,cAAT;EACE,2BAA0BxM,kBAAkB,EAA5C;MAASwN,aAAT;;EACA,IAAMzb,aAAa,GAAGY,gBAAgB,EAAtC;EAEA,OAAO,SAAS4Z,WAAT,CAAqBrN,UAArB;IACL4L,qBAAqB,CAAC;MACpB0C,aAAa,CAACtO,UAAU,GAAGA,UAAH,oBAAGA,UAAU,CAAEkO,WAAZ,EAAH,GAA+BlO,UAA1C,CAAb,CAAmEuO,IAAnE,CACE;QACEtC,QAAQ,CAACpZ,aAAa,CAACgB,OAAf,EAAwB,CAAxB,CAAR;OAFJ;KADmB,CAArB;GADF;AASD;;AAED,SAASwa,0BAAT,CACE3W,MADF,EAEE8W,OAFF;EAIE,IAAMC,QAAQ,GAAe,EAA7B;;EAEA,KAAK,IAAMxX,OAAX,IAAsBS,MAAtB,EAA8B;IAC5B,IAAMhB,KAAK,GAAGgB,MAAM,CAACT,OAAD,CAApB;;IAEA,IAAIyX,QAAQ,CAAChY,KAAD,EAAQ8X,OAAR,CAAZ,EAA8B;MAC5BC,QAAQ,CAACxX,OAAD,CAAR,GAAoBP,KAApB;;;;EAIJ,OAAO+X,QAAP;AACD;;AAED,SAASC,QAAT,CAAkBhY,KAAlB,EAAoC8X,OAApC;EACE,OAAO/X,UAAU,CAACC,KAAD,CAAV,CAAkBiY,IAAlB,CAAuB,UAAChY,IAAD;IAAA,OAAUA,IAAI,CAACsB,QAAL,CAAcuW,OAAd,CAAV;GAAvB,CAAP;AACD;;AAED,SAAgBI;EACd,oBAA4BjO,YAAY,EAAxC;MAAiBuJ,MAAjB,iBAAQrW,OAAR;;EACA,2BAAqBiN,kBAAkB,EAAvC;MAAOd,UAAP;;EAEA,OAAO,UAAC/I,OAAD;IAAA,OAAa4X,2BAA2B,CAAC5X,OAAD,EAAUiT,MAAV,EAAkBlK,UAAlB,CAAxC;GAAP;AACD;;AAED,SAAS6O,2BAAT,CACE5X,OADF,EAEEiT,MAFF,EAGElK,UAHF;;;EAKE,IAAI,CAACkK,MAAD,IAAW,CAAClK,UAAhB,EAA4B;IAC1B,OAAO,KAAP;;;EAGF,OAAO,wBAACkK,MAAM,CAAClK,UAAD,CAAP,aAAC,mBAAqB/I,OAArB,CAAD,CAAP;AACD;;AAID,SAASmX,gBAAT,CACEI,OADF,EAEEM,IAFF;EAIE,IAAI,CAACA,IAAL,EAAW;IACT,OAAO,IAAP;;;EAGF,IAAIA,IAAI,CAACN,OAAD,CAAR,EAAmB;IACjB,OAAOM,IAAI,CAACN,OAAD,CAAX;;;EAGF,IAAMO,kBAAkB,GAAGhZ,MAAM,CAACiZ,IAAP,CAAYF,IAAZ,EACxBrF,IADwB,CACnB,UAACC,CAAD,EAAIC,CAAJ;IAAA,OAAUA,CAAC,CAAC7R,MAAF,GAAW4R,CAAC,CAAC5R,MAAvB;GADmB,EAExBC,IAFwB,CAEnB,UAAC5B,GAAD;IAAA,OAASqY,OAAO,CAACvW,QAAR,CAAiB9B,GAAjB,CAAT;GAFmB,CAA3B;;EAIA,IAAI4Y,kBAAJ,EAAwB;IACtB,OAAOD,IAAI,CAACC,kBAAD,CAAX;;;EAGF,OAAO,IAAP;AACD;;AAED,SAAgBnB,wBAAwBD;EACtC,IAAI,CAACA,GAAD,IAAQ,OAAOA,GAAP,KAAe,QAA3B,EAAqC;IACnC,OAAO,EAAP;;;EAGF,OAAOA,GAAG,CAACsB,IAAJ,GAAWf,WAAX,EAAP;AACD;;SClLegB;EACd,4BAAiClO,8BAA8B,EAA/D;MAAOmO,sBAAP;;EACA,IAAMC,eAAe,GAAGR,kBAAkB,EAA1C;EAEA,OAAO,UAAClY,KAAD;IACL,IAAMO,OAAO,GAAGI,YAAY,CAACX,KAAD,CAA5B;IAEA,IAAM2Y,YAAY,GAAGF,sBAAsB,CAACG,GAAvB,CAA2BrY,OAA3B,CAArB;IACA,IAAMsY,WAAW,GAAGH,eAAe,CAACnY,OAAD,CAAnC;IAEA,OAAO;MACLoY,YAAY,EAAZA,YADK;MAELE,WAAW,EAAXA,WAFK;MAGLhK,MAAM,EAAE8J,YAAY,IAAIE;KAH1B;GANF;AAYD;;SCpBeC,QAAQ9Y;EACtB,OAAOA,KAAP;AACD;;SCOe+Y,OAAOC;EACrB,OACE5c,mBAAA,SAAA;IACE6c,IAAI,EAAC;KACDD;IACJE,SAAS,EAAEC,IAAI,CAAC,SAAD,EAAYH,KAAK,CAACE,SAAlB;IAHjB,EAKGF,KAAK,CAAC9c,QALT,CADF;AASD;;SCgBekd;;;MACdpZ,aAAAA;MACAO,eAAAA;MACAsO,cAAAA;MACAwK,sBAAAA;MACA7a,kBAAAA;iCACA8a;MAAAA,kDAAiB;MACjBC,YAAAA;MACAC,gBAAAA;MACAjV,mBAAAA;EAEA,IAAMkV,aAAa,GAAG7Y,kBAAkB,CAACZ,KAAD,CAAxC;EAEA,OACE5D,mBAAA,CAAC2c,MAAD;IACEG,SAAS,EAAEC,IAAI,CAACxd,UAAU,CAACqE,KAAZ,qBACZrE,UAAU,CAACkT,MADC,IACQA,MADR,QAEZlT,UAAU,CAAC0d,cAFC,IAEgBA,cAFhB,QAGZ1d,UAAU,CAACiT,OAHC,IAGS,CAACC,MAAD,IAAW,CAACwK,cAHrB,QAIZ1d,UAAU,CAAC+d,iBAJC,IAImBD,aAAa,IAAIH,cAJpC;oBAMD/Y;kBAEFF,SAAS,CAACL,KAAD;sBACLD,UAAU,CAACC,KAAD;GAV5B,EAYE5D,mBAAA,CAACud,aAAD;IACEpZ,OAAO,EAAEA;IACTP,KAAK,EAAEA;IACPuZ,IAAI,EAAEA;IACN/a,UAAU,EAAEA;IACZgb,QAAQ,EAAEA;IACVjV,WAAW,EAAEA;GANf,CAZF,CADF;AAuBD;AAED,SAAgBoV;MACd3Z,cAAAA;MACAO,gBAAAA;MACA/B,mBAAAA;MACA+a,aAAAA;MACAC,iBAAAA;gCACAjV;MAAAA,6CAActD;EAEd,IAAM2Y,KAAK,GAAG,EAAd;;EACA,IAAIL,IAAJ,EAAU;IACRK,KAAK,CAACzU,KAAN,GAAcyU,KAAK,CAACpV,MAAN,GAAeoV,KAAK,CAACC,QAAN,GAAoBN,IAApB,OAA7B;;;EAGF,IAAMO,aAAa,GAAG9Z,KAAK,GAAGA,KAAH,GAAWwB,cAAc,CAACjB,OAAD,CAApD;EAEA,OACEnE,mBAAA,eAAA,MAAA,EACGoC,UAAU,KAAKV,kBAAU,CAACic,MAA1B,GACC3d,mBAAA,CAAC4d,WAAD;IAAazZ,OAAO,EAAEA;IAASqZ,KAAK,EAAEA;GAAtC,CADD,GAGCxd,mBAAA,CAAC6d,QAAD;IACE1Z,OAAO,EAAEA;IACTqZ,KAAK,EAAEA;IACP5Z,KAAK,EAAE8Y,OAAO,CAACgB,aAAD;IACdtb,UAAU,EAAEA;IACZgb,QAAQ,EAAEA;IACVjV,WAAW,EAAEA;GANf,CAJJ,CADF;AAgBD;;AAED,SAASyV,WAAT;MACEzZ,gBAAAA;MACAqZ,cAAAA;EAKA,OACExd,mBAAA,OAAA;IACE8c,SAAS,EAAEC,IAAI,CAACxd,UAAU,CAACue,QAAZ,EAAsB,kBAAtB;oBACD3Z;IACdqZ,KAAK,EAAEA;GAHT,EAKG1H,gBAAgB,CAAC3R,OAAD,CALnB,CADF;AASD;;AAED,SAAS0Z,QAAT;MACEja,cAAAA;MACAO,gBAAAA;MACA/B,mBAAAA;MACAob,cAAAA;6BACAJ;MAAAA,uCAAW;MACXjV,oBAAAA;;EASA,4BAAsC+F,8BAA8B,EAApE;MAAS6P,yBAAT;;EAEA,OACE/d,mBAAA,MAAA;IACEge,GAAG,EAAE7V,WAAW,CAAChE,OAAD,EAAU/B,UAAV;IAChB6b,GAAG,EAAEha,SAAS,CAACL,KAAD;IACdkZ,SAAS,EAAEC,IAAI,CAACxd,UAAU,CAACue,QAAZ,EAAsB,eAAtB;IACfI,OAAO,EAAEd,QAAQ,GAAG,MAAH,GAAY;IAC7Be,OAAO,EAAEA;IACTX,KAAK,EAAEA;GANT,CADF;;EAWA,SAASW,OAAT;IACEJ,yBAAyB,CAAC,UAACrI,IAAD;MAAA,OAAU,IAAInI,GAAJ,CAAQmI,IAAR,EAAc0I,GAAd,CAAkBja,OAAlB,CAAV;KAAD,CAAzB;;AAEH;;SC3Ieka;;;MACdC,sBAAAA;MACAxe,gBAAAA;MACA2S,cAAAA;MACAwK,sBAAAA;EAEA,IAAMtY,QAAQ,GAAGiC,0BAA0B,CAAC0X,cAAD,CAA3C;EACA,IAAMC,YAAY,GAAG1X,8BAA8B,CAACyX,cAAD,CAAnD;EAEA,OACEte,mBAAA,KAAA;IACE8c,SAAS,EAAEC,IAAI,CAACxd,UAAU,CAACoF,QAAZ,qBACZpF,UAAU,CAACkT,MADC,IACQA,MADR,QAEZlT,UAAU,CAAC0d,cAFC,IAEgBA,cAFhB;iBAIJtY;kBACC4Z;GANd,EAQEve,mBAAA,MAAA;IAAK8c,SAAS,EAAEvd,UAAU,CAACif;GAA3B,EAAmCD,YAAnC,CARF,EASEve,mBAAA,MAAA;IAAK8c,SAAS,EAAEvd,UAAU,CAACqU;GAA3B,EAA6C9T,QAA7C,CATF,CADF;AAaD;;SCrBe2e;MAAYH,sBAAAA;;EAC1B,0BAA2BhQ,kBAAkB,EAA7C;MAAOC,gBAAP;;EACA,IAAMmQ,yBAAyB,GAAG1U,4BAA4B,EAA9D;EACA,IAAM7B,WAAW,GAAGoC,oBAAoB,EAAxC;EACA,IAAMoU,SAAS,GAAG3e,aAAA,CAChB;IAAA;;IAAA,wBAAMoW,YAAY,CAACsI,yBAAD,CAAlB,4BAAiD,EAAjD;GADgB;EAGhB,CAACnQ,gBAAD,EAAmBmQ,yBAAnB,CAHgB,CAAlB;EAKA,IAAMtc,UAAU,GAAGqH,mBAAmB,EAAtC;EAEA,OACEzJ,mBAAA,CAACqe,aAAD;IACEC,cAAc,EAAEA;IAChBrB,cAAc;IACdxK,MAAM,EAAEkM,SAAS,CAAC3Z,MAAV,KAAqB;GAH/B,EAKG2Z,SAAS,CAACjf,GAAV,CAAc,UAACkf,aAAD;IACb,IAAMhb,KAAK,GAAGwB,cAAc,CAACwZ,aAAa,CAACtH,QAAf,CAA5B;;IAEA,IAAI,CAAC1T,KAAL,EAAY;MACV,OAAO,IAAP;;;IAGF,OACE5D,mBAAA,CAACgd,cAAD;MACEE,cAAc,EAAE;MAChB/Y,OAAO,EAAEya,aAAa,CAACza;MACvB/B,UAAU,EAAEA;MACZwB,KAAK,EAAEA;MACPP,GAAG,EAAEub,aAAa,CAACza;MACnBgE,WAAW,EAAEA;KANf,CADF;GAPD,CALH,CADF;AA0BD;;SC5Be0W;EACd,IAAMlX,UAAU,GAAGgC,mBAAmB,EAAtC;EAEA,OACE3J,mBAAA,KAAA;IAAI8c,SAAS,EAAEvd,UAAU,CAACuf;GAA1B,EACGnX,UAAU,CAACjI,GAAX,CAAe,UAAC4e,cAAD,EAAiB3M,KAAjB;IACd,IAAMhN,QAAQ,GAAGiC,0BAA0B,CAAC0X,cAAD,CAA3C;;IAEA,IAAI3Z,QAAQ,KAAK9C,kBAAU,CAACkE,SAA5B,EAAuC;MACrC,OAAO/F,mBAAA,CAACye,SAAD;QAAWpb,GAAG,EAAEsB;QAAU2Z,cAAc,EAAEA;OAA1C,CAAP;;;IAGF,OACEte,mBAAA,CAAC+e,cAAD;MACE1b,GAAG,EAAEsB;MACLgN,KAAK,EAAEA;MACPhN,QAAQ,EAAEA;MACV2Z,cAAc,EAAEA;KAJlB,CADF;GAPD,CADH,CADF;AAoBD;;AAED,SAASS,cAAT;MACEpN,aAAAA;MACAhN,gBAAAA;MACA2Z,sBAAAA;EAMA,IAAMU,aAAa,GAAG5C,gBAAgB,EAAtC;EACA,IAAM/T,cAAc,GAAG4B,uBAAuB,EAA9C;EACA,IAAM7H,UAAU,GAAGqH,mBAAmB,EAAtC;EACA,IAAMgE,iBAAiB,GAAGU,oBAAoB,EAA9C;;EACA,4BAAyBF,sBAAsB,EAA/C;MAAOb,cAAP;;EACA,IAAMhB,iBAAiB,GAAGD,oBAAoB,EAA9C;EACA,IAAMhE,WAAW,GAAGoC,oBAAoB,EAAxC;;;EAIA,IAAM0U,YAAY,GAChB,CAACxR,iBAAD,IAAsBkE,KAAK,GAAG,CAA9B,GAAkC,EAAlC,GAAuCjN,gBAAgB,CAACC,QAAD,CADzD;EAGA,IAAIua,aAAa,GAAG,CAApB;EAEA,IAAMta,MAAM,GAAGqa,YAAY,CAACvf,GAAb,CAAiB,UAAAkE,KAAK;IACnC,IAAMO,OAAO,GAAGI,YAAY,CAACX,KAAD,EAAQwJ,cAAR,CAA5B;;IACA,qBAA8C4R,aAAa,CAACpb,KAAD,CAA3D;QAAQ2Y,YAAR,kBAAQA,YAAR;QAAsBE,WAAtB,kBAAsBA,WAAtB;QAAmChK,MAAnC,kBAAmCA,MAAnC;;IAEA,IAAM0M,YAAY,GAAG/S,iBAAiB,CAACxI,KAAD,CAAtC;;IAEA,IAAI6O,MAAM,IAAI0M,YAAd,EAA4B;MAC1BD,aAAa;;;IAGf,IAAIC,YAAJ,EAAkB;MAChB,OAAO,IAAP;;;IAGF,OACEnf,mBAAA,CAACgd,cAAD;MACE3Z,GAAG,EAAEc;MACLP,KAAK,EAAEA;MACPO,OAAO,EAAEA;MACTsO,MAAM,EAAE8J;MACRU,cAAc,EAAER;MAChBra,UAAU,EAAEA;MACZgb,QAAQ,EAAE/U;MACVF,WAAW,EAAEA;KARf,CADF;GAda,CAAf;EA4BA,OACEnI,mBAAA,CAACqe,aAAD;IACEC,cAAc,EAAEA;;;IAGhB7L,MAAM,EAAEyM,aAAa,KAAKta,MAAM,CAACI;GAJnC,EAMGJ,MANH,CADF;AAUD;;SC3Fewa,uBAAuB5P;EACrC,IAAM5L,KAAK,GAAG4R,iBAAiB,CAAChG,MAAD,CAA/B;EACAiK,YAAY,CAAC7V,KAAD,CAAZ;EACA4V,qBAAqB,CAAC5V,KAAD,CAArB;AACD;AAED,SAAgByb,+BAA+B7P;EAC7C,IAAM8P,UAAU,GAAG9J,iBAAiB,CAAChG,MAAD,CAApC;EAEAiK,YAAY,CAAC6F,UAAD,CAAZ;EACAA,UAAU,QAAV,YAAAA,UAAU,CAAEC,KAAZ;AACD;AAED,SAAgBC,sBAAsBhQ;EACpCiK,YAAY,CAACtE,gBAAgB,CAAC3F,MAAD,CAAjB,CAAZ;AACD;AAED,SAAgBiQ,sBAAsBhQ;EACpC,IAAI,CAACA,OAAL,EAAc;IACZ;;;EAGF,IAAM8F,IAAI,GAAGD,gBAAgB,CAAC7F,OAAD,CAA7B;;EAEA,IAAI,CAAC8F,IAAL,EAAW;IACT,OAAO6J,sBAAsB,CAAC3J,YAAY,CAAChG,OAAD,CAAb,CAA7B;;;EAGFgK,YAAY,CAAClE,IAAD,CAAZ;EACAiE,qBAAqB,CAACjE,IAAD,CAArB;AACD;AAED,SAAgBmK,sBAAsBjQ;EACpC,IAAI,CAACA,OAAL,EAAc;IACZ;;;EAGF,IAAMiG,IAAI,GAAGL,gBAAgB,CAAC5F,OAAD,CAA7B;;EAEA,IAAI,CAACiG,IAAL,EAAW;IACT,OAAO8J,qBAAqB,CAAC5J,YAAY,CAACnG,OAAD,CAAb,CAA5B;;;EAGFgK,YAAY,CAAC/D,IAAD,CAAZ;EACA8D,qBAAqB,CAAC9D,IAAD,CAArB;AACD;AAED,SAAgBiK,0BACdlQ,SACAmQ;EAEA,IAAI,CAACnQ,OAAL,EAAc;IACZ;;;EAGF,IAAMiG,IAAI,GAAGmK,oBAAoB,CAACpQ,OAAD,CAAjC;;EAEA,IAAI,CAACiG,IAAL,EAAW;IACT,OAAOkK,MAAM,EAAb;;;EAGFnG,YAAY,CAAC/D,IAAD,CAAZ;EACA8D,qBAAqB,CAAC9D,IAAD,CAArB;AACD;AAED,SAAgBoK,4BAA4BrQ;EAC1C,IAAI,CAACA,OAAL,EAAc;IACZ;;;EAGF,IAAM8F,IAAI,GAAGwK,sBAAsB,CAACtQ,OAAD,CAAnC;EAEA,OAAOgK,YAAY,CAAClE,IAAD,CAAnB;AACD;;AAED,SAASsK,oBAAT,CAA8BpQ,OAA9B;EACE,IAAI,CAACA,OAAL,EAAc;IACZ,OAAO,IAAP;;;EAGF,IAAMmE,eAAe,GAAGiC,sBAAsB,CAACpG,OAAD,CAA9C;EACA,IAAM9K,QAAQ,GAAG2O,eAAe,CAACM,eAAD,CAAhC;EACA,IAAMpC,UAAU,GAAGzB,iBAAiB,CAAC6D,eAAD,EAAkBnE,OAAlB,CAApC;EACA,IAAMoB,GAAG,GAAGV,SAAS,CAACyD,eAAD,EAAkBnE,OAAlB,CAArB;EACA,IAAMuQ,UAAU,GAAGzQ,iBAAiB,CAACqE,eAAD,EAAkBnE,OAAlB,CAApC;;EAEA,IAAIoB,GAAG,KAAK,CAAZ,EAAe;IACb,IAAMoP,mBAAmB,GAAGrK,YAAY,CAACjR,QAAD,CAAxC;;IAEA,IAAI,CAACsb,mBAAL,EAA0B;MACxB,OAAO,IAAP;;;IAGF,OAAO1O,eAAe,CACpBwD,gBAAgB,CAACkL,mBAAD,CADI,EAEpB,CAAC,CAFmB;IAGpBD,UAHoB,EAIpBxO,UAJoB,CAAtB;;;EAQF,OAAOK,mBAAmB,CACxBkD,gBAAgB,CAACnB,eAAD,CADQ,EAExB/C,GAFwB,EAGxBmP,UAHwB,EAIxBxO,UAJwB,CAA1B;AAMD;;AAED,SAASuO,sBAAT,CAAgCtQ,OAAhC;EACE,IAAI,CAACA,OAAL,EAAc;IACZ,OAAO,IAAP;;;EAGF,IAAMmE,eAAe,GAAGiC,sBAAsB,CAACpG,OAAD,CAA9C;EACA,IAAM9K,QAAQ,GAAG2O,eAAe,CAACM,eAAD,CAAhC;EACA,IAAMpC,UAAU,GAAGzB,iBAAiB,CAAC6D,eAAD,EAAkBnE,OAAlB,CAApC;EACA,IAAMoB,GAAG,GAAGV,SAAS,CAACyD,eAAD,EAAkBnE,OAAlB,CAArB;EACA,IAAMuQ,UAAU,GAAGzQ,iBAAiB,CAACqE,eAAD,EAAkBnE,OAAlB,CAApC;;EACA,IAAI,CAACgB,UAAU,CAACmD,eAAD,EAAkBnE,OAAlB,CAAf,EAA2C;IACzC,IAAMyQ,mBAAmB,GAAGzK,YAAY,CAAC9Q,QAAD,CAAxC;;IAEA,IAAI,CAACub,mBAAL,EAA0B;MACxB,OAAO,IAAP;;;IAGF,OAAO3O,eAAe,CACpBwD,gBAAgB,CAACmL,mBAAD,CADI,EAEpB,CAFoB,EAGpBF,UAHoB,EAIpBxO,UAJoB,CAAtB;;;EAQF,IAAM2O,aAAa,GAAGzO,mBAAmB,CACvCqD,gBAAgB,CAACnB,eAAD,CADuB,EAEvC/C,GAFuC,EAGvCmP,UAHuC,EAIvCxO,UAJuC,CAAzC;EAOA,OAAO2O,aAAP;AACD;;ACrID,IAAKC,SAAL;;AAAA,WAAKA;EACHA,8BAAA,OAAA;EACAA,gCAAA,SAAA;AACD,CAHD,EAAKA,SAAS,KAATA,SAAS,KAAA,CAAd;;AAKA,SAAgBC;EACd,IAAMpgB,gBAAgB,GAAGW,mBAAmB,EAA5C;EACA,IAAMN,kBAAkB,GAAGc,qBAAqB,EAAhD;;EACA,4BAAgBgN,4BAA4B,EAA5C;MAAOxK,KAAP;;EACA,IAAMxB,UAAU,GAAGqH,mBAAmB,EAAtC;;EAEA,4BAAqC6W,qBAAqB,CACxDhgB,kBADwD,CAA1D;MAAQigB,MAAR,yBAAQA,MAAR;MAAgBC,gBAAhB,yBAAgBA,gBAAhB;;EAGA,IAAMpI,mBAAmB,GAAGvX,sBAAsB,EAAlD;EACA,IAAM4f,eAAe,GAAGC,eAAe,CAACpgB,kBAAD,CAAvC;EACA,IAAM6H,WAAW,GAAGoC,oBAAoB,EAAxC;EAEA,IAAM8I,MAAM,GAAGX,gBAAgB,CAACzS,gBAAgB,CAACc,OAAlB,CAA/B;EAEA,IAAMyR,OAAO,GACX5O,KAAK,IACLyP,MADA,IAEA7O,kBAAkB,CAACZ,KAAD,CAFlB,IAGAyP,MAAM,CAACuB,SAAP,CAAiBC,QAAjB,CAA0BtV,UAAU,CAAC+d,iBAArC,CAJF;EAMA7Q,eAAS,CAAC;IACR,IAAI,CAAC+F,OAAL,EAAc;MACZiH,YAAY,CAACxZ,gBAAgB,CAACc,OAAlB,CAAZ;MACA;;;IAGFqe,sBAAsB,CAAC9e,kBAAkB,CAACS,OAApB,CAAtB;GANO,EAON,CAACT,kBAAD,EAAqBkS,OAArB,EAA8BvS,gBAA9B,CAPM,CAAT;EASA,IAAIqQ,GAAJ,EAASqQ,YAAT;;EAEA,IAAI,CAACnO,OAAD,IAAYvS,gBAAgB,CAACc,OAAjC,EAA0C;IACxCqX,mBAAmB,CAAC,IAAD,CAAnB;GADF,MAEO;IACL9H,GAAG,GAAGiQ,MAAM,EAAZ;IACAI,YAAY,GAAGF,eAAe,EAA9B;;;EAGF,IAAMG,SAAS,GAAGlE,OAAO,CAAC9Y,KAAD,CAAzB;EAEA,OACE5D,mBAAA,MAAA;IACE6gB,GAAG,EAAEvgB;IACLwc,SAAS,EAAEC,IAAI,CAACxd,UAAU,CAACoY,eAAZ,EAA6B;MAC1CnF,OAAO,EAAPA,OAD0C;MAE1C,eAAegO,gBAAgB,OAAOJ,SAAS,CAACU;KAFnC;IAIftD,KAAK,EAAE;MAAElN,GAAG,EAAHA;;GANX,EAQGkC,OAAO,GACJ,CAACjO,YAAY,CAACqc,SAAD,CAAb,EACGzJ,MADH,CACUrS,eAAe,CAAC8b,SAAD,CADzB,EAEG1P,KAFH,CAES,CAFT,EAEY,CAFZ,EAGGxR,GAHH,CAGO,UAAAyE,OAAO;IAAA,OACVnE,mBAAA,CAACgd,cAAD;MACE3Z,GAAG,EAAEc;MACLP,KAAK,EAAEgd;MACPzc,OAAO,EAAEA;MACT/B,UAAU,EAAEA;MACZ8a,cAAc,EAAE;MAChB/U,WAAW,EAAEA;KANf,CADU;GAHd,CADI,GAcJ,IAtBN,EAuBEnI,mBAAA,MAAA;IAAK8c,SAAS,EAAC;IAAoBU,KAAK,EAAEmD;GAA1C,CAvBF,CADF;AA2BD;;AAED,SAASD,eAAT,CAAyBpgB,kBAAzB;EACE,IAAML,gBAAgB,GAAGW,mBAAmB,EAA5C;EACA,OAAO,SAAS6f,eAAT;IACL,IAAMjD,KAAK,GAAwB,EAAnC;;IACA,IAAI,CAACld,kBAAkB,CAACS,OAAxB,EAAiC;MAC/B,OAAOyc,KAAP;;;IAGF,IAAIvd,gBAAgB,CAACc,OAArB,EAA8B;MAC5B,IAAMsS,MAAM,GAAGX,gBAAgB,CAACzS,gBAAgB,CAACc,OAAlB,CAA/B;MAEA,IAAMwT,UAAU,GAAGH,kBAAkB,CAACf,MAAD,CAArC;;MAEA,IAAI,CAACA,MAAL,EAAa;QACX,OAAOmK,KAAP;OAN0B;;;MAU5BA,KAAK,CAACvN,IAAN,GAAasE,UAAU,GAAG,CAAAlB,MAAM,QAAN,YAAAA,MAAM,CAAE0N,WAAR,IAAsB,CAAhD;;;IAGF,OAAOvD,KAAP;GAnBF;AAqBD;;AAED,SAAS8C,qBAAT,CACEhgB,kBADF;EAGE,IAAML,gBAAgB,GAAGW,mBAAmB,EAA5C;EACA,IAAMV,OAAO,GAAGc,UAAU,EAA1B;EACA,IAAIggB,SAAS,GAAGZ,SAAS,CAACa,EAA1B;EAEA,OAAO;IACLT,gBAAgB,EAAhBA,gBADK;IAELD,MAAM,EAANA;GAFF;;EAKA,SAASC,gBAAT;IACE,OAAOQ,SAAP;;;EAGF,SAAST,MAAT;IACES,SAAS,GAAGZ,SAAS,CAACa,EAAtB;IACA,IAAIC,cAAc,GAAG,CAArB;;IAEA,IAAI,CAAC5gB,kBAAkB,CAACS,OAAxB,EAAiC;MAC/B,OAAO,CAAP;;;IAGF,IAAMqH,MAAM,GAAGgI,aAAa,CAAC9P,kBAAkB,CAACS,OAApB,CAA5B;;IAEA,IAAId,gBAAgB,CAACc,OAArB,EAA8B;MAAA;;MAC5B,IAAMmO,OAAO,GAAGhP,OAAO,CAACa,OAAxB;MACA,IAAMsS,MAAM,GAAGX,gBAAgB,CAACzS,gBAAgB,CAACc,OAAlB,CAA/B;MAEA,IAAMogB,YAAY,GAAG/Q,aAAa,CAACiD,MAAD,CAAlC;MAEA6N,cAAc,GAAG9N,kBAAkB,CAACC,MAAD,CAAnC;MAEA,IAAMc,SAAS,yBAAGjF,OAAH,oBAAGA,OAAO,CAAEiF,SAAZ,iCAAyB,CAAxC;;MAEA,IAAIA,SAAS,GAAG+M,cAAc,GAAG9Y,MAAjC,EAAyC;QACvC4Y,SAAS,GAAGZ,SAAS,CAACU,IAAtB;QACAI,cAAc,IAAIC,YAAY,GAAG/Y,MAAjC;;;;IAIJ,OAAO8Y,cAAc,GAAG9Y,MAAxB;;AAEH;;SCpKegZ;EACd,IAAMlhB,OAAO,GAAGc,UAAU,EAA1B;EACAiY,WAAW,CAAC/Y,OAAD,CAAX;EACAoY,oBAAoB,CAACpY,OAAD,CAApB;EACA+O,cAAc;EAEd,OACEjP,mBAAA,MAAA;IAAK8c,SAAS,EAAEvd,UAAU,CAAC0U;IAAY4M,GAAG,EAAE3gB;GAA5C,EACEF,mBAAA,CAACqgB,oBAAD,MAAA,CADF,EAEErgB,mBAAA,CAAC6e,SAAD,MAAA,CAFF,CADF;AAMD;;SCRewC,sBACdC,OACAC;EAEA,IAAMrhB,OAAO,GAAGc,UAAU,EAA1B;EACA,IAAMgO,iBAAiB,GAAGD,oBAAoB,EAA9C;EACA,IAAMD,cAAc,GAAGD,iBAAiB,EAAxC;EAEApC,eAAS,CAAC;IACR,IAAI,CAAC6U,KAAL,EAAY;MACV;;;IAEF,IAAMpS,OAAO,GAAGhP,OAAO,CAACa,OAAxB;IAEAmO,OAAO,QAAP,YAAAA,OAAO,CAAEC,gBAAT,CAA0B,SAA1B,EAAqCqS,QAArC,EAA+C;MAC7CnS,OAAO,EAAE;KADX;IAIAH,OAAO,QAAP,YAAAA,OAAO,CAAEC,gBAAT,CAA0B,WAA1B,EAAuCsS,WAAvC,EAAoD,IAApD;IAEAvS,OAAO,QAAP,YAAAA,OAAO,CAAEC,gBAAT,CAA0B,OAA1B,EAAmCuS,OAAnC,EAA4C,IAA5C;IAEAxS,OAAO,QAAP,YAAAA,OAAO,CAAEC,gBAAT,CAA0B,UAA1B,EAAsCwS,OAAtC,EAA+C;MAC7CtS,OAAO,EAAE;KADX;IAGAH,OAAO,QAAP,YAAAA,OAAO,CAAEC,gBAAT,CAA0B,MAA1B,EAAkCwS,OAAlC,EAA2C,IAA3C;;IAGA,SAASD,OAAT,CAAiBE,CAAjB;MACE,IAAMvO,MAAM,GAAGX,gBAAgB,CAACkP,CAAC,CAAC9gB,MAAH,CAA/B;;MAEA,IAAI,CAACuS,MAAL,EAAa;QACX,OAAOsO,OAAO,EAAd;;;MAGF,IAAMxd,OAAO,GAAG6O,uBAAuB,CAACK,MAAD,CAAvC;MACA,IAAMP,eAAe,GAAGC,+BAA+B,CAACM,MAAD,CAAvD;;MAEA,IAAI,CAAClP,OAAD,IAAY,CAAC2O,eAAjB,EAAkC;QAChC,OAAO6O,OAAO,EAAd;;;MAGFJ,eAAe,CAAC;QACdpd,OAAO,EAAPA,OADc;QAEd2O,eAAe,EAAfA;OAFa,CAAf;;;IAKF,SAAS6O,OAAT,CAAiBC,CAAjB;MACE,IAAIA,CAAJ,EAAO;QACL,IAAMC,aAAa,GAAGD,CAAC,CAACC,aAAxB;;QAEA,IAAI,CAACnP,gBAAgB,CAACmP,aAAD,CAArB,EAAsC;UACpC,OAAON,eAAe,CAAC,IAAD,CAAtB;;;;MAIJA,eAAe,CAAC,IAAD,CAAf;;;IAEF,SAASC,QAAT,CAAkBI,CAAlB;MACE,IAAIA,CAAC,CAACve,GAAF,KAAU,QAAd,EAAwB;QACtBke,eAAe,CAAC,IAAD,CAAf;;;;IAIJ,SAASE,WAAT,CAAqBG,CAArB;MACE,IAAI5S,iBAAiB,EAArB,EAAyB;QACvB;;;MAGF,IAAMqE,MAAM,GAAGX,gBAAgB,CAACkP,CAAC,CAAC9gB,MAAH,CAA/B;;MAEA,IAAIuS,MAAJ,EAAY;QACVoG,YAAY,CAACpG,MAAD,CAAZ;;;;IAKJ,OAAO;MACLnE,OAAO,QAAP,YAAAA,OAAO,CAAEI,mBAAT,CAA6B,WAA7B,EAA0CmS,WAA1C;MACAvS,OAAO,QAAP,YAAAA,OAAO,CAAEI,mBAAT,CAA6B,UAA7B,EAAyCqS,OAAzC;MACAzS,OAAO,QAAP,YAAAA,OAAO,CAAEI,mBAAT,CAA6B,OAA7B,EAAsCoS,OAAtC,EAA+C,IAA/C;MACAxS,OAAO,QAAP,YAAAA,OAAO,CAAEI,mBAAT,CAA6B,MAA7B,EAAqCqS,OAArC,EAA8C,IAA9C;MACAzS,OAAO,QAAP,YAAAA,OAAO,CAAEI,mBAAT,CAA6B,SAA7B,EAAwCkS,QAAxC;KALF;GArEO,EA4EN,CAACthB,OAAD,EAAUohB,KAAV,EAAiBC,eAAjB,EAAkCvS,iBAAlC,EAAqDF,cAArD,CA5EM,CAAT;AA6ED;;SC3FegT;EACd,IAAMC,4BAA4B,GAAGzX,+BAA+B,EAApE;EAEA,OAAOyX,4BAA4B,KAAKjgB,8BAAsB,CAAC6G,MAA/D;AACD;AAED,SAAgBqZ;EACd,IAAMD,4BAA4B,GAAGzX,+BAA+B,EAApE;EAEA,OAAOyX,4BAA4B,KAAKjgB,8BAAsB,CAACiG,OAA/D;AACD;;ACjBD,IAAYka,aAAZ;;AAAA,WAAYA;EACVA,oBAAA,YAAA;EACAA,uBAAA,eAAA;AACD,CAHD,EAAYA,aAAa,KAAbA,aAAa,KAAA,CAAzB;;AAYA,SAAwBC;MACtBpiB,gBAAAA;MACAgd,iBAAAA;wBACAU;MAAAA,gCAAQ;4BACRwD;MAAAA,wCAAYiB,aAAa,CAACE;EAE1B,OACEniB,mBAAA,MAAA;IAAKwd,KAAK,eAAOA,KAAP;IAAgBV,SAAS,EAAEC,IAAI,CAAC,MAAD,EAASD,SAAT,EAAoBkE,SAApB;GAAzC,EACGlhB,QADH,CADF;AAKD;;SCnBuBsiB;MAAQtF,iBAAAA;wBAAWU;MAAAA,gCAAQ;EACjD,OAAOxd,mBAAA,MAAA;IAAKwd,KAAK;MAAI6E,IAAI,EAAE;OAAM7E,KAAhB;IAAyBV,SAAS,EAAEC,IAAI,CAACD,SAAD;GAAlD,CAAP;AACD;;SCFuBwF;MAAWxiB,gBAAAA;MAAUgd,iBAAAA;MAAWU,aAAAA;EACtD,OACExd,mBAAA,MAAA;IAAKwd,KAAK,eAAOA,KAAP;MAAc+E,QAAQ,EAAE;;IAAczF,SAAS,EAAEA;GAA3D,EACGhd,QADH,CADF;AAKD;;SCNuB0iB;MAAW1iB,gBAAAA;MAAUgd,iBAAAA;MAAWU,aAAAA;EACtD,OACExd,mBAAA,MAAA;IAAKwd,KAAK,eAAOA,KAAP;MAAc+E,QAAQ,EAAE;;IAAczF,SAAS,EAAEA;GAA3D,EACGhd,QADH,CADF;AAKD;;ACOD,IAAM2iB,SAAS,GAAG,EAAlB;AAMA,SAAgBC;EACd,OACE1iB,mBAAA,CAACwiB,QAAD;IAAUhF,KAAK,EAAE;MAAEpV,MAAM,EAAEqa;;GAA3B,EACEziB,mBAAA,CAACsiB,QAAD;IAAU9E,KAAK,EAAE;MAAEvL,MAAM,EAAE,CAAV;MAAa0Q,KAAK,EAAE;;GAArC,EACE3iB,mBAAA,CAAC4iB,cAAD;IAAgB5B,SAAS,EAAE6B,uBAAuB,CAACC;GAAnD,CADF,CADF,CADF;AAOD;AAED,SAAgBF;;;4BACd5B;MAAAA,wCAAY6B,uBAAuB,CAACE;EAEpC,IAAM3iB,iBAAiB,GAAGc,oBAAoB,EAA9C;EACA,IAAM8hB,UAAU,GAAGxZ,0BAA0B,EAA7C;;EACA,4BAA4B6E,uBAAuB,EAAnD;MAAO4U,MAAP;MAAeC,SAAf;;EACA,4BAA4CjV,sBAAsB,EAAlE;MAAOb,cAAP;MAAuB+V,iBAAvB;;EACA,IAAMpL,mBAAmB,GAAGL,sBAAsB,EAAlD;EACA,IAAM+C,gBAAgB,GAAGT,mBAAmB,EAA5C;;EAEA,IAAIgJ,UAAJ,EAAgB;IACd,OAAO,IAAP;;;EAGF,IAAMI,SAAS,GAAMX,SAAS,GAAGhgB,kBAAkB,CAACuC,MAArC,OAAf;EAEA,IAAMqe,YAAY,GAAGJ,MAAM,GAAGG,SAAH,GAAeX,SAAS,GAAG,IAAtD;EAEA,IAAMa,QAAQ,GAAGtC,SAAS,KAAK6B,uBAAuB,CAACC,QAAvD;EAEA,OACE9iB,mBAAA,CAACwiB,QAAD;IACE1F,SAAS,EAAEC,IAAI,CAAC,gBAAD,EAAmBiE,SAAnB,qBACZzhB,UAAU,CAACgkB,IADC,IACMN,MADN;IAGfzF,KAAK,EACH8F,QAAQ,GACJ;MAAEE,SAAS,EAAEH,YAAb;MAA2Bjb,MAAM,EAAEib;KAD/B,GAEJ;MAAEG,SAAS,EAAEH;;GAPrB,EAUErjB,mBAAA,MAAA;IAAK8c,SAAS,EAAC;IAAuB+D,GAAG,EAAEzgB;GAA3C,EACGqC,kBAAkB,CAAC/C,GAAnB,CAAuB,UAAC+jB,iBAAD,EAAoBpM,CAApB;;;IACtB,IAAMqM,MAAM,GAAGD,iBAAiB,KAAKrW,cAArC;IACA,OACEpN,mBAAA,CAAC2c,MAAD;MACEa,KAAK,EAAE;QACLmG,SAAS,EAAE5G,IAAI,CACbuG,QAAQ,oBACWjM,CAAC,IAAI4L,MAAM,GAAGR,SAAH,GAAe,CAAzB,CADZ,4BAEWpL,CAAC,IAAI4L,MAAM,GAAGR,SAAH,GAAe,CAAzB,CAFZ,QADK,EAIbQ,MAAM,IAAIS,MAAV,IAAoB,YAJP;;MAOjBlL,OAAO,EAAE;QACP,IAAIyK,MAAJ,EAAY;UACVE,iBAAiB,CAACM,iBAAD,CAAjB;UACAhJ,gBAAgB;SAFlB,MAGO;UACLyI,SAAS,CAAC,IAAD,CAAT;;;QAEFnL,mBAAmB;;MAErB1U,GAAG,EAAEogB;MACL3G,SAAS,EAAEC,IAAI,eAAa0G,iBAAb,EAAkC,UAAlC,uBACZlkB,UAAU,CAACmkB,MADC,IACQA,MADR;MAGfE,QAAQ,EAAEX,MAAM,GAAG,CAAH,GAAO,CAAC;sBACVS;mCAEZ1gB,cAAc,CAACygB,iBAAD;KAzBlB,CADF;GAFD,CADH,CAVF,CADF;AAgDD;AAED,AAAA,IAAYZ,uBAAZ;;AAAA,WAAYA;EACVA,mCAAA,iBAAA;EACAA,qCAAA,mBAAA;AACD,CAHD,EAAYA,uBAAuB,KAAvBA,uBAAuB,KAAA,CAAnC;;SCpFgBgB;EACd,IAAMpc,aAAa,GAAGoC,gBAAgB,EAAtC;EACA,IAAMia,mBAAmB,GAAG9B,sBAAsB,EAAlD;;EAEA,IAAI,CAACva,aAAa,CAACyB,WAAnB,EAAgC;IAC9B,OAAO,IAAP;;;EAGF,OACElJ,mBAAA,CAACkiB,IAAD;IAAMpF,SAAS,EAAC;GAAhB,EACE9c,mBAAA,CAAC+jB,WAAD,MAAA,CADF,EAEE/jB,mBAAA,CAACoiB,KAAD,MAAA,CAFF,EAGG0B,mBAAmB,GAAG9jB,mBAAA,CAAC0iB,kBAAD,MAAA,CAAH,GAA4B,IAHlD,CADF;AAOD;AAED,SAAgBqB;EACd,IAAMtc,aAAa,GAAGoC,gBAAgB,EAAtC;;EACA,gBAAwCqB,cAAQ,CAAe,IAAf,CAAhD;MAAO8Y,YAAP;MAAqBzC,eAArB;;EACA,IAAMnf,UAAU,GAAGqH,mBAAmB,EAAtC;;EACA,4BAA+B2E,4BAA4B,EAA3D;MAAO6V,oBAAP;;EACA,IAAM9b,WAAW,GAAGoC,oBAAoB,EAAxC;EAEA8W,qBAAqB,CAAC5Z,aAAa,CAACyB,WAAf,EAA4BqY,eAA5B,CAArB;EAEA,IAAM3d,KAAK,GAAGwB,cAAc,CAAC4e,YAAD,oBAACA,YAAY,CAAElR,eAAf,CAA5B;EAEA,IAAMoR,IAAI,GAAGtgB,KAAK,IAAI,IAAT,IAAiBogB,YAAY,IAAI,IAA9C;EAEA,OAAOhkB,mBAAA,CAACmkB,cAAD,MAAA,CAAP;;EAEA,SAASA,cAAT;IACE,IAAMnb,YAAY,GAAG0T,OAAO,CAC1BuH,oBAD0B,WAC1BA,oBAD0B,GACF7e,cAAc,CAACqC,aAAa,CAACuB,YAAf,CADZ,CAA5B;IAGA,IAAMob,WAAW,GAAGH,oBAAoB,GACpChgB,SAAS,CAACggB,oBAAD,CAD2B,GAEpCxc,aAAa,CAACwB,cAFlB;IAIA,OACEjJ,mBAAA,eAAA,MAAA,EACEA,mBAAA,MAAA,MAAA,EACGkkB,IAAI,GACHlkB,mBAAA,CAACud,aAAD;MACEpZ,OAAO,EAAE6f,YAAF,oBAAEA,YAAY,CAAE7f;MACvBP,KAAK,EAAE8Y,OAAO,CAAC9Y,KAAD;MACdxB,UAAU,EAAEA;MACZ+a,IAAI,EAAE;MACNhV,WAAW,EAAEA;KALf,CADG,GAQDa,YAAY,GACdhJ,mBAAA,CAACud,aAAD;MACEpZ,OAAO,EAAEI,YAAY,CAACyE,YAAD;MACrBpF,KAAK,EAAEoF;MACP5G,UAAU,EAAEA;MACZ+a,IAAI,EAAE;MACNhV,WAAW,EAAEA;KALf,CADc,GAQZ,IAjBN,CADF,EAoBG+b,IAAI,GACHlkB,mBAAA,MAAA;MAAK8c,SAAS,EAAC;KAAf,EACG7Y,SAAS,CAACyY,OAAO,CAAC9Y,KAAD,CAAR,CADZ,CADG,GAKH5D,mBAAA,MAAA;MAAK8c,SAAS,EAAC;KAAf,EAA0CsH,WAA1C,CAzBJ,CADF;;AA+BH;;SC9FeC,oBAAoBC;;;EAClC,gCAAOA,SAAP,oBAAOA,SAAS,CAAEC,YAAX,CAAwB,WAAxB,CAAP,oCAA+C,IAA/C;AACD;;SCIeC,iCACdC;EAEA,IAAMvkB,OAAO,GAAGc,UAAU,EAA1B;EAEAyL,eAAS,CAAC;IACR,IAAMiY,iBAAiB,GAAG,IAAIC,GAAJ,EAA1B;IACA,IAAMzV,OAAO,GAAGhP,OAAO,CAACa,OAAxB;IACA,IAAM6jB,QAAQ,GAAG,IAAIC,oBAAJ,CACf,UAAA3hB,OAAO;MACL,IAAI,CAACgM,OAAL,EAAc;QACZ;;;MAGF,qDAAoBhM,OAApB,wCAA6B;QAAA,IAAlB4hB,KAAkB;;QAC3B,IAAMC,GAAE,GAAGV,mBAAmB,CAACS,KAAK,CAAChkB,MAAP,CAA9B;;QACA4jB,iBAAiB,CAACM,GAAlB,CAAsBD,GAAtB,EAA0BD,KAAK,CAACG,iBAAhC;;;MAGF,IAAMC,MAAM,GAAGlQ,KAAK,CAACC,IAAN,CAAWyP,iBAAX,CAAf;MACA,IAAMS,YAAY,GAAGD,MAAM,CAACA,MAAM,CAAClgB,MAAP,GAAgB,CAAjB,CAA3B;;MAEA,IAAImgB,YAAY,CAAC,CAAD,CAAZ,IAAmB,CAAvB,EAA0B;QACxB,OAAOV,iBAAiB,CAACU,YAAY,CAAC,CAAD,CAAb,CAAxB;;;MAGF,2BAA0BD,MAA1B,6BAAkC;QAA7B;YAAOH,EAAP;YAAWK,KAAX;;QACH,IAAIA,KAAJ,EAAW;UACTX,iBAAiB,CAACM,EAAD,CAAjB;UACA;;;KArBS,EAyBf;MACEM,SAAS,EAAE,CAAC,CAAD,EAAI,CAAJ;KA1BE,CAAjB;IA6BAnW,OAAO,QAAP,YAAAA,OAAO,CAAEgG,gBAAT,CAA0B1V,WAAW,CAACD,UAAU,CAACoF,QAAZ,CAArC,EAA4DkG,OAA5D,CAAoE,UAAAya,EAAE;MACpEV,QAAQ,CAACW,OAAT,CAAiBD,EAAjB;KADF;GAhCO,EAmCN,CAACplB,OAAD,EAAUukB,iBAAV,CAnCM,CAAT;AAoCD;;SC7CuBe;EACtB,0BAAqBxX,kBAAkB,EAAvC;MAAOd,UAAP;;EAEA,OAAO,CAAC,CAACA,UAAT;AACD;;SCCeuY;EACd,IAAMvlB,OAAO,GAAGc,UAAU,EAA1B;EACA,IAAMjB,aAAa,GAAGY,gBAAgB,EAAtC;EAEA,OAAO,SAAS+kB,sBAAT,CAAgC/gB,QAAhC;;;IACL,IAAI,CAACzE,OAAO,CAACa,OAAb,EAAsB;MACpB;;;IAEF,IAAMujB,SAAS,uBAAGpkB,OAAO,CAACa,OAAX,qBAAG,iBAAiB4S,aAAjB,mBACDhP,QADC,SAAlB;;IAIA,IAAI,CAAC2f,SAAL,EAAgB;MACd;;;IAGF,IAAMhQ,SAAS,GAAGgQ,SAAS,CAAChQ,SAAV,IAAuB,CAAzC;IAEA6E,QAAQ,CAACpZ,aAAa,CAACgB,OAAf,EAAwBuT,SAAxB,CAAR;GAdF;AAgBD;;SCVeqR;EACd,gBAA4Cza,cAAQ,CAAgB,IAAhB,CAApD;MAAO0a,cAAP;MAAuBnB,iBAAvB;;EACA,IAAMiB,sBAAsB,GAAGD,yBAAyB,EAAxD;EACAjB,gCAAgC,CAACC,iBAAD,CAAhC;EACA,IAAMoB,YAAY,GAAGL,eAAe,EAApC;EAEA,IAAMM,gBAAgB,GAAGnc,mBAAmB,EAA5C;EACA,IAAMtJ,qBAAqB,GAAGc,wBAAwB,EAAtD;EAEA,OACEnB,mBAAA,MAAA;IAAK8c,SAAS,EAAC;IAAmB+D,GAAG,EAAExgB;GAAvC,EACGylB,gBAAgB,CAACpmB,GAAjB,CAAqB,UAAA4e,cAAc;;;IAClC,IAAM3Z,QAAQ,GAAGiC,0BAA0B,CAAC0X,cAAD,CAA3C;IACA,OACEte,mBAAA,CAAC2c,MAAD;MACEiH,QAAQ,EAAEiC,YAAY,GAAG,CAAC,CAAJ,GAAQ;MAC9B/I,SAAS,EAAEC,IAAI,CAAC,aAAD,eAA2BpY,QAA3B,qBACZpF,UAAU,CAACmkB,MADC,IACQ/e,QAAQ,KAAKihB,cADrB;MAGfviB,GAAG,EAAEsB;MACL6T,OAAO,EAAE;QACPiM,iBAAiB,CAAC9f,QAAD,CAAjB;QACA+gB,sBAAsB,CAAC/gB,QAAD,CAAtB;;oBAEUkC,8BAA8B,CAACyX,cAAD;KAV5C,CADF;GAFD,CADH,CADF;AAqBD;;SCtBeyH;EACd,IAAMje,cAAc,GAAGuC,uBAAuB,EAA9C;EAEA,IAAM2b,kBAAkB,GAAGlE,qBAAqB,EAAhD;;EAEA,IAAIha,cAAJ,EAAoB;IAClB,OAAO,IAAP;;;EAGF,OACE9H,mBAAA,CAACkiB,IAAD;IAAMpF,SAAS,EAAC;GAAhB,EACE9c,mBAAA,CAACimB,MAAD,MAAA,CADF,EAGGD,kBAAkB,GAAGhmB,mBAAA,CAAC4iB,cAAD,MAAA,CAAH,GAAwB,IAH7C,CADF;AAOD;AAED,SAAgBqD;EACd,gBAAsB/a,cAAQ,CAAC,CAAD,CAA9B;MAAOgb,GAAP;MAAYC,MAAZ;;EACA,IAAMpO,mBAAmB,GAAGL,sBAAsB,EAAlD;EACA,IAAMvX,cAAc,GAAGc,iBAAiB,EAAxC;EACA,IAAMyZ,WAAW,GAAGJ,cAAc,EAAlC;EACA,IAAM8L,WAAW,GAAG9c,0BAA0B,EAA9C;EACA,IAAM+c,SAAS,GAAG3c,wBAAwB,EAA1C;;EACA,iBAAqBqR,SAAS,EAA9B;MAAQE,SAAR,cAAQA,QAAR;;EAEA,IAAMqL,KAAK,GAAGnmB,cAAH,oBAAGA,cAAc,CAAEY,OAA9B;EACA,IAAMN,KAAK,GAAG6lB,KAAH,oBAAGA,KAAK,CAAE7lB,KAArB;EAEA,OACET,mBAAA,CAACwiB,QAAD;IAAU1F,SAAS,EAAC;GAApB,EACE9c,mBAAA,CAACumB,SAAD;IAAW9lB,KAAK,EAAEA;GAAlB,CADF,EAEET,mBAAA,QAAA;;IAEEqmB,SAAS,EAAEA;kBACC;IACZG,OAAO,EAAEzO;IACT+E,SAAS,EAAC;IACVD,IAAI,EAAC;IACLuJ,WAAW,EAAEA;IACbnL,QAAQ,EAAE,kBAAAzS,KAAK;MACb2d,MAAM,CAACD,GAAG,GAAG,CAAP,CAAN;MACAxgB,UAAU,CAAC;;;QACTuV,SAAQ,wBAACzS,KAAD,qCAACA,KAAK,CAAE1H,MAAR,qBAAC,cAAeL,KAAhB,kCAAyBA,KAAzB,CAAR;OADQ,CAAV;;IAIFogB,GAAG,EAAE1gB;GAdP,CAFF,EAkBEH,mBAAA,MAAA;IAAK8c,SAAS,EAAC;GAAf,CAlBF,EAmBE9c,mBAAA,CAAC2c,MAAD;IACEG,SAAS,EAAEC,IAAI,CAAC,sBAAD,EAAyB,4BAAzB;IACfvE,OAAO,EAAEkC;GAFX,EAIE1a,mBAAA,MAAA;IAAK8c,SAAS,EAAC;GAAf,CAJF,CAnBF,CADF;AA4BD;AAED,IAAM2J,mBAAmB,gBAAMjnB,WAAW,CACxCD,UAAU,CAACmnB,WAD6B,CAAjB,sBAEpBlnB,WAAW,CAACD,UAAU,CAACuf,SAAZ,CAFhB;;AAIA,SAASyH,SAAT;MAAqB9lB,aAAAA;;EACnB,IAAI,CAACA,KAAL,EAAY;IACV,OAAO,IAAP;;;EAGF,IAAMkmB,WAAW,iCAA8B7L,uBAAuB,CACpEra,KADoE,CAArD,QAAjB;EAIA,OACET,mBAAA,QAAA,MAAA,iBACMymB,mBADN,SAC6BjnB,WAAW,CACtCD,UAAU,CAACoF,QAD2B,CADxC,kBAGcgiB,WAHd,yDAOMF,mBAPN,eAOmCjnB,WAAW,CAC5CD,UAAU,CAACqE,KADiC,CAP9C,aASS+iB,WATT,8CADF;AAeD;;SCzGeC;EACd,OACE5mB,mBAAA,CAACwiB,QAAD;IAAU1F,SAAS,EAAC;GAApB,EACE9c,mBAAA,CAAC+lB,eAAD,MAAA,CADF,EAEE/lB,mBAAA,CAAC2lB,kBAAD,MAAA,CAFF,CADF;AAMD;;SCbekB;EACd,OAAOC,QAAQ,CAACC,aAAhB;AACD;;ACyCD,IAAKC,cAAL;;AAAA,WAAKA;EACHA,2BAAA,cAAA;EACAA,yBAAA,YAAA;EACAA,2BAAA,cAAA;EACAA,4BAAA,eAAA;EACAA,wBAAA,WAAA;EACAA,uBAAA,UAAA;EACAA,uBAAA,MAAA;AACD,CARD,EAAKA,cAAc,KAAdA,cAAc,KAAA,CAAnB;;AAUA,SAAgBC;EACdC,2BAA2B;EAC3BC,4BAA4B;EAC5BC,+BAA+B;EAC/BC,mCAAmC;EACnCC,qBAAqB;AACtB;;AAED,SAASJ,2BAAT;EACE,IAAMnnB,aAAa,GAAGY,gBAAgB,EAAtC;EACA,IAAM+Z,WAAW,GAAGJ,cAAc,EAAlC;EACA,IAAMnB,QAAQ,GAAGI,WAAW,EAA5B;EACA,IAAMpZ,cAAc,GAAGc,iBAAiB,EAAxC;EACA,IAAMwZ,gBAAgB,GAAGT,mBAAmB,EAA5C;EACA,IAAM9B,cAAc,GAAGD,iBAAiB,EAAxC;EACA,IAAMrJ,iBAAiB,GAAGF,oBAAoB,EAA9C;EAEA,IAAMqJ,mBAAmB,GAAGL,sBAAsB,EAAlD;EAEA,IAAM6P,SAAS,GAAGzb,aAAO,CACvB;IAAA,OACE,SAASyb,SAAT,CAAmB/e,KAAnB;MACE,IAAQnF,GAAR,GAAgBmF,KAAhB,CAAQnF,GAAR;MAEAuL,iBAAiB;;MACjB,QAAQvL,GAAR;;QAEE,KAAK2jB,cAAc,CAACQ,MAApB;UACEhf,KAAK,CAACif,cAAN;;UACA,IAAIvP,cAAc,EAAlB,EAAsB;YACpBH,mBAAmB;YACnB;;;UAEF2C,WAAW;UACXvB,QAAQ,CAAC,CAAD,CAAR;UACAsB,gBAAgB;UAChB;;KAhBR;GADuB,EAoBvB,CACEtB,QADF,EAEEuB,WAFF,EAGE3C,mBAHF,EAIE0C,gBAJF,EAKEvC,cALF,EAMEtJ,iBANF,CApBuB,CAAzB;EA8BAnC,eAAS,CAAC;IACR,IAAM1L,OAAO,GAAGhB,aAAa,CAACgB,OAA9B;;IAEA,IAAI,CAACA,OAAL,EAAc;MACZ;;;IAGFA,OAAO,CAACoO,gBAAR,CAAyB,SAAzB,EAAoCoY,SAApC;IAEA,OAAO;MACLxmB,OAAO,CAACuO,mBAAR,CAA4B,SAA5B,EAAuCiY,SAAvC;KADF;GATO,EAYN,CAACxnB,aAAD,EAAgBI,cAAhB,EAAgCgZ,QAAhC,EAA0CoO,SAA1C,CAZM,CAAT;AAaD;;AAED,SAASJ,4BAAT;EACE,IAAMO,mBAAmB,GAAGzN,sBAAsB,EAAlD;EACA,IAAMla,aAAa,GAAGY,gBAAgB,EAAtC;EACA,IAAMT,OAAO,GAAGc,UAAU,EAA1B;EACA,IAAMb,cAAc,GAAGc,iBAAiB,EAAxC;;EACA,4BAAoCoN,uBAAuB,EAA3D;MAASsZ,uBAAT;;EACA,IAAMC,qBAAqB,GAAGC,wBAAwB,EAAtD;EACA,IAAM7B,kBAAkB,GAAGlE,qBAAqB,EAAhD;EAEA,IAAMyF,SAAS,GAAGzb,aAAO,CACvB;IAAA,OACE,SAASyb,SAAT,CAAmB/e,KAAnB;MACE,IAAQnF,GAAR,GAAgBmF,KAAhB,CAAQnF,GAAR;;MAEA,QAAQA,GAAR;QACE,KAAK2jB,cAAc,CAACc,UAApB;UACE,IAAI,CAAC9B,kBAAL,EAAyB;YACvB;;;UAEFxd,KAAK,CAACif,cAAN;UACAE,uBAAuB,CAAC,IAAD,CAAvB;UACAD,mBAAmB;UACnB;;QACF,KAAKV,cAAc,CAACe,SAApB;UACEvf,KAAK,CAACif,cAAN;UACAG,qBAAqB;UACrB;;QACF,KAAKZ,cAAc,CAACgB,KAApB;UACExf,KAAK,CAACif,cAAN;UACApI,8BAA8B,CAACnf,OAAO,CAACa,OAAT,CAA9B;UACA;;KApBR;GADuB,EAwBvB,CACE2mB,mBADF,EAEEE,qBAFF,EAGED,uBAHF,EAIEznB,OAJF,EAKE8lB,kBALF,CAxBuB,CAAzB;EAiCAvZ,eAAS,CAAC;IACR,IAAM1L,OAAO,GAAGZ,cAAc,CAACY,OAA/B;;IAEA,IAAI,CAACA,OAAL,EAAc;MACZ;;;IAGFA,OAAO,CAACoO,gBAAR,CAAyB,SAAzB,EAAoCoY,SAApC;IAEA,OAAO;MACLxmB,OAAO,CAACuO,mBAAR,CAA4B,SAA5B,EAAuCiY,SAAvC;KADF;GATO,EAYN,CAACxnB,aAAD,EAAgBI,cAAhB,EAAgConB,SAAhC,CAZM,CAAT;AAaD;;AAED,SAASH,+BAAT;EACE,IAAMhnB,iBAAiB,GAAGc,oBAAoB,EAA9C;EACA,IAAMuZ,gBAAgB,GAAGT,mBAAmB,EAA5C;EACA,IAAM7Z,cAAc,GAAGc,iBAAiB,EAAxC;EACA,IAAM2mB,qBAAqB,GAAGC,wBAAwB,EAAtD;;EACA,6BAA4BxZ,uBAAuB,EAAnD;MAAO4U,MAAP;MAAeC,SAAf;;EACA,IAAMY,mBAAmB,GAAG9B,sBAAsB,EAAlD;EACA,IAAMgE,kBAAkB,GAAGlE,qBAAqB,EAAhD;EACA,IAAMmG,MAAM,GAAGC,SAAS,EAAxB;EAEA,IAAMX,SAAS,GAAGzb,aAAO,CACvB;IAAA;MAEE,SAASyb,SAAT,CAAmB/e,KAAnB;QACE,IAAQnF,GAAR,GAAgBmF,KAAhB,CAAQnF,GAAR;;QAEA,IAAI2iB,kBAAJ,EAAwB;UACtB,QAAQ3iB,GAAR;YACE,KAAK2jB,cAAc,CAACmB,SAApB;cACE3f,KAAK,CAACif,cAAN;;cACA,IAAI,CAACxE,MAAL,EAAa;gBACX,OAAOxI,gBAAgB,EAAvB;;;cAEF2N,iBAAiB,CAAC3N,gBAAD,CAAjB;cACA;;YACF,KAAKuM,cAAc,CAACc,UAApB;cACEtf,KAAK,CAACif,cAAN;;cACA,IAAI,CAACxE,MAAL,EAAa;gBACX,OAAOxI,gBAAgB,EAAvB;;;cAEF4N,iBAAiB;cACjB;;YACF,KAAKrB,cAAc,CAACe,SAApB;cACEvf,KAAK,CAACif,cAAN;;cACA,IAAIxE,MAAJ,EAAY;gBACVC,SAAS,CAAC,KAAD,CAAT;;;cAEF0E,qBAAqB;cACrB;;YACF;cACEK,MAAM,CAACzf,KAAD,CAAN;cACA;;;;QAIN,IAAIsb,mBAAJ,EAAyB;UACvB,QAAQzgB,GAAR;YACE,KAAK2jB,cAAc,CAACsB,OAApB;cACE9f,KAAK,CAACif,cAAN;;cACA,IAAI,CAACxE,MAAL,EAAa;gBACX,OAAOxI,gBAAgB,EAAvB;;;cAEF2N,iBAAiB,CAAC3N,gBAAD,CAAjB;cACA;;YACF,KAAKuM,cAAc,CAACe,SAApB;cACEvf,KAAK,CAACif,cAAN;;cACA,IAAI,CAACxE,MAAL,EAAa;gBACX,OAAOxI,gBAAgB,EAAvB;;;cAEF4N,iBAAiB;cACjB;;YACF;cACEJ,MAAM,CAACzf,KAAD,CAAN;cACA;;;;;GArDa,EAyDvB,CACEya,MADF,EAEExI,gBAFF,EAGEyI,SAHF,EAIE0E,qBAJF,EAKEK,MALF,EAMEnE,mBANF,EAOEkC,kBAPF,CAzDuB,CAAzB;EAoEAvZ,eAAS,CAAC;IACR,IAAM1L,OAAO,GAAGX,iBAAiB,CAACW,OAAlC;;IAEA,IAAI,CAACA,OAAL,EAAc;MACZ;;;IAGFA,OAAO,CAACoO,gBAAR,CAAyB,SAAzB,EAAoCoY,SAApC;IAEA,OAAO;MACLxmB,OAAO,CAACuO,mBAAR,CAA4B,SAA5B,EAAuCiY,SAAvC;KADF;GATO,EAYN,CAACnnB,iBAAD,EAAoBD,cAApB,EAAoC8iB,MAApC,EAA4CsE,SAA5C,CAZM,CAAT;AAaD;;AAED,SAASF,mCAAT;EACE,IAAM5M,gBAAgB,GAAGT,mBAAmB,EAA5C;EACA,IAAM3Z,qBAAqB,GAAGc,wBAAwB,EAAtD;EACA,IAAMjB,OAAO,GAAGc,UAAU,EAA1B;EACA,IAAMinB,MAAM,GAAGC,SAAS,EAAxB;EAEA,IAAMX,SAAS,GAAGzb,aAAO,CACvB;IAAA,OACE,SAASyb,SAAT,CAAmB/e,KAAnB;MACE,IAAQnF,GAAR,GAAgBmF,KAAhB,CAAQnF,GAAR;;MAEA,QAAQA,GAAR;QACE,KAAK2jB,cAAc,CAACsB,OAApB;UACE9f,KAAK,CAACif,cAAN;UACAhN,gBAAgB;UAChB;;QACF,KAAKuM,cAAc,CAACc,UAApB;UACEtf,KAAK,CAACif,cAAN;UACA7N,uBAAuB,CAACiN,gBAAgB,EAAjB,CAAvB;UACA;;QACF,KAAKG,cAAc,CAACmB,SAApB;UACE3f,KAAK,CAACif,cAAN;UACA9N,uBAAuB,CAACkN,gBAAgB,EAAjB,CAAvB;UACA;;QACF,KAAKG,cAAc,CAACe,SAApB;UACEvf,KAAK,CAACif,cAAN;UACArI,sBAAsB,CAAClf,OAAO,CAACa,OAAT,CAAtB;UACA;;QACF;UACEknB,MAAM,CAACzf,KAAD,CAAN;UACA;;KAvBR;GADuB,EA2BvB,CAACtI,OAAD,EAAUua,gBAAV,EAA4BwN,MAA5B,CA3BuB,CAAzB;EA8BAxb,eAAS,CAAC;IACR,IAAM1L,OAAO,GAAGV,qBAAqB,CAACU,OAAtC;;IAEA,IAAI,CAACA,OAAL,EAAc;MACZ;;;IAGFA,OAAO,CAACoO,gBAAR,CAAyB,SAAzB,EAAoCoY,SAApC;IAEA,OAAO;MACLxmB,OAAO,CAACuO,mBAAR,CAA4B,SAA5B,EAAuCiY,SAAvC;KADF;GATO,EAYN,CAAClnB,qBAAD,EAAwBH,OAAxB,EAAiCqnB,SAAjC,CAZM,CAAT;AAaD;;AAED,SAASD,qBAAT;EACE,IAAMpnB,OAAO,GAAGc,UAAU,EAA1B;EACA,IAAMunB,YAAY,GAAGC,eAAe,EAApC;EACA,IAAM5Q,kBAAkB,GAAGO,qBAAqB,EAAhD;EACA,IAAMD,cAAc,GAAGD,iBAAiB,EAAxC;EACA,IAAMF,mBAAmB,GAAGL,sBAAsB,EAAlD;EAEA,IAAMuQ,MAAM,GAAGC,SAAS,EAAxB;EAEA,IAAMX,SAAS,GAAGzb,aAAO,CACvB;IAAA;MAEE,SAASyb,SAAT,CAAmB/e,KAAnB;QACE,IAAQnF,GAAR,GAAgBmF,KAAhB,CAAQnF,GAAR;QAEA,IAAM0jB,aAAa,GAAGrU,gBAAgB,CAACmU,gBAAgB,EAAjB,CAAtC;;QAEA,QAAQxjB,GAAR;UACE,KAAK2jB,cAAc,CAACc,UAApB;YACEtf,KAAK,CAACif,cAAN;YACAhI,qBAAqB,CAACsH,aAAD,CAArB;YACA;;UACF,KAAKC,cAAc,CAACmB,SAApB;YACE3f,KAAK,CAACif,cAAN;YACA/H,qBAAqB,CAACqH,aAAD,CAArB;YACA;;UACF,KAAKC,cAAc,CAACe,SAApB;YACEvf,KAAK,CAACif,cAAN;;YACA,IAAIvP,cAAc,EAAlB,EAAsB;cACpBH,mBAAmB;cACnB;;;YAEF+H,2BAA2B,CAACiH,aAAD,CAA3B;YACA;;UACF,KAAKC,cAAc,CAACsB,OAApB;YACE9f,KAAK,CAACif,cAAN;;YACA,IAAIvP,cAAc,EAAlB,EAAsB;cACpBH,mBAAmB;cACnB;;;YAEF4H,yBAAyB,CAACoH,aAAD,EAAgBwB,YAAhB,CAAzB;YACA;;UACF,KAAKvB,cAAc,CAAC5E,KAApB;YACE5Z,KAAK,CAACif,cAAN;YACA7P,kBAAkB,CAACpP,KAAK,CAAC1H,MAAP,CAAlB;YACA;;UACF;YACEmnB,MAAM,CAACzf,KAAD,CAAN;YACA;;;;GAvCe,EA0CvB,CACE+f,YADF,EAEEN,MAFF,EAGErQ,kBAHF,EAIEM,cAJF,EAKEH,mBALF,CA1CuB,CAAzB;EAmDAtL,eAAS,CAAC;IACR,IAAM1L,OAAO,GAAGb,OAAO,CAACa,OAAxB;;IAEA,IAAI,CAACA,OAAL,EAAc;MACZ;;;IAGFA,OAAO,CAACoO,gBAAR,CAAyB,SAAzB,EAAoCoY,SAApC;IAEA,OAAO;MACLxmB,OAAO,CAACuO,mBAAR,CAA4B,SAA5B,EAAuCiY,SAAvC;KADF;GATO,EAYN,CAACrnB,OAAD,EAAUqnB,SAAV,CAZM,CAAT;AAaD;;AAED,SAASM,wBAAT;EACE,IAAMY,uBAAuB,GAAGvO,0BAA0B,EAA1D;EACA,IAAM2L,YAAY,GAAGL,eAAe,EAApC;EACA,IAAMtlB,OAAO,GAAGc,UAAU,EAA1B;EAEA,OAAOgX,iBAAW,CAChB,SAAS4P,qBAAT;IACE,IAAI/B,YAAJ,EAAkB;MAChB,OAAOzG,sBAAsB,CAAClf,OAAO,CAACa,OAAT,CAA7B;;;IAEF,OAAO0nB,uBAAuB,EAA9B;GALc,EAOhB,CAACvoB,OAAD,EAAUuoB,uBAAV,EAAmC5C,YAAnC,CAPgB,CAAlB;AASD;;AAED,SAAS2C,eAAT;EACE,IAAM/N,gBAAgB,GAAGT,mBAAmB,EAA5C;EACA,IAAMyO,uBAAuB,GAAGvO,0BAA0B,EAA1D;EACA,IAAM2L,YAAY,GAAGL,eAAe,EAApC;EAEA,OAAOxN,iBAAW,CAChB,SAAS0Q,aAAT;IACE,IAAI7C,YAAJ,EAAkB;MAChB,OAAOpL,gBAAgB,EAAvB;;;IAEF,OAAOgO,uBAAuB,EAA9B;GALc,EAOhB,CAAChO,gBAAD,EAAmBoL,YAAnB,EAAiC4C,uBAAjC,CAPgB,CAAlB;AASD;;AAED,SAASL,iBAAT,CAA2BO,QAA3B;EACE,IAAMC,eAAe,GAAG/B,gBAAgB,EAAxC;;EAEA,IAAI,CAAC+B,eAAL,EAAsB;IACpB;;;EAGF,IAAI,CAACxW,qBAAqB,CAACwW,eAAD,CAA1B,EAA6C;IAC3CD,QAAQ;;;EAGV/O,uBAAuB,CAACgP,eAAD,CAAvB;AACD;;AAED,SAASP,iBAAT;EACE,IAAMO,eAAe,GAAG/B,gBAAgB,EAAxC;;EAEA,IAAI,CAAC+B,eAAL,EAAsB;IACpB;;;EAGFjP,uBAAuB,CAACiP,eAAD,CAAvB;AACD;;AAED,SAASV,SAAT;EACE,IAAMtN,YAAY,GAAGD,eAAe,EAApC;EACA,IAAMF,gBAAgB,GAAGT,mBAAmB,EAA5C;EACA,IAAMjC,mBAAmB,GAAGL,sBAAsB,EAAlD;EAEA,OAAO,SAASuQ,MAAT,CAAgBzf,KAAhB;IACL,IAAQnF,GAAR,GAAgBmF,KAAhB,CAAQnF,GAAR;;IAEA,IAAIwlB,WAAW,CAACrgB,KAAD,CAAf,EAAwB;MACtB;;;IAGF,IAAInF,GAAG,CAACylB,KAAJ,CAAU,oBAAV,CAAJ,EAAqC;MACnCtgB,KAAK,CAACif,cAAN;MACA1P,mBAAmB;MACnB0C,gBAAgB;MAChBG,YAAY,CAACvX,GAAD,CAAZ;;GAXJ;AAcD;;AAED,SAASwlB,WAAT,CAAqBrgB,KAArB;EACE,IAAQugB,OAAR,GAAqCvgB,KAArC,CAAQugB,OAAR;MAAiBC,OAAjB,GAAqCxgB,KAArC,CAAiBwgB,OAAjB;MAA0BC,MAA1B,GAAqCzgB,KAArC,CAA0BygB,MAA1B;EAEA,OAAOF,OAAO,IAAIC,OAAX,IAAsBC,MAA7B;AACD;;SCvdeC,aACd/gB,aACAvE,OACAxB;EAEA,IAAI,CAACwB,KAAL,EAAY;IACV;;;EAGF,IAAIxB,UAAU,KAAKV,kBAAU,CAACic,MAA9B,EAAsC;IACpC;;;EAGF,IAAMxZ,OAAO,GAAGI,YAAY,CAACX,KAAD,CAA5B;;EAEA,IAAIulB,cAAc,CAAC3M,GAAf,CAAmBrY,OAAnB,CAAJ,EAAiC;IAC/B;;;EAGFW,eAAe,CAAClB,KAAD,CAAf,CAAuBiH,OAAvB,CAA+B,UAAC3F,SAAD;IAC7B,IAAMkkB,QAAQ,GAAGjhB,WAAW,CAACjD,SAAD,EAAY9C,UAAZ,CAA5B;IACAinB,YAAY,CAACD,QAAD,CAAZ;GAFF;EAKAD,cAAc,CAAC/K,GAAf,CAAmBja,OAAnB;AACD;AAED,AAAO,IAAMglB,cAAc,gBAAgB,IAAI5b,GAAJ,EAApC;;AAEP,SAAS8b,YAAT,CAAsBC,GAAtB;EACE,IAAMC,KAAK,GAAG,IAAIC,KAAJ,EAAd;EACAD,KAAK,CAACvL,GAAN,GAAYsL,GAAZ;AACD;;SC3BeG;EACd,IAAMvpB,OAAO,GAAGc,UAAU,EAA1B;EACA,IAAMoB,UAAU,GAAGqH,mBAAmB,EAAtC;EACA,IAAMtB,WAAW,GAAGoC,oBAAoB,EAAxC;EAEAkC,eAAS,CAAC;IACR,IAAIrK,UAAU,KAAKV,kBAAU,CAACic,MAA9B,EAAsC;MACpC;;;IAGF,IAAMzO,OAAO,GAAGhP,OAAO,CAACa,OAAxB;IAEAmO,OAAO,QAAP,YAAAA,OAAO,CAAEC,gBAAT,CAA0B,SAA1B,EAAqCqX,OAArC;IAEA,OAAO;MACLtX,OAAO,QAAP,YAAAA,OAAO,CAAEI,mBAAT,CAA6B,SAA7B,EAAwCkX,OAAxC;KADF;;IAIA,SAASA,OAAT,CAAiBhe,KAAjB;MACE,IAAM6K,MAAM,GAAGX,gBAAgB,CAAClK,KAAK,CAAC1H,MAAP,CAA/B;;MAEA,IAAI,CAACuS,MAAL,EAAa;QACX;;;MAGF,wBAAgBR,gBAAgB,CAACQ,MAAD,CAAhC;UAAOzP,KAAP;;MAEA,IAAI,CAACA,KAAL,EAAY;QACV;;;MAGF,IAAIY,kBAAkB,CAACZ,KAAD,CAAtB,EAA+B;QAC7BslB,YAAY,CAAC/gB,WAAD,EAAcvE,KAAd,EAAqBxB,UAArB,CAAZ;;;GA3BG,EA8BN,CAAClC,OAAD,EAAUkC,UAAV,EAAsB+F,WAAtB,CA9BM,CAAT;AA+BD;;SC7BuBuhB;MAAa5pB,gBAAAA;EACnC,OACEE,mBAAA,CAAC0M,qBAAD,MAAA,EACE1M,mBAAA,CAAC2pB,iBAAD,MAAA,EAAoB7pB,QAApB,CADF,CADF;AAKD;;AAMD,SAAS6pB,iBAAT;;;MAA6B7pB,iBAAAA;EAC3B,IAAMgJ,KAAK,GAAGgB,cAAc,EAA5B;EACA,IAAM8f,gBAAgB,GAAGpE,eAAe,EAAxC;EACA,IAAMzlB,aAAa,GAAGY,gBAAgB,EAAtC;;EACA,2BAA0BuJ,mBAAmB,EAA7C;MAAQ9B,MAAR,wBAAQA,MAAR;MAAgBW,KAAhB,wBAAgBA,KAAhB;;EAEAke,qBAAqB;EACrBwC,UAAU;EAEV,IAAMjM,KAAK,GAAG;IACZpV,MAAM,EAANA,MADY;IAEZW,KAAK,EAALA;GAFF;EAKA,OACE/I,mBAAA,QAAA;IACE8c,SAAS,EAAEC,IAAI,CAACxd,UAAU,CAACmnB,WAAZ,EAAyB,UAAzB,qBACZnnB,UAAU,CAACsqB,YADC,IACcD,gBADd,QAEb,gBAFa,IAEK9gB,KAAK,KAAKnH,aAAK,CAACoB,IAFrB;IAIf8d,GAAG,EAAE9gB;IACLyd,KAAK,EAAEA;GANT,EAQG1d,QARH,CADF;AAYD;;SC1CuBgqB,YAAYlN;EAClC,OACE5c,mBAAA,CAACH,yBAAD,MAAA,EACEG,mBAAA,CAACoJ,oBAAD,oBAA0BwT,MAA1B,EACE5c,mBAAA,CAAC0pB,UAAD,MAAA,EACE1pB,mBAAA,CAAC4mB,MAAD,MAAA,CADF,EAEE5mB,mBAAA,CAACohB,IAAD,MAAA,CAFF,EAGEphB,mBAAA,CAAC6jB,OAAD,MAAA,CAHF,CADF,CADF,CADF;AAWD;;ICvBoBkG;;;EAInB,uBAAYnN,KAAZ;;;IACE,oCAAMA,KAAN;IACA,MAAKzR,KAAL,GAAa;MAAE6e,QAAQ,EAAE;KAAzB;;;;gBAGKC,2BAAP;IACE,OAAO;MAAED,QAAQ,EAAE;KAAnB;;;;;SAGFE,oBAAA,2BAAkBC,KAAlB,EAAgCC,SAAhC;;IAEEC,OAAO,CAACF,KAAR,CAAc,sCAAd,EAAsDA,KAAtD,EAA6DC,SAA7D;;;SAGFE,SAAA;IACE,IAAI,KAAKnf,KAAL,CAAW6e,QAAf,EAAyB;MACvB,OAAO,IAAP;;;IAGF,OAAO,KAAKpN,KAAL,CAAW9c,QAAlB;;;;EAvBuCE;;SCI3BuqB;MACdpmB,eAAAA;uBACAgZ;MAAAA,8BAAO;6BACP/a;MAAAA,0CAAaV,kBAAU,CAACc;2BACxB4a;MAAAA,sCAAW;MACXjV,mBAAAA;;EAQA,IAAI,CAAChE,OAAL,EAAc;IACZ,OAAO,IAAP;;;EAGF,OACEnE,mBAAA,CAACud,aAAD;IACEpZ,OAAO,EAAEA;IACTgZ,IAAI,EAAEA;IACN/a,UAAU,EAAEA;IACZgb,QAAQ,EAAEA;IACVjV,WAAW,EAAEA;GALf,CADF;AASD;;SCZuB2hB,cAAYlN;EAClC,OACE5c,mBAAA,CAAC+pB,aAAD,MAAA,EACE/pB,mBAAA,CAACwqB,WAAD,oBAAsB5N,MAAtB,CADF,CADF;AAKD;;;;;"}
|