@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.
- package/lib/features/messaging/ContactsScreen.js +61 -3
- package/lib/features/messaging/ContactsScreen.js.map +1 -1
- package/lib/features/messaging/MessageActions.js +11 -4
- package/lib/features/messaging/MessageActions.js.map +1 -1
- package/lib/features/messaging/NativeChatExperience.js +4 -1
- package/lib/features/messaging/NativeChatExperience.js.map +1 -1
- package/lib/features/messaging/chatInviteLink.js +2 -2
- package/lib/features/messaging/chatInviteLink.js.map +1 -1
- package/lib/features/messaging/emojiCatalog.js +26 -2
- package/lib/features/messaging/emojiCatalog.js.map +1 -1
- package/lib/features/messaging/emojiKeywords.js +1592 -0
- package/lib/features/messaging/emojiKeywords.js.map +1 -0
- package/lib/features/messaging/useContactMatches.js +13 -1
- package/lib/features/messaging/useContactMatches.js.map +1 -1
- package/package.json +4 -3
|
@@ -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.
|
|
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.
|
|
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": "
|
|
62
|
+
"gitHead": "50d645d961c0bb3f954501897058dd80efbad750"
|
|
62
63
|
}
|