Spaces:
Running
Running
| import Picker from "@emoji-mart/react"; | |
| import data from "@emoji-mart/data"; | |
| import { FC } from "react"; | |
| import { useMediaQuery } from "react-responsive"; | |
| const emojis = (data as unknown as any).emojis as { [key: string]: EmojiSkin }; | |
| export interface EmojiData { | |
| id: string; | |
| name: string; | |
| native: string; | |
| unified: string; | |
| keywords: string[]; | |
| shortcodes: string; | |
| skin: number; | |
| aliases: string[]; | |
| } | |
| const exceptEmojis = [ | |
| "bat", | |
| "feet", | |
| "coral", | |
| "snail", | |
| "bug", | |
| "ant", | |
| "bee", | |
| "beetle", | |
| "ladybug", | |
| "cricket", | |
| "cockroach", | |
| "spider", | |
| "scorpion", | |
| "mosquito", | |
| "fly", | |
| "worm", | |
| "microbe", | |
| "gorilla", | |
| "orangutan", | |
| "tiger2", | |
| "leopard", | |
| "zebra_face", | |
| "pig_nose", | |
| "camel", | |
| "black_cat", | |
| "water_buffalo", | |
| "rat", | |
| "spider_web", | |
| "service_dog", | |
| "mammoth", | |
| "frog", | |
| "crocodile", | |
| "lizard", | |
| "snake", | |
| "t-rex", | |
| "dragon", | |
| "empty_nest", | |
| "octopus", | |
| "ox", | |
| "wolf", | |
| "headstone", | |
| "moyai", | |
| "new_moon", | |
| "new_moon_with_face", | |
| "shrimp", | |
| "lobster", | |
| "fried_shrimp", | |
| "coffin", | |
| "drop_of_blood", | |
| "pinata", | |
| "performing_arts", | |
| "rock", | |
| "clubs", | |
| "chess_pawn", | |
| "spades", | |
| "knot", | |
| "bathtub", | |
| "shower", | |
| "white_flower", | |
| "hammer", | |
| "nazar_amulet", | |
| "hamsa", | |
| "hammer_and_wrench", | |
| "squid", | |
| "crab", | |
| "smoking", | |
| "dna", | |
| "musical_score", | |
| "musical_note", | |
| "notes", | |
| "dark_sunglasses", | |
| "kaaba", | |
| "old_key", | |
| "bikini", | |
| "one-piece_swimsuit", | |
| "sari", | |
| "sloth", | |
| "x-ray", | |
| ]; | |
| interface EmojiSkin { | |
| id: string; | |
| name: string; | |
| keywords: string[]; | |
| skins: { native: string; shortcodes: string; unified: string }[]; | |
| } | |
| const categoryIcons = { | |
| categoryIcons: { | |
| "new-people": { | |
| svg: '<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 640 512"><path d="M57.89 397.2c-6.262-8.616-16.02-13.19-25.92-13.19c-23.33 0-31.98 20.68-31.98 32.03c0 6.522 1.987 13.1 6.115 18.78l46.52 64C58.89 507.4 68.64 512 78.55 512c23.29 0 31.97-20.66 31.97-32.03c0-6.522-1.988-13.1-6.115-18.78L57.89 397.2zM496.1 352c-44.13 0-79.72 35.75-79.72 80s35.59 80 79.72 80s79.91-35.75 79.91-80S540.2 352 496.1 352zM640 99.38c0-13.61-4.133-27.34-12.72-39.2l-23.63-32.5c-13.44-18.5-33.77-27.68-54.12-27.68c-13.89 0-27.79 4.281-39.51 12.8L307.8 159.7C262.2 192.8 220.4 230.9 183.4 273.4c-24.22 27.88-59.18 63.99-103.5 99.63l56.34 77.52c53.79-35.39 99.15-55.3 127.1-67.27c51.88-22 101.3-49.87 146.9-82.1l202.3-146.7C630.5 140.4 640 120 640 99.38z"/></svg>', | |
| }, | |
| }, | |
| }; | |
| const custom = [ | |
| { | |
| id: "recommend", | |
| name: "Recommend", | |
| emojis: [ | |
| emojis["baby_chick"], | |
| emojis["hatched_chick"], | |
| emojis["dog"], | |
| emojis["fox_face"], | |
| emojis["lion_face"], | |
| emojis["tiger"], | |
| emojis["hamster"], | |
| emojis["panda_face"], | |
| emojis["rabbit"], | |
| emojis["polar_bear"], | |
| emojis["tangerine"], | |
| emojis["watermelon"], | |
| emojis["pineapple"], | |
| emojis["beer"], | |
| emojis["curry"], | |
| emojis["cake"], | |
| emojis["snow_capped_mountain"], | |
| emojis["volcano"], | |
| emojis["bridge_at_night"], | |
| emojis["kiwifruit"], | |
| emojis["stadium"], | |
| emojis["foggy"], | |
| emojis["night_with_stars"], | |
| emojis["cityscape"], | |
| emojis["sunrise_over_mountains"], | |
| emojis["sunrise"], | |
| emojis["city_sunset"], | |
| emojis["city_sunrise"], | |
| ], | |
| }, | |
| { | |
| id: "new-people", | |
| name: "People", | |
| emojis: [ | |
| emojis["child"], | |
| emojis["boy"], | |
| emojis["girl"], | |
| emojis["adult"], | |
| emojis["person_with_blond_hair"], | |
| emojis["man"], | |
| emojis["bearded_person"], | |
| emojis["man_with_beard"], | |
| emojis["woman_with_beard"], | |
| emojis["red_haired_man"], | |
| emojis["curly_haired_man"], | |
| emojis["white_haired_man"], | |
| emojis["bald_man"], | |
| emojis["woman"], | |
| emojis["red_haired_woman"], | |
| emojis["red_haired_person"], | |
| emojis["curly_haired_woman"], | |
| emojis["curly_haired_person"], | |
| emojis["white_haired_woman"], | |
| emojis["white_haired_person"], | |
| emojis["bald_woman"], | |
| emojis["bald_person"], | |
| emojis["blond-haired-woman"], | |
| emojis["blond-haired-man"], | |
| emojis["older_adult"], | |
| emojis["older_man"], | |
| emojis["older_woman"], | |
| emojis["person_frowning"], | |
| emojis["man-frowning"], | |
| emojis["woman-frowning"], | |
| emojis["person_with_pouting_face"], | |
| emojis["man-pouting"], | |
| emojis["woman-pouting"], | |
| emojis["health_worker"], | |
| emojis["male-doctor"], | |
| emojis["female-doctor"], | |
| emojis["student"], | |
| emojis["male-student"], | |
| emojis["female-student"], | |
| emojis["teacher"], | |
| emojis["male-teacher"], | |
| emojis["female-teacher"], | |
| emojis["judge"], | |
| emojis["male-judge"], | |
| emojis["female-judge"], | |
| emojis["farmer"], | |
| emojis["male-farmer"], | |
| emojis["female-farmer"], | |
| emojis["cook"], | |
| emojis["male-cook"], | |
| emojis["female-cook"], | |
| emojis["mechanic"], | |
| emojis["male-mechanic"], | |
| emojis["female-mechanic"], | |
| emojis["office_worker"], | |
| emojis["male-office-worker"], | |
| emojis["female-office-worker"], | |
| emojis["scientist"], | |
| emojis["male-scientist"], | |
| emojis["female-scientist"], | |
| emojis["technologist"], | |
| emojis["male-technologist"], | |
| emojis["female-technologist"], | |
| emojis["artist"], | |
| emojis["male-artist"], | |
| emojis["female-artist"], | |
| emojis["astronaut"], | |
| emojis["male-astronaut"], | |
| emojis["female-astronaut"], | |
| emojis["sleuth_or_spy"], | |
| emojis["male-detective"], | |
| emojis["female-detective"], | |
| emojis["construction_worker"], | |
| emojis["male-construction-worker"], | |
| emojis["female-construction-worker"], | |
| emojis["person_with_crown"], | |
| emojis["prince"], | |
| emojis["princess"], | |
| emojis["person_in_tuxedo"], | |
| emojis["man_in_tuxedo"], | |
| emojis["woman_in_tuxedo"], | |
| emojis["bride_with_veil"], | |
| emojis["man_with_veil"], | |
| emojis["woman_with_veil"], | |
| ], | |
| }, | |
| ]; | |
| export const EmojiSelector: FC<{ onSelect: (e: EmojiData) => void }> = ({ | |
| onSelect, | |
| }) => { | |
| const isSmallScreen = useMediaQuery({ query: "(max-width: 768px)" }); | |
| return ( | |
| <Picker | |
| exceptEmojis={exceptEmojis} | |
| dynamicWidth={true} | |
| custom={custom} | |
| categories={[ | |
| "recommend", | |
| "new-people", | |
| "nature", | |
| "foods", | |
| "activity", | |
| "places", | |
| "objects", | |
| ]} | |
| theme="dark" | |
| categoryIcons={categoryIcons} | |
| searchPosition={isSmallScreen ? "none" : "bottom"} | |
| navPosition={isSmallScreen ? "none" : "top"} | |
| previewPosition={isSmallScreen ? "none" : "bottom"} | |
| data={data} | |
| onEmojiSelect={onSelect} | |
| /> | |
| ); | |
| }; | |