diff --git a/src/browser/base/content/zen-popupset.inc.xhtml b/src/browser/base/content/zen-popupset.inc.xhtml index 89acfcade..043a877d4 100644 --- a/src/browser/base/content/zen-popupset.inc.xhtml +++ b/src/browser/base/content/zen-popupset.inc.xhtml @@ -190,6 +190,9 @@ + + + diff --git a/src/browser/base/content/zen-styles/zen-workspaces.css b/src/browser/base/content/zen-styles/zen-workspaces.css index a894596ac..8e1611460 100644 --- a/src/browser/base/content/zen-styles/zen-workspaces.css +++ b/src/browser/base/content/zen-styles/zen-workspaces.css @@ -258,6 +258,45 @@ } } + +/* Workspace icon picker styles */ +#PanelUI-zen-workspaces-icon-picker-wrapper { + display: flex; + flex-wrap: wrap; + justify-content: flex-start; + gap: 2px; +} + +#PanelUI-zen-workspaces-icon-search-bar { + display: flex; + position: sticky; + top: 0; + background-color: inherit; + z-index: 1000; + padding: 8px; + width: 100%; + margin: 0; + box-sizing: border-box; +} + +.workspace-icon-button { + min-width: 24px; + min-height: 24px; + font-size: 16px; + margin: 2px; + padding: 4px; +} + +#PanelUI-zen-workspaces-icon-search-input { + width: 100%; + padding: 8px 12px; + font-size: 14px; + border: 1px solid var(--panel-separator-color, #ccc); + border-radius: 4px; + box-sizing: border-box; + margin: 0; +} + #PanelUI-zen-workspaces-list toolbarbutton { padding: 5px; border-radius: var(--zen-button-border-radius); diff --git a/src/browser/base/zen-components/ZenEmojies.mjs b/src/browser/base/zen-components/ZenEmojies.mjs new file mode 100644 index 000000000..e342c2909 --- /dev/null +++ b/src/browser/base/zen-components/ZenEmojies.mjs @@ -0,0 +1 @@ +function zenGlobalEmojis() { return [['⌚','watch','watch, clock, time, wristwatch'],['⌛','hourglass','hourglass done, time, sand, clock'],['⏪','rewind','arrow, blue, rewind, fast reverse button, left, back'],['⏫','arrow_double_up','increase, arrow, fast up button, blue, up'],['⏬','arrow_double_down','decrease, down, arrow, blue, fast down button'],['⏰','alarm_clock','alarm clock, clock, alarm, time, red'],['⏳','hourglass_flowing_sand','hourglass not done, time, sand, clock'],['⚽','soccer','sports, football, soccer ball, ball, soccer, soccer ball,'],['⚾','baseball','ball, baseball, sports'],['⛄','snowman','snowman, snowman without snow, christmas, holidays, snow'],['⛅','partly_sunny','sun, sun behind cloud, cloudy, sunny, weather'],['⛎','ophiuchus','zodiac, horoscope, Ophiuchus, purple'],['⛔','no_entry','sign, red, stop, no entry'],['⛪','church','church, building, religion, worship, faith, holy'],['⛲','fountain','fountain, water, garden'],['⛳','golf','sports, golf, flag in hole, flag'],['⛵','sailboat','vessel, vacation, sailing, sea, ship, sailboat, water, boat, travel, ocean'],['⛺','tent','camp, camping, outdoor, tent, camping, shelter, nature, vacation'],['⛽','fuelpump','oil, petrol, fuel pump, gas, red, gas station, fuel'],['✅','white_check_mark','approve, check, check mark, tick, check mark button, accept, yes, success, task'],['✊','fist','justice, raised fist, solidarity, empowerment, fist, strength'],['✋','raised_hand','hand, stop, halt, raised hand'],['✨','sparkles','sparkles, stars, shine, AI, magic, beauty, creativity'],['❌','x','cross mark, cross, wrong, no, red'],['❎','negative_squared_cross_mark','cross, no, green,, cross mark button'],['❓','question','curiosity, question mark, question, punctuation, red'],['⭐','star','star, five, achievement, favorite, yellow, gold, space, universe'],['⭕','o','hoop, hollow red circle, o, circle, red, round'],['🀄','mahjong','mahjong red dragon, china, game'],['🃏','black_joker','card, joker, game, deck, gamble'],['🆎','ab','red,, AB button (blood type)'],['🆑','cl','CL button, red'],['🆒','cool','cool, blue, COOL button'],['🆓','free','free, blue, FREE button'],['🆔','id','authentication, security, purple, identification, id, verification, ID button'],['🆕','new','new, blue, NEW button'],['🆖','ng','blue, ana ng, NG button, ng'],['🆗','ok','blue, okay, ok, OK button'],['🆘','sos','SOS button, emergency, danger, red, help, sos'],['🆙','up','UP! button, up, blue'],['🆚','vs','versus, duel, orange, contest, challenge, vs, battle, competition, VS button'],['🈁','koko','here, blue, japanese, Japanese here button'],['🈚','u7121','Japanese free of charge button, orange, japanese'],['🈯','u6307','Japanese reserved button, japanese, green'],['🈲','u7981','Japanese prohibited button, red, japanese'],['🈳','u7a7a','blue, Japanese vacancy button, japanese'],['🈴','u5408','Japanese passing grade button, red, japanese'],['🈵','u6e80','Japanese no vacancy button, red, japanese'],['🈶','u6709','Japanese not free of charge button, orange, japanese'],['🈸','u7533','Japanese application button, orange, japanese'],['🈹','u5272','Japanese discount button, red, japanese'],['🈺','u55b6','Japanese open for business button, orange, japanese'],['🉐','ideograph_advantage','Japanese bargain button, red, japanese'],['🉑','accept','Japanese acceptable button, orange, japanese'],['🌀','cyclone','cyclone, spiral, Zen, purple, swirl, storm'],['🌁','foggy','foggy, bridge, cloudy'],['🌂','closed_umbrella',', umbrella, purple, rain, closed umbrella, weather'],['🌃','night_with_stars','night, city, night with stars, scenery'],['🌄','sunrise_over_mountains','sunrise, sunrise over mountains, sun, sunset, nature, scenery'],['🌅','sunrise','sun, sunset, sunrise, scenery, nature'],['🌆','city_dusk','cityscape at dusk, city,, scenery'],['🌇','city_sunset','city, evening, sunset, scenery'],['🌈','rainbow','rainbow, pride, gay'],['🌉','bridge_at_night','night, bridge, bridge at night'],['🌊','ocean','water wave, tsunami, water, blue, ocean, art, sea, wave'],['🌋','volcano','volcano, eruption, lava, fire, geological'],['🌌','milky_way','science, milky way, galaxy, cosmos, stars, blue, nebula'],['🌍','earth_africa','africa, blue, planet, school, map, world, earth, globe, globe showing Europe-Africa, geography'],['🌎','earth_americas','blue, planet, america, school, map, globe showing Americas, world, earth, globe, geography'],['🌏','earth_asia','globe showing Asia-Australia, blue, asia, planet, school, map, world, earth, globe, australia, geography'],['🌐','globe_with_meridians','globe with meridians, blue, tech, internet, www, world, network, technology, web'],['🌑','new_moon','moon, lunar, purple, night, new moon, space, astronomy'],['🌒','waxing_crescent_moon','night, waxing crescent moon, astronomy, space, moon'],['🌓','first_quarter_moon','night, first quarter moon, astronomy, space, moon'],['🌔','waxing_gibbous_moon','night, waxing gibbous moon, astronomy, space, moon'],['🌕','full_moon','night, astronomy, full moon, space, yellow, moon'],['🌖','waning_gibbous_moon','night, astronomy, waning gibbous moon, space, moon'],['🌗','last_quarter_moon','night, astronomy, last quarter moon, space, moon'],['🌘','waning_crescent_moon','night, astronomy, waning crescent moon, space, moon'],['🌙','crescent_moon','night, astronomy, crescent moon, space, moon'],['🌚','new_moon_with_face','night, face, new moon face, astronomy, purple, space, moon'],['🌛','first_quarter_moon_with_face','night, face, astronomy, first quarter moon face, smile, space, yellow, moon'],['🌜','last_quarter_moon_with_face','night, face, astronomy, smile, last quarter moon face, space, yellow, moon'],['🌝','full_moon_with_face','night, face, full moon face, astronomy, smile, space, yellow, moon'],['🌞','sun_with_face','sun with face, night, face, astronomy, smile, space, yellow, moon'],['🌟','star2','sparkle, night, star, glowing star, yellow'],['🌠','stars','night, falling, star, cosmos, shooting star'],['🌭','hotdog','hotdog, hot dog, food'],['🌮','taco','taco, food'],['🌯','burrito','food, wrap, shawarma, burrito'],['🌰','chestnut','food, chestnut, onion'],['🌱','seedling',', green, plant, growth, seedling'],['🌲','evergreen_tree','holidays, christmas, green, evergreen tree, spruce, tree'],['🌳','deciduous_tree','oak, deciduous tree, environment, plant, nature, forest, tree, green'],['🌴','palm_tree','palm tree, vacation, palm, island, tree, beach'],['🌵','cactus','cactus, desert, green, nature, plant'],['🌷','tulip','flower, tulip, pink, nature, plant'],['🌸','cherry_blossom','pink, bloom, plant, nature, flower, sakura, cherry blossom'],['🌹','rose','flower, rose, red, nature, plant'],['🌺','hibiscus','hibiscus, pink, plant, nature, flower'],['🌻','sunflower','sunflower, nature, plant, flower, yellow'],['🌼','blossom','blossom, plant, nature, flower, white'],['🌽','corn','food, corn, ear of corn'],['🌾','ear_of_rice','food, sheaf of rice, wheat'],['🌿','herb','herb, plant'],['🍀','four_leaf_clover','lucky, four leaf clover, fortune, clover, green, plant'],['🍁','maple_leaf','maple leaf, autumn, plant, nature, leaf, fall, red, canada'],['🍂','fallen_leaf','brown, leaf, autumn, plant, nature, fall, dead leaves, fallen leaf'],['🍃','leaves','nature, green, leaf, leaf fluttering in wind, plant'],['🍄','mushroom','mushroom, nature, plant, fungi, toadstool'],['🍅','tomato','tomato, food, vegetable, red'],['🍆','eggplant','eggplant, food, vegetable, purple'],['🍇','grapes','food, fruit, grapes, grape, purple'],['🍈','melon','melon, fruit, food'],['🍉','watermelon','watermelon, fruit, food, red'],['🍊','tangerine','food, fruit, tangerine, orange'],['🍋','lemon','lemon, food, fruit, yellow'],['🍌','banana','banana, food, fruit, berry, yellow'],['🍍','pineapple','pineapple, food, fruit'],['🍎','apple','food, red apple, fruit, apple, school,, red'],['🍏','green_apple','food, fruit, green, apple, green apple'],['🍐','pear','pear, food, fruit, green'],['🍑','peach','peach, food, fruit'],['🍒','cherries','food, fruit, cherries, cherry, red'],['🍓','strawberry','strawberry, berry, fruit, food, red'],['🍔','hamburger','hamburger, america, food'],['🍕','pizza','pizza, food'],['🍖','meat_on_bone','food, meat on bone, ham'],['🍗','poultry_leg','chicken, poultry leg, food'],['🍘','rice_cracker','rice cracker, rice'],['🍙','rice_ball','onigiri, rice, rice ball, food'],['🍚','rice','food, rice, cooked rice'],['🍛','curry','food, rice, curry, curry rice'],['🍜','ramen','food, steaming bowl, ramen, noodles'],['🍝','spaghetti','food, pasta, spaghetti'],['🍞','bread','bread, food'],['🍟','fries','fries, french fries, french, food'],['🍠','sweet_potato','food, roasted, roasted sweet potato, sweet, potato'],['🍡','dango','dango, food'],['🍢','oden','oden, food'],['🍣','sushi','sushi, salmon, food'],['🍤','fried_shrimp','food, prawn, fried shrimp'],['🍥','fish_cake',', fish cake with swirl'],['🍦','icecream','desert, icecrean, soft ice cream, food'],['🍧','shaved_ice','desert, icecrean, shaved ice, food'],['🍨','ice_cream','desert, ice cream, icecrean, food'],['🍩','doughnut','desert, donut, doughnut, food'],['🍪','cookie','cookie, desert, food'],['🍫','chocolate_bar','desert, chocolate, chocolate bar, food'],['🍬','candy','candy, desert, food'],['🍭','lollipop','desert, candy, lollipop, food'],['🍮','custard','custard, food, dessert'],['🍯','honey_pot','food, honey, honey pot'],['🍰','cake','food, shortcake, cakedesert'],['🍱','bento','bento, rice, bento box, food'],['🍲','stew','food, soup, pot of food'],['🍳','cooking','food, cooking, omelette, egg'],['🍴','fork_and_knife','cutlery, food, fork and knife, fork, knife'],['🍵','tea','chai, food, drink, tea, teacup without handle'],['🍶','sake','sake, drink'],['🍷','wine_glass','food, wine glass, wine, drink'],['🍸','cocktail','food, glass, cocktail glass, drink, cocktail, martini'],['🍹','tropical_drink','drink, tropical drink, long island, food'],['🍺','beer','food, beer mug, drink, beer'],['🍻','beers','food, clinking beer mugs, drink, beer'],['🍼','baby_bottle','food, baby bottle, drink, baby, milk'],['🍾','champagne','drink, bottle with popping cork, champagne, food'],['🍿','popcorn','popcorn, food'],['🎀','ribbon','decoration, present, bow, ribbon, cute'],['🎁','gift','wrapped gift, present, christmas'],['🎂','birthday','birthday, birthday cake, cake'],['🎃','jack_o_lantern','scary, pumpkin, spooky, fall, orange, halloween, jack-o-lantern'],['🎄','christmas_tree','Christmas tree, tree, christmas, holidays'],['🎅','santa','santa, Santa Claus, christmas, holidays'],['🎆','fireworks','fireworks, party'],['🎇','sparkler','fireworks, sparkler, party'],['🎈','balloon','baloon, red, balloon'],['🎉','tada','confetti, party, party popper, celebration'],['🎊','confetti_ball','confetti, party, confetti ball, celebration'],['🎋','tanabata_tree','tanabata, tree, tanabata tree'],['🎌','crossed_flags',', crossed flags'],['🎍','bamboo','bamboo, pine decoration'],['🎎','dolls',', Japanese dolls'],['🎏','flags',', carp streamer'],['🎐','wind_chime',', wind chime'],['🎑','rice_scene',', moon viewing ceremony'],['🎒','school_satchel','school, backpack, bag'],['🎓','mortar_board','graduation, graduate, education, school, graduation cap, university'],['🎠','carousel_horse','park, carousel, carousel horse, pony'],['🎡','ferris_wheel','park, ferris, ferris wheel, wheel'],['🎢','roller_coaster','park, roller coaster, rollercoaster'],['🎣','fishing_pole_and_fish','fishing, fishing pole, fish, rod'],['🎤','microphone','microphone, speech, talk, singing'],['🎥','movie_camera','recording, movie camera, cinema, film, video, camera, content creation'],['🎦','cinema','camera, blue, recording, video, film, cinema'],['🎧','headphones','music, headphone, headphones, audio'],['🎨','art','colors, artist palette, creativity, design, painting, art, inspiration'],['🎩','tophat','hat, top hat, magic'],['🎪','circus_tent','circus, circus tent'],['🎫','ticket','ticket'],['🎬','clapper','video editing, media, video, clapper board, audiovisual'],['🎭','performing_arts','theater, performing arts, drama, masks'],['🎮','video_game','xbox, ps4, gaming, video game, playstation'],['🎯','dart','direct hit, goal, target, task'],['🎰','slot_machine','slot, casino, slot machine, games, gambling'],['🎱','8ball','billiard, games, ball, 8, eight, pool 8 ball'],['🎲','game_die','dice, luck, games, one, 1, game die'],['🎳','bowling','bowling, games, games'],['🎴','flower_playing_cards','play, card, flower playing cards'],['🎵','musical_note','note, musical note, song, music'],['🎶','notes','note, song, music, musical notes'],['🎷','saxophone','instrument, song, music, sax, saxophone'],['🎸','guitar','music, guitar, instrument, electric, song'],['🎹','musical_keyboard','instrument, song, music, piano, musical keyboard'],['🎺','trumpet','music, trumpet, instrument, song'],['🎻','violin','music, instrument, violin, sound'],['🎼','musical_score','musical score, sound, music'],['🎽','running_shirt_with_sash','clothes, running shirt, vest'],['🎾','tennis','tennis, sport'],['🎿','ski','scating, sport, skis'],['🏀','basketball','basketball, sport, orange'],['🏁','checkered_flag','finish, sport, chequered flag, race'],['🏂','snowboarder','snowboarder, snowboard, sport, snow'],['🏃','person_running','person running, sport, running'],['🏄','person_surfing','person surfing, surfing, sport'],['🏅','medal','gold, win, medal, sports medal'],['🏆','trophy','trophy, win, gold'],['🏇','horse_racing','horse racing, horse, sport, racing'],['🏈','football','american football, brown, football, sport'],['🏉','rugby_football','rugby football, football, sport'],['🏊','person_swimming','sport, swimming, person swimming'],['🏏','cricket_game','baseball, sport, cricket, cricket game'],['🏐','volleyball','white, football, volleyball, sport'],['🏑','field_hockey','hockey, field hockey, sport, field'],['🏒','hockey','hockey, ice hockey, sport'],['🏓','ping_pong','ping pong, tennis, sport'],['🏠','house','home, house, building'],['🏡','house_with_garden','building, house with garden, home, house'],['🏢','office','office building, work, building, office'],['🏣','post_office','building, post, office, Japanese post office'],['🏤','european_post_office','post office, building, post, office'],['🏥','hospital','hospital, building, health'],['🏦','bank','bank, money, building'],['🏧','atm','atm, ATM sign, blue'],['🏨','hotel','hotel, building'],['🏩','love_hotel','love, building, hotel, love hotel'],['🏪','convenience_store','store, building, shop, groceries, convenience store, convenience'],['🏫','school','school, building'],['🏬','department_store','store, building, department store'],['🏭','factory','factory, work, building'],['🏮','izakaya_lantern','lamp, red paper lantern, light'],['🏯','japanese_castle','building, Japanese castle, temple, castle, fortress'],['🏰','european_castle','temple, castle, fortress, building'],['🏴','flag_black','black flag, flag, black'],['🏸','badminton','badminton, racket, sport'],['🏹','bow_and_arrow','archery, bow and arrow, sport'],['🏺','amphora','amphora, vase'],['🐀','rat','animal, rat'],['🐁','mouse2','animal, mouse'],['🐂','ox','animal, ox'],['🐃','water_buffalo',', water buffalo'],['🐄','cow2','animal, cow'],['🐅','tiger2','animal, tiger'],['🐆','leopard','animal, leopard'],['🐇','rabbit2','animal, rabbit, bunny, hair'],['🐈','cat2','animal, cat'],['🐉','dragon','animal, dragon'],['🐊','crocodile','alagator, animal, crocodile, green'],['🐋','whale2','animal, whale, blue'],['🐌','snail','animal, snail'],['🐍','snake','animal, snake'],['🐎','racehorse','animal, horse'],['🐏','ram','animal, ram'],['🐐','goat','animal, goat'],['🐑','sheep','animal, ewe'],['🐒','monkey','animal, monkey'],['🐓','rooster','animal, rooster'],['🐔','chicken','chicken, animal'],['🐕','dog2','animal, dog'],['🐖','pig2','animal, pig'],['🐗','boar','animal, boar'],['🐘','elephant','animal, elephant'],['🐙','octopus','animal, octopus'],['🐚','shell','spiral shell, seashell, sea, beach, ocean'],['🐛','bug','animal, insect, bug'],['🐜','ant','animal, insect, ant, bug'],['🐝','bee','animal, insect, bug, honeybee'],['🐞','beetle','animal, insect, bug, lady beetle'],['🐟','fish','animal, fish'],['🐠','tropical_fish','tropical fish, animal'],['🐡','blowfish','animal, blowfish'],['🐢','turtle','animal, turtle, green'],['🐣','hatching_chick','hatching chick, animal'],['🐤','baby_chick','animal, baby chick'],['🐥','hatched_chick','animal, front-facing baby chick'],['🐦','bird','animal, bird'],['🐧','penguin','linux, animal, penguin'],['🐨','koala','animal, koala'],['🐩','poodle','animal, poodle'],['🐪','dromedary_camel','animal, camel'],['🐫','camel','animal, two-hump camel'],['🐬','dolphin','animal, dolphin'],['🐭','mouse','animal, mouse face, face'],['🐮','cow','animal, face, cow face'],['🐯','tiger','tiger face, animal, face'],['🐰','rabbit','animal, cute, rabbit face'],['🐱','cat','animal, cat face, face, cute'],['🐲','dragon_face','animal, dragon face'],['🐳','whale','animal, spouting whale'],['🐴','horse','animal, face, horse face'],['🐵','monkey_face','monkey face, animal, face'],['🐶','dog','animal, face, dog face'],['🐷','pig','animal, face, pig face'],['🐸','frog','frog, animal, face'],['🐹','hamster','animal, face, hamster'],['🐺','wolf','animal, face, wolf'],['🐻','bear','animal, face, bear'],['🐼','panda_face','animal, panda'],['🐽','pig_nose','animal, pig nose, nose'],['🐾','feet','animal, tracks, paw prints'],['👀','eyes','looking, eyes'],['👂','ear','listen, sound, ear'],['👃','nose','nose, smell'],['👄','lips','mouth'],['👅','tongue','tongue, silly, mouth'],['👆','point_up_2',', backhand index pointing up'],['👇','point_down',', backhand index pointing down'],['👈','point_left',', backhand index pointing left'],['👉','point_right',', backhand index pointing right'],['👊','punch',', oncoming fist'],['👋','wave',', waving hand'],['👌','ok_hand',', OK hand'],['👍','thumbsup',', thumbs up'],['👎','thumbsdown',', thumbs down'],['👏','clap',', clapping hands'],['👐','open_hands',', open hands'],['👑','crown',', crown'],['👒','womans_hat',', woman’s hat'],['👓','eyeglasses',', glasses'],['👔','necktie',', necktie'],['👕','shirt',', t-shirt'],['👖','jeans',', jeans'],['👗','dress',', dress'],['👘','kimono',', kimono'],['👙','bikini',', bikini'],['👚','womans_clothes',', woman’s clothes'],['👛','purse',', purse'],['👜','handbag',', handbag'],['👝','pouch',', clutch bag'],['👞','mans_shoe',', man’s shoe'],['👟','athletic_shoe',', running shoe'],['👠','high_heel',', high-heeled shoe'],['👡','sandal',', woman’s sandal'],['👢','boot',', woman’s boot'],['👣','footprints',', footprints'],['👤','bust_in_silhouette',', bust in silhouette'],['👥','busts_in_silhouette',', busts in silhouette'],['👦','boy',', boy'],['👧','girl',', girl'],['👨','man',', man'],['👩','woman',', woman'],['👪','family',', family'],['👫','couple',', woman and man holding hands'],['👬','two_men_holding_hands',', men holding hands'],['👭','two_women_holding_hands',', women holding hands'],['👮','police_officer',', police officer'],['👯','people_with_bunny_ears_partying',', people with bunny ears'],['👰','bride_with_veil',', bride with veil'],['👱','blond_haired_person',', person: blond hair'],['👲','man_with_chinese_cap',', man with skullcap'],['👳','person_wearing_turban',', person wearing turban'],['👴','older_man',', old man'],['👵','older_woman',', old woman'],['👶','baby',', baby'],['👷','construction_worker',', construction worker'],['👸','princess',', princess'],['👹','japanese_ogre',', ogre'],['👺','japanese_goblin',', goblin'],['👻','ghost','ghost, halloween'],['👼','angel',', baby angel'],['👽','alien',', alien'],['👾','space_invader',', alien monster'],['👿','imp',', angry face with horns'],['💀','skull','spooky, skull, horror, bones'],['💁','person_tipping_hand','person tipping hand, questions'],['💂','guard',', guard'],['💃','dancer',', woman dancing'],['💄','lipstick','makeup, lipstick'],['💅','nail_care','beauty, nail polish, makeup'],['💆','person_getting_massage',', person getting massage'],['💇','person_getting_haircut',', person getting haircut'],['💈','barber',', barber pole'],['💉','syringe',', syringe'],['💊','pill',', pill'],['💋','kiss',', kiss mark'],['💌','love_letter',', love letter'],['💍','ring',', ring'],['💎','gem',', gem stone'],['💏','couplekiss',', kiss'],['💐','bouquet',', bouquet'],['💑','couple_with_heart',', couple with heart'],['💒','wedding',', wedding'],['💓','heartbeat',', beating heart'],['💔','broken_heart',', broken heart'],['💕','two_hearts',', two hearts'],['💖','sparkling_heart',', sparkling heart'],['💗','heartpulse',', growing heart'],['💘','cupid',', heart with arrow'],['💙','blue_heart',', blue heart'],['💚','green_heart',', green heart'],['💛','yellow_heart',', yellow heart'],['💜','purple_heart',', purple heart'],['💝','gift_heart',', heart with ribbon'],['💞','revolving_hearts',', revolving hearts'],['💟','heart_decoration',', heart decoration'],['💠','diamond_shape_with_a_dot_inside',', diamond with a dot'],['💡','bulb',', light bulb'],['💢','anger',', anger symbol'],['💣','bomb',', bomb'],['💤','zzz',', zzz'],['💥','boom',', collision'],['💦','sweat_drops',', sweat droplets'],['💧','droplet',', droplet'],['💨','dash',', dashing away'],['💩','poop',', pile of poo'],['💪','muscle',', flexed biceps'],['💫','dizzy',', dizzy'],['💬','speech_balloon',', speech balloon'],['💭','thought_balloon',', thought balloon'],['💮','white_flower',', white flower'],['💯','100',', hundred points'],['💰','moneybag',', money bag'],['💱','currency_exchange',', currency exchange'],['💲','heavy_dollar_sign',', heavy dollar sign'],['💳','credit_card',', credit card'],['💴','yen',', yen banknote'],['💵','dollar',', dollar banknote'],['💶','euro',', euro banknote'],['💷','pound',', pound banknote'],['💸','money_with_wings',', money with wings'],['💹','chart',', chart increasing with yen'],['💺','seat',', seat'],['💻','computer',', laptop'],['💼','briefcase',', briefcase'],['💽','minidisc',', computer disk'],['💾','floppy_disk',', floppy disk'],['💿','cd',', optical disk'],['📀','dvd',', dvd'],['📁','file_folder',', file folder'],['📂','open_file_folder',', open file folder'],['📃','page_with_curl',', page with curl'],['📄','page_facing_up',', page facing up'],['📅','date',', calendar'],['📆','calendar',', tear-off calendar'],['📇','card_index',', card index'],['📈','chart_with_upwards_trend',', chart increasing'],['📉','chart_with_downwards_trend',', chart decreasing'],['📊','bar_chart',', bar chart'],['📋','clipboard',', clipboard'],['📌','pushpin',', pushpin'],['📍','round_pushpin',', round pushpin'],['📎','paperclip',', paperclip'],['📏','straight_ruler',', straight ruler'],['📐','triangular_ruler',', triangular ruler'],['📑','bookmark_tabs',', bookmark tabs'],['📒','ledger',', ledger'],['📓','notebook',', notebook'],['📔','notebook_with_decorative_cover',', notebook with decorative cover'],['📕','closed_book',', closed book'],['📖','book',', open book'],['📗','green_book',', green book'],['📘','blue_book',', blue book'],['📙','orange_book',', orange book'],['📚','books','books, study, school'],['📛','name_badge',', name badge'],['📜','scroll',', scroll'],['📝','pencil','pencil, memo, note, school, study'],['📞','telephone_receiver','call, telephone receiver, phone'],['📟','pager',', pager'],['📠','fax',', fax machine'],['📡','satellite',', satellite antenna'],['📢','loudspeaker',', loudspeaker'],['📣','mega',', megaphone'],['📤','outbox_tray',', outbox tray'],['📥','inbox_tray',', inbox tray'],['📦','package',', package'],['📧','e-mail','mail, e-mail'],['📨','incoming_envelope','mail, incoming envelope'],['📩','envelope_with_arrow','mail, envelope with arrow'],['📪','mailbox_closed','closed mailbox with lowered flag, mail'],['📫','mailbox','mail, closed mailbox with raised flag'],['📬','mailbox_with_mail','mail, open mailbox with raised flag'],['📭','mailbox_with_no_mail','mail, open mailbox with lowered flag'],['📮','postbox',', postbox'],['📯','postal_horn',', postal horn'],['📰','newspaper',', newspaper'],['📱','iphone',', mobile phone'],['📲','calling',', mobile phone with arrow'],['📳','vibration_mode',', vibration mode'],['📴','mobile_phone_off',', mobile phone off'],['📵','no_mobile_phones',', no mobile phones'],['📶','signal_strength',', antenna bars'],['📷','camera','photo, photography, camera'],['📸','camera_with_flash','camera with flash, photo, photography'],['📹','video_camera',', video camera'],['📺','tv',', television'],['📻','radio',', radio'],['📼','vhs',', videocassette'],['📿','prayer_beads',', prayer beads'],['🔀','twisted_rightwards_arrows',', shuffle tracks button'],['🔁','repeat',', repeat button'],['🔂','repeat_one',', repeat single button'],['🔃','arrows_clockwise',', clockwise vertical arrows'],['🔄','arrows_counterclockwise',', counterclockwise arrows button'],['🔅','low_brightness',', dim button'],['🔆','high_brightness',', bright button'],['🔇','mute',', muted speaker'],['🔈','speaker',', speaker low volume'],['🔉','sound',', speaker medium volume'],['🔊','loud_sound',', speaker high volume'],['🔋','battery',', battery'],['🔌','electric_plug',', electric plug'],['🔍','mag','magnifying glass tilted left, search'],['🔎','mag_right','search, magnifying glass tilted right'],['🔏','lock_with_ink_pen',', locked with pen'],['🔐','closed_lock_with_key',', locked with key'],['🔑','key',', key'],['🔒','lock',', locked'],['🔓','unlock',', unlocked'],['🔔','bell',', bell'],['🔕','no_bell',', bell with slash'],['🔖','bookmark',', bookmark'],['🔗','link',', link'],['🔘','radio_button',', radio button'],['🔙','back',', BACK arrow'],['🔚','end',', END arrow'],['🔛','on',', ON! arrow'],['🔜','soon',', SOON arrow'],['🔝','top',', TOP arrow'],['🔞','underage',', no one under eighteen'],['🔟','keycap_ten',', keycap: 10'],['🔠','capital_abcd',', input latin uppercase'],['🔡','abcd',', input latin lowercase'],['🔢','1234',', input numbers'],['🔣','symbols',', input symbols'],['🔤','abc',', input latin letters'],['🔥','fire',', fire'],['🔦','flashlight',', flashlight'],['🔧','wrench',', wrench'],['🔨','hammer',', hammer'],['🔩','nut_and_bolt',', nut and bolt'],['🔪','knife',', kitchen knife'],['🔫','gun',', pistol'],['🔬','microscope',', microscope'],['🔭','telescope',', telescope'],['🔮','crystal_ball',', crystal ball'],['🔯','six_pointed_star',', dotted six-pointed star'],['🔰','beginner',', Japanese symbol for beginner'],['🔱','trident',', trident emblem'],['🔲','black_square_button',', black square button'],['🔳','white_square_button',', white square button'],['🔴','red_circle',', red circle'],['🔵','blue_circle',', blue circle'],['🔶','large_orange_diamond',', large orange diamond'],['🔷','large_blue_diamond',', large blue diamond'],['🔸','small_orange_diamond',', small orange diamond'],['🔹','small_blue_diamond',', small blue diamond'],['🔺','small_red_triangle',', red triangle pointed up'],['🔻','small_red_triangle_down',', red triangle pointed down'],['🔼','arrow_up_small',', upwards button'],['🔽','arrow_down_small',', downwards button'],['🕋','kaaba',', kaaba'],['🕌','mosque',', mosque'],['🕍','synagogue',', synagogue'],['🕎','menorah',', menorah'],['🕐','clock1',', one o’clock'],['🕑','clock2',', two o’clock'],['🕒','clock3',', three o’clock'],['🕓','clock4',', four o’clock'],['🕔','clock5',', five o’clock'],['🕕','clock6',', six o’clock'],['🕖','clock7',', seven o’clock'],['🕗','clock8',', eight o’clock'],['🕘','clock9',', nine o’clock'],['🕙','clock10',', ten o’clock'],['🕚','clock11',', eleven o’clock'],['🕛','clock12',', twelve o’clock'],['🕜','clock130',', one-thirty'],['🕝','clock230',', two-thirty'],['🕞','clock330',', three-thirty'],['🕟','clock430',', four-thirty'],['🕠','clock530',', five-thirty'],['🕡','clock630',', six-thirty'],['🕢','clock730',', seven-thirty'],['🕣','clock830',', eight-thirty'],['🕤','clock930',', nine-thirty'],['🕥','clock1030',', ten-thirty'],['🕦','clock1130',', eleven-thirty'],['🕧','clock1230',', twelve-thirty'],['🖕','middle_finger',', middle finger'],['🖖','vulcan',', vulcan salute'],['🗻','mount_fuji',', mount fuji'],['🗼','tokyo_tower',', Tokyo tower'],['🗽','statue_of_liberty',', Statue of Liberty'],['🗾','japan',', map of Japan'],['🗿','moyai',', moai'],['😀','grinning',', grinning face'],['😁','grin',', beaming face with smiling eyes'],['😂','joy',', face with tears of joy'],['😃','smiley',', grinning face with big eyes'],['😄','smile',', grinning face with smiling eyes'],['😅','sweat_smile',', grinning face with sweat'],['😆','laughing',', grinning squinting face'],['😇','innocent',', smiling face with halo'],['😈','smiling_imp',', smiling face with horns'],['😉','wink',', winking face'],['😊','blush',', smiling face with smiling eyes'],['😋','yum',', face savoring food'],['😌','relieved',', relieved face'],['😍','heart_eyes',', smiling face with heart-eyes'],['😎','sunglasses',', smiling face with sunglasses'],['😏','smirk',', smirking face'],['😐','neutral_face',', neutral face'],['😑','expressionless',', expressionless face'],['😒','unamused',', unamused face'],['😓','sweat',', downcast face with sweat'],['😔','pensive',', pensive face'],['😕','confused',', confused face'],['😖','confounded',', confounded face'],['😗','kissing',', kissing face'],['😘','kissing_heart',', face blowing a kiss'],['😙','kissing_smiling_eyes',', kissing face with smiling eyes'],['😚','kissing_closed_eyes',', kissing face with closed eyes'],['😛','stuck_out_tongue',', face with tongue'],['😜','stuck_out_tongue_winking_eye',', winking face with tongue'],['😝','stuck_out_tongue_closed_eyes',', squinting face with tongue'],['😞','disappointed',', disappointed face'],['😟','worried',', worried face'],['😠','angry',', angry face'],['😡','rage',', pouting face'],['😢','cry',', crying face'],['😣','persevere',', persevering face'],['😤','triumph',', face with steam from nose'],['😥','disappointed_relieved',', sad but relieved face'],['😦','frowning',', frowning face with open mouth'],['😧','anguished',', anguished face'],['😨','fearful',', fearful face'],['😩','weary',', weary face'],['😪','sleepy',', sleepy face'],['😫','tired_face',', tired face'],['😬','grimacing',', grimacing face'],['😭','sob',', loudly crying face'],['😮','open_mouth',', face with open mouth'],['😯','hushed',', hushed face'],['😰','cold_sweat',', anxious face with sweat'],['😱','scream',', face screaming in fear'],['😲','astonished',', astonished face'],['😳','flushed',', flushed face'],['😴','sleeping',', sleeping face'],['😵','dizzy_face',', dizzy face'],['😶','no_mouth',', face without mouth'],['😷','mask',', face with medical mask'],['😸','smile_cat',', grinning cat with smiling eyes'],['😹','joy_cat',', cat with tears of joy'],['😺','smiley_cat','grinning cat, kitty'],['😻','heart_eyes_cat',', smiling cat with heart-eyes'],['😼','smirk_cat',', cat with wry smile'],['😽','kissing_cat',', kissing cat'],['😾','pouting_cat',', pouting cat'],['😿','crying_cat_face',', crying cat'],['🙀','scream_cat',', weary cat'],['🙁','slight_frown',', slightly frowning face'],['🙂','slight_smile',', slightly smiling face'],['🙃','upside_down',', upside-down face'],['🙄','rolling_eyes',', face with rolling eyes'],['🙅','person_gesturing_no',', person gesturing NO'],['🙆','person_gesturing_ok',', person gesturing OK'],['🙇','person_bowing',', person bowing'],['🙈','see_no_evil',', see-no-evil monkey'],['🙉','hear_no_evil',', hear-no-evil monkey'],['🙊','speak_no_evil',', speak-no-evil monkey'],['🙋','person_raising_hand',', person raising hand'],['🙌','raised_hands',', raising hands'],['🙍','person_frowning',', person frowning'],['🙎','person_pouting',', person pouting'],['🙏','pray',', folded hands'],['🚀','rocket',', rocket'],['🚁','helicopter',', helicopter'],['🚂','steam_locomotive',', locomotive'],['🚃','railway_car',', railway car'],['🚄','bullettrain_side',', high-speed train'],['🚅','bullettrain_front',', bullet train'],['🚆','train2',', train'],['🚇','metro',', metro'],['🚈','light_rail',', light rail'],['🚉','station',', station'],['🚊','tram',', tram'],['🚋','train',', tram car'],['🚌','bus',', bus'],['🚍','oncoming_bus',', oncoming bus'],['🚎','trolleybus',', trolleybus'],['🚏','busstop',', bus stop'],['🚐','minibus',', minibus'],['🚑','ambulance',', ambulance'],['🚒','fire_engine',', fire engine'],['🚓','police_car',', police car'],['🚔','oncoming_police_car',', oncoming police car'],['🚕','taxi',', taxi'],['🚖','oncoming_taxi',', oncoming taxi'],['🚗','red_car',', automobile'],['🚘','oncoming_automobile',', oncoming automobile'],['🚙','blue_car',', sport utility vehicle'],['🚚','truck',', delivery truck'],['🚛','articulated_lorry',', articulated lorry'],['🚜','tractor',', tractor'],['🚝','monorail',', monorail'],['🚞','mountain_railway',', mountain railway'],['🚟','suspension_railway',', suspension railway'],['🚠','mountain_cableway',', mountain cableway'],['🚡','aerial_tramway',', aerial tramway'],['🚢','ship',', ship'],['🚣','person_rowing_boat',', person rowing boat'],['🚤','speedboat',', speedboat'],['🚥','traffic_light',', horizontal traffic light'],['🚦','vertical_traffic_light',', vertical traffic light'],['🚧','construction',', construction'],['🚨','rotating_light',', police car light'],['🚩','triangular_flag_on_post',', triangular flag'],['🚪','door',', door'],['🚫','no_entry_sign',', prohibited'],['🚬','smoking',', cigarette'],['🚭','no_smoking',', no smoking'],['🚮','put_litter_in_its_place',', litter in bin sign'],['🚯','do_not_litter',', no littering'],['🚰','potable_water',', potable water'],['🚱','non-potable_water',', non-potable water'],['🚲','bike',', bicycle'],['🚳','no_bicycles',', no bicycles'],['🚴','person_biking',', person biking'],['🚵','person_mountain_biking',', person mountain biking'],['🚶','person_walking',', person walking'],['🚷','no_pedestrians',', no pedestrians'],['🚸','children_crossing',', children crossing'],['🚹','mens',', men’s room'],['🚺','womens',', women’s room'],['🚻','restroom',', restroom'],['🚼','baby_symbol',', baby symbol'],['🚽','toilet',', toilet'],['🚾','wc',', water closet'],['🚿','shower',', shower'],['🛀','bath',', person taking bath'],['🛁','bathtub',', bathtub'],['🛂','passport_control',', passport control'],['🛃','customs',', customs'],['🛄','baggage_claim',', baggage claim'],['🛅','left_luggage',', left luggage'],['🛌','sleeping_accommodation',', person in bed'],['🛐','place_of_worship',', place of worship'],['🛫','airplane_departure',', airplane departure'],['🛬','airplane_arriving',', airplane arrival'],['🤐','zipper_mouth',', zipper-mouth face'],['🤑','money_mouth',', money-mouth face'],['🤒','thermometer_face',', face with thermometer'],['🤓','nerd',', nerd face'],['🤔','thinking',', thinking face'],['🤕','head_bandage',', face with head-bandage'],['🤖','robot','robot, electronics, AI, artificial intelligence, tech, technology'],['🤗','hugging','hugging face, AI, artificial intelligence'],['🤘','metal','hand, rock, sign of the horns'],['🦀','crab','sea creature, crab, animal, sea, seafood'],['🦁','lion_face','animal, lion'],['🦂','scorpion','animal, scorpion'],['🦃','turkey','turkey, bird,, thanksgiving'],['🦄','unicorn','magic, fantasy, rainbow, unicorn'],['🧀','cheese','food, mouse, cheese wedge'],['🇦🇨','flag_ac','flags, flag: Ascension Island, flag'],['🇦🇩','flag_ad','flag: Andorra, flags, flag'],['🇦🇪','flag_ae','flags, flag: United Arab Emirates, flag'],['🇦🇫','flag_af','flags, flag, flag: Afghanistan'],['🇦🇬','flag_ag','flag: Antigua & Barbuda, flags, flag'],['🇦🇮','flag_ai','flags, flag, flag: Anguilla'],['🇦🇱','flag_al','flag: Albania, flags, flag'],['🇦🇲','flag_am','flags, flag: Armenia, flag'],['🇦🇴','flag_ao','flags, flag, flag: Angola'],['🇦🇶','flag_aq','flag: Antarctica, flags, flag'],['🇦🇷','flag_ar','flags, flag: Argentina, flag'],['🇦🇸','flag_as','flags, flag: American Samoa, flag'],['🇦🇹','flag_at','flags, flag, flag: Austria'],['🇦🇺','flag_au','flags, flag, flag: Australia'],['🇦🇼','flag_aw','flag: Aruba, flags, flag'],['🇦🇽','flag_ax','flag: Åland Islands, flags, flag'],['🇦🇿','flag_az','flags, flag, flag: Azerbaijan'],['🇧🇦','flag_ba','flag: Bosnia & Herzegovina, flags, flag'],['🇧🇧','flag_bb','flag: Barbados, flags, flag'],['🇧🇩','flag_bd','flags, flag, flag: Bangladesh'],['🇧🇪','flag_be','flags, flag, flag: Belgium'],['🇧🇫','flag_bf','flags, flag: Burkina Faso, flag'],['🇧🇬','flag_bg','flag: Bulgaria, flags, flag'],['🇧🇭','flag_bh','flags, flag: Bahrain, flag'],['🇧🇮','flag_bi','flag: Burundi, flags, flag'],['🇧🇯','flag_bj','flag: Benin, flags, flag'],['🇧🇱','flag_bl','flags, flag: St. Barthélemy, flag'],['🇧🇲','flag_bm','flags, flag: Bermuda, flag'],['🇧🇳','flag_bn','flags, flag: Brunei, flag'],['🇧🇴','flag_bo','flag: Bolivia, flags, flag'],['🇧🇶','flag_bq','flags, flag: Caribbean Netherlands, flag'],['🇧🇷','flag_br','flag: Brazil, flags, flag'],['🇧🇸','flag_bs','flag: Bahamas, flags, flag'],['🇧🇹','flag_bt','flags, flag: Bhutan, flag'],['🇧🇻','flag_bv','flag: Bouvet Island, flags, flag'],['🇧🇼','flag_bw','flags, flag, flag: Botswana'],['🇧🇾','flag_by','flags, flag, flag: Belarus'],['🇧🇿','flag_bz','flag: Belize, flags, flag'],['🇨🇦','flag_ca','flag: Canada, flags, flag'],['🇨🇨','flag_cc','flags, flag: Cocos (Keeling) Islands, flag'],['🇨🇩','flag_cd','flag: Congo - Kinshasa, flags, flag'],['🇨🇫','flag_cf','flag: Central African Republic, flags, flag'],['🇨🇬','flag_cg','flags, flag: Congo - Brazzaville, flag'],['🇨🇭','flag_ch','flags, flag: Switzerland, flag'],['🇨🇮','flag_ci','flags, flag: Côte d’Ivoire, flag'],['🇨🇰','flag_ck','flag: Cook Islands, flags, flag'],['🇨🇱','flag_cl','flag: Chile, flags, flag'],['🇨🇲','flag_cm','flag: Cameroon, flags, flag'],['🇨🇳','flag_cn','flags, flag, flag: China'],['🇨🇴','flag_co','flags, flag: Colombia, flag'],['🇨🇵','flag_cp','flags, flag, flag: Clipperton Island'],['🇨🇷','flag_cr','flag: Costa Rica, flags, flag'],['🇨🇺','flag_cu','flag: Cuba, flags, flag'],['🇨🇻','flag_cv','flags, flag: Cape Verde, flag'],['🇨🇼','flag_cw','flag: Curaçao, flags, flag'],['🇨🇽','flag_cx','flags, flag: Christmas Island, flag'],['🇨🇾','flag_cy','flags, flag: Cyprus, flag'],['🇨🇿','flag_cz','flags, flag, flag: Czechia'],['🇩🇪','flag_de','flags, flag, flag: Germany'],['🇩🇬','flag_dg','flag: Diego Garcia, flags, flag'],['🇩🇯','flag_dj','flag: Djibouti, flags, flag'],['🇩🇰','flag_dk','flags, flag, flag: Denmark'],['🇩🇲','flag_dm','flags, flag: Dominica, flag'],['🇩🇴','flag_do','flags, flag: Dominican Republic, flag'],['🇩🇿','flag_dz','flag: Algeria, flags, flag'],['🇪🇦','flag_ea','flags, flag: Ceuta & Melilla, flag'],['🇪🇨','flag_ec','flag: Ecuador, flags, flag'],['🇪🇪','flag_ee','flags, flag, flag: Estonia'],['🇪🇬','flag_eg','flag: Egypt, flags, flag'],['🇪🇭','flag_eh','flags, flag: Western Sahara, flag'],['🇪🇷','flag_er','flags, flag, flag: Eritrea'],['🇪🇸','flag_es','flags, flag: Spain, flag'],['🇪🇹','flag_et','flags, flag: Ethiopia, flag'],['🇪🇺','flag_eu','flags, flag: European Union, flag'],['🇫🇮','flag_fi','flag: Finland, flags, flag'],['🇫🇯','flag_fj','flags, flag, flag: Fiji'],['🇫🇰','flag_fk','flags, flag: Falkland Islands, flag'],['🇫🇲','flag_fm','flags, flag: Micronesia, flag'],['🇫🇴','flag_fo','flags, flag: Faroe Islands, flag'],['🇫🇷','flag_fr','flag: France, flags, flag'],['🇬🇦','flag_ga','flags, flag: Gabon, flag'],['🇬🇧','flag_gb','flag: United Kingdom, flags, flag'],['🇬🇩','flag_gd','flag: Grenada, flags, flag'],['🇬🇪','flag_ge','flags, flag, flag: Georgia'],['🇬🇫','flag_gf','flags, flag, flag: French Guiana'],['🇬🇬','flag_gg','flag: Guernsey, flags, flag'],['🇬🇭','flag_gh','flag: Ghana, flags, flag'],['🇬🇮','flag_gi','flags, flag, flag: Gibraltar'],['🇬🇱','flag_gl','flags, flag: Greenland, flag'],['🇬🇲','flag_gm','flag: Gambia, flags, flag'],['🇬🇳','flag_gn','flags, flag: Guinea, flag'],['🇬🇵','flag_gp','flags, flag: Guadeloupe, flag'],['🇬🇶','flag_gq','flags, flag, flag: Equatorial Guinea'],['🇬🇷','flag_gr','flag: Greece, flags, flag'],['🇬🇸','flag_gs','flag: South Georgia & South Sandwich Islands, flags, flag'],['🇬🇹','flag_gt','flags, flag: Guatemala, flag'],['🇬🇺','flag_gu','flag: Guam, flags, flag'],['🇬🇼','flag_gw','flag: Guinea-Bissau, flags, flag'],['🇬🇾','flag_gy','flag: Guyana, flags, flag'],['🇭🇰','flag_hk','flag: Hong Kong SAR China, flags, flag'],['🇭🇲','flag_hm','flags, flag, flag: Heard & McDonald Islands'],['🇭🇳','flag_hn','flags, flag, flag: Honduras'],['🇭🇷','flag_hr','flags, flag: Croatia, flag'],['🇭🇹','flag_ht','flags, flag: Haiti, flag'],['🇭🇺','flag_hu','flags, flag: Hungary, flag'],['🇮🇨','flag_ic','flags, flag, flag: Canary Islands'],['🇮🇩','flag_id','flags, flag: Indonesia, flag'],['🇮🇪','flag_ie','flags, flag: Ireland, flag'],['🇮🇱','flag_il','flags, flag: Israel, flag'],['🇮🇲','flag_im','flag: Isle of Man, flags, flag'],['🇮🇳','flag_in','flags, flag, flag: India'],['🇮🇴','flag_io','flags, flag: British Indian Ocean Territory, flag'],['🇮🇶','flag_iq','flag: Iraq, flags, flag'],['🇮🇷','flag_ir','flags, flag, flag: Iran'],['🇮🇸','flag_is','flags, flag: Iceland, flag'],['🇮🇹','flag_it','flags, flag: Italy, flag'],['🇯🇪','flag_je','flags, flag, flag: Jersey'],['🇯🇲','flag_jm','flags, flag, flag: Jamaica'],['🇯🇴','flag_jo','flag: Jordan, flags, flag'],['🇯🇵','flag_jp','flags, flag: Japan, flag'],['🇰🇪','flag_ke','flag: Kenya, flags, flag'],['🇰🇬','flag_kg','flag: Kyrgyzstan, flags, flag'],['🇰🇭','flag_kh','flag: Cambodia, flags, flag'],['🇰🇮','flag_ki','flag: Kiribati, flags, flag'],['🇰🇲','flag_km','flags, flag, flag: Comoros'],['🇰🇳','flag_kn','flags, flag: St. Kitts & Nevis, flag'],['🇰🇵','flag_kp','flag: North Korea, flags, flag'],['🇰🇷','flag_kr','flags, flag: South Korea, flag'],['🇰🇼','flag_kw','flags, flag, flag: Kuwait'],['🇰🇾','flag_ky','flags, flag: Cayman Islands, flag'],['🇰🇿','flag_kz','flags, flag: Kazakhstan, flag'],['🇱🇦','flag_la','flags, flag, flag: Laos'],['🇱🇧','flag_lb','flags, flag, flag: Lebanon'],['🇱🇨','flag_lc','flag: St. Lucia, flags, flag'],['🇱🇮','flag_li','flags, flag, flag: Liechtenstein'],['🇱🇰','flag_lk','flags, flag, flag: Sri Lanka'],['🇱🇷','flag_lr','flag: Liberia, flags, flag'],['🇱🇸','flag_ls','flag: Lesotho, flags, flag'],['🇱🇹','flag_lt','flags, flag: Lithuania, flag'],['🇱🇺','flag_lu','flags, flag, flag: Luxembourg'],['🇱🇻','flag_lv','flag: Latvia, flags, flag'],['🇱🇾','flag_ly','flags, flag: Libya, flag'],['🇲🇦','flag_ma','flags, flag, flag: Morocco'],['🇲🇨','flag_mc','flags, flag, flag: Monaco'],['🇲🇩','flag_md','flag: Moldova, flags, flag'],['🇲🇪','flag_me','flag: Montenegro, flags, flag'],['🇲🇫','flag_mf','flags, flag, flag: St. Martin'],['🇲🇬','flag_mg','flags, flag, flag: Madagascar'],['🇲🇭','flag_mh','flags, flag: Marshall Islands, flag'],['🇲🇰','flag_mk','flags, flag, flag: North Macedonia'],['🇲🇱','flag_ml','flag: Mali, flags, flag'],['🇲🇲','flag_mm','flags, flag: Myanmar (Burma), flag'],['🇲🇳','flag_mn','flag: Mongolia, flags, flag'],['🇲🇴','flag_mo','flags, flag: Macao SAR China, flag'],['🇲🇵','flag_mp','flags, flag: Northern Mariana Islands, flag'],['🇲🇶','flag_mq','flags, flag: Martinique, flag'],['🇲🇷','flag_mr','flag: Mauritania, flags, flag'],['🇲🇸','flag_ms','flags, flag, flag: Montserrat'],['🇲🇹','flag_mt','flags, flag: Malta, flag'],['🇲🇺','flag_mu','flags, flag, flag: Mauritius'],['🇲🇻','flag_mv','flag: Maldives, flags, flag'],['🇲🇼','flag_mw','flags, flag: Malawi, flag'],['🇲🇽','flag_mx','flag: Mexico, flags, flag'],['🇲🇾','flag_my','flags, flag: Malaysia, flag'],['🇲🇿','flag_mz','flags, flag: Mozambique, flag'],['🇳🇦','flag_na','flags, flag, flag: Namibia'],['🇳🇨','flag_nc','flags, flag, flag: New Caledonia'],['🇳🇪','flag_ne','flags, flag: Niger, flag'],['🇳🇫','flag_nf','flags, flag, flag: Norfolk Island'],['🇳🇬','flag_ng','flags, flag: Nigeria, flag'],['🇳🇮','flag_ni','flags, flag: Nicaragua, flag'],['🇳🇱','flag_nl','flags, flag, flag: Netherlands'],['🇳🇴','flag_no','flag: Norway, flags, flag'],['🇳🇵','flag_np','flags, flag, flag: Nepal'],['🇳🇷','flag_nr','flags, flag: Nauru, flag'],['🇳🇺','flag_nu','flag: Niue, flags, flag'],['🇳🇿','flag_nz','flag: New Zealand, flags, flag'],['🇴🇲','flag_om','flags, flag: Oman, flag'],['🇵🇦','flag_pa','flags, flag, flag: Panama'],['🇵🇪','flag_pe','flag: Peru, flags, flag'],['🇵🇫','flag_pf','flag: French Polynesia, flags, flag'],['🇵🇬','flag_pg','flags, flag: Papua New Guinea, flag'],['🇵🇭','flag_ph','flags, flag, flag: Philippines'],['🇵🇰','flag_pk','flag: Pakistan, flags, flag'],['🇵🇱','flag_pl','flags, flag: Poland, flag'],['🇵🇲','flag_pm','flags, flag, flag: St. Pierre & Miquelon'],['🇵🇳','flag_pn','flags, flag, flag: Pitcairn Islands'],['🇵🇷','flag_pr','flag: Puerto Rico, flags, flag'],['🇵🇸','flag_ps','flags, flag: Palestinian Territories, flag'],['🇵🇹','flag_pt','flag: Portugal, flags, flag'],['🇵🇼','flag_pw','flag: Palau, flags, flag'],['🇵🇾','flag_py','flag: Paraguay, flags, flag'],['🇶🇦','flag_qa','flag: Qatar, flags, flag'],['🇷🇪','flag_re','flags, flag, flag: Réunion'],['🇷🇴','flag_ro','flags, flag, flag: Romania'],['🇷🇸','flag_rs','flags, flag: Serbia, flag'],['🇷🇺','flag_ru','flags, flag, flag: Russia'],['🇷🇼','flag_rw','flags, flag, flag: Rwanda'],['🇸🇦','flag_sa','flags, flag, flag: Saudi Arabia'],['🇸🇧','flag_sb','flag: Solomon Islands, flags, flag'],['🇸🇨','flag_sc','flags, flag: Seychelles, flag'],['🇸🇩','flag_sd','flags, flag, flag: Sudan'],['🇸🇪','flag_se','flag: Sweden, flags, flag'],['🇸🇬','flag_sg','flags, flag, flag: Singapore'],['🇸🇭','flag_sh','flags, flag, flag: St. Helena'],['🇸🇮','flag_si','flags, flag: Slovenia, flag'],['🇸🇯','flag_sj','flag: Svalbard & Jan Mayen, flags, flag'],['🇸🇰','flag_sk','flags, flag, flag: Slovakia'],['🇸🇱','flag_sl','flag: Sierra Leone, flags, flag'],['🇸🇲','flag_sm','flags, flag: San Marino, flag'],['🇸🇳','flag_sn','flags, flag: Senegal, flag'],['🇸🇴','flag_so','flags, flag, flag: Somalia'],['🇸🇷','flag_sr','flag: Suriname, flags, flag'],['🇸🇸','flag_ss','flags, flag: South Sudan, flag'],['🇸🇹','flag_st','flags, flag: São Tomé & Príncipe, flag'],['🇸🇻','flag_sv','flags, flag: El Salvador, flag'],['🇸🇽','flag_sx','flags, flag, flag: Sint Maarten'],['🇸🇾','flag_sy','flags, flag: Syria, flag'],['🇸🇿','flag_sz','flags, flag: Eswatini, flag'],['🇹🇦','flag_ta','flags, flag: Tristan da Cunha, flag'],['🇹🇨','flag_tc','flags, flag, flag: Turks & Caicos Islands'],['🇹🇩','flag_td','flags, flag: Chad, flag'],['🇹🇫','flag_tf','flag: French Southern Territories, flags, flag'],['🇹🇬','flag_tg','flags, flag, flag: Togo'],['🇹🇭','flag_th','flag: Thailand, flags, flag'],['🇹🇯','flag_tj','flag: Tajikistan, flags, flag'],['🇹🇰','flag_tk','flags, flag: Tokelau, flag'],['🇹🇱','flag_tl','flags, flag: Timor-Leste, flag'],['🇹🇲','flag_tm','flags, flag, flag: Turkmenistan'],['🇹🇳','flag_tn','flag: Tunisia, flags, flag'],['🇹🇴','flag_to','flags, flag, flag: Tonga'],['🇹🇷','flag_tr','flags, flag: Turkey, flag'],['🇹🇹','flag_tt','flags, flag, flag: Trinidad & Tobago'],['🇹🇻','flag_tv','flag: Tuvalu, flags, flag'],['🇹🇼','flag_tw','flag: Taiwan, flags, flag'],['🇹🇿','flag_tz','flag: Tanzania, flags, flag'],['🇺🇦','flag_ua','flags, flag, flag: Ukraine'],['🇺🇬','flag_ug','flags, flag: Uganda, flag'],['🇺🇲','flag_um','flags, flag, flag: U.S. Outlying Islands'],['🇺🇸','flag_us','flags, flag, flag: United States'],['🇺🇾','flag_uy','flags, flag, flag: Uruguay'],['🇺🇿','flag_uz','flags, flag, flag: Uzbekistan'],['🇻🇦','flag_va','flags, flag: Vatican City, flag'],['🇻🇨','flag_vc','flag: St. Vincent & Grenadines, flags, flag'],['🇻🇪','flag_ve','flags, flag, flag: Venezuela'],['🇻🇬','flag_vg','flag: British Virgin Islands, flags, flag'],['🇻🇮','flag_vi','flag: U.S. Virgin Islands, flags, flag'],['🇻🇳','flag_vn','flags, flag: Vietnam, flag'],['🇻🇺','flag_vu','flags, flag: Vanuatu, flag'],['🇼🇫','flag_wf','flag: Wallis & Futuna, flags, flag'],['🇼🇸','flag_ws','flag: Samoa, flags, flag'],['🇽🇰','flag_xk','flags, flag, flag: Kosovo'],['🇾🇪','flag_ye','flags, flag, flag: Yemen'],['🇾🇹','flag_yt','flags, flag, flag: Mayotte'],['🇿🇦','flag_za','flags, flag: South Africa, flag'],['🇿🇲','flag_zm','flags, flag: Zambia, flag'],['🇿🇼','flag_zw','flags, flag: Zimbabwe, flag'],['🏳️‍🌈','rainbow_flag','flag, rainbow flag, pride, gay, flags'],['🏳️‍⚧️','transgender_flag','trans, pride, flag, flags']];} \ No newline at end of file diff --git a/src/browser/base/zen-components/ZenWorkspaces.mjs b/src/browser/base/zen-components/ZenWorkspaces.mjs index d2ede7fc3..63f8abe4d 100644 --- a/src/browser/base/zen-components/ZenWorkspaces.mjs +++ b/src/browser/base/zen-components/ZenWorkspaces.mjs @@ -27,6 +27,10 @@ var ZenWorkspaces = new (class extends ZenMultiWindowFeature { console.warn('ZenWorkspaces: !!! ZenWorkspaces is disabled in hidden windows !!!'); return; // We are in a hidden window, don't initialize ZenWorkspaces } + + Services.scriptloader.loadSubScript("chrome://browser/content/zen-components/ZenEmojies.mjs", this); + this.gemojies = this.zenGlobalEmojis(); + this.ownerWindow = window; XPCOMUtils.defineLazyPreferenceGetter( this, @@ -513,11 +517,84 @@ var ZenWorkspaces = new (class extends ZenMultiWindowFeature { typeof Intl.Segmenter !== 'undefined' ? new Intl.Segmenter().segment(icon).containing().segment : Array.from(icon)[0] ); + searchIcons(input, icons) { + input = input.toLowerCase(); + + if ((input === ':') || (input === '')) { + return icons; + } + const emojiScores = []; + + function calculateSearchScore(inputLength, targetLength, weight = 100) { + return parseInt((inputLength / targetLength) * weight); + } + + for (let currentEmoji of icons) { + let alignmentScore = -1; + + let normalizedEmojiName = currentEmoji[1].toLowerCase(); + let keywordList = currentEmoji[2].split(',').map(keyword => keyword.trim().toLowerCase()); + if (input[0] === ":") { + let searchTerm = input.slice(1); + let nameMatchIndex = normalizedEmojiName.indexOf(searchTerm); + + if (nameMatchIndex !== -1 && nameMatchIndex === 0) { + alignmentScore = calculateSearchScore(searchTerm.length, normalizedEmojiName.length, 100); + } + } else { + if (input === currentEmoji[0]) { + alignmentScore = 999; + } + let nameMatchIndex = normalizedEmojiName.replace(/_/g, ' ').indexOf(input); + if (nameMatchIndex !== -1) { + if (nameMatchIndex === 0) { + alignmentScore = calculateSearchScore(input.length, normalizedEmojiName.length, 150); + } else if (input[input.length - 1] !== " ") { + alignmentScore += calculateSearchScore(input.length, normalizedEmojiName.length, 40); + } + } + for (let keyword of keywordList) { + let keywordMatchIndex = keyword.indexOf(input); + if (keywordMatchIndex !== -1) { + if (keywordMatchIndex === 0) { + alignmentScore += calculateSearchScore(input.length, keyword.length, 50); + } else if (input[input.length - 1] !== " ") { + alignmentScore += calculateSearchScore(input.length, keyword.length, 5); + } + } + } + } + + //if match score is not -1, add it + if (alignmentScore !== -1) { + emojiScores.push({ "emoji": currentEmoji[0], "score": alignmentScore }); + } + } + // Sort the emojis by their score in descending order + emojiScores.sort((a, b) => b.Score - a.Score); + + // Return the emojis in the order of their rank + let filteredEmojiScores = emojiScores; + return filteredEmojiScores.map(score => score.emoji); + } + + resetWorkspaceIconSearch(){ + let container = document.getElementById('PanelUI-zen-workspaces-icon-picker-wrapper'); + let searchInput = document.getElementById('PanelUI-zen-workspaces-icon-search-input'); + + // Clear the search input field + searchInput.value = ''; + for (let button of container.querySelectorAll('.toolbarbutton-1')) { + button.style.display = ''; + } + } _initializeWorkspaceCreationIcons() { let container = document.getElementById('PanelUI-zen-workspaces-icon-picker-wrapper'); + let searchInput = document.getElementById('PanelUI-zen-workspaces-icon-search-input'); + searchInput.value = ''; for (let icon of this._kIcons) { let button = document.createXULElement('toolbarbutton'); - button.className = 'toolbarbutton-1'; + button.className = 'toolbarbutton-1 workspace-icon-button'; button.setAttribute('label', icon); button.onclick = (event) => { const button = event.target; @@ -538,6 +615,32 @@ var ZenWorkspaces = new (class extends ZenMultiWindowFeature { } } + conductSearch() { + const container = document.getElementById('PanelUI-zen-workspaces-icon-picker-wrapper'); + const searchInput = document.getElementById('PanelUI-zen-workspaces-icon-search-input'); + const query = searchInput.value.toLowerCase(); + + if (query === '') { + this.resetWorkspaceIconSearch(); + return; + } + + const buttons = Array.from(container.querySelectorAll('.toolbarbutton-1')); + buttons.forEach(button => button.style.display = 'none'); + + const filteredIcons = this.searchIcons(query, this.gemojies); + + filteredIcons.forEach(emoji => { + const matchingButton = buttons.find(button => + button.getAttribute('label') === emoji + ); + if (matchingButton) { + matchingButton.style.display = ''; + container.appendChild(matchingButton); + } + }); + } + async saveWorkspace(workspaceData) { await ZenWorkspacesStorage.saveWorkspace(workspaceData); await this._propagateWorkspaceData(); @@ -889,6 +992,7 @@ var ZenWorkspaces = new (class extends ZenMultiWindowFeature { workspacesList?.removeAttribute('reorder-mode'); reorderModeButton?.removeAttribute('active'); + this.resetWorkspaceIconSearch(); } async moveWorkspaceToEnd(draggedWorkspaceId) {