diff --git a/package.json b/package.json --- a/package.json +++ b/package.json @@ -83,9 +83,10 @@ "@expo/webpack-config": "^19.0.1", "@floating-ui/dom": "^1.6.3", "@floating-ui/react-dom": "^2.0.8", - "@formatjs/intl-locale": "^4.2.8", - "@formatjs/intl-numberformat": "^8.15.1", - "@formatjs/intl-pluralrules": "^5.4.1", + "@formatjs/intl-displaynames": "^6.8.13", + "@formatjs/intl-locale": "^4.2.13", + "@formatjs/intl-numberformat": "^8.15.6", + "@formatjs/intl-pluralrules": "^5.4.6", "@fortawesome/fontawesome-svg-core": "^6.1.1", "@fortawesome/free-regular-svg-icons": "^6.1.1", "@fortawesome/free-solid-svg-icons": "^6.1.1", diff --git a/yarn.lock b/yarn.lock --- a/yarn.lock +++ b/yarn.lock @@ -4664,74 +4664,83 @@ resolved "https://registry.yarnpkg.com/@floating-ui/utils/-/utils-0.2.1.tgz#16308cea045f0fc777b6ff20a9f25474dd8293d2" integrity sha512-9TANp6GPoMtYzQdt54kfAyMmz1+osLlXdg2ENroU7zzrtflTLrrC/lgrIfaSe+Wu0b89GKccT7vxXA0MoAIO+Q== -"@formatjs/ecma402-abstract@2.3.1": - version "2.3.1" - resolved "https://registry.yarnpkg.com/@formatjs/ecma402-abstract/-/ecma402-abstract-2.3.1.tgz#cdeb3ffe1aeea9c4284b85b7e37e8e8615314c39" - integrity sha512-Ip9uV+/MpLXWRk03U/GzeJMuPeOXpJBSB5V1tjA6kJhvqssye5J5LoYLc7Z5IAHb7nR62sRoguzrFiVCP/hnzw== +"@formatjs/ecma402-abstract@2.3.6": + version "2.3.6" + resolved "https://registry.yarnpkg.com/@formatjs/ecma402-abstract/-/ecma402-abstract-2.3.6.tgz#d6ca9d3579054fe1e1a0a0b5e872e0d64922e4e1" + integrity sha512-HJnTFeRM2kVFVr5gr5kH1XP6K0JcJtE7Lzvtr3FS/so5f1kpsqqqxy5JF+FRaO6H2qmcMfAUIox7AJteieRtVw== dependencies: - "@formatjs/fast-memoize" "2.2.5" - "@formatjs/intl-localematcher" "0.5.9" - decimal.js "10" - tslib "2" + "@formatjs/fast-memoize" "2.2.7" + "@formatjs/intl-localematcher" "0.6.2" + decimal.js "^10.4.3" + tslib "^2.8.0" -"@formatjs/fast-memoize@2.2.5": - version "2.2.5" - resolved "https://registry.yarnpkg.com/@formatjs/fast-memoize/-/fast-memoize-2.2.5.tgz#54a4a1793d773b72c372d3dcab3595149aee7880" - integrity sha512-6PoewUMrrcqxSoBXAOJDiW1m+AmkrAj0RiXnOMD59GRaswjXhm3MDhgepXPBgonc09oSirAJTsAggzAGQf6A6g== +"@formatjs/fast-memoize@2.2.7": + version "2.2.7" + resolved "https://registry.yarnpkg.com/@formatjs/fast-memoize/-/fast-memoize-2.2.7.tgz#707f9ddaeb522a32f6715bb7950b0831f4cc7b15" + integrity sha512-Yabmi9nSvyOMrlSeGGWDiH7rf3a7sIwplbvo/dlz9WCIjzIQAfy1RMf4S0X3yG724n5Ghu2GmEl5NJIV6O9sZQ== dependencies: - tslib "2" + tslib "^2.8.0" -"@formatjs/intl-enumerator@1.8.7": - version "1.8.7" - resolved "https://registry.yarnpkg.com/@formatjs/intl-enumerator/-/intl-enumerator-1.8.7.tgz#3f004753333f80cc468ae34046bd8416772a0412" - integrity sha512-qd7UlWUivKRJ073btssUqMSqzWW9yN3Ki6EqfCZ6uvIv19mONelE5q3GMmdPWBEjgqZikBzBE2qPTqfrgJ4TCA== +"@formatjs/intl-displaynames@^6.8.13": + version "6.8.13" + resolved "https://registry.yarnpkg.com/@formatjs/intl-displaynames/-/intl-displaynames-6.8.13.tgz#5e85980b40fbaa0b81e504608e33db6e16a3891e" + integrity sha512-VbY7BdYJX5eURVKLk2grndUQtnbCLNbcJId/Sb/PsX7fWXiqWvg7qt/mecVHRzqoSEoGCQToKDxzpJj8RC0s3g== dependencies: - "@formatjs/ecma402-abstract" "2.3.1" - tslib "2" + "@formatjs/ecma402-abstract" "2.3.6" + "@formatjs/intl-localematcher" "0.6.2" + tslib "^2.8.0" -"@formatjs/intl-getcanonicallocales@2.5.4": - version "2.5.4" - resolved "https://registry.yarnpkg.com/@formatjs/intl-getcanonicallocales/-/intl-getcanonicallocales-2.5.4.tgz#9b843e1891dea83405c51eb3d00c42ef9cb6cab9" - integrity sha512-vSDOsAcc3U+Kl/0b3de8wCQkb3W30H8LUuslyz67wTAHOPSQhPimZyquhwxXpJR+K5yy9CkzTgk5YE5kFT+PFg== +"@formatjs/intl-enumerator@1.8.12": + version "1.8.12" + resolved "https://registry.yarnpkg.com/@formatjs/intl-enumerator/-/intl-enumerator-1.8.12.tgz#8c94a9bff855fb942a95a4c93b5bdeb1a8f54007" + integrity sha512-rT2hnyQ0q6RDG1jISMH+MP6wlHQLUC81C0BeYEzabJb48S4tU2HGCPUxsOqMa3vDAUmpnz9Kw5vYTD5hTkOVgg== dependencies: - tslib "2" + "@formatjs/ecma402-abstract" "2.3.6" + tslib "^2.8.0" -"@formatjs/intl-locale@^4.2.8": - version "4.2.8" - resolved "https://registry.yarnpkg.com/@formatjs/intl-locale/-/intl-locale-4.2.8.tgz#571d44e92b6eb43b7410b37f25e280ec384a32cf" - integrity sha512-6RY/npeA0kyoZ8QW0JRAT+VBAFBT6+4ZVeGkKCNIDjbLX2LPuU73emGR35Mbwcc6pquVFrxyo6mXxKNzib0kEA== +"@formatjs/intl-getcanonicallocales@2.5.6": + version "2.5.6" + resolved "https://registry.yarnpkg.com/@formatjs/intl-getcanonicallocales/-/intl-getcanonicallocales-2.5.6.tgz#d4a8e13dad31f83c142746b423462dcbdf839503" + integrity sha512-CnBbc4St61RL06gDXlCZG08Gt41uiySgsdZNBExh8/c0FBONJCrAlQ9FsyalUdq9ze0nCeknJtMmO8JnB9xHgQ== dependencies: - "@formatjs/ecma402-abstract" "2.3.1" - "@formatjs/intl-enumerator" "1.8.7" - "@formatjs/intl-getcanonicallocales" "2.5.4" - tslib "2" + tslib "^2.8.0" -"@formatjs/intl-localematcher@0.5.9": - version "0.5.9" - resolved "https://registry.yarnpkg.com/@formatjs/intl-localematcher/-/intl-localematcher-0.5.9.tgz#43c6ee22be85b83340bcb09bdfed53657a2720db" - integrity sha512-8zkGu/sv5euxbjfZ/xmklqLyDGQSxsLqg8XOq88JW3cmJtzhCP8EtSJXlaKZnVO4beEaoiT9wj4eIoCQ9smwxA== +"@formatjs/intl-locale@^4.2.13": + version "4.2.13" + resolved "https://registry.yarnpkg.com/@formatjs/intl-locale/-/intl-locale-4.2.13.tgz#21d4b54ee03b75a7b7384a122510be7ee080a9c5" + integrity sha512-Qcs0mP9JhEPCinPfpZ5JKzOa+VYDg94TQSFZozYuqG8R+hEGUTKyoyMqB5xi5QZT/hlB0CSgeNc/0fWMGtTFXA== dependencies: - tslib "2" + "@formatjs/ecma402-abstract" "2.3.6" + "@formatjs/intl-enumerator" "1.8.12" + "@formatjs/intl-getcanonicallocales" "2.5.6" + tslib "^2.8.0" -"@formatjs/intl-numberformat@^8.15.1": - version "8.15.1" - resolved "https://registry.yarnpkg.com/@formatjs/intl-numberformat/-/intl-numberformat-8.15.1.tgz#b2a5b00889ed31dbef9d4e5aeee1dea3d040b068" - integrity sha512-NIouSY50xpH/SMJrRbX1Q3hMsGyQmT5MQrta/bOYhpZda1bztOlEYZAKLytk8VGs10wkGz875602mCMhtg4/LA== +"@formatjs/intl-localematcher@0.6.2": + version "0.6.2" + resolved "https://registry.yarnpkg.com/@formatjs/intl-localematcher/-/intl-localematcher-0.6.2.tgz#e9ebe0b4082d7d48e5b2d753579fb7ece4eaefea" + integrity sha512-XOMO2Hupl0wdd172Y06h6kLpBz6Dv+J4okPLl4LPtzbr8f66WbIoy4ev98EBuZ6ZK4h5ydTN6XneT4QVpD7cdA== dependencies: - "@formatjs/ecma402-abstract" "2.3.1" - "@formatjs/intl-localematcher" "0.5.9" - decimal.js "10" - tslib "2" + tslib "^2.8.0" -"@formatjs/intl-pluralrules@^5.4.1": - version "5.4.1" - resolved "https://registry.yarnpkg.com/@formatjs/intl-pluralrules/-/intl-pluralrules-5.4.1.tgz#1c03cd2da449e1871bb7c54ea36fec1de68b7e7e" - integrity sha512-kKK4ixTsfKAzyJIVRiJGuw4zd18nEHXiKloYBO9VmLpxrwJTgLQHv2+1hcbxQcwbbo2uc8moUFQuyvxeGEFOfw== +"@formatjs/intl-numberformat@^8.15.6": + version "8.15.6" + resolved "https://registry.yarnpkg.com/@formatjs/intl-numberformat/-/intl-numberformat-8.15.6.tgz#baf3a00e97887366eddfb4b9782830e06b96883f" + integrity sha512-htynTNKm5WOnbR521tNSMkWzX3yO6Z77qjOxvRujh5/A/UBKeoNElyuKCJltizdx3X33QNWQZC4aWjLKcccyeQ== dependencies: - "@formatjs/ecma402-abstract" "2.3.1" - "@formatjs/intl-localematcher" "0.5.9" - decimal.js "10" - tslib "2" + "@formatjs/ecma402-abstract" "2.3.6" + "@formatjs/intl-localematcher" "0.6.2" + decimal.js "^10.4.3" + tslib "^2.8.0" + +"@formatjs/intl-pluralrules@^5.4.6": + version "5.4.6" + resolved "https://registry.yarnpkg.com/@formatjs/intl-pluralrules/-/intl-pluralrules-5.4.6.tgz#4bd73c4e87974265a7962b6caf0d146e3310f3ad" + integrity sha512-2HlOq+c7KsSps829SJ3B5987coX5mzKx9NbPcNwQ07eq8FBHgB3HfMoxt5HvLsdk4oQwCjAEnocbtd+wVwZ2Kg== + dependencies: + "@formatjs/ecma402-abstract" "2.3.6" + "@formatjs/intl-localematcher" "0.6.2" + decimal.js "^10.4.3" + tslib "^2.8.0" "@fortawesome/fontawesome-common-types@6.4.2": version "6.4.2" @@ -10209,10 +10218,15 @@ resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290" integrity sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA== -decimal.js@10, decimal.js@^10.4.2: +decimal.js@^10.4.2: version "10.4.3" resolved "https://registry.yarnpkg.com/decimal.js/-/decimal.js-10.4.3.tgz#1044092884d245d1b7f65725fa4ad4c6f781cc23" integrity sha512-VBBaLc1MgL5XpzgIP7ny5Z6Nx3UrRkIViUkPUdtl9aya5amy3De1gsUUSB1g3+3sExYNjCAsAznmukyxCb1GRA== + +decimal.js@^10.4.3: + version "10.6.0" + resolved "https://registry.yarnpkg.com/decimal.js/-/decimal.js-10.6.0.tgz#e649a43e3ab953a72192ff5983865e509f37ed9a" + integrity sha512-YpgQiITW3JXGntzdUmyUR1V812Hn8T1YVXhCu+wO3OpS4eU9l4YdD3qjyiKdV6mvV29zapkMeD390UVEf2lkUg== decode-uri-component@^0.2.2: version "0.2.2" @@ -19227,11 +19241,6 @@ minimist "^1.2.6" strip-bom "^3.0.0" -tslib@2, tslib@^2.6.2, tslib@^2.8.1: - version "2.8.1" - resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.8.1.tgz#612efe4ed235d567e8aba5f2a5fab70280ade83f" - integrity sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w== - tslib@^1.8.1, tslib@^1.9.0: version "1.14.1" resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.14.1.tgz#cf2d38bdc34a134bcaf1091c41f6619e2f672d00" @@ -19241,6 +19250,11 @@ version "2.6.2" resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.6.2.tgz#703ac29425e7b37cd6fd456e92404d46d1f3e4ae" integrity sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q== + +tslib@^2.6.2, tslib@^2.8.0, tslib@^2.8.1: + version "2.8.1" + resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.8.1.tgz#612efe4ed235d567e8aba5f2a5fab70280ade83f" + integrity sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w== tsutils@^3.21.0: version "3.21.0" diff --git a/src/components/AppLanguageDropdown.tsx b/src/components/AppLanguageDropdown.tsx --- a/src/components/AppLanguageDropdown.tsx +++ b/src/components/AppLanguageDropdown.tsx @@ -66,6 +66,7 @@ )} ( diff --git a/src/components/Button.tsx b/src/components/Button.tsx --- a/src/components/Button.tsx +++ b/src/components/Button.tsx @@ -105,7 +105,8 @@ PressableComponent?: React.ComponentType } -export type ButtonTextProps = TextProps & VariantProps & {disabled?: boolean} +export type ButtonTextProps = TextProps & + VariantProps & {disabled?: boolean; emoji?: boolean} const Context = React.createContext({ hovered: false, diff --git a/src/components/InternationalPhoneCodeSelect.tsx b/src/components/InternationalPhoneCodeSelect.tsx new file mode 100644 --- /dev/null +++ b/src/components/InternationalPhoneCodeSelect.tsx @@ -0,0 +1,116 @@ +import {Fragment, useMemo} from 'react' +import {Image} from 'expo-image' +import {msg} from '@lingui/macro' +import {useLingui} from '@lingui/react' + +import { + getDefaultCountry, + INTERNATIONAL_TELEPHONE_CODES, +} from '#/lib/international-telephone-codes' +import {regionName} from '#/locale/helpers' +import {isWeb} from '#/platform/detection' +import {atoms as a, web} from '#/alf' +import * as Select from '#/components/Select' +import {useGeolocation} from '#/geolocation' + +/** + * Country picker for a phone number input + * + * Pro tip: you can use `location?.countryCode` from `useGeolocationStatus()` + * to set a default value. + */ +export function InternationalPhoneCodeSelect({ + value, + onChange, +}: { + value?: string + onChange: (value: string) => void +}) { + const {_, i18n} = useLingui() + const location = useGeolocation() + + const defaultCountry = useMemo(() => { + return getDefaultCountry(location) + }, [location]) + + const items = useMemo(() => { + return ( + Object.entries(INTERNATIONAL_TELEPHONE_CODES) + .map(([value, {code, unicodeFlag, svgFlag}]) => { + const name = regionName(value, i18n.locale) + + return { + value, + name, + code, + label: `${name} ${code}`, + unicodeFlag, + svgFlag, + } + }) + // boost the default value to the top, then sort by name + .sort((a, b) => { + if (a.value === defaultCountry) return -1 + if (b.value === defaultCountry) return 1 + return a.name.localeCompare(b.name) + }) + ) + }, [i18n.locale, defaultCountry]) + + const selected = useMemo(() => { + return items.find(item => item.value === value) + }, [value, items]) + + return ( + + + + {selected => ( + <> + + {selected.code} + + )} + + + + ( + + + + + {isWeb ? : item.unicodeFlag + ' '} + {item.name} + + + {' '} + {item.code} + + + {item.value === defaultCountry && } + + )} + /> + + ) +} + +function Flag({unicodeFlag, svgFlag}: {unicodeFlag: string; svgFlag: any}) { + if (isWeb) { + return ( + + ) + } + return unicodeFlag + ' ' +} diff --git a/src/components/LanguageSelect.tsx b/src/components/LanguageSelect.tsx --- a/src/components/LanguageSelect.tsx +++ b/src/components/LanguageSelect.tsx @@ -13,10 +13,12 @@ label: l.name, value: l.code2, })), + label, }: { value?: string onChange: (value: string) => void items?: {label: string; value: string}[] + label?: string }) { const {_} = useLingui() @@ -37,6 +39,7 @@ ( diff --git a/src/lib/international-telephone-codes.ts b/src/lib/international-telephone-codes.ts new file mode 100644 --- /dev/null +++ b/src/lib/international-telephone-codes.ts @@ -0,0 +1,1273 @@ +export const INTERNATIONAL_TELEPHONE_CODES = { + AD: { + code: '+376', + unicodeFlag: '🇦🇩', + svgFlag: require('../../assets/icons/flags/AD.svg'), + }, + AF: { + code: '+93', + unicodeFlag: '🇦🇫', + svgFlag: require('../../assets/icons/flags/AF.svg'), + }, + AG: { + code: '+1268', + unicodeFlag: '🇦🇬', + svgFlag: require('../../assets/icons/flags/AG.svg'), + }, + AI: { + code: '+1264', + unicodeFlag: '🇦🇮', + svgFlag: require('../../assets/icons/flags/AI.svg'), + }, + AL: { + code: '+355', + unicodeFlag: '🇦🇱', + svgFlag: require('../../assets/icons/flags/AL.svg'), + }, + AM: { + code: '+374', + unicodeFlag: '🇦🇲', + svgFlag: require('../../assets/icons/flags/AM.svg'), + }, + AO: { + code: '+244', + unicodeFlag: '🇦🇴', + svgFlag: require('../../assets/icons/flags/AO.svg'), + }, + AQ: { + code: '+672', + unicodeFlag: '🇦🇶', + svgFlag: require('../../assets/icons/flags/AQ.svg'), + }, + AR: { + code: '+54', + unicodeFlag: '🇦🇷', + svgFlag: require('../../assets/icons/flags/AR.svg'), + }, + AS: { + code: '+1684', + unicodeFlag: '🇦🇸', + svgFlag: require('../../assets/icons/flags/AS.svg'), + }, + AT: { + code: '+43', + unicodeFlag: '🇦🇹', + svgFlag: require('../../assets/icons/flags/AT.svg'), + }, + AU: { + code: '+61', + unicodeFlag: '🇦🇺', + svgFlag: require('../../assets/icons/flags/AU.svg'), + }, + AW: { + code: '+297', + unicodeFlag: '🇦🇼', + svgFlag: require('../../assets/icons/flags/AW.svg'), + }, + AX: { + code: '+358', + unicodeFlag: '🇦🇽', + svgFlag: require('../../assets/icons/flags/AX.svg'), + }, + AZ: { + code: '+994', + unicodeFlag: '🇦🇿', + svgFlag: require('../../assets/icons/flags/AZ.svg'), + }, + BA: { + code: '+387', + unicodeFlag: '🇧🇦', + svgFlag: require('../../assets/icons/flags/BA.svg'), + }, + BB: { + code: '+1246', + unicodeFlag: '🇧🇧', + svgFlag: require('../../assets/icons/flags/BB.svg'), + }, + BD: { + code: '+880', + unicodeFlag: '🇧🇩', + svgFlag: require('../../assets/icons/flags/BD.svg'), + }, + BE: { + code: '+32', + unicodeFlag: '🇧🇪', + svgFlag: require('../../assets/icons/flags/BE.svg'), + }, + BF: { + code: '+226', + unicodeFlag: '🇧🇫', + svgFlag: require('../../assets/icons/flags/BF.svg'), + }, + BG: { + code: '+359', + unicodeFlag: '🇧🇬', + svgFlag: require('../../assets/icons/flags/BG.svg'), + }, + BH: { + code: '+973', + unicodeFlag: '🇧🇭', + svgFlag: require('../../assets/icons/flags/BH.svg'), + }, + BI: { + code: '+257', + unicodeFlag: '🇧🇮', + svgFlag: require('../../assets/icons/flags/BI.svg'), + }, + BJ: { + code: '+229', + unicodeFlag: '🇧🇯', + svgFlag: require('../../assets/icons/flags/BJ.svg'), + }, + BL: { + code: '+590', + unicodeFlag: '🇧🇱', + svgFlag: require('../../assets/icons/flags/BL.svg'), + }, + BM: { + code: '+1441', + unicodeFlag: '🇧🇲', + svgFlag: require('../../assets/icons/flags/BM.svg'), + }, + BN: { + code: '+673', + unicodeFlag: '🇧🇳', + svgFlag: require('../../assets/icons/flags/BN.svg'), + }, + BO: { + code: '+591', + unicodeFlag: '🇧🇴', + svgFlag: require('../../assets/icons/flags/BO.svg'), + }, + BQ: { + code: '+5997', + unicodeFlag: '🇧🇶', + svgFlag: require('../../assets/icons/flags/BQ.svg'), + }, + BR: { + code: '+55', + unicodeFlag: '🇧🇷', + svgFlag: require('../../assets/icons/flags/BR.svg'), + }, + BT: { + code: '+975', + unicodeFlag: '🇧🇹', + svgFlag: require('../../assets/icons/flags/BT.svg'), + }, + BV: { + code: '+47', + unicodeFlag: '🇧🇻', + svgFlag: require('../../assets/icons/flags/BV.svg'), + }, + BW: { + code: '+267', + unicodeFlag: '🇧🇼', + svgFlag: require('../../assets/icons/flags/BW.svg'), + }, + BY: { + code: '+375', + unicodeFlag: '🇧🇾', + svgFlag: require('../../assets/icons/flags/BY.svg'), + }, + BZ: { + code: '+501', + unicodeFlag: '🇧🇿', + svgFlag: require('../../assets/icons/flags/BZ.svg'), + }, + CA: { + code: '+1', + unicodeFlag: '🇨🇦', + svgFlag: require('../../assets/icons/flags/CA.svg'), + }, + CH: { + code: '+41', + unicodeFlag: '🇨🇭', + svgFlag: require('../../assets/icons/flags/CH.svg'), + }, + CI: { + code: '+225', + unicodeFlag: '🇨🇮', + svgFlag: require('../../assets/icons/flags/CI.svg'), + }, + CL: { + code: '+56', + unicodeFlag: '🇨🇱', + svgFlag: require('../../assets/icons/flags/CL.svg'), + }, + CM: { + code: '+237', + unicodeFlag: '🇨🇲', + svgFlag: require('../../assets/icons/flags/CM.svg'), + }, + CN: { + code: '+86', + unicodeFlag: '🇨🇳', + svgFlag: require('../../assets/icons/flags/CN.svg'), + }, + CO: { + code: '+57', + unicodeFlag: '🇨🇴', + svgFlag: require('../../assets/icons/flags/CO.svg'), + }, + CR: { + code: '+506', + unicodeFlag: '🇨🇷', + svgFlag: require('../../assets/icons/flags/CR.svg'), + }, + CU: { + code: '+53', + unicodeFlag: '🇨🇺', + svgFlag: require('../../assets/icons/flags/CU.svg'), + }, + CV: { + code: '+238', + unicodeFlag: '🇨🇻', + svgFlag: require('../../assets/icons/flags/CV.svg'), + }, + CW: { + code: '+599', + unicodeFlag: '🇨🇼', + svgFlag: require('../../assets/icons/flags/CW.svg'), + }, + CX: { + code: '+61', + unicodeFlag: '🇨🇽', + svgFlag: require('../../assets/icons/flags/CX.svg'), + }, + CY: { + code: '+357', + unicodeFlag: '🇨🇾', + svgFlag: require('../../assets/icons/flags/CY.svg'), + }, + DE: { + code: '+49', + unicodeFlag: '🇩🇪', + svgFlag: require('../../assets/icons/flags/DE.svg'), + }, + DJ: { + code: '+253', + unicodeFlag: '🇩🇯', + svgFlag: require('../../assets/icons/flags/DJ.svg'), + }, + DK: { + code: '+45', + unicodeFlag: '🇩🇰', + svgFlag: require('../../assets/icons/flags/DK.svg'), + }, + DM: { + code: '+767', + unicodeFlag: '🇩🇲', + svgFlag: require('../../assets/icons/flags/DM.svg'), + }, + DZ: { + code: '+213', + unicodeFlag: '🇩🇿', + svgFlag: require('../../assets/icons/flags/DZ.svg'), + }, + EC: { + code: '+593', + unicodeFlag: '🇪🇨', + svgFlag: require('../../assets/icons/flags/EC.svg'), + }, + EE: { + code: '+372', + unicodeFlag: '🇪🇪', + svgFlag: require('../../assets/icons/flags/EE.svg'), + }, + EG: { + code: '+20', + unicodeFlag: '🇪🇬', + svgFlag: require('../../assets/icons/flags/EG.svg'), + }, + EH: { + code: '+212', + unicodeFlag: '🇪🇭', + svgFlag: require('../../assets/icons/flags/EH.svg'), + }, + ER: { + code: '+291', + unicodeFlag: '🇪🇷', + svgFlag: require('../../assets/icons/flags/ER.svg'), + }, + ES: { + code: '+34', + unicodeFlag: '🇪🇸', + svgFlag: require('../../assets/icons/flags/ES.svg'), + }, + ET: { + code: '+251', + unicodeFlag: '🇪🇹', + svgFlag: require('../../assets/icons/flags/ET.svg'), + }, + FI: { + code: '+358', + unicodeFlag: '🇫🇮', + svgFlag: require('../../assets/icons/flags/FI.svg'), + }, + FJ: { + code: '+679', + unicodeFlag: '🇫🇯', + svgFlag: require('../../assets/icons/flags/FJ.svg'), + }, + FM: { + code: '+691', + unicodeFlag: '🇫🇲', + svgFlag: require('../../assets/icons/flags/FM.svg'), + }, + FR: { + code: '+33', + unicodeFlag: '🇫🇷', + svgFlag: require('../../assets/icons/flags/FR.svg'), + }, + GA: { + code: '+241', + unicodeFlag: '🇬🇦', + svgFlag: require('../../assets/icons/flags/GA.svg'), + }, + GD: { + code: '+1473', + unicodeFlag: '🇬🇩', + svgFlag: require('../../assets/icons/flags/GD.svg'), + }, + GE: { + code: '+995', + unicodeFlag: '🇬🇪', + svgFlag: require('../../assets/icons/flags/GE.svg'), + }, + GF: { + code: '+594', + unicodeFlag: '🇬🇫', + svgFlag: require('../../assets/icons/flags/GF.svg'), + }, + GG: { + code: '+44', + unicodeFlag: '🇬🇬', + svgFlag: require('../../assets/icons/flags/GG.svg'), + }, + GH: { + code: '+233', + unicodeFlag: '🇬🇭', + svgFlag: require('../../assets/icons/flags/GH.svg'), + }, + GI: { + code: '+350', + unicodeFlag: '🇬🇮', + svgFlag: require('../../assets/icons/flags/GI.svg'), + }, + GL: { + code: '+299', + unicodeFlag: '🇬🇱', + svgFlag: require('../../assets/icons/flags/GL.svg'), + }, + GN: { + code: '+224', + unicodeFlag: '🇬🇳', + svgFlag: require('../../assets/icons/flags/GN.svg'), + }, + GP: { + code: '+590', + unicodeFlag: '🇬🇵', + svgFlag: require('../../assets/icons/flags/GP.svg'), + }, + GQ: { + code: '+240', + unicodeFlag: '🇬🇶', + svgFlag: require('../../assets/icons/flags/GQ.svg'), + }, + GR: { + code: '+30', + unicodeFlag: '🇬🇷', + svgFlag: require('../../assets/icons/flags/GR.svg'), + }, + GS: { + code: '+500', + unicodeFlag: '🇬🇸', + svgFlag: require('../../assets/icons/flags/GS.svg'), + }, + GT: { + code: '+502', + unicodeFlag: '🇬🇹', + svgFlag: require('../../assets/icons/flags/GT.svg'), + }, + GU: { + code: '+1', + unicodeFlag: '🇬🇺', + svgFlag: require('../../assets/icons/flags/GU.svg'), + }, + GW: { + code: '+245', + unicodeFlag: '🇬🇼', + svgFlag: require('../../assets/icons/flags/GW.svg'), + }, + GY: { + code: '+592', + unicodeFlag: '🇬🇾', + svgFlag: require('../../assets/icons/flags/GY.svg'), + }, + HK: { + code: '+852', + unicodeFlag: '🇭🇰', + svgFlag: require('../../assets/icons/flags/HK.svg'), + }, + HN: { + code: '+504', + unicodeFlag: '🇭🇳', + svgFlag: require('../../assets/icons/flags/HN.svg'), + }, + HR: { + code: '+385', + unicodeFlag: '🇭🇷', + svgFlag: require('../../assets/icons/flags/HR.svg'), + }, + HT: { + code: '+509', + unicodeFlag: '🇭🇹', + svgFlag: require('../../assets/icons/flags/HT.svg'), + }, + HU: { + code: '+36', + unicodeFlag: '🇭🇺', + svgFlag: require('../../assets/icons/flags/HU.svg'), + }, + ID: { + code: '+62', + unicodeFlag: '🇮🇩', + svgFlag: require('../../assets/icons/flags/ID.svg'), + }, + IE: { + code: '+353', + unicodeFlag: '🇮🇪', + svgFlag: require('../../assets/icons/flags/IE.svg'), + }, + IL: { + code: '+972', + unicodeFlag: '🇮🇱', + svgFlag: require('../../assets/icons/flags/IL.svg'), + }, + IM: { + code: '+44', + unicodeFlag: '🇮🇲', + svgFlag: require('../../assets/icons/flags/IM.svg'), + }, + IN: { + code: '+91', + unicodeFlag: '🇮🇳', + svgFlag: require('../../assets/icons/flags/IN.svg'), + }, + IO: { + code: '+246', + unicodeFlag: '🇮🇴', + svgFlag: require('../../assets/icons/flags/IO.svg'), + }, + IQ: { + code: '+964', + unicodeFlag: '🇮🇶', + svgFlag: require('../../assets/icons/flags/IQ.svg'), + }, + IR: { + code: '+98', + unicodeFlag: '🇮🇷', + svgFlag: require('../../assets/icons/flags/IR.svg'), + }, + IS: { + code: '+354', + unicodeFlag: '🇮🇸', + svgFlag: require('../../assets/icons/flags/IS.svg'), + }, + IT: { + code: '+39', + unicodeFlag: '🇮🇹', + svgFlag: require('../../assets/icons/flags/IT.svg'), + }, + JE: { + code: '+44', + unicodeFlag: '🇯🇪', + svgFlag: require('../../assets/icons/flags/JE.svg'), + }, + JM: { + code: '+876', + unicodeFlag: '🇯🇲', + svgFlag: require('../../assets/icons/flags/JM.svg'), + }, + JO: { + code: '+962', + unicodeFlag: '🇯🇴', + svgFlag: require('../../assets/icons/flags/JO.svg'), + }, + JP: { + code: '+81', + unicodeFlag: '🇯🇵', + svgFlag: require('../../assets/icons/flags/JP.svg'), + }, + KE: { + code: '+254', + unicodeFlag: '🇰🇪', + svgFlag: require('../../assets/icons/flags/KE.svg'), + }, + KG: { + code: '+996', + unicodeFlag: '🇰🇬', + svgFlag: require('../../assets/icons/flags/KG.svg'), + }, + KH: { + code: '+855', + unicodeFlag: '🇰🇭', + svgFlag: require('../../assets/icons/flags/KH.svg'), + }, + KP: { + code: '+850', + unicodeFlag: '🇰🇵', + svgFlag: require('../../assets/icons/flags/KP.svg'), + }, + KR: { + code: '+82', + unicodeFlag: '🇰🇷', + svgFlag: require('../../assets/icons/flags/KR.svg'), + }, + KI: { + code: '+686', + unicodeFlag: '🇰🇮', + svgFlag: require('../../assets/icons/flags/KI.svg'), + }, + KN: { + code: '+1869', + unicodeFlag: '🇰🇳', + svgFlag: require('../../assets/icons/flags/KN.svg'), + }, + KW: { + code: '+965', + unicodeFlag: '🇰🇼', + svgFlag: require('../../assets/icons/flags/KW.svg'), + }, + KZ: { + code: '+7', + unicodeFlag: '🇰🇿', + svgFlag: require('../../assets/icons/flags/KZ.svg'), + }, + LB: { + code: '+961', + unicodeFlag: '🇱🇧', + svgFlag: require('../../assets/icons/flags/LB.svg'), + }, + LC: { + code: '+1758', + unicodeFlag: '🇱🇨', + svgFlag: require('../../assets/icons/flags/LC.svg'), + }, + LI: { + code: '+423', + unicodeFlag: '🇱🇮', + svgFlag: require('../../assets/icons/flags/LI.svg'), + }, + LK: { + code: '+94', + unicodeFlag: '🇱🇰', + svgFlag: require('../../assets/icons/flags/LK.svg'), + }, + LR: { + code: '+231', + unicodeFlag: '🇱🇷', + svgFlag: require('../../assets/icons/flags/LR.svg'), + }, + LS: { + code: '+266', + unicodeFlag: '🇱🇸', + svgFlag: require('../../assets/icons/flags/LS.svg'), + }, + LT: { + code: '+370', + unicodeFlag: '🇱🇹', + svgFlag: require('../../assets/icons/flags/LT.svg'), + }, + LU: { + code: '+352', + unicodeFlag: '🇱🇺', + svgFlag: require('../../assets/icons/flags/LU.svg'), + }, + LV: { + code: '+371', + unicodeFlag: '🇱🇻', + svgFlag: require('../../assets/icons/flags/LV.svg'), + }, + LY: { + code: '+218', + unicodeFlag: '🇱🇾', + svgFlag: require('../../assets/icons/flags/LY.svg'), + }, + MA: { + code: '+212', + unicodeFlag: '🇲🇦', + svgFlag: require('../../assets/icons/flags/MA.svg'), + }, + MC: { + code: '+377', + unicodeFlag: '🇲🇨', + svgFlag: require('../../assets/icons/flags/MC.svg'), + }, + ME: { + code: '+382', + unicodeFlag: '🇲🇪', + svgFlag: require('../../assets/icons/flags/ME.svg'), + }, + MF: { + code: '+590', + unicodeFlag: '🇲🇫', + svgFlag: require('../../assets/icons/flags/MF.svg'), + }, + MG: { + code: '+261', + unicodeFlag: '🇲🇬', + svgFlag: require('../../assets/icons/flags/MG.svg'), + }, + ML: { + code: '+223', + unicodeFlag: '🇲🇱', + svgFlag: require('../../assets/icons/flags/ML.svg'), + }, + MM: { + code: '+95', + unicodeFlag: '🇲🇲', + svgFlag: require('../../assets/icons/flags/MM.svg'), + }, + MN: { + code: '+976', + unicodeFlag: '🇲🇳', + svgFlag: require('../../assets/icons/flags/MN.svg'), + }, + MO: { + code: '+853', + unicodeFlag: '🇲🇴', + svgFlag: require('../../assets/icons/flags/MO.svg'), + }, + MQ: { + code: '+596', + unicodeFlag: '🇲🇶', + svgFlag: require('../../assets/icons/flags/MQ.svg'), + }, + MR: { + code: '+222', + unicodeFlag: '🇲🇷', + svgFlag: require('../../assets/icons/flags/MR.svg'), + }, + MS: { + code: '+1664', + unicodeFlag: '🇲🇸', + svgFlag: require('../../assets/icons/flags/MS.svg'), + }, + MT: { + code: '+356', + unicodeFlag: '🇲🇹', + svgFlag: require('../../assets/icons/flags/MT.svg'), + }, + MU: { + code: '+230', + unicodeFlag: '🇲🇺', + svgFlag: require('../../assets/icons/flags/MU.svg'), + }, + MV: { + code: '+960', + unicodeFlag: '🇲🇻', + svgFlag: require('../../assets/icons/flags/MV.svg'), + }, + MW: { + code: '+265', + unicodeFlag: '🇲🇼', + svgFlag: require('../../assets/icons/flags/MW.svg'), + }, + MX: { + code: '+52', + unicodeFlag: '🇲🇽', + svgFlag: require('../../assets/icons/flags/MX.svg'), + }, + MY: { + code: '+60', + unicodeFlag: '🇲🇾', + svgFlag: require('../../assets/icons/flags/MY.svg'), + }, + MZ: { + code: '+258', + unicodeFlag: '🇲🇿', + svgFlag: require('../../assets/icons/flags/MZ.svg'), + }, + NA: { + code: '+264', + unicodeFlag: '🇳🇦', + svgFlag: require('../../assets/icons/flags/NA.svg'), + }, + NC: { + code: '+687', + unicodeFlag: '🇳🇨', + svgFlag: require('../../assets/icons/flags/NC.svg'), + }, + NF: { + code: '+672', + unicodeFlag: '🇳🇫', + svgFlag: require('../../assets/icons/flags/NF.svg'), + }, + NG: { + code: '+234', + unicodeFlag: '🇳🇬', + svgFlag: require('../../assets/icons/flags/NG.svg'), + }, + NI: { + code: '+505', + unicodeFlag: '🇳🇮', + svgFlag: require('../../assets/icons/flags/NI.svg'), + }, + NO: { + code: '+47', + unicodeFlag: '🇳🇴', + svgFlag: require('../../assets/icons/flags/NO.svg'), + }, + NP: { + code: '+977', + unicodeFlag: '🇳🇵', + svgFlag: require('../../assets/icons/flags/NP.svg'), + }, + NR: { + code: '+674', + unicodeFlag: '🇳🇷', + svgFlag: require('../../assets/icons/flags/NR.svg'), + }, + NU: { + code: '+683', + unicodeFlag: '🇳🇺', + svgFlag: require('../../assets/icons/flags/NU.svg'), + }, + NZ: { + code: '+64', + unicodeFlag: '🇳🇿', + svgFlag: require('../../assets/icons/flags/NZ.svg'), + }, + OM: { + code: '+968', + unicodeFlag: '🇴🇲', + svgFlag: require('../../assets/icons/flags/OM.svg'), + }, + PA: { + code: '+507', + unicodeFlag: '🇵🇦', + svgFlag: require('../../assets/icons/flags/PA.svg'), + }, + PE: { + code: '+51', + unicodeFlag: '🇵🇪', + svgFlag: require('../../assets/icons/flags/PE.svg'), + }, + PF: { + code: '+689', + unicodeFlag: '🇵🇫', + svgFlag: require('../../assets/icons/flags/PF.svg'), + }, + PG: { + code: '+675', + unicodeFlag: '🇵🇬', + svgFlag: require('../../assets/icons/flags/PG.svg'), + }, + PK: { + code: '+92', + unicodeFlag: '🇵🇰', + svgFlag: require('../../assets/icons/flags/PK.svg'), + }, + PL: { + code: '+48', + unicodeFlag: '🇵🇱', + svgFlag: require('../../assets/icons/flags/PL.svg'), + }, + PM: { + code: '+508', + unicodeFlag: '🇵🇲', + svgFlag: require('../../assets/icons/flags/PM.svg'), + }, + PN: { + code: '+64', + unicodeFlag: '🇵🇳', + svgFlag: require('../../assets/icons/flags/PN.svg'), + }, + PR: { + code: '+1', + unicodeFlag: '🇵🇷', + svgFlag: require('../../assets/icons/flags/PR.svg'), + }, + PS: { + code: '+970', + unicodeFlag: '🇵🇸', + svgFlag: require('../../assets/icons/flags/PS.svg'), + }, + PT: { + code: '+351', + unicodeFlag: '🇵🇹', + svgFlag: require('../../assets/icons/flags/PT.svg'), + }, + PW: { + code: '+680', + unicodeFlag: '🇵🇼', + svgFlag: require('../../assets/icons/flags/PW.svg'), + }, + PY: { + code: '+595', + unicodeFlag: '🇵🇾', + svgFlag: require('../../assets/icons/flags/PY.svg'), + }, + QA: { + code: '+974', + unicodeFlag: '🇶🇦', + svgFlag: require('../../assets/icons/flags/QA.svg'), + }, + RE: { + code: '+262', + unicodeFlag: '🇷🇪', + svgFlag: require('../../assets/icons/flags/RE.svg'), + }, + RO: { + code: '+40', + unicodeFlag: '🇷🇴', + svgFlag: require('../../assets/icons/flags/RO.svg'), + }, + RS: { + code: '+381', + unicodeFlag: '🇷🇸', + svgFlag: require('../../assets/icons/flags/RS.svg'), + }, + RU: { + code: '+7', + unicodeFlag: '🇷🇺', + svgFlag: require('../../assets/icons/flags/RU.svg'), + }, + RW: { + code: '+250', + unicodeFlag: '🇷🇼', + svgFlag: require('../../assets/icons/flags/RW.svg'), + }, + SA: { + code: '+966', + unicodeFlag: '🇸🇦', + svgFlag: require('../../assets/icons/flags/SA.svg'), + }, + SB: { + code: '+677', + unicodeFlag: '🇸🇧', + svgFlag: require('../../assets/icons/flags/SB.svg'), + }, + SC: { + code: '+248', + unicodeFlag: '🇸🇨', + svgFlag: require('../../assets/icons/flags/SC.svg'), + }, + SE: { + code: '+46', + unicodeFlag: '🇸🇪', + svgFlag: require('../../assets/icons/flags/SE.svg'), + }, + SG: { + code: '+65', + unicodeFlag: '🇸🇬', + svgFlag: require('../../assets/icons/flags/SG.svg'), + }, + SH: { + code: '+290', + unicodeFlag: '🇸🇭', + svgFlag: require('../../assets/icons/flags/SH.svg'), + }, + SI: { + code: '+386', + unicodeFlag: '🇸🇮', + svgFlag: require('../../assets/icons/flags/SI.svg'), + }, + SJ: { + code: '+4779', + unicodeFlag: '🇸🇯', + svgFlag: require('../../assets/icons/flags/SJ.svg'), + }, + SK: { + code: '+421', + unicodeFlag: '🇸🇰', + svgFlag: require('../../assets/icons/flags/SK.svg'), + }, + SL: { + code: '+232', + unicodeFlag: '🇸🇱', + svgFlag: require('../../assets/icons/flags/SL.svg'), + }, + SM: { + code: '+378', + unicodeFlag: '🇸🇲', + svgFlag: require('../../assets/icons/flags/SM.svg'), + }, + SN: { + code: '+221', + unicodeFlag: '🇸🇳', + svgFlag: require('../../assets/icons/flags/SN.svg'), + }, + SO: { + code: '+252', + unicodeFlag: '🇸🇴', + svgFlag: require('../../assets/icons/flags/SO.svg'), + }, + SR: { + code: '+597', + unicodeFlag: '🇸🇷', + svgFlag: require('../../assets/icons/flags/SR.svg'), + }, + SS: { + code: '+211', + unicodeFlag: '🇸🇸', + svgFlag: require('../../assets/icons/flags/SS.svg'), + }, + ST: { + code: '+239', + unicodeFlag: '🇸🇹', + svgFlag: require('../../assets/icons/flags/ST.svg'), + }, + SV: { + code: '+503', + unicodeFlag: '🇸🇻', + svgFlag: require('../../assets/icons/flags/SV.svg'), + }, + SX: { + code: '+1721', + unicodeFlag: '🇸🇽', + svgFlag: require('../../assets/icons/flags/SX.svg'), + }, + SY: { + code: '+963', + unicodeFlag: '🇸🇾', + svgFlag: require('../../assets/icons/flags/SY.svg'), + }, + TD: { + code: '+235', + unicodeFlag: '🇹🇩', + svgFlag: require('../../assets/icons/flags/TD.svg'), + }, + TG: { + code: '+228', + unicodeFlag: '🇹🇬', + svgFlag: require('../../assets/icons/flags/TG.svg'), + }, + TH: { + code: '+66', + unicodeFlag: '🇹🇭', + svgFlag: require('../../assets/icons/flags/TH.svg'), + }, + TJ: { + code: '+992', + unicodeFlag: '🇹🇯', + svgFlag: require('../../assets/icons/flags/TJ.svg'), + }, + TK: { + code: '+690', + unicodeFlag: '🇹🇰', + svgFlag: require('../../assets/icons/flags/TK.svg'), + }, + TL: { + code: '+670', + unicodeFlag: '🇹🇱', + svgFlag: require('../../assets/icons/flags/TL.svg'), + }, + TM: { + code: '+993', + unicodeFlag: '🇹🇲', + svgFlag: require('../../assets/icons/flags/TM.svg'), + }, + TN: { + code: '+216', + unicodeFlag: '🇹🇳', + svgFlag: require('../../assets/icons/flags/TN.svg'), + }, + TO: { + code: '+676', + unicodeFlag: '🇹🇴', + svgFlag: require('../../assets/icons/flags/TO.svg'), + }, + TR: { + code: '+90', + unicodeFlag: '🇹🇷', + svgFlag: require('../../assets/icons/flags/TR.svg'), + }, + TT: { + code: '+868', + unicodeFlag: '🇹🇹', + svgFlag: require('../../assets/icons/flags/TT.svg'), + }, + TV: { + code: '+688', + unicodeFlag: '🇹🇻', + svgFlag: require('../../assets/icons/flags/TV.svg'), + }, + TZ: { + code: '+255', + unicodeFlag: '🇹🇿', + svgFlag: require('../../assets/icons/flags/TZ.svg'), + }, + UA: { + code: '+380', + unicodeFlag: '🇺🇦', + svgFlag: require('../../assets/icons/flags/UA.svg'), + }, + UG: { + code: '+256', + unicodeFlag: '🇺🇬', + svgFlag: require('../../assets/icons/flags/UG.svg'), + }, + US: { + code: '+1', + unicodeFlag: '🇺🇸', + svgFlag: require('../../assets/icons/flags/US.svg'), + }, + UY: { + code: '+598', + unicodeFlag: '🇺🇾', + svgFlag: require('../../assets/icons/flags/UY.svg'), + }, + UZ: { + code: '+998', + unicodeFlag: '🇺🇿', + svgFlag: require('../../assets/icons/flags/UZ.svg'), + }, + VC: { + code: '+1784', + unicodeFlag: '🇻🇨', + svgFlag: require('../../assets/icons/flags/VC.svg'), + }, + VE: { + code: '+58', + unicodeFlag: '🇻🇪', + svgFlag: require('../../assets/icons/flags/VE.svg'), + }, + VG: { + code: '+1284', + unicodeFlag: '🇻🇬', + svgFlag: require('../../assets/icons/flags/VG.svg'), + }, + VI: { + code: '+1340', + unicodeFlag: '🇻🇮', + svgFlag: require('../../assets/icons/flags/VI.svg'), + }, + VN: { + code: '+84', + unicodeFlag: '🇻🇳', + svgFlag: require('../../assets/icons/flags/VN.svg'), + }, + VU: { + code: '+678', + unicodeFlag: '🇻🇺', + svgFlag: require('../../assets/icons/flags/VU.svg'), + }, + WF: { + code: '+681', + unicodeFlag: '🇼🇫', + svgFlag: require('../../assets/icons/flags/WF.svg'), + }, + WS: { + code: '+685', + unicodeFlag: '🇼🇸', + svgFlag: require('../../assets/icons/flags/WS.svg'), + }, + YE: { + code: '+967', + unicodeFlag: '🇾🇪', + svgFlag: require('../../assets/icons/flags/YE.svg'), + }, + YT: { + code: '+262', + unicodeFlag: '🇾🇹', + svgFlag: require('../../assets/icons/flags/YT.svg'), + }, + ZA: { + code: '+27', + unicodeFlag: '🇿🇦', + svgFlag: require('../../assets/icons/flags/ZA.svg'), + }, + ZM: { + code: '+260', + unicodeFlag: '🇿🇲', + svgFlag: require('../../assets/icons/flags/ZM.svg'), + }, + ZW: { + code: '+263', + unicodeFlag: '🇿🇼', + svgFlag: require('../../assets/icons/flags/ZW.svg'), + }, + SZ: { + code: '+268', + unicodeFlag: '🇸🇿', + svgFlag: require('../../assets/icons/flags/SZ.svg'), + }, + MK: { + code: '+389', + unicodeFlag: '🇲🇰', + svgFlag: require('../../assets/icons/flags/MK.svg'), + }, + PH: { + code: '+63', + unicodeFlag: '🇵🇭', + svgFlag: require('../../assets/icons/flags/PH.svg'), + }, + NL: { + code: '+31', + unicodeFlag: '🇳🇱', + svgFlag: require('../../assets/icons/flags/NL.svg'), + }, + AE: { + code: '+971', + unicodeFlag: '🇦🇪', + svgFlag: require('../../assets/icons/flags/AE.svg'), + }, + MD: { + code: '+373', + unicodeFlag: '🇲🇩', + svgFlag: require('../../assets/icons/flags/MD.svg'), + }, + GM: { + code: '+220', + unicodeFlag: '🇬🇲', + svgFlag: require('../../assets/icons/flags/GM.svg'), + }, + DO: { + code: '+1', + unicodeFlag: '🇩🇴', + svgFlag: require('../../assets/icons/flags/DO.svg'), + }, + SD: { + code: '+249', + unicodeFlag: '🇸🇩', + svgFlag: require('../../assets/icons/flags/SD.svg'), + }, + LA: { + code: '+856', + unicodeFlag: '🇱🇦', + svgFlag: require('../../assets/icons/flags/LA.svg'), + }, + TW: { + code: '+886', + unicodeFlag: '🇹🇼', + svgFlag: require('../../assets/icons/flags/TW.svg'), + }, + CG: { + code: '+242', + unicodeFlag: '🇨🇬', + svgFlag: require('../../assets/icons/flags/CG.svg'), + }, + CZ: { + code: '+420', + unicodeFlag: '🇨🇿', + svgFlag: require('../../assets/icons/flags/CZ.svg'), + }, + GB: { + code: '+44', + unicodeFlag: '🇬🇧', + svgFlag: require('../../assets/icons/flags/GB.svg'), + }, + NE: { + code: '+227', + unicodeFlag: '🇳🇪', + svgFlag: require('../../assets/icons/flags/NE.svg'), + }, + CD: { + code: '+243', + unicodeFlag: '🇨🇩', + svgFlag: require('../../assets/icons/flags/CD.svg'), + }, + BS: { + code: '+1 242', + unicodeFlag: '🇧🇸', + svgFlag: require('../../assets/icons/flags/BS.svg'), + }, + CC: { + code: '+61 891', + unicodeFlag: '🇨🇨', + svgFlag: require('../../assets/icons/flags/CC.svg'), + }, + CF: { + code: '+236', + unicodeFlag: '🇨🇫', + svgFlag: require('../../assets/icons/flags/CF.svg'), + }, + CK: { + code: '+682', + unicodeFlag: '🇨🇰', + svgFlag: require('../../assets/icons/flags/CK.svg'), + }, + FK: { + code: '+500', + unicodeFlag: '🇫🇰', + svgFlag: require('../../assets/icons/flags/FK.svg'), + }, + FO: { + code: '+298', + unicodeFlag: '🇫🇴', + svgFlag: require('../../assets/icons/flags/FO.svg'), + }, + HM: { + code: '+672', + unicodeFlag: '🇭🇲', + svgFlag: require('../../assets/icons/flags/HM.svg'), + }, + KM: { + code: '+269', + unicodeFlag: '🇰🇲', + svgFlag: require('../../assets/icons/flags/KM.svg'), + }, + KY: { + code: '+1 345', + unicodeFlag: '🇰🇾', + svgFlag: require('../../assets/icons/flags/KY.svg'), + }, + MH: { + code: '+692', + unicodeFlag: '🇲🇭', + svgFlag: require('../../assets/icons/flags/MH.svg'), + }, + MP: { + code: '+1 670', + unicodeFlag: '🇲🇵', + svgFlag: require('../../assets/icons/flags/MP.svg'), + }, + TC: { + code: '+1 649', + unicodeFlag: '🇹🇨', + svgFlag: require('../../assets/icons/flags/TC.svg'), + }, + TF: { + code: '+672', + unicodeFlag: '🇹🇫', + svgFlag: require('../../assets/icons/flags/TF.svg'), + }, + UM: { + code: '+1', + unicodeFlag: '🇺🇲', + svgFlag: require('../../assets/icons/flags/UM.svg'), + }, + VA: { + code: '+39', + unicodeFlag: '🇻🇦', + svgFlag: require('../../assets/icons/flags/VA.svg'), + }, + XK: { + code: '+383', + unicodeFlag: '🇽🇰', + svgFlag: require('../../assets/icons/flags/XK.svg'), + }, +} + +const DEFAULT_PHONE_COUNTRY = 'US' + +export function getDefaultCountry(location?: {countryCode?: string}) { + if ( + location?.countryCode && + location.countryCode.toUpperCase() in INTERNATIONAL_TELEPHONE_CODES + ) { + return location.countryCode.toUpperCase() + } + return DEFAULT_PHONE_COUNTRY +} + +export function getPhoneCodeFromCountryCode(countryCode: string) { + const country = + INTERNATIONAL_TELEPHONE_CODES[ + countryCode.toUpperCase() as keyof typeof INTERNATIONAL_TELEPHONE_CODES + ] + if (!country) throw new Error(`Country ${countryCode} not found`) + return country.code +} diff --git a/src/locale/helpers.ts b/src/locale/helpers.ts --- a/src/locale/helpers.ts +++ b/src/locale/helpers.ts @@ -57,7 +57,7 @@ export function languageName(language: Language, appLang: string): string { // if Intl.DisplayNames is unavailable on the target, display the English name - if (!(Intl as any).DisplayNames) { + if (!Intl.DisplayNames) { return language.name } @@ -278,4 +278,45 @@ } } return AppLanguage.en +} + +/** + * Gets region name for a given country code and language. + * + * Falls back to English if unavailable/error, and if that fails, returns the country code. + * + * Intl.DisplayNames is widely available + has been polyfilled on native + */ +export function regionName(countryCode: string, appLang: string): string { + const translatedName = getLocalizedRegionName(countryCode, appLang) + + if (translatedName) { + return translatedName + } + + // Fallback: get English name. Needed for i.e. Esperanto + const englishName = getLocalizedRegionName(countryCode, 'en') + if (englishName) { + return englishName + } + + // Final fallback: return country code + return countryCode +} + +function getLocalizedRegionName( + countryCode: string, + appLang: string, +): string | undefined { + try { + const allNames = new Intl.DisplayNames([appLang], { + type: 'region', + fallback: 'none', + }) + + return allNames.of(countryCode) + } catch (err) { + console.warn('Error getting localized region name:', err) + return undefined + } } diff --git a/src/locale/i18n.ts b/src/locale/i18n.ts --- a/src/locale/i18n.ts +++ b/src/locale/i18n.ts @@ -3,8 +3,10 @@ import '@formatjs/intl-locale/polyfill-force' import '@formatjs/intl-pluralrules/polyfill-force' import '@formatjs/intl-numberformat/polyfill-force' +import '@formatjs/intl-displaynames/polyfill-force' import '@formatjs/intl-pluralrules/locale-data/en' import '@formatjs/intl-numberformat/locale-data/en' +import '@formatjs/intl-displaynames/locale-data/en' import {useEffect} from 'react' import {i18n} from '@lingui/core' @@ -64,6 +66,7 @@ await Promise.all([ import('@formatjs/intl-pluralrules/locale-data/an'), import('@formatjs/intl-numberformat/locale-data/es'), + import('@formatjs/intl-displaynames/locale-data/es'), ]) break } @@ -72,6 +75,7 @@ await Promise.all([ import('@formatjs/intl-pluralrules/locale-data/ast'), import('@formatjs/intl-numberformat/locale-data/ast'), + import('@formatjs/intl-displaynames/locale-data/ast'), ]) break } @@ -80,6 +84,7 @@ await Promise.all([ import('@formatjs/intl-pluralrules/locale-data/ca'), import('@formatjs/intl-numberformat/locale-data/ca'), + import('@formatjs/intl-displaynames/locale-data/ca'), ]) break } @@ -88,6 +93,7 @@ await Promise.all([ import('@formatjs/intl-pluralrules/locale-data/cy'), import('@formatjs/intl-numberformat/locale-data/cy'), + import('@formatjs/intl-displaynames/locale-data/cy'), ]) break } @@ -96,6 +102,7 @@ await Promise.all([ import('@formatjs/intl-pluralrules/locale-data/da'), import('@formatjs/intl-numberformat/locale-data/da'), + import('@formatjs/intl-displaynames/locale-data/da'), ]) break } @@ -104,6 +111,7 @@ await Promise.all([ import('@formatjs/intl-pluralrules/locale-data/de'), import('@formatjs/intl-numberformat/locale-data/de'), + import('@formatjs/intl-displaynames/locale-data/de'), ]) break } @@ -112,6 +120,7 @@ await Promise.all([ import('@formatjs/intl-pluralrules/locale-data/el'), import('@formatjs/intl-numberformat/locale-data/el'), + import('@formatjs/intl-displaynames/locale-data/el'), ]) break } @@ -120,6 +129,7 @@ await Promise.all([ import('@formatjs/intl-pluralrules/locale-data/en'), import('@formatjs/intl-numberformat/locale-data/en-GB'), + import('@formatjs/intl-displaynames/locale-data/en-GB'), ]) break } @@ -128,6 +138,7 @@ await Promise.all([ import('@formatjs/intl-pluralrules/locale-data/eo'), import('@formatjs/intl-numberformat/locale-data/eo'), + import('@formatjs/intl-displaynames/locale-data/eo'), ]) break } @@ -136,6 +147,7 @@ await Promise.all([ import('@formatjs/intl-pluralrules/locale-data/es'), import('@formatjs/intl-numberformat/locale-data/es'), + import('@formatjs/intl-displaynames/locale-data/es'), ]) break } @@ -144,6 +156,7 @@ await Promise.all([ import('@formatjs/intl-pluralrules/locale-data/eu'), import('@formatjs/intl-numberformat/locale-data/eu'), + import('@formatjs/intl-displaynames/locale-data/eu'), ]) break } @@ -152,6 +165,7 @@ await Promise.all([ import('@formatjs/intl-pluralrules/locale-data/fi'), import('@formatjs/intl-numberformat/locale-data/fi'), + import('@formatjs/intl-displaynames/locale-data/fi'), ]) break } @@ -160,6 +174,7 @@ await Promise.all([ import('@formatjs/intl-pluralrules/locale-data/fr'), import('@formatjs/intl-numberformat/locale-data/fr'), + import('@formatjs/intl-displaynames/locale-data/fr'), ]) break } @@ -168,6 +183,7 @@ await Promise.all([ import('@formatjs/intl-pluralrules/locale-data/fy'), import('@formatjs/intl-numberformat/locale-data/fy'), + import('@formatjs/intl-displaynames/locale-data/fy'), ]) break } @@ -176,6 +192,7 @@ await Promise.all([ import('@formatjs/intl-pluralrules/locale-data/ga'), import('@formatjs/intl-numberformat/locale-data/ga'), + import('@formatjs/intl-displaynames/locale-data/ga'), ]) break } @@ -184,6 +201,7 @@ await Promise.all([ import('@formatjs/intl-pluralrules/locale-data/gd'), import('@formatjs/intl-numberformat/locale-data/gd'), + import('@formatjs/intl-displaynames/locale-data/gd'), ]) break } @@ -192,6 +210,7 @@ await Promise.all([ import('@formatjs/intl-pluralrules/locale-data/gl'), import('@formatjs/intl-numberformat/locale-data/gl'), + import('@formatjs/intl-displaynames/locale-data/gl'), ]) break } @@ -200,6 +219,7 @@ await Promise.all([ import('@formatjs/intl-pluralrules/locale-data/hi'), import('@formatjs/intl-numberformat/locale-data/hi'), + import('@formatjs/intl-displaynames/locale-data/hi'), ]) break } @@ -208,6 +228,7 @@ await Promise.all([ import('@formatjs/intl-pluralrules/locale-data/hu'), import('@formatjs/intl-numberformat/locale-data/hu'), + import('@formatjs/intl-displaynames/locale-data/hu'), ]) break } @@ -216,6 +237,7 @@ await Promise.all([ import('@formatjs/intl-pluralrules/locale-data/ia'), import('@formatjs/intl-numberformat/locale-data/ia'), + import('@formatjs/intl-displaynames/locale-data/ia'), ]) break } @@ -224,6 +246,7 @@ await Promise.all([ import('@formatjs/intl-pluralrules/locale-data/id'), import('@formatjs/intl-numberformat/locale-data/id'), + import('@formatjs/intl-displaynames/locale-data/id'), ]) break } @@ -232,6 +255,7 @@ await Promise.all([ import('@formatjs/intl-pluralrules/locale-data/it'), import('@formatjs/intl-numberformat/locale-data/it'), + import('@formatjs/intl-displaynames/locale-data/it'), ]) break } @@ -240,6 +264,7 @@ await Promise.all([ import('@formatjs/intl-pluralrules/locale-data/ja'), import('@formatjs/intl-numberformat/locale-data/ja'), + import('@formatjs/intl-displaynames/locale-data/ja'), ]) break } @@ -248,6 +273,7 @@ await Promise.all([ import('@formatjs/intl-pluralrules/locale-data/km'), import('@formatjs/intl-numberformat/locale-data/km'), + import('@formatjs/intl-displaynames/locale-data/km'), ]) break } @@ -256,11 +282,17 @@ await Promise.all([ import('@formatjs/intl-pluralrules/locale-data/ko'), import('@formatjs/intl-numberformat/locale-data/ko'), + import('@formatjs/intl-displaynames/locale-data/ko'), ]) break } case AppLanguage.ne: { i18n.loadAndActivate({locale, messages: messagesNe}) + await Promise.all([ + import('@formatjs/intl-pluralrules/locale-data/ne'), + import('@formatjs/intl-numberformat/locale-data/ne'), + import('@formatjs/intl-displaynames/locale-data/ne'), + ]) break } case AppLanguage.nl: { @@ -268,6 +300,7 @@ await Promise.all([ import('@formatjs/intl-pluralrules/locale-data/nl'), import('@formatjs/intl-numberformat/locale-data/nl'), + import('@formatjs/intl-displaynames/locale-data/nl'), ]) break } @@ -276,6 +309,7 @@ await Promise.all([ import('@formatjs/intl-pluralrules/locale-data/pl'), import('@formatjs/intl-numberformat/locale-data/pl'), + import('@formatjs/intl-displaynames/locale-data/pl'), ]) break } @@ -284,6 +318,7 @@ await Promise.all([ import('@formatjs/intl-pluralrules/locale-data/pt'), import('@formatjs/intl-numberformat/locale-data/pt'), + import('@formatjs/intl-displaynames/locale-data/pt'), ]) break } @@ -292,6 +327,7 @@ await Promise.all([ import('@formatjs/intl-pluralrules/locale-data/pt-PT'), import('@formatjs/intl-numberformat/locale-data/pt-PT'), + import('@formatjs/intl-displaynames/locale-data/pt-PT'), ]) break } @@ -300,6 +336,7 @@ await Promise.all([ import('@formatjs/intl-pluralrules/locale-data/ro'), import('@formatjs/intl-numberformat/locale-data/ro'), + import('@formatjs/intl-displaynames/locale-data/ro'), ]) break } @@ -308,6 +345,7 @@ await Promise.all([ import('@formatjs/intl-pluralrules/locale-data/ru'), import('@formatjs/intl-numberformat/locale-data/ru'), + import('@formatjs/intl-displaynames/locale-data/ru'), ]) break } @@ -316,6 +354,7 @@ await Promise.all([ import('@formatjs/intl-pluralrules/locale-data/sv'), import('@formatjs/intl-numberformat/locale-data/sv'), + import('@formatjs/intl-displaynames/locale-data/sv'), ]) break } @@ -324,6 +363,7 @@ await Promise.all([ import('@formatjs/intl-pluralrules/locale-data/th'), import('@formatjs/intl-numberformat/locale-data/th'), + import('@formatjs/intl-displaynames/locale-data/th'), ]) break } @@ -332,6 +372,7 @@ await Promise.all([ import('@formatjs/intl-pluralrules/locale-data/tr'), import('@formatjs/intl-numberformat/locale-data/tr'), + import('@formatjs/intl-displaynames/locale-data/tr'), ]) break } @@ -340,6 +381,7 @@ await Promise.all([ import('@formatjs/intl-pluralrules/locale-data/uk'), import('@formatjs/intl-numberformat/locale-data/uk'), + import('@formatjs/intl-displaynames/locale-data/uk'), ]) break } @@ -348,6 +390,7 @@ await Promise.all([ import('@formatjs/intl-pluralrules/locale-data/vi'), import('@formatjs/intl-numberformat/locale-data/vi'), + import('@formatjs/intl-displaynames/locale-data/vi'), ]) break } @@ -356,6 +399,7 @@ await Promise.all([ import('@formatjs/intl-pluralrules/locale-data/zh'), import('@formatjs/intl-numberformat/locale-data/zh'), + import('@formatjs/intl-displaynames/locale-data/zh'), ]) break } @@ -364,6 +408,7 @@ await Promise.all([ import('@formatjs/intl-pluralrules/locale-data/zh'), import('@formatjs/intl-numberformat/locale-data/zh'), + import('@formatjs/intl-displaynames/locale-data/zh'), ]) break } @@ -372,6 +417,7 @@ await Promise.all([ import('@formatjs/intl-pluralrules/locale-data/zh'), import('@formatjs/intl-numberformat/locale-data/zh'), + import('@formatjs/intl-displaynames/locale-data/zh'), ]) break } diff --git a/assets/icons/flags/AC.svg b/assets/icons/flags/AC.svg new file mode 100644 --- /dev/null +++ b/assets/icons/flags/AC.svg @@ -0,0 +1,1 @@ + diff --git a/assets/icons/flags/AD.svg b/assets/icons/flags/AD.svg new file mode 100644 --- /dev/null +++ b/assets/icons/flags/AD.svg @@ -0,0 +1,1 @@ + diff --git a/assets/icons/flags/AE.svg b/assets/icons/flags/AE.svg new file mode 100644 --- /dev/null +++ b/assets/icons/flags/AE.svg @@ -0,0 +1,1 @@ + diff --git a/assets/icons/flags/AF.svg b/assets/icons/flags/AF.svg new file mode 100644 --- /dev/null +++ b/assets/icons/flags/AF.svg @@ -0,0 +1,1 @@ + diff --git a/assets/icons/flags/AG.svg b/assets/icons/flags/AG.svg new file mode 100644 --- /dev/null +++ b/assets/icons/flags/AG.svg @@ -0,0 +1,1 @@ + diff --git a/assets/icons/flags/AI.svg b/assets/icons/flags/AI.svg new file mode 100644 --- /dev/null +++ b/assets/icons/flags/AI.svg @@ -0,0 +1,1 @@ + diff --git a/assets/icons/flags/AL.svg b/assets/icons/flags/AL.svg new file mode 100644 --- /dev/null +++ b/assets/icons/flags/AL.svg @@ -0,0 +1,1 @@ + diff --git a/assets/icons/flags/AM.svg b/assets/icons/flags/AM.svg new file mode 100644 --- /dev/null +++ b/assets/icons/flags/AM.svg @@ -0,0 +1,1 @@ + diff --git a/assets/icons/flags/AO.svg b/assets/icons/flags/AO.svg new file mode 100644 --- /dev/null +++ b/assets/icons/flags/AO.svg @@ -0,0 +1,1 @@ + diff --git a/assets/icons/flags/AQ.svg b/assets/icons/flags/AQ.svg new file mode 100644 --- /dev/null +++ b/assets/icons/flags/AQ.svg @@ -0,0 +1,1 @@ + diff --git a/assets/icons/flags/AR.svg b/assets/icons/flags/AR.svg new file mode 100644 --- /dev/null +++ b/assets/icons/flags/AR.svg @@ -0,0 +1,1 @@ + diff --git a/assets/icons/flags/AS.svg b/assets/icons/flags/AS.svg new file mode 100644 --- /dev/null +++ b/assets/icons/flags/AS.svg @@ -0,0 +1,1 @@ + diff --git a/assets/icons/flags/AT.svg b/assets/icons/flags/AT.svg new file mode 100644 --- /dev/null +++ b/assets/icons/flags/AT.svg @@ -0,0 +1,1 @@ + diff --git a/assets/icons/flags/AU.svg b/assets/icons/flags/AU.svg new file mode 100644 --- /dev/null +++ b/assets/icons/flags/AU.svg @@ -0,0 +1,1 @@ + diff --git a/assets/icons/flags/AW.svg b/assets/icons/flags/AW.svg new file mode 100644 --- /dev/null +++ b/assets/icons/flags/AW.svg @@ -0,0 +1,1 @@ + diff --git a/assets/icons/flags/AX.svg b/assets/icons/flags/AX.svg new file mode 100644 --- /dev/null +++ b/assets/icons/flags/AX.svg @@ -0,0 +1,1 @@ + diff --git a/assets/icons/flags/AZ.svg b/assets/icons/flags/AZ.svg new file mode 100644 --- /dev/null +++ b/assets/icons/flags/AZ.svg @@ -0,0 +1,1 @@ + diff --git a/assets/icons/flags/BA.svg b/assets/icons/flags/BA.svg new file mode 100644 --- /dev/null +++ b/assets/icons/flags/BA.svg @@ -0,0 +1,1 @@ + diff --git a/assets/icons/flags/BB.svg b/assets/icons/flags/BB.svg new file mode 100644 --- /dev/null +++ b/assets/icons/flags/BB.svg @@ -0,0 +1,1 @@ + diff --git a/assets/icons/flags/BD.svg b/assets/icons/flags/BD.svg new file mode 100644 --- /dev/null +++ b/assets/icons/flags/BD.svg @@ -0,0 +1,1 @@ + diff --git a/assets/icons/flags/BE.svg b/assets/icons/flags/BE.svg new file mode 100644 --- /dev/null +++ b/assets/icons/flags/BE.svg @@ -0,0 +1,1 @@ + diff --git a/assets/icons/flags/BF.svg b/assets/icons/flags/BF.svg new file mode 100644 --- /dev/null +++ b/assets/icons/flags/BF.svg @@ -0,0 +1,1 @@ + diff --git a/assets/icons/flags/BG.svg b/assets/icons/flags/BG.svg new file mode 100644 --- /dev/null +++ b/assets/icons/flags/BG.svg @@ -0,0 +1,1 @@ + diff --git a/assets/icons/flags/BH.svg b/assets/icons/flags/BH.svg new file mode 100644 --- /dev/null +++ b/assets/icons/flags/BH.svg @@ -0,0 +1,1 @@ + diff --git a/assets/icons/flags/BI.svg b/assets/icons/flags/BI.svg new file mode 100644 --- /dev/null +++ b/assets/icons/flags/BI.svg @@ -0,0 +1,1 @@ + diff --git a/assets/icons/flags/BJ.svg b/assets/icons/flags/BJ.svg new file mode 100644 --- /dev/null +++ b/assets/icons/flags/BJ.svg @@ -0,0 +1,1 @@ + diff --git a/assets/icons/flags/BL.svg b/assets/icons/flags/BL.svg new file mode 100644 --- /dev/null +++ b/assets/icons/flags/BL.svg @@ -0,0 +1,1 @@ + diff --git a/assets/icons/flags/BM.svg b/assets/icons/flags/BM.svg new file mode 100644 --- /dev/null +++ b/assets/icons/flags/BM.svg @@ -0,0 +1,1 @@ + diff --git a/assets/icons/flags/BN.svg b/assets/icons/flags/BN.svg new file mode 100644 --- /dev/null +++ b/assets/icons/flags/BN.svg @@ -0,0 +1,1 @@ + diff --git a/assets/icons/flags/BO.svg b/assets/icons/flags/BO.svg new file mode 100644 --- /dev/null +++ b/assets/icons/flags/BO.svg @@ -0,0 +1,1 @@ + diff --git a/assets/icons/flags/BQ-BO.svg b/assets/icons/flags/BQ-BO.svg new file mode 100644 --- /dev/null +++ b/assets/icons/flags/BQ-BO.svg @@ -0,0 +1,1 @@ + diff --git a/assets/icons/flags/BQ-SA.svg b/assets/icons/flags/BQ-SA.svg new file mode 100644 --- /dev/null +++ b/assets/icons/flags/BQ-SA.svg @@ -0,0 +1,1 @@ + diff --git a/assets/icons/flags/BQ-SE.svg b/assets/icons/flags/BQ-SE.svg new file mode 100644 --- /dev/null +++ b/assets/icons/flags/BQ-SE.svg @@ -0,0 +1,1 @@ + diff --git a/assets/icons/flags/BQ.svg b/assets/icons/flags/BQ.svg new file mode 100644 --- /dev/null +++ b/assets/icons/flags/BQ.svg @@ -0,0 +1,1 @@ + diff --git a/assets/icons/flags/BR.svg b/assets/icons/flags/BR.svg new file mode 100644 --- /dev/null +++ b/assets/icons/flags/BR.svg @@ -0,0 +1,1 @@ + diff --git a/assets/icons/flags/BS.svg b/assets/icons/flags/BS.svg new file mode 100644 --- /dev/null +++ b/assets/icons/flags/BS.svg @@ -0,0 +1,1 @@ + diff --git a/assets/icons/flags/BT.svg b/assets/icons/flags/BT.svg new file mode 100644 --- /dev/null +++ b/assets/icons/flags/BT.svg @@ -0,0 +1,1 @@ + diff --git a/assets/icons/flags/BV.svg b/assets/icons/flags/BV.svg new file mode 100644 --- /dev/null +++ b/assets/icons/flags/BV.svg @@ -0,0 +1,1 @@ + diff --git a/assets/icons/flags/BW.svg b/assets/icons/flags/BW.svg new file mode 100644 --- /dev/null +++ b/assets/icons/flags/BW.svg @@ -0,0 +1,1 @@ + diff --git a/assets/icons/flags/BY.svg b/assets/icons/flags/BY.svg new file mode 100644 --- /dev/null +++ b/assets/icons/flags/BY.svg @@ -0,0 +1,1 @@ + diff --git a/assets/icons/flags/BZ.svg b/assets/icons/flags/BZ.svg new file mode 100644 --- /dev/null +++ b/assets/icons/flags/BZ.svg @@ -0,0 +1,1 @@ + diff --git a/assets/icons/flags/CA.svg b/assets/icons/flags/CA.svg new file mode 100644 --- /dev/null +++ b/assets/icons/flags/CA.svg @@ -0,0 +1,1 @@ + diff --git a/assets/icons/flags/CC.svg b/assets/icons/flags/CC.svg new file mode 100644 --- /dev/null +++ b/assets/icons/flags/CC.svg @@ -0,0 +1,1 @@ + diff --git a/assets/icons/flags/CD.svg b/assets/icons/flags/CD.svg new file mode 100644 --- /dev/null +++ b/assets/icons/flags/CD.svg @@ -0,0 +1,1 @@ + diff --git a/assets/icons/flags/CF.svg b/assets/icons/flags/CF.svg new file mode 100644 --- /dev/null +++ b/assets/icons/flags/CF.svg @@ -0,0 +1,1 @@ + diff --git a/assets/icons/flags/CG.svg b/assets/icons/flags/CG.svg new file mode 100644 --- /dev/null +++ b/assets/icons/flags/CG.svg @@ -0,0 +1,1 @@ + diff --git a/assets/icons/flags/CH.svg b/assets/icons/flags/CH.svg new file mode 100644 --- /dev/null +++ b/assets/icons/flags/CH.svg @@ -0,0 +1,1 @@ + diff --git a/assets/icons/flags/CI.svg b/assets/icons/flags/CI.svg new file mode 100644 --- /dev/null +++ b/assets/icons/flags/CI.svg @@ -0,0 +1,1 @@ + diff --git a/assets/icons/flags/CK.svg b/assets/icons/flags/CK.svg new file mode 100644 --- /dev/null +++ b/assets/icons/flags/CK.svg @@ -0,0 +1,1 @@ + diff --git a/assets/icons/flags/CL.svg b/assets/icons/flags/CL.svg new file mode 100644 --- /dev/null +++ b/assets/icons/flags/CL.svg @@ -0,0 +1,1 @@ + diff --git a/assets/icons/flags/CM.svg b/assets/icons/flags/CM.svg new file mode 100644 --- /dev/null +++ b/assets/icons/flags/CM.svg @@ -0,0 +1,1 @@ + diff --git a/assets/icons/flags/CN.svg b/assets/icons/flags/CN.svg new file mode 100644 --- /dev/null +++ b/assets/icons/flags/CN.svg @@ -0,0 +1,1 @@ + diff --git a/assets/icons/flags/CO.svg b/assets/icons/flags/CO.svg new file mode 100644 --- /dev/null +++ b/assets/icons/flags/CO.svg @@ -0,0 +1,1 @@ + diff --git a/assets/icons/flags/CR.svg b/assets/icons/flags/CR.svg new file mode 100644 --- /dev/null +++ b/assets/icons/flags/CR.svg @@ -0,0 +1,1 @@ + diff --git a/assets/icons/flags/CU.svg b/assets/icons/flags/CU.svg new file mode 100644 --- /dev/null +++ b/assets/icons/flags/CU.svg @@ -0,0 +1,1 @@ + diff --git a/assets/icons/flags/CV.svg b/assets/icons/flags/CV.svg new file mode 100644 --- /dev/null +++ b/assets/icons/flags/CV.svg @@ -0,0 +1,1 @@ + diff --git a/assets/icons/flags/CW.svg b/assets/icons/flags/CW.svg new file mode 100644 --- /dev/null +++ b/assets/icons/flags/CW.svg @@ -0,0 +1,1 @@ + diff --git a/assets/icons/flags/CX.svg b/assets/icons/flags/CX.svg new file mode 100644 --- /dev/null +++ b/assets/icons/flags/CX.svg @@ -0,0 +1,1 @@ + diff --git a/assets/icons/flags/CY.svg b/assets/icons/flags/CY.svg new file mode 100644 --- /dev/null +++ b/assets/icons/flags/CY.svg @@ -0,0 +1,1 @@ + diff --git a/assets/icons/flags/CZ.svg b/assets/icons/flags/CZ.svg new file mode 100644 --- /dev/null +++ b/assets/icons/flags/CZ.svg @@ -0,0 +1,1 @@ + diff --git a/assets/icons/flags/DE.svg b/assets/icons/flags/DE.svg new file mode 100644 --- /dev/null +++ b/assets/icons/flags/DE.svg @@ -0,0 +1,1 @@ + diff --git a/assets/icons/flags/DJ.svg b/assets/icons/flags/DJ.svg new file mode 100644 --- /dev/null +++ b/assets/icons/flags/DJ.svg @@ -0,0 +1,1 @@ + diff --git a/assets/icons/flags/DK.svg b/assets/icons/flags/DK.svg new file mode 100644 --- /dev/null +++ b/assets/icons/flags/DK.svg @@ -0,0 +1,1 @@ + diff --git a/assets/icons/flags/DM.svg b/assets/icons/flags/DM.svg new file mode 100644 --- /dev/null +++ b/assets/icons/flags/DM.svg @@ -0,0 +1,1 @@ + diff --git a/assets/icons/flags/DO.svg b/assets/icons/flags/DO.svg new file mode 100644 --- /dev/null +++ b/assets/icons/flags/DO.svg @@ -0,0 +1,1 @@ + diff --git a/assets/icons/flags/DZ.svg b/assets/icons/flags/DZ.svg new file mode 100644 --- /dev/null +++ b/assets/icons/flags/DZ.svg @@ -0,0 +1,1 @@ + diff --git a/assets/icons/flags/EC.svg b/assets/icons/flags/EC.svg new file mode 100644 --- /dev/null +++ b/assets/icons/flags/EC.svg @@ -0,0 +1,1 @@ + diff --git a/assets/icons/flags/EE.svg b/assets/icons/flags/EE.svg new file mode 100644 --- /dev/null +++ b/assets/icons/flags/EE.svg @@ -0,0 +1,1 @@ + diff --git a/assets/icons/flags/EG.svg b/assets/icons/flags/EG.svg new file mode 100644 --- /dev/null +++ b/assets/icons/flags/EG.svg @@ -0,0 +1,1 @@ + diff --git a/assets/icons/flags/EH.svg b/assets/icons/flags/EH.svg new file mode 100644 --- /dev/null +++ b/assets/icons/flags/EH.svg @@ -0,0 +1,1 @@ + diff --git a/assets/icons/flags/ER.svg b/assets/icons/flags/ER.svg new file mode 100644 --- /dev/null +++ b/assets/icons/flags/ER.svg @@ -0,0 +1,1 @@ + diff --git a/assets/icons/flags/ES.svg b/assets/icons/flags/ES.svg new file mode 100644 --- /dev/null +++ b/assets/icons/flags/ES.svg @@ -0,0 +1,1 @@ + diff --git a/assets/icons/flags/ET.svg b/assets/icons/flags/ET.svg new file mode 100644 --- /dev/null +++ b/assets/icons/flags/ET.svg @@ -0,0 +1,1 @@ + diff --git a/assets/icons/flags/EU.svg b/assets/icons/flags/EU.svg new file mode 100644 --- /dev/null +++ b/assets/icons/flags/EU.svg @@ -0,0 +1,1 @@ + diff --git a/assets/icons/flags/FI.svg b/assets/icons/flags/FI.svg new file mode 100644 --- /dev/null +++ b/assets/icons/flags/FI.svg @@ -0,0 +1,1 @@ + diff --git a/assets/icons/flags/FJ.svg b/assets/icons/flags/FJ.svg new file mode 100644 --- /dev/null +++ b/assets/icons/flags/FJ.svg @@ -0,0 +1,1 @@ + diff --git a/assets/icons/flags/FK.svg b/assets/icons/flags/FK.svg new file mode 100644 --- /dev/null +++ b/assets/icons/flags/FK.svg @@ -0,0 +1,1 @@ + diff --git a/assets/icons/flags/FM.svg b/assets/icons/flags/FM.svg new file mode 100644 --- /dev/null +++ b/assets/icons/flags/FM.svg @@ -0,0 +1,1 @@ + diff --git a/assets/icons/flags/FO.svg b/assets/icons/flags/FO.svg new file mode 100644 --- /dev/null +++ b/assets/icons/flags/FO.svg @@ -0,0 +1,1 @@ + diff --git a/assets/icons/flags/FR.svg b/assets/icons/flags/FR.svg new file mode 100644 --- /dev/null +++ b/assets/icons/flags/FR.svg @@ -0,0 +1,1 @@ + diff --git a/assets/icons/flags/GA.svg b/assets/icons/flags/GA.svg new file mode 100644 --- /dev/null +++ b/assets/icons/flags/GA.svg @@ -0,0 +1,1 @@ + diff --git a/assets/icons/flags/GB-ENG.svg b/assets/icons/flags/GB-ENG.svg new file mode 100644 --- /dev/null +++ b/assets/icons/flags/GB-ENG.svg @@ -0,0 +1,1 @@ + diff --git a/assets/icons/flags/GB-NIR.svg b/assets/icons/flags/GB-NIR.svg new file mode 100644 --- /dev/null +++ b/assets/icons/flags/GB-NIR.svg @@ -0,0 +1,1 @@ + diff --git a/assets/icons/flags/GB-SCT.svg b/assets/icons/flags/GB-SCT.svg new file mode 100644 --- /dev/null +++ b/assets/icons/flags/GB-SCT.svg @@ -0,0 +1,1 @@ + diff --git a/assets/icons/flags/GB-WLS.svg b/assets/icons/flags/GB-WLS.svg new file mode 100644 --- /dev/null +++ b/assets/icons/flags/GB-WLS.svg @@ -0,0 +1,1 @@ + diff --git a/assets/icons/flags/GB.svg b/assets/icons/flags/GB.svg new file mode 100644 --- /dev/null +++ b/assets/icons/flags/GB.svg @@ -0,0 +1,1 @@ + diff --git a/assets/icons/flags/GD.svg b/assets/icons/flags/GD.svg new file mode 100644 --- /dev/null +++ b/assets/icons/flags/GD.svg @@ -0,0 +1,1 @@ + diff --git a/assets/icons/flags/GE-AB.svg b/assets/icons/flags/GE-AB.svg new file mode 100644 --- /dev/null +++ b/assets/icons/flags/GE-AB.svg @@ -0,0 +1,1 @@ + diff --git a/assets/icons/flags/GE-OS.svg b/assets/icons/flags/GE-OS.svg new file mode 100644 --- /dev/null +++ b/assets/icons/flags/GE-OS.svg @@ -0,0 +1,1 @@ + diff --git a/assets/icons/flags/GE.svg b/assets/icons/flags/GE.svg new file mode 100644 --- /dev/null +++ b/assets/icons/flags/GE.svg @@ -0,0 +1,1 @@ + diff --git a/assets/icons/flags/GF.svg b/assets/icons/flags/GF.svg new file mode 100644 --- /dev/null +++ b/assets/icons/flags/GF.svg @@ -0,0 +1,1 @@ + diff --git a/assets/icons/flags/GG.svg b/assets/icons/flags/GG.svg new file mode 100644 --- /dev/null +++ b/assets/icons/flags/GG.svg @@ -0,0 +1,1 @@ + diff --git a/assets/icons/flags/GH.svg b/assets/icons/flags/GH.svg new file mode 100644 --- /dev/null +++ b/assets/icons/flags/GH.svg @@ -0,0 +1,1 @@ + diff --git a/assets/icons/flags/GI.svg b/assets/icons/flags/GI.svg new file mode 100644 --- /dev/null +++ b/assets/icons/flags/GI.svg @@ -0,0 +1,1 @@ + diff --git a/assets/icons/flags/GL.svg b/assets/icons/flags/GL.svg new file mode 100644 --- /dev/null +++ b/assets/icons/flags/GL.svg @@ -0,0 +1,1 @@ + diff --git a/assets/icons/flags/GM.svg b/assets/icons/flags/GM.svg new file mode 100644 --- /dev/null +++ b/assets/icons/flags/GM.svg @@ -0,0 +1,1 @@ + diff --git a/assets/icons/flags/GN.svg b/assets/icons/flags/GN.svg new file mode 100644 --- /dev/null +++ b/assets/icons/flags/GN.svg @@ -0,0 +1,1 @@ + diff --git a/assets/icons/flags/GP.svg b/assets/icons/flags/GP.svg new file mode 100644 --- /dev/null +++ b/assets/icons/flags/GP.svg @@ -0,0 +1,1 @@ + diff --git a/assets/icons/flags/GQ.svg b/assets/icons/flags/GQ.svg new file mode 100644 --- /dev/null +++ b/assets/icons/flags/GQ.svg @@ -0,0 +1,1 @@ + diff --git a/assets/icons/flags/GR.svg b/assets/icons/flags/GR.svg new file mode 100644 --- /dev/null +++ b/assets/icons/flags/GR.svg @@ -0,0 +1,1 @@ + diff --git a/assets/icons/flags/GS.svg b/assets/icons/flags/GS.svg new file mode 100644 --- /dev/null +++ b/assets/icons/flags/GS.svg @@ -0,0 +1,1 @@ + diff --git a/assets/icons/flags/GT.svg b/assets/icons/flags/GT.svg new file mode 100644 --- /dev/null +++ b/assets/icons/flags/GT.svg @@ -0,0 +1,1 @@ + diff --git a/assets/icons/flags/GU.svg b/assets/icons/flags/GU.svg new file mode 100644 --- /dev/null +++ b/assets/icons/flags/GU.svg @@ -0,0 +1,1 @@ + diff --git a/assets/icons/flags/GW.svg b/assets/icons/flags/GW.svg new file mode 100644 --- /dev/null +++ b/assets/icons/flags/GW.svg @@ -0,0 +1,1 @@ + diff --git a/assets/icons/flags/GY.svg b/assets/icons/flags/GY.svg new file mode 100644 --- /dev/null +++ b/assets/icons/flags/GY.svg @@ -0,0 +1,1 @@ + diff --git a/assets/icons/flags/HK.svg b/assets/icons/flags/HK.svg new file mode 100644 --- /dev/null +++ b/assets/icons/flags/HK.svg @@ -0,0 +1,1 @@ + diff --git a/assets/icons/flags/HM.svg b/assets/icons/flags/HM.svg new file mode 100644 --- /dev/null +++ b/assets/icons/flags/HM.svg @@ -0,0 +1,1 @@ + diff --git a/assets/icons/flags/HN.svg b/assets/icons/flags/HN.svg new file mode 100644 --- /dev/null +++ b/assets/icons/flags/HN.svg @@ -0,0 +1,1 @@ + diff --git a/assets/icons/flags/HR.svg b/assets/icons/flags/HR.svg new file mode 100644 --- /dev/null +++ b/assets/icons/flags/HR.svg @@ -0,0 +1,1 @@ + diff --git a/assets/icons/flags/HT.svg b/assets/icons/flags/HT.svg new file mode 100644 --- /dev/null +++ b/assets/icons/flags/HT.svg @@ -0,0 +1,1 @@ + diff --git a/assets/icons/flags/HU.svg b/assets/icons/flags/HU.svg new file mode 100644 --- /dev/null +++ b/assets/icons/flags/HU.svg @@ -0,0 +1,1 @@ + diff --git a/assets/icons/flags/IC.svg b/assets/icons/flags/IC.svg new file mode 100644 --- /dev/null +++ b/assets/icons/flags/IC.svg @@ -0,0 +1,1 @@ + diff --git a/assets/icons/flags/ID.svg b/assets/icons/flags/ID.svg new file mode 100644 --- /dev/null +++ b/assets/icons/flags/ID.svg @@ -0,0 +1,1 @@ + diff --git a/assets/icons/flags/IE.svg b/assets/icons/flags/IE.svg new file mode 100644 --- /dev/null +++ b/assets/icons/flags/IE.svg @@ -0,0 +1,1 @@ + diff --git a/assets/icons/flags/IL.svg b/assets/icons/flags/IL.svg new file mode 100644 --- /dev/null +++ b/assets/icons/flags/IL.svg @@ -0,0 +1,1 @@ + diff --git a/assets/icons/flags/IM.svg b/assets/icons/flags/IM.svg new file mode 100644 --- /dev/null +++ b/assets/icons/flags/IM.svg @@ -0,0 +1,1 @@ + diff --git a/assets/icons/flags/IN.svg b/assets/icons/flags/IN.svg new file mode 100644 --- /dev/null +++ b/assets/icons/flags/IN.svg @@ -0,0 +1,1 @@ + diff --git a/assets/icons/flags/IO.svg b/assets/icons/flags/IO.svg new file mode 100644 --- /dev/null +++ b/assets/icons/flags/IO.svg @@ -0,0 +1,1 @@ + diff --git a/assets/icons/flags/IQ.svg b/assets/icons/flags/IQ.svg new file mode 100644 --- /dev/null +++ b/assets/icons/flags/IQ.svg @@ -0,0 +1,1 @@ + diff --git a/assets/icons/flags/IR.svg b/assets/icons/flags/IR.svg new file mode 100644 --- /dev/null +++ b/assets/icons/flags/IR.svg @@ -0,0 +1,1 @@ + diff --git a/assets/icons/flags/IS.svg b/assets/icons/flags/IS.svg new file mode 100644 --- /dev/null +++ b/assets/icons/flags/IS.svg @@ -0,0 +1,1 @@ + diff --git a/assets/icons/flags/IT.svg b/assets/icons/flags/IT.svg new file mode 100644 --- /dev/null +++ b/assets/icons/flags/IT.svg @@ -0,0 +1,1 @@ + diff --git a/assets/icons/flags/JE.svg b/assets/icons/flags/JE.svg new file mode 100644 --- /dev/null +++ b/assets/icons/flags/JE.svg @@ -0,0 +1,1 @@ + diff --git a/assets/icons/flags/JM.svg b/assets/icons/flags/JM.svg new file mode 100644 --- /dev/null +++ b/assets/icons/flags/JM.svg @@ -0,0 +1,1 @@ + diff --git a/assets/icons/flags/JO.svg b/assets/icons/flags/JO.svg new file mode 100644 --- /dev/null +++ b/assets/icons/flags/JO.svg @@ -0,0 +1,1 @@ + diff --git a/assets/icons/flags/JP.svg b/assets/icons/flags/JP.svg new file mode 100644 --- /dev/null +++ b/assets/icons/flags/JP.svg @@ -0,0 +1,1 @@ + diff --git a/assets/icons/flags/KE.svg b/assets/icons/flags/KE.svg new file mode 100644 --- /dev/null +++ b/assets/icons/flags/KE.svg @@ -0,0 +1,1 @@ + diff --git a/assets/icons/flags/KG.svg b/assets/icons/flags/KG.svg new file mode 100644 --- /dev/null +++ b/assets/icons/flags/KG.svg @@ -0,0 +1,1 @@ + diff --git a/assets/icons/flags/KH.svg b/assets/icons/flags/KH.svg new file mode 100644 --- /dev/null +++ b/assets/icons/flags/KH.svg @@ -0,0 +1,1 @@ + diff --git a/assets/icons/flags/KI.svg b/assets/icons/flags/KI.svg new file mode 100644 --- /dev/null +++ b/assets/icons/flags/KI.svg @@ -0,0 +1,1 @@ + diff --git a/assets/icons/flags/KM.svg b/assets/icons/flags/KM.svg new file mode 100644 --- /dev/null +++ b/assets/icons/flags/KM.svg @@ -0,0 +1,1 @@ + diff --git a/assets/icons/flags/KN.svg b/assets/icons/flags/KN.svg new file mode 100644 --- /dev/null +++ b/assets/icons/flags/KN.svg @@ -0,0 +1,1 @@ + diff --git a/assets/icons/flags/KP.svg b/assets/icons/flags/KP.svg new file mode 100644 --- /dev/null +++ b/assets/icons/flags/KP.svg @@ -0,0 +1,1 @@ + diff --git a/assets/icons/flags/KR.svg b/assets/icons/flags/KR.svg new file mode 100644 --- /dev/null +++ b/assets/icons/flags/KR.svg @@ -0,0 +1,1 @@ + diff --git a/assets/icons/flags/KW.svg b/assets/icons/flags/KW.svg new file mode 100644 --- /dev/null +++ b/assets/icons/flags/KW.svg @@ -0,0 +1,1 @@ + diff --git a/assets/icons/flags/KY.svg b/assets/icons/flags/KY.svg new file mode 100644 --- /dev/null +++ b/assets/icons/flags/KY.svg @@ -0,0 +1,1 @@ + diff --git a/assets/icons/flags/KZ.svg b/assets/icons/flags/KZ.svg new file mode 100644 --- /dev/null +++ b/assets/icons/flags/KZ.svg @@ -0,0 +1,1 @@ + diff --git a/assets/icons/flags/LA.svg b/assets/icons/flags/LA.svg new file mode 100644 --- /dev/null +++ b/assets/icons/flags/LA.svg @@ -0,0 +1,1 @@ + diff --git a/assets/icons/flags/LB.svg b/assets/icons/flags/LB.svg new file mode 100644 --- /dev/null +++ b/assets/icons/flags/LB.svg @@ -0,0 +1,1 @@ + diff --git a/assets/icons/flags/LC.svg b/assets/icons/flags/LC.svg new file mode 100644 --- /dev/null +++ b/assets/icons/flags/LC.svg @@ -0,0 +1,1 @@ + diff --git a/assets/icons/flags/LI.svg b/assets/icons/flags/LI.svg new file mode 100644 --- /dev/null +++ b/assets/icons/flags/LI.svg @@ -0,0 +1,1 @@ + diff --git a/assets/icons/flags/LK.svg b/assets/icons/flags/LK.svg new file mode 100644 --- /dev/null +++ b/assets/icons/flags/LK.svg @@ -0,0 +1,1 @@ + diff --git a/assets/icons/flags/LR.svg b/assets/icons/flags/LR.svg new file mode 100644 --- /dev/null +++ b/assets/icons/flags/LR.svg @@ -0,0 +1,1 @@ + diff --git a/assets/icons/flags/LS.svg b/assets/icons/flags/LS.svg new file mode 100644 --- /dev/null +++ b/assets/icons/flags/LS.svg @@ -0,0 +1,1 @@ + diff --git a/assets/icons/flags/LT.svg b/assets/icons/flags/LT.svg new file mode 100644 --- /dev/null +++ b/assets/icons/flags/LT.svg @@ -0,0 +1,1 @@ + diff --git a/assets/icons/flags/LU.svg b/assets/icons/flags/LU.svg new file mode 100644 --- /dev/null +++ b/assets/icons/flags/LU.svg @@ -0,0 +1,1 @@ + diff --git a/assets/icons/flags/LV.svg b/assets/icons/flags/LV.svg new file mode 100644 --- /dev/null +++ b/assets/icons/flags/LV.svg @@ -0,0 +1,1 @@ + diff --git a/assets/icons/flags/LY.svg b/assets/icons/flags/LY.svg new file mode 100644 --- /dev/null +++ b/assets/icons/flags/LY.svg @@ -0,0 +1,1 @@ + diff --git a/assets/icons/flags/MA.svg b/assets/icons/flags/MA.svg new file mode 100644 --- /dev/null +++ b/assets/icons/flags/MA.svg @@ -0,0 +1,1 @@ + diff --git a/assets/icons/flags/MC.svg b/assets/icons/flags/MC.svg new file mode 100644 --- /dev/null +++ b/assets/icons/flags/MC.svg @@ -0,0 +1,1 @@ + diff --git a/assets/icons/flags/MD.svg b/assets/icons/flags/MD.svg new file mode 100644 --- /dev/null +++ b/assets/icons/flags/MD.svg @@ -0,0 +1,1 @@ + diff --git a/assets/icons/flags/ME.svg b/assets/icons/flags/ME.svg new file mode 100644 --- /dev/null +++ b/assets/icons/flags/ME.svg @@ -0,0 +1,1 @@ + diff --git a/assets/icons/flags/MF.svg b/assets/icons/flags/MF.svg new file mode 100644 --- /dev/null +++ b/assets/icons/flags/MF.svg @@ -0,0 +1,1 @@ + diff --git a/assets/icons/flags/MG.svg b/assets/icons/flags/MG.svg new file mode 100644 --- /dev/null +++ b/assets/icons/flags/MG.svg @@ -0,0 +1,1 @@ + diff --git a/assets/icons/flags/MH.svg b/assets/icons/flags/MH.svg new file mode 100644 --- /dev/null +++ b/assets/icons/flags/MH.svg @@ -0,0 +1,1 @@ + diff --git a/assets/icons/flags/MK.svg b/assets/icons/flags/MK.svg new file mode 100644 --- /dev/null +++ b/assets/icons/flags/MK.svg @@ -0,0 +1,1 @@ + diff --git a/assets/icons/flags/ML.svg b/assets/icons/flags/ML.svg new file mode 100644 --- /dev/null +++ b/assets/icons/flags/ML.svg @@ -0,0 +1,1 @@ + diff --git a/assets/icons/flags/MM.svg b/assets/icons/flags/MM.svg new file mode 100644 --- /dev/null +++ b/assets/icons/flags/MM.svg @@ -0,0 +1,1 @@ + diff --git a/assets/icons/flags/MN.svg b/assets/icons/flags/MN.svg new file mode 100644 --- /dev/null +++ b/assets/icons/flags/MN.svg @@ -0,0 +1,1 @@ + diff --git a/assets/icons/flags/MO.svg b/assets/icons/flags/MO.svg new file mode 100644 --- /dev/null +++ b/assets/icons/flags/MO.svg @@ -0,0 +1,1 @@ + diff --git a/assets/icons/flags/MP.svg b/assets/icons/flags/MP.svg new file mode 100644 --- /dev/null +++ b/assets/icons/flags/MP.svg @@ -0,0 +1,1 @@ + diff --git a/assets/icons/flags/MQ.svg b/assets/icons/flags/MQ.svg new file mode 100644 --- /dev/null +++ b/assets/icons/flags/MQ.svg @@ -0,0 +1,1 @@ + diff --git a/assets/icons/flags/MR.svg b/assets/icons/flags/MR.svg new file mode 100644 --- /dev/null +++ b/assets/icons/flags/MR.svg @@ -0,0 +1,1 @@ + diff --git a/assets/icons/flags/MS.svg b/assets/icons/flags/MS.svg new file mode 100644 --- /dev/null +++ b/assets/icons/flags/MS.svg @@ -0,0 +1,1 @@ + diff --git a/assets/icons/flags/MT.svg b/assets/icons/flags/MT.svg new file mode 100644 --- /dev/null +++ b/assets/icons/flags/MT.svg @@ -0,0 +1,1 @@ + diff --git a/assets/icons/flags/MU.svg b/assets/icons/flags/MU.svg new file mode 100644 --- /dev/null +++ b/assets/icons/flags/MU.svg @@ -0,0 +1,1 @@ + diff --git a/assets/icons/flags/MV.svg b/assets/icons/flags/MV.svg new file mode 100644 --- /dev/null +++ b/assets/icons/flags/MV.svg @@ -0,0 +1,1 @@ + diff --git a/assets/icons/flags/MW.svg b/assets/icons/flags/MW.svg new file mode 100644 --- /dev/null +++ b/assets/icons/flags/MW.svg @@ -0,0 +1,1 @@ + diff --git a/assets/icons/flags/MX.svg b/assets/icons/flags/MX.svg new file mode 100644 --- /dev/null +++ b/assets/icons/flags/MX.svg @@ -0,0 +1,1 @@ + diff --git a/assets/icons/flags/MY.svg b/assets/icons/flags/MY.svg new file mode 100644 --- /dev/null +++ b/assets/icons/flags/MY.svg @@ -0,0 +1,1 @@ + diff --git a/assets/icons/flags/MZ.svg b/assets/icons/flags/MZ.svg new file mode 100644 --- /dev/null +++ b/assets/icons/flags/MZ.svg @@ -0,0 +1,1 @@ + diff --git a/assets/icons/flags/NA.svg b/assets/icons/flags/NA.svg new file mode 100644 --- /dev/null +++ b/assets/icons/flags/NA.svg @@ -0,0 +1,1 @@ + diff --git a/assets/icons/flags/NC.svg b/assets/icons/flags/NC.svg new file mode 100644 --- /dev/null +++ b/assets/icons/flags/NC.svg @@ -0,0 +1,1 @@ + diff --git a/assets/icons/flags/NE.svg b/assets/icons/flags/NE.svg new file mode 100644 --- /dev/null +++ b/assets/icons/flags/NE.svg @@ -0,0 +1,1 @@ + diff --git a/assets/icons/flags/NF.svg b/assets/icons/flags/NF.svg new file mode 100644 --- /dev/null +++ b/assets/icons/flags/NF.svg @@ -0,0 +1,1 @@ + diff --git a/assets/icons/flags/NG.svg b/assets/icons/flags/NG.svg new file mode 100644 --- /dev/null +++ b/assets/icons/flags/NG.svg @@ -0,0 +1,1 @@ + diff --git a/assets/icons/flags/NI.svg b/assets/icons/flags/NI.svg new file mode 100644 --- /dev/null +++ b/assets/icons/flags/NI.svg @@ -0,0 +1,1 @@ + diff --git a/assets/icons/flags/NL.svg b/assets/icons/flags/NL.svg new file mode 100644 --- /dev/null +++ b/assets/icons/flags/NL.svg @@ -0,0 +1,1 @@ + diff --git a/assets/icons/flags/NO.svg b/assets/icons/flags/NO.svg new file mode 100644 --- /dev/null +++ b/assets/icons/flags/NO.svg @@ -0,0 +1,1 @@ + diff --git a/assets/icons/flags/NP.svg b/assets/icons/flags/NP.svg new file mode 100644 --- /dev/null +++ b/assets/icons/flags/NP.svg @@ -0,0 +1,1 @@ + diff --git a/assets/icons/flags/NR.svg b/assets/icons/flags/NR.svg new file mode 100644 --- /dev/null +++ b/assets/icons/flags/NR.svg @@ -0,0 +1,1 @@ + diff --git a/assets/icons/flags/NU.svg b/assets/icons/flags/NU.svg new file mode 100644 --- /dev/null +++ b/assets/icons/flags/NU.svg @@ -0,0 +1,1 @@ + diff --git a/assets/icons/flags/NZ.svg b/assets/icons/flags/NZ.svg new file mode 100644 --- /dev/null +++ b/assets/icons/flags/NZ.svg @@ -0,0 +1,1 @@ + diff --git a/assets/icons/flags/OM.svg b/assets/icons/flags/OM.svg new file mode 100644 --- /dev/null +++ b/assets/icons/flags/OM.svg @@ -0,0 +1,1 @@ + diff --git a/assets/icons/flags/PA.svg b/assets/icons/flags/PA.svg new file mode 100644 --- /dev/null +++ b/assets/icons/flags/PA.svg @@ -0,0 +1,1 @@ + diff --git a/assets/icons/flags/PE.svg b/assets/icons/flags/PE.svg new file mode 100644 --- /dev/null +++ b/assets/icons/flags/PE.svg @@ -0,0 +1,1 @@ + diff --git a/assets/icons/flags/PF.svg b/assets/icons/flags/PF.svg new file mode 100644 --- /dev/null +++ b/assets/icons/flags/PF.svg @@ -0,0 +1,1 @@ + diff --git a/assets/icons/flags/PG.svg b/assets/icons/flags/PG.svg new file mode 100644 --- /dev/null +++ b/assets/icons/flags/PG.svg @@ -0,0 +1,1 @@ + diff --git a/assets/icons/flags/PH.svg b/assets/icons/flags/PH.svg new file mode 100644 --- /dev/null +++ b/assets/icons/flags/PH.svg @@ -0,0 +1,1 @@ + diff --git a/assets/icons/flags/PK.svg b/assets/icons/flags/PK.svg new file mode 100644 --- /dev/null +++ b/assets/icons/flags/PK.svg @@ -0,0 +1,1 @@ + diff --git a/assets/icons/flags/PL.svg b/assets/icons/flags/PL.svg new file mode 100644 --- /dev/null +++ b/assets/icons/flags/PL.svg @@ -0,0 +1,1 @@ + diff --git a/assets/icons/flags/PM.svg b/assets/icons/flags/PM.svg new file mode 100644 --- /dev/null +++ b/assets/icons/flags/PM.svg @@ -0,0 +1,1 @@ + diff --git a/assets/icons/flags/PN.svg b/assets/icons/flags/PN.svg new file mode 100644 --- /dev/null +++ b/assets/icons/flags/PN.svg @@ -0,0 +1,1 @@ + diff --git a/assets/icons/flags/PR.svg b/assets/icons/flags/PR.svg new file mode 100644 --- /dev/null +++ b/assets/icons/flags/PR.svg @@ -0,0 +1,1 @@ + diff --git a/assets/icons/flags/PS.svg b/assets/icons/flags/PS.svg new file mode 100644 --- /dev/null +++ b/assets/icons/flags/PS.svg @@ -0,0 +1,1 @@ + diff --git a/assets/icons/flags/PT.svg b/assets/icons/flags/PT.svg new file mode 100644 --- /dev/null +++ b/assets/icons/flags/PT.svg @@ -0,0 +1,1 @@ + diff --git a/assets/icons/flags/PW.svg b/assets/icons/flags/PW.svg new file mode 100644 --- /dev/null +++ b/assets/icons/flags/PW.svg @@ -0,0 +1,1 @@ + diff --git a/assets/icons/flags/PY.svg b/assets/icons/flags/PY.svg new file mode 100644 --- /dev/null +++ b/assets/icons/flags/PY.svg @@ -0,0 +1,1 @@ + diff --git a/assets/icons/flags/QA.svg b/assets/icons/flags/QA.svg new file mode 100644 --- /dev/null +++ b/assets/icons/flags/QA.svg @@ -0,0 +1,1 @@ + diff --git a/assets/icons/flags/RE.svg b/assets/icons/flags/RE.svg new file mode 100644 --- /dev/null +++ b/assets/icons/flags/RE.svg @@ -0,0 +1,1 @@ + diff --git a/assets/icons/flags/README.md b/assets/icons/flags/README.md new file mode 100644 --- /dev/null +++ b/assets/icons/flags/README.md @@ -0,0 +1,4 @@ +The flags in this directory are from the excellent [country-flag-icons](https://gitlab.com/catamphetamine/country-flag-icons). + +MIT License +Copyright (c) 2020 @catamphetamine diff --git a/assets/icons/flags/RO.svg b/assets/icons/flags/RO.svg new file mode 100644 --- /dev/null +++ b/assets/icons/flags/RO.svg @@ -0,0 +1,1 @@ + diff --git a/assets/icons/flags/RS.svg b/assets/icons/flags/RS.svg new file mode 100644 --- /dev/null +++ b/assets/icons/flags/RS.svg @@ -0,0 +1,1 @@ + diff --git a/assets/icons/flags/RU.svg b/assets/icons/flags/RU.svg new file mode 100644 --- /dev/null +++ b/assets/icons/flags/RU.svg @@ -0,0 +1,1 @@ + diff --git a/assets/icons/flags/RW.svg b/assets/icons/flags/RW.svg new file mode 100644 --- /dev/null +++ b/assets/icons/flags/RW.svg @@ -0,0 +1,1 @@ + diff --git a/assets/icons/flags/SA.svg b/assets/icons/flags/SA.svg new file mode 100644 --- /dev/null +++ b/assets/icons/flags/SA.svg @@ -0,0 +1,1 @@ + diff --git a/assets/icons/flags/SB.svg b/assets/icons/flags/SB.svg new file mode 100644 --- /dev/null +++ b/assets/icons/flags/SB.svg @@ -0,0 +1,1 @@ + diff --git a/assets/icons/flags/SC.svg b/assets/icons/flags/SC.svg new file mode 100644 --- /dev/null +++ b/assets/icons/flags/SC.svg @@ -0,0 +1,1 @@ + diff --git a/assets/icons/flags/SD.svg b/assets/icons/flags/SD.svg new file mode 100644 --- /dev/null +++ b/assets/icons/flags/SD.svg @@ -0,0 +1,1 @@ + diff --git a/assets/icons/flags/SE.svg b/assets/icons/flags/SE.svg new file mode 100644 --- /dev/null +++ b/assets/icons/flags/SE.svg @@ -0,0 +1,1 @@ + diff --git a/assets/icons/flags/SG.svg b/assets/icons/flags/SG.svg new file mode 100644 --- /dev/null +++ b/assets/icons/flags/SG.svg @@ -0,0 +1,1 @@ + diff --git a/assets/icons/flags/SH.svg b/assets/icons/flags/SH.svg new file mode 100644 --- /dev/null +++ b/assets/icons/flags/SH.svg @@ -0,0 +1,1 @@ + diff --git a/assets/icons/flags/SI.svg b/assets/icons/flags/SI.svg new file mode 100644 --- /dev/null +++ b/assets/icons/flags/SI.svg @@ -0,0 +1,1 @@ + diff --git a/assets/icons/flags/SJ.svg b/assets/icons/flags/SJ.svg new file mode 100644 --- /dev/null +++ b/assets/icons/flags/SJ.svg @@ -0,0 +1,1 @@ + diff --git a/assets/icons/flags/SK.svg b/assets/icons/flags/SK.svg new file mode 100644 --- /dev/null +++ b/assets/icons/flags/SK.svg @@ -0,0 +1,1 @@ + diff --git a/assets/icons/flags/SL.svg b/assets/icons/flags/SL.svg new file mode 100644 --- /dev/null +++ b/assets/icons/flags/SL.svg @@ -0,0 +1,1 @@ + diff --git a/assets/icons/flags/SM.svg b/assets/icons/flags/SM.svg new file mode 100644 --- /dev/null +++ b/assets/icons/flags/SM.svg @@ -0,0 +1,1 @@ + diff --git a/assets/icons/flags/SN.svg b/assets/icons/flags/SN.svg new file mode 100644 --- /dev/null +++ b/assets/icons/flags/SN.svg @@ -0,0 +1,1 @@ + diff --git a/assets/icons/flags/SO.svg b/assets/icons/flags/SO.svg new file mode 100644 --- /dev/null +++ b/assets/icons/flags/SO.svg @@ -0,0 +1,1 @@ + diff --git a/assets/icons/flags/SR.svg b/assets/icons/flags/SR.svg new file mode 100644 --- /dev/null +++ b/assets/icons/flags/SR.svg @@ -0,0 +1,1 @@ + diff --git a/assets/icons/flags/SS.svg b/assets/icons/flags/SS.svg new file mode 100644 --- /dev/null +++ b/assets/icons/flags/SS.svg @@ -0,0 +1,1 @@ + diff --git a/assets/icons/flags/ST.svg b/assets/icons/flags/ST.svg new file mode 100644 --- /dev/null +++ b/assets/icons/flags/ST.svg @@ -0,0 +1,1 @@ + diff --git a/assets/icons/flags/SV.svg b/assets/icons/flags/SV.svg new file mode 100644 --- /dev/null +++ b/assets/icons/flags/SV.svg @@ -0,0 +1,1 @@ + diff --git a/assets/icons/flags/SX.svg b/assets/icons/flags/SX.svg new file mode 100644 --- /dev/null +++ b/assets/icons/flags/SX.svg @@ -0,0 +1,1 @@ + diff --git a/assets/icons/flags/SY.svg b/assets/icons/flags/SY.svg new file mode 100644 --- /dev/null +++ b/assets/icons/flags/SY.svg @@ -0,0 +1,1 @@ + diff --git a/assets/icons/flags/SZ.svg b/assets/icons/flags/SZ.svg new file mode 100644 --- /dev/null +++ b/assets/icons/flags/SZ.svg @@ -0,0 +1,1 @@ + diff --git a/assets/icons/flags/TA.svg b/assets/icons/flags/TA.svg new file mode 100644 --- /dev/null +++ b/assets/icons/flags/TA.svg @@ -0,0 +1,1 @@ + diff --git a/assets/icons/flags/TC.svg b/assets/icons/flags/TC.svg new file mode 100644 --- /dev/null +++ b/assets/icons/flags/TC.svg @@ -0,0 +1,1 @@ + diff --git a/assets/icons/flags/TD.svg b/assets/icons/flags/TD.svg new file mode 100644 --- /dev/null +++ b/assets/icons/flags/TD.svg @@ -0,0 +1,1 @@ + diff --git a/assets/icons/flags/TF.svg b/assets/icons/flags/TF.svg new file mode 100644 --- /dev/null +++ b/assets/icons/flags/TF.svg @@ -0,0 +1,1 @@ + diff --git a/assets/icons/flags/TG.svg b/assets/icons/flags/TG.svg new file mode 100644 --- /dev/null +++ b/assets/icons/flags/TG.svg @@ -0,0 +1,1 @@ + diff --git a/assets/icons/flags/TH.svg b/assets/icons/flags/TH.svg new file mode 100644 --- /dev/null +++ b/assets/icons/flags/TH.svg @@ -0,0 +1,1 @@ + diff --git a/assets/icons/flags/TJ.svg b/assets/icons/flags/TJ.svg new file mode 100644 --- /dev/null +++ b/assets/icons/flags/TJ.svg @@ -0,0 +1,1 @@ + diff --git a/assets/icons/flags/TK.svg b/assets/icons/flags/TK.svg new file mode 100644 --- /dev/null +++ b/assets/icons/flags/TK.svg @@ -0,0 +1,1 @@ + diff --git a/assets/icons/flags/TL.svg b/assets/icons/flags/TL.svg new file mode 100644 --- /dev/null +++ b/assets/icons/flags/TL.svg @@ -0,0 +1,1 @@ + diff --git a/assets/icons/flags/TM.svg b/assets/icons/flags/TM.svg new file mode 100644 --- /dev/null +++ b/assets/icons/flags/TM.svg @@ -0,0 +1,1 @@ + diff --git a/assets/icons/flags/TN.svg b/assets/icons/flags/TN.svg new file mode 100644 --- /dev/null +++ b/assets/icons/flags/TN.svg @@ -0,0 +1,1 @@ + diff --git a/assets/icons/flags/TO.svg b/assets/icons/flags/TO.svg new file mode 100644 --- /dev/null +++ b/assets/icons/flags/TO.svg @@ -0,0 +1,1 @@ + diff --git a/assets/icons/flags/TR.svg b/assets/icons/flags/TR.svg new file mode 100644 --- /dev/null +++ b/assets/icons/flags/TR.svg @@ -0,0 +1,1 @@ + diff --git a/assets/icons/flags/TT.svg b/assets/icons/flags/TT.svg new file mode 100644 --- /dev/null +++ b/assets/icons/flags/TT.svg @@ -0,0 +1,1 @@ + diff --git a/assets/icons/flags/TV.svg b/assets/icons/flags/TV.svg new file mode 100644 --- /dev/null +++ b/assets/icons/flags/TV.svg @@ -0,0 +1,1 @@ + diff --git a/assets/icons/flags/TW.svg b/assets/icons/flags/TW.svg new file mode 100644 --- /dev/null +++ b/assets/icons/flags/TW.svg @@ -0,0 +1,1 @@ + diff --git a/assets/icons/flags/TZ.svg b/assets/icons/flags/TZ.svg new file mode 100644 --- /dev/null +++ b/assets/icons/flags/TZ.svg @@ -0,0 +1,1 @@ + diff --git a/assets/icons/flags/UA.svg b/assets/icons/flags/UA.svg new file mode 100644 --- /dev/null +++ b/assets/icons/flags/UA.svg @@ -0,0 +1,1 @@ + diff --git a/assets/icons/flags/UG.svg b/assets/icons/flags/UG.svg new file mode 100644 --- /dev/null +++ b/assets/icons/flags/UG.svg @@ -0,0 +1,1 @@ + diff --git a/assets/icons/flags/UM.svg b/assets/icons/flags/UM.svg new file mode 100644 --- /dev/null +++ b/assets/icons/flags/UM.svg @@ -0,0 +1,1 @@ + diff --git a/assets/icons/flags/US.svg b/assets/icons/flags/US.svg new file mode 100644 --- /dev/null +++ b/assets/icons/flags/US.svg @@ -0,0 +1,1 @@ + diff --git a/assets/icons/flags/UY.svg b/assets/icons/flags/UY.svg new file mode 100644 --- /dev/null +++ b/assets/icons/flags/UY.svg @@ -0,0 +1,1 @@ + diff --git a/assets/icons/flags/UZ.svg b/assets/icons/flags/UZ.svg new file mode 100644 --- /dev/null +++ b/assets/icons/flags/UZ.svg @@ -0,0 +1,1 @@ + diff --git a/assets/icons/flags/VA.svg b/assets/icons/flags/VA.svg new file mode 100644 --- /dev/null +++ b/assets/icons/flags/VA.svg @@ -0,0 +1,1 @@ + diff --git a/assets/icons/flags/VC.svg b/assets/icons/flags/VC.svg new file mode 100644 --- /dev/null +++ b/assets/icons/flags/VC.svg @@ -0,0 +1,1 @@ + diff --git a/assets/icons/flags/VE.svg b/assets/icons/flags/VE.svg new file mode 100644 --- /dev/null +++ b/assets/icons/flags/VE.svg @@ -0,0 +1,1 @@ + diff --git a/assets/icons/flags/VG.svg b/assets/icons/flags/VG.svg new file mode 100644 --- /dev/null +++ b/assets/icons/flags/VG.svg @@ -0,0 +1,1 @@ + diff --git a/assets/icons/flags/VI.svg b/assets/icons/flags/VI.svg new file mode 100644 --- /dev/null +++ b/assets/icons/flags/VI.svg @@ -0,0 +1,1 @@ + diff --git a/assets/icons/flags/VN.svg b/assets/icons/flags/VN.svg new file mode 100644 --- /dev/null +++ b/assets/icons/flags/VN.svg @@ -0,0 +1,1 @@ + diff --git a/assets/icons/flags/VU.svg b/assets/icons/flags/VU.svg new file mode 100644 --- /dev/null +++ b/assets/icons/flags/VU.svg @@ -0,0 +1,1 @@ + diff --git a/assets/icons/flags/WF.svg b/assets/icons/flags/WF.svg new file mode 100644 --- /dev/null +++ b/assets/icons/flags/WF.svg @@ -0,0 +1,1 @@ + diff --git a/assets/icons/flags/WS.svg b/assets/icons/flags/WS.svg new file mode 100644 --- /dev/null +++ b/assets/icons/flags/WS.svg @@ -0,0 +1,1 @@ + diff --git a/assets/icons/flags/XK.svg b/assets/icons/flags/XK.svg new file mode 100644 --- /dev/null +++ b/assets/icons/flags/XK.svg @@ -0,0 +1,1 @@ + diff --git a/assets/icons/flags/YE.svg b/assets/icons/flags/YE.svg new file mode 100644 --- /dev/null +++ b/assets/icons/flags/YE.svg @@ -0,0 +1,1 @@ + diff --git a/assets/icons/flags/YT.svg b/assets/icons/flags/YT.svg new file mode 100644 --- /dev/null +++ b/assets/icons/flags/YT.svg @@ -0,0 +1,1 @@ + diff --git a/assets/icons/flags/ZA.svg b/assets/icons/flags/ZA.svg new file mode 100644 --- /dev/null +++ b/assets/icons/flags/ZA.svg @@ -0,0 +1,1 @@ + diff --git a/assets/icons/flags/ZM.svg b/assets/icons/flags/ZM.svg new file mode 100644 --- /dev/null +++ b/assets/icons/flags/ZM.svg @@ -0,0 +1,1 @@ + diff --git a/assets/icons/flags/ZW.svg b/assets/icons/flags/ZW.svg new file mode 100644 --- /dev/null +++ b/assets/icons/flags/ZW.svg @@ -0,0 +1,1 @@ + diff --git a/src/components/Select/index.tsx b/src/components/Select/index.tsx --- a/src/components/Select/index.tsx +++ b/src/components/Select/index.tsx @@ -7,7 +7,7 @@ useState, } from 'react' import {View} from 'react-native' -import {msg, Trans} from '@lingui/macro' +import {msg} from '@lingui/macro' import {useLingui} from '@lingui/react' import {useTheme} from '#/alf' @@ -15,9 +15,9 @@ import {Button, ButtonIcon, ButtonText} from '#/components/Button' import * as Dialog from '#/components/Dialog' import {useInteractionState} from '#/components/hooks/useInteractionState' -import {Check_Stroke2_Corner0_Rounded as CheckIcon} from '#/components/icons/Check' import {ChevronTopBottom_Stroke2_Corner0_Rounded as ChevronUpDownIcon} from '#/components/icons/Chevron' import {Text} from '#/components/Typography' +import {BaseRadio} from '../forms/Toggle' import { type ContentProps, type IconProps, @@ -122,10 +122,12 @@ const t = useTheme() let text = value && children(value) - if (typeof text !== 'string') text = placeholder + if (!text) text = placeholder return ( - {text} + + {text} + ) } @@ -162,15 +164,14 @@ } function ContentInner({ + label, items, renderItem, valueExtractor, ...context }: ContentProps & ContextType) { - const control = Dialog.useDialogContext() - const {_} = useLingui() - const [headerHeight, setHeaderHeight] = useState(50) + const [headerHeight, setHeaderHeight] = useState(61) const render = useCallback( ({item, index}: {item: T; index: number}) => { @@ -179,33 +180,26 @@ [renderItem, context.value], ) - const doneButton = useCallback( - () => ( - - ), - [control, _], - ) - return ( setHeaderHeight(evt.nativeEvent.layout.height)} - style={[a.absolute, a.top_0, a.left_0, a.right_0, a.z_10]}> - - Select an option + style={[ + a.absolute, + a.top_0, + a.left_0, + a.right_0, + a.z_10, + a.pt_3xl, + a.pb_sm, + a.border_b_0, + ]}> + + {label ?? _(msg`Select an option`)} + {children} @@ -273,20 +268,48 @@ ) } -export function ItemText({children}: ItemTextProps) { +export function ItemText({children, style, emoji}: ItemTextProps) { const {selected} = useItemContext() - const t = useTheme() - // eslint-disable-next-line bsky-internal/avoid-unwrapped-text return ( - - {children} - + + {children} + ) } -export function ItemIndicator({icon: Icon = CheckIcon}: ItemIndicatorProps) { - const {selected} = useItemContext() +export function ItemIndicator({icon: Icon}: ItemIndicatorProps) { + const {selected, focused, hovered} = useItemContext() - return {selected && } + if (Icon) { + return {selected && } + } + + return ( + + ) +} + +export function Separator() { + const t = useTheme() + + return ( + + ) } diff --git a/src/components/Select/index.web.tsx b/src/components/Select/index.web.tsx --- a/src/components/Select/index.web.tsx +++ b/src/components/Select/index.web.tsx @@ -2,7 +2,8 @@ import {View} from 'react-native' import {Select as RadixSelect} from 'radix-ui' -import {flatten, useTheme} from '#/alf' +import {useA11y} from '#/state/a11y' +import {flatten, useTheme, web} from '#/alf' import {atoms as a} from '#/alf' import {useInteractionState} from '#/components/hooks/useInteractionState' import {Check_Stroke2_Corner0_Rounded as CheckIcon} from '#/components/icons/Check' @@ -16,6 +17,7 @@ type IconProps, type ItemIndicatorProps, type ItemProps, + type ItemTextProps, type RadixPassThroughTriggerProps, type RootProps, type TriggerProps, @@ -97,7 +99,6 @@ a.flex, a.relative, t.atoms.bg_contrast_50, - a.w_full, a.align_center, a.gap_sm, a.justify_between, @@ -121,10 +122,21 @@ } } -export function ValueText({children: _, style, ...props}: ValueProps) { +export function ValueText({ + children, + webOverrideValue, + style, + ...props +}: ValueProps) { + let content + + if (webOverrideValue && children) { + content = children(webOverrideValue) + } + return ( - + {content} ) } @@ -145,6 +157,7 @@ }: ContentProps) { const t = useTheme() const selectedValue = useContext(SelectedValueContext) + const {reduceMotionEnabled} = useA11y() const scrollBtnStyles: React.CSSProperties[] = [ a.absolute, @@ -186,8 +199,11 @@ + className="radix-select-content" + // prevent the keyboard shortcut for opening the composer + onKeyDown={evt => evt.stopPropagation()}> @@ -261,7 +278,7 @@ t.atoms.text, a.relative, a.flex, - {minHeight: 25, paddingLeft: 30, paddingRight: 35}, + {minHeight: 25, paddingLeft: 30, paddingRight: 8}, a.user_select_none, a.align_center, a.rounded_xs, @@ -278,7 +295,15 @@ ) } -export const ItemText = RadixSelect.ItemText +export const ItemText = function ItemText({children, style}: ItemTextProps) { + return ( + + + {children} + + + ) +} export function ItemIndicator({icon: Icon = CheckIcon}: ItemIndicatorProps) { return ( @@ -292,5 +317,22 @@ ])}> + ) +} + +export function Separator() { + const t = useTheme() + + return ( + ) } diff --git a/src/components/Select/types.ts b/src/components/Select/types.ts --- a/src/components/Select/types.ts +++ b/src/components/Select/types.ts @@ -123,9 +123,16 @@ /** * Only needed for native. Extracts the label from an item. Defaults to `item => item.label` */ - children?: (value: any) => string + children?: (value: any) => React.ReactNode placeholder?: string style?: StyleProp + /** + * By default, web just extracts the component from inside the dropdown and portals it in here. + * If you want to override this, pass a value that will then be rendered via `children(value)` + * + * @platform web + */ + webOverrideValue?: any } /* @@ -137,6 +144,12 @@ export type IconProps = TextStyleProp export type ContentProps = { + /** + * Label at the top of the sheet on native. + * + * @default "Select an option" + */ + label?: string /** * Items to render. Recommended to be in the form {value: string, label: string} - if not, * you need to provide a `valueExtractor` function to extract the value from an item and @@ -180,6 +193,8 @@ export type ItemTextProps = { children: React.ReactNode + style?: StyleProp + emoji?: boolean } export type ItemIndicatorProps = { diff --git a/src/components/ageAssurance/AgeAssuranceInitDialog.tsx b/src/components/ageAssurance/AgeAssuranceInitDialog.tsx --- a/src/components/ageAssurance/AgeAssuranceInitDialog.tsx +++ b/src/components/ageAssurance/AgeAssuranceInitDialog.tsx @@ -289,6 +289,7 @@ Your preferred language { setLanguage(value) diff --git a/src/screens/Settings/LanguageSettings.tsx b/src/screens/Settings/LanguageSettings.tsx --- a/src/screens/Settings/LanguageSettings.tsx +++ b/src/screens/Settings/LanguageSettings.tsx @@ -100,6 +100,7 @@ ( @@ -133,6 +134,7 @@ ( diff --git a/src/components/forms/Toggle/index.tsx b/src/components/forms/Toggle/index.tsx --- a/src/components/forms/Toggle/index.tsx +++ b/src/components/forms/Toggle/index.tsx @@ -503,9 +503,23 @@ } export function Radio() { + const props = useContext(ItemContext) + + return +} + +export function BaseRadio({ + hovered, + focused, + selected, + disabled, + isInvalid, +}: Pick< + ItemState, + 'hovered' | 'focused' | 'selected' | 'disabled' | 'isInvalid' +>) { const t = useTheme() - const {selected, hovered, focused, disabled, isInvalid} = - useContext(ItemContext) + const {baseStyles, baseHoverStyles, indicatorStyles} = createSharedToggleStyles({ theme: t, @@ -515,6 +529,7 @@ disabled, isInvalid, }) + return ( + getDefaultCountry(location), + ) const inputRef = React.useRef(null) @@ -118,6 +126,20 @@ }} label="Input" /> + + +

InternationalPhoneCodeSelect

+ + + + + + + +