emoji-picker-react 4.22.1 → 4.22.3
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.
- package/README.md +5 -1
- package/dist/emoji-picker-react.cjs.development.js +47 -24
- package/dist/emoji-picker-react.cjs.development.js.map +1 -1
- package/dist/emoji-picker-react.cjs.production.min.js +1 -1
- package/dist/emoji-picker-react.cjs.production.min.js.map +1 -1
- package/dist/emoji-picker-react.esm.js +47 -24
- package/dist/emoji-picker-react.esm.js.map +1 -1
- package/dist/hooks/useActiveCategoryScrollDetection.d.ts +6 -6
- package/llms.txt +5 -1
- package/package.json +26 -2
- package/src/components/navigation/CategoryNavigation.tsx +3 -7
- package/src/config/compareConfig.ts +62 -21
- package/src/hooks/useActiveCategoryScrollDetection.ts +7 -7
|
@@ -172,27 +172,54 @@ function compareConfig(prev, next) {
|
|
|
172
172
|
var _prev$customEmojis, _next$customEmojis;
|
|
173
173
|
var prevCustomEmojis = (_prev$customEmojis = prev.customEmojis) != null ? _prev$customEmojis : [];
|
|
174
174
|
var nextCustomEmojis = (_next$customEmojis = next.customEmojis) != null ? _next$customEmojis : [];
|
|
175
|
-
return prev.open === next.open && prev.emojiVersion === next.emojiVersion && prev.reactionsDefaultOpen === next.reactionsDefaultOpen && prev.searchPlaceHolder === next.searchPlaceHolder && prev.searchPlaceholder === next.searchPlaceholder && prev.searchClearButtonLabel === next.searchClearButtonLabel && prev.defaultSkinTone === next.defaultSkinTone && prev.skinTonesDisabled === next.skinTonesDisabled && prev.autoFocusSearch === next.autoFocusSearch && prev.emojiStyle === next.emojiStyle && prev.theme === next.theme && prev.suggestedEmojisMode === next.suggestedEmojisMode && prev.lazyLoadEmojis === next.lazyLoadEmojis && prev.className === next.className && prev.height === next.height && prev.width === next.width && prev.style === next.style && prev.searchDisabled === next.searchDisabled && prev.skinTonePickerLocation === next.skinTonePickerLocation && prevCustomEmojis.length === nextCustomEmojis.length &&
|
|
175
|
+
return prev.open === next.open && prev.emojiVersion === next.emojiVersion && prev.reactionsDefaultOpen === next.reactionsDefaultOpen && prev.searchPlaceHolder === next.searchPlaceHolder && prev.searchPlaceholder === next.searchPlaceholder && prev.searchClearButtonLabel === next.searchClearButtonLabel && prev.defaultSkinTone === next.defaultSkinTone && prev.skinTonesDisabled === next.skinTonesDisabled && prev.autoFocusSearch === next.autoFocusSearch && prev.emojiStyle === next.emojiStyle && prev.theme === next.theme && prev.suggestedEmojisMode === next.suggestedEmojisMode && prev.lazyLoadEmojis === next.lazyLoadEmojis && prev.className === next.className && prev.height === next.height && prev.width === next.width && prev.style === next.style && prev.searchDisabled === next.searchDisabled && prev.skinTonePickerLocation === next.skinTonePickerLocation && prevCustomEmojis.length === nextCustomEmojis.length && customEmojisEqual(prevCustomEmojis, nextCustomEmojis) && categoriesEqual(prev.categories, next.categories) && prev.emojiData === next.emojiData;
|
|
176
176
|
}
|
|
177
177
|
/**
|
|
178
|
-
*
|
|
179
|
-
* swaps, which would leave merged categories, search, and
|
|
178
|
+
* Structural content equality for custom emojis. Length alone misses
|
|
179
|
+
* regroups and swaps, which would leave merged categories, search, and
|
|
180
|
+
* sections stale. Fields are compared element-wise (never serialized
|
|
181
|
+
* with delimiters) so user-controlled values cannot collide.
|
|
180
182
|
*/
|
|
181
|
-
function
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
183
|
+
function customEmojisEqual(prev, next) {
|
|
184
|
+
if (prev.length !== next.length) {
|
|
185
|
+
return false;
|
|
186
|
+
}
|
|
187
|
+
return prev.every(function (emoji, index) {
|
|
188
|
+
var _emoji$group, _other$group;
|
|
189
|
+
var other = next[index];
|
|
190
|
+
return emoji.id === other.id && ((_emoji$group = emoji.group) != null ? _emoji$group : '') === ((_other$group = other.group) != null ? _other$group : '') && emoji.imgUrl === other.imgUrl && emoji.names.length === other.names.length && emoji.names.every(function (name, nameIndex) {
|
|
191
|
+
return name === other.names[nameIndex];
|
|
192
|
+
});
|
|
193
|
+
});
|
|
186
194
|
}
|
|
187
195
|
/**
|
|
188
|
-
*
|
|
189
|
-
* group selection all flow into the merged
|
|
196
|
+
* Structural content equality for the categories input. Order, labels,
|
|
197
|
+
* group selection, and icon identity all flow into the merged
|
|
198
|
+
* configuration. Icons compare by reference: swapping one icon element
|
|
199
|
+
* for another must rebuild, while a stable reference stays cheap.
|
|
190
200
|
*/
|
|
191
|
-
function
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
201
|
+
function categoriesEqual(prev, next) {
|
|
202
|
+
var prevEntries = prev != null ? prev : [];
|
|
203
|
+
var nextEntries = next != null ? next : [];
|
|
204
|
+
if (prevEntries.length !== nextEntries.length) {
|
|
205
|
+
return false;
|
|
206
|
+
}
|
|
207
|
+
return prevEntries.every(function (entry, index) {
|
|
208
|
+
return categoryEntriesEqual(entry, nextEntries[index]);
|
|
209
|
+
});
|
|
210
|
+
}
|
|
211
|
+
/**
|
|
212
|
+
* One categories entry compared structurally. Icons compare by reference:
|
|
213
|
+
* swapping one icon element for another rebuilds, a stable reference stays
|
|
214
|
+
* cheap. Delimited serialization is avoided so user-controlled values
|
|
215
|
+
* cannot collide.
|
|
216
|
+
*/
|
|
217
|
+
function categoryEntriesEqual(entry, other) {
|
|
218
|
+
var _entry$group, _other$group2;
|
|
219
|
+
if (typeof entry === 'string' || typeof other === 'string') {
|
|
220
|
+
return entry === other;
|
|
221
|
+
}
|
|
222
|
+
return entry.category === other.category && entry.name === other.name && ((_entry$group = entry.group) != null ? _entry$group : '') === ((_other$group2 = other.group) != null ? _other$group2 : '') && entry.icon === other.icon;
|
|
196
223
|
}
|
|
197
224
|
|
|
198
225
|
var DEFAULT_REACTIONS = ['1f44d', '2764-fe0f', '1f603', '1f622', '1f64f', '1f44e', '1f621'];
|
|
@@ -30533,7 +30560,7 @@ function categoryNameFromDom($category) {
|
|
|
30533
30560
|
function useActiveCategoryScrollDetection(_ref) {
|
|
30534
30561
|
var setActiveCategory = _ref.setActiveCategory,
|
|
30535
30562
|
setVisibleCategories = _ref.setVisibleCategories,
|
|
30536
|
-
|
|
30563
|
+
categories = _ref.categories;
|
|
30537
30564
|
var BodyRef = useBodyRef();
|
|
30538
30565
|
useEffect(function () {
|
|
30539
30566
|
var visibleCategories = new Map();
|
|
@@ -30585,7 +30612,7 @@ function useActiveCategoryScrollDetection(_ref) {
|
|
|
30585
30612
|
return function () {
|
|
30586
30613
|
observer.disconnect();
|
|
30587
30614
|
};
|
|
30588
|
-
}, [BodyRef,
|
|
30615
|
+
}, [BodyRef, categories, setActiveCategory, setVisibleCategories]);
|
|
30589
30616
|
}
|
|
30590
30617
|
|
|
30591
30618
|
function useScrollCategoryIntoView() {
|
|
@@ -30979,16 +31006,12 @@ function CategoryNavigation() {
|
|
|
30979
31006
|
var _usePickerDataContext = usePickerDataContext(),
|
|
30980
31007
|
customGroups = _usePickerDataContext.customGroups,
|
|
30981
31008
|
emojiData = _usePickerDataContext.emojiData;
|
|
30982
|
-
//
|
|
30983
|
-
// added/removed
|
|
30984
|
-
// unless the effective category list changes.
|
|
30985
|
-
var categoryIdentitiesKey = categoriesConfig.map(function (entry) {
|
|
30986
|
-
return categoryIdFromCategoryConfig(entry);
|
|
30987
|
-
}).join('|');
|
|
31009
|
+
// The observer re-subscribes when the merged categories reference
|
|
31010
|
+
// changes (sections added/removed); the reference is stable otherwise.
|
|
30988
31011
|
useActiveCategoryScrollDetection({
|
|
30989
31012
|
setActiveCategory: setActiveCategory,
|
|
30990
31013
|
setVisibleCategories: setVisibleCategories,
|
|
30991
|
-
|
|
31014
|
+
categories: categoriesConfig
|
|
30992
31015
|
});
|
|
30993
31016
|
var visibleCategories = categoriesConfig.filter(function (categoryConfig) {
|
|
30994
31017
|
if (isCustomCategory(categoryConfig) && hideCustomCategory) {
|