emoji-picker-react 4.4.12 → 4.5.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.
- package/README.md +64 -26
- package/dist/components/emoji/BaseEmojiProps.d.ts +12 -0
- package/dist/components/emoji/ClickableEmojiButton.d.ts +13 -0
- package/dist/components/emoji/Emoji.d.ts +3 -13
- package/dist/components/emoji/EmojiImg.d.ts +10 -0
- package/dist/components/emoji/ExportedEmoji.d.ts +2 -2
- package/dist/components/emoji/NativeEmoji.d.ts +5 -0
- package/dist/components/emoji/ViewOnlyEmoji.d.ts +3 -0
- package/dist/config/categoryConfig.d.ts +4 -0
- package/dist/config/config.d.ts +3 -1
- package/dist/config/customEmojiConfig.d.ts +6 -0
- package/dist/config/useConfig.d.ts +2 -0
- package/dist/data/emojis.d.ts +1 -0
- package/dist/dataUtils/DataTypes.d.ts +16 -6
- package/dist/dataUtils/alphaNumericEmojiIndex.d.ts +1 -0
- package/dist/dataUtils/emojiSelectors.d.ts +5 -3
- package/dist/emoji-picker-react.cjs.development.css +2 -2
- package/dist/emoji-picker-react.cjs.development.js +284 -184
- 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 +294 -194
- package/dist/emoji-picker-react.esm.js.map +1 -1
- package/dist/hooks/preloadEmoji.d.ts +1 -1
- package/dist/hooks/useShouldHideCustomEmojis.d.ts +1 -0
- package/dist/typeRefinements/typeRefinements.d.ts +5 -0
- package/dist/types/exposedTypes.d.ts +1 -0
- package/package.json +5 -5
- package/src/components/context/PickerConfigContext.tsx +2 -1
- package/src/components/emoji/BaseEmojiProps.ts +13 -0
- package/src/components/emoji/ClickableEmojiButton.tsx +42 -0
- package/src/components/emoji/Emoji.css +2 -0
- package/src/components/emoji/Emoji.tsx +15 -125
- package/src/components/emoji/EmojiImg.tsx +31 -0
- package/src/components/emoji/ExportedEmoji.tsx +3 -2
- package/src/components/emoji/NativeEmoji.tsx +23 -0
- package/src/components/emoji/ViewOnlyEmoji.tsx +70 -0
- package/src/components/footer/Preview.tsx +1 -1
- package/src/components/navigation/CategoryNavigation.css +3 -0
- package/src/components/navigation/CategoryNavigation.tsx +8 -0
- package/src/config/categoryConfig.ts +10 -0
- package/src/config/config.ts +10 -2
- package/src/config/customEmojiConfig.ts +7 -0
- package/src/config/useConfig.ts +8 -2
- package/src/data/emojis.json +1 -1
- package/src/data/emojis.ts +1 -1
- package/src/dataUtils/DataTypes.ts +19 -6
- package/src/dataUtils/alphaNumericEmojiIndex.ts +16 -11
- package/src/dataUtils/emojiSelectors.ts +30 -11
- package/src/hooks/preloadEmoji.ts +1 -1
- package/src/hooks/useEmojiPreviewEvents.ts +0 -2
- package/src/hooks/useMouseDownHandlers.ts +1 -1
- package/src/hooks/useShouldHideCustomEmojis.ts +11 -0
- package/src/typeRefinements/typeRefinements.ts +17 -0
- package/src/types/exposedTypes.ts +1 -0
|
@@ -1,11 +1,24 @@
|
|
|
1
1
|
import emojis from '../data/emojis';
|
|
2
2
|
|
|
3
|
-
export
|
|
4
|
-
n
|
|
5
|
-
u
|
|
6
|
-
v
|
|
7
|
-
a
|
|
8
|
-
|
|
3
|
+
export enum EmojiProperties {
|
|
4
|
+
name = 'n',
|
|
5
|
+
unified = 'u',
|
|
6
|
+
variations = 'v',
|
|
7
|
+
added_in = 'a',
|
|
8
|
+
imgUrl = 'imgUrl'
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
export interface DataEmoji extends WithName {
|
|
12
|
+
[EmojiProperties.unified]: string;
|
|
13
|
+
[EmojiProperties.variations]?: string[];
|
|
14
|
+
[EmojiProperties.added_in]: string;
|
|
15
|
+
[EmojiProperties.imgUrl]?: string;
|
|
16
|
+
}
|
|
17
|
+
|
|
9
18
|
export type DataEmojis = DataEmoji[];
|
|
10
19
|
|
|
11
20
|
export type DataGroups = keyof typeof emojis;
|
|
21
|
+
|
|
22
|
+
export type WithName = {
|
|
23
|
+
[EmojiProperties.name]: string[];
|
|
24
|
+
};
|
|
@@ -5,19 +5,24 @@ export const alphaNumericEmojiIndex: BaseIndex = {};
|
|
|
5
5
|
|
|
6
6
|
setTimeout(() => {
|
|
7
7
|
allEmojis.reduce((searchIndex, emoji) => {
|
|
8
|
-
|
|
9
|
-
.flat()
|
|
10
|
-
.join('')
|
|
11
|
-
.replace(/[^a-zA-Z\d]/g, '')
|
|
12
|
-
.split('');
|
|
13
|
-
|
|
14
|
-
joinedNameString.forEach(char => {
|
|
15
|
-
searchIndex[char] = searchIndex[char] ?? {};
|
|
16
|
-
|
|
17
|
-
searchIndex[char][emojiUnified(emoji)] = emoji;
|
|
18
|
-
});
|
|
8
|
+
indexEmoji(emoji);
|
|
19
9
|
return searchIndex;
|
|
20
10
|
}, alphaNumericEmojiIndex as BaseIndex);
|
|
21
11
|
});
|
|
22
12
|
|
|
23
13
|
type BaseIndex = Record<string, Record<string, DataEmoji>>;
|
|
14
|
+
|
|
15
|
+
export function indexEmoji(emoji: DataEmoji): void {
|
|
16
|
+
const joinedNameString = emojiNames(emoji)
|
|
17
|
+
.flat()
|
|
18
|
+
.join('')
|
|
19
|
+
.toLowerCase()
|
|
20
|
+
.replace(/[^a-zA-Z\d]/g, '')
|
|
21
|
+
.split('');
|
|
22
|
+
|
|
23
|
+
joinedNameString.forEach(char => {
|
|
24
|
+
alphaNumericEmojiIndex[char] = alphaNumericEmojiIndex[char] ?? {};
|
|
25
|
+
|
|
26
|
+
alphaNumericEmojiIndex[char][emojiUnified(emoji)] = emoji;
|
|
27
|
+
});
|
|
28
|
+
}
|
|
@@ -1,21 +1,16 @@
|
|
|
1
1
|
import { Categories } from '../config/categoryConfig';
|
|
2
2
|
import { cdnUrl } from '../config/cdnUrls';
|
|
3
|
+
import { CustomEmoji } from '../config/customEmojiConfig';
|
|
3
4
|
import emojis from '../data/emojis';
|
|
4
5
|
import skinToneVariations, {
|
|
5
6
|
skinTonesMapped
|
|
6
7
|
} from '../data/skinToneVariations';
|
|
7
|
-
import { EmojiStyle, SkinTones } from '../types/exposedTypes';
|
|
8
|
+
import { EmojiStyle, SkinTones } from '../types/exposedTypes';
|
|
8
9
|
|
|
9
|
-
import { DataEmoji, DataEmojis } from './DataTypes';
|
|
10
|
+
import { DataEmoji, DataEmojis, EmojiProperties, WithName } from './DataTypes';
|
|
11
|
+
import { indexEmoji } from './alphaNumericEmojiIndex';
|
|
10
12
|
|
|
11
|
-
|
|
12
|
-
name = 'n',
|
|
13
|
-
unified = 'u',
|
|
14
|
-
variations = 'v',
|
|
15
|
-
added_in = 'a'
|
|
16
|
-
}
|
|
17
|
-
|
|
18
|
-
export function emojiNames(emoji: DataEmoji): string[] {
|
|
13
|
+
export function emojiNames(emoji: WithName): string[] {
|
|
19
14
|
return emoji[EmojiProperties.name] ?? [];
|
|
20
15
|
}
|
|
21
16
|
|
|
@@ -23,7 +18,7 @@ export function addedIn(emoji: DataEmoji): number {
|
|
|
23
18
|
return parseFloat(emoji[EmojiProperties.added_in]);
|
|
24
19
|
}
|
|
25
20
|
|
|
26
|
-
export function emojiName(emoji?:
|
|
21
|
+
export function emojiName(emoji?: WithName): string {
|
|
27
22
|
if (!emoji) {
|
|
28
23
|
return '';
|
|
29
24
|
}
|
|
@@ -97,6 +92,30 @@ export function emojiByUnified(unified?: string): DataEmoji | undefined {
|
|
|
97
92
|
|
|
98
93
|
export const allEmojis: DataEmojis = Object.values(emojis).flat();
|
|
99
94
|
|
|
95
|
+
export function addCustomEmojis(customEmojis: CustomEmoji[]): void {
|
|
96
|
+
customEmojis.forEach(emoji => {
|
|
97
|
+
const emojiData = customToRegularEmoji(emoji);
|
|
98
|
+
|
|
99
|
+
if (allEmojisByUnified[emojiData[EmojiProperties.unified]]) {
|
|
100
|
+
return;
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
allEmojis.push(emojiData);
|
|
104
|
+
allEmojisByUnified[emojiData[EmojiProperties.unified]] = emojiData;
|
|
105
|
+
emojis[Categories.CUSTOM].push(emojiData as never);
|
|
106
|
+
indexEmoji(emojiData);
|
|
107
|
+
});
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
function customToRegularEmoji(emoji: CustomEmoji): DataEmoji {
|
|
111
|
+
return {
|
|
112
|
+
[EmojiProperties.name]: emoji.names.map(name => name.toLowerCase()),
|
|
113
|
+
[EmojiProperties.unified]: emoji.id.toLowerCase(),
|
|
114
|
+
[EmojiProperties.added_in]: '0',
|
|
115
|
+
[EmojiProperties.imgUrl]: emoji.imgUrl
|
|
116
|
+
};
|
|
117
|
+
}
|
|
118
|
+
|
|
100
119
|
const allEmojisByUnified: {
|
|
101
120
|
[unified: string]: DataEmoji;
|
|
102
121
|
} = {};
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { GetEmojiUrl } from '../components/emoji/
|
|
1
|
+
import { GetEmojiUrl } from '../components/emoji/BaseEmojiProps';
|
|
2
2
|
import { DataEmoji } from '../dataUtils/DataTypes';
|
|
3
3
|
import { emojiUnified, emojiVariations } from '../dataUtils/emojiSelectors';
|
|
4
4
|
import { EmojiStyle } from '../types/exposedTypes';
|
|
@@ -42,7 +42,6 @@ export function useEmojiPreviewEvents(
|
|
|
42
42
|
});
|
|
43
43
|
bodyRef?.addEventListener('blur', onLeave, true);
|
|
44
44
|
|
|
45
|
-
|
|
46
45
|
function onEnter(e: FocusEvent) {
|
|
47
46
|
const button = buttonFromTarget(e.target as HTMLElement);
|
|
48
47
|
|
|
@@ -91,7 +90,6 @@ export function useEmojiPreviewEvents(
|
|
|
91
90
|
}
|
|
92
91
|
}
|
|
93
92
|
|
|
94
|
-
|
|
95
93
|
return () => {
|
|
96
94
|
bodyRef?.removeEventListener('mouseover', onMouseOver);
|
|
97
95
|
bodyRef?.removeEventListener('mouseout', onLeave);
|
|
@@ -12,7 +12,6 @@ import {
|
|
|
12
12
|
useEmojiVariationPickerState,
|
|
13
13
|
useUpdateSuggested,
|
|
14
14
|
} from '../components/context/PickerContext';
|
|
15
|
-
import { GetEmojiUrl } from '../components/emoji/Emoji';
|
|
16
15
|
import {
|
|
17
16
|
useGetEmojiUrlConfig,
|
|
18
17
|
useOnEmojiClickConfig,
|
|
@@ -30,6 +29,7 @@ import { EmojiClickData, EmojiStyle, SkinTones } from '../types/exposedTypes';
|
|
|
30
29
|
|
|
31
30
|
import { useCloseAllOpenToggles } from './useCloseAllOpenToggles';
|
|
32
31
|
import useSetVariationPicker from './useSetVariationPicker';
|
|
32
|
+
import { GetEmojiUrl } from '../components/emoji/BaseEmojiProps';
|
|
33
33
|
|
|
34
34
|
export function useMouseDownHandlers(
|
|
35
35
|
BodyRef: React.MutableRefObject<NullableElement>
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { useCustomEmojisConfig } from '../config/useConfig';
|
|
2
|
+
|
|
3
|
+
export function useShouldHideCustomEmojis() {
|
|
4
|
+
const customCategoryConfig = useCustomEmojisConfig();
|
|
5
|
+
|
|
6
|
+
if (!customCategoryConfig) {
|
|
7
|
+
return false;
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
return customCategoryConfig.length === 0;
|
|
11
|
+
}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import {
|
|
2
|
+
Categories,
|
|
3
|
+
CategoryConfig,
|
|
4
|
+
CustomCategoryConfig
|
|
5
|
+
} from '../config/categoryConfig';
|
|
6
|
+
import { CustomEmoji } from '../config/customEmojiConfig';
|
|
7
|
+
import { DataEmoji } from '../dataUtils/DataTypes';
|
|
8
|
+
|
|
9
|
+
export function isCustomCategory(
|
|
10
|
+
category: CategoryConfig | CustomCategoryConfig
|
|
11
|
+
): category is CustomCategoryConfig {
|
|
12
|
+
return category.category === Categories.CUSTOM;
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
export function isCustomEmoji(emoji: Partial<DataEmoji>): emoji is CustomEmoji {
|
|
16
|
+
return emoji.imgUrl !== undefined;
|
|
17
|
+
}
|