emoji-picker-react 3.6.1 → 4.0.0-rc.11

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.
Files changed (144) hide show
  1. package/LICENSE +17 -20
  2. package/README.md +94 -166
  3. package/dist/DomUtils/categoryNameFromDom.d.ts +1 -0
  4. package/dist/DomUtils/classNames.d.ts +6 -0
  5. package/dist/DomUtils/emojiElementRef.d.ts +10 -0
  6. package/dist/DomUtils/isDarkTheme.d.ts +1 -0
  7. package/dist/DomUtils/scrollCategoryIntoView.d.ts +1 -0
  8. package/dist/DomUtils/scrollTo.d.ts +1 -0
  9. package/dist/DomUtils/selectors.d.ts +12 -0
  10. package/dist/components/Layout/Flex.d.ts +14 -0
  11. package/dist/components/Layout/Relative.d.ts +7 -0
  12. package/dist/components/body/Body.d.ts +3 -0
  13. package/dist/components/body/EmojiCategory.d.ts +11 -0
  14. package/dist/components/body/EmojiList.d.ts +3 -0
  15. package/dist/components/body/EmojiVariationPicker.d.ts +3 -0
  16. package/dist/components/body/RecentlyUsed.d.ts +7 -0
  17. package/dist/components/context/ElementRefContext.d.ts +17 -0
  18. package/dist/components/context/PickerConfigContext.d.ts +8 -0
  19. package/dist/components/context/PickerContext.d.ts +21 -0
  20. package/dist/components/emoji/Emoji.d.ts +16 -0
  21. package/dist/components/footer/Preview.d.ts +7 -0
  22. package/dist/components/header/Header.d.ts +3 -0
  23. package/dist/components/header/Search.d.ts +3 -0
  24. package/dist/components/header/SkinTonePicker.d.ts +3 -0
  25. package/dist/components/main/PickerMain.d.ts +7 -0
  26. package/dist/components/navigation/CategoryNavigation.d.ts +3 -0
  27. package/dist/config/categoryConfig.d.ts +12 -0
  28. package/dist/config/cdnUrls.d.ts +2 -0
  29. package/dist/config/config.d.ts +26 -0
  30. package/dist/config/useConfig.d.ts +11 -0
  31. package/dist/data/emojis.d.ts +2 -0
  32. package/dist/data/groups.d.ts +2 -0
  33. package/dist/data/skinToneVariations.d.ts +3 -0
  34. package/dist/dataUtils/DataTypes.d.ts +8 -0
  35. package/dist/dataUtils/alphaNumericEmojiIndex.d.ts +4 -0
  36. package/dist/dataUtils/asEmoji.d.ts +2 -0
  37. package/dist/dataUtils/emojiSelectors.d.ts +15 -0
  38. package/dist/dataUtils/parseNativeEmoji.d.ts +1 -0
  39. package/dist/dataUtils/recentlyUsed.d.ts +11 -0
  40. package/dist/emoji-picker-react.cjs.development.css +13 -0
  41. package/dist/emoji-picker-react.cjs.development.js +16769 -0
  42. package/dist/emoji-picker-react.cjs.development.js.map +1 -0
  43. package/dist/emoji-picker-react.cjs.production.min.js +2 -0
  44. package/dist/emoji-picker-react.cjs.production.min.js.map +1 -0
  45. package/dist/emoji-picker-react.esm.js +16838 -0
  46. package/dist/emoji-picker-react.esm.js.map +1 -0
  47. package/dist/hooks/preloadEmoji.d.ts +4 -0
  48. package/dist/hooks/useActiveCategoryScrollDetection.d.ts +2 -0
  49. package/dist/hooks/useCloseAllOpenToggles.d.ts +4 -0
  50. package/dist/hooks/useDebouncedState.d.ts +1 -0
  51. package/dist/hooks/useEmojiElements.d.ts +1 -0
  52. package/dist/hooks/useEmojiMouseEnter.d.ts +3 -0
  53. package/dist/hooks/useFilter.d.ts +10 -0
  54. package/dist/hooks/useInitialLoad.d.ts +2 -0
  55. package/dist/hooks/useIsEmojiHidden.d.ts +2 -0
  56. package/dist/hooks/useIsSearchMode.d.ts +1 -0
  57. package/dist/hooks/useMouseDownHandlers.d.ts +2 -0
  58. package/dist/hooks/useOnScroll.d.ts +2 -0
  59. package/dist/index.d.ts +7 -0
  60. package/dist/index.js +8 -3
  61. package/dist/types/exposedTypes.d.ts +39 -0
  62. package/package.json +72 -52
  63. package/src/DomUtils/categoryNameFromDom.ts +3 -0
  64. package/src/DomUtils/classNames.ts +6 -0
  65. package/src/DomUtils/emojiElementRef.ts +42 -0
  66. package/src/DomUtils/isDarkTheme.ts +7 -0
  67. package/src/DomUtils/scrollCategoryIntoView.ts +18 -0
  68. package/src/DomUtils/scrollTo.ts +11 -0
  69. package/src/DomUtils/selectors.ts +93 -0
  70. package/src/EmojiPickerReact.css +92 -0
  71. package/src/components/Layout/Flex.css +11 -0
  72. package/src/components/Layout/Flex.tsx +28 -0
  73. package/src/components/Layout/Relative.tsx +14 -0
  74. package/src/components/body/Body.css +6 -0
  75. package/src/components/body/Body.tsx +24 -0
  76. package/src/components/body/EmojiCategory.css +42 -0
  77. package/src/components/body/EmojiCategory.tsx +40 -0
  78. package/src/components/body/EmojiList.css +5 -0
  79. package/src/components/body/EmojiList.tsx +104 -0
  80. package/src/components/body/EmojiVariationPicker.css +65 -0
  81. package/src/components/body/EmojiVariationPicker.tsx +154 -0
  82. package/src/components/body/RecentlyUsed.tsx +50 -0
  83. package/src/components/body/svg/triangle.svg +11 -0
  84. package/src/components/context/ElementRefContext.tsx +61 -0
  85. package/src/components/context/PickerConfigContext.tsx +29 -0
  86. package/src/components/context/PickerContext.tsx +143 -0
  87. package/src/components/emoji/Emoji.css +44 -0
  88. package/src/components/emoji/Emoji.tsx +111 -0
  89. package/src/components/footer/Preview.css +14 -0
  90. package/src/components/footer/Preview.tsx +88 -0
  91. package/src/components/header/Header.css +4 -0
  92. package/src/components/header/Header.tsx +21 -0
  93. package/src/components/header/Search.css +72 -0
  94. package/src/components/header/Search.tsx +40 -0
  95. package/src/components/header/SkinTonePicker.css +86 -0
  96. package/src/components/header/SkinTonePicker.tsx +55 -0
  97. package/src/components/header/svg/magnifier.svg +13 -0
  98. package/src/components/header/svg/times.svg +33 -0
  99. package/src/components/main/PickerMain.css +11 -0
  100. package/src/components/main/PickerMain.tsx +43 -0
  101. package/src/components/navigation/CategoryNavigation.css +82 -0
  102. package/src/components/navigation/CategoryNavigation.tsx +32 -0
  103. package/src/components/navigation/svg/CategoryNav.svg +508 -0
  104. package/src/config/categoryConfig.ts +99 -0
  105. package/src/config/cdnUrls.ts +24 -0
  106. package/src/config/config.ts +54 -0
  107. package/src/config/useConfig.ts +63 -0
  108. package/src/data/emojis.json +1 -0
  109. package/src/data/emojis.ts +3 -0
  110. package/src/data/groups.ts +12 -0
  111. package/src/data/skinToneVariations.ts +12 -0
  112. package/src/dataUtils/DataTypes.ts +10 -0
  113. package/src/dataUtils/alphaNumericEmojiIndex.ts +23 -0
  114. package/src/dataUtils/asEmoji.ts +5 -0
  115. package/src/dataUtils/emojiSelectors.ts +94 -0
  116. package/src/dataUtils/parseNativeEmoji.ts +6 -0
  117. package/src/dataUtils/recentlyUsed.ts +64 -0
  118. package/src/hooks/preloadEmoji.ts +29 -0
  119. package/src/hooks/useActiveCategoryScrollDetection.ts +46 -0
  120. package/src/hooks/useCloseAllOpenToggles.ts +26 -0
  121. package/src/hooks/useDebouncedState.ts +21 -0
  122. package/src/hooks/useEmojiElements.ts +7 -0
  123. package/src/hooks/useEmojiMouseEnter.ts +59 -0
  124. package/src/hooks/useFilter.ts +170 -0
  125. package/src/hooks/useInitialLoad.ts +9 -0
  126. package/src/hooks/useIsEmojiHidden.ts +16 -0
  127. package/src/hooks/useIsSearchMode.ts +7 -0
  128. package/src/hooks/useMouseDownHandlers.ts +160 -0
  129. package/src/hooks/useOnScroll.ts +28 -0
  130. package/src/index.tsx +33 -0
  131. package/src/types/exposedTypes.ts +43 -0
  132. package/.babelrc +0 -30
  133. package/.eslintrc.js +0 -37
  134. package/.github/workflows/npmpublish.yml +0 -30
  135. package/.prettierignore +0 -2
  136. package/.storybook/addons.js +0 -2
  137. package/.storybook/config.js +0 -9
  138. package/assets/captured.gif +0 -0
  139. package/dist/index.js.LICENSE.txt +0 -5
  140. package/dist/index.js.map +0 -1
  141. package/dist/main.css +0 -206
  142. package/dist/main.css.map +0 -1
  143. package/emoji-picker-react.d.ts +0 -45
  144. package/webpack.config.js +0 -52
