diff --git a/qtribu/gui/dck_qchat.py b/qtribu/gui/dck_qchat.py
index e13b07e5..2a465403 100644
--- a/qtribu/gui/dck_qchat.py
+++ b/qtribu/gui/dck_qchat.py
@@ -14,6 +14,7 @@
from qgis.PyQt.QtGui import QBrush, QColor, QIcon
from qgis.PyQt.QtWidgets import QMessageBox, QTreeWidgetItem, QWidget
+# plugin
from qtribu.__about__ import __title__
from qtribu.constants import (
ADMIN_MESSAGES_COLOR,
@@ -28,10 +29,9 @@
QCHAT_NICKNAME_MINLENGTH,
USER_MESSAGES_COLOR,
)
+from qtribu.gui.dlg_emoji_picker import QEmojiPicker
from qtribu.logic.qchat_client import QChatApiClient
from qtribu.tasks.dizzy import DizzyTask
-
-# plugin
from qtribu.toolbelt import PlgLogger, PlgOptionsManager
from qtribu.toolbelt.commons import open_url_in_webviewer, play_resource_sound
from qtribu.toolbelt.preferences import PlgSettingsStructure
@@ -58,6 +58,14 @@ def __init__(self, iface: QgisInterface, parent: QWidget = None):
self.task_manager = QgsApplication.taskManager()
self.log = PlgLogger().log
self.plg_settings = PlgOptionsManager()
+ self.emoji_picker = QEmojiPicker(
+ parent=self,
+ # this option can say how many emojis are in a row
+ items_per_row=8,
+ # with this enabled, the emoji search will be faster but less accurate
+ performance_search=True,
+ )
+
uic.loadUi(Path(__file__).parent / f"{Path(__file__).stem}.ui", self)
# rules and status signal listener
@@ -109,6 +117,8 @@ def __init__(self, iface: QgisInterface, parent: QWidget = None):
self.btn_send.setIcon(
QIcon(QgsApplication.iconPath("mActionDoubleArrowRight.svg"))
)
+ # connect emojis picker
+ self.btn_emojis_picker.pressed.connect(self.on_emoji_picker_pressed)
@property
def settings(self) -> PlgSettingsStructure:
@@ -505,6 +515,17 @@ def check_cheatcode(self, message: dict[str, str]) -> bool:
return True
return False
+ def on_emoji_picker_pressed(self) -> Optional[str]:
+ """Display the emoji picker and insert the selected one at the end of message line edit.
+
+ :return: selected emoji
+ :rtype: str
+ """
+ selected_emoji = self.emoji_picker.select()
+ self.lne_message.insert(selected_emoji)
+
+ return selected_emoji
+
def on_renew_clicked(self) -> None:
msg_box = QMessageBox()
msg_box.setWindowTitle(self.tr("QGIS"))
diff --git a/qtribu/gui/dck_qchat.ui b/qtribu/gui/dck_qchat.ui
index 6ee08f71..6cbf67b7 100644
--- a/qtribu/gui/dck_qchat.ui
+++ b/qtribu/gui/dck_qchat.ui
@@ -6,8 +6,8 @@
0
0
- 441
- 887
+ 341
+ 672
@@ -266,19 +266,6 @@
- -
-
-
- -
-
-
- PointingHandCursor
-
-
- Send message
-
-
-
-
@@ -292,6 +279,45 @@
+ -
+
+
-
+
+
+ -
+
+
+ PointingHandCursor
+
+
+ Qt::NoFocus
+
+
+ Qt::NoContextMenu
+
+
+ Pick an emoji. Not sure it'll be properly rendered for every users, still it's a bit of un.
+
+
+
+
+
+ ๐
+
+
+
+
+
+ -
+
+
+ PointingHandCursor
+
+
+ Send message
+
+
+
diff --git a/qtribu/gui/dlg_emoji_picker.py b/qtribu/gui/dlg_emoji_picker.py
new file mode 100644
index 00000000..da5fc02e
--- /dev/null
+++ b/qtribu/gui/dlg_emoji_picker.py
@@ -0,0 +1,2115 @@
+import typing
+
+from qgis.PyQt import QtCore, QtGui
+from qgis.PyQt.QtWidgets import (
+ QDialog,
+ QGridLayout,
+ QGroupBox,
+ QHBoxLayout,
+ QLabel,
+ QLineEdit,
+ QPushButton,
+ QScrollArea,
+ QSizePolicy,
+ QSpacerItem,
+ QVBoxLayout,
+ QWidget,
+)
+
+
+class QEmojiPicker(QDialog):
+ """A simple emoji picker"""
+
+ def __init__(
+ self,
+ parent: typing.Optional[QWidget] = None,
+ flags: typing.Union[QtCore.Qt.WindowFlags, QtCore.Qt.WindowType] = None,
+ items_per_row=8,
+ performance_search=True,
+ ):
+ """
+ Args:
+ parent: The parent window
+ flags: Qt flags
+ items_per_row: How many items per row should be displayed
+ performance_search: If True, the search input will display the emojis faster. See `self.on_input(...)` for more details
+ """
+ if flags:
+ super().__init__(parent, flags)
+ else:
+ super().__init__(parent)
+ # initializes the ui
+ self.setupUi(self)
+ self.retranslateUi(self)
+
+ self.items_per_row = items_per_row
+ self.performance_search = performance_search
+
+ self.selected_emoji = None
+
+ # connects `self.on_input(...)` whenever the search input text is changed
+ self.search_line_edit.textChanged.connect(self.on_input)
+
+ # the emojis. a pretty long dict...
+ self.emojis = {
+ "Smileys & People": {
+ "๐": "Grinning Face",
+ "๐": "Grinning Face with Big Eyes",
+ "๐": "Grinning Face with Smiling Eyes",
+ "๐": "Beaming Face with Smiling Eyes",
+ "๐": "Grinning Squinting Face",
+ "๐
": "Grinning Face with Sweat",
+ "๐คฃ": "Rolling on the Floor Laughing",
+ "๐": "Face with Tears of Joy",
+ "๐": "Slightly Smiling Face",
+ "๐": "Upside-Down Face",
+ "๐": "Winking Face",
+ "๐": "Smiling Face with Smiling Eyes",
+ "๐": "Smiling Face with Halo",
+ "๐ฅฐ": "Smiling Face with Hearts",
+ "๐": "Smiling Face with Heart-Eyes",
+ "๐คฉ": "Star-Struck",
+ "๐": "Face Blowing a Kiss",
+ "๐": "Kissing Face",
+ "โบ๏ธ": "Smiling Face",
+ "๐": "Kissing Face with Closed Eyes",
+ "๐": "Kissing Face with Smiling Eyes",
+ "๐ฅฒ": "Smiling Face with Tear",
+ "๐": "Face Savoring Food",
+ "๐": "Face with Tongue",
+ "๐": "Winking Face with Tongue",
+ "๐คช": "Zany Face",
+ "๐": "Squinting Face with Tongue",
+ "๐ค": "Money-Mouth Face",
+ "๐ค": "Hugging Face",
+ "๐คญ": "Face with Hand Over Mouth",
+ "๐คซ": "Shushing Face",
+ "๐ค": "Thinking Face",
+ "๐ค": "Zipper-Mouth Face",
+ "๐คจ": "Face with Raised Eyebrow",
+ "๐": "Neutral Face",
+ "๐": "Expressionless Face",
+ "๐ถ": "Face Without Mouth",
+ "๐": "Smirking Face",
+ "๐": "Unamused Face",
+ "๐": "Face with Rolling Eyes",
+ "๐ฌ": "Grimacing Face",
+ "๐คฅ": "Lying Face",
+ "๐": "Relieved Face",
+ "๐": "Pensive Face",
+ "๐ช": "Sleepy Face",
+ "๐คค": "Drooling Face",
+ "๐ด": "Sleeping Face",
+ "๐ท": "Face with Medical Mask",
+ "๐ค": "Face with Thermometer",
+ "๐ค": "Face with Head-Bandage",
+ "๐คข": "Nauseated Face",
+ "๐คฎ": "Face Vomiting",
+ "๐คง": "Sneezing Face",
+ "๐ฅต": "Hot Face",
+ "๐ฅถ": "Cold Face",
+ "๐ฅด": "Woozy Face",
+ "๐ต": "Dizzy Face",
+ "๐คฏ": "Exploding Head",
+ "๐ค ": "Cowboy Hat Face",
+ "๐ฅณ": "Partying Face",
+ "๐ฅธ": "Disguised Face",
+ "๐": "Smiling Face with Sunglasses",
+ "๐ค": "Nerd Face",
+ "๐ง": "Face with Monocle",
+ "๐": "Confused Face",
+ "๐": "Worried Face",
+ "๐": "Slightly Frowning Face",
+ "โน๏ธ": "Frowning Face",
+ "๐ฎ": "Face with Open Mouth",
+ "๐ฏ": "Hushed Face",
+ "๐ฒ": "Astonished Face",
+ "๐ณ": "Flushed Face",
+ "๐ฅบ": "Pleading Face",
+ "๐ฆ": "Frowning Face with Open Mouth",
+ "๐ง": "Anguished Face",
+ "๐จ": "Fearful Face",
+ "๐ฐ": "Anxious Face with Sweat",
+ "๐ฅ": "Sad but Relieved Face",
+ "๐ข": "Crying Face",
+ "๐ญ": "Loudly Crying Face",
+ "๐ฑ": "Face Screaming in Fear",
+ "๐": "Confounded Face",
+ "๐ฃ": "Persevering Face",
+ "๐": "Disappointed Face",
+ "๐": "Downcast Face with Sweat",
+ "๐ฉ": "Weary Face",
+ "๐ซ": "Tired Face",
+ "๐ฅฑ": "Yawning Face",
+ "๐ค": "Face with Steam From Nose",
+ "๐ก": "Pouting Face",
+ "๐ ": "Angry Face",
+ "๐คฌ": "Face with Symbols on Mouth",
+ "๐": "Smiling Face with Horns",
+ "๐ฟ": "Angry Face with Horns",
+ "๐": "Skull",
+ "โ ๏ธ": "Skull and Crossbones",
+ "๐ฉ": "Pile of Poo",
+ "๐คก": "Clown Face",
+ "๐น": "Ogre",
+ "๐บ": "Goblin",
+ "๐ป": "Ghost",
+ "๐ฝ": "Alien",
+ "๐พ": "Alien Monster",
+ "๐ค": "Robot",
+ "๐บ": "Grinning Cat",
+ "๐ธ": "Grinning Cat with Smiling Eyes",
+ "๐น": "Cat with Tears of Joy",
+ "๐ป": "Smiling Cat with Heart-Eyes",
+ "๐ผ": "Cat with Wry Smile",
+ "๐ฝ": "Kissing Cat",
+ "๐": "Weary Cat",
+ "๐ฟ": "Crying Cat",
+ "๐พ": "Pouting Cat",
+ "๐": "Kiss Mark",
+ "๐": "Waving Hand",
+ "๐ค": "Raised Back of Hand",
+ "๐๏ธ": "Hand with Fingers Splayed",
+ "โ": "Raised Hand",
+ "๐": "Vulcan Salute",
+ "๐": "OK Hand",
+ "๐ค": "Pinched Fingers",
+ "๐ค": "Pinching Hand",
+ "โ๏ธ": "Victory Hand",
+ "๐ค": "Crossed Fingers",
+ "๐ค": "Love-You Gesture",
+ "๐ค": "Sign of the Horns",
+ "๐ค": "Call Me Hand",
+ "๐": "Backhand Index Pointing Left",
+ "๐": "Backhand Index Pointing Right",
+ "๐": "Backhand Index Pointing Up",
+ "๐": "Middle Finger",
+ "๐": "Backhand Index Pointing Down",
+ "โ๏ธ": "Index Pointing Up",
+ "๐": "Thumbs Up",
+ "๐": "Thumbs Down",
+ "โ": "Raised Fist",
+ "๐": "Oncoming Fist",
+ "๐ค": "Left-Facing Fist",
+ "๐ค": "Right-Facing Fist",
+ "๐": "Clapping Hands",
+ "๐": "Raising Hands",
+ "๐": "Open Hands",
+ "๐คฒ": "Palms Up Together",
+ "๐ค": "Handshake",
+ "๐": "Folded Hands",
+ "โ๏ธ": "Writing Hand",
+ "๐
": "Nail Polish",
+ "๐คณ": "Selfie",
+ "๐ช": "Flexed Biceps",
+ "๐ฆพ": "Mechanical Arm",
+ "๐ฆฟ": "Mechanical Leg",
+ "๐ฆต": "Leg",
+ "๐ฆถ": "Foot",
+ "๐": "Ear",
+ "๐ฆป": "Ear with Hearing Aid",
+ "๐": "Nose",
+ "๐ง ": "Brain",
+ "๐ซ": "Anatomical Heart",
+ "๐ซ": "Lungs",
+ "๐ฆท": "Tooth",
+ "๐ฆด": "Bone",
+ "๐": "Eyes",
+ "๐๏ธ": "Eye",
+ "๐
": "Tongue",
+ "๐": "Mouth",
+ "๐ถ": "Baby",
+ "๐ง": "Child",
+ "๐ฆ": "Boy",
+ "๐ง": "Girl",
+ "๐ง": "Person",
+ "๐ฑ": "Person: Blond Hair",
+ "๐จ": "Man",
+ "๐ง": "Person: Beard",
+ "๐จโ๐ฆฐ": "Man: Red Hair",
+ "๐จโ๐ฆฑ": "Man: Curly Hair",
+ "๐จโ๐ฆณ": "Man: White Hair",
+ "๐จโ๐ฆฒ": "Man: Bald",
+ "๐ฉ": "Woman",
+ "๐ฉโ๐ฆฐ": "Woman: Red Hair",
+ "๐งโ๐ฆฐ": "Person: Red Hair",
+ "๐ฉโ๐ฆฑ": "Woman: Curly Hair",
+ "๐งโ๐ฆฑ": "Person: Curly Hair",
+ "๐ฉโ๐ฆณ": "Woman: White Hair",
+ "๐งโ๐ฆณ": "Person: White Hair",
+ "๐ฉโ๐ฆฒ": "Woman: Bald",
+ "๐งโ๐ฆฒ": "Person: Bald",
+ "๐ฑโโ๏ธ": "Woman: Blond Hair",
+ "๐ฑโโ๏ธ": "Man: Blond Hair",
+ "๐ง": "Older Person",
+ "๐ด": "Old Man",
+ "๐ต": "Old Woman",
+ "๐": "Person Frowning",
+ "๐โโ๏ธ": "Man Frowning",
+ "๐โโ๏ธ": "Woman Frowning",
+ "๐": "Person Pouting",
+ "๐โโ๏ธ": "Man Pouting",
+ "๐โโ๏ธ": "Woman Pouting",
+ "๐
": "Person Gesturing No",
+ "๐
โโ๏ธ": "Man Gesturing No",
+ "๐
โโ๏ธ": "Woman Gesturing No",
+ "๐": "Person Gesturing OK",
+ "๐โโ๏ธ": "Man Gesturing OK",
+ "๐โโ๏ธ": "Woman Gesturing OK",
+ "๐": "Person Tipping Hand",
+ "๐โโ๏ธ": "Man Tipping Hand",
+ "๐โโ๏ธ": "Woman Tipping Hand",
+ "๐": "Person Raising Hand",
+ "๐โโ๏ธ": "Man Raising Hand",
+ "๐โโ๏ธ": "Woman Raising Hand",
+ "๐ง": "Deaf Person",
+ "๐งโโ๏ธ": "Deaf Man",
+ "๐งโโ๏ธ": "Deaf Woman",
+ "๐": "Person Bowing",
+ "๐โโ๏ธ": "Man Bowing",
+ "๐โโ๏ธ": "Woman Bowing",
+ "๐คฆ": "Person Facepalming",
+ "๐คฆโโ๏ธ": "Man Facepalming",
+ "๐คฆโโ๏ธ": "Woman Facepalming",
+ "๐คท": "Person Shrugging",
+ "๐คทโโ๏ธ": "Man Shrugging",
+ "๐คทโโ๏ธ": "Woman Shrugging",
+ "๐งโโ๏ธ": "Health Worker",
+ "๐จโโ๏ธ": "Man Health Worker",
+ "๐ฉโโ๏ธ": "Woman Health Worker",
+ "๐งโ๐": "Student",
+ "๐จโ๐": "Man Student",
+ "๐ฉโ๐": "Woman Student",
+ "๐งโ๐ซ": "Teacher",
+ "๐จโ๐ซ": "Man Teacher",
+ "๐ฉโ๐ซ": "Woman Teacher",
+ "๐งโโ๏ธ": "Judge",
+ "๐จโโ๏ธ": "Man Judge",
+ "๐ฉโโ๏ธ": "Woman Judge",
+ "๐งโ๐พ": "Farmer",
+ "๐จโ๐พ": "Man Farmer",
+ "๐ฉโ๐พ": "Woman Farmer",
+ "๐งโ๐ณ": "Cook",
+ "๐จโ๐ณ": "Man Cook",
+ "๐ฉโ๐ณ": "Woman Cook",
+ "๐งโ๐ง": "Mechanic",
+ "๐จโ๐ง": "Man Mechanic",
+ "๐ฉโ๐ง": "Woman Mechanic",
+ "๐งโ๐ญ": "Factory Worker",
+ "๐จโ๐ญ": "Man Factory Worker",
+ "๐ฉโ๐ญ": "Woman Factory Worker",
+ "๐งโ๐ผ": "Office Worker",
+ "๐จโ๐ผ": "Man Office Worker",
+ "๐ฉโ๐ผ": "Woman Office Worker",
+ "๐งโ๐ฌ": "Scientist",
+ "๐จโ๐ฌ": "Man Scientist",
+ "๐ฉโ๐ฌ": "Woman Scientist",
+ "๐งโ๐ป": "Technologist",
+ "๐จโ๐ป": "Man Technologist",
+ "๐ฉโ๐ป": "Woman Technologist",
+ "๐งโ๐ค": "Singer",
+ "๐จโ๐ค": "Man Singer",
+ "๐ฉโ๐ค": "Woman Singer",
+ "๐งโ๐จ": "Artist",
+ "๐จโ๐จ": "Man Artist",
+ "๐ฉโ๐จ": "Woman Artist",
+ "๐งโโ๏ธ": "Pilot",
+ "๐จโโ๏ธ": "Man Pilot",
+ "๐ฉโโ๏ธ": "Woman Pilot",
+ "๐งโ๐": "Astronaut",
+ "๐จโ๐": "Man Astronaut",
+ "๐ฉโ๐": "Woman Astronaut",
+ "๐งโ๐": "Firefighter",
+ "๐จโ๐": "Man Firefighter",
+ "๐ฉโ๐": "Woman Firefighter",
+ "๐ฎ": "Police Officer",
+ "๐ฎโโ๏ธ": "Man Police Officer",
+ "๐ฎโโ๏ธ": "Woman Police Officer",
+ "๐ต๏ธ": "Detective",
+ "๐ต๏ธโโ๏ธ": "Man Detective",
+ "๐ต๏ธโโ๏ธ": "Woman Detective",
+ "๐": "Guard",
+ "๐โโ๏ธ": "Man Guard",
+ "๐โโ๏ธ": "Woman Guard",
+ "๐ฅท": "Ninja",
+ "๐ท": "Construction Worker",
+ "๐ทโโ๏ธ": "Man Construction Worker",
+ "๐ทโโ๏ธ": "Woman Construction Worker",
+ "๐คด": "Prince",
+ "๐ธ": "Princess",
+ "๐ณ": "Person Wearing Turban",
+ "๐ณโโ๏ธ": "Man Wearing Turban",
+ "๐ณโโ๏ธ": "Woman Wearing Turban",
+ "๐ฒ": "Person With Skullcap",
+ "๐ง": "Woman with Headscarf",
+ "๐คต": "Person in Tuxedo",
+ "๐คตโโ๏ธ": "Man in Tuxedo",
+ "๐คตโโ๏ธ": "Woman in Tuxedo",
+ "๐ฐ": "Person With Veil",
+ "๐ฐโโ๏ธ": "Man with Veil",
+ "๐ฐโโ๏ธ": "Woman with Veil",
+ "๐คฐ": "Pregnant Woman",
+ "๐คฑ": "Breast-Feeding",
+ "๐ฉโ๐ผ": "Woman Feeding Baby",
+ "๐จโ๐ผ": "Man Feeding Baby",
+ "๐งโ๐ผ": "Person Feeding Baby",
+ "๐ผ": "Baby Angel",
+ "๐
": "Santa Claus",
+ "๐คถ": "Mrs. Claus",
+ "๐งโ๐": "Mx Claus",
+ "๐ฆธ": "Superhero",
+ "๐ฆธโโ๏ธ": "Man Superhero",
+ "๐ฆธโโ๏ธ": "Woman Superhero",
+ "๐ฆน": "Supervillain",
+ "๐ฆนโโ๏ธ": "Man Supervillain",
+ "๐ฆนโโ๏ธ": "Woman Supervillain",
+ "๐ง": "Mage",
+ "๐งโโ๏ธ": "Man Mage",
+ "๐งโโ๏ธ": "Woman Mage",
+ "๐ง": "Fairy",
+ "๐งโโ๏ธ": "Man Fairy",
+ "๐งโโ๏ธ": "Woman Fairy",
+ "๐ง": "Vampire",
+ "๐งโโ๏ธ": "Man Vampire",
+ "๐งโโ๏ธ": "Woman Vampire",
+ "๐ง": "Merperson",
+ "๐งโโ๏ธ": "Merman",
+ "๐งโโ๏ธ": "Mermaid",
+ "๐ง": "Elf",
+ "๐งโโ๏ธ": "Man Elf",
+ "๐งโโ๏ธ": "Woman Elf",
+ "๐ง": "Genie",
+ "๐งโโ๏ธ": "Man Genie",
+ "๐งโโ๏ธ": "Woman Genie",
+ "๐ง": "Zombie",
+ "๐งโโ๏ธ": "Man Zombie",
+ "๐งโโ๏ธ": "Woman Zombie",
+ "๐": "Person Getting Massage",
+ "๐โโ๏ธ": "Man Getting Massage",
+ "๐โโ๏ธ": "Woman Getting Massage",
+ "๐": "Person Getting Haircut",
+ "๐โโ๏ธ": "Man Getting Haircut",
+ "๐โโ๏ธ": "Woman Getting Haircut",
+ "๐ถ": "Person Walking",
+ "๐ถโโ๏ธ": "Man Walking",
+ "๐ถโโ๏ธ": "Woman Walking",
+ "๐ง": "Person Standing",
+ "๐งโโ๏ธ": "Man Standing",
+ "๐งโโ๏ธ": "Woman Standing",
+ "๐ง": "Person Kneeling",
+ "๐งโโ๏ธ": "Man Kneeling",
+ "๐งโโ๏ธ": "Woman Kneeling",
+ "๐งโ๐ฆฏ": "Person with White Cane",
+ "๐จโ๐ฆฏ": "Man with White Cane",
+ "๐ฉโ๐ฆฏ": "Woman with White Cane",
+ "๐งโ๐ฆผ": "Person in Motorized Wheelchair",
+ "๐จโ๐ฆผ": "Man in Motorized Wheelchair",
+ "๐ฉโ๐ฆผ": "Woman in Motorized Wheelchair",
+ "๐งโ๐ฆฝ": "Person in Manual Wheelchair",
+ "๐จโ๐ฆฝ": "Man in Manual Wheelchair",
+ "๐ฉโ๐ฆฝ": "Woman in Manual Wheelchair",
+ "๐": "Person Running",
+ "๐โโ๏ธ": "Man Running",
+ "๐โโ๏ธ": "Woman Running",
+ "๐": "Woman Dancing",
+ "๐บ": "Man Dancing",
+ "๐ด๏ธ": "Person in Suit Levitating",
+ "๐ฏ": "People with Bunny Ears",
+ "๐ฏโโ๏ธ": "Men with Bunny Ears",
+ "๐ฏโโ๏ธ": "Women with Bunny Ears",
+ "๐ง": "Person in Steamy Room",
+ "๐งโโ๏ธ": "Man in Steamy Room",
+ "๐งโโ๏ธ": "Woman in Steamy Room",
+ "๐ง": "Person in Lotus Position",
+ "๐งโ๐คโ๐ง": "People Holding Hands",
+ "๐ญ": "Women Holding Hands",
+ "๐ซ": "Woman and Man Holding Hands",
+ "๐ฌ": "Men Holding Hands",
+ "๐": "Kiss",
+ "๐ฉโโค๏ธโ๐โ๐จ": "Kiss: Woman, Man",
+ "๐จโโค๏ธโ๐โ๐จ": "Kiss: Man, Man",
+ "๐ฉโโค๏ธโ๐โ๐ฉ": "Kiss: Woman, Woman",
+ "๐": "Couple with Heart",
+ "๐ฉโโค๏ธโ๐จ": "Couple with Heart: Woman, Man",
+ "๐จโโค๏ธโ๐จ": "Couple with Heart: Man, Man",
+ "๐ฉโโค๏ธโ๐ฉ": "Couple with Heart: Woman, Woman",
+ "๐ช": "Family",
+ "๐จโ๐ฉโ๐ฆ": "Family: Man, Woman, Boy",
+ "๐จโ๐ฉโ๐ง": "Family: Man, Woman, Girl",
+ "๐จโ๐ฉโ๐งโ๐ฆ": "Family: Man, Woman, Girl, Boy",
+ "๐จโ๐ฉโ๐ฆโ๐ฆ": "Family: Man, Woman, Boy, Boy",
+ "๐จโ๐ฉโ๐งโ๐ง": "Family: Man, Woman, Girl, Girl",
+ "๐จโ๐จโ๐ฆ": "Family: Man, Man, Boy",
+ "๐จโ๐จโ๐ง": "Family: Man, Man, Girl",
+ "๐จโ๐จโ๐งโ๐ฆ": "Family: Man, Man, Girl, Boy",
+ "๐จโ๐จโ๐ฆโ๐ฆ": "Family: Man, Man, Boy, Boy",
+ "๐จโ๐จโ๐งโ๐ง": "Family: Man, Man, Girl, Girl",
+ "๐ฉโ๐ฉโ๐ฆ": "Family: Woman, Woman, Boy",
+ "๐ฉโ๐ฉโ๐ง": "Family: Woman, Woman, Girl",
+ "๐ฉโ๐ฉโ๐งโ๐ฆ": "Family: Woman, Woman, Girl, Boy",
+ "๐ฉโ๐ฉโ๐ฆโ๐ฆ": "Family: Woman, Woman, Boy, Boy",
+ "๐ฉโ๐ฉโ๐งโ๐ง": "Family: Woman, Woman, Girl, Girl",
+ "๐จโ๐ฆ": "Family: Man, Boy",
+ "๐จโ๐ฆโ๐ฆ": "Family: Man, Boy, Boy",
+ "๐จโ๐ง": "Family: Man, Girl",
+ "๐จโ๐งโ๐ฆ": "Family: Man, Girl, Boy",
+ "๐จโ๐งโ๐ง": "Family: Man, Girl, Girl",
+ "๐ฉโ๐ฆ": "Family: Woman, Boy",
+ "๐ฉโ๐ฆโ๐ฆ": "Family: Woman, Boy, Boy",
+ "๐ฉโ๐ง": "Family: Woman, Girl",
+ "๐ฉโ๐งโ๐ฆ": "Family: Woman, Girl, Boy",
+ "๐ฉโ๐งโ๐ง": "Family: Woman, Girl, Girl",
+ "๐ฃ๏ธ": "Speaking Head",
+ "๐ค": "Bust in Silhouette",
+ "๐ฅ": "Busts in Silhouette",
+ "๐ซ": "People Hugging",
+ "๐ฃ": "Footprints",
+ "๐งณ": "Luggage",
+ "๐": "Closed Umbrella",
+ "โ๏ธ": "Umbrella",
+ "๐": "Jack-O-Lantern",
+ "๐งต": "Thread",
+ "๐งถ": "Yarn",
+ "๐": "Glasses",
+ "๐ถ๏ธ": "Sunglasses",
+ "๐ฅฝ": "Goggles",
+ "๐ฅผ": "Lab Coat",
+ "๐ฆบ": "Safety Vest",
+ "๐": "Necktie",
+ "๐": "T-Shirt",
+ "๐": "Jeans",
+ "๐งฃ": "Scarf",
+ "๐งค": "Gloves",
+ "๐งฅ": "Coat",
+ "๐งฆ": "Socks",
+ "๐": "Dress",
+ "๐": "Kimono",
+ "๐ฅป": "Sari",
+ "๐ฉฑ": "One-Piece Swimsuit",
+ "๐ฉฒ": "Briefs",
+ "๐ฉณ": "Shorts",
+ "๐": "Bikini",
+ "๐": "Womanโs Clothes",
+ "๐": "Purse",
+ "๐": "Handbag",
+ "๐": "Clutch Bag",
+ "๐": "Backpack",
+ "๐ฉด": "Thong Sandal",
+ "๐": "Manโs Shoe",
+ "๐": "Running Shoe",
+ "๐ฅพ": "Hiking Boot",
+ "๐ฅฟ": "Flat Shoe",
+ "๐ ": "High-Heeled Shoe",
+ "๐ก": "Womanโs Sandal",
+ "๐ฉฐ": "Ballet Shoes",
+ "๐ข": "Womanโs Boot",
+ "๐": "Crown",
+ "๐": "Womanโs Hat",
+ "๐ฉ": "Top Hat",
+ "๐": "Graduation Cap",
+ "๐งข": "Billed Cap",
+ "๐ช": "Military Helmet",
+ "โ๏ธ": "Rescue Workerโs Helmet",
+ "๐": "Lipstick",
+ "๐": "Ring",
+ "๐ผ": "Briefcase",
+ "๐ฉธ": "Drop of Blood",
+ "๐ฎโ๐จ": "Face Exhaling",
+ "๐ตโ๐ซ": "Face with Spiral Eyes",
+ "๐ถโ๐ซ๏ธ": "Face in Clouds",
+ },
+ "Animals & Nature": {
+ "๐": "See-No-Evil Monkey",
+ "๐": "Hear-No-Evil Monkey",
+ "๐": "Speak-No-Evil Monkey",
+ "๐ฅ": "Collision",
+ "๐ซ": "Dizzy",
+ "๐ฆ": "Sweat Droplets",
+ "๐จ": "Dashing Away",
+ "๐ต": "Monkey Face",
+ "๐": "Monkey",
+ "๐ฆ": "Gorilla",
+ "๐ฆง": "Orangutan",
+ "๐ถ": "Dog Face",
+ "๐": "Dog",
+ "๐ฆฎ": "Guide Dog",
+ "๐โ๐ฆบ": "Service Dog",
+ "๐ฉ": "Poodle",
+ "๐บ": "Wolf",
+ "๐ฆ": "Fox",
+ "๐ฆ": "Raccoon",
+ "๐ฑ": "Cat Face",
+ "๐": "Cat",
+ "๐โโฌ": "Black Cat",
+ "๐ฆ": "Lion",
+ "๐ฏ": "Tiger Face",
+ "๐
": "Tiger",
+ "๐": "Leopard",
+ "๐ด": "Horse Face",
+ "๐": "Horse",
+ "๐ฆ": "Unicorn",
+ "๐ฆ": "Zebra",
+ "๐ฆ": "Deer",
+ "๐ฆฌ": "Bison",
+ "๐ฎ": "Cow Face",
+ "๐": "Ox",
+ "๐": "Water Buffalo",
+ "๐": "Cow",
+ "๐ท": "Pig Face",
+ "๐": "Pig",
+ "๐": "Boar",
+ "๐ฝ": "Pig Nose",
+ "๐": "Ram",
+ "๐": "Ewe",
+ "๐": "Goat",
+ "๐ช": "Camel",
+ "๐ซ": "Two-Hump Camel",
+ "๐ฆ": "Llama",
+ "๐ฆ": "Giraffe",
+ "๐": "Elephant",
+ "๐ฆฃ": "Mammoth",
+ "๐ฆ": "Rhinoceros",
+ "๐ฆ": "Hippopotamus",
+ "๐ญ": "Mouse Face",
+ "๐": "Mouse",
+ "๐": "Rat",
+ "๐น": "Hamster",
+ "๐ฐ": "Rabbit Face",
+ "๐": "Rabbit",
+ "๐ฟ๏ธ": "Chipmunk",
+ "๐ฆซ": "Beaver",
+ "๐ฆ": "Hedgehog",
+ "๐ฆ": "Bat",
+ "๐ป": "Bear",
+ "๐ปโโ๏ธ": "Polar Bear",
+ "๐จ": "Koala",
+ "๐ผ": "Panda",
+ "๐ฆฅ": "Sloth",
+ "๐ฆฆ": "Otter",
+ "๐ฆจ": "Skunk",
+ "๐ฆ": "Kangaroo",
+ "๐ฆก": "Badger",
+ "๐พ": "Paw Prints",
+ "๐ฆ": "Turkey",
+ "๐": "Chicken",
+ "๐": "Rooster",
+ "๐ฃ": "Hatching Chick",
+ "๐ค": "Baby Chick",
+ "๐ฅ": "Front-Facing Baby Chick",
+ "๐ฆ": "Bird",
+ "๐ง": "Penguin",
+ "๐๏ธ": "Dove",
+ "๐ฆ
": "Eagle",
+ "๐ฆ": "Duck",
+ "๐ฆข": "Swan",
+ "๐ฆ": "Owl",
+ "๐ฆค": "Dodo",
+ "๐ชถ": "Feather",
+ "๐ฆฉ": "Flamingo",
+ "๐ฆ": "Peacock",
+ "๐ฆ": "Parrot",
+ "๐ธ": "Frog",
+ "๐": "Crocodile",
+ "๐ข": "Turtle",
+ "๐ฆ": "Lizard",
+ "๐": "Snake",
+ "๐ฒ": "Dragon Face",
+ "๐": "Dragon",
+ "๐ฆ": "Sauropod",
+ "๐ฆ": "T-Rex",
+ "๐ณ": "Spouting Whale",
+ "๐": "Whale",
+ "๐ฌ": "Dolphin",
+ "๐ฆญ": "Seal",
+ "๐": "Fish",
+ "๐ ": "Tropical Fish",
+ "๐ก": "Blowfish",
+ "๐ฆ": "Shark",
+ "๐": "Octopus",
+ "๐": "Spiral Shell",
+ "๐": "Snail",
+ "๐ฆ": "Butterfly",
+ "๐": "Bug",
+ "๐": "Ant",
+ "๐": "Honeybee",
+ "๐ชฒ": "Beetle",
+ "๐": "Lady Beetle",
+ "๐ฆ": "Cricket",
+ "๐ชณ": "Cockroach",
+ "๐ท๏ธ": "Spider",
+ "๐ธ๏ธ": "Spider Web",
+ "๐ฆ": "Scorpion",
+ "๐ฆ": "Mosquito",
+ "๐ชฐ": "Fly",
+ "๐ชฑ": "Worm",
+ "๐ฆ ": "Microbe",
+ "๐": "Bouquet",
+ "๐ธ": "Cherry Blossom",
+ "๐ฎ": "White Flower",
+ "๐ต๏ธ": "Rosette",
+ "๐น": "Rose",
+ "๐ฅ": "Wilted Flower",
+ "๐บ": "Hibiscus",
+ "๐ป": "Sunflower",
+ "๐ผ": "Blossom",
+ "๐ท": "Tulip",
+ "๐ฑ": "Seedling",
+ "๐ชด": "Potted Plant",
+ "๐ฒ": "Evergreen Tree",
+ "๐ณ": "Deciduous Tree",
+ "๐ด": "Palm Tree",
+ "๐ต": "Cactus",
+ "๐พ": "Sheaf of Rice",
+ "๐ฟ": "Herb",
+ "โ๏ธ": "Shamrock",
+ "๐": "Four Leaf Clover",
+ "๐": "Maple Leaf",
+ "๐": "Fallen Leaf",
+ "๐": "Leaf Fluttering in Wind",
+ "๐": "Mushroom",
+ "๐ฐ": "Chestnut",
+ "๐ฆ": "Crab",
+ "๐ฆ": "Lobster",
+ "๐ฆ": "Shrimp",
+ "๐ฆ": "Squid",
+ "๐": "Globe Showing Europe-Africa",
+ "๐": "Globe Showing Americas",
+ "๐": "Globe Showing Asia-Australia",
+ "๐": "Globe with Meridians",
+ "๐ชจ": "Rock",
+ "๐": "New Moon",
+ "๐": "Waxing Crescent Moon",
+ "๐": "First Quarter Moon",
+ "๐": "Waxing Gibbous Moon",
+ "๐": "Full Moon",
+ "๐": "Waning Gibbous Moon",
+ "๐": "Last Quarter Moon",
+ "๐": "Waning Crescent Moon",
+ "๐": "Crescent Moon",
+ "๐": "New Moon Face",
+ "๐": "First Quarter Moon Face",
+ "๐": "Last Quarter Moon Face",
+ "โ๏ธ": "Sun",
+ "๐": "Full Moon Face",
+ "๐": "Sun with Face",
+ "โญ": "Star",
+ "๐": "Glowing Star",
+ "๐ ": "Shooting Star",
+ "โ๏ธ": "Cloud",
+ "โ
": "Sun Behind Cloud",
+ "โ๏ธ": "Cloud with Lightning and Rain",
+ "๐ค๏ธ": "Sun Behind Small Cloud",
+ "๐ฅ๏ธ": "Sun Behind Large Cloud",
+ "๐ฆ๏ธ": "Sun Behind Rain Cloud",
+ "๐ง๏ธ": "Cloud with Rain",
+ "๐จ๏ธ": "Cloud with Snow",
+ "๐ฉ๏ธ": "Cloud with Lightning",
+ "๐ช๏ธ": "Tornado",
+ "๐ซ๏ธ": "Fog",
+ "๐ฌ๏ธ": "Wind Face",
+ "๐": "Rainbow",
+ "โ๏ธ": "Umbrella",
+ "โ": "Umbrella with Rain Drops",
+ "โก": "High Voltage",
+ "โ๏ธ": "Snowflake",
+ "โ๏ธ": "Snowman",
+ "โ": "Snowman Without Snow",
+ "โ๏ธ": "Comet",
+ "๐ฅ": "Fire",
+ "๐ง": "Droplet",
+ "๐": "Water Wave",
+ "๐": "Christmas Tree",
+ "โจ": "Sparkles",
+ "๐": "Tanabata Tree",
+ "๐": "Pine Decoration",
+ },
+ "Food & Drink": {
+ "๐": "Grapes",
+ "๐": "Melon",
+ "๐": "Watermelon",
+ "๐": "Tangerine",
+ "๐": "Lemon",
+ "๐": "Banana",
+ "๐": "Pineapple",
+ "๐ฅญ": "Mango",
+ "๐": "Red Apple",
+ "๐": "Green Apple",
+ "๐": "Pear",
+ "๐": "Peach",
+ "๐": "Cherries",
+ "๐": "Strawberry",
+ "๐ซ": "Blueberries",
+ "๐ฅ": "Kiwi Fruit",
+ "๐
": "Tomato",
+ "๐ซ": "Olive",
+ "๐ฅฅ": "Coconut",
+ "๐ฅ": "Avocado",
+ "๐": "Eggplant",
+ "๐ฅ": "Potato",
+ "๐ฅ": "Carrot",
+ "๐ฝ": "Ear of Corn",
+ "๐ถ๏ธ": "Hot Pepper",
+ "๐ซ": "Bell Pepper",
+ "๐ฅ": "Cucumber",
+ "๐ฅฌ": "Leafy Green",
+ "๐ฅฆ": "Broccoli",
+ "๐ง": "Garlic",
+ "๐ง
": "Onion",
+ "๐": "Mushroom",
+ "๐ฅ": "Peanuts",
+ "๐ฐ": "Chestnut",
+ "๐": "Bread",
+ "๐ฅ": "Croissant",
+ "๐ฅ": "Baguette Bread",
+ "๐ซ": "Flatbread",
+ "๐ฅจ": "Pretzel",
+ "๐ฅฏ": "Bagel",
+ "๐ฅ": "Pancakes",
+ "๐ง": "Waffle",
+ "๐ง": "Cheese Wedge",
+ "๐": "Meat on Bone",
+ "๐": "Poultry Leg",
+ "๐ฅฉ": "Cut of Meat",
+ "๐ฅ": "Bacon",
+ "๐": "Hamburger",
+ "๐": "French Fries",
+ "๐": "Pizza",
+ "๐ญ": "Hot Dog",
+ "๐ฅช": "Sandwich",
+ "๐ฎ": "Taco",
+ "๐ฏ": "Burrito",
+ "๐ซ": "Tamale",
+ "๐ฅ": "Stuffed Flatbread",
+ "๐ง": "Falafel",
+ "๐ฅ": "Egg",
+ "๐ณ": "Cooking",
+ "๐ฅ": "Shallow Pan of Food",
+ "๐ฒ": "Pot of Food",
+ "๐ซ": "Fondue",
+ "๐ฅฃ": "Bowl with Spoon",
+ "๐ฅ": "Green Salad",
+ "๐ฟ": "Popcorn",
+ "๐ง": "Butter",
+ "๐ง": "Salt",
+ "๐ฅซ": "Canned Food",
+ "๐ฑ": "Bento Box",
+ "๐": "Rice Cracker",
+ "๐": "Rice Ball",
+ "๐": "Cooked Rice",
+ "๐": "Curry Rice",
+ "๐": "Steaming Bowl",
+ "๐": "Spaghetti",
+ "๐ ": "Roasted Sweet Potato",
+ "๐ข": "Oden",
+ "๐ฃ": "Sushi",
+ "๐ค": "Fried Shrimp",
+ "๐ฅ": "Fish Cake with Swirl",
+ "๐ฅฎ": "Moon Cake",
+ "๐ก": "Dango",
+ "๐ฅ": "Dumpling",
+ "๐ฅ ": "Fortune Cookie",
+ "๐ฅก": "Takeout Box",
+ "๐ฆช": "Oyster",
+ "๐ฆ": "Soft Ice Cream",
+ "๐ง": "Shaved Ice",
+ "๐จ": "Ice Cream",
+ "๐ฉ": "Doughnut",
+ "๐ช": "Cookie",
+ "๐": "Birthday Cake",
+ "๐ฐ": "Shortcake",
+ "๐ง": "Cupcake",
+ "๐ฅง": "Pie",
+ "๐ซ": "Chocolate Bar",
+ "๐ฌ": "Candy",
+ "๐ญ": "Lollipop",
+ "๐ฎ": "Custard",
+ "๐ฏ": "Honey Pot",
+ "๐ผ": "Baby Bottle",
+ "๐ฅ": "Glass of Milk",
+ "โ": "Hot Beverage",
+ "๐ซ": "Teapot",
+ "๐ต": "Teacup Without Handle",
+ "๐ถ": "Sake",
+ "๐พ": "Bottle with Popping Cork",
+ "๐ท": "Wine Glass",
+ "๐ธ": "Cocktail Glass",
+ "๐น": "Tropical Drink",
+ "๐บ": "Beer Mug",
+ "๐ป": "Clinking Beer Mugs",
+ "๐ฅ": "Clinking Glasses",
+ "๐ฅ": "Tumbler Glass",
+ "๐ฅค": "Cup with Straw",
+ "๐ง": "Bubble Tea",
+ "๐ง": "Beverage Box",
+ "๐ง": "Mate",
+ "๐ง": "Ice",
+ "๐ฅข": "Chopsticks",
+ "๐ฝ๏ธ": "Fork and Knife with Plate",
+ "๐ด": "Fork and Knife",
+ "๐ฅ": "Spoon",
+ },
+ "Activity": {
+ "๐ด๏ธ": "Person in Suit Levitating",
+ "๐ง": "Person Climbing",
+ "๐งโโ๏ธ": "Man Climbing",
+ "๐งโโ๏ธ": "Woman Climbing",
+ "๐คบ": "Person Fencing",
+ "๐": "Horse Racing",
+ "โท๏ธ": "Skier",
+ "๐": "Snowboarder",
+ "๐๏ธ": "Person Golfing",
+ "๐๏ธโโ๏ธ": "Man Golfing",
+ "๐๏ธโโ๏ธ": "Woman Golfing",
+ "๐": "Person Surfing",
+ "๐โโ๏ธ": "Man Surfing",
+ "๐โโ๏ธ": "Woman Surfing",
+ "๐ฃ": "Person Rowing Boat",
+ "๐ฃโโ๏ธ": "Man Rowing Boat",
+ "๐ฃโโ๏ธ": "Woman Rowing Boat",
+ "๐": "Person Swimming",
+ "๐โโ๏ธ": "Man Swimming",
+ "๐โโ๏ธ": "Woman Swimming",
+ "โน๏ธ": "Person Bouncing Ball",
+ "โน๏ธโโ๏ธ": "Man Bouncing Ball",
+ "โน๏ธโโ๏ธ": "Woman Bouncing Ball",
+ "๐๏ธ": "Person Lifting Weights",
+ "๐๏ธโโ๏ธ": "Man Lifting Weights",
+ "๐๏ธโโ๏ธ": "Woman Lifting Weights",
+ "๐ด": "Person Biking",
+ "๐ดโโ๏ธ": "Man Biking",
+ "๐ดโโ๏ธ": "Woman Biking",
+ "๐ต": "Person Mountain Biking",
+ "๐ตโโ๏ธ": "Man Mountain Biking",
+ "๐ตโโ๏ธ": "Woman Mountain Biking",
+ "๐คธ": "Person Cartwheeling",
+ "๐คธโโ๏ธ": "Man Cartwheeling",
+ "๐คธโโ๏ธ": "Woman Cartwheeling",
+ "๐คผ": "People Wrestling",
+ "๐คผโโ๏ธ": "Men Wrestling",
+ "๐คผโโ๏ธ": "Women Wrestling",
+ "๐คฝ": "Person Playing Water Polo",
+ "๐คฝโโ๏ธ": "Man Playing Water Polo",
+ "๐คฝโโ๏ธ": "Woman Playing Water Polo",
+ "๐คพ": "Person Playing Handball",
+ "๐คพโโ๏ธ": "Man Playing Handball",
+ "๐คพโโ๏ธ": "Woman Playing Handball",
+ "๐คน": "Person Juggling",
+ "๐คนโโ๏ธ": "Man Juggling",
+ "๐คนโโ๏ธ": "Woman Juggling",
+ "๐ง": "Person in Lotus Position",
+ "๐งโโ๏ธ": "Man in Lotus Position",
+ "๐งโโ๏ธ": "Woman in Lotus Position",
+ "๐ช": "Circus Tent",
+ "๐น": "Skateboard",
+ "๐ผ": "Roller Skate",
+ "๐ถ": "Canoe",
+ "๐๏ธ": "Reminder Ribbon",
+ "๐๏ธ": "Admission Tickets",
+ "๐ซ": "Ticket",
+ "๐๏ธ": "Military Medal",
+ "๐": "Trophy",
+ "๐
": "Sports Medal",
+ "๐ฅ": "1st Place Medal",
+ "๐ฅ": "2nd Place Medal",
+ "๐ฅ": "3rd Place Medal",
+ "โฝ": "Soccer Ball",
+ "โพ": "Baseball",
+ "๐ฅ": "Softball",
+ "๐": "Basketball",
+ "๐": "Volleyball",
+ "๐": "American Football",
+ "๐": "Rugby Football",
+ "๐พ": "Tennis",
+ "๐ฅ": "Flying Disc",
+ "๐ณ": "Bowling",
+ "๐": "Cricket Game",
+ "๐": "Field Hockey",
+ "๐": "Ice Hockey",
+ "๐ฅ": "Lacrosse",
+ "๐": "Ping Pong",
+ "๐ธ": "Badminton",
+ "๐ฅ": "Boxing Glove",
+ "๐ฅ": "Martial Arts Uniform",
+ "๐ฅ
": "Goal Net",
+ "โณ": "Flag in Hole",
+ "โธ๏ธ": "Ice Skate",
+ "๐ฃ": "Fishing Pole",
+ "๐ฝ": "Running Shirt",
+ "๐ฟ": "Skis",
+ "๐ท": "Sled",
+ "๐ฅ": "Curling Stone",
+ "๐ฏ": "Direct Hit",
+ "๐ฑ": "Pool 8 Ball",
+ "๐ฎ": "Video Game",
+ "๐ฐ": "Slot Machine",
+ "๐ฒ": "Game Die",
+ "๐งฉ": "Puzzle Piece",
+ "โ๏ธ": "Chess Pawn",
+ "๐ญ": "Performing Arts",
+ "๐จ": "Artist Palette",
+ "๐งต": "Thread",
+ "๐งถ": "Yarn",
+ "๐ผ": "Musical Score",
+ "๐ค": "Microphone",
+ "๐ง": "Headphone",
+ "๐ท": "Saxophone",
+ "๐ช": "Accordion",
+ "๐ธ": "Guitar",
+ "๐น": "Musical Keyboard",
+ "๐บ": "Trumpet",
+ "๐ป": "Violin",
+ "๐ฅ": "Drum",
+ "๐ช": "Long Drum",
+ "๐ฌ": "Clapper Board",
+ "๐น": "Bow and Arrow",
+ },
+ "Travel & Places": {
+ "๐ฃ": "Person Rowing Boat",
+ "๐พ": "Map of Japan",
+ "๐๏ธ": "Snow-Capped Mountain",
+ "โฐ๏ธ": "Mountain",
+ "๐": "Volcano",
+ "๐ป": "Mount Fuji",
+ "๐๏ธ": "Camping",
+ "๐๏ธ": "Beach with Umbrella",
+ "๐๏ธ": "Desert",
+ "๐๏ธ": "Desert Island",
+ "๐๏ธ": "National Park",
+ "๐๏ธ": "Stadium",
+ "๐๏ธ": "Classical Building",
+ "๐๏ธ": "Building Construction",
+ "๐": "Hut",
+ "๐๏ธ": "Houses",
+ "๐๏ธ": "Derelict House",
+ "๐ ": "House",
+ "๐ก": "House with Garden",
+ "๐ข": "Office Building",
+ "๐ฃ": "Japanese Post Office",
+ "๐ค": "Post Office",
+ "๐ฅ": "Hospital",
+ "๐ฆ": "Bank",
+ "๐จ": "Hotel",
+ "๐ฉ": "Love Hotel",
+ "๐ช": "Convenience Store",
+ "๐ซ": "School",
+ "๐ฌ": "Department Store",
+ "๐ญ": "Factory",
+ "๐ฏ": "Japanese Castle",
+ "๐ฐ": "Castle",
+ "๐": "Wedding",
+ "๐ผ": "Tokyo Tower",
+ "๐ฝ": "Statue of Liberty",
+ "โช": "Church",
+ "๐": "Mosque",
+ "๐": "Hindu Temple",
+ "๐": "Synagogue",
+ "โฉ๏ธ": "Shinto Shrine",
+ "๐": "Kaaba",
+ "โฒ": "Fountain",
+ "โบ": "Tent",
+ "๐": "Foggy",
+ "๐": "Night with Stars",
+ "๐๏ธ": "Cityscape",
+ "๐": "Sunrise Over Mountains",
+ "๐
": "Sunrise",
+ "๐": "Cityscape at Dusk",
+ "๐": "Sunset",
+ "๐": "Bridge at Night",
+ "๐ ": "Carousel Horse",
+ "๐ก": "Ferris Wheel",
+ "๐ข": "Roller Coaster",
+ "๐": "Locomotive",
+ "๐": "Railway Car",
+ "๐": "High-Speed Train",
+ "๐
": "Bullet Train",
+ "๐": "Train",
+ "๐": "Metro",
+ "๐": "Light Rail",
+ "๐": "Station",
+ "๐": "Tram",
+ "๐": "Monorail",
+ "๐": "Mountain Railway",
+ "๐": "Tram Car",
+ "๐": "Bus",
+ "๐": "Oncoming Bus",
+ "๐": "Trolleybus",
+ "๐": "Minibus",
+ "๐": "Ambulance",
+ "๐": "Fire Engine",
+ "๐": "Police Car",
+ "๐": "Oncoming Police Car",
+ "๐": "Taxi",
+ "๐": "Oncoming Taxi",
+ "๐": "Automobile",
+ "๐": "Oncoming Automobile",
+ "๐": "Sport Utility Vehicle",
+ "๐ป": "Pickup Truck",
+ "๐": "Delivery Truck",
+ "๐": "Articulated Lorry",
+ "๐": "Tractor",
+ "๐๏ธ": "Racing Car",
+ "๐๏ธ": "Motorcycle",
+ "๐ต": "Motor Scooter",
+ "๐บ": "Auto Rickshaw",
+ "๐ฒ": "Bicycle",
+ "๐ด": "Kick Scooter",
+ "๐": "Bus Stop",
+ "๐ฃ๏ธ": "Motorway",
+ "๐ค๏ธ": "Railway Track",
+ "โฝ": "Fuel Pump",
+ "๐จ": "Police Car Light",
+ "๐ฅ": "Horizontal Traffic Light",
+ "๐ฆ": "Vertical Traffic Light",
+ "๐ง": "Construction",
+ "โ": "Anchor",
+ "โต": "Sailboat",
+ "๐ค": "Speedboat",
+ "๐ณ๏ธ": "Passenger Ship",
+ "โด๏ธ": "Ferry",
+ "๐ฅ๏ธ": "Motor Boat",
+ "๐ข": "Ship",
+ "โ๏ธ": "Airplane",
+ "๐ฉ๏ธ": "Small Airplane",
+ "๐ซ": "Airplane Departure",
+ "๐ฌ": "Airplane Arrival",
+ "๐ช": "Parachute",
+ "๐บ": "Seat",
+ "๐": "Helicopter",
+ "๐": "Suspension Railway",
+ "๐ ": "Mountain Cableway",
+ "๐ก": "Aerial Tramway",
+ "๐ฐ๏ธ": "Satellite",
+ "๐": "Rocket",
+ "๐ธ": "Flying Saucer",
+ "๐ช": "Ringed Planet",
+ "๐ ": "Shooting Star",
+ "๐": "Milky Way",
+ "โฑ๏ธ": "Umbrella on Ground",
+ "๐": "Fireworks",
+ "๐": "Sparkler",
+ "๐": "Moon Viewing Ceremony",
+ "๐ด": "Yen Banknote",
+ "๐ต": "Dollar Banknote",
+ "๐ถ": "Euro Banknote",
+ "๐ท": "Pound Banknote",
+ "๐ฟ": "Moai",
+ "๐": "Passport Control",
+ "๐": "Customs",
+ "๐": "Baggage Claim",
+ "๐
": "Left Luggage",
+ },
+ "Objects": {
+ "๐": "Love Letter",
+ "๐ณ๏ธ": "Hole",
+ "๐ฃ": "Bomb",
+ "๐": "Person Taking Bath",
+ "๐": "Person in Bed",
+ "๐ช": "Kitchen Knife",
+ "๐บ": "Amphora",
+ "๐บ๏ธ": "World Map",
+ "๐งญ": "Compass",
+ "๐งฑ": "Brick",
+ "๐": "Barber Pole",
+ "๐ฆฝ": "Manual Wheelchair",
+ "๐ฆผ": "Motorized Wheelchair",
+ "๐ข๏ธ": "Oil Drum",
+ "๐๏ธ": "Bellhop Bell",
+ "๐งณ": "Luggage",
+ "โ": "Hourglass Done",
+ "โณ": "Hourglass Not Done",
+ "โ": "Watch",
+ "โฐ": "Alarm Clock",
+ "โฑ๏ธ": "Stopwatch",
+ "โฒ๏ธ": "Timer Clock",
+ "๐ฐ๏ธ": "Mantelpiece Clock",
+ "๐ก๏ธ": "Thermometer",
+ "โฑ๏ธ": "Umbrella on Ground",
+ "๐งจ": "Firecracker",
+ "๐": "Balloon",
+ "๐": "Party Popper",
+ "๐": "Confetti Ball",
+ "๐": "Japanese Dolls",
+ "๐": "Carp Streamer",
+ "๐": "Wind Chime",
+ "๐งง": "Red Envelope",
+ "๐": "Ribbon",
+ "๐": "Wrapped Gift",
+ "๐คฟ": "Diving Mask",
+ "๐ช": "Yo-Yo",
+ "๐ช": "Kite",
+ "๐ฎ": "Crystal Ball",
+ "๐ช": "Magic Wand",
+ "๐งฟ": "Nazar Amulet",
+ "๐น๏ธ": "Joystick",
+ "๐งธ": "Teddy Bear",
+ "๐ช
": "Piรฑata",
+ "๐ช": "Nesting Dolls",
+ "๐ผ๏ธ": "Framed Picture",
+ "๐งต": "Thread",
+ "๐ชก": "Sewing Needle",
+ "๐งถ": "Yarn",
+ "๐ชข": "Knot",
+ "๐๏ธ": "Shopping Bags",
+ "๐ฟ": "Prayer Beads",
+ "๐": "Gem Stone",
+ "๐ฏ": "Postal Horn",
+ "๐๏ธ": "Studio Microphone",
+ "๐๏ธ": "Level Slider",
+ "๐๏ธ": "Control Knobs",
+ "๐ป": "Radio",
+ "๐ช": "Banjo",
+ "๐ฑ": "Mobile Phone",
+ "๐ฒ": "Mobile Phone with Arrow",
+ "โ๏ธ": "Telephone",
+ "๐": "Telephone Receiver",
+ "๐": "Pager",
+ "๐ ": "Fax Machine",
+ "๐": "Battery",
+ "๐": "Electric Plug",
+ "๐ป": "Laptop",
+ "๐ฅ๏ธ": "Desktop Computer",
+ "๐จ๏ธ": "Printer",
+ "โจ๏ธ": "Keyboard",
+ "๐ฑ๏ธ": "Computer Mouse",
+ "๐ฒ๏ธ": "Trackball",
+ "๐ฝ": "Computer Disk",
+ "๐พ": "Floppy Disk",
+ "๐ฟ": "Optical Disk",
+ "๐": "DVD",
+ "๐งฎ": "Abacus",
+ "๐ฅ": "Movie Camera",
+ "๐๏ธ": "Film Frames",
+ "๐ฝ๏ธ": "Film Projector",
+ "๐บ": "Television",
+ "๐ท": "Camera",
+ "๐ธ": "Camera with Flash",
+ "๐น": "Video Camera",
+ "๐ผ": "Videocassette",
+ "๐": "Magnifying Glass Tilted Left",
+ "๐": "Magnifying Glass Tilted Right",
+ "๐ฏ๏ธ": "Candle",
+ "๐ก": "Light Bulb",
+ "๐ฆ": "Flashlight",
+ "๐ฎ": "Red Paper Lantern",
+ "๐ช": "Diya Lamp",
+ "๐": "Notebook with Decorative Cover",
+ "๐": "Closed Book",
+ "๐": "Open Book",
+ "๐": "Green Book",
+ "๐": "Blue Book",
+ "๐": "Orange Book",
+ "๐": "Books",
+ "๐": "Notebook",
+ "๐": "Ledger",
+ "๐": "Page with Curl",
+ "๐": "Scroll",
+ "๐": "Page Facing Up",
+ "๐ฐ": "Newspaper",
+ "๐๏ธ": "Rolled-Up Newspaper",
+ "๐": "Bookmark Tabs",
+ "๐": "Bookmark",
+ "๐ท๏ธ": "Label",
+ "๐ฐ": "Money Bag",
+ "๐ช": "Coin",
+ "๐ด": "Yen Banknote",
+ "๐ต": "Dollar Banknote",
+ "๐ถ": "Euro Banknote",
+ "๐ท": "Pound Banknote",
+ "๐ธ": "Money with Wings",
+ "๐ณ": "Credit Card",
+ "๐งพ": "Receipt",
+ "โ๏ธ": "Envelope",
+ "๐ง": "E-Mail",
+ "๐จ": "Incoming Envelope",
+ "๐ฉ": "Envelope with Arrow",
+ "๐ค": "Outbox Tray",
+ "๐ฅ": "Inbox Tray",
+ "๐ฆ": "Package",
+ "๐ซ": "Closed Mailbox with Raised Flag",
+ "๐ช": "Closed Mailbox with Lowered Flag",
+ "๐ฌ": "Open Mailbox with Raised Flag",
+ "๐ญ": "Open Mailbox with Lowered Flag",
+ "๐ฎ": "Postbox",
+ "๐ณ๏ธ": "Ballot Box with Ballot",
+ "โ๏ธ": "Pencil",
+ "โ๏ธ": "Black Nib",
+ "๐๏ธ": "Fountain Pen",
+ "๐๏ธ": "Pen",
+ "๐๏ธ": "Paintbrush",
+ "๐๏ธ": "Crayon",
+ "๐": "Memo",
+ "๐": "File Folder",
+ "๐": "Open File Folder",
+ "๐๏ธ": "Card Index Dividers",
+ "๐
": "Calendar",
+ "๐": "Tear-Off Calendar",
+ "๐๏ธ": "Spiral Notepad",
+ "๐๏ธ": "Spiral Calendar",
+ "๐": "Card Index",
+ "๐": "Chart Increasing",
+ "๐": "Chart Decreasing",
+ "๐": "Bar Chart",
+ "๐": "Clipboard",
+ "๐": "Pushpin",
+ "๐": "Round Pushpin",
+ "๐": "Paperclip",
+ "๐๏ธ": "Linked Paperclips",
+ "๐": "Straight Ruler",
+ "๐": "Triangular Ruler",
+ "โ๏ธ": "Scissors",
+ "๐๏ธ": "Card File Box",
+ "๐๏ธ": "File Cabinet",
+ "๐๏ธ": "Wastebasket",
+ "๐": "Locked",
+ "๐": "Unlocked",
+ "๐": "Locked with Pen",
+ "๐": "Locked with Key",
+ "๐": "Key",
+ "๐๏ธ": "Old Key",
+ "๐จ": "Hammer",
+ "๐ช": "Axe",
+ "โ๏ธ": "Pick",
+ "โ๏ธ": "Hammer and Pick",
+ "๐ ๏ธ": "Hammer and Wrench",
+ "๐ก๏ธ": "Dagger",
+ "โ๏ธ": "Crossed Swords",
+ "๐ซ": "Pistol",
+ "๐ช": "Boomerang",
+ "๐ก๏ธ": "Shield",
+ "๐ช": "Carpentry Saw",
+ "๐ง": "Wrench",
+ "๐ช": "Screwdriver",
+ "๐ฉ": "Nut and Bolt",
+ "โ๏ธ": "Gear",
+ "๐๏ธ": "Clamp",
+ "โ๏ธ": "Balance Scale",
+ "๐ฆฏ": "White Cane",
+ "๐": "Link",
+ "โ๏ธ": "Chains",
+ "๐ช": "Hook",
+ "๐งฐ": "Toolbox",
+ "๐งฒ": "Magnet",
+ "๐ช": "Ladder",
+ "โ๏ธ": "Alembic",
+ "๐งช": "Test Tube",
+ "๐งซ": "Petri Dish",
+ "๐งฌ": "DNA",
+ "๐ฌ": "Microscope",
+ "๐ญ": "Telescope",
+ "๐ก": "Satellite Antenna",
+ "๐": "Syringe",
+ "๐ฉธ": "Drop of Blood",
+ "๐": "Pill",
+ "๐ฉน": "Adhesive Bandage",
+ "๐ฉบ": "Stethoscope",
+ "๐ช": "Door",
+ "๐ช": "Mirror",
+ "๐ช": "Window",
+ "๐๏ธ": "Bed",
+ "๐๏ธ": "Couch and Lamp",
+ "๐ช": "Chair",
+ "๐ฝ": "Toilet",
+ "๐ช ": "Plunger",
+ "๐ฟ": "Shower",
+ "๐": "Bathtub",
+ "๐ชค": "Mouse Trap",
+ "๐ช": "Razor",
+ "๐งด": "Lotion Bottle",
+ "๐งท": "Safety Pin",
+ "๐งน": "Broom",
+ "๐งบ": "Basket",
+ "๐งป": "Roll of Paper",
+ "๐ชฃ": "Bucket",
+ "๐งผ": "Soap",
+ "๐ชฅ": "Toothbrush",
+ "๐งฝ": "Sponge",
+ "๐งฏ": "Fire Extinguisher",
+ "๐": "Shopping Cart",
+ "๐ฌ": "Cigarette",
+ "โฐ๏ธ": "Coffin",
+ "๐ชฆ": "Headstone",
+ "โฑ๏ธ": "Funeral Urn",
+ "๐ฟ": "Moai",
+ "๐ชง": "Placard",
+ "๐ฐ": "Potable Water",
+ },
+ "Symbols": {
+ "๐": "Heart with Arrow",
+ "๐": "Heart with Ribbon",
+ "๐": "Sparkling Heart",
+ "๐": "Growing Heart",
+ "๐": "Beating Heart",
+ "๐": "Revolving Hearts",
+ "๐": "Two Hearts",
+ "๐": "Heart Decoration",
+ "โฃ๏ธ": "Heart Exclamation",
+ "๐": "Broken Heart",
+ "โค๏ธ": "Red Heart",
+ "๐งก": "Orange Heart",
+ "๐": "Yellow Heart",
+ "๐": "Green Heart",
+ "๐": "Blue Heart",
+ "๐": "Purple Heart",
+ "๐ค": "Brown Heart",
+ "๐ค": "Black Heart",
+ "๐ค": "White Heart",
+ "๐ฏ": "Hundred Points",
+ "๐ข": "Anger Symbol",
+ "๐ฌ": "Speech Balloon",
+ "๐๏ธโ๐จ๏ธ": "Eye in Speech Bubble",
+ "๐จ๏ธ": "Left Speech Bubble",
+ "๐ฏ๏ธ": "Right Anger Bubble",
+ "๐ญ": "Thought Balloon",
+ "๐ค": "Zzz",
+ "๐ฎ": "White Flower",
+ "โจ๏ธ": "Hot Springs",
+ "๐": "Barber Pole",
+ "๐": "Stop Sign",
+ "๐": "Twelve OโClock",
+ "๐ง": "Twelve-Thirty",
+ "๐": "One OโClock",
+ "๐": "One-Thirty",
+ "๐": "Two OโClock",
+ "๐": "Two-Thirty",
+ "๐": "Three OโClock",
+ "๐": "Three-Thirty",
+ "๐": "Four OโClock",
+ "๐": "Four-Thirty",
+ "๐": "Five OโClock",
+ "๐ ": "Five-Thirty",
+ "๐": "Six OโClock",
+ "๐ก": "Six-Thirty",
+ "๐": "Seven OโClock",
+ "๐ข": "Seven-Thirty",
+ "๐": "Eight OโClock",
+ "๐ฃ": "Eight-Thirty",
+ "๐": "Nine OโClock",
+ "๐ค": "Nine-Thirty",
+ "๐": "Ten OโClock",
+ "๐ฅ": "Ten-Thirty",
+ "๐": "Eleven OโClock",
+ "๐ฆ": "Eleven-Thirty",
+ "๐": "Cyclone",
+ "โ ๏ธ": "Spade Suit",
+ "โฅ๏ธ": "Heart Suit",
+ "โฆ๏ธ": "Diamond Suit",
+ "โฃ๏ธ": "Club Suit",
+ "๐": "Joker",
+ "๐": "Mahjong Red Dragon",
+ "๐ด": "Flower Playing Cards",
+ "๐": "Muted Speaker",
+ "๐": "Speaker Low Volume",
+ "๐": "Speaker Medium Volume",
+ "๐": "Speaker High Volume",
+ "๐ข": "Loudspeaker",
+ "๐ฃ": "Megaphone",
+ "๐ฏ": "Postal Horn",
+ "๐": "Bell",
+ "๐": "Bell with Slash",
+ "๐ต": "Musical Note",
+ "๐ถ": "Musical Notes",
+ "๐น": "Chart Increasing with Yen",
+ "๐": "Elevator",
+ "๐ง": "ATM Sign",
+ "๐ฎ": "Litter in Bin Sign",
+ "๐ฐ": "Potable Water",
+ "โฟ": "Wheelchair Symbol",
+ "๐น": "Menโs Room",
+ "๐บ": "Womenโs Room",
+ "๐ป": "Restroom",
+ "๐ผ": "Baby Symbol",
+ "๐พ": "Water Closet",
+ "โ ๏ธ": "Warning",
+ "๐ธ": "Children Crossing",
+ "โ": "No Entry",
+ "๐ซ": "Prohibited",
+ "๐ณ": "No Bicycles",
+ "๐ญ": "No Smoking",
+ "๐ฏ": "No Littering",
+ "๐ฑ": "Non-Potable Water",
+ "๐ท": "No Pedestrians",
+ "๐ต": "No Mobile Phones",
+ "๐": "No One Under Eighteen",
+ "โข๏ธ": "Radioactive",
+ "โฃ๏ธ": "Biohazard",
+ "โฌ๏ธ": "Up Arrow",
+ "โ๏ธ": "Up-Right Arrow",
+ "โก๏ธ": "Right Arrow",
+ "โ๏ธ": "Down-Right Arrow",
+ "โฌ๏ธ": "Down Arrow",
+ "โ๏ธ": "Down-Left Arrow",
+ "โฌ
๏ธ": "Left Arrow",
+ "โ๏ธ": "Up-Left Arrow",
+ "โ๏ธ": "Up-Down Arrow",
+ "โ๏ธ": "Left-Right Arrow",
+ "โฉ๏ธ": "Right Arrow Curving Left",
+ "โช๏ธ": "Left Arrow Curving Right",
+ "โคด๏ธ": "Right Arrow Curving Up",
+ "โคต๏ธ": "Right Arrow Curving Down",
+ "๐": "Clockwise Vertical Arrows",
+ "๐": "Counterclockwise Arrows Button",
+ "๐": "Back Arrow",
+ "๐": "End Arrow",
+ "๐": "On! Arrow",
+ "๐": "Soon Arrow",
+ "๐": "Top Arrow",
+ "๐": "Place of Worship",
+ "โ๏ธ": "Atom Symbol",
+ "๐๏ธ": "Om",
+ "โก๏ธ": "Star of David",
+ "โธ๏ธ": "Wheel of Dharma",
+ "โฏ๏ธ": "Yin Yang",
+ "โ๏ธ": "Latin Cross",
+ "โฆ๏ธ": "Orthodox Cross",
+ "โช๏ธ": "Star and Crescent",
+ "โฎ๏ธ": "Peace Symbol",
+ "๐": "Menorah",
+ "๐ฏ": "Dotted Six-Pointed Star",
+ "โ": "Aries",
+ "โ": "Taurus",
+ "โ": "Gemini",
+ "โ": "Cancer",
+ "โ": "Leo",
+ "โ": "Virgo",
+ "โ": "Libra",
+ "โ": "Scorpio",
+ "โ": "Sagittarius",
+ "โ": "Capricorn",
+ "โ": "Aquarius",
+ "โ": "Pisces",
+ "โ": "Ophiuchus",
+ "๐": "Shuffle Tracks Button",
+ "๐": "Repeat Button",
+ "๐": "Repeat Single Button",
+ "โถ๏ธ": "Play Button",
+ "โฉ": "Fast-Forward Button",
+ "โญ๏ธ": "Next Track Button",
+ "โฏ๏ธ": "Play or Pause Button",
+ "โ๏ธ": "Reverse Button",
+ "โช": "Fast Reverse Button",
+ "โฎ๏ธ": "Last Track Button",
+ "๐ผ": "Upwards Button",
+ "โซ": "Fast Up Button",
+ "๐ฝ": "Downwards Button",
+ "โฌ": "Fast Down Button",
+ "โธ๏ธ": "Pause Button",
+ "โน๏ธ": "Stop Button",
+ "โบ๏ธ": "Record Button",
+ "โ๏ธ": "Eject Button",
+ "๐ฆ": "Cinema",
+ "๐
": "Dim Button",
+ "๐": "Bright Button",
+ "๐ถ": "Antenna Bars",
+ "๐ณ": "Vibration Mode",
+ "๐ด": "Mobile Phone Off",
+ "โ๏ธ": "Female Sign",
+ "โ๏ธ": "Male Sign",
+ "โ๏ธ": "Multiply",
+ "โ": "Plus",
+ "โ": "Minus",
+ "โ": "Divide",
+ "โพ๏ธ": "Infinity",
+ "โผ๏ธ": "Double Exclamation Mark",
+ "โ๏ธ": "Exclamation Question Mark",
+ "โ": "Question Mark",
+ "โ": "White Question Mark",
+ "โ": "White Exclamation Mark",
+ "โ": "Exclamation Mark",
+ "ใฐ๏ธ": "Wavy Dash",
+ "๐ฑ": "Currency Exchange",
+ "๐ฒ": "Heavy Dollar Sign",
+ "โ๏ธ": "Medical Symbol",
+ "โป๏ธ": "Recycling Symbol",
+ "โ๏ธ": "Fleur-de-lis",
+ "๐ฑ": "Trident Emblem",
+ "๐": "Name Badge",
+ "๐ฐ": "Japanese Symbol for Beginner",
+ "โญ": "Hollow Red Circle",
+ "โ
": "Check Mark Button",
+ "โ๏ธ": "Check Box with Check",
+ "โ๏ธ": "Check Mark",
+ "โ": "Cross Mark",
+ "โ": "Cross Mark Button",
+ "โฐ": "Curly Loop",
+ "โฟ": "Double Curly Loop",
+ "ใฝ๏ธ": "Part Alternation Mark",
+ "โณ๏ธ": "Eight-Spoked Asterisk",
+ "โด๏ธ": "Eight-Pointed Star",
+ "โ๏ธ": "Sparkle",
+ "ยฉ๏ธ": "Copyright",
+ "ยฎ๏ธ": "Registered",
+ "โข๏ธ": "Trade Mark",
+ "#๏ธโฃ": "Keycap Number Sign",
+ "*๏ธโฃ": "Keycap Asterisk",
+ "0๏ธโฃ": "Keycap Digit Zero",
+ "1๏ธโฃ": "Keycap Digit One",
+ "2๏ธโฃ": "Keycap Digit Two",
+ "3๏ธโฃ": "Keycap Digit Three",
+ "4๏ธโฃ": "Keycap Digit Four",
+ "5๏ธโฃ": "Keycap Digit Five",
+ "6๏ธโฃ": "Keycap Digit Six",
+ "7๏ธโฃ": "Keycap Digit Seven",
+ "8๏ธโฃ": "Keycap Digit Eight",
+ "9๏ธโฃ": "Keycap Digit Nine",
+ "๐": "Keycap: 10",
+ "๐ ": "Input Latin Uppercase",
+ "๐ก": "Input Latin Lowercase",
+ "๐ข": "Input Numbers",
+ "๐ฃ": "Input Symbols",
+ "๐ค": "Input Latin Letters",
+ "๐
ฐ๏ธ": "A Button (Blood Type)",
+ "๐": "AB Button (Blood Type)",
+ "๐
ฑ๏ธ": "B Button (Blood Type)",
+ "๐": "CL Button",
+ "๐": "Cool Button",
+ "๐": "Free Button",
+ "โน๏ธ": "Information",
+ "๐": "ID Button",
+ "โ๏ธ": "Circled M",
+ "๐": "New Button",
+ "๐": "NG Button",
+ "๐
พ๏ธ": "O Button (Blood Type)",
+ "๐": "OK Button",
+ "๐
ฟ๏ธ": "P Button",
+ "๐": "SOS Button",
+ "๐": "Up! Button",
+ "๐": "Vs Button",
+ "๐": "Japanese โHereโ Button",
+ "๐๏ธ": "Japanese โService Chargeโ Button",
+ "๐ท๏ธ": "Japanese โMonthly Amountโ Button",
+ "๐ถ": "Japanese โNot Free of Chargeโ Button",
+ "๐ฏ": "Japanese โReservedโ Button",
+ "๐": "Japanese โBargainโ Button",
+ "๐น": "Japanese โDiscountโ Button",
+ "๐": "Japanese โFree of Chargeโ Button",
+ "๐ฒ": "Japanese โProhibitedโ Button",
+ "๐": "Japanese โAcceptableโ Button",
+ "๐ธ": "Japanese โApplicationโ Button",
+ "๐ด": "Japanese โPassing Gradeโ Button",
+ "๐ณ": "Japanese โVacancyโ Button",
+ "ใ๏ธ": "Japanese โCongratulationsโ Button",
+ "ใ๏ธ": "Japanese โSecretโ Button",
+ "๐บ": "Japanese โOpen for Businessโ Button",
+ "๐ต": "Japanese โNo Vacancyโ Button",
+ "๐ด": "Red Circle",
+ "๐ ": "Orange Circle",
+ "๐ก": "Yellow Circle",
+ "๐ข": "Green Circle",
+ "๐ต": "Blue Circle",
+ "๐ฃ": "Purple Circle",
+ "๐ค": "Brown Circle",
+ "โซ": "Black Circle",
+ "โช": "White Circle",
+ "๐ฅ": "Red Square",
+ "๐ง": "Orange Square",
+ "๐จ": "Yellow Square",
+ "๐ฉ": "Green Square",
+ "๐ฆ": "Blue Square",
+ "๐ช": "Purple Square",
+ "๐ซ": "Brown Square",
+ "โฌ": "Black Large Square",
+ "โฌ": "White Large Square",
+ "โผ๏ธ": "Black Medium Square",
+ "โป๏ธ": "White Medium Square",
+ "โพ": "Black Medium-Small Square",
+ "โฝ": "White Medium-Small Square",
+ "โช๏ธ": "Black Small Square",
+ "โซ๏ธ": "White Small Square",
+ "๐ถ": "Large Orange Diamond",
+ "๐ท": "Large Blue Diamond",
+ "๐ธ": "Small Orange Diamond",
+ "๐น": "Small Blue Diamond",
+ "๐บ": "Red Triangle Pointed Up",
+ "๐ป": "Red Triangle Pointed Down",
+ "๐ ": "Diamond with a Dot",
+ "๐": "Radio Button",
+ "๐ณ": "White Square Button",
+ "๐ฒ": "Black Square Button",
+ "โค๏ธโ๐ฅ": "Heart on Fire",
+ "โค๏ธโ๐ฉน": "Mending Heart",
+ },
+ "Flags": {
+ "๐": "Chequered Flag",
+ "๐ฉ": "Triangular Flag",
+ "๐": "Crossed Flags",
+ "๐ด": "Black Flag",
+ "๐ณ๏ธ": "White Flag",
+ "๐ณ๏ธโ๐": "Rainbow Flag",
+ "๐ณ๏ธโโง๏ธ": "Transgender Flag",
+ "๐ดโโ ๏ธ": "Pirate Flag",
+ "๐ฆ๐จ": "Flag: Ascension Island",
+ "๐ฆ๐ฉ": "Flag: Andorra",
+ "๐ฆ๐ช": "Flag: United Arab Emirates",
+ "๐ฆ๐ซ": "Flag: Afghanistan",
+ "๐ฆ๐ฌ": "Flag: Antigua & Barbuda",
+ "๐ฆ๐ฎ": "Flag: Anguilla",
+ "๐ฆ๐ฑ": "Flag: Albania",
+ "๐ฆ๐ฒ": "Flag: Armenia",
+ "๐ฆ๐ด": "Flag: Angola",
+ "๐ฆ๐ถ": "Flag: Antarctica",
+ "๐ฆ๐ท": "Flag: Argentina",
+ "๐ฆ๐ธ": "Flag: American Samoa",
+ "๐ฆ๐น": "Flag: Austria",
+ "๐ฆ๐บ": "Flag: Australia",
+ "๐ฆ๐ผ": "Flag: Aruba",
+ "๐ฆ๐ฝ": "Flag: ร
land Islands",
+ "๐ฆ๐ฟ": "Flag: Azerbaijan",
+ "๐ง๐ฆ": "Flag: Bosnia & Herzegovina",
+ "๐ง๐ง": "Flag: Barbados",
+ "๐ง๐ฉ": "Flag: Bangladesh",
+ "๐ง๐ช": "Flag: Belgium",
+ "๐ง๐ซ": "Flag: Burkina Faso",
+ "๐ง๐ฌ": "Flag: Bulgaria",
+ "๐ง๐ญ": "Flag: Bahrain",
+ "๐ง๐ฎ": "Flag: Burundi",
+ "๐ง๐ฏ": "Flag: Benin",
+ "๐ง๐ฑ": "Flag: St. Barthรฉlemy",
+ "๐ง๐ฒ": "Flag: Bermuda",
+ "๐ง๐ณ": "Flag: Brunei",
+ "๐ง๐ด": "Flag: Bolivia",
+ "๐ง๐ถ": "Flag: Caribbean Netherlands",
+ "๐ง๐ท": "Flag: Brazil",
+ "๐ง๐ธ": "Flag: Bahamas",
+ "๐ง๐น": "Flag: Bhutan",
+ "๐ง๐ป": "Flag: Bouvet Island",
+ "๐ง๐ผ": "Flag: Botswana",
+ "๐ง๐พ": "Flag: Belarus",
+ "๐ง๐ฟ": "Flag: Belize",
+ "๐จ๐ฆ": "Flag: Canada",
+ "๐จ๐จ": "Flag: Cocos (Keeling) Islands",
+ "๐จ๐ฉ": "Flag: Congo - Kinshasa",
+ "๐จ๐ซ": "Flag: Central African Republic",
+ "๐จ๐ฌ": "Flag: Congo - Brazzaville",
+ "๐จ๐ญ": "Flag: Switzerland",
+ "๐จ๐ฎ": "Flag: Cรดte dโIvoire",
+ "๐จ๐ฐ": "Flag: Cook Islands",
+ "๐จ๐ฑ": "Flag: Chile",
+ "๐จ๐ฒ": "Flag: Cameroon",
+ "๐จ๐ณ": "Flag: China",
+ "๐จ๐ด": "Flag: Colombia",
+ "๐จ๐ต": "Flag: Clipperton Island",
+ "๐จ๐ท": "Flag: Costa Rica",
+ "๐จ๐บ": "Flag: Cuba",
+ "๐จ๐ป": "Flag: Cape Verde",
+ "๐จ๐ผ": "Flag: Curaรงao",
+ "๐จ๐ฝ": "Flag: Christmas Island",
+ "๐จ๐พ": "Flag: Cyprus",
+ "๐จ๐ฟ": "Flag: Czechia",
+ "๐ฉ๐ช": "Flag: Germany",
+ "๐ฉ๐ฌ": "Flag: Diego Garcia",
+ "๐ฉ๐ฏ": "Flag: Djibouti",
+ "๐ฉ๐ฐ": "Flag: Denmark",
+ "๐ฉ๐ฒ": "Flag: Dominica",
+ "๐ฉ๐ด": "Flag: Dominican Republic",
+ "๐ฉ๐ฟ": "Flag: Algeria",
+ "๐ช๐ฆ": "Flag: Ceuta & Melilla",
+ "๐ช๐จ": "Flag: Ecuador",
+ "๐ช๐ช": "Flag: Estonia",
+ "๐ช๐ฌ": "Flag: Egypt",
+ "๐ช๐ญ": "Flag: Western Sahara",
+ "๐ช๐ท": "Flag: Eritrea",
+ "๐ช๐ธ": "Flag: Spain",
+ "๐ช๐น": "Flag: Ethiopia",
+ "๐ช๐บ": "Flag: European Union",
+ "๐ซ๐ฎ": "Flag: Finland",
+ "๐ซ๐ฏ": "Flag: Fiji",
+ "๐ซ๐ฐ": "Flag: Falkland Islands",
+ "๐ซ๐ฒ": "Flag: Micronesia",
+ "๐ซ๐ด": "Flag: Faroe Islands",
+ "๐ซ๐ท": "Flag: France",
+ "๐ฌ๐ฆ": "Flag: Gabon",
+ "๐ฌ๐ง": "Flag: United Kingdom",
+ "๐ฌ๐ฉ": "Flag: Grenada",
+ "๐ฌ๐ช": "Flag: Georgia",
+ "๐ฌ๐ซ": "Flag: French Guiana",
+ "๐ฌ๐ฌ": "Flag: Guernsey",
+ "๐ฌ๐ญ": "Flag: Ghana",
+ "๐ฌ๐ฎ": "Flag: Gibraltar",
+ "๐ฌ๐ฑ": "Flag: Greenland",
+ "๐ฌ๐ฒ": "Flag: Gambia",
+ "๐ฌ๐ณ": "Flag: Guinea",
+ "๐ฌ๐ต": "Flag: Guadeloupe",
+ "๐ฌ๐ถ": "Flag: Equatorial Guinea",
+ "๐ฌ๐ท": "Flag: Greece",
+ "๐ฌ๐ธ": "Flag: South Georgia & South Sandwich Islands",
+ "๐ฌ๐น": "Flag: Guatemala",
+ "๐ฌ๐บ": "Flag: Guam",
+ "๐ฌ๐ผ": "Flag: Guinea-Bissau",
+ "๐ฌ๐พ": "Flag: Guyana",
+ "๐ญ๐ฐ": "Flag: Hong Kong SAR China",
+ "๐ญ๐ฒ": "Flag: Heard & McDonald Islands",
+ "๐ญ๐ณ": "Flag: Honduras",
+ "๐ญ๐ท": "Flag: Croatia",
+ "๐ญ๐น": "Flag: Haiti",
+ "๐ญ๐บ": "Flag: Hungary",
+ "๐ฎ๐จ": "Flag: Canary Islands",
+ "๐ฎ๐ฉ": "Flag: Indonesia",
+ "๐ฎ๐ช": "Flag: Ireland",
+ "๐ฎ๐ฑ": "Flag: Israel",
+ "๐ฎ๐ฒ": "Flag: Isle of Man",
+ "๐ฎ๐ณ": "Flag: India",
+ "๐ฎ๐ด": "Flag: British Indian Ocean Territory",
+ "๐ฎ๐ถ": "Flag: Iraq",
+ "๐ฎ๐ท": "Flag: Iran",
+ "๐ฎ๐ธ": "Flag: Iceland",
+ "๐ฎ๐น": "Flag: Italy",
+ "๐ฏ๐ช": "Flag: Jersey",
+ "๐ฏ๐ฒ": "Flag: Jamaica",
+ "๐ฏ๐ด": "Flag: Jordan",
+ "๐ฏ๐ต": "Flag: Japan",
+ "๐ฐ๐ช": "Flag: Kenya",
+ "๐ฐ๐ฌ": "Flag: Kyrgyzstan",
+ "๐ฐ๐ญ": "Flag: Cambodia",
+ "๐ฐ๐ฎ": "Flag: Kiribati",
+ "๐ฐ๐ฒ": "Flag: Comoros",
+ "๐ฐ๐ณ": "Flag: St. Kitts & Nevis",
+ "๐ฐ๐ต": "Flag: North Korea",
+ "๐ฐ๐ท": "Flag: South Korea",
+ "๐ฐ๐ผ": "Flag: Kuwait",
+ "๐ฐ๐พ": "Flag: Cayman Islands",
+ "๐ฐ๐ฟ": "Flag: Kazakhstan",
+ "๐ฑ๐ฆ": "Flag: Laos",
+ "๐ฑ๐ง": "Flag: Lebanon",
+ "๐ฑ๐จ": "Flag: St. Lucia",
+ "๐ฑ๐ฎ": "Flag: Liechtenstein",
+ "๐ฑ๐ฐ": "Flag: Sri Lanka",
+ "๐ฑ๐ท": "Flag: Liberia",
+ "๐ฑ๐ธ": "Flag: Lesotho",
+ "๐ฑ๐น": "Flag: Lithuania",
+ "๐ฑ๐บ": "Flag: Luxembourg",
+ "๐ฑ๐ป": "Flag: Latvia",
+ "๐ฑ๐พ": "Flag: Libya",
+ "๐ฒ๐ฆ": "Flag: Morocco",
+ "๐ฒ๐จ": "Flag: Monaco",
+ "๐ฒ๐ฉ": "Flag: Moldova",
+ "๐ฒ๐ช": "Flag: Montenegro",
+ "๐ฒ๐ซ": "Flag: St. Martin",
+ "๐ฒ๐ฌ": "Flag: Madagascar",
+ "๐ฒ๐ญ": "Flag: Marshall Islands",
+ "๐ฒ๐ฐ": "Flag: North Macedonia",
+ "๐ฒ๐ฑ": "Flag: Mali",
+ "๐ฒ๐ฒ": "Flag: Myanmar (Burma)",
+ "๐ฒ๐ณ": "Flag: Mongolia",
+ "๐ฒ๐ด": "Flag: Macao Sar China",
+ "๐ฒ๐ต": "Flag: Northern Mariana Islands",
+ "๐ฒ๐ถ": "Flag: Martinique",
+ "๐ฒ๐ท": "Flag: Mauritania",
+ "๐ฒ๐ธ": "Flag: Montserrat",
+ "๐ฒ๐น": "Flag: Malta",
+ "๐ฒ๐บ": "Flag: Mauritius",
+ "๐ฒ๐ป": "Flag: Maldives",
+ "๐ฒ๐ผ": "Flag: Malawi",
+ "๐ฒ๐ฝ": "Flag: Mexico",
+ "๐ฒ๐พ": "Flag: Malaysia",
+ "๐ฒ๐ฟ": "Flag: Mozambique",
+ "๐ณ๐ฆ": "Flag: Namibia",
+ "๐ณ๐จ": "Flag: New Caledonia",
+ "๐ณ๐ช": "Flag: Niger",
+ "๐ณ๐ซ": "Flag: Norfolk Island",
+ "๐ณ๐ฌ": "Flag: Nigeria",
+ "๐ณ๐ฎ": "Flag: Nicaragua",
+ "๐ณ๐ฑ": "Flag: Netherlands",
+ "๐ณ๐ด": "Flag: Norway",
+ "๐ณ๐ต": "Flag: Nepal",
+ "๐ณ๐ท": "Flag: Nauru",
+ "๐ณ๐บ": "Flag: Niue",
+ "๐ณ๐ฟ": "Flag: New Zealand",
+ "๐ด๐ฒ": "Flag: Oman",
+ "๐ต๐ฆ": "Flag: Panama",
+ "๐ต๐ช": "Flag: Peru",
+ "๐ต๐ซ": "Flag: French Polynesia",
+ "๐ต๐ฌ": "Flag: Papua New Guinea",
+ "๐ต๐ญ": "Flag: Philippines",
+ "๐ต๐ฐ": "Flag: Pakistan",
+ "๐ต๐ฑ": "Flag: Poland",
+ "๐ต๐ฒ": "Flag: St. Pierre & Miquelon",
+ "๐ต๐ณ": "Flag: Pitcairn Islands",
+ "๐ต๐ท": "Flag: Puerto Rico",
+ "๐ต๐ธ": "Flag: Palestinian Territories",
+ "๐ต๐น": "Flag: Portugal",
+ "๐ต๐ผ": "Flag: Palau",
+ "๐ต๐พ": "Flag: Paraguay",
+ "๐ถ๐ฆ": "Flag: Qatar",
+ "๐ท๐ช": "Flag: Rรฉunion",
+ "๐ท๐ด": "Flag: Romania",
+ "๐ท๐ธ": "Flag: Serbia",
+ "๐ท๐บ": "Flag: Russia",
+ "๐ท๐ผ": "Flag: Rwanda",
+ "๐ธ๐ฆ": "Flag: Saudi Arabia",
+ "๐ธ๐ง": "Flag: Solomon Islands",
+ "๐ธ๐จ": "Flag: Seychelles",
+ "๐ธ๐ฉ": "Flag: Sudan",
+ "๐ธ๐ช": "Flag: Sweden",
+ "๐ธ๐ฌ": "Flag: Singapore",
+ "๐ธ๐ญ": "Flag: St. Helena",
+ "๐ธ๐ฎ": "Flag: Slovenia",
+ "๐ธ๐ฏ": "Flag: Svalbard & Jan Mayen",
+ "๐ธ๐ฐ": "Flag: Slovakia",
+ "๐ธ๐ฑ": "Flag: Sierra Leone",
+ "๐ธ๐ฒ": "Flag: San Marino",
+ "๐ธ๐ณ": "Flag: Senegal",
+ "๐ธ๐ด": "Flag: Somalia",
+ "๐ธ๐ท": "Flag: Suriname",
+ "๐ธ๐ธ": "Flag: South Sudan",
+ "๐ธ๐น": "Flag: Sรฃo Tomรฉ & Prรญncipe",
+ "๐ธ๐ป": "Flag: El Salvador",
+ "๐ธ๐ฝ": "Flag: Sint Maarten",
+ "๐ธ๐พ": "Flag: Syria",
+ "๐ธ๐ฟ": "Flag: Eswatini",
+ "๐น๐ฆ": "Flag: Tristan Da Cunha",
+ "๐น๐จ": "Flag: Turks & Caicos Islands",
+ "๐น๐ฉ": "Flag: Chad",
+ "๐น๐ซ": "Flag: French Southern Territories",
+ "๐น๐ฌ": "Flag: Togo",
+ "๐น๐ญ": "Flag: Thailand",
+ "๐น๐ฏ": "Flag: Tajikistan",
+ "๐น๐ฐ": "Flag: Tokelau",
+ "๐น๐ฑ": "Flag: Timor-Leste",
+ "๐น๐ฒ": "Flag: Turkmenistan",
+ "๐น๐ณ": "Flag: Tunisia",
+ "๐น๐ด": "Flag: Tonga",
+ "๐น๐ท": "Flag: Turkey",
+ "๐น๐น": "Flag: Trinidad & Tobago",
+ "๐น๐ป": "Flag: Tuvalu",
+ "๐น๐ผ": "Flag: Taiwan",
+ "๐น๐ฟ": "Flag: Tanzania",
+ "๐บ๐ฆ": "Flag: Ukraine",
+ "๐บ๐ฌ": "Flag: Uganda",
+ "๐บ๐ฒ": "Flag: U.S. Outlying Islands",
+ "๐บ๐ณ": "Flag: United Nations",
+ "๐บ๐ธ": "Flag: United States",
+ "๐บ๐พ": "Flag: Uruguay",
+ "๐บ๐ฟ": "Flag: Uzbekistan",
+ "๐ป๐ฆ": "Flag: Vatican City",
+ "๐ป๐จ": "Flag: St. Vincent & Grenadines",
+ "๐ป๐ช": "Flag: Venezuela",
+ "๐ป๐ฌ": "Flag: British Virgin Islands",
+ "๐ป๐ฎ": "Flag: U.S. Virgin Islands",
+ "๐ป๐ณ": "Flag: Vietnam",
+ "๐ป๐บ": "Flag: Vanuatu",
+ "๐ผ๐ซ": "Flag: Wallis & Futuna",
+ "๐ผ๐ธ": "Flag: Samoa",
+ "๐ฝ๐ฐ": "Flag: Kosovo",
+ "๐พ๐ช": "Flag: Yemen",
+ "๐พ๐น": "Flag: Mayotte",
+ "๐ฟ๐ฆ": "Flag: South Africa",
+ "๐ฟ๐ฒ": "Flag: Zambia",
+ "๐ฟ๐ผ": "Flag: Zimbabwe",
+ "๐ด๓ ง๓ ข๓ ฅ๓ ฎ๓ ง๓ ฟ": "Flag: England",
+ "๐ด๓ ง๓ ข๓ ณ๓ ฃ๓ ด๓ ฟ": "Flag: Scotland",
+ "๐ด๓ ง๓ ข๓ ท๓ ฌ๓ ณ๓ ฟ": "Flag: Wales",
+ "๐ด๓ ต๓ ณ๓ ด๓ ธ๓ ฟ": "Flag for Texas (US-TX)",
+ },
+ }
+
+ self.total_emojis = {}
+
+ for group, items in self.emojis.items():
+ box = QGroupBox(group)
+ layout = QGridLayout()
+ for i, (emoji, name) in enumerate(items.items()):
+ # uses a little modified push button which recognizes when the mouse is over the button
+ button = self.__QHoverPushButton(text=emoji, parent_emoji_picker=self)
+
+ button.setFlat(True)
+ button.setSizePolicy(QSizePolicy.Fixed, QSizePolicy.Fixed)
+ button.setFixedSize(30, 30)
+ # the button style
+ button.setStyleSheet(
+ "QPushButton {"
+ " font-size: 20px;"
+ " border-radius: 50%%;"
+ "}"
+ "QPushButton:hover {"
+ " background-color: %s"
+ "}" % button.palette().button().color().darker().name()
+ )
+ layout.addWidget(
+ button, int(i / self.items_per_row), i % self.items_per_row
+ )
+
+ # adds the current emoji with its name to a dict where are all emojis without groups are listed
+ self.total_emojis[emoji] = name
+
+ box.setLayout(layout)
+ self.emoji_scroll_area_vlayout.addWidget(box)
+
+ def setupUi(self, Form):
+ Form.setObjectName("Form")
+ Form.resize(400, 300)
+ sizePolicy = QSizePolicy(QSizePolicy.Preferred, QSizePolicy.Preferred)
+ sizePolicy.setHorizontalStretch(0)
+ sizePolicy.setVerticalStretch(0)
+ sizePolicy.setHeightForWidth(Form.sizePolicy().hasHeightForWidth())
+ Form.setSizePolicy(sizePolicy)
+ self.verticalLayout = QVBoxLayout(Form)
+ self.verticalLayout.setObjectName("verticalLayout")
+ self.search_line_edit = QLineEdit(Form)
+ self.search_line_edit.setObjectName("search_line_edit")
+ self.verticalLayout.addWidget(self.search_line_edit)
+ self.emoji_scroll_area = QScrollArea(Form)
+ self.emoji_scroll_area.setWidgetResizable(True)
+ self.emoji_scroll_area.setObjectName("emoji_scroll_area")
+ self.emoji_scroll_area_widgets = QWidget()
+ self.emoji_scroll_area_widgets.setGeometry(QtCore.QRect(0, 0, 384, 198))
+ self.emoji_scroll_area_widgets.setObjectName("emoji_scroll_area_widgets")
+ self.emoji_scroll_area_vlayout = QVBoxLayout(self.emoji_scroll_area_widgets)
+ self.emoji_scroll_area_vlayout.setObjectName("emoji_scroll_area_vlayout")
+ self.emoji_scroll_area.setWidget(self.emoji_scroll_area_widgets)
+ self.verticalLayout.addWidget(self.emoji_scroll_area)
+ self.emoji_information_hlayout = QHBoxLayout()
+ self.emoji_information_hlayout.setObjectName("emoji_information_hlayout")
+ self.emoji_image_label = QLabel(Form)
+ sizePolicy = QSizePolicy(QSizePolicy.Preferred, QSizePolicy.Fixed)
+ sizePolicy.setHorizontalStretch(0)
+ sizePolicy.setVerticalStretch(0)
+ sizePolicy.setHeightForWidth(
+ self.emoji_image_label.sizePolicy().hasHeightForWidth()
+ )
+ self.emoji_image_label.setSizePolicy(sizePolicy)
+ font = QtGui.QFont()
+ font.setPointSize(22)
+ self.emoji_image_label.setFont(font)
+ self.emoji_image_label.setText("")
+ self.emoji_image_label.setObjectName("emoji_image_label")
+ self.emoji_information_hlayout.addWidget(self.emoji_image_label)
+ self.emoji_name_label = QLabel(Form)
+ sizePolicy = QSizePolicy(QSizePolicy.Expanding, QSizePolicy.Fixed)
+ sizePolicy.setHorizontalStretch(0)
+ sizePolicy.setVerticalStretch(0)
+ sizePolicy.setHeightForWidth(
+ self.emoji_name_label.sizePolicy().hasHeightForWidth()
+ )
+ self.emoji_name_label.setSizePolicy(sizePolicy)
+ font = QtGui.QFont()
+ font.setPointSize(10)
+ self.emoji_name_label.setFont(font)
+ self.emoji_name_label.setText("")
+ self.emoji_name_label.setObjectName("emoji_name_label")
+ self.emoji_information_hlayout.addWidget(self.emoji_name_label)
+ self.verticalLayout.addLayout(self.emoji_information_hlayout)
+
+ self.retranslateUi(Form)
+ QtCore.QMetaObject.connectSlotsByName(Form)
+
+ def retranslateUi(self, Form):
+ _translate = QtCore.QCoreApplication.translate
+ Form.setWindowTitle(_translate("Form", "Form"))
+ self.search_line_edit.setPlaceholderText(_translate("Form", "Search..."))
+
+ def select(self) -> typing.Union[str, None]:
+ """Shows this window and returns the selected emoji if a button was pressed or none, if the window was closed without choosing an emoji"""
+ self.exec()
+ return self.selected_emoji
+
+ def on_input(self, text: str):
+ """This method gets called if the text in the search input changes and selects all emojis which correspond with the search input text"""
+ for i in range(self.emoji_scroll_area_vlayout.count()):
+ group = self.emoji_scroll_area_vlayout.itemAt(i).widget()
+ # hides and deletes the previous 'Search results' group box
+ if group.title() == "Search results":
+ group.hide()
+ group.deleteLater()
+ # if no text is given / the search input is empty, every group which is hidden will be shown
+ elif not text and group.isHidden():
+ group.show()
+ # if a text is given / the search input has text, every group which is not hidden will be shown
+ elif text and not group.isHidden():
+ group.hide()
+
+ if text:
+ search_results = QGroupBox("Search results")
+ layout = QGridLayout()
+
+ items = -1
+
+ def add_item():
+ # `items` is readonly in inner functions, so it can't increased here and has to be increases in the two loop below
+
+ # uses a little modified push button which recognizes when the mouse is over the button
+ button = self.__QHoverPushButton(text=emoji, parent_emoji_picker=self)
+
+ button.setFlat(True)
+ button.setSizePolicy(QSizePolicy.Fixed, QSizePolicy.Fixed)
+ button.setFixedSize(30, 30)
+ # the button style
+ button.setStyleSheet(
+ "QPushButton {"
+ " font-size: 20px;"
+ " border-radius: 50%%;"
+ "}"
+ "QPushButton:hover {"
+ " background-color: %s"
+ "}" % button.palette().button().color().darker().name()
+ )
+ layout.addWidget(
+ button, int(items / self.items_per_row), items % self.items_per_row
+ )
+
+ lower_text = text.lower()
+ # if `self.performance_search` is True, only emoji names starting with the specified text are displayed
+ if self.performance_search:
+ for emoji, name in self.total_emojis.items():
+ if name.lower().startswith(lower_text):
+ items += 1
+ add_item()
+ # but if `self.performance_search` is False, emoji texts which containing the specified text are displayed
+ else:
+ for emoji, name in self.total_emojis.items():
+ if lower_text in name.lower():
+ items += 1
+ add_item()
+
+ # adds a spacer below the found emojis to "order" them properly
+ layout.addItem(
+ QSpacerItem(
+ 40,
+ 20,
+ QSizePolicy.Expanding,
+ QSizePolicy.Expanding,
+ ),
+ int(items / self.items_per_row) + 1,
+ 0,
+ columnSpan=self.items_per_row,
+ )
+
+ search_results.setLayout(layout)
+ self.emoji_scroll_area_vlayout.insertWidget(0, search_results)
+
+ class __QHoverPushButton(QPushButton):
+ """A custom QPushButton which detects when a mouse hovers it"""
+
+ def __init__(self, text: str, parent_emoji_picker):
+ """
+ Args:
+ text: The button text
+ parent_emoji_picker (QEmojiPicker): The parent emoji picker
+ """
+ super().__init__(text)
+ self.clicked.connect(self.on_click)
+
+ self.parent_emoji_picker = parent_emoji_picker
+
+ def enterEvent(self, a0: QtCore.QEvent) -> None:
+ """On mouse hover / when the mouse is over the button"""
+ self.parent_emoji_picker.emoji_image_label.setText(self.text())
+ group_title = self.parentWidget().title()
+ # when the group title is 'Search results' the user has used the search input
+ if group_title == "Search results":
+ self.parent_emoji_picker.emoji_name_label.setText(
+ self.parent_emoji_picker.total_emojis[self.text()]
+ )
+ else:
+ self.parent_emoji_picker.emoji_name_label.setText(
+ self.parent_emoji_picker.emojis[group_title][self.text()]
+ )
+
+ def leaveEvent(self, a0: QtCore.QEvent) -> None:
+ """When the mouse leaves the button"""
+ self.parent_emoji_picker.emoji_image_label.setText("")
+ self.parent_emoji_picker.emoji_name_label.setText("")
+
+ def on_click(self):
+ """Gets called if the button is pressed. Closes the emoji picker and if it was called via `QEmojiPicker.select()` the current button emoji will be returned"""
+ self.parent_emoji_picker.selected_emoji = self.text()
+ self.parent_emoji_picker.close()