diff --git a/.tool-versions b/.tool-versions new file mode 100644 index 00000000..958fb369 --- /dev/null +++ b/.tool-versions @@ -0,0 +1 @@ +nodejs 20.12.2 diff --git a/.woodpecker.yml b/.woodpecker.yml index 723bfb7c..3de19a01 100644 --- a/.woodpecker.yml +++ b/.woodpecker.yml @@ -1,10 +1,12 @@ -platform: linux/amd64 -pipeline: +labels: + platform: linux/amd64 + +steps: lint: when: event: - pull_request - image: node:18 + image: node:20 commands: - yarn - yarn lint @@ -14,11 +16,11 @@ pipeline: when: event: - pull_request - image: node:18 + image: node:20 commands: - apt update - apt install firefox-esr -y --no-install-recommends - - yarn + - yarn - yarn unit build: @@ -28,7 +30,7 @@ pipeline: branch: - develop - stable - image: node:18 + image: node:20 commands: - yarn - yarn build @@ -40,15 +42,15 @@ pipeline: branch: - develop - stable - image: node:18 + image: node:20 secrets: - SCW_ACCESS_KEY - SCW_SECRET_KEY - SCW_DEFAULT_ORGANIZATION_ID commands: - apt-get update && apt-get install -y rclone wget zip - - wget https://github.com/scaleway/scaleway-cli/releases/download/v2.5.1/scaleway-cli_2.5.1_linux_amd64 - - mv scaleway-cli_2.5.1_linux_amd64 scaleway-cli + - wget https://github.com/scaleway/scaleway-cli/releases/download/v2.30.0/scaleway-cli_2.30.0_linux_amd64 + - mv scaleway-cli_2.30.0_linux_amd64 scaleway-cli - chmod +x scaleway-cli - ./scaleway-cli object config install type=rclone - zip akkoma-fe.zip -r dist @@ -70,8 +72,8 @@ pipeline: - SCW_DEFAULT_ORGANIZATION_ID commands: - apt-get update && apt-get install -y rclone wget git zip - - wget https://github.com/scaleway/scaleway-cli/releases/download/v2.5.1/scaleway-cli_2.5.1_linux_amd64 - - mv scaleway-cli_2.5.1_linux_amd64 scaleway-cli + - wget https://github.com/scaleway/scaleway-cli/releases/download/v2.30.0/scaleway-cli_2.30.0_linux_amd64 + - mv scaleway-cli_2.30.0_linux_amd64 scaleway-cli - chmod +x scaleway-cli - ./scaleway-cli object config install type=rclone - cd docs @@ -79,4 +81,4 @@ pipeline: - mkdocs build - zip -r docs.zip site/* - cd site - - rclone copy . scaleway:akkoma-docs/frontend/$CI_COMMIT_BRANCH/ + - rclone copy . scaleway:akkoma-docs/frontend/$CI_COMMIT_BRANCH/ diff --git a/src/components/notification/notification.js b/src/components/notification/notification.js index af612ccb..dc816ebb 100644 --- a/src/components/notification/notification.js +++ b/src/components/notification/notification.js @@ -6,6 +6,7 @@ import UserCard from '../user_card/user_card.vue' import Timeago from '../timeago/timeago.vue' import RichContent from 'src/components/rich_content/rich_content.jsx' import ConfirmModal from '../confirm_modal/confirm_modal.vue' +import StillImage from '../still-image/still-image.vue' import { isStatusNotification } from '../../services/notification_utils/notification_utils.js' import { highlightClass, highlightStyle } from '../../services/user_highlighter/user_highlighter.js' import generateProfileLink from 'src/services/user_profile_link_generator/user_profile_link_generator' @@ -50,7 +51,8 @@ const Notification = { Timeago, Status, RichContent, - ConfirmModal + ConfirmModal, + StillImage }, methods: { toggleUserExpanded () { diff --git a/src/components/notification/notification.vue b/src/components/notification/notification.vue index 5ea6ab04..2d29d162 100644 --- a/src/components/notification/notification.vue +++ b/src/components/notification/notification.vue @@ -116,12 +116,13 @@ scope="global" keypath="notifications.reacted_with" > - + :title="notification.emoji" + :alt="notification.emoji" + /> { localStorage.setItem('drafts', JSON.stringify(draftData)); } +const interfaceToISOLanguage = (ilang) => { + const sep = ilang.indexOf("_"); + return sep < 0 ? + ilang : + ilang.substr(0, sep); +} + const PostStatusForm = { props: [ 'statusId', @@ -129,6 +137,13 @@ const PostStatusForm = { this.$refs.textarea.focus() } }, + setup() { + const {postLanguageOptions} = usePostLanguageOptions() + + return { + postLanguageOptions, + } + }, data () { const preset = this.$route.query.message let statusText = preset || '' @@ -140,11 +155,13 @@ const PostStatusForm = { const { postContentType: contentType, - postLanguage: language, + postLanguage: defaultPostLanguage, sensitiveByDefault, sensitiveIfSubject, + interfaceLanguage, alwaysShowSubjectInput, } = this.$store.getters.mergedConfig + const postLanguage = defaultPostLanguage || interfaceToISOLanguage(interfaceLanguage) let statusParams = { spoilerText: this.subject || '', @@ -155,8 +172,8 @@ const PostStatusForm = { poll: {}, mediaDescriptions: {}, visibility: this.suggestedVisibility(), - contentType, - language + language: postLanguage, + contentType } if (this.statusId || this.isRedraft) { @@ -171,8 +188,8 @@ const PostStatusForm = { poll: this.statusPoll || {}, mediaDescriptions: this.statusMediaDescriptions || {}, visibility: this.statusScope || this.suggestedVisibility(), - contentType: statusContentType, - language: statusLanguage + language: this.statusLanguage || postLanguage, + contentType: statusContentType } } @@ -316,9 +333,6 @@ const PostStatusForm = { ...mapState({ mobileLayout: state => state.interface.mobileLayout }), - isoLanguages () { - return iso6391.getAllCodes(); - } }, watch: { 'newStatus': { diff --git a/src/components/post_status_form/post_status_form.vue b/src/components/post_status_form/post_status_form.vue index c676dde9..0925e297 100644 --- a/src/components/post_status_form/post_status_form.vue +++ b/src/components/post_status_form/post_status_form.vue @@ -212,11 +212,11 @@ class="form-control" > diff --git a/src/components/settings_modal/tabs/general_tab.js b/src/components/settings_modal/tabs/general_tab.js index e0b7d303..c07a94a8 100644 --- a/src/components/settings_modal/tabs/general_tab.js +++ b/src/components/settings_modal/tabs/general_tab.js @@ -4,6 +4,7 @@ import ScopeSelector from 'src/components/scope_selector/scope_selector.vue' import IntegerSetting from '../helpers/integer_setting.vue' import InterfaceLanguageSwitcher from 'src/components/interface_language_switcher/interface_language_switcher.vue' +import { usePostLanguageOptions } from 'src/lib/post_language' import SharedComputedObject from '../helpers/shared_computed_object.js' import ServerSideIndicator from '../helpers/server_side_indicator.vue' import { library } from '@fortawesome/fontawesome-svg-core' @@ -18,6 +19,11 @@ library.add( ) const GeneralTab = { + setup() { + const {postLanguageOptions} = usePostLanguageOptions() + + return {postLanguageOptions} + }, data () { return { subjectLineOptions: ['email', 'noop', 'masto'].map(mode => ({ @@ -128,6 +134,12 @@ const GeneralTab = { this.$store.dispatch('setOption', { name: 'translationLanguage', value: val }) } }, + postLanguage: { + get: function () { return this.$store.getters.mergedConfig.postLanguage }, + set: function (val) { + this.$store.dispatch('setOption', { name: 'postLanguage', value: val }) + } + }, ...SharedComputedObject() }, methods: { diff --git a/src/components/settings_modal/tabs/general_tab.vue b/src/components/settings_modal/tabs/general_tab.vue index 4f3eb8a1..46c17f50 100644 --- a/src/components/settings_modal/tabs/general_tab.vue +++ b/src/components/settings_modal/tabs/general_tab.vue @@ -602,6 +602,15 @@ {{ $t('settings.post_status_content_type') }} +
  • + + {{ $t('settings.post_language') }} + +
  • { + const postLanguageOptions = computed(() => { + return iso6391.getAllCodes().map(lang => ({ + key: lang, + value: lang, + label: lang, + })); + }) + + return { + postLanguageOptions, + } +} diff --git a/src/modules/config.js b/src/modules/config.js index b7705636..96adf439 100644 --- a/src/modules/config.js +++ b/src/modules/config.js @@ -118,6 +118,7 @@ export const defaultState = { conversationTreeFadeAncestors: undefined, // instance default maxDepthInThread: undefined, // instance default translationLanguage: undefined, // instance default, + postLanguage: undefined, // instance default, supportedTranslationLanguages: {}, // instance default userProfileDefaultTab: 'statuses', useBlurhash: true, diff --git a/src/modules/statuses.js b/src/modules/statuses.js index e8fe34ca..3acbe208 100644 --- a/src/modules/statuses.js +++ b/src/modules/statuses.js @@ -314,7 +314,7 @@ const addNewStatuses = (state, { statuses, showImmediately = false, timeline, us }) // Keep the visible statuses sorted - if (timeline && !(timeline === 'bookmarks')) { + if (timeline && !(['bookmarks', 'favorites'].includes(timeline))) { sortTimeline(timelineObject) } } diff --git a/static/emoji.json b/static/emoji.json index 12b91b3f..ec43b661 100644 --- a/static/emoji.json +++ b/static/emoji.json @@ -15,24 +15,36 @@ "admission_tickets": "🎟", "adult": "🧑", "aerial_tramway": "🚡", + "afghanistan": "🇦🇫", "airplane": "✈", "airplane_arriving": "🛬", "airplane_departure": "🛫", + "aland_islands": "🇦🇽", "alarm_clock": "⏰", + "albania": "🇦🇱", "alembic": "⚗️", + "algeria": "🇩🇿", "alien": "👽", "ambulance": "🚑", + "american_samoa": "🇦🇸", "amphora": "🏺", "anchor": "⚓", + "andorra": "🇦🇩", "angel": "👼", "anger": "💢", "anger_right": "🗯", + "angola": "🇦🇴", "angry": "😠", + "anguilla": "🇦🇮", "anguished": "😧", "ant": "🐜", + "antarctica": "🇦🇶", + "antigua_and_barbuda": "🇦🇬", "apple": "🍎", "aquarius": "♒", + "argentina": "🇦🇷", "aries": "♈", + "armenia": "🇦🇲", "arrow_backward": "◀️", "arrow_double_down": "⏬", "arrow_double_up": "⏫", @@ -56,16 +68,21 @@ "art": "🎨", "articulated_lorry": "🚛", "artist_palette": "🎨", + "aruba": "🇦🇼", + "ascension_island": "🇦🇨", "asterisk": "*⃣", "astonished": "😲", "athletic_shoe": "👟", "atm": "🏧", "atom": "⚛", "atom_symbol": "⚛️", + "australia": "🇦🇺", + "austria": "🇦🇹", "auto_rickshaw": "🛺", "automobile": "🚗", "avocado": "🥑", "axe": "🪓", + "azerbaijan": "🇦🇿", "b_button_blood_type": "🅱", "baby": "👶", "baby_bottle": "🍼", @@ -78,6 +95,8 @@ "bagel": "🥯", "baggage_claim": "🛄", "baguette_bread": "🥖", + "bahamas": "🇧🇸", + "bahrain": "🇧🇭", "balance_scale": "⚖️", "bald": "🦲", "ballet_shoes": "🩰", @@ -87,9 +106,11 @@ "bamboo": "🎍", "banana": "🍌", "bangbang": "‼️", + "bangladesh": "🇧🇩", "banjo": "🪕", "bank": "🏦", "bar_chart": "📊", + "barbados": "🇧🇧", "barber": "💈", "baseball": "⚾", "basket": "🧺", @@ -110,10 +131,16 @@ "beers": "🍻", "beetle": "🐞", "beginner": "🔰", + "belarus": "🇧🇾", + "belgium": "🇧🇪", + "belize": "🇧🇿", "bell": "🔔", "bellhop_bell": "🛎", + "benin": "🇧🇯", "bento": "🍱", + "bermuda": "🇧🇲", "beverage_box": "🧃", + "bhutan": "🇧🇹", "bicyclist": "🚴", "bike": "🚲", "bikini": "👙", @@ -140,6 +167,7 @@ "blue_square": "🟦", "blush": "😊", "boar": "🐗", + "bolivia": "🇧🇴", "bomb": "💣", "bone": "🦴", "book": "📖", @@ -148,7 +176,10 @@ "books": "📚", "boom": "💥", "boot": "👢", + "bosnia_and_herzegovina": "🇧🇦", + "botswana": "🇧🇼", "bouquet": "💐", + "bouvet_island": "🇧🇻", "bow": "🙇", "bow_and_arrow": "🏹", "bowl_with_spoon": "🥣", @@ -156,6 +187,7 @@ "boxing_glove": "🥊", "boy": "👦", "brain": "🧠", + "brazil": "🇧🇷", "bread": "🍞", "breast_feeding": "🤱", "breastfeeding": "🤱", @@ -164,17 +196,23 @@ "bridge_at_night": "🌉", "briefcase": "💼", "briefs": "🩲", + "british_indian_ocean_territory": "🇮🇴", + "british_virgin_islands": "🇻🇬", "broccoli": "🥦", "broken_heart": "💔", "broom": "🧹", "brown_circle": "🟤", "brown_heart": "🤎", + "brunei": "🇧🇳", "bug": "🐛", "building_construction": "🏗", "bulb": "💡", + "bulgaria": "🇧🇬", "bullettrain_front": "🚅", "bullettrain_side": "🚄", + "burkina_faso": "🇧🇫", "burrito": "🌯", + "burundi": "🇧🇮", "bus": "🚌", "busstop": "🚏", "bust_in_silhouette": "👤", @@ -187,25 +225,35 @@ "call_me": "🤙", "call_me_hand": "🤙", "calling": "📲", + "cambodia": "🇰🇭", "camel": "🐫", "camera": "📷", "camera_with_flash": "📸", + "cameroon": "🇨🇲", "camping": "🏕", + "canada": "🇨🇦", + "canary_islands": "🇮🇨", "cancer": "♋", "candle": "🕯", "candy": "🍬", "canned_food": "🥫", "canoe": "🛶", + "cape_verde": "🇨🇻", "capital_abcd": "🔠", "capricorn": "♑", "card_file_box": "🗃", "card_index": "📇", "card_index_dividers": "🗂", + "caribbean_netherlands": "🇧🇶", "carousel_horse": "🎠", "carrot": "🥕", "cat": "🐱", "cat2": "🐈", + "cayman_islands": "🇰🇾", "cd": "💿", + "central_african_republic": "🇨🇫", + "ceuta_and_melilla": "🇪🇦", + "chad": "🇹🇩", "chains": "⛓️", "chair": "🪑", "champagne": "🍾", @@ -225,9 +273,12 @@ "chicken": "🐔", "child": "🧒", "children_crossing": "🚸", + "chile": "🇨🇱", + "china": "🇨🇳", "chipmunk": "🐿", "chocolate_bar": "🍫", "chopsticks": "🥢", + "christmas_island": "🇨🇽", "christmas_tree": "🎄", "church": "⛪", "cinema": "🎦", @@ -243,6 +294,7 @@ "classical_building": "🏛", "clinking_glasses": "🥂", "clipboard": "📋", + "clipperton_island": "🇨🇵", "clock1": "🕐", "clock10": "🕙", "clock1030": "🕥", @@ -282,11 +334,14 @@ "coat": "🧥", "cocktail": "🍸", "coconut": "🥥", + "cocos_keeling_islands": "🇨🇨", "coffee": "☕", "coffin": "⚰️", "cold_face": "🥶", "cold_sweat": "😰", + "colombia": "🇨🇴", "comet": "☄️", + "comoros": "🇰🇲", "compass": "🧭", "compression": "🗜", "computer": "💻", @@ -294,17 +349,22 @@ "confetti_ball": "🎊", "confounded": "😖", "confused": "😕", + "congo___brazzaville": "🇨🇬", + "congo___kinshasa": "🇨🇩", "congratulations": "㊗", "construction": "🚧", "construction_worker": "👷", "control_knobs": "🎛", "convenience_store": "🏪", + "cook_islands": "🇨🇰", "cookie": "🍪", "cooking": "🍳", "cool": "🆒", "cop": "👮", "copyright": "©", "corn": "🌽", + "costa_rica": "🇨🇷", + "cote_divoire": "🇨🇮", "couch_and_lamp": "🛋", "couple": "👫", "couple_with_heart": "💑", @@ -320,6 +380,7 @@ "crescent_moon": "🌙", "cricket": "🦗", "cricket_game": "🏏", + "croatia": "🇭🇷", "crocodile": "🐊", "croissant": "🥐", "cross": "✝️", @@ -330,10 +391,12 @@ "cry": "😢", "crying_cat_face": "😿", "crystal_ball": "🔮", + "cuba": "🇨🇺", "cucumber": "🥒", "cup_with_straw": "🥤", "cupcake": "🧁", "cupid": "💘", + "curacao": "🇨🇼", "curling_stone": "🥌", "curly_hair": "🦱", "curly_loop": "➰", @@ -343,6 +406,8 @@ "customs": "🛃", "cut_of_meat": "🥩", "cyclone": "🌀", + "cyprus": "🇨🇾", + "czechia": "🇨🇿", "dagger": "🗡", "dancer": "💃", "dancers": "👯", @@ -355,6 +420,7 @@ "deaf_person": "🧏", "deciduous_tree": "🌳", "deer": "🦌", + "denmark": "🇩🇰", "department_store": "🏬", "derelict_house": "🏚", "desert": "🏜", @@ -364,12 +430,14 @@ "diamond_shape_with_a_dot_inside": "💠", "diamond_suit": "♦️", "diamonds": "♦", + "diego_garcia": "🇩🇬", "disappointed": "😞", "disappointed_relieved": "😥", "diving_mask": "🤿", "diya_lamp": "🪔", "dizzy": "💫", "dizzy_face": "😵", + "djibouti": "🇩🇯", "dna": "🧬", "do_not_litter": "🚯", "dog": "🐶", @@ -377,6 +445,8 @@ "dollar": "💵", "dolls": "🎎", "dolphin": "🐬", + "dominica": "🇩🇲", + "dominican_republic": "🇩🇴", "door": "🚪", "double_exclamation_mark": "‼", "doughnut": "🍩", @@ -403,23 +473,33 @@ "earth_africa": "🌍", "earth_americas": "🌎", "earth_asia": "🌏", + "ecuador": "🇪🇨", "egg": "🥚", "eggplant": "🍆", + "egypt": "🇪🇬", "eight": "8⃣", "eight_pointed_black_star": "✴️", "eight_spoked_asterisk": "✳️", "eightpointed_star": "✴", "eightspoked_asterisk": "✳", "eject_button": "⏏", + "el_salvador": "🇸🇻", "electric_plug": "🔌", "elephant": "🐘", "elf": "🧝", "end": "🔚", + "england": "🏴󠁧󠁢󠁥󠁮󠁧󠁿", "envelope": "✉", "envelope_with_arrow": "📩", + "equatorial_guinea": "🇬🇶", + "eritrea": "🇪🇷", + "estonia": "🇪🇪", + "eswatini": "🇸🇿", + "ethiopia": "🇪🇹", "euro": "💶", "european_castle": "🏰", "european_post_office": "🏤", + "european_union": "🇪🇺", "evergreen_tree": "🌲", "exclamation": "❗", "exclamation_question_mark": "⁉", @@ -439,8 +519,10 @@ "factory": "🏭", "fairy": "🧚", "falafel": "🧆", + "falkland_islands": "🇫🇰", "fallen_leaf": "🍂", "family": "👪", + "faroe_islands": "🇫🇴", "fast_forward": "⏩", "fax": "📠", "fearful": "😨", @@ -449,11 +531,13 @@ "ferris_wheel": "🎡", "ferry": "⛴️", "field_hockey": "🏑", + "fiji": "🇫🇯", "file_cabinet": "🗄", "file_folder": "📁", "film_frames": "🎞", "film_projector": "📽", "fingers_crossed": "🤞", + "finland": "🇫🇮", "fire": "🔥", "fire_engine": "🚒", "fire_extinguisher": "🧯", @@ -494,8 +578,12 @@ "four_leaf_clover": "🍀", "fox": "🦊", "framed_picture": "🖼", + "france": "🇫🇷", "free": "🆓", "french_bread": "🥖", + "french_guiana": "🇬🇫", + "french_polynesia": "🇵🇫", + "french_southern_territories": "🇹🇫", "fried_shrimp": "🍤", "fries": "🍟", "frog": "🐸", @@ -505,13 +593,19 @@ "full_moon": "🌕", "full_moon_with_face": "🌝", "funeral_urn": "⚱️", + "gabon": "🇬🇦", + "gambia": "🇬🇲", "game_die": "🎲", "garlic": "🧄", "gear": "⚙️", "gem": "💎", "gemini": "♊", "genie": "🧞", + "georgia": "🇬🇪", + "germany": "🇩🇪", + "ghana": "🇬🇭", "ghost": "👻", + "gibraltar": "🇬🇮", "gift": "🎁", "gift_heart": "💝", "giraffe": "🦒", @@ -525,25 +619,37 @@ "goggles": "🥽", "golf": "⛳", "golfer": "🏌", + "goose": "🪿", "gorilla": "🦍", "grapes": "🍇", + "greece": "🇬🇷", "green_apple": "🍏", "green_book": "📗", "green_circle": "🟢", "green_heart": "💚", "green_salad": "🥗", "green_square": "🟩", + "greenland": "🇬🇱", + "grenada": "🇬🇩", "grey_exclamation": "❕", "grey_question": "❔", "grimacing": "😬", "grin": "😁", "grinning": "😀", + "guadeloupe": "🇬🇵", + "guam": "🇬🇺", "guard": "💂", "guardsman": "💂", + "guatemala": "🇬🇹", + "guernsey": "🇬🇬", "guide_dog": "🦮", + "guinea": "🇬🇳", + "guinea_bissau": "🇬🇼", "guitar": "🎸", "gun": "🔫", + "guyana": "🇬🇾", "haircut": "💇", + "haiti": "🇭🇹", "hamburger": "🍔", "hammer": "🔨", "hammer_and_pick": "⚒️", @@ -558,11 +664,13 @@ "head_bandage": "🤕", "headphones": "🎧", "hear_no_evil": "🙉", + "heard_and_mcdonald_islands": "🇭🇲", "heart": "❤️", "heart_decoration": "💟", "heart_exclamation": "❣", "heart_eyes": "😍", "heart_eyes_cat": "😻", + "heart_on_fire": "❤️‍🔥", "heart_suit": "♥️", "heartbeat": "💓", "heartpulse": "💗", @@ -584,7 +692,9 @@ "hippopotamus": "🦛", "hockey": "🏒", "hole": "🕳", + "honduras": "🇭🇳", "honey_pot": "🍯", + "hong_kong_sar_china": "🇭🇰", "horse": "🐴", "horse_racing": "🏇", "hospital": "🏥", @@ -601,18 +711,22 @@ "houses": "🏘", "hugging": "🤗", "hundred_points": "💯", + "hungary": "🇭🇺", "hushed": "😯", "ice": "🧊", "ice_cream": "🍨", "ice_hockey": "🏒", "ice_skate": "⛸️", "icecream": "🍦", + "iceland": "🇮🇸", "id": "🆔", "ideograph_advantage": "🉐", "imp": "👿", "inbox_tray": "📥", "incoming_envelope": "📨", "index_pointing_up": "☝", + "india": "🇮🇳", + "indonesia": "🇮🇩", "infinity": "♾", "information": "ℹ️", "information_desk_person": "💁", @@ -621,9 +735,17 @@ "input_numbers": "🔢", "interrobang": "⁉️", "iphone": "📱", + "iran": "🇮🇷", + "iraq": "🇮🇶", + "ireland": "🇮🇪", + "isle_of_man": "🇮🇲", + "israel": "🇮🇱", + "italy": "🇮🇹", "izakaya_lantern": "🏮", "jack_o_lantern": "🎃", - "japan": "🗾", + "jamaica": "🇯🇲", + "japan": "🇯🇵", + "japan_silhouette": "🗾", "japanese_castle": "🏯", "japanese_congratulations_button": "㊗️", "japanese_free_of_charge_button": "🈚", @@ -633,16 +755,21 @@ "japanese_secret_button": "㊙️", "japanese_service_charge_button": "🈂", "jeans": "👖", + "jersey": "🇯🇪", + "jordan": "🇯🇴", "joy": "😂", "joy_cat": "😹", "joystick": "🕹", "kaaba": "🕋", "kangaroo": "🦘", + "kazakhstan": "🇰🇿", + "kenya": "🇰🇪", "key": "🔑", "keyboard": "⌨️", "keycap_ten": "🔟", "kick_scooter": "🛴", "kimono": "👘", + "kiribati": "🇰🇮", "kiss": "💋", "kissing": "😗", "kissing_cat": "😽", @@ -656,18 +783,24 @@ "knife": "🔪", "koala": "🐨", "koko": "🈁", + "kosovo": "🇽🇰", + "kuwait": "🇰🇼", + "kyrgyzstan": "🇰🇬", "lab_coat": "🥼", "label": "🏷", "lacrosse": "🥍", + "laos": "🇱🇦", "large_blue_diamond": "🔷", "large_orange_diamond": "🔶", "last_quarter_moon": "🌗", "last_quarter_moon_with_face": "🌜", "last_track_button": "⏮️", "latin_cross": "✝", + "latvia": "🇱🇻", "laughing": "😆", "leafy_green": "🥬", "leaves": "🍃", + "lebanon": "🇱🇧", "ledger": "📒", "left_arrow": "⬅", "left_arrow_curving_right": "↪", @@ -681,8 +814,12 @@ "lemon": "🍋", "leo": "♌", "leopard": "🐆", + "lesotho": "🇱🇸", "level_slider": "🎚", + "liberia": "🇱🇷", "libra": "♎", + "libya": "🇱🇾", + "liechtenstein": "🇱🇮", "light_rail": "🚈", "light_skin_tone": "🏻", "link": "🔗", @@ -690,6 +827,7 @@ "lion_face": "🦁", "lips": "👄", "lipstick": "💄", + "lithuania": "🇱🇹", "lizard": "🦎", "llama": "🦙", "lobster": "🦞", @@ -706,8 +844,11 @@ "loveyou_gesture": "🤟", "low_brightness": "🔅", "luggage": "🧳", + "luxembourg": "🇱🇺", "lying_face": "🤥", "m": "Ⓜ️", + "macao_sar_china": "🇲🇴", + "madagascar": "🇲🇬", "mag": "🔍", "mag_right": "🔎", "mage": "🧙", @@ -717,7 +858,12 @@ "mailbox_closed": "📪", "mailbox_with_mail": "📬", "mailbox_with_no_mail": "📭", + "malawi": "🇲🇼", + "malaysia": "🇲🇾", + "maldives": "🇲🇻", "male_sign": "♂", + "mali": "🇲🇱", + "malta": "🇲🇹", "man": "👨", "man_dancing": "🕺", "man_in_suit": "🕴", @@ -730,10 +876,15 @@ "mantelpiece_clock": "🕰", "manual_wheelchair": "🦽", "maple_leaf": "🍁", + "marshall_islands": "🇲🇭", "martial_arts_uniform": "🥋", + "martinique": "🇲🇶", "mask": "😷", "massage": "💆", "mate": "🧉", + "mauritania": "🇲🇷", + "mauritius": "🇲🇺", + "mayotte": "🇾🇹", "meat_on_bone": "🍖", "mechanical_arm": "🦾", "mechanical_leg": "🦿", @@ -745,12 +896,15 @@ "mega": "📣", "melon": "🍈", "memo": "📝", + "mending_heart": "❤️‍🩹", "menorah": "🕎", "mens": "🚹", "merperson": "🧜", "metal": "🤘", "metro": "🚇", + "mexico": "🇲🇽", "microbe": "🦠", + "micronesia": "🇫🇲", "microphone": "🎤", "microscope": "🔬", "middle_finger": "🖕", @@ -760,14 +914,20 @@ "minibus": "🚐", "minidisc": "💽", "mobile_phone_off": "📴", + "moldova": "🇲🇩", + "monaco": "🇲🇨", "money_mouth": "🤑", "money_with_wings": "💸", "moneybag": "💰", "moneymouth_face": "🤑", + "mongolia": "🇲🇳", "monkey": "🐒", "monkey_face": "🐵", "monorail": "🚝", + "montenegro": "🇲🇪", + "montserrat": "🇲🇸", "moon_cake": "🥮", + "morocco": "🇲🇦", "mortar_board": "🎓", "mosque": "🕌", "mosquito": "🦟", @@ -785,6 +945,7 @@ "mouse2": "🐁", "movie_camera": "🎥", "moyai": "🗿", + "mozambique": "🇲🇿", "mrs_claus": "🤶", "multiplication_sign": "✖", "muscle": "💪", @@ -793,23 +954,34 @@ "musical_note": "🎵", "musical_score": "🎼", "mute": "🔇", + "myanmar_burma": "🇲🇲", "nail_care": "💅", "name_badge": "📛", + "namibia": "🇳🇦", "national_park": "🏞", + "nauru": "🇳🇷", "nauseated_face": "🤢", "nazar_amulet": "🧿", "necktie": "👔", "negative_squared_cross_mark": "❎", + "nepal": "🇳🇵", "nerd": "🤓", + "netherlands": "🇳🇱", "neutral_face": "😐", "new": "🆕", + "new_caledonia": "🇳🇨", "new_moon": "🌑", "new_moon_with_face": "🌚", + "new_zealand": "🇳🇿", "newspaper": "📰", "next_track_button": "⏭️", "ng": "🆖", + "nicaragua": "🇳🇮", + "niger": "🇳🇪", + "nigeria": "🇳🇬", "night_with_stars": "🌃", "nine": "9⃣", + "niue": "🇳🇺", "no_bell": "🔕", "no_bicycles": "🚳", "no_entry": "⛔", @@ -820,6 +992,11 @@ "no_pedestrians": "🚷", "no_smoking": "🚭", "non-potable_water": "🚱", + "norfolk_island": "🇳🇫", + "north_korea": "🇰🇵", + "north_macedonia": "🇲🇰", + "northern_mariana_islands": "🇲🇵", + "norway": "🇳🇴", "nose": "👃", "notebook": "📓", "notebook_with_decorative_cover": "📔", @@ -842,6 +1019,7 @@ "older_person": "🧓", "older_woman": "👵", "om_symbol": "🕉", + "oman": "🇴🇲", "on": "🔛", "oncoming_automobile": "🚘", "oncoming_bus": "🚍", @@ -872,12 +1050,18 @@ "page_with_curl": "📃", "pager": "📟", "paintbrush": "🖌", + "pakistan": "🇵🇰", + "palau": "🇵🇼", + "palestinian_territories": "🇵🇸", "palm_tree": "🌴", "palms_up_together": "🤲", + "panama": "🇵🇦", "pancakes": "🥞", "panda_face": "🐼", "paperclip": "📎", + "papua_new_guinea": "🇵🇬", "parachute": "🪂", + "paraguay": "🇵🇾", "parrot": "🦜", "part_alternation_mark": "〽", "partly_sunny": "⛅", @@ -934,7 +1118,9 @@ "person_wearing_turban": "👳", "person_with_blond_hair": "👱", "person_with_pouting_face": "🙎", + "peru": "🇵🇪", "petri_dish": "🧫", + "philippines": "🇵🇭", "pick": "⛏️", "pie": "🥧", "pig": "🐷", @@ -944,7 +1130,9 @@ "pinching_hand": "🤏", "pineapple": "🍍", "ping_pong": "🏓", + "pirate_flag": "🏴‍☠️", "pisces": "♓", + "pitcairn_islands": "🇵🇳", "pizza": "🍕", "place_of_worship": "🛐", "play_button": "▶", @@ -956,11 +1144,13 @@ "point_right": "👉", "point_up": "☝️", "point_up_2": "👆", + "poland": "🇵🇱", "police_car": "🚓", "police_officer": "👮", "poodle": "🐩", "poop": "💩", "popcorn": "🍿", + "portugal": "🇵🇹", "post_office": "🏣", "postal_horn": "📯", "postbox": "📮", @@ -978,6 +1168,7 @@ "princess": "👸", "printer": "🖨", "probing_cane": "🦯", + "puerto_rico": "🇵🇷", "punch": "👊", "purple_circle": "🟣", "purple_heart": "💜", @@ -985,6 +1176,7 @@ "pushpin": "📌", "put_litter_in_its_place": "🚮", "puzzle_piece": "🧩", + "qatar": "🇶🇦", "question": "❓", "rabbit": "🐰", "rabbit2": "🐇", @@ -998,6 +1190,7 @@ "railway_car": "🚃", "railway_track": "🛤", "rainbow": "🌈", + "rainbow_flag": "🏳️‍🌈", "raised_back_of_hand": "🤚", "raised_hand": "✋", "raised_hands": "🙌", @@ -1049,6 +1242,7 @@ "repeat_one": "🔂", "rescue_worker’s_helmet": "⛑️", "restroom": "🚻", + "reunion": "🇷🇪", "reverse_button": "◀", "revolving_hearts": "💞", "rewind": "⏪", @@ -1075,6 +1269,7 @@ "roller_coaster": "🎢", "rolling_eyes": "🙄", "rolling_on_the_floor_laughing": "🤣", + "romania": "🇷🇴", "rooster": "🐓", "rose": "🌹", "rosette": "🏵", @@ -1084,6 +1279,8 @@ "rugby_football": "🏉", "runner": "🏃", "running_shirt_with_sash": "🎽", + "russia": "🇷🇺", + "rwanda": "🇷🇼", "safety_pin": "🧷", "safety_vest": "🦺", "sagittarius": "♐", @@ -1091,11 +1288,15 @@ "sake": "🍶", "salad": "🥗", "salt": "🧂", + "samoa": "🇼🇸", + "san_marino": "🇸🇲", "sandal": "👡", "sandwich": "🥪", "santa": "🎅", + "sao_tome_and_principe": "🇸🇹", "sari": "🥻", "satellite": "📡", + "saudi_arabia": "🇸🇦", "sauropod": "🦕", "saxophone": "🎷", "scales": "⚖", @@ -1106,6 +1307,7 @@ "scooter": "🛴", "scorpion": "🦂", "scorpius": "♏", + "scotland": "🏴󠁧󠁢󠁳󠁣󠁴󠁿", "scream": "😱", "scream_cat": "🙀", "scroll": "📜", @@ -1115,7 +1317,10 @@ "see_no_evil": "🙈", "seedling": "🌱", "selfie": "🤳", + "senegal": "🇸🇳", + "serbia": "🇷🇸", "seven": "7⃣", + "seychelles": "🇸🇨", "shallow_pan_of_food": "🥘", "shamrock": "☘️", "shark": "🦈", @@ -1132,8 +1337,11 @@ "shower": "🚿", "shrimp": "🦐", "shushing_face": "🤫", + "sierra_leone": "🇸🇱", "sign_of_the_horns": "🤘", "signal_strength": "📶", + "singapore": "🇸🇬", + "sint_maarten": "🇸🇽", "six": "6⃣", "six_pointed_star": "🔯", "skateboard": "🛹", @@ -1152,6 +1360,8 @@ "slightly_frowning_face": "🙁", "slot_machine": "🎰", "sloth": "🦥", + "slovakia": "🇸🇰", + "slovenia": "🇸🇮", "small_airplane": "🛩", "small_blue_diamond": "🔹", "small_orange_diamond": "🔸", @@ -1180,13 +1390,20 @@ "soccer": "⚽", "socks": "🧦", "softball": "🥎", + "solomon_islands": "🇸🇧", + "somalia": "🇸🇴", "soon": "🔜", "sos": "🆘", "sound": "🔉", + "south_africa": "🇿🇦", + "south_georgia_and_south_sandwich_islands": "🇬🇸", + "south_korea": "🇰🇷", + "south_sudan": "🇸🇸", "space_invader": "👾", "spade_suit": "♠️", "spades": "♠", "spaghetti": "🍝", + "spain": "🇪🇸", "sparkle": "❇", "sparkler": "🎇", "sparkles": "✨", @@ -1204,6 +1421,14 @@ "sponge": "🧽", "spoon": "🥄", "squid": "🦑", + "sri_lanka": "🇱🇰", + "st_barthelemy": "🇧🇱", + "st_helena": "🇸🇭", + "st_kitts_and_nevis": "🇰🇳", + "st_lucia": "🇱🇨", + "st_martin": "🇲🇫", + "st_pierre_and_miquelon": "🇵🇲", + "st_vincent_and_grenadines": "🇻🇨", "stadium": "🏟", "star": "⭐", "star2": "🌟", @@ -1226,6 +1451,7 @@ "stuck_out_tongue_winking_eye": "😜", "studio_microphone": "🎙", "stuffed_flatbread": "🥙", + "sudan": "🇸🇩", "sun": "☀", "sun_behind_large_cloud": "🌥", "sun_behind_rain_cloud": "🌦", @@ -1239,23 +1465,31 @@ "superhero": "🦸", "supervillain": "🦹", "surfer": "🏄", + "suriname": "🇸🇷", "sushi": "🍣", "suspension_railway": "🚟", + "svalbard_and_jan_mayen": "🇸🇯", "swan": "🦢", "sweat": "😓", "sweat_drops": "💦", "sweat_smile": "😅", + "sweden": "🇸🇪", "sweet_potato": "🍠", "swimmer": "🏊", + "switzerland": "🇨🇭", "symbols": "🔣", "synagogue": "🕍", + "syria": "🇸🇾", "syringe": "💉", "t_rex": "🦖", "taco": "🌮", "tada": "🎉", + "taiwan": "🇹🇼", + "tajikistan": "🇹🇯", "takeout_box": "🥡", "tanabata_tree": "🎋", "tangerine": "🍊", + "tanzania": "🇹🇿", "taurus": "♉", "taxi": "🚕", "tea": "🍵", @@ -1266,6 +1500,7 @@ "tennis": "🎾", "tent": "⛺", "test_tube": "🧪", + "thailand": "🇹🇭", "thermometer": "🌡", "thermometer_face": "🤒", "thinking": "🤔", @@ -1279,9 +1514,12 @@ "tiger": "🐯", "tiger2": "🐅", "timer_clock": "⏲️", + "timor_leste": "🇹🇱", "tired_face": "😫", "tm": "™", + "togo": "🇹🇬", "toilet": "🚽", + "tokelau": "🇹🇰", "tokyo_tower": "🗼", "tomato": "🍅", "tone1": "🏻", @@ -1289,6 +1527,7 @@ "tone3": "🏽", "tone4": "🏾", "tone5": "🏿", + "tonga": "🇹🇴", "tongue": "👅", "toolbox": "🧰", "tooth": "🦷", @@ -1304,10 +1543,13 @@ "train": "🚋", "train2": "🚆", "tram": "🚊", + "transgender_flag": "🏳️‍⚧️", "trex": "🦖", "triangular_flag_on_post": "🚩", "triangular_ruler": "📐", "trident": "🔱", + "trinidad_and_tobago": "🇹🇹", + "tristan_da_cunha": "🇹🇦", "triumph": "😤", "trolleybus": "🚎", "trophy": "🏆", @@ -1317,8 +1559,13 @@ "trumpet": "🎺", "tulip": "🌷", "tumbler_glass": "🥃", + "tunisia": "🇹🇳", "turkey": "🦃", + "turkiye": "🇹🇷", + "turkmenistan": "🇹🇲", + "turks_and_caicos_islands": "🇹🇨", "turtle": "🐢", + "tuvalu": "🇹🇻", "tv": "📺", "twisted_rightwards_arrows": "🔀", "two": "2⃣", @@ -1336,11 +1583,17 @@ "u7533": "🈸", "u7981": "🈲", "u7a7a": "🈳", + "uganda": "🇺🇬", + "ukraine": "🇺🇦", "umbrella": "☔", "umbrella_on_ground": "⛱️", "unamused": "😒", "underage": "🔞", "unicorn": "🦄", + "united_arab_emirates": "🇦🇪", + "united_kingdom": "🇬🇧", + "united_nations": "🇺🇳", + "united_states": "🇺🇸", "unlock": "🔓", "up": "🆙", "up_arrow": "⬆", @@ -1348,14 +1601,22 @@ "upleft_arrow": "↖️", "upright_arrow": "↗", "upside_down": "🙃", + "uruguay": "🇺🇾", + "us_outlying_islands": "🇺🇲", + "us_virgin_islands": "🇻🇮", + "uzbekistan": "🇺🇿", "v": "✌️", "vampire": "🧛", + "vanuatu": "🇻🇺", + "vatican_city": "🇻🇦", + "venezuela": "🇻🇪", "vertical_traffic_light": "🚦", "vhs": "📼", "vibration_mode": "📳", "victory_hand": "✌", "video_camera": "📹", "video_game": "🎮", + "vietnam": "🇻🇳", "violin": "🎻", "virgo": "♍", "volcano": "🌋", @@ -1364,7 +1625,9 @@ "vulcan": "🖖", "vulcan_salute": "🖖", "waffle": "🧇", + "wales": "🏴󠁧󠁢󠁷󠁬󠁳󠁿", "walking": "🚶", + "wallis_and_futuna": "🇼🇫", "waning_crescent_moon": "🌘", "waning_gibbous_moon": "🌖", "warning": "⚠", @@ -1380,6 +1643,7 @@ "weary": "😩", "wedding": "💒", "weightlifter": "🏋", + "western_sahara": "🇪🇭", "whale": "🐳", "whale2": "🐋", "wheel_of_dharma": "☸️", @@ -1417,15 +1681,18 @@ "yellow_circle": "🟡", "yellow_heart": "💛", "yellow_square": "🟨", + "yemen": "🇾🇪", "yen": "💴", "yin_yang": "☯️", "yoyo": "🪀", "yum": "😋", + "zambia": "🇿🇲", "zany_face": "🤪", "zap": "⚡", "zebra": "🦓", "zero": "0⃣", + "zimbabwe": "🇿🇼", "zipper_mouth": "🤐", "zombie": "🧟", "zzz": "💤" -} \ No newline at end of file +}