@adminide-stack/yantra-mobile 12.0.69-alpha.20 → 12.0.69-alpha.21

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1 @@
1
+ {"version":3,"file":"emojiKeywords.js","sources":["../../../src/features/messaging/emojiKeywords.ts"],"sourcesContent":["/**\n * Emoji search index for the Tapback picker: one emoji per line, then its words.\n * GENERATED by tools/gen-emoji-keywords.mjs from emojilib - do not edit by hand.\n */\n// prettier-ignore\nexport const EMOJI_KEYWORDS_SOURCE = `\nšŸ˜€ grinning face smile happy joy grin\n😃 smiley face happy joy haha smile funny\nšŸ˜„ smile face happy joy funny haha laugh like\n😁 grin face happy smile joy kawaii\nšŸ˜† laughing happy joy lol satisfied haha face glad xd laugh\nšŸ˜… sweat smile face hot happy laugh relief\nšŸ˜‚ joy face cry tears weep happy happytears haha\n🤣 rofl face rolling floor laughing lol haha\nā˜ŗļø relaxed face blush massage happiness\n😊 blush face smile happy flushed crush embarrassed shy joy\nšŸ˜‡ innocent face angel heaven halo\nšŸ™‚ slightly smiling face smile\nšŸ™ƒ upside down face flipped silly smile\nšŸ˜‰ wink face happy mischievous secret smile eye\n😌 relieved face relaxed phew massage happiness\nšŸ˜ heart eyes face love like affection valentines infatuation crush\n🄰 smiling face with three hearts love like affection valentines infatuation crush adore\n😘 kissing heart face love like affection valentines infatuation kiss\nšŸ˜— kissing love like face 3 valentines infatuation kiss\nšŸ˜™ kissing smiling eyes face affection valentines infatuation kiss\n😚 kissing closed eyes face love like affection valentines infatuation kiss\nšŸ˜‹ yum happy joy tongue smile face silly yummy nom delicious savouring\nšŸ˜› stuck out tongue face prank childish playful mischievous smile\nšŸ˜ stuck out tongue closed eyes face prank playful mischievous smile\n😜 stuck out tongue winking eye face prank childish playful mischievous smile wink\n🤪 zany face goofy crazy\n🤨 raised eyebrow face distrust scepticism disapproval disbelief surprise\n🧐 monocle face stuffy wealthy\nšŸ¤“ nerd face nerdy geek dork\nšŸ˜Ž sunglasses face cool smile summer beach sunglass\n🤩 star struck face smile starry eyes grinning\n🄳 partying face celebration woohoo\nšŸ˜ smirk face smile mean prank smug sarcasm\nšŸ˜’ unamused indifference bored serious sarcasm unimpressed skeptical dubious\nšŸ˜ž disappointed face sad upset depressed\nšŸ˜” pensive face sad depressed upset\n😟 worried face concern nervous\nšŸ˜• confused face indifference huh weird hmmm\nšŸ™ slightly frowning face disappointed sad upset\n☹ frowning face sad upset frown\n😣 persevere face sick no upset oops\nšŸ˜– confounded face confused sick unwell oops\n😫 tired face sick whine upset frustrated\n😩 weary face tired sleepy sad frustrated upset\n🄺 pleading face begging mercy\n😢 cry face tears sad depressed upset\n😭 sob face cry tears sad upset depressed\n😤 triumph face gas phew proud pride\n😠 angry mad face annoyed frustrated\n😔 rage angry mad hate despise\n🤬 symbols over mouth face swearing cursing cussing profanity expletive\n🤯 exploding head face shocked mind blown\n😳 flushed face blush shy flattered\n🄵 hot face feverish heat red sweating\n🄶 cold face blue freezing frozen frostbite icicles\n😱 scream face munch scared omg\n😨 fearful face scared terrified nervous oops huh\n😰 cold sweat face nervous\n😄 disappointed relieved face phew sweat nervous\nšŸ˜“ sweat face hot sad tired exercise\nšŸ¤— hugs face smile hug\nšŸ¤” thinking face hmmm think consider\n🤭 hand over mouth face whoops shock surprise\n🤫 shushing face quiet shhh\n🤄 lying face lie pinocchio\n😶 no mouth face hellokitty\n😐 neutral face indifference meh\nšŸ˜‘ expressionless face indifferent meh deadpan\n😬 grimacing face grimace teeth\nšŸ™„ roll eyes face eyeroll frustrated\n😯 hushed face woo shh\n😦 frowning face aw what\n😧 anguished face stunned nervous\n😮 open mouth face surprise impressed wow whoa\n😲 astonished face xox surprised poisoned\n😓 sleeping face tired sleepy night zzz\n🤤 drooling face\n😪 sleepy face tired rest nap\n😵 dizzy face spent unconscious xox\n🤐 zipper mouth face sealed secret\n🄓 woozy face dizzy intoxicated tipsy wavy\n🤢 nauseated face vomit gross green sick ill\n🤮 vomiting face sick\n🤧 sneezing face gesundheit sneeze sick allergy\n😷 mask face sick ill disease\nšŸ¤’ face with thermometer sick temperature cold fever\nšŸ¤• face with head bandage injured clumsy hurt\nšŸ¤‘ money mouth face rich dollar\n🤠 cowboy hat face cowgirl\n😈 smiling imp devil horns\nšŸ‘æ imp devil angry horns\nšŸ‘¹ japanese ogre monster red mask halloween scary creepy devil demon\nšŸ‘ŗ japanese goblin red evil mask monster scary creepy\n🤔 clown face\nšŸ’© poop hankey shitface fail turd shit\nšŸ‘» ghost halloween spooky scary\nšŸ’€ skull dead skeleton creepy death\n☠ skull and crossbones poison danger deadly scary death pirate evil\nšŸ‘½ alien ufo paul weird\nšŸ‘¾ space invader game arcade play\nšŸ¤– robot computer machine bot\nšŸŽƒ jack o lantern halloween light pumpkin creepy fall\n😺 smiley cat animal cats happy smile\n😸 smile cat animal cats\n😹 joy cat animal cats haha happy tears\n😻 heart eyes cat animal love like affection cats valentines\n😼 smirk cat animal cats\n😽 kissing cat animal cats kiss\nšŸ™€ scream cat animal cats munch scared\n😿 crying cat face animal tears weep sad cats upset cry\n😾 pouting cat animal cats\n🤲 palms up hands gesture cupped prayer\nšŸ‘ open hands fingers butterfly\nšŸ™Œ raised hands gesture hooray yea celebration\nšŸ‘ clap hands praise applause congrats yay\nšŸ¤ handshake agreement shake\nšŸ‘ thumbsup yes awesome good agree accept cool hand like\nšŸ‘Ž 1 thumbsdown no dislike hand\nšŸ‘Š facepunch angry violence fist hit attack hand\n✊ fist fingers hand grasp\nšŸ¤› fist left hand fistbump\n🤜 fist right hand fistbump\nšŸ¤ž crossed fingers good lucky\n✌ v fingers ohyeah hand peace victory two\n🤟 love you hand fingers gesture\n🤘 metal hand fingers\nšŸ‘Œ ok hand fingers limbs perfect okay\nšŸ‘ˆ point left direction fingers hand\nšŸ‘‰ point right fingers hand direction\nā˜ point up hand fingers direction\nšŸ‘‡ point down fingers hand direction\nšŸ‘† point up 2 fingers hand direction\nāœ‹ raised hand fingers stop highfive palm ban\n🤚 raised back of hand fingers backhand\nšŸ– raised hand with fingers splayed palm\nšŸ–– vulcan salute hand fingers spock\nšŸ‘‹ wave hands gesture goodbye solong farewell hello hi palm\nšŸ¤™ call me hand hands gesture\nšŸ’Ŗ muscle arm flex hand summer strong biceps\nšŸ–• fu hand fingers rude middle flipping\nāœ writing hand stationery write compose\nšŸ™ pray please hope wish namaste highfive\n🦶 foot kick stomp\n🦵 leg kick limb\nšŸ’ ring wedding propose marriage valentines diamond fashion jewelry gem engagement\nšŸ’„ lipstick female girl fashion woman\nšŸ’‹ kiss face lips love like affection valentines\nšŸ‘„ lips mouth kiss\n🦷 tooth teeth dentist\nšŸ‘… tongue mouth playful\nšŸ‘‚ ear face hear sound listen\nšŸ‘ƒ nose smell sniff\nšŸ‘£ footprints feet tracking walking beach\nšŸ‘ eye face look see watch stare\nšŸ‘€ eyes look watch stalk peek see\n🧠 brain smart intelligent\nšŸ—£ speaking head user person human sing say talk\nšŸ‘¤ bust in silhouette user person human\nšŸ‘„ busts in silhouette user person human group team\nšŸ‘¶ baby child boy girl toddler\nšŸ‘§ girl female woman teenager\nšŸ§’ child young\nšŸ‘¦ boy man male guy teenager\nšŸ‘© woman female girls lady\nšŸ§‘ adult person\nšŸ‘Ø man mustache father dad guy classy sir moustache\nšŸ‘±ā€ā™€ļø blonde woman female girl person\nšŸ‘± blonde man male boy guy person\nšŸ§” bearded person bewhiskered\nšŸ‘µ older woman human female women lady old elder senior\nšŸ§“ older adult human elder senior\nšŸ‘“ older man human male men old elder senior\nšŸ‘² man with gua pi mao male boy chinese\nšŸ§• woman with headscarf female hijab mantilla tichel\nšŸ‘³ā€ā™€ļø woman with turban female indian hinduism arabs\nšŸ‘³ man with turban male indian hinduism arabs\nšŸ‘®ā€ā™€ļø policewoman woman police law legal enforcement arrest 911 female\nšŸ‘® policeman man police law legal enforcement arrest 911\nšŸ‘·ā€ā™€ļø construction worker woman female human wip build labor\nšŸ‘· construction worker man male human wip guy build labor\nšŸ’‚ā€ā™€ļø guardswoman uk gb british female royal woman\nšŸ’‚ guardsman uk gb british male guy royal\nšŸ•µļøā€ā™€ļø female detective human spy woman\nšŸ•µ male detective human spy\nšŸ‘©ā€āš•ļø woman health worker doctor nurse therapist healthcare human\nšŸ‘Øā€āš•ļø man health worker doctor nurse therapist healthcare human\nšŸ‘©ā€šŸŒ¾ woman farmer rancher gardener human\nšŸ‘Øā€šŸŒ¾ man farmer rancher gardener human\nšŸ‘©ā€šŸ³ woman cook chef human\nšŸ‘Øā€šŸ³ man cook chef human\nšŸ‘©ā€šŸŽ“ woman student graduate human\nšŸ‘Øā€šŸŽ“ man student graduate human\nšŸ‘©ā€šŸŽ¤ woman singer rockstar entertainer human\nšŸ‘Øā€šŸŽ¤ man singer rockstar entertainer human\nšŸ‘©ā€šŸ« woman teacher instructor professor human\nšŸ‘Øā€šŸ« man teacher instructor professor human\nšŸ‘©ā€šŸ­ woman factory worker assembly industrial human\nšŸ‘Øā€šŸ­ man factory worker assembly industrial human\nšŸ‘©ā€šŸ’» woman technologist coder developer engineer programmer software human laptop computer\nšŸ‘Øā€šŸ’» man technologist coder developer engineer programmer software human laptop computer\nšŸ‘©ā€šŸ’¼ woman office worker business manager human\nšŸ‘Øā€šŸ’¼ man office worker business manager human\nšŸ‘©ā€šŸ”§ woman mechanic plumber human wrench\nšŸ‘Øā€šŸ”§ man mechanic plumber human wrench\nšŸ‘©ā€šŸ”¬ woman scientist biologist chemist engineer physicist human\nšŸ‘Øā€šŸ”¬ man scientist biologist chemist engineer physicist human\nšŸ‘©ā€šŸŽØ woman artist painter human\nšŸ‘Øā€šŸŽØ man artist painter human\nšŸ‘©ā€šŸš’ woman firefighter fireman human\nšŸ‘Øā€šŸš’ man firefighter fireman human\nšŸ‘©ā€āœˆļø woman pilot aviator plane human\nšŸ‘Øā€āœˆļø man pilot aviator plane human\nšŸ‘©ā€šŸš€ woman astronaut space rocket human\nšŸ‘Øā€šŸš€ man astronaut space rocket human\nšŸ‘©ā€āš–ļø woman judge justice court human\nšŸ‘Øā€āš–ļø man judge justice court human\nšŸ‘° bride with veil couple marriage wedding woman\n🤵 man in tuxedo couple marriage wedding groom\nšŸ‘ø princess girl woman female blond crown royal queen\n🤓 prince boy man male crown royal king\nšŸ¦øā€ā™€ļø woman superhero female good heroine superpowers\nšŸ¦øā€ā™‚ļø man superhero male good hero superpowers\nšŸ¦¹ā€ā™€ļø woman supervillain female evil bad criminal heroine superpowers\nšŸ¦¹ā€ā™‚ļø man supervillain male evil bad criminal hero superpowers\n🤶 mrs claus woman female xmas\nšŸŽ… santa festival man male xmas\nšŸ§™ā€ā™€ļø sorceress woman female mage witch\nšŸ§™ā€ā™‚ļø wizard man male mage sorcerer\nšŸ§ā€ā™€ļø woman elf female\nšŸ§ā€ā™‚ļø man elf male\nšŸ§›ā€ā™€ļø woman vampire female\nšŸ§›ā€ā™‚ļø man vampire male dracula\nšŸ§Ÿā€ā™€ļø woman zombie female undead\nšŸ§Ÿā€ā™‚ļø man zombie male dracula undead\nšŸ§žā€ā™€ļø woman genie female\nšŸ§žā€ā™‚ļø man genie male\nšŸ§œā€ā™€ļø mermaid woman female merwoman ariel\nšŸ§œā€ā™‚ļø merman man male triton\nšŸ§šā€ā™€ļø woman fairy female\nšŸ§šā€ā™‚ļø man fairy male\nšŸ‘¼ angel heaven wings halo\n🤰 pregnant woman baby\n🤱 breastfeeding nursing baby\nšŸ™‡ā€ā™€ļø bowing woman female girl\nšŸ™‡ bowing man male boy\nšŸ’ tipping hand woman female girl human information\nšŸ’ā€ā™‚ļø tipping hand man male boy human information\nšŸ™… no good woman female girl nope\nšŸ™…ā€ā™‚ļø no good man male boy nope\nšŸ™† ok woman women girl female pink human\nšŸ™†ā€ā™‚ļø ok man men boy male blue human\nšŸ™‹ raising hand woman female girl\nšŸ™‹ā€ā™‚ļø raising hand man male boy\nšŸ¤¦ā€ā™€ļø woman facepalming female girl disbelief\nšŸ¤¦ā€ā™‚ļø man facepalming male boy disbelief\n🤷 woman shrugging female girl confused indifferent doubt\nšŸ¤·ā€ā™‚ļø man shrugging male boy confused indifferent doubt\nšŸ™Ž pouting woman female girl\nšŸ™Žā€ā™‚ļø pouting man male boy\nšŸ™ frowning woman female girl sad depressed discouraged unhappy\nšŸ™ā€ā™‚ļø frowning man male boy sad depressed discouraged unhappy\nšŸ’‡ haircut woman female girl\nšŸ’‡ā€ā™‚ļø haircut man male boy\nšŸ’† massage woman female girl head\nšŸ’†ā€ā™‚ļø massage man male boy head\nšŸ§–ā€ā™€ļø woman in steamy room female spa steamroom sauna\nšŸ§–ā€ā™‚ļø man in steamy room male spa steamroom sauna\nšŸ’… nail care beauty manicure finger fashion\n🤳 selfie camera phone\nšŸ’ƒ dancer female girl woman fun\nšŸ•ŗ man dancing male boy fun dancer\nšŸ‘Æ dancing women female bunny girls\nšŸ‘Æā€ā™‚ļø dancing men male bunny boys\nšŸ•“ business suit levitating levitate hover jump\nšŸš¶ā€ā™€ļø walking woman human feet steps female\n🚶 walking man human feet steps\nšŸƒā€ā™€ļø running woman walking exercise race female\nšŸƒ running man walking exercise race\nšŸ‘« couple pair people human love date dating like affection valentines marriage\nšŸ‘­ two women holding hands pair friendship couple love like female people human\nšŸ‘¬ two men holding hands pair couple love like bromance friendship people human\nšŸ’‘ couple with heart woman man pair love like affection human dating valentines marriage\nšŸ‘©ā€ā¤ļøā€šŸ‘© couple with heart woman pair love like affection human dating valentines marriage\nšŸ‘Øā€ā¤ļøā€šŸ‘Ø couple with heart man pair love like affection human dating valentines marriage\nšŸ’ couplekiss man woman pair valentines love like dating marriage\nšŸ‘©ā€ā¤ļøā€šŸ’‹ā€šŸ‘© couplekiss woman pair valentines love like dating marriage\nšŸ‘Øā€ā¤ļøā€šŸ’‹ā€šŸ‘Ø couplekiss man pair valentines love like dating marriage\nšŸ‘Ŗ family man woman boy home parents child mom dad father mother people human\nšŸ‘Øā€šŸ‘©ā€šŸ‘§ family man woman girl home parents people human child\nšŸ‘Øā€šŸ‘©ā€šŸ‘§ā€šŸ‘¦ family man woman girl boy home parents people human children\nšŸ‘Øā€šŸ‘©ā€šŸ‘¦ā€šŸ‘¦ family man woman boy home parents people human children\nšŸ‘Øā€šŸ‘©ā€šŸ‘§ā€šŸ‘§ family man woman girl home parents people human children\nšŸ‘©ā€šŸ‘©ā€šŸ‘¦ family woman boy home parents people human children\nšŸ‘©ā€šŸ‘©ā€šŸ‘§ family woman girl home parents people human children\nšŸ‘©ā€šŸ‘©ā€šŸ‘§ā€šŸ‘¦ family woman girl boy home parents people human children\nšŸ‘©ā€šŸ‘©ā€šŸ‘¦ā€šŸ‘¦ family woman boy home parents people human children\nšŸ‘©ā€šŸ‘©ā€šŸ‘§ā€šŸ‘§ family woman girl home parents people human children\nšŸ‘Øā€šŸ‘Øā€šŸ‘¦ family man boy home parents people human children\nšŸ‘Øā€šŸ‘Øā€šŸ‘§ family man girl home parents people human children\nšŸ‘Øā€šŸ‘Øā€šŸ‘§ā€šŸ‘¦ family man girl boy home parents people human children\nšŸ‘Øā€šŸ‘Øā€šŸ‘¦ā€šŸ‘¦ family man boy home parents people human children\nšŸ‘Øā€šŸ‘Øā€šŸ‘§ā€šŸ‘§ family man girl home parents people human children\nšŸ‘©ā€šŸ‘¦ family woman boy home parent people human child\nšŸ‘©ā€šŸ‘§ family woman girl home parent people human child\nšŸ‘©ā€šŸ‘§ā€šŸ‘¦ family woman girl boy home parent people human children\nšŸ‘©ā€šŸ‘¦ā€šŸ‘¦ family woman boy home parent people human children\nšŸ‘©ā€šŸ‘§ā€šŸ‘§ family woman girl home parent people human children\nšŸ‘Øā€šŸ‘¦ family man boy home parent people human child\nšŸ‘Øā€šŸ‘§ family man girl home parent people human child\nšŸ‘Øā€šŸ‘§ā€šŸ‘¦ family man girl boy home parent people human children\nšŸ‘Øā€šŸ‘¦ā€šŸ‘¦ family man boy home parent people human children\nšŸ‘Øā€šŸ‘§ā€šŸ‘§ family man girl home parent people human children\n🧶 yarn ball crochet knit\n🧵 thread needle sewing spool string\n🧄 coat jacket\n🄼 labcoat doctor experiment scientist chemist\nšŸ‘š womans clothes fashion female\nšŸ‘• tshirt fashion cloth casual shirt tee\nšŸ‘– jeans fashion shopping\nšŸ‘” necktie shirt suitup formal fashion cloth business\nšŸ‘— dress clothes fashion shopping\nšŸ‘™ bikini swimming female woman girl fashion beach summer\nšŸ‘˜ kimono dress fashion women female japanese\n🄿 flat shoe ballet slipper\nšŸ‘  high heel fashion shoes female pumps stiletto\nšŸ‘” sandal shoes fashion\nšŸ‘¢ boot shoes fashion\nšŸ‘ž mans shoe fashion male\nšŸ‘Ÿ athletic shoe shoes sports sneakers\n🄾 hiking boot backpacking camping\n🧦 socks stockings clothes\n🧤 gloves hands winter clothes\n🧣 scarf neck winter clothes\nšŸŽ© tophat magic gentleman classy circus\n🧢 billed hat cap baseball\nšŸ‘’ womans hat fashion accessories female lady spring\nšŸŽ“ mortar board school college degree university graduation cap hat legal learn education\n⛑ rescue worker helmet construction build\nšŸ‘‘ crown king kod leader royalty lord\nšŸ‘ pouch bag accessories shopping\nšŸ‘› purse fashion accessories money sales shopping\nšŸ‘œ handbag fashion accessory accessories shopping\nšŸ’¼ briefcase business documents work law legal job career\nšŸŽ’ school satchel student education bag backpack\n🧳 luggage packing travel\nšŸ‘“ eyeglasses fashion accessories eyesight nerdy dork geek\nšŸ•¶ dark sunglasses face cool accessories\n🄽 goggles eyes protection safety\nšŸŒ‚ closed umbrella weather rain drizzle\n🐶 dog animal friend nature woof puppy pet faithful\n🐱 cat animal meow nature pet kitten\n🐭 mouse animal nature rodent\n🐹 hamster animal nature\n🐰 rabbit animal nature pet spring magic bunny\n🦊 fox face animal nature\n🐻 bear animal nature wild\n🐼 panda face animal nature\n🐨 koala animal nature\n🐯 tiger animal cat danger wild nature roar\n🦁 lion animal nature\n🐮 cow beef ox animal nature moo milk\n🐷 pig animal oink nature\n🐽 pig nose animal oink\n🐸 frog animal nature croak toad\n🐵 monkey face animal nature circus\nšŸ™ˆ see no evil monkey animal nature haha\nšŸ™‰ hear no evil animal monkey nature\nšŸ™Š speak no evil monkey animal nature omg\nšŸ’ monkey animal nature banana circus\nšŸ” chicken animal cluck nature bird\n🐧 penguin animal nature\n🐦 bird animal nature fly tweet spring\n🐤 baby chick animal chicken bird\n🐣 hatching chick animal chicken egg born baby bird\n🐄 hatched chick animal chicken baby bird\nšŸ¦† duck animal nature bird mallard\nšŸ¦… eagle animal nature bird\nšŸ¦‰ owl animal nature bird hoot\nšŸ¦‡ bat animal nature blind vampire\n🐺 wolf animal nature wild\nšŸ— boar animal nature\n🐓 horse animal brown nature\nšŸ¦„ unicorn animal nature mystical\nšŸ honeybee animal insect nature bug spring honey\nšŸ› bug animal insect nature worm\nšŸ¦‹ butterfly animal insect nature caterpillar\n🐌 snail slow animal shell\n🐚 shell nature sea beach\nšŸž beetle animal insect nature ladybug\n🐜 ant animal insect nature bug\n🦟 mosquito animal nature insect malaria\nšŸ¦— grasshopper animal cricket chirp\nšŸ•· spider animal arachnid\nšŸ•ø spider web animal insect arachnid silk\nšŸ¦‚ scorpion animal arachnid\n🐢 turtle animal slow nature tortoise\nšŸ snake animal evil nature hiss python\nšŸ¦Ž lizard animal nature reptile\nšŸ¦– t rex animal nature dinosaur tyrannosaurus extinct\nšŸ¦• sauropod animal nature dinosaur brachiosaurus brontosaurus diplodocus extinct\nšŸ™ octopus animal creature ocean sea nature beach\nšŸ¦‘ squid animal nature ocean sea\n🦐 shrimp animal ocean nature seafood\nšŸ¦ž lobster animal nature bisque claws seafood\nšŸ¦€ crab animal crustacean\n🐔 blowfish animal nature food sea ocean\n🐠 tropical fish animal swim ocean beach nemo\n🐟 fish animal food nature\n🐬 dolphin animal nature fish sea ocean flipper fins beach\n🐳 whale animal nature sea ocean\nšŸ‹ whale2 animal nature sea ocean\n🦈 shark animal nature fish sea ocean jaws fins beach\n🐊 crocodile animal nature reptile lizard alligator\nšŸ… tiger2 animal nature roar\nšŸ† leopard animal nature\nšŸ¦“ zebra animal nature stripes safari\nšŸ¦ gorilla animal nature circus\n🐘 elephant animal nature nose th circus\nšŸ¦› hippopotamus animal nature\nšŸ¦ rhinoceros animal nature horn\n🐪 dromedary camel animal hot desert hump\nšŸ¦’ giraffe animal nature spots safari\n🦘 kangaroo animal nature australia joey hop marsupial\n🐫 camel animal nature hot desert hump\n🐃 water buffalo animal nature ox cow\nšŸ‚ ox animal cow beef\nšŸ„ cow2 beef ox animal nature moo milk\nšŸŽ racehorse animal gamble luck\nšŸ– pig2 animal nature\nšŸ ram animal sheep nature\nšŸ‘ sheep animal nature wool shipit\nšŸ¦™ llama animal nature alpaca\n🐐 goat animal nature\n🦌 deer animal nature horns venison\nšŸ• dog2 animal nature friend doge pet faithful\n🐩 poodle dog animal 101 nature pet\n🐈 cat2 animal meow pet cats\nšŸ“ rooster animal nature chicken\n🦃 turkey animal bird\n🦚 peacock animal nature peahen bird\n🦜 parrot animal nature bird pirate talk\n🦢 swan animal nature bird\nšŸ•Š dove animal bird\nšŸ‡ rabbit2 animal nature pet magic spring\nšŸ¦ raccoon animal nature\n🦔 badger animal nature honey\nšŸ€ rat animal mouse rodent\n🐁 mouse2 animal nature rodent\n🐿 chipmunk animal nature rodent squirrel\nšŸ¦” hedgehog animal nature spiny\n🐾 paw prints animal tracking footprints dog cat pet feet\nšŸ‰ dragon animal myth nature chinese green\n🐲 dragon face animal myth nature chinese green\n🌵 cactus vegetable plant nature\nšŸŽ„ christmas tree festival vacation december xmas celebration\n🌲 evergreen tree plant nature\n🌳 deciduous tree plant nature\n🌓 palm tree plant vegetable nature summer beach mojito tropical\n🌱 seedling plant nature grass lawn spring\n🌿 herb vegetable plant medicine weed grass lawn\n☘ shamrock vegetable plant nature irish clover\nšŸ€ four leaf clover vegetable plant nature lucky irish\nšŸŽ bamboo plant nature vegetable panda\nšŸŽ‹ tanabata tree plant nature branch summer\nšŸƒ leaves nature plant tree vegetable grass lawn spring\nšŸ‚ fallen leaf nature plant vegetable leaves\nšŸ maple leaf nature plant vegetable ca fall\n🌾 ear of rice nature plant\n🌺 hibiscus plant vegetable flowers beach\n🌻 sunflower nature plant fall\n🌹 rose flowers valentines love spring\nšŸ„€ wilted flower plant nature\n🌷 tulip flowers plant nature summer spring\n🌼 blossom nature flowers yellow\n🌸 cherry blossom nature plant spring flower\nšŸ’ bouquet flowers nature spring\nšŸ„ mushroom plant vegetable\nšŸŒŽ earth americas globe world usa international\nšŸŒ earth africa globe world international\nšŸŒ earth asia globe world east international\nšŸŒ• full moon nature yellow twilight planet space night evening sleep\nšŸŒ– waning gibbous moon nature twilight planet space night evening sleep\nšŸŒ— last quarter moon nature twilight planet space night evening sleep\n🌘 waning crescent moon nature twilight planet space night evening sleep\nšŸŒ‘ new moon nature twilight planet space night evening sleep\nšŸŒ’ waxing crescent moon nature twilight planet space night evening sleep\nšŸŒ“ first quarter moon nature twilight planet space night evening sleep\nšŸŒ” waxing gibbous moon nature night sky gray twilight planet space evening sleep\n🌚 new moon with face nature twilight planet space night evening sleep\nšŸŒ full moon with face nature twilight planet space night evening sleep\nšŸŒ› first quarter moon with face nature twilight planet space night evening sleep\n🌜 last quarter moon with face nature twilight planet space night evening sleep\nšŸŒž sun with face nature morning sky\nšŸŒ™ crescent moon night sleep sky evening magic\n⭐ star night yellow\n🌟 star2 night sparkle awesome good magic\nšŸ’« dizzy star sparkle shoot magic\n✨ sparkles stars shine shiny cool awesome good magic\nā˜„ comet space\nā˜€ļø sunny weather nature brightness summer beach spring\n🌤 sun behind small cloud weather\nā›… partly sunny weather nature cloudy morning fall spring\n🌄 sun behind large cloud weather\n🌦 sun behind rain cloud weather\nā˜ļø cloud weather sky\n🌧 cloud with rain weather\nā›ˆ cloud with lightning and rain weather\n🌩 cloud with lightning weather thunder\n⚔ zap thunder weather fast\nšŸ”„ fire hot cook flame\nšŸ’„ boom bomb explode explosion collision blown\nā„ļø snowflake winter season cold weather christmas xmas\n🌨 cloud with snow weather\n⛄ snowman winter season cold weather christmas xmas frozen\n☃ snowman with snow winter season cold weather christmas xmas frozen\n🌬 wind face gust air\nšŸ’Ø dash wind air fast shoo fart smoke puff\n🌪 tornado weather cyclone twister\n🌫 fog weather\nā˜‚ open umbrella weather spring\nā˜” umbrella rainy weather spring\nšŸ’§ droplet water drip faucet spring\nšŸ’¦ sweat drops water drip oops\n🌊 ocean sea water wave nature tsunami disaster\nšŸ green apple fruit nature\nšŸŽ apple fruit mac school\nšŸ pear fruit nature food\nšŸŠ tangerine food fruit nature orange\nšŸ‹ lemon fruit nature\nšŸŒ banana fruit food monkey\nšŸ‰ watermelon fruit food picnic summer\nšŸ‡ grapes fruit food wine\nšŸ“ strawberry fruit food nature\nšŸˆ melon fruit nature food\nšŸ’ cherries food fruit\nšŸ‘ peach fruit nature food\n🄭 mango fruit food tropical\nšŸ pineapple fruit nature food\n🄄 coconut fruit nature food palm\nšŸ„ kiwi fruit food\nšŸ… tomato fruit vegetable nature food\nšŸ† eggplant vegetable nature food aubergine\nšŸ„‘ avocado fruit food\n🄦 broccoli fruit food vegetable\n🄬 leafy greens food vegetable plant cabbage kale lettuce\nšŸ„’ cucumber fruit food pickle\n🌶 hot pepper food spicy chilli chili\n🌽 corn food vegetable plant\nšŸ„• carrot vegetable food orange\nšŸ„” potato food tuber vegatable starch\nšŸ  sweet potato food nature\n🄐 croissant food bread french\n🄯 bagel food bread bakery schmear\nšŸž bread food wheat breakfast toast\nšŸ„– baguette bread food french\n🄨 pretzel food bread twisted\nšŸ§€ cheese food chadder\n🄚 egg food chicken breakfast\nšŸ³ fried egg food breakfast kitchen\nšŸ„ž pancakes food breakfast flapjacks hotcakes\nšŸ„“ bacon food breakfast pork pig meat\n🄩 steak food cow meat cut chop lambchop porkchop\nšŸ— poultry leg food meat drumstick bird chicken turkey\nšŸ– meat on bone good food drumstick\n🦓 bone skeleton\n🌭 hotdog food frankfurter\nšŸ” hamburger meat beef cheeseburger mcdonalds\nšŸŸ fries chips snack\nšŸ• pizza food party\n🄪 sandwich food lunch bread\nšŸ„™ stuffed flatbread food gyro\n🌮 taco food mexican\n🌯 burrito food mexican\nšŸ„— green salad food healthy lettuce\n🄘 shallow pan of food cooking casserole paella\n🄫 canned food soup\nšŸ spaghetti food italian noodle\nšŸœ ramen food japanese noodle chopsticks\nšŸ² stew food meat soup\nšŸ› curry food spicy hot indian\nšŸ£ sushi food fish japanese rice\nšŸ± bento food japanese box\nšŸ¤ fried shrimp food animal appetizer summer\nšŸ™ rice ball food japanese\nšŸš rice food china asian\nšŸ˜ rice cracker food japanese\nšŸ„ fish cake food japan sea beach narutomaki pink swirl kamaboko surimi ramen\n🄠 fortune cookie food prophecy\n🄮 moon cake food autumn\nšŸ¢ oden food japanese\nšŸ” dango food dessert sweet japanese barbecue meat\nšŸ§ shaved ice hot dessert summer\nšŸØ ice cream food hot dessert\nšŸ¦ icecream food hot dessert summer\n🄧 pie food dessert pastry\n🧁 cupcake food dessert bakery sweet\nšŸ° cake food dessert\nšŸŽ‚ birthday food dessert cake\nšŸ® custard dessert food\nšŸ­ lollipop food snack candy sweet\nšŸ¬ candy snack dessert sweet lolly\nšŸ« chocolate bar food snack dessert sweet\nšŸæ popcorn food films snack\nšŸ© doughnut food dessert snack sweet donut\n🄟 dumpling food empanada pierogi potsticker\nšŸŖ cookie food snack oreo chocolate sweet dessert\n🌰 chestnut food squirrel\n🄜 peanuts food nut\nšŸÆ honey pot bees sweet kitchen\nšŸ„› milk glass beverage drink cow\nšŸ¼ baby bottle food container milk\nā˜• coffee beverage caffeine latte espresso\nšŸµ tea drink bowl breakfast green british\n🄤 cup with straw drink soda\nšŸ¶ sake wine drink drunk beverage japanese alcohol booze\nšŸŗ beer relax beverage drink drunk party pub summer alcohol booze\nšŸ» beers relax beverage drink drunk party pub summer alcohol booze\nšŸ„‚ clinking glasses beverage drink party alcohol celebrate cheers wine champagne toast\nšŸ· wine glass drink beverage drunk alcohol booze\n🄃 tumbler glass drink beverage drunk alcohol liquor booze bourbon scotch whisky shot\nšŸø cocktail drink drunk alcohol beverage booze mojito\nšŸ¹ tropical drink beverage cocktail summer beach alcohol booze mojito\nšŸ¾ champagne drink wine bottle celebration\nšŸ„„ spoon cutlery kitchen tableware\nšŸ“ fork and knife cutlery kitchen\nšŸ½ plate with cutlery food eat meal lunch dinner restaurant\n🄣 bowl with spoon food breakfast cereal oatmeal porridge\n🄔 takeout box food leftovers\n🄢 chopsticks food\nšŸ§‚ salt condiment shaker\n⚽ soccer sports football\nšŸ€ basketball sports balls nba\nšŸˆ football sports balls nfl\n⚾ baseball sports balls\nšŸ„Ž softball sports balls\nšŸŽ¾ tennis sports balls green\nšŸ volleyball sports balls\nšŸ‰ rugby football sports team\nšŸ„ flying disc sports frisbee ultimate\nšŸŽ± 8ball pool hobby game luck magic\n⛳ golf sports business flag hole summer\nšŸŒļøā€ā™€ļø golfing woman sports business female\nšŸŒ golfing man sports business\nšŸ“ ping pong sports pingpong\nšŸø badminton sports\nšŸ„… goal net sports\nšŸ’ ice hockey sports\nšŸ‘ field hockey sports\nšŸ„ lacrosse sports ball stick\nšŸ cricket sports\nšŸŽæ ski sports winter cold snow\nā›· skier sports winter snow\nšŸ‚ snowboarder sports winter\n🤺 person fencing sports sword\nšŸ¤¼ā€ā™€ļø women wrestling sports wrestlers\nšŸ¤¼ā€ā™‚ļø men wrestling sports wrestlers\nšŸ¤øā€ā™€ļø woman cartwheeling gymnastics\nšŸ¤øā€ā™‚ļø man cartwheeling gymnastics\nšŸ¤¾ā€ā™€ļø woman playing handball sports\nšŸ¤¾ā€ā™‚ļø man playing handball sports\n⛸ ice skate sports\n🄌 curling stone sports\nšŸ›¹ skateboard board\nšŸ›· sled sleigh luge toboggan\nšŸ¹ bow and arrow sports\nšŸŽ£ fishing pole and fish food hobby summer\n🄊 boxing glove sports fighting\nšŸ„‹ martial arts uniform judo karate taekwondo\nšŸš£ā€ā™€ļø rowing woman sports hobby water ship female\n🚣 rowing man sports hobby water ship\nšŸ§—ā€ā™€ļø climbing woman sports hobby female rock\nšŸ§—ā€ā™‚ļø climbing man sports hobby male rock\nšŸŠā€ā™€ļø swimming woman sports exercise human athlete water summer female\nšŸŠ swimming man sports exercise human athlete water summer\nšŸ¤½ā€ā™€ļø woman playing water polo sports pool\nšŸ¤½ā€ā™‚ļø man playing water polo sports pool\nšŸ§˜ā€ā™€ļø woman in lotus position female meditation yoga serenity zen mindfulness\nšŸ§˜ā€ā™‚ļø man in lotus position male meditation yoga serenity zen mindfulness\nšŸ„ā€ā™€ļø surfing woman sports ocean sea summer beach female\nšŸ„ surfing man sports ocean sea summer beach\nā›¹ļøā€ā™€ļø basketball woman sports human female\n⛹ basketball man sports human\nšŸ‹ļøā€ā™€ļø weight lifting woman sports training exercise female\nšŸ‹ weight lifting man sports training exercise\nšŸš“ā€ā™€ļø biking woman sports bike exercise hipster female\n🚓 biking man sports bike exercise hipster\nšŸšµā€ā™€ļø mountain biking woman transportation sports human race bike female\n🚵 mountain biking man transportation sports human race bike\nšŸ‡ horse racing animal betting competition gambling luck\nšŸ† trophy win award contest place ftw ceremony\nšŸŽ½ running shirt with sash play pageant\nšŸ… medal sports award winning\nšŸŽ– medal military award winning army\nšŸ„‡ 1st place medal award winning first\n🄈 2nd place medal award second\nšŸ„‰ 3rd place medal award third\nšŸŽ— reminder ribbon sports cause support awareness\nšŸµ rosette flower decoration military\nšŸŽ« ticket event concert pass\nšŸŽŸ tickets sports concert entrance\nšŸŽ­ performing arts acting theater drama\nšŸŽØ art design paint draw colors\nšŸŽŖ circus tent festival carnival party\nšŸ¤¹ā€ā™€ļø woman juggling juggle balance skill multitask\nšŸ¤¹ā€ā™‚ļø man juggling juggle balance skill multitask\nšŸŽ¤ microphone sound music pa sing talkshow\nšŸŽ§ headphones music score gadgets\nšŸŽ¼ musical score treble clef compose\nšŸŽ¹ musical keyboard piano instrument compose\n🄁 drum music instrument drumsticks snare\nšŸŽ· saxophone music instrument jazz blues\nšŸŽŗ trumpet music brass\nšŸŽø guitar music instrument\nšŸŽ» violin music instrument orchestra symphony\nšŸŽ¬ clapper movie film record\nšŸŽ® video game play console ps4 controller\nšŸŽÆ dart game play bar target bullseye\nšŸŽ² game die dice random tabletop play luck\nā™Ÿ chess pawn expendable\nšŸŽ° slot machine bet gamble vegas luck casino\n🧩 jigsaw interlocking puzzle piece\nšŸŽ³ bowling sports fun play\nšŸš— red car transportation vehicle\nšŸš• taxi uber vehicle cars transportation\nšŸš™ blue car transportation vehicle\n🚌 bus car vehicle transportation\nšŸšŽ trolleybus bart transportation vehicle\nšŸŽ racing car sports race fast formula f1\nšŸš“ police car vehicle cars transportation law legal enforcement\nšŸš‘ ambulance health 911 hospital\nšŸš’ fire engine transportation cars vehicle\n🚐 minibus vehicle car transportation\n🚚 truck cars transportation\nšŸš› articulated lorry vehicle cars transportation express\n🚜 tractor vehicle car farming agriculture\nšŸ›“ kick scooter vehicle razor\nšŸ motorcycle race sports fast\n🚲 bike sports bicycle exercise hipster\nšŸ›µ motor scooter vehicle vespa sasha\n🚨 rotating light police ambulance 911 emergency alert error pinged law legal\nšŸš” oncoming police car vehicle law legal enforcement 911\nšŸš oncoming bus vehicle transportation\n🚘 oncoming automobile car vehicle transportation\nšŸš– oncoming taxi vehicle cars uber\n🚔 aerial tramway transportation vehicle ski\n🚠 mountain cableway transportation vehicle ski\n🚟 suspension railway vehicle transportation\n🚃 railway car transportation vehicle\nšŸš‹ train transportation vehicle carriage public travel\nšŸš monorail transportation vehicle\nšŸš„ bullettrain side transportation vehicle\nšŸš… bullettrain front transportation vehicle speed fast public travel\n🚈 light rail transportation vehicle\nšŸšž mountain railway transportation vehicle\nšŸš‚ steam locomotive transportation vehicle train\nšŸš† train2 transportation vehicle\nšŸš‡ metro transportation mrt underground tube\n🚊 tram transportation vehicle\nšŸš‰ station transportation vehicle public\nšŸ›ø flying saucer transportation vehicle ufo\n🚁 helicopter transportation vehicle fly\nšŸ›© small airplane flight transportation fly vehicle\nāœˆļø airplane vehicle transportation flight fly\nšŸ›« flight departure airport landing\nšŸ›¬ flight arrival airport boarding\n⛵ sailboat ship summer transportation water sailing\nšŸ›„ motor boat ship\n🚤 speedboat ship transportation vehicle summer\n⛓ ferry boat ship yacht\nšŸ›³ passenger ship yacht cruise ferry\nšŸš€ rocket launch ship staffmode nasa fly\nšŸ›° artificial satellite communication gps orbit spaceflight nasa iss\nšŸ’ŗ seat sit airplane transport bus flight fly\nšŸ›¶ canoe boat paddle water ship\nāš“ anchor ship ferry sea boat\n🚧 construction wip progress caution warning\n⛽ fuelpump petroleum\nšŸš busstop transportation wait\n🚦 vertical traffic light transportation driving\n🚄 traffic light transportation signal\n🚢 ship transportation titanic deploy\nšŸŽ” ferris wheel photo carnival londoneye\nšŸŽ¢ roller coaster carnival playground photo fun\nšŸŽ  carousel horse photo carnival\nšŸ— building construction wip working progress\n🌁 foggy photo mountain\nšŸ—¼ tokyo tower photo japanese\nšŸ­ factory building industry pollution smoke\n⛲ fountain photo summer water fresh\nšŸŽ‘ rice scene photo japan asia tsukimi\nā›° mountain photo nature environment\nšŸ” mountain snow photo nature environment winter cold\nšŸ—» mount fuji photo mountain nature japanese\nšŸŒ‹ volcano photo nature disaster\nšŸ—¾ japan nation country japanese asia\nšŸ• camping photo outdoors tent\n⛺ tent photo camping outdoors\nšŸž national park photo environment nature\nšŸ›£ motorway road cupertino interstate highway\nšŸ›¤ railway track train transportation\nšŸŒ… sunrise morning view vacation photo\nšŸŒ„ sunrise over mountains view vacation photo\nšŸœ desert photo warm saharah\nšŸ– beach umbrella weather summer sunny sand mojito\nšŸ desert island photo tropical mojito\nšŸŒ‡ city sunrise photo dawn\nšŸŒ† city sunset photo evening sky buildings\nšŸ™ cityscape photo urban\n🌃 night with stars evening city downtown\nšŸŒ‰ bridge at night photo sanfrancisco\n🌌 milky way photo space stars\n🌠 stars night photo\nšŸŽ‡ sparkler stars night shine\nšŸŽ† fireworks photo festival carnival congratulations\n🌈 rainbow nature happy photo sky spring\nšŸ˜ houses buildings photo\nšŸ° european castle building royalty history\nšŸÆ japanese castle photo building\nšŸŸ stadium photo place sports concert venue\nšŸ—½ statue of liberty american newyork\nšŸ  house building home\nšŸ” house with garden home plant nature\nšŸš derelict house abandon evict broken building\nšŸ¢ office building bureau work\nšŸ¬ department store building shopping mall\nšŸ£ post office building envelope communication\nšŸ¤ european post office building email\nšŸ„ hospital building health surgery doctor\nšŸ¦ bank building money sales cash business enterprise\nšŸØ hotel building accomodation checkin\nšŸŖ convenience store building shopping groceries\nšŸ« school building student education learn teach\nšŸ© love hotel like affection dating\nšŸ’’ wedding love like affection couple marriage bride groom\nšŸ› classical building art culture history\n⛪ church building religion christ\nšŸ•Œ mosque islam worship minaret\nšŸ• synagogue judaism worship temple jewish\nšŸ•‹ kaaba mecca mosque islam\n⛩ shinto shrine temple japan kyoto\n⌚ watch time accessories\nšŸ“± iphone technology apple gadgets dial\nšŸ“² calling iphone incoming\nšŸ’» computer technology laptop screen display monitor\n⌨ keyboard technology computer type input text\nšŸ–„ desktop computer technology computing screen\nšŸ–Ø printer paper ink\nšŸ–± computer mouse click\nšŸ–² trackball technology trackpad\nšŸ•¹ joystick game play\nšŸ—œ clamp tool\nšŸ’½ minidisc technology record data disk 90s\nšŸ’¾ floppy disk oldschool technology save 90s 80s\nšŸ’æ cd technology dvd disk disc 90s\nšŸ“€ dvd cd disk disc\nšŸ“¼ vhs record video oldschool 90s 80s\nšŸ“· camera gadgets photography\nšŸ“ø camera flash photography gadgets\nšŸ“¹ video camera film record\nšŸŽ„ movie camera film record\nšŸ“½ film projector video tape record movie\nšŸŽž film strip movie\nšŸ“ž telephone receiver technology communication dial\nā˜Žļø phone technology communication dial telephone\nšŸ“Ÿ pager bbcall oldschool 90s\nšŸ“  fax communication technology\nšŸ“ŗ tv technology program oldschool show television\nšŸ“» radio communication music podcast program\nšŸŽ™ studio microphone sing recording artist talkshow\nšŸŽš level slider scale\nšŸŽ› control knobs dial\n🧭 compass magnetic navigation orienteering\nā± stopwatch time deadline\nā² timer clock alarm\nā° alarm clock time wake\nšŸ•° mantelpiece clock time\nā³ hourglass flowing sand oldschool time countdown\nāŒ› hourglass time clock oldschool limit exam quiz test\nšŸ“” satellite communication future radio space\nšŸ”‹ battery power energy sustain\nšŸ”Œ electric plug charger power\nšŸ’” bulb light electricity idea\nšŸ”¦ flashlight dark camping sight night\nšŸ•Æ candle fire wax\n🧯 fire extinguisher quench\nšŸ—‘ wastebasket bin trash rubbish garbage toss\nšŸ›¢ oil drum barrell\nšŸ’ø money with wings dollar bills payment sale\nšŸ’µ dollar money sales bill currency\nšŸ’“ yen money sales japanese dollar currency\nšŸ’¶ euro money sales dollar currency\nšŸ’· pound british sterling money sales bills uk england currency\nšŸ’° moneybag dollar payment coins sale\nšŸ’³ credit card money sales dollar bill payment shopping\nšŸ’Ž gem blue ruby diamond jewelry\nāš– balance scale law fairness weight\n🧰 toolbox tools diy fix maintainer mechanic\nšŸ”§ wrench tools diy ikea fix maintainer\nšŸ”Ø hammer tools build create\nāš’ hammer and pick tools build create\nšŸ›  hammer and wrench tools build create\nā› pick tools dig\nšŸ”© nut and bolt handy tools fix\nāš™ gear cog\n🧱 brick bricks\n⛓ chains lock arrest\n🧲 magnet attraction magnetic\nšŸ”« gun violence weapon pistol revolver\nšŸ’£ bomb boom explode explosion terrorism\n🧨 firecracker dynamite boom explode explosion explosive\nšŸ”Ŗ hocho knife blade cutlery kitchen weapon\nšŸ—” dagger weapon\nāš” crossed swords weapon\nšŸ›” shield protection security\n🚬 smoking kills tobacco cigarette joint smoke\n⚰ coffin vampire dead die death rip graveyard cemetery casket funeral box\n⚱ funeral urn dead die death rip ashes\nšŸŗ amphora vase jar\nšŸ”® crystal ball disco party magic circus\nšŸ“æ prayer beads dhikr religious\n🧿 nazar amulet bead charm\nšŸ’ˆ barber hair salon style\nāš— alembic distilling science experiment chemistry\nšŸ”­ telescope stars space zoom science astronomy\nšŸ”¬ microscope laboratory experiment zoomin science study\nšŸ•³ hole embarrassing\nšŸ’Š pill health medicine doctor pharmacy drug\nšŸ’‰ syringe health hospital drugs blood medicine needle doctor nurse\n🧬 dna biologist genetics life\n🦠 microbe amoeba bacteria germs\n🧫 petri dish bacteria biology culture lab\n🧪 test tube chemistry experiment lab science\n🌔 thermometer weather temperature hot cold\n🧹 broom cleaning sweeping witch\n🧺 basket laundry\n🧻 toilet paper roll\nšŸ· label sale tag\nšŸ”– bookmark favorite label save\n🚽 toilet restroom wc washroom bathroom potty\n🚿 shower clean water bathroom\nšŸ› bathtub clean shower bathroom\nšŸ›€ bath clean shower bathroom\n🧼 soap bar bathing cleaning lather\n🧽 sponge absorbing cleaning porous\n🧓 lotion bottle moisturizer sunscreen\nšŸ”‘ key lock door password\nšŸ— old key lock door password\nšŸ›‹ couch and lamp read chill\nšŸ›Œ sleeping bed rest\nšŸ› bed sleep rest\n🚪 door house entry exit\nšŸ›Ž bellhop bell service\n🧸 teddy bear plush stuffed\nšŸ–¼ framed picture photography\nšŸ—ŗ world map location direction\nā›± parasol on ground weather summer\nšŸ—æ moyai rock moai\nšŸ› shopping mall buy purchase\nšŸ›’ shopping cart trolley\nšŸŽˆ balloon party celebration birthday circus\nšŸŽ flags fish japanese koinobori carp banner\nšŸŽ€ ribbon decoration pink girl bowtie\nšŸŽ gift present birthday christmas xmas\nšŸŽŠ confetti ball festival party birthday circus\nšŸŽ‰ tada party congratulations birthday magic circus celebration\nšŸŽŽ dolls japanese toy kimono\nšŸŽ wind chime nature ding spring bell\nšŸŽŒ crossed flags japanese nation country border\nšŸ® izakaya lantern light paper halloween spooky\n🧧 red envelope gift\nāœ‰ļø email letter postal inbox communication\nšŸ“© envelope with arrow email communication\nšŸ“Ø incoming envelope email inbox\nšŸ“§ e mail communication inbox\nšŸ’Œ love letter email like affection envelope valentines\nšŸ“® postbox email letter envelope\nšŸ“Ŗ mailbox closed email communication inbox\nšŸ“« mailbox email inbox communication\nšŸ“¬ mailbox with mail email inbox communication\nšŸ“­ mailbox with no mail email inbox\nšŸ“¦ package mail gift cardboard box moving\nšŸ“Æ postal horn instrument music\nšŸ“„ inbox tray email documents\nšŸ“¤ outbox tray inbox email\nšŸ“œ scroll documents ancient history paper\nšŸ“ƒ page with curl documents office paper\nšŸ“‘ bookmark tabs favorite save order tidy\n🧾 receipt accounting expenses\nšŸ“Š bar chart graph presentation stats\nšŸ“ˆ chart with upwards trend graph presentation stats recovery business economics money sales good success\nšŸ“‰ chart with downwards trend graph presentation stats recession business economics money sales bad failure\nšŸ“„ page facing up documents office paper information\nšŸ“… date calendar schedule\nšŸ“† calendar schedule date planning\nšŸ—“ spiral calendar date schedule planning\nšŸ“‡ card index business stationery\nšŸ—ƒ card file box business stationery\nšŸ—³ ballot box election vote\nšŸ—„ file cabinet filing organizing\nšŸ“‹ clipboard stationery documents\nšŸ—’ spiral notepad memo stationery\nšŸ“ file folder documents business office\nšŸ“‚ open file folder documents load\nšŸ—‚ card index dividers organizing business stationery\nšŸ—ž newspaper roll press headline\nšŸ“° newspaper press headline\nšŸ““ notebook stationery record notes paper study\nšŸ“• closed book read library knowledge textbook learn\nšŸ“— green book read library knowledge study\nšŸ“˜ blue book read library knowledge learn study\nšŸ“™ orange book read library knowledge textbook study\nšŸ“” notebook with decorative cover classroom notes record paper study\nšŸ“’ ledger notes paper\nšŸ“š books literature library study\nšŸ“– open book read library knowledge literature learn study\n🧷 safety pin diaper\nšŸ”— link rings url\nšŸ“Ž paperclip documents stationery\nšŸ–‡ paperclips documents stationery\nāœ‚ļø scissors stationery cut\nšŸ“ triangular ruler stationery math architect sketch\nšŸ“ straight ruler stationery calculate length math school drawing architect sketch\n🧮 abacus calculation\nšŸ“Œ pushpin stationery mark here\nšŸ“ round pushpin stationery location map here\nšŸ” closed lock with key security privacy\nšŸ”’ lock security password padlock\nšŸ”“ unlock privacy security\nšŸ” lock with ink pen security secret\nšŸ–Š pen stationery writing write\nšŸ–‹ fountain pen stationery writing write\nāœ’ļø black nib pen stationery writing write\nšŸ“ memo write documents stationery pencil paper writing legal exam quiz test study compose\nāœļø pencil2 stationery write paper writing school study\nšŸ– crayon drawing creativity\nšŸ–Œ paintbrush drawing creativity art\nšŸ” mag search zoom find detective\nšŸ”Ž mag right search zoom find detective\nā¤ļø heart love like valentines\n🧔 orange heart love like affection valentines\nšŸ’› yellow heart love like affection valentines\nšŸ’š green heart love like affection valentines\nšŸ’™ blue heart love like affection valentines\nšŸ’œ purple heart love like affection valentines\nšŸ–¤ black heart evil\nšŸ’” broken heart sad sorry break heartbreak\nā£ heavy heart exclamation decoration love\nšŸ’• two hearts love like affection valentines heart\nšŸ’ž revolving hearts love like affection valentines\nšŸ’“ heartbeat love like affection valentines pink heart\nšŸ’— heartpulse like love affection valentines pink\nšŸ’– sparkling heart love like affection valentines\nšŸ’˜ cupid love like heart affection valentines\nšŸ’ gift heart love valentines\nšŸ’Ÿ heart decoration love like\n☮ peace symbol hippie\nāœ latin cross christianity\n☪ star and crescent islam\nšŸ•‰ om hinduism buddhism sikhism jainism\n☸ wheel of dharma hinduism buddhism sikhism jainism\n✔ star of david judaism\nšŸ”Æ six pointed star religion jewish hexagram\nšŸ•Ž menorah hanukkah candles jewish\n☯ yin yang balance\n☦ orthodox cross suppedaneum religion\nšŸ› place of worship religion church temple prayer\nā›Ž ophiuchus sign constellation astrology\nā™ˆ aries sign zodiac astrology\n♉ taurus sign zodiac astrology\nā™Š gemini sign zodiac astrology\n♋ cancer sign zodiac astrology\nā™Œ leo sign zodiac astrology\nā™ virgo sign zodiac astrology\nā™Ž libra sign zodiac astrology\nā™ scorpius sign zodiac astrology scorpio\n♐ sagittarius sign zodiac astrology\n♑ capricorn sign zodiac astrology\nā™’ aquarius sign zodiac astrology\n♓ pisces sign zodiac astrology\nšŸ†” id words\nāš› atom symbol science physics chemistry\n🈳 u7a7a kanji japanese chinese empty sky\n🈹 u5272 cut divide chinese kanji\n☢ radioactive nuclear danger\n☣ biohazard danger\nšŸ““ mobile phone off mute silence quiet\nšŸ“³ vibration mode phone\n🈶 u6709 chinese have kanji\n🈚 u7121 nothing chinese kanji japanese\n🈸 u7533 chinese japanese kanji\n🈺 u55b6 japanese\nšŸˆ·ļø u6708 chinese month moon japanese kanji\nāœ“ļø eight pointed black star shape polygon\nšŸ†š vs words\nšŸ‰‘ accept ok good chinese kanji agree yes\nšŸ’® white flower japanese spring\nšŸ‰ ideograph advantage chinese kanji obtain get circle\nćŠ™ļø secret privacy chinese sshh kanji\nćŠ—ļø congratulations chinese kanji japanese\n🈓 u5408 japanese chinese join kanji\n🈵 u6e80 full chinese japanese kanji\n🈲 u7981 kanji japanese chinese forbidden limit restricted\nšŸ…°ļø a alphabet letter\nšŸ…±ļø b alphabet letter\nšŸ†Ž ab alphabet\nšŸ†‘ cl alphabet words\nšŸ…¾ļø o2 alphabet letter\nšŸ†˜ sos help words emergency 911\nā›” no entry limit security privacy bad denied stop circle\nšŸ“› name badge fire forbid\n🚫 no entry sign forbid stop limit denied disallow circle\nāŒ x no delete remove cancel red\nā­• o circle round\nšŸ›‘ stop sign\nšŸ’¢ anger angry mad\nā™Øļø hotsprings bath warm relax\n🚷 no pedestrians rules crossing walking circle\n🚯 do not litter trash bin garbage circle\n🚳 no bicycles cyclist prohibited circle\n🚱 non potable water drink faucet tap circle\nšŸ”ž underage 18 drink pub night minor circle\nšŸ“µ no mobile phones iphone mute circle\nā— exclamation danger surprise punctuation wow warning\nā• grey exclamation surprise punctuation gray wow warning\nā“ question doubt confused\nā” grey question doubts gray huh confused\nā€¼ļø bangbang exclamation surprise\nā‰ļø interrobang wat punctuation surprise\nšŸ’Æ 100 score perfect numbers century exam quiz test pass hundred\nšŸ”… low brightness sun afternoon warm summer\nšŸ”† high brightness sun light\nšŸ”± trident weapon spear\n⚜ fleur de lis decorative scout\nć€½ļø part alternation mark graph presentation stats business economics bad\nāš ļø warning exclamation wip alert error problem issue\n🚸 children crossing school warning danger sign driving\nšŸ”° beginner badge shield\nā™»ļø recycle arrow environment garbage trash\n🈯 u6307 chinese point kanji\nšŸ’¹ chart graph presentation stats\nā‡ļø sparkle stars awesome good fireworks\nāœ³ļø eight spoked asterisk star sparkle\nāŽ negative squared cross mark x no deny\nāœ… white check mark ok agree vote election answer tick\nšŸ’  diamond shape with a dot inside jewel blue gem crystal fancy\nšŸŒ€ cyclone weather swirl blue cloud vortex spiral whirlpool spin tornado hurricane typhoon\nāžæ loop tape cassette\n🌐 globe with meridians earth international world internet interweb i18n\nā“‚ļø m alphabet letter\nšŸ§ atm money sales cash payment bank\nšŸ’¤ zzz sleepy tired dream\nšŸˆ‚ļø sa japanese katakana\nšŸ›‚ passport control custom\nšŸ›ƒ customs passport border\nšŸ›„ baggage claim airport transport\nšŸ›… left luggage travel\n♿ wheelchair disabled a11y accessibility\n🚭 no smoking cigarette smell smoke\n🚾 wc toilet restroom\nšŸ…æļø parking cars alphabet letter\n🚰 potable water liquid restroom cleaning faucet\n🚹 mens toilet restroom wc gender male\n🚺 womens woman female toilet loo restroom gender\n🚼 baby symbol child\n🚻 restroom toilet refresh wc gender\n🚮 put litter in its place sign human info\nšŸŽ¦ cinema record film movie curtain stage theater\nšŸ“¶ signal strength reception phone internet connection wifi bluetooth bars\n🈁 koko here katakana japanese destination\nšŸ†– ng words shape icon\nšŸ†— ok good agree yes\nšŸ†™ up above high\nšŸ†’ cool words\nšŸ†• new words start\nšŸ†“ free words\n0ļøāƒ£ zero 0 numbers null\n1ļøāƒ£ one numbers 1\n2ļøāƒ£ two numbers 2 prime\n3ļøāƒ£ three 3 numbers prime\n4ļøāƒ£ four 4 numbers\n5ļøāƒ£ five 5 numbers prime\n6ļøāƒ£ six 6 numbers\n7ļøāƒ£ seven 7 numbers prime\n8ļøāƒ£ eight 8 numbers\n9ļøāƒ£ nine numbers 9\nšŸ”Ÿ keycap ten numbers 10\n*⃣ asterisk star keycap\nšŸ”¢ 1234 numbers\nāļø eject button\nā–¶ļø arrow forward right direction play\nāø pause button\nā­ next track button forward\nā¹ stop button\nāŗ record button\nāÆ play or pause button\nā® previous track button backward\nā© fast forward play speed continue\nāŖ rewind play\nšŸ”€ twisted rightwards arrows shuffle music random\nšŸ” repeat loop record\nšŸ”‚ repeat one loop\nā—€ļø arrow backward left direction\nšŸ”¼ arrow up small triangle direction point forward top\nšŸ”½ arrow down small direction bottom\nā« arrow double up direction top\nā¬ arrow double down direction bottom\nāž”ļø arrow right next\nā¬…ļø arrow left previous back\nā¬†ļø arrow up continue top direction\nā¬‡ļø arrow down direction bottom\nā†—ļø arrow upper right point direction diagonal northeast\nā†˜ļø arrow lower right direction diagonal southeast\nā†™ļø arrow lower left direction diagonal southwest\nā†–ļø arrow upper left point direction diagonal northwest\nā†•ļø arrow up down direction way vertical\nā†”ļø left right arrow shape direction horizontal sideways\nšŸ”„ arrows counterclockwise sync cycle\nā†Ŗļø arrow right hook return rotate direction\nā†©ļø leftwards arrow with hook back return undo enter\nā¤“ļø arrow heading up direction top\nā¤µļø arrow heading down direction bottom\n#ļøāƒ£ hash symbol twitter\nā„¹ļø information source alphabet letter\nšŸ”¤ abc alphabet\nšŸ”” abcd alphabet\nšŸ”  capital abcd alphabet words\nšŸ”£ symbols music note ampersand percent glyphs characters\nšŸŽµ musical note score tone sound\nšŸŽ¶ notes music score\nć€°ļø wavy dash draw line moustache mustache squiggle scribble\nāž° curly loop scribble draw shape squiggle\nāœ”ļø heavy check mark ok nike answer yes tick\nšŸ”ƒ arrows clockwise sync cycle round repeat\nāž• heavy plus sign math calculation addition more increase\nāž– heavy minus sign math calculation subtract less\nāž— heavy division sign divide math calculation\nāœ–ļø heavy multiplication x math calculation\n♾ infinity forever\nšŸ’² heavy dollar sign money sales payment currency buck\nšŸ’± currency exchange money sales dollar travel\nĀ©ļø copyright ip license circle law legal\nĀ®ļø registered alphabet circle\nā„¢ļø tm trademark brand law legal\nšŸ”š end words arrow\nšŸ”™ back arrow words return\nšŸ”› on arrow words\nšŸ” top words\nšŸ”œ soon arrow words\nā˜‘ļø ballot box with check ok agree confirm vote election yes tick\nšŸ”˜ radio button input old music circle\n⚪ white circle shape round\n⚫ black circle shape button round\nšŸ”“ red circle shape error danger\nšŸ”µ large blue circle shape icon button\nšŸ”ø small orange diamond shape jewel gem\nšŸ”¹ small blue diamond shape jewel gem\nšŸ”¶ large orange diamond shape jewel gem\nšŸ”· large blue diamond shape jewel gem\nšŸ”ŗ small red triangle shape direction up top\nā–Ŗļø black small square shape icon\nā–«ļø white small square shape icon\n⬛ black large square shape icon button\n⬜ white large square shape icon stone button\nšŸ”» small red triangle down shape direction bottom\nā—¼ļø black medium square shape button icon\nā—»ļø white medium square shape stone icon\nā—¾ black medium small square icon shape button\nā—½ white medium small square shape stone icon button\nšŸ”² black square button shape input frame\nšŸ”³ white square button shape input\nšŸ”ˆ speaker sound volume silence broadcast\nšŸ”‰ sound volume speaker broadcast\nšŸ”Š loud sound volume noise noisy speaker broadcast\nšŸ”‡ mute sound volume silence quiet\nšŸ“£ mega sound speaker volume\nšŸ“¢ loudspeaker volume sound\nšŸ”” bell sound notification christmas xmas chime\nšŸ”• no bell sound volume mute quiet silent\nšŸƒ black joker poker cards game play magic\nšŸ€„ mahjong game play chinese kanji\nā™ ļø spades poker cards suits magic\nā™£ļø clubs poker cards magic suits\nā™„ļø hearts poker cards magic suits\nā™¦ļø diamonds poker cards magic suits\nšŸŽ“ flower playing cards game sunset red\nšŸ’­ thought balloon bubble cloud speech thinking dream\nšŸ—Æ right anger bubble caption speech thinking mad\nšŸ’¬ speech balloon bubble words message talk chatting\nšŸ—Ø left speech bubble words message talk chatting\nšŸ• clock1 time late early schedule\nšŸ•‘ clock2 time late early schedule\nšŸ•’ clock3 time late early schedule\nšŸ•“ clock4 time late early schedule\nšŸ•” clock5 time late early schedule\nšŸ•• clock6 time late early schedule dawn dusk\nšŸ•– clock7 time late early schedule\nšŸ•— clock8 time late early schedule\nšŸ•˜ clock9 time late early schedule\nšŸ•™ clock10 time late early schedule\nšŸ•š clock11 time late early schedule\nšŸ•› clock12 time noon midnight midday late early schedule\nšŸ•œ clock130 time late early schedule\nšŸ• clock230 time late early schedule\nšŸ•ž clock330 time late early schedule\nšŸ•Ÿ clock430 time late early schedule\nšŸ•  clock530 time late early schedule\nšŸ•” clock630 time late early schedule\nšŸ•¢ clock730 time late early schedule\nšŸ•£ clock830 time late early schedule\nšŸ•¤ clock930 time late early schedule\nšŸ•„ clock1030 time late early schedule\nšŸ•¦ clock1130 time late early schedule\nšŸ•§ clock1230 time late early schedule\nšŸ³ white flag losing loser lost surrender fail\nšŸ“ black flag pirate\nšŸ“ā€ā˜ ļø pirate flag skull crossbones banner\nšŸ checkered flag contest finishline race gokart\n🚩 triangular flag on post mark milestone place\nšŸ³ļøā€šŸŒˆ rainbow flag pride gay lgbt glbt queer homosexual lesbian bisexual transgender\nšŸ‡ŗšŸ‡³ united nations un flag banner\nšŸ‡¦šŸ‡« afghanistan af flag nation country banner\nšŸ‡¦šŸ‡½ aland islands flag nation country banner\nšŸ‡¦šŸ‡± albania al flag nation country banner\nšŸ‡©šŸ‡æ algeria dz flag nation country banner\nšŸ‡¦šŸ‡ø american samoa ws flag nation country banner\nšŸ‡¦šŸ‡© andorra ad flag nation country banner\nšŸ‡¦šŸ‡“ angola ao flag nation country banner\nšŸ‡¦šŸ‡® anguilla ai flag nation country banner\nšŸ‡¦šŸ‡¶ antarctica aq flag nation country banner\nšŸ‡¦šŸ‡¬ antigua barbuda flag nation country banner\nšŸ‡¦šŸ‡· argentina ar flag nation country banner\nšŸ‡¦šŸ‡² armenia am flag nation country banner\nšŸ‡¦šŸ‡¼ aruba aw flag nation country banner\nšŸ‡¦šŸ‡ŗ australia au flag nation country banner\nšŸ‡¦šŸ‡¹ austria at flag nation country banner\nšŸ‡¦šŸ‡æ azerbaijan az flag nation country banner\nšŸ‡§šŸ‡ø bahamas bs flag nation country banner\nšŸ‡§šŸ‡­ bahrain bh flag nation country banner\nšŸ‡§šŸ‡© bangladesh bd flag nation country banner\nšŸ‡§šŸ‡§ barbados bb flag nation country banner\nšŸ‡§šŸ‡¾ belarus by flag nation country banner\nšŸ‡§šŸ‡Ŗ belgium be flag nation country banner\nšŸ‡§šŸ‡æ belize bz flag nation country banner\nšŸ‡§šŸ‡Æ benin bj flag nation country banner\nšŸ‡§šŸ‡² bermuda bm flag nation country banner\nšŸ‡§šŸ‡¹ bhutan bt flag nation country banner\nšŸ‡§šŸ‡“ bolivia bo flag nation country banner\nšŸ‡§šŸ‡¶ caribbean netherlands bonaire flag nation country banner\nšŸ‡§šŸ‡¦ bosnia herzegovina flag nation country banner\nšŸ‡§šŸ‡¼ botswana bw flag nation country banner\nšŸ‡§šŸ‡· brazil br flag nation country banner\nšŸ‡®šŸ‡“ british indian ocean territory flag nation country banner\nšŸ‡»šŸ‡¬ british virgin islands bvi flag nation country banner\nšŸ‡§šŸ‡³ brunei bn darussalam flag nation country banner\nšŸ‡§šŸ‡¬ bulgaria bg flag nation country banner\nšŸ‡§šŸ‡« burkina faso flag nation country banner\nšŸ‡§šŸ‡® burundi bi flag nation country banner\nšŸ‡ØšŸ‡» cape verde cabo flag nation country banner\nšŸ‡°šŸ‡­ cambodia kh flag nation country banner\nšŸ‡ØšŸ‡² cameroon cm flag nation country banner\nšŸ‡ØšŸ‡¦ canada ca flag nation country banner\nšŸ‡®šŸ‡Ø canary islands flag nation country banner\nšŸ‡°šŸ‡¾ cayman islands flag nation country banner\nšŸ‡ØšŸ‡« central african republic flag nation country banner\nšŸ‡¹šŸ‡© chad td flag nation country banner\nšŸ‡ØšŸ‡± chile flag nation country banner\nšŸ‡ØšŸ‡³ cn china chinese prc flag country nation banner\nšŸ‡ØšŸ‡½ christmas island flag nation country banner\nšŸ‡ØšŸ‡Ø cocos islands keeling flag nation country banner\nšŸ‡ØšŸ‡“ colombia co flag nation country banner\nšŸ‡°šŸ‡² comoros km flag nation country banner\nšŸ‡ØšŸ‡¬ congo brazzaville flag nation country banner\nšŸ‡ØšŸ‡© congo kinshasa democratic republic flag nation country banner\nšŸ‡ØšŸ‡° cook islands flag nation country banner\nšŸ‡ØšŸ‡· costa rica flag nation country banner\nšŸ‡­šŸ‡· croatia hr flag nation country banner\nšŸ‡ØšŸ‡ŗ cuba cu flag nation country banner\nšŸ‡ØšŸ‡¼ curacao flag nation country banner\nšŸ‡ØšŸ‡¾ cyprus cy flag nation country banner\nšŸ‡ØšŸ‡æ czech republic cz flag nation country banner\nšŸ‡©šŸ‡° denmark dk flag nation country banner\nšŸ‡©šŸ‡Æ djibouti dj flag nation country banner\nšŸ‡©šŸ‡² dominica dm flag nation country banner\nšŸ‡©šŸ‡“ dominican republic flag nation country banner\nšŸ‡ŖšŸ‡Ø ecuador ec flag nation country banner\nšŸ‡ŖšŸ‡¬ egypt eg flag nation country banner\nšŸ‡øšŸ‡» el salvador flag nation country banner\nšŸ‡¬šŸ‡¶ equatorial guinea gn flag nation country banner\nšŸ‡ŖšŸ‡· eritrea er flag nation country banner\nšŸ‡ŖšŸ‡Ŗ estonia ee flag nation country banner\nšŸ‡ŖšŸ‡¹ ethiopia et flag nation country banner\nšŸ‡ŖšŸ‡ŗ eu european union flag banner\nšŸ‡«šŸ‡° falkland islands malvinas flag nation country banner\nšŸ‡«šŸ‡“ faroe islands flag nation country banner\nšŸ‡«šŸ‡Æ fiji fj flag nation country banner\nšŸ‡«šŸ‡® finland fi flag nation country banner\nšŸ‡«šŸ‡· fr banner flag nation france french country\nšŸ‡¬šŸ‡« french guiana flag nation country banner\nšŸ‡µšŸ‡« french polynesia flag nation country banner\nšŸ‡¹šŸ‡« french southern territories flag nation country banner\nšŸ‡¬šŸ‡¦ gabon ga flag nation country banner\nšŸ‡¬šŸ‡² gambia gm flag nation country banner\nšŸ‡¬šŸ‡Ŗ georgia ge flag nation country banner\nšŸ‡©šŸ‡Ŗ de german nation flag country banner\nšŸ‡¬šŸ‡­ ghana gh flag nation country banner\nšŸ‡¬šŸ‡® gibraltar gi flag nation country banner\nšŸ‡¬šŸ‡· greece gr flag nation country banner\nšŸ‡¬šŸ‡± greenland gl flag nation country banner\nšŸ‡¬šŸ‡© grenada gd flag nation country banner\nšŸ‡¬šŸ‡µ guadeloupe gp flag nation country banner\nšŸ‡¬šŸ‡ŗ guam gu flag nation country banner\nšŸ‡¬šŸ‡¹ guatemala gt flag nation country banner\nšŸ‡¬šŸ‡¬ guernsey gg flag nation country banner\nšŸ‡¬šŸ‡³ guinea gn flag nation country banner\nšŸ‡¬šŸ‡¼ guinea bissau gw flag nation country banner\nšŸ‡¬šŸ‡¾ guyana gy flag nation country banner\nšŸ‡­šŸ‡¹ haiti ht flag nation country banner\nšŸ‡­šŸ‡³ honduras hn flag nation country banner\nšŸ‡­šŸ‡° hong kong flag nation country banner\nšŸ‡­šŸ‡ŗ hungary hu flag nation country banner\nšŸ‡®šŸ‡ø iceland is flag nation country banner\nšŸ‡®šŸ‡³ india in flag nation country banner\nšŸ‡®šŸ‡© indonesia flag nation country banner\nšŸ‡®šŸ‡· iran islamic republic flag nation country banner\nšŸ‡®šŸ‡¶ iraq iq flag nation country banner\nšŸ‡®šŸ‡Ŗ ireland ie flag nation country banner\nšŸ‡®šŸ‡² isle of man flag nation country banner\nšŸ‡®šŸ‡± israel il flag nation country banner\nšŸ‡®šŸ‡¹ it italy flag nation country banner\nšŸ‡ØšŸ‡® cote divoire ivory coast flag nation country banner\nšŸ‡ÆšŸ‡² jamaica jm flag nation country banner\nšŸ‡ÆšŸ‡µ jp japanese nation flag country banner\nšŸ‡ÆšŸ‡Ŗ jersey je flag nation country banner\nšŸ‡ÆšŸ‡“ jordan jo flag nation country banner\nšŸ‡°šŸ‡æ kazakhstan kz flag nation country banner\nšŸ‡°šŸ‡Ŗ kenya ke flag nation country banner\nšŸ‡°šŸ‡® kiribati ki flag nation country banner\nšŸ‡½šŸ‡° kosovo xk flag nation country banner\nšŸ‡°šŸ‡¼ kuwait kw flag nation country banner\nšŸ‡°šŸ‡¬ kyrgyzstan kg flag nation country banner\nšŸ‡±šŸ‡¦ laos lao democratic republic flag nation country banner\nšŸ‡±šŸ‡» latvia lv flag nation country banner\nšŸ‡±šŸ‡§ lebanon lb flag nation country banner\nšŸ‡±šŸ‡ø lesotho ls flag nation country banner\nšŸ‡±šŸ‡· liberia lr flag nation country banner\nšŸ‡±šŸ‡¾ libya ly flag nation country banner\nšŸ‡±šŸ‡® liechtenstein li flag nation country banner\nšŸ‡±šŸ‡¹ lithuania lt flag nation country banner\nšŸ‡±šŸ‡ŗ luxembourg lu flag nation country banner\nšŸ‡²šŸ‡“ macau macao flag nation country banner\nšŸ‡²šŸ‡° macedonia flag nation country banner\nšŸ‡²šŸ‡¬ madagascar mg flag nation country banner\nšŸ‡²šŸ‡¼ malawi mw flag nation country banner\nšŸ‡²šŸ‡¾ malaysia my flag nation country banner\nšŸ‡²šŸ‡» maldives mv flag nation country banner\nšŸ‡²šŸ‡± mali ml flag nation country banner\nšŸ‡²šŸ‡¹ malta mt flag nation country banner\nšŸ‡²šŸ‡­ marshall islands flag nation country banner\nšŸ‡²šŸ‡¶ martinique mq flag nation country banner\nšŸ‡²šŸ‡· mauritania mr flag nation country banner\nšŸ‡²šŸ‡ŗ mauritius mu flag nation country banner\nšŸ‡¾šŸ‡¹ mayotte yt flag nation country banner\nšŸ‡²šŸ‡½ mexico mx flag nation country banner\nšŸ‡«šŸ‡² micronesia federated states flag nation country banner\nšŸ‡²šŸ‡© moldova republic flag nation country banner\nšŸ‡²šŸ‡Ø monaco mc flag nation country banner\nšŸ‡²šŸ‡³ mongolia mn flag nation country banner\nšŸ‡²šŸ‡Ŗ montenegro me flag nation country banner\nšŸ‡²šŸ‡ø montserrat ms flag nation country banner\nšŸ‡²šŸ‡¦ morocco ma flag nation country banner\nšŸ‡²šŸ‡æ mozambique mz flag nation country banner\nšŸ‡²šŸ‡² myanmar mm flag nation country banner\nšŸ‡³šŸ‡¦ namibia na flag nation country banner\nšŸ‡³šŸ‡· nauru nr flag nation country banner\nšŸ‡³šŸ‡µ nepal np flag nation country banner\nšŸ‡³šŸ‡± netherlands nl flag nation country banner\nšŸ‡³šŸ‡Ø new caledonia flag nation country banner\nšŸ‡³šŸ‡æ new zealand flag nation country banner\nšŸ‡³šŸ‡® nicaragua ni flag nation country banner\nšŸ‡³šŸ‡Ŗ niger ne flag nation country banner\nšŸ‡³šŸ‡¬ nigeria flag nation country banner\nšŸ‡³šŸ‡ŗ niue nu flag nation country banner\nšŸ‡³šŸ‡« norfolk island flag nation country banner\nšŸ‡²šŸ‡µ northern mariana islands flag nation country banner\nšŸ‡°šŸ‡µ north korea nation flag country banner\nšŸ‡³šŸ‡“ norway no flag nation country banner\nšŸ‡“šŸ‡² oman flag nation country banner\nšŸ‡µšŸ‡° pakistan pk flag nation country banner\nšŸ‡µšŸ‡¼ palau pw flag nation country banner\nšŸ‡µšŸ‡ø palestinian territories palestine flag nation country banner\nšŸ‡µšŸ‡¦ panama pa flag nation country banner\nšŸ‡µšŸ‡¬ papua new guinea flag nation country banner\nšŸ‡µšŸ‡¾ paraguay py flag nation country banner\nšŸ‡µšŸ‡Ŗ peru pe flag nation country banner\nšŸ‡µšŸ‡­ philippines ph flag nation country banner\nšŸ‡µšŸ‡³ pitcairn islands flag nation country banner\nšŸ‡µšŸ‡± poland pl flag nation country banner\nšŸ‡µšŸ‡¹ portugal pt flag nation country banner\nšŸ‡µšŸ‡· puerto rico flag nation country banner\nšŸ‡¶šŸ‡¦ qatar qa flag nation country banner\nšŸ‡·šŸ‡Ŗ reunion flag nation country banner\nšŸ‡·šŸ‡“ romania ro flag nation country banner\nšŸ‡·šŸ‡ŗ ru russian federation flag nation country banner\nšŸ‡·šŸ‡¼ rwanda rw flag nation country banner\nšŸ‡§šŸ‡± st barthelemy saint flag nation country banner\nšŸ‡øšŸ‡­ st helena saint ascension tristan cunha flag nation country banner\nšŸ‡°šŸ‡³ st kitts nevis saint flag nation country banner\nšŸ‡±šŸ‡Ø st lucia saint flag nation country banner\nšŸ‡µšŸ‡² st pierre miquelon saint flag nation country banner\nšŸ‡»šŸ‡Ø st vincent grenadines saint flag nation country banner\nšŸ‡¼šŸ‡ø samoa ws flag nation country banner\nšŸ‡øšŸ‡² san marino flag nation country banner\nšŸ‡øšŸ‡¹ sao tome principe flag nation country banner\nšŸ‡øšŸ‡¦ saudi arabia flag nation country banner\nšŸ‡øšŸ‡³ senegal sn flag nation country banner\nšŸ‡·šŸ‡ø serbia rs flag nation country banner\nšŸ‡øšŸ‡Ø seychelles sc flag nation country banner\nšŸ‡øšŸ‡± sierra leone flag nation country banner\nšŸ‡øšŸ‡¬ singapore sg flag nation country banner\nšŸ‡øšŸ‡½ sint maarten dutch flag nation country banner\nšŸ‡øšŸ‡° slovakia sk flag nation country banner\nšŸ‡øšŸ‡® slovenia si flag nation country banner\nšŸ‡øšŸ‡§ solomon islands flag nation country banner\nšŸ‡øšŸ‡“ somalia so flag nation country banner\nšŸ‡æšŸ‡¦ south africa flag nation country banner\nšŸ‡¬šŸ‡ø south georgia sandwich islands flag nation country banner\nšŸ‡°šŸ‡· kr south korea nation flag country banner\nšŸ‡øšŸ‡ø south sudan sd flag nation country banner\nšŸ‡ŖšŸ‡ø es spain flag nation country banner\nšŸ‡±šŸ‡° sri lanka flag nation country banner\nšŸ‡øšŸ‡© sudan sd flag nation country banner\nšŸ‡øšŸ‡· suriname sr flag nation country banner\nšŸ‡øšŸ‡æ swaziland sz flag nation country banner\nšŸ‡øšŸ‡Ŗ sweden se flag nation country banner\nšŸ‡ØšŸ‡­ switzerland ch flag nation country banner\nšŸ‡øšŸ‡¾ syria syrian arab republic flag nation country banner\nšŸ‡¹šŸ‡¼ taiwan tw flag nation country banner\nšŸ‡¹šŸ‡Æ tajikistan tj flag nation country banner\nšŸ‡¹šŸ‡æ tanzania united republic flag nation country banner\nšŸ‡¹šŸ‡­ thailand th flag nation country banner\nšŸ‡¹šŸ‡± timor leste flag nation country banner\nšŸ‡¹šŸ‡¬ togo tg flag nation country banner\nšŸ‡¹šŸ‡° tokelau tk flag nation country banner\nšŸ‡¹šŸ‡“ tonga to flag nation country banner\nšŸ‡¹šŸ‡¹ trinidad tobago flag nation country banner\nšŸ‡¹šŸ‡³ tunisia tn flag nation country banner\nšŸ‡¹šŸ‡· tr turkey flag nation country banner\nšŸ‡¹šŸ‡² turkmenistan flag nation country banner\nšŸ‡¹šŸ‡Ø turks caicos islands flag nation country banner\nšŸ‡¹šŸ‡» tuvalu flag nation country banner\nšŸ‡ŗšŸ‡¬ uganda ug flag nation country banner\nšŸ‡ŗšŸ‡¦ ukraine ua flag nation country banner\nšŸ‡¦šŸ‡Ŗ united arab emirates flag nation country banner\nšŸ‡¬šŸ‡§ uk united kingdom great britain northern ireland flag nation country banner british english england\nšŸ“ó §ó ¢ó „ó ®ó §ó æ england flag english\nšŸ“ó §ó ¢ó ³ó £ó “ó æ scotland flag scottish\nšŸ“ó §ó ¢ó ·ó ¬ó ³ó æ wales flag welsh\nšŸ‡ŗšŸ‡ø us united states america flag nation country banner\nšŸ‡»šŸ‡® us virgin islands flag nation country banner\nšŸ‡ŗšŸ‡¾ uruguay uy flag nation country banner\nšŸ‡ŗšŸ‡æ uzbekistan uz flag nation country banner\nšŸ‡»šŸ‡ŗ vanuatu vu flag nation country banner\nšŸ‡»šŸ‡¦ vatican city flag nation country banner\nšŸ‡»šŸ‡Ŗ venezuela ve bolivarian republic flag nation country banner\nšŸ‡»šŸ‡³ vietnam viet nam flag nation country banner\nšŸ‡¼šŸ‡« wallis futuna flag nation country banner\nšŸ‡ŖšŸ‡­ western sahara flag nation country banner\nšŸ‡¾šŸ‡Ŗ yemen ye flag nation country banner\nšŸ‡æšŸ‡² zambia zm flag nation country banner\nšŸ‡æšŸ‡¼ zimbabwe zw flag nation country banner\n🄲 smiling face with tear happy sad grateful touched\nšŸ˜®ā€šŸ’Ø face exhaling sigh relief tired exhale\n🄸 disguised face disguise glasses mustache incognito\n🄱 yawning face yawn tired sleepy bored\n🤌 pinched fingers italian what gesture\nšŸ¤ pinching hand small tiny little\n🦾 mechanical arm robot strong prosthetic\n🫶 heart hands love support\n🫔 saluting face salute respect yes\n🫠 melting face melt hot embarrassed\n🫢 face with open eyes and hand over mouth shock surprise gasp\n🫣 face with peeking eye peek shy scared\n🫄 dotted line face invisible hidden\nšŸ¤ white heart love pure\nšŸ¤Ž brown heart love\nā¤ļøā€šŸ”„ heart on fire love passion burning\nā¤ļøā€šŸ©¹ mending heart healing recovery love\n🫐 blueberries fruit berry\n🧃 beverage box juice drink\nšŸ§‹ bubble tea boba drink milk\n`;\n"],"names":[],"mappings":"AAKO,MAAM,qBAAwB,GAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA"}
@@ -64,6 +64,7 @@ function readMatches(data) {
64
64
  }
