From 3efeb71a16c4d01c608049f81af3071c50b51bde Mon Sep 17 00:00:00 2001 From: Andrey Shovkoplyas Date: Sun, 10 Feb 2019 18:18:58 +0100 Subject: [PATCH] desktop emoji Signed-off-by: Andrey Shovkoplyas --- .../ui/screens/desktop/main/chat/emoji.cljs | 18 +++ .../ui/screens/desktop/main/chat/events.cljs | 10 ++ .../ui/screens/desktop/main/chat/views.cljs | 115 +++++++++++------- 3 files changed, 100 insertions(+), 43 deletions(-) create mode 100644 src/status_im/ui/screens/desktop/main/chat/emoji.cljs diff --git a/src/status_im/ui/screens/desktop/main/chat/emoji.cljs b/src/status_im/ui/screens/desktop/main/chat/emoji.cljs new file mode 100644 index 0000000000..ef74c4e57d --- /dev/null +++ b/src/status_im/ui/screens/desktop/main/chat/emoji.cljs @@ -0,0 +1,18 @@ +(ns status-im.ui.screens.desktop.main.chat.emoji + (:require [clojure.string :as string])) + +(def emoji + {"Smileys" (string/split "\uD83D\uDE00 \uD83D\uDE01 \uD83D\uDE02 \uD83E\uDD23 \uD83D\uDE03 \uD83D\uDE04 \uD83D\uDE05 \uD83D\uDE06 \uD83D\uDE09 \uD83D\uDE0A \uD83D\uDE0B \uD83D\uDE0E \uD83D\uDE0D \uD83D\uDE18 \uD83E\uDD70 \uD83D\uDE17 \uD83D\uDE19 \uD83D\uDE1A ☺️ \uD83D\uDE42 \uD83E\uDD17 \uD83E\uDD29 \uD83E\uDD14 \uD83E\uDD28 \uD83D\uDE10 \uD83D\uDE11 \uD83D\uDE36 \uD83D\uDE44 \uD83D\uDE0F \uD83D\uDE23 \uD83D\uDE25 \uD83D\uDE2E \uD83E\uDD10 \uD83D\uDE2F \uD83D\uDE2A \uD83D\uDE2B \uD83D\uDE34 \uD83D\uDE0C \uD83D\uDE1B \uD83D\uDE1C \uD83D\uDE1D \uD83E\uDD24 \uD83D\uDE12 \uD83D\uDE13 \uD83D\uDE14 \uD83D\uDE15 \uD83D\uDE43 \uD83E\uDD11 \uD83D\uDE32 ☹️ \uD83D\uDE41 \uD83D\uDE16 \uD83D\uDE1E \uD83D\uDE1F \uD83D\uDE24 \uD83D\uDE22 \uD83D\uDE2D \uD83D\uDE26 \uD83D\uDE27 \uD83D\uDE28 \uD83D\uDE29 \uD83E\uDD2F \uD83D\uDE2C \uD83D\uDE30 \uD83D\uDE31 \uD83E\uDD75 \uD83E\uDD76 \uD83D\uDE33 \uD83E\uDD2A \uD83D\uDE35 \uD83D\uDE21 \uD83D\uDE20 \uD83E\uDD2C \uD83D\uDE37 \uD83E\uDD12 \uD83E\uDD15 \uD83E\uDD22 \uD83E\uDD2E \uD83E\uDD27 \uD83D\uDE07 \uD83E\uDD20 \uD83E\uDD21 \uD83E\uDD73 \uD83E\uDD74 \uD83E\uDD7A \uD83E\uDD25 \uD83E\uDD2B \uD83E\uDD2D \uD83E\uDDD0 \uD83E\uDD13 \uD83D\uDE08 \uD83D\uDC7F \uD83D\uDC79 \uD83D\uDC7A \uD83D\uDC80 \uD83D\uDC7B \uD83D\uDC7D \uD83E\uDD16 \uD83D\uDCA9 \uD83D\uDE3A \uD83D\uDE38 \uD83D\uDE39 \uD83D\uDE3B \uD83D\uDE3C \uD83D\uDE3D \uD83D\uDE40 \uD83D\uDE3F \uD83D\uDE3E" #" ") + "Clothing and Accessories" (string/split "\uD83E\uDDE5 \uD83D\uDC5A \uD83D\uDC55 \uD83D\uDC56 \uD83D\uDC54 \uD83D\uDC57 \uD83D\uDC59 \uD83D\uDC58 \uD83D\uDC60 \uD83D\uDC61 \uD83D\uDC62 \uD83D\uDC5E \uD83D\uDC5F \uD83E\uDD7E \uD83E\uDD7F \uD83E\uDDE6 \uD83E\uDDE4 \uD83E\uDDE3 \uD83C\uDFA9 \uD83E\uDDE2 \uD83D\uDC52 \uD83C\uDF93 ⛑ \uD83D\uDC51 \uD83D\uDC5D \uD83D\uDC5B \uD83D\uDC5C \uD83D\uDCBC \uD83C\uDF92 \uD83D\uDC53 \uD83D\uDD76 \uD83E\uDD7D \uD83E\uDD7C \uD83C\uDF02 \uD83E\uDDF5 \uD83E\uDDF6" #" ") + "Animals & Nature" (string/split "\uD83D\uDC36 \uD83D\uDC31 \uD83D\uDC2D \uD83D\uDC39 \uD83D\uDC30 \uD83E\uDD8A \uD83E\uDD9D \uD83D\uDC3B \uD83D\uDC3C \uD83E\uDD98 \uD83E\uDDA1 \uD83D\uDC28 \uD83D\uDC2F \uD83E\uDD81 \uD83D\uDC2E \uD83D\uDC37 \uD83D\uDC3D \uD83D\uDC38 \uD83D\uDC35 \uD83D\uDE48 \uD83D\uDE49 \uD83D\uDE4A \uD83D\uDC12 \uD83D\uDC14 \uD83D\uDC27 \uD83D\uDC26 \uD83D\uDC24 \uD83D\uDC23 \uD83D\uDC25 \uD83E\uDD86 \uD83E\uDDA2 \uD83E\uDD85 \uD83E\uDD89 \uD83E\uDD9A \uD83E\uDD9C \uD83E\uDD87 \uD83D\uDC3A \uD83D\uDC17 \uD83D\uDC34 \uD83E\uDD84 \uD83D\uDC1D \uD83D\uDC1B \uD83E\uDD8B \uD83D\uDC0C \uD83D\uDC1A \uD83D\uDC1E \uD83D\uDC1C \uD83E\uDD97 \uD83D\uDD77 \uD83D\uDD78 \uD83E\uDD82 \uD83E\uDD9F \uD83E\uDDA0 \uD83D\uDC22 \uD83D\uDC0D \uD83E\uDD8E \uD83E\uDD96 \uD83E\uDD95 \uD83D\uDC19 \uD83E\uDD91 \uD83E\uDD90 \uD83E\uDD80 \uD83D\uDC21 \uD83D\uDC20 \uD83D\uDC1F \uD83D\uDC2C \uD83D\uDC33 \uD83D\uDC0B \uD83E\uDD88 \uD83D\uDC0A \uD83D\uDC05 \uD83D\uDC06 \uD83E\uDD93 \uD83E\uDD8D \uD83D\uDC18 \uD83E\uDD8F \uD83E\uDD9B \uD83D\uDC2A \uD83D\uDC2B \uD83E\uDD99 \uD83E\uDD92 \uD83D\uDC03 \uD83D\uDC02 \uD83D\uDC04 \uD83D\uDC0E \uD83D\uDC16 \uD83D\uDC0F \uD83D\uDC11 \uD83D\uDC10 \uD83E\uDD8C \uD83D\uDC15 \uD83D\uDC29 \uD83D\uDC08 \uD83D\uDC13 \uD83E\uDD83 \uD83D\uDD4A \uD83D\uDC07 \uD83D\uDC01 \uD83D\uDC00 \uD83D\uDC3F \uD83E\uDD94 \uD83D\uDC3E \uD83D\uDC09 \uD83D\uDC32 \uD83C\uDF35 \uD83C\uDF84 \uD83C\uDF32 \uD83C\uDF33 \uD83C\uDF34 \uD83C\uDF31 \uD83C\uDF3F ☘️ \uD83C\uDF40 \uD83C\uDF8D \uD83C\uDF8B \uD83C\uDF43 \uD83C\uDF42 \uD83C\uDF41 \uD83C\uDF44 \uD83C\uDF3E \uD83D\uDC90 \uD83C\uDF37 \uD83C\uDF39 \uD83E\uDD40 \uD83C\uDF3A \uD83C\uDF38 \uD83C\uDF3C \uD83C\uDF3B \uD83C\uDF1E \uD83C\uDF1D \uD83C\uDF1B \uD83C\uDF1C \uD83C\uDF1A \uD83C\uDF15 \uD83C\uDF16 \uD83C\uDF17 \uD83C\uDF18 \uD83C\uDF11 \uD83C\uDF12 \uD83C\uDF13 \uD83C\uDF14 \uD83C\uDF19 \uD83C\uDF0E \uD83C\uDF0D \uD83C\uDF0F \uD83D\uDCAB ⭐️ \uD83C\uDF1F ✨ ⚡️ ☄️ \uD83D\uDCA5 \uD83D\uDD25 \uD83C\uDF2A \uD83C\uDF08 ☀️ \uD83C\uDF24 ⛅️ \uD83C\uDF25 ☁️ \uD83C\uDF26 \uD83C\uDF27 ⛈ \uD83C\uDF29 \uD83C\uDF28 ❄️ ☃️ ⛄️ \uD83C\uDF2C \uD83D\uDCA8 \uD83D\uDCA7 \uD83D\uDCA6 ☔️ ☂️ \uD83C\uDF0A \uD83C\uDF2B" #" ") + "Food & Drink" (string/split "\uD83C\uDF4F \uD83C\uDF4E \uD83C\uDF50 \uD83C\uDF4A \uD83C\uDF4B \uD83C\uDF4C \uD83C\uDF49 \uD83C\uDF47 \uD83C\uDF53 \uD83C\uDF48 \uD83C\uDF52 \uD83C\uDF51 \uD83C\uDF4D \uD83E\uDD6D \uD83E\uDD65 \uD83E\uDD5D \uD83C\uDF45 \uD83C\uDF46 \uD83E\uDD51 \uD83E\uDD66 \uD83E\uDD52 \uD83E\uDD6C \uD83C\uDF36 \uD83C\uDF3D \uD83E\uDD55 \uD83E\uDD54 \uD83C\uDF60 \uD83E\uDD50 \uD83C\uDF5E \uD83E\uDD56 \uD83E\uDD68 \uD83E\uDD6F \uD83E\uDDC0 \uD83E\uDD5A \uD83C\uDF73 \uD83E\uDD5E \uD83E\uDD53 \uD83E\uDD69 \uD83C\uDF57 \uD83C\uDF56 \uD83C\uDF2D \uD83C\uDF54 \uD83C\uDF5F \uD83C\uDF55 \uD83E\uDD6A \uD83E\uDD59 \uD83C\uDF2E \uD83C\uDF2F \uD83E\uDD57 \uD83E\uDD58 \uD83E\uDD6B \uD83C\uDF5D \uD83C\uDF5C \uD83C\uDF72 \uD83C\uDF5B \uD83C\uDF63 \uD83C\uDF71 \uD83E\uDD5F \uD83C\uDF64 \uD83C\uDF59 \uD83C\uDF5A \uD83C\uDF58 \uD83C\uDF65 \uD83E\uDD6E \uD83E\uDD60 \uD83C\uDF62 \uD83C\uDF61 \uD83C\uDF67 \uD83C\uDF68 \uD83C\uDF66 \uD83E\uDD67 \uD83C\uDF70 \uD83C\uDF82 \uD83C\uDF6E \uD83C\uDF6D \uD83C\uDF6C \uD83C\uDF6B \uD83C\uDF7F \uD83E\uDDC2 \uD83C\uDF69 \uD83C\uDF6A \uD83C\uDF30 \uD83E\uDD5C \uD83C\uDF6F \uD83E\uDD5B \uD83C\uDF7C ☕️ \uD83C\uDF75 \uD83E\uDD64 \uD83C\uDF76 \uD83C\uDF7A \uD83C\uDF7B \uD83E\uDD42 \uD83C\uDF77 \uD83E\uDD43 \uD83C\uDF78 \uD83C\uDF79 \uD83C\uDF7E \uD83E\uDD44 \uD83C\uDF74 \uD83C\uDF7D \uD83E\uDD63 \uD83E\uDD61 \uD83E\uDD62" #" ") + "Travel & Places" (string/split "\uD83D\uDE97 \uD83D\uDE95 \uD83D\uDE99 \uD83D\uDE8C \uD83D\uDE8E \uD83C\uDFCE \uD83D\uDE93 \uD83D\uDE91 \uD83D\uDE92 \uD83D\uDE90 \uD83D\uDE9A \uD83D\uDE9B \uD83D\uDE9C \uD83D\uDEF4 \uD83D\uDEB2 \uD83D\uDEF5 \uD83C\uDFCD \uD83D\uDEA8 \uD83D\uDE94 \uD83D\uDE8D \uD83D\uDE98 \uD83D\uDE96 \uD83D\uDEA1 \uD83D\uDEA0 \uD83D\uDE9F \uD83D\uDE83 \uD83D\uDE8B \uD83D\uDE9E \uD83D\uDE9D \uD83D\uDE84 \uD83D\uDE85 \uD83D\uDE88 \uD83D\uDE82 \uD83D\uDE86 \uD83D\uDE87 \uD83D\uDE8A \uD83D\uDE89 ✈️ \uD83D\uDEEB \uD83D\uDEEC \uD83D\uDEE9 \uD83D\uDCBA \uD83D\uDEF0 \uD83D\uDE80 \uD83D\uDEF8 \uD83D\uDE81 \uD83D\uDEF6 ⛵️ \uD83D\uDEA4 \uD83D\uDEE5 \uD83D\uDEF3 ⛴ \uD83D\uDEA2 ⚓️ ⛽️ \uD83D\uDEA7 \uD83D\uDEA6 \uD83D\uDEA5 \uD83D\uDE8F \uD83D\uDDFA \uD83D\uDDFF \uD83D\uDDFD \uD83D\uDDFC \uD83C\uDFF0 \uD83C\uDFEF \uD83C\uDFDF \uD83C\uDFA1 \uD83C\uDFA2 \uD83C\uDFA0 ⛲️ ⛱ \uD83C\uDFD6 \uD83C\uDFDD \uD83C\uDFDC \uD83C\uDF0B ⛰ \uD83C\uDFD4 \uD83D\uDDFB \uD83C\uDFD5 ⛺️ \uD83C\uDFE0 \uD83C\uDFE1 \uD83C\uDFD8 \uD83C\uDFDA \uD83C\uDFD7 \uD83C\uDFED \uD83C\uDFE2 \uD83C\uDFEC \uD83C\uDFE3 \uD83C\uDFE4 \uD83C\uDFE5 \uD83C\uDFE6 \uD83C\uDFE8 \uD83C\uDFEA \uD83C\uDFEB \uD83C\uDFE9 \uD83D\uDC92 \uD83C\uDFDB ⛪️ \uD83D\uDD4C \uD83D\uDD4D \uD83D\uDD4B ⛩ \uD83D\uDEE4 \uD83D\uDEE3 \uD83D\uDDFE \uD83C\uDF91 \uD83C\uDFDE \uD83C\uDF05 \uD83C\uDF04 \uD83C\uDF20 \uD83C\uDF87 \uD83C\uDF86 \uD83C\uDF07 \uD83C\uDF06 \uD83C\uDFD9 \uD83C\uDF03 \uD83C\uDF0C \uD83C\uDF09 \uD83C\uDF01" #" ") + "Objects" (string/split "⌚️ \uD83D\uDCF1 \uD83D\uDCF2 \uD83D\uDCBB ⌨️ \uD83D\uDDA5 \uD83D\uDDA8 \uD83D\uDDB1 \uD83D\uDDB2 \uD83D\uDD79 \uD83D\uDDDC \uD83D\uDCBD \uD83D\uDCBE \uD83D\uDCBF \uD83D\uDCC0 \uD83D\uDCFC \uD83D\uDCF7 \uD83D\uDCF8 \uD83D\uDCF9 \uD83C\uDFA5 \uD83D\uDCFD \uD83C\uDF9E \uD83D\uDCDE ☎️ \uD83D\uDCDF \uD83D\uDCE0 \uD83D\uDCFA \uD83D\uDCFB \uD83C\uDF99 \uD83C\uDF9A \uD83C\uDF9B ⏱ ⏲ ⏰ \uD83D\uDD70 ⌛️ ⏳ \uD83D\uDCE1 \uD83D\uDD0B \uD83D\uDD0C \uD83D\uDCA1 \uD83D\uDD26 \uD83D\uDD6F \uD83D\uDDD1 \uD83D\uDEE2 \uD83D\uDCB8 \uD83D\uDCB5 \uD83D\uDCB4 \uD83D\uDCB6 \uD83D\uDCB7 \uD83D\uDCB0 \uD83D\uDCB3 \uD83E\uDDFE \uD83D\uDC8E ⚖️ \uD83D\uDD27 \uD83D\uDD28 ⚒ \uD83D\uDEE0 ⛏ \uD83D\uDD29 ⚙️ ⛓ \uD83D\uDD2B \uD83D\uDCA3 \uD83D\uDD2A \uD83D\uDDE1 ⚔️ \uD83D\uDEE1 \uD83D\uDEAC ⚰️ ⚱️ \uD83C\uDFFA \uD83E\uDDED \uD83E\uDDF1 \uD83D\uDD2E \uD83E\uDDFF \uD83E\uDDF8 \uD83D\uDCFF \uD83D\uDC88 ⚗️ \uD83D\uDD2D \uD83E\uDDF0 \uD83E\uDDF2 \uD83E\uDDEA \uD83E\uDDEB \uD83E\uDDEC \uD83E\uDDEF \uD83D\uDD2C \uD83D\uDD73 \uD83D\uDC8A \uD83D\uDC89 \uD83C\uDF21 \uD83D\uDEBD \uD83D\uDEB0 \uD83D\uDEBF \uD83D\uDEC1 \uD83D\uDEC0 \uD83D\uDEC0\uD83C\uDFFB \uD83D\uDEC0\uD83C\uDFFC \uD83D\uDEC0\uD83C\uDFFD \uD83D\uDEC0\uD83C\uDFFE \uD83D\uDEC0\uD83C\uDFFF \uD83E\uDDF4 \uD83E\uDDF5 \uD83E\uDDF6 \uD83E\uDDF7 \uD83E\uDDF9 \uD83E\uDDFA \uD83E\uDDFB \uD83E\uDDFC \uD83E\uDDFD \uD83D\uDECE \uD83D\uDD11 \uD83D\uDDDD \uD83D\uDEAA \uD83D\uDECB \uD83D\uDECF \uD83D\uDECC \uD83D\uDDBC \uD83D\uDECD \uD83E\uDDF3 \uD83D\uDED2 \uD83C\uDF81 \uD83C\uDF88 \uD83C\uDF8F \uD83C\uDF80 \uD83C\uDF8A \uD83C\uDF89 \uD83E\uDDE8 \uD83C\uDF8E \uD83C\uDFEE \uD83C\uDF90 \uD83E\uDDE7 ✉️ \uD83D\uDCE9 \uD83D\uDCE8 \uD83D\uDCE7 \uD83D\uDC8C \uD83D\uDCE5 \uD83D\uDCE4 \uD83D\uDCE6 \uD83C\uDFF7 \uD83D\uDCEA \uD83D\uDCEB \uD83D\uDCEC \uD83D\uDCED \uD83D\uDCEE \uD83D\uDCEF \uD83D\uDCDC \uD83D\uDCC3 \uD83D\uDCC4 \uD83D\uDCD1 \uD83D\uDCCA \uD83D\uDCC8 \uD83D\uDCC9 \uD83D\uDDD2 \uD83D\uDDD3 \uD83D\uDCC6 \uD83D\uDCC5 \uD83D\uDCC7 \uD83D\uDDC3 \uD83D\uDDF3 \uD83D\uDDC4 \uD83D\uDCCB \uD83D\uDCC1 \uD83D\uDCC2 \uD83D\uDDC2 \uD83D\uDDDE \uD83D\uDCF0 \uD83D\uDCD3 \uD83D\uDCD4 \uD83D\uDCD2 \uD83D\uDCD5 \uD83D\uDCD7 \uD83D\uDCD8 \uD83D\uDCD9 \uD83D\uDCDA \uD83D\uDCD6 \uD83D\uDD16 \uD83D\uDD17 \uD83D\uDCCE \uD83D\uDD87 \uD83D\uDCD0 \uD83D\uDCCF \uD83D\uDCCC \uD83D\uDCCD ✂️ \uD83D\uDD8A \uD83D\uDD8B ✒️ \uD83D\uDD8C \uD83D\uDD8D \uD83D\uDCDD ✏️ \uD83D\uDD0D \uD83D\uDD0E \uD83D\uDD0F \uD83D\uDD10 \uD83D\uDD12 \uD83D\uDD13" #" ") + "Symbols" (string/split "❤️ \uD83E\uDDE1 \uD83D\uDC9B \uD83D\uDC9A \uD83D\uDC99 \uD83D\uDC9C \uD83D\uDDA4 \uD83D\uDC94 ❣️ \uD83D\uDC95 \uD83D\uDC9E \uD83D\uDC93 \uD83D\uDC97 \uD83D\uDC96 \uD83D\uDC98 \uD83D\uDC9D \uD83D\uDC9F ☮️ ✝️ ☪️ \uD83D\uDD49 ☸️ ✡️ \uD83D\uDD2F \uD83D\uDD4E ☯️ ☦️ \uD83D\uDED0 ⛎ ♈️ ♉️ ♊️ ♋️ ♌️ ♍️ ♎️ ♏️ ♐️ ♑️ ♒️ ♓️ \uD83C\uDD94 ⚛️ \uD83C\uDE51 ☢️ ☣️ \uD83D\uDCF4 \uD83D\uDCF3 \uD83C\uDE36 \uD83C\uDE1A️ \uD83C\uDE38 \uD83C\uDE3A \uD83C\uDE37️ ✴️ \uD83C\uDD9A \uD83D\uDCAE \uD83C\uDE50 ㊙️ ㊗️ \uD83C\uDE34 \uD83C\uDE35 \uD83C\uDE39 \uD83C\uDE32 \uD83C\uDD70️ \uD83C\uDD71️ \uD83C\uDD8E \uD83C\uDD91 \uD83C\uDD7E️ \uD83C\uDD98 ❌ ⭕️ \uD83D\uDED1 ⛔️ \uD83D\uDCDB \uD83D\uDEAB \uD83D\uDCAF \uD83D\uDCA2 ♨️ \uD83D\uDEB7 \uD83D\uDEAF \uD83D\uDEB3 \uD83D\uDEB1 \uD83D\uDD1E \uD83D\uDCF5 \uD83D\uDEAD ❗️ ❕ ❓ ❔ ‼️ ⁉️ \uD83D\uDD05 \uD83D\uDD06 〽️ ⚠️ \uD83D\uDEB8 \uD83D\uDD31 ⚜️ \uD83D\uDD30 ♻️ ✅ \uD83C\uDE2F️ \uD83D\uDCB9 ❇️ ✳️ ❎ \uD83C\uDF10 \uD83D\uDCA0 Ⓜ️ \uD83C\uDF00 \uD83D\uDCA4 \uD83C\uDFE7 \uD83D\uDEBE ♿️ \uD83C\uDD7F️ \uD83C\uDE33 \uD83C\uDE02️ \uD83D\uDEC2 \uD83D\uDEC3 \uD83D\uDEC4 \uD83D\uDEC5 \uD83D\uDEB9 \uD83D\uDEBA \uD83D\uDEBC \uD83D\uDEBB \uD83D\uDEAE \uD83C\uDFA6 \uD83D\uDCF6 \uD83C\uDE01 \uD83D\uDD23 ℹ️ \uD83D\uDD24 \uD83D\uDD21 \uD83D\uDD20 \uD83C\uDD96 \uD83C\uDD97 \uD83C\uDD99 \uD83C\uDD92 \uD83C\uDD95 \uD83C\uDD93 0️⃣ 1️⃣ 2️⃣ 3️⃣ 4️⃣ 5️⃣ 6️⃣ 7️⃣ 8️⃣ 9️⃣ \uD83D\uDD1F \uD83D\uDD22 #️⃣ *️⃣ ⏏️ ▶️ \u23F8 ⏯ \u23F9 \u23FA ⏭ ⏮ ⏩ ⏪ ⏫ ⏬ ◀️ \uD83D\uDD3C \uD83D\uDD3D ➡️ ⬅️ ⬆️ ⬇️ ↗️ ↘️ ↙️ ↖️ ↕️ ↔️ ↪️ ↩️ ⤴️ ⤵️ \uD83D\uDD00 \uD83D\uDD01 \uD83D\uDD02 \uD83D\uDD04 \uD83D\uDD03 \uD83C\uDFB5 \uD83C\uDFB6 ➕ ➖ ➗ ✖️ ♾ \uD83D\uDCB2 \uD83D\uDCB1 ™️ ©️ ®️ 〰️ ➰ ➿ \uD83D\uDD1A \uD83D\uDD19 \uD83D\uDD1B \uD83D\uDD1D \uD83D\uDD1C ✔️ ☑️ \uD83D\uDD18 ⚪️ ⚫️ \uD83D\uDD34 \uD83D\uDD35 \uD83D\uDD3A \uD83D\uDD3B \uD83D\uDD38 \uD83D\uDD39 \uD83D\uDD36 \uD83D\uDD37 \uD83D\uDD33 \uD83D\uDD32 ▪️ ▫️ ◾️ ◽️ ◼️ ◻️ ⬛️ ⬜️ \uD83D\uDD08 \uD83D\uDD07 \uD83D\uDD09 \uD83D\uDD0A \uD83D\uDD14 \uD83D\uDD15 \uD83D\uDCE3 \uD83D\uDCE2 \uD83D\uDC41\u200D\uD83D\uDDE8 \uD83D\uDCAC \uD83D\uDCAD \uD83D\uDDEF ♠️ ♣️ ♥️ ♦️ \uD83C\uDCCF \uD83C\uDFB4 \uD83C\uDC04️ \uD83D\uDD50 \uD83D\uDD51 \uD83D\uDD52 \uD83D\uDD53 \uD83D\uDD54 \uD83D\uDD55 \uD83D\uDD56 \uD83D\uDD57 \uD83D\uDD58 \uD83D\uDD59 \uD83D\uDD5A \uD83D\uDD5B \uD83D\uDD5C \uD83D\uDD5D \uD83D\uDD5E \uD83D\uDD5F \uD83D\uDD60 \uD83D\uDD61 \uD83D\uDD62 \uD83D\uDD63 \uD83D\uDD64 \uD83D\uDD65 \uD83D\uDD66 \uD83D\uDD67" #" ") + "Flags" (string/split "\uD83C\uDFF3️ \uD83C\uDFF4 \uD83C\uDFC1 \uD83D\uDEA9 \uD83C\uDFF3️\u200D\uD83C\uDF08 \uD83C\uDFF4\u200D☠️ \uD83C\uDDE6\uD83C\uDDEB \uD83C\uDDE6\uD83C\uDDFD \uD83C\uDDE6\uD83C\uDDF1 \uD83C\uDDE9\uD83C\uDDFF \uD83C\uDDE6\uD83C\uDDF8 \uD83C\uDDE6\uD83C\uDDE9 \uD83C\uDDE6\uD83C\uDDF4 \uD83C\uDDE6\uD83C\uDDEE \uD83C\uDDE6\uD83C\uDDF6 \uD83C\uDDE6\uD83C\uDDEC \uD83C\uDDE6\uD83C\uDDF7 \uD83C\uDDE6\uD83C\uDDF2 \uD83C\uDDE6\uD83C\uDDFC \uD83C\uDDE6\uD83C\uDDFA \uD83C\uDDE6\uD83C\uDDF9 \uD83C\uDDE6\uD83C\uDDFF \uD83C\uDDE7\uD83C\uDDF8 \uD83C\uDDE7\uD83C\uDDED \uD83C\uDDE7\uD83C\uDDE9 \uD83C\uDDE7\uD83C\uDDE7 \uD83C\uDDE7\uD83C\uDDFE \uD83C\uDDE7\uD83C\uDDEA \uD83C\uDDE7\uD83C\uDDFF \uD83C\uDDE7\uD83C\uDDEF \uD83C\uDDE7\uD83C\uDDF2 \uD83C\uDDE7\uD83C\uDDF9 \uD83C\uDDE7\uD83C\uDDF4 \uD83C\uDDE7\uD83C\uDDE6 \uD83C\uDDE7\uD83C\uDDFC \uD83C\uDDE7\uD83C\uDDF7 \uD83C\uDDEE\uD83C\uDDF4 \uD83C\uDDFB\uD83C\uDDEC \uD83C\uDDE7\uD83C\uDDF3 \uD83C\uDDE7\uD83C\uDDEC \uD83C\uDDE7\uD83C\uDDEB \uD83C\uDDE7\uD83C\uDDEE \uD83C\uDDF0\uD83C\uDDED \uD83C\uDDE8\uD83C\uDDF2 \uD83C\uDDE8\uD83C\uDDE6 \uD83C\uDDEE\uD83C\uDDE8 \uD83C\uDDE8\uD83C\uDDFB \uD83C\uDDE7\uD83C\uDDF6 \uD83C\uDDF0\uD83C\uDDFE \uD83C\uDDE8\uD83C\uDDEB \uD83C\uDDF9\uD83C\uDDE9 \uD83C\uDDE8\uD83C\uDDF1 \uD83C\uDDE8\uD83C\uDDF3 \uD83C\uDDE8\uD83C\uDDFD \uD83C\uDDE8\uD83C\uDDE8 \uD83C\uDDE8\uD83C\uDDF4 \uD83C\uDDF0\uD83C\uDDF2 \uD83C\uDDE8\uD83C\uDDEC \uD83C\uDDE8\uD83C\uDDE9 \uD83C\uDDE8\uD83C\uDDF0 \uD83C\uDDE8\uD83C\uDDF7 \uD83C\uDDE8\uD83C\uDDEE \uD83C\uDDED\uD83C\uDDF7 \uD83C\uDDE8\uD83C\uDDFA \uD83C\uDDE8\uD83C\uDDFC \uD83C\uDDE8\uD83C\uDDFE \uD83C\uDDE8\uD83C\uDDFF \uD83C\uDDE9\uD83C\uDDF0 \uD83C\uDDE9\uD83C\uDDEF \uD83C\uDDE9\uD83C\uDDF2 \uD83C\uDDE9\uD83C\uDDF4 \uD83C\uDDEA\uD83C\uDDE8 \uD83C\uDDEA\uD83C\uDDEC \uD83C\uDDF8\uD83C\uDDFB \uD83C\uDDEC\uD83C\uDDF6 \uD83C\uDDEA\uD83C\uDDF7 \uD83C\uDDEA\uD83C\uDDEA \uD83C\uDDEA\uD83C\uDDF9 \uD83C\uDDEA\uD83C\uDDFA \uD83C\uDDEB\uD83C\uDDF0 \uD83C\uDDEB\uD83C\uDDF4 \uD83C\uDDEB\uD83C\uDDEF \uD83C\uDDEB\uD83C\uDDEE \uD83C\uDDEB\uD83C\uDDF7 \uD83C\uDDEC\uD83C\uDDEB \uD83C\uDDF5\uD83C\uDDEB \uD83C\uDDF9\uD83C\uDDEB \uD83C\uDDEC\uD83C\uDDE6 \uD83C\uDDEC\uD83C\uDDF2 \uD83C\uDDEC\uD83C\uDDEA \uD83C\uDDE9\uD83C\uDDEA \uD83C\uDDEC\uD83C\uDDED \uD83C\uDDEC\uD83C\uDDEE \uD83C\uDDEC\uD83C\uDDF7 \uD83C\uDDEC\uD83C\uDDF1 \uD83C\uDDEC\uD83C\uDDE9 \uD83C\uDDEC\uD83C\uDDF5 \uD83C\uDDEC\uD83C\uDDFA \uD83C\uDDEC\uD83C\uDDF9 \uD83C\uDDEC\uD83C\uDDEC \uD83C\uDDEC\uD83C\uDDF3 \uD83C\uDDEC\uD83C\uDDFC \uD83C\uDDEC\uD83C\uDDFE \uD83C\uDDED\uD83C\uDDF9 \uD83C\uDDED\uD83C\uDDF3 \uD83C\uDDED\uD83C\uDDF0 \uD83C\uDDED\uD83C\uDDFA \uD83C\uDDEE\uD83C\uDDF8 \uD83C\uDDEE\uD83C\uDDF3 \uD83C\uDDEE\uD83C\uDDE9 \uD83C\uDDEE\uD83C\uDDF7 \uD83C\uDDEE\uD83C\uDDF6 \uD83C\uDDEE\uD83C\uDDEA \uD83C\uDDEE\uD83C\uDDF2 \uD83C\uDDEE\uD83C\uDDF1 \uD83C\uDDEE\uD83C\uDDF9 \uD83C\uDDEF\uD83C\uDDF2 \uD83C\uDDEF\uD83C\uDDF5 \uD83C\uDF8C \uD83C\uDDEF\uD83C\uDDEA \uD83C\uDDEF\uD83C\uDDF4 \uD83C\uDDF0\uD83C\uDDFF \uD83C\uDDF0\uD83C\uDDEA \uD83C\uDDF0\uD83C\uDDEE \uD83C\uDDFD\uD83C\uDDF0 \uD83C\uDDF0\uD83C\uDDFC \uD83C\uDDF0\uD83C\uDDEC \uD83C\uDDF1\uD83C\uDDE6 \uD83C\uDDF1\uD83C\uDDFB \uD83C\uDDF1\uD83C\uDDE7 \uD83C\uDDF1\uD83C\uDDF8 \uD83C\uDDF1\uD83C\uDDF7 \uD83C\uDDF1\uD83C\uDDFE \uD83C\uDDF1\uD83C\uDDEE \uD83C\uDDF1\uD83C\uDDF9 \uD83C\uDDF1\uD83C\uDDFA \uD83C\uDDF2\uD83C\uDDF4 \uD83C\uDDF2\uD83C\uDDF0 \uD83C\uDDF2\uD83C\uDDEC \uD83C\uDDF2\uD83C\uDDFC \uD83C\uDDF2\uD83C\uDDFE \uD83C\uDDF2\uD83C\uDDFB \uD83C\uDDF2\uD83C\uDDF1 \uD83C\uDDF2\uD83C\uDDF9 \uD83C\uDDF2\uD83C\uDDED \uD83C\uDDF2\uD83C\uDDF6 \uD83C\uDDF2\uD83C\uDDF7 \uD83C\uDDF2\uD83C\uDDFA \uD83C\uDDFE\uD83C\uDDF9 \uD83C\uDDF2\uD83C\uDDFD \uD83C\uDDEB\uD83C\uDDF2 \uD83C\uDDF2\uD83C\uDDE9 \uD83C\uDDF2\uD83C\uDDE8 \uD83C\uDDF2\uD83C\uDDF3 \uD83C\uDDF2\uD83C\uDDEA \uD83C\uDDF2\uD83C\uDDF8 \uD83C\uDDF2\uD83C\uDDE6 \uD83C\uDDF2\uD83C\uDDFF \uD83C\uDDF2\uD83C\uDDF2 \uD83C\uDDF3\uD83C\uDDE6 \uD83C\uDDF3\uD83C\uDDF7 \uD83C\uDDF3\uD83C\uDDF5 \uD83C\uDDF3\uD83C\uDDF1 \uD83C\uDDF3\uD83C\uDDE8 \uD83C\uDDF3\uD83C\uDDFF \uD83C\uDDF3\uD83C\uDDEE \uD83C\uDDF3\uD83C\uDDEA \uD83C\uDDF3\uD83C\uDDEC \uD83C\uDDF3\uD83C\uDDFA \uD83C\uDDF3\uD83C\uDDEB \uD83C\uDDF0\uD83C\uDDF5 \uD83C\uDDF2\uD83C\uDDF5 \uD83C\uDDF3\uD83C\uDDF4 \uD83C\uDDF4\uD83C\uDDF2 \uD83C\uDDF5\uD83C\uDDF0 \uD83C\uDDF5\uD83C\uDDFC \uD83C\uDDF5\uD83C\uDDF8 \uD83C\uDDF5\uD83C\uDDE6 \uD83C\uDDF5\uD83C\uDDEC \uD83C\uDDF5\uD83C\uDDFE \uD83C\uDDF5\uD83C\uDDEA \uD83C\uDDF5\uD83C\uDDED \uD83C\uDDF5\uD83C\uDDF3 \uD83C\uDDF5\uD83C\uDDF1 \uD83C\uDDF5\uD83C\uDDF9 \uD83C\uDDF5\uD83C\uDDF7 \uD83C\uDDF6\uD83C\uDDE6 \uD83C\uDDF7\uD83C\uDDEA \uD83C\uDDF7\uD83C\uDDF4 \uD83C\uDDF7\uD83C\uDDFA \uD83C\uDDF7\uD83C\uDDFC \uD83C\uDDFC\uD83C\uDDF8 \uD83C\uDDF8\uD83C\uDDF2 \uD83C\uDDF8\uD83C\uDDE6 \uD83C\uDDF8\uD83C\uDDF3 \uD83C\uDDF7\uD83C\uDDF8 \uD83C\uDDF8\uD83C\uDDE8 \uD83C\uDDF8\uD83C\uDDF1 \uD83C\uDDF8\uD83C\uDDEC \uD83C\uDDF8\uD83C\uDDFD \uD83C\uDDF8\uD83C\uDDF0 \uD83C\uDDF8\uD83C\uDDEE \uD83C\uDDEC\uD83C\uDDF8 \uD83C\uDDF8\uD83C\uDDE7 \uD83C\uDDF8\uD83C\uDDF4 \uD83C\uDDFF\uD83C\uDDE6 \uD83C\uDDF0\uD83C\uDDF7 \uD83C\uDDF8\uD83C\uDDF8 \uD83C\uDDEA\uD83C\uDDF8 \uD83C\uDDF1\uD83C\uDDF0 \uD83C\uDDE7\uD83C\uDDF1 \uD83C\uDDF8\uD83C\uDDED \uD83C\uDDF0\uD83C\uDDF3 \uD83C\uDDF1\uD83C\uDDE8 \uD83C\uDDF5\uD83C\uDDF2 \uD83C\uDDFB\uD83C\uDDE8 \uD83C\uDDF8\uD83C\uDDE9 \uD83C\uDDF8\uD83C\uDDF7 \uD83C\uDDF8\uD83C\uDDFF \uD83C\uDDF8\uD83C\uDDEA \uD83C\uDDE8\uD83C\uDDED \uD83C\uDDF8\uD83C\uDDFE \uD83C\uDDF9\uD83C\uDDFC \uD83C\uDDF9\uD83C\uDDEF \uD83C\uDDF9\uD83C\uDDFF \uD83C\uDDF9\uD83C\uDDED \uD83C\uDDF9\uD83C\uDDF1 \uD83C\uDDF9\uD83C\uDDEC \uD83C\uDDF9\uD83C\uDDF0 \uD83C\uDDF9\uD83C\uDDF4 \uD83C\uDDF9\uD83C\uDDF9 \uD83C\uDDF9\uD83C\uDDF3 \uD83C\uDDF9\uD83C\uDDF7 \uD83C\uDDF9\uD83C\uDDF2 \uD83C\uDDF9\uD83C\uDDE8 \uD83C\uDDF9\uD83C\uDDFB \uD83C\uDDFB\uD83C\uDDEE \uD83C\uDDFA\uD83C\uDDEC \uD83C\uDDFA\uD83C\uDDE6 \uD83C\uDDE6\uD83C\uDDEA \uD83C\uDDEC\uD83C\uDDE7 \uD83C\uDFF4\uDB40\uDC67\uDB40\uDC62\uDB40\uDC65\uDB40\uDC6E\uDB40\uDC67\uDB40\uDC7F \uD83C\uDFF4\uDB40\uDC67\uDB40\uDC62\uDB40\uDC73\uDB40\uDC63\uDB40\uDC74\uDB40\uDC7F \uD83C\uDFF4\uDB40\uDC67\uDB40\uDC62\uDB40\uDC77\uDB40\uDC6C\uDB40\uDC73\uDB40\uDC7F \uD83C\uDDFA\uD83C\uDDF3 \uD83C\uDDFA\uD83C\uDDF8 \uD83C\uDDFA\uD83C\uDDFE \uD83C\uDDFA\uD83C\uDDFF \uD83C\uDDFB\uD83C\uDDFA \uD83C\uDDFB\uD83C\uDDE6 \uD83C\uDDFB\uD83C\uDDEA \uD83C\uDDFB\uD83C\uDDF3 \uD83C\uDDFC\uD83C\uDDEB \uD83C\uDDEA\uD83C\uDDED \uD83C\uDDFE\uD83C\uDDEA \uD83C\uDDFF\uD83C\uDDF2 \uD83C\uDDFF\uD83C\uDDFC" #" ") + "New Emojis" (string/split "\uD83E\uDD70 \uD83E\uDD75 \uD83E\uDD76 \uD83E\uDD73 \uD83E\uDD74 \uD83E\uDD7A \uD83D\uDC68\u200D\uD83E\uDDB0 \uD83D\uDC69\u200D\uD83E\uDDB0 \uD83D\uDC68\u200D\uD83E\uDDB1 \uD83D\uDC69\u200D\uD83E\uDDB1 \uD83D\uDC68\u200D\uD83E\uDDB2 \uD83D\uDC69\u200D\uD83E\uDDB2 \uD83D\uDC68\u200D\uD83E\uDDB3 \uD83D\uDC69\u200D\uD83E\uDDB3 \uD83E\uDDB8 \uD83E\uDDB8\u200D♀️ \uD83E\uDDB8\u200D♂️ \uD83E\uDDB9 \uD83E\uDDB9\u200D♀️ \uD83E\uDDB9\u200D♂️ \uD83E\uDDB5 \uD83E\uDDB6 \uD83E\uDDB4 \uD83E\uDDB7 \uD83E\uDD7D \uD83E\uDD7C \uD83E\uDD7E \uD83E\uDD7F \uD83E\uDD9D \uD83E\uDD99 \uD83E\uDD9B \uD83E\uDD98 \uD83E\uDDA1 \uD83E\uDDA2 \uD83E\uDD9A \uD83E\uDD9C \uD83E\uDD9E \uD83E\uDD9F \uD83E\uDDA0 \uD83E\uDD6D \uD83E\uDD6C \uD83E\uDD6F \uD83E\uDDC2 \uD83E\uDD6E \uD83E\uDDC1 \uD83E\uDDED \uD83E\uDDF1 \uD83D\uDEF9 \uD83E\uDDF3 \uD83E\uDDE8 \uD83E\uDDE7 \uD83E\uDD4E \uD83E\uDD4F \uD83E\uDD4D \uD83E\uDDFF \uD83E\uDDE9 \uD83E\uDDF8 ♟ \uD83E\uDDEE \uD83E\uDDFE \uD83E\uDDF0 \uD83E\uDDF2 \uD83E\uDDEA \uD83E\uDDEB \uD83E\uDDEC \uD83E\uDDEF \uD83E\uDDF4 \uD83E\uDDF5 \uD83E\uDDF6 \uD83E\uDDF7 \uD83E\uDDF9 \uD83E\uDDFA \uD83E\uDDFB \uD83E\uDDFC \uD83E\uDDFD ♾ \uD83C\uDFF4\u200D☠️" #" ")}) + +(comment + "these imojis have additional code, needs to be investigated later" + "People and Fantasy" (string/split "\uD83D\uDC76 \uD83D\uDC67 \uD83E\uDDD2 \uD83D\uDC66 \uD83D\uDC69 \uD83E\uDDD1 \uD83D\uDC68 \uD83D\uDC75 \uD83E\uDDD3 \uD83D\uDC74 \uD83D\uDC72 \uD83D\uDC73\u200D♀️ \uD83D\uDC73\u200D♂️ \uD83E\uDDD5 \uD83E\uDDD4 \uD83D\uDC71\u200D♂️ \uD83D\uDC71\u200D♀️ \uD83D\uDC68\u200D\uD83E\uDDB0 \uD83D\uDC69\u200D\uD83E\uDDB0 \uD83D\uDC68\u200D\uD83E\uDDB1 \uD83D\uDC69\u200D\uD83E\uDDB1 \uD83D\uDC68\u200D\uD83E\uDDB2 \uD83D\uDC69\u200D\uD83E\uDDB2 \uD83D\uDC68\u200D\uD83E\uDDB3 \uD83D\uDC69\u200D\uD83E\uDDB3 \uD83E\uDDB8\u200D♀️ \uD83E\uDDB8\u200D♂️ \uD83E\uDDB9\u200D♀️ \uD83E\uDDB9\u200D♂️ \uD83D\uDC6E\u200D♀️ \uD83D\uDC6E\u200D♂️ \uD83D\uDC77\u200D♀️ \uD83D\uDC77\u200D♂️ \uD83D\uDC82\u200D♀️ \uD83D\uDC82\u200D♂️ \uD83D\uDD75️\u200D♀️ \uD83D\uDD75️\u200D♂️ \uD83D\uDC69\u200D⚕️ \uD83D\uDC68\u200D⚕️ \uD83D\uDC69\u200D\uD83C\uDF3E \uD83D\uDC68\u200D\uD83C\uDF3E \uD83D\uDC69\u200D\uD83C\uDF73 \uD83D\uDC68\u200D\uD83C\uDF73 \uD83D\uDC69\u200D\uD83C\uDF93 \uD83D\uDC68\u200D\uD83C\uDF93 \uD83D\uDC69\u200D\uD83C\uDFA4 \uD83D\uDC68\u200D\uD83C\uDFA4 \uD83D\uDC69\u200D\uD83C\uDFEB \uD83D\uDC68\u200D\uD83C\uDFEB \uD83D\uDC69\u200D\uD83C\uDFED \uD83D\uDC68\u200D\uD83C\uDFED \uD83D\uDC69\u200D\uD83D\uDCBB \uD83D\uDC68\u200D\uD83D\uDCBB \uD83D\uDC69\u200D\uD83D\uDCBC \uD83D\uDC68\u200D\uD83D\uDCBC \uD83D\uDC69\u200D\uD83D\uDD27 \uD83D\uDC68\u200D\uD83D\uDD27 \uD83D\uDC69\u200D\uD83D\uDD2C \uD83D\uDC68\u200D\uD83D\uDD2C \uD83D\uDC69\u200D\uD83C\uDFA8 \uD83D\uDC68\u200D\uD83C\uDFA8 \uD83D\uDC69\u200D\uD83D\uDE92 \uD83D\uDC68\u200D\uD83D\uDE92 \uD83D\uDC69\u200D✈️ \uD83D\uDC68\u200D✈️ \uD83D\uDC69\u200D\uD83D\uDE80 \uD83D\uDC68\u200D\uD83D\uDE80 \uD83D\uDC69\u200D⚖️ \uD83D\uDC68\u200D⚖️ \uD83D\uDC70 \uD83E\uDD35 \uD83D\uDC78 \uD83E\uDD34 \uD83E\uDD36 \uD83C\uDF85 \uD83E\uDDD9\u200D♀️ \uD83E\uDDD9\u200D♂️ \uD83E\uDDDD\u200D♀️ \uD83E\uDDDD\u200D♂️ \uD83E\uDDDB\u200D♀️ \uD83E\uDDDB\u200D♂️ \uD83E\uDDDF\u200D♀️ \uD83E\uDDDF\u200D♂️ \uD83E\uDDDE\u200D♀️ \uD83E\uDDDE\u200D♂️ \uD83E\uDDDC\u200D♀️ \uD83E\uDDDC\u200D♂️ \uD83E\uDDDA\u200D♀️ \uD83E\uDDDA\u200D♂️ \uD83D\uDC7C \uD83E\uDD30 \uD83E\uDD31 \uD83D\uDE47\u200D♀️ \uD83D\uDE47\u200D♂️ \uD83D\uDC81\u200D♀️ \uD83D\uDC81\u200D♂️ \uD83D\uDE45\u200D♀️ \uD83D\uDE45\u200D♂️ \uD83D\uDE46\u200D♀️ \uD83D\uDE46\u200D♂️ \uD83D\uDE4B\u200D♀️ \uD83D\uDE4B\u200D♂️ \uD83E\uDD26\u200D♀️ \uD83E\uDD26\u200D♂️ \uD83E\uDD37\u200D♀️ \uD83E\uDD37\u200D♂️ \uD83D\uDE4E\u200D♀️ \uD83D\uDE4E\u200D♂️ \uD83D\uDE4D\u200D♀️ \uD83D\uDE4D\u200D♂️ \uD83D\uDC87\u200D♀️ \uD83D\uDC87\u200D♂️ \uD83D\uDC86\u200D♀️ \uD83D\uDC86\u200D♂️ \uD83E\uDDD6\u200D♀️ \uD83E\uDDD6\u200D♂️ \uD83D\uDC85 \uD83E\uDD33 \uD83D\uDC83 \uD83D\uDD7A \uD83D\uDC6F\u200D♀️ \uD83D\uDC6F\u200D♂️ \uD83D\uDD74 \uD83D\uDEB6\u200D♀️ \uD83D\uDEB6\u200D♂️ \uD83C\uDFC3\u200D♀️ \uD83C\uDFC3\u200D♂️ \uD83D\uDC6B \uD83D\uDC6D \uD83D\uDC6C \uD83D\uDC91 \uD83D\uDC69\u200D❤️\u200D\uD83D\uDC69 \uD83D\uDC68\u200D❤️\u200D\uD83D\uDC68 \uD83D\uDC8F \uD83D\uDC69\u200D❤️\u200D\uD83D\uDC8B\u200D\uD83D\uDC69 \uD83D\uDC68\u200D❤️\u200D\uD83D\uDC8B\u200D\uD83D\uDC68 \uD83D\uDC6A \uD83D\uDC68\u200D\uD83D\uDC69\u200D\uD83D\uDC67 \uD83D\uDC68\u200D\uD83D\uDC69\u200D\uD83D\uDC67\u200D\uD83D\uDC66 \uD83D\uDC68\u200D\uD83D\uDC69\u200D\uD83D\uDC66\u200D\uD83D\uDC66 \uD83D\uDC68\u200D\uD83D\uDC69\u200D\uD83D\uDC67\u200D\uD83D\uDC67 \uD83D\uDC69\u200D\uD83D\uDC69\u200D\uD83D\uDC66 \uD83D\uDC69\u200D\uD83D\uDC69\u200D\uD83D\uDC67 \uD83D\uDC69\u200D\uD83D\uDC69\u200D\uD83D\uDC67\u200D\uD83D\uDC66 \uD83D\uDC69\u200D\uD83D\uDC69\u200D\uD83D\uDC66\u200D\uD83D\uDC66 \uD83D\uDC69\u200D\uD83D\uDC69\u200D\uD83D\uDC67\u200D\uD83D\uDC67 \uD83D\uDC68\u200D\uD83D\uDC68\u200D\uD83D\uDC66 \uD83D\uDC68\u200D\uD83D\uDC68\u200D\uD83D\uDC67 \uD83D\uDC68\u200D\uD83D\uDC68\u200D\uD83D\uDC67\u200D\uD83D\uDC66 \uD83D\uDC68\u200D\uD83D\uDC68\u200D\uD83D\uDC66\u200D\uD83D\uDC66 \uD83D\uDC68\u200D\uD83D\uDC68\u200D\uD83D\uDC67\u200D\uD83D\uDC67 \uD83D\uDC69\u200D\uD83D\uDC66 \uD83D\uDC69\u200D\uD83D\uDC67 \uD83D\uDC69\u200D\uD83D\uDC67\u200D\uD83D\uDC66 \uD83D\uDC69\u200D\uD83D\uDC66\u200D\uD83D\uDC66 \uD83D\uDC69\u200D\uD83D\uDC67\u200D\uD83D\uDC67 \uD83D\uDC68\u200D\uD83D\uDC66 \uD83D\uDC68\u200D\uD83D\uDC67 \uD83D\uDC68\u200D\uD83D\uDC67\u200D\uD83D\uDC66 \uD83D\uDC68\u200D\uD83D\uDC66\u200D\uD83D\uDC66 \uD83D\uDC68\u200D\uD83D\uDC67\u200D\uD83D\uDC67 \uD83E\uDD32 \uD83D\uDC50 \uD83D\uDE4C \uD83D\uDC4F \uD83E\uDD1D \uD83D\uDC4D \uD83D\uDC4E \uD83D\uDC4A ✊ \uD83E\uDD1B \uD83E\uDD1C \uD83E\uDD1E ✌️ \uD83E\uDD1F \uD83E\uDD18 \uD83D\uDC4C \uD83D\uDC48 \uD83D\uDC49 \uD83D\uDC46 \uD83D\uDC47 ☝️ ✋ \uD83E\uDD1A \uD83D\uDD90 \uD83D\uDD96 \uD83D\uDC4B \uD83E\uDD19 \uD83D\uDCAA \uD83E\uDDB5 \uD83E\uDDB6 \uD83D\uDD95 ✍️ \uD83D\uDE4F \uD83D\uDC8D \uD83D\uDC84 \uD83D\uDC8B \uD83D\uDC44 \uD83D\uDC45 \uD83D\uDC42 \uD83D\uDC43 \uD83D\uDC63 \uD83D\uDC41 \uD83D\uDC40 \uD83E\uDDE0 \uD83E\uDDB4 \uD83E\uDDB7 \uD83D\uDDE3 \uD83D\uDC64 \uD83D\uDC65" #" ") + "Activity and Sports" (string/split "⚽️ \uD83C\uDFC0 \uD83C\uDFC8 ⚾️ \uD83E\uDD4E \uD83C\uDFD0 \uD83C\uDFC9 \uD83C\uDFBE \uD83E\uDD4F \uD83C\uDFB1 \uD83C\uDFD3 \uD83C\uDFF8 \uD83E\uDD45 \uD83C\uDFD2 \uD83C\uDFD1 \uD83E\uDD4D \uD83C\uDFCF ⛳️ \uD83C\uDFF9 \uD83C\uDFA3 \uD83E\uDD4A \uD83E\uDD4B \uD83C\uDFBD ⛸ \uD83E\uDD4C \uD83D\uDEF7 \uD83D\uDEF9 \uD83C\uDFBF ⛷ \uD83C\uDFC2 \uD83C\uDFCB️\u200D♀️ \uD83C\uDFCB\uD83C\uDFFB\u200D♀️ \uD83C\uDFCB\uD83C\uDFFC\u200D♀️ \uD83C\uDFCB\uD83C\uDFFD\u200D♀️ \uD83C\uDFCB\uD83C\uDFFE\u200D♀️ \uD83C\uDFCB\uD83C\uDFFF\u200D♀️ \uD83C\uDFCB️\u200D♂️ \uD83C\uDFCB\uD83C\uDFFB\u200D♂️ \uD83C\uDFCB\uD83C\uDFFC\u200D♂️ \uD83C\uDFCB\uD83C\uDFFD\u200D♂️ \uD83C\uDFCB\uD83C\uDFFE\u200D♂️ \uD83C\uDFCB\uD83C\uDFFF\u200D♂️ \uD83E\uDD3C\u200D♀️ \uD83E\uDD3C\u200D♂️ \uD83E\uDD38\u200D♀️ \uD83E\uDD38\uD83C\uDFFB\u200D♀️ \uD83E\uDD38\uD83C\uDFFC\u200D♀️ \uD83E\uDD38\uD83C\uDFFD\u200D♀️ \uD83E\uDD38\uD83C\uDFFE\u200D♀️ \uD83E\uDD38\uD83C\uDFFF\u200D♀️ \uD83E\uDD38\u200D♂️ \uD83E\uDD38\uD83C\uDFFB\u200D♂️ \uD83E\uDD38\uD83C\uDFFC\u200D♂️ \uD83E\uDD38\uD83C\uDFFD\u200D♂️ \uD83E\uDD38\uD83C\uDFFE\u200D♂️ \uD83E\uDD38\uD83C\uDFFF\u200D♂️ ⛹️\u200D♀️ ⛹\uD83C\uDFFB\u200D♀️ ⛹\uD83C\uDFFC\u200D♀️ ⛹\uD83C\uDFFD\u200D♀️ ⛹\uD83C\uDFFE\u200D♀️ ⛹\uD83C\uDFFF\u200D♀️ ⛹️\u200D♂️ ⛹\uD83C\uDFFB\u200D♂️ ⛹\uD83C\uDFFC\u200D♂️ ⛹\uD83C\uDFFD\u200D♂️ ⛹\uD83C\uDFFE\u200D♂️ ⛹\uD83C\uDFFF\u200D♂️ \uD83E\uDD3A \uD83E\uDD3E\u200D♀️ \uD83E\uDD3E\uD83C\uDFFB\u200D♀️ \uD83E\uDD3E\uD83C\uDFFC\u200D♀️ \uD83E\uDD3E\uD83C\uDFFE\u200D♀️ \uD83E\uDD3E\uD83C\uDFFE\u200D♀️ \uD83E\uDD3E\uD83C\uDFFF\u200D♀️ \uD83E\uDD3E\u200D♂️ \uD83E\uDD3E\uD83C\uDFFB\u200D♂️ \uD83E\uDD3E\uD83C\uDFFC\u200D♂️ \uD83E\uDD3E\uD83C\uDFFD\u200D♂️ \uD83E\uDD3E\uD83C\uDFFE\u200D♂️ \uD83E\uDD3E\uD83C\uDFFF\u200D♂️ \uD83C\uDFCC️\u200D♀️ \uD83C\uDFCC\uD83C\uDFFB\u200D♀️ \uD83C\uDFCC\uD83C\uDFFC\u200D♀️ \uD83C\uDFCC\uD83C\uDFFD\u200D♀️ \uD83C\uDFCC\uD83C\uDFFE\u200D♀️ \uD83C\uDFCC\uD83C\uDFFF\u200D♀️ \uD83C\uDFCC️\u200D♂️ \uD83C\uDFCC\uD83C\uDFFB\u200D♂️ \uD83C\uDFCC\uD83C\uDFFC\u200D♂️ \uD83C\uDFCC\uD83C\uDFFD\u200D♂️ \uD83C\uDFCC\uD83C\uDFFE\u200D♂️ \uD83C\uDFCC\uD83C\uDFFF\u200D♂️ \uD83C\uDFC7 \uD83C\uDFC7\uD83C\uDFFB \uD83C\uDFC7\uD83C\uDFFC \uD83C\uDFC7\uD83C\uDFFD \uD83C\uDFC7\uD83C\uDFFE \uD83C\uDFC7\uD83C\uDFFF \uD83E\uDDD8\u200D♀️ \uD83E\uDDD8\uD83C\uDFFB\u200D♀️ \uD83E\uDDD8\uD83C\uDFFC\u200D♀️ \uD83E\uDDD8\uD83C\uDFFD\u200D♀️ \uD83E\uDDD8\uD83C\uDFFE\u200D♀️ \uD83E\uDDD8\uD83C\uDFFF\u200D♀️ \uD83E\uDDD8\u200D♂️ \uD83E\uDDD8\uD83C\uDFFB\u200D♂️ \uD83E\uDDD8\uD83C\uDFFC\u200D♂️ \uD83E\uDDD8\uD83C\uDFFD\u200D♂️ \uD83E\uDDD8\uD83C\uDFFE\u200D♂️ \uD83E\uDDD8\uD83C\uDFFF\u200D♂️ \uD83C\uDFC4\u200D♀️ \uD83C\uDFC4\uD83C\uDFFB\u200D♀️ \uD83C\uDFC4\uD83C\uDFFC\u200D♀️ \uD83C\uDFC4\uD83C\uDFFD\u200D♀️ \uD83C\uDFC4\uD83C\uDFFE\u200D♀️ \uD83C\uDFC4\uD83C\uDFFF\u200D♀️ \uD83C\uDFC4\u200D♂️ \uD83C\uDFC4\uD83C\uDFFB\u200D♂️ \uD83C\uDFC4\uD83C\uDFFC\u200D♂️ \uD83C\uDFC4\uD83C\uDFFD\u200D♂️ \uD83C\uDFC4\uD83C\uDFFE\u200D♂️ \uD83C\uDFC4\uD83C\uDFFF\u200D♂️ \uD83C\uDFCA\u200D♀️ \uD83C\uDFCA\uD83C\uDFFB\u200D♀️ \uD83C\uDFCA\uD83C\uDFFC\u200D♀️ \uD83C\uDFCA\uD83C\uDFFD\u200D♀️ \uD83C\uDFCA\uD83C\uDFFE\u200D♀️ \uD83C\uDFCA\uD83C\uDFFF\u200D♀️ \uD83C\uDFCA\u200D♂️ \uD83C\uDFCA\uD83C\uDFFB\u200D♂️ \uD83C\uDFCA\uD83C\uDFFC\u200D♂️ \uD83C\uDFCA\uD83C\uDFFD\u200D♂️ \uD83C\uDFCA\uD83C\uDFFE\u200D♂️ \uD83C\uDFCA\uD83C\uDFFF\u200D♂️ \uD83E\uDD3D\u200D♀️ \uD83E\uDD3D\uD83C\uDFFB\u200D♀️ \uD83E\uDD3D\uD83C\uDFFC\u200D♀️ \uD83E\uDD3D\uD83C\uDFFD\u200D♀️ \uD83E\uDD3D\uD83C\uDFFE\u200D♀️ \uD83E\uDD3D\uD83C\uDFFF\u200D♀️ \uD83E\uDD3D\u200D♂️ \uD83E\uDD3D\uD83C\uDFFB\u200D♂️ \uD83E\uDD3D\uD83C\uDFFC\u200D♂️ \uD83E\uDD3D\uD83C\uDFFD\u200D♂️ \uD83E\uDD3D\uD83C\uDFFE\u200D♂️ \uD83E\uDD3D\uD83C\uDFFF\u200D♂️ \uD83D\uDEA3\u200D♀️ \uD83D\uDEA3\uD83C\uDFFB\u200D♀️ \uD83D\uDEA3\uD83C\uDFFC\u200D♀️ \uD83D\uDEA3\uD83C\uDFFD\u200D♀️ \uD83D\uDEA3\uD83C\uDFFE\u200D♀️ \uD83D\uDEA3\uD83C\uDFFF\u200D♀️ \uD83D\uDEA3\u200D♂️ \uD83D\uDEA3\uD83C\uDFFB\u200D♂️ \uD83D\uDEA3\uD83C\uDFFC\u200D♂️ \uD83D\uDEA3\uD83C\uDFFD\u200D♂️ \uD83D\uDEA3\uD83C\uDFFE\u200D♂️ \uD83D\uDEA3\uD83C\uDFFF\u200D♂️ \uD83E\uDDD7\u200D♀️ \uD83E\uDDD7\uD83C\uDFFB\u200D♀️ \uD83E\uDDD7\uD83C\uDFFC\u200D♀️ \uD83E\uDDD7\uD83C\uDFFD\u200D♀️ \uD83E\uDDD7\uD83C\uDFFE\u200D♀️ \uD83E\uDDD7\uD83C\uDFFF\u200D♀️ \uD83E\uDDD7\u200D♂️ \uD83E\uDDD7\uD83C\uDFFB\u200D♂️ \uD83E\uDDD7\uD83C\uDFFC\u200D♂️ \uD83E\uDDD7\uD83C\uDFFD\u200D♂️ \uD83E\uDDD7\uD83C\uDFFE\u200D♂️ \uD83E\uDDD7\uD83C\uDFFF\u200D♂️ \uD83D\uDEB5\u200D♀️ \uD83D\uDEB5\uD83C\uDFFB\u200D♀️ \uD83D\uDEB5\uD83C\uDFFC\u200D♀️ \uD83D\uDEB5\uD83C\uDFFD\u200D♀️ \uD83D\uDEB5\uD83C\uDFFE\u200D♀️ \uD83D\uDEB5\uD83C\uDFFF\u200D♀️ \uD83D\uDEB5\u200D♂️ \uD83D\uDEB5\uD83C\uDFFB\u200D♂️ \uD83D\uDEB5\uD83C\uDFFC\u200D♂️ \uD83D\uDEB5\uD83C\uDFFD\u200D♂️ \uD83D\uDEB5\uD83C\uDFFE\u200D♂️ \uD83D\uDEB5\uD83C\uDFFF\u200D♂️ \uD83D\uDEB4\u200D♀️ \uD83D\uDEB4\uD83C\uDFFB\u200D♀️ \uD83D\uDEB4\uD83C\uDFFC\u200D♀️ \uD83D\uDEB4\uD83C\uDFFD\u200D♀️ \uD83D\uDEB4\uD83C\uDFFE\u200D♀️ \uD83D\uDEB4\uD83C\uDFFF\u200D♀️ \uD83D\uDEB4\u200D♂️ \uD83D\uDEB4\uD83C\uDFFB\u200D♂️ \uD83D\uDEB4\uD83C\uDFFC\u200D♂️ \uD83D\uDEB4\uD83C\uDFFD\u200D♂️ \uD83D\uDEB4\uD83C\uDFFE\u200D♂️ \uD83D\uDEB4\uD83C\uDFFF\u200D♂️ \uD83C\uDFC6 \uD83E\uDD47 \uD83E\uDD48 \uD83E\uDD49 \uD83C\uDFC5 \uD83C\uDF96 \uD83C\uDFF5 \uD83C\uDF97 \uD83C\uDFAB \uD83C\uDF9F \uD83C\uDFAA \uD83E\uDD39\u200D♀️ \uD83E\uDD39\uD83C\uDFFB\u200D♀️ \uD83E\uDD39\uD83C\uDFFC\u200D♀️ \uD83E\uDD39\uD83C\uDFFD\u200D♀️ \uD83E\uDD39\uD83C\uDFFE\u200D♀️ \uD83E\uDD39\uD83C\uDFFF\u200D♀️ \uD83E\uDD39\u200D♂️ \uD83E\uDD39\uD83C\uDFFB\u200D♂️ \uD83E\uDD39\uD83C\uDFFC\u200D♂️ \uD83E\uDD39\uD83C\uDFFD\u200D♂️ \uD83E\uDD39\uD83C\uDFFE\u200D♂️ \uD83E\uDD39\uD83C\uDFFF\u200D♂️ \uD83C\uDFAD \uD83C\uDFA8 \uD83C\uDFAC \uD83C\uDFA4 \uD83C\uDFA7 \uD83C\uDFBC \uD83C\uDFB9 \uD83E\uDD41 \uD83C\uDFB7 \uD83C\uDFBA \uD83C\uDFB8 \uD83C\uDFBB \uD83C\uDFB2 \uD83E\uDDE9 ♟ \uD83C\uDFAF \uD83C\uDFB3 \uD83C\uDFAE \uD83C\uDFB0\n\n" #" ")) diff --git a/src/status_im/ui/screens/desktop/main/chat/events.cljs b/src/status_im/ui/screens/desktop/main/chat/events.cljs index 7d8837d76a..0512d65205 100644 --- a/src/status_im/ui/screens/desktop/main/chat/events.cljs +++ b/src/status_im/ui/screens/desktop/main/chat/events.cljs @@ -13,3 +13,13 @@ :show-profile-desktop (fn [cofx [_ identity]] (show-profile-desktop identity cofx))) + +(handlers/register-handler-fx + :desktop/insert-emoji + (fn [{{:keys [desktop current-chat-id chats] :as db} :db} [_ emoji]] + (let [inp-txt (get-in chats [current-chat-id :input-text]) + input (:input-ref desktop) + sel (:input-selection desktop) + new-text (if sel (str (subs inp-txt 0 sel) emoji (subs inp-txt sel)) (str inp-txt emoji))] + (when input (.setNativeProps input (clj->js {:text new-text}))) + {:db (assoc-in db [:chats current-chat-id :input-text] new-text)}))) \ No newline at end of file diff --git a/src/status_im/ui/screens/desktop/main/chat/views.cljs b/src/status_im/ui/screens/desktop/main/chat/views.cljs index bd9b13f5e9..548250fcf3 100644 --- a/src/status_im/ui/screens/desktop/main/chat/views.cljs +++ b/src/status_im/ui/screens/desktop/main/chat/views.cljs @@ -23,28 +23,30 @@ [status-im.utils.datetime :as time] [status-im.utils.gfycat.core :as gfycat] [status-im.utils.identicon :as identicon] - [status-im.utils.utils :as utils]) + [status-im.utils.utils :as utils] + [status-im.ui.screens.desktop.main.chat.emoji :as emoji] + [status-im.ui.components.icons.vector-icons :as icons]) (:require-macros [status-im.utils.views :as views])) (defn toolbar-chat-view [{:keys [chat-id chat-name contact color public-key public? group-chat] - :as current-chat}] + :as current-chat}] (let [{:keys [pending? public-key photo-path]} contact] [react/view {:style styles/toolbar-chat-view} [react/view {:style {:flex-direction :row - :flex 1}} + :flex 1}} (if public? [react/view {:style (styles/topic-image color)} [react/text {:style styles/topic-text} (string/capitalize (second chat-name))]] - [react/image {:style styles/chat-icon + [react/image {:style styles/chat-icon :source {:uri photo-path}}]) [react/view {:style (styles/chat-title-and-type pending?)} [react/text {:style styles/chat-title :font :medium} chat-name] (cond pending? - [react/text {:style styles/add-contact-text + [react/text {:style styles/add-contact-text :on-press #(re-frame/dispatch [:contact.ui/add-to-contact-pressed public-key])} (i18n/label :t/add-to-contacts)] public? @@ -59,7 +61,7 @@ :height 24}}]]])) (views/defview message-author-name [{:keys [from]}] - (views/letsubs [incoming-name [:contacts/contact-name-by-identity from]] + (views/letsubs [incoming-name [:contacts/contact-name-by-identity from]] [react/view {:flex-direction :row} (when incoming-name [react/text {:style styles/author} incoming-name]) @@ -68,7 +70,7 @@ (views/defview member-photo [from] (views/letsubs [current-public-key [:account/public-key] - photo-path [:chats/photo-path from]] + photo-path [:chats/photo-path from]] [react/view {:style {:width 40 :margin-horizontal 16}} [react/view {:style {:position :absolute}} [react/touchable-highlight {:on-press #(when-not (= current-public-key from) @@ -101,14 +103,14 @@ [react/touchable-highlight {:on-press (fn [arg] (when (= "right" (.-button (.-nativeEvent arg))) (show-desktop-menu - [{:text (i18n/label :t/sharing-copy-to-clipboard) + [{:text (i18n/label :t/sharing-copy-to-clipboard) :on-select #(do (utils/show-popup "" "Message copied to clipboard") (react/copy-to-clipboard text))} - {:text (i18n/label :t/message-reply) + {:text (i18n/label :t/message-reply) :on-select #(when (message-sent? user-statuses current-public-key) (re-frame/dispatch [:chat.ui/reply-to-message message-id old-message-id]))}])))} (let [collapsible? (and (:should-collapse? content) group-chat) - char-limit (if (and collapsible? (not expanded?)) - constants/chars-collapse-threshold constants/desktop-msg-chars-hard-limit) + char-limit (if (and collapsible? (not expanded?)) + constants/chars-collapse-threshold constants/desktop-msg-chars-hard-limit) message-text (core-utils/truncate-str (:text content) char-limit)] [react/view {:style styles/message-container} (when (:response-to content) @@ -170,7 +172,7 @@ (defmethod message constants/content-type-sticker [_ _ {:keys [content] :as message}] [message-wrapper message - [react/image {:style {:margin 10 :width 140 :height 140} + [react/image {:style {:margin 10 :width 140 :height 140} :source {:uri (:uri content)}}]]) (views/defview message-content-status [text message] @@ -214,37 +216,37 @@ (reset! messages-to-load next-count))) (views/defview messages-view [{:keys [chat-id group-chat]}] - (views/letsubs [messages [:chats/current-chat-messages-stream] + (views/letsubs [messages [:chats/current-chat-messages-stream] current-public-key [:account/public-key] - messages-to-load (reagent/atom load-step) - chat-id* (reagent/atom nil)] + messages-to-load (reagent/atom load-step) + chat-id* (reagent/atom nil)] {:component-did-update #(if (:messages-initialized? (second (.-argv (.-props %1)))) (load-more (count messages) messages-to-load) (re-frame/dispatch [:chat.ui/load-more-messages])) :component-did-mount #(if (:messages-initialized? (second (.-argv (.-props %1)))) (load-more (count messages) messages-to-load) (re-frame/dispatch [:chat.ui/load-more-messages]))} - (let [scroll-ref (atom nil) - scroll-timer (atom nil) + (let [scroll-ref (atom nil) + scroll-timer (atom nil) scroll-height (atom nil) - _ (when (or (not @chat-id*) (not= @chat-id* chat-id)) - (do - (reset! messages-to-load load-step) - (reset! chat-id* chat-id)))] + _ (when (or (not @chat-id*) (not= @chat-id* chat-id)) + (do + (reset! messages-to-load load-step) + (reset! chat-id* chat-id)))] [react/view {:style styles/messages-view} - [react/scroll-view {:scrollEventThrottle 16 - :headerHeight styles/messages-list-vertical-padding - :footerWidth styles/messages-list-vertical-padding + [react/scroll-view {:scrollEventThrottle 16 + :headerHeight styles/messages-list-vertical-padding + :footerWidth styles/messages-list-vertical-padding :enableArrayScrollingOptimization true - :inverted true - :on-scroll (fn [e] - (let [ne (.-nativeEvent e) - y (.-y (.-contentOffset ne))] - (when (<= y 0) - (when @scroll-timer (js/clearTimeout @scroll-timer)) - (reset! scroll-timer (js/setTimeout #(re-frame/dispatch [:chat.ui/load-more-messages]) 300))) - (reset! scroll-height (+ y (.-height (.-layoutMeasurement ne)))))) - :ref #(reset! scroll-ref %)} + :inverted true + :on-scroll (fn [e] + (let [ne (.-nativeEvent e) + y (.-y (.-contentOffset ne))] + (when (<= y 0) + (when @scroll-timer (js/clearTimeout @scroll-timer)) + (reset! scroll-timer (js/setTimeout #(re-frame/dispatch [:chat.ui/load-more-messages]) 300))) + (reset! scroll-height (+ y (.-height (.-layoutMeasurement ne)))))) + :ref #(reset! scroll-ref %)} [react/view (doall (for [{:keys [from content] :as message-obj} (take @messages-to-load messages)] @@ -256,7 +258,7 @@ (views/defview send-button [inp-ref disconnected?] (views/letsubs [{:keys [input-text]} [:chats/current-chat]] - (let [empty? (= "" input-text) + (let [empty? (= "" input-text) inactive? (or empty? disconnected?)] [react/touchable-highlight {:style styles/send-button :disabled inactive? @@ -297,8 +299,9 @@ [vector-icons/icon :main-icons/close {:style styles/reply-close-icon}]]]]))) (views/defview chat-text-input [chat-id input-text] - (views/letsubs [inp-ref (atom nil) - disconnected? [:disconnected?]] + (views/letsubs [inp-ref (atom nil) + disconnected? [:disconnected?] + show-emoji? [:get-in [:desktop :show-emoji?]]] {:component-will-update (fn [e [_ new-chat-id new-input-text]] (let [[_ old-chat-id] (.. e -props -argv)] @@ -315,9 +318,11 @@ :blur-on-submit true :style (styles/chat-text-input container-height) :font :default - :ref #(reset! inp-ref %) + :ref #(do (reset! inp-ref %) + (re-frame/dispatch [:set-in [:desktop :input-ref] %])) :default-value input-text :on-content-size-change #(set-container-height-fn (.-height (.-contentSize (.-nativeEvent %)))) + :on-selection-change #(re-frame/dispatch [:set-in [:desktop :input-selection] (.-start (.-selection (.-nativeEvent %)))]) :submit-shortcut {:key "Enter"} :on-submit-editing #(when-not disconnected? (.clear @inp-ref) @@ -327,13 +332,35 @@ (let [native-event (.-nativeEvent e) text (.-text native-event)] (re-frame/dispatch [:chat.ui/set-chat-input-text text])))}] + [react/touchable-highlight {:on-press #(re-frame/dispatch [:set-in [:desktop :show-emoji?] (not show-emoji?)])} + [icons/icon :main-icons/user-profile {:color colors/gray :height 40 :width 40 + :container-style {:margin-right 14}}]] [send-button inp-ref disconnected?]]))) +(defn emoji-view [] + (let [current-emoji (reagent/atom "Smileys")] + (fn [] + [react/view {:margin 10} + [react/view + [react/view {:style {:flex-direction :row :flex-wrap :wrap}} + (for [emoj-key (keys emoji/emoji)] + [react/touchable-highlight {:on-press #(reset! current-emoji emoj-key)} + [react/text {:style {:color (if (= @current-emoji emoj-key) colors/black colors/gray) + :margin-right 20 :margin-bottom 5} + :number-of-lines 1} + emoj-key]])] + [react/view {:style {:flex-direction :row :flex-wrap :wrap :margin-top 5 :margin-bottom 10}} + (for [[inx emoji-code] (map-indexed vector (get emoji/emoji @current-emoji))] + ^{:key (str "emoji" inx emoji-code)} + [react/touchable-highlight {:on-press #(re-frame/dispatch [:desktop/insert-emoji emoji-code])} + [react/view {:padding 2} + [react/text {:style {:font-size 20}} emoji-code]]])]]]))) + (views/defview chat-view [] (views/letsubs [{:keys [input-text chat-id pending-invite-inviter-name] :as current-chat} [:chats/current-chat] + show-emoji? [:get-in [:desktop :show-emoji?]] current-public-key [:account/public-key]] - [react/view {:style styles/chat-view} [toolbar-chat-view current-chat] [react/view {:style styles/separator}] @@ -342,11 +369,13 @@ [messages-view current-chat]) [react/view {:style styles/separator}] [reply-message-view] + (when show-emoji? + [emoji-view show-emoji?]) [chat-text-input chat-id input-text]])) (views/defview chat-profile [] - (views/letsubs [identity [:contacts/current-contact-identity] - maybe-contact [:contacts/current-contact]] + (views/letsubs [identity [:contacts/current-contact-identity] + maybe-contact [:contacts/current-contact]] (let [contact (or maybe-contact (contact.db/public-key->new-contact identity)) {:keys [pending? public-key]} contact] [react/view {:style styles/chat-profile-body} @@ -356,12 +385,12 @@ (if (or (nil? pending?) pending?) [react/touchable-highlight {:on-press #(re-frame/dispatch [:contact.ui/add-to-contact-pressed public-key])} [react/view {:style styles/chat-profile-row} - [react/view {:style styles/chat-profile-icon-container + [react/view {:style styles/chat-profile-icon-container :accessibility-label :add-contact-link} [vector-icons/icon :main-icons/add {:style (styles/chat-profile-icon colors/blue)}]] [react/text {:style (styles/contact-card-text colors/blue)} (i18n/label :t/add-to-contacts)]]] [react/view {:style styles/chat-profile-row} - [react/view {:style styles/chat-profile-icon-container + [react/view {:style styles/chat-profile-icon-container :accessibility-label :add-contact-link} [vector-icons/icon :main-icons/add {:style (styles/chat-profile-icon colors/gray)}]] [react/text {:style (styles/contact-card-text colors/gray)} (i18n/label :t/in-contacts)]]) @@ -369,7 +398,7 @@ {:on-press #(re-frame/dispatch [:contact.ui/send-message-pressed {:public-key public-key}])} [react/view {:style styles/chat-profile-row} - [react/view {:style styles/chat-profile-icon-container + [react/view {:style styles/chat-profile-icon-container :accessibility-label :send-message-link} [vector-icons/icon :main-icons/message {:style (styles/chat-profile-icon colors/blue)}]] [react/text {:style (styles/contact-card-text colors/blue)}