@@ -0,0 +1 @@
1
+ {"version":3,"file":"emoji-picker-react.cjs.development.js","sources":["../src/DomUtils/categoryNameFromDom.ts","../src/types/exposedTypes.ts","../src/config/categoryConfig.ts","../src/config/config.ts","../src/components/context/PickerConfigContext.tsx","../src/DomUtils/isDarkTheme.ts","../src/config/useConfig.ts","../src/config/cdnUrls.ts","../src/data/skinToneVariations.ts","../src/dataUtils/emojiSelectors.ts","../src/dataUtils/alphaNumericEmojiIndex.ts","../src/DomUtils/scrollTo.ts","../src/DomUtils/scrollCategoryIntoView.ts","../src/hooks/useDebouncedState.ts","../src/hooks/useInitialLoad.ts","../src/components/context/ElementRefContext.tsx","../src/components/context/PickerContext.tsx","../src/hooks/useActiveCategoryScrollDetection.ts","../src/DomUtils/selectors.ts","../src/dataUtils/parseNativeEmoji.ts","../src/dataUtils/recentlyUsed.ts","../src/hooks/useCloseAllOpenToggles.ts","../src/hooks/preloadEmoji.ts","../src/hooks/useMouseDownHandlers.ts","../src/hooks/useOnScroll.ts","../src/DomUtils/classNames.ts","../src/DomUtils/emojiElementRef.ts","../src/hooks/useFilter.ts","../src/hooks/useIsEmojiHidden.ts","../src/components/emoji/Emoji.tsx","../src/components/body/EmojiCategory.tsx","../src/components/body/RecentlyUsed.tsx","../src/components/body/EmojiList.tsx","../src/dataUtils/asEmoji.ts","../src/components/body/EmojiVariationPicker.tsx","../src/components/body/Body.tsx","../src/hooks/useEmojiMouseEnter.ts","../src/components/Layout/Flex.tsx","../src/components/footer/Preview.tsx","../src/components/Layout/Relative.tsx","../src/components/navigation/CategoryNavigation.tsx","../src/components/header/Search.tsx","../src/components/header/SkinTonePicker.tsx","../src/components/header/Header.tsx","../src/hooks/useIsSearchMode.ts","../src/components/main/PickerMain.tsx","../src/index.tsx"],"sourcesContent":["export function categoryNameFromDom($category: Element | null): string | null {\n return $category?.getAttribute('data-name') ?? null;\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 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 RECENTLY_USED = 'recently_used',\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","import { Categories } from '../types/exposedTypes';\n\nexport { Categories };\n\nconst categoriesOrdered: Categories[] = [\n Categories.RECENTLY_USED,\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\nconst configByCategory: Record<Categories, CategoryConfig> = {\n [Categories.RECENTLY_USED]: {\n category: Categories.RECENTLY_USED,\n name: 'Recently 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 const baseCategoriesConfig = categoriesOrdered.map(\n category => configByCategory[category]\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): CategoriesConfig {\n const base = baseCategoriesConfig;\n if (!userCategoriesConfig?.length) {\n return base;\n }\n\n return userCategoriesConfig.map(category => {\n if (typeof category === 'string') {\n return getBaseConfigByCategory(category);\n }\n\n return {\n ...getBaseConfigByCategory(category.category),\n ...category\n };\n });\n}\n\nfunction getBaseConfigByCategory(category: Categories) {\n return configByCategory[category];\n}\n","import {\n EmojiClickData,\n EmojiStyle,\n SkinTones,\n Theme\n} from '../types/exposedTypes';\n\nimport {\n CategoriesConfig,\n baseCategoriesConfig,\n mergeCategoriesConfig\n} from './categoryConfig';\n\nexport function mergeConfig(userConfig: PickerConfig = {}) {\n const categories = mergeCategoriesConfig(userConfig.categories);\n return {\n ...basePickerConfig(),\n ...userConfig,\n categories\n };\n}\n\nexport function basePickerConfig(): PickerConfigInternal {\n return {\n autoFocusSearch: true,\n categories: baseCategoriesConfig,\n defaultSkinTone: SkinTones.NEUTRAL,\n emojiStyle: EmojiStyle.APPLE,\n onEmojiClick: function defaultOnClickHandler(\n // @ts-ignore\n event: MouseEvent,\n // @ts-ignore\n emoji: EmojiClickData\n ) {},\n searchPlaceHolder: 'Search',\n showPreview: true,\n skinTonesDisabled: false,\n theme: Theme.LIGHT\n };\n}\n\nexport type PickerConfigInternal = {\n searchPlaceHolder: string;\n defaultSkinTone: SkinTones;\n skinTonesDisabled: boolean;\n autoFocusSearch: boolean;\n emojiStyle: EmojiStyle;\n categories: CategoriesConfig;\n onEmojiClick: (event: MouseEvent, emoji: EmojiClickData) => void;\n showPreview: boolean;\n theme: Theme;\n};\n\nexport type PickerConfig = Partial<PickerConfigInternal>;\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","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","import { usePickerConfig } from '../components/context/PickerConfigContext';\nimport { isSystemDarkTheme } from '../DomUtils/isDarkTheme';\nimport {\n EmojiClickData,\n EmojiStyle,\n SkinTones,\n Theme\n} from '../types/exposedTypes';\n\nimport { CategoriesConfig } from './categoryConfig';\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 event: MouseEvent,\n emoji: EmojiClickData\n) => void {\n const { onEmojiClick } = usePickerConfig();\n return onEmojiClick;\n}\n\nexport function useShowPreviewConfig(): boolean {\n const { showPreview } = usePickerConfig();\n return showPreview;\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","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 default skinToneVariations;\n","import { Categories } from './../config/categoryConfig';\nimport { cdnUrl } from '../config/cdnUrls';\nimport emojis from '../data/emojis';\nimport { DataEmoji, DataEmojis } from './DataTypes';\nimport skinToneVariations from '../data/skinToneVariations';\nimport { EmojiStyle, SkinTones } from '../types/exposedTypes';\n\nenum EmojiProperties {\n name = 'n',\n unified = 'u',\n variations = 'v'\n}\n\nexport function emojiNames(emoji: DataEmoji): string[] {\n return emoji[EmojiProperties.name] ?? [];\n}\n\nexport function emojiName(emoji: DataEmoji): string {\n return emojiNames(emoji)[0];\n}\n\nexport function emojiUrl(\n emojiStyle: EmojiStyle,\n emoji: DataEmoji,\n skinTone?: string\n): string {\n return emojiUrlByUnified(emojiStyle, emojiUnified(emoji, skinTone));\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\nexport function emojiUrlByUnified(\n emojiStyle: EmojiStyle,\n unified: string\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 return allEmojisByUnified[unified];\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 { 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","export function scrollTo(root: HTMLElement | null, top: number = 0) {\n const $eprBody = root ? root.querySelector('.epr-body') : null;\n\n if (!root || !$eprBody) {\n return;\n }\n\n requestAnimationFrame(() => {\n $eprBody.scrollTop = top + 1;\n });\n}\n","import { scrollTo } from './scrollTo';\n\nexport function scrollCategoryIntoView(\n root: HTMLElement | null,\n category: string\n) {\n const $category = root?.querySelector(\n `[data-name=\"${category}\"]`\n ) as HTMLElement;\n\n if (!$category) {\n return;\n }\n\n const offsetTop = $category.offsetTop || 0;\n\n scrollTo(root, offsetTop);\n}\n","import { useRef, useState } from 'react';\n\nexport function useDebouncedState<T>(\n initialValue: T,\n delay: number = 0\n): [T, (value: T) => void] {\n const [state, setState] = useState<T>(initialValue);\n const timer = useRef<number | null>(null);\n\n function debouncedSetState(value: T) {\n if (timer.current) {\n clearTimeout(timer.current);\n }\n\n timer.current = window?.setTimeout(() => {\n setState(value);\n }, delay);\n }\n\n return [state, debouncedSetState];\n}\n","import { useEffect } 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';\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<HTMLElement>(null);\n\n return (\n <ElementRefContext.Provider\n value={{ PickerMainRef, AnchoredEmojiRef, BodyRef }}\n >\n {children}\n </ElementRefContext.Provider>\n );\n}\n\nexport type ElementRef = React.MutableRefObject<HTMLElement | null>;\n\ntype ElementRefs = {\n PickerMainRef: ElementRef;\n AnchoredEmojiRef: ElementRef;\n BodyRef: React.MutableRefObject<HTMLElement | null>;\n};\n\nconst ElementRefContext = React.createContext<ElementRefs>({\n PickerMainRef: React.createRef(),\n AnchoredEmojiRef: React.createRef(),\n BodyRef: React.createRef()\n});\n\ntype ElementRefKeys = keyof ElementRefs;\n\nexport function useElementRef(key: ElementRefKeys) {\n const { [key]: elementRef } = React.useContext(ElementRefContext);\n return elementRef;\n}\n\nexport function usePickerMainRef() {\n return useElementRef('PickerMainRef');\n}\n\nexport function useAnchoredEmojiRef() {\n return useElementRef('AnchoredEmojiRef');\n}\n\nexport function useSetAnchoredEmojiRef(): (target: null | HTMLElement) => void {\n const AnchoredEmojiRef = useAnchoredEmojiRef();\n return (target: null | HTMLElement) => {\n AnchoredEmojiRef.current = target;\n };\n}\n\nexport function useBodyRef(): React.MutableRefObject<HTMLDivElement | null> {\n return useElementRef(\n 'BodyRef'\n ) as React.MutableRefObject<HTMLDivElement | null>;\n}\n","import * as React from 'react';\nimport { useState } from 'react';\nimport { useDefaultSkinToneConfig } from '../../config/useConfig';\nimport { alphaNumericEmojiIndex } from '../../dataUtils/alphaNumericEmojiIndex';\nimport { DataEmoji } from '../../dataUtils/DataTypes';\nimport { scrollCategoryIntoView } from '../../DomUtils/scrollCategoryIntoView';\nimport { useDebouncedState } from '../../hooks/useDebouncedState';\nimport { FilterDict } from '../../hooks/useFilter';\nimport { useMarkInitialLoad } from '../../hooks/useInitialLoad';\nimport { SkinTones } from '../../types/exposedTypes';\nimport { usePickerMainRef } from './ElementRefContext';\n\nexport function PickerContextProvider({ children }: Props) {\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\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 filterRef,\n searchTerm,\n activeCategoryState,\n activeSkinTone,\n emojisThatFailedToLoadState,\n isPastInitialLoad,\n emojiVariationPickerState,\n skinToneFanOpenState,\n disallowClickRef\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) => 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}>({\n searchTerm: ['', () => {}],\n activeCategoryState: [null, () => {}],\n activeSkinTone: [SkinTones.NEUTRAL, () => {}],\n emojisThatFailedToLoadState: [new Set(), () => {}],\n isPastInitialLoad: true,\n emojiVariationPickerState: [null, () => {}],\n skinToneFanOpenState: [false, () => {}],\n filterRef: { current: {} },\n disallowClickRef: { current: false }\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 useSearchTermState() {\n const { searchTerm } = React.useContext(PickerContext);\n return searchTerm;\n}\n\nexport function useActiveCategoryState(): [\n ActiveCategoryState,\n (nextActive: string) => void,\n (nextActive: string) => void\n] {\n const { activeCategoryState } = React.useContext(PickerContext);\n const PickerMainRef = usePickerMainRef();\n\n const [activeCategory, setActiveCategory] = activeCategoryState;\n return [activeCategory, setCategory, setActiveCategoryAndScroll];\n\n function setCategory(category: string) {\n setActiveCategory(category);\n }\n\n function setActiveCategoryAndScroll(category: string) {\n setCategory(category);\n scrollCategoryIntoView(PickerMainRef.current, category);\n }\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 type FilterState = Record<string, FilterDict>;\n\ntype ActiveCategoryState = null | string;\n","import { useEffect } from 'react';\n\nimport { categoryNameFromDom } from '../DomUtils/categoryNameFromDom';\nimport { ElementRef } from '../components/context/ElementRefContext';\nimport { useActiveCategoryState } from '../components/context/PickerContext';\n\nexport function useActiveCategoryScrollDetection(bodyRef: ElementRef) {\n const [, setActiveCategory] = useActiveCategoryState();\n\n useEffect(() => {\n const visibleCategories = new Map();\n const observer = new IntersectionObserver(\n entries => {\n const refCurrent = bodyRef.current;\n if (!refCurrent) {\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.current?.querySelectorAll('.epr-emoji-category').forEach(el => {\n observer.observe(el);\n });\n }, [bodyRef]);\n}\n","import { DataEmoji } from '../dataUtils/DataTypes';\nimport { emojiByUnified } from '../dataUtils/emojiSelectors';\n\nexport function buttonFromEmoji(\n emojiElement: HTMLElement | null\n): HTMLButtonElement | null {\n return emojiElement?.closest('button.epr-emoji') ?? null;\n}\n\nexport function emojiFromElement(\n element: HTMLElement | null\n): DataEmoji | undefined {\n const unified = originalUnifiedFromEmojiElement(element);\n\n if (!unified) {\n return;\n }\n return emojiByUnified(unified);\n}\n\nexport function isEmojiElement(element: HTMLElement | null): boolean {\n return Boolean(\n element?.matches('button.epr-emoji') ||\n element?.parentElement?.matches('button.epr-emoji')\n );\n}\n\nexport function closestCategory(\n element: HTMLElement | null\n): HTMLElement | null {\n return element?.closest('.epr-emoji-category') ?? null;\n}\n\nexport function categoryLabelFromCategory(\n category: HTMLElement | null\n): HTMLElement | null {\n return category?.querySelector('.epr-emoji-category-label') ?? null;\n}\n\nexport function closestCategoryLabel(\n element: null | HTMLElement\n): HTMLElement | null {\n const category = closestCategory(element);\n return categoryLabelFromCategory(category);\n}\n\nexport function elementHeight(element: HTMLElement | null): number {\n return element?.clientHeight ?? 0;\n}\n\nexport function emojiTrueOffsetTop(element: HTMLElement | null): number {\n const button = buttonFromEmoji(element);\n const category = closestCategory(button);\n\n return elementOffsetTop(button) + elementOffsetTop(category);\n}\nexport function emojiTruOffsetLeft(element: HTMLElement | null): number {\n const button = buttonFromEmoji(element);\n const category = closestCategory(button);\n\n return elementOffsetLeft(button) + elementOffsetLeft(category);\n}\n\nfunction elementOffsetTop(element: HTMLElement | null): number {\n return element?.offsetTop ?? 0;\n}\n\nfunction elementOffsetLeft(element: HTMLElement | null): number {\n return element?.offsetLeft ?? 0;\n}\n\nexport function unifiedFromEmojiElement(\n emoji: HTMLElement | null\n): string | null {\n return elementDataSetKey(buttonFromEmoji(emoji), 'unified') ?? null;\n}\n\nexport function originalUnifiedFromEmojiElement(\n emoji: HTMLElement | null\n): string | null {\n return elementDataSetKey(buttonFromEmoji(emoji), 'original') ?? null;\n}\n\nfunction elementDataSetKey(\n element: HTMLElement | null,\n key: string\n): string | null {\n return elementDataSet(element)[key] ?? null;\n}\n\nfunction elementDataSet(element: HTMLElement | null): DOMStringMap {\n return element?.dataset ?? {};\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 } from '../types/exposedTypes';\nimport { DataEmoji } from './DataTypes';\nimport { emojiUnified } from './emojiSelectors';\n\nconst RECENTLY_USED_LS_KEY = 'epr_recentlyUsed';\n\ntype RecentlyUsedItem = {\n unified: string;\n original: string;\n count: number;\n};\n\ntype RecentlyUsed = RecentlyUsedItem[];\n\nexport function getRecentlyUsed(): RecentlyUsed {\n if (!window?.localStorage) {\n return [];\n }\n try {\n return JSON.parse(\n window?.localStorage.getItem(RECENTLY_USED_LS_KEY) ?? '[]'\n );\n } catch {\n return [];\n }\n}\n\nexport function setRecentlyUsed(emoji: DataEmoji, skinTone: SkinTones) {\n const recent = getRecentlyUsed();\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: RecentlyUsedItem[];\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 setTimeout(() => {\n window?.localStorage.setItem(\n RECENTLY_USED_LS_KEY,\n JSON.stringify(nextList)\n );\n // Prevents the change from being seen immediately.\n }, 10);\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 }, [[variationPicker, skinToneFanOpen]]);\n\n return {\n closeAllOpenToggles,\n dependencyArray: [variationPicker, skinToneFanOpen]\n };\n}\n","import {\n emojiUnified,\n emojiUrlByUnified,\n emojiVariations\n} from '../dataUtils/emojiSelectors';\nimport { DataEmoji } from '../dataUtils/DataTypes';\nimport { EmojiStyle } from '../types/exposedTypes';\n\nexport function preloadEmoji(emoji: DataEmoji, emojiStyle: EmojiStyle): void {\n const unified = emojiUnified(emoji);\n\n if (preloadedEmojs.has(unified)) {\n return;\n }\n\n emojiVariations(emoji).forEach(variation => {\n const emojiUrl = emojiUrlByUnified(emojiStyle, variation);\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 { SkinTones } from './../types/exposedTypes';\nimport { useEffect, useRef } from 'react';\n\nimport { emojiFromElement, isEmojiElement } from '../DomUtils/selectors';\nimport { useSetAnchoredEmojiRef } from '../components/context/ElementRefContext';\nimport {\n useActiveSkinToneState,\n useDisallowClickRef,\n useEmojiVariationPickerState\n} from '../components/context/PickerContext';\nimport {\n useEmojiStyleConfig,\n useOnEmojiClickConfig\n} from '../config/useConfig';\nimport { DataEmoji } from '../dataUtils/DataTypes';\nimport {\n activeVariationFromUnified,\n emojiHasVariations,\n emojiNames,\n emojiUnified,\n emojiUrlByUnified\n} from '../dataUtils/emojiSelectors';\nimport { parseNativeEmoji } from '../dataUtils/parseNativeEmoji';\nimport { setRecentlyUsed } from '../dataUtils/recentlyUsed';\nimport { EmojiClickData, EmojiStyle } from '../types/exposedTypes';\n\nimport { useCloseAllOpenToggles } from './useCloseAllOpenToggles';\nimport { preloadEmoji } from './preloadEmoji';\n\nlet mouseDownTimer: undefined | number;\n\nexport function useMouseDownHandlers(\n BodyRef: React.MutableRefObject<HTMLElement | null>\n) {\n const preloading = useRef(false);\n const setAnchoredEmojiRef = useSetAnchoredEmojiRef();\n const disallowClickRef = useDisallowClickRef();\n const [, setEmojiVariationPicker] = useEmojiVariationPickerState();\n const { closeAllOpenToggles, dependencyArray } = useCloseAllOpenToggles();\n const [activeSkinTone] = useActiveSkinToneState();\n const onEmojiClick = useOnEmojiClickConfig();\n const emojiStyle = useEmojiStyleConfig();\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, ...dependencyArray]);\n\n function onClick(event: MouseEvent) {\n if (disallowClickRef.current) {\n return;\n }\n\n closeAllOpenToggles();\n\n const emoji = emojiFromEvent(event);\n\n if (!emoji) {\n return;\n }\n\n const unified = emojiUnified(emoji);\n\n const skinToneToUse = activeVariationFromUnified(unified) || activeSkinTone;\n\n setRecentlyUsed(emoji, skinToneToUse);\n onEmojiClick(event, emojiClickOutput(emoji, skinToneToUse));\n }\n\n function onMouseDown(event: MouseEvent) {\n if (mouseDownTimer) {\n clearTimeout(mouseDownTimer);\n }\n\n const emoji = emojiFromEvent(event);\n\n if (!emoji || !emojiHasVariations(emoji)) {\n return;\n }\n\n preloading.current = true;\n\n window?.setTimeout(() => {\n if (preloading.current) {\n preloadEmoji(emoji, emojiStyle);\n preloading.current = false;\n }\n }, 50);\n\n mouseDownTimer = window?.setTimeout(() => {\n disallowClickRef.current = true;\n mouseDownTimer = undefined;\n closeAllOpenToggles();\n setAnchoredEmojiRef(event.target as HTMLElement);\n setEmojiVariationPicker(emoji);\n }, 250);\n }\n function onMouseUp() {\n preloading.current = false;\n\n if (mouseDownTimer) {\n clearTimeout(mouseDownTimer);\n mouseDownTimer = 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}\n\nfunction emojiFromEvent(event: MouseEvent): DataEmoji | undefined {\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): EmojiClickData {\n const unified = emojiUnified(emoji, activeSkinTone);\n return {\n activeSkinTone,\n emoji: parseNativeEmoji(unified),\n getImageUrl(emojiStyle: EmojiStyle) {\n return emojiUrlByUnified(emojiStyle, unified);\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, dependencyArray } = 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 }, [...dependencyArray, BodyRef, closeAllOpenToggles]);\n}\n","export enum ClassNames {\n hiddenOnSearch = 'epr-hidden-on-search',\n searchActive = 'epr-search-active',\n hidden = 'epr-hidden',\n visible = 'epr-visible'\n}\n","import { ClassNames } from './classNames';\n\nexport type EmojiRef = { current: null | HTMLElement };\n\nexport const emojiRef: Record<string, EmojiRef> = {};\n\nexport function getEmojiRef(unified: string): EmojiRef {\n emojiRef[unified] = emojiRef[unified] || { current: null };\n return emojiRef[unified];\n}\n\nexport function iterateEmojiRef(\n callback: (ref: HTMLElement, unified: string) => void\n): void {\n for (const unified in emojiRef) {\n if (!emojiRef[unified] || emojiRef[unified].current === null) {\n continue;\n }\n\n callback(emojiRef[unified].current as HTMLElement, unified);\n }\n}\n\nexport function hideEmoji(unified: string): void {\n hideElement(getEmojiRef(unified).current);\n}\n\nexport function showEmoji(unified: string): void {\n showElement(getEmojiRef(unified).current);\n}\n\nexport function hideElement(element: HTMLElement | null): void {\n if (!element) return;\n element.classList.add(ClassNames.hidden);\n element.classList.remove(ClassNames.visible);\n}\n\nexport function showElement(element: HTMLElement | null): void {\n if (!element) return;\n element.classList.remove(ClassNames.hidden);\n element.classList.add(ClassNames.visible);\n}\n","import { scrollTo } from '../DomUtils/scrollTo';\nimport { usePickerMainRef } 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';\nimport {\n hideElement,\n hideEmoji,\n iterateEmojiRef,\n showElement\n} from '../DomUtils/emojiElementRef';\nimport { useRef } from 'react';\nimport { ClassNames } from '../DomUtils/classNames';\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 useFilter() {\n const SearchInputRef = useRef<HTMLInputElement>(null);\n const filterRef = useFilterRef();\n const setFilterRef = useSetFilterRef();\n\n const [searchTerm, setSearchTerm] = useSearchTermState();\n const PickerMainRef = usePickerMainRef();\n\n return {\n onChange,\n searchTerm,\n clearSearch,\n SearchInputRef\n };\n\n function clearSearch() {\n if (SearchInputRef.current) {\n SearchInputRef.current.value = '';\n }\n onChange('');\n }\n\n function onChange(nextValue: string) {\n scrollTo(PickerMainRef.current, 0);\n\n const filter = filterRef.current;\n\n if (filter?.[nextValue] || nextValue.length <= 1) {\n return applyFilterToDom(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 applyFilterToDom(nextValue);\n }\n\n setFilterRef(current =>\n Object.assign(current, {\n [nextValue]: filterEmojiObjectByKeyword(longestMatch, nextValue)\n })\n );\n applyFilterToDom(nextValue);\n }\n\n // This function is the farthest from being \"React\" as it can be\n // It performs DOM manipulation and is not a pure function\n // But it is the most performant way to do it, at least 5 times faster than\n // react re-rendering. The reason I trust it to work correctly is because we\n // eventually do update the state, which keeps the DOM in sync - after the fact\n function applyFilterToDom(searchTerm: string): void {\n PickerMainRef.current?.classList.toggle(\n ClassNames.searchActive,\n !!searchTerm\n );\n\n iterateEmojiRef((element, unified) => {\n if (isEmojiFilteredBySearchTerm(unified, filterRef.current, searchTerm)) {\n hideElement(element);\n return;\n }\n showElement(element);\n });\n\n requestAnimationFrame(() => {\n setSearchTerm(searchTerm);\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 } else {\n hideEmoji(unified);\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","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) => boolean {\n const [emojisThatFailedToLoad] = useEmojisThatFailedToLoadState();\n const isEmojiFiltered = useIsEmojiFiltered();\n\n return (emoji: DataEmoji): boolean => {\n const unified = emojiUnified(emoji);\n\n return emojisThatFailedToLoad.has(unified) || isEmojiFiltered(unified);\n };\n}\n","import clsx from 'clsx';\nimport * as React from 'react';\n\nimport { DataEmoji } from '../../dataUtils/DataTypes';\nimport {\n emojiHasVariations,\n emojiName,\n emojiUnified,\n emojiUrlByUnified\n} from '../../dataUtils/emojiSelectors';\nimport { parseNativeEmoji } from '../../dataUtils/parseNativeEmoji';\nimport { ClassNames } from '../../DomUtils/classNames';\nimport { EmojiRef } from '../../DomUtils/emojiElementRef';\nimport { EmojiStyle } from '../../types/exposedTypes';\nimport { useEmojisThatFailedToLoadState } from '../context/PickerContext';\nimport './Emoji.css';\n\ntype Props = Readonly<{\n hidden?: boolean;\n emojiStyle: EmojiStyle;\n emoji: DataEmoji;\n unified: string;\n showVariations?: boolean;\n size?: number;\n emojiRef?: EmojiRef;\n}>;\n\nexport function Emoji({\n emoji,\n unified,\n hidden,\n emojiStyle,\n showVariations = true,\n size,\n emojiRef\n}: Props) {\n const hasVariations = emojiHasVariations(emoji);\n\n const style = {} as React.CSSProperties;\n if (size) {\n style.width = style.height = style.fontSize = `${size}px`;\n }\n\n const base = {\n style,\n unified\n };\n\n return (\n <button\n className={clsx('epr-emoji', {\n [ClassNames.hidden]: hidden,\n [ClassNames.visible]: !hidden,\n 'epr-emoji-has-variations': hasVariations && showVariations\n })}\n data-unified={unified}\n data-original={emojiUnified(emoji)}\n // @ts-ignore - let's ignore the fact this is not a real react ref, ok?\n ref={emojiRef}\n >\n {emojiStyle === EmojiStyle.NATIVE ? (\n <NativeEmoji {...base} />\n ) : (\n <EmojiImg {...base} emoji={emoji} emojiStyle={emojiStyle} />\n )}\n </button>\n );\n}\n\nfunction NativeEmoji({\n unified,\n style\n}: {\n unified: string;\n style: React.CSSProperties;\n}) {\n return (\n <span className=\"epr-emoji-native\" data-unified={unified} style={style}>\n {parseNativeEmoji(unified)}\n </span>\n );\n}\n\nfunction EmojiImg({\n emoji,\n unified,\n emojiStyle,\n style\n}: {\n emoji: DataEmoji;\n unified: string;\n emojiStyle: EmojiStyle;\n style: React.CSSProperties;\n}) {\n const [, setEmojisThatFailedToLoad] = useEmojisThatFailedToLoadState();\n\n return (\n <img\n src={emojiUrlByUnified(emojiStyle, unified)}\n alt={emojiName(emoji)}\n className=\"epr-emoji-img\"\n loading=\"lazy\"\n onError={onError}\n style={style}\n />\n );\n\n function onError() {\n setEmojisThatFailedToLoad(prev => new Set(prev).add(unified));\n }\n}\n","import clsx from 'clsx';\nimport * as React from 'react';\n\nimport {\n CategoryConfig,\n categoryFromCategoryConfig,\n categoryNameFromCategoryConfig\n} from '../../config/categoryConfig';\nimport { ClassNames } from '../../DomUtils/classNames';\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('epr-emoji-category', {\n [ClassNames.hidden]: hidden,\n [ClassNames.hiddenOnSearch]: hiddenOnSearch\n })}\n data-name={category}\n >\n <div className=\"epr-emoji-category-label\">{categoryName}</div>\n {children}\n </li>\n );\n}\n","import * as React from 'react';\n\nimport { CategoryConfig } from '../../config/categoryConfig';\nimport { useEmojiStyleConfig } from '../../config/useConfig';\nimport { emojiByUnified } from '../../dataUtils/emojiSelectors';\nimport { getRecentlyUsed } from '../../dataUtils/recentlyUsed';\nimport { useSearchTermState } from '../context/PickerContext';\nimport { Emoji } from '../emoji/Emoji';\n\nimport { EmojiCategory } from './EmojiCategory';\n\ntype Props = Readonly<{\n categoryConfig: CategoryConfig;\n}>;\n\nexport function RecentlyUsed({ categoryConfig }: Props) {\n const [searchTerm] = useSearchTermState();\n const recentlyUsed = getRecentlyUsed();\n const emojiStyle = useEmojiStyleConfig();\n\n if (searchTerm) {\n return null;\n }\n\n if (recentlyUsed.length === 0) {\n return null;\n }\n\n return (\n <EmojiCategory categoryConfig={categoryConfig} hiddenOnSearch>\n {recentlyUsed.map(recentlyUsedItem => {\n const emoji = emojiByUnified(recentlyUsedItem.original);\n\n if (!emoji) {\n return null;\n }\n\n return (\n <Emoji\n showVariations={false}\n unified={recentlyUsedItem.unified}\n emojiStyle={emojiStyle}\n emoji={emoji}\n key={recentlyUsedItem.unified}\n />\n );\n })}\n </EmojiCategory>\n );\n}\n","import * as React from 'react';\n\nimport {\n Categories,\n CategoryConfig,\n categoryFromCategoryConfig\n} from '../../config/categoryConfig';\nimport {\n useCategoriesConfig,\n useEmojiStyleConfig\n} from '../../config/useConfig';\nimport { emojisByCategory, emojiUnified } from '../../dataUtils/emojiSelectors';\nimport { useIsEmojiHidden } from '../../hooks/useIsEmojiHidden';\nimport {\n useActiveSkinToneState,\n useIsPastInitialLoad\n} from '../context/PickerContext';\nimport { Emoji } from '../emoji/Emoji';\n\nimport { EmojiCategory } from './EmojiCategory';\nimport { RecentlyUsed } from './RecentlyUsed';\nimport './EmojiList.css';\nimport { getEmojiRef } from '../../DomUtils/emojiElementRef';\n\nexport function EmojiList() {\n const categories = useCategoriesConfig();\n\n return (\n <ul className=\"epr-emoji-list\">\n {categories.map((categoryConfig, index) => {\n const category = categoryFromCategoryConfig(categoryConfig);\n\n if (category === Categories.RECENTLY_USED) {\n return (\n <RecentlyUsed key={category} categoryConfig={categoryConfig} />\n );\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 emojiStyle = useEmojiStyleConfig();\n const isPastInitialLoad = useIsPastInitialLoad();\n const [activeSkinTone] = useActiveSkinToneState();\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 hidden = isEmojiHidden(emoji);\n const emojiRef = getEmojiRef(emojiUnified(emoji));\n\n if (hidden) {\n hiddenCounter++;\n }\n\n return (\n <Emoji\n key={unified}\n emoji={emoji}\n unified={unified}\n hidden={hidden}\n emojiStyle={emojiStyle}\n emojiRef={emojiRef}\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 { 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\nimport {\n buttonFromEmoji,\n elementHeight,\n emojiTrueOffsetTop,\n emojiTruOffsetLeft\n} from '../../DomUtils/selectors';\nimport { useEmojiStyleConfig } 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} from '../context/ElementRefContext';\nimport { useEmojiVariationPickerState } from '../context/PickerContext';\nimport { Emoji } from '../emoji/Emoji';\nimport './EmojiVariationPicker.css';\n\nenum Direction {\n Up,\n Down\n}\n\nexport function EmojiVariationPicker() {\n const VariationPickerRef = React.useRef<HTMLDivElement>(null);\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\n const visible = emoji && emojiHasVariations(emoji);\n let top, pointerStyle;\n\n if (!visible) {\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 })}\n style={{ top }}\n >\n {visible\n ? [emojiUnified(safeEmoji)]\n .concat(emojiVariations(safeEmoji))\n .slice(0, 6)\n .map(unified => (\n <Emoji\n key={unified}\n emoji={safeEmoji}\n unified={unified}\n emojiStyle={emojiStyle}\n showVariations={false}\n />\n ))\n : null}\n <div\n className={clsx('epr-emoji-pointer', {\n 'pointing-up': getMenuDirection() === Direction.Down\n })}\n style={pointerStyle}\n />\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 = buttonFromEmoji(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 - 12;\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 = buttonFromEmoji(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 { useActiveCategoryScrollDetection } from '../../hooks/useActiveCategoryScrollDetection';\nimport { useMouseDownHandlers } from '../../hooks/useMouseDownHandlers';\nimport { useOnScroll } from '../../hooks/useOnScroll';\nimport { useBodyRef } from '../context/ElementRefContext';\n\nimport { EmojiList } from './EmojiList';\nimport { EmojiVariationPicker } from './EmojiVariationPicker';\nimport './Body.css';\n\nexport function Body() {\n const BodyRef = useBodyRef();\n useActiveCategoryScrollDetection(BodyRef);\n useOnScroll(BodyRef);\n useMouseDownHandlers(BodyRef);\n\n return (\n <div className=\"epr-body\" ref={BodyRef}>\n <EmojiVariationPicker />\n <EmojiList />\n </div>\n );\n}\n","import { useEffect } from 'react';\n\nimport {\n buttonFromEmoji,\n originalUnifiedFromEmojiElement,\n unifiedFromEmojiElement\n} from '../DomUtils/selectors';\nimport { useBodyRef } from '../components/context/ElementRefContext';\nimport { HoveredEmoji } from '../components/footer/Preview';\n\nexport function useEmojiMouseEnter(\n allow: boolean,\n setHoveredEmoji: React.Dispatch<React.SetStateAction<HoveredEmoji>>\n) {\n const BodyRef = useBodyRef();\n\n useEffect(() => {\n if (!allow) {\n return;\n }\n const bodyRef = BodyRef.current;\n\n bodyRef?.addEventListener('mouseover', onMouseOver, {\n passive: true\n });\n\n bodyRef?.addEventListener('mouseout', onMouseOut, {\n passive: true\n });\n\n return () => {\n bodyRef?.removeEventListener('mouseover', onMouseOver);\n bodyRef?.removeEventListener('mouseout', onMouseOut);\n };\n }, [BodyRef.current]);\n\n function onMouseOver(e: MouseEvent) {\n const button = buttonFromEmoji(e.target as HTMLElement);\n\n if (!button) {\n return onMouseOut();\n }\n const unified = unifiedFromEmojiElement(button);\n const originalUnified = originalUnifiedFromEmojiElement(button);\n\n if (!unified || !originalUnified) {\n return onMouseOut();\n }\n\n setHoveredEmoji({\n unified,\n originalUnified\n });\n }\n\n function onMouseOut() {\n setHoveredEmoji(null);\n }\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 * as React from 'react';\nimport { useState } from 'react';\n\nimport {\n useEmojiStyleConfig,\n useShowPreviewConfig\n} from '../../config/useConfig';\nimport { asEmoji } from '../../dataUtils/asEmoji';\nimport {\n emojiByUnified,\n emojiName,\n emojiUnified\n} from '../../dataUtils/emojiSelectors';\nimport { useEmojiMouseEnter } from '../../hooks/useEmojiMouseEnter';\nimport Flex from '../Layout/Flex';\nimport { Emoji } from '../emoji/Emoji';\nimport './Preview.css';\nimport { useEmojiVariationPickerState } from '../context/PickerContext';\n\nexport function Preview() {\n const showPreview = useShowPreviewConfig();\n const [hoveredEmoji, setHoveredEmoji] = useState<HoveredEmoji>(null);\n const emojiStyle = useEmojiStyleConfig();\n const [variationPickerEmoji] = useEmojiVariationPickerState();\n\n useEmojiMouseEnter(showPreview, setHoveredEmoji);\n\n if (!showPreview) {\n return null;\n }\n\n const emoji = emojiByUnified(hoveredEmoji?.originalUnified);\n\n const show = emoji != null && hoveredEmoji != null;\n\n return (\n <Flex className=\"epr-preview\">\n <PreviewContent />\n </Flex>\n );\n\n function PreviewContent() {\n const defaultEmoji = asEmoji(\n variationPickerEmoji ?? emojiByUnified('1f60a')\n );\n const defaultText = variationPickerEmoji\n ? emojiName(variationPickerEmoji)\n : \"What's your mood?\";\n\n return (\n <>\n <div>\n {show ? (\n <Emoji\n unified={hoveredEmoji?.unified as string}\n emoji={asEmoji(emoji)}\n showVariations={false}\n emojiStyle={emojiStyle}\n hidden={false}\n size={45}\n />\n ) : defaultEmoji ? (\n <Emoji\n unified={emojiUnified(defaultEmoji)}\n emoji={defaultEmoji}\n showVariations={false}\n emojiStyle={emojiStyle}\n hidden={false}\n size={45}\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 HoveredEmoji = null | {\n unified: string;\n originalUnified: string;\n};\n","import * as React from 'react';\n\ntype Props = Readonly<{\n children: React.ReactNode;\n className?: string;\n}>;\n\nexport default function Relative({ children, className }: Props) {\n return (\n <div style={{ position: 'relative' }} className={className}>\n {children}\n </div>\n );\n}\n","import clsx from 'clsx';\nimport * as React from 'react';\nimport './CategoryNavigation.css';\n\nimport { categoryFromCategoryConfig } from '../../config/categoryConfig';\nimport { useCategoriesConfig } from '../../config/useConfig';\nimport { useActiveCategoryState } from '../context/PickerContext';\n\nexport function CategoryNavigation() {\n const categoriesConfig = useCategoriesConfig();\n const [\n activeCategory,\n ,\n setActiveCategoryAndScroll\n ] = useActiveCategoryState();\n return (\n <div className=\"epr-category-nav\">\n {categoriesConfig.map(categoryConfig => {\n const category = categoryFromCategoryConfig(categoryConfig);\n return (\n <button\n className={clsx('epr-cat-btn', `epr-icn-${category}`, {\n active: category === activeCategory\n })}\n key={category}\n onClick={() => setActiveCategoryAndScroll(category)}\n />\n );\n })}\n </div>\n );\n}\n","import * as React from 'react';\n\nimport {\n useAutoFocusSearchConfig,\n useSearchPlaceHolderConfig\n} from '../../config/useConfig';\nimport { useCloseAllOpenToggles } from '../../hooks/useCloseAllOpenToggles';\nimport { useFilter } from '../../hooks/useFilter';\nimport Relative from '../Layout/Relative';\nimport './Search.css';\n\nexport function Search() {\n const { closeAllOpenToggles } = useCloseAllOpenToggles();\n\n const placeholder = useSearchPlaceHolderConfig();\n const autoFocus = useAutoFocusSearchConfig();\n const { onChange, searchTerm, clearSearch, SearchInputRef } = useFilter();\n\n return (\n <Relative className=\"epr-search-container\">\n <input\n autoFocus={autoFocus}\n onFocus={closeAllOpenToggles}\n className=\"epr-search\"\n type=\"text\"\n placeholder={placeholder}\n onChange={event => {\n setTimeout(() => {\n onChange(event.target.value);\n });\n }}\n ref={SearchInputRef}\n />\n <div className=\"epr-icn-search\" />\n {searchTerm ? (\n <button className=\"epr-btn-clear-search\" onClick={clearSearch} />\n ) : null}\n </Relative>\n );\n}\n","import clsx from 'clsx';\nimport * as React from 'react';\n\nimport { useSkinTonesDisabledConfig } from '../../config/useConfig';\nimport skinToneVariations from '../../data/skinToneVariations';\nimport { useCloseAllOpenToggles } from '../../hooks/useCloseAllOpenToggles';\nimport Relative from '../Layout/Relative';\nimport {\n useActiveSkinToneState,\n useSkinToneFanOpenState\n} from '../context/PickerContext';\nimport './SkinTonePicker.css';\n\nexport function SkinTonePicker() {\n const isDisabled = useSkinTonesDisabledConfig();\n const [isOpen, setIsOpen] = useSkinToneFanOpenState();\n const [activeSkinTone, setActiveSkinTone] = useActiveSkinToneState();\n const { closeAllOpenToggles } = useCloseAllOpenToggles();\n\n if (isDisabled) {\n return null;\n }\n\n return (\n <Relative\n className={clsx('epr-skin-tones', {\n open: isOpen\n })}\n >\n <div className=\"epr-skin-tone-select\" onClick={() => setIsOpen(!isOpen)}>\n {skinToneVariations.map((skinToneVariation, i) => {\n const active = skinToneVariation === activeSkinTone;\n return (\n <button\n style={{\n transform: clsx(\n `translateX(-${i * (isOpen ? 28 : 0)}px)`,\n isOpen && active && 'scale(1.3)'\n )\n }}\n onClick={() => {\n isOpen && setActiveSkinTone(skinToneVariation);\n closeAllOpenToggles();\n }}\n key={skinToneVariation}\n className={clsx(`epr-tone-${skinToneVariation}`, 'epr-tone', {\n active\n })}\n ></button>\n );\n })}\n </div>\n </Relative>\n );\n}\n","import * as React from 'react';\n\nimport Flex from '../Layout/Flex';\nimport Relative from '../Layout/Relative';\nimport { CategoryNavigation } from '../navigation/CategoryNavigation';\n\nimport { Search } from './Search';\nimport { SkinTonePicker } from './SkinTonePicker';\nimport './Header.css';\n\nexport function Header() {\n return (\n <Relative className=\"epr-header\">\n <Flex className=\"epr-header-overlay\">\n <Search />\n <SkinTonePicker />\n </Flex>\n <CategoryNavigation />\n </Relative>\n );\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 clsx from 'clsx';\nimport * as React from 'react';\n\nimport { useThemeConfig } from '../../config/useConfig';\nimport { ClassNames } from '../../DomUtils/classNames';\nimport useIsSearchMode from '../../hooks/useIsSearchMode';\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 return (\n <aside\n className={clsx('EmojiPickerReact', 'epr-main', {\n [ClassNames.searchActive]: searchModeActive,\n 'epr-dark-theme': theme === Theme.DARK\n })}\n ref={PickerMainRef}\n >\n {children}\n </aside>\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';\nexport {\n EmojiStyle,\n SkinTones,\n Theme,\n Categories,\n EmojiClickData\n} from './types/exposedTypes';\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"],"names":["categoryNameFromDom","$category","getAttribute","EmojiStyle","Theme","SkinTones","Categories","categoriesOrdered","RECENTLY_USED","SMILEYS_PEOPLE","ANIMALS_NATURE","FOOD_DRINK","TRAVEL_PLACES","ACTIVITIES","OBJECTS","SYMBOLS","FLAGS","configByCategory","category","name","baseCategoriesConfig","map","categoryFromCategoryConfig","categoryNameFromCategoryConfig","mergeCategoriesConfig","userCategoriesConfig","base","length","getBaseConfigByCategory","mergeConfig","userConfig","categories","basePickerConfig","autoFocusSearch","defaultSkinTone","NEUTRAL","emojiStyle","APPLE","onEmojiClick","defaultOnClickHandler","event","emoji","searchPlaceHolder","showPreview","skinTonesDisabled","theme","LIGHT","ConfigContext","React","PickerConfigProvider","children","config","Provider","value","usePickerConfig","isSystemDarkTheme","window","matchMedia","matches","useSearchPlaceHolderConfig","useDefaultSkinToneConfig","useSkinTonesDisabledConfig","useEmojiStyleConfig","useAutoFocusSearchConfig","useCategoriesConfig","useOnEmojiClickConfig","useShowPreviewConfig","useThemeConfig","AUTO","DARK","CDN_URL_APPLE","CDN_URL_FACEBOOK","CDN_URL_TWITTER","CDN_URL_GOOGLE","cdnUrl","TWITTER","GOOGLE","FACEBOOK","skinToneVariations","MEDIUM_LIGHT","MEDIUM","MEDIUM_DARK","EmojiProperties","emojiNames","emojiName","emojiUnified","skinTone","unified","emojiHasVariations","emojiVariationUnified","emojisByCategory","emojis","emojiUrlByUnified","emojiVariations","variations","find","variation","includes","emojiByUnified","allEmojisByUnified","allEmojis","Object","values","flat","setTimeout","reduce","Emoji","activeVariationFromUnified","split","suspectedSkinTone","alphaNumericEmojiIndex","searchIndex","joinedNameString","join","replace","forEach","char","scrollTo","root","top","$eprBody","querySelector","requestAnimationFrame","scrollTop","scrollCategoryIntoView","offsetTop","useDebouncedState","initialValue","delay","useState","state","setState","timer","useRef","debouncedSetState","current","clearTimeout","useMarkInitialLoad","dispatch","useEffect","ElementRefContextProvider","PickerMainRef","AnchoredEmojiRef","BodyRef","ElementRefContext","useElementRef","key","elementRef","usePickerMainRef","useAnchoredEmojiRef","useSetAnchoredEmojiRef","target","useBodyRef","PickerContextProvider","filterRef","disallowClickRef","searchTerm","skinToneFanOpenState","activeSkinTone","activeCategoryState","emojisThatFailedToLoadState","Set","emojiVariationPickerState","isPastInitialLoad","setIsPastInitialLoad","PickerContext","useFilterRef","useDisallowClickRef","useSearchTermState","useActiveCategoryState","activeCategory","setActiveCategory","setCategory","setActiveCategoryAndScroll","useActiveSkinToneState","useEmojisThatFailedToLoadState","useIsPastInitialLoad","useEmojiVariationPickerState","useSkinToneFanOpenState","useActiveCategoryScrollDetection","bodyRef","visibleCategories","Map","observer","IntersectionObserver","entries","refCurrent","entry","id","set","intersectionRatio","ratios","Array","from","lastCategory","ratio","threshold","querySelectorAll","el","observe","buttonFromEmoji","emojiElement","closest","emojiFromElement","element","originalUnifiedFromEmojiElement","isEmojiElement","Boolean","parentElement","closestCategory","elementHeight","clientHeight","emojiTrueOffsetTop","button","elementOffsetTop","emojiTruOffsetLeft","elementOffsetLeft","offsetLeft","unifiedFromEmojiElement","elementDataSetKey","elementDataSet","dataset","parseNativeEmoji","hex","String","fromCodePoint","parseInt","RECENTLY_USED_LS_KEY","getRecentlyUsed","localStorage","JSON","parse","getItem","setRecentlyUsed","recent","originalUnified","existing","u","nextList","concat","filter","i","original","count","Math","min","setItem","stringify","useCloseAllOpenToggles","variationPicker","setVariationPicker","skinToneFanOpen","setSkinToneFanOpen","closeAllOpenToggles","useCallback","dependencyArray","preloadEmoji","preloadedEmojs","has","emojiUrl","preloadImage","add","url","image","Image","src","mouseDownTimer","useMouseDownHandlers","preloading","setAnchoredEmojiRef","setEmojiVariationPicker","addEventListener","onClick","passive","onMouseDown","onMouseUp","removeEventListener","emojiFromEvent","skinToneToUse","emojiClickOutput","undefined","getImageUrl","names","unifiedWithoutSkinTone","useOnScroll","onScroll","ClassNames","emojiRef","getEmojiRef","iterateEmojiRef","callback","hideEmoji","hideElement","classList","hidden","remove","visible","showElement","useSetFilterRef","setFilter","setter","useFilter","SearchInputRef","setFilterRef","setSearchTerm","onChange","clearSearch","nextValue","applyFilterToDom","longestMatch","findLongestMatch","assign","filterEmojiObjectByKeyword","toggle","searchActive","isEmojiFilteredBySearchTerm","keyword","filtered","hasMatch","some","useIsEmojiFiltered","dict","longestMatchingKey","keys","sort","a","b","useIsEmojiHidden","emojisThatFailedToLoad","isEmojiFiltered","showVariations","size","hasVariations","style","width","height","fontSize","className","clsx","ref","NATIVE","NativeEmoji","EmojiImg","setEmojisThatFailedToLoad","alt","loading","onError","prev","EmojiCategory","categoryConfig","hiddenOnSearch","categoryName","RecentlyUsed","recentlyUsed","recentlyUsedItem","EmojiList","index","RenderCategory","isEmojiHidden","emojisToPush","hiddenCounter","asEmoji","Direction","EmojiVariationPicker","VariationPickerRef","useVariationPickerTop","getTop","getMenuDirection","getPointerStyle","usePointerStyle","pointerStyle","safeEmoji","slice","Down","left","clientWidth","direction","Up","emojiOffsetTop","buttonHeight","Body","useEmojiMouseEnter","allow","setHoveredEmoji","onMouseOver","onMouseOut","e","FlexDirection","Flex","ROW","Preview","hoveredEmoji","variationPickerEmoji","show","PreviewContent","defaultEmoji","defaultText","Relative","position","CategoryNavigation","categoriesConfig","active","Search","placeholder","autoFocus","onFocus","type","SkinTonePicker","isDisabled","isOpen","setIsOpen","setActiveSkinTone","open","skinToneVariation","transform","Header","useIsSearchMode","PickerMain","PickerRootElement","searchModeActive","EmojiPicker","props"],"mappings":"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;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;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"}