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