diff --git a/.eslintrc.js b/.eslintrc.js
index 6d44a27..f572f7a 100644
--- a/.eslintrc.js
+++ b/.eslintrc.js
@@ -18,7 +18,7 @@ module.exports = {
'no-prototype-builtins': 'off',
'id-length': [
'warn',
- { exceptions: ['x', 'i', 'j', 't', 'Q', 'A', 'C', 'q', 'a', 'b'] },
+ { exceptions: ['x', 'i', 'j', 't', 'Q', 'A', 'C', 'q', 'a', 'b', 'e'] },
],
},
root: true,
diff --git a/.gitignore b/.gitignore
index 1f18056..f9ef1ee 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,5 +1,5 @@
node_modules/
.next/
out/
-
/.vs
+public/
diff --git a/src/components/comments.js b/src/components/comments.js
new file mode 100644
index 0000000..5323f09
--- /dev/null
+++ b/src/components/comments.js
@@ -0,0 +1,227 @@
+import React, { useState } from 'react'
+
+import ReactButton from './reactButton.js'
+import Modal from './modal.js'
+
+import styles from './comments.module.css'
+
+function CommentInput({ onSubmit, onCancel }) {
+ const [val, setVal] = useState('')
+ return (
+
+ )
+}
+
+function Comment({ comment, index, onComment, onDelete, onReact, uid }) {
+ const [displayed, setDisplayed] = useState(true)
+ const [commenting, setCommenting] = useState(false)
+ const { content, subComments, date, user, reacts, admin } = comment
+ const own = uid === user
+
+ const commentStyle = admin
+ ? styles.adminComment
+ : own
+ ? styles.ownComment
+ : ''
+
+ return (
+
+
+
+
+
{
+ setDisplayed(!displayed)
+ }}
+ >
+ {displayed ? '[-]' : '[+]'}
+
+
User #{user}
+
+
{date}
+
+
+
{content}
+
+ {
+ setCommenting(true)
+ }}
+ >
+ Reply...
+
+ {own && (
+ {
+ onDelete([index])
+ }}
+ >
+ Delete
+
+ )}
+ {
+ onReact([index], reaction, isDelete)
+ }}
+ uid={uid}
+ existingReacts={reacts}
+ />
+
+ {commenting && (
+
{
+ setCommenting(false)
+ }}
+ onSubmit={(e) => {
+ onComment([index], e)
+ setCommenting(false)
+ }}
+ />
+ )}
+
+
+
+ {subComments &&
+ subComments.map((sc, i) => {
+ return (
+ {
+ onReact([...path, index], reaction, isDelete)
+ }}
+ onDelete={(path) => {
+ onDelete([...path, index])
+ }}
+ onComment={(path, content) => {
+ onComment([...path, index], content)
+ }}
+ index={i}
+ key={i}
+ uid={uid}
+ />
+ )
+ })}
+
+
+ )
+}
+
+function countComments(comments) {
+ return comments.reduce((acc, comment) => {
+ if (comment.subComments) {
+ acc += countComments(comment.subComments) + 1
+ } else {
+ acc += 1
+ }
+ return acc
+ }, 0)
+}
+
+export default function Comments({
+ comments,
+ onComment,
+ onDelete,
+ onReact,
+ uid,
+}) {
+ const [addingNewComment, setAddingNewComment] = useState(false)
+ const [commentsShowing, setCommentsShowing] = useState(false)
+ const commentCount = comments ? countComments(comments) : 0
+
+ return (
+
+ {commentsShowing ? (
+
{
+ setCommentsShowing(false)
+ }}
+ >
+ {comments && comments.length > 0
+ ? comments.map((comment, i) => {
+ return (
+
+ )
+ })
+ : null}
+ {commentCount !== 0 ? (
+
+ {
+ setAddingNewComment(true)
+ }}
+ >
+ New comment
+
+
+ ) : null}
+ {addingNewComment ? (
+ {
+ if (!e) {
+ alert('Írj be valamit, hogy kommentelhess...')
+ return
+ }
+ setAddingNewComment(false)
+ onComment([], e)
+ }}
+ onCancel={() => {
+ setAddingNewComment(false)
+ if (commentCount === 0) {
+ setCommentsShowing(false)
+ }
+ }}
+ />
+ ) : null}
+
+ ) : null}
+
{
+ setCommentsShowing(true)
+ if (commentCount === 0) {
+ setAddingNewComment(true)
+ }
+ }}
+ >
+
+ {commentCount === 0
+ ? 'New comment'
+ : `Show ${commentCount} comment${commentCount > 1 ? 's' : ''}`}
+
+
+
+ )
+}
diff --git a/src/components/comments.module.css b/src/components/comments.module.css
new file mode 100644
index 0000000..91e3a12
--- /dev/null
+++ b/src/components/comments.module.css
@@ -0,0 +1,62 @@
+.comment {
+ margin-left: 25px;
+ padding: 8px 0px;
+}
+
+.commentData {
+ padding: 5px 2px;
+ border-left: 2px solid var(--text-color);
+ border-radius: 3px;
+}
+
+.commentData:hover {
+ background-color: var(--hoover-color);
+}
+
+.commentHeader {
+ display: flex;
+ justify-content: space-between;
+}
+
+.commentHeader > div {
+ font-weight: bold;
+ margin: 2px;
+}
+
+.userContainer {
+ display: flex;
+ flex-direction: row;
+}
+
+.userContainer > div {
+ padding: 0px 3px;
+}
+
+.commentText {
+ margin: 2px;
+ padding: 10px 5px;
+}
+
+.ownComment {
+ border-left: 2px solid green;
+}
+
+.showHide {
+ cursor: pointer;
+}
+
+.hidden {
+ display: none;
+}
+
+.commentAreaContainer {
+ margin: 0px 8px 3px 8px;
+}
+
+.commentAreaContainer > div {
+ margin: 5px 0px;
+}
+
+.adminComment {
+ border-left: 2px solid yellow;
+}
diff --git a/src/components/composer.js b/src/components/composer.js
new file mode 100644
index 0000000..e9fc533
--- /dev/null
+++ b/src/components/composer.js
@@ -0,0 +1,119 @@
+import React, { useState } from 'react'
+
+import Modal from './modal'
+
+import styles from './composer.module.css'
+
+function FileUploader({ onChange }) {
+ return (
+
+ )
+}
+
+export default function Composer({ onSubmit }) {
+ const [editorShowing, setEditorShowing] = useState(false)
+ const [val, setVal] = useState('')
+ const [type, setType] = useState('public')
+ const [title, setTitle] = useState('')
+ const [file, setFile] = useState()
+
+ return (
+ <>
+ {
+ setEditorShowing(true)
+ }}
+ className={styles.new}
+ >
+ Új bejegyzés / feedback
+
+ {editorShowing && (
+ {
+ setEditorShowing(false)
+ }}
+ >
+
+
+ )}
+ >
+ )
+}
diff --git a/src/components/composer.module.css b/src/components/composer.module.css
new file mode 100644
index 0000000..9bdf88b
--- /dev/null
+++ b/src/components/composer.module.css
@@ -0,0 +1,32 @@
+.container {
+ display: flex;
+ flex-flow: column;
+}
+
+.container > input,
+.container > textarea {
+ margin: 5px 0px;
+ padding: 4px;
+}
+
+.typeSelector {
+ display: flex;
+ align-items: center;
+}
+
+.tip {
+ font-size: 10px;
+ margin: 0px 10px;
+}
+
+.new {
+ padding: 10px;
+ text-align: center;
+ border: 2px dashed var(--text-color);
+ border-radius: 3px;
+ cursor: pointer;
+}
+
+.new:hover {
+ background-color: var(--hoover-color);
+}
diff --git a/src/components/dbSelector.module.css b/src/components/dbSelector.module.css
index 81779c7..5c247a9 100644
--- a/src/components/dbSelector.module.css
+++ b/src/components/dbSelector.module.css
@@ -15,7 +15,7 @@
}
.listItem:hover {
- background-color: #666;
+ background-color: var(--hoover-color);
}
.text {
diff --git a/src/components/modal.js b/src/components/modal.js
index 8c449ab..cc51083 100644
--- a/src/components/modal.js
+++ b/src/components/modal.js
@@ -46,7 +46,7 @@ export default function Modal(props) {
❌
)}
- {props.children}
+ {props.children}
)
diff --git a/src/components/modal.module.css b/src/components/modal.module.css
index 4723bd0..a1a03e2 100644
--- a/src/components/modal.module.css
+++ b/src/components/modal.module.css
@@ -1,4 +1,5 @@
.modal {
+ z-index: 9999;
position: fixed;
top: 0;
left: 0;
@@ -8,16 +9,19 @@
}
.modalContent {
+ display: flex;
+ align-items: stretch;
+ max-height: 80%;
+ width: 80%;
position: fixed;
background: var(--background-color);
- width: 70%;
height: auto;
top: 50%;
left: 50%;
transform: translate(-50%, -50%);
- border-radius: 5px;
+ border-radius: 8px;
- padding: 20px;
+ padding: 20px 30px;
cursor: auto;
}
@@ -26,8 +30,14 @@
font-size: 18px;
position: absolute;
- position: absolute;
top: 10px;
right: 10px;
display: inline;
}
+
+.children {
+ max-height: 100%;
+ width: 100%;
+ overflow-y: scroll;
+ overflow-x: hidden;
+}
diff --git a/src/components/newsEntry.js b/src/components/newsEntry.js
new file mode 100644
index 0000000..565b42e
--- /dev/null
+++ b/src/components/newsEntry.js
@@ -0,0 +1,67 @@
+import React from 'react'
+
+import ReactButton from './reactButton.js'
+import Comments from './comments.js'
+
+import styles from './newsEntry.module.css'
+
+export default function NewsEntry({
+ newsItem,
+ uid,
+ onReact,
+ onComment,
+ onDelete,
+ onPostDelete,
+}) {
+ const { reacts, title, content, user, comments, date, admin } = newsItem
+
+ return (
+
+
+
+
+
+
User #{user}
+
{date}
+
+
+
+
+
+ {uid === user ? (
+ {
+ onPostDelete()
+ }}
+ >
+ Delete
+
+ ) : null}
+ {
+ onReact({ type: 'news', reaction, isDelete })
+ }}
+ />
+
+
{
+ onReact({ type: 'comment', path, reaction, isDelete })
+ }}
+ onComment={onComment}
+ onDelete={onDelete}
+ comments={comments}
+ />
+
+
+
+ )
+}
diff --git a/src/components/newsEntry.module.css b/src/components/newsEntry.module.css
new file mode 100644
index 0000000..7d1d4ae
--- /dev/null
+++ b/src/components/newsEntry.module.css
@@ -0,0 +1,44 @@
+.newsBody {
+ margin: 0px 5px;
+ font-size: 18px;
+ color: #fff;
+}
+
+.newsTitle {
+ font-size: 20px;
+ color: var(--text-color);
+ margin: 0px 5px;
+}
+
+.newsDate {
+ margin: 0px 5px;
+}
+
+.newsContainer {
+ margin: 5px 5px;
+}
+
+.adminPost {
+ border-left: 2px solid yellow;
+ border-radius: 5px;
+}
+
+.newsContainer img {
+ max-width: 100%;
+ min-width: 200px;
+}
+
+.newsHeader {
+ display: flex;
+ justify-content: space-between;
+ align-items: center;
+}
+
+.user {
+ display: flex;
+ align-items: center;
+}
+
+.newsRoot {
+ background-color: #191919;
+}
diff --git a/src/components/reactButton.js b/src/components/reactButton.js
new file mode 100644
index 0000000..11a4610
--- /dev/null
+++ b/src/components/reactButton.js
@@ -0,0 +1,108 @@
+import React, { useState } from 'react'
+
+import Tooltip from './tooltip.js'
+
+import styles from './reactButton.module.css'
+import reactions from '../data/reactions.json'
+
+function ExistingReacts({ existingReacts, onClick, uid }) {
+ return (
+
+
React
+ {existingReacts &&
+ Object.keys(existingReacts).map((key) => {
+ const currReact = existingReacts[key]
+ const react = reactions[key]
+ if (!react) {
+ return null
+ }
+ return (
+
{
+ e.stopPropagation()
+ onClick(key, currReact.includes(uid))
+ }}
+ >
+ {react.emoji} {currReact.length}
+
+ )
+ })}
+
+ )
+}
+
+function RenderEmojis({ onClick }) {
+ const [search, setSearch] = useState('')
+
+ return (
+ <>
+ {
+ setSearch(event.target.value)
+ }}
+ />
+ {Object.keys(reactions).map((key) => {
+ const reaction = reactions[key]
+ if (!key.includes(search.toLowerCase())) {
+ return null
+ }
+ return (
+ {
+ onClick(key)
+ }}
+ >
+ {reaction.emoji}
+
+ )
+ })}
+ >
+ )
+}
+
+export default function ReactButton({ onClick, existingReacts, uid }) {
+ const [opened, setOpened] = useState(false)
+
+ return (
+ {
+ setOpened(true)
+ }}
+ onMouseEnter={() => {}}
+ onMouseLeave={() => {
+ setOpened(false)
+ }}
+ >
+
(
+ {
+ onClick(key, isDelete)
+ setOpened(false)
+ }}
+ existingReacts={existingReacts}
+ />
+ )}
+ >
+
+ {
+ // setOpened(false)
+ onClick(e)
+ }}
+ />
+
+
+
+ )
+}
diff --git a/src/components/reactButton.module.css b/src/components/reactButton.module.css
new file mode 100644
index 0000000..cce9089
--- /dev/null
+++ b/src/components/reactButton.module.css
@@ -0,0 +1,40 @@
+.reactionContainer {
+ display: flex;
+ flex-wrap: wrap;
+}
+
+.reactionContainer > input {
+ width: 100%;
+ background-color: var(--background-color);
+ color: var(--text-color);
+ border: none;
+ border-radius: 3px;
+ margin: 2px 5px;
+ font-size: 16px;
+}
+
+.reactionContainer > div {
+ margin: 2px 2px;
+ padding: 0px 10px;
+ border: 1px solid #444;
+ border-radius: 6px;
+ cursor: pointer;
+ user-select: none;
+}
+
+.reactionContainer > div:hover {
+ background-color: var(--hoover-color);
+}
+
+.break {
+ flex-basis: 100%;
+ height: 0;
+}
+
+.reacted {
+ color: yellow;
+}
+
+.reactContainer {
+ display: inline-block;
+}
diff --git a/src/components/tooltip.js b/src/components/tooltip.js
new file mode 100644
index 0000000..f8a8987
--- /dev/null
+++ b/src/components/tooltip.js
@@ -0,0 +1,11 @@
+import React from 'react'
+import styles from './tooltip.module.css'
+
+export default function Tooltip({ children, text, opened }) {
+ return (
+
+ {text()}
+ {opened && {children}}
+
+ )
+}
diff --git a/src/components/tooltip.module.css b/src/components/tooltip.module.css
new file mode 100644
index 0000000..b7beba2
--- /dev/null
+++ b/src/components/tooltip.module.css
@@ -0,0 +1,28 @@
+.tooltip {
+ position: relative;
+ display: inline-block;
+}
+
+.tooltip .tooltiptext {
+ width: 300px;
+ max-width: 300px;
+ height: 250px;
+ max-height: 250px;
+ background-color: var(--background-color);
+ border-radius: 5px;
+ color: #fff;
+ text-align: center;
+ border-radius: 6px;
+ padding: 5px;
+ position: absolute;
+ z-index: 1;
+ bottom: 100%;
+ left: 0%;
+ margin-left: -60px;
+ transition: opacity 0.3s;
+
+ overflow-y: scroll;
+}
+
+.container {
+}
diff --git a/src/constants.json b/src/constants.json
index 8650745..dec44ec 100644
--- a/src/constants.json
+++ b/src/constants.json
@@ -1,6 +1,6 @@
{
"siteUrl": "https://qmining.frylabs.net/",
- "apiUrl": "https://api.frylabs.net/",
+ "apiUrl": "http://localhost:8080/",
"mobileWindowWidth": 700,
"maxQuestionsToRender": 250
}
diff --git a/src/data/reactions.json b/src/data/reactions.json
new file mode 100644
index 0000000..4cc4d06
--- /dev/null
+++ b/src/data/reactions.json
@@ -0,0 +1,5417 @@
+{
+ "grinning face": {
+ "emoji": "😀"
+ },
+ "grinning face with big eyes": {
+ "emoji": "😃"
+ },
+ "grinning face with smiling eyes": {
+ "emoji": "😄"
+ },
+ "beaming face with smiling eyes": {
+ "emoji": "😁"
+ },
+ "grinning squinting face": {
+ "emoji": "😆"
+ },
+ "grinning face with sweat": {
+ "emoji": "😅"
+ },
+ "rolling on the floor laughing": {
+ "emoji": "🤣"
+ },
+ "face with tears of joy": {
+ "emoji": "😂"
+ },
+ "slightly smiling face": {
+ "emoji": "🙂"
+ },
+ "upside-down face": {
+ "emoji": "🙃"
+ },
+ "winking face": {
+ "emoji": "😉"
+ },
+ "smiling face with smiling eyes": {
+ "emoji": "😊"
+ },
+ "smiling face with halo": {
+ "emoji": "😇"
+ },
+ "smiling face with hearts": {
+ "emoji": "🥰"
+ },
+ "smiling face with heart-eyes": {
+ "emoji": "😍"
+ },
+ "star-struck": {
+ "emoji": "🤩"
+ },
+ "face blowing a kiss": {
+ "emoji": "😘"
+ },
+ "kissing face": {
+ "emoji": "😗"
+ },
+ "smiling face": {
+ "emoji": "☺️"
+ },
+ "kissing face with closed eyes": {
+ "emoji": "😚"
+ },
+ "kissing face with smiling eyes": {
+ "emoji": "😙"
+ },
+ "smiling face with tear": {
+ "emoji": "🥲"
+ },
+ "face savoring food": {
+ "emoji": "😋"
+ },
+ "face with tongue": {
+ "emoji": "😛"
+ },
+ "winking face with tongue": {
+ "emoji": "😜"
+ },
+ "zany face": {
+ "emoji": "🤪"
+ },
+ "squinting face with tongue": {
+ "emoji": "😝"
+ },
+ "money-mouth face": {
+ "emoji": "🤑"
+ },
+ "hugging face": {
+ "emoji": "🤗"
+ },
+ "face with hand over mouth": {
+ "emoji": "🤭"
+ },
+ "shushing face": {
+ "emoji": "🤫"
+ },
+ "thinking face": {
+ "emoji": "🤔"
+ },
+ "zipper-mouth face": {
+ "emoji": "🤐"
+ },
+ "face with raised eyebrow": {
+ "emoji": "🤨"
+ },
+ "neutral face": {
+ "emoji": "😐"
+ },
+ "expressionless face": {
+ "emoji": "😑"
+ },
+ "face without mouth": {
+ "emoji": "😶"
+ },
+ "smirking face": {
+ "emoji": "😏"
+ },
+ "unamused face": {
+ "emoji": "😒"
+ },
+ "face with rolling eyes": {
+ "emoji": "🙄"
+ },
+ "grimacing face": {
+ "emoji": "😬"
+ },
+ "lying face": {
+ "emoji": "🤥"
+ },
+ "relieved face": {
+ "emoji": "😌"
+ },
+ "pensive face": {
+ "emoji": "😔"
+ },
+ "sleepy face": {
+ "emoji": "😪"
+ },
+ "drooling face": {
+ "emoji": "🤤"
+ },
+ "sleeping face": {
+ "emoji": "😴"
+ },
+ "face with medical mask": {
+ "emoji": "😷"
+ },
+ "face with thermometer": {
+ "emoji": "🤒"
+ },
+ "face with head-bandage": {
+ "emoji": "🤕"
+ },
+ "nauseated face": {
+ "emoji": "🤢"
+ },
+ "face vomiting": {
+ "emoji": "🤮"
+ },
+ "sneezing face": {
+ "emoji": "🤧"
+ },
+ "hot face": {
+ "emoji": "🥵"
+ },
+ "cold face": {
+ "emoji": "🥶"
+ },
+ "woozy face": {
+ "emoji": "🥴"
+ },
+ "dizzy face": {
+ "emoji": "😵"
+ },
+ "exploding head": {
+ "emoji": "🤯"
+ },
+ "cowboy hat face": {
+ "emoji": "🤠"
+ },
+ "partying face": {
+ "emoji": "🥳"
+ },
+ "disguised face": {
+ "emoji": "🥸"
+ },
+ "smiling face with sunglasses": {
+ "emoji": "😎"
+ },
+ "nerd face": {
+ "emoji": "🤓"
+ },
+ "face with monocle": {
+ "emoji": "🧐"
+ },
+ "confused face": {
+ "emoji": "😕"
+ },
+ "worried face": {
+ "emoji": "😟"
+ },
+ "slightly frowning face": {
+ "emoji": "🙁"
+ },
+ "frowning face": {
+ "emoji": "☹️"
+ },
+ "face with open mouth": {
+ "emoji": "😮"
+ },
+ "hushed face": {
+ "emoji": "😯"
+ },
+ "astonished face": {
+ "emoji": "😲"
+ },
+ "flushed face": {
+ "emoji": "😳"
+ },
+ "pleading face": {
+ "emoji": "🥺"
+ },
+ "frowning face with open mouth": {
+ "emoji": "😦"
+ },
+ "anguished face": {
+ "emoji": "😧"
+ },
+ "fearful face": {
+ "emoji": "😨"
+ },
+ "anxious face with sweat": {
+ "emoji": "😰"
+ },
+ "sad but relieved face": {
+ "emoji": "😥"
+ },
+ "crying face": {
+ "emoji": "😢"
+ },
+ "loudly crying face": {
+ "emoji": "😭"
+ },
+ "face screaming in fear": {
+ "emoji": "😱"
+ },
+ "confounded face": {
+ "emoji": "😖"
+ },
+ "persevering face": {
+ "emoji": "😣"
+ },
+ "disappointed face": {
+ "emoji": "😞"
+ },
+ "downcast face with sweat": {
+ "emoji": "😓"
+ },
+ "weary face": {
+ "emoji": "😩"
+ },
+ "tired face": {
+ "emoji": "😫"
+ },
+ "yawning face": {
+ "emoji": "🥱"
+ },
+ "face with steam from nose": {
+ "emoji": "😤"
+ },
+ "pouting face": {
+ "emoji": "😡"
+ },
+ "angry face": {
+ "emoji": "😠"
+ },
+ "face with symbols on mouth": {
+ "emoji": "🤬"
+ },
+ "smiling face with horns": {
+ "emoji": "😈"
+ },
+ "angry face with horns": {
+ "emoji": "👿"
+ },
+ "skull": {
+ "emoji": "💀"
+ },
+ "skull and crossbones": {
+ "emoji": "☠️"
+ },
+ "pile of poo": {
+ "emoji": "💩"
+ },
+ "clown face": {
+ "emoji": "🤡"
+ },
+ "ogre": {
+ "emoji": "👹"
+ },
+ "goblin": {
+ "emoji": "👺"
+ },
+ "ghost": {
+ "emoji": "👻"
+ },
+ "alien": {
+ "emoji": "👽"
+ },
+ "alien monster": {
+ "emoji": "👾"
+ },
+ "robot": {
+ "emoji": "🤖"
+ },
+ "grinning cat": {
+ "emoji": "😺"
+ },
+ "grinning cat with smiling eyes": {
+ "emoji": "😸"
+ },
+ "cat with tears of joy": {
+ "emoji": "😹"
+ },
+ "smiling cat with heart-eyes": {
+ "emoji": "😻"
+ },
+ "cat with wry smile": {
+ "emoji": "😼"
+ },
+ "kissing cat": {
+ "emoji": "😽"
+ },
+ "weary cat": {
+ "emoji": "🙀"
+ },
+ "crying cat": {
+ "emoji": "😿"
+ },
+ "pouting cat": {
+ "emoji": "😾"
+ },
+ "see-no-evil monkey": {
+ "emoji": "🙈"
+ },
+ "hear-no-evil monkey": {
+ "emoji": "🙉"
+ },
+ "speak-no-evil monkey": {
+ "emoji": "🙊"
+ },
+ "kiss mark": {
+ "emoji": "💋"
+ },
+ "love letter": {
+ "emoji": "💌"
+ },
+ "heart with arrow": {
+ "emoji": "💘"
+ },
+ "heart with ribbon": {
+ "emoji": "💝"
+ },
+ "sparkling heart": {
+ "emoji": "💖"
+ },
+ "growing heart": {
+ "emoji": "💗"
+ },
+ "beating heart": {
+ "emoji": "💓"
+ },
+ "revolving hearts": {
+ "emoji": "💞"
+ },
+ "two hearts": {
+ "emoji": "💕"
+ },
+ "heart decoration": {
+ "emoji": "💟"
+ },
+ "heart exclamation": {
+ "emoji": "❣️"
+ },
+ "broken heart": {
+ "emoji": "💔"
+ },
+ "red heart": {
+ "emoji": "❤️"
+ },
+ "orange heart": {
+ "emoji": "🧡"
+ },
+ "yellow heart": {
+ "emoji": "💛"
+ },
+ "green heart": {
+ "emoji": "💚"
+ },
+ "blue heart": {
+ "emoji": "💙"
+ },
+ "purple heart": {
+ "emoji": "💜"
+ },
+ "brown heart": {
+ "emoji": "🤎"
+ },
+ "black heart": {
+ "emoji": "🖤"
+ },
+ "white heart": {
+ "emoji": "🤍"
+ },
+ "hundred points": {
+ "emoji": "💯"
+ },
+ "anger symbol": {
+ "emoji": "💢"
+ },
+ "collision": {
+ "emoji": "💥"
+ },
+ "dizzy": {
+ "emoji": "💫"
+ },
+ "sweat droplets": {
+ "emoji": "💦"
+ },
+ "dashing away": {
+ "emoji": "💨"
+ },
+ "hole": {
+ "emoji": "🕳️"
+ },
+ "bomb": {
+ "emoji": "💣"
+ },
+ "speech balloon": {
+ "emoji": "💬"
+ },
+ "eye in speech bubble": {
+ "emoji": "👁️🗨️"
+ },
+ "left speech bubble": {
+ "emoji": "🗨️"
+ },
+ "right anger bubble": {
+ "emoji": "🗯️"
+ },
+ "thought balloon": {
+ "emoji": "💭"
+ },
+ "zzz": {
+ "emoji": "💤"
+ },
+ "waving hand": {
+ "emoji": "👋"
+ },
+ "raised back of hand": {
+ "emoji": "🤚"
+ },
+ "hand with fingers splayed": {
+ "emoji": "🖐️"
+ },
+ "raised hand": {
+ "emoji": "✋"
+ },
+ "vulcan salute": {
+ "emoji": "🖖"
+ },
+ "OK hand": {
+ "emoji": "👌"
+ },
+ "pinched fingers": {
+ "emoji": "🤌"
+ },
+ "pinching hand": {
+ "emoji": "🤏"
+ },
+ "victory hand": {
+ "emoji": "✌️"
+ },
+ "crossed fingers": {
+ "emoji": "🤞"
+ },
+ "love-you gesture": {
+ "emoji": "🤟"
+ },
+ "sign of the horns": {
+ "emoji": "🤘"
+ },
+ "call me hand": {
+ "emoji": "🤙"
+ },
+ "backhand index pointing left": {
+ "emoji": "👈"
+ },
+ "backhand index pointing right": {
+ "emoji": "👉"
+ },
+ "backhand index pointing up": {
+ "emoji": "👆"
+ },
+ "middle finger": {
+ "emoji": "🖕"
+ },
+ "backhand index pointing down": {
+ "emoji": "👇"
+ },
+ "index pointing up": {
+ "emoji": "☝️"
+ },
+ "thumbs up": {
+ "emoji": "👍"
+ },
+ "thumbs down": {
+ "emoji": "👎"
+ },
+ "raised fist": {
+ "emoji": "✊"
+ },
+ "oncoming fist": {
+ "emoji": "👊"
+ },
+ "left-facing fist": {
+ "emoji": "🤛"
+ },
+ "right-facing fist": {
+ "emoji": "🤜"
+ },
+ "clapping hands": {
+ "emoji": "👏"
+ },
+ "raising hands": {
+ "emoji": "🙌"
+ },
+ "open hands": {
+ "emoji": "👐"
+ },
+ "palms up together": {
+ "emoji": "🤲"
+ },
+ "handshake": {
+ "emoji": "🤝"
+ },
+ "folded hands": {
+ "emoji": "🙏"
+ },
+ "writing hand": {
+ "emoji": "✍️"
+ },
+ "nail polish": {
+ "emoji": "💅"
+ },
+ "selfie": {
+ "emoji": "🤳"
+ },
+ "flexed biceps": {
+ "emoji": "💪"
+ },
+ "mechanical arm": {
+ "emoji": "🦾"
+ },
+ "mechanical leg": {
+ "emoji": "🦿"
+ },
+ "leg": {
+ "emoji": "🦵"
+ },
+ "foot": {
+ "emoji": "🦶"
+ },
+ "ear": {
+ "emoji": "👂"
+ },
+ "ear with hearing aid": {
+ "emoji": "🦻"
+ },
+ "nose": {
+ "emoji": "👃"
+ },
+ "brain": {
+ "emoji": "🧠"
+ },
+ "anatomical heart": {
+ "emoji": "🫀"
+ },
+ "lungs": {
+ "emoji": "🫁"
+ },
+ "tooth": {
+ "emoji": "🦷"
+ },
+ "bone": {
+ "emoji": "🦴"
+ },
+ "eyes": {
+ "emoji": "👀"
+ },
+ "eye": {
+ "emoji": "👁️"
+ },
+ "tongue": {
+ "emoji": "👅"
+ },
+ "mouth": {
+ "emoji": "👄"
+ },
+ "baby": {
+ "emoji": "👶"
+ },
+ "child": {
+ "emoji": "🧒"
+ },
+ "boy": {
+ "emoji": "👦"
+ },
+ "girl": {
+ "emoji": "👧"
+ },
+ "person": {
+ "emoji": "🧑"
+ },
+ "person: blond hair": {
+ "emoji": "👱"
+ },
+ "man": {
+ "emoji": "👨"
+ },
+ "man: beard": {
+ "emoji": "🧔"
+ },
+ "man: red hair": {
+ "emoji": "👨🦰"
+ },
+ "man: curly hair": {
+ "emoji": "👨🦱"
+ },
+ "man: white hair": {
+ "emoji": "👨🦳"
+ },
+ "man: bald": {
+ "emoji": "👨🦲"
+ },
+ "woman": {
+ "emoji": "👩"
+ },
+ "woman: red hair": {
+ "emoji": "👩🦰"
+ },
+ "person: red hair": {
+ "emoji": "🧑🦰"
+ },
+ "woman: curly hair": {
+ "emoji": "👩🦱"
+ },
+ "person: curly hair": {
+ "emoji": "🧑🦱"
+ },
+ "woman: white hair": {
+ "emoji": "👩🦳"
+ },
+ "person: white hair": {
+ "emoji": "🧑🦳"
+ },
+ "woman: bald": {
+ "emoji": "👩🦲"
+ },
+ "person: bald": {
+ "emoji": "🧑🦲"
+ },
+ "woman: blond hair": {
+ "emoji": "👱♀️"
+ },
+ "man: blond hair": {
+ "emoji": "👱♂️"
+ },
+ "older person": {
+ "emoji": "🧓"
+ },
+ "old man": {
+ "emoji": "👴"
+ },
+ "old woman": {
+ "emoji": "👵"
+ },
+ "person frowning": {
+ "emoji": "🙍"
+ },
+ "man frowning": {
+ "emoji": "🙍♂️"
+ },
+ "woman frowning": {
+ "emoji": "🙍♀️"
+ },
+ "person pouting": {
+ "emoji": "🙎"
+ },
+ "man pouting": {
+ "emoji": "🙎♂️"
+ },
+ "woman pouting": {
+ "emoji": "🙎♀️"
+ },
+ "person gesturing NO": {
+ "emoji": "🙅"
+ },
+ "man gesturing NO": {
+ "emoji": "🙅♂️"
+ },
+ "woman gesturing NO": {
+ "emoji": "🙅♀️"
+ },
+ "person gesturing OK": {
+ "emoji": "🙆"
+ },
+ "man gesturing OK": {
+ "emoji": "🙆♂️"
+ },
+ "woman gesturing OK": {
+ "emoji": "🙆♀️"
+ },
+ "person tipping hand": {
+ "emoji": "💁"
+ },
+ "man tipping hand": {
+ "emoji": "💁♂️"
+ },
+ "woman tipping hand": {
+ "emoji": "💁♀️"
+ },
+ "person raising hand": {
+ "emoji": "🙋"
+ },
+ "man raising hand": {
+ "emoji": "🙋♂️"
+ },
+ "woman raising hand": {
+ "emoji": "🙋♀️"
+ },
+ "deaf person": {
+ "emoji": "🧏"
+ },
+ "deaf man": {
+ "emoji": "🧏♂️"
+ },
+ "deaf woman": {
+ "emoji": "🧏♀️"
+ },
+ "person bowing": {
+ "emoji": "🙇"
+ },
+ "man bowing": {
+ "emoji": "🙇♂️"
+ },
+ "woman bowing": {
+ "emoji": "🙇♀️"
+ },
+ "person facepalming": {
+ "emoji": "🤦"
+ },
+ "man facepalming": {
+ "emoji": "🤦♂️"
+ },
+ "woman facepalming": {
+ "emoji": "🤦♀️"
+ },
+ "person shrugging": {
+ "emoji": "🤷"
+ },
+ "man shrugging": {
+ "emoji": "🤷♂️"
+ },
+ "woman shrugging": {
+ "emoji": "🤷♀️"
+ },
+ "health worker": {
+ "emoji": "🧑⚕️"
+ },
+ "man health worker": {
+ "emoji": "👨⚕️"
+ },
+ "woman health worker": {
+ "emoji": "👩⚕️"
+ },
+ "student": {
+ "emoji": "🧑🎓"
+ },
+ "man student": {
+ "emoji": "👨🎓"
+ },
+ "woman student": {
+ "emoji": "👩🎓"
+ },
+ "teacher": {
+ "emoji": "🧑🏫"
+ },
+ "man teacher": {
+ "emoji": "👨🏫"
+ },
+ "woman teacher": {
+ "emoji": "👩🏫"
+ },
+ "judge": {
+ "emoji": "🧑⚖️"
+ },
+ "man judge": {
+ "emoji": "👨⚖️"
+ },
+ "woman judge": {
+ "emoji": "👩⚖️"
+ },
+ "farmer": {
+ "emoji": "🧑🌾"
+ },
+ "man farmer": {
+ "emoji": "👨🌾"
+ },
+ "woman farmer": {
+ "emoji": "👩🌾"
+ },
+ "cook": {
+ "emoji": "🧑🍳"
+ },
+ "man cook": {
+ "emoji": "👨🍳"
+ },
+ "woman cook": {
+ "emoji": "👩🍳"
+ },
+ "mechanic": {
+ "emoji": "🧑🔧"
+ },
+ "man mechanic": {
+ "emoji": "👨🔧"
+ },
+ "woman mechanic": {
+ "emoji": "👩🔧"
+ },
+ "factory worker": {
+ "emoji": "🧑🏭"
+ },
+ "man factory worker": {
+ "emoji": "👨🏭"
+ },
+ "woman factory worker": {
+ "emoji": "👩🏭"
+ },
+ "office worker": {
+ "emoji": "🧑💼"
+ },
+ "man office worker": {
+ "emoji": "👨💼"
+ },
+ "woman office worker": {
+ "emoji": "👩💼"
+ },
+ "scientist": {
+ "emoji": "🧑🔬"
+ },
+ "man scientist": {
+ "emoji": "👨🔬"
+ },
+ "woman scientist": {
+ "emoji": "👩🔬"
+ },
+ "technologist": {
+ "emoji": "🧑💻"
+ },
+ "man technologist": {
+ "emoji": "👨💻"
+ },
+ "woman technologist": {
+ "emoji": "👩💻"
+ },
+ "singer": {
+ "emoji": "🧑🎤"
+ },
+ "man singer": {
+ "emoji": "👨🎤"
+ },
+ "woman singer": {
+ "emoji": "👩🎤"
+ },
+ "artist": {
+ "emoji": "🧑🎨"
+ },
+ "man artist": {
+ "emoji": "👨🎨"
+ },
+ "woman artist": {
+ "emoji": "👩🎨"
+ },
+ "pilot": {
+ "emoji": "🧑✈️"
+ },
+ "man pilot": {
+ "emoji": "👨✈️"
+ },
+ "woman pilot": {
+ "emoji": "👩✈️"
+ },
+ "astronaut": {
+ "emoji": "🧑🚀"
+ },
+ "man astronaut": {
+ "emoji": "👨🚀"
+ },
+ "woman astronaut": {
+ "emoji": "👩🚀"
+ },
+ "firefighter": {
+ "emoji": "🧑🚒"
+ },
+ "man firefighter": {
+ "emoji": "👨🚒"
+ },
+ "woman firefighter": {
+ "emoji": "👩🚒"
+ },
+ "police officer": {
+ "emoji": "👮"
+ },
+ "man police officer": {
+ "emoji": "👮♂️"
+ },
+ "woman police officer": {
+ "emoji": "👮♀️"
+ },
+ "detective": {
+ "emoji": "🕵️"
+ },
+ "man detective": {
+ "emoji": "🕵️♂️"
+ },
+ "woman detective": {
+ "emoji": "🕵️♀️"
+ },
+ "guard": {
+ "emoji": "💂"
+ },
+ "man guard": {
+ "emoji": "💂♂️"
+ },
+ "woman guard": {
+ "emoji": "💂♀️"
+ },
+ "ninja": {
+ "emoji": "🥷"
+ },
+ "construction worker": {
+ "emoji": "👷"
+ },
+ "man construction worker": {
+ "emoji": "👷♂️"
+ },
+ "woman construction worker": {
+ "emoji": "👷♀️"
+ },
+ "prince": {
+ "emoji": "🤴"
+ },
+ "princess": {
+ "emoji": "👸"
+ },
+ "person wearing turban": {
+ "emoji": "👳"
+ },
+ "man wearing turban": {
+ "emoji": "👳♂️"
+ },
+ "woman wearing turban": {
+ "emoji": "👳♀️"
+ },
+ "person with skullcap": {
+ "emoji": "👲"
+ },
+ "woman with headscarf": {
+ "emoji": "🧕"
+ },
+ "person in tuxedo": {
+ "emoji": "🤵"
+ },
+ "man in tuxedo": {
+ "emoji": "🤵♂️"
+ },
+ "woman in tuxedo": {
+ "emoji": "🤵♀️"
+ },
+ "person with veil": {
+ "emoji": "👰"
+ },
+ "man with veil": {
+ "emoji": "👰♂️"
+ },
+ "woman with veil": {
+ "emoji": "👰♀️"
+ },
+ "pregnant woman": {
+ "emoji": "🤰"
+ },
+ "breast-feeding": {
+ "emoji": "🤱"
+ },
+ "woman feeding baby": {
+ "emoji": "👩🍼"
+ },
+ "man feeding baby": {
+ "emoji": "👨🍼"
+ },
+ "person feeding baby": {
+ "emoji": "🧑🍼"
+ },
+ "baby angel": {
+ "emoji": "👼"
+ },
+ "Santa Claus": {
+ "emoji": "🎅"
+ },
+ "Mrs. Claus": {
+ "emoji": "🤶"
+ },
+ "mx claus": {
+ "emoji": "🧑🎄"
+ },
+ "superhero": {
+ "emoji": "🦸"
+ },
+ "man superhero": {
+ "emoji": "🦸♂️"
+ },
+ "woman superhero": {
+ "emoji": "🦸♀️"
+ },
+ "supervillain": {
+ "emoji": "🦹"
+ },
+ "man supervillain": {
+ "emoji": "🦹♂️"
+ },
+ "woman supervillain": {
+ "emoji": "🦹♀️"
+ },
+ "mage": {
+ "emoji": "🧙"
+ },
+ "man mage": {
+ "emoji": "🧙♂️"
+ },
+ "woman mage": {
+ "emoji": "🧙♀️"
+ },
+ "fairy": {
+ "emoji": "🧚"
+ },
+ "man fairy": {
+ "emoji": "🧚♂️"
+ },
+ "woman fairy": {
+ "emoji": "🧚♀️"
+ },
+ "vampire": {
+ "emoji": "🧛"
+ },
+ "man vampire": {
+ "emoji": "🧛♂️"
+ },
+ "woman vampire": {
+ "emoji": "🧛♀️"
+ },
+ "merperson": {
+ "emoji": "🧜"
+ },
+ "merman": {
+ "emoji": "🧜♂️"
+ },
+ "mermaid": {
+ "emoji": "🧜♀️"
+ },
+ "elf": {
+ "emoji": "🧝"
+ },
+ "man elf": {
+ "emoji": "🧝♂️"
+ },
+ "woman elf": {
+ "emoji": "🧝♀️"
+ },
+ "genie": {
+ "emoji": "🧞"
+ },
+ "man genie": {
+ "emoji": "🧞♂️"
+ },
+ "woman genie": {
+ "emoji": "🧞♀️"
+ },
+ "zombie": {
+ "emoji": "🧟"
+ },
+ "man zombie": {
+ "emoji": "🧟♂️"
+ },
+ "woman zombie": {
+ "emoji": "🧟♀️"
+ },
+ "person getting massage": {
+ "emoji": "💆"
+ },
+ "man getting massage": {
+ "emoji": "💆♂️"
+ },
+ "woman getting massage": {
+ "emoji": "💆♀️"
+ },
+ "person getting haircut": {
+ "emoji": "💇"
+ },
+ "man getting haircut": {
+ "emoji": "💇♂️"
+ },
+ "woman getting haircut": {
+ "emoji": "💇♀️"
+ },
+ "person walking": {
+ "emoji": "🚶"
+ },
+ "man walking": {
+ "emoji": "🚶♂️"
+ },
+ "woman walking": {
+ "emoji": "🚶♀️"
+ },
+ "person standing": {
+ "emoji": "🧍"
+ },
+ "man standing": {
+ "emoji": "🧍♂️"
+ },
+ "woman standing": {
+ "emoji": "🧍♀️"
+ },
+ "person kneeling": {
+ "emoji": "🧎"
+ },
+ "man kneeling": {
+ "emoji": "🧎♂️"
+ },
+ "woman kneeling": {
+ "emoji": "🧎♀️"
+ },
+ "person with white cane": {
+ "emoji": "🧑🦯"
+ },
+ "man with white cane": {
+ "emoji": "👨🦯"
+ },
+ "woman with white cane": {
+ "emoji": "👩🦯"
+ },
+ "person in motorized wheelchair": {
+ "emoji": "🧑🦼"
+ },
+ "man in motorized wheelchair": {
+ "emoji": "👨🦼"
+ },
+ "woman in motorized wheelchair": {
+ "emoji": "👩🦼"
+ },
+ "person in manual wheelchair": {
+ "emoji": "🧑🦽"
+ },
+ "man in manual wheelchair": {
+ "emoji": "👨🦽"
+ },
+ "woman in manual wheelchair": {
+ "emoji": "👩🦽"
+ },
+ "person running": {
+ "emoji": "🏃"
+ },
+ "man running": {
+ "emoji": "🏃♂️"
+ },
+ "woman running": {
+ "emoji": "🏃♀️"
+ },
+ "woman dancing": {
+ "emoji": "💃"
+ },
+ "man dancing": {
+ "emoji": "🕺"
+ },
+ "person in suit levitating": {
+ "emoji": "🕴️"
+ },
+ "people with bunny ears": {
+ "emoji": "👯"
+ },
+ "men with bunny ears": {
+ "emoji": "👯♂️"
+ },
+ "women with bunny ears": {
+ "emoji": "👯♀️"
+ },
+ "person in steamy room": {
+ "emoji": "🧖"
+ },
+ "man in steamy room": {
+ "emoji": "🧖♂️"
+ },
+ "woman in steamy room": {
+ "emoji": "🧖♀️"
+ },
+ "person climbing": {
+ "emoji": "🧗"
+ },
+ "man climbing": {
+ "emoji": "🧗♂️"
+ },
+ "woman climbing": {
+ "emoji": "🧗♀️"
+ },
+ "person fencing": {
+ "emoji": "🤺"
+ },
+ "horse racing": {
+ "emoji": "🏇"
+ },
+ "skier": {
+ "emoji": "⛷️"
+ },
+ "snowboarder": {
+ "emoji": "🏂"
+ },
+ "person golfing": {
+ "emoji": "🏌️"
+ },
+ "man golfing": {
+ "emoji": "🏌️♂️"
+ },
+ "woman golfing": {
+ "emoji": "🏌️♀️"
+ },
+ "person surfing": {
+ "emoji": "🏄"
+ },
+ "man surfing": {
+ "emoji": "🏄♂️"
+ },
+ "woman surfing": {
+ "emoji": "🏄♀️"
+ },
+ "person rowing boat": {
+ "emoji": "🚣"
+ },
+ "man rowing boat": {
+ "emoji": "🚣♂️"
+ },
+ "woman rowing boat": {
+ "emoji": "🚣♀️"
+ },
+ "person swimming": {
+ "emoji": "🏊"
+ },
+ "man swimming": {
+ "emoji": "🏊♂️"
+ },
+ "woman swimming": {
+ "emoji": "🏊♀️"
+ },
+ "person bouncing ball": {
+ "emoji": "⛹️"
+ },
+ "man bouncing ball": {
+ "emoji": "⛹️♂️"
+ },
+ "woman bouncing ball": {
+ "emoji": "⛹️♀️"
+ },
+ "person lifting weights": {
+ "emoji": "🏋️"
+ },
+ "man lifting weights": {
+ "emoji": "🏋️♂️"
+ },
+ "woman lifting weights": {
+ "emoji": "🏋️♀️"
+ },
+ "person biking": {
+ "emoji": "🚴"
+ },
+ "man biking": {
+ "emoji": "🚴♂️"
+ },
+ "woman biking": {
+ "emoji": "🚴♀️"
+ },
+ "person mountain biking": {
+ "emoji": "🚵"
+ },
+ "man mountain biking": {
+ "emoji": "🚵♂️"
+ },
+ "woman mountain biking": {
+ "emoji": "🚵♀️"
+ },
+ "person cartwheeling": {
+ "emoji": "🤸"
+ },
+ "man cartwheeling": {
+ "emoji": "🤸♂️"
+ },
+ "woman cartwheeling": {
+ "emoji": "🤸♀️"
+ },
+ "people wrestling": {
+ "emoji": "🤼"
+ },
+ "men wrestling": {
+ "emoji": "🤼♂️"
+ },
+ "women wrestling": {
+ "emoji": "🤼♀️"
+ },
+ "person playing water polo": {
+ "emoji": "🤽"
+ },
+ "man playing water polo": {
+ "emoji": "🤽♂️"
+ },
+ "woman playing water polo": {
+ "emoji": "🤽♀️"
+ },
+ "person playing handball": {
+ "emoji": "🤾"
+ },
+ "man playing handball": {
+ "emoji": "🤾♂️"
+ },
+ "woman playing handball": {
+ "emoji": "🤾♀️"
+ },
+ "person juggling": {
+ "emoji": "🤹"
+ },
+ "man juggling": {
+ "emoji": "🤹♂️"
+ },
+ "woman juggling": {
+ "emoji": "🤹♀️"
+ },
+ "person in lotus position": {
+ "emoji": "🧘"
+ },
+ "man in lotus position": {
+ "emoji": "🧘♂️"
+ },
+ "woman in lotus position": {
+ "emoji": "🧘♀️"
+ },
+ "person taking bath": {
+ "emoji": "🛀"
+ },
+ "person in bed": {
+ "emoji": "🛌"
+ },
+ "people holding hands": {
+ "emoji": "🧑🤝🧑"
+ },
+ "women holding hands": {
+ "emoji": "👭"
+ },
+ "woman and man holding hands": {
+ "emoji": "👫"
+ },
+ "men holding hands": {
+ "emoji": "👬"
+ },
+ "kiss": {
+ "emoji": "💏"
+ },
+ "kiss: woman, man": {
+ "emoji": "👩❤️💋👨"
+ },
+ "kiss: man, man": {
+ "emoji": "👨❤️💋👨"
+ },
+ "kiss: woman, woman": {
+ "emoji": "👩❤️💋👩"
+ },
+ "couple with heart": {
+ "emoji": "💑"
+ },
+ "couple with heart: woman, man": {
+ "emoji": "👩❤️👨"
+ },
+ "couple with heart: man, man": {
+ "emoji": "👨❤️👨"
+ },
+ "couple with heart: woman, woman": {
+ "emoji": "👩❤️👩"
+ },
+ "family": {
+ "emoji": "👪"
+ },
+ "family: man, woman, boy": {
+ "emoji": "👨👩👦"
+ },
+ "family: man, woman, girl": {
+ "emoji": "👨👩👧"
+ },
+ "family: man, woman, girl, boy": {
+ "emoji": "👨👩👧👦"
+ },
+ "family: man, woman, boy, boy": {
+ "emoji": "👨👩👦👦"
+ },
+ "family: man, woman, girl, girl": {
+ "emoji": "👨👩👧👧"
+ },
+ "family: man, man, boy": {
+ "emoji": "👨👨👦"
+ },
+ "family: man, man, girl": {
+ "emoji": "👨👨👧"
+ },
+ "family: man, man, girl, boy": {
+ "emoji": "👨👨👧👦"
+ },
+ "family: man, man, boy, boy": {
+ "emoji": "👨👨👦👦"
+ },
+ "family: man, man, girl, girl": {
+ "emoji": "👨👨👧👧"
+ },
+ "family: woman, woman, boy": {
+ "emoji": "👩👩👦"
+ },
+ "family: woman, woman, girl": {
+ "emoji": "👩👩👧"
+ },
+ "family: woman, woman, girl, boy": {
+ "emoji": "👩👩👧👦"
+ },
+ "family: woman, woman, boy, boy": {
+ "emoji": "👩👩👦👦"
+ },
+ "family: woman, woman, girl, girl": {
+ "emoji": "👩👩👧👧"
+ },
+ "family: man, boy": {
+ "emoji": "👨👦"
+ },
+ "family: man, boy, boy": {
+ "emoji": "👨👦👦"
+ },
+ "family: man, girl": {
+ "emoji": "👨👧"
+ },
+ "family: man, girl, boy": {
+ "emoji": "👨👧👦"
+ },
+ "family: man, girl, girl": {
+ "emoji": "👨👧👧"
+ },
+ "family: woman, boy": {
+ "emoji": "👩👦"
+ },
+ "family: woman, boy, boy": {
+ "emoji": "👩👦👦"
+ },
+ "family: woman, girl": {
+ "emoji": "👩👧"
+ },
+ "family: woman, girl, boy": {
+ "emoji": "👩👧👦"
+ },
+ "family: woman, girl, girl": {
+ "emoji": "👩👧👧"
+ },
+ "speaking head": {
+ "emoji": "🗣️"
+ },
+ "bust in silhouette": {
+ "emoji": "👤"
+ },
+ "busts in silhouette": {
+ "emoji": "👥"
+ },
+ "people hugging": {
+ "emoji": "🫂"
+ },
+ "footprints": {
+ "emoji": "👣"
+ },
+ "monkey face": {
+ "emoji": "🐵"
+ },
+ "monkey": {
+ "emoji": "🐒"
+ },
+ "gorilla": {
+ "emoji": "🦍"
+ },
+ "orangutan": {
+ "emoji": "🦧"
+ },
+ "dog face": {
+ "emoji": "🐶"
+ },
+ "dog": {
+ "emoji": "🐕"
+ },
+ "guide dog": {
+ "emoji": "🦮"
+ },
+ "service dog": {
+ "emoji": "🐕🦺"
+ },
+ "poodle": {
+ "emoji": "🐩"
+ },
+ "wolf": {
+ "emoji": "🐺"
+ },
+ "fox": {
+ "emoji": "🦊"
+ },
+ "raccoon": {
+ "emoji": "🦝"
+ },
+ "cat face": {
+ "emoji": "🐱"
+ },
+ "cat": {
+ "emoji": "🐈"
+ },
+ "black cat": {
+ "emoji": "🐈⬛"
+ },
+ "lion": {
+ "emoji": "🦁"
+ },
+ "tiger face": {
+ "emoji": "🐯"
+ },
+ "tiger": {
+ "emoji": "🐅"
+ },
+ "leopard": {
+ "emoji": "🐆"
+ },
+ "horse face": {
+ "emoji": "🐴"
+ },
+ "horse": {
+ "emoji": "🐎"
+ },
+ "unicorn": {
+ "emoji": "🦄"
+ },
+ "zebra": {
+ "emoji": "🦓"
+ },
+ "deer": {
+ "emoji": "🦌"
+ },
+ "bison": {
+ "emoji": "🦬"
+ },
+ "cow face": {
+ "emoji": "🐮"
+ },
+ "ox": {
+ "emoji": "🐂"
+ },
+ "water buffalo": {
+ "emoji": "🐃"
+ },
+ "cow": {
+ "emoji": "🐄"
+ },
+ "pig face": {
+ "emoji": "🐷"
+ },
+ "pig": {
+ "emoji": "🐖"
+ },
+ "boar": {
+ "emoji": "🐗"
+ },
+ "pig nose": {
+ "emoji": "🐽"
+ },
+ "ram": {
+ "emoji": "🐏"
+ },
+ "ewe": {
+ "emoji": "🐑"
+ },
+ "goat": {
+ "emoji": "🐐"
+ },
+ "camel": {
+ "emoji": "🐪"
+ },
+ "two-hump camel": {
+ "emoji": "🐫"
+ },
+ "llama": {
+ "emoji": "🦙"
+ },
+ "giraffe": {
+ "emoji": "🦒"
+ },
+ "elephant": {
+ "emoji": "🐘"
+ },
+ "mammoth": {
+ "emoji": "🦣"
+ },
+ "rhinoceros": {
+ "emoji": "🦏"
+ },
+ "hippopotamus": {
+ "emoji": "🦛"
+ },
+ "mouse face": {
+ "emoji": "🐭"
+ },
+ "mouse": {
+ "emoji": "🐁"
+ },
+ "rat": {
+ "emoji": "🐀"
+ },
+ "hamster": {
+ "emoji": "🐹"
+ },
+ "rabbit face": {
+ "emoji": "🐰"
+ },
+ "rabbit": {
+ "emoji": "🐇"
+ },
+ "chipmunk": {
+ "emoji": "🐿️"
+ },
+ "beaver": {
+ "emoji": "🦫"
+ },
+ "hedgehog": {
+ "emoji": "🦔"
+ },
+ "bat": {
+ "emoji": "🦇"
+ },
+ "bear": {
+ "emoji": "🐻"
+ },
+ "polar bear": {
+ "emoji": "🐻❄️"
+ },
+ "koala": {
+ "emoji": "🐨"
+ },
+ "panda": {
+ "emoji": "🐼"
+ },
+ "sloth": {
+ "emoji": "🦥"
+ },
+ "otter": {
+ "emoji": "🦦"
+ },
+ "skunk": {
+ "emoji": "🦨"
+ },
+ "kangaroo": {
+ "emoji": "🦘"
+ },
+ "badger": {
+ "emoji": "🦡"
+ },
+ "paw prints": {
+ "emoji": "🐾"
+ },
+ "turkey": {
+ "emoji": "🦃"
+ },
+ "chicken": {
+ "emoji": "🐔"
+ },
+ "rooster": {
+ "emoji": "🐓"
+ },
+ "hatching chick": {
+ "emoji": "🐣"
+ },
+ "baby chick": {
+ "emoji": "🐤"
+ },
+ "front-facing baby chick": {
+ "emoji": "🐥"
+ },
+ "bird": {
+ "emoji": "🐦"
+ },
+ "penguin": {
+ "emoji": "🐧"
+ },
+ "dove": {
+ "emoji": "🕊️"
+ },
+ "eagle": {
+ "emoji": "🦅"
+ },
+ "duck": {
+ "emoji": "🦆"
+ },
+ "swan": {
+ "emoji": "🦢"
+ },
+ "owl": {
+ "emoji": "🦉"
+ },
+ "dodo": {
+ "emoji": "🦤"
+ },
+ "feather": {
+ "emoji": "🪶"
+ },
+ "flamingo": {
+ "emoji": "🦩"
+ },
+ "peacock": {
+ "emoji": "🦚"
+ },
+ "parrot": {
+ "emoji": "🦜"
+ },
+ "frog": {
+ "emoji": "🐸"
+ },
+ "crocodile": {
+ "emoji": "🐊"
+ },
+ "turtle": {
+ "emoji": "🐢"
+ },
+ "lizard": {
+ "emoji": "🦎"
+ },
+ "snake": {
+ "emoji": "🐍"
+ },
+ "dragon face": {
+ "emoji": "🐲"
+ },
+ "dragon": {
+ "emoji": "🐉"
+ },
+ "sauropod": {
+ "emoji": "🦕"
+ },
+ "T-Rex": {
+ "emoji": "🦖"
+ },
+ "spouting whale": {
+ "emoji": "🐳"
+ },
+ "whale": {
+ "emoji": "🐋"
+ },
+ "dolphin": {
+ "emoji": "🐬"
+ },
+ "seal": {
+ "emoji": "🦭"
+ },
+ "fish": {
+ "emoji": "🐟"
+ },
+ "tropical fish": {
+ "emoji": "🐠"
+ },
+ "blowfish": {
+ "emoji": "🐡"
+ },
+ "shark": {
+ "emoji": "🦈"
+ },
+ "octopus": {
+ "emoji": "🐙"
+ },
+ "spiral shell": {
+ "emoji": "🐚"
+ },
+ "snail": {
+ "emoji": "🐌"
+ },
+ "butterfly": {
+ "emoji": "🦋"
+ },
+ "bug": {
+ "emoji": "🐛"
+ },
+ "ant": {
+ "emoji": "🐜"
+ },
+ "honeybee": {
+ "emoji": "🐝"
+ },
+ "beetle": {
+ "emoji": "🪲"
+ },
+ "lady beetle": {
+ "emoji": "🐞"
+ },
+ "cricket": {
+ "emoji": "🦗"
+ },
+ "cockroach": {
+ "emoji": "🪳"
+ },
+ "spider": {
+ "emoji": "🕷️"
+ },
+ "spider web": {
+ "emoji": "🕸️"
+ },
+ "scorpion": {
+ "emoji": "🦂"
+ },
+ "mosquito": {
+ "emoji": "🦟"
+ },
+ "fly": {
+ "emoji": "🪰"
+ },
+ "worm": {
+ "emoji": "🪱"
+ },
+ "microbe": {
+ "emoji": "🦠"
+ },
+ "bouquet": {
+ "emoji": "💐"
+ },
+ "cherry blossom": {
+ "emoji": "🌸"
+ },
+ "white flower": {
+ "emoji": "💮"
+ },
+ "rosette": {
+ "emoji": "🏵️"
+ },
+ "rose": {
+ "emoji": "🌹"
+ },
+ "wilted flower": {
+ "emoji": "🥀"
+ },
+ "hibiscus": {
+ "emoji": "🌺"
+ },
+ "sunflower": {
+ "emoji": "🌻"
+ },
+ "blossom": {
+ "emoji": "🌼"
+ },
+ "tulip": {
+ "emoji": "🌷"
+ },
+ "seedling": {
+ "emoji": "🌱"
+ },
+ "potted plant": {
+ "emoji": "🪴"
+ },
+ "evergreen tree": {
+ "emoji": "🌲"
+ },
+ "deciduous tree": {
+ "emoji": "🌳"
+ },
+ "palm tree": {
+ "emoji": "🌴"
+ },
+ "cactus": {
+ "emoji": "🌵"
+ },
+ "sheaf of rice": {
+ "emoji": "🌾"
+ },
+ "herb": {
+ "emoji": "🌿"
+ },
+ "shamrock": {
+ "emoji": "☘️"
+ },
+ "four leaf clover": {
+ "emoji": "🍀"
+ },
+ "maple leaf": {
+ "emoji": "🍁"
+ },
+ "fallen leaf": {
+ "emoji": "🍂"
+ },
+ "leaf fluttering in wind": {
+ "emoji": "🍃"
+ },
+ "grapes": {
+ "emoji": "🍇"
+ },
+ "melon": {
+ "emoji": "🍈"
+ },
+ "watermelon": {
+ "emoji": "🍉"
+ },
+ "tangerine": {
+ "emoji": "🍊"
+ },
+ "lemon": {
+ "emoji": "🍋"
+ },
+ "banana": {
+ "emoji": "🍌"
+ },
+ "pineapple": {
+ "emoji": "🍍"
+ },
+ "mango": {
+ "emoji": "🥭"
+ },
+ "red apple": {
+ "emoji": "🍎"
+ },
+ "green apple": {
+ "emoji": "🍏"
+ },
+ "pear": {
+ "emoji": "🍐"
+ },
+ "peach": {
+ "emoji": "🍑"
+ },
+ "cherries": {
+ "emoji": "🍒"
+ },
+ "strawberry": {
+ "emoji": "🍓"
+ },
+ "blueberries": {
+ "emoji": "🫐"
+ },
+ "kiwi fruit": {
+ "emoji": "🥝"
+ },
+ "tomato": {
+ "emoji": "🍅"
+ },
+ "olive": {
+ "emoji": "🫒"
+ },
+ "coconut": {
+ "emoji": "🥥"
+ },
+ "avocado": {
+ "emoji": "🥑"
+ },
+ "eggplant": {
+ "emoji": "🍆"
+ },
+ "potato": {
+ "emoji": "🥔"
+ },
+ "carrot": {
+ "emoji": "🥕"
+ },
+ "ear of corn": {
+ "emoji": "🌽"
+ },
+ "hot pepper": {
+ "emoji": "🌶️"
+ },
+ "bell pepper": {
+ "emoji": "🫑"
+ },
+ "cucumber": {
+ "emoji": "🥒"
+ },
+ "leafy green": {
+ "emoji": "🥬"
+ },
+ "broccoli": {
+ "emoji": "🥦"
+ },
+ "garlic": {
+ "emoji": "🧄"
+ },
+ "onion": {
+ "emoji": "🧅"
+ },
+ "mushroom": {
+ "emoji": "🍄"
+ },
+ "peanuts": {
+ "emoji": "🥜"
+ },
+ "chestnut": {
+ "emoji": "🌰"
+ },
+ "bread": {
+ "emoji": "🍞"
+ },
+ "croissant": {
+ "emoji": "🥐"
+ },
+ "baguette bread": {
+ "emoji": "🥖"
+ },
+ "flatbread": {
+ "emoji": "🫓"
+ },
+ "pretzel": {
+ "emoji": "🥨"
+ },
+ "bagel": {
+ "emoji": "🥯"
+ },
+ "pancakes": {
+ "emoji": "🥞"
+ },
+ "waffle": {
+ "emoji": "🧇"
+ },
+ "cheese wedge": {
+ "emoji": "🧀"
+ },
+ "meat on bone": {
+ "emoji": "🍖"
+ },
+ "poultry leg": {
+ "emoji": "🍗"
+ },
+ "cut of meat": {
+ "emoji": "🥩"
+ },
+ "bacon": {
+ "emoji": "🥓"
+ },
+ "hamburger": {
+ "emoji": "🍔"
+ },
+ "french fries": {
+ "emoji": "🍟"
+ },
+ "pizza": {
+ "emoji": "🍕"
+ },
+ "hot dog": {
+ "emoji": "🌭"
+ },
+ "sandwich": {
+ "emoji": "🥪"
+ },
+ "taco": {
+ "emoji": "🌮"
+ },
+ "burrito": {
+ "emoji": "🌯"
+ },
+ "tamale": {
+ "emoji": "🫔"
+ },
+ "stuffed flatbread": {
+ "emoji": "🥙"
+ },
+ "falafel": {
+ "emoji": "🧆"
+ },
+ "egg": {
+ "emoji": "🥚"
+ },
+ "cooking": {
+ "emoji": "🍳"
+ },
+ "shallow pan of food": {
+ "emoji": "🥘"
+ },
+ "pot of food": {
+ "emoji": "🍲"
+ },
+ "fondue": {
+ "emoji": "🫕"
+ },
+ "bowl with spoon": {
+ "emoji": "🥣"
+ },
+ "green salad": {
+ "emoji": "🥗"
+ },
+ "popcorn": {
+ "emoji": "🍿"
+ },
+ "butter": {
+ "emoji": "🧈"
+ },
+ "salt": {
+ "emoji": "🧂"
+ },
+ "canned food": {
+ "emoji": "🥫"
+ },
+ "bento box": {
+ "emoji": "🍱"
+ },
+ "rice cracker": {
+ "emoji": "🍘"
+ },
+ "rice ball": {
+ "emoji": "🍙"
+ },
+ "cooked rice": {
+ "emoji": "🍚"
+ },
+ "curry rice": {
+ "emoji": "🍛"
+ },
+ "steaming bowl": {
+ "emoji": "🍜"
+ },
+ "spaghetti": {
+ "emoji": "🍝"
+ },
+ "roasted sweet potato": {
+ "emoji": "🍠"
+ },
+ "oden": {
+ "emoji": "🍢"
+ },
+ "sushi": {
+ "emoji": "🍣"
+ },
+ "fried shrimp": {
+ "emoji": "🍤"
+ },
+ "fish cake with swirl": {
+ "emoji": "🍥"
+ },
+ "moon cake": {
+ "emoji": "🥮"
+ },
+ "dango": {
+ "emoji": "🍡"
+ },
+ "dumpling": {
+ "emoji": "🥟"
+ },
+ "fortune cookie": {
+ "emoji": "🥠"
+ },
+ "takeout box": {
+ "emoji": "🥡"
+ },
+ "crab": {
+ "emoji": "🦀"
+ },
+ "lobster": {
+ "emoji": "🦞"
+ },
+ "shrimp": {
+ "emoji": "🦐"
+ },
+ "squid": {
+ "emoji": "🦑"
+ },
+ "oyster": {
+ "emoji": "🦪"
+ },
+ "soft ice cream": {
+ "emoji": "🍦"
+ },
+ "shaved ice": {
+ "emoji": "🍧"
+ },
+ "ice cream": {
+ "emoji": "🍨"
+ },
+ "doughnut": {
+ "emoji": "🍩"
+ },
+ "cookie": {
+ "emoji": "🍪"
+ },
+ "birthday cake": {
+ "emoji": "🎂"
+ },
+ "shortcake": {
+ "emoji": "🍰"
+ },
+ "cupcake": {
+ "emoji": "🧁"
+ },
+ "pie": {
+ "emoji": "🥧"
+ },
+ "chocolate bar": {
+ "emoji": "🍫"
+ },
+ "candy": {
+ "emoji": "🍬"
+ },
+ "lollipop": {
+ "emoji": "🍭"
+ },
+ "custard": {
+ "emoji": "🍮"
+ },
+ "honey pot": {
+ "emoji": "🍯"
+ },
+ "baby bottle": {
+ "emoji": "🍼"
+ },
+ "glass of milk": {
+ "emoji": "🥛"
+ },
+ "hot beverage": {
+ "emoji": "☕"
+ },
+ "teapot": {
+ "emoji": "🫖"
+ },
+ "teacup without handle": {
+ "emoji": "🍵"
+ },
+ "sake": {
+ "emoji": "🍶"
+ },
+ "bottle with popping cork": {
+ "emoji": "🍾"
+ },
+ "wine glass": {
+ "emoji": "🍷"
+ },
+ "cocktail glass": {
+ "emoji": "🍸"
+ },
+ "tropical drink": {
+ "emoji": "🍹"
+ },
+ "beer mug": {
+ "emoji": "🍺"
+ },
+ "clinking beer mugs": {
+ "emoji": "🍻"
+ },
+ "clinking glasses": {
+ "emoji": "🥂"
+ },
+ "tumbler glass": {
+ "emoji": "🥃"
+ },
+ "cup with straw": {
+ "emoji": "🥤"
+ },
+ "bubble tea": {
+ "emoji": "🧋"
+ },
+ "beverage box": {
+ "emoji": "🧃"
+ },
+ "mate": {
+ "emoji": "🧉"
+ },
+ "ice": {
+ "emoji": "🧊"
+ },
+ "chopsticks": {
+ "emoji": "🥢"
+ },
+ "fork and knife with plate": {
+ "emoji": "🍽️"
+ },
+ "fork and knife": {
+ "emoji": "🍴"
+ },
+ "spoon": {
+ "emoji": "🥄"
+ },
+ "kitchen knife": {
+ "emoji": "🔪"
+ },
+ "amphora": {
+ "emoji": "🏺"
+ },
+ "globe showing Europe-Africa": {
+ "emoji": "🌍"
+ },
+ "globe showing Americas": {
+ "emoji": "🌎"
+ },
+ "globe showing Asia-Australia": {
+ "emoji": "🌏"
+ },
+ "globe with meridians": {
+ "emoji": "🌐"
+ },
+ "world map": {
+ "emoji": "🗺️"
+ },
+ "map of Japan": {
+ "emoji": "🗾"
+ },
+ "compass": {
+ "emoji": "🧭"
+ },
+ "snow-capped mountain": {
+ "emoji": "🏔️"
+ },
+ "mountain": {
+ "emoji": "⛰️"
+ },
+ "volcano": {
+ "emoji": "🌋"
+ },
+ "mount fuji": {
+ "emoji": "🗻"
+ },
+ "camping": {
+ "emoji": "🏕️"
+ },
+ "beach with umbrella": {
+ "emoji": "🏖️"
+ },
+ "desert": {
+ "emoji": "🏜️"
+ },
+ "desert island": {
+ "emoji": "🏝️"
+ },
+ "national park": {
+ "emoji": "🏞️"
+ },
+ "stadium": {
+ "emoji": "🏟️"
+ },
+ "classical building": {
+ "emoji": "🏛️"
+ },
+ "building construction": {
+ "emoji": "🏗️"
+ },
+ "brick": {
+ "emoji": "🧱"
+ },
+ "rock": {
+ "emoji": "🪨"
+ },
+ "wood": {
+ "emoji": "🪵"
+ },
+ "hut": {
+ "emoji": "🛖"
+ },
+ "houses": {
+ "emoji": "🏘️"
+ },
+ "derelict house": {
+ "emoji": "🏚️"
+ },
+ "house": {
+ "emoji": "🏠"
+ },
+ "house with garden": {
+ "emoji": "🏡"
+ },
+ "office building": {
+ "emoji": "🏢"
+ },
+ "Japanese post office": {
+ "emoji": "🏣"
+ },
+ "post office": {
+ "emoji": "🏤"
+ },
+ "hospital": {
+ "emoji": "🏥"
+ },
+ "bank": {
+ "emoji": "🏦"
+ },
+ "hotel": {
+ "emoji": "🏨"
+ },
+ "love hotel": {
+ "emoji": "🏩"
+ },
+ "convenience store": {
+ "emoji": "🏪"
+ },
+ "school": {
+ "emoji": "🏫"
+ },
+ "department store": {
+ "emoji": "🏬"
+ },
+ "factory": {
+ "emoji": "🏭"
+ },
+ "Japanese castle": {
+ "emoji": "🏯"
+ },
+ "castle": {
+ "emoji": "🏰"
+ },
+ "wedding": {
+ "emoji": "💒"
+ },
+ "Tokyo tower": {
+ "emoji": "🗼"
+ },
+ "Statue of Liberty": {
+ "emoji": "🗽"
+ },
+ "church": {
+ "emoji": "⛪"
+ },
+ "mosque": {
+ "emoji": "🕌"
+ },
+ "hindu temple": {
+ "emoji": "🛕"
+ },
+ "synagogue": {
+ "emoji": "🕍"
+ },
+ "shinto shrine": {
+ "emoji": "⛩️"
+ },
+ "kaaba": {
+ "emoji": "🕋"
+ },
+ "fountain": {
+ "emoji": "⛲"
+ },
+ "tent": {
+ "emoji": "⛺"
+ },
+ "foggy": {
+ "emoji": "🌁"
+ },
+ "night with stars": {
+ "emoji": "🌃"
+ },
+ "cityscape": {
+ "emoji": "🏙️"
+ },
+ "sunrise over mountains": {
+ "emoji": "🌄"
+ },
+ "sunrise": {
+ "emoji": "🌅"
+ },
+ "cityscape at dusk": {
+ "emoji": "🌆"
+ },
+ "sunset": {
+ "emoji": "🌇"
+ },
+ "bridge at night": {
+ "emoji": "🌉"
+ },
+ "hot springs": {
+ "emoji": "♨️"
+ },
+ "carousel horse": {
+ "emoji": "🎠"
+ },
+ "ferris wheel": {
+ "emoji": "🎡"
+ },
+ "roller coaster": {
+ "emoji": "🎢"
+ },
+ "barber pole": {
+ "emoji": "💈"
+ },
+ "circus tent": {
+ "emoji": "🎪"
+ },
+ "locomotive": {
+ "emoji": "🚂"
+ },
+ "railway car": {
+ "emoji": "🚃"
+ },
+ "high-speed train": {
+ "emoji": "🚄"
+ },
+ "bullet train": {
+ "emoji": "🚅"
+ },
+ "train": {
+ "emoji": "🚆"
+ },
+ "metro": {
+ "emoji": "🚇"
+ },
+ "light rail": {
+ "emoji": "🚈"
+ },
+ "station": {
+ "emoji": "🚉"
+ },
+ "tram": {
+ "emoji": "🚊"
+ },
+ "monorail": {
+ "emoji": "🚝"
+ },
+ "mountain railway": {
+ "emoji": "🚞"
+ },
+ "tram car": {
+ "emoji": "🚋"
+ },
+ "bus": {
+ "emoji": "🚌"
+ },
+ "oncoming bus": {
+ "emoji": "🚍"
+ },
+ "trolleybus": {
+ "emoji": "🚎"
+ },
+ "minibus": {
+ "emoji": "🚐"
+ },
+ "ambulance": {
+ "emoji": "🚑"
+ },
+ "fire engine": {
+ "emoji": "🚒"
+ },
+ "police car": {
+ "emoji": "🚓"
+ },
+ "oncoming police car": {
+ "emoji": "🚔"
+ },
+ "taxi": {
+ "emoji": "🚕"
+ },
+ "oncoming taxi": {
+ "emoji": "🚖"
+ },
+ "automobile": {
+ "emoji": "🚗"
+ },
+ "oncoming automobile": {
+ "emoji": "🚘"
+ },
+ "sport utility vehicle": {
+ "emoji": "🚙"
+ },
+ "pickup truck": {
+ "emoji": "🛻"
+ },
+ "delivery truck": {
+ "emoji": "🚚"
+ },
+ "articulated lorry": {
+ "emoji": "🚛"
+ },
+ "tractor": {
+ "emoji": "🚜"
+ },
+ "racing car": {
+ "emoji": "🏎️"
+ },
+ "motorcycle": {
+ "emoji": "🏍️"
+ },
+ "motor scooter": {
+ "emoji": "🛵"
+ },
+ "manual wheelchair": {
+ "emoji": "🦽"
+ },
+ "motorized wheelchair": {
+ "emoji": "🦼"
+ },
+ "auto rickshaw": {
+ "emoji": "🛺"
+ },
+ "bicycle": {
+ "emoji": "🚲"
+ },
+ "kick scooter": {
+ "emoji": "🛴"
+ },
+ "skateboard": {
+ "emoji": "🛹"
+ },
+ "roller skate": {
+ "emoji": "🛼"
+ },
+ "bus stop": {
+ "emoji": "🚏"
+ },
+ "motorway": {
+ "emoji": "🛣️"
+ },
+ "railway track": {
+ "emoji": "🛤️"
+ },
+ "oil drum": {
+ "emoji": "🛢️"
+ },
+ "fuel pump": {
+ "emoji": "⛽"
+ },
+ "police car light": {
+ "emoji": "🚨"
+ },
+ "horizontal traffic light": {
+ "emoji": "🚥"
+ },
+ "vertical traffic light": {
+ "emoji": "🚦"
+ },
+ "stop sign": {
+ "emoji": "🛑"
+ },
+ "construction": {
+ "emoji": "🚧"
+ },
+ "anchor": {
+ "emoji": "⚓"
+ },
+ "sailboat": {
+ "emoji": "⛵"
+ },
+ "canoe": {
+ "emoji": "🛶"
+ },
+ "speedboat": {
+ "emoji": "🚤"
+ },
+ "passenger ship": {
+ "emoji": "🛳️"
+ },
+ "ferry": {
+ "emoji": "⛴️"
+ },
+ "motor boat": {
+ "emoji": "🛥️"
+ },
+ "ship": {
+ "emoji": "🚢"
+ },
+ "airplane": {
+ "emoji": "✈️"
+ },
+ "small airplane": {
+ "emoji": "🛩️"
+ },
+ "airplane departure": {
+ "emoji": "🛫"
+ },
+ "airplane arrival": {
+ "emoji": "🛬"
+ },
+ "parachute": {
+ "emoji": "🪂"
+ },
+ "seat": {
+ "emoji": "💺"
+ },
+ "helicopter": {
+ "emoji": "🚁"
+ },
+ "suspension railway": {
+ "emoji": "🚟"
+ },
+ "mountain cableway": {
+ "emoji": "🚠"
+ },
+ "aerial tramway": {
+ "emoji": "🚡"
+ },
+ "satellite": {
+ "emoji": "🛰️"
+ },
+ "rocket": {
+ "emoji": "🚀"
+ },
+ "flying saucer": {
+ "emoji": "🛸"
+ },
+ "bellhop bell": {
+ "emoji": "🛎️"
+ },
+ "luggage": {
+ "emoji": "🧳"
+ },
+ "hourglass done": {
+ "emoji": "⌛"
+ },
+ "hourglass not done": {
+ "emoji": "⏳"
+ },
+ "watch": {
+ "emoji": "⌚"
+ },
+ "alarm clock": {
+ "emoji": "⏰"
+ },
+ "stopwatch": {
+ "emoji": "⏱️"
+ },
+ "timer clock": {
+ "emoji": "⏲️"
+ },
+ "mantelpiece clock": {
+ "emoji": "🕰️"
+ },
+ "twelve o’clock": {
+ "emoji": "🕛"
+ },
+ "twelve-thirty": {
+ "emoji": "🕧"
+ },
+ "one o’clock": {
+ "emoji": "🕐"
+ },
+ "one-thirty": {
+ "emoji": "🕜"
+ },
+ "two o’clock": {
+ "emoji": "🕑"
+ },
+ "two-thirty": {
+ "emoji": "🕝"
+ },
+ "three o’clock": {
+ "emoji": "🕒"
+ },
+ "three-thirty": {
+ "emoji": "🕞"
+ },
+ "four o’clock": {
+ "emoji": "🕓"
+ },
+ "four-thirty": {
+ "emoji": "🕟"
+ },
+ "five o’clock": {
+ "emoji": "🕔"
+ },
+ "five-thirty": {
+ "emoji": "🕠"
+ },
+ "six o’clock": {
+ "emoji": "🕕"
+ },
+ "six-thirty": {
+ "emoji": "🕡"
+ },
+ "seven o’clock": {
+ "emoji": "🕖"
+ },
+ "seven-thirty": {
+ "emoji": "🕢"
+ },
+ "eight o’clock": {
+ "emoji": "🕗"
+ },
+ "eight-thirty": {
+ "emoji": "🕣"
+ },
+ "nine o’clock": {
+ "emoji": "🕘"
+ },
+ "nine-thirty": {
+ "emoji": "🕤"
+ },
+ "ten o’clock": {
+ "emoji": "🕙"
+ },
+ "ten-thirty": {
+ "emoji": "🕥"
+ },
+ "eleven o’clock": {
+ "emoji": "🕚"
+ },
+ "eleven-thirty": {
+ "emoji": "🕦"
+ },
+ "new moon": {
+ "emoji": "🌑"
+ },
+ "waxing crescent moon": {
+ "emoji": "🌒"
+ },
+ "first quarter moon": {
+ "emoji": "🌓"
+ },
+ "waxing gibbous moon": {
+ "emoji": "🌔"
+ },
+ "full moon": {
+ "emoji": "🌕"
+ },
+ "waning gibbous moon": {
+ "emoji": "🌖"
+ },
+ "last quarter moon": {
+ "emoji": "🌗"
+ },
+ "waning crescent moon": {
+ "emoji": "🌘"
+ },
+ "crescent moon": {
+ "emoji": "🌙"
+ },
+ "new moon face": {
+ "emoji": "🌚"
+ },
+ "first quarter moon face": {
+ "emoji": "🌛"
+ },
+ "last quarter moon face": {
+ "emoji": "🌜"
+ },
+ "thermometer": {
+ "emoji": "🌡️"
+ },
+ "sun": {
+ "emoji": "☀️"
+ },
+ "full moon face": {
+ "emoji": "🌝"
+ },
+ "sun with face": {
+ "emoji": "🌞"
+ },
+ "ringed planet": {
+ "emoji": "🪐"
+ },
+ "star": {
+ "emoji": "⭐"
+ },
+ "glowing star": {
+ "emoji": "🌟"
+ },
+ "shooting star": {
+ "emoji": "🌠"
+ },
+ "milky way": {
+ "emoji": "🌌"
+ },
+ "cloud": {
+ "emoji": "☁️"
+ },
+ "sun behind cloud": {
+ "emoji": "⛅"
+ },
+ "cloud with lightning and rain": {
+ "emoji": "⛈️"
+ },
+ "sun behind small cloud": {
+ "emoji": "🌤️"
+ },
+ "sun behind large cloud": {
+ "emoji": "🌥️"
+ },
+ "sun behind rain cloud": {
+ "emoji": "🌦️"
+ },
+ "cloud with rain": {
+ "emoji": "🌧️"
+ },
+ "cloud with snow": {
+ "emoji": "🌨️"
+ },
+ "cloud with lightning": {
+ "emoji": "🌩️"
+ },
+ "tornado": {
+ "emoji": "🌪️"
+ },
+ "fog": {
+ "emoji": "🌫️"
+ },
+ "wind face": {
+ "emoji": "🌬️"
+ },
+ "cyclone": {
+ "emoji": "🌀"
+ },
+ "rainbow": {
+ "emoji": "🌈"
+ },
+ "closed umbrella": {
+ "emoji": "🌂"
+ },
+ "umbrella": {
+ "emoji": "☂️"
+ },
+ "umbrella with rain drops": {
+ "emoji": "☔"
+ },
+ "umbrella on ground": {
+ "emoji": "⛱️"
+ },
+ "high voltage": {
+ "emoji": "⚡"
+ },
+ "snowflake": {
+ "emoji": "❄️"
+ },
+ "snowman": {
+ "emoji": "☃️"
+ },
+ "snowman without snow": {
+ "emoji": "⛄"
+ },
+ "comet": {
+ "emoji": "☄️"
+ },
+ "fire": {
+ "emoji": "🔥"
+ },
+ "droplet": {
+ "emoji": "💧"
+ },
+ "water wave": {
+ "emoji": "🌊"
+ },
+ "jack-o-lantern": {
+ "emoji": "🎃"
+ },
+ "Christmas tree": {
+ "emoji": "🎄"
+ },
+ "fireworks": {
+ "emoji": "🎆"
+ },
+ "sparkler": {
+ "emoji": "🎇"
+ },
+ "firecracker": {
+ "emoji": "🧨"
+ },
+ "sparkles": {
+ "emoji": "✨"
+ },
+ "balloon": {
+ "emoji": "🎈"
+ },
+ "party popper": {
+ "emoji": "🎉"
+ },
+ "confetti ball": {
+ "emoji": "🎊"
+ },
+ "tanabata tree": {
+ "emoji": "🎋"
+ },
+ "pine decoration": {
+ "emoji": "🎍"
+ },
+ "Japanese dolls": {
+ "emoji": "🎎"
+ },
+ "carp streamer": {
+ "emoji": "🎏"
+ },
+ "wind chime": {
+ "emoji": "🎐"
+ },
+ "moon viewing ceremony": {
+ "emoji": "🎑"
+ },
+ "red envelope": {
+ "emoji": "🧧"
+ },
+ "ribbon": {
+ "emoji": "🎀"
+ },
+ "wrapped gift": {
+ "emoji": "🎁"
+ },
+ "reminder ribbon": {
+ "emoji": "🎗️"
+ },
+ "admission tickets": {
+ "emoji": "🎟️"
+ },
+ "ticket": {
+ "emoji": "🎫"
+ },
+ "military medal": {
+ "emoji": "🎖️"
+ },
+ "trophy": {
+ "emoji": "🏆"
+ },
+ "sports medal": {
+ "emoji": "🏅"
+ },
+ "1st place medal": {
+ "emoji": "🥇"
+ },
+ "2nd place medal": {
+ "emoji": "🥈"
+ },
+ "3rd place medal": {
+ "emoji": "🥉"
+ },
+ "soccer ball": {
+ "emoji": "⚽"
+ },
+ "baseball": {
+ "emoji": "⚾"
+ },
+ "softball": {
+ "emoji": "🥎"
+ },
+ "basketball": {
+ "emoji": "🏀"
+ },
+ "volleyball": {
+ "emoji": "🏐"
+ },
+ "american football": {
+ "emoji": "🏈"
+ },
+ "rugby football": {
+ "emoji": "🏉"
+ },
+ "tennis": {
+ "emoji": "🎾"
+ },
+ "flying disc": {
+ "emoji": "🥏"
+ },
+ "bowling": {
+ "emoji": "🎳"
+ },
+ "cricket game": {
+ "emoji": "🏏"
+ },
+ "field hockey": {
+ "emoji": "🏑"
+ },
+ "ice hockey": {
+ "emoji": "🏒"
+ },
+ "lacrosse": {
+ "emoji": "🥍"
+ },
+ "ping pong": {
+ "emoji": "🏓"
+ },
+ "badminton": {
+ "emoji": "🏸"
+ },
+ "boxing glove": {
+ "emoji": "🥊"
+ },
+ "martial arts uniform": {
+ "emoji": "🥋"
+ },
+ "goal net": {
+ "emoji": "🥅"
+ },
+ "flag in hole": {
+ "emoji": "⛳"
+ },
+ "ice skate": {
+ "emoji": "⛸️"
+ },
+ "fishing pole": {
+ "emoji": "🎣"
+ },
+ "diving mask": {
+ "emoji": "🤿"
+ },
+ "running shirt": {
+ "emoji": "🎽"
+ },
+ "skis": {
+ "emoji": "🎿"
+ },
+ "sled": {
+ "emoji": "🛷"
+ },
+ "curling stone": {
+ "emoji": "🥌"
+ },
+ "direct hit": {
+ "emoji": "🎯"
+ },
+ "yo-yo": {
+ "emoji": "🪀"
+ },
+ "kite": {
+ "emoji": "🪁"
+ },
+ "pool 8 ball": {
+ "emoji": "🎱"
+ },
+ "crystal ball": {
+ "emoji": "🔮"
+ },
+ "magic wand": {
+ "emoji": "🪄"
+ },
+ "nazar amulet": {
+ "emoji": "🧿"
+ },
+ "video game": {
+ "emoji": "🎮"
+ },
+ "joystick": {
+ "emoji": "🕹️"
+ },
+ "slot machine": {
+ "emoji": "🎰"
+ },
+ "game die": {
+ "emoji": "🎲"
+ },
+ "puzzle piece": {
+ "emoji": "🧩"
+ },
+ "teddy bear": {
+ "emoji": "🧸"
+ },
+ "piñata": {
+ "emoji": "🪅"
+ },
+ "nesting dolls": {
+ "emoji": "🪆"
+ },
+ "spade suit": {
+ "emoji": "♠️"
+ },
+ "heart suit": {
+ "emoji": "♥️"
+ },
+ "diamond suit": {
+ "emoji": "♦️"
+ },
+ "club suit": {
+ "emoji": "♣️"
+ },
+ "chess pawn": {
+ "emoji": "♟️"
+ },
+ "joker": {
+ "emoji": "🃏"
+ },
+ "mahjong red dragon": {
+ "emoji": "🀄"
+ },
+ "flower playing cards": {
+ "emoji": "🎴"
+ },
+ "performing arts": {
+ "emoji": "🎭"
+ },
+ "framed picture": {
+ "emoji": "🖼️"
+ },
+ "artist palette": {
+ "emoji": "🎨"
+ },
+ "thread": {
+ "emoji": "🧵"
+ },
+ "sewing needle": {
+ "emoji": "🪡"
+ },
+ "yarn": {
+ "emoji": "🧶"
+ },
+ "knot": {
+ "emoji": "🪢"
+ },
+ "glasses": {
+ "emoji": "👓"
+ },
+ "sunglasses": {
+ "emoji": "🕶️"
+ },
+ "goggles": {
+ "emoji": "🥽"
+ },
+ "lab coat": {
+ "emoji": "🥼"
+ },
+ "safety vest": {
+ "emoji": "🦺"
+ },
+ "necktie": {
+ "emoji": "👔"
+ },
+ "t-shirt": {
+ "emoji": "👕"
+ },
+ "jeans": {
+ "emoji": "👖"
+ },
+ "scarf": {
+ "emoji": "🧣"
+ },
+ "gloves": {
+ "emoji": "🧤"
+ },
+ "coat": {
+ "emoji": "🧥"
+ },
+ "socks": {
+ "emoji": "🧦"
+ },
+ "dress": {
+ "emoji": "👗"
+ },
+ "kimono": {
+ "emoji": "👘"
+ },
+ "sari": {
+ "emoji": "🥻"
+ },
+ "one-piece swimsuit": {
+ "emoji": "🩱"
+ },
+ "briefs": {
+ "emoji": "🩲"
+ },
+ "shorts": {
+ "emoji": "🩳"
+ },
+ "bikini": {
+ "emoji": "👙"
+ },
+ "woman’s clothes": {
+ "emoji": "👚"
+ },
+ "purse": {
+ "emoji": "👛"
+ },
+ "handbag": {
+ "emoji": "👜"
+ },
+ "clutch bag": {
+ "emoji": "👝"
+ },
+ "shopping bags": {
+ "emoji": "🛍️"
+ },
+ "backpack": {
+ "emoji": "🎒"
+ },
+ "thong sandal": {
+ "emoji": "🩴"
+ },
+ "man’s shoe": {
+ "emoji": "👞"
+ },
+ "running shoe": {
+ "emoji": "👟"
+ },
+ "hiking boot": {
+ "emoji": "🥾"
+ },
+ "flat shoe": {
+ "emoji": "🥿"
+ },
+ "high-heeled shoe": {
+ "emoji": "👠"
+ },
+ "woman’s sandal": {
+ "emoji": "👡"
+ },
+ "ballet shoes": {
+ "emoji": "🩰"
+ },
+ "woman’s boot": {
+ "emoji": "👢"
+ },
+ "crown": {
+ "emoji": "👑"
+ },
+ "woman’s hat": {
+ "emoji": "👒"
+ },
+ "top hat": {
+ "emoji": "🎩"
+ },
+ "graduation cap": {
+ "emoji": "🎓"
+ },
+ "billed cap": {
+ "emoji": "🧢"
+ },
+ "military helmet": {
+ "emoji": "🪖"
+ },
+ "rescue worker’s helmet": {
+ "emoji": "⛑️"
+ },
+ "prayer beads": {
+ "emoji": "📿"
+ },
+ "lipstick": {
+ "emoji": "💄"
+ },
+ "ring": {
+ "emoji": "💍"
+ },
+ "gem stone": {
+ "emoji": "💎"
+ },
+ "muted speaker": {
+ "emoji": "🔇"
+ },
+ "speaker low volume": {
+ "emoji": "🔈"
+ },
+ "speaker medium volume": {
+ "emoji": "🔉"
+ },
+ "speaker high volume": {
+ "emoji": "🔊"
+ },
+ "loudspeaker": {
+ "emoji": "📢"
+ },
+ "megaphone": {
+ "emoji": "📣"
+ },
+ "postal horn": {
+ "emoji": "📯"
+ },
+ "bell": {
+ "emoji": "🔔"
+ },
+ "bell with slash": {
+ "emoji": "🔕"
+ },
+ "musical score": {
+ "emoji": "🎼"
+ },
+ "musical note": {
+ "emoji": "🎵"
+ },
+ "musical notes": {
+ "emoji": "🎶"
+ },
+ "studio microphone": {
+ "emoji": "🎙️"
+ },
+ "level slider": {
+ "emoji": "🎚️"
+ },
+ "control knobs": {
+ "emoji": "🎛️"
+ },
+ "microphone": {
+ "emoji": "🎤"
+ },
+ "headphone": {
+ "emoji": "🎧"
+ },
+ "radio": {
+ "emoji": "📻"
+ },
+ "saxophone": {
+ "emoji": "🎷"
+ },
+ "accordion": {
+ "emoji": "🪗"
+ },
+ "guitar": {
+ "emoji": "🎸"
+ },
+ "musical keyboard": {
+ "emoji": "🎹"
+ },
+ "trumpet": {
+ "emoji": "🎺"
+ },
+ "violin": {
+ "emoji": "🎻"
+ },
+ "banjo": {
+ "emoji": "🪕"
+ },
+ "drum": {
+ "emoji": "🥁"
+ },
+ "long drum": {
+ "emoji": "🪘"
+ },
+ "mobile phone": {
+ "emoji": "📱"
+ },
+ "mobile phone with arrow": {
+ "emoji": "📲"
+ },
+ "telephone": {
+ "emoji": "☎️"
+ },
+ "telephone receiver": {
+ "emoji": "📞"
+ },
+ "pager": {
+ "emoji": "📟"
+ },
+ "fax machine": {
+ "emoji": "📠"
+ },
+ "battery": {
+ "emoji": "🔋"
+ },
+ "electric plug": {
+ "emoji": "🔌"
+ },
+ "laptop": {
+ "emoji": "💻"
+ },
+ "desktop computer": {
+ "emoji": "🖥️"
+ },
+ "printer": {
+ "emoji": "🖨️"
+ },
+ "keyboard": {
+ "emoji": "⌨️"
+ },
+ "computer mouse": {
+ "emoji": "🖱️"
+ },
+ "trackball": {
+ "emoji": "🖲️"
+ },
+ "computer disk": {
+ "emoji": "💽"
+ },
+ "floppy disk": {
+ "emoji": "💾"
+ },
+ "optical disk": {
+ "emoji": "💿"
+ },
+ "dvd": {
+ "emoji": "📀"
+ },
+ "abacus": {
+ "emoji": "🧮"
+ },
+ "movie camera": {
+ "emoji": "🎥"
+ },
+ "film frames": {
+ "emoji": "🎞️"
+ },
+ "film projector": {
+ "emoji": "📽️"
+ },
+ "clapper board": {
+ "emoji": "🎬"
+ },
+ "television": {
+ "emoji": "📺"
+ },
+ "camera": {
+ "emoji": "📷"
+ },
+ "camera with flash": {
+ "emoji": "📸"
+ },
+ "video camera": {
+ "emoji": "📹"
+ },
+ "videocassette": {
+ "emoji": "📼"
+ },
+ "magnifying glass tilted left": {
+ "emoji": "🔍"
+ },
+ "magnifying glass tilted right": {
+ "emoji": "🔎"
+ },
+ "candle": {
+ "emoji": "🕯️"
+ },
+ "light bulb": {
+ "emoji": "💡"
+ },
+ "flashlight": {
+ "emoji": "🔦"
+ },
+ "red paper lantern": {
+ "emoji": "🏮"
+ },
+ "diya lamp": {
+ "emoji": "🪔"
+ },
+ "notebook with decorative cover": {
+ "emoji": "📔"
+ },
+ "closed book": {
+ "emoji": "📕"
+ },
+ "open book": {
+ "emoji": "📖"
+ },
+ "green book": {
+ "emoji": "📗"
+ },
+ "blue book": {
+ "emoji": "📘"
+ },
+ "orange book": {
+ "emoji": "📙"
+ },
+ "books": {
+ "emoji": "📚"
+ },
+ "notebook": {
+ "emoji": "📓"
+ },
+ "ledger": {
+ "emoji": "📒"
+ },
+ "page with curl": {
+ "emoji": "📃"
+ },
+ "scroll": {
+ "emoji": "📜"
+ },
+ "page facing up": {
+ "emoji": "📄"
+ },
+ "newspaper": {
+ "emoji": "📰"
+ },
+ "rolled-up newspaper": {
+ "emoji": "🗞️"
+ },
+ "bookmark tabs": {
+ "emoji": "📑"
+ },
+ "bookmark": {
+ "emoji": "🔖"
+ },
+ "label": {
+ "emoji": "🏷️"
+ },
+ "money bag": {
+ "emoji": "💰"
+ },
+ "coin": {
+ "emoji": "🪙"
+ },
+ "yen banknote": {
+ "emoji": "💴"
+ },
+ "dollar banknote": {
+ "emoji": "💵"
+ },
+ "euro banknote": {
+ "emoji": "💶"
+ },
+ "pound banknote": {
+ "emoji": "💷"
+ },
+ "money with wings": {
+ "emoji": "💸"
+ },
+ "credit card": {
+ "emoji": "💳"
+ },
+ "receipt": {
+ "emoji": "🧾"
+ },
+ "chart increasing with yen": {
+ "emoji": "💹"
+ },
+ "envelope": {
+ "emoji": "✉️"
+ },
+ "e-mail": {
+ "emoji": "📧"
+ },
+ "incoming envelope": {
+ "emoji": "📨"
+ },
+ "envelope with arrow": {
+ "emoji": "📩"
+ },
+ "outbox tray": {
+ "emoji": "📤"
+ },
+ "inbox tray": {
+ "emoji": "📥"
+ },
+ "package": {
+ "emoji": "📦"
+ },
+ "closed mailbox with raised flag": {
+ "emoji": "📫"
+ },
+ "closed mailbox with lowered flag": {
+ "emoji": "📪"
+ },
+ "open mailbox with raised flag": {
+ "emoji": "📬"
+ },
+ "open mailbox with lowered flag": {
+ "emoji": "📭"
+ },
+ "postbox": {
+ "emoji": "📮"
+ },
+ "ballot box with ballot": {
+ "emoji": "🗳️"
+ },
+ "pencil": {
+ "emoji": "✏️"
+ },
+ "black nib": {
+ "emoji": "✒️"
+ },
+ "fountain pen": {
+ "emoji": "🖋️"
+ },
+ "pen": {
+ "emoji": "🖊️"
+ },
+ "paintbrush": {
+ "emoji": "🖌️"
+ },
+ "crayon": {
+ "emoji": "🖍️"
+ },
+ "memo": {
+ "emoji": "📝"
+ },
+ "briefcase": {
+ "emoji": "💼"
+ },
+ "file folder": {
+ "emoji": "📁"
+ },
+ "open file folder": {
+ "emoji": "📂"
+ },
+ "card index dividers": {
+ "emoji": "🗂️"
+ },
+ "calendar": {
+ "emoji": "📅"
+ },
+ "tear-off calendar": {
+ "emoji": "📆"
+ },
+ "spiral notepad": {
+ "emoji": "🗒️"
+ },
+ "spiral calendar": {
+ "emoji": "🗓️"
+ },
+ "card index": {
+ "emoji": "📇"
+ },
+ "chart increasing": {
+ "emoji": "📈"
+ },
+ "chart decreasing": {
+ "emoji": "📉"
+ },
+ "bar chart": {
+ "emoji": "📊"
+ },
+ "clipboard": {
+ "emoji": "📋"
+ },
+ "pushpin": {
+ "emoji": "📌"
+ },
+ "round pushpin": {
+ "emoji": "📍"
+ },
+ "paperclip": {
+ "emoji": "📎"
+ },
+ "linked paperclips": {
+ "emoji": "🖇️"
+ },
+ "straight ruler": {
+ "emoji": "📏"
+ },
+ "triangular ruler": {
+ "emoji": "📐"
+ },
+ "scissors": {
+ "emoji": "✂️"
+ },
+ "card file box": {
+ "emoji": "🗃️"
+ },
+ "file cabinet": {
+ "emoji": "🗄️"
+ },
+ "wastebasket": {
+ "emoji": "🗑️"
+ },
+ "locked": {
+ "emoji": "🔒"
+ },
+ "unlocked": {
+ "emoji": "🔓"
+ },
+ "locked with pen": {
+ "emoji": "🔏"
+ },
+ "locked with key": {
+ "emoji": "🔐"
+ },
+ "key": {
+ "emoji": "🔑"
+ },
+ "old key": {
+ "emoji": "🗝️"
+ },
+ "hammer": {
+ "emoji": "🔨"
+ },
+ "axe": {
+ "emoji": "🪓"
+ },
+ "pick": {
+ "emoji": "⛏️"
+ },
+ "hammer and pick": {
+ "emoji": "⚒️"
+ },
+ "hammer and wrench": {
+ "emoji": "🛠️"
+ },
+ "dagger": {
+ "emoji": "🗡️"
+ },
+ "crossed swords": {
+ "emoji": "⚔️"
+ },
+ "pistol": {
+ "emoji": "🔫"
+ },
+ "boomerang": {
+ "emoji": "🪃"
+ },
+ "bow and arrow": {
+ "emoji": "🏹"
+ },
+ "shield": {
+ "emoji": "🛡️"
+ },
+ "carpentry saw": {
+ "emoji": "🪚"
+ },
+ "wrench": {
+ "emoji": "🔧"
+ },
+ "screwdriver": {
+ "emoji": "🪛"
+ },
+ "nut and bolt": {
+ "emoji": "🔩"
+ },
+ "gear": {
+ "emoji": "⚙️"
+ },
+ "clamp": {
+ "emoji": "🗜️"
+ },
+ "balance scale": {
+ "emoji": "⚖️"
+ },
+ "white cane": {
+ "emoji": "🦯"
+ },
+ "link": {
+ "emoji": "🔗"
+ },
+ "chains": {
+ "emoji": "⛓️"
+ },
+ "hook": {
+ "emoji": "🪝"
+ },
+ "toolbox": {
+ "emoji": "🧰"
+ },
+ "magnet": {
+ "emoji": "🧲"
+ },
+ "ladder": {
+ "emoji": "🪜"
+ },
+ "alembic": {
+ "emoji": "⚗️"
+ },
+ "test tube": {
+ "emoji": "🧪"
+ },
+ "petri dish": {
+ "emoji": "🧫"
+ },
+ "dna": {
+ "emoji": "🧬"
+ },
+ "microscope": {
+ "emoji": "🔬"
+ },
+ "telescope": {
+ "emoji": "🔭"
+ },
+ "satellite antenna": {
+ "emoji": "📡"
+ },
+ "syringe": {
+ "emoji": "💉"
+ },
+ "drop of blood": {
+ "emoji": "🩸"
+ },
+ "pill": {
+ "emoji": "💊"
+ },
+ "adhesive bandage": {
+ "emoji": "🩹"
+ },
+ "stethoscope": {
+ "emoji": "🩺"
+ },
+ "door": {
+ "emoji": "🚪"
+ },
+ "elevator": {
+ "emoji": "🛗"
+ },
+ "mirror": {
+ "emoji": "🪞"
+ },
+ "window": {
+ "emoji": "🪟"
+ },
+ "bed": {
+ "emoji": "🛏️"
+ },
+ "couch and lamp": {
+ "emoji": "🛋️"
+ },
+ "chair": {
+ "emoji": "🪑"
+ },
+ "toilet": {
+ "emoji": "🚽"
+ },
+ "plunger": {
+ "emoji": "🪠"
+ },
+ "shower": {
+ "emoji": "🚿"
+ },
+ "bathtub": {
+ "emoji": "🛁"
+ },
+ "mouse trap": {
+ "emoji": "🪤"
+ },
+ "razor": {
+ "emoji": "🪒"
+ },
+ "lotion bottle": {
+ "emoji": "🧴"
+ },
+ "safety pin": {
+ "emoji": "🧷"
+ },
+ "broom": {
+ "emoji": "🧹"
+ },
+ "basket": {
+ "emoji": "🧺"
+ },
+ "roll of paper": {
+ "emoji": "🧻"
+ },
+ "bucket": {
+ "emoji": "🪣"
+ },
+ "soap": {
+ "emoji": "🧼"
+ },
+ "toothbrush": {
+ "emoji": "🪥"
+ },
+ "sponge": {
+ "emoji": "🧽"
+ },
+ "fire extinguisher": {
+ "emoji": "🧯"
+ },
+ "shopping cart": {
+ "emoji": "🛒"
+ },
+ "cigarette": {
+ "emoji": "🚬"
+ },
+ "coffin": {
+ "emoji": "⚰️"
+ },
+ "headstone": {
+ "emoji": "🪦"
+ },
+ "funeral urn": {
+ "emoji": "⚱️"
+ },
+ "moai": {
+ "emoji": "🗿"
+ },
+ "placard": {
+ "emoji": "🪧"
+ },
+ "ATM sign": {
+ "emoji": "🏧"
+ },
+ "litter in bin sign": {
+ "emoji": "🚮"
+ },
+ "potable water": {
+ "emoji": "🚰"
+ },
+ "wheelchair symbol": {
+ "emoji": "♿"
+ },
+ "men’s room": {
+ "emoji": "🚹"
+ },
+ "women’s room": {
+ "emoji": "🚺"
+ },
+ "restroom": {
+ "emoji": "🚻"
+ },
+ "baby symbol": {
+ "emoji": "🚼"
+ },
+ "water closet": {
+ "emoji": "🚾"
+ },
+ "passport control": {
+ "emoji": "🛂"
+ },
+ "customs": {
+ "emoji": "🛃"
+ },
+ "baggage claim": {
+ "emoji": "🛄"
+ },
+ "left luggage": {
+ "emoji": "🛅"
+ },
+ "warning": {
+ "emoji": "⚠️"
+ },
+ "children crossing": {
+ "emoji": "🚸"
+ },
+ "no entry": {
+ "emoji": "⛔"
+ },
+ "prohibited": {
+ "emoji": "🚫"
+ },
+ "no bicycles": {
+ "emoji": "🚳"
+ },
+ "no smoking": {
+ "emoji": "🚭"
+ },
+ "no littering": {
+ "emoji": "🚯"
+ },
+ "non-potable water": {
+ "emoji": "🚱"
+ },
+ "no pedestrians": {
+ "emoji": "🚷"
+ },
+ "no mobile phones": {
+ "emoji": "📵"
+ },
+ "no one under eighteen": {
+ "emoji": "🔞"
+ },
+ "radioactive": {
+ "emoji": "☢️"
+ },
+ "biohazard": {
+ "emoji": "☣️"
+ },
+ "up arrow": {
+ "emoji": "⬆️"
+ },
+ "up-right arrow": {
+ "emoji": "↗️"
+ },
+ "right arrow": {
+ "emoji": "➡️"
+ },
+ "down-right arrow": {
+ "emoji": "↘️"
+ },
+ "down arrow": {
+ "emoji": "⬇️"
+ },
+ "down-left arrow": {
+ "emoji": "↙️"
+ },
+ "left arrow": {
+ "emoji": "⬅️"
+ },
+ "up-left arrow": {
+ "emoji": "↖️"
+ },
+ "up-down arrow": {
+ "emoji": "↕️"
+ },
+ "left-right arrow": {
+ "emoji": "↔️"
+ },
+ "right arrow curving left": {
+ "emoji": "↩️"
+ },
+ "left arrow curving right": {
+ "emoji": "↪️"
+ },
+ "right arrow curving up": {
+ "emoji": "⤴️"
+ },
+ "right arrow curving down": {
+ "emoji": "⤵️"
+ },
+ "clockwise vertical arrows": {
+ "emoji": "🔃"
+ },
+ "counterclockwise arrows button": {
+ "emoji": "🔄"
+ },
+ "BACK arrow": {
+ "emoji": "🔙"
+ },
+ "END arrow": {
+ "emoji": "🔚"
+ },
+ "ON! arrow": {
+ "emoji": "🔛"
+ },
+ "SOON arrow": {
+ "emoji": "🔜"
+ },
+ "TOP arrow": {
+ "emoji": "🔝"
+ },
+ "place of worship": {
+ "emoji": "🛐"
+ },
+ "atom symbol": {
+ "emoji": "⚛️"
+ },
+ "om": {
+ "emoji": "🕉️"
+ },
+ "star of David": {
+ "emoji": "✡️"
+ },
+ "wheel of dharma": {
+ "emoji": "☸️"
+ },
+ "yin yang": {
+ "emoji": "☯️"
+ },
+ "latin cross": {
+ "emoji": "✝️"
+ },
+ "orthodox cross": {
+ "emoji": "☦️"
+ },
+ "star and crescent": {
+ "emoji": "☪️"
+ },
+ "peace symbol": {
+ "emoji": "☮️"
+ },
+ "menorah": {
+ "emoji": "🕎"
+ },
+ "dotted six-pointed star": {
+ "emoji": "🔯"
+ },
+ "Aries": {
+ "emoji": "♈"
+ },
+ "Taurus": {
+ "emoji": "♉"
+ },
+ "Gemini": {
+ "emoji": "♊"
+ },
+ "Cancer": {
+ "emoji": "♋"
+ },
+ "Leo": {
+ "emoji": "♌"
+ },
+ "Virgo": {
+ "emoji": "♍"
+ },
+ "Libra": {
+ "emoji": "♎"
+ },
+ "Scorpio": {
+ "emoji": "♏"
+ },
+ "Sagittarius": {
+ "emoji": "♐"
+ },
+ "Capricorn": {
+ "emoji": "♑"
+ },
+ "Aquarius": {
+ "emoji": "♒"
+ },
+ "Pisces": {
+ "emoji": "♓"
+ },
+ "Ophiuchus": {
+ "emoji": "⛎"
+ },
+ "shuffle tracks button": {
+ "emoji": "🔀"
+ },
+ "repeat button": {
+ "emoji": "🔁"
+ },
+ "repeat single button": {
+ "emoji": "🔂"
+ },
+ "play button": {
+ "emoji": "▶️"
+ },
+ "fast-forward button": {
+ "emoji": "⏩"
+ },
+ "next track button": {
+ "emoji": "⏭️"
+ },
+ "play or pause button": {
+ "emoji": "⏯️"
+ },
+ "reverse button": {
+ "emoji": "◀️"
+ },
+ "fast reverse button": {
+ "emoji": "⏪"
+ },
+ "last track button": {
+ "emoji": "⏮️"
+ },
+ "upwards button": {
+ "emoji": "🔼"
+ },
+ "fast up button": {
+ "emoji": "⏫"
+ },
+ "downwards button": {
+ "emoji": "🔽"
+ },
+ "fast down button": {
+ "emoji": "⏬"
+ },
+ "pause button": {
+ "emoji": "⏸️"
+ },
+ "stop button": {
+ "emoji": "⏹️"
+ },
+ "record button": {
+ "emoji": "⏺️"
+ },
+ "eject button": {
+ "emoji": "⏏️"
+ },
+ "cinema": {
+ "emoji": "🎦"
+ },
+ "dim button": {
+ "emoji": "🔅"
+ },
+ "bright button": {
+ "emoji": "🔆"
+ },
+ "antenna bars": {
+ "emoji": "📶"
+ },
+ "vibration mode": {
+ "emoji": "📳"
+ },
+ "mobile phone off": {
+ "emoji": "📴"
+ },
+ "female sign": {
+ "emoji": "♀️"
+ },
+ "male sign": {
+ "emoji": "♂️"
+ },
+ "transgender symbol": {
+ "emoji": "⚧️"
+ },
+ "multiply": {
+ "emoji": "✖️"
+ },
+ "plus": {
+ "emoji": "➕"
+ },
+ "minus": {
+ "emoji": "➖"
+ },
+ "divide": {
+ "emoji": "➗"
+ },
+ "infinity": {
+ "emoji": "♾️"
+ },
+ "double exclamation mark": {
+ "emoji": "‼️"
+ },
+ "exclamation question mark": {
+ "emoji": "⁉️"
+ },
+ "question mark": {
+ "emoji": "❓"
+ },
+ "white question mark": {
+ "emoji": "❔"
+ },
+ "white exclamation mark": {
+ "emoji": "❕"
+ },
+ "exclamation mark": {
+ "emoji": "❗"
+ },
+ "wavy dash": {
+ "emoji": "〰️"
+ },
+ "currency exchange": {
+ "emoji": "💱"
+ },
+ "heavy dollar sign": {
+ "emoji": "💲"
+ },
+ "medical symbol": {
+ "emoji": "⚕️"
+ },
+ "recycling symbol": {
+ "emoji": "♻️"
+ },
+ "fleur-de-lis": {
+ "emoji": "⚜️"
+ },
+ "trident emblem": {
+ "emoji": "🔱"
+ },
+ "name badge": {
+ "emoji": "📛"
+ },
+ "Japanese symbol for beginner": {
+ "emoji": "🔰"
+ },
+ "hollow red circle": {
+ "emoji": "⭕"
+ },
+ "check mark button": {
+ "emoji": "✅"
+ },
+ "check box with check": {
+ "emoji": "☑️"
+ },
+ "check mark": {
+ "emoji": "✔️"
+ },
+ "cross mark": {
+ "emoji": "❌"
+ },
+ "cross mark button": {
+ "emoji": "❎"
+ },
+ "curly loop": {
+ "emoji": "➰"
+ },
+ "double curly loop": {
+ "emoji": "➿"
+ },
+ "part alternation mark": {
+ "emoji": "〽️"
+ },
+ "eight-spoked asterisk": {
+ "emoji": "✳️"
+ },
+ "eight-pointed star": {
+ "emoji": "✴️"
+ },
+ "sparkle": {
+ "emoji": "❇️"
+ },
+ "copyright": {
+ "emoji": "©️"
+ },
+ "registered": {
+ "emoji": "®️"
+ },
+ "trade mark": {
+ "emoji": "™️"
+ },
+ "keycap: #": {
+ "emoji": "#️⃣"
+ },
+ "keycap: *": {
+ "emoji": "*️⃣"
+ },
+ "keycap: 0": {
+ "emoji": "0️⃣"
+ },
+ "keycap: 1": {
+ "emoji": "1️⃣"
+ },
+ "keycap: 2": {
+ "emoji": "2️⃣"
+ },
+ "keycap: 3": {
+ "emoji": "3️⃣"
+ },
+ "keycap: 4": {
+ "emoji": "4️⃣"
+ },
+ "keycap: 5": {
+ "emoji": "5️⃣"
+ },
+ "keycap: 6": {
+ "emoji": "6️⃣"
+ },
+ "keycap: 7": {
+ "emoji": "7️⃣"
+ },
+ "keycap: 8": {
+ "emoji": "8️⃣"
+ },
+ "keycap: 9": {
+ "emoji": "9️⃣"
+ },
+ "keycap: 10": {
+ "emoji": "🔟"
+ },
+ "input latin uppercase": {
+ "emoji": "🔠"
+ },
+ "input latin lowercase": {
+ "emoji": "🔡"
+ },
+ "input numbers": {
+ "emoji": "🔢"
+ },
+ "input symbols": {
+ "emoji": "🔣"
+ },
+ "input latin letters": {
+ "emoji": "🔤"
+ },
+ "A button (blood type)": {
+ "emoji": "🅰️"
+ },
+ "AB button (blood type)": {
+ "emoji": "🆎"
+ },
+ "B button (blood type)": {
+ "emoji": "🅱️"
+ },
+ "CL button": {
+ "emoji": "🆑"
+ },
+ "COOL button": {
+ "emoji": "🆒"
+ },
+ "FREE button": {
+ "emoji": "🆓"
+ },
+ "information": {
+ "emoji": "ℹ️"
+ },
+ "ID button": {
+ "emoji": "🆔"
+ },
+ "circled M": {
+ "emoji": "Ⓜ️"
+ },
+ "NEW button": {
+ "emoji": "🆕"
+ },
+ "NG button": {
+ "emoji": "🆖"
+ },
+ "O button (blood type)": {
+ "emoji": "🅾️"
+ },
+ "OK button": {
+ "emoji": "🆗"
+ },
+ "P button": {
+ "emoji": "🅿️"
+ },
+ "SOS button": {
+ "emoji": "🆘"
+ },
+ "UP! button": {
+ "emoji": "🆙"
+ },
+ "VS button": {
+ "emoji": "🆚"
+ },
+ "Japanese “here” button": {
+ "emoji": "🈁"
+ },
+ "Japanese “service charge” button": {
+ "emoji": "🈂️"
+ },
+ "Japanese “monthly amount” button": {
+ "emoji": "🈷️"
+ },
+ "Japanese “not free of charge” button": {
+ "emoji": "🈶"
+ },
+ "Japanese “reserved” button": {
+ "emoji": "🈯"
+ },
+ "Japanese “bargain” button": {
+ "emoji": "🉐"
+ },
+ "Japanese “discount” button": {
+ "emoji": "🈹"
+ },
+ "Japanese “free of charge” button": {
+ "emoji": "🈚"
+ },
+ "Japanese “prohibited” button": {
+ "emoji": "🈲"
+ },
+ "Japanese “acceptable” button": {
+ "emoji": "🉑"
+ },
+ "Japanese “application” button": {
+ "emoji": "🈸"
+ },
+ "Japanese “passing grade” button": {
+ "emoji": "🈴"
+ },
+ "Japanese “vacancy” button": {
+ "emoji": "🈳"
+ },
+ "Japanese “congratulations” button": {
+ "emoji": "㊗️"
+ },
+ "Japanese “secret” button": {
+ "emoji": "㊙️"
+ },
+ "Japanese “open for business” button": {
+ "emoji": "🈺"
+ },
+ "Japanese “no vacancy” button": {
+ "emoji": "🈵"
+ },
+ "red circle": {
+ "emoji": "🔴"
+ },
+ "orange circle": {
+ "emoji": "🟠"
+ },
+ "yellow circle": {
+ "emoji": "🟡"
+ },
+ "green circle": {
+ "emoji": "🟢"
+ },
+ "blue circle": {
+ "emoji": "🔵"
+ },
+ "purple circle": {
+ "emoji": "🟣"
+ },
+ "brown circle": {
+ "emoji": "🟤"
+ },
+ "black circle": {
+ "emoji": "⚫"
+ },
+ "white circle": {
+ "emoji": "⚪"
+ },
+ "red square": {
+ "emoji": "🟥"
+ },
+ "orange square": {
+ "emoji": "🟧"
+ },
+ "yellow square": {
+ "emoji": "🟨"
+ },
+ "green square": {
+ "emoji": "🟩"
+ },
+ "blue square": {
+ "emoji": "🟦"
+ },
+ "purple square": {
+ "emoji": "🟪"
+ },
+ "brown square": {
+ "emoji": "🟫"
+ },
+ "black large square": {
+ "emoji": "⬛"
+ },
+ "white large square": {
+ "emoji": "⬜"
+ },
+ "black medium square": {
+ "emoji": "◼️"
+ },
+ "white medium square": {
+ "emoji": "◻️"
+ },
+ "black medium-small square": {
+ "emoji": "◾"
+ },
+ "white medium-small square": {
+ "emoji": "◽"
+ },
+ "black small square": {
+ "emoji": "▪️"
+ },
+ "white small square": {
+ "emoji": "▫️"
+ },
+ "large orange diamond": {
+ "emoji": "🔶"
+ },
+ "large blue diamond": {
+ "emoji": "🔷"
+ },
+ "small orange diamond": {
+ "emoji": "🔸"
+ },
+ "small blue diamond": {
+ "emoji": "🔹"
+ },
+ "red triangle pointed up": {
+ "emoji": "🔺"
+ },
+ "red triangle pointed down": {
+ "emoji": "🔻"
+ },
+ "diamond with a dot": {
+ "emoji": "💠"
+ },
+ "radio button": {
+ "emoji": "🔘"
+ },
+ "white square button": {
+ "emoji": "🔳"
+ },
+ "black square button": {
+ "emoji": "🔲"
+ },
+ "chequered flag": {
+ "emoji": "🏁"
+ },
+ "triangular flag": {
+ "emoji": "🚩"
+ },
+ "crossed flags": {
+ "emoji": "🎌"
+ },
+ "black flag": {
+ "emoji": "🏴"
+ },
+ "white flag": {
+ "emoji": "🏳️"
+ },
+ "rainbow flag": {
+ "emoji": "🏳️🌈"
+ },
+ "transgender flag": {
+ "emoji": "🏳️⚧️"
+ },
+ "pirate flag": {
+ "emoji": "🏴☠️"
+ },
+ "flag: Ascension Island": {
+ "emoji": "🇦🇨"
+ },
+ "flag: Andorra": {
+ "emoji": "🇦🇩"
+ },
+ "flag: United Arab Emirates": {
+ "emoji": "🇦🇪"
+ },
+ "flag: Afghanistan": {
+ "emoji": "🇦🇫"
+ },
+ "flag: Antigua & Barbuda": {
+ "emoji": "🇦🇬"
+ },
+ "flag: Anguilla": {
+ "emoji": "🇦🇮"
+ },
+ "flag: Albania": {
+ "emoji": "🇦🇱"
+ },
+ "flag: Armenia": {
+ "emoji": "🇦🇲"
+ },
+ "flag: Angola": {
+ "emoji": "🇦🇴"
+ },
+ "flag: Antarctica": {
+ "emoji": "🇦🇶"
+ },
+ "flag: Argentina": {
+ "emoji": "🇦🇷"
+ },
+ "flag: American Samoa": {
+ "emoji": "🇦🇸"
+ },
+ "flag: Austria": {
+ "emoji": "🇦🇹"
+ },
+ "flag: Australia": {
+ "emoji": "🇦🇺"
+ },
+ "flag: Aruba": {
+ "emoji": "🇦🇼"
+ },
+ "flag: Åland Islands": {
+ "emoji": "🇦🇽"
+ },
+ "flag: Azerbaijan": {
+ "emoji": "🇦🇿"
+ },
+ "flag: Bosnia & Herzegovina": {
+ "emoji": "🇧🇦"
+ },
+ "flag: Barbados": {
+ "emoji": "🇧🇧"
+ },
+ "flag: Bangladesh": {
+ "emoji": "🇧🇩"
+ },
+ "flag: Belgium": {
+ "emoji": "🇧🇪"
+ },
+ "flag: Burkina Faso": {
+ "emoji": "🇧🇫"
+ },
+ "flag: Bulgaria": {
+ "emoji": "🇧🇬"
+ },
+ "flag: Bahrain": {
+ "emoji": "🇧🇭"
+ },
+ "flag: Burundi": {
+ "emoji": "🇧🇮"
+ },
+ "flag: Benin": {
+ "emoji": "🇧🇯"
+ },
+ "flag: St. Barthélemy": {
+ "emoji": "🇧🇱"
+ },
+ "flag: Bermuda": {
+ "emoji": "🇧🇲"
+ },
+ "flag: Brunei": {
+ "emoji": "🇧🇳"
+ },
+ "flag: Bolivia": {
+ "emoji": "🇧🇴"
+ },
+ "flag: Caribbean Netherlands": {
+ "emoji": "🇧🇶"
+ },
+ "flag: Brazil": {
+ "emoji": "🇧🇷"
+ },
+ "flag: Bahamas": {
+ "emoji": "🇧🇸"
+ },
+ "flag: Bhutan": {
+ "emoji": "🇧🇹"
+ },
+ "flag: Bouvet Island": {
+ "emoji": "🇧🇻"
+ },
+ "flag: Botswana": {
+ "emoji": "🇧🇼"
+ },
+ "flag: Belarus": {
+ "emoji": "🇧🇾"
+ },
+ "flag: Belize": {
+ "emoji": "🇧🇿"
+ },
+ "flag: Canada": {
+ "emoji": "🇨🇦"
+ },
+ "flag: Cocos (Keeling) Islands": {
+ "emoji": "🇨🇨"
+ },
+ "flag: Congo - Kinshasa": {
+ "emoji": "🇨🇩"
+ },
+ "flag: Central African Republic": {
+ "emoji": "🇨🇫"
+ },
+ "flag: Congo - Brazzaville": {
+ "emoji": "🇨🇬"
+ },
+ "flag: Switzerland": {
+ "emoji": "🇨🇭"
+ },
+ "flag: Côte d’Ivoire": {
+ "emoji": "🇨🇮"
+ },
+ "flag: Cook Islands": {
+ "emoji": "🇨🇰"
+ },
+ "flag: Chile": {
+ "emoji": "🇨🇱"
+ },
+ "flag: Cameroon": {
+ "emoji": "🇨🇲"
+ },
+ "flag: China": {
+ "emoji": "🇨🇳"
+ },
+ "flag: Colombia": {
+ "emoji": "🇨🇴"
+ },
+ "flag: Clipperton Island": {
+ "emoji": "🇨🇵"
+ },
+ "flag: Costa Rica": {
+ "emoji": "🇨🇷"
+ },
+ "flag: Cuba": {
+ "emoji": "🇨🇺"
+ },
+ "flag: Cape Verde": {
+ "emoji": "🇨🇻"
+ },
+ "flag: Curaçao": {
+ "emoji": "🇨🇼"
+ },
+ "flag: Christmas Island": {
+ "emoji": "🇨🇽"
+ },
+ "flag: Cyprus": {
+ "emoji": "🇨🇾"
+ },
+ "flag: Czechia": {
+ "emoji": "🇨🇿"
+ },
+ "flag: Germany": {
+ "emoji": "🇩🇪"
+ },
+ "flag: Diego Garcia": {
+ "emoji": "🇩🇬"
+ },
+ "flag: Djibouti": {
+ "emoji": "🇩🇯"
+ },
+ "flag: Denmark": {
+ "emoji": "🇩🇰"
+ },
+ "flag: Dominica": {
+ "emoji": "🇩🇲"
+ },
+ "flag: Dominican Republic": {
+ "emoji": "🇩🇴"
+ },
+ "flag: Algeria": {
+ "emoji": "🇩🇿"
+ },
+ "flag: Ceuta & Melilla": {
+ "emoji": "🇪🇦"
+ },
+ "flag: Ecuador": {
+ "emoji": "🇪🇨"
+ },
+ "flag: Estonia": {
+ "emoji": "🇪🇪"
+ },
+ "flag: Egypt": {
+ "emoji": "🇪🇬"
+ },
+ "flag: Western Sahara": {
+ "emoji": "🇪🇭"
+ },
+ "flag: Eritrea": {
+ "emoji": "🇪🇷"
+ },
+ "flag: Spain": {
+ "emoji": "🇪🇸"
+ },
+ "flag: Ethiopia": {
+ "emoji": "🇪🇹"
+ },
+ "flag: European Union": {
+ "emoji": "🇪🇺"
+ },
+ "flag: Finland": {
+ "emoji": "🇫🇮"
+ },
+ "flag: Fiji": {
+ "emoji": "🇫🇯"
+ },
+ "flag: Falkland Islands": {
+ "emoji": "🇫🇰"
+ },
+ "flag: Micronesia": {
+ "emoji": "🇫🇲"
+ },
+ "flag: Faroe Islands": {
+ "emoji": "🇫🇴"
+ },
+ "flag: France": {
+ "emoji": "🇫🇷"
+ },
+ "flag: Gabon": {
+ "emoji": "🇬🇦"
+ },
+ "flag: United Kingdom": {
+ "emoji": "🇬🇧"
+ },
+ "flag: Grenada": {
+ "emoji": "🇬🇩"
+ },
+ "flag: Georgia": {
+ "emoji": "🇬🇪"
+ },
+ "flag: French Guiana": {
+ "emoji": "🇬🇫"
+ },
+ "flag: Guernsey": {
+ "emoji": "🇬🇬"
+ },
+ "flag: Ghana": {
+ "emoji": "🇬🇭"
+ },
+ "flag: Gibraltar": {
+ "emoji": "🇬🇮"
+ },
+ "flag: Greenland": {
+ "emoji": "🇬🇱"
+ },
+ "flag: Gambia": {
+ "emoji": "🇬🇲"
+ },
+ "flag: Guinea": {
+ "emoji": "🇬🇳"
+ },
+ "flag: Guadeloupe": {
+ "emoji": "🇬🇵"
+ },
+ "flag: Equatorial Guinea": {
+ "emoji": "🇬🇶"
+ },
+ "flag: Greece": {
+ "emoji": "🇬🇷"
+ },
+ "flag: South Georgia & South Sandwich Islands": {
+ "emoji": "🇬🇸"
+ },
+ "flag: Guatemala": {
+ "emoji": "🇬🇹"
+ },
+ "flag: Guam": {
+ "emoji": "🇬🇺"
+ },
+ "flag: Guinea-Bissau": {
+ "emoji": "🇬🇼"
+ },
+ "flag: Guyana": {
+ "emoji": "🇬🇾"
+ },
+ "flag: Hong Kong SAR China": {
+ "emoji": "🇭🇰"
+ },
+ "flag: Heard & McDonald Islands": {
+ "emoji": "🇭🇲"
+ },
+ "flag: Honduras": {
+ "emoji": "🇭🇳"
+ },
+ "flag: Croatia": {
+ "emoji": "🇭🇷"
+ },
+ "flag: Haiti": {
+ "emoji": "🇭🇹"
+ },
+ "flag: Hungary": {
+ "emoji": "🇭🇺"
+ },
+ "flag: Canary Islands": {
+ "emoji": "🇮🇨"
+ },
+ "flag: Indonesia": {
+ "emoji": "🇮🇩"
+ },
+ "flag: Ireland": {
+ "emoji": "🇮🇪"
+ },
+ "flag: Israel": {
+ "emoji": "🇮🇱"
+ },
+ "flag: Isle of Man": {
+ "emoji": "🇮🇲"
+ },
+ "flag: India": {
+ "emoji": "🇮🇳"
+ },
+ "flag: British Indian Ocean Territory": {
+ "emoji": "🇮🇴"
+ },
+ "flag: Iraq": {
+ "emoji": "🇮🇶"
+ },
+ "flag: Iran": {
+ "emoji": "🇮🇷"
+ },
+ "flag: Iceland": {
+ "emoji": "🇮🇸"
+ },
+ "flag: Italy": {
+ "emoji": "🇮🇹"
+ },
+ "flag: Jersey": {
+ "emoji": "🇯🇪"
+ },
+ "flag: Jamaica": {
+ "emoji": "🇯🇲"
+ },
+ "flag: Jordan": {
+ "emoji": "🇯🇴"
+ },
+ "flag: Japan": {
+ "emoji": "🇯🇵"
+ },
+ "flag: Kenya": {
+ "emoji": "🇰🇪"
+ },
+ "flag: Kyrgyzstan": {
+ "emoji": "🇰🇬"
+ },
+ "flag: Cambodia": {
+ "emoji": "🇰🇭"
+ },
+ "flag: Kiribati": {
+ "emoji": "🇰🇮"
+ },
+ "flag: Comoros": {
+ "emoji": "🇰🇲"
+ },
+ "flag: St. Kitts & Nevis": {
+ "emoji": "🇰🇳"
+ },
+ "flag: North Korea": {
+ "emoji": "🇰🇵"
+ },
+ "flag: South Korea": {
+ "emoji": "🇰🇷"
+ },
+ "flag: Kuwait": {
+ "emoji": "🇰🇼"
+ },
+ "flag: Cayman Islands": {
+ "emoji": "🇰🇾"
+ },
+ "flag: Kazakhstan": {
+ "emoji": "🇰🇿"
+ },
+ "flag: Laos": {
+ "emoji": "🇱🇦"
+ },
+ "flag: Lebanon": {
+ "emoji": "🇱🇧"
+ },
+ "flag: St. Lucia": {
+ "emoji": "🇱🇨"
+ },
+ "flag: Liechtenstein": {
+ "emoji": "🇱🇮"
+ },
+ "flag: Sri Lanka": {
+ "emoji": "🇱🇰"
+ },
+ "flag: Liberia": {
+ "emoji": "🇱🇷"
+ },
+ "flag: Lesotho": {
+ "emoji": "🇱🇸"
+ },
+ "flag: Lithuania": {
+ "emoji": "🇱🇹"
+ },
+ "flag: Luxembourg": {
+ "emoji": "🇱🇺"
+ },
+ "flag: Latvia": {
+ "emoji": "🇱🇻"
+ },
+ "flag: Libya": {
+ "emoji": "🇱🇾"
+ },
+ "flag: Morocco": {
+ "emoji": "🇲🇦"
+ },
+ "flag: Monaco": {
+ "emoji": "🇲🇨"
+ },
+ "flag: Moldova": {
+ "emoji": "🇲🇩"
+ },
+ "flag: Montenegro": {
+ "emoji": "🇲🇪"
+ },
+ "flag: St. Martin": {
+ "emoji": "🇲🇫"
+ },
+ "flag: Madagascar": {
+ "emoji": "🇲🇬"
+ },
+ "flag: Marshall Islands": {
+ "emoji": "🇲🇭"
+ },
+ "flag: North Macedonia": {
+ "emoji": "🇲🇰"
+ },
+ "flag: Mali": {
+ "emoji": "🇲🇱"
+ },
+ "flag: Myanmar (Burma)": {
+ "emoji": "🇲🇲"
+ },
+ "flag: Mongolia": {
+ "emoji": "🇲🇳"
+ },
+ "flag: Macao SAR China": {
+ "emoji": "🇲🇴"
+ },
+ "flag: Northern Mariana Islands": {
+ "emoji": "🇲🇵"
+ },
+ "flag: Martinique": {
+ "emoji": "🇲🇶"
+ },
+ "flag: Mauritania": {
+ "emoji": "🇲🇷"
+ },
+ "flag: Montserrat": {
+ "emoji": "🇲🇸"
+ },
+ "flag: Malta": {
+ "emoji": "🇲🇹"
+ },
+ "flag: Mauritius": {
+ "emoji": "🇲🇺"
+ },
+ "flag: Maldives": {
+ "emoji": "🇲🇻"
+ },
+ "flag: Malawi": {
+ "emoji": "🇲🇼"
+ },
+ "flag: Mexico": {
+ "emoji": "🇲🇽"
+ },
+ "flag: Malaysia": {
+ "emoji": "🇲🇾"
+ },
+ "flag: Mozambique": {
+ "emoji": "🇲🇿"
+ },
+ "flag: Namibia": {
+ "emoji": "🇳🇦"
+ },
+ "flag: New Caledonia": {
+ "emoji": "🇳🇨"
+ },
+ "flag: Niger": {
+ "emoji": "🇳🇪"
+ },
+ "flag: Norfolk Island": {
+ "emoji": "🇳🇫"
+ },
+ "flag: Nigeria": {
+ "emoji": "🇳🇬"
+ },
+ "flag: Nicaragua": {
+ "emoji": "🇳🇮"
+ },
+ "flag: Netherlands": {
+ "emoji": "🇳🇱"
+ },
+ "flag: Norway": {
+ "emoji": "🇳🇴"
+ },
+ "flag: Nepal": {
+ "emoji": "🇳🇵"
+ },
+ "flag: Nauru": {
+ "emoji": "🇳🇷"
+ },
+ "flag: Niue": {
+ "emoji": "🇳🇺"
+ },
+ "flag: New Zealand": {
+ "emoji": "🇳🇿"
+ },
+ "flag: Oman": {
+ "emoji": "🇴🇲"
+ },
+ "flag: Panama": {
+ "emoji": "🇵🇦"
+ },
+ "flag: Peru": {
+ "emoji": "🇵🇪"
+ },
+ "flag: French Polynesia": {
+ "emoji": "🇵🇫"
+ },
+ "flag: Papua New Guinea": {
+ "emoji": "🇵🇬"
+ },
+ "flag: Philippines": {
+ "emoji": "🇵🇭"
+ },
+ "flag: Pakistan": {
+ "emoji": "🇵🇰"
+ },
+ "flag: Poland": {
+ "emoji": "🇵🇱"
+ },
+ "flag: St. Pierre & Miquelon": {
+ "emoji": "🇵🇲"
+ },
+ "flag: Pitcairn Islands": {
+ "emoji": "🇵🇳"
+ },
+ "flag: Puerto Rico": {
+ "emoji": "🇵🇷"
+ },
+ "flag: Palestinian Territories": {
+ "emoji": "🇵🇸"
+ },
+ "flag: Portugal": {
+ "emoji": "🇵🇹"
+ },
+ "flag: Palau": {
+ "emoji": "🇵🇼"
+ },
+ "flag: Paraguay": {
+ "emoji": "🇵🇾"
+ },
+ "flag: Qatar": {
+ "emoji": "🇶🇦"
+ },
+ "flag: Réunion": {
+ "emoji": "🇷🇪"
+ },
+ "flag: Romania": {
+ "emoji": "🇷🇴"
+ },
+ "flag: Serbia": {
+ "emoji": "🇷🇸"
+ },
+ "flag: Russia": {
+ "emoji": "🇷🇺"
+ },
+ "flag: Rwanda": {
+ "emoji": "🇷🇼"
+ },
+ "flag: Saudi Arabia": {
+ "emoji": "🇸🇦"
+ },
+ "flag: Solomon Islands": {
+ "emoji": "🇸🇧"
+ },
+ "flag: Seychelles": {
+ "emoji": "🇸🇨"
+ },
+ "flag: Sudan": {
+ "emoji": "🇸🇩"
+ },
+ "flag: Sweden": {
+ "emoji": "🇸🇪"
+ },
+ "flag: Singapore": {
+ "emoji": "🇸🇬"
+ },
+ "flag: St. Helena": {
+ "emoji": "🇸🇭"
+ },
+ "flag: Slovenia": {
+ "emoji": "🇸🇮"
+ },
+ "flag: Svalbard & Jan Mayen": {
+ "emoji": "🇸🇯"
+ },
+ "flag: Slovakia": {
+ "emoji": "🇸🇰"
+ },
+ "flag: Sierra Leone": {
+ "emoji": "🇸🇱"
+ },
+ "flag: San Marino": {
+ "emoji": "🇸🇲"
+ },
+ "flag: Senegal": {
+ "emoji": "🇸🇳"
+ },
+ "flag: Somalia": {
+ "emoji": "🇸🇴"
+ },
+ "flag: Suriname": {
+ "emoji": "🇸🇷"
+ },
+ "flag: South Sudan": {
+ "emoji": "🇸🇸"
+ },
+ "flag: São Tomé & Príncipe": {
+ "emoji": "🇸🇹"
+ },
+ "flag: El Salvador": {
+ "emoji": "🇸🇻"
+ },
+ "flag: Sint Maarten": {
+ "emoji": "🇸🇽"
+ },
+ "flag: Syria": {
+ "emoji": "🇸🇾"
+ },
+ "flag: Eswatini": {
+ "emoji": "🇸🇿"
+ },
+ "flag: Tristan da Cunha": {
+ "emoji": "🇹🇦"
+ },
+ "flag: Turks & Caicos Islands": {
+ "emoji": "🇹🇨"
+ },
+ "flag: Chad": {
+ "emoji": "🇹🇩"
+ },
+ "flag: French Southern Territories": {
+ "emoji": "🇹🇫"
+ },
+ "flag: Togo": {
+ "emoji": "🇹🇬"
+ },
+ "flag: Thailand": {
+ "emoji": "🇹🇭"
+ },
+ "flag: Tajikistan": {
+ "emoji": "🇹🇯"
+ },
+ "flag: Tokelau": {
+ "emoji": "🇹🇰"
+ },
+ "flag: Timor-Leste": {
+ "emoji": "🇹🇱"
+ },
+ "flag: Turkmenistan": {
+ "emoji": "🇹🇲"
+ },
+ "flag: Tunisia": {
+ "emoji": "🇹🇳"
+ },
+ "flag: Tonga": {
+ "emoji": "🇹🇴"
+ },
+ "flag: Turkey": {
+ "emoji": "🇹🇷"
+ },
+ "flag: Trinidad & Tobago": {
+ "emoji": "🇹🇹"
+ },
+ "flag: Tuvalu": {
+ "emoji": "🇹🇻"
+ },
+ "flag: Taiwan": {
+ "emoji": "🇹🇼"
+ },
+ "flag: Tanzania": {
+ "emoji": "🇹🇿"
+ },
+ "flag: Ukraine": {
+ "emoji": "🇺🇦"
+ },
+ "flag: Uganda": {
+ "emoji": "🇺🇬"
+ },
+ "flag: U.S. Outlying Islands": {
+ "emoji": "🇺🇲"
+ },
+ "flag: United Nations": {
+ "emoji": "🇺🇳"
+ },
+ "flag: United States": {
+ "emoji": "🇺🇸"
+ },
+ "flag: Uruguay": {
+ "emoji": "🇺🇾"
+ },
+ "flag: Uzbekistan": {
+ "emoji": "🇺🇿"
+ },
+ "flag: Vatican City": {
+ "emoji": "🇻🇦"
+ },
+ "flag: St. Vincent & Grenadines": {
+ "emoji": "🇻🇨"
+ },
+ "flag: Venezuela": {
+ "emoji": "🇻🇪"
+ },
+ "flag: British Virgin Islands": {
+ "emoji": "🇻🇬"
+ },
+ "flag: U.S. Virgin Islands": {
+ "emoji": "🇻🇮"
+ },
+ "flag: Vietnam": {
+ "emoji": "🇻🇳"
+ },
+ "flag: Vanuatu": {
+ "emoji": "🇻🇺"
+ },
+ "flag: Wallis & Futuna": {
+ "emoji": "🇼🇫"
+ },
+ "flag: Samoa": {
+ "emoji": "🇼🇸"
+ },
+ "flag: Kosovo": {
+ "emoji": "🇽🇰"
+ },
+ "flag: Yemen": {
+ "emoji": "🇾🇪"
+ },
+ "flag: Mayotte": {
+ "emoji": "🇾🇹"
+ },
+ "flag: South Africa": {
+ "emoji": "🇿🇦"
+ },
+ "flag: Zambia": {
+ "emoji": "🇿🇲"
+ },
+ "flag: Zimbabwe": {
+ "emoji": "🇿🇼"
+ },
+ "flag: England": {
+ "emoji": "🏴"
+ },
+ "flag: Scotland": {
+ "emoji": "🏴"
+ },
+ "flag: Wales": {
+ "emoji": "🏴"
+ }
+}
diff --git a/src/data/tabs.json b/src/data/tabs.json
index 7e5be1d..9068d66 100644
--- a/src/data/tabs.json
+++ b/src/data/tabs.json
@@ -21,11 +21,6 @@
},
"ranklist": {
"href": "/ranklist",
- "text": "Ranglista"
- },
- "feedback": {
- "href": "/feedback",
- "text": "Feedback",
- "id": "feedback"
+ "text": "Ranklista"
}
}
diff --git a/src/defaultStyles.css b/src/defaultStyles.css
index bd660d3..2307a10 100644
--- a/src/defaultStyles.css
+++ b/src/defaultStyles.css
@@ -1,5 +1,6 @@
:root {
- --text-color: #F2CB05;
+ --text-color: #f2cb05;
+ --primary-color: #9999ff;
--bright-color: #f2f2f2;
--background-color: #222426;
--hoover-color: #191919;
@@ -18,7 +19,24 @@ a {
}
a:hover {
- color: #C1C1C1;
+ color: #c1c1c1;
+}
+
+textarea {
+ color: var(--text-color);
+ background-color: var(--background-color);
+ box-sizing: border-box;
+ height: 120px;
+ width: 100%;
+ border: 1px solid #666;
+ border-radius: 3px;
+}
+
+input {
+ color: var(--text-color);
+ background-color: var(--background-color);
+ border: 1px solid #444;
+ border-radius: 3px;
}
.link {
@@ -65,7 +83,7 @@ a:hover {
transition: width 0.5s, height 0.5s, ease-out 0.5s;
}
-.sidebarLinks a.active{
+.sidebarLinks a.active {
border: 0.5px solid var(--text-color);
color: white;
text-shadow: 2px 2px 8px black;
@@ -288,3 +306,21 @@ select:hover {
padding: 2px 6px;
font-size: 13.5px;
}
+
+.actions {
+ display: flex;
+ align-items: center;
+}
+
+.actions > span {
+ margin: 2px 2px;
+ padding: 0px 10px;
+ border: 1px solid #444;
+ border-radius: 6px;
+ cursor: pointer;
+ user-select: none;
+}
+
+.actions > span:hover {
+ background-color: var(--hoover-color);
+}
diff --git a/src/pages/feedback.js b/src/pages/feedback.js
deleted file mode 100644
index dc951ca..0000000
--- a/src/pages/feedback.js
+++ /dev/null
@@ -1,214 +0,0 @@
-import React, { useState } from 'react'
-import fetch from 'unfetch'
-import Head from 'next/head'
-
-import Button from '../components/Button.js'
-
-import styles from './feedback.module.css'
-import constants from '../constants.json'
-
-const results = {
- success: 'SUCCESS',
- error: 'ERROR',
- notSent: 'NOTSENT',
- invalid: 'INVALID',
-}
-
-export default function Feedback() {
- const [form, setForm] = useState({})
- const [file, setFile] = useState(undefined)
- const [result, setResult] = useState(results.notSent)
- const [fileResult, setFileResult] = useState(results.notSent)
-
- const onChange = (event) => {
- setForm({
- ...form,
- [event.target.name]: event.target.value,
- })
- }
-
- const renderTextInputArea = (params) => {
- return (
-
- )
- }
-
- const onFileChangeHandler = (event) => {
- setForm({
- ...form,
- file: event.target.files[0].name,
- })
- setFile(event.target.files[0])
- }
-
- const renderFileUploader = () => {
- return (
-
- )
- }
-
- const handleSubmit = async () => {
- if (!form.description) {
- setResult(results.invalid)
- }
-
- const t = document.getElementById('cid').value
- let cid = ''
- let version = ''
- if (t) {
- cid = t.split('|')[0]
- version = t.split('|')[1]
- }
-
- const rawResponse = await fetch(constants.apiUrl + 'postfeedback', {
- method: 'POST',
- credentials: 'include',
- headers: {
- Accept: 'application/json',
- 'Content-Type': 'application/json',
- },
- body: JSON.stringify({
- ...form,
- cid: cid,
- version: version,
- }),
- })
- rawResponse
- .json()
- .then((resp) => {
- if (resp.success) {
- setResult(results.success)
- } else {
- setResult(results.error)
- }
- })
- .catch((err) => {
- setResult(results.error)
- console.error(err)
- })
-
- if (file) {
- const formData = new FormData() // eslint-disable-line
- formData.append('file', file)
-
- const rawFileResponse = await fetch(
- constants.apiUrl + 'postfeedbackfile',
- {
- method: 'POST',
- credentials: 'include',
- headers: {
- Accept: 'application/json',
- },
- body: formData,
- }
- )
- rawFileResponse
- .json()
- .then((resp) => {
- if (resp.success) {
- setFileResult(results.success)
- } else {
- setFileResult(results.error)
- }
- })
- .catch((err) => {
- setFileResult(results.error)
- console.error('FILE error', err)
- })
- }
- }
-
- const renderResult = () => {
- if (results === result.success) {
- return sucess
- } else if (results === result.error) {
- return error
- } else if (results === result.invalid) {
- return invalid
- } else {
- return null
- }
- }
-
- // action={constants.apiUrl + 'badtestsender'} encType='multipart/form-data' method='post'
- const renderForm = (props) => {
- return (
-
- {props.noDesc ? (
-
Mező kitöltése kötelező!
- ) : null}
- {renderTextInputArea({
- text: 'Rövid leírás',
- name: 'description',
- onChange: onChange,
- autoFocus: true,
- })}
-
- Bal aluli levelesláda ikonnál keresd majd a választ
-
- {renderFileUploader()}
-
-
-
-
- {renderResult()}
-
- )
- }
-
- const renderStuff = () => {
- if (result === results.notSent && fileResult === results.notSent) {
- return {renderForm({})}
- } else if (result === results.invalid) {
- return (
- {renderForm({ noDesc: true })}
- )
- } else if (result === results.success && !file) {
- return Visszajelzés elküldve c:
- } else if (result === results.error && fileResult === results.success) {
- return Hiba küldés közben :c
- } else if (result === results.success && fileResult === results.error) {
- return (
-
- Visszajelzés elküldve, de fájlt nem sikerült elküldeni :c
-
- )
- } else if (result === results.success && fileResult === results.success) {
- return Visszajelzés elküldve c:
- } else {
- return Bit of a fuckup here
- }
- }
-
- return (
-
-
-
Feedback - Qmining | Frylabs.net
-
-
-
-
-
- {renderStuff()}
-
- )
-}
diff --git a/src/pages/feedback.module.css b/src/pages/feedback.module.css
deleted file mode 100644
index 0431c63..0000000
--- a/src/pages/feedback.module.css
+++ /dev/null
@@ -1,46 +0,0 @@
-.feedback {
- color: var(--text-color);
- background-color: var(--background-color);
- font-size: 16px;
- width: 100%;
- box-sizing: border-box;
- height: 120px;
-}
-
-.buttonContainer {
- text-align: 'center';
- width: 200px;
- margin: 0 auto;
- padding: 10px;
-}
-
-.desc {
- font-size: 16px;
- color: white;
-}
-
-.textTitle {
- color: var(--text-color);
- font-size: 20px;
-}
-
-.button {
- background-color: var(--text-color);
- border: none;
- padding: 10px 30px;
- color: white;
- width: 200px;
-}
-
-.textInputArea {
- padding: 20px 0px;
-}
-
-.fileInput {
- margin: 10px;
- color: var(--text-color);
-}
-
-.errorMsg {
- color: red;
-}
diff --git a/src/pages/index.js b/src/pages/index.js
index e10dd80..b5136f4 100644
--- a/src/pages/index.js
+++ b/src/pages/index.js
@@ -5,6 +5,8 @@ import Link from 'next/link'
import LoadingIndicator from '../components/LoadingIndicator'
import Sleep from '../components/sleep'
+import NewsEntry from '../components/newsEntry'
+import Composer from '../components/composer'
import DbSelector from '../components/dbSelector.js'
import styles from './index.module.css'
@@ -21,83 +23,254 @@ const links = {
},
}
-export default function Index(props) {
- const [news, setNews] = useState(null)
- const [allQrSelector, setAllQrSelector] = useState(null)
- const motd = props.globalData.motd
- // const userSpecificMotd = props.globalData.userSpecificMotd
-
- useEffect(() => {
- console.info('Fetching news.json')
+function fetchNews() {
+ return new Promise((resolve) => {
fetch(`${constants.apiUrl}news.json`, {
credentials: 'include',
})
.then((resp) => {
return resp.json()
})
- .then((data) => {
- setNews(data)
+ .then((res) => {
+ resolve(res)
})
+ })
+}
+
+function addPost(title, content) {
+ return new Promise((resolve) => {
+ fetch(constants.apiUrl + 'addPost', {
+ method: 'POST',
+ credentials: 'include',
+ headers: {
+ Accept: 'application/json',
+ 'Content-Type': 'application/json',
+ },
+ body: JSON.stringify({
+ title: title,
+ content: content,
+ }),
+ })
+ .then((res) => {
+ return res.json()
+ })
+ .then((res) => {
+ resolve(res)
+ })
+ })
+}
+
+function postFeedback(content, file) {
+ return new Promise((resolve) => {
+ const promises = [
+ fetch(constants.apiUrl + 'postfeedback', {
+ method: 'POST',
+ credentials: 'include',
+ headers: {
+ Accept: 'application/json',
+ 'Content-Type': 'application/json',
+ },
+ body: JSON.stringify({
+ content: content,
+ }),
+ }).then((res) => {
+ return res.json()
+ }),
+ ]
+
+ if (file) {
+ console.log('FIEEEEEEEEEELE')
+ const formData = new FormData() // eslint-disable-line
+ formData.append('file', file)
+
+ promises.push(
+ fetch(constants.apiUrl + 'postfeedbackfile', {
+ method: 'POST',
+ credentials: 'include',
+ headers: {
+ Accept: 'application/json',
+ },
+ body: formData,
+ }).then((res) => {
+ return res.json()
+ })
+ )
+ }
+
+ Promise.all(promises).then((res) => {
+ resolve(res)
+ })
+ })
+}
+
+export default function Index({ globalData }) {
+ const userId = globalData.userId
+ const motd = globalData.motd
+ const [news, setNews] = useState(null)
+ const [allQrSelector, setAllQrSelector] = useState(null)
+ // const userSpecificMotd = props.globalData.userSpecificMotd
+
+ useEffect(() => {
+ console.info('Fetching news.json')
+ fetchNews().then((res) => {
+ setNews(res)
+ })
}, [])
- const renderQAItem = (newsItem, key) => {
- return (
-
- )
- }
-
- const renderNewsItem = (newsItem, key) => {
- return (
-
- )
- }
-
const renderNews = () => {
if (news) {
- let questions = Object.keys(news)
+ let newsItems = Object.keys(news)
.map((key) => {
- let newsItem = news[key]
- if (newsItem.q) {
- return (
-
- {renderQAItem(newsItem, key)}
-
- )
- } else {
- return (
-
- {renderNewsItem(newsItem, key)}
-
- )
- }
+ let newsEntryData = news[key]
+ return (
+ {
+ fetch(constants.apiUrl + 'rmPost', {
+ method: 'POST',
+ credentials: 'include',
+ headers: {
+ Accept: 'application/json',
+ 'Content-Type': 'application/json',
+ },
+ body: JSON.stringify({
+ newsKey: key,
+ }),
+ })
+ .then((res) => {
+ return res.json()
+ })
+ .then((res) => {
+ setNews(res.news)
+ })
+ }}
+ onReact={({ type, path, reaction, isDelete }) => {
+ if (type === 'news') {
+ fetch(constants.apiUrl + 'infos', {
+ method: 'POST',
+ credentials: 'include',
+ headers: {
+ Accept: 'application/json',
+ 'Content-Type': 'application/json',
+ },
+ body: JSON.stringify({
+ react: reaction,
+ newsKey: key,
+ isDelete: isDelete,
+ }),
+ })
+ .then((res) => {
+ return res.json()
+ })
+ .then((res) => {
+ setNews(res.news)
+ })
+ } else if (type === 'comment') {
+ fetch(constants.apiUrl + 'comment', {
+ method: 'POST',
+ credentials: 'include',
+ headers: {
+ Accept: 'application/json',
+ 'Content-Type': 'application/json',
+ },
+ body: JSON.stringify({
+ type: 'reaction',
+ newsKey: key,
+ path: path,
+ reaction: reaction,
+ isDelete: isDelete,
+ }),
+ })
+ .then((res) => {
+ return res.json()
+ })
+ .then((res) => {
+ setNews(res.news)
+ })
+ }
+ }}
+ onDelete={(path) => {
+ fetch(constants.apiUrl + 'comment', {
+ method: 'POST',
+ credentials: 'include',
+ headers: {
+ Accept: 'application/json',
+ 'Content-Type': 'application/json',
+ },
+ body: JSON.stringify({
+ type: 'delete',
+ path: path,
+ newsKey: key,
+ }),
+ })
+ .then((res) => {
+ return res.json()
+ })
+ .then((res) => {
+ setNews(res.news)
+ })
+ }}
+ onComment={(path, content) => {
+ fetch(constants.apiUrl + 'comment', {
+ method: 'POST',
+ credentials: 'include',
+ headers: {
+ Accept: 'application/json',
+ 'Content-Type': 'application/json',
+ },
+ body: JSON.stringify({
+ type: 'add',
+ path: path,
+ content: content,
+ newsKey: key,
+ }),
+ })
+ .then((res) => {
+ return res.json()
+ })
+ .then((res) => {
+ setNews(res.news)
+ })
+ }}
+ uid={userId}
+ key={key}
+ newsKey={key}
+ newsItem={newsEntryData}
+ />
+ )
})
.reverse()
return (
Hírek
-
-
{questions}
+
+
Forum
+
+
{
+ if (!content) {
+ alert('Üres a tartalom!')
+ return
+ }
+ console.log(type, title, content, file)
+ if (type === 'private') {
+ postFeedback(content, file).then((res) => {
+ console.log(res)
+ alert('Privát visszajelzés elküldve!')
+ })
+ } else {
+ if (!title) {
+ alert('Üres a téma!')
+ return
+ }
+ addPost(title, content).then((res) => {
+ setNews(res.news)
+ })
+ }
+ }}
+ />
+
+ {newsItems}
)
} else {
@@ -109,6 +282,7 @@ export default function Index(props) {
return (