emoji-picker-react 5.0.0 → 5.0.2

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 (57) hide show
  1. package/dist/DomUtils/classNames.d.ts +0 -1
  2. package/dist/DomUtils/keyboardNavigation.d.ts +10 -2
  3. package/dist/DomUtils/selectors.d.ts +2 -2
  4. package/dist/data/index.js +1 -1
  5. package/dist/data/skinToneVariations.js +2 -2
  6. package/dist/data/skinToneVariations.ts +8 -7
  7. package/dist/data-core/prepare.d.ts +6 -0
  8. package/dist/esm/chunks/chunk-56D5WCOZ.mjs +6729 -0
  9. package/dist/esm/chunks/chunk-7ZGTUZFB.mjs +8021 -12
  10. package/dist/esm/chunks/chunk-IODYR4CR.mjs +14 -0
  11. package/dist/esm/chunks/chunk-LO4TPPLH.mjs +32 -42
  12. package/dist/esm/chunks/chunk-RU7G34WK.mjs +156 -0
  13. package/dist/esm/chunks/emojis-6L3GRBAP.mjs +5 -7
  14. package/dist/esm/data.mjs +9 -16
  15. package/dist/esm/index.mjs +230 -340
  16. package/dist/esm/primitives/index.mjs +6 -65
  17. package/dist/hooks/preloadEmoji.d.ts +1 -5
  18. package/dist/hooks/useCategoryHeight.d.ts +2 -1
  19. package/dist/hooks/useEmojiVirtualization.d.ts +1 -0
  20. package/dist/index.js +1 -1
  21. package/dist/primitives/index.js +1 -1
  22. package/dist/virtualization/virtualizationHelpers.d.ts +2 -0
  23. package/llms-full.txt +9 -3
  24. package/package.json +2 -2
  25. package/src/DomUtils/classNames.ts +0 -4
  26. package/src/DomUtils/elementPositionInRow.ts +2 -2
  27. package/src/DomUtils/keyboardNavigation.ts +74 -10
  28. package/src/DomUtils/scrollTo.ts +2 -2
  29. package/src/DomUtils/selectors.ts +10 -16
  30. package/src/components/body/EmojiCategory.tsx +1 -1
  31. package/src/components/body/EmojiList.tsx +54 -23
  32. package/src/components/context/PickerDataContext.tsx +7 -2
  33. package/src/components/header/Search/Search.tsx +4 -2
  34. package/src/components/header/SkinTonePicker/BtnSkinToneVariation.tsx +7 -6
  35. package/src/components/main/defaultAppearance.tsx +2 -1
  36. package/src/config/config.ts +6 -3
  37. package/src/data/skinToneVariations.ts +8 -7
  38. package/src/data-core/pickerData.ts +8 -12
  39. package/src/data-core/prepare.ts +32 -39
  40. package/src/data-core/search.ts +10 -2
  41. package/src/dataUtils/emojiSelectors.ts +2 -1
  42. package/src/dataUtils/parseNativeEmoji.ts +3 -4
  43. package/src/dataUtils/suggestedEmojis.ts +25 -39
  44. package/src/hooks/preloadEmoji.ts +13 -52
  45. package/src/hooks/useActiveCategoryScrollDetection.ts +22 -19
  46. package/src/hooks/useCategoryHeight.ts +38 -6
  47. package/src/hooks/useDisallowedEmojis.ts +23 -13
  48. package/src/hooks/useEmojiVirtualization.tsx +102 -66
  49. package/src/hooks/useFilter.ts +10 -8
  50. package/src/hooks/useIsEmojiHidden.ts +16 -12
  51. package/src/hooks/useKeyboardNavigation.ts +104 -17
  52. package/src/primitives/structuralStyles.tsx +3 -0
  53. package/src/primitives/tokens.ts +1 -0
  54. package/src/virtualization/virtualizationHelpers.ts +9 -2
  55. package/dist/esm/chunks/chunk-46BUDQLE.mjs +0 -228
  56. package/dist/esm/chunks/chunk-FQIJ4HBW.mjs +0 -25
  57. package/dist/esm/chunks/chunk-KQPOIRSC.mjs +0 -9305
@@ -1,57 +1,16 @@
1
1
  "use client";
