diff --git a/README.md b/README.md index dfd4077..48520fe 100644 --- a/README.md +++ b/README.md @@ -10,4 +10,27 @@ svelte bsky client, wip - profile (show posts, followers, following, etc) - feeds - bookmarks -- settings \ No newline at end of file +- settings + +## profile + +- make links in profile clickable +- show website + pronouns +- make editable + +## general + +- make everything faster, faster, faster +- add post creator +- allow setting default feed + +## posts + +- show some link embeds as their own thing (e.g. youtube, tenor) +- max height for embeds +- show embeds in quoted posts (except second level quotes?) +- allow clicking on videos and images (play/show in fullscreen) +- fix handles (space between avatar and handle sometimes) +- make everything tighter +- add action to reply button and repost/quote button +- limit title in external embed to 2 lines diff --git a/src/lib/atproto/settings.ts b/src/lib/atproto/settings.ts index 8456cc7..75ebd87 100644 --- a/src/lib/atproto/settings.ts +++ b/src/lib/atproto/settings.ts @@ -4,7 +4,7 @@ import { dev } from '$app/environment'; export const scopes = ['atproto', 'transition:generic', 'transition:chat.bsky']; // set to false to disable signup -export const ALLOW_SIGNUP = true; +export const ALLOW_SIGNUP = false; // which PDS to use for signup (change to your preferred PDS) const devPDS = 'https://pds.rip/'; diff --git a/src/lib/components/action-buttons/ActionButtons.svelte b/src/lib/components/action-buttons/ActionButtons.svelte new file mode 100644 index 0000000..7c96684 --- /dev/null +++ b/src/lib/components/action-buttons/ActionButtons.svelte @@ -0,0 +1,40 @@ + + +{#if reply || repost || like || bookmark || customActions} +
+ {#if reply} + + {/if} + {#if repost} + + {/if} + {#if like} + + {/if} + {#if bookmark} + + {/if} + {@render customActions?.()} +
+{/if} diff --git a/src/lib/components/action-buttons/BookmarkButton.svelte b/src/lib/components/action-buttons/BookmarkButton.svelte new file mode 100644 index 0000000..455f445 --- /dev/null +++ b/src/lib/components/action-buttons/BookmarkButton.svelte @@ -0,0 +1,51 @@ + + +{#snippet icon()} + Bookmark + {#if active} + + + + {:else} + + + + {/if} +{/snippet} + +{#if onclick} + +{:else} + + {@render icon()} + +{/if} diff --git a/src/lib/components/action-buttons/LikeButton.svelte b/src/lib/components/action-buttons/LikeButton.svelte new file mode 100644 index 0000000..3d1c7ee --- /dev/null +++ b/src/lib/components/action-buttons/LikeButton.svelte @@ -0,0 +1,71 @@ + + +{#snippet icon()} + {#if active} + + + + {:else} + + + + {/if} + {#if count} + {numberToHumanReadable(count)} + {/if} +{/snippet} + +{#if onclick} + +{:else if href} + + {@render icon()} + +{:else} + + {@render icon()} + +{/if} diff --git a/src/lib/components/action-buttons/ReplyButton.svelte b/src/lib/components/action-buttons/ReplyButton.svelte new file mode 100644 index 0000000..1a0d61f --- /dev/null +++ b/src/lib/components/action-buttons/ReplyButton.svelte @@ -0,0 +1,47 @@ + + +{#snippet icon()} + + + + {#if count} + {numberToHumanReadable(count)} + {/if} +{/snippet} + +{#if onclick} + +{:else if href} + + {@render icon()} + +{:else} + + {@render icon()} + +{/if} diff --git a/src/lib/components/action-buttons/RepostButton.svelte b/src/lib/components/action-buttons/RepostButton.svelte new file mode 100644 index 0000000..69fdcc8 --- /dev/null +++ b/src/lib/components/action-buttons/RepostButton.svelte @@ -0,0 +1,47 @@ + + +{#snippet icon()} + + + + {#if count} + {numberToHumanReadable(count)} + {/if} +{/snippet} + +{#if onclick} + +{:else if href} + + {@render icon()} + +{:else} + + {@render icon()} + +{/if} diff --git a/src/lib/components/action-buttons/index.ts b/src/lib/components/action-buttons/index.ts new file mode 100644 index 0000000..c9c95b8 --- /dev/null +++ b/src/lib/components/action-buttons/index.ts @@ -0,0 +1,13 @@ +export type { + ReplyButtonProps, + RepostButtonProps, + LikeButtonProps, + BookmarkButtonProps, + ActionButtonsProps +} from './types'; + +export { default as ActionButtons } from './ActionButtons.svelte'; +export { default as ReplyButton } from './ReplyButton.svelte'; +export { default as RepostButton } from './RepostButton.svelte'; +export { default as LikeButton } from './LikeButton.svelte'; +export { default as BookmarkButton } from './BookmarkButton.svelte'; diff --git a/src/lib/components/action-buttons/types.ts b/src/lib/components/action-buttons/types.ts new file mode 100644 index 0000000..521a354 --- /dev/null +++ b/src/lib/components/action-buttons/types.ts @@ -0,0 +1,35 @@ +import type { Snippet } from 'svelte'; + +export type ReplyButtonProps = { + count?: number; + onclick?: () => void; + href?: string; +}; + +export type RepostButtonProps = { + count?: number; + active?: boolean; + onclick?: () => void; + href?: string; +}; + +export type LikeButtonProps = { + count?: number; + active?: boolean; + onclick?: () => void; + href?: string; +}; + +export type BookmarkButtonProps = { + active?: boolean; + onclick?: () => void; +}; + +export type ActionButtonsProps = { + reply?: ReplyButtonProps; + repost?: RepostButtonProps; + like?: LikeButtonProps; + bookmark?: BookmarkButtonProps; + customActions?: Snippet; + class?: string; +}; diff --git a/src/lib/components/animated-emoji-picker/EmojiPicker.svelte b/src/lib/components/animated-emoji-picker/EmojiPicker.svelte new file mode 100644 index 0000000..e8039e8 --- /dev/null +++ b/src/lib/components/animated-emoji-picker/EmojiPicker.svelte @@ -0,0 +1,120 @@ + + +
+ + + + {#key currentGroup} + {#each currentEmojis as emoji} + + {/each} + {/key} + +
+ {#each allGroups as group} + + {/each} +
+
diff --git a/src/lib/components/animated-emoji-picker/PopoverEmojiPicker.svelte b/src/lib/components/animated-emoji-picker/PopoverEmojiPicker.svelte new file mode 100644 index 0000000..f24d8e0 --- /dev/null +++ b/src/lib/components/animated-emoji-picker/PopoverEmojiPicker.svelte @@ -0,0 +1,24 @@ + + + + {@render children?.()} + + diff --git a/src/lib/components/animated-emoji-picker/emoji.ts b/src/lib/components/animated-emoji-picker/emoji.ts new file mode 100644 index 0000000..02334b0 --- /dev/null +++ b/src/lib/components/animated-emoji-picker/emoji.ts @@ -0,0 +1,63 @@ +export const allGroups = [ + [ + 0, + '😀', + 'Smileys and emotions', + `` + ], + [ + 1, + '👋', + 'People', + `` + ], + [ + 3, + '🐱', + 'Animals and nature', + `` + ], + [ + 4, + '🍎', + 'Food and drink', + ` ` + ], + [ + 5, + '🏠️', + 'Travel and places', + `` + ], + [ + 6, + '⚽', + 'Activities and events', + `` + ], + [ + 7, + '📝', + 'Objects', + `` + ], + [ + 8, + '⛔️', + 'Symbols', + `` + ], + [ + 9, + '🏁', + 'Flags', + `` + ] +].map(([id, emoji, name, svg]) => ({ id, emoji, name, svg })) as { + id: number; + emoji: string; + name: string; + svg: string; +}[]; + +export type { NativeEmoji } from 'emoji-picker-element/shared'; diff --git a/src/lib/components/animated-emoji-picker/icons.json b/src/lib/components/animated-emoji-picker/icons.json new file mode 100644 index 0000000..6266e50 --- /dev/null +++ b/src/lib/components/animated-emoji-picker/icons.json @@ -0,0 +1,7255 @@ +{ + "host": "", + "asset_url_pattern": "", + "families": ["Animated Emoji"], + "icons": [ + { + "name": "emoji_u1f600", + "version": 1, + "popularity": 720, + "codepoint": "1f600", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":smile:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f603", + "version": 1, + "popularity": 719, + "codepoint": "1f603", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":smile-with-big-eyes:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f604", + "version": 1, + "popularity": 718, + "codepoint": "1f604", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":grin:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f601", + "version": 1, + "popularity": 717, + "codepoint": "1f601", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":grinning:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f606", + "version": 1, + "popularity": 716, + "codepoint": "1f606", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":laughing:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f605", + "version": 1, + "popularity": 715, + "codepoint": "1f605", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":grin-sweat:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f602", + "version": 1, + "popularity": 714, + "codepoint": "1f602", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":joy:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f923", + "version": 1, + "popularity": 713, + "codepoint": "1f923", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":rofl:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f62d", + "version": 1, + "popularity": 712, + "codepoint": "1f62d", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":loudly-crying:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f609", + "version": 1, + "popularity": 711, + "codepoint": "1f609", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":wink:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f617", + "version": 1, + "popularity": 710, + "codepoint": "1f617", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":kissing:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f619", + "version": 1, + "popularity": 709, + "codepoint": "1f619", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":kissing-smiling-eyes:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f61a", + "version": 1, + "popularity": 708, + "codepoint": "1f61a", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":kissing-closed-eyes:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f618", + "version": 1, + "popularity": 707, + "codepoint": "1f618", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":kissing-heart:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f970", + "version": 1, + "popularity": 706, + "codepoint": "1f970", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":heart-face:", ":3-hearts:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f60d", + "version": 1, + "popularity": 705, + "codepoint": "1f60d", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":heart-eyes:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f929", + "version": 1, + "popularity": 704, + "codepoint": "1f929", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":star-struck:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f973", + "version": 1, + "popularity": 703, + "codepoint": "1f973", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":partying-face:"], + "sizes_px": [] + }, + { + "name": "emoji_u1fae0", + "version": 1, + "popularity": 702, + "codepoint": "1fae0", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":melting:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f643", + "version": 1, + "popularity": 701, + "codepoint": "1f643", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":upside-down-face:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f642", + "version": 1, + "popularity": 700, + "codepoint": "1f642", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":slightly-happy:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f972", + "version": 1, + "popularity": 699, + "codepoint": "1f972", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":happy-cry:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f979", + "version": 1, + "popularity": 698, + "codepoint": "1f979", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":holding-back-tears:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f60a", + "version": 1, + "popularity": 697, + "codepoint": "1f60a", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":blush:"], + "sizes_px": [] + }, + { + "name": "emoji_u263a_fe0f", + "version": 1, + "popularity": 696, + "codepoint": "263a_fe0f", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":warm-smile:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f60c", + "version": 1, + "popularity": 695, + "codepoint": "1f60c", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":relieved:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f642_200d_2195_fe0f", + "version": 1, + "popularity": 694, + "codepoint": "1f642_200d_2195_fe0f", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":head-nod:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f642_200d_2194_fe0f", + "version": 1, + "popularity": 693, + "codepoint": "1f642_200d_2194_fe0f", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":head-shake:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f60f", + "version": 1, + "popularity": 692, + "codepoint": "1f60f", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":smirk:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f924", + "version": 1, + "popularity": 691, + "codepoint": "1f924", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":drool:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f60b", + "version": 1, + "popularity": 690, + "codepoint": "1f60b", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":yum:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f61b", + "version": 1, + "popularity": 689, + "codepoint": "1f61b", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":stuck-out-tongue:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f61d", + "version": 1, + "popularity": 688, + "codepoint": "1f61d", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":squinting-tongue:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f61c", + "version": 1, + "popularity": 687, + "codepoint": "1f61c", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":winky-tongue:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f92a", + "version": 1, + "popularity": 686, + "codepoint": "1f92a", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":zany-face:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f974", + "version": 1, + "popularity": 685, + "codepoint": "1f974", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":woozy:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f614", + "version": 1, + "popularity": 684, + "codepoint": "1f614", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":pensive:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f97a", + "version": 1, + "popularity": 683, + "codepoint": "1f97a", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":pleading:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f62c", + "version": 1, + "popularity": 682, + "codepoint": "1f62c", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":grimacing:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f611", + "version": 1, + "popularity": 681, + "codepoint": "1f611", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":expressionless:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f610", + "version": 1, + "popularity": 680, + "codepoint": "1f610", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":neutral-face:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f636", + "version": 1, + "popularity": 679, + "codepoint": "1f636", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":mouth-none:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f636_200d_1f32b_fe0f", + "version": 1, + "popularity": 678, + "codepoint": "1f636_200d_1f32b_fe0f", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":face-in-clouds:", ":lost:"], + "sizes_px": [] + }, + { + "name": "emoji_u1fae5", + "version": 1, + "popularity": 677, + "codepoint": "1fae5", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":dotted-line-face:", ":invisible:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f910", + "version": 1, + "popularity": 676, + "codepoint": "1f910", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":zipper-face:"], + "sizes_px": [] + }, + { + "name": "emoji_u1fae1", + "version": 1, + "popularity": 675, + "codepoint": "1fae1", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":salute:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f914", + "version": 1, + "popularity": 674, + "codepoint": "1f914", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":thinking-face:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f92b", + "version": 1, + "popularity": 673, + "codepoint": "1f92b", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":shushing-face:"], + "sizes_px": [] + }, + { + "name": "emoji_u1fae2", + "version": 1, + "popularity": 672, + "codepoint": "1fae2", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":hand-over-mouth:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f92d", + "version": 1, + "popularity": 671, + "codepoint": "1f92d", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":smiling-eyes-with-hand-over-mouth:", ":chuckling:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f971", + "version": 1, + "popularity": 670, + "codepoint": "1f971", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":yawn:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f917", + "version": 1, + "popularity": 669, + "codepoint": "1f917", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":hug-face:"], + "sizes_px": [] + }, + { + "name": "emoji_u1fae3", + "version": 1, + "popularity": 668, + "codepoint": "1fae3", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":peeking:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f631", + "version": 1, + "popularity": 667, + "codepoint": "1f631", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":screaming:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f928", + "version": 1, + "popularity": 666, + "codepoint": "1f928", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":raised-eyebrow:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f9d0", + "version": 1, + "popularity": 665, + "codepoint": "1f9d0", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":monocle:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f612", + "version": 1, + "popularity": 664, + "codepoint": "1f612", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":unamused:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f644", + "version": 1, + "popularity": 663, + "codepoint": "1f644", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":rolling-eyes:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f62e_200d_1f4a8", + "version": 1, + "popularity": 662, + "codepoint": "1f62e_200d_1f4a8", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":exhale:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f624", + "version": 1, + "popularity": 661, + "codepoint": "1f624", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":triumph:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f620", + "version": 1, + "popularity": 660, + "codepoint": "1f620", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":angry:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f621", + "version": 1, + "popularity": 659, + "codepoint": "1f621", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":rage:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f92c", + "version": 1, + "popularity": 658, + "codepoint": "1f92c", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":cursing:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f61e", + "version": 1, + "popularity": 657, + "codepoint": "1f61e", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":sad:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f613", + "version": 1, + "popularity": 656, + "codepoint": "1f613", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":sweat:", ":downcast:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f61f", + "version": 1, + "popularity": 655, + "codepoint": "1f61f", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":worried:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f625", + "version": 1, + "popularity": 654, + "codepoint": "1f625", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":concerned:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f622", + "version": 1, + "popularity": 653, + "codepoint": "1f622", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":cry:"], + "sizes_px": [] + }, + { + "name": "emoji_u2639_fe0f", + "version": 1, + "popularity": 652, + "codepoint": "2639_fe0f", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":big-frown:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f641", + "version": 1, + "popularity": 651, + "codepoint": "1f641", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":frown:"], + "sizes_px": [] + }, + { + "name": "emoji_u1fae4", + "version": 1, + "popularity": 650, + "codepoint": "1fae4", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":diagonal-mouth:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f615", + "version": 1, + "popularity": 649, + "codepoint": "1f615", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":slightly-frowning:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f630", + "version": 1, + "popularity": 648, + "codepoint": "1f630", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":anxious-with-sweat:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f628", + "version": 1, + "popularity": 647, + "codepoint": "1f628", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":scared:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f627", + "version": 1, + "popularity": 646, + "codepoint": "1f627", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":anguished:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f626", + "version": 1, + "popularity": 645, + "codepoint": "1f626", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":gasp:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f62e", + "version": 1, + "popularity": 644, + "codepoint": "1f62e", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":mouth-open:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f62f", + "version": 1, + "popularity": 643, + "codepoint": "1f62f", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":surprised:", ":hushed:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f632", + "version": 1, + "popularity": 642, + "codepoint": "1f632", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":astonished:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f633", + "version": 1, + "popularity": 641, + "codepoint": "1f633", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":flushed:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f92f", + "version": 1, + "popularity": 640, + "codepoint": "1f92f", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":mind-blown:", ":exploding-head:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f616", + "version": 1, + "popularity": 639, + "codepoint": "1f616", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":scrunched-mouth:", ":confounded:", ":zigzag-mouth:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f623", + "version": 1, + "popularity": 638, + "codepoint": "1f623", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":scrunched-eyes:", ":persevering:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f629", + "version": 1, + "popularity": 637, + "codepoint": "1f629", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":weary:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f62b", + "version": 1, + "popularity": 636, + "codepoint": "1f62b", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":distraught:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f635", + "version": 1, + "popularity": 635, + "codepoint": "1f635", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":x-eyes:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f635_200d_1f4ab", + "version": 1, + "popularity": 634, + "codepoint": "1f635_200d_1f4ab", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":dizzy-face:"], + "sizes_px": [] + }, + { + "name": "emoji_u1fae8", + "version": 1, + "popularity": 633, + "codepoint": "1fae8", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":shaking-face:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f976", + "version": 1, + "popularity": 632, + "codepoint": "1f976", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":cold-face:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f975", + "version": 1, + "popularity": 631, + "codepoint": "1f975", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":hot-face:", ":sweat-face:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f922", + "version": 1, + "popularity": 630, + "codepoint": "1f922", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":sick:", ":nauseated:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f92e", + "version": 1, + "popularity": 629, + "codepoint": "1f92e", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":vomit:"], + "sizes_px": [] + }, + { + "name": "emoji_u1fae9", + "version": 1, + "popularity": 628, + "codepoint": "1fae9", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":tired:", ":bags-under-eyes:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f634", + "version": 1, + "popularity": 627, + "codepoint": "1f634", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":sleep:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f62a", + "version": 1, + "popularity": 626, + "codepoint": "1f62a", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":sleepy:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f927", + "version": 1, + "popularity": 625, + "codepoint": "1f927", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":sneeze:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f912", + "version": 1, + "popularity": 624, + "codepoint": "1f912", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":thermometer-face:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f915", + "version": 1, + "popularity": 623, + "codepoint": "1f915", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":bandage-face:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f637", + "version": 1, + "popularity": 622, + "codepoint": "1f637", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":mask:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f925", + "version": 1, + "popularity": 621, + "codepoint": "1f925", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":liar:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f607", + "version": 1, + "popularity": 620, + "codepoint": "1f607", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":halo:", ":innocent:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f920", + "version": 1, + "popularity": 619, + "codepoint": "1f920", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":cowboy:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f911", + "version": 1, + "popularity": 618, + "codepoint": "1f911", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":money-face:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f913", + "version": 1, + "popularity": 617, + "codepoint": "1f913", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":nerd-face:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f60e", + "version": 1, + "popularity": 616, + "codepoint": "1f60e", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":sunglasses-face:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f978", + "version": 1, + "popularity": 615, + "codepoint": "1f978", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":disguise:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f921", + "version": 1, + "popularity": 614, + "codepoint": "1f921", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":clown:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f4a9", + "version": 1, + "popularity": 613, + "codepoint": "1f4a9", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":poop:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f608", + "version": 1, + "popularity": 612, + "codepoint": "1f608", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":imp-smile:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f47f", + "version": 1, + "popularity": 611, + "codepoint": "1f47f", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":imp-frown:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f47b", + "version": 1, + "popularity": 610, + "codepoint": "1f47b", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":ghost:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f480", + "version": 1, + "popularity": 609, + "codepoint": "1f480", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":skull:"], + "sizes_px": [] + }, + { + "name": "emoji_u2603_fe0f", + "version": 1, + "popularity": 608, + "codepoint": "2603_fe0f", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":snowman-with-snow:"], + "sizes_px": [] + }, + { + "name": "emoji_u26c4", + "version": 1, + "popularity": 607, + "codepoint": "26c4", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":snowman:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f383", + "version": 1, + "popularity": 606, + "codepoint": "1f383", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":jack-o-lantern:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f916", + "version": 1, + "popularity": 605, + "codepoint": "1f916", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":robot:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f47d", + "version": 1, + "popularity": 604, + "codepoint": "1f47d", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":alien:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f47e", + "version": 1, + "popularity": 603, + "codepoint": "1f47e", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":alien-monster:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f31e", + "version": 1, + "popularity": 602, + "codepoint": "1f31e", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":sun-with-face:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f31b", + "version": 1, + "popularity": 601, + "codepoint": "1f31b", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":moon-face-first-quarter:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f31c", + "version": 1, + "popularity": 600, + "codepoint": "1f31c", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":moon-face-last-quarter:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f63a", + "version": 1, + "popularity": 599, + "codepoint": "1f63a", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":smiley-cat:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f638", + "version": 1, + "popularity": 598, + "codepoint": "1f638", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":smile-cat:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f639", + "version": 1, + "popularity": 597, + "codepoint": "1f639", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":joy-cat:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f63b", + "version": 1, + "popularity": 596, + "codepoint": "1f63b", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":heart-eyes-cat:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f63c", + "version": 1, + "popularity": 595, + "codepoint": "1f63c", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":smirk-cat:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f63d", + "version": 1, + "popularity": 594, + "codepoint": "1f63d", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":kissing-cat:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f640", + "version": 1, + "popularity": 593, + "codepoint": "1f640", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":scream-cat:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f63f", + "version": 1, + "popularity": 592, + "codepoint": "1f63f", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":crying-cat-face:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f63e", + "version": 1, + "popularity": 591, + "codepoint": "1f63e", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":pouting-cat:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f648", + "version": 1, + "popularity": 590, + "codepoint": "1f648", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":see-no-evil-monkey:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f649", + "version": 1, + "popularity": 589, + "codepoint": "1f649", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":hear-no-evil-monkey:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f64a", + "version": 1, + "popularity": 588, + "codepoint": "1f64a", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":speak-no-evil-monkey:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f31f", + "version": 1, + "popularity": 587, + "codepoint": "1f31f", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":glowing-star:"], + "sizes_px": [] + }, + { + "name": "emoji_u2728", + "version": 1, + "popularity": 586, + "codepoint": "2728", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":sparkles:"], + "sizes_px": [] + }, + { + "name": "emoji_u26a1", + "version": 1, + "popularity": 585, + "codepoint": "26a1", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":electricity:", ":zap:", ":lightning:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f4a5", + "version": 1, + "popularity": 584, + "codepoint": "1f4a5", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":collision:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f525", + "version": 1, + "popularity": 583, + "codepoint": "1f525", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":fire:", ":burn:", ":lit:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f4af", + "version": 1, + "popularity": 582, + "codepoint": "1f4af", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":100:", ":one-hundred:", ":hundred:", ":points:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f389", + "version": 1, + "popularity": 581, + "codepoint": "1f389", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":party-popper:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f38a", + "version": 1, + "popularity": 580, + "codepoint": "1f38a", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":confetti-ball:"], + "sizes_px": [] + }, + { + "name": "emoji_u2764_fe0f", + "version": 1, + "popularity": 579, + "codepoint": "2764_fe0f", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":red-heart:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f9e1", + "version": 1, + "popularity": 578, + "codepoint": "1f9e1", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":orange-heart:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f49b", + "version": 1, + "popularity": 577, + "codepoint": "1f49b", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":yellow-heart:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f49a", + "version": 1, + "popularity": 576, + "codepoint": "1f49a", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":green-heart:"], + "sizes_px": [] + }, + { + "name": "emoji_u1fa75", + "version": 1, + "popularity": 575, + "codepoint": "1fa75", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":light-blue-heart:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f499", + "version": 1, + "popularity": 574, + "codepoint": "1f499", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":blue-heart:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f49c", + "version": 1, + "popularity": 573, + "codepoint": "1f49c", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":purple-heart:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f90e", + "version": 1, + "popularity": 572, + "codepoint": "1f90e", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":brown-heart:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f5a4", + "version": 1, + "popularity": 571, + "codepoint": "1f5a4", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":black-heart:"], + "sizes_px": [] + }, + { + "name": "emoji_u1fa76", + "version": 1, + "popularity": 570, + "codepoint": "1fa76", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":grey-heart:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f90d", + "version": 1, + "popularity": 569, + "codepoint": "1f90d", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":white-heart:"], + "sizes_px": [] + }, + { + "name": "emoji_u1fa77", + "version": 1, + "popularity": 568, + "codepoint": "1fa77", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":pink-heart:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f498", + "version": 1, + "popularity": 567, + "codepoint": "1f498", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":cupid:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f49d", + "version": 1, + "popularity": 566, + "codepoint": "1f49d", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":gift-heart:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f496", + "version": 1, + "popularity": 565, + "codepoint": "1f496", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":sparkling-heart:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f497", + "version": 1, + "popularity": 564, + "codepoint": "1f497", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":heart-grow:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f493", + "version": 1, + "popularity": 563, + "codepoint": "1f493", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":beating-heart:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f49e", + "version": 1, + "popularity": 562, + "codepoint": "1f49e", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":revolving-hearts:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f495", + "version": 1, + "popularity": 561, + "codepoint": "1f495", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":two-hearts:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f48c", + "version": 1, + "popularity": 560, + "codepoint": "1f48c", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":love-letter:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f49f", + "version": 1, + "popularity": 559, + "codepoint": "1f49f", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":heart-box:"], + "sizes_px": [] + }, + { + "name": "emoji_u2763_fe0f", + "version": 1, + "popularity": 558, + "codepoint": "2763_fe0f", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":heart-exclamation-point:"], + "sizes_px": [] + }, + { + "name": "emoji_u2764_fe0f_200d_1fa79", + "version": 1, + "popularity": 557, + "codepoint": "2764_fe0f_200d_1fa79", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":bandaged-heart:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f494", + "version": 1, + "popularity": 556, + "codepoint": "1f494", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":broken-heart:"], + "sizes_px": [] + }, + { + "name": "emoji_u2764_fe0f_200d_1f525", + "version": 1, + "popularity": 555, + "codepoint": "2764_fe0f_200d_1f525", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":fire-heart:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f48b", + "version": 1, + "popularity": 554, + "codepoint": "1f48b", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":kiss:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f463", + "version": 1, + "popularity": 553, + "codepoint": "1f463", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":footprints:"], + "sizes_px": [] + }, + { + "name": "emoji_u1fac6", + "version": 1, + "popularity": 552, + "codepoint": "1fac6", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":fingerprint:"], + "sizes_px": [] + }, + { + "name": "emoji_u1fac0", + "version": 1, + "popularity": 551, + "codepoint": "1fac0", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":anatomical-heart:"], + "sizes_px": [] + }, + { + "name": "emoji_u1fa78", + "version": 1, + "popularity": 550, + "codepoint": "1fa78", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":blood:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f9a0", + "version": 1, + "popularity": 549, + "codepoint": "1f9a0", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":microbe:", ":virus:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f440", + "version": 1, + "popularity": 548, + "codepoint": "1f440", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":eyes:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f441_fe0f", + "version": 1, + "popularity": 547, + "codepoint": "1f441_fe0f", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":eye:"], + "sizes_px": [] + }, + { + "name": "emoji_u1fae6", + "version": 1, + "popularity": 546, + "codepoint": "1fae6", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":biting-lip:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f443", + "version": 1, + "popularity": 545, + "codepoint": "1f443", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":nose:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f443_1f3fb", + "version": 1, + "popularity": 544, + "codepoint": "1f443_1f3fb", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":nose:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f443_1f3fc", + "version": 1, + "popularity": 543, + "codepoint": "1f443_1f3fc", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":nose:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f443_1f3fd", + "version": 1, + "popularity": 542, + "codepoint": "1f443_1f3fd", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":nose:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f443_1f3fe", + "version": 1, + "popularity": 541, + "codepoint": "1f443_1f3fe", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":nose:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f443_1f3ff", + "version": 1, + "popularity": 540, + "codepoint": "1f443_1f3ff", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":nose:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f442", + "version": 1, + "popularity": 539, + "codepoint": "1f442", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":ear:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f442_1f3fb", + "version": 1, + "popularity": 538, + "codepoint": "1f442_1f3fb", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":ear:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f442_1f3fc", + "version": 1, + "popularity": 537, + "codepoint": "1f442_1f3fc", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":ear:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f442_1f3fd", + "version": 1, + "popularity": 536, + "codepoint": "1f442_1f3fd", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":ear:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f442_1f3fe", + "version": 1, + "popularity": 535, + "codepoint": "1f442_1f3fe", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":ear:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f442_1f3ff", + "version": 1, + "popularity": 534, + "codepoint": "1f442_1f3ff", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":ear:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f9bb", + "version": 1, + "popularity": 533, + "codepoint": "1f9bb", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":hearing-aid:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f9bb_1f3fb", + "version": 1, + "popularity": 532, + "codepoint": "1f9bb_1f3fb", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":hearing-aid:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f9bb_1f3fc", + "version": 1, + "popularity": 531, + "codepoint": "1f9bb_1f3fc", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":hearing-aid:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f9bb_1f3fd", + "version": 1, + "popularity": 530, + "codepoint": "1f9bb_1f3fd", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":hearing-aid:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f9bb_1f3fe", + "version": 1, + "popularity": 529, + "codepoint": "1f9bb_1f3fe", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":hearing-aid:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f9bb_1f3ff", + "version": 1, + "popularity": 528, + "codepoint": "1f9bb_1f3ff", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":hearing-aid:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f9b6", + "version": 1, + "popularity": 527, + "codepoint": "1f9b6", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":foot:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f9b6_1f3fb", + "version": 1, + "popularity": 526, + "codepoint": "1f9b6_1f3fb", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":foot:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f9b6_1f3fc", + "version": 1, + "popularity": 525, + "codepoint": "1f9b6_1f3fc", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":foot:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f9b6_1f3fd", + "version": 1, + "popularity": 524, + "codepoint": "1f9b6_1f3fd", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":foot:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f9b6_1f3fe", + "version": 1, + "popularity": 523, + "codepoint": "1f9b6_1f3fe", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":foot:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f9b6_1f3ff", + "version": 1, + "popularity": 522, + "codepoint": "1f9b6_1f3ff", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":foot:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f9b5", + "version": 1, + "popularity": 521, + "codepoint": "1f9b5", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":leg:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f9b5_1f3fb", + "version": 1, + "popularity": 520, + "codepoint": "1f9b5_1f3fb", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":leg:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f9b5_1f3fc", + "version": 1, + "popularity": 519, + "codepoint": "1f9b5_1f3fc", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":leg:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f9b5_1f3fd", + "version": 1, + "popularity": 518, + "codepoint": "1f9b5_1f3fd", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":leg:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f9b5_1f3fe", + "version": 1, + "popularity": 517, + "codepoint": "1f9b5_1f3fe", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":leg:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f9b5_1f3ff", + "version": 1, + "popularity": 516, + "codepoint": "1f9b5_1f3ff", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":leg:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f9bf", + "version": 1, + "popularity": 515, + "codepoint": "1f9bf", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":leg-mechanical:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f9be", + "version": 1, + "popularity": 514, + "codepoint": "1f9be", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":arm-mechanical:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f4aa", + "version": 1, + "popularity": 513, + "codepoint": "1f4aa", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":muscle:", ":flex:", ":bicep:", ":strong:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f4aa_1f3fb", + "version": 1, + "popularity": 512, + "codepoint": "1f4aa_1f3fb", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":muscle:", ":flex:", ":bicep:", ":strong:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f4aa_1f3fc", + "version": 1, + "popularity": 511, + "codepoint": "1f4aa_1f3fc", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":muscle:", ":flex:", ":bicep:", ":strong:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f4aa_1f3fd", + "version": 1, + "popularity": 510, + "codepoint": "1f4aa_1f3fd", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":muscle:", ":flex:", ":bicep:", ":strong:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f4aa_1f3fe", + "version": 1, + "popularity": 509, + "codepoint": "1f4aa_1f3fe", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":muscle:", ":flex:", ":bicep:", ":strong:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f4aa_1f3ff", + "version": 1, + "popularity": 508, + "codepoint": "1f4aa_1f3ff", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":muscle:", ":flex:", ":bicep:", ":strong:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f44f", + "version": 1, + "popularity": 507, + "codepoint": "1f44f", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":clap:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f44f_1f3fb", + "version": 1, + "popularity": 506, + "codepoint": "1f44f_1f3fb", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":clap:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f44f_1f3fc", + "version": 1, + "popularity": 505, + "codepoint": "1f44f_1f3fc", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":clap:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f44f_1f3fd", + "version": 1, + "popularity": 504, + "codepoint": "1f44f_1f3fd", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":clap:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f44f_1f3fe", + "version": 1, + "popularity": 503, + "codepoint": "1f44f_1f3fe", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":clap:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f44f_1f3ff", + "version": 1, + "popularity": 502, + "codepoint": "1f44f_1f3ff", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":clap:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f44d", + "version": 1, + "popularity": 501, + "codepoint": "1f44d", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":thumbs-up:", ":+1:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f44d_1f3fb", + "version": 1, + "popularity": 500, + "codepoint": "1f44d_1f3fb", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":thumbs-up:", ":+1:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f44d_1f3fc", + "version": 1, + "popularity": 499, + "codepoint": "1f44d_1f3fc", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":thumbs-up:", ":+1:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f44d_1f3fd", + "version": 1, + "popularity": 498, + "codepoint": "1f44d_1f3fd", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":thumbs-up:", ":+1:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f44d_1f3fe", + "version": 1, + "popularity": 497, + "codepoint": "1f44d_1f3fe", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":thumbs-up:", ":+1:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f44d_1f3ff", + "version": 1, + "popularity": 496, + "codepoint": "1f44d_1f3ff", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":thumbs-up:", ":+1:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f44e", + "version": 1, + "popularity": 495, + "codepoint": "1f44e", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":thumbs-down:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f44e_1f3fb", + "version": 1, + "popularity": 494, + "codepoint": "1f44e_1f3fb", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":thumbs-down:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f44e_1f3fc", + "version": 1, + "popularity": 493, + "codepoint": "1f44e_1f3fc", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":thumbs-down:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f44e_1f3fd", + "version": 1, + "popularity": 492, + "codepoint": "1f44e_1f3fd", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":thumbs-down:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f44e_1f3fe", + "version": 1, + "popularity": 491, + "codepoint": "1f44e_1f3fe", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":thumbs-down:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f44e_1f3ff", + "version": 1, + "popularity": 490, + "codepoint": "1f44e_1f3ff", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":thumbs-down:"], + "sizes_px": [] + }, + { + "name": "emoji_u1faf6", + "version": 1, + "popularity": 489, + "codepoint": "1faf6", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":heart-hands:"], + "sizes_px": [] + }, + { + "name": "emoji_u1faf6_1f3fb", + "version": 1, + "popularity": 488, + "codepoint": "1faf6_1f3fb", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":heart-hands:"], + "sizes_px": [] + }, + { + "name": "emoji_u1faf6_1f3fc", + "version": 1, + "popularity": 487, + "codepoint": "1faf6_1f3fc", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":heart-hands:"], + "sizes_px": [] + }, + { + "name": "emoji_u1faf6_1f3fd", + "version": 1, + "popularity": 486, + "codepoint": "1faf6_1f3fd", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":heart-hands:"], + "sizes_px": [] + }, + { + "name": "emoji_u1faf6_1f3fe", + "version": 1, + "popularity": 485, + "codepoint": "1faf6_1f3fe", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":heart-hands:"], + "sizes_px": [] + }, + { + "name": "emoji_u1faf6_1f3ff", + "version": 1, + "popularity": 484, + "codepoint": "1faf6_1f3ff", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":heart-hands:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f64c", + "version": 1, + "popularity": 483, + "codepoint": "1f64c", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":raising-hands:", ":hooray:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f64c_1f3fb", + "version": 1, + "popularity": 482, + "codepoint": "1f64c_1f3fb", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":raising-hands:", ":hooray:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f64c_1f3fc", + "version": 1, + "popularity": 481, + "codepoint": "1f64c_1f3fc", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":raising-hands:", ":hooray:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f64c_1f3fd", + "version": 1, + "popularity": 480, + "codepoint": "1f64c_1f3fd", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":raising-hands:", ":hooray:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f64c_1f3fe", + "version": 1, + "popularity": 479, + "codepoint": "1f64c_1f3fe", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":raising-hands:", ":hooray:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f64c_1f3ff", + "version": 1, + "popularity": 478, + "codepoint": "1f64c_1f3ff", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":raising-hands:", ":hooray:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f450", + "version": 1, + "popularity": 477, + "codepoint": "1f450", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":open-hands:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f450_1f3fb", + "version": 1, + "popularity": 476, + "codepoint": "1f450_1f3fb", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":open-hands:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f450_1f3fc", + "version": 1, + "popularity": 475, + "codepoint": "1f450_1f3fc", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":open-hands:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f450_1f3fd", + "version": 1, + "popularity": 474, + "codepoint": "1f450_1f3fd", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":open-hands:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f450_1f3fe", + "version": 1, + "popularity": 473, + "codepoint": "1f450_1f3fe", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":open-hands:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f450_1f3ff", + "version": 1, + "popularity": 472, + "codepoint": "1f450_1f3ff", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":open-hands:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f932", + "version": 1, + "popularity": 471, + "codepoint": "1f932", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":palms-up:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f932_1f3fb", + "version": 1, + "popularity": 470, + "codepoint": "1f932_1f3fb", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":palms-up:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f932_1f3fc", + "version": 1, + "popularity": 469, + "codepoint": "1f932_1f3fc", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":palms-up:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f932_1f3fd", + "version": 1, + "popularity": 468, + "codepoint": "1f932_1f3fd", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":palms-up:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f932_1f3fe", + "version": 1, + "popularity": 467, + "codepoint": "1f932_1f3fe", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":palms-up:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f932_1f3ff", + "version": 1, + "popularity": 466, + "codepoint": "1f932_1f3ff", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":palms-up:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f91c", + "version": 1, + "popularity": 465, + "codepoint": "1f91c", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":fist-rightwards:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f91c_1f3fb", + "version": 1, + "popularity": 464, + "codepoint": "1f91c_1f3fb", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":fist-rightwards:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f91c_1f3fc", + "version": 1, + "popularity": 463, + "codepoint": "1f91c_1f3fc", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":fist-rightwards:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f91c_1f3fd", + "version": 1, + "popularity": 462, + "codepoint": "1f91c_1f3fd", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":fist-rightwards:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f91c_1f3fe", + "version": 1, + "popularity": 461, + "codepoint": "1f91c_1f3fe", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":fist-rightwards:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f91c_1f3ff", + "version": 1, + "popularity": 460, + "codepoint": "1f91c_1f3ff", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":fist-rightwards:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f91b", + "version": 1, + "popularity": 459, + "codepoint": "1f91b", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":fist-leftwards:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f91b_1f3fb", + "version": 1, + "popularity": 458, + "codepoint": "1f91b_1f3fb", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":fist-leftwards:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f91b_1f3fc", + "version": 1, + "popularity": 457, + "codepoint": "1f91b_1f3fc", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":fist-leftwards:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f91b_1f3fd", + "version": 1, + "popularity": 456, + "codepoint": "1f91b_1f3fd", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":fist-leftwards:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f91b_1f3fe", + "version": 1, + "popularity": 455, + "codepoint": "1f91b_1f3fe", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":fist-leftwards:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f91b_1f3ff", + "version": 1, + "popularity": 454, + "codepoint": "1f91b_1f3ff", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":fist-leftwards:"], + "sizes_px": [] + }, + { + "name": "emoji_u270a", + "version": 1, + "popularity": 453, + "codepoint": "270a", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":raised-fist:"], + "sizes_px": [] + }, + { + "name": "emoji_u270a_1f3fb", + "version": 1, + "popularity": 452, + "codepoint": "270a_1f3fb", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":raised-fist:"], + "sizes_px": [] + }, + { + "name": "emoji_u270a_1f3fc", + "version": 1, + "popularity": 451, + "codepoint": "270a_1f3fc", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":raised-fist:"], + "sizes_px": [] + }, + { + "name": "emoji_u270a_1f3fd", + "version": 1, + "popularity": 450, + "codepoint": "270a_1f3fd", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":raised-fist:"], + "sizes_px": [] + }, + { + "name": "emoji_u270a_1f3fe", + "version": 1, + "popularity": 449, + "codepoint": "270a_1f3fe", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":raised-fist:"], + "sizes_px": [] + }, + { + "name": "emoji_u270a_1f3ff", + "version": 1, + "popularity": 448, + "codepoint": "270a_1f3ff", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":raised-fist:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f44a", + "version": 1, + "popularity": 447, + "codepoint": "1f44a", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":fist:", ":bump:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f44a_1f3fb", + "version": 1, + "popularity": 446, + "codepoint": "1f44a_1f3fb", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":fist:", ":bump:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f44a_1f3fc", + "version": 1, + "popularity": 445, + "codepoint": "1f44a_1f3fc", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":fist:", ":bump:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f44a_1f3fd", + "version": 1, + "popularity": 444, + "codepoint": "1f44a_1f3fd", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":fist:", ":bump:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f44a_1f3fe", + "version": 1, + "popularity": 443, + "codepoint": "1f44a_1f3fe", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":fist:", ":bump:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f44a_1f3ff", + "version": 1, + "popularity": 442, + "codepoint": "1f44a_1f3ff", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":fist:", ":bump:"], + "sizes_px": [] + }, + { + "name": "emoji_u1faf3", + "version": 1, + "popularity": 441, + "codepoint": "1faf3", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":palm-down:", ":drop:"], + "sizes_px": [] + }, + { + "name": "emoji_u1faf3_1f3fb", + "version": 1, + "popularity": 440, + "codepoint": "1faf3_1f3fb", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":palm-down:", ":drop:"], + "sizes_px": [] + }, + { + "name": "emoji_u1faf3_1f3fc", + "version": 1, + "popularity": 439, + "codepoint": "1faf3_1f3fc", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":palm-down:", ":drop:"], + "sizes_px": [] + }, + { + "name": "emoji_u1faf3_1f3fd", + "version": 1, + "popularity": 438, + "codepoint": "1faf3_1f3fd", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":palm-down:", ":drop:"], + "sizes_px": [] + }, + { + "name": "emoji_u1faf3_1f3fe", + "version": 1, + "popularity": 437, + "codepoint": "1faf3_1f3fe", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":palm-down:", ":drop:"], + "sizes_px": [] + }, + { + "name": "emoji_u1faf3_1f3ff", + "version": 1, + "popularity": 436, + "codepoint": "1faf3_1f3ff", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":palm-down:", ":drop:"], + "sizes_px": [] + }, + { + "name": "emoji_u1faf4", + "version": 1, + "popularity": 435, + "codepoint": "1faf4", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":palm-up:", ":throw:"], + "sizes_px": [] + }, + { + "name": "emoji_u1faf4_1f3fb", + "version": 1, + "popularity": 434, + "codepoint": "1faf4_1f3fb", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":palm-up:", ":throw:"], + "sizes_px": [] + }, + { + "name": "emoji_u1faf4_1f3fc", + "version": 1, + "popularity": 433, + "codepoint": "1faf4_1f3fc", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":palm-up:", ":throw:"], + "sizes_px": [] + }, + { + "name": "emoji_u1faf4_1f3fd", + "version": 1, + "popularity": 432, + "codepoint": "1faf4_1f3fd", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":palm-up:", ":throw:"], + "sizes_px": [] + }, + { + "name": "emoji_u1faf4_1f3fe", + "version": 1, + "popularity": 431, + "codepoint": "1faf4_1f3fe", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":palm-up:", ":throw:"], + "sizes_px": [] + }, + { + "name": "emoji_u1faf4_1f3ff", + "version": 1, + "popularity": 430, + "codepoint": "1faf4_1f3ff", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":palm-up:", ":throw:"], + "sizes_px": [] + }, + { + "name": "emoji_u1faf1", + "version": 1, + "popularity": 429, + "codepoint": "1faf1", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":rightwards-hand:"], + "sizes_px": [] + }, + { + "name": "emoji_u1faf1_1f3fb", + "version": 1, + "popularity": 428, + "codepoint": "1faf1_1f3fb", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":rightwards-hand:"], + "sizes_px": [] + }, + { + "name": "emoji_u1faf1_1f3fc", + "version": 1, + "popularity": 427, + "codepoint": "1faf1_1f3fc", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":rightwards-hand:"], + "sizes_px": [] + }, + { + "name": "emoji_u1faf1_1f3fd", + "version": 1, + "popularity": 426, + "codepoint": "1faf1_1f3fd", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":rightwards-hand:"], + "sizes_px": [] + }, + { + "name": "emoji_u1faf1_1f3fe", + "version": 1, + "popularity": 425, + "codepoint": "1faf1_1f3fe", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":rightwards-hand:"], + "sizes_px": [] + }, + { + "name": "emoji_u1faf1_1f3ff", + "version": 1, + "popularity": 424, + "codepoint": "1faf1_1f3ff", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":rightwards-hand:"], + "sizes_px": [] + }, + { + "name": "emoji_u1faf2", + "version": 1, + "popularity": 423, + "codepoint": "1faf2", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":leftwards-hand:"], + "sizes_px": [] + }, + { + "name": "emoji_u1faf2_1f3fb", + "version": 1, + "popularity": 422, + "codepoint": "1faf2_1f3fb", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":leftwards-hand:"], + "sizes_px": [] + }, + { + "name": "emoji_u1faf2_1f3fc", + "version": 1, + "popularity": 421, + "codepoint": "1faf2_1f3fc", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":leftwards-hand:"], + "sizes_px": [] + }, + { + "name": "emoji_u1faf2_1f3fd", + "version": 1, + "popularity": 420, + "codepoint": "1faf2_1f3fd", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":leftwards-hand:"], + "sizes_px": [] + }, + { + "name": "emoji_u1faf2_1f3fe", + "version": 1, + "popularity": 419, + "codepoint": "1faf2_1f3fe", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":leftwards-hand:"], + "sizes_px": [] + }, + { + "name": "emoji_u1faf2_1f3ff", + "version": 1, + "popularity": 418, + "codepoint": "1faf2_1f3ff", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":leftwards-hand:"], + "sizes_px": [] + }, + { + "name": "emoji_u1faf8", + "version": 1, + "popularity": 417, + "codepoint": "1faf8", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":push-rightwards:"], + "sizes_px": [] + }, + { + "name": "emoji_u1faf8_1f3fb", + "version": 1, + "popularity": 416, + "codepoint": "1faf8_1f3fb", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":push-rightwards:"], + "sizes_px": [] + }, + { + "name": "emoji_u1faf8_1f3fc", + "version": 1, + "popularity": 415, + "codepoint": "1faf8_1f3fc", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":push-rightwards:"], + "sizes_px": [] + }, + { + "name": "emoji_u1faf8_1f3fd", + "version": 1, + "popularity": 414, + "codepoint": "1faf8_1f3fd", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":push-rightwards:"], + "sizes_px": [] + }, + { + "name": "emoji_u1faf8_1f3fe", + "version": 1, + "popularity": 413, + "codepoint": "1faf8_1f3fe", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":push-rightwards:"], + "sizes_px": [] + }, + { + "name": "emoji_u1faf8_1f3ff", + "version": 1, + "popularity": 412, + "codepoint": "1faf8_1f3ff", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":push-rightwards:"], + "sizes_px": [] + }, + { + "name": "emoji_u1faf7", + "version": 1, + "popularity": 411, + "codepoint": "1faf7", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":push-leftwards:"], + "sizes_px": [] + }, + { + "name": "emoji_u1faf7_1f3fb", + "version": 1, + "popularity": 410, + "codepoint": "1faf7_1f3fb", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":push-leftwards:"], + "sizes_px": [] + }, + { + "name": "emoji_u1faf7_1f3fc", + "version": 1, + "popularity": 409, + "codepoint": "1faf7_1f3fc", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":push-leftwards:"], + "sizes_px": [] + }, + { + "name": "emoji_u1faf7_1f3fd", + "version": 1, + "popularity": 408, + "codepoint": "1faf7_1f3fd", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":push-leftwards:"], + "sizes_px": [] + }, + { + "name": "emoji_u1faf7_1f3fe", + "version": 1, + "popularity": 407, + "codepoint": "1faf7_1f3fe", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":push-leftwards:"], + "sizes_px": [] + }, + { + "name": "emoji_u1faf7_1f3ff", + "version": 1, + "popularity": 406, + "codepoint": "1faf7_1f3ff", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":push-leftwards:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f44b", + "version": 1, + "popularity": 405, + "codepoint": "1f44b", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":wave:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f44b_1f3fb", + "version": 1, + "popularity": 404, + "codepoint": "1f44b_1f3fb", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":wave:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f44b_1f3fc", + "version": 1, + "popularity": 403, + "codepoint": "1f44b_1f3fc", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":wave:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f44b_1f3fd", + "version": 1, + "popularity": 402, + "codepoint": "1f44b_1f3fd", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":wave:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f44b_1f3fe", + "version": 1, + "popularity": 401, + "codepoint": "1f44b_1f3fe", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":wave:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f44b_1f3ff", + "version": 1, + "popularity": 400, + "codepoint": "1f44b_1f3ff", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":wave:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f91a", + "version": 1, + "popularity": 399, + "codepoint": "1f91a", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":back-hand:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f91a_1f3fb", + "version": 1, + "popularity": 398, + "codepoint": "1f91a_1f3fb", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":back-hand:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f91a_1f3fc", + "version": 1, + "popularity": 397, + "codepoint": "1f91a_1f3fc", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":back-hand:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f91a_1f3fd", + "version": 1, + "popularity": 396, + "codepoint": "1f91a_1f3fd", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":back-hand:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f91a_1f3fe", + "version": 1, + "popularity": 395, + "codepoint": "1f91a_1f3fe", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":back-hand:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f91a_1f3ff", + "version": 1, + "popularity": 394, + "codepoint": "1f91a_1f3ff", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":back-hand:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f590_fe0f", + "version": 1, + "popularity": 393, + "codepoint": "1f590_fe0f", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":palm:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f590_1f3fb", + "version": 1, + "popularity": 392, + "codepoint": "1f590_1f3fb", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":palm:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f590_1f3fc", + "version": 1, + "popularity": 391, + "codepoint": "1f590_1f3fc", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":palm:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f590_1f3fd", + "version": 1, + "popularity": 390, + "codepoint": "1f590_1f3fd", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":palm:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f590_1f3fe", + "version": 1, + "popularity": 389, + "codepoint": "1f590_1f3fe", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":palm:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f590_1f3ff", + "version": 1, + "popularity": 388, + "codepoint": "1f590_1f3ff", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":palm:"], + "sizes_px": [] + }, + { + "name": "emoji_u270b", + "version": 1, + "popularity": 387, + "codepoint": "270b", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":raised-hand:"], + "sizes_px": [] + }, + { + "name": "emoji_u270b_1f3fb", + "version": 1, + "popularity": 386, + "codepoint": "270b_1f3fb", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":raised-hand:"], + "sizes_px": [] + }, + { + "name": "emoji_u270b_1f3fc", + "version": 1, + "popularity": 385, + "codepoint": "270b_1f3fc", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":raised-hand:"], + "sizes_px": [] + }, + { + "name": "emoji_u270b_1f3fd", + "version": 1, + "popularity": 384, + "codepoint": "270b_1f3fd", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":raised-hand:"], + "sizes_px": [] + }, + { + "name": "emoji_u270b_1f3fe", + "version": 1, + "popularity": 383, + "codepoint": "270b_1f3fe", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":raised-hand:"], + "sizes_px": [] + }, + { + "name": "emoji_u270b_1f3ff", + "version": 1, + "popularity": 382, + "codepoint": "270b_1f3ff", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":raised-hand:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f596", + "version": 1, + "popularity": 381, + "codepoint": "1f596", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":vulcan:", ":prosper:", ":spock:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f596_1f3fb", + "version": 1, + "popularity": 380, + "codepoint": "1f596_1f3fb", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":vulcan:", ":prosper:", ":spock:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f596_1f3fc", + "version": 1, + "popularity": 379, + "codepoint": "1f596_1f3fc", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":vulcan:", ":prosper:", ":spock:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f596_1f3fd", + "version": 1, + "popularity": 378, + "codepoint": "1f596_1f3fd", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":vulcan:", ":prosper:", ":spock:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f596_1f3fe", + "version": 1, + "popularity": 377, + "codepoint": "1f596_1f3fe", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":vulcan:", ":prosper:", ":spock:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f596_1f3ff", + "version": 1, + "popularity": 376, + "codepoint": "1f596_1f3ff", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":vulcan:", ":prosper:", ":spock:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f91f", + "version": 1, + "popularity": 375, + "codepoint": "1f91f", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":love-you-gesture:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f91f_1f3fb", + "version": 1, + "popularity": 374, + "codepoint": "1f91f_1f3fb", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":love-you-gesture:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f91f_1f3fc", + "version": 1, + "popularity": 373, + "codepoint": "1f91f_1f3fc", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":love-you-gesture:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f91f_1f3fd", + "version": 1, + "popularity": 372, + "codepoint": "1f91f_1f3fd", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":love-you-gesture:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f91f_1f3fe", + "version": 1, + "popularity": 371, + "codepoint": "1f91f_1f3fe", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":love-you-gesture:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f91f_1f3ff", + "version": 1, + "popularity": 370, + "codepoint": "1f91f_1f3ff", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":love-you-gesture:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f918", + "version": 1, + "popularity": 369, + "codepoint": "1f918", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":metal:", ":horns:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f918_1f3fb", + "version": 1, + "popularity": 368, + "codepoint": "1f918_1f3fb", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":metal:", ":horns:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f918_1f3fc", + "version": 1, + "popularity": 367, + "codepoint": "1f918_1f3fc", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":metal:", ":horns:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f918_1f3fd", + "version": 1, + "popularity": 366, + "codepoint": "1f918_1f3fd", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":metal:", ":horns:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f918_1f3fe", + "version": 1, + "popularity": 365, + "codepoint": "1f918_1f3fe", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":metal:", ":horns:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f918_1f3ff", + "version": 1, + "popularity": 364, + "codepoint": "1f918_1f3ff", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":metal:", ":horns:"], + "sizes_px": [] + }, + { + "name": "emoji_u270c_fe0f", + "version": 1, + "popularity": 363, + "codepoint": "270c_fe0f", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":victory:", ":v:", ":peace-hand:"], + "sizes_px": [] + }, + { + "name": "emoji_u270c_1f3fb", + "version": 1, + "popularity": 362, + "codepoint": "270c_1f3fb", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":victory:", ":v:", ":peace-hand:"], + "sizes_px": [] + }, + { + "name": "emoji_u270c_1f3fc", + "version": 1, + "popularity": 361, + "codepoint": "270c_1f3fc", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":victory:", ":v:", ":peace-hand:"], + "sizes_px": [] + }, + { + "name": "emoji_u270c_1f3fd", + "version": 1, + "popularity": 360, + "codepoint": "270c_1f3fd", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":victory:", ":v:", ":peace-hand:"], + "sizes_px": [] + }, + { + "name": "emoji_u270c_1f3fe", + "version": 1, + "popularity": 359, + "codepoint": "270c_1f3fe", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":victory:", ":v:", ":peace-hand:"], + "sizes_px": [] + }, + { + "name": "emoji_u270c_1f3ff", + "version": 1, + "popularity": 358, + "codepoint": "270c_1f3ff", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":victory:", ":v:", ":peace-hand:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f91e", + "version": 1, + "popularity": 357, + "codepoint": "1f91e", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":crossed-fingers:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f91e_1f3fb", + "version": 1, + "popularity": 356, + "codepoint": "1f91e_1f3fb", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":crossed-fingers:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f91e_1f3fc", + "version": 1, + "popularity": 355, + "codepoint": "1f91e_1f3fc", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":crossed-fingers:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f91e_1f3fd", + "version": 1, + "popularity": 354, + "codepoint": "1f91e_1f3fd", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":crossed-fingers:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f91e_1f3fe", + "version": 1, + "popularity": 353, + "codepoint": "1f91e_1f3fe", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":crossed-fingers:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f91e_1f3ff", + "version": 1, + "popularity": 352, + "codepoint": "1f91e_1f3ff", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":crossed-fingers:"], + "sizes_px": [] + }, + { + "name": "emoji_u1faf0", + "version": 1, + "popularity": 351, + "codepoint": "1faf0", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":hand-with-index-finger-and-thumb-crossed:", ":snap:", ":finger-heart:"], + "sizes_px": [] + }, + { + "name": "emoji_u1faf0_1f3fb", + "version": 1, + "popularity": 350, + "codepoint": "1faf0_1f3fb", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":hand-with-index-finger-and-thumb-crossed:", ":snap:", ":finger-heart:"], + "sizes_px": [] + }, + { + "name": "emoji_u1faf0_1f3fc", + "version": 1, + "popularity": 349, + "codepoint": "1faf0_1f3fc", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":hand-with-index-finger-and-thumb-crossed:", ":snap:", ":finger-heart:"], + "sizes_px": [] + }, + { + "name": "emoji_u1faf0_1f3fd", + "version": 1, + "popularity": 348, + "codepoint": "1faf0_1f3fd", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":hand-with-index-finger-and-thumb-crossed:", ":snap:", ":finger-heart:"], + "sizes_px": [] + }, + { + "name": "emoji_u1faf0_1f3fe", + "version": 1, + "popularity": 347, + "codepoint": "1faf0_1f3fe", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":hand-with-index-finger-and-thumb-crossed:", ":snap:", ":finger-heart:"], + "sizes_px": [] + }, + { + "name": "emoji_u1faf0_1f3ff", + "version": 1, + "popularity": 346, + "codepoint": "1faf0_1f3ff", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":hand-with-index-finger-and-thumb-crossed:", ":snap:", ":finger-heart:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f919", + "version": 1, + "popularity": 345, + "codepoint": "1f919", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":call-me-hand:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f919_1f3fb", + "version": 1, + "popularity": 344, + "codepoint": "1f919_1f3fb", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":call-me-hand:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f919_1f3fc", + "version": 1, + "popularity": 343, + "codepoint": "1f919_1f3fc", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":call-me-hand:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f919_1f3fd", + "version": 1, + "popularity": 342, + "codepoint": "1f919_1f3fd", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":call-me-hand:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f919_1f3fe", + "version": 1, + "popularity": 341, + "codepoint": "1f919_1f3fe", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":call-me-hand:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f919_1f3ff", + "version": 1, + "popularity": 340, + "codepoint": "1f919_1f3ff", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":call-me-hand:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f90c", + "version": 1, + "popularity": 339, + "codepoint": "1f90c", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":pinched-fingers:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f90c_1f3fb", + "version": 1, + "popularity": 338, + "codepoint": "1f90c_1f3fb", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":pinched-fingers:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f90c_1f3fc", + "version": 1, + "popularity": 337, + "codepoint": "1f90c_1f3fc", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":pinched-fingers:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f90c_1f3fd", + "version": 1, + "popularity": 336, + "codepoint": "1f90c_1f3fd", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":pinched-fingers:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f90c_1f3fe", + "version": 1, + "popularity": 335, + "codepoint": "1f90c_1f3fe", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":pinched-fingers:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f90c_1f3ff", + "version": 1, + "popularity": 334, + "codepoint": "1f90c_1f3ff", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":pinched-fingers:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f90f", + "version": 1, + "popularity": 333, + "codepoint": "1f90f", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":pinch:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f90f_1f3fb", + "version": 1, + "popularity": 332, + "codepoint": "1f90f_1f3fb", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":pinch:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f90f_1f3fc", + "version": 1, + "popularity": 331, + "codepoint": "1f90f_1f3fc", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":pinch:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f90f_1f3fd", + "version": 1, + "popularity": 330, + "codepoint": "1f90f_1f3fd", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":pinch:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f90f_1f3fe", + "version": 1, + "popularity": 329, + "codepoint": "1f90f_1f3fe", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":pinch:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f90f_1f3ff", + "version": 1, + "popularity": 328, + "codepoint": "1f90f_1f3ff", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":pinch:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f44c", + "version": 1, + "popularity": 327, + "codepoint": "1f44c", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":ok:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f44c_1f3fb", + "version": 1, + "popularity": 326, + "codepoint": "1f44c_1f3fb", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":ok:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f44c_1f3fc", + "version": 1, + "popularity": 325, + "codepoint": "1f44c_1f3fc", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":ok:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f44c_1f3fd", + "version": 1, + "popularity": 324, + "codepoint": "1f44c_1f3fd", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":ok:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f44c_1f3fe", + "version": 1, + "popularity": 323, + "codepoint": "1f44c_1f3fe", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":ok:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f44c_1f3ff", + "version": 1, + "popularity": 322, + "codepoint": "1f44c_1f3ff", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":ok:"], + "sizes_px": [] + }, + { + "name": "emoji_u1faf5", + "version": 1, + "popularity": 321, + "codepoint": "1faf5", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":pointing:"], + "sizes_px": [] + }, + { + "name": "emoji_u1faf5_1f3fb", + "version": 1, + "popularity": 320, + "codepoint": "1faf5_1f3fb", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":pointing:"], + "sizes_px": [] + }, + { + "name": "emoji_u1faf5_1f3fc", + "version": 1, + "popularity": 319, + "codepoint": "1faf5_1f3fc", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":pointing:"], + "sizes_px": [] + }, + { + "name": "emoji_u1faf5_1f3fd", + "version": 1, + "popularity": 318, + "codepoint": "1faf5_1f3fd", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":pointing:"], + "sizes_px": [] + }, + { + "name": "emoji_u1faf5_1f3fe", + "version": 1, + "popularity": 317, + "codepoint": "1faf5_1f3fe", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":pointing:"], + "sizes_px": [] + }, + { + "name": "emoji_u1faf5_1f3ff", + "version": 1, + "popularity": 316, + "codepoint": "1faf5_1f3ff", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":pointing:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f449", + "version": 1, + "popularity": 315, + "codepoint": "1f449", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":point-right:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f449_1f3fb", + "version": 1, + "popularity": 314, + "codepoint": "1f449_1f3fb", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":point-right:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f449_1f3fc", + "version": 1, + "popularity": 313, + "codepoint": "1f449_1f3fc", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":point-right:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f449_1f3fd", + "version": 1, + "popularity": 312, + "codepoint": "1f449_1f3fd", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":point-right:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f449_1f3fe", + "version": 1, + "popularity": 311, + "codepoint": "1f449_1f3fe", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":point-right:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f449_1f3ff", + "version": 1, + "popularity": 310, + "codepoint": "1f449_1f3ff", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":point-right:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f448", + "version": 1, + "popularity": 309, + "codepoint": "1f448", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":point-left:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f448_1f3fb", + "version": 1, + "popularity": 308, + "codepoint": "1f448_1f3fb", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":point-left:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f448_1f3fc", + "version": 1, + "popularity": 307, + "codepoint": "1f448_1f3fc", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":point-left:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f448_1f3fd", + "version": 1, + "popularity": 306, + "codepoint": "1f448_1f3fd", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":point-left:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f448_1f3fe", + "version": 1, + "popularity": 305, + "codepoint": "1f448_1f3fe", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":point-left:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f448_1f3ff", + "version": 1, + "popularity": 304, + "codepoint": "1f448_1f3ff", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":point-left:"], + "sizes_px": [] + }, + { + "name": "emoji_u261d_fe0f", + "version": 1, + "popularity": 303, + "codepoint": "261d_fe0f", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":index-finger:"], + "sizes_px": [] + }, + { + "name": "emoji_u261d_1f3fb", + "version": 1, + "popularity": 302, + "codepoint": "261d_1f3fb", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":index-finger:"], + "sizes_px": [] + }, + { + "name": "emoji_u261d_1f3fc", + "version": 1, + "popularity": 301, + "codepoint": "261d_1f3fc", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":index-finger:"], + "sizes_px": [] + }, + { + "name": "emoji_u261d_1f3fd", + "version": 1, + "popularity": 300, + "codepoint": "261d_1f3fd", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":index-finger:"], + "sizes_px": [] + }, + { + "name": "emoji_u261d_1f3fe", + "version": 1, + "popularity": 299, + "codepoint": "261d_1f3fe", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":index-finger:"], + "sizes_px": [] + }, + { + "name": "emoji_u261d_1f3ff", + "version": 1, + "popularity": 298, + "codepoint": "261d_1f3ff", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":index-finger:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f446", + "version": 1, + "popularity": 297, + "codepoint": "1f446", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":point-up:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f446_1f3fb", + "version": 1, + "popularity": 296, + "codepoint": "1f446_1f3fb", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":point-up:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f446_1f3fc", + "version": 1, + "popularity": 295, + "codepoint": "1f446_1f3fc", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":point-up:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f446_1f3fd", + "version": 1, + "popularity": 294, + "codepoint": "1f446_1f3fd", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":point-up:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f446_1f3fe", + "version": 1, + "popularity": 293, + "codepoint": "1f446_1f3fe", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":point-up:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f446_1f3ff", + "version": 1, + "popularity": 292, + "codepoint": "1f446_1f3ff", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":point-up:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f447", + "version": 1, + "popularity": 291, + "codepoint": "1f447", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":point-down:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f447_1f3fb", + "version": 1, + "popularity": 290, + "codepoint": "1f447_1f3fb", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":point-down:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f447_1f3fc", + "version": 1, + "popularity": 289, + "codepoint": "1f447_1f3fc", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":point-down:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f447_1f3fd", + "version": 1, + "popularity": 288, + "codepoint": "1f447_1f3fd", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":point-down:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f447_1f3fe", + "version": 1, + "popularity": 287, + "codepoint": "1f447_1f3fe", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":point-down:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f447_1f3ff", + "version": 1, + "popularity": 286, + "codepoint": "1f447_1f3ff", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":point-down:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f595", + "version": 1, + "popularity": 285, + "codepoint": "1f595", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":middle-finger:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f595_1f3fb", + "version": 1, + "popularity": 284, + "codepoint": "1f595_1f3fb", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":middle-finger:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f595_1f3fc", + "version": 1, + "popularity": 283, + "codepoint": "1f595_1f3fc", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":middle-finger:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f595_1f3fd", + "version": 1, + "popularity": 282, + "codepoint": "1f595_1f3fd", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":middle-finger:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f595_1f3fe", + "version": 1, + "popularity": 281, + "codepoint": "1f595_1f3fe", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":middle-finger:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f595_1f3ff", + "version": 1, + "popularity": 280, + "codepoint": "1f595_1f3ff", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":middle-finger:"], + "sizes_px": [] + }, + { + "name": "emoji_u270d_fe0f", + "version": 1, + "popularity": 279, + "codepoint": "270d_fe0f", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":writing-hand:"], + "sizes_px": [] + }, + { + "name": "emoji_u270d_1f3fb", + "version": 1, + "popularity": 278, + "codepoint": "270d_1f3fb", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":writing-hand:"], + "sizes_px": [] + }, + { + "name": "emoji_u270d_1f3fc", + "version": 1, + "popularity": 277, + "codepoint": "270d_1f3fc", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":writing-hand:"], + "sizes_px": [] + }, + { + "name": "emoji_u270d_1f3fd", + "version": 1, + "popularity": 276, + "codepoint": "270d_1f3fd", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":writing-hand:"], + "sizes_px": [] + }, + { + "name": "emoji_u270d_1f3fe", + "version": 1, + "popularity": 275, + "codepoint": "270d_1f3fe", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":writing-hand:"], + "sizes_px": [] + }, + { + "name": "emoji_u270d_1f3ff", + "version": 1, + "popularity": 274, + "codepoint": "270d_1f3ff", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":writing-hand:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f933", + "version": 1, + "popularity": 273, + "codepoint": "1f933", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":selfie:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f933_1f3fb", + "version": 1, + "popularity": 272, + "codepoint": "1f933_1f3fb", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":selfie:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f933_1f3fc", + "version": 1, + "popularity": 271, + "codepoint": "1f933_1f3fc", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":selfie:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f933_1f3fd", + "version": 1, + "popularity": 270, + "codepoint": "1f933_1f3fd", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":selfie:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f933_1f3fe", + "version": 1, + "popularity": 269, + "codepoint": "1f933_1f3fe", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":selfie:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f933_1f3ff", + "version": 1, + "popularity": 268, + "codepoint": "1f933_1f3ff", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":selfie:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f64f", + "version": 1, + "popularity": 267, + "codepoint": "1f64f", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [ + ":folded-hands:", + ":please:", + ":pray:", + ":hope:", + ":wish:", + ":thank-you:", + ":high-five:" + ], + "sizes_px": [] + }, + { + "name": "emoji_u1f64f_1f3fb", + "version": 1, + "popularity": 266, + "codepoint": "1f64f_1f3fb", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [ + ":folded-hands:", + ":please:", + ":pray:", + ":hope:", + ":wish:", + ":thank-you:", + ":high-five:" + ], + "sizes_px": [] + }, + { + "name": "emoji_u1f64f_1f3fc", + "version": 1, + "popularity": 265, + "codepoint": "1f64f_1f3fc", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [ + ":folded-hands:", + ":please:", + ":pray:", + ":hope:", + ":wish:", + ":thank-you:", + ":high-five:" + ], + "sizes_px": [] + }, + { + "name": "emoji_u1f64f_1f3fd", + "version": 1, + "popularity": 264, + "codepoint": "1f64f_1f3fd", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [ + ":folded-hands:", + ":please:", + ":pray:", + ":hope:", + ":wish:", + ":thank-you:", + ":high-five:" + ], + "sizes_px": [] + }, + { + "name": "emoji_u1f64f_1f3fe", + "version": 1, + "popularity": 263, + "codepoint": "1f64f_1f3fe", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [ + ":folded-hands:", + ":please:", + ":pray:", + ":hope:", + ":wish:", + ":thank-you:", + ":high-five:" + ], + "sizes_px": [] + }, + { + "name": "emoji_u1f64f_1f3ff", + "version": 1, + "popularity": 262, + "codepoint": "1f64f_1f3ff", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [ + ":folded-hands:", + ":please:", + ":pray:", + ":hope:", + ":wish:", + ":thank-you:", + ":high-five:" + ], + "sizes_px": [] + }, + { + "name": "emoji_u1f485", + "version": 1, + "popularity": 261, + "codepoint": "1f485", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":nail-care:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f485_1f3fb", + "version": 1, + "popularity": 260, + "codepoint": "1f485_1f3fb", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":nail-care:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f485_1f3fc", + "version": 1, + "popularity": 259, + "codepoint": "1f485_1f3fc", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":nail-care:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f485_1f3fd", + "version": 1, + "popularity": 258, + "codepoint": "1f485_1f3fd", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":nail-care:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f485_1f3fe", + "version": 1, + "popularity": 257, + "codepoint": "1f485_1f3fe", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":nail-care:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f485_1f3ff", + "version": 1, + "popularity": 256, + "codepoint": "1f485_1f3ff", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":nail-care:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f91d", + "version": 1, + "popularity": 255, + "codepoint": "1f91d", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":handshake:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f91d_1f3fb", + "version": 1, + "popularity": 254, + "codepoint": "1f91d_1f3fb", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":handshake:"], + "sizes_px": [] + }, + { + "name": "emoji_u1faf1_1f3fb_200d_1faf2_1f3fc", + "version": 1, + "popularity": 253, + "codepoint": "1faf1_1f3fb_200d_1faf2_1f3fc", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":handshake:"], + "sizes_px": [] + }, + { + "name": "emoji_u1faf1_1f3fb_200d_1faf2_1f3fd", + "version": 1, + "popularity": 252, + "codepoint": "1faf1_1f3fb_200d_1faf2_1f3fd", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":handshake:"], + "sizes_px": [] + }, + { + "name": "emoji_u1faf1_1f3fb_200d_1faf2_1f3fe", + "version": 1, + "popularity": 251, + "codepoint": "1faf1_1f3fb_200d_1faf2_1f3fe", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":handshake:"], + "sizes_px": [] + }, + { + "name": "emoji_u1faf1_1f3fb_200d_1faf2_1f3ff", + "version": 1, + "popularity": 250, + "codepoint": "1faf1_1f3fb_200d_1faf2_1f3ff", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":handshake:"], + "sizes_px": [] + }, + { + "name": "emoji_u1faf1_1f3fc_200d_1faf2_1f3fb", + "version": 1, + "popularity": 249, + "codepoint": "1faf1_1f3fc_200d_1faf2_1f3fb", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":handshake:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f91d_1f3fc", + "version": 1, + "popularity": 248, + "codepoint": "1f91d_1f3fc", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":handshake:"], + "sizes_px": [] + }, + { + "name": "emoji_u1faf1_1f3fc_200d_1faf2_1f3fd", + "version": 1, + "popularity": 247, + "codepoint": "1faf1_1f3fc_200d_1faf2_1f3fd", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":handshake:"], + "sizes_px": [] + }, + { + "name": "emoji_u1faf1_1f3fc_200d_1faf2_1f3fe", + "version": 1, + "popularity": 246, + "codepoint": "1faf1_1f3fc_200d_1faf2_1f3fe", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":handshake:"], + "sizes_px": [] + }, + { + "name": "emoji_u1faf1_1f3fc_200d_1faf2_1f3ff", + "version": 1, + "popularity": 245, + "codepoint": "1faf1_1f3fc_200d_1faf2_1f3ff", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":handshake:"], + "sizes_px": [] + }, + { + "name": "emoji_u1faf1_1f3fd_200d_1faf2_1f3fb", + "version": 1, + "popularity": 244, + "codepoint": "1faf1_1f3fd_200d_1faf2_1f3fb", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":handshake:"], + "sizes_px": [] + }, + { + "name": "emoji_u1faf1_1f3fd_200d_1faf2_1f3fc", + "version": 1, + "popularity": 243, + "codepoint": "1faf1_1f3fd_200d_1faf2_1f3fc", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":handshake:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f91d_1f3fd", + "version": 1, + "popularity": 242, + "codepoint": "1f91d_1f3fd", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":handshake:"], + "sizes_px": [] + }, + { + "name": "emoji_u1faf1_1f3fd_200d_1faf2_1f3fe", + "version": 1, + "popularity": 241, + "codepoint": "1faf1_1f3fd_200d_1faf2_1f3fe", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":handshake:"], + "sizes_px": [] + }, + { + "name": "emoji_u1faf1_1f3fd_200d_1faf2_1f3ff", + "version": 1, + "popularity": 240, + "codepoint": "1faf1_1f3fd_200d_1faf2_1f3ff", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":handshake:"], + "sizes_px": [] + }, + { + "name": "emoji_u1faf1_1f3fe_200d_1faf2_1f3fb", + "version": 1, + "popularity": 239, + "codepoint": "1faf1_1f3fe_200d_1faf2_1f3fb", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":handshake:"], + "sizes_px": [] + }, + { + "name": "emoji_u1faf1_1f3fe_200d_1faf2_1f3fc", + "version": 1, + "popularity": 238, + "codepoint": "1faf1_1f3fe_200d_1faf2_1f3fc", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":handshake:"], + "sizes_px": [] + }, + { + "name": "emoji_u1faf1_1f3fe_200d_1faf2_1f3fd", + "version": 1, + "popularity": 237, + "codepoint": "1faf1_1f3fe_200d_1faf2_1f3fd", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":handshake:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f91d_1f3fe", + "version": 1, + "popularity": 236, + "codepoint": "1f91d_1f3fe", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":handshake:"], + "sizes_px": [] + }, + { + "name": "emoji_u1faf1_1f3fe_200d_1faf2_1f3ff", + "version": 1, + "popularity": 235, + "codepoint": "1faf1_1f3fe_200d_1faf2_1f3ff", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":handshake:"], + "sizes_px": [] + }, + { + "name": "emoji_u1faf1_1f3ff_200d_1faf2_1f3fb", + "version": 1, + "popularity": 234, + "codepoint": "1faf1_1f3ff_200d_1faf2_1f3fb", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":handshake:"], + "sizes_px": [] + }, + { + "name": "emoji_u1faf1_1f3ff_200d_1faf2_1f3fc", + "version": 1, + "popularity": 233, + "codepoint": "1faf1_1f3ff_200d_1faf2_1f3fc", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":handshake:"], + "sizes_px": [] + }, + { + "name": "emoji_u1faf1_1f3ff_200d_1faf2_1f3fd", + "version": 1, + "popularity": 232, + "codepoint": "1faf1_1f3ff_200d_1faf2_1f3fd", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":handshake:"], + "sizes_px": [] + }, + { + "name": "emoji_u1faf1_1f3ff_200d_1faf2_1f3fe", + "version": 1, + "popularity": 231, + "codepoint": "1faf1_1f3ff_200d_1faf2_1f3fe", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":handshake:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f91d_1f3ff", + "version": 1, + "popularity": 230, + "codepoint": "1f91d_1f3ff", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":handshake:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f483", + "version": 1, + "popularity": 229, + "codepoint": "1f483", + "unsupported_families": [], + "categories": ["People"], + "tags": [":dancer-woman:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f483_1f3fb", + "version": 1, + "popularity": 228, + "codepoint": "1f483_1f3fb", + "unsupported_families": [], + "categories": ["People"], + "tags": [":dancer-woman:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f483_1f3fc", + "version": 1, + "popularity": 227, + "codepoint": "1f483_1f3fc", + "unsupported_families": [], + "categories": ["People"], + "tags": [":dancer-woman:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f483_1f3fd", + "version": 1, + "popularity": 226, + "codepoint": "1f483_1f3fd", + "unsupported_families": [], + "categories": ["People"], + "tags": [":dancer-woman:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f483_1f3fe", + "version": 1, + "popularity": 225, + "codepoint": "1f483_1f3fe", + "unsupported_families": [], + "categories": ["People"], + "tags": [":dancer-woman:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f483_1f3ff", + "version": 1, + "popularity": 224, + "codepoint": "1f483_1f3ff", + "unsupported_families": [], + "categories": ["People"], + "tags": [":dancer-woman:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f490", + "version": 1, + "popularity": 223, + "codepoint": "1f490", + "unsupported_families": [], + "categories": ["Animals and nature"], + "tags": [":bouquet:", ":flowers:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f339", + "version": 1, + "popularity": 222, + "codepoint": "1f339", + "unsupported_families": [], + "categories": ["Animals and nature"], + "tags": [":rose:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f940", + "version": 1, + "popularity": 221, + "codepoint": "1f940", + "unsupported_families": [], + "categories": ["Animals and nature"], + "tags": [":wilted-flower:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f342", + "version": 1, + "popularity": 220, + "codepoint": "1f342", + "unsupported_families": [], + "categories": ["Animals and nature"], + "tags": [":fallen-leaf:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f331", + "version": 1, + "popularity": 219, + "codepoint": "1f331", + "unsupported_families": [], + "categories": ["Animals and nature"], + "tags": [":plant:", ":seed:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f343", + "version": 1, + "popularity": 218, + "codepoint": "1f343", + "unsupported_families": [], + "categories": ["Animals and nature"], + "tags": [":leaves:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f340", + "version": 1, + "popularity": 217, + "codepoint": "1f340", + "unsupported_families": [], + "categories": ["Animals and nature"], + "tags": [":luck:", ":four-leaf-clover:"], + "sizes_px": [] + }, + { + "name": "emoji_u1fabe", + "version": 1, + "popularity": 216, + "codepoint": "1fabe", + "unsupported_families": [], + "categories": ["Animals and nature"], + "tags": [":leafless-tree:"], + "sizes_px": [] + }, + { + "name": "emoji_u2744_fe0f", + "version": 1, + "popularity": 215, + "codepoint": "2744_fe0f", + "unsupported_families": [], + "categories": ["Animals and nature"], + "tags": [":snowflake:", ":winter:", ":cold:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f30b", + "version": 1, + "popularity": 214, + "codepoint": "1f30b", + "unsupported_families": [], + "categories": ["Animals and nature"], + "tags": [":volcano:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f305", + "version": 1, + "popularity": 213, + "codepoint": "1f305", + "unsupported_families": [], + "categories": ["Animals and nature"], + "tags": [":sunrise:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f304", + "version": 1, + "popularity": 212, + "codepoint": "1f304", + "unsupported_families": [], + "categories": ["Animals and nature"], + "tags": [":sunrise-over-mountains:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f308", + "version": 1, + "popularity": 211, + "codepoint": "1f308", + "unsupported_families": [], + "categories": ["Animals and nature"], + "tags": [":rainbow:"], + "sizes_px": [] + }, + { + "name": "emoji_u1fae7", + "version": 1, + "popularity": 210, + "codepoint": "1fae7", + "unsupported_families": [], + "categories": ["Animals and nature"], + "tags": [":bubbles:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f30a", + "version": 1, + "popularity": 209, + "codepoint": "1f30a", + "unsupported_families": [], + "categories": ["Animals and nature"], + "tags": [":ocean:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f32c_fe0f", + "version": 1, + "popularity": 208, + "codepoint": "1f32c_fe0f", + "unsupported_families": [], + "categories": ["Animals and nature"], + "tags": [":wind-face:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f32a_fe0f", + "version": 1, + "popularity": 207, + "codepoint": "1f32a_fe0f", + "unsupported_families": [], + "categories": ["Animals and nature"], + "tags": [":tornado:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f4a7", + "version": 1, + "popularity": 206, + "codepoint": "1f4a7", + "unsupported_families": [], + "categories": ["Animals and nature"], + "tags": [":droplet:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f327_fe0f", + "version": 1, + "popularity": 205, + "codepoint": "1f327_fe0f", + "unsupported_families": [], + "categories": ["Animals and nature"], + "tags": [":rain-cloud:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f329_fe0f", + "version": 1, + "popularity": 204, + "codepoint": "1f329_fe0f", + "unsupported_families": [], + "categories": ["Animals and nature"], + "tags": [":cloud-with-lightning:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f30d", + "version": 1, + "popularity": 203, + "codepoint": "1f30d", + "unsupported_families": [], + "categories": ["Animals and nature"], + "tags": [":globe-showing-Europe-Africa:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f30e", + "version": 1, + "popularity": 202, + "codepoint": "1f30e", + "unsupported_families": [], + "categories": ["Animals and nature"], + "tags": [":globe-showing-Americas:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f30f", + "version": 1, + "popularity": 201, + "codepoint": "1f30f", + "unsupported_families": [], + "categories": ["Animals and nature"], + "tags": [":globe-showing-Asia-Australia:"], + "sizes_px": [] + }, + { + "name": "emoji_u2604_fe0f", + "version": 1, + "popularity": 200, + "codepoint": "2604_fe0f", + "unsupported_families": [], + "categories": ["Animals and nature"], + "tags": [":comet:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f42e", + "version": 1, + "popularity": 199, + "codepoint": "1f42e", + "unsupported_families": [], + "categories": ["Animals and nature"], + "tags": [":cow-face:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f984", + "version": 1, + "popularity": 198, + "codepoint": "1f984", + "unsupported_families": [], + "categories": ["Animals and nature"], + "tags": [":unicorn:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f98e", + "version": 1, + "popularity": 197, + "codepoint": "1f98e", + "unsupported_families": [], + "categories": ["Animals and nature"], + "tags": [":lizard:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f409", + "version": 1, + "popularity": 196, + "codepoint": "1f409", + "unsupported_families": [], + "categories": ["Animals and nature"], + "tags": [":dragon:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f996", + "version": 1, + "popularity": 195, + "codepoint": "1f996", + "unsupported_families": [], + "categories": ["Animals and nature"], + "tags": [":t-rex:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f995", + "version": 1, + "popularity": 194, + "codepoint": "1f995", + "unsupported_families": [], + "categories": ["Animals and nature"], + "tags": [":dinosaur:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f422", + "version": 1, + "popularity": 193, + "codepoint": "1f422", + "unsupported_families": [], + "categories": ["Animals and nature"], + "tags": [":turtle:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f40a", + "version": 1, + "popularity": 192, + "codepoint": "1f40a", + "unsupported_families": [], + "categories": ["Animals and nature"], + "tags": [":crocodile:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f40d", + "version": 1, + "popularity": 191, + "codepoint": "1f40d", + "unsupported_families": [], + "categories": ["Animals and nature"], + "tags": [":snake:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f438", + "version": 1, + "popularity": 190, + "codepoint": "1f438", + "unsupported_families": [], + "categories": ["Animals and nature"], + "tags": [":frog:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f407", + "version": 1, + "popularity": 189, + "codepoint": "1f407", + "unsupported_families": [], + "categories": ["Animals and nature"], + "tags": [":rabbit:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f400", + "version": 1, + "popularity": 188, + "codepoint": "1f400", + "unsupported_families": [], + "categories": ["Animals and nature"], + "tags": [":rat:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f429", + "version": 1, + "popularity": 187, + "codepoint": "1f429", + "unsupported_families": [], + "categories": ["Animals and nature"], + "tags": [":poodle:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f415", + "version": 1, + "popularity": 186, + "codepoint": "1f415", + "unsupported_families": [], + "categories": ["Animals and nature"], + "tags": [":dog:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f9ae", + "version": 1, + "popularity": 185, + "codepoint": "1f9ae", + "unsupported_families": [], + "categories": ["Animals and nature"], + "tags": [":guide-dog:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f415_200d_1f9ba", + "version": 1, + "popularity": 184, + "codepoint": "1f415_200d_1f9ba", + "unsupported_families": [], + "categories": ["Animals and nature"], + "tags": [":service-dog:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f416", + "version": 1, + "popularity": 183, + "codepoint": "1f416", + "unsupported_families": [], + "categories": ["Animals and nature"], + "tags": [":pig:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f40e", + "version": 1, + "popularity": 182, + "codepoint": "1f40e", + "unsupported_families": [], + "categories": ["Animals and nature"], + "tags": [":racehorse:"], + "sizes_px": [] + }, + { + "name": "emoji_u1facf", + "version": 1, + "popularity": 181, + "codepoint": "1facf", + "unsupported_families": [], + "categories": ["Animals and nature"], + "tags": [":donkey:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f402", + "version": 1, + "popularity": 180, + "codepoint": "1f402", + "unsupported_families": [], + "categories": ["Animals and nature"], + "tags": [":ox:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f410", + "version": 1, + "popularity": 179, + "codepoint": "1f410", + "unsupported_families": [], + "categories": ["Animals and nature"], + "tags": [":goat:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f998", + "version": 1, + "popularity": 178, + "codepoint": "1f998", + "unsupported_families": [], + "categories": ["Animals and nature"], + "tags": [":kangaroo:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f405", + "version": 1, + "popularity": 177, + "codepoint": "1f405", + "unsupported_families": [], + "categories": ["Animals and nature"], + "tags": [":tiger:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f412", + "version": 1, + "popularity": 176, + "codepoint": "1f412", + "unsupported_families": [], + "categories": ["Animals and nature"], + "tags": [":monkey:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f98d", + "version": 1, + "popularity": 175, + "codepoint": "1f98d", + "unsupported_families": [], + "categories": ["Animals and nature"], + "tags": [":gorilla:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f9a7", + "version": 1, + "popularity": 174, + "codepoint": "1f9a7", + "unsupported_families": [], + "categories": ["Animals and nature"], + "tags": [":orangutan:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f43f_fe0f", + "version": 1, + "popularity": 173, + "codepoint": "1f43f_fe0f", + "unsupported_families": [], + "categories": ["Animals and nature"], + "tags": [":chipmunk:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f9a6", + "version": 1, + "popularity": 172, + "codepoint": "1f9a6", + "unsupported_families": [], + "categories": ["Animals and nature"], + "tags": [":otter:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f987", + "version": 1, + "popularity": 171, + "codepoint": "1f987", + "unsupported_families": [], + "categories": ["Animals and nature"], + "tags": [":bat:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f426", + "version": 1, + "popularity": 170, + "codepoint": "1f426", + "unsupported_families": [], + "categories": ["Animals and nature"], + "tags": [":bird:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f426_200d_2b1b", + "version": 1, + "popularity": 169, + "codepoint": "1f426_200d_2b1b", + "unsupported_families": [], + "categories": ["Animals and nature"], + "tags": [":black-bird:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f413", + "version": 1, + "popularity": 168, + "codepoint": "1f413", + "unsupported_families": [], + "categories": ["Animals and nature"], + "tags": [":rooster:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f423", + "version": 1, + "popularity": 167, + "codepoint": "1f423", + "unsupported_families": [], + "categories": ["Animals and nature"], + "tags": [":hatching-chick:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f424", + "version": 1, + "popularity": 166, + "codepoint": "1f424", + "unsupported_families": [], + "categories": ["Animals and nature"], + "tags": [":baby-chick:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f425", + "version": 1, + "popularity": 165, + "codepoint": "1f425", + "unsupported_families": [], + "categories": ["Animals and nature"], + "tags": [":hatched-chick:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f985", + "version": 1, + "popularity": 164, + "codepoint": "1f985", + "unsupported_families": [], + "categories": ["Animals and nature"], + "tags": [":eagle:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f989", + "version": 1, + "popularity": 163, + "codepoint": "1f989", + "unsupported_families": [], + "categories": ["Animals and nature"], + "tags": [":owl:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f54a_fe0f", + "version": 1, + "popularity": 162, + "codepoint": "1f54a_fe0f", + "unsupported_families": [], + "categories": ["Animals and nature"], + "tags": [":peace:", ":dove:"], + "sizes_px": [] + }, + { + "name": "emoji_u1fabf", + "version": 1, + "popularity": 161, + "codepoint": "1fabf", + "unsupported_families": [], + "categories": ["Animals and nature"], + "tags": [":goose:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f99a", + "version": 1, + "popularity": 160, + "codepoint": "1f99a", + "unsupported_families": [], + "categories": ["Animals and nature"], + "tags": [":peacock:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f426_200d_1f525", + "version": 1, + "popularity": 159, + "codepoint": "1f426_200d_1f525", + "unsupported_families": [], + "categories": ["Animals and nature"], + "tags": [":phoenix:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f9ad", + "version": 1, + "popularity": 158, + "codepoint": "1f9ad", + "unsupported_families": [], + "categories": ["Animals and nature"], + "tags": [":seal:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f988", + "version": 1, + "popularity": 157, + "codepoint": "1f988", + "unsupported_families": [], + "categories": ["Animals and nature"], + "tags": [":shark:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f42c", + "version": 1, + "popularity": 156, + "codepoint": "1f42c", + "unsupported_families": [], + "categories": ["Animals and nature"], + "tags": [":dolphin:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f433", + "version": 1, + "popularity": 155, + "codepoint": "1f433", + "unsupported_families": [], + "categories": ["Animals and nature"], + "tags": [":whale:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f41f", + "version": 1, + "popularity": 154, + "codepoint": "1f41f", + "unsupported_families": [], + "categories": ["Animals and nature"], + "tags": [":fish:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f421", + "version": 1, + "popularity": 153, + "codepoint": "1f421", + "unsupported_families": [], + "categories": ["Animals and nature"], + "tags": [":blowfish:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f99e", + "version": 1, + "popularity": 152, + "codepoint": "1f99e", + "unsupported_families": [], + "categories": ["Animals and nature"], + "tags": [":lobster:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f980", + "version": 1, + "popularity": 151, + "codepoint": "1f980", + "unsupported_families": [], + "categories": ["Animals and nature"], + "tags": [":crab:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f419", + "version": 1, + "popularity": 150, + "codepoint": "1f419", + "unsupported_families": [], + "categories": ["Animals and nature"], + "tags": [":octopus:"], + "sizes_px": [] + }, + { + "name": "emoji_u1fabc", + "version": 1, + "popularity": 149, + "codepoint": "1fabc", + "unsupported_families": [], + "categories": ["Animals and nature"], + "tags": [":jellyfish:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f982", + "version": 1, + "popularity": 148, + "codepoint": "1f982", + "unsupported_families": [], + "categories": ["Animals and nature"], + "tags": [":scorpion:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f577_fe0f", + "version": 1, + "popularity": 147, + "codepoint": "1f577_fe0f", + "unsupported_families": [], + "categories": ["Animals and nature"], + "tags": [":spider:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f40c", + "version": 1, + "popularity": 146, + "codepoint": "1f40c", + "unsupported_families": [], + "categories": ["Animals and nature"], + "tags": [":snail:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f41c", + "version": 1, + "popularity": 145, + "codepoint": "1f41c", + "unsupported_families": [], + "categories": ["Animals and nature"], + "tags": [":ant:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f99f", + "version": 1, + "popularity": 144, + "codepoint": "1f99f", + "unsupported_families": [], + "categories": ["Animals and nature"], + "tags": [":mosquito:"], + "sizes_px": [] + }, + { + "name": "emoji_u1fab3", + "version": 1, + "popularity": 143, + "codepoint": "1fab3", + "unsupported_families": [], + "categories": ["Animals and nature"], + "tags": [":cockroach:"], + "sizes_px": [] + }, + { + "name": "emoji_u1fab0", + "version": 1, + "popularity": 142, + "codepoint": "1fab0", + "unsupported_families": [], + "categories": ["Animals and nature"], + "tags": [":fly:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f41d", + "version": 1, + "popularity": 141, + "codepoint": "1f41d", + "unsupported_families": [], + "categories": ["Animals and nature"], + "tags": [":bee:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f41e", + "version": 1, + "popularity": 140, + "codepoint": "1f41e", + "unsupported_families": [], + "categories": ["Animals and nature"], + "tags": [":lady-bug:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f98b", + "version": 1, + "popularity": 139, + "codepoint": "1f98b", + "unsupported_families": [], + "categories": ["Animals and nature"], + "tags": [":butterfly:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f41b", + "version": 1, + "popularity": 138, + "codepoint": "1f41b", + "unsupported_families": [], + "categories": ["Animals and nature"], + "tags": [":bug:"], + "sizes_px": [] + }, + { + "name": "emoji_u1fab1", + "version": 1, + "popularity": 137, + "codepoint": "1fab1", + "unsupported_families": [], + "categories": ["Animals and nature"], + "tags": [":worm:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f43e", + "version": 1, + "popularity": 136, + "codepoint": "1f43e", + "unsupported_families": [], + "categories": ["Animals and nature"], + "tags": [":paw prints:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f345", + "version": 1, + "popularity": 135, + "codepoint": "1f345", + "unsupported_families": [], + "categories": ["Food and drink"], + "tags": [":tomato:"], + "sizes_px": [] + }, + { + "name": "emoji_u1fadc", + "version": 1, + "popularity": 134, + "codepoint": "1fadc", + "unsupported_families": [], + "categories": ["Food and drink"], + "tags": [":root-vegetable:", ":beet:", ":turnip:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f373", + "version": 1, + "popularity": 133, + "codepoint": "1f373", + "unsupported_families": [], + "categories": ["Food and drink"], + "tags": [":cooking:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f32f", + "version": 1, + "popularity": 132, + "codepoint": "1f32f", + "unsupported_families": [], + "categories": ["Food and drink"], + "tags": [":burrito:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f35d", + "version": 1, + "popularity": 131, + "codepoint": "1f35d", + "unsupported_families": [], + "categories": ["Food and drink"], + "tags": [":spaghetti:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f35c", + "version": 1, + "popularity": 130, + "codepoint": "1f35c", + "unsupported_families": [], + "categories": ["Food and drink"], + "tags": [":steaming-bowl:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f37f", + "version": 1, + "popularity": 129, + "codepoint": "1f37f", + "unsupported_families": [], + "categories": ["Food and drink"], + "tags": [":popcorn:"], + "sizes_px": [] + }, + { + "name": "emoji_u2615", + "version": 1, + "popularity": 128, + "codepoint": "2615", + "unsupported_families": [], + "categories": ["Food and drink"], + "tags": [":hot-beverage:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f37b", + "version": 1, + "popularity": 127, + "codepoint": "1f37b", + "unsupported_families": [], + "categories": ["Food and drink"], + "tags": [":clinking-beer-mugs:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f942", + "version": 1, + "popularity": 126, + "codepoint": "1f942", + "unsupported_families": [], + "categories": ["Food and drink"], + "tags": [":clinking-glasses:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f37e", + "version": 1, + "popularity": 125, + "codepoint": "1f37e", + "unsupported_families": [], + "categories": ["Food and drink"], + "tags": [":bottle-with-popping-cork:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f377", + "version": 1, + "popularity": 124, + "codepoint": "1f377", + "unsupported_families": [], + "categories": ["Food and drink"], + "tags": [":wine-glass:"], + "sizes_px": [] + }, + { + "name": "emoji_u1fad7", + "version": 1, + "popularity": 123, + "codepoint": "1fad7", + "unsupported_families": [], + "categories": ["Food and drink"], + "tags": [":pour:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f379", + "version": 1, + "popularity": 122, + "codepoint": "1f379", + "unsupported_families": [], + "categories": ["Food and drink"], + "tags": [":tropical-drink:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f6a7", + "version": 1, + "popularity": 121, + "codepoint": "1f6a7", + "unsupported_families": [], + "categories": ["Travel and places"], + "tags": [":construction:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f6a8", + "version": 1, + "popularity": 120, + "codepoint": "1f6a8", + "unsupported_families": [], + "categories": ["Travel and places"], + "tags": [":police-car-light:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f6b2", + "version": 1, + "popularity": 119, + "codepoint": "1f6b2", + "unsupported_families": [], + "categories": ["Travel and places"], + "tags": [":bicycle:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f697", + "version": 1, + "popularity": 118, + "codepoint": "1f697", + "unsupported_families": [], + "categories": ["Travel and places"], + "tags": [":automobile:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f3ce_fe0f", + "version": 1, + "popularity": 117, + "codepoint": "1f3ce_fe0f", + "unsupported_families": [], + "categories": ["Travel and places"], + "tags": [":racing-car:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f695", + "version": 1, + "popularity": 116, + "codepoint": "1f695", + "unsupported_families": [], + "categories": ["Travel and places"], + "tags": [":taxi:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f68c", + "version": 1, + "popularity": 115, + "codepoint": "1f68c", + "unsupported_families": [], + "categories": ["Travel and places"], + "tags": [":bus:"], + "sizes_px": [] + }, + { + "name": "emoji_u26f5", + "version": 1, + "popularity": 114, + "codepoint": "26f5", + "unsupported_families": [], + "categories": ["Travel and places"], + "tags": [":sailboat:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f6f6", + "version": 1, + "popularity": 113, + "codepoint": "1f6f6", + "unsupported_families": [], + "categories": ["Travel and places"], + "tags": [":canoe:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f6f8", + "version": 1, + "popularity": 112, + "codepoint": "1f6f8", + "unsupported_families": [], + "categories": ["Travel and places"], + "tags": [":flying-saucer:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f680", + "version": 1, + "popularity": 111, + "codepoint": "1f680", + "unsupported_families": [], + "categories": ["Travel and places"], + "tags": [":rocket:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f6eb", + "version": 1, + "popularity": 110, + "codepoint": "1f6eb", + "unsupported_families": [], + "categories": ["Travel and places"], + "tags": [":airplane-departure:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f6ec", + "version": 1, + "popularity": 109, + "codepoint": "1f6ec", + "unsupported_families": [], + "categories": ["Travel and places"], + "tags": [":airplane-arrival:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f3a2", + "version": 1, + "popularity": 108, + "codepoint": "1f3a2", + "unsupported_families": [], + "categories": ["Travel and places"], + "tags": [":roller-coaster:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f3a1", + "version": 1, + "popularity": 107, + "codepoint": "1f3a1", + "unsupported_families": [], + "categories": ["Travel and places"], + "tags": [":ferris-wheel:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f3d5_fe0f", + "version": 1, + "popularity": 106, + "codepoint": "1f3d5_fe0f", + "unsupported_families": [], + "categories": ["Travel and places"], + "tags": [":camping:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f388", + "version": 1, + "popularity": 105, + "codepoint": "1f388", + "unsupported_families": [], + "categories": ["Activities and events"], + "tags": [":balloon:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f382", + "version": 1, + "popularity": 104, + "codepoint": "1f382", + "unsupported_families": [], + "categories": ["Activities and events"], + "tags": [":birthday-cake:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f381", + "version": 1, + "popularity": 103, + "codepoint": "1f381", + "unsupported_families": [], + "categories": ["Activities and events"], + "tags": [":wrapped-gift:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f386", + "version": 1, + "popularity": 102, + "codepoint": "1f386", + "unsupported_families": [], + "categories": ["Activities and events"], + "tags": [":fireworks:"], + "sizes_px": [] + }, + { + "name": "emoji_u1fa85", + "version": 1, + "popularity": 101, + "codepoint": "1fa85", + "unsupported_families": [], + "categories": ["Activities and events"], + "tags": [":piñata:"], + "sizes_px": [] + }, + { + "name": "emoji_u1faa9", + "version": 1, + "popularity": 100, + "codepoint": "1faa9", + "unsupported_families": [], + "categories": ["Activities and events"], + "tags": [":mirror-ball:", ":disco-ball:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f947", + "version": 1, + "popularity": 99, + "codepoint": "1f947", + "unsupported_families": [], + "categories": ["Activities and events"], + "tags": [":gold-medal:", ":1st-place-medal:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f948", + "version": 1, + "popularity": 98, + "codepoint": "1f948", + "unsupported_families": [], + "categories": ["Activities and events"], + "tags": [":silver-medal:", ":2nd-place-medal:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f949", + "version": 1, + "popularity": 97, + "codepoint": "1f949", + "unsupported_families": [], + "categories": ["Activities and events"], + "tags": [":bronze-medal:", ":3rd-place-medal:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f3c6", + "version": 1, + "popularity": 96, + "codepoint": "1f3c6", + "unsupported_families": [], + "categories": ["Activities and events"], + "tags": [":trophy:"], + "sizes_px": [] + }, + { + "name": "emoji_u26bd", + "version": 1, + "popularity": 95, + "codepoint": "26bd", + "unsupported_families": [], + "categories": ["Activities and events"], + "tags": [":soccer-ball:"], + "sizes_px": [] + }, + { + "name": "emoji_u26be", + "version": 1, + "popularity": 94, + "codepoint": "26be", + "unsupported_families": [], + "categories": ["Activities and events"], + "tags": [":baseball:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f94e", + "version": 1, + "popularity": 93, + "codepoint": "1f94e", + "unsupported_families": [], + "categories": ["Activities and events"], + "tags": [":softball:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f3be", + "version": 1, + "popularity": 92, + "codepoint": "1f3be", + "unsupported_families": [], + "categories": ["Activities and events"], + "tags": [":tennis:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f3f8", + "version": 1, + "popularity": 91, + "codepoint": "1f3f8", + "unsupported_families": [], + "categories": ["Activities and events"], + "tags": [":badminton:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f94d", + "version": 1, + "popularity": 90, + "codepoint": "1f94d", + "unsupported_families": [], + "categories": ["Activities and events"], + "tags": [":lacrosse:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f3cf", + "version": 1, + "popularity": 89, + "codepoint": "1f3cf", + "unsupported_families": [], + "categories": ["Activities and events"], + "tags": [":cricket-game:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f3d1", + "version": 1, + "popularity": 88, + "codepoint": "1f3d1", + "unsupported_families": [], + "categories": ["Activities and events"], + "tags": [":field-hockey:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f3d2", + "version": 1, + "popularity": 87, + "codepoint": "1f3d2", + "unsupported_families": [], + "categories": ["Activities and events"], + "tags": [":ice-hockey:"], + "sizes_px": [] + }, + { + "name": "emoji_u26f8_fe0f", + "version": 1, + "popularity": 86, + "codepoint": "26f8_fe0f", + "unsupported_families": [], + "categories": ["Activities and events"], + "tags": [":ice-skate:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f6fc", + "version": 1, + "popularity": 85, + "codepoint": "1f6fc", + "unsupported_families": [], + "categories": ["Activities and events"], + "tags": [":roller-skates:"], + "sizes_px": [] + }, + { + "name": "emoji_u1fa70", + "version": 1, + "popularity": 84, + "codepoint": "1fa70", + "unsupported_families": [], + "categories": ["Activities and events"], + "tags": [":ballet-shoes:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f6f9", + "version": 1, + "popularity": 83, + "codepoint": "1f6f9", + "unsupported_families": [], + "categories": ["Activities and events"], + "tags": [":skateboard:"], + "sizes_px": [] + }, + { + "name": "emoji_u26f3", + "version": 1, + "popularity": 82, + "codepoint": "26f3", + "unsupported_families": [], + "categories": ["Activities and events"], + "tags": [":flag-in-hole:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f3af", + "version": 1, + "popularity": 81, + "codepoint": "1f3af", + "unsupported_families": [], + "categories": ["Activities and events"], + "tags": [":direct-hit:", ":target:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f94f", + "version": 1, + "popularity": 80, + "codepoint": "1f94f", + "unsupported_families": [], + "categories": ["Activities and events"], + "tags": [":flying-disc:"], + "sizes_px": [] + }, + { + "name": "emoji_u1fa83", + "version": 1, + "popularity": 79, + "codepoint": "1fa83", + "unsupported_families": [], + "categories": ["Activities and events"], + "tags": [":boomerang:"], + "sizes_px": [] + }, + { + "name": "emoji_u1fa81", + "version": 1, + "popularity": 78, + "codepoint": "1fa81", + "unsupported_families": [], + "categories": ["Activities and events"], + "tags": [":kite:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f3a3", + "version": 1, + "popularity": 77, + "codepoint": "1f3a3", + "unsupported_families": [], + "categories": ["Activities and events"], + "tags": [":fishing-pole:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f94b", + "version": 1, + "popularity": 76, + "codepoint": "1f94b", + "unsupported_families": [], + "categories": ["Activities and events"], + "tags": [":martial-arts-uniform:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f3b1", + "version": 1, + "popularity": 75, + "codepoint": "1f3b1", + "unsupported_families": [], + "categories": ["Activities and events"], + "tags": [":8-ball:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f3d3", + "version": 1, + "popularity": 74, + "codepoint": "1f3d3", + "unsupported_families": [], + "categories": ["Activities and events"], + "tags": [":ping-pong:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f3b3", + "version": 1, + "popularity": 73, + "codepoint": "1f3b3", + "unsupported_families": [], + "categories": ["Activities and events"], + "tags": [":bowling:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f3b2", + "version": 1, + "popularity": 72, + "codepoint": "1f3b2", + "unsupported_families": [], + "categories": ["Activities and events"], + "tags": [":die:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f3b0", + "version": 1, + "popularity": 71, + "codepoint": "1f3b0", + "unsupported_families": [], + "categories": ["Activities and events"], + "tags": [":slot-machine:"], + "sizes_px": [] + }, + { + "name": "emoji_u1fa84", + "version": 1, + "popularity": 70, + "codepoint": "1fa84", + "unsupported_families": [], + "categories": ["Activities and events"], + "tags": [":wand:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f4f8", + "version": 1, + "popularity": 69, + "codepoint": "1f4f8", + "unsupported_families": [], + "categories": ["Activities and events"], + "tags": [":camera-flash:"], + "sizes_px": [] + }, + { + "name": "emoji_u1fadf", + "version": 1, + "popularity": 68, + "codepoint": "1fadf", + "unsupported_families": [], + "categories": ["Activities and events"], + "tags": [":splatter:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f3b7", + "version": 1, + "popularity": 67, + "codepoint": "1f3b7", + "unsupported_families": [], + "categories": ["Activities and events"], + "tags": [":saxophone:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f3ba", + "version": 1, + "popularity": 66, + "codepoint": "1f3ba", + "unsupported_families": [], + "categories": ["Activities and events"], + "tags": [":trumpet:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f3bb", + "version": 1, + "popularity": 65, + "codepoint": "1f3bb", + "unsupported_families": [], + "categories": ["Activities and events"], + "tags": [":violin:"], + "sizes_px": [] + }, + { + "name": "emoji_u1fa89", + "version": 1, + "popularity": 64, + "codepoint": "1fa89", + "unsupported_families": [], + "categories": ["Activities and events"], + "tags": [":harp:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f941", + "version": 1, + "popularity": 63, + "codepoint": "1f941", + "unsupported_families": [], + "categories": ["Activities and events"], + "tags": [":drum:"], + "sizes_px": [] + }, + { + "name": "emoji_u1fa87", + "version": 1, + "popularity": 62, + "codepoint": "1fa87", + "unsupported_families": [], + "categories": ["Activities and events"], + "tags": [":maracas:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f3ac", + "version": 1, + "popularity": 61, + "codepoint": "1f3ac", + "unsupported_families": [], + "categories": ["Activities and events"], + "tags": [":clapper:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f50b", + "version": 1, + "popularity": 60, + "codepoint": "1f50b", + "unsupported_families": [], + "categories": ["Objects"], + "tags": [":battery-full:"], + "sizes_px": [] + }, + { + "name": "emoji_u1faab", + "version": 1, + "popularity": 59, + "codepoint": "1faab", + "unsupported_families": [], + "categories": ["Objects"], + "tags": [":battery-low:"], + "sizes_px": [] + }, + { + "name": "emoji_u1fa99", + "version": 1, + "popularity": 58, + "codepoint": "1fa99", + "unsupported_families": [], + "categories": ["Objects"], + "tags": [":coin:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f4b8", + "version": 1, + "popularity": 57, + "codepoint": "1f4b8", + "unsupported_families": [], + "categories": ["Objects"], + "tags": [":money-with-wings:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f48e", + "version": 1, + "popularity": 56, + "codepoint": "1f48e", + "unsupported_families": [], + "categories": ["Objects"], + "tags": [":gem-stone:"], + "sizes_px": [] + }, + { + "name": "emoji_u2696_fe0f", + "version": 1, + "popularity": 55, + "codepoint": "2696_fe0f", + "unsupported_families": [], + "categories": ["Objects"], + "tags": [":balance-scale:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f4a1", + "version": 1, + "popularity": 54, + "codepoint": "1f4a1", + "unsupported_families": [], + "categories": ["Objects"], + "tags": [":light-bulb:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f393", + "version": 1, + "popularity": 53, + "codepoint": "1f393", + "unsupported_families": [], + "categories": ["Objects"], + "tags": [":graduation-cap:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f48d", + "version": 1, + "popularity": 52, + "codepoint": "1f48d", + "unsupported_families": [], + "categories": ["Objects"], + "tags": [":ring:"], + "sizes_px": [] + }, + { + "name": "emoji_u1faad", + "version": 1, + "popularity": 51, + "codepoint": "1faad", + "unsupported_families": [], + "categories": ["Objects"], + "tags": [":fan:"], + "sizes_px": [] + }, + { + "name": "emoji_u2602_fe0f", + "version": 1, + "popularity": 50, + "codepoint": "2602_fe0f", + "unsupported_families": [], + "categories": ["Objects"], + "tags": [":umbrella:"], + "sizes_px": [] + }, + { + "name": "emoji_u1fa8f", + "version": 1, + "popularity": 49, + "codepoint": "1fa8f", + "unsupported_families": [], + "categories": ["Objects"], + "tags": [":shovel:", ":dig:"], + "sizes_px": [] + }, + { + "name": "emoji_u2699_fe0f", + "version": 1, + "popularity": 48, + "codepoint": "2699_fe0f", + "unsupported_families": [], + "categories": ["Objects"], + "tags": [":gear:"], + "sizes_px": [] + }, + { + "name": "emoji_u26d3_fe0f_200d_1f4a5", + "version": 1, + "popularity": 47, + "codepoint": "26d3_fe0f_200d_1f4a5", + "unsupported_families": [], + "categories": ["Objects"], + "tags": [":broken-chain:"], + "sizes_px": [] + }, + { + "name": "emoji_u270f_fe0f", + "version": 1, + "popularity": 46, + "codepoint": "270f_fe0f", + "unsupported_families": [], + "categories": ["Objects"], + "tags": [":pencil:"], + "sizes_px": [] + }, + { + "name": "emoji_u23f0", + "version": 1, + "popularity": 45, + "codepoint": "23f0", + "unsupported_families": [], + "categories": ["Objects"], + "tags": [":alarm-clock:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f6ce_fe0f", + "version": 1, + "popularity": 44, + "codepoint": "1f6ce_fe0f", + "unsupported_families": [], + "categories": ["Objects"], + "tags": [":bellhop-bell:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f514", + "version": 1, + "popularity": 43, + "codepoint": "1f514", + "unsupported_families": [], + "categories": ["Objects"], + "tags": [":bell:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f52e", + "version": 1, + "popularity": 42, + "codepoint": "1f52e", + "unsupported_families": [], + "categories": ["Objects"], + "tags": [":crystal-ball:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f4a3", + "version": 1, + "popularity": 41, + "codepoint": "1f4a3", + "unsupported_families": [], + "categories": ["Objects"], + "tags": [":bomb:"], + "sizes_px": [] + }, + { + "name": "emoji_u1faa4", + "version": 1, + "popularity": 40, + "codepoint": "1faa4", + "unsupported_families": [], + "categories": ["Objects"], + "tags": [":mouse-trap:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f512", + "version": 1, + "popularity": 39, + "codepoint": "1f512", + "unsupported_families": [], + "categories": ["Objects"], + "tags": [":locked:"], + "sizes_px": [] + }, + { + "name": "emoji_u2648", + "version": 1, + "popularity": 38, + "codepoint": "2648", + "unsupported_families": [], + "categories": ["Symbols"], + "tags": [":Aries:"], + "sizes_px": [] + }, + { + "name": "emoji_u2649", + "version": 1, + "popularity": 37, + "codepoint": "2649", + "unsupported_families": [], + "categories": ["Symbols"], + "tags": [":Taurus:"], + "sizes_px": [] + }, + { + "name": "emoji_u264a", + "version": 1, + "popularity": 36, + "codepoint": "264a", + "unsupported_families": [], + "categories": ["Symbols"], + "tags": [":Gemini:"], + "sizes_px": [] + }, + { + "name": "emoji_u264b", + "version": 1, + "popularity": 35, + "codepoint": "264b", + "unsupported_families": [], + "categories": ["Symbols"], + "tags": [":Cancer:"], + "sizes_px": [] + }, + { + "name": "emoji_u264c", + "version": 1, + "popularity": 34, + "codepoint": "264c", + "unsupported_families": [], + "categories": ["Symbols"], + "tags": [":Leo:"], + "sizes_px": [] + }, + { + "name": "emoji_u264d", + "version": 1, + "popularity": 33, + "codepoint": "264d", + "unsupported_families": [], + "categories": ["Symbols"], + "tags": [":Virgo:"], + "sizes_px": [] + }, + { + "name": "emoji_u264e", + "version": 1, + "popularity": 32, + "codepoint": "264e", + "unsupported_families": [], + "categories": ["Symbols"], + "tags": [":Libra:"], + "sizes_px": [] + }, + { + "name": "emoji_u264f", + "version": 1, + "popularity": 31, + "codepoint": "264f", + "unsupported_families": [], + "categories": ["Symbols"], + "tags": [":Scorpio:"], + "sizes_px": [] + }, + { + "name": "emoji_u2650", + "version": 1, + "popularity": 30, + "codepoint": "2650", + "unsupported_families": [], + "categories": ["Symbols"], + "tags": [":Sagittarius:"], + "sizes_px": [] + }, + { + "name": "emoji_u2651", + "version": 1, + "popularity": 29, + "codepoint": "2651", + "unsupported_families": [], + "categories": ["Symbols"], + "tags": [":Capricorn:"], + "sizes_px": [] + }, + { + "name": "emoji_u2652", + "version": 1, + "popularity": 28, + "codepoint": "2652", + "unsupported_families": [], + "categories": ["Symbols"], + "tags": [":Aquarius:"], + "sizes_px": [] + }, + { + "name": "emoji_u2653", + "version": 1, + "popularity": 27, + "codepoint": "2653", + "unsupported_families": [], + "categories": ["Symbols"], + "tags": [":Pisces:"], + "sizes_px": [] + }, + { + "name": "emoji_u26ce", + "version": 1, + "popularity": 26, + "codepoint": "26ce", + "unsupported_families": [], + "categories": ["Symbols"], + "tags": [":Ophiuchus:"], + "sizes_px": [] + }, + { + "name": "emoji_u2757", + "version": 1, + "popularity": 25, + "codepoint": "2757", + "unsupported_families": [], + "categories": ["Symbols"], + "tags": [":exclamation:", ":exclamation-mark:"], + "sizes_px": [] + }, + { + "name": "emoji_u2753", + "version": 1, + "popularity": 24, + "codepoint": "2753", + "unsupported_families": [], + "categories": ["Symbols"], + "tags": [":question:", ":question-mark:", ":?:"], + "sizes_px": [] + }, + { + "name": "emoji_u2049_fe0f", + "version": 1, + "popularity": 23, + "codepoint": "2049_fe0f", + "unsupported_families": [], + "categories": ["Symbols"], + "tags": [":exclamation-question-mark:", ":!?:"], + "sizes_px": [] + }, + { + "name": "emoji_u203c_fe0f", + "version": 1, + "popularity": 22, + "codepoint": "203c_fe0f", + "unsupported_families": [], + "categories": ["Symbols"], + "tags": [":exclamation-double:", ":!!:"], + "sizes_px": [] + }, + { + "name": "emoji_u274c", + "version": 1, + "popularity": 21, + "codepoint": "274c", + "unsupported_families": [], + "categories": ["Symbols"], + "tags": [":cross-mark:", ":x:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f198", + "version": 1, + "popularity": 20, + "codepoint": "1f198", + "unsupported_families": [], + "categories": ["Symbols"], + "tags": [":sos:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f4f4", + "version": 1, + "popularity": 19, + "codepoint": "1f4f4", + "unsupported_families": [], + "categories": ["Symbols"], + "tags": [":phone-off:"], + "sizes_px": [] + }, + { + "name": "emoji_u2622_fe0f", + "version": 1, + "popularity": 18, + "codepoint": "2622_fe0f", + "unsupported_families": [], + "categories": ["Symbols"], + "tags": [":radioactive:"], + "sizes_px": [] + }, + { + "name": "emoji_u2623_fe0f", + "version": 1, + "popularity": 17, + "codepoint": "2623_fe0f", + "unsupported_families": [], + "categories": ["Symbols"], + "tags": [":biohazard:"], + "sizes_px": [] + }, + { + "name": "emoji_u26a0_fe0f", + "version": 1, + "popularity": 16, + "codepoint": "26a0_fe0f", + "unsupported_families": [], + "categories": ["Symbols"], + "tags": [":warning:"], + "sizes_px": [] + }, + { + "name": "emoji_u2705", + "version": 1, + "popularity": 15, + "codepoint": "2705", + "unsupported_families": [], + "categories": ["Symbols"], + "tags": [":check-mark:", ":check-mark-green:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f195", + "version": 1, + "popularity": 14, + "codepoint": "1f195", + "unsupported_families": [], + "categories": ["Symbols"], + "tags": [":new:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f193", + "version": 1, + "popularity": 13, + "codepoint": "1f193", + "unsupported_families": [], + "categories": ["Symbols"], + "tags": [":free:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f199", + "version": 1, + "popularity": 12, + "codepoint": "1f199", + "unsupported_families": [], + "categories": ["Symbols"], + "tags": [":up!:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f192", + "version": 1, + "popularity": 11, + "codepoint": "1f192", + "unsupported_families": [], + "categories": ["Symbols"], + "tags": [":cool:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f6ae", + "version": 1, + "popularity": 10, + "codepoint": "1f6ae", + "unsupported_families": [], + "categories": ["Symbols"], + "tags": [":litter:"], + "sizes_px": [] + }, + { + "name": "emoji_u262e_fe0f", + "version": 1, + "popularity": 9, + "codepoint": "262e_fe0f", + "unsupported_families": [], + "categories": ["Symbols"], + "tags": [":peace-symbol:"], + "sizes_px": [] + }, + { + "name": "emoji_u262f_fe0f", + "version": 1, + "popularity": 8, + "codepoint": "262f_fe0f", + "unsupported_families": [], + "categories": ["Symbols"], + "tags": [":yin-yang:"], + "sizes_px": [] + }, + { + "name": "emoji_u267e_fe0f", + "version": 1, + "popularity": 7, + "codepoint": "267e_fe0f", + "unsupported_families": [], + "categories": ["Symbols"], + "tags": [":infinity:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f3b6", + "version": 1, + "popularity": 6, + "codepoint": "1f3b6", + "unsupported_families": [], + "categories": ["Symbols"], + "tags": [":musical-notes:"], + "sizes_px": [] + }, + { + "name": "emoji_u2795", + "version": 1, + "popularity": 5, + "codepoint": "2795", + "unsupported_families": [], + "categories": ["Symbols"], + "tags": [":plus-sign:", ":+:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f3c1", + "version": 1, + "popularity": 4, + "codepoint": "1f3c1", + "unsupported_families": [], + "categories": ["Flags"], + "tags": [":chequered-flag:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f6a9", + "version": 1, + "popularity": 3, + "codepoint": "1f6a9", + "unsupported_families": [], + "categories": ["Flags"], + "tags": [":triangular-flag:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f3f4", + "version": 1, + "popularity": 2, + "codepoint": "1f3f4", + "unsupported_families": [], + "categories": ["Flags"], + "tags": [":black-flag:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f3f3_fe0f", + "version": 1, + "popularity": 1, + "codepoint": "1f3f3_fe0f", + "unsupported_families": [], + "categories": ["Flags"], + "tags": [":white-flag:"], + "sizes_px": [] + } + ] +} diff --git a/src/lib/components/animated-emoji-picker/index.ts b/src/lib/components/animated-emoji-picker/index.ts new file mode 100644 index 0000000..49f0c3a --- /dev/null +++ b/src/lib/components/animated-emoji-picker/index.ts @@ -0,0 +1,2 @@ +export { default as AnimatedEmojiPicker } from './EmojiPicker.svelte'; +export { default as PopoverAnimatedEmojiPicker } from './PopoverEmojiPicker.svelte'; diff --git a/src/lib/components/atproto-handle-popup/AtprotoHandlePopup.svelte b/src/lib/components/atproto-handle-popup/AtprotoHandlePopup.svelte new file mode 100644 index 0000000..34fe4a1 --- /dev/null +++ b/src/lib/components/atproto-handle-popup/AtprotoHandlePopup.svelte @@ -0,0 +1,68 @@ + + +
+ + search(inputValue)} + onkeydown={(e) => { + if (e.key === 'Enter' && results.length === 0 && inputValue) { + e.preventDefault(); + select({ handle: inputValue, displayName: '', avatar: '', did: '' }); + } + }} + class={cn(inputVariants(), 'w-full')} + placeholder="handle" + aria-label="enter your handle" + /> + {#if results.length > 0} + + {#each results as actor (actor.did)} + select(actor)} + class="data-selected:bg-accent-100 dark:data-selected:bg-accent-600/30 my-0.5 flex w-full cursor-pointer items-center gap-2 rounded-xl p-2 px-2" + > + + {actor.handle} + + {/each} + + {/if} + +
diff --git a/src/lib/components/atproto-handle-popup/helper.ts b/src/lib/components/atproto-handle-popup/helper.ts new file mode 100644 index 0000000..691f43c --- /dev/null +++ b/src/lib/components/atproto-handle-popup/helper.ts @@ -0,0 +1,31 @@ +export type Profile = { + handle: string; + displayName: string; + avatar: string; + did: string; +}; + +/** + * Searches for actors with typeahead/autocomplete functionality. + */ +export async function searchActorsTypeahead( + q: string, + limit: number = 10, + host?: string +): Promise<{ + actors: Profile[]; + q: string; +}> { + host ??= 'https://public.api.bsky.app'; + + const response = await fetch( + host + '/xrpc/app.bsky.actor.searchActorsTypeahead?q=' + q + '&limit=' + limit + ); + + if (!response.ok) return { actors: [], q }; + + const data = await response.json(); + console.log(data); + + return { actors: data.actors, q }; +} diff --git a/src/lib/components/atproto-handle-popup/index.ts b/src/lib/components/atproto-handle-popup/index.ts new file mode 100644 index 0000000..04f5e11 --- /dev/null +++ b/src/lib/components/atproto-handle-popup/index.ts @@ -0,0 +1,2 @@ +export { default as AtprotoHandlePopup } from './AtprotoHandlePopup.svelte'; +export type { Profile } from './helper'; diff --git a/src/lib/components/atproto-login/AtprotoLogin.svelte b/src/lib/components/atproto-login/AtprotoLogin.svelte new file mode 100644 index 0000000..368a986 --- /dev/null +++ b/src/lib/components/atproto-login/AtprotoLogin.svelte @@ -0,0 +1,217 @@ + + +
onSubmit(e)} + action={formAction} + method={formMethod} + class={cn('flex flex-col gap-2', className)} + {...rest} +> + + Login with your internet handle + +
+ like your bluesky account +
+ + {#if showRecentLogins} +
Recent logins
+ +
+ {#each Object.values(recentLogins) + .filter((l) => l.handle && l.handle !== 'handle.invalid') + .slice(0, 4) as recentLogin (recentLogin.did)} +
+
+ + {recentLogin.handle} +
+ + +
+ {/each} +
+ {:else if !selectedActor} +
+ +
+ {:else} +
+
+ + {selectedActor.handle} +
+ +
+ {/if} + + {#if error} +

{error}

+ {/if} + +
+ {#if showRecentLogins} +
Or login with new handle
+ + + {:else} + + {/if} +
+ + {#if signup} +
+ Don't have an account? + +
+ {/if} +
diff --git a/src/lib/components/atproto-login/AtprotoLoginModal.svelte b/src/lib/components/atproto-login/AtprotoLoginModal.svelte new file mode 100644 index 0000000..7ea8fe1 --- /dev/null +++ b/src/lib/components/atproto-login/AtprotoLoginModal.svelte @@ -0,0 +1,35 @@ + + + + {#key open} + + {/key} + diff --git a/src/lib/components/atproto-login/index.ts b/src/lib/components/atproto-login/index.ts new file mode 100644 index 0000000..b29eab1 --- /dev/null +++ b/src/lib/components/atproto-login/index.ts @@ -0,0 +1,22 @@ +export { default as AtprotoLogin } from './AtprotoLogin.svelte'; +export { default as AtprotoLoginModal } from './AtprotoLoginModal.svelte'; + +export type ATProtoLoginProps = { + login?: (handle: string) => Promise; + signup?: () => Promise; + formAction?: string; + formMethod?: 'dialog' | 'get' | 'post' | 'DIALOG' | 'GET' | 'POST' | null; +}; + +export function saveRecentLogin(profile: { + did: string; + handle: string; + avatar?: string; + displayName?: string; +}) { + try { + const existing = JSON.parse(localStorage.getItem('recent-logins') || '{}'); + existing[profile.did] = profile; + localStorage.setItem('recent-logins', JSON.stringify(existing)); + } catch {} +} diff --git a/src/lib/components/blog-entry/BlogEntry.svelte b/src/lib/components/blog-entry/BlogEntry.svelte new file mode 100644 index 0000000..0428573 --- /dev/null +++ b/src/lib/components/blog-entry/BlogEntry.svelte @@ -0,0 +1,80 @@ + + +
+ {#if image} +
+ + +
+
+ {/if} +
+
+ + {#if tags} + {#each tags as tag} + {#if typeof tag === 'object'} + + {:else} + + {tag} + + {/if} + {/each} + {/if} +
+
+ +

+ {@html description} +

+
+
+
diff --git a/src/lib/components/blog-entry/index.ts b/src/lib/components/blog-entry/index.ts new file mode 100644 index 0000000..fa89d0c --- /dev/null +++ b/src/lib/components/blog-entry/index.ts @@ -0,0 +1 @@ +export { default as BlogEntry } from './BlogEntry.svelte'; diff --git a/src/lib/components/bluesky-post/BlueskyPost.svelte b/src/lib/components/bluesky-post/BlueskyPost.svelte new file mode 100644 index 0000000..8052593 --- /dev/null +++ b/src/lib/components/bluesky-post/BlueskyPost.svelte @@ -0,0 +1,78 @@ + + +{#snippet defaultLogo()} + + + + + Bluesky + +{/snippet} + +{#if result} + +{/if} diff --git a/src/lib/components/bluesky-post/index.ts b/src/lib/components/bluesky-post/index.ts new file mode 100644 index 0000000..d8e6336 --- /dev/null +++ b/src/lib/components/bluesky-post/index.ts @@ -0,0 +1,337 @@ +import type { Embed, EmbedRecordData } from '../embed'; +import type { PostData } from '../post'; +import type { PostView } from '@atcute/bluesky/types/app/feed/defs'; +import { segmentize, type Facet, type RichtextSegment } from '@atcute/bluesky-richtext-segmenter'; + +export type BlueskyHrefs = { + profile?: (handle: string, did?: string) => string; + post?: (handle: string, postId: string) => string; + hashtag?: (tag: string) => string; +}; + +function defaultHrefs(baseUrl: string): Required { + return { + profile: (handle, did) => `${baseUrl}/profile/${did ?? handle}`, + post: (handle, postId) => `${baseUrl}/profile/${handle}/post/${postId}`, + hashtag: (tag) => `${baseUrl}/hashtag/${tag}` + }; +} + +function resolveHrefs(baseUrl: string, hrefs?: BlueskyHrefs): Required { + const defaults = defaultHrefs(baseUrl); + if (!hrefs) return defaults; + return { + profile: hrefs.profile ?? defaults.profile, + post: hrefs.post ?? defaults.post, + hashtag: hrefs.hashtag ?? defaults.hashtag + }; +} + +function escapeHtml(str: string): string { + return str + .replace(/&/g, '&') + .replace(//g, '>') + .replace(/"/g, '"') + .replace(/'/g, '''); +} + +interface MentionFeature { + $type: 'app.bsky.richtext.facet#mention'; + did: string; +} + +interface LinkFeature { + $type: 'app.bsky.richtext.facet#link'; + uri: string; +} + +interface TagFeature { + $type: 'app.bsky.richtext.facet#tag'; + tag: string; +} + +type Feature = MentionFeature | LinkFeature | TagFeature; + +const renderSegment = ( + segment: RichtextSegment, + hrefs: Required, + target?: string +) => { + const { text, features } = segment; + const escaped = escapeHtml(text); + + if (!features) { + return `${escaped}`; + } + + const feature = features[0] as Feature; + const targetAttr = target ? ` target="${target}"` : ''; + + const createLink = (href: string, text: string) => { + return `${text}`; + }; + + switch (feature.$type) { + case 'app.bsky.richtext.facet#mention': + return createLink(hrefs.profile(feature.did, feature.did), escaped); + case 'app.bsky.richtext.facet#link': + return createLink(feature.uri, escaped); + case 'app.bsky.richtext.facet#tag': + return createLink(hrefs.hashtag(feature.tag), escaped); + default: + return `${escaped}`; + } +}; + +const RichText = ( + { text, facets }: { text: string; facets?: Facet[] }, + hrefs: Required, + target?: string +) => { + const segments = segmentize(text, facets); + return segments.map((v) => renderSegment(v, hrefs, target)).join(''); +}; + +function blueskyEmbedTypeToEmbedType(type: string) { + switch (type) { + case 'app.bsky.embed.external#view': + case 'app.bsky.embed.external': + return 'external'; + case 'app.bsky.embed.images#view': + case 'app.bsky.embed.images': + return 'images'; + case 'app.bsky.embed.video#view': + case 'app.bsky.embed.video': + return 'video'; + case 'app.bsky.embed.record#view': + case 'app.bsky.embed.record': + return 'record'; + case 'app.bsky.embed.recordWithMedia#view': + case 'app.bsky.embed.recordWithMedia': + return 'recordWithMedia'; + default: + return 'unknown'; + } +} + +// eslint-disable-next-line @typescript-eslint/no-explicit-any +function extractQuotedPost( + // eslint-disable-next-line @typescript-eslint/no-explicit-any + recordView: any, + hrefs: Required, + target?: string +): EmbedRecordData | null { + if (!recordView?.author) return null; + + const id = recordView.uri?.split('/').pop(); + const author = recordView.author; + // eslint-disable-next-line @typescript-eslint/no-explicit-any + const value = recordView.value as any; + + let htmlContent = ''; + if (value?.text) { + htmlContent = RichText({ text: value.text, facets: value.facets }, hrefs, target).replace( + /\n/g, + '
' + ); + } + + // eslint-disable-next-line @typescript-eslint/no-explicit-any + const firstEmbed = recordView.embeds?.[0] as any; + let embed: Embed | undefined; + if (firstEmbed) { + const embedType = blueskyEmbedTypeToEmbedType(firstEmbed.$type); + if (embedType !== 'record' && embedType !== 'recordWithMedia' && embedType !== 'unknown') { + embed = convertEmbed(firstEmbed, hrefs, target) ?? undefined; + } + } + + return { + author: { + displayName: author.displayName || '', + handle: author.handle, + avatar: author.avatar, + href: hrefs.profile(author.handle, author.did) + }, + href: hrefs.post(author.handle, id), + htmlContent, + createdAt: value?.createdAt, + embed + }; +} + +// eslint-disable-next-line @typescript-eslint/no-explicit-any +function convertEmbed( + // eslint-disable-next-line @typescript-eslint/no-explicit-any + embedView: any, + hrefs: Required, + target?: string +): Embed | null { + const type = blueskyEmbedTypeToEmbedType(embedView?.$type); + + switch (type) { + case 'images': + return { + type: 'images', + // eslint-disable-next-line @typescript-eslint/no-explicit-any + images: embedView.images?.map((image: any) => ({ + alt: image.alt, + thumb: image.thumb, + aspectRatio: image.aspectRatio, + fullsize: image.fullsize + })) + }; + case 'external': + return embedView.external + ? { + type: 'external', + external: { + href: embedView.external.uri, + title: embedView.external.title, + description: embedView.external.description, + thumb: embedView.external.thumb + } + } + : null; + case 'video': + return embedView.playlist + ? { + type: 'video', + video: { + playlist: embedView.playlist, + thumb: embedView.thumbnail, + alt: embedView.alt, + aspectRatio: embedView.aspectRatio + } + } + : null; + case 'record': { + const record = extractQuotedPost(embedView.record, hrefs, target); + return record ? { type: 'record', record } : null; + } + default: + return null; + } +} + +// eslint-disable-next-line @typescript-eslint/no-explicit-any +function convertEmbeds( + // eslint-disable-next-line @typescript-eslint/no-explicit-any + embedView: any, + hrefs: Required, + target?: string +): Embed[] { + const type = blueskyEmbedTypeToEmbedType(embedView?.$type); + + if (type === 'recordWithMedia') { + const embeds: Embed[] = []; + if (embedView.media) { + const media = convertEmbed(embedView.media, hrefs, target); + if (media) embeds.push(media); + } + const record = extractQuotedPost(embedView.record?.record, hrefs, target); + if (record) embeds.push({ type: 'record', record }); + return embeds; + } + + const embed = convertEmbed(embedView, hrefs, target); + return embed ? [embed] : []; +} + +const nsfwLabels = ['porn', 'sexual', 'graphic-media', 'nudity']; + +function hasNSFWLabel(labels?: string[]): boolean { + if (!labels) return false; + return labels.some((label) => nsfwLabels.includes(label)); +} + +function attachSensitive(embeds: Embed[], labels?: string[]): Embed[] { + if (!hasNSFWLabel(labels)) return embeds; + return embeds.map((embed) => { + if (embed.type === 'images') return { ...embed, sensitive: true }; + if (embed.type === 'video') return { ...embed, sensitive: true }; + return embed; + }); +} + +export function blueskyPostToPostData( + data: PostView, + baseUrl: string = 'https://bsky.app', + // eslint-disable-next-line @typescript-eslint/no-explicit-any + reason?: any, + // eslint-disable-next-line @typescript-eslint/no-explicit-any + reply?: any, + hrefs?: BlueskyHrefs, + target?: string +): { postData: PostData; embeds: Embed[] } { + const resolvedHrefs = resolveHrefs(baseUrl, hrefs); + const post = data; + const id = post.uri.split('/').pop() ?? ''; + + const reposted = + reason?.$type === 'app.bsky.feed.defs#reasonRepost' && reason?.by + ? { + handle: reason.by.handle as string, + href: resolvedHrefs.profile(reason.by.handle, reason.by.did) + } + : undefined; + + const replyTo = + reply?.parent?.author + ? { + handle: reply.parent.author.handle as string, + href: resolvedHrefs.post( + reply.parent.author.handle, + reply.parent.uri?.split('/').pop() ?? '' + ) + } + : undefined; + + const labels = post.labels ? post.labels.map((label) => label.val) : undefined; + const embeds = post.embed + ? attachSensitive(convertEmbeds(post.embed, resolvedHrefs, target), labels) + : []; + + const postData: PostData = { + id, + href: resolvedHrefs.post(post.author.handle, id), + reposted, + replyTo, + author: { + displayName: post.author.displayName || '', + handle: post.author.handle, + avatar: post.author.avatar, + href: resolvedHrefs.profile(post.author.handle, post.author.did) + }, + replyCount: post.replyCount ?? 0, + repostCount: post.repostCount ?? 0, + likeCount: post.likeCount ?? 0, + createdAt: (post.record as { createdAt?: string }).createdAt ?? '', + embeds, + htmlContent: blueskyPostToHTML(post, resolvedHrefs, target), + labels + }; + + return { postData, embeds }; +} + +export function blueskyPostToHTML( + post: PostView, + hrefsOrBaseUrl: Required | string = 'https://bsky.app', + target?: string +) { + if (!post?.record) { + return ''; + } + + const hrefs = + typeof hrefsOrBaseUrl === 'string' ? defaultHrefs(hrefsOrBaseUrl) : hrefsOrBaseUrl; + const record = post.record as { text?: string; facets?: Facet[] }; + const html = RichText({ text: record.text ?? '', facets: record.facets }, hrefs, target); + + return html.replace(/\n/g, '
'); +} + +export { default as BlueskyPost } from './BlueskyPost.svelte'; +export type { BlueskyHrefs as BlueskyPostHrefs }; diff --git a/src/lib/components/chat/Chat.svelte b/src/lib/components/chat/Chat.svelte new file mode 100644 index 0000000..e69de29 diff --git a/src/lib/components/chat/ChatMessage.svelte b/src/lib/components/chat/ChatMessage.svelte new file mode 100644 index 0000000..e69de29 diff --git a/src/lib/components/chat/index.ts b/src/lib/components/chat/index.ts new file mode 100644 index 0000000..8509214 --- /dev/null +++ b/src/lib/components/chat/index.ts @@ -0,0 +1 @@ +export { default as Chat } from './Chat.svelte'; diff --git a/src/lib/components/embed/Embed.svelte b/src/lib/components/embed/Embed.svelte new file mode 100644 index 0000000..f54df8e --- /dev/null +++ b/src/lib/components/embed/Embed.svelte @@ -0,0 +1,33 @@ + + +
+ {#if embed.type === 'images'} + + {:else if embed.type === 'external' && embed.external} + + {:else if embed.type === 'video' && embed.video} +
diff --git a/src/lib/components/embed/External.svelte b/src/lib/components/embed/External.svelte new file mode 100644 index 0000000..0f29dfe --- /dev/null +++ b/src/lib/components/embed/External.svelte @@ -0,0 +1,40 @@ + + + diff --git a/src/lib/components/embed/Image.svelte b/src/lib/components/embed/Image.svelte new file mode 100644 index 0000000..dc29569 --- /dev/null +++ b/src/lib/components/embed/Image.svelte @@ -0,0 +1,47 @@ + + +{#if onclick} + +{:else} + {image.alt} +{/if} diff --git a/src/lib/components/embed/Images.svelte b/src/lib/components/embed/Images.svelte new file mode 100644 index 0000000..c30853f --- /dev/null +++ b/src/lib/components/embed/Images.svelte @@ -0,0 +1,35 @@ + + +{#if data.sensitive && showSensitive && !revealed} + {@const firstImage = data.images[0]} + +{:else if data.images.length === 1} + +{:else} +
+ {#each data.images as image (image.thumb)} + + {/each} +
+{/if} diff --git a/src/lib/components/embed/QuotedPost.svelte b/src/lib/components/embed/QuotedPost.svelte new file mode 100644 index 0000000..dd5eeab --- /dev/null +++ b/src/lib/components/embed/QuotedPost.svelte @@ -0,0 +1,51 @@ + + +{#if record.onclick} + +{:else} +
+ +
+{/if} diff --git a/src/lib/components/embed/Video.svelte b/src/lib/components/embed/Video.svelte new file mode 100644 index 0000000..b8f0d66 --- /dev/null +++ b/src/lib/components/embed/Video.svelte @@ -0,0 +1,95 @@ + + + + + + +{#if data.sensitive && showSensitive && !revealed} + +{:else} +
+ + +
+{/if} + + diff --git a/src/lib/components/embed/index.ts b/src/lib/components/embed/index.ts new file mode 100644 index 0000000..f7000f7 --- /dev/null +++ b/src/lib/components/embed/index.ts @@ -0,0 +1,17 @@ +export type { + ImageData, + EmbedImageData, + EmbedExternalData, + EmbedVideoData, + EmbedRecord, + EmbedRecordData, + UnknownEmbed, + Embed +} from './types'; + +export { default as EmbedImage } from './Image.svelte'; +export { default as EmbedImages } from './Images.svelte'; +export { default as EmbedExternal } from './External.svelte'; +export { default as EmbedVideo } from './Video.svelte'; +export { default as EmbedQuotedPost } from './QuotedPost.svelte'; +export { default as EmbedRouter } from './Embed.svelte'; diff --git a/src/lib/components/embed/types.ts b/src/lib/components/embed/types.ts new file mode 100644 index 0000000..eb7e9ea --- /dev/null +++ b/src/lib/components/embed/types.ts @@ -0,0 +1,71 @@ +export type ImageData = { + alt: string; + thumb: string; + fullsize: string; + aspectRatio?: { + width: number; + height: number; + }; +}; + +export type EmbedImageData = { + type: 'images'; + images: ImageData[]; + sensitive?: boolean; + onclick?: (image: ImageData) => void; +}; + +export type EmbedExternalData = { + type: 'external'; + external: { + href: string; + thumb: string; + title: string; + description: string; + }; +}; + +export type EmbedVideoData = { + type: 'video'; + video: { + playlist: string; + thumb: string; + alt: string; + aspectRatio?: { + width: number; + height: number; + }; + }; + sensitive?: boolean; +}; + +export type EmbedRecordData = { + author: { + displayName: string; + handle: string; + avatar?: string; + href?: string; + }; + href?: string; + htmlContent?: string; + createdAt?: string; + embed?: Embed; + onclick?: (data: EmbedRecordData, href?: string) => void; + onclickhandle?: (handle: string, href?: string) => void; +}; + +export type EmbedRecord = { + type: 'record'; + record: EmbedRecordData; +}; + +export type UnknownEmbed = { + type: 'unknown'; +} & Record; + +export type Embed = + | EmbedImageData + | EmbedExternalData + | EmbedVideoData + | EmbedRecord + | UnknownEmbed; diff --git a/src/lib/components/emoji-picker/EmojiPicker.svelte b/src/lib/components/emoji-picker/EmojiPicker.svelte new file mode 100644 index 0000000..26827d9 --- /dev/null +++ b/src/lib/components/emoji-picker/EmojiPicker.svelte @@ -0,0 +1,104 @@ + + + + +
+ + {#await emojiDatabase.db?.getEmojiByGroup(currentGroup) then emojis} + {#if emojis} + {#each emojis as emoji} + {#if isEmojiSupported(emoji.unicode)} + + {/if} + {/each} + {/if} + {/await} + +
+ {#each allGroups as group} + + {/each} +
+
diff --git a/src/lib/components/emoji-picker/PopoverEmojiPicker.svelte b/src/lib/components/emoji-picker/PopoverEmojiPicker.svelte new file mode 100644 index 0000000..f24d8e0 --- /dev/null +++ b/src/lib/components/emoji-picker/PopoverEmojiPicker.svelte @@ -0,0 +1,24 @@ + + + + {@render children?.()} + + diff --git a/src/lib/components/emoji-picker/emoji.ts b/src/lib/components/emoji-picker/emoji.ts new file mode 100644 index 0000000..cd37523 --- /dev/null +++ b/src/lib/components/emoji-picker/emoji.ts @@ -0,0 +1,63 @@ +export const allGroups = [ + [ + 0, + '😀', + 'smileys-emotion', + `` + ], + [ + 1, + '👋', + 'people-body', + `` + ], + [ + 3, + '🐱', + 'animals-nature', + `` + ], + [ + 4, + '🍎', + 'food-drink', + ` ` + ], + [ + 5, + '🏠️', + 'travel-places', + `` + ], + [ + 6, + '⚽', + 'activities', + `` + ], + [ + 7, + '📝', + 'objects', + `` + ], + [ + 8, + '⛔️', + 'symbols', + `` + ], + [ + 9, + '🏁', + 'flags', + `` + ] +].map(([id, emoji, name, svg]) => ({ id, emoji, name, svg })) as { + id: number; + emoji: string; + name: string; + svg: string; +}[]; + +export type { NativeEmoji } from 'emoji-picker-element/shared'; diff --git a/src/lib/components/emoji-picker/index.ts b/src/lib/components/emoji-picker/index.ts new file mode 100644 index 0000000..8edfb97 --- /dev/null +++ b/src/lib/components/emoji-picker/index.ts @@ -0,0 +1,4 @@ +export { default as EmojiPicker } from './EmojiPicker.svelte'; +export { default as PopoverEmojiPicker } from './PopoverEmojiPicker.svelte'; + +export { loadEmojis } from './EmojiPicker.svelte'; diff --git a/src/lib/components/github-corner/GithubCorner.svelte b/src/lib/components/github-corner/GithubCorner.svelte new file mode 100644 index 0000000..a86602b --- /dev/null +++ b/src/lib/components/github-corner/GithubCorner.svelte @@ -0,0 +1,62 @@ + + + + + View source on GitHub + + + diff --git a/src/lib/components/github-corner/index.ts b/src/lib/components/github-corner/index.ts new file mode 100644 index 0000000..62f6365 --- /dev/null +++ b/src/lib/components/github-corner/index.ts @@ -0,0 +1 @@ +export { default as GithubCorner } from './GithubCorner.svelte'; diff --git a/src/lib/components/index.ts b/src/lib/components/index.ts new file mode 100644 index 0000000..d8b785a --- /dev/null +++ b/src/lib/components/index.ts @@ -0,0 +1,29 @@ +export * from './action-buttons'; +export * from './atproto-login'; +export * from './embed'; +export * from './post'; +export * from './star-rating'; +export * from './social-icons'; +export * from './swiper-cards'; +export * from './user-profile'; +export * from './github-corner'; +export * from './chat'; +export * from './emoji-picker'; +export * from './bluesky-post'; +export * from './nested-comments'; +export * from './link-card'; +export * from './animated-emoji-picker'; +export * from './atproto-handle-popup'; +export * from './microblogging-post-creator'; + +export function numberToHumanReadable(number: number) { + if (number < 1000) { + return number; + } + + if (number < 1000000) { + return `${(number / 1000).toFixed(1)}k`; + } + + return `${(number / 1000000).toFixed(1)}m`; +} diff --git a/src/lib/components/link-card/LinkCard.svelte b/src/lib/components/link-card/LinkCard.svelte new file mode 100644 index 0000000..3d3319e --- /dev/null +++ b/src/lib/components/link-card/LinkCard.svelte @@ -0,0 +1,104 @@ + + + + +
+ {#if showMedia} + {#if meta.video && meta.videoType} + + {:else if meta.image} + {meta.imageAlt + {/if} + {/if} + + {#if showGradient} +
+ {/if} + + {#if showDomain} +
+ {href ? new URL(href).hostname.replace('www.', '') : ''} +
+ {/if} + + + {#if showDescription} +
+ {meta?.description ?? ''} +
+ {/if} +
diff --git a/src/lib/components/link-card/index.ts b/src/lib/components/link-card/index.ts new file mode 100644 index 0000000..8c1c5ee --- /dev/null +++ b/src/lib/components/link-card/index.ts @@ -0,0 +1 @@ +export { default as LinkCard } from './LinkCard.svelte'; diff --git a/src/lib/components/microblogging-post-creator/MicrobloggingPostCreator.svelte b/src/lib/components/microblogging-post-creator/MicrobloggingPostCreator.svelte new file mode 100644 index 0000000..8167d69 --- /dev/null +++ b/src/lib/components/microblogging-post-creator/MicrobloggingPostCreator.svelte @@ -0,0 +1,212 @@ + + + + + +
+ {#if dragging} +
+ + Drop {onimageadded && onvideoadded ? 'image or video' : onimageadded ? 'image' : 'video'} here + +
+ {/if} + { + const json = c as JSONContent; + content = { text: extractText(json), json }; + onupdate?.(content); + }} + class={textEditorClass} + > + {#if searchMentions && $editor} + + {/if} + + + {#if children} + {@render children()} + {/if} + + {#if maxLength} +
+ {remaining} +
+ {/if} +
+ + diff --git a/src/lib/components/microblogging-post-creator/bluesky.ts b/src/lib/components/microblogging-post-creator/bluesky.ts new file mode 100644 index 0000000..6a480b6 --- /dev/null +++ b/src/lib/components/microblogging-post-creator/bluesky.ts @@ -0,0 +1,26 @@ +import type { MentionItem } from '@foxui/text'; +import { searchActorsTypeahead } from '../atproto-handle-popup/helper'; + +export { editorJsonToBlueskyPost } from './facets'; +export type { BlueskyPostContent, BlueskyFacet } from './facets'; + +/** + * Creates a mention search function for Bluesky actors. + * Use this with the `searchMentions` prop of MicrobloggingPostCreator. + * + * @example + * ```svelte + * + * ``` + */ +export function createBlueskyMentionSearch(host?: string) { + return async (query: string): Promise => { + const result = await searchActorsTypeahead(query, 8, host); + return result.actors.map((actor) => ({ + id: actor.did, + label: actor.handle, + avatar: actor.avatar, + data: { displayName: actor.displayName } + })); + }; +} diff --git a/src/lib/components/microblogging-post-creator/facets.ts b/src/lib/components/microblogging-post-creator/facets.ts new file mode 100644 index 0000000..996ac42 --- /dev/null +++ b/src/lib/components/microblogging-post-creator/facets.ts @@ -0,0 +1,104 @@ +import type { JSONContent } from '@foxui/text'; + +interface MentionFeature { + $type: 'app.bsky.richtext.facet#mention'; + did: string; +} + +interface LinkFeature { + $type: 'app.bsky.richtext.facet#link'; + uri: string; +} + +interface TagFeature { + $type: 'app.bsky.richtext.facet#tag'; + tag: string; +} + +type Feature = MentionFeature | LinkFeature | TagFeature; + +interface FacetIndex { + byteStart: number; + byteEnd: number; +} + +export interface BlueskyFacet { + index: FacetIndex; + features: Feature[]; +} + +export interface BlueskyPostContent { + text: string; + facets: BlueskyFacet[]; +} + +const encoder = new TextEncoder(); + +function byteLength(str: string): number { + return encoder.encode(str).byteLength; +} + +export function editorJsonToBlueskyPost(json: JSONContent): BlueskyPostContent { + let text = ''; + const facets: BlueskyFacet[] = []; + + function processNode(node: JSONContent) { + if (node.type === 'doc') { + for (const child of node.content ?? []) { + processNode(child); + } + } else if (node.type === 'paragraph') { + if (text.length > 0) text += '\n'; + for (const child of node.content ?? []) { + processInline(child); + } + } + } + + function processInline(node: JSONContent) { + if (node.type === 'mention') { + const label = `@${node.attrs?.label ?? node.attrs?.id}`; + const byteStart = byteLength(text); + text += label; + const byteEnd = byteLength(text); + facets.push({ + index: { byteStart, byteEnd }, + features: [{ $type: 'app.bsky.richtext.facet#mention', did: node.attrs?.id }] + }); + } else if (node.type === 'text') { + const nodeText = node.text ?? ''; + const linkMark = node.marks?.find((m) => m.type === 'link'); + if (linkMark) { + const byteStart = byteLength(text); + text += nodeText; + const byteEnd = byteLength(text); + facets.push({ + index: { byteStart, byteEnd }, + features: [{ $type: 'app.bsky.richtext.facet#link', uri: linkMark.attrs?.href }] + }); + } else { + text += nodeText; + } + } + } + + processNode(json); + + // Detect hashtags in the final text + const hashtagRegex = + /(?<=^|\s)#([a-zA-Z\u00C0-\u024F\u1E00-\u1EFF][\w\u00C0-\u024F\u1E00-\u1EFF]*)/g; + let match; + while ((match = hashtagRegex.exec(text)) !== null) { + const fullMatch = match[0]; + const tag = match[1]; + const charStart = match.index; + const byteStart = byteLength(text.slice(0, charStart)); + const byteEnd = byteStart + byteLength(fullMatch); + facets.push({ + index: { byteStart, byteEnd }, + features: [{ $type: 'app.bsky.richtext.facet#tag', tag }] + }); + } + + return { text, facets }; +} diff --git a/src/lib/components/microblogging-post-creator/index.ts b/src/lib/components/microblogging-post-creator/index.ts new file mode 100644 index 0000000..b8939ee --- /dev/null +++ b/src/lib/components/microblogging-post-creator/index.ts @@ -0,0 +1,8 @@ +export { default as MicrobloggingPostCreator } from './MicrobloggingPostCreator.svelte'; +export type { MicrobloggingPostContent } from './MicrobloggingPostCreator.svelte'; +export { + createBlueskyMentionSearch, + editorJsonToBlueskyPost, + type BlueskyPostContent, + type BlueskyFacet +} from './bluesky'; diff --git a/src/lib/components/nested-comments/Comment.svelte b/src/lib/components/nested-comments/Comment.svelte new file mode 100644 index 0000000..6cd4ee5 --- /dev/null +++ b/src/lib/components/nested-comments/Comment.svelte @@ -0,0 +1,98 @@ + + +
+ + +
+ {#if expanded} + (expanded = false)} + /> + {:else} + (expanded = true)} + showAvatar={true} + compact + {logo} + {target} + class="opacity-60 grayscale hover:opacity-100 hover:grayscale-0 transition-all duration-200" + /> + {/if} +
+ + {#if comment.replies?.length && depth <= maxDepth && expanded} +
+ {#each comment.replies.toSorted(sort) as reply (reply.id ?? reply.href ?? reply.createdAt + reply.author.handle)} + + {/each} +
+ {/if} +
diff --git a/src/lib/components/nested-comments/NestedComments.svelte b/src/lib/components/nested-comments/NestedComments.svelte new file mode 100644 index 0000000..10adf72 --- /dev/null +++ b/src/lib/components/nested-comments/NestedComments.svelte @@ -0,0 +1,40 @@ + + +{#if comments.length > 0} +
+ {#each sorted as comment (comment.id ?? comment.href ?? comment.createdAt + comment.author.handle)} + + {/each} +
+{/if} diff --git a/src/lib/components/nested-comments/index.ts b/src/lib/components/nested-comments/index.ts new file mode 100644 index 0000000..c7e694b --- /dev/null +++ b/src/lib/components/nested-comments/index.ts @@ -0,0 +1,16 @@ +import type { PostData } from '../post'; + +export { default as NestedComments } from './NestedComments.svelte'; + +export type CommentSortFn = (a: PostData, b: PostData) => number; + +export const commentSort = { + oldestFirst: ((a, b) => + new Date(a.createdAt).getTime() - new Date(b.createdAt).getTime()) satisfies CommentSortFn, + newestFirst: ((a, b) => + new Date(b.createdAt).getTime() - new Date(a.createdAt).getTime()) satisfies CommentSortFn, + mostLiked: ((a, b) => (b.likeCount ?? 0) - (a.likeCount ?? 0)) satisfies CommentSortFn, + leastLiked: ((a, b) => (a.likeCount ?? 0) - (b.likeCount ?? 0)) satisfies CommentSortFn, + mostReplies: ((a, b) => (b.replyCount ?? 0) - (a.replyCount ?? 0)) satisfies CommentSortFn, + leastReplies: ((a, b) => (a.replyCount ?? 0) - (b.replyCount ?? 0)) satisfies CommentSortFn +}; diff --git a/src/lib/components/post/Post.svelte b/src/lib/components/post/Post.svelte new file mode 100644 index 0000000..a7a3e17 --- /dev/null +++ b/src/lib/components/post/Post.svelte @@ -0,0 +1,181 @@ + + +
+ {#if data.reposted} +
+ + + + +
+ reposted by + {#if onclickhandle} + + {:else} + + @{data.reposted.handle} + + {/if} +
+
+ {/if} + {#if data.replyTo} +
+ + + + +
+ replying to + {#if onclickhandle} + + {:else} + + @{data.replyTo.handle} + + {/if} +
+
+ {/if} + +
+ {#if showAvatar} + {@const avatarClass = compact ? 'size-7' : 'size-10'} + {#if onclickavatar} + + {:else if onclickhandle} + + {:else} + + + + {/if} + {/if} + +
+ + +
+ {#if data.htmlContent} + {@html sanitize(data.htmlContent, { ADD_ATTR: ['target'] })} + {:else} + {@render children?.()} + {/if} +
+ + {#if embeds?.length} + {#each embeds as embed} + + {/each} + {/if} + + {#if extraEmbeds} +
+ {@render extraEmbeds()} +
+ {/if} + + {#if actions} + + {/if} +
+
+
+ + diff --git a/src/lib/components/post/PostHeader.svelte b/src/lib/components/post/PostHeader.svelte new file mode 100644 index 0000000..dec1e37 --- /dev/null +++ b/src/lib/components/post/PostHeader.svelte @@ -0,0 +1,142 @@ + + +
+ {#if showAvatar} + {@const avatarClass = compact ? 'size-7' : 'size-10'} + {#if onclickavatar} + + {:else if onclickhandle} + + {:else} + + + + {/if} + {/if} + +
+
+
+ {#if onclickhandle} + + {:else if author.href} + + {#if author.displayName} +
+ {author.displayName} +
+ {/if} +
+ @{author.handle} +
+
+ {:else} +
+
+ {author.displayName} +
+
+ @{author.handle} +
+
+ {/if} + + · + + {#if timestamp?.href} + + + + {:else if timestamp?.onclick} + + {:else} +
+ +
+ {/if} +
+ + {#if logo} + {@render logo?.()} + {/if} +
+ +
+
diff --git a/src/lib/components/post/index.ts b/src/lib/components/post/index.ts new file mode 100644 index 0000000..a07d36e --- /dev/null +++ b/src/lib/components/post/index.ts @@ -0,0 +1,8 @@ +export type { + PostData, + PostHeaderProps, + PostProps +} from './types'; + +export { default as Post } from './Post.svelte'; +export { default as PostHeader } from './PostHeader.svelte'; diff --git a/src/lib/components/post/types.ts b/src/lib/components/post/types.ts new file mode 100644 index 0000000..0fd7641 --- /dev/null +++ b/src/lib/components/post/types.ts @@ -0,0 +1,68 @@ +import type { Snippet } from 'svelte'; +import type { Embed } from '../embed'; +import type { ActionButtonsProps } from '../action-buttons'; + +export type PostData = { + href?: string; + id?: string; + + reposted?: { handle: string; href: string }; + replyTo?: { handle: string; href: string }; + + author: { + displayName: string; + handle: string; + avatar?: string; + href?: string; + }; + + replyCount?: number; + repostCount?: number; + likeCount?: number; + + createdAt: string; + + embeds?: Embed[]; + + htmlContent?: string; + + replies?: PostData[]; + + labels?: string[]; +}; + +export type PostHeaderProps = { + author: PostData['author']; + createdAt: string; + timestamp?: { href?: string; onclick?: () => void }; + onclickhandle?: (handle: string, href?: string) => void; + onclickavatar?: () => void; + showAvatar?: boolean; + compact?: boolean; + logo?: Snippet; + target?: string; + class?: string; +}; + +export type PostProps = { + data: PostData; + class?: string; + children?: Snippet; + + embeds?: Embed[]; + showSensitive?: boolean; + extraEmbeds?: Snippet; + + actions?: ActionButtonsProps; + + onclickhandle?: (handle: string, href?: string) => void; + onclickavatar?: () => void; + + timestamp?: { href?: string; onclick?: () => void }; + + logo?: Snippet; + + showAvatar?: boolean; + compact?: boolean; + target?: string; +}; diff --git a/src/lib/components/social-icons/All.svelte b/src/lib/components/social-icons/All.svelte new file mode 100644 index 0000000..29464c3 --- /dev/null +++ b/src/lib/components/social-icons/All.svelte @@ -0,0 +1,47 @@ + + +
+ {#if discord} + + {/if} + {#if github} + + {/if} + {#if twitter} + + {/if} + {#if youtube} + + {/if} + {#if bluesky} + + {/if} + {#if facebook} + + {/if} +
diff --git a/src/lib/components/social-icons/Bluesky.svelte b/src/lib/components/social-icons/Bluesky.svelte new file mode 100644 index 0000000..44b5857 --- /dev/null +++ b/src/lib/components/social-icons/Bluesky.svelte @@ -0,0 +1,37 @@ + + + + Bluesky + + + diff --git a/src/lib/components/social-icons/Discord.svelte b/src/lib/components/social-icons/Discord.svelte new file mode 100644 index 0000000..fad935f --- /dev/null +++ b/src/lib/components/social-icons/Discord.svelte @@ -0,0 +1,37 @@ + + + + Discord + + + diff --git a/src/lib/components/social-icons/Facebook.svelte b/src/lib/components/social-icons/Facebook.svelte new file mode 100644 index 0000000..9adbd47 --- /dev/null +++ b/src/lib/components/social-icons/Facebook.svelte @@ -0,0 +1,37 @@ + + + + Facebook + + + diff --git a/src/lib/components/social-icons/Github.svelte b/src/lib/components/social-icons/Github.svelte new file mode 100644 index 0000000..1f4568a --- /dev/null +++ b/src/lib/components/social-icons/Github.svelte @@ -0,0 +1,38 @@ + + + + GitHub + + + diff --git a/src/lib/components/social-icons/Twitter.svelte b/src/lib/components/social-icons/Twitter.svelte new file mode 100644 index 0000000..8e5f437 --- /dev/null +++ b/src/lib/components/social-icons/Twitter.svelte @@ -0,0 +1,37 @@ + + + + X + + + diff --git a/src/lib/components/social-icons/Youtube.svelte b/src/lib/components/social-icons/Youtube.svelte new file mode 100644 index 0000000..a1c9d3e --- /dev/null +++ b/src/lib/components/social-icons/Youtube.svelte @@ -0,0 +1,36 @@ + + + + YouTube + + diff --git a/src/lib/components/social-icons/index.ts b/src/lib/components/social-icons/index.ts new file mode 100644 index 0000000..d004b3b --- /dev/null +++ b/src/lib/components/social-icons/index.ts @@ -0,0 +1,9 @@ +// all icons from https://simpleicons.org/ + +export { default as SocialIcons } from './All.svelte'; +export { default as Discord } from './Discord.svelte'; +export { default as Github } from './Github.svelte'; +export { default as Twitter } from './Twitter.svelte'; +export { default as Youtube } from './Youtube.svelte'; +export { default as Bluesky } from './Bluesky.svelte'; +export { default as Facebook } from './Facebook.svelte'; diff --git a/src/lib/components/star-rating/StarRating.svelte b/src/lib/components/star-rating/StarRating.svelte new file mode 100644 index 0000000..e1b86e3 --- /dev/null +++ b/src/lib/components/star-rating/StarRating.svelte @@ -0,0 +1,104 @@ + + +
+ {#if changeable} + {#each Array.from({ length: 5 }).map((_, i) => i + 1) as i} + + {/each} + {:else} + {#each Array.from({ length: 5 }).map((_, i) => i + 1) as i} + + {/each} + {/if} +
diff --git a/src/lib/components/star-rating/index.ts b/src/lib/components/star-rating/index.ts new file mode 100644 index 0000000..e735a84 --- /dev/null +++ b/src/lib/components/star-rating/index.ts @@ -0,0 +1 @@ +export { default as StarRating } from './StarRating.svelte'; diff --git a/src/lib/components/swiper-cards/CardSwiper.svelte b/src/lib/components/swiper-cards/CardSwiper.svelte new file mode 100644 index 0000000..43e2031 --- /dev/null +++ b/src/lib/components/swiper-cards/CardSwiper.svelte @@ -0,0 +1,235 @@ + + + { + if (!arrowKeys) return; + if (e.key === 'ArrowLeft') { + swipe('left'); + } else if (e.key === 'ArrowRight') { + swipe('right'); + } + }} +/> + +{#snippet DefaultCard({ image, title, description }: CardData)} +
+ {#key image} + {#if image} + {title + {/if} + {/key} +
+
+
+

{title}

+

{description}

+
+
+
+{/snippet} + +
+ +
diff --git a/src/lib/components/swiper-cards/index.ts b/src/lib/components/swiper-cards/index.ts new file mode 100644 index 0000000..f178620 --- /dev/null +++ b/src/lib/components/swiper-cards/index.ts @@ -0,0 +1,18 @@ +export type CardData = { + title?: string; + description?: string; + image?: string; + // anything else + [key: string]: unknown; +}; + +export type SwipeEventData = { + direction: Direction; + data: CardData; + index: number; + element: HTMLElement; +}; + +export type Direction = 'left' | 'right'; + +export { default as CardSwiper } from './CardSwiper.svelte'; diff --git a/src/lib/components/user-profile/UserProfile.svelte b/src/lib/components/user-profile/UserProfile.svelte new file mode 100644 index 0000000..971f942 --- /dev/null +++ b/src/lib/components/user-profile/UserProfile.svelte @@ -0,0 +1,60 @@ + + +{#if profile} +
+
+ {#if profile.banner} + + {:else} +
+ {/if} +
+
+ +
+
+

+ {profile.displayName || profile.handle} +

+
+ {profile.handle} +
+
+
+ + +
+ +
+ {@html sanitize(profile.description?.replaceAll('\n', '
') ?? '')} +
+
+{/if} diff --git a/src/lib/components/user-profile/index.ts b/src/lib/components/user-profile/index.ts new file mode 100644 index 0000000..aee956e --- /dev/null +++ b/src/lib/components/user-profile/index.ts @@ -0,0 +1 @@ +export { default as UserProfile } from './UserProfile.svelte'; diff --git a/src/routes/+page.svelte b/src/routes/+page.svelte index 9ab48ff..d06ea94 100644 --- a/src/routes/+page.svelte +++ b/src/routes/+page.svelte @@ -2,8 +2,8 @@ import { tick, onMount, onDestroy } from 'svelte'; import { goto } from '$app/navigation'; import { user } from '$lib/atproto/auth.svelte'; - import { blueskyPostToPostData } from '@foxui/social'; - import { Post } from '@foxui/social'; + import { blueskyPostToPostData } from '$lib/components'; + import { Post } from '$lib/components'; import { Loader2 } from '@lucide/svelte'; import { loadFeed, likePost, unlikePost } from '$lib/atproto/server/feed.remote'; import { cachePost, prefetchThread, feedCache, prefetchNotifications, setFeedUri } from '$lib/cache.svelte'; diff --git a/src/routes/p/[actor]/+page.svelte b/src/routes/p/[actor]/+page.svelte index dea3a76..b18146e 100644 --- a/src/routes/p/[actor]/+page.svelte +++ b/src/routes/p/[actor]/+page.svelte @@ -1,7 +1,7 @@