emoji-picker-react 4.16.1 → 4.17.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (217) hide show
  1. package/README.md +166 -314
  2. package/dist/components/body/EmojiCategory.d.ts +1 -1
  3. package/dist/components/context/PickerDataContext.d.ts +16 -0
  4. package/dist/components/navigation/CategoryButton.d.ts +1 -1
  5. package/dist/config/categoryConfig.d.ts +2 -6
  6. package/dist/config/config.d.ts +2 -1
  7. package/dist/data/emojis-bn.d.ts +3 -0
  8. package/dist/data/emojis-bn.js +2 -0
  9. package/dist/data/emojis-bn.json +1 -0
  10. package/dist/data/emojis-bn.ts +3 -0
  11. package/dist/data/emojis-da.d.ts +3 -0
  12. package/dist/data/emojis-da.js +2 -0
  13. package/dist/data/emojis-da.json +1 -0
  14. package/dist/data/emojis-da.ts +3 -0
  15. package/dist/data/emojis-de.d.ts +3 -0
  16. package/dist/data/emojis-de.js +2 -0
  17. package/dist/data/emojis-de.json +1 -0
  18. package/dist/data/emojis-de.ts +3 -0
  19. package/dist/data/emojis-en-gb.d.ts +3 -0
  20. package/dist/data/emojis-en-gb.js +2 -0
  21. package/dist/data/emojis-en-gb.json +1 -0
  22. package/dist/data/emojis-en-gb.ts +3 -0
  23. package/dist/data/emojis-en.d.ts +3 -0
  24. package/dist/data/emojis-en.js +2 -0
  25. package/dist/data/emojis-en.json +1 -0
  26. package/dist/data/emojis-en.ts +3 -0
  27. package/dist/data/emojis-es-mx.d.ts +3 -0
  28. package/dist/data/emojis-es-mx.js +2 -0
  29. package/dist/data/emojis-es-mx.json +1 -0
  30. package/dist/data/emojis-es-mx.ts +3 -0
  31. package/dist/data/emojis-es.d.ts +3 -0
  32. package/dist/data/emojis-es.js +2 -0
  33. package/dist/data/emojis-es.json +1 -0
  34. package/dist/data/emojis-es.ts +3 -0
  35. package/dist/data/emojis-et.d.ts +3 -0
  36. package/dist/data/emojis-et.js +2 -0
  37. package/dist/data/emojis-et.json +1 -0
  38. package/dist/data/emojis-et.ts +3 -0
  39. package/dist/data/emojis-fi.d.ts +3 -0
  40. package/dist/data/emojis-fi.js +2 -0
  41. package/dist/data/emojis-fi.json +1 -0
  42. package/dist/data/emojis-fi.ts +3 -0
  43. package/dist/data/emojis-fr.d.ts +3 -0
  44. package/dist/data/emojis-fr.js +2 -0
  45. package/dist/data/emojis-fr.json +1 -0
  46. package/dist/data/emojis-fr.ts +3 -0
  47. package/dist/data/emojis-hi.d.ts +3 -0
  48. package/dist/data/emojis-hi.js +2 -0
  49. package/dist/data/emojis-hi.json +1 -0
  50. package/dist/data/emojis-hi.ts +3 -0
  51. package/dist/data/emojis-hu.d.ts +3 -0
  52. package/dist/data/emojis-hu.js +2 -0
  53. package/dist/data/emojis-hu.json +1 -0
  54. package/dist/data/emojis-hu.ts +3 -0
  55. package/dist/data/emojis-it.d.ts +3 -0
  56. package/dist/data/emojis-it.js +2 -0
  57. package/dist/data/emojis-it.json +1 -0
  58. package/dist/data/emojis-it.ts +3 -0
  59. package/dist/data/emojis-ja.d.ts +3 -0
  60. package/dist/data/emojis-ja.js +2 -0
  61. package/dist/data/emojis-ja.json +1 -0
  62. package/dist/data/emojis-ja.ts +3 -0
  63. package/dist/data/emojis-ko.d.ts +3 -0
  64. package/dist/data/emojis-ko.js +2 -0
  65. package/dist/data/emojis-ko.json +1 -0
  66. package/dist/data/emojis-ko.ts +3 -0
  67. package/dist/data/emojis-lt.d.ts +3 -0
  68. package/dist/data/emojis-lt.js +2 -0
  69. package/dist/data/emojis-lt.json +1 -0
  70. package/dist/data/emojis-lt.ts +3 -0
  71. package/dist/data/emojis-ms.d.ts +3 -0
  72. package/dist/data/emojis-ms.js +2 -0
  73. package/dist/data/emojis-ms.json +1 -0
  74. package/dist/data/emojis-ms.ts +3 -0
  75. package/dist/data/emojis-nb.d.ts +3 -0
  76. package/dist/data/emojis-nb.js +2 -0
  77. package/dist/data/emojis-nb.json +1 -0
  78. package/dist/data/emojis-nb.ts +3 -0
  79. package/dist/data/emojis-nl.d.ts +3 -0
  80. package/dist/data/emojis-nl.js +2 -0
  81. package/dist/data/emojis-nl.json +1 -0
  82. package/dist/data/emojis-nl.ts +3 -0
  83. package/dist/data/emojis-pl.d.ts +3 -0
  84. package/dist/data/emojis-pl.js +2 -0
  85. package/dist/data/emojis-pl.json +1 -0
  86. package/dist/data/emojis-pl.ts +3 -0
  87. package/dist/data/emojis-pt.d.ts +3 -0
  88. package/dist/data/emojis-pt.js +2 -0
  89. package/dist/data/emojis-pt.json +1 -0
  90. package/dist/data/emojis-pt.ts +3 -0
  91. package/dist/data/emojis-ru.d.ts +3 -0
  92. package/dist/data/emojis-ru.js +2 -0
  93. package/dist/data/emojis-ru.json +1 -0
  94. package/dist/data/emojis-ru.ts +3 -0
  95. package/dist/data/emojis-sv.d.ts +3 -0
  96. package/dist/data/emojis-sv.js +2 -0
  97. package/dist/data/emojis-sv.json +1 -0
  98. package/dist/data/emojis-sv.ts +3 -0
  99. package/dist/data/emojis-th.d.ts +3 -0
  100. package/dist/data/emojis-th.js +2 -0
  101. package/dist/data/emojis-th.json +1 -0
  102. package/dist/data/emojis-th.ts +3 -0
  103. package/dist/data/emojis-uk.d.ts +3 -0
  104. package/dist/data/emojis-uk.js +2 -0
  105. package/dist/data/emojis-uk.json +1 -0
  106. package/dist/data/emojis-uk.ts +3 -0
  107. package/dist/data/emojis-zh-hant.d.ts +3 -0
  108. package/dist/data/emojis-zh-hant.js +2 -0
  109. package/dist/data/emojis-zh-hant.json +1 -0
  110. package/dist/data/emojis-zh-hant.ts +3 -0
  111. package/dist/data/emojis-zh.d.ts +3 -0
  112. package/dist/data/emojis-zh.js +2 -0
  113. package/dist/data/emojis-zh.json +1 -0
  114. package/dist/data/emojis-zh.ts +3 -0
  115. package/dist/data/emojis.d.ts +102 -50
  116. package/dist/data/emojis.js +1 -0
  117. package/dist/data/emojis.json +1 -0
  118. package/dist/data/emojis.ts +1 -0
  119. package/dist/data/groups.d.ts +2 -2
  120. package/dist/data/groups.js +11 -0
  121. package/dist/data/groups.ts +12 -0
  122. package/dist/data/skinToneVariations.d.ts +5 -5
  123. package/dist/data/skinToneVariations.js +17 -0
  124. package/dist/data/skinToneVariations.ts +31 -0
  125. package/dist/dataUtils/DataTypes.d.ts +2 -2
  126. package/dist/dataUtils/emojiUtils.d.ts +12 -0
  127. package/dist/emoji-picker-react.cjs.development.js +20120 -17359
  128. package/dist/emoji-picker-react.cjs.development.js.map +1 -1
  129. package/dist/emoji-picker-react.cjs.production.min.js +1 -1
  130. package/dist/emoji-picker-react.cjs.production.min.js.map +1 -1
  131. package/dist/emoji-picker-react.esm.js +20121 -17360
  132. package/dist/emoji-picker-react.esm.js.map +1 -1
  133. package/dist/typeRefinements/typeRefinements.d.ts +2 -1
  134. package/dist/types/exposedTypes.d.ts +64 -50
  135. package/dist/types/exposedTypes.js +46 -0
  136. package/package.json +9 -5
  137. package/src/EmojiPickerReact.tsx +4 -1
  138. package/src/components/Reactions/Reactions.tsx +28 -20
  139. package/src/components/body/EmojiCategory.tsx +1 -1
  140. package/src/components/body/EmojiList.tsx +3 -5
  141. package/src/components/context/PickerConfigContext.tsx +2 -1
  142. package/src/components/context/PickerContext.tsx +7 -2
  143. package/src/components/context/PickerDataContext.tsx +157 -0
  144. package/src/components/emoji/ClickableEmojiButton.tsx +1 -3
  145. package/src/components/emoji/ViewOnlyEmoji.tsx +4 -5
  146. package/src/components/footer/Preview.tsx +6 -6
  147. package/src/components/navigation/CategoryButton.tsx +2 -4
  148. package/src/config/categoryConfig.ts +47 -30
  149. package/src/config/compareConfig.ts +3 -2
  150. package/src/config/config.ts +31 -15
  151. package/src/data/emojis-bn.json +1 -0
  152. package/src/data/emojis-bn.ts +3 -0
  153. package/src/data/emojis-da.json +1 -0
  154. package/src/data/emojis-da.ts +3 -0
  155. package/src/data/emojis-de.json +1 -0
  156. package/src/data/emojis-de.ts +3 -0
  157. package/src/data/emojis-en-gb.json +1 -0
  158. package/src/data/emojis-en-gb.ts +3 -0
  159. package/src/data/emojis-en.json +1 -0
  160. package/src/data/emojis-en.ts +3 -0
  161. package/src/data/emojis-es-mx.json +1 -0
  162. package/src/data/emojis-es-mx.ts +3 -0
  163. package/src/data/emojis-es.json +1 -0
  164. package/src/data/emojis-es.ts +3 -0
  165. package/src/data/emojis-et.json +1 -0
  166. package/src/data/emojis-et.ts +3 -0
  167. package/src/data/emojis-fi.json +1 -0
  168. package/src/data/emojis-fi.ts +3 -0
  169. package/src/data/emojis-fr.json +1 -0
  170. package/src/data/emojis-fr.ts +3 -0
  171. package/src/data/emojis-hi.json +1 -0
  172. package/src/data/emojis-hi.ts +3 -0
  173. package/src/data/emojis-hu.json +1 -0
  174. package/src/data/emojis-hu.ts +3 -0
  175. package/src/data/emojis-it.json +1 -0
  176. package/src/data/emojis-it.ts +3 -0
  177. package/src/data/emojis-ja.json +1 -0
  178. package/src/data/emojis-ja.ts +3 -0
  179. package/src/data/emojis-ko.json +1 -0
  180. package/src/data/emojis-ko.ts +3 -0
  181. package/src/data/emojis-lt.json +1 -0
  182. package/src/data/emojis-lt.ts +3 -0
  183. package/src/data/emojis-ms.json +1 -0
  184. package/src/data/emojis-ms.ts +3 -0
  185. package/src/data/emojis-nb.json +1 -0
  186. package/src/data/emojis-nb.ts +3 -0
  187. package/src/data/emojis-nl.json +1 -0
  188. package/src/data/emojis-nl.ts +3 -0
  189. package/src/data/emojis-pl.json +1 -0
  190. package/src/data/emojis-pl.ts +3 -0
  191. package/src/data/emojis-pt.json +1 -0
  192. package/src/data/emojis-pt.ts +3 -0
  193. package/src/data/emojis-ru.json +1 -0
  194. package/src/data/emojis-ru.ts +3 -0
  195. package/src/data/emojis-sv.json +1 -0
  196. package/src/data/emojis-sv.ts +3 -0
  197. package/src/data/emojis-th.json +1 -0
  198. package/src/data/emojis-th.ts +3 -0
  199. package/src/data/emojis-uk.json +1 -0
  200. package/src/data/emojis-uk.ts +3 -0
  201. package/src/data/emojis-zh-hant.json +1 -0
  202. package/src/data/emojis-zh-hant.ts +3 -0
  203. package/src/data/emojis-zh.json +1 -0
  204. package/src/data/emojis-zh.ts +3 -0
  205. package/src/data/emojis.json +1 -1
  206. package/src/data/emojis.ts +1 -1
  207. package/src/dataUtils/DataTypes.ts +2 -2
  208. package/src/dataUtils/alphaNumericEmojiIndex.ts +1 -8
  209. package/src/dataUtils/emojiSelectors.ts +24 -25
  210. package/src/dataUtils/emojiUtils.ts +74 -0
  211. package/src/hooks/preloadEmoji.ts +1 -1
  212. package/src/hooks/useDisallowedEmojis.ts +4 -3
  213. package/src/hooks/useEmojiVirtualization.tsx +2 -3
  214. package/src/hooks/useFilter.ts +1 -1
  215. package/src/hooks/useIsEmojiHidden.ts +1 -1
  216. package/src/typeRefinements/typeRefinements.ts +2 -5
  217. package/src/types/exposedTypes.ts +17 -0
@@ -1 +1 @@
1
- {"version":3,"file":"emoji-picker-react.cjs.development.js","sources":["../src/DomUtils/classNames.ts","../src/Stylesheet/stylesheet.tsx","../src/config/compareConfig.ts","../src/components/Reactions/DEFAULT_REACTIONS.ts","../src/dataUtils/alphaNumericEmojiIndex.ts","../src/hooks/useDebouncedState.ts","../src/hooks/useHideEmojisByUniocode.ts","../src/hooks/useDisallowedEmojis.ts","../src/hooks/useInitialLoad.ts","../src/types/exposedTypes.ts","../src/components/context/PickerContext.tsx","../src/config/categoryConfig.ts","../src/config/cdnUrls.ts","../src/data/skinToneVariations.ts","../src/dataUtils/DataTypes.ts","../src/dataUtils/suggested.ts","../src/dataUtils/emojiSelectors.ts","../src/config/config.ts","../src/components/context/PickerConfigContext.tsx","../src/config/mutableConfig.ts","../src/config/useConfig.ts","../src/hooks/useIsSearchMode.ts","../src/DomUtils/focusElement.ts","../src/DomUtils/getActiveElement.ts","../src/components/context/ElementRefContext.tsx","../src/DomUtils/scrollTo.ts","../src/DomUtils/keyboardNavigation.ts","../src/hooks/useCloseAllOpenToggles.ts","../src/hooks/useDisallowMouseMove.ts","../src/hooks/useFocus.ts","../src/hooks/useFilter.ts","../src/hooks/useSetVariationPicker.ts","../src/hooks/useShouldShowSkinTonePicker.ts","../src/hooks/useKeyboardNavigation.ts","../src/hooks/preloadEmoji.ts","../src/hooks/useOnFocus.ts","../src/components/main/PickerMain.tsx","../src/DomUtils/elementPositionInRow.ts","../src/DomUtils/selectors.ts","../src/dataUtils/parseNativeEmoji.ts","../src/typeRefinements/typeRefinements.ts","../src/hooks/useMouseDownHandlers.ts","../src/components/atoms/Button.tsx","../src/components/emoji/ClickableEmojiButton.tsx","../src/components/emoji/emojiStyles.ts","../src/components/emoji/EmojiImg.tsx","../src/components/emoji/NativeEmoji.tsx","../src/components/emoji/ViewOnlyEmoji.tsx","../src/components/emoji/Emoji.tsx","../src/components/Reactions/BtnPlus.tsx","../src/components/Reactions/Reactions.tsx","../src/hooks/useOnScroll.ts","../src/virtualization/virtualizationHelpers.ts","../src/hooks/useCategoryHeight.ts","../src/hooks/useIsEmojiHidden.ts","../src/hooks/useEmojiVirtualization.tsx","../src/components/body/EmojiCategory.tsx","../src/components/body/MeasureEmoji.tsx","../src/components/body/EmojiList.tsx","../src/components/body/EmojiVariationPicker.tsx","../src/components/body/Body.tsx","../src/DomUtils/detectEmojyPartiallyBelowFold.ts","../src/hooks/useEmojiPreviewEvents.ts","../src/components/Layout/Flex.tsx","../src/components/Layout/Space.tsx","../src/components/Layout/Absolute.tsx","../src/components/Layout/Relative.tsx","../src/components/header/SkinTonePicker/BtnSkinToneVariation.tsx","../src/components/header/SkinTonePicker/SkinTonePicker.tsx","../src/components/footer/Preview.tsx","../src/DomUtils/categoryNameFromDom.ts","../src/hooks/useActiveCategoryScrollDetection.ts","../src/hooks/useScrollCategoryIntoView.ts","../src/hooks/useShouldHideCustomEmojis.ts","../src/components/navigation/CategoryButton.tsx","../src/components/navigation/CategoryNavigation.tsx","../src/components/header/Search/BtnClearSearch.tsx","../src/components/header/Search/IcnSearch.tsx","../src/components/header/Search/Search.tsx","../src/components/header/Header.tsx","../src/EmojiPickerReact.tsx","../src/components/ErrorBoundary.tsx","../src/components/emoji/ExportedEmoji.tsx","../src/index.tsx"],"sourcesContent":["export enum ClassNames {\n hiddenOnSearch = 'epr-hidden-on-search',\n searchActive = 'epr-search-active',\n hidden = 'epr-hidden',\n visible = 'epr-visible',\n active = 'epr-active',\n emoji = 'epr-emoji',\n category = 'epr-emoji-category',\n label = 'epr-emoji-category-label',\n categoryContent = 'epr-emoji-category-content',\n emojiHasVariations = 'epr-emoji-has-variations',\n scrollBody = 'epr-body',\n emojiList = 'epr-emoji-list',\n external = '__EmojiPicker__',\n emojiPicker = 'EmojiPickerReact',\n open = 'epr-open',\n vertical = 'epr-vertical',\n horizontal = 'epr-horizontal',\n variationPicker = 'epr-emoji-variation-picker',\n darkTheme = 'epr-dark-theme',\n autoTheme = 'epr-auto-theme'\n}\n\nexport function asSelectors(...classNames: ClassNames[]): string {\n return classNames.map(c => `.${c}`).join('');\n}\n","import { Styles, createSheet } from 'flairup';\nimport * as React from 'react';\n\nimport { ClassNames } from '../DomUtils/classNames';\n\nexport const stylesheet = createSheet('epr', null);\n\nconst hidden = {\n display: 'none',\n opacity: '0',\n pointerEvents: 'none',\n visibility: 'hidden',\n overflow: 'hidden'\n};\n\nexport const commonStyles = stylesheet.create({\n hidden: {\n '.': ClassNames.hidden,\n ...hidden\n }\n});\n\nexport const PickerStyleTag = React.memo(function PickerStyleTag() {\n return (\n <style\n suppressHydrationWarning\n dangerouslySetInnerHTML={{ __html: stylesheet.getStyle() }}\n />\n );\n});\n\nexport const commonInteractionStyles = stylesheet.create({\n '.epr-main': {\n ':has(input:not(:placeholder-shown))': {\n categoryBtn: {\n ':hover': {\n opacity: '1',\n backgroundPositionY: 'var(--epr-category-navigation-button-size)'\n }\n },\n hiddenOnSearch: {\n '.': ClassNames.hiddenOnSearch,\n ...hidden\n }\n },\n ':has(input:placeholder-shown)': {\n visibleOnSearchOnly: hidden\n }\n },\n hiddenOnReactions: {\n transition: 'all 0.5s ease-in-out'\n },\n '.epr-reactions': {\n hiddenOnReactions: {\n height: '0px',\n width: '0px',\n opacity: '0',\n pointerEvents: 'none',\n overflow: 'hidden'\n }\n },\n '.EmojiPickerReact:not(.epr-search-active)': {\n categoryBtn: {\n ':hover': {\n opacity: '1',\n backgroundPositionY: 'var(--epr-category-navigation-button-size)'\n },\n '&.epr-active': {\n opacity: '1',\n backgroundPositionY: 'var(--epr-category-navigation-button-size)'\n }\n },\n visibleOnSearchOnly: {\n '.': 'epr-visible-on-search-only',\n ...hidden\n }\n }\n});\n\nexport function darkMode(key: string, value: Styles) {\n return {\n '.epr-dark-theme': {\n [key]: value\n },\n '.epr-auto-theme': {\n [key]: {\n '@media (prefers-color-scheme: dark)': value\n }\n }\n };\n}\n","import { PickerConfig } from './config';\n\n// eslint-disable-next-line complexity\nexport function compareConfig(prev: PickerConfig, next: PickerConfig) {\n const prevCustomEmojis = prev.customEmojis ?? [];\n const nextCustomEmojis = next.customEmojis ?? [];\n return (\n prev.open === next.open &&\n prev.emojiVersion === next.emojiVersion &&\n prev.reactionsDefaultOpen === next.reactionsDefaultOpen &&\n prev.searchPlaceHolder === next.searchPlaceHolder &&\n prev.searchPlaceholder === next.searchPlaceholder &&\n prev.searchClearButtonLabel === next.searchClearButtonLabel &&\n prev.defaultSkinTone === next.defaultSkinTone &&\n prev.skinTonesDisabled === next.skinTonesDisabled &&\n prev.autoFocusSearch === next.autoFocusSearch &&\n prev.emojiStyle === next.emojiStyle &&\n prev.theme === next.theme &&\n prev.suggestedEmojisMode === next.suggestedEmojisMode &&\n prev.lazyLoadEmojis === next.lazyLoadEmojis &&\n prev.className === next.className &&\n prev.height === next.height &&\n prev.width === next.width &&\n prev.style === next.style &&\n prev.searchDisabled === next.searchDisabled &&\n prev.skinTonePickerLocation === next.skinTonePickerLocation &&\n prevCustomEmojis.length === nextCustomEmojis.length\n );\n}","export const DEFAULT_REACTIONS = [\n '1f44d', // 👍\n '2764-fe0f', // ❤️\n '1f603', // 😃\n '1f622', // 😢\n '1f64f', // 🙏\n '1f44e', // 👎\n '1f621' // 😡\n];\n","import { DataEmoji } from './DataTypes';\nimport { allEmojis, emojiNames, emojiUnified } from './emojiSelectors';\n\nexport const alphaNumericEmojiIndex: BaseIndex = {};\n\nsetTimeout(() => {\n allEmojis.reduce((searchIndex, emoji) => {\n indexEmoji(emoji);\n return searchIndex;\n }, alphaNumericEmojiIndex as BaseIndex);\n});\n\ntype BaseIndex = Record<string, Record<string, DataEmoji>>;\n\nexport function indexEmoji(emoji: DataEmoji): void {\n const joinedNameString = emojiNames(emoji)\n .flat()\n .join('')\n .toLowerCase()\n .replace(/[^a-zA-Z\\d]/g, '')\n .split('');\n\n joinedNameString.forEach(char => {\n alphaNumericEmojiIndex[char] = alphaNumericEmojiIndex[char] ?? {};\n\n alphaNumericEmojiIndex[char][emojiUnified(emoji)] = emoji;\n });\n}\n","import { useRef, useState } from 'react';\n\nexport function useDebouncedState<T>(\n initialValue: T,\n delay: number = 0\n): [T, (value: T) => Promise<T>] {\n const [state, setState] = useState<T>(initialValue);\n const timer = useRef<number | null>(null);\n\n function debouncedSetState(value: T) {\n return new Promise<T>(resolve => {\n if (timer.current) {\n clearTimeout(timer.current);\n }\n\n timer.current = window?.setTimeout(() => {\n setState(value);\n resolve(value);\n }, delay);\n });\n }\n\n return [state, debouncedSetState];\n}\n","import { useUnicodeToHide } from \"../config/useConfig\";\n\nexport function useIsUnicodeHidden() {\n const unicodeToHide = useUnicodeToHide();\n return (emojiUnified: string) => unicodeToHide.has(emojiUnified);\n }\n","import { useRef, useMemo } from 'react';\n\nimport { useEmojiVersionConfig } from '../config/useConfig';\nimport { DataEmoji } from '../dataUtils/DataTypes';\nimport {\n addedIn,\n allEmojis,\n emojiUnified,\n unifiedWithoutSkinTone\n} from '../dataUtils/emojiSelectors';\n\nimport { useIsUnicodeHidden } from './useHideEmojisByUniocode';\n\nexport function useDisallowedEmojis() {\n const DisallowedEmojisRef = useRef<Record<string, boolean>>({});\n const emojiVersionConfig = useEmojiVersionConfig();\n\n return useMemo(() => {\n const emojiVersion = parseFloat(`${emojiVersionConfig}`);\n\n if (!emojiVersionConfig || Number.isNaN(emojiVersion)) {\n return DisallowedEmojisRef.current;\n }\n\n return allEmojis.reduce((disallowedEmojis, emoji) => {\n if (addedInNewerVersion(emoji, emojiVersion)) {\n disallowedEmojis[emojiUnified(emoji)] = true;\n }\n\n return disallowedEmojis;\n }, DisallowedEmojisRef.current);\n }, [emojiVersionConfig]);\n}\n\nexport function useIsEmojiDisallowed() {\n const disallowedEmojis = useDisallowedEmojis();\n const isUnicodeHidden = useIsUnicodeHidden();\n\n return function isEmojiDisallowed(emoji: DataEmoji) {\n const unified = unifiedWithoutSkinTone(emojiUnified(emoji));\n\n return Boolean(disallowedEmojis[unified] || isUnicodeHidden(unified));\n };\n}\n\nfunction addedInNewerVersion(\n emoji: DataEmoji,\n supportedLevel: number\n): boolean {\n return addedIn(emoji) > supportedLevel;\n}\n","import { useEffect } from 'react';\nimport * as React from 'react';\n\nexport function useMarkInitialLoad(\n dispatch: React.Dispatch<React.SetStateAction<boolean>>\n) {\n useEffect(() => {\n dispatch(true);\n }, [dispatch]);\n}\n","export type EmojiClickData = {\n activeSkinTone: SkinTones;\n unified: string;\n unifiedWithoutSkinTone: string;\n emoji: string;\n names: string[];\n imageUrl: string;\n getImageUrl: (emojiStyle?: EmojiStyle) => string;\n isCustom: boolean;\n};\n\nexport enum SuggestionMode {\n RECENT = 'recent',\n FREQUENT = 'frequent'\n}\n\nexport enum EmojiStyle {\n NATIVE = 'native',\n APPLE = 'apple',\n TWITTER = 'twitter',\n GOOGLE = 'google',\n FACEBOOK = 'facebook'\n}\n\nexport enum Theme {\n DARK = 'dark',\n LIGHT = 'light',\n AUTO = 'auto'\n}\n\nexport enum SkinTones {\n NEUTRAL = 'neutral',\n LIGHT = '1f3fb',\n MEDIUM_LIGHT = '1f3fc',\n MEDIUM = '1f3fd',\n MEDIUM_DARK = '1f3fe',\n DARK = '1f3ff'\n}\n\nexport enum Categories {\n SUGGESTED = 'suggested',\n CUSTOM = 'custom',\n SMILEYS_PEOPLE = 'smileys_people',\n ANIMALS_NATURE = 'animals_nature',\n FOOD_DRINK = 'food_drink',\n TRAVEL_PLACES = 'travel_places',\n ACTIVITIES = 'activities',\n OBJECTS = 'objects',\n SYMBOLS = 'symbols',\n FLAGS = 'flags'\n}\n\nexport enum SkinTonePickerLocation {\n SEARCH = 'SEARCH',\n PREVIEW = 'PREVIEW'\n}\n","import * as React from 'react';\nimport { useState } from 'react';\n\nimport {\n useDefaultSkinToneConfig,\n useReactionsOpenConfig\n} 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 const reactionsDefaultOpen = useReactionsOpenConfig();\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 reactionsModeState = useState(reactionsDefaultOpen);\n const [isPastInitialLoad, setIsPastInitialLoad] = useState(false);\n const visibleCategoriesState = useState<string[]>([]);\n const emojiSizeState = useState<number | null>(null);\n\n useMarkInitialLoad(setIsPastInitialLoad);\n\n return (\n <PickerContext.Provider\n value={{\n activeCategoryState,\n activeSkinTone,\n disallowClickRef,\n disallowMouseRef,\n disallowedEmojisRef,\n emojiVariationPickerState,\n emojisThatFailedToLoadState,\n filterRef,\n isPastInitialLoad,\n searchTerm,\n skinToneFanOpenState,\n suggestedUpdateState,\n reactionsModeState,\n visibleCategoriesState,\n emojiSizeState\n }}\n >\n {children}\n </PickerContext.Provider>\n );\n}\n\ntype ReactState<T> = [T, React.Dispatch<React.SetStateAction<T>>];\n\nconst PickerContext = React.createContext<{\n searchTerm: [string, (term: string) => Promise<string>];\n suggestedUpdateState: [number, (term: number) => void];\n activeCategoryState: ReactState<ActiveCategoryState>;\n activeSkinTone: ReactState<SkinTones>;\n emojisThatFailedToLoadState: ReactState<Set<string>>;\n isPastInitialLoad: boolean;\n emojiVariationPickerState: ReactState<DataEmoji | null>;\n skinToneFanOpenState: ReactState<boolean>;\n filterRef: React.MutableRefObject<FilterState>;\n disallowClickRef: React.MutableRefObject<boolean>;\n disallowMouseRef: React.MutableRefObject<boolean>;\n disallowedEmojisRef: React.MutableRefObject<Record<string, boolean>>;\n reactionsModeState: ReactState<boolean>;\n visibleCategoriesState: ReactState<Array<string>>;\n emojiSizeState: ReactState<number | null>;\n}>({\n activeCategoryState: [null, () => {}],\n activeSkinTone: [SkinTones.NEUTRAL, () => {}],\n disallowClickRef: { current: false },\n disallowMouseRef: { current: false },\n disallowedEmojisRef: { current: {} },\n emojiVariationPickerState: [null, () => {}],\n emojisThatFailedToLoadState: [new Set(), () => {}],\n filterRef: { current: {} },\n isPastInitialLoad: true,\n searchTerm: ['', () => new Promise<string>(() => undefined)],\n skinToneFanOpenState: [false, () => {}],\n suggestedUpdateState: [Date.now(), () => {}],\n reactionsModeState: [false, () => {}],\n visibleCategoriesState: [[], () => []],\n emojiSizeState: [null, () => {}]\n});\n\ntype Props = Readonly<{\n children: React.ReactNode;\n}>;\n\nexport function useFilterRef() {\n const { filterRef } = React.useContext(PickerContext);\n return filterRef;\n}\n\nexport function useDisallowClickRef() {\n const { disallowClickRef } = React.useContext(PickerContext);\n return disallowClickRef;\n}\n\nexport function useDisallowMouseRef() {\n const { disallowMouseRef } = React.useContext(PickerContext);\n return disallowMouseRef;\n}\n\nexport function useReactionsModeState() {\n const { reactionsModeState } = React.useContext(PickerContext);\n return reactionsModeState;\n}\n\nexport function useSearchTermState() {\n const { searchTerm } = React.useContext(PickerContext);\n return searchTerm;\n}\n\nexport function useActiveSkinToneState(): [\n SkinTones,\n (skinTone: SkinTones) => void\n] {\n const { activeSkinTone } = React.useContext(PickerContext);\n return activeSkinTone;\n}\n\nexport function useEmojisThatFailedToLoadState() {\n const { emojisThatFailedToLoadState } = React.useContext(PickerContext);\n return emojisThatFailedToLoadState;\n}\n\nexport function useIsPastInitialLoad(): boolean {\n const { isPastInitialLoad } = React.useContext(PickerContext);\n return isPastInitialLoad;\n}\n\nexport function useEmojiVariationPickerState() {\n const { emojiVariationPickerState } = React.useContext(PickerContext);\n return emojiVariationPickerState;\n}\n\nexport function useSkinToneFanOpenState() {\n const { skinToneFanOpenState } = React.useContext(PickerContext);\n return skinToneFanOpenState;\n}\n\nexport function useDisallowedEmojisRef() {\n const { disallowedEmojisRef } = React.useContext(PickerContext);\n return disallowedEmojisRef;\n}\n\nexport function useVisibleCategoriesState() {\n const { visibleCategoriesState } = React.useContext(PickerContext);\n return visibleCategoriesState;\n}\n\nexport function useEmojiSizeState() {\n const { emojiSizeState } = React.useContext(PickerContext);\n return emojiSizeState;\n}\n\nexport function useUpdateSuggested(): [number, () => void] {\n const { suggestedUpdateState } = React.useContext(PickerContext);\n\n const [suggestedUpdated, setsuggestedUpdate] = suggestedUpdateState;\n return [\n suggestedUpdated,\n function updateSuggested() {\n setsuggestedUpdate(Date.now());\n }\n ];\n}\n\nexport type FilterState = Record<string, FilterDict>;\n\ntype ActiveCategoryState = null | string;\n","import { Categories, SuggestionMode } from '../types/exposedTypes';\n\nexport { Categories };\n\nconst categoriesOrdered: Categories[] = [\n Categories.SUGGESTED,\n Categories.CUSTOM,\n Categories.SMILEYS_PEOPLE,\n Categories.ANIMALS_NATURE,\n Categories.FOOD_DRINK,\n Categories.TRAVEL_PLACES,\n Categories.ACTIVITIES,\n Categories.OBJECTS,\n Categories.SYMBOLS,\n Categories.FLAGS\n];\n\nexport const SuggestedRecent: CategoryConfig = {\n name: 'Recently Used',\n category: Categories.SUGGESTED\n};\n\nexport type CustomCategoryConfig = {\n category: Categories.CUSTOM;\n name: string;\n};\n\nconst configByCategory: Record<Categories, CategoryConfig> = {\n [Categories.SUGGESTED]: {\n category: Categories.SUGGESTED,\n name: 'Frequently Used'\n },\n [Categories.CUSTOM]: {\n category: Categories.CUSTOM,\n name: 'Custom Emojis'\n },\n [Categories.SMILEYS_PEOPLE]: {\n category: Categories.SMILEYS_PEOPLE,\n name: 'Smileys & People'\n },\n [Categories.ANIMALS_NATURE]: {\n category: Categories.ANIMALS_NATURE,\n name: 'Animals & Nature'\n },\n [Categories.FOOD_DRINK]: {\n category: Categories.FOOD_DRINK,\n name: 'Food & Drink'\n },\n [Categories.TRAVEL_PLACES]: {\n category: Categories.TRAVEL_PLACES,\n name: 'Travel & Places'\n },\n [Categories.ACTIVITIES]: {\n category: Categories.ACTIVITIES,\n name: 'Activities'\n },\n [Categories.OBJECTS]: {\n category: Categories.OBJECTS,\n name: 'Objects'\n },\n [Categories.SYMBOLS]: {\n category: Categories.SYMBOLS,\n name: 'Symbols'\n },\n [Categories.FLAGS]: {\n category: Categories.FLAGS,\n name: 'Flags'\n }\n};\n\nexport function baseCategoriesConfig(\n modifiers?: Record<Categories, CategoryConfig>\n): CategoriesConfig {\n return categoriesOrdered.map(category => {\n return {\n ...configByCategory[category],\n ...(modifiers && modifiers[category] && modifiers[category])\n };\n });\n}\n\nexport function categoryFromCategoryConfig(category: CategoryConfig) {\n return category.category;\n}\n\nexport function categoryNameFromCategoryConfig(category: CategoryConfig) {\n return category.name;\n}\n\nexport type CategoriesConfig = CategoryConfig[];\n\nexport type CategoryConfig = {\n category: Categories;\n name: string;\n};\n\nexport type UserCategoryConfig = Array<Categories | CategoryConfig>;\n\nexport function mergeCategoriesConfig(\n userCategoriesConfig: UserCategoryConfig = [],\n modifiers: CategoryConfigModifiers = {}\n): CategoriesConfig {\n const extra = {} as Record<Categories, CategoryConfig>;\n\n if (modifiers.suggestionMode === SuggestionMode.RECENT) {\n extra[Categories.SUGGESTED] = SuggestedRecent;\n }\n\n const base = baseCategoriesConfig(extra);\n if (!userCategoriesConfig?.length) {\n return base;\n }\n\n return userCategoriesConfig.map(category => {\n if (typeof category === 'string') {\n return getBaseConfigByCategory(category, extra[category]);\n }\n\n return {\n ...getBaseConfigByCategory(category.category, extra[category.category]),\n ...category\n };\n });\n}\n\nfunction getBaseConfigByCategory(\n category: Categories,\n modifier: CategoryConfig = {} as CategoryConfig\n) {\n return Object.assign(configByCategory[category], modifier);\n}\n\ntype CategoryConfigModifiers = {\n suggestionMode?: SuggestionMode;\n};\n","import { EmojiStyle } from '../types/exposedTypes';\n\nconst CDN_URL_APPLE =\n 'https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/';\nconst CDN_URL_FACEBOOK =\n 'https://cdn.jsdelivr.net/npm/emoji-datasource-facebook/img/facebook/64/';\nconst CDN_URL_TWITTER =\n 'https://cdn.jsdelivr.net/npm/emoji-datasource-twitter/img/twitter/64/';\nconst CDN_URL_GOOGLE =\n 'https://cdn.jsdelivr.net/npm/emoji-datasource-google/img/google/64/';\n\nexport function cdnUrl(emojiStyle: EmojiStyle): string {\n switch (emojiStyle) {\n case EmojiStyle.TWITTER:\n return CDN_URL_TWITTER;\n case EmojiStyle.GOOGLE:\n return CDN_URL_GOOGLE;\n case EmojiStyle.FACEBOOK:\n return CDN_URL_FACEBOOK;\n case EmojiStyle.APPLE:\n default:\n return CDN_URL_APPLE;\n }\n}\n","import { SkinTones } from '../types/exposedTypes';\n\nconst skinToneVariations = [\n SkinTones.NEUTRAL,\n SkinTones.LIGHT,\n SkinTones.MEDIUM_LIGHT,\n SkinTones.MEDIUM,\n SkinTones.MEDIUM_DARK,\n SkinTones.DARK\n];\n\nexport const skinTonesNamed = Object.entries(SkinTones).reduce(\n (acc, [key, value]) => {\n acc[value] = key;\n return acc;\n },\n {} as Record<string, string>\n);\n\nexport const skinTonesMapped: Record<\n string,\n string\n> = skinToneVariations.reduce(\n (mapped, skinTone) =>\n Object.assign(mapped, {\n [skinTone]: skinTone\n }),\n {}\n);\n\nexport default skinToneVariations;\n","import emojis from '../data/emojis';\n\nexport enum EmojiProperties {\n name = 'n',\n unified = 'u',\n variations = 'v',\n added_in = 'a',\n imgUrl = 'imgUrl'\n}\n\nexport interface DataEmoji extends WithName {\n [EmojiProperties.unified]: string;\n [EmojiProperties.variations]?: string[];\n [EmojiProperties.added_in]: string;\n [EmojiProperties.imgUrl]?: string;\n}\n\nexport type DataEmojis = DataEmoji[];\n\nexport type DataGroups = keyof typeof emojis;\n\nexport type WithName = {\n [EmojiProperties.name]: string[];\n};\n","import { 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 React from 'react';\n\nimport { useUpdateSuggested } from '../components/context/PickerContext';\nimport { Categories } from '../config/categoryConfig';\nimport { cdnUrl } from '../config/cdnUrls';\nimport { CustomEmoji } from '../config/customEmojiConfig';\nimport { useSuggestedEmojisModeConfig } from '../config/useConfig';\nimport emojis from '../data/emojis';\nimport skinToneVariations, {\n skinTonesMapped\n} from '../data/skinToneVariations';\nimport { EmojiStyle, SkinTones } from '../types/exposedTypes';\n\nimport { DataEmoji, DataEmojis, EmojiProperties, WithName } from './DataTypes';\nimport { indexEmoji } from './alphaNumericEmojiIndex';\nimport { getSuggested } from './suggested';\n\nexport function emojiNames(emoji: WithName): string[] {\n return emoji[EmojiProperties.name] ?? [];\n}\n\nexport function addedIn(emoji: DataEmoji): number {\n return parseFloat(emoji[EmojiProperties.added_in]);\n}\n\nexport function emojiName(emoji?: WithName): string {\n if (!emoji) {\n return '';\n }\n\n return emojiNames(emoji)[0];\n}\n\nexport function unifiedWithoutSkinTone(unified: string): string {\n const splat = unified.split('-');\n const [skinTone] = splat.splice(1, 1);\n\n if (skinTonesMapped[skinTone]) {\n return splat.join('-');\n }\n\n return unified;\n}\n\nexport function emojiUnified(emoji: DataEmoji, skinTone?: string): string {\n const unified = emoji[EmojiProperties.unified];\n\n if (!skinTone || !emojiHasVariations(emoji)) {\n return unified;\n }\n\n return emojiVariationUnified(emoji, skinTone) ?? unified;\n}\n\nexport function useGetEmojisByCategory(): (Category: Categories) => DataEmojis {\n const suggestedEmojisModeConfig = useSuggestedEmojisModeConfig();\n const [suggestedUpdated] = useUpdateSuggested();\n\n const suggested = React.useMemo(\n () => {\n const suggested = getSuggested(suggestedEmojisModeConfig) ?? [];\n\n return suggested\n .map(s => emojiByUnified(s.unified))\n .filter(Boolean) as DataEmojis;\n },\n // eslint-disable-next-line react-hooks/exhaustive-deps\n [suggestedUpdated, suggestedEmojisModeConfig]\n );\n\n return function getEmojisByCategory(category: Categories): DataEmojis {\n if (category === Categories.SUGGESTED) {\n return suggested;\n }\n\n // @ts-ignore\n return emojis[category] ?? [];\n };\n}\n\n// WARNING: DO NOT USE DIRECTLY\nexport function emojiUrlByUnified(\n unified: string,\n emojiStyle: EmojiStyle\n): string {\n return `${cdnUrl(emojiStyle)}${unified}.png`;\n}\n\nexport function emojiVariations(emoji: DataEmoji): string[] {\n return emoji[EmojiProperties.variations] ?? [];\n}\n\nexport function emojiHasVariations(emoji: DataEmoji): boolean {\n return emojiVariations(emoji).length > 0;\n}\n\nexport function emojiVariationUnified(\n emoji: DataEmoji,\n skinTone?: string\n): string | undefined {\n return skinTone\n ? emojiVariations(emoji).find(variation => variation.includes(skinTone))\n : emojiUnified(emoji);\n}\n\nexport function emojiByUnified(unified?: string): DataEmoji | undefined {\n if (!unified) {\n return;\n }\n\n if (allEmojisByUnified[unified]) {\n return allEmojisByUnified[unified];\n }\n\n const withoutSkinTone = unifiedWithoutSkinTone(unified);\n return allEmojisByUnified[withoutSkinTone];\n}\n\nexport const allEmojis: DataEmojis = Object.values(emojis).flat();\n\nexport function setCustomEmojis(customEmojis: CustomEmoji[]): void {\n emojis[Categories.CUSTOM].length = 0;\n\n customEmojis.forEach(emoji => {\n const emojiData = customToRegularEmoji(emoji);\n\n emojis[Categories.CUSTOM].push(emojiData as never);\n\n if (allEmojisByUnified[emojiData[EmojiProperties.unified]]) {\n return;\n }\n\n allEmojis.push(emojiData);\n allEmojisByUnified[emojiData[EmojiProperties.unified]] = emojiData;\n indexEmoji(emojiData);\n });\n}\n\nfunction customToRegularEmoji(emoji: CustomEmoji): DataEmoji {\n return {\n [EmojiProperties.name]: emoji.names.map(name => name.toLowerCase()),\n [EmojiProperties.unified]: emoji.id.toLowerCase(),\n [EmojiProperties.added_in]: '0',\n [EmojiProperties.imgUrl]: emoji.imgUrl\n };\n}\n\nconst allEmojisByUnified: {\n [unified: string]: DataEmoji;\n} = {};\n\nsetTimeout(() => {\n allEmojis.reduce((allEmojis, Emoji) => {\n allEmojis[emojiUnified(Emoji)] = Emoji;\n\n if (emojiHasVariations(Emoji)) {\n emojiVariations(Emoji).forEach(variation => {\n allEmojis[variation] = Emoji;\n });\n }\n\n return allEmojis;\n }, allEmojisByUnified);\n});\n\nexport function activeVariationFromUnified(unified: string): SkinTones | null {\n const [, suspectedSkinTone] = unified.split('-') as [string, SkinTones];\n return skinToneVariations.includes(suspectedSkinTone)\n ? suspectedSkinTone\n : null;\n}\n","import * as React from 'react';\n\nimport { DEFAULT_REACTIONS } from '../components/Reactions/DEFAULT_REACTIONS';\nimport { GetEmojiUrl } from '../components/emoji/BaseEmojiProps';\nimport {\n setCustomEmojis,\n emojiUrlByUnified,\n} from '../dataUtils/emojiSelectors';\nimport {\n EmojiClickData,\n EmojiStyle,\n SkinTonePickerLocation,\n SkinTones,\n SuggestionMode,\n Theme,\n} from '../types/exposedTypes';\n\nimport {\n CategoriesConfig,\n baseCategoriesConfig,\n mergeCategoriesConfig,\n} from './categoryConfig';\nimport { CustomEmoji } from './customEmojiConfig';\n\nconst KNOWN_FAILING_EMOJIS = ['2640-fe0f', '2642-fe0f', '2695-fe0f'];\n\nexport const DEFAULT_SEARCH_PLACEHOLDER = 'Search';\nexport const DEFAULT_SEARCH_CLEAR_BUTTON_LABEL = 'Clear';\nexport const SEARCH_RESULTS_NO_RESULTS_FOUND = 'No results found';\nexport const SEARCH_RESULTS_SUFFIX =\n ' found. Use up and down arrow keys to navigate.';\nexport const SEARCH_RESULTS_ONE_RESULT_FOUND =\n '1 result' + SEARCH_RESULTS_SUFFIX;\nexport const SEARCH_RESULTS_MULTIPLE_RESULTS_FOUND =\n '%n results' + SEARCH_RESULTS_SUFFIX;\n\nexport function mergeConfig(\n userConfig: PickerConfig = {}\n): PickerConfigInternal {\n const base = basePickerConfig();\n\n 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 config.hiddenEmojis.forEach((emoji) => {\n config.unicodeToHide.add(emoji);\n });\n\n setCustomEmojis(config.customEmojis ?? []);\n\n const skinTonePickerLocation = config.searchDisabled\n ? SkinTonePickerLocation.PREVIEW\n : config.skinTonePickerLocation;\n\n return {\n ...config,\n categories,\n previewConfig,\n skinTonePickerLocation,\n };\n}\n\nexport function basePickerConfig(): PickerConfigInternal {\n return {\n autoFocusSearch: true,\n categories: baseCategoriesConfig(),\n className: '',\n customEmojis: [],\n defaultSkinTone: SkinTones.NEUTRAL,\n emojiStyle: EmojiStyle.APPLE,\n emojiVersion: null,\n getEmojiUrl: emojiUrlByUnified,\n height: 450,\n lazyLoadEmojis: false,\n previewConfig: {\n ...basePreviewConfig,\n },\n searchDisabled: false,\n searchPlaceHolder: DEFAULT_SEARCH_PLACEHOLDER,\n searchPlaceholder: DEFAULT_SEARCH_PLACEHOLDER,\n searchClearButtonLabel: DEFAULT_SEARCH_CLEAR_BUTTON_LABEL,\n skinTonePickerLocation: SkinTonePickerLocation.SEARCH,\n skinTonesDisabled: false,\n style: {},\n suggestedEmojisMode: SuggestionMode.FREQUENT,\n theme: Theme.LIGHT,\n unicodeToHide: new Set<string>(KNOWN_FAILING_EMOJIS),\n width: 350,\n reactionsDefaultOpen: false,\n reactions: DEFAULT_REACTIONS,\n open: true,\n allowExpandReactions: true,\n hiddenEmojis: [],\n };\n}\n\nexport type PickerConfigInternal = {\n emojiVersion: string | null;\n searchPlaceHolder: string;\n searchPlaceholder: string;\n searchClearButtonLabel: string;\n defaultSkinTone: SkinTones;\n skinTonesDisabled: boolean;\n autoFocusSearch: boolean;\n emojiStyle: EmojiStyle;\n categories: CategoriesConfig;\n theme: Theme;\n suggestedEmojisMode: SuggestionMode;\n lazyLoadEmojis: boolean;\n previewConfig: PreviewConfig;\n className: string;\n height: PickerDimensions;\n width: PickerDimensions;\n style: React.CSSProperties;\n getEmojiUrl: GetEmojiUrl;\n searchDisabled: boolean;\n skinTonePickerLocation: SkinTonePickerLocation;\n unicodeToHide: Set<string>;\n customEmojis: CustomEmoji[];\n reactionsDefaultOpen: boolean;\n reactions: string[];\n open: boolean;\n allowExpandReactions: boolean;\n hiddenEmojis: string[];\n};\n\nexport type PreviewConfig = {\n defaultEmoji: string;\n defaultCaption: string;\n showPreview: boolean;\n};\n\nconst basePreviewConfig: PreviewConfig = {\n defaultEmoji: '1f60a',\n defaultCaption: \"What's your mood?\",\n showPreview: true,\n};\n\ntype ConfigExternal = {\n previewConfig: Partial<PreviewConfig>;\n onEmojiClick: MouseDownEvent;\n onReactionClick: MouseDownEvent;\n onSkinToneChange: OnSkinToneChange;\n} & Omit<PickerConfigInternal, 'previewConfig' | 'unicodeToHide'>;\n\nexport type PickerConfig = Partial<ConfigExternal>;\n\nexport type PickerDimensions = string | number;\n\nexport type MouseDownEvent = (\n emoji: EmojiClickData,\n event: MouseEvent,\n api?: OnEmojiClickApi\n) => void;\nexport type OnSkinToneChange = (emoji: SkinTones) => void;\n\ntype OnEmojiClickApi = {\n collapseToReactions: () => void;\n};\n","import * as React from 'react';\n\nimport { compareConfig } from '../../config/compareConfig';\nimport {\n basePickerConfig,\n mergeConfig,\n PickerConfig,\n PickerConfigInternal\n} from '../../config/config';\n\ntype Props = PickerConfig &\n Readonly<{\n children: React.ReactNode;\n }>;\n\nconst ConfigContext = React.createContext<PickerConfigInternal>(\n basePickerConfig()\n);\n\nexport function PickerConfigProvider({ children, ...config }: Props) {\n const mergedConfig = useSetConfig(config);\n\n return (\n <ConfigContext.Provider value={mergedConfig}>\n {children}\n </ConfigContext.Provider>\n );\n}\n\nexport function useSetConfig(config: PickerConfig) {\n const [mergedConfig, setMergedConfig] = React.useState(() =>\n mergeConfig(config)\n );\n\n React.useEffect(() => {\n if (compareConfig(mergedConfig, config)) {\n return;\n }\n setMergedConfig(mergeConfig(config));\n // not gonna...\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [\n config.customEmojis?.length,\n config.open,\n config.emojiVersion,\n config.reactionsDefaultOpen,\n config.searchPlaceHolder,\n config.searchPlaceholder,\n config.searchClearButtonLabel,\n config.defaultSkinTone,\n config.skinTonesDisabled,\n config.autoFocusSearch,\n config.emojiStyle,\n config.theme,\n config.suggestedEmojisMode,\n config.lazyLoadEmojis,\n config.className,\n config.height,\n config.width,\n config.searchDisabled,\n config.skinTonePickerLocation,\n config.allowExpandReactions\n ]);\n\n return mergedConfig;\n}\n\nexport function usePickerConfig() {\n return React.useContext(ConfigContext);\n}\n","import React from 'react';\n\nimport { MouseDownEvent, OnSkinToneChange } from './config';\n\nexport type MutableConfig = {\n onEmojiClick?: MouseDownEvent;\n onReactionClick?: MouseDownEvent;\n onSkinToneChange?: OnSkinToneChange;\n};\n\nexport const MutableConfigContext = React.createContext<\n React.MutableRefObject<MutableConfig>\n>({} as React.MutableRefObject<MutableConfig>);\n\nexport function useMutableConfig(): React.MutableRefObject<MutableConfig> {\n const mutableConfig = React.useContext(MutableConfigContext);\n return mutableConfig;\n}\n\nexport function useDefineMutableConfig(\n config: MutableConfig\n): React.MutableRefObject<MutableConfig> {\n const MutableConfigRef = React.useRef<MutableConfig>({\n onEmojiClick: config.onEmojiClick || emptyFunc,\n onReactionClick: config.onReactionClick || config.onEmojiClick,\n onSkinToneChange: config.onSkinToneChange || emptyFunc\n });\n\n React.useEffect(() => {\n MutableConfigRef.current.onEmojiClick = config.onEmojiClick || emptyFunc;\n MutableConfigRef.current.onReactionClick =\n config.onReactionClick || config.onEmojiClick;\n }, [config.onEmojiClick, config.onReactionClick]);\n\n React.useEffect(() => {\n MutableConfigRef.current.onSkinToneChange =\n config.onSkinToneChange || emptyFunc;\n }, [config.onSkinToneChange]);\n\n return MutableConfigRef;\n}\n\nfunction emptyFunc() {}\n","import * as React from 'react';\n\nimport { usePickerConfig } from '../components/context/PickerConfigContext';\nimport { useReactionsModeState } from '../components/context/PickerContext';\nimport {\n EmojiClickData,\n EmojiStyle,\n SkinTonePickerLocation,\n SkinTones,\n SuggestionMode,\n Theme\n} from '../types/exposedTypes';\n\nimport { CategoriesConfig } from './categoryConfig';\nimport {\n DEFAULT_SEARCH_PLACEHOLDER,\n DEFAULT_SEARCH_CLEAR_BUTTON_LABEL,\n SEARCH_RESULTS_NO_RESULTS_FOUND,\n SEARCH_RESULTS_ONE_RESULT_FOUND,\n SEARCH_RESULTS_MULTIPLE_RESULTS_FOUND,\n PickerDimensions,\n PreviewConfig\n} from './config';\nimport { CustomEmoji } from './customEmojiConfig';\nimport { useMutableConfig } from './mutableConfig';\n\nexport enum MOUSE_EVENT_SOURCE {\n REACTIONS = 'reactions',\n PICKER = 'picker'\n}\n\nexport function useSearchPlaceHolderConfig(): string {\n const { searchPlaceHolder, searchPlaceholder } = usePickerConfig();\n return (\n [searchPlaceHolder, searchPlaceholder].find(\n p => p !== DEFAULT_SEARCH_PLACEHOLDER\n ) ?? DEFAULT_SEARCH_PLACEHOLDER\n );\n}\n\nexport function useSearchClearButtonLabelConfig(): string {\n const { searchClearButtonLabel } = usePickerConfig();\n return searchClearButtonLabel ?? DEFAULT_SEARCH_CLEAR_BUTTON_LABEL;\n}\n\nexport function useDefaultSkinToneConfig(): SkinTones {\n const { defaultSkinTone } = usePickerConfig();\n return defaultSkinTone;\n}\n\nexport function useAllowExpandReactions(): boolean {\n const { allowExpandReactions } = usePickerConfig();\n return allowExpandReactions;\n}\n\nexport function useSkinTonesDisabledConfig(): boolean {\n const { skinTonesDisabled } = usePickerConfig();\n return skinTonesDisabled;\n}\n\nexport function useEmojiStyleConfig(): EmojiStyle {\n const { emojiStyle } = usePickerConfig();\n return emojiStyle;\n}\n\nexport function useAutoFocusSearchConfig(): boolean {\n const { autoFocusSearch } = usePickerConfig();\n return autoFocusSearch;\n}\n\nexport function useCategoriesConfig(): CategoriesConfig {\n const { categories } = usePickerConfig();\n return categories;\n}\n\nexport function useCustomEmojisConfig(): CustomEmoji[] {\n const { customEmojis } = usePickerConfig();\n return customEmojis;\n}\n\nexport function useOpenConfig(): boolean {\n const { open } = usePickerConfig();\n return open;\n}\n\nexport function useOnEmojiClickConfig(\n mouseEventSource: MOUSE_EVENT_SOURCE\n): (emoji: EmojiClickData, event: MouseEvent) => void {\n const { current } = useMutableConfig();\n const [, setReactionsOpen] = useReactionsModeState();\n\n const handler = current.onEmojiClick || (() => {});\n const { onReactionClick } = current;\n\n if (mouseEventSource === MOUSE_EVENT_SOURCE.REACTIONS && onReactionClick) {\n return (...args) =>\n onReactionClick(...args, {\n collapseToReactions: () => {\n setReactionsOpen(o => o);\n }\n });\n }\n\n return (...args) => {\n handler(...args, {\n collapseToReactions: () => {\n setReactionsOpen(true);\n }\n });\n };\n}\n\nexport function useOnSkinToneChangeConfig(): (skinTone: SkinTones) => void {\n const { current } = useMutableConfig();\n\n return current.onSkinToneChange || (() => {});\n}\n\nexport function usePreviewConfig(): PreviewConfig {\n const { previewConfig } = usePickerConfig();\n return previewConfig;\n}\n\nexport function useThemeConfig(): Theme {\n const { theme } = usePickerConfig();\n\n return theme;\n}\n\nexport function useSuggestedEmojisModeConfig(): SuggestionMode {\n const { suggestedEmojisMode } = usePickerConfig();\n return suggestedEmojisMode;\n}\n\nexport function useLazyLoadEmojisConfig(): boolean {\n const { lazyLoadEmojis } = usePickerConfig();\n return lazyLoadEmojis;\n}\n\nexport function useClassNameConfig(): string {\n const { className } = usePickerConfig();\n return className;\n}\n\nexport function useStyleConfig(): React.CSSProperties {\n const { height, width, style } = usePickerConfig();\n return { height: getDimension(height), width: getDimension(width), ...style };\n}\n\nexport function useReactionsOpenConfig(): boolean {\n const { reactionsDefaultOpen } = usePickerConfig();\n return reactionsDefaultOpen;\n}\n\nexport function useEmojiVersionConfig(): string | null {\n const { emojiVersion } = usePickerConfig();\n return emojiVersion;\n}\n\nexport function useSearchDisabledConfig(): boolean {\n const { searchDisabled } = usePickerConfig();\n return searchDisabled;\n}\n\nexport function useSkinTonePickerLocationConfig(): SkinTonePickerLocation {\n const { skinTonePickerLocation } = usePickerConfig();\n return skinTonePickerLocation;\n}\n\nexport function useUnicodeToHide() {\n const { unicodeToHide } = usePickerConfig();\n return unicodeToHide;\n}\n\nexport function useReactionsConfig(): string[] {\n const { reactions } = usePickerConfig();\n return reactions;\n}\n\nexport function useGetEmojiUrlConfig(): (\n unified: string,\n style: EmojiStyle\n) => string {\n const { getEmojiUrl } = usePickerConfig();\n return getEmojiUrl;\n}\n\nfunction getDimension(dimensionConfig: PickerDimensions): PickerDimensions {\n return typeof dimensionConfig === 'number'\n ? `${dimensionConfig}px`\n : dimensionConfig;\n}\n\nexport function useSearchResultsConfig(searchResultsCount: number): string {\n const hasResults = searchResultsCount > 0;\n const isPlural = searchResultsCount > 1;\n\n if (hasResults) {\n return isPlural\n ? SEARCH_RESULTS_MULTIPLE_RESULTS_FOUND.replace(\n '%n',\n searchResultsCount.toString()\n )\n : SEARCH_RESULTS_ONE_RESULT_FOUND;\n }\n\n return SEARCH_RESULTS_NO_RESULTS_FOUND;\n}\n","import { useSearchTermState } from '../components/context/PickerContext';\n\nexport default function useIsSearchMode(): boolean {\n const [searchTerm] = useSearchTermState();\n\n return !!searchTerm;\n}\n","import { NullableElement } from './selectors';\n\nexport function focusElement(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 { NullableElement } from './selectors';\n\nexport function getActiveElement() {\n return document.activeElement as NullableElement;\n}\n","import * as React from 'react';\n\nimport { focusElement } from '../../DomUtils/focusElement';\nimport { NullableElement } from '../../DomUtils/selectors';\n\nexport function ElementRefContextProvider({\n children\n}: {\n children: React.ReactNode;\n}) {\n const PickerMainRef = React.useRef<HTMLElement>(null);\n const AnchoredEmojiRef = React.useRef<HTMLElement>(null);\n const BodyRef = React.useRef<HTMLDivElement>(null);\n const EmojiListRef = React.useRef<HTMLUListElement>(null);\n const SearchInputRef = React.useRef<HTMLInputElement>(null);\n const SkinTonePickerRef = React.useRef<HTMLDivElement>(null);\n const CategoryNavigationRef = React.useRef<HTMLDivElement>(null);\n const VariationPickerRef = React.useRef<HTMLDivElement>(null);\n const ReactionsRef = React.useRef<HTMLUListElement>(null);\n\n return (\n <ElementRefContext.Provider\n value={{\n AnchoredEmojiRef,\n BodyRef,\n EmojiListRef,\n CategoryNavigationRef,\n PickerMainRef,\n SearchInputRef,\n SkinTonePickerRef,\n VariationPickerRef,\n ReactionsRef\n }}\n >\n {children}\n </ElementRefContext.Provider>\n );\n}\n\nexport type ElementRef<\n E extends HTMLElement = HTMLElement\n> = React.MutableRefObject<E | null>;\n\ntype ElementRefs = {\n PickerMainRef: ElementRef;\n AnchoredEmojiRef: ElementRef;\n EmojiListRef: ElementRef<HTMLUListElement>;\n SkinTonePickerRef: ElementRef<HTMLDivElement>;\n SearchInputRef: ElementRef<HTMLInputElement>;\n BodyRef: ElementRef<HTMLDivElement>;\n CategoryNavigationRef: ElementRef<HTMLDivElement>;\n VariationPickerRef: ElementRef<HTMLDivElement>;\n ReactionsRef: ElementRef<HTMLUListElement>;\n};\n\nconst ElementRefContext = React.createContext<ElementRefs>({\n AnchoredEmojiRef: React.createRef(),\n BodyRef: React.createRef(),\n CategoryNavigationRef: React.createRef(),\n EmojiListRef: React.createRef(),\n PickerMainRef: React.createRef(),\n SearchInputRef: React.createRef(),\n SkinTonePickerRef: React.createRef(),\n VariationPickerRef: React.createRef(),\n ReactionsRef: React.createRef()\n});\n\nfunction useElementRef() {\n return React.useContext(ElementRefContext);\n}\n\nexport function useEmojiListRef() {\n return useElementRef()['EmojiListRef'];\n}\n\nexport function usePickerMainRef() {\n return useElementRef()['PickerMainRef'];\n}\n\nexport function useAnchoredEmojiRef() {\n return useElementRef()['AnchoredEmojiRef'];\n}\n\nexport function useSetAnchoredEmojiRef(): (target: NullableElement) => void {\n const AnchoredEmojiRef = useAnchoredEmojiRef();\n return (target: NullableElement) => {\n if (target === null && AnchoredEmojiRef.current !== null) {\n focusElement(AnchoredEmojiRef.current);\n }\n\n AnchoredEmojiRef.current = target;\n };\n}\n\nexport function useBodyRef() {\n return useElementRef()['BodyRef'];\n}\n\nexport function useReactionsRef() {\n return useElementRef()['ReactionsRef'];\n}\n\nexport function useSearchInputRef() {\n return useElementRef()['SearchInputRef'];\n}\n\nexport function useSkinTonePickerRef() {\n return useElementRef()['SkinTonePickerRef'];\n}\n\nexport function useCategoryNavigationRef() {\n return useElementRef()['CategoryNavigationRef'];\n}\n\nexport function useVariationPickerRef() {\n return useElementRef()['VariationPickerRef'];\n}\n","import { useCallback } from 'react';\n\nimport { useBodyRef } from '../components/context/ElementRefContext';\n\nimport { asSelectors, ClassNames } from './classNames';\nimport {\n categoryLabelHeight,\n closestCategory,\n closestScrollBody,\n emojiDistanceFromScrollTop,\n isEmojiBehindLabel,\n NullableElement,\n queryScrollBody\n} from './selectors';\n\nexport function scrollTo(root: NullableElement, top: number = 0) {\n const $eprBody = queryScrollBody(root);\n\n if (!$eprBody) {\n return;\n }\n\n requestAnimationFrame(() => {\n $eprBody.scrollTop = top;\n });\n}\n\nexport function scrollBy(root: NullableElement, by: number): void {\n const $eprBody = queryScrollBody(root);\n\n if (!$eprBody) {\n return;\n }\n\n requestAnimationFrame(() => {\n $eprBody.scrollTop = $eprBody.scrollTop + by;\n });\n}\n\nexport function useScrollTo() {\n const BodyRef = useBodyRef();\n\n return useCallback(\n (top: number) => {\n requestAnimationFrame(() => {\n if (BodyRef.current) {\n BodyRef.current.scrollTop = top;\n }\n });\n },\n [BodyRef]\n );\n}\n\nexport function scrollEmojiAboveLabel(emoji: NullableElement) {\n if (!emoji || !isEmojiBehindLabel(emoji)) {\n return;\n }\n\n if (emoji.closest(asSelectors(ClassNames.variationPicker))) {\n return;\n }\n\n const scrollBody = closestScrollBody(emoji);\n const by = emojiDistanceFromScrollTop(emoji);\n scrollBy(scrollBody, -(categoryLabelHeight(closestCategory(emoji)) - by));\n}\n","import { elementCountInRow } from './elementPositionInRow';\nimport { focusElement } from './focusElement';\nimport { scrollEmojiAboveLabel } from './scrollTo';\nimport {\n allVisibleEmojis,\n closestCategory,\n firstVisibleEmoji,\n lastVisibleEmoji,\n nextCategory,\n nextVisibleEmoji,\n NullableElement,\n prevCategory,\n prevVisibleEmoji,\n closestCategoryContent\n} from './selectors';\n\nexport function focusFirstVisibleEmoji(parent: NullableElement) {\n const emoji = firstVisibleEmoji(parent);\n focusElement(emoji);\n scrollEmojiAboveLabel(emoji);\n}\n\nexport function focusAndClickFirstVisibleEmoji(parent: NullableElement) {\n const firstEmoji = firstVisibleEmoji(parent);\n\n focusElement(firstEmoji);\n firstEmoji?.click();\n}\n\nexport function focusLastVisibleEmoji(parent: NullableElement) {\n focusElement(lastVisibleEmoji(parent));\n}\n\nexport function focusNextVisibleEmoji(element: NullableElement) {\n if (!element) {\n return;\n }\n\n const next = nextVisibleEmoji(element);\n\n if (!next) {\n return focusFirstVisibleEmoji(nextCategory(element));\n }\n\n focusElement(next);\n scrollEmojiAboveLabel(next);\n}\n\nexport function focusPrevVisibleEmoji(element: NullableElement) {\n if (!element) {\n return;\n }\n\n const prev = prevVisibleEmoji(element);\n\n if (!prev) {\n return focusLastVisibleEmoji(prevCategory(element));\n }\n\n focusElement(prev);\n scrollEmojiAboveLabel(prev);\n}\n\nexport function focusVisibleEmojiOneRowUp(\n element: NullableElement,\n exitUp: () => void\n) {\n if (!element) {\n return;\n }\n\n const prev = visibleEmojiOneRowUp(element);\n\n if (!prev) {\n return exitUp();\n }\n\n focusElement(prev);\n scrollEmojiAboveLabel(prev);\n}\n\nexport function focusVisibleEmojiOneRowDown(element: NullableElement) {\n if (!element) {\n return;\n }\n\n const next = visibleEmojiOneRowDown(element);\n\n return focusElement(next);\n}\n\nfunction visibleEmojiOneRowUp(element: HTMLElement) {\n if (!element) {\n return null;\n }\n\n const categoryContent = closestCategoryContent(element);\n const category = closestCategory(categoryContent);\n const countInRow = elementCountInRow(categoryContent, element);\n\n const emojisInCurrentCategory = allVisibleEmojis(category);\n const currentEmojiIndex = emojisInCurrentCategory.indexOf(element);\n const indexInRow = currentEmojiIndex % countInRow;\n\n if (currentEmojiIndex === -1) {\n return null;\n }\n\n if (emojisInCurrentCategory[currentEmojiIndex - countInRow]) {\n return emojisInCurrentCategory[currentEmojiIndex - countInRow];\n }\n\n const prevVisibleCategory = prevCategory(category);\n\n if (!prevVisibleCategory) {\n return null;\n }\n\n const allPrevEmojis = allVisibleEmojis(prevVisibleCategory);\n\n // if there is an emoji in the same index of `indexInRow` in the previous category, return it\n // for this we need to find the last emoji in the previous category that shares the same indexInRow\n // this is by using the % operator to find the last emoji that matches\n\n const lastIndexInRow = (allPrevEmojis.length % countInRow) - 1;\n\n if (indexInRow > lastIndexInRow) {\n return allPrevEmojis.at(-1);\n }\n\n // otherwise, return the last emoji that shares the same indexInRow\n\n for (let i = allPrevEmojis.length - 1; i >= 0; i--) {\n if (i % countInRow === indexInRow) {\n return allPrevEmojis[i];\n }\n }\n\n return allPrevEmojis.at(-1);\n}\n\nfunction visibleEmojiOneRowDown(element: HTMLElement) {\n if (!element) {\n return null;\n }\n\n const categoryContent = closestCategoryContent(element);\n const category = closestCategory(categoryContent);\n const countInRow = elementCountInRow(categoryContent, element);\n\n const emojisInCurrentCategory = allVisibleEmojis(category);\n const currentEmojiIndex = emojisInCurrentCategory.indexOf(element);\n\n if (currentEmojiIndex === -1) {\n return null;\n }\n\n // the remainder until the end of the row\n const remainder = countInRow - (currentEmojiIndex % countInRow) - 1;\n const firstInNextRow = currentEmojiIndex + remainder + 1;\n\n if (emojisInCurrentCategory[firstInNextRow]) {\n // if we have a next row, search in the next row for the last available emoji\n for (let p = currentEmojiIndex + countInRow; p % countInRow >= 0; p--) {\n if (emojisInCurrentCategory[p]) {\n return emojisInCurrentCategory[p];\n }\n }\n }\n\n const indexInRow = currentEmojiIndex % countInRow;\n\n const nextVisibleCategory = nextCategory(category);\n const emojisInNextCategory = allVisibleEmojis(nextVisibleCategory);\n\n if (emojisInNextCategory[indexInRow]) {\n return emojisInNextCategory[indexInRow];\n }\n\n return emojisInNextCategory.at(0) ?? null;\n}\n","import { useCallback } from 'react';\n\nimport {\n useEmojiVariationPickerState,\n useSkinToneFanOpenState\n} from '../components/context/PickerContext';\n\nexport function useCloseAllOpenToggles() {\n const [variationPicker, setVariationPicker] = useEmojiVariationPickerState();\n const [skinToneFanOpen, setSkinToneFanOpen] = useSkinToneFanOpenState();\n\n const closeAllOpenToggles = useCallback(() => {\n if (variationPicker) {\n setVariationPicker(null);\n }\n\n if (skinToneFanOpen) {\n setSkinToneFanOpen(false);\n }\n }, [\n variationPicker,\n skinToneFanOpen,\n setVariationPicker,\n setSkinToneFanOpen\n ]);\n\n return closeAllOpenToggles;\n}\n\nexport function useHasOpenToggles() {\n const [variationPicker] = useEmojiVariationPickerState();\n const [skinToneFanOpen] = useSkinToneFanOpenState();\n\n return function hasOpenToggles() {\n return !!variationPicker || skinToneFanOpen;\n };\n}\n","import { useEffect } from 'react';\n\nimport { useBodyRef } from '../components/context/ElementRefContext';\nimport { useDisallowMouseRef } from '../components/context/PickerContext';\n\nexport function useDisallowMouseMove() {\n const DisallowMouseRef = useDisallowMouseRef();\n return function disallowMouseMove() {\n DisallowMouseRef.current = true;\n };\n}\n\nexport function useAllowMouseMove() {\n const DisallowMouseRef = useDisallowMouseRef();\n return function allowMouseMove() {\n DisallowMouseRef.current = false;\n };\n}\n\nexport function useIsMouseDisallowed() {\n const DisallowMouseRef = useDisallowMouseRef();\n return function isMouseDisallowed() {\n return DisallowMouseRef.current;\n };\n}\n\nexport function useOnMouseMove() {\n const BodyRef = useBodyRef();\n const allowMouseMove = useAllowMouseMove();\n const isMouseDisallowed = useIsMouseDisallowed();\n\n useEffect(() => {\n const bodyRef = BodyRef.current;\n bodyRef?.addEventListener('mousemove', onMouseMove, {\n passive: true\n });\n\n function onMouseMove() {\n if (isMouseDisallowed()) {\n allowMouseMove();\n }\n }\n return () => {\n bodyRef?.removeEventListener('mousemove', onMouseMove);\n };\n }, [BodyRef, allowMouseMove, isMouseDisallowed]);\n}\n","import { useCallback } from 'react';\n\nimport { focusElement, focusFirstElementChild } from '../DomUtils/focusElement';\nimport {\n useCategoryNavigationRef,\n useSearchInputRef,\n useSkinTonePickerRef\n} from '../components/context/ElementRefContext';\n\nexport function useFocusSearchInput() {\n const SearchInputRef = useSearchInputRef();\n\n return useCallback(() => {\n focusElement(SearchInputRef.current);\n }, [SearchInputRef]);\n}\n\nexport function useFocusSkinTonePicker() {\n const SkinTonePickerRef = useSkinTonePickerRef();\n\n return useCallback(() => {\n if (!SkinTonePickerRef.current) {\n return;\n }\n\n focusFirstElementChild(SkinTonePickerRef.current);\n }, [SkinTonePickerRef]);\n}\n\nexport function useFocusCategoryNavigation() {\n const CategoryNavigationRef = useCategoryNavigationRef();\n\n return useCallback(() => {\n if (!CategoryNavigationRef.current) {\n return;\n }\n\n focusFirstElementChild(CategoryNavigationRef.current);\n }, [CategoryNavigationRef]);\n}\n","import { scrollTo } from '../DomUtils/scrollTo';\nimport {\n usePickerMainRef,\n useSearchInputRef\n} from '../components/context/ElementRefContext';\nimport {\n FilterState,\n useFilterRef,\n useSearchTermState\n} from '../components/context/PickerContext';\nimport { useSearchResultsConfig } from '../config/useConfig';\nimport { DataEmoji } from '../dataUtils/DataTypes';\nimport { emojiNames } from '../dataUtils/emojiSelectors';\n\nimport { useFocusSearchInput } from './useFocus';\n\nfunction useSetFilterRef() {\n const filterRef = useFilterRef();\n\n return function setFilter(\n setter: FilterState | ((current: FilterState) => FilterState)\n ): void {\n if (typeof setter === 'function') {\n return setFilter(setter(filterRef.current));\n }\n\n filterRef.current = setter;\n };\n}\n\nexport function useClearSearch() {\n const applySearch = useApplySearch();\n const SearchInputRef = useSearchInputRef();\n const focusSearchInput = useFocusSearchInput();\n\n return function clearSearch() {\n if (SearchInputRef.current) {\n SearchInputRef.current.value = '';\n }\n\n applySearch('');\n focusSearchInput();\n };\n}\n\nexport function useAppendSearch() {\n const SearchInputRef = useSearchInputRef();\n const applySearch = useApplySearch();\n\n return function appendSearch(str: string) {\n if (SearchInputRef.current) {\n SearchInputRef.current.value = `${SearchInputRef.current.value}${str}`;\n applySearch(getNormalizedSearchTerm(SearchInputRef.current.value));\n } else {\n applySearch(getNormalizedSearchTerm(str));\n }\n };\n}\n\nexport function useFilter() {\n const SearchInputRef = useSearchInputRef();\n const filterRef = useFilterRef();\n const setFilterRef = useSetFilterRef();\n const applySearch = useApplySearch();\n\n const [searchTerm] = useSearchTermState();\n const statusSearchResults = getStatusSearchResults(\n filterRef.current,\n searchTerm\n );\n\n return {\n onChange,\n searchTerm,\n SearchInputRef,\n statusSearchResults\n };\n\n function onChange(inputValue: string) {\n const filter = filterRef.current;\n\n const nextValue = inputValue.toLowerCase();\n\n if (filter?.[nextValue] || nextValue.length <= 1) {\n return applySearch(nextValue);\n }\n\n const longestMatch = findLongestMatch(nextValue, filter);\n\n if (!longestMatch) {\n // Can we even get here?\n // If so, we need to search among all emojis\n return applySearch(nextValue);\n }\n\n setFilterRef(current =>\n Object.assign(current, {\n [nextValue]: filterEmojiObjectByKeyword(longestMatch, nextValue)\n })\n );\n applySearch(nextValue);\n }\n}\n\nfunction useApplySearch() {\n const [, setSearchTerm] = useSearchTermState();\n const PickerMainRef = usePickerMainRef();\n\n return function applySearch(searchTerm: string) {\n requestAnimationFrame(() => {\n setSearchTerm(searchTerm ? searchTerm?.toLowerCase() : searchTerm).then(\n () => {\n scrollTo(PickerMainRef.current, 0);\n }\n );\n });\n };\n}\n\nfunction filterEmojiObjectByKeyword(\n emojis: FilterDict,\n keyword: string\n): FilterDict {\n const filtered: FilterDict = {};\n\n for (const unified in emojis) {\n const emoji = emojis[unified];\n\n if (hasMatch(emoji, keyword)) {\n filtered[unified] = emoji;\n }\n }\n\n return filtered;\n}\n\nfunction hasMatch(emoji: DataEmoji, keyword: string): boolean {\n return emojiNames(emoji).some(name => name.includes(keyword));\n}\n\nexport function useIsEmojiFiltered(): (unified: string) => boolean {\n const { current: filter } = useFilterRef();\n const [searchTerm] = useSearchTermState();\n\n return unified => isEmojiFilteredBySearchTerm(unified, filter, searchTerm);\n}\n\nfunction isEmojiFilteredBySearchTerm(\n unified: string,\n filter: FilterState,\n searchTerm: string\n): boolean {\n if (!filter || !searchTerm) {\n return false;\n }\n\n return !filter[searchTerm]?.[unified];\n}\n\nexport type FilterDict = Record<string, DataEmoji>;\n\nfunction findLongestMatch(\n keyword: string,\n dict: Record<string, FilterDict> | null\n): FilterDict | null {\n if (!dict) {\n return null;\n }\n\n if (dict[keyword]) {\n return dict[keyword];\n }\n\n const longestMatchingKey = Object.keys(dict)\n .sort((a, b) => b.length - a.length)\n .find(key => keyword.includes(key));\n\n if (longestMatchingKey) {\n return dict[longestMatchingKey];\n }\n\n return null;\n}\n\nexport function getNormalizedSearchTerm(str: string): string {\n if (!str || typeof str !== 'string') {\n return '';\n }\n\n return str.trim().toLowerCase();\n}\n\nfunction getStatusSearchResults(\n filterState: FilterState,\n searchTerm: string\n): string {\n if (!filterState?.[searchTerm]) return '';\n\n const searchResultsCount =\n Object.entries(filterState?.[searchTerm])?.length || 0;\n // eslint-disable-next-line react-hooks/rules-of-hooks\n return useSearchResultsConfig(searchResultsCount);\n}\n","import { emojiFromElement, NullableElement } from '../DomUtils/selectors';\nimport { useSetAnchoredEmojiRef } from '../components/context/ElementRefContext';\nimport { useEmojiVariationPickerState } from '../components/context/PickerContext';\n\nexport default function useSetVariationPicker() {\n const setAnchoredEmojiRef = useSetAnchoredEmojiRef();\n const [, setEmojiVariationPicker] = useEmojiVariationPickerState();\n\n return function setVariationPicker(element: NullableElement) {\n const [emoji] = emojiFromElement(element);\n\n if (emoji) {\n setAnchoredEmojiRef(element);\n setEmojiVariationPicker(emoji);\n }\n };\n}\n","import { useSkinTonePickerLocationConfig } from '../config/useConfig';\nimport { SkinTonePickerLocation } from '../types/exposedTypes';\n\nexport function useShouldShowSkinTonePicker() {\n const skinTonePickerLocationConfig = useSkinTonePickerLocationConfig();\n\n return function shouldShowSkinTonePicker(location: SkinTonePickerLocation) {\n return skinTonePickerLocationConfig === location;\n };\n}\n\nexport function useIsSkinToneInSearch() {\n const skinTonePickerLocationConfig = useSkinTonePickerLocationConfig();\n\n return skinTonePickerLocationConfig === SkinTonePickerLocation.SEARCH;\n}\n\nexport function useIsSkinToneInPreview() {\n const skinTonePickerLocationConfig = useSkinTonePickerLocationConfig();\n\n return skinTonePickerLocationConfig === SkinTonePickerLocation.PREVIEW;\n}\n","import { useCallback, useEffect, useMemo } from 'react';\n\nimport { hasNextElementSibling } from '../DomUtils/elementPositionInRow';\nimport {\n focusNextElementSibling,\n focusPrevElementSibling\n} from '../DomUtils/focusElement';\nimport { getActiveElement } from '../DomUtils/getActiveElement';\nimport {\n focusAndClickFirstVisibleEmoji,\n focusFirstVisibleEmoji,\n focusNextVisibleEmoji,\n focusPrevVisibleEmoji,\n focusVisibleEmojiOneRowDown,\n focusVisibleEmojiOneRowUp\n} from '../DomUtils/keyboardNavigation';\nimport { useScrollTo } from '../DomUtils/scrollTo';\nimport { buttonFromTarget } from '../DomUtils/selectors';\nimport {\n useBodyRef,\n useCategoryNavigationRef,\n usePickerMainRef,\n useSearchInputRef,\n useSkinTonePickerRef\n} from '../components/context/ElementRefContext';\nimport { useSkinToneFanOpenState } from '../components/context/PickerContext';\nimport { useSearchDisabledConfig } from '../config/useConfig';\n\nimport {\n useCloseAllOpenToggles,\n useHasOpenToggles\n} from './useCloseAllOpenToggles';\nimport { useDisallowMouseMove } from './useDisallowMouseMove';\nimport { useAppendSearch, useClearSearch } from './useFilter';\nimport {\n useFocusCategoryNavigation,\n useFocusSearchInput,\n useFocusSkinTonePicker\n} from './useFocus';\nimport useIsSearchMode from './useIsSearchMode';\nimport useSetVariationPicker from './useSetVariationPicker';\nimport {\n useIsSkinToneInPreview,\n useIsSkinToneInSearch\n} from './useShouldShowSkinTonePicker';\n\nenum KeyboardEvents {\n ArrowDown = 'ArrowDown',\n ArrowUp = 'ArrowUp',\n ArrowLeft = 'ArrowLeft',\n ArrowRight = 'ArrowRight',\n Escape = 'Escape',\n Enter = 'Enter',\n Space = ' '\n}\n\nexport function useKeyboardNavigation() {\n usePickerMainKeyboardEvents();\n useSearchInputKeyboardEvents();\n useSkinTonePickerKeyboardEvents();\n useCategoryNavigationKeyboardEvents();\n useBodyKeyboardEvents();\n}\n\nfunction usePickerMainKeyboardEvents() {\n const PickerMainRef = usePickerMainRef();\n const clearSearch = useClearSearch();\n const scrollTo = useScrollTo();\n const SearchInputRef = useSearchInputRef();\n const focusSearchInput = useFocusSearchInput();\n const hasOpenToggles = useHasOpenToggles();\n const disallowMouseMove = useDisallowMouseMove();\n\n const closeAllOpenToggles = useCloseAllOpenToggles();\n\n const onKeyDown = useMemo(\n () =>\n function onKeyDown(event: KeyboardEvent) {\n const { key } = event;\n\n disallowMouseMove();\n switch (key) {\n // eslint-disable-next-line no-fallthrough\n case KeyboardEvents.Escape:\n event.preventDefault();\n if (hasOpenToggles()) {\n closeAllOpenToggles();\n return;\n }\n clearSearch();\n scrollTo(0);\n focusSearchInput();\n break;\n }\n },\n [\n scrollTo,\n clearSearch,\n closeAllOpenToggles,\n focusSearchInput,\n hasOpenToggles,\n disallowMouseMove\n ]\n );\n\n useEffect(() => {\n const current = PickerMainRef.current;\n\n if (!current) {\n return;\n }\n\n current.addEventListener('keydown', onKeyDown);\n\n return () => {\n current.removeEventListener('keydown', onKeyDown);\n };\n }, [PickerMainRef, SearchInputRef, scrollTo, onKeyDown]);\n}\n\nfunction useSearchInputKeyboardEvents() {\n const focusSkinTonePicker = useFocusSkinTonePicker();\n const PickerMainRef = usePickerMainRef();\n const BodyRef = useBodyRef();\n const SearchInputRef = useSearchInputRef();\n const [, setSkinToneFanOpenState] = useSkinToneFanOpenState();\n const goDownFromSearchInput = useGoDownFromSearchInput();\n const isSkinToneInSearch = useIsSkinToneInSearch();\n\n const onKeyDown = useMemo(\n () =>\n function onKeyDown(event: KeyboardEvent) {\n const { key } = event;\n\n switch (key) {\n case KeyboardEvents.ArrowRight:\n if (!isSkinToneInSearch) {\n return;\n }\n event.preventDefault();\n setSkinToneFanOpenState(true);\n focusSkinTonePicker();\n break;\n case KeyboardEvents.ArrowDown:\n event.preventDefault();\n goDownFromSearchInput();\n break;\n case KeyboardEvents.Enter:\n event.preventDefault();\n focusAndClickFirstVisibleEmoji(BodyRef.current);\n break;\n }\n },\n [\n focusSkinTonePicker,\n goDownFromSearchInput,\n setSkinToneFanOpenState,\n BodyRef,\n isSkinToneInSearch\n ]\n );\n\n useEffect(() => {\n const current = SearchInputRef.current;\n\n if (!current) {\n return;\n }\n\n current.addEventListener('keydown', onKeyDown);\n\n return () => {\n current.removeEventListener('keydown', onKeyDown);\n };\n }, [PickerMainRef, SearchInputRef, onKeyDown]);\n}\n\nfunction useSkinTonePickerKeyboardEvents() {\n const SkinTonePickerRef = useSkinTonePickerRef();\n const focusSearchInput = useFocusSearchInput();\n const SearchInputRef = useSearchInputRef();\n const goDownFromSearchInput = useGoDownFromSearchInput();\n const [isOpen, setIsOpen] = useSkinToneFanOpenState();\n const isSkinToneInPreview = useIsSkinToneInPreview();\n const isSkinToneInSearch = useIsSkinToneInSearch();\n const onType = useOnType();\n\n const onKeyDown = useMemo(\n () =>\n // eslint-disable-next-line complexity\n function onKeyDown(event: KeyboardEvent) {\n const { key } = event;\n\n if (isSkinToneInSearch) {\n switch (key) {\n case KeyboardEvents.ArrowLeft:\n event.preventDefault();\n if (!isOpen) {\n return focusSearchInput();\n }\n focusNextSkinTone(focusSearchInput);\n break;\n case KeyboardEvents.ArrowRight:\n event.preventDefault();\n if (!isOpen) {\n return focusSearchInput();\n }\n focusPrevSkinTone();\n break;\n case KeyboardEvents.ArrowDown:\n event.preventDefault();\n if (isOpen) {\n setIsOpen(false);\n }\n goDownFromSearchInput();\n break;\n default:\n onType(event);\n break;\n }\n }\n\n if (isSkinToneInPreview) {\n switch (key) {\n case KeyboardEvents.ArrowUp:\n event.preventDefault();\n if (!isOpen) {\n return focusSearchInput();\n }\n focusNextSkinTone(focusSearchInput);\n break;\n case KeyboardEvents.ArrowDown:\n event.preventDefault();\n if (!isOpen) {\n return focusSearchInput();\n }\n focusPrevSkinTone();\n break;\n default:\n onType(event);\n break;\n }\n }\n },\n [\n isOpen,\n focusSearchInput,\n setIsOpen,\n goDownFromSearchInput,\n onType,\n isSkinToneInPreview,\n isSkinToneInSearch\n ]\n );\n\n useEffect(() => {\n const current = SkinTonePickerRef.current;\n\n if (!current) {\n return;\n }\n\n current.addEventListener('keydown', onKeyDown);\n\n return () => {\n current.removeEventListener('keydown', onKeyDown);\n };\n }, [SkinTonePickerRef, SearchInputRef, isOpen, onKeyDown]);\n}\n\nfunction useCategoryNavigationKeyboardEvents() {\n const focusSearchInput = useFocusSearchInput();\n const CategoryNavigationRef = useCategoryNavigationRef();\n const BodyRef = useBodyRef();\n const onType = useOnType();\n\n const onKeyDown = useMemo(\n () =>\n function onKeyDown(event: KeyboardEvent) {\n const { key } = event;\n\n switch (key) {\n case KeyboardEvents.ArrowUp:\n event.preventDefault();\n focusSearchInput();\n break;\n case KeyboardEvents.ArrowRight:\n event.preventDefault();\n focusNextElementSibling(getActiveElement());\n break;\n case KeyboardEvents.ArrowLeft:\n event.preventDefault();\n focusPrevElementSibling(getActiveElement());\n break;\n case KeyboardEvents.ArrowDown:\n event.preventDefault();\n focusFirstVisibleEmoji(BodyRef.current);\n break;\n default:\n onType(event);\n break;\n }\n },\n [BodyRef, focusSearchInput, onType]\n );\n\n useEffect(() => {\n const current = CategoryNavigationRef.current;\n\n if (!current) {\n return;\n }\n\n current.addEventListener('keydown', onKeyDown);\n\n return () => {\n current.removeEventListener('keydown', onKeyDown);\n };\n }, [CategoryNavigationRef, BodyRef, onKeyDown]);\n}\n\nfunction useBodyKeyboardEvents() {\n const BodyRef = useBodyRef();\n const goUpFromBody = useGoUpFromBody();\n const setVariationPicker = useSetVariationPicker();\n const hasOpenToggles = useHasOpenToggles();\n const closeAllOpenToggles = useCloseAllOpenToggles();\n\n const onType = useOnType();\n\n const onKeyDown = useMemo(\n () =>\n // eslint-disable-next-line complexity\n function onKeyDown(event: KeyboardEvent) {\n const { key } = event;\n\n const activeElement = buttonFromTarget(getActiveElement());\n\n switch (key) {\n case KeyboardEvents.ArrowRight:\n event.preventDefault();\n focusNextVisibleEmoji(activeElement);\n break;\n case KeyboardEvents.ArrowLeft:\n event.preventDefault();\n focusPrevVisibleEmoji(activeElement);\n break;\n case KeyboardEvents.ArrowDown:\n event.preventDefault();\n if (hasOpenToggles()) {\n closeAllOpenToggles();\n break;\n }\n focusVisibleEmojiOneRowDown(activeElement);\n break;\n case KeyboardEvents.ArrowUp:\n event.preventDefault();\n if (hasOpenToggles()) {\n closeAllOpenToggles();\n break;\n }\n focusVisibleEmojiOneRowUp(activeElement, goUpFromBody);\n break;\n case KeyboardEvents.Space:\n event.preventDefault();\n setVariationPicker(event.target as HTMLElement);\n break;\n default:\n onType(event);\n break;\n }\n },\n [\n goUpFromBody,\n onType,\n setVariationPicker,\n hasOpenToggles,\n closeAllOpenToggles\n ]\n );\n\n useEffect(() => {\n const current = BodyRef.current;\n\n if (!current) {\n return;\n }\n\n current.addEventListener('keydown', onKeyDown);\n\n return () => {\n current.removeEventListener('keydown', onKeyDown);\n };\n }, [BodyRef, onKeyDown]);\n}\n\nfunction useGoDownFromSearchInput() {\n const focusCategoryNavigation = useFocusCategoryNavigation();\n const isSearchMode = useIsSearchMode();\n const BodyRef = useBodyRef();\n\n return useCallback(\n function goDownFromSearchInput() {\n if (isSearchMode) {\n return focusFirstVisibleEmoji(BodyRef.current);\n }\n return focusCategoryNavigation();\n },\n [BodyRef, focusCategoryNavigation, isSearchMode]\n );\n}\n\nfunction useGoUpFromBody() {\n const focusSearchInput = useFocusSearchInput();\n const focusCategoryNavigation = useFocusCategoryNavigation();\n const isSearchMode = useIsSearchMode();\n\n return useCallback(\n function goUpFromEmoji() {\n if (isSearchMode) {\n return focusSearchInput();\n }\n return focusCategoryNavigation();\n },\n [focusSearchInput, isSearchMode, focusCategoryNavigation]\n );\n}\n\nfunction focusNextSkinTone(exitLeft: () => void) {\n const currentSkinTone = getActiveElement();\n\n if (!currentSkinTone) {\n return;\n }\n\n if (!hasNextElementSibling(currentSkinTone)) {\n exitLeft();\n }\n\n focusNextElementSibling(currentSkinTone);\n}\n\nfunction focusPrevSkinTone() {\n const currentSkinTone = getActiveElement();\n\n if (!currentSkinTone) {\n return;\n }\n\n focusPrevElementSibling(currentSkinTone);\n}\n\nfunction useOnType() {\n const appendSearch = useAppendSearch();\n const focusSearchInput = useFocusSearchInput();\n const searchDisabled = useSearchDisabledConfig();\n const closeAllOpenToggles = useCloseAllOpenToggles();\n\n return function onType(event: KeyboardEvent) {\n const { key } = event;\n\n if (hasModifier(event) || searchDisabled) {\n return;\n }\n\n if (key.match(/(^[a-zA-Z0-9]$){1}/)) {\n event.preventDefault();\n closeAllOpenToggles();\n focusSearchInput();\n appendSearch(key);\n }\n };\n}\n\nfunction hasModifier(event: KeyboardEvent): boolean {\n const { metaKey, ctrlKey, altKey } = event;\n\n return metaKey || ctrlKey || altKey;\n}\n","import { GetEmojiUrl } from '../components/emoji/BaseEmojiProps';\nimport { DataEmoji } from '../dataUtils/DataTypes';\nimport { emojiUnified, emojiVariations } from '../dataUtils/emojiSelectors';\nimport { EmojiStyle } from '../types/exposedTypes';\nimport { Dimensions } from '../virtualization/virtualizationHelpers';\n\n// eslint-disable-next-line max-params\nexport function preloadEmojiIfNeeded(\n emoji: undefined | DataEmoji,\n emojiStyles: EmojiStyle,\n scrollTop: number,\n clientHeight: number,\n topOffset: number,\n style: { top: number } | undefined,\n dimensions: Dimensions,\n getEmojiUrl: GetEmojiUrl\n): void {\n if (!emoji) {\n return;\n }\n\n if (emojiStyles === EmojiStyle.NATIVE) {\n return;\n }\n\n const unified = emojiUnified(emoji);\n\n if (preloadedEmojs.has(unified)) {\n return;\n }\n\n // preload only if the emoji is a few rows below the viewport\n if (!style || !dimensions) {\n return;\n }\n\n setTimeout(() => {\n const emojiTop = topOffset + style.top;\n const viewportBottom = scrollTop + clientHeight;\n\n const isJustBelowViewport =\n emojiTop >= viewportBottom &&\n emojiTop < viewportBottom + dimensions.emojiSize * 2;\n\n if (isJustBelowViewport) {\n preloadEmoji(getEmojiUrl, emoji, emojiStyles);\n }\n });\n}\n\nexport function preloadEmoji(\n getEmojiUrl: GetEmojiUrl,\n emoji: undefined | DataEmoji,\n emojiStyle: EmojiStyle\n): void {\n if (!emoji) {\n return;\n }\n\n const unified = emojiUnified(emoji);\n\n if (preloadedEmojs.has(unified)) {\n return;\n }\n preloadedEmojs.add(unified);\n\n emojiVariations(emoji)\n .concat(unified)\n .forEach(variation => {\n const emojiUrl = getEmojiUrl(variation, emojiStyle);\n preloadImage(emojiUrl);\n });\n}\n\nexport const preloadedEmojs: Set<string> = new Set();\n\nfunction preloadImage(url: string): void {\n const image = new Image();\n image.src = url;\n}\n","import { useEffect } from 'react';\n\nimport { buttonFromTarget, emojiFromElement } from '../DomUtils/selectors';\nimport { useBodyRef } from '../components/context/ElementRefContext';\nimport { useEmojiStyleConfig, useGetEmojiUrlConfig } from '../config/useConfig';\nimport { emojiHasVariations } from '../dataUtils/emojiSelectors';\nimport { EmojiStyle } from '../types/exposedTypes';\n\nimport { preloadEmoji } from './preloadEmoji';\n\nexport function useOnFocus() {\n const BodyRef = useBodyRef();\n const emojiStyle = useEmojiStyleConfig();\n const getEmojiUrl = useGetEmojiUrlConfig();\n\n useEffect(() => {\n if (emojiStyle === EmojiStyle.NATIVE) {\n return;\n }\n\n const bodyRef = BodyRef.current;\n\n bodyRef?.addEventListener('focusin', onFocus);\n\n return () => {\n bodyRef?.removeEventListener('focusin', onFocus);\n };\n\n function onFocus(event: FocusEvent) {\n const button = buttonFromTarget(event.target as HTMLElement);\n\n if (!button) {\n return;\n }\n\n const [emoji] = emojiFromElement(button);\n\n if (!emoji) {\n return;\n }\n\n if (emojiHasVariations(emoji)) {\n preloadEmoji(getEmojiUrl, emoji, emojiStyle);\n }\n }\n }, [BodyRef, emojiStyle, getEmojiUrl]);\n}\n","import { cx } from 'flairup';\nimport * as React from 'react';\n\nimport { ClassNames } from '../../DomUtils/classNames';\nimport { stylesheet } from '../../Stylesheet/stylesheet';\nimport {\n useClassNameConfig,\n useStyleConfig,\n useThemeConfig\n} from '../../config/useConfig';\nimport useIsSearchMode from '../../hooks/useIsSearchMode';\nimport { useKeyboardNavigation } from '../../hooks/useKeyboardNavigation';\nimport { useOnFocus } from '../../hooks/useOnFocus';\nimport { Theme } from '../../types/exposedTypes';\nimport { usePickerMainRef } from '../context/ElementRefContext';\nimport {\n PickerContextProvider,\n useReactionsModeState\n} from '../context/PickerContext';\n\ntype Props = Readonly<{\n children: React.ReactNode;\n}>;\n\nexport const DEFAULT_LABEL_HEIGHT = 40;\n\nexport default function PickerMain({ children }: Props) {\n return (\n <PickerContextProvider>\n <PickerRootElement>{children}</PickerRootElement>\n </PickerContextProvider>\n );\n}\n\ntype RootProps = Readonly<{\n className?: string;\n style?: React.CSSProperties;\n children: React.ReactNode;\n}>;\n\nfunction PickerRootElement({ children }: RootProps) {\n const [reactionsMode] = useReactionsModeState();\n const theme = useThemeConfig();\n const searchModeActive = useIsSearchMode();\n const PickerMainRef = usePickerMainRef();\n const className = useClassNameConfig();\n const style = useStyleConfig();\n\n useKeyboardNavigation();\n useOnFocus();\n\n const { width, height, ...styleProps } = style || {};\n\n return (\n <aside\n className={cx(\n styles.main,\n styles.baseVariables,\n theme === Theme.DARK && styles.darkTheme,\n theme === Theme.AUTO && styles.autoThemeDark,\n {\n [ClassNames.searchActive]: searchModeActive\n },\n reactionsMode && styles.reactionsMenu,\n className\n )}\n ref={PickerMainRef}\n style={{\n ...styleProps,\n ...(!reactionsMode && { height, width })\n }}\n >\n {children}\n </aside>\n );\n}\n\nconst DarkTheme = {\n '--epr-emoji-variation-picker-bg-color':\n 'var(--epr-dark-emoji-variation-picker-bg-color)',\n '--epr-hover-bg-color-reduced-opacity':\n 'var(--epr-dark-hover-bg-color-reduced-opacity)',\n '--epr-highlight-color': 'var(--epr-dark-highlight-color)',\n '--epr-text-color': 'var(--epr-dark-text-color)',\n '--epr-hover-bg-color': 'var(--epr-dark-hover-bg-color)',\n '--epr-focus-bg-color': 'var(--epr-dark-focus-bg-color)',\n '--epr-search-input-bg-color': 'var(--epr-dark-search-input-bg-color)',\n '--epr-category-label-bg-color': 'var(--epr-dark-category-label-bg-color)',\n '--epr-picker-border-color': 'var(--epr-dark-picker-border-color)',\n '--epr-bg-color': 'var(--epr-dark-bg-color)',\n '--epr-reactions-bg-color': 'var(--epr-dark-reactions-bg-color)',\n '--epr-search-input-bg-color-active':\n 'var(--epr-dark-search-input-bg-color-active)',\n '--epr-emoji-variation-indicator-color':\n 'var(--epr-dark-emoji-variation-indicator-color)',\n '--epr-category-icon-active-color':\n 'var(--epr-dark-category-icon-active-color)',\n '--epr-skin-tone-picker-menu-color':\n 'var(--epr-dark-skin-tone-picker-menu-color)',\n '--epr-skin-tone-outer-border-color':\n 'var(--epr-dark-skin-tone-outer-border-color)',\n '--epr-skin-tone-inner-border-color':\n 'var(--epr-dark-skin-tone-inner-border-color)'\n};\n\nconst styles = stylesheet.create({\n main: {\n '.': ['epr-main', ClassNames.emojiPicker],\n position: 'relative',\n display: 'flex',\n flexDirection: 'column',\n borderWidth: '1px',\n borderStyle: 'solid',\n borderRadius: 'var(--epr-picker-border-radius)',\n borderColor: 'var(--epr-picker-border-color)',\n backgroundColor: 'var(--epr-bg-color)',\n overflow: 'hidden',\n transition: 'height 0.3s ease-in-out, background-color 0.1s ease-in-out',\n '*': {\n boxSizing: 'border-box',\n fontFamily: 'sans-serif'\n }\n },\n baseVariables: {\n '--': {\n '--epr-highlight-color': '#007aeb',\n '--epr-hover-bg-color': '#e5f0fa',\n '--epr-hover-bg-color-reduced-opacity': '#e5f0fa80',\n '--epr-focus-bg-color': '#e0f0ff',\n '--epr-text-color': '#858585',\n '--epr-search-input-bg-color': '#f6f6f6',\n '--epr-picker-border-color': '#e7e7e7',\n '--epr-bg-color': '#fff',\n '--epr-reactions-bg-color': '#ffffff90',\n '--epr-category-icon-active-color': '#6aa8de',\n '--epr-skin-tone-picker-menu-color': '#ffffff95',\n '--epr-skin-tone-outer-border-color': '#555555',\n '--epr-skin-tone-inner-border-color': 'var(--epr-bg-color)',\n\n '--epr-horizontal-padding': '10px',\n\n '--epr-picker-border-radius': '8px',\n\n /* Header */\n '--epr-header-padding': '15px var(--epr-horizontal-padding)',\n\n /* Skin Tone Picker */\n '--epr-active-skin-tone-indicator-border-color':\n 'var(--epr-highlight-color)',\n '--epr-active-skin-hover-color': 'var(--epr-hover-bg-color)',\n\n /* Search */\n '--epr-search-input-bg-color-active': 'var(--epr-search-input-bg-color)',\n '--epr-search-input-padding': '0 30px',\n '--epr-search-input-border-radius': '8px',\n '--epr-search-input-height': '40px',\n '--epr-search-input-text-color': 'var(--epr-text-color)',\n '--epr-search-input-placeholder-color': 'var(--epr-text-color)',\n '--epr-search-bar-inner-padding': 'var(--epr-horizontal-padding)',\n '--epr-search-border-color': 'var(--epr-search-input-bg-color)',\n '--epr-search-border-color-active': 'var(--epr-highlight-color)',\n\n /* Category Navigation */\n '--epr-category-navigation-button-size': '30px',\n\n /* Variation Picker */\n '--epr-emoji-variation-picker-height': '45px',\n '--epr-emoji-variation-picker-bg-color': 'var(--epr-bg-color)',\n\n /* Preview */\n '--epr-preview-height': '70px',\n '--epr-preview-text-size': '14px',\n '--epr-preview-text-padding': '0 var(--epr-horizontal-padding)',\n '--epr-preview-border-color': 'var(--epr-picker-border-color)',\n '--epr-preview-text-color': 'var(--epr-text-color)',\n\n /* Category */\n '--epr-category-padding': '0 var(--epr-horizontal-padding)',\n\n /* Category Label */\n '--epr-category-label-bg-color': '#ffffffe6',\n '--epr-category-label-text-color': 'var(--epr-text-color)',\n '--epr-category-label-padding': '0 var(--epr-horizontal-padding)',\n '--epr-category-label-height': `${DEFAULT_LABEL_HEIGHT}px`,\n\n /* Emoji */\n '--epr-emoji-size': '30px',\n '--epr-emoji-padding': '5px',\n '--epr-emoji-fullsize':\n 'calc(var(--epr-emoji-size) + var(--epr-emoji-padding) * 2)',\n '--epr-emoji-hover-color': 'var(--epr-hover-bg-color)',\n '--epr-emoji-variation-indicator-color': 'var(--epr-picker-border-color)',\n '--epr-emoji-variation-indicator-color-hover': 'var(--epr-text-color)',\n\n /* Z-Index */\n '--epr-header-overlay-z-index': '3',\n '--epr-emoji-variations-indictator-z-index': '1',\n '--epr-category-label-z-index': '2',\n '--epr-skin-variation-picker-z-index': '5',\n '--epr-preview-z-index': '6',\n\n /* Dark Theme Variables */\n '--epr-dark': '#000',\n '--epr-dark-emoji-variation-picker-bg-color': 'var(--epr-dark)',\n '--epr-dark-highlight-color': '#c0c0c0',\n '--epr-dark-text-color': 'var(--epr-highlight-color)',\n '--epr-dark-hover-bg-color': '#363636f6',\n '--epr-dark-hover-bg-color-reduced-opacity': '#36363680',\n '--epr-dark-focus-bg-color': '#474747',\n '--epr-dark-search-input-bg-color': '#333333',\n '--epr-dark-category-label-bg-color': '#222222e6',\n '--epr-dark-picker-border-color': '#151617',\n '--epr-dark-bg-color': '#222222',\n '--epr-dark-reactions-bg-color': '#22222290',\n '--epr-dark-search-input-bg-color-active': 'var(--epr-dark)',\n '--epr-dark-emoji-variation-indicator-color': '#444',\n '--epr-dark-category-icon-active-color': '#3271b7',\n '--epr-dark-skin-tone-picker-menu-color': '#22222295',\n '--epr-dark-skin-tone-outer-border-color':\n 'var(--epr-dark-picker-border-color)',\n '--epr-dark-skin-tone-inner-border-color': '#00000000'\n }\n },\n autoThemeDark: {\n '.': ClassNames.autoTheme,\n '@media (prefers-color-scheme: dark)': {\n '--': DarkTheme\n }\n },\n darkTheme: {\n '.': ClassNames.darkTheme,\n '--': DarkTheme\n },\n reactionsMenu: {\n '.': 'epr-reactions',\n height: '50px',\n display: 'inline-flex',\n backgroundColor: 'var(--epr-reactions-bg-color)',\n // @ts-ignore - backdropFilter is not recognized.\n backdropFilter: 'blur(8px)',\n '--': {\n '--epr-picker-border-radius': '50px'\n }\n }\n});\n","import { DEFAULT_LABEL_HEIGHT } from '../components/main/PickerMain';\n\nimport { ClassNames, asSelectors } from './classNames';\nimport { NullableElement } from './selectors';\n\nexport function elementCountInRow(\n parent: NullableElement,\n element: NullableElement\n): number {\n if (!parent || !element) {\n return 0;\n }\n\n const parentWidth = parent.getBoundingClientRect().width;\n const elementWidth = element.getBoundingClientRect().width;\n return Math.floor(parentWidth / elementWidth);\n}\n\nexport function firstVisibleElementInContainer(\n parent: NullableElement,\n elements: HTMLElement[],\n maxVisibilityDiffThreshold = 0\n): NullableElement {\n if (!parent || !elements.length) {\n return null;\n }\n\n const parentTop = parent.getBoundingClientRect().top;\n const parentBottom = parent.getBoundingClientRect().bottom;\n const parentTopWithLabel = parentTop + getLabelHeight(parent);\n\n const visibleElements = elements.find(element => {\n const elementTop = element.getBoundingClientRect().top;\n const elementBottom = element.getBoundingClientRect().bottom;\n const maxVisibilityDiffPixels =\n element.clientHeight * maxVisibilityDiffThreshold;\n\n const elementTopWithAllowedDiff = elementTop + maxVisibilityDiffPixels;\n const elementBottomWithAllowedDiff =\n elementBottom - maxVisibilityDiffPixels;\n\n if (elementTopWithAllowedDiff < parentTopWithLabel) {\n return false;\n }\n\n return (\n (elementTopWithAllowedDiff >= parentTop &&\n elementTopWithAllowedDiff <= parentBottom) ||\n (elementBottomWithAllowedDiff >= parentTop &&\n elementBottomWithAllowedDiff <= parentBottom)\n );\n });\n\n return visibleElements || null;\n}\n\nexport function hasNextElementSibling(element: HTMLElement) {\n return !!element.nextElementSibling;\n}\n\nexport function getLabelHeight(parentNode: NullableElement) {\n if (!parentNode) {\n return DEFAULT_LABEL_HEIGHT;\n }\n\n const label = parentNode.querySelector(asSelectors(ClassNames.label));\n\n if (label) {\n const height = label.getBoundingClientRect().height;\n if (height > 0) {\n return height;\n }\n }\n\n // fallback to default\n return DEFAULT_LABEL_HEIGHT;\n}\n","import { DataEmoji } from '../dataUtils/DataTypes';\nimport {\n emojiByUnified,\n unifiedWithoutSkinTone\n} from '../dataUtils/emojiSelectors';\n\nimport { asSelectors, ClassNames } from './classNames';\nimport { firstVisibleElementInContainer } from './elementPositionInRow';\n\nexport type NullableElement = HTMLElement | null;\n\nexport const EmojiButtonSelector = `button${asSelectors(ClassNames.emoji)}`;\nexport const VisibleEmojiSelector = [\n EmojiButtonSelector,\n asSelectors(ClassNames.visible),\n `:not(${asSelectors(ClassNames.hidden)})`\n].join('');\n\nexport function buttonFromTarget(\n emojiElement: NullableElement\n): HTMLButtonElement | null {\n return emojiElement?.closest(EmojiButtonSelector) ?? null;\n}\n\nexport function isEmojiButton(element: NullableElement): boolean {\n if (!element) {\n return false;\n }\n\n return element.matches(EmojiButtonSelector);\n}\n\nexport function emojiFromElement(\n element: NullableElement\n): [DataEmoji, string] | [] {\n const originalUnified = originalUnifiedFromEmojiElement(element);\n const unified = unifiedFromEmojiElement(element);\n\n if (!originalUnified) {\n return [];\n }\n\n const emoji = emojiByUnified(unified ?? originalUnified);\n\n if (!emoji) {\n return [];\n }\n\n return [emoji, unified as string];\n}\n\nexport function isEmojiElement(element: NullableElement): boolean {\n return Boolean(\n element?.matches(EmojiButtonSelector) ||\n element?.parentElement?.matches(EmojiButtonSelector)\n );\n}\n\nexport function categoryLabelFromCategory(\n category: NullableElement\n): NullableElement {\n return category?.querySelector(asSelectors(ClassNames.label)) ?? null;\n}\n\nexport function closestCategoryLabel(\n element: NullableElement\n): NullableElement {\n const category = closestCategory(element);\n return categoryLabelFromCategory(category);\n}\n\nexport function elementHeight(element: NullableElement): number {\n return element?.clientHeight ?? 0;\n}\n\nexport function emojiTrueOffsetTop(element: NullableElement): number {\n if (!element) {\n return 0;\n }\n\n const button = buttonFromTarget(element);\n const category = closestCategory(button);\n\n // compensate for the label height\n const labelHeight = categoryLabelHeight(category);\n\n return elementOffsetTop(button) + elementOffsetTop(category) + labelHeight;\n}\n\nexport function categoryLabelHeight(category: NullableElement): number {\n if (!category) {\n return 0;\n }\n\n const categoryWithoutLabel = category.querySelector(\n asSelectors(ClassNames.categoryContent)\n );\n\n return (\n (category?.clientHeight ?? 0) - (categoryWithoutLabel?.clientHeight ?? 0)\n );\n}\n\nexport function isEmojiBehindLabel(emoji: NullableElement): boolean {\n if (!emoji) {\n return false;\n }\n\n return (\n emojiDistanceFromScrollTop(emoji) <\n categoryLabelHeight(closestCategory(emoji))\n );\n}\n\nexport function queryScrollBody(root: NullableElement): NullableElement {\n if (!root) return null;\n\n return root.matches(asSelectors(ClassNames.scrollBody))\n ? root\n : root.querySelector(asSelectors(ClassNames.scrollBody));\n}\n\nexport function emojiDistanceFromScrollTop(emoji: NullableElement): number {\n if (!emoji) {\n return 0;\n }\n\n return emojiTrueOffsetTop(emoji) - (closestScrollBody(emoji)?.scrollTop ?? 0);\n}\n\nexport function closestScrollBody(element: NullableElement): NullableElement {\n if (!element) {\n return null;\n }\n\n return element.closest(asSelectors(ClassNames.scrollBody)) ?? null;\n}\n\nexport function emojiTruOffsetLeft(element: NullableElement): number {\n const button = buttonFromTarget(element);\n const category = closestCategory(button);\n\n return elementOffsetLeft(button) + elementOffsetLeft(category);\n}\n\nfunction elementOffsetTop(element: NullableElement): number {\n return element?.offsetTop ?? 0;\n}\n\nfunction elementOffsetLeft(element: NullableElement): number {\n return element?.offsetLeft ?? 0;\n}\n\nexport function unifiedFromEmojiElement(emoji: NullableElement): string | null {\n return elementDataSetKey(buttonFromTarget(emoji), 'unified') ?? null;\n}\n\nexport function originalUnifiedFromEmojiElement(\n emoji: NullableElement\n): string | null {\n const unified = unifiedFromEmojiElement(emoji);\n\n if (unified) {\n return unifiedWithoutSkinTone(unified);\n }\n return null;\n}\n\nexport function allUnifiedFromEmojiElement(\n emoji: NullableElement\n): { unified: string | null; originalUnified: string | null } {\n if (!emoji) {\n return {\n unified: null,\n originalUnified: null\n };\n }\n\n return {\n unified: unifiedFromEmojiElement(emoji),\n originalUnified: originalUnifiedFromEmojiElement(emoji)\n };\n}\n\nfunction elementDataSetKey(\n element: NullableElement,\n key: string\n): string | null {\n return elementDataSet(element)[key] ?? null;\n}\n\nfunction elementDataSet(element: NullableElement): DOMStringMap {\n return element?.dataset ?? {};\n}\n\nexport function isVisibleEmoji(element: HTMLElement) {\n return element.classList.contains(ClassNames.visible);\n}\n\nexport function isHidden(element: NullableElement) {\n if (!element) return true;\n\n return element.classList.contains(ClassNames.hidden);\n}\n\nexport function allVisibleEmojis(parent: NullableElement) {\n if (!parent) {\n return [];\n }\n\n return Array.from(\n parent.querySelectorAll(VisibleEmojiSelector)\n ) as HTMLElement[];\n}\n\nexport function lastVisibleEmoji(element: NullableElement): NullableElement {\n if (!element) return null;\n\n const allEmojis = allVisibleEmojis(element);\n const [last] = allEmojis.slice(-1);\n if (!last) {\n return null;\n }\n\n if (!isVisibleEmoji(last)) {\n return prevVisibleEmoji(last);\n }\n\n return last;\n}\n\nexport function nextVisibleEmoji(element: HTMLElement): NullableElement {\n const next = element.nextElementSibling as HTMLElement;\n\n if (!next) {\n return firstVisibleEmoji(nextCategory(element));\n }\n\n if (!isVisibleEmoji(next)) {\n return nextVisibleEmoji(next);\n }\n\n return next;\n}\n\nexport function prevVisibleEmoji(element: HTMLElement): NullableElement {\n const prev = element.previousElementSibling as HTMLElement;\n\n if (!prev) {\n return lastVisibleEmoji(prevCategory(element));\n }\n\n if (!isVisibleEmoji(prev)) {\n return prevVisibleEmoji(prev);\n }\n\n return prev;\n}\n\nexport function firstVisibleEmoji(parent: NullableElement) {\n if (!parent) {\n return null;\n }\n\n const allEmojis = allVisibleEmojis(parent);\n\n return firstVisibleElementInContainer(parent, allEmojis, 0.1);\n}\n\nexport function prevCategory(element: NullableElement): NullableElement {\n const category = closestCategory(element);\n\n if (!category) {\n return null;\n }\n\n const prev = category.previousElementSibling as HTMLElement;\n\n if (!prev) {\n return null;\n }\n\n if (isHidden(prev)) {\n return prevCategory(prev);\n }\n\n return prev;\n}\n\nexport function nextCategory(element: NullableElement): NullableElement {\n const category = closestCategory(element);\n\n if (!category) {\n return null;\n }\n\n const next = category.nextElementSibling as HTMLElement;\n\n if (!next) {\n return null;\n }\n\n if (isHidden(next)) {\n return nextCategory(next);\n }\n\n return next;\n}\n\nexport function closestCategory(element: NullableElement) {\n if (!element) {\n return null;\n }\n return element.closest(asSelectors(ClassNames.category)) as HTMLElement;\n}\n\nexport function closestCategoryContent(element: NullableElement) {\n if (!element) {\n return null;\n }\n return element.closest(\n asSelectors(ClassNames.categoryContent)\n ) as HTMLElement;\n}\n","export function parseNativeEmoji(unified: string): string {\n return unified\n .split('-')\n .map(hex => String.fromCodePoint(parseInt(hex, 16)))\n .join('');\n}\n","import {\n Categories,\n CategoryConfig,\n CustomCategoryConfig\n} from '../config/categoryConfig';\nimport { CustomEmoji } from '../config/customEmojiConfig';\nimport { DataEmoji } from '../dataUtils/DataTypes';\n\nexport function isCustomCategory(\n category: CategoryConfig | CustomCategoryConfig\n): category is CustomCategoryConfig {\n return category.category === Categories.CUSTOM;\n}\n\nexport function isCustomEmoji(emoji: Partial<DataEmoji>): emoji is CustomEmoji {\n return emoji.imgUrl !== undefined;\n}\n","import * as React from 'react';\nimport { useEffect, useRef } from 'react';\n\nimport {\n emojiFromElement,\n isEmojiElement,\n NullableElement\n} from '../DomUtils/selectors';\nimport {\n useActiveSkinToneState,\n useDisallowClickRef,\n useEmojiVariationPickerState,\n useUpdateSuggested\n} from '../components/context/PickerContext';\nimport { GetEmojiUrl } from '../components/emoji/BaseEmojiProps';\nimport {\n MOUSE_EVENT_SOURCE,\n useEmojiStyleConfig,\n useGetEmojiUrlConfig,\n useOnEmojiClickConfig\n} from '../config/useConfig';\nimport { DataEmoji } from '../dataUtils/DataTypes';\nimport {\n activeVariationFromUnified,\n emojiHasVariations,\n emojiNames,\n emojiUnified\n} from '../dataUtils/emojiSelectors';\nimport { parseNativeEmoji } from '../dataUtils/parseNativeEmoji';\nimport { setSuggested } from '../dataUtils/suggested';\nimport { isCustomEmoji } from '../typeRefinements/typeRefinements';\nimport { EmojiClickData, SkinTones, EmojiStyle } from '../types/exposedTypes';\n\nimport { useCloseAllOpenToggles } from './useCloseAllOpenToggles';\nimport useSetVariationPicker from './useSetVariationPicker';\n\nexport function useMouseDownHandlers(\n ContainerRef: React.MutableRefObject<NullableElement>,\n mouseEventSource: MOUSE_EVENT_SOURCE\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(mouseEventSource);\n const [, updateSuggested] = useUpdateSuggested();\n const getEmojiUrl = useGetEmojiUrlConfig();\n const activeEmojiStyle = useEmojiStyleConfig();\n\n const onClick = React.useCallback(\n function onClick(event: MouseEvent) {\n if (disallowClickRef.current) {\n return;\n }\n\n closeAllOpenToggles();\n\n const [emoji, unified] = emojiFromEvent(event);\n\n if (!emoji || !unified) {\n return;\n }\n\n const skinToneToUse =\n activeVariationFromUnified(unified) || activeSkinTone;\n\n updateSuggested();\n setSuggested(emoji, skinToneToUse);\n onEmojiClick(\n emojiClickOutput(emoji, skinToneToUse, activeEmojiStyle, getEmojiUrl),\n event\n );\n },\n [\n activeSkinTone,\n closeAllOpenToggles,\n disallowClickRef,\n onEmojiClick,\n updateSuggested,\n getEmojiUrl,\n activeEmojiStyle\n ]\n );\n\n const onMouseDown = React.useCallback(\n function onMouseDown(event: MouseEvent) {\n if (mouseDownTimerRef.current) {\n clearTimeout(mouseDownTimerRef.current);\n }\n\n const [emoji] = emojiFromEvent(event);\n\n if (!emoji || !emojiHasVariations(emoji)) {\n return;\n }\n\n mouseDownTimerRef.current = window?.setTimeout(() => {\n disallowClickRef.current = true;\n mouseDownTimerRef.current = undefined;\n closeAllOpenToggles();\n setVariationPicker(event.target as HTMLElement);\n setEmojiVariationPicker(emoji);\n }, 500);\n },\n [\n disallowClickRef,\n closeAllOpenToggles,\n setVariationPicker,\n setEmojiVariationPicker\n ]\n );\n const onMouseUp = React.useCallback(\n function onMouseUp() {\n if (mouseDownTimerRef.current) {\n clearTimeout(mouseDownTimerRef.current);\n mouseDownTimerRef.current = undefined;\n } else if (disallowClickRef.current) {\n // The problem we're trying to overcome here\n // is that the emoji has both mouseup and click events\n // and when releasing a mouseup event\n // the click gets triggered too\n // So we're disallowing the click event for a short time\n\n requestAnimationFrame(() => {\n disallowClickRef.current = false;\n });\n }\n },\n [disallowClickRef]\n );\n\n useEffect(() => {\n if (!ContainerRef.current) {\n return;\n }\n const confainerRef = ContainerRef.current;\n confainerRef.addEventListener('click', onClick, {\n passive: true\n });\n\n confainerRef.addEventListener('mousedown', onMouseDown, {\n passive: true\n });\n confainerRef.addEventListener('mouseup', onMouseUp, {\n passive: true\n });\n\n return () => {\n confainerRef?.removeEventListener('click', onClick);\n confainerRef?.removeEventListener('mousedown', onMouseDown);\n confainerRef?.removeEventListener('mouseup', onMouseUp);\n };\n }, [ContainerRef, onClick, onMouseDown, onMouseUp]);\n}\n\nfunction emojiFromEvent(event: MouseEvent): [DataEmoji, string] | [] {\n const target = event?.target as HTMLElement;\n if (!isEmojiElement(target)) {\n return [];\n }\n\n return emojiFromElement(target);\n}\n\nfunction emojiClickOutput(\n emoji: DataEmoji,\n activeSkinTone: SkinTones,\n activeEmojiStyle: EmojiStyle,\n getEmojiUrl: GetEmojiUrl\n): EmojiClickData {\n const names = emojiNames(emoji);\n\n if (isCustomEmoji(emoji)) {\n const unified = emojiUnified(emoji);\n return {\n activeSkinTone,\n emoji: unified,\n getImageUrl() {\n return emoji.imgUrl;\n },\n imageUrl: emoji.imgUrl,\n isCustom: true,\n names,\n unified,\n unifiedWithoutSkinTone: unified\n };\n }\n const unified = emojiUnified(emoji, activeSkinTone);\n\n return {\n activeSkinTone,\n emoji: parseNativeEmoji(unified),\n getImageUrl(emojiStyle: EmojiStyle = activeEmojiStyle ?? EmojiStyle.APPLE) {\n return getEmojiUrl(unified, emojiStyle);\n },\n imageUrl: getEmojiUrl(unified, activeEmojiStyle ?? EmojiStyle.APPLE),\n isCustom: false,\n names,\n unified,\n unifiedWithoutSkinTone: emojiUnified(emoji)\n };\n}\n","import { cx } from 'flairup';\nimport * as React from 'react';\n\nimport { stylesheet } from '../../Stylesheet/stylesheet';\n\ninterface Props\n extends React.DetailedHTMLProps<\n React.ButtonHTMLAttributes<HTMLButtonElement>,\n HTMLButtonElement\n > {\n className?: string;\n}\n\nexport function Button(props: Props) {\n return (\n <button\n type=\"button\"\n {...props}\n className={cx(styles.button, props.className)}\n >\n {props.children}\n </button>\n );\n}\n\nconst styles = stylesheet.create({\n button: {\n '.': 'epr-btn',\n cursor: 'pointer',\n border: '0',\n background: 'none',\n outline: 'none'\n }\n});\n","import { cx } from 'flairup';\nimport * as React from 'react';\n\nimport { ClassNames } from '../../DomUtils/classNames';\nimport {\n commonInteractionStyles,\n commonStyles,\n stylesheet\n} from '../../Stylesheet/stylesheet';\nimport { Button } from '../atoms/Button';\n\ntype ClickableEmojiButtonProps = Readonly<{\n hidden?: boolean;\n showVariations?: boolean;\n hiddenOnSearch?: boolean;\n emojiNames: string[];\n children: React.ReactNode;\n hasVariations: boolean;\n unified?: string;\n noBackground?: boolean;\n className?: string;\n style?: React.CSSProperties;\n}>;\n\nexport function ClickableEmojiButton({\n emojiNames,\n unified,\n hidden,\n hiddenOnSearch,\n showVariations = true,\n hasVariations,\n children,\n className,\n noBackground = false,\n style\n}: ClickableEmojiButtonProps) {\n return (\n <Button\n className={cx(\n styles.emoji,\n hidden && commonStyles.hidden,\n hiddenOnSearch && commonInteractionStyles.hiddenOnSearch,\n {\n [ClassNames.visible]: !hidden && !hiddenOnSearch\n },\n !!(hasVariations && showVariations) && styles.hasVariations,\n noBackground && styles.noBackground,\n className\n )}\n data-unified={unified}\n aria-label={getAriaLabel(emojiNames)}\n data-full-name={emojiNames}\n style={style}\n >\n {children}\n </Button>\n );\n}\n\nfunction getAriaLabel(emojiNames: string[]) {\n return emojiNames[0].match('flag-')\n ? emojiNames[1] ?? emojiNames[0]\n : emojiNames[0];\n}\n\nconst styles = stylesheet.create({\n emoji: {\n '.': ClassNames.emoji,\n position: 'relative',\n width: 'var(--epr-emoji-fullsize)',\n height: 'var(--epr-emoji-fullsize)',\n boxSizing: 'border-box',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n maxWidth: 'var(--epr-emoji-fullsize)',\n maxHeight: 'var(--epr-emoji-fullsize)',\n borderRadius: '8px',\n overflow: 'hidden',\n transition: 'background-color 0.2s',\n ':hover': {\n backgroundColor: 'var(--epr-emoji-hover-color)'\n },\n ':focus': {\n backgroundColor: 'var(--epr-focus-bg-color)'\n }\n },\n noBackground: {\n background: 'none',\n ':hover': {\n backgroundColor: 'transparent',\n background: 'none'\n },\n ':focus': {\n backgroundColor: 'transparent',\n background: 'none'\n }\n },\n hasVariations: {\n '.': ClassNames.emojiHasVariations,\n ':after': {\n content: '',\n display: 'block',\n width: '0',\n height: '0',\n right: '0px',\n bottom: '1px',\n position: 'absolute',\n borderLeft: '4px solid transparent',\n borderRight: '4px solid transparent',\n transform: 'rotate(135deg)',\n borderBottom: '4px solid var(--epr-emoji-variation-indicator-color)',\n zIndex: 'var(--epr-emoji-variations-indictator-z-index)'\n },\n ':hover:after': {\n borderBottom: '4px solid var(--epr-emoji-variation-indicator-color-hover)'\n }\n }\n});\n","import { ClassNames } from '../../DomUtils/classNames';\nimport { stylesheet } from '../../Stylesheet/stylesheet';\n\nexport const emojiStyles = stylesheet.create({\n external: {\n '.': ClassNames.external,\n fontSize: '0'\n },\n common: {\n alignSelf: 'center',\n justifySelf: 'center',\n display: 'block'\n }\n});\n","import { cx } from 'flairup';\nimport * as React from 'react';\n\nimport { stylesheet } from '../../Stylesheet/stylesheet';\nimport { EmojiStyle } from '../../types/exposedTypes';\n\nimport { emojiStyles } from './emojiStyles';\n\nexport function EmojiImg({\n emojiName,\n style,\n lazyLoad = false,\n imgUrl,\n onError,\n className\n}: {\n emojiName: string;\n emojiStyle: EmojiStyle;\n style: React.CSSProperties;\n lazyLoad?: boolean;\n imgUrl: string;\n onError: () => void;\n className?: string;\n}) {\n return (\n <img\n src={imgUrl}\n alt={emojiName}\n className={cx(styles.emojiImag, emojiStyles.external, emojiStyles.common, className)}\n loading={lazyLoad ? 'lazy' : 'eager'}\n onError={onError}\n style={style}\n />\n );\n}\n\nconst styles = stylesheet.create({\n emojiImag: {\n '.': 'epr-emoji-img',\n maxWidth: 'var(--epr-emoji-fullsize)',\n maxHeight: 'var(--epr-emoji-fullsize)',\n minWidth: 'var(--epr-emoji-fullsize)',\n minHeight: 'var(--epr-emoji-fullsize)',\n padding: 'var(--epr-emoji-padding)'\n }\n});\n","import { cx } from 'flairup';\nimport * as React from 'react';\n\nimport { stylesheet } from '../../Stylesheet/stylesheet';\nimport { parseNativeEmoji } from '../../dataUtils/parseNativeEmoji';\n\nimport { emojiStyles } from './emojiStyles';\n\nexport function NativeEmoji({\n unified,\n style,\n className\n}: {\n unified: string;\n style: React.CSSProperties;\n className?: string;\n}) {\n return (\n <span\n className={cx(\n styles.nativeEmoji,\n emojiStyles.common,\n emojiStyles.external,\n className\n )}\n data-unified={unified}\n style={style}\n >\n {parseNativeEmoji(unified)}\n </span>\n );\n}\n\nconst styles = stylesheet.create({\n nativeEmoji: {\n '.': 'epr-emoji-native',\n fontFamily:\n '\"Segoe UI Emoji\", \"Segoe UI Symbol\", \"Segoe UI\", \"Apple Color Emoji\", \"Twemoji Mozilla\", \"Noto Color Emoji\", \"EmojiOne Color\", \"Android Emoji\"!important',\n position: 'relative',\n lineHeight: '100%',\n fontSize: 'var(--epr-emoji-size)',\n textAlign: 'center',\n alignSelf: 'center',\n justifySelf: 'center',\n letterSpacing: '0',\n padding: 'var(--epr-emoji-padding)'\n }\n});\n","import * as React from 'react';\n\nimport {\n emojiByUnified,\n emojiName,\n emojiUrlByUnified\n} from '../../dataUtils/emojiSelectors';\nimport { isCustomEmoji } from '../../typeRefinements/typeRefinements';\nimport { EmojiStyle } from '../../types/exposedTypes';\nimport { useEmojisThatFailedToLoadState } from '../context/PickerContext';\n\nimport { BaseEmojiProps } from './BaseEmojiProps';\nimport { EmojiImg } from './EmojiImg';\nimport { NativeEmoji } from './NativeEmoji';\n\nexport function ViewOnlyEmoji({\n emoji,\n unified,\n emojiStyle,\n size,\n lazyLoad,\n getEmojiUrl = emojiUrlByUnified,\n className\n}: BaseEmojiProps) {\n const [, setEmojisThatFailedToLoad] = useEmojisThatFailedToLoadState();\n\n const style = {} as React.CSSProperties;\n if (size) {\n style.width = style.height = style.fontSize = `${size}px`;\n }\n\n const emojiToRender = emoji ? emoji : emojiByUnified(unified);\n\n if (!emojiToRender) {\n return null;\n }\n\n if (isCustomEmoji(emojiToRender)) {\n return (\n <EmojiImg\n style={style}\n emojiName={unified}\n emojiStyle={EmojiStyle.NATIVE}\n lazyLoad={lazyLoad}\n imgUrl={emojiToRender.imgUrl}\n onError={onError}\n className={className}\n />\n );\n }\n\n return (\n <>\n {emojiStyle === EmojiStyle.NATIVE ? (\n <NativeEmoji unified={unified} style={style} className={className} />\n ) : (\n <EmojiImg\n style={style}\n emojiName={emojiName(emojiToRender)}\n emojiStyle={emojiStyle}\n lazyLoad={lazyLoad}\n imgUrl={getEmojiUrl(unified, emojiStyle)}\n onError={onError}\n className={className}\n />\n )}\n </>\n );\n\n function onError() {\n setEmojisThatFailedToLoad(prev => new Set(prev).add(unified));\n }\n}\n","import * as React from 'react';\n\nimport { DataEmoji } from '../../dataUtils/DataTypes';\nimport { emojiHasVariations, emojiNames } from '../../dataUtils/emojiSelectors';\n\nimport { BaseEmojiProps } from './BaseEmojiProps';\nimport { ClickableEmojiButton } from './ClickableEmojiButton';\nimport { ViewOnlyEmoji } from './ViewOnlyEmoji';\n\ntype ClickableEmojiProps = Readonly<\n BaseEmojiProps & {\n hidden?: boolean;\n showVariations?: boolean;\n hiddenOnSearch?: boolean;\n emoji: DataEmoji;\n className?: string;\n noBackground?: boolean;\n style?: React.CSSProperties;\n }\n>;\n\nexport function ClickableEmoji({\n emoji,\n unified,\n hidden,\n hiddenOnSearch,\n emojiStyle,\n showVariations = true,\n size,\n lazyLoad,\n getEmojiUrl,\n className,\n noBackground = false,\n style\n}: ClickableEmojiProps) {\n const hasVariations = emojiHasVariations(emoji);\n\n return (\n <ClickableEmojiButton\n hasVariations={hasVariations}\n showVariations={showVariations}\n hidden={hidden}\n hiddenOnSearch={hiddenOnSearch}\n emojiNames={emojiNames(emoji)}\n unified={unified}\n noBackground={noBackground}\n style={style}\n >\n <ViewOnlyEmoji\n unified={unified}\n emoji={emoji}\n size={size}\n emojiStyle={emojiStyle}\n lazyLoad={lazyLoad}\n getEmojiUrl={getEmojiUrl}\n className={className}\n />\n </ClickableEmojiButton>\n );\n}\n","import { cx } from 'flairup';\nimport * as React from 'react';\n\nimport { darkMode, stylesheet } from '../../Stylesheet/stylesheet';\nimport { Button } from '../atoms/Button';\nimport { useReactionsModeState } from '../context/PickerContext';\n\nimport Plus from './svg/plus.svg';\n\nexport function BtnPlus() {\n const [, setReactionsMode] = useReactionsModeState();\n return (\n <Button\n aria-label=\"Show all Emojis\"\n title=\"Show all Emojis\"\n tabIndex={0}\n className={cx(styles.plusSign)}\n onClick={() => setReactionsMode(false)}\n />\n );\n}\n\nconst styles = stylesheet.create({\n plusSign: {\n fontSize: '20px',\n padding: '17px',\n color: 'var(--epr-text-color)',\n borderRadius: '50%',\n textAlign: 'center',\n lineHeight: '100%',\n width: '20px',\n height: '20px',\n display: 'flex',\n justifyContent: 'center',\n alignItems: 'center',\n transition: 'background-color 0.2s ease-in-out',\n ':after': {\n content: '',\n minWidth: '20px',\n minHeight: '20px',\n backgroundImage: `url(${Plus})`,\n backgroundColor: 'transparent',\n backgroundRepeat: 'no-repeat',\n backgroundSize: '20px',\n backgroundPositionY: '0'\n },\n ':hover': {\n color: 'var(--epr-highlight-color)',\n backgroundColor: 'var(--epr-hover-bg-color-reduced-opacity)',\n ':after': {\n backgroundPositionY: '-20px'\n }\n },\n ':focus': {\n color: 'var(--epr-highlight-color)',\n backgroundColor: 'var(--epr-hover-bg-color-reduced-opacity)',\n ':after': {\n backgroundPositionY: '-40px'\n }\n }\n },\n ...darkMode('plusSign', {\n ':after': { backgroundPositionY: '-40px' },\n ':hover:after': { backgroundPositionY: '-60px' }\n })\n});\n","import { cx } from 'flairup';\nimport * as React from 'react';\n\nimport { commonStyles, stylesheet } from '../../Stylesheet/stylesheet';\nimport {\n MOUSE_EVENT_SOURCE,\n useEmojiStyleConfig,\n useReactionsConfig,\n useAllowExpandReactions,\n useGetEmojiUrlConfig\n} from '../../config/useConfig';\nimport { DataEmoji } from '../../dataUtils/DataTypes';\nimport { emojiByUnified } from '../../dataUtils/emojiSelectors';\nimport { useMouseDownHandlers } from '../../hooks/useMouseDownHandlers';\nimport { useReactionsRef } from '../context/ElementRefContext';\nimport { useReactionsModeState } from '../context/PickerContext';\nimport { ClickableEmoji } from '../emoji/Emoji';\n\nimport { BtnPlus } from './BtnPlus';\n\nexport function Reactions() {\n const [reactionsOpen] = useReactionsModeState();\n const ReactionsRef = useReactionsRef();\n const reactions = useReactionsConfig();\n useMouseDownHandlers(ReactionsRef, MOUSE_EVENT_SOURCE.REACTIONS);\n const emojiStyle = useEmojiStyleConfig();\n const allowExpandReactions = useAllowExpandReactions();\n const getEmojiUrl = useGetEmojiUrlConfig();\n\n if (!reactionsOpen) {\n return null;\n }\n\n return (\n <ul\n className={cx(styles.list, !reactionsOpen && commonStyles.hidden)}\n ref={ReactionsRef}\n >\n {reactions.map(reaction => (\n <li key={reaction}>\n <ClickableEmoji\n emoji={emojiByUnified(reaction) as DataEmoji}\n emojiStyle={emojiStyle}\n unified={reaction}\n showVariations={false}\n className={cx(styles.emojiButton)}\n noBackground\n getEmojiUrl={getEmojiUrl}\n />\n </li>\n ))}\n {allowExpandReactions ? (\n <li>\n <BtnPlus />\n </li>\n ) : null}\n </ul>\n );\n}\n\nconst styles = stylesheet.create({\n list: {\n listStyle: 'none',\n margin: '0',\n padding: '0 5px',\n display: 'flex',\n justifyContent: 'space-between',\n alignItems: 'center',\n height: '100%'\n },\n emojiButton: {\n ':hover': {\n transform: 'scale(1.2)'\n },\n ':focus': {\n transform: 'scale(1.2)'\n },\n ':active': {\n transform: 'scale(1.1)'\n },\n transition: 'transform 0.2s cubic-bezier(0.175, 0.885, 0.32, 1.5)'\n }\n});\n","import { useEffect, useState } from 'react';\n\nimport { ElementRef } from '../components/context/ElementRefContext';\n\nimport { useCloseAllOpenToggles } from './useCloseAllOpenToggles';\n\nexport function useOnScroll(BodyRef: ElementRef) {\n const closeAllOpenToggles = useCloseAllOpenToggles();\n const [scrollTop, setScrollTop] = useState(0);\n\n useEffect(() => {\n const bodyRef = BodyRef.current;\n if (!bodyRef) {\n return;\n }\n\n bodyRef.addEventListener('scroll', onScroll, {\n passive: true\n });\n\n function onScroll() {\n setScrollTop(bodyRef?.scrollTop ?? 0);\n closeAllOpenToggles();\n }\n\n return () => {\n bodyRef?.removeEventListener('scroll', onScroll);\n };\n }, [BodyRef, closeAllOpenToggles]);\n\n return scrollTop;\n}\n","export function shouldVirtualize({\n scrollTop,\n clientHeight,\n topOffset,\n style,\n dimensions\n}: {\n scrollTop: number;\n clientHeight: number;\n topOffset: number;\n style: { top: number } | undefined;\n dimensions: Dimensions;\n}): boolean {\n if (!style || !dimensions) {\n return false;\n }\n\n const emojiTop = topOffset + style.top;\n const emojiBottom = emojiTop + dimensions.emojiSize;\n\n const isVisible =\n emojiBottom + dimensions.emojiSize * 2 >= scrollTop &&\n emojiTop <= scrollTop + clientHeight + dimensions.emojiSize;\n\n return !isVisible;\n}\n\nexport function getEmojiPositionStyle(dimensions: Dimensions, index: number) {\n return dimensions\n ? {\n top: Math.floor(index / dimensions.emojisPerRow) * dimensions.emojiSize,\n left: (index % dimensions.emojisPerRow) * dimensions.emojiSize\n }\n : undefined;\n}\n\n// preload emoji if it is one row below viewport\n\nexport type Dimensions =\n | {\n emojiSize: number;\n emojisPerRow: number;\n categoryHeight: number;\n }\n | undefined;\n","import * as React from 'react';\n\nimport { EmojiButtonSelector } from '../DomUtils/selectors';\nimport {\n useEmojiListRef,\n usePickerMainRef,\n} from '../components/context/ElementRefContext';\nimport {\n useReactionsModeState,\n useVisibleCategoriesState,\n useEmojiSizeState,\n} from '../components/context/PickerContext';\n\nconst EMOJI_SIZE_DEFAULT = 40;\n\nexport function useCategoryHeight(emojiCount: number):\n | {\n categoryHeight: number;\n emojisPerRow: number;\n emojiSize: number;\n }\n | undefined {\n const EmojiListRef = useEmojiListRef();\n const [isReactionsMode] = useReactionsModeState();\n const PickerMainRef = usePickerMainRef();\n const emojiSizeRef = React.useRef<number | undefined>();\n const [visibleCategories] = useVisibleCategoriesState();\n const [emojiSizeFromContext] = useEmojiSizeState();\n const [dimensions, setDimensions] = React.useState<{\n categoryHeight: number;\n emojisPerRow: number;\n emojiSize: number;\n }>();\n\n // Helper to compute and store dimensions based on current DOM\n const computeAndSetDimensions = React.useCallback(() => {\n const listEl = EmojiListRef.current;\n if (!listEl) return;\n\n const emojiElement = listEl.querySelector(\n EmojiButtonSelector,\n ) as HTMLElement | null;\n\n const measured = emojiElement?.clientHeight;\n if (measured) {\n emojiSizeRef.current = measured;\n }\n const emojiSize =\n emojiSizeFromContext ||\n measured ||\n emojiSizeRef.current ||\n EMOJI_SIZE_DEFAULT;\n const pickerWidth = listEl.clientWidth;\n\n if (pickerWidth === 0 || emojiSize === 0) return;\n\n const emojisPerRow = Math.max(1, Math.floor(pickerWidth / emojiSize));\n const rowCount = Math.ceil(emojiCount / emojisPerRow);\n const categoryHeight = rowCount * emojiSize;\n\n setDimensions({ categoryHeight, emojisPerRow, emojiSize });\n }, [EmojiListRef, emojiCount, emojiSizeFromContext]);\n\n // Recompute on data-count changes and when reactions mode toggles\n React.useEffect(() => {\n computeAndSetDimensions();\n }, [\n emojiCount,\n isReactionsMode,\n computeAndSetDimensions,\n visibleCategories.length,\n ]);\n\n // Listen to transitionend on the picker root (where height transition occurs)\n React.useEffect(() => {\n const rootEl = PickerMainRef.current;\n if (!rootEl) return;\n\n const handler = (e: Event) => {\n const te = e as TransitionEvent;\n const prop = te.propertyName;\n if (\n prop === 'width' ||\n prop === 'max-width' ||\n prop === 'min-width' ||\n prop === 'height' ||\n prop === 'max-height' ||\n prop === 'min-height'\n ) {\n if (typeof queueMicrotask === 'function') {\n queueMicrotask(() => computeAndSetDimensions());\n } else {\n requestAnimationFrame(() => computeAndSetDimensions());\n }\n }\n };\n\n rootEl.addEventListener('transitionend', handler, {\n passive: true,\n });\n return () => {\n rootEl.removeEventListener('transitionend', handler);\n };\n }, [PickerMainRef, computeAndSetDimensions]);\n\n return dimensions;\n}\n","import { useEmojisThatFailedToLoadState } from '../components/context/PickerContext';\nimport { DataEmoji } from '../dataUtils/DataTypes';\nimport { emojiUnified } from '../dataUtils/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"," \n import { ReactNode, useEffect } from 'react';\nimport * as React from 'react';\n\nimport { useBodyRef } from '../components/context/ElementRefContext';\nimport { useActiveSkinToneState } from '../components/context/PickerContext';\nimport { ClickableEmoji } from '../components/emoji/Emoji';\nimport {\n useEmojiStyleConfig,\n useGetEmojiUrlConfig,\n useLazyLoadEmojisConfig,\n useSkinTonesDisabledConfig\n} from '../config/useConfig';\nimport { DataEmojis } from '../dataUtils/DataTypes';\nimport { emojiUnified } from '../dataUtils/emojiSelectors';\nimport {\n getEmojiPositionStyle,\n shouldVirtualize\n} from '../virtualization/virtualizationHelpers';\n\nimport { preloadEmojiIfNeeded } from './preloadEmoji';\nimport { useCategoryHeight } from './useCategoryHeight';\nimport { useIsEmojiDisallowed } from './useDisallowedEmojis';\nimport { useIsEmojiHidden } from './useIsEmojiHidden';\n\nexport function useEmojiVirtualization({\n categoryEmojis,\n topOffset,\n onHeightReady,\n scrollTop,\n isCategoryVisible\n}: {\n categoryEmojis: DataEmojis;\n topOffset: number;\n onHeightReady: (height: number) => void;\n scrollTop: number;\n isCategoryVisible: boolean;\n}) {\n const isEmojiHidden = useIsEmojiHidden();\n const lazyLoadEmojis = useLazyLoadEmojisConfig();\n const emojiStyle = useEmojiStyleConfig();\n const [activeSkinTone] = useActiveSkinToneState();\n const isEmojiDisallowed = useIsEmojiDisallowed();\n const getEmojiUrl = useGetEmojiUrlConfig();\n const showVariations = !useSkinTonesDisabledConfig();\n const BodyRef = useBodyRef();\n\n let virtualizedCounter = 0;\n\n const emojisToPush = categoryEmojis.filter(emoji => {\n const isDisallowed = isEmojiDisallowed(emoji);\n const { failedToLoad, filteredOut, hidden } = isEmojiHidden(emoji);\n\n return !failedToLoad && !filteredOut && !hidden && !isDisallowed;\n });\n\n const dimensions = useCategoryHeight(emojisToPush.length);\n\n useEffect(() => {\n if (dimensions) {\n onHeightReady(dimensions.categoryHeight);\n }\n }, [dimensions, onHeightReady, emojisToPush.length]);\n\n const isVirtualized = (style: { top: number; left: number } | undefined) =>\n dimensions &&\n BodyRef.current &&\n shouldVirtualize({\n scrollTop,\n clientHeight: BodyRef.current?.clientHeight ?? 0,\n topOffset,\n style,\n dimensions\n });\n\n const emojis = emojisToPush.reduce((accumulator, emoji, index) => {\n const unified = emojiUnified(emoji, activeSkinTone);\n const style = getEmojiPositionStyle(dimensions, index);\n\n if (isVirtualized(style)) {\n virtualizedCounter++;\n preloadEmojiIfNeeded(\n emoji,\n emojiStyle,\n scrollTop,\n BodyRef.current?.clientHeight ?? 0,\n topOffset,\n style,\n dimensions,\n getEmojiUrl\n );\n return accumulator;\n }\n\n if (!isCategoryVisible) {\n virtualizedCounter++;\n return accumulator;\n }\n\n accumulator.push(\n <ClickableEmoji\n showVariations={showVariations}\n key={unified}\n emoji={emoji}\n unified={unified}\n emojiStyle={emojiStyle}\n lazyLoad={lazyLoadEmojis}\n getEmojiUrl={getEmojiUrl}\n style={{\n ...style,\n position: 'absolute'\n }}\n />\n );\n return accumulator;\n }, [] as ReactNode[]);\n\n return {\n virtualizedCounter,\n emojis,\n dimensions\n };\n}\n","import { cx } from 'flairup';\nimport * as React from 'react';\n\nimport { ClassNames } from '../../DomUtils/classNames';\nimport {\n commonInteractionStyles,\n commonStyles,\n stylesheet\n} from '../../Stylesheet/stylesheet';\nimport {\n CategoryConfig,\n categoryFromCategoryConfig,\n categoryNameFromCategoryConfig\n} from '../../config/categoryConfig';\n\ntype Props = Readonly<{\n categoryConfig: CategoryConfig;\n children?: React.ReactNode;\n hidden?: boolean;\n hiddenOnSearch?: boolean;\n height?: number;\n}>;\n\nexport function EmojiCategory({\n categoryConfig,\n children,\n hidden,\n hiddenOnSearch,\n height\n}: Props) {\n const category = categoryFromCategoryConfig(categoryConfig);\n const categoryName = categoryNameFromCategoryConfig(categoryConfig);\n\n return (\n <li\n className={cx(\n styles.category,\n hidden && commonStyles.hidden,\n hiddenOnSearch && commonInteractionStyles.hiddenOnSearch\n )}\n data-name={category}\n aria-label={categoryName}\n >\n <h2 className={cx(styles.label)}>{categoryName}</h2>\n <div className={cx(styles.categoryContent)} style={{ height }}>\n {children}\n </div>\n </li>\n );\n}\n\nconst styles = stylesheet.create({\n category: {\n '.': ClassNames.category,\n minHeight:\n 'calc(var(--epr-emoji-fullsize) + var(--epr-category-label-height))',\n position: 'relative'\n },\n categoryContent: {\n '.': ClassNames.categoryContent,\n display: 'grid',\n gridGap: '0',\n gridTemplateColumns: 'repeat(auto-fill, var(--epr-emoji-fullsize))',\n justifyContent: 'space-between',\n margin: 'var(--epr-category-padding)',\n position: 'relative'\n },\n label: {\n '.': ClassNames.label,\n alignItems: 'center',\n // @ts-ignore - backdropFilter is not recognized.\n backdropFilter: 'blur(3px)',\n backgroundColor: 'var(--epr-category-label-bg-color)',\n color: 'var(--epr-category-label-text-color)',\n display: 'flex',\n fontSize: '16px',\n fontWeight: 'bold',\n height: 'var(--epr-category-label-height)',\n margin: '0',\n padding: 'var(--epr-category-label-padding)',\n position: 'sticky',\n textTransform: 'capitalize',\n top: '0',\n width: '100%',\n zIndex: 'var(--epr-category-label-z-index)'\n }\n});\n","import * as React from 'react';\n\nimport {\n categoryFromCategoryConfig\n} from '../../config/categoryConfig';\nimport {\n useCategoriesConfig,\n useEmojiStyleConfig,\n useGetEmojiUrlConfig,\n useLazyLoadEmojisConfig\n} from '../../config/useConfig';\nimport {\n useGetEmojisByCategory,\n emojiUnified\n} from '../../dataUtils/emojiSelectors';\nimport { useActiveSkinToneState, useEmojiSizeState } from '../context/PickerContext';\nimport { ClickableEmoji } from '../emoji/Emoji';\n\nexport function MeasureEmoji() {\n const categories = useCategoriesConfig();\n const getEmojisByCategory = useGetEmojisByCategory();\n const emojiStyle = useEmojiStyleConfig();\n const getEmojiUrl = useGetEmojiUrlConfig();\n const lazyLoadEmojis = useLazyLoadEmojisConfig();\n const [activeSkinTone] = useActiveSkinToneState();\n const [emojiSize, setEmojiSize] = useEmojiSizeState();\n const ref = React.useRef<HTMLDivElement>(null);\n\n React.useLayoutEffect(() => {\n if (ref.current) {\n setEmojiSize(ref.current.clientHeight);\n }\n });\n\n if (emojiSize) {\n return null;\n }\n\n const firstCategory = categories[0];\n const dummyEmoji = getEmojisByCategory(\n categoryFromCategoryConfig(firstCategory)\n )[0];\n const unified = dummyEmoji\n ? emojiUnified(dummyEmoji, activeSkinTone)\n : '';\n\n if (!dummyEmoji) {\n return null;\n }\n\n return (\n <div ref={ref}>\n <ClickableEmoji\n emoji={dummyEmoji}\n unified={unified}\n emojiStyle={emojiStyle}\n getEmojiUrl={getEmojiUrl}\n lazyLoad={lazyLoadEmojis}\n showVariations={false}\n hidden={false}\n style={{\n opacity: 0,\n pointerEvents: 'none',\n position: 'absolute',\n top: 0,\n left: 0,\n zIndex: -1,\n height: 'var(--epr-emoji-fullsize)',\n width: 'var(--epr-emoji-fullsize)'\n }}\n />\n </div>\n );\n}\n","import { cx } from 'flairup';\nimport * as React from 'react';\n\nimport { ClassNames } from '../../DomUtils/classNames';\nimport { getLabelHeight } from '../../DomUtils/elementPositionInRow';\nimport { stylesheet } from '../../Stylesheet/stylesheet';\nimport {\n CategoryConfig,\n categoryFromCategoryConfig\n} from '../../config/categoryConfig';\nimport { useCategoriesConfig } from '../../config/useConfig';\nimport { DataEmojis } from '../../dataUtils/DataTypes';\nimport { useGetEmojisByCategory } from '../../dataUtils/emojiSelectors';\nimport { useEmojiVirtualization } from '../../hooks/useEmojiVirtualization';\nimport { useEmojiListRef } from '../context/ElementRefContext';\nimport { useVisibleCategoriesState } from '../context/PickerContext';\n\nimport { EmojiCategory } from './EmojiCategory';\nimport { MeasureEmoji } from './MeasureEmoji';\n\nexport function EmojiList({ scrollTop }: { scrollTop: number }) {\n const categories = useCategoriesConfig();\n const [categoryHeights, setCategoryHeights] = React.useState<{\n [key: string]: number;\n }>({});\n const EmojiListRef = useEmojiListRef();\n const getEmojisByCategory = useGetEmojisByCategory();\n\n const labelHeight = getLabelHeight(EmojiListRef.current);\n\n let topOffset = 0;\n return (\n <ul className={cx(styles.emojiList)} ref={EmojiListRef}>\n <MeasureEmoji />\n {categories.map(categoryConfig => {\n const category = categoryFromCategoryConfig(categoryConfig);\n\n const currentOffset = topOffset;\n const categoryHeight = categoryHeights[category];\n if (categoryHeight) {\n topOffset += categoryHeight + labelHeight;\n }\n\n return (\n <React.Suspense key={category}>\n <RenderCategory\n categoryEmojis={getEmojisByCategory(category)}\n categoryConfig={categoryConfig}\n topOffset={currentOffset}\n onHeightReady={height => {\n if (categoryHeights[category] !== height) {\n setCategoryHeights(prev => ({\n ...prev,\n [category]: height\n }));\n }\n }}\n scrollTop={scrollTop}\n />\n </React.Suspense>\n );\n })}\n </ul>\n );\n}\n\nfunction RenderCategory({\n categoryEmojis,\n categoryConfig,\n topOffset,\n onHeightReady,\n scrollTop\n}: {\n categoryEmojis: DataEmojis;\n categoryConfig: CategoryConfig;\n topOffset: number;\n onHeightReady: (height: number) => void;\n scrollTop: number;\n}) {\n const [visibleCategories] = useVisibleCategoriesState();\n\n const { virtualizedCounter, emojis, dimensions } = useEmojiVirtualization({\n categoryEmojis,\n topOffset,\n onHeightReady,\n scrollTop,\n isCategoryVisible: visibleCategories.includes(categoryConfig.category)\n });\n\n return (\n <EmojiCategory\n categoryConfig={categoryConfig}\n height={dimensions?.categoryHeight}\n // Indicates that there are no visible emojis\n // Hence, the category should be hidden\n hidden={!emojis.length && virtualizedCounter === 0}\n >\n {emojis}\n </EmojiCategory>\n );\n}\n\nconst styles = stylesheet.create({\n emojiList: {\n '.': ClassNames.emojiList,\n listStyle: 'none',\n margin: '0',\n padding: '0'\n }\n});\n","import { cx } from 'flairup';\nimport * as React from 'react';\nimport { useEffect } from 'react';\n\nimport { ClassNames } from '../../DomUtils/classNames';\nimport { focusFirstVisibleEmoji } from '../../DomUtils/keyboardNavigation';\nimport {\n buttonFromTarget,\n elementHeight,\n emojiTrueOffsetTop,\n emojiTruOffsetLeft\n} from '../../DomUtils/selectors';\nimport { darkMode, stylesheet } from '../../Stylesheet/stylesheet';\nimport {\n useEmojiStyleConfig,\n useGetEmojiUrlConfig\n} from '../../config/useConfig';\nimport {\n emojiHasVariations,\n emojiUnified,\n emojiVariations\n} from '../../dataUtils/emojiSelectors';\nimport {\n useAnchoredEmojiRef,\n useBodyRef,\n useSetAnchoredEmojiRef,\n useVariationPickerRef\n} from '../context/ElementRefContext';\nimport { useEmojiVariationPickerState } from '../context/PickerContext';\nimport { ClickableEmoji } from '../emoji/Emoji';\n\nimport SVGTriangle from './svg/triangle.svg';\n\nenum Direction {\n Up,\n Down\n}\n\n// eslint-disable-next-line complexity\nexport function EmojiVariationPicker() {\n const AnchoredEmojiRef = useAnchoredEmojiRef();\n const VariationPickerRef = useVariationPickerRef();\n const [emoji] = useEmojiVariationPickerState();\n const emojiStyle = useEmojiStyleConfig();\n\n const { getTop, getMenuDirection } = useVariationPickerTop(\n VariationPickerRef\n );\n const setAnchoredEmojiRef = useSetAnchoredEmojiRef();\n const getPointerStyle = usePointerStyle(VariationPickerRef);\n const getEmojiUrl = useGetEmojiUrlConfig();\n\n const button = buttonFromTarget(AnchoredEmojiRef.current);\n\n const visible = Boolean(\n emoji &&\n button &&\n emojiHasVariations(emoji) &&\n button.classList.contains(ClassNames.emojiHasVariations)\n );\n\n useEffect(() => {\n if (!visible) {\n return;\n }\n\n focusFirstVisibleEmoji(VariationPickerRef.current);\n }, [VariationPickerRef, visible, AnchoredEmojiRef]);\n\n let top, pointerStyle;\n\n if (!visible && AnchoredEmojiRef.current) {\n setAnchoredEmojiRef(null);\n } else {\n top = getTop();\n pointerStyle = getPointerStyle();\n }\n\n return (\n <div\n ref={VariationPickerRef}\n className={cx(\n styles.variationPicker,\n getMenuDirection() === Direction.Down && styles.pointingUp,\n visible && styles.visible\n )}\n style={{ top }}\n >\n {visible && emoji\n ? [emojiUnified(emoji)]\n .concat(emojiVariations(emoji))\n .slice(0, 6)\n .map(unified => (\n <ClickableEmoji\n key={unified}\n emoji={emoji}\n unified={unified}\n emojiStyle={emojiStyle}\n showVariations={false}\n getEmojiUrl={getEmojiUrl}\n />\n ))\n : null}\n <div className={cx(styles.pointer)} style={pointerStyle} />\n </div>\n );\n}\n\nfunction usePointerStyle(VariationPickerRef: React.RefObject<HTMLElement>) {\n const AnchoredEmojiRef = useAnchoredEmojiRef();\n return function getPointerStyle() {\n const style: React.CSSProperties = {};\n if (!VariationPickerRef.current) {\n return style;\n }\n\n if (AnchoredEmojiRef.current) {\n const button = buttonFromTarget(AnchoredEmojiRef.current);\n\n const offsetLeft = emojiTruOffsetLeft(button);\n\n if (!button) {\n return style;\n }\n\n // half of the button\n style.left = offsetLeft + button?.clientWidth / 2;\n }\n\n return style;\n };\n}\n\nfunction useVariationPickerTop(\n VariationPickerRef: React.RefObject<HTMLElement>\n) {\n const AnchoredEmojiRef = useAnchoredEmojiRef();\n const BodyRef = useBodyRef();\n let direction = Direction.Up;\n\n return {\n getMenuDirection,\n getTop\n };\n\n function getMenuDirection() {\n return direction;\n }\n\n function getTop() {\n direction = Direction.Up;\n let emojiOffsetTop = 0;\n\n if (!VariationPickerRef.current) {\n return 0;\n }\n\n const height = elementHeight(VariationPickerRef.current);\n\n if (AnchoredEmojiRef.current) {\n const bodyRef = BodyRef.current;\n const button = buttonFromTarget(AnchoredEmojiRef.current);\n\n const buttonHeight = elementHeight(button);\n\n emojiOffsetTop = emojiTrueOffsetTop(button);\n\n const scrollTop = bodyRef?.scrollTop ?? 0;\n\n if (scrollTop > emojiOffsetTop - height) {\n direction = Direction.Down;\n emojiOffsetTop += buttonHeight + height;\n }\n }\n\n return emojiOffsetTop - height;\n }\n}\n\nconst styles = stylesheet.create({\n variationPicker: {\n '.': ClassNames.variationPicker,\n position: 'absolute',\n right: '15px',\n left: '15px',\n padding: '5px',\n boxShadow: '0px 2px 5px rgba(0, 0, 0, 0.2)',\n borderRadius: '3px',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'space-around',\n opacity: '0',\n visibility: 'hidden',\n pointerEvents: 'none',\n top: '-100%',\n border: '1px solid var(--epr-picker-border-color)',\n height: 'var(--epr-emoji-variation-picker-height)',\n zIndex: 'var(--epr-skin-variation-picker-z-index)',\n background: 'var(--epr-emoji-variation-picker-bg-color)',\n transform: 'scale(0.9)',\n transition: 'transform 0.1s ease-out, opacity 0.2s ease-out'\n },\n visible: {\n opacity: '1',\n visibility: 'visible',\n pointerEvents: 'all',\n transform: 'scale(1)'\n },\n pointingUp: {\n '.': 'pointing-up',\n transformOrigin: 'center 0%',\n transform: 'scale(0.9)'\n },\n '.pointing-up': {\n pointer: {\n top: '0',\n transform: 'rotate(180deg) translateY(100%) translateX(18px)'\n }\n },\n pointer: {\n '.': 'epr-emoji-pointer',\n content: '',\n position: 'absolute',\n width: '25px',\n height: '15px',\n backgroundRepeat: 'no-repeat',\n backgroundPosition: '0 0',\n backgroundSize: '50px 15px',\n top: '100%',\n transform: 'translateX(-18px)',\n backgroundImage: `url(${SVGTriangle})`\n },\n ...darkMode('pointer', {\n backgroundPosition: '-25px 0'\n })\n});\n","import { cx } from 'flairup';\nimport * as React from 'react';\n\nimport { ClassNames } from '../../DomUtils/classNames';\nimport {\n commonInteractionStyles,\n stylesheet\n} from '../../Stylesheet/stylesheet';\nimport { MOUSE_EVENT_SOURCE } from '../../config/useConfig';\nimport { useOnMouseMove } from '../../hooks/useDisallowMouseMove';\nimport { useMouseDownHandlers } from '../../hooks/useMouseDownHandlers';\nimport { useOnScroll } from '../../hooks/useOnScroll';\nimport { useBodyRef } from '../context/ElementRefContext';\n\nimport { EmojiList } from './EmojiList';\nimport { EmojiVariationPicker } from './EmojiVariationPicker';\n\nexport function Body() {\n const BodyRef = useBodyRef();\n const scrollTop = useOnScroll(BodyRef);\n useMouseDownHandlers(BodyRef, MOUSE_EVENT_SOURCE.PICKER);\n useOnMouseMove();\n\n return (\n <div\n className={cx(styles.body, commonInteractionStyles.hiddenOnReactions)}\n ref={BodyRef}\n >\n <EmojiVariationPicker />\n <EmojiList scrollTop={scrollTop} />\n </div>\n );\n}\n\nconst styles = stylesheet.create({\n body: {\n '.': ClassNames.scrollBody,\n flex: '1',\n overflowY: 'scroll',\n overflowX: 'hidden',\n position: 'relative'\n }\n});\n","import { NullableElement } from './selectors';\n\nexport function detectEmojyPartiallyBelowFold(\n button: HTMLButtonElement,\n bodyRef: NullableElement\n): number {\n if (!button || !bodyRef) {\n return 0;\n }\n\n const buttonRect = button.getBoundingClientRect();\n const bodyRect = bodyRef.getBoundingClientRect();\n\n // If the element is obscured by at least half of its size\n return bodyRect.height - (buttonRect.y - bodyRect.y);\n}\n","import * as React from 'react';\nimport { useEffect } from 'react';\n\nimport { detectEmojyPartiallyBelowFold } from '../DomUtils/detectEmojyPartiallyBelowFold';\nimport { focusElement } from '../DomUtils/focusElement';\nimport {\n allUnifiedFromEmojiElement,\n buttonFromTarget\n} from '../DomUtils/selectors';\nimport { useBodyRef } from '../components/context/ElementRefContext';\nimport { PreviewEmoji } from '../components/footer/Preview';\n\nimport {\n useAllowMouseMove,\n useIsMouseDisallowed\n} from './useDisallowMouseMove';\n\nexport function useEmojiPreviewEvents(\n allow: boolean,\n setPreviewEmoji: React.Dispatch<React.SetStateAction<PreviewEmoji>>\n) {\n const BodyRef = useBodyRef();\n const isMouseDisallowed = useIsMouseDisallowed();\n const allowMouseMove = useAllowMouseMove();\n\n useEffect(() => {\n if (!allow) {\n return;\n }\n const bodyRef = BodyRef.current;\n\n bodyRef?.addEventListener('keydown', onEscape, {\n passive: true\n });\n\n bodyRef?.addEventListener('mouseover', onMouseOver, true);\n\n bodyRef?.addEventListener('focus', onEnter, true);\n\n bodyRef?.addEventListener('mouseout', onLeave, {\n passive: true\n });\n bodyRef?.addEventListener('blur', onLeave, true);\n\n function onEnter(e: FocusEvent) {\n const button = buttonFromTarget(e.target as HTMLElement);\n\n if (!button) {\n return onLeave();\n }\n\n const { unified, originalUnified } = allUnifiedFromEmojiElement(button);\n\n if (!unified || !originalUnified) {\n return onLeave();\n }\n\n setPreviewEmoji({\n unified,\n originalUnified\n });\n }\n function onLeave(e?: FocusEvent | MouseEvent) {\n if (e) {\n const relatedTarget = e.relatedTarget as HTMLElement;\n\n if (!buttonFromTarget(relatedTarget)) {\n return setPreviewEmoji(null);\n }\n }\n\n setPreviewEmoji(null);\n }\n function onEscape(e: KeyboardEvent) {\n if (e.key === 'Escape') {\n setPreviewEmoji(null);\n }\n }\n\n function onMouseOver(e: MouseEvent) {\n if (isMouseDisallowed()) {\n return;\n }\n\n const button = buttonFromTarget(e.target as HTMLElement);\n\n if (button) {\n const belowFoldByPx = detectEmojyPartiallyBelowFold(button, bodyRef);\n const buttonHeight = button.getBoundingClientRect().height;\n if (belowFoldByPx < buttonHeight) {\n return handlePartiallyVisibleElementFocus(button, setPreviewEmoji);\n }\n\n focusElement(button);\n }\n }\n\n return () => {\n bodyRef?.removeEventListener('mouseover', onMouseOver);\n bodyRef?.removeEventListener('mouseout', onLeave);\n bodyRef?.removeEventListener('focus', onEnter, true);\n bodyRef?.removeEventListener('blur', onLeave, true);\n bodyRef?.removeEventListener('keydown', onEscape);\n };\n }, [BodyRef, allow, setPreviewEmoji, isMouseDisallowed, allowMouseMove]);\n}\n\nfunction handlePartiallyVisibleElementFocus(\n button: HTMLElement,\n setPreviewEmoji: React.Dispatch<React.SetStateAction<PreviewEmoji>>\n) {\n const { unified, originalUnified } = allUnifiedFromEmojiElement(button);\n\n if (!unified || !originalUnified) {\n return;\n }\n\n (document.activeElement as HTMLElement)?.blur?.();\n\n setPreviewEmoji({\n unified,\n originalUnified\n });\n}\n","import { cx } from 'flairup';\nimport * as React from 'react';\n\nimport { stylesheet } from '../../Stylesheet/stylesheet';\n\nexport enum FlexDirection {\n ROW = 'FlexRow',\n COLUMN = 'FlexColumn'\n}\n\ntype Props = Readonly<{\n children: React.ReactNode;\n className?: string;\n style?: React.CSSProperties;\n direction?: FlexDirection;\n}>;\n\nexport default function Flex({\n children,\n className,\n style = {},\n direction = FlexDirection.ROW\n}: Props) {\n return (\n <div\n style={{ ...style }}\n className={cx(styles.flex, className, styles[direction])}\n >\n {children}\n </div>\n );\n}\n\nconst styles = stylesheet.create({\n flex: {\n display: 'flex'\n },\n [FlexDirection.ROW]: {\n flexDirection: 'row'\n },\n [FlexDirection.COLUMN]: {\n flexDirection: 'column'\n }\n});\n","import { cx } from 'flairup';\nimport * as React from 'react';\n\n\ntype Props = Readonly<{\n className?: string;\n style?: React.CSSProperties;\n}>;\n\nexport default function Space({ className, style = {} }: Props) {\n return <div style={{ flex: 1, ...style }} className={cx(className)} />;\n}\n","import * as React from 'react';\n\ntype Props = Readonly<{\n children: React.ReactNode;\n className?: string;\n style?: React.CSSProperties;\n}>;\n\nexport default function Absolute({ children, className, style }: Props) {\n return (\n <div style={{ ...style, position: 'absolute' }} className={className}>\n {children}\n </div>\n );\n}\n","import * as React from 'react';\n\ntype Props = Readonly<{\n children: React.ReactNode;\n className?: string;\n style?: React.CSSProperties;\n}>;\n\nexport default function Relative({ children, className, style }: Props) {\n return (\n <div style={{ ...style, position: 'relative' }} className={className}>\n {children}\n </div>\n );\n}\n","import { cx } from 'flairup';\nimport * as React from 'react';\n\nimport { stylesheet } from '../../../Stylesheet/stylesheet';\nimport { skinTonesNamed } from '../../../data/skinToneVariations';\nimport { SkinTones } from '../../../types/exposedTypes';\nimport { Button } from '../../atoms/Button';\n\ntype Props = {\n isOpen: boolean;\n onClick: () => void;\n isActive: boolean;\n skinToneVariation: SkinTones;\n style?: React.CSSProperties;\n};\n\n// eslint-disable-next-line complexity\nexport function BtnSkinToneVariation({\n isOpen,\n onClick,\n isActive,\n skinToneVariation,\n style\n}: Props) {\n return (\n <Button\n style={style}\n onClick={onClick}\n className={cx(\n `epr-tone-${skinToneVariation}`,\n styles.tone,\n !isOpen && styles.closedTone,\n isActive && styles.active\n )}\n aria-pressed={isActive}\n aria-label={`Skin tone ${skinTonesNamed[skinToneVariation as SkinTones]}`}\n ></Button>\n );\n}\n\nconst styles = stylesheet.create({\n closedTone: {\n opacity: '0',\n zIndex: '0'\n },\n active: {\n '.': 'epr-active',\n zIndex: '1',\n opacity: '1'\n },\n tone: {\n '.': 'epr-tone',\n width: 'var(--epr-skin-tone-size)',\n display: 'block',\n cursor: 'pointer',\n borderRadius: '4px',\n height: 'var(--epr-skin-tone-size)',\n position: 'absolute',\n right: '0',\n transition: 'transform 0.3s ease-in-out, opacity 0.35s ease-in-out',\n zIndex: '0',\n border: '1px solid var(--epr-skin-tone-outer-border-color)',\n boxShadow: 'inset 0px 0px 0 1px var(--epr-skin-tone-inner-border-color)',\n ':hover': {\n boxShadow: '0 0 0 3px var(--epr-active-skin-hover-color), inset 0px 0px 0 1px var(--epr-skin-tone-inner-border-color)'\n },\n ':focus': {\n boxShadow: '0 0 0 3px var(--epr-focus-bg-color)'\n },\n '&.epr-tone-neutral': {\n backgroundColor: '#ffd225'\n },\n '&.epr-tone-1f3fb': {\n backgroundColor: '#ffdfbd'\n },\n '&.epr-tone-1f3fc': {\n backgroundColor: '#e9c197'\n },\n '&.epr-tone-1f3fd': {\n backgroundColor: '#c88e62'\n },\n '&.epr-tone-1f3fe': {\n backgroundColor: '#a86637'\n },\n '&.epr-tone-1f3ff': {\n backgroundColor: '#60463a'\n }\n }\n});\n","/* eslint-disable complexity */\nimport { cx } from 'flairup';\nimport * as React from 'react';\n\nimport { ClassNames } from '../../../DomUtils/classNames';\nimport { stylesheet } from '../../../Stylesheet/stylesheet';\nimport {\n useOnSkinToneChangeConfig,\n useSkinTonesDisabledConfig\n} from '../../../config/useConfig';\nimport skinToneVariations from '../../../data/skinToneVariations';\nimport { useCloseAllOpenToggles } from '../../../hooks/useCloseAllOpenToggles';\nimport { useFocusSearchInput } from '../../../hooks/useFocus';\nimport Absolute from '../../Layout/Absolute';\nimport Relative from '../../Layout/Relative';\nimport { useSkinTonePickerRef } from '../../context/ElementRefContext';\nimport {\n useActiveSkinToneState,\n useSkinToneFanOpenState\n} from '../../context/PickerContext';\n\nimport { BtnSkinToneVariation } from './BtnSkinToneVariation';\n\nconst ITEM_SIZE = 28;\n\ntype Props = {\n direction?: SkinTonePickerDirection;\n};\n\nexport function SkinTonePickerMenu() {\n return (\n <Relative style={{ height: ITEM_SIZE }}>\n <Absolute style={{ bottom: 0, right: 0 }}>\n <SkinTonePicker direction={SkinTonePickerDirection.VERTICAL} />\n </Absolute>\n </Relative>\n );\n}\n\nexport function SkinTonePicker({\n direction = SkinTonePickerDirection.HORIZONTAL\n}: Props) {\n const SkinTonePickerRef = useSkinTonePickerRef();\n const isDisabled = useSkinTonesDisabledConfig();\n const [isOpen, setIsOpen] = useSkinToneFanOpenState();\n const [activeSkinTone, setActiveSkinTone] = useActiveSkinToneState();\n const onSkinToneChange = useOnSkinToneChangeConfig();\n const closeAllOpenToggles = useCloseAllOpenToggles();\n const focusSearchInput = useFocusSearchInput();\n\n if (isDisabled) {\n return null;\n }\n\n const fullWidth = `${ITEM_SIZE * skinToneVariations.length}px`;\n\n const expandedSize = isOpen ? fullWidth : ITEM_SIZE + 'px';\n\n const vertical = direction === SkinTonePickerDirection.VERTICAL;\n\n return (\n <Relative\n className={cx(\n styles.skinTones,\n vertical && styles.vertical,\n isOpen && styles.open,\n vertical && isOpen && styles.verticalShadow\n )}\n style={\n vertical\n ? { flexBasis: expandedSize, height: expandedSize }\n : { flexBasis: expandedSize }\n }\n >\n <div className={cx(styles.select)} ref={SkinTonePickerRef}>\n {skinToneVariations.map((skinToneVariation, i) => {\n const active = skinToneVariation === activeSkinTone;\n\n return (\n <BtnSkinToneVariation\n key={skinToneVariation}\n skinToneVariation={skinToneVariation}\n isOpen={isOpen}\n style={{\n transform: cx(\n vertical\n ? `translateY(-${i * (isOpen ? ITEM_SIZE : 0)}px)`\n : `translateX(-${i * (isOpen ? ITEM_SIZE : 0)}px)`,\n isOpen && active && 'scale(1.3)'\n )\n }}\n isActive={active}\n onClick={() => {\n if (isOpen) {\n setActiveSkinTone(skinToneVariation);\n onSkinToneChange(skinToneVariation);\n focusSearchInput();\n } else {\n setIsOpen(true);\n }\n closeAllOpenToggles();\n }}\n />\n );\n })}\n </div>\n </Relative>\n );\n}\n\nexport enum SkinTonePickerDirection {\n VERTICAL = ClassNames.vertical,\n HORIZONTAL = ClassNames.horizontal\n}\n\nconst styles = stylesheet.create({\n skinTones: {\n '.': 'epr-skin-tones',\n '--': {\n '--epr-skin-tone-size': '15px'\n },\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'flex-end',\n transition: 'all 0.3s ease-in-out',\n padding: '10px 0'\n },\n vertical: {\n padding: '9px',\n alignItems: 'flex-end',\n flexDirection: 'column',\n borderRadius: '6px',\n border: '1px solid var(--epr-bg-color)'\n },\n verticalShadow: {\n boxShadow: '0px 0 7px var(--epr-picker-border-color)'\n },\n open: {\n // @ts-ignore - backdropFilter is not recognized.\n backdropFilter: 'blur(5px)',\n background: 'var(--epr-skin-tone-picker-menu-color)',\n '.epr-active': {\n border: '1px solid var(--epr-active-skin-tone-indicator-border-color)'\n }\n },\n select: {\n '.': 'epr-skin-tone-select',\n position: 'relative',\n width: 'var(--epr-skin-tone-size)',\n height: 'var(--epr-skin-tone-size)'\n }\n});\n","import { cx } from 'flairup';\nimport * as React from 'react';\nimport { useState } from 'react';\n\nimport {\n commonInteractionStyles,\n stylesheet\n} from '../../Stylesheet/stylesheet';\nimport {\n useEmojiStyleConfig,\n useGetEmojiUrlConfig,\n usePreviewConfig\n} from '../../config/useConfig';\nimport {\n emojiByUnified,\n emojiName,\n emojiUnified\n} from '../../dataUtils/emojiSelectors';\nimport { useEmojiPreviewEvents } from '../../hooks/useEmojiPreviewEvents';\nimport { useIsSkinToneInPreview } from '../../hooks/useShouldShowSkinTonePicker';\nimport Flex from '../Layout/Flex';\nimport Space from '../Layout/Space';\nimport {\n useEmojiVariationPickerState,\n useReactionsModeState\n} from '../context/PickerContext';\nimport { ViewOnlyEmoji } from '../emoji/ViewOnlyEmoji';\nimport { SkinTonePickerMenu } from '../header/SkinTonePicker/SkinTonePicker';\n\nexport function Preview() {\n const previewConfig = usePreviewConfig();\n const isSkinToneInPreview = useIsSkinToneInPreview();\n const [reactionsOpen] = useReactionsModeState();\n\n if (!previewConfig.showPreview) {\n return null;\n }\n\n return (\n <Flex\n className={cx(\n styles.preview,\n commonInteractionStyles.hiddenOnReactions,\n reactionsOpen && styles.hideOnReactions\n )}\n >\n <PreviewBody />\n <Space />\n {isSkinToneInPreview ? <SkinTonePickerMenu /> : null}\n </Flex>\n );\n}\n\nexport function PreviewBody() {\n const previewConfig = usePreviewConfig();\n const [previewEmoji, setPreviewEmoji] = useState<PreviewEmoji>(null);\n const emojiStyle = useEmojiStyleConfig();\n const [variationPickerEmoji] = useEmojiVariationPickerState();\n const getEmojiUrl = useGetEmojiUrlConfig();\n\n useEmojiPreviewEvents(previewConfig.showPreview, setPreviewEmoji);\n\n const emoji = emojiByUnified(\n previewEmoji?.unified ?? previewEmoji?.originalUnified\n );\n\n const show = emoji != null && previewEmoji != null;\n\n return <PreviewContent />;\n\n function PreviewContent() {\n const defaultEmoji =\n variationPickerEmoji ?? emojiByUnified(previewConfig.defaultEmoji);\n if (!defaultEmoji) {\n return null;\n }\n const defaultText = variationPickerEmoji\n ? emojiName(variationPickerEmoji)\n : previewConfig.defaultCaption;\n\n return (\n <>\n <div>\n {show ? (\n <ViewOnlyEmoji\n unified={previewEmoji?.unified as string}\n emoji={emoji}\n emojiStyle={emojiStyle}\n size={45}\n getEmojiUrl={getEmojiUrl}\n className={cx(styles.emoji)}\n />\n ) : defaultEmoji ? (\n <ViewOnlyEmoji\n unified={emojiUnified(defaultEmoji)}\n emoji={defaultEmoji}\n emojiStyle={emojiStyle}\n size={45}\n getEmojiUrl={getEmojiUrl}\n className={cx(styles.emoji)}\n />\n ) : null}\n </div>\n <div className={cx(styles.label)}>\n {show ? emojiName(emoji) : defaultText}\n </div>\n </>\n );\n }\n}\n\nexport type PreviewEmoji = null | {\n unified: string;\n originalUnified: string;\n};\n\nconst styles = stylesheet.create({\n preview: {\n alignItems: 'center',\n borderTop: '1px solid var(--epr-preview-border-color)',\n height: 'var(--epr-preview-height)',\n padding: '0 var(--epr-horizontal-padding)',\n position: 'relative',\n zIndex: 'var(--epr-preview-z-index)'\n },\n label: {\n color: 'var(--epr-preview-text-color)',\n fontSize: 'var(--epr-preview-text-size)',\n padding: 'var(--epr-preview-text-padding)',\n textTransform: 'capitalize'\n },\n emoji: {\n padding: '0'\n },\n hideOnReactions: {\n opacity: '0',\n transition: 'opacity 0.5s ease-in-out'\n }\n});\n","export function categoryNameFromDom($category: Element | null): string | null {\n return $category?.getAttribute('data-name') ?? null;\n}\n","import { useEffect } from 'react';\n\nimport { categoryNameFromDom } from '../DomUtils/categoryNameFromDom';\nimport { asSelectors, ClassNames } from '../DomUtils/classNames';\nimport { useBodyRef } from '../components/context/ElementRefContext';\n\nexport function useActiveCategoryScrollDetection({\n setActiveCategory,\n setVisibleCategories\n}: {\n setActiveCategory: (category: string) => void;\n setVisibleCategories: (categories: string[]) => void;\n}) {\n const BodyRef = useBodyRef();\n\n useEffect(() => {\n const visibleCategories = new Map<string, number>();\n const intersectingCategories = new Map<string, boolean>();\n const bodyRef = BodyRef.current;\n const observer = new IntersectionObserver(\n entries => {\n if (!bodyRef) {\n return;\n }\n\n for (const entry of entries) {\n const id = categoryNameFromDom(entry.target);\n\n if (!id) {\n continue;\n }\n\n visibleCategories.set(id, entry.intersectionRatio);\n intersectingCategories.set(id, entry.isIntersecting);\n }\n\n const ratios = Array.from(visibleCategories);\n const visibleCats = ratios\n .filter(([id, ratio]) => ratio > 0 || intersectingCategories.get(id))\n .map(([id]) => id);\n\n setVisibleCategories(visibleCats);\n const lastCategory = ratios[ratios.length - 1];\n\n if (lastCategory?.[1] == 1) {\n return setActiveCategory(lastCategory[0]);\n }\n\n for (const [id, ratio] of ratios) {\n if (ratio) {\n setActiveCategory(id);\n break;\n }\n }\n },\n {\n root: bodyRef,\n threshold: [0, 1]\n }\n );\n bodyRef?.querySelectorAll(asSelectors(ClassNames.category)).forEach(el => {\n observer.observe(el);\n });\n\n return () => {\n observer.disconnect();\n };\n }, [BodyRef, setActiveCategory, setVisibleCategories]);\n}\n","import { scrollTo } from '../DomUtils/scrollTo';\nimport { NullableElement } from '../DomUtils/selectors';\nimport {\n useBodyRef,\n usePickerMainRef\n} from '../components/context/ElementRefContext';\n\nexport function useScrollCategoryIntoView() {\n const BodyRef = useBodyRef();\n const PickerMainRef = usePickerMainRef();\n\n return function scrollCategoryIntoView(category: string): void {\n if (!BodyRef.current) {\n return;\n }\n const $category = BodyRef.current?.querySelector(\n `[data-name=\"${category}\"]`\n ) as NullableElement;\n\n if (!$category) {\n return;\n }\n\n const offsetTop = $category.offsetTop || 0;\n\n scrollTo(PickerMainRef.current, offsetTop);\n };\n}\n","import { useCustomEmojisConfig } from '../config/useConfig';\n\nexport function useShouldHideCustomEmojis() {\n const customCategoryConfig = useCustomEmojisConfig();\n\n if (!customCategoryConfig) {\n return false;\n }\n\n return customCategoryConfig.length === 0;\n}\n","import { cx } from 'flairup';\nimport * as React from 'react';\n\nimport { ClassNames } from '../../DomUtils/classNames';\nimport {\n commonInteractionStyles,\n darkMode,\n stylesheet\n} from '../../Stylesheet/stylesheet';\nimport {\n CategoryConfig,\n categoryNameFromCategoryConfig\n} from '../../config/categoryConfig';\nimport { Button } from '../atoms/Button';\n\nimport SVGNavigation from './svg/CategoryNav.svg';\n\ntype Props = {\n isActiveCategory: boolean;\n category: string;\n allowNavigation: boolean;\n onClick: () => void;\n categoryConfig: CategoryConfig;\n};\n\nexport function CategoryButton({\n isActiveCategory,\n category,\n allowNavigation,\n categoryConfig,\n onClick\n}: Props) {\n return (\n <Button\n tabIndex={allowNavigation ? 0 : -1}\n className={cx(\n styles.catBtn,\n commonInteractionStyles.categoryBtn,\n `epr-icn-${category}`,\n {\n [ClassNames.active]: isActiveCategory\n }\n )}\n onClick={onClick}\n aria-label={categoryNameFromCategoryConfig(categoryConfig)}\n aria-selected={isActiveCategory}\n role=\"tab\"\n aria-controls=\"epr-category-nav-id\"\n />\n );\n}\n\nconst DarkActivePositionY = {\n backgroundPositionY: 'calc(var(--epr-category-navigation-button-size) * 3)'\n};\nconst DarkPositionY = {\n backgroundPositionY: 'calc(var(--epr-category-navigation-button-size) * 2)'\n};\n\nconst DarkInactivePosition = {\n ':not(.epr-search-active)': {\n catBtn: {\n ':hover': DarkActivePositionY,\n '&.epr-active': DarkActivePositionY\n }\n }\n};\n\nconst styles = stylesheet.create({\n catBtn: {\n '.': 'epr-cat-btn',\n display: 'inline-block',\n transition: 'opacity 0.2s ease-in-out',\n position: 'relative',\n height: 'var(--epr-category-navigation-button-size)',\n width: 'var(--epr-category-navigation-button-size)',\n backgroundSize: 'calc(var(--epr-category-navigation-button-size) * 10)',\n outline: 'none',\n backgroundPosition: '0 0',\n backgroundImage: `url(${SVGNavigation})`,\n ':focus:before': {\n content: '',\n position: 'absolute',\n top: '-2px',\n left: '-2px',\n right: '-2px',\n bottom: '-2px',\n border: '2px solid var(--epr-category-icon-active-color)',\n borderRadius: '50%'\n },\n '&.epr-icn-suggested': {\n backgroundPositionX:\n 'calc(var(--epr-category-navigation-button-size) * -8)'\n },\n '&.epr-icn-custom': {\n backgroundPositionX:\n 'calc(var(--epr-category-navigation-button-size) * -9)'\n },\n '&.epr-icn-activities': {\n backgroundPositionX:\n 'calc(var(--epr-category-navigation-button-size) * -4)'\n },\n '&.epr-icn-animals_nature': {\n backgroundPositionX:\n 'calc(var(--epr-category-navigation-button-size) * -1)'\n },\n '&.epr-icn-flags': {\n backgroundPositionX:\n 'calc(var(--epr-category-navigation-button-size) * -7)'\n },\n '&.epr-icn-food_drink': {\n backgroundPositionX:\n 'calc(var(--epr-category-navigation-button-size) * -2)'\n },\n '&.epr-icn-objects': {\n backgroundPositionX:\n 'calc(var(--epr-category-navigation-button-size) * -5)'\n },\n '&.epr-icn-smileys_people': {\n backgroundPositionX: '0px'\n },\n '&.epr-icn-symbols': {\n backgroundPositionX:\n 'calc(var(--epr-category-navigation-button-size) * -6)'\n },\n '&.epr-icn-travel_places': {\n backgroundPositionX:\n 'calc(var(--epr-category-navigation-button-size) * -3)'\n }\n },\n ...darkMode('catBtn', DarkPositionY),\n '.epr-dark-theme': {\n ...DarkInactivePosition\n },\n '.epr-auto-theme': {\n ...DarkInactivePosition\n }\n});\n","import { cx } from 'flairup';\nimport * as React from 'react';\nimport { useState } from 'react';\n\nimport { stylesheet } from '../../Stylesheet/stylesheet';\nimport { categoryFromCategoryConfig } from '../../config/categoryConfig';\nimport { useCategoriesConfig } from '../../config/useConfig';\nimport { useActiveCategoryScrollDetection } from '../../hooks/useActiveCategoryScrollDetection';\nimport useIsSearchMode from '../../hooks/useIsSearchMode';\nimport { useScrollCategoryIntoView } from '../../hooks/useScrollCategoryIntoView';\nimport { useShouldHideCustomEmojis } from '../../hooks/useShouldHideCustomEmojis';\nimport { isCustomCategory } from '../../typeRefinements/typeRefinements';\nimport { useCategoryNavigationRef } from '../context/ElementRefContext';\nimport { useVisibleCategoriesState } from '../context/PickerContext';\n\nimport { CategoryButton } from './CategoryButton';\n\nexport function CategoryNavigation() {\n const [activeCategory, setActiveCategory] = useState<string | null>(null);\n const [, setVisibleCategories] = useVisibleCategoriesState();\n const scrollCategoryIntoView = useScrollCategoryIntoView();\n useActiveCategoryScrollDetection({ setActiveCategory, setVisibleCategories });\n const isSearchMode = useIsSearchMode();\n\n const categoriesConfig = useCategoriesConfig();\n const CategoryNavigationRef = useCategoryNavigationRef();\n const hideCustomCategory = useShouldHideCustomEmojis();\n\n return (\n <div\n className={cx(styles.nav)}\n role=\"tablist\"\n aria-label=\"Category navigation\"\n id=\"epr-category-nav-id\"\n ref={CategoryNavigationRef}\n >\n {categoriesConfig.map(categoryConfig => {\n const category = categoryFromCategoryConfig(categoryConfig);\n const isActiveCategory = category === activeCategory;\n\n if (isCustomCategory(categoryConfig) && hideCustomCategory) {\n return null;\n }\n\n const allowNavigation = !isSearchMode && !isActiveCategory;\n\n return (\n <CategoryButton\n key={category}\n category={category}\n isActiveCategory={isActiveCategory}\n allowNavigation={allowNavigation}\n categoryConfig={categoryConfig}\n onClick={() => {\n scrollCategoryIntoView(category);\n setTimeout(() => {\n setActiveCategory(category);\n }, 10);\n }}\n />\n );\n })}\n </div>\n );\n}\n\nconst styles = stylesheet.create({\n nav: {\n '.': 'epr-category-nav',\n display: 'flex',\n flexDirection: 'row',\n justifyContent: 'space-around',\n padding: 'var(--epr-header-padding)'\n },\n '.epr-search-active': {\n nav: {\n opacity: '0.3',\n cursor: 'default',\n pointerEvents: 'none'\n }\n },\n '.epr-main:has(input:not(:placeholder-shown))': {\n nav: {\n opacity: '0.3',\n cursor: 'default',\n pointerEvents: 'none'\n }\n }\n});\n","import { cx } from 'flairup';\nimport * as React from 'react';\n\nimport {\n commonInteractionStyles,\n darkMode,\n stylesheet\n} from '../../../Stylesheet/stylesheet';\nimport { useSearchClearButtonLabelConfig } from '../../../config/useConfig';\nimport { useClearSearch } from '../../../hooks/useFilter';\nimport { Button } from '../../atoms/Button';\n\nimport SVGTimes from './svg/times.svg';\n\nexport function BtnClearSearch() {\n const clearSearch = useClearSearch();\n const searchClearButtonLabel = useSearchClearButtonLabelConfig();\n\n return (\n <Button\n className={cx(\n styles.btnClearSearch,\n commonInteractionStyles.visibleOnSearchOnly\n )}\n onClick={clearSearch}\n aria-label={searchClearButtonLabel}\n title={searchClearButtonLabel}\n >\n <div className={cx(styles.icnClearnSearch)} />\n </Button>\n );\n}\n\nconst HoverDark = {\n ':hover': {\n '> .epr-icn-clear-search': {\n backgroundPositionY: '-60px'\n }\n }\n};\n\nconst styles = stylesheet.create({\n btnClearSearch: {\n '.': 'epr-btn-clear-search',\n position: 'absolute',\n right: 'var(--epr-search-bar-inner-padding)',\n height: '30px',\n width: '30px',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n top: '50%',\n transform: 'translateY(-50%)',\n padding: '0',\n borderRadius: '50%',\n ':hover': {\n background: 'var(--epr-hover-bg-color)'\n },\n ':focus': {\n background: 'var(--epr-hover-bg-color)'\n }\n },\n icnClearnSearch: {\n '.': 'epr-icn-clear-search',\n backgroundColor: 'transparent',\n backgroundRepeat: 'no-repeat',\n backgroundSize: '20px',\n height: '20px',\n width: '20px',\n backgroundImage: `url(${SVGTimes})`,\n ':hover': {\n backgroundPositionY: '-20px'\n },\n ':focus': {\n backgroundPositionY: '-20px'\n }\n },\n ...darkMode('icnClearnSearch', {\n backgroundPositionY: '-40px'\n }),\n ...darkMode('btnClearSearch', HoverDark)\n});\n","import { cx } from 'flairup';\nimport * as React from 'react';\n\nimport { darkMode, stylesheet } from '../../../Stylesheet/stylesheet';\n\nimport SVGMagnifier from './svg/magnifier.svg';\n\nexport function IcnSearch() {\n return <div className={cx(styles.icnSearch)} />;\n}\n\nconst styles = stylesheet.create({\n icnSearch: {\n '.': 'epr-icn-search',\n content: '',\n position: 'absolute',\n top: '50%',\n left: 'var(--epr-search-bar-inner-padding)',\n transform: 'translateY(-50%)',\n width: '20px',\n height: '20px',\n backgroundRepeat: 'no-repeat',\n backgroundPosition: '0 0',\n backgroundSize: '20px',\n backgroundImage: `url(${SVGMagnifier})`\n },\n ...darkMode('icnSearch', {\n backgroundPositionY: '-20px'\n })\n});\n","import { cx } from 'flairup';\nimport * as React from 'react';\n\nimport { darkMode, stylesheet } from '../../../Stylesheet/stylesheet';\nimport {\n useAutoFocusSearchConfig,\n useSearchDisabledConfig,\n useSearchPlaceHolderConfig\n} from '../../../config/useConfig';\nimport { useCloseAllOpenToggles } from '../../../hooks/useCloseAllOpenToggles';\nimport { useFilter } from '../../../hooks/useFilter';\nimport { useIsSkinToneInSearch } from '../../../hooks/useShouldShowSkinTonePicker';\nimport Flex from '../../Layout/Flex';\nimport Relative from '../../Layout/Relative';\nimport { useSearchInputRef } from '../../context/ElementRefContext';\nimport { SkinTonePicker } from '../SkinTonePicker/SkinTonePicker';\n\nimport { BtnClearSearch } from './BtnClearSearch';\nimport { IcnSearch } from './IcnSearch';\nimport SVGTimes from './svg/times.svg';\n\nexport function SearchContainer() {\n const searchDisabled = useSearchDisabledConfig();\n\n const isSkinToneInSearch = useIsSkinToneInSearch();\n\n if (searchDisabled) {\n return null;\n }\n\n return (\n <Flex className={cx(styles.overlay)}>\n <Search />\n\n {isSkinToneInSearch ? <SkinTonePicker /> : null}\n </Flex>\n );\n}\n\nexport function Search() {\n const closeAllOpenToggles = useCloseAllOpenToggles();\n const SearchInputRef = useSearchInputRef();\n const placeholder = useSearchPlaceHolderConfig();\n const autoFocus = useAutoFocusSearchConfig();\n const { statusSearchResults, searchTerm, onChange } = useFilter();\n\n const input = SearchInputRef?.current;\n const value = input?.value;\n\n return (\n <Relative className={cx(styles.searchContainer)}>\n <input\n // eslint-disable-next-line jsx-a11y/no-autofocus\n autoFocus={autoFocus}\n aria-label={'Type to search for an emoji'}\n onFocus={closeAllOpenToggles}\n className={cx(styles.search)}\n type=\"text\"\n aria-controls=\"epr-search-id\"\n placeholder={placeholder}\n onChange={event => {\n onChange(event?.target?.value ?? value);\n }}\n ref={SearchInputRef}\n />\n {searchTerm ? (\n <div\n role=\"status\"\n className={cx('epr-status-search-results', styles.visuallyHidden)}\n aria-live=\"polite\"\n id=\"epr-search-id\"\n aria-atomic=\"true\"\n >\n {statusSearchResults}\n </div>\n ) : null}\n <IcnSearch />\n <BtnClearSearch />\n </Relative>\n );\n}\n\nconst styles = stylesheet.create({\n overlay: {\n padding: 'var(--epr-header-padding)',\n zIndex: 'var(--epr-header-overlay-z-index)'\n },\n searchContainer: {\n '.': 'epr-search-container',\n flex: '1',\n display: 'block',\n minWidth: '0'\n },\n visuallyHidden: {\n clip: 'rect(0 0 0 0)',\n clipPath: 'inset(50%)',\n height: '1px',\n overflow: 'hidden',\n position: 'absolute',\n whiteSpace: 'nowrap',\n width: '1px'\n },\n search: {\n outline: 'none',\n transition: 'all 0.2s ease-in-out',\n color: 'var(--epr-search-input-text-color)',\n borderRadius: 'var(--epr-search-input-border-radius)',\n padding: 'var(--epr-search-input-padding)',\n height: 'var(--epr-search-input-height)',\n backgroundColor: 'var(--epr-search-input-bg-color)',\n border: '1px solid var(--epr-search-border-color)',\n width: '100%',\n ':focus': {\n backgroundColor: 'var(--epr-search-input-bg-color-active)',\n border: '1px solid var(--epr-search-border-color-active)'\n },\n '::placeholder': {\n color: 'var(--epr-search-input-placeholder-color)'\n }\n },\n\n btnClearSearch: {\n '.': 'epr-btn-clear-search',\n position: 'absolute',\n right: 'var(--epr-search-bar-inner-padding)',\n height: '30px',\n width: '30px',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n top: '50%',\n transform: 'translateY(-50%)',\n padding: '0',\n borderRadius: '50%',\n ':hover': {\n background: 'var(--epr-hover-bg-color)'\n },\n ':focus': {\n background: 'var(--epr-hover-bg-color)'\n }\n },\n icnClearnSearch: {\n '.': 'epr-icn-clear-search',\n backgroundColor: 'transparent',\n backgroundRepeat: 'no-repeat',\n backgroundSize: '20px',\n height: '20px',\n width: '20px',\n backgroundImage: `url(${SVGTimes})`,\n ':hover': {\n backgroundPositionY: '-20px'\n },\n ':focus': {\n backgroundPositionY: '-20px'\n }\n },\n ...darkMode('icnClearnSearch', {\n backgroundPositionY: '-40px'\n }),\n ...darkMode('btnClearSearch', {\n ':hover > .epr-icn-clear-search': {\n backgroundPositionY: '-60px'\n }\n })\n});\n","import { cx } from 'flairup';\nimport * as React from 'react';\n\nimport { commonInteractionStyles } from '../../Stylesheet/stylesheet';\nimport Relative from '../Layout/Relative';\nimport { CategoryNavigation } from '../navigation/CategoryNavigation';\n\nimport { SearchContainer } from './Search/Search';\n\nexport function Header() {\n return (\n <Relative\n className={cx('epr-header', commonInteractionStyles.hiddenOnReactions)}\n >\n <SearchContainer />\n <CategoryNavigation />\n </Relative>\n );\n}\n","import * as React from 'react';\n\nimport { PickerStyleTag } from './Stylesheet/stylesheet';\nimport { Reactions } from './components/Reactions/Reactions';\nimport { Body } from './components/body/Body';\nimport { ElementRefContextProvider } from './components/context/ElementRefContext';\nimport { PickerConfigProvider } from './components/context/PickerConfigContext';\nimport { useReactionsModeState } from './components/context/PickerContext';\nimport { Preview } from './components/footer/Preview';\nimport { Header } from './components/header/Header';\nimport PickerMain from './components/main/PickerMain';\nimport { compareConfig } from './config/compareConfig';\nimport { useAllowExpandReactions, useOpenConfig } from './config/useConfig';\n\nimport { PickerProps } from './index';\n\nfunction EmojiPicker(props: PickerProps) {\n return (\n <ElementRefContextProvider>\n <PickerStyleTag />\n <PickerConfigProvider {...props}>\n <ContentControl />\n </PickerConfigProvider>\n </ElementRefContextProvider>\n );\n}\n\nfunction ContentControl() {\n const [reactionsDefaultOpen] = useReactionsModeState();\n const allowExpandReactions = useAllowExpandReactions();\n\n const [renderAll, setRenderAll] = React.useState(!reactionsDefaultOpen);\n const isOpen = useOpenConfig();\n\n React.useEffect(() => {\n if (reactionsDefaultOpen && !allowExpandReactions) {\n return;\n }\n\n if (!renderAll) {\n setRenderAll(true);\n }\n }, [renderAll, allowExpandReactions, reactionsDefaultOpen]);\n\n if (!isOpen) {\n return null;\n }\n\n return (\n <PickerMain>\n <Reactions />\n <ExpandedPickerContent renderAll={renderAll} />\n </PickerMain>\n );\n}\n\nfunction ExpandedPickerContent({ renderAll }: { renderAll: boolean }) {\n if (!renderAll) {\n return null;\n }\n\n return (\n <>\n <Header />\n <Body />\n <Preview />\n </>\n );\n}\n\n// eslint-disable-next-line complexity\nexport default React.memo(EmojiPicker, compareConfig);\n","import * as React from 'react';\n\nexport default class ErrorBoundary extends React.Component<\n { children: React.ReactNode },\n { hasError: boolean }\n> {\n constructor(props: { children: React.ReactNode }) {\n super(props);\n this.state = { hasError: false };\n }\n\n static getDerivedStateFromError() {\n return { hasError: true };\n }\n\n componentDidCatch(error: Error, errorInfo: any) {\n // eslint-disable-next-line no-console\n console.error('Emoji Picker React failed to render:', error, errorInfo);\n }\n\n render() {\n if (this.state.hasError) {\n return null;\n }\n\n return this.props.children;\n }\n}\n","import * as React from 'react';\n\nimport { EmojiStyle } from '../../types/exposedTypes';\n\nimport { GetEmojiUrl } from './BaseEmojiProps';\nimport { ViewOnlyEmoji } from './ViewOnlyEmoji';\n\nexport function ExportedEmoji({\n unified,\n size = 32,\n emojiStyle = EmojiStyle.APPLE,\n lazyLoad = false,\n getEmojiUrl,\n emojiUrl\n}: {\n unified: string;\n emojiStyle?: EmojiStyle;\n size?: number;\n lazyLoad?: boolean;\n getEmojiUrl?: GetEmojiUrl;\n emojiUrl?: string;\n}) {\n if (!unified && !emojiUrl && !getEmojiUrl) {\n return null;\n }\n\n return (\n <ViewOnlyEmoji\n unified={unified}\n size={size}\n emojiStyle={emojiStyle}\n lazyLoad={lazyLoad}\n getEmojiUrl={emojiUrl ? () => emojiUrl : getEmojiUrl}\n />\n );\n}\n","import * as React from 'react';\n\nimport EmojiPickerReact from './EmojiPickerReact';\nimport ErrorBoundary from './components/ErrorBoundary';\nimport { PickerConfig } from './config/config';\nimport {\n MutableConfigContext,\n useDefineMutableConfig\n} from './config/mutableConfig';\n\nexport { ExportedEmoji as Emoji } from './components/emoji/ExportedEmoji';\n\nexport {\n EmojiStyle,\n SkinTones,\n Theme,\n Categories,\n EmojiClickData,\n SuggestionMode,\n SkinTonePickerLocation\n} from './types/exposedTypes';\n\nexport { emojiByUnified } from './dataUtils/emojiSelectors';\n\nexport interface PickerProps extends PickerConfig {}\n\nexport default function EmojiPicker(props: PickerProps) {\n const MutableConfigRef = useDefineMutableConfig({\n onEmojiClick: props.onEmojiClick,\n onReactionClick: props.onReactionClick,\n onSkinToneChange: props.onSkinToneChange,\n });\n\n return (\n <ErrorBoundary>\n <MutableConfigContext.Provider value={MutableConfigRef}>\n <EmojiPickerReact {...props} />\n </MutableConfigContext.Provider>\n </ErrorBoundary>\n );\n}\n"],"names":["ClassNames","asSelectors","classNames","Array","_len","_key","arguments","map","c","join","stylesheet","createSheet","hidden","display","opacity","pointerEvents","visibility","overflow","commonStyles","create","_extends","PickerStyleTag","React","suppressHydrationWarning","dangerouslySetInnerHTML","__html","getStyle","commonInteractionStyles","categoryBtn","backgroundPositionY","hiddenOnSearch","visibleOnSearchOnly","hiddenOnReactions","transition","height","width","darkMode","key","value","_eprDarkTheme","_eprAutoTheme","compareConfig","prev","next","prevCustomEmojis","_prev$customEmojis","customEmojis","nextCustomEmojis","_next$customEmojis","open","emojiVersion","reactionsDefaultOpen","searchPlaceHolder","searchPlaceholder","searchClearButtonLabel","defaultSkinTone","skinTonesDisabled","autoFocusSearch","emojiStyle","theme","suggestedEmojisMode","lazyLoadEmojis","className","style","searchDisabled","skinTonePickerLocation","length","DEFAULT_REACTIONS","alphaNumericEmojiIndex","setTimeout","allEmojis","reduce","searchIndex","emoji","indexEmoji","joinedNameString","emojiNames","flat","toLowerCase","replace","split","forEach","char","_alphaNumericEmojiInd","emojiUnified","useDebouncedState","initialValue","delay","_useState","useState","state","setState","timer","useRef","debouncedSetState","Promise","resolve","current","clearTimeout","_window","window","useIsUnicodeHidden","unicodeToHide","useUnicodeToHide","has","useDisallowedEmojis","DisallowedEmojisRef","emojiVersionConfig","useEmojiVersionConfig","useMemo","parseFloat","Number","isNaN","disallowedEmojis","addedInNewerVersion","useIsEmojiDisallowed","isUnicodeHidden","isEmojiDisallowed","unified","unifiedWithoutSkinTone","Boolean","supportedLevel","addedIn","useMarkInitialLoad","dispatch","useEffect","SuggestionMode","EmojiStyle","Theme","SkinTones","Categories","SkinTonePickerLocation","PickerContextProvider","_ref","children","useDefaultSkinToneConfig","useReactionsOpenConfig","filterRef","disallowClickRef","disallowMouseRef","disallowedEmojisRef","suggestedUpdateState","Date","now","searchTerm","skinToneFanOpenState","activeSkinTone","activeCategoryState","emojisThatFailedToLoadState","Set","emojiVariationPickerState","reactionsModeState","isPastInitialLoad","setIsPastInitialLoad","visibleCategoriesState","emojiSizeState","PickerContext","Provider","NEUTRAL","undefined","useFilterRef","_React$useContext","useDisallowClickRef","_React$useContext2","useDisallowMouseRef","_React$useContext3","useReactionsModeState","_React$useContext4","useSearchTermState","_React$useContext5","useActiveSkinToneState","_React$useContext6","useEmojisThatFailedToLoadState","_React$useContext7","useEmojiVariationPickerState","_React$useContext9","useSkinToneFanOpenState","_React$useContext10","useVisibleCategoriesState","_React$useContext12","useEmojiSizeState","_React$useContext13","useUpdateSuggested","_React$useContext14","suggestedUpdated","setsuggestedUpdate","updateSuggested","categoriesOrdered","SUGGESTED","CUSTOM","SMILEYS_PEOPLE","ANIMALS_NATURE","FOOD_DRINK","TRAVEL_PLACES","ACTIVITIES","OBJECTS","SYMBOLS","FLAGS","SuggestedRecent","name","category","configByCategory","_configByCategory","baseCategoriesConfig","modifiers","categoryFromCategoryConfig","categoryNameFromCategoryConfig","mergeCategoriesConfig","userCategoriesConfig","extra","suggestionMode","RECENT","base","_userCategoriesConfig","getBaseConfigByCategory","modifier","Object","assign","CDN_URL_APPLE","CDN_URL_FACEBOOK","CDN_URL_TWITTER","CDN_URL_GOOGLE","cdnUrl","TWITTER","GOOGLE","FACEBOOK","APPLE","skinToneVariations","LIGHT","MEDIUM_LIGHT","MEDIUM","MEDIUM_DARK","DARK","skinTonesNamed","entries","acc","skinTonesMapped","mapped","skinTone","_Object$assign","EmojiProperties","SUGGESTED_LS_KEY","getSuggested","mode","_window$localStorage$","_window2","localStorage","recent","JSON","parse","getItem","FREQUENT","sort","a","b","count","_unused","setSuggested","originalUnified","existing","find","u","nextList","concat","filter","i","original","Math","min","_window3","setItem","stringify","_unused2","_emoji$EmojiPropertie","added_in","emojiName","splat","_splat$splice","splice","emojiHasVariations","_emojiVariationUnifie","emojiVariationUnified","useGetEmojisByCategory","suggestedEmojisModeConfig","useSuggestedEmojisModeConfig","_useUpdateSuggested","suggested","_getSuggested","s","emojiByUnified","getEmojisByCategory","_emojis$category","emojis","emojiUrlByUnified","emojiVariations","_emoji$EmojiPropertie2","variations","variation","includes","allEmojisByUnified","withoutSkinTone","values","setCustomEmojis","emojiData","customToRegularEmoji","push","names","id","imgUrl","Emoji","activeVariationFromUnified","_unified$split","suspectedSkinTone","KNOWN_FAILING_EMOJIS","DEFAULT_SEARCH_PLACEHOLDER","DEFAULT_SEARCH_CLEAR_BUTTON_LABEL","SEARCH_RESULTS_NO_RESULTS_FOUND","SEARCH_RESULTS_SUFFIX","SEARCH_RESULTS_ONE_RESULT_FOUND","SEARCH_RESULTS_MULTIPLE_RESULTS_FOUND","mergeConfig","userConfig","basePickerConfig","previewConfig","_userConfig$previewCo","config","categories","hiddenEmojis","add","_config$customEmojis","PREVIEW","getEmojiUrl","basePreviewConfig","SEARCH","reactions","allowExpandReactions","defaultEmoji","defaultCaption","showPreview","ConfigContext","PickerConfigProvider","_objectWithoutPropertiesLoose","_excluded","mergedConfig","useSetConfig","_React$useState","setMergedConfig","usePickerConfig","MutableConfigContext","createContext","useMutableConfig","mutableConfig","useContext","useDefineMutableConfig","MutableConfigRef","onEmojiClick","emptyFunc","onReactionClick","onSkinToneChange","MOUSE_EVENT_SOURCE","useSearchPlaceHolderConfig","_usePickerConfig","_find","p","useSearchClearButtonLabelConfig","_usePickerConfig2","_usePickerConfig3","useAllowExpandReactions","_usePickerConfig4","useSkinTonesDisabledConfig","_usePickerConfig5","useEmojiStyleConfig","_usePickerConfig6","useAutoFocusSearchConfig","_usePickerConfig7","useCategoriesConfig","_usePickerConfig8","useCustomEmojisConfig","_usePickerConfig9","useOpenConfig","_usePickerConfig10","useOnEmojiClickConfig","mouseEventSource","_useMutableConfig","_useReactionsModeStat","setReactionsOpen","handler","REACTIONS","args","apply","collapseToReactions","o","_len2","_key2","useOnSkinToneChangeConfig","_useMutableConfig2","usePreviewConfig","_usePickerConfig11","useThemeConfig","_usePickerConfig12","_usePickerConfig13","useLazyLoadEmojisConfig","_usePickerConfig14","useClassNameConfig","_usePickerConfig15","useStyleConfig","_usePickerConfig16","getDimension","_usePickerConfig17","_usePickerConfig18","useSearchDisabledConfig","_usePickerConfig19","useSkinTonePickerLocationConfig","_usePickerConfig20","_usePickerConfig21","useReactionsConfig","_usePickerConfig22","useGetEmojiUrlConfig","_usePickerConfig23","dimensionConfig","useSearchResultsConfig","searchResultsCount","hasResults","isPlural","toString","useIsSearchMode","_useSearchTermState","focusElement","element","requestAnimationFrame","focus","focusPrevElementSibling","previousElementSibling","focusNextElementSibling","nextElementSibling","focusFirstElementChild","first","firstElementChild","getActiveElement","document","activeElement","ElementRefContextProvider","PickerMainRef","AnchoredEmojiRef","BodyRef","EmojiListRef","SearchInputRef","SkinTonePickerRef","CategoryNavigationRef","VariationPickerRef","ReactionsRef","ElementRefContext","useElementRef","useEmojiListRef","usePickerMainRef","useAnchoredEmojiRef","useSetAnchoredEmojiRef","target","useBodyRef","useReactionsRef","useSearchInputRef","useSkinTonePickerRef","useCategoryNavigationRef","useVariationPickerRef","scrollTo","root","top","$eprBody","queryScrollBody","scrollTop","scrollBy","by","useScrollTo","useCallback","scrollEmojiAboveLabel","isEmojiBehindLabel","closest","variationPicker","scrollBody","closestScrollBody","emojiDistanceFromScrollTop","categoryLabelHeight","closestCategory","focusFirstVisibleEmoji","parent","firstVisibleEmoji","focusAndClickFirstVisibleEmoji","firstEmoji","click","focusLastVisibleEmoji","lastVisibleEmoji","focusNextVisibleEmoji","nextVisibleEmoji","nextCategory","focusPrevVisibleEmoji","prevVisibleEmoji","prevCategory","focusVisibleEmojiOneRowUp","exitUp","visibleEmojiOneRowUp","focusVisibleEmojiOneRowDown","visibleEmojiOneRowDown","categoryContent","closestCategoryContent","countInRow","elementCountInRow","emojisInCurrentCategory","allVisibleEmojis","currentEmojiIndex","indexOf","indexInRow","prevVisibleCategory","allPrevEmojis","lastIndexInRow","at","remainder","firstInNextRow","nextVisibleCategory","emojisInNextCategory","_emojisInNextCategory","useCloseAllOpenToggles","_useEmojiVariationPic","setVariationPicker","_useSkinToneFanOpenSt","skinToneFanOpen","setSkinToneFanOpen","closeAllOpenToggles","useHasOpenToggles","_useEmojiVariationPic2","_useSkinToneFanOpenSt2","hasOpenToggles","useDisallowMouseMove","DisallowMouseRef","disallowMouseMove","useAllowMouseMove","allowMouseMove","useIsMouseDisallowed","isMouseDisallowed","useOnMouseMove","bodyRef","addEventListener","onMouseMove","passive","removeEventListener","useFocusSearchInput","useFocusSkinTonePicker","useFocusCategoryNavigation","useSetFilterRef","setFilter","setter","useClearSearch","applySearch","useApplySearch","focusSearchInput","clearSearch","useAppendSearch","appendSearch","str","getNormalizedSearchTerm","useFilter","setFilterRef","statusSearchResults","getStatusSearchResults","onChange","inputValue","nextValue","longestMatch","findLongestMatch","filterEmojiObjectByKeyword","_useSearchTermState2","setSearchTerm","then","keyword","filtered","hasMatch","some","useIsEmojiFiltered","_useFilterRef","_useSearchTermState3","isEmojiFilteredBySearchTerm","_filter$searchTerm","dict","longestMatchingKey","keys","trim","filterState","_Object$entries","useSetVariationPicker","setAnchoredEmojiRef","setEmojiVariationPicker","_emojiFromElement","emojiFromElement","useIsSkinToneInSearch","skinTonePickerLocationConfig","useIsSkinToneInPreview","KeyboardEvents","useKeyboardNavigation","usePickerMainKeyboardEvents","useSearchInputKeyboardEvents","useSkinTonePickerKeyboardEvents","useCategoryNavigationKeyboardEvents","useBodyKeyboardEvents","onKeyDown","event","Escape","preventDefault","focusSkinTonePicker","setSkinToneFanOpenState","goDownFromSearchInput","useGoDownFromSearchInput","isSkinToneInSearch","ArrowRight","ArrowDown","Enter","isOpen","setIsOpen","isSkinToneInPreview","onType","useOnType","ArrowLeft","focusNextSkinTone","focusPrevSkinTone","ArrowUp","goUpFromBody","useGoUpFromBody","buttonFromTarget","Space","focusCategoryNavigation","isSearchMode","goUpFromEmoji","exitLeft","currentSkinTone","hasNextElementSibling","hasModifier","match","metaKey","ctrlKey","altKey","preloadEmojiIfNeeded","emojiStyles","clientHeight","topOffset","dimensions","NATIVE","preloadedEmojs","emojiTop","viewportBottom","isJustBelowViewport","emojiSize","preloadEmoji","emojiUrl","preloadImage","url","image","Image","src","useOnFocus","onFocus","button","DEFAULT_LABEL_HEIGHT","PickerMain","PickerRootElement","_ref2","reactionsMode","searchModeActive","_ref3","styleProps","cx","styles","main","baseVariables","darkTheme","AUTO","autoThemeDark","_cx","searchActive","reactionsMenu","ref","DarkTheme","emojiPicker","position","flexDirection","borderWidth","borderStyle","borderRadius","borderColor","backgroundColor","boxSizing","fontFamily","autoTheme","backdropFilter","parentWidth","getBoundingClientRect","elementWidth","floor","firstVisibleElementInContainer","elements","maxVisibilityDiffThreshold","parentTop","parentBottom","bottom","parentTopWithLabel","getLabelHeight","visibleElements","elementTop","elementBottom","maxVisibilityDiffPixels","elementTopWithAllowedDiff","elementBottomWithAllowedDiff","parentNode","label","querySelector","EmojiButtonSelector","VisibleEmojiSelector","visible","emojiElement","_emojiElement$closest","originalUnifiedFromEmojiElement","unifiedFromEmojiElement","isEmojiElement","matches","_element$parentElemen","parentElement","elementHeight","_element$clientHeight","emojiTrueOffsetTop","labelHeight","elementOffsetTop","categoryWithoutLabel","_category$clientHeigh","_categoryWithoutLabel","_closestScrollBody$sc","_closestScrollBody","_element$closest","emojiTruOffsetLeft","elementOffsetLeft","_element$offsetTop","offsetTop","_element$offsetLeft","offsetLeft","_elementDataSetKey","elementDataSetKey","allUnifiedFromEmojiElement","_elementDataSet$key","elementDataSet","_element$dataset","dataset","isVisibleEmoji","classList","contains","isHidden","from","querySelectorAll","_allEmojis$slice","slice","last","parseNativeEmoji","hex","String","fromCodePoint","parseInt","isCustomCategory","isCustomEmoji","useMouseDownHandlers","ContainerRef","mouseDownTimerRef","_useActiveSkinToneSta","activeEmojiStyle","onClick","_emojiFromEvent","emojiFromEvent","skinToneToUse","emojiClickOutput","onMouseDown","_emojiFromEvent2","onMouseUp","confainerRef","getImageUrl","imageUrl","isCustom","Button","props","type","cursor","border","background","outline","ClickableEmojiButton","_ref$showVariations","showVariations","hasVariations","_ref$noBackground","noBackground","getAriaLabel","_emojiNames$","alignItems","justifyContent","maxWidth","maxHeight","content","right","borderLeft","borderRight","transform","borderBottom","zIndex","external","fontSize","common","alignSelf","justifySelf","EmojiImg","_ref$lazyLoad","lazyLoad","onError","alt","emojiImag","loading","minWidth","minHeight","padding","NativeEmoji","nativeEmoji","lineHeight","textAlign","letterSpacing","ViewOnlyEmoji","size","_ref$getEmojiUrl","_useEmojisThatFailedT","setEmojisThatFailedToLoad","emojiToRender","ClickableEmoji","BtnPlus","setReactionsMode","title","tabIndex","plusSign","color","backgroundImage","Plus","backgroundRepeat","backgroundSize","Reactions","reactionsOpen","list","reaction","emojiButton","listStyle","margin","useOnScroll","setScrollTop","onScroll","_bodyRef$scrollTop","shouldVirtualize","emojiBottom","isVisible","getEmojiPositionStyle","index","emojisPerRow","left","EMOJI_SIZE_DEFAULT","useCategoryHeight","emojiCount","isReactionsMode","emojiSizeRef","_useVisibleCategories","visibleCategories","_useEmojiSizeState","emojiSizeFromContext","setDimensions","computeAndSetDimensions","listEl","measured","pickerWidth","clientWidth","max","rowCount","ceil","categoryHeight","rootEl","e","te","prop","propertyName","queueMicrotask","useIsEmojiHidden","emojisThatFailedToLoad","isEmojiFiltered","failedToLoad","filteredOut","useEmojiVirtualization","categoryEmojis","onHeightReady","isCategoryVisible","isEmojiHidden","virtualizedCounter","emojisToPush","isDisallowed","_isEmojiHidden","isVirtualized","_BodyRef$current$clie","_BodyRef$current","accumulator","_BodyRef$current$clie2","_BodyRef$current2","EmojiCategory","categoryConfig","categoryName","gridGap","gridTemplateColumns","fontWeight","textTransform","MeasureEmoji","setEmojiSize","firstCategory","dummyEmoji","EmojiList","categoryHeights","setCategoryHeights","emojiList","currentOffset","RenderCategory","_extends2","_useEmojiVirtualizati","Direction","EmojiVariationPicker","_useVariationPickerTo","useVariationPickerTop","getTop","getMenuDirection","getPointerStyle","usePointerStyle","pointerStyle","Down","pointingUp","pointer","direction","Up","emojiOffsetTop","buttonHeight","boxShadow","transformOrigin","backgroundPosition","SVGTriangle","Body","PICKER","body","flex","overflowY","overflowX","detectEmojyPartiallyBelowFold","buttonRect","bodyRect","y","useEmojiPreviewEvents","allow","setPreviewEmoji","onEscape","onMouseOver","onEnter","onLeave","_allUnifiedFromEmojiE","relatedTarget","belowFoldByPx","handlePartiallyVisibleElementFocus","_allUnifiedFromEmojiE2","_document$activeEleme","blur","FlexDirection","Flex","_ref$style","_ref$direction","ROW","_stylesheet$create","COLUMN","Absolute","Relative","BtnSkinToneVariation","isActive","skinToneVariation","tone","closedTone","active","ITEM_SIZE","SkinTonePickerMenu","SkinTonePicker","SkinTonePickerDirection","VERTICAL","HORIZONTAL","isDisabled","setActiveSkinTone","fullWidth","expandedSize","vertical","skinTones","verticalShadow","flexBasis","select","Preview","preview","hideOnReactions","PreviewBody","previewEmoji","variationPickerEmoji","_previewEmoji$unified","show","PreviewContent","defaultText","borderTop","categoryNameFromDom","$category","_$category$getAttribu","getAttribute","useActiveCategoryScrollDetection","setActiveCategory","setVisibleCategories","Map","intersectingCategories","observer","IntersectionObserver","_iterator","_createForOfIteratorHelperLoose","_step","done","entry","set","intersectionRatio","isIntersecting","ratios","visibleCats","ratio","get","lastCategory","_i","_ratios","_ratios$_i","threshold","el","observe","disconnect","useScrollCategoryIntoView","scrollCategoryIntoView","useShouldHideCustomEmojis","customCategoryConfig","CategoryButton","isActiveCategory","allowNavigation","catBtn","role","DarkActivePositionY","DarkPositionY","DarkInactivePosition","SVGNavigation","backgroundPositionX","CategoryNavigation","activeCategory","categoriesConfig","hideCustomCategory","nav","BtnClearSearch","btnClearSearch","icnClearnSearch","HoverDark","SVGTimes","IcnSearch","icnSearch","SVGMagnifier","SearchContainer","overlay","Search","placeholder","autoFocus","_useFilter","input","searchContainer","search","_event$target$value","_event$target","visuallyHidden","clip","clipPath","whiteSpace","Header","EmojiPicker","ContentControl","renderAll","setRenderAll","ExpandedPickerContent","ErrorBoundary","_React$Component","_inheritsLoose","_this","call","hasError","getDerivedStateFromError","_proto","prototype","componentDidCatch","error","errorInfo","console","render","ExportedEmoji","_ref$size","_ref$emojiStyle","EmojiPickerReact"],"mappings":"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;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;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"}
1
+ {"version":3,"file":"emoji-picker-react.cjs.development.js","sources":["../src/DomUtils/classNames.ts","../src/Stylesheet/stylesheet.tsx","../src/config/compareConfig.ts","../src/components/Reactions/DEFAULT_REACTIONS.ts","../src/types/exposedTypes.ts","../src/config/cdnUrls.ts","../src/data/skinToneVariations.ts","../src/dataUtils/DataTypes.ts","../src/dataUtils/emojiUtils.ts","../src/config/categoryConfig.ts","../src/config/config.ts","../src/components/context/PickerConfigContext.tsx","../src/hooks/useDebouncedState.ts","../src/dataUtils/emojiSelectors.ts","../src/dataUtils/suggested.ts","../src/components/context/PickerDataContext.tsx","../src/hooks/useHideEmojisByUniocode.ts","../src/hooks/useDisallowedEmojis.ts","../src/hooks/useInitialLoad.ts","../src/components/context/PickerContext.tsx","../src/config/mutableConfig.ts","../src/config/useConfig.ts","../src/hooks/useIsSearchMode.ts","../src/DomUtils/focusElement.ts","../src/DomUtils/getActiveElement.ts","../src/components/context/ElementRefContext.tsx","../src/DomUtils/scrollTo.ts","../src/DomUtils/keyboardNavigation.ts","../src/hooks/useCloseAllOpenToggles.ts","../src/hooks/useDisallowMouseMove.ts","../src/hooks/useFocus.ts","../src/hooks/useFilter.ts","../src/hooks/useSetVariationPicker.ts","../src/hooks/useShouldShowSkinTonePicker.ts","../src/hooks/useKeyboardNavigation.ts","../src/hooks/preloadEmoji.ts","../src/hooks/useOnFocus.ts","../src/components/main/PickerMain.tsx","../src/DomUtils/elementPositionInRow.ts","../src/DomUtils/selectors.ts","../src/dataUtils/parseNativeEmoji.ts","../src/typeRefinements/typeRefinements.ts","../src/hooks/useMouseDownHandlers.ts","../src/components/atoms/Button.tsx","../src/components/emoji/ClickableEmojiButton.tsx","../src/components/emoji/emojiStyles.ts","../src/components/emoji/EmojiImg.tsx","../src/components/emoji/NativeEmoji.tsx","../src/components/emoji/ViewOnlyEmoji.tsx","../src/components/emoji/Emoji.tsx","../src/components/Reactions/BtnPlus.tsx","../src/components/Reactions/Reactions.tsx","../src/hooks/useOnScroll.ts","../src/virtualization/virtualizationHelpers.ts","../src/hooks/useCategoryHeight.ts","../src/hooks/useIsEmojiHidden.ts","../src/hooks/useEmojiVirtualization.tsx","../src/components/body/EmojiCategory.tsx","../src/components/body/MeasureEmoji.tsx","../src/components/body/EmojiList.tsx","../src/components/body/EmojiVariationPicker.tsx","../src/components/body/Body.tsx","../src/DomUtils/detectEmojyPartiallyBelowFold.ts","../src/hooks/useEmojiPreviewEvents.ts","../src/components/Layout/Flex.tsx","../src/components/Layout/Space.tsx","../src/components/Layout/Absolute.tsx","../src/components/Layout/Relative.tsx","../src/components/header/SkinTonePicker/BtnSkinToneVariation.tsx","../src/components/header/SkinTonePicker/SkinTonePicker.tsx","../src/components/footer/Preview.tsx","../src/DomUtils/categoryNameFromDom.ts","../src/hooks/useActiveCategoryScrollDetection.ts","../src/hooks/useScrollCategoryIntoView.ts","../src/hooks/useShouldHideCustomEmojis.ts","../src/components/navigation/CategoryButton.tsx","../src/components/navigation/CategoryNavigation.tsx","../src/components/header/Search/BtnClearSearch.tsx","../src/components/header/Search/IcnSearch.tsx","../src/components/header/Search/Search.tsx","../src/components/header/Header.tsx","../src/EmojiPickerReact.tsx","../src/components/ErrorBoundary.tsx","../src/components/emoji/ExportedEmoji.tsx","../src/index.tsx"],"sourcesContent":["export enum ClassNames {\n hiddenOnSearch = 'epr-hidden-on-search',\n searchActive = 'epr-search-active',\n hidden = 'epr-hidden',\n visible = 'epr-visible',\n active = 'epr-active',\n emoji = 'epr-emoji',\n category = 'epr-emoji-category',\n label = 'epr-emoji-category-label',\n categoryContent = 'epr-emoji-category-content',\n emojiHasVariations = 'epr-emoji-has-variations',\n scrollBody = 'epr-body',\n emojiList = 'epr-emoji-list',\n external = '__EmojiPicker__',\n emojiPicker = 'EmojiPickerReact',\n open = 'epr-open',\n vertical = 'epr-vertical',\n horizontal = 'epr-horizontal',\n variationPicker = 'epr-emoji-variation-picker',\n darkTheme = 'epr-dark-theme',\n autoTheme = 'epr-auto-theme'\n}\n\nexport function asSelectors(...classNames: ClassNames[]): string {\n return classNames.map(c => `.${c}`).join('');\n}\n","import { Styles, createSheet } from 'flairup';\nimport * as React from 'react';\n\nimport { ClassNames } from '../DomUtils/classNames';\n\nexport const stylesheet = createSheet('epr', null);\n\nconst hidden = {\n display: 'none',\n opacity: '0',\n pointerEvents: 'none',\n visibility: 'hidden',\n overflow: 'hidden'\n};\n\nexport const commonStyles = stylesheet.create({\n hidden: {\n '.': ClassNames.hidden,\n ...hidden\n }\n});\n\nexport const PickerStyleTag = React.memo(function PickerStyleTag() {\n return (\n <style\n suppressHydrationWarning\n dangerouslySetInnerHTML={{ __html: stylesheet.getStyle() }}\n />\n );\n});\n\nexport const commonInteractionStyles = stylesheet.create({\n '.epr-main': {\n ':has(input:not(:placeholder-shown))': {\n categoryBtn: {\n ':hover': {\n opacity: '1',\n backgroundPositionY: 'var(--epr-category-navigation-button-size)'\n }\n },\n hiddenOnSearch: {\n '.': ClassNames.hiddenOnSearch,\n ...hidden\n }\n },\n ':has(input:placeholder-shown)': {\n visibleOnSearchOnly: hidden\n }\n },\n hiddenOnReactions: {\n transition: 'all 0.5s ease-in-out'\n },\n '.epr-reactions': {\n hiddenOnReactions: {\n height: '0px',\n width: '0px',\n opacity: '0',\n pointerEvents: 'none',\n overflow: 'hidden'\n }\n },\n '.EmojiPickerReact:not(.epr-search-active)': {\n categoryBtn: {\n ':hover': {\n opacity: '1',\n backgroundPositionY: 'var(--epr-category-navigation-button-size)'\n },\n '&.epr-active': {\n opacity: '1',\n backgroundPositionY: 'var(--epr-category-navigation-button-size)'\n }\n },\n visibleOnSearchOnly: {\n '.': 'epr-visible-on-search-only',\n ...hidden\n }\n }\n});\n\nexport function darkMode(key: string, value: Styles) {\n return {\n '.epr-dark-theme': {\n [key]: value\n },\n '.epr-auto-theme': {\n [key]: {\n '@media (prefers-color-scheme: dark)': value\n }\n }\n };\n}\n","import { PickerConfig } from './config';\n\n// eslint-disable-next-line complexity\nexport function compareConfig(prev: PickerConfig, next: PickerConfig) {\n const prevCustomEmojis = prev.customEmojis ?? [];\n const nextCustomEmojis = next.customEmojis ?? [];\n return (\n prev.open === next.open &&\n prev.emojiVersion === next.emojiVersion &&\n prev.reactionsDefaultOpen === next.reactionsDefaultOpen &&\n prev.searchPlaceHolder === next.searchPlaceHolder &&\n prev.searchPlaceholder === next.searchPlaceholder &&\n prev.searchClearButtonLabel === next.searchClearButtonLabel &&\n prev.defaultSkinTone === next.defaultSkinTone &&\n prev.skinTonesDisabled === next.skinTonesDisabled &&\n prev.autoFocusSearch === next.autoFocusSearch &&\n prev.emojiStyle === next.emojiStyle &&\n prev.theme === next.theme &&\n prev.suggestedEmojisMode === next.suggestedEmojisMode &&\n prev.lazyLoadEmojis === next.lazyLoadEmojis &&\n prev.className === next.className &&\n prev.height === next.height &&\n prev.width === next.width &&\n prev.style === next.style &&\n prev.searchDisabled === next.searchDisabled &&\n prev.skinTonePickerLocation === next.skinTonePickerLocation &&\n prevCustomEmojis.length === nextCustomEmojis.length &&\n prev.emojiData === next.emojiData\n );\n}\n","export const DEFAULT_REACTIONS = [\n '1f44d', // 👍\n '2764-fe0f', // ❤️\n '1f603', // 😃\n '1f622', // 😢\n '1f64f', // 🙏\n '1f44e', // 👎\n '1f621' // 😡\n];\n","export type EmojiClickData = {\n activeSkinTone: SkinTones;\n unified: string;\n unifiedWithoutSkinTone: string;\n emoji: string;\n names: string[];\n imageUrl: string;\n getImageUrl: (emojiStyle?: EmojiStyle) => string;\n isCustom: boolean;\n};\n\nexport type CategoryConfig = {\n category: Categories;\n name: string;\n};\n\nexport type EmojiData = {\n categories: Partial<Record<Categories, CategoryConfig>>;\n emojis: Record<string, DataEmoji[]>;\n};\n\nexport interface DataEmoji {\n n: string[];\n u: string;\n v?: string[];\n a: string;\n}\n\nexport enum SuggestionMode {\n RECENT = 'recent',\n FREQUENT = 'frequent'\n}\n\nexport enum EmojiStyle {\n NATIVE = 'native',\n APPLE = 'apple',\n TWITTER = 'twitter',\n GOOGLE = 'google',\n FACEBOOK = 'facebook'\n}\n\nexport enum Theme {\n DARK = 'dark',\n LIGHT = 'light',\n AUTO = 'auto'\n}\n\nexport enum SkinTones {\n NEUTRAL = 'neutral',\n LIGHT = '1f3fb',\n MEDIUM_LIGHT = '1f3fc',\n MEDIUM = '1f3fd',\n MEDIUM_DARK = '1f3fe',\n DARK = '1f3ff'\n}\n\nexport enum Categories {\n SUGGESTED = 'suggested',\n CUSTOM = 'custom',\n SMILEYS_PEOPLE = 'smileys_people',\n ANIMALS_NATURE = 'animals_nature',\n FOOD_DRINK = 'food_drink',\n TRAVEL_PLACES = 'travel_places',\n ACTIVITIES = 'activities',\n OBJECTS = 'objects',\n SYMBOLS = 'symbols',\n FLAGS = 'flags'\n}\n\nexport enum SkinTonePickerLocation {\n SEARCH = 'SEARCH',\n PREVIEW = 'PREVIEW'\n}\n","import { EmojiStyle } from '../types/exposedTypes';\n\nconst CDN_URL_APPLE =\n 'https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/';\nconst CDN_URL_FACEBOOK =\n 'https://cdn.jsdelivr.net/npm/emoji-datasource-facebook/img/facebook/64/';\nconst CDN_URL_TWITTER =\n 'https://cdn.jsdelivr.net/npm/emoji-datasource-twitter/img/twitter/64/';\nconst CDN_URL_GOOGLE =\n 'https://cdn.jsdelivr.net/npm/emoji-datasource-google/img/google/64/';\n\nexport function cdnUrl(emojiStyle: EmojiStyle): string {\n switch (emojiStyle) {\n case EmojiStyle.TWITTER:\n return CDN_URL_TWITTER;\n case EmojiStyle.GOOGLE:\n return CDN_URL_GOOGLE;\n case EmojiStyle.FACEBOOK:\n return CDN_URL_FACEBOOK;\n case EmojiStyle.APPLE:\n default:\n return CDN_URL_APPLE;\n }\n}\n","import { SkinTones } from '../types/exposedTypes';\n\nconst skinToneVariations = [\n SkinTones.NEUTRAL,\n SkinTones.LIGHT,\n SkinTones.MEDIUM_LIGHT,\n SkinTones.MEDIUM,\n SkinTones.MEDIUM_DARK,\n SkinTones.DARK\n];\n\nexport const skinTonesNamed = Object.entries(SkinTones).reduce(\n (acc, [key, value]) => {\n acc[value] = key;\n return acc;\n },\n {} as Record<string, string>\n);\n\nexport const skinTonesMapped: Record<\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 '../types/exposedTypes';\n\nexport enum EmojiProperties {\n name = 'n',\n unified = 'u',\n variations = 'v',\n added_in = 'a',\n imgUrl = 'imgUrl'\n}\n\nexport interface DataEmoji extends WithName {\n [EmojiProperties.unified]: string;\n [EmojiProperties.variations]?: string[];\n [EmojiProperties.added_in]: string;\n [EmojiProperties.imgUrl]?: string;\n}\n\nexport type DataEmojis = DataEmoji[];\n\nexport type DataGroups = Categories;\n\nexport type WithName = {\n [EmojiProperties.name]: string[];\n};\n","import { cdnUrl } from '../config/cdnUrls';\nimport { skinTonesMapped } from '../data/skinToneVariations';\nimport { EmojiStyle, SkinTones } from '../types/exposedTypes';\n\nimport { DataEmoji, EmojiProperties, WithName } from './DataTypes';\n\nexport function emojiNames(emoji: WithName): string[] {\n return emoji[EmojiProperties.name] ?? [];\n}\n\nexport function addedIn(emoji: DataEmoji): number {\n return parseFloat(emoji[EmojiProperties.added_in] || '0');\n}\n\nexport function emojiName(emoji?: WithName): string {\n if (!emoji) {\n return '';\n }\n\n const names = emojiNames(emoji);\n return names[names.length - 1];\n}\n\nexport function unifiedWithoutSkinTone(unified: string): string {\n const splat = unified.split('-');\n const [skinTone] = splat.splice(1, 1);\n\n if (skinTonesMapped[skinTone]) {\n return splat.join('-');\n }\n\n return unified;\n}\n\nexport function emojiUnified(emoji: DataEmoji, skinTone?: string): string {\n const unified = emoji[EmojiProperties.unified];\n\n if (!skinTone || !emojiHasVariations(emoji)) {\n return unified;\n }\n\n return emojiVariationUnified(emoji, skinTone) ?? unified;\n}\n\nexport function emojiUrlByUnified(\n unified: string,\n emojiStyle: EmojiStyle,\n): string {\n return `${cdnUrl(emojiStyle)}${unified}.png`;\n}\n\nexport function emojiVariations(emoji: DataEmoji): string[] {\n return emoji[EmojiProperties.variations] ?? [];\n}\n\nexport function emojiHasVariations(emoji: DataEmoji): boolean {\n return emojiVariations(emoji).length > 0;\n}\n\nexport function emojiVariationUnified(\n emoji: DataEmoji,\n skinTone?: string,\n): string | undefined {\n return skinTone\n ? emojiVariations(emoji).find((variation) => variation.includes(skinTone))\n : emojiUnified(emoji);\n}\n\nexport function activeVariationFromUnified(unified: string): SkinTones | null {\n const [, suspectedSkinTone] = unified.split('-') as [string, SkinTones];\n return Object.keys(skinTonesMapped).includes(suspectedSkinTone)\n ? suspectedSkinTone\n : null;\n}\n","import {\n Categories,\n CategoryConfig,\n EmojiData,\n SuggestionMode,\n} from '../types/exposedTypes';\n\nexport { Categories };\n\nconst categoriesOrdered: Categories[] = [\n Categories.SUGGESTED,\n Categories.CUSTOM,\n Categories.SMILEYS_PEOPLE,\n Categories.ANIMALS_NATURE,\n Categories.FOOD_DRINK,\n Categories.TRAVEL_PLACES,\n Categories.ACTIVITIES,\n Categories.OBJECTS,\n Categories.SYMBOLS,\n Categories.FLAGS,\n];\n\nexport const SuggestedRecent: CategoryConfig = {\n name: 'Recently Used',\n category: Categories.SUGGESTED,\n};\n\nexport type CustomCategoryConfig = {\n category: Categories.CUSTOM;\n name: string;\n};\n\nconst configByCategory: Record<Categories, CategoryConfig> = {\n [Categories.SUGGESTED]: {\n category: Categories.SUGGESTED,\n name: 'Frequently Used',\n },\n [Categories.CUSTOM]: {\n category: Categories.CUSTOM,\n name: 'Custom Emojis',\n },\n [Categories.SMILEYS_PEOPLE]: {\n category: Categories.SMILEYS_PEOPLE,\n name: 'Smileys & People',\n },\n [Categories.ANIMALS_NATURE]: {\n category: Categories.ANIMALS_NATURE,\n name: 'Animals & Nature',\n },\n [Categories.FOOD_DRINK]: {\n category: Categories.FOOD_DRINK,\n name: 'Food & Drink',\n },\n [Categories.TRAVEL_PLACES]: {\n category: Categories.TRAVEL_PLACES,\n name: 'Travel & Places',\n },\n [Categories.ACTIVITIES]: {\n category: Categories.ACTIVITIES,\n name: 'Activities',\n },\n [Categories.OBJECTS]: {\n category: Categories.OBJECTS,\n name: 'Objects',\n },\n [Categories.SYMBOLS]: {\n category: Categories.SYMBOLS,\n name: 'Symbols',\n },\n [Categories.FLAGS]: {\n category: Categories.FLAGS,\n name: 'Flags',\n },\n};\n\nexport function baseCategoriesConfig(\n modifiers?: Record<Categories, CategoryConfig>,\n): CategoriesConfig {\n return categoriesOrdered.map((category) => {\n return {\n ...configByCategory[category],\n ...(modifiers && modifiers[category] && modifiers[category]),\n };\n });\n}\n\nexport function categoryFromCategoryConfig(category: CategoryConfig) {\n return category.category;\n}\n\nexport function categoryNameFromCategoryConfig(category: CategoryConfig) {\n return category.name;\n}\n\nexport type CategoriesConfig = CategoryConfig[];\n\nexport type UserCategoryConfig = Array<Categories | CategoryConfig>;\n\nexport function mergeCategoriesConfig(\n userCategoriesConfig: UserCategoryConfig = [],\n modifiers: CategoryConfigModifiers = {},\n emojiData?: EmojiData,\n): CategoriesConfig {\n const extra = ((): Record<Categories, CategoryConfig> => {\n // 1. Start with localized categories from emojiData\n const fromData = emojiData?.categories\n ? (Object.fromEntries(\n Object.entries(emojiData.categories).filter(([, config]) => !!config),\n ) as Record<Categories, CategoryConfig>)\n : ({} as Record<Categories, CategoryConfig>);\n\n // 2. Handle \"Recently Used\" override for explicit 'recent' mode\n if (modifiers.suggestionMode === SuggestionMode.RECENT) {\n const recentConfig = (\n emojiData?.categories as Record<string, CategoryConfig | undefined>\n )?.['suggested_recent'];\n fromData[Categories.SUGGESTED] = recentConfig\n ? { category: Categories.SUGGESTED, name: recentConfig.name }\n : SuggestedRecent;\n }\n\n return fromData;\n })();\n\n const base = baseCategoriesConfig(extra);\n\n if (!userCategoriesConfig?.length) {\n return base;\n }\n\n return userCategoriesConfig.map((category) => {\n if (typeof category === 'string') {\n return getBaseConfigByCategory(category, extra[category]);\n }\n\n return {\n ...getBaseConfigByCategory(category.category, extra[category.category]),\n ...category,\n };\n });\n}\n\nfunction getBaseConfigByCategory(\n category: Categories,\n modifier: CategoryConfig = {} as CategoryConfig,\n) {\n return Object.assign(configByCategory[category], modifier);\n}\n\ntype CategoryConfigModifiers = {\n suggestionMode?: SuggestionMode;\n};\n","import * as React from 'react';\n\nimport { DEFAULT_REACTIONS } from '../components/Reactions/DEFAULT_REACTIONS';\nimport { GetEmojiUrl } from '../components/emoji/BaseEmojiProps';\nimport { emojiUrlByUnified } from '../dataUtils/emojiUtils';\nimport {\n EmojiClickData,\n EmojiData,\n EmojiStyle,\n SkinTonePickerLocation,\n SkinTones,\n SuggestionMode,\n Theme,\n} from '../types/exposedTypes';\n\nimport {\n CategoriesConfig,\n baseCategoriesConfig,\n mergeCategoriesConfig,\n} from './categoryConfig';\nimport { CustomEmoji } from './customEmojiConfig';\n\nconst KNOWN_FAILING_EMOJIS = ['2640-fe0f', '2642-fe0f', '2695-fe0f'];\n\nexport const DEFAULT_SEARCH_PLACEHOLDER = 'Search';\nexport const DEFAULT_SEARCH_CLEAR_BUTTON_LABEL = 'Clear';\nexport const SEARCH_RESULTS_NO_RESULTS_FOUND = 'No results found';\nexport const SEARCH_RESULTS_SUFFIX =\n ' found. Use up and down arrow keys to navigate.';\nexport const SEARCH_RESULTS_ONE_RESULT_FOUND =\n '1 result' + SEARCH_RESULTS_SUFFIX;\nexport const SEARCH_RESULTS_MULTIPLE_RESULTS_FOUND =\n '%n results' + SEARCH_RESULTS_SUFFIX;\n\nexport function mergeConfig(\n userConfig: PickerConfig = {},\n): PickerConfigInternal {\n const base = basePickerConfig();\n\n // Get localized mood from emojiData, fallback to base default\n // Get localized mood from emojiData, fallback to base default\n const localizedMood = (\n userConfig.emojiData?.categories as Record<\n string,\n { name: string } | undefined\n >\n )?.preview_mood?.name;\n\n const previewConfig = {\n ...base.previewConfig,\n // Localized mood is default, but user can override\n ...(localizedMood && !userConfig.previewConfig?.defaultCaption\n ? { defaultCaption: localizedMood }\n : {}),\n ...(userConfig.previewConfig ?? {}),\n };\n\n const config = Object.assign(base, userConfig);\n\n const categories = mergeCategoriesConfig(\n userConfig.categories,\n {\n suggestionMode: config.suggestedEmojisMode,\n },\n userConfig.emojiData,\n );\n\n config.hiddenEmojis.forEach((emoji) => {\n config.unicodeToHide.add(emoji);\n });\n\n const skinTonePickerLocation = config.searchDisabled\n ? SkinTonePickerLocation.PREVIEW\n : config.skinTonePickerLocation;\n\n return {\n ...config,\n categories,\n previewConfig,\n skinTonePickerLocation,\n };\n}\n\nexport function basePickerConfig(): PickerConfigInternal {\n return {\n autoFocusSearch: true,\n categories: baseCategoriesConfig(),\n className: '',\n customEmojis: [],\n defaultSkinTone: SkinTones.NEUTRAL,\n emojiStyle: EmojiStyle.APPLE,\n emojiVersion: null,\n getEmojiUrl: emojiUrlByUnified,\n height: 450,\n lazyLoadEmojis: false,\n previewConfig: {\n ...basePreviewConfig,\n },\n searchDisabled: false,\n searchPlaceHolder: DEFAULT_SEARCH_PLACEHOLDER,\n searchPlaceholder: DEFAULT_SEARCH_PLACEHOLDER,\n searchClearButtonLabel: DEFAULT_SEARCH_CLEAR_BUTTON_LABEL,\n skinTonePickerLocation: SkinTonePickerLocation.SEARCH,\n skinTonesDisabled: false,\n style: {},\n suggestedEmojisMode: SuggestionMode.FREQUENT,\n theme: Theme.LIGHT,\n unicodeToHide: new Set<string>(KNOWN_FAILING_EMOJIS),\n width: 350,\n reactionsDefaultOpen: false,\n reactions: DEFAULT_REACTIONS,\n open: true,\n allowExpandReactions: true,\n hiddenEmojis: [],\n emojiData: undefined,\n };\n}\n\nexport type PickerConfigInternal = {\n emojiVersion: string | null;\n searchPlaceHolder: string;\n searchPlaceholder: string;\n searchClearButtonLabel: string;\n defaultSkinTone: SkinTones;\n skinTonesDisabled: boolean;\n autoFocusSearch: boolean;\n emojiStyle: EmojiStyle;\n categories: CategoriesConfig;\n theme: Theme;\n suggestedEmojisMode: SuggestionMode;\n lazyLoadEmojis: boolean;\n previewConfig: PreviewConfig;\n className: string;\n height: PickerDimensions;\n width: PickerDimensions;\n style: React.CSSProperties;\n getEmojiUrl: GetEmojiUrl;\n searchDisabled: boolean;\n skinTonePickerLocation: SkinTonePickerLocation;\n unicodeToHide: Set<string>;\n customEmojis: CustomEmoji[];\n reactionsDefaultOpen: boolean;\n reactions: string[];\n open: boolean;\n allowExpandReactions: boolean;\n hiddenEmojis: string[];\n emojiData?: EmojiData;\n};\n\nexport type PreviewConfig = {\n defaultEmoji: string;\n defaultCaption: string;\n showPreview: boolean;\n};\n\nconst basePreviewConfig: PreviewConfig = {\n defaultEmoji: '1f60a',\n defaultCaption: \"What's your mood?\",\n showPreview: true,\n};\n\ntype ConfigExternal = {\n previewConfig: Partial<PreviewConfig>;\n onEmojiClick: MouseDownEvent;\n onReactionClick: MouseDownEvent;\n onSkinToneChange: OnSkinToneChange;\n} & Omit<PickerConfigInternal, 'previewConfig' | 'unicodeToHide'>;\n\nexport type PickerConfig = Partial<ConfigExternal>;\n\nexport type PickerDimensions = string | number;\n\nexport type MouseDownEvent = (\n emoji: EmojiClickData,\n event: MouseEvent,\n api?: OnEmojiClickApi,\n) => void;\nexport type OnSkinToneChange = (emoji: SkinTones) => void;\n\ntype OnEmojiClickApi = {\n collapseToReactions: () => void;\n};\n","import * as React from 'react';\n\nimport { compareConfig } from '../../config/compareConfig';\nimport {\n basePickerConfig,\n mergeConfig,\n PickerConfig,\n PickerConfigInternal\n} from '../../config/config';\n\ntype Props = PickerConfig &\n Readonly<{\n children: React.ReactNode;\n }>;\n\nconst ConfigContext = React.createContext<PickerConfigInternal>(\n basePickerConfig()\n);\n\nexport function PickerConfigProvider({ children, ...config }: Props) {\n const mergedConfig = useSetConfig(config);\n\n return (\n <ConfigContext.Provider value={mergedConfig}>\n {children}\n </ConfigContext.Provider>\n );\n}\n\nexport function useSetConfig(config: PickerConfig) {\n const [mergedConfig, setMergedConfig] = React.useState(() =>\n mergeConfig(config)\n );\n\n React.useEffect(() => {\n if (compareConfig(mergedConfig, config)) {\n return;\n }\n setMergedConfig(mergeConfig(config));\n // not gonna...\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [\n config.customEmojis?.length,\n config.open,\n config.emojiVersion,\n config.reactionsDefaultOpen,\n config.searchPlaceHolder,\n config.searchPlaceholder,\n config.searchClearButtonLabel,\n config.defaultSkinTone,\n config.skinTonesDisabled,\n config.autoFocusSearch,\n config.emojiStyle,\n config.theme,\n config.suggestedEmojisMode,\n config.lazyLoadEmojis,\n config.className,\n config.height,\n config.width,\n config.searchDisabled,\n config.skinTonePickerLocation,\n config.allowExpandReactions,\n config.emojiData\n ]);\n\n return mergedConfig;\n}\n\nexport function usePickerConfig() {\n return React.useContext(ConfigContext);\n}\n","import { useRef, useState } from 'react';\n\nexport function useDebouncedState<T>(\n initialValue: T,\n delay: number = 0\n): [T, (value: T) => Promise<T>] {\n const [state, setState] = useState<T>(initialValue);\n const timer = useRef<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 React from 'react';\n\nimport { useUpdateSuggested } from '../components/context/PickerContext';\nimport { Categories } from '../config/categoryConfig';\nimport { cdnUrl } from '../config/cdnUrls';\nimport { CustomEmoji } from '../config/customEmojiConfig';\nimport { useSuggestedEmojisModeConfig } from '../config/useConfig';\nimport emojis from '../data/emojis';\nimport skinToneVariations, {\n skinTonesMapped,\n} from '../data/skinToneVariations';\nimport { EmojiStyle, SkinTones } from '../types/exposedTypes';\n\nimport { DataEmoji, DataEmojis, EmojiProperties, WithName } from './DataTypes';\nimport { indexEmoji } from './alphaNumericEmojiIndex';\nimport { getSuggested } from './suggested';\n\nexport function emojiNames(emoji: WithName): string[] {\n return emoji[EmojiProperties.name] ?? [];\n}\n\nexport function addedIn(emoji: DataEmoji): number {\n return parseFloat(emoji[EmojiProperties.added_in]);\n}\n\nexport function emojiName(emoji?: WithName): string {\n if (!emoji) {\n return '';\n }\n\n const names = emojiNames(emoji);\n return names[names.length - 1];\n}\n\nexport function unifiedWithoutSkinTone(unified: string): string {\n const splat = unified.split('-');\n const [skinTone] = splat.splice(1, 1);\n\n if (skinTonesMapped[skinTone]) {\n return splat.join('-');\n }\n\n return unified;\n}\n\nexport function emojiUnified(emoji: DataEmoji, skinTone?: string): string {\n const unified = emoji[EmojiProperties.unified];\n\n if (!skinTone || !emojiHasVariations(emoji)) {\n return unified;\n }\n\n return emojiVariationUnified(emoji, skinTone) ?? unified;\n}\n\nexport function useGetEmojisByCategory(): (Category: Categories) => DataEmojis {\n const suggestedEmojisModeConfig = useSuggestedEmojisModeConfig();\n const [suggestedUpdated] = useUpdateSuggested();\n\n const suggested = React.useMemo(\n () => {\n const suggested = getSuggested(suggestedEmojisModeConfig) ?? [];\n\n return suggested\n .map((s) => emojiByUnified(s.unified))\n .filter(Boolean) as DataEmojis;\n },\n // eslint-disable-next-line react-hooks/exhaustive-deps\n [suggestedUpdated, suggestedEmojisModeConfig],\n );\n\n return function getEmojisByCategory(category: Categories): DataEmojis {\n if (category === Categories.SUGGESTED) {\n return suggested;\n }\n\n // @ts-ignore\n return emojis.emojis[category] ?? [];\n };\n}\n\n// WARNING: DO NOT USE DIRECTLY\nexport function emojiUrlByUnified(\n unified: string,\n emojiStyle: EmojiStyle,\n): string {\n return `${cdnUrl(emojiStyle)}${unified}.png`;\n}\n\nexport function emojiVariations(emoji: DataEmoji): string[] {\n return emoji[EmojiProperties.variations] ?? [];\n}\n\nexport function emojiHasVariations(emoji: DataEmoji): boolean {\n return emojiVariations(emoji).length > 0;\n}\n\nexport function emojiVariationUnified(\n emoji: DataEmoji,\n skinTone?: string,\n): string | undefined {\n return skinTone\n ? emojiVariations(emoji).find((variation) => variation.includes(skinTone))\n : emojiUnified(emoji);\n}\n\nexport function emojiByUnified(unified?: string): DataEmoji | undefined {\n if (!unified) {\n return;\n }\n\n if (allEmojisByUnified[unified]) {\n return allEmojisByUnified[unified];\n }\n\n const withoutSkinTone = unifiedWithoutSkinTone(unified);\n return allEmojisByUnified[withoutSkinTone];\n}\n\nexport const allEmojis: DataEmojis = Object.values(emojis.emojis).flat();\n\nexport function setCustomEmojis(customEmojis: CustomEmoji[]): void {\n emojis.emojis[Categories.CUSTOM].length = 0;\n\n customEmojis.forEach((emoji) => {\n const emojiData = customToRegularEmoji(emoji);\n\n emojis.emojis[Categories.CUSTOM].push(emojiData as never);\n\n if (allEmojisByUnified[emojiData[EmojiProperties.unified]]) {\n return;\n }\n\n allEmojis.push(emojiData);\n allEmojisByUnified[emojiData[EmojiProperties.unified]] = emojiData;\n indexEmoji(emojiData);\n });\n}\n\nfunction customToRegularEmoji(emoji: CustomEmoji): DataEmoji {\n return {\n [EmojiProperties.name]: emoji.names.map((name) => name.toLowerCase()),\n [EmojiProperties.unified]: emoji.id.toLowerCase(),\n [EmojiProperties.added_in]: '0',\n [EmojiProperties.imgUrl]: emoji.imgUrl,\n };\n}\n\nconst allEmojisByUnified: {\n [unified: string]: DataEmoji;\n} = {};\n\nallEmojis.reduce((allEmojis, Emoji) => {\n allEmojis[emojiUnified(Emoji)] = Emoji;\n\n if (emojiHasVariations(Emoji)) {\n emojiVariations(Emoji).forEach((variation) => {\n allEmojis[variation] = Emoji;\n });\n }\n\n return allEmojis;\n}, allEmojisByUnified);\n\nexport function activeVariationFromUnified(unified: string): SkinTones | null {\n const [, suspectedSkinTone] = unified.split('-') as [string, SkinTones];\n return skinToneVariations.includes(suspectedSkinTone)\n ? suspectedSkinTone\n : null;\n}\n","import { SkinTones, SuggestionMode } from '../types/exposedTypes';\n\nimport { DataEmoji } from './DataTypes';\nimport { emojiUnified } from './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 React from 'react';\n\nimport { CustomEmoji } from '../../config/customEmojiConfig';\nimport { useSuggestedEmojisModeConfig } from '../../config/useConfig';\nimport defaultEmojiData from '../../data/emojis';\n\nimport {\n DataEmoji,\n DataEmojis,\n EmojiProperties,\n EmojiProperties as Keys,\n} from '../../dataUtils/DataTypes';\nimport {\n activeVariationFromUnified,\n unifiedWithoutSkinTone,\n} from '../../dataUtils/emojiUtils';\nimport { getSuggested } from '../../dataUtils/suggested';\nimport { Categories, EmojiData, SkinTones } from '../../types/exposedTypes';\n\nimport { usePickerConfig } from './PickerConfigContext';\nimport { useUpdateSuggested } from './PickerContext';\n\nexport interface PickerDataContextValue {\n emojiData: EmojiData;\n allEmojis: DataEmojis;\n allEmojisByUnified: Record<string, DataEmoji>;\n searchIndex: Record<string, Record<string, DataEmoji>>;\n emojiByUnified: (unified?: string) => DataEmoji | undefined;\n activeVariationFromUnified: (unified: string) => SkinTones | null;\n}\n\nconst PickerDataContext = React.createContext<PickerDataContextValue>({\n emojiData: {} as EmojiData,\n allEmojis: [],\n allEmojisByUnified: {},\n searchIndex: {},\n emojiByUnified: () => undefined,\n activeVariationFromUnified: () => null,\n});\n\nexport function PickerDataProvider({\n children,\n}: {\n children: React.ReactNode;\n}) {\n const { customEmojis, emojiData: genericEmojiData } = usePickerConfig();\n\n const data = React.useMemo(() => {\n const emojiData = genericEmojiData || (defaultEmojiData as EmojiData);\n\n // Clone to avoid mutation of shared source\n const newData: EmojiData = JSON.parse(JSON.stringify(emojiData));\n\n if (customEmojis && customEmojis.length > 0) {\n newData.emojis[Categories.CUSTOM] =\n customEmojis.map(customToRegularEmoji);\n }\n\n const emojis = newData.emojis || {};\n\n const allEmojis: DataEmojis = Object.values(emojis).flat();\n const allEmojisByUnified: Record<string, DataEmoji> = {};\n const searchIndex: Record<string, Record<string, DataEmoji>> = {};\n\n allEmojis.forEach((emoji) => {\n const unified = emoji[Keys.unified];\n allEmojisByUnified[unified] = emoji;\n\n if (emoji[Keys.variations]) {\n emoji[Keys.variations]?.forEach((variation) => {\n allEmojisByUnified[variation] = emoji;\n });\n }\n\n // Index for search\n // Re-implement indexEmoji logic here to be local\n const joinedNameString = (emoji[Keys.name] || [])\n .join('')\n .toLowerCase()\n .split('');\n\n joinedNameString.forEach((char: string) => {\n searchIndex[char] = searchIndex[char] ?? {};\n searchIndex[char][unified] = emoji;\n });\n });\n\n return {\n emojiData: newData,\n allEmojis,\n allEmojisByUnified,\n searchIndex,\n };\n }, [genericEmojiData, customEmojis]);\n\n const emojiByUnified = React.useCallback(\n (unified?: string): DataEmoji | undefined => {\n if (!unified) return undefined;\n\n const result =\n data.allEmojisByUnified[unified] ??\n data.allEmojisByUnified[unifiedWithoutSkinTone(unified)];\n return result;\n },\n [data.allEmojisByUnified],\n );\n\n return (\n <PickerDataContext.Provider\n value={{\n ...data,\n emojiByUnified,\n activeVariationFromUnified,\n }}\n >\n {children}\n </PickerDataContext.Provider>\n );\n}\n\nexport function usePickerDataContext() {\n return React.useContext(PickerDataContext);\n}\n\nexport function useGetEmojisByCategory() {\n const { emojiData, emojiByUnified } = usePickerDataContext();\n const suggestedEmojisModeConfig = useSuggestedEmojisModeConfig();\n const [suggestedUpdated] = useUpdateSuggested();\n\n const suggested = React.useMemo(() => {\n const suggested = getSuggested(suggestedEmojisModeConfig) ?? [];\n\n return suggested\n .map((s) => emojiByUnified(s.unified))\n .filter(Boolean) as DataEmojis;\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [suggestedUpdated, suggestedEmojisModeConfig, emojiByUnified]);\n\n return function getEmojisByCategory(category: Categories): DataEmojis {\n if (category === Categories.SUGGESTED) {\n return suggested;\n }\n\n return emojiData.emojis?.[category] ?? [];\n };\n}\n\nfunction customToRegularEmoji(emoji: CustomEmoji): DataEmoji {\n return {\n [EmojiProperties.name]: emoji.names.map((name: string) =>\n name.toLowerCase(),\n ),\n [EmojiProperties.unified]: emoji.id.toLowerCase(),\n [EmojiProperties.added_in]: '0',\n [EmojiProperties.imgUrl]: emoji.imgUrl,\n };\n}\n","import { useUnicodeToHide } from \"../config/useConfig\";\n\nexport function useIsUnicodeHidden() {\n const unicodeToHide = useUnicodeToHide();\n return (emojiUnified: string) => unicodeToHide.has(emojiUnified);\n }\n","import { useRef, useMemo } from 'react';\n\nimport { usePickerDataContext } from '../components/context/PickerDataContext';\nimport { useEmojiVersionConfig } from '../config/useConfig';\nimport { DataEmoji } from '../dataUtils/DataTypes';\nimport {\n addedIn,\n emojiUnified,\n unifiedWithoutSkinTone\n} from '../dataUtils/emojiUtils';\n\nimport { useIsUnicodeHidden } from './useHideEmojisByUniocode';\n\nexport function useDisallowedEmojis() {\n const DisallowedEmojisRef = useRef<Record<string, boolean>>({});\n const emojiVersionConfig = useEmojiVersionConfig();\n const { allEmojis } = usePickerDataContext();\n\n return useMemo(() => {\n const emojiVersion = parseFloat(`${emojiVersionConfig}`);\n\n if (!emojiVersionConfig || Number.isNaN(emojiVersion)) {\n return DisallowedEmojisRef.current;\n }\n\n return allEmojis.reduce((disallowedEmojis, emoji) => {\n if (addedInNewerVersion(emoji, emojiVersion)) {\n disallowedEmojis[emojiUnified(emoji)] = true;\n }\n\n return disallowedEmojis;\n }, DisallowedEmojisRef.current);\n }, [emojiVersionConfig, allEmojis]);\n}\n\nexport function useIsEmojiDisallowed() {\n const disallowedEmojis = useDisallowedEmojis();\n const isUnicodeHidden = useIsUnicodeHidden();\n\n return function isEmojiDisallowed(emoji: DataEmoji) {\n const unified = unifiedWithoutSkinTone(emojiUnified(emoji));\n\n return Boolean(disallowedEmojis[unified] || isUnicodeHidden(unified));\n };\n}\n\nfunction addedInNewerVersion(\n emoji: DataEmoji,\n supportedLevel: number\n): boolean {\n return addedIn(emoji) > supportedLevel;\n}\n","import { useEffect } from 'react';\nimport * as React from 'react';\n\nexport function useMarkInitialLoad(\n dispatch: React.Dispatch<React.SetStateAction<boolean>>\n) {\n useEffect(() => {\n dispatch(true);\n }, [dispatch]);\n}\n","import * as React from 'react';\nimport { useState } from 'react';\n\nimport {\n useDefaultSkinToneConfig,\n useReactionsOpenConfig\n} from '../../config/useConfig';\nimport { DataEmoji } from '../../dataUtils/DataTypes';\nimport { useDebouncedState } from '../../hooks/useDebouncedState';\nimport { useDisallowedEmojis } from '../../hooks/useDisallowedEmojis';\nimport { FilterDict } from '../../hooks/useFilter';\nimport { useMarkInitialLoad } from '../../hooks/useInitialLoad';\nimport { SkinTones } from '../../types/exposedTypes';\nimport { usePickerDataContext } from './PickerDataContext';\n\nexport function PickerContextProvider({ children }: Props) {\n const disallowedEmojis = useDisallowedEmojis();\n const defaultSkinTone = useDefaultSkinToneConfig();\n const reactionsDefaultOpen = useReactionsOpenConfig();\n const { searchIndex } = usePickerDataContext();\n\n // Initialize the filter with the inititial dictionary\n const filterRef = React.useRef<FilterState>(searchIndex);\n\n React.useEffect(() => {\n filterRef.current = searchIndex;\n }, [searchIndex]);\n const disallowClickRef = React.useRef<boolean>(false);\n const disallowMouseRef = React.useRef<boolean>(false);\n const disallowedEmojisRef = 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 reactionsModeState = useState(reactionsDefaultOpen);\n const [isPastInitialLoad, setIsPastInitialLoad] = useState(false);\n const visibleCategoriesState = useState<string[]>([]);\n const emojiSizeState = useState<number | null>(null);\n\n useMarkInitialLoad(setIsPastInitialLoad);\n\n return (\n <PickerContext.Provider\n value={{\n activeCategoryState,\n activeSkinTone,\n disallowClickRef,\n disallowMouseRef,\n disallowedEmojisRef,\n emojiVariationPickerState,\n emojisThatFailedToLoadState,\n filterRef,\n isPastInitialLoad,\n searchTerm,\n skinToneFanOpenState,\n suggestedUpdateState,\n reactionsModeState,\n visibleCategoriesState,\n emojiSizeState\n }}\n >\n {children}\n </PickerContext.Provider>\n );\n}\n\ntype ReactState<T> = [T, React.Dispatch<React.SetStateAction<T>>];\n\nconst PickerContext = React.createContext<{\n searchTerm: [string, (term: string) => Promise<string>];\n suggestedUpdateState: [number, (term: number) => void];\n activeCategoryState: ReactState<ActiveCategoryState>;\n activeSkinTone: ReactState<SkinTones>;\n emojisThatFailedToLoadState: ReactState<Set<string>>;\n isPastInitialLoad: boolean;\n emojiVariationPickerState: ReactState<DataEmoji | null>;\n skinToneFanOpenState: ReactState<boolean>;\n filterRef: React.MutableRefObject<FilterState>;\n disallowClickRef: React.MutableRefObject<boolean>;\n disallowMouseRef: React.MutableRefObject<boolean>;\n disallowedEmojisRef: React.MutableRefObject<Record<string, boolean>>;\n reactionsModeState: ReactState<boolean>;\n visibleCategoriesState: ReactState<Array<string>>;\n emojiSizeState: ReactState<number | null>;\n}>({\n activeCategoryState: [null, () => {}],\n activeSkinTone: [SkinTones.NEUTRAL, () => {}],\n disallowClickRef: { current: false },\n disallowMouseRef: { current: false },\n disallowedEmojisRef: { current: {} },\n emojiVariationPickerState: [null, () => {}],\n emojisThatFailedToLoadState: [new Set(), () => {}],\n filterRef: { current: {} },\n isPastInitialLoad: true,\n searchTerm: ['', () => new Promise<string>(() => undefined)],\n skinToneFanOpenState: [false, () => {}],\n suggestedUpdateState: [Date.now(), () => {}],\n reactionsModeState: [false, () => {}],\n visibleCategoriesState: [[], () => []],\n emojiSizeState: [null, () => {}]\n});\n\ntype Props = Readonly<{\n children: React.ReactNode;\n}>;\n\nexport function useFilterRef() {\n const { filterRef } = React.useContext(PickerContext);\n return filterRef;\n}\n\nexport function useDisallowClickRef() {\n const { disallowClickRef } = React.useContext(PickerContext);\n return disallowClickRef;\n}\n\nexport function useDisallowMouseRef() {\n const { disallowMouseRef } = React.useContext(PickerContext);\n return disallowMouseRef;\n}\n\nexport function useReactionsModeState() {\n const { reactionsModeState } = React.useContext(PickerContext);\n return reactionsModeState;\n}\n\nexport function useSearchTermState() {\n const { searchTerm } = React.useContext(PickerContext);\n return searchTerm;\n}\n\nexport function useActiveSkinToneState(): [\n SkinTones,\n (skinTone: SkinTones) => void\n] {\n const { activeSkinTone } = React.useContext(PickerContext);\n return activeSkinTone;\n}\n\nexport function useEmojisThatFailedToLoadState() {\n const { emojisThatFailedToLoadState } = React.useContext(PickerContext);\n return emojisThatFailedToLoadState;\n}\n\nexport function useIsPastInitialLoad(): boolean {\n const { isPastInitialLoad } = React.useContext(PickerContext);\n return isPastInitialLoad;\n}\n\nexport function useEmojiVariationPickerState() {\n const { emojiVariationPickerState } = React.useContext(PickerContext);\n return emojiVariationPickerState;\n}\n\nexport function useSkinToneFanOpenState() {\n const { skinToneFanOpenState } = React.useContext(PickerContext);\n return skinToneFanOpenState;\n}\n\nexport function useDisallowedEmojisRef() {\n const { disallowedEmojisRef } = React.useContext(PickerContext);\n return disallowedEmojisRef;\n}\n\nexport function useVisibleCategoriesState() {\n const { visibleCategoriesState } = React.useContext(PickerContext);\n return visibleCategoriesState;\n}\n\nexport function useEmojiSizeState() {\n const { emojiSizeState } = React.useContext(PickerContext);\n return emojiSizeState;\n}\n\nexport function useUpdateSuggested(): [number, () => void] {\n const { suggestedUpdateState } = React.useContext(PickerContext);\n\n const [suggestedUpdated, setsuggestedUpdate] = suggestedUpdateState;\n return [\n suggestedUpdated,\n function updateSuggested() {\n setsuggestedUpdate(Date.now());\n }\n ];\n}\n\nexport type FilterState = Record<string, FilterDict>;\n\ntype ActiveCategoryState = null | string;\n","import React from 'react';\n\nimport { MouseDownEvent, OnSkinToneChange } from './config';\n\nexport type MutableConfig = {\n onEmojiClick?: MouseDownEvent;\n onReactionClick?: MouseDownEvent;\n onSkinToneChange?: OnSkinToneChange;\n};\n\nexport const MutableConfigContext = React.createContext<\n React.MutableRefObject<MutableConfig>\n>({} as React.MutableRefObject<MutableConfig>);\n\nexport function useMutableConfig(): React.MutableRefObject<MutableConfig> {\n const mutableConfig = React.useContext(MutableConfigContext);\n return mutableConfig;\n}\n\nexport function useDefineMutableConfig(\n config: MutableConfig\n): React.MutableRefObject<MutableConfig> {\n const MutableConfigRef = React.useRef<MutableConfig>({\n onEmojiClick: config.onEmojiClick || emptyFunc,\n onReactionClick: config.onReactionClick || config.onEmojiClick,\n onSkinToneChange: config.onSkinToneChange || emptyFunc\n });\n\n React.useEffect(() => {\n MutableConfigRef.current.onEmojiClick = config.onEmojiClick || emptyFunc;\n MutableConfigRef.current.onReactionClick =\n config.onReactionClick || config.onEmojiClick;\n }, [config.onEmojiClick, config.onReactionClick]);\n\n React.useEffect(() => {\n MutableConfigRef.current.onSkinToneChange =\n config.onSkinToneChange || emptyFunc;\n }, [config.onSkinToneChange]);\n\n return MutableConfigRef;\n}\n\nfunction emptyFunc() {}\n","import * as React from 'react';\n\nimport { usePickerConfig } from '../components/context/PickerConfigContext';\nimport { useReactionsModeState } from '../components/context/PickerContext';\nimport {\n EmojiClickData,\n EmojiStyle,\n SkinTonePickerLocation,\n SkinTones,\n SuggestionMode,\n Theme\n} from '../types/exposedTypes';\n\nimport { CategoriesConfig } from './categoryConfig';\nimport {\n DEFAULT_SEARCH_PLACEHOLDER,\n DEFAULT_SEARCH_CLEAR_BUTTON_LABEL,\n SEARCH_RESULTS_NO_RESULTS_FOUND,\n SEARCH_RESULTS_ONE_RESULT_FOUND,\n SEARCH_RESULTS_MULTIPLE_RESULTS_FOUND,\n PickerDimensions,\n PreviewConfig\n} from './config';\nimport { CustomEmoji } from './customEmojiConfig';\nimport { useMutableConfig } from './mutableConfig';\n\nexport enum MOUSE_EVENT_SOURCE {\n REACTIONS = 'reactions',\n PICKER = 'picker'\n}\n\nexport function useSearchPlaceHolderConfig(): string {\n const { searchPlaceHolder, searchPlaceholder } = usePickerConfig();\n return (\n [searchPlaceHolder, searchPlaceholder].find(\n p => p !== DEFAULT_SEARCH_PLACEHOLDER\n ) ?? DEFAULT_SEARCH_PLACEHOLDER\n );\n}\n\nexport function useSearchClearButtonLabelConfig(): string {\n const { searchClearButtonLabel } = usePickerConfig();\n return searchClearButtonLabel ?? DEFAULT_SEARCH_CLEAR_BUTTON_LABEL;\n}\n\nexport function useDefaultSkinToneConfig(): SkinTones {\n const { defaultSkinTone } = usePickerConfig();\n return defaultSkinTone;\n}\n\nexport function useAllowExpandReactions(): boolean {\n const { allowExpandReactions } = usePickerConfig();\n return allowExpandReactions;\n}\n\nexport function useSkinTonesDisabledConfig(): boolean {\n const { skinTonesDisabled } = usePickerConfig();\n return skinTonesDisabled;\n}\n\nexport function useEmojiStyleConfig(): EmojiStyle {\n const { emojiStyle } = usePickerConfig();\n return emojiStyle;\n}\n\nexport function useAutoFocusSearchConfig(): boolean {\n const { autoFocusSearch } = usePickerConfig();\n return autoFocusSearch;\n}\n\nexport function useCategoriesConfig(): CategoriesConfig {\n const { categories } = usePickerConfig();\n return categories;\n}\n\nexport function useCustomEmojisConfig(): CustomEmoji[] {\n const { customEmojis } = usePickerConfig();\n return customEmojis;\n}\n\nexport function useOpenConfig(): boolean {\n const { open } = usePickerConfig();\n return open;\n}\n\nexport function useOnEmojiClickConfig(\n mouseEventSource: MOUSE_EVENT_SOURCE\n): (emoji: EmojiClickData, event: MouseEvent) => void {\n const { current } = useMutableConfig();\n const [, setReactionsOpen] = useReactionsModeState();\n\n const handler = current.onEmojiClick || (() => {});\n const { onReactionClick } = current;\n\n if (mouseEventSource === MOUSE_EVENT_SOURCE.REACTIONS && onReactionClick) {\n return (...args) =>\n onReactionClick(...args, {\n collapseToReactions: () => {\n setReactionsOpen(o => o);\n }\n });\n }\n\n return (...args) => {\n handler(...args, {\n collapseToReactions: () => {\n setReactionsOpen(true);\n }\n });\n };\n}\n\nexport function useOnSkinToneChangeConfig(): (skinTone: SkinTones) => void {\n const { current } = useMutableConfig();\n\n return current.onSkinToneChange || (() => {});\n}\n\nexport function usePreviewConfig(): PreviewConfig {\n const { previewConfig } = usePickerConfig();\n return previewConfig;\n}\n\nexport function useThemeConfig(): Theme {\n const { theme } = usePickerConfig();\n\n return theme;\n}\n\nexport function useSuggestedEmojisModeConfig(): SuggestionMode {\n const { suggestedEmojisMode } = usePickerConfig();\n return suggestedEmojisMode;\n}\n\nexport function useLazyLoadEmojisConfig(): boolean {\n const { lazyLoadEmojis } = usePickerConfig();\n return lazyLoadEmojis;\n}\n\nexport function useClassNameConfig(): string {\n const { className } = usePickerConfig();\n return className;\n}\n\nexport function useStyleConfig(): React.CSSProperties {\n const { height, width, style } = usePickerConfig();\n return { height: getDimension(height), width: getDimension(width), ...style };\n}\n\nexport function useReactionsOpenConfig(): boolean {\n const { reactionsDefaultOpen } = usePickerConfig();\n return reactionsDefaultOpen;\n}\n\nexport function useEmojiVersionConfig(): string | null {\n const { emojiVersion } = usePickerConfig();\n return emojiVersion;\n}\n\nexport function useSearchDisabledConfig(): boolean {\n const { searchDisabled } = usePickerConfig();\n return searchDisabled;\n}\n\nexport function useSkinTonePickerLocationConfig(): SkinTonePickerLocation {\n const { skinTonePickerLocation } = usePickerConfig();\n return skinTonePickerLocation;\n}\n\nexport function useUnicodeToHide() {\n const { unicodeToHide } = usePickerConfig();\n return unicodeToHide;\n}\n\nexport function useReactionsConfig(): string[] {\n const { reactions } = usePickerConfig();\n return reactions;\n}\n\nexport function useGetEmojiUrlConfig(): (\n unified: string,\n style: EmojiStyle\n) => string {\n const { getEmojiUrl } = usePickerConfig();\n return getEmojiUrl;\n}\n\nfunction getDimension(dimensionConfig: PickerDimensions): PickerDimensions {\n return typeof dimensionConfig === 'number'\n ? `${dimensionConfig}px`\n : dimensionConfig;\n}\n\nexport function useSearchResultsConfig(searchResultsCount: number): string {\n const hasResults = searchResultsCount > 0;\n const isPlural = searchResultsCount > 1;\n\n if (hasResults) {\n return isPlural\n ? SEARCH_RESULTS_MULTIPLE_RESULTS_FOUND.replace(\n '%n',\n searchResultsCount.toString()\n )\n : SEARCH_RESULTS_ONE_RESULT_FOUND;\n }\n\n return SEARCH_RESULTS_NO_RESULTS_FOUND;\n}\n","import { useSearchTermState } from '../components/context/PickerContext';\n\nexport default function useIsSearchMode(): boolean {\n const [searchTerm] = useSearchTermState();\n\n return !!searchTerm;\n}\n","import { NullableElement } from './selectors';\n\nexport function focusElement(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 { NullableElement } from './selectors';\n\nexport function getActiveElement() {\n return document.activeElement as NullableElement;\n}\n","import * as React from 'react';\n\nimport { focusElement } from '../../DomUtils/focusElement';\nimport { NullableElement } from '../../DomUtils/selectors';\n\nexport function ElementRefContextProvider({\n children\n}: {\n children: React.ReactNode;\n}) {\n const PickerMainRef = React.useRef<HTMLElement>(null);\n const AnchoredEmojiRef = React.useRef<HTMLElement>(null);\n const BodyRef = React.useRef<HTMLDivElement>(null);\n const EmojiListRef = React.useRef<HTMLUListElement>(null);\n const SearchInputRef = React.useRef<HTMLInputElement>(null);\n const SkinTonePickerRef = React.useRef<HTMLDivElement>(null);\n const CategoryNavigationRef = React.useRef<HTMLDivElement>(null);\n const VariationPickerRef = React.useRef<HTMLDivElement>(null);\n const ReactionsRef = React.useRef<HTMLUListElement>(null);\n\n return (\n <ElementRefContext.Provider\n value={{\n AnchoredEmojiRef,\n BodyRef,\n EmojiListRef,\n CategoryNavigationRef,\n PickerMainRef,\n SearchInputRef,\n SkinTonePickerRef,\n VariationPickerRef,\n ReactionsRef\n }}\n >\n {children}\n </ElementRefContext.Provider>\n );\n}\n\nexport type ElementRef<\n E extends HTMLElement = HTMLElement\n> = React.MutableRefObject<E | null>;\n\ntype ElementRefs = {\n PickerMainRef: ElementRef;\n AnchoredEmojiRef: ElementRef;\n EmojiListRef: ElementRef<HTMLUListElement>;\n SkinTonePickerRef: ElementRef<HTMLDivElement>;\n SearchInputRef: ElementRef<HTMLInputElement>;\n BodyRef: ElementRef<HTMLDivElement>;\n CategoryNavigationRef: ElementRef<HTMLDivElement>;\n VariationPickerRef: ElementRef<HTMLDivElement>;\n ReactionsRef: ElementRef<HTMLUListElement>;\n};\n\nconst ElementRefContext = React.createContext<ElementRefs>({\n AnchoredEmojiRef: React.createRef(),\n BodyRef: React.createRef(),\n CategoryNavigationRef: React.createRef(),\n EmojiListRef: React.createRef(),\n PickerMainRef: React.createRef(),\n SearchInputRef: React.createRef(),\n SkinTonePickerRef: React.createRef(),\n VariationPickerRef: React.createRef(),\n ReactionsRef: React.createRef()\n});\n\nfunction useElementRef() {\n return React.useContext(ElementRefContext);\n}\n\nexport function useEmojiListRef() {\n return useElementRef()['EmojiListRef'];\n}\n\nexport function usePickerMainRef() {\n return useElementRef()['PickerMainRef'];\n}\n\nexport function useAnchoredEmojiRef() {\n return useElementRef()['AnchoredEmojiRef'];\n}\n\nexport function useSetAnchoredEmojiRef(): (target: NullableElement) => void {\n const AnchoredEmojiRef = useAnchoredEmojiRef();\n return (target: NullableElement) => {\n if (target === null && AnchoredEmojiRef.current !== null) {\n focusElement(AnchoredEmojiRef.current);\n }\n\n AnchoredEmojiRef.current = target;\n };\n}\n\nexport function useBodyRef() {\n return useElementRef()['BodyRef'];\n}\n\nexport function useReactionsRef() {\n return useElementRef()['ReactionsRef'];\n}\n\nexport function useSearchInputRef() {\n return useElementRef()['SearchInputRef'];\n}\n\nexport function useSkinTonePickerRef() {\n return useElementRef()['SkinTonePickerRef'];\n}\n\nexport function useCategoryNavigationRef() {\n return useElementRef()['CategoryNavigationRef'];\n}\n\nexport function useVariationPickerRef() {\n return useElementRef()['VariationPickerRef'];\n}\n","import { useCallback } from 'react';\n\nimport { useBodyRef } from '../components/context/ElementRefContext';\n\nimport { asSelectors, ClassNames } from './classNames';\nimport {\n categoryLabelHeight,\n closestCategory,\n closestScrollBody,\n emojiDistanceFromScrollTop,\n isEmojiBehindLabel,\n NullableElement,\n queryScrollBody\n} from './selectors';\n\nexport function scrollTo(root: NullableElement, top: number = 0) {\n const $eprBody = queryScrollBody(root);\n\n if (!$eprBody) {\n return;\n }\n\n requestAnimationFrame(() => {\n $eprBody.scrollTop = top;\n });\n}\n\nexport function scrollBy(root: NullableElement, by: number): void {\n const $eprBody = queryScrollBody(root);\n\n if (!$eprBody) {\n return;\n }\n\n requestAnimationFrame(() => {\n $eprBody.scrollTop = $eprBody.scrollTop + by;\n });\n}\n\nexport function useScrollTo() {\n const BodyRef = useBodyRef();\n\n return useCallback(\n (top: number) => {\n requestAnimationFrame(() => {\n if (BodyRef.current) {\n BodyRef.current.scrollTop = top;\n }\n });\n },\n [BodyRef]\n );\n}\n\nexport function scrollEmojiAboveLabel(emoji: NullableElement) {\n if (!emoji || !isEmojiBehindLabel(emoji)) {\n return;\n }\n\n if (emoji.closest(asSelectors(ClassNames.variationPicker))) {\n return;\n }\n\n const scrollBody = closestScrollBody(emoji);\n const by = emojiDistanceFromScrollTop(emoji);\n scrollBy(scrollBody, -(categoryLabelHeight(closestCategory(emoji)) - by));\n}\n","import { elementCountInRow } from './elementPositionInRow';\nimport { focusElement } from './focusElement';\nimport { scrollEmojiAboveLabel } from './scrollTo';\nimport {\n allVisibleEmojis,\n closestCategory,\n firstVisibleEmoji,\n lastVisibleEmoji,\n nextCategory,\n nextVisibleEmoji,\n NullableElement,\n prevCategory,\n prevVisibleEmoji,\n closestCategoryContent\n} from './selectors';\n\nexport function focusFirstVisibleEmoji(parent: NullableElement) {\n const emoji = firstVisibleEmoji(parent);\n focusElement(emoji);\n scrollEmojiAboveLabel(emoji);\n}\n\nexport function focusAndClickFirstVisibleEmoji(parent: NullableElement) {\n const firstEmoji = firstVisibleEmoji(parent);\n\n focusElement(firstEmoji);\n firstEmoji?.click();\n}\n\nexport function focusLastVisibleEmoji(parent: NullableElement) {\n focusElement(lastVisibleEmoji(parent));\n}\n\nexport function focusNextVisibleEmoji(element: NullableElement) {\n if (!element) {\n return;\n }\n\n const next = nextVisibleEmoji(element);\n\n if (!next) {\n return focusFirstVisibleEmoji(nextCategory(element));\n }\n\n focusElement(next);\n scrollEmojiAboveLabel(next);\n}\n\nexport function focusPrevVisibleEmoji(element: NullableElement) {\n if (!element) {\n return;\n }\n\n const prev = prevVisibleEmoji(element);\n\n if (!prev) {\n return focusLastVisibleEmoji(prevCategory(element));\n }\n\n focusElement(prev);\n scrollEmojiAboveLabel(prev);\n}\n\nexport function focusVisibleEmojiOneRowUp(\n element: NullableElement,\n exitUp: () => void\n) {\n if (!element) {\n return;\n }\n\n const prev = visibleEmojiOneRowUp(element);\n\n if (!prev) {\n return exitUp();\n }\n\n focusElement(prev);\n scrollEmojiAboveLabel(prev);\n}\n\nexport function focusVisibleEmojiOneRowDown(element: NullableElement) {\n if (!element) {\n return;\n }\n\n const next = visibleEmojiOneRowDown(element);\n\n return focusElement(next);\n}\n\nfunction visibleEmojiOneRowUp(element: HTMLElement) {\n if (!element) {\n return null;\n }\n\n const categoryContent = closestCategoryContent(element);\n const category = closestCategory(categoryContent);\n const countInRow = elementCountInRow(categoryContent, element);\n\n const emojisInCurrentCategory = allVisibleEmojis(category);\n const currentEmojiIndex = emojisInCurrentCategory.indexOf(element);\n const indexInRow = currentEmojiIndex % countInRow;\n\n if (currentEmojiIndex === -1) {\n return null;\n }\n\n if (emojisInCurrentCategory[currentEmojiIndex - countInRow]) {\n return emojisInCurrentCategory[currentEmojiIndex - countInRow];\n }\n\n const prevVisibleCategory = prevCategory(category);\n\n if (!prevVisibleCategory) {\n return null;\n }\n\n const allPrevEmojis = allVisibleEmojis(prevVisibleCategory);\n\n // if there is an emoji in the same index of `indexInRow` in the previous category, return it\n // for this we need to find the last emoji in the previous category that shares the same indexInRow\n // this is by using the % operator to find the last emoji that matches\n\n const lastIndexInRow = (allPrevEmojis.length % countInRow) - 1;\n\n if (indexInRow > lastIndexInRow) {\n return allPrevEmojis.at(-1);\n }\n\n // otherwise, return the last emoji that shares the same indexInRow\n\n for (let i = allPrevEmojis.length - 1; i >= 0; i--) {\n if (i % countInRow === indexInRow) {\n return allPrevEmojis[i];\n }\n }\n\n return allPrevEmojis.at(-1);\n}\n\nfunction visibleEmojiOneRowDown(element: HTMLElement) {\n if (!element) {\n return null;\n }\n\n const categoryContent = closestCategoryContent(element);\n const category = closestCategory(categoryContent);\n const countInRow = elementCountInRow(categoryContent, element);\n\n const emojisInCurrentCategory = allVisibleEmojis(category);\n const currentEmojiIndex = emojisInCurrentCategory.indexOf(element);\n\n if (currentEmojiIndex === -1) {\n return null;\n }\n\n // the remainder until the end of the row\n const remainder = countInRow - (currentEmojiIndex % countInRow) - 1;\n const firstInNextRow = currentEmojiIndex + remainder + 1;\n\n if (emojisInCurrentCategory[firstInNextRow]) {\n // if we have a next row, search in the next row for the last available emoji\n for (let p = currentEmojiIndex + countInRow; p % countInRow >= 0; p--) {\n if (emojisInCurrentCategory[p]) {\n return emojisInCurrentCategory[p];\n }\n }\n }\n\n const indexInRow = currentEmojiIndex % countInRow;\n\n const nextVisibleCategory = nextCategory(category);\n const emojisInNextCategory = allVisibleEmojis(nextVisibleCategory);\n\n if (emojisInNextCategory[indexInRow]) {\n return emojisInNextCategory[indexInRow];\n }\n\n return emojisInNextCategory.at(0) ?? null;\n}\n","import { useCallback } from 'react';\n\nimport {\n useEmojiVariationPickerState,\n useSkinToneFanOpenState\n} from '../components/context/PickerContext';\n\nexport function useCloseAllOpenToggles() {\n const [variationPicker, setVariationPicker] = useEmojiVariationPickerState();\n const [skinToneFanOpen, setSkinToneFanOpen] = useSkinToneFanOpenState();\n\n const closeAllOpenToggles = useCallback(() => {\n if (variationPicker) {\n setVariationPicker(null);\n }\n\n if (skinToneFanOpen) {\n setSkinToneFanOpen(false);\n }\n }, [\n variationPicker,\n skinToneFanOpen,\n setVariationPicker,\n setSkinToneFanOpen\n ]);\n\n return closeAllOpenToggles;\n}\n\nexport function useHasOpenToggles() {\n const [variationPicker] = useEmojiVariationPickerState();\n const [skinToneFanOpen] = useSkinToneFanOpenState();\n\n return function hasOpenToggles() {\n return !!variationPicker || skinToneFanOpen;\n };\n}\n","import { useEffect } from 'react';\n\nimport { useBodyRef } from '../components/context/ElementRefContext';\nimport { useDisallowMouseRef } from '../components/context/PickerContext';\n\nexport function useDisallowMouseMove() {\n const DisallowMouseRef = useDisallowMouseRef();\n return function disallowMouseMove() {\n DisallowMouseRef.current = true;\n };\n}\n\nexport function useAllowMouseMove() {\n const DisallowMouseRef = useDisallowMouseRef();\n return function allowMouseMove() {\n DisallowMouseRef.current = false;\n };\n}\n\nexport function useIsMouseDisallowed() {\n const DisallowMouseRef = useDisallowMouseRef();\n return function isMouseDisallowed() {\n return DisallowMouseRef.current;\n };\n}\n\nexport function useOnMouseMove() {\n const BodyRef = useBodyRef();\n const allowMouseMove = useAllowMouseMove();\n const isMouseDisallowed = useIsMouseDisallowed();\n\n useEffect(() => {\n const bodyRef = BodyRef.current;\n bodyRef?.addEventListener('mousemove', onMouseMove, {\n passive: true\n });\n\n function onMouseMove() {\n if (isMouseDisallowed()) {\n allowMouseMove();\n }\n }\n return () => {\n bodyRef?.removeEventListener('mousemove', onMouseMove);\n };\n }, [BodyRef, allowMouseMove, isMouseDisallowed]);\n}\n","import { useCallback } from 'react';\n\nimport { focusElement, focusFirstElementChild } from '../DomUtils/focusElement';\nimport {\n useCategoryNavigationRef,\n useSearchInputRef,\n useSkinTonePickerRef\n} from '../components/context/ElementRefContext';\n\nexport function useFocusSearchInput() {\n const SearchInputRef = useSearchInputRef();\n\n return useCallback(() => {\n focusElement(SearchInputRef.current);\n }, [SearchInputRef]);\n}\n\nexport function useFocusSkinTonePicker() {\n const SkinTonePickerRef = useSkinTonePickerRef();\n\n return useCallback(() => {\n if (!SkinTonePickerRef.current) {\n return;\n }\n\n focusFirstElementChild(SkinTonePickerRef.current);\n }, [SkinTonePickerRef]);\n}\n\nexport function useFocusCategoryNavigation() {\n const CategoryNavigationRef = useCategoryNavigationRef();\n\n return useCallback(() => {\n if (!CategoryNavigationRef.current) {\n return;\n }\n\n focusFirstElementChild(CategoryNavigationRef.current);\n }, [CategoryNavigationRef]);\n}\n","import { scrollTo } from '../DomUtils/scrollTo';\nimport {\n usePickerMainRef,\n useSearchInputRef\n} from '../components/context/ElementRefContext';\nimport {\n FilterState,\n useFilterRef,\n useSearchTermState\n} from '../components/context/PickerContext';\nimport { useSearchResultsConfig } from '../config/useConfig';\nimport { DataEmoji } from '../dataUtils/DataTypes';\nimport { emojiNames } from '../dataUtils/emojiUtils';\n\nimport { useFocusSearchInput } from './useFocus';\n\nfunction useSetFilterRef() {\n const filterRef = useFilterRef();\n\n return function setFilter(\n setter: FilterState | ((current: FilterState) => FilterState)\n ): void {\n if (typeof setter === 'function') {\n return setFilter(setter(filterRef.current));\n }\n\n filterRef.current = setter;\n };\n}\n\nexport function useClearSearch() {\n const applySearch = useApplySearch();\n const SearchInputRef = useSearchInputRef();\n const focusSearchInput = useFocusSearchInput();\n\n return function clearSearch() {\n if (SearchInputRef.current) {\n SearchInputRef.current.value = '';\n }\n\n applySearch('');\n focusSearchInput();\n };\n}\n\nexport function useAppendSearch() {\n const SearchInputRef = useSearchInputRef();\n const applySearch = useApplySearch();\n\n return function appendSearch(str: string) {\n if (SearchInputRef.current) {\n SearchInputRef.current.value = `${SearchInputRef.current.value}${str}`;\n applySearch(getNormalizedSearchTerm(SearchInputRef.current.value));\n } else {\n applySearch(getNormalizedSearchTerm(str));\n }\n };\n}\n\nexport function useFilter() {\n const SearchInputRef = useSearchInputRef();\n const filterRef = useFilterRef();\n const setFilterRef = useSetFilterRef();\n const applySearch = useApplySearch();\n\n const [searchTerm] = useSearchTermState();\n const statusSearchResults = getStatusSearchResults(\n filterRef.current,\n searchTerm\n );\n\n return {\n onChange,\n searchTerm,\n SearchInputRef,\n statusSearchResults\n };\n\n function onChange(inputValue: string) {\n const filter = filterRef.current;\n\n const nextValue = inputValue.toLowerCase();\n\n if (filter?.[nextValue] || nextValue.length <= 1) {\n return applySearch(nextValue);\n }\n\n const longestMatch = findLongestMatch(nextValue, filter);\n\n if (!longestMatch) {\n // Can we even get here?\n // If so, we need to search among all emojis\n return applySearch(nextValue);\n }\n\n setFilterRef(current =>\n Object.assign(current, {\n [nextValue]: filterEmojiObjectByKeyword(longestMatch, nextValue)\n })\n );\n applySearch(nextValue);\n }\n}\n\nfunction useApplySearch() {\n const [, setSearchTerm] = useSearchTermState();\n const PickerMainRef = usePickerMainRef();\n\n return function applySearch(searchTerm: string) {\n requestAnimationFrame(() => {\n setSearchTerm(searchTerm ? searchTerm?.toLowerCase() : searchTerm).then(\n () => {\n scrollTo(PickerMainRef.current, 0);\n }\n );\n });\n };\n}\n\nfunction filterEmojiObjectByKeyword(\n emojis: FilterDict,\n keyword: string\n): FilterDict {\n const filtered: FilterDict = {};\n\n for (const unified in emojis) {\n const emoji = emojis[unified];\n\n if (hasMatch(emoji, keyword)) {\n filtered[unified] = emoji;\n }\n }\n\n return filtered;\n}\n\nfunction hasMatch(emoji: DataEmoji, keyword: string): boolean {\n return emojiNames(emoji).some(name => name.includes(keyword));\n}\n\nexport function useIsEmojiFiltered(): (unified: string) => boolean {\n const { current: filter } = useFilterRef();\n const [searchTerm] = useSearchTermState();\n\n return unified => isEmojiFilteredBySearchTerm(unified, filter, searchTerm);\n}\n\nfunction isEmojiFilteredBySearchTerm(\n unified: string,\n filter: FilterState,\n searchTerm: string\n): boolean {\n if (!filter || !searchTerm) {\n return false;\n }\n\n return !filter[searchTerm]?.[unified];\n}\n\nexport type FilterDict = Record<string, DataEmoji>;\n\nfunction findLongestMatch(\n keyword: string,\n dict: Record<string, FilterDict> | null\n): FilterDict | null {\n if (!dict) {\n return null;\n }\n\n if (dict[keyword]) {\n return dict[keyword];\n }\n\n const longestMatchingKey = Object.keys(dict)\n .sort((a, b) => b.length - a.length)\n .find(key => keyword.includes(key));\n\n if (longestMatchingKey) {\n return dict[longestMatchingKey];\n }\n\n return null;\n}\n\nexport function getNormalizedSearchTerm(str: string): string {\n if (!str || typeof str !== 'string') {\n return '';\n }\n\n return str.trim().toLowerCase();\n}\n\nfunction getStatusSearchResults(\n filterState: FilterState,\n searchTerm: string\n): string {\n if (!filterState?.[searchTerm]) return '';\n\n const searchResultsCount =\n Object.entries(filterState?.[searchTerm])?.length || 0;\n // eslint-disable-next-line react-hooks/rules-of-hooks\n return useSearchResultsConfig(searchResultsCount);\n}\n","import { emojiFromElement, NullableElement } from '../DomUtils/selectors';\nimport { useSetAnchoredEmojiRef } from '../components/context/ElementRefContext';\nimport { useEmojiVariationPickerState } from '../components/context/PickerContext';\n\nexport default function useSetVariationPicker() {\n const setAnchoredEmojiRef = useSetAnchoredEmojiRef();\n const [, setEmojiVariationPicker] = useEmojiVariationPickerState();\n\n return function setVariationPicker(element: NullableElement) {\n const [emoji] = emojiFromElement(element);\n\n if (emoji) {\n setAnchoredEmojiRef(element);\n setEmojiVariationPicker(emoji);\n }\n };\n}\n","import { useSkinTonePickerLocationConfig } from '../config/useConfig';\nimport { SkinTonePickerLocation } from '../types/exposedTypes';\n\nexport function useShouldShowSkinTonePicker() {\n const skinTonePickerLocationConfig = useSkinTonePickerLocationConfig();\n\n return function shouldShowSkinTonePicker(location: SkinTonePickerLocation) {\n return skinTonePickerLocationConfig === location;\n };\n}\n\nexport function useIsSkinToneInSearch() {\n const skinTonePickerLocationConfig = useSkinTonePickerLocationConfig();\n\n return skinTonePickerLocationConfig === SkinTonePickerLocation.SEARCH;\n}\n\nexport function useIsSkinToneInPreview() {\n const skinTonePickerLocationConfig = useSkinTonePickerLocationConfig();\n\n return skinTonePickerLocationConfig === SkinTonePickerLocation.PREVIEW;\n}\n","import { useCallback, useEffect, useMemo } from 'react';\n\nimport { hasNextElementSibling } from '../DomUtils/elementPositionInRow';\nimport {\n focusNextElementSibling,\n focusPrevElementSibling\n} from '../DomUtils/focusElement';\nimport { getActiveElement } from '../DomUtils/getActiveElement';\nimport {\n focusAndClickFirstVisibleEmoji,\n focusFirstVisibleEmoji,\n focusNextVisibleEmoji,\n focusPrevVisibleEmoji,\n focusVisibleEmojiOneRowDown,\n focusVisibleEmojiOneRowUp\n} from '../DomUtils/keyboardNavigation';\nimport { useScrollTo } from '../DomUtils/scrollTo';\nimport { buttonFromTarget } from '../DomUtils/selectors';\nimport {\n useBodyRef,\n useCategoryNavigationRef,\n usePickerMainRef,\n useSearchInputRef,\n useSkinTonePickerRef\n} from '../components/context/ElementRefContext';\nimport { useSkinToneFanOpenState } from '../components/context/PickerContext';\nimport { useSearchDisabledConfig } from '../config/useConfig';\n\nimport {\n useCloseAllOpenToggles,\n useHasOpenToggles\n} from './useCloseAllOpenToggles';\nimport { useDisallowMouseMove } from './useDisallowMouseMove';\nimport { useAppendSearch, useClearSearch } from './useFilter';\nimport {\n useFocusCategoryNavigation,\n useFocusSearchInput,\n useFocusSkinTonePicker\n} from './useFocus';\nimport useIsSearchMode from './useIsSearchMode';\nimport useSetVariationPicker from './useSetVariationPicker';\nimport {\n useIsSkinToneInPreview,\n useIsSkinToneInSearch\n} from './useShouldShowSkinTonePicker';\n\nenum KeyboardEvents {\n ArrowDown = 'ArrowDown',\n ArrowUp = 'ArrowUp',\n ArrowLeft = 'ArrowLeft',\n ArrowRight = 'ArrowRight',\n Escape = 'Escape',\n Enter = 'Enter',\n Space = ' '\n}\n\nexport function useKeyboardNavigation() {\n usePickerMainKeyboardEvents();\n useSearchInputKeyboardEvents();\n useSkinTonePickerKeyboardEvents();\n useCategoryNavigationKeyboardEvents();\n useBodyKeyboardEvents();\n}\n\nfunction usePickerMainKeyboardEvents() {\n const PickerMainRef = usePickerMainRef();\n const clearSearch = useClearSearch();\n const scrollTo = useScrollTo();\n const SearchInputRef = useSearchInputRef();\n const focusSearchInput = useFocusSearchInput();\n const hasOpenToggles = useHasOpenToggles();\n const disallowMouseMove = useDisallowMouseMove();\n\n const closeAllOpenToggles = useCloseAllOpenToggles();\n\n const onKeyDown = useMemo(\n () =>\n function onKeyDown(event: KeyboardEvent) {\n const { key } = event;\n\n disallowMouseMove();\n switch (key) {\n // eslint-disable-next-line no-fallthrough\n case KeyboardEvents.Escape:\n event.preventDefault();\n if (hasOpenToggles()) {\n closeAllOpenToggles();\n return;\n }\n clearSearch();\n scrollTo(0);\n focusSearchInput();\n break;\n }\n },\n [\n scrollTo,\n clearSearch,\n closeAllOpenToggles,\n focusSearchInput,\n hasOpenToggles,\n disallowMouseMove\n ]\n );\n\n useEffect(() => {\n const current = PickerMainRef.current;\n\n if (!current) {\n return;\n }\n\n current.addEventListener('keydown', onKeyDown);\n\n return () => {\n current.removeEventListener('keydown', onKeyDown);\n };\n }, [PickerMainRef, SearchInputRef, scrollTo, onKeyDown]);\n}\n\nfunction useSearchInputKeyboardEvents() {\n const focusSkinTonePicker = useFocusSkinTonePicker();\n const PickerMainRef = usePickerMainRef();\n const BodyRef = useBodyRef();\n const SearchInputRef = useSearchInputRef();\n const [, setSkinToneFanOpenState] = useSkinToneFanOpenState();\n const goDownFromSearchInput = useGoDownFromSearchInput();\n const isSkinToneInSearch = useIsSkinToneInSearch();\n\n const onKeyDown = useMemo(\n () =>\n function onKeyDown(event: KeyboardEvent) {\n const { key } = event;\n\n switch (key) {\n case KeyboardEvents.ArrowRight:\n if (!isSkinToneInSearch) {\n return;\n }\n event.preventDefault();\n setSkinToneFanOpenState(true);\n focusSkinTonePicker();\n break;\n case KeyboardEvents.ArrowDown:\n event.preventDefault();\n goDownFromSearchInput();\n break;\n case KeyboardEvents.Enter:\n event.preventDefault();\n focusAndClickFirstVisibleEmoji(BodyRef.current);\n break;\n }\n },\n [\n focusSkinTonePicker,\n goDownFromSearchInput,\n setSkinToneFanOpenState,\n BodyRef,\n isSkinToneInSearch\n ]\n );\n\n useEffect(() => {\n const current = SearchInputRef.current;\n\n if (!current) {\n return;\n }\n\n current.addEventListener('keydown', onKeyDown);\n\n return () => {\n current.removeEventListener('keydown', onKeyDown);\n };\n }, [PickerMainRef, SearchInputRef, onKeyDown]);\n}\n\nfunction useSkinTonePickerKeyboardEvents() {\n const SkinTonePickerRef = useSkinTonePickerRef();\n const focusSearchInput = useFocusSearchInput();\n const SearchInputRef = useSearchInputRef();\n const goDownFromSearchInput = useGoDownFromSearchInput();\n const [isOpen, setIsOpen] = useSkinToneFanOpenState();\n const isSkinToneInPreview = useIsSkinToneInPreview();\n const isSkinToneInSearch = useIsSkinToneInSearch();\n const onType = useOnType();\n\n const onKeyDown = useMemo(\n () =>\n // eslint-disable-next-line complexity\n function onKeyDown(event: KeyboardEvent) {\n const { key } = event;\n\n if (isSkinToneInSearch) {\n switch (key) {\n case KeyboardEvents.ArrowLeft:\n event.preventDefault();\n if (!isOpen) {\n return focusSearchInput();\n }\n focusNextSkinTone(focusSearchInput);\n break;\n case KeyboardEvents.ArrowRight:\n event.preventDefault();\n if (!isOpen) {\n return focusSearchInput();\n }\n focusPrevSkinTone();\n break;\n case KeyboardEvents.ArrowDown:\n event.preventDefault();\n if (isOpen) {\n setIsOpen(false);\n }\n goDownFromSearchInput();\n break;\n default:\n onType(event);\n break;\n }\n }\n\n if (isSkinToneInPreview) {\n switch (key) {\n case KeyboardEvents.ArrowUp:\n event.preventDefault();\n if (!isOpen) {\n return focusSearchInput();\n }\n focusNextSkinTone(focusSearchInput);\n break;\n case KeyboardEvents.ArrowDown:\n event.preventDefault();\n if (!isOpen) {\n return focusSearchInput();\n }\n focusPrevSkinTone();\n break;\n default:\n onType(event);\n break;\n }\n }\n },\n [\n isOpen,\n focusSearchInput,\n setIsOpen,\n goDownFromSearchInput,\n onType,\n isSkinToneInPreview,\n isSkinToneInSearch\n ]\n );\n\n useEffect(() => {\n const current = SkinTonePickerRef.current;\n\n if (!current) {\n return;\n }\n\n current.addEventListener('keydown', onKeyDown);\n\n return () => {\n current.removeEventListener('keydown', onKeyDown);\n };\n }, [SkinTonePickerRef, SearchInputRef, isOpen, onKeyDown]);\n}\n\nfunction useCategoryNavigationKeyboardEvents() {\n const focusSearchInput = useFocusSearchInput();\n const CategoryNavigationRef = useCategoryNavigationRef();\n const BodyRef = useBodyRef();\n const onType = useOnType();\n\n const onKeyDown = useMemo(\n () =>\n function onKeyDown(event: KeyboardEvent) {\n const { key } = event;\n\n switch (key) {\n case KeyboardEvents.ArrowUp:\n event.preventDefault();\n focusSearchInput();\n break;\n case KeyboardEvents.ArrowRight:\n event.preventDefault();\n focusNextElementSibling(getActiveElement());\n break;\n case KeyboardEvents.ArrowLeft:\n event.preventDefault();\n focusPrevElementSibling(getActiveElement());\n break;\n case KeyboardEvents.ArrowDown:\n event.preventDefault();\n focusFirstVisibleEmoji(BodyRef.current);\n break;\n default:\n onType(event);\n break;\n }\n },\n [BodyRef, focusSearchInput, onType]\n );\n\n useEffect(() => {\n const current = CategoryNavigationRef.current;\n\n if (!current) {\n return;\n }\n\n current.addEventListener('keydown', onKeyDown);\n\n return () => {\n current.removeEventListener('keydown', onKeyDown);\n };\n }, [CategoryNavigationRef, BodyRef, onKeyDown]);\n}\n\nfunction useBodyKeyboardEvents() {\n const BodyRef = useBodyRef();\n const goUpFromBody = useGoUpFromBody();\n const setVariationPicker = useSetVariationPicker();\n const hasOpenToggles = useHasOpenToggles();\n const closeAllOpenToggles = useCloseAllOpenToggles();\n\n const onType = useOnType();\n\n const onKeyDown = useMemo(\n () =>\n // eslint-disable-next-line complexity\n function onKeyDown(event: KeyboardEvent) {\n const { key } = event;\n\n const activeElement = buttonFromTarget(getActiveElement());\n\n switch (key) {\n case KeyboardEvents.ArrowRight:\n event.preventDefault();\n focusNextVisibleEmoji(activeElement);\n break;\n case KeyboardEvents.ArrowLeft:\n event.preventDefault();\n focusPrevVisibleEmoji(activeElement);\n break;\n case KeyboardEvents.ArrowDown:\n event.preventDefault();\n if (hasOpenToggles()) {\n closeAllOpenToggles();\n break;\n }\n focusVisibleEmojiOneRowDown(activeElement);\n break;\n case KeyboardEvents.ArrowUp:\n event.preventDefault();\n if (hasOpenToggles()) {\n closeAllOpenToggles();\n break;\n }\n focusVisibleEmojiOneRowUp(activeElement, goUpFromBody);\n break;\n case KeyboardEvents.Space:\n event.preventDefault();\n setVariationPicker(event.target as HTMLElement);\n break;\n default:\n onType(event);\n break;\n }\n },\n [\n goUpFromBody,\n onType,\n setVariationPicker,\n hasOpenToggles,\n closeAllOpenToggles\n ]\n );\n\n useEffect(() => {\n const current = BodyRef.current;\n\n if (!current) {\n return;\n }\n\n current.addEventListener('keydown', onKeyDown);\n\n return () => {\n current.removeEventListener('keydown', onKeyDown);\n };\n }, [BodyRef, onKeyDown]);\n}\n\nfunction useGoDownFromSearchInput() {\n const focusCategoryNavigation = useFocusCategoryNavigation();\n const isSearchMode = useIsSearchMode();\n const BodyRef = useBodyRef();\n\n return useCallback(\n function goDownFromSearchInput() {\n if (isSearchMode) {\n return focusFirstVisibleEmoji(BodyRef.current);\n }\n return focusCategoryNavigation();\n },\n [BodyRef, focusCategoryNavigation, isSearchMode]\n );\n}\n\nfunction useGoUpFromBody() {\n const focusSearchInput = useFocusSearchInput();\n const focusCategoryNavigation = useFocusCategoryNavigation();\n const isSearchMode = useIsSearchMode();\n\n return useCallback(\n function goUpFromEmoji() {\n if (isSearchMode) {\n return focusSearchInput();\n }\n return focusCategoryNavigation();\n },\n [focusSearchInput, isSearchMode, focusCategoryNavigation]\n );\n}\n\nfunction focusNextSkinTone(exitLeft: () => void) {\n const currentSkinTone = getActiveElement();\n\n if (!currentSkinTone) {\n return;\n }\n\n if (!hasNextElementSibling(currentSkinTone)) {\n exitLeft();\n }\n\n focusNextElementSibling(currentSkinTone);\n}\n\nfunction focusPrevSkinTone() {\n const currentSkinTone = getActiveElement();\n\n if (!currentSkinTone) {\n return;\n }\n\n focusPrevElementSibling(currentSkinTone);\n}\n\nfunction useOnType() {\n const appendSearch = useAppendSearch();\n const focusSearchInput = useFocusSearchInput();\n const searchDisabled = useSearchDisabledConfig();\n const closeAllOpenToggles = useCloseAllOpenToggles();\n\n return function onType(event: KeyboardEvent) {\n const { key } = event;\n\n if (hasModifier(event) || searchDisabled) {\n return;\n }\n\n if (key.match(/(^[a-zA-Z0-9]$){1}/)) {\n event.preventDefault();\n closeAllOpenToggles();\n focusSearchInput();\n appendSearch(key);\n }\n };\n}\n\nfunction hasModifier(event: KeyboardEvent): boolean {\n const { metaKey, ctrlKey, altKey } = event;\n\n return metaKey || ctrlKey || altKey;\n}\n","import { GetEmojiUrl } from '../components/emoji/BaseEmojiProps';\nimport { DataEmoji } from '../dataUtils/DataTypes';\nimport { emojiUnified, emojiVariations } from '../dataUtils/emojiUtils';\nimport { EmojiStyle } from '../types/exposedTypes';\nimport { Dimensions } from '../virtualization/virtualizationHelpers';\n\n// eslint-disable-next-line max-params\nexport function preloadEmojiIfNeeded(\n emoji: undefined | DataEmoji,\n emojiStyles: EmojiStyle,\n scrollTop: number,\n clientHeight: number,\n topOffset: number,\n style: { top: number } | undefined,\n dimensions: Dimensions,\n getEmojiUrl: GetEmojiUrl\n): void {\n if (!emoji) {\n return;\n }\n\n if (emojiStyles === EmojiStyle.NATIVE) {\n return;\n }\n\n const unified = emojiUnified(emoji);\n\n if (preloadedEmojs.has(unified)) {\n return;\n }\n\n // preload only if the emoji is a few rows below the viewport\n if (!style || !dimensions) {\n return;\n }\n\n setTimeout(() => {\n const emojiTop = topOffset + style.top;\n const viewportBottom = scrollTop + clientHeight;\n\n const isJustBelowViewport =\n emojiTop >= viewportBottom &&\n emojiTop < viewportBottom + dimensions.emojiSize * 2;\n\n if (isJustBelowViewport) {\n preloadEmoji(getEmojiUrl, emoji, emojiStyles);\n }\n });\n}\n\nexport function preloadEmoji(\n getEmojiUrl: GetEmojiUrl,\n emoji: undefined | DataEmoji,\n emojiStyle: EmojiStyle\n): void {\n if (!emoji) {\n return;\n }\n\n const unified = emojiUnified(emoji);\n\n if (preloadedEmojs.has(unified)) {\n return;\n }\n preloadedEmojs.add(unified);\n\n emojiVariations(emoji)\n .concat(unified)\n .forEach(variation => {\n const emojiUrl = getEmojiUrl(variation, emojiStyle);\n preloadImage(emojiUrl);\n });\n}\n\nexport const preloadedEmojs: Set<string> = new Set();\n\nfunction preloadImage(url: string): void {\n const image = new Image();\n image.src = url;\n}\n","import { useEffect } from 'react';\n\nimport { buttonFromTarget, emojiFromElement } from '../DomUtils/selectors';\nimport { useBodyRef } from '../components/context/ElementRefContext';\nimport { useEmojiStyleConfig, useGetEmojiUrlConfig } from '../config/useConfig';\nimport { emojiHasVariations } from '../dataUtils/emojiSelectors';\nimport { EmojiStyle } from '../types/exposedTypes';\n\nimport { preloadEmoji } from './preloadEmoji';\n\nexport function useOnFocus() {\n const BodyRef = useBodyRef();\n const emojiStyle = useEmojiStyleConfig();\n const getEmojiUrl = useGetEmojiUrlConfig();\n\n useEffect(() => {\n if (emojiStyle === EmojiStyle.NATIVE) {\n return;\n }\n\n const bodyRef = BodyRef.current;\n\n bodyRef?.addEventListener('focusin', onFocus);\n\n return () => {\n bodyRef?.removeEventListener('focusin', onFocus);\n };\n\n function onFocus(event: FocusEvent) {\n const button = buttonFromTarget(event.target as HTMLElement);\n\n if (!button) {\n return;\n }\n\n const [emoji] = emojiFromElement(button);\n\n if (!emoji) {\n return;\n }\n\n if (emojiHasVariations(emoji)) {\n preloadEmoji(getEmojiUrl, emoji, emojiStyle);\n }\n }\n }, [BodyRef, emojiStyle, getEmojiUrl]);\n}\n","import { cx } from 'flairup';\nimport * as React from 'react';\n\nimport { ClassNames } from '../../DomUtils/classNames';\nimport { stylesheet } from '../../Stylesheet/stylesheet';\nimport {\n useClassNameConfig,\n useStyleConfig,\n useThemeConfig\n} from '../../config/useConfig';\nimport useIsSearchMode from '../../hooks/useIsSearchMode';\nimport { useKeyboardNavigation } from '../../hooks/useKeyboardNavigation';\nimport { useOnFocus } from '../../hooks/useOnFocus';\nimport { Theme } from '../../types/exposedTypes';\nimport { usePickerMainRef } from '../context/ElementRefContext';\nimport {\n PickerContextProvider,\n useReactionsModeState\n} from '../context/PickerContext';\n\ntype Props = Readonly<{\n children: React.ReactNode;\n}>;\n\nexport const DEFAULT_LABEL_HEIGHT = 40;\n\nexport default function PickerMain({ children }: Props) {\n return (\n <PickerContextProvider>\n <PickerRootElement>{children}</PickerRootElement>\n </PickerContextProvider>\n );\n}\n\ntype RootProps = Readonly<{\n className?: string;\n style?: React.CSSProperties;\n children: React.ReactNode;\n}>;\n\nfunction PickerRootElement({ children }: RootProps) {\n const [reactionsMode] = useReactionsModeState();\n const theme = useThemeConfig();\n const searchModeActive = useIsSearchMode();\n const PickerMainRef = usePickerMainRef();\n const className = useClassNameConfig();\n const style = useStyleConfig();\n\n useKeyboardNavigation();\n useOnFocus();\n\n const { width, height, ...styleProps } = style || {};\n\n return (\n <aside\n className={cx(\n styles.main,\n styles.baseVariables,\n theme === Theme.DARK && styles.darkTheme,\n theme === Theme.AUTO && styles.autoThemeDark,\n {\n [ClassNames.searchActive]: searchModeActive\n },\n reactionsMode && styles.reactionsMenu,\n className\n )}\n ref={PickerMainRef}\n style={{\n ...styleProps,\n ...(!reactionsMode && { height, width })\n }}\n >\n {children}\n </aside>\n );\n}\n\nconst DarkTheme = {\n '--epr-emoji-variation-picker-bg-color':\n 'var(--epr-dark-emoji-variation-picker-bg-color)',\n '--epr-hover-bg-color-reduced-opacity':\n 'var(--epr-dark-hover-bg-color-reduced-opacity)',\n '--epr-highlight-color': 'var(--epr-dark-highlight-color)',\n '--epr-text-color': 'var(--epr-dark-text-color)',\n '--epr-hover-bg-color': 'var(--epr-dark-hover-bg-color)',\n '--epr-focus-bg-color': 'var(--epr-dark-focus-bg-color)',\n '--epr-search-input-bg-color': 'var(--epr-dark-search-input-bg-color)',\n '--epr-category-label-bg-color': 'var(--epr-dark-category-label-bg-color)',\n '--epr-picker-border-color': 'var(--epr-dark-picker-border-color)',\n '--epr-bg-color': 'var(--epr-dark-bg-color)',\n '--epr-reactions-bg-color': 'var(--epr-dark-reactions-bg-color)',\n '--epr-search-input-bg-color-active':\n 'var(--epr-dark-search-input-bg-color-active)',\n '--epr-emoji-variation-indicator-color':\n 'var(--epr-dark-emoji-variation-indicator-color)',\n '--epr-category-icon-active-color':\n 'var(--epr-dark-category-icon-active-color)',\n '--epr-skin-tone-picker-menu-color':\n 'var(--epr-dark-skin-tone-picker-menu-color)',\n '--epr-skin-tone-outer-border-color':\n 'var(--epr-dark-skin-tone-outer-border-color)',\n '--epr-skin-tone-inner-border-color':\n 'var(--epr-dark-skin-tone-inner-border-color)'\n};\n\nconst styles = stylesheet.create({\n main: {\n '.': ['epr-main', ClassNames.emojiPicker],\n position: 'relative',\n display: 'flex',\n flexDirection: 'column',\n borderWidth: '1px',\n borderStyle: 'solid',\n borderRadius: 'var(--epr-picker-border-radius)',\n borderColor: 'var(--epr-picker-border-color)',\n backgroundColor: 'var(--epr-bg-color)',\n overflow: 'hidden',\n transition: 'height 0.3s ease-in-out, background-color 0.1s ease-in-out',\n '*': {\n boxSizing: 'border-box',\n fontFamily: 'sans-serif'\n }\n },\n baseVariables: {\n '--': {\n '--epr-highlight-color': '#007aeb',\n '--epr-hover-bg-color': '#e5f0fa',\n '--epr-hover-bg-color-reduced-opacity': '#e5f0fa80',\n '--epr-focus-bg-color': '#e0f0ff',\n '--epr-text-color': '#858585',\n '--epr-search-input-bg-color': '#f6f6f6',\n '--epr-picker-border-color': '#e7e7e7',\n '--epr-bg-color': '#fff',\n '--epr-reactions-bg-color': '#ffffff90',\n '--epr-category-icon-active-color': '#6aa8de',\n '--epr-skin-tone-picker-menu-color': '#ffffff95',\n '--epr-skin-tone-outer-border-color': '#555555',\n '--epr-skin-tone-inner-border-color': 'var(--epr-bg-color)',\n\n '--epr-horizontal-padding': '10px',\n\n '--epr-picker-border-radius': '8px',\n\n /* Header */\n '--epr-header-padding': '15px var(--epr-horizontal-padding)',\n\n /* Skin Tone Picker */\n '--epr-active-skin-tone-indicator-border-color':\n 'var(--epr-highlight-color)',\n '--epr-active-skin-hover-color': 'var(--epr-hover-bg-color)',\n\n /* Search */\n '--epr-search-input-bg-color-active': 'var(--epr-search-input-bg-color)',\n '--epr-search-input-padding': '0 30px',\n '--epr-search-input-border-radius': '8px',\n '--epr-search-input-height': '40px',\n '--epr-search-input-text-color': 'var(--epr-text-color)',\n '--epr-search-input-placeholder-color': 'var(--epr-text-color)',\n '--epr-search-bar-inner-padding': 'var(--epr-horizontal-padding)',\n '--epr-search-border-color': 'var(--epr-search-input-bg-color)',\n '--epr-search-border-color-active': 'var(--epr-highlight-color)',\n\n /* Category Navigation */\n '--epr-category-navigation-button-size': '30px',\n\n /* Variation Picker */\n '--epr-emoji-variation-picker-height': '45px',\n '--epr-emoji-variation-picker-bg-color': 'var(--epr-bg-color)',\n\n /* Preview */\n '--epr-preview-height': '70px',\n '--epr-preview-text-size': '14px',\n '--epr-preview-text-padding': '0 var(--epr-horizontal-padding)',\n '--epr-preview-border-color': 'var(--epr-picker-border-color)',\n '--epr-preview-text-color': 'var(--epr-text-color)',\n\n /* Category */\n '--epr-category-padding': '0 var(--epr-horizontal-padding)',\n\n /* Category Label */\n '--epr-category-label-bg-color': '#ffffffe6',\n '--epr-category-label-text-color': 'var(--epr-text-color)',\n '--epr-category-label-padding': '0 var(--epr-horizontal-padding)',\n '--epr-category-label-height': `${DEFAULT_LABEL_HEIGHT}px`,\n\n /* Emoji */\n '--epr-emoji-size': '30px',\n '--epr-emoji-padding': '5px',\n '--epr-emoji-fullsize':\n 'calc(var(--epr-emoji-size) + var(--epr-emoji-padding) * 2)',\n '--epr-emoji-hover-color': 'var(--epr-hover-bg-color)',\n '--epr-emoji-variation-indicator-color': 'var(--epr-picker-border-color)',\n '--epr-emoji-variation-indicator-color-hover': 'var(--epr-text-color)',\n\n /* Z-Index */\n '--epr-header-overlay-z-index': '3',\n '--epr-emoji-variations-indictator-z-index': '1',\n '--epr-category-label-z-index': '2',\n '--epr-skin-variation-picker-z-index': '5',\n '--epr-preview-z-index': '6',\n\n /* Dark Theme Variables */\n '--epr-dark': '#000',\n '--epr-dark-emoji-variation-picker-bg-color': 'var(--epr-dark)',\n '--epr-dark-highlight-color': '#c0c0c0',\n '--epr-dark-text-color': 'var(--epr-highlight-color)',\n '--epr-dark-hover-bg-color': '#363636f6',\n '--epr-dark-hover-bg-color-reduced-opacity': '#36363680',\n '--epr-dark-focus-bg-color': '#474747',\n '--epr-dark-search-input-bg-color': '#333333',\n '--epr-dark-category-label-bg-color': '#222222e6',\n '--epr-dark-picker-border-color': '#151617',\n '--epr-dark-bg-color': '#222222',\n '--epr-dark-reactions-bg-color': '#22222290',\n '--epr-dark-search-input-bg-color-active': 'var(--epr-dark)',\n '--epr-dark-emoji-variation-indicator-color': '#444',\n '--epr-dark-category-icon-active-color': '#3271b7',\n '--epr-dark-skin-tone-picker-menu-color': '#22222295',\n '--epr-dark-skin-tone-outer-border-color':\n 'var(--epr-dark-picker-border-color)',\n '--epr-dark-skin-tone-inner-border-color': '#00000000'\n }\n },\n autoThemeDark: {\n '.': ClassNames.autoTheme,\n '@media (prefers-color-scheme: dark)': {\n '--': DarkTheme\n }\n },\n darkTheme: {\n '.': ClassNames.darkTheme,\n '--': DarkTheme\n },\n reactionsMenu: {\n '.': 'epr-reactions',\n height: '50px',\n display: 'inline-flex',\n backgroundColor: 'var(--epr-reactions-bg-color)',\n // @ts-ignore - backdropFilter is not recognized.\n backdropFilter: 'blur(8px)',\n '--': {\n '--epr-picker-border-radius': '50px'\n }\n }\n});\n","import { DEFAULT_LABEL_HEIGHT } from '../components/main/PickerMain';\n\nimport { ClassNames, asSelectors } from './classNames';\nimport { NullableElement } from './selectors';\n\nexport function elementCountInRow(\n parent: NullableElement,\n element: NullableElement\n): number {\n if (!parent || !element) {\n return 0;\n }\n\n const parentWidth = parent.getBoundingClientRect().width;\n const elementWidth = element.getBoundingClientRect().width;\n return Math.floor(parentWidth / elementWidth);\n}\n\nexport function firstVisibleElementInContainer(\n parent: NullableElement,\n elements: HTMLElement[],\n maxVisibilityDiffThreshold = 0\n): NullableElement {\n if (!parent || !elements.length) {\n return null;\n }\n\n const parentTop = parent.getBoundingClientRect().top;\n const parentBottom = parent.getBoundingClientRect().bottom;\n const parentTopWithLabel = parentTop + getLabelHeight(parent);\n\n const visibleElements = elements.find(element => {\n const elementTop = element.getBoundingClientRect().top;\n const elementBottom = element.getBoundingClientRect().bottom;\n const maxVisibilityDiffPixels =\n element.clientHeight * maxVisibilityDiffThreshold;\n\n const elementTopWithAllowedDiff = elementTop + maxVisibilityDiffPixels;\n const elementBottomWithAllowedDiff =\n elementBottom - maxVisibilityDiffPixels;\n\n if (elementTopWithAllowedDiff < parentTopWithLabel) {\n return false;\n }\n\n return (\n (elementTopWithAllowedDiff >= parentTop &&\n elementTopWithAllowedDiff <= parentBottom) ||\n (elementBottomWithAllowedDiff >= parentTop &&\n elementBottomWithAllowedDiff <= parentBottom)\n );\n });\n\n return visibleElements || null;\n}\n\nexport function hasNextElementSibling(element: HTMLElement) {\n return !!element.nextElementSibling;\n}\n\nexport function getLabelHeight(parentNode: NullableElement) {\n if (!parentNode) {\n return DEFAULT_LABEL_HEIGHT;\n }\n\n const label = parentNode.querySelector(asSelectors(ClassNames.label));\n\n if (label) {\n const height = label.getBoundingClientRect().height;\n if (height > 0) {\n return height;\n }\n }\n\n // fallback to default\n return DEFAULT_LABEL_HEIGHT;\n}\n","import { DataEmoji } from '../dataUtils/DataTypes';\nimport {\n emojiByUnified,\n unifiedWithoutSkinTone\n} from '../dataUtils/emojiSelectors';\n\nimport { asSelectors, ClassNames } from './classNames';\nimport { firstVisibleElementInContainer } from './elementPositionInRow';\n\nexport type NullableElement = HTMLElement | null;\n\nexport const EmojiButtonSelector = `button${asSelectors(ClassNames.emoji)}`;\nexport const VisibleEmojiSelector = [\n EmojiButtonSelector,\n asSelectors(ClassNames.visible),\n `:not(${asSelectors(ClassNames.hidden)})`\n].join('');\n\nexport function buttonFromTarget(\n emojiElement: NullableElement\n): HTMLButtonElement | null {\n return emojiElement?.closest(EmojiButtonSelector) ?? null;\n}\n\nexport function isEmojiButton(element: NullableElement): boolean {\n if (!element) {\n return false;\n }\n\n return element.matches(EmojiButtonSelector);\n}\n\nexport function emojiFromElement(\n element: NullableElement\n): [DataEmoji, string] | [] {\n const originalUnified = originalUnifiedFromEmojiElement(element);\n const unified = unifiedFromEmojiElement(element);\n\n if (!originalUnified) {\n return [];\n }\n\n const emoji = emojiByUnified(unified ?? originalUnified);\n\n if (!emoji) {\n return [];\n }\n\n return [emoji, unified as string];\n}\n\nexport function isEmojiElement(element: NullableElement): boolean {\n return Boolean(\n element?.matches(EmojiButtonSelector) ||\n element?.parentElement?.matches(EmojiButtonSelector)\n );\n}\n\nexport function categoryLabelFromCategory(\n category: NullableElement\n): NullableElement {\n return category?.querySelector(asSelectors(ClassNames.label)) ?? null;\n}\n\nexport function closestCategoryLabel(\n element: NullableElement\n): NullableElement {\n const category = closestCategory(element);\n return categoryLabelFromCategory(category);\n}\n\nexport function elementHeight(element: NullableElement): number {\n return element?.clientHeight ?? 0;\n}\n\nexport function emojiTrueOffsetTop(element: NullableElement): number {\n if (!element) {\n return 0;\n }\n\n const button = buttonFromTarget(element);\n const category = closestCategory(button);\n\n // compensate for the label height\n const labelHeight = categoryLabelHeight(category);\n\n return elementOffsetTop(button) + elementOffsetTop(category) + labelHeight;\n}\n\nexport function categoryLabelHeight(category: NullableElement): number {\n if (!category) {\n return 0;\n }\n\n const categoryWithoutLabel = category.querySelector(\n asSelectors(ClassNames.categoryContent)\n );\n\n return (\n (category?.clientHeight ?? 0) - (categoryWithoutLabel?.clientHeight ?? 0)\n );\n}\n\nexport function isEmojiBehindLabel(emoji: NullableElement): boolean {\n if (!emoji) {\n return false;\n }\n\n return (\n emojiDistanceFromScrollTop(emoji) <\n categoryLabelHeight(closestCategory(emoji))\n );\n}\n\nexport function queryScrollBody(root: NullableElement): NullableElement {\n if (!root) return null;\n\n return root.matches(asSelectors(ClassNames.scrollBody))\n ? root\n : root.querySelector(asSelectors(ClassNames.scrollBody));\n}\n\nexport function emojiDistanceFromScrollTop(emoji: NullableElement): number {\n if (!emoji) {\n return 0;\n }\n\n return emojiTrueOffsetTop(emoji) - (closestScrollBody(emoji)?.scrollTop ?? 0);\n}\n\nexport function closestScrollBody(element: NullableElement): NullableElement {\n if (!element) {\n return null;\n }\n\n return element.closest(asSelectors(ClassNames.scrollBody)) ?? null;\n}\n\nexport function emojiTruOffsetLeft(element: NullableElement): number {\n const button = buttonFromTarget(element);\n const category = closestCategory(button);\n\n return elementOffsetLeft(button) + elementOffsetLeft(category);\n}\n\nfunction elementOffsetTop(element: NullableElement): number {\n return element?.offsetTop ?? 0;\n}\n\nfunction elementOffsetLeft(element: NullableElement): number {\n return element?.offsetLeft ?? 0;\n}\n\nexport function unifiedFromEmojiElement(emoji: NullableElement): string | null {\n return elementDataSetKey(buttonFromTarget(emoji), 'unified') ?? null;\n}\n\nexport function originalUnifiedFromEmojiElement(\n emoji: NullableElement\n): string | null {\n const unified = unifiedFromEmojiElement(emoji);\n\n if (unified) {\n return unifiedWithoutSkinTone(unified);\n }\n return null;\n}\n\nexport function allUnifiedFromEmojiElement(\n emoji: NullableElement\n): { unified: string | null; originalUnified: string | null } {\n if (!emoji) {\n return {\n unified: null,\n originalUnified: null\n };\n }\n\n return {\n unified: unifiedFromEmojiElement(emoji),\n originalUnified: originalUnifiedFromEmojiElement(emoji)\n };\n}\n\nfunction elementDataSetKey(\n element: NullableElement,\n key: string\n): string | null {\n return elementDataSet(element)[key] ?? null;\n}\n\nfunction elementDataSet(element: NullableElement): DOMStringMap {\n return element?.dataset ?? {};\n}\n\nexport function isVisibleEmoji(element: HTMLElement) {\n return element.classList.contains(ClassNames.visible);\n}\n\nexport function isHidden(element: NullableElement) {\n if (!element) return true;\n\n return element.classList.contains(ClassNames.hidden);\n}\n\nexport function allVisibleEmojis(parent: NullableElement) {\n if (!parent) {\n return [];\n }\n\n return Array.from(\n parent.querySelectorAll(VisibleEmojiSelector)\n ) as HTMLElement[];\n}\n\nexport function lastVisibleEmoji(element: NullableElement): NullableElement {\n if (!element) return null;\n\n const allEmojis = allVisibleEmojis(element);\n const [last] = allEmojis.slice(-1);\n if (!last) {\n return null;\n }\n\n if (!isVisibleEmoji(last)) {\n return prevVisibleEmoji(last);\n }\n\n return last;\n}\n\nexport function nextVisibleEmoji(element: HTMLElement): NullableElement {\n const next = element.nextElementSibling as HTMLElement;\n\n if (!next) {\n return firstVisibleEmoji(nextCategory(element));\n }\n\n if (!isVisibleEmoji(next)) {\n return nextVisibleEmoji(next);\n }\n\n return next;\n}\n\nexport function prevVisibleEmoji(element: HTMLElement): NullableElement {\n const prev = element.previousElementSibling as HTMLElement;\n\n if (!prev) {\n return lastVisibleEmoji(prevCategory(element));\n }\n\n if (!isVisibleEmoji(prev)) {\n return prevVisibleEmoji(prev);\n }\n\n return prev;\n}\n\nexport function firstVisibleEmoji(parent: NullableElement) {\n if (!parent) {\n return null;\n }\n\n const allEmojis = allVisibleEmojis(parent);\n\n return firstVisibleElementInContainer(parent, allEmojis, 0.1);\n}\n\nexport function prevCategory(element: NullableElement): NullableElement {\n const category = closestCategory(element);\n\n if (!category) {\n return null;\n }\n\n const prev = category.previousElementSibling as HTMLElement;\n\n if (!prev) {\n return null;\n }\n\n if (isHidden(prev)) {\n return prevCategory(prev);\n }\n\n return prev;\n}\n\nexport function nextCategory(element: NullableElement): NullableElement {\n const category = closestCategory(element);\n\n if (!category) {\n return null;\n }\n\n const next = category.nextElementSibling as HTMLElement;\n\n if (!next) {\n return null;\n }\n\n if (isHidden(next)) {\n return nextCategory(next);\n }\n\n return next;\n}\n\nexport function closestCategory(element: NullableElement) {\n if (!element) {\n return null;\n }\n return element.closest(asSelectors(ClassNames.category)) as HTMLElement;\n}\n\nexport function closestCategoryContent(element: NullableElement) {\n if (!element) {\n return null;\n }\n return element.closest(\n asSelectors(ClassNames.categoryContent)\n ) as HTMLElement;\n}\n","export function parseNativeEmoji(unified: string): string {\n return unified\n .split('-')\n .map(hex => String.fromCodePoint(parseInt(hex, 16)))\n .join('');\n}\n","import { Categories, CustomCategoryConfig } from '../config/categoryConfig';\nimport { CustomEmoji } from '../config/customEmojiConfig';\nimport { CategoryConfig } from '../types/exposedTypes';\nimport { DataEmoji } from '../dataUtils/DataTypes';\n\nexport function isCustomCategory(\n category: CategoryConfig | CustomCategoryConfig\n): category is CustomCategoryConfig {\n return category.category === Categories.CUSTOM;\n}\n\nexport function isCustomEmoji(emoji: Partial<DataEmoji>): emoji is CustomEmoji {\n return emoji.imgUrl !== undefined;\n}\n","import * as React from 'react';\nimport { useEffect, useRef } from 'react';\n\nimport {\n emojiFromElement,\n isEmojiElement,\n NullableElement\n} from '../DomUtils/selectors';\nimport {\n useActiveSkinToneState,\n useDisallowClickRef,\n useEmojiVariationPickerState,\n useUpdateSuggested\n} from '../components/context/PickerContext';\nimport { GetEmojiUrl } from '../components/emoji/BaseEmojiProps';\nimport {\n MOUSE_EVENT_SOURCE,\n useEmojiStyleConfig,\n useGetEmojiUrlConfig,\n useOnEmojiClickConfig\n} from '../config/useConfig';\nimport { DataEmoji } from '../dataUtils/DataTypes';\nimport {\n activeVariationFromUnified,\n emojiHasVariations,\n emojiNames,\n emojiUnified\n} from '../dataUtils/emojiSelectors';\nimport { parseNativeEmoji } from '../dataUtils/parseNativeEmoji';\nimport { setSuggested } from '../dataUtils/suggested';\nimport { isCustomEmoji } from '../typeRefinements/typeRefinements';\nimport { EmojiClickData, SkinTones, EmojiStyle } from '../types/exposedTypes';\n\nimport { useCloseAllOpenToggles } from './useCloseAllOpenToggles';\nimport useSetVariationPicker from './useSetVariationPicker';\n\nexport function useMouseDownHandlers(\n ContainerRef: React.MutableRefObject<NullableElement>,\n mouseEventSource: MOUSE_EVENT_SOURCE\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(mouseEventSource);\n const [, updateSuggested] = useUpdateSuggested();\n const getEmojiUrl = useGetEmojiUrlConfig();\n const activeEmojiStyle = useEmojiStyleConfig();\n\n const onClick = React.useCallback(\n function onClick(event: MouseEvent) {\n if (disallowClickRef.current) {\n return;\n }\n\n closeAllOpenToggles();\n\n const [emoji, unified] = emojiFromEvent(event);\n\n if (!emoji || !unified) {\n return;\n }\n\n const skinToneToUse =\n activeVariationFromUnified(unified) || activeSkinTone;\n\n updateSuggested();\n setSuggested(emoji, skinToneToUse);\n onEmojiClick(\n emojiClickOutput(emoji, skinToneToUse, activeEmojiStyle, getEmojiUrl),\n event\n );\n },\n [\n activeSkinTone,\n closeAllOpenToggles,\n disallowClickRef,\n onEmojiClick,\n updateSuggested,\n getEmojiUrl,\n activeEmojiStyle\n ]\n );\n\n const onMouseDown = React.useCallback(\n function onMouseDown(event: MouseEvent) {\n if (mouseDownTimerRef.current) {\n clearTimeout(mouseDownTimerRef.current);\n }\n\n const [emoji] = emojiFromEvent(event);\n\n if (!emoji || !emojiHasVariations(emoji)) {\n return;\n }\n\n mouseDownTimerRef.current = window?.setTimeout(() => {\n disallowClickRef.current = true;\n mouseDownTimerRef.current = undefined;\n closeAllOpenToggles();\n setVariationPicker(event.target as HTMLElement);\n setEmojiVariationPicker(emoji);\n }, 500);\n },\n [\n disallowClickRef,\n closeAllOpenToggles,\n setVariationPicker,\n setEmojiVariationPicker\n ]\n );\n const onMouseUp = React.useCallback(\n function onMouseUp() {\n if (mouseDownTimerRef.current) {\n clearTimeout(mouseDownTimerRef.current);\n mouseDownTimerRef.current = undefined;\n } else if (disallowClickRef.current) {\n // The problem we're trying to overcome here\n // is that the emoji has both mouseup and click events\n // and when releasing a mouseup event\n // the click gets triggered too\n // So we're disallowing the click event for a short time\n\n requestAnimationFrame(() => {\n disallowClickRef.current = false;\n });\n }\n },\n [disallowClickRef]\n );\n\n useEffect(() => {\n if (!ContainerRef.current) {\n return;\n }\n const confainerRef = ContainerRef.current;\n confainerRef.addEventListener('click', onClick, {\n passive: true\n });\n\n confainerRef.addEventListener('mousedown', onMouseDown, {\n passive: true\n });\n confainerRef.addEventListener('mouseup', onMouseUp, {\n passive: true\n });\n\n return () => {\n confainerRef?.removeEventListener('click', onClick);\n confainerRef?.removeEventListener('mousedown', onMouseDown);\n confainerRef?.removeEventListener('mouseup', onMouseUp);\n };\n }, [ContainerRef, onClick, onMouseDown, onMouseUp]);\n}\n\nfunction emojiFromEvent(event: MouseEvent): [DataEmoji, string] | [] {\n const target = event?.target as HTMLElement;\n if (!isEmojiElement(target)) {\n return [];\n }\n\n return emojiFromElement(target);\n}\n\nfunction emojiClickOutput(\n emoji: DataEmoji,\n activeSkinTone: SkinTones,\n activeEmojiStyle: EmojiStyle,\n getEmojiUrl: GetEmojiUrl\n): EmojiClickData {\n const names = emojiNames(emoji);\n\n if (isCustomEmoji(emoji)) {\n const unified = emojiUnified(emoji);\n return {\n activeSkinTone,\n emoji: unified,\n getImageUrl() {\n return emoji.imgUrl;\n },\n imageUrl: emoji.imgUrl,\n isCustom: true,\n names,\n unified,\n unifiedWithoutSkinTone: unified\n };\n }\n const unified = emojiUnified(emoji, activeSkinTone);\n\n return {\n activeSkinTone,\n emoji: parseNativeEmoji(unified),\n getImageUrl(emojiStyle: EmojiStyle = activeEmojiStyle ?? EmojiStyle.APPLE) {\n return getEmojiUrl(unified, emojiStyle);\n },\n imageUrl: getEmojiUrl(unified, activeEmojiStyle ?? EmojiStyle.APPLE),\n isCustom: false,\n names,\n unified,\n unifiedWithoutSkinTone: emojiUnified(emoji)\n };\n}\n","import { cx } from 'flairup';\nimport * as React from 'react';\n\nimport { stylesheet } from '../../Stylesheet/stylesheet';\n\ninterface Props\n extends React.DetailedHTMLProps<\n React.ButtonHTMLAttributes<HTMLButtonElement>,\n HTMLButtonElement\n > {\n className?: string;\n}\n\nexport function Button(props: Props) {\n return (\n <button\n type=\"button\"\n {...props}\n className={cx(styles.button, props.className)}\n >\n {props.children}\n </button>\n );\n}\n\nconst styles = stylesheet.create({\n button: {\n '.': 'epr-btn',\n cursor: 'pointer',\n border: '0',\n background: 'none',\n outline: 'none'\n }\n});\n","import { cx } from 'flairup';\nimport * as React from 'react';\n\nimport { ClassNames } from '../../DomUtils/classNames';\nimport {\n commonInteractionStyles,\n commonStyles,\n stylesheet\n} from '../../Stylesheet/stylesheet';\nimport { Button } from '../atoms/Button';\n\ntype ClickableEmojiButtonProps = Readonly<{\n hidden?: boolean;\n showVariations?: boolean;\n hiddenOnSearch?: boolean;\n emojiNames: string[];\n children: React.ReactNode;\n hasVariations: boolean;\n unified?: string;\n noBackground?: boolean;\n className?: string;\n style?: React.CSSProperties;\n}>;\n\nexport function ClickableEmojiButton({\n emojiNames,\n unified,\n hidden,\n hiddenOnSearch,\n showVariations = true,\n hasVariations,\n children,\n className,\n noBackground = false,\n style\n}: ClickableEmojiButtonProps) {\n return (\n <Button\n className={cx(\n styles.emoji,\n hidden && commonStyles.hidden,\n hiddenOnSearch && commonInteractionStyles.hiddenOnSearch,\n {\n [ClassNames.visible]: !hidden && !hiddenOnSearch\n },\n !!(hasVariations && showVariations) && styles.hasVariations,\n noBackground && styles.noBackground,\n className\n )}\n data-unified={unified}\n aria-label={getAriaLabel(emojiNames)}\n data-full-name={emojiNames}\n style={style}\n >\n {children}\n </Button>\n );\n}\n\nfunction getAriaLabel(emojiNames: string[]) {\n return emojiNames[emojiNames.length - 1];\n}\n\nconst styles = stylesheet.create({\n emoji: {\n '.': ClassNames.emoji,\n position: 'relative',\n width: 'var(--epr-emoji-fullsize)',\n height: 'var(--epr-emoji-fullsize)',\n boxSizing: 'border-box',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n maxWidth: 'var(--epr-emoji-fullsize)',\n maxHeight: 'var(--epr-emoji-fullsize)',\n borderRadius: '8px',\n overflow: 'hidden',\n transition: 'background-color 0.2s',\n ':hover': {\n backgroundColor: 'var(--epr-emoji-hover-color)'\n },\n ':focus': {\n backgroundColor: 'var(--epr-focus-bg-color)'\n }\n },\n noBackground: {\n background: 'none',\n ':hover': {\n backgroundColor: 'transparent',\n background: 'none'\n },\n ':focus': {\n backgroundColor: 'transparent',\n background: 'none'\n }\n },\n hasVariations: {\n '.': ClassNames.emojiHasVariations,\n ':after': {\n content: '',\n display: 'block',\n width: '0',\n height: '0',\n right: '0px',\n bottom: '1px',\n position: 'absolute',\n borderLeft: '4px solid transparent',\n borderRight: '4px solid transparent',\n transform: 'rotate(135deg)',\n borderBottom: '4px solid var(--epr-emoji-variation-indicator-color)',\n zIndex: 'var(--epr-emoji-variations-indictator-z-index)'\n },\n ':hover:after': {\n borderBottom: '4px solid var(--epr-emoji-variation-indicator-color-hover)'\n }\n }\n});\n","import { ClassNames } from '../../DomUtils/classNames';\nimport { stylesheet } from '../../Stylesheet/stylesheet';\n\nexport const emojiStyles = stylesheet.create({\n external: {\n '.': ClassNames.external,\n fontSize: '0'\n },\n common: {\n alignSelf: 'center',\n justifySelf: 'center',\n display: 'block'\n }\n});\n","import { cx } from 'flairup';\nimport * as React from 'react';\n\nimport { stylesheet } from '../../Stylesheet/stylesheet';\nimport { EmojiStyle } from '../../types/exposedTypes';\n\nimport { emojiStyles } from './emojiStyles';\n\nexport function EmojiImg({\n emojiName,\n style,\n lazyLoad = false,\n imgUrl,\n onError,\n className\n}: {\n emojiName: string;\n emojiStyle: EmojiStyle;\n style: React.CSSProperties;\n lazyLoad?: boolean;\n imgUrl: string;\n onError: () => void;\n className?: string;\n}) {\n return (\n <img\n src={imgUrl}\n alt={emojiName}\n className={cx(styles.emojiImag, emojiStyles.external, emojiStyles.common, className)}\n loading={lazyLoad ? 'lazy' : 'eager'}\n onError={onError}\n style={style}\n />\n );\n}\n\nconst styles = stylesheet.create({\n emojiImag: {\n '.': 'epr-emoji-img',\n maxWidth: 'var(--epr-emoji-fullsize)',\n maxHeight: 'var(--epr-emoji-fullsize)',\n minWidth: 'var(--epr-emoji-fullsize)',\n minHeight: 'var(--epr-emoji-fullsize)',\n padding: 'var(--epr-emoji-padding)'\n }\n});\n","import { cx } from 'flairup';\nimport * as React from 'react';\n\nimport { stylesheet } from '../../Stylesheet/stylesheet';\nimport { parseNativeEmoji } from '../../dataUtils/parseNativeEmoji';\n\nimport { emojiStyles } from './emojiStyles';\n\nexport function NativeEmoji({\n unified,\n style,\n className\n}: {\n unified: string;\n style: React.CSSProperties;\n className?: string;\n}) {\n return (\n <span\n className={cx(\n styles.nativeEmoji,\n emojiStyles.common,\n emojiStyles.external,\n className\n )}\n data-unified={unified}\n style={style}\n >\n {parseNativeEmoji(unified)}\n </span>\n );\n}\n\nconst styles = stylesheet.create({\n nativeEmoji: {\n '.': 'epr-emoji-native',\n fontFamily:\n '\"Segoe UI Emoji\", \"Segoe UI Symbol\", \"Segoe UI\", \"Apple Color Emoji\", \"Twemoji Mozilla\", \"Noto Color Emoji\", \"EmojiOne Color\", \"Android Emoji\"!important',\n position: 'relative',\n lineHeight: '100%',\n fontSize: 'var(--epr-emoji-size)',\n textAlign: 'center',\n alignSelf: 'center',\n justifySelf: 'center',\n letterSpacing: '0',\n padding: 'var(--epr-emoji-padding)'\n }\n});\n","import * as React from 'react';\n\nimport { emojiName, emojiUrlByUnified } from '../../dataUtils/emojiUtils';\nimport { isCustomEmoji } from '../../typeRefinements/typeRefinements';\nimport { EmojiStyle } from '../../types/exposedTypes';\nimport { useEmojisThatFailedToLoadState } from '../context/PickerContext';\n\nimport { usePickerDataContext } from '../context/PickerDataContext';\n\nimport { BaseEmojiProps } from './BaseEmojiProps';\nimport { EmojiImg } from './EmojiImg';\nimport { NativeEmoji } from './NativeEmoji';\n\nexport function ViewOnlyEmoji({\n emoji,\n unified,\n emojiStyle,\n size,\n lazyLoad,\n getEmojiUrl = emojiUrlByUnified,\n className\n}: BaseEmojiProps) {\n const [, setEmojisThatFailedToLoad] = useEmojisThatFailedToLoadState();\n const { emojiByUnified } = usePickerDataContext();\n\n const style = {} as React.CSSProperties;\n if (size) {\n style.width = style.height = style.fontSize = `${size}px`;\n }\n\n const emojiToRender = emoji ? emoji : emojiByUnified(unified);\n\n if (!emojiToRender) {\n return null;\n }\n\n if (isCustomEmoji(emojiToRender)) {\n return (\n <EmojiImg\n style={style}\n emojiName={unified}\n emojiStyle={EmojiStyle.NATIVE}\n lazyLoad={lazyLoad}\n imgUrl={emojiToRender.imgUrl}\n onError={onError}\n className={className}\n />\n );\n }\n\n return (\n <>\n {emojiStyle === EmojiStyle.NATIVE ? (\n <NativeEmoji unified={unified} style={style} className={className} />\n ) : (\n <EmojiImg\n style={style}\n emojiName={emojiName(emojiToRender)}\n emojiStyle={emojiStyle}\n lazyLoad={lazyLoad}\n imgUrl={getEmojiUrl(unified, emojiStyle)}\n onError={onError}\n className={className}\n />\n )}\n </>\n );\n\n function onError() {\n setEmojisThatFailedToLoad(prev => new Set(prev).add(unified));\n }\n}\n","import * as React from 'react';\n\nimport { DataEmoji } from '../../dataUtils/DataTypes';\nimport { emojiHasVariations, emojiNames } from '../../dataUtils/emojiSelectors';\n\nimport { BaseEmojiProps } from './BaseEmojiProps';\nimport { ClickableEmojiButton } from './ClickableEmojiButton';\nimport { ViewOnlyEmoji } from './ViewOnlyEmoji';\n\ntype ClickableEmojiProps = Readonly<\n BaseEmojiProps & {\n hidden?: boolean;\n showVariations?: boolean;\n hiddenOnSearch?: boolean;\n emoji: DataEmoji;\n className?: string;\n noBackground?: boolean;\n style?: React.CSSProperties;\n }\n>;\n\nexport function ClickableEmoji({\n emoji,\n unified,\n hidden,\n hiddenOnSearch,\n emojiStyle,\n showVariations = true,\n size,\n lazyLoad,\n getEmojiUrl,\n className,\n noBackground = false,\n style\n}: ClickableEmojiProps) {\n const hasVariations = emojiHasVariations(emoji);\n\n return (\n <ClickableEmojiButton\n hasVariations={hasVariations}\n showVariations={showVariations}\n hidden={hidden}\n hiddenOnSearch={hiddenOnSearch}\n emojiNames={emojiNames(emoji)}\n unified={unified}\n noBackground={noBackground}\n style={style}\n >\n <ViewOnlyEmoji\n unified={unified}\n emoji={emoji}\n size={size}\n emojiStyle={emojiStyle}\n lazyLoad={lazyLoad}\n getEmojiUrl={getEmojiUrl}\n className={className}\n />\n </ClickableEmojiButton>\n );\n}\n","import { cx } from 'flairup';\nimport * as React from 'react';\n\nimport { darkMode, stylesheet } from '../../Stylesheet/stylesheet';\nimport { Button } from '../atoms/Button';\nimport { useReactionsModeState } from '../context/PickerContext';\n\nimport Plus from './svg/plus.svg';\n\nexport function BtnPlus() {\n const [, setReactionsMode] = useReactionsModeState();\n return (\n <Button\n aria-label=\"Show all Emojis\"\n title=\"Show all Emojis\"\n tabIndex={0}\n className={cx(styles.plusSign)}\n onClick={() => setReactionsMode(false)}\n />\n );\n}\n\nconst styles = stylesheet.create({\n plusSign: {\n fontSize: '20px',\n padding: '17px',\n color: 'var(--epr-text-color)',\n borderRadius: '50%',\n textAlign: 'center',\n lineHeight: '100%',\n width: '20px',\n height: '20px',\n display: 'flex',\n justifyContent: 'center',\n alignItems: 'center',\n transition: 'background-color 0.2s ease-in-out',\n ':after': {\n content: '',\n minWidth: '20px',\n minHeight: '20px',\n backgroundImage: `url(${Plus})`,\n backgroundColor: 'transparent',\n backgroundRepeat: 'no-repeat',\n backgroundSize: '20px',\n backgroundPositionY: '0'\n },\n ':hover': {\n color: 'var(--epr-highlight-color)',\n backgroundColor: 'var(--epr-hover-bg-color-reduced-opacity)',\n ':after': {\n backgroundPositionY: '-20px'\n }\n },\n ':focus': {\n color: 'var(--epr-highlight-color)',\n backgroundColor: 'var(--epr-hover-bg-color-reduced-opacity)',\n ':after': {\n backgroundPositionY: '-40px'\n }\n }\n },\n ...darkMode('plusSign', {\n ':after': { backgroundPositionY: '-40px' },\n ':hover:after': { backgroundPositionY: '-60px' }\n })\n});\n","import { cx } from 'flairup';\nimport * as React from 'react';\n\nimport { commonStyles, stylesheet } from '../../Stylesheet/stylesheet';\nimport {\n MOUSE_EVENT_SOURCE,\n useEmojiStyleConfig,\n useReactionsConfig,\n useAllowExpandReactions,\n useGetEmojiUrlConfig,\n} from '../../config/useConfig';\nimport { DataEmoji } from '../../dataUtils/DataTypes';\nimport { emojiByUnified } from '../../dataUtils/emojiSelectors';\nimport { useMouseDownHandlers } from '../../hooks/useMouseDownHandlers';\nimport { useReactionsRef } from '../context/ElementRefContext';\nimport { useReactionsModeState } from '../context/PickerContext';\nimport { ClickableEmoji } from '../emoji/Emoji';\n\nimport { BtnPlus } from './BtnPlus';\n\nexport function Reactions() {\n const [reactionsOpen] = useReactionsModeState();\n const ReactionsRef = useReactionsRef();\n const reactions = useReactionsConfig();\n useMouseDownHandlers(ReactionsRef, MOUSE_EVENT_SOURCE.REACTIONS);\n const emojiStyle = useEmojiStyleConfig();\n const allowExpandReactions = useAllowExpandReactions();\n const getEmojiUrl = useGetEmojiUrlConfig();\n\n if (!reactionsOpen) {\n return null;\n }\n\n return (\n <ul\n className={cx(styles.list, !reactionsOpen && commonStyles.hidden)}\n ref={ReactionsRef}\n >\n {reactions.map((reaction) => {\n const emoji = emojiByUnified(reaction);\n\n if (!emoji) {\n return null;\n }\n\n return (\n <li key={reaction}>\n <ClickableEmoji\n emoji={emoji as DataEmoji}\n emojiStyle={emojiStyle}\n unified={reaction}\n showVariations={false}\n className={cx(styles.emojiButton)}\n noBackground\n getEmojiUrl={getEmojiUrl}\n />\n </li>\n );\n })}\n {allowExpandReactions ? (\n <li>\n <BtnPlus />\n </li>\n ) : null}\n </ul>\n );\n}\n\nconst styles = stylesheet.create({\n list: {\n listStyle: 'none',\n margin: '0',\n padding: '0 5px',\n display: 'flex',\n justifyContent: 'space-between',\n alignItems: 'center',\n height: '100%',\n },\n emojiButton: {\n ':hover': {\n transform: 'scale(1.2)',\n },\n ':focus': {\n transform: 'scale(1.2)',\n },\n ':active': {\n transform: 'scale(1.1)',\n },\n transition: 'transform 0.2s cubic-bezier(0.175, 0.885, 0.32, 1.5)',\n },\n});\n","import { useEffect, useState } from 'react';\n\nimport { ElementRef } from '../components/context/ElementRefContext';\n\nimport { useCloseAllOpenToggles } from './useCloseAllOpenToggles';\n\nexport function useOnScroll(BodyRef: ElementRef) {\n const closeAllOpenToggles = useCloseAllOpenToggles();\n const [scrollTop, setScrollTop] = useState(0);\n\n useEffect(() => {\n const bodyRef = BodyRef.current;\n if (!bodyRef) {\n return;\n }\n\n bodyRef.addEventListener('scroll', onScroll, {\n passive: true\n });\n\n function onScroll() {\n setScrollTop(bodyRef?.scrollTop ?? 0);\n closeAllOpenToggles();\n }\n\n return () => {\n bodyRef?.removeEventListener('scroll', onScroll);\n };\n }, [BodyRef, closeAllOpenToggles]);\n\n return scrollTop;\n}\n","export function shouldVirtualize({\n scrollTop,\n clientHeight,\n topOffset,\n style,\n dimensions\n}: {\n scrollTop: number;\n clientHeight: number;\n topOffset: number;\n style: { top: number } | undefined;\n dimensions: Dimensions;\n}): boolean {\n if (!style || !dimensions) {\n return false;\n }\n\n const emojiTop = topOffset + style.top;\n const emojiBottom = emojiTop + dimensions.emojiSize;\n\n const isVisible =\n emojiBottom + dimensions.emojiSize * 2 >= scrollTop &&\n emojiTop <= scrollTop + clientHeight + dimensions.emojiSize;\n\n return !isVisible;\n}\n\nexport function getEmojiPositionStyle(dimensions: Dimensions, index: number) {\n return dimensions\n ? {\n top: Math.floor(index / dimensions.emojisPerRow) * dimensions.emojiSize,\n left: (index % dimensions.emojisPerRow) * dimensions.emojiSize\n }\n : undefined;\n}\n\n// preload emoji if it is one row below viewport\n\nexport type Dimensions =\n | {\n emojiSize: number;\n emojisPerRow: number;\n categoryHeight: number;\n }\n | undefined;\n","import * as React from 'react';\n\nimport { EmojiButtonSelector } from '../DomUtils/selectors';\nimport {\n useEmojiListRef,\n usePickerMainRef,\n} from '../components/context/ElementRefContext';\nimport {\n useReactionsModeState,\n useVisibleCategoriesState,\n useEmojiSizeState,\n} from '../components/context/PickerContext';\n\nconst EMOJI_SIZE_DEFAULT = 40;\n\nexport function useCategoryHeight(emojiCount: number):\n | {\n categoryHeight: number;\n emojisPerRow: number;\n emojiSize: number;\n }\n | undefined {\n const EmojiListRef = useEmojiListRef();\n const [isReactionsMode] = useReactionsModeState();\n const PickerMainRef = usePickerMainRef();\n const emojiSizeRef = React.useRef<number | undefined>();\n const [visibleCategories] = useVisibleCategoriesState();\n const [emojiSizeFromContext] = useEmojiSizeState();\n const [dimensions, setDimensions] = React.useState<{\n categoryHeight: number;\n emojisPerRow: number;\n emojiSize: number;\n }>();\n\n // Helper to compute and store dimensions based on current DOM\n const computeAndSetDimensions = React.useCallback(() => {\n const listEl = EmojiListRef.current;\n if (!listEl) return;\n\n const emojiElement = listEl.querySelector(\n EmojiButtonSelector,\n ) as HTMLElement | null;\n\n const measured = emojiElement?.clientHeight;\n if (measured) {\n emojiSizeRef.current = measured;\n }\n const emojiSize =\n emojiSizeFromContext ||\n measured ||\n emojiSizeRef.current ||\n EMOJI_SIZE_DEFAULT;\n const pickerWidth = listEl.clientWidth;\n\n if (pickerWidth === 0 || emojiSize === 0) return;\n\n const emojisPerRow = Math.max(1, Math.floor(pickerWidth / emojiSize));\n const rowCount = Math.ceil(emojiCount / emojisPerRow);\n const categoryHeight = rowCount * emojiSize;\n\n setDimensions({ categoryHeight, emojisPerRow, emojiSize });\n }, [EmojiListRef, emojiCount, emojiSizeFromContext]);\n\n // Recompute on data-count changes and when reactions mode toggles\n React.useEffect(() => {\n computeAndSetDimensions();\n }, [\n emojiCount,\n isReactionsMode,\n computeAndSetDimensions,\n visibleCategories.length,\n ]);\n\n // Listen to transitionend on the picker root (where height transition occurs)\n React.useEffect(() => {\n const rootEl = PickerMainRef.current;\n if (!rootEl) return;\n\n const handler = (e: Event) => {\n const te = e as TransitionEvent;\n const prop = te.propertyName;\n if (\n prop === 'width' ||\n prop === 'max-width' ||\n prop === 'min-width' ||\n prop === 'height' ||\n prop === 'max-height' ||\n prop === 'min-height'\n ) {\n if (typeof queueMicrotask === 'function') {\n queueMicrotask(() => computeAndSetDimensions());\n } else {\n requestAnimationFrame(() => computeAndSetDimensions());\n }\n }\n };\n\n rootEl.addEventListener('transitionend', handler, {\n passive: true,\n });\n return () => {\n rootEl.removeEventListener('transitionend', handler);\n };\n }, [PickerMainRef, computeAndSetDimensions]);\n\n return dimensions;\n}\n","import { useEmojisThatFailedToLoadState } from '../components/context/PickerContext';\nimport { DataEmoji } from '../dataUtils/DataTypes';\nimport { emojiUnified } from '../dataUtils/emojiUtils';\n\nimport { useIsEmojiFiltered } from './useFilter';\n\nexport function useIsEmojiHidden(): (emoji: DataEmoji) => IsHiddenReturn {\n const [emojisThatFailedToLoad] = useEmojisThatFailedToLoadState();\n const isEmojiFiltered = useIsEmojiFiltered();\n\n return (emoji: DataEmoji): IsHiddenReturn => {\n const unified = emojiUnified(emoji);\n\n const failedToLoad = emojisThatFailedToLoad.has(unified);\n const filteredOut = isEmojiFiltered(unified);\n\n return {\n failedToLoad,\n filteredOut,\n hidden: failedToLoad || filteredOut\n };\n };\n}\n\ntype IsHiddenReturn = {\n failedToLoad: boolean;\n filteredOut: boolean;\n hidden: boolean;\n};\n","import { ReactNode, useEffect } from 'react';\nimport * as React from 'react';\n\nimport { useBodyRef } from '../components/context/ElementRefContext';\nimport { useActiveSkinToneState } from '../components/context/PickerContext';\nimport { ClickableEmoji } from '../components/emoji/Emoji';\nimport {\n useEmojiStyleConfig,\n useGetEmojiUrlConfig,\n useLazyLoadEmojisConfig,\n useSkinTonesDisabledConfig\n} from '../config/useConfig';\nimport { DataEmojis } from '../dataUtils/DataTypes';\nimport { emojiUnified } from '../dataUtils/emojiUtils';\nimport {\n getEmojiPositionStyle,\n shouldVirtualize\n} from '../virtualization/virtualizationHelpers';\n\nimport { preloadEmojiIfNeeded } from './preloadEmoji';\nimport { useCategoryHeight } from './useCategoryHeight';\nimport { useIsEmojiDisallowed } from './useDisallowedEmojis';\nimport { useIsEmojiHidden } from './useIsEmojiHidden';\n\nexport function useEmojiVirtualization({\n categoryEmojis,\n topOffset,\n onHeightReady,\n scrollTop,\n isCategoryVisible\n}: {\n categoryEmojis: DataEmojis;\n topOffset: number;\n onHeightReady: (height: number) => void;\n scrollTop: number;\n isCategoryVisible: boolean;\n}) {\n const isEmojiHidden = useIsEmojiHidden();\n const lazyLoadEmojis = useLazyLoadEmojisConfig();\n const emojiStyle = useEmojiStyleConfig();\n const [activeSkinTone] = useActiveSkinToneState();\n const isEmojiDisallowed = useIsEmojiDisallowed();\n const getEmojiUrl = useGetEmojiUrlConfig();\n const showVariations = !useSkinTonesDisabledConfig();\n const BodyRef = useBodyRef();\n\n let virtualizedCounter = 0;\n\n const emojisToPush = categoryEmojis.filter(emoji => {\n const isDisallowed = isEmojiDisallowed(emoji);\n const { failedToLoad, filteredOut, hidden } = isEmojiHidden(emoji);\n\n return !failedToLoad && !filteredOut && !hidden && !isDisallowed;\n });\n\n const dimensions = useCategoryHeight(emojisToPush.length);\n\n useEffect(() => {\n if (dimensions) {\n onHeightReady(dimensions.categoryHeight);\n }\n }, [dimensions, onHeightReady, emojisToPush.length]);\n\n const isVirtualized = (style: { top: number; left: number } | undefined) =>\n dimensions &&\n BodyRef.current &&\n shouldVirtualize({\n scrollTop,\n clientHeight: BodyRef.current?.clientHeight ?? 0,\n topOffset,\n style,\n dimensions\n });\n\n const emojis = emojisToPush.reduce((accumulator, emoji, index) => {\n const unified = emojiUnified(emoji, activeSkinTone);\n const style = getEmojiPositionStyle(dimensions, index);\n\n if (isVirtualized(style)) {\n virtualizedCounter++;\n preloadEmojiIfNeeded(\n emoji,\n emojiStyle,\n scrollTop,\n BodyRef.current?.clientHeight ?? 0,\n topOffset,\n style,\n dimensions,\n getEmojiUrl\n );\n return accumulator;\n }\n\n if (!isCategoryVisible) {\n virtualizedCounter++;\n return accumulator;\n }\n\n accumulator.push(\n <ClickableEmoji\n showVariations={showVariations}\n key={unified}\n emoji={emoji}\n unified={unified}\n emojiStyle={emojiStyle}\n lazyLoad={lazyLoadEmojis}\n getEmojiUrl={getEmojiUrl}\n style={{\n ...style,\n position: 'absolute'\n }}\n />\n );\n return accumulator;\n }, [] as ReactNode[]);\n\n return {\n virtualizedCounter,\n emojis,\n dimensions\n };\n}\n","import { cx } from 'flairup';\nimport * as React from 'react';\n\nimport { ClassNames } from '../../DomUtils/classNames';\nimport {\n commonInteractionStyles,\n commonStyles,\n stylesheet\n} from '../../Stylesheet/stylesheet';\nimport {\n categoryFromCategoryConfig,\n categoryNameFromCategoryConfig\n} from '../../config/categoryConfig';\nimport { CategoryConfig } from '../../types/exposedTypes';\n\ntype Props = Readonly<{\n categoryConfig: CategoryConfig;\n children?: React.ReactNode;\n hidden?: boolean;\n hiddenOnSearch?: boolean;\n height?: number;\n}>;\n\nexport function EmojiCategory({\n categoryConfig,\n children,\n hidden,\n hiddenOnSearch,\n height\n}: Props) {\n const category = categoryFromCategoryConfig(categoryConfig);\n const categoryName = categoryNameFromCategoryConfig(categoryConfig);\n\n return (\n <li\n className={cx(\n styles.category,\n hidden && commonStyles.hidden,\n hiddenOnSearch && commonInteractionStyles.hiddenOnSearch\n )}\n data-name={category}\n aria-label={categoryName}\n >\n <h2 className={cx(styles.label)}>{categoryName}</h2>\n <div className={cx(styles.categoryContent)} style={{ height }}>\n {children}\n </div>\n </li>\n );\n}\n\nconst styles = stylesheet.create({\n category: {\n '.': ClassNames.category,\n minHeight:\n 'calc(var(--epr-emoji-fullsize) + var(--epr-category-label-height))',\n position: 'relative'\n },\n categoryContent: {\n '.': ClassNames.categoryContent,\n display: 'grid',\n gridGap: '0',\n gridTemplateColumns: 'repeat(auto-fill, var(--epr-emoji-fullsize))',\n justifyContent: 'space-between',\n margin: 'var(--epr-category-padding)',\n position: 'relative'\n },\n label: {\n '.': ClassNames.label,\n alignItems: 'center',\n // @ts-ignore - backdropFilter is not recognized.\n backdropFilter: 'blur(3px)',\n backgroundColor: 'var(--epr-category-label-bg-color)',\n color: 'var(--epr-category-label-text-color)',\n display: 'flex',\n fontSize: '16px',\n fontWeight: 'bold',\n height: 'var(--epr-category-label-height)',\n margin: '0',\n padding: 'var(--epr-category-label-padding)',\n position: 'sticky',\n textTransform: 'capitalize',\n top: '0',\n width: '100%',\n zIndex: 'var(--epr-category-label-z-index)'\n }\n});\n","import * as React from 'react';\n\nimport {\n categoryFromCategoryConfig\n} from '../../config/categoryConfig';\nimport {\n useCategoriesConfig,\n useEmojiStyleConfig,\n useGetEmojiUrlConfig,\n useLazyLoadEmojisConfig\n} from '../../config/useConfig';\nimport {\n useGetEmojisByCategory,\n emojiUnified\n} from '../../dataUtils/emojiSelectors';\nimport { useActiveSkinToneState, useEmojiSizeState } from '../context/PickerContext';\nimport { ClickableEmoji } from '../emoji/Emoji';\n\nexport function MeasureEmoji() {\n const categories = useCategoriesConfig();\n const getEmojisByCategory = useGetEmojisByCategory();\n const emojiStyle = useEmojiStyleConfig();\n const getEmojiUrl = useGetEmojiUrlConfig();\n const lazyLoadEmojis = useLazyLoadEmojisConfig();\n const [activeSkinTone] = useActiveSkinToneState();\n const [emojiSize, setEmojiSize] = useEmojiSizeState();\n const ref = React.useRef<HTMLDivElement>(null);\n\n React.useLayoutEffect(() => {\n if (ref.current) {\n setEmojiSize(ref.current.clientHeight);\n }\n });\n\n if (emojiSize) {\n return null;\n }\n\n const firstCategory = categories[0];\n const dummyEmoji = getEmojisByCategory(\n categoryFromCategoryConfig(firstCategory)\n )[0];\n const unified = dummyEmoji\n ? emojiUnified(dummyEmoji, activeSkinTone)\n : '';\n\n if (!dummyEmoji) {\n return null;\n }\n\n return (\n <div ref={ref}>\n <ClickableEmoji\n emoji={dummyEmoji}\n unified={unified}\n emojiStyle={emojiStyle}\n getEmojiUrl={getEmojiUrl}\n lazyLoad={lazyLoadEmojis}\n showVariations={false}\n hidden={false}\n style={{\n opacity: 0,\n pointerEvents: 'none',\n position: 'absolute',\n top: 0,\n left: 0,\n zIndex: -1,\n height: 'var(--epr-emoji-fullsize)',\n width: 'var(--epr-emoji-fullsize)'\n }}\n />\n </div>\n );\n}\n","import { cx } from 'flairup';\nimport * as React from 'react';\n\nimport { ClassNames } from '../../DomUtils/classNames';\nimport { getLabelHeight } from '../../DomUtils/elementPositionInRow';\nimport { stylesheet } from '../../Stylesheet/stylesheet';\nimport { categoryFromCategoryConfig } from '../../config/categoryConfig';\nimport { CategoryConfig } from '../../types/exposedTypes';\nimport { useCategoriesConfig } from '../../config/useConfig';\nimport { DataEmojis } from '../../dataUtils/DataTypes';\nimport { useEmojiVirtualization } from '../../hooks/useEmojiVirtualization';\nimport { useEmojiListRef } from '../context/ElementRefContext';\nimport { useVisibleCategoriesState } from '../context/PickerContext';\nimport { useGetEmojisByCategory } from '../context/PickerDataContext';\n\nimport { EmojiCategory } from './EmojiCategory';\nimport { MeasureEmoji } from './MeasureEmoji';\n\nexport function EmojiList({ scrollTop }: { scrollTop: number }) {\n const categories = useCategoriesConfig();\n const [categoryHeights, setCategoryHeights] = React.useState<{\n [key: string]: number;\n }>({});\n const EmojiListRef = useEmojiListRef();\n const getEmojisByCategory = useGetEmojisByCategory();\n\n const labelHeight = getLabelHeight(EmojiListRef.current);\n\n let topOffset = 0;\n return (\n <ul className={cx(styles.emojiList)} ref={EmojiListRef}>\n <MeasureEmoji />\n {categories.map(categoryConfig => {\n const category = categoryFromCategoryConfig(categoryConfig);\n\n const currentOffset = topOffset;\n const categoryHeight = categoryHeights[category];\n if (categoryHeight) {\n topOffset += categoryHeight + labelHeight;\n }\n\n return (\n <React.Suspense key={category}>\n <RenderCategory\n categoryEmojis={getEmojisByCategory(category)}\n categoryConfig={categoryConfig}\n topOffset={currentOffset}\n onHeightReady={height => {\n if (categoryHeights[category] !== height) {\n setCategoryHeights(prev => ({\n ...prev,\n [category]: height\n }));\n }\n }}\n scrollTop={scrollTop}\n />\n </React.Suspense>\n );\n })}\n </ul>\n );\n}\n\nfunction RenderCategory({\n categoryEmojis,\n categoryConfig,\n topOffset,\n onHeightReady,\n scrollTop\n}: {\n categoryEmojis: DataEmojis;\n categoryConfig: CategoryConfig;\n topOffset: number;\n onHeightReady: (height: number) => void;\n scrollTop: number;\n}) {\n const [visibleCategories] = useVisibleCategoriesState();\n\n const { virtualizedCounter, emojis, dimensions } = useEmojiVirtualization({\n categoryEmojis,\n topOffset,\n onHeightReady,\n scrollTop,\n isCategoryVisible: visibleCategories.includes(categoryConfig.category)\n });\n\n return (\n <EmojiCategory\n categoryConfig={categoryConfig}\n height={dimensions?.categoryHeight}\n // Indicates that there are no visible emojis\n // Hence, the category should be hidden\n hidden={!emojis.length && virtualizedCounter === 0}\n >\n {emojis}\n </EmojiCategory>\n );\n}\n\nconst styles = stylesheet.create({\n emojiList: {\n '.': ClassNames.emojiList,\n listStyle: 'none',\n margin: '0',\n padding: '0'\n }\n});\n","import { cx } from 'flairup';\nimport * as React from 'react';\nimport { useEffect } from 'react';\n\nimport { ClassNames } from '../../DomUtils/classNames';\nimport { focusFirstVisibleEmoji } from '../../DomUtils/keyboardNavigation';\nimport {\n buttonFromTarget,\n elementHeight,\n emojiTrueOffsetTop,\n emojiTruOffsetLeft\n} from '../../DomUtils/selectors';\nimport { darkMode, stylesheet } from '../../Stylesheet/stylesheet';\nimport {\n useEmojiStyleConfig,\n useGetEmojiUrlConfig\n} from '../../config/useConfig';\nimport {\n emojiHasVariations,\n emojiUnified,\n emojiVariations\n} from '../../dataUtils/emojiSelectors';\nimport {\n useAnchoredEmojiRef,\n useBodyRef,\n useSetAnchoredEmojiRef,\n useVariationPickerRef\n} from '../context/ElementRefContext';\nimport { useEmojiVariationPickerState } from '../context/PickerContext';\nimport { ClickableEmoji } from '../emoji/Emoji';\n\nimport SVGTriangle from './svg/triangle.svg';\n\nenum Direction {\n Up,\n Down\n}\n\n// eslint-disable-next-line complexity\nexport function EmojiVariationPicker() {\n const AnchoredEmojiRef = useAnchoredEmojiRef();\n const VariationPickerRef = useVariationPickerRef();\n const [emoji] = useEmojiVariationPickerState();\n const emojiStyle = useEmojiStyleConfig();\n\n const { getTop, getMenuDirection } = useVariationPickerTop(\n VariationPickerRef\n );\n const setAnchoredEmojiRef = useSetAnchoredEmojiRef();\n const getPointerStyle = usePointerStyle(VariationPickerRef);\n const getEmojiUrl = useGetEmojiUrlConfig();\n\n const button = buttonFromTarget(AnchoredEmojiRef.current);\n\n const visible = Boolean(\n emoji &&\n button &&\n emojiHasVariations(emoji) &&\n button.classList.contains(ClassNames.emojiHasVariations)\n );\n\n useEffect(() => {\n if (!visible) {\n return;\n }\n\n focusFirstVisibleEmoji(VariationPickerRef.current);\n }, [VariationPickerRef, visible, AnchoredEmojiRef]);\n\n let top, pointerStyle;\n\n if (!visible && AnchoredEmojiRef.current) {\n setAnchoredEmojiRef(null);\n } else {\n top = getTop();\n pointerStyle = getPointerStyle();\n }\n\n return (\n <div\n ref={VariationPickerRef}\n className={cx(\n styles.variationPicker,\n getMenuDirection() === Direction.Down && styles.pointingUp,\n visible && styles.visible\n )}\n style={{ top }}\n >\n {visible && emoji\n ? [emojiUnified(emoji)]\n .concat(emojiVariations(emoji))\n .slice(0, 6)\n .map(unified => (\n <ClickableEmoji\n key={unified}\n emoji={emoji}\n unified={unified}\n emojiStyle={emojiStyle}\n showVariations={false}\n getEmojiUrl={getEmojiUrl}\n />\n ))\n : null}\n <div className={cx(styles.pointer)} style={pointerStyle} />\n </div>\n );\n}\n\nfunction usePointerStyle(VariationPickerRef: React.RefObject<HTMLElement>) {\n const AnchoredEmojiRef = useAnchoredEmojiRef();\n return function getPointerStyle() {\n const style: React.CSSProperties = {};\n if (!VariationPickerRef.current) {\n return style;\n }\n\n if (AnchoredEmojiRef.current) {\n const button = buttonFromTarget(AnchoredEmojiRef.current);\n\n const offsetLeft = emojiTruOffsetLeft(button);\n\n if (!button) {\n return style;\n }\n\n // half of the button\n style.left = offsetLeft + button?.clientWidth / 2;\n }\n\n return style;\n };\n}\n\nfunction useVariationPickerTop(\n VariationPickerRef: React.RefObject<HTMLElement>\n) {\n const AnchoredEmojiRef = useAnchoredEmojiRef();\n const BodyRef = useBodyRef();\n let direction = Direction.Up;\n\n return {\n getMenuDirection,\n getTop\n };\n\n function getMenuDirection() {\n return direction;\n }\n\n function getTop() {\n direction = Direction.Up;\n let emojiOffsetTop = 0;\n\n if (!VariationPickerRef.current) {\n return 0;\n }\n\n const height = elementHeight(VariationPickerRef.current);\n\n if (AnchoredEmojiRef.current) {\n const bodyRef = BodyRef.current;\n const button = buttonFromTarget(AnchoredEmojiRef.current);\n\n const buttonHeight = elementHeight(button);\n\n emojiOffsetTop = emojiTrueOffsetTop(button);\n\n const scrollTop = bodyRef?.scrollTop ?? 0;\n\n if (scrollTop > emojiOffsetTop - height) {\n direction = Direction.Down;\n emojiOffsetTop += buttonHeight + height;\n }\n }\n\n return emojiOffsetTop - height;\n }\n}\n\nconst styles = stylesheet.create({\n variationPicker: {\n '.': ClassNames.variationPicker,\n position: 'absolute',\n right: '15px',\n left: '15px',\n padding: '5px',\n boxShadow: '0px 2px 5px rgba(0, 0, 0, 0.2)',\n borderRadius: '3px',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'space-around',\n opacity: '0',\n visibility: 'hidden',\n pointerEvents: 'none',\n top: '-100%',\n border: '1px solid var(--epr-picker-border-color)',\n height: 'var(--epr-emoji-variation-picker-height)',\n zIndex: 'var(--epr-skin-variation-picker-z-index)',\n background: 'var(--epr-emoji-variation-picker-bg-color)',\n transform: 'scale(0.9)',\n transition: 'transform 0.1s ease-out, opacity 0.2s ease-out'\n },\n visible: {\n opacity: '1',\n visibility: 'visible',\n pointerEvents: 'all',\n transform: 'scale(1)'\n },\n pointingUp: {\n '.': 'pointing-up',\n transformOrigin: 'center 0%',\n transform: 'scale(0.9)'\n },\n '.pointing-up': {\n pointer: {\n top: '0',\n transform: 'rotate(180deg) translateY(100%) translateX(18px)'\n }\n },\n pointer: {\n '.': 'epr-emoji-pointer',\n content: '',\n position: 'absolute',\n width: '25px',\n height: '15px',\n backgroundRepeat: 'no-repeat',\n backgroundPosition: '0 0',\n backgroundSize: '50px 15px',\n top: '100%',\n transform: 'translateX(-18px)',\n backgroundImage: `url(${SVGTriangle})`\n },\n ...darkMode('pointer', {\n backgroundPosition: '-25px 0'\n })\n});\n","import { cx } from 'flairup';\nimport * as React from 'react';\n\nimport { ClassNames } from '../../DomUtils/classNames';\nimport {\n commonInteractionStyles,\n stylesheet\n} from '../../Stylesheet/stylesheet';\nimport { MOUSE_EVENT_SOURCE } from '../../config/useConfig';\nimport { useOnMouseMove } from '../../hooks/useDisallowMouseMove';\nimport { useMouseDownHandlers } from '../../hooks/useMouseDownHandlers';\nimport { useOnScroll } from '../../hooks/useOnScroll';\nimport { useBodyRef } from '../context/ElementRefContext';\n\nimport { EmojiList } from './EmojiList';\nimport { EmojiVariationPicker } from './EmojiVariationPicker';\n\nexport function Body() {\n const BodyRef = useBodyRef();\n const scrollTop = useOnScroll(BodyRef);\n useMouseDownHandlers(BodyRef, MOUSE_EVENT_SOURCE.PICKER);\n useOnMouseMove();\n\n return (\n <div\n className={cx(styles.body, commonInteractionStyles.hiddenOnReactions)}\n ref={BodyRef}\n >\n <EmojiVariationPicker />\n <EmojiList scrollTop={scrollTop} />\n </div>\n );\n}\n\nconst styles = stylesheet.create({\n body: {\n '.': ClassNames.scrollBody,\n flex: '1',\n overflowY: 'scroll',\n overflowX: 'hidden',\n position: 'relative'\n }\n});\n","import { NullableElement } from './selectors';\n\nexport function detectEmojyPartiallyBelowFold(\n button: HTMLButtonElement,\n bodyRef: NullableElement\n): number {\n if (!button || !bodyRef) {\n return 0;\n }\n\n const buttonRect = button.getBoundingClientRect();\n const bodyRect = bodyRef.getBoundingClientRect();\n\n // If the element is obscured by at least half of its size\n return bodyRect.height - (buttonRect.y - bodyRect.y);\n}\n","import * as React from 'react';\nimport { useEffect } from 'react';\n\nimport { detectEmojyPartiallyBelowFold } from '../DomUtils/detectEmojyPartiallyBelowFold';\nimport { focusElement } from '../DomUtils/focusElement';\nimport {\n allUnifiedFromEmojiElement,\n buttonFromTarget\n} from '../DomUtils/selectors';\nimport { useBodyRef } from '../components/context/ElementRefContext';\nimport { PreviewEmoji } from '../components/footer/Preview';\n\nimport {\n useAllowMouseMove,\n useIsMouseDisallowed\n} from './useDisallowMouseMove';\n\nexport function useEmojiPreviewEvents(\n allow: boolean,\n setPreviewEmoji: React.Dispatch<React.SetStateAction<PreviewEmoji>>\n) {\n const BodyRef = useBodyRef();\n const isMouseDisallowed = useIsMouseDisallowed();\n const allowMouseMove = useAllowMouseMove();\n\n useEffect(() => {\n if (!allow) {\n return;\n }\n const bodyRef = BodyRef.current;\n\n bodyRef?.addEventListener('keydown', onEscape, {\n passive: true\n });\n\n bodyRef?.addEventListener('mouseover', onMouseOver, true);\n\n bodyRef?.addEventListener('focus', onEnter, true);\n\n bodyRef?.addEventListener('mouseout', onLeave, {\n passive: true\n });\n bodyRef?.addEventListener('blur', onLeave, true);\n\n function onEnter(e: FocusEvent) {\n const button = buttonFromTarget(e.target as HTMLElement);\n\n if (!button) {\n return onLeave();\n }\n\n const { unified, originalUnified } = allUnifiedFromEmojiElement(button);\n\n if (!unified || !originalUnified) {\n return onLeave();\n }\n\n setPreviewEmoji({\n unified,\n originalUnified\n });\n }\n function onLeave(e?: FocusEvent | MouseEvent) {\n if (e) {\n const relatedTarget = e.relatedTarget as HTMLElement;\n\n if (!buttonFromTarget(relatedTarget)) {\n return setPreviewEmoji(null);\n }\n }\n\n setPreviewEmoji(null);\n }\n function onEscape(e: KeyboardEvent) {\n if (e.key === 'Escape') {\n setPreviewEmoji(null);\n }\n }\n\n function onMouseOver(e: MouseEvent) {\n if (isMouseDisallowed()) {\n return;\n }\n\n const button = buttonFromTarget(e.target as HTMLElement);\n\n if (button) {\n const belowFoldByPx = detectEmojyPartiallyBelowFold(button, bodyRef);\n const buttonHeight = button.getBoundingClientRect().height;\n if (belowFoldByPx < buttonHeight) {\n return handlePartiallyVisibleElementFocus(button, setPreviewEmoji);\n }\n\n focusElement(button);\n }\n }\n\n return () => {\n bodyRef?.removeEventListener('mouseover', onMouseOver);\n bodyRef?.removeEventListener('mouseout', onLeave);\n bodyRef?.removeEventListener('focus', onEnter, true);\n bodyRef?.removeEventListener('blur', onLeave, true);\n bodyRef?.removeEventListener('keydown', onEscape);\n };\n }, [BodyRef, allow, setPreviewEmoji, isMouseDisallowed, allowMouseMove]);\n}\n\nfunction handlePartiallyVisibleElementFocus(\n button: HTMLElement,\n setPreviewEmoji: React.Dispatch<React.SetStateAction<PreviewEmoji>>\n) {\n const { unified, originalUnified } = allUnifiedFromEmojiElement(button);\n\n if (!unified || !originalUnified) {\n return;\n }\n\n (document.activeElement as HTMLElement)?.blur?.();\n\n setPreviewEmoji({\n unified,\n originalUnified\n });\n}\n","import { cx } from 'flairup';\nimport * as React from 'react';\n\nimport { stylesheet } from '../../Stylesheet/stylesheet';\n\nexport enum FlexDirection {\n ROW = 'FlexRow',\n COLUMN = 'FlexColumn'\n}\n\ntype Props = Readonly<{\n children: React.ReactNode;\n className?: string;\n style?: React.CSSProperties;\n direction?: FlexDirection;\n}>;\n\nexport default function Flex({\n children,\n className,\n style = {},\n direction = FlexDirection.ROW\n}: Props) {\n return (\n <div\n style={{ ...style }}\n className={cx(styles.flex, className, styles[direction])}\n >\n {children}\n </div>\n );\n}\n\nconst styles = stylesheet.create({\n flex: {\n display: 'flex'\n },\n [FlexDirection.ROW]: {\n flexDirection: 'row'\n },\n [FlexDirection.COLUMN]: {\n flexDirection: 'column'\n }\n});\n","import { cx } from 'flairup';\nimport * as React from 'react';\n\n\ntype Props = Readonly<{\n className?: string;\n style?: React.CSSProperties;\n}>;\n\nexport default function Space({ className, style = {} }: Props) {\n return <div style={{ flex: 1, ...style }} className={cx(className)} />;\n}\n","import * as React from 'react';\n\ntype Props = Readonly<{\n children: React.ReactNode;\n className?: string;\n style?: React.CSSProperties;\n}>;\n\nexport default function Absolute({ children, className, style }: Props) {\n return (\n <div style={{ ...style, position: 'absolute' }} className={className}>\n {children}\n </div>\n );\n}\n","import * as React from 'react';\n\ntype Props = Readonly<{\n children: React.ReactNode;\n className?: string;\n style?: React.CSSProperties;\n}>;\n\nexport default function Relative({ children, className, style }: Props) {\n return (\n <div style={{ ...style, position: 'relative' }} className={className}>\n {children}\n </div>\n );\n}\n","import { cx } from 'flairup';\nimport * as React from 'react';\n\nimport { stylesheet } from '../../../Stylesheet/stylesheet';\nimport { skinTonesNamed } from '../../../data/skinToneVariations';\nimport { SkinTones } from '../../../types/exposedTypes';\nimport { Button } from '../../atoms/Button';\n\ntype Props = {\n isOpen: boolean;\n onClick: () => void;\n isActive: boolean;\n skinToneVariation: SkinTones;\n style?: React.CSSProperties;\n};\n\n// eslint-disable-next-line complexity\nexport function BtnSkinToneVariation({\n isOpen,\n onClick,\n isActive,\n skinToneVariation,\n style\n}: Props) {\n return (\n <Button\n style={style}\n onClick={onClick}\n className={cx(\n `epr-tone-${skinToneVariation}`,\n styles.tone,\n !isOpen && styles.closedTone,\n isActive && styles.active\n )}\n aria-pressed={isActive}\n aria-label={`Skin tone ${skinTonesNamed[skinToneVariation as SkinTones]}`}\n ></Button>\n );\n}\n\nconst styles = stylesheet.create({\n closedTone: {\n opacity: '0',\n zIndex: '0'\n },\n active: {\n '.': 'epr-active',\n zIndex: '1',\n opacity: '1'\n },\n tone: {\n '.': 'epr-tone',\n width: 'var(--epr-skin-tone-size)',\n display: 'block',\n cursor: 'pointer',\n borderRadius: '4px',\n height: 'var(--epr-skin-tone-size)',\n position: 'absolute',\n right: '0',\n transition: 'transform 0.3s ease-in-out, opacity 0.35s ease-in-out',\n zIndex: '0',\n border: '1px solid var(--epr-skin-tone-outer-border-color)',\n boxShadow: 'inset 0px 0px 0 1px var(--epr-skin-tone-inner-border-color)',\n ':hover': {\n boxShadow: '0 0 0 3px var(--epr-active-skin-hover-color), inset 0px 0px 0 1px var(--epr-skin-tone-inner-border-color)'\n },\n ':focus': {\n boxShadow: '0 0 0 3px var(--epr-focus-bg-color)'\n },\n '&.epr-tone-neutral': {\n backgroundColor: '#ffd225'\n },\n '&.epr-tone-1f3fb': {\n backgroundColor: '#ffdfbd'\n },\n '&.epr-tone-1f3fc': {\n backgroundColor: '#e9c197'\n },\n '&.epr-tone-1f3fd': {\n backgroundColor: '#c88e62'\n },\n '&.epr-tone-1f3fe': {\n backgroundColor: '#a86637'\n },\n '&.epr-tone-1f3ff': {\n backgroundColor: '#60463a'\n }\n }\n});\n","/* eslint-disable complexity */\nimport { cx } from 'flairup';\nimport * as React from 'react';\n\nimport { ClassNames } from '../../../DomUtils/classNames';\nimport { stylesheet } from '../../../Stylesheet/stylesheet';\nimport {\n useOnSkinToneChangeConfig,\n useSkinTonesDisabledConfig\n} from '../../../config/useConfig';\nimport skinToneVariations from '../../../data/skinToneVariations';\nimport { useCloseAllOpenToggles } from '../../../hooks/useCloseAllOpenToggles';\nimport { useFocusSearchInput } from '../../../hooks/useFocus';\nimport Absolute from '../../Layout/Absolute';\nimport Relative from '../../Layout/Relative';\nimport { useSkinTonePickerRef } from '../../context/ElementRefContext';\nimport {\n useActiveSkinToneState,\n useSkinToneFanOpenState\n} from '../../context/PickerContext';\n\nimport { BtnSkinToneVariation } from './BtnSkinToneVariation';\n\nconst ITEM_SIZE = 28;\n\ntype Props = {\n direction?: SkinTonePickerDirection;\n};\n\nexport function SkinTonePickerMenu() {\n return (\n <Relative style={{ height: ITEM_SIZE }}>\n <Absolute style={{ bottom: 0, right: 0 }}>\n <SkinTonePicker direction={SkinTonePickerDirection.VERTICAL} />\n </Absolute>\n </Relative>\n );\n}\n\nexport function SkinTonePicker({\n direction = SkinTonePickerDirection.HORIZONTAL\n}: Props) {\n const SkinTonePickerRef = useSkinTonePickerRef();\n const isDisabled = useSkinTonesDisabledConfig();\n const [isOpen, setIsOpen] = useSkinToneFanOpenState();\n const [activeSkinTone, setActiveSkinTone] = useActiveSkinToneState();\n const onSkinToneChange = useOnSkinToneChangeConfig();\n const closeAllOpenToggles = useCloseAllOpenToggles();\n const focusSearchInput = useFocusSearchInput();\n\n if (isDisabled) {\n return null;\n }\n\n const fullWidth = `${ITEM_SIZE * skinToneVariations.length}px`;\n\n const expandedSize = isOpen ? fullWidth : ITEM_SIZE + 'px';\n\n const vertical = direction === SkinTonePickerDirection.VERTICAL;\n\n return (\n <Relative\n className={cx(\n styles.skinTones,\n vertical && styles.vertical,\n isOpen && styles.open,\n vertical && isOpen && styles.verticalShadow\n )}\n style={\n vertical\n ? { flexBasis: expandedSize, height: expandedSize }\n : { flexBasis: expandedSize }\n }\n >\n <div className={cx(styles.select)} ref={SkinTonePickerRef}>\n {skinToneVariations.map((skinToneVariation, i) => {\n const active = skinToneVariation === activeSkinTone;\n\n return (\n <BtnSkinToneVariation\n key={skinToneVariation}\n skinToneVariation={skinToneVariation}\n isOpen={isOpen}\n style={{\n transform: cx(\n vertical\n ? `translateY(-${i * (isOpen ? ITEM_SIZE : 0)}px)`\n : `translateX(-${i * (isOpen ? ITEM_SIZE : 0)}px)`,\n isOpen && active && 'scale(1.3)'\n )\n }}\n isActive={active}\n onClick={() => {\n if (isOpen) {\n setActiveSkinTone(skinToneVariation);\n onSkinToneChange(skinToneVariation);\n focusSearchInput();\n } else {\n setIsOpen(true);\n }\n closeAllOpenToggles();\n }}\n />\n );\n })}\n </div>\n </Relative>\n );\n}\n\nexport enum SkinTonePickerDirection {\n VERTICAL = ClassNames.vertical,\n HORIZONTAL = ClassNames.horizontal\n}\n\nconst styles = stylesheet.create({\n skinTones: {\n '.': 'epr-skin-tones',\n '--': {\n '--epr-skin-tone-size': '15px'\n },\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'flex-end',\n transition: 'all 0.3s ease-in-out',\n padding: '10px 0'\n },\n vertical: {\n padding: '9px',\n alignItems: 'flex-end',\n flexDirection: 'column',\n borderRadius: '6px',\n border: '1px solid var(--epr-bg-color)'\n },\n verticalShadow: {\n boxShadow: '0px 0 7px var(--epr-picker-border-color)'\n },\n open: {\n // @ts-ignore - backdropFilter is not recognized.\n backdropFilter: 'blur(5px)',\n background: 'var(--epr-skin-tone-picker-menu-color)',\n '.epr-active': {\n border: '1px solid var(--epr-active-skin-tone-indicator-border-color)'\n }\n },\n select: {\n '.': 'epr-skin-tone-select',\n position: 'relative',\n width: 'var(--epr-skin-tone-size)',\n height: 'var(--epr-skin-tone-size)'\n }\n});\n","import { cx } from 'flairup';\nimport * as React from 'react';\nimport { useState } from 'react';\n\nimport {\n commonInteractionStyles,\n stylesheet\n} from '../../Stylesheet/stylesheet';\nimport {\n useEmojiStyleConfig,\n useGetEmojiUrlConfig,\n usePreviewConfig\n} from '../../config/useConfig';\nimport { emojiName, emojiUnified } from '../../dataUtils/emojiSelectors';\nimport { useEmojiPreviewEvents } from '../../hooks/useEmojiPreviewEvents';\nimport { useIsSkinToneInPreview } from '../../hooks/useShouldShowSkinTonePicker';\nimport Flex from '../Layout/Flex';\nimport Space from '../Layout/Space';\nimport {\n useEmojiVariationPickerState,\n useReactionsModeState\n} from '../context/PickerContext';\nimport { usePickerDataContext } from '../context/PickerDataContext';\nimport { ViewOnlyEmoji } from '../emoji/ViewOnlyEmoji';\nimport { SkinTonePickerMenu } from '../header/SkinTonePicker/SkinTonePicker';\n\nexport function Preview() {\n const previewConfig = usePreviewConfig();\n const isSkinToneInPreview = useIsSkinToneInPreview();\n const [reactionsOpen] = useReactionsModeState();\n\n if (!previewConfig.showPreview) {\n return null;\n }\n\n return (\n <Flex\n className={cx(\n styles.preview,\n commonInteractionStyles.hiddenOnReactions,\n reactionsOpen && styles.hideOnReactions\n )}\n >\n <PreviewBody />\n <Space />\n {isSkinToneInPreview ? <SkinTonePickerMenu /> : null}\n </Flex>\n );\n}\n\nexport function PreviewBody() {\n const previewConfig = usePreviewConfig();\n const [previewEmoji, setPreviewEmoji] = useState<PreviewEmoji>(null);\n const emojiStyle = useEmojiStyleConfig();\n const [variationPickerEmoji] = useEmojiVariationPickerState();\n const getEmojiUrl = useGetEmojiUrlConfig();\n const { emojiByUnified } = usePickerDataContext();\n\n useEmojiPreviewEvents(previewConfig.showPreview, setPreviewEmoji);\n\n const emoji = emojiByUnified(\n (previewEmoji?.unified ?? previewEmoji?.originalUnified) as\n | string\n | undefined\n );\n\n const show = emoji != null && previewEmoji != null;\n\n return <PreviewContent />;\n\n function PreviewContent() {\n const defaultEmoji =\n variationPickerEmoji ?? emojiByUnified(previewConfig.defaultEmoji);\n if (!defaultEmoji) {\n return null;\n }\n const defaultText = variationPickerEmoji\n ? emojiName(variationPickerEmoji)\n : previewConfig.defaultCaption;\n\n return (\n <>\n <div>\n {show ? (\n <ViewOnlyEmoji\n unified={previewEmoji?.unified as string}\n emoji={emoji}\n emojiStyle={emojiStyle}\n size={45}\n getEmojiUrl={getEmojiUrl}\n className={cx(styles.emoji)}\n />\n ) : defaultEmoji ? (\n <ViewOnlyEmoji\n unified={emojiUnified(defaultEmoji)}\n emoji={defaultEmoji}\n emojiStyle={emojiStyle}\n size={45}\n getEmojiUrl={getEmojiUrl}\n className={cx(styles.emoji)}\n />\n ) : null}\n </div>\n <div className={cx(styles.label)}>\n {show ? emojiName(emoji) : defaultText}\n </div>\n </>\n );\n }\n}\n\nexport type PreviewEmoji = null | {\n unified: string;\n originalUnified: string;\n};\n\nconst styles = stylesheet.create({\n preview: {\n alignItems: 'center',\n borderTop: '1px solid var(--epr-preview-border-color)',\n height: 'var(--epr-preview-height)',\n padding: '0 var(--epr-horizontal-padding)',\n position: 'relative',\n zIndex: 'var(--epr-preview-z-index)'\n },\n label: {\n color: 'var(--epr-preview-text-color)',\n fontSize: 'var(--epr-preview-text-size)',\n padding: 'var(--epr-preview-text-padding)',\n textTransform: 'capitalize'\n },\n emoji: {\n padding: '0'\n },\n hideOnReactions: {\n opacity: '0',\n transition: 'opacity 0.5s ease-in-out'\n }\n});\n","export function categoryNameFromDom($category: Element | null): string | null {\n return $category?.getAttribute('data-name') ?? null;\n}\n","import { useEffect } from 'react';\n\nimport { categoryNameFromDom } from '../DomUtils/categoryNameFromDom';\nimport { asSelectors, ClassNames } from '../DomUtils/classNames';\nimport { useBodyRef } from '../components/context/ElementRefContext';\n\nexport function useActiveCategoryScrollDetection({\n setActiveCategory,\n setVisibleCategories\n}: {\n setActiveCategory: (category: string) => void;\n setVisibleCategories: (categories: string[]) => void;\n}) {\n const BodyRef = useBodyRef();\n\n useEffect(() => {\n const visibleCategories = new Map<string, number>();\n const intersectingCategories = new Map<string, boolean>();\n const bodyRef = BodyRef.current;\n const observer = new IntersectionObserver(\n entries => {\n if (!bodyRef) {\n return;\n }\n\n for (const entry of entries) {\n const id = categoryNameFromDom(entry.target);\n\n if (!id) {\n continue;\n }\n\n visibleCategories.set(id, entry.intersectionRatio);\n intersectingCategories.set(id, entry.isIntersecting);\n }\n\n const ratios = Array.from(visibleCategories);\n const visibleCats = ratios\n .filter(([id, ratio]) => ratio > 0 || intersectingCategories.get(id))\n .map(([id]) => id);\n\n setVisibleCategories(visibleCats);\n const lastCategory = ratios[ratios.length - 1];\n\n if (lastCategory?.[1] == 1) {\n return setActiveCategory(lastCategory[0]);\n }\n\n for (const [id, ratio] of ratios) {\n if (ratio) {\n setActiveCategory(id);\n break;\n }\n }\n },\n {\n root: bodyRef,\n threshold: [0, 1]\n }\n );\n bodyRef?.querySelectorAll(asSelectors(ClassNames.category)).forEach(el => {\n observer.observe(el);\n });\n\n return () => {\n observer.disconnect();\n };\n }, [BodyRef, setActiveCategory, setVisibleCategories]);\n}\n","import { scrollTo } from '../DomUtils/scrollTo';\nimport { NullableElement } from '../DomUtils/selectors';\nimport {\n useBodyRef,\n usePickerMainRef\n} from '../components/context/ElementRefContext';\n\nexport function useScrollCategoryIntoView() {\n const BodyRef = useBodyRef();\n const PickerMainRef = usePickerMainRef();\n\n return function scrollCategoryIntoView(category: string): void {\n if (!BodyRef.current) {\n return;\n }\n const $category = BodyRef.current?.querySelector(\n `[data-name=\"${category}\"]`\n ) as NullableElement;\n\n if (!$category) {\n return;\n }\n\n const offsetTop = $category.offsetTop || 0;\n\n scrollTo(PickerMainRef.current, offsetTop);\n };\n}\n","import { useCustomEmojisConfig } from '../config/useConfig';\n\nexport function useShouldHideCustomEmojis() {\n const customCategoryConfig = useCustomEmojisConfig();\n\n if (!customCategoryConfig) {\n return false;\n }\n\n return customCategoryConfig.length === 0;\n}\n","import { cx } from 'flairup';\nimport * as React from 'react';\n\nimport { ClassNames } from '../../DomUtils/classNames';\nimport {\n commonInteractionStyles,\n darkMode,\n stylesheet\n} from '../../Stylesheet/stylesheet';\nimport { categoryNameFromCategoryConfig } from '../../config/categoryConfig';\nimport { CategoryConfig } from '../../types/exposedTypes';\nimport { Button } from '../atoms/Button';\n\nimport SVGNavigation from './svg/CategoryNav.svg';\n\ntype Props = {\n isActiveCategory: boolean;\n category: string;\n allowNavigation: boolean;\n onClick: () => void;\n categoryConfig: CategoryConfig;\n};\n\nexport function CategoryButton({\n isActiveCategory,\n category,\n allowNavigation,\n categoryConfig,\n onClick\n}: Props) {\n return (\n <Button\n tabIndex={allowNavigation ? 0 : -1}\n className={cx(\n styles.catBtn,\n commonInteractionStyles.categoryBtn,\n `epr-icn-${category}`,\n {\n [ClassNames.active]: isActiveCategory\n }\n )}\n onClick={onClick}\n aria-label={categoryNameFromCategoryConfig(categoryConfig)}\n aria-selected={isActiveCategory}\n role=\"tab\"\n aria-controls=\"epr-category-nav-id\"\n />\n );\n}\n\nconst DarkActivePositionY = {\n backgroundPositionY: 'calc(var(--epr-category-navigation-button-size) * 3)'\n};\nconst DarkPositionY = {\n backgroundPositionY: 'calc(var(--epr-category-navigation-button-size) * 2)'\n};\n\nconst DarkInactivePosition = {\n ':not(.epr-search-active)': {\n catBtn: {\n ':hover': DarkActivePositionY,\n '&.epr-active': DarkActivePositionY\n }\n }\n};\n\nconst styles = stylesheet.create({\n catBtn: {\n '.': 'epr-cat-btn',\n display: 'inline-block',\n transition: 'opacity 0.2s ease-in-out',\n position: 'relative',\n height: 'var(--epr-category-navigation-button-size)',\n width: 'var(--epr-category-navigation-button-size)',\n backgroundSize: 'calc(var(--epr-category-navigation-button-size) * 10)',\n outline: 'none',\n backgroundPosition: '0 0',\n backgroundImage: `url(${SVGNavigation})`,\n ':focus:before': {\n content: '',\n position: 'absolute',\n top: '-2px',\n left: '-2px',\n right: '-2px',\n bottom: '-2px',\n border: '2px solid var(--epr-category-icon-active-color)',\n borderRadius: '50%'\n },\n '&.epr-icn-suggested': {\n backgroundPositionX:\n 'calc(var(--epr-category-navigation-button-size) * -8)'\n },\n '&.epr-icn-custom': {\n backgroundPositionX:\n 'calc(var(--epr-category-navigation-button-size) * -9)'\n },\n '&.epr-icn-activities': {\n backgroundPositionX:\n 'calc(var(--epr-category-navigation-button-size) * -4)'\n },\n '&.epr-icn-animals_nature': {\n backgroundPositionX:\n 'calc(var(--epr-category-navigation-button-size) * -1)'\n },\n '&.epr-icn-flags': {\n backgroundPositionX:\n 'calc(var(--epr-category-navigation-button-size) * -7)'\n },\n '&.epr-icn-food_drink': {\n backgroundPositionX:\n 'calc(var(--epr-category-navigation-button-size) * -2)'\n },\n '&.epr-icn-objects': {\n backgroundPositionX:\n 'calc(var(--epr-category-navigation-button-size) * -5)'\n },\n '&.epr-icn-smileys_people': {\n backgroundPositionX: '0px'\n },\n '&.epr-icn-symbols': {\n backgroundPositionX:\n 'calc(var(--epr-category-navigation-button-size) * -6)'\n },\n '&.epr-icn-travel_places': {\n backgroundPositionX:\n 'calc(var(--epr-category-navigation-button-size) * -3)'\n }\n },\n ...darkMode('catBtn', DarkPositionY),\n '.epr-dark-theme': {\n ...DarkInactivePosition\n },\n '.epr-auto-theme': {\n ...DarkInactivePosition\n }\n});\n","import { cx } from 'flairup';\nimport * as React from 'react';\nimport { useState } from 'react';\n\nimport { stylesheet } from '../../Stylesheet/stylesheet';\nimport { categoryFromCategoryConfig } from '../../config/categoryConfig';\nimport { useCategoriesConfig } from '../../config/useConfig';\nimport { useActiveCategoryScrollDetection } from '../../hooks/useActiveCategoryScrollDetection';\nimport useIsSearchMode from '../../hooks/useIsSearchMode';\nimport { useScrollCategoryIntoView } from '../../hooks/useScrollCategoryIntoView';\nimport { useShouldHideCustomEmojis } from '../../hooks/useShouldHideCustomEmojis';\nimport { isCustomCategory } from '../../typeRefinements/typeRefinements';\nimport { useCategoryNavigationRef } from '../context/ElementRefContext';\nimport { useVisibleCategoriesState } from '../context/PickerContext';\n\nimport { CategoryButton } from './CategoryButton';\n\nexport function CategoryNavigation() {\n const [activeCategory, setActiveCategory] = useState<string | null>(null);\n const [, setVisibleCategories] = useVisibleCategoriesState();\n const scrollCategoryIntoView = useScrollCategoryIntoView();\n useActiveCategoryScrollDetection({ setActiveCategory, setVisibleCategories });\n const isSearchMode = useIsSearchMode();\n\n const categoriesConfig = useCategoriesConfig();\n const CategoryNavigationRef = useCategoryNavigationRef();\n const hideCustomCategory = useShouldHideCustomEmojis();\n\n return (\n <div\n className={cx(styles.nav)}\n role=\"tablist\"\n aria-label=\"Category navigation\"\n id=\"epr-category-nav-id\"\n ref={CategoryNavigationRef}\n >\n {categoriesConfig.map(categoryConfig => {\n const category = categoryFromCategoryConfig(categoryConfig);\n const isActiveCategory = category === activeCategory;\n\n if (isCustomCategory(categoryConfig) && hideCustomCategory) {\n return null;\n }\n\n const allowNavigation = !isSearchMode && !isActiveCategory;\n\n return (\n <CategoryButton\n key={category}\n category={category}\n isActiveCategory={isActiveCategory}\n allowNavigation={allowNavigation}\n categoryConfig={categoryConfig}\n onClick={() => {\n scrollCategoryIntoView(category);\n setTimeout(() => {\n setActiveCategory(category);\n }, 10);\n }}\n />\n );\n })}\n </div>\n );\n}\n\nconst styles = stylesheet.create({\n nav: {\n '.': 'epr-category-nav',\n display: 'flex',\n flexDirection: 'row',\n justifyContent: 'space-around',\n padding: 'var(--epr-header-padding)'\n },\n '.epr-search-active': {\n nav: {\n opacity: '0.3',\n cursor: 'default',\n pointerEvents: 'none'\n }\n },\n '.epr-main:has(input:not(:placeholder-shown))': {\n nav: {\n opacity: '0.3',\n cursor: 'default',\n pointerEvents: 'none'\n }\n }\n});\n","import { cx } from 'flairup';\nimport * as React from 'react';\n\nimport {\n commonInteractionStyles,\n darkMode,\n stylesheet\n} from '../../../Stylesheet/stylesheet';\nimport { useSearchClearButtonLabelConfig } from '../../../config/useConfig';\nimport { useClearSearch } from '../../../hooks/useFilter';\nimport { Button } from '../../atoms/Button';\n\nimport SVGTimes from './svg/times.svg';\n\nexport function BtnClearSearch() {\n const clearSearch = useClearSearch();\n const searchClearButtonLabel = useSearchClearButtonLabelConfig();\n\n return (\n <Button\n className={cx(\n styles.btnClearSearch,\n commonInteractionStyles.visibleOnSearchOnly\n )}\n onClick={clearSearch}\n aria-label={searchClearButtonLabel}\n title={searchClearButtonLabel}\n >\n <div className={cx(styles.icnClearnSearch)} />\n </Button>\n );\n}\n\nconst HoverDark = {\n ':hover': {\n '> .epr-icn-clear-search': {\n backgroundPositionY: '-60px'\n }\n }\n};\n\nconst styles = stylesheet.create({\n btnClearSearch: {\n '.': 'epr-btn-clear-search',\n position: 'absolute',\n right: 'var(--epr-search-bar-inner-padding)',\n height: '30px',\n width: '30px',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n top: '50%',\n transform: 'translateY(-50%)',\n padding: '0',\n borderRadius: '50%',\n ':hover': {\n background: 'var(--epr-hover-bg-color)'\n },\n ':focus': {\n background: 'var(--epr-hover-bg-color)'\n }\n },\n icnClearnSearch: {\n '.': 'epr-icn-clear-search',\n backgroundColor: 'transparent',\n backgroundRepeat: 'no-repeat',\n backgroundSize: '20px',\n height: '20px',\n width: '20px',\n backgroundImage: `url(${SVGTimes})`,\n ':hover': {\n backgroundPositionY: '-20px'\n },\n ':focus': {\n backgroundPositionY: '-20px'\n }\n },\n ...darkMode('icnClearnSearch', {\n backgroundPositionY: '-40px'\n }),\n ...darkMode('btnClearSearch', HoverDark)\n});\n","import { cx } from 'flairup';\nimport * as React from 'react';\n\nimport { darkMode, stylesheet } from '../../../Stylesheet/stylesheet';\n\nimport SVGMagnifier from './svg/magnifier.svg';\n\nexport function IcnSearch() {\n return <div className={cx(styles.icnSearch)} />;\n}\n\nconst styles = stylesheet.create({\n icnSearch: {\n '.': 'epr-icn-search',\n content: '',\n position: 'absolute',\n top: '50%',\n left: 'var(--epr-search-bar-inner-padding)',\n transform: 'translateY(-50%)',\n width: '20px',\n height: '20px',\n backgroundRepeat: 'no-repeat',\n backgroundPosition: '0 0',\n backgroundSize: '20px',\n backgroundImage: `url(${SVGMagnifier})`\n },\n ...darkMode('icnSearch', {\n backgroundPositionY: '-20px'\n })\n});\n","import { cx } from 'flairup';\nimport * as React from 'react';\n\nimport { darkMode, stylesheet } from '../../../Stylesheet/stylesheet';\nimport {\n useAutoFocusSearchConfig,\n useSearchDisabledConfig,\n useSearchPlaceHolderConfig\n} from '../../../config/useConfig';\nimport { useCloseAllOpenToggles } from '../../../hooks/useCloseAllOpenToggles';\nimport { useFilter } from '../../../hooks/useFilter';\nimport { useIsSkinToneInSearch } from '../../../hooks/useShouldShowSkinTonePicker';\nimport Flex from '../../Layout/Flex';\nimport Relative from '../../Layout/Relative';\nimport { useSearchInputRef } from '../../context/ElementRefContext';\nimport { SkinTonePicker } from '../SkinTonePicker/SkinTonePicker';\n\nimport { BtnClearSearch } from './BtnClearSearch';\nimport { IcnSearch } from './IcnSearch';\nimport SVGTimes from './svg/times.svg';\n\nexport function SearchContainer() {\n const searchDisabled = useSearchDisabledConfig();\n\n const isSkinToneInSearch = useIsSkinToneInSearch();\n\n if (searchDisabled) {\n return null;\n }\n\n return (\n <Flex className={cx(styles.overlay)}>\n <Search />\n\n {isSkinToneInSearch ? <SkinTonePicker /> : null}\n </Flex>\n );\n}\n\nexport function Search() {\n const closeAllOpenToggles = useCloseAllOpenToggles();\n const SearchInputRef = useSearchInputRef();\n const placeholder = useSearchPlaceHolderConfig();\n const autoFocus = useAutoFocusSearchConfig();\n const { statusSearchResults, searchTerm, onChange } = useFilter();\n\n const input = SearchInputRef?.current;\n const value = input?.value;\n\n return (\n <Relative className={cx(styles.searchContainer)}>\n <input\n // eslint-disable-next-line jsx-a11y/no-autofocus\n autoFocus={autoFocus}\n aria-label={'Type to search for an emoji'}\n onFocus={closeAllOpenToggles}\n className={cx(styles.search)}\n type=\"text\"\n aria-controls=\"epr-search-id\"\n placeholder={placeholder}\n onChange={event => {\n onChange(event?.target?.value ?? value);\n }}\n ref={SearchInputRef}\n />\n {searchTerm ? (\n <div\n role=\"status\"\n className={cx('epr-status-search-results', styles.visuallyHidden)}\n aria-live=\"polite\"\n id=\"epr-search-id\"\n aria-atomic=\"true\"\n >\n {statusSearchResults}\n </div>\n ) : null}\n <IcnSearch />\n <BtnClearSearch />\n </Relative>\n );\n}\n\nconst styles = stylesheet.create({\n overlay: {\n padding: 'var(--epr-header-padding)',\n zIndex: 'var(--epr-header-overlay-z-index)'\n },\n searchContainer: {\n '.': 'epr-search-container',\n flex: '1',\n display: 'block',\n minWidth: '0'\n },\n visuallyHidden: {\n clip: 'rect(0 0 0 0)',\n clipPath: 'inset(50%)',\n height: '1px',\n overflow: 'hidden',\n position: 'absolute',\n whiteSpace: 'nowrap',\n width: '1px'\n },\n search: {\n outline: 'none',\n transition: 'all 0.2s ease-in-out',\n color: 'var(--epr-search-input-text-color)',\n borderRadius: 'var(--epr-search-input-border-radius)',\n padding: 'var(--epr-search-input-padding)',\n height: 'var(--epr-search-input-height)',\n backgroundColor: 'var(--epr-search-input-bg-color)',\n border: '1px solid var(--epr-search-border-color)',\n width: '100%',\n ':focus': {\n backgroundColor: 'var(--epr-search-input-bg-color-active)',\n border: '1px solid var(--epr-search-border-color-active)'\n },\n '::placeholder': {\n color: 'var(--epr-search-input-placeholder-color)'\n }\n },\n\n btnClearSearch: {\n '.': 'epr-btn-clear-search',\n position: 'absolute',\n right: 'var(--epr-search-bar-inner-padding)',\n height: '30px',\n width: '30px',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n top: '50%',\n transform: 'translateY(-50%)',\n padding: '0',\n borderRadius: '50%',\n ':hover': {\n background: 'var(--epr-hover-bg-color)'\n },\n ':focus': {\n background: 'var(--epr-hover-bg-color)'\n }\n },\n icnClearnSearch: {\n '.': 'epr-icn-clear-search',\n backgroundColor: 'transparent',\n backgroundRepeat: 'no-repeat',\n backgroundSize: '20px',\n height: '20px',\n width: '20px',\n backgroundImage: `url(${SVGTimes})`,\n ':hover': {\n backgroundPositionY: '-20px'\n },\n ':focus': {\n backgroundPositionY: '-20px'\n }\n },\n ...darkMode('icnClearnSearch', {\n backgroundPositionY: '-40px'\n }),\n ...darkMode('btnClearSearch', {\n ':hover > .epr-icn-clear-search': {\n backgroundPositionY: '-60px'\n }\n })\n});\n","import { cx } from 'flairup';\nimport * as React from 'react';\n\nimport { commonInteractionStyles } from '../../Stylesheet/stylesheet';\nimport Relative from '../Layout/Relative';\nimport { CategoryNavigation } from '../navigation/CategoryNavigation';\n\nimport { SearchContainer } from './Search/Search';\n\nexport function Header() {\n return (\n <Relative\n className={cx('epr-header', commonInteractionStyles.hiddenOnReactions)}\n >\n <SearchContainer />\n <CategoryNavigation />\n </Relative>\n );\n}\n","import * as React from 'react';\n\nimport { PickerStyleTag } from './Stylesheet/stylesheet';\nimport { Reactions } from './components/Reactions/Reactions';\nimport { Body } from './components/body/Body';\nimport { ElementRefContextProvider } from './components/context/ElementRefContext';\nimport { PickerConfigProvider } from './components/context/PickerConfigContext';\nimport { useReactionsModeState } from './components/context/PickerContext';\nimport { PickerDataProvider } from './components/context/PickerDataContext';\nimport { Preview } from './components/footer/Preview';\nimport { Header } from './components/header/Header';\nimport PickerMain from './components/main/PickerMain';\nimport { compareConfig } from './config/compareConfig';\nimport { useAllowExpandReactions, useOpenConfig } from './config/useConfig';\n\nimport { PickerProps } from './index';\n\nfunction EmojiPicker(props: PickerProps) {\n return (\n <ElementRefContextProvider>\n <PickerStyleTag />\n <PickerConfigProvider {...props}>\n <PickerDataProvider>\n <ContentControl />\n </PickerDataProvider>\n </PickerConfigProvider>\n </ElementRefContextProvider>\n );\n}\n\nfunction ContentControl() {\n const [reactionsDefaultOpen] = useReactionsModeState();\n const allowExpandReactions = useAllowExpandReactions();\n\n const [renderAll, setRenderAll] = React.useState(!reactionsDefaultOpen);\n const isOpen = useOpenConfig();\n\n React.useEffect(() => {\n if (reactionsDefaultOpen && !allowExpandReactions) {\n return;\n }\n\n if (!renderAll) {\n setRenderAll(true);\n }\n }, [renderAll, allowExpandReactions, reactionsDefaultOpen]);\n\n if (!isOpen) {\n return null;\n }\n\n return (\n <PickerMain>\n <Reactions />\n <ExpandedPickerContent renderAll={renderAll} />\n </PickerMain>\n );\n}\n\nfunction ExpandedPickerContent({ renderAll }: { renderAll: boolean }) {\n if (!renderAll) {\n return null;\n }\n\n return (\n <>\n <Header />\n <Body />\n <Preview />\n </>\n );\n}\n\n// eslint-disable-next-line complexity\nexport default React.memo(EmojiPicker, compareConfig);\n","import * as React from 'react';\n\nexport default class ErrorBoundary extends React.Component<\n { children: React.ReactNode },\n { hasError: boolean }\n> {\n constructor(props: { children: React.ReactNode }) {\n super(props);\n this.state = { hasError: false };\n }\n\n static getDerivedStateFromError() {\n return { hasError: true };\n }\n\n componentDidCatch(error: Error, errorInfo: any) {\n // eslint-disable-next-line no-console\n console.error('Emoji Picker React failed to render:', error, errorInfo);\n }\n\n render() {\n if (this.state.hasError) {\n return null;\n }\n\n return this.props.children;\n }\n}\n","import * as React from 'react';\n\nimport { EmojiStyle } from '../../types/exposedTypes';\n\nimport { GetEmojiUrl } from './BaseEmojiProps';\nimport { ViewOnlyEmoji } from './ViewOnlyEmoji';\n\nexport function ExportedEmoji({\n unified,\n size = 32,\n emojiStyle = EmojiStyle.APPLE,\n lazyLoad = false,\n getEmojiUrl,\n emojiUrl\n}: {\n unified: string;\n emojiStyle?: EmojiStyle;\n size?: number;\n lazyLoad?: boolean;\n getEmojiUrl?: GetEmojiUrl;\n emojiUrl?: string;\n}) {\n if (!unified && !emojiUrl && !getEmojiUrl) {\n return null;\n }\n\n return (\n <ViewOnlyEmoji\n unified={unified}\n size={size}\n emojiStyle={emojiStyle}\n lazyLoad={lazyLoad}\n getEmojiUrl={emojiUrl ? () => emojiUrl : getEmojiUrl}\n />\n );\n}\n","import * as React from 'react';\n\nimport EmojiPickerReact from './EmojiPickerReact';\nimport ErrorBoundary from './components/ErrorBoundary';\nimport { PickerConfig } from './config/config';\nimport {\n MutableConfigContext,\n useDefineMutableConfig\n} from './config/mutableConfig';\n\nexport { ExportedEmoji as Emoji } from './components/emoji/ExportedEmoji';\n\nexport {\n EmojiStyle,\n SkinTones,\n Theme,\n Categories,\n EmojiClickData,\n SuggestionMode,\n SkinTonePickerLocation\n} from './types/exposedTypes';\n\nexport { emojiByUnified } from './dataUtils/emojiSelectors';\n\nexport interface PickerProps extends PickerConfig {}\n\nexport default function EmojiPicker(props: PickerProps) {\n const MutableConfigRef = useDefineMutableConfig({\n onEmojiClick: props.onEmojiClick,\n onReactionClick: props.onReactionClick,\n onSkinToneChange: props.onSkinToneChange,\n });\n\n return (\n <ErrorBoundary>\n <MutableConfigContext.Provider value={MutableConfigRef}>\n <EmojiPickerReact {...props} />\n </MutableConfigContext.Provider>\n </ErrorBoundary>\n );\n}\n"],"names":["ClassNames","asSelectors","classNames","Array","_len","_key","arguments","map","c","join","stylesheet","createSheet","hidden","display","opacity","pointerEvents","visibility","overflow","commonStyles","create","_extends","PickerStyleTag","React","suppressHydrationWarning","dangerouslySetInnerHTML","__html","getStyle","commonInteractionStyles","categoryBtn","backgroundPositionY","hiddenOnSearch","visibleOnSearchOnly","hiddenOnReactions","transition","height","width","darkMode","key","value","_eprDarkTheme","_eprAutoTheme","compareConfig","prev","next","prevCustomEmojis","_prev$customEmojis","customEmojis","nextCustomEmojis","_next$customEmojis","open","emojiVersion","reactionsDefaultOpen","searchPlaceHolder","searchPlaceholder","searchClearButtonLabel","defaultSkinTone","skinTonesDisabled","autoFocusSearch","emojiStyle","theme","suggestedEmojisMode","lazyLoadEmojis","className","style","searchDisabled","skinTonePickerLocation","length","emojiData","DEFAULT_REACTIONS","SuggestionMode","EmojiStyle","Theme","SkinTones","Categories","SkinTonePickerLocation","CDN_URL_APPLE","CDN_URL_FACEBOOK","CDN_URL_TWITTER","CDN_URL_GOOGLE","cdnUrl","TWITTER","GOOGLE","FACEBOOK","APPLE","skinToneVariations","NEUTRAL","LIGHT","MEDIUM_LIGHT","MEDIUM","MEDIUM_DARK","DARK","skinTonesNamed","Object","entries","reduce","acc","_ref","skinTonesMapped","mapped","skinTone","_Object$assign","assign","EmojiProperties","emojiNames","emoji","_emoji$EmojiPropertie","name","addedIn","parseFloat","added_in","emojiName","names","unifiedWithoutSkinTone","unified","splat","split","_splat$splice","splice","emojiUnified","emojiHasVariations","_emojiVariationUnifie","emojiVariationUnified","emojiUrlByUnified","emojiVariations","_emoji$EmojiPropertie2","variations","find","variation","includes","activeVariationFromUnified","_unified$split","suspectedSkinTone","keys","categoriesOrdered","SUGGESTED","CUSTOM","SMILEYS_PEOPLE","ANIMALS_NATURE","FOOD_DRINK","TRAVEL_PLACES","ACTIVITIES","OBJECTS","SYMBOLS","FLAGS","SuggestedRecent","category","configByCategory","_configByCategory","baseCategoriesConfig","modifiers","categoryFromCategoryConfig","categoryNameFromCategoryConfig","mergeCategoriesConfig","userCategoriesConfig","extra","fromData","categories","fromEntries","filter","config","suggestionMode","RECENT","_emojiData$categories","recentConfig","base","_userCategoriesConfig","getBaseConfigByCategory","modifier","KNOWN_FAILING_EMOJIS","DEFAULT_SEARCH_PLACEHOLDER","DEFAULT_SEARCH_CLEAR_BUTTON_LABEL","SEARCH_RESULTS_NO_RESULTS_FOUND","SEARCH_RESULTS_SUFFIX","SEARCH_RESULTS_ONE_RESULT_FOUND","SEARCH_RESULTS_MULTIPLE_RESULTS_FOUND","mergeConfig","userConfig","basePickerConfig","localizedMood","_userConfig$emojiData","_userConfig$emojiData2","_userConfig$emojiData3","preview_mood","previewConfig","_userConfig$previewCo","defaultCaption","_userConfig$previewCo2","hiddenEmojis","forEach","unicodeToHide","add","PREVIEW","getEmojiUrl","basePreviewConfig","SEARCH","FREQUENT","Set","reactions","allowExpandReactions","undefined","defaultEmoji","showPreview","ConfigContext","PickerConfigProvider","children","_objectWithoutPropertiesLoose","_excluded","mergedConfig","useSetConfig","Provider","_React$useState","setMergedConfig","_config$customEmojis","usePickerConfig","useDebouncedState","initialValue","delay","_useState","useState","state","setState","timer","useRef","debouncedSetState","Promise","resolve","current","clearTimeout","_window","window","setTimeout","useGetEmojisByCategory","suggestedEmojisModeConfig","useSuggestedEmojisModeConfig","_useUpdateSuggested","useUpdateSuggested","suggestedUpdated","suggested","useMemo","_getSuggested","getSuggested","s","emojiByUnified","Boolean","getEmojisByCategory","_emojis$emojis$catego","emojis","allEmojisByUnified","withoutSkinTone","allEmojis","values","flat","Emoji","SUGGESTED_LS_KEY","mode","_window$localStorage$","_window2","localStorage","recent","JSON","parse","getItem","sort","a","b","count","_unused","setSuggested","originalUnified","existing","u","nextList","concat","i","original","Math","min","_window3","setItem","stringify","_unused2","PickerDataContext","createContext","searchIndex","PickerDataProvider","_usePickerConfig","genericEmojiData","data","defaultEmojiData","newData","customToRegularEmoji","Keys","_emoji$Keys$variation","joinedNameString","toLowerCase","char","_searchIndex$_char","useCallback","result","_data$allEmojisByUnif","usePickerDataContext","useContext","_usePickerDataContext","_emojiData$emojis$cat","_emojiData$emojis","_ref2","id","imgUrl","useIsUnicodeHidden","useUnicodeToHide","has","useDisallowedEmojis","DisallowedEmojisRef","emojiVersionConfig","useEmojiVersionConfig","Number","isNaN","disallowedEmojis","addedInNewerVersion","useIsEmojiDisallowed","isUnicodeHidden","isEmojiDisallowed","supportedLevel","useMarkInitialLoad","dispatch","useEffect","PickerContextProvider","useDefaultSkinToneConfig","useReactionsOpenConfig","filterRef","disallowClickRef","disallowMouseRef","disallowedEmojisRef","suggestedUpdateState","Date","now","searchTerm","skinToneFanOpenState","activeSkinTone","activeCategoryState","emojisThatFailedToLoadState","emojiVariationPickerState","reactionsModeState","isPastInitialLoad","setIsPastInitialLoad","visibleCategoriesState","emojiSizeState","PickerContext","useFilterRef","_React$useContext","useDisallowClickRef","_React$useContext2","useDisallowMouseRef","_React$useContext3","useReactionsModeState","_React$useContext4","useSearchTermState","_React$useContext5","useActiveSkinToneState","_React$useContext6","useEmojisThatFailedToLoadState","_React$useContext7","useEmojiVariationPickerState","_React$useContext9","useSkinToneFanOpenState","_React$useContext0","useVisibleCategoriesState","_React$useContext10","useEmojiSizeState","_React$useContext11","_React$useContext12","setsuggestedUpdate","updateSuggested","MutableConfigContext","useMutableConfig","mutableConfig","useDefineMutableConfig","MutableConfigRef","onEmojiClick","emptyFunc","onReactionClick","onSkinToneChange","MOUSE_EVENT_SOURCE","useSearchPlaceHolderConfig","_find","p","useSearchClearButtonLabelConfig","_usePickerConfig2","_usePickerConfig3","useAllowExpandReactions","_usePickerConfig4","useSkinTonesDisabledConfig","_usePickerConfig5","useEmojiStyleConfig","_usePickerConfig6","useAutoFocusSearchConfig","_usePickerConfig7","useCategoriesConfig","_usePickerConfig8","useCustomEmojisConfig","_usePickerConfig9","useOpenConfig","_usePickerConfig0","useOnEmojiClickConfig","mouseEventSource","_useMutableConfig","_useReactionsModeStat","setReactionsOpen","handler","REACTIONS","args","apply","collapseToReactions","o","_len2","_key2","useOnSkinToneChangeConfig","_useMutableConfig2","usePreviewConfig","_usePickerConfig1","useThemeConfig","_usePickerConfig10","_usePickerConfig11","useLazyLoadEmojisConfig","_usePickerConfig12","useClassNameConfig","_usePickerConfig13","useStyleConfig","_usePickerConfig14","getDimension","_usePickerConfig15","_usePickerConfig16","useSearchDisabledConfig","_usePickerConfig17","useSkinTonePickerLocationConfig","_usePickerConfig18","_usePickerConfig19","useReactionsConfig","_usePickerConfig20","useGetEmojiUrlConfig","_usePickerConfig21","dimensionConfig","useSearchResultsConfig","searchResultsCount","hasResults","isPlural","replace","toString","useIsSearchMode","_useSearchTermState","focusElement","element","requestAnimationFrame","focus","focusPrevElementSibling","previousElementSibling","focusNextElementSibling","nextElementSibling","focusFirstElementChild","first","firstElementChild","getActiveElement","document","activeElement","ElementRefContextProvider","PickerMainRef","AnchoredEmojiRef","BodyRef","EmojiListRef","SearchInputRef","SkinTonePickerRef","CategoryNavigationRef","VariationPickerRef","ReactionsRef","ElementRefContext","useElementRef","useEmojiListRef","usePickerMainRef","useAnchoredEmojiRef","useSetAnchoredEmojiRef","target","useBodyRef","useReactionsRef","useSearchInputRef","useSkinTonePickerRef","useCategoryNavigationRef","useVariationPickerRef","scrollTo","root","top","$eprBody","queryScrollBody","scrollTop","scrollBy","by","useScrollTo","scrollEmojiAboveLabel","isEmojiBehindLabel","closest","variationPicker","scrollBody","closestScrollBody","emojiDistanceFromScrollTop","categoryLabelHeight","closestCategory","focusFirstVisibleEmoji","parent","firstVisibleEmoji","focusAndClickFirstVisibleEmoji","firstEmoji","click","focusLastVisibleEmoji","lastVisibleEmoji","focusNextVisibleEmoji","nextVisibleEmoji","nextCategory","focusPrevVisibleEmoji","prevVisibleEmoji","prevCategory","focusVisibleEmojiOneRowUp","exitUp","visibleEmojiOneRowUp","focusVisibleEmojiOneRowDown","visibleEmojiOneRowDown","categoryContent","closestCategoryContent","countInRow","elementCountInRow","emojisInCurrentCategory","allVisibleEmojis","currentEmojiIndex","indexOf","indexInRow","prevVisibleCategory","allPrevEmojis","lastIndexInRow","at","remainder","firstInNextRow","nextVisibleCategory","emojisInNextCategory","_emojisInNextCategory","useCloseAllOpenToggles","_useEmojiVariationPic","setVariationPicker","_useSkinToneFanOpenSt","skinToneFanOpen","setSkinToneFanOpen","closeAllOpenToggles","useHasOpenToggles","_useEmojiVariationPic2","_useSkinToneFanOpenSt2","hasOpenToggles","useDisallowMouseMove","DisallowMouseRef","disallowMouseMove","useAllowMouseMove","allowMouseMove","useIsMouseDisallowed","isMouseDisallowed","useOnMouseMove","bodyRef","addEventListener","onMouseMove","passive","removeEventListener","useFocusSearchInput","useFocusSkinTonePicker","useFocusCategoryNavigation","useSetFilterRef","setFilter","setter","useClearSearch","applySearch","useApplySearch","focusSearchInput","clearSearch","useAppendSearch","appendSearch","str","getNormalizedSearchTerm","useFilter","setFilterRef","statusSearchResults","getStatusSearchResults","onChange","inputValue","nextValue","longestMatch","findLongestMatch","filterEmojiObjectByKeyword","_useSearchTermState2","setSearchTerm","then","keyword","filtered","hasMatch","some","useIsEmojiFiltered","_useFilterRef","_useSearchTermState3","isEmojiFilteredBySearchTerm","_filter$searchTerm","dict","longestMatchingKey","trim","filterState","_Object$entries","useSetVariationPicker","setAnchoredEmojiRef","setEmojiVariationPicker","_emojiFromElement","emojiFromElement","useIsSkinToneInSearch","skinTonePickerLocationConfig","useIsSkinToneInPreview","KeyboardEvents","useKeyboardNavigation","usePickerMainKeyboardEvents","useSearchInputKeyboardEvents","useSkinTonePickerKeyboardEvents","useCategoryNavigationKeyboardEvents","useBodyKeyboardEvents","onKeyDown","event","Escape","preventDefault","focusSkinTonePicker","setSkinToneFanOpenState","goDownFromSearchInput","useGoDownFromSearchInput","isSkinToneInSearch","ArrowRight","ArrowDown","Enter","isOpen","setIsOpen","isSkinToneInPreview","onType","useOnType","ArrowLeft","focusNextSkinTone","focusPrevSkinTone","ArrowUp","goUpFromBody","useGoUpFromBody","buttonFromTarget","Space","focusCategoryNavigation","isSearchMode","goUpFromEmoji","exitLeft","currentSkinTone","hasNextElementSibling","hasModifier","match","metaKey","ctrlKey","altKey","preloadEmojiIfNeeded","emojiStyles","clientHeight","topOffset","dimensions","NATIVE","preloadedEmojs","emojiTop","viewportBottom","isJustBelowViewport","emojiSize","preloadEmoji","emojiUrl","preloadImage","url","image","Image","src","useOnFocus","onFocus","button","DEFAULT_LABEL_HEIGHT","PickerMain","PickerRootElement","reactionsMode","searchModeActive","_ref3","styleProps","cx","styles","main","baseVariables","darkTheme","AUTO","autoThemeDark","_cx","searchActive","reactionsMenu","ref","DarkTheme","emojiPicker","position","flexDirection","borderWidth","borderStyle","borderRadius","borderColor","backgroundColor","boxSizing","fontFamily","autoTheme","backdropFilter","parentWidth","getBoundingClientRect","elementWidth","floor","firstVisibleElementInContainer","elements","maxVisibilityDiffThreshold","parentTop","parentBottom","bottom","parentTopWithLabel","getLabelHeight","visibleElements","elementTop","elementBottom","maxVisibilityDiffPixels","elementTopWithAllowedDiff","elementBottomWithAllowedDiff","parentNode","label","querySelector","EmojiButtonSelector","VisibleEmojiSelector","visible","emojiElement","_emojiElement$closest","originalUnifiedFromEmojiElement","unifiedFromEmojiElement","isEmojiElement","matches","_element$parentElemen","parentElement","elementHeight","_element$clientHeight","emojiTrueOffsetTop","labelHeight","elementOffsetTop","categoryWithoutLabel","_category$clientHeigh","_categoryWithoutLabel","_closestScrollBody$sc","_closestScrollBody","_element$closest","emojiTruOffsetLeft","elementOffsetLeft","_element$offsetTop","offsetTop","_element$offsetLeft","offsetLeft","_elementDataSetKey","elementDataSetKey","allUnifiedFromEmojiElement","_elementDataSet$key","elementDataSet","_element$dataset","dataset","isVisibleEmoji","classList","contains","isHidden","from","querySelectorAll","_allEmojis$slice","slice","last","parseNativeEmoji","hex","String","fromCodePoint","parseInt","isCustomCategory","isCustomEmoji","useMouseDownHandlers","ContainerRef","mouseDownTimerRef","_useActiveSkinToneSta","activeEmojiStyle","onClick","_emojiFromEvent","emojiFromEvent","skinToneToUse","emojiClickOutput","onMouseDown","_emojiFromEvent2","onMouseUp","confainerRef","getImageUrl","imageUrl","isCustom","Button","props","type","cursor","border","background","outline","ClickableEmojiButton","_ref$showVariations","showVariations","hasVariations","_ref$noBackground","noBackground","getAriaLabel","alignItems","justifyContent","maxWidth","maxHeight","content","right","borderLeft","borderRight","transform","borderBottom","zIndex","external","fontSize","common","alignSelf","justifySelf","EmojiImg","_ref$lazyLoad","lazyLoad","onError","alt","emojiImag","loading","minWidth","minHeight","padding","NativeEmoji","nativeEmoji","lineHeight","textAlign","letterSpacing","ViewOnlyEmoji","size","_ref$getEmojiUrl","_useEmojisThatFailedT","setEmojisThatFailedToLoad","emojiToRender","ClickableEmoji","BtnPlus","setReactionsMode","title","tabIndex","plusSign","color","backgroundImage","Plus","backgroundRepeat","backgroundSize","Reactions","reactionsOpen","list","reaction","emojiButton","listStyle","margin","useOnScroll","setScrollTop","onScroll","_bodyRef$scrollTop","shouldVirtualize","emojiBottom","isVisible","getEmojiPositionStyle","index","emojisPerRow","left","EMOJI_SIZE_DEFAULT","useCategoryHeight","emojiCount","isReactionsMode","emojiSizeRef","_useVisibleCategories","visibleCategories","_useEmojiSizeState","emojiSizeFromContext","setDimensions","computeAndSetDimensions","listEl","measured","pickerWidth","clientWidth","max","rowCount","ceil","categoryHeight","rootEl","e","te","prop","propertyName","queueMicrotask","useIsEmojiHidden","emojisThatFailedToLoad","isEmojiFiltered","failedToLoad","filteredOut","useEmojiVirtualization","categoryEmojis","onHeightReady","isCategoryVisible","isEmojiHidden","virtualizedCounter","emojisToPush","isDisallowed","_isEmojiHidden","isVirtualized","_BodyRef$current$clie","_BodyRef$current","accumulator","_BodyRef$current$clie2","_BodyRef$current2","push","EmojiCategory","categoryConfig","categoryName","gridGap","gridTemplateColumns","fontWeight","textTransform","MeasureEmoji","setEmojiSize","firstCategory","dummyEmoji","EmojiList","categoryHeights","setCategoryHeights","emojiList","currentOffset","RenderCategory","_extends2","_useEmojiVirtualizati","Direction","EmojiVariationPicker","_useVariationPickerTo","useVariationPickerTop","getTop","getMenuDirection","getPointerStyle","usePointerStyle","pointerStyle","Down","pointingUp","pointer","direction","Up","emojiOffsetTop","buttonHeight","boxShadow","transformOrigin","backgroundPosition","SVGTriangle","Body","PICKER","body","flex","overflowY","overflowX","detectEmojyPartiallyBelowFold","buttonRect","bodyRect","y","useEmojiPreviewEvents","allow","setPreviewEmoji","onEscape","onMouseOver","onEnter","onLeave","_allUnifiedFromEmojiE","relatedTarget","belowFoldByPx","handlePartiallyVisibleElementFocus","_allUnifiedFromEmojiE2","_document$activeEleme","blur","FlexDirection","Flex","_ref$style","_ref$direction","ROW","_stylesheet$create","COLUMN","Absolute","Relative","BtnSkinToneVariation","isActive","skinToneVariation","tone","closedTone","active","ITEM_SIZE","SkinTonePickerMenu","SkinTonePicker","SkinTonePickerDirection","VERTICAL","HORIZONTAL","isDisabled","setActiveSkinTone","fullWidth","expandedSize","vertical","skinTones","verticalShadow","flexBasis","select","Preview","preview","hideOnReactions","PreviewBody","previewEmoji","variationPickerEmoji","_previewEmoji$unified","show","PreviewContent","defaultText","borderTop","categoryNameFromDom","$category","_$category$getAttribu","getAttribute","useActiveCategoryScrollDetection","setActiveCategory","setVisibleCategories","Map","intersectingCategories","observer","IntersectionObserver","_iterator","_createForOfIteratorHelperLoose","_step","done","entry","set","intersectionRatio","isIntersecting","ratios","visibleCats","ratio","get","lastCategory","_i","_ratios","_ratios$_i","threshold","el","observe","disconnect","useScrollCategoryIntoView","scrollCategoryIntoView","useShouldHideCustomEmojis","customCategoryConfig","CategoryButton","isActiveCategory","allowNavigation","catBtn","role","DarkActivePositionY","DarkPositionY","DarkInactivePosition","SVGNavigation","backgroundPositionX","CategoryNavigation","activeCategory","categoriesConfig","hideCustomCategory","nav","BtnClearSearch","btnClearSearch","icnClearnSearch","HoverDark","SVGTimes","IcnSearch","icnSearch","SVGMagnifier","SearchContainer","overlay","Search","placeholder","autoFocus","_useFilter","input","searchContainer","search","_event$target$value","_event$target","visuallyHidden","clip","clipPath","whiteSpace","Header","EmojiPicker","ContentControl","renderAll","setRenderAll","ExpandedPickerContent","ErrorBoundary","_React$Component","_inheritsLoose","_this","call","hasError","getDerivedStateFromError","_proto","prototype","componentDidCatch","error","errorInfo","console","render","ExportedEmoji","_ref$size","_ref$emojiStyle","EmojiPickerReact"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,IAAYA,UAqBX;AArBD,WAAYA,UAAU;EACpBA,qDAAuC;EACvCA,gDAAkC;EAClCA,mCAAqB;EACrBA,qCAAuB;EACvBA,mCAAqB;EACrBA,iCAAmB;EACnBA,6CAA+B;EAC/BA,gDAAkC;EAClCA,4DAA8C;EAC9CA,6DAA+C;EAC/CA,qCAAuB;EACvBA,0CAA4B;EAC5BA,0CAA4B;EAC5BA,8CAAgC;EAChCA,+BAAiB;EACjBA,uCAAyB;EACzBA,2CAA6B;EAC7BA,4DAA8C;EAC9CA,0CAA4B;EAC5BA,0CAA4B;AAC9B,CAAC,EArBWA,UAAU,KAAVA,UAAU;SAuBNC,WAAWA;oCAAIC,UAAwB,OAAAC,KAAA,CAAAC,IAAA,GAAAC,IAAA,MAAAA,IAAA,GAAAD,IAAA,EAAAC,IAAA;IAAxBH,UAAwB,CAAAG,IAAA,IAAAC,SAAA,CAAAD,IAAA;;EACrD,OAAOH,UAAU,CAACK,GAAG,CAAC,UAAAC,CAAC;IAAA,aAAQA,CAAC;GAAE,CAAC,CAACC,IAAI,CAAC,EAAE,CAAC;AAC9C;;ACpBO,IAAMC,UAAU,gBAAGC,mBAAW,CAAC,KAAK,EAAE,IAAI,CAAC;AAElD,IAAMC,MAAM,GAAG;EACbC,OAAO,EAAE,MAAM;EACfC,OAAO,EAAE,GAAG;EACZC,aAAa,EAAE,MAAM;EACrBC,UAAU,EAAE,QAAQ;EACpBC,QAAQ,EAAE;CACX;AAED,AAAO,IAAMC,YAAY,gBAAGR,UAAU,CAACS,MAAM,CAAC;EAC5CP,MAAM,eAAAQ,QAAA;IACJ,GAAG,EAAEpB,UAAU,CAACY;KACbA,MAAM;CAEZ,CAAC;AAEF,AAAO,IAAMS,cAAc,gBAAGC,UAAU,CAAC,SAASD,cAAcA;EAC9D,OACEC;IACEC,wBAAwB;IACxBC,uBAAuB,EAAE;MAAEC,MAAM,EAAEf,UAAU,CAACgB,QAAQ;;IACtD;AAEN,CAAC,CAAC;AAEF,AAAO,IAAMC,uBAAuB,gBAAGjB,UAAU,CAACS,MAAM,CAAC;EACvD,WAAW,EAAE;IACX,qCAAqC,EAAE;MACrCS,WAAW,EAAE;QACX,QAAQ,EAAE;UACRd,OAAO,EAAE,GAAG;UACZe,mBAAmB,EAAE;;OAExB;MACDC,cAAc,eAAAV,QAAA;QACZ,GAAG,EAAEpB,UAAU,CAAC8B;SACblB,MAAM;KAEZ;IACD,+BAA+B,EAAE;MAC/BmB,mBAAmB,EAAEnB;;GAExB;EACDoB,iBAAiB,EAAE;IACjBC,UAAU,EAAE;GACb;EACD,gBAAgB,EAAE;IAChBD,iBAAiB,EAAE;MACjBE,MAAM,EAAE,KAAK;MACbC,KAAK,EAAE,KAAK;MACZrB,OAAO,EAAE,GAAG;MACZC,aAAa,EAAE,MAAM;MACrBE,QAAQ,EAAE;;GAEb;EACD,2CAA2C,EAAE;IAC3CW,WAAW,EAAE;MACX,QAAQ,EAAE;QACRd,OAAO,EAAE,GAAG;QACZe,mBAAmB,EAAE;OACtB;MACD,cAAc,EAAE;QACdf,OAAO,EAAE,GAAG;QACZe,mBAAmB,EAAE;;KAExB;IACDE,mBAAmB,eAAAX,QAAA;MACjB,GAAG,EAAE;OACFR,MAAM;;CAGd,CAAC;AAEF,SAAgBwB,QAAQA,CAACC,GAAW,EAAEC,KAAa;;EACjD,OAAO;IACL,iBAAiB,GAAAC,aAAA,OAAAA,aAAA,CACdF,GAAG,IAAGC,KAAK,EAAAC,aAAA,CACb;IACD,iBAAiB,GAAAC,aAAA,OAAAA,aAAA,CACdH,GAAG,IAAG;MACL,qCAAqC,EAAEC;KACxC,EAAAE,aAAA;GAEJ;AACH;;ACxFA;AACA,SAAgBC,aAAaA,CAACC,IAAkB,EAAEC,IAAkB;;EAClE,IAAMC,gBAAgB,IAAAC,kBAAA,GAAGH,IAAI,CAACI,YAAY,YAAAD,kBAAA,GAAI,EAAE;EAChD,IAAME,gBAAgB,IAAAC,kBAAA,GAAGL,IAAI,CAACG,YAAY,YAAAE,kBAAA,GAAI,EAAE;EAChD,OACEN,IAAI,CAACO,IAAI,KAAKN,IAAI,CAACM,IAAI,IACvBP,IAAI,CAACQ,YAAY,KAAKP,IAAI,CAACO,YAAY,IACvCR,IAAI,CAACS,oBAAoB,KAAKR,IAAI,CAACQ,oBAAoB,IACvDT,IAAI,CAACU,iBAAiB,KAAKT,IAAI,CAACS,iBAAiB,IACjDV,IAAI,CAACW,iBAAiB,KAAKV,IAAI,CAACU,iBAAiB,IACjDX,IAAI,CAACY,sBAAsB,KAAKX,IAAI,CAACW,sBAAsB,IAC3DZ,IAAI,CAACa,eAAe,KAAKZ,IAAI,CAACY,eAAe,IAC7Cb,IAAI,CAACc,iBAAiB,KAAKb,IAAI,CAACa,iBAAiB,IACjDd,IAAI,CAACe,eAAe,KAAKd,IAAI,CAACc,eAAe,IAC7Cf,IAAI,CAACgB,UAAU,KAAKf,IAAI,CAACe,UAAU,IACnChB,IAAI,CAACiB,KAAK,KAAKhB,IAAI,CAACgB,KAAK,IACzBjB,IAAI,CAACkB,mBAAmB,KAAKjB,IAAI,CAACiB,mBAAmB,IACrDlB,IAAI,CAACmB,cAAc,KAAKlB,IAAI,CAACkB,cAAc,IAC3CnB,IAAI,CAACoB,SAAS,KAAKnB,IAAI,CAACmB,SAAS,IACjCpB,IAAI,CAACR,MAAM,KAAKS,IAAI,CAACT,MAAM,IAC3BQ,IAAI,CAACP,KAAK,KAAKQ,IAAI,CAACR,KAAK,IACzBO,IAAI,CAACqB,KAAK,KAAKpB,IAAI,CAACoB,KAAK,IACzBrB,IAAI,CAACsB,cAAc,KAAKrB,IAAI,CAACqB,cAAc,IAC3CtB,IAAI,CAACuB,sBAAsB,KAAKtB,IAAI,CAACsB,sBAAsB,IAC3DrB,gBAAgB,CAACsB,MAAM,KAAKnB,gBAAgB,CAACmB,MAAM,IACnDxB,IAAI,CAACyB,SAAS,KAAKxB,IAAI,CAACwB,SAAS;AAErC;;AC7BO,IAAMC,iBAAiB,GAAG,CAC/B,OAAO,EACP,WAAW,EACX,OAAO,EACP,OAAO,EACP,OAAO,EACP,OAAO,EACP,OAAO;AAAC,CACT;;ACoBD,WAAYC,cAAc;EACxBA,mCAAiB;EACjBA,uCAAqB;AACvB,CAAC,EAHWA,sBAAc,KAAdA,sBAAc;AAK1B,AAAA,WAAYC,UAAU;EACpBA,+BAAiB;EACjBA,6BAAe;EACfA,iCAAmB;EACnBA,+BAAiB;EACjBA,mCAAqB;AACvB,CAAC,EANWA,kBAAU,KAAVA,kBAAU;AAQtB,AAAA,WAAYC,KAAK;EACfA,sBAAa;EACbA,wBAAe;EACfA,sBAAa;AACf,CAAC,EAJWA,aAAK,KAALA,aAAK;AAMjB,AAAA,WAAYC,SAAS;EACnBA,gCAAmB;EACnBA,4BAAe;EACfA,mCAAsB;EACtBA,6BAAgB;EAChBA,kCAAqB;EACrBA,2BAAc;AAChB,CAAC,EAPWA,iBAAS,KAATA,iBAAS;AASrB,AAAA,WAAYC,UAAU;EACpBA,qCAAuB;EACvBA,+BAAiB;EACjBA,+CAAiC;EACjCA,+CAAiC;EACjCA,uCAAyB;EACzBA,6CAA+B;EAC/BA,uCAAyB;EACzBA,iCAAmB;EACnBA,iCAAmB;EACnBA,6BAAe;AACjB,CAAC,EAXWA,kBAAU,KAAVA,kBAAU;AAatB,AAAA,WAAYC,sBAAsB;EAChCA,2CAAiB;EACjBA,6CAAmB;AACrB,CAAC,EAHWA,8BAAsB,KAAtBA,8BAAsB;;ACnElC,IAAMC,aAAa,GACjB,mEAAmE;AACrE,IAAMC,gBAAgB,GACpB,yEAAyE;AAC3E,IAAMC,eAAe,GACnB,uEAAuE;AACzE,IAAMC,cAAc,GAClB,qEAAqE;AAEvE,SAAgBC,MAAMA,CAACrB,UAAsB;EAC3C,QAAQA,UAAU;IAChB,KAAKY,kBAAU,CAACU,OAAO;MACrB,OAAOH,eAAe;IACxB,KAAKP,kBAAU,CAACW,MAAM;MACpB,OAAOH,cAAc;IACvB,KAAKR,kBAAU,CAACY,QAAQ;MACtB,OAAON,gBAAgB;IACzB,KAAKN,kBAAU,CAACa,KAAK;IACrB;MACE,OAAOR,aAAa;;AAE1B;;ACrBA,IAAMS,kBAAkB,GAAG,CACzBZ,iBAAS,CAACa,OAAO,EACjBb,iBAAS,CAACc,KAAK,EACfd,iBAAS,CAACe,YAAY,EACtBf,iBAAS,CAACgB,MAAM,EAChBhB,iBAAS,CAACiB,WAAW,EACrBjB,iBAAS,CAACkB,IAAI,CACf;AAED,AAAO,IAAMC,cAAc,gBAAGC,MAAM,CAACC,OAAO,CAACrB,iBAAS,CAAC,CAACsB,MAAM,CAC5D,UAACC,GAAG,EAAAC,IAAA;MAAG3D,GAAG,GAAA2D,IAAA;IAAE1D,KAAK,GAAA0D,IAAA;EACfD,GAAG,CAACzD,KAAK,CAAC,GAAGD,GAAG;EAChB,OAAO0D,GAAG;AACZ,CAAC,EACD,EAA4B,CAC7B;AAED,AAAO,IAAME,eAAe,gBAGxBb,kBAAkB,CAACU,MAAM,CAC3B,UAACI,MAAM,EAAEC,QAAQ;EAAA,IAAAC,cAAA;EAAA,OACfR,MAAM,CAACS,MAAM,CAACH,MAAM,GAAAE,cAAA,OAAAA,cAAA,CACjBD,QAAQ,IAAGA,QAAQ,EAAAC,cAAA,EACpB;AAAA,GACJ,EAAE,CACH;;AC1BD,IAAYE,eAMX;AAND,WAAYA,eAAe;EACzBA,6BAAU;EACVA,gCAAa;EACbA,mCAAgB;EAChBA,iCAAc;EACdA,oCAAiB;AACnB,CAAC,EANWA,eAAe,KAAfA,eAAe;;SCIXC,UAAUA,CAACC,KAAe;;EACxC,QAAAC,qBAAA,GAAOD,KAAK,CAACF,eAAe,CAACI,IAAI,CAAC,YAAAD,qBAAA,GAAI,EAAE;AAC1C;AAEA,SAAgBE,OAAOA,CAACH,KAAgB;EACtC,OAAOI,UAAU,CAACJ,KAAK,CAACF,eAAe,CAACO,QAAQ,CAAC,IAAI,GAAG,CAAC;AAC3D;AAEA,SAAgBC,SAASA,CAACN,KAAgB;EACxC,IAAI,CAACA,KAAK,EAAE;IACV,OAAO,EAAE;;EAGX,IAAMO,KAAK,GAAGR,UAAU,CAACC,KAAK,CAAC;EAC/B,OAAOO,KAAK,CAACA,KAAK,CAAC7C,MAAM,GAAG,CAAC,CAAC;AAChC;AAEA,SAAgB8C,sBAAsBA,CAACC,OAAe;EACpD,IAAMC,KAAK,GAAGD,OAAO,CAACE,KAAK,CAAC,GAAG,CAAC;EAChC,IAAAC,aAAA,GAAmBF,KAAK,CAACG,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC;IAA9BlB,QAAQ,GAAAiB,aAAA;EAEf,IAAInB,eAAe,CAACE,QAAQ,CAAC,EAAE;IAC7B,OAAOe,KAAK,CAACzG,IAAI,CAAC,GAAG,CAAC;;EAGxB,OAAOwG,OAAO;AAChB;AAEA,SAAgBK,YAAYA,CAACd,KAAgB,EAAEL,QAAiB;;EAC9D,IAAMc,OAAO,GAAGT,KAAK,CAACF,eAAe,CAACW,OAAO,CAAC;EAE9C,IAAI,CAACd,QAAQ,IAAI,CAACoB,kBAAkB,CAACf,KAAK,CAAC,EAAE;IAC3C,OAAOS,OAAO;;EAGhB,QAAAO,qBAAA,GAAOC,qBAAqB,CAACjB,KAAK,EAAEL,QAAQ,CAAC,YAAAqB,qBAAA,GAAIP,OAAO;AAC1D;AAEA,SAAgBS,iBAAiBA,CAC/BT,OAAe,EACfvD,UAAsB;EAEtB,YAAUqB,MAAM,CAACrB,UAAU,CAAC,GAAGuD,OAAO;AACxC;AAEA,SAAgBU,eAAeA,CAACnB,KAAgB;;EAC9C,QAAAoB,sBAAA,GAAOpB,KAAK,CAACF,eAAe,CAACuB,UAAU,CAAC,YAAAD,sBAAA,GAAI,EAAE;AAChD;AAEA,SAAgBL,kBAAkBA,CAACf,KAAgB;EACjD,OAAOmB,eAAe,CAACnB,KAAK,CAAC,CAACtC,MAAM,GAAG,CAAC;AAC1C;AAEA,SAAgBuD,qBAAqBA,CACnCjB,KAAgB,EAChBL,QAAiB;EAEjB,OAAOA,QAAQ,GACXwB,eAAe,CAACnB,KAAK,CAAC,CAACsB,IAAI,CAAC,UAACC,SAAS;IAAA,OAAKA,SAAS,CAACC,QAAQ,CAAC7B,QAAQ,CAAC;IAAC,GACxEmB,YAAY,CAACd,KAAK,CAAC;AACzB;AAEA,SAAgByB,0BAA0BA,CAAChB,OAAe;EACxD,IAAAiB,cAAA,GAA8BjB,OAAO,CAACE,KAAK,CAAC,GAAG,CAAwB;IAA9DgB,iBAAiB,GAAAD,cAAA;EAC1B,OAAOtC,MAAM,CAACwC,IAAI,CAACnC,eAAe,CAAC,CAAC+B,QAAQ,CAACG,iBAAiB,CAAC,GAC3DA,iBAAiB,GACjB,IAAI;AACV;;;ACzEA,AASA,IAAME,iBAAiB,GAAiB,CACtC5D,kBAAU,CAAC6D,SAAS,EACpB7D,kBAAU,CAAC8D,MAAM,EACjB9D,kBAAU,CAAC+D,cAAc,EACzB/D,kBAAU,CAACgE,cAAc,EACzBhE,kBAAU,CAACiE,UAAU,EACrBjE,kBAAU,CAACkE,aAAa,EACxBlE,kBAAU,CAACmE,UAAU,EACrBnE,kBAAU,CAACoE,OAAO,EAClBpE,kBAAU,CAACqE,OAAO,EAClBrE,kBAAU,CAACsE,KAAK,CACjB;AAED,AAAO,IAAMC,eAAe,GAAmB;EAC7CtC,IAAI,EAAE,eAAe;EACrBuC,QAAQ,EAAExE,kBAAU,CAAC6D;CACtB;AAOD,IAAMY,gBAAgB,IAAAC,iBAAA,OAAAA,iBAAA,CACnB1E,kBAAU,CAAC6D,SAAS,IAAG;EACtBW,QAAQ,EAAExE,kBAAU,CAAC6D,SAAS;EAC9B5B,IAAI,EAAE;CACP,EAAAyC,iBAAA,CACA1E,kBAAU,CAAC8D,MAAM,IAAG;EACnBU,QAAQ,EAAExE,kBAAU,CAAC8D,MAAM;EAC3B7B,IAAI,EAAE;CACP,EAAAyC,iBAAA,CACA1E,kBAAU,CAAC+D,cAAc,IAAG;EAC3BS,QAAQ,EAAExE,kBAAU,CAAC+D,cAAc;EACnC9B,IAAI,EAAE;CACP,EAAAyC,iBAAA,CACA1E,kBAAU,CAACgE,cAAc,IAAG;EAC3BQ,QAAQ,EAAExE,kBAAU,CAACgE,cAAc;EACnC/B,IAAI,EAAE;CACP,EAAAyC,iBAAA,CACA1E,kBAAU,CAACiE,UAAU,IAAG;EACvBO,QAAQ,EAAExE,kBAAU,CAACiE,UAAU;EAC/BhC,IAAI,EAAE;CACP,EAAAyC,iBAAA,CACA1E,kBAAU,CAACkE,aAAa,IAAG;EAC1BM,QAAQ,EAAExE,kBAAU,CAACkE,aAAa;EAClCjC,IAAI,EAAE;CACP,EAAAyC,iBAAA,CACA1E,kBAAU,CAACmE,UAAU,IAAG;EACvBK,QAAQ,EAAExE,kBAAU,CAACmE,UAAU;EAC/BlC,IAAI,EAAE;CACP,EAAAyC,iBAAA,CACA1E,kBAAU,CAACoE,OAAO,IAAG;EACpBI,QAAQ,EAAExE,kBAAU,CAACoE,OAAO;EAC5BnC,IAAI,EAAE;CACP,EAAAyC,iBAAA,CACA1E,kBAAU,CAACqE,OAAO,IAAG;EACpBG,QAAQ,EAAExE,kBAAU,CAACqE,OAAO;EAC5BpC,IAAI,EAAE;CACP,EAAAyC,iBAAA,CACA1E,kBAAU,CAACsE,KAAK,IAAG;EAClBE,QAAQ,EAAExE,kBAAU,CAACsE,KAAK;EAC1BrC,IAAI,EAAE;CACP,EAAAyC,iBAAA,CACF;AAED,SAAgBC,oBAAoBA,CAClCC,SAA8C;EAE9C,OAAOhB,iBAAiB,CAAC9H,GAAG,CAAC,UAAC0I,QAAQ;IACpC,OAAA7H,QAAA,KACK8H,gBAAgB,CAACD,QAAQ,CAAC,EACzBI,SAAS,IAAIA,SAAS,CAACJ,QAAQ,CAAC,IAAII,SAAS,CAACJ,QAAQ,CAAC;GAE9D,CAAC;AACJ;AAEA,SAAgBK,0BAA0BA,CAACL,QAAwB;EACjE,OAAOA,QAAQ,CAACA,QAAQ;AAC1B;AAEA,SAAgBM,8BAA8BA,CAACN,QAAwB;EACrE,OAAOA,QAAQ,CAACvC,IAAI;AACtB;AAMA,SAAgB8C,qBAAqBA,CACnCC,sBACAJ,WACAlF,SAAqB;;MAFrBsF;IAAAA,uBAA2C,EAAE;;EAAA,IAC7CJ;IAAAA,YAAqC,EAAE;;EAGvC,IAAMK,KAAK,GAAI;;IAEb,IAAMC,QAAQ,GAAGxF,SAAS,YAATA,SAAS,CAAEyF,UAAU,GACjChE,MAAM,CAACiE,WAAW,CACjBjE,MAAM,CAACC,OAAO,CAAC1B,SAAS,CAACyF,UAAU,CAAC,CAACE,MAAM,CAAC,UAAA9D,IAAA;MAAA,IAAI+D,MAAM,GAAA/D,IAAA;MAAA,OAAM,CAAC,CAAC+D,MAAM;MAAC,CAC/B,GACvC,EAAyC;;IAG9C,IAAIV,SAAS,CAACW,cAAc,KAAK3F,sBAAc,CAAC4F,MAAM,EAAE;MAAA,IAAAC,qBAAA;MACtD,IAAMC,YAAY,GAChBhG,SAAS,qBAAA+F,qBAAA,GAAT/F,SAAS,CAAEyF,UACZ,qBADCM,qBAAA,CACE,kBAAkB,CAAC;MACvBP,QAAQ,CAAClF,kBAAU,CAAC6D,SAAS,CAAC,GAAG6B,YAAY,GACzC;QAAElB,QAAQ,EAAExE,kBAAU,CAAC6D,SAAS;QAAE5B,IAAI,EAAEyD,YAAY,CAACzD;OAAM,GAC3DsC,eAAe;;IAGrB,OAAOW,QAAQ;GAChB,EAAG;EAEJ,IAAMS,IAAI,GAAGhB,oBAAoB,CAACM,KAAK,CAAC;EAExC,IAAI,GAAAW,qBAAA,GAACZ,oBAAoB,aAApBY,qBAAA,CAAsBnG,MAAM,GAAE;IACjC,OAAOkG,IAAI;;EAGb,OAAOX,oBAAoB,CAAClJ,GAAG,CAAC,UAAC0I,QAAQ;IACvC,IAAI,OAAOA,QAAQ,KAAK,QAAQ,EAAE;MAChC,OAAOqB,uBAAuB,CAACrB,QAAQ,EAAES,KAAK,CAACT,QAAQ,CAAC,CAAC;;IAG3D,OAAA7H,QAAA,KACKkJ,uBAAuB,CAACrB,QAAQ,CAACA,QAAQ,EAAES,KAAK,CAACT,QAAQ,CAACA,QAAQ,CAAC,CAAC,EACpEA,QAAQ;GAEd,CAAC;AACJ;AAEA,SAASqB,uBAAuBA,CAC9BrB,QAAoB,EACpBsB;MAAAA;IAAAA,WAA2B,EAAoB;;EAE/C,OAAO3E,MAAM,CAACS,MAAM,CAAC6C,gBAAgB,CAACD,QAAQ,CAAC,EAAEsB,QAAQ,CAAC;AAC5D;;AC7HA,IAAMC,oBAAoB,GAAG,CAAC,WAAW,EAAE,WAAW,EAAE,WAAW,CAAC;AAEpE,AAAO,IAAMC,0BAA0B,GAAG,QAAQ;AAClD,AAAO,IAAMC,iCAAiC,GAAG,OAAO;AACxD,AAAO,IAAMC,+BAA+B,GAAG,kBAAkB;AACjE,AAAO,IAAMC,qBAAqB,GAChC,iDAAiD;AACnD,AAAO,IAAMC,+BAA+B,GAC1C,UAAU,GAAGD,qBAAqB;AACpC,AAAO,IAAME,qCAAqC,GAChD,YAAY,GAAGF,qBAAqB;AAEtC,SAAgBG,WAAWA,CACzBC;;MAAAA;IAAAA,aAA2B,EAAE;;EAE7B,IAAMZ,IAAI,GAAGa,gBAAgB,EAAE;;;EAI/B,IAAMC,aAAa,IAAAC,qBAAA,GACjBH,UAAU,CAAC7G,SAAS,sBAAAiH,sBAAA,GAApBD,qBAAA,CAAsBvB,UAIvB,sBAAAyB,sBAAA,GAJCD,sBAAA,CAICE,YAAY,qBAJbD,sBAAA,CAIe3E,IAAI;EAErB,IAAM6E,aAAa,GAAAnK,QAAA,KACdgJ,IAAI,CAACmB,aAAa,EAEjBL,aAAa,IAAI,GAAAM,qBAAA,GAACR,UAAU,CAACO,aAAa,aAAxBC,qBAAA,CAA0BC,cAAc,IAC1D;IAAEA,cAAc,EAAEP;GAAe,GACjC,EAAE,GAAAQ,sBAAA,GACFV,UAAU,CAACO,aAAa,YAAAG,sBAAA,GAAI,EAAE,CACnC;EAED,IAAM3B,MAAM,GAAGnE,MAAM,CAACS,MAAM,CAAC+D,IAAI,EAAEY,UAAU,CAAC;EAE9C,IAAMpB,UAAU,GAAGJ,qBAAqB,CACtCwB,UAAU,CAACpB,UAAU,EACrB;IACEI,cAAc,EAAED,MAAM,CAACnG;GACxB,EACDoH,UAAU,CAAC7G,SAAS,CACrB;EAED4F,MAAM,CAAC4B,YAAY,CAACC,OAAO,CAAC,UAACpF,KAAK;IAChCuD,MAAM,CAAC8B,aAAa,CAACC,GAAG,CAACtF,KAAK,CAAC;GAChC,CAAC;EAEF,IAAMvC,sBAAsB,GAAG8F,MAAM,CAAC/F,cAAc,GAChDU,8BAAsB,CAACqH,OAAO,GAC9BhC,MAAM,CAAC9F,sBAAsB;EAEjC,OAAA7C,QAAA,KACK2I,MAAM;IACTH,UAAU,EAAVA,UAAU;IACV2B,aAAa,EAAbA,aAAa;IACbtH,sBAAsB,EAAtBA;;AAEJ;AAEA,SAAgBgH,gBAAgBA;EAC9B,OAAO;IACLxH,eAAe,EAAE,IAAI;IACrBmG,UAAU,EAAER,oBAAoB,EAAE;IAClCtF,SAAS,EAAE,EAAE;IACbhB,YAAY,EAAE,EAAE;IAChBS,eAAe,EAAEiB,iBAAS,CAACa,OAAO;IAClC3B,UAAU,EAAEY,kBAAU,CAACa,KAAK;IAC5BjC,YAAY,EAAE,IAAI;IAClB8I,WAAW,EAAEtE,iBAAiB;IAC9BxF,MAAM,EAAE,GAAG;IACX2B,cAAc,EAAE,KAAK;IACrB0H,aAAa,EAAAnK,QAAA,KACR6K,iBAAiB,CACrB;IACDjI,cAAc,EAAE,KAAK;IACrBZ,iBAAiB,EAAEqH,0BAA0B;IAC7CpH,iBAAiB,EAAEoH,0BAA0B;IAC7CnH,sBAAsB,EAAEoH,iCAAiC;IACzDzG,sBAAsB,EAAES,8BAAsB,CAACwH,MAAM;IACrD1I,iBAAiB,EAAE,KAAK;IACxBO,KAAK,EAAE,EAAE;IACTH,mBAAmB,EAAES,sBAAc,CAAC8H,QAAQ;IAC5CxI,KAAK,EAAEY,aAAK,CAACe,KAAK;IAClBuG,aAAa,EAAE,IAAIO,GAAG,CAAS5B,oBAAoB,CAAC;IACpDrI,KAAK,EAAE,GAAG;IACVgB,oBAAoB,EAAE,KAAK;IAC3BkJ,SAAS,EAAEjI,iBAAiB;IAC5BnB,IAAI,EAAE,IAAI;IACVqJ,oBAAoB,EAAE,IAAI;IAC1BX,YAAY,EAAE,EAAE;IAChBxH,SAAS,EAAEoI;GACZ;AACH;AAuCA,IAAMN,iBAAiB,GAAkB;EACvCO,YAAY,EAAE,OAAO;EACrBf,cAAc,EAAE,mBAAmB;EACnCgB,WAAW,EAAE;CACd;;;AC/JD,AAeA,IAAMC,aAAa,gBAAGpL,mBAAmB,cACvC2J,gBAAgB,EAAE,CACnB;AAED,SAAgB0B,oBAAoBA,CAAA3G,IAAA;MAAG4G,QAAQ,GAAA5G,IAAA,CAAR4G,QAAQ;IAAK7C,MAAM,GAAA8C,6BAAA,CAAA7G,IAAA,EAAA8G,SAAA;EACxD,IAAMC,YAAY,GAAGC,YAAY,CAACjD,MAAM,CAAC;EAEzC,OACEzI,oBAACoL,aAAa,CAACO,QAAQ;IAAC3K,KAAK,EAAEyK;KAC5BH,QAAQ,CACc;AAE7B;AAEA,SAAgBI,YAAYA,CAACjD,MAAoB;;EAC/C,IAAAmD,eAAA,GAAwC5L,cAAc,CAAC;MAAA,OACrDyJ,WAAW,CAAChB,MAAM,CAAC;MACpB;IAFMgD,YAAY,GAAAG,eAAA;IAAEC,eAAe,GAAAD,eAAA;EAIpC5L,eAAe,CAAC;IACd,IAAImB,aAAa,CAACsK,YAAY,EAAEhD,MAAM,CAAC,EAAE;MACvC;;IAEFoD,eAAe,CAACpC,WAAW,CAAChB,MAAM,CAAC,CAAC;;;GAGrC,EAAE,EAAAqD,oBAAA,GACDrD,MAAM,CAACjH,YAAY,qBAAnBsK,oBAAA,CAAqBlJ,MAAM,EAC3B6F,MAAM,CAAC9G,IAAI,EACX8G,MAAM,CAAC7G,YAAY,EACnB6G,MAAM,CAAC5G,oBAAoB,EAC3B4G,MAAM,CAAC3G,iBAAiB,EACxB2G,MAAM,CAAC1G,iBAAiB,EACxB0G,MAAM,CAACzG,sBAAsB,EAC7ByG,MAAM,CAACxG,eAAe,EACtBwG,MAAM,CAACvG,iBAAiB,EACxBuG,MAAM,CAACtG,eAAe,EACtBsG,MAAM,CAACrG,UAAU,EACjBqG,MAAM,CAACpG,KAAK,EACZoG,MAAM,CAACnG,mBAAmB,EAC1BmG,MAAM,CAAClG,cAAc,EACrBkG,MAAM,CAACjG,SAAS,EAChBiG,MAAM,CAAC7H,MAAM,EACb6H,MAAM,CAAC5H,KAAK,EACZ4H,MAAM,CAAC/F,cAAc,EACrB+F,MAAM,CAAC9F,sBAAsB,EAC7B8F,MAAM,CAACuC,oBAAoB,EAC3BvC,MAAM,CAAC5F,SAAS,CACjB,CAAC;EAEF,OAAO4I,YAAY;AACrB;AAEA,SAAgBM,eAAeA;EAC7B,OAAO/L,gBAAgB,CAACoL,aAAa,CAAC;AACxC;;SCpEgBY,iBAAiBA,CAC/BC,YAAe,EACfC;MAAAA;IAAAA,QAAgB,CAAC;;EAEjB,IAAAC,SAAA,GAA0BC,cAAQ,CAAIH,YAAY,CAAC;IAA5CI,KAAK,GAAAF,SAAA;IAAEG,QAAQ,GAAAH,SAAA;EACtB,IAAMI,KAAK,GAAGC,YAAM,CAAgB,IAAI,CAAC;EAEzC,SAASC,iBAAiBA,CAACzL,KAAQ;IACjC,OAAO,IAAI0L,OAAO,CAAI,UAAAC,OAAO;;MAC3B,IAAIJ,KAAK,CAACK,OAAO,EAAE;QACjBC,YAAY,CAACN,KAAK,CAACK,OAAO,CAAC;;MAG7BL,KAAK,CAACK,OAAO,IAAAE,OAAA,GAAGC,MAAM,qBAAND,OAAA,CAAQE,UAAU,CAAC;QACjCV,QAAQ,CAACtL,KAAK,CAAC;QACf2L,OAAO,CAAC3L,KAAK,CAAC;OACf,EAAEkL,KAAK,CAAC;KACV,CAAC;;EAGJ,OAAO,CAACG,KAAK,EAAEI,iBAAiB,CAAC;AACnC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;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"}