diff --git a/CustomKeyboard/KeyboardViewController.m b/CustomKeyboard/KeyboardViewController.m index 3c0389f..f1473e6 100644 --- a/CustomKeyboard/KeyboardViewController.m +++ b/CustomKeyboard/KeyboardViewController.m @@ -231,6 +231,15 @@ static void KBSkinInstallNotificationCallback(CFNotificationCenterRef center, [self showSettingView:YES]; } +- (void)keyBoardMainView:(KBKeyBoardMainView *)keyBoardMainView didSelectEmoji:(NSString *)emoji { + if (emoji.length == 0) { return; } + [self.textDocumentProxy insertText:emoji]; +} + +- (void)keyBoardMainViewDidTapEmojiSearch:(KBKeyBoardMainView *)keyBoardMainView { + [KBHUD showInfo:KBLocalized(@"Search coming soon")]; +} + // MARK: - KBFunctionViewDelegate - (void)functionView:(KBFunctionView *)functionView didTapToolActionAtIndex:(NSInteger)index { // 需求:当 index == 0 时,切回键盘主视图 diff --git a/CustomKeyboard/Manager/KBEmojiDataProvider.h b/CustomKeyboard/Manager/KBEmojiDataProvider.h new file mode 100644 index 0000000..fdae80f --- /dev/null +++ b/CustomKeyboard/Manager/KBEmojiDataProvider.h @@ -0,0 +1,46 @@ +// +// KBEmojiDataProvider.h +// CustomKeyboard +// + +#import + +NS_ASSUME_NONNULL_BEGIN + +FOUNDATION_EXPORT NSString * const KBEmojiRecentsDidChangeNotification; + +@class KBEmojiCategory, KBEmojiItem; + +@interface KBEmojiItem : NSObject +@property (nonatomic, copy, readonly) NSString *value; +@property (nonatomic, copy, readonly) NSString *name; +- (instancetype)initWithValue:(NSString *)value name:(NSString *)name; +@end + +@interface KBEmojiCategory : NSObject +@property (nonatomic, copy, readonly) NSString *identifier; +@property (nonatomic, copy, readonly) NSString *displayTitle; +@property (nonatomic, copy, readonly) NSString *iconSymbol; +@property (nonatomic, assign, readonly, getter=isDynamic) BOOL dynamic; +@property (nonatomic, copy, readonly) NSArray *items; +@end + +@interface KBEmojiDataProvider : NSObject + ++ (instancetype)shared; + +/// 所有分类(按系统顺序),包含“常用”。 +@property (nonatomic, copy, readonly) NSArray *categories; + +/// 记录一次 emoji 选择,并刷新“常用”分类。 +- (void)recordEmojiSelection:(NSString *)emoji; + +/// 重新加载 JSON(若首次调用)。 +- (void)reloadIfNeeded; + +/// 更新当前语言对应的分类标题。 +- (void)refreshLocalizedTitles; + +@end + +NS_ASSUME_NONNULL_END diff --git a/CustomKeyboard/Manager/KBEmojiDataProvider.m b/CustomKeyboard/Manager/KBEmojiDataProvider.m new file mode 100644 index 0000000..56f34b9 --- /dev/null +++ b/CustomKeyboard/Manager/KBEmojiDataProvider.m @@ -0,0 +1,270 @@ +// +// KBEmojiDataProvider.m +// CustomKeyboard +// + +#import "KBEmojiDataProvider.h" +#import "KBLocalizationManager.h" +#import "KBConfig.h" + +NSString * const KBEmojiRecentsDidChangeNotification = @"KBEmojiRecentsDidChangeNotification"; + +static NSString * const kKBEmojiJSONFileName = @"emoji_categories"; +static NSString * const kKBEmojiRecentsStoreKey = @"KBEmojiRecentEmojis"; +static NSString * const kKBEmojiRecentsCategoryId = @"recents"; +static const NSUInteger kKBEmojiRecentsLimit = 32; + +#pragma mark - Model Implementations + +@interface KBEmojiItem () +@property (nonatomic, copy, readwrite) NSString *value; +@property (nonatomic, copy, readwrite) NSString *name; +@end + +@implementation KBEmojiItem + +- (instancetype)initWithValue:(NSString *)value name:(NSString *)name { + if (self = [super init]) { + _value = [value copy]; + _name = [name copy]; + } + return self; +} + +- (id)copyWithZone:(NSZone *)zone { + KBEmojiItem *item = [[[self class] allocWithZone:zone] initWithValue:self.value name:self.name]; + return item; +} + +@end + +@interface KBEmojiCategory () +@property (nonatomic, copy, readwrite) NSString *identifier; +@property (nonatomic, copy) NSDictionary *titleMap; +@property (nonatomic, copy, readwrite) NSString *displayTitle; +@property (nonatomic, copy, readwrite) NSString *iconSymbol; +@property (nonatomic, assign, readwrite, getter=isDynamic) BOOL dynamic; +@property (nonatomic, copy, readwrite) NSArray *items; +@end + +@implementation KBEmojiCategory + +- (void)refreshDisplayTitleForLanguage:(NSString *)lang { + if (lang.length == 0) { + lang = KBLanguageCodeEnglish; + } + NSString *title = self.titleMap[lang]; + if (title.length == 0) { + if ([lang.lowercaseString hasPrefix:@"zh"]) { + title = self.titleMap[@"zh-Hans"] ?: self.titleMap[@"zh-hans"]; + } + } + if (title.length == 0) { + title = self.titleMap[@"en"]; + } + if (title.length == 0) { + title = self.titleMap.allValues.firstObject; + } + self.displayTitle = title ?: @""; +} + +@end + +#pragma mark - Data Provider + +@interface KBEmojiDataProvider () +@property (nonatomic, copy) NSArray *categoriesInternal; +@property (nonatomic, strong) NSMutableDictionary *itemLookup; +@property (nonatomic, strong) NSMutableOrderedSet *recentValues; +@end + +@implementation KBEmojiDataProvider + ++ (instancetype)shared { + static KBEmojiDataProvider *m; + static dispatch_once_t onceToken; + dispatch_once(&onceToken, ^{ + m = [KBEmojiDataProvider new]; + [[NSNotificationCenter defaultCenter] addObserver:m + selector:@selector(onLocalizationChanged:) + name:KBLocalizationDidChangeNotification + object:nil]; + }); + return m; +} + +- (void)dealloc { + [[NSNotificationCenter defaultCenter] removeObserver:self]; +} + +- (NSArray *)categories { + [self reloadIfNeeded]; + return self.categoriesInternal ?: @[]; +} + +- (void)reloadIfNeeded { + if (self.categoriesInternal.count > 0) { return; } + [self loadEmojiJSON]; + [self refreshLocalizedTitles]; + [self loadRecentsFromStore]; + [self rebuildRecentsCategory]; +} + +- (void)loadEmojiJSON { + NSString *path = [[NSBundle mainBundle] pathForResource:kKBEmojiJSONFileName ofType:@"json"]; + if (path.length == 0) { + return; + } + NSData *data = [NSData dataWithContentsOfFile:path]; + if (data.length == 0) { return; } + + NSError *err = nil; + NSDictionary *root = [NSJSONSerialization JSONObjectWithData:data options:0 error:&err]; + if (!root || err) { + NSLog(@"[Emoji] failed to parse json: %@", err); + return; + } + NSArray *catArray = root[@"categories"]; + if (![catArray isKindOfClass:NSArray.class]) { + return; + } + + NSMutableArray *tmpCats = [NSMutableArray arrayWithCapacity:catArray.count]; + self.itemLookup = [NSMutableDictionary dictionary]; + + for (NSDictionary *catDict in catArray) { + if (![catDict isKindOfClass:NSDictionary.class]) continue; + KBEmojiCategory *category = [KBEmojiCategory new]; + category.identifier = catDict[@"id"] ?: @""; + NSDictionary *titleMap = catDict[@"title"]; + if ([titleMap isKindOfClass:NSDictionary.class]) { + category.titleMap = titleMap; + } else { + category.titleMap = @{}; + } + NSString *iconKey = catDict[@"icon"]; + category.iconSymbol = [self symbolForIconKey:iconKey]; + NSString *type = catDict[@"type"]; + category.dynamic = [type.lowercaseString isEqualToString:@"dynamic"]; + + NSArray *emojiArray = catDict[@"emojis"]; + NSMutableArray *items = [NSMutableArray arrayWithCapacity:[emojiArray count]]; + if ([emojiArray isKindOfClass:NSArray.class]) { + for (NSDictionary *emojiDict in emojiArray) { + if (![emojiDict isKindOfClass:NSDictionary.class]) continue; + NSString *value = emojiDict[@"value"]; + if (value.length == 0) continue; + NSString *name = emojiDict[@"name"] ?: @""; + KBEmojiItem *item = [[KBEmojiItem alloc] initWithValue:value name:name]; + [items addObject:item]; + if (value.length > 0) { + self.itemLookup[value] = item; + } + } + } + category.items = items.copy; + [tmpCats addObject:category]; + } + self.categoriesInternal = tmpCats.copy; +} + +- (NSString *)symbolForIconKey:(NSString *)key { + static NSDictionary *map; + static dispatch_once_t onceToken; + dispatch_once(&onceToken, ^{ + map = @{ + @"emoji_tab_recent": @"🕘", + @"emoji_tab_people": @"😊", + @"emoji_tab_nature": @"🌿", + @"emoji_tab_food": @"🍔", + @"emoji_tab_activity": @"🏀", + @"emoji_tab_travel": @"✈️", + @"emoji_tab_objects": @"💡", + @"emoji_tab_symbols": @"♾", + @"emoji_tab_flags": @"🏳️" + }; + }); + NSString *symbol = map[key]; + return symbol.length ? symbol : @"●"; +} + +- (void)refreshLocalizedTitles { + NSString *lang = [KBLocalizationManager shared].currentLanguageCode ?: KBLanguageCodeEnglish; + for (KBEmojiCategory *cat in self.categoriesInternal) { + [cat refreshDisplayTitleForLanguage:lang]; + } +} + +- (void)onLocalizationChanged:(__unused NSNotification *)note { + [self refreshLocalizedTitles]; + [[NSNotificationCenter defaultCenter] postNotificationName:KBEmojiRecentsDidChangeNotification object:nil]; +} + +- (void)recordEmojiSelection:(NSString *)emoji { + if (emoji.length == 0) return; + [self reloadIfNeeded]; + if (!self.recentValues) { + self.recentValues = [NSMutableOrderedSet orderedSet]; + } + [self.recentValues removeObject:emoji]; + [self.recentValues insertObject:emoji atIndex:0]; + while (self.recentValues.count > kKBEmojiRecentsLimit) { + [self.recentValues removeObjectAtIndex:self.recentValues.count - 1]; + } + [self saveRecentsToStore]; + [self rebuildRecentsCategory]; + [[NSNotificationCenter defaultCenter] postNotificationName:KBEmojiRecentsDidChangeNotification object:nil]; +} + +- (void)loadRecentsFromStore { + NSUserDefaults *defs = [[NSUserDefaults alloc] initWithSuiteName:AppGroup]; + if (!defs) { defs = NSUserDefaults.standardUserDefaults; } + NSArray *stored = [defs objectForKey:kKBEmojiRecentsStoreKey]; + NSMutableOrderedSet *set = [NSMutableOrderedSet orderedSet]; + if ([stored isKindOfClass:NSArray.class]) { + for (id obj in stored) { + if (![obj isKindOfClass:NSString.class]) continue; + NSString *str = (NSString *)obj; + if (str.length == 0) continue; + [set addObject:str]; + if (set.count >= kKBEmojiRecentsLimit) break; + } + } + self.recentValues = set; +} + +- (void)saveRecentsToStore { + if (!self.recentValues) return; + NSArray *arr = self.recentValues.array; + NSUserDefaults *defs = [[NSUserDefaults alloc] initWithSuiteName:AppGroup]; + if (!defs) { defs = NSUserDefaults.standardUserDefaults; } + [defs setObject:arr forKey:kKBEmojiRecentsStoreKey]; + [defs synchronize]; +} + +- (void)rebuildRecentsCategory { + KBEmojiCategory *recent = [self categoryForIdentifier:kKBEmojiRecentsCategoryId]; + if (!recent) return; + NSArray *values = self.recentValues.array ?: @[]; + NSMutableArray *items = [NSMutableArray arrayWithCapacity:values.count]; + for (NSString *value in values) { + KBEmojiItem *item = self.itemLookup[value]; + if (!item) { + item = [[KBEmojiItem alloc] initWithValue:value name:@""]; + } + [items addObject:item]; + } + recent.items = items.copy; +} + +- (KBEmojiCategory *)categoryForIdentifier:(NSString *)identifier { + if (identifier.length == 0) return nil; + for (KBEmojiCategory *cat in self.categoriesInternal) { + if ([cat.identifier isEqualToString:identifier]) { + return cat; + } + } + return nil; +} + +@end diff --git a/CustomKeyboard/Model/KBKey.h b/CustomKeyboard/Model/KBKey.h index a685dc4..39f8a6c 100644 --- a/CustomKeyboard/Model/KBKey.h +++ b/CustomKeyboard/Model/KBKey.h @@ -20,6 +20,8 @@ typedef NS_ENUM(NSInteger, KBKeyType) { KBKeyTypeSymbolsToggle // 数字面板内的“#+=/123”切换 }; +FOUNDATION_EXPORT NSString * const KBKeyIdentifierEmojiPanel; + /// 字母键的大小写变体标记(非字母键使用 KBKeyCaseVariantNone) typedef NS_ENUM(NSInteger, KBKeyCaseVariant) { KBKeyCaseVariantNone = 0, diff --git a/CustomKeyboard/Model/KBKey.m b/CustomKeyboard/Model/KBKey.m index d49a622..1ac11a2 100644 --- a/CustomKeyboard/Model/KBKey.m +++ b/CustomKeyboard/Model/KBKey.m @@ -5,6 +5,8 @@ #import "KBKey.h" +NSString * const KBKeyIdentifierEmojiPanel = @"emoji_panel"; + @implementation KBKey + (instancetype)keyWithTitle:(NSString *)title output:(NSString *)output { diff --git a/CustomKeyboard/Resource/emoji_categories.json b/CustomKeyboard/Resource/emoji_categories.json new file mode 100644 index 0000000..8d351b6 --- /dev/null +++ b/CustomKeyboard/Resource/emoji_categories.json @@ -0,0 +1,14802 @@ +{ + "info": { + "source": "CoreEmoji AppleName.strings", + "generatedAt": "2025-12-12T13:28:17.099851+00:00", + "coreEmojiVersion": "239.218", + "totalEmojis": 1908 + }, + "categories": [ + { + "id": "recents", + "title": { + "en": "Frequently Used", + "zh-Hans": "常用" + }, + "icon": "emoji_tab_recent", + "type": "dynamic", + "emojis": [] + }, + { + "id": "people", + "title": { + "en": "Smileys & People", + "zh-Hans": "表情符号与人物" + }, + "icon": "emoji_tab_people", + "type": "static", + "emojis": [ + { + "value": "☠️", + "name": "skull and crossbones", + "codePoints": [ + "U+2620", + "U+FE0F" + ] + }, + { + "value": "☹️", + "name": "frowning face", + "codePoints": [ + "U+2639", + "U+FE0F" + ] + }, + { + "value": "☺️", + "name": "smiling face", + "codePoints": [ + "U+263A", + "U+FE0F" + ] + }, + { + "value": "♥️", + "name": "hearts suit", + "codePoints": [ + "U+2665", + "U+FE0F" + ] + }, + { + "value": "✋", + "name": "raised hand", + "codePoints": [ + "U+270B" + ] + }, + { + "value": "❣️", + "name": "red heart as an exclamation mark", + "codePoints": [ + "U+2763", + "U+FE0F" + ] + }, + { + "value": "❤️", + "name": "red heart", + "codePoints": [ + "U+2764", + "U+FE0F" + ] + }, + { + "value": "❤️‍🔥", + "name": "heart on fire", + "codePoints": [ + "U+2764", + "U+FE0F", + "U+200D", + "U+1F525" + ] + }, + { + "value": "❤️‍🩹", + "name": "mending heart", + "codePoints": [ + "U+2764", + "U+FE0F", + "U+200D", + "U+1FA79" + ] + }, + { + "value": "🌬️", + "name": "wind blowing face", + "codePoints": [ + "U+1F32C", + "U+FE0F" + ] + }, + { + "value": "🍳", + "name": "cooking", + "codePoints": [ + "U+1F373" + ] + }, + { + "value": "🎨", + "name": "artist palette", + "codePoints": [ + "U+1F3A8" + ] + }, + { + "value": "👅", + "name": "tongue", + "codePoints": [ + "U+1F445" + ] + }, + { + "value": "👆", + "name": "backhand index finger pointing up", + "codePoints": [ + "U+1F446" + ] + }, + { + "value": "👇", + "name": "backhand index finger pointing down", + "codePoints": [ + "U+1F447" + ] + }, + { + "value": "👈", + "name": "backhand index finger pointing left", + "codePoints": [ + "U+1F448" + ] + }, + { + "value": "👉", + "name": "backhand index finger pointing right", + "codePoints": [ + "U+1F449" + ] + }, + { + "value": "👋", + "name": "waving hand", + "codePoints": [ + "U+1F44B" + ] + }, + { + "value": "👍", + "name": "thumbs up", + "codePoints": [ + "U+1F44D" + ] + }, + { + "value": "👎", + "name": "thumbs down", + "codePoints": [ + "U+1F44E" + ] + }, + { + "value": "👤", + "name": "silhouette of person", + "codePoints": [ + "U+1F464" + ] + }, + { + "value": "👥", + "name": "silhouette of two people", + "codePoints": [ + "U+1F465" + ] + }, + { + "value": "👦", + "name": "boy", + "codePoints": [ + "U+1F466" + ] + }, + { + "value": "👧", + "name": "girl", + "codePoints": [ + "U+1F467" + ] + }, + { + "value": "👨", + "name": "man", + "codePoints": [ + "U+1F468" + ] + }, + { + "value": "👨‍⚕️", + "name": "man health worker", + "codePoints": [ + "U+1F468", + "U+200D", + "U+2695", + "U+FE0F" + ] + }, + { + "value": "👨‍⚖️", + "name": "man judge", + "codePoints": [ + "U+1F468", + "U+200D", + "U+2696", + "U+FE0F" + ] + }, + { + "value": "👨‍✈️", + "name": "man pilot", + "codePoints": [ + "U+1F468", + "U+200D", + "U+2708", + "U+FE0F" + ] + }, + { + "value": "👨‍❤️‍👨", + "name": "two men with heart", + "codePoints": [ + "U+1F468", + "U+200D", + "U+2764", + "U+FE0F", + "U+200D", + "U+1F468" + ] + }, + { + "value": "👨‍❤️‍💋‍👨", + "name": "two men kissing", + "codePoints": [ + "U+1F468", + "U+200D", + "U+2764", + "U+FE0F", + "U+200D", + "U+1F48B", + "U+200D", + "U+1F468" + ] + }, + { + "value": "👨‍🌾", + "name": "man farmer", + "codePoints": [ + "U+1F468", + "U+200D", + "U+1F33E" + ] + }, + { + "value": "👨‍🍳", + "name": "man cook", + "codePoints": [ + "U+1F468", + "U+200D", + "U+1F373" + ] + }, + { + "value": "👨‍🍼", + "name": "man feeding baby", + "codePoints": [ + "U+1F468", + "U+200D", + "U+1F37C" + ] + }, + { + "value": "👨‍🎓", + "name": "man student", + "codePoints": [ + "U+1F468", + "U+200D", + "U+1F393" + ] + }, + { + "value": "👨‍🎤", + "name": "man singer", + "codePoints": [ + "U+1F468", + "U+200D", + "U+1F3A4" + ] + }, + { + "value": "👨‍🎨", + "name": "man artist", + "codePoints": [ + "U+1F468", + "U+200D", + "U+1F3A8" + ] + }, + { + "value": "👨‍👦", + "name": "family with father and son", + "codePoints": [ + "U+1F468", + "U+200D", + "U+1F466" + ] + }, + { + "value": "👨‍👦‍👦", + "name": "family with father and two sons", + "codePoints": [ + "U+1F468", + "U+200D", + "U+1F466", + "U+200D", + "U+1F466" + ] + }, + { + "value": "👨‍👧", + "name": "family with father and daughter", + "codePoints": [ + "U+1F468", + "U+200D", + "U+1F467" + ] + }, + { + "value": "👨‍👧‍👦", + "name": "family with father, son and daughter", + "codePoints": [ + "U+1F468", + "U+200D", + "U+1F467", + "U+200D", + "U+1F466" + ] + }, + { + "value": "👨‍👧‍👧", + "name": "family with father and two daughters", + "codePoints": [ + "U+1F468", + "U+200D", + "U+1F467", + "U+200D", + "U+1F467" + ] + }, + { + "value": "👨‍👨‍👦", + "name": "family with two fathers and son", + "codePoints": [ + "U+1F468", + "U+200D", + "U+1F468", + "U+200D", + "U+1F466" + ] + }, + { + "value": "👨‍👨‍👦‍👦", + "name": "family with two fathers and two sons", + "codePoints": [ + "U+1F468", + "U+200D", + "U+1F468", + "U+200D", + "U+1F466", + "U+200D", + "U+1F466" + ] + }, + { + "value": "👨‍👨‍👧", + "name": "family with two fathers and daughter", + "codePoints": [ + "U+1F468", + "U+200D", + "U+1F468", + "U+200D", + "U+1F467" + ] + }, + { + "value": "👨‍👨‍👧‍👦", + "name": "family with two fathers, son and daughter", + "codePoints": [ + "U+1F468", + "U+200D", + "U+1F468", + "U+200D", + "U+1F467", + "U+200D", + "U+1F466" + ] + }, + { + "value": "👨‍👨‍👧‍👧", + "name": "family with two fathers and two daughters", + "codePoints": [ + "U+1F468", + "U+200D", + "U+1F468", + "U+200D", + "U+1F467", + "U+200D", + "U+1F467" + ] + }, + { + "value": "👨‍👩‍👦", + "name": "family with mother, father and son", + "codePoints": [ + "U+1F468", + "U+200D", + "U+1F469", + "U+200D", + "U+1F466" + ] + }, + { + "value": "👨‍👩‍👦‍👦", + "name": "family with mother, father and two sons", + "codePoints": [ + "U+1F468", + "U+200D", + "U+1F469", + "U+200D", + "U+1F466", + "U+200D", + "U+1F466" + ] + }, + { + "value": "👨‍👩‍👧", + "name": "family with mother, father and daughter", + "codePoints": [ + "U+1F468", + "U+200D", + "U+1F469", + "U+200D", + "U+1F467" + ] + }, + { + "value": "👨‍👩‍👧‍👦", + "name": "family with mother, father, son and daughter", + "codePoints": [ + "U+1F468", + "U+200D", + "U+1F469", + "U+200D", + "U+1F467", + "U+200D", + "U+1F466" + ] + }, + { + "value": "👨‍👩‍👧‍👧", + "name": "family with mother, father and two daughters", + "codePoints": [ + "U+1F468", + "U+200D", + "U+1F469", + "U+200D", + "U+1F467", + "U+200D", + "U+1F467" + ] + }, + { + "value": "👨‍💻", + "name": "man technologist", + "codePoints": [ + "U+1F468", + "U+200D", + "U+1F4BB" + ] + }, + { + "value": "👨‍💼", + "name": "man office worker", + "codePoints": [ + "U+1F468", + "U+200D", + "U+1F4BC" + ] + }, + { + "value": "👨‍🔧", + "name": "man mechanic", + "codePoints": [ + "U+1F468", + "U+200D", + "U+1F527" + ] + }, + { + "value": "👨‍🔬", + "name": "man scientist", + "codePoints": [ + "U+1F468", + "U+200D", + "U+1F52C" + ] + }, + { + "value": "👨‍🚀", + "name": "man astronaut", + "codePoints": [ + "U+1F468", + "U+200D", + "U+1F680" + ] + }, + { + "value": "👨‍🚒", + "name": "man firefighter", + "codePoints": [ + "U+1F468", + "U+200D", + "U+1F692" + ] + }, + { + "value": "👨‍🤝‍👨", + "name": "men holding hands", + "codePoints": [ + "U+1F468", + "U+200D", + "U+1F91D", + "U+200D", + "U+1F468" + ] + }, + { + "value": "👨‍🦯", + "name": "man with white cane", + "codePoints": [ + "U+1F468", + "U+200D", + "U+1F9AF" + ] + }, + { + "value": "👨‍🦯‍➡️", + "name": "man with white cane facing right", + "codePoints": [ + "U+1F468", + "U+200D", + "U+1F9AF", + "U+200D", + "U+27A1", + "U+FE0F" + ] + }, + { + "value": "👨‍🦰", + "name": "man with red hair", + "codePoints": [ + "U+1F468", + "U+200D", + "U+1F9B0" + ] + }, + { + "value": "👨‍🦱", + "name": "man with curly hair", + "codePoints": [ + "U+1F468", + "U+200D", + "U+1F9B1" + ] + }, + { + "value": "👨‍🦲", + "name": "man with no hair", + "codePoints": [ + "U+1F468", + "U+200D", + "U+1F9B2" + ] + }, + { + "value": "👨‍🦳", + "name": "man with white hair", + "codePoints": [ + "U+1F468", + "U+200D", + "U+1F9B3" + ] + }, + { + "value": "👩", + "name": "woman", + "codePoints": [ + "U+1F469" + ] + }, + { + "value": "👩‍⚕️", + "name": "woman health worker", + "codePoints": [ + "U+1F469", + "U+200D", + "U+2695", + "U+FE0F" + ] + }, + { + "value": "👩‍⚖️", + "name": "woman judge", + "codePoints": [ + "U+1F469", + "U+200D", + "U+2696", + "U+FE0F" + ] + }, + { + "value": "👩‍✈️", + "name": "woman pilot", + "codePoints": [ + "U+1F469", + "U+200D", + "U+2708", + "U+FE0F" + ] + }, + { + "value": "👩‍❤️‍👨", + "name": "man and woman with heart", + "codePoints": [ + "U+1F469", + "U+200D", + "U+2764", + "U+FE0F", + "U+200D", + "U+1F468" + ] + }, + { + "value": "👩‍❤️‍👩", + "name": "two women with heart", + "codePoints": [ + "U+1F469", + "U+200D", + "U+2764", + "U+FE0F", + "U+200D", + "U+1F469" + ] + }, + { + "value": "👩‍❤️‍💋‍👨", + "name": "man and woman kissing", + "codePoints": [ + "U+1F469", + "U+200D", + "U+2764", + "U+FE0F", + "U+200D", + "U+1F48B", + "U+200D", + "U+1F468" + ] + }, + { + "value": "👩‍❤️‍💋‍👩", + "name": "two women kissing", + "codePoints": [ + "U+1F469", + "U+200D", + "U+2764", + "U+FE0F", + "U+200D", + "U+1F48B", + "U+200D", + "U+1F469" + ] + }, + { + "value": "👩‍🌾", + "name": "woman farmer", + "codePoints": [ + "U+1F469", + "U+200D", + "U+1F33E" + ] + }, + { + "value": "👩‍🍳", + "name": "woman cook", + "codePoints": [ + "U+1F469", + "U+200D", + "U+1F373" + ] + }, + { + "value": "👩‍🍼", + "name": "woman feeding baby", + "codePoints": [ + "U+1F469", + "U+200D", + "U+1F37C" + ] + }, + { + "value": "👩‍🎓", + "name": "woman student", + "codePoints": [ + "U+1F469", + "U+200D", + "U+1F393" + ] + }, + { + "value": "👩‍🎤", + "name": "woman singer", + "codePoints": [ + "U+1F469", + "U+200D", + "U+1F3A4" + ] + }, + { + "value": "👩‍🎨", + "name": "woman artist", + "codePoints": [ + "U+1F469", + "U+200D", + "U+1F3A8" + ] + }, + { + "value": "👩‍👦", + "name": "family with mother and son", + "codePoints": [ + "U+1F469", + "U+200D", + "U+1F466" + ] + }, + { + "value": "👩‍👦‍👦", + "name": "family with mother and two sons", + "codePoints": [ + "U+1F469", + "U+200D", + "U+1F466", + "U+200D", + "U+1F466" + ] + }, + { + "value": "👩‍👧", + "name": "family with mother and daughter", + "codePoints": [ + "U+1F469", + "U+200D", + "U+1F467" + ] + }, + { + "value": "👩‍👧‍👦", + "name": "family with mother, son and daughter", + "codePoints": [ + "U+1F469", + "U+200D", + "U+1F467", + "U+200D", + "U+1F466" + ] + }, + { + "value": "👩‍👧‍👧", + "name": "family with mother and two daughters", + "codePoints": [ + "U+1F469", + "U+200D", + "U+1F467", + "U+200D", + "U+1F467" + ] + }, + { + "value": "👩‍👩‍👦", + "name": "family with two mothers and son", + "codePoints": [ + "U+1F469", + "U+200D", + "U+1F469", + "U+200D", + "U+1F466" + ] + }, + { + "value": "👩‍👩‍👦‍👦", + "name": "family with two mothers and two sons", + "codePoints": [ + "U+1F469", + "U+200D", + "U+1F469", + "U+200D", + "U+1F466", + "U+200D", + "U+1F466" + ] + }, + { + "value": "👩‍👩‍👧", + "name": "family with two mothers and daughter", + "codePoints": [ + "U+1F469", + "U+200D", + "U+1F469", + "U+200D", + "U+1F467" + ] + }, + { + "value": "👩‍👩‍👧‍👦", + "name": "family with two mothers, son and daughter", + "codePoints": [ + "U+1F469", + "U+200D", + "U+1F469", + "U+200D", + "U+1F467", + "U+200D", + "U+1F466" + ] + }, + { + "value": "👩‍👩‍👧‍👧", + "name": "family with two mothers and two daughters", + "codePoints": [ + "U+1F469", + "U+200D", + "U+1F469", + "U+200D", + "U+1F467", + "U+200D", + "U+1F467" + ] + }, + { + "value": "👩‍💻", + "name": "woman technologist", + "codePoints": [ + "U+1F469", + "U+200D", + "U+1F4BB" + ] + }, + { + "value": "👩‍💼", + "name": "woman office worker", + "codePoints": [ + "U+1F469", + "U+200D", + "U+1F4BC" + ] + }, + { + "value": "👩‍🔧", + "name": "woman mechanic", + "codePoints": [ + "U+1F469", + "U+200D", + "U+1F527" + ] + }, + { + "value": "👩‍🔬", + "name": "woman scientist", + "codePoints": [ + "U+1F469", + "U+200D", + "U+1F52C" + ] + }, + { + "value": "👩‍🚀", + "name": "woman astronaut", + "codePoints": [ + "U+1F469", + "U+200D", + "U+1F680" + ] + }, + { + "value": "👩‍🚒", + "name": "woman firefighter", + "codePoints": [ + "U+1F469", + "U+200D", + "U+1F692" + ] + }, + { + "value": "👩‍🤝‍👨", + "name": "woman and man holding hands", + "codePoints": [ + "U+1F469", + "U+200D", + "U+1F91D", + "U+200D", + "U+1F468" + ] + }, + { + "value": "👩‍🤝‍👩", + "name": "women holding hands", + "codePoints": [ + "U+1F469", + "U+200D", + "U+1F91D", + "U+200D", + "U+1F469" + ] + }, + { + "value": "👩‍🦯", + "name": "woman with white cane", + "codePoints": [ + "U+1F469", + "U+200D", + "U+1F9AF" + ] + }, + { + "value": "👩‍🦯‍➡️", + "name": "woman with white cane facing right", + "codePoints": [ + "U+1F469", + "U+200D", + "U+1F9AF", + "U+200D", + "U+27A1", + "U+FE0F" + ] + }, + { + "value": "👩‍🦰", + "name": "woman with red hair", + "codePoints": [ + "U+1F469", + "U+200D", + "U+1F9B0" + ] + }, + { + "value": "👩‍🦱", + "name": "woman with curly hair", + "codePoints": [ + "U+1F469", + "U+200D", + "U+1F9B1" + ] + }, + { + "value": "👩‍🦲", + "name": "woman with no hair", + "codePoints": [ + "U+1F469", + "U+200D", + "U+1F9B2" + ] + }, + { + "value": "👩‍🦳", + "name": "woman with white hair", + "codePoints": [ + "U+1F469", + "U+200D", + "U+1F9B3" + ] + }, + { + "value": "👪", + "name": "family", + "codePoints": [ + "U+1F46A" + ] + }, + { + "value": "👫", + "name": "man and woman holding hands", + "codePoints": [ + "U+1F46B" + ] + }, + { + "value": "👬", + "name": "two men holding hands", + "codePoints": [ + "U+1F46C" + ] + }, + { + "value": "👭", + "name": "two women holding hands", + "codePoints": [ + "U+1F46D" + ] + }, + { + "value": "👮", + "name": "police officer", + "codePoints": [ + "U+1F46E" + ] + }, + { + "value": "👮‍♀️", + "name": "policewoman", + "codePoints": [ + "U+1F46E", + "U+200D", + "U+2640", + "U+FE0F" + ] + }, + { + "value": "👮‍♂️", + "name": "policeman", + "codePoints": [ + "U+1F46E", + "U+200D", + "U+2642", + "U+FE0F" + ] + }, + { + "value": "👰", + "name": "person with veil", + "codePoints": [ + "U+1F470" + ] + }, + { + "value": "👰‍♀️", + "name": "woman with veil", + "codePoints": [ + "U+1F470", + "U+200D", + "U+2640", + "U+FE0F" + ] + }, + { + "value": "👰‍♂️", + "name": "man with veil", + "codePoints": [ + "U+1F470", + "U+200D", + "U+2642", + "U+FE0F" + ] + }, + { + "value": "👱", + "name": "person with blond hair", + "codePoints": [ + "U+1F471" + ] + }, + { + "value": "👱‍♀️", + "name": "woman with blonde hair", + "codePoints": [ + "U+1F471", + "U+200D", + "U+2640", + "U+FE0F" + ] + }, + { + "value": "👱‍♂️", + "name": "man with blond hair", + "codePoints": [ + "U+1F471", + "U+200D", + "U+2642", + "U+FE0F" + ] + }, + { + "value": "👳", + "name": "person with turban", + "codePoints": [ + "U+1F473" + ] + }, + { + "value": "👳‍♀️", + "name": "woman with turban", + "codePoints": [ + "U+1F473", + "U+200D", + "U+2640", + "U+FE0F" + ] + }, + { + "value": "👳‍♂️", + "name": "man with turban", + "codePoints": [ + "U+1F473", + "U+200D", + "U+2642", + "U+FE0F" + ] + }, + { + "value": "👴", + "name": "old man", + "codePoints": [ + "U+1F474" + ] + }, + { + "value": "👵", + "name": "old woman", + "codePoints": [ + "U+1F475" + ] + }, + { + "value": "👶", + "name": "baby", + "codePoints": [ + "U+1F476" + ] + }, + { + "value": "👸", + "name": "princess", + "codePoints": [ + "U+1F478" + ] + }, + { + "value": "👹", + "name": "ogre", + "codePoints": [ + "U+1F479" + ] + }, + { + "value": "👺", + "name": "goblin", + "codePoints": [ + "U+1F47A" + ] + }, + { + "value": "👻", + "name": "ghost", + "codePoints": [ + "U+1F47B" + ] + }, + { + "value": "👼", + "name": "baby angel", + "codePoints": [ + "U+1F47C" + ] + }, + { + "value": "👽", + "name": "alien", + "codePoints": [ + "U+1F47D" + ] + }, + { + "value": "👾", + "name": "alien monster", + "codePoints": [ + "U+1F47E" + ] + }, + { + "value": "👿", + "name": "angry face with horns", + "codePoints": [ + "U+1F47F" + ] + }, + { + "value": "💀", + "name": "skull", + "codePoints": [ + "U+1F480" + ] + }, + { + "value": "💁‍♀️", + "name": "information desk woman", + "codePoints": [ + "U+1F481", + "U+200D", + "U+2640", + "U+FE0F" + ] + }, + { + "value": "💁‍♂️", + "name": "information desk man", + "codePoints": [ + "U+1F481", + "U+200D", + "U+2642", + "U+FE0F" + ] + }, + { + "value": "💂", + "name": "guard", + "codePoints": [ + "U+1F482" + ] + }, + { + "value": "💂‍♀️", + "name": "guardswoman", + "codePoints": [ + "U+1F482", + "U+200D", + "U+2640", + "U+FE0F" + ] + }, + { + "value": "💂‍♂️", + "name": "guardsman", + "codePoints": [ + "U+1F482", + "U+200D", + "U+2642", + "U+FE0F" + ] + }, + { + "value": "💃", + "name": "woman dancing", + "codePoints": [ + "U+1F483" + ] + }, + { + "value": "💆", + "name": "person getting a head massage", + "codePoints": [ + "U+1F486" + ] + }, + { + "value": "💆‍♀️", + "name": "woman getting a head massage", + "codePoints": [ + "U+1F486", + "U+200D", + "U+2640", + "U+FE0F" + ] + }, + { + "value": "💆‍♂️", + "name": "man getting a head massage", + "codePoints": [ + "U+1F486", + "U+200D", + "U+2642", + "U+FE0F" + ] + }, + { + "value": "💇", + "name": "person getting a haircut", + "codePoints": [ + "U+1F487" + ] + }, + { + "value": "💇‍♀️", + "name": "woman getting a haircut", + "codePoints": [ + "U+1F487", + "U+200D", + "U+2640", + "U+FE0F" + ] + }, + { + "value": "💇‍♂️", + "name": "man getting a haircut", + "codePoints": [ + "U+1F487", + "U+200D", + "U+2642", + "U+FE0F" + ] + }, + { + "value": "💋", + "name": "kiss mark", + "codePoints": [ + "U+1F48B" + ] + }, + { + "value": "💌", + "name": "love letter", + "codePoints": [ + "U+1F48C" + ] + }, + { + "value": "💏", + "name": "couple kissing", + "codePoints": [ + "U+1F48F" + ] + }, + { + "value": "💑", + "name": "couple with heart", + "codePoints": [ + "U+1F491" + ] + }, + { + "value": "💓", + "name": "beating heart", + "codePoints": [ + "U+1F493" + ] + }, + { + "value": "💔", + "name": "broken heart", + "codePoints": [ + "U+1F494" + ] + }, + { + "value": "💕", + "name": "two hearts", + "codePoints": [ + "U+1F495" + ] + }, + { + "value": "💖", + "name": "sparkling heart", + "codePoints": [ + "U+1F496" + ] + }, + { + "value": "💗", + "name": "growing heart", + "codePoints": [ + "U+1F497" + ] + }, + { + "value": "💘", + "name": "heart with arrow", + "codePoints": [ + "U+1F498" + ] + }, + { + "value": "💙", + "name": "blue heart", + "codePoints": [ + "U+1F499" + ] + }, + { + "value": "💚", + "name": "green heart", + "codePoints": [ + "U+1F49A" + ] + }, + { + "value": "💛", + "name": "yellow heart", + "codePoints": [ + "U+1F49B" + ] + }, + { + "value": "💜", + "name": "purple heart", + "codePoints": [ + "U+1F49C" + ] + }, + { + "value": "💞", + "name": "revolving hearts", + "codePoints": [ + "U+1F49E" + ] + }, + { + "value": "💢", + "name": "anger symbol", + "codePoints": [ + "U+1F4A2" + ] + }, + { + "value": "💩", + "name": "pile of poop", + "codePoints": [ + "U+1F4A9" + ] + }, + { + "value": "💪", + "name": "flexed bicep", + "codePoints": [ + "U+1F4AA" + ] + }, + { + "value": "💫", + "name": "dizzy symbol", + "codePoints": [ + "U+1F4AB" + ] + }, + { + "value": "🕎", + "name": "menorah", + "codePoints": [ + "U+1F54E" + ] + }, + { + "value": "🕵️", + "name": "detective", + "codePoints": [ + "U+1F575", + "U+FE0F" + ] + }, + { + "value": "🕵️‍♀️", + "name": "woman detective", + "codePoints": [ + "U+1F575", + "U+FE0F", + "U+200D", + "U+2640", + "U+FE0F" + ] + }, + { + "value": "🕵️‍♂️", + "name": "man detective", + "codePoints": [ + "U+1F575", + "U+FE0F", + "U+200D", + "U+2642", + "U+FE0F" + ] + }, + { + "value": "🕺", + "name": "man dancing", + "codePoints": [ + "U+1F57A" + ] + }, + { + "value": "🖤", + "name": "black heart", + "codePoints": [ + "U+1F5A4" + ] + }, + { + "value": "🗣️", + "name": "speaking silhouette head", + "codePoints": [ + "U+1F5E3", + "U+FE0F" + ] + }, + { + "value": "🗨️", + "name": "left speech bubble", + "codePoints": [ + "U+1F5E8", + "U+FE0F" + ] + }, + { + "value": "🗯️", + "name": "angry speech bubble", + "codePoints": [ + "U+1F5EF", + "U+FE0F" + ] + }, + { + "value": "😀", + "name": "grinning face", + "codePoints": [ + "U+1F600" + ] + }, + { + "value": "😁", + "name": "beaming face with smiling eyes", + "codePoints": [ + "U+1F601" + ] + }, + { + "value": "😃", + "name": "grinning face with big eyes", + "codePoints": [ + "U+1F603" + ] + }, + { + "value": "😄", + "name": "grinning face with smiling eyes", + "codePoints": [ + "U+1F604" + ] + }, + { + "value": "😅", + "name": "grinning face with sweat", + "codePoints": [ + "U+1F605" + ] + }, + { + "value": "😆", + "name": "grinning face with squinting eyes", + "codePoints": [ + "U+1F606" + ] + }, + { + "value": "😇", + "name": "smiling face with halo", + "codePoints": [ + "U+1F607" + ] + }, + { + "value": "😈", + "name": "smiling face with horns", + "codePoints": [ + "U+1F608" + ] + }, + { + "value": "😉", + "name": "winking face", + "codePoints": [ + "U+1F609" + ] + }, + { + "value": "😊", + "name": "smiling face with smiling eyes", + "codePoints": [ + "U+1F60A" + ] + }, + { + "value": "😋", + "name": "smiling face licking lips", + "codePoints": [ + "U+1F60B" + ] + }, + { + "value": "😌", + "name": "relieved face", + "codePoints": [ + "U+1F60C" + ] + }, + { + "value": "😍", + "name": "smiling face with heart-eyes", + "codePoints": [ + "U+1F60D" + ] + }, + { + "value": "😏", + "name": "smirking face", + "codePoints": [ + "U+1F60F" + ] + }, + { + "value": "😐", + "name": "neutral face", + "codePoints": [ + "U+1F610" + ] + }, + { + "value": "😑", + "name": "expressionless face", + "codePoints": [ + "U+1F611" + ] + }, + { + "value": "😒", + "name": "unamused face", + "codePoints": [ + "U+1F612" + ] + }, + { + "value": "😓", + "name": "downcast face with sweat", + "codePoints": [ + "U+1F613" + ] + }, + { + "value": "😕", + "name": "confused face", + "codePoints": [ + "U+1F615" + ] + }, + { + "value": "😖", + "name": "confounded face", + "codePoints": [ + "U+1F616" + ] + }, + { + "value": "😗", + "name": "kissing face", + "codePoints": [ + "U+1F617" + ] + }, + { + "value": "😘", + "name": "face blowing a kiss", + "codePoints": [ + "U+1F618" + ] + }, + { + "value": "😙", + "name": "kissing face with smiling eyes", + "codePoints": [ + "U+1F619" + ] + }, + { + "value": "😚", + "name": "kissing face with closed eyes", + "codePoints": [ + "U+1F61A" + ] + }, + { + "value": "😛", + "name": "face with stuck-out tongue", + "codePoints": [ + "U+1F61B" + ] + }, + { + "value": "😜", + "name": "winking face with stuck-out tongue", + "codePoints": [ + "U+1F61C" + ] + }, + { + "value": "😝", + "name": "face with stuck-out tongue and squinting eyes", + "codePoints": [ + "U+1F61D" + ] + }, + { + "value": "😞", + "name": "disappointed face", + "codePoints": [ + "U+1F61E" + ] + }, + { + "value": "😟", + "name": "worried face", + "codePoints": [ + "U+1F61F" + ] + }, + { + "value": "😠", + "name": "angry face", + "codePoints": [ + "U+1F620" + ] + }, + { + "value": "😡", + "name": "red angry face", + "codePoints": [ + "U+1F621" + ] + }, + { + "value": "😢", + "name": "crying face", + "codePoints": [ + "U+1F622" + ] + }, + { + "value": "😥", + "name": "sad but relieved face", + "codePoints": [ + "U+1F625" + ] + }, + { + "value": "😧", + "name": "anguished face", + "codePoints": [ + "U+1F627" + ] + }, + { + "value": "😨", + "name": "fearful face", + "codePoints": [ + "U+1F628" + ] + }, + { + "value": "😩", + "name": "weary face", + "codePoints": [ + "U+1F629" + ] + }, + { + "value": "😪", + "name": "sleepy face", + "codePoints": [ + "U+1F62A" + ] + }, + { + "value": "😫", + "name": "distraught face", + "codePoints": [ + "U+1F62B" + ] + }, + { + "value": "😬", + "name": "grimacing face", + "codePoints": [ + "U+1F62C" + ] + }, + { + "value": "😭", + "name": "loudly crying face", + "codePoints": [ + "U+1F62D" + ] + }, + { + "value": "😮‍💨", + "name": "exhaling face", + "codePoints": [ + "U+1F62E", + "U+200D", + "U+1F4A8" + ] + }, + { + "value": "😯", + "name": "surprised face", + "codePoints": [ + "U+1F62F" + ] + }, + { + "value": "😰", + "name": "anxious face with sweat", + "codePoints": [ + "U+1F630" + ] + }, + { + "value": "😱", + "name": "face screaming in fear", + "codePoints": [ + "U+1F631" + ] + }, + { + "value": "😲", + "name": "astonished face", + "codePoints": [ + "U+1F632" + ] + }, + { + "value": "😵", + "name": "dizzy face", + "codePoints": [ + "U+1F635" + ] + }, + { + "value": "😵‍💫", + "name": "face with spiral eyes", + "codePoints": [ + "U+1F635", + "U+200D", + "U+1F4AB" + ] + }, + { + "value": "😶", + "name": "face without mouth", + "codePoints": [ + "U+1F636" + ] + }, + { + "value": "😷", + "name": "face with medical mask", + "codePoints": [ + "U+1F637" + ] + }, + { + "value": "🙁", + "name": "slightly frowning face", + "codePoints": [ + "U+1F641" + ] + }, + { + "value": "🙂", + "name": "slightly smiling face", + "codePoints": [ + "U+1F642" + ] + }, + { + "value": "🙂‍↔️", + "name": "head shaking horizontally", + "codePoints": [ + "U+1F642", + "U+200D", + "U+2194", + "U+FE0F" + ] + }, + { + "value": "🙂‍↕️", + "name": "head shaking vertically", + "codePoints": [ + "U+1F642", + "U+200D", + "U+2195", + "U+FE0F" + ] + }, + { + "value": "🙃", + "name": "upside down face", + "codePoints": [ + "U+1F643" + ] + }, + { + "value": "🙄", + "name": "face with rolling eyes", + "codePoints": [ + "U+1F644" + ] + }, + { + "value": "🙇", + "name": "person bowing", + "codePoints": [ + "U+1F647" + ] + }, + { + "value": "🙇‍♀️", + "name": "woman bowing", + "codePoints": [ + "U+1F647", + "U+200D", + "U+2640", + "U+FE0F" + ] + }, + { + "value": "🙇‍♂️", + "name": "man bowing", + "codePoints": [ + "U+1F647", + "U+200D", + "U+2642", + "U+FE0F" + ] + }, + { + "value": "🙋", + "name": "person raising one hand", + "codePoints": [ + "U+1F64B" + ] + }, + { + "value": "🙋‍♀️", + "name": "woman raising one hand", + "codePoints": [ + "U+1F64B", + "U+200D", + "U+2640", + "U+FE0F" + ] + }, + { + "value": "🙋‍♂️", + "name": "man raising one hand", + "codePoints": [ + "U+1F64B", + "U+200D", + "U+2642", + "U+FE0F" + ] + }, + { + "value": "🙍", + "name": "person frowning", + "codePoints": [ + "U+1F64D" + ] + }, + { + "value": "🙍‍♀️", + "name": "woman frowning", + "codePoints": [ + "U+1F64D", + "U+200D", + "U+2640", + "U+FE0F" + ] + }, + { + "value": "🙍‍♂️", + "name": "man frowning", + "codePoints": [ + "U+1F64D", + "U+200D", + "U+2642", + "U+FE0F" + ] + }, + { + "value": "🙎", + "name": "person pouting", + "codePoints": [ + "U+1F64E" + ] + }, + { + "value": "🙎‍♀️", + "name": "woman pouting", + "codePoints": [ + "U+1F64E", + "U+200D", + "U+2640", + "U+FE0F" + ] + }, + { + "value": "🙎‍♂️", + "name": "man pouting", + "codePoints": [ + "U+1F64E", + "U+200D", + "U+2642", + "U+FE0F" + ] + }, + { + "value": "🚭", + "name": "no smoking sign", + "codePoints": [ + "U+1F6AD" + ] + }, + { + "value": "🚸", + "name": "children crossing", + "codePoints": [ + "U+1F6B8" + ] + }, + { + "value": "🚹", + "name": "men’s symbol", + "codePoints": [ + "U+1F6B9" + ] + }, + { + "value": "🚺", + "name": "women’s symbol", + "codePoints": [ + "U+1F6BA" + ] + }, + { + "value": "🚼", + "name": "baby symbol", + "codePoints": [ + "U+1F6BC" + ] + }, + { + "value": "🤍", + "name": "white heart", + "codePoints": [ + "U+1F90D" + ] + }, + { + "value": "🤎", + "name": "brown heart", + "codePoints": [ + "U+1F90E" + ] + }, + { + "value": "🤐", + "name": "face with a zipper mouth", + "codePoints": [ + "U+1F910" + ] + }, + { + "value": "🤔", + "name": "thinking face", + "codePoints": [ + "U+1F914" + ] + }, + { + "value": "🤖", + "name": "robot face", + "codePoints": [ + "U+1F916" + ] + }, + { + "value": "🤗", + "name": "hugging face", + "codePoints": [ + "U+1F917" + ] + }, + { + "value": "🤘", + "name": "sign of the horns", + "codePoints": [ + "U+1F918" + ] + }, + { + "value": "🤙", + "name": "call me hand sign", + "codePoints": [ + "U+1F919" + ] + }, + { + "value": "🤝", + "name": "handshake", + "codePoints": [ + "U+1F91D" + ] + }, + { + "value": "🤞", + "name": "fingers crossed", + "codePoints": [ + "U+1F91E" + ] + }, + { + "value": "🤟", + "name": "love-you gesture", + "codePoints": [ + "U+1F91F" + ] + }, + { + "value": "🤡", + "name": "clown face", + "codePoints": [ + "U+1F921" + ] + }, + { + "value": "🤢", + "name": "nauseated face", + "codePoints": [ + "U+1F922" + ] + }, + { + "value": "🤣", + "name": "rolling on the floor laughing face", + "codePoints": [ + "U+1F923" + ] + }, + { + "value": "🤤", + "name": "drooling face", + "codePoints": [ + "U+1F924" + ] + }, + { + "value": "🤥", + "name": "lying face", + "codePoints": [ + "U+1F925" + ] + }, + { + "value": "🤦", + "name": "person facepalming", + "codePoints": [ + "U+1F926" + ] + }, + { + "value": "🤦‍♀️", + "name": "woman facepalming", + "codePoints": [ + "U+1F926", + "U+200D", + "U+2640", + "U+FE0F" + ] + }, + { + "value": "🤦‍♂️", + "name": "man facepalming", + "codePoints": [ + "U+1F926", + "U+200D", + "U+2642", + "U+FE0F" + ] + }, + { + "value": "🤧", + "name": "sneezing face", + "codePoints": [ + "U+1F927" + ] + }, + { + "value": "🤨", + "name": "face with raised eyebrow", + "codePoints": [ + "U+1F928" + ] + }, + { + "value": "🤪", + "name": "goofy face", + "codePoints": [ + "U+1F92A" + ] + }, + { + "value": "🤫", + "name": "shushing face", + "codePoints": [ + "U+1F92B" + ] + }, + { + "value": "🤬", + "name": "face with symbols over mouth", + "codePoints": [ + "U+1F92C" + ] + }, + { + "value": "🤭", + "name": "face with hand over mouth and smiling eyes", + "codePoints": [ + "U+1F92D" + ] + }, + { + "value": "🤮", + "name": "vomiting face", + "codePoints": [ + "U+1F92E" + ] + }, + { + "value": "🤳", + "name": "selfie", + "codePoints": [ + "U+1F933" + ] + }, + { + "value": "🤴", + "name": "prince", + "codePoints": [ + "U+1F934" + ] + }, + { + "value": "🤵", + "name": "person in tuxedo", + "codePoints": [ + "U+1F935" + ] + }, + { + "value": "🤵‍♀️", + "name": "woman in tuxedo", + "codePoints": [ + "U+1F935", + "U+200D", + "U+2640", + "U+FE0F" + ] + }, + { + "value": "🤵‍♂️", + "name": "man in tuxedo", + "codePoints": [ + "U+1F935", + "U+200D", + "U+2642", + "U+FE0F" + ] + }, + { + "value": "🤶", + "name": "Mrs. Claus", + "codePoints": [ + "U+1F936" + ] + }, + { + "value": "🤷", + "name": "person shrugging", + "codePoints": [ + "U+1F937" + ] + }, + { + "value": "🤷‍♀️", + "name": "woman shrugging", + "codePoints": [ + "U+1F937", + "U+200D", + "U+2640", + "U+FE0F" + ] + }, + { + "value": "🤷‍♂️", + "name": "man shrugging", + "codePoints": [ + "U+1F937", + "U+200D", + "U+2642", + "U+FE0F" + ] + }, + { + "value": "🤼", + "name": "people wrestling", + "codePoints": [ + "U+1F93C" + ] + }, + { + "value": "🤼‍♀️", + "name": "women wrestling", + "codePoints": [ + "U+1F93C", + "U+200D", + "U+2640", + "U+FE0F" + ] + }, + { + "value": "🤼‍♂️", + "name": "men wrestling", + "codePoints": [ + "U+1F93C", + "U+200D", + "U+2642", + "U+FE0F" + ] + }, + { + "value": "🤿", + "name": "diving mask", + "codePoints": [ + "U+1F93F" + ] + }, + { + "value": "🥰", + "name": "smiling face with hearts", + "codePoints": [ + "U+1F970" + ] + }, + { + "value": "🥱", + "name": "yawning face", + "codePoints": [ + "U+1F971" + ] + }, + { + "value": "🥴", + "name": "woozy face", + "codePoints": [ + "U+1F974" + ] + }, + { + "value": "🥵", + "name": "hot face", + "codePoints": [ + "U+1F975" + ] + }, + { + "value": "🥶", + "name": "cold face", + "codePoints": [ + "U+1F976" + ] + }, + { + "value": "🥷", + "name": "ninja", + "codePoints": [ + "U+1F977" + ] + }, + { + "value": "🥸", + "name": "disguised face", + "codePoints": [ + "U+1F978" + ] + }, + { + "value": "🥺", + "name": "pleading face", + "codePoints": [ + "U+1F97A" + ] + }, + { + "value": "🦸", + "name": "superhero", + "codePoints": [ + "U+1F9B8" + ] + }, + { + "value": "🦸‍♀️", + "name": "woman superhero", + "codePoints": [ + "U+1F9B8", + "U+200D", + "U+2640", + "U+FE0F" + ] + }, + { + "value": "🦸‍♂️", + "name": "man superhero", + "codePoints": [ + "U+1F9B8", + "U+200D", + "U+2642", + "U+FE0F" + ] + }, + { + "value": "🦹", + "name": "supervillain", + "codePoints": [ + "U+1F9B9" + ] + }, + { + "value": "🦹‍♀️", + "name": "woman supervillain", + "codePoints": [ + "U+1F9B9", + "U+200D", + "U+2640", + "U+FE0F" + ] + }, + { + "value": "🦹‍♂️", + "name": "man supervillain", + "codePoints": [ + "U+1F9B9", + "U+200D", + "U+2642", + "U+FE0F" + ] + }, + { + "value": "🦾", + "name": "mechanical arm", + "codePoints": [ + "U+1F9BE" + ] + }, + { + "value": "🦿", + "name": "mechanical leg", + "codePoints": [ + "U+1F9BF" + ] + }, + { + "value": "🧌", + "name": "troll", + "codePoints": [ + "U+1F9CC" + ] + }, + { + "value": "🧍", + "name": "person standing", + "codePoints": [ + "U+1F9CD" + ] + }, + { + "value": "🧍‍♀️", + "name": "woman standing", + "codePoints": [ + "U+1F9CD", + "U+200D", + "U+2640", + "U+FE0F" + ] + }, + { + "value": "🧍‍♂️", + "name": "man standing", + "codePoints": [ + "U+1F9CD", + "U+200D", + "U+2642", + "U+FE0F" + ] + }, + { + "value": "🧎", + "name": "person kneeling", + "codePoints": [ + "U+1F9CE" + ] + }, + { + "value": "🧎‍♀️", + "name": "woman kneeling", + "codePoints": [ + "U+1F9CE", + "U+200D", + "U+2640", + "U+FE0F" + ] + }, + { + "value": "🧎‍♀️‍➡️", + "name": "woman kneeling facing right", + "codePoints": [ + "U+1F9CE", + "U+200D", + "U+2640", + "U+FE0F", + "U+200D", + "U+27A1", + "U+FE0F" + ] + }, + { + "value": "🧎‍♂️", + "name": "man kneeling", + "codePoints": [ + "U+1F9CE", + "U+200D", + "U+2642", + "U+FE0F" + ] + }, + { + "value": "🧎‍♂️‍➡️", + "name": "man kneeling facing right", + "codePoints": [ + "U+1F9CE", + "U+200D", + "U+2642", + "U+FE0F", + "U+200D", + "U+27A1", + "U+FE0F" + ] + }, + { + "value": "🧎‍➡️", + "name": "person kneeling facing right", + "codePoints": [ + "U+1F9CE", + "U+200D", + "U+27A1", + "U+FE0F" + ] + }, + { + "value": "🧏", + "name": "Deaf person", + "codePoints": [ + "U+1F9CF" + ] + }, + { + "value": "🧏‍♀️", + "name": "Deaf woman", + "codePoints": [ + "U+1F9CF", + "U+200D", + "U+2640", + "U+FE0F" + ] + }, + { + "value": "🧏‍♂️", + "name": "Deaf man", + "codePoints": [ + "U+1F9CF", + "U+200D", + "U+2642", + "U+FE0F" + ] + }, + { + "value": "🧐", + "name": "face with monocle", + "codePoints": [ + "U+1F9D0" + ] + }, + { + "value": "🧑", + "name": "adult", + "codePoints": [ + "U+1F9D1" + ] + }, + { + "value": "🧑‍⚕️", + "name": "health worker", + "codePoints": [ + "U+1F9D1", + "U+200D", + "U+2695", + "U+FE0F" + ] + }, + { + "value": "🧑‍⚖️", + "name": "judge", + "codePoints": [ + "U+1F9D1", + "U+200D", + "U+2696", + "U+FE0F" + ] + }, + { + "value": "🧑‍✈️", + "name": "pilot", + "codePoints": [ + "U+1F9D1", + "U+200D", + "U+2708", + "U+FE0F" + ] + }, + { + "value": "🧑‍🌾", + "name": "farmer", + "codePoints": [ + "U+1F9D1", + "U+200D", + "U+1F33E" + ] + }, + { + "value": "🧑‍🍳", + "name": "cook", + "codePoints": [ + "U+1F9D1", + "U+200D", + "U+1F373" + ] + }, + { + "value": "🧑‍🍼", + "name": "person feeding baby", + "codePoints": [ + "U+1F9D1", + "U+200D", + "U+1F37C" + ] + }, + { + "value": "🧑‍🎄", + "name": "Mx. Claus", + "codePoints": [ + "U+1F9D1", + "U+200D", + "U+1F384" + ] + }, + { + "value": "🧑‍🎓", + "name": "student", + "codePoints": [ + "U+1F9D1", + "U+200D", + "U+1F393" + ] + }, + { + "value": "🧑‍🎤", + "name": "singer", + "codePoints": [ + "U+1F9D1", + "U+200D", + "U+1F3A4" + ] + }, + { + "value": "🧑‍🎨", + "name": "artist", + "codePoints": [ + "U+1F9D1", + "U+200D", + "U+1F3A8" + ] + }, + { + "value": "🧑‍💻", + "name": "technologist", + "codePoints": [ + "U+1F9D1", + "U+200D", + "U+1F4BB" + ] + }, + { + "value": "🧑‍💼", + "name": "office worker", + "codePoints": [ + "U+1F9D1", + "U+200D", + "U+1F4BC" + ] + }, + { + "value": "🧑‍🔧", + "name": "mechanic", + "codePoints": [ + "U+1F9D1", + "U+200D", + "U+1F527" + ] + }, + { + "value": "🧑‍🔬", + "name": "scientist", + "codePoints": [ + "U+1F9D1", + "U+200D", + "U+1F52C" + ] + }, + { + "value": "🧑‍🚀", + "name": "astronaut", + "codePoints": [ + "U+1F9D1", + "U+200D", + "U+1F680" + ] + }, + { + "value": "🧑‍🚒", + "name": "firefighter", + "codePoints": [ + "U+1F9D1", + "U+200D", + "U+1F692" + ] + }, + { + "value": "🧑‍🤝‍🧑", + "name": "people holding hands", + "codePoints": [ + "U+1F9D1", + "U+200D", + "U+1F91D", + "U+200D", + "U+1F9D1" + ] + }, + { + "value": "🧑‍🦯", + "name": "person with white cane", + "codePoints": [ + "U+1F9D1", + "U+200D", + "U+1F9AF" + ] + }, + { + "value": "🧑‍🦯‍➡️", + "name": "person with white cane facing right", + "codePoints": [ + "U+1F9D1", + "U+200D", + "U+1F9AF", + "U+200D", + "U+27A1", + "U+FE0F" + ] + }, + { + "value": "🧑‍🦰", + "name": "person with red hair", + "codePoints": [ + "U+1F9D1", + "U+200D", + "U+1F9B0" + ] + }, + { + "value": "🧑‍🦱", + "name": "person with curly hair", + "codePoints": [ + "U+1F9D1", + "U+200D", + "U+1F9B1" + ] + }, + { + "value": "🧑‍🦲", + "name": "person with no hair", + "codePoints": [ + "U+1F9D1", + "U+200D", + "U+1F9B2" + ] + }, + { + "value": "🧑‍🦳", + "name": "person with white hair", + "codePoints": [ + "U+1F9D1", + "U+200D", + "U+1F9B3" + ] + }, + { + "value": "🧑‍🧑‍🧒", + "name": "family: adult, adult, child", + "codePoints": [ + "U+1F9D1", + "U+200D", + "U+1F9D1", + "U+200D", + "U+1F9D2" + ] + }, + { + "value": "🧑‍🧑‍🧒‍🧒", + "name": "family: adult, adult, child, child", + "codePoints": [ + "U+1F9D1", + "U+200D", + "U+1F9D1", + "U+200D", + "U+1F9D2", + "U+200D", + "U+1F9D2" + ] + }, + { + "value": "🧑‍🧒", + "name": "family: adult, child", + "codePoints": [ + "U+1F9D1", + "U+200D", + "U+1F9D2" + ] + }, + { + "value": "🧑‍🧒‍🧒", + "name": "family: adult, child, child", + "codePoints": [ + "U+1F9D1", + "U+200D", + "U+1F9D2", + "U+200D", + "U+1F9D2" + ] + }, + { + "value": "🧒", + "name": "child", + "codePoints": [ + "U+1F9D2" + ] + }, + { + "value": "🧓", + "name": "older adult", + "codePoints": [ + "U+1F9D3" + ] + }, + { + "value": "🧖", + "name": "person in a sauna", + "codePoints": [ + "U+1F9D6" + ] + }, + { + "value": "🧖‍♀️", + "name": "woman in a sauna", + "codePoints": [ + "U+1F9D6", + "U+200D", + "U+2640", + "U+FE0F" + ] + }, + { + "value": "🧖‍♂️", + "name": "man in a sauna", + "codePoints": [ + "U+1F9D6", + "U+200D", + "U+2642", + "U+FE0F" + ] + }, + { + "value": "🧙", + "name": "mage", + "codePoints": [ + "U+1F9D9" + ] + }, + { + "value": "🧙‍♀️", + "name": "woman mage", + "codePoints": [ + "U+1F9D9", + "U+200D", + "U+2640", + "U+FE0F" + ] + }, + { + "value": "🧙‍♂️", + "name": "man mage", + "codePoints": [ + "U+1F9D9", + "U+200D", + "U+2642", + "U+FE0F" + ] + }, + { + "value": "🧚", + "name": "fairy", + "codePoints": [ + "U+1F9DA" + ] + }, + { + "value": "🧚‍♀️", + "name": "woman fairy", + "codePoints": [ + "U+1F9DA", + "U+200D", + "U+2640", + "U+FE0F" + ] + }, + { + "value": "🧚‍♂️", + "name": "man fairy", + "codePoints": [ + "U+1F9DA", + "U+200D", + "U+2642", + "U+FE0F" + ] + }, + { + "value": "🧛", + "name": "vampire", + "codePoints": [ + "U+1F9DB" + ] + }, + { + "value": "🧛‍♀️", + "name": "woman vampire", + "codePoints": [ + "U+1F9DB", + "U+200D", + "U+2640", + "U+FE0F" + ] + }, + { + "value": "🧛‍♂️", + "name": "man vampire", + "codePoints": [ + "U+1F9DB", + "U+200D", + "U+2642", + "U+FE0F" + ] + }, + { + "value": "🧜", + "name": "merperson", + "codePoints": [ + "U+1F9DC" + ] + }, + { + "value": "🧜‍♀️", + "name": "mermaid", + "codePoints": [ + "U+1F9DC", + "U+200D", + "U+2640", + "U+FE0F" + ] + }, + { + "value": "🧜‍♂️", + "name": "merman", + "codePoints": [ + "U+1F9DC", + "U+200D", + "U+2642", + "U+FE0F" + ] + }, + { + "value": "🧝", + "name": "elf", + "codePoints": [ + "U+1F9DD" + ] + }, + { + "value": "🧝‍♀️", + "name": "woman elf", + "codePoints": [ + "U+1F9DD", + "U+200D", + "U+2640", + "U+FE0F" + ] + }, + { + "value": "🧝‍♂️", + "name": "man elf", + "codePoints": [ + "U+1F9DD", + "U+200D", + "U+2642", + "U+FE0F" + ] + }, + { + "value": "🧞", + "name": "genie", + "codePoints": [ + "U+1F9DE" + ] + }, + { + "value": "🧞‍♀️", + "name": "woman genie", + "codePoints": [ + "U+1F9DE", + "U+200D", + "U+2640", + "U+FE0F" + ] + }, + { + "value": "🧞‍♂️", + "name": "man genie", + "codePoints": [ + "U+1F9DE", + "U+200D", + "U+2642", + "U+FE0F" + ] + }, + { + "value": "🧟", + "name": "zombie", + "codePoints": [ + "U+1F9DF" + ] + }, + { + "value": "🧟‍♀️", + "name": "woman zombie", + "codePoints": [ + "U+1F9DF", + "U+200D", + "U+2640", + "U+FE0F" + ] + }, + { + "value": "🧟‍♂️", + "name": "man zombie", + "codePoints": [ + "U+1F9DF", + "U+200D", + "U+2642", + "U+FE0F" + ] + }, + { + "value": "🩵", + "name": "light blue heart", + "codePoints": [ + "U+1FA75" + ] + }, + { + "value": "🩶", + "name": "grey heart", + "codePoints": [ + "U+1FA76" + ] + }, + { + "value": "🫀", + "name": "anatomical heart", + "codePoints": [ + "U+1FAC0" + ] + }, + { + "value": "🫂", + "name": "people hugging", + "codePoints": [ + "U+1FAC2" + ] + }, + { + "value": "🫠", + "name": "melting face", + "codePoints": [ + "U+1FAE0" + ] + }, + { + "value": "🫡", + "name": "saluting face", + "codePoints": [ + "U+1FAE1" + ] + }, + { + "value": "🫣", + "name": "face with peeking eye", + "codePoints": [ + "U+1FAE3" + ] + }, + { + "value": "🫤", + "name": "face with diagonal mouth", + "codePoints": [ + "U+1FAE4" + ] + }, + { + "value": "🫥", + "name": "dotted line face", + "codePoints": [ + "U+1FAE5" + ] + }, + { + "value": "🫨", + "name": "shaking face", + "codePoints": [ + "U+1FAE8" + ] + }, + { + "value": "🫰", + "name": "hand with index finger and thumb crossed", + "codePoints": [ + "U+1FAF0" + ] + }, + { + "value": "🫱‍🫲", + "name": "handshake", + "codePoints": [ + "U+1FAF1", + "U+200D", + "U+1FAF2" + ] + }, + { + "value": "🫶", + "name": "heart hands", + "codePoints": [ + "U+1FAF6" + ] + } + ] + }, + { + "id": "nature", + "title": { + "en": "Animals & Nature", + "zh-Hans": "动物与自然" + }, + "icon": "emoji_tab_nature", + "type": "static", + "emojis": [ + { + "value": "⌨️", + "name": "keyboard", + "codePoints": [ + "U+2328", + "U+FE0F" + ] + }, + { + "value": "☀️", + "name": "sun", + "codePoints": [ + "U+2600", + "U+FE0F" + ] + }, + { + "value": "☁️", + "name": "cloud", + "codePoints": [ + "U+2601", + "U+FE0F" + ] + }, + { + "value": "☂️", + "name": "umbrella", + "codePoints": [ + "U+2602", + "U+FE0F" + ] + }, + { + "value": "☃️", + "name": "snowman with snowflakes", + "codePoints": [ + "U+2603", + "U+FE0F" + ] + }, + { + "value": "☄️", + "name": "comet", + "codePoints": [ + "U+2604", + "U+FE0F" + ] + }, + { + "value": "☑️", + "name": "ballot box with check", + "codePoints": [ + "U+2611", + "U+FE0F" + ] + }, + { + "value": "☔️", + "name": "umbrella with rain drops", + "codePoints": [ + "U+2614", + "U+FE0F" + ] + }, + { + "value": "☘️", + "name": "shamrock", + "codePoints": [ + "U+2618", + "U+FE0F" + ] + }, + { + "value": "☦️", + "name": "Orthodox cross", + "codePoints": [ + "U+2626", + "U+FE0F" + ] + }, + { + "value": "☪️", + "name": "star and crescent", + "codePoints": [ + "U+262A", + "U+FE0F" + ] + }, + { + "value": "⚡️", + "name": "lightning bolt", + "codePoints": [ + "U+26A1", + "U+FE0F" + ] + }, + { + "value": "⛄️", + "name": "snowman", + "codePoints": [ + "U+26C4", + "U+FE0F" + ] + }, + { + "value": "⛅️", + "name": "sun behind cloud", + "codePoints": [ + "U+26C5", + "U+FE0F" + ] + }, + { + "value": "⛈️", + "name": "cloud with lightning and rain", + "codePoints": [ + "U+26C8", + "U+FE0F" + ] + }, + { + "value": "⛰️", + "name": "mountain", + "codePoints": [ + "U+26F0", + "U+FE0F" + ] + }, + { + "value": "✖️", + "name": "multiplication symbol", + "codePoints": [ + "U+2716", + "U+FE0F" + ] + }, + { + "value": "✡️", + "name": "Star of David", + "codePoints": [ + "U+2721", + "U+FE0F" + ] + }, + { + "value": "✴️", + "name": "eight pointed star", + "codePoints": [ + "U+2734", + "U+FE0F" + ] + }, + { + "value": "❄️", + "name": "snowflake", + "codePoints": [ + "U+2744", + "U+FE0F" + ] + }, + { + "value": "⭐️", + "name": "star", + "codePoints": [ + "U+2B50", + "U+FE0F" + ] + }, + { + "value": "㊗️", + "name": "Japanese sign meaning “congratulations”", + "codePoints": [ + "U+3297", + "U+FE0F" + ] + }, + { + "value": "🀄️", + "name": "mahjong tile red dragon", + "codePoints": [ + "U+1F004", + "U+FE0F" + ] + }, + { + "value": "🆔", + "name": "identification sign", + "codePoints": [ + "U+1F194" + ] + }, + { + "value": "🈸", + "name": "Japanese sign meaning “application”", + "codePoints": [ + "U+1F238" + ] + }, + { + "value": "🌀", + "name": "cyclone", + "codePoints": [ + "U+1F300" + ] + }, + { + "value": "🌁", + "name": "bridge under fog", + "codePoints": [ + "U+1F301" + ] + }, + { + "value": "🌂", + "name": "closed umbrella", + "codePoints": [ + "U+1F302" + ] + }, + { + "value": "🌃", + "name": "night with stars", + "codePoints": [ + "U+1F303" + ] + }, + { + "value": "🌄", + "name": "sunrise over mountains", + "codePoints": [ + "U+1F304" + ] + }, + { + "value": "🌅", + "name": "sunrise", + "codePoints": [ + "U+1F305" + ] + }, + { + "value": "🌇", + "name": "sunset over buildings", + "codePoints": [ + "U+1F307" + ] + }, + { + "value": "🌈", + "name": "rainbow", + "codePoints": [ + "U+1F308" + ] + }, + { + "value": "🌊", + "name": "wave", + "codePoints": [ + "U+1F30A" + ] + }, + { + "value": "🌋", + "name": "volcano", + "codePoints": [ + "U+1F30B" + ] + }, + { + "value": "🌍", + "name": "globe showing Europe and Africa", + "codePoints": [ + "U+1F30D" + ] + }, + { + "value": "🌎", + "name": "globe showing Americas", + "codePoints": [ + "U+1F30E" + ] + }, + { + "value": "🌏", + "name": "globe showing Asia and Australia", + "codePoints": [ + "U+1F30F" + ] + }, + { + "value": "🌐", + "name": "globe with meridians", + "codePoints": [ + "U+1F310" + ] + }, + { + "value": "🌑", + "name": "new moon", + "codePoints": [ + "U+1F311" + ] + }, + { + "value": "🌒", + "name": "waxing crescent moon", + "codePoints": [ + "U+1F312" + ] + }, + { + "value": "🌓", + "name": "first quarter moon", + "codePoints": [ + "U+1F313" + ] + }, + { + "value": "🌔", + "name": "waxing gibbous moon", + "codePoints": [ + "U+1F314" + ] + }, + { + "value": "🌕", + "name": "full moon", + "codePoints": [ + "U+1F315" + ] + }, + { + "value": "🌖", + "name": "waning gibbous moon", + "codePoints": [ + "U+1F316" + ] + }, + { + "value": "🌗", + "name": "last quarter moon", + "codePoints": [ + "U+1F317" + ] + }, + { + "value": "🌘", + "name": "waning crescent moon", + "codePoints": [ + "U+1F318" + ] + }, + { + "value": "🌙", + "name": "crescent moon", + "codePoints": [ + "U+1F319" + ] + }, + { + "value": "🌚", + "name": "new moon with face", + "codePoints": [ + "U+1F31A" + ] + }, + { + "value": "🌛", + "name": "first quarter moon with face", + "codePoints": [ + "U+1F31B" + ] + }, + { + "value": "🌜", + "name": "last quarter moon with face", + "codePoints": [ + "U+1F31C" + ] + }, + { + "value": "🌝", + "name": "full moon with face", + "codePoints": [ + "U+1F31D" + ] + }, + { + "value": "🌞", + "name": "sun with face", + "codePoints": [ + "U+1F31E" + ] + }, + { + "value": "🌟", + "name": "glowing star", + "codePoints": [ + "U+1F31F" + ] + }, + { + "value": "🌠", + "name": "shooting star", + "codePoints": [ + "U+1F320" + ] + }, + { + "value": "🌤️", + "name": "sun behind small cloud", + "codePoints": [ + "U+1F324", + "U+FE0F" + ] + }, + { + "value": "🌥️", + "name": "sun behind large cloud", + "codePoints": [ + "U+1F325", + "U+FE0F" + ] + }, + { + "value": "🌦️", + "name": "sun behind rain cloud", + "codePoints": [ + "U+1F326", + "U+FE0F" + ] + }, + { + "value": "🌧️", + "name": "cloud with rain", + "codePoints": [ + "U+1F327", + "U+FE0F" + ] + }, + { + "value": "🌨️", + "name": "cloud with snow", + "codePoints": [ + "U+1F328", + "U+FE0F" + ] + }, + { + "value": "🌩️", + "name": "cloud with lightning", + "codePoints": [ + "U+1F329", + "U+FE0F" + ] + }, + { + "value": "🌪️", + "name": "tornado", + "codePoints": [ + "U+1F32A", + "U+FE0F" + ] + }, + { + "value": "🌫️", + "name": "fog", + "codePoints": [ + "U+1F32B", + "U+FE0F" + ] + }, + { + "value": "🌭", + "name": "hot dog", + "codePoints": [ + "U+1F32D" + ] + }, + { + "value": "🌰", + "name": "chestnut", + "codePoints": [ + "U+1F330" + ] + }, + { + "value": "🌱", + "name": "seedling", + "codePoints": [ + "U+1F331" + ] + }, + { + "value": "🌲", + "name": "evergreen tree", + "codePoints": [ + "U+1F332" + ] + }, + { + "value": "🌳", + "name": "tree", + "codePoints": [ + "U+1F333" + ] + }, + { + "value": "🌴", + "name": "palm tree", + "codePoints": [ + "U+1F334" + ] + }, + { + "value": "🌵", + "name": "cactus", + "codePoints": [ + "U+1F335" + ] + }, + { + "value": "🌷", + "name": "tulip", + "codePoints": [ + "U+1F337" + ] + }, + { + "value": "🌸", + "name": "cherry blossom", + "codePoints": [ + "U+1F338" + ] + }, + { + "value": "🌹", + "name": "rose", + "codePoints": [ + "U+1F339" + ] + }, + { + "value": "🌺", + "name": "hibiscus", + "codePoints": [ + "U+1F33A" + ] + }, + { + "value": "🌻", + "name": "sunflower", + "codePoints": [ + "U+1F33B" + ] + }, + { + "value": "🌼", + "name": "flower", + "codePoints": [ + "U+1F33C" + ] + }, + { + "value": "🌿", + "name": "herb", + "codePoints": [ + "U+1F33F" + ] + }, + { + "value": "🍀", + "name": "four leaf clover", + "codePoints": [ + "U+1F340" + ] + }, + { + "value": "🍁", + "name": "maple leaf", + "codePoints": [ + "U+1F341" + ] + }, + { + "value": "🍂", + "name": "fallen leaves", + "codePoints": [ + "U+1F342" + ] + }, + { + "value": "🍄", + "name": "mushroom", + "codePoints": [ + "U+1F344" + ] + }, + { + "value": "🍄‍🟫", + "name": "brown mushroom", + "codePoints": [ + "U+1F344", + "U+200D", + "U+1F7EB" + ] + }, + { + "value": "🍆", + "name": "eggplant", + "codePoints": [ + "U+1F346" + ] + }, + { + "value": "🍜", + "name": "steaming bowl", + "codePoints": [ + "U+1F35C" + ] + }, + { + "value": "🍥", + "name": "fish cake with swirl design", + "codePoints": [ + "U+1F365" + ] + }, + { + "value": "🍮", + "name": "custard", + "codePoints": [ + "U+1F36E" + ] + }, + { + "value": "🍱", + "name": "bento box", + "codePoints": [ + "U+1F371" + ] + }, + { + "value": "🍺", + "name": "beer mug", + "codePoints": [ + "U+1F37A" + ] + }, + { + "value": "🍻", + "name": "clinking beer mugs", + "codePoints": [ + "U+1F37B" + ] + }, + { + "value": "🎃", + "name": "jack-o-lantern", + "codePoints": [ + "U+1F383" + ] + }, + { + "value": "🎄", + "name": "Christmas tree", + "codePoints": [ + "U+1F384" + ] + }, + { + "value": "🎅", + "name": "Santa Claus", + "codePoints": [ + "U+1F385" + ] + }, + { + "value": "🎋", + "name": "tanabata tree", + "codePoints": [ + "U+1F38B" + ] + }, + { + "value": "🎍", + "name": "pine decoration", + "codePoints": [ + "U+1F38D" + ] + }, + { + "value": "🎑", + "name": "moon viewing ceremony", + "codePoints": [ + "U+1F391" + ] + }, + { + "value": "🎠", + "name": "carousel horse", + "codePoints": [ + "U+1F3A0" + ] + }, + { + "value": "🎣", + "name": "fishing pole and fish", + "codePoints": [ + "U+1F3A3" + ] + }, + { + "value": "🎬", + "name": "clapper board", + "codePoints": [ + "U+1F3AC" + ] + }, + { + "value": "🎳", + "name": "bowling ball and pins", + "codePoints": [ + "U+1F3B3" + ] + }, + { + "value": "🎴", + "name": "flower playing cards", + "codePoints": [ + "U+1F3B4" + ] + }, + { + "value": "🎹", + "name": "musical keyboard", + "codePoints": [ + "U+1F3B9" + ] + }, + { + "value": "🏂", + "name": "snowboarder", + "codePoints": [ + "U+1F3C2" + ] + }, + { + "value": "🏇", + "name": "jockey on racing horse", + "codePoints": [ + "U+1F3C7" + ] + }, + { + "value": "🏏", + "name": "cricket bat and ball", + "codePoints": [ + "U+1F3CF" + ] + }, + { + "value": "🏔️", + "name": "snow capped mountain", + "codePoints": [ + "U+1F3D4", + "U+FE0F" + ] + }, + { + "value": "🏮", + "name": "izakaya lantern", + "codePoints": [ + "U+1F3EE" + ] + }, + { + "value": "🏵️", + "name": "rosette", + "codePoints": [ + "U+1F3F5", + "U+FE0F" + ] + }, + { + "value": "🐀", + "name": "rat", + "codePoints": [ + "U+1F400" + ] + }, + { + "value": "🐁", + "name": "mouse", + "codePoints": [ + "U+1F401" + ] + }, + { + "value": "🐂", + "name": "ox", + "codePoints": [ + "U+1F402" + ] + }, + { + "value": "🐃", + "name": "water buffalo", + "codePoints": [ + "U+1F403" + ] + }, + { + "value": "🐄", + "name": "cow", + "codePoints": [ + "U+1F404" + ] + }, + { + "value": "🐅", + "name": "tiger", + "codePoints": [ + "U+1F405" + ] + }, + { + "value": "🐆", + "name": "leopard", + "codePoints": [ + "U+1F406" + ] + }, + { + "value": "🐇", + "name": "rabbit", + "codePoints": [ + "U+1F407" + ] + }, + { + "value": "🐈", + "name": "cat", + "codePoints": [ + "U+1F408" + ] + }, + { + "value": "🐈‍⬛", + "name": "black cat", + "codePoints": [ + "U+1F408", + "U+200D", + "U+2B1B" + ] + }, + { + "value": "🐉", + "name": "dragon", + "codePoints": [ + "U+1F409" + ] + }, + { + "value": "🐊", + "name": "crocodile", + "codePoints": [ + "U+1F40A" + ] + }, + { + "value": "🐋", + "name": "whale", + "codePoints": [ + "U+1F40B" + ] + }, + { + "value": "🐌", + "name": "snail", + "codePoints": [ + "U+1F40C" + ] + }, + { + "value": "🐍", + "name": "snake", + "codePoints": [ + "U+1F40D" + ] + }, + { + "value": "🐎", + "name": "horse", + "codePoints": [ + "U+1F40E" + ] + }, + { + "value": "🐒", + "name": "monkey", + "codePoints": [ + "U+1F412" + ] + }, + { + "value": "🐓", + "name": "rooster", + "codePoints": [ + "U+1F413" + ] + }, + { + "value": "🐔", + "name": "chicken", + "codePoints": [ + "U+1F414" + ] + }, + { + "value": "🐕", + "name": "dog", + "codePoints": [ + "U+1F415" + ] + }, + { + "value": "🐕‍🦺", + "name": "service dog", + "codePoints": [ + "U+1F415", + "U+200D", + "U+1F9BA" + ] + }, + { + "value": "🐖", + "name": "pig", + "codePoints": [ + "U+1F416" + ] + }, + { + "value": "🐗", + "name": "boar", + "codePoints": [ + "U+1F417" + ] + }, + { + "value": "🐘", + "name": "elephant", + "codePoints": [ + "U+1F418" + ] + }, + { + "value": "🐙", + "name": "octopus", + "codePoints": [ + "U+1F419" + ] + }, + { + "value": "🐚", + "name": "seashell", + "codePoints": [ + "U+1F41A" + ] + }, + { + "value": "🐛", + "name": "bug", + "codePoints": [ + "U+1F41B" + ] + }, + { + "value": "🐜", + "name": "ant", + "codePoints": [ + "U+1F41C" + ] + }, + { + "value": "🐝", + "name": "bee", + "codePoints": [ + "U+1F41D" + ] + }, + { + "value": "🐞", + "name": "ladybug", + "codePoints": [ + "U+1F41E" + ] + }, + { + "value": "🐟", + "name": "fish", + "codePoints": [ + "U+1F41F" + ] + }, + { + "value": "🐠", + "name": "tropical fish", + "codePoints": [ + "U+1F420" + ] + }, + { + "value": "🐡", + "name": "blowfish", + "codePoints": [ + "U+1F421" + ] + }, + { + "value": "🐢", + "name": "turtle", + "codePoints": [ + "U+1F422" + ] + }, + { + "value": "🐣", + "name": "hatching chick", + "codePoints": [ + "U+1F423" + ] + }, + { + "value": "🐤", + "name": "baby chick", + "codePoints": [ + "U+1F424" + ] + }, + { + "value": "🐥", + "name": "standing chick", + "codePoints": [ + "U+1F425" + ] + }, + { + "value": "🐦", + "name": "bird", + "codePoints": [ + "U+1F426" + ] + }, + { + "value": "🐦‍⬛", + "name": "black bird", + "codePoints": [ + "U+1F426", + "U+200D", + "U+2B1B" + ] + }, + { + "value": "🐧", + "name": "penguin", + "codePoints": [ + "U+1F427" + ] + }, + { + "value": "🐨", + "name": "koala face", + "codePoints": [ + "U+1F428" + ] + }, + { + "value": "🐩", + "name": "poodle", + "codePoints": [ + "U+1F429" + ] + }, + { + "value": "🐪", + "name": "camel", + "codePoints": [ + "U+1F42A" + ] + }, + { + "value": "🐫", + "name": "two-hump camel", + "codePoints": [ + "U+1F42B" + ] + }, + { + "value": "🐬", + "name": "dolphin", + "codePoints": [ + "U+1F42C" + ] + }, + { + "value": "🐭", + "name": "mouse face", + "codePoints": [ + "U+1F42D" + ] + }, + { + "value": "🐮", + "name": "cow face", + "codePoints": [ + "U+1F42E" + ] + }, + { + "value": "🐯", + "name": "tiger face", + "codePoints": [ + "U+1F42F" + ] + }, + { + "value": "🐰", + "name": "rabbit face", + "codePoints": [ + "U+1F430" + ] + }, + { + "value": "🐱", + "name": "cat face", + "codePoints": [ + "U+1F431" + ] + }, + { + "value": "🐲", + "name": "dragon head", + "codePoints": [ + "U+1F432" + ] + }, + { + "value": "🐳", + "name": "spouting whale", + "codePoints": [ + "U+1F433" + ] + }, + { + "value": "🐴", + "name": "horse head", + "codePoints": [ + "U+1F434" + ] + }, + { + "value": "🐵", + "name": "monkey face", + "codePoints": [ + "U+1F435" + ] + }, + { + "value": "🐶", + "name": "dog face", + "codePoints": [ + "U+1F436" + ] + }, + { + "value": "🐷", + "name": "pig face", + "codePoints": [ + "U+1F437" + ] + }, + { + "value": "🐸", + "name": "frog face", + "codePoints": [ + "U+1F438" + ] + }, + { + "value": "🐹", + "name": "hamster face", + "codePoints": [ + "U+1F439" + ] + }, + { + "value": "🐺", + "name": "wolf", + "codePoints": [ + "U+1F43A" + ] + }, + { + "value": "🐻", + "name": "bear face", + "codePoints": [ + "U+1F43B" + ] + }, + { + "value": "🐻‍❄️", + "name": "polar bear", + "codePoints": [ + "U+1F43B", + "U+200D", + "U+2744", + "U+FE0F" + ] + }, + { + "value": "🐼", + "name": "panda face", + "codePoints": [ + "U+1F43C" + ] + }, + { + "value": "🐽", + "name": "pig nose", + "codePoints": [ + "U+1F43D" + ] + }, + { + "value": "🐿️", + "name": "chipmunk", + "codePoints": [ + "U+1F43F", + "U+FE0F" + ] + }, + { + "value": "👑", + "name": "crown", + "codePoints": [ + "U+1F451" + ] + }, + { + "value": "💁", + "name": "information desk attendant", + "codePoints": [ + "U+1F481" + ] + }, + { + "value": "💐", + "name": "bouquet", + "codePoints": [ + "U+1F490" + ] + }, + { + "value": "💟", + "name": "heart decoration", + "codePoints": [ + "U+1F49F" + ] + }, + { + "value": "💮", + "name": "white flower", + "codePoints": [ + "U+1F4AE" + ] + }, + { + "value": "📋", + "name": "clipboard", + "codePoints": [ + "U+1F4CB" + ] + }, + { + "value": "📔", + "name": "notebook with decorative cover", + "codePoints": [ + "U+1F4D4" + ] + }, + { + "value": "📡", + "name": "satellite antenna", + "codePoints": [ + "U+1F4E1" + ] + }, + { + "value": "📤", + "name": "outbox tray", + "codePoints": [ + "U+1F4E4" + ] + }, + { + "value": "📥", + "name": "inbox tray", + "codePoints": [ + "U+1F4E5" + ] + }, + { + "value": "📮", + "name": "postbox", + "codePoints": [ + "U+1F4EE" + ] + }, + { + "value": "📳", + "name": "vibration mode", + "codePoints": [ + "U+1F4F3" + ] + }, + { + "value": "🔋", + "name": "battery", + "codePoints": [ + "U+1F50B" + ] + }, + { + "value": "🔯", + "name": "six pointed star with middle dot", + "codePoints": [ + "U+1F52F" + ] + }, + { + "value": "🕊️", + "name": "dove", + "codePoints": [ + "U+1F54A", + "U+FE0F" + ] + }, + { + "value": "🕰️", + "name": "mantelpiece clock", + "codePoints": [ + "U+1F570", + "U+FE0F" + ] + }, + { + "value": "🕶️", + "name": "sunglasses", + "codePoints": [ + "U+1F576", + "U+FE0F" + ] + }, + { + "value": "🕷️", + "name": "spider", + "codePoints": [ + "U+1F577", + "U+FE0F" + ] + }, + { + "value": "🕸️", + "name": "spiderweb", + "codePoints": [ + "U+1F578", + "U+FE0F" + ] + }, + { + "value": "🖱️", + "name": "computer mouse", + "codePoints": [ + "U+1F5B1", + "U+FE0F" + ] + }, + { + "value": "🗃️", + "name": "card file box", + "codePoints": [ + "U+1F5C3", + "U+FE0F" + ] + }, + { + "value": "🗳️", + "name": "ballot box with ballot", + "codePoints": [ + "U+1F5F3", + "U+FE0F" + ] + }, + { + "value": "😎", + "name": "smiling face with sunglasses", + "codePoints": [ + "U+1F60E" + ] + }, + { + "value": "😶‍🌫️", + "name": "face in clouds", + "codePoints": [ + "U+1F636", + "U+200D", + "U+1F32B", + "U+FE0F" + ] + }, + { + "value": "😸", + "name": "grinning cat face", + "codePoints": [ + "U+1F638" + ] + }, + { + "value": "😹", + "name": "cat face with tears of joy", + "codePoints": [ + "U+1F639" + ] + }, + { + "value": "😺", + "name": "happy cat face", + "codePoints": [ + "U+1F63A" + ] + }, + { + "value": "😻", + "name": "smiling cat face with heart-eyes", + "codePoints": [ + "U+1F63B" + ] + }, + { + "value": "😼", + "name": "smirking cat face", + "codePoints": [ + "U+1F63C" + ] + }, + { + "value": "😽", + "name": "kissing cat face", + "codePoints": [ + "U+1F63D" + ] + }, + { + "value": "😾", + "name": "pouting cat face", + "codePoints": [ + "U+1F63E" + ] + }, + { + "value": "😿", + "name": "crying cat face", + "codePoints": [ + "U+1F63F" + ] + }, + { + "value": "🙀", + "name": "cat face screaming in fear", + "codePoints": [ + "U+1F640" + ] + }, + { + "value": "🙈", + "name": "see-no-evil monkey", + "codePoints": [ + "U+1F648" + ] + }, + { + "value": "🙉", + "name": "hear-no-evil monkey", + "codePoints": [ + "U+1F649" + ] + }, + { + "value": "🙊", + "name": "speak-no-evil monkey", + "codePoints": [ + "U+1F64A" + ] + }, + { + "value": "🙌", + "name": "hands raised in celebration", + "codePoints": [ + "U+1F64C" + ] + }, + { + "value": "🚄", + "name": "high-speed train", + "codePoints": [ + "U+1F684" + ] + }, + { + "value": "🚅", + "name": "high-speed train with bullet nose", + "codePoints": [ + "U+1F685" + ] + }, + { + "value": "🚆", + "name": "train", + "codePoints": [ + "U+1F686" + ] + }, + { + "value": "🚇", + "name": "subway train", + "codePoints": [ + "U+1F687" + ] + }, + { + "value": "🚞", + "name": "mountain railway", + "codePoints": [ + "U+1F69E" + ] + }, + { + "value": "🚠", + "name": "mountain cableway", + "codePoints": [ + "U+1F6A0" + ] + }, + { + "value": "🚵", + "name": "mountain biker", + "codePoints": [ + "U+1F6B5" + ] + }, + { + "value": "🚵‍♀️", + "name": "woman mountain biker", + "codePoints": [ + "U+1F6B5", + "U+200D", + "U+2640", + "U+FE0F" + ] + }, + { + "value": "🚵‍♂️", + "name": "man mountain biker", + "codePoints": [ + "U+1F6B5", + "U+200D", + "U+2642", + "U+FE0F" + ] + }, + { + "value": "🛀", + "name": "person taking a bath", + "codePoints": [ + "U+1F6C0" + ] + }, + { + "value": "🛁", + "name": "bathtub", + "codePoints": [ + "U+1F6C1" + ] + }, + { + "value": "🛹", + "name": "skateboard", + "codePoints": [ + "U+1F6F9" + ] + }, + { + "value": "🤠", + "name": "cowboy face", + "codePoints": [ + "U+1F920" + ] + }, + { + "value": "🤩", + "name": "face with starry eyes", + "codePoints": [ + "U+1F929" + ] + }, + { + "value": "🤰", + "name": "pregnant woman", + "codePoints": [ + "U+1F930" + ] + }, + { + "value": "🥀", + "name": "wilted rose", + "codePoints": [ + "U+1F940" + ] + }, + { + "value": "🥊", + "name": "boxing glove", + "codePoints": [ + "U+1F94A" + ] + }, + { + "value": "🥏", + "name": "flying disc", + "codePoints": [ + "U+1F94F" + ] + }, + { + "value": "🥐", + "name": "croissant", + "codePoints": [ + "U+1F950" + ] + }, + { + "value": "🥡", + "name": "takeout box", + "codePoints": [ + "U+1F961" + ] + }, + { + "value": "🥣", + "name": "bowl with spoon", + "codePoints": [ + "U+1F963" + ] + }, + { + "value": "🥬", + "name": "leafy greens", + "codePoints": [ + "U+1F96C" + ] + }, + { + "value": "🥮", + "name": "mooncake", + "codePoints": [ + "U+1F96E" + ] + }, + { + "value": "🦁", + "name": "lion face", + "codePoints": [ + "U+1F981" + ] + }, + { + "value": "🦂", + "name": "scorpion", + "codePoints": [ + "U+1F982" + ] + }, + { + "value": "🦃", + "name": "turkey", + "codePoints": [ + "U+1F983" + ] + }, + { + "value": "🦄", + "name": "unicorn", + "codePoints": [ + "U+1F984" + ] + }, + { + "value": "🦅", + "name": "eagle", + "codePoints": [ + "U+1F985" + ] + }, + { + "value": "🦆", + "name": "duck", + "codePoints": [ + "U+1F986" + ] + }, + { + "value": "🦇", + "name": "bat", + "codePoints": [ + "U+1F987" + ] + }, + { + "value": "🦈", + "name": "shark", + "codePoints": [ + "U+1F988" + ] + }, + { + "value": "🦉", + "name": "owl", + "codePoints": [ + "U+1F989" + ] + }, + { + "value": "🦊", + "name": "fox face", + "codePoints": [ + "U+1F98A" + ] + }, + { + "value": "🦋", + "name": "butterfly", + "codePoints": [ + "U+1F98B" + ] + }, + { + "value": "🦌", + "name": "deer", + "codePoints": [ + "U+1F98C" + ] + }, + { + "value": "🦍", + "name": "gorilla", + "codePoints": [ + "U+1F98D" + ] + }, + { + "value": "🦎", + "name": "lizard", + "codePoints": [ + "U+1F98E" + ] + }, + { + "value": "🦏", + "name": "rhinoceros", + "codePoints": [ + "U+1F98F" + ] + }, + { + "value": "🦒", + "name": "giraffe", + "codePoints": [ + "U+1F992" + ] + }, + { + "value": "🦔", + "name": "hedgehog", + "codePoints": [ + "U+1F994" + ] + }, + { + "value": "🦗", + "name": "cricket", + "codePoints": [ + "U+1F997" + ] + }, + { + "value": "🦘", + "name": "kangaroo", + "codePoints": [ + "U+1F998" + ] + }, + { + "value": "🦙", + "name": "llama", + "codePoints": [ + "U+1F999" + ] + }, + { + "value": "🦚", + "name": "peacock", + "codePoints": [ + "U+1F99A" + ] + }, + { + "value": "🦛", + "name": "hippopotamus", + "codePoints": [ + "U+1F99B" + ] + }, + { + "value": "🦜", + "name": "parrot", + "codePoints": [ + "U+1F99C" + ] + }, + { + "value": "🦟", + "name": "mosquito", + "codePoints": [ + "U+1F99F" + ] + }, + { + "value": "🦠", + "name": "microbe", + "codePoints": [ + "U+1F9A0" + ] + }, + { + "value": "🦡", + "name": "badger", + "codePoints": [ + "U+1F9A1" + ] + }, + { + "value": "🦢", + "name": "swan", + "codePoints": [ + "U+1F9A2" + ] + }, + { + "value": "🦣", + "name": "mammoth", + "codePoints": [ + "U+1F9A3" + ] + }, + { + "value": "🦤", + "name": "dodo bird", + "codePoints": [ + "U+1F9A4" + ] + }, + { + "value": "🦥", + "name": "sloth", + "codePoints": [ + "U+1F9A5" + ] + }, + { + "value": "🦦", + "name": "otter", + "codePoints": [ + "U+1F9A6" + ] + }, + { + "value": "🦧", + "name": "orangutan", + "codePoints": [ + "U+1F9A7" + ] + }, + { + "value": "🦨", + "name": "skunk", + "codePoints": [ + "U+1F9A8" + ] + }, + { + "value": "🦩", + "name": "flamingo", + "codePoints": [ + "U+1F9A9" + ] + }, + { + "value": "🦫", + "name": "beaver", + "codePoints": [ + "U+1F9AB" + ] + }, + { + "value": "🦬", + "name": "bison", + "codePoints": [ + "U+1F9AC" + ] + }, + { + "value": "🦭", + "name": "seal", + "codePoints": [ + "U+1F9AD" + ] + }, + { + "value": "🦮", + "name": "guide dog", + "codePoints": [ + "U+1F9AE" + ] + }, + { + "value": "🧃", + "name": "juice box", + "codePoints": [ + "U+1F9C3" + ] + }, + { + "value": "🧔", + "name": "bearded person", + "codePoints": [ + "U+1F9D4" + ] + }, + { + "value": "🧔‍♀️", + "name": "bearded woman", + "codePoints": [ + "U+1F9D4", + "U+200D", + "U+2640", + "U+FE0F" + ] + }, + { + "value": "🧔‍♂️", + "name": "bearded man", + "codePoints": [ + "U+1F9D4", + "U+200D", + "U+2642", + "U+FE0F" + ] + }, + { + "value": "🧠", + "name": "brain", + "codePoints": [ + "U+1F9E0" + ] + }, + { + "value": "🧰", + "name": "toolbox", + "codePoints": [ + "U+1F9F0" + ] + }, + { + "value": "🧸", + "name": "teddy bear", + "codePoints": [ + "U+1F9F8" + ] + }, + { + "value": "🪤", + "name": "mouse trap", + "codePoints": [ + "U+1FAA4" + ] + }, + { + "value": "🪪", + "name": "identification card", + "codePoints": [ + "U+1FAAA" + ] + }, + { + "value": "🪫", + "name": "low battery", + "codePoints": [ + "U+1FAAB" + ] + }, + { + "value": "🪰", + "name": "fly", + "codePoints": [ + "U+1FAB0" + ] + }, + { + "value": "🪱", + "name": "worm", + "codePoints": [ + "U+1FAB1" + ] + }, + { + "value": "🪲", + "name": "beetle", + "codePoints": [ + "U+1FAB2" + ] + }, + { + "value": "🪳", + "name": "cockroach", + "codePoints": [ + "U+1FAB3" + ] + }, + { + "value": "🪴", + "name": "potted plant", + "codePoints": [ + "U+1FAB4" + ] + }, + { + "value": "🪶", + "name": "feather", + "codePoints": [ + "U+1FAB6" + ] + }, + { + "value": "🪸", + "name": "coral", + "codePoints": [ + "U+1FAB8" + ] + }, + { + "value": "🪼", + "name": "jellyfish", + "codePoints": [ + "U+1FABC" + ] + }, + { + "value": "🪾", + "name": "leafless tree", + "codePoints": [ + "U+1FABE" + ] + }, + { + "value": "🫃", + "name": "pregnant man", + "codePoints": [ + "U+1FAC3" + ] + }, + { + "value": "🫄", + "name": "pregnant person", + "codePoints": [ + "U+1FAC4" + ] + }, + { + "value": "🫅", + "name": "person with crown", + "codePoints": [ + "U+1FAC5" + ] + }, + { + "value": "🫎", + "name": "moose face", + "codePoints": [ + "U+1FACE" + ] + } + ] + }, + { + "id": "food", + "title": { + "en": "Food & Drink", + "zh-Hans": "食物与饮料" + }, + "icon": "emoji_tab_food", + "type": "static", + "emojis": [ + { + "value": "⌛️", + "name": "hourglass", + "codePoints": [ + "U+231B", + "U+FE0F" + ] + }, + { + "value": "⏳", + "name": "hourglass with flowing sand", + "codePoints": [ + "U+23F3" + ] + }, + { + "value": "☕️", + "name": "hot beverage", + "codePoints": [ + "U+2615", + "U+FE0F" + ] + }, + { + "value": "♑️", + "name": "Capricorn", + "codePoints": [ + "U+2651", + "U+FE0F" + ] + }, + { + "value": "⚒️", + "name": "hammer and pick", + "codePoints": [ + "U+2692", + "U+FE0F" + ] + }, + { + "value": "🌌", + "name": "Milky Way", + "codePoints": [ + "U+1F30C" + ] + }, + { + "value": "🌮", + "name": "taco", + "codePoints": [ + "U+1F32E" + ] + }, + { + "value": "🌯", + "name": "burrito", + "codePoints": [ + "U+1F32F" + ] + }, + { + "value": "🌶️", + "name": "hot pepper", + "codePoints": [ + "U+1F336", + "U+FE0F" + ] + }, + { + "value": "🌽", + "name": "ear of corn", + "codePoints": [ + "U+1F33D" + ] + }, + { + "value": "🌾", + "name": "ear of rice", + "codePoints": [ + "U+1F33E" + ] + }, + { + "value": "🍅", + "name": "tomato", + "codePoints": [ + "U+1F345" + ] + }, + { + "value": "🍇", + "name": "grapes", + "codePoints": [ + "U+1F347" + ] + }, + { + "value": "🍈", + "name": "melon", + "codePoints": [ + "U+1F348" + ] + }, + { + "value": "🍉", + "name": "watermelon", + "codePoints": [ + "U+1F349" + ] + }, + { + "value": "🍊", + "name": "tangerine", + "codePoints": [ + "U+1F34A" + ] + }, + { + "value": "🍋", + "name": "lemon", + "codePoints": [ + "U+1F34B" + ] + }, + { + "value": "🍋‍🟩", + "name": "lime", + "codePoints": [ + "U+1F34B", + "U+200D", + "U+1F7E9" + ] + }, + { + "value": "🍌", + "name": "banana", + "codePoints": [ + "U+1F34C" + ] + }, + { + "value": "🍍", + "name": "pineapple", + "codePoints": [ + "U+1F34D" + ] + }, + { + "value": "🍎", + "name": "red apple", + "codePoints": [ + "U+1F34E" + ] + }, + { + "value": "🍏", + "name": "green apple", + "codePoints": [ + "U+1F34F" + ] + }, + { + "value": "🍐", + "name": "pear", + "codePoints": [ + "U+1F350" + ] + }, + { + "value": "🍑", + "name": "peach", + "codePoints": [ + "U+1F351" + ] + }, + { + "value": "🍒", + "name": "cherries", + "codePoints": [ + "U+1F352" + ] + }, + { + "value": "🍓", + "name": "strawberry", + "codePoints": [ + "U+1F353" + ] + }, + { + "value": "🍔", + "name": "hamburger", + "codePoints": [ + "U+1F354" + ] + }, + { + "value": "🍕", + "name": "pizza", + "codePoints": [ + "U+1F355" + ] + }, + { + "value": "🍖", + "name": "meat on bone", + "codePoints": [ + "U+1F356" + ] + }, + { + "value": "🍗", + "name": "poultry leg", + "codePoints": [ + "U+1F357" + ] + }, + { + "value": "🍘", + "name": "rice cracker", + "codePoints": [ + "U+1F358" + ] + }, + { + "value": "🍙", + "name": "rice ball", + "codePoints": [ + "U+1F359" + ] + }, + { + "value": "🍚", + "name": "cooked rice", + "codePoints": [ + "U+1F35A" + ] + }, + { + "value": "🍛", + "name": "curry and rice", + "codePoints": [ + "U+1F35B" + ] + }, + { + "value": "🍝", + "name": "spaghetti", + "codePoints": [ + "U+1F35D" + ] + }, + { + "value": "🍞", + "name": "bread", + "codePoints": [ + "U+1F35E" + ] + }, + { + "value": "🍟", + "name": "french fries", + "codePoints": [ + "U+1F35F" + ] + }, + { + "value": "🍠", + "name": "roasted sweet potato", + "codePoints": [ + "U+1F360" + ] + }, + { + "value": "🍡", + "name": "dango", + "codePoints": [ + "U+1F361" + ] + }, + { + "value": "🍢", + "name": "oden", + "codePoints": [ + "U+1F362" + ] + }, + { + "value": "🍣", + "name": "sushi", + "codePoints": [ + "U+1F363" + ] + }, + { + "value": "🍤", + "name": "fried shrimp", + "codePoints": [ + "U+1F364" + ] + }, + { + "value": "🍦", + "name": "soft ice cream", + "codePoints": [ + "U+1F366" + ] + }, + { + "value": "🍧", + "name": "shaved ice", + "codePoints": [ + "U+1F367" + ] + }, + { + "value": "🍨", + "name": "ice cream", + "codePoints": [ + "U+1F368" + ] + }, + { + "value": "🍩", + "name": "doughnut", + "codePoints": [ + "U+1F369" + ] + }, + { + "value": "🍪", + "name": "cookie", + "codePoints": [ + "U+1F36A" + ] + }, + { + "value": "🍫", + "name": "chocolate bar", + "codePoints": [ + "U+1F36B" + ] + }, + { + "value": "🍬", + "name": "candy", + "codePoints": [ + "U+1F36C" + ] + }, + { + "value": "🍭", + "name": "lollipop", + "codePoints": [ + "U+1F36D" + ] + }, + { + "value": "🍯", + "name": "honey pot", + "codePoints": [ + "U+1F36F" + ] + }, + { + "value": "🍰", + "name": "shortcake", + "codePoints": [ + "U+1F370" + ] + }, + { + "value": "🍲", + "name": "pot of food", + "codePoints": [ + "U+1F372" + ] + }, + { + "value": "🍴", + "name": "fork and knife", + "codePoints": [ + "U+1F374" + ] + }, + { + "value": "🍵", + "name": "teacup without handle", + "codePoints": [ + "U+1F375" + ] + }, + { + "value": "🍶", + "name": "sake bottle and cup", + "codePoints": [ + "U+1F376" + ] + }, + { + "value": "🍷", + "name": "wine glass", + "codePoints": [ + "U+1F377" + ] + }, + { + "value": "🍸", + "name": "cocktail glass", + "codePoints": [ + "U+1F378" + ] + }, + { + "value": "🍹", + "name": "tropical drink", + "codePoints": [ + "U+1F379" + ] + }, + { + "value": "🍼", + "name": "baby bottle", + "codePoints": [ + "U+1F37C" + ] + }, + { + "value": "🍽️", + "name": "fork and knife with plate", + "codePoints": [ + "U+1F37D", + "U+FE0F" + ] + }, + { + "value": "🍾", + "name": "bottle with popping cork", + "codePoints": [ + "U+1F37E" + ] + }, + { + "value": "🍿", + "name": "popcorn", + "codePoints": [ + "U+1F37F" + ] + }, + { + "value": "🎂", + "name": "birthday cake", + "codePoints": [ + "U+1F382" + ] + }, + { + "value": "👓", + "name": "glasses", + "codePoints": [ + "U+1F453" + ] + }, + { + "value": "👨‍🏫", + "name": "man teacher", + "codePoints": [ + "U+1F468", + "U+200D", + "U+1F3EB" + ] + }, + { + "value": "👩‍🏫", + "name": "woman teacher", + "codePoints": [ + "U+1F469", + "U+200D", + "U+1F3EB" + ] + }, + { + "value": "📆", + "name": "tear-off calendar", + "codePoints": [ + "U+1F4C6" + ] + }, + { + "value": "📙", + "name": "orange textbook", + "codePoints": [ + "U+1F4D9" + ] + }, + { + "value": "🔍", + "name": "left-pointing magnifying glass", + "codePoints": [ + "U+1F50D" + ] + }, + { + "value": "🔎", + "name": "right-pointing magnifying glass", + "codePoints": [ + "U+1F50E" + ] + }, + { + "value": "🔨", + "name": "hammer", + "codePoints": [ + "U+1F528" + ] + }, + { + "value": "🔶", + "name": "large orange diamond", + "codePoints": [ + "U+1F536" + ] + }, + { + "value": "🔸", + "name": "small orange diamond", + "codePoints": [ + "U+1F538" + ] + }, + { + "value": "😂", + "name": "face with tears of joy", + "codePoints": [ + "U+1F602" + ] + }, + { + "value": "😤", + "name": "face with steam from nose", + "codePoints": [ + "U+1F624" + ] + }, + { + "value": "🚂", + "name": "steam locomotive", + "codePoints": [ + "U+1F682" + ] + }, + { + "value": "🛠️", + "name": "hammer and wrench", + "codePoints": [ + "U+1F6E0", + "U+FE0F" + ] + }, + { + "value": "🟠", + "name": "orange circle", + "codePoints": [ + "U+1F7E0" + ] + }, + { + "value": "🟧", + "name": "orange square", + "codePoints": [ + "U+1F7E7" + ] + }, + { + "value": "🤓", + "name": "smiling face with glasses", + "codePoints": [ + "U+1F913" + ] + }, + { + "value": "🥂", + "name": "clinking glasses", + "codePoints": [ + "U+1F942" + ] + }, + { + "value": "🥃", + "name": "tumbler glass", + "codePoints": [ + "U+1F943" + ] + }, + { + "value": "🥄", + "name": "spoon", + "codePoints": [ + "U+1F944" + ] + }, + { + "value": "🥑", + "name": "avocado", + "codePoints": [ + "U+1F951" + ] + }, + { + "value": "🥒", + "name": "cucumber", + "codePoints": [ + "U+1F952" + ] + }, + { + "value": "🥓", + "name": "bacon", + "codePoints": [ + "U+1F953" + ] + }, + { + "value": "🥔", + "name": "potato", + "codePoints": [ + "U+1F954" + ] + }, + { + "value": "🥕", + "name": "carrot", + "codePoints": [ + "U+1F955" + ] + }, + { + "value": "🥖", + "name": "baguette", + "codePoints": [ + "U+1F956" + ] + }, + { + "value": "🥗", + "name": "green salad", + "codePoints": [ + "U+1F957" + ] + }, + { + "value": "🥘", + "name": "pan of food", + "codePoints": [ + "U+1F958" + ] + }, + { + "value": "🥙", + "name": "pita sandwich", + "codePoints": [ + "U+1F959" + ] + }, + { + "value": "🥚", + "name": "egg", + "codePoints": [ + "U+1F95A" + ] + }, + { + "value": "🥛", + "name": "glass of milk", + "codePoints": [ + "U+1F95B" + ] + }, + { + "value": "🥜", + "name": "peanuts", + "codePoints": [ + "U+1F95C" + ] + }, + { + "value": "🥝", + "name": "kiwi", + "codePoints": [ + "U+1F95D" + ] + }, + { + "value": "🥞", + "name": "pancakes", + "codePoints": [ + "U+1F95E" + ] + }, + { + "value": "🥟", + "name": "dumpling", + "codePoints": [ + "U+1F95F" + ] + }, + { + "value": "🥠", + "name": "fortune cookie", + "codePoints": [ + "U+1F960" + ] + }, + { + "value": "🥢", + "name": "chopsticks", + "codePoints": [ + "U+1F962" + ] + }, + { + "value": "🥤", + "name": "to-go cup", + "codePoints": [ + "U+1F964" + ] + }, + { + "value": "🥥", + "name": "coconut", + "codePoints": [ + "U+1F965" + ] + }, + { + "value": "🥧", + "name": "pie", + "codePoints": [ + "U+1F967" + ] + }, + { + "value": "🥨", + "name": "pretzel", + "codePoints": [ + "U+1F968" + ] + }, + { + "value": "🥩", + "name": "steak", + "codePoints": [ + "U+1F969" + ] + }, + { + "value": "🥪", + "name": "sandwich", + "codePoints": [ + "U+1F96A" + ] + }, + { + "value": "🥫", + "name": "canned food", + "codePoints": [ + "U+1F96B" + ] + }, + { + "value": "🥭", + "name": "mango", + "codePoints": [ + "U+1F96D" + ] + }, + { + "value": "🥯", + "name": "bagel", + "codePoints": [ + "U+1F96F" + ] + }, + { + "value": "🥲", + "name": "smiling face with tear", + "codePoints": [ + "U+1F972" + ] + }, + { + "value": "🥹", + "name": "smiling face holding back tears", + "codePoints": [ + "U+1F979" + ] + }, + { + "value": "🦀", + "name": "crab", + "codePoints": [ + "U+1F980" + ] + }, + { + "value": "🦐", + "name": "shrimp", + "codePoints": [ + "U+1F990" + ] + }, + { + "value": "🦑", + "name": "squid", + "codePoints": [ + "U+1F991" + ] + }, + { + "value": "🦞", + "name": "lobster", + "codePoints": [ + "U+1F99E" + ] + }, + { + "value": "🦪", + "name": "oyster", + "codePoints": [ + "U+1F9AA" + ] + }, + { + "value": "🧀", + "name": "cheese wedge", + "codePoints": [ + "U+1F9C0" + ] + }, + { + "value": "🧁", + "name": "cupcake", + "codePoints": [ + "U+1F9C1" + ] + }, + { + "value": "🧂", + "name": "salt", + "codePoints": [ + "U+1F9C2" + ] + }, + { + "value": "🧄", + "name": "garlic", + "codePoints": [ + "U+1F9C4" + ] + }, + { + "value": "🧅", + "name": "onion", + "codePoints": [ + "U+1F9C5" + ] + }, + { + "value": "🧇", + "name": "waffle", + "codePoints": [ + "U+1F9C7" + ] + }, + { + "value": "🧈", + "name": "butter", + "codePoints": [ + "U+1F9C8" + ] + }, + { + "value": "🧋", + "name": "boba tea", + "codePoints": [ + "U+1F9CB" + ] + }, + { + "value": "🧑‍🏫", + "name": "teacher", + "codePoints": [ + "U+1F9D1", + "U+200D", + "U+1F3EB" + ] + }, + { + "value": "🧡", + "name": "orange heart", + "codePoints": [ + "U+1F9E1" + ] + }, + { + "value": "🧨", + "name": "firecracker", + "codePoints": [ + "U+1F9E8" + ] + }, + { + "value": "🧩", + "name": "puzzle piece", + "codePoints": [ + "U+1F9E9" + ] + }, + { + "value": "🧴", + "name": "lotion bottle", + "codePoints": [ + "U+1F9F4" + ] + }, + { + "value": "🩱", + "name": "one-piece swimsuit", + "codePoints": [ + "U+1FA71" + ] + }, + { + "value": "🪬", + "name": "hamsa", + "codePoints": [ + "U+1FAAC" + ] + }, + { + "value": "🪺", + "name": "nest with eggs", + "codePoints": [ + "U+1FABA" + ] + }, + { + "value": "🫐", + "name": "blueberries", + "codePoints": [ + "U+1FAD0" + ] + }, + { + "value": "🫑", + "name": "bell pepper", + "codePoints": [ + "U+1FAD1" + ] + }, + { + "value": "🫒", + "name": "olive", + "codePoints": [ + "U+1FAD2" + ] + }, + { + "value": "🫓", + "name": "flat bread", + "codePoints": [ + "U+1FAD3" + ] + }, + { + "value": "🫔", + "name": "tamale", + "codePoints": [ + "U+1FAD4" + ] + }, + { + "value": "🫕", + "name": "fondue", + "codePoints": [ + "U+1FAD5" + ] + }, + { + "value": "🫖", + "name": "teapot", + "codePoints": [ + "U+1FAD6" + ] + }, + { + "value": "🫘", + "name": "beans", + "codePoints": [ + "U+1FAD8" + ] + }, + { + "value": "🫙", + "name": "jar", + "codePoints": [ + "U+1FAD9" + ] + }, + { + "value": "🫚", + "name": "ginger root", + "codePoints": [ + "U+1FADA" + ] + }, + { + "value": "🫜", + "name": "root vegetable", + "codePoints": [ + "U+1FADC" + ] + } + ] + }, + { + "id": "activity", + "title": { + "en": "Activity", + "zh-Hans": "活动" + }, + "icon": "emoji_tab_activity", + "type": "static", + "emojis": [ + { + "value": "⏯️", + "name": "play/pause symbol", + "codePoints": [ + "U+23EF", + "U+FE0F" + ] + }, + { + "value": "♟️", + "name": "chess pawn", + "codePoints": [ + "U+265F", + "U+FE0F" + ] + }, + { + "value": "⚽️", + "name": "soccer ball", + "codePoints": [ + "U+26BD", + "U+FE0F" + ] + }, + { + "value": "⚾️", + "name": "baseball", + "codePoints": [ + "U+26BE", + "U+FE0F" + ] + }, + { + "value": "⛷️", + "name": "skier", + "codePoints": [ + "U+26F7", + "U+FE0F" + ] + }, + { + "value": "⛸️", + "name": "ice skate", + "codePoints": [ + "U+26F8", + "U+FE0F" + ] + }, + { + "value": "⛹️", + "name": "basketball player", + "codePoints": [ + "U+26F9", + "U+FE0F" + ] + }, + { + "value": "⛹️‍♀️", + "name": "woman basketball player", + "codePoints": [ + "U+26F9", + "U+FE0F", + "U+200D", + "U+2640", + "U+FE0F" + ] + }, + { + "value": "⛹️‍♂️", + "name": "man basketball player", + "codePoints": [ + "U+26F9", + "U+FE0F", + "U+200D", + "U+2642", + "U+FE0F" + ] + }, + { + "value": "⛺️", + "name": "tent", + "codePoints": [ + "U+26FA", + "U+FE0F" + ] + }, + { + "value": "✍️", + "name": "writing hand", + "codePoints": [ + "U+270D", + "U+FE0F" + ] + }, + { + "value": "🎀", + "name": "ribbon bow", + "codePoints": [ + "U+1F380" + ] + }, + { + "value": "🎁", + "name": "present", + "codePoints": [ + "U+1F381" + ] + }, + { + "value": "🎆", + "name": "fireworks", + "codePoints": [ + "U+1F386" + ] + }, + { + "value": "🎇", + "name": "firework sparkler", + "codePoints": [ + "U+1F387" + ] + }, + { + "value": "🎈", + "name": "balloon", + "codePoints": [ + "U+1F388" + ] + }, + { + "value": "🎉", + "name": "party popper", + "codePoints": [ + "U+1F389" + ] + }, + { + "value": "🎊", + "name": "confetti ball", + "codePoints": [ + "U+1F38A" + ] + }, + { + "value": "🎎", + "name": "Japanese dolls", + "codePoints": [ + "U+1F38E" + ] + }, + { + "value": "🎏", + "name": "carp streamer", + "codePoints": [ + "U+1F38F" + ] + }, + { + "value": "🎐", + "name": "wind chime", + "codePoints": [ + "U+1F390" + ] + }, + { + "value": "🎖️", + "name": "military medal", + "codePoints": [ + "U+1F396", + "U+FE0F" + ] + }, + { + "value": "🎗️", + "name": "reminder ribbon", + "codePoints": [ + "U+1F397", + "U+FE0F" + ] + }, + { + "value": "🎙️", + "name": "studio microphone", + "codePoints": [ + "U+1F399", + "U+FE0F" + ] + }, + { + "value": "🎚️", + "name": "level slider", + "codePoints": [ + "U+1F39A", + "U+FE0F" + ] + }, + { + "value": "🎛️", + "name": "control knobs", + "codePoints": [ + "U+1F39B", + "U+FE0F" + ] + }, + { + "value": "🎞️", + "name": "film frames", + "codePoints": [ + "U+1F39E", + "U+FE0F" + ] + }, + { + "value": "🎟️", + "name": "admission ticket", + "codePoints": [ + "U+1F39F", + "U+FE0F" + ] + }, + { + "value": "🎤", + "name": "microphone", + "codePoints": [ + "U+1F3A4" + ] + }, + { + "value": "🎥", + "name": "movie camera", + "codePoints": [ + "U+1F3A5" + ] + }, + { + "value": "🎧", + "name": "headphones", + "codePoints": [ + "U+1F3A7" + ] + }, + { + "value": "🎪", + "name": "circus tent", + "codePoints": [ + "U+1F3AA" + ] + }, + { + "value": "🎫", + "name": "ticket", + "codePoints": [ + "U+1F3AB" + ] + }, + { + "value": "🎭", + "name": "performing arts", + "codePoints": [ + "U+1F3AD" + ] + }, + { + "value": "🎮", + "name": "video game controller", + "codePoints": [ + "U+1F3AE" + ] + }, + { + "value": "🎯", + "name": "bullseye", + "codePoints": [ + "U+1F3AF" + ] + }, + { + "value": "🎰", + "name": "slot machine", + "codePoints": [ + "U+1F3B0" + ] + }, + { + "value": "🎱", + "name": "billiards", + "codePoints": [ + "U+1F3B1" + ] + }, + { + "value": "🎲", + "name": "game die", + "codePoints": [ + "U+1F3B2" + ] + }, + { + "value": "🎵", + "name": "musical note", + "codePoints": [ + "U+1F3B5" + ] + }, + { + "value": "🎶", + "name": "musical notes", + "codePoints": [ + "U+1F3B6" + ] + }, + { + "value": "🎷", + "name": "saxophone", + "codePoints": [ + "U+1F3B7" + ] + }, + { + "value": "🎸", + "name": "guitar", + "codePoints": [ + "U+1F3B8" + ] + }, + { + "value": "🎺", + "name": "trumpet", + "codePoints": [ + "U+1F3BA" + ] + }, + { + "value": "🎻", + "name": "violin", + "codePoints": [ + "U+1F3BB" + ] + }, + { + "value": "🎼", + "name": "musical score", + "codePoints": [ + "U+1F3BC" + ] + }, + { + "value": "🎽", + "name": "running shirt", + "codePoints": [ + "U+1F3BD" + ] + }, + { + "value": "🎾", + "name": "tennis ball", + "codePoints": [ + "U+1F3BE" + ] + }, + { + "value": "🎿", + "name": "skis", + "codePoints": [ + "U+1F3BF" + ] + }, + { + "value": "🏀", + "name": "basketball", + "codePoints": [ + "U+1F3C0" + ] + }, + { + "value": "🏃", + "name": "runner", + "codePoints": [ + "U+1F3C3" + ] + }, + { + "value": "🏃‍♀️", + "name": "woman runner", + "codePoints": [ + "U+1F3C3", + "U+200D", + "U+2640", + "U+FE0F" + ] + }, + { + "value": "🏃‍♀️‍➡️", + "name": "woman running facing right", + "codePoints": [ + "U+1F3C3", + "U+200D", + "U+2640", + "U+FE0F", + "U+200D", + "U+27A1", + "U+FE0F" + ] + }, + { + "value": "🏃‍♂️", + "name": "man runner", + "codePoints": [ + "U+1F3C3", + "U+200D", + "U+2642", + "U+FE0F" + ] + }, + { + "value": "🏃‍♂️‍➡️", + "name": "man running facing right", + "codePoints": [ + "U+1F3C3", + "U+200D", + "U+2642", + "U+FE0F", + "U+200D", + "U+27A1", + "U+FE0F" + ] + }, + { + "value": "🏃‍➡️", + "name": "person running facing right", + "codePoints": [ + "U+1F3C3", + "U+200D", + "U+27A1", + "U+FE0F" + ] + }, + { + "value": "🏄", + "name": "surfer", + "codePoints": [ + "U+1F3C4" + ] + }, + { + "value": "🏄‍♀️", + "name": "woman surfer", + "codePoints": [ + "U+1F3C4", + "U+200D", + "U+2640", + "U+FE0F" + ] + }, + { + "value": "🏄‍♂️", + "name": "man surfer", + "codePoints": [ + "U+1F3C4", + "U+200D", + "U+2642", + "U+FE0F" + ] + }, + { + "value": "🏅", + "name": "sports medal", + "codePoints": [ + "U+1F3C5" + ] + }, + { + "value": "🏆", + "name": "trophy", + "codePoints": [ + "U+1F3C6" + ] + }, + { + "value": "🏈", + "name": "American football", + "codePoints": [ + "U+1F3C8" + ] + }, + { + "value": "🏉", + "name": "rugby football", + "codePoints": [ + "U+1F3C9" + ] + }, + { + "value": "🏊", + "name": "swimmer", + "codePoints": [ + "U+1F3CA" + ] + }, + { + "value": "🏊‍♀️", + "name": "woman swimmer", + "codePoints": [ + "U+1F3CA", + "U+200D", + "U+2640", + "U+FE0F" + ] + }, + { + "value": "🏊‍♂️", + "name": "man swimmer", + "codePoints": [ + "U+1F3CA", + "U+200D", + "U+2642", + "U+FE0F" + ] + }, + { + "value": "🏋️", + "name": "weightlifter", + "codePoints": [ + "U+1F3CB", + "U+FE0F" + ] + }, + { + "value": "🏋️‍♀️", + "name": "woman weightlifter", + "codePoints": [ + "U+1F3CB", + "U+FE0F", + "U+200D", + "U+2640", + "U+FE0F" + ] + }, + { + "value": "🏋️‍♂️", + "name": "man weightlifter", + "codePoints": [ + "U+1F3CB", + "U+FE0F", + "U+200D", + "U+2642", + "U+FE0F" + ] + }, + { + "value": "🏌️", + "name": "golfer", + "codePoints": [ + "U+1F3CC", + "U+FE0F" + ] + }, + { + "value": "🏌️‍♀️", + "name": "woman golfer", + "codePoints": [ + "U+1F3CC", + "U+FE0F", + "U+200D", + "U+2640", + "U+FE0F" + ] + }, + { + "value": "🏌️‍♂️", + "name": "man golfer", + "codePoints": [ + "U+1F3CC", + "U+FE0F", + "U+200D", + "U+2642", + "U+FE0F" + ] + }, + { + "value": "🏍️", + "name": "motorcycle", + "codePoints": [ + "U+1F3CD", + "U+FE0F" + ] + }, + { + "value": "🏐", + "name": "volleyball", + "codePoints": [ + "U+1F3D0" + ] + }, + { + "value": "🏑", + "name": "field hockey stick and ball", + "codePoints": [ + "U+1F3D1" + ] + }, + { + "value": "🏒", + "name": "ice hockey stick and puck", + "codePoints": [ + "U+1F3D2" + ] + }, + { + "value": "🏓", + "name": "table tennis paddle and ball", + "codePoints": [ + "U+1F3D3" + ] + }, + { + "value": "🏕️", + "name": "camping", + "codePoints": [ + "U+1F3D5", + "U+FE0F" + ] + }, + { + "value": "🏛️", + "name": "classical building", + "codePoints": [ + "U+1F3DB", + "U+FE0F" + ] + }, + { + "value": "🏟️", + "name": "stadium", + "codePoints": [ + "U+1F3DF", + "U+FE0F" + ] + }, + { + "value": "🏸", + "name": "badminton racquet and shuttlecock", + "codePoints": [ + "U+1F3F8" + ] + }, + { + "value": "🏹", + "name": "bow and arrow", + "codePoints": [ + "U+1F3F9" + ] + }, + { + "value": "🏺", + "name": "amphora", + "codePoints": [ + "U+1F3FA" + ] + }, + { + "value": "👟", + "name": "tennis shoe", + "codePoints": [ + "U+1F45F" + ] + }, + { + "value": "💝", + "name": "heart with ribbon", + "codePoints": [ + "U+1F49D" + ] + }, + { + "value": "💬", + "name": "speech balloon", + "codePoints": [ + "U+1F4AC" + ] + }, + { + "value": "💭", + "name": "thought balloon", + "codePoints": [ + "U+1F4AD" + ] + }, + { + "value": "📓", + "name": "composition notebook", + "codePoints": [ + "U+1F4D3" + ] + }, + { + "value": "📝", + "name": "memo", + "codePoints": [ + "U+1F4DD" + ] + }, + { + "value": "🔮", + "name": "crystal ball", + "codePoints": [ + "U+1F52E" + ] + }, + { + "value": "🕹️", + "name": "joystick", + "codePoints": [ + "U+1F579", + "U+FE0F" + ] + }, + { + "value": "🖊️", + "name": "ballpoint pen", + "codePoints": [ + "U+1F58A", + "U+FE0F" + ] + }, + { + "value": "🖌️", + "name": "paintbrush", + "codePoints": [ + "U+1F58C", + "U+FE0F" + ] + }, + { + "value": "🖍️", + "name": "crayon", + "codePoints": [ + "U+1F58D", + "U+FE0F" + ] + }, + { + "value": "🖐️", + "name": "raised hand with fingers splayed", + "codePoints": [ + "U+1F590", + "U+FE0F" + ] + }, + { + "value": "🖲️", + "name": "trackball", + "codePoints": [ + "U+1F5B2", + "U+FE0F" + ] + }, + { + "value": "🚙", + "name": "sport utility vehicle", + "codePoints": [ + "U+1F699" + ] + }, + { + "value": "🚴", + "name": "cyclist", + "codePoints": [ + "U+1F6B4" + ] + }, + { + "value": "🚴‍♀️", + "name": "woman cyclist", + "codePoints": [ + "U+1F6B4", + "U+200D", + "U+2640", + "U+FE0F" + ] + }, + { + "value": "🚴‍♂️", + "name": "man cyclist", + "codePoints": [ + "U+1F6B4", + "U+200D", + "U+2642", + "U+FE0F" + ] + }, + { + "value": "🚶", + "name": "pedestrian", + "codePoints": [ + "U+1F6B6" + ] + }, + { + "value": "🚶‍♀️", + "name": "woman pedestrian", + "codePoints": [ + "U+1F6B6", + "U+200D", + "U+2640", + "U+FE0F" + ] + }, + { + "value": "🚶‍♀️‍➡️", + "name": "woman walking facing right", + "codePoints": [ + "U+1F6B6", + "U+200D", + "U+2640", + "U+FE0F", + "U+200D", + "U+27A1", + "U+FE0F" + ] + }, + { + "value": "🚶‍♂️", + "name": "man pedestrian", + "codePoints": [ + "U+1F6B6", + "U+200D", + "U+2642", + "U+FE0F" + ] + }, + { + "value": "🚶‍♂️‍➡️", + "name": "man walking facing right", + "codePoints": [ + "U+1F6B6", + "U+200D", + "U+2642", + "U+FE0F", + "U+200D", + "U+27A1", + "U+FE0F" + ] + }, + { + "value": "🚶‍➡️", + "name": "person walking facing right", + "codePoints": [ + "U+1F6B6", + "U+200D", + "U+27A1", + "U+FE0F" + ] + }, + { + "value": "🚷", + "name": "no pedestrians", + "codePoints": [ + "U+1F6B7" + ] + }, + { + "value": "🛂", + "name": "passport control", + "codePoints": [ + "U+1F6C2" + ] + }, + { + "value": "🛝", + "name": "playground slide", + "codePoints": [ + "U+1F6DD" + ] + }, + { + "value": "🛢️", + "name": "oil drum", + "codePoints": [ + "U+1F6E2", + "U+FE0F" + ] + }, + { + "value": "🛴", + "name": "scooter", + "codePoints": [ + "U+1F6F4" + ] + }, + { + "value": "🛵", + "name": "motor scooter", + "codePoints": [ + "U+1F6F5" + ] + }, + { + "value": "🛷", + "name": "sled", + "codePoints": [ + "U+1F6F7" + ] + }, + { + "value": "🛼", + "name": "roller skate", + "codePoints": [ + "U+1F6FC" + ] + }, + { + "value": "🤸", + "name": "person doing a cartwheel", + "codePoints": [ + "U+1F938" + ] + }, + { + "value": "🤸‍♀️", + "name": "woman doing a cartwheel", + "codePoints": [ + "U+1F938", + "U+200D", + "U+2640", + "U+FE0F" + ] + }, + { + "value": "🤸‍♂️", + "name": "man doing a cartwheel", + "codePoints": [ + "U+1F938", + "U+200D", + "U+2642", + "U+FE0F" + ] + }, + { + "value": "🤹", + "name": "person juggling", + "codePoints": [ + "U+1F939" + ] + }, + { + "value": "🤹‍♀️", + "name": "woman juggling", + "codePoints": [ + "U+1F939", + "U+200D", + "U+2640", + "U+FE0F" + ] + }, + { + "value": "🤹‍♂️", + "name": "man juggling", + "codePoints": [ + "U+1F939", + "U+200D", + "U+2642", + "U+FE0F" + ] + }, + { + "value": "🤺", + "name": "fencer", + "codePoints": [ + "U+1F93A" + ] + }, + { + "value": "🤽", + "name": "person playing water polo", + "codePoints": [ + "U+1F93D" + ] + }, + { + "value": "🤽‍♀️", + "name": "woman playing water polo", + "codePoints": [ + "U+1F93D", + "U+200D", + "U+2640", + "U+FE0F" + ] + }, + { + "value": "🤽‍♂️", + "name": "man playing water polo", + "codePoints": [ + "U+1F93D", + "U+200D", + "U+2642", + "U+FE0F" + ] + }, + { + "value": "🤾", + "name": "person playing handball", + "codePoints": [ + "U+1F93E" + ] + }, + { + "value": "🤾‍♀️", + "name": "woman playing handball", + "codePoints": [ + "U+1F93E", + "U+200D", + "U+2640", + "U+FE0F" + ] + }, + { + "value": "🤾‍♂️", + "name": "man playing handball", + "codePoints": [ + "U+1F93E", + "U+200D", + "U+2642", + "U+FE0F" + ] + }, + { + "value": "🥁", + "name": "drum", + "codePoints": [ + "U+1F941" + ] + }, + { + "value": "🥇", + "name": "gold medal", + "codePoints": [ + "U+1F947" + ] + }, + { + "value": "🥈", + "name": "silver medal", + "codePoints": [ + "U+1F948" + ] + }, + { + "value": "🥉", + "name": "bronze medal", + "codePoints": [ + "U+1F949" + ] + }, + { + "value": "🥋", + "name": "martial arts uniform", + "codePoints": [ + "U+1F94B" + ] + }, + { + "value": "🥌", + "name": "curling stone", + "codePoints": [ + "U+1F94C" + ] + }, + { + "value": "🥍", + "name": "lacrosse stick and ball", + "codePoints": [ + "U+1F94D" + ] + }, + { + "value": "🥎", + "name": "softball", + "codePoints": [ + "U+1F94E" + ] + }, + { + "value": "🥳", + "name": "party face", + "codePoints": [ + "U+1F973" + ] + }, + { + "value": "🥾", + "name": "hiking boot", + "codePoints": [ + "U+1F97E" + ] + }, + { + "value": "🧗", + "name": "rock climber", + "codePoints": [ + "U+1F9D7" + ] + }, + { + "value": "🧗‍♀️", + "name": "woman rock climber", + "codePoints": [ + "U+1F9D7", + "U+200D", + "U+2640", + "U+FE0F" + ] + }, + { + "value": "🧗‍♂️", + "name": "man rock climber", + "codePoints": [ + "U+1F9D7", + "U+200D", + "U+2642", + "U+FE0F" + ] + }, + { + "value": "🧘", + "name": "person in lotus position", + "codePoints": [ + "U+1F9D8" + ] + }, + { + "value": "🧘‍♀️", + "name": "woman in lotus position", + "codePoints": [ + "U+1F9D8", + "U+200D", + "U+2640", + "U+FE0F" + ] + }, + { + "value": "🧘‍♂️", + "name": "man in lotus position", + "codePoints": [ + "U+1F9D8", + "U+200D", + "U+2642", + "U+FE0F" + ] + }, + { + "value": "🧧", + "name": "red gift envelope", + "codePoints": [ + "U+1F9E7" + ] + }, + { + "value": "🩰", + "name": "ballet shoes", + "codePoints": [ + "U+1FA70" + ] + }, + { + "value": "🪀", + "name": "yo-yo", + "codePoints": [ + "U+1FA80" + ] + }, + { + "value": "🪁", + "name": "kite", + "codePoints": [ + "U+1FA81" + ] + }, + { + "value": "🪃", + "name": "boomerang", + "codePoints": [ + "U+1FA83" + ] + }, + { + "value": "🪄", + "name": "magic wand", + "codePoints": [ + "U+1FA84" + ] + }, + { + "value": "🪕", + "name": "banjo", + "codePoints": [ + "U+1FA95" + ] + }, + { + "value": "🪗", + "name": "accordion", + "codePoints": [ + "U+1FA97" + ] + }, + { + "value": "🪘", + "name": "long drum", + "codePoints": [ + "U+1FA98" + ] + }, + { + "value": "🪩", + "name": "mirror ball", + "codePoints": [ + "U+1FAA9" + ] + }, + { + "value": "🪷", + "name": "lotus", + "codePoints": [ + "U+1FAB7" + ] + } + ] + }, + { + "id": "travel", + "title": { + "en": "Travel & Places", + "zh-Hans": "旅行与地点" + }, + "icon": "emoji_tab_travel", + "type": "static", + "emojis": [ + { + "value": "⚓️", + "name": "anchor", + "codePoints": [ + "U+2693", + "U+FE0F" + ] + }, + { + "value": "⛩️", + "name": "Shinto shrine", + "codePoints": [ + "U+26E9", + "U+FE0F" + ] + }, + { + "value": "⛪️", + "name": "church", + "codePoints": [ + "U+26EA", + "U+FE0F" + ] + }, + { + "value": "⛱️", + "name": "beach umbrella", + "codePoints": [ + "U+26F1", + "U+FE0F" + ] + }, + { + "value": "⛲️", + "name": "fountain", + "codePoints": [ + "U+26F2", + "U+FE0F" + ] + }, + { + "value": "⛴️", + "name": "ferry", + "codePoints": [ + "U+26F4", + "U+FE0F" + ] + }, + { + "value": "⛵️", + "name": "sailboat", + "codePoints": [ + "U+26F5", + "U+FE0F" + ] + }, + { + "value": "⛽️", + "name": "fuel pump", + "codePoints": [ + "U+26FD", + "U+FE0F" + ] + }, + { + "value": "✈️", + "name": "airplane", + "codePoints": [ + "U+2708", + "U+FE0F" + ] + }, + { + "value": "✒️", + "name": "fountain pen", + "codePoints": [ + "U+2712", + "U+FE0F" + ] + }, + { + "value": "🅿️", + "name": "parking sign", + "codePoints": [ + "U+1F17F", + "U+FE0F" + ] + }, + { + "value": "🈺", + "name": "Japanese sign meaning “open for business”", + "codePoints": [ + "U+1F23A" + ] + }, + { + "value": "🌆", + "name": "cityscape at dusk", + "codePoints": [ + "U+1F306" + ] + }, + { + "value": "🌉", + "name": "bridge at night", + "codePoints": [ + "U+1F309" + ] + }, + { + "value": "🎡", + "name": "ferris wheel", + "codePoints": [ + "U+1F3A1" + ] + }, + { + "value": "🎢", + "name": "roller coaster", + "codePoints": [ + "U+1F3A2" + ] + }, + { + "value": "🏎️", + "name": "race car", + "codePoints": [ + "U+1F3CE", + "U+FE0F" + ] + }, + { + "value": "🏖️", + "name": "beach with umbrella", + "codePoints": [ + "U+1F3D6", + "U+FE0F" + ] + }, + { + "value": "🏗️", + "name": "building construction", + "codePoints": [ + "U+1F3D7", + "U+FE0F" + ] + }, + { + "value": "🏘️", + "name": "group of houses", + "codePoints": [ + "U+1F3D8", + "U+FE0F" + ] + }, + { + "value": "🏙️", + "name": "cityscape", + "codePoints": [ + "U+1F3D9", + "U+FE0F" + ] + }, + { + "value": "🏚️", + "name": "derelict house", + "codePoints": [ + "U+1F3DA", + "U+FE0F" + ] + }, + { + "value": "🏜️", + "name": "desert", + "codePoints": [ + "U+1F3DC", + "U+FE0F" + ] + }, + { + "value": "🏝️", + "name": "desert island", + "codePoints": [ + "U+1F3DD", + "U+FE0F" + ] + }, + { + "value": "🏞️", + "name": "national park", + "codePoints": [ + "U+1F3DE", + "U+FE0F" + ] + }, + { + "value": "🏠", + "name": "house", + "codePoints": [ + "U+1F3E0" + ] + }, + { + "value": "🏡", + "name": "house with garden", + "codePoints": [ + "U+1F3E1" + ] + }, + { + "value": "🏢", + "name": "office building", + "codePoints": [ + "U+1F3E2" + ] + }, + { + "value": "🏣", + "name": "Japanese post office", + "codePoints": [ + "U+1F3E3" + ] + }, + { + "value": "🏤", + "name": "European post office", + "codePoints": [ + "U+1F3E4" + ] + }, + { + "value": "🏥", + "name": "hospital", + "codePoints": [ + "U+1F3E5" + ] + }, + { + "value": "🏦", + "name": "bank", + "codePoints": [ + "U+1F3E6" + ] + }, + { + "value": "🏨", + "name": "hotel", + "codePoints": [ + "U+1F3E8" + ] + }, + { + "value": "🏩", + "name": "love hotel", + "codePoints": [ + "U+1F3E9" + ] + }, + { + "value": "🏪", + "name": "convenience store", + "codePoints": [ + "U+1F3EA" + ] + }, + { + "value": "🏫", + "name": "school", + "codePoints": [ + "U+1F3EB" + ] + }, + { + "value": "🏬", + "name": "department store", + "codePoints": [ + "U+1F3EC" + ] + }, + { + "value": "🏭", + "name": "factory", + "codePoints": [ + "U+1F3ED" + ] + }, + { + "value": "🏯", + "name": "Japanese castle", + "codePoints": [ + "U+1F3EF" + ] + }, + { + "value": "🏰", + "name": "European castle", + "codePoints": [ + "U+1F3F0" + ] + }, + { + "value": "👨‍🏭", + "name": "man factory worker", + "codePoints": [ + "U+1F468", + "U+200D", + "U+1F3ED" + ] + }, + { + "value": "👩‍🏭", + "name": "woman factory worker", + "codePoints": [ + "U+1F469", + "U+200D", + "U+1F3ED" + ] + }, + { + "value": "👷", + "name": "construction worker", + "codePoints": [ + "U+1F477" + ] + }, + { + "value": "👷‍♀️", + "name": "woman construction worker", + "codePoints": [ + "U+1F477", + "U+200D", + "U+2640", + "U+FE0F" + ] + }, + { + "value": "👷‍♂️", + "name": "man construction worker", + "codePoints": [ + "U+1F477", + "U+200D", + "U+2642", + "U+FE0F" + ] + }, + { + "value": "💳", + "name": "credit card", + "codePoints": [ + "U+1F4B3" + ] + }, + { + "value": "💴", + "name": "yen banknotes", + "codePoints": [ + "U+1F4B4" + ] + }, + { + "value": "💵", + "name": "dollar banknotes", + "codePoints": [ + "U+1F4B5" + ] + }, + { + "value": "💶", + "name": "euro banknotes", + "codePoints": [ + "U+1F4B6" + ] + }, + { + "value": "💷", + "name": "pound banknotes", + "codePoints": [ + "U+1F4B7" + ] + }, + { + "value": "📇", + "name": "card index", + "codePoints": [ + "U+1F4C7" + ] + }, + { + "value": "🕋", + "name": "Kaaba", + "codePoints": [ + "U+1F54B" + ] + }, + { + "value": "🕌", + "name": "mosque", + "codePoints": [ + "U+1F54C" + ] + }, + { + "value": "🕍", + "name": "synagogue", + "codePoints": [ + "U+1F54D" + ] + }, + { + "value": "🕴️", + "name": "man in business suit levitating", + "codePoints": [ + "U+1F574", + "U+FE0F" + ] + }, + { + "value": "🖋️", + "name": "fountain pen", + "codePoints": [ + "U+1F58B", + "U+FE0F" + ] + }, + { + "value": "🗂️", + "name": "card index dividers", + "codePoints": [ + "U+1F5C2", + "U+FE0F" + ] + }, + { + "value": "🗺️", + "name": "world map", + "codePoints": [ + "U+1F5FA", + "U+FE0F" + ] + }, + { + "value": "🗻", + "name": "mount fuji", + "codePoints": [ + "U+1F5FB" + ] + }, + { + "value": "🗽", + "name": "Statue of Liberty", + "codePoints": [ + "U+1F5FD" + ] + }, + { + "value": "🗿", + "name": "Easter Island statue", + "codePoints": [ + "U+1F5FF" + ] + }, + { + "value": "🚀", + "name": "rocket", + "codePoints": [ + "U+1F680" + ] + }, + { + "value": "🚁", + "name": "helicopter", + "codePoints": [ + "U+1F681" + ] + }, + { + "value": "🚃", + "name": "railway car", + "codePoints": [ + "U+1F683" + ] + }, + { + "value": "🚈", + "name": "light rail", + "codePoints": [ + "U+1F688" + ] + }, + { + "value": "🚉", + "name": "station", + "codePoints": [ + "U+1F689" + ] + }, + { + "value": "🚊", + "name": "tram", + "codePoints": [ + "U+1F68A" + ] + }, + { + "value": "🚋", + "name": "tram car", + "codePoints": [ + "U+1F68B" + ] + }, + { + "value": "🚌", + "name": "bus", + "codePoints": [ + "U+1F68C" + ] + }, + { + "value": "🚍", + "name": "oncoming bus", + "codePoints": [ + "U+1F68D" + ] + }, + { + "value": "🚎", + "name": "trolleybus", + "codePoints": [ + "U+1F68E" + ] + }, + { + "value": "🚏", + "name": "bus stop", + "codePoints": [ + "U+1F68F" + ] + }, + { + "value": "🚐", + "name": "minibus", + "codePoints": [ + "U+1F690" + ] + }, + { + "value": "🚑", + "name": "ambulance", + "codePoints": [ + "U+1F691" + ] + }, + { + "value": "🚒", + "name": "fire engine", + "codePoints": [ + "U+1F692" + ] + }, + { + "value": "🚓", + "name": "police car", + "codePoints": [ + "U+1F693" + ] + }, + { + "value": "🚔", + "name": "oncoming police car", + "codePoints": [ + "U+1F694" + ] + }, + { + "value": "🚕", + "name": "taxi", + "codePoints": [ + "U+1F695" + ] + }, + { + "value": "🚖", + "name": "oncoming taxi", + "codePoints": [ + "U+1F696" + ] + }, + { + "value": "🚗", + "name": "car", + "codePoints": [ + "U+1F697" + ] + }, + { + "value": "🚘", + "name": "oncoming car", + "codePoints": [ + "U+1F698" + ] + }, + { + "value": "🚚", + "name": "delivery truck", + "codePoints": [ + "U+1F69A" + ] + }, + { + "value": "🚛", + "name": "articulated lorry", + "codePoints": [ + "U+1F69B" + ] + }, + { + "value": "🚜", + "name": "tractor", + "codePoints": [ + "U+1F69C" + ] + }, + { + "value": "🚝", + "name": "monorail", + "codePoints": [ + "U+1F69D" + ] + }, + { + "value": "🚟", + "name": "suspension railway", + "codePoints": [ + "U+1F69F" + ] + }, + { + "value": "🚡", + "name": "aerial tramway", + "codePoints": [ + "U+1F6A1" + ] + }, + { + "value": "🚢", + "name": "ship", + "codePoints": [ + "U+1F6A2" + ] + }, + { + "value": "🚣", + "name": "person rowing boat", + "codePoints": [ + "U+1F6A3" + ] + }, + { + "value": "🚣‍♀️", + "name": "woman rowing boat", + "codePoints": [ + "U+1F6A3", + "U+200D", + "U+2640", + "U+FE0F" + ] + }, + { + "value": "🚣‍♂️", + "name": "man rowing boat", + "codePoints": [ + "U+1F6A3", + "U+200D", + "U+2642", + "U+FE0F" + ] + }, + { + "value": "🚤", + "name": "speedboat", + "codePoints": [ + "U+1F6A4" + ] + }, + { + "value": "🚥", + "name": "horizontal traffic light", + "codePoints": [ + "U+1F6A5" + ] + }, + { + "value": "🚦", + "name": "vertical traffic light", + "codePoints": [ + "U+1F6A6" + ] + }, + { + "value": "🚧", + "name": "construction sign", + "codePoints": [ + "U+1F6A7" + ] + }, + { + "value": "🚨", + "name": "police car’s light", + "codePoints": [ + "U+1F6A8" + ] + }, + { + "value": "🚬", + "name": "cigarette", + "codePoints": [ + "U+1F6AC" + ] + }, + { + "value": "🚮", + "name": "put litter in its place symbol", + "codePoints": [ + "U+1F6AE" + ] + }, + { + "value": "🚰", + "name": "water faucet", + "codePoints": [ + "U+1F6B0" + ] + }, + { + "value": "🚲", + "name": "bicycle", + "codePoints": [ + "U+1F6B2" + ] + }, + { + "value": "🚾", + "name": "water closet", + "codePoints": [ + "U+1F6BE" + ] + }, + { + "value": "🛃", + "name": "customs", + "codePoints": [ + "U+1F6C3" + ] + }, + { + "value": "🛄", + "name": "baggage claim", + "codePoints": [ + "U+1F6C4" + ] + }, + { + "value": "🛅", + "name": "left luggage", + "codePoints": [ + "U+1F6C5" + ] + }, + { + "value": "🛎️", + "name": "bellhop bell", + "codePoints": [ + "U+1F6CE", + "U+FE0F" + ] + }, + { + "value": "🛐", + "name": "place of worship", + "codePoints": [ + "U+1F6D0" + ] + }, + { + "value": "🛒", + "name": "shopping cart", + "codePoints": [ + "U+1F6D2" + ] + }, + { + "value": "🛕", + "name": "hindu temple", + "codePoints": [ + "U+1F6D5" + ] + }, + { + "value": "🛖", + "name": "hut", + "codePoints": [ + "U+1F6D6" + ] + }, + { + "value": "🛗", + "name": "elevator", + "codePoints": [ + "U+1F6D7" + ] + }, + { + "value": "🛞", + "name": "wheel", + "codePoints": [ + "U+1F6DE" + ] + }, + { + "value": "🛣️", + "name": "motorway", + "codePoints": [ + "U+1F6E3", + "U+FE0F" + ] + }, + { + "value": "🛤️", + "name": "railway track", + "codePoints": [ + "U+1F6E4", + "U+FE0F" + ] + }, + { + "value": "🛥️", + "name": "motorboat", + "codePoints": [ + "U+1F6E5", + "U+FE0F" + ] + }, + { + "value": "🛩️", + "name": "small airplane", + "codePoints": [ + "U+1F6E9", + "U+FE0F" + ] + }, + { + "value": "🛫", + "name": "airplane taking off", + "codePoints": [ + "U+1F6EB" + ] + }, + { + "value": "🛬", + "name": "airplane landing", + "codePoints": [ + "U+1F6EC" + ] + }, + { + "value": "🛰️", + "name": "satellite", + "codePoints": [ + "U+1F6F0", + "U+FE0F" + ] + }, + { + "value": "🛳️", + "name": "passenger ship", + "codePoints": [ + "U+1F6F3", + "U+FE0F" + ] + }, + { + "value": "🛶", + "name": "canoe", + "codePoints": [ + "U+1F6F6" + ] + }, + { + "value": "🛸", + "name": "UFO", + "codePoints": [ + "U+1F6F8" + ] + }, + { + "value": "🛺", + "name": "auto rickshaw", + "codePoints": [ + "U+1F6FA" + ] + }, + { + "value": "🛻", + "name": "pickup truck", + "codePoints": [ + "U+1F6FB" + ] + }, + { + "value": "🧑‍🏭", + "name": "factory worker", + "codePoints": [ + "U+1F9D1", + "U+200D", + "U+1F3ED" + ] + }, + { + "value": "🧕", + "name": "woman with headscarf", + "codePoints": [ + "U+1F9D5" + ] + }, + { + "value": "🧣", + "name": "scarf", + "codePoints": [ + "U+1F9E3" + ] + }, + { + "value": "🧭", + "name": "compass", + "codePoints": [ + "U+1F9ED" + ] + }, + { + "value": "🧳", + "name": "luggage", + "codePoints": [ + "U+1F9F3" + ] + }, + { + "value": "🪂", + "name": "parachute", + "codePoints": [ + "U+1FA82" + ] + }, + { + "value": "🪐", + "name": "planet", + "codePoints": [ + "U+1FA90" + ] + } + ] + }, + { + "id": "objects", + "title": { + "en": "Objects", + "zh-Hans": "物体" + }, + "icon": "emoji_tab_objects", + "type": "static", + "emojis": [ + { + "value": "*️⃣", + "name": "keycap asterisk", + "codePoints": [ + "U+002A", + "U+FE0F", + "U+20E3" + ] + }, + { + "value": "0️⃣", + "name": "keycap digit zero", + "codePoints": [ + "U+0030", + "U+FE0F", + "U+20E3" + ] + }, + { + "value": "1️⃣", + "name": "keycap digit one", + "codePoints": [ + "U+0031", + "U+FE0F", + "U+20E3" + ] + }, + { + "value": "2️⃣", + "name": "keycap digit two", + "codePoints": [ + "U+0032", + "U+FE0F", + "U+20E3" + ] + }, + { + "value": "3️⃣", + "name": "keycap digit three", + "codePoints": [ + "U+0033", + "U+FE0F", + "U+20E3" + ] + }, + { + "value": "4️⃣", + "name": "keycap digit four", + "codePoints": [ + "U+0034", + "U+FE0F", + "U+20E3" + ] + }, + { + "value": "5️⃣", + "name": "keycap digit five", + "codePoints": [ + "U+0035", + "U+FE0F", + "U+20E3" + ] + }, + { + "value": "6️⃣", + "name": "keycap digit six", + "codePoints": [ + "U+0036", + "U+FE0F", + "U+20E3" + ] + }, + { + "value": "7️⃣", + "name": "keycap digit seven", + "codePoints": [ + "U+0037", + "U+FE0F", + "U+20E3" + ] + }, + { + "value": "8️⃣", + "name": "keycap digit eight", + "codePoints": [ + "U+0038", + "U+FE0F", + "U+20E3" + ] + }, + { + "value": "9️⃣", + "name": "keycap digit nine", + "codePoints": [ + "U+0039", + "U+FE0F", + "U+20E3" + ] + }, + { + "value": "⌚️", + "name": "watch", + "codePoints": [ + "U+231A", + "U+FE0F" + ] + }, + { + "value": "⏫", + "name": "up-pointing double triangle", + "codePoints": [ + "U+23EB" + ] + }, + { + "value": "⏬", + "name": "down-pointing double triangle", + "codePoints": [ + "U+23EC" + ] + }, + { + "value": "⏰", + "name": "alarm clock", + "codePoints": [ + "U+23F0" + ] + }, + { + "value": "⏱️", + "name": "stopwatch", + "codePoints": [ + "U+23F1", + "U+FE0F" + ] + }, + { + "value": "⏲️", + "name": "timer clock", + "codePoints": [ + "U+23F2", + "U+FE0F" + ] + }, + { + "value": "▪️", + "name": "black small square", + "codePoints": [ + "U+25AA", + "U+FE0F" + ] + }, + { + "value": "▫️", + "name": "white small square", + "codePoints": [ + "U+25AB", + "U+FE0F" + ] + }, + { + "value": "▶️", + "name": "right-pointing triangle", + "codePoints": [ + "U+25B6", + "U+FE0F" + ] + }, + { + "value": "◀️", + "name": "left-pointing triangle", + "codePoints": [ + "U+25C0", + "U+FE0F" + ] + }, + { + "value": "◻️", + "name": "white medium square", + "codePoints": [ + "U+25FB", + "U+FE0F" + ] + }, + { + "value": "◼️", + "name": "black medium square", + "codePoints": [ + "U+25FC", + "U+FE0F" + ] + }, + { + "value": "◽️", + "name": "white medium small square", + "codePoints": [ + "U+25FD", + "U+FE0F" + ] + }, + { + "value": "◾️", + "name": "black medium small square", + "codePoints": [ + "U+25FE", + "U+FE0F" + ] + }, + { + "value": "☎️", + "name": "telephone", + "codePoints": [ + "U+260E", + "U+FE0F" + ] + }, + { + "value": "☢️", + "name": "radioactive", + "codePoints": [ + "U+2622", + "U+FE0F" + ] + }, + { + "value": "♊️", + "name": "Gemini", + "codePoints": [ + "U+264A", + "U+FE0F" + ] + }, + { + "value": "♦️", + "name": "diamonds suit", + "codePoints": [ + "U+2666", + "U+FE0F" + ] + }, + { + "value": "♨️", + "name": "hot springs", + "codePoints": [ + "U+2668", + "U+FE0F" + ] + }, + { + "value": "♿️", + "name": "wheelchair symbol", + "codePoints": [ + "U+267F", + "U+FE0F" + ] + }, + { + "value": "⚔️", + "name": "crossed swords", + "codePoints": [ + "U+2694", + "U+FE0F" + ] + }, + { + "value": "⚙️", + "name": "gear", + "codePoints": [ + "U+2699", + "U+FE0F" + ] + }, + { + "value": "⚰️", + "name": "coffin", + "codePoints": [ + "U+26B0", + "U+FE0F" + ] + }, + { + "value": "⚱️", + "name": "funeral urn", + "codePoints": [ + "U+26B1", + "U+FE0F" + ] + }, + { + "value": "⛏️", + "name": "pick", + "codePoints": [ + "U+26CF", + "U+FE0F" + ] + }, + { + "value": "⛑️", + "name": "helmet with white cross", + "codePoints": [ + "U+26D1", + "U+FE0F" + ] + }, + { + "value": "⛓️", + "name": "chains", + "codePoints": [ + "U+26D3", + "U+FE0F" + ] + }, + { + "value": "⛓️‍💥", + "name": "broken chain", + "codePoints": [ + "U+26D3", + "U+FE0F", + "U+200D", + "U+1F4A5" + ] + }, + { + "value": "✂️", + "name": "scissors", + "codePoints": [ + "U+2702", + "U+FE0F" + ] + }, + { + "value": "✉️", + "name": "envelope", + "codePoints": [ + "U+2709", + "U+FE0F" + ] + }, + { + "value": "✊", + "name": "raised fist", + "codePoints": [ + "U+270A" + ] + }, + { + "value": "✏️", + "name": "pencil", + "codePoints": [ + "U+270F", + "U+FE0F" + ] + }, + { + "value": "❎", + "name": "X mark", + "codePoints": [ + "U+274E" + ] + }, + { + "value": "⬛️", + "name": "black large square", + "codePoints": [ + "U+2B1B", + "U+FE0F" + ] + }, + { + "value": "⬜️", + "name": "white large square", + "codePoints": [ + "U+2B1C", + "U+FE0F" + ] + }, + { + "value": "⭕️", + "name": "circle mark", + "codePoints": [ + "U+2B55", + "U+FE0F" + ] + }, + { + "value": "〰️", + "name": "wavy dash", + "codePoints": [ + "U+3030", + "U+FE0F" + ] + }, + { + "value": "🃏", + "name": "joker", + "codePoints": [ + "U+1F0CF" + ] + }, + { + "value": "🆚", + "name": "squared vs", + "codePoints": [ + "U+1F19A" + ] + }, + { + "value": "🈹", + "name": "Japanese sign meaning “discount”", + "codePoints": [ + "U+1F239" + ] + }, + { + "value": "🌡️", + "name": "thermometer", + "codePoints": [ + "U+1F321", + "U+FE0F" + ] + }, + { + "value": "🍃", + "name": "leaves fluttering in wind", + "codePoints": [ + "U+1F343" + ] + }, + { + "value": "🎒", + "name": "backpack", + "codePoints": [ + "U+1F392" + ] + }, + { + "value": "🎓", + "name": "graduation cap", + "codePoints": [ + "U+1F393" + ] + }, + { + "value": "🎩", + "name": "top hat", + "codePoints": [ + "U+1F3A9" + ] + }, + { + "value": "🏷️", + "name": "label tag", + "codePoints": [ + "U+1F3F7", + "U+FE0F" + ] + }, + { + "value": "🐏", + "name": "ram", + "codePoints": [ + "U+1F40F" + ] + }, + { + "value": "🐐", + "name": "goat", + "codePoints": [ + "U+1F410" + ] + }, + { + "value": "🐑", + "name": "sheep", + "codePoints": [ + "U+1F411" + ] + }, + { + "value": "🐦‍🔥", + "name": "phoenix", + "codePoints": [ + "U+1F426", + "U+200D", + "U+1F525" + ] + }, + { + "value": "🐾", + "name": "paw prints", + "codePoints": [ + "U+1F43E" + ] + }, + { + "value": "👀", + "name": "eyes", + "codePoints": [ + "U+1F440" + ] + }, + { + "value": "👁️", + "name": "eye", + "codePoints": [ + "U+1F441", + "U+FE0F" + ] + }, + { + "value": "👁️‍🗨️", + "name": "I am a witness", + "codePoints": [ + "U+1F441", + "U+FE0F", + "U+200D", + "U+1F5E8", + "U+FE0F" + ] + }, + { + "value": "👂", + "name": "ear", + "codePoints": [ + "U+1F442" + ] + }, + { + "value": "👃", + "name": "nose", + "codePoints": [ + "U+1F443" + ] + }, + { + "value": "👄", + "name": "mouth", + "codePoints": [ + "U+1F444" + ] + }, + { + "value": "👊", + "name": "closed fist", + "codePoints": [ + "U+1F44A" + ] + }, + { + "value": "👏", + "name": "clapping hands", + "codePoints": [ + "U+1F44F" + ] + }, + { + "value": "👐", + "name": "open hands", + "codePoints": [ + "U+1F450" + ] + }, + { + "value": "👒", + "name": "hat with bow", + "codePoints": [ + "U+1F452" + ] + }, + { + "value": "👔", + "name": "shirt and tie", + "codePoints": [ + "U+1F454" + ] + }, + { + "value": "👕", + "name": "polo shirt", + "codePoints": [ + "U+1F455" + ] + }, + { + "value": "👖", + "name": "jeans", + "codePoints": [ + "U+1F456" + ] + }, + { + "value": "👗", + "name": "dress", + "codePoints": [ + "U+1F457" + ] + }, + { + "value": "👘", + "name": "kimono", + "codePoints": [ + "U+1F458" + ] + }, + { + "value": "👙", + "name": "bikini", + "codePoints": [ + "U+1F459" + ] + }, + { + "value": "👚", + "name": "blouse", + "codePoints": [ + "U+1F45A" + ] + }, + { + "value": "👛", + "name": "purse", + "codePoints": [ + "U+1F45B" + ] + }, + { + "value": "👜", + "name": "handbag", + "codePoints": [ + "U+1F45C" + ] + }, + { + "value": "👝", + "name": "pouch", + "codePoints": [ + "U+1F45D" + ] + }, + { + "value": "👞", + "name": "dress shoe", + "codePoints": [ + "U+1F45E" + ] + }, + { + "value": "👠", + "name": "high-heeled shoe", + "codePoints": [ + "U+1F460" + ] + }, + { + "value": "👡", + "name": "heeled sandal", + "codePoints": [ + "U+1F461" + ] + }, + { + "value": "👢", + "name": "heeled boots", + "codePoints": [ + "U+1F462" + ] + }, + { + "value": "👣", + "name": "footprints", + "codePoints": [ + "U+1F463" + ] + }, + { + "value": "👨‍🦼", + "name": "man in motorized wheelchair", + "codePoints": [ + "U+1F468", + "U+200D", + "U+1F9BC" + ] + }, + { + "value": "👨‍🦼‍➡️", + "name": "man in motorized wheelchair facing right", + "codePoints": [ + "U+1F468", + "U+200D", + "U+1F9BC", + "U+200D", + "U+27A1", + "U+FE0F" + ] + }, + { + "value": "👨‍🦽", + "name": "man in manual wheelchair", + "codePoints": [ + "U+1F468", + "U+200D", + "U+1F9BD" + ] + }, + { + "value": "👨‍🦽‍➡️", + "name": "man in manual wheelchair facing right", + "codePoints": [ + "U+1F468", + "U+200D", + "U+1F9BD", + "U+200D", + "U+27A1", + "U+FE0F" + ] + }, + { + "value": "👩‍🦼", + "name": "woman in motorized wheelchair", + "codePoints": [ + "U+1F469", + "U+200D", + "U+1F9BC" + ] + }, + { + "value": "👩‍🦼‍➡️", + "name": "woman in motorized wheelchair facing right", + "codePoints": [ + "U+1F469", + "U+200D", + "U+1F9BC", + "U+200D", + "U+27A1", + "U+FE0F" + ] + }, + { + "value": "👩‍🦽", + "name": "woman in manual wheelchair", + "codePoints": [ + "U+1F469", + "U+200D", + "U+1F9BD" + ] + }, + { + "value": "👩‍🦽‍➡️", + "name": "woman in manual wheelchair facing right", + "codePoints": [ + "U+1F469", + "U+200D", + "U+1F9BD", + "U+200D", + "U+27A1", + "U+FE0F" + ] + }, + { + "value": "👯", + "name": "dancing people wearing bunny ears", + "codePoints": [ + "U+1F46F" + ] + }, + { + "value": "👯‍♀️", + "name": "dancing women wearing bunny ears", + "codePoints": [ + "U+1F46F", + "U+200D", + "U+2640", + "U+FE0F" + ] + }, + { + "value": "👯‍♂️", + "name": "dancing men wearing bunny ears", + "codePoints": [ + "U+1F46F", + "U+200D", + "U+2642", + "U+FE0F" + ] + }, + { + "value": "👲", + "name": "man with Chinese cap", + "codePoints": [ + "U+1F472" + ] + }, + { + "value": "💄", + "name": "lipstick", + "codePoints": [ + "U+1F484" + ] + }, + { + "value": "💅", + "name": "nail polish", + "codePoints": [ + "U+1F485" + ] + }, + { + "value": "💈", + "name": "barber pole", + "codePoints": [ + "U+1F488" + ] + }, + { + "value": "💉", + "name": "syringe", + "codePoints": [ + "U+1F489" + ] + }, + { + "value": "💊", + "name": "pill", + "codePoints": [ + "U+1F48A" + ] + }, + { + "value": "💍", + "name": "ring", + "codePoints": [ + "U+1F48D" + ] + }, + { + "value": "💎", + "name": "gemstone", + "codePoints": [ + "U+1F48E" + ] + }, + { + "value": "💒", + "name": "wedding", + "codePoints": [ + "U+1F492" + ] + }, + { + "value": "💠", + "name": "diamond shape with a dot inside", + "codePoints": [ + "U+1F4A0" + ] + }, + { + "value": "💡", + "name": "light bulb", + "codePoints": [ + "U+1F4A1" + ] + }, + { + "value": "💣", + "name": "bomb", + "codePoints": [ + "U+1F4A3" + ] + }, + { + "value": "💤", + "name": "sleeping sign", + "codePoints": [ + "U+1F4A4" + ] + }, + { + "value": "💥", + "name": "explosion", + "codePoints": [ + "U+1F4A5" + ] + }, + { + "value": "💦", + "name": "water droplets", + "codePoints": [ + "U+1F4A6" + ] + }, + { + "value": "💧", + "name": "droplet", + "codePoints": [ + "U+1F4A7" + ] + }, + { + "value": "💨", + "name": "gust of wind", + "codePoints": [ + "U+1F4A8" + ] + }, + { + "value": "💰", + "name": "money bag", + "codePoints": [ + "U+1F4B0" + ] + }, + { + "value": "💲", + "name": "dollar sign", + "codePoints": [ + "U+1F4B2" + ] + }, + { + "value": "💸", + "name": "money with wings", + "codePoints": [ + "U+1F4B8" + ] + }, + { + "value": "💹", + "name": "chart with upwards trend and yen sign", + "codePoints": [ + "U+1F4B9" + ] + }, + { + "value": "💺", + "name": "seat", + "codePoints": [ + "U+1F4BA" + ] + }, + { + "value": "💻", + "name": "laptop", + "codePoints": [ + "U+1F4BB" + ] + }, + { + "value": "💼", + "name": "briefcase", + "codePoints": [ + "U+1F4BC" + ] + }, + { + "value": "💽", + "name": "minidisc", + "codePoints": [ + "U+1F4BD" + ] + }, + { + "value": "💾", + "name": "floppy disk", + "codePoints": [ + "U+1F4BE" + ] + }, + { + "value": "💿", + "name": "cd", + "codePoints": [ + "U+1F4BF" + ] + }, + { + "value": "📀", + "name": "dvd", + "codePoints": [ + "U+1F4C0" + ] + }, + { + "value": "📁", + "name": "closed file folder", + "codePoints": [ + "U+1F4C1" + ] + }, + { + "value": "📂", + "name": "open file folder", + "codePoints": [ + "U+1F4C2" + ] + }, + { + "value": "📃", + "name": "page with curl", + "codePoints": [ + "U+1F4C3" + ] + }, + { + "value": "📄", + "name": "page facing up", + "codePoints": [ + "U+1F4C4" + ] + }, + { + "value": "📅", + "name": "calendar", + "codePoints": [ + "U+1F4C5" + ] + }, + { + "value": "📈", + "name": "chart with upwards trend", + "codePoints": [ + "U+1F4C8" + ] + }, + { + "value": "📉", + "name": "chart with downwards trend", + "codePoints": [ + "U+1F4C9" + ] + }, + { + "value": "📊", + "name": "bar chart", + "codePoints": [ + "U+1F4CA" + ] + }, + { + "value": "📌", + "name": "pushpin", + "codePoints": [ + "U+1F4CC" + ] + }, + { + "value": "📍", + "name": "round pushpin", + "codePoints": [ + "U+1F4CD" + ] + }, + { + "value": "📎", + "name": "paperclip", + "codePoints": [ + "U+1F4CE" + ] + }, + { + "value": "📏", + "name": "straight ruler", + "codePoints": [ + "U+1F4CF" + ] + }, + { + "value": "📐", + "name": "triangular ruler", + "codePoints": [ + "U+1F4D0" + ] + }, + { + "value": "📑", + "name": "bookmark tabs", + "codePoints": [ + "U+1F4D1" + ] + }, + { + "value": "📒", + "name": "ledger", + "codePoints": [ + "U+1F4D2" + ] + }, + { + "value": "📕", + "name": "red textbook", + "codePoints": [ + "U+1F4D5" + ] + }, + { + "value": "📖", + "name": "open book", + "codePoints": [ + "U+1F4D6" + ] + }, + { + "value": "📗", + "name": "green textbook", + "codePoints": [ + "U+1F4D7" + ] + }, + { + "value": "📘", + "name": "blue textbook", + "codePoints": [ + "U+1F4D8" + ] + }, + { + "value": "📚", + "name": "books", + "codePoints": [ + "U+1F4DA" + ] + }, + { + "value": "📛", + "name": "name badge", + "codePoints": [ + "U+1F4DB" + ] + }, + { + "value": "📜", + "name": "scroll", + "codePoints": [ + "U+1F4DC" + ] + }, + { + "value": "📞", + "name": "telephone receiver", + "codePoints": [ + "U+1F4DE" + ] + }, + { + "value": "📟", + "name": "pager", + "codePoints": [ + "U+1F4DF" + ] + }, + { + "value": "📠", + "name": "fax", + "codePoints": [ + "U+1F4E0" + ] + }, + { + "value": "📢", + "name": "public address loudspeaker", + "codePoints": [ + "U+1F4E2" + ] + }, + { + "value": "📣", + "name": "cheering megaphone", + "codePoints": [ + "U+1F4E3" + ] + }, + { + "value": "📦", + "name": "package", + "codePoints": [ + "U+1F4E6" + ] + }, + { + "value": "📧", + "name": "email", + "codePoints": [ + "U+1F4E7" + ] + }, + { + "value": "📨", + "name": "incoming envelope", + "codePoints": [ + "U+1F4E8" + ] + }, + { + "value": "📩", + "name": "envelope with arrow", + "codePoints": [ + "U+1F4E9" + ] + }, + { + "value": "📯", + "name": "postal horn", + "codePoints": [ + "U+1F4EF" + ] + }, + { + "value": "📰", + "name": "newspaper", + "codePoints": [ + "U+1F4F0" + ] + }, + { + "value": "📱", + "name": "mobile phone", + "codePoints": [ + "U+1F4F1" + ] + }, + { + "value": "📲", + "name": "phone with arrow", + "codePoints": [ + "U+1F4F2" + ] + }, + { + "value": "📴", + "name": "mobile phone off", + "codePoints": [ + "U+1F4F4" + ] + }, + { + "value": "📵", + "name": "no mobile phones", + "codePoints": [ + "U+1F4F5" + ] + }, + { + "value": "📶", + "name": "cellular signal bars", + "codePoints": [ + "U+1F4F6" + ] + }, + { + "value": "📷", + "name": "camera", + "codePoints": [ + "U+1F4F7" + ] + }, + { + "value": "📸", + "name": "camera with flash", + "codePoints": [ + "U+1F4F8" + ] + }, + { + "value": "📹", + "name": "video camera", + "codePoints": [ + "U+1F4F9" + ] + }, + { + "value": "📺", + "name": "television", + "codePoints": [ + "U+1F4FA" + ] + }, + { + "value": "📻", + "name": "radio", + "codePoints": [ + "U+1F4FB" + ] + }, + { + "value": "📼", + "name": "videocassette", + "codePoints": [ + "U+1F4FC" + ] + }, + { + "value": "📽️", + "name": "film projector", + "codePoints": [ + "U+1F4FD", + "U+FE0F" + ] + }, + { + "value": "📿", + "name": "prayer beads", + "codePoints": [ + "U+1F4FF" + ] + }, + { + "value": "🔃", + "name": "clockwise vertical arrows", + "codePoints": [ + "U+1F503" + ] + }, + { + "value": "🔄", + "name": "counterclockwise arrows", + "codePoints": [ + "U+1F504" + ] + }, + { + "value": "🔇", + "name": "muted speaker", + "codePoints": [ + "U+1F507" + ] + }, + { + "value": "🔈", + "name": "speaker", + "codePoints": [ + "U+1F508" + ] + }, + { + "value": "🔉", + "name": "speaker with medium volume", + "codePoints": [ + "U+1F509" + ] + }, + { + "value": "🔊", + "name": "speaker with high volume", + "codePoints": [ + "U+1F50A" + ] + }, + { + "value": "🔌", + "name": "electric plug", + "codePoints": [ + "U+1F50C" + ] + }, + { + "value": "🔏", + "name": "lock with ink pen", + "codePoints": [ + "U+1F50F" + ] + }, + { + "value": "🔐", + "name": "closed lock with key", + "codePoints": [ + "U+1F510" + ] + }, + { + "value": "🔑", + "name": "key", + "codePoints": [ + "U+1F511" + ] + }, + { + "value": "🔒", + "name": "closed lock", + "codePoints": [ + "U+1F512" + ] + }, + { + "value": "🔓", + "name": "open lock", + "codePoints": [ + "U+1F513" + ] + }, + { + "value": "🔔", + "name": "bell", + "codePoints": [ + "U+1F514" + ] + }, + { + "value": "🔕", + "name": "muted bell", + "codePoints": [ + "U+1F515" + ] + }, + { + "value": "🔖", + "name": "bookmark", + "codePoints": [ + "U+1F516" + ] + }, + { + "value": "🔗", + "name": "link symbol", + "codePoints": [ + "U+1F517" + ] + }, + { + "value": "🔘", + "name": "radio button", + "codePoints": [ + "U+1F518" + ] + }, + { + "value": "🔟", + "name": "keycap ten", + "codePoints": [ + "U+1F51F" + ] + }, + { + "value": "🔥", + "name": "fire", + "codePoints": [ + "U+1F525" + ] + }, + { + "value": "🔦", + "name": "flashlight", + "codePoints": [ + "U+1F526" + ] + }, + { + "value": "🔧", + "name": "wrench", + "codePoints": [ + "U+1F527" + ] + }, + { + "value": "🔩", + "name": "nut and bolt", + "codePoints": [ + "U+1F529" + ] + }, + { + "value": "🔪", + "name": "knife", + "codePoints": [ + "U+1F52A" + ] + }, + { + "value": "🔫", + "name": "water pistol", + "codePoints": [ + "U+1F52B" + ] + }, + { + "value": "🔬", + "name": "microscope", + "codePoints": [ + "U+1F52C" + ] + }, + { + "value": "🔭", + "name": "telescope", + "codePoints": [ + "U+1F52D" + ] + }, + { + "value": "🔴", + "name": "red circle", + "codePoints": [ + "U+1F534" + ] + }, + { + "value": "🔵", + "name": "blue circle", + "codePoints": [ + "U+1F535" + ] + }, + { + "value": "🔷", + "name": "large blue diamond", + "codePoints": [ + "U+1F537" + ] + }, + { + "value": "🔹", + "name": "small blue diamond", + "codePoints": [ + "U+1F539" + ] + }, + { + "value": "🔺", + "name": "red triangle pointed up", + "codePoints": [ + "U+1F53A" + ] + }, + { + "value": "🔻", + "name": "red triangle pointed down", + "codePoints": [ + "U+1F53B" + ] + }, + { + "value": "🔼", + "name": "up-pointing triangle", + "codePoints": [ + "U+1F53C" + ] + }, + { + "value": "🔽", + "name": "down-pointing triangle", + "codePoints": [ + "U+1F53D" + ] + }, + { + "value": "🕐", + "name": "one o’clock", + "codePoints": [ + "U+1F550" + ] + }, + { + "value": "🕑", + "name": "two o’clock", + "codePoints": [ + "U+1F551" + ] + }, + { + "value": "🕒", + "name": "three o’clock", + "codePoints": [ + "U+1F552" + ] + }, + { + "value": "🕓", + "name": "four o’clock", + "codePoints": [ + "U+1F553" + ] + }, + { + "value": "🕔", + "name": "five o’clock", + "codePoints": [ + "U+1F554" + ] + }, + { + "value": "🕕", + "name": "six o’clock", + "codePoints": [ + "U+1F555" + ] + }, + { + "value": "🕖", + "name": "seven o’clock", + "codePoints": [ + "U+1F556" + ] + }, + { + "value": "🕗", + "name": "eight o’clock", + "codePoints": [ + "U+1F557" + ] + }, + { + "value": "🕘", + "name": "nine o’clock", + "codePoints": [ + "U+1F558" + ] + }, + { + "value": "🕙", + "name": "ten o’clock", + "codePoints": [ + "U+1F559" + ] + }, + { + "value": "🕚", + "name": "eleven o’clock", + "codePoints": [ + "U+1F55A" + ] + }, + { + "value": "🕛", + "name": "twelve o’clock", + "codePoints": [ + "U+1F55B" + ] + }, + { + "value": "🕜", + "name": "one-thirty", + "codePoints": [ + "U+1F55C" + ] + }, + { + "value": "🕝", + "name": "two-thirty", + "codePoints": [ + "U+1F55D" + ] + }, + { + "value": "🕞", + "name": "three-thirty", + "codePoints": [ + "U+1F55E" + ] + }, + { + "value": "🕟", + "name": "four-thirty", + "codePoints": [ + "U+1F55F" + ] + }, + { + "value": "🕠", + "name": "five-thirty", + "codePoints": [ + "U+1F560" + ] + }, + { + "value": "🕡", + "name": "six-thirty", + "codePoints": [ + "U+1F561" + ] + }, + { + "value": "🕢", + "name": "seven-thirty", + "codePoints": [ + "U+1F562" + ] + }, + { + "value": "🕣", + "name": "eight-thirty", + "codePoints": [ + "U+1F563" + ] + }, + { + "value": "🕤", + "name": "nine-thirty", + "codePoints": [ + "U+1F564" + ] + }, + { + "value": "🕥", + "name": "ten-thirty", + "codePoints": [ + "U+1F565" + ] + }, + { + "value": "🕦", + "name": "eleven-thirty", + "codePoints": [ + "U+1F566" + ] + }, + { + "value": "🕧", + "name": "twelve-thirty", + "codePoints": [ + "U+1F567" + ] + }, + { + "value": "🕯️", + "name": "candle", + "codePoints": [ + "U+1F56F", + "U+FE0F" + ] + }, + { + "value": "🕳️", + "name": "hole", + "codePoints": [ + "U+1F573", + "U+FE0F" + ] + }, + { + "value": "🖇️", + "name": "linked paperclips", + "codePoints": [ + "U+1F587", + "U+FE0F" + ] + }, + { + "value": "🖕", + "name": "middle finger", + "codePoints": [ + "U+1F595" + ] + }, + { + "value": "🖖", + "name": "hand with fingers split between middle and ring fingers", + "codePoints": [ + "U+1F596" + ] + }, + { + "value": "🖥️", + "name": "desktop computer", + "codePoints": [ + "U+1F5A5", + "U+FE0F" + ] + }, + { + "value": "🖨️", + "name": "printer", + "codePoints": [ + "U+1F5A8", + "U+FE0F" + ] + }, + { + "value": "🖼️", + "name": "frame with picture", + "codePoints": [ + "U+1F5BC", + "U+FE0F" + ] + }, + { + "value": "🗄️", + "name": "file cabinet", + "codePoints": [ + "U+1F5C4", + "U+FE0F" + ] + }, + { + "value": "🗑️", + "name": "wastebasket", + "codePoints": [ + "U+1F5D1", + "U+FE0F" + ] + }, + { + "value": "🗒️", + "name": "spiral notepad", + "codePoints": [ + "U+1F5D2", + "U+FE0F" + ] + }, + { + "value": "🗓️", + "name": "spiral calendar", + "codePoints": [ + "U+1F5D3", + "U+FE0F" + ] + }, + { + "value": "🗜️", + "name": "clamp", + "codePoints": [ + "U+1F5DC", + "U+FE0F" + ] + }, + { + "value": "🗝️", + "name": "old key", + "codePoints": [ + "U+1F5DD", + "U+FE0F" + ] + }, + { + "value": "🗞️", + "name": "rolled-up newspaper", + "codePoints": [ + "U+1F5DE", + "U+FE0F" + ] + }, + { + "value": "🗡️", + "name": "dagger", + "codePoints": [ + "U+1F5E1", + "U+FE0F" + ] + }, + { + "value": "🗼", + "name": "Tokyo tower", + "codePoints": [ + "U+1F5FC" + ] + }, + { + "value": "🗾", + "name": "silhouette of Japan", + "codePoints": [ + "U+1F5FE" + ] + }, + { + "value": "😔", + "name": "sad pensive face", + "codePoints": [ + "U+1F614" + ] + }, + { + "value": "😣", + "name": "persevering face", + "codePoints": [ + "U+1F623" + ] + }, + { + "value": "😦", + "name": "frowning face with open mouth", + "codePoints": [ + "U+1F626" + ] + }, + { + "value": "😮", + "name": "surprised face with open mouth", + "codePoints": [ + "U+1F62E" + ] + }, + { + "value": "😳", + "name": "face with wide open eyes", + "codePoints": [ + "U+1F633" + ] + }, + { + "value": "😴", + "name": "sleeping face", + "codePoints": [ + "U+1F634" + ] + }, + { + "value": "🙅", + "name": "person gesturing no", + "codePoints": [ + "U+1F645" + ] + }, + { + "value": "🙅‍♀️", + "name": "woman gesturing no", + "codePoints": [ + "U+1F645", + "U+200D", + "U+2640", + "U+FE0F" + ] + }, + { + "value": "🙅‍♂️", + "name": "man gesturing no", + "codePoints": [ + "U+1F645", + "U+200D", + "U+2642", + "U+FE0F" + ] + }, + { + "value": "🙆", + "name": "person gesturing OK", + "codePoints": [ + "U+1F646" + ] + }, + { + "value": "🙆‍♀️", + "name": "woman gesturing OK", + "codePoints": [ + "U+1F646", + "U+200D", + "U+2640", + "U+FE0F" + ] + }, + { + "value": "🙆‍♂️", + "name": "man gesturing OK", + "codePoints": [ + "U+1F646", + "U+200D", + "U+2642", + "U+FE0F" + ] + }, + { + "value": "🙏", + "name": "hands pressed together", + "codePoints": [ + "U+1F64F" + ] + }, + { + "value": "🚪", + "name": "door", + "codePoints": [ + "U+1F6AA" + ] + }, + { + "value": "🚯", + "name": "no littering", + "codePoints": [ + "U+1F6AF" + ] + }, + { + "value": "🚽", + "name": "toilet", + "codePoints": [ + "U+1F6BD" + ] + }, + { + "value": "🚿", + "name": "shower", + "codePoints": [ + "U+1F6BF" + ] + }, + { + "value": "🛋️", + "name": "couch and lamp", + "codePoints": [ + "U+1F6CB", + "U+FE0F" + ] + }, + { + "value": "🛌", + "name": "person sleeping", + "codePoints": [ + "U+1F6CC" + ] + }, + { + "value": "🛍️", + "name": "shopping bags", + "codePoints": [ + "U+1F6CD", + "U+FE0F" + ] + }, + { + "value": "🛏️", + "name": "bed", + "codePoints": [ + "U+1F6CF", + "U+FE0F" + ] + }, + { + "value": "🛟", + "name": "ring buoy", + "codePoints": [ + "U+1F6DF" + ] + }, + { + "value": "🛡️", + "name": "shield", + "codePoints": [ + "U+1F6E1", + "U+FE0F" + ] + }, + { + "value": "🤌", + "name": "pinched fingers", + "codePoints": [ + "U+1F90C" + ] + }, + { + "value": "🤏", + "name": "pinching hand", + "codePoints": [ + "U+1F90F" + ] + }, + { + "value": "🤑", + "name": "money-mouth face", + "codePoints": [ + "U+1F911" + ] + }, + { + "value": "🤒", + "name": "face with thermometer", + "codePoints": [ + "U+1F912" + ] + }, + { + "value": "🤕", + "name": "face with head-bandage", + "codePoints": [ + "U+1F915" + ] + }, + { + "value": "🤚", + "name": "back of hand", + "codePoints": [ + "U+1F91A" + ] + }, + { + "value": "🤛", + "name": "left-facing fist", + "codePoints": [ + "U+1F91B" + ] + }, + { + "value": "🤜", + "name": "right-facing fist", + "codePoints": [ + "U+1F91C" + ] + }, + { + "value": "🤯", + "name": "exploding head", + "codePoints": [ + "U+1F92F" + ] + }, + { + "value": "🤱", + "name": "breastfeeding", + "codePoints": [ + "U+1F931" + ] + }, + { + "value": "🤲", + "name": "palms together facing up", + "codePoints": [ + "U+1F932" + ] + }, + { + "value": "🥅", + "name": "goal net", + "codePoints": [ + "U+1F945" + ] + }, + { + "value": "🥦", + "name": "broccoli", + "codePoints": [ + "U+1F966" + ] + }, + { + "value": "🥻", + "name": "sari", + "codePoints": [ + "U+1F97B" + ] + }, + { + "value": "🥼", + "name": "lab coat", + "codePoints": [ + "U+1F97C" + ] + }, + { + "value": "🥽", + "name": "goggles", + "codePoints": [ + "U+1F97D" + ] + }, + { + "value": "🥿", + "name": "flat shoe", + "codePoints": [ + "U+1F97F" + ] + }, + { + "value": "🦓", + "name": "zebra", + "codePoints": [ + "U+1F993" + ] + }, + { + "value": "🦕", + "name": "dinosaur", + "codePoints": [ + "U+1F995" + ] + }, + { + "value": "🦖", + "name": "T-Rex", + "codePoints": [ + "U+1F996" + ] + }, + { + "value": "🦝", + "name": "raccoon", + "codePoints": [ + "U+1F99D" + ] + }, + { + "value": "🦯", + "name": "white cane", + "codePoints": [ + "U+1F9AF" + ] + }, + { + "value": "🦴", + "name": "bone", + "codePoints": [ + "U+1F9B4" + ] + }, + { + "value": "🦵", + "name": "leg", + "codePoints": [ + "U+1F9B5" + ] + }, + { + "value": "🦶", + "name": "foot", + "codePoints": [ + "U+1F9B6" + ] + }, + { + "value": "🦷", + "name": "tooth", + "codePoints": [ + "U+1F9B7" + ] + }, + { + "value": "🦺", + "name": "safety vest", + "codePoints": [ + "U+1F9BA" + ] + }, + { + "value": "🦻", + "name": "ear with hearing aid", + "codePoints": [ + "U+1F9BB" + ] + }, + { + "value": "🦼", + "name": "motorized wheelchair", + "codePoints": [ + "U+1F9BC" + ] + }, + { + "value": "🦽", + "name": "manual wheelchair", + "codePoints": [ + "U+1F9BD" + ] + }, + { + "value": "🧆", + "name": "falafel", + "codePoints": [ + "U+1F9C6" + ] + }, + { + "value": "🧉", + "name": "maté", + "codePoints": [ + "U+1F9C9" + ] + }, + { + "value": "🧊", + "name": "ice", + "codePoints": [ + "U+1F9CA" + ] + }, + { + "value": "🧑‍🦼", + "name": "person in motorized wheelchair", + "codePoints": [ + "U+1F9D1", + "U+200D", + "U+1F9BC" + ] + }, + { + "value": "🧑‍🦼‍➡️", + "name": "person in motorized wheelchair facing right", + "codePoints": [ + "U+1F9D1", + "U+200D", + "U+1F9BC", + "U+200D", + "U+27A1", + "U+FE0F" + ] + }, + { + "value": "🧑‍🦽", + "name": "person in manual wheelchair", + "codePoints": [ + "U+1F9D1", + "U+200D", + "U+1F9BD" + ] + }, + { + "value": "🧑‍🦽‍➡️", + "name": "person in manual wheelchair facing right", + "codePoints": [ + "U+1F9D1", + "U+200D", + "U+1F9BD", + "U+200D", + "U+27A1", + "U+FE0F" + ] + }, + { + "value": "🧢", + "name": "billed hat", + "codePoints": [ + "U+1F9E2" + ] + }, + { + "value": "🧤", + "name": "gloves", + "codePoints": [ + "U+1F9E4" + ] + }, + { + "value": "🧥", + "name": "coat", + "codePoints": [ + "U+1F9E5" + ] + }, + { + "value": "🧦", + "name": "socks", + "codePoints": [ + "U+1F9E6" + ] + }, + { + "value": "🧪", + "name": "test tube", + "codePoints": [ + "U+1F9EA" + ] + }, + { + "value": "🧫", + "name": "petri dish", + "codePoints": [ + "U+1F9EB" + ] + }, + { + "value": "🧬", + "name": "DNA", + "codePoints": [ + "U+1F9EC" + ] + }, + { + "value": "🧮", + "name": "abacus", + "codePoints": [ + "U+1F9EE" + ] + }, + { + "value": "🧯", + "name": "fire extinguisher", + "codePoints": [ + "U+1F9EF" + ] + }, + { + "value": "🧱", + "name": "bricks", + "codePoints": [ + "U+1F9F1" + ] + }, + { + "value": "🧲", + "name": "magnet", + "codePoints": [ + "U+1F9F2" + ] + }, + { + "value": "🧵", + "name": "thread", + "codePoints": [ + "U+1F9F5" + ] + }, + { + "value": "🧶", + "name": "yarn", + "codePoints": [ + "U+1F9F6" + ] + }, + { + "value": "🧷", + "name": "safety pin", + "codePoints": [ + "U+1F9F7" + ] + }, + { + "value": "🧹", + "name": "broom", + "codePoints": [ + "U+1F9F9" + ] + }, + { + "value": "🧺", + "name": "basket", + "codePoints": [ + "U+1F9FA" + ] + }, + { + "value": "🧻", + "name": "roll of paper", + "codePoints": [ + "U+1F9FB" + ] + }, + { + "value": "🧼", + "name": "soap", + "codePoints": [ + "U+1F9FC" + ] + }, + { + "value": "🧽", + "name": "sponge", + "codePoints": [ + "U+1F9FD" + ] + }, + { + "value": "🧾", + "name": "receipt", + "codePoints": [ + "U+1F9FE" + ] + }, + { + "value": "🧿", + "name": "nazar amulet", + "codePoints": [ + "U+1F9FF" + ] + }, + { + "value": "🩲", + "name": "briefs", + "codePoints": [ + "U+1FA72" + ] + }, + { + "value": "🩳", + "name": "shorts", + "codePoints": [ + "U+1FA73" + ] + }, + { + "value": "🩴", + "name": "sandal", + "codePoints": [ + "U+1FA74" + ] + }, + { + "value": "🩷", + "name": "pink heart", + "codePoints": [ + "U+1FA77" + ] + }, + { + "value": "🩸", + "name": "drop of blood", + "codePoints": [ + "U+1FA78" + ] + }, + { + "value": "🩹", + "name": "adhesive bandage", + "codePoints": [ + "U+1FA79" + ] + }, + { + "value": "🩺", + "name": "stethoscope", + "codePoints": [ + "U+1FA7A" + ] + }, + { + "value": "🩻", + "name": "X-ray", + "codePoints": [ + "U+1FA7B" + ] + }, + { + "value": "🩼", + "name": "crutch", + "codePoints": [ + "U+1FA7C" + ] + }, + { + "value": "🪅", + "name": "piñata", + "codePoints": [ + "U+1FA85" + ] + }, + { + "value": "🪆", + "name": "nesting dolls", + "codePoints": [ + "U+1FA86" + ] + }, + { + "value": "🪇", + "name": "maracas", + "codePoints": [ + "U+1FA87" + ] + }, + { + "value": "🪈", + "name": "flute", + "codePoints": [ + "U+1FA88" + ] + }, + { + "value": "🪉", + "name": "harp", + "codePoints": [ + "U+1FA89" + ] + }, + { + "value": "🪏", + "name": "shovel", + "codePoints": [ + "U+1FA8F" + ] + }, + { + "value": "🪑", + "name": "chair", + "codePoints": [ + "U+1FA91" + ] + }, + { + "value": "🪒", + "name": "razor", + "codePoints": [ + "U+1FA92" + ] + }, + { + "value": "🪓", + "name": "axe", + "codePoints": [ + "U+1FA93" + ] + }, + { + "value": "🪔", + "name": "diya lamp", + "codePoints": [ + "U+1FA94" + ] + }, + { + "value": "🪖", + "name": "military helmet", + "codePoints": [ + "U+1FA96" + ] + }, + { + "value": "🪙", + "name": "coin", + "codePoints": [ + "U+1FA99" + ] + }, + { + "value": "🪚", + "name": "hand saw", + "codePoints": [ + "U+1FA9A" + ] + }, + { + "value": "🪛", + "name": "screwdriver", + "codePoints": [ + "U+1FA9B" + ] + }, + { + "value": "🪜", + "name": "ladder", + "codePoints": [ + "U+1FA9C" + ] + }, + { + "value": "🪝", + "name": "hook", + "codePoints": [ + "U+1FA9D" + ] + }, + { + "value": "🪞", + "name": "mirror", + "codePoints": [ + "U+1FA9E" + ] + }, + { + "value": "🪟", + "name": "window", + "codePoints": [ + "U+1FA9F" + ] + }, + { + "value": "🪠", + "name": "plunger", + "codePoints": [ + "U+1FAA0" + ] + }, + { + "value": "🪡", + "name": "sewing needle", + "codePoints": [ + "U+1FAA1" + ] + }, + { + "value": "🪢", + "name": "knot", + "codePoints": [ + "U+1FAA2" + ] + }, + { + "value": "🪣", + "name": "bucket", + "codePoints": [ + "U+1FAA3" + ] + }, + { + "value": "🪥", + "name": "toothbrush", + "codePoints": [ + "U+1FAA5" + ] + }, + { + "value": "🪨", + "name": "rock", + "codePoints": [ + "U+1FAA8" + ] + }, + { + "value": "🪭", + "name": "folding hand fan", + "codePoints": [ + "U+1FAAD" + ] + }, + { + "value": "🪮", + "name": "hair pick", + "codePoints": [ + "U+1FAAE" + ] + }, + { + "value": "🪵", + "name": "wood", + "codePoints": [ + "U+1FAB5" + ] + }, + { + "value": "🪹", + "name": "empty nest", + "codePoints": [ + "U+1FAB9" + ] + }, + { + "value": "🪻", + "name": "hyacinth", + "codePoints": [ + "U+1FABB" + ] + }, + { + "value": "🪽", + "name": "wing", + "codePoints": [ + "U+1FABD" + ] + }, + { + "value": "🪿", + "name": "goose", + "codePoints": [ + "U+1FABF" + ] + }, + { + "value": "🫁", + "name": "lungs", + "codePoints": [ + "U+1FAC1" + ] + }, + { + "value": "🫆", + "name": "fingerprint", + "codePoints": [ + "U+1FAC6" + ] + }, + { + "value": "🫏", + "name": "donkey", + "codePoints": [ + "U+1FACF" + ] + }, + { + "value": "🫗", + "name": "pouring liquid", + "codePoints": [ + "U+1FAD7" + ] + }, + { + "value": "🫛", + "name": "pea pod", + "codePoints": [ + "U+1FADB" + ] + }, + { + "value": "🫟", + "name": "splatter", + "codePoints": [ + "U+1FADF" + ] + }, + { + "value": "🫢", + "name": "face with open eyes and hand over mouth", + "codePoints": [ + "U+1FAE2" + ] + }, + { + "value": "🫦", + "name": "biting lip", + "codePoints": [ + "U+1FAE6" + ] + }, + { + "value": "🫧", + "name": "bubbles", + "codePoints": [ + "U+1FAE7" + ] + }, + { + "value": "🫩", + "name": "face with bags under eyes", + "codePoints": [ + "U+1FAE9" + ] + }, + { + "value": "🫱", + "name": "rightward hand", + "codePoints": [ + "U+1FAF1" + ] + }, + { + "value": "🫲", + "name": "leftward hand", + "codePoints": [ + "U+1FAF2" + ] + }, + { + "value": "🫳", + "name": "palm down hand", + "codePoints": [ + "U+1FAF3" + ] + }, + { + "value": "🫴", + "name": "palm up hand", + "codePoints": [ + "U+1FAF4" + ] + }, + { + "value": "🫵", + "name": "index pointing at the viewer", + "codePoints": [ + "U+1FAF5" + ] + }, + { + "value": "🫷", + "name": "leftwards pushing hand", + "codePoints": [ + "U+1FAF7" + ] + }, + { + "value": "🫸", + "name": "rightwards pushing hand", + "codePoints": [ + "U+1FAF8" + ] + } + ] + }, + { + "id": "symbols", + "title": { + "en": "Symbols", + "zh-Hans": "符号" + }, + "icon": "emoji_tab_symbols", + "type": "static", + "emojis": [ + { + "value": "#️⃣", + "name": "number sign", + "codePoints": [ + "U+0023", + "U+FE0F", + "U+20E3" + ] + }, + { + "value": "©️", + "name": "copyright sign", + "codePoints": [ + "U+00A9", + "U+FE0F" + ] + }, + { + "value": "®️", + "name": "registered sign", + "codePoints": [ + "U+00AE", + "U+FE0F" + ] + }, + { + "value": "‼️", + "name": "red double exclamation mark", + "codePoints": [ + "U+203C", + "U+FE0F" + ] + }, + { + "value": "⁉️", + "name": "red exclamation mark and question mark", + "codePoints": [ + "U+2049", + "U+FE0F" + ] + }, + { + "value": "™️", + "name": "trade mark sign", + "codePoints": [ + "U+2122", + "U+FE0F" + ] + }, + { + "value": "ℹ️", + "name": "information source", + "codePoints": [ + "U+2139", + "U+FE0F" + ] + }, + { + "value": "↔️", + "name": "left-right arrow", + "codePoints": [ + "U+2194", + "U+FE0F" + ] + }, + { + "value": "↕️", + "name": "up-down arrow", + "codePoints": [ + "U+2195", + "U+FE0F" + ] + }, + { + "value": "↖️", + "name": "up-left arrow", + "codePoints": [ + "U+2196", + "U+FE0F" + ] + }, + { + "value": "↗️", + "name": "up-right arrow", + "codePoints": [ + "U+2197", + "U+FE0F" + ] + }, + { + "value": "↘️", + "name": "down-right arrow", + "codePoints": [ + "U+2198", + "U+FE0F" + ] + }, + { + "value": "↙️", + "name": "down-left arrow", + "codePoints": [ + "U+2199", + "U+FE0F" + ] + }, + { + "value": "↩️", + "name": "right arrow curving left", + "codePoints": [ + "U+21A9", + "U+FE0F" + ] + }, + { + "value": "↪️", + "name": "left arrow curving right", + "codePoints": [ + "U+21AA", + "U+FE0F" + ] + }, + { + "value": "⏏️", + "name": "eject symbol", + "codePoints": [ + "U+23CF", + "U+FE0F" + ] + }, + { + "value": "⏩", + "name": "fast forward symbol", + "codePoints": [ + "U+23E9" + ] + }, + { + "value": "⏪", + "name": "rewind symbol", + "codePoints": [ + "U+23EA" + ] + }, + { + "value": "⏭️", + "name": "skip forward symbol", + "codePoints": [ + "U+23ED", + "U+FE0F" + ] + }, + { + "value": "⏮️", + "name": "skip backward symbol", + "codePoints": [ + "U+23EE", + "U+FE0F" + ] + }, + { + "value": "⏸️", + "name": "pause symbol", + "codePoints": [ + "U+23F8", + "U+FE0F" + ] + }, + { + "value": "⏹️", + "name": "stop symbol", + "codePoints": [ + "U+23F9", + "U+FE0F" + ] + }, + { + "value": "⏺️", + "name": "record symbol", + "codePoints": [ + "U+23FA", + "U+FE0F" + ] + }, + { + "value": "Ⓜ️", + "name": "circled M", + "codePoints": [ + "U+24C2", + "U+FE0F" + ] + }, + { + "value": "☝️", + "name": "index finger pointing up", + "codePoints": [ + "U+261D", + "U+FE0F" + ] + }, + { + "value": "☣️", + "name": "biohazard", + "codePoints": [ + "U+2623", + "U+FE0F" + ] + }, + { + "value": "☮️", + "name": "peace symbol", + "codePoints": [ + "U+262E", + "U+FE0F" + ] + }, + { + "value": "☯️", + "name": "yin yang", + "codePoints": [ + "U+262F", + "U+FE0F" + ] + }, + { + "value": "☸️", + "name": "wheel of dharma", + "codePoints": [ + "U+2638", + "U+FE0F" + ] + }, + { + "value": "♈️", + "name": "Aries", + "codePoints": [ + "U+2648", + "U+FE0F" + ] + }, + { + "value": "♉️", + "name": "Taurus", + "codePoints": [ + "U+2649", + "U+FE0F" + ] + }, + { + "value": "♋️", + "name": "Cancer", + "codePoints": [ + "U+264B", + "U+FE0F" + ] + }, + { + "value": "♌️", + "name": "Leo", + "codePoints": [ + "U+264C", + "U+FE0F" + ] + }, + { + "value": "♍️", + "name": "Virgo", + "codePoints": [ + "U+264D", + "U+FE0F" + ] + }, + { + "value": "♎️", + "name": "Libra", + "codePoints": [ + "U+264E", + "U+FE0F" + ] + }, + { + "value": "♏️", + "name": "Scorpio", + "codePoints": [ + "U+264F", + "U+FE0F" + ] + }, + { + "value": "♐️", + "name": "Sagittarius", + "codePoints": [ + "U+2650", + "U+FE0F" + ] + }, + { + "value": "♒️", + "name": "Aquarius", + "codePoints": [ + "U+2652", + "U+FE0F" + ] + }, + { + "value": "♓️", + "name": "Pisces", + "codePoints": [ + "U+2653", + "U+FE0F" + ] + }, + { + "value": "♠️", + "name": "spades suit", + "codePoints": [ + "U+2660", + "U+FE0F" + ] + }, + { + "value": "♣️", + "name": "clubs suit", + "codePoints": [ + "U+2663", + "U+FE0F" + ] + }, + { + "value": "♻️", + "name": "recycling symbol", + "codePoints": [ + "U+267B", + "U+FE0F" + ] + }, + { + "value": "♾️", + "name": "infinity", + "codePoints": [ + "U+267E", + "U+FE0F" + ] + }, + { + "value": "⚕️", + "name": "staff of Aesculapius", + "codePoints": [ + "U+2695", + "U+FE0F" + ] + }, + { + "value": "⚖️", + "name": "scales", + "codePoints": [ + "U+2696", + "U+FE0F" + ] + }, + { + "value": "⚗️", + "name": "alembic", + "codePoints": [ + "U+2697", + "U+FE0F" + ] + }, + { + "value": "⚛️", + "name": "atom symbol", + "codePoints": [ + "U+269B", + "U+FE0F" + ] + }, + { + "value": "⚜️", + "name": "fleur-de-lis", + "codePoints": [ + "U+269C", + "U+FE0F" + ] + }, + { + "value": "⚠️", + "name": "warning", + "codePoints": [ + "U+26A0", + "U+FE0F" + ] + }, + { + "value": "⚧️", + "name": "transgender symbol", + "codePoints": [ + "U+26A7", + "U+FE0F" + ] + }, + { + "value": "⚪️", + "name": "white circle", + "codePoints": [ + "U+26AA", + "U+FE0F" + ] + }, + { + "value": "⚫️", + "name": "black circle", + "codePoints": [ + "U+26AB", + "U+FE0F" + ] + }, + { + "value": "⛎", + "name": "Ophiuchus", + "codePoints": [ + "U+26CE" + ] + }, + { + "value": "⛔️", + "name": "no entry", + "codePoints": [ + "U+26D4", + "U+FE0F" + ] + }, + { + "value": "✅", + "name": "check mark symbol", + "codePoints": [ + "U+2705" + ] + }, + { + "value": "✌️", + "name": "peace hand sign", + "codePoints": [ + "U+270C", + "U+FE0F" + ] + }, + { + "value": "✔️", + "name": "check mark", + "codePoints": [ + "U+2714", + "U+FE0F" + ] + }, + { + "value": "✝️", + "name": "Latin cross", + "codePoints": [ + "U+271D", + "U+FE0F" + ] + }, + { + "value": "✨", + "name": "sparkles", + "codePoints": [ + "U+2728" + ] + }, + { + "value": "✳️", + "name": "eight spoked asterisk", + "codePoints": [ + "U+2733", + "U+FE0F" + ] + }, + { + "value": "❇️", + "name": "sparkle", + "codePoints": [ + "U+2747", + "U+FE0F" + ] + }, + { + "value": "❌", + "name": "cross mark", + "codePoints": [ + "U+274C" + ] + }, + { + "value": "❓", + "name": "red question mark", + "codePoints": [ + "U+2753" + ] + }, + { + "value": "❔", + "name": "white question mark", + "codePoints": [ + "U+2754" + ] + }, + { + "value": "❕", + "name": "white exclamation mark", + "codePoints": [ + "U+2755" + ] + }, + { + "value": "❗️", + "name": "red exclamation mark", + "codePoints": [ + "U+2757", + "U+FE0F" + ] + }, + { + "value": "➕", + "name": "plus symbol", + "codePoints": [ + "U+2795" + ] + }, + { + "value": "➖", + "name": "minus symbol", + "codePoints": [ + "U+2796" + ] + }, + { + "value": "➗", + "name": "division symbol", + "codePoints": [ + "U+2797" + ] + }, + { + "value": "➡️", + "name": "right arrow", + "codePoints": [ + "U+27A1", + "U+FE0F" + ] + }, + { + "value": "➰", + "name": "curly loop", + "codePoints": [ + "U+27B0" + ] + }, + { + "value": "➿", + "name": "double curly loop", + "codePoints": [ + "U+27BF" + ] + }, + { + "value": "⤴️", + "name": "right arrow curving up", + "codePoints": [ + "U+2934", + "U+FE0F" + ] + }, + { + "value": "⤵️", + "name": "right arrow curving down", + "codePoints": [ + "U+2935", + "U+FE0F" + ] + }, + { + "value": "⬅️", + "name": "left arrow", + "codePoints": [ + "U+2B05", + "U+FE0F" + ] + }, + { + "value": "⬆️", + "name": "up arrow", + "codePoints": [ + "U+2B06", + "U+FE0F" + ] + }, + { + "value": "⬇️", + "name": "down arrow", + "codePoints": [ + "U+2B07", + "U+FE0F" + ] + }, + { + "value": "〽️", + "name": "part alternation mark", + "codePoints": [ + "U+303D", + "U+FE0F" + ] + }, + { + "value": "㊙️", + "name": "Japanese sign meaning “secret”", + "codePoints": [ + "U+3299", + "U+FE0F" + ] + }, + { + "value": "🅰️", + "name": "blood type A", + "codePoints": [ + "U+1F170", + "U+FE0F" + ] + }, + { + "value": "🅱️", + "name": "blood type B", + "codePoints": [ + "U+1F171", + "U+FE0F" + ] + }, + { + "value": "🅾️", + "name": "blood type O", + "codePoints": [ + "U+1F17E", + "U+FE0F" + ] + }, + { + "value": "🆎", + "name": "blood type AB", + "codePoints": [ + "U+1F18E" + ] + }, + { + "value": "🆑", + "name": "CL sign", + "codePoints": [ + "U+1F191" + ] + }, + { + "value": "🆒", + "name": "cool sign", + "codePoints": [ + "U+1F192" + ] + }, + { + "value": "🆓", + "name": "free sign", + "codePoints": [ + "U+1F193" + ] + }, + { + "value": "🆕", + "name": "new sign", + "codePoints": [ + "U+1F195" + ] + }, + { + "value": "🆖", + "name": "no good sign", + "codePoints": [ + "U+1F196" + ] + }, + { + "value": "🆗", + "name": "OK sign", + "codePoints": [ + "U+1F197" + ] + }, + { + "value": "🆘", + "name": "SOS sign", + "codePoints": [ + "U+1F198" + ] + }, + { + "value": "🆙", + "name": "up sign", + "codePoints": [ + "U+1F199" + ] + }, + { + "value": "🈁", + "name": "Japanese word sign meaning “here”", + "codePoints": [ + "U+1F201" + ] + }, + { + "value": "🈂️", + "name": "Japanese sign meaning “service” or “service charge”", + "codePoints": [ + "U+1F202", + "U+FE0F" + ] + }, + { + "value": "🈚️", + "name": "Japanese sign meaning “free of charge”", + "codePoints": [ + "U+1F21A", + "U+FE0F" + ] + }, + { + "value": "🈯️", + "name": "Japanese sign meaning “reserved”", + "codePoints": [ + "U+1F22F", + "U+FE0F" + ] + }, + { + "value": "🈲", + "name": "Japanese sign meaning “prohibited”", + "codePoints": [ + "U+1F232" + ] + }, + { + "value": "🈳", + "name": "Japanese sign meaning “vacancy”", + "codePoints": [ + "U+1F233" + ] + }, + { + "value": "🈴", + "name": "Japanese sign meaning “passing (grade)”", + "codePoints": [ + "U+1F234" + ] + }, + { + "value": "🈵", + "name": "Japanese sign meaning “full; no vacancy”", + "codePoints": [ + "U+1F235" + ] + }, + { + "value": "🈶", + "name": "Japanese sign meaning “not free of charge”", + "codePoints": [ + "U+1F236" + ] + }, + { + "value": "🈷️", + "name": "Japanese sign meaning “monthly amount”", + "codePoints": [ + "U+1F237", + "U+FE0F" + ] + }, + { + "value": "🉐", + "name": "Japanese sign meaning “bargain”", + "codePoints": [ + "U+1F250" + ] + }, + { + "value": "🉑", + "name": "Japanese sign meaning “acceptable”", + "codePoints": [ + "U+1F251" + ] + }, + { + "value": "🎦", + "name": "cinema symbol", + "codePoints": [ + "U+1F3A6" + ] + }, + { + "value": "🏧", + "name": "ATM sign", + "codePoints": [ + "U+1F3E7" + ] + }, + { + "value": "👌", + "name": "OK hand sign", + "codePoints": [ + "U+1F44C" + ] + }, + { + "value": "💯", + "name": "hundred points symbol", + "codePoints": [ + "U+1F4AF" + ] + }, + { + "value": "💱", + "name": "currency exchange", + "codePoints": [ + "U+1F4B1" + ] + }, + { + "value": "🔀", + "name": "shuffle tracks symbol", + "codePoints": [ + "U+1F500" + ] + }, + { + "value": "🔁", + "name": "repeat symbol", + "codePoints": [ + "U+1F501" + ] + }, + { + "value": "🔂", + "name": "repeat single track symbol", + "codePoints": [ + "U+1F502" + ] + }, + { + "value": "🔅", + "name": "low brightness symbol", + "codePoints": [ + "U+1F505" + ] + }, + { + "value": "🔆", + "name": "high brightness symbol", + "codePoints": [ + "U+1F506" + ] + }, + { + "value": "🔙", + "name": "back arrow", + "codePoints": [ + "U+1F519" + ] + }, + { + "value": "🔚", + "name": "end arrow", + "codePoints": [ + "U+1F51A" + ] + }, + { + "value": "🔛", + "name": "on! arrow", + "codePoints": [ + "U+1F51B" + ] + }, + { + "value": "🔜", + "name": "soon arrow", + "codePoints": [ + "U+1F51C" + ] + }, + { + "value": "🔝", + "name": "top arrow", + "codePoints": [ + "U+1F51D" + ] + }, + { + "value": "🔞", + "name": "no one under eighteen", + "codePoints": [ + "U+1F51E" + ] + }, + { + "value": "🔠", + "name": "input symbol for uppercase letters", + "codePoints": [ + "U+1F520" + ] + }, + { + "value": "🔡", + "name": "input symbol for lowercase letters", + "codePoints": [ + "U+1F521" + ] + }, + { + "value": "🔢", + "name": "input symbol for numbers", + "codePoints": [ + "U+1F522" + ] + }, + { + "value": "🔣", + "name": "input symbol for symbols", + "codePoints": [ + "U+1F523" + ] + }, + { + "value": "🔤", + "name": "input symbol for letters", + "codePoints": [ + "U+1F524" + ] + }, + { + "value": "🔰", + "name": "Japanese symbol for beginner", + "codePoints": [ + "U+1F530" + ] + }, + { + "value": "🔱", + "name": "trident emblem", + "codePoints": [ + "U+1F531" + ] + }, + { + "value": "🔲", + "name": "black square button", + "codePoints": [ + "U+1F532" + ] + }, + { + "value": "🔳", + "name": "white square button", + "codePoints": [ + "U+1F533" + ] + }, + { + "value": "🕉️", + "name": "om symbol", + "codePoints": [ + "U+1F549", + "U+FE0F" + ] + }, + { + "value": "🚫", + "name": "prohibited", + "codePoints": [ + "U+1F6AB" + ] + }, + { + "value": "🚱", + "name": "non-potable water", + "codePoints": [ + "U+1F6B1" + ] + }, + { + "value": "🚳", + "name": "no bicycles", + "codePoints": [ + "U+1F6B3" + ] + }, + { + "value": "🚻", + "name": "restroom", + "codePoints": [ + "U+1F6BB" + ] + }, + { + "value": "🛑", + "name": "octagonal sign", + "codePoints": [ + "U+1F6D1" + ] + }, + { + "value": "🛜", + "name": "wireless symbol", + "codePoints": [ + "U+1F6DC" + ] + }, + { + "value": "🟡", + "name": "yellow circle", + "codePoints": [ + "U+1F7E1" + ] + }, + { + "value": "🟢", + "name": "green circle", + "codePoints": [ + "U+1F7E2" + ] + }, + { + "value": "🟣", + "name": "purple circle", + "codePoints": [ + "U+1F7E3" + ] + }, + { + "value": "🟤", + "name": "brown circle", + "codePoints": [ + "U+1F7E4" + ] + }, + { + "value": "🟥", + "name": "red square", + "codePoints": [ + "U+1F7E5" + ] + }, + { + "value": "🟦", + "name": "blue square", + "codePoints": [ + "U+1F7E6" + ] + }, + { + "value": "🟨", + "name": "yellow square", + "codePoints": [ + "U+1F7E8" + ] + }, + { + "value": "🟩", + "name": "green square", + "codePoints": [ + "U+1F7E9" + ] + }, + { + "value": "🟪", + "name": "purple square", + "codePoints": [ + "U+1F7EA" + ] + }, + { + "value": "🟫", + "name": "brown square", + "codePoints": [ + "U+1F7EB" + ] + }, + { + "value": "🟰", + "name": "equals sign", + "codePoints": [ + "U+1F7F0" + ] + }, + { + "value": "🪦", + "name": "tombstone", + "codePoints": [ + "U+1FAA6" + ] + }, + { + "value": "🪧", + "name": "sign", + "codePoints": [ + "U+1FAA7" + ] + }, + { + "value": "🪯", + "name": "khanda symbol", + "codePoints": [ + "U+1FAAF" + ] + } + ] + }, + { + "id": "flags", + "title": { + "en": "Flags", + "zh-Hans": "旗帜" + }, + "icon": "emoji_tab_flags", + "type": "static", + "emojis": [ + { + "value": "⛳️", + "name": "golf hole with flag", + "codePoints": [ + "U+26F3", + "U+FE0F" + ] + }, + { + "value": "🇦🇨", + "name": "flag of Ascension Island", + "codePoints": [ + "U+1F1E6", + "U+1F1E8" + ] + }, + { + "value": "🇦🇩", + "name": "flag of Andorra", + "codePoints": [ + "U+1F1E6", + "U+1F1E9" + ] + }, + { + "value": "🇦🇪", + "name": "flag of the United Arab Emirates", + "codePoints": [ + "U+1F1E6", + "U+1F1EA" + ] + }, + { + "value": "🇦🇫", + "name": "flag of Afghanistan", + "codePoints": [ + "U+1F1E6", + "U+1F1EB" + ] + }, + { + "value": "🇦🇬", + "name": "flag of Antigua & Barbuda", + "codePoints": [ + "U+1F1E6", + "U+1F1EC" + ] + }, + { + "value": "🇦🇮", + "name": "flag of Anguilla", + "codePoints": [ + "U+1F1E6", + "U+1F1EE" + ] + }, + { + "value": "🇦🇱", + "name": "flag of Albania", + "codePoints": [ + "U+1F1E6", + "U+1F1F1" + ] + }, + { + "value": "🇦🇲", + "name": "flag of Armenia", + "codePoints": [ + "U+1F1E6", + "U+1F1F2" + ] + }, + { + "value": "🇦🇴", + "name": "flag of Angola", + "codePoints": [ + "U+1F1E6", + "U+1F1F4" + ] + }, + { + "value": "🇦🇶", + "name": "flag of Antarctica", + "codePoints": [ + "U+1F1E6", + "U+1F1F6" + ] + }, + { + "value": "🇦🇷", + "name": "flag of Argentina", + "codePoints": [ + "U+1F1E6", + "U+1F1F7" + ] + }, + { + "value": "🇦🇸", + "name": "flag of American Samoa", + "codePoints": [ + "U+1F1E6", + "U+1F1F8" + ] + }, + { + "value": "🇦🇹", + "name": "flag of Austria", + "codePoints": [ + "U+1F1E6", + "U+1F1F9" + ] + }, + { + "value": "🇦🇺", + "name": "flag of Australia", + "codePoints": [ + "U+1F1E6", + "U+1F1FA" + ] + }, + { + "value": "🇦🇼", + "name": "flag of Aruba", + "codePoints": [ + "U+1F1E6", + "U+1F1FC" + ] + }, + { + "value": "🇦🇽", + "name": "flag of the Åland Islands", + "codePoints": [ + "U+1F1E6", + "U+1F1FD" + ] + }, + { + "value": "🇦🇿", + "name": "flag of Azerbaijan", + "codePoints": [ + "U+1F1E6", + "U+1F1FF" + ] + }, + { + "value": "🇧🇦", + "name": "flag of Bosnia & Herzegovina", + "codePoints": [ + "U+1F1E7", + "U+1F1E6" + ] + }, + { + "value": "🇧🇧", + "name": "flag of Barbados", + "codePoints": [ + "U+1F1E7", + "U+1F1E7" + ] + }, + { + "value": "🇧🇩", + "name": "flag of Bangladesh", + "codePoints": [ + "U+1F1E7", + "U+1F1E9" + ] + }, + { + "value": "🇧🇪", + "name": "flag of Belgium", + "codePoints": [ + "U+1F1E7", + "U+1F1EA" + ] + }, + { + "value": "🇧🇫", + "name": "flag of Burkina Faso", + "codePoints": [ + "U+1F1E7", + "U+1F1EB" + ] + }, + { + "value": "🇧🇬", + "name": "flag of Bulgaria", + "codePoints": [ + "U+1F1E7", + "U+1F1EC" + ] + }, + { + "value": "🇧🇭", + "name": "flag of Bahrain", + "codePoints": [ + "U+1F1E7", + "U+1F1ED" + ] + }, + { + "value": "🇧🇮", + "name": "flag of Burundi", + "codePoints": [ + "U+1F1E7", + "U+1F1EE" + ] + }, + { + "value": "🇧🇯", + "name": "flag of Benin", + "codePoints": [ + "U+1F1E7", + "U+1F1EF" + ] + }, + { + "value": "🇧🇱", + "name": "flag of Saint Barthélemy", + "codePoints": [ + "U+1F1E7", + "U+1F1F1" + ] + }, + { + "value": "🇧🇲", + "name": "flag of Bermuda", + "codePoints": [ + "U+1F1E7", + "U+1F1F2" + ] + }, + { + "value": "🇧🇳", + "name": "flag of Brunei", + "codePoints": [ + "U+1F1E7", + "U+1F1F3" + ] + }, + { + "value": "🇧🇴", + "name": "flag of Bolivia", + "codePoints": [ + "U+1F1E7", + "U+1F1F4" + ] + }, + { + "value": "🇧🇶", + "name": "flag of Bonaire", + "codePoints": [ + "U+1F1E7", + "U+1F1F6" + ] + }, + { + "value": "🇧🇷", + "name": "flag of Brazil", + "codePoints": [ + "U+1F1E7", + "U+1F1F7" + ] + }, + { + "value": "🇧🇸", + "name": "flag of Bahamas", + "codePoints": [ + "U+1F1E7", + "U+1F1F8" + ] + }, + { + "value": "🇧🇹", + "name": "flag of Bhutan", + "codePoints": [ + "U+1F1E7", + "U+1F1F9" + ] + }, + { + "value": "🇧🇻", + "name": "flag of Bouvet Island", + "codePoints": [ + "U+1F1E7", + "U+1F1FB" + ] + }, + { + "value": "🇧🇼", + "name": "flag of Botswana", + "codePoints": [ + "U+1F1E7", + "U+1F1FC" + ] + }, + { + "value": "🇧🇾", + "name": "flag of Belarus", + "codePoints": [ + "U+1F1E7", + "U+1F1FE" + ] + }, + { + "value": "🇧🇿", + "name": "flag of Belize", + "codePoints": [ + "U+1F1E7", + "U+1F1FF" + ] + }, + { + "value": "🇨🇦", + "name": "flag of Canada", + "codePoints": [ + "U+1F1E8", + "U+1F1E6" + ] + }, + { + "value": "🇨🇨", + "name": "flag of the Cocos (Keeling) Islands", + "codePoints": [ + "U+1F1E8", + "U+1F1E8" + ] + }, + { + "value": "🇨🇩", + "name": "flag of the Democratic Republic of the Congo", + "codePoints": [ + "U+1F1E8", + "U+1F1E9" + ] + }, + { + "value": "🇨🇫", + "name": "flag of the Central African Republic", + "codePoints": [ + "U+1F1E8", + "U+1F1EB" + ] + }, + { + "value": "🇨🇬", + "name": "flag of the Republic of the Congo", + "codePoints": [ + "U+1F1E8", + "U+1F1EC" + ] + }, + { + "value": "🇨🇭", + "name": "flag of Switzerland", + "codePoints": [ + "U+1F1E8", + "U+1F1ED" + ] + }, + { + "value": "🇨🇮", + "name": "flag of Côte d’Ivoire", + "codePoints": [ + "U+1F1E8", + "U+1F1EE" + ] + }, + { + "value": "🇨🇰", + "name": "flag of the Cook Islands", + "codePoints": [ + "U+1F1E8", + "U+1F1F0" + ] + }, + { + "value": "🇨🇱", + "name": "flag of Chile", + "codePoints": [ + "U+1F1E8", + "U+1F1F1" + ] + }, + { + "value": "🇨🇲", + "name": "flag of Cameroon", + "codePoints": [ + "U+1F1E8", + "U+1F1F2" + ] + }, + { + "value": "🇨🇳", + "name": "flag of China", + "codePoints": [ + "U+1F1E8", + "U+1F1F3" + ] + }, + { + "value": "🇨🇴", + "name": "flag of Colombia", + "codePoints": [ + "U+1F1E8", + "U+1F1F4" + ] + }, + { + "value": "🇨🇵", + "name": "flag of Clipperton Island", + "codePoints": [ + "U+1F1E8", + "U+1F1F5" + ] + }, + { + "value": "🇨🇶", + "name": "flag of Sark", + "codePoints": [ + "U+1F1E8", + "U+1F1F6" + ] + }, + { + "value": "🇨🇷", + "name": "flag of Costa Rica", + "codePoints": [ + "U+1F1E8", + "U+1F1F7" + ] + }, + { + "value": "🇨🇺", + "name": "flag of Cuba", + "codePoints": [ + "U+1F1E8", + "U+1F1FA" + ] + }, + { + "value": "🇨🇻", + "name": "flag of Cape Verde", + "codePoints": [ + "U+1F1E8", + "U+1F1FB" + ] + }, + { + "value": "🇨🇼", + "name": "flag of Curaçao", + "codePoints": [ + "U+1F1E8", + "U+1F1FC" + ] + }, + { + "value": "🇨🇽", + "name": "flag of Christmas Island", + "codePoints": [ + "U+1F1E8", + "U+1F1FD" + ] + }, + { + "value": "🇨🇾", + "name": "flag of Cyprus", + "codePoints": [ + "U+1F1E8", + "U+1F1FE" + ] + }, + { + "value": "🇨🇿", + "name": "flag of Czechia", + "codePoints": [ + "U+1F1E8", + "U+1F1FF" + ] + }, + { + "value": "🇩🇪", + "name": "flag of Germany", + "codePoints": [ + "U+1F1E9", + "U+1F1EA" + ] + }, + { + "value": "🇩🇬", + "name": "flag of Diego Garcia", + "codePoints": [ + "U+1F1E9", + "U+1F1EC" + ] + }, + { + "value": "🇩🇯", + "name": "flag of Djibouti", + "codePoints": [ + "U+1F1E9", + "U+1F1EF" + ] + }, + { + "value": "🇩🇰", + "name": "flag of Denmark", + "codePoints": [ + "U+1F1E9", + "U+1F1F0" + ] + }, + { + "value": "🇩🇲", + "name": "flag of Dominica", + "codePoints": [ + "U+1F1E9", + "U+1F1F2" + ] + }, + { + "value": "🇩🇴", + "name": "flag of the Dominican Republic", + "codePoints": [ + "U+1F1E9", + "U+1F1F4" + ] + }, + { + "value": "🇩🇿", + "name": "flag of Algeria", + "codePoints": [ + "U+1F1E9", + "U+1F1FF" + ] + }, + { + "value": "🇪🇦", + "name": "flag of Ceuta and Melilla", + "codePoints": [ + "U+1F1EA", + "U+1F1E6" + ] + }, + { + "value": "🇪🇨", + "name": "flag of Ecuador", + "codePoints": [ + "U+1F1EA", + "U+1F1E8" + ] + }, + { + "value": "🇪🇪", + "name": "flag of Estonia", + "codePoints": [ + "U+1F1EA", + "U+1F1EA" + ] + }, + { + "value": "🇪🇬", + "name": "flag of Egypt", + "codePoints": [ + "U+1F1EA", + "U+1F1EC" + ] + }, + { + "value": "🇪🇭", + "name": "flag of Western Sahara", + "codePoints": [ + "U+1F1EA", + "U+1F1ED" + ] + }, + { + "value": "🇪🇷", + "name": "flag of Eritrea", + "codePoints": [ + "U+1F1EA", + "U+1F1F7" + ] + }, + { + "value": "🇪🇸", + "name": "flag of Spain", + "codePoints": [ + "U+1F1EA", + "U+1F1F8" + ] + }, + { + "value": "🇪🇹", + "name": "flag of Ethiopia", + "codePoints": [ + "U+1F1EA", + "U+1F1F9" + ] + }, + { + "value": "🇪🇺", + "name": "flag of European Union", + "codePoints": [ + "U+1F1EA", + "U+1F1FA" + ] + }, + { + "value": "🇫🇮", + "name": "flag of Finland", + "codePoints": [ + "U+1F1EB", + "U+1F1EE" + ] + }, + { + "value": "🇫🇯", + "name": "flag of Fiji", + "codePoints": [ + "U+1F1EB", + "U+1F1EF" + ] + }, + { + "value": "🇫🇰", + "name": "flag of the Falkland Islands", + "codePoints": [ + "U+1F1EB", + "U+1F1F0" + ] + }, + { + "value": "🇫🇲", + "name": "flag of Micronesia", + "codePoints": [ + "U+1F1EB", + "U+1F1F2" + ] + }, + { + "value": "🇫🇴", + "name": "flag of the Faroe Islands", + "codePoints": [ + "U+1F1EB", + "U+1F1F4" + ] + }, + { + "value": "🇫🇷", + "name": "flag of France", + "codePoints": [ + "U+1F1EB", + "U+1F1F7" + ] + }, + { + "value": "🇬🇦", + "name": "flag of Gabon", + "codePoints": [ + "U+1F1EC", + "U+1F1E6" + ] + }, + { + "value": "🇬🇧", + "name": "flag of the United Kingdom", + "codePoints": [ + "U+1F1EC", + "U+1F1E7" + ] + }, + { + "value": "🇬🇩", + "name": "flag of Grenada", + "codePoints": [ + "U+1F1EC", + "U+1F1E9" + ] + }, + { + "value": "🇬🇪", + "name": "flag of Georgia", + "codePoints": [ + "U+1F1EC", + "U+1F1EA" + ] + }, + { + "value": "🇬🇫", + "name": "flag of French Guiana", + "codePoints": [ + "U+1F1EC", + "U+1F1EB" + ] + }, + { + "value": "🇬🇬", + "name": "flag of Guernsey", + "codePoints": [ + "U+1F1EC", + "U+1F1EC" + ] + }, + { + "value": "🇬🇭", + "name": "flag of Ghana", + "codePoints": [ + "U+1F1EC", + "U+1F1ED" + ] + }, + { + "value": "🇬🇮", + "name": "flag of Gibraltar", + "codePoints": [ + "U+1F1EC", + "U+1F1EE" + ] + }, + { + "value": "🇬🇱", + "name": "flag of Greenland", + "codePoints": [ + "U+1F1EC", + "U+1F1F1" + ] + }, + { + "value": "🇬🇲", + "name": "flag of Gambia", + "codePoints": [ + "U+1F1EC", + "U+1F1F2" + ] + }, + { + "value": "🇬🇳", + "name": "flag of Guinea", + "codePoints": [ + "U+1F1EC", + "U+1F1F3" + ] + }, + { + "value": "🇬🇵", + "name": "flag of Guadeloupe", + "codePoints": [ + "U+1F1EC", + "U+1F1F5" + ] + }, + { + "value": "🇬🇶", + "name": "flag of Equatorial Guinea", + "codePoints": [ + "U+1F1EC", + "U+1F1F6" + ] + }, + { + "value": "🇬🇷", + "name": "flag of Greece", + "codePoints": [ + "U+1F1EC", + "U+1F1F7" + ] + }, + { + "value": "🇬🇸", + "name": "flag of South Georgia & the South Sandwich Islands", + "codePoints": [ + "U+1F1EC", + "U+1F1F8" + ] + }, + { + "value": "🇬🇹", + "name": "flag of Guatemala", + "codePoints": [ + "U+1F1EC", + "U+1F1F9" + ] + }, + { + "value": "🇬🇺", + "name": "flag of Guam", + "codePoints": [ + "U+1F1EC", + "U+1F1FA" + ] + }, + { + "value": "🇬🇼", + "name": "flag of Guinea-Bissau", + "codePoints": [ + "U+1F1EC", + "U+1F1FC" + ] + }, + { + "value": "🇬🇾", + "name": "flag of Guyana", + "codePoints": [ + "U+1F1EC", + "U+1F1FE" + ] + }, + { + "value": "🇭🇰", + "name": "flag of Hong Kong", + "codePoints": [ + "U+1F1ED", + "U+1F1F0" + ] + }, + { + "value": "🇭🇲", + "name": "flag of Heard and McDonald Islands", + "codePoints": [ + "U+1F1ED", + "U+1F1F2" + ] + }, + { + "value": "🇭🇳", + "name": "flag of Honduras", + "codePoints": [ + "U+1F1ED", + "U+1F1F3" + ] + }, + { + "value": "🇭🇷", + "name": "flag of Croatia", + "codePoints": [ + "U+1F1ED", + "U+1F1F7" + ] + }, + { + "value": "🇭🇹", + "name": "flag of Haiti", + "codePoints": [ + "U+1F1ED", + "U+1F1F9" + ] + }, + { + "value": "🇭🇺", + "name": "flag of Hungary", + "codePoints": [ + "U+1F1ED", + "U+1F1FA" + ] + }, + { + "value": "🇮🇨", + "name": "flag of the Canary Islands", + "codePoints": [ + "U+1F1EE", + "U+1F1E8" + ] + }, + { + "value": "🇮🇩", + "name": "flag of Indonesia", + "codePoints": [ + "U+1F1EE", + "U+1F1E9" + ] + }, + { + "value": "🇮🇪", + "name": "flag of Ireland", + "codePoints": [ + "U+1F1EE", + "U+1F1EA" + ] + }, + { + "value": "🇮🇱", + "name": "flag of Israel", + "codePoints": [ + "U+1F1EE", + "U+1F1F1" + ] + }, + { + "value": "🇮🇲", + "name": "flag of the Isle of Man", + "codePoints": [ + "U+1F1EE", + "U+1F1F2" + ] + }, + { + "value": "🇮🇳", + "name": "flag of India", + "codePoints": [ + "U+1F1EE", + "U+1F1F3" + ] + }, + { + "value": "🇮🇴", + "name": "flag of the British Indian Ocean Territory", + "codePoints": [ + "U+1F1EE", + "U+1F1F4" + ] + }, + { + "value": "🇮🇶", + "name": "flag of Iraq", + "codePoints": [ + "U+1F1EE", + "U+1F1F6" + ] + }, + { + "value": "🇮🇷", + "name": "flag of Iran", + "codePoints": [ + "U+1F1EE", + "U+1F1F7" + ] + }, + { + "value": "🇮🇸", + "name": "flag of Iceland", + "codePoints": [ + "U+1F1EE", + "U+1F1F8" + ] + }, + { + "value": "🇮🇹", + "name": "flag of Italy", + "codePoints": [ + "U+1F1EE", + "U+1F1F9" + ] + }, + { + "value": "🇯🇪", + "name": "flag of Jersey", + "codePoints": [ + "U+1F1EF", + "U+1F1EA" + ] + }, + { + "value": "🇯🇲", + "name": "flag of Jamaica", + "codePoints": [ + "U+1F1EF", + "U+1F1F2" + ] + }, + { + "value": "🇯🇴", + "name": "flag of Jordan", + "codePoints": [ + "U+1F1EF", + "U+1F1F4" + ] + }, + { + "value": "🇯🇵", + "name": "flag of Japan", + "codePoints": [ + "U+1F1EF", + "U+1F1F5" + ] + }, + { + "value": "🇰🇪", + "name": "flag of Kenya", + "codePoints": [ + "U+1F1F0", + "U+1F1EA" + ] + }, + { + "value": "🇰🇬", + "name": "flag of Kyrgyzstan", + "codePoints": [ + "U+1F1F0", + "U+1F1EC" + ] + }, + { + "value": "🇰🇭", + "name": "flag of Cambodia", + "codePoints": [ + "U+1F1F0", + "U+1F1ED" + ] + }, + { + "value": "🇰🇮", + "name": "flag of Kiribati", + "codePoints": [ + "U+1F1F0", + "U+1F1EE" + ] + }, + { + "value": "🇰🇲", + "name": "flag of Comoros", + "codePoints": [ + "U+1F1F0", + "U+1F1F2" + ] + }, + { + "value": "🇰🇳", + "name": "flag of Saint Kitts & Nevis", + "codePoints": [ + "U+1F1F0", + "U+1F1F3" + ] + }, + { + "value": "🇰🇵", + "name": "flag of North Korea", + "codePoints": [ + "U+1F1F0", + "U+1F1F5" + ] + }, + { + "value": "🇰🇷", + "name": "flag of South Korea", + "codePoints": [ + "U+1F1F0", + "U+1F1F7" + ] + }, + { + "value": "🇰🇼", + "name": "flag of Kuwait", + "codePoints": [ + "U+1F1F0", + "U+1F1FC" + ] + }, + { + "value": "🇰🇾", + "name": "flag of the Cayman Islands", + "codePoints": [ + "U+1F1F0", + "U+1F1FE" + ] + }, + { + "value": "🇰🇿", + "name": "flag of Kazakhstan", + "codePoints": [ + "U+1F1F0", + "U+1F1FF" + ] + }, + { + "value": "🇱🇦", + "name": "flag of Laos", + "codePoints": [ + "U+1F1F1", + "U+1F1E6" + ] + }, + { + "value": "🇱🇧", + "name": "flag of Lebanon", + "codePoints": [ + "U+1F1F1", + "U+1F1E7" + ] + }, + { + "value": "🇱🇨", + "name": "flag of Saint Lucia", + "codePoints": [ + "U+1F1F1", + "U+1F1E8" + ] + }, + { + "value": "🇱🇮", + "name": "flag of Liechtenstein", + "codePoints": [ + "U+1F1F1", + "U+1F1EE" + ] + }, + { + "value": "🇱🇰", + "name": "flag of Sri Lanka", + "codePoints": [ + "U+1F1F1", + "U+1F1F0" + ] + }, + { + "value": "🇱🇷", + "name": "flag of Liberia", + "codePoints": [ + "U+1F1F1", + "U+1F1F7" + ] + }, + { + "value": "🇱🇸", + "name": "flag of Lesotho", + "codePoints": [ + "U+1F1F1", + "U+1F1F8" + ] + }, + { + "value": "🇱🇹", + "name": "flag of Lithuania", + "codePoints": [ + "U+1F1F1", + "U+1F1F9" + ] + }, + { + "value": "🇱🇺", + "name": "flag of Luxembourg", + "codePoints": [ + "U+1F1F1", + "U+1F1FA" + ] + }, + { + "value": "🇱🇻", + "name": "flag of Latvia", + "codePoints": [ + "U+1F1F1", + "U+1F1FB" + ] + }, + { + "value": "🇱🇾", + "name": "flag of Libya", + "codePoints": [ + "U+1F1F1", + "U+1F1FE" + ] + }, + { + "value": "🇲🇦", + "name": "flag of Morocco", + "codePoints": [ + "U+1F1F2", + "U+1F1E6" + ] + }, + { + "value": "🇲🇨", + "name": "flag of Monaco", + "codePoints": [ + "U+1F1F2", + "U+1F1E8" + ] + }, + { + "value": "🇲🇩", + "name": "flag of Moldova", + "codePoints": [ + "U+1F1F2", + "U+1F1E9" + ] + }, + { + "value": "🇲🇪", + "name": "flag of Montenegro", + "codePoints": [ + "U+1F1F2", + "U+1F1EA" + ] + }, + { + "value": "🇲🇫", + "name": "flag of Saint Martin", + "codePoints": [ + "U+1F1F2", + "U+1F1EB" + ] + }, + { + "value": "🇲🇬", + "name": "flag of Madagascar", + "codePoints": [ + "U+1F1F2", + "U+1F1EC" + ] + }, + { + "value": "🇲🇭", + "name": "flag of the Marshall Islands", + "codePoints": [ + "U+1F1F2", + "U+1F1ED" + ] + }, + { + "value": "🇲🇰", + "name": "flag of North Macedonia", + "codePoints": [ + "U+1F1F2", + "U+1F1F0" + ] + }, + { + "value": "🇲🇱", + "name": "flag of Mali", + "codePoints": [ + "U+1F1F2", + "U+1F1F1" + ] + }, + { + "value": "🇲🇲", + "name": "flag of Myanmar (Burma)", + "codePoints": [ + "U+1F1F2", + "U+1F1F2" + ] + }, + { + "value": "🇲🇳", + "name": "flag of Mongolia", + "codePoints": [ + "U+1F1F2", + "U+1F1F3" + ] + }, + { + "value": "🇲🇴", + "name": "flag of Macao", + "codePoints": [ + "U+1F1F2", + "U+1F1F4" + ] + }, + { + "value": "🇲🇵", + "name": "flag of the Northern Mariana Islands", + "codePoints": [ + "U+1F1F2", + "U+1F1F5" + ] + }, + { + "value": "🇲🇶", + "name": "flag of Martinique", + "codePoints": [ + "U+1F1F2", + "U+1F1F6" + ] + }, + { + "value": "🇲🇷", + "name": "flag of Mauritania", + "codePoints": [ + "U+1F1F2", + "U+1F1F7" + ] + }, + { + "value": "🇲🇸", + "name": "flag of Montserrat", + "codePoints": [ + "U+1F1F2", + "U+1F1F8" + ] + }, + { + "value": "🇲🇹", + "name": "flag of Malta", + "codePoints": [ + "U+1F1F2", + "U+1F1F9" + ] + }, + { + "value": "🇲🇺", + "name": "flag of Mauritius", + "codePoints": [ + "U+1F1F2", + "U+1F1FA" + ] + }, + { + "value": "🇲🇻", + "name": "flag of Maldives", + "codePoints": [ + "U+1F1F2", + "U+1F1FB" + ] + }, + { + "value": "🇲🇼", + "name": "flag of Malawi", + "codePoints": [ + "U+1F1F2", + "U+1F1FC" + ] + }, + { + "value": "🇲🇽", + "name": "flag of Mexico", + "codePoints": [ + "U+1F1F2", + "U+1F1FD" + ] + }, + { + "value": "🇲🇾", + "name": "flag of Malaysia", + "codePoints": [ + "U+1F1F2", + "U+1F1FE" + ] + }, + { + "value": "🇲🇿", + "name": "flag of Mozambique", + "codePoints": [ + "U+1F1F2", + "U+1F1FF" + ] + }, + { + "value": "🇳🇦", + "name": "flag of Namibia", + "codePoints": [ + "U+1F1F3", + "U+1F1E6" + ] + }, + { + "value": "🇳🇨", + "name": "flag of New Caledonia", + "codePoints": [ + "U+1F1F3", + "U+1F1E8" + ] + }, + { + "value": "🇳🇪", + "name": "flag of Niger", + "codePoints": [ + "U+1F1F3", + "U+1F1EA" + ] + }, + { + "value": "🇳🇫", + "name": "flag of Norfolk Island", + "codePoints": [ + "U+1F1F3", + "U+1F1EB" + ] + }, + { + "value": "🇳🇬", + "name": "flag of Nigeria", + "codePoints": [ + "U+1F1F3", + "U+1F1EC" + ] + }, + { + "value": "🇳🇮", + "name": "flag of Nicaragua", + "codePoints": [ + "U+1F1F3", + "U+1F1EE" + ] + }, + { + "value": "🇳🇱", + "name": "flag of Netherlands", + "codePoints": [ + "U+1F1F3", + "U+1F1F1" + ] + }, + { + "value": "🇳🇴", + "name": "flag of Norway", + "codePoints": [ + "U+1F1F3", + "U+1F1F4" + ] + }, + { + "value": "🇳🇵", + "name": "flag of Nepal", + "codePoints": [ + "U+1F1F3", + "U+1F1F5" + ] + }, + { + "value": "🇳🇷", + "name": "flag of Nauru", + "codePoints": [ + "U+1F1F3", + "U+1F1F7" + ] + }, + { + "value": "🇳🇺", + "name": "flag of Niue", + "codePoints": [ + "U+1F1F3", + "U+1F1FA" + ] + }, + { + "value": "🇳🇿", + "name": "flag of New Zealand", + "codePoints": [ + "U+1F1F3", + "U+1F1FF" + ] + }, + { + "value": "🇴🇲", + "name": "flag of Oman", + "codePoints": [ + "U+1F1F4", + "U+1F1F2" + ] + }, + { + "value": "🇵🇦", + "name": "flag of Panama", + "codePoints": [ + "U+1F1F5", + "U+1F1E6" + ] + }, + { + "value": "🇵🇪", + "name": "flag of Peru", + "codePoints": [ + "U+1F1F5", + "U+1F1EA" + ] + }, + { + "value": "🇵🇫", + "name": "flag of French Polynesia", + "codePoints": [ + "U+1F1F5", + "U+1F1EB" + ] + }, + { + "value": "🇵🇬", + "name": "flag of Papua New Guinea", + "codePoints": [ + "U+1F1F5", + "U+1F1EC" + ] + }, + { + "value": "🇵🇭", + "name": "flag of Philippines", + "codePoints": [ + "U+1F1F5", + "U+1F1ED" + ] + }, + { + "value": "🇵🇰", + "name": "flag of Pakistan", + "codePoints": [ + "U+1F1F5", + "U+1F1F0" + ] + }, + { + "value": "🇵🇱", + "name": "flag of Poland", + "codePoints": [ + "U+1F1F5", + "U+1F1F1" + ] + }, + { + "value": "🇵🇲", + "name": "flag of Saint Pierre & Miquelon", + "codePoints": [ + "U+1F1F5", + "U+1F1F2" + ] + }, + { + "value": "🇵🇳", + "name": "flag of Pitcairn", + "codePoints": [ + "U+1F1F5", + "U+1F1F3" + ] + }, + { + "value": "🇵🇷", + "name": "flag of Puerto Rico", + "codePoints": [ + "U+1F1F5", + "U+1F1F7" + ] + }, + { + "value": "🇵🇸", + "name": "flag of the Palestinian Territories", + "codePoints": [ + "U+1F1F5", + "U+1F1F8" + ] + }, + { + "value": "🇵🇹", + "name": "flag of Portugal", + "codePoints": [ + "U+1F1F5", + "U+1F1F9" + ] + }, + { + "value": "🇵🇼", + "name": "flag of Palau", + "codePoints": [ + "U+1F1F5", + "U+1F1FC" + ] + }, + { + "value": "🇵🇾", + "name": "flag of Paraguay", + "codePoints": [ + "U+1F1F5", + "U+1F1FE" + ] + }, + { + "value": "🇶🇦", + "name": "flag of Qatar", + "codePoints": [ + "U+1F1F6", + "U+1F1E6" + ] + }, + { + "value": "🇷🇪", + "name": "flag of Réunion", + "codePoints": [ + "U+1F1F7", + "U+1F1EA" + ] + }, + { + "value": "🇷🇴", + "name": "flag of Romania", + "codePoints": [ + "U+1F1F7", + "U+1F1F4" + ] + }, + { + "value": "🇷🇸", + "name": "flag of Serbia", + "codePoints": [ + "U+1F1F7", + "U+1F1F8" + ] + }, + { + "value": "🇷🇺", + "name": "flag of Russia", + "codePoints": [ + "U+1F1F7", + "U+1F1FA" + ] + }, + { + "value": "🇷🇼", + "name": "flag of Rwanda", + "codePoints": [ + "U+1F1F7", + "U+1F1FC" + ] + }, + { + "value": "🇸🇦", + "name": "flag of Saudi Arabia", + "codePoints": [ + "U+1F1F8", + "U+1F1E6" + ] + }, + { + "value": "🇸🇧", + "name": "flag of the Solomon Islands", + "codePoints": [ + "U+1F1F8", + "U+1F1E7" + ] + }, + { + "value": "🇸🇨", + "name": "flag of Seychelles", + "codePoints": [ + "U+1F1F8", + "U+1F1E8" + ] + }, + { + "value": "🇸🇩", + "name": "flag of Sudan", + "codePoints": [ + "U+1F1F8", + "U+1F1E9" + ] + }, + { + "value": "🇸🇪", + "name": "flag of Sweden", + "codePoints": [ + "U+1F1F8", + "U+1F1EA" + ] + }, + { + "value": "🇸🇬", + "name": "flag of Singapore", + "codePoints": [ + "U+1F1F8", + "U+1F1EC" + ] + }, + { + "value": "🇸🇭", + "name": "flag of Saint Helena", + "codePoints": [ + "U+1F1F8", + "U+1F1ED" + ] + }, + { + "value": "🇸🇮", + "name": "flag of Slovenia", + "codePoints": [ + "U+1F1F8", + "U+1F1EE" + ] + }, + { + "value": "🇸🇯", + "name": "flag of Svalbard and Jan Mayen", + "codePoints": [ + "U+1F1F8", + "U+1F1EF" + ] + }, + { + "value": "🇸🇰", + "name": "flag of Slovakia", + "codePoints": [ + "U+1F1F8", + "U+1F1F0" + ] + }, + { + "value": "🇸🇱", + "name": "flag of Sierra Leone", + "codePoints": [ + "U+1F1F8", + "U+1F1F1" + ] + }, + { + "value": "🇸🇲", + "name": "flag of San Marino", + "codePoints": [ + "U+1F1F8", + "U+1F1F2" + ] + }, + { + "value": "🇸🇳", + "name": "flag of Senegal", + "codePoints": [ + "U+1F1F8", + "U+1F1F3" + ] + }, + { + "value": "🇸🇴", + "name": "flag of Somalia", + "codePoints": [ + "U+1F1F8", + "U+1F1F4" + ] + }, + { + "value": "🇸🇷", + "name": "flag of Suriname", + "codePoints": [ + "U+1F1F8", + "U+1F1F7" + ] + }, + { + "value": "🇸🇸", + "name": "flag of South Sudan", + "codePoints": [ + "U+1F1F8", + "U+1F1F8" + ] + }, + { + "value": "🇸🇹", + "name": "flag of São Tomé & Príncipe", + "codePoints": [ + "U+1F1F8", + "U+1F1F9" + ] + }, + { + "value": "🇸🇻", + "name": "flag of El Salvador", + "codePoints": [ + "U+1F1F8", + "U+1F1FB" + ] + }, + { + "value": "🇸🇽", + "name": "flag of Sint Maarten", + "codePoints": [ + "U+1F1F8", + "U+1F1FD" + ] + }, + { + "value": "🇸🇾", + "name": "flag of Syria", + "codePoints": [ + "U+1F1F8", + "U+1F1FE" + ] + }, + { + "value": "🇸🇿", + "name": "flag of Eswatini", + "codePoints": [ + "U+1F1F8", + "U+1F1FF" + ] + }, + { + "value": "🇹🇦", + "name": "flag of Tristan da Cunha", + "codePoints": [ + "U+1F1F9", + "U+1F1E6" + ] + }, + { + "value": "🇹🇨", + "name": "flag of the Turks & Caicos Islands", + "codePoints": [ + "U+1F1F9", + "U+1F1E8" + ] + }, + { + "value": "🇹🇩", + "name": "flag of Chad", + "codePoints": [ + "U+1F1F9", + "U+1F1E9" + ] + }, + { + "value": "🇹🇫", + "name": "flag of French Southern Territories", + "codePoints": [ + "U+1F1F9", + "U+1F1EB" + ] + }, + { + "value": "🇹🇬", + "name": "flag of Togo", + "codePoints": [ + "U+1F1F9", + "U+1F1EC" + ] + }, + { + "value": "🇹🇭", + "name": "flag of Thailand", + "codePoints": [ + "U+1F1F9", + "U+1F1ED" + ] + }, + { + "value": "🇹🇯", + "name": "flag of Tajikistan", + "codePoints": [ + "U+1F1F9", + "U+1F1EF" + ] + }, + { + "value": "🇹🇰", + "name": "flag of Tokelau", + "codePoints": [ + "U+1F1F9", + "U+1F1F0" + ] + }, + { + "value": "🇹🇱", + "name": "flag of Timor-Leste", + "codePoints": [ + "U+1F1F9", + "U+1F1F1" + ] + }, + { + "value": "🇹🇲", + "name": "flag of Turkmenistan", + "codePoints": [ + "U+1F1F9", + "U+1F1F2" + ] + }, + { + "value": "🇹🇳", + "name": "flag of Tunisia", + "codePoints": [ + "U+1F1F9", + "U+1F1F3" + ] + }, + { + "value": "🇹🇴", + "name": "flag of Tonga", + "codePoints": [ + "U+1F1F9", + "U+1F1F4" + ] + }, + { + "value": "🇹🇷", + "name": "flag of Türkiye", + "codePoints": [ + "U+1F1F9", + "U+1F1F7" + ] + }, + { + "value": "🇹🇹", + "name": "flag of Trinidad & Tobago", + "codePoints": [ + "U+1F1F9", + "U+1F1F9" + ] + }, + { + "value": "🇹🇻", + "name": "flag of Tuvalu", + "codePoints": [ + "U+1F1F9", + "U+1F1FB" + ] + }, + { + "value": "🇹🇼", + "name": "flag of Taiwan", + "codePoints": [ + "U+1F1F9", + "U+1F1FC" + ] + }, + { + "value": "🇹🇿", + "name": "flag of Tanzania", + "codePoints": [ + "U+1F1F9", + "U+1F1FF" + ] + }, + { + "value": "🇺🇦", + "name": "flag of Ukraine", + "codePoints": [ + "U+1F1FA", + "U+1F1E6" + ] + }, + { + "value": "🇺🇬", + "name": "flag of Uganda", + "codePoints": [ + "U+1F1FA", + "U+1F1EC" + ] + }, + { + "value": "🇺🇲", + "name": "flag of United States Minor Outlying Islands", + "codePoints": [ + "U+1F1FA", + "U+1F1F2" + ] + }, + { + "value": "🇺🇳", + "name": "flag of the United Nations", + "codePoints": [ + "U+1F1FA", + "U+1F1F3" + ] + }, + { + "value": "🇺🇸", + "name": "flag of the United States", + "codePoints": [ + "U+1F1FA", + "U+1F1F8" + ] + }, + { + "value": "🇺🇾", + "name": "flag of Uruguay", + "codePoints": [ + "U+1F1FA", + "U+1F1FE" + ] + }, + { + "value": "🇺🇿", + "name": "flag of Uzbekistan", + "codePoints": [ + "U+1F1FA", + "U+1F1FF" + ] + }, + { + "value": "🇻🇦", + "name": "flag of Vatican City", + "codePoints": [ + "U+1F1FB", + "U+1F1E6" + ] + }, + { + "value": "🇻🇨", + "name": "flag of Saint Vincent & Grenadines", + "codePoints": [ + "U+1F1FB", + "U+1F1E8" + ] + }, + { + "value": "🇻🇪", + "name": "flag of Venezuela", + "codePoints": [ + "U+1F1FB", + "U+1F1EA" + ] + }, + { + "value": "🇻🇬", + "name": "flag of the British Virgin Islands", + "codePoints": [ + "U+1F1FB", + "U+1F1EC" + ] + }, + { + "value": "🇻🇮", + "name": "flag of the US Virgin Islands", + "codePoints": [ + "U+1F1FB", + "U+1F1EE" + ] + }, + { + "value": "🇻🇳", + "name": "flag of Vietnam", + "codePoints": [ + "U+1F1FB", + "U+1F1F3" + ] + }, + { + "value": "🇻🇺", + "name": "flag of Vanuatu", + "codePoints": [ + "U+1F1FB", + "U+1F1FA" + ] + }, + { + "value": "🇼🇫", + "name": "flag of Wallis & Futuna", + "codePoints": [ + "U+1F1FC", + "U+1F1EB" + ] + }, + { + "value": "🇼🇸", + "name": "flag of Samoa", + "codePoints": [ + "U+1F1FC", + "U+1F1F8" + ] + }, + { + "value": "🇽🇰", + "name": "flag of Kosovo", + "codePoints": [ + "U+1F1FD", + "U+1F1F0" + ] + }, + { + "value": "🇾🇪", + "name": "flag of Yemen", + "codePoints": [ + "U+1F1FE", + "U+1F1EA" + ] + }, + { + "value": "🇾🇹", + "name": "flag of Mayotte", + "codePoints": [ + "U+1F1FE", + "U+1F1F9" + ] + }, + { + "value": "🇿🇦", + "name": "flag of South Africa", + "codePoints": [ + "U+1F1FF", + "U+1F1E6" + ] + }, + { + "value": "🇿🇲", + "name": "flag of Zambia", + "codePoints": [ + "U+1F1FF", + "U+1F1F2" + ] + }, + { + "value": "🇿🇼", + "name": "flag of Zimbabwe", + "codePoints": [ + "U+1F1FF", + "U+1F1FC" + ] + }, + { + "value": "🎌", + "name": "crossed flags", + "codePoints": [ + "U+1F38C" + ] + }, + { + "value": "🏁", + "name": "chequered flag", + "codePoints": [ + "U+1F3C1" + ] + }, + { + "value": "🏳️", + "name": "white flag", + "codePoints": [ + "U+1F3F3", + "U+FE0F" + ] + }, + { + "value": "🏳️‍⚧️", + "name": "transgender flag", + "codePoints": [ + "U+1F3F3", + "U+FE0F", + "U+200D", + "U+26A7", + "U+FE0F" + ] + }, + { + "value": "🏳️‍🌈", + "name": "rainbow flag", + "codePoints": [ + "U+1F3F3", + "U+FE0F", + "U+200D", + "U+1F308" + ] + }, + { + "value": "🏴", + "name": "black flag", + "codePoints": [ + "U+1F3F4" + ] + }, + { + "value": "🏴‍☠️", + "name": "pirate flag", + "codePoints": [ + "U+1F3F4", + "U+200D", + "U+2620", + "U+FE0F" + ] + }, + { + "value": "🏴󠁧󠁢󠁥󠁮󠁧󠁿", + "name": "flag of England", + "codePoints": [ + "U+1F3F4", + "U+E0067", + "U+E0062", + "U+E0065", + "U+E006E", + "U+E0067", + "U+E007F" + ] + }, + { + "value": "🏴󠁧󠁢󠁳󠁣󠁴󠁿", + "name": "flag of Scotland", + "codePoints": [ + "U+1F3F4", + "U+E0067", + "U+E0062", + "U+E0073", + "U+E0063", + "U+E0074", + "U+E007F" + ] + }, + { + "value": "🏴󠁧󠁢󠁷󠁬󠁳󠁿", + "name": "flag of Wales", + "codePoints": [ + "U+1F3F4", + "U+E0067", + "U+E0062", + "U+E0077", + "U+E006C", + "U+E0073", + "U+E007F" + ] + }, + { + "value": "📪", + "name": "closed mailbox with lowered flag", + "codePoints": [ + "U+1F4EA" + ] + }, + { + "value": "📫", + "name": "closed mailbox with raised flag", + "codePoints": [ + "U+1F4EB" + ] + }, + { + "value": "📬", + "name": "open mailbox with raised flag", + "codePoints": [ + "U+1F4EC" + ] + }, + { + "value": "📭", + "name": "open mailbox with lowered flag", + "codePoints": [ + "U+1F4ED" + ] + }, + { + "value": "🚩", + "name": "triangular flag on post", + "codePoints": [ + "U+1F6A9" + ] + } + ] + } + ] +} \ No newline at end of file diff --git a/CustomKeyboard/View/KBEmojiPanelView.h b/CustomKeyboard/View/KBEmojiPanelView.h new file mode 100644 index 0000000..3629d92 --- /dev/null +++ b/CustomKeyboard/View/KBEmojiPanelView.h @@ -0,0 +1,33 @@ +// +// KBEmojiPanelView.h +// CustomKeyboard +// + +#import + +NS_ASSUME_NONNULL_BEGIN + +@class KBEmojiPanelView, KBSkinTheme; + +@protocol KBEmojiPanelViewDelegate +- (void)emojiPanelView:(KBEmojiPanelView *)panel didSelectEmoji:(NSString *)emoji; +- (void)emojiPanelViewDidRequestClose:(KBEmojiPanelView *)panel; +- (void)emojiPanelViewDidTapSearch:(KBEmojiPanelView *)panel; +@end + +@interface KBEmojiPanelView : UIView + +@property (nonatomic, weak) id delegate; + +/// 刷新数据(包括常用分类)。 +- (void)reloadData; + +/// 应用当前主题色 +- (void)applyTheme:(KBSkinTheme *)theme; + +/// 高亮指定分类 +- (void)selectCategoryAtIndex:(NSInteger)index; + +@end + +NS_ASSUME_NONNULL_END diff --git a/CustomKeyboard/View/KBEmojiPanelView.m b/CustomKeyboard/View/KBEmojiPanelView.m new file mode 100644 index 0000000..086687c --- /dev/null +++ b/CustomKeyboard/View/KBEmojiPanelView.m @@ -0,0 +1,459 @@ +// +// KBEmojiPanelView.m +// CustomKeyboard +// + +#import "KBEmojiPanelView.h" +#import "KBEmojiDataProvider.h" +#import "KBSkinManager.h" +#import "KBLocalizationManager.h" +#import "Masonry.h" + +@interface KBEmojiCollectionCell : UICollectionViewCell +@property (nonatomic, strong) UILabel *emojiLabel; +- (void)configureWithEmoji:(NSString *)emoji; +@end + +@implementation KBEmojiCollectionCell + +- (instancetype)initWithFrame:(CGRect)frame { + if (self = [super initWithFrame:frame]) { + _emojiLabel = [[UILabel alloc] init]; + _emojiLabel.font = [UIFont systemFontOfSize:32]; + _emojiLabel.textAlignment = NSTextAlignmentCenter; + _emojiLabel.translatesAutoresizingMaskIntoConstraints = NO; + [self.contentView addSubview:_emojiLabel]; + [NSLayoutConstraint activateConstraints:@[ + [_emojiLabel.topAnchor constraintEqualToAnchor:self.contentView.topAnchor], + [_emojiLabel.bottomAnchor constraintEqualToAnchor:self.contentView.bottomAnchor], + [_emojiLabel.leadingAnchor constraintEqualToAnchor:self.contentView.leadingAnchor], + [_emojiLabel.trailingAnchor constraintEqualToAnchor:self.contentView.trailingAnchor], + ]]; + self.contentView.layer.cornerRadius = 10; + self.contentView.layer.masksToBounds = YES; + } + return self; +} + +- (void)prepareForReuse { + [super prepareForReuse]; + self.emojiLabel.text = @""; +} + +- (void)configureWithEmoji:(NSString *)emoji { + self.emojiLabel.text = emoji ?: @""; +} + +@end + +@interface KBEmojiPanelView () + +@property (nonatomic, strong) UILabel *titleLabel; +@property (nonatomic, strong) UIButton *backButton; +@property (nonatomic, strong) UICollectionView *collectionView; +@property (nonatomic, strong) UIView *bottomBar; +@property (nonatomic, strong) UIScrollView *tabScrollView; +@property (nonatomic, strong) UIStackView *tabStackView; +@property (nonatomic, strong) UIButton *searchButton; +@property (nonatomic, strong) NSArray *tabButtons; +@property (nonatomic, strong) KBEmojiDataProvider *dataProvider; +@property (nonatomic, copy) NSArray *categories; +@property (nonatomic, assign) NSInteger currentIndex; +@property (nonatomic, strong) UIView *magnifierView; +@property (nonatomic, strong) UILabel *magnifierLabel; +@property (nonatomic, strong) UIColor *tabNormalColor; +@property (nonatomic, strong) UIColor *tabSelectedColor; + +@end + +@implementation KBEmojiPanelView + +- (instancetype)initWithFrame:(CGRect)frame { + if (self = [super initWithFrame:frame]) { + _dataProvider = [KBEmojiDataProvider shared]; + _currentIndex = 0; + [self setupUI]; + [self registerNotifications]; + [self reloadData]; + } + return self; +} + +- (void)dealloc { + [[NSNotificationCenter defaultCenter] removeObserver:self]; +} + +#pragma mark - Setup + +- (void)setupUI { + self.backgroundColor = [UIColor colorWithWhite:0.08 alpha:1.0]; + + UIView *topBar = [[UIView alloc] init]; + topBar.backgroundColor = [UIColor clearColor]; + [self addSubview:topBar]; + + self.backButton = [UIButton buttonWithType:UIButtonTypeSystem]; + self.backButton.titleLabel.font = [UIFont systemFontOfSize:20 weight:UIFontWeightSemibold]; + [self.backButton setTitle:@"⌨︎" forState:UIControlStateNormal]; + [self.backButton addTarget:self action:@selector(onBack) forControlEvents:UIControlEventTouchUpInside]; + [topBar addSubview:self.backButton]; + + self.titleLabel = [[UILabel alloc] init]; + self.titleLabel.font = [UIFont systemFontOfSize:18 weight:UIFontWeightSemibold]; + self.titleLabel.textColor = [UIColor whiteColor]; + [topBar addSubview:self.titleLabel]; + + [topBar mas_makeConstraints:^(MASConstraintMaker *make) { + make.left.right.equalTo(self); + make.top.equalTo(self.mas_top).offset(4); + make.height.mas_equalTo(44); + }]; + [self.backButton mas_makeConstraints:^(MASConstraintMaker *make) { + make.left.equalTo(topBar.mas_left).offset(12); + make.centerY.equalTo(topBar); + make.width.height.mas_equalTo(32); + }]; + [self.titleLabel mas_makeConstraints:^(MASConstraintMaker *make) { + make.left.equalTo(self.backButton.mas_right).offset(12); + make.centerY.equalTo(topBar); + make.right.lessThanOrEqualTo(topBar.mas_right).offset(-12); + }]; + + UICollectionViewFlowLayout *layout = [UICollectionViewFlowLayout new]; + layout.scrollDirection = UICollectionViewScrollDirectionVertical; + layout.minimumInteritemSpacing = 8; + layout.minimumLineSpacing = 12; + self.collectionView = [[UICollectionView alloc] initWithFrame:CGRectZero collectionViewLayout:layout]; + self.collectionView.backgroundColor = [UIColor clearColor]; + self.collectionView.dataSource = self; + self.collectionView.delegate = self; + self.collectionView.alwaysBounceVertical = YES; + [self.collectionView registerClass:KBEmojiCollectionCell.class forCellWithReuseIdentifier:@"KBEmojiCollectionCell"]; + [self addSubview:self.collectionView]; + + self.bottomBar = [[UIView alloc] init]; + self.bottomBar.backgroundColor = [UIColor clearColor]; + [self addSubview:self.bottomBar]; + + self.searchButton = [UIButton buttonWithType:UIButtonTypeSystem]; + self.searchButton.layer.cornerRadius = 20; + self.searchButton.titleLabel.font = [UIFont systemFontOfSize:16 weight:UIFontWeightBold]; + [self.searchButton setTitle:KBLocalized(@"Search") forState:UIControlStateNormal]; + [self.searchButton setTitleColor:[UIColor whiteColor] forState:UIControlStateNormal]; + [self.searchButton addTarget:self action:@selector(onSearch) forControlEvents:UIControlEventTouchUpInside]; + [self.bottomBar addSubview:self.searchButton]; + + self.tabScrollView = [[UIScrollView alloc] init]; + self.tabScrollView.showsHorizontalScrollIndicator = NO; + self.tabScrollView.backgroundColor = [UIColor clearColor]; + [self.bottomBar addSubview:self.tabScrollView]; + + self.tabStackView = [[UIStackView alloc] init]; + self.tabStackView.axis = UILayoutConstraintAxisHorizontal; + self.tabStackView.spacing = 8; + self.tabStackView.alignment = UIStackViewAlignmentCenter; + [self.tabScrollView addSubview:self.tabStackView]; + + [self.collectionView mas_makeConstraints:^(MASConstraintMaker *make) { + make.left.equalTo(self.mas_left).offset(12); + make.right.equalTo(self.mas_right).offset(-12); + make.top.equalTo(topBar.mas_bottom).offset(8); + make.bottom.equalTo(self.bottomBar.mas_top).offset(-8); + }]; + + [self.bottomBar mas_makeConstraints:^(MASConstraintMaker *make) { + make.left.right.bottom.equalTo(self); + make.height.mas_equalTo(72); + }]; + + [self.searchButton mas_makeConstraints:^(MASConstraintMaker *make) { + make.right.equalTo(self.bottomBar.mas_right).offset(-16); + make.centerY.equalTo(self.bottomBar); + make.width.mas_equalTo(84); + make.height.mas_equalTo(40); + }]; + + [self.tabScrollView mas_makeConstraints:^(MASConstraintMaker *make) { + make.left.equalTo(self.bottomBar.mas_left).offset(12); + make.right.equalTo(self.searchButton.mas_left).offset(-12); + make.top.equalTo(self.bottomBar.mas_top).offset(8); + make.bottom.equalTo(self.bottomBar.mas_bottom).offset(-8); + }]; + + [self.tabStackView mas_makeConstraints:^(MASConstraintMaker *make) { + make.edges.equalTo(self.tabScrollView); + make.height.equalTo(self.tabScrollView); + }]; + + UISwipeGestureRecognizer *leftSwipe = [[UISwipeGestureRecognizer alloc] initWithTarget:self action:@selector(onSwipe:)]; + leftSwipe.direction = UISwipeGestureRecognizerDirectionLeft; + [self addGestureRecognizer:leftSwipe]; + UISwipeGestureRecognizer *rightSwipe = [[UISwipeGestureRecognizer alloc] initWithTarget:self action:@selector(onSwipe:)]; + rightSwipe.direction = UISwipeGestureRecognizerDirectionRight; + [self addGestureRecognizer:rightSwipe]; + + [self applyTheme:[KBSkinManager shared].current]; +} + +- (void)registerNotifications { + [[NSNotificationCenter defaultCenter] addObserver:self + selector:@selector(onEmojiDataChanged) + name:KBEmojiRecentsDidChangeNotification + object:nil]; + [[NSNotificationCenter defaultCenter] addObserver:self + selector:@selector(onLocalizationChanged) + name:KBLocalizationDidChangeNotification + object:nil]; +} + +#pragma mark - Data + +- (void)reloadData { + self.categories = self.dataProvider.categories; + if (self.categories.count == 0) { + self.currentIndex = NSNotFound; + [self.collectionView reloadData]; + self.titleLabel.text = @""; + return; + } + NSInteger preserved = self.currentIndex; + if (preserved < 0 || preserved >= self.categories.count) { + preserved = 0; + } + [self rebuildTabButtons]; + [self updateSelectionToIndex:preserved]; +} + +- (void)rebuildTabButtons { + for (UIView *v in self.tabStackView.arrangedSubviews) { + [self.tabStackView removeArrangedSubview:v]; + [v removeFromSuperview]; + } + NSMutableArray *buttons = [NSMutableArray arrayWithCapacity:self.categories.count]; + [self.categories enumerateObjectsUsingBlock:^(KBEmojiCategory * _Nonnull cat, NSUInteger idx, BOOL * _Nonnull stop) { + UIButton *btn = [UIButton buttonWithType:UIButtonTypeSystem]; + btn.tag = idx; + btn.layer.cornerRadius = 16; + btn.layer.masksToBounds = YES; + btn.titleLabel.font = [UIFont systemFontOfSize:18]; + [btn setTitle:cat.iconSymbol ?: @"●" forState:UIControlStateNormal]; + [btn setTitleColor:[UIColor whiteColor] forState:UIControlStateNormal]; + [btn addTarget:self action:@selector(onTabTapped:) forControlEvents:UIControlEventTouchUpInside]; + btn.contentEdgeInsets = UIEdgeInsetsMake(0, 12, 0, 12); + [self.tabStackView addArrangedSubview:btn]; + [buttons addObject:btn]; + }]; + self.tabButtons = buttons.copy; +} + +- (void)updateSelectionToIndex:(NSInteger)index { + if (self.categories.count == 0) { + self.currentIndex = NSNotFound; + [self.collectionView reloadData]; + self.titleLabel.text = @""; + return; + } + if (index < 0) { index = 0; } + if (index >= self.categories.count) { index = self.categories.count - 1; } + self.currentIndex = index; + KBEmojiCategory *cat = self.categories[index]; + self.titleLabel.text = cat.displayTitle; + [self.collectionView reloadData]; + [self updateTabHighlightStates]; + [self scrollTabToVisible:index]; +} + +- (void)selectCategoryAtIndex:(NSInteger)index { + [self updateSelectionToIndex:index]; +} + +- (void)updateTabHighlightStates { + [self.tabButtons enumerateObjectsUsingBlock:^(UIButton * _Nonnull btn, NSUInteger idx, BOOL * _Nonnull stop) { + BOOL selected = (idx == self.currentIndex); + btn.backgroundColor = selected ? self.tabSelectedColor : self.tabNormalColor; + btn.alpha = selected ? 1.0 : 0.6; + }]; +} + +- (void)scrollTabToVisible:(NSInteger)index { + if (index < 0 || index >= self.tabButtons.count) return; + UIButton *btn = self.tabButtons[index]; + CGRect rect = [self.tabScrollView convertRect:btn.frame fromView:self.tabStackView]; + rect = CGRectInset(rect, -12, 0); + [self.tabScrollView scrollRectToVisible:rect animated:YES]; +} + +#pragma mark - Actions + +- (void)onBack { + if ([self.delegate respondsToSelector:@selector(emojiPanelViewDidRequestClose:)]) { + [self.delegate emojiPanelViewDidRequestClose:self]; + } +} + +- (void)onSearch { + if ([self.delegate respondsToSelector:@selector(emojiPanelViewDidTapSearch:)]) { + [self.delegate emojiPanelViewDidTapSearch:self]; + } +} + +- (void)onTabTapped:(UIButton *)sender { + [self updateSelectionToIndex:sender.tag]; +} + +- (void)onSwipe:(UISwipeGestureRecognizer *)gesture { + if (self.categories.count == 0) return; + if (gesture.direction == UISwipeGestureRecognizerDirectionLeft) { + if (self.currentIndex + 1 < self.categories.count) { + [self updateSelectionToIndex:self.currentIndex + 1]; + } + } else if (gesture.direction == UISwipeGestureRecognizerDirectionRight) { + if (self.currentIndex - 1 >= 0) { + [self updateSelectionToIndex:self.currentIndex - 1]; + } + } +} + +- (void)onEmojiDataChanged { + [self reloadData]; +} + +- (void)onLocalizationChanged { + [self.searchButton setTitle:KBLocalized(@"Search") forState:UIControlStateNormal]; + [self reloadData]; +} + +#pragma mark - Theme + +- (void)applyTheme:(KBSkinTheme *)theme { + UIColor *bg = theme.keyboardBackground ?: [UIColor colorWithWhite:0.08 alpha:1.0]; + self.backgroundColor = bg; + self.collectionView.backgroundColor = [UIColor clearColor]; + self.titleLabel.textColor = theme.keyTextColor ?: [UIColor whiteColor]; + UIColor *searchColor = theme.accentColor ?: [UIColor colorWithRed:0.35 green:0.35 blue:0.95 alpha:1]; + self.searchButton.backgroundColor = searchColor; + self.tabNormalColor = [UIColor colorWithWhite:1 alpha:0.08]; + self.tabSelectedColor = theme.accentColor ?: [UIColor colorWithWhite:1 alpha:0.25]; + [self updateTabHighlightStates]; + if (self.magnifierView) { + self.magnifierView.backgroundColor = theme.keyBackground ?: [UIColor colorWithWhite:1 alpha:0.9]; + } + if (self.magnifierLabel) { + self.magnifierLabel.textColor = theme.keyTextColor ?: [UIColor blackColor]; + } +} + +#pragma mark - Magnifier + +- (void)showMagnifierForEmoji:(NSString *)emoji fromRect:(CGRect)rect { + if (!self.magnifierView) { + self.magnifierView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 68, 68)]; + self.magnifierView.layer.cornerRadius = 12; + self.magnifierView.layer.masksToBounds = YES; + self.magnifierView.layer.shadowColor = [UIColor colorWithWhite:0 alpha:0.3].CGColor; + self.magnifierView.layer.shadowOpacity = 0.6; + self.magnifierView.layer.shadowOffset = CGSizeMake(0, 2); + self.magnifierView.layer.shadowRadius = 3; + self.magnifierLabel = [[UILabel alloc] initWithFrame:self.magnifierView.bounds]; + self.magnifierLabel.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight; + self.magnifierLabel.textAlignment = NSTextAlignmentCenter; + self.magnifierLabel.font = [UIFont systemFontOfSize:40]; + [self.magnifierView addSubview:self.magnifierLabel]; + self.magnifierView.alpha = 0; + [self addSubview:self.magnifierView]; + } + self.magnifierLabel.text = emoji; + CGRect converted = [self convertRect:rect fromView:self.collectionView]; + CGFloat targetX = CGRectGetMidX(converted); + CGFloat targetY = CGRectGetMinY(converted) - CGRectGetHeight(self.magnifierView.bounds)/2 - 8; + targetX = MAX(CGRectGetWidth(self.magnifierView.bounds)/2 + 8, targetX); + targetX = MIN(CGRectGetWidth(self.bounds) - CGRectGetWidth(self.magnifierView.bounds)/2 - 8, targetX); + if (targetY < CGRectGetHeight(self.magnifierView.bounds)/2 + 10) { + targetY = CGRectGetHeight(self.magnifierView.bounds)/2 + 10; + } + self.magnifierView.center = CGPointMake(targetX, targetY); + self.magnifierView.hidden = NO; + [UIView animateWithDuration:0.08 animations:^{ + self.magnifierView.alpha = 1.0; + }]; +} + +- (void)hideMagnifier { + if (!self.magnifierView) return; + [UIView animateWithDuration:0.08 animations:^{ + self.magnifierView.alpha = 0.0; + } completion:^(BOOL finished) { + self.magnifierView.hidden = YES; + }]; +} + +#pragma mark - UICollectionViewDataSource + +- (NSInteger)collectionView:(UICollectionView *)collectionView numberOfItemsInSection:(NSInteger)section { + if (self.currentIndex == NSNotFound || self.currentIndex >= self.categories.count) { + return 0; + } + KBEmojiCategory *cat = self.categories[self.currentIndex]; + return cat.items.count; +} + +- (__kindof UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath { + KBEmojiCollectionCell *cell = [collectionView dequeueReusableCellWithReuseIdentifier:@"KBEmojiCollectionCell" forIndexPath:indexPath]; + KBEmojiCategory *cat = self.categories[self.currentIndex]; + if (indexPath.item < cat.items.count) { + KBEmojiItem *item = cat.items[indexPath.item]; + [cell configureWithEmoji:item.value]; + } else { + [cell configureWithEmoji:@""]; + } + return cell; +} + +#pragma mark - UICollectionViewDelegate + +- (void)collectionView:(UICollectionView *)collectionView didSelectItemAtIndexPath:(NSIndexPath *)indexPath { + if (self.currentIndex == NSNotFound || self.currentIndex >= self.categories.count) return; + KBEmojiCategory *cat = self.categories[self.currentIndex]; + if (indexPath.item >= cat.items.count) return; + KBEmojiItem *item = cat.items[indexPath.item]; + if (item.value.length == 0) return; + [self.dataProvider recordEmojiSelection:item.value]; + if ([self.delegate respondsToSelector:@selector(emojiPanelView:didSelectEmoji:)]) { + [self.delegate emojiPanelView:self didSelectEmoji:item.value]; + } +} + +- (void)collectionView:(UICollectionView *)collectionView didHighlightItemAtIndexPath:(NSIndexPath *)indexPath { + KBEmojiCategory *cat = (self.currentIndex < self.categories.count) ? self.categories[self.currentIndex] : nil; + if (indexPath.item >= cat.items.count) return; + KBEmojiItem *item = cat.items[indexPath.item]; + UICollectionViewCell *cell = [collectionView cellForItemAtIndexPath:indexPath]; + if (!cell) return; + [self showMagnifierForEmoji:item.value fromRect:cell.frame]; +} + +- (void)collectionView:(UICollectionView *)collectionView didUnhighlightItemAtIndexPath:(NSIndexPath *)indexPath { + [self hideMagnifier]; +} + +#pragma mark - UICollectionViewDelegateFlowLayout + +- (CGSize)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout*)collectionViewLayout sizeForItemAtIndexPath:(NSIndexPath *)indexPath { + CGFloat availableWidth = collectionView.bounds.size.width; + NSInteger columns = 8; + CGFloat spacing = 8; + CGFloat totalSpacing = spacing * (columns - 1); + CGFloat width = floor((availableWidth - totalSpacing) / columns); + if (width < 32) { width = 32; } + return CGSizeMake(width, width); +} + +- (CGFloat)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout*)collectionViewLayout minimumLineSpacingForSectionAtIndex:(NSInteger)section { + return 12; +} + +- (CGFloat)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout*)collectionViewLayout minimumInteritemSpacingForSectionAtIndex:(NSInteger)section { + return 8; +} + +@end diff --git a/CustomKeyboard/View/KBKeyBoardMainView.h b/CustomKeyboard/View/KBKeyBoardMainView.h index 3ff4f46..7de5de0 100644 --- a/CustomKeyboard/View/KBKeyBoardMainView.h +++ b/CustomKeyboard/View/KBKeyBoardMainView.h @@ -23,6 +23,12 @@ NS_ASSUME_NONNULL_BEGIN /// 点击了右侧设置按钮 - (void)keyBoardMainViewDidTapSettings:(KBKeyBoardMainView *)keyBoardMainView; + +/// emoji 视图里选择了一个表情 +- (void)keyBoardMainView:(KBKeyBoardMainView *)keyBoardMainView didSelectEmoji:(NSString *)emoji; + +/// emoji 面板点击搜索 +- (void)keyBoardMainViewDidTapEmojiSearch:(KBKeyBoardMainView *)keyBoardMainView; @end @interface KBKeyBoardMainView : UIView diff --git a/CustomKeyboard/View/KBKeyBoardMainView.m b/CustomKeyboard/View/KBKeyBoardMainView.m index ecca872..1427a1b 100644 --- a/CustomKeyboard/View/KBKeyBoardMainView.m +++ b/CustomKeyboard/View/KBKeyBoardMainView.m @@ -10,12 +10,15 @@ #import "KBKeyboardView.h" #import "KBFunctionView.h" #import "KBKey.h" +#import "KBEmojiPanelView.h" #import "Masonry.h" #import "KBSkinManager.h" -@interface KBKeyBoardMainView () +@interface KBKeyBoardMainView () @property (nonatomic, strong) KBToolBar *topBar; @property (nonatomic, strong) KBKeyboardView *keyboardView; +@property (nonatomic, strong) KBEmojiPanelView *emojiView; +@property (nonatomic, assign) BOOL emojiPanelVisible; // 注意:功能面板的展示/隐藏由外部控制器决定,此处不再直接管理显隐 @end @implementation KBKeyBoardMainView @@ -23,8 +26,7 @@ - (instancetype)initWithFrame:(CGRect)frame { if (self = [super initWithFrame:frame]) { self.backgroundColor = [KBSkinManager shared].current.keyboardBackground; - - + // 顶部栏 self.topBar = [[KBToolBar alloc] init]; self.topBar.delegate = self; @@ -43,18 +45,60 @@ make.bottom.equalTo(self.mas_bottom).offset(-bottomInset); }]; + self.emojiView = [[KBEmojiPanelView alloc] init]; + self.emojiView.hidden = YES; + self.emojiView.alpha = 0.0; + self.emojiView.delegate = self; + [self addSubview:self.emojiView]; + [self.emojiView mas_makeConstraints:^(MASConstraintMaker *make) { + make.edges.equalTo(self); + }]; + [self.topBar mas_makeConstraints:^(MASConstraintMaker *make) { make.left.right.equalTo(self); make.top.equalTo(self.mas_top).offset(0); make.bottom.equalTo(self.keyboardView.mas_top).offset(-barSpacing); }]; - // 功能面板切换交由外部控制器处理;此处不直接创建/管理 - } return self; } +- (void)setEmojiPanelVisible:(BOOL)visible animated:(BOOL)animated { + if (self.emojiPanelVisible == visible) return; + self.emojiPanelVisible = visible; + if (visible) { + [self.emojiView reloadData]; + self.emojiView.hidden = NO; + [self bringSubviewToFront:self.emojiView]; + } else { + self.keyboardView.hidden = NO; + self.topBar.hidden = NO; + } + + void (^changes)(void) = ^{ + self.emojiView.alpha = visible ? 1.0 : 0.0; + self.keyboardView.alpha = visible ? 0.0 : 1.0; + self.topBar.alpha = visible ? 0.0 : 1.0; + }; + void (^completion)(BOOL) = ^(BOOL finished) { + self.emojiView.hidden = !visible; + self.keyboardView.hidden = visible; + self.topBar.hidden = visible; + }; + + if (animated) { + [UIView animateWithDuration:0.22 delay:0 options:UIViewAnimationOptionCurveEaseInOut animations:changes completion:completion]; + } else { + changes(); + completion(YES); + } +} + +- (void)toggleEmojiPanel { + [self setEmojiPanelVisible:!self.emojiPanelVisible animated:YES]; +} + #pragma mark - KBToolBarDelegate @@ -106,12 +150,15 @@ [self.delegate keyBoardMainView:self didTapKey:key]; } break; - case KBKeyTypeCustom: - // 自定义占位:切换语言或其它操作 + case KBKeyTypeCustom: { + if ([key.identifier isEqualToString:KBKeyIdentifierEmojiPanel]) { + [self toggleEmojiPanel]; + break; + } if ([self.delegate respondsToSelector:@selector(keyBoardMainView:didTapKey:)]) { [self.delegate keyBoardMainView:self didTapKey:key]; } - break; + } break; case KBKeyTypeShift: // Shift 已在 KBKeyboardView 内部处理 break; @@ -121,6 +168,25 @@ // 切换功能面板交由外部控制器处理(此处不再实现) // 设置页展示改由 KeyboardViewController 统一处理 +#pragma mark - KBEmojiPanelViewDelegate + +- (void)emojiPanelView:(KBEmojiPanelView *)panel didSelectEmoji:(NSString *)emoji { + if (emoji.length == 0) return; + if ([self.delegate respondsToSelector:@selector(keyBoardMainView:didSelectEmoji:)]) { + [self.delegate keyBoardMainView:self didSelectEmoji:emoji]; + } +} + +- (void)emojiPanelViewDidRequestClose:(KBEmojiPanelView *)panel { + [self setEmojiPanelVisible:NO animated:YES]; +} + +- (void)emojiPanelViewDidTapSearch:(KBEmojiPanelView *)panel { + if ([self.delegate respondsToSelector:@selector(keyBoardMainViewDidTapEmojiSearch:)]) { + [self.delegate keyBoardMainViewDidTapEmojiSearch:self]; + } +} + #pragma mark - Theme - (void)kb_applyTheme { @@ -130,6 +196,9 @@ self.backgroundColor = hasImg ? [UIColor clearColor] : bg; self.keyboardView.backgroundColor = hasImg ? [UIColor clearColor] : bg; [self.keyboardView reloadKeys]; + if (self.emojiView) { + [self.emojiView applyTheme:mgr.current]; + } } @end diff --git a/CustomKeyboard/View/KBKeyboardView.m b/CustomKeyboard/View/KBKeyboardView.m index f1dc854..3dd7793 100644 --- a/CustomKeyboard/View/KBKeyboardView.m +++ b/CustomKeyboard/View/KBKeyboardView.m @@ -279,10 +279,10 @@ static const CGFloat kKBLettersRow2EdgeSpacerMultiplier = 0.5; title:@"123" output:@"" type:KBKeyTypeModeChange]; - KBKey *customAI = [KBKey keyWithIdentifier:@"ai" - title:@"AI" - output:@"" - type:KBKeyTypeCustom]; + KBKey *emoji = [KBKey keyWithIdentifier:KBKeyIdentifierEmojiPanel + title:@"😊" + output:@"" + type:KBKeyTypeCustom]; KBKey *space = [KBKey keyWithIdentifier:@"space" title:@"space" output:@" " @@ -291,7 +291,7 @@ static const CGFloat kKBLettersRow2EdgeSpacerMultiplier = 0.5; title:KBLocalized(@"Send") output:@"\n" type:KBKeyTypeReturn]; - return @[ mode123, customAI, space, ret ]; + return @[ mode123, emoji, space, ret ]; } // 底部控制行(数字布局) @@ -300,10 +300,10 @@ static const CGFloat kKBLettersRow2EdgeSpacerMultiplier = 0.5; title:@"abc" output:@"" type:KBKeyTypeModeChange]; - KBKey *customAI = [KBKey keyWithIdentifier:@"ai" - title:@"AI" - output:@"" - type:KBKeyTypeCustom]; + KBKey *emoji = [KBKey keyWithIdentifier:KBKeyIdentifierEmojiPanel + title:@"😊" + output:@"" + type:KBKeyTypeCustom]; KBKey *space = [KBKey keyWithIdentifier:@"space" title:@"space" output:@" " @@ -312,7 +312,7 @@ static const CGFloat kKBLettersRow2EdgeSpacerMultiplier = 0.5; title:KBLocalized(@"Send") output:@"\n" type:KBKeyTypeReturn]; - return @[ modeABC, customAI, space, ret ]; + return @[ modeABC, emoji, space, ret ]; } #pragma mark - Row Building diff --git a/Shared/KBAPI.h b/Shared/KBAPI.h index 98db7d3..cda9cf9 100644 --- a/Shared/KBAPI.h +++ b/Shared/KBAPI.h @@ -56,7 +56,7 @@ #define API_THEME_RECOMMENDED @"/themes/recommended" // 推荐主题列表 /// pay -#define API_VALIDATE_RECEIPT @"/api/apple/validate-receipt" // 排行榜标签列表 +#define API_VALIDATE_RECEIPT @"/apple/validate-receipt" // 排行榜标签列表 #define API_INAPP_PRODUCT_LIST @"/products/inApp/list" // 查询 type=in-app-purchase 的商品列表 #define API_SUBSCRIPTION_PRODUCT_LIST @"/products/subscription/list" // 查询订阅商品列表 diff --git a/keyBoard.xcodeproj/project.pbxproj b/keyBoard.xcodeproj/project.pbxproj index 784d98d..3dca934 100644 --- a/keyBoard.xcodeproj/project.pbxproj +++ b/keyBoard.xcodeproj/project.pbxproj @@ -118,6 +118,7 @@ 0498BDF12EEC0E56006CC1D5 /* FGIAPProductsFilter.m in Sources */ = {isa = PBXBuildFile; fileRef = 0498BDE92EEC0E56006CC1D5 /* FGIAPProductsFilter.m */; }; 0498BDF22EEC0E56006CC1D5 /* NSObject+FGIsNullOrEmpty.m in Sources */ = {isa = PBXBuildFile; fileRef = 0498BDEF2EEC0E56006CC1D5 /* NSObject+FGIsNullOrEmpty.m */; }; 0498BDF32EEC0E56006CC1D5 /* FGIAPService.m in Sources */ = {isa = PBXBuildFile; fileRef = 0498BDEB2EEC0E56006CC1D5 /* FGIAPService.m */; }; + 0498BDF52EEC50EE006CC1D5 /* emoji_categories.json in Resources */ = {isa = PBXBuildFile; fileRef = 0498BDF42EEC50EE006CC1D5 /* emoji_categories.json */; }; 049FB20B2EC1C13800FAB05D /* KBSkinBottomActionView.m in Sources */ = {isa = PBXBuildFile; fileRef = 049FB20A2EC1C13800FAB05D /* KBSkinBottomActionView.m */; }; 049FB20E2EC1CD2800FAB05D /* KBAlert.m in Sources */ = {isa = PBXBuildFile; fileRef = 049FB20D2EC1CD2800FAB05D /* KBAlert.m */; }; 049FB2112EC1F72F00FAB05D /* KBMyListCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 049FB2102EC1F72F00FAB05D /* KBMyListCell.m */; }; @@ -154,6 +155,8 @@ 04C6EACE2EAF87020089C901 /* CustomKeyboard.appex in Embed Foundation Extensions */ = {isa = PBXBuildFile; fileRef = 04C6EAC62EAF87020089C901 /* CustomKeyboard.appex */; settings = {ATTRIBUTES = (RemoveHeadersOnCopy, ); }; }; 04C6EAD82EAF870B0089C901 /* KeyboardViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 04C6EAD62EAF870B0089C901 /* KeyboardViewController.m */; }; 04C6EADD2EAF8CEB0089C901 /* KBToolBar.m in Sources */ = {isa = PBXBuildFile; fileRef = 04C6EADC2EAF8CEB0089C901 /* KBToolBar.m */; }; + 04FEDAA12EEDB00100123456 /* KBEmojiDataProvider.m in Sources */ = {isa = PBXBuildFile; fileRef = 04FEDAA02EEDB00100123456 /* KBEmojiDataProvider.m */; }; + 04FEDAB32EEDB05000123456 /* KBEmojiPanelView.m in Sources */ = {isa = PBXBuildFile; fileRef = 04FEDAB22EEDB05000123456 /* KBEmojiPanelView.m */; }; 04D1F6B22EDFF10A00B12345 /* KBSkinInstallBridge.m in Sources */ = {isa = PBXBuildFile; fileRef = 04D1F6B12EDFF10A00B12345 /* KBSkinInstallBridge.m */; }; 04D1F6B32EDFF10A00B12345 /* KBSkinInstallBridge.m in Sources */ = {isa = PBXBuildFile; fileRef = 04D1F6B12EDFF10A00B12345 /* KBSkinInstallBridge.m */; }; 04FC95672EB0546C007BD342 /* KBKey.m in Sources */ = {isa = PBXBuildFile; fileRef = 04FC95652EB0546C007BD342 /* KBKey.m */; }; @@ -419,6 +422,7 @@ 0498BDED2EEC0E56006CC1D5 /* FGIAPVerifyTransaction.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = FGIAPVerifyTransaction.h; sourceTree = ""; }; 0498BDEE2EEC0E56006CC1D5 /* NSObject+FGIsNullOrEmpty.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "NSObject+FGIsNullOrEmpty.h"; sourceTree = ""; }; 0498BDEF2EEC0E56006CC1D5 /* NSObject+FGIsNullOrEmpty.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = "NSObject+FGIsNullOrEmpty.m"; sourceTree = ""; }; + 0498BDF42EEC50EE006CC1D5 /* emoji_categories.json */ = {isa = PBXFileReference; lastKnownFileType = text.json; path = emoji_categories.json; sourceTree = ""; }; 049FB2092EC1C13800FAB05D /* KBSkinBottomActionView.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = KBSkinBottomActionView.h; sourceTree = ""; }; 049FB20A2EC1C13800FAB05D /* KBSkinBottomActionView.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = KBSkinBottomActionView.m; sourceTree = ""; }; 049FB20C2EC1CD2800FAB05D /* KBAlert.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = KBAlert.h; sourceTree = ""; }; @@ -503,6 +507,10 @@ 04FC95752EB095DE007BD342 /* KBFunctionPasteView.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = KBFunctionPasteView.m; sourceTree = ""; }; 04FC95772EB09BC8007BD342 /* KBKeyBoardMainView.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = KBKeyBoardMainView.h; sourceTree = ""; }; 04FC95782EB09BC8007BD342 /* KBKeyBoardMainView.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = KBKeyBoardMainView.m; sourceTree = ""; }; + 04FEDA9F2EEDB00100123456 /* KBEmojiDataProvider.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = KBEmojiDataProvider.h; sourceTree = ""; }; + 04FEDAA02EEDB00100123456 /* KBEmojiDataProvider.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = KBEmojiDataProvider.m; sourceTree = ""; }; + 04FEDAB12EEDB05000123456 /* KBEmojiPanelView.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = KBEmojiPanelView.h; sourceTree = ""; }; + 04FEDAB22EEDB05000123456 /* KBEmojiPanelView.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = KBEmojiPanelView.m; sourceTree = ""; }; 04FC95B02EB0B2CC007BD342 /* KBSettingView.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = KBSettingView.h; sourceTree = ""; }; 04FC95B12EB0B2CC007BD342 /* KBSettingView.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = KBSettingView.m; sourceTree = ""; }; 04FC95C72EB1E4C9007BD342 /* BaseNavigationController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = BaseNavigationController.h; sourceTree = ""; }; @@ -595,6 +603,7 @@ 041007D02ECE010100D203BB /* Resource */ = { isa = PBXGroup; children = ( + 0498BDF42EEC50EE006CC1D5 /* emoji_categories.json */, 041007D12ECE012000D203BB /* KBSkinIconMap.strings */, 041007D32ECE012500D203BB /* 002.zip */, 04791FFA2ED5EAB8004E8522 /* fense.zip */, @@ -956,6 +965,8 @@ children = ( 04A9FE102EB4D0D20020DB6D /* KBFullAccessManager.h */, 04A9FE112EB4D0D20020DB6D /* KBFullAccessManager.m */, + 04FEDA9F2EEDB00100123456 /* KBEmojiDataProvider.h */, + 04FEDAA02EEDB00100123456 /* KBEmojiDataProvider.m */, ); path = Manager; sourceTree = ""; @@ -1020,6 +1031,8 @@ 046131132ECF454500A6FADF /* KBKeyPreviewView.m */, 04FC95772EB09BC8007BD342 /* KBKeyBoardMainView.h */, 04FC95782EB09BC8007BD342 /* KBKeyBoardMainView.m */, + 04FEDAB12EEDB05000123456 /* KBEmojiPanelView.h */, + 04FEDAB22EEDB05000123456 /* KBEmojiPanelView.m */, 04FC956E2EB09516007BD342 /* KBFunctionView.h */, 04FC956F2EB09516007BD342 /* KBFunctionView.m */, 04FC95712EB09570007BD342 /* KBFunctionBarView.h */, @@ -1610,6 +1623,7 @@ 041007D42ECE012500D203BB /* 002.zip in Resources */, 041007D22ECE012000D203BB /* KBSkinIconMap.strings in Resources */, 04791FFB2ED5EAB8004E8522 /* fense.zip in Resources */, + 0498BDF52EEC50EE006CC1D5 /* emoji_categories.json in Resources */, 04791FF72ED5B985004E8522 /* Christmas.zip in Resources */, 04286A0B2ECD88B400CE730C /* KeyboardAssets.xcassets in Resources */, ); @@ -1712,6 +1726,7 @@ 04A9FE0F2EB481100020DB6D /* KBHUD.m in Sources */, 04C6EADD2EAF8CEB0089C901 /* KBToolBar.m in Sources */, 04FC95792EB09BC8007BD342 /* KBKeyBoardMainView.m in Sources */, + 04FEDAB32EEDB05000123456 /* KBEmojiPanelView.m in Sources */, 0498BD8C2EE69E15006CC1D5 /* KBTagItemModel.m in Sources */, 046131142ECF454500A6FADF /* KBKeyPreviewView.m in Sources */, 04FC95732EB09570007BD342 /* KBFunctionBarView.m in Sources */, @@ -1724,6 +1739,7 @@ A1B2C3E22EB0C0A100000001 /* KBNetworkManager.m in Sources */, 049FB2352EC45C6A00FAB05D /* NetworkStreamHandler.m in Sources */, 04FC956A2EB05497007BD342 /* KBKeyButton.m in Sources */, + 04FEDAA12EEDB00100123456 /* KBEmojiDataProvider.m in Sources */, 04FC95B22EB0B2CC007BD342 /* KBSettingView.m in Sources */, 04791F8E2ED469C0004E8522 /* KBHostAppLauncher.m in Sources */, 049FB23B2EC4766700FAB05D /* KBFunctionTagListView.m in Sources */,