65
65
  function useContactMatches(gql, contacts, viewer, phone) {
66
66
  const [permission, setPermission] = React.useState(contacts ? "undetermined" : "unsupported");
67
+ const [limited, setLimited] = React.useState(false);
67
68
  const [loading, setLoading] = React.useState(true);
68
69
  const [error, setError] = React.useState(null);
69
70
  const [peers, setPeers] = React.useState([]);
@@ -119,6 +120,10 @@ function useContactMatches(gql, contacts, viewer, phone) {
119
120
  setError(null);
120
121
  try {
121
122
  await loadPeers();
123
+ if (contacts.isLimited) {
124
+ const isLimited = await contacts.isLimited().catch(() => false);
125
+ if (mounted.current) setLimited(isLimited);
126
+ }
122
127
  const raw = await contacts.read();
123
128
  const regions = [contacts.defaultRegion, regionFromE164(viewer == null ? void 0 : viewer.phoneE164)];
124
129
  const normalized = normalizeContacts(raw, regions, (_a = viewer == null ? void 0 : viewer.phoneE164) != null ? _a : null);
@@ -217,15 +222,22 @@ function useContactMatches(gql, contacts, viewer, phone) {
217
222
  setPermission(status);
218
223
  if (status === "granted") await sync();
219
224
  }, [contacts, sync]);
225
+ const chooseMoreContacts = React.useMemo(() => (contacts == null ? void 0 : contacts.chooseMoreContacts) ? async () => {
226
+ var _a;
227
+ await ((_a = contacts.chooseMoreContacts) == null ? void 0 : _a.call(contacts));
228
+ await sync();
229
+ } : void 0, [contacts, sync]);
220
230
  const onYantra = React.useMemo(() => mergeOnYantra(peers, fromBook, viewer == null ? void 0 : viewer.userId), [peers, fromBook, viewer == null ? void 0 : viewer.userId]);
221
231
  return {
222
232
  permission,
233
+ limited,
223
234
  loading,
224
235
  error,
225
236
  onYantra,
226
237
  invitable,
227
238
  requestAccess,
228
239
  refresh: sync,
229
- openSettings: async () => contacts == null ? void 0 : contacts.openSettings()
240
+ openSettings: async () => contacts == null ? void 0 : contacts.openSettings(),
241
+ chooseMoreContacts
230
242
  };
231
243
  }export{useContactMatches};//# sourceMappingURL=useContactMatches.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"useContactMatches.js","sources":["../../../src/features/messaging/useContactMatches.ts"],"sourcesContent":["/**\n * The contact sync: read the address book, work out who is already here.\n *\n * The whole pipeline runs in the remote, so all of it is fixable by a surface\n * deploy: normalise -> hash -> ask the server -> split into \"on Yantra\" and\n * \"invite\". Only the address-book read itself is a host seam, because that is\n * the one part needing a native module.\n *\n * With phone-based membership (issue #1312), contact matching delegates to\n * the ChatPhoneSeam, which calls the `yantra-messenger` connector to match\n * E.164 phone numbers against chat members.\n *\n * NOTHING LEAVES THE DEVICE IN PLAINTEXT (legacy mode). Numbers are hashed\n * before the query. See sha256.ts and the server's chat-contact-directory.ts\n * for what that does and does not buy - it is not anonymity, but it does mean\n * we never upload or store the address book of someone who never signed up.\n *\n * If a ChatPhoneSeam is available, it takes precedence for matching.\n */\nimport * as React from 'react';\nimport { CONTACT_MATCHES_QUERY, YANTRA_CHAT_MEMBERS_QUERY } from './chatOperations';\nimport { collectLookupNumbers, normalizeContacts, regionFromE164, type NormalizedContact } from './phoneNumbers';\nimport { sha256 } from './sha256';\nimport type { ChatContactsSeam, ChatGraphQLSeam, ChatPermissionStatus, ChatViewer, ChatPhoneSeam } from './chatHost';\n\nexport interface MatchedContact extends NormalizedContact {\n /** Present when this contact already has an account. */\n match?: { userId: string; displayName: string; picture?: string | null };\n}\n\nexport interface ContactMatchesState {\n permission: ChatPermissionStatus | 'unsupported';\n loading: boolean;\n error: string | null;\n /** Contacts already on Yantra - tap to open a DM. */\n onYantra: MatchedContact[];\n /** Everyone else - tap to invite. */\n invitable: MatchedContact[];\n /** Prompts, then syncs on success. */\n requestAccess: () => Promise<void>;\n /** Re-read the address book and re-match. */\n refresh: () => Promise<void>;\n openSettings: () => Promise<void>;\n}\n\ninterface DirectoryMember {\n phoneE164: string;\n userId: string;\n displayName: string;\n avatarUrl?: string | null;\n}\n\nfunction memberToContact(row: DirectoryMember): MatchedContact {\n return {\n id: `member:${row.userId}`,\n displayName: row.displayName,\n imageUri: row.avatarUrl ?? null,\n e164: row.phoneE164 ? [row.phoneE164] : [],\n match: {\n userId: String(row.userId),\n displayName: row.displayName,\n picture: row.avatarUrl ?? null,\n },\n };\n}\n\nfunction mergeOnYantra(\n peers: MatchedContact[],\n fromBook: MatchedContact[],\n viewerUserId?: string | null,\n): MatchedContact[] {\n const byUser = new Map<string, MatchedContact>();\n for (const row of [...peers, ...fromBook]) {\n const uid = row.match?.userId;\n if (!uid || uid === viewerUserId || !/^[a-f0-9]{24}$/i.test(uid)) continue;\n const existing = byUser.get(uid);\n if (!existing) {\n byUser.set(uid, row);\n continue;\n }\n byUser.set(uid, {\n ...existing,\n displayName: existing.displayName || row.displayName,\n imageUri: existing.imageUri || row.imageUri,\n e164: Array.from(new Set([...existing.e164, ...row.e164])),\n match: {\n ...existing.match!,\n displayName: existing.match?.displayName || row.match?.displayName || existing.displayName,\n picture: existing.match?.picture || row.match?.picture,\n },\n });\n }\n return Array.from(byUser.values()).sort((a, b) => a.displayName.localeCompare(b.displayName));\n}\n\ninterface WireMatch {\n phoneHash?: string;\n userId?: string;\n displayName?: string | null;\n username?: string | null;\n picture?: string | null;\n}\n\n/**\n * The server returns AnyObject, so the payload arrives untyped and possibly as\n * a bare array or wrapped. Normalising defensively here beats trusting a shape\n * the schema does not enforce.\n */\nfunction readMatches(data: unknown): WireMatch[] {\n const raw = (data as { chatContactMatches?: unknown })?.chatContactMatches;\n if (Array.isArray(raw)) return raw as WireMatch[];\n if (raw && typeof raw === 'object' && Array.isArray((raw as { matches?: unknown }).matches)) {\n return (raw as { matches: WireMatch[] }).matches;\n }\n return [];\n}\n\nexport function useContactMatches(\n gql: ChatGraphQLSeam,\n contacts: ChatContactsSeam | undefined,\n viewer: ChatViewer | null,\n phone?: ChatPhoneSeam,\n): ContactMatchesState {\n const [permission, setPermission] = React.useState<ChatPermissionStatus | 'unsupported'>(\n contacts ? 'undetermined' : 'unsupported',\n );\n const [loading, setLoading] = React.useState(true);\n const [error, setError] = React.useState<string | null>(null);\n const [peers, setPeers] = React.useState<MatchedContact[]>([]);\n const [fromBook, setFromBook] = React.useState<MatchedContact[]>([]);\n const [invitable, setInvitable] = React.useState<MatchedContact[]>([]);\n const mounted = React.useRef(true);\n\n React.useEffect(() => {\n mounted.current = true;\n return () => {\n mounted.current = false;\n };\n }, []);\n\n const loadPeers = React.useCallback(async () => {\n try {\n let rows: DirectoryMember[] = [];\n if (phone?.listMembers) {\n const matches = await phone.listMembers();\n rows = Object.values(matches).map((m) => ({\n phoneE164: m.phoneE164,\n userId: m.userId,\n displayName: m.displayName,\n avatarUrl: m.avatarUrl ?? null,\n }));\n } else {\n const res = await gql.query<{ yantraChatMembers?: DirectoryMember[] | null }>(\n YANTRA_CHAT_MEMBERS_QUERY,\n );\n if (res.errors?.length) {\n if (!mounted.current) return;\n setError(res.errors[0].message);\n return;\n }\n rows = res.data?.yantraChatMembers ?? [];\n }\n if (!mounted.current) return;\n const viewerId = viewer?.userId;\n setPeers(\n rows\n .filter((r) => Boolean(r.userId) && r.userId !== viewerId && /^[a-f0-9]{24}$/i.test(r.userId))\n .map(memberToContact),\n );\n } catch (e) {\n if (!mounted.current) return;\n setError(e instanceof Error ? e.message : 'Could not load Yantra Chat members');\n }\n }, [gql, phone, viewer?.userId]);\n\n const sync = React.useCallback(async () => {\n if (!contacts) {\n await loadPeers();\n if (mounted.current) setLoading(false);\n return;\n }\n setLoading(true);\n setError(null);\n try {\n await loadPeers();\n const raw = await contacts.read();\n // Normalisation drops unmatchable numbers and the viewer's own\n // card, which almost everyone has saved.\n // Numbers saved without a country code are read against the device region AND the\n // viewer's verified country: the device may report US for a user whose contacts are Indian.\n const regions = [contacts.defaultRegion, regionFromE164(viewer?.phoneE164)];\n const normalized = normalizeContacts(raw, regions, viewer?.phoneE164 ?? null);\n const numbers = collectLookupNumbers(normalized);\n\n if (!numbers.length) {\n if (!mounted.current) return;\n setFromBook([]);\n setInvitable(normalized);\n setLoading(false);\n return;\n }\n\n let matchedNumbers: Map<string, any>;\n\n if (phone?.matchContacts) {\n // New phone-based membership: use connector to match by E.164 phone number\n try {\n const matches = await phone.matchContacts(numbers);\n matchedNumbers = new Map(Object.entries(matches).map(([phoneE164, match]) => [phoneE164, match]));\n } catch (err) {\n if (!mounted.current) return;\n setError(err instanceof Error ? err.message : 'Could not match contacts');\n setFromBook([]);\n setInvitable(normalized);\n setLoading(false);\n return;\n }\n } else {\n // Legacy hashed directory approach\n const byHash = new Map<string, string>();\n for (const n of numbers) byHash.set(sha256(n), n);\n\n const res = await gql.query(CONTACT_MATCHES_QUERY, { phoneHashes: Array.from(byHash.keys()) });\n if (!mounted.current) return;\n\n matchedNumbers = new Map<string, any>();\n for (const m of readMatches(res.data)) {\n const number = m?.phoneHash ? byHash.get(m.phoneHash) : undefined;\n if (number && m?.userId) matchedNumbers.set(number, m);\n }\n\n if (res.errors?.length) {\n setError(res.errors[0].message);\n }\n }\n\n const here: MatchedContact[] = [];\n const rest: MatchedContact[] = [];\n for (const c of normalized) {\n const hit = c.e164.map((n) => matchedNumbers.get(n)).find(Boolean);\n if (hit?.userId) {\n here.push({\n ...c,\n match: {\n userId: String(hit.userId),\n // Prefer the name from THEIR account over the one in\n // your address book only when yours is missing -\n // you called them \"Mum\" for a reason.\n displayName: c.displayName || hit.displayName || hit.username || 'Unknown',\n picture: hit.avatarUrl ?? hit.picture ?? null,\n },\n });\n } else {\n rest.push(c);\n }\n }\n\n here.sort((a, b) => a.displayName.localeCompare(b.displayName));\n rest.sort((a, b) => a.displayName.localeCompare(b.displayName));\n setFromBook(here);\n setInvitable(rest);\n } catch (e) {\n if (!mounted.current) return;\n setError(e instanceof Error ? e.message : 'Could not read your contacts.');\n } finally {\n if (mounted.current) setLoading(false);\n }\n }, [contacts, gql, viewer, phone, loadPeers]);\n\n React.useEffect(() => {\n void loadPeers().finally(() => {\n if (mounted.current) setLoading(false);\n });\n }, [loadPeers]);\n\n // Check the CURRENT status without prompting, so the screen can offer the\n // right action - ask, or deep-link to Settings after a previous denial.\n React.useEffect(() => {\n let cancelled = false;\n if (!contacts) {\n setPermission('unsupported');\n return () => undefined;\n }\n void (async () => {\n const status = await contacts.getPermission();\n if (cancelled || !mounted.current) return;\n setPermission(status);\n if (status === 'granted') void sync();\n })();\n return () => {\n cancelled = true;\n };\n }, [contacts, sync]);\n\n const requestAccess = React.useCallback(async () => {\n if (!contacts) return;\n const status = await contacts.requestPermission();\n if (!mounted.current) return;\n setPermission(status);\n if (status === 'granted') await sync();\n }, [contacts, sync]);\n\n const onYantra = React.useMemo(\n () => mergeOnYantra(peers, fromBook, viewer?.userId),\n [peers, fromBook, viewer?.userId],\n );\n\n return {\n permission,\n loading,\n error,\n onYantra,\n invitable,\n requestAccess,\n refresh: sync,\n openSettings: async () => contacts?.openSettings(),\n };\n}\n"],"names":["_a"],"mappings":"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"}
1
+ {"version":3,"file":"useContactMatches.js","sources":["../../../src/features/messaging/useContactMatches.ts"],"sourcesContent":["/**\n * The contact sync: read the address book, work out who is already here.\n *\n * The whole pipeline runs in the remote, so all of it is fixable by a surface\n * deploy: normalise -> hash -> ask the server -> split into \"on Yantra\" and\n * \"invite\". Only the address-book read itself is a host seam, because that is\n * the one part needing a native module.\n *\n * With phone-based membership (issue #1312), contact matching delegates to\n * the ChatPhoneSeam, which calls the `yantra-messenger` connector to match\n * E.164 phone numbers against chat members.\n *\n * NOTHING LEAVES THE DEVICE IN PLAINTEXT (legacy mode). Numbers are hashed\n * before the query. See sha256.ts and the server's chat-contact-directory.ts\n * for what that does and does not buy - it is not anonymity, but it does mean\n * we never upload or store the address book of someone who never signed up.\n *\n * If a ChatPhoneSeam is available, it takes precedence for matching.\n */\nimport * as React from 'react';\nimport { CONTACT_MATCHES_QUERY, YANTRA_CHAT_MEMBERS_QUERY } from './chatOperations';\nimport { collectLookupNumbers, normalizeContacts, regionFromE164, type NormalizedContact } from './phoneNumbers';\nimport { sha256 } from './sha256';\nimport type { ChatContactsSeam, ChatGraphQLSeam, ChatPermissionStatus, ChatViewer, ChatPhoneSeam } from './chatHost';\n\nexport interface MatchedContact extends NormalizedContact {\n /** Present when this contact already has an account. */\n match?: { userId: string; displayName: string; picture?: string | null };\n}\n\nexport interface ContactMatchesState {\n permission: ChatPermissionStatus | 'unsupported';\n /** Granted for selected contacts only (iOS 18 Limited Access). */\n limited: boolean;\n loading: boolean;\n error: string | null;\n /** Contacts already on Yantra - tap to open a DM. */\n onYantra: MatchedContact[];\n /** Everyone else - tap to invite. */\n invitable: MatchedContact[];\n /** Prompts, then syncs on success. */\n requestAccess: () => Promise<void>;\n /** Re-read the address book and re-match. */\n refresh: () => Promise<void>;\n openSettings: () => Promise<void>;\n /** Present when the host can show the iOS contact access picker. */\n chooseMoreContacts?: () => Promise<void>;\n}\n\ninterface DirectoryMember {\n phoneE164: string;\n userId: string;\n displayName: string;\n avatarUrl?: string | null;\n}\n\nfunction memberToContact(row: DirectoryMember): MatchedContact {\n return {\n id: `member:${row.userId}`,\n displayName: row.displayName,\n imageUri: row.avatarUrl ?? null,\n e164: row.phoneE164 ? [row.phoneE164] : [],\n match: {\n userId: String(row.userId),\n displayName: row.displayName,\n picture: row.avatarUrl ?? null,\n },\n };\n}\n\nfunction mergeOnYantra(\n peers: MatchedContact[],\n fromBook: MatchedContact[],\n viewerUserId?: string | null,\n): MatchedContact[] {\n const byUser = new Map<string, MatchedContact>();\n for (const row of [...peers, ...fromBook]) {\n const uid = row.match?.userId;\n if (!uid || uid === viewerUserId || !/^[a-f0-9]{24}$/i.test(uid)) continue;\n const existing = byUser.get(uid);\n if (!existing) {\n byUser.set(uid, row);\n continue;\n }\n byUser.set(uid, {\n ...existing,\n displayName: existing.displayName || row.displayName,\n imageUri: existing.imageUri || row.imageUri,\n e164: Array.from(new Set([...existing.e164, ...row.e164])),\n match: {\n ...existing.match!,\n displayName: existing.match?.displayName || row.match?.displayName || existing.displayName,\n picture: existing.match?.picture || row.match?.picture,\n },\n });\n }\n return Array.from(byUser.values()).sort((a, b) => a.displayName.localeCompare(b.displayName));\n}\n\ninterface WireMatch {\n phoneHash?: string;\n userId?: string;\n displayName?: string | null;\n username?: string | null;\n picture?: string | null;\n}\n\n/**\n * The server returns AnyObject, so the payload arrives untyped and possibly as\n * a bare array or wrapped. Normalising defensively here beats trusting a shape\n * the schema does not enforce.\n */\nfunction readMatches(data: unknown): WireMatch[] {\n const raw = (data as { chatContactMatches?: unknown })?.chatContactMatches;\n if (Array.isArray(raw)) return raw as WireMatch[];\n if (raw && typeof raw === 'object' && Array.isArray((raw as { matches?: unknown }).matches)) {\n return (raw as { matches: WireMatch[] }).matches;\n }\n return [];\n}\n\nexport function useContactMatches(\n gql: ChatGraphQLSeam,\n contacts: ChatContactsSeam | undefined,\n viewer: ChatViewer | null,\n phone?: ChatPhoneSeam,\n): ContactMatchesState {\n const [permission, setPermission] = React.useState<ChatPermissionStatus | 'unsupported'>(\n contacts ? 'undetermined' : 'unsupported',\n );\n const [limited, setLimited] = React.useState(false);\n const [loading, setLoading] = React.useState(true);\n const [error, setError] = React.useState<string | null>(null);\n const [peers, setPeers] = React.useState<MatchedContact[]>([]);\n const [fromBook, setFromBook] = React.useState<MatchedContact[]>([]);\n const [invitable, setInvitable] = React.useState<MatchedContact[]>([]);\n const mounted = React.useRef(true);\n\n React.useEffect(() => {\n mounted.current = true;\n return () => {\n mounted.current = false;\n };\n }, []);\n\n const loadPeers = React.useCallback(async () => {\n try {\n let rows: DirectoryMember[] = [];\n if (phone?.listMembers) {\n const matches = await phone.listMembers();\n rows = Object.values(matches).map((m) => ({\n phoneE164: m.phoneE164,\n userId: m.userId,\n displayName: m.displayName,\n avatarUrl: m.avatarUrl ?? null,\n }));\n } else {\n const res = await gql.query<{ yantraChatMembers?: DirectoryMember[] | null }>(\n YANTRA_CHAT_MEMBERS_QUERY,\n );\n if (res.errors?.length) {\n if (!mounted.current) return;\n setError(res.errors[0].message);\n return;\n }\n rows = res.data?.yantraChatMembers ?? [];\n }\n if (!mounted.current) return;\n const viewerId = viewer?.userId;\n setPeers(\n rows\n .filter((r) => Boolean(r.userId) && r.userId !== viewerId && /^[a-f0-9]{24}$/i.test(r.userId))\n .map(memberToContact),\n );\n } catch (e) {\n if (!mounted.current) return;\n setError(e instanceof Error ? e.message : 'Could not load Yantra Chat members');\n }\n }, [gql, phone, viewer?.userId]);\n\n const sync = React.useCallback(async () => {\n if (!contacts) {\n await loadPeers();\n if (mounted.current) setLoading(false);\n return;\n }\n setLoading(true);\n setError(null);\n try {\n await loadPeers();\n // Re-checked on every sync: the user can widen or narrow access in Settings at any time.\n if (contacts.isLimited) {\n const isLimited = await contacts.isLimited().catch(() => false);\n if (mounted.current) setLimited(isLimited);\n }\n const raw = await contacts.read();\n // Normalisation drops unmatchable numbers and the viewer's own\n // card, which almost everyone has saved.\n // Numbers saved without a country code are read against the device region AND the\n // viewer's verified country: the device may report US for a user whose contacts are Indian.\n const regions = [contacts.defaultRegion, regionFromE164(viewer?.phoneE164)];\n const normalized = normalizeContacts(raw, regions, viewer?.phoneE164 ?? null);\n const numbers = collectLookupNumbers(normalized);\n\n if (!numbers.length) {\n if (!mounted.current) return;\n setFromBook([]);\n setInvitable(normalized);\n setLoading(false);\n return;\n }\n\n let matchedNumbers: Map<string, any>;\n\n if (phone?.matchContacts) {\n // New phone-based membership: use connector to match by E.164 phone number\n try {\n const matches = await phone.matchContacts(numbers);\n matchedNumbers = new Map(Object.entries(matches).map(([phoneE164, match]) => [phoneE164, match]));\n } catch (err) {\n if (!mounted.current) return;\n setError(err instanceof Error ? err.message : 'Could not match contacts');\n setFromBook([]);\n setInvitable(normalized);\n setLoading(false);\n return;\n }\n } else {\n // Legacy hashed directory approach\n const byHash = new Map<string, string>();\n for (const n of numbers) byHash.set(sha256(n), n);\n\n const res = await gql.query(CONTACT_MATCHES_QUERY, { phoneHashes: Array.from(byHash.keys()) });\n if (!mounted.current) return;\n\n matchedNumbers = new Map<string, any>();\n for (const m of readMatches(res.data)) {\n const number = m?.phoneHash ? byHash.get(m.phoneHash) : undefined;\n if (number && m?.userId) matchedNumbers.set(number, m);\n }\n\n if (res.errors?.length) {\n setError(res.errors[0].message);\n }\n }\n\n const here: MatchedContact[] = [];\n const rest: MatchedContact[] = [];\n for (const c of normalized) {\n const hit = c.e164.map((n) => matchedNumbers.get(n)).find(Boolean);\n if (hit?.userId) {\n here.push({\n ...c,\n match: {\n userId: String(hit.userId),\n // Prefer the name from THEIR account over the one in\n // your address book only when yours is missing -\n // you called them \"Mum\" for a reason.\n displayName: c.displayName || hit.displayName || hit.username || 'Unknown',\n picture: hit.avatarUrl ?? hit.picture ?? null,\n },\n });\n } else {\n rest.push(c);\n }\n }\n\n here.sort((a, b) => a.displayName.localeCompare(b.displayName));\n rest.sort((a, b) => a.displayName.localeCompare(b.displayName));\n setFromBook(here);\n setInvitable(rest);\n } catch (e) {\n if (!mounted.current) return;\n setError(e instanceof Error ? e.message : 'Could not read your contacts.');\n } finally {\n if (mounted.current) setLoading(false);\n }\n }, [contacts, gql, viewer, phone, loadPeers]);\n\n React.useEffect(() => {\n void loadPeers().finally(() => {\n if (mounted.current) setLoading(false);\n });\n }, [loadPeers]);\n\n // Check the CURRENT status without prompting, so the screen can offer the\n // right action - ask, or deep-link to Settings after a previous denial.\n React.useEffect(() => {\n let cancelled = false;\n if (!contacts) {\n setPermission('unsupported');\n return () => undefined;\n }\n void (async () => {\n const status = await contacts.getPermission();\n if (cancelled || !mounted.current) return;\n setPermission(status);\n if (status === 'granted') void sync();\n })();\n return () => {\n cancelled = true;\n };\n }, [contacts, sync]);\n\n const requestAccess = React.useCallback(async () => {\n if (!contacts) return;\n const status = await contacts.requestPermission();\n if (!mounted.current) return;\n setPermission(status);\n if (status === 'granted') await sync();\n }, [contacts, sync]);\n\n // Reopens the address book afterwards: the user may have just shared more people.\n const chooseMoreContacts = React.useMemo(\n () =>\n contacts?.chooseMoreContacts\n ? async () => {\n await contacts.chooseMoreContacts?.();\n await sync();\n }\n : undefined,\n [contacts, sync],\n );\n\n const onYantra = React.useMemo(\n () => mergeOnYantra(peers, fromBook, viewer?.userId),\n [peers, fromBook, viewer?.userId],\n );\n\n return {\n permission,\n limited,\n loading,\n error,\n onYantra,\n invitable,\n requestAccess,\n refresh: sync,\n openSettings: async () => contacts?.openSettings(),\n chooseMoreContacts,\n };\n}\n"],"names":["_a"],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@adminide-stack/yantra-mobile",
3
- "version": "12.0.69-alpha.20",
3
+ "version": "12.0.69-alpha.21",
4
4
  "description": "Sample core for higher packages to depend on",
5
5
  "license": "ISC",
6
6
  "author": "CDMBase LLC",
@@ -13,6 +13,7 @@
13
13
  "build:clean": "rimraf lib",
14
14
  "build:lib": "rollup -c rollup.config.mjs",
15
15
  "build:lib:watch": "yarn build:lib -- --watch",
16
+ "gen:emoji-keywords": "node tools/gen-emoji-keywords.mjs",
16
17
  "jest": "./node_modules/.bin/jest",
17
18
  "prepublish": "yarn build",
18
19
  "test": "jest",
@@ -41,7 +42,7 @@
41
42
  "@messenger-box/platform-mobile": "*",
42
43
  "@react-native-async-storage/async-storage": "*",
43
44
  "@react-navigation/native": "*",
44
- "common": "12.0.69-alpha.19",
45
+ "common": "12.0.69-alpha.20",
45
46
  "expo-constants": "*",
46
47
  "expo-secure-store": "*",
47
48
  "expo-web-browser": "*",
@@ -58,5 +59,5 @@
58
59
  "typescript": {
59
60
  "definition": "lib/index.d.ts"
60
61
  },
61
- "gitHead": "efa32a1500f4e5695518657ab48e3ba60a474a0b"
62
+ "gitHead": "50d645d961c0bb3f954501897058dd80efbad750"
62
63
  }