emoji-picker-react 4.22.3 → 5.0.0

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 (405) hide show
  1. package/README.md +331 -49
  2. package/dist/DomUtils/categoryNameFromDom.d.ts +1 -1
  3. package/dist/DomUtils/classNames.d.ts +24 -23
  4. package/dist/DomUtils/detectEmojyPartiallyBelowFold.d.ts +2 -2
  5. package/dist/DomUtils/elementPositionInRow.d.ts +5 -5
  6. package/dist/DomUtils/eventBelongsToPicker.d.ts +2 -0
  7. package/dist/DomUtils/focusElement.d.ts +5 -5
  8. package/dist/DomUtils/getActiveElement.d.ts +2 -2
  9. package/dist/DomUtils/isJsdom.d.ts +1 -0
  10. package/dist/DomUtils/isRtl.d.ts +1 -0
  11. package/dist/DomUtils/keyboardNavigation.d.ts +7 -8
  12. package/dist/DomUtils/scrollTo.d.ts +4 -5
  13. package/dist/DomUtils/selectors.d.ts +31 -35
  14. package/dist/EmojiPickerReact.d.ts +5 -5
  15. package/dist/Stylesheet/DedupedStyle.d.ts +13 -0
  16. package/dist/Stylesheet/stylesheet.d.ts +40 -37
  17. package/dist/components/ErrorBoundary.d.ts +15 -15
  18. package/dist/components/Layout/Absolute.d.ts +8 -8
  19. package/dist/components/Layout/Flex.d.ts +13 -13
  20. package/dist/components/Layout/Relative.d.ts +8 -8
  21. package/dist/components/Layout/Space.d.ts +7 -7
  22. package/dist/components/Reactions/BtnPlus.d.ts +2 -2
  23. package/dist/components/Reactions/DEFAULT_REACTIONS.d.ts +1 -1
  24. package/dist/components/Reactions/Reactions.d.ts +3 -2
  25. package/dist/components/atoms/Button.d.ts +11 -6
  26. package/dist/components/body/EmojiCategory.d.ts +13 -12
  27. package/dist/components/body/EmojiList.d.ts +7 -4
  28. package/dist/components/body/EmojiVariationPicker.d.ts +2 -2
  29. package/dist/components/body/MeasureEmoji.d.ts +2 -2
  30. package/dist/components/body/listComponents.d.ts +47 -0
  31. package/dist/components/context/ElementRefContext.d.ts +18 -16
  32. package/dist/components/context/PickerConfigContext.d.ts +14 -9
  33. package/dist/components/context/PickerContext.d.ts +57 -25
  34. package/dist/components/context/PickerDataContext.d.ts +23 -17
  35. package/dist/components/emoji/BaseEmojiProps.d.ts +14 -13
  36. package/dist/components/emoji/ClickableEmojiButton.d.ts +23 -15
  37. package/dist/components/emoji/Emoji.d.ts +18 -15
  38. package/dist/components/emoji/EmojiImg.d.ts +11 -11
  39. package/dist/components/emoji/ExportedEmoji.d.ts +11 -11
  40. package/dist/components/emoji/NativeEmoji.d.ts +6 -6
  41. package/dist/components/emoji/ViewOnlyEmoji.d.ts +3 -3
  42. package/dist/components/emoji/emojiStyles.d.ts +6 -1
  43. package/dist/components/footer/Preview.d.ts +7 -7
  44. package/dist/components/header/Header.d.ts +2 -2
  45. package/dist/components/header/Search/BtnClearSearch.d.ts +2 -2
  46. package/dist/components/header/Search/IcnSearch.d.ts +2 -2
  47. package/dist/components/header/Search/Search.d.ts +11 -3
  48. package/dist/components/header/SkinTonePicker/BtnSkinToneVariation.d.ts +12 -12
  49. package/dist/components/header/SkinTonePicker/SkinTonePicker.d.ts +11 -11
  50. package/dist/components/icons/svgIcons.d.ts +4 -0
  51. package/dist/components/main/PickerMainBehaviors.d.ts +4 -0
  52. package/dist/components/main/defaultAppearance.d.ts +12 -0
  53. package/dist/components/main/labelHeight.d.ts +1 -0
  54. package/dist/components/navigation/CategoryButton.d.ts +12 -12
  55. package/dist/components/navigation/CategoryNavIcon.d.ts +4 -4
  56. package/dist/components/navigation/CategoryNavigation.d.ts +19 -2
  57. package/dist/config/categoryConfig.d.ts +34 -34
  58. package/dist/config/cdnUrls.d.ts +2 -2
  59. package/dist/config/compareConfig.d.ts +10 -2
  60. package/dist/config/config.d.ts +166 -64
  61. package/dist/config/customEmojiConfig.d.ts +14 -14
  62. package/dist/config/defaultPickerConfiguration.d.ts +10 -0
  63. package/dist/config/mutableConfig.d.ts +32 -10
  64. package/dist/config/useConfig.d.ts +48 -36
  65. package/dist/data/defaultEmojiData.d.ts +9 -0
  66. package/dist/data/defaultEmojiData.js +40 -0
  67. package/dist/data/emojis-bn.d.mts +39 -0
  68. package/dist/data/emojis-bn.d.ts +38 -2
  69. package/dist/data/emojis-bn.js +25 -2
  70. package/dist/data/emojis-bn.mjs +2 -0
  71. package/dist/data/emojis-da.d.mts +39 -0
  72. package/dist/data/emojis-da.d.ts +38 -2
  73. package/dist/data/emojis-da.js +25 -2
  74. package/dist/data/emojis-da.mjs +2 -0
  75. package/dist/data/emojis-de.d.mts +39 -0
  76. package/dist/data/emojis-de.d.ts +38 -2
  77. package/dist/data/emojis-de.js +25 -2
  78. package/dist/data/emojis-de.mjs +2 -0
  79. package/dist/data/emojis-en-gb.d.mts +39 -0
  80. package/dist/data/emojis-en-gb.d.ts +38 -2
  81. package/dist/data/emojis-en-gb.js +25 -2
  82. package/dist/data/emojis-en-gb.mjs +2 -0
  83. package/dist/data/emojis-en.d.mts +39 -0
  84. package/dist/data/emojis-en.d.ts +38 -2
  85. package/dist/data/emojis-en.js +25 -2
  86. package/dist/data/emojis-en.mjs +2 -0
  87. package/dist/data/emojis-es-mx.d.mts +39 -0
  88. package/dist/data/emojis-es-mx.d.ts +38 -2
  89. package/dist/data/emojis-es-mx.js +25 -2
  90. package/dist/data/emojis-es-mx.mjs +2 -0
  91. package/dist/data/emojis-es.d.mts +39 -0
  92. package/dist/data/emojis-es.d.ts +38 -2
  93. package/dist/data/emojis-es.js +25 -2
  94. package/dist/data/emojis-es.mjs +2 -0
  95. package/dist/data/emojis-et.d.mts +39 -0
  96. package/dist/data/emojis-et.d.ts +38 -2
  97. package/dist/data/emojis-et.js +25 -2
  98. package/dist/data/emojis-et.mjs +2 -0
  99. package/dist/data/emojis-fi.d.mts +39 -0
  100. package/dist/data/emojis-fi.d.ts +38 -2
  101. package/dist/data/emojis-fi.js +25 -2
  102. package/dist/data/emojis-fi.mjs +2 -0
  103. package/dist/data/emojis-fr.d.mts +39 -0
  104. package/dist/data/emojis-fr.d.ts +38 -2
  105. package/dist/data/emojis-fr.js +25 -2
  106. package/dist/data/emojis-fr.mjs +2 -0
  107. package/dist/data/emojis-hi.d.mts +39 -0
  108. package/dist/data/emojis-hi.d.ts +38 -2
  109. package/dist/data/emojis-hi.js +25 -2
  110. package/dist/data/emojis-hi.mjs +2 -0
  111. package/dist/data/emojis-hu.d.mts +39 -0
  112. package/dist/data/emojis-hu.d.ts +38 -2
  113. package/dist/data/emojis-hu.js +25 -2
  114. package/dist/data/emojis-hu.mjs +2 -0
  115. package/dist/data/emojis-it.d.mts +39 -0
  116. package/dist/data/emojis-it.d.ts +38 -2
  117. package/dist/data/emojis-it.js +25 -2
  118. package/dist/data/emojis-it.mjs +2 -0
  119. package/dist/data/emojis-ja.d.mts +39 -0
  120. package/dist/data/emojis-ja.d.ts +38 -2
  121. package/dist/data/emojis-ja.js +25 -2
  122. package/dist/data/emojis-ja.mjs +2 -0
  123. package/dist/data/emojis-ko.d.mts +39 -0
  124. package/dist/data/emojis-ko.d.ts +38 -2
  125. package/dist/data/emojis-ko.js +25 -2
  126. package/dist/data/emojis-ko.mjs +2 -0
  127. package/dist/data/emojis-lt.d.mts +39 -0
  128. package/dist/data/emojis-lt.d.ts +38 -2
  129. package/dist/data/emojis-lt.js +25 -2
  130. package/dist/data/emojis-lt.mjs +2 -0
  131. package/dist/data/emojis-ms.d.mts +39 -0
  132. package/dist/data/emojis-ms.d.ts +38 -2
  133. package/dist/data/emojis-ms.js +25 -2
  134. package/dist/data/emojis-ms.mjs +2 -0
  135. package/dist/data/emojis-nb.d.mts +39 -0
  136. package/dist/data/emojis-nb.d.ts +38 -2
  137. package/dist/data/emojis-nb.js +25 -2
  138. package/dist/data/emojis-nb.mjs +2 -0
  139. package/dist/data/emojis-nl.d.mts +39 -0
  140. package/dist/data/emojis-nl.d.ts +38 -2
  141. package/dist/data/emojis-nl.js +25 -2
  142. package/dist/data/emojis-nl.mjs +2 -0
  143. package/dist/data/emojis-pl.d.mts +39 -0
  144. package/dist/data/emojis-pl.d.ts +38 -2
  145. package/dist/data/emojis-pl.js +25 -2
  146. package/dist/data/emojis-pl.mjs +2 -0
  147. package/dist/data/emojis-pt.d.mts +39 -0
  148. package/dist/data/emojis-pt.d.ts +38 -2
  149. package/dist/data/emojis-pt.js +25 -2
  150. package/dist/data/emojis-pt.mjs +2 -0
  151. package/dist/data/emojis-ru.d.mts +39 -0
  152. package/dist/data/emojis-ru.d.ts +38 -2
  153. package/dist/data/emojis-ru.js +25 -2
  154. package/dist/data/emojis-ru.mjs +2 -0
  155. package/dist/data/emojis-sv.d.mts +39 -0
  156. package/dist/data/emojis-sv.d.ts +38 -2
  157. package/dist/data/emojis-sv.js +25 -2
  158. package/dist/data/emojis-sv.mjs +2 -0
  159. package/dist/data/emojis-th.d.mts +39 -0
  160. package/dist/data/emojis-th.d.ts +38 -2
  161. package/dist/data/emojis-th.js +25 -2
  162. package/dist/data/emojis-th.mjs +2 -0
  163. package/dist/data/emojis-uk.d.mts +39 -0
  164. package/dist/data/emojis-uk.d.ts +38 -2
  165. package/dist/data/emojis-uk.js +25 -2
  166. package/dist/data/emojis-uk.mjs +2 -0
  167. package/dist/data/emojis-vi.d.mts +39 -0
  168. package/dist/data/emojis-vi.d.ts +38 -2
  169. package/dist/data/emojis-vi.js +25 -2
  170. package/dist/data/emojis-vi.mjs +2 -0
  171. package/dist/data/emojis-zh-hant.d.mts +39 -0
  172. package/dist/data/emojis-zh-hant.d.ts +38 -2
  173. package/dist/data/emojis-zh-hant.js +25 -2
  174. package/dist/data/emojis-zh-hant.mjs +2 -0
  175. package/dist/data/emojis-zh.d.mts +39 -0
  176. package/dist/data/emojis-zh.d.ts +38 -2
  177. package/dist/data/emojis-zh.js +25 -2
  178. package/dist/data/emojis-zh.mjs +2 -0
  179. package/dist/data/index.js +1 -0
  180. package/dist/data/registerDefaultEmojiData.d.ts +1 -0
  181. package/dist/data/registerDefaultEmojiData.js +3 -0
  182. package/dist/data-core/pickerData.d.ts +12 -0
  183. package/dist/data-core/prepare.d.ts +23 -0
  184. package/dist/data-core/search.d.ts +13 -0
  185. package/dist/data-core/types.d.ts +23 -0
  186. package/dist/data.d.mts +72 -0
  187. package/dist/data.d.ts +72 -0
  188. package/dist/dataUtils/DataTypes.d.ts +23 -19
  189. package/dist/dataUtils/emojiSelectors.d.ts +15 -16
  190. package/dist/dataUtils/emojiUtils.d.ts +1 -12
  191. package/dist/dataUtils/nativeEmojiSequenceSupport.d.ts +10 -0
  192. package/dist/dataUtils/nativeEmojiSupport.d.ts +40 -0
  193. package/dist/dataUtils/parseNativeEmoji.d.ts +1 -1
  194. package/dist/dataUtils/suggested.d.ts +11 -11
  195. package/dist/dataUtils/suggestedEmojis.d.ts +7 -0
  196. package/dist/esm/chunks/chunk-46BUDQLE.mjs +228 -0
  197. package/dist/esm/chunks/chunk-7ZGTUZFB.mjs +16 -0
  198. package/dist/esm/chunks/chunk-FQIJ4HBW.mjs +25 -0
  199. package/dist/esm/chunks/chunk-KQPOIRSC.mjs +9305 -0
  200. package/dist/esm/chunks/chunk-LO4TPPLH.mjs +43 -0
  201. package/dist/esm/chunks/emojis-6L3GRBAP.mjs +9 -0
  202. package/dist/esm/data.mjs +18 -0
  203. package/dist/esm/index.mjs +389 -0
  204. package/dist/esm/primitives/index.mjs +67 -0
  205. package/dist/hooks/preloadEmoji.d.ts +9 -9
  206. package/dist/hooks/useActiveCategoryScrollDetection.d.ts +11 -11
  207. package/dist/hooks/useCategoryHeight.d.ts +6 -5
  208. package/dist/hooks/useCloseAllOpenToggles.d.ts +2 -2
  209. package/dist/hooks/useDataIdentityStabilityWarning.d.ts +13 -0
  210. package/dist/hooks/useDebouncedState.d.ts +1 -1
  211. package/dist/hooks/useDisallowMouseMove.d.ts +4 -4
  212. package/dist/hooks/useDisallowedEmojis.d.ts +2 -3
  213. package/dist/hooks/useEmojiPreviewEvents.d.ts +3 -3
  214. package/dist/hooks/useEmojiVirtualization.d.ts +21 -17
  215. package/dist/hooks/useFilter.d.ts +10 -16
  216. package/dist/hooks/useFocus.d.ts +3 -3
  217. package/dist/hooks/useInitialLoad.d.ts +2 -2
  218. package/dist/hooks/useIsEmojiHidden.d.ts +8 -8
  219. package/dist/hooks/useIsMounted.d.ts +1 -1
  220. package/dist/hooks/useIsSearchMode.d.ts +1 -1
  221. package/dist/hooks/useIsomorphicLayoutEffect.d.ts +2 -2
  222. package/dist/hooks/useKeyboardNavigation.d.ts +3 -1
  223. package/dist/hooks/useMouseDownHandlers.d.ts +8 -4
  224. package/dist/hooks/useOnFocus.d.ts +1 -1
  225. package/dist/hooks/useOnScroll.d.ts +2 -2
  226. package/dist/hooks/useReactionsFocus.d.ts +1 -0
  227. package/dist/hooks/useRegisterRegion.d.ts +24 -0
  228. package/dist/hooks/useResolvedEmojiData.d.ts +37 -0
  229. package/dist/hooks/useScrollCategoryIntoView.d.ts +1 -1
  230. package/dist/hooks/useSearchController.d.ts +17 -0
  231. package/dist/hooks/useSearchResults.d.ts +8 -0
  232. package/dist/hooks/useSetVariationPicker.d.ts +2 -2
  233. package/dist/hooks/useShouldHideCustomEmojis.d.ts +1 -1
  234. package/dist/hooks/useShouldShowSkinTonePicker.d.ts +4 -4
  235. package/dist/index.d.mts +376 -0
  236. package/dist/index.d.ts +376 -9
  237. package/dist/index.js +2 -8
  238. package/dist/primitives/CategoryNav.d.ts +4 -0
  239. package/dist/primitives/Empty.d.ts +6 -0
  240. package/dist/primitives/List.d.ts +4 -0
  241. package/dist/primitives/LoadError.d.ts +8 -0
  242. package/dist/primitives/Loading.d.ts +4 -0
  243. package/dist/primitives/Panel.d.ts +3 -0
  244. package/dist/primitives/Preview.d.ts +3 -0
  245. package/dist/primitives/Reactions.d.ts +2 -0
  246. package/dist/primitives/Root.d.ts +26 -0
  247. package/dist/primitives/Search.d.ts +5 -0
  248. package/dist/primitives/SearchInput.d.ts +3 -0
  249. package/dist/primitives/SkinTone.d.ts +4 -0
  250. package/dist/primitives/Viewport.d.ts +19 -0
  251. package/dist/primitives/appearance.d.ts +3 -0
  252. package/dist/primitives/components.d.ts +27 -0
  253. package/dist/primitives/hooks.d.ts +48 -0
  254. package/dist/primitives/index.d.mts +561 -0
  255. package/dist/primitives/index.d.ts +561 -0
  256. package/dist/primitives/index.js +2 -0
  257. package/dist/primitives/nativeProps.d.ts +15 -0
  258. package/dist/primitives/scope.d.ts +13 -0
  259. package/dist/primitives/structuralStyles.d.ts +16 -0
  260. package/dist/primitives/tokens.d.ts +18 -0
  261. package/dist/primitives/types.d.ts +85 -0
  262. package/dist/state/activeEmojiStore.d.ts +7 -0
  263. package/dist/state/navigationRegistry.d.ts +61 -0
  264. package/dist/state/regionTraversal.d.ts +20 -0
  265. package/dist/typeRefinements/typeRefinements.d.ts +6 -6
  266. package/dist/types/exposedTypes.d.ts +16 -6
  267. package/dist/types/exposedTypes.js +5 -0
  268. package/dist/virtualization/virtualizationHelpers.d.ts +20 -18
  269. package/llms-full.txt +3680 -0
  270. package/llms.txt +66 -480
  271. package/package.json +180 -66
  272. package/src/DomUtils/categoryNameFromDom.ts +1 -1
  273. package/src/DomUtils/classNames.ts +1 -0
  274. package/src/DomUtils/elementPositionInRow.ts +26 -4
  275. package/src/DomUtils/eventBelongsToPicker.ts +17 -0
  276. package/src/DomUtils/getActiveElement.ts +7 -1
  277. package/src/DomUtils/isJsdom.ts +12 -0
  278. package/src/DomUtils/isRtl.ts +5 -0
  279. package/src/DomUtils/keyboardNavigation.ts +105 -149
  280. package/src/DomUtils/scrollTo.ts +18 -16
  281. package/src/DomUtils/selectors.ts +20 -111
  282. package/src/EmojiPickerReact.tsx +155 -48
  283. package/src/Stylesheet/DedupedStyle.tsx +80 -0
  284. package/src/Stylesheet/stylesheet.tsx +128 -59
  285. package/src/components/Layout/Flex.tsx +12 -11
  286. package/src/components/Reactions/BtnPlus.tsx +61 -51
  287. package/src/components/Reactions/Reactions.tsx +113 -55
  288. package/src/components/atoms/Button.tsx +18 -15
  289. package/src/components/body/EmojiCategory.tsx +77 -40
  290. package/src/components/body/EmojiList.tsx +55 -23
  291. package/src/components/body/EmojiVariationPicker.tsx +113 -66
  292. package/src/components/body/MeasureEmoji.tsx +9 -2
  293. package/src/components/body/listComponents.tsx +79 -0
  294. package/src/components/context/ElementRefContext.tsx +46 -35
  295. package/src/components/context/PickerConfigContext.tsx +55 -40
  296. package/src/components/context/PickerContext.tsx +567 -92
  297. package/src/components/context/PickerDataContext.tsx +110 -99
  298. package/src/components/emoji/BaseEmojiProps.ts +5 -4
  299. package/src/components/emoji/ClickableEmojiButton.tsx +148 -63
  300. package/src/components/emoji/Emoji.tsx +24 -2
  301. package/src/components/emoji/EmojiImg.tsx +13 -12
  302. package/src/components/emoji/ExportedEmoji.tsx +5 -4
  303. package/src/components/emoji/NativeEmoji.tsx +19 -16
  304. package/src/components/emoji/ViewOnlyEmoji.tsx +55 -30
  305. package/src/components/emoji/emojiStyles.ts +12 -11
  306. package/src/components/footer/Preview.tsx +86 -91
  307. package/src/components/header/Header.tsx +21 -6
  308. package/src/components/header/Search/BtnClearSearch.tsx +69 -55
  309. package/src/components/header/Search/IcnSearch.tsx +21 -21
  310. package/src/components/header/Search/Search.tsx +77 -137
  311. package/src/components/header/SkinTonePicker/BtnSkinToneVariation.tsx +99 -62
  312. package/src/components/header/SkinTonePicker/SkinTonePicker.tsx +84 -46
  313. package/src/components/icons/svgIcons.ts +17 -0
  314. package/src/components/main/PickerMainBehaviors.tsx +163 -0
  315. package/src/components/main/defaultAppearance.tsx +188 -0
  316. package/src/components/main/labelHeight.ts +5 -0
  317. package/src/components/navigation/CategoryButton.tsx +83 -57
  318. package/src/components/navigation/CategoryNavIcon.tsx +73 -194
  319. package/src/components/navigation/CategoryNavigation.tsx +118 -46
  320. package/src/config/categoryConfig.ts +7 -3
  321. package/src/config/cdnUrls.ts +11 -21
  322. package/src/config/compareConfig.ts +128 -30
  323. package/src/config/config.ts +228 -24
  324. package/src/config/defaultPickerConfiguration.ts +7 -0
  325. package/src/config/mutableConfig.ts +44 -20
  326. package/src/config/useConfig.ts +130 -37
  327. package/src/data/defaultEmojiData.ts +49 -0
  328. package/src/data/registerDefaultEmojiData.ts +8 -0
  329. package/src/data-core/pickerData.ts +173 -0
  330. package/src/data-core/prepare.ts +178 -0
  331. package/src/data-core/search.ts +122 -0
  332. package/src/data-core/types.ts +36 -0
  333. package/src/data.ts +10 -0
  334. package/src/dataUtils/DataTypes.ts +4 -0
  335. package/src/dataUtils/emojiSelectors.ts +58 -63
  336. package/src/dataUtils/emojiUtils.ts +17 -74
  337. package/src/dataUtils/nativeEmojiSequenceSupport.ts +116 -0
  338. package/src/dataUtils/nativeEmojiSupport.ts +160 -0
  339. package/src/dataUtils/suggested.ts +8 -4
  340. package/src/dataUtils/suggestedEmojis.ts +92 -0
  341. package/src/env.d.ts +4 -0
  342. package/src/hooks/preloadEmoji.ts +3 -3
  343. package/src/hooks/useActiveCategoryScrollDetection.ts +10 -1
  344. package/src/hooks/useCategoryHeight.ts +82 -8
  345. package/src/hooks/useDataIdentityStabilityWarning.ts +86 -0
  346. package/src/hooks/useDebouncedState.ts +13 -1
  347. package/src/hooks/useDisallowedEmojis.ts +26 -42
  348. package/src/hooks/useEmojiPreviewEvents.ts +43 -10
  349. package/src/hooks/useEmojiVirtualization.tsx +38 -4
  350. package/src/hooks/useFilter.ts +85 -127
  351. package/src/hooks/useFocus.ts +14 -24
  352. package/src/hooks/useIsEmojiHidden.ts +10 -6
  353. package/src/hooks/useKeyboardNavigation.ts +322 -429
  354. package/src/hooks/useMouseDownHandlers.ts +91 -16
  355. package/src/hooks/useOnFocus.ts +12 -3
  356. package/src/hooks/useOnScroll.ts +18 -2
  357. package/src/hooks/useReactionsFocus.ts +118 -0
  358. package/src/hooks/useRegisterRegion.ts +92 -0
  359. package/src/hooks/useResolvedEmojiData.ts +200 -0
  360. package/src/hooks/useScrollCategoryIntoView.ts +74 -12
  361. package/src/hooks/useSearchController.ts +369 -0
  362. package/src/hooks/useSearchResults.ts +51 -0
  363. package/src/hooks/useSetVariationPicker.ts +4 -1
  364. package/src/index.tsx +67 -5
  365. package/src/primitives/CategoryNav.tsx +40 -0
  366. package/src/primitives/Empty.tsx +68 -0
  367. package/src/primitives/List.tsx +61 -0
  368. package/src/primitives/LoadError.tsx +38 -0
  369. package/src/primitives/Loading.tsx +60 -0
  370. package/src/primitives/Panel.tsx +47 -0
  371. package/src/primitives/Preview.tsx +38 -0
  372. package/src/primitives/Reactions.tsx +2 -0
  373. package/src/primitives/Root.tsx +398 -0
  374. package/src/primitives/Search.tsx +41 -0
  375. package/src/primitives/SearchInput.tsx +110 -0
  376. package/src/primitives/SkinTone.tsx +76 -0
  377. package/src/primitives/Viewport.tsx +204 -0
  378. package/src/primitives/appearance.tsx +7 -0
  379. package/src/primitives/components.tsx +30 -0
  380. package/src/primitives/hooks.ts +165 -0
  381. package/src/primitives/index.ts +94 -0
  382. package/src/primitives/nativeProps.ts +90 -0
  383. package/src/primitives/scope.tsx +109 -0
  384. package/src/primitives/structuralStyles.tsx +133 -0
  385. package/src/primitives/tokens.ts +149 -0
  386. package/src/primitives/types.ts +192 -0
  387. package/src/state/activeEmojiStore.ts +39 -0
  388. package/src/state/navigationRegistry.ts +209 -0
  389. package/src/state/regionTraversal.ts +116 -0
  390. package/src/svg.d.ts +2 -2
  391. package/src/types/exposedTypes.ts +28 -1
  392. package/src/virtualization/virtualizationHelpers.ts +20 -6
  393. package/dist/components/body/Body.d.ts +0 -2
  394. package/dist/components/main/PickerMain.d.ts +0 -7
  395. package/dist/dataUtils/alphaNumericEmojiIndex.d.ts +0 -5
  396. package/dist/emoji-picker-react.cjs.development.js +0 -31413
  397. package/dist/emoji-picker-react.cjs.development.js.map +0 -1
  398. package/dist/emoji-picker-react.cjs.production.min.js +0 -2
  399. package/dist/emoji-picker-react.cjs.production.min.js.map +0 -1
  400. package/dist/emoji-picker-react.esm.js +0 -31411
  401. package/dist/emoji-picker-react.esm.js.map +0 -1
  402. package/dist/hooks/useHideEmojisByUniocode.d.ts +0 -1
  403. package/src/components/body/Body.tsx +0 -43
  404. package/src/components/main/PickerMain.tsx +0 -249
  405. package/src/dataUtils/alphaNumericEmojiIndex.ts +0 -21
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,3 @@
1
+ import { registerDefaultEmojiData } from './defaultEmojiData';
2
+ import emojis from './emojis';
3
+ registerDefaultEmojiData(emojis);
@@ -0,0 +1,12 @@
1
+ import type { CustomEmoji } from '../config/customEmojiConfig';
2
+ import { DataEmoji, DataEmojis } from '../dataUtils/DataTypes';
3
+ import { type EmojiData } from '../types/exposedTypes';
4
+ export interface PickerDataSnapshot {
5
+ emojiData: EmojiData;
6
+ allEmojis: DataEmojis;
7
+ allEmojisByUnified: Record<string, DataEmoji>;
8
+ customGroups: Record<string, DataEmojis>;
9
+ }
10
+ export declare function getPickerDataSnapshot(genericEmojiData?: EmojiData, customEmojis?: CustomEmoji[]): PickerDataSnapshot;
11
+ /** Test-only: expose cache state without breaking WeakMap encapsulation. */
12
+ export declare function __isSnapshotCached(genericEmojiData?: EmojiData, customEmojis?: CustomEmoji[]): boolean;
@@ -0,0 +1,23 @@
1
+ import type { EmojiData } from '../types/exposedTypes';
2
+ import type { EmojiInfo } from './types';
3
+ export interface PreparedCore {
4
+ /** Stable dataset order of canonical base records. */
5
+ readonly records: readonly EmojiInfo[];
6
+ /** Base unified -> record plus variation unified -> base record. */
7
+ readonly byUnified: ReadonlyMap<string, EmojiInfo>;
8
+ /**
9
+ * Single-character bucket: char -> base records whose joined lowercase
10
+ * names include it, in dataset order. Preserves v4's useful O(1)
11
+ * first-keystroke narrowing on top of the shared immutable core, so
12
+ * cold single-char queries never pay a full scan.
13
+ */
14
+ readonly byChar: ReadonlyMap<string, readonly EmojiInfo[]>;
15
+ /** Per-core query memo: normalized query -> matching records. */
16
+ readonly queryMemo: Map<string, readonly EmojiInfo[]>;
17
+ }
18
+ export declare function __getPrepareCount(): number;
19
+ export declare function __resetPrepareCount(): void;
20
+ export declare function __clearCoreCacheForTest(): void;
21
+ export declare function normalizeUnified(input: string): string;
22
+ export declare function normalizeQuery(input: string): string;
23
+ export declare function getPreparedCore(emojiData?: EmojiData): PreparedCore;
@@ -0,0 +1,13 @@
1
+ import type { EmojiDataOptions, EmojiInfo } from './types';
2
+ export type { EmojiDataOptions, EmojiInfo };
3
+ /**
4
+ * Lookup by base or variation unified code.
5
+ * Trims/lowercases input, returns the canonical base record or undefined.
6
+ */
7
+ export declare function getEmojiByUnified(unified: string, options?: EmojiDataOptions): EmojiInfo | undefined;
8
+ /**
9
+ * Dataset search (not a snapshot of one picker instance's visible results).
10
+ * Picker-only layers such as emojiVersion/hiddenEmojis/customEmojis are
11
+ * intentionally not applied here; they remain Root-local filters.
12
+ */
13
+ export declare function searchEmojis(query: string, options?: EmojiDataOptions): readonly EmojiInfo[];
@@ -0,0 +1,23 @@
1
+ import type { EmojiData } from '../types/exposedTypes';
2
+ export type { EmojiData };
3
+ export type EmojiInfo = Readonly<{
4
+ /** Canonical/base lowercase unified code. */
5
+ unified: string;
6
+ /** The native emoji text for `unified`, ready to insert or render. */
7
+ emoji: string;
8
+ /** Display name: the dataset's full name (the last of `names`). */
9
+ name: string;
10
+ /** Search/display names in dataset order. */
11
+ names: readonly string[];
12
+ /** Lowercase unified codes for supported variations. */
13
+ variations: readonly string[];
14
+ /** Unicode/emoji version from the dataset. */
15
+ addedIn: string;
16
+ }>;
17
+ export type EmojiDataOptions = Readonly<{
18
+ /**
19
+ * Optional dataset in the same shape accepted by the picker's emojiData prop.
20
+ * Omit for the packaged default English dataset.
21
+ */
22
+ emojiData?: EmojiData;
23
+ }>;
@@ -0,0 +1,72 @@
1
+ import * as React from 'react';
2
+
3
+ type CategoryConfig = {
4
+ category: Categories;
5
+ name: string;
6
+ icon?: React.ReactNode;
7
+ /**
8
+ * Selects a `CustomEmoji` group for `Categories.CUSTOM` entries. Each
9
+ * grouped entry renders its own section and nav tab; ungrouped entries
10
+ * share the classic customs bucket.
11
+ */
12
+ group?: string;
13
+ };
14
+ type EmojiData = {
15
+ categories: Partial<Record<Categories, CategoryConfig>>;
16
+ emojis: Record<string, DataEmoji[]>;
17
+ };
18
+ interface DataEmoji {
19
+ n: string[];
20
+ u: string;
21
+ v?: string[];
22
+ a: string;
23
+ }
24
+ declare enum Categories {
25
+ SUGGESTED = "suggested",
26
+ CUSTOM = "custom",
27
+ SMILEYS_PEOPLE = "smileys_people",
28
+ ANIMALS_NATURE = "animals_nature",
29
+ FOOD_DRINK = "food_drink",
30
+ TRAVEL_PLACES = "travel_places",
31
+ ACTIVITIES = "activities",
32
+ OBJECTS = "objects",
33
+ SYMBOLS = "symbols",
34
+ FLAGS = "flags"
35
+ }
36
+
37
+ type EmojiInfo = Readonly<{
38
+ /** Canonical/base lowercase unified code. */
39
+ unified: string;
40
+ /** The native emoji text for `unified`, ready to insert or render. */
41
+ emoji: string;
42
+ /** Display name: the dataset's full name (the last of `names`). */
43
+ name: string;
44
+ /** Search/display names in dataset order. */
45
+ names: readonly string[];
46
+ /** Lowercase unified codes for supported variations. */
47
+ variations: readonly string[];
48
+ /** Unicode/emoji version from the dataset. */
49
+ addedIn: string;
50
+ }>;
51
+ type EmojiDataOptions = Readonly<{
52
+ /**
53
+ * Optional dataset in the same shape accepted by the picker's emojiData prop.
54
+ * Omit for the packaged default English dataset.
55
+ */
56
+ emojiData?: EmojiData;
57
+ }>;
58
+
59
+ /**
60
+ * Lookup by base or variation unified code.
61
+ * Trims/lowercases input, returns the canonical base record or undefined.
62
+ */
63
+ declare function getEmojiByUnified(unified: string, options?: EmojiDataOptions): EmojiInfo | undefined;
64
+ /**
65
+ * Dataset search (not a snapshot of one picker instance's visible results).
66
+ * Picker-only layers such as emojiVersion/hiddenEmojis/customEmojis are
67
+ * intentionally not applied here; they remain Root-local filters.
68
+ */
69
+ declare function searchEmojis(query: string, options?: EmojiDataOptions): readonly EmojiInfo[];
70
+
71
+ export { getEmojiByUnified, searchEmojis };
72
+ export type { EmojiData, EmojiDataOptions, EmojiInfo };
package/dist/data.d.ts ADDED
@@ -0,0 +1,72 @@
1
+ import * as React from 'react';
2
+
3
+ type CategoryConfig = {
4
+ category: Categories;
5
+ name: string;
6
+ icon?: React.ReactNode;
7
+ /**
8
+ * Selects a `CustomEmoji` group for `Categories.CUSTOM` entries. Each
9
+ * grouped entry renders its own section and nav tab; ungrouped entries
10
+ * share the classic customs bucket.
11
+ */
12
+ group?: string;
13
+ };
14
+ type EmojiData = {
15
+ categories: Partial<Record<Categories, CategoryConfig>>;
16
+ emojis: Record<string, DataEmoji[]>;
17
+ };
18
+ interface DataEmoji {
19
+ n: string[];
20
+ u: string;
21
+ v?: string[];
22
+ a: string;
23
+ }
24
+ declare enum Categories {
25
+ SUGGESTED = "suggested",
26
+ CUSTOM = "custom",
27
+ SMILEYS_PEOPLE = "smileys_people",
28
+ ANIMALS_NATURE = "animals_nature",
29
+ FOOD_DRINK = "food_drink",
30
+ TRAVEL_PLACES = "travel_places",
31
+ ACTIVITIES = "activities",
32
+ OBJECTS = "objects",
33
+ SYMBOLS = "symbols",
34
+ FLAGS = "flags"
35
+ }
36
+
37
+ type EmojiInfo = Readonly<{
38
+ /** Canonical/base lowercase unified code. */
39
+ unified: string;
40
+ /** The native emoji text for `unified`, ready to insert or render. */
41
+ emoji: string;
42
+ /** Display name: the dataset's full name (the last of `names`). */
43
+ name: string;
44
+ /** Search/display names in dataset order. */
45
+ names: readonly string[];
46
+ /** Lowercase unified codes for supported variations. */
47
+ variations: readonly string[];
48
+ /** Unicode/emoji version from the dataset. */
49
+ addedIn: string;
50
+ }>;
51
+ type EmojiDataOptions = Readonly<{
52
+ /**
53
+ * Optional dataset in the same shape accepted by the picker's emojiData prop.
54
+ * Omit for the packaged default English dataset.
55
+ */
56
+ emojiData?: EmojiData;
57
+ }>;
58
+
59
+ /**
60
+ * Lookup by base or variation unified code.
61
+ * Trims/lowercases input, returns the canonical base record or undefined.
62
+ */
63
+ declare function getEmojiByUnified(unified: string, options?: EmojiDataOptions): EmojiInfo | undefined;
64
+ /**
65
+ * Dataset search (not a snapshot of one picker instance's visible results).
66
+ * Picker-only layers such as emojiVersion/hiddenEmojis/customEmojis are
67
+ * intentionally not applied here; they remain Root-local filters.
68
+ */
69
+ declare function searchEmojis(query: string, options?: EmojiDataOptions): readonly EmojiInfo[];
70
+
71
+ export { getEmojiByUnified, searchEmojis };
72
+ export type { EmojiData, EmojiDataOptions, EmojiInfo };
@@ -1,19 +1,23 @@
1
- import { Categories } from '../types/exposedTypes';
2
- export declare enum EmojiProperties {
3
- name = "n",
4
- unified = "u",
5
- variations = "v",
6
- added_in = "a",
7
- imgUrl = "imgUrl"
8
- }
9
- export interface DataEmoji extends WithName {
10
- [EmojiProperties.unified]: string;
11
- [EmojiProperties.variations]?: string[];
12
- [EmojiProperties.added_in]: string;
13
- [EmojiProperties.imgUrl]?: string;
14
- }
15
- export declare type DataEmojis = DataEmoji[];
16
- export declare type DataGroups = Categories;
17
- export declare type WithName = {
18
- [EmojiProperties.name]: string[];
19
- };
1
+ import { Categories } from '../types/exposedTypes';
2
+ export declare enum EmojiProperties {
3
+ name = "n",
4
+ unified = "u",
5
+ variations = "v",
6
+ added_in = "a",
7
+ imgUrl = "imgUrl"
8
+ }
9
+ export interface DataEmoji extends WithName {
10
+ /** Exact rendered identity; canonical unified remains the search identity. */
11
+ renderUnified?: string;
12
+ /** Stored recent identity when the active tone has no matching variation. */
13
+ fallbackUnified?: string;
14
+ [EmojiProperties.unified]: string;
15
+ [EmojiProperties.variations]?: string[];
16
+ [EmojiProperties.added_in]: string;
17
+ [EmojiProperties.imgUrl]?: string;
18
+ }
19
+ export type DataEmojis = DataEmoji[];
20
+ export type DataGroups = Categories;
21
+ export type WithName = {
22
+ [EmojiProperties.name]: string[];
23
+ };
@@ -1,16 +1,15 @@
1
- import { CustomEmoji } from '../config/customEmojiConfig';
2
- import { EmojiStyle, SkinTones } from '../types/exposedTypes';
3
- import { DataEmoji, DataEmojis, WithName } from './DataTypes';
4
- export declare function emojiNames(emoji: WithName): string[];
5
- export declare function addedIn(emoji: DataEmoji): number;
6
- export declare function emojiName(emoji?: WithName): string;
7
- export declare function unifiedWithoutSkinTone(unified: string): string;
8
- export declare function emojiUnified(emoji: DataEmoji, skinTone?: string): string;
9
- export declare function emojiUrlByUnified(unified: string, emojiStyle: EmojiStyle): string;
10
- export declare function emojiVariations(emoji: DataEmoji): string[];
11
- export declare function emojiHasVariations(emoji: DataEmoji): boolean;
12
- export declare function emojiVariationUnified(emoji: DataEmoji, skinTone?: string): string | undefined;
13
- export declare function emojiByUnified(unified?: string): DataEmoji | undefined;
14
- export declare const allEmojis: DataEmojis;
15
- export declare function setCustomEmojis(customEmojis: CustomEmoji[]): void;
16
- export declare function activeVariationFromUnified(unified: string): SkinTones | null;
1
+ import { EmojiStyleValue, SkinTones } from '../types/exposedTypes';
2
+ import { DataEmoji, WithName } from './DataTypes';
3
+ export declare function emojiNames(emoji: WithName): string[];
4
+ export declare function addedIn(emoji: DataEmoji): number;
5
+ export declare function emojiName(emoji?: WithName): string;
6
+ export declare function unifiedWithoutSkinTone(unified: string): string;
7
+ export declare function emojiCanonicalUnified(emoji: DataEmoji): string;
8
+ export declare function emojiUnified(emoji: DataEmoji, skinTone?: string): string;
9
+ export declare function emojiUrlByUnified(unified: string, emojiStyle: EmojiStyleValue): string;
10
+ export declare function emojiVariations(emoji: DataEmoji): string[];
11
+ export declare function emojiHasVariations(emoji: DataEmoji): boolean;
12
+ export declare function emojiVariationUnified(emoji: DataEmoji, skinTone?: string): string | undefined;
13
+ export declare function emojiByUnified(unified?: string): DataEmoji | undefined;
14
+ export declare function activeVariationFromUnified(unified: string): SkinTones | null;
15
+ export declare function skinToneFromEmoji(emoji: DataEmoji, unified: string, activeTone: SkinTones): SkinTones;
@@ -1,12 +1 @@
1
- import { EmojiStyle, SkinTones } from '../types/exposedTypes';
2
- import { DataEmoji, WithName } from './DataTypes';
3
- export declare function emojiNames(emoji: WithName): string[];
4
- export declare function addedIn(emoji: DataEmoji): number;
5
- export declare function emojiName(emoji?: WithName): string;
6
- export declare function unifiedWithoutSkinTone(unified: string): string;
7
- export declare function emojiUnified(emoji: DataEmoji, skinTone?: string): string;
8
- export declare function emojiUrlByUnified(unified: string, emojiStyle: EmojiStyle): string;
9
- export declare function emojiVariations(emoji: DataEmoji): string[];
10
- export declare function emojiHasVariations(emoji: DataEmoji): boolean;
11
- export declare function emojiVariationUnified(emoji: DataEmoji, skinTone?: string): string | undefined;
12
- export declare function activeVariationFromUnified(unified: string): SkinTones | null;
1
+ export { activeVariationFromUnified, skinToneFromEmoji, addedIn, emojiHasVariations, emojiName, emojiNames, emojiUnified, emojiCanonicalUnified, emojiUrlByUnified, emojiVariations, emojiVariationUnified, unifiedWithoutSkinTone, } from './emojiSelectors';
@@ -0,0 +1,10 @@
1
+ export declare const NATIVE_PROBE_BATCH = 64;
2
+ /** One reusable canvas and result cache per detected document/font. */
3
+ export declare function createNativeEmojiSequenceSupport(ctx: CanvasRenderingContext2D, baselineWidth: number): {
4
+ prime: (ids: Iterable<string>) => void;
5
+ supports(unified: string): boolean | null;
6
+ /** Whether an identity was probed (results may still be null). */
7
+ has: (unified: string) => boolean;
8
+ /** Frozen results so far. Unprobed identities read as undefined. */
9
+ snapshot(): (unified: string) => boolean | null | undefined;
10
+ };
@@ -0,0 +1,40 @@
1
+ import { createNativeEmojiSequenceSupport } from './nativeEmojiSequenceSupport';
2
+ export declare const DEFAULT_NATIVE_EMOJI_FONT = "\"Segoe UI Emoji\", \"Segoe UI Symbol\", \"Segoe UI\", \"Apple Color Emoji\", \"Twemoji Mozilla\", \"Noto Color Emoji\", \"EmojiOne Color\", \"Android Emoji\"";
3
+ export type NativeEmojiProbe = ReturnType<typeof createNativeEmojiSequenceSupport>;
4
+ /**
5
+ * Platform support as filtering reads it. `supports` returns a probed
6
+ * identity's exact result (null when inconclusive, undefined when not
7
+ * probed yet); the version and flag fields predict the rest.
8
+ */
9
+ export type NativeEmojiSupport = {
10
+ supports: (unified: string) => boolean | null | undefined;
11
+ /** Emoji versions whose sample the font cannot draw. */
12
+ failedVersions: Set<number>;
13
+ countryFlags: boolean;
14
+ };
15
+ export declare const UNKNOWN_SUPPORT: {};
16
+ /**
17
+ * Probes the font synchronously, sampling versions and flags only.
18
+ * Exact sequence results accumulate on the returned probe through
19
+ * `prime`, which pickers call in background batches.
20
+ */
21
+ export declare function detectNativeEmojiSupport(fontFamily?: string, refresh?: boolean, ownerDocument?: Document | undefined): NativeEmojiProbe | typeof UNKNOWN_SUPPORT;
22
+ /**
23
+ * Whether a rendered identity should show. An exact result wins; until
24
+ * one exists, flags and emojis of a version whose sample failed are
25
+ * predicted unsupported. `addedIn` is the emoji's version, when known.
26
+ */
27
+ export declare function isNativeEmojiSupported(support: NativeEmojiSupport | null, unified: string, addedIn?: number): boolean;
28
+ /** The picker's view of a probe: frozen results, never drawing. */
29
+ /**
30
+ * The picker's view of a probe: frozen results, never drawing, plus a
31
+ * prediction for identities not checked yet. `samples` maps each emoji
32
+ * version to one emoji introduced in it. Versions are judged one by one:
33
+ * fonts often draw a newer version's single glyphs but not an older
34
+ * version's sequences.
35
+ */
36
+ export declare function nativeSupportSnapshot(probe: NativeEmojiProbe, samples: Map<number, string>): NativeEmojiSupport;
37
+ /** Test-only: forget cached probe results. */
38
+ export declare function __resetNativeEmojiSupportForTest(): void;
39
+ /** Whether a unified code is a regional-indicator country flag. */
40
+ export declare function isCountryFlagUnified(unified: string): boolean;
@@ -1 +1 @@
1
- export declare function parseNativeEmoji(unified: string): string;
1
+ export declare function parseNativeEmoji(unified: string): string;
@@ -1,11 +1,11 @@
1
- import { SkinTones, SuggestionMode } from '../types/exposedTypes';
2
- import { DataEmoji } from './DataTypes';
3
- declare type SuggestedItem = {
4
- unified: string;
5
- original: string;
6
- count: number;
7
- };
8
- declare type Suggested = SuggestedItem[];
9
- export declare function getSuggested(mode?: SuggestionMode): Suggested;
10
- export declare function setSuggested(emoji: DataEmoji, skinTone: SkinTones): void;
11
- export {};
1
+ import { SkinTones, SuggestionModeValue } from '../types/exposedTypes';
2
+ import { DataEmoji } from './DataTypes';
3
+ type SuggestedItem = {
4
+ unified: string;
5
+ original: string;
6
+ count: number;
7
+ };
8
+ type Suggested = SuggestedItem[];
9
+ export declare function getSuggested(mode?: SuggestionModeValue): Suggested;
10
+ export declare function setSuggested(emoji: DataEmoji, skinTone: SkinTones): void;
11
+ export {};
@@ -0,0 +1,7 @@
1
+ import { DataEmoji } from './DataTypes';
2
+ export declare function resolveSuggestedRenderIds(entries: readonly string[], lookup: (normalizedId: string) => DataEmoji | undefined): string[];
3
+ /**
4
+ * A lowercased unified ID, custom ID or emoji character, resolved to a
5
+ * known render identity (see resolveSuggestedRenderIds).
6
+ */
7
+ export declare function resolveEntryId(id: string, lookup: (normalizedId: string) => DataEmoji | undefined): string | undefined;
@@ -0,0 +1,228 @@
1
+ import {
2
+ __esm
3
+ } from "./chunk-LO4TPPLH.mjs";
4
+
5
+ // src/data/defaultEmojiData.ts
6
+ function registerDefaultEmojiData(data) {
7
+ registered = data;
8
+ }
9
+ function getRegisteredDefaultEmojiData() {
10
+ return registered;
11
+ }
12
+ function defaultEmojiDataOrEmpty() {
13
+ return registered ?? EMPTY_EMOJI_DATA;
14
+ }
15
+ function loadDefaultEmojiData() {
16
+ if (registered) {
17
+ return Promise.resolve(registered);
18
+ }
19
+ if (!pending) {
20
+ pending = import("./emojis-6L3GRBAP.mjs").then((module) => {
21
+ const data = module.default ?? module;
22
+ registered = registered ?? data;
23
+ return registered;
24
+ }).catch((error) => {
25
+ pending = null;
26
+ throw error;
27
+ });
28
+ }
29
+ return pending;
30
+ }
31
+ var registered, EMPTY_EMOJI_DATA, pending;
32
+ var init_defaultEmojiData = __esm({
33
+ "src/data/defaultEmojiData.ts"() {
34
+ "use strict";
35
+ registered = null;
36
+ EMPTY_EMOJI_DATA = Object.freeze({
37
+ categories: {},
38
+ emojis: {}
39
+ });
40
+ pending = null;
41
+ }
42
+ });
43
+
44
+ // src/data-core/prepare.ts
45
+ init_defaultEmojiData();
46
+
47
+ // src/dataUtils/parseNativeEmoji.ts
48
+ function parseNativeEmoji(unified) {
49
+ return unified.split("-").map((hex) => String.fromCodePoint(parseInt(hex, 16))).join("");
50
+ }
51
+
52
+ // src/data-core/prepare.ts
53
+ var coreCache = /* @__PURE__ */ new WeakMap();
54
+ var prepareCount = 0;
55
+ function normalizeUnified(input) {
56
+ return input.trim().toLowerCase();
57
+ }
58
+ function normalizeQuery(input) {
59
+ if (!input || typeof input !== "string") {
60
+ return "";
61
+ }
62
+ return input.trim().toLowerCase();
63
+ }
64
+ function toEmojiInfo(unified, names, variations, addedIn) {
65
+ return Object.freeze({
66
+ unified,
67
+ emoji: parseNativeEmoji(unified),
68
+ name: names[names.length - 1] || "",
69
+ names: Object.freeze([...names]),
70
+ variations: Object.freeze([...variations ?? []]),
71
+ addedIn
72
+ });
73
+ }
74
+ function readStringArray(raw) {
75
+ if (!Array.isArray(raw)) {
76
+ return [];
77
+ }
78
+ return raw.filter((n) => typeof n === "string").map(
79
+ (n) => n.toLowerCase()
80
+ );
81
+ }
82
+ function appendEntry(byUnified, byCharMutable, records, entry) {
83
+ const rawUnified = entry.u;
84
+ if (typeof rawUnified !== "string" || rawUnified.length === 0) {
85
+ return;
86
+ }
87
+ const unified = rawUnified.toLowerCase();
88
+ if (byUnified.has(unified)) {
89
+ return;
90
+ }
91
+ const names = readStringArray(entry.n);
92
+ const variations = readStringArray(entry.v);
93
+ const rawAddedIn = entry.a;
94
+ const addedIn = typeof rawAddedIn === "string" ? rawAddedIn : String(rawAddedIn ?? "");
95
+ const info = toEmojiInfo(unified, names, variations, addedIn);
96
+ records.push(info);
97
+ byUnified.set(unified, info);
98
+ for (const variation of info.variations) {
99
+ if (!byUnified.has(variation)) {
100
+ byUnified.set(variation, info);
101
+ }
102
+ }
103
+ indexCharBucket(byCharMutable, names, info);
104
+ }
105
+ function indexCharBucket(byCharMutable, names, info) {
106
+ const distinctChars = Array.from(new Set(names.join("")));
107
+ for (const char of distinctChars) {
108
+ const bucket = byCharMutable.get(char);
109
+ if (bucket) {
110
+ bucket.push(info);
111
+ } else {
112
+ byCharMutable.set(char, [info]);
113
+ }
114
+ }
115
+ }
116
+ function getPreparedCore(emojiData) {
117
+ const source = emojiData ?? defaultEmojiDataOrEmpty();
118
+ const cached = coreCache.get(source);
119
+ if (cached) {
120
+ return cached;
121
+ }
122
+ prepareCount += 1;
123
+ const byUnified = /* @__PURE__ */ new Map();
124
+ const byCharMutable = /* @__PURE__ */ new Map();
125
+ const records = [];
126
+ const groups = source.emojis ?? {};
127
+ for (const key of Object.keys(groups)) {
128
+ const list = groups[key] ?? [];
129
+ for (const entry of list) {
130
+ appendEntry(byUnified, byCharMutable, records, entry);
131
+ }
132
+ }
133
+ const byChar = /* @__PURE__ */ new Map();
134
+ byCharMutable.forEach((bucket, char) => {
135
+ byChar.set(char, Object.freeze(bucket));
136
+ });
137
+ const core = {
138
+ records,
139
+ byUnified,
140
+ byChar,
141
+ queryMemo: /* @__PURE__ */ new Map()
142
+ };
143
+ coreCache.set(source, core);
144
+ return core;
145
+ }
146
+
147
+ // src/data-core/search.ts
148
+ var EMPTY_RESULTS = Object.freeze([]);
149
+ var MAX_QUERY_MEMO_SIZE = 500;
150
+ function memoizeQuery(core, normalized, results) {
151
+ const memo = core.queryMemo;
152
+ if (memo.has(normalized)) {
153
+ memo.delete(normalized);
154
+ } else if (memo.size >= MAX_QUERY_MEMO_SIZE) {
155
+ const oldest = memo.keys().next();
156
+ if (!oldest.done) {
157
+ memo.delete(oldest.value);
158
+ }
159
+ }
160
+ memo.set(normalized, results);
161
+ }
162
+ function smallestCandidateBucket(core, normalized) {
163
+ let smallest = core.records;
164
+ for (const char of Array.from(normalized)) {
165
+ const bucket = core.byChar.get(char);
166
+ if (!bucket) {
167
+ return EMPTY_RESULTS;
168
+ }
169
+ if (bucket.length < smallest.length) {
170
+ smallest = bucket;
171
+ }
172
+ }
173
+ return smallest;
174
+ }
175
+ function getEmojiByUnified(unified, options) {
176
+ if (!unified || typeof unified !== "string") {
177
+ return void 0;
178
+ }
179
+ const normalized = normalizeUnified(unified);
180
+ if (!normalized) {
181
+ return void 0;
182
+ }
183
+ const core = getPreparedCore(options?.emojiData);
184
+ return core.byUnified.get(normalized);
185
+ }
186
+ function searchEmojis(query, options) {
187
+ const normalized = normalizeQuery(query);
188
+ if (!normalized) {
189
+ return EMPTY_RESULTS;
190
+ }
191
+ const core = getPreparedCore(options?.emojiData);
192
+ const memoized = core.queryMemo.get(normalized);
193
+ if (memoized) {
194
+ memoizeQuery(core, normalized, memoized);
195
+ return Object.freeze([...memoized]);
196
+ }
197
+ if (normalized.length === 1) {
198
+ const bucket = core.byChar.get(normalized) ?? EMPTY_RESULTS;
199
+ memoizeQuery(core, normalized, bucket);
200
+ return Object.freeze([...bucket]);
201
+ }
202
+ const matches = [];
203
+ for (const record of smallestCandidateBucket(core, normalized)) {
204
+ const names = record.names;
205
+ for (let i = 0; i < names.length; i += 1) {
206
+ if (names[i].includes(normalized)) {
207
+ matches.push(record);
208
+ break;
209
+ }
210
+ }
211
+ }
212
+ memoizeQuery(core, normalized, matches);
213
+ return Object.freeze([...matches]);
214
+ }
215
+
216
+ export {
217
+ registerDefaultEmojiData,
218
+ getRegisteredDefaultEmojiData,
219
+ EMPTY_EMOJI_DATA,
220
+ defaultEmojiDataOrEmpty,
221
+ loadDefaultEmojiData,
222
+ init_defaultEmojiData,
223
+ parseNativeEmoji,
224
+ normalizeQuery,
225
+ getPreparedCore,
226
+ getEmojiByUnified,
227
+ searchEmojis
228
+ };