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
package/package.json CHANGED
@@ -1,15 +1,76 @@
1
1
  {
2
- "version": "4.22.3",
2
+ "version": "5.0.0",
3
3
  "license": "MIT",
4
4
  "main": "dist/index.js",
5
5
  "typings": "dist/index.d.ts",
6
+ "exports": {
7
+ ".": {
8
+ "import": {
9
+ "types": "./dist/index.d.mts",
10
+ "default": "./dist/esm/index.mjs"
11
+ },
12
+ "require": {
13
+ "types": "./dist/index.d.ts",
14
+ "default": "./dist/index.js"
15
+ },
16
+ "default": "./dist/index.js"
17
+ },
18
+ "./primitives": {
19
+ "import": {
20
+ "types": "./dist/primitives/index.d.mts",
21
+ "default": "./dist/esm/primitives/index.mjs"
22
+ },
23
+ "require": {
24
+ "types": "./dist/primitives/index.d.ts",
25
+ "default": "./dist/primitives/index.js"
26
+ },
27
+ "default": "./dist/primitives/index.js"
28
+ },
29
+ "./data": {
30
+ "import": {
31
+ "types": "./dist/data.d.mts",
32
+ "default": "./dist/esm/data.mjs"
33
+ },
34
+ "require": {
35
+ "types": "./dist/data.d.ts",
36
+ "default": "./dist/data/index.js"
37
+ },
38
+ "default": "./dist/data/index.js"
39
+ },
40
+ "./data/emojis-*": {
41
+ "import": {
42
+ "types": "./dist/data/emojis-*.d.mts",
43
+ "default": "./dist/data/emojis-*.mjs"
44
+ },
45
+ "require": {
46
+ "types": "./dist/data/emojis-*.d.ts",
47
+ "default": "./dist/data/emojis-*.js"
48
+ },
49
+ "default": "./dist/data/emojis-*.js"
50
+ },
51
+ "./dist/data/emojis-*.json": "./dist/data/emojis-*.json",
52
+ "./dist/data/emojis-*": {
53
+ "import": {
54
+ "types": "./dist/data/emojis-*.d.mts",
55
+ "default": "./dist/data/emojis-*.mjs"
56
+ },
57
+ "require": {
58
+ "types": "./dist/data/emojis-*.d.ts",
59
+ "default": "./dist/data/emojis-*.js"
60
+ },
61
+ "default": "./dist/data/emojis-*.js"
62
+ },
63
+ "./src/data/*.json": "./src/data/*.json",
64
+ "./package.json": "./package.json"
65
+ },
6
66
  "homepage": "https://ealush.com/emoji-picker-react",
7
67
  "files": [
8
68
  "dist",
9
69
  "src",
10
- "llms.txt"
70
+ "llms.txt",
71
+ "llms-full.txt"
11
72
  ],
12
- "description": "Emoji Picker component for React Applications on the web",
73
+ "description": "React emoji picker: batteries included, or BYOD (bring your own design, design language and design library). Shared keyboard navigation, localization and virtualization across styled, unstyled and composed UIs.",
13
74
  "keywords": [
14
75
  "emoji-picker",
15
76
  "react-emoji-picker",
@@ -17,14 +78,33 @@
17
78
  "emojis",
18
79
  "reactions",
19
80
  "reactions-picker",
20
- "emoji-reactions"
81
+ "emoji-reactions",
82
+ "emoji picker",
83
+ "react emoji picker",
84
+ "design-system",
85
+ "bring-your-own-styles",
86
+ "plug-and-play",
87
+ "unstyled",
88
+ "headless",
89
+ "composable",
90
+ "tailwind",
91
+ "shadcn",
92
+ "accessible",
93
+ "a11y",
94
+ "typescript",
95
+ "nextjs",
96
+ "react-19",
97
+ "skin-tones",
98
+ "emoji-search",
99
+ "i18n",
100
+ "llms.txt"
21
101
  ],
22
102
  "engines": {
23
- "node": ">=10"
103
+ "node": ">=18"
24
104
  },
25
105
  "repository": {
26
106
  "type": "git",
27
- "url": "https://github.com/ealush/emoji-picker-react.git"
107
+ "url": "git+https://github.com/ealush/emoji-picker-react.git"
28
108
  },
29
109
  "funding": [
30
110
  {
@@ -51,32 +131,43 @@
51
131
  }
52
132
  },
53
133
  "scripts": {
54
- "start": "tsdx watch",
55
- "build": "npm run build:data:src && npm run type-check && tsdx build --transpileOnly && npm run build:data:dist && npm run docs:llms",
134
+ "start": "npm run storybook",
135
+ "build": "npm run check:scripts && npm run clean && npm run build:data:src && npm run type-check && npm run build:data:dist && tsx ./scripts/build.ts && npm run docs:llms",
56
136
  "type-check": "tsc --noEmit --incremental --pretty --project tsconfig.json",
137
+ "check:contracts": "tsc --project test/v5-contract/tsconfig.json --noEmit && tsx ./scripts/checkApiDocs.ts",
57
138
  "test": "vitest run",
58
139
  "test:watch": "vitest",
59
140
  "test:visual": "playwright test",
60
- "lint": "eslint ./src --ext .ts,.tsx",
61
- "prepare": "npm run build",
141
+ "lint": "eslint src",
142
+ "prepare": "husky && npm run build",
62
143
  "size": "size-limit",
63
144
  "analyze": "size-limit --why",
64
145
  "build:data:src": "tsc --project ./scripts/tsconfig.build.json && node ./scripts/dist/prepare.js",
65
- "build:data:dist": "tsc --project tsconfig.data.json && node ./scripts/copyData.js",
146
+ "build:data:dist": "tsc --project tsconfig.data.json && tsx ./scripts/copyData.ts && tsx ./scripts/buildDataTwins.ts",
66
147
  "build:data": "npm run build:data:src && npm run build:data:dist",
67
- "storybook": "npm run build:data && storybook dev -p 6006",
148
+ "storybook": "npm run build:data && storybook dev --host 0.0.0.0 -p 6006",
68
149
  "build-storybook": "storybook build",
69
- "docs:llms": "node ./scripts/generateLlmsTxt.js",
70
- "check:react-floor": "node ./scripts/checkReactApiFloor.js"
150
+ "docs:llms": "tsx ./scripts/generateLlmsTxt.ts",
151
+ "check:react-floor": "tsx ./scripts/checkReactApiFloor.ts",
152
+ "check:react16": "tsx ./scripts/react16-fixture/run.ts",
153
+ "check:package": "tsx ./scripts/package-check/run.ts",
154
+ "check:compat": "tsc --project ./compat/v4-usage/tsconfig.json --noEmit && tsc --project ./test/v5-contract/tsconfig.json --noEmit && tsc --project ./compat/exports-map/tsconfig.json --noEmit",
155
+ "check:perf": "tsx ./bench/run.ts",
156
+ "clean": "tsx ./scripts/clean.ts",
157
+ "recipes": "tsx ./scripts/generateRecipes.mts",
158
+ "designs": "tsx ./scripts/portDesigns.mts",
159
+ "registry": "tsx ./scripts/generateRegistry.mts",
160
+ "check:scripts": "tsc --project scripts/tsconfig.json",
161
+ "icons": "tsx ./scripts/buildIcons.ts",
162
+ "check:data-package": "tsx ./scripts/checkDataPackage.ts",
163
+ "check:tooling": "tsc --project tsconfig.tooling.json --noEmit",
164
+ "check:docs": "tsx ./scripts/checkDocsLinks.ts",
165
+ "check:storybook-hosts": "tsx ./scripts/checkStorybookHosts.ts",
166
+ "check:node18": "tsx ./scripts/node18-fixture/run.ts"
71
167
  },
72
168
  "peerDependencies": {
73
169
  "react": ">=16.8"
74
170
  },
75
- "husky": {
76
- "hooks": {
77
- "pre-commit": "npm run lint"
78
- }
79
- },
80
171
  "prettier": {
81
172
  "printWidth": 80,
82
173
  "semi": true,
@@ -84,71 +175,94 @@
84
175
  },
85
176
  "name": "emoji-picker-react",
86
177
  "author": "ealush",
87
- "module": "dist/emoji-picker-react.esm.js",
178
+ "module": "dist/esm/index.mjs",
88
179
  "size-limit": [
89
180
  {
90
- "path": "dist/emoji-picker-react.cjs.production.min.js",
91
- "limit": "95 KB"
181
+ "path": "dist/index.js",
182
+ "limit": "76 KB"
183
+ },
184
+ {
185
+ "path": "dist/esm/index.mjs",
186
+ "limit": "75 KB"
92
187
  },
93
188
  {
94
- "path": "dist/emoji-picker-react.esm.js",
95
- "limit": "95 KB"
189
+ "path": "dist/esm/primitives/index.mjs",
190
+ "limit": "75 KB"
191
+ },
192
+ {
193
+ "path": "dist/esm/data.mjs",
194
+ "limit": "42 KB"
96
195
  }
97
196
  ],
98
197
  "devDependencies": {
99
- "@babel/core": "^7.18.10",
100
- "@babel/preset-react": "^7.24.1",
101
- "@babel/preset-typescript": "^7.24.1",
102
- "@playwright/test": "^1.46.1",
198
+ "@axe-core/playwright": "^4.13.0",
199
+ "@emotion/react": "^11.14.0",
200
+ "@emotion/styled": "^11.14.1",
201
+ "@eslint/js": "^9.39.5",
202
+ "@mui/material": "^9.4.0",
203
+ "@playwright/test": "^1.63.0",
204
+ "@radix-ui/react-popover": "^1.1.23",
103
205
  "@semantic-release/changelog": "^7.0.0",
104
206
  "@semantic-release/git": "^11.0.1",
105
207
  "@semantic-release/github": "^12.0.9",
106
208
  "@semantic-release/npm": "^13.1.5",
107
- "@size-limit/preset-small-lib": "^8.0.1",
108
- "@storybook/addon-essentials": "^8.6.15",
109
- "@storybook/addon-info": "^5.3.21",
110
- "@storybook/addon-links": "^8.6.15",
111
- "@storybook/addon-webpack5-compiler-swc": "1.0.5",
112
- "@storybook/react": "^8.6.15",
113
- "@storybook/react-webpack5": "8.6.15",
114
- "@testing-library/dom": "^10.4.1",
115
- "@testing-library/jest-dom": "^6.4.8",
116
- "@testing-library/react": "^16.0.0",
117
- "@testing-library/user-event": "^14.5.2",
118
- "@types/react": "^18.0.17",
119
- "@types/react-dom": "^18.0.6",
120
- "@typescript-eslint/eslint-plugin": "^5.36.2",
121
- "@typescript-eslint/parser": "^5.36.2",
122
- "autoprefixer": "^10.4.8",
123
- "babel-loader": "^8.2.5",
209
+ "@size-limit/preset-small-lib": "^14.1.0",
210
+ "@storybook/addon-docs": "^10.6.1",
211
+ "@storybook/addon-links": "^10.6.1",
212
+ "@storybook/react-vite": "^10.6.1",
213
+ "@tailwindcss/vite": "^4.3.3",
214
+ "@testing-library/dom": "^10.4.2",
215
+ "@testing-library/jest-dom": "^7.0.1",
216
+ "@testing-library/react": "^16.3.3",
217
+ "@testing-library/user-event": "^14.6.7",
218
+ "@types/jsdom": "^21.1.7",
219
+ "@types/node": "^24.19.1",
220
+ "@types/react": "^19.3.0",
221
+ "@types/react-dom": "^19.3.0",
222
+ "clsx": "^2.1.1",
124
223
  "conventional-changelog-conventionalcommits": "^9.3.1",
125
- "cssnano": "^5.1.13",
126
224
  "emoji-datasource": "^16.0.0",
127
225
  "emojibase-data": "^17.0.0",
128
- "eslint-import-resolver-typescript": "^3.3.0",
129
- "eslint-plugin-import": "^2.26.0",
130
- "eslint-plugin-jsx-a11y": "^6.6.1",
131
- "eslint-plugin-react": "^7.31.8",
132
- "eslint-plugin-react-hooks": "^4.6.0",
133
- "fs-extra": "^10.1.0",
134
- "glob": "^8.0.3",
135
- "husky": "^8.0.1",
136
- "jsdom": "^24.1.0",
137
- "lodash": "^4.17.21",
138
- "react": "^18.2.0",
139
- "react-dom": "^18.2.0",
140
- "react-is": "^18.2.0",
141
- "rollup-plugin-svg": "^2.0.0",
226
+ "esbuild": "^0.28.2",
227
+ "eslint": "^9.39.5",
228
+ "eslint-import-resolver-typescript": "^4.4.5",
229
+ "eslint-plugin-import": "^2.32.0",
230
+ "eslint-plugin-jsx-a11y": "^6.10.2",
231
+ "eslint-plugin-react": "^7.37.5",
232
+ "eslint-plugin-react-hooks": "^5.2.0",
233
+ "globals": "^17.13.0",
234
+ "husky": "^9.1.7",
235
+ "jsdom": "^30.1.1",
236
+ "postcss": "^8.5.28",
237
+ "prettier": "^3.9.9",
238
+ "react": "^19.3.0",
239
+ "react-dom": "^19.3.0",
240
+ "rollup": "^4.64.0",
241
+ "rollup-plugin-dts": "^6.5.1",
142
242
  "semantic-release": "^25.0.9",
143
- "size-limit": "^8.0.1",
144
- "storybook": "8.6.15",
145
- "tiny-invariant": "^1.2.0",
146
- "tsdx": "^0.14.1",
243
+ "size-limit": "^14.1.0",
244
+ "storybook": "^10.6.1",
245
+ "styled-components": "^6.5.3",
246
+ "tailwind-merge": "^3.7.0",
247
+ "tailwindcss": "^4.3.3",
248
+ "terser": "5.31.0",
147
249
  "tslib": "^2.4.0",
148
- "typescript": "^4.7.4",
149
- "vitest": "^4.1.11"
250
+ "tsx": "^4.23.15",
251
+ "typescript": "5.9",
252
+ "typescript-eslint": "^8.71.0",
253
+ "vite": "^8.3.2",
254
+ "vitest": "^5.0.3"
150
255
  },
151
256
  "dependencies": {
152
257
  "shipstyles": "1.0.0"
258
+ },
259
+ "directories": {
260
+ "doc": "docs",
261
+ "example": "example",
262
+ "test": "test"
263
+ },
264
+ "type": "commonjs",
265
+ "bugs": {
266
+ "url": "https://github.com/ealush/emoji-picker-react/issues"
153
267
  }
154
268
  }