2
- import {
3
- Categories,
4
- CategoryNav,
5
- DEFAULT_PICKER_HEIGHT,
6
- DEFAULT_PICKER_WIDTH,
7
- DefaultPickerConfiguration,
8
- EmojiStyle,
9
- Empty,
10
- List,
11
- LoadError,
12
- Loading,
13
- MutableConfigProvider,
14
- Panel,
15
- Preview,
16
- Reactions,
17
- Relative,
18
- Root,
19
- Search,
20
- SkinTone,
21
- SkinTonePickerLocation,
22
- SkinTones,
23
- SuggestionMode,
24
- Theme,
25
- ViewOnlyEmoji,
26
- Viewport,
27
- commonInteractionStyles,
28
- compareConfig,
29
- cx,
30
- defaultPickerTokens,
31
- emojiByUnified,
32
- isPickerBehaviorProp,
33
- resolveEmojiStyle,
34
- resolveSkinTonePickerLocation,
35
- stylesheet,
36
- useDefaultAppearance,
37
- useDefineMutableConfig,
38
- usePreviewConfig,
39
- useSearchDisabledConfig,
40
- useSkinTonePickerLocationConfig,
41
- useSkinTonesDisabledConfig,
42
- validColumns
43
- } from "./chunks/chunk-KQPOIRSC.mjs";
44
- import {
45
- require_registerDefaultEmojiData
46
- } from "./chunks/chunk-FQIJ4HBW.mjs";
47
- import "./chunks/chunk-46BUDQLE.mjs";
2
+ import { Categories, CategoryNav, DEFAULT_PICKER_HEIGHT, DEFAULT_PICKER_WIDTH, DefaultPickerConfiguration, EmojiStyle, Empty, List, LoadError, Loading, MutableConfigProvider, Panel, Preview, Reactions, Relative, Root, Search, SkinTone, SkinTonePickerLocation, SkinTones, SuggestionMode, Theme, ViewOnlyEmoji, Viewport, commonInteractionStyles, compareConfig, cx, defaultPickerTokens, emojiByUnified, isPickerBehaviorProp, resolveEmojiStyle, resolveSkinTonePickerLocation, stylesheet, useDefaultAppearance, useDefineMutableConfig, usePreviewConfig, useSearchDisabledConfig, useSkinTonePickerLocationConfig, useSkinTonesDisabledConfig, validColumns } from "./chunks/chunk-56D5WCOZ.mjs";
3
+
4
+ import { require_registerDefaultEmojiData } from "./chunks/chunk-IODYR4CR.mjs";
5
+
6
+ import "./chunks/chunk-RU7G34WK.mjs";
7
+
48
8
  import "./chunks/chunk-7ZGTUZFB.mjs";
49
- import {
50
- __toESM
51
- } from "./chunks/chunk-LO4TPPLH.mjs";
52
9
 
53
- // src/index.tsx
54
- var import_registerDefaultEmojiData = __toESM(require_registerDefaultEmojiData());
10
+ import { __toESM } from "./chunks/chunk-LO4TPPLH.mjs";
11
+
12
+ __toESM(require_registerDefaultEmojiData());
13
+
55
14
  import * as React6 from "react";
56
15
 
57
16
  // src/EmojiPickerReact.tsx
@@ -62,328 +21,259 @@ import * as React from "react";
62
21
 
63
22
  // src/hooks/useShouldShowSkinTonePicker.ts
64
23
  function useIsSkinToneInSearch() {
65
- const skinTonePickerLocationConfig = useSkinTonePickerLocationConfig();
66
- return skinTonePickerLocationConfig === "SEARCH" /* SEARCH */;
24
+ return "SEARCH" /* SEARCH */ === useSkinTonePickerLocationConfig();
67
25
  }
26
+
68
27
  function useIsSkinToneInPreview() {
69
- const skinTonePickerLocationConfig = useSkinTonePickerLocationConfig();
70
- return skinTonePickerLocationConfig === "PREVIEW" /* PREVIEW */;
28
+ return "PREVIEW" /* PREVIEW */ === useSkinTonePickerLocationConfig();
71
29
  }
72
30
 
73
31
  // src/components/header/Header.tsx
74
32
  function Header() {
75
- const appearance = useDefaultAppearance();
76
- const searchDisabled = useSearchDisabledConfig();
77
- const skinTonesDisabled = useSkinTonesDisabledConfig();
78
- const toneInSearch = useIsSkinToneInSearch();
79
- return /* @__PURE__ */ React.createElement(
80
- Relative,
81
- {
82
- className: cx(
83
- "epr-header",
84
- appearance && commonInteractionStyles.hiddenOnReactions
85
- )
86
- },
87
- !searchDisabled && /* @__PURE__ */ React.createElement(Search, null, !skinTonesDisabled && toneInSearch && /* @__PURE__ */ React.createElement(SkinTone, null)),
88
- /* @__PURE__ */ React.createElement(CategoryNav, null)
89
- );
33
+ const appearance = useDefaultAppearance(), searchDisabled = useSearchDisabledConfig(), skinTonesDisabled = useSkinTonesDisabledConfig(), toneInSearch = useIsSkinToneInSearch();
34
+ /* @__PURE__ */
35
+ return React.createElement(Relative, {
36
+ className: cx("epr-header", appearance && commonInteractionStyles.hiddenOnReactions)
37
+ }, !searchDisabled && /* @__PURE__ */ React.createElement(Search, null, !skinTonesDisabled && toneInSearch && /* @__PURE__ */ React.createElement(SkinTone, null)),
38
+ /* @__PURE__ */ React.createElement(CategoryNav, null));
90
39
  }
91
40
 
92
41
  // src/components/main/defaultAppearance.tsx
93
42
  import * as React2 from "react";
43
+
94
44
  function defaultRootClassName(theme, className, unstyled) {
95
- if (unstyled) {
96
- return cx(className);
97
- }
98
- return cx(
99
- styles.main,
100
- styles.baseVariables,
101
- theme === "dark" /* DARK */ && styles.darkTheme,
102
- theme === "auto" /* AUTO */ && styles.autoThemeDark,
103
- className
104
- );
45
+ return unstyled ? cx(className) : cx(styles.main, styles.baseVariables, "dark" /* DARK */ === theme && styles.darkTheme, "auto" /* AUTO */ === theme && styles.autoThemeDark, className);
105
46
  }
106
- function defaultRootStyle({
107
- width,
108
- height,
109
- style,
110
- columns
111
- }) {
112
- return {
113
- // v4-compatible default dimensions; consumer style and explicit
114
- // width/height props both override them. With `columns`, the width
115
- // fits the columns instead.
116
- ...columns === void 0 && { width: getDimension(DEFAULT_PICKER_WIDTH) },
117
- height: getDimension(DEFAULT_PICKER_HEIGHT),
118
- ...style,
119
- ...width !== void 0 ? { width: getDimension(width) } : {},
120
- ...height !== void 0 ? { height: getDimension(height) } : {}
121
- };
47
+
48
+ function defaultRootStyle({width, height, style, columns}) {
49
+ return {
50
+ // v4-compatible default dimensions; consumer style and explicit
51
+ // width/height props both override them. With `columns`, the width
52
+ // fits the columns instead.
53
+ ...void 0 === columns && {
54
+ width: getDimension(DEFAULT_PICKER_WIDTH)
55
+ },
56
+ height: getDimension(DEFAULT_PICKER_HEIGHT),
57
+ ...style,
58
+ ...void 0 !== width ? {
59
+ width: getDimension(width)
60
+ } : {},
61
+ ...void 0 !== height ? {
62
+ height: getDimension(height)
63
+ } : {}
64
+ };
122
65
  }
66
+
123
67
  function getDimension(dimension) {
124
- return typeof dimension === "number" ? `${dimension}px` : dimension;
68
+ return "number" == typeof dimension ? `${dimension}px` : dimension;
125
69
  }
70
+
126
71
  var darkThemeBaseVariables = {
127
- "--epr-dark": "#000",
128
- "--epr-dark-emoji-variation-picker-bg-color": "var(--epr-dark)",
129
- "--epr-dark-highlight-color": "#c0c0c0",
130
- "--epr-dark-text-color": "var(--epr-highlight-color)",
131
- "--epr-dark-hover-bg-color": "#363636f6",
132
- "--epr-dark-hover-bg-color-reduced-opacity": "#36363680",
133
- "--epr-dark-focus-bg-color": "#474747",
134
- "--epr-dark-search-input-bg-color": "#333333",
135
- "--epr-dark-category-label-bg-color": "#222222e6",
136
- "--epr-dark-picker-border-color": "#151617",
137
- "--epr-dark-bg-color": "#222222",
138
- "--epr-dark-reactions-bg-color": "#22222290",
139
- "--epr-dark-search-input-bg-color-active": "var(--epr-dark)",
140
- "--epr-dark-emoji-variation-indicator-color": "#444",
141
- "--epr-dark-category-icon-active-color": "#6AA9DD",
142
- "--epr-dark-category-icon-inactive-color": "#C0C0BF",
143
- "--epr-dark-skin-tone-picker-menu-color": "#22222295",
144
- "--epr-dark-skin-tone-outer-border-color": "var(--epr-dark-picker-border-color)",
145
- "--epr-dark-skin-tone-inner-border-color": "#00000000"
146
- };
147
- var DarkTheme = {
148
- "--epr-emoji-variation-picker-bg-color": "var(--epr-dark-emoji-variation-picker-bg-color)",
149
- "--epr-hover-bg-color-reduced-opacity": "var(--epr-dark-hover-bg-color-reduced-opacity)",
150
- "--epr-highlight-color": "var(--epr-dark-highlight-color)",
151
- "--epr-text-color": "var(--epr-dark-text-color)",
152
- "--epr-hover-bg-color": "var(--epr-dark-hover-bg-color)",
153
- "--epr-focus-bg-color": "var(--epr-dark-focus-bg-color)",
154
- "--epr-search-input-bg-color": "var(--epr-dark-search-input-bg-color)",
155
- "--epr-category-label-bg-color": "var(--epr-dark-category-label-bg-color)",
156
- "--epr-picker-border-color": "var(--epr-dark-picker-border-color)",
157
- "--epr-bg-color": "var(--epr-dark-bg-color)",
158
- "--epr-reactions-bg-color": "var(--epr-dark-reactions-bg-color)",
159
- "--epr-search-input-bg-color-active": "var(--epr-dark-search-input-bg-color-active)",
160
- "--epr-emoji-variation-indicator-color": "var(--epr-dark-emoji-variation-indicator-color)",
161
- "--epr-category-icon-active-color": "var(--epr-dark-category-icon-active-color)",
162
- "--epr-category-icon-inactive-color": "var(--epr-dark-category-icon-inactive-color)",
163
- "--epr-skin-tone-picker-menu-color": "var(--epr-dark-skin-tone-picker-menu-color)",
164
- "--epr-skin-tone-outer-border-color": "var(--epr-dark-skin-tone-outer-border-color)",
165
- "--epr-skin-tone-inner-border-color": "var(--epr-dark-skin-tone-inner-border-color)",
166
- "--epr-dark-text-color": "var(--epr-highlight-color)",
167
- "--epr-dark-hover-bg-color": "#363636f6",
168
- "--epr-dark-hover-bg-color-reduced-opacity": "#36363680",
169
- "--epr-dark-focus-bg-color": "#474747",
170
- "--epr-dark-search-input-bg-color": "#333333",
171
- "--epr-dark-category-label-bg-color": "#222222e6",
172
- "--epr-dark-picker-border-color": "#151617",
173
- "--epr-dark-bg-color": "#222222",
174
- "--epr-dark-reactions-bg-color": "#22222290",
175
- "--epr-dark-search-input-bg-color-active": "var(--epr-dark)",
176
- "--epr-dark-emoji-variation-indicator-color": "#444",
177
- "--epr-dark-category-icon-active-color": "#6AA9DD",
178
- "--epr-dark-category-icon-inactive-color": "#C0C0BF",
179
- "--epr-dark-skin-tone-picker-menu-color": "#22222295",
180
- "--epr-dark-skin-tone-outer-border-color": "var(--epr-dark-picker-border-color)",
181
- "--epr-dark-skin-tone-inner-border-color": "#00000000"
182
- };
183
- var styles = /* @__PURE__ */ (() => stylesheet.create({
184
- main: {
185
- ".": ["epr-main", "EmojiPickerReact" /* emojiPicker */],
186
- position: "relative",
187
- display: "flex",
188
- flexDirection: "column",
189
- borderWidth: "1px",
190
- borderStyle: "solid",
191
- borderRadius: "var(--epr-picker-border-radius)",
192
- borderColor: "var(--epr-picker-border-color)",
193
- backgroundColor: "var(--epr-bg-color)",
194
- overflow: "hidden",
195
- transition: "height 0.3s ease-in-out, background-color 0.1s ease-in-out",
196
- "*": {
197
- boxSizing: "border-box",
198
- // Overridable without a specificity fight (v4 hard-coded sans-serif).
199
- fontFamily: "var(--epr-font-family, sans-serif)"
200
- }
201
- },
202
- baseVariables: {
203
- // Single-sourced from the public token preset: the default tree and
204
- // bare-Root consumers share the same documented defaults. The private
205
- // dark-theme values ride along (referenced only by the DarkTheme
206
- // overrides below); they stay out of the shared preset so the
207
- // primitives bundle keeps its separation marker scan clean.
208
- "--": { ...defaultPickerTokens, ...darkThemeBaseVariables }
209
- },
210
- // color-scheme makes native parts (scrollbars, the search field's
211
- // controls) render dark too; without it they stay light on a dark picker.
212
- autoThemeDark: {
213
- ".": "epr-auto-theme" /* autoTheme */,
214
- "@media (prefers-color-scheme: dark)": {
215
- "--": DarkTheme,
216
- colorScheme: "dark"
72
+ "--epr-dark": "#000",
73
+ "--epr-dark-emoji-variation-picker-bg-color": "var(--epr-dark)",
74
+ "--epr-dark-highlight-color": "#c0c0c0",
75
+ "--epr-dark-text-color": "var(--epr-highlight-color)",
76
+ "--epr-dark-hover-bg-color": "#363636f6",
77
+ "--epr-dark-hover-bg-color-reduced-opacity": "#36363680",
78
+ "--epr-dark-focus-bg-color": "#474747",
79
+ "--epr-dark-search-input-bg-color": "#333333",
80
+ "--epr-dark-category-label-bg-color": "#222222e6",
81
+ "--epr-dark-picker-border-color": "#151617",
82
+ "--epr-dark-bg-color": "#222222",
83
+ "--epr-dark-reactions-bg-color": "#22222290",
84
+ "--epr-dark-search-input-bg-color-active": "var(--epr-dark)",
85
+ "--epr-dark-emoji-variation-indicator-color": "#444",
86
+ "--epr-dark-category-icon-active-color": "#6AA9DD",
87
+ "--epr-dark-category-icon-inactive-color": "#C0C0BF",
88
+ "--epr-dark-skin-tone-picker-menu-color": "#22222295",
89
+ "--epr-dark-skin-tone-outer-border-color": "var(--epr-dark-picker-border-color)",
90
+ "--epr-dark-skin-tone-inner-border-color": "#00000000"
91
+ }, DarkTheme = {
92
+ "--epr-emoji-variation-picker-bg-color": "var(--epr-dark-emoji-variation-picker-bg-color)",
93
+ "--epr-hover-bg-color-reduced-opacity": "var(--epr-dark-hover-bg-color-reduced-opacity)",
94
+ "--epr-highlight-color": "var(--epr-dark-highlight-color)",
95
+ "--epr-text-color": "var(--epr-dark-text-color)",
96
+ "--epr-hover-bg-color": "var(--epr-dark-hover-bg-color)",
97
+ "--epr-focus-bg-color": "var(--epr-dark-focus-bg-color)",
98
+ "--epr-search-input-bg-color": "var(--epr-dark-search-input-bg-color)",
99
+ "--epr-category-label-bg-color": "var(--epr-dark-category-label-bg-color)",
100
+ "--epr-picker-border-color": "var(--epr-dark-picker-border-color)",
101
+ "--epr-bg-color": "var(--epr-dark-bg-color)",
102
+ "--epr-reactions-bg-color": "var(--epr-dark-reactions-bg-color)",
103
+ "--epr-search-input-bg-color-active": "var(--epr-dark-search-input-bg-color-active)",
104
+ "--epr-emoji-variation-indicator-color": "var(--epr-dark-emoji-variation-indicator-color)",
105
+ "--epr-category-icon-active-color": "var(--epr-dark-category-icon-active-color)",
106
+ "--epr-category-icon-inactive-color": "var(--epr-dark-category-icon-inactive-color)",
107
+ "--epr-skin-tone-picker-menu-color": "var(--epr-dark-skin-tone-picker-menu-color)",
108
+ "--epr-skin-tone-outer-border-color": "var(--epr-dark-skin-tone-outer-border-color)",
109
+ "--epr-skin-tone-inner-border-color": "var(--epr-dark-skin-tone-inner-border-color)",
110
+ "--epr-dark-text-color": "var(--epr-highlight-color)",
111
+ "--epr-dark-hover-bg-color": "#363636f6",
112
+ "--epr-dark-hover-bg-color-reduced-opacity": "#36363680",
113
+ "--epr-dark-focus-bg-color": "#474747",
114
+ "--epr-dark-search-input-bg-color": "#333333",
115
+ "--epr-dark-category-label-bg-color": "#222222e6",
116
+ "--epr-dark-picker-border-color": "#151617",
117
+ "--epr-dark-bg-color": "#222222",
118
+ "--epr-dark-reactions-bg-color": "#22222290",
119
+ "--epr-dark-search-input-bg-color-active": "var(--epr-dark)",
120
+ "--epr-dark-emoji-variation-indicator-color": "#444",
121
+ "--epr-dark-category-icon-active-color": "#6AA9DD",
122
+ "--epr-dark-category-icon-inactive-color": "#C0C0BF",
123
+ "--epr-dark-skin-tone-picker-menu-color": "#22222295",
124
+ "--epr-dark-skin-tone-outer-border-color": "var(--epr-dark-picker-border-color)",
125
+ "--epr-dark-skin-tone-inner-border-color": "#00000000"
126
+ }, styles = /* @__PURE__ */ (() => stylesheet.create({
127
+ main: {
128
+ ".": [ "epr-main", "EmojiPickerReact" /* emojiPicker */ ],
129
+ position: "relative",
130
+ display: "flex",
131
+ flexDirection: "column",
132
+ borderWidth: "1px",
133
+ borderStyle: "solid",
134
+ borderRadius: "var(--epr-picker-border-radius)",
135
+ borderColor: "var(--epr-picker-border-color)",
136
+ backgroundColor: "var(--epr-bg-color)",
137
+ overflow: "hidden",
138
+ transition: "height 0.3s ease-in-out, background-color 0.1s ease-in-out",
139
+ fontFamily: "var(--epr-font-family, inherit)",
140
+ "*": {
141
+ boxSizing: "border-box",
142
+ // Overridable without a specificity fight (v4 hard-coded sans-serif).
143
+ fontFamily: "inherit"
144
+ }
145
+ },
146
+ baseVariables: {
147
+ // Single-sourced from the public token preset: the default tree and
148
+ // bare-Root consumers share the same documented defaults. The private
149
+ // dark-theme values ride along (referenced only by the DarkTheme
150
+ // overrides below); they stay out of the shared preset so the
151
+ // primitives bundle keeps its separation marker scan clean.
152
+ "--": {
153
+ ...defaultPickerTokens,
154
+ ...darkThemeBaseVariables
155
+ }
156
+ },
157
+ // color-scheme makes native parts (scrollbars, the search field's
158
+ // controls) render dark too; without it they stay light on a dark picker.
159
+ autoThemeDark: {
160
+ ".": "epr-auto-theme" /* autoTheme */ ,
161
+ "@media (prefers-color-scheme: dark)": {
162
+ "--": DarkTheme,
163
+ colorScheme: "dark"
164
+ }
165
+ },
166
+ darkTheme: {
167
+ ".": "epr-dark-theme" /* darkTheme */ ,
168
+ "--": DarkTheme,
169
+ colorScheme: "dark"
217
170
  }
218
- },
219
- darkTheme: {
220
- ".": "epr-dark-theme" /* darkTheme */,
221
- "--": DarkTheme,
222
- colorScheme: "dark"
223
- }
224
- }))();
171
+ }))(), NATIVE_ATTRIBUTES = /* @__PURE__ */ new Set([ "id", "title", "lang", "dir" ]);
225
172
 
226
- // src/EmojiPickerReact.tsx
227
- function EmojiPicker(props) {
228
- const rootInput = props;
229
- const {
230
- theme: legacyTheme,
231
- colorScheme,
232
- width,
233
- height,
234
- className,
235
- style,
236
- unstyled,
237
- components,
238
- open,
239
- searchDisabled = false,
240
- skinTonesDisabled = false,
241
- skinTonePickerLocation = "SEARCH" /* SEARCH */,
242
- previewConfig,
243
- ...rest
244
- } = rootInput;
245
- const theme = colorScheme ?? legacyTheme;
246
- const showPreview = previewConfig?.showPreview ?? true;
247
- const resolvedLocation = resolveSkinTonePickerLocation(
248
- skinTonePickerLocation,
249
- searchDisabled,
250
- showPreview
251
- );
252
- const defaultConfiguration = {
253
- searchDisabled,
254
- skinTonesDisabled,
255
- skinTonePickerLocation: resolvedLocation,
256
- previewConfig,
257
- // Closed, as in v4, keeps the picker's state (skin tone, search,
258
- // reactions mode) and renders nothing.
259
- open: open !== false
260
- };
261
- const { behaviorProps, unknownProps } = pickBehaviorProps(rest);
262
- useUnknownPropsWarning(unknownProps);
263
- return /* @__PURE__ */ React3.createElement(DefaultPickerConfiguration.Provider, { value: defaultConfiguration }, /* @__PURE__ */ React3.createElement(
264
- Root,
265
- {
266
- appearance: unstyled ? "none" : "default",
267
- components,
268
- ...behaviorProps,
269
- className: defaultRootClassName(theme, className, unstyled),
270
- style: defaultRootStyle({
271
- width,
272
- height,
273
- style,
274
- columns: validColumns(props.columns)
275
- })
276
- },
277
- /* @__PURE__ */ React3.createElement(Reactions, null),
278
- /* @__PURE__ */ React3.createElement(Panel, null, CONTENT)
279
- ));
280
- }
281
- var NATIVE_ATTRIBUTES = /* @__PURE__ */ new Set([
282
- "id",
283
- "title",
284
- "lang",
285
- "dir"
286
- ]);
287
173
  function isNativeAttribute(key) {
288
- return NATIVE_ATTRIBUTES.has(key) || key.startsWith("aria-") || key.startsWith("data-");
174
+ return NATIVE_ATTRIBUTES.has(key) || key.startsWith("aria-") || key.startsWith("data-");
289
175
  }
176
+
290
177
  function pickBehaviorProps(props) {
291
- const behaviorProps = {};
292
- const unknown = [];
293
- const values = props;
294
- for (const key of Object.keys(values)) {
295
- if (isPickerBehaviorProp(key) || isNativeAttribute(key)) {
296
- behaviorProps[key] = values[key];
297
- } else {
298
- unknown.push(key);
299
- }
300
- }
301
- return { behaviorProps, unknownProps: unknown.join(", ") };
178
+ const behaviorProps = {}, unknown = [], values = props;
179
+ for (const key of Object.keys(values)) isPickerBehaviorProp(key) || isNativeAttribute(key) ? behaviorProps[key] = values[key] : unknown.push(key);
180
+ return {
181
+ behaviorProps,
182
+ unknownProps: unknown.join(", ")
183
+ };
302
184
  }
303
- var useUnknownPropsWarning = process.env.NODE_ENV === "production" ? () => void 0 : useDevUnknownPropsWarning;
304
- function useDevUnknownPropsWarning(unknownProps) {
305
- React3.useEffect(() => {
306
- if (unknownProps) {
307
- console.warn(
308
- `[emoji-picker-react] Ignoring unknown prop(s): ${unknownProps}. See docs/v5/MIGRATION.md for removed props.`
309
- );
310
- }
311
- }, [unknownProps]);
312
- }
313
- function ContentControl() {
314
- const showPreview = usePreviewConfig().showPreview;
315
- const skinTonesDisabled = useSkinTonesDisabledConfig();
316
- const toneInPreview = useIsSkinToneInPreview();
317
- return /* @__PURE__ */ React3.createElement(React3.Fragment, null, /* @__PURE__ */ React3.createElement(Header, null), /* @__PURE__ */ React3.createElement(Viewport, null, /* @__PURE__ */ React3.createElement(List, null), /* @__PURE__ */ React3.createElement(Empty, null), /* @__PURE__ */ React3.createElement(Loading, null), /* @__PURE__ */ React3.createElement(LoadError, null)), showPreview && /* @__PURE__ */ React3.createElement(Preview, null, !skinTonesDisabled && toneInPreview && /* @__PURE__ */ React3.createElement(SkinTone, { orientation: "vertical" })));
318
- }
319
- var CONTENT = /* @__PURE__ */ React3.createElement(ContentControl);
320
- var EmojiPickerReact_default = /* @__PURE__ */ React3.memo(EmojiPicker, compareConfig);
185
+
186
+ var useUnknownPropsWarning = "production" === process.env.NODE_ENV ? () => {} : function useDevUnknownPropsWarning(unknownProps) {
187
+ React3.useEffect((() => {
188
+ unknownProps && console.warn(`[emoji-picker-react] Ignoring unknown prop(s): ${unknownProps}. See docs/v5/MIGRATION.md for removed props.`);
189
+ }), [ unknownProps ]);
190
+ }, CONTENT = /* @__PURE__ */ React3.createElement((function ContentControl() {
191
+ const showPreview = usePreviewConfig().showPreview, skinTonesDisabled = useSkinTonesDisabledConfig(), toneInPreview = useIsSkinToneInPreview();
192
+ /* @__PURE__ */
193
+ return React3.createElement(React3.Fragment, null, /* @__PURE__ */ React3.createElement(Header, null), /* @__PURE__ */ React3.createElement(Viewport, null, /* @__PURE__ */ React3.createElement(List, null), /* @__PURE__ */ React3.createElement(Empty, null), /* @__PURE__ */ React3.createElement(Loading, null), /* @__PURE__ */ React3.createElement(LoadError, null)), showPreview && /* @__PURE__ */ React3.createElement(Preview, null, !skinTonesDisabled && toneInPreview && /* @__PURE__ */ React3.createElement(SkinTone, {
194
+ orientation: "vertical"
195
+ })));
196
+ })), EmojiPickerReact_default = /* @__PURE__ */ React3.memo((
197
+ // src/EmojiPickerReact.tsx
198
+ function EmojiPicker(props) {
199
+ const rootInput = props, {theme: legacyTheme, colorScheme, width, height, className, style, unstyled, components, open, searchDisabled = !1, skinTonesDisabled = !1, skinTonePickerLocation = "SEARCH" /* SEARCH */ , previewConfig, ...rest} = rootInput, theme = colorScheme ?? legacyTheme, defaultConfiguration = {
200
+ searchDisabled,
201
+ skinTonesDisabled,
202
+ skinTonePickerLocation: resolveSkinTonePickerLocation(skinTonePickerLocation, searchDisabled, previewConfig?.showPreview ?? !0),
203
+ previewConfig,
204
+ // Closed, as in v4, keeps the picker's state (skin tone, search,
205
+ // reactions mode) and renders nothing.
206
+ open: !1 !== open
207
+ }, {behaviorProps, unknownProps} = pickBehaviorProps(rest);
208
+ return useUnknownPropsWarning(unknownProps), /* @__PURE__ */ React3.createElement(DefaultPickerConfiguration.Provider, {
209
+ value: defaultConfiguration
210
+ }, /* @__PURE__ */ React3.createElement(Root, {
211
+ appearance: unstyled ? "none" : "default",
212
+ components,
213
+ ...behaviorProps,
214
+ className: defaultRootClassName(theme, className, unstyled),
215
+ style: defaultRootStyle({
216
+ width,
217
+ height,
218
+ style,
219
+ columns: validColumns(props.columns)
220
+ })
221
+ },
222
+ /* @__PURE__ */ React3.createElement(Reactions, null),
223
+ /* @__PURE__ */ React3.createElement(Panel, null, CONTENT)));
224
+ }), compareConfig);
321
225
 
322
226
  // src/components/ErrorBoundary.tsx
323
227
  import * as React4 from "react";
228
+
324
229
  var ErrorBoundary = class extends React4.Component {
325
- constructor(props) {
326
- super(props);
327
- this.state = { hasError: false };
328
- }
329
- static getDerivedStateFromError() {
330
- return { hasError: true };
331
- }
332
- componentDidCatch(error, errorInfo) {
333
- console.error("Emoji Picker React failed to render:", error, errorInfo);
334
- }
335
- render() {
336
- if (this.state.hasError) {
337
- return null;
230
+ constructor(props) {
231
+ super(props), this.state = {
232
+ hasError: !1
233
+ };
234
+ }
235
+ static getDerivedStateFromError() {
236
+ return {
237
+ hasError: !0
238
+ };
239
+ }
240
+ componentDidCatch(error, errorInfo) {
241
+ console.error("Emoji Picker React failed to render:", error, errorInfo);
242
+ }
243
+ render() {
244
+ return this.state.hasError ? null : this.props.children;
338
245
  }
339
- return this.props.children;
340
- }
341
246
  };
342
247
 
343
248
  // src/components/emoji/ExportedEmoji.tsx
344
249
  import * as React5 from "react";
345
- function ExportedEmoji({
346
- unified,
347
- size = 32,
348
- emojiStyle,
349
- lazyLoad = false,
350
- getEmojiUrl,
351
- emojiUrl
352
- }) {
353
- if (!unified && !emojiUrl && !getEmojiUrl) {
354
- return null;
355
- }
356
- return /* @__PURE__ */ React5.createElement(
357
- ViewOnlyEmoji,
358
- {
359
- unified,
360
- size,
361
- emojiStyle: resolveEmojiStyle(emojiStyle, emojiUrl || getEmojiUrl),
362
- lazyLoad,
363
- getEmojiUrl: emojiUrl ? () => emojiUrl : getEmojiUrl
364
- }
365
- );
250
+
251
+ function ExportedEmoji({unified, size = 32, emojiStyle, lazyLoad = !1, getEmojiUrl, emojiUrl}) {
252
+ return unified || emojiUrl || getEmojiUrl ? /* @__PURE__ */ React5.createElement(ViewOnlyEmoji, {
253
+ unified,
254
+ size,
255
+ emojiStyle: resolveEmojiStyle(emojiStyle, emojiUrl || getEmojiUrl),
256
+ lazyLoad,
257
+ getEmojiUrl: emojiUrl ? () => emojiUrl : getEmojiUrl
258
+ }) : null;
366
259
  }
367
260
 
368
261
  // src/index.tsx
369
262
  function EmojiPicker2(props) {
370
- const MutableConfigRef = useDefineMutableConfig({
371
- onEmojiClick: props.onEmojiClick,
372
- onReactionClick: props.onReactionClick,
373
- onSkinToneChange: props.onSkinToneChange,
374
- onSearchChange: props.onSearchChange,
375
- onReactionsModeChange: props.onReactionsModeChange
376
- });
377
- return /* @__PURE__ */ React6.createElement(ErrorBoundary, null, /* @__PURE__ */ React6.createElement(MutableConfigProvider, { value: MutableConfigRef, inheritToRoot: true }, /* @__PURE__ */ React6.createElement(EmojiPickerReact_default, { ...props })));
263
+ const MutableConfigRef = useDefineMutableConfig({
264
+ onEmojiClick: props.onEmojiClick,
265
+ onReactionClick: props.onReactionClick,
266
+ onSkinToneChange: props.onSkinToneChange,
267
+ onSearchChange: props.onSearchChange,
268
+ onReactionsModeChange: props.onReactionsModeChange
269
+ });
270
+ /* @__PURE__ */
271
+ return React6.createElement(ErrorBoundary, null, /* @__PURE__ */ React6.createElement(MutableConfigProvider, {
272
+ value: MutableConfigRef,
273
+ inheritToRoot: !0
274
+ }, /* @__PURE__ */ React6.createElement(EmojiPickerReact_default, {
275
+ ...props
276
+ })));
378
277
  }
379
- export {
380
- Categories,
381
- ExportedEmoji as Emoji,
382
- EmojiStyle,
383
- SkinTonePickerLocation,
384
- SkinTones,
385
- SuggestionMode,
386
- Theme,
387
- EmojiPicker2 as default,
388
- emojiByUnified
389
- };
278
+
279
+ export { Categories, ExportedEmoji as Emoji, EmojiStyle, SkinTonePickerLocation, SkinTones, SuggestionMode, Theme, EmojiPicker2 as default, emojiByUnified };