@@ -1,3 +1,3 @@
1
1
  export function categoryNameFromDom($category: Element | null): string | null {
2
- return $category?.getAttribute('data-name') ?? null;
2
+ return $category?.getAttribute('data-epr-category') ?? null;
3
3
  }
@@ -13,6 +13,7 @@ export enum ClassNames {
13
13
  emojiList = 'epr-emoji-list',
14
14
  external = '__EmojiPicker__',
15
15
  emojiPicker = 'EmojiPickerReact',
16
+ reactions = 'epr-reactions',
16
17
  open = 'epr-open',
17
18
  vertical = 'epr-vertical',
18
19
  horizontal = 'epr-horizontal',
@@ -1,4 +1,4 @@
1
- import { DEFAULT_LABEL_HEIGHT } from '../components/main/PickerMain';
1
+ import { DEFAULT_LABEL_HEIGHT } from '../components/main/labelHeight';
2
2
 
3
3
  import { ClassNames, asSelectors } from './classNames';
4
4
  import { NullableElement } from './selectors';
@@ -17,7 +17,7 @@ export function elementCountInRow(
17
17
  // off by one (e.g. category padding shrinking the content box), which
18
18
  // makes arrow-up/arrow-down drift sideways by a column.
19
19
  // https://github.com/ealush/emoji-picker-react/issues/502
20
- const declared = Number(parent.dataset?.emojisPerRow);
20
+ const declared = Number(parent.dataset?.eprEmojisPerRow);
21
21
  if (Number.isInteger(declared) && declared > 0) {
22
22
  return declared;
23
23
  }
@@ -81,8 +81,30 @@ export function getLabelHeight(parentNode: NullableElement) {
81
81
  if (height > 0) {
82
82
  return height;
83
83
  }
84
+ // A design that hides category titles takes no label space; falling
85
+ // back to the default here would offset every virtualization window
86
+ // by a phantom label per category.
87
+ if (isDisplayNone(label)) {
88
+ return 0;
89
+ }
84
90
  }
85
91
 
86
- // fallback to default
87
- return DEFAULT_LABEL_HEIGHT;
92
+ // Not laid out yet: use the documented token, then the default.
93
+ const token = readPxToken(parentNode, '--epr-category-label-height');
94
+ return token ?? DEFAULT_LABEL_HEIGHT;
95
+ }
96
+
97
+ function isDisplayNone(element: Element): boolean {
98
+ return (
99
+ typeof getComputedStyle === 'function' &&
100
+ getComputedStyle(element).display === 'none'
101
+ );
102
+ }
103
+
104
+ function readPxToken(element: Element, name: string): number | null {
105
+ if (typeof getComputedStyle !== 'function') {
106
+ return null;
107
+ }
108
+ const value = parseFloat(getComputedStyle(element).getPropertyValue(name));
109
+ return Number.isFinite(value) ? value : null;
88
110
  }
@@ -0,0 +1,17 @@
1
+ /** Ignore delegated events from a picker nested inside this picker. */
2
+ export function eventBelongsToPicker(
3
+ event: Event,
4
+ container: Element | null,
5
+ ): boolean {
6
+ // At window/document capture the browser retargets a shadow-root event
7
+ // to its host. The original composed target still identifies the picker.
8
+ const target = (event.composedPath?.()[0] ?? event.target) as Element | null;
9
+ // Inspect the target rather than a global Element constructor: realms
10
+ // (iframes) and DOM test environments may have different constructors.
11
+ return (
12
+ typeof target?.closest === 'function' &&
13
+ !!container &&
14
+ target.closest('[data-epr-part="root"]') ===
15
+ container.closest('[data-epr-part="root"]')
16
+ );
17
+ }
@@ -1,5 +1,11 @@
1
1
  import { NullableElement } from './selectors';
2
2
 
3
3
  export function getActiveElement() {
4
- return document.activeElement as NullableElement;
4
+ // document.activeElement is the host when a consumer renders the picker
5
+ // inside an open shadow root. Grid movement needs the focused input/cell.
6
+ let active = document.activeElement;
7
+ while (active?.shadowRoot?.activeElement) {
8
+ active = active.shadowRoot.activeElement;
9
+ }
10
+ return active as NullableElement;
5
11
  }
@@ -0,0 +1,12 @@
1
+ // jsdom lacks parts of the platform the picker relies on (canvas, CSS
2
+ // cascade layers). Read the user agent from the document's window: on
3
+ // Node >= 21 the global `navigator` is Node's own, not jsdom's.
4
+ export function isJsdom(): boolean {
5
+ if (typeof document === 'undefined') {
6
+ return false;
7
+ }
8
+ const userAgent =
9
+ document.defaultView?.navigator?.userAgent ??
10
+ (typeof navigator !== 'undefined' ? navigator.userAgent : '');
11
+ return /jsdom/i.test(userAgent);
12
+ }
@@ -0,0 +1,5 @@
1
+ // Computed direction, so `dir` on any ancestor (or CSS) applies. Client
2
+ // only: called from event handlers and an opened tone fan.
3
+ export function isRtl(element: Element | null): boolean {
4
+ return !!element && getComputedStyle(element).direction === 'rtl';
5
+ }